From 8f9e27912e0df0bd541aa40dc1082e46d7d74a3e Mon Sep 17 00:00:00 2001 From: lutovich Date: Fri, 28 Apr 2017 12:48:56 +0200 Subject: [PATCH] JS driver v1.3.0-beta01: Checking in transpiled files for bower --- lib/browser/neo4j-web.js | 2030 ++-- lib/browser/neo4j-web.min.js | 32 +- lib/browser/neo4j-web.test.js | 13629 ++++++++++++++++------ lib/v1/driver.js | 40 +- lib/v1/index.js | 74 +- lib/v1/internal/ch-config.js | 87 + lib/v1/internal/ch-dummy.js | 7 +- lib/v1/internal/ch-node.js | 94 +- lib/v1/internal/ch-websocket.js | 19 +- lib/v1/internal/connection-providers.js | 188 +- lib/v1/internal/connector.js | 171 +- lib/v1/internal/host-name-resolvers.js | 6 +- lib/v1/internal/rediscovery.js | 87 +- lib/v1/internal/round-robin-array.js | 9 + lib/v1/internal/routing-table.js | 84 +- lib/v1/internal/routing-util.js | 163 + lib/v1/internal/server-version.js | 123 + lib/v1/internal/util.js | 72 +- lib/v1/routing-driver.js | 43 +- lib/v1/session.js | 13 +- 20 files changed, 12215 insertions(+), 4756 deletions(-) create mode 100644 lib/v1/internal/ch-config.js create mode 100644 lib/v1/internal/routing-util.js create mode 100644 lib/v1/internal/server-version.js diff --git a/lib/browser/neo4j-web.js b/lib/browser/neo4j-web.js index e7bf8bf24..45b7b4711 100644 --- a/lib/browser/neo4j-web.js +++ b/lib/browser/neo4j-web.js @@ -9,7 +9,7 @@ asn1.constants = require('./asn1/constants'); asn1.decoders = require('./asn1/decoders'); asn1.encoders = require('./asn1/encoders'); -},{"./asn1/api":2,"./asn1/base":4,"./asn1/constants":8,"./asn1/decoders":10,"./asn1/encoders":13,"bn.js":36}],2:[function(require,module,exports){ +},{"./asn1/api":2,"./asn1/base":4,"./asn1/constants":8,"./asn1/decoders":10,"./asn1/encoders":13,"bn.js":37}],2:[function(require,module,exports){ var asn1 = require('../asn1'); var inherits = require('inherits'); @@ -72,7 +72,7 @@ Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) { return this._getEncoder(enc).encode(data, reporter); }; -},{"../asn1":1,"inherits":223,"vm":270}],3:[function(require,module,exports){ +},{"../asn1":1,"inherits":224,"vm":271}],3:[function(require,module,exports){ var inherits = require('inherits'); var Reporter = require('../base').Reporter; var Buffer = require('buffer').Buffer; @@ -190,7 +190,7 @@ EncoderBuffer.prototype.join = function join(out, offset) { return out; }; -},{"../base":4,"buffer":66,"inherits":223}],4:[function(require,module,exports){ +},{"../base":4,"buffer":67,"inherits":224}],4:[function(require,module,exports){ var base = exports; base.Reporter = require('./reporter').Reporter; @@ -834,7 +834,7 @@ Node.prototype._isPrintstr = function isPrintstr(str) { return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str); }; -},{"../base":4,"minimalistic-assert":227}],6:[function(require,module,exports){ +},{"../base":4,"minimalistic-assert":228}],6:[function(require,module,exports){ var inherits = require('inherits'); function Reporter(options) { @@ -957,7 +957,7 @@ ReporterError.prototype.rethrow = function rethrow(msg) { return this; }; -},{"inherits":223}],7:[function(require,module,exports){ +},{"inherits":224}],7:[function(require,module,exports){ var constants = require('../constants'); exports.tagClass = { @@ -1348,7 +1348,7 @@ function derDecodeLen(buf, primitive, fail) { return len; } -},{"../../asn1":1,"inherits":223}],10:[function(require,module,exports){ +},{"../../asn1":1,"inherits":224}],10:[function(require,module,exports){ var decoders = exports; decoders.der = require('./der'); @@ -1405,7 +1405,7 @@ PEMDecoder.prototype.decode = function decode(data, options) { return DERDecoder.prototype.decode.call(this, input, options); }; -},{"./der":9,"buffer":66,"inherits":223}],12:[function(require,module,exports){ +},{"./der":9,"buffer":67,"inherits":224}],12:[function(require,module,exports){ var inherits = require('inherits'); var Buffer = require('buffer').Buffer; @@ -1702,7 +1702,7 @@ function encodeTag(tag, primitive, cls, reporter) { return res; } -},{"../../asn1":1,"buffer":66,"inherits":223}],13:[function(require,module,exports){ +},{"../../asn1":1,"buffer":67,"inherits":224}],13:[function(require,module,exports){ var encoders = exports; encoders.der = require('./der'); @@ -1731,33 +1731,33 @@ PEMEncoder.prototype.encode = function encode(data, options) { return out.join('\n'); }; -},{"./der":12,"inherits":223}],15:[function(require,module,exports){ +},{"./der":12,"inherits":224}],15:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/array/from"), __esModule: true }; -},{"core-js/library/fn/array/from":68}],16:[function(require,module,exports){ +},{"core-js/library/fn/array/from":69}],16:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/json/stringify"), __esModule: true }; -},{"core-js/library/fn/json/stringify":69}],17:[function(require,module,exports){ +},{"core-js/library/fn/json/stringify":70}],17:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/assign"), __esModule: true }; -},{"core-js/library/fn/object/assign":70}],18:[function(require,module,exports){ +},{"core-js/library/fn/object/assign":71}],18:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/create"), __esModule: true }; -},{"core-js/library/fn/object/create":71}],19:[function(require,module,exports){ +},{"core-js/library/fn/object/create":72}],19:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/define-property"), __esModule: true }; -},{"core-js/library/fn/object/define-property":72}],20:[function(require,module,exports){ +},{"core-js/library/fn/object/define-property":73}],20:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/get-own-property-descriptor"), __esModule: true }; -},{"core-js/library/fn/object/get-own-property-descriptor":73}],21:[function(require,module,exports){ +},{"core-js/library/fn/object/get-own-property-descriptor":74}],21:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/get-prototype-of"), __esModule: true }; -},{"core-js/library/fn/object/get-prototype-of":74}],22:[function(require,module,exports){ +},{"core-js/library/fn/object/get-prototype-of":75}],22:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/keys"), __esModule: true }; -},{"core-js/library/fn/object/keys":75}],23:[function(require,module,exports){ +},{"core-js/library/fn/object/keys":76}],23:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/set-prototype-of"), __esModule: true }; -},{"core-js/library/fn/object/set-prototype-of":76}],24:[function(require,module,exports){ +},{"core-js/library/fn/object/set-prototype-of":77}],24:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/promise"), __esModule: true }; -},{"core-js/library/fn/promise":77}],25:[function(require,module,exports){ +},{"core-js/library/fn/promise":78}],25:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/set"), __esModule: true }; -},{"core-js/library/fn/set":78}],26:[function(require,module,exports){ +},{"core-js/library/fn/set":79}],26:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/symbol"), __esModule: true }; -},{"core-js/library/fn/symbol":79}],27:[function(require,module,exports){ +},{"core-js/library/fn/symbol":80}],27:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/symbol/iterator"), __esModule: true }; -},{"core-js/library/fn/symbol/iterator":80}],28:[function(require,module,exports){ +},{"core-js/library/fn/symbol/iterator":81}],28:[function(require,module,exports){ "use strict"; exports.__esModule = true; @@ -1800,6 +1800,31 @@ exports.default = function () { exports.__esModule = true; +var _defineProperty = require("../core-js/object/define-property"); + +var _defineProperty2 = _interopRequireDefault(_defineProperty); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = function (obj, key, value) { + if (key in obj) { + (0, _defineProperty2.default)(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +}; +},{"../core-js/object/define-property":19}],31:[function(require,module,exports){ +"use strict"; + +exports.__esModule = true; + var _getPrototypeOf = require("../core-js/object/get-prototype-of"); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); @@ -1834,7 +1859,7 @@ exports.default = function get(object, property, receiver) { return getter.call(receiver); } }; -},{"../core-js/object/get-own-property-descriptor":20,"../core-js/object/get-prototype-of":21}],31:[function(require,module,exports){ +},{"../core-js/object/get-own-property-descriptor":20,"../core-js/object/get-prototype-of":21}],32:[function(require,module,exports){ "use strict"; exports.__esModule = true; @@ -1868,7 +1893,7 @@ exports.default = function (subClass, superClass) { }); if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass; }; -},{"../core-js/object/create":18,"../core-js/object/set-prototype-of":23,"../helpers/typeof":34}],32:[function(require,module,exports){ +},{"../core-js/object/create":18,"../core-js/object/set-prototype-of":23,"../helpers/typeof":35}],33:[function(require,module,exports){ "use strict"; exports.__esModule = true; @@ -1886,7 +1911,7 @@ exports.default = function (self, call) { return call && ((typeof call === "undefined" ? "undefined" : (0, _typeof3.default)(call)) === "object" || typeof call === "function") ? call : self; }; -},{"../helpers/typeof":34}],33:[function(require,module,exports){ +},{"../helpers/typeof":35}],34:[function(require,module,exports){ "use strict"; exports.__esModule = true; @@ -1908,7 +1933,7 @@ exports.default = function (arr) { return (0, _from2.default)(arr); } }; -},{"../core-js/array/from":15}],34:[function(require,module,exports){ +},{"../core-js/array/from":15}],35:[function(require,module,exports){ "use strict"; exports.__esModule = true; @@ -1930,7 +1955,7 @@ exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.d } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj); }; -},{"../core-js/symbol":26,"../core-js/symbol/iterator":27}],35:[function(require,module,exports){ +},{"../core-js/symbol":26,"../core-js/symbol/iterator":27}],36:[function(require,module,exports){ 'use strict' exports.byteLength = byteLength @@ -2046,7 +2071,7 @@ function fromByteArray (uint8) { return parts.join('') } -},{}],36:[function(require,module,exports){ +},{}],37:[function(require,module,exports){ (function (module, exports) { 'use strict'; @@ -5475,7 +5500,7 @@ function fromByteArray (uint8) { }; })(typeof module === 'undefined' || module, this); -},{}],37:[function(require,module,exports){ +},{}],38:[function(require,module,exports){ var r; module.exports = function rand(len) { @@ -5542,9 +5567,9 @@ if (typeof self === 'object') { } } -},{"crypto":38}],38:[function(require,module,exports){ +},{"crypto":39}],39:[function(require,module,exports){ -},{}],39:[function(require,module,exports){ +},{}],40:[function(require,module,exports){ (function (Buffer){ // based on the aes implimentation in triple sec // https://github.com/keybase/triplesec @@ -5725,7 +5750,7 @@ AES.prototype._doCryptBlock = function (M, keySchedule, SUB_MIX, SBOX) { exports.AES = AES }).call(this,require("buffer").Buffer) -},{"buffer":66}],40:[function(require,module,exports){ +},{"buffer":67}],41:[function(require,module,exports){ (function (Buffer){ var aes = require('./aes') var Transform = require('cipher-base') @@ -5826,7 +5851,7 @@ function xorTest (a, b) { } }).call(this,require("buffer").Buffer) -},{"./aes":39,"./ghash":44,"buffer":66,"buffer-xor":65,"cipher-base":67,"inherits":223}],41:[function(require,module,exports){ +},{"./aes":40,"./ghash":45,"buffer":67,"buffer-xor":66,"cipher-base":68,"inherits":224}],42:[function(require,module,exports){ var ciphers = require('./encrypter') exports.createCipher = exports.Cipher = ciphers.createCipher exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv @@ -5839,7 +5864,7 @@ function getCiphers () { } exports.listCiphers = exports.getCiphers = getCiphers -},{"./decrypter":42,"./encrypter":43,"./modes":45}],42:[function(require,module,exports){ +},{"./decrypter":43,"./encrypter":44,"./modes":46}],43:[function(require,module,exports){ (function (Buffer){ var aes = require('./aes') var Transform = require('cipher-base') @@ -5980,7 +6005,7 @@ exports.createDecipher = createDecipher exports.createDecipheriv = createDecipheriv }).call(this,require("buffer").Buffer) -},{"./aes":39,"./authCipher":40,"./modes":45,"./modes/cbc":46,"./modes/cfb":47,"./modes/cfb1":48,"./modes/cfb8":49,"./modes/ctr":50,"./modes/ecb":51,"./modes/ofb":52,"./streamCipher":53,"buffer":66,"cipher-base":67,"evp_bytestokey":213,"inherits":223}],43:[function(require,module,exports){ +},{"./aes":40,"./authCipher":41,"./modes":46,"./modes/cbc":47,"./modes/cfb":48,"./modes/cfb1":49,"./modes/cfb8":50,"./modes/ctr":51,"./modes/ecb":52,"./modes/ofb":53,"./streamCipher":54,"buffer":67,"cipher-base":68,"evp_bytestokey":214,"inherits":224}],44:[function(require,module,exports){ (function (Buffer){ var aes = require('./aes') var Transform = require('cipher-base') @@ -6106,7 +6131,7 @@ exports.createCipheriv = createCipheriv exports.createCipher = createCipher }).call(this,require("buffer").Buffer) -},{"./aes":39,"./authCipher":40,"./modes":45,"./modes/cbc":46,"./modes/cfb":47,"./modes/cfb1":48,"./modes/cfb8":49,"./modes/ctr":50,"./modes/ecb":51,"./modes/ofb":52,"./streamCipher":53,"buffer":66,"cipher-base":67,"evp_bytestokey":213,"inherits":223}],44:[function(require,module,exports){ +},{"./aes":40,"./authCipher":41,"./modes":46,"./modes/cbc":47,"./modes/cfb":48,"./modes/cfb1":49,"./modes/cfb8":50,"./modes/ctr":51,"./modes/ecb":52,"./modes/ofb":53,"./streamCipher":54,"buffer":67,"cipher-base":68,"evp_bytestokey":214,"inherits":224}],45:[function(require,module,exports){ (function (Buffer){ var zeros = new Buffer(16) zeros.fill(0) @@ -6208,7 +6233,7 @@ function xor (a, b) { } }).call(this,require("buffer").Buffer) -},{"buffer":66}],45:[function(require,module,exports){ +},{"buffer":67}],46:[function(require,module,exports){ exports['aes-128-ecb'] = { cipher: 'AES', key: 128, @@ -6381,7 +6406,7 @@ exports['aes-256-gcm'] = { type: 'auth' } -},{}],46:[function(require,module,exports){ +},{}],47:[function(require,module,exports){ var xor = require('buffer-xor') exports.encrypt = function (self, block) { @@ -6400,7 +6425,7 @@ exports.decrypt = function (self, block) { return xor(out, pad) } -},{"buffer-xor":65}],47:[function(require,module,exports){ +},{"buffer-xor":66}],48:[function(require,module,exports){ (function (Buffer){ var xor = require('buffer-xor') @@ -6435,7 +6460,7 @@ function encryptStart (self, data, decrypt) { } }).call(this,require("buffer").Buffer) -},{"buffer":66,"buffer-xor":65}],48:[function(require,module,exports){ +},{"buffer":67,"buffer-xor":66}],49:[function(require,module,exports){ (function (Buffer){ function encryptByte (self, byteParam, decrypt) { var pad @@ -6473,7 +6498,7 @@ function shiftIn (buffer, value) { } }).call(this,require("buffer").Buffer) -},{"buffer":66}],49:[function(require,module,exports){ +},{"buffer":67}],50:[function(require,module,exports){ (function (Buffer){ function encryptByte (self, byteParam, decrypt) { var pad = self._cipher.encryptBlock(self._prev) @@ -6492,7 +6517,7 @@ exports.encrypt = function (self, chunk, decrypt) { } }).call(this,require("buffer").Buffer) -},{"buffer":66}],50:[function(require,module,exports){ +},{"buffer":67}],51:[function(require,module,exports){ (function (Buffer){ var xor = require('buffer-xor') @@ -6527,7 +6552,7 @@ exports.encrypt = function (self, chunk) { } }).call(this,require("buffer").Buffer) -},{"buffer":66,"buffer-xor":65}],51:[function(require,module,exports){ +},{"buffer":67,"buffer-xor":66}],52:[function(require,module,exports){ exports.encrypt = function (self, block) { return self._cipher.encryptBlock(block) } @@ -6535,7 +6560,7 @@ exports.decrypt = function (self, block) { return self._cipher.decryptBlock(block) } -},{}],52:[function(require,module,exports){ +},{}],53:[function(require,module,exports){ (function (Buffer){ var xor = require('buffer-xor') @@ -6555,7 +6580,7 @@ exports.encrypt = function (self, chunk) { } }).call(this,require("buffer").Buffer) -},{"buffer":66,"buffer-xor":65}],53:[function(require,module,exports){ +},{"buffer":67,"buffer-xor":66}],54:[function(require,module,exports){ (function (Buffer){ var aes = require('./aes') var Transform = require('cipher-base') @@ -6584,7 +6609,7 @@ StreamCipher.prototype._final = function () { } }).call(this,require("buffer").Buffer) -},{"./aes":39,"buffer":66,"cipher-base":67,"inherits":223}],54:[function(require,module,exports){ +},{"./aes":40,"buffer":67,"cipher-base":68,"inherits":224}],55:[function(require,module,exports){ var ebtk = require('evp_bytestokey') var aes = require('browserify-aes/browser') var DES = require('browserify-des') @@ -6659,7 +6684,7 @@ function getCiphers () { } exports.listCiphers = exports.getCiphers = getCiphers -},{"browserify-aes/browser":41,"browserify-aes/modes":45,"browserify-des":55,"browserify-des/modes":56,"evp_bytestokey":213}],55:[function(require,module,exports){ +},{"browserify-aes/browser":42,"browserify-aes/modes":46,"browserify-des":56,"browserify-des/modes":57,"evp_bytestokey":214}],56:[function(require,module,exports){ (function (Buffer){ var CipherBase = require('cipher-base') var des = require('des.js') @@ -6706,7 +6731,7 @@ DES.prototype._final = function () { } }).call(this,require("buffer").Buffer) -},{"buffer":66,"cipher-base":67,"des.js":186,"inherits":223}],56:[function(require,module,exports){ +},{"buffer":67,"cipher-base":68,"des.js":187,"inherits":224}],57:[function(require,module,exports){ exports['des-ecb'] = { key: 8, iv: 0 @@ -6732,7 +6757,7 @@ exports['des-ede'] = { iv: 0 } -},{}],57:[function(require,module,exports){ +},{}],58:[function(require,module,exports){ (function (Buffer){ var bn = require('bn.js'); var randomBytes = require('randombytes'); @@ -6776,7 +6801,7 @@ function getr(priv) { } }).call(this,require("buffer").Buffer) -},{"bn.js":36,"buffer":66,"randombytes":246}],58:[function(require,module,exports){ +},{"bn.js":37,"buffer":67,"randombytes":247}],59:[function(require,module,exports){ (function (Buffer){ 'use strict' exports['RSA-SHA224'] = exports.sha224WithRSAEncryption = { @@ -6852,7 +6877,7 @@ exports['RSA-MD5'] = exports.md5WithRSAEncryption = { } }).call(this,require("buffer").Buffer) -},{"buffer":66}],59:[function(require,module,exports){ +},{"buffer":67}],60:[function(require,module,exports){ (function (Buffer){ var _algos = require('./algos') var createHash = require('create-hash') @@ -6959,7 +6984,7 @@ module.exports = { } }).call(this,require("buffer").Buffer) -},{"./algos":58,"./sign":61,"./verify":62,"buffer":66,"create-hash":181,"inherits":223,"stream":267}],60:[function(require,module,exports){ +},{"./algos":59,"./sign":62,"./verify":63,"buffer":67,"create-hash":182,"inherits":224,"stream":268}],61:[function(require,module,exports){ 'use strict' exports['1.3.132.0.10'] = 'secp256k1' @@ -6973,7 +6998,7 @@ exports['1.3.132.0.34'] = 'p384' exports['1.3.132.0.35'] = 'p521' -},{}],61:[function(require,module,exports){ +},{}],62:[function(require,module,exports){ (function (Buffer){ // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js var createHmac = require('create-hmac') @@ -7162,7 +7187,7 @@ module.exports.getKey = getKey module.exports.makeKey = makeKey }).call(this,require("buffer").Buffer) -},{"./curves":60,"bn.js":36,"browserify-rsa":57,"buffer":66,"create-hmac":184,"elliptic":196,"parse-asn1":234}],62:[function(require,module,exports){ +},{"./curves":61,"bn.js":37,"browserify-rsa":58,"buffer":67,"create-hmac":185,"elliptic":197,"parse-asn1":235}],63:[function(require,module,exports){ (function (Buffer){ // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js var curves = require('./curves') @@ -7269,9 +7294,9 @@ function checkValue (b, q) { module.exports = verify }).call(this,require("buffer").Buffer) -},{"./curves":60,"bn.js":36,"buffer":66,"elliptic":196,"parse-asn1":234}],63:[function(require,module,exports){ -arguments[4][38][0].apply(exports,arguments) -},{"dup":38}],64:[function(require,module,exports){ +},{"./curves":61,"bn.js":37,"buffer":67,"elliptic":197,"parse-asn1":235}],64:[function(require,module,exports){ +arguments[4][39][0].apply(exports,arguments) +},{"dup":39}],65:[function(require,module,exports){ (function (global){ 'use strict'; @@ -7383,7 +7408,7 @@ exports.allocUnsafeSlow = function allocUnsafeSlow(size) { } }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"buffer":66}],65:[function(require,module,exports){ +},{"buffer":67}],66:[function(require,module,exports){ (function (Buffer){ module.exports = function xor (a, b) { var length = Math.min(a.length, b.length) @@ -7397,7 +7422,7 @@ module.exports = function xor (a, b) { } }).call(this,require("buffer").Buffer) -},{"buffer":66}],66:[function(require,module,exports){ +},{"buffer":67}],67:[function(require,module,exports){ (function (global){ /*! * The buffer module from node.js, for the browser. @@ -9190,7 +9215,7 @@ function isnan (val) { } }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"base64-js":35,"ieee754":221,"isarray":225}],67:[function(require,module,exports){ +},{"base64-js":36,"ieee754":222,"isarray":226}],68:[function(require,module,exports){ (function (Buffer){ var Transform = require('stream').Transform var inherits = require('inherits') @@ -9284,89 +9309,89 @@ CipherBase.prototype._toString = function (value, enc, fin) { } }).call(this,require("buffer").Buffer) -},{"buffer":66,"inherits":223,"stream":267,"string_decoder":268}],68:[function(require,module,exports){ +},{"buffer":67,"inherits":224,"stream":268,"string_decoder":269}],69:[function(require,module,exports){ require('../../modules/es6.string.iterator'); require('../../modules/es6.array.from'); module.exports = require('../../modules/_core').Array.from; -},{"../../modules/_core":95,"../../modules/es6.array.from":161,"../../modules/es6.string.iterator":173}],69:[function(require,module,exports){ +},{"../../modules/_core":96,"../../modules/es6.array.from":162,"../../modules/es6.string.iterator":174}],70:[function(require,module,exports){ var core = require('../../modules/_core') , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify}); module.exports = function stringify(it){ // eslint-disable-line no-unused-vars return $JSON.stringify.apply($JSON, arguments); }; -},{"../../modules/_core":95}],70:[function(require,module,exports){ +},{"../../modules/_core":96}],71:[function(require,module,exports){ require('../../modules/es6.object.assign'); module.exports = require('../../modules/_core').Object.assign; -},{"../../modules/_core":95,"../../modules/es6.object.assign":163}],71:[function(require,module,exports){ +},{"../../modules/_core":96,"../../modules/es6.object.assign":164}],72:[function(require,module,exports){ require('../../modules/es6.object.create'); var $Object = require('../../modules/_core').Object; module.exports = function create(P, D){ return $Object.create(P, D); }; -},{"../../modules/_core":95,"../../modules/es6.object.create":164}],72:[function(require,module,exports){ +},{"../../modules/_core":96,"../../modules/es6.object.create":165}],73:[function(require,module,exports){ require('../../modules/es6.object.define-property'); var $Object = require('../../modules/_core').Object; module.exports = function defineProperty(it, key, desc){ return $Object.defineProperty(it, key, desc); }; -},{"../../modules/_core":95,"../../modules/es6.object.define-property":165}],73:[function(require,module,exports){ +},{"../../modules/_core":96,"../../modules/es6.object.define-property":166}],74:[function(require,module,exports){ require('../../modules/es6.object.get-own-property-descriptor'); var $Object = require('../../modules/_core').Object; module.exports = function getOwnPropertyDescriptor(it, key){ return $Object.getOwnPropertyDescriptor(it, key); }; -},{"../../modules/_core":95,"../../modules/es6.object.get-own-property-descriptor":166}],74:[function(require,module,exports){ +},{"../../modules/_core":96,"../../modules/es6.object.get-own-property-descriptor":167}],75:[function(require,module,exports){ require('../../modules/es6.object.get-prototype-of'); module.exports = require('../../modules/_core').Object.getPrototypeOf; -},{"../../modules/_core":95,"../../modules/es6.object.get-prototype-of":167}],75:[function(require,module,exports){ +},{"../../modules/_core":96,"../../modules/es6.object.get-prototype-of":168}],76:[function(require,module,exports){ require('../../modules/es6.object.keys'); module.exports = require('../../modules/_core').Object.keys; -},{"../../modules/_core":95,"../../modules/es6.object.keys":168}],76:[function(require,module,exports){ +},{"../../modules/_core":96,"../../modules/es6.object.keys":169}],77:[function(require,module,exports){ require('../../modules/es6.object.set-prototype-of'); module.exports = require('../../modules/_core').Object.setPrototypeOf; -},{"../../modules/_core":95,"../../modules/es6.object.set-prototype-of":169}],77:[function(require,module,exports){ +},{"../../modules/_core":96,"../../modules/es6.object.set-prototype-of":170}],78:[function(require,module,exports){ require('../modules/es6.object.to-string'); require('../modules/es6.string.iterator'); require('../modules/web.dom.iterable'); require('../modules/es6.promise'); module.exports = require('../modules/_core').Promise; -},{"../modules/_core":95,"../modules/es6.object.to-string":170,"../modules/es6.promise":171,"../modules/es6.string.iterator":173,"../modules/web.dom.iterable":178}],78:[function(require,module,exports){ +},{"../modules/_core":96,"../modules/es6.object.to-string":171,"../modules/es6.promise":172,"../modules/es6.string.iterator":174,"../modules/web.dom.iterable":179}],79:[function(require,module,exports){ require('../modules/es6.object.to-string'); require('../modules/es6.string.iterator'); require('../modules/web.dom.iterable'); require('../modules/es6.set'); require('../modules/es7.set.to-json'); module.exports = require('../modules/_core').Set; -},{"../modules/_core":95,"../modules/es6.object.to-string":170,"../modules/es6.set":172,"../modules/es6.string.iterator":173,"../modules/es7.set.to-json":175,"../modules/web.dom.iterable":178}],79:[function(require,module,exports){ +},{"../modules/_core":96,"../modules/es6.object.to-string":171,"../modules/es6.set":173,"../modules/es6.string.iterator":174,"../modules/es7.set.to-json":176,"../modules/web.dom.iterable":179}],80:[function(require,module,exports){ require('../../modules/es6.symbol'); require('../../modules/es6.object.to-string'); require('../../modules/es7.symbol.async-iterator'); require('../../modules/es7.symbol.observable'); module.exports = require('../../modules/_core').Symbol; -},{"../../modules/_core":95,"../../modules/es6.object.to-string":170,"../../modules/es6.symbol":174,"../../modules/es7.symbol.async-iterator":176,"../../modules/es7.symbol.observable":177}],80:[function(require,module,exports){ +},{"../../modules/_core":96,"../../modules/es6.object.to-string":171,"../../modules/es6.symbol":175,"../../modules/es7.symbol.async-iterator":177,"../../modules/es7.symbol.observable":178}],81:[function(require,module,exports){ require('../../modules/es6.string.iterator'); require('../../modules/web.dom.iterable'); module.exports = require('../../modules/_wks-ext').f('iterator'); -},{"../../modules/_wks-ext":158,"../../modules/es6.string.iterator":173,"../../modules/web.dom.iterable":178}],81:[function(require,module,exports){ +},{"../../modules/_wks-ext":159,"../../modules/es6.string.iterator":174,"../../modules/web.dom.iterable":179}],82:[function(require,module,exports){ module.exports = function(it){ if(typeof it != 'function')throw TypeError(it + ' is not a function!'); return it; }; -},{}],82:[function(require,module,exports){ -module.exports = function(){ /* empty */ }; },{}],83:[function(require,module,exports){ +module.exports = function(){ /* empty */ }; +},{}],84:[function(require,module,exports){ module.exports = function(it, Constructor, name, forbiddenField){ if(!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)){ throw TypeError(name + ': incorrect invocation!'); } return it; }; -},{}],84:[function(require,module,exports){ +},{}],85:[function(require,module,exports){ var isObject = require('./_is-object'); module.exports = function(it){ if(!isObject(it))throw TypeError(it + ' is not an object!'); return it; }; -},{"./_is-object":115}],85:[function(require,module,exports){ +},{"./_is-object":116}],86:[function(require,module,exports){ var forOf = require('./_for-of'); module.exports = function(iter, ITERATOR){ @@ -9375,7 +9400,7 @@ module.exports = function(iter, ITERATOR){ return result; }; -},{"./_for-of":105}],86:[function(require,module,exports){ +},{"./_for-of":106}],87:[function(require,module,exports){ // false -> Array#indexOf // true -> Array#includes var toIObject = require('./_to-iobject') @@ -9397,7 +9422,7 @@ module.exports = function(IS_INCLUDES){ } return !IS_INCLUDES && -1; }; }; -},{"./_to-index":150,"./_to-iobject":152,"./_to-length":153}],87:[function(require,module,exports){ +},{"./_to-index":151,"./_to-iobject":153,"./_to-length":154}],88:[function(require,module,exports){ // 0 -> Array#forEach // 1 -> Array#map // 2 -> Array#filter @@ -9442,7 +9467,7 @@ module.exports = function(TYPE, $create){ return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; }; }; -},{"./_array-species-create":89,"./_ctx":97,"./_iobject":112,"./_to-length":153,"./_to-object":154}],88:[function(require,module,exports){ +},{"./_array-species-create":90,"./_ctx":98,"./_iobject":113,"./_to-length":154,"./_to-object":155}],89:[function(require,module,exports){ var isObject = require('./_is-object') , isArray = require('./_is-array') , SPECIES = require('./_wks')('species'); @@ -9459,14 +9484,14 @@ module.exports = function(original){ } } return C === undefined ? Array : C; }; -},{"./_is-array":114,"./_is-object":115,"./_wks":159}],89:[function(require,module,exports){ +},{"./_is-array":115,"./_is-object":116,"./_wks":160}],90:[function(require,module,exports){ // 9.4.2.3 ArraySpeciesCreate(originalArray, length) var speciesConstructor = require('./_array-species-constructor'); module.exports = function(original, length){ return new (speciesConstructor(original))(length); }; -},{"./_array-species-constructor":88}],90:[function(require,module,exports){ +},{"./_array-species-constructor":89}],91:[function(require,module,exports){ // getting tag from 19.1.3.6 Object.prototype.toString() var cof = require('./_cof') , TAG = require('./_wks')('toStringTag') @@ -9490,13 +9515,13 @@ module.exports = function(it){ // ES3 arguments fallback : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; }; -},{"./_cof":91,"./_wks":159}],91:[function(require,module,exports){ +},{"./_cof":92,"./_wks":160}],92:[function(require,module,exports){ var toString = {}.toString; module.exports = function(it){ return toString.call(it).slice(8, -1); }; -},{}],92:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ 'use strict'; var dP = require('./_object-dp').f , create = require('./_object-create') @@ -9639,7 +9664,7 @@ module.exports = { setSpecies(NAME); } }; -},{"./_an-instance":83,"./_ctx":97,"./_defined":98,"./_descriptors":99,"./_for-of":105,"./_iter-define":118,"./_iter-step":120,"./_meta":124,"./_object-create":127,"./_object-dp":128,"./_redefine-all":140,"./_set-species":143}],93:[function(require,module,exports){ +},{"./_an-instance":84,"./_ctx":98,"./_defined":99,"./_descriptors":100,"./_for-of":106,"./_iter-define":119,"./_iter-step":121,"./_meta":125,"./_object-create":128,"./_object-dp":129,"./_redefine-all":141,"./_set-species":144}],94:[function(require,module,exports){ // https://github.com/DavidBruant/Map-Set.prototype.toJSON var classof = require('./_classof') , from = require('./_array-from-iterable'); @@ -9649,7 +9674,7 @@ module.exports = function(NAME){ return from(this); }; }; -},{"./_array-from-iterable":85,"./_classof":90}],94:[function(require,module,exports){ +},{"./_array-from-iterable":86,"./_classof":91}],95:[function(require,module,exports){ 'use strict'; var global = require('./_global') , $export = require('./_export') @@ -9709,10 +9734,10 @@ module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){ return C; }; -},{"./_an-instance":83,"./_array-methods":87,"./_descriptors":99,"./_export":103,"./_fails":104,"./_for-of":105,"./_global":106,"./_hide":108,"./_is-object":115,"./_meta":124,"./_object-dp":128,"./_redefine-all":140,"./_set-to-string-tag":144}],95:[function(require,module,exports){ +},{"./_an-instance":84,"./_array-methods":88,"./_descriptors":100,"./_export":104,"./_fails":105,"./_for-of":106,"./_global":107,"./_hide":109,"./_is-object":116,"./_meta":125,"./_object-dp":129,"./_redefine-all":141,"./_set-to-string-tag":145}],96:[function(require,module,exports){ var core = module.exports = {version: '2.4.0'}; if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef -},{}],96:[function(require,module,exports){ +},{}],97:[function(require,module,exports){ 'use strict'; var $defineProperty = require('./_object-dp') , createDesc = require('./_property-desc'); @@ -9721,7 +9746,7 @@ module.exports = function(object, index, value){ if(index in object)$defineProperty.f(object, index, createDesc(0, value)); else object[index] = value; }; -},{"./_object-dp":128,"./_property-desc":139}],97:[function(require,module,exports){ +},{"./_object-dp":129,"./_property-desc":140}],98:[function(require,module,exports){ // optional / simple context binding var aFunction = require('./_a-function'); module.exports = function(fn, that, length){ @@ -9742,18 +9767,18 @@ module.exports = function(fn, that, length){ return fn.apply(that, arguments); }; }; -},{"./_a-function":81}],98:[function(require,module,exports){ +},{"./_a-function":82}],99:[function(require,module,exports){ // 7.2.1 RequireObjectCoercible(argument) module.exports = function(it){ if(it == undefined)throw TypeError("Can't call method on " + it); return it; }; -},{}],99:[function(require,module,exports){ +},{}],100:[function(require,module,exports){ // Thank's IE8 for his funny defineProperty module.exports = !require('./_fails')(function(){ return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; }); -},{"./_fails":104}],100:[function(require,module,exports){ +},{"./_fails":105}],101:[function(require,module,exports){ var isObject = require('./_is-object') , document = require('./_global').document // in old IE typeof document.createElement is 'object' @@ -9761,12 +9786,12 @@ var isObject = require('./_is-object') module.exports = function(it){ return is ? document.createElement(it) : {}; }; -},{"./_global":106,"./_is-object":115}],101:[function(require,module,exports){ +},{"./_global":107,"./_is-object":116}],102:[function(require,module,exports){ // IE 8- don't enum bug keys module.exports = ( 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' ).split(','); -},{}],102:[function(require,module,exports){ +},{}],103:[function(require,module,exports){ // all enumerable object keys, includes symbols var getKeys = require('./_object-keys') , gOPS = require('./_object-gops') @@ -9782,7 +9807,7 @@ module.exports = function(it){ while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key); } return result; }; -},{"./_object-gops":133,"./_object-keys":136,"./_object-pie":137}],103:[function(require,module,exports){ +},{"./_object-gops":134,"./_object-keys":137,"./_object-pie":138}],104:[function(require,module,exports){ var global = require('./_global') , core = require('./_core') , ctx = require('./_ctx') @@ -9844,7 +9869,7 @@ $export.W = 32; // wrap $export.U = 64; // safe $export.R = 128; // real proto method for `library` module.exports = $export; -},{"./_core":95,"./_ctx":97,"./_global":106,"./_hide":108}],104:[function(require,module,exports){ +},{"./_core":96,"./_ctx":98,"./_global":107,"./_hide":109}],105:[function(require,module,exports){ module.exports = function(exec){ try { return !!exec(); @@ -9852,7 +9877,7 @@ module.exports = function(exec){ return true; } }; -},{}],105:[function(require,module,exports){ +},{}],106:[function(require,module,exports){ var ctx = require('./_ctx') , call = require('./_iter-call') , isArrayIter = require('./_is-array-iter') @@ -9878,17 +9903,17 @@ var exports = module.exports = function(iterable, entries, fn, that, ITERATOR){ }; exports.BREAK = BREAK; exports.RETURN = RETURN; -},{"./_an-object":84,"./_ctx":97,"./_is-array-iter":113,"./_iter-call":116,"./_to-length":153,"./core.get-iterator-method":160}],106:[function(require,module,exports){ +},{"./_an-object":85,"./_ctx":98,"./_is-array-iter":114,"./_iter-call":117,"./_to-length":154,"./core.get-iterator-method":161}],107:[function(require,module,exports){ // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 var global = module.exports = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef -},{}],107:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ var hasOwnProperty = {}.hasOwnProperty; module.exports = function(it, key){ return hasOwnProperty.call(it, key); }; -},{}],108:[function(require,module,exports){ +},{}],109:[function(require,module,exports){ var dP = require('./_object-dp') , createDesc = require('./_property-desc'); module.exports = require('./_descriptors') ? function(object, key, value){ @@ -9897,13 +9922,13 @@ module.exports = require('./_descriptors') ? function(object, key, value){ object[key] = value; return object; }; -},{"./_descriptors":99,"./_object-dp":128,"./_property-desc":139}],109:[function(require,module,exports){ +},{"./_descriptors":100,"./_object-dp":129,"./_property-desc":140}],110:[function(require,module,exports){ module.exports = require('./_global').document && document.documentElement; -},{"./_global":106}],110:[function(require,module,exports){ +},{"./_global":107}],111:[function(require,module,exports){ module.exports = !require('./_descriptors') && !require('./_fails')(function(){ return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7; }); -},{"./_descriptors":99,"./_dom-create":100,"./_fails":104}],111:[function(require,module,exports){ +},{"./_descriptors":100,"./_dom-create":101,"./_fails":105}],112:[function(require,module,exports){ // fast apply, http://jsperf.lnkit.com/fast-apply/5 module.exports = function(fn, args, that){ var un = that === undefined; @@ -9920,13 +9945,13 @@ module.exports = function(fn, args, that){ : fn.call(that, args[0], args[1], args[2], args[3]); } return fn.apply(that, args); }; -},{}],112:[function(require,module,exports){ +},{}],113:[function(require,module,exports){ // fallback for non-array-like ES3 and non-enumerable old V8 strings var cof = require('./_cof'); module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){ return cof(it) == 'String' ? it.split('') : Object(it); }; -},{"./_cof":91}],113:[function(require,module,exports){ +},{"./_cof":92}],114:[function(require,module,exports){ // check on default Array iterator var Iterators = require('./_iterators') , ITERATOR = require('./_wks')('iterator') @@ -9935,17 +9960,17 @@ var Iterators = require('./_iterators') module.exports = function(it){ return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); }; -},{"./_iterators":121,"./_wks":159}],114:[function(require,module,exports){ +},{"./_iterators":122,"./_wks":160}],115:[function(require,module,exports){ // 7.2.2 IsArray(argument) var cof = require('./_cof'); module.exports = Array.isArray || function isArray(arg){ return cof(arg) == 'Array'; }; -},{"./_cof":91}],115:[function(require,module,exports){ +},{"./_cof":92}],116:[function(require,module,exports){ module.exports = function(it){ return typeof it === 'object' ? it !== null : typeof it === 'function'; }; -},{}],116:[function(require,module,exports){ +},{}],117:[function(require,module,exports){ // call something on iterator step with safe closing on error var anObject = require('./_an-object'); module.exports = function(iterator, fn, value, entries){ @@ -9958,7 +9983,7 @@ module.exports = function(iterator, fn, value, entries){ throw e; } }; -},{"./_an-object":84}],117:[function(require,module,exports){ +},{"./_an-object":85}],118:[function(require,module,exports){ 'use strict'; var create = require('./_object-create') , descriptor = require('./_property-desc') @@ -9972,7 +9997,7 @@ module.exports = function(Constructor, NAME, next){ Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)}); setToStringTag(Constructor, NAME + ' Iterator'); }; -},{"./_hide":108,"./_object-create":127,"./_property-desc":139,"./_set-to-string-tag":144,"./_wks":159}],118:[function(require,module,exports){ +},{"./_hide":109,"./_object-create":128,"./_property-desc":140,"./_set-to-string-tag":145,"./_wks":160}],119:[function(require,module,exports){ 'use strict'; var LIBRARY = require('./_library') , $export = require('./_export') @@ -10043,7 +10068,7 @@ module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED } return methods; }; -},{"./_export":103,"./_has":107,"./_hide":108,"./_iter-create":117,"./_iterators":121,"./_library":123,"./_object-gpo":134,"./_redefine":141,"./_set-to-string-tag":144,"./_wks":159}],119:[function(require,module,exports){ +},{"./_export":104,"./_has":108,"./_hide":109,"./_iter-create":118,"./_iterators":122,"./_library":124,"./_object-gpo":135,"./_redefine":142,"./_set-to-string-tag":145,"./_wks":160}],120:[function(require,module,exports){ var ITERATOR = require('./_wks')('iterator') , SAFE_CLOSING = false; @@ -10065,13 +10090,13 @@ module.exports = function(exec, skipClosing){ } catch(e){ /* empty */ } return safe; }; -},{"./_wks":159}],120:[function(require,module,exports){ +},{"./_wks":160}],121:[function(require,module,exports){ module.exports = function(done, value){ return {value: value, done: !!done}; }; -},{}],121:[function(require,module,exports){ -module.exports = {}; },{}],122:[function(require,module,exports){ +module.exports = {}; +},{}],123:[function(require,module,exports){ var getKeys = require('./_object-keys') , toIObject = require('./_to-iobject'); module.exports = function(object, el){ @@ -10082,9 +10107,9 @@ module.exports = function(object, el){ , key; while(length > index)if(O[key = keys[index++]] === el)return key; }; -},{"./_object-keys":136,"./_to-iobject":152}],123:[function(require,module,exports){ +},{"./_object-keys":137,"./_to-iobject":153}],124:[function(require,module,exports){ module.exports = true; -},{}],124:[function(require,module,exports){ +},{}],125:[function(require,module,exports){ var META = require('./_uid')('meta') , isObject = require('./_is-object') , has = require('./_has') @@ -10138,7 +10163,7 @@ var meta = module.exports = { getWeak: getWeak, onFreeze: onFreeze }; -},{"./_fails":104,"./_has":107,"./_is-object":115,"./_object-dp":128,"./_uid":156}],125:[function(require,module,exports){ +},{"./_fails":105,"./_has":108,"./_is-object":116,"./_object-dp":129,"./_uid":157}],126:[function(require,module,exports){ var global = require('./_global') , macrotask = require('./_task').set , Observer = global.MutationObserver || global.WebKitMutationObserver @@ -10207,7 +10232,7 @@ module.exports = function(){ } last = task; }; }; -},{"./_cof":91,"./_global":106,"./_task":149}],126:[function(require,module,exports){ +},{"./_cof":92,"./_global":107,"./_task":150}],127:[function(require,module,exports){ 'use strict'; // 19.1.2.1 Object.assign(target, source, ...) var getKeys = require('./_object-keys') @@ -10241,7 +10266,7 @@ module.exports = !$assign || require('./_fails')(function(){ while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key]; } return T; } : $assign; -},{"./_fails":104,"./_iobject":112,"./_object-gops":133,"./_object-keys":136,"./_object-pie":137,"./_to-object":154}],127:[function(require,module,exports){ +},{"./_fails":105,"./_iobject":113,"./_object-gops":134,"./_object-keys":137,"./_object-pie":138,"./_to-object":155}],128:[function(require,module,exports){ // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) var anObject = require('./_an-object') , dPs = require('./_object-dps') @@ -10284,7 +10309,7 @@ module.exports = Object.create || function create(O, Properties){ return Properties === undefined ? result : dPs(result, Properties); }; -},{"./_an-object":84,"./_dom-create":100,"./_enum-bug-keys":101,"./_html":109,"./_object-dps":129,"./_shared-key":145}],128:[function(require,module,exports){ +},{"./_an-object":85,"./_dom-create":101,"./_enum-bug-keys":102,"./_html":110,"./_object-dps":130,"./_shared-key":146}],129:[function(require,module,exports){ var anObject = require('./_an-object') , IE8_DOM_DEFINE = require('./_ie8-dom-define') , toPrimitive = require('./_to-primitive') @@ -10301,7 +10326,7 @@ exports.f = require('./_descriptors') ? Object.defineProperty : function defineP if('value' in Attributes)O[P] = Attributes.value; return O; }; -},{"./_an-object":84,"./_descriptors":99,"./_ie8-dom-define":110,"./_to-primitive":155}],129:[function(require,module,exports){ +},{"./_an-object":85,"./_descriptors":100,"./_ie8-dom-define":111,"./_to-primitive":156}],130:[function(require,module,exports){ var dP = require('./_object-dp') , anObject = require('./_an-object') , getKeys = require('./_object-keys'); @@ -10315,7 +10340,7 @@ module.exports = require('./_descriptors') ? Object.defineProperties : function while(length > i)dP.f(O, P = keys[i++], Properties[P]); return O; }; -},{"./_an-object":84,"./_descriptors":99,"./_object-dp":128,"./_object-keys":136}],130:[function(require,module,exports){ +},{"./_an-object":85,"./_descriptors":100,"./_object-dp":129,"./_object-keys":137}],131:[function(require,module,exports){ var pIE = require('./_object-pie') , createDesc = require('./_property-desc') , toIObject = require('./_to-iobject') @@ -10332,7 +10357,7 @@ exports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor } catch(e){ /* empty */ } if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]); }; -},{"./_descriptors":99,"./_has":107,"./_ie8-dom-define":110,"./_object-pie":137,"./_property-desc":139,"./_to-iobject":152,"./_to-primitive":155}],131:[function(require,module,exports){ +},{"./_descriptors":100,"./_has":108,"./_ie8-dom-define":111,"./_object-pie":138,"./_property-desc":140,"./_to-iobject":153,"./_to-primitive":156}],132:[function(require,module,exports){ // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window var toIObject = require('./_to-iobject') , gOPN = require('./_object-gopn').f @@ -10353,7 +10378,7 @@ module.exports.f = function getOwnPropertyNames(it){ return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it)); }; -},{"./_object-gopn":132,"./_to-iobject":152}],132:[function(require,module,exports){ +},{"./_object-gopn":133,"./_to-iobject":153}],133:[function(require,module,exports){ // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O) var $keys = require('./_object-keys-internal') , hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype'); @@ -10361,9 +10386,9 @@ var $keys = require('./_object-keys-internal') exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){ return $keys(O, hiddenKeys); }; -},{"./_enum-bug-keys":101,"./_object-keys-internal":135}],133:[function(require,module,exports){ +},{"./_enum-bug-keys":102,"./_object-keys-internal":136}],134:[function(require,module,exports){ exports.f = Object.getOwnPropertySymbols; -},{}],134:[function(require,module,exports){ +},{}],135:[function(require,module,exports){ // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) var has = require('./_has') , toObject = require('./_to-object') @@ -10377,7 +10402,7 @@ module.exports = Object.getPrototypeOf || function(O){ return O.constructor.prototype; } return O instanceof Object ? ObjectProto : null; }; -},{"./_has":107,"./_shared-key":145,"./_to-object":154}],135:[function(require,module,exports){ +},{"./_has":108,"./_shared-key":146,"./_to-object":155}],136:[function(require,module,exports){ var has = require('./_has') , toIObject = require('./_to-iobject') , arrayIndexOf = require('./_array-includes')(false) @@ -10395,7 +10420,7 @@ module.exports = function(object, names){ } return result; }; -},{"./_array-includes":86,"./_has":107,"./_shared-key":145,"./_to-iobject":152}],136:[function(require,module,exports){ +},{"./_array-includes":87,"./_has":108,"./_shared-key":146,"./_to-iobject":153}],137:[function(require,module,exports){ // 19.1.2.14 / 15.2.3.14 Object.keys(O) var $keys = require('./_object-keys-internal') , enumBugKeys = require('./_enum-bug-keys'); @@ -10403,9 +10428,9 @@ var $keys = require('./_object-keys-internal') module.exports = Object.keys || function keys(O){ return $keys(O, enumBugKeys); }; -},{"./_enum-bug-keys":101,"./_object-keys-internal":135}],137:[function(require,module,exports){ +},{"./_enum-bug-keys":102,"./_object-keys-internal":136}],138:[function(require,module,exports){ exports.f = {}.propertyIsEnumerable; -},{}],138:[function(require,module,exports){ +},{}],139:[function(require,module,exports){ // most Object methods by ES6 should accept primitives var $export = require('./_export') , core = require('./_core') @@ -10416,7 +10441,7 @@ module.exports = function(KEY, exec){ exp[KEY] = exec(fn); $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp); }; -},{"./_core":95,"./_export":103,"./_fails":104}],139:[function(require,module,exports){ +},{"./_core":96,"./_export":104,"./_fails":105}],140:[function(require,module,exports){ module.exports = function(bitmap, value){ return { enumerable : !(bitmap & 1), @@ -10425,7 +10450,7 @@ module.exports = function(bitmap, value){ value : value }; }; -},{}],140:[function(require,module,exports){ +},{}],141:[function(require,module,exports){ var hide = require('./_hide'); module.exports = function(target, src, safe){ for(var key in src){ @@ -10433,9 +10458,9 @@ module.exports = function(target, src, safe){ else hide(target, key, src[key]); } return target; }; -},{"./_hide":108}],141:[function(require,module,exports){ +},{"./_hide":109}],142:[function(require,module,exports){ module.exports = require('./_hide'); -},{"./_hide":108}],142:[function(require,module,exports){ +},{"./_hide":109}],143:[function(require,module,exports){ // Works with __proto__ only. Old v8 can't work with null proto objects. /* eslint-disable no-proto */ var isObject = require('./_is-object') @@ -10461,7 +10486,7 @@ module.exports = { }({}, false) : undefined), check: check }; -},{"./_an-object":84,"./_ctx":97,"./_is-object":115,"./_object-gopd":130}],143:[function(require,module,exports){ +},{"./_an-object":85,"./_ctx":98,"./_is-object":116,"./_object-gopd":131}],144:[function(require,module,exports){ 'use strict'; var global = require('./_global') , core = require('./_core') @@ -10476,7 +10501,7 @@ module.exports = function(KEY){ get: function(){ return this; } }); }; -},{"./_core":95,"./_descriptors":99,"./_global":106,"./_object-dp":128,"./_wks":159}],144:[function(require,module,exports){ +},{"./_core":96,"./_descriptors":100,"./_global":107,"./_object-dp":129,"./_wks":160}],145:[function(require,module,exports){ var def = require('./_object-dp').f , has = require('./_has') , TAG = require('./_wks')('toStringTag'); @@ -10484,20 +10509,20 @@ var def = require('./_object-dp').f module.exports = function(it, tag, stat){ if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag}); }; -},{"./_has":107,"./_object-dp":128,"./_wks":159}],145:[function(require,module,exports){ +},{"./_has":108,"./_object-dp":129,"./_wks":160}],146:[function(require,module,exports){ var shared = require('./_shared')('keys') , uid = require('./_uid'); module.exports = function(key){ return shared[key] || (shared[key] = uid(key)); }; -},{"./_shared":146,"./_uid":156}],146:[function(require,module,exports){ +},{"./_shared":147,"./_uid":157}],147:[function(require,module,exports){ var global = require('./_global') , SHARED = '__core-js_shared__' , store = global[SHARED] || (global[SHARED] = {}); module.exports = function(key){ return store[key] || (store[key] = {}); }; -},{"./_global":106}],147:[function(require,module,exports){ +},{"./_global":107}],148:[function(require,module,exports){ // 7.3.20 SpeciesConstructor(O, defaultConstructor) var anObject = require('./_an-object') , aFunction = require('./_a-function') @@ -10506,7 +10531,7 @@ module.exports = function(O, D){ var C = anObject(O).constructor, S; return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S); }; -},{"./_a-function":81,"./_an-object":84,"./_wks":159}],148:[function(require,module,exports){ +},{"./_a-function":82,"./_an-object":85,"./_wks":160}],149:[function(require,module,exports){ var toInteger = require('./_to-integer') , defined = require('./_defined'); // true -> String#at @@ -10524,7 +10549,7 @@ module.exports = function(TO_STRING){ : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; }; }; -},{"./_defined":98,"./_to-integer":151}],149:[function(require,module,exports){ +},{"./_defined":99,"./_to-integer":152}],150:[function(require,module,exports){ var ctx = require('./_ctx') , invoke = require('./_invoke') , html = require('./_html') @@ -10600,7 +10625,7 @@ module.exports = { set: setTask, clear: clearTask }; -},{"./_cof":91,"./_ctx":97,"./_dom-create":100,"./_global":106,"./_html":109,"./_invoke":111}],150:[function(require,module,exports){ +},{"./_cof":92,"./_ctx":98,"./_dom-create":101,"./_global":107,"./_html":110,"./_invoke":112}],151:[function(require,module,exports){ var toInteger = require('./_to-integer') , max = Math.max , min = Math.min; @@ -10608,34 +10633,34 @@ module.exports = function(index, length){ index = toInteger(index); return index < 0 ? max(index + length, 0) : min(index, length); }; -},{"./_to-integer":151}],151:[function(require,module,exports){ +},{"./_to-integer":152}],152:[function(require,module,exports){ // 7.1.4 ToInteger var ceil = Math.ceil , floor = Math.floor; module.exports = function(it){ return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); }; -},{}],152:[function(require,module,exports){ +},{}],153:[function(require,module,exports){ // to indexed object, toObject with fallback for non-array-like ES3 strings var IObject = require('./_iobject') , defined = require('./_defined'); module.exports = function(it){ return IObject(defined(it)); }; -},{"./_defined":98,"./_iobject":112}],153:[function(require,module,exports){ +},{"./_defined":99,"./_iobject":113}],154:[function(require,module,exports){ // 7.1.15 ToLength var toInteger = require('./_to-integer') , min = Math.min; module.exports = function(it){ return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 }; -},{"./_to-integer":151}],154:[function(require,module,exports){ +},{"./_to-integer":152}],155:[function(require,module,exports){ // 7.1.13 ToObject(argument) var defined = require('./_defined'); module.exports = function(it){ return Object(defined(it)); }; -},{"./_defined":98}],155:[function(require,module,exports){ +},{"./_defined":99}],156:[function(require,module,exports){ // 7.1.1 ToPrimitive(input [, PreferredType]) var isObject = require('./_is-object'); // instead of the ES6 spec version, we didn't implement @@toPrimitive case @@ -10648,13 +10673,13 @@ module.exports = function(it, S){ if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; throw TypeError("Can't convert object to primitive value"); }; -},{"./_is-object":115}],156:[function(require,module,exports){ +},{"./_is-object":116}],157:[function(require,module,exports){ var id = 0 , px = Math.random(); module.exports = function(key){ return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); }; -},{}],157:[function(require,module,exports){ +},{}],158:[function(require,module,exports){ var global = require('./_global') , core = require('./_core') , LIBRARY = require('./_library') @@ -10664,9 +10689,9 @@ module.exports = function(name){ var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {}); if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)}); }; -},{"./_core":95,"./_global":106,"./_library":123,"./_object-dp":128,"./_wks-ext":158}],158:[function(require,module,exports){ +},{"./_core":96,"./_global":107,"./_library":124,"./_object-dp":129,"./_wks-ext":159}],159:[function(require,module,exports){ exports.f = require('./_wks'); -},{"./_wks":159}],159:[function(require,module,exports){ +},{"./_wks":160}],160:[function(require,module,exports){ var store = require('./_shared')('wks') , uid = require('./_uid') , Symbol = require('./_global').Symbol @@ -10678,7 +10703,7 @@ var $exports = module.exports = function(name){ }; $exports.store = store; -},{"./_global":106,"./_shared":146,"./_uid":156}],160:[function(require,module,exports){ +},{"./_global":107,"./_shared":147,"./_uid":157}],161:[function(require,module,exports){ var classof = require('./_classof') , ITERATOR = require('./_wks')('iterator') , Iterators = require('./_iterators'); @@ -10687,7 +10712,7 @@ module.exports = require('./_core').getIteratorMethod = function(it){ || it['@@iterator'] || Iterators[classof(it)]; }; -},{"./_classof":90,"./_core":95,"./_iterators":121,"./_wks":159}],161:[function(require,module,exports){ +},{"./_classof":91,"./_core":96,"./_iterators":122,"./_wks":160}],162:[function(require,module,exports){ 'use strict'; var ctx = require('./_ctx') , $export = require('./_export') @@ -10726,7 +10751,7 @@ $export($export.S + $export.F * !require('./_iter-detect')(function(iter){ Array } }); -},{"./_create-property":96,"./_ctx":97,"./_export":103,"./_is-array-iter":113,"./_iter-call":116,"./_iter-detect":119,"./_to-length":153,"./_to-object":154,"./core.get-iterator-method":160}],162:[function(require,module,exports){ +},{"./_create-property":97,"./_ctx":98,"./_export":104,"./_is-array-iter":114,"./_iter-call":117,"./_iter-detect":120,"./_to-length":154,"./_to-object":155,"./core.get-iterator-method":161}],163:[function(require,module,exports){ 'use strict'; var addToUnscopables = require('./_add-to-unscopables') , step = require('./_iter-step') @@ -10761,20 +10786,20 @@ Iterators.Arguments = Iterators.Array; addToUnscopables('keys'); addToUnscopables('values'); addToUnscopables('entries'); -},{"./_add-to-unscopables":82,"./_iter-define":118,"./_iter-step":120,"./_iterators":121,"./_to-iobject":152}],163:[function(require,module,exports){ +},{"./_add-to-unscopables":83,"./_iter-define":119,"./_iter-step":121,"./_iterators":122,"./_to-iobject":153}],164:[function(require,module,exports){ // 19.1.3.1 Object.assign(target, source) var $export = require('./_export'); $export($export.S + $export.F, 'Object', {assign: require('./_object-assign')}); -},{"./_export":103,"./_object-assign":126}],164:[function(require,module,exports){ +},{"./_export":104,"./_object-assign":127}],165:[function(require,module,exports){ var $export = require('./_export') // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) $export($export.S, 'Object', {create: require('./_object-create')}); -},{"./_export":103,"./_object-create":127}],165:[function(require,module,exports){ +},{"./_export":104,"./_object-create":128}],166:[function(require,module,exports){ var $export = require('./_export'); // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes) $export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperty: require('./_object-dp').f}); -},{"./_descriptors":99,"./_export":103,"./_object-dp":128}],166:[function(require,module,exports){ +},{"./_descriptors":100,"./_export":104,"./_object-dp":129}],167:[function(require,module,exports){ // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) var toIObject = require('./_to-iobject') , $getOwnPropertyDescriptor = require('./_object-gopd').f; @@ -10784,7 +10809,7 @@ require('./_object-sap')('getOwnPropertyDescriptor', function(){ return $getOwnPropertyDescriptor(toIObject(it), key); }; }); -},{"./_object-gopd":130,"./_object-sap":138,"./_to-iobject":152}],167:[function(require,module,exports){ +},{"./_object-gopd":131,"./_object-sap":139,"./_to-iobject":153}],168:[function(require,module,exports){ // 19.1.2.9 Object.getPrototypeOf(O) var toObject = require('./_to-object') , $getPrototypeOf = require('./_object-gpo'); @@ -10794,7 +10819,7 @@ require('./_object-sap')('getPrototypeOf', function(){ return $getPrototypeOf(toObject(it)); }; }); -},{"./_object-gpo":134,"./_object-sap":138,"./_to-object":154}],168:[function(require,module,exports){ +},{"./_object-gpo":135,"./_object-sap":139,"./_to-object":155}],169:[function(require,module,exports){ // 19.1.2.14 Object.keys(O) var toObject = require('./_to-object') , $keys = require('./_object-keys'); @@ -10804,13 +10829,13 @@ require('./_object-sap')('keys', function(){ return $keys(toObject(it)); }; }); -},{"./_object-keys":136,"./_object-sap":138,"./_to-object":154}],169:[function(require,module,exports){ +},{"./_object-keys":137,"./_object-sap":139,"./_to-object":155}],170:[function(require,module,exports){ // 19.1.3.19 Object.setPrototypeOf(O, proto) var $export = require('./_export'); $export($export.S, 'Object', {setPrototypeOf: require('./_set-proto').set}); -},{"./_export":103,"./_set-proto":142}],170:[function(require,module,exports){ -arguments[4][38][0].apply(exports,arguments) -},{"dup":38}],171:[function(require,module,exports){ +},{"./_export":104,"./_set-proto":143}],171:[function(require,module,exports){ +arguments[4][39][0].apply(exports,arguments) +},{"dup":39}],172:[function(require,module,exports){ 'use strict'; var LIBRARY = require('./_library') , global = require('./_global') @@ -11110,7 +11135,7 @@ $export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(functi return capability.promise; } }); -},{"./_a-function":81,"./_an-instance":83,"./_classof":90,"./_core":95,"./_ctx":97,"./_export":103,"./_for-of":105,"./_global":106,"./_is-object":115,"./_iter-detect":119,"./_library":123,"./_microtask":125,"./_redefine-all":140,"./_set-species":143,"./_set-to-string-tag":144,"./_species-constructor":147,"./_task":149,"./_wks":159}],172:[function(require,module,exports){ +},{"./_a-function":82,"./_an-instance":84,"./_classof":91,"./_core":96,"./_ctx":98,"./_export":104,"./_for-of":106,"./_global":107,"./_is-object":116,"./_iter-detect":120,"./_library":124,"./_microtask":126,"./_redefine-all":141,"./_set-species":144,"./_set-to-string-tag":145,"./_species-constructor":148,"./_task":150,"./_wks":160}],173:[function(require,module,exports){ 'use strict'; var strong = require('./_collection-strong'); @@ -11123,7 +11148,7 @@ module.exports = require('./_collection')('Set', function(get){ return strong.def(this, value = value === 0 ? 0 : value, value); } }, strong); -},{"./_collection":94,"./_collection-strong":92}],173:[function(require,module,exports){ +},{"./_collection":95,"./_collection-strong":93}],174:[function(require,module,exports){ 'use strict'; var $at = require('./_string-at')(true); @@ -11141,7 +11166,7 @@ require('./_iter-define')(String, 'String', function(iterated){ this._i += point.length; return {value: point, done: false}; }); -},{"./_iter-define":118,"./_string-at":148}],174:[function(require,module,exports){ +},{"./_iter-define":119,"./_string-at":149}],175:[function(require,module,exports){ 'use strict'; // ECMAScript 6 symbols shim var global = require('./_global') @@ -11377,16 +11402,16 @@ setToStringTag($Symbol, 'Symbol'); setToStringTag(Math, 'Math', true); // 24.3.3 JSON[@@toStringTag] setToStringTag(global.JSON, 'JSON', true); -},{"./_an-object":84,"./_descriptors":99,"./_enum-keys":102,"./_export":103,"./_fails":104,"./_global":106,"./_has":107,"./_hide":108,"./_is-array":114,"./_keyof":122,"./_library":123,"./_meta":124,"./_object-create":127,"./_object-dp":128,"./_object-gopd":130,"./_object-gopn":132,"./_object-gopn-ext":131,"./_object-gops":133,"./_object-keys":136,"./_object-pie":137,"./_property-desc":139,"./_redefine":141,"./_set-to-string-tag":144,"./_shared":146,"./_to-iobject":152,"./_to-primitive":155,"./_uid":156,"./_wks":159,"./_wks-define":157,"./_wks-ext":158}],175:[function(require,module,exports){ +},{"./_an-object":85,"./_descriptors":100,"./_enum-keys":103,"./_export":104,"./_fails":105,"./_global":107,"./_has":108,"./_hide":109,"./_is-array":115,"./_keyof":123,"./_library":124,"./_meta":125,"./_object-create":128,"./_object-dp":129,"./_object-gopd":131,"./_object-gopn":133,"./_object-gopn-ext":132,"./_object-gops":134,"./_object-keys":137,"./_object-pie":138,"./_property-desc":140,"./_redefine":142,"./_set-to-string-tag":145,"./_shared":147,"./_to-iobject":153,"./_to-primitive":156,"./_uid":157,"./_wks":160,"./_wks-define":158,"./_wks-ext":159}],176:[function(require,module,exports){ // https://github.com/DavidBruant/Map-Set.prototype.toJSON var $export = require('./_export'); $export($export.P + $export.R, 'Set', {toJSON: require('./_collection-to-json')('Set')}); -},{"./_collection-to-json":93,"./_export":103}],176:[function(require,module,exports){ +},{"./_collection-to-json":94,"./_export":104}],177:[function(require,module,exports){ require('./_wks-define')('asyncIterator'); -},{"./_wks-define":157}],177:[function(require,module,exports){ +},{"./_wks-define":158}],178:[function(require,module,exports){ require('./_wks-define')('observable'); -},{"./_wks-define":157}],178:[function(require,module,exports){ +},{"./_wks-define":158}],179:[function(require,module,exports){ require('./es6.array.iterator'); var global = require('./_global') , hide = require('./_hide') @@ -11400,7 +11425,7 @@ for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList' if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME); Iterators[NAME] = Iterators.Array; } -},{"./_global":106,"./_hide":108,"./_iterators":121,"./_wks":159,"./es6.array.iterator":162}],179:[function(require,module,exports){ +},{"./_global":107,"./_hide":109,"./_iterators":122,"./_wks":160,"./es6.array.iterator":163}],180:[function(require,module,exports){ (function (Buffer){ // Copyright Joyent, Inc. and other Node contributors. // @@ -11511,7 +11536,7 @@ function objectToString(o) { } }).call(this,{"isBuffer":require("../../is-buffer/index.js")}) -},{"../../is-buffer/index.js":224}],180:[function(require,module,exports){ +},{"../../is-buffer/index.js":225}],181:[function(require,module,exports){ (function (Buffer){ var elliptic = require('elliptic'); var BN = require('bn.js'); @@ -11637,7 +11662,7 @@ function formatReturnValue(bn, enc, len) { } }).call(this,require("buffer").Buffer) -},{"bn.js":36,"buffer":66,"elliptic":196}],181:[function(require,module,exports){ +},{"bn.js":37,"buffer":67,"elliptic":197}],182:[function(require,module,exports){ (function (Buffer){ 'use strict'; var inherits = require('inherits') @@ -11693,7 +11718,7 @@ module.exports = function createHash (alg) { } }).call(this,require("buffer").Buffer) -},{"./md5":183,"buffer":66,"cipher-base":67,"inherits":223,"ripemd160":258,"sha.js":260}],182:[function(require,module,exports){ +},{"./md5":184,"buffer":67,"cipher-base":68,"inherits":224,"ripemd160":259,"sha.js":261}],183:[function(require,module,exports){ (function (Buffer){ 'use strict'; var intSize = 4; @@ -11730,7 +11755,7 @@ function hash(buf, fn, hashSize, bigEndian) { } exports.hash = hash; }).call(this,require("buffer").Buffer) -},{"buffer":66}],183:[function(require,module,exports){ +},{"buffer":67}],184:[function(require,module,exports){ 'use strict'; /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message @@ -11887,7 +11912,7 @@ function bit_rol(num, cnt) module.exports = function md5(buf) { return helpers.hash(buf, core_md5, 16); }; -},{"./helpers":182}],184:[function(require,module,exports){ +},{"./helpers":183}],185:[function(require,module,exports){ (function (Buffer){ 'use strict'; var createHash = require('create-hash/browser'); @@ -11959,7 +11984,7 @@ module.exports = function createHmac(alg, key) { } }).call(this,require("buffer").Buffer) -},{"buffer":66,"create-hash/browser":181,"inherits":223,"stream":267}],185:[function(require,module,exports){ +},{"buffer":67,"create-hash/browser":182,"inherits":224,"stream":268}],186:[function(require,module,exports){ 'use strict' exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes') @@ -12038,7 +12063,7 @@ var publicEncrypt = require('public-encrypt') } }) -},{"browserify-cipher":54,"browserify-sign":59,"browserify-sign/algos":58,"create-ecdh":180,"create-hash":181,"create-hmac":184,"diffie-hellman":192,"pbkdf2":236,"public-encrypt":240,"randombytes":246}],186:[function(require,module,exports){ +},{"browserify-cipher":55,"browserify-sign":60,"browserify-sign/algos":59,"create-ecdh":181,"create-hash":182,"create-hmac":185,"diffie-hellman":193,"pbkdf2":237,"public-encrypt":241,"randombytes":247}],187:[function(require,module,exports){ 'use strict'; exports.utils = require('./des/utils'); @@ -12047,7 +12072,7 @@ exports.DES = require('./des/des'); exports.CBC = require('./des/cbc'); exports.EDE = require('./des/ede'); -},{"./des/cbc":187,"./des/cipher":188,"./des/des":189,"./des/ede":190,"./des/utils":191}],187:[function(require,module,exports){ +},{"./des/cbc":188,"./des/cipher":189,"./des/des":190,"./des/ede":191,"./des/utils":192}],188:[function(require,module,exports){ 'use strict'; var assert = require('minimalistic-assert'); @@ -12114,7 +12139,7 @@ proto._update = function _update(inp, inOff, out, outOff) { } }; -},{"inherits":223,"minimalistic-assert":227}],188:[function(require,module,exports){ +},{"inherits":224,"minimalistic-assert":228}],189:[function(require,module,exports){ 'use strict'; var assert = require('minimalistic-assert'); @@ -12257,7 +12282,7 @@ Cipher.prototype._finalDecrypt = function _finalDecrypt() { return this._unpad(out); }; -},{"minimalistic-assert":227}],189:[function(require,module,exports){ +},{"minimalistic-assert":228}],190:[function(require,module,exports){ 'use strict'; var assert = require('minimalistic-assert'); @@ -12402,7 +12427,7 @@ DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { utils.rip(l, r, out, off); }; -},{"../des":186,"inherits":223,"minimalistic-assert":227}],190:[function(require,module,exports){ +},{"../des":187,"inherits":224,"minimalistic-assert":228}],191:[function(require,module,exports){ 'use strict'; var assert = require('minimalistic-assert'); @@ -12459,7 +12484,7 @@ EDE.prototype._update = function _update(inp, inOff, out, outOff) { EDE.prototype._pad = DES.prototype._pad; EDE.prototype._unpad = DES.prototype._unpad; -},{"../des":186,"inherits":223,"minimalistic-assert":227}],191:[function(require,module,exports){ +},{"../des":187,"inherits":224,"minimalistic-assert":228}],192:[function(require,module,exports){ 'use strict'; exports.readUInt32BE = function readUInt32BE(bytes, off) { @@ -12717,7 +12742,7 @@ exports.padSplit = function padSplit(num, size, group) { return out.join(' '); }; -},{}],192:[function(require,module,exports){ +},{}],193:[function(require,module,exports){ (function (Buffer){ var generatePrime = require('./lib/generatePrime') var primes = require('./lib/primes.json') @@ -12763,7 +12788,7 @@ exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffi exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman }).call(this,require("buffer").Buffer) -},{"./lib/dh":193,"./lib/generatePrime":194,"./lib/primes.json":195,"buffer":66}],193:[function(require,module,exports){ +},{"./lib/dh":194,"./lib/generatePrime":195,"./lib/primes.json":196,"buffer":67}],194:[function(require,module,exports){ (function (Buffer){ var BN = require('bn.js'); var MillerRabin = require('miller-rabin'); @@ -12931,7 +12956,7 @@ function formatReturnValue(bn, enc) { } }).call(this,require("buffer").Buffer) -},{"./generatePrime":194,"bn.js":36,"buffer":66,"miller-rabin":226,"randombytes":246}],194:[function(require,module,exports){ +},{"./generatePrime":195,"bn.js":37,"buffer":67,"miller-rabin":227,"randombytes":247}],195:[function(require,module,exports){ var randomBytes = require('randombytes'); module.exports = findPrime; findPrime.simpleSieve = simpleSieve; @@ -13038,7 +13063,7 @@ function findPrime(bits, gen) { } -},{"bn.js":36,"miller-rabin":226,"randombytes":246}],195:[function(require,module,exports){ +},{"bn.js":37,"miller-rabin":227,"randombytes":247}],196:[function(require,module,exports){ module.exports={ "modp1": { "gen": "02", @@ -13073,7 +13098,7 @@ module.exports={ "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff" } } -},{}],196:[function(require,module,exports){ +},{}],197:[function(require,module,exports){ 'use strict'; var elliptic = exports; @@ -13088,7 +13113,7 @@ elliptic.curves = require('./elliptic/curves'); elliptic.ec = require('./elliptic/ec'); elliptic.eddsa = require('./elliptic/eddsa'); -},{"../package.json":211,"./elliptic/curve":199,"./elliptic/curves":202,"./elliptic/ec":203,"./elliptic/eddsa":206,"./elliptic/utils":210,"brorand":37}],197:[function(require,module,exports){ +},{"../package.json":212,"./elliptic/curve":200,"./elliptic/curves":203,"./elliptic/ec":204,"./elliptic/eddsa":207,"./elliptic/utils":211,"brorand":38}],198:[function(require,module,exports){ 'use strict'; var BN = require('bn.js'); @@ -13465,7 +13490,7 @@ BasePoint.prototype.dblp = function dblp(k) { return r; }; -},{"../../elliptic":196,"bn.js":36}],198:[function(require,module,exports){ +},{"../../elliptic":197,"bn.js":37}],199:[function(require,module,exports){ 'use strict'; var curve = require('../curve'); @@ -13900,7 +13925,7 @@ Point.prototype.eqXToP = function eqXToP(x) { Point.prototype.toP = Point.prototype.normalize; Point.prototype.mixedAdd = Point.prototype.add; -},{"../../elliptic":196,"../curve":199,"bn.js":36,"inherits":223}],199:[function(require,module,exports){ +},{"../../elliptic":197,"../curve":200,"bn.js":37,"inherits":224}],200:[function(require,module,exports){ 'use strict'; var curve = exports; @@ -13910,7 +13935,7 @@ curve.short = require('./short'); curve.mont = require('./mont'); curve.edwards = require('./edwards'); -},{"./base":197,"./edwards":198,"./mont":200,"./short":201}],200:[function(require,module,exports){ +},{"./base":198,"./edwards":199,"./mont":201,"./short":202}],201:[function(require,module,exports){ 'use strict'; var curve = require('../curve'); @@ -14092,7 +14117,7 @@ Point.prototype.getX = function getX() { return this.x.fromRed(); }; -},{"../../elliptic":196,"../curve":199,"bn.js":36,"inherits":223}],201:[function(require,module,exports){ +},{"../../elliptic":197,"../curve":200,"bn.js":37,"inherits":224}],202:[function(require,module,exports){ 'use strict'; var curve = require('../curve'); @@ -15032,7 +15057,7 @@ JPoint.prototype.isInfinity = function isInfinity() { return this.z.cmpn(0) === 0; }; -},{"../../elliptic":196,"../curve":199,"bn.js":36,"inherits":223}],202:[function(require,module,exports){ +},{"../../elliptic":197,"../curve":200,"bn.js":37,"inherits":224}],203:[function(require,module,exports){ 'use strict'; var curves = exports; @@ -15239,7 +15264,7 @@ defineCurve('secp256k1', { ] }); -},{"../elliptic":196,"./precomputed/secp256k1":209,"hash.js":214}],203:[function(require,module,exports){ +},{"../elliptic":197,"./precomputed/secp256k1":210,"hash.js":215}],204:[function(require,module,exports){ 'use strict'; var BN = require('bn.js'); @@ -15481,7 +15506,7 @@ EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { throw new Error('Unable to find valid recovery factor'); }; -},{"../../elliptic":196,"./key":204,"./signature":205,"bn.js":36,"hmac-drbg":220}],204:[function(require,module,exports){ +},{"../../elliptic":197,"./key":205,"./signature":206,"bn.js":37,"hmac-drbg":221}],205:[function(require,module,exports){ 'use strict'; var BN = require('bn.js'); @@ -15602,7 +15627,7 @@ KeyPair.prototype.inspect = function inspect() { ' pub: ' + (this.pub && this.pub.inspect()) + ' >'; }; -},{"../../elliptic":196,"bn.js":36}],205:[function(require,module,exports){ +},{"../../elliptic":197,"bn.js":37}],206:[function(require,module,exports){ 'use strict'; var BN = require('bn.js'); @@ -15739,7 +15764,7 @@ Signature.prototype.toDER = function toDER(enc) { return utils.encode(res, enc); }; -},{"../../elliptic":196,"bn.js":36}],206:[function(require,module,exports){ +},{"../../elliptic":197,"bn.js":37}],207:[function(require,module,exports){ 'use strict'; var hash = require('hash.js'); @@ -15859,7 +15884,7 @@ EDDSA.prototype.isPoint = function isPoint(val) { return val instanceof this.pointClass; }; -},{"../../elliptic":196,"./key":207,"./signature":208,"hash.js":214}],207:[function(require,module,exports){ +},{"../../elliptic":197,"./key":208,"./signature":209,"hash.js":215}],208:[function(require,module,exports){ 'use strict'; var elliptic = require('../../elliptic'); @@ -15957,7 +15982,7 @@ KeyPair.prototype.getPublic = function getPublic(enc) { module.exports = KeyPair; -},{"../../elliptic":196}],208:[function(require,module,exports){ +},{"../../elliptic":197}],209:[function(require,module,exports){ 'use strict'; var BN = require('bn.js'); @@ -16025,7 +16050,7 @@ Signature.prototype.toHex = function toHex() { module.exports = Signature; -},{"../../elliptic":196,"bn.js":36}],209:[function(require,module,exports){ +},{"../../elliptic":197,"bn.js":37}],210:[function(require,module,exports){ module.exports = { doubles: { step: 4, @@ -16807,7 +16832,7 @@ module.exports = { } }; -},{}],210:[function(require,module,exports){ +},{}],211:[function(require,module,exports){ 'use strict'; var utils = exports; @@ -16929,7 +16954,7 @@ function intFromLE(bytes) { utils.intFromLE = intFromLE; -},{"bn.js":36,"minimalistic-assert":227,"minimalistic-crypto-utils":228}],211:[function(require,module,exports){ +},{"bn.js":37,"minimalistic-assert":228,"minimalistic-crypto-utils":229}],212:[function(require,module,exports){ module.exports={ "_args": [ [ @@ -17054,7 +17079,7 @@ module.exports={ "version": "6.4.0" } -},{}],212:[function(require,module,exports){ +},{}],213:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -17358,7 +17383,7 @@ function isUndefined(arg) { return arg === void 0; } -},{}],213:[function(require,module,exports){ +},{}],214:[function(require,module,exports){ (function (Buffer){ var md5 = require('create-hash/md5') module.exports = EVP_BytesToKey @@ -17430,7 +17455,7 @@ function EVP_BytesToKey (password, salt, keyLen, ivLen) { } }).call(this,require("buffer").Buffer) -},{"buffer":66,"create-hash/md5":183}],214:[function(require,module,exports){ +},{"buffer":67,"create-hash/md5":184}],215:[function(require,module,exports){ var hash = exports; hash.utils = require('./hash/utils'); @@ -17447,7 +17472,7 @@ hash.sha384 = hash.sha.sha384; hash.sha512 = hash.sha.sha512; hash.ripemd160 = hash.ripemd.ripemd160; -},{"./hash/common":215,"./hash/hmac":216,"./hash/ripemd":217,"./hash/sha":218,"./hash/utils":219}],215:[function(require,module,exports){ +},{"./hash/common":216,"./hash/hmac":217,"./hash/ripemd":218,"./hash/sha":219,"./hash/utils":220}],216:[function(require,module,exports){ var hash = require('../hash'); var utils = hash.utils; var assert = utils.assert; @@ -17540,7 +17565,7 @@ BlockHash.prototype._pad = function pad() { return res; }; -},{"../hash":214}],216:[function(require,module,exports){ +},{"../hash":215}],217:[function(require,module,exports){ var hmac = exports; var hash = require('../hash'); @@ -17590,7 +17615,7 @@ Hmac.prototype.digest = function digest(enc) { return this.outer.digest(enc); }; -},{"../hash":214}],217:[function(require,module,exports){ +},{"../hash":215}],218:[function(require,module,exports){ var hash = require('../hash'); var utils = hash.utils; @@ -17736,7 +17761,7 @@ var sh = [ 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]; -},{"../hash":214}],218:[function(require,module,exports){ +},{"../hash":215}],219:[function(require,module,exports){ var hash = require('../hash'); var utils = hash.utils; var assert = utils.assert; @@ -18302,7 +18327,7 @@ function g1_512_lo(xh, xl) { return r; } -},{"../hash":214}],219:[function(require,module,exports){ +},{"../hash":215}],220:[function(require,module,exports){ var utils = exports; var inherits = require('inherits'); @@ -18561,7 +18586,7 @@ function shr64_lo(ah, al, num) { }; exports.shr64_lo = shr64_lo; -},{"inherits":223}],220:[function(require,module,exports){ +},{"inherits":224}],221:[function(require,module,exports){ 'use strict'; var hash = require('hash.js'); @@ -18676,7 +18701,7 @@ HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { return utils.encode(res, enc); }; -},{"hash.js":214,"minimalistic-assert":227,"minimalistic-crypto-utils":228}],221:[function(require,module,exports){ +},{"hash.js":215,"minimalistic-assert":228,"minimalistic-crypto-utils":229}],222:[function(require,module,exports){ exports.read = function (buffer, offset, isLE, mLen, nBytes) { var e, m var eLen = nBytes * 8 - mLen - 1 @@ -18762,7 +18787,7 @@ exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { buffer[offset + i - d] |= s * 128 } -},{}],222:[function(require,module,exports){ +},{}],223:[function(require,module,exports){ var indexOf = [].indexOf; @@ -18773,7 +18798,7 @@ module.exports = function(arr, obj){ } return -1; }; -},{}],223:[function(require,module,exports){ +},{}],224:[function(require,module,exports){ if (typeof Object.create === 'function') { // implementation from standard node.js 'util' module module.exports = function inherits(ctor, superCtor) { @@ -18798,7 +18823,7 @@ if (typeof Object.create === 'function') { } } -},{}],224:[function(require,module,exports){ +},{}],225:[function(require,module,exports){ /*! * Determine if an object is a Buffer * @@ -18821,14 +18846,14 @@ function isSlowBuffer (obj) { return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0)) } -},{}],225:[function(require,module,exports){ +},{}],226:[function(require,module,exports){ var toString = {}.toString; module.exports = Array.isArray || function (arr) { return toString.call(arr) == '[object Array]'; }; -},{}],226:[function(require,module,exports){ +},{}],227:[function(require,module,exports){ var bn = require('bn.js'); var brorand = require('brorand'); @@ -18943,7 +18968,7 @@ MillerRabin.prototype.getDivisor = function getDivisor(n, k) { return false; }; -},{"bn.js":36,"brorand":37}],227:[function(require,module,exports){ +},{"bn.js":37,"brorand":38}],228:[function(require,module,exports){ module.exports = assert; function assert(val, msg) { @@ -18956,7 +18981,7 @@ assert.equal = function assertEqual(l, r, msg) { throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r)); }; -},{}],228:[function(require,module,exports){ +},{}],229:[function(require,module,exports){ 'use strict'; var utils = exports; @@ -19016,7 +19041,7 @@ utils.encode = function encode(arr, enc) { return arr; }; -},{}],229:[function(require,module,exports){ +},{}],230:[function(require,module,exports){ exports.endianness = function () { return 'LE' }; exports.hostname = function () { @@ -19063,7 +19088,7 @@ exports.tmpdir = exports.tmpDir = function () { exports.EOL = '\n'; -},{}],230:[function(require,module,exports){ +},{}],231:[function(require,module,exports){ module.exports={"2.16.840.1.101.3.4.1.1": "aes-128-ecb", "2.16.840.1.101.3.4.1.2": "aes-128-cbc", "2.16.840.1.101.3.4.1.3": "aes-128-ofb", @@ -19077,7 +19102,7 @@ module.exports={"2.16.840.1.101.3.4.1.1": "aes-128-ecb", "2.16.840.1.101.3.4.1.43": "aes-256-ofb", "2.16.840.1.101.3.4.1.44": "aes-256-cfb" } -},{}],231:[function(require,module,exports){ +},{}],232:[function(require,module,exports){ // from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js // Fedor, you are amazing. 'use strict' @@ -19201,7 +19226,7 @@ exports.signature = asn1.define('signature', function () { ) }) -},{"./certificate":232,"asn1.js":1}],232:[function(require,module,exports){ +},{"./certificate":233,"asn1.js":1}],233:[function(require,module,exports){ // from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js // thanks to @Rantanen @@ -19291,7 +19316,7 @@ var X509Certificate = asn.define('X509Certificate', function () { module.exports = X509Certificate -},{"asn1.js":1}],233:[function(require,module,exports){ +},{"asn1.js":1}],234:[function(require,module,exports){ (function (Buffer){ // adapted from https://github.com/apatil/pemstrip var findProc = /Proc-Type: 4,ENCRYPTED\n\r?DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)\n\r?\n\r?([0-9A-z\n\r\+\/\=]+)\n\r?/m @@ -19325,7 +19350,7 @@ module.exports = function (okey, password) { } }).call(this,require("buffer").Buffer) -},{"browserify-aes":41,"buffer":66,"evp_bytestokey":213}],234:[function(require,module,exports){ +},{"browserify-aes":42,"buffer":67,"evp_bytestokey":214}],235:[function(require,module,exports){ (function (Buffer){ var asn1 = require('./asn1') var aesid = require('./aesid.json') @@ -19435,7 +19460,7 @@ function decrypt (data, password) { } }).call(this,require("buffer").Buffer) -},{"./aesid.json":230,"./asn1":231,"./fixProc":233,"browserify-aes":41,"buffer":66,"pbkdf2":236}],235:[function(require,module,exports){ +},{"./aesid.json":231,"./asn1":232,"./fixProc":234,"browserify-aes":42,"buffer":67,"pbkdf2":237}],236:[function(require,module,exports){ (function (process){ // Copyright Joyent, Inc. and other Node contributors. // @@ -19663,7 +19688,7 @@ var substr = 'ab'.substr(-1) === 'b' ; }).call(this,require('_process')) -},{"_process":239}],236:[function(require,module,exports){ +},{"_process":240}],237:[function(require,module,exports){ (function (process,Buffer){ var createHmac = require('create-hmac') var checkParameters = require('./precondition') @@ -19735,7 +19760,7 @@ exports.pbkdf2Sync = function (password, salt, iterations, keylen, digest) { } }).call(this,require('_process'),require("buffer").Buffer) -},{"./precondition":237,"_process":239,"buffer":66,"create-hmac":184}],237:[function(require,module,exports){ +},{"./precondition":238,"_process":240,"buffer":67,"create-hmac":185}],238:[function(require,module,exports){ var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs module.exports = function (iterations, keylen) { if (typeof iterations !== 'number') { @@ -19755,7 +19780,7 @@ module.exports = function (iterations, keylen) { } } -},{}],238:[function(require,module,exports){ +},{}],239:[function(require,module,exports){ (function (process){ 'use strict'; @@ -19802,7 +19827,7 @@ function nextTick(fn, arg1, arg2, arg3) { } }).call(this,require('_process')) -},{"_process":239}],239:[function(require,module,exports){ +},{"_process":240}],240:[function(require,module,exports){ // shim for using process in browser var process = module.exports = {}; @@ -19984,7 +20009,7 @@ process.chdir = function (dir) { }; process.umask = function() { return 0; }; -},{}],240:[function(require,module,exports){ +},{}],241:[function(require,module,exports){ exports.publicEncrypt = require('./publicEncrypt'); exports.privateDecrypt = require('./privateDecrypt'); @@ -19995,7 +20020,7 @@ exports.privateEncrypt = function privateEncrypt(key, buf) { exports.publicDecrypt = function publicDecrypt(key, buf) { return exports.privateDecrypt(key, buf, true); }; -},{"./privateDecrypt":242,"./publicEncrypt":243}],241:[function(require,module,exports){ +},{"./privateDecrypt":243,"./publicEncrypt":244}],242:[function(require,module,exports){ (function (Buffer){ var createHash = require('create-hash'); module.exports = function (seed, len) { @@ -20014,7 +20039,7 @@ function i2ops(c) { return out; } }).call(this,require("buffer").Buffer) -},{"buffer":66,"create-hash":181}],242:[function(require,module,exports){ +},{"buffer":67,"create-hash":182}],243:[function(require,module,exports){ (function (Buffer){ var parseKeys = require('parse-asn1'); var mgf = require('./mgf'); @@ -20125,7 +20150,7 @@ function compare(a, b){ return dif; } }).call(this,require("buffer").Buffer) -},{"./mgf":241,"./withPublic":244,"./xor":245,"bn.js":36,"browserify-rsa":57,"buffer":66,"create-hash":181,"parse-asn1":234}],243:[function(require,module,exports){ +},{"./mgf":242,"./withPublic":245,"./xor":246,"bn.js":37,"browserify-rsa":58,"buffer":67,"create-hash":182,"parse-asn1":235}],244:[function(require,module,exports){ (function (Buffer){ var parseKeys = require('parse-asn1'); var randomBytes = require('randombytes'); @@ -20223,7 +20248,7 @@ function nonZero(len, crypto) { return out; } }).call(this,require("buffer").Buffer) -},{"./mgf":241,"./withPublic":244,"./xor":245,"bn.js":36,"browserify-rsa":57,"buffer":66,"create-hash":181,"parse-asn1":234,"randombytes":246}],244:[function(require,module,exports){ +},{"./mgf":242,"./withPublic":245,"./xor":246,"bn.js":37,"browserify-rsa":58,"buffer":67,"create-hash":182,"parse-asn1":235,"randombytes":247}],245:[function(require,module,exports){ (function (Buffer){ var bn = require('bn.js'); function withPublic(paddedMsg, key) { @@ -20236,7 +20261,7 @@ function withPublic(paddedMsg, key) { module.exports = withPublic; }).call(this,require("buffer").Buffer) -},{"bn.js":36,"buffer":66}],245:[function(require,module,exports){ +},{"bn.js":37,"buffer":67}],246:[function(require,module,exports){ module.exports = function xor(a, b) { var len = a.length; var i = -1; @@ -20245,7 +20270,7 @@ module.exports = function xor(a, b) { } return a }; -},{}],246:[function(require,module,exports){ +},{}],247:[function(require,module,exports){ (function (process,global,Buffer){ 'use strict' @@ -20285,10 +20310,10 @@ function randomBytes (size, cb) { } }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) -},{"_process":239,"buffer":66}],247:[function(require,module,exports){ +},{"_process":240,"buffer":67}],248:[function(require,module,exports){ module.exports = require("./lib/_stream_duplex.js") -},{"./lib/_stream_duplex.js":248}],248:[function(require,module,exports){ +},{"./lib/_stream_duplex.js":249}],249:[function(require,module,exports){ // a duplex stream is just a stream that is both readable and writable. // Since JS doesn't have multiple prototypal inheritance, this class // prototypally inherits from Readable, and then parasitically from @@ -20364,7 +20389,7 @@ function forEach(xs, f) { f(xs[i], i); } } -},{"./_stream_readable":250,"./_stream_writable":252,"core-util-is":179,"inherits":223,"process-nextick-args":238}],249:[function(require,module,exports){ +},{"./_stream_readable":251,"./_stream_writable":253,"core-util-is":180,"inherits":224,"process-nextick-args":239}],250:[function(require,module,exports){ // a passthrough stream. // basically just the most minimal sort of Transform stream. // Every written chunk gets output as-is. @@ -20391,7 +20416,7 @@ function PassThrough(options) { PassThrough.prototype._transform = function (chunk, encoding, cb) { cb(null, chunk); }; -},{"./_stream_transform":251,"core-util-is":179,"inherits":223}],250:[function(require,module,exports){ +},{"./_stream_transform":252,"core-util-is":180,"inherits":224}],251:[function(require,module,exports){ (function (process){ 'use strict'; @@ -21335,7 +21360,7 @@ function indexOf(xs, x) { return -1; } }).call(this,require('_process')) -},{"./_stream_duplex":248,"./internal/streams/BufferList":253,"_process":239,"buffer":66,"buffer-shims":64,"core-util-is":179,"events":212,"inherits":223,"isarray":225,"process-nextick-args":238,"string_decoder/":268,"util":38}],251:[function(require,module,exports){ +},{"./_stream_duplex":249,"./internal/streams/BufferList":254,"_process":240,"buffer":67,"buffer-shims":65,"core-util-is":180,"events":213,"inherits":224,"isarray":226,"process-nextick-args":239,"string_decoder/":269,"util":39}],252:[function(require,module,exports){ // a transform stream is a readable/writable stream where you do // something with the data. Sometimes it's called a "filter", // but that's not a great name for it, since that implies a thing where @@ -21518,7 +21543,7 @@ function done(stream, er, data) { return stream.push(null); } -},{"./_stream_duplex":248,"core-util-is":179,"inherits":223}],252:[function(require,module,exports){ +},{"./_stream_duplex":249,"core-util-is":180,"inherits":224}],253:[function(require,module,exports){ (function (process){ // A bit simpler than readable streams. // Implement an async ._write(chunk, encoding, cb), and it'll handle all @@ -22072,7 +22097,7 @@ function CorkedRequest(state) { }; } }).call(this,require('_process')) -},{"./_stream_duplex":248,"_process":239,"buffer":66,"buffer-shims":64,"core-util-is":179,"events":212,"inherits":223,"process-nextick-args":238,"util-deprecate":269}],253:[function(require,module,exports){ +},{"./_stream_duplex":249,"_process":240,"buffer":67,"buffer-shims":65,"core-util-is":180,"events":213,"inherits":224,"process-nextick-args":239,"util-deprecate":270}],254:[function(require,module,exports){ 'use strict'; var Buffer = require('buffer').Buffer; @@ -22137,10 +22162,10 @@ BufferList.prototype.concat = function (n) { } return ret; }; -},{"buffer":66,"buffer-shims":64}],254:[function(require,module,exports){ +},{"buffer":67,"buffer-shims":65}],255:[function(require,module,exports){ module.exports = require("./lib/_stream_passthrough.js") -},{"./lib/_stream_passthrough.js":249}],255:[function(require,module,exports){ +},{"./lib/_stream_passthrough.js":250}],256:[function(require,module,exports){ (function (process){ var Stream = (function (){ try { @@ -22160,13 +22185,13 @@ if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) { } }).call(this,require('_process')) -},{"./lib/_stream_duplex.js":248,"./lib/_stream_passthrough.js":249,"./lib/_stream_readable.js":250,"./lib/_stream_transform.js":251,"./lib/_stream_writable.js":252,"_process":239}],256:[function(require,module,exports){ +},{"./lib/_stream_duplex.js":249,"./lib/_stream_passthrough.js":250,"./lib/_stream_readable.js":251,"./lib/_stream_transform.js":252,"./lib/_stream_writable.js":253,"_process":240}],257:[function(require,module,exports){ module.exports = require("./lib/_stream_transform.js") -},{"./lib/_stream_transform.js":251}],257:[function(require,module,exports){ +},{"./lib/_stream_transform.js":252}],258:[function(require,module,exports){ module.exports = require("./lib/_stream_writable.js") -},{"./lib/_stream_writable.js":252}],258:[function(require,module,exports){ +},{"./lib/_stream_writable.js":253}],259:[function(require,module,exports){ (function (Buffer){ /* CryptoJS v3.1.2 @@ -22380,7 +22405,7 @@ function ripemd160 (message) { module.exports = ripemd160 }).call(this,require("buffer").Buffer) -},{"buffer":66}],259:[function(require,module,exports){ +},{"buffer":67}],260:[function(require,module,exports){ (function (Buffer){ // prototype class for hash functions function Hash (blockSize, finalSize) { @@ -22453,7 +22478,7 @@ Hash.prototype._update = function () { module.exports = Hash }).call(this,require("buffer").Buffer) -},{"buffer":66}],260:[function(require,module,exports){ +},{"buffer":67}],261:[function(require,module,exports){ var exports = module.exports = function SHA (algorithm) { algorithm = algorithm.toLowerCase() @@ -22470,7 +22495,7 @@ exports.sha256 = require('./sha256') exports.sha384 = require('./sha384') exports.sha512 = require('./sha512') -},{"./sha":261,"./sha1":262,"./sha224":263,"./sha256":264,"./sha384":265,"./sha512":266}],261:[function(require,module,exports){ +},{"./sha":262,"./sha1":263,"./sha224":264,"./sha256":265,"./sha384":266,"./sha512":267}],262:[function(require,module,exports){ (function (Buffer){ /* * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined @@ -22567,7 +22592,7 @@ Sha.prototype._hash = function () { module.exports = Sha }).call(this,require("buffer").Buffer) -},{"./hash":259,"buffer":66,"inherits":223}],262:[function(require,module,exports){ +},{"./hash":260,"buffer":67,"inherits":224}],263:[function(require,module,exports){ (function (Buffer){ /* * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined @@ -22669,7 +22694,7 @@ Sha1.prototype._hash = function () { module.exports = Sha1 }).call(this,require("buffer").Buffer) -},{"./hash":259,"buffer":66,"inherits":223}],263:[function(require,module,exports){ +},{"./hash":260,"buffer":67,"inherits":224}],264:[function(require,module,exports){ (function (Buffer){ /** * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined @@ -22725,7 +22750,7 @@ Sha224.prototype._hash = function () { module.exports = Sha224 }).call(this,require("buffer").Buffer) -},{"./hash":259,"./sha256":264,"buffer":66,"inherits":223}],264:[function(require,module,exports){ +},{"./hash":260,"./sha256":265,"buffer":67,"inherits":224}],265:[function(require,module,exports){ (function (Buffer){ /** * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined @@ -22863,7 +22888,7 @@ Sha256.prototype._hash = function () { module.exports = Sha256 }).call(this,require("buffer").Buffer) -},{"./hash":259,"buffer":66,"inherits":223}],265:[function(require,module,exports){ +},{"./hash":260,"buffer":67,"inherits":224}],266:[function(require,module,exports){ (function (Buffer){ var inherits = require('inherits') var SHA512 = require('./sha512') @@ -22923,7 +22948,7 @@ Sha384.prototype._hash = function () { module.exports = Sha384 }).call(this,require("buffer").Buffer) -},{"./hash":259,"./sha512":266,"buffer":66,"inherits":223}],266:[function(require,module,exports){ +},{"./hash":260,"./sha512":267,"buffer":67,"inherits":224}],267:[function(require,module,exports){ (function (Buffer){ var inherits = require('inherits') var Hash = require('./hash') @@ -23186,7 +23211,7 @@ Sha512.prototype._hash = function () { module.exports = Sha512 }).call(this,require("buffer").Buffer) -},{"./hash":259,"buffer":66,"inherits":223}],267:[function(require,module,exports){ +},{"./hash":260,"buffer":67,"inherits":224}],268:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -23315,7 +23340,7 @@ Stream.prototype.pipe = function(dest, options) { return dest; }; -},{"events":212,"inherits":223,"readable-stream/duplex.js":247,"readable-stream/passthrough.js":254,"readable-stream/readable.js":255,"readable-stream/transform.js":256,"readable-stream/writable.js":257}],268:[function(require,module,exports){ +},{"events":213,"inherits":224,"readable-stream/duplex.js":248,"readable-stream/passthrough.js":255,"readable-stream/readable.js":256,"readable-stream/transform.js":257,"readable-stream/writable.js":258}],269:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -23538,7 +23563,7 @@ function base64DetectIncompleteChar(buffer) { this.charLength = this.charReceived ? 3 : 0; } -},{"buffer":66}],269:[function(require,module,exports){ +},{"buffer":67}],270:[function(require,module,exports){ (function (global){ /** @@ -23609,7 +23634,7 @@ function config (name) { } }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],270:[function(require,module,exports){ +},{}],271:[function(require,module,exports){ var indexOf = require('indexof'); var Object_keys = function (obj) { @@ -23749,7 +23774,7 @@ exports.createContext = Script.createContext = function (context) { return copy; }; -},{"indexof":222}],271:[function(require,module,exports){ +},{"indexof":223}],272:[function(require,module,exports){ // This is free and unencumbered software released into the public domain. // See LICENSE.md for more information. @@ -23760,7 +23785,7 @@ module.exports = { TextDecoder: encoding.TextDecoder, }; -},{"./lib/encoding.js":273}],272:[function(require,module,exports){ +},{"./lib/encoding.js":274}],273:[function(require,module,exports){ (function(global) { 'use strict'; global["encoding-indexes"] = { @@ -23800,7 +23825,7 @@ module.exports = { }; }(this)); -},{}],273:[function(require,module,exports){ +},{}],274:[function(require,module,exports){ // This is free and unencumbered software released into the public domain. // See LICENSE.md for more information. @@ -26897,7 +26922,7 @@ if (typeof module !== "undefined" && module.exports) { global['TextDecoder'] = TextDecoder; }(this)); -},{"./encoding-indexes.js":272}],274:[function(require,module,exports){ +},{"./encoding-indexes.js":273}],275:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -26932,7 +26957,7 @@ exports.v1 = v1; /** exports.default = v1; -},{"./v1/index":278}],275:[function(require,module,exports){ +},{"./v1/index":279}],276:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -27038,7 +27063,13 @@ var Driver = function () { this._token = token; this._config = config; this._pool = new _pool2.default(this._createConnection.bind(this), this._destroyConnection.bind(this), Driver._validateConnection.bind(this), config.connectionPoolSize); - this._connectionProvider = this._createConnectionProvider(url, this._pool, this._driverOnErrorCallback.bind(this)); + + /** + * Reference to the connection provider. Initialized lazily by {@link _getOrCreateConnectionProvider}. + * @type {ConnectionProvider} + * @private + */ + this._connectionProvider = null; } /** @@ -27052,7 +27083,7 @@ var Driver = function () { key: '_createConnection', value: function _createConnection(url, release) { var sessionId = this._sessionIdGenerator++; - var conn = (0, _connector.connect)(url, this._config); + var conn = (0, _connector.connect)(url, this._config, this._connectionErrorCode()); var streamObserver = new _ConnectionStreamObserver(this, conn); conn.initialize(this._userAgent, this._token, streamObserver); conn._id = sessionId; @@ -27105,24 +27136,43 @@ var Driver = function () { key: 'session', value: function session(mode, bookmark) { var sessionMode = Driver._validateSessionMode(mode); - return this._createSession(sessionMode, this._connectionProvider, bookmark, this._config); + var connectionProvider = this._getOrCreateConnectionProvider(); + return this._createSession(sessionMode, connectionProvider, bookmark, this._config); } }, { key: '_createConnectionProvider', - //Extension point + // Extension point value: function _createConnectionProvider(address, connectionPool, driverOnErrorCallback) { return new _connectionProviders.DirectConnectionProvider(address, connectionPool, driverOnErrorCallback); } - //Extension point + // Extension point }, { key: '_createSession', value: function _createSession(mode, connectionProvider, bookmark, config) { return new _session2.default(mode, connectionProvider, bookmark, config); } + + // Extension point + + }, { + key: '_connectionErrorCode', + value: function _connectionErrorCode() { + // connection errors might result in different error codes depending on the driver + return _error.SERVICE_UNAVAILABLE; + } + }, { + key: '_getOrCreateConnectionProvider', + value: function _getOrCreateConnectionProvider() { + if (!this._connectionProvider) { + var driverOnErrorCallback = this._driverOnErrorCallback.bind(this); + this._connectionProvider = this._createConnectionProvider(this._url, this._pool, driverOnErrorCallback); + } + return this._connectionProvider; + } }, { key: '_driverOnErrorCallback', value: function _driverOnErrorCallback(error) { @@ -27202,8 +27252,9 @@ var _ConnectionStreamObserver = function (_StreamObserver) { if (this._driver.onCompleted) { this._driver.onCompleted(message); } - if (this._conn && message && message.server) { - this._conn.setServerVersion(message.server); + + if (this._observer && this._observer.onComplete) { + this._observer.onCompleted(message); } } }]); @@ -27215,7 +27266,7 @@ exports.READ = READ; exports.WRITE = WRITE; exports.default = Driver; -},{"./error":276,"./internal/connection-providers":285,"./internal/connector":286,"./internal/pool":291,"./internal/stream-observer":295,"./session":303,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/get":30,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32}],276:[function(require,module,exports){ +},{"./error":277,"./internal/connection-providers":287,"./internal/connector":288,"./internal/pool":292,"./internal/stream-observer":298,"./session":306,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/get":31,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33}],277:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -27298,7 +27349,7 @@ exports.SERVICE_UNAVAILABLE = SERVICE_UNAVAILABLE; exports.SESSION_EXPIRED = SESSION_EXPIRED; exports.PROTOCOL_ERROR = PROTOCOL_ERROR; -},{"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32}],277:[function(require,module,exports){ +},{"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33}],278:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -27529,7 +27580,7 @@ exports.UnboundRelationship = UnboundRelationship; exports.Path = Path; exports.PathSegment = PathSegment; -},{"babel-runtime/core-js/json/stringify":16,"babel-runtime/core-js/object/keys":22,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],278:[function(require,module,exports){ +},{"babel-runtime/core-js/json/stringify":16,"babel-runtime/core-js/object/keys":22,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],279:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -27565,51 +27616,59 @@ var _version = require('../version'); var _version2 = _interopRequireDefault(_version); -var _connector = require('./internal/connector'); - var _util = require('./internal/util'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + var auth = { basic: function basic(username, password) { var realm = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; if (realm) { - return { scheme: "basic", principal: username, credentials: password, realm: realm }; + return { scheme: 'basic', principal: username, credentials: password, realm: realm }; } else { - return { scheme: "basic", principal: username, credentials: password }; + return { scheme: 'basic', principal: username, credentials: password }; } }, + kerberos: function kerberos(base64EncodedTicket) { + return { + scheme: 'kerberos', + principal: '', // This empty string is required for backwards compatibility. + credentials: base64EncodedTicket + }; + }, custom: function custom(principal, credentials, realm, scheme) { var parameters = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined; if (parameters) { - return { scheme: scheme, principal: principal, credentials: credentials, realm: realm, - parameters: parameters }; + return { + scheme: scheme, principal: principal, credentials: credentials, realm: realm, + parameters: parameters + }; } else { return { scheme: scheme, principal: principal, credentials: credentials, realm: realm }; } } -}; /** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +}; var USER_AGENT = "neo4j-javascript/" + _version2.default; /** @@ -27684,13 +27743,17 @@ function driver(url, authToken) { var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; (0, _util.assertString)(url, 'Bolt URL'); - var scheme = (0, _connector.parseScheme)(url); - if (scheme === "bolt+routing://") { - return new _routingDriver2.default((0, _connector.parseUrl)(url), USER_AGENT, authToken, config); - } else if (scheme === "bolt://") { - return new _driver.Driver((0, _connector.parseUrl)(url), USER_AGENT, authToken, config); + var scheme = (0, _util.parseScheme)(url); + var routingContext = (0, _util.parseRoutingContext)(url); + if (scheme === 'bolt+routing://') { + return new _routingDriver2.default((0, _util.parseUrl)(url), routingContext, USER_AGENT, authToken, config); + } else if (scheme === 'bolt://') { + if (!(0, _util.isEmptyObjectOrNull)(routingContext)) { + throw new Error('Parameters are not supported with scheme \'bolt\'. Given URL: \'' + url + '\''); + } + return new _driver.Driver((0, _util.parseUrl)(url), USER_AGENT, authToken, config); } else { - throw new Error("Unknown scheme: " + scheme); + throw new Error('Unknown scheme: ' + scheme); } } @@ -27743,7 +27806,7 @@ exports.session = session; exports.error = error; exports.default = forExport; -},{"../version":305,"./driver":275,"./error":276,"./graph-types":277,"./integer":279,"./internal/connector":286,"./internal/util":298,"./record":299,"./result":301,"./result-summary":300,"./routing-driver":302}],279:[function(require,module,exports){ +},{"../version":308,"./driver":276,"./error":277,"./graph-types":278,"./integer":280,"./internal/util":301,"./record":302,"./result":304,"./result-summary":303,"./routing-driver":305}],280:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -28724,7 +28787,7 @@ exports.toNumber = toNumber; exports.toString = toString; exports.default = Integer; -},{"./error":276,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],280:[function(require,module,exports){ +},{"./error":277,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],281:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -29512,44 +29575,133 @@ exports.CombinedBuffer = CombinedBuffer; exports.NodeBuffer = NodeBuffer; exports.alloc = alloc; -},{"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/get":30,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32,"buffer":66}],281:[function(require,module,exports){ -"use strict"; +},{"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/get":31,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33,"buffer":67}],282:[function(require,module,exports){ +'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var _createClass2 = require("babel-runtime/helpers/createClass"); +var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); -var _net = require("net"); +var _features = require('./features'); + +var _features2 = _interopRequireDefault(_features); + +var _error = require('../error'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var ChannelConfig = function () { + function ChannelConfig(host, port, driverConfig, connectionErrorCode) { + (0, _classCallCheck3.default)(this, ChannelConfig); + + this.host = host; + this.port = port; + this.encrypted = ChannelConfig._extractEncrypted(driverConfig); + this.trust = ChannelConfig._extractTrust(driverConfig); + this.trustedCertificates = ChannelConfig._extractTrustedCertificates(driverConfig); + this.knownHostsPath = ChannelConfig._extractKnownHostsPath(driverConfig); + this.connectionErrorCode = connectionErrorCode || _error.SERVICE_UNAVAILABLE; + } + + (0, _createClass3.default)(ChannelConfig, null, [{ + key: '_extractEncrypted', + value: function _extractEncrypted(driverConfig) { + // check if encryption was configured by the user, use explicit null check because we permit boolean value + var encryptionConfigured = driverConfig.encrypted == null; + // default to using encryption if trust-all-certificates is available + return encryptionConfigured ? (0, _features2.default)('trust_all_certificates') : driverConfig.encrypted; + } + }, { + key: '_extractTrust', + value: function _extractTrust(driverConfig) { + if (driverConfig.trust) { + return driverConfig.trust; + } + // default to using TRUST_ALL_CERTIFICATES if it is available + return (0, _features2.default)('trust_all_certificates') ? 'TRUST_ALL_CERTIFICATES' : 'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES'; + } + }, { + key: '_extractTrustedCertificates', + value: function _extractTrustedCertificates(driverConfig) { + return driverConfig.trustedCertificates || []; + } + }, { + key: '_extractKnownHostsPath', + value: function _extractKnownHostsPath(driverConfig) { + return driverConfig.knownHosts || null; + } + }]); + return ChannelConfig; +}(); + +exports.default = ChannelConfig; +; + +},{"../error":277,"./features":289,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],283:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require('babel-runtime/helpers/createClass'); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _net = require('net'); var _net2 = _interopRequireDefault(_net); -var _tls = require("tls"); +var _tls = require('tls'); var _tls2 = _interopRequireDefault(_tls); -var _fs = require("fs"); +var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); -var _path = require("path"); +var _path = require('path'); var _path2 = _interopRequireDefault(_path); -var _os = require("os"); +var _os = require('os'); -var _buf = require("./buf"); +var _buf = require('./buf'); -var _util = require("./util"); +var _util = require('./util'); -var _error = require("./../error"); +var _error = require('./../error'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -29653,18 +29805,18 @@ var TrustStrategy = { /** * @deprecated Since version 1.0. Will be deleted in a future version. {@link #TRUST_CUSTOM_CA_SIGNED_CERTIFICATES}. */ - TRUST_SIGNED_CERTIFICATES: function TRUST_SIGNED_CERTIFICATES(opts, onSuccess, onFailure) { + TRUST_SIGNED_CERTIFICATES: function TRUST_SIGNED_CERTIFICATES(config, onSuccess, onFailure) { console.log("`TRUST_SIGNED_CERTIFICATES` has been deprecated as option and will be removed in a future version of " + "the driver. Please use `TRUST_CUSTOM_CA_SIGNED_CERTIFICATES` instead."); - return TrustStrategy.TRUST_CUSTOM_CA_SIGNED_CERTIFICATES(opts, onSuccess, onFailure); + return TrustStrategy.TRUST_CUSTOM_CA_SIGNED_CERTIFICATES(config, onSuccess, onFailure); }, - TRUST_CUSTOM_CA_SIGNED_CERTIFICATES: function TRUST_CUSTOM_CA_SIGNED_CERTIFICATES(opts, onSuccess, onFailure) { - if (!opts.trustedCertificates || opts.trustedCertificates.length == 0) { + TRUST_CUSTOM_CA_SIGNED_CERTIFICATES: function TRUST_CUSTOM_CA_SIGNED_CERTIFICATES(config, onSuccess, onFailure) { + if (!config.trustedCertificates || config.trustedCertificates.length === 0) { onFailure((0, _error.newError)("You are using TRUST_CUSTOM_CA_SIGNED_CERTIFICATES as the method " + "to verify trust for encrypted connections, but have not configured any " + "trustedCertificates. You must specify the path to at least one trusted " + "X.509 certificate for this to work. Two other alternatives is to use " + "TRUST_ALL_CERTIFICATES or to disable encryption by setting encrypted=\"" + _util.ENCRYPTION_OFF + "\"" + "in your driver configuration.")); return; } var tlsOpts = { - ca: opts.trustedCertificates.map(function (f) { + ca: config.trustedCertificates.map(function (f) { return _fs2.default.readFileSync(f); }), // Because we manually check for this in the connect callback, to give @@ -29672,7 +29824,7 @@ var TrustStrategy = { rejectUnauthorized: false }; - var socket = _tls2.default.connect(opts.port, opts.host, tlsOpts, function () { + var socket = _tls2.default.connect(config.port, config.host, tlsOpts, function () { if (!socket.authorized) { onFailure((0, _error.newError)("Server certificate is not trusted. If you trust the database you are connecting to, add" + " the signing certificate, or the server certificate, to the list of certificates trusted by this driver" + " using `neo4j.v1.driver(.., { trustedCertificates:['path/to/certificate.crt']}). This " + " is a security measure to protect against man-in-the-middle attacks. If you are just trying " + " Neo4j out and are not concerned about encryption, simply disable it using `encrypted=\"" + _util.ENCRYPTION_OFF + "\"`" + " in the driver options. Socket responded with: " + socket.authorizationError)); } else { @@ -29682,14 +29834,14 @@ var TrustStrategy = { socket.on('error', onFailure); return socket; }, - TRUST_SYSTEM_CA_SIGNED_CERTIFICATES: function TRUST_SYSTEM_CA_SIGNED_CERTIFICATES(opts, onSuccess, onFailure) { + TRUST_SYSTEM_CA_SIGNED_CERTIFICATES: function TRUST_SYSTEM_CA_SIGNED_CERTIFICATES(config, onSuccess, onFailure) { var tlsOpts = { // Because we manually check for this in the connect callback, to give // a more helpful error to the user rejectUnauthorized: false }; - var socket = _tls2.default.connect(opts.port, opts.host, tlsOpts, function () { + var socket = _tls2.default.connect(config.port, config.host, tlsOpts, function () { if (!socket.authorized) { onFailure((0, _error.newError)("Server certificate is not trusted. If you trust the database you are connecting to, use " + "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES and add" + " the signing certificate, or the server certificate, to the list of certificates trusted by this driver" + " using `neo4j.v1.driver(.., { trustedCertificates:['path/to/certificate.crt']}). This " + " is a security measure to protect against man-in-the-middle attacks. If you are just trying " + " Neo4j out and are not concerned about encryption, simply disable it using `encrypted=\"" + _util.ENCRYPTION_OFF + "\"`" + " in the driver options. Socket responded with: " + socket.authorizationError)); } else { @@ -29702,7 +29854,7 @@ var TrustStrategy = { /** * @deprecated in 1.1 in favour of {@link #TRUST_ALL_CERTIFICATES}. Will be deleted in a future version. */ - TRUST_ON_FIRST_USE: function TRUST_ON_FIRST_USE(opts, onSuccess, onFailure) { + TRUST_ON_FIRST_USE: function TRUST_ON_FIRST_USE(config, onSuccess, onFailure) { console.log("`TRUST_ON_FIRST_USE` has been deprecated as option and will be removed in a future version of " + "the driver. Please use `TRUST_ALL_CERTIFICATES` instead."); var tlsOpts = { @@ -29710,7 +29862,7 @@ var TrustStrategy = { rejectUnauthorized: false }; - var socket = _tls2.default.connect(opts.port, opts.host, tlsOpts, function () { + var socket = _tls2.default.connect(config.port, config.host, tlsOpts, function () { var serverCert = socket.getPeerCertificate( /*raw=*/true); if (!serverCert.raw) { @@ -29723,8 +29875,8 @@ var TrustStrategy = { } var serverFingerprint = require('crypto').createHash('sha512').update(serverCert.raw).digest("hex"); - var knownHostsPath = opts.knownHosts || _path2.default.join(userHome(), ".neo4j", "known_hosts"); - var serverId = opts.host + ":" + opts.port; + var knownHostsPath = config.knownHostsPath || _path2.default.join(userHome(), ".neo4j", "known_hosts"); + var serverId = config.host + ":" + config.port; loadFingerprint(serverId, knownHostsPath, function (knownFingerprint) { if (knownFingerprint === serverFingerprint) { @@ -29745,11 +29897,11 @@ var TrustStrategy = { return socket; }, - TRUST_ALL_CERTIFICATES: function TRUST_ALL_CERTIFICATES(opts, onSuccess, onFailure) { + TRUST_ALL_CERTIFICATES: function TRUST_ALL_CERTIFICATES(config, onSuccess, onFailure) { var tlsOpts = { rejectUnauthorized: false }; - var socket = _tls2.default.connect(opts.port, opts.host, tlsOpts, function () { + var socket = _tls2.default.connect(config.port, config.host, tlsOpts, function () { var certificate = socket.getPeerCertificate(); if ((0, _util.isEmptyObjectOrNull)(certificate)) { onFailure((0, _error.newError)("Secure connection was successful but server did not return any valid " + "certificates. Such connection can not be trusted. If you are just trying " + " Neo4j out and are not concerned about encryption, simply disable it using " + "`encrypted=\"" + _util.ENCRYPTION_OFF + "\"` in the driver options. " + "Socket responded with: " + socket.authorizationError)); @@ -29762,20 +29914,27 @@ var TrustStrategy = { } }; -function connect(opts, onSuccess) { +/** + * Connect using node socket. + * @param {ChannelConfig} config - configuration of this channel. + * @param {function} onSuccess - callback to execute on connection success. + * @param {function} onFailure - callback to execute on connection failure. + * @return {*} socket connection. + */ +function connect(config, onSuccess) { var onFailure = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () { return null; }; //still allow boolean for backwards compatibility - if (opts.encrypted === false || opts.encrypted === _util.ENCRYPTION_OFF) { - var conn = _net2.default.connect(opts.port, opts.host, onSuccess); + if (config.encrypted === false || config.encrypted === _util.ENCRYPTION_OFF) { + var conn = _net2.default.connect(config.port, config.host, onSuccess); conn.on('error', onFailure); return conn; - } else if (TrustStrategy[opts.trust]) { - return TrustStrategy[opts.trust](opts, onSuccess, onFailure); + } else if (TrustStrategy[config.trust]) { + return TrustStrategy[config.trust](config, onSuccess, onFailure); } else { - onFailure((0, _error.newError)("Unknown trust strategy: " + opts.trust + ". Please use either " + "trust:'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES' or trust:'TRUST_ALL_CERTIFICATES' in your driver " + "configuration. Alternatively, you can disable encryption by setting " + "`encrypted:\"" + _util.ENCRYPTION_OFF + "\"`. There is no mechanism to use encryption without trust verification, " + "because this incurs the overhead of encryption without improving security. If " + "the driver does not verify that the peer it is connected to is really Neo4j, it " + "is very easy for an attacker to bypass the encryption by pretending to be Neo4j.")); + onFailure((0, _error.newError)("Unknown trust strategy: " + config.trust + ". Please use either " + "trust:'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES' or trust:'TRUST_ALL_CERTIFICATES' in your driver " + "configuration. Alternatively, you can disable encryption by setting " + "`encrypted:\"" + _util.ENCRYPTION_OFF + "\"`. There is no mechanism to use encryption without trust verification, " + "because this incurs the overhead of encryption without improving security. If " + "the driver does not verify that the peer it is connected to is really Neo4j, it " + "is very easy for an attacker to bypass the encryption by pretending to be Neo4j.")); } } @@ -29789,11 +29948,9 @@ var NodeChannel = function () { /** * Create new instance - * @param {Object} opts - Options object - * @param {string} opts.host - The host, including protocol to connect to. - * @param {Integer} opts.port - The port to use. + * @param {ChannelConfig} config - configuration for this channel. */ - function NodeChannel(opts) { + function NodeChannel(config) { (0, _classCallCheck3.default)(this, NodeChannel); var self = this; @@ -29805,9 +29962,10 @@ var NodeChannel = function () { this._error = null; this._handleConnectionError = this._handleConnectionError.bind(this); this._handleConnectionTerminated = this._handleConnectionTerminated.bind(this); + this._connectionErrorCode = config.connectionErrorCode; - this._encrypted = opts.encrypted; - this._conn = connect(opts, function () { + this._encrypted = config.encrypted; + this._conn = connect(config, function () { if (!self._open) { return; } @@ -29831,24 +29989,24 @@ var NodeChannel = function () { } (0, _createClass3.default)(NodeChannel, [{ - key: "_handleConnectionError", + key: '_handleConnectionError', value: function _handleConnectionError(err) { var msg = err.message || 'Failed to connect to server'; - this._error = (0, _error.newError)(msg, _error.SESSION_EXPIRED); + this._error = (0, _error.newError)(msg, this._connectionErrorCode); if (this.onerror) { this.onerror(this._error); } } }, { - key: "_handleConnectionTerminated", + key: '_handleConnectionTerminated', value: function _handleConnectionTerminated() { - this._error = (0, _error.newError)('Connection was closed by server', _error.SESSION_EXPIRED); + this._error = (0, _error.newError)('Connection was closed by server', this._connectionErrorCode); if (this.onerror) { this.onerror(this._error); } } }, { - key: "isEncrypted", + key: 'isEncrypted', value: function isEncrypted() { return this._encrypted; } @@ -29859,7 +30017,7 @@ var NodeChannel = function () { */ }, { - key: "write", + key: 'write', value: function write(buffer) { // If there is a pending queue, push this on that queue. This means // we are not yet connected, so we queue things locally. @@ -29879,7 +30037,7 @@ var NodeChannel = function () { */ }, { - key: "close", + key: 'close', value: function close() { var cb = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () { return null; @@ -29909,7 +30067,7 @@ try { exports.default = _nodeChannelModule; -},{"./../error":276,"./buf":280,"./util":298,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"crypto":185,"fs":63,"net":63,"os":229,"path":235,"readline":63,"tls":63}],282:[function(require,module,exports){ +},{"./../error":277,"./buf":281,"./util":301,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"crypto":186,"fs":64,"net":64,"os":230,"path":236,"readline":64,"tls":64}],284:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -29940,11 +30098,9 @@ var WebSocketChannel = function () { /** * Create new instance - * @param {Object} opts - Options object - * @param {string} opts.host - The host, including protocol to connect to. - * @param {Integer} opts.port - The port to use. + * @param {ChannelConfig} config - configuration for this channel. */ - function WebSocketChannel(opts) { + function WebSocketChannel(config) { (0, _classCallCheck3.default)(this, WebSocketChannel); @@ -29952,20 +30108,21 @@ var WebSocketChannel = function () { this._pending = []; this._error = null; this._handleConnectionError = this._handleConnectionError.bind(this); + this._connectionErrorCode = config.connectionErrorCode; - this._encrypted = opts.encrypted; + this._encrypted = config.encrypted; var scheme = "ws"; //Allow boolean for backwards compatibility - if (opts.encrypted === true || opts.encrypted === _util.ENCRYPTION_ON) { - if (!opts.trust || opts.trust === "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES") { + if (config.encrypted === true || config.encrypted === _util.ENCRYPTION_ON) { + if (!config.trust || config.trust === 'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES') { scheme = "wss"; } else { - this._error = (0, _error.newError)("The browser version of this driver only supports one trust " + "strategy, 'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES'. " + opts.trust + " is not supported. Please " + "either use TRUST_CUSTOM_CA_SIGNED_CERTIFICATES or disable encryption by setting " + "`encrypted:\"" + _util.ENCRYPTION_OFF + "\"` in the driver configuration."); + this._error = (0, _error.newError)("The browser version of this driver only supports one trust " + 'strategy, \'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES\'. ' + config.trust + ' is not supported. Please ' + "either use TRUST_CUSTOM_CA_SIGNED_CERTIFICATES or disable encryption by setting " + "`encrypted:\"" + _util.ENCRYPTION_OFF + "\"` in the driver configuration."); return; } } - this._url = scheme + "://" + opts.host + ":" + opts.port; + this._url = scheme + '://' + config.host + ':' + config.port; this._ws = new WebSocket(this._url); this._ws.binaryType = "arraybuffer"; @@ -30001,7 +30158,7 @@ var WebSocketChannel = function () { // onerror triggers on websocket close as well.. don't get me started. if (this._open) { // http://stackoverflow.com/questions/25779831/how-to-catch-websocket-connection-to-ws-xxxnn-failed-connection-closed-be - this._error = (0, _error.newError)("WebSocket connection failure. Due to security " + "constraints in your web browser, the reason for the failure is not available " + "to this Neo4j Driver. Please use your browsers development console to determine " + "the root cause of the failure. Common reasons include the database being " + "unavailable, using the wrong connection URL or temporary network problems. " + "If you have enabled encryption, ensure your browser is configured to trust the " + "certificate Neo4j is configured to use. WebSocket `readyState` is: " + this._ws.readyState); + this._error = (0, _error.newError)("WebSocket connection failure. Due to security " + "constraints in your web browser, the reason for the failure is not available " + "to this Neo4j Driver. Please use your browsers development console to determine " + "the root cause of the failure. Common reasons include the database being " + "unavailable, using the wrong connection URL or temporary network problems. " + "If you have enabled encryption, ensure your browser is configured to trust the " + "certificate Neo4j is configured to use. WebSocket `readyState` is: " + this._ws.readyState, this._connectionErrorCode); if (this.onerror) { this.onerror(this._error); } @@ -30074,7 +30231,7 @@ var _websocketChannelModule = { channel: WebSocketChannel, available: available exports.default = _websocketChannelModule; -},{"./../error":276,"./buf":280,"./util":298,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],283:[function(require,module,exports){ +},{"./../error":277,"./buf":281,"./util":301,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],285:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -30341,7 +30498,7 @@ var Dechunker = function () { exports.Chunker = Chunker; exports.Dechunker = Dechunker; -},{"./buf":280,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32}],284:[function(require,module,exports){ +},{"./buf":281,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33}],286:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -30547,7 +30704,7 @@ var EmptyConnectionHolder = function (_ConnectionHolder) { var EMPTY_CONNECTION_HOLDER = exports.EMPTY_CONNECTION_HOLDER = new EmptyConnectionHolder(); -},{"../error":276,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32}],285:[function(require,module,exports){ +},{"../error":277,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33}],287:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -30605,26 +30762,11 @@ var _features2 = _interopRequireDefault(_features); var _hostNameResolvers = require('./host-name-resolvers'); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var _routingUtil = require('./routing-util'); -/** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +var _routingUtil2 = _interopRequireDefault(_routingUtil); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var ConnectionProvider = function () { function ConnectionProvider() { @@ -30649,7 +30791,24 @@ var ConnectionProvider = function () { } }]); return ConnectionProvider; -}(); +}(); /** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ var DirectConnectionProvider = exports.DirectConnectionProvider = function (_ConnectionProvider) { (0, _inherits3.default)(DirectConnectionProvider, _ConnectionProvider); @@ -30679,32 +30838,33 @@ var DirectConnectionProvider = exports.DirectConnectionProvider = function (_Con var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { (0, _inherits3.default)(LoadBalancer, _ConnectionProvider2); - function LoadBalancer(address, connectionPool, driverOnErrorCallback) { + function LoadBalancer(address, routingContext, connectionPool, driverOnErrorCallback) { (0, _classCallCheck3.default)(this, LoadBalancer); var _this2 = (0, _possibleConstructorReturn3.default)(this, (LoadBalancer.__proto__ || (0, _getPrototypeOf2.default)(LoadBalancer)).call(this)); _this2._seedRouter = address; _this2._routingTable = new _routingTable2.default(new _roundRobinArray2.default([_this2._seedRouter])); - _this2._rediscovery = new _rediscovery2.default(); + _this2._rediscovery = new _rediscovery2.default(new _routingUtil2.default(routingContext)); _this2._connectionPool = connectionPool; _this2._driverOnErrorCallback = driverOnErrorCallback; _this2._hostNameResolver = LoadBalancer._createHostNameResolver(); + _this2._useSeedRouter = false; return _this2; } (0, _createClass3.default)(LoadBalancer, [{ key: 'acquireConnection', - value: function acquireConnection(mode) { + value: function acquireConnection(accessMode) { var _this3 = this; - var connectionPromise = this._freshRoutingTable().then(function (routingTable) { - if (mode === _driver.READ) { + var connectionPromise = this._freshRoutingTable(accessMode).then(function (routingTable) { + if (accessMode === _driver.READ) { return _this3._acquireConnectionToServer(routingTable.readers, 'read'); - } else if (mode === _driver.WRITE) { + } else if (accessMode === _driver.WRITE) { return _this3._acquireConnectionToServer(routingTable.writers, 'write'); } else { - throw (0, _error.newError)('Illegal mode ' + mode); + throw (0, _error.newError)('Illegal mode ' + accessMode); } }); return this._withAdditionalOnErrorCallback(connectionPromise, this._driverOnErrorCallback); @@ -30725,16 +30885,16 @@ var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { value: function _acquireConnectionToServer(serversRoundRobinArray, serverName) { var address = serversRoundRobinArray.next(); if (!address) { - return _promise2.default.reject((0, _error.newError)('No ' + serverName + ' servers available', _error.SESSION_EXPIRED)); + return _promise2.default.reject((0, _error.newError)('Failed to obtain connection towards ' + serverName + ' server. Known routing table is: ' + this._routingTable, _error.SESSION_EXPIRED)); } return this._connectionPool.acquire(address); } }, { key: '_freshRoutingTable', - value: function _freshRoutingTable() { + value: function _freshRoutingTable(accessMode) { var currentRoutingTable = this._routingTable; - if (!currentRoutingTable.isStale()) { + if (!currentRoutingTable.isStaleFor(accessMode)) { return _promise2.default.resolve(currentRoutingTable); } return this._refreshRoutingTable(currentRoutingTable); @@ -30742,60 +30902,90 @@ var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { }, { key: '_refreshRoutingTable', value: function _refreshRoutingTable(currentRoutingTable) { - var _this4 = this; - var knownRouters = currentRoutingTable.routers.toArray(); - return this._fetchNewRoutingTable(knownRouters, currentRoutingTable).then(function (newRoutingTable) { - if (LoadBalancer._isValidRoutingTable(newRoutingTable)) { - // one of the known routers returned a valid routing table - use it + if (this._useSeedRouter) { + return this._fetchRoutingTableFromSeedRouterFallbackToKnownRouters(knownRouters, currentRoutingTable); + } + return this._fetchRoutingTableFromKnownRoutersFallbackToSeedRouter(knownRouters, currentRoutingTable); + } + }, { + key: '_fetchRoutingTableFromSeedRouterFallbackToKnownRouters', + value: function _fetchRoutingTableFromSeedRouterFallbackToKnownRouters(knownRouters, currentRoutingTable) { + var _this4 = this; + + // we start with seed router, no routers were probed before + var seenRouters = []; + return this._fetchRoutingTableUsingSeedRouter(seenRouters, this._seedRouter).then(function (newRoutingTable) { + if (newRoutingTable) { + _this4._useSeedRouter = false; return newRoutingTable; } - if (!newRoutingTable) { - // returned routing table was undefined, this means a connection error happened and the last known - // router did not return a valid routing table, so we need to forget it - var lastRouterIndex = knownRouters.length - 1; - LoadBalancer._forgetRouter(currentRoutingTable, knownRouters, lastRouterIndex); + // seed router did not return a valid routing table - try to use other known routers + return _this4._fetchRoutingTableUsingKnownRouters(knownRouters, currentRoutingTable); + }).then(function (newRoutingTable) { + _this4._applyRoutingTableIfPossible(newRoutingTable); + return newRoutingTable; + }); + } + }, { + key: '_fetchRoutingTableFromKnownRoutersFallbackToSeedRouter', + value: function _fetchRoutingTableFromKnownRoutersFallbackToSeedRouter(knownRouters, currentRoutingTable) { + var _this5 = this; + + return this._fetchRoutingTableUsingKnownRouters(knownRouters, currentRoutingTable).then(function (newRoutingTable) { + if (newRoutingTable) { + return newRoutingTable; } // none of the known routers returned a valid routing table - try to use seed router address for rediscovery - return _this4._fetchNewRoutingTableUsingSeedRouterAddress(knownRouters, _this4._seedRouter); + return _this5._fetchRoutingTableUsingSeedRouter(knownRouters, _this5._seedRouter); }).then(function (newRoutingTable) { - if (LoadBalancer._isValidRoutingTable(newRoutingTable)) { - _this4._updateRoutingTable(newRoutingTable); + _this5._applyRoutingTableIfPossible(newRoutingTable); + return newRoutingTable; + }); + } + }, { + key: '_fetchRoutingTableUsingKnownRouters', + value: function _fetchRoutingTableUsingKnownRouters(knownRouters, currentRoutingTable) { + return this._fetchRoutingTable(knownRouters, currentRoutingTable).then(function (newRoutingTable) { + if (newRoutingTable) { + // one of the known routers returned a valid routing table - use it return newRoutingTable; } - // none of the existing routers returned valid routing table, throw exception - throw (0, _error.newError)('Could not perform discovery. No routing servers available.', _error.SERVICE_UNAVAILABLE); + // returned routing table was undefined, this means a connection error happened and the last known + // router did not return a valid routing table, so we need to forget it + var lastRouterIndex = knownRouters.length - 1; + LoadBalancer._forgetRouter(currentRoutingTable, knownRouters, lastRouterIndex); + + return null; }); } }, { - key: '_fetchNewRoutingTableUsingSeedRouterAddress', - value: function _fetchNewRoutingTableUsingSeedRouterAddress(knownRouters, seedRouter) { - var _this5 = this; + key: '_fetchRoutingTableUsingSeedRouter', + value: function _fetchRoutingTableUsingSeedRouter(seenRouters, seedRouter) { + var _this6 = this; return this._hostNameResolver.resolve(seedRouter).then(function (resolvedRouterAddresses) { // filter out all addresses that we've already tried var newAddresses = resolvedRouterAddresses.filter(function (address) { - return knownRouters.indexOf(address) < 0; + return seenRouters.indexOf(address) < 0; }); - return _this5._fetchNewRoutingTable(newAddresses, null); + return _this6._fetchRoutingTable(newAddresses, null); }); } }, { - key: '_fetchNewRoutingTable', - value: function _fetchNewRoutingTable(routerAddresses, routingTable) { - var _this6 = this; + key: '_fetchRoutingTable', + value: function _fetchRoutingTable(routerAddresses, routingTable) { + var _this7 = this; return routerAddresses.reduce(function (refreshedTablePromise, currentRouter, currentIndex) { return refreshedTablePromise.then(function (newRoutingTable) { if (newRoutingTable) { - if (!newRoutingTable.writers.isEmpty()) { - // valid routing table was fetched - just return it, try next router otherwise - return newRoutingTable; - } + // valid routing table was fetched - just return it, try next router otherwise + return newRoutingTable; } else { // returned routing table was undefined, this means a connection error happened and we need to forget the // previous router and try the next one @@ -30804,8 +30994,8 @@ var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { } // try next router - var session = _this6._createSessionForRediscovery(currentRouter); - return _this6._rediscovery.lookupRoutingTableOnRouter(session, currentRouter); + var session = _this7._createSessionForRediscovery(currentRouter); + return _this7._rediscovery.lookupRoutingTableOnRouter(session, currentRouter); }); }, _promise2.default.resolve(null)); } @@ -30813,32 +31003,45 @@ var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { key: '_createSessionForRediscovery', value: function _createSessionForRediscovery(routerAddress) { var connection = this._connectionPool.acquire(routerAddress); - var connectionPromise = _promise2.default.resolve(connection); - var connectionProvider = new SingleConnectionProvider(connectionPromise); + // initialized connection is required for routing procedure call + // server version needs to be known to decide which routing procedure to use + var initializedConnectionPromise = connection.initializationCompleted(); + var connectionProvider = new SingleConnectionProvider(initializedConnectionPromise); return new _session2.default(_driver.READ, connectionProvider); } + }, { + key: '_applyRoutingTableIfPossible', + value: function _applyRoutingTableIfPossible(newRoutingTable) { + if (!newRoutingTable) { + // none of routing servers returned valid routing table, throw exception + throw (0, _error.newError)('Could not perform discovery. No routing servers available. Known routing table: ' + this._routingTable, _error.SERVICE_UNAVAILABLE); + } + + if (newRoutingTable.writers.isEmpty()) { + // use seed router next time. this is important when cluster is partitioned. it tries to make sure driver + // does not always get routing table without writers because it talks exclusively to a minority partition + this._useSeedRouter = true; + } + + this._updateRoutingTable(newRoutingTable); + } }, { key: '_updateRoutingTable', value: function _updateRoutingTable(newRoutingTable) { - var _this7 = this; + var _this8 = this; var currentRoutingTable = this._routingTable; // close old connections to servers not present in the new routing table var staleServers = currentRoutingTable.serversDiff(newRoutingTable); staleServers.forEach(function (server) { - return _this7._connectionPool.purge(server); + return _this8._connectionPool.purge(server); }); // make this driver instance aware of the new table this._routingTable = newRoutingTable; } }], [{ - key: '_isValidRoutingTable', - value: function _isValidRoutingTable(routingTable) { - return routingTable && !routingTable.writers.isEmpty(); - } - }, { key: '_forgetRouter', value: function _forgetRouter(routingTable, routersArray, routerIndex) { var address = routersArray[routerIndex]; @@ -30864,10 +31067,10 @@ var SingleConnectionProvider = exports.SingleConnectionProvider = function (_Con function SingleConnectionProvider(connectionPromise) { (0, _classCallCheck3.default)(this, SingleConnectionProvider); - var _this8 = (0, _possibleConstructorReturn3.default)(this, (SingleConnectionProvider.__proto__ || (0, _getPrototypeOf2.default)(SingleConnectionProvider)).call(this)); + var _this9 = (0, _possibleConstructorReturn3.default)(this, (SingleConnectionProvider.__proto__ || (0, _getPrototypeOf2.default)(SingleConnectionProvider)).call(this)); - _this8._connectionPromise = connectionPromise; - return _this8; + _this9._connectionPromise = connectionPromise; + return _this9; } (0, _createClass3.default)(SingleConnectionProvider, [{ @@ -30881,13 +31084,17 @@ var SingleConnectionProvider = exports.SingleConnectionProvider = function (_Con return SingleConnectionProvider; }(ConnectionProvider); -},{"../driver":275,"../error":276,"../session":303,"./features":287,"./host-name-resolvers":289,"./rediscovery":292,"./round-robin-array":293,"./routing-table":294,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32}],286:[function(require,module,exports){ +},{"../driver":276,"../error":277,"../session":306,"./features":289,"./host-name-resolvers":290,"./rediscovery":293,"./round-robin-array":294,"./routing-table":295,"./routing-util":296,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33}],288:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); -exports.Connection = exports.parsePort = exports.parseHost = exports.parseUrl = exports.parseScheme = exports.connect = undefined; +exports.Connection = exports.connect = undefined; + +var _promise = require('babel-runtime/core-js/promise'); + +var _promise2 = _interopRequireDefault(_promise); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); @@ -30911,10 +31118,6 @@ var _chNode2 = _interopRequireDefault(_chNode); var _chunking = require('./chunking'); -var _features = require('./features'); - -var _features2 = _interopRequireDefault(_features); - var _packstream = require('./packstream'); var _buf = require('./buf'); @@ -30923,6 +31126,16 @@ var _graphTypes = require('../graph-types'); var _error = require('./../error'); +var _chConfig = require('./ch-config'); + +var _chConfig2 = _interopRequireDefault(_chConfig); + +var _util = require('./util'); + +var _streamObserver = require('./stream-observer'); + +var _streamObserver2 = _interopRequireDefault(_streamObserver); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** @@ -30943,6 +31156,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * See the License for the specific language governing permissions and * limitations under the License. */ + var Channel = void 0; if (_chNode2.default.available) { Channel = _chNode2.default.channel; @@ -30985,28 +31199,6 @@ NODE = 0x4E, MAGIC_PREAMBLE = 0x6060B017, DEBUG = false; -var URLREGEX = new RegExp(["([^/]+//)?", // scheme -"(([^:/?#]*)", // hostname -"(?::([0-9]+))?)", // port (optional) -".*"].join("")); // everything else - -function parseScheme(url) { - var scheme = url.match(URLREGEX)[1] || ''; - return scheme.toLowerCase(); -} - -function parseUrl(url) { - return url.match(URLREGEX)[2]; -} - -function parseHost(url) { - return url.match(URLREGEX)[3]; -} - -function parsePort(url) { - return url.match(URLREGEX)[4]; -} - /** * Very rudimentary log handling, should probably be replaced by something proper at some point. * @param actor the part that sent the message, 'S' for server and 'C' for client @@ -31129,6 +31321,8 @@ var Connection = function () { this._isHandlingFailure = false; this._currentFailure = null; + this._state = new ConnectionState(this); + // Set to true on fatal errors, to get this out of session pool. this._isBroken = false; @@ -31284,7 +31478,8 @@ var Connection = function () { var _this2 = this; log("C", "INIT", clientName, token); - this._queueObserver(observer); + var initObserver = this._state.wrap(observer); + this._queueObserver(initObserver); this._packer.packStruct(INIT, [this._packable(clientName), this._packable(token)], function (err) { return _this2._handleFatalError(err); }); @@ -31413,6 +31608,18 @@ var Connection = function () { } } + /** + * Get promise resolved when connection initialization succeed or rejected when it fails. + * Connection is initialized using {@link initialize} function. + * @return {Promise} the result of connection initialization. + */ + + }, { + key: 'initializationCompleted', + value: function initializationCompleted() { + return this._state.initializationCompleted(); + } + /** * Synchronize - flush all queued outgoing messages and route their responses * to their respective handlers. @@ -31465,43 +31672,120 @@ var Connection = function () { return Connection; }(); +var ConnectionState = function () { + + /** + * @constructor + * @param {Connection} connection the connection to track state for. + */ + function ConnectionState(connection) { + (0, _classCallCheck3.default)(this, ConnectionState); + + this._connection = connection; + + this._initialized = false; + this._initializationError = null; + + this._resolvePromise = null; + this._rejectPromise = null; + } + + /** + * Wrap the given observer to track connection's initialization state. + * @param {StreamObserver} observer the observer used for INIT message. + * @return {StreamObserver} updated observer. + */ + + + (0, _createClass3.default)(ConnectionState, [{ + key: 'wrap', + value: function wrap(observer) { + var _this10 = this; + + return { + onNext: function onNext(record) { + if (observer && observer.onNext) { + observer.onNext(record); + } + }, + onError: function onError(error) { + _this10._initializationError = error; + if (_this10._rejectPromise) { + _this10._rejectPromise(error); + _this10._rejectPromise = null; + } + if (observer && observer.onError) { + observer.onError(error); + } + }, + onCompleted: function onCompleted(metaData) { + if (metaData && metaData.server) { + _this10._connection.setServerVersion(metaData.server); + } + _this10._initialized = true; + if (_this10._resolvePromise) { + _this10._resolvePromise(_this10._connection); + _this10._resolvePromise = null; + } + if (observer && observer.onCompleted) { + observer.onCompleted(metaData); + } + } + }; + } + + /** + * Get promise resolved when connection initialization succeed or rejected when it fails. + * @return {Promise} the result of connection initialization. + */ + + }, { + key: 'initializationCompleted', + value: function initializationCompleted() { + var _this11 = this; + + if (this._initialized) { + return _promise2.default.resolve(this._connection); + } else if (this._initializationError) { + return _promise2.default.reject(this._initializationError); + } else { + return new _promise2.default(function (resolve, reject) { + _this11._resolvePromise = resolve; + _this11._rejectPromise = reject; + }); + } + } + }]); + return ConnectionState; +}(); + /** * Crete new connection to the provided url. * @access private * @param {string} url - 'neo4j'-prefixed URL to Neo4j Bolt endpoint - * @param {object} config + * @param {object} config - this driver configuration + * @param {string=null} connectionErrorCode - error code for errors raised on connection errors * @return {Connection} - New connection */ function connect(url) { var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var connectionErrorCode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var Ch = config.channel || Channel; - var host = parseHost(url); - var port = parsePort(url) || 7687; + var host = (0, _util.parseHost)(url); + var port = (0, _util.parsePort)(url) || 7687; var completeUrl = host + ':' + port; + var channelConfig = new _chConfig2.default(host, port, config, connectionErrorCode); - return new Connection(new Ch({ - host: parseHost(url), - port: parsePort(url) || 7687, - // Default to using encryption if trust-on-first-use is available - encrypted: config.encrypted == null ? (0, _features2.default)("trust_all_certificates") : config.encrypted, - // Default to using TRUST_ALL_CERTIFICATES if it is available - trust: config.trust || ((0, _features2.default)("trust_all_certificates") ? "TRUST_ALL_CERTIFICATES" : "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES"), - trustedCertificates: config.trustedCertificates || [], - knownHosts: config.knownHosts - }), completeUrl); + return new Connection(new Ch(channelConfig), completeUrl); } exports.connect = connect; -exports.parseScheme = parseScheme; -exports.parseUrl = parseUrl; -exports.parseHost = parseHost; -exports.parsePort = parsePort; exports.Connection = Connection; -},{"../graph-types":277,"./../error":276,"./buf":280,"./ch-node":281,"./ch-websocket":282,"./chunking":283,"./features":287,"./packstream":290,"babel-runtime/core-js/json/stringify":16,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],287:[function(require,module,exports){ +},{"../graph-types":278,"./../error":277,"./buf":281,"./ch-config":282,"./ch-node":283,"./ch-websocket":284,"./chunking":285,"./packstream":291,"./stream-observer":298,"./util":301,"babel-runtime/core-js/json/stringify":16,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],289:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -31569,135 +31853,7 @@ function hasFeature(name) { exports.default = hasFeature; -},{"dns":63,"tls":63}],288:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _stringify = require('babel-runtime/core-js/json/stringify'); - -var _stringify2 = _interopRequireDefault(_stringify); - -var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require('babel-runtime/helpers/createClass'); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _roundRobinArray = require('./round-robin-array'); - -var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); - -var _error = require('../error'); - -var _integer = require('../integer'); - -var _integer2 = _interopRequireDefault(_integer); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var PROCEDURE_CALL = 'CALL dbms.cluster.routing.getServers'; /** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -var PROCEDURE_NOT_FOUND_CODE = 'Neo.ClientError.Procedure.ProcedureNotFound'; - -var GetServersUtil = function () { - function GetServersUtil() { - (0, _classCallCheck3.default)(this, GetServersUtil); - } - - (0, _createClass3.default)(GetServersUtil, [{ - key: 'callGetServers', - value: function callGetServers(session, routerAddress) { - return session.run(PROCEDURE_CALL).then(function (result) { - session.close(); - return result.records; - }).catch(function (error) { - if (error.code === PROCEDURE_NOT_FOUND_CODE) { - // throw when getServers procedure not found because this is clearly a configuration issue - throw (0, _error.newError)('Server ' + routerAddress + ' could not perform routing. ' + 'Make sure you are connecting to a causal cluster', _error.SERVICE_UNAVAILABLE); - } - // return nothing when failed to connect because code higher in the callstack is still able to retry with a - // different session towards a different router - return null; - }); - } - }, { - key: 'parseTtl', - value: function parseTtl(record, routerAddress) { - try { - var now = (0, _integer.int)(Date.now()); - var expires = record.get('ttl').multiply(1000).add(now); - // if the server uses a really big expire time like Long.MAX_VALUE this may have overflowed - if (expires.lessThan(now)) { - return _integer2.default.MAX_VALUE; - } - return expires; - } catch (error) { - throw (0, _error.newError)('Unable to parse TTL entry from router ' + routerAddress + ' from record:\n' + (0, _stringify2.default)(record), _error.PROTOCOL_ERROR); - } - } - }, { - key: 'parseServers', - value: function parseServers(record, routerAddress) { - try { - var servers = record.get('servers'); - - var routers = new _roundRobinArray2.default(); - var readers = new _roundRobinArray2.default(); - var writers = new _roundRobinArray2.default(); - - servers.forEach(function (server) { - var role = server['role']; - var addresses = server['addresses']; - - if (role === 'ROUTE') { - routers.pushAll(addresses); - } else if (role === 'WRITE') { - writers.pushAll(addresses); - } else if (role === 'READ') { - readers.pushAll(addresses); - } else { - throw (0, _error.newError)('Unknown server role "' + role + '"', _error.PROTOCOL_ERROR); - } - }); - - return { - routers: routers, - readers: readers, - writers: writers - }; - } catch (ignore) { - throw (0, _error.newError)('Unable to parse servers entry from router ' + routerAddress + ' from record:\n' + (0, _stringify2.default)(record), _error.PROTOCOL_ERROR); - } - } - }]); - return GetServersUtil; -}(); - -exports.default = GetServersUtil; - -},{"../error":276,"../integer":279,"./round-robin-array":293,"babel-runtime/core-js/json/stringify":16,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],289:[function(require,module,exports){ +},{"dns":64,"tls":64}],290:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -31729,7 +31885,7 @@ var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); -var _connector = require('./connector'); +var _util = require('./util'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -31798,8 +31954,8 @@ var DnsHostNameResolver = exports.DnsHostNameResolver = function (_HostNameResol value: function resolve(seedRouter) { var _this3 = this; - var seedRouterHost = (0, _connector.parseHost)(seedRouter); - var seedRouterPort = (0, _connector.parsePort)(seedRouter); + var seedRouterHost = (0, _util.parseHost)(seedRouter); + var seedRouterPort = (0, _util.parsePort)(seedRouter); return new _promise2.default(function (resolve) { _this3._dns.lookup(seedRouterHost, { all: true }, function (error, addresses) { @@ -31830,7 +31986,7 @@ function addressWithPort(addressObject, port) { return address; } -},{"./connector":286,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32,"dns":63}],290:[function(require,module,exports){ +},{"./util":301,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33,"dns":64}],291:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -32294,7 +32450,7 @@ exports.Packer = Packer; exports.Unpacker = Unpacker; exports.Structure = Structure; -},{"../integer":279,"./../error":276,"./utf8":297,"babel-runtime/core-js/object/keys":22,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/typeof":34}],291:[function(require,module,exports){ +},{"../integer":280,"./../error":277,"./utf8":300,"babel-runtime/core-js/object/keys":22,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/typeof":35}],292:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -32427,50 +32583,78 @@ var Pool = function () { exports.default = Pool; -},{"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],292:[function(require,module,exports){ -"use strict"; +},{"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],293:[function(require,module,exports){ +'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); -var _stringify = require("babel-runtime/core-js/json/stringify"); +var _stringify = require('babel-runtime/core-js/json/stringify'); var _stringify2 = _interopRequireDefault(_stringify); -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var _createClass2 = require("babel-runtime/helpers/createClass"); +var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); -var _getServersUtil = require("./get-servers-util"); - -var _getServersUtil2 = _interopRequireDefault(_getServersUtil); - -var _routingTable = require("./routing-table"); +var _routingTable = require('./routing-table'); var _routingTable2 = _interopRequireDefault(_routingTable); -var _error = require("../error"); +var _error = require('../error'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + var Rediscovery = function () { - function Rediscovery(getServersUtil) { + + /** + * @constructor + * @param {RoutingUtil} routingUtil the util to use. + */ + function Rediscovery(routingUtil) { (0, _classCallCheck3.default)(this, Rediscovery); - this._getServersUtil = getServersUtil || new _getServersUtil2.default(); + this._routingUtil = routingUtil; } + /** + * Try to fetch new routing table from the given router. + * @param {Session} session the session to use. + * @param {string} routerAddress the URL of the router. + * @return {Promise} promise resolved with new routing table or null when connection error happened. + */ + + (0, _createClass3.default)(Rediscovery, [{ - key: "lookupRoutingTableOnRouter", + key: 'lookupRoutingTableOnRouter', value: function lookupRoutingTableOnRouter(session, routerAddress) { var _this = this; - return this._getServersUtil.callGetServers(session, routerAddress).then(function (records) { + return this._routingUtil.callRoutingProcedure(session, routerAddress).then(function (records) { if (records === null) { // connection error happened, unable to retrieve routing table from this router, next one should be queried return null; @@ -32482,12 +32666,12 @@ var Rediscovery = function () { var record = records[0]; - var expirationTime = _this._getServersUtil.parseTtl(record, routerAddress); + var expirationTime = _this._routingUtil.parseTtl(record, routerAddress); - var _getServersUtil$parse = _this._getServersUtil.parseServers(record, routerAddress), - routers = _getServersUtil$parse.routers, - readers = _getServersUtil$parse.readers, - writers = _getServersUtil$parse.writers; + var _routingUtil$parseSer = _this._routingUtil.parseServers(record, routerAddress), + routers = _routingUtil$parseSer.routers, + readers = _routingUtil$parseSer.readers, + writers = _routingUtil$parseSer.writers; Rediscovery._assertNonEmpty(routers, 'routers', routerAddress); Rediscovery._assertNonEmpty(readers, 'readers', routerAddress); @@ -32498,7 +32682,7 @@ var Rediscovery = function () { }); } }], [{ - key: "_assertNonEmpty", + key: '_assertNonEmpty', value: function _assertNonEmpty(serversRoundRobinArray, serversName, routerAddress) { if (serversRoundRobinArray.isEmpty()) { throw (0, _error.newError)('Received no ' + serversName + ' from router ' + routerAddress, _error.PROTOCOL_ERROR); @@ -32506,34 +32690,21 @@ var Rediscovery = function () { } }]); return Rediscovery; -}(); /** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +}(); exports.default = Rediscovery; -},{"../error":276,"./get-servers-util":288,"./routing-table":294,"babel-runtime/core-js/json/stringify":16,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],293:[function(require,module,exports){ +},{"../error":277,"./routing-table":295,"babel-runtime/core-js/json/stringify":16,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],294:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); +var _stringify = require('babel-runtime/core-js/json/stringify'); + +var _stringify2 = _interopRequireDefault(_stringify); + var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); @@ -32615,66 +32786,72 @@ var RoundRobinArray = function () { return element !== item; }); } + }, { + key: 'toString', + value: function toString() { + return (0, _stringify2.default)(this._items); + } }]); return RoundRobinArray; }(); exports.default = RoundRobinArray; -},{"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],294:[function(require,module,exports){ -"use strict"; +},{"babel-runtime/core-js/json/stringify":16,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],295:[function(require,module,exports){ +'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); -var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray"); +var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); -var _from = require("babel-runtime/core-js/array/from"); +var _from = require('babel-runtime/core-js/array/from'); var _from2 = _interopRequireDefault(_from); -var _set = require("babel-runtime/core-js/set"); +var _set = require('babel-runtime/core-js/set'); var _set2 = _interopRequireDefault(_set); -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var _createClass2 = require("babel-runtime/helpers/createClass"); +var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); -var _integer = require("../integer"); +var _integer = require('../integer'); -var _roundRobinArray = require("./round-robin-array"); +var _roundRobinArray = require('./round-robin-array'); var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); +var _driver = require('../driver'); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -/** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -var MIN_ROUTERS = 1; +var MIN_ROUTERS = 1; /** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ var RoutingTable = function () { function RoutingTable(routers, readers, writers, expirationTime) { @@ -32687,7 +32864,7 @@ var RoutingTable = function () { } (0, _createClass3.default)(RoutingTable, [{ - key: "forget", + key: 'forget', value: function forget(address) { // Don't remove it from the set of routers, since that might mean we lose our ability to re-discover, // just remove it from the set of readers and writers, so that we don't use it for actual work without @@ -32696,17 +32873,17 @@ var RoutingTable = function () { this.writers.remove(address); } }, { - key: "forgetRouter", + key: 'forgetRouter', value: function forgetRouter(address) { this.routers.remove(address); } }, { - key: "forgetWriter", + key: 'forgetWriter', value: function forgetWriter(address) { this.writers.remove(address); } }, { - key: "serversDiff", + key: 'serversDiff', value: function serversDiff(otherRoutingTable) { var oldServers = new _set2.default(this._allServers()); var newServers = otherRoutingTable._allServers(); @@ -32715,23 +32892,326 @@ var RoutingTable = function () { }); return (0, _from2.default)(oldServers); } + + /** + * Check if this routing table is fresh to perform the required operation. + * @param {string} accessMode the type of operation. Allowed values are {@link READ} and {@link WRITE}. + * @return {boolean} true when this table contains servers to serve the required operation, + * false otherwise. + */ + }, { - key: "isStale", - value: function isStale() { - return this.expirationTime.lessThan(Date.now()) || this.routers.size() <= MIN_ROUTERS || this.readers.isEmpty() || this.writers.isEmpty(); + key: 'isStaleFor', + value: function isStaleFor(accessMode) { + return this.expirationTime.lessThan(Date.now()) || this.routers.size() < MIN_ROUTERS || accessMode === _driver.READ && this.readers.isEmpty() || accessMode === _driver.WRITE && this.writers.isEmpty(); } }, { - key: "_allServers", + key: '_allServers', value: function _allServers() { return [].concat((0, _toConsumableArray3.default)(this.routers.toArray()), (0, _toConsumableArray3.default)(this.readers.toArray()), (0, _toConsumableArray3.default)(this.writers.toArray())); } + }, { + key: 'toString', + value: function toString() { + return 'RoutingTable[' + ('expirationTime=' + this.expirationTime + ', ') + ('routers=' + this.routers + ', ') + ('readers=' + this.readers + ', ') + ('writers=' + this.writers + ']'); + } }]); return RoutingTable; }(); exports.default = RoutingTable; -},{"../integer":279,"./round-robin-array":293,"babel-runtime/core-js/array/from":15,"babel-runtime/core-js/set":25,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/toConsumableArray":33}],295:[function(require,module,exports){ +},{"../driver":276,"../integer":280,"./round-robin-array":294,"babel-runtime/core-js/array/from":15,"babel-runtime/core-js/set":25,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/toConsumableArray":34}],296:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); + +var _defineProperty3 = _interopRequireDefault(_defineProperty2); + +var _stringify = require('babel-runtime/core-js/json/stringify'); + +var _stringify2 = _interopRequireDefault(_stringify); + +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require('babel-runtime/helpers/createClass'); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _roundRobinArray = require('./round-robin-array'); + +var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); + +var _error = require('../error'); + +var _integer = require('../integer'); + +var _integer2 = _interopRequireDefault(_integer); + +var _serverVersion = require('./server-version'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var CALL_GET_SERVERS = 'CALL dbms.cluster.routing.getServers'; +var GET_ROUTING_TABLE_PARAM = 'context'; +var CALL_GET_ROUTING_TABLE = 'CALL dbms.cluster.routing.getRoutingTable({' + GET_ROUTING_TABLE_PARAM + '})'; +var PROCEDURE_NOT_FOUND_CODE = 'Neo.ClientError.Procedure.ProcedureNotFound'; + +var RoutingUtil = function () { + function RoutingUtil(routingContext) { + (0, _classCallCheck3.default)(this, RoutingUtil); + + this._routingContext = routingContext; + } + + /** + * Invoke routing procedure using the given session. + * @param {Session} session the session to use. + * @param {string} routerAddress the URL of the router. + * @return {Promise} promise resolved with records returned by the procedure call or null if + * connection error happened. + */ + + + (0, _createClass3.default)(RoutingUtil, [{ + key: 'callRoutingProcedure', + value: function callRoutingProcedure(session, routerAddress) { + return this._callAvailableRoutingProcedure(session).then(function (result) { + session.close(); + return result.records; + }).catch(function (error) { + if (error.code === PROCEDURE_NOT_FOUND_CODE) { + // throw when getServers procedure not found because this is clearly a configuration issue + throw (0, _error.newError)('Server ' + routerAddress + ' could not perform routing. ' + 'Make sure you are connecting to a causal cluster', _error.SERVICE_UNAVAILABLE); + } + // return nothing when failed to connect because code higher in the callstack is still able to retry with a + // different session towards a different router + return null; + }); + } + }, { + key: 'parseTtl', + value: function parseTtl(record, routerAddress) { + try { + var now = (0, _integer.int)(Date.now()); + var expires = record.get('ttl').multiply(1000).add(now); + // if the server uses a really big expire time like Long.MAX_VALUE this may have overflowed + if (expires.lessThan(now)) { + return _integer2.default.MAX_VALUE; + } + return expires; + } catch (error) { + throw (0, _error.newError)('Unable to parse TTL entry from router ' + routerAddress + ' from record:\n' + (0, _stringify2.default)(record), _error.PROTOCOL_ERROR); + } + } + }, { + key: 'parseServers', + value: function parseServers(record, routerAddress) { + try { + var servers = record.get('servers'); + + var routers = new _roundRobinArray2.default(); + var readers = new _roundRobinArray2.default(); + var writers = new _roundRobinArray2.default(); + + servers.forEach(function (server) { + var role = server['role']; + var addresses = server['addresses']; + + if (role === 'ROUTE') { + routers.pushAll(addresses); + } else if (role === 'WRITE') { + writers.pushAll(addresses); + } else if (role === 'READ') { + readers.pushAll(addresses); + } else { + throw (0, _error.newError)('Unknown server role "' + role + '"', _error.PROTOCOL_ERROR); + } + }); + + return { + routers: routers, + readers: readers, + writers: writers + }; + } catch (ignore) { + throw (0, _error.newError)('Unable to parse servers entry from router ' + routerAddress + ' from record:\n' + (0, _stringify2.default)(record), _error.PROTOCOL_ERROR); + } + } + }, { + key: '_callAvailableRoutingProcedure', + value: function _callAvailableRoutingProcedure(session) { + var _this = this; + + return session._run(null, null, function (connection, streamObserver) { + var serverVersionString = connection.server.version; + var serverVersion = _serverVersion.ServerVersion.fromString(serverVersionString); + + if (serverVersion.compareTo(_serverVersion.VERSION_3_2_0) >= 0) { + var params = (0, _defineProperty3.default)({}, GET_ROUTING_TABLE_PARAM, _this._routingContext); + connection.run(CALL_GET_ROUTING_TABLE, params, streamObserver); + } else { + connection.run(CALL_GET_SERVERS, {}, streamObserver); + } + }); + } + }]); + return RoutingUtil; +}(); + +exports.default = RoutingUtil; + +},{"../error":277,"../integer":280,"./round-robin-array":294,"./server-version":297,"babel-runtime/core-js/json/stringify":16,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/defineProperty":30}],297:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.VERSION_3_2_0 = exports.ServerVersion = undefined; + +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require('babel-runtime/helpers/createClass'); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _util = require('./util'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var SERVER_VERSION_REGEX = new RegExp('^(Neo4j/)?(\\d+)\\.(\\d+)(?:\\.)?(\\d*)(\\.|-|\\+)?([0-9A-Za-z-.]*)?$'); /** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var ServerVersion = function () { + + /** + * @constructor + * @param {number} major the major version number. + * @param {number} minor the minor version number. + * @param {number} patch the patch version number. + */ + function ServerVersion(major, minor, patch) { + (0, _classCallCheck3.default)(this, ServerVersion); + + this.major = major; + this.minor = minor; + this.patch = patch; + } + + /** + * Parse given string to a {@link ServerVersion} object. + * @param versionStr the string to parse. + * @return {ServerVersion} version for the given string. + * @throws Error if given string can't be parsed. + */ + + + (0, _createClass3.default)(ServerVersion, [{ + key: 'compareTo', + + + /** + * Compare this version to the given one. + * @param {ServerVersion} other the version to compare with. + * @return {number} value 0 if this version is the same as the given one, value less then 0 when this version + * was released earlier than the given one and value greater then 0 when this version was released after + * than the given one. + */ + value: function compareTo(other) { + var result = compareInts(this.major, other.major); + if (result === 0) { + result = compareInts(this.minor, other.minor); + if (result === 0) { + result = compareInts(this.patch, other.patch); + } + } + return result; + } + }], [{ + key: 'fromString', + value: function fromString(versionStr) { + if (!versionStr) { + return new ServerVersion(3, 0, 0); + } + + (0, _util.assertString)(versionStr, 'Neo4j version string'); + + var version = versionStr.match(SERVER_VERSION_REGEX); + if (!version) { + throw new Error('Unparsable Neo4j version: ' + versionStr); + } + + var major = parseIntStrict(version[2]); + var minor = parseIntStrict(version[3]); + var patch = parseIntStrict(version[4] || 0); + + return new ServerVersion(major, minor, patch); + } + }]); + return ServerVersion; +}(); + +function parseIntStrict(str, name) { + var value = parseInt(str); + if (!value && value !== 0) { + throw new Error('Unparsable number ' + name + ': \'' + str + '\''); + } + return value; +} + +function compareInts(x, y) { + return x < y ? -1 : x === y ? 0 : 1; +} + +var VERSION_3_2_0 = new ServerVersion(3, 2, 0); + +exports.ServerVersion = ServerVersion; +exports.VERSION_3_2_0 = VERSION_3_2_0; + +},{"./util":301,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],298:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -32907,7 +33387,7 @@ var StreamObserver = function () { exports.default = StreamObserver; -},{"../record":299,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],296:[function(require,module,exports){ +},{"../record":302,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],299:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -33113,7 +33593,7 @@ function _valueOrDefault(value, defaultValue) { return defaultValue; } -},{"../error":276,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],297:[function(require,module,exports){ +},{"../error":277,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],300:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -33230,13 +33710,13 @@ var streamDecodeCombinedBuffer = function streamDecodeCombinedBuffer(combinedBuf exports.default = platformObj; -},{"../../external/text-encoding/index":271,"./../error":276,"./buf":280,"buffer":66,"string_decoder":268}],298:[function(require,module,exports){ +},{"../../external/text-encoding/index":272,"./../error":277,"./buf":281,"buffer":67,"string_decoder":269}],301:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.ENCRYPTION_OFF = exports.ENCRYPTION_ON = exports.assertString = exports.isEmptyObjectOrNull = undefined; +exports.ENCRYPTION_OFF = exports.ENCRYPTION_ON = exports.parseRoutingContext = exports.parsePort = exports.parseHost = exports.parseUrl = exports.parseScheme = exports.assertString = exports.isEmptyObjectOrNull = undefined; var _stringify = require("babel-runtime/core-js/json/stringify"); @@ -33270,8 +33750,15 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var ENCRYPTION_ON = "ENCRYPTION_ON"; var ENCRYPTION_OFF = "ENCRYPTION_OFF"; +var URL_REGEX = new RegExp(['([^/]+//)?', // scheme +'(([^:/?#]*)', // hostname +'(?::([0-9]+))?)', // port (optional) +'([^?]*)?', // everything else +'(\\?(.+))?' // query +].join('')); + function isEmptyObjectOrNull(obj) { - if (isNull(obj)) { + if (obj === null) { return true; } @@ -33288,10 +33775,6 @@ function isEmptyObjectOrNull(obj) { return true; } -function isNull(obj) { - return obj === null; -} - function isObject(obj) { var type = typeof obj === "undefined" ? "undefined" : (0, _typeof3.default)(obj); return type === 'function' || type === 'object' && Boolean(obj); @@ -33308,12 +33791,69 @@ function isString(str) { return Object.prototype.toString.call(str) === '[object String]'; } +function parseScheme(url) { + assertString(url, 'URL'); + var scheme = url.match(URL_REGEX)[1] || ''; + return scheme.toLowerCase(); +} + +function parseUrl(url) { + assertString(url, 'URL'); + return url.match(URL_REGEX)[2]; +} + +function parseHost(url) { + assertString(url, 'URL'); + return url.match(URL_REGEX)[3]; +} + +function parsePort(url) { + assertString(url, 'URL'); + return url.match(URL_REGEX)[4]; +} + +function parseRoutingContext(url) { + var query = url.match(URL_REGEX)[7] || ''; + var context = {}; + if (query) { + query.split('&').forEach(function (pair) { + var keyValue = pair.split('='); + if (keyValue.length !== 2) { + throw new Error('Invalid parameters: \'' + keyValue + '\' in URL \'' + url + '\'.'); + } + + var key = trimAndVerify(keyValue[0], 'key', url); + var value = trimAndVerify(keyValue[1], 'value', url); + + if (context[key]) { + throw new Error("Duplicated query parameters with key '" + key + "' in URL '" + url + "'"); + } + + context[key] = value; + }); + } + return context; +} + +function trimAndVerify(string, name, url) { + var result = string.trim(); + if (!result) { + throw new Error("Illegal empty " + name + " in URL query '" + url + "'"); + } + return result; +} + exports.isEmptyObjectOrNull = isEmptyObjectOrNull; exports.assertString = assertString; +exports.parseScheme = parseScheme; +exports.parseUrl = parseUrl; +exports.parseHost = parseHost; +exports.parsePort = parsePort; +exports.parseRoutingContext = parseRoutingContext; exports.ENCRYPTION_ON = ENCRYPTION_ON; exports.ENCRYPTION_OFF = ENCRYPTION_OFF; -},{"babel-runtime/core-js/json/stringify":16,"babel-runtime/helpers/typeof":34}],299:[function(require,module,exports){ +},{"babel-runtime/core-js/json/stringify":16,"babel-runtime/helpers/typeof":35}],302:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -33485,7 +34025,7 @@ var Record = function () { exports.default = Record; -},{"./error":276,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],300:[function(require,module,exports){ +},{"./error":277,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],303:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -33874,7 +34414,7 @@ var statementType = { exports.statementType = statementType; exports.default = ResultSummary; -},{"./integer":279,"babel-runtime/core-js/object/keys":22,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],301:[function(require,module,exports){ +},{"./integer":280,"babel-runtime/core-js/object/keys":22,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],304:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -34066,7 +34606,7 @@ var Result = function () { exports.default = Result; -},{"./internal/connection-holder":284,"./result-summary":300,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],302:[function(require,module,exports){ +},{"./internal/connection-holder":286,"./result-summary":303,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],305:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -34130,17 +34670,21 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var RoutingDriver = function (_Driver) { (0, _inherits3.default)(RoutingDriver, _Driver); - function RoutingDriver(url, userAgent) { - var token = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - var config = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + function RoutingDriver(url, routingContext, userAgent) { + var token = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + var config = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; (0, _classCallCheck3.default)(this, RoutingDriver); - return (0, _possibleConstructorReturn3.default)(this, (RoutingDriver.__proto__ || (0, _getPrototypeOf2.default)(RoutingDriver)).call(this, url, userAgent, token, RoutingDriver._validateConfig(config))); + + var _this = (0, _possibleConstructorReturn3.default)(this, (RoutingDriver.__proto__ || (0, _getPrototypeOf2.default)(RoutingDriver)).call(this, url, userAgent, token, RoutingDriver._validateConfig(config))); + + _this._routingContext = routingContext; + return _this; } (0, _createClass3.default)(RoutingDriver, [{ key: '_createConnectionProvider', value: function _createConnectionProvider(address, connectionPool, driverOnErrorCallback) { - return new _connectionProviders.LoadBalancer(address, connectionPool, driverOnErrorCallback); + return new _connectionProviders.LoadBalancer(address, this._routingContext, connectionPool, driverOnErrorCallback); } }, { key: '_createSession', @@ -34148,13 +34692,10 @@ var RoutingDriver = function (_Driver) { var _this2 = this; return new RoutingSession(mode, connectionProvider, bookmark, config, function (error, conn) { - if (error.code === _error.SERVICE_UNAVAILABLE || error.code === _error.SESSION_EXPIRED) { - // connection is undefined if error happened before connection was acquired - if (conn) { - _this2._connectionProvider.forget(conn.url); - } + if (error.code === _error.SESSION_EXPIRED) { + _this2._forgetConnection(conn); return error; - } else if (error.code === 'Neo.ClientError.Cluster.NotALeader') { + } else if (RoutingDriver._isFailureToWrite(error)) { var url = 'UNKNOWN'; // connection is undefined if error happened before connection was acquired if (conn) { @@ -34167,6 +34708,21 @@ var RoutingDriver = function (_Driver) { } }); } + }, { + key: '_connectionErrorCode', + value: function _connectionErrorCode() { + // connection errors mean SERVICE_UNAVAILABLE for direct driver but for routing driver they should only + // result in SESSION_EXPIRED because there might still exist other servers capable of serving the request + return _error.SESSION_EXPIRED; + } + }, { + key: '_forgetConnection', + value: function _forgetConnection(connection) { + // connection is undefined if error happened before connection was acquired + if (connection) { + this._connectionProvider.forget(connection.url); + } + } }], [{ key: '_validateConfig', value: function _validateConfig(config) { @@ -34175,6 +34731,11 @@ var RoutingDriver = function (_Driver) { } return config; } + }, { + key: '_isFailureToWrite', + value: function _isFailureToWrite(error) { + return error.code === 'Neo.ClientError.Cluster.NotALeader' || error.code === 'Neo.ClientError.General.ForbiddenOnReadOnlyDatabase'; + } }]); return RoutingDriver; }(_driver.Driver); @@ -34202,7 +34763,7 @@ var RoutingSession = function (_Session) { exports.default = RoutingDriver; -},{"./driver":275,"./error":276,"./internal/connection-providers":285,"./session":303,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32}],303:[function(require,module,exports){ +},{"./driver":276,"./error":277,"./internal/connection-providers":287,"./session":306,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33}],306:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -34335,22 +34896,29 @@ var Session = function () { parameters = statement.parameters || {}; statement = statement.text; } - (0, _util.assertString)(statement, "Cypher statement"); + (0, _util.assertString)(statement, 'Cypher statement'); + return this._run(statement, parameters, function (connection, streamObserver) { + return connection.run(statement, parameters, streamObserver); + }); + } + }, { + key: '_run', + value: function _run(statement, parameters, statementRunner) { var streamObserver = new _RunObserver(this._onRunFailure()); var connectionHolder = this._connectionHolderWithMode(this._mode); if (!this._hasTx) { connectionHolder.initializeConnection(); connectionHolder.getConnection().then(function (connection) { streamObserver.resolveConnection(connection); - connection.run(statement, parameters, streamObserver); + statementRunner(connection, streamObserver); connection.pullAll(streamObserver); connection.sync(); }).catch(function (error) { return streamObserver.onError(error); }); } else { - streamObserver.onError((0, _error.newError)("Statements cannot be run directly on a " + "session with an open transaction; either run from within the " + "transaction or use a different session.")); + streamObserver.onError((0, _error.newError)('Statements cannot be run directly on a ' + 'session with an open transaction; either run from within the ' + 'transaction or use a different session.')); } return new _result2.default(streamObserver, statement, parameters, function () { return streamObserver.meta(); @@ -34560,7 +35128,7 @@ function _createTransactionExecutor(config) { exports.default = Session; -},{"./driver":275,"./error":276,"./internal/connection-holder":284,"./internal/stream-observer":295,"./internal/transaction-executor":296,"./internal/util":298,"./result":301,"./transaction":304,"babel-runtime/core-js/object/assign":17,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/get":30,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32,"babel-runtime/helpers/typeof":34}],304:[function(require,module,exports){ +},{"./driver":276,"./error":277,"./internal/connection-holder":286,"./internal/stream-observer":298,"./internal/transaction-executor":299,"./internal/util":301,"./result":304,"./transaction":307,"babel-runtime/core-js/object/assign":17,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/get":31,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33,"babel-runtime/helpers/typeof":35}],307:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -34944,7 +35512,7 @@ function emptyMetadataSupplier() { exports.default = Transaction; -},{"./internal/connection-holder":284,"./internal/stream-observer":295,"./internal/util":298,"./result":301,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/get":30,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32,"babel-runtime/helpers/typeof":34}],305:[function(require,module,exports){ +},{"./internal/connection-holder":286,"./internal/stream-observer":298,"./internal/util":301,"./result":304,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/get":31,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33,"babel-runtime/helpers/typeof":35}],308:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -34978,5 +35546,5 @@ Object.defineProperty(exports, "__esModule", { // system to control version names at packaging time. exports.default = "0.0.0-dev"; -},{}]},{},[274])(274) +},{}]},{},[275])(275) }); \ No newline at end of file diff --git a/lib/browser/neo4j-web.min.js b/lib/browser/neo4j-web.min.js index 77f6fd1cc..e266135f0 100644 --- a/lib/browser/neo4j-web.min.js +++ b/lib/browser/neo4j-web.min.js @@ -1,20 +1,20 @@ -!function(l){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=l();else if("function"==typeof define&&define.amd)define([],l);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.neo4j=l()}}(function(){var define,module,exports;return function l(n,e,u){function t(i,o){if(!e[i]){if(!n[i]){var s="function"==typeof require&&require;if(!o&&s)return s(i,!0);if(r)return r(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var f=e[i]={exports:{}};n[i][0].call(f.exports,function(l){var e=n[i][1][l];return t(e?e:l)},f,f.exports,l,n,e,u)}return e[i].exports}for(var r="function"==typeof require&&require,i=0;i>6],t=0===(32&e);if(31===(31&e)){var r=e;for(e=0;128===(128&r);){if(r=l.readUInt8(n),l.isError(r))return r;e<<=7,e|=127&r}}else e&=31;var i=c.tag[e];return{cls:u,primitive:t,tag:e,tagStr:i}}function i(l,n,e){var u=l.readUInt8(e);if(l.isError(u))return u;if(!n&&128===u)return null;if(0===(128&u))return u;var t=127&u;if(t>4)return l.error("length octect is too long");u=0;for(var r=0;r=31?u.error("Multi-octet tag encoding unsupported"):(n||(t|=32),t|=c.tagClassByName[e||"universal"]<<6)}var o=l("inherits"),s=l("buffer").Buffer,a=l("../../asn1"),f=a.base,c=a.constants.der;n.exports=u,u.prototype.encode=function(l,n){return this.tree._encode(l,n).join()},o(t,f.Node),t.prototype._encodeComposite=function(l,n,e,u){var t=i(l,n,e,this.reporter);if(u.length<128){var r=new s(2);return r[0]=t,r[1]=u.length,this._createEncoderBuffer([r,u])}for(var o=1,a=u.length;a>=256;a>>=8)o++;var r=new s(2+o);r[0]=t,r[1]=128|o;for(var a=1+o,f=u.length;f>0;a--,f>>=8)r[a]=255&f;return this._createEncoderBuffer([r,u])},t.prototype._encodeStr=function(l,n){if("bitstr"===n)return this._createEncoderBuffer([0|l.unused,l.data]);if("bmpstr"===n){for(var e=new s(2*l.length),u=0;u=40)return this.reporter.error("Second objid identifier OOB");l.splice(0,2,40*l[0]+l[1])}for(var t=0,u=0;u=128;r>>=7)t++}for(var i=new s(t),o=i.length-1,u=l.length-1;u>=0;u--){var r=l[u];for(i[o--]=127&r;(r>>=7)>0;)i[o--]=128|127&r}return this._createEncoderBuffer(i)},t.prototype._encodeTime=function(l,n){var e,u=new Date(l);return"gentime"===n?e=[r(u.getFullYear()),r(u.getUTCMonth()+1),r(u.getUTCDate()),r(u.getUTCHours()),r(u.getUTCMinutes()),r(u.getUTCSeconds()),"Z"].join(""):"utctime"===n?e=[r(u.getFullYear()%100),r(u.getUTCMonth()+1),r(u.getUTCDate()),r(u.getUTCHours()),r(u.getUTCMinutes()),r(u.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+n+" time is not supported yet"),this._encodeStr(e,"octstr")},t.prototype._encodeNull=function(){return this._createEncoderBuffer("")},t.prototype._encodeInt=function(l,n){if("string"==typeof l){if(!n)return this.reporter.error("String int or enum given, but no values map");if(!n.hasOwnProperty(l))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(l));l=n[l]}if("number"!=typeof l&&!s.isBuffer(l)){var e=l.toArray();!l.sign&&128&e[0]&&e.unshift(0),l=new s(e)}if(s.isBuffer(l)){var u=l.length;0===l.length&&u++;var t=new s(u);return l.copy(t),0===l.length&&(t[0]=0),this._createEncoderBuffer(t)}if(l<128)return this._createEncoderBuffer(l);if(l<256)return this._createEncoderBuffer([0,l]);for(var u=1,r=l;r>=256;r>>=8)u++;for(var t=new Array(u),r=t.length-1;r>=0;r--)t[r]=255&l,l>>=8;return 128&t[0]&&t.unshift(0),this._createEncoderBuffer(new s(t))},t.prototype._encodeBool=function(l){return this._createEncoderBuffer(l?255:0)},t.prototype._use=function(l,n){return"function"==typeof l&&(l=l(n)),l._getEncoder("der").tree},t.prototype._skipDefault=function(l,n,e){var u,t=this._baseState;if(null===t["default"])return!1;var r=l.join();if(void 0===t.defaultBuffer&&(t.defaultBuffer=this._encodeValue(t["default"],n,e).join()),r.length!==t.defaultBuffer.length)return!1;for(u=0;u0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===l[n-2]?2:"="===l[n-1]?1:0}function t(l){return 3*l.length/4-u(l)}function r(l){var n,e,t,r,i,o,s=l.length;i=u(l),o=new c(3*s/4-i),t=i>0?s-4:s;var a=0;for(n=0,e=0;n>16&255,o[a++]=r>>8&255,o[a++]=255&r;return 2===i?(r=f[l.charCodeAt(n)]<<2|f[l.charCodeAt(n+1)]>>4,o[a++]=255&r):1===i&&(r=f[l.charCodeAt(n)]<<10|f[l.charCodeAt(n+1)]<<4|f[l.charCodeAt(n+2)]>>2,o[a++]=r>>8&255,o[a++]=255&r),o}function i(l){return a[l>>18&63]+a[l>>12&63]+a[l>>6&63]+a[63&l]}function o(l,n,e){for(var u,t=[],r=n;rf?f:s+i));return 1===u?(n=l[e-1],t+=a[n>>2],t+=a[n<<4&63],t+="=="):2===u&&(n=(l[e-2]<<8)+l[e-1],t+=a[n>>10],t+=a[n>>4&63],t+=a[n<<2&63],t+="="),r.push(t),r.join("")}e.byteLength=t,e.toByteArray=r,e.fromByteArray=s;for(var a=[],f=[],c="undefined"!=typeof Uint8Array?Uint8Array:Array,h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",d=0,p=h.length;d=49&&i<=54?i-49+10:i>=17&&i<=22?i-17+10:15&i}return u}function o(l,n,e,u){for(var t=0,r=Math.min(l.length,e),i=n;i=49?o-49+10:o>=17?o-17+10:o}return t}function s(l){for(var n=new Array(l.bitLength()),e=0;e>>t}return n}function a(l,n,e){e.negative=n.negative^l.negative;var u=l.length+n.length|0;e.length=u,u=u-1|0;var t=0|l.words[0],r=0|n.words[0],i=t*r,o=67108863&i,s=i/67108864|0;e.words[0]=o;for(var a=1;a>>26,c=67108863&s,h=Math.min(a,n.length-1),d=Math.max(0,a-l.length+1);d<=h;d++){var p=a-d|0;t=0|l.words[p],r=0|n.words[d],i=t*r+c,f+=i/67108864|0,c=67108863&i}e.words[a]=0|c,s=0|f}return 0!==s?e.words[a]=0|s:e.length--,e.strip()}function f(l,n,e){e.negative=n.negative^l.negative,e.length=l.length+n.length;for(var u=0,t=0,r=0;r>>26)|0,t+=i>>>26,i&=67108863}e.words[r]=o,u=i,i=t}return 0!==u?e.words[r]=u:e.length--,e.strip()}function c(l,n,e){var u=new h;return u.mulp(l,n,e)}function h(l,n){this.x=l,this.y=n}function d(l,n){this.name=l,this.p=new r(n,16),this.n=this.p.bitLength(),this.k=new r(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function p(){d.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function b(){d.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function v(){d.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function _(){d.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function y(l){if("string"==typeof l){var n=r._prime(l);this.m=n.p,this.prime=n}else u(l.gtn(1),"modulus must be greater than 1"),this.m=l,this.prime=null}function m(l){y.call(this,l),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new r(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}"object"==typeof n?n.exports=r:e.BN=r,r.BN=r,r.wordSize=26;var g;try{g=l("buffer").Buffer}catch(w){}r.isBN=function(l){return l instanceof r||null!==l&&"object"==typeof l&&l.constructor.wordSize===r.wordSize&&Array.isArray(l.words)},r.max=function(l,n){return l.cmp(n)>0?l:n},r.min=function(l,n){return l.cmp(n)<0?l:n},r.prototype._init=function(l,n,e){if("number"==typeof l)return this._initNumber(l,n,e);if("object"==typeof l)return this._initArray(l,n,e);"hex"===n&&(n=16),u(n===(0|n)&&n>=2&&n<=36),l=l.toString().replace(/\s+/g,"");var t=0;"-"===l[0]&&t++,16===n?this._parseHex(l,t):this._parseBase(l,n,t),"-"===l[0]&&(this.negative=1),this.strip(),"le"===e&&this._initArray(this.toArray(),n,e)},r.prototype._initNumber=function(l,n,e){l<0&&(this.negative=1,l=-l),l<67108864?(this.words=[67108863&l],this.length=1):l<4503599627370496?(this.words=[67108863&l,l/67108864&67108863],this.length=2):(u(l<9007199254740992),this.words=[67108863&l,l/67108864&67108863,1],this.length=3),"le"===e&&this._initArray(this.toArray(),n,e)},r.prototype._initArray=function(l,n,e){if(u("number"==typeof l.length),l.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(l.length/3),this.words=new Array(this.length);for(var t=0;t=0;t-=3)i=l[t]|l[t-1]<<8|l[t-2]<<16,this.words[r]|=i<>>26-o&67108863,o+=24,o>=26&&(o-=26,r++);else if("le"===e)for(t=0,r=0;t>>26-o&67108863,o+=24,o>=26&&(o-=26,r++);return this.strip()},r.prototype._parseHex=function(l,n){this.length=Math.ceil((l.length-n)/6),this.words=new Array(this.length);for(var e=0;e=n;e-=6)t=i(l,e,e+6),this.words[u]|=t<>>26-r&4194303,r+=24,r>=26&&(r-=26,u++);e+6!==n&&(t=i(l,n,e+6),this.words[u]|=t<>>26-r&4194303),this.strip()},r.prototype._parseBase=function(l,n,e){this.words=[0],this.length=1;for(var u=0,t=1;t<=67108863;t*=n)u++;u--,t=t/n|0;for(var r=l.length-e,i=r%u,s=Math.min(r,r-i)+e,a=0,f=e;f1&&0===this.words[this.length-1];)this.length--;return this._normSign()},r.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},r.prototype.inspect=function(){return(this.red?""};var k=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],S=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],E=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];r.prototype.toString=function(l,n){l=l||10,n=0|n||1;var e;if(16===l||"hex"===l){e="";for(var t=0,r=0,i=0;i>>24-t&16777215,e=0!==r||i!==this.length-1?k[6-s.length]+s+e:s+e,t+=2,t>=26&&(t-=26,i--)}for(0!==r&&(e=r.toString(16)+e);e.length%n!==0;)e="0"+e;return 0!==this.negative&&(e="-"+e),e}if(l===(0|l)&&l>=2&&l<=36){var a=S[l],f=E[l];e="";var c=this.clone();for(c.negative=0;!c.isZero();){var h=c.modn(f).toString(l);c=c.idivn(f),e=c.isZero()?h+e:k[a-h.length]+h+e}for(this.isZero()&&(e="0"+e);e.length%n!==0;)e="0"+e;return 0!==this.negative&&(e="-"+e),e}u(!1,"Base should be between 2 and 36")},r.prototype.toNumber=function(){var l=this.words[0];return 2===this.length?l+=67108864*this.words[1]:3===this.length&&1===this.words[2]?l+=4503599627370496+67108864*this.words[1]:this.length>2&&u(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-l:l},r.prototype.toJSON=function(){return this.toString(16)},r.prototype.toBuffer=function(l,n){return u("undefined"!=typeof g),this.toArrayLike(g,l,n)},r.prototype.toArray=function(l,n){return this.toArrayLike(Array,l,n)},r.prototype.toArrayLike=function(l,n,e){var t=this.byteLength(),r=e||Math.max(1,t);u(t<=r,"byte array longer than desired length"),u(r>0,"Requested array length <= 0"),this.strip();var i,o,s="le"===n,a=new l(r),f=this.clone();if(s){for(o=0;!f.isZero();o++)i=f.andln(255),f.iushrn(8),a[o]=i;for(;o=4096&&(e+=13,n>>>=13),n>=64&&(e+=7,n>>>=7),n>=8&&(e+=4,n>>>=4),n>=2&&(e+=2,n>>>=2),e+n},r.prototype._zeroBits=function(l){if(0===l)return 26;var n=l,e=0;return 0===(8191&n)&&(e+=13,n>>>=13),0===(127&n)&&(e+=7,n>>>=7),0===(15&n)&&(e+=4,n>>>=4),0===(3&n)&&(e+=2,n>>>=2),0===(1&n)&&e++,e},r.prototype.bitLength=function(){var l=this.words[this.length-1],n=this._countBits(l);return 26*(this.length-1)+n},r.prototype.zeroBits=function(){if(this.isZero())return 0;for(var l=0,n=0;nl.length?this.clone().ior(l):l.clone().ior(this)},r.prototype.uor=function(l){return this.length>l.length?this.clone().iuor(l):l.clone().iuor(this)},r.prototype.iuand=function(l){var n;n=this.length>l.length?l:this;for(var e=0;el.length?this.clone().iand(l):l.clone().iand(this)},r.prototype.uand=function(l){return this.length>l.length?this.clone().iuand(l):l.clone().iuand(this)},r.prototype.iuxor=function(l){var n,e;this.length>l.length?(n=this,e=l):(n=l,e=this);for(var u=0;ul.length?this.clone().ixor(l):l.clone().ixor(this)},r.prototype.uxor=function(l){return this.length>l.length?this.clone().iuxor(l):l.clone().iuxor(this)},r.prototype.inotn=function(l){u("number"==typeof l&&l>=0);var n=0|Math.ceil(l/26),e=l%26;this._expand(n),e>0&&n--;for(var t=0;t0&&(this.words[t]=~this.words[t]&67108863>>26-e),this.strip()},r.prototype.notn=function(l){return this.clone().inotn(l)},r.prototype.setn=function(l,n){u("number"==typeof l&&l>=0);var e=l/26|0,t=l%26;return this._expand(e+1),n?this.words[e]=this.words[e]|1<l.length?(e=this,u=l):(e=l,u=this);for(var t=0,r=0;r>>26;for(;0!==t&&r>>26;if(this.length=e.length,0!==t)this.words[this.length]=t,this.length++;else if(e!==this)for(;rl.length?this.clone().iadd(l):l.clone().iadd(this)},r.prototype.isub=function(l){if(0!==l.negative){l.negative=0;var n=this.iadd(l);return l.negative=1,n._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(l),this.negative=1,this._normSign();var e=this.cmp(l);if(0===e)return this.negative=0,this.length=1,this.words[0]=0,this;var u,t;e>0?(u=this,t=l):(u=l,t=this);for(var r=0,i=0;i>26,this.words[i]=67108863&n;for(;0!==r&&i>26,this.words[i]=67108863&n;if(0===r&&i>>13,d=0|i[1],p=8191&d,b=d>>>13,v=0|i[2],_=8191&v,y=v>>>13,m=0|i[3],g=8191&m,w=m>>>13,k=0|i[4],S=8191&k,E=k>>>13,M=0|i[5],I=8191&M,j=M>>>13,A=0|i[6],C=8191&A,x=A>>>13,R=0|i[7],B=8191&R,T=R>>>13,O=0|i[8],P=8191&O,U=O>>>13,N=0|i[9],L=8191&N,D=N>>>13,q=0|o[0],F=8191&q,z=q>>>13,H=0|o[1],K=8191&H,V=H>>>13,Y=0|o[2],W=8191&Y,X=Y>>>13,G=0|o[3],Z=8191&G,J=G>>>13,$=0|o[4],Q=8191&$,ll=$>>>13,nl=0|o[5],el=8191&nl,ul=nl>>>13,tl=0|o[6],rl=8191&tl,il=tl>>>13,ol=0|o[7],sl=8191&ol,al=ol>>>13,fl=0|o[8],cl=8191&fl,hl=fl>>>13,dl=0|o[9],pl=8191&dl,bl=dl>>>13;e.negative=l.negative^n.negative,e.length=19,u=Math.imul(c,F),t=Math.imul(c,z),t=t+Math.imul(h,F)|0,r=Math.imul(h,z);var vl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(vl>>>26)|0,vl&=67108863,u=Math.imul(p,F),t=Math.imul(p,z),t=t+Math.imul(b,F)|0,r=Math.imul(b,z),u=u+Math.imul(c,K)|0,t=t+Math.imul(c,V)|0,t=t+Math.imul(h,K)|0,r=r+Math.imul(h,V)|0;var _l=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(_l>>>26)|0,_l&=67108863,u=Math.imul(_,F),t=Math.imul(_,z),t=t+Math.imul(y,F)|0,r=Math.imul(y,z),u=u+Math.imul(p,K)|0,t=t+Math.imul(p,V)|0,t=t+Math.imul(b,K)|0,r=r+Math.imul(b,V)|0,u=u+Math.imul(c,W)|0,t=t+Math.imul(c,X)|0,t=t+Math.imul(h,W)|0,r=r+Math.imul(h,X)|0;var yl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(yl>>>26)|0,yl&=67108863,u=Math.imul(g,F),t=Math.imul(g,z),t=t+Math.imul(w,F)|0,r=Math.imul(w,z),u=u+Math.imul(_,K)|0,t=t+Math.imul(_,V)|0,t=t+Math.imul(y,K)|0,r=r+Math.imul(y,V)|0,u=u+Math.imul(p,W)|0,t=t+Math.imul(p,X)|0,t=t+Math.imul(b,W)|0,r=r+Math.imul(b,X)|0,u=u+Math.imul(c,Z)|0,t=t+Math.imul(c,J)|0,t=t+Math.imul(h,Z)|0,r=r+Math.imul(h,J)|0;var ml=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(ml>>>26)|0,ml&=67108863,u=Math.imul(S,F),t=Math.imul(S,z),t=t+Math.imul(E,F)|0,r=Math.imul(E,z),u=u+Math.imul(g,K)|0,t=t+Math.imul(g,V)|0,t=t+Math.imul(w,K)|0,r=r+Math.imul(w,V)|0,u=u+Math.imul(_,W)|0,t=t+Math.imul(_,X)|0,t=t+Math.imul(y,W)|0,r=r+Math.imul(y,X)|0,u=u+Math.imul(p,Z)|0,t=t+Math.imul(p,J)|0,t=t+Math.imul(b,Z)|0,r=r+Math.imul(b,J)|0,u=u+Math.imul(c,Q)|0,t=t+Math.imul(c,ll)|0,t=t+Math.imul(h,Q)|0,r=r+Math.imul(h,ll)|0;var gl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(gl>>>26)|0,gl&=67108863,u=Math.imul(I,F),t=Math.imul(I,z),t=t+Math.imul(j,F)|0,r=Math.imul(j,z),u=u+Math.imul(S,K)|0,t=t+Math.imul(S,V)|0,t=t+Math.imul(E,K)|0,r=r+Math.imul(E,V)|0,u=u+Math.imul(g,W)|0,t=t+Math.imul(g,X)|0,t=t+Math.imul(w,W)|0,r=r+Math.imul(w,X)|0,u=u+Math.imul(_,Z)|0,t=t+Math.imul(_,J)|0,t=t+Math.imul(y,Z)|0,r=r+Math.imul(y,J)|0,u=u+Math.imul(p,Q)|0,t=t+Math.imul(p,ll)|0,t=t+Math.imul(b,Q)|0,r=r+Math.imul(b,ll)|0,u=u+Math.imul(c,el)|0,t=t+Math.imul(c,ul)|0,t=t+Math.imul(h,el)|0,r=r+Math.imul(h,ul)|0;var wl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(wl>>>26)|0,wl&=67108863,u=Math.imul(C,F),t=Math.imul(C,z),t=t+Math.imul(x,F)|0,r=Math.imul(x,z),u=u+Math.imul(I,K)|0,t=t+Math.imul(I,V)|0,t=t+Math.imul(j,K)|0,r=r+Math.imul(j,V)|0,u=u+Math.imul(S,W)|0,t=t+Math.imul(S,X)|0,t=t+Math.imul(E,W)|0,r=r+Math.imul(E,X)|0,u=u+Math.imul(g,Z)|0,t=t+Math.imul(g,J)|0,t=t+Math.imul(w,Z)|0,r=r+Math.imul(w,J)|0,u=u+Math.imul(_,Q)|0,t=t+Math.imul(_,ll)|0,t=t+Math.imul(y,Q)|0,r=r+Math.imul(y,ll)|0,u=u+Math.imul(p,el)|0,t=t+Math.imul(p,ul)|0,t=t+Math.imul(b,el)|0,r=r+Math.imul(b,ul)|0,u=u+Math.imul(c,rl)|0,t=t+Math.imul(c,il)|0,t=t+Math.imul(h,rl)|0,r=r+Math.imul(h,il)|0;var kl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(kl>>>26)|0,kl&=67108863,u=Math.imul(B,F),t=Math.imul(B,z),t=t+Math.imul(T,F)|0,r=Math.imul(T,z),u=u+Math.imul(C,K)|0,t=t+Math.imul(C,V)|0,t=t+Math.imul(x,K)|0,r=r+Math.imul(x,V)|0,u=u+Math.imul(I,W)|0,t=t+Math.imul(I,X)|0,t=t+Math.imul(j,W)|0,r=r+Math.imul(j,X)|0,u=u+Math.imul(S,Z)|0,t=t+Math.imul(S,J)|0,t=t+Math.imul(E,Z)|0,r=r+Math.imul(E,J)|0,u=u+Math.imul(g,Q)|0,t=t+Math.imul(g,ll)|0,t=t+Math.imul(w,Q)|0,r=r+Math.imul(w,ll)|0,u=u+Math.imul(_,el)|0,t=t+Math.imul(_,ul)|0,t=t+Math.imul(y,el)|0,r=r+Math.imul(y,ul)|0,u=u+Math.imul(p,rl)|0,t=t+Math.imul(p,il)|0,t=t+Math.imul(b,rl)|0,r=r+Math.imul(b,il)|0,u=u+Math.imul(c,sl)|0,t=t+Math.imul(c,al)|0,t=t+Math.imul(h,sl)|0,r=r+Math.imul(h,al)|0;var Sl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(Sl>>>26)|0,Sl&=67108863,u=Math.imul(P,F),t=Math.imul(P,z),t=t+Math.imul(U,F)|0,r=Math.imul(U,z),u=u+Math.imul(B,K)|0,t=t+Math.imul(B,V)|0,t=t+Math.imul(T,K)|0,r=r+Math.imul(T,V)|0,u=u+Math.imul(C,W)|0,t=t+Math.imul(C,X)|0,t=t+Math.imul(x,W)|0,r=r+Math.imul(x,X)|0,u=u+Math.imul(I,Z)|0,t=t+Math.imul(I,J)|0,t=t+Math.imul(j,Z)|0,r=r+Math.imul(j,J)|0,u=u+Math.imul(S,Q)|0,t=t+Math.imul(S,ll)|0,t=t+Math.imul(E,Q)|0,r=r+Math.imul(E,ll)|0,u=u+Math.imul(g,el)|0,t=t+Math.imul(g,ul)|0,t=t+Math.imul(w,el)|0,r=r+Math.imul(w,ul)|0,u=u+Math.imul(_,rl)|0,t=t+Math.imul(_,il)|0,t=t+Math.imul(y,rl)|0,r=r+Math.imul(y,il)|0,u=u+Math.imul(p,sl)|0,t=t+Math.imul(p,al)|0,t=t+Math.imul(b,sl)|0,r=r+Math.imul(b,al)|0,u=u+Math.imul(c,cl)|0,t=t+Math.imul(c,hl)|0,t=t+Math.imul(h,cl)|0,r=r+Math.imul(h,hl)|0;var El=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(El>>>26)|0,El&=67108863,u=Math.imul(L,F),t=Math.imul(L,z),t=t+Math.imul(D,F)|0,r=Math.imul(D,z),u=u+Math.imul(P,K)|0,t=t+Math.imul(P,V)|0,t=t+Math.imul(U,K)|0,r=r+Math.imul(U,V)|0,u=u+Math.imul(B,W)|0,t=t+Math.imul(B,X)|0,t=t+Math.imul(T,W)|0,r=r+Math.imul(T,X)|0,u=u+Math.imul(C,Z)|0,t=t+Math.imul(C,J)|0,t=t+Math.imul(x,Z)|0,r=r+Math.imul(x,J)|0,u=u+Math.imul(I,Q)|0,t=t+Math.imul(I,ll)|0,t=t+Math.imul(j,Q)|0,r=r+Math.imul(j,ll)|0,u=u+Math.imul(S,el)|0,t=t+Math.imul(S,ul)|0,t=t+Math.imul(E,el)|0,r=r+Math.imul(E,ul)|0,u=u+Math.imul(g,rl)|0,t=t+Math.imul(g,il)|0,t=t+Math.imul(w,rl)|0,r=r+Math.imul(w,il)|0,u=u+Math.imul(_,sl)|0,t=t+Math.imul(_,al)|0,t=t+Math.imul(y,sl)|0,r=r+Math.imul(y,al)|0,u=u+Math.imul(p,cl)|0,t=t+Math.imul(p,hl)|0,t=t+Math.imul(b,cl)|0,r=r+Math.imul(b,hl)|0,u=u+Math.imul(c,pl)|0,t=t+Math.imul(c,bl)|0,t=t+Math.imul(h,pl)|0,r=r+Math.imul(h,bl)|0;var Ml=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(Ml>>>26)|0,Ml&=67108863,u=Math.imul(L,K),t=Math.imul(L,V),t=t+Math.imul(D,K)|0,r=Math.imul(D,V),u=u+Math.imul(P,W)|0,t=t+Math.imul(P,X)|0,t=t+Math.imul(U,W)|0,r=r+Math.imul(U,X)|0,u=u+Math.imul(B,Z)|0,t=t+Math.imul(B,J)|0,t=t+Math.imul(T,Z)|0,r=r+Math.imul(T,J)|0,u=u+Math.imul(C,Q)|0,t=t+Math.imul(C,ll)|0,t=t+Math.imul(x,Q)|0,r=r+Math.imul(x,ll)|0,u=u+Math.imul(I,el)|0,t=t+Math.imul(I,ul)|0,t=t+Math.imul(j,el)|0,r=r+Math.imul(j,ul)|0,u=u+Math.imul(S,rl)|0,t=t+Math.imul(S,il)|0,t=t+Math.imul(E,rl)|0,r=r+Math.imul(E,il)|0,u=u+Math.imul(g,sl)|0,t=t+Math.imul(g,al)|0,t=t+Math.imul(w,sl)|0,r=r+Math.imul(w,al)|0,u=u+Math.imul(_,cl)|0,t=t+Math.imul(_,hl)|0,t=t+Math.imul(y,cl)|0,r=r+Math.imul(y,hl)|0,u=u+Math.imul(p,pl)|0,t=t+Math.imul(p,bl)|0,t=t+Math.imul(b,pl)|0,r=r+Math.imul(b,bl)|0;var Il=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(Il>>>26)|0,Il&=67108863,u=Math.imul(L,W),t=Math.imul(L,X),t=t+Math.imul(D,W)|0,r=Math.imul(D,X),u=u+Math.imul(P,Z)|0,t=t+Math.imul(P,J)|0,t=t+Math.imul(U,Z)|0,r=r+Math.imul(U,J)|0,u=u+Math.imul(B,Q)|0,t=t+Math.imul(B,ll)|0,t=t+Math.imul(T,Q)|0,r=r+Math.imul(T,ll)|0,u=u+Math.imul(C,el)|0,t=t+Math.imul(C,ul)|0,t=t+Math.imul(x,el)|0,r=r+Math.imul(x,ul)|0,u=u+Math.imul(I,rl)|0,t=t+Math.imul(I,il)|0,t=t+Math.imul(j,rl)|0,r=r+Math.imul(j,il)|0,u=u+Math.imul(S,sl)|0,t=t+Math.imul(S,al)|0,t=t+Math.imul(E,sl)|0,r=r+Math.imul(E,al)|0,u=u+Math.imul(g,cl)|0,t=t+Math.imul(g,hl)|0,t=t+Math.imul(w,cl)|0,r=r+Math.imul(w,hl)|0,u=u+Math.imul(_,pl)|0,t=t+Math.imul(_,bl)|0,t=t+Math.imul(y,pl)|0,r=r+Math.imul(y,bl)|0;var jl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(jl>>>26)|0,jl&=67108863,u=Math.imul(L,Z),t=Math.imul(L,J),t=t+Math.imul(D,Z)|0,r=Math.imul(D,J),u=u+Math.imul(P,Q)|0,t=t+Math.imul(P,ll)|0,t=t+Math.imul(U,Q)|0,r=r+Math.imul(U,ll)|0,u=u+Math.imul(B,el)|0,t=t+Math.imul(B,ul)|0,t=t+Math.imul(T,el)|0,r=r+Math.imul(T,ul)|0,u=u+Math.imul(C,rl)|0,t=t+Math.imul(C,il)|0,t=t+Math.imul(x,rl)|0,r=r+Math.imul(x,il)|0,u=u+Math.imul(I,sl)|0,t=t+Math.imul(I,al)|0,t=t+Math.imul(j,sl)|0,r=r+Math.imul(j,al)|0,u=u+Math.imul(S,cl)|0,t=t+Math.imul(S,hl)|0,t=t+Math.imul(E,cl)|0,r=r+Math.imul(E,hl)|0,u=u+Math.imul(g,pl)|0,t=t+Math.imul(g,bl)|0,t=t+Math.imul(w,pl)|0,r=r+Math.imul(w,bl)|0;var Al=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(Al>>>26)|0,Al&=67108863,u=Math.imul(L,Q),t=Math.imul(L,ll),t=t+Math.imul(D,Q)|0,r=Math.imul(D,ll),u=u+Math.imul(P,el)|0,t=t+Math.imul(P,ul)|0,t=t+Math.imul(U,el)|0,r=r+Math.imul(U,ul)|0,u=u+Math.imul(B,rl)|0,t=t+Math.imul(B,il)|0,t=t+Math.imul(T,rl)|0,r=r+Math.imul(T,il)|0,u=u+Math.imul(C,sl)|0,t=t+Math.imul(C,al)|0,t=t+Math.imul(x,sl)|0,r=r+Math.imul(x,al)|0,u=u+Math.imul(I,cl)|0,t=t+Math.imul(I,hl)|0,t=t+Math.imul(j,cl)|0,r=r+Math.imul(j,hl)|0,u=u+Math.imul(S,pl)|0,t=t+Math.imul(S,bl)|0,t=t+Math.imul(E,pl)|0,r=r+Math.imul(E,bl)|0;var Cl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(Cl>>>26)|0,Cl&=67108863,u=Math.imul(L,el),t=Math.imul(L,ul),t=t+Math.imul(D,el)|0,r=Math.imul(D,ul),u=u+Math.imul(P,rl)|0,t=t+Math.imul(P,il)|0,t=t+Math.imul(U,rl)|0,r=r+Math.imul(U,il)|0,u=u+Math.imul(B,sl)|0,t=t+Math.imul(B,al)|0,t=t+Math.imul(T,sl)|0,r=r+Math.imul(T,al)|0,u=u+Math.imul(C,cl)|0,t=t+Math.imul(C,hl)|0,t=t+Math.imul(x,cl)|0,r=r+Math.imul(x,hl)|0,u=u+Math.imul(I,pl)|0,t=t+Math.imul(I,bl)|0,t=t+Math.imul(j,pl)|0,r=r+Math.imul(j,bl)|0;var xl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(xl>>>26)|0,xl&=67108863,u=Math.imul(L,rl),t=Math.imul(L,il),t=t+Math.imul(D,rl)|0,r=Math.imul(D,il),u=u+Math.imul(P,sl)|0,t=t+Math.imul(P,al)|0,t=t+Math.imul(U,sl)|0,r=r+Math.imul(U,al)|0,u=u+Math.imul(B,cl)|0,t=t+Math.imul(B,hl)|0,t=t+Math.imul(T,cl)|0,r=r+Math.imul(T,hl)|0,u=u+Math.imul(C,pl)|0,t=t+Math.imul(C,bl)|0,t=t+Math.imul(x,pl)|0,r=r+Math.imul(x,bl)|0;var Rl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(Rl>>>26)|0,Rl&=67108863,u=Math.imul(L,sl),t=Math.imul(L,al),t=t+Math.imul(D,sl)|0,r=Math.imul(D,al),u=u+Math.imul(P,cl)|0,t=t+Math.imul(P,hl)|0,t=t+Math.imul(U,cl)|0,r=r+Math.imul(U,hl)|0,u=u+Math.imul(B,pl)|0,t=t+Math.imul(B,bl)|0,t=t+Math.imul(T,pl)|0,r=r+Math.imul(T,bl)|0;var Bl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(Bl>>>26)|0,Bl&=67108863,u=Math.imul(L,cl),t=Math.imul(L,hl),t=t+Math.imul(D,cl)|0,r=Math.imul(D,hl),u=u+Math.imul(P,pl)|0,t=t+Math.imul(P,bl)|0,t=t+Math.imul(U,pl)|0,r=r+Math.imul(U,bl)|0;var Tl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(Tl>>>26)|0,Tl&=67108863,u=Math.imul(L,pl),t=Math.imul(L,bl),t=t+Math.imul(D,pl)|0,r=Math.imul(D,bl);var Ol=(a+u|0)+((8191&t)<<13)|0;return a=(r+(t>>>13)|0)+(Ol>>>26)|0,Ol&=67108863,s[0]=vl,s[1]=_l,s[2]=yl,s[3]=ml,s[4]=gl,s[5]=wl,s[6]=kl,s[7]=Sl,s[8]=El,s[9]=Ml,s[10]=Il,s[11]=jl,s[12]=Al,s[13]=Cl,s[14]=xl,s[15]=Rl,s[16]=Bl,s[17]=Tl,s[18]=Ol,0!==a&&(s[19]=a,e.length++),e};Math.imul||(M=a),r.prototype.mulTo=function(l,n){var e,u=this.length+l.length;return e=10===this.length&&10===l.length?M(this,l,n):u<63?a(this,l,n):u<1024?f(this,l,n):c(this,l,n)},h.prototype.makeRBT=function(l){for(var n=new Array(l),e=r.prototype._countBits(l)-1,u=0;u>=1;return u},h.prototype.permute=function(l,n,e,u,t,r){for(var i=0;i>>=1)t++;return 1<>>=13,e[2*i+1]=8191&r,r>>>=13;for(i=2*n;i>=26,n+=t/67108864|0,n+=r>>>26,this.words[e]=67108863&r}return 0!==n&&(this.words[e]=n,this.length++),this},r.prototype.muln=function(l){return this.clone().imuln(l)},r.prototype.sqr=function(){return this.mul(this)},r.prototype.isqr=function(){return this.imul(this.clone())},r.prototype.pow=function(l){var n=s(l);if(0===n.length)return new r(1);for(var e=this,u=0;u=0);var n,e=l%26,t=(l-e)/26,r=67108863>>>26-e<<26-e;if(0!==e){var i=0;for(n=0;n>>26-e}i&&(this.words[n]=i,this.length++)}if(0!==t){for(n=this.length-1;n>=0;n--)this.words[n+t]=this.words[n];for(n=0;n=0);var t;t=n?(n-n%26)/26:0;var r=l%26,i=Math.min((l-r)/26,this.length),o=67108863^67108863>>>r<i)for(this.length-=i,a=0;a=0&&(0!==f||a>=t);a--){var c=0|this.words[a];this.words[a]=f<<26-r|c>>>r,f=c&o}return s&&0!==f&&(s.words[s.length++]=f),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},r.prototype.ishrn=function(l,n,e){return u(0===this.negative),this.iushrn(l,n,e)},r.prototype.shln=function(l){return this.clone().ishln(l)},r.prototype.ushln=function(l){return this.clone().iushln(l)},r.prototype.shrn=function(l){return this.clone().ishrn(l)},r.prototype.ushrn=function(l){return this.clone().iushrn(l)},r.prototype.testn=function(l){u("number"==typeof l&&l>=0);var n=l%26,e=(l-n)/26,t=1<=0);var n=l%26,e=(l-n)/26;if(u(0===this.negative,"imaskn works only with positive numbers"),this.length<=e)return this;if(0!==n&&e++,this.length=Math.min(e,this.length),0!==n){var t=67108863^67108863>>>n<=67108864;n++)this.words[n]-=67108864,n===this.length-1?this.words[n+1]=1:this.words[n+1]++;return this.length=Math.max(this.length,n+1),this},r.prototype.isubn=function(l){if(u("number"==typeof l),u(l<67108864),l<0)return this.iaddn(-l);if(0!==this.negative)return this.negative=0,this.iaddn(l),this.negative=1,this;if(this.words[0]-=l,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var n=0;n>26)-(s/67108864|0),this.words[t+e]=67108863&i}for(;t>26,this.words[t+e]=67108863&i;if(0===o)return this.strip();for(u(o===-1),o=0,t=0;t>26,this.words[t]=67108863&i;return this.negative=1,this.strip()},r.prototype._wordDiv=function(l,n){var e=this.length-l.length,u=this.clone(),t=l,i=0|t.words[t.length-1],o=this._countBits(i);e=26-o,0!==e&&(t=t.ushln(e),u.iushln(e),i=0|t.words[t.length-1]);var s,a=u.length-t.length;if("mod"!==n){s=new r(null),s.length=a+1,s.words=new Array(s.length);for(var f=0;f=0;h--){var d=67108864*(0|u.words[t.length+h])+(0|u.words[t.length+h-1]);for(d=Math.min(d/i|0,67108863),u._ishlnsubmul(t,d,h);0!==u.negative;)d--,u.negative=0,u._ishlnsubmul(t,1,h),u.isZero()||(u.negative^=1);s&&(s.words[h]=d)}return s&&s.strip(),u.strip(),"div"!==n&&0!==e&&u.iushrn(e),{div:s||null,mod:u}},r.prototype.divmod=function(l,n,e){if(u(!l.isZero()),this.isZero())return{div:new r(0),mod:new r(0)};var t,i,o;return 0!==this.negative&&0===l.negative?(o=this.neg().divmod(l,n),"mod"!==n&&(t=o.div.neg()),"div"!==n&&(i=o.mod.neg(),e&&0!==i.negative&&i.iadd(l)),{div:t,mod:i}):0===this.negative&&0!==l.negative?(o=this.divmod(l.neg(),n),"mod"!==n&&(t=o.div.neg()),{div:t,mod:o.mod}):0!==(this.negative&l.negative)?(o=this.neg().divmod(l.neg(),n),"div"!==n&&(i=o.mod.neg(),e&&0!==i.negative&&i.isub(l)),{div:o.div,mod:i}):l.length>this.length||this.cmp(l)<0?{div:new r(0),mod:this}:1===l.length?"div"===n?{div:this.divn(l.words[0]),mod:null}:"mod"===n?{div:null,mod:new r(this.modn(l.words[0]))}:{div:this.divn(l.words[0]),mod:new r(this.modn(l.words[0]))}:this._wordDiv(l,n)},r.prototype.div=function(l){return this.divmod(l,"div",!1).div},r.prototype.mod=function(l){return this.divmod(l,"mod",!1).mod},r.prototype.umod=function(l){return this.divmod(l,"mod",!0).mod},r.prototype.divRound=function(l){var n=this.divmod(l);if(n.mod.isZero())return n.div;var e=0!==n.div.negative?n.mod.isub(l):n.mod,u=l.ushrn(1),t=l.andln(1),r=e.cmp(u);return r<0||1===t&&0===r?n.div:0!==n.div.negative?n.div.isubn(1):n.div.iaddn(1)},r.prototype.modn=function(l){u(l<=67108863);for(var n=(1<<26)%l,e=0,t=this.length-1;t>=0;t--)e=(n*e+(0|this.words[t]))%l;return e},r.prototype.idivn=function(l){u(l<=67108863);for(var n=0,e=this.length-1;e>=0;e--){var t=(0|this.words[e])+67108864*n;this.words[e]=t/l|0,n=t%l}return this.strip(); -},r.prototype.divn=function(l){return this.clone().idivn(l)},r.prototype.egcd=function(l){u(0===l.negative),u(!l.isZero());var n=this,e=l.clone();n=0!==n.negative?n.umod(l):n.clone();for(var t=new r(1),i=new r(0),o=new r(0),s=new r(1),a=0;n.isEven()&&e.isEven();)n.iushrn(1),e.iushrn(1),++a;for(var f=e.clone(),c=n.clone();!n.isZero();){for(var h=0,d=1;0===(n.words[0]&d)&&h<26;++h,d<<=1);if(h>0)for(n.iushrn(h);h-- >0;)(t.isOdd()||i.isOdd())&&(t.iadd(f),i.isub(c)),t.iushrn(1),i.iushrn(1);for(var p=0,b=1;0===(e.words[0]&b)&&p<26;++p,b<<=1);if(p>0)for(e.iushrn(p);p-- >0;)(o.isOdd()||s.isOdd())&&(o.iadd(f),s.isub(c)),o.iushrn(1),s.iushrn(1);n.cmp(e)>=0?(n.isub(e),t.isub(o),i.isub(s)):(e.isub(n),o.isub(t),s.isub(i))}return{a:o,b:s,gcd:e.iushln(a)}},r.prototype._invmp=function(l){u(0===l.negative),u(!l.isZero());var n=this,e=l.clone();n=0!==n.negative?n.umod(l):n.clone();for(var t=new r(1),i=new r(0),o=e.clone();n.cmpn(1)>0&&e.cmpn(1)>0;){for(var s=0,a=1;0===(n.words[0]&a)&&s<26;++s,a<<=1);if(s>0)for(n.iushrn(s);s-- >0;)t.isOdd()&&t.iadd(o),t.iushrn(1);for(var f=0,c=1;0===(e.words[0]&c)&&f<26;++f,c<<=1);if(f>0)for(e.iushrn(f);f-- >0;)i.isOdd()&&i.iadd(o),i.iushrn(1);n.cmp(e)>=0?(n.isub(e),t.isub(i)):(e.isub(n),i.isub(t))}var h;return h=0===n.cmpn(1)?t:i,h.cmpn(0)<0&&h.iadd(l),h},r.prototype.gcd=function(l){if(this.isZero())return l.abs();if(l.isZero())return this.abs();var n=this.clone(),e=l.clone();n.negative=0,e.negative=0;for(var u=0;n.isEven()&&e.isEven();u++)n.iushrn(1),e.iushrn(1);for(;;){for(;n.isEven();)n.iushrn(1);for(;e.isEven();)e.iushrn(1);var t=n.cmp(e);if(t<0){var r=n;n=e,e=r}else if(0===t||0===e.cmpn(1))break;n.isub(e)}return e.iushln(u)},r.prototype.invm=function(l){return this.egcd(l).a.umod(l)},r.prototype.isEven=function(){return 0===(1&this.words[0])},r.prototype.isOdd=function(){return 1===(1&this.words[0])},r.prototype.andln=function(l){return this.words[0]&l},r.prototype.bincn=function(l){u("number"==typeof l);var n=l%26,e=(l-n)/26,t=1<>>26,o&=67108863,this.words[i]=o}return 0!==r&&(this.words[i]=r,this.length++),this},r.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},r.prototype.cmpn=function(l){var n=l<0;if(0!==this.negative&&!n)return-1;if(0===this.negative&&n)return 1;this.strip();var e;if(this.length>1)e=1;else{n&&(l=-l),u(l<=67108863,"Number is too big");var t=0|this.words[0];e=t===l?0:tl.length)return 1;if(this.length=0;e--){var u=0|this.words[e],t=0|l.words[e];if(u!==t){ut&&(n=1);break}}return n},r.prototype.gtn=function(l){return 1===this.cmpn(l)},r.prototype.gt=function(l){return 1===this.cmp(l)},r.prototype.gten=function(l){return this.cmpn(l)>=0},r.prototype.gte=function(l){return this.cmp(l)>=0},r.prototype.ltn=function(l){return this.cmpn(l)===-1},r.prototype.lt=function(l){return this.cmp(l)===-1},r.prototype.lten=function(l){return this.cmpn(l)<=0},r.prototype.lte=function(l){return this.cmp(l)<=0},r.prototype.eqn=function(l){return 0===this.cmpn(l)},r.prototype.eq=function(l){return 0===this.cmp(l)},r.red=function(l){return new y(l)},r.prototype.toRed=function(l){return u(!this.red,"Already a number in reduction context"),u(0===this.negative,"red works only with positives"),l.convertTo(this)._forceRed(l)},r.prototype.fromRed=function(){return u(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},r.prototype._forceRed=function(l){return this.red=l,this},r.prototype.forceRed=function(l){return u(!this.red,"Already a number in reduction context"),this._forceRed(l)},r.prototype.redAdd=function(l){return u(this.red,"redAdd works only with red numbers"),this.red.add(this,l)},r.prototype.redIAdd=function(l){return u(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,l)},r.prototype.redSub=function(l){return u(this.red,"redSub works only with red numbers"),this.red.sub(this,l)},r.prototype.redISub=function(l){return u(this.red,"redISub works only with red numbers"),this.red.isub(this,l)},r.prototype.redShl=function(l){return u(this.red,"redShl works only with red numbers"),this.red.shl(this,l)},r.prototype.redMul=function(l){return u(this.red,"redMul works only with red numbers"),this.red._verify2(this,l),this.red.mul(this,l)},r.prototype.redIMul=function(l){return u(this.red,"redMul works only with red numbers"),this.red._verify2(this,l),this.red.imul(this,l)},r.prototype.redSqr=function(){return u(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},r.prototype.redISqr=function(){return u(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},r.prototype.redSqrt=function(){return u(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},r.prototype.redInvm=function(){return u(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},r.prototype.redNeg=function(){return u(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},r.prototype.redPow=function(l){return u(this.red&&!l.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,l)};var I={k256:null,p224:null,p192:null,p25519:null};d.prototype._tmp=function(){var l=new r(null);return l.words=new Array(Math.ceil(this.n/13)),l},d.prototype.ireduce=function(l){var n,e=l;do this.split(e,this.tmp),e=this.imulK(e),e=e.iadd(this.tmp),n=e.bitLength();while(n>this.n);var u=n0?e.isub(this.p):e.strip(),e},d.prototype.split=function(l,n){l.iushrn(this.n,0,n)},d.prototype.imulK=function(l){return l.imul(this.k)},t(p,d),p.prototype.split=function(l,n){for(var e=4194303,u=Math.min(l.length,9),t=0;t>>22,r=i}r>>>=22,l.words[t-10]=r,0===r&&l.length>10?l.length-=10:l.length-=9},p.prototype.imulK=function(l){l.words[l.length]=0,l.words[l.length+1]=0,l.length+=2;for(var n=0,e=0;e>>=26,l.words[e]=t,n=u}return 0!==n&&(l.words[l.length++]=n),l},r._prime=function j(l){if(I[l])return I[l];var j;if("k256"===l)j=new p;else if("p224"===l)j=new b;else if("p192"===l)j=new v;else{if("p25519"!==l)throw new Error("Unknown prime "+l);j=new _}return I[l]=j,j},y.prototype._verify1=function(l){u(0===l.negative,"red works only with positives"),u(l.red,"red works only with red numbers")},y.prototype._verify2=function(l,n){u(0===(l.negative|n.negative),"red works only with positives"),u(l.red&&l.red===n.red,"red works only with red numbers")},y.prototype.imod=function(l){return this.prime?this.prime.ireduce(l)._forceRed(this):l.umod(this.m)._forceRed(this)},y.prototype.neg=function(l){return l.isZero()?l.clone():this.m.sub(l)._forceRed(this)},y.prototype.add=function(l,n){this._verify2(l,n);var e=l.add(n);return e.cmp(this.m)>=0&&e.isub(this.m),e._forceRed(this)},y.prototype.iadd=function(l,n){this._verify2(l,n);var e=l.iadd(n);return e.cmp(this.m)>=0&&e.isub(this.m),e},y.prototype.sub=function(l,n){this._verify2(l,n);var e=l.sub(n);return e.cmpn(0)<0&&e.iadd(this.m),e._forceRed(this)},y.prototype.isub=function(l,n){this._verify2(l,n);var e=l.isub(n);return e.cmpn(0)<0&&e.iadd(this.m),e},y.prototype.shl=function(l,n){return this._verify1(l),this.imod(l.ushln(n))},y.prototype.imul=function(l,n){return this._verify2(l,n),this.imod(l.imul(n))},y.prototype.mul=function(l,n){return this._verify2(l,n),this.imod(l.mul(n))},y.prototype.isqr=function(l){return this.imul(l,l.clone())},y.prototype.sqr=function(l){return this.mul(l,l)},y.prototype.sqrt=function(l){if(l.isZero())return l.clone();var n=this.m.andln(3);if(u(n%2===1),3===n){var e=this.m.add(new r(1)).iushrn(2);return this.pow(l,e)}for(var t=this.m.subn(1),i=0;!t.isZero()&&0===t.andln(1);)i++,t.iushrn(1);u(!t.isZero());var o=new r(1).toRed(this),s=o.redNeg(),a=this.m.subn(1).iushrn(1),f=this.m.bitLength();for(f=new r(2*f*f).toRed(this);0!==this.pow(f,a).cmp(s);)f.redIAdd(s);for(var c=this.pow(f,t),h=this.pow(l,t.addn(1).iushrn(1)),d=this.pow(l,t),p=i;0!==d.cmp(o);){for(var b=d,v=0;0!==b.cmp(o);v++)b=b.redSqr();u(v=0;t--){for(var f=n.words[t],c=a-1;c>=0;c--){var h=f>>c&1;i!==u[0]&&(i=this.sqr(i)),0!==h||0!==o?(o<<=1,o|=h,s++,(s===e||0===t&&0===c)&&(i=this.mul(i,u[o]),s=0,o=0)):s=0}a=26}return i},y.prototype.convertTo=function(l){var n=l.umod(this.m);return n===l?n.clone():n},y.prototype.convertFrom=function(l){var n=l.clone();return n.red=null,n},r.mont=function(l){return new m(l)},t(m,y),m.prototype.convertTo=function(l){return this.imod(l.ushln(this.shift))},m.prototype.convertFrom=function(l){var n=this.imod(l.mul(this.rinv));return n.red=null,n},m.prototype.imul=function(l,n){if(l.isZero()||n.isZero())return l.words[0]=0,l.length=1,l;var e=l.imul(n),u=e.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),t=e.isub(u).iushrn(this.shift),r=t;return t.cmp(this.m)>=0?r=t.isub(this.m):t.cmpn(0)<0&&(r=t.iadd(this.m)),r._forceRed(this)},m.prototype.mul=function(l,n){if(l.isZero()||n.isZero())return new r(0)._forceRed(this);var e=l.mul(n),u=e.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),t=e.isub(u).iushrn(this.shift),i=t;return t.cmp(this.m)>=0?i=t.isub(this.m):t.cmpn(0)<0&&(i=t.iadd(this.m)),i._forceRed(this)},m.prototype.invm=function(l){var n=this.imod(l._invmp(this.m).mul(this.r2));return n._forceRed(this)}}("undefined"==typeof n||n,this)},{}],37:[function(l,n,e){function u(l){this.rand=l}var t;if(n.exports=function(l){return t||(t=new u(null)),t.generate(l)},n.exports.Rand=u,u.prototype.generate=function(l){return this._rand(l)},u.prototype._rand=function(l){if(this.rand.getBytes)return this.rand.getBytes(l);for(var n=new Uint8Array(l),e=0;eo||l<0?(e=Math.abs(l)%o,l<0?o-e:e):l}function u(l){for(var n=0;n>>8^255&e^99,this.SBOX[t]=e,this.INV_SBOX[e]=t,r=l[t],i=l[r],o=l[i],u=257*l[e]^16843008*e,this.SUB_MIX[0][t]=u<<24|u>>>8,this.SUB_MIX[1][t]=u<<16|u>>>16,this.SUB_MIX[2][t]=u<<8|u>>>24,this.SUB_MIX[3][t]=u,u=16843009*o^65537*i^257*r^16843008*t,this.INV_SUB_MIX[0][e]=u<<24|u>>>8,this.INV_SUB_MIX[1][e]=u<<16|u>>>16,this.INV_SUB_MIX[2][e]=u<<8|u>>>24,this.INV_SUB_MIX[3][e]=u,0===t?t=s=1:(t=r^l[l[l[o^r]]],s^=l[l[s]]);return!0};var s=new t;i.blockSize=16,i.prototype.blockSize=i.blockSize,i.keySize=32,i.prototype.keySize=i.keySize,i.prototype._doReset=function(){var l,n,e,u,t,r;for(e=this._key,n=e.length,this._nRounds=n+6,t=4*(this._nRounds+1),this._keySchedule=[],u=0;u>>24,r=s.SBOX[r>>>24]<<24|s.SBOX[r>>>16&255]<<16|s.SBOX[r>>>8&255]<<8|s.SBOX[255&r],r^=s.RCON[u/n|0]<<24):n>6&&u%n===4?r=s.SBOX[r>>>24]<<24|s.SBOX[r>>>16&255]<<16|s.SBOX[r>>>8&255]<<8|s.SBOX[255&r]:void 0,this._keySchedule[u-n]^r);for(this._invKeySchedule=[],l=0;l>>24]]^s.INV_SUB_MIX[1][s.SBOX[r>>>16&255]]^s.INV_SUB_MIX[2][s.SBOX[r>>>8&255]]^s.INV_SUB_MIX[3][s.SBOX[255&r]];return!0},i.prototype.encryptBlock=function(n){n=r(new l(n));var e=this._doCryptBlock(n,this._keySchedule,s.SUB_MIX,s.SBOX),u=new l(16);return u.writeUInt32BE(e[0],0),u.writeUInt32BE(e[1],4),u.writeUInt32BE(e[2],8),u.writeUInt32BE(e[3],12),u},i.prototype.decryptBlock=function(n){n=r(new l(n));var e=[n[3],n[1]];n[1]=e[0],n[3]=e[1];var u=this._doCryptBlock(n,this._invKeySchedule,s.INV_SUB_MIX,s.INV_SBOX),t=new l(16);return t.writeUInt32BE(u[0],0),t.writeUInt32BE(u[3],4),t.writeUInt32BE(u[2],8),t.writeUInt32BE(u[1],12),t},i.prototype.scrub=function(){u(this._keySchedule),u(this._invKeySchedule),u(this._key)},i.prototype._doCryptBlock=function(l,e,u,t){var r,i,o,s,a,f,c,h,d;i=l[0]^e[0],o=l[1]^e[1],s=l[2]^e[2],a=l[3]^e[3],r=4;for(var p=1;p>>24]^u[1][o>>>16&255]^u[2][s>>>8&255]^u[3][255&a]^e[r++],c=u[0][o>>>24]^u[1][s>>>16&255]^u[2][a>>>8&255]^u[3][255&i]^e[r++],h=u[0][s>>>24]^u[1][a>>>16&255]^u[2][i>>>8&255]^u[3][255&o]^e[r++],d=u[0][a>>>24]^u[1][i>>>16&255]^u[2][o>>>8&255]^u[3][255&s]^e[r++],i=f,o=c,s=h,a=d;return f=(t[i>>>24]<<24|t[o>>>16&255]<<16|t[s>>>8&255]<<8|t[255&a])^e[r++],c=(t[o>>>24]<<24|t[s>>>16&255]<<16|t[a>>>8&255]<<8|t[255&i])^e[r++],h=(t[s>>>24]<<24|t[a>>>16&255]<<16|t[i>>>8&255]<<8|t[255&o])^e[r++],d=(t[a>>>24]<<24|t[i>>>16&255]<<16|t[o>>>8&255]<<8|t[255&s])^e[r++],[n(f),n(c),n(h),n(d)]},e.AES=i}).call(this,l("buffer").Buffer)},{buffer:66}],40:[function(l,n,e){(function(e){function u(l,n,t,o){if(!(this instanceof u))return new u(l,n,t);i.call(this),this._finID=e.concat([t,new e([0,0,0,1])]),t=e.concat([t,new e([0,0,0,2])]),this._cipher=new r.AES(n),this._prev=new e(t.length),this._cache=new e(""),this._secCache=new e(""),this._decrypt=o,this._alen=0,this._len=0,t.copy(this._prev),this._mode=l;var a=new e(4);a.fill(0),this._ghash=new s(this._cipher.encryptBlock(a)),this._authTag=null,this._called=!1}function t(l,n){var e=0;l.length!==n.length&&e++;for(var u=Math.min(l.length,n.length),t=-1;++t16)return n=this.cache.slice(0,16),this.cache=this.cache.slice(16),n}else if(this.cache.length>=16)return n=this.cache.slice(0,16),this.cache=this.cache.slice(16),n;return null},t.prototype.flush=function(){if(this.cache.length)return this.cache};var b={ECB:l("./modes/ecb"),CBC:l("./modes/cbc"),CFB:l("./modes/cfb"),CFB8:l("./modes/cfb8"),CFB1:l("./modes/cfb1"),OFB:l("./modes/ofb"),CTR:l("./modes/ctr"),GCM:l("./modes/ctr")};e.createDecipher=o,e.createDecipheriv=i}).call(this,l("buffer").Buffer)},{"./aes":39,"./authCipher":40,"./modes":45,"./modes/cbc":46,"./modes/cfb":47,"./modes/cfb1":48,"./modes/cfb8":49,"./modes/ctr":50,"./modes/ecb":51,"./modes/ofb":52,"./streamCipher":53,buffer:66,"cipher-base":67,evp_bytestokey:213,inherits:223}],43:[function(l,n,e){(function(n){function u(l,e,r){return this instanceof u?(s.call(this),this._cache=new t,this._cipher=new o.AES(e),this._prev=new n(r.length),r.copy(this._prev),this._mode=l,void(this._autopadding=!0)):new u(l,e,r)}function t(){return this instanceof t?void(this.cache=new n("")):new t}function r(l,e,t){var r=f[l.toLowerCase()];if(!r)throw new TypeError("invalid suite type");if("string"==typeof t&&(t=new n(t)),"string"==typeof e&&(e=new n(e)),e.length!==r.key/8)throw new TypeError("invalid key length "+e.length);if(t.length!==r.iv)throw new TypeError("invalid iv length "+t.length);return"stream"===r.type?new h(p[r.mode],e,t):"auth"===r.type?new d(p[r.mode],e,t):new u(p[r.mode],e,t)}function i(l,n){var e=f[l.toLowerCase()];if(!e)throw new TypeError("invalid suite type");var u=c(n,!1,e.key,e.iv);return r(l,u.key,u.iv)}var o=l("./aes"),s=l("cipher-base"),a=l("inherits"),f=l("./modes"),c=l("evp_bytestokey"),h=l("./streamCipher"),d=l("./authCipher");a(u,s),u.prototype._update=function(l){this._cache.add(l);for(var e,u,t=[];e=this._cache.get();)u=this._mode.encrypt(this,e),t.push(u);return n.concat(t)},u.prototype._final=function(){var l=this._cache.flush();if(this._autopadding)return l=this._mode.encrypt(this,l),this._cipher.scrub(),l;if("10101010101010101010101010101010"!==l.toString("hex"))throw this._cipher.scrub(),new Error("data not multiple of block length")},u.prototype.setAutoPadding=function(l){return this._autopadding=!!l,this},t.prototype.add=function(l){this.cache=n.concat([this.cache,l])},t.prototype.get=function(){if(this.cache.length>15){var l=this.cache.slice(0,16);return this.cache=this.cache.slice(16),l}return null},t.prototype.flush=function(){for(var l=16-this.cache.length,e=new n(l),u=-1;++us||l<0?(e=Math.abs(l)%s,l<0?s-e:e):l}function i(l,n){return[l[0]^n[0],l[1]^n[1],l[2]^n[2],l[3]^n[3]]}var o=new l(16);o.fill(0),n.exports=e,e.prototype.ghash=function(l){for(var n=-1;++n0;l--)r[l]=r[l]>>>1|(1&r[l-1])<<31;r[0]=r[0]>>>1,e&&(r[0]=r[0]^225<<24)}this.state=t(o)},e.prototype.update=function(n){this.cache=l.concat([this.cache,n]);for(var e;this.cache.length>=16;)e=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(e)},e.prototype["final"]=function(n,e){return this.cache.length&&this.ghash(l.concat([this.cache,o],16)),this.ghash(t([0,n,0,e])),this.state};var s=Math.pow(2,32)}).call(this,l("buffer").Buffer)},{buffer:66}],45:[function(l,n,e){e["aes-128-ecb"]={cipher:"AES",key:128,iv:0,mode:"ECB",type:"block"},e["aes-192-ecb"]={cipher:"AES",key:192,iv:0,mode:"ECB",type:"block"},e["aes-256-ecb"]={cipher:"AES",key:256,iv:0,mode:"ECB",type:"block"},e["aes-128-cbc"]={cipher:"AES",key:128,iv:16,mode:"CBC",type:"block"},e["aes-192-cbc"]={cipher:"AES",key:192,iv:16,mode:"CBC",type:"block"},e["aes-256-cbc"]={cipher:"AES",key:256,iv:16,mode:"CBC",type:"block"},e.aes128=e["aes-128-cbc"],e.aes192=e["aes-192-cbc"],e.aes256=e["aes-256-cbc"],e["aes-128-cfb"]={cipher:"AES",key:128,iv:16,mode:"CFB",type:"stream"},e["aes-192-cfb"]={cipher:"AES",key:192,iv:16,mode:"CFB",type:"stream"},e["aes-256-cfb"]={cipher:"AES",key:256,iv:16,mode:"CFB",type:"stream"},e["aes-128-cfb8"]={cipher:"AES",key:128,iv:16,mode:"CFB8",type:"stream"},e["aes-192-cfb8"]={cipher:"AES",key:192,iv:16,mode:"CFB8",type:"stream"},e["aes-256-cfb8"]={cipher:"AES",key:256,iv:16,mode:"CFB8",type:"stream"},e["aes-128-cfb1"]={cipher:"AES",key:128,iv:16,mode:"CFB1",type:"stream"},e["aes-192-cfb1"]={cipher:"AES",key:192,iv:16,mode:"CFB1",type:"stream"},e["aes-256-cfb1"]={cipher:"AES",key:256,iv:16,mode:"CFB1",type:"stream"},e["aes-128-ofb"]={cipher:"AES",key:128,iv:16,mode:"OFB",type:"stream"},e["aes-192-ofb"]={cipher:"AES",key:192,iv:16,mode:"OFB",type:"stream"},e["aes-256-ofb"]={cipher:"AES",key:256,iv:16,mode:"OFB",type:"stream"},e["aes-128-ctr"]={cipher:"AES",key:128,iv:16,mode:"CTR",type:"stream"},e["aes-192-ctr"]={cipher:"AES",key:192,iv:16,mode:"CTR",type:"stream"},e["aes-256-ctr"]={cipher:"AES",key:256,iv:16,mode:"CTR",type:"stream"},e["aes-128-gcm"]={cipher:"AES",key:128,iv:12,mode:"GCM",type:"auth"},e["aes-192-gcm"]={cipher:"AES",key:192,iv:12,mode:"GCM",type:"auth"},e["aes-256-gcm"]={cipher:"AES",key:256,iv:12,mode:"GCM",type:"auth"}},{}],46:[function(l,n,e){var u=l("buffer-xor");e.encrypt=function(l,n){var e=u(n,l._prev);return l._prev=l._cipher.encryptBlock(e),l._prev},e.decrypt=function(l,n){var e=l._prev;l._prev=n;var t=l._cipher.decryptBlock(n);return u(t,e)}},{"buffer-xor":65}],47:[function(l,n,e){(function(n){function u(l,e,u){var r=e.length,i=t(e,l._cache);return l._cache=l._cache.slice(r),l._prev=n.concat([l._prev,u?e:i]),i}var t=l("buffer-xor");e.encrypt=function(l,e,t){for(var r,i=new n("");e.length;){if(0===l._cache.length&&(l._cache=l._cipher.encryptBlock(l._prev),l._prev=new n("")),!(l._cache.length<=e.length)){i=n.concat([i,u(l,e,t)]);break}r=l._cache.length,i=n.concat([i,u(l,e.slice(0,r),t)]),e=e.slice(r)}return i}}).call(this,l("buffer").Buffer)},{buffer:66,"buffer-xor":65}],48:[function(l,n,e){(function(l){function n(l,n,e){for(var t,r,i,o=-1,s=8,a=0;++o>o%8,l._prev=u(l._prev,e?r:i);return a}function u(n,e){var u=n.length,t=-1,r=new l(n.length);for(n=l.concat([n,new l([e])]);++t>7;return r}e.encrypt=function(e,u,t){for(var r=u.length,i=new l(r),o=-1;++o=0||!e.umod(l.prime1)||!e.umod(l.prime2);)e=new i(o(n));return e}var i=l("bn.js"),o=l("randombytes");n.exports=t,t.getr=r}).call(this,l("buffer").Buffer)},{"bn.js":36,buffer:66,randombytes:246}],58:[function(l,n,e){(function(l){"use strict";e["RSA-SHA224"]=e.sha224WithRSAEncryption={sign:"rsa",hash:"sha224",id:new l("302d300d06096086480165030402040500041c","hex")},e["RSA-SHA256"]=e.sha256WithRSAEncryption={sign:"rsa",hash:"sha256",id:new l("3031300d060960864801650304020105000420","hex")},e["RSA-SHA384"]=e.sha384WithRSAEncryption={sign:"rsa",hash:"sha384",id:new l("3041300d060960864801650304020205000430","hex")},e["RSA-SHA512"]=e.sha512WithRSAEncryption={sign:"rsa",hash:"sha512",id:new l("3051300d060960864801650304020305000440","hex")},e["RSA-SHA1"]={sign:"rsa",hash:"sha1",id:new l("3021300906052b0e03021a05000414","hex")},e["ecdsa-with-SHA1"]={sign:"ecdsa",hash:"sha1",id:new l("","hex")},e.DSA=e["DSA-SHA1"]=e["DSA-SHA"]={sign:"dsa",hash:"sha1",id:new l("","hex")},e["DSA-SHA224"]=e["DSA-WITH-SHA224"]={sign:"dsa",hash:"sha224", -id:new l("","hex")},e["DSA-SHA256"]=e["DSA-WITH-SHA256"]={sign:"dsa",hash:"sha256",id:new l("","hex")},e["DSA-SHA384"]=e["DSA-WITH-SHA384"]={sign:"dsa",hash:"sha384",id:new l("","hex")},e["DSA-SHA512"]=e["DSA-WITH-SHA512"]={sign:"dsa",hash:"sha512",id:new l("","hex")},e["DSA-RIPEMD160"]={sign:"dsa",hash:"rmd160",id:new l("","hex")},e["RSA-RIPEMD160"]=e.ripemd160WithRSA={sign:"rsa",hash:"rmd160",id:new l("3021300906052b2403020105000414","hex")},e["RSA-MD5"]=e.md5WithRSAEncryption={sign:"rsa",hash:"md5",id:new l("3020300c06082a864886f70d020505000410","hex")}}).call(this,l("buffer").Buffer)},{buffer:66}],59:[function(l,n,e){(function(e){function u(l){c.Writable.call(this);var n=d[l];if(!n)throw new Error("Unknown message digest");this._hashType=n.hash,this._hash=s(n.hash),this._tag=n.id,this._signType=n.sign}function t(l){c.Writable.call(this);var n=d[l];if(!n)throw new Error("Unknown message digest");this._hash=s(n.hash),this._tag=n.id,this._signType=n.sign}function r(l){return new u(l)}function i(l){return new t(l)}var o=l("./algos"),s=l("create-hash"),a=l("inherits"),f=l("./sign"),c=l("stream"),h=l("./verify"),d={};Object.keys(o).forEach(function(l){d[l]=d[l.toLowerCase()]=o[l]}),a(u,c.Writable),u.prototype._write=function(l,n,e){this._hash.update(l),e()},u.prototype.update=function(l,n){return"string"==typeof l&&(l=new e(l,n)),this._hash.update(l),this},u.prototype.sign=function(l,n){this.end();var u=this._hash.digest(),t=f(e.concat([this._tag,u]),l,this._hashType,this._signType);return n?t.toString(n):t},a(t,c.Writable),t.prototype._write=function(l,n,e){this._hash.update(l),e()},t.prototype.update=function(l,n){return"string"==typeof l&&(l=new e(l,n)),this._hash.update(l),this},t.prototype.verify=function(l,n,u){"string"==typeof n&&(n=new e(n,u)),this.end();var t=this._hash.digest();return h(n,e.concat([this._tag,t]),l,this._signType)},n.exports={Sign:r,Verify:i,createSign:r,createVerify:i}}).call(this,l("buffer").Buffer)},{"./algos":58,"./sign":61,"./verify":62,buffer:66,"create-hash":181,inherits:223,stream:267}],60:[function(l,n,e){"use strict";e["1.3.132.0.10"]="secp256k1",e["1.3.132.0.33"]="p224",e["1.2.840.10045.3.1.1"]="p192",e["1.2.840.10045.3.1.7"]="p256",e["1.3.132.0.34"]="p384",e["1.3.132.0.35"]="p521"},{}],61:[function(l,n,e){(function(e){function u(l,n,e,u){var i=v(n);if(i.curve){if("ecdsa"!==u)throw new Error("wrong private key type");return t(l,i)}if("dsa"===i.type){if("dsa"!==u)throw new Error("wrong private key type");return r(l,i,e)}if("rsa"!==u)throw new Error("wrong private key type");for(var o=i.modulus.byteLength(),s=[0,1];l.length+s.length+10&&e.ishrn(u),e}function a(l,n){l=s(l,n),l=l.mod(n);var u=new e(l.toArray());if(u.length=n)throw new Error("invalid sig")}var o=l("./curves"),s=l("elliptic"),a=l("parse-asn1"),f=l("bn.js"),c=s.ec;n.exports=u}).call(this,l("buffer").Buffer)},{"./curves":60,"bn.js":36,buffer:66,elliptic:196,"parse-asn1":234}],63:[function(l,n,e){arguments[4][38][0].apply(e,arguments)},{dup:38}],64:[function(l,n,e){(function(n){"use strict";var u=l("buffer"),t=u.Buffer,r=u.SlowBuffer,i=u.kMaxLength||2147483647;e.alloc=function(l,n,e){if("function"==typeof t.alloc)return t.alloc(l,n,e);if("number"==typeof e)throw new TypeError("encoding must not be number");if("number"!=typeof l)throw new TypeError("size must be a number");if(l>i)throw new RangeError("size is too large");var u=e,r=n;void 0===r&&(u=void 0,r=0);var o=new t(l);if("string"==typeof r)for(var s=new t(r,u),a=s.length,f=-1;++fi)throw new RangeError("size is too large");return new t(l)},e.from=function(l,e,u){if("function"==typeof t.from&&(!n.Uint8Array||Uint8Array.from!==t.from))return t.from(l,e,u);if("number"==typeof l)throw new TypeError('"value" argument must not be a number');if("string"==typeof l)return new t(l,e);if("undefined"!=typeof ArrayBuffer&&l instanceof ArrayBuffer){var r=e;if(1===arguments.length)return new t(l);"undefined"==typeof r&&(r=0);var i=u;if("undefined"==typeof i&&(i=l.byteLength-r),r>=l.byteLength)throw new RangeError("'offset' is out of bounds");if(i>l.byteLength-r)throw new RangeError("'length' is out of bounds");return new t(l.slice(r,r+i))}if(t.isBuffer(l)){var o=new t(l.length);return l.copy(o,0,0,l.length),o}if(l){if(Array.isArray(l)||"undefined"!=typeof ArrayBuffer&&l.buffer instanceof ArrayBuffer||"length"in l)return new t(l);if("Buffer"===l.type&&Array.isArray(l.data))return new t(l.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")},e.allocUnsafeSlow=function(l){if("function"==typeof t.allocUnsafeSlow)return t.allocUnsafeSlow(l);if("number"!=typeof l)throw new TypeError("size must be a number");if(l>=i)throw new RangeError("size is too large");return new r(l)}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{buffer:66}],65:[function(l,n,e){(function(l){n.exports=function(n,e){for(var u=Math.min(n.length,e.length),t=new l(u),r=0;r=t())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+t().toString(16)+" bytes");return 0|l}function v(l){return+l!=l&&(l=0),i.alloc(+l)}function _(l,n){if(i.isBuffer(l))return l.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(l)||l instanceof ArrayBuffer))return l.byteLength;"string"!=typeof l&&(l=""+l);var e=l.length;if(0===e)return 0;for(var u=!1;;)switch(n){case"ascii":case"latin1":case"binary":return e;case"utf8":case"utf-8":case void 0:return V(l).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*e;case"hex":return e>>>1;case"base64":return X(l).length;default:if(u)return V(l).length;n=(""+n).toLowerCase(),u=!0}}function y(l,n,e){var u=!1;if((void 0===n||n<0)&&(n=0),n>this.length)return"";if((void 0===e||e>this.length)&&(e=this.length),e<=0)return"";if(e>>>=0,n>>>=0,e<=n)return"";for(l||(l="utf8");;)switch(l){case"hex":return T(this,n,e);case"utf8":case"utf-8":return C(this,n,e);case"ascii":return R(this,n,e);case"latin1":case"binary":return B(this,n,e);case"base64":return A(this,n,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,n,e);default:if(u)throw new TypeError("Unknown encoding: "+l);l=(l+"").toLowerCase(),u=!0}}function m(l,n,e){var u=l[n];l[n]=l[e],l[e]=u}function g(l,n,e,u,t){if(0===l.length)return-1;if("string"==typeof e?(u=e,e=0):e>2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e=+e,isNaN(e)&&(e=t?0:l.length-1),e<0&&(e=l.length+e),e>=l.length){if(t)return-1;e=l.length-1}else if(e<0){if(!t)return-1;e=0}if("string"==typeof n&&(n=i.from(n,u)),i.isBuffer(n))return 0===n.length?-1:w(l,n,e,u,t);if("number"==typeof n)return n=255&n,i.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?t?Uint8Array.prototype.indexOf.call(l,n,e):Uint8Array.prototype.lastIndexOf.call(l,n,e):w(l,[n],e,u,t);throw new TypeError("val must be string, number or Buffer")}function w(l,n,e,u,t){function r(l,n){return 1===i?l[n]:l.readUInt16BE(n*i)}var i=1,o=l.length,s=n.length;if(void 0!==u&&(u=String(u).toLowerCase(),"ucs2"===u||"ucs-2"===u||"utf16le"===u||"utf-16le"===u)){if(l.length<2||n.length<2)return-1;i=2,o/=2,s/=2,e/=2}var a;if(t){var f=-1;for(a=e;ao&&(e=o-s),a=e;a>=0;a--){for(var c=!0,h=0;ht&&(u=t)):u=t;var r=n.length;if(r%2!==0)throw new TypeError("Invalid hex string");u>r/2&&(u=r/2);for(var i=0;i239?4:r>223?3:r>191?2:1;if(t+o<=e){var s,a,f,c;switch(o){case 1:r<128&&(i=r);break;case 2:s=l[t+1],128===(192&s)&&(c=(31&r)<<6|63&s,c>127&&(i=c));break;case 3:s=l[t+1],a=l[t+2],128===(192&s)&&128===(192&a)&&(c=(15&r)<<12|(63&s)<<6|63&a,c>2047&&(c<55296||c>57343)&&(i=c));break;case 4:s=l[t+1],a=l[t+2],f=l[t+3],128===(192&s)&&128===(192&a)&&128===(192&f)&&(c=(15&r)<<18|(63&s)<<12|(63&a)<<6|63&f,c>65535&&c<1114112&&(i=c))}}null===i?(i=65533,o=1):i>65535&&(i-=65536,u.push(i>>>10&1023|55296),i=56320|1023&i),u.push(i),t+=o}return x(u)}function x(l){var n=l.length;if(n<=ll)return String.fromCharCode.apply(String,l);for(var e="",u=0;uu)&&(e=u);for(var t="",r=n;re)throw new RangeError("Trying to access beyond buffer length")}function U(l,n,e,u,t,r){if(!i.isBuffer(l))throw new TypeError('"buffer" argument must be a Buffer instance');if(n>t||nl.length)throw new RangeError("Index out of range")}function N(l,n,e,u){n<0&&(n=65535+n+1);for(var t=0,r=Math.min(l.length-e,2);t>>8*(u?t:1-t)}function L(l,n,e,u){n<0&&(n=4294967295+n+1);for(var t=0,r=Math.min(l.length-e,4);t>>8*(u?t:3-t)&255}function D(l,n,e,u,t,r){if(e+u>l.length)throw new RangeError("Index out of range");if(e<0)throw new RangeError("Index out of range")}function q(l,n,e,u,t){return t||D(l,n,e,4,3.4028234663852886e38,-3.4028234663852886e38),$.write(l,n,e,u,23,4),e+4}function F(l,n,e,u,t){return t||D(l,n,e,8,1.7976931348623157e308,-1.7976931348623157e308),$.write(l,n,e,u,52,8),e+8}function z(l){if(l=H(l).replace(nl,""),l.length<2)return"";for(;l.length%4!==0;)l+="=";return l}function H(l){return l.trim?l.trim():l.replace(/^\s+|\s+$/g,"")}function K(l){return l<16?"0"+l.toString(16):l.toString(16)}function V(l,n){n=n||1/0;for(var e,u=l.length,t=null,r=[],i=0;i55295&&e<57344){if(!t){if(e>56319){(n-=3)>-1&&r.push(239,191,189);continue}if(i+1===u){(n-=3)>-1&&r.push(239,191,189);continue}t=e;continue}if(e<56320){(n-=3)>-1&&r.push(239,191,189),t=e;continue}e=(t-55296<<10|e-56320)+65536}else t&&(n-=3)>-1&&r.push(239,191,189);if(t=null,e<128){if((n-=1)<0)break;r.push(e)}else if(e<2048){if((n-=2)<0)break;r.push(e>>6|192,63&e|128)}else if(e<65536){if((n-=3)<0)break;r.push(e>>12|224,e>>6&63|128,63&e|128)}else{if(!(e<1114112))throw new Error("Invalid code point");if((n-=4)<0)break;r.push(e>>18|240,e>>12&63|128,e>>6&63|128,63&e|128)}}return r}function Y(l){for(var n=[],e=0;e>8,t=e%256,r.push(t),r.push(u);return r}function X(l){return J.toByteArray(z(l))}function G(l,n,e,u){for(var t=0;t=n.length||t>=l.length);++t)n[t+e]=l[t];return t}function Z(l){return l!==l}var J=l("base64-js"),$=l("ieee754"),Q=l("isarray");e.Buffer=i,e.SlowBuffer=v,e.INSPECT_MAX_BYTES=50,i.TYPED_ARRAY_SUPPORT=void 0!==n.TYPED_ARRAY_SUPPORT?n.TYPED_ARRAY_SUPPORT:u(),e.kMaxLength=t(),i.poolSize=8192,i._augment=function(l){return l.__proto__=i.prototype,l},i.from=function(l,n,e){return o(null,l,n,e)},i.TYPED_ARRAY_SUPPORT&&(i.prototype.__proto__=Uint8Array.prototype,i.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&i[Symbol.species]===i&&Object.defineProperty(i,Symbol.species,{value:null,configurable:!0})),i.alloc=function(l,n,e){return a(null,l,n,e)},i.allocUnsafe=function(l){return f(null,l)},i.allocUnsafeSlow=function(l){return f(null,l)},i.isBuffer=function(l){return!(null==l||!l._isBuffer)},i.compare=function(l,n){if(!i.isBuffer(l)||!i.isBuffer(n))throw new TypeError("Arguments must be Buffers");if(l===n)return 0;for(var e=l.length,u=n.length,t=0,r=Math.min(e,u);t0&&(l=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(l+=" ... ")),""},i.prototype.compare=function(l,n,e,u,t){if(!i.isBuffer(l))throw new TypeError("Argument must be a Buffer");if(void 0===n&&(n=0),void 0===e&&(e=l?l.length:0),void 0===u&&(u=0),void 0===t&&(t=this.length),n<0||e>l.length||u<0||t>this.length)throw new RangeError("out of range index");if(u>=t&&n>=e)return 0;if(u>=t)return-1;if(n>=e)return 1;if(n>>>=0,e>>>=0,u>>>=0,t>>>=0,this===l)return 0;for(var r=t-u,o=e-n,s=Math.min(r,o),a=this.slice(u,t),f=l.slice(n,e),c=0;ct)&&(e=t),l.length>0&&(e<0||n<0)||n>this.length)throw new RangeError("Attempt to write outside buffer bounds");u||(u="utf8");for(var r=!1;;)switch(u){case"hex":return k(this,l,n,e);case"utf8":case"utf-8":return S(this,l,n,e);case"ascii":return E(this,l,n,e);case"latin1":case"binary":return M(this,l,n,e);case"base64":return I(this,l,n,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return j(this,l,n,e);default:if(r)throw new TypeError("Unknown encoding: "+u);u=(""+u).toLowerCase(),r=!0}},i.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var ll=4096;i.prototype.slice=function(l,n){var e=this.length;l=~~l,n=void 0===n?e:~~n,l<0?(l+=e,l<0&&(l=0)):l>e&&(l=e),n<0?(n+=e,n<0&&(n=0)):n>e&&(n=e),n0&&(t*=256);)u+=this[l+--n]*t;return u},i.prototype.readUInt8=function(l,n){return n||P(l,1,this.length),this[l]},i.prototype.readUInt16LE=function(l,n){return n||P(l,2,this.length),this[l]|this[l+1]<<8},i.prototype.readUInt16BE=function(l,n){return n||P(l,2,this.length),this[l]<<8|this[l+1]},i.prototype.readUInt32LE=function(l,n){return n||P(l,4,this.length),(this[l]|this[l+1]<<8|this[l+2]<<16)+16777216*this[l+3]},i.prototype.readUInt32BE=function(l,n){return n||P(l,4,this.length),16777216*this[l]+(this[l+1]<<16|this[l+2]<<8|this[l+3])},i.prototype.readIntLE=function(l,n,e){l=0|l,n=0|n,e||P(l,n,this.length);for(var u=this[l],t=1,r=0;++r=t&&(u-=Math.pow(2,8*n)),u},i.prototype.readIntBE=function(l,n,e){l=0|l,n=0|n,e||P(l,n,this.length);for(var u=n,t=1,r=this[l+--u];u>0&&(t*=256);)r+=this[l+--u]*t;return t*=128,r>=t&&(r-=Math.pow(2,8*n)),r},i.prototype.readInt8=function(l,n){return n||P(l,1,this.length),128&this[l]?(255-this[l]+1)*-1:this[l]},i.prototype.readInt16LE=function(l,n){n||P(l,2,this.length);var e=this[l]|this[l+1]<<8;return 32768&e?4294901760|e:e},i.prototype.readInt16BE=function(l,n){n||P(l,2,this.length);var e=this[l+1]|this[l]<<8;return 32768&e?4294901760|e:e},i.prototype.readInt32LE=function(l,n){return n||P(l,4,this.length),this[l]|this[l+1]<<8|this[l+2]<<16|this[l+3]<<24},i.prototype.readInt32BE=function(l,n){return n||P(l,4,this.length),this[l]<<24|this[l+1]<<16|this[l+2]<<8|this[l+3]},i.prototype.readFloatLE=function(l,n){return n||P(l,4,this.length),$.read(this,l,!0,23,4)},i.prototype.readFloatBE=function(l,n){return n||P(l,4,this.length),$.read(this,l,!1,23,4)},i.prototype.readDoubleLE=function(l,n){return n||P(l,8,this.length),$.read(this,l,!0,52,8)},i.prototype.readDoubleBE=function(l,n){return n||P(l,8,this.length),$.read(this,l,!1,52,8)},i.prototype.writeUIntLE=function(l,n,e,u){if(l=+l,n=0|n,e=0|e,!u){var t=Math.pow(2,8*e)-1;U(this,l,n,e,t,0)}var r=1,i=0;for(this[n]=255&l;++i=0&&(i*=256);)this[n+r]=l/i&255;return n+e},i.prototype.writeUInt8=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,1,255,0),i.TYPED_ARRAY_SUPPORT||(l=Math.floor(l)),this[n]=255&l,n+1},i.prototype.writeUInt16LE=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[n]=255&l,this[n+1]=l>>>8):N(this,l,n,!0),n+2},i.prototype.writeUInt16BE=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[n]=l>>>8,this[n+1]=255&l):N(this,l,n,!1),n+2},i.prototype.writeUInt32LE=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[n+3]=l>>>24,this[n+2]=l>>>16,this[n+1]=l>>>8,this[n]=255&l):L(this,l,n,!0),n+4},i.prototype.writeUInt32BE=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[n]=l>>>24,this[n+1]=l>>>16,this[n+2]=l>>>8,this[n+3]=255&l):L(this,l,n,!1),n+4},i.prototype.writeIntLE=function(l,n,e,u){if(l=+l,n=0|n,!u){var t=Math.pow(2,8*e-1);U(this,l,n,e,t-1,-t)}var r=0,i=1,o=0;for(this[n]=255&l;++r>0)-o&255;return n+e},i.prototype.writeIntBE=function(l,n,e,u){if(l=+l,n=0|n,!u){var t=Math.pow(2,8*e-1);U(this,l,n,e,t-1,-t)}var r=e-1,i=1,o=0;for(this[n+r]=255&l;--r>=0&&(i*=256);)l<0&&0===o&&0!==this[n+r+1]&&(o=1),this[n+r]=(l/i>>0)-o&255;return n+e},i.prototype.writeInt8=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,1,127,-128),i.TYPED_ARRAY_SUPPORT||(l=Math.floor(l)),l<0&&(l=255+l+1),this[n]=255&l,n+1},i.prototype.writeInt16LE=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[n]=255&l,this[n+1]=l>>>8):N(this,l,n,!0),n+2},i.prototype.writeInt16BE=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[n]=l>>>8,this[n+1]=255&l):N(this,l,n,!1),n+2},i.prototype.writeInt32LE=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,4,2147483647,-2147483648),i.TYPED_ARRAY_SUPPORT?(this[n]=255&l,this[n+1]=l>>>8,this[n+2]=l>>>16,this[n+3]=l>>>24):L(this,l,n,!0),n+4},i.prototype.writeInt32BE=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,4,2147483647,-2147483648),l<0&&(l=4294967295+l+1),i.TYPED_ARRAY_SUPPORT?(this[n]=l>>>24,this[n+1]=l>>>16,this[n+2]=l>>>8,this[n+3]=255&l):L(this,l,n,!1),n+4},i.prototype.writeFloatLE=function(l,n,e){return q(this,l,n,!0,e)},i.prototype.writeFloatBE=function(l,n,e){return q(this,l,n,!1,e)},i.prototype.writeDoubleLE=function(l,n,e){return F(this,l,n,!0,e)},i.prototype.writeDoubleBE=function(l,n,e){return F(this,l,n,!1,e)},i.prototype.copy=function(l,n,e,u){if(e||(e=0),u||0===u||(u=this.length),n>=l.length&&(n=l.length),n||(n=0),u>0&&u=this.length)throw new RangeError("sourceStart out of bounds");if(u<0)throw new RangeError("sourceEnd out of bounds");u>this.length&&(u=this.length),l.length-n=0;--t)l[t+n]=this[t+e];else if(r<1e3||!i.TYPED_ARRAY_SUPPORT)for(t=0;t>>=0,e=void 0===e?this.length:e>>>0,l||(l=0);var r;if("number"==typeof l)for(r=n;rf;)if(o=s[f++],o!=o)return!0}else for(;a>f;f++)if((l||f in s)&&s[f]===e)return l||f||0;return!l&&-1}}},{"./_to-index":150,"./_to-iobject":152,"./_to-length":153}],87:[function(l,n,e){var u=l("./_ctx"),t=l("./_iobject"),r=l("./_to-object"),i=l("./_to-length"),o=l("./_array-species-create");n.exports=function(l,n){var e=1==l,s=2==l,a=3==l,f=4==l,c=6==l,h=5==l||c,d=n||o;return function(n,o,p){for(var b,v,_=r(n),y=t(_),m=u(o,p,3),g=i(y.length),w=0,k=e?d(n,g):s?d(n,0):void 0;g>w;w++)if((h||w in y)&&(b=y[w],v=m(b,w,_),l))if(e)k[w]=v;else if(v)switch(l){case 3:return!0;case 5:return b;case 6:return w;case 2:k.push(b)}else if(f)return!1;return c?-1:a||f?f:k}}},{"./_array-species-create":89,"./_ctx":97,"./_iobject":112,"./_to-length":153,"./_to-object":154}],88:[function(l,n,e){var u=l("./_is-object"),t=l("./_is-array"),r=l("./_wks")("species");n.exports=function(l){var n;return t(l)&&(n=l.constructor,"function"!=typeof n||n!==Array&&!t(n.prototype)||(n=void 0),u(n)&&(n=n[r],null===n&&(n=void 0))),void 0===n?Array:n}},{"./_is-array":114,"./_is-object":115,"./_wks":159}],89:[function(l,n,e){var u=l("./_array-species-constructor");n.exports=function(l,n){return new(u(l))(n)}},{"./_array-species-constructor":88}],90:[function(l,n,e){var u=l("./_cof"),t=l("./_wks")("toStringTag"),r="Arguments"==u(function(){return arguments}()),i=function(l,n){try{return l[n]}catch(e){}};n.exports=function(l){var n,e,o;return void 0===l?"Undefined":null===l?"Null":"string"==typeof(e=i(n=Object(l),t))?e:r?u(n):"Object"==(o=u(n))&&"function"==typeof n.callee?"Arguments":o}},{"./_cof":91,"./_wks":159}],91:[function(l,n,e){var u={}.toString;n.exports=function(l){return u.call(l).slice(8,-1)}},{}],92:[function(l,n,e){"use strict";var u=l("./_object-dp").f,t=l("./_object-create"),r=l("./_redefine-all"),i=l("./_ctx"),o=l("./_an-instance"),s=l("./_defined"),a=l("./_for-of"),f=l("./_iter-define"),c=l("./_iter-step"),h=l("./_set-species"),d=l("./_descriptors"),p=l("./_meta").fastKey,b=d?"_s":"size",v=function(l,n){var e,u=p(n);if("F"!==u)return l._i[u];for(e=l._f;e;e=e.n)if(e.k==n)return e};n.exports={getConstructor:function(l,n,e,f){var c=l(function(l,u){o(l,c,n,"_i"),l._i=t(null),l._f=void 0,l._l=void 0,l[b]=0,void 0!=u&&a(u,e,l[f],l)});return r(c.prototype,{clear:function(){for(var l=this,n=l._i,e=l._f;e;e=e.n)e.r=!0,e.p&&(e.p=e.p.n=void 0),delete n[e.i];l._f=l._l=void 0,l[b]=0},"delete":function(l){var n=this,e=v(n,l);if(e){var u=e.n,t=e.p;delete n._i[e.i],e.r=!0,t&&(t.n=u),u&&(u.p=t),n._f==e&&(n._f=u),n._l==e&&(n._l=t),n[b]--}return!!e},forEach:function(l){o(this,c,"forEach");for(var n,e=i(l,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(e(n.v,n.k,this);n&&n.r;)n=n.p},has:function(l){return!!v(this,l)}}),d&&u(c.prototype,"size",{get:function(){return s(this[b])}}),c},def:function(l,n,e){var u,t,r=v(l,n);return r?r.v=e:(l._l=r={i:t=p(n,!0),k:n,v:e,p:u=l._l,n:void 0,r:!1},l._f||(l._f=r),u&&(u.n=r),l[b]++,"F"!==t&&(l._i[t]=r)),l},getEntry:v,setStrong:function(l,n,e){f(l,n,function(l,n){this._t=l,this._k=n,this._l=void 0},function(){for(var l=this,n=l._k,e=l._l;e&&e.r;)e=e.p;return l._t&&(l._l=e=e?e.n:l._t._f)?"keys"==n?c(0,e.k):"values"==n?c(0,e.v):c(0,[e.k,e.v]):(l._t=void 0,c(1))},e?"entries":"values",!e,!0),h(n)}}},{"./_an-instance":83,"./_ctx":97,"./_defined":98,"./_descriptors":99,"./_for-of":105,"./_iter-define":118,"./_iter-step":120,"./_meta":124,"./_object-create":127,"./_object-dp":128,"./_redefine-all":140,"./_set-species":143}],93:[function(l,n,e){var u=l("./_classof"),t=l("./_array-from-iterable");n.exports=function(l){return function(){if(u(this)!=l)throw TypeError(l+"#toJSON isn't generic");return t(this)}}},{"./_array-from-iterable":85,"./_classof":90}],94:[function(l,n,e){"use strict";var u=l("./_global"),t=l("./_export"),r=l("./_meta"),i=l("./_fails"),o=l("./_hide"),s=l("./_redefine-all"),a=l("./_for-of"),f=l("./_an-instance"),c=l("./_is-object"),h=l("./_set-to-string-tag"),d=l("./_object-dp").f,p=l("./_array-methods")(0),b=l("./_descriptors");n.exports=function(l,n,e,v,_,y){var m=u[l],g=m,w=_?"set":"add",k=g&&g.prototype,S={};return b&&"function"==typeof g&&(y||k.forEach&&!i(function(){(new g).entries().next()}))?(g=n(function(n,e){f(n,g,l,"_c"),n._c=new m,void 0!=e&&a(e,_,n[w],n)}),p("add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON".split(","),function(l){var n="add"==l||"set"==l;l in k&&(!y||"clear"!=l)&&o(g.prototype,l,function(e,u){if(f(this,g,l),!n&&y&&!c(e))return"get"==l&&void 0;var t=this._c[l](0===e?0:e,u);return n?this:t})}),"size"in k&&d(g.prototype,"size",{get:function(){return this._c.size}})):(g=v.getConstructor(n,l,_,w),s(g.prototype,e),r.NEED=!0),h(g,l),S[l]=g,t(t.G+t.W+t.F,S),y||v.setStrong(g,l,_),g}},{"./_an-instance":83,"./_array-methods":87,"./_descriptors":99,"./_export":103,"./_fails":104,"./_for-of":105,"./_global":106,"./_hide":108,"./_is-object":115,"./_meta":124,"./_object-dp":128,"./_redefine-all":140,"./_set-to-string-tag":144}],95:[function(l,n,e){var u=n.exports={version:"2.4.0"};"number"==typeof __e&&(__e=u)},{}],96:[function(l,n,e){"use strict";var u=l("./_object-dp"),t=l("./_property-desc");n.exports=function(l,n,e){n in l?u.f(l,n,t(0,e)):l[n]=e}},{"./_object-dp":128,"./_property-desc":139}],97:[function(l,n,e){var u=l("./_a-function");n.exports=function(l,n,e){if(u(l),void 0===n)return l;switch(e){case 1:return function(e){return l.call(n,e)};case 2:return function(e,u){return l.call(n,e,u)};case 3:return function(e,u,t){return l.call(n,e,u,t)}}return function(){return l.apply(n,arguments)}}},{"./_a-function":81}],98:[function(l,n,e){n.exports=function(l){if(void 0==l)throw TypeError("Can't call method on "+l);return l}},{}],99:[function(l,n,e){n.exports=!l("./_fails")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{"./_fails":104}],100:[function(l,n,e){var u=l("./_is-object"),t=l("./_global").document,r=u(t)&&u(t.createElement);n.exports=function(l){return r?t.createElement(l):{}}},{"./_global":106,"./_is-object":115}],101:[function(l,n,e){n.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},{}],102:[function(l,n,e){var u=l("./_object-keys"),t=l("./_object-gops"),r=l("./_object-pie");n.exports=function(l){var n=u(l),e=t.f;if(e)for(var i,o=e(l),s=r.f,a=0;o.length>a;)s.call(l,i=o[a++])&&n.push(i);return n}},{"./_object-gops":133,"./_object-keys":136,"./_object-pie":137}],103:[function(l,n,e){var u=l("./_global"),t=l("./_core"),r=l("./_ctx"),i=l("./_hide"),o="prototype",s=function(l,n,e){var a,f,c,h=l&s.F,d=l&s.G,p=l&s.S,b=l&s.P,v=l&s.B,_=l&s.W,y=d?t:t[n]||(t[n]={}),m=y[o],g=d?u:p?u[n]:(u[n]||{})[o];d&&(e=n);for(a in e)f=!h&&g&&void 0!==g[a],f&&a in y||(c=f?g[a]:e[a],y[a]=d&&"function"!=typeof g[a]?e[a]:v&&f?r(c,u):_&&g[a]==c?function(l){var n=function(n,e,u){if(this instanceof l){switch(arguments.length){case 0:return new l;case 1:return new l(n);case 2:return new l(n,e)}return new l(n,e,u)}return l.apply(this,arguments)};return n[o]=l[o],n}(c):b&&"function"==typeof c?r(Function.call,c):c,b&&((y.virtual||(y.virtual={}))[a]=c,l&s.R&&m&&!m[a]&&i(m,a,c)))};s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,n.exports=s},{"./_core":95,"./_ctx":97,"./_global":106,"./_hide":108}],104:[function(l,n,e){n.exports=function(l){try{return!!l()}catch(n){return!0}}},{}],105:[function(l,n,e){var u=l("./_ctx"),t=l("./_iter-call"),r=l("./_is-array-iter"),i=l("./_an-object"),o=l("./_to-length"),s=l("./core.get-iterator-method"),a={},f={},e=n.exports=function(l,n,e,c,h){var d,p,b,v,_=h?function(){return l}:s(l),y=u(e,c,n?2:1),m=0;if("function"!=typeof _)throw TypeError(l+" is not iterable!");if(r(_)){for(d=o(l.length);d>m;m++)if(v=n?y(i(p=l[m])[0],p[1]):y(l[m]),v===a||v===f)return v}else for(b=_.call(l);!(p=b.next()).done;)if(v=t(b,y,p.value,n),v===a||v===f)return v};e.BREAK=a,e.RETURN=f},{"./_an-object":84,"./_ctx":97,"./_is-array-iter":113,"./_iter-call":116,"./_to-length":153,"./core.get-iterator-method":160}],106:[function(l,n,e){var u=n.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=u)},{}],107:[function(l,n,e){var u={}.hasOwnProperty;n.exports=function(l,n){return u.call(l,n)}},{}],108:[function(l,n,e){var u=l("./_object-dp"),t=l("./_property-desc");n.exports=l("./_descriptors")?function(l,n,e){return u.f(l,n,t(1,e))}:function(l,n,e){return l[n]=e,l}},{"./_descriptors":99,"./_object-dp":128,"./_property-desc":139}],109:[function(l,n,e){n.exports=l("./_global").document&&document.documentElement},{"./_global":106}],110:[function(l,n,e){n.exports=!l("./_descriptors")&&!l("./_fails")(function(){return 7!=Object.defineProperty(l("./_dom-create")("div"),"a",{get:function(){return 7}}).a})},{"./_descriptors":99,"./_dom-create":100,"./_fails":104}],111:[function(l,n,e){n.exports=function(l,n,e){var u=void 0===e;switch(n.length){case 0:return u?l():l.call(e);case 1:return u?l(n[0]):l.call(e,n[0]);case 2:return u?l(n[0],n[1]):l.call(e,n[0],n[1]);case 3:return u?l(n[0],n[1],n[2]):l.call(e,n[0],n[1],n[2]);case 4:return u?l(n[0],n[1],n[2],n[3]):l.call(e,n[0],n[1],n[2],n[3])}return l.apply(e,n)}},{}],112:[function(l,n,e){var u=l("./_cof");n.exports=Object("z").propertyIsEnumerable(0)?Object:function(l){return"String"==u(l)?l.split(""):Object(l)}},{"./_cof":91}],113:[function(l,n,e){var u=l("./_iterators"),t=l("./_wks")("iterator"),r=Array.prototype;n.exports=function(l){return void 0!==l&&(u.Array===l||r[t]===l)}},{"./_iterators":121,"./_wks":159}],114:[function(l,n,e){var u=l("./_cof");n.exports=Array.isArray||function(l){return"Array"==u(l)}},{"./_cof":91}],115:[function(l,n,e){n.exports=function(l){return"object"==typeof l?null!==l:"function"==typeof l}},{}],116:[function(l,n,e){var u=l("./_an-object");n.exports=function(l,n,e,t){try{return t?n(u(e)[0],e[1]):n(e)}catch(r){var i=l["return"];throw void 0!==i&&u(i.call(l)),r}}},{"./_an-object":84}],117:[function(l,n,e){"use strict";var u=l("./_object-create"),t=l("./_property-desc"),r=l("./_set-to-string-tag"),i={};l("./_hide")(i,l("./_wks")("iterator"),function(){return this}),n.exports=function(l,n,e){l.prototype=u(i,{next:t(1,e)}),r(l,n+" Iterator")}},{"./_hide":108,"./_object-create":127,"./_property-desc":139,"./_set-to-string-tag":144,"./_wks":159}],118:[function(l,n,e){"use strict";var u=l("./_library"),t=l("./_export"),r=l("./_redefine"),i=l("./_hide"),o=l("./_has"),s=l("./_iterators"),a=l("./_iter-create"),f=l("./_set-to-string-tag"),c=l("./_object-gpo"),h=l("./_wks")("iterator"),d=!([].keys&&"next"in[].keys()),p="@@iterator",b="keys",v="values",_=function(){return this};n.exports=function(l,n,e,y,m,g,w){a(e,n,y);var k,S,E,M=function(l){if(!d&&l in C)return C[l];switch(l){case b:return function(){return new e(this,l)};case v:return function(){return new e(this,l)}}return function(){return new e(this,l)}},I=n+" Iterator",j=m==v,A=!1,C=l.prototype,x=C[h]||C[p]||m&&C[m],R=x||M(m),B=m?j?M("entries"):R:void 0,T="Array"==n?C.entries||x:x;if(T&&(E=c(T.call(new l)),E!==Object.prototype&&(f(E,I,!0),u||o(E,h)||i(E,h,_))),j&&x&&x.name!==v&&(A=!0,R=function(){return x.call(this)}),u&&!w||!d&&!A&&C[h]||i(C,h,R),s[n]=R,s[I]=_,m)if(k={values:j?R:M(v),keys:g?R:M(b),entries:B},w)for(S in k)S in C||r(C,S,k[S]);else t(t.P+t.F*(d||A),n,k);return k}},{"./_export":103,"./_has":107,"./_hide":108,"./_iter-create":117,"./_iterators":121,"./_library":123,"./_object-gpo":134,"./_redefine":141,"./_set-to-string-tag":144,"./_wks":159}],119:[function(l,n,e){var u=l("./_wks")("iterator"),t=!1;try{var r=[7][u]();r["return"]=function(){t=!0},Array.from(r,function(){throw 2})}catch(i){}n.exports=function(l,n){if(!n&&!t)return!1;var e=!1;try{var r=[7],i=r[u]();i.next=function(){return{done:e=!0}},r[u]=function(){return i},l(r)}catch(o){}return e}},{"./_wks":159}],120:[function(l,n,e){n.exports=function(l,n){return{value:n,done:!!l}}},{}],121:[function(l,n,e){n.exports={}},{}],122:[function(l,n,e){var u=l("./_object-keys"),t=l("./_to-iobject");n.exports=function(l,n){for(var e,r=t(l),i=u(r),o=i.length,s=0;o>s;)if(r[e=i[s++]]===n)return e}},{"./_object-keys":136,"./_to-iobject":152}],123:[function(l,n,e){n.exports=!0},{}],124:[function(l,n,e){var u=l("./_uid")("meta"),t=l("./_is-object"),r=l("./_has"),i=l("./_object-dp").f,o=0,s=Object.isExtensible||function(){return!0},a=!l("./_fails")(function(){return s(Object.preventExtensions({}))}),f=function(l){i(l,u,{value:{i:"O"+ ++o,w:{}}})},c=function(l,n){if(!t(l))return"symbol"==typeof l?l:("string"==typeof l?"S":"P")+l;if(!r(l,u)){if(!s(l))return"F";if(!n)return"E";f(l)}return l[u].i},h=function(l,n){if(!r(l,u)){if(!s(l))return!0;if(!n)return!1;f(l)}return l[u].w},d=function(l){return a&&p.NEED&&s(l)&&!r(l,u)&&f(l),l},p=n.exports={KEY:u,NEED:!1,fastKey:c,getWeak:h,onFreeze:d}},{"./_fails":104,"./_has":107,"./_is-object":115,"./_object-dp":128,"./_uid":156}],125:[function(l,n,e){var u=l("./_global"),t=l("./_task").set,r=u.MutationObserver||u.WebKitMutationObserver,i=u.process,o=u.Promise,s="process"==l("./_cof")(i);n.exports=function(){var l,n,e,a=function(){var u,t;for(s&&(u=i.domain)&&u.exit();l;){t=l.fn,l=l.next;try{t()}catch(r){throw l?e():n=void 0,r}}n=void 0,u&&u.enter()};if(s)e=function(){i.nextTick(a)};else if(r){var f=!0,c=document.createTextNode("");new r(a).observe(c,{characterData:!0}),e=function(){c.data=f=!f}}else if(o&&o.resolve){var h=o.resolve();e=function(){h.then(a)}}else e=function(){t.call(u,a)};return function(u){var t={fn:u,next:void 0};n&&(n.next=t),l||(l=t,e()),n=t}}},{"./_cof":91,"./_global":106,"./_task":149}],126:[function(l,n,e){"use strict";var u=l("./_object-keys"),t=l("./_object-gops"),r=l("./_object-pie"),i=l("./_to-object"),o=l("./_iobject"),s=Object.assign;n.exports=!s||l("./_fails")(function(){var l={},n={},e=Symbol(),u="abcdefghijklmnopqrst";return l[e]=7,u.split("").forEach(function(l){n[l]=l}),7!=s({},l)[e]||Object.keys(s({},n)).join("")!=u})?function(l,n){for(var e=i(l),s=arguments.length,a=1,f=t.f,c=r.f;s>a;)for(var h,d=o(arguments[a++]),p=f?u(d).concat(f(d)):u(d),b=p.length,v=0;b>v;)c.call(d,h=p[v++])&&(e[h]=d[h]);return e}:s},{"./_fails":104,"./_iobject":112,"./_object-gops":133,"./_object-keys":136,"./_object-pie":137,"./_to-object":154}],127:[function(l,n,e){var u=l("./_an-object"),t=l("./_object-dps"),r=l("./_enum-bug-keys"),i=l("./_shared-key")("IE_PROTO"),o=function(){},s="prototype",a=function(){var n,e=l("./_dom-create")("iframe"),u=r.length,t="<",i=">";for(e.style.display="none",l("./_html").appendChild(e),e.src="javascript:",n=e.contentWindow.document,n.open(),n.write(t+"script"+i+"document.F=Object"+t+"/script"+i),n.close(),a=n.F;u--;)delete a[s][r[u]];return a()};n.exports=Object.create||function(l,n){var e;return null!==l?(o[s]=u(l),e=new o,o[s]=null,e[i]=l):e=a(),void 0===n?e:t(e,n)}},{"./_an-object":84,"./_dom-create":100,"./_enum-bug-keys":101,"./_html":109,"./_object-dps":129,"./_shared-key":145}],128:[function(l,n,e){var u=l("./_an-object"),t=l("./_ie8-dom-define"),r=l("./_to-primitive"),i=Object.defineProperty;e.f=l("./_descriptors")?Object.defineProperty:function(l,n,e){if(u(l),n=r(n,!0),u(e),t)try{return i(l,n,e)}catch(o){}if("get"in e||"set"in e)throw TypeError("Accessors not supported!");return"value"in e&&(l[n]=e.value),l}},{"./_an-object":84,"./_descriptors":99,"./_ie8-dom-define":110,"./_to-primitive":155}],129:[function(l,n,e){var u=l("./_object-dp"),t=l("./_an-object"),r=l("./_object-keys");n.exports=l("./_descriptors")?Object.defineProperties:function(l,n){t(l);for(var e,i=r(n),o=i.length,s=0;o>s;)u.f(l,e=i[s++],n[e]);return l}},{"./_an-object":84,"./_descriptors":99,"./_object-dp":128,"./_object-keys":136}],130:[function(l,n,e){var u=l("./_object-pie"),t=l("./_property-desc"),r=l("./_to-iobject"),i=l("./_to-primitive"),o=l("./_has"),s=l("./_ie8-dom-define"),a=Object.getOwnPropertyDescriptor;e.f=l("./_descriptors")?a:function(l,n){if(l=r(l),n=i(n,!0),s)try{return a(l,n)}catch(e){}if(o(l,n))return t(!u.f.call(l,n),l[n])}},{"./_descriptors":99,"./_has":107,"./_ie8-dom-define":110,"./_object-pie":137,"./_property-desc":139,"./_to-iobject":152,"./_to-primitive":155}],131:[function(l,n,e){var u=l("./_to-iobject"),t=l("./_object-gopn").f,r={}.toString,i="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],o=function(l){try{return t(l)}catch(n){return i.slice()}};n.exports.f=function(l){return i&&"[object Window]"==r.call(l)?o(l):t(u(l))}},{"./_object-gopn":132,"./_to-iobject":152}],132:[function(l,n,e){var u=l("./_object-keys-internal"),t=l("./_enum-bug-keys").concat("length","prototype");e.f=Object.getOwnPropertyNames||function(l){return u(l,t)}},{"./_enum-bug-keys":101,"./_object-keys-internal":135}],133:[function(l,n,e){e.f=Object.getOwnPropertySymbols},{}],134:[function(l,n,e){var u=l("./_has"),t=l("./_to-object"),r=l("./_shared-key")("IE_PROTO"),i=Object.prototype;n.exports=Object.getPrototypeOf||function(l){return l=t(l),u(l,r)?l[r]:"function"==typeof l.constructor&&l instanceof l.constructor?l.constructor.prototype:l instanceof Object?i:null}},{"./_has":107,"./_shared-key":145,"./_to-object":154}],135:[function(l,n,e){var u=l("./_has"),t=l("./_to-iobject"),r=l("./_array-includes")(!1),i=l("./_shared-key")("IE_PROTO");n.exports=function(l,n){var e,o=t(l),s=0,a=[];for(e in o)e!=i&&u(o,e)&&a.push(e);for(;n.length>s;)u(o,e=n[s++])&&(~r(a,e)||a.push(e));return a}},{"./_array-includes":86,"./_has":107,"./_shared-key":145,"./_to-iobject":152}],136:[function(l,n,e){var u=l("./_object-keys-internal"),t=l("./_enum-bug-keys");n.exports=Object.keys||function(l){return u(l,t)}},{"./_enum-bug-keys":101,"./_object-keys-internal":135}],137:[function(l,n,e){e.f={}.propertyIsEnumerable},{}],138:[function(l,n,e){var u=l("./_export"),t=l("./_core"),r=l("./_fails");n.exports=function(l,n){var e=(t.Object||{})[l]||Object[l],i={};i[l]=n(e),u(u.S+u.F*r(function(){e(1)}),"Object",i)}},{"./_core":95,"./_export":103,"./_fails":104}],139:[function(l,n,e){n.exports=function(l,n){return{enumerable:!(1&l),configurable:!(2&l),writable:!(4&l),value:n}}},{}],140:[function(l,n,e){var u=l("./_hide");n.exports=function(l,n,e){for(var t in n)e&&l[t]?l[t]=n[t]:u(l,t,n[t]);return l}},{"./_hide":108}],141:[function(l,n,e){n.exports=l("./_hide")},{"./_hide":108}],142:[function(l,n,e){var u=l("./_is-object"),t=l("./_an-object"),r=function(l,n){if(t(l),!u(n)&&null!==n)throw TypeError(n+": can't set as prototype!")};n.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(n,e,u){try{u=l("./_ctx")(Function.call,l("./_object-gopd").f(Object.prototype,"__proto__").set,2),u(n,[]),e=!(n instanceof Array)}catch(t){e=!0}return function(l,n){return r(l,n),e?l.__proto__=n:u(l,n),l}}({},!1):void 0),check:r}},{"./_an-object":84,"./_ctx":97,"./_is-object":115,"./_object-gopd":130}],143:[function(l,n,e){"use strict";var u=l("./_global"),t=l("./_core"),r=l("./_object-dp"),i=l("./_descriptors"),o=l("./_wks")("species");n.exports=function(l){var n="function"==typeof t[l]?t[l]:u[l];i&&n&&!n[o]&&r.f(n,o,{configurable:!0,get:function(){return this}})}},{"./_core":95,"./_descriptors":99,"./_global":106,"./_object-dp":128,"./_wks":159}],144:[function(l,n,e){var u=l("./_object-dp").f,t=l("./_has"),r=l("./_wks")("toStringTag");n.exports=function(l,n,e){l&&!t(l=e?l:l.prototype,r)&&u(l,r,{configurable:!0,value:n})}},{"./_has":107,"./_object-dp":128,"./_wks":159}],145:[function(l,n,e){var u=l("./_shared")("keys"),t=l("./_uid");n.exports=function(l){return u[l]||(u[l]=t(l))}},{"./_shared":146,"./_uid":156}],146:[function(l,n,e){var u=l("./_global"),t="__core-js_shared__",r=u[t]||(u[t]={});n.exports=function(l){return r[l]||(r[l]={})}},{"./_global":106}],147:[function(l,n,e){var u=l("./_an-object"),t=l("./_a-function"),r=l("./_wks")("species");n.exports=function(l,n){var e,i=u(l).constructor;return void 0===i||void 0==(e=u(i)[r])?n:t(e)}},{"./_a-function":81,"./_an-object":84,"./_wks":159}],148:[function(l,n,e){var u=l("./_to-integer"),t=l("./_defined");n.exports=function(l){return function(n,e){var r,i,o=String(t(n)),s=u(e),a=o.length;return s<0||s>=a?l?"":void 0:(r=o.charCodeAt(s),r<55296||r>56319||s+1===a||(i=o.charCodeAt(s+1))<56320||i>57343?l?o.charAt(s):r:l?o.slice(s,s+2):(r-55296<<10)+(i-56320)+65536)}}},{"./_defined":98,"./_to-integer":151}],149:[function(l,n,e){var u,t,r,i=l("./_ctx"),o=l("./_invoke"),s=l("./_html"),a=l("./_dom-create"),f=l("./_global"),c=f.process,h=f.setImmediate,d=f.clearImmediate,p=f.MessageChannel,b=0,v={},_="onreadystatechange",y=function(){var l=+this;if(v.hasOwnProperty(l)){var n=v[l];delete v[l],n()}},m=function(l){y.call(l.data)};h&&d||(h=function(l){for(var n=[],e=1;arguments.length>e;)n.push(arguments[e++]);return v[++b]=function(){o("function"==typeof l?l:Function(l),n)},u(b),b},d=function(l){delete v[l]},"process"==l("./_cof")(c)?u=function(l){c.nextTick(i(y,l,1))}:p?(t=new p,r=t.port2,t.port1.onmessage=m,u=i(r.postMessage,r,1)):f.addEventListener&&"function"==typeof postMessage&&!f.importScripts?(u=function(l){f.postMessage(l+"","*")},f.addEventListener("message",m,!1)):u=_ in a("script")?function(l){s.appendChild(a("script"))[_]=function(){s.removeChild(this),y.call(l)}}:function(l){setTimeout(i(y,l,1),0)}),n.exports={set:h,clear:d}},{"./_cof":91,"./_ctx":97,"./_dom-create":100,"./_global":106,"./_html":109,"./_invoke":111}],150:[function(l,n,e){var u=l("./_to-integer"),t=Math.max,r=Math.min;n.exports=function(l,n){return l=u(l),l<0?t(l+n,0):r(l,n)}},{"./_to-integer":151}],151:[function(l,n,e){var u=Math.ceil,t=Math.floor;n.exports=function(l){return isNaN(l=+l)?0:(l>0?t:u)(l)}},{}],152:[function(l,n,e){var u=l("./_iobject"),t=l("./_defined");n.exports=function(l){return u(t(l))}},{"./_defined":98,"./_iobject":112}],153:[function(l,n,e){var u=l("./_to-integer"),t=Math.min;n.exports=function(l){return l>0?t(u(l),9007199254740991):0}},{"./_to-integer":151}],154:[function(l,n,e){var u=l("./_defined");n.exports=function(l){return Object(u(l))}},{"./_defined":98}],155:[function(l,n,e){var u=l("./_is-object");n.exports=function(l,n){if(!u(l))return l;var e,t;if(n&&"function"==typeof(e=l.toString)&&!u(t=e.call(l)))return t;if("function"==typeof(e=l.valueOf)&&!u(t=e.call(l)))return t;if(!n&&"function"==typeof(e=l.toString)&&!u(t=e.call(l)))return t;throw TypeError("Can't convert object to primitive value")}},{"./_is-object":115}],156:[function(l,n,e){var u=0,t=Math.random();n.exports=function(l){return"Symbol(".concat(void 0===l?"":l,")_",(++u+t).toString(36))}},{}],157:[function(l,n,e){var u=l("./_global"),t=l("./_core"),r=l("./_library"),i=l("./_wks-ext"),o=l("./_object-dp").f;n.exports=function(l){var n=t.Symbol||(t.Symbol=r?{}:u.Symbol||{});"_"==l.charAt(0)||l in n||o(n,l,{value:i.f(l)})}},{"./_core":95,"./_global":106,"./_library":123,"./_object-dp":128,"./_wks-ext":158}],158:[function(l,n,e){e.f=l("./_wks")},{"./_wks":159}],159:[function(l,n,e){var u=l("./_shared")("wks"),t=l("./_uid"),r=l("./_global").Symbol,i="function"==typeof r,o=n.exports=function(l){return u[l]||(u[l]=i&&r[l]||(i?r:t)("Symbol."+l))};o.store=u},{"./_global":106,"./_shared":146,"./_uid":156}],160:[function(l,n,e){var u=l("./_classof"),t=l("./_wks")("iterator"),r=l("./_iterators");n.exports=l("./_core").getIteratorMethod=function(l){if(void 0!=l)return l[t]||l["@@iterator"]||r[u(l)]}},{"./_classof":90,"./_core":95,"./_iterators":121,"./_wks":159}],161:[function(l,n,e){"use strict";var u=l("./_ctx"),t=l("./_export"),r=l("./_to-object"),i=l("./_iter-call"),o=l("./_is-array-iter"),s=l("./_to-length"),a=l("./_create-property"),f=l("./core.get-iterator-method");t(t.S+t.F*!l("./_iter-detect")(function(l){Array.from(l)}),"Array",{from:function(l){var n,e,t,c,h=r(l),d="function"==typeof this?this:Array,p=arguments.length,b=p>1?arguments[1]:void 0,v=void 0!==b,_=0,y=f(h);if(v&&(b=u(b,p>2?arguments[2]:void 0,2)),void 0==y||d==Array&&o(y))for(n=s(h.length),e=new d(n);n>_;_++)a(e,_,v?b(h[_],_):h[_]);else for(c=y.call(h),e=new d;!(t=c.next()).done;_++)a(e,_,v?i(c,b,[t.value,_],!0):t.value);return e.length=_,e}})},{"./_create-property":96,"./_ctx":97,"./_export":103,"./_is-array-iter":113,"./_iter-call":116,"./_iter-detect":119,"./_to-length":153,"./_to-object":154,"./core.get-iterator-method":160}],162:[function(l,n,e){"use strict";var u=l("./_add-to-unscopables"),t=l("./_iter-step"),r=l("./_iterators"),i=l("./_to-iobject");n.exports=l("./_iter-define")(Array,"Array",function(l,n){this._t=i(l),this._i=0,this._k=n},function(){var l=this._t,n=this._k,e=this._i++;return!l||e>=l.length?(this._t=void 0,t(1)):"keys"==n?t(0,e):"values"==n?t(0,l[e]):t(0,[e,l[e]])},"values"),r.Arguments=r.Array,u("keys"),u("values"),u("entries")},{"./_add-to-unscopables":82,"./_iter-define":118,"./_iter-step":120,"./_iterators":121,"./_to-iobject":152}],163:[function(l,n,e){var u=l("./_export");u(u.S+u.F,"Object",{assign:l("./_object-assign")})},{"./_export":103,"./_object-assign":126}],164:[function(l,n,e){var u=l("./_export");u(u.S,"Object",{create:l("./_object-create")})},{"./_export":103,"./_object-create":127}],165:[function(l,n,e){var u=l("./_export");u(u.S+u.F*!l("./_descriptors"),"Object",{defineProperty:l("./_object-dp").f})},{"./_descriptors":99,"./_export":103,"./_object-dp":128}],166:[function(l,n,e){var u=l("./_to-iobject"),t=l("./_object-gopd").f;l("./_object-sap")("getOwnPropertyDescriptor",function(){return function(l,n){return t(u(l),n)}})},{"./_object-gopd":130,"./_object-sap":138,"./_to-iobject":152}],167:[function(l,n,e){var u=l("./_to-object"),t=l("./_object-gpo");l("./_object-sap")("getPrototypeOf",function(){return function(l){return t(u(l))}})},{"./_object-gpo":134,"./_object-sap":138,"./_to-object":154}],168:[function(l,n,e){var u=l("./_to-object"),t=l("./_object-keys");l("./_object-sap")("keys",function(){return function(l){return t(u(l))}})},{"./_object-keys":136,"./_object-sap":138,"./_to-object":154}],169:[function(l,n,e){var u=l("./_export");u(u.S,"Object",{setPrototypeOf:l("./_set-proto").set})},{"./_export":103,"./_set-proto":142}],170:[function(l,n,e){arguments[4][38][0].apply(e,arguments)},{dup:38}],171:[function(l,n,e){"use strict";var u,t,r,i=l("./_library"),o=l("./_global"),s=l("./_ctx"),a=l("./_classof"),f=l("./_export"),c=l("./_is-object"),h=l("./_a-function"),d=l("./_an-instance"),p=l("./_for-of"),b=l("./_species-constructor"),v=l("./_task").set,_=l("./_microtask")(),y="Promise",m=o.TypeError,g=o.process,w=o[y],g=o.process,k="process"==a(g),S=function(){},E=!!function(){try{var n=w.resolve(1),e=(n.constructor={})[l("./_wks")("species")]=function(l){l(S,S)};return(k||"function"==typeof PromiseRejectionEvent)&&n.then(S)instanceof e}catch(u){}}(),M=function(l,n){return l===n||l===w&&n===r},I=function(l){var n;return!(!c(l)||"function"!=typeof(n=l.then))&&n},j=function(l){return M(w,l)?new A(l):new t(l)},A=t=function(l){var n,e;this.promise=new l(function(l,u){if(void 0!==n||void 0!==e)throw m("Bad Promise constructor");n=l,e=u}),this.resolve=h(n),this.reject=h(e)},C=function(l){try{l()}catch(n){return{error:n}}},x=function(l,n){if(!l._n){l._n=!0;var e=l._c;_(function(){for(var u=l._v,t=1==l._s,r=0,i=function(n){var e,r,i=t?n.ok:n.fail,o=n.resolve,s=n.reject,a=n.domain;try{i?(t||(2==l._h&&T(l),l._h=1),i===!0?e=u:(a&&a.enter(),e=i(u),a&&a.exit()),e===n.promise?s(m("Promise-chain cycle")):(r=I(e))?r.call(e,o,s):o(e)):s(u)}catch(f){s(f)}};e.length>r;)i(e[r++]);l._c=[],l._n=!1,n&&!l._h&&R(l)})}},R=function(l){v.call(o,function(){var n,e,u,t=l._v;if(B(l)&&(n=C(function(){k?g.emit("unhandledRejection",t,l):(e=o.onunhandledrejection)?e({promise:l,reason:t}):(u=o.console)&&u.error&&u.error("Unhandled promise rejection",t)}),l._h=k||B(l)?2:1),l._a=void 0,n)throw n.error})},B=function(l){if(1==l._h)return!1;for(var n,e=l._a||l._c,u=0;e.length>u;)if(n=e[u++],n.fail||!B(n.promise))return!1;return!0},T=function(l){v.call(o,function(){var n;k?g.emit("rejectionHandled",l):(n=o.onrejectionhandled)&&n({promise:l,reason:l._v})})},O=function(l){var n=this;n._d||(n._d=!0,n=n._w||n,n._v=l,n._s=2,n._a||(n._a=n._c.slice()),x(n,!0))},P=function(l){var n,e=this;if(!e._d){e._d=!0,e=e._w||e;try{if(e===l)throw m("Promise can't be resolved itself");(n=I(l))?_(function(){var u={_w:e,_d:!1};try{n.call(l,s(P,u,1),s(O,u,1))}catch(t){O.call(u,t)}}):(e._v=l,e._s=1,x(e,!1))}catch(u){O.call({_w:e,_d:!1},u)}}};E||(w=function(l){d(this,w,y,"_h"),h(l),u.call(this);try{l(s(P,this,1),s(O,this,1))}catch(n){O.call(this,n)}},u=function(l){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},u.prototype=l("./_redefine-all")(w.prototype,{then:function(l,n){var e=j(b(this,w));return e.ok="function"!=typeof l||l,e.fail="function"==typeof n&&n,e.domain=k?g.domain:void 0,this._c.push(e),this._a&&this._a.push(e),this._s&&x(this,!1),e.promise},"catch":function(l){return this.then(void 0,l)}}),A=function(){var l=new u;this.promise=l,this.resolve=s(P,l,1),this.reject=s(O,l,1)}),f(f.G+f.W+f.F*!E,{Promise:w}),l("./_set-to-string-tag")(w,y),l("./_set-species")(y),r=l("./_core")[y],f(f.S+f.F*!E,y,{reject:function(l){var n=j(this),e=n.reject;return e(l),n.promise}}),f(f.S+f.F*(i||!E),y,{resolve:function(l){if(l instanceof w&&M(l.constructor,this))return l;var n=j(this),e=n.resolve;return e(l),n.promise}}),f(f.S+f.F*!(E&&l("./_iter-detect")(function(l){w.all(l)["catch"](S)})),y,{all:function(l){var n=this,e=j(n),u=e.resolve,t=e.reject,r=C(function(){var e=[],r=0,i=1;p(l,!1,function(l){var o=r++,s=!1;e.push(void 0),i++,n.resolve(l).then(function(l){s||(s=!0,e[o]=l,--i||u(e))},t)}),--i||u(e)});return r&&t(r.error),e.promise},race:function(l){var n=this,e=j(n),u=e.reject,t=C(function(){p(l,!1,function(l){n.resolve(l).then(e.resolve,u)})});return t&&u(t.error),e.promise}})},{"./_a-function":81,"./_an-instance":83,"./_classof":90,"./_core":95,"./_ctx":97,"./_export":103,"./_for-of":105,"./_global":106,"./_is-object":115,"./_iter-detect":119,"./_library":123,"./_microtask":125,"./_redefine-all":140,"./_set-species":143,"./_set-to-string-tag":144, -"./_species-constructor":147,"./_task":149,"./_wks":159}],172:[function(l,n,e){"use strict";var u=l("./_collection-strong");n.exports=l("./_collection")("Set",function(l){return function(){return l(this,arguments.length>0?arguments[0]:void 0)}},{add:function(l){return u.def(this,l=0===l?0:l,l)}},u)},{"./_collection":94,"./_collection-strong":92}],173:[function(l,n,e){"use strict";var u=l("./_string-at")(!0);l("./_iter-define")(String,"String",function(l){this._t=String(l),this._i=0},function(){var l,n=this._t,e=this._i;return e>=n.length?{value:void 0,done:!0}:(l=u(n,e),this._i+=l.length,{value:l,done:!1})})},{"./_iter-define":118,"./_string-at":148}],174:[function(l,n,e){"use strict";var u=l("./_global"),t=l("./_has"),r=l("./_descriptors"),i=l("./_export"),o=l("./_redefine"),s=l("./_meta").KEY,a=l("./_fails"),f=l("./_shared"),c=l("./_set-to-string-tag"),h=l("./_uid"),d=l("./_wks"),p=l("./_wks-ext"),b=l("./_wks-define"),v=l("./_keyof"),_=l("./_enum-keys"),y=l("./_is-array"),m=l("./_an-object"),g=l("./_to-iobject"),w=l("./_to-primitive"),k=l("./_property-desc"),S=l("./_object-create"),E=l("./_object-gopn-ext"),M=l("./_object-gopd"),I=l("./_object-dp"),j=l("./_object-keys"),A=M.f,C=I.f,x=E.f,R=u.Symbol,B=u.JSON,T=B&&B.stringify,O="prototype",P=d("_hidden"),U=d("toPrimitive"),N={}.propertyIsEnumerable,L=f("symbol-registry"),D=f("symbols"),q=f("op-symbols"),F=Object[O],z="function"==typeof R,H=u.QObject,K=!H||!H[O]||!H[O].findChild,V=r&&a(function(){return 7!=S(C({},"a",{get:function(){return C(this,"a",{value:7}).a}})).a})?function(l,n,e){var u=A(F,n);u&&delete F[n],C(l,n,e),u&&l!==F&&C(F,n,u)}:C,Y=function(l){var n=D[l]=S(R[O]);return n._k=l,n},W=z&&"symbol"==typeof R.iterator?function(l){return"symbol"==typeof l}:function(l){return l instanceof R},X=function(l,n,e){return l===F&&X(q,n,e),m(l),n=w(n,!0),m(e),t(D,n)?(e.enumerable?(t(l,P)&&l[P][n]&&(l[P][n]=!1),e=S(e,{enumerable:k(0,!1)})):(t(l,P)||C(l,P,k(1,{})),l[P][n]=!0),V(l,n,e)):C(l,n,e)},G=function(l,n){m(l);for(var e,u=_(n=g(n)),t=0,r=u.length;r>t;)X(l,e=u[t++],n[e]);return l},Z=function(l,n){return void 0===n?S(l):G(S(l),n)},J=function(l){var n=N.call(this,l=w(l,!0));return!(this===F&&t(D,l)&&!t(q,l))&&(!(n||!t(this,l)||!t(D,l)||t(this,P)&&this[P][l])||n)},$=function(l,n){if(l=g(l),n=w(n,!0),l!==F||!t(D,n)||t(q,n)){var e=A(l,n);return!e||!t(D,n)||t(l,P)&&l[P][n]||(e.enumerable=!0),e}},Q=function(l){for(var n,e=x(g(l)),u=[],r=0;e.length>r;)t(D,n=e[r++])||n==P||n==s||u.push(n);return u},ll=function(l){for(var n,e=l===F,u=x(e?q:g(l)),r=[],i=0;u.length>i;)!t(D,n=u[i++])||e&&!t(F,n)||r.push(D[n]);return r};z||(R=function(){if(this instanceof R)throw TypeError("Symbol is not a constructor!");var l=h(arguments.length>0?arguments[0]:void 0),n=function(e){this===F&&n.call(q,e),t(this,P)&&t(this[P],l)&&(this[P][l]=!1),V(this,l,k(1,e))};return r&&K&&V(F,l,{configurable:!0,set:n}),Y(l)},o(R[O],"toString",function(){return this._k}),M.f=$,I.f=X,l("./_object-gopn").f=E.f=Q,l("./_object-pie").f=J,l("./_object-gops").f=ll,r&&!l("./_library")&&o(F,"propertyIsEnumerable",J,!0),p.f=function(l){return Y(d(l))}),i(i.G+i.W+i.F*!z,{Symbol:R});for(var nl="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),el=0;nl.length>el;)d(nl[el++]);for(var nl=j(d.store),el=0;nl.length>el;)b(nl[el++]);i(i.S+i.F*!z,"Symbol",{"for":function(l){return t(L,l+="")?L[l]:L[l]=R(l)},keyFor:function(l){if(W(l))return v(L,l);throw TypeError(l+" is not a symbol!")},useSetter:function(){K=!0},useSimple:function(){K=!1}}),i(i.S+i.F*!z,"Object",{create:Z,defineProperty:X,defineProperties:G,getOwnPropertyDescriptor:$,getOwnPropertyNames:Q,getOwnPropertySymbols:ll}),B&&i(i.S+i.F*(!z||a(function(){var l=R();return"[null]"!=T([l])||"{}"!=T({a:l})||"{}"!=T(Object(l))})),"JSON",{stringify:function(l){if(void 0!==l&&!W(l)){for(var n,e,u=[l],t=1;arguments.length>t;)u.push(arguments[t++]);return n=u[1],"function"==typeof n&&(e=n),!e&&y(n)||(n=function(l,n){if(e&&(n=e.call(this,l,n)),!W(n))return n}),u[1]=n,T.apply(B,u)}}}),R[O][U]||l("./_hide")(R[O],U,R[O].valueOf),c(R,"Symbol"),c(Math,"Math",!0),c(u.JSON,"JSON",!0)},{"./_an-object":84,"./_descriptors":99,"./_enum-keys":102,"./_export":103,"./_fails":104,"./_global":106,"./_has":107,"./_hide":108,"./_is-array":114,"./_keyof":122,"./_library":123,"./_meta":124,"./_object-create":127,"./_object-dp":128,"./_object-gopd":130,"./_object-gopn":132,"./_object-gopn-ext":131,"./_object-gops":133,"./_object-keys":136,"./_object-pie":137,"./_property-desc":139,"./_redefine":141,"./_set-to-string-tag":144,"./_shared":146,"./_to-iobject":152,"./_to-primitive":155,"./_uid":156,"./_wks":159,"./_wks-define":157,"./_wks-ext":158}],175:[function(l,n,e){var u=l("./_export");u(u.P+u.R,"Set",{toJSON:l("./_collection-to-json")("Set")})},{"./_collection-to-json":93,"./_export":103}],176:[function(l,n,e){l("./_wks-define")("asyncIterator")},{"./_wks-define":157}],177:[function(l,n,e){l("./_wks-define")("observable")},{"./_wks-define":157}],178:[function(l,n,e){l("./es6.array.iterator");for(var u=l("./_global"),t=l("./_hide"),r=l("./_iterators"),i=l("./_wks")("toStringTag"),o=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],s=0;s<5;s++){var a=o[s],f=u[a],c=f&&f.prototype;c&&!c[i]&&t(c,i,a),r[a]=r.Array}},{"./_global":106,"./_hide":108,"./_iterators":121,"./_wks":159,"./es6.array.iterator":162}],179:[function(l,n,e){(function(l){function n(l){return Array.isArray?Array.isArray(l):"[object Array]"===v(l)}function u(l){return"boolean"==typeof l}function t(l){return null===l}function r(l){return null==l}function i(l){return"number"==typeof l}function o(l){return"string"==typeof l}function s(l){return"symbol"==typeof l}function a(l){return void 0===l}function f(l){return"[object RegExp]"===v(l)}function c(l){return"object"==typeof l&&null!==l}function h(l){return"[object Date]"===v(l)}function d(l){return"[object Error]"===v(l)||l instanceof Error}function p(l){return"function"==typeof l}function b(l){return null===l||"boolean"==typeof l||"number"==typeof l||"string"==typeof l||"symbol"==typeof l||"undefined"==typeof l}function v(l){return Object.prototype.toString.call(l)}e.isArray=n,e.isBoolean=u,e.isNull=t,e.isNullOrUndefined=r,e.isNumber=i,e.isString=o,e.isSymbol=s,e.isUndefined=a,e.isRegExp=f,e.isObject=c,e.isDate=h,e.isError=d,e.isFunction=p,e.isPrimitive=b,e.isBuffer=l.isBuffer}).call(this,{isBuffer:l("../../is-buffer/index.js")})},{"../../is-buffer/index.js":224}],180:[function(l,n,e){(function(e){function u(l){this.curveType=o[l],this.curveType||(this.curveType={name:l}),this.curve=new r.ec(this.curveType.name),this.keys=void 0}function t(l,n,u){Array.isArray(l)||(l=l.toArray());var t=new e(l);if(u&&t.length>5]|=128<>>9<<4)+14]=n;for(var e=1732584193,u=-271733879,t=-1732584194,f=271733878,c=0;c>16)+(n>>16)+(e>>16);return u<<16|65535&e}function f(l,n){return l<>>32-n}var c=l("./helpers");n.exports=function(l){return c.hash(l,u,16)}},{"./helpers":182}],184:[function(l,n,e){(function(e){"use strict";function u(l,n){i.call(this),l=l.toLowerCase(),"string"==typeof n&&(n=new e(n));var u="sha512"===l||"sha384"===l?128:64;this._alg=l,this._key=n,n.length>u?n=t(l).update(n).digest():n.length0;u--)n+=this._buffer(l,n),e+=this._flushBuffer(t,e);return n+=this._buffer(l,n),t},u.prototype["final"]=function(l){var n;l&&(n=this.update(l));var e;return e="encrypt"===this.type?this._finalEncrypt():this._finalDecrypt(),n?n.concat(e):e},u.prototype._pad=function(l,n){if(0===n)return!1;for(;n>>1];e=s.r28shl(e,i),u=s.r28shl(u,i),s.pc2(e,u,l.keys,t)}},t.prototype._update=function(l,n,e,u){var t=this._desState,r=s.readUInt32BE(l,n),i=s.readUInt32BE(l,n+4);s.ip(r,i,t.tmp,0),r=t.tmp[0],i=t.tmp[1],"encrypt"===this.type?this._encrypt(t,r,i,t.tmp,0):this._decrypt(t,r,i,t.tmp,0),r=t.tmp[0],i=t.tmp[1],s.writeUInt32BE(e,r,u),s.writeUInt32BE(e,i,u+4)},t.prototype._pad=function(l,n){for(var e=l.length-n,u=n;u>>0,r=d}s.rip(i,r,u,t)},t.prototype._decrypt=function(l,n,e,u,t){for(var r=e,i=n,o=l.keys.length-2;o>=0;o-=2){var a=l.keys[o],f=l.keys[o+1];s.expand(r,l.tmp,0),a^=l.tmp[0],f^=l.tmp[1];var c=s.substitute(a,f),h=s.permute(c),d=r;r=(i^h)>>>0,i=d}s.rip(r,i,u,t)}},{"../des":186,inherits:223,"minimalistic-assert":227}],190:[function(l,n,e){"use strict";function u(l,n){r.equal(n.length,24,"Invalid key length");var e=n.slice(0,8),u=n.slice(8,16),t=n.slice(16,24);"encrypt"===l?this.ciphers=[a.create({type:"encrypt",key:e}),a.create({type:"decrypt",key:u}),a.create({type:"encrypt",key:t})]:this.ciphers=[a.create({type:"decrypt",key:t}),a.create({type:"encrypt",key:u}),a.create({type:"decrypt",key:e})]}function t(l){s.call(this,l);var n=new u(this.type,this.options.key);this._edeState=n}var r=l("minimalistic-assert"),i=l("inherits"),o=l("../des"),s=o.Cipher,a=o.DES;i(t,s),n.exports=t,t.create=function(l){return new t(l)},t.prototype._update=function(l,n,e,u){var t=this._edeState;t.ciphers[0]._update(l,n,e,u),t.ciphers[1]._update(e,u,e,u),t.ciphers[2]._update(e,u,e,u)},t.prototype._pad=a.prototype._pad,t.prototype._unpad=a.prototype._unpad},{"../des":186,inherits:223,"minimalistic-assert":227}],191:[function(l,n,e){"use strict";e.readUInt32BE=function(l,n){var e=l[0+n]<<24|l[1+n]<<16|l[2+n]<<8|l[3+n];return e>>>0},e.writeUInt32BE=function(l,n,e){l[0+e]=n>>>24,l[1+e]=n>>>16&255,l[2+e]=n>>>8&255,l[3+e]=255&n},e.ip=function(l,n,e,u){for(var t=0,r=0,i=6;i>=0;i-=2){for(var o=0;o<=24;o+=8)t<<=1,t|=n>>>o+i&1;for(var o=0;o<=24;o+=8)t<<=1,t|=l>>>o+i&1}for(var i=6;i>=0;i-=2){for(var o=1;o<=25;o+=8)r<<=1,r|=n>>>o+i&1;for(var o=1;o<=25;o+=8)r<<=1,r|=l>>>o+i&1}e[u+0]=t>>>0,e[u+1]=r>>>0},e.rip=function(l,n,e,u){for(var t=0,r=0,i=0;i<4;i++)for(var o=24;o>=0;o-=8)t<<=1,t|=n>>>o+i&1,t<<=1,t|=l>>>o+i&1;for(var i=4;i<8;i++)for(var o=24;o>=0;o-=8)r<<=1,r|=n>>>o+i&1,r<<=1,r|=l>>>o+i&1;e[u+0]=t>>>0,e[u+1]=r>>>0},e.pc1=function(l,n,e,u){for(var t=0,r=0,i=7;i>=5;i--){for(var o=0;o<=24;o+=8)t<<=1,t|=n>>o+i&1;for(var o=0;o<=24;o+=8)t<<=1,t|=l>>o+i&1}for(var o=0;o<=24;o+=8)t<<=1,t|=n>>o+i&1;for(var i=1;i<=3;i++){for(var o=0;o<=24;o+=8)r<<=1,r|=n>>o+i&1;for(var o=0;o<=24;o+=8)r<<=1,r|=l>>o+i&1}for(var o=0;o<=24;o+=8)r<<=1,r|=l>>o+i&1;e[u+0]=t>>>0,e[u+1]=r>>>0},e.r28shl=function(l,n){return l<>>28-n};var u=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];e.pc2=function(l,n,e,t){for(var r=0,i=0,o=u.length>>>1,s=0;s>>u[s]&1;for(var s=o;s>>u[s]&1;e[t+0]=r>>>0,e[t+1]=i>>>0},e.expand=function(l,n,e){var u=0,t=0;u=(1&l)<<5|l>>>27;for(var r=23;r>=15;r-=4)u<<=6,u|=l>>>r&63;for(var r=11;r>=3;r-=4)t|=l>>>r&63,t<<=6;t|=(31&l)<<1|l>>>31,n[e+0]=u>>>0,n[e+1]=t>>>0};var t=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];e.substitute=function(l,n){for(var e=0,u=0;u<4;u++){var r=l>>>18-6*u&63,i=t[64*u+r];e<<=4,e|=i}for(var u=0;u<4;u++){var r=n>>>18-6*u&63,i=t[256+64*u+r];e<<=4,e|=i}return e>>>0};var r=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];e.permute=function(l){for(var n=0,e=0;e>>r[e]&1;return n>>>0},e.padSplit=function(l,n,e){for(var u=l.toString(2);u.lengthl;)e.ishrn(1);if(e.isEven()&&e.iadd(h),e.testn(1)||e.iadd(d),n.cmp(d)){if(!n.cmp(p))for(;e.mod(b).cmp(v);)e.iadd(y)}else for(;e.mod(a).cmp(_);)e.iadd(y);if(u=e.shrn(1),t(u)&&t(e)&&r(u)&&r(e)&&c.test(u)&&c.test(e))return e}}var o=l("randombytes");n.exports=i,i.simpleSieve=t,i.fermatTest=r;var s=l("bn.js"),a=new s(24),f=l("miller-rabin"),c=new f,h=new s(1),d=new s(2),p=new s(5),b=(new s(16),new s(8),new s(10)),v=new s(3),_=(new s(7),new s(11)),y=new s(4),m=(new s(12),null)},{"bn.js":36,"miller-rabin":226,randombytes:246}],195:[function(l,n,e){n.exports={modp1:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},modp17:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff" -},modp18:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}},{}],196:[function(l,n,e){"use strict";var u=e;u.version=l("../package.json").version,u.utils=l("./elliptic/utils"),u.rand=l("brorand"),u.curve=l("./elliptic/curve"),u.curves=l("./elliptic/curves"),u.ec=l("./elliptic/ec"),u.eddsa=l("./elliptic/eddsa")},{"../package.json":211,"./elliptic/curve":199,"./elliptic/curves":202,"./elliptic/ec":203,"./elliptic/eddsa":206,"./elliptic/utils":210,brorand:37}],197:[function(l,n,e){"use strict";function u(l,n){this.type=l,this.p=new r(n.p,16),this.red=n.prime?r.red(n.prime):r.mont(this.p),this.zero=new r(0).toRed(this.red),this.one=new r(1).toRed(this.red),this.two=new r(2).toRed(this.red),this.n=n.n&&new r(n.n,16),this.g=n.g&&this.pointFromJSON(n.g,n.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4);var e=this.n&&this.p.div(this.n);!e||e.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function t(l,n){this.curve=l,this.type=n,this.precomputed=null}var r=l("bn.js"),i=l("../../elliptic"),o=i.utils,s=o.getNAF,a=o.getJSF,f=o.assert;n.exports=u,u.prototype.point=function(){throw new Error("Not implemented")},u.prototype.validate=function(){throw new Error("Not implemented")},u.prototype._fixedNafMul=function(l,n){f(l.precomputed);var e=l._getDoubles(),u=s(n,1),t=(1<=i;n--)o=(o<<1)+u[n];r.push(o)}for(var a=this.jpoint(null,null,null),c=this.jpoint(null,null,null),h=t;h>0;h--){for(var i=0;i=0;o--){for(var n=0;o>=0&&0===r[o];o--)n++;if(o>=0&&n++,i=i.dblp(n),o<0)break;var a=r[o];f(0!==a),i="affine"===l.type?a>0?i.mixedAdd(t[a-1>>1]):i.mixedAdd(t[-a-1>>1].neg()):a>0?i.add(t[a-1>>1]):i.add(t[-a-1>>1].neg())}return"affine"===l.type?i.toP():i},u.prototype._wnafMulAdd=function(l,n,e,u,t){for(var r=this._wnafT1,i=this._wnafT2,o=this._wnafT3,f=0,c=0;c=1;c-=2){var p=c-1,b=c;if(1===r[p]&&1===r[b]){var v=[n[p],null,null,n[b]];0===n[p].y.cmp(n[b].y)?(v[1]=n[p].add(n[b]),v[2]=n[p].toJ().mixedAdd(n[b].neg())):0===n[p].y.cmp(n[b].y.redNeg())?(v[1]=n[p].toJ().mixedAdd(n[b]),v[2]=n[p].add(n[b].neg())):(v[1]=n[p].toJ().mixedAdd(n[b]),v[2]=n[p].toJ().mixedAdd(n[b].neg()));var _=[-3,-1,-5,-7,0,7,5,1,3],y=a(e[p],e[b]);f=Math.max(y[0].length,f),o[p]=new Array(f),o[b]=new Array(f);for(var m=0;m=0;c--){for(var E=0;c>=0;){for(var M=!0,m=0;m=0&&E++,k=k.dblp(E),c<0)break;for(var m=0;m0?h=i[m][I-1>>1]:I<0&&(h=i[m][-I-1>>1].neg()),k="affine"===h.type?k.mixedAdd(h):k.add(h))}}for(var c=0;c=Math.ceil((l.bitLength()+1)/n.step)},t.prototype._getDoubles=function(l,n){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var e=[this],u=this,t=0;t":""},t.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&0===this.y.cmp(this.z)},t.prototype._extDbl=function(){var l=this.x.redSqr(),n=this.y.redSqr(),e=this.z.redSqr();e=e.redIAdd(e);var u=this.curve._mulA(l),t=this.x.redAdd(this.y).redSqr().redISub(l).redISub(n),r=u.redAdd(n),i=r.redSub(e),o=u.redSub(n),s=t.redMul(i),a=r.redMul(o),f=t.redMul(o),c=i.redMul(r);return this.curve.point(s,a,c,f)},t.prototype._projDbl=function(){var l,n,e,u=this.x.redAdd(this.y).redSqr(),t=this.x.redSqr(),r=this.y.redSqr();if(this.curve.twisted){var i=this.curve._mulA(t),o=i.redAdd(r);if(this.zOne)l=u.redSub(t).redSub(r).redMul(o.redSub(this.curve.two)),n=o.redMul(i.redSub(r)),e=o.redSqr().redSub(o).redSub(o);else{var s=this.z.redSqr(),a=o.redSub(s).redISub(s);l=u.redSub(t).redISub(r).redMul(a),n=o.redMul(i.redSub(r)),e=o.redMul(a)}}else{var i=t.redAdd(r),s=this.curve._mulC(this.c.redMul(this.z)).redSqr(),a=i.redSub(s).redSub(s);l=this.curve._mulC(u.redISub(i)).redMul(a),n=this.curve._mulC(i).redMul(t.redISub(r)),e=i.redMul(a)}return this.curve.point(l,n,e)},t.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},t.prototype._extAdd=function(l){var n=this.y.redSub(this.x).redMul(l.y.redSub(l.x)),e=this.y.redAdd(this.x).redMul(l.y.redAdd(l.x)),u=this.t.redMul(this.curve.dd).redMul(l.t),t=this.z.redMul(l.z.redAdd(l.z)),r=e.redSub(n),i=t.redSub(u),o=t.redAdd(u),s=e.redAdd(n),a=r.redMul(i),f=o.redMul(s),c=r.redMul(s),h=i.redMul(o);return this.curve.point(a,f,h,c)},t.prototype._projAdd=function(l){var n,e,u=this.z.redMul(l.z),t=u.redSqr(),r=this.x.redMul(l.x),i=this.y.redMul(l.y),o=this.curve.d.redMul(r).redMul(i),s=t.redSub(o),a=t.redAdd(o),f=this.x.redAdd(this.y).redMul(l.x.redAdd(l.y)).redISub(r).redISub(i),c=u.redMul(s).redMul(f);return this.curve.twisted?(n=u.redMul(a).redMul(i.redSub(this.curve._mulA(r))),e=s.redMul(a)):(n=u.redMul(a).redMul(i.redSub(r)),e=this.curve._mulC(s).redMul(a)),this.curve.point(c,n,e)},t.prototype.add=function(l){return this.isInfinity()?l:l.isInfinity()?this:this.curve.extended?this._extAdd(l):this._projAdd(l)},t.prototype.mul=function(l){return this._hasDoubles(l)?this.curve._fixedNafMul(this,l):this.curve._wnafMul(this,l)},t.prototype.mulAdd=function(l,n,e){return this.curve._wnafMulAdd(1,[this,n],[l,e],2,!1)},t.prototype.jmulAdd=function(l,n,e){return this.curve._wnafMulAdd(1,[this,n],[l,e],2,!0)},t.prototype.normalize=function(){if(this.zOne)return this;var l=this.z.redInvm();return this.x=this.x.redMul(l),this.y=this.y.redMul(l),this.t&&(this.t=this.t.redMul(l)),this.z=this.curve.one,this.zOne=!0,this},t.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},t.prototype.getX=function(){return this.normalize(),this.x.fromRed()},t.prototype.getY=function(){return this.normalize(),this.y.fromRed()},t.prototype.eq=function(l){return this===l||0===this.getX().cmp(l.getX())&&0===this.getY().cmp(l.getY())},t.prototype.eqXToP=function(l){var n=l.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(n))return!0;for(var e=l.clone(),u=this.curve.redN.redMul(this.z);;){if(e.iadd(this.curve.n),e.cmp(this.curve.p)>=0)return!1;if(n.redIAdd(u),0===this.x.cmp(n))return!0}return!1},t.prototype.toP=t.prototype.normalize,t.prototype.mixedAdd=t.prototype.add},{"../../elliptic":196,"../curve":199,"bn.js":36,inherits:223}],199:[function(l,n,e){"use strict";var u=e;u.base=l("./base"),u["short"]=l("./short"),u.mont=l("./mont"),u.edwards=l("./edwards")},{"./base":197,"./edwards":198,"./mont":200,"./short":201}],200:[function(l,n,e){"use strict";function u(l){s.call(this,"mont",l),this.a=new i(l.a,16).toRed(this.red),this.b=new i(l.b,16).toRed(this.red),this.i4=new i(4).toRed(this.red).redInvm(),this.two=new i(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function t(l,n,e){s.BasePoint.call(this,l,"projective"),null===n&&null===e?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new i(n,16),this.z=new i(e,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}var r=l("../curve"),i=l("bn.js"),o=l("inherits"),s=r.base,a=l("../../elliptic"),f=a.utils;o(u,s),n.exports=u,u.prototype.validate=function(l){var n=l.normalize().x,e=n.redSqr(),u=e.redMul(n).redAdd(e.redMul(this.a)).redAdd(n),t=u.redSqrt();return 0===t.redSqr().cmp(u)},o(t,s.BasePoint),u.prototype.decodePoint=function(l,n){return this.point(f.toArray(l,n),1)},u.prototype.point=function(l,n){return new t(this,l,n)},u.prototype.pointFromJSON=function(l){return t.fromJSON(this,l)},t.prototype.precompute=function(){},t.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},t.fromJSON=function(l,n){return new t(l,n[0],n[1]||l.one)},t.prototype.inspect=function(){return this.isInfinity()?"":""},t.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},t.prototype.dbl=function(){var l=this.x.redAdd(this.z),n=l.redSqr(),e=this.x.redSub(this.z),u=e.redSqr(),t=n.redSub(u),r=n.redMul(u),i=t.redMul(u.redAdd(this.curve.a24.redMul(t)));return this.curve.point(r,i)},t.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},t.prototype.diffAdd=function(l,n){var e=this.x.redAdd(this.z),u=this.x.redSub(this.z),t=l.x.redAdd(l.z),r=l.x.redSub(l.z),i=r.redMul(e),o=t.redMul(u),s=n.z.redMul(i.redAdd(o).redSqr()),a=n.x.redMul(i.redISub(o).redSqr());return this.curve.point(s,a)},t.prototype.mul=function(l){for(var n=l.clone(),e=this,u=this.curve.point(null,null),t=this,r=[];0!==n.cmpn(0);n.iushrn(1))r.push(n.andln(1));for(var i=r.length-1;i>=0;i--)0===r[i]?(e=e.diffAdd(u,t),u=u.dbl()):(u=e.diffAdd(u,t),e=e.dbl());return u},t.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},t.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},t.prototype.eq=function(l){return 0===this.getX().cmp(l.getX())},t.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},t.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},{"../../elliptic":196,"../curve":199,"bn.js":36,inherits:223}],201:[function(l,n,e){"use strict";function u(l){f.call(this,"short",l),this.a=new s(l.a,16).toRed(this.red),this.b=new s(l.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(l),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function t(l,n,e,u){f.BasePoint.call(this,l,"affine"),null===n&&null===e?(this.x=null,this.y=null,this.inf=!0):(this.x=new s(n,16),this.y=new s(e,16),u&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function r(l,n,e,u){f.BasePoint.call(this,l,"jacobian"),null===n&&null===e&&null===u?(this.x=this.curve.one,this.y=this.curve.one,this.z=new s(0)):(this.x=new s(n,16),this.y=new s(e,16),this.z=new s(u,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}var i=l("../curve"),o=l("../../elliptic"),s=l("bn.js"),a=l("inherits"),f=i.base,c=o.utils.assert;a(u,f),n.exports=u,u.prototype._getEndomorphism=function(l){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var n,e;if(l.beta)n=new s(l.beta,16).toRed(this.red);else{var u=this._getEndoRoots(this.p);n=u[0].cmp(u[1])<0?u[0]:u[1],n=n.toRed(this.red)}if(l.lambda)e=new s(l.lambda,16);else{var t=this._getEndoRoots(this.n);0===this.g.mul(t[0]).x.cmp(this.g.x.redMul(n))?e=t[0]:(e=t[1],c(0===this.g.mul(e).x.cmp(this.g.x.redMul(n))))}var r;return r=l.basis?l.basis.map(function(l){return{a:new s(l.a,16),b:new s(l.b,16)}}):this._getEndoBasis(e),{beta:n,lambda:e,basis:r}}},u.prototype._getEndoRoots=function(l){var n=l===this.p?this.red:s.mont(l),e=new s(2).toRed(n).redInvm(),u=e.redNeg(),t=new s(3).toRed(n).redNeg().redSqrt().redMul(e),r=u.redAdd(t).fromRed(),i=u.redSub(t).fromRed();return[r,i]},u.prototype._getEndoBasis=function(l){for(var n,e,u,t,r,i,o,a,f,c=this.n.ushrn(Math.floor(this.n.bitLength()/2)),h=l,d=this.n.clone(),p=new s(1),b=new s(0),v=new s(0),_=new s(1),y=0;0!==h.cmpn(0);){var m=d.div(h);a=d.sub(m.mul(h)),f=v.sub(m.mul(p));var g=_.sub(m.mul(b));if(!u&&a.cmp(c)<0)n=o.neg(),e=p,u=a.neg(),t=f;else if(u&&2===++y)break;o=a,d=h,h=a,v=p,p=f,_=b,b=g}r=a.neg(),i=f;var w=u.sqr().add(t.sqr()),k=r.sqr().add(i.sqr());return k.cmp(w)>=0&&(r=n,i=e),u.negative&&(u=u.neg(),t=t.neg()),r.negative&&(r=r.neg(),i=i.neg()),[{a:u,b:t},{a:r,b:i}]},u.prototype._endoSplit=function(l){var n=this.endo.basis,e=n[0],u=n[1],t=u.b.mul(l).divRound(this.n),r=e.b.neg().mul(l).divRound(this.n),i=t.mul(e.a),o=r.mul(u.a),s=t.mul(e.b),a=r.mul(u.b),f=l.sub(i).sub(o),c=s.add(a).neg();return{k1:f,k2:c}},u.prototype.pointFromX=function(l,n){l=new s(l,16),l.red||(l=l.toRed(this.red));var e=l.redSqr().redMul(l).redIAdd(l.redMul(this.a)).redIAdd(this.b),u=e.redSqrt();if(0!==u.redSqr().redSub(e).cmp(this.zero))throw new Error("invalid point");var t=u.fromRed().isOdd();return(n&&!t||!n&&t)&&(u=u.redNeg()),this.point(l,u)},u.prototype.validate=function(l){if(l.inf)return!0;var n=l.x,e=l.y,u=this.a.redMul(n),t=n.redSqr().redMul(n).redIAdd(u).redIAdd(this.b);return 0===e.redSqr().redISub(t).cmpn(0)},u.prototype._endoWnafMulAdd=function(l,n,e){for(var u=this._endoWnafT1,t=this._endoWnafT2,r=0;r":""},t.prototype.isInfinity=function(){return this.inf},t.prototype.add=function(l){if(this.inf)return l;if(l.inf)return this;if(this.eq(l))return this.dbl();if(this.neg().eq(l))return this.curve.point(null,null);if(0===this.x.cmp(l.x))return this.curve.point(null,null);var n=this.y.redSub(l.y);0!==n.cmpn(0)&&(n=n.redMul(this.x.redSub(l.x).redInvm()));var e=n.redSqr().redISub(this.x).redISub(l.x),u=n.redMul(this.x.redSub(e)).redISub(this.y);return this.curve.point(e,u)},t.prototype.dbl=function(){if(this.inf)return this;var l=this.y.redAdd(this.y);if(0===l.cmpn(0))return this.curve.point(null,null);var n=this.curve.a,e=this.x.redSqr(),u=l.redInvm(),t=e.redAdd(e).redIAdd(e).redIAdd(n).redMul(u),r=t.redSqr().redISub(this.x.redAdd(this.x)),i=t.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,i)},t.prototype.getX=function(){return this.x.fromRed()},t.prototype.getY=function(){return this.y.fromRed()},t.prototype.mul=function(l){return l=new s(l,16),this._hasDoubles(l)?this.curve._fixedNafMul(this,l):this.curve.endo?this.curve._endoWnafMulAdd([this],[l]):this.curve._wnafMul(this,l)},t.prototype.mulAdd=function(l,n,e){var u=[this,n],t=[l,e];return this.curve.endo?this.curve._endoWnafMulAdd(u,t):this.curve._wnafMulAdd(1,u,t,2)},t.prototype.jmulAdd=function(l,n,e){var u=[this,n],t=[l,e];return this.curve.endo?this.curve._endoWnafMulAdd(u,t,!0):this.curve._wnafMulAdd(1,u,t,2,!0)},t.prototype.eq=function(l){return this===l||this.inf===l.inf&&(this.inf||0===this.x.cmp(l.x)&&0===this.y.cmp(l.y))},t.prototype.neg=function(l){if(this.inf)return this;var n=this.curve.point(this.x,this.y.redNeg());if(l&&this.precomputed){var e=this.precomputed,u=function(l){return l.neg()};n.precomputed={naf:e.naf&&{wnd:e.naf.wnd,points:e.naf.points.map(u)},doubles:e.doubles&&{step:e.doubles.step,points:e.doubles.points.map(u)}}}return n},t.prototype.toJ=function(){if(this.inf)return this.curve.jpoint(null,null,null);var l=this.curve.jpoint(this.x,this.y,this.curve.one);return l},a(r,f.BasePoint),u.prototype.jpoint=function(l,n,e){return new r(this,l,n,e)},r.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var l=this.z.redInvm(),n=l.redSqr(),e=this.x.redMul(n),u=this.y.redMul(n).redMul(l);return this.curve.point(e,u)},r.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},r.prototype.add=function(l){if(this.isInfinity())return l;if(l.isInfinity())return this;var n=l.z.redSqr(),e=this.z.redSqr(),u=this.x.redMul(n),t=l.x.redMul(e),r=this.y.redMul(n.redMul(l.z)),i=l.y.redMul(e.redMul(this.z)),o=u.redSub(t),s=r.redSub(i);if(0===o.cmpn(0))return 0!==s.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var a=o.redSqr(),f=a.redMul(o),c=u.redMul(a),h=s.redSqr().redIAdd(f).redISub(c).redISub(c),d=s.redMul(c.redISub(h)).redISub(r.redMul(f)),p=this.z.redMul(l.z).redMul(o);return this.curve.jpoint(h,d,p)},r.prototype.mixedAdd=function(l){if(this.isInfinity())return l.toJ();if(l.isInfinity())return this;var n=this.z.redSqr(),e=this.x,u=l.x.redMul(n),t=this.y,r=l.y.redMul(n).redMul(this.z),i=e.redSub(u),o=t.redSub(r);if(0===i.cmpn(0))return 0!==o.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var s=i.redSqr(),a=s.redMul(i),f=e.redMul(s),c=o.redSqr().redIAdd(a).redISub(f).redISub(f),h=o.redMul(f.redISub(c)).redISub(t.redMul(a)),d=this.z.redMul(i);return this.curve.jpoint(c,h,d)},r.prototype.dblp=function(l){if(0===l)return this;if(this.isInfinity())return this;if(!l)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var n=this,e=0;e=0)return!1;if(e.redIAdd(t),0===this.x.cmp(e))return!0}return!1},r.prototype.inspect=function(){return this.isInfinity()?"":""},r.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},{"../../elliptic":196,"../curve":199,"bn.js":36,inherits:223}],202:[function(l,n,e){"use strict";function u(l){"short"===l.type?this.curve=new o.curve["short"](l):"edwards"===l.type?this.curve=new o.curve.edwards(l):this.curve=new o.curve.mont(l),this.g=this.curve.g,this.n=this.curve.n,this.hash=l.hash,s(this.g.validate(),"Invalid curve"),s(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function t(l,n){Object.defineProperty(r,l,{configurable:!0,enumerable:!0,get:function(){var e=new u(n);return Object.defineProperty(r,l,{configurable:!0,enumerable:!0,value:e}),e}})}var r=e,i=l("hash.js"),o=l("../elliptic"),s=o.utils.assert;r.PresetCurve=u,t("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:i.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),t("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:i.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),t("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:i.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),t("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:i.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),t("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc", -b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:i.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),t("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:i.sha256,gRed:!1,g:["9"]}),t("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:i.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});var a;try{a=l("./precomputed/secp256k1")}catch(f){a=void 0}t("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:i.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",a]})},{"../elliptic":196,"./precomputed/secp256k1":209,"hash.js":214}],203:[function(l,n,e){"use strict";function u(l){return this instanceof u?("string"==typeof l&&(s(i.curves.hasOwnProperty(l),"Unknown curve "+l),l=i.curves[l]),l instanceof i.curves.PresetCurve&&(l={curve:l}),this.curve=l.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=l.curve.g,this.g.precompute(l.curve.n.bitLength()+1),void(this.hash=l.hash||l.curve.hash)):new u(l)}var t=l("bn.js"),r=l("hmac-drbg"),i=l("../../elliptic"),o=i.utils,s=o.assert,a=l("./key"),f=l("./signature");n.exports=u,u.prototype.keyPair=function(l){return new a(this,l)},u.prototype.keyFromPrivate=function(l,n){return a.fromPrivate(this,l,n)},u.prototype.keyFromPublic=function(l,n){return a.fromPublic(this,l,n)},u.prototype.genKeyPair=function(l){l||(l={});for(var n=new r({hash:this.hash,pers:l.pers,persEnc:l.persEnc||"utf8",entropy:l.entropy||i.rand(this.hash.hmacStrength),entropyEnc:l.entropy&&l.entropyEnc||"utf8",nonce:this.n.toArray()}),e=this.n.byteLength(),u=this.n.sub(new t(2));;){var o=new t(n.generate(e));if(!(o.cmp(u)>0))return o.iaddn(1),this.keyFromPrivate(o)}},u.prototype._truncateToN=function(l,n){var e=8*l.byteLength()-this.n.bitLength();return e>0&&(l=l.ushrn(e)),!n&&l.cmp(this.n)>=0?l.sub(this.n):l},u.prototype.sign=function(l,n,e,u){"object"==typeof e&&(u=e,e=null),u||(u={}),n=this.keyFromPrivate(n,e),l=this._truncateToN(new t(l,16));for(var i=this.n.byteLength(),o=n.getPrivate().toArray("be",i),s=l.toArray("be",i),a=new r({hash:this.hash,entropy:o,nonce:s,pers:u.pers,persEnc:u.persEnc||"utf8"}),c=this.n.sub(new t(1)),h=0;!0;h++){var d=u.k?u.k(h):new t(a.generate(this.n.byteLength()));if(d=this._truncateToN(d,!0),!(d.cmpn(1)<=0||d.cmp(c)>=0)){var p=this.g.mul(d);if(!p.isInfinity()){var b=p.getX(),v=b.umod(this.n);if(0!==v.cmpn(0)){var _=d.invm(this.n).mul(v.mul(n.getPrivate()).iadd(l));if(_=_.umod(this.n),0!==_.cmpn(0)){var y=(p.getY().isOdd()?1:0)|(0!==b.cmp(v)?2:0);return u.canonical&&_.cmp(this.nh)>0&&(_=this.n.sub(_),y^=1),new f({r:v,s:_,recoveryParam:y})}}}}}},u.prototype.verify=function(l,n,e,u){l=this._truncateToN(new t(l,16)),e=this.keyFromPublic(e,u),n=new f(n,"hex");var r=n.r,i=n.s;if(r.cmpn(1)<0||r.cmp(this.n)>=0)return!1;if(i.cmpn(1)<0||i.cmp(this.n)>=0)return!1;var o=i.invm(this.n),s=o.mul(l).umod(this.n),a=o.mul(r).umod(this.n);if(!this.curve._maxwellTrick){var c=this.g.mulAdd(s,e.getPublic(),a);return!c.isInfinity()&&0===c.getX().umod(this.n).cmp(r)}var c=this.g.jmulAdd(s,e.getPublic(),a);return!c.isInfinity()&&c.eqXToP(r)},u.prototype.recoverPubKey=function(l,n,e,u){s((3&e)===e,"The recovery param is more than two bits"),n=new f(n,u);var r=this.n,i=new t(l),o=n.r,a=n.s,c=1&e,h=e>>1;if(o.cmp(this.curve.p.umod(this.curve.n))>=0&&h)throw new Error("Unable to find sencond key candinate");o=h?this.curve.pointFromX(o.add(this.curve.n),c):this.curve.pointFromX(o,c);var d=n.r.invm(r),p=r.sub(i).mul(d).umod(r),b=a.mul(d).umod(r);return this.g.mulAdd(p,o,b)},u.prototype.getKeyRecoveryParam=function(l,n,e,u){if(n=new f(n,u),null!==n.recoveryParam)return n.recoveryParam;for(var t=0;t<4;t++){var r;try{r=this.recoverPubKey(l,n,t)}catch(l){continue}if(r.eq(e))return t}throw new Error("Unable to find valid recovery factor")}},{"../../elliptic":196,"./key":204,"./signature":205,"bn.js":36,"hmac-drbg":220}],204:[function(l,n,e){"use strict";function u(l,n){this.ec=l,this.priv=null,this.pub=null,n.priv&&this._importPrivate(n.priv,n.privEnc),n.pub&&this._importPublic(n.pub,n.pubEnc)}var t=l("bn.js"),r=l("../../elliptic"),i=r.utils,o=i.assert;n.exports=u,u.fromPublic=function(l,n,e){return n instanceof u?n:new u(l,{pub:n,pubEnc:e})},u.fromPrivate=function(l,n,e){return n instanceof u?n:new u(l,{priv:n,privEnc:e})},u.prototype.validate=function(){var l=this.getPublic();return l.isInfinity()?{result:!1,reason:"Invalid public key"}:l.validate()?l.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},u.prototype.getPublic=function(l,n){return"string"==typeof l&&(n=l,l=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),n?this.pub.encode(n,l):this.pub},u.prototype.getPrivate=function(l){return"hex"===l?this.priv.toString(16,2):this.priv},u.prototype._importPrivate=function(l,n){this.priv=new t(l,n||16),this.priv=this.priv.umod(this.ec.curve.n)},u.prototype._importPublic=function(l,n){return l.x||l.y?("mont"===this.ec.curve.type?o(l.x,"Need x coordinate"):"short"!==this.ec.curve.type&&"edwards"!==this.ec.curve.type||o(l.x&&l.y,"Need both x and y coordinate"),void(this.pub=this.ec.curve.point(l.x,l.y))):void(this.pub=this.ec.curve.decodePoint(l,n))},u.prototype.derive=function(l){return l.mul(this.priv).getX()},u.prototype.sign=function(l,n,e){return this.ec.sign(l,this,n,e)},u.prototype.verify=function(l,n){return this.ec.verify(l,n,this)},u.prototype.inspect=function(){return""}},{"../../elliptic":196,"bn.js":36}],205:[function(l,n,e){"use strict";function u(l,n){return l instanceof u?l:void(this._importDER(l,n)||(c(l.r&&l.s,"Signature without r or s"),this.r=new s(l.r,16),this.s=new s(l.s,16),void 0===l.recoveryParam?this.recoveryParam=null:this.recoveryParam=l.recoveryParam))}function t(){this.place=0}function r(l,n){var e=l[n.place++];if(!(128&e))return e;for(var u=15&e,t=0,r=0,i=n.place;r>>3);for(l.push(128|e);--e;)l.push(n>>>(e<<3)&255);l.push(n)}var s=l("bn.js"),a=l("../../elliptic"),f=a.utils,c=f.assert;n.exports=u,u.prototype._importDER=function(l,n){l=f.toArray(l,n);var e=new t;if(48!==l[e.place++])return!1;var u=r(l,e);if(u+e.place!==l.length)return!1;if(2!==l[e.place++])return!1;var i=r(l,e),o=l.slice(e.place,i+e.place);if(e.place+=i,2!==l[e.place++])return!1;var a=r(l,e);if(l.length!==a+e.place)return!1;var c=l.slice(e.place,a+e.place);return 0===o[0]&&128&o[1]&&(o=o.slice(1)),0===c[0]&&128&c[1]&&(c=c.slice(1)),this.r=new s(o),this.s=new s(c),this.recoveryParam=null,!0},u.prototype.toDER=function(l){var n=this.r.toArray(),e=this.s.toArray();for(128&n[0]&&(n=[0].concat(n)),128&e[0]&&(e=[0].concat(e)),n=i(n),e=i(e);!(e[0]||128&e[1]);)e=e.slice(1);var u=[2];o(u,n.length),u=u.concat(n),u.push(2),o(u,e.length);var t=u.concat(e),r=[48];return o(r,t.length),r=r.concat(t),f.encode(r,l)}},{"../../elliptic":196,"bn.js":36}],206:[function(l,n,e){"use strict";function u(l){if(o("ed25519"===l,"only tested with ed25519 so far"),!(this instanceof u))return new u(l);var l=r.curves[l].curve;this.curve=l,this.g=l.g,this.g.precompute(l.n.bitLength()+1),this.pointClass=l.point().constructor,this.encodingLength=Math.ceil(l.n.bitLength()/8),this.hash=t.sha512}var t=l("hash.js"),r=l("../../elliptic"),i=r.utils,o=i.assert,s=i.parseBytes,a=l("./key"),f=l("./signature");n.exports=u,u.prototype.sign=function(l,n){l=s(l);var e=this.keyFromSecret(n),u=this.hashInt(e.messagePrefix(),l),t=this.g.mul(u),r=this.encodePoint(t),i=this.hashInt(r,e.pubBytes(),l).mul(e.priv()),o=u.add(i).umod(this.curve.n);return this.makeSignature({R:t,S:o,Rencoded:r})},u.prototype.verify=function(l,n,e){l=s(l),n=this.makeSignature(n);var u=this.keyFromPublic(e),t=this.hashInt(n.Rencoded(),u.pubBytes(),l),r=this.g.mul(n.S()),i=n.R().add(u.pub().mul(t));return i.eq(r)},u.prototype.hashInt=function(){for(var l=this.hash(),n=0;n=0;){var r;if(t.isOdd()){var i=t.andln(u-1);r=i>(u>>1)-1?(u>>1)-i:i,t.isubn(r)}else r=0;e.push(r);for(var o=0!==t.cmpn(0)&&0===t.andln(u-1)?n+1:1,s=1;s0||n.cmpn(-t)>0;){var r=l.andln(3)+u&3,i=n.andln(3)+t&3;3===r&&(r=-1),3===i&&(i=-1);var o;if(0===(1&r))o=0;else{var s=l.andln(7)+u&7;o=3!==s&&5!==s||2!==i?r:-r}e[0].push(o);var a;if(0===(1&i))a=0;else{var s=n.andln(7)+t&7;a=3!==s&&5!==s||2!==r?i:-i}e[1].push(a),2*u===o+1&&(u=1-u),2*t===a+1&&(t=1-t),l.iushrn(1),n.iushrn(1)}return e}function r(l,n,e){var u="_"+n;l.prototype[n]=function(){return void 0!==this[u]?this[u]:this[u]=e.call(this)}}function i(l){return"string"==typeof l?s.toArray(l,"hex"):l}function o(l){return new a(l,"hex","le")}var s=e,a=l("bn.js"),f=l("minimalistic-assert"),c=l("minimalistic-crypto-utils");s.assert=f,s.toArray=c.toArray,s.zero2=c.zero2,s.toHex=c.toHex,s.encode=c.encode,s.getNAF=u,s.getJSF=t,s.cachedProperty=r,s.parseBytes=i,s.intFromLE=o},{"bn.js":36,"minimalistic-assert":227,"minimalistic-crypto-utils":228}],211:[function(l,n,e){n.exports={_args:[[{raw:"elliptic@^6.0.0",scope:null,escapedName:"elliptic",name:"elliptic",rawSpec:"^6.0.0",spec:">=6.0.0 <7.0.0",type:"range"},"/Users/lutovich/Projects/neo4j-javascript-driver/node_modules/browserify-sign"]],_from:"elliptic@>=6.0.0 <7.0.0",_id:"elliptic@6.4.0",_inCache:!0,_installable:!0,_location:"/elliptic",_nodeVersion:"7.0.0",_npmOperationalInternal:{host:"packages-18-east.internal.npmjs.com",tmp:"tmp/elliptic-6.4.0.tgz_1487798866428_0.30510620190761983"},_npmUser:{name:"indutny",email:"fedor@indutny.com"},_npmVersion:"3.10.8",_phantomChildren:{},_requested:{raw:"elliptic@^6.0.0",scope:null,escapedName:"elliptic",name:"elliptic",rawSpec:"^6.0.0",spec:">=6.0.0 <7.0.0",type:"range"},_requiredBy:["/browserify-sign","/create-ecdh"],_resolved:"http://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",_shasum:"cac9af8762c85836187003c8dfe193e5e2eae5df",_shrinkwrap:null,_spec:"elliptic@^6.0.0",_where:"/Users/lutovich/Projects/neo4j-javascript-driver/node_modules/browserify-sign",author:{name:"Fedor Indutny",email:"fedor@indutny.com"},bugs:{url:"https://github.com/indutny/elliptic/issues"},dependencies:{"bn.js":"^4.4.0",brorand:"^1.0.1","hash.js":"^1.0.0","hmac-drbg":"^1.0.0",inherits:"^2.0.1","minimalistic-assert":"^1.0.0","minimalistic-crypto-utils":"^1.0.0"},description:"EC cryptography",devDependencies:{brfs:"^1.4.3",coveralls:"^2.11.3",grunt:"^0.4.5","grunt-browserify":"^5.0.0","grunt-cli":"^1.2.0","grunt-contrib-connect":"^1.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^1.0.1","grunt-mocha-istanbul":"^3.0.1","grunt-saucelabs":"^8.6.2",istanbul:"^0.4.2",jscs:"^2.9.0",jshint:"^2.6.0",mocha:"^2.1.0"},directories:{},dist:{shasum:"cac9af8762c85836187003c8dfe193e5e2eae5df",tarball:"https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz"},files:["lib"],gitHead:"6b0d2b76caae91471649c8e21f0b1d3ba0f96090",homepage:"https://github.com/indutny/elliptic",keywords:["EC","Elliptic","curve","Cryptography"],license:"MIT",main:"lib/elliptic.js",maintainers:[{name:"indutny",email:"fedor@indutny.com"}],name:"elliptic",optionalDependencies:{},readme:"ERROR: No README data found!",repository:{type:"git",url:"git+ssh://git@github.com/indutny/elliptic.git"},scripts:{jscs:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",jshint:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",lint:"npm run jscs && npm run jshint",test:"npm run lint && npm run unit",unit:"istanbul test _mocha --reporter=spec test/index.js",version:"grunt dist && git add dist/"},version:"6.4.0"}},{}],212:[function(l,n,e){function u(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function t(l){return"function"==typeof l}function r(l){return"number"==typeof l}function i(l){return"object"==typeof l&&null!==l}function o(l){return void 0===l}n.exports=u,u.EventEmitter=u,u.prototype._events=void 0,u.prototype._maxListeners=void 0,u.defaultMaxListeners=10,u.prototype.setMaxListeners=function(l){if(!r(l)||l<0||isNaN(l))throw TypeError("n must be a positive number");return this._maxListeners=l,this},u.prototype.emit=function(l){var n,e,u,r,s,a;if(this._events||(this._events={}),"error"===l&&(!this._events.error||i(this._events.error)&&!this._events.error.length)){if(n=arguments[1],n instanceof Error)throw n;var f=new Error('Uncaught, unspecified "error" event. ('+n+")");throw f.context=n,f}if(e=this._events[l],o(e))return!1;if(t(e))switch(arguments.length){case 1:e.call(this);break;case 2:e.call(this,arguments[1]);break;case 3:e.call(this,arguments[1],arguments[2]);break;default:r=Array.prototype.slice.call(arguments,1),e.apply(this,r)}else if(i(e))for(r=Array.prototype.slice.call(arguments,1),a=e.slice(),u=a.length,s=0;s0&&this._events[l].length>e&&(this._events[l].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[l].length),"function"==typeof console.trace&&console.trace())),this},u.prototype.on=u.prototype.addListener,u.prototype.once=function(l,n){function e(){this.removeListener(l,e),u||(u=!0,n.apply(this,arguments))}if(!t(n))throw TypeError("listener must be a function");var u=!1;return e.listener=n,this.on(l,e),this},u.prototype.removeListener=function(l,n){var e,u,r,o;if(!t(n))throw TypeError("listener must be a function");if(!this._events||!this._events[l])return this;if(e=this._events[l],r=e.length,u=-1,e===n||t(e.listener)&&e.listener===n)delete this._events[l],this._events.removeListener&&this.emit("removeListener",l,n);else if(i(e)){for(o=r;o-- >0;)if(e[o]===n||e[o].listener&&e[o].listener===n){u=o;break}if(u<0)return this;1===e.length?(e.length=0,delete this._events[l]):e.splice(u,1),this._events.removeListener&&this.emit("removeListener",l,n)}return this},u.prototype.removeAllListeners=function(l){var n,e;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[l]&&delete this._events[l],this;if(0===arguments.length){for(n in this._events)"removeListener"!==n&&this.removeAllListeners(n);return this.removeAllListeners("removeListener"),this._events={},this}if(e=this._events[l],t(e))this.removeListener(l,e);else if(e)for(;e.length;)this.removeListener(l,e[e.length-1]);return delete this._events[l],this},u.prototype.listeners=function(l){var n;return n=this._events&&this._events[l]?t(this._events[l])?[this._events[l]]:this._events[l].slice():[]},u.prototype.listenerCount=function(l){if(this._events){var n=this._events[l];if(t(n))return 1;if(n)return n.length}return 0},u.listenerCount=function(l,n){return l.listenerCount(n)}},{}],213:[function(l,n,e){(function(e){function u(l,n,u,r){e.isBuffer(l)||(l=new e(l,"binary")),n&&!e.isBuffer(n)&&(n=new e(n,"binary")),u/=8,r=r||0;for(var i,o,s=0,a=0,f=new e(u),c=new e(r),h=0,d=[];;){if(h++>0&&d.push(i),d.push(l),n&&d.push(n),i=t(e.concat(d)),d=[],o=0,u>0)for(;;){if(0===u)break;if(o===i.length)break;f[s++]=i[o],u--,o++}if(r>0&&o!==i.length)for(;;){if(0===r)break;if(o===i.length)break;c[a++]=i[o],r--,o++}if(0===u&&0===r)break}for(o=0;o=this._delta8){l=this.pending;var e=l.length%this._delta8;this.pending=l.slice(l.length-e,l.length),0===this.pending.length&&(this.pending=null),l=r.join32(l,0,l.length-e,this.endian);for(var u=0;u>>24&255,u[t++]=l>>>16&255,u[t++]=l>>>8&255,u[t++]=255&l}else{u[t++]=255&l,u[t++]=l>>>8&255,u[t++]=l>>>16&255,u[t++]=l>>>24&255,u[t++]=0,u[t++]=0,u[t++]=0,u[t++]=0;for(var r=8;rthis.blockSize&&(l=(new this.Hash).update(l).digest()),i(l.length<=this.blockSize);for(var n=l.length;n>>3}function p(l){return R(l,17)^R(l,19)^l>>>10}function b(l,n,e,u){return 0===l?s(n,e,u):1===l||3===l?f(n,e,u):2===l?a(n,e,u):void 0}function v(l,n,e,u,t,r){var i=l&e^~l&t;return i<0&&(i+=4294967296),i}function _(l,n,e,u,t,r){var i=n&u^~n&r;return i<0&&(i+=4294967296),i}function y(l,n,e,u,t,r){var i=l&e^l&t^e&t;return i<0&&(i+=4294967296),i}function m(l,n,e,u,t,r){var i=n&u^n&r^u&r;return i<0&&(i+=4294967296),i}function g(l,n){var e=U(l,n,28),u=U(n,l,2),t=U(n,l,7),r=e^u^t;return r<0&&(r+=4294967296),r}function w(l,n){var e=N(l,n,28),u=N(n,l,2),t=N(n,l,7),r=e^u^t;return r<0&&(r+=4294967296),r}function k(l,n){var e=U(l,n,14),u=U(l,n,18),t=U(n,l,9),r=e^u^t;return r<0&&(r+=4294967296),r}function S(l,n){var e=N(l,n,14),u=N(l,n,18),t=N(n,l,9),r=e^u^t;return r<0&&(r+=4294967296),r}function E(l,n){var e=U(l,n,1),u=U(l,n,8),t=L(l,n,7),r=e^u^t;return r<0&&(r+=4294967296),r}function M(l,n){var e=N(l,n,1),u=N(l,n,8),t=D(l,n,7),r=e^u^t;return r<0&&(r+=4294967296),r}function I(l,n){var e=U(l,n,19),u=U(n,l,29),t=L(l,n,6),r=e^u^t;return r<0&&(r+=4294967296),r}function j(l,n){var e=N(l,n,19),u=N(n,l,29),t=D(l,n,6),r=e^u^t;return r<0&&(r+=4294967296),r}var A=l("../hash"),C=A.utils,x=C.assert,R=C.rotr32,B=C.rotl32,T=C.sum32,O=C.sum32_4,P=C.sum32_5,U=C.rotr64_hi,N=C.rotr64_lo,L=C.shr64_hi,D=C.shr64_lo,q=C.sum64,F=C.sum64_hi,z=C.sum64_lo,H=C.sum64_4_hi,K=C.sum64_4_lo,V=C.sum64_5_hi,Y=C.sum64_5_lo,W=A.common.BlockHash,X=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],G=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],Z=[1518500249,1859775393,2400959708,3395469782];C.inherits(u,W),e.sha256=u,u.blockSize=512,u.outSize=256,u.hmacStrength=192,u.padLength=64,u.prototype._update=function(l,n){for(var e=this.W,u=0;u<16;u++)e[u]=l[n+u];for(;u>8,i=255&t;r?e.push(r,i):e.push(i)}else for(var u=0;u>>24|l>>>8&65280|l<<8&16711680|(255&l)<<24;return n>>>0}function i(l,n){for(var e="",u=0;u>>0}return r}function f(l,n){for(var e=new Array(4*l.length),u=0,t=0;u>>24,e[t+1]=r>>>16&255,e[t+2]=r>>>8&255,e[t+3]=255&r):(e[t+3]=r>>>24,e[t+2]=r>>>16&255,e[t+1]=r>>>8&255,e[t]=255&r)}return e}function c(l,n){return l>>>n|l<<32-n}function h(l,n){return l<>>32-n}function d(l,n){return l+n>>>0}function p(l,n,e){return l+n+e>>>0}function b(l,n,e,u){return l+n+e+u>>>0}function v(l,n,e,u,t){return l+n+e+u+t>>>0}function _(l,n){if(!l)throw new Error(n||"Assertion failed")}function y(l,n,e,u){var t=l[n],r=l[n+1],i=u+r>>>0,o=(i>>0,l[n+1]=i}function m(l,n,e,u){var t=n+u>>>0,r=(t>>0}function g(l,n,e,u){var t=n+u;return t>>>0}function w(l,n,e,u,t,r,i,o){var s=0,a=n;a=a+u>>>0,s+=a>>0,s+=a>>0,s+=a>>0}function k(l,n,e,u,t,r,i,o){var s=n+u+r+o;return s>>>0}function S(l,n,e,u,t,r,i,o,s,a){var f=0,c=n;c=c+u>>>0,f+=c>>0,f+=c>>0,f+=c>>0,f+=c>>0}function E(l,n,e,u,t,r,i,o,s,a){var f=n+u+r+o+a;return f>>>0}function M(l,n,e){var u=n<<32-e|l>>>e;return u>>>0}function I(l,n,e){var u=l<<32-e|n>>>e;return u>>>0}function j(l,n,e){return l>>>e}function A(l,n,e){var u=l<<32-e|n>>>e;return u>>>0}var C=e,x=l("inherits");C.toArray=u,C.toHex=t,C.htonl=r,C.toHex32=i,C.zero2=o,C.zero8=s,C.join32=a,C.split32=f,C.rotr32=c,C.rotl32=h,C.sum32=d,C.sum32_3=p,C.sum32_4=b,C.sum32_5=v,C.assert=_,C.inherits=x,e.sum64=y,e.sum64_hi=m,e.sum64_lo=g,e.sum64_4_hi=w,e.sum64_4_lo=k,e.sum64_5_hi=S,e.sum64_5_lo=E,e.rotr64_hi=M,e.rotr64_lo=I,e.shr64_hi=j,e.shr64_lo=A},{inherits:223}],220:[function(l,n,e){"use strict";function u(l){if(!(this instanceof u))return new u(l);this.hash=l.hash,this.predResist=!!l.predResist,this.outLen=this.hash.outSize,this.minEntropy=l.minEntropy||this.hash.hmacStrength,this.reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var n=r.toArray(l.entropy,l.entropyEnc||"hex"),e=r.toArray(l.nonce,l.nonceEnc||"hex"),t=r.toArray(l.pers,l.persEnc||"hex");i(n.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(n,e,t)}var t=l("hash.js"),r=l("minimalistic-crypto-utils"),i=l("minimalistic-assert");n.exports=u,u.prototype._init=function(l,n,e){var u=l.concat(n).concat(e);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var t=0;t=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(l.concat(e||[])),this.reseed=1},u.prototype.generate=function(l,n,e,u){if(this.reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof n&&(u=e,e=n,n=null),e&&(e=r.toArray(e,u||"hex"),this._update(e));for(var t=[];t.length>1,f=-7,c=e?t-1:0,h=e?-1:1,d=l[n+c];for(c+=h,r=d&(1<<-f)-1,d>>=-f,f+=o;f>0;r=256*r+l[n+c],c+=h,f-=8);for(i=r&(1<<-f)-1,r>>=-f,f+=u;f>0;i=256*i+l[n+c],c+=h,f-=8);if(0===r)r=1-a;else{if(r===s)return i?NaN:(d?-1:1)*(1/0);i+=Math.pow(2,u),r-=a}return(d?-1:1)*i*Math.pow(2,r-u)},e.write=function(l,n,e,u,t,r){var i,o,s,a=8*r-t-1,f=(1<>1,h=23===t?Math.pow(2,-24)-Math.pow(2,-77):0,d=u?0:r-1,p=u?1:-1,b=n<0||0===n&&1/n<0?1:0;for(n=Math.abs(n),isNaN(n)||n===1/0?(o=isNaN(n)?1:0,i=f):(i=Math.floor(Math.log(n)/Math.LN2),n*(s=Math.pow(2,-i))<1&&(i--,s*=2),n+=i+c>=1?h/s:h*Math.pow(2,1-c),n*s>=2&&(i++,s/=2),i+c>=f?(o=0,i=f):i+c>=1?(o=(n*s-1)*Math.pow(2,t),i+=c):(o=n*Math.pow(2,c-1)*Math.pow(2,t),i=0));t>=8;l[e+d]=255&o,d+=p,o/=256,t-=8);for(i=i<0;l[e+d]=255&i,d+=p,i/=256,a-=8);l[e+d-p]|=128*b}},{}],222:[function(l,n,e){var u=[].indexOf;n.exports=function(l,n){if(u)return l.indexOf(n);for(var e=0;e>=7-u),new t(e)},u.prototype.test=function(l,n,e){var u=l.bitLength(),r=t.mont(l),i=new t(1).toRed(r);n||(n=Math.max(1,u/48|0));for(var o=l.subn(1),s=o.subn(1),a=0;!o.testn(a);a++);for(var f=l.shrn(a),c=o.toRed(r),h=!0;n>0;n--){var d=this._rand(s);e&&e(d);var p=d.toRed(r).redPow(f);if(0!==p.cmp(i)&&0!==p.cmp(c)){for(var b=1;b0;n--){var c=this._rand(o),h=l.gcd(c);if(0!==h.cmpn(1))return h;var d=c.toRed(u).redPow(a);if(0!==d.cmp(r)&&0!==d.cmp(f)){for(var p=1;p>8,i=255&t;r?e.push(r,i):e.push(i)}return e}function t(l){return 1===l.length?"0"+l:l}function r(l){for(var n="",e=0;e=0;u--){var t=l[u];"."===t?l.splice(u,1):".."===t?(l.splice(u,1),e++):e&&(l.splice(u,1),e--)}if(n)for(;e--;e)l.unshift("..");return l}function u(l,n){if(l.filter)return l.filter(n);for(var e=[],u=0;u=-1&&!t;r--){var i=r>=0?arguments[r]:l.cwd();if("string"!=typeof i)throw new TypeError("Arguments to path.resolve must be strings");i&&(e=i+"/"+e,t="/"===i.charAt(0))}return e=n(u(e.split("/"),function(l){return!!l}),!t).join("/"),(t?"/":"")+e||"."},e.normalize=function(l){var t=e.isAbsolute(l),r="/"===i(l,-1);return l=n(u(l.split("/"),function(l){return!!l}),!t).join("/"),l||t||(l="."),l&&r&&(l+="/"),(t?"/":"")+l},e.isAbsolute=function(l){return"/"===l.charAt(0)},e.join=function(){var l=Array.prototype.slice.call(arguments,0);return e.normalize(u(l,function(l,n){if("string"!=typeof l)throw new TypeError("Arguments to path.join must be strings");return l}).join("/"))},e.relative=function(l,n){function u(l){for(var n=0;n=0&&""===l[e];e--);return n>e?[]:l.slice(n,e-n+1)}l=e.resolve(l).substr(1),n=e.resolve(n).substr(1);for(var t=u(l.split("/")),r=u(n.split("/")),i=Math.min(t.length,r.length),o=i,s=0;s=6?"utf-8":"binary"}e.pbkdf2Sync=function(l,n,e,o,s){u.isBuffer(l)||(l=new u(l,i)),u.isBuffer(n)||(n=new u(n,i)),r(e,o),s=s||"sha1";var a,f=1,c=new u(o),h=new u(n.length+4);n.copy(h,0,0,n.length);for(var d,p,b=1;b<=f;b++){h.writeUInt32BE(b,n.length);var v=t(s,l).update(h).digest();a||(a=v.length,p=new u(a),f=Math.ceil(o/a),d=o-(f-1)*a),v.copy(p,0,0,a);for(var _=1;_u||n!==n)throw new TypeError("Bad key length")}},{}],238:[function(l,n,e){(function(l){"use strict";function e(n,e,u,t){if("function"!=typeof n)throw new TypeError('"callback" argument must be a function');var r,i,o=arguments.length;switch(o){case 0:case 1:return l.nextTick(n);case 2:return l.nextTick(function(){n.call(null,e)});case 3:return l.nextTick(function(){n.call(null,e,u)});case 4:return l.nextTick(function(){n.call(null,e,u,t)});default:for(r=new Array(o-1),i=0;i1)for(var e=1;e=n.length){r++;break}var i=n.slice(2,t-1);n.slice(t-1,t);if(("0002"!==u.toString("hex")&&!e||"0001"!==u.toString("hex")&&e)&&r++,i.length<8&&r++,r)throw new Error("decryption error");return n.slice(t)}function r(l,n){l=new e(l),n=new e(n);var u=0,t=l.length;l.length!==n.length&&(u++,t=Math.min(l.length,n.length));for(var r=-1;++rc||new a(n).cmp(s.modulus)>=0)throw new Error("decryption error");var d;d=r?h(new a(n),s):f(n,s);var p=new e(c-d.length);if(p.fill(0),d=e.concat([p,d],c),4===o)return u(s,d);if(1===o)return t(s,d,r);if(3===o)return d;throw new Error("unknown padding")}}).call(this,l("buffer").Buffer)},{"./mgf":241,"./withPublic":244,"./xor":245,"bn.js":36,"browserify-rsa":57,buffer:66,"create-hash":181,"parse-asn1":234}],243:[function(l,n,e){(function(e){function u(l,n){var u=l.modulus.byteLength(),t=n.length,r=s("sha1").update(new e("")).digest(),i=r.length,h=2*i;if(t>u-h-2)throw new Error("message too long");var d=new e(u-t-h-2);d.fill(0);var p=u-i-1,b=o(i),v=f(e.concat([r,d,new e([1]),n],p),a(b,p)),_=f(b,a(v,i));return new c(e.concat([new e([0]),_,v],u))}function t(l,n,u){var t=n.length,i=l.modulus.byteLength();if(t>i-11)throw new Error("message too long");var o;return u?(o=new e(i-t-3),o.fill(255)):o=r(i-t-3),new c(e.concat([new e([0,u?1:2]),o,new e([0]),n],i))}function r(l,n){for(var u,t=new e(l),r=0,i=o(2*l),s=0;r=0)throw new Error("data too long for modulus")}return e?d(o,s):h(o,s)}}).call(this,l("buffer").Buffer)},{"./mgf":241,"./withPublic":244,"./xor":245,"bn.js":36,"browserify-rsa":57,buffer:66,"create-hash":181,"parse-asn1":234,randombytes:246}],244:[function(l,n,e){(function(e){function u(l,n){return new e(l.toRed(t.mont(n.modulus)).redPow(new t(n.publicExponent)).fromRed().toArray())}var t=l("bn.js");n.exports=u}).call(this,l("buffer").Buffer)},{"bn.js":36,buffer:66}],245:[function(l,n,e){n.exports=function(l,n){for(var e=l.length,u=-1;++u65536)throw new Error("requested too many random bytes");var r=new e.Uint8Array(n);n>0&&i.getRandomValues(r);var o=new u(r.buffer);return"function"==typeof t?l.nextTick(function(){t(null,o)}):o}var i=e.crypto||e.msCrypto;i&&i.getRandomValues?n.exports=r:n.exports=t}).call(this,l("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},l("buffer").Buffer)},{_process:239,buffer:66}],247:[function(l,n,e){n.exports=l("./lib/_stream_duplex.js")},{"./lib/_stream_duplex.js":248}],248:[function(l,n,e){"use strict";function u(l){return this instanceof u?(a.call(this,l),f.call(this,l),l&&l.readable===!1&&(this.readable=!1),l&&l.writable===!1&&(this.writable=!1),this.allowHalfOpen=!0,l&&l.allowHalfOpen===!1&&(this.allowHalfOpen=!1),void this.once("end",t)):new u(l)}function t(){this.allowHalfOpen||this._writableState.ended||o(r,this)}function r(l){l.end()}var i=Object.keys||function(l){var n=[];for(var e in l)n.push(e);return n};n.exports=u;var o=l("process-nextick-args"),s=l("core-util-is");s.inherits=l("inherits");var a=l("./_stream_readable"),f=l("./_stream_writable");s.inherits(u,a);for(var c=i(f.prototype),h=0;h0)if(n.ended&&!t){var i=new Error("stream.push() after EOF");l.emit("error",i)}else if(n.endEmitted&&t){var s=new Error("stream.unshift() after end event");l.emit("error",s)}else{var a;!n.decoder||t||u||(e=n.decoder.write(e),a=!n.objectMode&&0===e.length),t||(n.reading=!1),a||(n.flowing&&0===n.length&&!n.sync?(l.emit("data",e),l.read(0)):(n.length+=n.objectMode?1:e.length,t?n.buffer.unshift(e):n.buffer.push(e),n.needReadable&&h(l))),p(l,n)}else t||(n.reading=!1);return o(n)}function o(l){return!l.ended&&(l.needReadable||l.length=F?l=F:(l--,l|=l>>>1,l|=l>>>2,l|=l>>>4,l|=l>>>8,l|=l>>>16,l++),l}function a(l,n){return l<=0||0===n.length&&n.ended?0:n.objectMode?1:l!==l?n.flowing&&n.length?n.buffer.head.data.length:n.length:(l>n.highWaterMark&&(n.highWaterMark=s(l)),l<=n.length?l:n.ended?n.length:(n.needReadable=!0,0))}function f(l,n){var e=null;return O.isBuffer(n)||"string"==typeof n||null===n||void 0===n||l.objectMode||(e=new TypeError("Invalid non-string/buffer chunk")),e}function c(l,n){if(!n.ended){if(n.decoder){var e=n.decoder.end();e&&e.length&&(n.buffer.push(e),n.length+=n.objectMode?1:e.length)}n.ended=!0,h(l)}}function h(l){var n=l._readableState;n.needReadable=!1,n.emittedReadable||(L("emitReadable",n.flowing),n.emittedReadable=!0,n.sync?x(d,l):d(l))}function d(l){L("emit readable"),l.emit("readable"),g(l)}function p(l,n){n.readingMore||(n.readingMore=!0,x(b,l,n))}function b(l,n){for(var e=n.length;!n.reading&&!n.flowing&&!n.ended&&n.length=n.length?(e=n.decoder?n.buffer.join(""):1===n.buffer.length?n.buffer.head.data:n.buffer.concat(n.length),n.buffer.clear()):e=k(l,n.buffer,n.decoder),e}function k(l,n,e){var u;return lr.length?r.length:l;if(t+=i===r.length?r:r.slice(0,l),l-=i,0===l){i===r.length?(++u,e.next?n.head=e.next:n.head=n.tail=null):(n.head=e,e.data=r.slice(i));break}++u}return n.length-=u,t}function E(l,n){var e=P.allocUnsafe(l),u=n.head,t=1;for(u.data.copy(e),l-=u.data.length;u=u.next;){var r=u.data,i=l>r.length?r.length:l;if(r.copy(e,e.length-l,0,i),l-=i,0===l){i===r.length?(++t,u.next?n.head=u.next:n.head=n.tail=null):(n.head=u,u.data=r.slice(i));break}++t}return n.length-=t,e}function M(l){var n=l._readableState;if(n.length>0)throw new Error('"endReadable()" called on non-empty stream');n.endEmitted||(n.ended=!0,x(I,n,l))}function I(l,n){l.endEmitted||0!==l.length||(l.endEmitted=!0,n.readable=!1,n.emit("end"))}function j(l,n){for(var e=0,u=l.length;e=n.highWaterMark||n.ended))return L("read: emitReadable",n.length,n.ended),0===n.length&&n.ended?M(this):h(this),null;if(l=a(l,n),0===l&&n.ended)return 0===n.length&&M(this),null;var u=n.needReadable;L("need readable",u),(0===n.length||n.length-l0?w(l,n):null,null===t?(n.needReadable=!0,l=0):n.length-=l,0===n.length&&(n.ended||(n.needReadable=!0),e!==l&&n.ended&&M(this)),null!==t&&this.emit("data",t),t},r.prototype._read=function(l){this.emit("error",new Error("_read() is not implemented"))},r.prototype.pipe=function(l,n){function t(l){L("onunpipe"),l===h&&i()}function r(){L("onend"),l.end()}function i(){L("cleanup"),l.removeListener("close",a),l.removeListener("finish",f),l.removeListener("drain",_),l.removeListener("error",s),l.removeListener("unpipe",t),h.removeListener("end",r),h.removeListener("end",i),h.removeListener("data",o),y=!0,!d.awaitDrain||l._writableState&&!l._writableState.needDrain||_()}function o(n){L("ondata"),m=!1;var e=l.write(n);!1!==e||m||((1===d.pipesCount&&d.pipes===l||d.pipesCount>1&&A(d.pipes,l)!==-1)&&!y&&(L("false write response, pause",h._readableState.awaitDrain),h._readableState.awaitDrain++,m=!0),h.pause())}function s(n){L("onerror",n),c(),l.removeListener("error",s),0===T(l,"error")&&l.emit("error",n)}function a(){l.removeListener("finish",f),c()}function f(){L("onfinish"),l.removeListener("close",a),c()}function c(){L("unpipe"),h.unpipe(l)}var h=this,d=this._readableState;switch(d.pipesCount){case 0:d.pipes=l;break;case 1:d.pipes=[d.pipes,l];break;default:d.pipes.push(l)}d.pipesCount+=1,L("pipe count=%d opts=%j",d.pipesCount,n);var p=(!n||n.end!==!1)&&l!==e.stdout&&l!==e.stderr,b=p?r:i;d.endEmitted?x(b):h.once("end",b),l.on("unpipe",t);var _=v(h);l.on("drain",_);var y=!1,m=!1;return h.on("data",o),u(l,"error",s),l.once("close",a),l.once("finish",f),l.emit("pipe",h),d.flowing||(L("pipe resume"),h.resume()),l},r.prototype.unpipe=function(l){var n=this._readableState;if(0===n.pipesCount)return this;if(1===n.pipesCount)return l&&l!==n.pipes?this:(l||(l=n.pipes),n.pipes=null,n.pipesCount=0,n.flowing=!1,l&&l.emit("unpipe",this),this);if(!l){var e=n.pipes,u=n.pipesCount;n.pipes=null,n.pipesCount=0,n.flowing=!1;for(var t=0;t-1?setImmediate:E;i.WritableState=r;var I=l("core-util-is");I.inherits=l("inherits");var j,A={deprecate:l("util-deprecate")};!function(){try{j=l("stream")}catch(n){}finally{j||(j=l("events").EventEmitter)}}();var C=l("buffer").Buffer,x=l("buffer-shims");I.inherits(i,j),r.prototype.getBuffer=function(){for(var l=this.bufferedRequest,n=[];l;)n.push(l),l=l.next;return n},function(){try{Object.defineProperty(r.prototype,"buffer",{get:A.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.")})}catch(l){}}();var R;"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(R=Function.prototype[Symbol.hasInstance],Object.defineProperty(i,Symbol.hasInstance,{value:function(l){return!!R.call(this,l)||l&&l._writableState instanceof r}})):R=function(l){return l instanceof this},i.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},i.prototype.write=function(l,n,e){var t=this._writableState,r=!1,i=C.isBuffer(l);return"function"==typeof n&&(e=n,n=null),i?n="buffer":n||(n=t.defaultEncoding),"function"!=typeof e&&(e=u),t.ended?o(this,e):(i||s(this,t,l,e))&&(t.pendingcb++,r=f(this,t,i,l,n,e)),r},i.prototype.cork=function(){var l=this._writableState;l.corked++},i.prototype.uncork=function(){var l=this._writableState;l.corked&&(l.corked--,l.writing||l.corked||l.finished||l.bufferProcessing||!l.bufferedRequest||_(this,l))},i.prototype.setDefaultEncoding=function(l){if("string"==typeof l&&(l=l.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((l+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+l);return this._writableState.defaultEncoding=l,this},i.prototype._write=function(l,n,e){e(new Error("_write() is not implemented"))},i.prototype._writev=null,i.prototype.end=function(l,n,e){var u=this._writableState;"function"==typeof l?(e=l,l=null,n=null):"function"==typeof n&&(e=n,n=null),null!==l&&void 0!==l&&this.write(l,n),u.corked&&(u.corked=1,this.uncork()),u.ending||u.finished||w(this,u,e)}}).call(this,l("_process"))},{"./_stream_duplex":248,_process:239,buffer:66,"buffer-shims":64,"core-util-is":179,events:212,inherits:223,"process-nextick-args":238,"util-deprecate":269}],253:[function(l,n,e){"use strict";function u(){this.head=null,this.tail=null,this.length=0}var t=(l("buffer").Buffer,l("buffer-shims"));n.exports=u,u.prototype.push=function(l){var n={data:l,next:null};this.length>0?this.tail.next=n:this.head=n,this.tail=n,++this.length},u.prototype.unshift=function(l){var n={data:l,next:this.head};0===this.length&&(this.tail=n),this.head=n,++this.length},u.prototype.shift=function(){if(0!==this.length){var l=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,l}},u.prototype.clear=function(){this.head=this.tail=null,this.length=0},u.prototype.join=function(l){if(0===this.length)return"";for(var n=this.head,e=""+n.data;n=n.next;)e+=l+n.data;return e},u.prototype.concat=function(l){if(0===this.length)return t.alloc(0);if(1===this.length)return this.head.data;for(var n=t.allocUnsafe(l>>>0),e=this.head,u=0;e;)e.data.copy(n,u),u+=e.data.length,e=e.next;return n}},{buffer:66,"buffer-shims":64}],254:[function(l,n,e){n.exports=l("./lib/_stream_passthrough.js")},{"./lib/_stream_passthrough.js":249}],255:[function(l,n,e){(function(u){var t=function(){try{return l("stream")}catch(n){}}();e=n.exports=l("./lib/_stream_readable.js"),e.Stream=t||e,e.Readable=e,e.Writable=l("./lib/_stream_writable.js"),e.Duplex=l("./lib/_stream_duplex.js"),e.Transform=l("./lib/_stream_transform.js"),e.PassThrough=l("./lib/_stream_passthrough.js"),!u.browser&&"disable"===u.env.READABLE_STREAM&&t&&(n.exports=t)}).call(this,l("_process"))},{"./lib/_stream_duplex.js":248,"./lib/_stream_passthrough.js":249,"./lib/_stream_readable.js":250,"./lib/_stream_transform.js":251,"./lib/_stream_writable.js":252,_process:239}],256:[function(l,n,e){n.exports=l("./lib/_stream_transform.js")},{"./lib/_stream_transform.js":251}],257:[function(l,n,e){n.exports=l("./lib/_stream_writable.js")},{"./lib/_stream_writable.js":252}],258:[function(l,n,e){(function(l){function e(l){for(var n=[],e=0,u=0;e>>5]|=l[e]<<24-u%32;return n}function u(l){for(var n=[],e=0;e<32*l.length;e+=8)n.push(l[e>>>5]>>>24-e%32&255);return n}function t(l,n,e){for(var u=0;u<16;u++){var t=e+u,c=n[t];n[t]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}var y,m,g,w,k,S,E,M,I,j;S=y=l[0],E=m=l[1],M=g=l[2],I=w=l[3],j=k=l[4];var A;for(u=0;u<80;u+=1)A=y+n[e+h[u]]|0,A+=u<16?r(m,g,w)+v[0]:u<32?i(m,g,w)+v[1]:u<48?o(m,g,w)+v[2]:u<64?s(m,g,w)+v[3]:a(m,g,w)+v[4],A=0|A,A=f(A,p[u]),A=A+k|0,y=k,k=w,w=f(g,10),g=m,m=A,A=S+n[e+d[u]]|0,A+=u<16?a(E,M,I)+_[0]:u<32?s(E,M,I)+_[1]:u<48?o(E,M,I)+_[2]:u<64?i(E,M,I)+_[3]:r(E,M,I)+_[4],A=0|A,A=f(A,b[u]),A=A+j|0,S=j,j=I,I=f(M,10),M=E,E=A;A=l[1]+g+I|0,l[1]=l[2]+w+j|0,l[2]=l[3]+k+S|0,l[3]=l[4]+y+E|0,l[4]=l[0]+m+M|0,l[0]=A}function r(l,n,e){return l^n^e}function i(l,n,e){return l&n|~l&e}function o(l,n,e){return(l|~n)^e}function s(l,n,e){return l&e|n&~e}function a(l,n,e){return l^(n|~e)}function f(l,n){return l<>>32-n}function c(n){var r=[1732584193,4023233417,2562383102,271733878,3285377520];"string"==typeof n&&(n=new l(n,"utf8"));var i=e(n),o=8*n.length,s=8*n.length;i[o>>>5]|=128<<24-o%32,i[(o+64>>>9<<4)+14]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8);for(var a=0;a>>24)|4278255360&(f<<24|f>>>8)}var c=u(r);return new l(c)}var h=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],d=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],p=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],b=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],v=[0,1518500249,1859775393,2400959708,2840853838],_=[1352829926,1548603684,1836072691,2053994217,0];n.exports=c}).call(this,l("buffer").Buffer)},{buffer:66}],259:[function(l,n,e){(function(l){function e(n,e){this._block=new l(n),this._finalSize=e,this._blockSize=n,this._len=0,this._s=0}e.prototype.update=function(n,e){"string"==typeof n&&(e=e||"utf8",n=new l(n,e));for(var u=this._len+=n.length,t=this._s||0,r=0,i=this._block;t=8*this._finalSize&&(this._update(this._block),this._block.fill(0)),this._block.writeInt32BE(n,this._blockSize-4);var e=this._update(this._block)||this._hash();return l?e.toString(l):e},e.prototype._update=function(){throw new Error("_update must be implemented by subclass")},n.exports=e}).call(this,l("buffer").Buffer)},{buffer:66}],260:[function(l,n,e){var e=n.exports=function(l){l=l.toLowerCase();var n=e[l];if(!n)throw new Error(l+" is not supported (we accept pull requests)");return new n};e.sha=l("./sha"),e.sha1=l("./sha1"),e.sha224=l("./sha224"),e.sha256=l("./sha256"),e.sha384=l("./sha384"),e.sha512=l("./sha512")},{"./sha":261,"./sha1":262,"./sha224":263,"./sha256":264,"./sha384":265,"./sha512":266}],261:[function(l,n,e){(function(e){function u(){this.init(),this._w=f,s.call(this,64,56)}function t(l){return l<<5|l>>>27}function r(l){return l<<30|l>>>2}function i(l,n,e,u){return 0===l?n&e|~n&u:2===l?n&e|n&u|e&u:n^e^u}var o=l("inherits"),s=l("./hash"),a=[1518500249,1859775393,-1894007588,-899497514],f=new Array(80);o(u,s),u.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},u.prototype._update=function(l){for(var n=this._w,e=0|this._a,u=0|this._b,o=0|this._c,s=0|this._d,f=0|this._e,c=0;c<16;++c)n[c]=l.readInt32BE(4*c);for(;c<80;++c)n[c]=n[c-3]^n[c-8]^n[c-14]^n[c-16];for(var h=0;h<80;++h){var d=~~(h/20),p=t(e)+i(d,u,o,s)+f+n[h]+a[d]|0;f=s,s=o,o=r(u),u=e,e=p}this._a=e+this._a|0,this._b=u+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=f+this._e|0},u.prototype._hash=function(){var l=new e(20);return l.writeInt32BE(0|this._a,0),l.writeInt32BE(0|this._b,4),l.writeInt32BE(0|this._c,8),l.writeInt32BE(0|this._d,12),l.writeInt32BE(0|this._e,16),l},n.exports=u}).call(this,l("buffer").Buffer)},{"./hash":259,buffer:66,inherits:223}],262:[function(l,n,e){(function(e){function u(){this.init(),this._w=c,a.call(this,64,56)}function t(l){return l<<1|l>>>31}function r(l){return l<<5|l>>>27}function i(l){return l<<30|l>>>2}function o(l,n,e,u){return 0===l?n&e|~n&u:2===l?n&e|n&u|e&u:n^e^u}var s=l("inherits"),a=l("./hash"),f=[1518500249,1859775393,-1894007588,-899497514],c=new Array(80);s(u,a),u.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},u.prototype._update=function(l){for(var n=this._w,e=0|this._a,u=0|this._b,s=0|this._c,a=0|this._d,c=0|this._e,h=0;h<16;++h)n[h]=l.readInt32BE(4*h);for(;h<80;++h)n[h]=t(n[h-3]^n[h-8]^n[h-14]^n[h-16]);for(var d=0;d<80;++d){var p=~~(d/20),b=r(e)+o(p,u,s,a)+c+n[d]+f[p]|0;c=a,a=s,s=i(u),u=e,e=b}this._a=e+this._a|0,this._b=u+this._b|0,this._c=s+this._c|0,this._d=a+this._d|0,this._e=c+this._e|0},u.prototype._hash=function(){var l=new e(20);return l.writeInt32BE(0|this._a,0),l.writeInt32BE(0|this._b,4),l.writeInt32BE(0|this._c,8),l.writeInt32BE(0|this._d,12),l.writeInt32BE(0|this._e,16),l},n.exports=u}).call(this,l("buffer").Buffer)},{"./hash":259,buffer:66,inherits:223}],263:[function(l,n,e){(function(e){function u(){this.init(),this._w=o,i.call(this,64,56)}var t=l("inherits"),r=l("./sha256"),i=l("./hash"),o=new Array(64);t(u,r),u.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},u.prototype._hash=function(){var l=new e(28);return l.writeInt32BE(this._a,0),l.writeInt32BE(this._b,4),l.writeInt32BE(this._c,8),l.writeInt32BE(this._d,12),l.writeInt32BE(this._e,16),l.writeInt32BE(this._f,20),l.writeInt32BE(this._g,24),l},n.exports=u}).call(this,l("buffer").Buffer)},{"./hash":259,"./sha256":264,buffer:66,inherits:223}],264:[function(l,n,e){(function(e){function u(){this.init(),this._w=d,c.call(this,64,56)}function t(l,n,e){return e^l&(n^e)}function r(l,n,e){return l&n|e&(l|n)}function i(l){return(l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10)}function o(l){return(l>>>6|l<<26)^(l>>>11|l<<21)^(l>>>25|l<<7)}function s(l){return(l>>>7|l<<25)^(l>>>18|l<<14)^l>>>3}function a(l){return(l>>>17|l<<15)^(l>>>19|l<<13)^l>>>10}var f=l("inherits"),c=l("./hash"),h=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],d=new Array(64);f(u,c),u.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},u.prototype._update=function(l){for(var n=this._w,e=0|this._a,u=0|this._b,f=0|this._c,c=0|this._d,d=0|this._e,p=0|this._f,b=0|this._g,v=0|this._h,_=0;_<16;++_)n[_]=l.readInt32BE(4*_);for(;_<64;++_)n[_]=a(n[_-2])+n[_-7]+s(n[_-15])+n[_-16]|0;for(var y=0;y<64;++y){var m=v+o(d)+t(d,p,b)+h[y]+n[y]|0,g=i(e)+r(e,u,f)|0;v=b,b=p,p=d,d=c+m|0,c=f,f=u,u=e,e=m+g|0}this._a=e+this._a|0,this._b=u+this._b|0,this._c=f+this._c|0,this._d=c+this._d|0,this._e=d+this._e|0,this._f=p+this._f|0,this._g=b+this._g|0,this._h=v+this._h|0},u.prototype._hash=function(){var l=new e(32);return l.writeInt32BE(this._a,0),l.writeInt32BE(this._b,4),l.writeInt32BE(this._c,8),l.writeInt32BE(this._d,12),l.writeInt32BE(this._e,16),l.writeInt32BE(this._f,20),l.writeInt32BE(this._g,24),l.writeInt32BE(this._h,28),l},n.exports=u}).call(this,l("buffer").Buffer)},{"./hash":259,buffer:66,inherits:223}],265:[function(l,n,e){(function(e){function u(){this.init(),this._w=o,i.call(this,128,112)}var t=l("inherits"),r=l("./sha512"),i=l("./hash"),o=new Array(160);t(u,r),u.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},u.prototype._hash=function(){function l(l,e,u){n.writeInt32BE(l,u),n.writeInt32BE(e,u+4)}var n=new e(48);return l(this._ah,this._al,0),l(this._bh,this._bl,8),l(this._ch,this._cl,16),l(this._dh,this._dl,24),l(this._eh,this._el,32),l(this._fh,this._fl,40),n},n.exports=u}).call(this,l("buffer").Buffer)},{"./hash":259,"./sha512":266,buffer:66,inherits:223}],266:[function(l,n,e){(function(e){function u(){this.init(),this._w=v,p.call(this,128,112)}function t(l,n,e){return e^l&(n^e)}function r(l,n,e){return l&n|e&(l|n)}function i(l,n){return(l>>>28|n<<4)^(n>>>2|l<<30)^(n>>>7|l<<25)}function o(l,n){return(l>>>14|n<<18)^(l>>>18|n<<14)^(n>>>9|l<<23)}function s(l,n){return(l>>>1|n<<31)^(l>>>8|n<<24)^l>>>7}function a(l,n){return(l>>>1|n<<31)^(l>>>8|n<<24)^(l>>>7|n<<25)}function f(l,n){return(l>>>19|n<<13)^(n>>>29|l<<3)^l>>>6}function c(l,n){return(l>>>19|n<<13)^(n>>>29|l<<3)^(l>>>6|n<<26)}function h(l,n){return l>>>0>>0?1:0}var d=l("inherits"),p=l("./hash"),b=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],v=new Array(160);d(u,p),u.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},u.prototype._update=function(l){for(var n=this._w,e=0|this._ah,u=0|this._bh,d=0|this._ch,p=0|this._dh,v=0|this._eh,_=0|this._fh,y=0|this._gh,m=0|this._hh,g=0|this._al,w=0|this._bl,k=0|this._cl,S=0|this._dl,E=0|this._el,M=0|this._fl,I=0|this._gl,j=0|this._hl,A=0;A<32;A+=2)n[A]=l.readInt32BE(4*A),n[A+1]=l.readInt32BE(4*A+4);for(;A<160;A+=2){var C=n[A-30],x=n[A-30+1],R=s(C,x),B=a(x,C);C=n[A-4],x=n[A-4+1];var T=f(C,x),O=c(x,C),P=n[A-14],U=n[A-14+1],N=n[A-32],L=n[A-32+1],D=B+U|0,q=R+P+h(D,B)|0;D=D+O|0,q=q+T+h(D,O)|0,D=D+L|0,q=q+N+h(D,L)|0,n[A]=q,n[A+1]=D}for(var F=0;F<160;F+=2){q=n[F],D=n[F+1];var z=r(e,u,d),H=r(g,w,k),K=i(e,g),V=i(g,e),Y=o(v,E),W=o(E,v),X=b[F],G=b[F+1],Z=t(v,_,y),J=t(E,M,I),$=j+W|0,Q=m+Y+h($,j)|0;$=$+J|0,Q=Q+Z+h($,J)|0,$=$+G|0,Q=Q+X+h($,G)|0,$=$+D|0,Q=Q+q+h($,D)|0;var ll=V+H|0,nl=K+z+h(ll,V)|0;m=y,j=I,y=_,I=M,_=v,M=E,E=S+$|0,v=p+Q+h(E,S)|0,p=d,S=k,d=u,k=w,u=e,w=g,g=$+ll|0,e=Q+nl+h(g,$)|0}this._al=this._al+g|0,this._bl=this._bl+w|0,this._cl=this._cl+k|0,this._dl=this._dl+S|0,this._el=this._el+E|0,this._fl=this._fl+M|0,this._gl=this._gl+I|0,this._hl=this._hl+j|0,this._ah=this._ah+e+h(this._al,g)|0,this._bh=this._bh+u+h(this._bl,w)|0,this._ch=this._ch+d+h(this._cl,k)|0,this._dh=this._dh+p+h(this._dl,S)|0,this._eh=this._eh+v+h(this._el,E)|0,this._fh=this._fh+_+h(this._fl,M)|0,this._gh=this._gh+y+h(this._gl,I)|0,this._hh=this._hh+m+h(this._hl,j)|0},u.prototype._hash=function(){function l(l,e,u){n.writeInt32BE(l,u),n.writeInt32BE(e,u+4)}var n=new e(64);return l(this._ah,this._al,0),l(this._bh,this._bl,8),l(this._ch,this._cl,16),l(this._dh,this._dl,24),l(this._eh,this._el,32),l(this._fh,this._fl,40),l(this._gh,this._gl,48),l(this._hh,this._hl,56),n},n.exports=u}).call(this,l("buffer").Buffer)},{"./hash":259,buffer:66,inherits:223}],267:[function(l,n,e){function u(){t.call(this)}n.exports=u;var t=l("events").EventEmitter,r=l("inherits");r(u,t),u.Readable=l("readable-stream/readable.js"),u.Writable=l("readable-stream/writable.js"),u.Duplex=l("readable-stream/duplex.js"),u.Transform=l("readable-stream/transform.js"),u.PassThrough=l("readable-stream/passthrough.js"),u.Stream=u,u.prototype.pipe=function(l,n){function e(n){l.writable&&!1===l.write(n)&&a.pause&&a.pause()}function u(){a.readable&&a.resume&&a.resume()}function r(){f||(f=!0,l.end())}function i(){f||(f=!0,"function"==typeof l.destroy&&l.destroy())}function o(l){if(s(),0===t.listenerCount(this,"error"))throw l}function s(){a.removeListener("data",e),l.removeListener("drain",u),a.removeListener("end",r),a.removeListener("close",i),a.removeListener("error",o),l.removeListener("error",o),a.removeListener("end",s),a.removeListener("close",s),l.removeListener("close",s)}var a=this;a.on("data",e),l.on("drain",u),l._isStdio||n&&n.end===!1||(a.on("end",r),a.on("close",i));var f=!1;return a.on("error",o),l.on("error",o),a.on("end",s),a.on("close",s),l.on("close",s),l.emit("pipe",a),l}},{events:212,inherits:223,"readable-stream/duplex.js":247,"readable-stream/passthrough.js":254,"readable-stream/readable.js":255,"readable-stream/transform.js":256,"readable-stream/writable.js":257}],268:[function(l,n,e){function u(l){if(l&&!s(l))throw new Error("Unknown encoding: "+l)}function t(l){return l.toString(this.encoding)}function r(l){this.charReceived=l.length%2,this.charLength=this.charReceived?2:0}function i(l){this.charReceived=l.length%3,this.charLength=this.charReceived?3:0}var o=l("buffer").Buffer,s=o.isEncoding||function(l){switch(l&&l.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}},a=e.StringDecoder=function(l){switch(this.encoding=(l||"utf8").toLowerCase().replace(/[-_]/,""),u(l),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=r;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=i;break;default:return void(this.write=t)}this.charBuffer=new o(6),this.charReceived=0,this.charLength=0};a.prototype.write=function(l){for(var n="";this.charLength;){var e=l.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:l.length;if(l.copy(this.charBuffer,this.charReceived,0,e),this.charReceived+=e,this.charReceived=55296&&u<=56319)){if(this.charReceived=this.charLength=0,0===l.length)return n;break}this.charLength+=this.surrogateSize,n=""}this.detectIncompleteChar(l);var t=l.length;this.charLength&&(l.copy(this.charBuffer,0,l.length-this.charReceived,t),t-=this.charReceived),n+=l.toString(this.encoding,0,t);var t=n.length-1,u=n.charCodeAt(t);if(u>=55296&&u<=56319){var r=this.surrogateSize;return this.charLength+=r,this.charReceived+=r,this.charBuffer.copy(this.charBuffer,r,0,r),l.copy(this.charBuffer,0,0,r),n.substring(0,t)}return n},a.prototype.detectIncompleteChar=function(l){for(var n=l.length>=3?3:l.length;n>0;n--){var e=l[l.length-n];if(1==n&&e>>5==6){this.charLength=2;break}if(n<=2&&e>>4==14){this.charLength=3;break}if(n<=3&&e>>3==30){this.charLength=4;break}}this.charReceived=n},a.prototype.end=function(l){var n="";if(l&&l.length&&(n=this.write(l)),this.charReceived){var e=this.charReceived,u=this.charBuffer,t=this.encoding;n+=u.slice(0,e).toString(t)}return n}},{buffer:66}],269:[function(l,n,e){(function(l){function e(l,n){function e(){if(!t){if(u("throwDeprecation"))throw new Error(n);u("traceDeprecation")?console.trace(n):console.warn(n),t=!0}return l.apply(this,arguments)}if(u("noDeprecation"))return l;var t=!1;return e}function u(n){try{if(!l.localStorage)return!1}catch(e){return!1}var u=l.localStorage[n];return null!=u&&"true"===String(u).toLowerCase()}n.exports=e}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],270:[function(require,module,exports){function Context(){}var indexOf=require("indexof"),Object_keys=function(l){if(Object.keys)return Object.keys(l);var n=[];for(var e in l)n.push(e);return n},forEach=function(l,n){if(l.forEach)return l.forEach(n);for(var e=0;e>6],t=0===(32&e);if(31===(31&e)){var r=e;for(e=0;128===(128&r);){if(r=l.readUInt8(n),l.isError(r))return r;e<<=7,e|=127&r}}else e&=31;var i=c.tag[e];return{cls:u,primitive:t,tag:e,tagStr:i}}function i(l,n,e){var u=l.readUInt8(e);if(l.isError(u))return u;if(!n&&128===u)return null;if(0===(128&u))return u;var t=127&u;if(t>4)return l.error("length octect is too long");u=0;for(var r=0;r=31?u.error("Multi-octet tag encoding unsupported"):(n||(t|=32),t|=c.tagClassByName[e||"universal"]<<6)}var o=l("inherits"),s=l("buffer").Buffer,a=l("../../asn1"),f=a.base,c=a.constants.der;n.exports=u,u.prototype.encode=function(l,n){return this.tree._encode(l,n).join()},o(t,f.Node),t.prototype._encodeComposite=function(l,n,e,u){var t=i(l,n,e,this.reporter);if(u.length<128){var r=new s(2);return r[0]=t,r[1]=u.length,this._createEncoderBuffer([r,u])}for(var o=1,a=u.length;a>=256;a>>=8)o++;var r=new s(2+o);r[0]=t,r[1]=128|o;for(var a=1+o,f=u.length;f>0;a--,f>>=8)r[a]=255&f;return this._createEncoderBuffer([r,u])},t.prototype._encodeStr=function(l,n){if("bitstr"===n)return this._createEncoderBuffer([0|l.unused,l.data]);if("bmpstr"===n){for(var e=new s(2*l.length),u=0;u=40)return this.reporter.error("Second objid identifier OOB");l.splice(0,2,40*l[0]+l[1])}for(var t=0,u=0;u=128;r>>=7)t++}for(var i=new s(t),o=i.length-1,u=l.length-1;u>=0;u--){var r=l[u];for(i[o--]=127&r;(r>>=7)>0;)i[o--]=128|127&r}return this._createEncoderBuffer(i)},t.prototype._encodeTime=function(l,n){var e,u=new Date(l);return"gentime"===n?e=[r(u.getFullYear()),r(u.getUTCMonth()+1),r(u.getUTCDate()),r(u.getUTCHours()),r(u.getUTCMinutes()),r(u.getUTCSeconds()),"Z"].join(""):"utctime"===n?e=[r(u.getFullYear()%100),r(u.getUTCMonth()+1),r(u.getUTCDate()),r(u.getUTCHours()),r(u.getUTCMinutes()),r(u.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+n+" time is not supported yet"),this._encodeStr(e,"octstr")},t.prototype._encodeNull=function(){return this._createEncoderBuffer("")},t.prototype._encodeInt=function(l,n){if("string"==typeof l){if(!n)return this.reporter.error("String int or enum given, but no values map");if(!n.hasOwnProperty(l))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(l));l=n[l]}if("number"!=typeof l&&!s.isBuffer(l)){var e=l.toArray();!l.sign&&128&e[0]&&e.unshift(0),l=new s(e)}if(s.isBuffer(l)){var u=l.length;0===l.length&&u++;var t=new s(u);return l.copy(t),0===l.length&&(t[0]=0),this._createEncoderBuffer(t)}if(l<128)return this._createEncoderBuffer(l);if(l<256)return this._createEncoderBuffer([0,l]);for(var u=1,r=l;r>=256;r>>=8)u++;for(var t=new Array(u),r=t.length-1;r>=0;r--)t[r]=255&l,l>>=8;return 128&t[0]&&t.unshift(0),this._createEncoderBuffer(new s(t))},t.prototype._encodeBool=function(l){return this._createEncoderBuffer(l?255:0)},t.prototype._use=function(l,n){return"function"==typeof l&&(l=l(n)),l._getEncoder("der").tree},t.prototype._skipDefault=function(l,n,e){var u,t=this._baseState;if(null===t["default"])return!1;var r=l.join();if(void 0===t.defaultBuffer&&(t.defaultBuffer=this._encodeValue(t["default"],n,e).join()),r.length!==t.defaultBuffer.length)return!1;for(u=0;u0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===l[n-2]?2:"="===l[n-1]?1:0}function t(l){return 3*l.length/4-u(l)}function r(l){var n,e,t,r,i,o,s=l.length;i=u(l),o=new c(3*s/4-i),t=i>0?s-4:s;var a=0;for(n=0,e=0;n>16&255,o[a++]=r>>8&255,o[a++]=255&r;return 2===i?(r=f[l.charCodeAt(n)]<<2|f[l.charCodeAt(n+1)]>>4,o[a++]=255&r):1===i&&(r=f[l.charCodeAt(n)]<<10|f[l.charCodeAt(n+1)]<<4|f[l.charCodeAt(n+2)]>>2,o[a++]=r>>8&255,o[a++]=255&r),o}function i(l){return a[l>>18&63]+a[l>>12&63]+a[l>>6&63]+a[63&l]}function o(l,n,e){for(var u,t=[],r=n;rf?f:s+i));return 1===u?(n=l[e-1],t+=a[n>>2],t+=a[n<<4&63],t+="=="):2===u&&(n=(l[e-2]<<8)+l[e-1],t+=a[n>>10],t+=a[n>>4&63],t+=a[n<<2&63],t+="="),r.push(t),r.join("")}e.byteLength=t,e.toByteArray=r,e.fromByteArray=s;for(var a=[],f=[],c="undefined"!=typeof Uint8Array?Uint8Array:Array,h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",d=0,p=h.length;d=49&&i<=54?i-49+10:i>=17&&i<=22?i-17+10:15&i}return u}function o(l,n,e,u){for(var t=0,r=Math.min(l.length,e),i=n;i=49?o-49+10:o>=17?o-17+10:o}return t}function s(l){for(var n=new Array(l.bitLength()),e=0;e>>t}return n}function a(l,n,e){e.negative=n.negative^l.negative;var u=l.length+n.length|0;e.length=u,u=u-1|0;var t=0|l.words[0],r=0|n.words[0],i=t*r,o=67108863&i,s=i/67108864|0;e.words[0]=o;for(var a=1;a>>26,c=67108863&s,h=Math.min(a,n.length-1),d=Math.max(0,a-l.length+1);d<=h;d++){var p=a-d|0;t=0|l.words[p],r=0|n.words[d],i=t*r+c,f+=i/67108864|0,c=67108863&i}e.words[a]=0|c,s=0|f}return 0!==s?e.words[a]=0|s:e.length--,e.strip()}function f(l,n,e){e.negative=n.negative^l.negative,e.length=l.length+n.length;for(var u=0,t=0,r=0;r>>26)|0,t+=i>>>26,i&=67108863}e.words[r]=o,u=i,i=t}return 0!==u?e.words[r]=u:e.length--,e.strip()}function c(l,n,e){var u=new h;return u.mulp(l,n,e)}function h(l,n){this.x=l,this.y=n}function d(l,n){this.name=l,this.p=new r(n,16),this.n=this.p.bitLength(),this.k=new r(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function p(){d.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function b(){d.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function v(){d.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function _(){d.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function y(l){if("string"==typeof l){var n=r._prime(l);this.m=n.p,this.prime=n}else u(l.gtn(1),"modulus must be greater than 1"),this.m=l,this.prime=null}function m(l){y.call(this,l),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new r(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}"object"==typeof n?n.exports=r:e.BN=r,r.BN=r,r.wordSize=26;var g;try{g=l("buffer").Buffer}catch(w){}r.isBN=function(l){return l instanceof r||null!==l&&"object"==typeof l&&l.constructor.wordSize===r.wordSize&&Array.isArray(l.words)},r.max=function(l,n){return l.cmp(n)>0?l:n},r.min=function(l,n){return l.cmp(n)<0?l:n},r.prototype._init=function(l,n,e){if("number"==typeof l)return this._initNumber(l,n,e);if("object"==typeof l)return this._initArray(l,n,e);"hex"===n&&(n=16),u(n===(0|n)&&n>=2&&n<=36),l=l.toString().replace(/\s+/g,"");var t=0;"-"===l[0]&&t++,16===n?this._parseHex(l,t):this._parseBase(l,n,t),"-"===l[0]&&(this.negative=1),this.strip(),"le"===e&&this._initArray(this.toArray(),n,e)},r.prototype._initNumber=function(l,n,e){l<0&&(this.negative=1,l=-l),l<67108864?(this.words=[67108863&l],this.length=1):l<4503599627370496?(this.words=[67108863&l,l/67108864&67108863],this.length=2):(u(l<9007199254740992),this.words=[67108863&l,l/67108864&67108863,1],this.length=3),"le"===e&&this._initArray(this.toArray(),n,e)},r.prototype._initArray=function(l,n,e){if(u("number"==typeof l.length),l.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(l.length/3),this.words=new Array(this.length);for(var t=0;t=0;t-=3)i=l[t]|l[t-1]<<8|l[t-2]<<16,this.words[r]|=i<>>26-o&67108863,o+=24,o>=26&&(o-=26,r++);else if("le"===e)for(t=0,r=0;t>>26-o&67108863,o+=24,o>=26&&(o-=26,r++);return this.strip()},r.prototype._parseHex=function(l,n){this.length=Math.ceil((l.length-n)/6),this.words=new Array(this.length);for(var e=0;e=n;e-=6)t=i(l,e,e+6),this.words[u]|=t<>>26-r&4194303,r+=24,r>=26&&(r-=26,u++);e+6!==n&&(t=i(l,n,e+6),this.words[u]|=t<>>26-r&4194303),this.strip()},r.prototype._parseBase=function(l,n,e){this.words=[0],this.length=1;for(var u=0,t=1;t<=67108863;t*=n)u++;u--,t=t/n|0;for(var r=l.length-e,i=r%u,s=Math.min(r,r-i)+e,a=0,f=e;f1&&0===this.words[this.length-1];)this.length--;return this._normSign()},r.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},r.prototype.inspect=function(){return(this.red?""};var k=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],E=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],S=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];r.prototype.toString=function(l,n){l=l||10,n=0|n||1;var e;if(16===l||"hex"===l){e="";for(var t=0,r=0,i=0;i>>24-t&16777215,e=0!==r||i!==this.length-1?k[6-s.length]+s+e:s+e,t+=2,t>=26&&(t-=26,i--)}for(0!==r&&(e=r.toString(16)+e);e.length%n!==0;)e="0"+e;return 0!==this.negative&&(e="-"+e),e}if(l===(0|l)&&l>=2&&l<=36){var a=E[l],f=S[l];e="";var c=this.clone();for(c.negative=0;!c.isZero();){var h=c.modn(f).toString(l);c=c.idivn(f),e=c.isZero()?h+e:k[a-h.length]+h+e}for(this.isZero()&&(e="0"+e);e.length%n!==0;)e="0"+e;return 0!==this.negative&&(e="-"+e),e}u(!1,"Base should be between 2 and 36")},r.prototype.toNumber=function(){var l=this.words[0];return 2===this.length?l+=67108864*this.words[1]:3===this.length&&1===this.words[2]?l+=4503599627370496+67108864*this.words[1]:this.length>2&&u(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-l:l},r.prototype.toJSON=function(){return this.toString(16)},r.prototype.toBuffer=function(l,n){return u("undefined"!=typeof g),this.toArrayLike(g,l,n)},r.prototype.toArray=function(l,n){return this.toArrayLike(Array,l,n)},r.prototype.toArrayLike=function(l,n,e){var t=this.byteLength(),r=e||Math.max(1,t);u(t<=r,"byte array longer than desired length"),u(r>0,"Requested array length <= 0"),this.strip();var i,o,s="le"===n,a=new l(r),f=this.clone();if(s){for(o=0;!f.isZero();o++)i=f.andln(255),f.iushrn(8),a[o]=i;for(;o=4096&&(e+=13,n>>>=13),n>=64&&(e+=7,n>>>=7),n>=8&&(e+=4,n>>>=4),n>=2&&(e+=2,n>>>=2),e+n},r.prototype._zeroBits=function(l){if(0===l)return 26;var n=l,e=0;return 0===(8191&n)&&(e+=13,n>>>=13),0===(127&n)&&(e+=7,n>>>=7),0===(15&n)&&(e+=4,n>>>=4),0===(3&n)&&(e+=2,n>>>=2),0===(1&n)&&e++,e},r.prototype.bitLength=function(){var l=this.words[this.length-1],n=this._countBits(l);return 26*(this.length-1)+n},r.prototype.zeroBits=function(){if(this.isZero())return 0;for(var l=0,n=0;nl.length?this.clone().ior(l):l.clone().ior(this)},r.prototype.uor=function(l){return this.length>l.length?this.clone().iuor(l):l.clone().iuor(this)},r.prototype.iuand=function(l){var n;n=this.length>l.length?l:this;for(var e=0;el.length?this.clone().iand(l):l.clone().iand(this)},r.prototype.uand=function(l){return this.length>l.length?this.clone().iuand(l):l.clone().iuand(this)},r.prototype.iuxor=function(l){var n,e;this.length>l.length?(n=this,e=l):(n=l,e=this);for(var u=0;ul.length?this.clone().ixor(l):l.clone().ixor(this)},r.prototype.uxor=function(l){return this.length>l.length?this.clone().iuxor(l):l.clone().iuxor(this)},r.prototype.inotn=function(l){u("number"==typeof l&&l>=0);var n=0|Math.ceil(l/26),e=l%26;this._expand(n),e>0&&n--;for(var t=0;t0&&(this.words[t]=~this.words[t]&67108863>>26-e),this.strip()},r.prototype.notn=function(l){return this.clone().inotn(l)},r.prototype.setn=function(l,n){u("number"==typeof l&&l>=0);var e=l/26|0,t=l%26;return this._expand(e+1),n?this.words[e]=this.words[e]|1<l.length?(e=this,u=l):(e=l,u=this);for(var t=0,r=0;r>>26;for(;0!==t&&r>>26;if(this.length=e.length,0!==t)this.words[this.length]=t,this.length++;else if(e!==this)for(;rl.length?this.clone().iadd(l):l.clone().iadd(this)},r.prototype.isub=function(l){if(0!==l.negative){l.negative=0;var n=this.iadd(l);return l.negative=1,n._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(l),this.negative=1,this._normSign();var e=this.cmp(l);if(0===e)return this.negative=0,this.length=1,this.words[0]=0,this;var u,t;e>0?(u=this,t=l):(u=l,t=this);for(var r=0,i=0;i>26,this.words[i]=67108863&n;for(;0!==r&&i>26,this.words[i]=67108863&n;if(0===r&&i>>13,d=0|i[1],p=8191&d,b=d>>>13,v=0|i[2],_=8191&v,y=v>>>13,m=0|i[3],g=8191&m,w=m>>>13,k=0|i[4],E=8191&k,S=k>>>13,M=0|i[5],j=8191&M,I=M>>>13,C=0|i[6],A=8191&C,x=C>>>13,R=0|i[7],T=8191&R,B=R>>>13,O=0|i[8],P=8191&O,U=O>>>13,N=0|i[9],L=8191&N,D=N>>>13,F=0|o[0],q=8191&F,z=F>>>13,H=0|o[1],K=8191&H,V=H>>>13,Y=0|o[2],W=8191&Y,X=Y>>>13,G=0|o[3],Z=8191&G,J=G>>>13,$=0|o[4],Q=8191&$,ll=$>>>13,nl=0|o[5],el=8191&nl,ul=nl>>>13,tl=0|o[6],rl=8191&tl,il=tl>>>13,ol=0|o[7],sl=8191&ol,al=ol>>>13,fl=0|o[8],cl=8191&fl,hl=fl>>>13,dl=0|o[9],pl=8191&dl,bl=dl>>>13;e.negative=l.negative^n.negative,e.length=19,u=Math.imul(c,q),t=Math.imul(c,z),t=t+Math.imul(h,q)|0,r=Math.imul(h,z);var vl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(vl>>>26)|0,vl&=67108863,u=Math.imul(p,q),t=Math.imul(p,z),t=t+Math.imul(b,q)|0,r=Math.imul(b,z),u=u+Math.imul(c,K)|0,t=t+Math.imul(c,V)|0,t=t+Math.imul(h,K)|0,r=r+Math.imul(h,V)|0;var _l=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(_l>>>26)|0,_l&=67108863,u=Math.imul(_,q),t=Math.imul(_,z),t=t+Math.imul(y,q)|0,r=Math.imul(y,z),u=u+Math.imul(p,K)|0,t=t+Math.imul(p,V)|0,t=t+Math.imul(b,K)|0,r=r+Math.imul(b,V)|0,u=u+Math.imul(c,W)|0,t=t+Math.imul(c,X)|0,t=t+Math.imul(h,W)|0,r=r+Math.imul(h,X)|0;var yl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(yl>>>26)|0,yl&=67108863,u=Math.imul(g,q),t=Math.imul(g,z),t=t+Math.imul(w,q)|0,r=Math.imul(w,z),u=u+Math.imul(_,K)|0,t=t+Math.imul(_,V)|0,t=t+Math.imul(y,K)|0,r=r+Math.imul(y,V)|0,u=u+Math.imul(p,W)|0,t=t+Math.imul(p,X)|0,t=t+Math.imul(b,W)|0,r=r+Math.imul(b,X)|0,u=u+Math.imul(c,Z)|0,t=t+Math.imul(c,J)|0,t=t+Math.imul(h,Z)|0,r=r+Math.imul(h,J)|0;var ml=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(ml>>>26)|0,ml&=67108863,u=Math.imul(E,q),t=Math.imul(E,z),t=t+Math.imul(S,q)|0,r=Math.imul(S,z),u=u+Math.imul(g,K)|0,t=t+Math.imul(g,V)|0,t=t+Math.imul(w,K)|0,r=r+Math.imul(w,V)|0,u=u+Math.imul(_,W)|0,t=t+Math.imul(_,X)|0,t=t+Math.imul(y,W)|0,r=r+Math.imul(y,X)|0,u=u+Math.imul(p,Z)|0,t=t+Math.imul(p,J)|0,t=t+Math.imul(b,Z)|0,r=r+Math.imul(b,J)|0,u=u+Math.imul(c,Q)|0,t=t+Math.imul(c,ll)|0,t=t+Math.imul(h,Q)|0,r=r+Math.imul(h,ll)|0;var gl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(gl>>>26)|0,gl&=67108863,u=Math.imul(j,q),t=Math.imul(j,z),t=t+Math.imul(I,q)|0,r=Math.imul(I,z),u=u+Math.imul(E,K)|0,t=t+Math.imul(E,V)|0,t=t+Math.imul(S,K)|0,r=r+Math.imul(S,V)|0,u=u+Math.imul(g,W)|0,t=t+Math.imul(g,X)|0,t=t+Math.imul(w,W)|0,r=r+Math.imul(w,X)|0,u=u+Math.imul(_,Z)|0,t=t+Math.imul(_,J)|0,t=t+Math.imul(y,Z)|0,r=r+Math.imul(y,J)|0,u=u+Math.imul(p,Q)|0,t=t+Math.imul(p,ll)|0,t=t+Math.imul(b,Q)|0,r=r+Math.imul(b,ll)|0,u=u+Math.imul(c,el)|0,t=t+Math.imul(c,ul)|0,t=t+Math.imul(h,el)|0,r=r+Math.imul(h,ul)|0;var wl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(wl>>>26)|0,wl&=67108863,u=Math.imul(A,q),t=Math.imul(A,z),t=t+Math.imul(x,q)|0,r=Math.imul(x,z),u=u+Math.imul(j,K)|0,t=t+Math.imul(j,V)|0,t=t+Math.imul(I,K)|0,r=r+Math.imul(I,V)|0,u=u+Math.imul(E,W)|0,t=t+Math.imul(E,X)|0,t=t+Math.imul(S,W)|0,r=r+Math.imul(S,X)|0,u=u+Math.imul(g,Z)|0,t=t+Math.imul(g,J)|0,t=t+Math.imul(w,Z)|0,r=r+Math.imul(w,J)|0,u=u+Math.imul(_,Q)|0,t=t+Math.imul(_,ll)|0,t=t+Math.imul(y,Q)|0,r=r+Math.imul(y,ll)|0,u=u+Math.imul(p,el)|0,t=t+Math.imul(p,ul)|0,t=t+Math.imul(b,el)|0,r=r+Math.imul(b,ul)|0,u=u+Math.imul(c,rl)|0,t=t+Math.imul(c,il)|0,t=t+Math.imul(h,rl)|0,r=r+Math.imul(h,il)|0;var kl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(kl>>>26)|0,kl&=67108863,u=Math.imul(T,q),t=Math.imul(T,z),t=t+Math.imul(B,q)|0,r=Math.imul(B,z),u=u+Math.imul(A,K)|0,t=t+Math.imul(A,V)|0,t=t+Math.imul(x,K)|0,r=r+Math.imul(x,V)|0,u=u+Math.imul(j,W)|0,t=t+Math.imul(j,X)|0,t=t+Math.imul(I,W)|0,r=r+Math.imul(I,X)|0,u=u+Math.imul(E,Z)|0,t=t+Math.imul(E,J)|0,t=t+Math.imul(S,Z)|0,r=r+Math.imul(S,J)|0,u=u+Math.imul(g,Q)|0,t=t+Math.imul(g,ll)|0,t=t+Math.imul(w,Q)|0,r=r+Math.imul(w,ll)|0,u=u+Math.imul(_,el)|0,t=t+Math.imul(_,ul)|0,t=t+Math.imul(y,el)|0,r=r+Math.imul(y,ul)|0,u=u+Math.imul(p,rl)|0,t=t+Math.imul(p,il)|0,t=t+Math.imul(b,rl)|0,r=r+Math.imul(b,il)|0,u=u+Math.imul(c,sl)|0,t=t+Math.imul(c,al)|0,t=t+Math.imul(h,sl)|0,r=r+Math.imul(h,al)|0;var El=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(El>>>26)|0,El&=67108863,u=Math.imul(P,q),t=Math.imul(P,z),t=t+Math.imul(U,q)|0,r=Math.imul(U,z),u=u+Math.imul(T,K)|0,t=t+Math.imul(T,V)|0,t=t+Math.imul(B,K)|0,r=r+Math.imul(B,V)|0,u=u+Math.imul(A,W)|0,t=t+Math.imul(A,X)|0,t=t+Math.imul(x,W)|0,r=r+Math.imul(x,X)|0,u=u+Math.imul(j,Z)|0,t=t+Math.imul(j,J)|0,t=t+Math.imul(I,Z)|0,r=r+Math.imul(I,J)|0,u=u+Math.imul(E,Q)|0,t=t+Math.imul(E,ll)|0,t=t+Math.imul(S,Q)|0,r=r+Math.imul(S,ll)|0,u=u+Math.imul(g,el)|0,t=t+Math.imul(g,ul)|0,t=t+Math.imul(w,el)|0,r=r+Math.imul(w,ul)|0,u=u+Math.imul(_,rl)|0,t=t+Math.imul(_,il)|0,t=t+Math.imul(y,rl)|0,r=r+Math.imul(y,il)|0,u=u+Math.imul(p,sl)|0,t=t+Math.imul(p,al)|0,t=t+Math.imul(b,sl)|0,r=r+Math.imul(b,al)|0,u=u+Math.imul(c,cl)|0,t=t+Math.imul(c,hl)|0,t=t+Math.imul(h,cl)|0,r=r+Math.imul(h,hl)|0;var Sl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(Sl>>>26)|0,Sl&=67108863,u=Math.imul(L,q),t=Math.imul(L,z),t=t+Math.imul(D,q)|0,r=Math.imul(D,z),u=u+Math.imul(P,K)|0,t=t+Math.imul(P,V)|0,t=t+Math.imul(U,K)|0,r=r+Math.imul(U,V)|0,u=u+Math.imul(T,W)|0,t=t+Math.imul(T,X)|0,t=t+Math.imul(B,W)|0,r=r+Math.imul(B,X)|0,u=u+Math.imul(A,Z)|0,t=t+Math.imul(A,J)|0,t=t+Math.imul(x,Z)|0,r=r+Math.imul(x,J)|0,u=u+Math.imul(j,Q)|0,t=t+Math.imul(j,ll)|0,t=t+Math.imul(I,Q)|0,r=r+Math.imul(I,ll)|0,u=u+Math.imul(E,el)|0,t=t+Math.imul(E,ul)|0,t=t+Math.imul(S,el)|0,r=r+Math.imul(S,ul)|0,u=u+Math.imul(g,rl)|0,t=t+Math.imul(g,il)|0,t=t+Math.imul(w,rl)|0,r=r+Math.imul(w,il)|0,u=u+Math.imul(_,sl)|0,t=t+Math.imul(_,al)|0,t=t+Math.imul(y,sl)|0,r=r+Math.imul(y,al)|0,u=u+Math.imul(p,cl)|0,t=t+Math.imul(p,hl)|0,t=t+Math.imul(b,cl)|0,r=r+Math.imul(b,hl)|0,u=u+Math.imul(c,pl)|0,t=t+Math.imul(c,bl)|0,t=t+Math.imul(h,pl)|0,r=r+Math.imul(h,bl)|0;var Ml=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(Ml>>>26)|0,Ml&=67108863,u=Math.imul(L,K),t=Math.imul(L,V),t=t+Math.imul(D,K)|0,r=Math.imul(D,V),u=u+Math.imul(P,W)|0,t=t+Math.imul(P,X)|0,t=t+Math.imul(U,W)|0,r=r+Math.imul(U,X)|0,u=u+Math.imul(T,Z)|0,t=t+Math.imul(T,J)|0,t=t+Math.imul(B,Z)|0,r=r+Math.imul(B,J)|0,u=u+Math.imul(A,Q)|0,t=t+Math.imul(A,ll)|0,t=t+Math.imul(x,Q)|0,r=r+Math.imul(x,ll)|0,u=u+Math.imul(j,el)|0,t=t+Math.imul(j,ul)|0,t=t+Math.imul(I,el)|0,r=r+Math.imul(I,ul)|0,u=u+Math.imul(E,rl)|0,t=t+Math.imul(E,il)|0,t=t+Math.imul(S,rl)|0,r=r+Math.imul(S,il)|0,u=u+Math.imul(g,sl)|0,t=t+Math.imul(g,al)|0,t=t+Math.imul(w,sl)|0,r=r+Math.imul(w,al)|0,u=u+Math.imul(_,cl)|0,t=t+Math.imul(_,hl)|0,t=t+Math.imul(y,cl)|0,r=r+Math.imul(y,hl)|0,u=u+Math.imul(p,pl)|0,t=t+Math.imul(p,bl)|0,t=t+Math.imul(b,pl)|0,r=r+Math.imul(b,bl)|0;var jl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(jl>>>26)|0,jl&=67108863,u=Math.imul(L,W),t=Math.imul(L,X),t=t+Math.imul(D,W)|0,r=Math.imul(D,X),u=u+Math.imul(P,Z)|0,t=t+Math.imul(P,J)|0,t=t+Math.imul(U,Z)|0,r=r+Math.imul(U,J)|0,u=u+Math.imul(T,Q)|0,t=t+Math.imul(T,ll)|0,t=t+Math.imul(B,Q)|0,r=r+Math.imul(B,ll)|0,u=u+Math.imul(A,el)|0,t=t+Math.imul(A,ul)|0,t=t+Math.imul(x,el)|0,r=r+Math.imul(x,ul)|0,u=u+Math.imul(j,rl)|0,t=t+Math.imul(j,il)|0,t=t+Math.imul(I,rl)|0,r=r+Math.imul(I,il)|0,u=u+Math.imul(E,sl)|0,t=t+Math.imul(E,al)|0,t=t+Math.imul(S,sl)|0,r=r+Math.imul(S,al)|0,u=u+Math.imul(g,cl)|0,t=t+Math.imul(g,hl)|0,t=t+Math.imul(w,cl)|0,r=r+Math.imul(w,hl)|0,u=u+Math.imul(_,pl)|0,t=t+Math.imul(_,bl)|0,t=t+Math.imul(y,pl)|0,r=r+Math.imul(y,bl)|0;var Il=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(Il>>>26)|0,Il&=67108863,u=Math.imul(L,Z),t=Math.imul(L,J),t=t+Math.imul(D,Z)|0,r=Math.imul(D,J),u=u+Math.imul(P,Q)|0,t=t+Math.imul(P,ll)|0,t=t+Math.imul(U,Q)|0,r=r+Math.imul(U,ll)|0,u=u+Math.imul(T,el)|0,t=t+Math.imul(T,ul)|0,t=t+Math.imul(B,el)|0,r=r+Math.imul(B,ul)|0,u=u+Math.imul(A,rl)|0,t=t+Math.imul(A,il)|0,t=t+Math.imul(x,rl)|0,r=r+Math.imul(x,il)|0,u=u+Math.imul(j,sl)|0,t=t+Math.imul(j,al)|0,t=t+Math.imul(I,sl)|0,r=r+Math.imul(I,al)|0,u=u+Math.imul(E,cl)|0,t=t+Math.imul(E,hl)|0,t=t+Math.imul(S,cl)|0,r=r+Math.imul(S,hl)|0,u=u+Math.imul(g,pl)|0,t=t+Math.imul(g,bl)|0,t=t+Math.imul(w,pl)|0,r=r+Math.imul(w,bl)|0;var Cl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(Cl>>>26)|0,Cl&=67108863,u=Math.imul(L,Q),t=Math.imul(L,ll),t=t+Math.imul(D,Q)|0,r=Math.imul(D,ll),u=u+Math.imul(P,el)|0,t=t+Math.imul(P,ul)|0,t=t+Math.imul(U,el)|0,r=r+Math.imul(U,ul)|0,u=u+Math.imul(T,rl)|0,t=t+Math.imul(T,il)|0,t=t+Math.imul(B,rl)|0,r=r+Math.imul(B,il)|0,u=u+Math.imul(A,sl)|0,t=t+Math.imul(A,al)|0,t=t+Math.imul(x,sl)|0,r=r+Math.imul(x,al)|0,u=u+Math.imul(j,cl)|0,t=t+Math.imul(j,hl)|0,t=t+Math.imul(I,cl)|0,r=r+Math.imul(I,hl)|0,u=u+Math.imul(E,pl)|0,t=t+Math.imul(E,bl)|0,t=t+Math.imul(S,pl)|0,r=r+Math.imul(S,bl)|0;var Al=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(Al>>>26)|0,Al&=67108863,u=Math.imul(L,el),t=Math.imul(L,ul),t=t+Math.imul(D,el)|0,r=Math.imul(D,ul),u=u+Math.imul(P,rl)|0,t=t+Math.imul(P,il)|0,t=t+Math.imul(U,rl)|0,r=r+Math.imul(U,il)|0,u=u+Math.imul(T,sl)|0,t=t+Math.imul(T,al)|0,t=t+Math.imul(B,sl)|0,r=r+Math.imul(B,al)|0,u=u+Math.imul(A,cl)|0,t=t+Math.imul(A,hl)|0,t=t+Math.imul(x,cl)|0,r=r+Math.imul(x,hl)|0,u=u+Math.imul(j,pl)|0,t=t+Math.imul(j,bl)|0,t=t+Math.imul(I,pl)|0,r=r+Math.imul(I,bl)|0;var xl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(xl>>>26)|0,xl&=67108863,u=Math.imul(L,rl),t=Math.imul(L,il),t=t+Math.imul(D,rl)|0,r=Math.imul(D,il),u=u+Math.imul(P,sl)|0,t=t+Math.imul(P,al)|0,t=t+Math.imul(U,sl)|0,r=r+Math.imul(U,al)|0,u=u+Math.imul(T,cl)|0,t=t+Math.imul(T,hl)|0,t=t+Math.imul(B,cl)|0,r=r+Math.imul(B,hl)|0,u=u+Math.imul(A,pl)|0,t=t+Math.imul(A,bl)|0,t=t+Math.imul(x,pl)|0,r=r+Math.imul(x,bl)|0;var Rl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(Rl>>>26)|0,Rl&=67108863,u=Math.imul(L,sl),t=Math.imul(L,al),t=t+Math.imul(D,sl)|0,r=Math.imul(D,al),u=u+Math.imul(P,cl)|0,t=t+Math.imul(P,hl)|0,t=t+Math.imul(U,cl)|0,r=r+Math.imul(U,hl)|0,u=u+Math.imul(T,pl)|0,t=t+Math.imul(T,bl)|0,t=t+Math.imul(B,pl)|0,r=r+Math.imul(B,bl)|0;var Tl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(Tl>>>26)|0,Tl&=67108863,u=Math.imul(L,cl),t=Math.imul(L,hl),t=t+Math.imul(D,cl)|0,r=Math.imul(D,hl),u=u+Math.imul(P,pl)|0,t=t+Math.imul(P,bl)|0,t=t+Math.imul(U,pl)|0,r=r+Math.imul(U,bl)|0;var Bl=(a+u|0)+((8191&t)<<13)|0;a=(r+(t>>>13)|0)+(Bl>>>26)|0,Bl&=67108863,u=Math.imul(L,pl),t=Math.imul(L,bl),t=t+Math.imul(D,pl)|0,r=Math.imul(D,bl);var Ol=(a+u|0)+((8191&t)<<13)|0;return a=(r+(t>>>13)|0)+(Ol>>>26)|0,Ol&=67108863,s[0]=vl,s[1]=_l,s[2]=yl,s[3]=ml,s[4]=gl,s[5]=wl,s[6]=kl,s[7]=El,s[8]=Sl,s[9]=Ml,s[10]=jl,s[11]=Il,s[12]=Cl,s[13]=Al,s[14]=xl,s[15]=Rl,s[16]=Tl,s[17]=Bl,s[18]=Ol,0!==a&&(s[19]=a,e.length++),e};Math.imul||(M=a),r.prototype.mulTo=function(l,n){var e,u=this.length+l.length;return e=10===this.length&&10===l.length?M(this,l,n):u<63?a(this,l,n):u<1024?f(this,l,n):c(this,l,n)},h.prototype.makeRBT=function(l){for(var n=new Array(l),e=r.prototype._countBits(l)-1,u=0;u>=1;return u},h.prototype.permute=function(l,n,e,u,t,r){for(var i=0;i>>=1)t++;return 1<>>=13,e[2*i+1]=8191&r,r>>>=13;for(i=2*n;i>=26,n+=t/67108864|0,n+=r>>>26,this.words[e]=67108863&r}return 0!==n&&(this.words[e]=n,this.length++),this},r.prototype.muln=function(l){return this.clone().imuln(l)},r.prototype.sqr=function(){return this.mul(this)},r.prototype.isqr=function(){return this.imul(this.clone())},r.prototype.pow=function(l){var n=s(l);if(0===n.length)return new r(1);for(var e=this,u=0;u=0);var n,e=l%26,t=(l-e)/26,r=67108863>>>26-e<<26-e;if(0!==e){var i=0;for(n=0;n>>26-e}i&&(this.words[n]=i,this.length++)}if(0!==t){for(n=this.length-1;n>=0;n--)this.words[n+t]=this.words[n];for(n=0;n=0);var t;t=n?(n-n%26)/26:0;var r=l%26,i=Math.min((l-r)/26,this.length),o=67108863^67108863>>>r<i)for(this.length-=i,a=0;a=0&&(0!==f||a>=t);a--){var c=0|this.words[a];this.words[a]=f<<26-r|c>>>r,f=c&o}return s&&0!==f&&(s.words[s.length++]=f),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},r.prototype.ishrn=function(l,n,e){return u(0===this.negative),this.iushrn(l,n,e)},r.prototype.shln=function(l){return this.clone().ishln(l)},r.prototype.ushln=function(l){return this.clone().iushln(l)},r.prototype.shrn=function(l){return this.clone().ishrn(l)},r.prototype.ushrn=function(l){return this.clone().iushrn(l)},r.prototype.testn=function(l){u("number"==typeof l&&l>=0);var n=l%26,e=(l-n)/26,t=1<=0);var n=l%26,e=(l-n)/26;if(u(0===this.negative,"imaskn works only with positive numbers"),this.length<=e)return this;if(0!==n&&e++,this.length=Math.min(e,this.length),0!==n){var t=67108863^67108863>>>n<=67108864;n++)this.words[n]-=67108864,n===this.length-1?this.words[n+1]=1:this.words[n+1]++;return this.length=Math.max(this.length,n+1),this},r.prototype.isubn=function(l){if(u("number"==typeof l),u(l<67108864),l<0)return this.iaddn(-l);if(0!==this.negative)return this.negative=0,this.iaddn(l),this.negative=1,this;if(this.words[0]-=l,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var n=0;n>26)-(s/67108864|0),this.words[t+e]=67108863&i}for(;t>26,this.words[t+e]=67108863&i;if(0===o)return this.strip();for(u(o===-1),o=0,t=0;t>26,this.words[t]=67108863&i;return this.negative=1,this.strip()},r.prototype._wordDiv=function(l,n){var e=this.length-l.length,u=this.clone(),t=l,i=0|t.words[t.length-1],o=this._countBits(i);e=26-o,0!==e&&(t=t.ushln(e),u.iushln(e),i=0|t.words[t.length-1]);var s,a=u.length-t.length;if("mod"!==n){s=new r(null),s.length=a+1,s.words=new Array(s.length);for(var f=0;f=0;h--){var d=67108864*(0|u.words[t.length+h])+(0|u.words[t.length+h-1]);for(d=Math.min(d/i|0,67108863),u._ishlnsubmul(t,d,h);0!==u.negative;)d--,u.negative=0,u._ishlnsubmul(t,1,h),u.isZero()||(u.negative^=1);s&&(s.words[h]=d)}return s&&s.strip(),u.strip(),"div"!==n&&0!==e&&u.iushrn(e),{div:s||null,mod:u}},r.prototype.divmod=function(l,n,e){if(u(!l.isZero()),this.isZero())return{div:new r(0),mod:new r(0)};var t,i,o;return 0!==this.negative&&0===l.negative?(o=this.neg().divmod(l,n),"mod"!==n&&(t=o.div.neg()),"div"!==n&&(i=o.mod.neg(),e&&0!==i.negative&&i.iadd(l)),{div:t,mod:i}):0===this.negative&&0!==l.negative?(o=this.divmod(l.neg(),n),"mod"!==n&&(t=o.div.neg()),{div:t,mod:o.mod}):0!==(this.negative&l.negative)?(o=this.neg().divmod(l.neg(),n),"div"!==n&&(i=o.mod.neg(),e&&0!==i.negative&&i.isub(l)),{div:o.div,mod:i}):l.length>this.length||this.cmp(l)<0?{div:new r(0),mod:this}:1===l.length?"div"===n?{div:this.divn(l.words[0]),mod:null}:"mod"===n?{div:null,mod:new r(this.modn(l.words[0]))}:{div:this.divn(l.words[0]),mod:new r(this.modn(l.words[0]))}:this._wordDiv(l,n)},r.prototype.div=function(l){return this.divmod(l,"div",!1).div},r.prototype.mod=function(l){return this.divmod(l,"mod",!1).mod},r.prototype.umod=function(l){return this.divmod(l,"mod",!0).mod},r.prototype.divRound=function(l){var n=this.divmod(l);if(n.mod.isZero())return n.div;var e=0!==n.div.negative?n.mod.isub(l):n.mod,u=l.ushrn(1),t=l.andln(1),r=e.cmp(u);return r<0||1===t&&0===r?n.div:0!==n.div.negative?n.div.isubn(1):n.div.iaddn(1); +},r.prototype.modn=function(l){u(l<=67108863);for(var n=(1<<26)%l,e=0,t=this.length-1;t>=0;t--)e=(n*e+(0|this.words[t]))%l;return e},r.prototype.idivn=function(l){u(l<=67108863);for(var n=0,e=this.length-1;e>=0;e--){var t=(0|this.words[e])+67108864*n;this.words[e]=t/l|0,n=t%l}return this.strip()},r.prototype.divn=function(l){return this.clone().idivn(l)},r.prototype.egcd=function(l){u(0===l.negative),u(!l.isZero());var n=this,e=l.clone();n=0!==n.negative?n.umod(l):n.clone();for(var t=new r(1),i=new r(0),o=new r(0),s=new r(1),a=0;n.isEven()&&e.isEven();)n.iushrn(1),e.iushrn(1),++a;for(var f=e.clone(),c=n.clone();!n.isZero();){for(var h=0,d=1;0===(n.words[0]&d)&&h<26;++h,d<<=1);if(h>0)for(n.iushrn(h);h-- >0;)(t.isOdd()||i.isOdd())&&(t.iadd(f),i.isub(c)),t.iushrn(1),i.iushrn(1);for(var p=0,b=1;0===(e.words[0]&b)&&p<26;++p,b<<=1);if(p>0)for(e.iushrn(p);p-- >0;)(o.isOdd()||s.isOdd())&&(o.iadd(f),s.isub(c)),o.iushrn(1),s.iushrn(1);n.cmp(e)>=0?(n.isub(e),t.isub(o),i.isub(s)):(e.isub(n),o.isub(t),s.isub(i))}return{a:o,b:s,gcd:e.iushln(a)}},r.prototype._invmp=function(l){u(0===l.negative),u(!l.isZero());var n=this,e=l.clone();n=0!==n.negative?n.umod(l):n.clone();for(var t=new r(1),i=new r(0),o=e.clone();n.cmpn(1)>0&&e.cmpn(1)>0;){for(var s=0,a=1;0===(n.words[0]&a)&&s<26;++s,a<<=1);if(s>0)for(n.iushrn(s);s-- >0;)t.isOdd()&&t.iadd(o),t.iushrn(1);for(var f=0,c=1;0===(e.words[0]&c)&&f<26;++f,c<<=1);if(f>0)for(e.iushrn(f);f-- >0;)i.isOdd()&&i.iadd(o),i.iushrn(1);n.cmp(e)>=0?(n.isub(e),t.isub(i)):(e.isub(n),i.isub(t))}var h;return h=0===n.cmpn(1)?t:i,h.cmpn(0)<0&&h.iadd(l),h},r.prototype.gcd=function(l){if(this.isZero())return l.abs();if(l.isZero())return this.abs();var n=this.clone(),e=l.clone();n.negative=0,e.negative=0;for(var u=0;n.isEven()&&e.isEven();u++)n.iushrn(1),e.iushrn(1);for(;;){for(;n.isEven();)n.iushrn(1);for(;e.isEven();)e.iushrn(1);var t=n.cmp(e);if(t<0){var r=n;n=e,e=r}else if(0===t||0===e.cmpn(1))break;n.isub(e)}return e.iushln(u)},r.prototype.invm=function(l){return this.egcd(l).a.umod(l)},r.prototype.isEven=function(){return 0===(1&this.words[0])},r.prototype.isOdd=function(){return 1===(1&this.words[0])},r.prototype.andln=function(l){return this.words[0]&l},r.prototype.bincn=function(l){u("number"==typeof l);var n=l%26,e=(l-n)/26,t=1<>>26,o&=67108863,this.words[i]=o}return 0!==r&&(this.words[i]=r,this.length++),this},r.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},r.prototype.cmpn=function(l){var n=l<0;if(0!==this.negative&&!n)return-1;if(0===this.negative&&n)return 1;this.strip();var e;if(this.length>1)e=1;else{n&&(l=-l),u(l<=67108863,"Number is too big");var t=0|this.words[0];e=t===l?0:tl.length)return 1;if(this.length=0;e--){var u=0|this.words[e],t=0|l.words[e];if(u!==t){ut&&(n=1);break}}return n},r.prototype.gtn=function(l){return 1===this.cmpn(l)},r.prototype.gt=function(l){return 1===this.cmp(l)},r.prototype.gten=function(l){return this.cmpn(l)>=0},r.prototype.gte=function(l){return this.cmp(l)>=0},r.prototype.ltn=function(l){return this.cmpn(l)===-1},r.prototype.lt=function(l){return this.cmp(l)===-1},r.prototype.lten=function(l){return this.cmpn(l)<=0},r.prototype.lte=function(l){return this.cmp(l)<=0},r.prototype.eqn=function(l){return 0===this.cmpn(l)},r.prototype.eq=function(l){return 0===this.cmp(l)},r.red=function(l){return new y(l)},r.prototype.toRed=function(l){return u(!this.red,"Already a number in reduction context"),u(0===this.negative,"red works only with positives"),l.convertTo(this)._forceRed(l)},r.prototype.fromRed=function(){return u(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},r.prototype._forceRed=function(l){return this.red=l,this},r.prototype.forceRed=function(l){return u(!this.red,"Already a number in reduction context"),this._forceRed(l)},r.prototype.redAdd=function(l){return u(this.red,"redAdd works only with red numbers"),this.red.add(this,l)},r.prototype.redIAdd=function(l){return u(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,l)},r.prototype.redSub=function(l){return u(this.red,"redSub works only with red numbers"),this.red.sub(this,l)},r.prototype.redISub=function(l){return u(this.red,"redISub works only with red numbers"),this.red.isub(this,l)},r.prototype.redShl=function(l){return u(this.red,"redShl works only with red numbers"),this.red.shl(this,l)},r.prototype.redMul=function(l){return u(this.red,"redMul works only with red numbers"),this.red._verify2(this,l),this.red.mul(this,l)},r.prototype.redIMul=function(l){return u(this.red,"redMul works only with red numbers"),this.red._verify2(this,l),this.red.imul(this,l)},r.prototype.redSqr=function(){return u(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},r.prototype.redISqr=function(){return u(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},r.prototype.redSqrt=function(){return u(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},r.prototype.redInvm=function(){return u(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},r.prototype.redNeg=function(){return u(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},r.prototype.redPow=function(l){return u(this.red&&!l.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,l)};var j={k256:null,p224:null,p192:null,p25519:null};d.prototype._tmp=function(){var l=new r(null);return l.words=new Array(Math.ceil(this.n/13)),l},d.prototype.ireduce=function(l){var n,e=l;do this.split(e,this.tmp),e=this.imulK(e),e=e.iadd(this.tmp),n=e.bitLength();while(n>this.n);var u=n0?e.isub(this.p):e.strip(),e},d.prototype.split=function(l,n){l.iushrn(this.n,0,n)},d.prototype.imulK=function(l){return l.imul(this.k)},t(p,d),p.prototype.split=function(l,n){for(var e=4194303,u=Math.min(l.length,9),t=0;t>>22,r=i}r>>>=22,l.words[t-10]=r,0===r&&l.length>10?l.length-=10:l.length-=9},p.prototype.imulK=function(l){l.words[l.length]=0,l.words[l.length+1]=0,l.length+=2;for(var n=0,e=0;e>>=26,l.words[e]=t,n=u}return 0!==n&&(l.words[l.length++]=n),l},r._prime=function I(l){if(j[l])return j[l];var I;if("k256"===l)I=new p;else if("p224"===l)I=new b;else if("p192"===l)I=new v;else{if("p25519"!==l)throw new Error("Unknown prime "+l);I=new _}return j[l]=I,I},y.prototype._verify1=function(l){u(0===l.negative,"red works only with positives"),u(l.red,"red works only with red numbers")},y.prototype._verify2=function(l,n){u(0===(l.negative|n.negative),"red works only with positives"),u(l.red&&l.red===n.red,"red works only with red numbers")},y.prototype.imod=function(l){return this.prime?this.prime.ireduce(l)._forceRed(this):l.umod(this.m)._forceRed(this)},y.prototype.neg=function(l){return l.isZero()?l.clone():this.m.sub(l)._forceRed(this)},y.prototype.add=function(l,n){this._verify2(l,n);var e=l.add(n);return e.cmp(this.m)>=0&&e.isub(this.m),e._forceRed(this)},y.prototype.iadd=function(l,n){this._verify2(l,n);var e=l.iadd(n);return e.cmp(this.m)>=0&&e.isub(this.m),e},y.prototype.sub=function(l,n){this._verify2(l,n);var e=l.sub(n);return e.cmpn(0)<0&&e.iadd(this.m),e._forceRed(this)},y.prototype.isub=function(l,n){this._verify2(l,n);var e=l.isub(n);return e.cmpn(0)<0&&e.iadd(this.m),e},y.prototype.shl=function(l,n){return this._verify1(l),this.imod(l.ushln(n))},y.prototype.imul=function(l,n){return this._verify2(l,n),this.imod(l.imul(n))},y.prototype.mul=function(l,n){return this._verify2(l,n),this.imod(l.mul(n))},y.prototype.isqr=function(l){return this.imul(l,l.clone())},y.prototype.sqr=function(l){return this.mul(l,l)},y.prototype.sqrt=function(l){if(l.isZero())return l.clone();var n=this.m.andln(3);if(u(n%2===1),3===n){var e=this.m.add(new r(1)).iushrn(2);return this.pow(l,e)}for(var t=this.m.subn(1),i=0;!t.isZero()&&0===t.andln(1);)i++,t.iushrn(1);u(!t.isZero());var o=new r(1).toRed(this),s=o.redNeg(),a=this.m.subn(1).iushrn(1),f=this.m.bitLength();for(f=new r(2*f*f).toRed(this);0!==this.pow(f,a).cmp(s);)f.redIAdd(s);for(var c=this.pow(f,t),h=this.pow(l,t.addn(1).iushrn(1)),d=this.pow(l,t),p=i;0!==d.cmp(o);){for(var b=d,v=0;0!==b.cmp(o);v++)b=b.redSqr();u(v=0;t--){for(var f=n.words[t],c=a-1;c>=0;c--){var h=f>>c&1;i!==u[0]&&(i=this.sqr(i)),0!==h||0!==o?(o<<=1,o|=h,s++,(s===e||0===t&&0===c)&&(i=this.mul(i,u[o]),s=0,o=0)):s=0}a=26}return i},y.prototype.convertTo=function(l){var n=l.umod(this.m);return n===l?n.clone():n},y.prototype.convertFrom=function(l){var n=l.clone();return n.red=null,n},r.mont=function(l){return new m(l)},t(m,y),m.prototype.convertTo=function(l){return this.imod(l.ushln(this.shift))},m.prototype.convertFrom=function(l){var n=this.imod(l.mul(this.rinv));return n.red=null,n},m.prototype.imul=function(l,n){if(l.isZero()||n.isZero())return l.words[0]=0,l.length=1,l;var e=l.imul(n),u=e.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),t=e.isub(u).iushrn(this.shift),r=t;return t.cmp(this.m)>=0?r=t.isub(this.m):t.cmpn(0)<0&&(r=t.iadd(this.m)),r._forceRed(this)},m.prototype.mul=function(l,n){if(l.isZero()||n.isZero())return new r(0)._forceRed(this);var e=l.mul(n),u=e.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),t=e.isub(u).iushrn(this.shift),i=t;return t.cmp(this.m)>=0?i=t.isub(this.m):t.cmpn(0)<0&&(i=t.iadd(this.m)),i._forceRed(this)},m.prototype.invm=function(l){var n=this.imod(l._invmp(this.m).mul(this.r2));return n._forceRed(this)}}("undefined"==typeof n||n,this)},{}],38:[function(l,n,e){function u(l){this.rand=l}var t;if(n.exports=function(l){return t||(t=new u(null)),t.generate(l)},n.exports.Rand=u,u.prototype.generate=function(l){return this._rand(l)},u.prototype._rand=function(l){if(this.rand.getBytes)return this.rand.getBytes(l);for(var n=new Uint8Array(l),e=0;eo||l<0?(e=Math.abs(l)%o,l<0?o-e:e):l}function u(l){for(var n=0;n>>8^255&e^99,this.SBOX[t]=e,this.INV_SBOX[e]=t,r=l[t],i=l[r],o=l[i],u=257*l[e]^16843008*e,this.SUB_MIX[0][t]=u<<24|u>>>8,this.SUB_MIX[1][t]=u<<16|u>>>16,this.SUB_MIX[2][t]=u<<8|u>>>24,this.SUB_MIX[3][t]=u,u=16843009*o^65537*i^257*r^16843008*t,this.INV_SUB_MIX[0][e]=u<<24|u>>>8,this.INV_SUB_MIX[1][e]=u<<16|u>>>16,this.INV_SUB_MIX[2][e]=u<<8|u>>>24,this.INV_SUB_MIX[3][e]=u,0===t?t=s=1:(t=r^l[l[l[o^r]]],s^=l[l[s]]);return!0};var s=new t;i.blockSize=16,i.prototype.blockSize=i.blockSize,i.keySize=32,i.prototype.keySize=i.keySize,i.prototype._doReset=function(){var l,n,e,u,t,r;for(e=this._key,n=e.length,this._nRounds=n+6,t=4*(this._nRounds+1),this._keySchedule=[],u=0;u>>24,r=s.SBOX[r>>>24]<<24|s.SBOX[r>>>16&255]<<16|s.SBOX[r>>>8&255]<<8|s.SBOX[255&r],r^=s.RCON[u/n|0]<<24):n>6&&u%n===4?r=s.SBOX[r>>>24]<<24|s.SBOX[r>>>16&255]<<16|s.SBOX[r>>>8&255]<<8|s.SBOX[255&r]:void 0,this._keySchedule[u-n]^r);for(this._invKeySchedule=[],l=0;l>>24]]^s.INV_SUB_MIX[1][s.SBOX[r>>>16&255]]^s.INV_SUB_MIX[2][s.SBOX[r>>>8&255]]^s.INV_SUB_MIX[3][s.SBOX[255&r]];return!0},i.prototype.encryptBlock=function(n){n=r(new l(n));var e=this._doCryptBlock(n,this._keySchedule,s.SUB_MIX,s.SBOX),u=new l(16);return u.writeUInt32BE(e[0],0),u.writeUInt32BE(e[1],4),u.writeUInt32BE(e[2],8),u.writeUInt32BE(e[3],12),u},i.prototype.decryptBlock=function(n){n=r(new l(n));var e=[n[3],n[1]];n[1]=e[0],n[3]=e[1];var u=this._doCryptBlock(n,this._invKeySchedule,s.INV_SUB_MIX,s.INV_SBOX),t=new l(16);return t.writeUInt32BE(u[0],0),t.writeUInt32BE(u[3],4),t.writeUInt32BE(u[2],8),t.writeUInt32BE(u[1],12),t},i.prototype.scrub=function(){u(this._keySchedule),u(this._invKeySchedule),u(this._key)},i.prototype._doCryptBlock=function(l,e,u,t){var r,i,o,s,a,f,c,h,d;i=l[0]^e[0],o=l[1]^e[1],s=l[2]^e[2],a=l[3]^e[3],r=4;for(var p=1;p>>24]^u[1][o>>>16&255]^u[2][s>>>8&255]^u[3][255&a]^e[r++],c=u[0][o>>>24]^u[1][s>>>16&255]^u[2][a>>>8&255]^u[3][255&i]^e[r++],h=u[0][s>>>24]^u[1][a>>>16&255]^u[2][i>>>8&255]^u[3][255&o]^e[r++],d=u[0][a>>>24]^u[1][i>>>16&255]^u[2][o>>>8&255]^u[3][255&s]^e[r++],i=f,o=c,s=h,a=d;return f=(t[i>>>24]<<24|t[o>>>16&255]<<16|t[s>>>8&255]<<8|t[255&a])^e[r++],c=(t[o>>>24]<<24|t[s>>>16&255]<<16|t[a>>>8&255]<<8|t[255&i])^e[r++],h=(t[s>>>24]<<24|t[a>>>16&255]<<16|t[i>>>8&255]<<8|t[255&o])^e[r++],d=(t[a>>>24]<<24|t[i>>>16&255]<<16|t[o>>>8&255]<<8|t[255&s])^e[r++],[n(f),n(c),n(h),n(d)]},e.AES=i}).call(this,l("buffer").Buffer)},{buffer:67}],41:[function(l,n,e){(function(e){function u(l,n,t,o){if(!(this instanceof u))return new u(l,n,t);i.call(this),this._finID=e.concat([t,new e([0,0,0,1])]),t=e.concat([t,new e([0,0,0,2])]),this._cipher=new r.AES(n),this._prev=new e(t.length),this._cache=new e(""),this._secCache=new e(""),this._decrypt=o,this._alen=0,this._len=0,t.copy(this._prev),this._mode=l;var a=new e(4);a.fill(0),this._ghash=new s(this._cipher.encryptBlock(a)),this._authTag=null,this._called=!1}function t(l,n){var e=0;l.length!==n.length&&e++;for(var u=Math.min(l.length,n.length),t=-1;++t16)return n=this.cache.slice(0,16),this.cache=this.cache.slice(16),n}else if(this.cache.length>=16)return n=this.cache.slice(0,16),this.cache=this.cache.slice(16),n;return null},t.prototype.flush=function(){if(this.cache.length)return this.cache};var b={ECB:l("./modes/ecb"),CBC:l("./modes/cbc"),CFB:l("./modes/cfb"),CFB8:l("./modes/cfb8"),CFB1:l("./modes/cfb1"),OFB:l("./modes/ofb"),CTR:l("./modes/ctr"),GCM:l("./modes/ctr")};e.createDecipher=o,e.createDecipheriv=i}).call(this,l("buffer").Buffer)},{"./aes":40,"./authCipher":41,"./modes":46,"./modes/cbc":47,"./modes/cfb":48,"./modes/cfb1":49,"./modes/cfb8":50,"./modes/ctr":51,"./modes/ecb":52,"./modes/ofb":53,"./streamCipher":54,buffer:67,"cipher-base":68,evp_bytestokey:214,inherits:224}],44:[function(l,n,e){(function(n){function u(l,e,r){return this instanceof u?(s.call(this),this._cache=new t,this._cipher=new o.AES(e),this._prev=new n(r.length),r.copy(this._prev),this._mode=l,void(this._autopadding=!0)):new u(l,e,r)}function t(){return this instanceof t?void(this.cache=new n("")):new t}function r(l,e,t){var r=f[l.toLowerCase()];if(!r)throw new TypeError("invalid suite type");if("string"==typeof t&&(t=new n(t)),"string"==typeof e&&(e=new n(e)),e.length!==r.key/8)throw new TypeError("invalid key length "+e.length);if(t.length!==r.iv)throw new TypeError("invalid iv length "+t.length);return"stream"===r.type?new h(p[r.mode],e,t):"auth"===r.type?new d(p[r.mode],e,t):new u(p[r.mode],e,t)}function i(l,n){var e=f[l.toLowerCase()];if(!e)throw new TypeError("invalid suite type");var u=c(n,!1,e.key,e.iv);return r(l,u.key,u.iv)}var o=l("./aes"),s=l("cipher-base"),a=l("inherits"),f=l("./modes"),c=l("evp_bytestokey"),h=l("./streamCipher"),d=l("./authCipher");a(u,s),u.prototype._update=function(l){this._cache.add(l);for(var e,u,t=[];e=this._cache.get();)u=this._mode.encrypt(this,e),t.push(u);return n.concat(t)},u.prototype._final=function(){var l=this._cache.flush();if(this._autopadding)return l=this._mode.encrypt(this,l),this._cipher.scrub(),l;if("10101010101010101010101010101010"!==l.toString("hex"))throw this._cipher.scrub(),new Error("data not multiple of block length")},u.prototype.setAutoPadding=function(l){return this._autopadding=!!l,this},t.prototype.add=function(l){this.cache=n.concat([this.cache,l])},t.prototype.get=function(){if(this.cache.length>15){var l=this.cache.slice(0,16);return this.cache=this.cache.slice(16),l}return null},t.prototype.flush=function(){for(var l=16-this.cache.length,e=new n(l),u=-1;++us||l<0?(e=Math.abs(l)%s,l<0?s-e:e):l}function i(l,n){return[l[0]^n[0],l[1]^n[1],l[2]^n[2],l[3]^n[3]]}var o=new l(16);o.fill(0),n.exports=e,e.prototype.ghash=function(l){for(var n=-1;++n0;l--)r[l]=r[l]>>>1|(1&r[l-1])<<31;r[0]=r[0]>>>1,e&&(r[0]=r[0]^225<<24)}this.state=t(o)},e.prototype.update=function(n){this.cache=l.concat([this.cache,n]);for(var e;this.cache.length>=16;)e=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(e)},e.prototype["final"]=function(n,e){return this.cache.length&&this.ghash(l.concat([this.cache,o],16)),this.ghash(t([0,n,0,e])),this.state};var s=Math.pow(2,32)}).call(this,l("buffer").Buffer)},{buffer:67}],46:[function(l,n,e){e["aes-128-ecb"]={cipher:"AES",key:128,iv:0,mode:"ECB",type:"block"},e["aes-192-ecb"]={cipher:"AES",key:192,iv:0,mode:"ECB",type:"block"},e["aes-256-ecb"]={cipher:"AES",key:256,iv:0,mode:"ECB",type:"block"},e["aes-128-cbc"]={cipher:"AES",key:128,iv:16,mode:"CBC",type:"block"},e["aes-192-cbc"]={cipher:"AES",key:192,iv:16,mode:"CBC",type:"block"},e["aes-256-cbc"]={cipher:"AES",key:256,iv:16,mode:"CBC",type:"block"},e.aes128=e["aes-128-cbc"],e.aes192=e["aes-192-cbc"],e.aes256=e["aes-256-cbc"],e["aes-128-cfb"]={cipher:"AES",key:128,iv:16,mode:"CFB",type:"stream"},e["aes-192-cfb"]={cipher:"AES",key:192,iv:16,mode:"CFB",type:"stream"},e["aes-256-cfb"]={cipher:"AES",key:256,iv:16,mode:"CFB",type:"stream"},e["aes-128-cfb8"]={cipher:"AES",key:128,iv:16,mode:"CFB8",type:"stream"},e["aes-192-cfb8"]={cipher:"AES",key:192,iv:16,mode:"CFB8",type:"stream"},e["aes-256-cfb8"]={cipher:"AES",key:256,iv:16,mode:"CFB8",type:"stream"},e["aes-128-cfb1"]={cipher:"AES",key:128,iv:16,mode:"CFB1",type:"stream"},e["aes-192-cfb1"]={cipher:"AES",key:192,iv:16,mode:"CFB1",type:"stream"},e["aes-256-cfb1"]={cipher:"AES",key:256,iv:16,mode:"CFB1",type:"stream"},e["aes-128-ofb"]={cipher:"AES",key:128,iv:16,mode:"OFB",type:"stream"},e["aes-192-ofb"]={cipher:"AES",key:192,iv:16,mode:"OFB",type:"stream"},e["aes-256-ofb"]={cipher:"AES",key:256,iv:16,mode:"OFB",type:"stream"},e["aes-128-ctr"]={cipher:"AES",key:128,iv:16,mode:"CTR",type:"stream"},e["aes-192-ctr"]={cipher:"AES",key:192,iv:16,mode:"CTR",type:"stream"},e["aes-256-ctr"]={cipher:"AES",key:256,iv:16,mode:"CTR",type:"stream"},e["aes-128-gcm"]={cipher:"AES",key:128,iv:12,mode:"GCM",type:"auth"},e["aes-192-gcm"]={cipher:"AES",key:192,iv:12,mode:"GCM",type:"auth"},e["aes-256-gcm"]={cipher:"AES",key:256,iv:12,mode:"GCM",type:"auth"}},{}],47:[function(l,n,e){var u=l("buffer-xor");e.encrypt=function(l,n){var e=u(n,l._prev);return l._prev=l._cipher.encryptBlock(e),l._prev},e.decrypt=function(l,n){var e=l._prev;l._prev=n;var t=l._cipher.decryptBlock(n);return u(t,e)}},{"buffer-xor":66}],48:[function(l,n,e){(function(n){function u(l,e,u){var r=e.length,i=t(e,l._cache);return l._cache=l._cache.slice(r),l._prev=n.concat([l._prev,u?e:i]),i}var t=l("buffer-xor");e.encrypt=function(l,e,t){for(var r,i=new n("");e.length;){if(0===l._cache.length&&(l._cache=l._cipher.encryptBlock(l._prev),l._prev=new n("")),!(l._cache.length<=e.length)){i=n.concat([i,u(l,e,t)]);break}r=l._cache.length,i=n.concat([i,u(l,e.slice(0,r),t)]),e=e.slice(r)}return i}}).call(this,l("buffer").Buffer)},{buffer:67,"buffer-xor":66}],49:[function(l,n,e){(function(l){function n(l,n,e){for(var t,r,i,o=-1,s=8,a=0;++o>o%8,l._prev=u(l._prev,e?r:i);return a}function u(n,e){var u=n.length,t=-1,r=new l(n.length);for(n=l.concat([n,new l([e])]);++t>7;return r}e.encrypt=function(e,u,t){for(var r=u.length,i=new l(r),o=-1;++o=0||!e.umod(l.prime1)||!e.umod(l.prime2);)e=new i(o(n));return e}var i=l("bn.js"),o=l("randombytes");n.exports=t,t.getr=r}).call(this,l("buffer").Buffer)},{"bn.js":37,buffer:67,randombytes:247}],59:[function(l,n,e){(function(l){"use strict";e["RSA-SHA224"]=e.sha224WithRSAEncryption={sign:"rsa",hash:"sha224",id:new l("302d300d06096086480165030402040500041c","hex")},e["RSA-SHA256"]=e.sha256WithRSAEncryption={sign:"rsa",hash:"sha256",id:new l("3031300d060960864801650304020105000420","hex")},e["RSA-SHA384"]=e.sha384WithRSAEncryption={sign:"rsa",hash:"sha384",id:new l("3041300d060960864801650304020205000430","hex")},e["RSA-SHA512"]=e.sha512WithRSAEncryption={sign:"rsa",hash:"sha512",id:new l("3051300d060960864801650304020305000440","hex") +},e["RSA-SHA1"]={sign:"rsa",hash:"sha1",id:new l("3021300906052b0e03021a05000414","hex")},e["ecdsa-with-SHA1"]={sign:"ecdsa",hash:"sha1",id:new l("","hex")},e.DSA=e["DSA-SHA1"]=e["DSA-SHA"]={sign:"dsa",hash:"sha1",id:new l("","hex")},e["DSA-SHA224"]=e["DSA-WITH-SHA224"]={sign:"dsa",hash:"sha224",id:new l("","hex")},e["DSA-SHA256"]=e["DSA-WITH-SHA256"]={sign:"dsa",hash:"sha256",id:new l("","hex")},e["DSA-SHA384"]=e["DSA-WITH-SHA384"]={sign:"dsa",hash:"sha384",id:new l("","hex")},e["DSA-SHA512"]=e["DSA-WITH-SHA512"]={sign:"dsa",hash:"sha512",id:new l("","hex")},e["DSA-RIPEMD160"]={sign:"dsa",hash:"rmd160",id:new l("","hex")},e["RSA-RIPEMD160"]=e.ripemd160WithRSA={sign:"rsa",hash:"rmd160",id:new l("3021300906052b2403020105000414","hex")},e["RSA-MD5"]=e.md5WithRSAEncryption={sign:"rsa",hash:"md5",id:new l("3020300c06082a864886f70d020505000410","hex")}}).call(this,l("buffer").Buffer)},{buffer:67}],60:[function(l,n,e){(function(e){function u(l){c.Writable.call(this);var n=d[l];if(!n)throw new Error("Unknown message digest");this._hashType=n.hash,this._hash=s(n.hash),this._tag=n.id,this._signType=n.sign}function t(l){c.Writable.call(this);var n=d[l];if(!n)throw new Error("Unknown message digest");this._hash=s(n.hash),this._tag=n.id,this._signType=n.sign}function r(l){return new u(l)}function i(l){return new t(l)}var o=l("./algos"),s=l("create-hash"),a=l("inherits"),f=l("./sign"),c=l("stream"),h=l("./verify"),d={};Object.keys(o).forEach(function(l){d[l]=d[l.toLowerCase()]=o[l]}),a(u,c.Writable),u.prototype._write=function(l,n,e){this._hash.update(l),e()},u.prototype.update=function(l,n){return"string"==typeof l&&(l=new e(l,n)),this._hash.update(l),this},u.prototype.sign=function(l,n){this.end();var u=this._hash.digest(),t=f(e.concat([this._tag,u]),l,this._hashType,this._signType);return n?t.toString(n):t},a(t,c.Writable),t.prototype._write=function(l,n,e){this._hash.update(l),e()},t.prototype.update=function(l,n){return"string"==typeof l&&(l=new e(l,n)),this._hash.update(l),this},t.prototype.verify=function(l,n,u){"string"==typeof n&&(n=new e(n,u)),this.end();var t=this._hash.digest();return h(n,e.concat([this._tag,t]),l,this._signType)},n.exports={Sign:r,Verify:i,createSign:r,createVerify:i}}).call(this,l("buffer").Buffer)},{"./algos":59,"./sign":62,"./verify":63,buffer:67,"create-hash":182,inherits:224,stream:268}],61:[function(l,n,e){"use strict";e["1.3.132.0.10"]="secp256k1",e["1.3.132.0.33"]="p224",e["1.2.840.10045.3.1.1"]="p192",e["1.2.840.10045.3.1.7"]="p256",e["1.3.132.0.34"]="p384",e["1.3.132.0.35"]="p521"},{}],62:[function(l,n,e){(function(e){function u(l,n,e,u){var i=v(n);if(i.curve){if("ecdsa"!==u)throw new Error("wrong private key type");return t(l,i)}if("dsa"===i.type){if("dsa"!==u)throw new Error("wrong private key type");return r(l,i,e)}if("rsa"!==u)throw new Error("wrong private key type");for(var o=i.modulus.byteLength(),s=[0,1];l.length+s.length+10&&e.ishrn(u),e}function a(l,n){l=s(l,n),l=l.mod(n);var u=new e(l.toArray());if(u.length=n)throw new Error("invalid sig")}var o=l("./curves"),s=l("elliptic"),a=l("parse-asn1"),f=l("bn.js"),c=s.ec;n.exports=u}).call(this,l("buffer").Buffer)},{"./curves":61,"bn.js":37,buffer:67,elliptic:197,"parse-asn1":235}],64:[function(l,n,e){arguments[4][39][0].apply(e,arguments)},{dup:39}],65:[function(l,n,e){(function(n){"use strict";var u=l("buffer"),t=u.Buffer,r=u.SlowBuffer,i=u.kMaxLength||2147483647;e.alloc=function(l,n,e){if("function"==typeof t.alloc)return t.alloc(l,n,e);if("number"==typeof e)throw new TypeError("encoding must not be number");if("number"!=typeof l)throw new TypeError("size must be a number");if(l>i)throw new RangeError("size is too large");var u=e,r=n;void 0===r&&(u=void 0,r=0);var o=new t(l);if("string"==typeof r)for(var s=new t(r,u),a=s.length,f=-1;++fi)throw new RangeError("size is too large");return new t(l)},e.from=function(l,e,u){if("function"==typeof t.from&&(!n.Uint8Array||Uint8Array.from!==t.from))return t.from(l,e,u);if("number"==typeof l)throw new TypeError('"value" argument must not be a number');if("string"==typeof l)return new t(l,e);if("undefined"!=typeof ArrayBuffer&&l instanceof ArrayBuffer){var r=e;if(1===arguments.length)return new t(l);"undefined"==typeof r&&(r=0);var i=u;if("undefined"==typeof i&&(i=l.byteLength-r),r>=l.byteLength)throw new RangeError("'offset' is out of bounds");if(i>l.byteLength-r)throw new RangeError("'length' is out of bounds");return new t(l.slice(r,r+i))}if(t.isBuffer(l)){var o=new t(l.length);return l.copy(o,0,0,l.length),o}if(l){if(Array.isArray(l)||"undefined"!=typeof ArrayBuffer&&l.buffer instanceof ArrayBuffer||"length"in l)return new t(l);if("Buffer"===l.type&&Array.isArray(l.data))return new t(l.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")},e.allocUnsafeSlow=function(l){if("function"==typeof t.allocUnsafeSlow)return t.allocUnsafeSlow(l);if("number"!=typeof l)throw new TypeError("size must be a number");if(l>=i)throw new RangeError("size is too large");return new r(l)}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{buffer:67}],66:[function(l,n,e){(function(l){n.exports=function(n,e){for(var u=Math.min(n.length,e.length),t=new l(u),r=0;r=t())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+t().toString(16)+" bytes");return 0|l}function v(l){return+l!=l&&(l=0),i.alloc(+l)}function _(l,n){if(i.isBuffer(l))return l.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(l)||l instanceof ArrayBuffer))return l.byteLength;"string"!=typeof l&&(l=""+l);var e=l.length;if(0===e)return 0;for(var u=!1;;)switch(n){case"ascii":case"latin1":case"binary":return e;case"utf8":case"utf-8":case void 0:return V(l).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*e;case"hex":return e>>>1;case"base64":return X(l).length;default:if(u)return V(l).length;n=(""+n).toLowerCase(),u=!0}}function y(l,n,e){var u=!1;if((void 0===n||n<0)&&(n=0),n>this.length)return"";if((void 0===e||e>this.length)&&(e=this.length),e<=0)return"";if(e>>>=0,n>>>=0,e<=n)return"";for(l||(l="utf8");;)switch(l){case"hex":return B(this,n,e);case"utf8":case"utf-8":return A(this,n,e);case"ascii":return R(this,n,e);case"latin1":case"binary":return T(this,n,e);case"base64":return C(this,n,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,n,e);default:if(u)throw new TypeError("Unknown encoding: "+l);l=(l+"").toLowerCase(),u=!0}}function m(l,n,e){var u=l[n];l[n]=l[e],l[e]=u}function g(l,n,e,u,t){if(0===l.length)return-1;if("string"==typeof e?(u=e,e=0):e>2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e=+e,isNaN(e)&&(e=t?0:l.length-1),e<0&&(e=l.length+e),e>=l.length){if(t)return-1;e=l.length-1}else if(e<0){if(!t)return-1;e=0}if("string"==typeof n&&(n=i.from(n,u)),i.isBuffer(n))return 0===n.length?-1:w(l,n,e,u,t);if("number"==typeof n)return n=255&n,i.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?t?Uint8Array.prototype.indexOf.call(l,n,e):Uint8Array.prototype.lastIndexOf.call(l,n,e):w(l,[n],e,u,t);throw new TypeError("val must be string, number or Buffer")}function w(l,n,e,u,t){function r(l,n){return 1===i?l[n]:l.readUInt16BE(n*i)}var i=1,o=l.length,s=n.length;if(void 0!==u&&(u=String(u).toLowerCase(),"ucs2"===u||"ucs-2"===u||"utf16le"===u||"utf-16le"===u)){if(l.length<2||n.length<2)return-1;i=2,o/=2,s/=2,e/=2}var a;if(t){var f=-1;for(a=e;ao&&(e=o-s),a=e;a>=0;a--){for(var c=!0,h=0;ht&&(u=t)):u=t;var r=n.length;if(r%2!==0)throw new TypeError("Invalid hex string");u>r/2&&(u=r/2);for(var i=0;i239?4:r>223?3:r>191?2:1;if(t+o<=e){var s,a,f,c;switch(o){case 1:r<128&&(i=r);break;case 2:s=l[t+1],128===(192&s)&&(c=(31&r)<<6|63&s,c>127&&(i=c));break;case 3:s=l[t+1],a=l[t+2],128===(192&s)&&128===(192&a)&&(c=(15&r)<<12|(63&s)<<6|63&a,c>2047&&(c<55296||c>57343)&&(i=c));break;case 4:s=l[t+1],a=l[t+2],f=l[t+3],128===(192&s)&&128===(192&a)&&128===(192&f)&&(c=(15&r)<<18|(63&s)<<12|(63&a)<<6|63&f,c>65535&&c<1114112&&(i=c))}}null===i?(i=65533,o=1):i>65535&&(i-=65536,u.push(i>>>10&1023|55296),i=56320|1023&i),u.push(i),t+=o}return x(u)}function x(l){var n=l.length;if(n<=ll)return String.fromCharCode.apply(String,l);for(var e="",u=0;uu)&&(e=u);for(var t="",r=n;re)throw new RangeError("Trying to access beyond buffer length")}function U(l,n,e,u,t,r){if(!i.isBuffer(l))throw new TypeError('"buffer" argument must be a Buffer instance');if(n>t||nl.length)throw new RangeError("Index out of range")}function N(l,n,e,u){n<0&&(n=65535+n+1);for(var t=0,r=Math.min(l.length-e,2);t>>8*(u?t:1-t)}function L(l,n,e,u){n<0&&(n=4294967295+n+1);for(var t=0,r=Math.min(l.length-e,4);t>>8*(u?t:3-t)&255}function D(l,n,e,u,t,r){if(e+u>l.length)throw new RangeError("Index out of range");if(e<0)throw new RangeError("Index out of range")}function F(l,n,e,u,t){return t||D(l,n,e,4,3.4028234663852886e38,-3.4028234663852886e38),$.write(l,n,e,u,23,4),e+4}function q(l,n,e,u,t){return t||D(l,n,e,8,1.7976931348623157e308,-1.7976931348623157e308),$.write(l,n,e,u,52,8),e+8}function z(l){if(l=H(l).replace(nl,""),l.length<2)return"";for(;l.length%4!==0;)l+="=";return l}function H(l){return l.trim?l.trim():l.replace(/^\s+|\s+$/g,"")}function K(l){return l<16?"0"+l.toString(16):l.toString(16)}function V(l,n){n=n||1/0;for(var e,u=l.length,t=null,r=[],i=0;i55295&&e<57344){if(!t){if(e>56319){(n-=3)>-1&&r.push(239,191,189);continue}if(i+1===u){(n-=3)>-1&&r.push(239,191,189);continue}t=e;continue}if(e<56320){(n-=3)>-1&&r.push(239,191,189),t=e;continue}e=(t-55296<<10|e-56320)+65536}else t&&(n-=3)>-1&&r.push(239,191,189);if(t=null,e<128){if((n-=1)<0)break;r.push(e)}else if(e<2048){if((n-=2)<0)break;r.push(e>>6|192,63&e|128)}else if(e<65536){if((n-=3)<0)break;r.push(e>>12|224,e>>6&63|128,63&e|128)}else{if(!(e<1114112))throw new Error("Invalid code point");if((n-=4)<0)break;r.push(e>>18|240,e>>12&63|128,e>>6&63|128,63&e|128)}}return r}function Y(l){for(var n=[],e=0;e>8,t=e%256,r.push(t),r.push(u);return r}function X(l){return J.toByteArray(z(l))}function G(l,n,e,u){for(var t=0;t=n.length||t>=l.length);++t)n[t+e]=l[t];return t}function Z(l){return l!==l}var J=l("base64-js"),$=l("ieee754"),Q=l("isarray");e.Buffer=i,e.SlowBuffer=v,e.INSPECT_MAX_BYTES=50,i.TYPED_ARRAY_SUPPORT=void 0!==n.TYPED_ARRAY_SUPPORT?n.TYPED_ARRAY_SUPPORT:u(),e.kMaxLength=t(),i.poolSize=8192,i._augment=function(l){return l.__proto__=i.prototype,l},i.from=function(l,n,e){return o(null,l,n,e)},i.TYPED_ARRAY_SUPPORT&&(i.prototype.__proto__=Uint8Array.prototype,i.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&i[Symbol.species]===i&&Object.defineProperty(i,Symbol.species,{value:null,configurable:!0})),i.alloc=function(l,n,e){return a(null,l,n,e)},i.allocUnsafe=function(l){return f(null,l)},i.allocUnsafeSlow=function(l){return f(null,l)},i.isBuffer=function(l){return!(null==l||!l._isBuffer)},i.compare=function(l,n){if(!i.isBuffer(l)||!i.isBuffer(n))throw new TypeError("Arguments must be Buffers");if(l===n)return 0;for(var e=l.length,u=n.length,t=0,r=Math.min(e,u);t0&&(l=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(l+=" ... ")),""},i.prototype.compare=function(l,n,e,u,t){if(!i.isBuffer(l))throw new TypeError("Argument must be a Buffer");if(void 0===n&&(n=0),void 0===e&&(e=l?l.length:0),void 0===u&&(u=0),void 0===t&&(t=this.length),n<0||e>l.length||u<0||t>this.length)throw new RangeError("out of range index");if(u>=t&&n>=e)return 0;if(u>=t)return-1;if(n>=e)return 1;if(n>>>=0,e>>>=0,u>>>=0,t>>>=0,this===l)return 0;for(var r=t-u,o=e-n,s=Math.min(r,o),a=this.slice(u,t),f=l.slice(n,e),c=0;ct)&&(e=t),l.length>0&&(e<0||n<0)||n>this.length)throw new RangeError("Attempt to write outside buffer bounds");u||(u="utf8");for(var r=!1;;)switch(u){case"hex":return k(this,l,n,e);case"utf8":case"utf-8":return E(this,l,n,e);case"ascii":return S(this,l,n,e);case"latin1":case"binary":return M(this,l,n,e);case"base64":return j(this,l,n,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,l,n,e);default:if(r)throw new TypeError("Unknown encoding: "+u);u=(""+u).toLowerCase(),r=!0}},i.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var ll=4096;i.prototype.slice=function(l,n){var e=this.length;l=~~l,n=void 0===n?e:~~n,l<0?(l+=e,l<0&&(l=0)):l>e&&(l=e),n<0?(n+=e,n<0&&(n=0)):n>e&&(n=e),n0&&(t*=256);)u+=this[l+--n]*t;return u},i.prototype.readUInt8=function(l,n){return n||P(l,1,this.length),this[l]},i.prototype.readUInt16LE=function(l,n){return n||P(l,2,this.length),this[l]|this[l+1]<<8},i.prototype.readUInt16BE=function(l,n){return n||P(l,2,this.length),this[l]<<8|this[l+1]},i.prototype.readUInt32LE=function(l,n){return n||P(l,4,this.length),(this[l]|this[l+1]<<8|this[l+2]<<16)+16777216*this[l+3]},i.prototype.readUInt32BE=function(l,n){return n||P(l,4,this.length),16777216*this[l]+(this[l+1]<<16|this[l+2]<<8|this[l+3])},i.prototype.readIntLE=function(l,n,e){l=0|l,n=0|n,e||P(l,n,this.length);for(var u=this[l],t=1,r=0;++r=t&&(u-=Math.pow(2,8*n)),u},i.prototype.readIntBE=function(l,n,e){l=0|l,n=0|n,e||P(l,n,this.length);for(var u=n,t=1,r=this[l+--u];u>0&&(t*=256);)r+=this[l+--u]*t;return t*=128,r>=t&&(r-=Math.pow(2,8*n)),r},i.prototype.readInt8=function(l,n){return n||P(l,1,this.length),128&this[l]?(255-this[l]+1)*-1:this[l]},i.prototype.readInt16LE=function(l,n){n||P(l,2,this.length);var e=this[l]|this[l+1]<<8;return 32768&e?4294901760|e:e},i.prototype.readInt16BE=function(l,n){n||P(l,2,this.length);var e=this[l+1]|this[l]<<8;return 32768&e?4294901760|e:e},i.prototype.readInt32LE=function(l,n){return n||P(l,4,this.length),this[l]|this[l+1]<<8|this[l+2]<<16|this[l+3]<<24},i.prototype.readInt32BE=function(l,n){return n||P(l,4,this.length),this[l]<<24|this[l+1]<<16|this[l+2]<<8|this[l+3]},i.prototype.readFloatLE=function(l,n){return n||P(l,4,this.length),$.read(this,l,!0,23,4)},i.prototype.readFloatBE=function(l,n){return n||P(l,4,this.length),$.read(this,l,!1,23,4)},i.prototype.readDoubleLE=function(l,n){return n||P(l,8,this.length),$.read(this,l,!0,52,8)},i.prototype.readDoubleBE=function(l,n){return n||P(l,8,this.length),$.read(this,l,!1,52,8)},i.prototype.writeUIntLE=function(l,n,e,u){if(l=+l,n=0|n,e=0|e,!u){var t=Math.pow(2,8*e)-1;U(this,l,n,e,t,0)}var r=1,i=0;for(this[n]=255&l;++i=0&&(i*=256);)this[n+r]=l/i&255;return n+e},i.prototype.writeUInt8=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,1,255,0),i.TYPED_ARRAY_SUPPORT||(l=Math.floor(l)),this[n]=255&l,n+1},i.prototype.writeUInt16LE=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[n]=255&l,this[n+1]=l>>>8):N(this,l,n,!0),n+2},i.prototype.writeUInt16BE=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[n]=l>>>8,this[n+1]=255&l):N(this,l,n,!1),n+2},i.prototype.writeUInt32LE=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[n+3]=l>>>24,this[n+2]=l>>>16,this[n+1]=l>>>8,this[n]=255&l):L(this,l,n,!0),n+4},i.prototype.writeUInt32BE=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[n]=l>>>24,this[n+1]=l>>>16,this[n+2]=l>>>8,this[n+3]=255&l):L(this,l,n,!1),n+4},i.prototype.writeIntLE=function(l,n,e,u){if(l=+l,n=0|n,!u){var t=Math.pow(2,8*e-1);U(this,l,n,e,t-1,-t)}var r=0,i=1,o=0;for(this[n]=255&l;++r>0)-o&255;return n+e},i.prototype.writeIntBE=function(l,n,e,u){if(l=+l,n=0|n,!u){var t=Math.pow(2,8*e-1);U(this,l,n,e,t-1,-t)}var r=e-1,i=1,o=0;for(this[n+r]=255&l;--r>=0&&(i*=256);)l<0&&0===o&&0!==this[n+r+1]&&(o=1),this[n+r]=(l/i>>0)-o&255;return n+e},i.prototype.writeInt8=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,1,127,-128),i.TYPED_ARRAY_SUPPORT||(l=Math.floor(l)),l<0&&(l=255+l+1),this[n]=255&l,n+1},i.prototype.writeInt16LE=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[n]=255&l,this[n+1]=l>>>8):N(this,l,n,!0),n+2},i.prototype.writeInt16BE=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[n]=l>>>8,this[n+1]=255&l):N(this,l,n,!1),n+2},i.prototype.writeInt32LE=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,4,2147483647,-2147483648),i.TYPED_ARRAY_SUPPORT?(this[n]=255&l,this[n+1]=l>>>8,this[n+2]=l>>>16,this[n+3]=l>>>24):L(this,l,n,!0),n+4},i.prototype.writeInt32BE=function(l,n,e){return l=+l,n=0|n,e||U(this,l,n,4,2147483647,-2147483648),l<0&&(l=4294967295+l+1),i.TYPED_ARRAY_SUPPORT?(this[n]=l>>>24,this[n+1]=l>>>16,this[n+2]=l>>>8,this[n+3]=255&l):L(this,l,n,!1),n+4},i.prototype.writeFloatLE=function(l,n,e){return F(this,l,n,!0,e)},i.prototype.writeFloatBE=function(l,n,e){return F(this,l,n,!1,e)},i.prototype.writeDoubleLE=function(l,n,e){return q(this,l,n,!0,e)},i.prototype.writeDoubleBE=function(l,n,e){return q(this,l,n,!1,e)},i.prototype.copy=function(l,n,e,u){if(e||(e=0),u||0===u||(u=this.length),n>=l.length&&(n=l.length),n||(n=0),u>0&&u=this.length)throw new RangeError("sourceStart out of bounds");if(u<0)throw new RangeError("sourceEnd out of bounds");u>this.length&&(u=this.length),l.length-n=0;--t)l[t+n]=this[t+e];else if(r<1e3||!i.TYPED_ARRAY_SUPPORT)for(t=0;t>>=0,e=void 0===e?this.length:e>>>0,l||(l=0);var r;if("number"==typeof l)for(r=n;rf;)if(o=s[f++],o!=o)return!0}else for(;a>f;f++)if((l||f in s)&&s[f]===e)return l||f||0;return!l&&-1}}},{"./_to-index":151,"./_to-iobject":153,"./_to-length":154}],88:[function(l,n,e){var u=l("./_ctx"),t=l("./_iobject"),r=l("./_to-object"),i=l("./_to-length"),o=l("./_array-species-create");n.exports=function(l,n){var e=1==l,s=2==l,a=3==l,f=4==l,c=6==l,h=5==l||c,d=n||o;return function(n,o,p){for(var b,v,_=r(n),y=t(_),m=u(o,p,3),g=i(y.length),w=0,k=e?d(n,g):s?d(n,0):void 0;g>w;w++)if((h||w in y)&&(b=y[w],v=m(b,w,_),l))if(e)k[w]=v;else if(v)switch(l){case 3:return!0;case 5:return b;case 6:return w;case 2:k.push(b)}else if(f)return!1;return c?-1:a||f?f:k}}},{"./_array-species-create":90,"./_ctx":98,"./_iobject":113,"./_to-length":154,"./_to-object":155}],89:[function(l,n,e){var u=l("./_is-object"),t=l("./_is-array"),r=l("./_wks")("species");n.exports=function(l){var n;return t(l)&&(n=l.constructor,"function"!=typeof n||n!==Array&&!t(n.prototype)||(n=void 0),u(n)&&(n=n[r],null===n&&(n=void 0))),void 0===n?Array:n}},{"./_is-array":115,"./_is-object":116,"./_wks":160}],90:[function(l,n,e){var u=l("./_array-species-constructor");n.exports=function(l,n){return new(u(l))(n)}},{"./_array-species-constructor":89}],91:[function(l,n,e){var u=l("./_cof"),t=l("./_wks")("toStringTag"),r="Arguments"==u(function(){return arguments}()),i=function(l,n){try{return l[n]}catch(e){}};n.exports=function(l){var n,e,o;return void 0===l?"Undefined":null===l?"Null":"string"==typeof(e=i(n=Object(l),t))?e:r?u(n):"Object"==(o=u(n))&&"function"==typeof n.callee?"Arguments":o}},{"./_cof":92,"./_wks":160}],92:[function(l,n,e){var u={}.toString;n.exports=function(l){return u.call(l).slice(8,-1)}},{}],93:[function(l,n,e){"use strict";var u=l("./_object-dp").f,t=l("./_object-create"),r=l("./_redefine-all"),i=l("./_ctx"),o=l("./_an-instance"),s=l("./_defined"),a=l("./_for-of"),f=l("./_iter-define"),c=l("./_iter-step"),h=l("./_set-species"),d=l("./_descriptors"),p=l("./_meta").fastKey,b=d?"_s":"size",v=function(l,n){var e,u=p(n);if("F"!==u)return l._i[u];for(e=l._f;e;e=e.n)if(e.k==n)return e};n.exports={getConstructor:function(l,n,e,f){var c=l(function(l,u){o(l,c,n,"_i"),l._i=t(null),l._f=void 0,l._l=void 0,l[b]=0,void 0!=u&&a(u,e,l[f],l)});return r(c.prototype,{clear:function(){for(var l=this,n=l._i,e=l._f;e;e=e.n)e.r=!0,e.p&&(e.p=e.p.n=void 0),delete n[e.i];l._f=l._l=void 0,l[b]=0},"delete":function(l){var n=this,e=v(n,l);if(e){var u=e.n,t=e.p;delete n._i[e.i],e.r=!0,t&&(t.n=u),u&&(u.p=t),n._f==e&&(n._f=u),n._l==e&&(n._l=t),n[b]--}return!!e},forEach:function(l){o(this,c,"forEach");for(var n,e=i(l,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(e(n.v,n.k,this);n&&n.r;)n=n.p},has:function(l){return!!v(this,l)}}),d&&u(c.prototype,"size",{get:function(){return s(this[b])}}),c},def:function(l,n,e){var u,t,r=v(l,n);return r?r.v=e:(l._l=r={i:t=p(n,!0),k:n,v:e,p:u=l._l,n:void 0,r:!1},l._f||(l._f=r),u&&(u.n=r),l[b]++,"F"!==t&&(l._i[t]=r)),l},getEntry:v,setStrong:function(l,n,e){f(l,n,function(l,n){this._t=l,this._k=n,this._l=void 0},function(){for(var l=this,n=l._k,e=l._l;e&&e.r;)e=e.p;return l._t&&(l._l=e=e?e.n:l._t._f)?"keys"==n?c(0,e.k):"values"==n?c(0,e.v):c(0,[e.k,e.v]):(l._t=void 0,c(1))},e?"entries":"values",!e,!0),h(n)}}},{"./_an-instance":84,"./_ctx":98,"./_defined":99,"./_descriptors":100,"./_for-of":106,"./_iter-define":119,"./_iter-step":121,"./_meta":125,"./_object-create":128,"./_object-dp":129,"./_redefine-all":141,"./_set-species":144}],94:[function(l,n,e){var u=l("./_classof"),t=l("./_array-from-iterable");n.exports=function(l){return function(){if(u(this)!=l)throw TypeError(l+"#toJSON isn't generic");return t(this)}}},{"./_array-from-iterable":86,"./_classof":91}],95:[function(l,n,e){"use strict";var u=l("./_global"),t=l("./_export"),r=l("./_meta"),i=l("./_fails"),o=l("./_hide"),s=l("./_redefine-all"),a=l("./_for-of"),f=l("./_an-instance"),c=l("./_is-object"),h=l("./_set-to-string-tag"),d=l("./_object-dp").f,p=l("./_array-methods")(0),b=l("./_descriptors");n.exports=function(l,n,e,v,_,y){var m=u[l],g=m,w=_?"set":"add",k=g&&g.prototype,E={};return b&&"function"==typeof g&&(y||k.forEach&&!i(function(){(new g).entries().next()}))?(g=n(function(n,e){f(n,g,l,"_c"),n._c=new m,void 0!=e&&a(e,_,n[w],n)}),p("add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON".split(","),function(l){var n="add"==l||"set"==l;l in k&&(!y||"clear"!=l)&&o(g.prototype,l,function(e,u){if(f(this,g,l),!n&&y&&!c(e))return"get"==l&&void 0;var t=this._c[l](0===e?0:e,u);return n?this:t})}),"size"in k&&d(g.prototype,"size",{get:function(){return this._c.size}})):(g=v.getConstructor(n,l,_,w),s(g.prototype,e),r.NEED=!0),h(g,l),E[l]=g,t(t.G+t.W+t.F,E),y||v.setStrong(g,l,_),g}},{"./_an-instance":84,"./_array-methods":88,"./_descriptors":100,"./_export":104,"./_fails":105,"./_for-of":106,"./_global":107,"./_hide":109,"./_is-object":116,"./_meta":125,"./_object-dp":129,"./_redefine-all":141,"./_set-to-string-tag":145}],96:[function(l,n,e){var u=n.exports={version:"2.4.0"};"number"==typeof __e&&(__e=u)},{}],97:[function(l,n,e){"use strict";var u=l("./_object-dp"),t=l("./_property-desc");n.exports=function(l,n,e){n in l?u.f(l,n,t(0,e)):l[n]=e}},{"./_object-dp":129,"./_property-desc":140}],98:[function(l,n,e){var u=l("./_a-function");n.exports=function(l,n,e){if(u(l),void 0===n)return l;switch(e){case 1:return function(e){return l.call(n,e)};case 2:return function(e,u){return l.call(n,e,u)};case 3:return function(e,u,t){return l.call(n,e,u,t)}}return function(){return l.apply(n,arguments)}}},{"./_a-function":82}],99:[function(l,n,e){n.exports=function(l){if(void 0==l)throw TypeError("Can't call method on "+l);return l}},{}],100:[function(l,n,e){n.exports=!l("./_fails")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{"./_fails":105}],101:[function(l,n,e){var u=l("./_is-object"),t=l("./_global").document,r=u(t)&&u(t.createElement);n.exports=function(l){return r?t.createElement(l):{}}},{"./_global":107,"./_is-object":116}],102:[function(l,n,e){n.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},{}],103:[function(l,n,e){var u=l("./_object-keys"),t=l("./_object-gops"),r=l("./_object-pie");n.exports=function(l){var n=u(l),e=t.f;if(e)for(var i,o=e(l),s=r.f,a=0;o.length>a;)s.call(l,i=o[a++])&&n.push(i);return n}},{"./_object-gops":134,"./_object-keys":137,"./_object-pie":138}],104:[function(l,n,e){var u=l("./_global"),t=l("./_core"),r=l("./_ctx"),i=l("./_hide"),o="prototype",s=function(l,n,e){var a,f,c,h=l&s.F,d=l&s.G,p=l&s.S,b=l&s.P,v=l&s.B,_=l&s.W,y=d?t:t[n]||(t[n]={}),m=y[o],g=d?u:p?u[n]:(u[n]||{})[o];d&&(e=n);for(a in e)f=!h&&g&&void 0!==g[a],f&&a in y||(c=f?g[a]:e[a],y[a]=d&&"function"!=typeof g[a]?e[a]:v&&f?r(c,u):_&&g[a]==c?function(l){var n=function(n,e,u){if(this instanceof l){switch(arguments.length){case 0:return new l;case 1:return new l(n);case 2:return new l(n,e)}return new l(n,e,u)}return l.apply(this,arguments)};return n[o]=l[o],n}(c):b&&"function"==typeof c?r(Function.call,c):c,b&&((y.virtual||(y.virtual={}))[a]=c,l&s.R&&m&&!m[a]&&i(m,a,c)))};s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,n.exports=s},{"./_core":96,"./_ctx":98,"./_global":107,"./_hide":109}],105:[function(l,n,e){n.exports=function(l){try{return!!l()}catch(n){return!0}}},{}],106:[function(l,n,e){var u=l("./_ctx"),t=l("./_iter-call"),r=l("./_is-array-iter"),i=l("./_an-object"),o=l("./_to-length"),s=l("./core.get-iterator-method"),a={},f={},e=n.exports=function(l,n,e,c,h){var d,p,b,v,_=h?function(){return l}:s(l),y=u(e,c,n?2:1),m=0;if("function"!=typeof _)throw TypeError(l+" is not iterable!");if(r(_)){for(d=o(l.length);d>m;m++)if(v=n?y(i(p=l[m])[0],p[1]):y(l[m]),v===a||v===f)return v}else for(b=_.call(l);!(p=b.next()).done;)if(v=t(b,y,p.value,n),v===a||v===f)return v};e.BREAK=a,e.RETURN=f},{"./_an-object":85,"./_ctx":98,"./_is-array-iter":114,"./_iter-call":117,"./_to-length":154,"./core.get-iterator-method":161}],107:[function(l,n,e){var u=n.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=u)},{}],108:[function(l,n,e){var u={}.hasOwnProperty;n.exports=function(l,n){return u.call(l,n)}},{}],109:[function(l,n,e){var u=l("./_object-dp"),t=l("./_property-desc");n.exports=l("./_descriptors")?function(l,n,e){return u.f(l,n,t(1,e))}:function(l,n,e){return l[n]=e,l}},{"./_descriptors":100,"./_object-dp":129,"./_property-desc":140}],110:[function(l,n,e){n.exports=l("./_global").document&&document.documentElement},{"./_global":107}],111:[function(l,n,e){n.exports=!l("./_descriptors")&&!l("./_fails")(function(){return 7!=Object.defineProperty(l("./_dom-create")("div"),"a",{get:function(){return 7}}).a})},{"./_descriptors":100,"./_dom-create":101,"./_fails":105}],112:[function(l,n,e){n.exports=function(l,n,e){var u=void 0===e;switch(n.length){case 0:return u?l():l.call(e);case 1:return u?l(n[0]):l.call(e,n[0]);case 2:return u?l(n[0],n[1]):l.call(e,n[0],n[1]);case 3:return u?l(n[0],n[1],n[2]):l.call(e,n[0],n[1],n[2]);case 4:return u?l(n[0],n[1],n[2],n[3]):l.call(e,n[0],n[1],n[2],n[3])}return l.apply(e,n)}},{}],113:[function(l,n,e){var u=l("./_cof");n.exports=Object("z").propertyIsEnumerable(0)?Object:function(l){return"String"==u(l)?l.split(""):Object(l)}},{"./_cof":92}],114:[function(l,n,e){var u=l("./_iterators"),t=l("./_wks")("iterator"),r=Array.prototype;n.exports=function(l){return void 0!==l&&(u.Array===l||r[t]===l)}},{"./_iterators":122,"./_wks":160}],115:[function(l,n,e){var u=l("./_cof");n.exports=Array.isArray||function(l){return"Array"==u(l)}},{"./_cof":92}],116:[function(l,n,e){n.exports=function(l){return"object"==typeof l?null!==l:"function"==typeof l}},{}],117:[function(l,n,e){var u=l("./_an-object");n.exports=function(l,n,e,t){try{return t?n(u(e)[0],e[1]):n(e)}catch(r){var i=l["return"];throw void 0!==i&&u(i.call(l)),r}}},{"./_an-object":85}],118:[function(l,n,e){"use strict";var u=l("./_object-create"),t=l("./_property-desc"),r=l("./_set-to-string-tag"),i={};l("./_hide")(i,l("./_wks")("iterator"),function(){return this}),n.exports=function(l,n,e){l.prototype=u(i,{next:t(1,e)}),r(l,n+" Iterator")}},{"./_hide":109,"./_object-create":128,"./_property-desc":140,"./_set-to-string-tag":145,"./_wks":160}],119:[function(l,n,e){"use strict";var u=l("./_library"),t=l("./_export"),r=l("./_redefine"),i=l("./_hide"),o=l("./_has"),s=l("./_iterators"),a=l("./_iter-create"),f=l("./_set-to-string-tag"),c=l("./_object-gpo"),h=l("./_wks")("iterator"),d=!([].keys&&"next"in[].keys()),p="@@iterator",b="keys",v="values",_=function(){return this};n.exports=function(l,n,e,y,m,g,w){a(e,n,y);var k,E,S,M=function(l){if(!d&&l in A)return A[l];switch(l){case b:return function(){return new e(this,l)};case v:return function(){return new e(this,l)}}return function(){return new e(this,l)}},j=n+" Iterator",I=m==v,C=!1,A=l.prototype,x=A[h]||A[p]||m&&A[m],R=x||M(m),T=m?I?M("entries"):R:void 0,B="Array"==n?A.entries||x:x;if(B&&(S=c(B.call(new l)),S!==Object.prototype&&(f(S,j,!0),u||o(S,h)||i(S,h,_))),I&&x&&x.name!==v&&(C=!0,R=function(){return x.call(this)}),u&&!w||!d&&!C&&A[h]||i(A,h,R),s[n]=R,s[j]=_,m)if(k={values:I?R:M(v),keys:g?R:M(b),entries:T},w)for(E in k)E in A||r(A,E,k[E]);else t(t.P+t.F*(d||C),n,k);return k}},{"./_export":104,"./_has":108,"./_hide":109,"./_iter-create":118,"./_iterators":122,"./_library":124,"./_object-gpo":135,"./_redefine":142,"./_set-to-string-tag":145,"./_wks":160}],120:[function(l,n,e){var u=l("./_wks")("iterator"),t=!1;try{var r=[7][u]();r["return"]=function(){t=!0},Array.from(r,function(){throw 2})}catch(i){}n.exports=function(l,n){if(!n&&!t)return!1;var e=!1;try{var r=[7],i=r[u]();i.next=function(){return{done:e=!0}},r[u]=function(){return i},l(r)}catch(o){}return e}},{"./_wks":160}],121:[function(l,n,e){n.exports=function(l,n){return{value:n,done:!!l}}},{}],122:[function(l,n,e){n.exports={}},{}],123:[function(l,n,e){var u=l("./_object-keys"),t=l("./_to-iobject");n.exports=function(l,n){for(var e,r=t(l),i=u(r),o=i.length,s=0;o>s;)if(r[e=i[s++]]===n)return e}},{"./_object-keys":137,"./_to-iobject":153}],124:[function(l,n,e){n.exports=!0},{}],125:[function(l,n,e){var u=l("./_uid")("meta"),t=l("./_is-object"),r=l("./_has"),i=l("./_object-dp").f,o=0,s=Object.isExtensible||function(){return!0},a=!l("./_fails")(function(){return s(Object.preventExtensions({}))}),f=function(l){i(l,u,{value:{i:"O"+ ++o,w:{}}})},c=function(l,n){if(!t(l))return"symbol"==typeof l?l:("string"==typeof l?"S":"P")+l;if(!r(l,u)){if(!s(l))return"F";if(!n)return"E";f(l)}return l[u].i},h=function(l,n){if(!r(l,u)){if(!s(l))return!0;if(!n)return!1;f(l)}return l[u].w},d=function(l){return a&&p.NEED&&s(l)&&!r(l,u)&&f(l),l},p=n.exports={KEY:u,NEED:!1,fastKey:c,getWeak:h,onFreeze:d}},{"./_fails":105,"./_has":108,"./_is-object":116,"./_object-dp":129,"./_uid":157}],126:[function(l,n,e){var u=l("./_global"),t=l("./_task").set,r=u.MutationObserver||u.WebKitMutationObserver,i=u.process,o=u.Promise,s="process"==l("./_cof")(i);n.exports=function(){var l,n,e,a=function(){var u,t;for(s&&(u=i.domain)&&u.exit();l;){t=l.fn,l=l.next;try{t()}catch(r){throw l?e():n=void 0,r}}n=void 0,u&&u.enter()};if(s)e=function(){i.nextTick(a)};else if(r){var f=!0,c=document.createTextNode("");new r(a).observe(c,{characterData:!0}),e=function(){c.data=f=!f}}else if(o&&o.resolve){var h=o.resolve();e=function(){h.then(a)}}else e=function(){t.call(u,a)};return function(u){var t={fn:u,next:void 0};n&&(n.next=t),l||(l=t,e()),n=t}}},{"./_cof":92,"./_global":107,"./_task":150}],127:[function(l,n,e){"use strict";var u=l("./_object-keys"),t=l("./_object-gops"),r=l("./_object-pie"),i=l("./_to-object"),o=l("./_iobject"),s=Object.assign;n.exports=!s||l("./_fails")(function(){var l={},n={},e=Symbol(),u="abcdefghijklmnopqrst";return l[e]=7,u.split("").forEach(function(l){n[l]=l}),7!=s({},l)[e]||Object.keys(s({},n)).join("")!=u})?function(l,n){for(var e=i(l),s=arguments.length,a=1,f=t.f,c=r.f;s>a;)for(var h,d=o(arguments[a++]),p=f?u(d).concat(f(d)):u(d),b=p.length,v=0;b>v;)c.call(d,h=p[v++])&&(e[h]=d[h]);return e}:s},{"./_fails":105,"./_iobject":113,"./_object-gops":134,"./_object-keys":137,"./_object-pie":138,"./_to-object":155}],128:[function(l,n,e){var u=l("./_an-object"),t=l("./_object-dps"),r=l("./_enum-bug-keys"),i=l("./_shared-key")("IE_PROTO"),o=function(){},s="prototype",a=function(){var n,e=l("./_dom-create")("iframe"),u=r.length,t="<",i=">";for(e.style.display="none",l("./_html").appendChild(e),e.src="javascript:",n=e.contentWindow.document,n.open(),n.write(t+"script"+i+"document.F=Object"+t+"/script"+i),n.close(),a=n.F;u--;)delete a[s][r[u]];return a()};n.exports=Object.create||function(l,n){var e;return null!==l?(o[s]=u(l),e=new o,o[s]=null,e[i]=l):e=a(),void 0===n?e:t(e,n)}},{"./_an-object":85,"./_dom-create":101,"./_enum-bug-keys":102,"./_html":110,"./_object-dps":130,"./_shared-key":146}],129:[function(l,n,e){var u=l("./_an-object"),t=l("./_ie8-dom-define"),r=l("./_to-primitive"),i=Object.defineProperty;e.f=l("./_descriptors")?Object.defineProperty:function(l,n,e){if(u(l),n=r(n,!0),u(e),t)try{return i(l,n,e)}catch(o){}if("get"in e||"set"in e)throw TypeError("Accessors not supported!");return"value"in e&&(l[n]=e.value),l}},{"./_an-object":85,"./_descriptors":100,"./_ie8-dom-define":111,"./_to-primitive":156}],130:[function(l,n,e){var u=l("./_object-dp"),t=l("./_an-object"),r=l("./_object-keys");n.exports=l("./_descriptors")?Object.defineProperties:function(l,n){t(l);for(var e,i=r(n),o=i.length,s=0;o>s;)u.f(l,e=i[s++],n[e]);return l}},{"./_an-object":85,"./_descriptors":100,"./_object-dp":129,"./_object-keys":137}],131:[function(l,n,e){var u=l("./_object-pie"),t=l("./_property-desc"),r=l("./_to-iobject"),i=l("./_to-primitive"),o=l("./_has"),s=l("./_ie8-dom-define"),a=Object.getOwnPropertyDescriptor;e.f=l("./_descriptors")?a:function(l,n){if(l=r(l),n=i(n,!0),s)try{return a(l,n)}catch(e){}if(o(l,n))return t(!u.f.call(l,n),l[n])}},{"./_descriptors":100,"./_has":108,"./_ie8-dom-define":111,"./_object-pie":138,"./_property-desc":140,"./_to-iobject":153,"./_to-primitive":156}],132:[function(l,n,e){var u=l("./_to-iobject"),t=l("./_object-gopn").f,r={}.toString,i="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],o=function(l){try{return t(l)}catch(n){return i.slice()}};n.exports.f=function(l){return i&&"[object Window]"==r.call(l)?o(l):t(u(l))}},{"./_object-gopn":133,"./_to-iobject":153}],133:[function(l,n,e){var u=l("./_object-keys-internal"),t=l("./_enum-bug-keys").concat("length","prototype");e.f=Object.getOwnPropertyNames||function(l){return u(l,t)}},{"./_enum-bug-keys":102,"./_object-keys-internal":136}],134:[function(l,n,e){e.f=Object.getOwnPropertySymbols},{}],135:[function(l,n,e){var u=l("./_has"),t=l("./_to-object"),r=l("./_shared-key")("IE_PROTO"),i=Object.prototype;n.exports=Object.getPrototypeOf||function(l){return l=t(l),u(l,r)?l[r]:"function"==typeof l.constructor&&l instanceof l.constructor?l.constructor.prototype:l instanceof Object?i:null}},{"./_has":108,"./_shared-key":146,"./_to-object":155}],136:[function(l,n,e){var u=l("./_has"),t=l("./_to-iobject"),r=l("./_array-includes")(!1),i=l("./_shared-key")("IE_PROTO");n.exports=function(l,n){var e,o=t(l),s=0,a=[];for(e in o)e!=i&&u(o,e)&&a.push(e);for(;n.length>s;)u(o,e=n[s++])&&(~r(a,e)||a.push(e));return a}},{"./_array-includes":87,"./_has":108,"./_shared-key":146,"./_to-iobject":153}],137:[function(l,n,e){var u=l("./_object-keys-internal"),t=l("./_enum-bug-keys");n.exports=Object.keys||function(l){return u(l,t)}},{"./_enum-bug-keys":102,"./_object-keys-internal":136}],138:[function(l,n,e){e.f={}.propertyIsEnumerable},{}],139:[function(l,n,e){var u=l("./_export"),t=l("./_core"),r=l("./_fails");n.exports=function(l,n){var e=(t.Object||{})[l]||Object[l],i={};i[l]=n(e),u(u.S+u.F*r(function(){e(1)}),"Object",i)}},{"./_core":96,"./_export":104,"./_fails":105}],140:[function(l,n,e){n.exports=function(l,n){return{enumerable:!(1&l),configurable:!(2&l),writable:!(4&l),value:n}}},{}],141:[function(l,n,e){var u=l("./_hide");n.exports=function(l,n,e){for(var t in n)e&&l[t]?l[t]=n[t]:u(l,t,n[t]);return l}},{"./_hide":109}],142:[function(l,n,e){n.exports=l("./_hide")},{"./_hide":109}],143:[function(l,n,e){var u=l("./_is-object"),t=l("./_an-object"),r=function(l,n){if(t(l),!u(n)&&null!==n)throw TypeError(n+": can't set as prototype!")};n.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(n,e,u){try{u=l("./_ctx")(Function.call,l("./_object-gopd").f(Object.prototype,"__proto__").set,2),u(n,[]),e=!(n instanceof Array)}catch(t){e=!0}return function(l,n){return r(l,n),e?l.__proto__=n:u(l,n),l}}({},!1):void 0),check:r}},{"./_an-object":85,"./_ctx":98,"./_is-object":116,"./_object-gopd":131}],144:[function(l,n,e){"use strict";var u=l("./_global"),t=l("./_core"),r=l("./_object-dp"),i=l("./_descriptors"),o=l("./_wks")("species");n.exports=function(l){var n="function"==typeof t[l]?t[l]:u[l];i&&n&&!n[o]&&r.f(n,o,{configurable:!0,get:function(){return this}})}},{"./_core":96,"./_descriptors":100,"./_global":107,"./_object-dp":129,"./_wks":160}],145:[function(l,n,e){var u=l("./_object-dp").f,t=l("./_has"),r=l("./_wks")("toStringTag");n.exports=function(l,n,e){l&&!t(l=e?l:l.prototype,r)&&u(l,r,{configurable:!0,value:n})}},{"./_has":108,"./_object-dp":129,"./_wks":160}],146:[function(l,n,e){var u=l("./_shared")("keys"),t=l("./_uid");n.exports=function(l){return u[l]||(u[l]=t(l))}},{"./_shared":147,"./_uid":157}],147:[function(l,n,e){var u=l("./_global"),t="__core-js_shared__",r=u[t]||(u[t]={});n.exports=function(l){return r[l]||(r[l]={})}},{"./_global":107}],148:[function(l,n,e){var u=l("./_an-object"),t=l("./_a-function"),r=l("./_wks")("species");n.exports=function(l,n){var e,i=u(l).constructor;return void 0===i||void 0==(e=u(i)[r])?n:t(e)}},{"./_a-function":82,"./_an-object":85,"./_wks":160}],149:[function(l,n,e){var u=l("./_to-integer"),t=l("./_defined");n.exports=function(l){return function(n,e){var r,i,o=String(t(n)),s=u(e),a=o.length;return s<0||s>=a?l?"":void 0:(r=o.charCodeAt(s),r<55296||r>56319||s+1===a||(i=o.charCodeAt(s+1))<56320||i>57343?l?o.charAt(s):r:l?o.slice(s,s+2):(r-55296<<10)+(i-56320)+65536)}}},{"./_defined":99,"./_to-integer":152}],150:[function(l,n,e){var u,t,r,i=l("./_ctx"),o=l("./_invoke"),s=l("./_html"),a=l("./_dom-create"),f=l("./_global"),c=f.process,h=f.setImmediate,d=f.clearImmediate,p=f.MessageChannel,b=0,v={},_="onreadystatechange",y=function(){var l=+this;if(v.hasOwnProperty(l)){var n=v[l];delete v[l],n()}},m=function(l){y.call(l.data)};h&&d||(h=function(l){for(var n=[],e=1;arguments.length>e;)n.push(arguments[e++]);return v[++b]=function(){o("function"==typeof l?l:Function(l),n)},u(b),b},d=function(l){delete v[l]},"process"==l("./_cof")(c)?u=function(l){c.nextTick(i(y,l,1))}:p?(t=new p,r=t.port2,t.port1.onmessage=m,u=i(r.postMessage,r,1)):f.addEventListener&&"function"==typeof postMessage&&!f.importScripts?(u=function(l){f.postMessage(l+"","*")},f.addEventListener("message",m,!1)):u=_ in a("script")?function(l){s.appendChild(a("script"))[_]=function(){s.removeChild(this),y.call(l)}}:function(l){setTimeout(i(y,l,1),0)}),n.exports={set:h,clear:d}},{"./_cof":92,"./_ctx":98,"./_dom-create":101,"./_global":107,"./_html":110,"./_invoke":112}],151:[function(l,n,e){var u=l("./_to-integer"),t=Math.max,r=Math.min;n.exports=function(l,n){return l=u(l),l<0?t(l+n,0):r(l,n)}},{"./_to-integer":152}],152:[function(l,n,e){var u=Math.ceil,t=Math.floor;n.exports=function(l){return isNaN(l=+l)?0:(l>0?t:u)(l)}},{}],153:[function(l,n,e){var u=l("./_iobject"),t=l("./_defined");n.exports=function(l){return u(t(l))}},{"./_defined":99,"./_iobject":113}],154:[function(l,n,e){var u=l("./_to-integer"),t=Math.min;n.exports=function(l){return l>0?t(u(l),9007199254740991):0}},{"./_to-integer":152}],155:[function(l,n,e){var u=l("./_defined");n.exports=function(l){return Object(u(l))}},{"./_defined":99}],156:[function(l,n,e){var u=l("./_is-object");n.exports=function(l,n){if(!u(l))return l;var e,t;if(n&&"function"==typeof(e=l.toString)&&!u(t=e.call(l)))return t;if("function"==typeof(e=l.valueOf)&&!u(t=e.call(l)))return t;if(!n&&"function"==typeof(e=l.toString)&&!u(t=e.call(l)))return t;throw TypeError("Can't convert object to primitive value")}},{"./_is-object":116}],157:[function(l,n,e){var u=0,t=Math.random();n.exports=function(l){return"Symbol(".concat(void 0===l?"":l,")_",(++u+t).toString(36))}},{}],158:[function(l,n,e){var u=l("./_global"),t=l("./_core"),r=l("./_library"),i=l("./_wks-ext"),o=l("./_object-dp").f;n.exports=function(l){var n=t.Symbol||(t.Symbol=r?{}:u.Symbol||{});"_"==l.charAt(0)||l in n||o(n,l,{value:i.f(l)})}},{"./_core":96,"./_global":107,"./_library":124,"./_object-dp":129,"./_wks-ext":159}],159:[function(l,n,e){e.f=l("./_wks")},{"./_wks":160}],160:[function(l,n,e){var u=l("./_shared")("wks"),t=l("./_uid"),r=l("./_global").Symbol,i="function"==typeof r,o=n.exports=function(l){return u[l]||(u[l]=i&&r[l]||(i?r:t)("Symbol."+l))};o.store=u},{"./_global":107,"./_shared":147,"./_uid":157}],161:[function(l,n,e){var u=l("./_classof"),t=l("./_wks")("iterator"),r=l("./_iterators");n.exports=l("./_core").getIteratorMethod=function(l){if(void 0!=l)return l[t]||l["@@iterator"]||r[u(l)]}},{"./_classof":91,"./_core":96,"./_iterators":122,"./_wks":160}],162:[function(l,n,e){"use strict";var u=l("./_ctx"),t=l("./_export"),r=l("./_to-object"),i=l("./_iter-call"),o=l("./_is-array-iter"),s=l("./_to-length"),a=l("./_create-property"),f=l("./core.get-iterator-method");t(t.S+t.F*!l("./_iter-detect")(function(l){Array.from(l)}),"Array",{from:function(l){var n,e,t,c,h=r(l),d="function"==typeof this?this:Array,p=arguments.length,b=p>1?arguments[1]:void 0,v=void 0!==b,_=0,y=f(h);if(v&&(b=u(b,p>2?arguments[2]:void 0,2)),void 0==y||d==Array&&o(y))for(n=s(h.length),e=new d(n);n>_;_++)a(e,_,v?b(h[_],_):h[_]);else for(c=y.call(h),e=new d;!(t=c.next()).done;_++)a(e,_,v?i(c,b,[t.value,_],!0):t.value);return e.length=_,e}})},{"./_create-property":97,"./_ctx":98,"./_export":104,"./_is-array-iter":114,"./_iter-call":117,"./_iter-detect":120,"./_to-length":154,"./_to-object":155,"./core.get-iterator-method":161}],163:[function(l,n,e){"use strict";var u=l("./_add-to-unscopables"),t=l("./_iter-step"),r=l("./_iterators"),i=l("./_to-iobject");n.exports=l("./_iter-define")(Array,"Array",function(l,n){this._t=i(l),this._i=0,this._k=n},function(){var l=this._t,n=this._k,e=this._i++;return!l||e>=l.length?(this._t=void 0,t(1)):"keys"==n?t(0,e):"values"==n?t(0,l[e]):t(0,[e,l[e]])},"values"),r.Arguments=r.Array,u("keys"),u("values"),u("entries")},{"./_add-to-unscopables":83,"./_iter-define":119,"./_iter-step":121,"./_iterators":122,"./_to-iobject":153}],164:[function(l,n,e){var u=l("./_export");u(u.S+u.F,"Object",{assign:l("./_object-assign")})},{"./_export":104,"./_object-assign":127}],165:[function(l,n,e){var u=l("./_export");u(u.S,"Object",{create:l("./_object-create")})},{"./_export":104,"./_object-create":128}],166:[function(l,n,e){var u=l("./_export");u(u.S+u.F*!l("./_descriptors"),"Object",{defineProperty:l("./_object-dp").f})},{"./_descriptors":100,"./_export":104,"./_object-dp":129}],167:[function(l,n,e){var u=l("./_to-iobject"),t=l("./_object-gopd").f;l("./_object-sap")("getOwnPropertyDescriptor",function(){return function(l,n){return t(u(l),n)}})},{"./_object-gopd":131,"./_object-sap":139,"./_to-iobject":153}],168:[function(l,n,e){var u=l("./_to-object"),t=l("./_object-gpo");l("./_object-sap")("getPrototypeOf",function(){return function(l){return t(u(l))}})},{"./_object-gpo":135,"./_object-sap":139,"./_to-object":155}],169:[function(l,n,e){var u=l("./_to-object"),t=l("./_object-keys");l("./_object-sap")("keys",function(){return function(l){return t(u(l))}})},{"./_object-keys":137,"./_object-sap":139,"./_to-object":155}],170:[function(l,n,e){var u=l("./_export");u(u.S,"Object",{setPrototypeOf:l("./_set-proto").set})},{"./_export":104,"./_set-proto":143}],171:[function(l,n,e){arguments[4][39][0].apply(e,arguments)},{dup:39}],172:[function(l,n,e){"use strict";var u,t,r,i=l("./_library"),o=l("./_global"),s=l("./_ctx"),a=l("./_classof"),f=l("./_export"),c=l("./_is-object"),h=l("./_a-function"),d=l("./_an-instance"),p=l("./_for-of"),b=l("./_species-constructor"),v=l("./_task").set,_=l("./_microtask")(),y="Promise",m=o.TypeError,g=o.process,w=o[y],g=o.process,k="process"==a(g),E=function(){},S=!!function(){try{var n=w.resolve(1),e=(n.constructor={})[l("./_wks")("species")]=function(l){l(E,E)};return(k||"function"==typeof PromiseRejectionEvent)&&n.then(E)instanceof e}catch(u){}}(),M=function(l,n){return l===n||l===w&&n===r},j=function(l){var n;return!(!c(l)||"function"!=typeof(n=l.then))&&n},I=function(l){return M(w,l)?new C(l):new t(l)},C=t=function(l){var n,e;this.promise=new l(function(l,u){if(void 0!==n||void 0!==e)throw m("Bad Promise constructor");n=l,e=u}),this.resolve=h(n),this.reject=h(e)},A=function(l){try{l()}catch(n){return{error:n}}},x=function(l,n){if(!l._n){l._n=!0;var e=l._c;_(function(){for(var u=l._v,t=1==l._s,r=0,i=function(n){var e,r,i=t?n.ok:n.fail,o=n.resolve,s=n.reject,a=n.domain;try{i?(t||(2==l._h&&B(l),l._h=1),i===!0?e=u:(a&&a.enter(),e=i(u),a&&a.exit()),e===n.promise?s(m("Promise-chain cycle")):(r=j(e))?r.call(e,o,s):o(e)):s(u)}catch(f){s(f)}};e.length>r;)i(e[r++]);l._c=[],l._n=!1,n&&!l._h&&R(l)})}},R=function(l){v.call(o,function(){var n,e,u,t=l._v;if(T(l)&&(n=A(function(){k?g.emit("unhandledRejection",t,l):(e=o.onunhandledrejection)?e({promise:l,reason:t}):(u=o.console)&&u.error&&u.error("Unhandled promise rejection",t)}),l._h=k||T(l)?2:1),l._a=void 0,n)throw n.error})},T=function(l){if(1==l._h)return!1;for(var n,e=l._a||l._c,u=0;e.length>u;)if(n=e[u++],n.fail||!T(n.promise))return!1;return!0},B=function(l){v.call(o,function(){var n;k?g.emit("rejectionHandled",l):(n=o.onrejectionhandled)&&n({promise:l,reason:l._v})})},O=function(l){var n=this;n._d||(n._d=!0,n=n._w||n,n._v=l,n._s=2,n._a||(n._a=n._c.slice()),x(n,!0))},P=function(l){var n,e=this;if(!e._d){e._d=!0,e=e._w||e;try{if(e===l)throw m("Promise can't be resolved itself");(n=j(l))?_(function(){var u={_w:e,_d:!1};try{n.call(l,s(P,u,1),s(O,u,1))}catch(t){O.call(u,t)}}):(e._v=l,e._s=1,x(e,!1))}catch(u){O.call({_w:e,_d:!1},u)}}};S||(w=function(l){d(this,w,y,"_h"),h(l),u.call(this);try{l(s(P,this,1),s(O,this,1))}catch(n){O.call(this,n)}},u=function(l){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},u.prototype=l("./_redefine-all")(w.prototype,{then:function(l,n){var e=I(b(this,w));return e.ok="function"!=typeof l||l,e.fail="function"==typeof n&&n,e.domain=k?g.domain:void 0,this._c.push(e),this._a&&this._a.push(e),this._s&&x(this,!1),e.promise},"catch":function(l){return this.then(void 0,l)}}),C=function(){var l=new u;this.promise=l,this.resolve=s(P,l,1),this.reject=s(O,l,1)}),f(f.G+f.W+f.F*!S,{Promise:w}),l("./_set-to-string-tag")(w,y),l("./_set-species")(y),r=l("./_core")[y],f(f.S+f.F*!S,y,{reject:function(l){var n=I(this),e=n.reject;return e(l),n.promise}}),f(f.S+f.F*(i||!S),y,{resolve:function(l){if(l instanceof w&&M(l.constructor,this))return l;var n=I(this),e=n.resolve;return e(l),n.promise}}),f(f.S+f.F*!(S&&l("./_iter-detect")(function(l){w.all(l)["catch"](E)})),y,{all:function(l){var n=this,e=I(n),u=e.resolve,t=e.reject,r=A(function(){var e=[],r=0,i=1;p(l,!1,function(l){var o=r++,s=!1;e.push(void 0),i++,n.resolve(l).then(function(l){s||(s=!0,e[o]=l,--i||u(e))},t)}),--i||u(e)});return r&&t(r.error),e.promise},race:function(l){var n=this,e=I(n),u=e.reject,t=A(function(){p(l,!1,function(l){n.resolve(l).then(e.resolve,u)})});return t&&u(t.error), +e.promise}})},{"./_a-function":82,"./_an-instance":84,"./_classof":91,"./_core":96,"./_ctx":98,"./_export":104,"./_for-of":106,"./_global":107,"./_is-object":116,"./_iter-detect":120,"./_library":124,"./_microtask":126,"./_redefine-all":141,"./_set-species":144,"./_set-to-string-tag":145,"./_species-constructor":148,"./_task":150,"./_wks":160}],173:[function(l,n,e){"use strict";var u=l("./_collection-strong");n.exports=l("./_collection")("Set",function(l){return function(){return l(this,arguments.length>0?arguments[0]:void 0)}},{add:function(l){return u.def(this,l=0===l?0:l,l)}},u)},{"./_collection":95,"./_collection-strong":93}],174:[function(l,n,e){"use strict";var u=l("./_string-at")(!0);l("./_iter-define")(String,"String",function(l){this._t=String(l),this._i=0},function(){var l,n=this._t,e=this._i;return e>=n.length?{value:void 0,done:!0}:(l=u(n,e),this._i+=l.length,{value:l,done:!1})})},{"./_iter-define":119,"./_string-at":149}],175:[function(l,n,e){"use strict";var u=l("./_global"),t=l("./_has"),r=l("./_descriptors"),i=l("./_export"),o=l("./_redefine"),s=l("./_meta").KEY,a=l("./_fails"),f=l("./_shared"),c=l("./_set-to-string-tag"),h=l("./_uid"),d=l("./_wks"),p=l("./_wks-ext"),b=l("./_wks-define"),v=l("./_keyof"),_=l("./_enum-keys"),y=l("./_is-array"),m=l("./_an-object"),g=l("./_to-iobject"),w=l("./_to-primitive"),k=l("./_property-desc"),E=l("./_object-create"),S=l("./_object-gopn-ext"),M=l("./_object-gopd"),j=l("./_object-dp"),I=l("./_object-keys"),C=M.f,A=j.f,x=S.f,R=u.Symbol,T=u.JSON,B=T&&T.stringify,O="prototype",P=d("_hidden"),U=d("toPrimitive"),N={}.propertyIsEnumerable,L=f("symbol-registry"),D=f("symbols"),F=f("op-symbols"),q=Object[O],z="function"==typeof R,H=u.QObject,K=!H||!H[O]||!H[O].findChild,V=r&&a(function(){return 7!=E(A({},"a",{get:function(){return A(this,"a",{value:7}).a}})).a})?function(l,n,e){var u=C(q,n);u&&delete q[n],A(l,n,e),u&&l!==q&&A(q,n,u)}:A,Y=function(l){var n=D[l]=E(R[O]);return n._k=l,n},W=z&&"symbol"==typeof R.iterator?function(l){return"symbol"==typeof l}:function(l){return l instanceof R},X=function(l,n,e){return l===q&&X(F,n,e),m(l),n=w(n,!0),m(e),t(D,n)?(e.enumerable?(t(l,P)&&l[P][n]&&(l[P][n]=!1),e=E(e,{enumerable:k(0,!1)})):(t(l,P)||A(l,P,k(1,{})),l[P][n]=!0),V(l,n,e)):A(l,n,e)},G=function(l,n){m(l);for(var e,u=_(n=g(n)),t=0,r=u.length;r>t;)X(l,e=u[t++],n[e]);return l},Z=function(l,n){return void 0===n?E(l):G(E(l),n)},J=function(l){var n=N.call(this,l=w(l,!0));return!(this===q&&t(D,l)&&!t(F,l))&&(!(n||!t(this,l)||!t(D,l)||t(this,P)&&this[P][l])||n)},$=function(l,n){if(l=g(l),n=w(n,!0),l!==q||!t(D,n)||t(F,n)){var e=C(l,n);return!e||!t(D,n)||t(l,P)&&l[P][n]||(e.enumerable=!0),e}},Q=function(l){for(var n,e=x(g(l)),u=[],r=0;e.length>r;)t(D,n=e[r++])||n==P||n==s||u.push(n);return u},ll=function(l){for(var n,e=l===q,u=x(e?F:g(l)),r=[],i=0;u.length>i;)!t(D,n=u[i++])||e&&!t(q,n)||r.push(D[n]);return r};z||(R=function(){if(this instanceof R)throw TypeError("Symbol is not a constructor!");var l=h(arguments.length>0?arguments[0]:void 0),n=function(e){this===q&&n.call(F,e),t(this,P)&&t(this[P],l)&&(this[P][l]=!1),V(this,l,k(1,e))};return r&&K&&V(q,l,{configurable:!0,set:n}),Y(l)},o(R[O],"toString",function(){return this._k}),M.f=$,j.f=X,l("./_object-gopn").f=S.f=Q,l("./_object-pie").f=J,l("./_object-gops").f=ll,r&&!l("./_library")&&o(q,"propertyIsEnumerable",J,!0),p.f=function(l){return Y(d(l))}),i(i.G+i.W+i.F*!z,{Symbol:R});for(var nl="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),el=0;nl.length>el;)d(nl[el++]);for(var nl=I(d.store),el=0;nl.length>el;)b(nl[el++]);i(i.S+i.F*!z,"Symbol",{"for":function(l){return t(L,l+="")?L[l]:L[l]=R(l)},keyFor:function(l){if(W(l))return v(L,l);throw TypeError(l+" is not a symbol!")},useSetter:function(){K=!0},useSimple:function(){K=!1}}),i(i.S+i.F*!z,"Object",{create:Z,defineProperty:X,defineProperties:G,getOwnPropertyDescriptor:$,getOwnPropertyNames:Q,getOwnPropertySymbols:ll}),T&&i(i.S+i.F*(!z||a(function(){var l=R();return"[null]"!=B([l])||"{}"!=B({a:l})||"{}"!=B(Object(l))})),"JSON",{stringify:function(l){if(void 0!==l&&!W(l)){for(var n,e,u=[l],t=1;arguments.length>t;)u.push(arguments[t++]);return n=u[1],"function"==typeof n&&(e=n),!e&&y(n)||(n=function(l,n){if(e&&(n=e.call(this,l,n)),!W(n))return n}),u[1]=n,B.apply(T,u)}}}),R[O][U]||l("./_hide")(R[O],U,R[O].valueOf),c(R,"Symbol"),c(Math,"Math",!0),c(u.JSON,"JSON",!0)},{"./_an-object":85,"./_descriptors":100,"./_enum-keys":103,"./_export":104,"./_fails":105,"./_global":107,"./_has":108,"./_hide":109,"./_is-array":115,"./_keyof":123,"./_library":124,"./_meta":125,"./_object-create":128,"./_object-dp":129,"./_object-gopd":131,"./_object-gopn":133,"./_object-gopn-ext":132,"./_object-gops":134,"./_object-keys":137,"./_object-pie":138,"./_property-desc":140,"./_redefine":142,"./_set-to-string-tag":145,"./_shared":147,"./_to-iobject":153,"./_to-primitive":156,"./_uid":157,"./_wks":160,"./_wks-define":158,"./_wks-ext":159}],176:[function(l,n,e){var u=l("./_export");u(u.P+u.R,"Set",{toJSON:l("./_collection-to-json")("Set")})},{"./_collection-to-json":94,"./_export":104}],177:[function(l,n,e){l("./_wks-define")("asyncIterator")},{"./_wks-define":158}],178:[function(l,n,e){l("./_wks-define")("observable")},{"./_wks-define":158}],179:[function(l,n,e){l("./es6.array.iterator");for(var u=l("./_global"),t=l("./_hide"),r=l("./_iterators"),i=l("./_wks")("toStringTag"),o=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],s=0;s<5;s++){var a=o[s],f=u[a],c=f&&f.prototype;c&&!c[i]&&t(c,i,a),r[a]=r.Array}},{"./_global":107,"./_hide":109,"./_iterators":122,"./_wks":160,"./es6.array.iterator":163}],180:[function(l,n,e){(function(l){function n(l){return Array.isArray?Array.isArray(l):"[object Array]"===v(l)}function u(l){return"boolean"==typeof l}function t(l){return null===l}function r(l){return null==l}function i(l){return"number"==typeof l}function o(l){return"string"==typeof l}function s(l){return"symbol"==typeof l}function a(l){return void 0===l}function f(l){return"[object RegExp]"===v(l)}function c(l){return"object"==typeof l&&null!==l}function h(l){return"[object Date]"===v(l)}function d(l){return"[object Error]"===v(l)||l instanceof Error}function p(l){return"function"==typeof l}function b(l){return null===l||"boolean"==typeof l||"number"==typeof l||"string"==typeof l||"symbol"==typeof l||"undefined"==typeof l}function v(l){return Object.prototype.toString.call(l)}e.isArray=n,e.isBoolean=u,e.isNull=t,e.isNullOrUndefined=r,e.isNumber=i,e.isString=o,e.isSymbol=s,e.isUndefined=a,e.isRegExp=f,e.isObject=c,e.isDate=h,e.isError=d,e.isFunction=p,e.isPrimitive=b,e.isBuffer=l.isBuffer}).call(this,{isBuffer:l("../../is-buffer/index.js")})},{"../../is-buffer/index.js":225}],181:[function(l,n,e){(function(e){function u(l){this.curveType=o[l],this.curveType||(this.curveType={name:l}),this.curve=new r.ec(this.curveType.name),this.keys=void 0}function t(l,n,u){Array.isArray(l)||(l=l.toArray());var t=new e(l);if(u&&t.length>5]|=128<>>9<<4)+14]=n;for(var e=1732584193,u=-271733879,t=-1732584194,f=271733878,c=0;c>16)+(n>>16)+(e>>16);return u<<16|65535&e}function f(l,n){return l<>>32-n}var c=l("./helpers");n.exports=function(l){return c.hash(l,u,16)}},{"./helpers":183}],185:[function(l,n,e){(function(e){"use strict";function u(l,n){i.call(this),l=l.toLowerCase(),"string"==typeof n&&(n=new e(n));var u="sha512"===l||"sha384"===l?128:64;this._alg=l,this._key=n,n.length>u?n=t(l).update(n).digest():n.length0;u--)n+=this._buffer(l,n),e+=this._flushBuffer(t,e);return n+=this._buffer(l,n),t},u.prototype["final"]=function(l){var n;l&&(n=this.update(l));var e;return e="encrypt"===this.type?this._finalEncrypt():this._finalDecrypt(),n?n.concat(e):e},u.prototype._pad=function(l,n){if(0===n)return!1;for(;n>>1];e=s.r28shl(e,i),u=s.r28shl(u,i),s.pc2(e,u,l.keys,t)}},t.prototype._update=function(l,n,e,u){var t=this._desState,r=s.readUInt32BE(l,n),i=s.readUInt32BE(l,n+4);s.ip(r,i,t.tmp,0),r=t.tmp[0],i=t.tmp[1],"encrypt"===this.type?this._encrypt(t,r,i,t.tmp,0):this._decrypt(t,r,i,t.tmp,0),r=t.tmp[0],i=t.tmp[1],s.writeUInt32BE(e,r,u),s.writeUInt32BE(e,i,u+4)},t.prototype._pad=function(l,n){for(var e=l.length-n,u=n;u>>0,r=d}s.rip(i,r,u,t)},t.prototype._decrypt=function(l,n,e,u,t){for(var r=e,i=n,o=l.keys.length-2;o>=0;o-=2){var a=l.keys[o],f=l.keys[o+1];s.expand(r,l.tmp,0),a^=l.tmp[0],f^=l.tmp[1];var c=s.substitute(a,f),h=s.permute(c),d=r;r=(i^h)>>>0,i=d}s.rip(r,i,u,t)}},{"../des":187,inherits:224,"minimalistic-assert":228}],191:[function(l,n,e){"use strict";function u(l,n){r.equal(n.length,24,"Invalid key length");var e=n.slice(0,8),u=n.slice(8,16),t=n.slice(16,24);"encrypt"===l?this.ciphers=[a.create({type:"encrypt",key:e}),a.create({type:"decrypt",key:u}),a.create({type:"encrypt",key:t})]:this.ciphers=[a.create({type:"decrypt",key:t}),a.create({type:"encrypt",key:u}),a.create({type:"decrypt",key:e})]}function t(l){s.call(this,l);var n=new u(this.type,this.options.key);this._edeState=n}var r=l("minimalistic-assert"),i=l("inherits"),o=l("../des"),s=o.Cipher,a=o.DES;i(t,s),n.exports=t,t.create=function(l){return new t(l)},t.prototype._update=function(l,n,e,u){var t=this._edeState;t.ciphers[0]._update(l,n,e,u),t.ciphers[1]._update(e,u,e,u),t.ciphers[2]._update(e,u,e,u)},t.prototype._pad=a.prototype._pad,t.prototype._unpad=a.prototype._unpad},{"../des":187,inherits:224,"minimalistic-assert":228}],192:[function(l,n,e){"use strict";e.readUInt32BE=function(l,n){var e=l[0+n]<<24|l[1+n]<<16|l[2+n]<<8|l[3+n];return e>>>0},e.writeUInt32BE=function(l,n,e){l[0+e]=n>>>24,l[1+e]=n>>>16&255,l[2+e]=n>>>8&255,l[3+e]=255&n},e.ip=function(l,n,e,u){for(var t=0,r=0,i=6;i>=0;i-=2){for(var o=0;o<=24;o+=8)t<<=1,t|=n>>>o+i&1;for(var o=0;o<=24;o+=8)t<<=1,t|=l>>>o+i&1}for(var i=6;i>=0;i-=2){for(var o=1;o<=25;o+=8)r<<=1,r|=n>>>o+i&1;for(var o=1;o<=25;o+=8)r<<=1,r|=l>>>o+i&1}e[u+0]=t>>>0,e[u+1]=r>>>0},e.rip=function(l,n,e,u){for(var t=0,r=0,i=0;i<4;i++)for(var o=24;o>=0;o-=8)t<<=1,t|=n>>>o+i&1,t<<=1,t|=l>>>o+i&1;for(var i=4;i<8;i++)for(var o=24;o>=0;o-=8)r<<=1,r|=n>>>o+i&1,r<<=1,r|=l>>>o+i&1;e[u+0]=t>>>0,e[u+1]=r>>>0},e.pc1=function(l,n,e,u){for(var t=0,r=0,i=7;i>=5;i--){for(var o=0;o<=24;o+=8)t<<=1,t|=n>>o+i&1;for(var o=0;o<=24;o+=8)t<<=1,t|=l>>o+i&1}for(var o=0;o<=24;o+=8)t<<=1,t|=n>>o+i&1;for(var i=1;i<=3;i++){for(var o=0;o<=24;o+=8)r<<=1,r|=n>>o+i&1;for(var o=0;o<=24;o+=8)r<<=1,r|=l>>o+i&1}for(var o=0;o<=24;o+=8)r<<=1,r|=l>>o+i&1;e[u+0]=t>>>0,e[u+1]=r>>>0},e.r28shl=function(l,n){return l<>>28-n};var u=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];e.pc2=function(l,n,e,t){for(var r=0,i=0,o=u.length>>>1,s=0;s>>u[s]&1;for(var s=o;s>>u[s]&1;e[t+0]=r>>>0,e[t+1]=i>>>0},e.expand=function(l,n,e){var u=0,t=0;u=(1&l)<<5|l>>>27;for(var r=23;r>=15;r-=4)u<<=6,u|=l>>>r&63;for(var r=11;r>=3;r-=4)t|=l>>>r&63,t<<=6;t|=(31&l)<<1|l>>>31,n[e+0]=u>>>0,n[e+1]=t>>>0};var t=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];e.substitute=function(l,n){for(var e=0,u=0;u<4;u++){var r=l>>>18-6*u&63,i=t[64*u+r];e<<=4,e|=i}for(var u=0;u<4;u++){var r=n>>>18-6*u&63,i=t[256+64*u+r];e<<=4,e|=i}return e>>>0};var r=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];e.permute=function(l){for(var n=0,e=0;e>>r[e]&1;return n>>>0},e.padSplit=function(l,n,e){for(var u=l.toString(2);u.lengthl;)e.ishrn(1);if(e.isEven()&&e.iadd(h),e.testn(1)||e.iadd(d),n.cmp(d)){if(!n.cmp(p))for(;e.mod(b).cmp(v);)e.iadd(y)}else for(;e.mod(a).cmp(_);)e.iadd(y);if(u=e.shrn(1),t(u)&&t(e)&&r(u)&&r(e)&&c.test(u)&&c.test(e))return e}}var o=l("randombytes");n.exports=i,i.simpleSieve=t,i.fermatTest=r;var s=l("bn.js"),a=new s(24),f=l("miller-rabin"),c=new f,h=new s(1),d=new s(2),p=new s(5),b=(new s(16),new s(8),new s(10)),v=new s(3),_=(new s(7),new s(11)),y=new s(4),m=(new s(12),null)},{"bn.js":37,"miller-rabin":227,randombytes:247}],196:[function(l,n,e){n.exports={modp1:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},modp17:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff" +},modp18:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}},{}],197:[function(l,n,e){"use strict";var u=e;u.version=l("../package.json").version,u.utils=l("./elliptic/utils"),u.rand=l("brorand"),u.curve=l("./elliptic/curve"),u.curves=l("./elliptic/curves"),u.ec=l("./elliptic/ec"),u.eddsa=l("./elliptic/eddsa")},{"../package.json":212,"./elliptic/curve":200,"./elliptic/curves":203,"./elliptic/ec":204,"./elliptic/eddsa":207,"./elliptic/utils":211,brorand:38}],198:[function(l,n,e){"use strict";function u(l,n){this.type=l,this.p=new r(n.p,16),this.red=n.prime?r.red(n.prime):r.mont(this.p),this.zero=new r(0).toRed(this.red),this.one=new r(1).toRed(this.red),this.two=new r(2).toRed(this.red),this.n=n.n&&new r(n.n,16),this.g=n.g&&this.pointFromJSON(n.g,n.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4);var e=this.n&&this.p.div(this.n);!e||e.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function t(l,n){this.curve=l,this.type=n,this.precomputed=null}var r=l("bn.js"),i=l("../../elliptic"),o=i.utils,s=o.getNAF,a=o.getJSF,f=o.assert;n.exports=u,u.prototype.point=function(){throw new Error("Not implemented")},u.prototype.validate=function(){throw new Error("Not implemented")},u.prototype._fixedNafMul=function(l,n){f(l.precomputed);var e=l._getDoubles(),u=s(n,1),t=(1<=i;n--)o=(o<<1)+u[n];r.push(o)}for(var a=this.jpoint(null,null,null),c=this.jpoint(null,null,null),h=t;h>0;h--){for(var i=0;i=0;o--){for(var n=0;o>=0&&0===r[o];o--)n++;if(o>=0&&n++,i=i.dblp(n),o<0)break;var a=r[o];f(0!==a),i="affine"===l.type?a>0?i.mixedAdd(t[a-1>>1]):i.mixedAdd(t[-a-1>>1].neg()):a>0?i.add(t[a-1>>1]):i.add(t[-a-1>>1].neg())}return"affine"===l.type?i.toP():i},u.prototype._wnafMulAdd=function(l,n,e,u,t){for(var r=this._wnafT1,i=this._wnafT2,o=this._wnafT3,f=0,c=0;c=1;c-=2){var p=c-1,b=c;if(1===r[p]&&1===r[b]){var v=[n[p],null,null,n[b]];0===n[p].y.cmp(n[b].y)?(v[1]=n[p].add(n[b]),v[2]=n[p].toJ().mixedAdd(n[b].neg())):0===n[p].y.cmp(n[b].y.redNeg())?(v[1]=n[p].toJ().mixedAdd(n[b]),v[2]=n[p].add(n[b].neg())):(v[1]=n[p].toJ().mixedAdd(n[b]),v[2]=n[p].toJ().mixedAdd(n[b].neg()));var _=[-3,-1,-5,-7,0,7,5,1,3],y=a(e[p],e[b]);f=Math.max(y[0].length,f),o[p]=new Array(f),o[b]=new Array(f);for(var m=0;m=0;c--){for(var S=0;c>=0;){for(var M=!0,m=0;m=0&&S++,k=k.dblp(S),c<0)break;for(var m=0;m0?h=i[m][j-1>>1]:j<0&&(h=i[m][-j-1>>1].neg()),k="affine"===h.type?k.mixedAdd(h):k.add(h))}}for(var c=0;c=Math.ceil((l.bitLength()+1)/n.step)},t.prototype._getDoubles=function(l,n){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var e=[this],u=this,t=0;t":""},t.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&0===this.y.cmp(this.z)},t.prototype._extDbl=function(){var l=this.x.redSqr(),n=this.y.redSqr(),e=this.z.redSqr();e=e.redIAdd(e);var u=this.curve._mulA(l),t=this.x.redAdd(this.y).redSqr().redISub(l).redISub(n),r=u.redAdd(n),i=r.redSub(e),o=u.redSub(n),s=t.redMul(i),a=r.redMul(o),f=t.redMul(o),c=i.redMul(r);return this.curve.point(s,a,c,f)},t.prototype._projDbl=function(){var l,n,e,u=this.x.redAdd(this.y).redSqr(),t=this.x.redSqr(),r=this.y.redSqr();if(this.curve.twisted){var i=this.curve._mulA(t),o=i.redAdd(r);if(this.zOne)l=u.redSub(t).redSub(r).redMul(o.redSub(this.curve.two)),n=o.redMul(i.redSub(r)),e=o.redSqr().redSub(o).redSub(o);else{var s=this.z.redSqr(),a=o.redSub(s).redISub(s);l=u.redSub(t).redISub(r).redMul(a),n=o.redMul(i.redSub(r)),e=o.redMul(a)}}else{var i=t.redAdd(r),s=this.curve._mulC(this.c.redMul(this.z)).redSqr(),a=i.redSub(s).redSub(s);l=this.curve._mulC(u.redISub(i)).redMul(a),n=this.curve._mulC(i).redMul(t.redISub(r)),e=i.redMul(a)}return this.curve.point(l,n,e)},t.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},t.prototype._extAdd=function(l){var n=this.y.redSub(this.x).redMul(l.y.redSub(l.x)),e=this.y.redAdd(this.x).redMul(l.y.redAdd(l.x)),u=this.t.redMul(this.curve.dd).redMul(l.t),t=this.z.redMul(l.z.redAdd(l.z)),r=e.redSub(n),i=t.redSub(u),o=t.redAdd(u),s=e.redAdd(n),a=r.redMul(i),f=o.redMul(s),c=r.redMul(s),h=i.redMul(o);return this.curve.point(a,f,h,c)},t.prototype._projAdd=function(l){var n,e,u=this.z.redMul(l.z),t=u.redSqr(),r=this.x.redMul(l.x),i=this.y.redMul(l.y),o=this.curve.d.redMul(r).redMul(i),s=t.redSub(o),a=t.redAdd(o),f=this.x.redAdd(this.y).redMul(l.x.redAdd(l.y)).redISub(r).redISub(i),c=u.redMul(s).redMul(f);return this.curve.twisted?(n=u.redMul(a).redMul(i.redSub(this.curve._mulA(r))),e=s.redMul(a)):(n=u.redMul(a).redMul(i.redSub(r)),e=this.curve._mulC(s).redMul(a)),this.curve.point(c,n,e)},t.prototype.add=function(l){return this.isInfinity()?l:l.isInfinity()?this:this.curve.extended?this._extAdd(l):this._projAdd(l)},t.prototype.mul=function(l){return this._hasDoubles(l)?this.curve._fixedNafMul(this,l):this.curve._wnafMul(this,l)},t.prototype.mulAdd=function(l,n,e){return this.curve._wnafMulAdd(1,[this,n],[l,e],2,!1)},t.prototype.jmulAdd=function(l,n,e){return this.curve._wnafMulAdd(1,[this,n],[l,e],2,!0)},t.prototype.normalize=function(){if(this.zOne)return this;var l=this.z.redInvm();return this.x=this.x.redMul(l),this.y=this.y.redMul(l),this.t&&(this.t=this.t.redMul(l)),this.z=this.curve.one,this.zOne=!0,this},t.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},t.prototype.getX=function(){return this.normalize(),this.x.fromRed()},t.prototype.getY=function(){return this.normalize(),this.y.fromRed()},t.prototype.eq=function(l){return this===l||0===this.getX().cmp(l.getX())&&0===this.getY().cmp(l.getY())},t.prototype.eqXToP=function(l){var n=l.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(n))return!0;for(var e=l.clone(),u=this.curve.redN.redMul(this.z);;){if(e.iadd(this.curve.n),e.cmp(this.curve.p)>=0)return!1;if(n.redIAdd(u),0===this.x.cmp(n))return!0}return!1},t.prototype.toP=t.prototype.normalize,t.prototype.mixedAdd=t.prototype.add},{"../../elliptic":197,"../curve":200,"bn.js":37,inherits:224}],200:[function(l,n,e){"use strict";var u=e;u.base=l("./base"),u["short"]=l("./short"),u.mont=l("./mont"),u.edwards=l("./edwards")},{"./base":198,"./edwards":199,"./mont":201,"./short":202}],201:[function(l,n,e){"use strict";function u(l){s.call(this,"mont",l),this.a=new i(l.a,16).toRed(this.red),this.b=new i(l.b,16).toRed(this.red),this.i4=new i(4).toRed(this.red).redInvm(),this.two=new i(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function t(l,n,e){s.BasePoint.call(this,l,"projective"),null===n&&null===e?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new i(n,16),this.z=new i(e,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}var r=l("../curve"),i=l("bn.js"),o=l("inherits"),s=r.base,a=l("../../elliptic"),f=a.utils;o(u,s),n.exports=u,u.prototype.validate=function(l){var n=l.normalize().x,e=n.redSqr(),u=e.redMul(n).redAdd(e.redMul(this.a)).redAdd(n),t=u.redSqrt();return 0===t.redSqr().cmp(u)},o(t,s.BasePoint),u.prototype.decodePoint=function(l,n){return this.point(f.toArray(l,n),1)},u.prototype.point=function(l,n){return new t(this,l,n)},u.prototype.pointFromJSON=function(l){return t.fromJSON(this,l)},t.prototype.precompute=function(){},t.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},t.fromJSON=function(l,n){return new t(l,n[0],n[1]||l.one)},t.prototype.inspect=function(){return this.isInfinity()?"":""},t.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},t.prototype.dbl=function(){var l=this.x.redAdd(this.z),n=l.redSqr(),e=this.x.redSub(this.z),u=e.redSqr(),t=n.redSub(u),r=n.redMul(u),i=t.redMul(u.redAdd(this.curve.a24.redMul(t)));return this.curve.point(r,i)},t.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},t.prototype.diffAdd=function(l,n){var e=this.x.redAdd(this.z),u=this.x.redSub(this.z),t=l.x.redAdd(l.z),r=l.x.redSub(l.z),i=r.redMul(e),o=t.redMul(u),s=n.z.redMul(i.redAdd(o).redSqr()),a=n.x.redMul(i.redISub(o).redSqr());return this.curve.point(s,a)},t.prototype.mul=function(l){for(var n=l.clone(),e=this,u=this.curve.point(null,null),t=this,r=[];0!==n.cmpn(0);n.iushrn(1))r.push(n.andln(1));for(var i=r.length-1;i>=0;i--)0===r[i]?(e=e.diffAdd(u,t),u=u.dbl()):(u=e.diffAdd(u,t),e=e.dbl());return u},t.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},t.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},t.prototype.eq=function(l){return 0===this.getX().cmp(l.getX())},t.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},t.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},{"../../elliptic":197,"../curve":200,"bn.js":37,inherits:224}],202:[function(l,n,e){"use strict";function u(l){f.call(this,"short",l),this.a=new s(l.a,16).toRed(this.red),this.b=new s(l.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(l),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function t(l,n,e,u){f.BasePoint.call(this,l,"affine"),null===n&&null===e?(this.x=null,this.y=null,this.inf=!0):(this.x=new s(n,16),this.y=new s(e,16),u&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function r(l,n,e,u){f.BasePoint.call(this,l,"jacobian"),null===n&&null===e&&null===u?(this.x=this.curve.one,this.y=this.curve.one,this.z=new s(0)):(this.x=new s(n,16),this.y=new s(e,16),this.z=new s(u,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}var i=l("../curve"),o=l("../../elliptic"),s=l("bn.js"),a=l("inherits"),f=i.base,c=o.utils.assert;a(u,f),n.exports=u,u.prototype._getEndomorphism=function(l){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var n,e;if(l.beta)n=new s(l.beta,16).toRed(this.red);else{var u=this._getEndoRoots(this.p);n=u[0].cmp(u[1])<0?u[0]:u[1],n=n.toRed(this.red)}if(l.lambda)e=new s(l.lambda,16);else{var t=this._getEndoRoots(this.n);0===this.g.mul(t[0]).x.cmp(this.g.x.redMul(n))?e=t[0]:(e=t[1],c(0===this.g.mul(e).x.cmp(this.g.x.redMul(n))))}var r;return r=l.basis?l.basis.map(function(l){return{a:new s(l.a,16),b:new s(l.b,16)}}):this._getEndoBasis(e),{beta:n,lambda:e,basis:r}}},u.prototype._getEndoRoots=function(l){var n=l===this.p?this.red:s.mont(l),e=new s(2).toRed(n).redInvm(),u=e.redNeg(),t=new s(3).toRed(n).redNeg().redSqrt().redMul(e),r=u.redAdd(t).fromRed(),i=u.redSub(t).fromRed();return[r,i]},u.prototype._getEndoBasis=function(l){for(var n,e,u,t,r,i,o,a,f,c=this.n.ushrn(Math.floor(this.n.bitLength()/2)),h=l,d=this.n.clone(),p=new s(1),b=new s(0),v=new s(0),_=new s(1),y=0;0!==h.cmpn(0);){var m=d.div(h);a=d.sub(m.mul(h)),f=v.sub(m.mul(p));var g=_.sub(m.mul(b));if(!u&&a.cmp(c)<0)n=o.neg(),e=p,u=a.neg(),t=f;else if(u&&2===++y)break;o=a,d=h,h=a,v=p,p=f,_=b,b=g}r=a.neg(),i=f;var w=u.sqr().add(t.sqr()),k=r.sqr().add(i.sqr());return k.cmp(w)>=0&&(r=n,i=e),u.negative&&(u=u.neg(),t=t.neg()),r.negative&&(r=r.neg(),i=i.neg()),[{a:u,b:t},{a:r,b:i}]},u.prototype._endoSplit=function(l){var n=this.endo.basis,e=n[0],u=n[1],t=u.b.mul(l).divRound(this.n),r=e.b.neg().mul(l).divRound(this.n),i=t.mul(e.a),o=r.mul(u.a),s=t.mul(e.b),a=r.mul(u.b),f=l.sub(i).sub(o),c=s.add(a).neg();return{k1:f,k2:c}},u.prototype.pointFromX=function(l,n){l=new s(l,16),l.red||(l=l.toRed(this.red));var e=l.redSqr().redMul(l).redIAdd(l.redMul(this.a)).redIAdd(this.b),u=e.redSqrt();if(0!==u.redSqr().redSub(e).cmp(this.zero))throw new Error("invalid point");var t=u.fromRed().isOdd();return(n&&!t||!n&&t)&&(u=u.redNeg()),this.point(l,u)},u.prototype.validate=function(l){if(l.inf)return!0;var n=l.x,e=l.y,u=this.a.redMul(n),t=n.redSqr().redMul(n).redIAdd(u).redIAdd(this.b);return 0===e.redSqr().redISub(t).cmpn(0)},u.prototype._endoWnafMulAdd=function(l,n,e){for(var u=this._endoWnafT1,t=this._endoWnafT2,r=0;r":""},t.prototype.isInfinity=function(){return this.inf},t.prototype.add=function(l){if(this.inf)return l;if(l.inf)return this;if(this.eq(l))return this.dbl();if(this.neg().eq(l))return this.curve.point(null,null);if(0===this.x.cmp(l.x))return this.curve.point(null,null);var n=this.y.redSub(l.y);0!==n.cmpn(0)&&(n=n.redMul(this.x.redSub(l.x).redInvm()));var e=n.redSqr().redISub(this.x).redISub(l.x),u=n.redMul(this.x.redSub(e)).redISub(this.y);return this.curve.point(e,u)},t.prototype.dbl=function(){if(this.inf)return this;var l=this.y.redAdd(this.y);if(0===l.cmpn(0))return this.curve.point(null,null);var n=this.curve.a,e=this.x.redSqr(),u=l.redInvm(),t=e.redAdd(e).redIAdd(e).redIAdd(n).redMul(u),r=t.redSqr().redISub(this.x.redAdd(this.x)),i=t.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,i)},t.prototype.getX=function(){return this.x.fromRed()},t.prototype.getY=function(){return this.y.fromRed()},t.prototype.mul=function(l){return l=new s(l,16),this._hasDoubles(l)?this.curve._fixedNafMul(this,l):this.curve.endo?this.curve._endoWnafMulAdd([this],[l]):this.curve._wnafMul(this,l)},t.prototype.mulAdd=function(l,n,e){var u=[this,n],t=[l,e];return this.curve.endo?this.curve._endoWnafMulAdd(u,t):this.curve._wnafMulAdd(1,u,t,2)},t.prototype.jmulAdd=function(l,n,e){var u=[this,n],t=[l,e];return this.curve.endo?this.curve._endoWnafMulAdd(u,t,!0):this.curve._wnafMulAdd(1,u,t,2,!0)},t.prototype.eq=function(l){return this===l||this.inf===l.inf&&(this.inf||0===this.x.cmp(l.x)&&0===this.y.cmp(l.y))},t.prototype.neg=function(l){if(this.inf)return this;var n=this.curve.point(this.x,this.y.redNeg());if(l&&this.precomputed){var e=this.precomputed,u=function(l){return l.neg()};n.precomputed={naf:e.naf&&{wnd:e.naf.wnd,points:e.naf.points.map(u)},doubles:e.doubles&&{step:e.doubles.step,points:e.doubles.points.map(u)}}}return n},t.prototype.toJ=function(){if(this.inf)return this.curve.jpoint(null,null,null);var l=this.curve.jpoint(this.x,this.y,this.curve.one);return l},a(r,f.BasePoint),u.prototype.jpoint=function(l,n,e){return new r(this,l,n,e)},r.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var l=this.z.redInvm(),n=l.redSqr(),e=this.x.redMul(n),u=this.y.redMul(n).redMul(l);return this.curve.point(e,u)},r.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},r.prototype.add=function(l){if(this.isInfinity())return l;if(l.isInfinity())return this;var n=l.z.redSqr(),e=this.z.redSqr(),u=this.x.redMul(n),t=l.x.redMul(e),r=this.y.redMul(n.redMul(l.z)),i=l.y.redMul(e.redMul(this.z)),o=u.redSub(t),s=r.redSub(i);if(0===o.cmpn(0))return 0!==s.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var a=o.redSqr(),f=a.redMul(o),c=u.redMul(a),h=s.redSqr().redIAdd(f).redISub(c).redISub(c),d=s.redMul(c.redISub(h)).redISub(r.redMul(f)),p=this.z.redMul(l.z).redMul(o);return this.curve.jpoint(h,d,p)},r.prototype.mixedAdd=function(l){if(this.isInfinity())return l.toJ();if(l.isInfinity())return this;var n=this.z.redSqr(),e=this.x,u=l.x.redMul(n),t=this.y,r=l.y.redMul(n).redMul(this.z),i=e.redSub(u),o=t.redSub(r);if(0===i.cmpn(0))return 0!==o.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var s=i.redSqr(),a=s.redMul(i),f=e.redMul(s),c=o.redSqr().redIAdd(a).redISub(f).redISub(f),h=o.redMul(f.redISub(c)).redISub(t.redMul(a)),d=this.z.redMul(i);return this.curve.jpoint(c,h,d)},r.prototype.dblp=function(l){if(0===l)return this;if(this.isInfinity())return this;if(!l)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var n=this,e=0;e=0)return!1;if(e.redIAdd(t),0===this.x.cmp(e))return!0}return!1},r.prototype.inspect=function(){return this.isInfinity()?"":""},r.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},{"../../elliptic":197,"../curve":200,"bn.js":37,inherits:224}],203:[function(l,n,e){"use strict";function u(l){"short"===l.type?this.curve=new o.curve["short"](l):"edwards"===l.type?this.curve=new o.curve.edwards(l):this.curve=new o.curve.mont(l),this.g=this.curve.g,this.n=this.curve.n,this.hash=l.hash,s(this.g.validate(),"Invalid curve"),s(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function t(l,n){Object.defineProperty(r,l,{configurable:!0,enumerable:!0,get:function(){var e=new u(n);return Object.defineProperty(r,l,{configurable:!0,enumerable:!0,value:e}),e}})}var r=e,i=l("hash.js"),o=l("../elliptic"),s=o.utils.assert;r.PresetCurve=u,t("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:i.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),t("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:i.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),t("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:i.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),t("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:i.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),t("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc", +b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:i.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),t("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:i.sha256,gRed:!1,g:["9"]}),t("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:i.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});var a;try{a=l("./precomputed/secp256k1")}catch(f){a=void 0}t("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:i.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",a]})},{"../elliptic":197,"./precomputed/secp256k1":210,"hash.js":215}],204:[function(l,n,e){"use strict";function u(l){return this instanceof u?("string"==typeof l&&(s(i.curves.hasOwnProperty(l),"Unknown curve "+l),l=i.curves[l]),l instanceof i.curves.PresetCurve&&(l={curve:l}),this.curve=l.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=l.curve.g,this.g.precompute(l.curve.n.bitLength()+1),void(this.hash=l.hash||l.curve.hash)):new u(l)}var t=l("bn.js"),r=l("hmac-drbg"),i=l("../../elliptic"),o=i.utils,s=o.assert,a=l("./key"),f=l("./signature");n.exports=u,u.prototype.keyPair=function(l){return new a(this,l)},u.prototype.keyFromPrivate=function(l,n){return a.fromPrivate(this,l,n)},u.prototype.keyFromPublic=function(l,n){return a.fromPublic(this,l,n)},u.prototype.genKeyPair=function(l){l||(l={});for(var n=new r({hash:this.hash,pers:l.pers,persEnc:l.persEnc||"utf8",entropy:l.entropy||i.rand(this.hash.hmacStrength),entropyEnc:l.entropy&&l.entropyEnc||"utf8",nonce:this.n.toArray()}),e=this.n.byteLength(),u=this.n.sub(new t(2));;){var o=new t(n.generate(e));if(!(o.cmp(u)>0))return o.iaddn(1),this.keyFromPrivate(o)}},u.prototype._truncateToN=function(l,n){var e=8*l.byteLength()-this.n.bitLength();return e>0&&(l=l.ushrn(e)),!n&&l.cmp(this.n)>=0?l.sub(this.n):l},u.prototype.sign=function(l,n,e,u){"object"==typeof e&&(u=e,e=null),u||(u={}),n=this.keyFromPrivate(n,e),l=this._truncateToN(new t(l,16));for(var i=this.n.byteLength(),o=n.getPrivate().toArray("be",i),s=l.toArray("be",i),a=new r({hash:this.hash,entropy:o,nonce:s,pers:u.pers,persEnc:u.persEnc||"utf8"}),c=this.n.sub(new t(1)),h=0;!0;h++){var d=u.k?u.k(h):new t(a.generate(this.n.byteLength()));if(d=this._truncateToN(d,!0),!(d.cmpn(1)<=0||d.cmp(c)>=0)){var p=this.g.mul(d);if(!p.isInfinity()){var b=p.getX(),v=b.umod(this.n);if(0!==v.cmpn(0)){var _=d.invm(this.n).mul(v.mul(n.getPrivate()).iadd(l));if(_=_.umod(this.n),0!==_.cmpn(0)){var y=(p.getY().isOdd()?1:0)|(0!==b.cmp(v)?2:0);return u.canonical&&_.cmp(this.nh)>0&&(_=this.n.sub(_),y^=1),new f({r:v,s:_,recoveryParam:y})}}}}}},u.prototype.verify=function(l,n,e,u){l=this._truncateToN(new t(l,16)),e=this.keyFromPublic(e,u),n=new f(n,"hex");var r=n.r,i=n.s;if(r.cmpn(1)<0||r.cmp(this.n)>=0)return!1;if(i.cmpn(1)<0||i.cmp(this.n)>=0)return!1;var o=i.invm(this.n),s=o.mul(l).umod(this.n),a=o.mul(r).umod(this.n);if(!this.curve._maxwellTrick){var c=this.g.mulAdd(s,e.getPublic(),a);return!c.isInfinity()&&0===c.getX().umod(this.n).cmp(r)}var c=this.g.jmulAdd(s,e.getPublic(),a);return!c.isInfinity()&&c.eqXToP(r)},u.prototype.recoverPubKey=function(l,n,e,u){s((3&e)===e,"The recovery param is more than two bits"),n=new f(n,u);var r=this.n,i=new t(l),o=n.r,a=n.s,c=1&e,h=e>>1;if(o.cmp(this.curve.p.umod(this.curve.n))>=0&&h)throw new Error("Unable to find sencond key candinate");o=h?this.curve.pointFromX(o.add(this.curve.n),c):this.curve.pointFromX(o,c);var d=n.r.invm(r),p=r.sub(i).mul(d).umod(r),b=a.mul(d).umod(r);return this.g.mulAdd(p,o,b)},u.prototype.getKeyRecoveryParam=function(l,n,e,u){if(n=new f(n,u),null!==n.recoveryParam)return n.recoveryParam;for(var t=0;t<4;t++){var r;try{r=this.recoverPubKey(l,n,t)}catch(l){continue}if(r.eq(e))return t}throw new Error("Unable to find valid recovery factor")}},{"../../elliptic":197,"./key":205,"./signature":206,"bn.js":37,"hmac-drbg":221}],205:[function(l,n,e){"use strict";function u(l,n){this.ec=l,this.priv=null,this.pub=null,n.priv&&this._importPrivate(n.priv,n.privEnc),n.pub&&this._importPublic(n.pub,n.pubEnc)}var t=l("bn.js"),r=l("../../elliptic"),i=r.utils,o=i.assert;n.exports=u,u.fromPublic=function(l,n,e){return n instanceof u?n:new u(l,{pub:n,pubEnc:e})},u.fromPrivate=function(l,n,e){return n instanceof u?n:new u(l,{priv:n,privEnc:e})},u.prototype.validate=function(){var l=this.getPublic();return l.isInfinity()?{result:!1,reason:"Invalid public key"}:l.validate()?l.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},u.prototype.getPublic=function(l,n){return"string"==typeof l&&(n=l,l=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),n?this.pub.encode(n,l):this.pub},u.prototype.getPrivate=function(l){return"hex"===l?this.priv.toString(16,2):this.priv},u.prototype._importPrivate=function(l,n){this.priv=new t(l,n||16),this.priv=this.priv.umod(this.ec.curve.n)},u.prototype._importPublic=function(l,n){return l.x||l.y?("mont"===this.ec.curve.type?o(l.x,"Need x coordinate"):"short"!==this.ec.curve.type&&"edwards"!==this.ec.curve.type||o(l.x&&l.y,"Need both x and y coordinate"),void(this.pub=this.ec.curve.point(l.x,l.y))):void(this.pub=this.ec.curve.decodePoint(l,n))},u.prototype.derive=function(l){return l.mul(this.priv).getX()},u.prototype.sign=function(l,n,e){return this.ec.sign(l,this,n,e)},u.prototype.verify=function(l,n){return this.ec.verify(l,n,this)},u.prototype.inspect=function(){return""}},{"../../elliptic":197,"bn.js":37}],206:[function(l,n,e){"use strict";function u(l,n){return l instanceof u?l:void(this._importDER(l,n)||(c(l.r&&l.s,"Signature without r or s"),this.r=new s(l.r,16),this.s=new s(l.s,16),void 0===l.recoveryParam?this.recoveryParam=null:this.recoveryParam=l.recoveryParam))}function t(){this.place=0}function r(l,n){var e=l[n.place++];if(!(128&e))return e;for(var u=15&e,t=0,r=0,i=n.place;r>>3);for(l.push(128|e);--e;)l.push(n>>>(e<<3)&255);l.push(n)}var s=l("bn.js"),a=l("../../elliptic"),f=a.utils,c=f.assert;n.exports=u,u.prototype._importDER=function(l,n){l=f.toArray(l,n);var e=new t;if(48!==l[e.place++])return!1;var u=r(l,e);if(u+e.place!==l.length)return!1;if(2!==l[e.place++])return!1;var i=r(l,e),o=l.slice(e.place,i+e.place);if(e.place+=i,2!==l[e.place++])return!1;var a=r(l,e);if(l.length!==a+e.place)return!1;var c=l.slice(e.place,a+e.place);return 0===o[0]&&128&o[1]&&(o=o.slice(1)),0===c[0]&&128&c[1]&&(c=c.slice(1)),this.r=new s(o),this.s=new s(c),this.recoveryParam=null,!0},u.prototype.toDER=function(l){var n=this.r.toArray(),e=this.s.toArray();for(128&n[0]&&(n=[0].concat(n)),128&e[0]&&(e=[0].concat(e)),n=i(n),e=i(e);!(e[0]||128&e[1]);)e=e.slice(1);var u=[2];o(u,n.length),u=u.concat(n),u.push(2),o(u,e.length);var t=u.concat(e),r=[48];return o(r,t.length),r=r.concat(t),f.encode(r,l)}},{"../../elliptic":197,"bn.js":37}],207:[function(l,n,e){"use strict";function u(l){if(o("ed25519"===l,"only tested with ed25519 so far"),!(this instanceof u))return new u(l);var l=r.curves[l].curve;this.curve=l,this.g=l.g,this.g.precompute(l.n.bitLength()+1),this.pointClass=l.point().constructor,this.encodingLength=Math.ceil(l.n.bitLength()/8),this.hash=t.sha512}var t=l("hash.js"),r=l("../../elliptic"),i=r.utils,o=i.assert,s=i.parseBytes,a=l("./key"),f=l("./signature");n.exports=u,u.prototype.sign=function(l,n){l=s(l);var e=this.keyFromSecret(n),u=this.hashInt(e.messagePrefix(),l),t=this.g.mul(u),r=this.encodePoint(t),i=this.hashInt(r,e.pubBytes(),l).mul(e.priv()),o=u.add(i).umod(this.curve.n);return this.makeSignature({R:t,S:o,Rencoded:r})},u.prototype.verify=function(l,n,e){l=s(l),n=this.makeSignature(n);var u=this.keyFromPublic(e),t=this.hashInt(n.Rencoded(),u.pubBytes(),l),r=this.g.mul(n.S()),i=n.R().add(u.pub().mul(t));return i.eq(r)},u.prototype.hashInt=function(){for(var l=this.hash(),n=0;n=0;){var r;if(t.isOdd()){var i=t.andln(u-1);r=i>(u>>1)-1?(u>>1)-i:i,t.isubn(r)}else r=0;e.push(r);for(var o=0!==t.cmpn(0)&&0===t.andln(u-1)?n+1:1,s=1;s0||n.cmpn(-t)>0;){var r=l.andln(3)+u&3,i=n.andln(3)+t&3;3===r&&(r=-1),3===i&&(i=-1);var o;if(0===(1&r))o=0;else{var s=l.andln(7)+u&7;o=3!==s&&5!==s||2!==i?r:-r}e[0].push(o);var a;if(0===(1&i))a=0;else{var s=n.andln(7)+t&7;a=3!==s&&5!==s||2!==r?i:-i}e[1].push(a),2*u===o+1&&(u=1-u),2*t===a+1&&(t=1-t),l.iushrn(1),n.iushrn(1)}return e}function r(l,n,e){var u="_"+n;l.prototype[n]=function(){return void 0!==this[u]?this[u]:this[u]=e.call(this)}}function i(l){return"string"==typeof l?s.toArray(l,"hex"):l}function o(l){return new a(l,"hex","le")}var s=e,a=l("bn.js"),f=l("minimalistic-assert"),c=l("minimalistic-crypto-utils");s.assert=f,s.toArray=c.toArray,s.zero2=c.zero2,s.toHex=c.toHex,s.encode=c.encode,s.getNAF=u,s.getJSF=t,s.cachedProperty=r,s.parseBytes=i,s.intFromLE=o},{"bn.js":37,"minimalistic-assert":228,"minimalistic-crypto-utils":229}],212:[function(l,n,e){n.exports={_args:[[{raw:"elliptic@^6.0.0",scope:null,escapedName:"elliptic",name:"elliptic",rawSpec:"^6.0.0",spec:">=6.0.0 <7.0.0",type:"range"},"/Users/lutovich/Projects/neo4j-javascript-driver/node_modules/browserify-sign"]],_from:"elliptic@>=6.0.0 <7.0.0",_id:"elliptic@6.4.0",_inCache:!0,_installable:!0,_location:"/elliptic",_nodeVersion:"7.0.0",_npmOperationalInternal:{host:"packages-18-east.internal.npmjs.com",tmp:"tmp/elliptic-6.4.0.tgz_1487798866428_0.30510620190761983"},_npmUser:{name:"indutny",email:"fedor@indutny.com"},_npmVersion:"3.10.8",_phantomChildren:{},_requested:{raw:"elliptic@^6.0.0",scope:null,escapedName:"elliptic",name:"elliptic",rawSpec:"^6.0.0",spec:">=6.0.0 <7.0.0",type:"range"},_requiredBy:["/browserify-sign","/create-ecdh"],_resolved:"http://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",_shasum:"cac9af8762c85836187003c8dfe193e5e2eae5df",_shrinkwrap:null,_spec:"elliptic@^6.0.0",_where:"/Users/lutovich/Projects/neo4j-javascript-driver/node_modules/browserify-sign",author:{name:"Fedor Indutny",email:"fedor@indutny.com"},bugs:{url:"https://github.com/indutny/elliptic/issues"},dependencies:{"bn.js":"^4.4.0",brorand:"^1.0.1","hash.js":"^1.0.0","hmac-drbg":"^1.0.0",inherits:"^2.0.1","minimalistic-assert":"^1.0.0","minimalistic-crypto-utils":"^1.0.0"},description:"EC cryptography",devDependencies:{brfs:"^1.4.3",coveralls:"^2.11.3",grunt:"^0.4.5","grunt-browserify":"^5.0.0","grunt-cli":"^1.2.0","grunt-contrib-connect":"^1.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^1.0.1","grunt-mocha-istanbul":"^3.0.1","grunt-saucelabs":"^8.6.2",istanbul:"^0.4.2",jscs:"^2.9.0",jshint:"^2.6.0",mocha:"^2.1.0"},directories:{},dist:{shasum:"cac9af8762c85836187003c8dfe193e5e2eae5df",tarball:"https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz"},files:["lib"],gitHead:"6b0d2b76caae91471649c8e21f0b1d3ba0f96090",homepage:"https://github.com/indutny/elliptic",keywords:["EC","Elliptic","curve","Cryptography"],license:"MIT",main:"lib/elliptic.js",maintainers:[{name:"indutny",email:"fedor@indutny.com"}],name:"elliptic",optionalDependencies:{},readme:"ERROR: No README data found!",repository:{type:"git",url:"git+ssh://git@github.com/indutny/elliptic.git"},scripts:{jscs:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",jshint:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",lint:"npm run jscs && npm run jshint",test:"npm run lint && npm run unit",unit:"istanbul test _mocha --reporter=spec test/index.js",version:"grunt dist && git add dist/"},version:"6.4.0"}},{}],213:[function(l,n,e){function u(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function t(l){return"function"==typeof l}function r(l){return"number"==typeof l}function i(l){return"object"==typeof l&&null!==l}function o(l){return void 0===l}n.exports=u,u.EventEmitter=u,u.prototype._events=void 0,u.prototype._maxListeners=void 0,u.defaultMaxListeners=10,u.prototype.setMaxListeners=function(l){if(!r(l)||l<0||isNaN(l))throw TypeError("n must be a positive number");return this._maxListeners=l,this},u.prototype.emit=function(l){var n,e,u,r,s,a;if(this._events||(this._events={}),"error"===l&&(!this._events.error||i(this._events.error)&&!this._events.error.length)){if(n=arguments[1],n instanceof Error)throw n;var f=new Error('Uncaught, unspecified "error" event. ('+n+")");throw f.context=n,f}if(e=this._events[l],o(e))return!1;if(t(e))switch(arguments.length){case 1:e.call(this);break;case 2:e.call(this,arguments[1]);break;case 3:e.call(this,arguments[1],arguments[2]);break;default:r=Array.prototype.slice.call(arguments,1),e.apply(this,r)}else if(i(e))for(r=Array.prototype.slice.call(arguments,1),a=e.slice(),u=a.length,s=0;s0&&this._events[l].length>e&&(this._events[l].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[l].length),"function"==typeof console.trace&&console.trace())),this},u.prototype.on=u.prototype.addListener,u.prototype.once=function(l,n){function e(){this.removeListener(l,e),u||(u=!0,n.apply(this,arguments))}if(!t(n))throw TypeError("listener must be a function");var u=!1;return e.listener=n,this.on(l,e),this},u.prototype.removeListener=function(l,n){var e,u,r,o;if(!t(n))throw TypeError("listener must be a function");if(!this._events||!this._events[l])return this;if(e=this._events[l],r=e.length,u=-1,e===n||t(e.listener)&&e.listener===n)delete this._events[l],this._events.removeListener&&this.emit("removeListener",l,n);else if(i(e)){for(o=r;o-- >0;)if(e[o]===n||e[o].listener&&e[o].listener===n){u=o;break}if(u<0)return this;1===e.length?(e.length=0,delete this._events[l]):e.splice(u,1),this._events.removeListener&&this.emit("removeListener",l,n)}return this},u.prototype.removeAllListeners=function(l){var n,e;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[l]&&delete this._events[l],this;if(0===arguments.length){for(n in this._events)"removeListener"!==n&&this.removeAllListeners(n);return this.removeAllListeners("removeListener"),this._events={},this}if(e=this._events[l],t(e))this.removeListener(l,e);else if(e)for(;e.length;)this.removeListener(l,e[e.length-1]);return delete this._events[l],this},u.prototype.listeners=function(l){var n;return n=this._events&&this._events[l]?t(this._events[l])?[this._events[l]]:this._events[l].slice():[]},u.prototype.listenerCount=function(l){if(this._events){var n=this._events[l];if(t(n))return 1;if(n)return n.length}return 0},u.listenerCount=function(l,n){return l.listenerCount(n)}},{}],214:[function(l,n,e){(function(e){function u(l,n,u,r){e.isBuffer(l)||(l=new e(l,"binary")),n&&!e.isBuffer(n)&&(n=new e(n,"binary")),u/=8,r=r||0;for(var i,o,s=0,a=0,f=new e(u),c=new e(r),h=0,d=[];;){if(h++>0&&d.push(i),d.push(l),n&&d.push(n),i=t(e.concat(d)),d=[],o=0,u>0)for(;;){if(0===u)break;if(o===i.length)break;f[s++]=i[o],u--,o++}if(r>0&&o!==i.length)for(;;){if(0===r)break;if(o===i.length)break;c[a++]=i[o],r--,o++}if(0===u&&0===r)break}for(o=0;o=this._delta8){l=this.pending;var e=l.length%this._delta8;this.pending=l.slice(l.length-e,l.length),0===this.pending.length&&(this.pending=null),l=r.join32(l,0,l.length-e,this.endian);for(var u=0;u>>24&255,u[t++]=l>>>16&255,u[t++]=l>>>8&255,u[t++]=255&l}else{u[t++]=255&l,u[t++]=l>>>8&255,u[t++]=l>>>16&255,u[t++]=l>>>24&255,u[t++]=0,u[t++]=0,u[t++]=0,u[t++]=0;for(var r=8;rthis.blockSize&&(l=(new this.Hash).update(l).digest()),i(l.length<=this.blockSize);for(var n=l.length;n>>3}function p(l){return R(l,17)^R(l,19)^l>>>10}function b(l,n,e,u){return 0===l?s(n,e,u):1===l||3===l?f(n,e,u):2===l?a(n,e,u):void 0}function v(l,n,e,u,t,r){var i=l&e^~l&t;return i<0&&(i+=4294967296),i}function _(l,n,e,u,t,r){var i=n&u^~n&r;return i<0&&(i+=4294967296),i}function y(l,n,e,u,t,r){var i=l&e^l&t^e&t;return i<0&&(i+=4294967296),i}function m(l,n,e,u,t,r){var i=n&u^n&r^u&r;return i<0&&(i+=4294967296),i}function g(l,n){var e=U(l,n,28),u=U(n,l,2),t=U(n,l,7),r=e^u^t;return r<0&&(r+=4294967296),r}function w(l,n){var e=N(l,n,28),u=N(n,l,2),t=N(n,l,7),r=e^u^t;return r<0&&(r+=4294967296),r}function k(l,n){var e=U(l,n,14),u=U(l,n,18),t=U(n,l,9),r=e^u^t;return r<0&&(r+=4294967296),r}function E(l,n){var e=N(l,n,14),u=N(l,n,18),t=N(n,l,9),r=e^u^t;return r<0&&(r+=4294967296),r}function S(l,n){var e=U(l,n,1),u=U(l,n,8),t=L(l,n,7),r=e^u^t;return r<0&&(r+=4294967296),r}function M(l,n){var e=N(l,n,1),u=N(l,n,8),t=D(l,n,7),r=e^u^t;return r<0&&(r+=4294967296),r}function j(l,n){var e=U(l,n,19),u=U(n,l,29),t=L(l,n,6),r=e^u^t;return r<0&&(r+=4294967296),r}function I(l,n){var e=N(l,n,19),u=N(n,l,29),t=D(l,n,6),r=e^u^t;return r<0&&(r+=4294967296),r}var C=l("../hash"),A=C.utils,x=A.assert,R=A.rotr32,T=A.rotl32,B=A.sum32,O=A.sum32_4,P=A.sum32_5,U=A.rotr64_hi,N=A.rotr64_lo,L=A.shr64_hi,D=A.shr64_lo,F=A.sum64,q=A.sum64_hi,z=A.sum64_lo,H=A.sum64_4_hi,K=A.sum64_4_lo,V=A.sum64_5_hi,Y=A.sum64_5_lo,W=C.common.BlockHash,X=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],G=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],Z=[1518500249,1859775393,2400959708,3395469782];A.inherits(u,W),e.sha256=u,u.blockSize=512,u.outSize=256,u.hmacStrength=192,u.padLength=64,u.prototype._update=function(l,n){for(var e=this.W,u=0;u<16;u++)e[u]=l[n+u];for(;u>8,i=255&t;r?e.push(r,i):e.push(i)}else for(var u=0;u>>24|l>>>8&65280|l<<8&16711680|(255&l)<<24;return n>>>0}function i(l,n){for(var e="",u=0;u>>0}return r}function f(l,n){for(var e=new Array(4*l.length),u=0,t=0;u>>24,e[t+1]=r>>>16&255,e[t+2]=r>>>8&255,e[t+3]=255&r):(e[t+3]=r>>>24,e[t+2]=r>>>16&255,e[t+1]=r>>>8&255,e[t]=255&r)}return e}function c(l,n){return l>>>n|l<<32-n}function h(l,n){return l<>>32-n}function d(l,n){return l+n>>>0}function p(l,n,e){return l+n+e>>>0}function b(l,n,e,u){return l+n+e+u>>>0}function v(l,n,e,u,t){return l+n+e+u+t>>>0}function _(l,n){if(!l)throw new Error(n||"Assertion failed")}function y(l,n,e,u){var t=l[n],r=l[n+1],i=u+r>>>0,o=(i>>0,l[n+1]=i}function m(l,n,e,u){var t=n+u>>>0,r=(t>>0}function g(l,n,e,u){var t=n+u;return t>>>0}function w(l,n,e,u,t,r,i,o){var s=0,a=n;a=a+u>>>0,s+=a>>0,s+=a>>0,s+=a>>0}function k(l,n,e,u,t,r,i,o){var s=n+u+r+o;return s>>>0}function E(l,n,e,u,t,r,i,o,s,a){var f=0,c=n;c=c+u>>>0,f+=c>>0,f+=c>>0,f+=c>>0,f+=c>>0}function S(l,n,e,u,t,r,i,o,s,a){var f=n+u+r+o+a;return f>>>0}function M(l,n,e){var u=n<<32-e|l>>>e;return u>>>0}function j(l,n,e){var u=l<<32-e|n>>>e;return u>>>0}function I(l,n,e){return l>>>e}function C(l,n,e){var u=l<<32-e|n>>>e;return u>>>0}var A=e,x=l("inherits");A.toArray=u,A.toHex=t,A.htonl=r,A.toHex32=i,A.zero2=o,A.zero8=s,A.join32=a,A.split32=f,A.rotr32=c,A.rotl32=h,A.sum32=d,A.sum32_3=p,A.sum32_4=b,A.sum32_5=v,A.assert=_,A.inherits=x,e.sum64=y,e.sum64_hi=m,e.sum64_lo=g,e.sum64_4_hi=w,e.sum64_4_lo=k,e.sum64_5_hi=E,e.sum64_5_lo=S,e.rotr64_hi=M,e.rotr64_lo=j,e.shr64_hi=I,e.shr64_lo=C},{inherits:224}],221:[function(l,n,e){"use strict";function u(l){if(!(this instanceof u))return new u(l);this.hash=l.hash,this.predResist=!!l.predResist,this.outLen=this.hash.outSize,this.minEntropy=l.minEntropy||this.hash.hmacStrength,this.reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var n=r.toArray(l.entropy,l.entropyEnc||"hex"),e=r.toArray(l.nonce,l.nonceEnc||"hex"),t=r.toArray(l.pers,l.persEnc||"hex");i(n.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(n,e,t)}var t=l("hash.js"),r=l("minimalistic-crypto-utils"),i=l("minimalistic-assert");n.exports=u,u.prototype._init=function(l,n,e){var u=l.concat(n).concat(e);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var t=0;t=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(l.concat(e||[])),this.reseed=1},u.prototype.generate=function(l,n,e,u){if(this.reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof n&&(u=e,e=n,n=null),e&&(e=r.toArray(e,u||"hex"),this._update(e));for(var t=[];t.length>1,f=-7,c=e?t-1:0,h=e?-1:1,d=l[n+c];for(c+=h,r=d&(1<<-f)-1,d>>=-f,f+=o;f>0;r=256*r+l[n+c],c+=h,f-=8);for(i=r&(1<<-f)-1,r>>=-f,f+=u;f>0;i=256*i+l[n+c],c+=h,f-=8);if(0===r)r=1-a;else{if(r===s)return i?NaN:(d?-1:1)*(1/0);i+=Math.pow(2,u),r-=a}return(d?-1:1)*i*Math.pow(2,r-u)},e.write=function(l,n,e,u,t,r){var i,o,s,a=8*r-t-1,f=(1<>1,h=23===t?Math.pow(2,-24)-Math.pow(2,-77):0,d=u?0:r-1,p=u?1:-1,b=n<0||0===n&&1/n<0?1:0;for(n=Math.abs(n),isNaN(n)||n===1/0?(o=isNaN(n)?1:0,i=f):(i=Math.floor(Math.log(n)/Math.LN2),n*(s=Math.pow(2,-i))<1&&(i--,s*=2),n+=i+c>=1?h/s:h*Math.pow(2,1-c),n*s>=2&&(i++,s/=2),i+c>=f?(o=0,i=f):i+c>=1?(o=(n*s-1)*Math.pow(2,t),i+=c):(o=n*Math.pow(2,c-1)*Math.pow(2,t),i=0));t>=8;l[e+d]=255&o,d+=p,o/=256,t-=8);for(i=i<0;l[e+d]=255&i,d+=p,i/=256,a-=8);l[e+d-p]|=128*b}},{}],223:[function(l,n,e){var u=[].indexOf;n.exports=function(l,n){if(u)return l.indexOf(n);for(var e=0;e>=7-u),new t(e)},u.prototype.test=function(l,n,e){var u=l.bitLength(),r=t.mont(l),i=new t(1).toRed(r);n||(n=Math.max(1,u/48|0));for(var o=l.subn(1),s=o.subn(1),a=0;!o.testn(a);a++);for(var f=l.shrn(a),c=o.toRed(r),h=!0;n>0;n--){var d=this._rand(s);e&&e(d);var p=d.toRed(r).redPow(f);if(0!==p.cmp(i)&&0!==p.cmp(c)){for(var b=1;b0;n--){var c=this._rand(o),h=l.gcd(c);if(0!==h.cmpn(1))return h;var d=c.toRed(u).redPow(a);if(0!==d.cmp(r)&&0!==d.cmp(f)){for(var p=1;p>8,i=255&t;r?e.push(r,i):e.push(i)}return e}function t(l){return 1===l.length?"0"+l:l}function r(l){for(var n="",e=0;e=0;u--){var t=l[u];"."===t?l.splice(u,1):".."===t?(l.splice(u,1),e++):e&&(l.splice(u,1),e--)}if(n)for(;e--;e)l.unshift("..");return l}function u(l,n){if(l.filter)return l.filter(n);for(var e=[],u=0;u=-1&&!t;r--){var i=r>=0?arguments[r]:l.cwd();if("string"!=typeof i)throw new TypeError("Arguments to path.resolve must be strings");i&&(e=i+"/"+e,t="/"===i.charAt(0))}return e=n(u(e.split("/"),function(l){return!!l}),!t).join("/"),(t?"/":"")+e||"."},e.normalize=function(l){var t=e.isAbsolute(l),r="/"===i(l,-1);return l=n(u(l.split("/"),function(l){return!!l}),!t).join("/"),l||t||(l="."),l&&r&&(l+="/"),(t?"/":"")+l},e.isAbsolute=function(l){return"/"===l.charAt(0)},e.join=function(){var l=Array.prototype.slice.call(arguments,0);return e.normalize(u(l,function(l,n){if("string"!=typeof l)throw new TypeError("Arguments to path.join must be strings");return l}).join("/"))},e.relative=function(l,n){function u(l){for(var n=0;n=0&&""===l[e];e--);return n>e?[]:l.slice(n,e-n+1)}l=e.resolve(l).substr(1),n=e.resolve(n).substr(1);for(var t=u(l.split("/")),r=u(n.split("/")),i=Math.min(t.length,r.length),o=i,s=0;s=6?"utf-8":"binary"}e.pbkdf2Sync=function(l,n,e,o,s){u.isBuffer(l)||(l=new u(l,i)),u.isBuffer(n)||(n=new u(n,i)),r(e,o),s=s||"sha1";var a,f=1,c=new u(o),h=new u(n.length+4);n.copy(h,0,0,n.length);for(var d,p,b=1;b<=f;b++){h.writeUInt32BE(b,n.length);var v=t(s,l).update(h).digest();a||(a=v.length,p=new u(a),f=Math.ceil(o/a),d=o-(f-1)*a),v.copy(p,0,0,a);for(var _=1;_u||n!==n)throw new TypeError("Bad key length")}},{}],239:[function(l,n,e){(function(l){"use strict";function e(n,e,u,t){if("function"!=typeof n)throw new TypeError('"callback" argument must be a function');var r,i,o=arguments.length;switch(o){case 0:case 1:return l.nextTick(n);case 2:return l.nextTick(function(){n.call(null,e)});case 3:return l.nextTick(function(){n.call(null,e,u)});case 4:return l.nextTick(function(){n.call(null,e,u,t)});default:for(r=new Array(o-1),i=0;i1)for(var e=1;e=n.length){r++;break}var i=n.slice(2,t-1);n.slice(t-1,t);if(("0002"!==u.toString("hex")&&!e||"0001"!==u.toString("hex")&&e)&&r++,i.length<8&&r++,r)throw new Error("decryption error");return n.slice(t)}function r(l,n){l=new e(l),n=new e(n);var u=0,t=l.length;l.length!==n.length&&(u++,t=Math.min(l.length,n.length));for(var r=-1;++rc||new a(n).cmp(s.modulus)>=0)throw new Error("decryption error");var d;d=r?h(new a(n),s):f(n,s);var p=new e(c-d.length);if(p.fill(0),d=e.concat([p,d],c),4===o)return u(s,d);if(1===o)return t(s,d,r);if(3===o)return d;throw new Error("unknown padding")}}).call(this,l("buffer").Buffer)},{"./mgf":242,"./withPublic":245,"./xor":246,"bn.js":37,"browserify-rsa":58,buffer:67,"create-hash":182,"parse-asn1":235}],244:[function(l,n,e){(function(e){function u(l,n){var u=l.modulus.byteLength(),t=n.length,r=s("sha1").update(new e("")).digest(),i=r.length,h=2*i;if(t>u-h-2)throw new Error("message too long");var d=new e(u-t-h-2);d.fill(0);var p=u-i-1,b=o(i),v=f(e.concat([r,d,new e([1]),n],p),a(b,p)),_=f(b,a(v,i));return new c(e.concat([new e([0]),_,v],u))}function t(l,n,u){var t=n.length,i=l.modulus.byteLength();if(t>i-11)throw new Error("message too long");var o;return u?(o=new e(i-t-3),o.fill(255)):o=r(i-t-3),new c(e.concat([new e([0,u?1:2]),o,new e([0]),n],i))}function r(l,n){for(var u,t=new e(l),r=0,i=o(2*l),s=0;r=0)throw new Error("data too long for modulus")}return e?d(o,s):h(o,s)}}).call(this,l("buffer").Buffer)},{"./mgf":242,"./withPublic":245,"./xor":246,"bn.js":37,"browserify-rsa":58,buffer:67,"create-hash":182,"parse-asn1":235,randombytes:247}],245:[function(l,n,e){(function(e){function u(l,n){return new e(l.toRed(t.mont(n.modulus)).redPow(new t(n.publicExponent)).fromRed().toArray())}var t=l("bn.js");n.exports=u}).call(this,l("buffer").Buffer)},{"bn.js":37,buffer:67}],246:[function(l,n,e){n.exports=function(l,n){for(var e=l.length,u=-1;++u65536)throw new Error("requested too many random bytes");var r=new e.Uint8Array(n);n>0&&i.getRandomValues(r);var o=new u(r.buffer);return"function"==typeof t?l.nextTick(function(){t(null,o)}):o}var i=e.crypto||e.msCrypto;i&&i.getRandomValues?n.exports=r:n.exports=t}).call(this,l("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},l("buffer").Buffer)},{_process:240,buffer:67}],248:[function(l,n,e){n.exports=l("./lib/_stream_duplex.js")},{"./lib/_stream_duplex.js":249}],249:[function(l,n,e){"use strict";function u(l){return this instanceof u?(a.call(this,l),f.call(this,l),l&&l.readable===!1&&(this.readable=!1),l&&l.writable===!1&&(this.writable=!1),this.allowHalfOpen=!0,l&&l.allowHalfOpen===!1&&(this.allowHalfOpen=!1),void this.once("end",t)):new u(l)}function t(){this.allowHalfOpen||this._writableState.ended||o(r,this)}function r(l){l.end()}var i=Object.keys||function(l){var n=[];for(var e in l)n.push(e);return n};n.exports=u;var o=l("process-nextick-args"),s=l("core-util-is");s.inherits=l("inherits");var a=l("./_stream_readable"),f=l("./_stream_writable");s.inherits(u,a);for(var c=i(f.prototype),h=0;h0)if(n.ended&&!t){var i=new Error("stream.push() after EOF");l.emit("error",i)}else if(n.endEmitted&&t){var s=new Error("stream.unshift() after end event");l.emit("error",s)}else{var a;!n.decoder||t||u||(e=n.decoder.write(e),a=!n.objectMode&&0===e.length),t||(n.reading=!1),a||(n.flowing&&0===n.length&&!n.sync?(l.emit("data",e),l.read(0)):(n.length+=n.objectMode?1:e.length,t?n.buffer.unshift(e):n.buffer.push(e),n.needReadable&&h(l))),p(l,n)}else t||(n.reading=!1);return o(n)}function o(l){return!l.ended&&(l.needReadable||l.length=q?l=q:(l--,l|=l>>>1,l|=l>>>2,l|=l>>>4,l|=l>>>8,l|=l>>>16,l++),l}function a(l,n){return l<=0||0===n.length&&n.ended?0:n.objectMode?1:l!==l?n.flowing&&n.length?n.buffer.head.data.length:n.length:(l>n.highWaterMark&&(n.highWaterMark=s(l)),l<=n.length?l:n.ended?n.length:(n.needReadable=!0,0))}function f(l,n){var e=null;return O.isBuffer(n)||"string"==typeof n||null===n||void 0===n||l.objectMode||(e=new TypeError("Invalid non-string/buffer chunk")),e}function c(l,n){if(!n.ended){if(n.decoder){var e=n.decoder.end();e&&e.length&&(n.buffer.push(e),n.length+=n.objectMode?1:e.length)}n.ended=!0,h(l)}}function h(l){var n=l._readableState;n.needReadable=!1,n.emittedReadable||(L("emitReadable",n.flowing),n.emittedReadable=!0,n.sync?x(d,l):d(l))}function d(l){L("emit readable"),l.emit("readable"),g(l)}function p(l,n){n.readingMore||(n.readingMore=!0,x(b,l,n))}function b(l,n){for(var e=n.length;!n.reading&&!n.flowing&&!n.ended&&n.length=n.length?(e=n.decoder?n.buffer.join(""):1===n.buffer.length?n.buffer.head.data:n.buffer.concat(n.length),n.buffer.clear()):e=k(l,n.buffer,n.decoder),e}function k(l,n,e){var u;return lr.length?r.length:l;if(t+=i===r.length?r:r.slice(0,l),l-=i,0===l){i===r.length?(++u,e.next?n.head=e.next:n.head=n.tail=null):(n.head=e,e.data=r.slice(i));break}++u}return n.length-=u,t}function S(l,n){var e=P.allocUnsafe(l),u=n.head,t=1;for(u.data.copy(e),l-=u.data.length;u=u.next;){var r=u.data,i=l>r.length?r.length:l;if(r.copy(e,e.length-l,0,i),l-=i,0===l){i===r.length?(++t,u.next?n.head=u.next:n.head=n.tail=null):(n.head=u,u.data=r.slice(i));break}++t}return n.length-=t,e}function M(l){var n=l._readableState;if(n.length>0)throw new Error('"endReadable()" called on non-empty stream');n.endEmitted||(n.ended=!0,x(j,n,l))}function j(l,n){l.endEmitted||0!==l.length||(l.endEmitted=!0,n.readable=!1,n.emit("end"))}function I(l,n){for(var e=0,u=l.length;e=n.highWaterMark||n.ended))return L("read: emitReadable",n.length,n.ended),0===n.length&&n.ended?M(this):h(this),null;if(l=a(l,n),0===l&&n.ended)return 0===n.length&&M(this),null;var u=n.needReadable;L("need readable",u),(0===n.length||n.length-l0?w(l,n):null,null===t?(n.needReadable=!0,l=0):n.length-=l,0===n.length&&(n.ended||(n.needReadable=!0),e!==l&&n.ended&&M(this)),null!==t&&this.emit("data",t),t},r.prototype._read=function(l){this.emit("error",new Error("_read() is not implemented"))},r.prototype.pipe=function(l,n){function t(l){L("onunpipe"),l===h&&i()}function r(){L("onend"),l.end()}function i(){L("cleanup"),l.removeListener("close",a),l.removeListener("finish",f),l.removeListener("drain",_),l.removeListener("error",s),l.removeListener("unpipe",t),h.removeListener("end",r),h.removeListener("end",i),h.removeListener("data",o),y=!0,!d.awaitDrain||l._writableState&&!l._writableState.needDrain||_()}function o(n){L("ondata"),m=!1;var e=l.write(n);!1!==e||m||((1===d.pipesCount&&d.pipes===l||d.pipesCount>1&&C(d.pipes,l)!==-1)&&!y&&(L("false write response, pause",h._readableState.awaitDrain),h._readableState.awaitDrain++,m=!0),h.pause())}function s(n){L("onerror",n),c(),l.removeListener("error",s),0===B(l,"error")&&l.emit("error",n)}function a(){l.removeListener("finish",f),c()}function f(){L("onfinish"),l.removeListener("close",a),c()}function c(){L("unpipe"),h.unpipe(l)}var h=this,d=this._readableState;switch(d.pipesCount){case 0:d.pipes=l;break;case 1:d.pipes=[d.pipes,l];break;default:d.pipes.push(l)}d.pipesCount+=1,L("pipe count=%d opts=%j",d.pipesCount,n);var p=(!n||n.end!==!1)&&l!==e.stdout&&l!==e.stderr,b=p?r:i;d.endEmitted?x(b):h.once("end",b),l.on("unpipe",t);var _=v(h);l.on("drain",_);var y=!1,m=!1;return h.on("data",o),u(l,"error",s),l.once("close",a),l.once("finish",f),l.emit("pipe",h),d.flowing||(L("pipe resume"),h.resume()),l},r.prototype.unpipe=function(l){var n=this._readableState;if(0===n.pipesCount)return this;if(1===n.pipesCount)return l&&l!==n.pipes?this:(l||(l=n.pipes),n.pipes=null,n.pipesCount=0,n.flowing=!1,l&&l.emit("unpipe",this),this);if(!l){var e=n.pipes,u=n.pipesCount;n.pipes=null,n.pipesCount=0,n.flowing=!1;for(var t=0;t-1?setImmediate:S;i.WritableState=r;var j=l("core-util-is");j.inherits=l("inherits");var I,C={deprecate:l("util-deprecate")};!function(){try{I=l("stream")}catch(n){}finally{I||(I=l("events").EventEmitter)}}();var A=l("buffer").Buffer,x=l("buffer-shims");j.inherits(i,I),r.prototype.getBuffer=function(){for(var l=this.bufferedRequest,n=[];l;)n.push(l),l=l.next;return n},function(){try{Object.defineProperty(r.prototype,"buffer",{get:C.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.")})}catch(l){}}();var R;"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(R=Function.prototype[Symbol.hasInstance],Object.defineProperty(i,Symbol.hasInstance,{value:function(l){return!!R.call(this,l)||l&&l._writableState instanceof r}})):R=function(l){return l instanceof this},i.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},i.prototype.write=function(l,n,e){var t=this._writableState,r=!1,i=A.isBuffer(l);return"function"==typeof n&&(e=n,n=null),i?n="buffer":n||(n=t.defaultEncoding),"function"!=typeof e&&(e=u),t.ended?o(this,e):(i||s(this,t,l,e))&&(t.pendingcb++,r=f(this,t,i,l,n,e)),r},i.prototype.cork=function(){var l=this._writableState;l.corked++},i.prototype.uncork=function(){var l=this._writableState;l.corked&&(l.corked--,l.writing||l.corked||l.finished||l.bufferProcessing||!l.bufferedRequest||_(this,l))},i.prototype.setDefaultEncoding=function(l){if("string"==typeof l&&(l=l.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((l+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+l);return this._writableState.defaultEncoding=l,this},i.prototype._write=function(l,n,e){e(new Error("_write() is not implemented"))},i.prototype._writev=null,i.prototype.end=function(l,n,e){var u=this._writableState;"function"==typeof l?(e=l,l=null,n=null):"function"==typeof n&&(e=n,n=null),null!==l&&void 0!==l&&this.write(l,n),u.corked&&(u.corked=1,this.uncork()),u.ending||u.finished||w(this,u,e)}}).call(this,l("_process"))},{"./_stream_duplex":249,_process:240,buffer:67,"buffer-shims":65,"core-util-is":180,events:213,inherits:224,"process-nextick-args":239,"util-deprecate":270}],254:[function(l,n,e){"use strict";function u(){this.head=null,this.tail=null,this.length=0}var t=(l("buffer").Buffer,l("buffer-shims"));n.exports=u,u.prototype.push=function(l){var n={data:l,next:null};this.length>0?this.tail.next=n:this.head=n,this.tail=n,++this.length},u.prototype.unshift=function(l){var n={data:l,next:this.head};0===this.length&&(this.tail=n),this.head=n,++this.length},u.prototype.shift=function(){if(0!==this.length){var l=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,l}},u.prototype.clear=function(){this.head=this.tail=null,this.length=0},u.prototype.join=function(l){if(0===this.length)return"";for(var n=this.head,e=""+n.data;n=n.next;)e+=l+n.data;return e},u.prototype.concat=function(l){if(0===this.length)return t.alloc(0);if(1===this.length)return this.head.data;for(var n=t.allocUnsafe(l>>>0),e=this.head,u=0;e;)e.data.copy(n,u),u+=e.data.length,e=e.next;return n}},{buffer:67,"buffer-shims":65}],255:[function(l,n,e){n.exports=l("./lib/_stream_passthrough.js")},{"./lib/_stream_passthrough.js":250}],256:[function(l,n,e){(function(u){var t=function(){try{return l("stream")}catch(n){}}();e=n.exports=l("./lib/_stream_readable.js"),e.Stream=t||e,e.Readable=e,e.Writable=l("./lib/_stream_writable.js"),e.Duplex=l("./lib/_stream_duplex.js"),e.Transform=l("./lib/_stream_transform.js"),e.PassThrough=l("./lib/_stream_passthrough.js"),!u.browser&&"disable"===u.env.READABLE_STREAM&&t&&(n.exports=t)}).call(this,l("_process"))},{"./lib/_stream_duplex.js":249,"./lib/_stream_passthrough.js":250,"./lib/_stream_readable.js":251,"./lib/_stream_transform.js":252,"./lib/_stream_writable.js":253,_process:240}],257:[function(l,n,e){n.exports=l("./lib/_stream_transform.js")},{"./lib/_stream_transform.js":252}],258:[function(l,n,e){n.exports=l("./lib/_stream_writable.js")},{"./lib/_stream_writable.js":253}],259:[function(l,n,e){(function(l){function e(l){for(var n=[],e=0,u=0;e>>5]|=l[e]<<24-u%32;return n}function u(l){for(var n=[],e=0;e<32*l.length;e+=8)n.push(l[e>>>5]>>>24-e%32&255);return n}function t(l,n,e){for(var u=0;u<16;u++){var t=e+u,c=n[t];n[t]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}var y,m,g,w,k,E,S,M,j,I;E=y=l[0],S=m=l[1],M=g=l[2],j=w=l[3],I=k=l[4];var C;for(u=0;u<80;u+=1)C=y+n[e+h[u]]|0,C+=u<16?r(m,g,w)+v[0]:u<32?i(m,g,w)+v[1]:u<48?o(m,g,w)+v[2]:u<64?s(m,g,w)+v[3]:a(m,g,w)+v[4],C=0|C,C=f(C,p[u]),C=C+k|0,y=k,k=w,w=f(g,10),g=m,m=C,C=E+n[e+d[u]]|0,C+=u<16?a(S,M,j)+_[0]:u<32?s(S,M,j)+_[1]:u<48?o(S,M,j)+_[2]:u<64?i(S,M,j)+_[3]:r(S,M,j)+_[4],C=0|C,C=f(C,b[u]),C=C+I|0,E=I,I=j,j=f(M,10),M=S,S=C;C=l[1]+g+j|0,l[1]=l[2]+w+I|0,l[2]=l[3]+k+E|0,l[3]=l[4]+y+S|0,l[4]=l[0]+m+M|0,l[0]=C}function r(l,n,e){return l^n^e}function i(l,n,e){return l&n|~l&e}function o(l,n,e){return(l|~n)^e}function s(l,n,e){return l&e|n&~e}function a(l,n,e){return l^(n|~e)}function f(l,n){return l<>>32-n}function c(n){var r=[1732584193,4023233417,2562383102,271733878,3285377520];"string"==typeof n&&(n=new l(n,"utf8"));var i=e(n),o=8*n.length,s=8*n.length;i[o>>>5]|=128<<24-o%32,i[(o+64>>>9<<4)+14]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8);for(var a=0;a>>24)|4278255360&(f<<24|f>>>8)}var c=u(r);return new l(c)}var h=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],d=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],p=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],b=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],v=[0,1518500249,1859775393,2400959708,2840853838],_=[1352829926,1548603684,1836072691,2053994217,0];n.exports=c}).call(this,l("buffer").Buffer)},{buffer:67}],260:[function(l,n,e){(function(l){function e(n,e){this._block=new l(n),this._finalSize=e,this._blockSize=n,this._len=0,this._s=0}e.prototype.update=function(n,e){"string"==typeof n&&(e=e||"utf8",n=new l(n,e));for(var u=this._len+=n.length,t=this._s||0,r=0,i=this._block;t=8*this._finalSize&&(this._update(this._block),this._block.fill(0)),this._block.writeInt32BE(n,this._blockSize-4);var e=this._update(this._block)||this._hash();return l?e.toString(l):e},e.prototype._update=function(){throw new Error("_update must be implemented by subclass")},n.exports=e}).call(this,l("buffer").Buffer)},{buffer:67}],261:[function(l,n,e){var e=n.exports=function(l){l=l.toLowerCase();var n=e[l];if(!n)throw new Error(l+" is not supported (we accept pull requests)");return new n};e.sha=l("./sha"),e.sha1=l("./sha1"),e.sha224=l("./sha224"),e.sha256=l("./sha256"),e.sha384=l("./sha384"),e.sha512=l("./sha512")},{"./sha":262,"./sha1":263,"./sha224":264,"./sha256":265,"./sha384":266,"./sha512":267}],262:[function(l,n,e){(function(e){function u(){this.init(),this._w=f,s.call(this,64,56)}function t(l){return l<<5|l>>>27}function r(l){return l<<30|l>>>2}function i(l,n,e,u){return 0===l?n&e|~n&u:2===l?n&e|n&u|e&u:n^e^u}var o=l("inherits"),s=l("./hash"),a=[1518500249,1859775393,-1894007588,-899497514],f=new Array(80);o(u,s),u.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},u.prototype._update=function(l){for(var n=this._w,e=0|this._a,u=0|this._b,o=0|this._c,s=0|this._d,f=0|this._e,c=0;c<16;++c)n[c]=l.readInt32BE(4*c);for(;c<80;++c)n[c]=n[c-3]^n[c-8]^n[c-14]^n[c-16];for(var h=0;h<80;++h){var d=~~(h/20),p=t(e)+i(d,u,o,s)+f+n[h]+a[d]|0;f=s,s=o,o=r(u),u=e,e=p}this._a=e+this._a|0,this._b=u+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=f+this._e|0},u.prototype._hash=function(){var l=new e(20);return l.writeInt32BE(0|this._a,0),l.writeInt32BE(0|this._b,4),l.writeInt32BE(0|this._c,8),l.writeInt32BE(0|this._d,12),l.writeInt32BE(0|this._e,16),l},n.exports=u}).call(this,l("buffer").Buffer)},{"./hash":260,buffer:67,inherits:224}],263:[function(l,n,e){(function(e){function u(){this.init(),this._w=c,a.call(this,64,56)}function t(l){return l<<1|l>>>31}function r(l){return l<<5|l>>>27}function i(l){return l<<30|l>>>2}function o(l,n,e,u){return 0===l?n&e|~n&u:2===l?n&e|n&u|e&u:n^e^u}var s=l("inherits"),a=l("./hash"),f=[1518500249,1859775393,-1894007588,-899497514],c=new Array(80);s(u,a),u.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},u.prototype._update=function(l){for(var n=this._w,e=0|this._a,u=0|this._b,s=0|this._c,a=0|this._d,c=0|this._e,h=0;h<16;++h)n[h]=l.readInt32BE(4*h);for(;h<80;++h)n[h]=t(n[h-3]^n[h-8]^n[h-14]^n[h-16]);for(var d=0;d<80;++d){var p=~~(d/20),b=r(e)+o(p,u,s,a)+c+n[d]+f[p]|0;c=a,a=s,s=i(u),u=e,e=b}this._a=e+this._a|0,this._b=u+this._b|0,this._c=s+this._c|0,this._d=a+this._d|0,this._e=c+this._e|0},u.prototype._hash=function(){var l=new e(20);return l.writeInt32BE(0|this._a,0),l.writeInt32BE(0|this._b,4),l.writeInt32BE(0|this._c,8),l.writeInt32BE(0|this._d,12),l.writeInt32BE(0|this._e,16),l},n.exports=u}).call(this,l("buffer").Buffer)},{"./hash":260,buffer:67,inherits:224}],264:[function(l,n,e){(function(e){function u(){this.init(),this._w=o,i.call(this,64,56)}var t=l("inherits"),r=l("./sha256"),i=l("./hash"),o=new Array(64);t(u,r),u.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},u.prototype._hash=function(){var l=new e(28);return l.writeInt32BE(this._a,0),l.writeInt32BE(this._b,4),l.writeInt32BE(this._c,8),l.writeInt32BE(this._d,12),l.writeInt32BE(this._e,16),l.writeInt32BE(this._f,20),l.writeInt32BE(this._g,24),l},n.exports=u}).call(this,l("buffer").Buffer)},{"./hash":260,"./sha256":265,buffer:67,inherits:224}],265:[function(l,n,e){(function(e){function u(){this.init(),this._w=d,c.call(this,64,56)}function t(l,n,e){return e^l&(n^e)}function r(l,n,e){return l&n|e&(l|n)}function i(l){return(l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10)}function o(l){return(l>>>6|l<<26)^(l>>>11|l<<21)^(l>>>25|l<<7)}function s(l){return(l>>>7|l<<25)^(l>>>18|l<<14)^l>>>3}function a(l){return(l>>>17|l<<15)^(l>>>19|l<<13)^l>>>10}var f=l("inherits"),c=l("./hash"),h=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],d=new Array(64);f(u,c),u.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},u.prototype._update=function(l){for(var n=this._w,e=0|this._a,u=0|this._b,f=0|this._c,c=0|this._d,d=0|this._e,p=0|this._f,b=0|this._g,v=0|this._h,_=0;_<16;++_)n[_]=l.readInt32BE(4*_);for(;_<64;++_)n[_]=a(n[_-2])+n[_-7]+s(n[_-15])+n[_-16]|0;for(var y=0;y<64;++y){var m=v+o(d)+t(d,p,b)+h[y]+n[y]|0,g=i(e)+r(e,u,f)|0;v=b,b=p,p=d,d=c+m|0,c=f,f=u,u=e,e=m+g|0}this._a=e+this._a|0,this._b=u+this._b|0,this._c=f+this._c|0,this._d=c+this._d|0,this._e=d+this._e|0,this._f=p+this._f|0,this._g=b+this._g|0,this._h=v+this._h|0},u.prototype._hash=function(){var l=new e(32);return l.writeInt32BE(this._a,0),l.writeInt32BE(this._b,4),l.writeInt32BE(this._c,8),l.writeInt32BE(this._d,12),l.writeInt32BE(this._e,16),l.writeInt32BE(this._f,20),l.writeInt32BE(this._g,24),l.writeInt32BE(this._h,28),l},n.exports=u}).call(this,l("buffer").Buffer)},{"./hash":260,buffer:67,inherits:224}],266:[function(l,n,e){(function(e){function u(){this.init(),this._w=o,i.call(this,128,112)}var t=l("inherits"),r=l("./sha512"),i=l("./hash"),o=new Array(160);t(u,r),u.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},u.prototype._hash=function(){function l(l,e,u){n.writeInt32BE(l,u),n.writeInt32BE(e,u+4)}var n=new e(48);return l(this._ah,this._al,0),l(this._bh,this._bl,8),l(this._ch,this._cl,16),l(this._dh,this._dl,24),l(this._eh,this._el,32),l(this._fh,this._fl,40),n},n.exports=u}).call(this,l("buffer").Buffer)},{"./hash":260,"./sha512":267,buffer:67,inherits:224}],267:[function(l,n,e){(function(e){function u(){this.init(),this._w=v,p.call(this,128,112)}function t(l,n,e){return e^l&(n^e)}function r(l,n,e){return l&n|e&(l|n)}function i(l,n){return(l>>>28|n<<4)^(n>>>2|l<<30)^(n>>>7|l<<25)}function o(l,n){return(l>>>14|n<<18)^(l>>>18|n<<14)^(n>>>9|l<<23)}function s(l,n){return(l>>>1|n<<31)^(l>>>8|n<<24)^l>>>7}function a(l,n){return(l>>>1|n<<31)^(l>>>8|n<<24)^(l>>>7|n<<25)}function f(l,n){return(l>>>19|n<<13)^(n>>>29|l<<3)^l>>>6}function c(l,n){return(l>>>19|n<<13)^(n>>>29|l<<3)^(l>>>6|n<<26)}function h(l,n){return l>>>0>>0?1:0}var d=l("inherits"),p=l("./hash"),b=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],v=new Array(160);d(u,p),u.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},u.prototype._update=function(l){for(var n=this._w,e=0|this._ah,u=0|this._bh,d=0|this._ch,p=0|this._dh,v=0|this._eh,_=0|this._fh,y=0|this._gh,m=0|this._hh,g=0|this._al,w=0|this._bl,k=0|this._cl,E=0|this._dl,S=0|this._el,M=0|this._fl,j=0|this._gl,I=0|this._hl,C=0;C<32;C+=2)n[C]=l.readInt32BE(4*C),n[C+1]=l.readInt32BE(4*C+4);for(;C<160;C+=2){var A=n[C-30],x=n[C-30+1],R=s(A,x),T=a(x,A);A=n[C-4],x=n[C-4+1];var B=f(A,x),O=c(x,A),P=n[C-14],U=n[C-14+1],N=n[C-32],L=n[C-32+1],D=T+U|0,F=R+P+h(D,T)|0;D=D+O|0,F=F+B+h(D,O)|0,D=D+L|0,F=F+N+h(D,L)|0,n[C]=F,n[C+1]=D}for(var q=0;q<160;q+=2){F=n[q],D=n[q+1];var z=r(e,u,d),H=r(g,w,k),K=i(e,g),V=i(g,e),Y=o(v,S),W=o(S,v),X=b[q],G=b[q+1],Z=t(v,_,y),J=t(S,M,j),$=I+W|0,Q=m+Y+h($,I)|0;$=$+J|0,Q=Q+Z+h($,J)|0,$=$+G|0,Q=Q+X+h($,G)|0,$=$+D|0,Q=Q+F+h($,D)|0;var ll=V+H|0,nl=K+z+h(ll,V)|0;m=y,I=j,y=_,j=M,_=v,M=S,S=E+$|0,v=p+Q+h(S,E)|0,p=d,E=k,d=u,k=w,u=e,w=g,g=$+ll|0,e=Q+nl+h(g,$)|0}this._al=this._al+g|0,this._bl=this._bl+w|0,this._cl=this._cl+k|0,this._dl=this._dl+E|0,this._el=this._el+S|0,this._fl=this._fl+M|0,this._gl=this._gl+j|0,this._hl=this._hl+I|0,this._ah=this._ah+e+h(this._al,g)|0,this._bh=this._bh+u+h(this._bl,w)|0,this._ch=this._ch+d+h(this._cl,k)|0,this._dh=this._dh+p+h(this._dl,E)|0,this._eh=this._eh+v+h(this._el,S)|0,this._fh=this._fh+_+h(this._fl,M)|0,this._gh=this._gh+y+h(this._gl,j)|0,this._hh=this._hh+m+h(this._hl,I)|0},u.prototype._hash=function(){function l(l,e,u){n.writeInt32BE(l,u),n.writeInt32BE(e,u+4)}var n=new e(64);return l(this._ah,this._al,0),l(this._bh,this._bl,8),l(this._ch,this._cl,16),l(this._dh,this._dl,24),l(this._eh,this._el,32),l(this._fh,this._fl,40),l(this._gh,this._gl,48),l(this._hh,this._hl,56),n},n.exports=u}).call(this,l("buffer").Buffer)},{"./hash":260,buffer:67,inherits:224}],268:[function(l,n,e){function u(){t.call(this)}n.exports=u;var t=l("events").EventEmitter,r=l("inherits");r(u,t),u.Readable=l("readable-stream/readable.js"),u.Writable=l("readable-stream/writable.js"),u.Duplex=l("readable-stream/duplex.js"),u.Transform=l("readable-stream/transform.js"),u.PassThrough=l("readable-stream/passthrough.js"),u.Stream=u,u.prototype.pipe=function(l,n){function e(n){l.writable&&!1===l.write(n)&&a.pause&&a.pause()}function u(){a.readable&&a.resume&&a.resume()}function r(){f||(f=!0,l.end())}function i(){f||(f=!0,"function"==typeof l.destroy&&l.destroy())}function o(l){if(s(),0===t.listenerCount(this,"error"))throw l}function s(){a.removeListener("data",e),l.removeListener("drain",u),a.removeListener("end",r),a.removeListener("close",i),a.removeListener("error",o),l.removeListener("error",o),a.removeListener("end",s),a.removeListener("close",s),l.removeListener("close",s)}var a=this;a.on("data",e),l.on("drain",u),l._isStdio||n&&n.end===!1||(a.on("end",r),a.on("close",i));var f=!1;return a.on("error",o),l.on("error",o),a.on("end",s),a.on("close",s),l.on("close",s),l.emit("pipe",a),l}},{events:213,inherits:224,"readable-stream/duplex.js":248,"readable-stream/passthrough.js":255,"readable-stream/readable.js":256,"readable-stream/transform.js":257,"readable-stream/writable.js":258}],269:[function(l,n,e){function u(l){if(l&&!s(l))throw new Error("Unknown encoding: "+l)}function t(l){return l.toString(this.encoding)}function r(l){this.charReceived=l.length%2,this.charLength=this.charReceived?2:0}function i(l){this.charReceived=l.length%3,this.charLength=this.charReceived?3:0}var o=l("buffer").Buffer,s=o.isEncoding||function(l){switch(l&&l.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}},a=e.StringDecoder=function(l){switch(this.encoding=(l||"utf8").toLowerCase().replace(/[-_]/,""),u(l),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=r;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=i;break;default:return void(this.write=t)}this.charBuffer=new o(6),this.charReceived=0,this.charLength=0};a.prototype.write=function(l){for(var n="";this.charLength;){var e=l.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:l.length;if(l.copy(this.charBuffer,this.charReceived,0,e),this.charReceived+=e,this.charReceived=55296&&u<=56319)){if(this.charReceived=this.charLength=0,0===l.length)return n;break}this.charLength+=this.surrogateSize,n=""}this.detectIncompleteChar(l);var t=l.length;this.charLength&&(l.copy(this.charBuffer,0,l.length-this.charReceived,t),t-=this.charReceived),n+=l.toString(this.encoding,0,t);var t=n.length-1,u=n.charCodeAt(t);if(u>=55296&&u<=56319){var r=this.surrogateSize;return this.charLength+=r,this.charReceived+=r,this.charBuffer.copy(this.charBuffer,r,0,r),l.copy(this.charBuffer,0,0,r),n.substring(0,t)}return n},a.prototype.detectIncompleteChar=function(l){for(var n=l.length>=3?3:l.length;n>0;n--){var e=l[l.length-n];if(1==n&&e>>5==6){this.charLength=2;break}if(n<=2&&e>>4==14){this.charLength=3;break}if(n<=3&&e>>3==30){this.charLength=4;break}}this.charReceived=n},a.prototype.end=function(l){var n="";if(l&&l.length&&(n=this.write(l)),this.charReceived){var e=this.charReceived,u=this.charBuffer,t=this.encoding;n+=u.slice(0,e).toString(t)}return n}},{buffer:67}],270:[function(l,n,e){(function(l){function e(l,n){function e(){if(!t){if(u("throwDeprecation"))throw new Error(n);u("traceDeprecation")?console.trace(n):console.warn(n),t=!0}return l.apply(this,arguments)}if(u("noDeprecation"))return l;var t=!1;return e}function u(n){try{if(!l.localStorage)return!1}catch(e){return!1}var u=l.localStorage[n];return null!=u&&"true"===String(u).toLowerCase()}n.exports=e}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],271:[function(require,module,exports){function Context(){}var indexOf=require("indexof"),Object_keys=function(l){if(Object.keys)return Object.keys(l);var n=[];for(var e in l)n.push(e);return n},forEach=function(l,n){if(l.forEach)return l.forEach(n);for(var e=0;e57343)t.push(r);else if(56320<=r&&r<=57343)t.push(65533);else if(55296<=r&&r<=56319)if(u===e-1)t.push(65533);else{var i=l.charCodeAt(u+1);if(56320<=i&&i<=57343){var o=1023&r,s=1023&i;t.push(65536+(o<<10)+s),u+=1}else t.push(65533)}u+=1}return t}function r(l){for(var n="",e=0;e>10)+55296,(1023&u)+56320))}return n}function i(l){this.tokens=[].slice.call(l)}function o(l,n){if(l)throw TypeError("Decoder error");return n||65533}function s(l){throw TypeError("The code point "+l+" could not be encoded.")}function a(){}function f(){}function c(l){return l=String(l).trim().toLowerCase(),Object.prototype.hasOwnProperty.call(V,l)?V[l]:null}function h(l,n){return n?n[l]||null:null}function d(l,n){var e=n.indexOf(l);return e===-1?null:e}function p(n){if(!("encoding-indexes"in l))throw Error("Indexes missing. Did you forget to include encoding-indexes.js?");return l["encoding-indexes"][n]}function b(l){if(l>39419&&l<189e3||l>1237575)return null;var n,e=0,u=0,t=p("gb18030");for(n=0;n>6*u)+t];u>0;){var i=e>>6*(u-1);r.push(128|63&i),u-=1}return r}}function S(l,e){var u=e.fatal;this.handler=function(e,t){if(t===z)return H;if(n(t,0,127))return t;var r=l[t-128];return null===r?o(u):r}}function E(l,e){e.fatal;this.handler=function(e,u){if(u===z)return H;if(n(u,0,127))return u;var t=d(u,l);return null===t&&s(u),t+128}}function M(l){var e=l.fatal,u=0,t=0,r=0;this.handler=function(l,i){if(i===z&&0===u&&0===t&&0===r)return H;i!==z||0===u&&0===t&&0===r||(u=0,t=0,r=0,o(e));var s;if(0!==r){s=null,n(i,48,57)&&(s=b(10*(126*(10*(u-129)+(t-48))+(r-129))+i-48));var a=[t,r,i];return u=0,t=0,r=0,null===s?(l.prepend(a),o(e)):s}if(0!==t)return n(i,129,254)?(r=i,null):(l.prepend([t,i]),u=0,t=0,o(e));if(0!==u){if(n(i,48,57))return t=i,null;var f=u,c=null;u=0;var d=i<127?64:65;return(n(i,64,126)||n(i,128,254))&&(c=190*(f-129)+(i-d)),s=null===c?null:h(c,p("gb18030")),null===s&&n(i,0,127)&&l.prepend(i),null===s?o(e):s}return n(i,0,127)?i:128===i?8364:n(i,129,254)?(u=i,null):o(e)}}function I(l,u){l.fatal;this.handler=function(l,t){if(t===z)return H;if(n(t,0,127))return t;if(u&&8364===t)return 128;var r=d(t,p("gb18030"));if(null!==r){var i=e(r,190)+129,o=r%190,a=o<63?64:65;return[i,o+a]}if(u)return s(t);r=v(t);var f=e(e(e(r,10),126),10);r-=10*f*126*10;var c=e(e(r,10),126);r-=10*c*126;var h=e(r,10),b=r-10*h;return[f+129,c+48,h+129,b+48]}}function j(l){var e=l.fatal,u=0;this.handler=function(l,t){if(t===z&&0!==u)return u=0,o(e);if(t===z&&0===u)return H;if(0!==u){var r=u,i=null;u=0;var s=t<127?64:98;switch((n(t,64,126)||n(t,161,254))&&(i=157*(r-129)+(t-s)),i){case 1133:return[202,772];case 1135:return[202,780];case 1164:return[234,772];case 1166:return[234,780]}var a=null===i?null:h(i,p("big5"));return null===a&&n(t,0,127)&&l.prepend(t),null===a?o(e):a}return n(t,0,127)?t:n(t,129,254)?(u=t,null):o(e)}}function A(l){l.fatal;this.handler=function(l,u){if(u===z)return H;if(n(u,0,127))return u;var t=y(u,p("big5"));if(null===t)return s(u);var r=e(t,157)+129;if(r<161)return s(u);var i=t%157,o=i<63?64:98;return[r,i+o]}}function C(l){var e=l.fatal,u=!1,t=0;this.handler=function(l,r){if(r===z&&0!==t)return t=0,o(e);if(r===z&&0===t)return H;if(142===t&&n(r,161,223))return t=0,65377+r-161;if(143===t&&n(r,161,254))return u=!0,t=r,null;if(0!==t){var i=t;t=0;var s=null;return n(i,161,254)&&n(r,161,254)&&(s=h(94*(i-161)+(r-161),p(u?"jis0212":"jis0208"))),u=!1,n(r,161,254)||l.prepend(r),null===s?o(e):s}return n(r,0,127)?r:142===r||143===r||n(r,161,254)?(t=r,null):o(e)}}function x(l){l.fatal;this.handler=function(l,u){if(u===z)return H;if(n(u,0,127))return u;if(165===u)return 92;if(8254===u)return 126;if(n(u,65377,65439))return[142,u-65377+161];8226===u&&(u=65293);var t=d(u,p("jis0208"));if(null===t)return s(u);var r=e(t,94)+161,i=t%94+161;return[r,i]}}function R(l){var e=l.fatal,u={ASCII:0,Roman:1,Katakana:2,LeadByte:3,TrailByte:4,EscapeStart:5,Escape:6},t=u.ASCII,r=u.ASCII,i=0,s=!1;this.handler=function(l,a){switch(t){default:case u.ASCII:return 27===a?(t=u.EscapeStart,null):n(a,0,127)&&14!==a&&15!==a&&27!==a?(s=!1,a):a===z?H:(s=!1,o(e));case u.Roman:return 27===a?(t=u.EscapeStart,null):92===a?(s=!1,165):126===a?(s=!1,8254):n(a,0,127)&&14!==a&&15!==a&&27!==a&&92!==a&&126!==a?(s=!1,a):a===z?H:(s=!1,o(e));case u.Katakana:return 27===a?(t=u.EscapeStart,null):n(a,33,95)?(s=!1,65377+a-33):a===z?H:(s=!1,o(e));case u.LeadByte:return 27===a?(t=u.EscapeStart,null):n(a,33,126)?(s=!1,i=a,t=u.TrailByte,null):a===z?H:(s=!1,o(e));case u.TrailByte:if(27===a)return t=u.EscapeStart,o(e);if(n(a,33,126)){t=u.LeadByte;var f=94*(i-33)+a-33,c=h(f,p("jis0208"));return null===c?o(e):c}return a===z?(t=u.LeadByte,l.prepend(a),o(e)):(t=u.LeadByte,o(e));case u.EscapeStart:return 36===a||40===a?(i=a,t=u.Escape,null):(l.prepend(a),s=!1,t=r,o(e));case u.Escape:var d=i;i=0;var b=null;if(40===d&&66===a&&(b=u.ASCII),40===d&&74===a&&(b=u.Roman),40===d&&73===a&&(b=u.Katakana),36!==d||64!==a&&66!==a||(b=u.LeadByte),null!==b){t=t=b;var v=s;return s=!0,v?o(e):null}return l.prepend([d,a]),s=!1,t=r,o(e)}}}function B(l){var u=(l.fatal,{ASCII:0,Roman:1,jis0208:2}),t=u.ASCII;this.handler=function(l,r){if(r===z&&t!==u.ASCII)return l.prepend(r),[27,40,66];if(r===z&&t===u.ASCII)return H;if(t===u.ASCII&&n(r,0,127))return r;if(t===u.Roman&&n(r,0,127)&&92!==r&&126!==r){if(n(r,0,127))return r;if(165===r)return 92;if(8254===r)return 126}if(n(r,0,127)&&t!==u.ASCII)return l.prepend(r),t=u.ASCII,[27,40,66];if((165===r||8254===r)&&t!==u.Roman)return l.prepend(r),t=u.Roman,[27,40,74];8226===r&&(r=65293);var i=d(r,p("jis0208"));if(null===i)return s(r);if(t!==u.jis0208)return l.prepend(r),t=u.jis0208,[27,36,66];var o=e(i,94)+33,a=i%94+33;return[o,a]}}function T(l){var e=l.fatal,u=0;this.handler=function(l,t){if(t===z&&0!==u)return u=0,o(e);if(t===z&&0===u)return H;if(0!==u){var r=u,i=null;u=0;var s=t<127?64:65,a=r<160?129:193;(n(t,64,126)||n(t,128,252))&&(i=188*(r-a)+t-s);var f=null===i?null:h(i,p("jis0208"));return null===f&&null!==i&&n(i,8836,10528)?57344+i-8836:(null===f&&n(t,0,127)&&l.prepend(t),null===f?o(e):f)}return n(t,0,128)?t:n(t,161,223)?65377+t-161:n(t,129,159)||n(t,224,252)?(u=t,null):o(e)}}function O(l){l.fatal;this.handler=function(l,u){if(u===z)return H;if(n(u,0,128))return u;if(165===u)return 92;if(8254===u)return 126;if(n(u,65377,65439))return u-65377+161;8226===u&&(u=65293);var t=_(u);if(null===t)return s(u);var r=e(t,188),i=r<31?129:193,o=t%188,a=o<63?64:65;return[r+i,o+a]}}function P(l){var e=l.fatal,u=0;this.handler=function(l,t){if(t===z&&0!==u)return u=0,o(e);if(t===z&&0===u)return H;if(0!==u){var r=u,i=null;u=0,n(t,65,254)&&(i=190*(r-129)+(t-65));var s=null===i?null:h(i,p("euc-kr"));return null===i&&n(t,0,127)&&l.prepend(t),null===s?o(e):s}return n(t,0,127)?t:n(t,129,254)?(u=t,null):o(e)}}function U(l){l.fatal;this.handler=function(l,u){if(u===z)return H;if(n(u,0,127))return u;var t=d(u,p("euc-kr"));if(null===t)return s(u);var r=e(t,190)+129,i=t%190+65;return[r,i]}}function N(l,n){var e=l>>8,u=255&l;return n?[e,u]:[u,e]}function L(l,e){var u=e.fatal,t=null,r=null;this.handler=function(e,i){if(i===z&&(null!==t||null!==r))return o(u);if(i===z&&null===t&&null===r)return H;if(null===t)return t=i,null;var s;if(s=l?(t<<8)+i:(i<<8)+t,t=null,null!==r){var a=r;return r=null,n(s,56320,57343)?65536+1024*(a-55296)+(s-56320):(e.prepend(N(s,l)),o(u))}return n(s,55296,56319)?(r=s,null):n(s,56320,57343)?o(u):s}}function D(l,e){e.fatal;this.handler=function(e,u){if(u===z)return H;if(n(u,0,65535))return N(u,l);var t=N((u-65536>>10)+55296,l),r=N((u-65536&1023)+56320,l);return t.concat(r)}}function q(l){l.fatal;this.handler=function(l,e){return e===z?H:n(e,0,127)?e:63360+e-128}}function F(l){l.fatal;this.handler=function(l,e){return e===z?H:n(e,0,127)?e:n(e,63360,63487)?e-63360+128:s(e)}}var z=-1;i.prototype={endOfStream:function(){return!this.tokens.length},read:function(){return this.tokens.length?this.tokens.shift():z},prepend:function(l){if(Array.isArray(l))for(var n=l;n.length;)this.tokens.unshift(n.pop());else this.tokens.unshift(l)},push:function(l){if(Array.isArray(l))for(var n=l;n.length;)this.tokens.push(n.shift());else this.tokens.push(l)}};var H=-1;a.prototype={handler:function(l,n){}},f.prototype={handler:function(l,n){}};var K=[{encodings:[{labels:["unicode-1-1-utf-8","utf-8","utf8"],name:"utf-8"}],heading:"The Encoding"},{encodings:[{labels:["866","cp866","csibm866","ibm866"],name:"ibm866"},{labels:["csisolatin2","iso-8859-2","iso-ir-101","iso8859-2","iso88592","iso_8859-2","iso_8859-2:1987","l2","latin2"],name:"iso-8859-2"},{labels:["csisolatin3","iso-8859-3","iso-ir-109","iso8859-3","iso88593","iso_8859-3","iso_8859-3:1988","l3","latin3"],name:"iso-8859-3"},{labels:["csisolatin4","iso-8859-4","iso-ir-110","iso8859-4","iso88594","iso_8859-4","iso_8859-4:1988","l4","latin4"],name:"iso-8859-4"},{labels:["csisolatincyrillic","cyrillic","iso-8859-5","iso-ir-144","iso8859-5","iso88595","iso_8859-5","iso_8859-5:1988"],name:"iso-8859-5"},{labels:["arabic","asmo-708","csiso88596e","csiso88596i","csisolatinarabic","ecma-114","iso-8859-6","iso-8859-6-e","iso-8859-6-i","iso-ir-127","iso8859-6","iso88596","iso_8859-6","iso_8859-6:1987"],name:"iso-8859-6"},{labels:["csisolatingreek","ecma-118","elot_928","greek","greek8","iso-8859-7","iso-ir-126","iso8859-7","iso88597","iso_8859-7","iso_8859-7:1987","sun_eu_greek"],name:"iso-8859-7"},{labels:["csiso88598e","csisolatinhebrew","hebrew","iso-8859-8","iso-8859-8-e","iso-ir-138","iso8859-8","iso88598","iso_8859-8","iso_8859-8:1988","visual"],name:"iso-8859-8"},{labels:["csiso88598i","iso-8859-8-i","logical"],name:"iso-8859-8-i"},{labels:["csisolatin6","iso-8859-10","iso-ir-157","iso8859-10","iso885910","l6","latin6"],name:"iso-8859-10"},{labels:["iso-8859-13","iso8859-13","iso885913"],name:"iso-8859-13"},{labels:["iso-8859-14","iso8859-14","iso885914"],name:"iso-8859-14"},{labels:["csisolatin9","iso-8859-15","iso8859-15","iso885915","iso_8859-15","l9"],name:"iso-8859-15"},{labels:["iso-8859-16"],name:"iso-8859-16"},{labels:["cskoi8r","koi","koi8","koi8-r","koi8_r"],name:"koi8-r"},{labels:["koi8-ru","koi8-u"],name:"koi8-u"},{labels:["csmacintosh","mac","macintosh","x-mac-roman"],name:"macintosh"},{labels:["dos-874","iso-8859-11","iso8859-11","iso885911","tis-620","windows-874"],name:"windows-874"},{labels:["cp1250","windows-1250","x-cp1250"],name:"windows-1250"},{labels:["cp1251","windows-1251","x-cp1251"],name:"windows-1251"},{labels:["ansi_x3.4-1968","ascii","cp1252","cp819","csisolatin1","ibm819","iso-8859-1","iso-ir-100","iso8859-1","iso88591","iso_8859-1","iso_8859-1:1987","l1","latin1","us-ascii","windows-1252","x-cp1252"],name:"windows-1252"},{labels:["cp1253","windows-1253","x-cp1253"],name:"windows-1253"},{labels:["cp1254","csisolatin5","iso-8859-9","iso-ir-148","iso8859-9","iso88599","iso_8859-9","iso_8859-9:1989","l5","latin5","windows-1254","x-cp1254"],name:"windows-1254"},{labels:["cp1255","windows-1255","x-cp1255"],name:"windows-1255"},{labels:["cp1256","windows-1256","x-cp1256"],name:"windows-1256"},{labels:["cp1257","windows-1257","x-cp1257"],name:"windows-1257"},{labels:["cp1258","windows-1258","x-cp1258"],name:"windows-1258"},{labels:["x-mac-cyrillic","x-mac-ukrainian"],name:"x-mac-cyrillic"}],heading:"Legacy single-byte encodings"},{encodings:[{labels:["chinese","csgb2312","csiso58gb231280","gb2312","gb_2312","gb_2312-80","gbk","iso-ir-58","x-gbk"],name:"gbk"},{labels:["gb18030"],name:"gb18030"}],heading:"Legacy multi-byte Chinese (simplified) encodings"},{encodings:[{labels:["big5","big5-hkscs","cn-big5","csbig5","x-x-big5"],name:"big5"}],heading:"Legacy multi-byte Chinese (traditional) encodings"},{encodings:[{labels:["cseucpkdfmtjapanese","euc-jp","x-euc-jp"],name:"euc-jp"},{labels:["csiso2022jp","iso-2022-jp"],name:"iso-2022-jp"},{labels:["csshiftjis","ms932","ms_kanji","shift-jis","shift_jis","sjis","windows-31j","x-sjis"],name:"shift_jis"}],heading:"Legacy multi-byte Japanese encodings"},{encodings:[{labels:["cseuckr","csksc56011987","euc-kr","iso-ir-149","korean","ks_c_5601-1987","ks_c_5601-1989","ksc5601","ksc_5601","windows-949"],name:"euc-kr"}],heading:"Legacy multi-byte Korean encodings"},{encodings:[{labels:["csiso2022kr","hz-gb-2312","iso-2022-cn","iso-2022-cn-ext","iso-2022-kr"],name:"replacement"},{labels:["utf-16be"],name:"utf-16be"},{labels:["utf-16","utf-16le"],name:"utf-16le"},{labels:["x-user-defined"],name:"x-user-defined"}],heading:"Legacy miscellaneous encodings"}],V={};K.forEach(function(l){l.encodings.forEach(function(l){l.labels.forEach(function(n){V[n]=l})})});var Y={},W={},X="utf-8";m.prototype={decode:function(l,n){var e;e="object"==typeof l&&l instanceof ArrayBuffer?new Uint8Array(l):"object"==typeof l&&"buffer"in l&&l.buffer instanceof ArrayBuffer?new Uint8Array(l.buffer,l.byteOffset,l.byteLength):new Uint8Array(0),n=u(n),this._streaming||(this._decoder=W[this._encoding.name]({fatal:this._fatal}),this._BOMseen=!1),this._streaming=Boolean(n.stream);for(var t,o=new i(e),s=[];!o.endOfStream()&&(t=this._decoder.handler(o,o.read()),t!==H);)null!==t&&(Array.isArray(t)?s.push.apply(s,t):s.push(t));if(!this._streaming){do{if(t=this._decoder.handler(o,o.read()),t===H)break;null!==t&&(Array.isArray(t)?s.push.apply(s,t):s.push(t))}while(!o.endOfStream());this._decoder=null}return s.length&&(["utf-8","utf-16le","utf-16be"].indexOf(this.encoding)===-1||this._ignoreBOM||this._BOMseen||(65279===s[0]?(this._BOMseen=!0, -s.shift()):this._BOMseen=!0)),r(s)}},g.prototype={encode:function(l,n){l=l?String(l):"",n=u(n),this._streaming||(this._encoder=Y[this._encoding.name](this._options)),this._streaming=Boolean(n.stream);for(var e,r=[],o=new i(t(l));!o.endOfStream()&&(e=this._encoder.handler(o,o.read()),e!==H);)Array.isArray(e)?r.push.apply(r,e):r.push(e);if(!this._streaming){for(;;){if(e=this._encoder.handler(o,o.read()),e===H)break;Array.isArray(e)?r.push.apply(r,e):r.push(e)}this._encoder=null}return new Uint8Array(r)}},Y["utf-8"]=function(l){return new k(l)},W["utf-8"]=function(l){return new w(l)},function(){"encoding-indexes"in l&&K.forEach(function(l){"Legacy single-byte encodings"===l.heading&&l.encodings.forEach(function(l){var n=l.name,e=p(n);W[n]=function(l){return new S(e,l)},Y[n]=function(l){return new E(e,l)}})})}(),W.gbk=function(l){return new M(l)},Y.gbk=function(l){return new I(l,(!0))},Y.gb18030=function(l){return new I(l)},W.gb18030=function(l){return new M(l)},Y.big5=function(l){return new A(l)},W.big5=function(l){return new j(l)},Y["euc-jp"]=function(l){return new x(l)},W["euc-jp"]=function(l){return new C(l)},Y["iso-2022-jp"]=function(l){return new B(l)},W["iso-2022-jp"]=function(l){return new R(l)},Y.shift_jis=function(l){return new O(l)},W.shift_jis=function(l){return new T(l)},Y["euc-kr"]=function(l){return new U(l)},W["euc-kr"]=function(l){return new P(l)},Y["utf-16be"]=function(l){return new D((!0),l)},W["utf-16be"]=function(l){return new L((!0),l)},Y["utf-16le"]=function(l){return new D((!1),l)},W["utf-16le"]=function(l){return new L((!1),l)},Y["x-user-defined"]=function(l){return new F(l)},W["x-user-defined"]=function(l){return new q(l)},l.TextEncoder||(l.TextEncoder=g),l.TextDecoder||(l.TextDecoder=m)}(this)},{"./encoding-indexes.js":272}],274:[function(l,n,e){"use strict";function u(l){if(l&&l.__esModule)return l;var n={};if(null!=l)for(var e in l)Object.prototype.hasOwnProperty.call(l,e)&&(n[e]=l[e]);return n["default"]=l,n}Object.defineProperty(e,"__esModule",{value:!0}),e.v1=void 0;var t=l("./v1/index"),r=u(t);e.v1=r,e["default"]=r},{"./v1/index":278}],275:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0}),e.WRITE=e.READ=e.Driver=void 0;var t=l("babel-runtime/core-js/object/get-prototype-of"),r=u(t),i=l("babel-runtime/helpers/possibleConstructorReturn"),o=u(i),s=l("babel-runtime/helpers/get"),a=u(s),f=l("babel-runtime/helpers/inherits"),c=u(f),h=l("babel-runtime/helpers/classCallCheck"),d=u(h),p=l("babel-runtime/helpers/createClass"),b=u(p),v=l("./session"),_=u(v),y=l("./internal/pool"),m=u(y),g=l("./internal/connector"),w=l("./internal/stream-observer"),k=u(w),S=l("./error"),E=l("./internal/connection-providers"),M="READ",I="WRITE",j=function(){function l(n,e){var u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},t=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};(0,d["default"])(this,l),this._url=n,this._userAgent=e,this._openSessions={},this._sessionIdGenerator=0,this._token=u,this._config=t,this._pool=new m["default"](this._createConnection.bind(this),this._destroyConnection.bind(this),l._validateConnection.bind(this),t.connectionPoolSize),this._connectionProvider=this._createConnectionProvider(n,this._pool,this._driverOnErrorCallback.bind(this))}return(0,b["default"])(l,[{key:"_createConnection",value:function(l,n){var e=this._sessionIdGenerator++,u=(0,g.connect)(l,this._config),t=new A(this,u);return u.initialize(this._userAgent,this._token,t),u._id=e,u._release=function(){return n(l,u)},this._openSessions[e]=u,u}},{key:"_destroyConnection",value:function(l){delete this._openSessions[l._id],l.close()}},{key:"session",value:function(n,e){var u=l._validateSessionMode(n);return this._createSession(u,this._connectionProvider,e,this._config)}},{key:"_createConnectionProvider",value:function(l,n,e){return new E.DirectConnectionProvider(l,n,e)}},{key:"_createSession",value:function(l,n,e,u){return new _["default"](l,n,e,u)}},{key:"_driverOnErrorCallback",value:function(l){var n=this.onError;n&&l.code===S.SERVICE_UNAVAILABLE&&n(l)}},{key:"close",value:function(){for(var l in this._openSessions)this._openSessions.hasOwnProperty(l)&&this._openSessions[l].close(),this._pool.purgeAll()}}],[{key:"_validateConnection",value:function(l){return l.isOpen()}},{key:"_validateSessionMode",value:function(l){var n=l||I;if(n!==M&&n!==I)throw(0,S.newError)("Illegal session mode "+n);return n}}]),l}(),A=function(l){function n(l,e){(0,d["default"])(this,n);var u=(0,o["default"])(this,(n.__proto__||(0,r["default"])(n)).call(this));return u._driver=l,u._conn=e,u._hasFailed=!1,u}return(0,c["default"])(n,l),(0,b["default"])(n,[{key:"onError",value:function(l){this._hasFailed||((0,a["default"])(n.prototype.__proto__||(0,r["default"])(n.prototype),"onError",this).call(this,l),this._driver.onError&&this._driver.onError(l),this._hasFailed=!0)}},{key:"onCompleted",value:function(l){this._driver.onCompleted&&this._driver.onCompleted(l),this._conn&&l&&l.server&&this._conn.setServerVersion(l.server)}}]),n}(k["default"]);e.Driver=j,e.READ=M,e.WRITE=I,e["default"]=j},{"./error":276,"./internal/connection-providers":285,"./internal/connector":286,"./internal/pool":291,"./internal/stream-observer":295,"./session":303,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/get":30,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32}],276:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}function t(l){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"N/A";return new v(l,n)}Object.defineProperty(e,"__esModule",{value:!0}),e.PROTOCOL_ERROR=e.SESSION_EXPIRED=e.SERVICE_UNAVAILABLE=e.Neo4jError=e.newError=void 0;var r=l("babel-runtime/core-js/object/get-prototype-of"),i=u(r),o=l("babel-runtime/helpers/classCallCheck"),s=u(o),a=l("babel-runtime/helpers/possibleConstructorReturn"),f=u(a),c=l("babel-runtime/helpers/inherits"),h=u(c),d="ServiceUnavailable",p="SessionExpired",b="ProtocolError",v=function(l){function n(l){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"N/A";(0,s["default"])(this,n);var u=(0,f["default"])(this,(n.__proto__||(0,i["default"])(n)).call(this,l));return u.message=l,u.code=e,u}return(0,h["default"])(n,l),n}(Error);e.newError=t,e.Neo4jError=v,e.SERVICE_UNAVAILABLE=d,e.SESSION_EXPIRED=p,e.PROTOCOL_ERROR=b},{"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32}],277:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0}),e.PathSegment=e.Path=e.UnboundRelationship=e.Relationship=e.Node=void 0;var t=l("babel-runtime/core-js/json/stringify"),r=u(t),i=l("babel-runtime/core-js/object/keys"),o=u(i),s=l("babel-runtime/helpers/classCallCheck"),a=u(s),f=l("babel-runtime/helpers/createClass"),c=u(f),h=function(){function l(n,e,u){(0,a["default"])(this,l),this.identity=n,this.labels=e,this.properties=u}return(0,c["default"])(l,[{key:"toString",value:function(){for(var l="("+this.identity,n=0;n0){l+=" {";for(var u=0;u0&&(l+=","),l+=e[u]+":"+(0,r["default"])(this.properties[e[u]]);l+="}"}return l+=")"}}]),l}(),d=function(){function l(n,e,u,t,r){(0,a["default"])(this,l),this.identity=n,this.start=e,this.end=u,this.type=t,this.properties=r}return(0,c["default"])(l,[{key:"toString",value:function(){var l="("+this.start+")-[:"+this.type,n=(0,o["default"])(this.properties);if(n.length>0){l+=" {";for(var e=0;e0&&(l+=","),l+=n[e]+":"+(0,r["default"])(this.properties[n[e]]);l+="}"}return l+="]->("+this.end+")"}}]),l}(),p=function(){function l(n,e,u){(0,a["default"])(this,l),this.identity=n,this.type=e,this.properties=u}return(0,c["default"])(l,[{key:"bind",value:function(l,n){return new d(this.identity,l,n,this.type,this.properties)}},{key:"toString",value:function(){var l="-[:"+this.type,n=(0,o["default"])(this.properties);if(n.length>0){l+=" {";for(var e=0;e0&&(l+=","),l+=n[e]+":"+(0,r["default"])(this.properties[n[e]]);l+="}"}return l+="]->"}}]),l}(),b=function _(l,n,e){(0,a["default"])(this,_),this.start=l,this.relationship=n,this.end=e},v=function y(l,n,e){(0,a["default"])(this,y),this.start=l,this.end=n,this.segments=e,this.length=e.length};e.Node=h,e.Relationship=d,e.UnboundRelationship=p,e.Path=v,e.PathSegment=b},{"babel-runtime/core-js/json/stringify":16,"babel-runtime/core-js/object/keys":22,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],278:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}function t(l,n){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};(0,g.assertString)(l,"Bolt URL");var u=(0,m.parseScheme)(l);if("bolt+routing://"===u)return new v["default"]((0,m.parseUrl)(l),k,n,e);if("bolt://"===u)return new p.Driver((0,m.parseUrl)(l),k,n,e);throw new Error("Unknown scheme: "+u)}Object.defineProperty(e,"__esModule",{value:!0}),e.error=e.session=e.types=e.auth=e.Neo4jError=e.integer=e.isInt=e["int"]=e.driver=void 0;var r=l("./integer"),i=l("./graph-types"),o=l("./error"),s=l("./result"),a=u(s),f=l("./result-summary"),c=u(f),h=l("./record"),d=u(h),p=l("./driver"),b=l("./routing-driver"),v=u(b),_=l("../version"),y=u(_),m=l("./internal/connector"),g=l("./internal/util"),w={basic:function(l,n){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;return e?{scheme:"basic",principal:l,credentials:n,realm:e}:{scheme:"basic",principal:l,credentials:n}},custom:function(l,n,e,u){var t=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0;return t?{scheme:u,principal:l,credentials:n,realm:e,parameters:t}:{scheme:u,principal:l,credentials:n,realm:e}}},k="neo4j-javascript/"+y["default"],S={Node:i.Node,Relationship:i.Relationship,UnboundRelationship:i.UnboundRelationship,PathSegment:i.PathSegment,Path:i.Path,Result:a["default"],ResultSummary:c["default"],Record:d["default"]},E={READ:p.READ,WRITE:p.WRITE},M={SERVICE_UNAVAILABLE:o.SERVICE_UNAVAILABLE,SESSION_EXPIRED:o.SESSION_EXPIRED,PROTOCOL_ERROR:o.PROTOCOL_ERROR},I={toNumber:r.toNumber,toString:r.toString,inSafeRange:r.inSafeRange},j={driver:t,"int":r["int"],isInt:r.isInt,integer:I,Neo4jError:o.Neo4jError,auth:w,types:S,session:E,error:M};e.driver=t,e["int"]=r["int"],e.isInt=r.isInt,e.integer=I,e.Neo4jError=o.Neo4jError,e.auth=w,e.types=S,e.session=E,e.error=M,e["default"]=j},{"../version":305,"./driver":275,"./error":276,"./graph-types":277,"./integer":279,"./internal/connector":286,"./internal/util":298,"./record":299,"./result":301,"./result-summary":300,"./routing-driver":302}],279:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0}),e.toString=e.toNumber=e.inSafeRange=e.isInt=e["int"]=void 0;var t=l("babel-runtime/helpers/classCallCheck"),r=u(t),i=l("babel-runtime/helpers/createClass"),o=u(i),s=l("./error"),a=function(){function l(n,e){(0,r["default"])(this,l),this.low=0|n,this.high=0|e}return(0,o["default"])(l,[{key:"inSafeRange",value:function(){return this.greaterThanOrEqual(l.MIN_SAFE_VALUE)&&this.lessThanOrEqual(l.MAX_SAFE_VALUE)}},{key:"toInt",value:function(){return this.low}},{key:"toNumber",value:function(){return this.high*h+(this.low>>>0)}},{key:"toString",value:function(n){if(n=n||10,n<2||36>>0,a=s.toString(n);if(e=o,e.isZero())return a+i;for(;a.length<6;)a="0"+a;i=""+a+i}}},{key:"getHighBits",value:function(){return this.high}},{key:"getLowBits",value:function(){return this.low}},{key:"getNumBitsAbs",value:function(){if(this.isNegative())return this.equals(l.MIN_VALUE)?64:this.negate().getNumBitsAbs();for(var n=0!=this.high?this.high:this.low,e=31;e>0&&0==(n&1<=0}},{key:"isOdd",value:function(){return 1===(1&this.low)}},{key:"isEven",value:function(){return 0===(1&this.low)}},{key:"equals",value:function(n){return l.isInteger(n)||(n=l.fromValue(n)),this.high===n.high&&this.low===n.low}},{key:"notEquals",value:function(l){!this.equals(l)}},{key:"lessThan",value:function(l){return this.compare(l)<0}},{key:"lessThanOrEqual",value:function(l){return this.compare(l)<=0}},{key:"greaterThan",value:function(l){return this.compare(l)>0}},{key:"greaterThanOrEqual",value:function(l){return this.compare(l)>=0}},{key:"compare",value:function(n){if(l.isInteger(n)||(n=l.fromValue(n)),this.equals(n))return 0;var e=this.isNegative(),u=n.isNegative();return e&&!u?-1:!e&&u?1:this.subtract(n).isNegative()?-1:1}},{key:"negate",value:function(){return this.equals(l.MIN_VALUE)?l.MIN_VALUE:this.not().add(l.ONE)}},{key:"add",value:function(n){l.isInteger(n)||(n=l.fromValue(n));var e=this.high>>>16,u=65535&this.high,t=this.low>>>16,r=65535&this.low,i=n.high>>>16,o=65535&n.high,s=n.low>>>16,a=65535&n.low,f=0,c=0,h=0,d=0;return d+=r+a,h+=d>>>16,d&=65535,h+=t+s,c+=h>>>16,h&=65535,c+=u+o,f+=c>>>16,c&=65535,f+=e+i,f&=65535,l.fromBits(h<<16|d,f<<16|c)}},{key:"subtract",value:function(n){return l.isInteger(n)||(n=l.fromValue(n)),this.add(n.negate())}},{key:"multiply",value:function(n){if(this.isZero())return l.ZERO;if(l.isInteger(n)||(n=l.fromValue(n)),n.isZero())return l.ZERO;if(this.equals(l.MIN_VALUE))return n.isOdd()?l.MIN_VALUE:l.ZERO;if(n.equals(l.MIN_VALUE))return this.isOdd()?l.MIN_VALUE:l.ZERO;if(this.isNegative())return n.isNegative()?this.negate().multiply(n.negate()):this.negate().multiply(n).negate();if(n.isNegative())return this.multiply(n.negate()).negate();if(this.lessThan(b)&&n.lessThan(b))return l.fromNumber(this.toNumber()*n.toNumber());var e=this.high>>>16,u=65535&this.high,t=this.low>>>16,r=65535&this.low,i=n.high>>>16,o=65535&n.high,s=n.low>>>16,a=65535&n.low,f=0,c=0,h=0,d=0;return d+=r*a,h+=d>>>16,d&=65535,h+=t*a,c+=h>>>16,h&=65535,h+=r*s,c+=h>>>16,h&=65535,c+=u*a,f+=c>>>16,c&=65535,c+=t*s,f+=c>>>16,c&=65535,c+=r*o,f+=c>>>16,c&=65535,f+=e*a+u*s+t*o+r*i,f&=65535,l.fromBits(h<<16|d,f<<16|c)}},{key:"div",value:function(n){if(l.isInteger(n)||(n=l.fromValue(n)),n.isZero())throw(0,s.newError)("division by zero");if(this.isZero())return l.ZERO;var e,u,t;if(this.equals(l.MIN_VALUE)){if(n.equals(l.ONE)||n.equals(l.NEG_ONE))return l.MIN_VALUE;if(n.equals(l.MIN_VALUE))return l.ONE;var r=this.shiftRight(1);return e=r.div(n).shiftLeft(1),e.equals(l.ZERO)?n.isNegative()?l.ONE:l.NEG_ONE:(u=this.subtract(n.multiply(e)),t=e.add(u.div(n)))}if(n.equals(l.MIN_VALUE))return l.ZERO;if(this.isNegative())return n.isNegative()?this.negate().div(n.negate()):this.negate().div(n).negate();if(n.isNegative())return this.div(n.negate()).negate();for(t=l.ZERO,u=this;u.greaterThanOrEqual(n);){e=Math.max(1,Math.floor(u.toNumber()/n.toNumber()));for(var i=Math.ceil(Math.log(e)/Math.LN2),o=i<=48?1:Math.pow(2,i-48),a=l.fromNumber(e),f=a.multiply(n);f.isNegative()||f.greaterThan(u);)e-=o,a=l.fromNumber(e),f=a.multiply(n);a.isZero()&&(a=l.ONE),t=t.add(a),u=u.subtract(f)}return t}},{key:"modulo",value:function(n){return l.isInteger(n)||(n=l.fromValue(n)),this.subtract(this.div(n).multiply(n))}},{key:"not",value:function(){return l.fromBits(~this.low,~this.high)}},{key:"and",value:function(n){return l.isInteger(n)||(n=l.fromValue(n)),l.fromBits(this.low&n.low,this.high&n.high)}},{key:"or",value:function(n){return l.isInteger(n)||(n=l.fromValue(n)),l.fromBits(this.low|n.low,this.high|n.high)}},{key:"xor",value:function(n){return l.isInteger(n)||(n=l.fromValue(n)),l.fromBits(this.low^n.low,this.high^n.high)}},{key:"shiftLeft",value:function(n){return l.isInteger(n)&&(n=n.toInt()),0===(n&=63)?this:n<32?l.fromBits(this.low<>>32-n):l.fromBits(0,this.low<>>n|this.high<<32-n,this.high>>n):l.fromBits(this.high>>n-32,this.high>=0?0:-1)}}]),l}();a.__isInteger__,Object.defineProperty(a.prototype,"__isInteger__",{value:!0,enumerable:!1,configurable:!1}),a.isInteger=function(l){return(l&&l.__isInteger__)===!0};var f={};a.fromInt=function(l){var n,e;return l=0|l,-128<=l&&l<128&&(e=f[l])?e:(n=new a(l,l<0?-1:0,(!1)),-128<=l&&l<128&&(f[l]=n),n)},a.fromNumber=function(l){return isNaN(l)||!isFinite(l)?a.ZERO:l<=-p?a.MIN_VALUE:l+1>=p?a.MAX_VALUE:l<0?a.fromNumber(-l).negate():new a(l%h|0,l/h|0)},a.fromBits=function(l,n){return new a(l,n)},a.fromString=function(l,n){if(0===l.length)throw(0,s.newError)("number format error: empty string");if("NaN"===l||"Infinity"===l||"+Infinity"===l||"-Infinity"===l)return a.ZERO;if(n=n||10,n<2||360)throw(0,s.newError)('number format error: interior "-" character: '+l);if(0===e)return a.fromString(l.substring(1),n).negate();for(var u=a.fromNumber(Math.pow(n,8)),t=a.ZERO,r=0;r>8),this.putUInt8(l+1,255&n)}},{key:"putUInt16",value:function(l,n){this.putUInt8(l,n>>8&255),this.putUInt8(l+1,255&n)}},{key:"putInt32",value:function(l,n){this.putInt8(l,n>>24),this.putUInt8(l+1,n>>16&255),this.putUInt8(l+2,n>>8&255),this.putUInt8(l+3,255&n)}},{key:"putUInt32",value:function(l,n){this.putUInt8(l,n>>24&255),this.putUInt8(l+1,n>>16&255),this.putUInt8(l+2,n>>8&255),this.putUInt8(l+3,255&n)}},{key:"putInt64",value:function(l,n){this.putInt8(l,n>>48),this.putUInt8(l+1,n>>42&255),this.putUInt8(l+2,n>>36&255),this.putUInt8(l+3,n>>30&255),this.putUInt8(l+4,n>>24&255),this.putUInt8(l+5,n>>16&255),this.putUInt8(l+6,n>>8&255),this.putUInt8(l+7,255&n)}},{key:"putBytes",value:function(l,n){for(var e=0,u=n.remaining();e0}},{key:"reset",value:function(){this.position=0}},{key:"toString",value:function(){return this.constructor.name+"( position="+this.position+" )\n "+this.toHex()}},{key:"toHex",value:function(){for(var l="",n=0;n=e.length))return e.getUInt8(l);l-=e.length}}},{key:"getInt8",value:function(l){for(var n=0;n=e.length))return e.getInt8(l);l-=e.length}}},{key:"getFloat64",value:function(l){for(var n=t(8),e=0;e<8;e++)n.putUInt8(e,this.getUInt8(l+e));return n.getFloat64(0)}}]),n}(y),k=function(l){function n(l){(0,p["default"])(this,n);var e=l instanceof _.Buffer?l:new _.Buffer(l),u=(0,f["default"])(this,(n.__proto__||(0,s["default"])(n)).call(this,e.length));return u._buffer=e,u}return(0,h["default"])(n,l),(0,v["default"])(n,[{key:"getUInt8",value:function(l){return this._buffer.readUInt8(l)}},{key:"getInt8",value:function(l){return this._buffer.readInt8(l)}},{key:"getFloat64",value:function(l){return this._buffer.readDoubleBE(l)}},{key:"putUInt8",value:function(l,n){this._buffer.writeUInt8(n,l)}},{key:"putInt8",value:function(l,n){this._buffer.writeInt8(n,l)}},{key:"putFloat64",value:function(l,n){this._buffer.writeDoubleBE(n,l)}},{key:"putBytes",value:function(l,e){if(e instanceof n){var u=Math.min(e.length-e.position,this.length-l);e._buffer.copy(this._buffer,l,e.position,e.position+u),e.position+=u}else(0,i["default"])(n.prototype.__proto__||(0,s["default"])(n.prototype),"putBytes",this).call(this,l,e)}},{key:"getSlice",value:function(l,e){return new n(this._buffer.slice(l,l+e))}}]),n}(y),S=m;try{l.resolve("buffer"),S=k}catch(E){}e.BaseBuffer=y,e.HeapBuffer=m,e.SliceBuffer=g,e.CombinedBuffer=w,e.NodeBuffer=k,e.alloc=t},{"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/get":30,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32,buffer:66}],281:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}function t(){var n=l,e=n("process");return e.env["win32"==e.platform?"USERPROFILE":"HOME"]}function r(l){try{y["default"].mkdirSync(l)}catch(n){if("ENOENT"===n.code)return r(g["default"].dirname(l)),void r(l);if("EEXIST"===n.code)return;throw n}}function i(n,e,u){try{y["default"].accessSync(e)}catch(t){return u(null)}var r=!1;l("readline").createInterface({input:y["default"].createReadStream(e)}).on("line",function(l){!r&&l.startsWith(n)&&(r=!0,u(l.split(" ")[1]))}).on("close",function(){r||u(null)})}function o(l,n,e,u){if(I[l])return u(null);I[l]=1;try{y["default"].accessSync(n)}catch(t){r(g["default"].dirname(n))}y["default"].appendFile(n,l+" "+e+w.EOL,"utf8",function(n){return delete I[l],n&&console.log(n),u(n)})}function s(l,n){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){return null};if(l.encrypted===!1||l.encrypted===S.ENCRYPTION_OFF){var u=p["default"].connect(l.port,l.host,n);return u.on("error",e),u}return j[l.trust]?j[l.trust](l,n,e):void e((0,E.newError)("Unknown trust strategy: "+l.trust+". Please use either trust:'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES' or trust:'TRUST_ALL_CERTIFICATES' in your driver configuration. Alternatively, you can disable encryption by setting `encrypted:\""+S.ENCRYPTION_OFF+'"`. There is no mechanism to use encryption without trust verification, because this incurs the overhead of encryption without improving security. If the driver does not verify that the peer it is connected to is really Neo4j, it is very easy for an attacker to bypass the encryption by pretending to be Neo4j.'))}Object.defineProperty(e,"__esModule",{value:!0});var a=l("babel-runtime/helpers/classCallCheck"),f=u(a),c=l("babel-runtime/helpers/createClass"),h=u(c),d=l("net"),p=u(d),b=l("tls"),v=u(b),_=l("fs"),y=u(_),m=l("path"),g=u(m),w=l("os"),k=l("./buf"),S=l("./util"),E=l("./../error"),M=0,I={},j={TRUST_SIGNED_CERTIFICATES:function(l,n,e){return console.log("`TRUST_SIGNED_CERTIFICATES` has been deprecated as option and will be removed in a future version of the driver. Please use `TRUST_CUSTOM_CA_SIGNED_CERTIFICATES` instead."),j.TRUST_CUSTOM_CA_SIGNED_CERTIFICATES(l,n,e)},TRUST_CUSTOM_CA_SIGNED_CERTIFICATES:function(l,n,e){if(!l.trustedCertificates||0==l.trustedCertificates.length)return void e((0,E.newError)('You are using TRUST_CUSTOM_CA_SIGNED_CERTIFICATES as the method to verify trust for encrypted connections, but have not configured any trustedCertificates. You must specify the path to at least one trusted X.509 certificate for this to work. Two other alternatives is to use TRUST_ALL_CERTIFICATES or to disable encryption by setting encrypted="'+S.ENCRYPTION_OFF+'"in your driver configuration.'));var u={ca:l.trustedCertificates.map(function(l){return y["default"].readFileSync(l)}),rejectUnauthorized:!1},t=v["default"].connect(l.port,l.host,u,function(){t.authorized?n():e((0,E.newError)("Server certificate is not trusted. If you trust the database you are connecting to, add the signing certificate, or the server certificate, to the list of certificates trusted by this driver using `neo4j.v1.driver(.., { trustedCertificates:['path/to/certificate.crt']}). This is a security measure to protect against man-in-the-middle attacks. If you are just trying Neo4j out and are not concerned about encryption, simply disable it using `encrypted=\""+S.ENCRYPTION_OFF+'"` in the driver options. Socket responded with: '+t.authorizationError))});return t.on("error",e),t},TRUST_SYSTEM_CA_SIGNED_CERTIFICATES:function(l,n,e){var u={rejectUnauthorized:!1},t=v["default"].connect(l.port,l.host,u,function(){t.authorized?n():e((0,E.newError)("Server certificate is not trusted. If you trust the database you are connecting to, use TRUST_CUSTOM_CA_SIGNED_CERTIFICATES and add the signing certificate, or the server certificate, to the list of certificates trusted by this driver using `neo4j.v1.driver(.., { trustedCertificates:['path/to/certificate.crt']}). This is a security measure to protect against man-in-the-middle attacks. If you are just trying Neo4j out and are not concerned about encryption, simply disable it using `encrypted=\""+S.ENCRYPTION_OFF+'"` in the driver options. Socket responded with: '+t.authorizationError))});return t.on("error",e),t},TRUST_ON_FIRST_USE:function(n,e,u){console.log("`TRUST_ON_FIRST_USE` has been deprecated as option and will be removed in a future version of the driver. Please use `TRUST_ALL_CERTIFICATES` instead.");var r={rejectUnauthorized:!1},s=v["default"].connect(n.port,n.host,r,function(){var r=s.getPeerCertificate(!0);if(!r.raw)return void u((0,E.newError)('You are using a version of NodeJS that does not support trust-on-first use encryption. You can either upgrade NodeJS to a newer version, use `trust:TRUST_CUSTOM_CA_SIGNED_CERTIFICATES` in your driver config instead, or disable encryption using `encrypted:"'+S.ENCRYPTION_OFF+'"`.'));var a=l("crypto").createHash("sha512").update(r.raw).digest("hex"),f=n.knownHosts||g["default"].join(t(),".neo4j","known_hosts"),c=n.host+":"+n.port;i(c,f,function(l){l===a?e():null==l?o(c,f,a,function(l){return l?u(l):e()}):u((0,E.newError)("Database encryption certificate has changed, and no longer matches the certificate stored for "+c+" in `"+f+"`. As a security precaution, this driver will not automatically trust the new certificate, because doing so would allow an attacker to pretend to be the Neo4j instance we want to connect to. The certificate provided by the server looks like: "+r+". If you trust that this certificate is valid, simply remove the line starting with "+c+" in `"+f+'`, and the driver will update the file with the new certificate. You can configure which file the driver should use to store this information by setting `knownHosts` to another path in your driver configuration - and you can disable encryption there as well using `encrypted:"'+S.ENCRYPTION_OFF+'"`.')); -})});return s.on("error",u),s},TRUST_ALL_CERTIFICATES:function(l,n,e){var u={rejectUnauthorized:!1},t=v["default"].connect(l.port,l.host,u,function(){var l=t.getPeerCertificate();(0,S.isEmptyObjectOrNull)(l)?e((0,E.newError)('Secure connection was successful but server did not return any valid certificates. Such connection can not be trusted. If you are just trying Neo4j out and are not concerned about encryption, simply disable it using `encrypted="'+S.ENCRYPTION_OFF+'"` in the driver options. Socket responded with: '+t.authorizationError)):n()});return t.on("error",e),t}},A=function(){function l(n){(0,f["default"])(this,l);var e=this;this.id=M++,this.available=!0,this._pending=[],this._open=!0,this._error=null,this._handleConnectionError=this._handleConnectionError.bind(this),this._handleConnectionTerminated=this._handleConnectionTerminated.bind(this),this._encrypted=n.encrypted,this._conn=s(n,function(){if(e._open){e._conn.on("data",function(l){e.onmessage&&e.onmessage(new k.NodeBuffer(l))}),e._conn.on("error",e._handleConnectionError),e._conn.on("end",e._handleConnectionTerminated);var l=e._pending;e._pending=null;for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:function(){return null};this._open=!1,this._conn?(this._conn.end(),this._conn.removeListener("end",this._handleConnectionTerminated),this._conn.on("end",l)):l()}}]),l}(),C={channel:A,available:!0};try{l.resolve("net")}catch(x){C={available:!1}}e["default"]=C},{"./../error":276,"./buf":280,"./util":298,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,crypto:185,fs:63,net:63,os:229,path:235,readline:63,tls:63}],282:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0});var t=l("babel-runtime/helpers/classCallCheck"),r=u(t),i=l("babel-runtime/helpers/createClass"),o=u(i),s=l("./buf"),a=l("./../error"),f=l("./util"),c=function(){function l(n){(0,r["default"])(this,l),this._open=!0,this._pending=[],this._error=null,this._handleConnectionError=this._handleConnectionError.bind(this),this._encrypted=n.encrypted;var e="ws";if(n.encrypted===!0||n.encrypted===f.ENCRYPTION_ON){if(n.trust&&"TRUST_CUSTOM_CA_SIGNED_CERTIFICATES"!==n.trust)return void(this._error=(0,a.newError)("The browser version of this driver only supports one trust strategy, 'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES'. "+n.trust+' is not supported. Please either use TRUST_CUSTOM_CA_SIGNED_CERTIFICATES or disable encryption by setting `encrypted:"'+f.ENCRYPTION_OFF+'"` in the driver configuration.'));e="wss"}this._url=e+"://"+n.host+":"+n.port,this._ws=new WebSocket(this._url),this._ws.binaryType="arraybuffer";var u=this;this._ws.onclose=function(l){l.wasClean||u._handleConnectionError()},this._ws.onopen=function(){var l=u._pending;u._pending=null;for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:function(){return null};this._open=!1,this._ws.close(),this._ws.onclose=l}}]),l}(),h="undefined"!=typeof WebSocket,d={channel:c,available:h};e["default"]=d},{"./../error":276,"./buf":280,"./util":298,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],283:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0}),e.Dechunker=e.Chunker=void 0;var t=l("babel-runtime/core-js/object/get-prototype-of"),r=u(t),i=l("babel-runtime/helpers/classCallCheck"),o=u(i),s=l("babel-runtime/helpers/createClass"),a=u(s),f=l("babel-runtime/helpers/possibleConstructorReturn"),c=u(f),h=l("babel-runtime/helpers/inherits"),d=u(h),p=l("./buf"),b=2,v=0,_=1400,y=function(l){function n(l,e){(0,o["default"])(this,n);var u=(0,c["default"])(this,(n.__proto__||(0,r["default"])(n)).call(this,0));return u._bufferSize=e||_,u._ch=l,u._buffer=(0,p.alloc)(u._bufferSize),u._currentChunkStart=0,u._chunkOpen=!1,u}return(0,d["default"])(n,l),(0,a["default"])(n,[{key:"putUInt8",value:function(l,n){this._ensure(1),this._buffer.writeUInt8(n)}},{key:"putInt8",value:function(l,n){this._ensure(1),this._buffer.writeInt8(n)}},{key:"putFloat64",value:function(l,n){this._ensure(8),this._buffer.writeFloat64(n)}},{key:"putBytes",value:function(l,n){for(;n.remaining()>0;)this._ensure(1),this._buffer.remaining()>n.remaining()?this._buffer.writeBytes(n):this._buffer.writeBytes(n.readSlice(this._buffer.remaining()));return this}},{key:"flush",value:function(){if(this._buffer.position>0){this._closeChunkIfOpen();var l=this._buffer;this._buffer=null,this._ch.write(l.getSlice(0,l.position)),this._buffer=(0,p.alloc)(this._bufferSize),this._chunkOpen=!1}return this}},{key:"messageBoundary",value:function(){this._closeChunkIfOpen(),this._buffer.remaining()=2?this._onHeader(l.readUInt16()):(this._partialChunkHeader=l.readUInt8()<<8,this.IN_HEADER)}},{key:"IN_HEADER",value:function(l){return this._onHeader(65535&(this._partialChunkHeader|l.readUInt8()))}},{key:"IN_CHUNK",value:function(l){return this._chunkSize<=l.remaining()?(this._currentMessage.push(l.readSlice(this._chunkSize)),this.AWAITING_CHUNK):(this._chunkSize-=l.remaining(),this._currentMessage.push(l.readSlice(l.remaining())),this.IN_CHUNK)}},{key:"CLOSED",value:function(l){}},{key:"_onHeader",value:function(l){if(0==l){var n=void 0;return n=1==this._currentMessage.length?this._currentMessage[0]:new p.CombinedBuffer(this._currentMessage),this._currentMessage=[],this.onmessage(n),this.AWAITING_CHUNK}return this._chunkSize=l,this.IN_CHUNK}},{key:"write",value:function(l){for(;l.hasRemaining();)this._state=this._state(l)}}]),l}();e.Chunker=y,e.Dechunker=m},{"./buf":280,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32}],284:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0}),e.EMPTY_CONNECTION_HOLDER=void 0;var t=l("babel-runtime/core-js/object/get-prototype-of"),r=u(t),i=l("babel-runtime/helpers/possibleConstructorReturn"),o=u(i),s=l("babel-runtime/helpers/inherits"),a=u(s),f=l("babel-runtime/core-js/promise"),c=u(f),h=l("babel-runtime/helpers/classCallCheck"),d=u(h),p=l("babel-runtime/helpers/createClass"),b=u(p),v=l("../error"),_=function(){function l(n,e){(0,d["default"])(this,l),this._mode=n,this._connectionProvider=e,this._referenceCount=0,this._connectionPromise=c["default"].resolve(null)}return(0,b["default"])(l,[{key:"initializeConnection",value:function(){0===this._referenceCount&&(this._connectionPromise=this._connectionProvider.acquireConnection(this._mode)),this._referenceCount++}},{key:"getConnection",value:function(){return this._connectionPromise}},{key:"releaseConnection",value:function(){return 0===this._referenceCount?this._connectionPromise:(this._referenceCount--,0===this._referenceCount?this._releaseConnection(!0):this._connectionPromise)}},{key:"close",value:function(){return 0===this._referenceCount?this._connectionPromise:(this._referenceCount=0,this._releaseConnection(!1))}},{key:"_releaseConnection",value:function(l){return this._connectionPromise=this._connectionPromise.then(function(n){n&&(l?n.reset():n.resetAsync(),n.sync(),n._release())})["catch"](function(l){}),this._connectionPromise}}]),l}();e["default"]=_;var y=function(l){function n(){return(0,d["default"])(this,n),(0,o["default"])(this,(n.__proto__||(0,r["default"])(n)).apply(this,arguments))}return(0,a["default"])(n,l),(0,b["default"])(n,[{key:"initializeConnection",value:function(){}},{key:"getConnection",value:function(){return c["default"].reject((0,v.newError)("This connection holder does not serve connections"))}},{key:"releaseConnection",value:function(){return c["default"].resolve()}},{key:"close",value:function(){return c["default"].resolve()}}]),n}(_);e.EMPTY_CONNECTION_HOLDER=new y},{"../error":276,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32}],285:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0}),e.SingleConnectionProvider=e.LoadBalancer=e.DirectConnectionProvider=void 0;var t=l("babel-runtime/core-js/promise"),r=u(t),i=l("babel-runtime/core-js/object/get-prototype-of"),o=u(i),s=l("babel-runtime/helpers/possibleConstructorReturn"),a=u(s),f=l("babel-runtime/helpers/inherits"),c=u(f),h=l("babel-runtime/helpers/classCallCheck"),d=u(h),p=l("babel-runtime/helpers/createClass"),b=u(p),v=l("../error"),_=l("../driver"),y=l("../session"),m=u(y),g=l("./round-robin-array"),w=u(g),k=l("./routing-table"),S=u(k),E=l("./rediscovery"),M=u(E),I=l("./features"),j=u(I),A=l("./host-name-resolvers"),C=function(){function l(){(0,d["default"])(this,l)}return(0,b["default"])(l,[{key:"acquireConnection",value:function(l){throw new Error("Abstract function")}},{key:"_withAdditionalOnErrorCallback",value:function(l,n){return l["catch"](function(l){n(l)}),l}}]),l}(),x=(e.DirectConnectionProvider=function(l){function n(l,e,u){(0,d["default"])(this,n);var t=(0,a["default"])(this,(n.__proto__||(0,o["default"])(n)).call(this));return t._address=l,t._connectionPool=e,t._driverOnErrorCallback=u,t}return(0,c["default"])(n,l),(0,b["default"])(n,[{key:"acquireConnection",value:function(l){var n=this._connectionPool.acquire(this._address),e=r["default"].resolve(n);return this._withAdditionalOnErrorCallback(e,this._driverOnErrorCallback)}}]),n}(C),e.LoadBalancer=function(l){function n(l,e,u){(0,d["default"])(this,n);var t=(0,a["default"])(this,(n.__proto__||(0,o["default"])(n)).call(this));return t._seedRouter=l,t._routingTable=new S["default"](new w["default"]([t._seedRouter])),t._rediscovery=new M["default"],t._connectionPool=e,t._driverOnErrorCallback=u,t._hostNameResolver=n._createHostNameResolver(),t}return(0,c["default"])(n,l),(0,b["default"])(n,[{key:"acquireConnection",value:function(l){var n=this,e=this._freshRoutingTable().then(function(e){if(l===_.READ)return n._acquireConnectionToServer(e.readers,"read");if(l===_.WRITE)return n._acquireConnectionToServer(e.writers,"write");throw(0,v.newError)("Illegal mode "+l)});return this._withAdditionalOnErrorCallback(e,this._driverOnErrorCallback)}},{key:"forget",value:function(l){this._routingTable.forget(l),this._connectionPool.purge(l)}},{key:"forgetWriter",value:function(l){this._routingTable.forgetWriter(l)}},{key:"_acquireConnectionToServer",value:function(l,n){var e=l.next();return e?this._connectionPool.acquire(e):r["default"].reject((0,v.newError)("No "+n+" servers available",v.SESSION_EXPIRED))}},{key:"_freshRoutingTable",value:function(){var l=this._routingTable;return l.isStale()?this._refreshRoutingTable(l):r["default"].resolve(l)}},{key:"_refreshRoutingTable",value:function(l){var e=this,u=l.routers.toArray();return this._fetchNewRoutingTable(u,l).then(function(t){if(n._isValidRoutingTable(t))return t;if(!t){var r=u.length-1;n._forgetRouter(l,u,r)}return e._fetchNewRoutingTableUsingSeedRouterAddress(u,e._seedRouter)}).then(function(l){if(n._isValidRoutingTable(l))return e._updateRoutingTable(l),l;throw(0,v.newError)("Could not perform discovery. No routing servers available.",v.SERVICE_UNAVAILABLE)})}},{key:"_fetchNewRoutingTableUsingSeedRouterAddress",value:function(l,n){var e=this;return this._hostNameResolver.resolve(n).then(function(n){var u=n.filter(function(n){return l.indexOf(n)<0});return e._fetchNewRoutingTable(u,null)})}},{key:"_fetchNewRoutingTable",value:function(l,e){var u=this;return l.reduce(function(t,r,i){return t.then(function(t){if(t){if(!t.writers.isEmpty())return t}else{var o=i-1;n._forgetRouter(e,l,o)}var s=u._createSessionForRediscovery(r);return u._rediscovery.lookupRoutingTableOnRouter(s,r)})},r["default"].resolve(null))}},{key:"_createSessionForRediscovery",value:function(l){var n=this._connectionPool.acquire(l),e=r["default"].resolve(n),u=new x(e);return new m["default"](_.READ,u)}},{key:"_updateRoutingTable",value:function(l){var n=this,e=this._routingTable,u=e.serversDiff(l);u.forEach(function(l){return n._connectionPool.purge(l)}),this._routingTable=l}}],[{key:"_isValidRoutingTable",value:function(l){return l&&!l.writers.isEmpty()}},{key:"_forgetRouter",value:function(l,n,e){var u=n[e];l&&u&&l.forgetRouter(u)}},{key:"_createHostNameResolver",value:function(){return(0,j["default"])("dns_lookup")?new A.DnsHostNameResolver:new A.DummyHostNameResolver}}]),n}(C),e.SingleConnectionProvider=function(l){function n(l){(0,d["default"])(this,n);var e=(0,a["default"])(this,(n.__proto__||(0,o["default"])(n)).call(this));return e._connectionPromise=l,e}return(0,c["default"])(n,l),(0,b["default"])(n,[{key:"acquireConnection",value:function(l){var n=this._connectionPromise;return this._connectionPromise=null,n}}]),n}(C))},{"../driver":275,"../error":276,"../session":303,"./features":287,"./host-name-resolvers":289,"./rediscovery":292,"./round-robin-array":293,"./routing-table":294,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32}],286:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}function t(l){var n=l.match(V)[1]||"";return n.toLowerCase()}function r(l){return l.match(V)[2]}function i(l){return l.match(V)[3]}function o(l){return l.match(V)[4]}function s(l,n){if(K){for(var e=2;e1&&void 0!==arguments[1]?arguments[1]:{},e=n.channel||A,u=i(l),t=o(l)||7687,r=u+":"+t;return new X(new e({host:i(l),port:o(l)||7687,encrypted:null==n.encrypted?(0,S["default"])("trust_all_certificates"):n.encrypted,trust:n.trust||((0,S["default"])("trust_all_certificates")?"TRUST_ALL_CERTIFICATES":"TRUST_CUSTOM_CA_SIGNED_CERTIFICATES"),trustedCertificates:n.trustedCertificates||[],knownHosts:n.knownHosts}),r)}Object.defineProperty(e,"__esModule",{value:!0}),e.Connection=e.parsePort=e.parseHost=e.parseUrl=e.parseScheme=e.connect=void 0;var c=l("babel-runtime/helpers/classCallCheck"),h=u(c),d=l("babel-runtime/helpers/createClass"),p=u(d),b=l("babel-runtime/core-js/json/stringify"),v=u(b),_=l("./ch-websocket"),y=u(_),m=l("./ch-node"),g=u(m),w=l("./chunking"),k=l("./features"),S=u(k),E=l("./packstream"),M=l("./buf"),I=l("../graph-types"),j=l("./../error"),A=void 0;if(g["default"].available)A=g["default"].channel;else{if(!y["default"].available)throw(0,j.newError)("Fatal: No compatible transport available. Need to run on a platform with the WebSocket API.");A=y["default"].channel}var C=1,x=14,R=15,B=16,T=47,O=63,P=112,U=113,N=126,L=127,D=78,q=82,F=114,z=80,H=1616949271,K=!1,V=new RegExp(["([^/]+//)?","(([^:/?#]*)","(?::([0-9]+))?)",".*"].join("")),Y={onNext:a,onCompleted:a,onError:a},W={node:function(l,n){return new I.Node(l.unpack(n),l.unpack(n),l.unpack(n))},rel:function(l,n){return new I.Relationship(l.unpack(n),l.unpack(n),l.unpack(n),l.unpack(n),l.unpack(n))},unboundRel:function(l,n){return new I.UnboundRelationship(l.unpack(n),l.unpack(n),l.unpack(n))},path:function(l,n){for(var e=l.unpack(n),u=l.unpack(n),t=l.unpack(n),r=e[0],i=[],o=0;o0?(f=u[s-1],f instanceof I.UnboundRelationship&&(u[s-1]=f=f.bind(r.identity,a.identity))):(f=u[-s-1],f instanceof I.UnboundRelationship&&(u[-s-1]=f=f.bind(a.identity,r.identity))),i.push(new I.PathSegment(r,f,a)),r=a}return new I.Path(e[0],e[e.length-1],i)}},X=function(){function l(n,e){(0,h["default"])(this,l),this.url=e,this.server={address:e},this._pendingObservers=[],this._currentObserver=void 0,this._ch=n,this._dechunker=new w.Dechunker,this._chunker=new w.Chunker(n),this._packer=new E.Packer(this._chunker),this._unpacker=new E.Unpacker,this._isHandlingFailure=!1,this._currentFailure=null,this._isBroken=!1,this._unpacker.structMappers[D]=W.node,this._unpacker.structMappers[q]=W.rel,this._unpacker.structMappers[F]=W.unboundRel,this._unpacker.structMappers[z]=W.path;var u=this;this._ch.onmessage=function(l){var n=l.readInt32();1==n?(u._ch.onmessage=function(l){u._dechunker.write(l)},l.hasRemaining()&&u._dechunker.write(l.readSlice(l.remaining()))):1213486160==n?u._handleFatalError((0,j.newError)("Server responded HTTP. Make sure you are not trying to connect to the http endpoint (HTTP defaults to port 7474 whereas BOLT defaults to port 7687)")):u._handleFatalError((0,j.newError)("Unknown Bolt protocol version: "+n))},this._ch.onerror=this._handleFatalError.bind(this),this._ch._error&&this._handleFatalError(this._ch._error),this._dechunker.onmessage=function(l){u._handleMessage(u._unpacker.unpack(l))};var t=(0,M.alloc)(20);t.writeInt32(H),t.writeInt32(1),t.writeInt32(0),t.writeInt32(0),t.writeInt32(0),t.reset(),this._ch.write(t)}return(0,p["default"])(l,[{key:"_handleFatalError",value:function(l){for(this._isBroken=!0,this._error=l,this._currentObserver&&this._currentObserver.onError&&this._currentObserver.onError(l);this._pendingObservers.length>0;){var n=this._pendingObservers.shift();n&&n.onError&&n.onError(l)}}},{key:"_handleMessage",value:function(l){var n=this,e=l.fields[0];switch(l.signature){case U:s("S","RECORD",l),this._currentObserver.onNext(e);break;case P:s("S","SUCCESS",l);try{this._currentObserver.onCompleted(e)}finally{this._currentObserver=this._pendingObservers.shift()}break;case L:s("S","FAILURE",l);try{this._currentFailure=(0,j.newError)(e.message,e.code),this._currentObserver.onError(this._currentFailure)}finally{this._currentObserver=this._pendingObservers.shift(),this._isHandlingFailure||(this._isHandlingFailure=!0,this._ackFailure({onNext:a,onError:a,onCompleted:function(){n._isHandlingFailure=!1,n._currentFailure=null}}))}break;case N:s("S","IGNORED",l);try{this._currentFailure&&this._currentObserver.onError?this._currentObserver.onError(this._currentFailure):this._currentObserver.onError&&this._currentObserver.onError(e)}finally{this._currentObserver=this._pendingObservers.shift()}break;default:this._handleFatalError((0,j.newError)("Unknown Bolt protocol message: "+l))}}},{key:"initialize",value:function(l,n,e){var u=this;s("C","INIT",l,n),this._queueObserver(e),this._packer.packStruct(C,[this._packable(l),this._packable(n)],function(l){return u._handleFatalError(l)}),this._chunker.messageBoundary(),this.sync()}},{key:"run",value:function(l,n,e){var u=this;s("C","RUN",l,n),this._queueObserver(e),this._packer.packStruct(B,[this._packable(l),this._packable(n)],function(l){return u._handleFatalError(l)}),this._chunker.messageBoundary()}},{key:"pullAll",value:function(l){var n=this;s("C","PULL_ALL"),this._queueObserver(l),this._packer.packStruct(O,[],function(l){return n._handleFatalError(l)}),this._chunker.messageBoundary()}},{key:"discardAll",value:function(l){var n=this;s("C","DISCARD_ALL"),this._queueObserver(l),this._packer.packStruct(T,[],function(l){return n._handleFatalError(l)}),this._chunker.messageBoundary()}},{key:"resetAsync",value:function(l){var n=this;s("C","RESET_ASYNC"),this._isHandlingFailure=!0;var e=this,u={onNext:l?l.onNext:a,onError:l?l.onError:a,onCompleted:function(){e._isHandlingFailure=!1,l&&l.onCompleted()}};this._queueObserver(u),this._packer.packStruct(R,[],function(l){return n._handleFatalError(l)}),this._chunker.messageBoundary()}},{key:"reset",value:function(l){var n=this;s("C","RESET"),this._queueObserver(l),this._packer.packStruct(R,[],function(l){return n._handleFatalError(l)}),this._chunker.messageBoundary()}},{key:"_ackFailure",value:function(l){var n=this;s("C","ACK_FAILURE"),this._queueObserver(l),this._packer.packStruct(x,[],function(l){return n._handleFatalError(l)}),this._chunker.messageBoundary()}},{key:"_queueObserver",value:function(l){return this._isBroken?void(l&&l.onError&&l.onError(this._error)):(l=l||Y,l.onCompleted=l.onCompleted||a,l.onError=l.onError||a,l.onNext=l.onNext||a,void(void 0===this._currentObserver?this._currentObserver=l:this._pendingObservers.push(l)))}},{key:"sync",value:function(){this._chunker.flush()}},{key:"isOpen",value:function(){return!this._isBroken&&this._ch._open}},{key:"isEncrypted",value:function(){return this._ch.isEncrypted()}},{key:"close",value:function(l){this._ch.close(l)}},{key:"_packable",value:function(l){var n=this;return this._packer.packable(l,function(l){return n._handleFatalError(l)})}},{key:"setServerVersion",value:function(l){this.server.version=l}}]),l}();e.connect=f,e.parseScheme=t,e.parseUrl=r,e.parseHost=i,e.parsePort=o,e.Connection=X},{"../graph-types":277,"./../error":276,"./buf":280,"./ch-node":281,"./ch-websocket":282,"./chunking":283,"./features":287,"./packstream":290,"babel-runtime/core-js/json/stringify":16,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],287:[function(l,n,e){"use strict";function u(l){return t[l]&&t[l]()}Object.defineProperty(e,"__esModule",{value:!0});var t={trust_on_first_use:function(){try{var n=l("tls").TLSSocket.prototype.getPeerCertificate,e=n.length;return e>=1}catch(u){return!1}},trust_all_certificates:function(){try{l("tls").TLSSocket.prototype.getPeerCertificate;return!0}catch(n){return!1}},dns_lookup:function(){try{var n=l("dns").lookup;return!(!n||"function"!=typeof n)}catch(e){return!1}}};e["default"]=u},{dns:63,tls:63}],288:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0});var t=l("babel-runtime/core-js/json/stringify"),r=u(t),i=l("babel-runtime/helpers/classCallCheck"),o=u(i),s=l("babel-runtime/helpers/createClass"),a=u(s),f=l("./round-robin-array"),c=u(f),h=l("../error"),d=l("../integer"),p=u(d),b="CALL dbms.cluster.routing.getServers",v="Neo.ClientError.Procedure.ProcedureNotFound",_=function(){function l(){(0,o["default"])(this,l)}return(0,a["default"])(l,[{key:"callGetServers",value:function(l,n){return l.run(b).then(function(n){return l.close(),n.records})["catch"](function(l){if(l.code===v)throw(0,h.newError)("Server "+n+" could not perform routing. Make sure you are connecting to a causal cluster",h.SERVICE_UNAVAILABLE);return null})}},{key:"parseTtl",value:function(l,n){try{var e=(0,d["int"])(Date.now()),u=l.get("ttl").multiply(1e3).add(e);return u.lessThan(e)?p["default"].MAX_VALUE:u}catch(t){throw(0,h.newError)("Unable to parse TTL entry from router "+n+" from record:\n"+(0,r["default"])(l),h.PROTOCOL_ERROR)}}},{key:"parseServers",value:function(l,n){try{var e=l.get("servers"),u=new c["default"],t=new c["default"],i=new c["default"];return e.forEach(function(l){var n=l.role,e=l.addresses;if("ROUTE"===n)u.pushAll(e);else if("WRITE"===n)i.pushAll(e);else{if("READ"!==n)throw(0,h.newError)('Unknown server role "'+n+'"',h.PROTOCOL_ERROR);t.pushAll(e)}}),{routers:u,readers:t,writers:i}}catch(o){throw(0,h.newError)("Unable to parse servers entry from router "+n+" from record:\n"+(0,r["default"])(l),h.PROTOCOL_ERROR)}}}]),l}();e["default"]=_},{"../error":276,"../integer":279,"./round-robin-array":293,"babel-runtime/core-js/json/stringify":16,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],289:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}function t(l){return o["default"].resolve([l])}function r(l,n){var e=l.address;return n?e+":"+n:e}Object.defineProperty(e,"__esModule",{value:!0}),e.DnsHostNameResolver=e.DummyHostNameResolver=void 0;var i=l("babel-runtime/core-js/promise"),o=u(i),s=l("babel-runtime/core-js/object/get-prototype-of"),a=u(s),f=l("babel-runtime/helpers/possibleConstructorReturn"),c=u(f),h=l("babel-runtime/helpers/inherits"),d=u(h),p=l("babel-runtime/helpers/classCallCheck"),b=u(p),v=l("babel-runtime/helpers/createClass"),_=u(v),y=l("./connector"),m=function(){function l(){(0,b["default"])(this,l)}return(0,_["default"])(l,[{key:"resolve",value:function(){throw new Error("Abstract function")}}]),l}();e.DummyHostNameResolver=function(l){function n(){return(0,b["default"])(this,n),(0,c["default"])(this,(n.__proto__||(0,a["default"])(n)).apply(this,arguments))}return(0,d["default"])(n,l),(0,_["default"])(n,[{key:"resolve",value:function(l){return t(l)}}]),n}(m),e.DnsHostNameResolver=function(n){function e(){(0,b["default"])(this,e);var n=(0,c["default"])(this,(e.__proto__||(0,a["default"])(e)).call(this));return n._dns=l("dns"),n}return(0,d["default"])(e,n),(0,_["default"])(e,[{key:"resolve",value:function(l){var n=this,e=(0,y.parseHost)(l),u=(0,y.parsePort)(l);return new o["default"](function(i){n._dns.lookup(e,{all:!0},function(n,e){if(n)i(t(l));else{var o=e.map(function(l){return r(l,u)});i(o)}})})}}]),e}(m)},{"./connector":286,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32,dns:63}],290:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0}),e.Structure=e.Unpacker=e.Packer=void 0;var t=l("babel-runtime/core-js/object/keys"),r=u(t),i=l("babel-runtime/helpers/typeof"),o=u(i),s=l("babel-runtime/helpers/classCallCheck"),a=u(s),f=l("babel-runtime/helpers/createClass"),c=u(f),h=l("./utf8"),d=u(h),p=l("../integer"),b=u(p),v=l("./../error"),_=128,y=144,m=160,g=176,w=192,k=193,S=194,E=195,M=200,I=201,j=202,A=203,C=208,x=209,R=210,B=212,T=213,O=214,P=216,U=217,N=218,L=220,D=221,q=function(){function l(n,e){(0,a["default"])(this,l),this.signature=n,this.fields=e}return(0,c["default"])(l,[{key:"toString",value:function(){for(var l="",n=0;n0&&(l+=", "),l+=this.fields[n];return"Structure("+this.signature+", ["+this.fields+"])"}}]),l}(),F=function(){function l(n){(0,a["default"])(this,l),this._ch=n}return(0,c["default"])(l,[{key:"packable",value:function(l,n){var e=this;if(null===l)return function(){return e._ch.writeUInt8(w)};if(l===!0)return function(){return e._ch.writeUInt8(E)};if(l===!1)return function(){return e._ch.writeUInt8(S)};if("number"==typeof l)return function(){return e.packFloat(l)};if("string"==typeof l)return function(){return e.packString(l,n)};if((0,p.isInt)(l))return function(){return e.packInteger(l)};if(l instanceof Array)return function(){e.packListHeader(l.length,n);for(var u=0;u>0),this._ch.writeUInt8(u%256),this._ch.writeBytes(e)):u<4294967296?(this._ch.writeUInt8(R),this._ch.writeUInt8((u/16777216>>0)%256),this._ch.writeUInt8((u/65536>>0)%256),this._ch.writeUInt8((u/256>>0)%256),this._ch.writeUInt8(u%256),this._ch.writeBytes(e)):n((0,v.newError)("UTF-8 strings of size "+u+" are not supported"))}},{key:"packListHeader",value:function(l,n){l<16?this._ch.writeUInt8(y|l):l<256?(this._ch.writeUInt8(B),this._ch.writeUInt8(l)):l<65536?(this._ch.writeUInt8(T),this._ch.writeUInt8((l/256>>0)%256),this._ch.writeUInt8(l%256)):l<4294967296?(this._ch.writeUInt8(O),this._ch.writeUInt8((l/16777216>>0)%256),this._ch.writeUInt8((l/65536>>0)%256),this._ch.writeUInt8((l/256>>0)%256),this._ch.writeUInt8(l%256)):n((0,v.newError)("Lists of size "+l+" are not supported"))}},{key:"packMapHeader",value:function(l,n){l<16?this._ch.writeUInt8(m|l):l<256?(this._ch.writeUInt8(P),this._ch.writeUInt8(l)):l<65536?(this._ch.writeUInt8(U),this._ch.writeUInt8(l/256>>0),this._ch.writeUInt8(l%256)):l<4294967296?(this._ch.writeUInt8(N),this._ch.writeUInt8((l/16777216>>0)%256),this._ch.writeUInt8((l/65536>>0)%256),this._ch.writeUInt8((l/256>>0)%256),this._ch.writeUInt8(l%256)):n((0,v.newError)("Maps of size "+l+" are not supported"))}},{key:"packStructHeader",value:function(l,n,e){l<16?(this._ch.writeUInt8(g|l), -this._ch.writeUInt8(n)):l<256?(this._ch.writeUInt8(L),this._ch.writeUInt8(l),this._ch.writeUInt8(n)):l<65536?(this._ch.writeUInt8(D),this._ch.writeUInt8(l/256>>0),this._ch.writeUInt8(l%256)):e((0,v.newError)("Structures of size "+l+" are not supported"))}}]),l}(),z=function(){function l(){(0,a["default"])(this,l),this.structMappers={}}return(0,c["default"])(l,[{key:"unpackList",value:function(l,n){for(var e=[],u=0;u=0&&n<128)return(0,p["int"])(n);if(n>=240&&n<256)return(0,p["int"])(n-256);if(n==M)return(0,p["int"])(l.readInt8());if(n==I)return(0,p["int"])(l.readInt16());if(n==j){var e=l.readInt32();return(0,p["int"])(e)}if(n==A){var u=l.readInt32(),t=l.readInt32();return new b["default"](t,u)}if(n==C)return d["default"].decode(l,l.readUInt8());if(n==x)return d["default"].decode(l,l.readUInt16());if(n==R)return d["default"].decode(l,l.readUInt32());if(n==B)return this.unpackList(l.readUInt8(),l);if(n==T)return this.unpackList(l.readUInt16(),l);if(n==O)return this.unpackList(l.readUInt32(),l);if(n==P)return this.unpackMap(l.readUInt8(),l);if(n==U)return this.unpackMap(l.readUInt16(),l);if(n==N)return this.unpackMap(l.readUInt32(),l);if(n==L)return this.unpackStruct(l.readUInt8(),l);if(n==D)return this.unpackStruct(l.readUInt16(),l);var r=240&n,i=15&n;if(128==r)return d["default"].decode(l,i);if(144==r)return this.unpackList(i,l);if(160==r)return this.unpackMap(i,l);if(176==r)return this.unpackStruct(i,l);throw(0,v.newError)("Unknown packed value with marker "+n.toString(16))}}]),l}();e.Packer=F,e.Unpacker=z,e.Structure=q},{"../integer":279,"./../error":276,"./utf8":297,"babel-runtime/core-js/object/keys":22,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/typeof":34}],291:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0});var t=l("babel-runtime/helpers/classCallCheck"),r=u(t),i=l("babel-runtime/helpers/createClass"),o=u(i),s=function(){function l(n){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){return!0},u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){return!0},t=arguments.length>3&&void 0!==arguments[3]?arguments[3]:50;(0,r["default"])(this,l),this._create=n,this._destroy=e,this._validate=u,this._maxIdle=t,this._pools={},this._release=this._release.bind(this)}return(0,o["default"])(l,[{key:"acquire",value:function(l){var n=void 0,e=this._pools[l];for(e||(e=[],this._pools[l]=e);e.length;){if(n=e.pop(),this._validate(n))return n;this._destroy(n)}return this._create(l,this._release)}},{key:"purge",value:function(l){for(var n=void 0,e=this._pools[l]||[];e.length;)n=e.pop(),this._destroy(n);delete this._pools[l]}},{key:"purgeAll",value:function(){for(var l in this._pools.keys)this._pools.hasOwnPropertykey&&this.purge(l)}},{key:"has",value:function(l){return l in this._pools}},{key:"_release",value:function(l,n){var e=this._pools[l];e&&(e.length>=this._maxIdle||!this._validate(n)?this._destroy(n):e.push(n))}}]),l}();e["default"]=s},{"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],292:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0});var t=l("babel-runtime/core-js/json/stringify"),r=u(t),i=l("babel-runtime/helpers/classCallCheck"),o=u(i),s=l("babel-runtime/helpers/createClass"),a=u(s),f=l("./get-servers-util"),c=u(f),h=l("./routing-table"),d=u(h),p=l("../error"),b=function(){function l(n){(0,o["default"])(this,l),this._getServersUtil=n||new c["default"]}return(0,a["default"])(l,[{key:"lookupRoutingTableOnRouter",value:function(n,e){var u=this;return this._getServersUtil.callGetServers(n,e).then(function(n){if(null===n)return null;if(1!==n.length)throw(0,p.newError)('Illegal response from router "'+e+'". Received '+n.length+" records but expected only one.\n"+(0,r["default"])(n),p.PROTOCOL_ERROR);var t=n[0],i=u._getServersUtil.parseTtl(t,e),o=u._getServersUtil.parseServers(t,e),s=o.routers,a=o.readers,f=o.writers;return l._assertNonEmpty(s,"routers",e),l._assertNonEmpty(a,"readers",e),new d["default"](s,a,f,i)})}}],[{key:"_assertNonEmpty",value:function(l,n,e){if(l.isEmpty())throw(0,p.newError)("Received no "+n+" from router "+e,p.PROTOCOL_ERROR)}}]),l}();e["default"]=b},{"../error":276,"./get-servers-util":288,"./routing-table":294,"babel-runtime/core-js/json/stringify":16,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],293:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0});var t=l("babel-runtime/helpers/classCallCheck"),r=u(t),i=l("babel-runtime/helpers/createClass"),o=u(i),s=function(){function l(n){(0,r["default"])(this,l),this._items=n||[],this._offset=0}return(0,o["default"])(l,[{key:"next",value:function(){if(this.isEmpty())return null;var l=this._offset%this.size();return this._offset++,this._items[l]}},{key:"pushAll",value:function(l){if(!Array.isArray(l))throw new TypeError("Array expected but got: "+l);Array.prototype.push.apply(this._items,l)}},{key:"isEmpty",value:function(){return 0===this._items.length}},{key:"size",value:function(){return this._items.length}},{key:"toArray",value:function(){return this._items}},{key:"remove",value:function(l){this._items=this._items.filter(function(n){return n!==l})}}]),l}();e["default"]=s},{"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],294:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0});var t=l("babel-runtime/helpers/toConsumableArray"),r=u(t),i=l("babel-runtime/core-js/array/from"),o=u(i),s=l("babel-runtime/core-js/set"),a=u(s),f=l("babel-runtime/helpers/classCallCheck"),c=u(f),h=l("babel-runtime/helpers/createClass"),d=u(h),p=l("../integer"),b=l("./round-robin-array"),v=u(b),_=1,y=function(){function l(n,e,u,t){(0,c["default"])(this,l),this.routers=n||new v["default"],this.readers=e||new v["default"],this.writers=u||new v["default"],this.expirationTime=t||(0,p["int"])(0)}return(0,d["default"])(l,[{key:"forget",value:function(l){this.readers.remove(l),this.writers.remove(l)}},{key:"forgetRouter",value:function(l){this.routers.remove(l)}},{key:"forgetWriter",value:function(l){this.writers.remove(l)}},{key:"serversDiff",value:function(l){var n=new a["default"](this._allServers()),e=l._allServers();return e.forEach(function(l){return n["delete"](l)}),(0,o["default"])(n)}},{key:"isStale",value:function(){return this.expirationTime.lessThan(Date.now())||this.routers.size()<=_||this.readers.isEmpty()||this.writers.isEmpty()}},{key:"_allServers",value:function(){return[].concat((0,r["default"])(this.routers.toArray()),(0,r["default"])(this.readers.toArray()),(0,r["default"])(this.writers.toArray()))}}]),l}();e["default"]=y},{"../integer":279,"./round-robin-array":293,"babel-runtime/core-js/array/from":15,"babel-runtime/core-js/set":25,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/toConsumableArray":33}],295:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0});var t=l("babel-runtime/helpers/classCallCheck"),r=u(t),i=l("babel-runtime/helpers/createClass"),o=u(i),s=l("../record"),a=u(s),f=function(){function l(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(l){return l};(0,r["default"])(this,l),this._fieldKeys=null,this._fieldLookup=null,this._queuedRecords=[],this._tail=null,this._error=null,this._hasFailed=!1,this._errorTransformer=n,this._observer=null,this._conn=null}return(0,o["default"])(l,[{key:"onNext",value:function(l){var n=new a["default"](this._fieldKeys,l,this._fieldLookup);this._observer?this._observer.onNext(n):this._queuedRecords.push(n)}},{key:"onCompleted",value:function(l){if(null===this._fieldKeys){if(this._fieldKeys=[],this._fieldLookup={},l.fields&&l.fields.length>0){this._fieldKeys=l.fields;for(var n=0;n0)for(var n=0;nthis._maxRetryTimeMs||!l._canRetryOn(u)?i["default"].reject(u):new i["default"](function(l,u){var t=o._computeDelayWithJitter(r),i=setTimeout(function(){o._inFlightTimeoutIds=o._inFlightTimeoutIds.filter(function(l){return l!==i}),o._executeTransactionInsidePromise(n,e,l,u)},t);o._inFlightTimeoutIds.push(i)})["catch"](function(l){var u=r*o._multiplier;return o._retryTransactionPromise(n,e,l,t,u)})}},{key:"_executeTransactionInsidePromise",value:function(l,n,e,u){try{var t=l(),r=n(t),o=i["default"].resolve(r);o.then(function(l){t.isOpen()?t.commit().then(function(){e(l)})["catch"](function(l){u(l)}):e(l)})["catch"](function(l){u(l)})}catch(s){u(s)}}},{key:"_computeDelayWithJitter",value:function(l){var n=l*this._jitterFactor,e=l-n,u=l+n;return Math.random()*(u-e)+e}},{key:"_verifyAfterConstruction",value:function(){if(this._maxRetryTimeMs<0)throw(0,c.newError)("Max retry time should be >= 0: "+this._maxRetryTimeMs);if(this._initialRetryDelayMs<0)throw(0,c.newError)("Initial retry delay should >= 0: "+this._initialRetryDelayMs);if(this._multiplier<1)throw(0,c.newError)("Multiplier should be >= 1.0: "+this._multiplier);if(this._jitterFactor<0||this._jitterFactor>1)throw(0,c.newError)("Jitter factor should be in [0.0, 1.0]: "+this._jitterFactor)}}],[{key:"_canRetryOn",value:function(l){return l&&l.code&&(l.code===c.SERVICE_UNAVAILABLE||l.code===c.SESSION_EXPIRED||this._isTransientError(l))}},{key:"_isTransientError",value:function(l){var n=l.code;return n.indexOf("TransientError")>=0&&("Neo.TransientError.Transaction.Terminated"!==n&&"Neo.TransientError.Transaction.LockClientStopped"!==n)}}]),l}();e["default"]=v},{"../error":276,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],297:[function(l,n,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var u=l("./buf"),t=l("string_decoder"),r=l("./../error"),i={};try{l.resolve("buffer");var o=new t.StringDecoder("utf8"),s=l("buffer");i={encode:function(l){return new u.NodeBuffer(new s.Buffer(l,"UTF-8"))},decode:function(l,n){if(l instanceof u.NodeBuffer){var e=l.position,t=e+n;return l.position=Math.min(t,l.length),l._buffer.toString("utf8",e,t)}if(l instanceof u.CombinedBuffer){var i=d(l,n,function(l){return o.write(l._buffer)},function(){return o.end()});return i}throw(0,r.newError)("Don't know how to decode strings from `"+l+"`.")}}}catch(a){var f=l("../../external/text-encoding/index"),c=new f.TextEncoder("utf-8"),h=new f.TextDecoder("utf-8");i={encode:function(l){return new u.HeapBuffer(c.encode(l).buffer)},decode:function(l,n){if(l instanceof u.HeapBuffer)return h.decode(l.readView(Math.min(n,l.length-l.position)));for(var e=(0,u.alloc)(n),t=0;t=n.length)return r-=n.length,"";n._updatePos(r-n.position);var u=Math.min(n.length-r,t),i=n.readSlice(u);return n._updatePos(u),t=Math.max(t-i.length,0),r=0,l+e(i)},"");return i+u()};e["default"]=i},{"../../external/text-encoding/index":271,"./../error":276,"./buf":280,buffer:66,string_decoder:268}],298:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}function t(l){if(r(l))return!0;if(!i(l))return!1;for(var n in l)if(l.hasOwnProperty(n))return!1;return!0}function r(l){return null===l}function i(l){var n="undefined"==typeof l?"undefined":(0,h["default"])(l);return"function"===n||"object"===n&&Boolean(l)}function o(l,n){if(!s(l))throw new TypeError(n+" expected to be string but was: "+(0,f["default"])(l));return l}function s(l){return"[object String]"===Object.prototype.toString.call(l)}Object.defineProperty(e,"__esModule",{value:!0}),e.ENCRYPTION_OFF=e.ENCRYPTION_ON=e.assertString=e.isEmptyObjectOrNull=void 0;var a=l("babel-runtime/core-js/json/stringify"),f=u(a),c=l("babel-runtime/helpers/typeof"),h=u(c),d="ENCRYPTION_ON",p="ENCRYPTION_OFF";e.isEmptyObjectOrNull=t,e.assertString=o,e.ENCRYPTION_ON=d,e.ENCRYPTION_OFF=p},{"babel-runtime/core-js/json/stringify":16,"babel-runtime/helpers/typeof":34}],299:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}function t(l){var n={};return l.forEach(function(l,e){n[l]=e}),n}Object.defineProperty(e,"__esModule",{value:!0});var r=l("babel-runtime/helpers/classCallCheck"),i=u(r),o=l("babel-runtime/helpers/createClass"),s=u(o),a=l("./error"),f=function(){function l(n,e){var u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;(0,i["default"])(this,l),this.keys=n,this.length=n.length,this._fields=e,this._fieldLookup=u||t(n)}return(0,s["default"])(l,[{key:"forEach",value:function(l){for(var n=0;nthis._fields.length-1||n<0)throw(0,a.newError)("This record has no field with index '"+n+"'. Remember that indexes start at `0`, and make sure your statement returns records in the shape you meant it to.");return this._fields[n]}},{key:"has",value:function(l){return"number"==typeof l?l>=0&&l0}},{key:"nodesCreated",value:function(){return this._stats.nodesCreated}},{key:"nodesDeleted",value:function(){return this._stats.nodesDeleted}},{key:"relationshipsCreated",value:function(){return this._stats.relationshipsCreated}},{key:"relationshipsDeleted",value:function(){return this._stats.relationshipsDeleted}},{key:"propertiesSet",value:function(){return this._stats.propertiesSet}},{key:"labelsAdded",value:function(){return this._stats.labelsAdded}},{key:"labelsRemoved",value:function(){return this._stats.labelsRemoved}},{key:"indexesAdded",value:function(){return this._stats.indexesAdded}},{key:"indexesRemoved",value:function(){return this._stats.indexesRemoved}},{key:"constraintsAdded",value:function(){return this._stats.constraintsAdded}},{key:"constraintsRemoved",value:function(){return this._stats.constraintsRemoved}}]),l}(),b=function(){function l(n){(0,o["default"])(this,l),this.code=n.code,this.title=n.title,this.description=n.description,this.severity=n.severity,this.position=l._constructPosition(n.position)}return(0,a["default"])(l,null,[{key:"_constructPosition",value:function(l){return l?{offset:l.offset.toInt(),line:l.line.toInt(),column:l.column.toInt()}:{}}}]),l}(),v=function g(l){(0,o["default"])(this,g),l&&(this.address=l.address,this.version=l.version)},_={READ_ONLY:"r",READ_WRITE:"rw",WRITE_ONLY:"w",SCHEMA_WRITE:"s"};e.statementType=_,e["default"]=c},{"./integer":279,"babel-runtime/core-js/object/keys":22,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],301:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0});var t=l("babel-runtime/core-js/promise"),r=u(t),i=l("babel-runtime/helpers/classCallCheck"),o=u(i),s=l("babel-runtime/helpers/createClass"),a=u(s),f=l("./result-summary"),c=u(f),h=l("./internal/connection-holder"),d=function(){function l(n,e,u,t,r){(0,o["default"])(this,l),this._streamObserver=n,this._p=null,this._statement=e,this._parameters=u||{},this._metaSupplier=t||function(){return{}},this._connectionHolder=r||h.EMPTY_CONNECTION_HOLDER}return(0,a["default"])(l,[{key:"_createPromise",value:function(){if(!this._p){var l=this;this._p=new r["default"](function(n,e){var u=[],t={onNext:function(l){u.push(l)},onCompleted:function(l){n({records:u,summary:l})},onError:function(l){e(l)}};l.subscribe(t)})}}},{key:"then",value:function(l,n){return this._createPromise(),this._p.then(l,n)}},{key:"catch",value:function(l){return this._createPromise(),this._p["catch"](l)}},{key:"subscribe",value:function(l){var n=this,e=l.onCompleted,u=this,t=function(t){var r=u._metaSupplier();for(var i in r)r.hasOwnProperty(i)&&(t[i]=r[i]);var o=new c["default"](n._statement,n._parameters,t);u._connectionHolder.releaseConnection().then(function(){e.call(l,o)})};l.onCompleted=t;var r=l.onError||function(l){console.log("Uncaught error when processing result: "+l)},i=function(n){u._connectionHolder.releaseConnection().then(function(){r.call(l,n)})};l.onError=i,this._streamObserver.subscribe(l)}}]),l}();e["default"]=d},{"./internal/connection-holder":284,"./result-summary":300,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],302:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0});var t=l("babel-runtime/core-js/object/get-prototype-of"),r=u(t),i=l("babel-runtime/helpers/classCallCheck"),o=u(i),s=l("babel-runtime/helpers/createClass"),a=u(s),f=l("babel-runtime/helpers/possibleConstructorReturn"),c=u(f),h=l("babel-runtime/helpers/inherits"),d=u(h),p=l("./session"),b=u(p),v=l("./driver"),_=l("./error"),y=l("./internal/connection-providers"),m=function(l){function n(l,e){var u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},t=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return(0,o["default"])(this,n),(0,c["default"])(this,(n.__proto__||(0,r["default"])(n)).call(this,l,e,u,n._validateConfig(t)))}return(0,d["default"])(n,l),(0,a["default"])(n,[{key:"_createConnectionProvider",value:function(l,n,e){return new y.LoadBalancer(l,n,e)}},{key:"_createSession",value:function(l,n,e,u){var t=this;return new g(l,n,e,u,function(l,n){if(l.code===_.SERVICE_UNAVAILABLE||l.code===_.SESSION_EXPIRED)return n&&t._connectionProvider.forget(n.url),l;if("Neo.ClientError.Cluster.NotALeader"===l.code){var e="UNKNOWN";return n&&(e=n.url,t._connectionProvider.forgetWriter(n.url)),(0,_.newError)("No longer possible to write to server at "+e,_.SESSION_EXPIRED)}return l})}}],[{key:"_validateConfig",value:function(l){if("TRUST_ON_FIRST_USE"===l.trust)throw(0,_.newError)("The chosen trust mode is not compatible with a routing driver");return l}}]),n}(v.Driver),g=function(l){function n(l,e,u,t,i){(0,o["default"])(this,n);var s=(0,c["default"])(this,(n.__proto__||(0,r["default"])(n)).call(this,l,e,u,t));return s._onFailedConnection=i,s}return(0,d["default"])(n,l),(0,a["default"])(n,[{key:"_onRunFailure",value:function(){return this._onFailedConnection}}]),n}(b["default"]);e["default"]=m},{"./driver":275,"./error":276,"./internal/connection-providers":285,"./session":303,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32}],303:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}function t(l){var n=l&&l.maxTransactionRetryTime?l.maxTransactionRetryTime:null;return new O["default"](n)}Object.defineProperty(e,"__esModule",{value:!0});var r=l("babel-runtime/core-js/object/assign"),i=u(r),o=l("babel-runtime/core-js/object/get-prototype-of"),s=u(o),a=l("babel-runtime/helpers/possibleConstructorReturn"),f=u(a),c=l("babel-runtime/helpers/get"),h=u(c),d=l("babel-runtime/helpers/inherits"),p=u(d),b=l("babel-runtime/helpers/typeof"),v=u(b),_=l("babel-runtime/helpers/classCallCheck"),y=u(_),m=l("babel-runtime/helpers/createClass"),g=u(m),w=l("./internal/stream-observer"),k=u(w),S=l("./result"),E=u(S),M=l("./transaction"),I=u(M),j=l("./error"),A=l("./internal/util"),C=l("./internal/connection-holder"),x=u(C),R=l("./driver"),B=u(R),T=l("./internal/transaction-executor"),O=u(T),P=function(){function l(n,e,u,r){(0,y["default"])(this,l),this._mode=n,this._readConnectionHolder=new x["default"](R.READ,e),this._writeConnectionHolder=new x["default"](R.WRITE,e),this._open=!0,this._hasTx=!1,this._lastBookmark=u,this._transactionExecutor=t(r)}return(0,g["default"])(l,[{key:"run",value:function(l){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};"object"===("undefined"==typeof l?"undefined":(0,v["default"])(l))&&l.text&&(n=l.parameters||{},l=l.text),(0,A.assertString)(l,"Cypher statement");var e=new U(this._onRunFailure()),u=this._connectionHolderWithMode(this._mode);return this._hasTx?e.onError((0,j.newError)("Statements cannot be run directly on a session with an open transaction; either run from within the transaction or use a different session.")):(u.initializeConnection(),u.getConnection().then(function(u){e.resolveConnection(u),u.run(l,n,e),u.pullAll(e),u.sync()})["catch"](function(l){return e.onError(l)})),new E["default"](e,l,n,function(){return e.meta()},u)}},{key:"beginTransaction",value:function(l){return this._beginTransaction(this._mode,l)}},{key:"_beginTransaction",value:function(l,n){var e=this;if(n&&((0,A.assertString)(n,"Bookmark"),this._updateBookmark(n)),this._hasTx)throw(0,j.newError)("You cannot begin a transaction on a session with an open transaction; either run from within the transaction or use a different session.");var u=B["default"]._validateSessionMode(l),t=this._connectionHolderWithMode(u);return t.initializeConnection(),this._hasTx=!0,new I["default"](t,function(){e._hasTx=!1},this._onRunFailure(),this._lastBookmark,this._updateBookmark.bind(this))}},{key:"lastBookmark",value:function(){return this._lastBookmark}},{key:"readTransaction",value:function(l){return this._runTransaction(R.READ,l)}},{key:"writeTransaction",value:function(l){return this._runTransaction(R.WRITE,l)}},{key:"_runTransaction",value:function(l,n){var e=this;return this._transactionExecutor.execute(function(){return e._beginTransaction(l,e.lastBookmark())},n)}},{key:"_updateBookmark",value:function(l){l&&(this._lastBookmark=l)}},{key:"close",value:function(){var l=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return null};this._open?(this._open=!1,this._transactionExecutor.close(),this._readConnectionHolder.close().then(function(){l._writeConnectionHolder.close().then(function(){n()})})):n()}},{key:"_onRunFailure",value:function(){return function(l){return l}}},{key:"_connectionHolderWithMode",value:function(l){if(l===R.READ)return this._readConnectionHolder;if(l===R.WRITE)return this._writeConnectionHolder;throw(0,j.newError)("Unknown access mode: "+l)}}]),l}(),U=function(l){function n(l){(0,y["default"])(this,n);var e=(0,f["default"])(this,(n.__proto__||(0,s["default"])(n)).call(this,l));return e._meta={},e}return(0,p["default"])(n,l),(0,g["default"])(n,[{key:"onCompleted",value:function(l){(0,h["default"])(n.prototype.__proto__||(0,s["default"])(n.prototype),"onCompleted",this).call(this,l);for(var e in l)l.hasOwnProperty(e)&&(this._meta[e]=l[e])}},{key:"meta",value:function(){var l={server:this._conn.server};return(0,i["default"])({},this._meta,l)}}]),n}(k["default"]);e["default"]=P},{"./driver":275,"./error":276,"./internal/connection-holder":284,"./internal/stream-observer":295,"./internal/transaction-executor":296,"./internal/util":298,"./result":301,"./transaction":304,"babel-runtime/core-js/object/assign":17,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/get":30,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32,"babel-runtime/helpers/typeof":34}],304:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}function t(l,n,e){return n.getConnection().then(function(n){e.resolveConnection(n),n.run(l,{},e),n.pullAll(e),n.sync()})["catch"](function(l){return e.onError(l)}),new j["default"](e,l,{},o,n)}function r(l,n,e,u){return new j["default"](l,n,e,u,C.EMPTY_CONNECTION_HOLDER)}function i(l,n,e){return new j["default"](l,n,e,o,C.EMPTY_CONNECTION_HOLDER)}function o(){return{}}Object.defineProperty(e,"__esModule",{value:!0});var s=l("babel-runtime/core-js/object/get-prototype-of"),a=u(s),f=l("babel-runtime/helpers/possibleConstructorReturn"),c=u(f),h=l("babel-runtime/helpers/get"),d=u(h),p=l("babel-runtime/helpers/inherits"),b=u(p),v=l("babel-runtime/core-js/promise"),_=u(v),y=l("babel-runtime/helpers/typeof"),m=u(y),g=l("babel-runtime/helpers/classCallCheck"),w=u(g),k=l("babel-runtime/helpers/createClass"),S=u(k),E=l("./internal/stream-observer"),M=u(E),I=l("./result"),j=u(I),A=l("./internal/util"),C=l("./internal/connection-holder"),x=function(){function l(n,e,u,t,r){(0,w["default"])(this,l),this._connectionHolder=n;var i=new R(this),o={};t&&(o={bookmark:t}),this._connectionHolder.getConnection().then(function(l){i.resolveConnection(l),l.run("BEGIN",o,i),l.pullAll(i)})["catch"](function(l){return i.onError(l)}),this._state=B.ACTIVE,this._onClose=e,this._errorTransformer=u,this._onBookmark=r||function(){}}return(0,S["default"])(l,[{key:"run",value:function(l,n){return"object"===("undefined"==typeof l?"undefined":(0,m["default"])(l))&&l.text&&(n=l.parameters||{},l=l.text),(0,A.assertString)(l,"Cypher statement"),this._state.run(this._connectionHolder,new R(this),l,n)}},{key:"commit",value:function(){var l=this._state.commit(this._connectionHolder,new R(this));return this._state=l.state,this._onClose(),l.result}},{key:"rollback",value:function(){var l=this._state.rollback(this._connectionHolder,new R(this));return this._state=l.state,this._onClose(),l.result}},{key:"isOpen",value:function(){return this._state==B.ACTIVE}},{key:"_onError",value:function(){var l=this;return this.isOpen()?this.rollback()["catch"](function(l){}).then(function(){l._state=B.FAILED}):(this._state=B.FAILED,this._onClose(),_["default"].resolve())}}]),l}(),R=function(l){function n(l){(0,w["default"])(this,n);var e=(0,c["default"])(this,(n.__proto__||(0,a["default"])(n)).call(this,l._errorTransformer||function(l){return l}));return e._tx=l,e._hasFailed=!1,e}return(0,b["default"])(n,l),(0,S["default"])(n,[{key:"onError",value:function(l){var e=this;this._hasFailed||this._tx._onError().then(function(){(0,d["default"])(n.prototype.__proto__||(0,a["default"])(n.prototype),"onError",e).call(e,l),e._hasFailed=!0})}},{key:"onCompleted",value:function(l){(0,d["default"])(n.prototype.__proto__||(0,a["default"])(n.prototype),"onCompleted",this).call(this,l);var e=l.bookmark;this._tx._onBookmark(e)}},{key:"serverMeta",value:function e(){var e={server:this._conn.server};return e}}]),n}(M["default"]),B={ACTIVE:{commit:function(l,n){return{result:t("COMMIT",l,n),state:B.SUCCEEDED}},rollback:function(l,n){return{result:t("ROLLBACK",l,n),state:B.ROLLED_BACK}},run:function(l,n,e,u){return l.getConnection().then(function(l){n.resolveConnection(l),l.run(e,u||{},n),l.pullAll(n),l.sync()})["catch"](function(l){return n.onError(l)}),r(n,e,u,function(){return n.serverMeta()})}},FAILED:{commit:function(l,n){return n.onError({error:"Cannot commit statements in this transaction, because previous statements in the transaction has failed and the transaction has been rolled back. Please start a new transaction to run another statement."}),{result:i(n,"COMMIT",{}),state:B.FAILED}},rollback:function(l,n){return n.onError({error:"Cannot rollback transaction, because previous statements in the transaction has failed and the transaction has already been rolled back." -}),{result:i(n,"ROLLBACK",{}),state:B.FAILED}},run:function(l,n,e,u){return n.onError({error:"Cannot run statement, because previous statements in the transaction has failed and the transaction has already been rolled back."}),i(n,e,u)}},SUCCEEDED:{commit:function(l,n){return n.onError({error:"Cannot commit statements in this transaction, because commit has already been successfully called on the transaction and transaction has been closed. Please start a new transaction to run another statement."}),{result:i(n,"COMMIT",{}),state:B.SUCCEEDED}},rollback:function(l,n){return n.onError({error:"Cannot rollback transaction, because transaction has already been successfully closed."}),{result:i(n,"ROLLBACK",{}),state:B.SUCCEEDED}},run:function(l,n,e,u){return n.onError({error:"Cannot run statement, because transaction has already been successfully closed."}),i(n,e,u)}},ROLLED_BACK:{commit:function(l,n){return n.onError({error:"Cannot commit this transaction, because it has already been rolled back."}),{result:i(n,"COMMIT",{}),state:B.ROLLED_BACK}},rollback:function(l,n){return n.onError({error:"Cannot rollback transaction, because transaction has already been rolled back."}),{result:i(n,"ROLLBACK",{}),state:B.ROLLED_BACK}},run:function(l,n,e,u){return n.onError({error:"Cannot run statement, because transaction has already been rolled back."}),i(n,e,u)}}};e["default"]=x},{"./internal/connection-holder":284,"./internal/stream-observer":295,"./internal/util":298,"./result":301,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/get":30,"babel-runtime/helpers/inherits":31,"babel-runtime/helpers/possibleConstructorReturn":32,"babel-runtime/helpers/typeof":34}],305:[function(l,n,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e["default"]="0.0.0-dev"},{}]},{},[274])(274)}); \ No newline at end of file +ibm866:[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1025,1105,1028,1108,1031,1111,1038,1118,176,8729,183,8730,8470,164,9632,160],"iso-8859-2":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,728,321,164,317,346,167,168,352,350,356,377,173,381,379,176,261,731,322,180,318,347,711,184,353,351,357,378,733,382,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729],"iso-8859-3":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,294,728,163,164,null,292,167,168,304,350,286,308,173,null,379,176,295,178,179,180,181,293,183,184,305,351,287,309,189,null,380,192,193,194,null,196,266,264,199,200,201,202,203,204,205,206,207,null,209,210,211,212,288,214,215,284,217,218,219,220,364,348,223,224,225,226,null,228,267,265,231,232,233,234,235,236,237,238,239,null,241,242,243,244,289,246,247,285,249,250,251,252,365,349,729],"iso-8859-4":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,312,342,164,296,315,167,168,352,274,290,358,173,381,175,176,261,731,343,180,297,316,711,184,353,275,291,359,330,382,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,298,272,325,332,310,212,213,214,215,216,370,218,219,220,360,362,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,299,273,326,333,311,244,245,246,247,248,371,250,251,252,361,363,729],"iso-8859-5":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,173,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8470,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,167,1118,1119],"iso-8859-6":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,null,null,164,null,null,null,null,null,null,null,1548,173,null,null,null,null,null,null,null,null,null,null,null,null,null,1563,null,null,null,1567,null,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,null,null,null,null,null,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,null,null,null,null,null,null,null,null,null,null,null,null,null],"iso-8859-7":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8216,8217,163,8364,8367,166,167,168,169,890,171,172,173,null,8213,176,177,178,179,900,901,902,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null],"iso-8859-8":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,162,163,164,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8215,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null],"iso-8859-10":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,274,290,298,296,310,167,315,272,352,358,381,173,362,330,176,261,275,291,299,297,311,183,316,273,353,359,382,8213,363,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,207,208,325,332,211,212,213,214,360,216,370,218,219,220,221,222,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,239,240,326,333,243,244,245,246,361,248,371,250,251,252,253,254,312],"iso-8859-13":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8221,162,163,164,8222,166,167,216,169,342,171,172,173,174,198,176,177,178,179,8220,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,8217],"iso-8859-14":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,7682,7683,163,266,267,7690,167,7808,169,7810,7691,7922,173,174,376,7710,7711,288,289,7744,7745,182,7766,7809,7767,7811,7776,7923,7812,7813,7777,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,372,209,210,211,212,213,214,7786,216,217,218,219,220,221,374,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,373,241,242,243,244,245,246,7787,248,249,250,251,252,253,375,255],"iso-8859-15":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,8364,165,352,167,353,169,170,171,172,173,174,175,176,177,178,179,381,181,182,183,382,185,186,187,338,339,376,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255],"iso-8859-16":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,261,321,8364,8222,352,167,353,169,536,171,377,173,378,379,176,177,268,322,381,8221,182,183,382,269,537,187,338,339,376,380,192,193,194,258,196,262,198,199,200,201,202,203,204,205,206,207,272,323,210,211,212,336,214,346,368,217,218,219,220,280,538,223,224,225,226,259,228,263,230,231,232,233,234,235,236,237,238,239,273,324,242,243,244,337,246,347,369,249,250,251,252,281,539,255],"koi8-r":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,1025,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066],"koi8-u":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,1108,9556,1110,1111,9559,9560,9561,9562,9563,1169,1118,9566,9567,9568,9569,1025,1028,9571,1030,1031,9574,9575,9576,9577,9578,1168,1038,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066],macintosh:[196,197,199,201,209,214,220,225,224,226,228,227,229,231,233,232,234,235,237,236,238,239,241,243,242,244,246,245,250,249,251,252,8224,176,162,163,167,8226,182,223,174,169,8482,180,168,8800,198,216,8734,177,8804,8805,165,181,8706,8721,8719,960,8747,170,186,937,230,248,191,161,172,8730,402,8776,8710,171,187,8230,160,192,195,213,338,339,8211,8212,8220,8221,8216,8217,247,9674,255,376,8260,8364,8249,8250,64257,64258,8225,183,8218,8222,8240,194,202,193,203,200,205,206,207,204,211,212,63743,210,218,219,217,305,710,732,175,728,729,730,184,733,731,711],"windows-874":[8364,129,130,131,132,8230,134,135,136,137,138,139,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,153,154,155,156,157,158,159,160,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,null,null,null,null,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,null,null,null,null],"windows-1250":[8364,129,8218,131,8222,8230,8224,8225,136,8240,352,8249,346,356,381,377,144,8216,8217,8220,8221,8226,8211,8212,152,8482,353,8250,347,357,382,378,160,711,728,321,164,260,166,167,168,169,350,171,172,173,174,379,176,177,731,322,180,181,182,183,184,261,351,187,317,733,318,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729],"windows-1251":[1026,1027,8218,1107,8222,8230,8224,8225,8364,8240,1033,8249,1034,1036,1035,1039,1106,8216,8217,8220,8221,8226,8211,8212,152,8482,1113,8250,1114,1116,1115,1119,160,1038,1118,1032,164,1168,166,167,1025,169,1028,171,172,173,174,1031,176,177,1030,1110,1169,181,182,183,1105,8470,1108,187,1112,1029,1109,1111,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103],"windows-1252":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255],"windows-1253":[8364,129,8218,402,8222,8230,8224,8225,136,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,157,158,159,160,901,902,163,164,165,166,167,168,169,null,171,172,173,174,8213,176,177,178,179,900,181,182,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null],"windows-1254":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,286,209,210,211,212,213,214,215,216,217,218,219,220,304,350,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,287,241,242,243,244,245,246,247,248,249,250,251,252,305,351,255],"windows-1255":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,156,157,158,159,160,161,162,163,8362,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,191,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,null,1467,1468,1469,1470,1471,1472,1473,1474,1475,1520,1521,1522,1523,1524,null,null,null,null,null,null,null,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null],"windows-1256":[8364,1662,8218,402,8222,8230,8224,8225,710,8240,1657,8249,338,1670,1688,1672,1711,8216,8217,8220,8221,8226,8211,8212,1705,8482,1681,8250,339,8204,8205,1722,160,1548,162,163,164,165,166,167,168,169,1726,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,1563,187,188,189,190,1567,1729,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,215,1591,1592,1593,1594,1600,1601,1602,1603,224,1604,226,1605,1606,1607,1608,231,232,233,234,235,1609,1610,238,239,1611,1612,1613,1614,244,1615,1616,247,1617,249,1618,251,252,8206,8207,1746],"windows-1257":[8364,129,8218,131,8222,8230,8224,8225,136,8240,138,8249,140,168,711,184,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,175,731,159,160,null,162,163,164,null,166,167,216,169,342,171,172,173,174,198,176,177,178,179,180,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,729],"windows-1258":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,258,196,197,198,199,200,201,202,203,768,205,206,207,272,209,777,211,212,416,214,215,216,217,218,219,220,431,771,223,224,225,226,259,228,229,230,231,232,233,234,235,769,237,238,239,273,241,803,243,244,417,246,247,248,249,250,251,252,432,8363,255],"x-mac-cyrillic":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,8224,176,1168,163,167,8226,182,1030,174,169,8482,1026,1106,8800,1027,1107,8734,177,8804,8805,1110,181,1169,1032,1028,1108,1031,1111,1033,1113,1034,1114,1112,1029,172,8730,402,8776,8710,171,187,8230,160,1035,1115,1036,1116,1109,8211,8212,8220,8221,8216,8217,247,8222,1038,1118,1039,1119,8470,1025,1105,1103,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,8364]}}(this)},{}],274:[function(l,n,e){"undefined"!=typeof n&&n.exports&&(this["encoding-indexes"]=l("./encoding-indexes.js")["encoding-indexes"]),function(l){"use strict";function n(l,n,e){return n<=l&&l<=e}function e(l,n){return Math.floor(l/n)}function u(l){if(void 0===l)return{};if(l===Object(l))return l;throw TypeError("Could not convert argument to dictionary")}function t(l){for(var n=String(l),e=n.length,u=0,t=[];u57343)t.push(r);else if(56320<=r&&r<=57343)t.push(65533);else if(55296<=r&&r<=56319)if(u===e-1)t.push(65533);else{var i=l.charCodeAt(u+1);if(56320<=i&&i<=57343){var o=1023&r,s=1023&i;t.push(65536+(o<<10)+s),u+=1}else t.push(65533)}u+=1}return t}function r(l){for(var n="",e=0;e>10)+55296,(1023&u)+56320))}return n}function i(l){this.tokens=[].slice.call(l)}function o(l,n){if(l)throw TypeError("Decoder error");return n||65533}function s(l){throw TypeError("The code point "+l+" could not be encoded.")}function a(){}function f(){}function c(l){return l=String(l).trim().toLowerCase(),Object.prototype.hasOwnProperty.call(V,l)?V[l]:null}function h(l,n){return n?n[l]||null:null}function d(l,n){var e=n.indexOf(l);return e===-1?null:e}function p(n){if(!("encoding-indexes"in l))throw Error("Indexes missing. Did you forget to include encoding-indexes.js?");return l["encoding-indexes"][n]}function b(l){if(l>39419&&l<189e3||l>1237575)return null;var n,e=0,u=0,t=p("gb18030");for(n=0;n>6*u)+t];u>0;){var i=e>>6*(u-1);r.push(128|63&i),u-=1}return r}}function E(l,e){var u=e.fatal;this.handler=function(e,t){if(t===z)return H;if(n(t,0,127))return t;var r=l[t-128];return null===r?o(u):r}}function S(l,e){e.fatal;this.handler=function(e,u){if(u===z)return H;if(n(u,0,127))return u;var t=d(u,l);return null===t&&s(u),t+128}}function M(l){var e=l.fatal,u=0,t=0,r=0;this.handler=function(l,i){if(i===z&&0===u&&0===t&&0===r)return H;i!==z||0===u&&0===t&&0===r||(u=0,t=0,r=0,o(e));var s;if(0!==r){s=null,n(i,48,57)&&(s=b(10*(126*(10*(u-129)+(t-48))+(r-129))+i-48));var a=[t,r,i];return u=0,t=0,r=0,null===s?(l.prepend(a),o(e)):s}if(0!==t)return n(i,129,254)?(r=i,null):(l.prepend([t,i]),u=0,t=0,o(e));if(0!==u){if(n(i,48,57))return t=i,null;var f=u,c=null;u=0;var d=i<127?64:65;return(n(i,64,126)||n(i,128,254))&&(c=190*(f-129)+(i-d)),s=null===c?null:h(c,p("gb18030")),null===s&&n(i,0,127)&&l.prepend(i),null===s?o(e):s}return n(i,0,127)?i:128===i?8364:n(i,129,254)?(u=i,null):o(e)}}function j(l,u){l.fatal;this.handler=function(l,t){if(t===z)return H;if(n(t,0,127))return t;if(u&&8364===t)return 128;var r=d(t,p("gb18030"));if(null!==r){var i=e(r,190)+129,o=r%190,a=o<63?64:65;return[i,o+a]}if(u)return s(t);r=v(t);var f=e(e(e(r,10),126),10);r-=10*f*126*10;var c=e(e(r,10),126);r-=10*c*126;var h=e(r,10),b=r-10*h;return[f+129,c+48,h+129,b+48]}}function I(l){var e=l.fatal,u=0;this.handler=function(l,t){if(t===z&&0!==u)return u=0,o(e);if(t===z&&0===u)return H;if(0!==u){var r=u,i=null;u=0;var s=t<127?64:98;switch((n(t,64,126)||n(t,161,254))&&(i=157*(r-129)+(t-s)),i){case 1133:return[202,772];case 1135:return[202,780];case 1164:return[234,772];case 1166:return[234,780]}var a=null===i?null:h(i,p("big5"));return null===a&&n(t,0,127)&&l.prepend(t),null===a?o(e):a}return n(t,0,127)?t:n(t,129,254)?(u=t,null):o(e)}}function C(l){l.fatal;this.handler=function(l,u){if(u===z)return H;if(n(u,0,127))return u;var t=y(u,p("big5"));if(null===t)return s(u);var r=e(t,157)+129;if(r<161)return s(u);var i=t%157,o=i<63?64:98;return[r,i+o]}}function A(l){var e=l.fatal,u=!1,t=0;this.handler=function(l,r){if(r===z&&0!==t)return t=0,o(e);if(r===z&&0===t)return H;if(142===t&&n(r,161,223))return t=0,65377+r-161;if(143===t&&n(r,161,254))return u=!0,t=r,null;if(0!==t){var i=t;t=0;var s=null;return n(i,161,254)&&n(r,161,254)&&(s=h(94*(i-161)+(r-161),p(u?"jis0212":"jis0208"))),u=!1,n(r,161,254)||l.prepend(r),null===s?o(e):s}return n(r,0,127)?r:142===r||143===r||n(r,161,254)?(t=r,null):o(e)}}function x(l){l.fatal;this.handler=function(l,u){if(u===z)return H;if(n(u,0,127))return u;if(165===u)return 92;if(8254===u)return 126;if(n(u,65377,65439))return[142,u-65377+161];8226===u&&(u=65293);var t=d(u,p("jis0208"));if(null===t)return s(u);var r=e(t,94)+161,i=t%94+161;return[r,i]}}function R(l){var e=l.fatal,u={ASCII:0,Roman:1,Katakana:2,LeadByte:3,TrailByte:4,EscapeStart:5,Escape:6},t=u.ASCII,r=u.ASCII,i=0,s=!1;this.handler=function(l,a){switch(t){default:case u.ASCII:return 27===a?(t=u.EscapeStart,null):n(a,0,127)&&14!==a&&15!==a&&27!==a?(s=!1,a):a===z?H:(s=!1,o(e));case u.Roman:return 27===a?(t=u.EscapeStart,null):92===a?(s=!1,165):126===a?(s=!1,8254):n(a,0,127)&&14!==a&&15!==a&&27!==a&&92!==a&&126!==a?(s=!1,a):a===z?H:(s=!1,o(e));case u.Katakana:return 27===a?(t=u.EscapeStart,null):n(a,33,95)?(s=!1,65377+a-33):a===z?H:(s=!1,o(e));case u.LeadByte:return 27===a?(t=u.EscapeStart,null):n(a,33,126)?(s=!1,i=a,t=u.TrailByte,null):a===z?H:(s=!1,o(e));case u.TrailByte:if(27===a)return t=u.EscapeStart,o(e);if(n(a,33,126)){t=u.LeadByte;var f=94*(i-33)+a-33,c=h(f,p("jis0208"));return null===c?o(e):c}return a===z?(t=u.LeadByte,l.prepend(a),o(e)):(t=u.LeadByte,o(e));case u.EscapeStart:return 36===a||40===a?(i=a,t=u.Escape,null):(l.prepend(a),s=!1,t=r,o(e));case u.Escape:var d=i;i=0;var b=null;if(40===d&&66===a&&(b=u.ASCII),40===d&&74===a&&(b=u.Roman),40===d&&73===a&&(b=u.Katakana),36!==d||64!==a&&66!==a||(b=u.LeadByte),null!==b){t=t=b;var v=s;return s=!0,v?o(e):null}return l.prepend([d,a]),s=!1,t=r,o(e)}}}function T(l){var u=(l.fatal,{ASCII:0,Roman:1,jis0208:2}),t=u.ASCII;this.handler=function(l,r){if(r===z&&t!==u.ASCII)return l.prepend(r),[27,40,66];if(r===z&&t===u.ASCII)return H;if(t===u.ASCII&&n(r,0,127))return r;if(t===u.Roman&&n(r,0,127)&&92!==r&&126!==r){if(n(r,0,127))return r;if(165===r)return 92;if(8254===r)return 126}if(n(r,0,127)&&t!==u.ASCII)return l.prepend(r),t=u.ASCII,[27,40,66];if((165===r||8254===r)&&t!==u.Roman)return l.prepend(r),t=u.Roman,[27,40,74];8226===r&&(r=65293);var i=d(r,p("jis0208"));if(null===i)return s(r);if(t!==u.jis0208)return l.prepend(r),t=u.jis0208,[27,36,66];var o=e(i,94)+33,a=i%94+33;return[o,a]}}function B(l){var e=l.fatal,u=0;this.handler=function(l,t){if(t===z&&0!==u)return u=0,o(e);if(t===z&&0===u)return H;if(0!==u){var r=u,i=null;u=0;var s=t<127?64:65,a=r<160?129:193;(n(t,64,126)||n(t,128,252))&&(i=188*(r-a)+t-s);var f=null===i?null:h(i,p("jis0208"));return null===f&&null!==i&&n(i,8836,10528)?57344+i-8836:(null===f&&n(t,0,127)&&l.prepend(t),null===f?o(e):f)}return n(t,0,128)?t:n(t,161,223)?65377+t-161:n(t,129,159)||n(t,224,252)?(u=t,null):o(e)}}function O(l){l.fatal;this.handler=function(l,u){if(u===z)return H;if(n(u,0,128))return u;if(165===u)return 92;if(8254===u)return 126;if(n(u,65377,65439))return u-65377+161;8226===u&&(u=65293);var t=_(u);if(null===t)return s(u);var r=e(t,188),i=r<31?129:193,o=t%188,a=o<63?64:65;return[r+i,o+a]}}function P(l){var e=l.fatal,u=0;this.handler=function(l,t){if(t===z&&0!==u)return u=0,o(e);if(t===z&&0===u)return H;if(0!==u){var r=u,i=null;u=0,n(t,65,254)&&(i=190*(r-129)+(t-65));var s=null===i?null:h(i,p("euc-kr"));return null===i&&n(t,0,127)&&l.prepend(t),null===s?o(e):s}return n(t,0,127)?t:n(t,129,254)?(u=t,null):o(e)}}function U(l){l.fatal;this.handler=function(l,u){if(u===z)return H;if(n(u,0,127))return u;var t=d(u,p("euc-kr"));if(null===t)return s(u);var r=e(t,190)+129,i=t%190+65;return[r,i]}}function N(l,n){var e=l>>8,u=255&l;return n?[e,u]:[u,e]}function L(l,e){var u=e.fatal,t=null,r=null;this.handler=function(e,i){if(i===z&&(null!==t||null!==r))return o(u);if(i===z&&null===t&&null===r)return H;if(null===t)return t=i,null;var s;if(s=l?(t<<8)+i:(i<<8)+t,t=null,null!==r){var a=r;return r=null,n(s,56320,57343)?65536+1024*(a-55296)+(s-56320):(e.prepend(N(s,l)),o(u))}return n(s,55296,56319)?(r=s,null):n(s,56320,57343)?o(u):s}}function D(l,e){e.fatal;this.handler=function(e,u){if(u===z)return H;if(n(u,0,65535))return N(u,l);var t=N((u-65536>>10)+55296,l),r=N((u-65536&1023)+56320,l);return t.concat(r)}}function F(l){l.fatal;this.handler=function(l,e){return e===z?H:n(e,0,127)?e:63360+e-128}}function q(l){l.fatal;this.handler=function(l,e){return e===z?H:n(e,0,127)?e:n(e,63360,63487)?e-63360+128:s(e)}}var z=-1;i.prototype={endOfStream:function(){return!this.tokens.length},read:function(){return this.tokens.length?this.tokens.shift():z},prepend:function(l){if(Array.isArray(l))for(var n=l;n.length;)this.tokens.unshift(n.pop());else this.tokens.unshift(l)},push:function(l){if(Array.isArray(l))for(var n=l;n.length;)this.tokens.push(n.shift());else this.tokens.push(l)}};var H=-1;a.prototype={handler:function(l,n){}},f.prototype={handler:function(l,n){}};var K=[{encodings:[{labels:["unicode-1-1-utf-8","utf-8","utf8"],name:"utf-8"}],heading:"The Encoding"},{encodings:[{labels:["866","cp866","csibm866","ibm866"],name:"ibm866"},{labels:["csisolatin2","iso-8859-2","iso-ir-101","iso8859-2","iso88592","iso_8859-2","iso_8859-2:1987","l2","latin2"],name:"iso-8859-2"},{labels:["csisolatin3","iso-8859-3","iso-ir-109","iso8859-3","iso88593","iso_8859-3","iso_8859-3:1988","l3","latin3"],name:"iso-8859-3"},{labels:["csisolatin4","iso-8859-4","iso-ir-110","iso8859-4","iso88594","iso_8859-4","iso_8859-4:1988","l4","latin4"],name:"iso-8859-4"},{labels:["csisolatincyrillic","cyrillic","iso-8859-5","iso-ir-144","iso8859-5","iso88595","iso_8859-5","iso_8859-5:1988"],name:"iso-8859-5"},{labels:["arabic","asmo-708","csiso88596e","csiso88596i","csisolatinarabic","ecma-114","iso-8859-6","iso-8859-6-e","iso-8859-6-i","iso-ir-127","iso8859-6","iso88596","iso_8859-6","iso_8859-6:1987"],name:"iso-8859-6"},{labels:["csisolatingreek","ecma-118","elot_928","greek","greek8","iso-8859-7","iso-ir-126","iso8859-7","iso88597","iso_8859-7","iso_8859-7:1987","sun_eu_greek"],name:"iso-8859-7"},{labels:["csiso88598e","csisolatinhebrew","hebrew","iso-8859-8","iso-8859-8-e","iso-ir-138","iso8859-8","iso88598","iso_8859-8","iso_8859-8:1988","visual"],name:"iso-8859-8"},{labels:["csiso88598i","iso-8859-8-i","logical"],name:"iso-8859-8-i"},{labels:["csisolatin6","iso-8859-10","iso-ir-157","iso8859-10","iso885910","l6","latin6"],name:"iso-8859-10"},{labels:["iso-8859-13","iso8859-13","iso885913"],name:"iso-8859-13"},{labels:["iso-8859-14","iso8859-14","iso885914"],name:"iso-8859-14"},{labels:["csisolatin9","iso-8859-15","iso8859-15","iso885915","iso_8859-15","l9"],name:"iso-8859-15"},{labels:["iso-8859-16"],name:"iso-8859-16"},{labels:["cskoi8r","koi","koi8","koi8-r","koi8_r"],name:"koi8-r"},{labels:["koi8-ru","koi8-u"],name:"koi8-u"},{labels:["csmacintosh","mac","macintosh","x-mac-roman"],name:"macintosh"},{labels:["dos-874","iso-8859-11","iso8859-11","iso885911","tis-620","windows-874"],name:"windows-874"},{labels:["cp1250","windows-1250","x-cp1250"],name:"windows-1250"},{labels:["cp1251","windows-1251","x-cp1251"],name:"windows-1251"},{labels:["ansi_x3.4-1968","ascii","cp1252","cp819","csisolatin1","ibm819","iso-8859-1","iso-ir-100","iso8859-1","iso88591","iso_8859-1","iso_8859-1:1987","l1","latin1","us-ascii","windows-1252","x-cp1252"],name:"windows-1252"},{labels:["cp1253","windows-1253","x-cp1253"],name:"windows-1253"},{labels:["cp1254","csisolatin5","iso-8859-9","iso-ir-148","iso8859-9","iso88599","iso_8859-9","iso_8859-9:1989","l5","latin5","windows-1254","x-cp1254"],name:"windows-1254"},{labels:["cp1255","windows-1255","x-cp1255"],name:"windows-1255"},{labels:["cp1256","windows-1256","x-cp1256"],name:"windows-1256"},{labels:["cp1257","windows-1257","x-cp1257"],name:"windows-1257"},{labels:["cp1258","windows-1258","x-cp1258"],name:"windows-1258"},{labels:["x-mac-cyrillic","x-mac-ukrainian"],name:"x-mac-cyrillic"}],heading:"Legacy single-byte encodings"},{encodings:[{labels:["chinese","csgb2312","csiso58gb231280","gb2312","gb_2312","gb_2312-80","gbk","iso-ir-58","x-gbk"],name:"gbk"},{labels:["gb18030"],name:"gb18030"}],heading:"Legacy multi-byte Chinese (simplified) encodings"},{encodings:[{labels:["big5","big5-hkscs","cn-big5","csbig5","x-x-big5"],name:"big5"}],heading:"Legacy multi-byte Chinese (traditional) encodings"},{encodings:[{labels:["cseucpkdfmtjapanese","euc-jp","x-euc-jp"],name:"euc-jp"},{labels:["csiso2022jp","iso-2022-jp"],name:"iso-2022-jp"},{labels:["csshiftjis","ms932","ms_kanji","shift-jis","shift_jis","sjis","windows-31j","x-sjis"],name:"shift_jis"}],heading:"Legacy multi-byte Japanese encodings"},{encodings:[{labels:["cseuckr","csksc56011987","euc-kr","iso-ir-149","korean","ks_c_5601-1987","ks_c_5601-1989","ksc5601","ksc_5601","windows-949"],name:"euc-kr"}],heading:"Legacy multi-byte Korean encodings"},{encodings:[{labels:["csiso2022kr","hz-gb-2312","iso-2022-cn","iso-2022-cn-ext","iso-2022-kr"],name:"replacement"},{labels:["utf-16be"],name:"utf-16be"},{labels:["utf-16","utf-16le"],name:"utf-16le"},{labels:["x-user-defined"],name:"x-user-defined"}],heading:"Legacy miscellaneous encodings"}],V={};K.forEach(function(l){l.encodings.forEach(function(l){l.labels.forEach(function(n){V[n]=l})})});var Y={},W={},X="utf-8";m.prototype={decode:function(l,n){var e;e="object"==typeof l&&l instanceof ArrayBuffer?new Uint8Array(l):"object"==typeof l&&"buffer"in l&&l.buffer instanceof ArrayBuffer?new Uint8Array(l.buffer,l.byteOffset,l.byteLength):new Uint8Array(0),n=u(n),this._streaming||(this._decoder=W[this._encoding.name]({fatal:this._fatal}),this._BOMseen=!1),this._streaming=Boolean(n.stream);for(var t,o=new i(e),s=[];!o.endOfStream()&&(t=this._decoder.handler(o,o.read()),t!==H);)null!==t&&(Array.isArray(t)?s.push.apply(s,t):s.push(t));if(!this._streaming){do{if(t=this._decoder.handler(o,o.read()),t===H)break;null!==t&&(Array.isArray(t)?s.push.apply(s,t):s.push(t))}while(!o.endOfStream());this._decoder=null}return s.length&&(["utf-8","utf-16le","utf-16be"].indexOf(this.encoding)===-1||this._ignoreBOM||this._BOMseen||(65279===s[0]?(this._BOMseen=!0, +s.shift()):this._BOMseen=!0)),r(s)}},g.prototype={encode:function(l,n){l=l?String(l):"",n=u(n),this._streaming||(this._encoder=Y[this._encoding.name](this._options)),this._streaming=Boolean(n.stream);for(var e,r=[],o=new i(t(l));!o.endOfStream()&&(e=this._encoder.handler(o,o.read()),e!==H);)Array.isArray(e)?r.push.apply(r,e):r.push(e);if(!this._streaming){for(;;){if(e=this._encoder.handler(o,o.read()),e===H)break;Array.isArray(e)?r.push.apply(r,e):r.push(e)}this._encoder=null}return new Uint8Array(r)}},Y["utf-8"]=function(l){return new k(l)},W["utf-8"]=function(l){return new w(l)},function(){"encoding-indexes"in l&&K.forEach(function(l){"Legacy single-byte encodings"===l.heading&&l.encodings.forEach(function(l){var n=l.name,e=p(n);W[n]=function(l){return new E(e,l)},Y[n]=function(l){return new S(e,l)}})})}(),W.gbk=function(l){return new M(l)},Y.gbk=function(l){return new j(l,(!0))},Y.gb18030=function(l){return new j(l)},W.gb18030=function(l){return new M(l)},Y.big5=function(l){return new C(l)},W.big5=function(l){return new I(l)},Y["euc-jp"]=function(l){return new x(l)},W["euc-jp"]=function(l){return new A(l)},Y["iso-2022-jp"]=function(l){return new T(l)},W["iso-2022-jp"]=function(l){return new R(l)},Y.shift_jis=function(l){return new O(l)},W.shift_jis=function(l){return new B(l)},Y["euc-kr"]=function(l){return new U(l)},W["euc-kr"]=function(l){return new P(l)},Y["utf-16be"]=function(l){return new D((!0),l)},W["utf-16be"]=function(l){return new L((!0),l)},Y["utf-16le"]=function(l){return new D((!1),l)},W["utf-16le"]=function(l){return new L((!1),l)},Y["x-user-defined"]=function(l){return new q(l)},W["x-user-defined"]=function(l){return new F(l)},l.TextEncoder||(l.TextEncoder=g),l.TextDecoder||(l.TextDecoder=m)}(this)},{"./encoding-indexes.js":273}],275:[function(l,n,e){"use strict";function u(l){if(l&&l.__esModule)return l;var n={};if(null!=l)for(var e in l)Object.prototype.hasOwnProperty.call(l,e)&&(n[e]=l[e]);return n["default"]=l,n}Object.defineProperty(e,"__esModule",{value:!0}),e.v1=void 0;var t=l("./v1/index"),r=u(t);e.v1=r,e["default"]=r},{"./v1/index":279}],276:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0}),e.WRITE=e.READ=e.Driver=void 0;var t=l("babel-runtime/core-js/object/get-prototype-of"),r=u(t),i=l("babel-runtime/helpers/possibleConstructorReturn"),o=u(i),s=l("babel-runtime/helpers/get"),a=u(s),f=l("babel-runtime/helpers/inherits"),c=u(f),h=l("babel-runtime/helpers/classCallCheck"),d=u(h),p=l("babel-runtime/helpers/createClass"),b=u(p),v=l("./session"),_=u(v),y=l("./internal/pool"),m=u(y),g=l("./internal/connector"),w=l("./internal/stream-observer"),k=u(w),E=l("./error"),S=l("./internal/connection-providers"),M="READ",j="WRITE",I=function(){function l(n,e){var u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},t=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};(0,d["default"])(this,l),this._url=n,this._userAgent=e,this._openSessions={},this._sessionIdGenerator=0,this._token=u,this._config=t,this._pool=new m["default"](this._createConnection.bind(this),this._destroyConnection.bind(this),l._validateConnection.bind(this),t.connectionPoolSize),this._connectionProvider=null}return(0,b["default"])(l,[{key:"_createConnection",value:function(l,n){var e=this._sessionIdGenerator++,u=(0,g.connect)(l,this._config,this._connectionErrorCode()),t=new C(this,u);return u.initialize(this._userAgent,this._token,t),u._id=e,u._release=function(){return n(l,u)},this._openSessions[e]=u,u}},{key:"_destroyConnection",value:function(l){delete this._openSessions[l._id],l.close()}},{key:"session",value:function(n,e){var u=l._validateSessionMode(n),t=this._getOrCreateConnectionProvider();return this._createSession(u,t,e,this._config)}},{key:"_createConnectionProvider",value:function(l,n,e){return new S.DirectConnectionProvider(l,n,e)}},{key:"_createSession",value:function(l,n,e,u){return new _["default"](l,n,e,u)}},{key:"_connectionErrorCode",value:function(){return E.SERVICE_UNAVAILABLE}},{key:"_getOrCreateConnectionProvider",value:function(){if(!this._connectionProvider){var l=this._driverOnErrorCallback.bind(this);this._connectionProvider=this._createConnectionProvider(this._url,this._pool,l)}return this._connectionProvider}},{key:"_driverOnErrorCallback",value:function(l){var n=this.onError;n&&l.code===E.SERVICE_UNAVAILABLE&&n(l)}},{key:"close",value:function(){for(var l in this._openSessions)this._openSessions.hasOwnProperty(l)&&this._openSessions[l].close(),this._pool.purgeAll()}}],[{key:"_validateConnection",value:function(l){return l.isOpen()}},{key:"_validateSessionMode",value:function(l){var n=l||j;if(n!==M&&n!==j)throw(0,E.newError)("Illegal session mode "+n);return n}}]),l}(),C=function(l){function n(l,e){(0,d["default"])(this,n);var u=(0,o["default"])(this,(n.__proto__||(0,r["default"])(n)).call(this));return u._driver=l,u._conn=e,u._hasFailed=!1,u}return(0,c["default"])(n,l),(0,b["default"])(n,[{key:"onError",value:function(l){this._hasFailed||((0,a["default"])(n.prototype.__proto__||(0,r["default"])(n.prototype),"onError",this).call(this,l),this._driver.onError&&this._driver.onError(l),this._hasFailed=!0)}},{key:"onCompleted",value:function(l){this._driver.onCompleted&&this._driver.onCompleted(l),this._observer&&this._observer.onComplete&&this._observer.onCompleted(l)}}]),n}(k["default"]);e.Driver=I,e.READ=M,e.WRITE=j,e["default"]=I},{"./error":277,"./internal/connection-providers":287,"./internal/connector":288,"./internal/pool":292,"./internal/stream-observer":298,"./session":306,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/get":31,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33}],277:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}function t(l){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"N/A";return new v(l,n)}Object.defineProperty(e,"__esModule",{value:!0}),e.PROTOCOL_ERROR=e.SESSION_EXPIRED=e.SERVICE_UNAVAILABLE=e.Neo4jError=e.newError=void 0;var r=l("babel-runtime/core-js/object/get-prototype-of"),i=u(r),o=l("babel-runtime/helpers/classCallCheck"),s=u(o),a=l("babel-runtime/helpers/possibleConstructorReturn"),f=u(a),c=l("babel-runtime/helpers/inherits"),h=u(c),d="ServiceUnavailable",p="SessionExpired",b="ProtocolError",v=function(l){function n(l){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"N/A";(0,s["default"])(this,n);var u=(0,f["default"])(this,(n.__proto__||(0,i["default"])(n)).call(this,l));return u.message=l,u.code=e,u}return(0,h["default"])(n,l),n}(Error);e.newError=t,e.Neo4jError=v,e.SERVICE_UNAVAILABLE=d,e.SESSION_EXPIRED=p,e.PROTOCOL_ERROR=b},{"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33}],278:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0}),e.PathSegment=e.Path=e.UnboundRelationship=e.Relationship=e.Node=void 0;var t=l("babel-runtime/core-js/json/stringify"),r=u(t),i=l("babel-runtime/core-js/object/keys"),o=u(i),s=l("babel-runtime/helpers/classCallCheck"),a=u(s),f=l("babel-runtime/helpers/createClass"),c=u(f),h=function(){function l(n,e,u){(0,a["default"])(this,l),this.identity=n,this.labels=e,this.properties=u}return(0,c["default"])(l,[{key:"toString",value:function(){for(var l="("+this.identity,n=0;n0){l+=" {";for(var u=0;u0&&(l+=","),l+=e[u]+":"+(0,r["default"])(this.properties[e[u]]);l+="}"}return l+=")"}}]),l}(),d=function(){function l(n,e,u,t,r){(0,a["default"])(this,l),this.identity=n,this.start=e,this.end=u,this.type=t,this.properties=r}return(0,c["default"])(l,[{key:"toString",value:function(){var l="("+this.start+")-[:"+this.type,n=(0,o["default"])(this.properties);if(n.length>0){l+=" {";for(var e=0;e0&&(l+=","),l+=n[e]+":"+(0,r["default"])(this.properties[n[e]]);l+="}"}return l+="]->("+this.end+")"}}]),l}(),p=function(){function l(n,e,u){(0,a["default"])(this,l),this.identity=n,this.type=e,this.properties=u}return(0,c["default"])(l,[{key:"bind",value:function(l,n){return new d(this.identity,l,n,this.type,this.properties)}},{key:"toString",value:function(){var l="-[:"+this.type,n=(0,o["default"])(this.properties);if(n.length>0){l+=" {";for(var e=0;e0&&(l+=","),l+=n[e]+":"+(0,r["default"])(this.properties[n[e]]);l+="}"}return l+="]->"}}]),l}(),b=function _(l,n,e){(0,a["default"])(this,_),this.start=l,this.relationship=n,this.end=e},v=function y(l,n,e){(0,a["default"])(this,y),this.start=l,this.end=n,this.segments=e,this.length=e.length};e.Node=h,e.Relationship=d,e.UnboundRelationship=p,e.Path=v,e.PathSegment=b},{"babel-runtime/core-js/json/stringify":16,"babel-runtime/core-js/object/keys":22,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],279:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}function t(l,n){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};(0,m.assertString)(l,"Bolt URL");var u=(0,m.parseScheme)(l),t=(0,m.parseRoutingContext)(l);if("bolt+routing://"===u)return new v["default"]((0,m.parseUrl)(l),t,w,n,e);if("bolt://"===u){if(!(0,m.isEmptyObjectOrNull)(t))throw new Error("Parameters are not supported with scheme 'bolt'. Given URL: '"+l+"'");return new p.Driver((0,m.parseUrl)(l),w,n,e)}throw new Error("Unknown scheme: "+u)}Object.defineProperty(e,"__esModule",{value:!0}),e.error=e.session=e.types=e.auth=e.Neo4jError=e.integer=e.isInt=e["int"]=e.driver=void 0;var r=l("./integer"),i=l("./graph-types"),o=l("./error"),s=l("./result"),a=u(s),f=l("./result-summary"),c=u(f),h=l("./record"),d=u(h),p=l("./driver"),b=l("./routing-driver"),v=u(b),_=l("../version"),y=u(_),m=l("./internal/util"),g={basic:function(l,n){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;return e?{scheme:"basic",principal:l,credentials:n,realm:e}:{scheme:"basic",principal:l,credentials:n}},kerberos:function(l){return{scheme:"kerberos",principal:"",credentials:l}},custom:function(l,n,e,u){var t=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0;return t?{scheme:u,principal:l,credentials:n,realm:e,parameters:t}:{scheme:u,principal:l,credentials:n,realm:e}}},w="neo4j-javascript/"+y["default"],k={Node:i.Node,Relationship:i.Relationship,UnboundRelationship:i.UnboundRelationship,PathSegment:i.PathSegment,Path:i.Path,Result:a["default"],ResultSummary:c["default"],Record:d["default"]},E={READ:p.READ,WRITE:p.WRITE},S={SERVICE_UNAVAILABLE:o.SERVICE_UNAVAILABLE,SESSION_EXPIRED:o.SESSION_EXPIRED,PROTOCOL_ERROR:o.PROTOCOL_ERROR},M={toNumber:r.toNumber,toString:r.toString,inSafeRange:r.inSafeRange},j={driver:t,"int":r["int"],isInt:r.isInt,integer:M,Neo4jError:o.Neo4jError,auth:g,types:k,session:E,error:S};e.driver=t,e["int"]=r["int"],e.isInt=r.isInt,e.integer=M,e.Neo4jError=o.Neo4jError,e.auth=g,e.types=k,e.session=E,e.error=S,e["default"]=j},{"../version":308,"./driver":276,"./error":277,"./graph-types":278,"./integer":280,"./internal/util":301,"./record":302,"./result":304,"./result-summary":303,"./routing-driver":305}],280:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0}),e.toString=e.toNumber=e.inSafeRange=e.isInt=e["int"]=void 0;var t=l("babel-runtime/helpers/classCallCheck"),r=u(t),i=l("babel-runtime/helpers/createClass"),o=u(i),s=l("./error"),a=function(){function l(n,e){(0,r["default"])(this,l),this.low=0|n,this.high=0|e}return(0,o["default"])(l,[{key:"inSafeRange",value:function(){return this.greaterThanOrEqual(l.MIN_SAFE_VALUE)&&this.lessThanOrEqual(l.MAX_SAFE_VALUE)}},{key:"toInt",value:function(){return this.low}},{key:"toNumber",value:function(){return this.high*h+(this.low>>>0)}},{key:"toString",value:function(n){if(n=n||10,n<2||36>>0,a=s.toString(n);if(e=o,e.isZero())return a+i;for(;a.length<6;)a="0"+a;i=""+a+i}}},{key:"getHighBits",value:function(){return this.high}},{key:"getLowBits",value:function(){return this.low}},{key:"getNumBitsAbs",value:function(){if(this.isNegative())return this.equals(l.MIN_VALUE)?64:this.negate().getNumBitsAbs();for(var n=0!=this.high?this.high:this.low,e=31;e>0&&0==(n&1<=0}},{key:"isOdd",value:function(){return 1===(1&this.low)}},{key:"isEven",value:function(){return 0===(1&this.low)}},{key:"equals",value:function(n){return l.isInteger(n)||(n=l.fromValue(n)),this.high===n.high&&this.low===n.low}},{key:"notEquals",value:function(l){!this.equals(l)}},{key:"lessThan",value:function(l){return this.compare(l)<0}},{key:"lessThanOrEqual",value:function(l){return this.compare(l)<=0}},{key:"greaterThan",value:function(l){return this.compare(l)>0}},{key:"greaterThanOrEqual",value:function(l){return this.compare(l)>=0}},{key:"compare",value:function(n){if(l.isInteger(n)||(n=l.fromValue(n)),this.equals(n))return 0;var e=this.isNegative(),u=n.isNegative();return e&&!u?-1:!e&&u?1:this.subtract(n).isNegative()?-1:1}},{key:"negate",value:function(){return this.equals(l.MIN_VALUE)?l.MIN_VALUE:this.not().add(l.ONE)}},{key:"add",value:function(n){l.isInteger(n)||(n=l.fromValue(n));var e=this.high>>>16,u=65535&this.high,t=this.low>>>16,r=65535&this.low,i=n.high>>>16,o=65535&n.high,s=n.low>>>16,a=65535&n.low,f=0,c=0,h=0,d=0;return d+=r+a,h+=d>>>16,d&=65535,h+=t+s,c+=h>>>16,h&=65535,c+=u+o,f+=c>>>16,c&=65535,f+=e+i,f&=65535,l.fromBits(h<<16|d,f<<16|c)}},{key:"subtract",value:function(n){return l.isInteger(n)||(n=l.fromValue(n)),this.add(n.negate())}},{key:"multiply",value:function(n){if(this.isZero())return l.ZERO;if(l.isInteger(n)||(n=l.fromValue(n)),n.isZero())return l.ZERO;if(this.equals(l.MIN_VALUE))return n.isOdd()?l.MIN_VALUE:l.ZERO;if(n.equals(l.MIN_VALUE))return this.isOdd()?l.MIN_VALUE:l.ZERO;if(this.isNegative())return n.isNegative()?this.negate().multiply(n.negate()):this.negate().multiply(n).negate();if(n.isNegative())return this.multiply(n.negate()).negate();if(this.lessThan(b)&&n.lessThan(b))return l.fromNumber(this.toNumber()*n.toNumber());var e=this.high>>>16,u=65535&this.high,t=this.low>>>16,r=65535&this.low,i=n.high>>>16,o=65535&n.high,s=n.low>>>16,a=65535&n.low,f=0,c=0,h=0,d=0;return d+=r*a,h+=d>>>16,d&=65535,h+=t*a,c+=h>>>16,h&=65535,h+=r*s,c+=h>>>16,h&=65535,c+=u*a,f+=c>>>16,c&=65535,c+=t*s,f+=c>>>16,c&=65535,c+=r*o,f+=c>>>16,c&=65535,f+=e*a+u*s+t*o+r*i,f&=65535,l.fromBits(h<<16|d,f<<16|c)}},{key:"div",value:function(n){if(l.isInteger(n)||(n=l.fromValue(n)),n.isZero())throw(0,s.newError)("division by zero");if(this.isZero())return l.ZERO;var e,u,t;if(this.equals(l.MIN_VALUE)){if(n.equals(l.ONE)||n.equals(l.NEG_ONE))return l.MIN_VALUE;if(n.equals(l.MIN_VALUE))return l.ONE;var r=this.shiftRight(1);return e=r.div(n).shiftLeft(1),e.equals(l.ZERO)?n.isNegative()?l.ONE:l.NEG_ONE:(u=this.subtract(n.multiply(e)),t=e.add(u.div(n)))}if(n.equals(l.MIN_VALUE))return l.ZERO;if(this.isNegative())return n.isNegative()?this.negate().div(n.negate()):this.negate().div(n).negate();if(n.isNegative())return this.div(n.negate()).negate();for(t=l.ZERO,u=this;u.greaterThanOrEqual(n);){e=Math.max(1,Math.floor(u.toNumber()/n.toNumber()));for(var i=Math.ceil(Math.log(e)/Math.LN2),o=i<=48?1:Math.pow(2,i-48),a=l.fromNumber(e),f=a.multiply(n);f.isNegative()||f.greaterThan(u);)e-=o,a=l.fromNumber(e),f=a.multiply(n);a.isZero()&&(a=l.ONE),t=t.add(a),u=u.subtract(f)}return t}},{key:"modulo",value:function(n){return l.isInteger(n)||(n=l.fromValue(n)),this.subtract(this.div(n).multiply(n))}},{key:"not",value:function(){return l.fromBits(~this.low,~this.high)}},{key:"and",value:function(n){return l.isInteger(n)||(n=l.fromValue(n)),l.fromBits(this.low&n.low,this.high&n.high)}},{key:"or",value:function(n){return l.isInteger(n)||(n=l.fromValue(n)),l.fromBits(this.low|n.low,this.high|n.high)}},{key:"xor",value:function(n){return l.isInteger(n)||(n=l.fromValue(n)),l.fromBits(this.low^n.low,this.high^n.high)}},{key:"shiftLeft",value:function(n){return l.isInteger(n)&&(n=n.toInt()),0===(n&=63)?this:n<32?l.fromBits(this.low<>>32-n):l.fromBits(0,this.low<>>n|this.high<<32-n,this.high>>n):l.fromBits(this.high>>n-32,this.high>=0?0:-1)}}]),l}();a.__isInteger__,Object.defineProperty(a.prototype,"__isInteger__",{value:!0,enumerable:!1,configurable:!1}),a.isInteger=function(l){return(l&&l.__isInteger__)===!0};var f={};a.fromInt=function(l){var n,e;return l=0|l,-128<=l&&l<128&&(e=f[l])?e:(n=new a(l,l<0?-1:0,(!1)),-128<=l&&l<128&&(f[l]=n),n)},a.fromNumber=function(l){return isNaN(l)||!isFinite(l)?a.ZERO:l<=-p?a.MIN_VALUE:l+1>=p?a.MAX_VALUE:l<0?a.fromNumber(-l).negate():new a(l%h|0,l/h|0)},a.fromBits=function(l,n){return new a(l,n)},a.fromString=function(l,n){if(0===l.length)throw(0,s.newError)("number format error: empty string");if("NaN"===l||"Infinity"===l||"+Infinity"===l||"-Infinity"===l)return a.ZERO;if(n=n||10,n<2||360)throw(0,s.newError)('number format error: interior "-" character: '+l);if(0===e)return a.fromString(l.substring(1),n).negate();for(var u=a.fromNumber(Math.pow(n,8)),t=a.ZERO,r=0;r>8),this.putUInt8(l+1,255&n)}},{key:"putUInt16",value:function(l,n){this.putUInt8(l,n>>8&255),this.putUInt8(l+1,255&n)}},{key:"putInt32",value:function(l,n){this.putInt8(l,n>>24),this.putUInt8(l+1,n>>16&255),this.putUInt8(l+2,n>>8&255),this.putUInt8(l+3,255&n)}},{key:"putUInt32",value:function(l,n){this.putUInt8(l,n>>24&255),this.putUInt8(l+1,n>>16&255),this.putUInt8(l+2,n>>8&255),this.putUInt8(l+3,255&n)}},{key:"putInt64",value:function(l,n){this.putInt8(l,n>>48),this.putUInt8(l+1,n>>42&255),this.putUInt8(l+2,n>>36&255),this.putUInt8(l+3,n>>30&255),this.putUInt8(l+4,n>>24&255),this.putUInt8(l+5,n>>16&255),this.putUInt8(l+6,n>>8&255),this.putUInt8(l+7,255&n)}},{key:"putBytes",value:function(l,n){for(var e=0,u=n.remaining();e0}},{key:"reset",value:function(){this.position=0}},{key:"toString",value:function(){return this.constructor.name+"( position="+this.position+" )\n "+this.toHex()}},{key:"toHex",value:function(){for(var l="",n=0;n=e.length))return e.getUInt8(l);l-=e.length}}},{key:"getInt8",value:function(l){for(var n=0;n=e.length))return e.getInt8(l);l-=e.length}}},{key:"getFloat64",value:function(l){for(var n=t(8),e=0;e<8;e++)n.putUInt8(e,this.getUInt8(l+e));return n.getFloat64(0)}}]),n}(y),k=function(l){function n(l){(0,p["default"])(this,n);var e=l instanceof _.Buffer?l:new _.Buffer(l),u=(0,f["default"])(this,(n.__proto__||(0,s["default"])(n)).call(this,e.length));return u._buffer=e,u}return(0,h["default"])(n,l),(0,v["default"])(n,[{key:"getUInt8",value:function(l){return this._buffer.readUInt8(l)}},{key:"getInt8",value:function(l){return this._buffer.readInt8(l)}},{key:"getFloat64",value:function(l){return this._buffer.readDoubleBE(l)}},{key:"putUInt8",value:function(l,n){this._buffer.writeUInt8(n,l)}},{key:"putInt8",value:function(l,n){this._buffer.writeInt8(n,l)}},{key:"putFloat64",value:function(l,n){this._buffer.writeDoubleBE(n,l)}},{key:"putBytes",value:function(l,e){if(e instanceof n){var u=Math.min(e.length-e.position,this.length-l);e._buffer.copy(this._buffer,l,e.position,e.position+u),e.position+=u}else(0,i["default"])(n.prototype.__proto__||(0,s["default"])(n.prototype),"putBytes",this).call(this,l,e)}},{key:"getSlice",value:function(l,e){return new n(this._buffer.slice(l,l+e))}}]),n}(y),E=m;try{l.resolve("buffer"),E=k}catch(S){}e.BaseBuffer=y,e.HeapBuffer=m,e.SliceBuffer=g,e.CombinedBuffer=w,e.NodeBuffer=k,e.alloc=t},{"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/get":31,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33,buffer:67}],282:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0});var t=l("babel-runtime/helpers/classCallCheck"),r=u(t),i=l("babel-runtime/helpers/createClass"),o=u(i),s=l("./features"),a=u(s),f=l("../error"),c=function(){function l(n,e,u,t){(0,r["default"])(this,l),this.host=n,this.port=e,this.encrypted=l._extractEncrypted(u),this.trust=l._extractTrust(u),this.trustedCertificates=l._extractTrustedCertificates(u),this.knownHostsPath=l._extractKnownHostsPath(u),this.connectionErrorCode=t||f.SERVICE_UNAVAILABLE}return(0,o["default"])(l,null,[{key:"_extractEncrypted",value:function(l){var n=null==l.encrypted;return n?(0,a["default"])("trust_all_certificates"):l.encrypted}},{key:"_extractTrust",value:function(l){return l.trust?l.trust:(0,a["default"])("trust_all_certificates")?"TRUST_ALL_CERTIFICATES":"TRUST_CUSTOM_CA_SIGNED_CERTIFICATES"}},{key:"_extractTrustedCertificates",value:function(l){return l.trustedCertificates||[]}},{key:"_extractKnownHostsPath",value:function(l){return l.knownHosts||null}}]),l}();e["default"]=c},{"../error":277,"./features":289,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],283:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}function t(){var n=l,e=n("process");return e.env["win32"==e.platform?"USERPROFILE":"HOME"]}function r(l){try{y["default"].mkdirSync(l)}catch(n){if("ENOENT"===n.code)return r(g["default"].dirname(l)),void r(l);if("EEXIST"===n.code)return;throw n}}function i(n,e,u){try{y["default"].accessSync(e)}catch(t){return u(null)}var r=!1;l("readline").createInterface({input:y["default"].createReadStream(e)}).on("line",function(l){!r&&l.startsWith(n)&&(r=!0,u(l.split(" ")[1]))}).on("close",function(){r||u(null)})}function o(l,n,e,u){if(j[l])return u(null);j[l]=1;try{y["default"].accessSync(n)}catch(t){r(g["default"].dirname(n))}y["default"].appendFile(n,l+" "+e+w.EOL,"utf8",function(n){return delete j[l],n&&console.log(n),u(n)})}function s(l,n){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){return null};if(l.encrypted===!1||l.encrypted===E.ENCRYPTION_OFF){var u=p["default"].connect(l.port,l.host,n);return u.on("error",e),u}return I[l.trust]?I[l.trust](l,n,e):void e((0,S.newError)("Unknown trust strategy: "+l.trust+". Please use either trust:'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES' or trust:'TRUST_ALL_CERTIFICATES' in your driver configuration. Alternatively, you can disable encryption by setting `encrypted:\""+E.ENCRYPTION_OFF+'"`. There is no mechanism to use encryption without trust verification, because this incurs the overhead of encryption without improving security. If the driver does not verify that the peer it is connected to is really Neo4j, it is very easy for an attacker to bypass the encryption by pretending to be Neo4j.'))}Object.defineProperty(e,"__esModule",{value:!0});var a=l("babel-runtime/helpers/classCallCheck"),f=u(a),c=l("babel-runtime/helpers/createClass"),h=u(c),d=l("net"),p=u(d),b=l("tls"),v=u(b),_=l("fs"),y=u(_),m=l("path"),g=u(m),w=l("os"),k=l("./buf"),E=l("./util"),S=l("./../error"),M=0,j={},I={TRUST_SIGNED_CERTIFICATES:function(l,n,e){return console.log("`TRUST_SIGNED_CERTIFICATES` has been deprecated as option and will be removed in a future version of the driver. Please use `TRUST_CUSTOM_CA_SIGNED_CERTIFICATES` instead."),I.TRUST_CUSTOM_CA_SIGNED_CERTIFICATES(l,n,e)},TRUST_CUSTOM_CA_SIGNED_CERTIFICATES:function(l,n,e){if(!l.trustedCertificates||0===l.trustedCertificates.length)return void e((0,S.newError)('You are using TRUST_CUSTOM_CA_SIGNED_CERTIFICATES as the method to verify trust for encrypted connections, but have not configured any trustedCertificates. You must specify the path to at least one trusted X.509 certificate for this to work. Two other alternatives is to use TRUST_ALL_CERTIFICATES or to disable encryption by setting encrypted="'+E.ENCRYPTION_OFF+'"in your driver configuration.'));var u={ca:l.trustedCertificates.map(function(l){return y["default"].readFileSync(l)}),rejectUnauthorized:!1},t=v["default"].connect(l.port,l.host,u,function(){t.authorized?n():e((0,S.newError)("Server certificate is not trusted. If you trust the database you are connecting to, add the signing certificate, or the server certificate, to the list of certificates trusted by this driver using `neo4j.v1.driver(.., { trustedCertificates:['path/to/certificate.crt']}). This is a security measure to protect against man-in-the-middle attacks. If you are just trying Neo4j out and are not concerned about encryption, simply disable it using `encrypted=\""+E.ENCRYPTION_OFF+'"` in the driver options. Socket responded with: '+t.authorizationError))});return t.on("error",e),t},TRUST_SYSTEM_CA_SIGNED_CERTIFICATES:function(l,n,e){var u={rejectUnauthorized:!1},t=v["default"].connect(l.port,l.host,u,function(){t.authorized?n():e((0,S.newError)("Server certificate is not trusted. If you trust the database you are connecting to, use TRUST_CUSTOM_CA_SIGNED_CERTIFICATES and add the signing certificate, or the server certificate, to the list of certificates trusted by this driver using `neo4j.v1.driver(.., { trustedCertificates:['path/to/certificate.crt']}). This is a security measure to protect against man-in-the-middle attacks. If you are just trying Neo4j out and are not concerned about encryption, simply disable it using `encrypted=\""+E.ENCRYPTION_OFF+'"` in the driver options. Socket responded with: '+t.authorizationError)); +});return t.on("error",e),t},TRUST_ON_FIRST_USE:function(n,e,u){console.log("`TRUST_ON_FIRST_USE` has been deprecated as option and will be removed in a future version of the driver. Please use `TRUST_ALL_CERTIFICATES` instead.");var r={rejectUnauthorized:!1},s=v["default"].connect(n.port,n.host,r,function(){var r=s.getPeerCertificate(!0);if(!r.raw)return void u((0,S.newError)('You are using a version of NodeJS that does not support trust-on-first use encryption. You can either upgrade NodeJS to a newer version, use `trust:TRUST_CUSTOM_CA_SIGNED_CERTIFICATES` in your driver config instead, or disable encryption using `encrypted:"'+E.ENCRYPTION_OFF+'"`.'));var a=l("crypto").createHash("sha512").update(r.raw).digest("hex"),f=n.knownHostsPath||g["default"].join(t(),".neo4j","known_hosts"),c=n.host+":"+n.port;i(c,f,function(l){l===a?e():null==l?o(c,f,a,function(l){return l?u(l):e()}):u((0,S.newError)("Database encryption certificate has changed, and no longer matches the certificate stored for "+c+" in `"+f+"`. As a security precaution, this driver will not automatically trust the new certificate, because doing so would allow an attacker to pretend to be the Neo4j instance we want to connect to. The certificate provided by the server looks like: "+r+". If you trust that this certificate is valid, simply remove the line starting with "+c+" in `"+f+'`, and the driver will update the file with the new certificate. You can configure which file the driver should use to store this information by setting `knownHosts` to another path in your driver configuration - and you can disable encryption there as well using `encrypted:"'+E.ENCRYPTION_OFF+'"`.'))})});return s.on("error",u),s},TRUST_ALL_CERTIFICATES:function(l,n,e){var u={rejectUnauthorized:!1},t=v["default"].connect(l.port,l.host,u,function(){var l=t.getPeerCertificate();(0,E.isEmptyObjectOrNull)(l)?e((0,S.newError)('Secure connection was successful but server did not return any valid certificates. Such connection can not be trusted. If you are just trying Neo4j out and are not concerned about encryption, simply disable it using `encrypted="'+E.ENCRYPTION_OFF+'"` in the driver options. Socket responded with: '+t.authorizationError)):n()});return t.on("error",e),t}},C=function(){function l(n){(0,f["default"])(this,l);var e=this;this.id=M++,this.available=!0,this._pending=[],this._open=!0,this._error=null,this._handleConnectionError=this._handleConnectionError.bind(this),this._handleConnectionTerminated=this._handleConnectionTerminated.bind(this),this._connectionErrorCode=n.connectionErrorCode,this._encrypted=n.encrypted,this._conn=s(n,function(){if(e._open){e._conn.on("data",function(l){e.onmessage&&e.onmessage(new k.NodeBuffer(l))}),e._conn.on("error",e._handleConnectionError),e._conn.on("end",e._handleConnectionTerminated);var l=e._pending;e._pending=null;for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:function(){return null};this._open=!1,this._conn?(this._conn.end(),this._conn.removeListener("end",this._handleConnectionTerminated),this._conn.on("end",l)):l()}}]),l}(),A={channel:C,available:!0};try{l.resolve("net")}catch(x){A={available:!1}}e["default"]=A},{"./../error":277,"./buf":281,"./util":301,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,crypto:186,fs:64,net:64,os:230,path:236,readline:64,tls:64}],284:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0});var t=l("babel-runtime/helpers/classCallCheck"),r=u(t),i=l("babel-runtime/helpers/createClass"),o=u(i),s=l("./buf"),a=l("./../error"),f=l("./util"),c=function(){function l(n){(0,r["default"])(this,l),this._open=!0,this._pending=[],this._error=null,this._handleConnectionError=this._handleConnectionError.bind(this),this._connectionErrorCode=n.connectionErrorCode,this._encrypted=n.encrypted;var e="ws";if(n.encrypted===!0||n.encrypted===f.ENCRYPTION_ON){if(n.trust&&"TRUST_CUSTOM_CA_SIGNED_CERTIFICATES"!==n.trust)return void(this._error=(0,a.newError)("The browser version of this driver only supports one trust strategy, 'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES'. "+n.trust+' is not supported. Please either use TRUST_CUSTOM_CA_SIGNED_CERTIFICATES or disable encryption by setting `encrypted:"'+f.ENCRYPTION_OFF+'"` in the driver configuration.'));e="wss"}this._url=e+"://"+n.host+":"+n.port,this._ws=new WebSocket(this._url),this._ws.binaryType="arraybuffer";var u=this;this._ws.onclose=function(l){l.wasClean||u._handleConnectionError()},this._ws.onopen=function(){var l=u._pending;u._pending=null;for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:function(){return null};this._open=!1,this._ws.close(),this._ws.onclose=l}}]),l}(),h="undefined"!=typeof WebSocket,d={channel:c,available:h};e["default"]=d},{"./../error":277,"./buf":281,"./util":301,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],285:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0}),e.Dechunker=e.Chunker=void 0;var t=l("babel-runtime/core-js/object/get-prototype-of"),r=u(t),i=l("babel-runtime/helpers/classCallCheck"),o=u(i),s=l("babel-runtime/helpers/createClass"),a=u(s),f=l("babel-runtime/helpers/possibleConstructorReturn"),c=u(f),h=l("babel-runtime/helpers/inherits"),d=u(h),p=l("./buf"),b=2,v=0,_=1400,y=function(l){function n(l,e){(0,o["default"])(this,n);var u=(0,c["default"])(this,(n.__proto__||(0,r["default"])(n)).call(this,0));return u._bufferSize=e||_,u._ch=l,u._buffer=(0,p.alloc)(u._bufferSize),u._currentChunkStart=0,u._chunkOpen=!1,u}return(0,d["default"])(n,l),(0,a["default"])(n,[{key:"putUInt8",value:function(l,n){this._ensure(1),this._buffer.writeUInt8(n)}},{key:"putInt8",value:function(l,n){this._ensure(1),this._buffer.writeInt8(n)}},{key:"putFloat64",value:function(l,n){this._ensure(8),this._buffer.writeFloat64(n)}},{key:"putBytes",value:function(l,n){for(;n.remaining()>0;)this._ensure(1),this._buffer.remaining()>n.remaining()?this._buffer.writeBytes(n):this._buffer.writeBytes(n.readSlice(this._buffer.remaining()));return this}},{key:"flush",value:function(){if(this._buffer.position>0){this._closeChunkIfOpen();var l=this._buffer;this._buffer=null,this._ch.write(l.getSlice(0,l.position)),this._buffer=(0,p.alloc)(this._bufferSize),this._chunkOpen=!1}return this}},{key:"messageBoundary",value:function(){this._closeChunkIfOpen(),this._buffer.remaining()=2?this._onHeader(l.readUInt16()):(this._partialChunkHeader=l.readUInt8()<<8,this.IN_HEADER)}},{key:"IN_HEADER",value:function(l){return this._onHeader(65535&(this._partialChunkHeader|l.readUInt8()))}},{key:"IN_CHUNK",value:function(l){return this._chunkSize<=l.remaining()?(this._currentMessage.push(l.readSlice(this._chunkSize)),this.AWAITING_CHUNK):(this._chunkSize-=l.remaining(),this._currentMessage.push(l.readSlice(l.remaining())),this.IN_CHUNK)}},{key:"CLOSED",value:function(l){}},{key:"_onHeader",value:function(l){if(0==l){var n=void 0;return n=1==this._currentMessage.length?this._currentMessage[0]:new p.CombinedBuffer(this._currentMessage),this._currentMessage=[],this.onmessage(n),this.AWAITING_CHUNK}return this._chunkSize=l,this.IN_CHUNK}},{key:"write",value:function(l){for(;l.hasRemaining();)this._state=this._state(l)}}]),l}();e.Chunker=y,e.Dechunker=m},{"./buf":281,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33}],286:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0}),e.EMPTY_CONNECTION_HOLDER=void 0;var t=l("babel-runtime/core-js/object/get-prototype-of"),r=u(t),i=l("babel-runtime/helpers/possibleConstructorReturn"),o=u(i),s=l("babel-runtime/helpers/inherits"),a=u(s),f=l("babel-runtime/core-js/promise"),c=u(f),h=l("babel-runtime/helpers/classCallCheck"),d=u(h),p=l("babel-runtime/helpers/createClass"),b=u(p),v=l("../error"),_=function(){function l(n,e){(0,d["default"])(this,l),this._mode=n,this._connectionProvider=e,this._referenceCount=0,this._connectionPromise=c["default"].resolve(null)}return(0,b["default"])(l,[{key:"initializeConnection",value:function(){0===this._referenceCount&&(this._connectionPromise=this._connectionProvider.acquireConnection(this._mode)),this._referenceCount++}},{key:"getConnection",value:function(){return this._connectionPromise}},{key:"releaseConnection",value:function(){return 0===this._referenceCount?this._connectionPromise:(this._referenceCount--,0===this._referenceCount?this._releaseConnection(!0):this._connectionPromise)}},{key:"close",value:function(){return 0===this._referenceCount?this._connectionPromise:(this._referenceCount=0,this._releaseConnection(!1))}},{key:"_releaseConnection",value:function(l){return this._connectionPromise=this._connectionPromise.then(function(n){n&&(l?n.reset():n.resetAsync(),n.sync(),n._release())})["catch"](function(l){}),this._connectionPromise}}]),l}();e["default"]=_;var y=function(l){function n(){return(0,d["default"])(this,n),(0,o["default"])(this,(n.__proto__||(0,r["default"])(n)).apply(this,arguments))}return(0,a["default"])(n,l),(0,b["default"])(n,[{key:"initializeConnection",value:function(){}},{key:"getConnection",value:function(){return c["default"].reject((0,v.newError)("This connection holder does not serve connections"))}},{key:"releaseConnection",value:function(){return c["default"].resolve()}},{key:"close",value:function(){return c["default"].resolve()}}]),n}(_);e.EMPTY_CONNECTION_HOLDER=new y},{"../error":277,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33}],287:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0}),e.SingleConnectionProvider=e.LoadBalancer=e.DirectConnectionProvider=void 0;var t=l("babel-runtime/core-js/promise"),r=u(t),i=l("babel-runtime/core-js/object/get-prototype-of"),o=u(i),s=l("babel-runtime/helpers/possibleConstructorReturn"),a=u(s),f=l("babel-runtime/helpers/inherits"),c=u(f),h=l("babel-runtime/helpers/classCallCheck"),d=u(h),p=l("babel-runtime/helpers/createClass"),b=u(p),v=l("../error"),_=l("../driver"),y=l("../session"),m=u(y),g=l("./round-robin-array"),w=u(g),k=l("./routing-table"),E=u(k),S=l("./rediscovery"),M=u(S),j=l("./features"),I=u(j),C=l("./host-name-resolvers"),A=l("./routing-util"),x=u(A),R=function(){function l(){(0,d["default"])(this,l)}return(0,b["default"])(l,[{key:"acquireConnection",value:function(l){throw new Error("Abstract function")}},{key:"_withAdditionalOnErrorCallback",value:function(l,n){return l["catch"](function(l){n(l)}),l}}]),l}(),T=(e.DirectConnectionProvider=function(l){function n(l,e,u){(0,d["default"])(this,n);var t=(0,a["default"])(this,(n.__proto__||(0,o["default"])(n)).call(this));return t._address=l,t._connectionPool=e,t._driverOnErrorCallback=u,t}return(0,c["default"])(n,l),(0,b["default"])(n,[{key:"acquireConnection",value:function(l){var n=this._connectionPool.acquire(this._address),e=r["default"].resolve(n);return this._withAdditionalOnErrorCallback(e,this._driverOnErrorCallback)}}]),n}(R),e.LoadBalancer=function(l){function n(l,e,u,t){(0,d["default"])(this,n);var r=(0,a["default"])(this,(n.__proto__||(0,o["default"])(n)).call(this));return r._seedRouter=l,r._routingTable=new E["default"](new w["default"]([r._seedRouter])),r._rediscovery=new M["default"](new x["default"](e)),r._connectionPool=u,r._driverOnErrorCallback=t,r._hostNameResolver=n._createHostNameResolver(),r._useSeedRouter=!1,r}return(0,c["default"])(n,l),(0,b["default"])(n,[{key:"acquireConnection",value:function(l){var n=this,e=this._freshRoutingTable(l).then(function(e){if(l===_.READ)return n._acquireConnectionToServer(e.readers,"read");if(l===_.WRITE)return n._acquireConnectionToServer(e.writers,"write");throw(0,v.newError)("Illegal mode "+l)});return this._withAdditionalOnErrorCallback(e,this._driverOnErrorCallback)}},{key:"forget",value:function(l){this._routingTable.forget(l),this._connectionPool.purge(l)}},{key:"forgetWriter",value:function(l){this._routingTable.forgetWriter(l)}},{key:"_acquireConnectionToServer",value:function(l,n){var e=l.next();return e?this._connectionPool.acquire(e):r["default"].reject((0,v.newError)("Failed to obtain connection towards "+n+" server. Known routing table is: "+this._routingTable,v.SESSION_EXPIRED))}},{key:"_freshRoutingTable",value:function(l){var n=this._routingTable;return n.isStaleFor(l)?this._refreshRoutingTable(n):r["default"].resolve(n)}},{key:"_refreshRoutingTable",value:function(l){var n=l.routers.toArray();return this._useSeedRouter?this._fetchRoutingTableFromSeedRouterFallbackToKnownRouters(n,l):this._fetchRoutingTableFromKnownRoutersFallbackToSeedRouter(n,l)}},{key:"_fetchRoutingTableFromSeedRouterFallbackToKnownRouters",value:function(l,n){var e=this,u=[];return this._fetchRoutingTableUsingSeedRouter(u,this._seedRouter).then(function(u){return u?(e._useSeedRouter=!1,u):e._fetchRoutingTableUsingKnownRouters(l,n)}).then(function(l){return e._applyRoutingTableIfPossible(l),l})}},{key:"_fetchRoutingTableFromKnownRoutersFallbackToSeedRouter",value:function(l,n){var e=this;return this._fetchRoutingTableUsingKnownRouters(l,n).then(function(n){return n?n:e._fetchRoutingTableUsingSeedRouter(l,e._seedRouter)}).then(function(l){return e._applyRoutingTableIfPossible(l),l})}},{key:"_fetchRoutingTableUsingKnownRouters",value:function(l,e){return this._fetchRoutingTable(l,e).then(function(u){if(u)return u;var t=l.length-1;return n._forgetRouter(e,l,t),null})}},{key:"_fetchRoutingTableUsingSeedRouter",value:function(l,n){var e=this;return this._hostNameResolver.resolve(n).then(function(n){var u=n.filter(function(n){return l.indexOf(n)<0});return e._fetchRoutingTable(u,null)})}},{key:"_fetchRoutingTable",value:function(l,e){var u=this;return l.reduce(function(t,r,i){return t.then(function(t){if(t)return t;var o=i-1;n._forgetRouter(e,l,o);var s=u._createSessionForRediscovery(r);return u._rediscovery.lookupRoutingTableOnRouter(s,r)})},r["default"].resolve(null))}},{key:"_createSessionForRediscovery",value:function(l){var n=this._connectionPool.acquire(l),e=n.initializationCompleted(),u=new T(e);return new m["default"](_.READ,u)}},{key:"_applyRoutingTableIfPossible",value:function(l){if(!l)throw(0,v.newError)("Could not perform discovery. No routing servers available. Known routing table: "+this._routingTable,v.SERVICE_UNAVAILABLE);l.writers.isEmpty()&&(this._useSeedRouter=!0),this._updateRoutingTable(l)}},{key:"_updateRoutingTable",value:function(l){var n=this,e=this._routingTable,u=e.serversDiff(l);u.forEach(function(l){return n._connectionPool.purge(l)}),this._routingTable=l}}],[{key:"_forgetRouter",value:function(l,n,e){var u=n[e];l&&u&&l.forgetRouter(u)}},{key:"_createHostNameResolver",value:function(){return(0,I["default"])("dns_lookup")?new C.DnsHostNameResolver:new C.DummyHostNameResolver}}]),n}(R),e.SingleConnectionProvider=function(l){function n(l){(0,d["default"])(this,n);var e=(0,a["default"])(this,(n.__proto__||(0,o["default"])(n)).call(this));return e._connectionPromise=l,e}return(0,c["default"])(n,l),(0,b["default"])(n,[{key:"acquireConnection",value:function(l){var n=this._connectionPromise;return this._connectionPromise=null,n}}]),n}(R))},{"../driver":276,"../error":277,"../session":306,"./features":289,"./host-name-resolvers":290,"./rediscovery":293,"./round-robin-array":294,"./routing-table":295,"./routing-util":296,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33}],288:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}function t(l,n){if(K){for(var e=2;e1&&void 0!==arguments[1]?arguments[1]:{},e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,u=n.channel||C,t=(0,j.parseHost)(l),r=(0,j.parsePort)(l)||7687,i=t+":"+r,o=new M["default"](t,r,n,e);return new W(new u(o),i)}Object.defineProperty(e,"__esModule",{value:!0}),e.Connection=e.connect=void 0;var o=l("babel-runtime/core-js/promise"),s=u(o),a=l("babel-runtime/helpers/classCallCheck"),f=u(a),c=l("babel-runtime/helpers/createClass"),h=u(c),d=l("babel-runtime/core-js/json/stringify"),p=u(d),b=l("./ch-websocket"),v=u(b),_=l("./ch-node"),y=u(_),m=l("./chunking"),g=l("./packstream"),w=l("./buf"),k=l("../graph-types"),E=l("./../error"),S=l("./ch-config"),M=u(S),j=l("./util"),I=l("./stream-observer"),C=(u(I),void 0);if(y["default"].available)C=y["default"].channel;else{if(!v["default"].available)throw(0,E.newError)("Fatal: No compatible transport available. Need to run on a platform with the WebSocket API.");C=v["default"].channel}var A=1,x=14,R=15,T=16,B=47,O=63,P=112,U=113,N=126,L=127,D=78,F=82,q=114,z=80,H=1616949271,K=!1,V={onNext:r,onCompleted:r,onError:r},Y={node:function(l,n){return new k.Node(l.unpack(n),l.unpack(n),l.unpack(n))},rel:function(l,n){return new k.Relationship(l.unpack(n),l.unpack(n),l.unpack(n),l.unpack(n),l.unpack(n))},unboundRel:function(l,n){return new k.UnboundRelationship(l.unpack(n),l.unpack(n),l.unpack(n))},path:function(l,n){for(var e=l.unpack(n),u=l.unpack(n),t=l.unpack(n),r=e[0],i=[],o=0;o0?(f=u[s-1],f instanceof k.UnboundRelationship&&(u[s-1]=f=f.bind(r.identity,a.identity))):(f=u[-s-1],f instanceof k.UnboundRelationship&&(u[-s-1]=f=f.bind(a.identity,r.identity))),i.push(new k.PathSegment(r,f,a)),r=a}return new k.Path(e[0],e[e.length-1],i)}},W=function(){function l(n,e){(0,f["default"])(this,l),this.url=e,this.server={address:e},this._pendingObservers=[],this._currentObserver=void 0,this._ch=n,this._dechunker=new m.Dechunker,this._chunker=new m.Chunker(n),this._packer=new g.Packer(this._chunker),this._unpacker=new g.Unpacker,this._isHandlingFailure=!1,this._currentFailure=null,this._state=new X(this),this._isBroken=!1,this._unpacker.structMappers[D]=Y.node,this._unpacker.structMappers[F]=Y.rel,this._unpacker.structMappers[q]=Y.unboundRel,this._unpacker.structMappers[z]=Y.path;var u=this;this._ch.onmessage=function(l){var n=l.readInt32();1==n?(u._ch.onmessage=function(l){u._dechunker.write(l)},l.hasRemaining()&&u._dechunker.write(l.readSlice(l.remaining()))):1213486160==n?u._handleFatalError((0,E.newError)("Server responded HTTP. Make sure you are not trying to connect to the http endpoint (HTTP defaults to port 7474 whereas BOLT defaults to port 7687)")):u._handleFatalError((0,E.newError)("Unknown Bolt protocol version: "+n))},this._ch.onerror=this._handleFatalError.bind(this),this._ch._error&&this._handleFatalError(this._ch._error),this._dechunker.onmessage=function(l){u._handleMessage(u._unpacker.unpack(l))};var t=(0,w.alloc)(20);t.writeInt32(H),t.writeInt32(1),t.writeInt32(0),t.writeInt32(0),t.writeInt32(0),t.reset(),this._ch.write(t)}return(0,h["default"])(l,[{key:"_handleFatalError",value:function(l){for(this._isBroken=!0,this._error=l,this._currentObserver&&this._currentObserver.onError&&this._currentObserver.onError(l);this._pendingObservers.length>0;){var n=this._pendingObservers.shift();n&&n.onError&&n.onError(l)}}},{key:"_handleMessage",value:function(l){var n=this,e=l.fields[0];switch(l.signature){case U:t("S","RECORD",l),this._currentObserver.onNext(e);break;case P:t("S","SUCCESS",l);try{this._currentObserver.onCompleted(e)}finally{this._currentObserver=this._pendingObservers.shift()}break;case L:t("S","FAILURE",l);try{this._currentFailure=(0,E.newError)(e.message,e.code),this._currentObserver.onError(this._currentFailure)}finally{this._currentObserver=this._pendingObservers.shift(),this._isHandlingFailure||(this._isHandlingFailure=!0,this._ackFailure({onNext:r,onError:r,onCompleted:function(){n._isHandlingFailure=!1,n._currentFailure=null}}))}break;case N:t("S","IGNORED",l);try{this._currentFailure&&this._currentObserver.onError?this._currentObserver.onError(this._currentFailure):this._currentObserver.onError&&this._currentObserver.onError(e)}finally{this._currentObserver=this._pendingObservers.shift()}break;default:this._handleFatalError((0,E.newError)("Unknown Bolt protocol message: "+l))}}},{key:"initialize",value:function(l,n,e){var u=this;t("C","INIT",l,n);var r=this._state.wrap(e);this._queueObserver(r),this._packer.packStruct(A,[this._packable(l),this._packable(n)],function(l){return u._handleFatalError(l)}),this._chunker.messageBoundary(),this.sync()}},{key:"run",value:function(l,n,e){var u=this;t("C","RUN",l,n),this._queueObserver(e),this._packer.packStruct(T,[this._packable(l),this._packable(n)],function(l){return u._handleFatalError(l)}),this._chunker.messageBoundary()}},{key:"pullAll",value:function(l){var n=this;t("C","PULL_ALL"),this._queueObserver(l),this._packer.packStruct(O,[],function(l){return n._handleFatalError(l)}),this._chunker.messageBoundary()}},{key:"discardAll",value:function(l){var n=this;t("C","DISCARD_ALL"),this._queueObserver(l),this._packer.packStruct(B,[],function(l){return n._handleFatalError(l)}),this._chunker.messageBoundary()}},{key:"resetAsync",value:function(l){var n=this;t("C","RESET_ASYNC"),this._isHandlingFailure=!0;var e=this,u={onNext:l?l.onNext:r,onError:l?l.onError:r,onCompleted:function(){e._isHandlingFailure=!1,l&&l.onCompleted()}};this._queueObserver(u),this._packer.packStruct(R,[],function(l){return n._handleFatalError(l)}),this._chunker.messageBoundary()}},{key:"reset",value:function(l){var n=this;t("C","RESET"),this._queueObserver(l),this._packer.packStruct(R,[],function(l){return n._handleFatalError(l)}),this._chunker.messageBoundary()}},{key:"_ackFailure",value:function(l){var n=this;t("C","ACK_FAILURE"),this._queueObserver(l),this._packer.packStruct(x,[],function(l){return n._handleFatalError(l)}),this._chunker.messageBoundary()}},{key:"_queueObserver",value:function(l){return this._isBroken?void(l&&l.onError&&l.onError(this._error)):(l=l||V,l.onCompleted=l.onCompleted||r,l.onError=l.onError||r,l.onNext=l.onNext||r,void(void 0===this._currentObserver?this._currentObserver=l:this._pendingObservers.push(l)))}},{key:"initializationCompleted",value:function(){return this._state.initializationCompleted()}},{key:"sync",value:function(){this._chunker.flush()}},{key:"isOpen",value:function(){return!this._isBroken&&this._ch._open}},{key:"isEncrypted",value:function(){return this._ch.isEncrypted()}},{key:"close",value:function(l){this._ch.close(l)}},{key:"_packable",value:function(l){var n=this;return this._packer.packable(l,function(l){return n._handleFatalError(l)})}},{key:"setServerVersion",value:function(l){this.server.version=l}}]),l}(),X=function(){function l(n){(0,f["default"])(this,l),this._connection=n,this._initialized=!1,this._initializationError=null,this._resolvePromise=null,this._rejectPromise=null}return(0,h["default"])(l,[{key:"wrap",value:function(l){var n=this;return{onNext:function(n){l&&l.onNext&&l.onNext(n)},onError:function(e){n._initializationError=e,n._rejectPromise&&(n._rejectPromise(e),n._rejectPromise=null),l&&l.onError&&l.onError(e)},onCompleted:function(e){e&&e.server&&n._connection.setServerVersion(e.server),n._initialized=!0,n._resolvePromise&&(n._resolvePromise(n._connection),n._resolvePromise=null),l&&l.onCompleted&&l.onCompleted(e)}}}},{key:"initializationCompleted",value:function(){var l=this;return this._initialized?s["default"].resolve(this._connection):this._initializationError?s["default"].reject(this._initializationError):new s["default"](function(n,e){l._resolvePromise=n,l._rejectPromise=e})}}]),l}();e.connect=i,e.Connection=W},{"../graph-types":278,"./../error":277,"./buf":281,"./ch-config":282,"./ch-node":283,"./ch-websocket":284,"./chunking":285,"./packstream":291,"./stream-observer":298,"./util":301,"babel-runtime/core-js/json/stringify":16,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],289:[function(l,n,e){"use strict";function u(l){return t[l]&&t[l]()}Object.defineProperty(e,"__esModule",{value:!0});var t={trust_on_first_use:function(){try{var n=l("tls").TLSSocket.prototype.getPeerCertificate,e=n.length;return e>=1}catch(u){return!1}},trust_all_certificates:function(){try{l("tls").TLSSocket.prototype.getPeerCertificate;return!0}catch(n){return!1}},dns_lookup:function(){try{var n=l("dns").lookup;return!(!n||"function"!=typeof n)}catch(e){return!1}}};e["default"]=u},{dns:64,tls:64}],290:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}function t(l){return o["default"].resolve([l])}function r(l,n){var e=l.address;return n?e+":"+n:e}Object.defineProperty(e,"__esModule",{value:!0}),e.DnsHostNameResolver=e.DummyHostNameResolver=void 0;var i=l("babel-runtime/core-js/promise"),o=u(i),s=l("babel-runtime/core-js/object/get-prototype-of"),a=u(s),f=l("babel-runtime/helpers/possibleConstructorReturn"),c=u(f),h=l("babel-runtime/helpers/inherits"),d=u(h),p=l("babel-runtime/helpers/classCallCheck"),b=u(p),v=l("babel-runtime/helpers/createClass"),_=u(v),y=l("./util"),m=function(){function l(){(0,b["default"])(this,l)}return(0,_["default"])(l,[{key:"resolve",value:function(){throw new Error("Abstract function")}}]),l}();e.DummyHostNameResolver=function(l){function n(){return(0,b["default"])(this,n),(0,c["default"])(this,(n.__proto__||(0,a["default"])(n)).apply(this,arguments))}return(0,d["default"])(n,l),(0,_["default"])(n,[{key:"resolve",value:function(l){return t(l)}}]),n}(m),e.DnsHostNameResolver=function(n){function e(){(0,b["default"])(this,e);var n=(0,c["default"])(this,(e.__proto__||(0,a["default"])(e)).call(this));return n._dns=l("dns"),n}return(0,d["default"])(e,n),(0,_["default"])(e,[{key:"resolve",value:function(l){var n=this,e=(0,y.parseHost)(l),u=(0,y.parsePort)(l);return new o["default"](function(i){n._dns.lookup(e,{all:!0},function(n,e){if(n)i(t(l));else{var o=e.map(function(l){return r(l,u)});i(o)}})})}}]),e}(m)},{"./util":301,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33,dns:64}],291:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0}),e.Structure=e.Unpacker=e.Packer=void 0;var t=l("babel-runtime/core-js/object/keys"),r=u(t),i=l("babel-runtime/helpers/typeof"),o=u(i),s=l("babel-runtime/helpers/classCallCheck"),a=u(s),f=l("babel-runtime/helpers/createClass"),c=u(f),h=l("./utf8"),d=u(h),p=l("../integer"),b=u(p),v=l("./../error"),_=128,y=144,m=160,g=176,w=192,k=193,E=194,S=195,M=200,j=201,I=202,C=203,A=208,x=209,R=210,T=212,B=213,O=214,P=216,U=217,N=218,L=220,D=221,F=function(){function l(n,e){(0,a["default"])(this,l),this.signature=n,this.fields=e}return(0,c["default"])(l,[{key:"toString",value:function(){for(var l="",n=0;n0&&(l+=", "),l+=this.fields[n];return"Structure("+this.signature+", ["+this.fields+"])"}}]),l}(),q=function(){function l(n){(0,a["default"])(this,l),this._ch=n}return(0,c["default"])(l,[{key:"packable",value:function(l,n){var e=this;if(null===l)return function(){return e._ch.writeUInt8(w)};if(l===!0)return function(){return e._ch.writeUInt8(S)};if(l===!1)return function(){return e._ch.writeUInt8(E)};if("number"==typeof l)return function(){return e.packFloat(l)};if("string"==typeof l)return function(){return e.packString(l,n)};if((0,p.isInt)(l))return function(){return e.packInteger(l)};if(l instanceof Array)return function(){e.packListHeader(l.length,n);for(var u=0;u>0),this._ch.writeUInt8(u%256),this._ch.writeBytes(e)):u<4294967296?(this._ch.writeUInt8(R),this._ch.writeUInt8((u/16777216>>0)%256),this._ch.writeUInt8((u/65536>>0)%256),this._ch.writeUInt8((u/256>>0)%256),this._ch.writeUInt8(u%256),this._ch.writeBytes(e)):n((0,v.newError)("UTF-8 strings of size "+u+" are not supported"))}},{key:"packListHeader",value:function(l,n){l<16?this._ch.writeUInt8(y|l):l<256?(this._ch.writeUInt8(T),this._ch.writeUInt8(l)):l<65536?(this._ch.writeUInt8(B),this._ch.writeUInt8((l/256>>0)%256),this._ch.writeUInt8(l%256)):l<4294967296?(this._ch.writeUInt8(O),this._ch.writeUInt8((l/16777216>>0)%256),this._ch.writeUInt8((l/65536>>0)%256),this._ch.writeUInt8((l/256>>0)%256),this._ch.writeUInt8(l%256)):n((0,v.newError)("Lists of size "+l+" are not supported"))}},{key:"packMapHeader",value:function(l,n){l<16?this._ch.writeUInt8(m|l):l<256?(this._ch.writeUInt8(P),this._ch.writeUInt8(l)):l<65536?(this._ch.writeUInt8(U),this._ch.writeUInt8(l/256>>0),this._ch.writeUInt8(l%256)):l<4294967296?(this._ch.writeUInt8(N),this._ch.writeUInt8((l/16777216>>0)%256),this._ch.writeUInt8((l/65536>>0)%256),this._ch.writeUInt8((l/256>>0)%256),this._ch.writeUInt8(l%256)):n((0,v.newError)("Maps of size "+l+" are not supported"))}},{key:"packStructHeader",value:function(l,n,e){l<16?(this._ch.writeUInt8(g|l),this._ch.writeUInt8(n)):l<256?(this._ch.writeUInt8(L),this._ch.writeUInt8(l),this._ch.writeUInt8(n)):l<65536?(this._ch.writeUInt8(D),this._ch.writeUInt8(l/256>>0),this._ch.writeUInt8(l%256)):e((0,v.newError)("Structures of size "+l+" are not supported"))}}]),l}(),z=function(){function l(){(0,a["default"])(this,l),this.structMappers={}}return(0,c["default"])(l,[{key:"unpackList",value:function(l,n){for(var e=[],u=0;u=0&&n<128)return(0,p["int"])(n);if(n>=240&&n<256)return(0,p["int"])(n-256);if(n==M)return(0,p["int"])(l.readInt8());if(n==j)return(0,p["int"])(l.readInt16());if(n==I){var e=l.readInt32();return(0,p["int"])(e)}if(n==C){var u=l.readInt32(),t=l.readInt32();return new b["default"](t,u)}if(n==A)return d["default"].decode(l,l.readUInt8());if(n==x)return d["default"].decode(l,l.readUInt16());if(n==R)return d["default"].decode(l,l.readUInt32());if(n==T)return this.unpackList(l.readUInt8(),l);if(n==B)return this.unpackList(l.readUInt16(),l);if(n==O)return this.unpackList(l.readUInt32(),l);if(n==P)return this.unpackMap(l.readUInt8(),l);if(n==U)return this.unpackMap(l.readUInt16(),l);if(n==N)return this.unpackMap(l.readUInt32(),l);if(n==L)return this.unpackStruct(l.readUInt8(),l);if(n==D)return this.unpackStruct(l.readUInt16(),l);var r=240&n,i=15&n;if(128==r)return d["default"].decode(l,i);if(144==r)return this.unpackList(i,l);if(160==r)return this.unpackMap(i,l);if(176==r)return this.unpackStruct(i,l);throw(0,v.newError)("Unknown packed value with marker "+n.toString(16))}}]),l}();e.Packer=q,e.Unpacker=z,e.Structure=F},{"../integer":280,"./../error":277,"./utf8":300,"babel-runtime/core-js/object/keys":22,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/typeof":35}],292:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0});var t=l("babel-runtime/helpers/classCallCheck"),r=u(t),i=l("babel-runtime/helpers/createClass"),o=u(i),s=function(){function l(n){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){return!0},u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){return!0},t=arguments.length>3&&void 0!==arguments[3]?arguments[3]:50;(0,r["default"])(this,l),this._create=n,this._destroy=e,this._validate=u,this._maxIdle=t,this._pools={},this._release=this._release.bind(this)}return(0,o["default"])(l,[{key:"acquire",value:function(l){var n=void 0,e=this._pools[l];for(e||(e=[],this._pools[l]=e);e.length;){if(n=e.pop(),this._validate(n))return n;this._destroy(n)}return this._create(l,this._release)}},{key:"purge",value:function(l){for(var n=void 0,e=this._pools[l]||[];e.length;)n=e.pop(),this._destroy(n);delete this._pools[l]}},{key:"purgeAll",value:function(){for(var l in this._pools.keys)this._pools.hasOwnPropertykey&&this.purge(l)}},{key:"has",value:function(l){return l in this._pools}},{key:"_release",value:function(l,n){var e=this._pools[l];e&&(e.length>=this._maxIdle||!this._validate(n)?this._destroy(n):e.push(n))}}]),l}();e["default"]=s},{"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],293:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0});var t=l("babel-runtime/core-js/json/stringify"),r=u(t),i=l("babel-runtime/helpers/classCallCheck"),o=u(i),s=l("babel-runtime/helpers/createClass"),a=u(s),f=l("./routing-table"),c=u(f),h=l("../error"),d=function(){function l(n){(0,o["default"])(this,l),this._routingUtil=n}return(0,a["default"])(l,[{key:"lookupRoutingTableOnRouter",value:function(n,e){var u=this;return this._routingUtil.callRoutingProcedure(n,e).then(function(n){if(null===n)return null;if(1!==n.length)throw(0,h.newError)('Illegal response from router "'+e+'". Received '+n.length+" records but expected only one.\n"+(0,r["default"])(n),h.PROTOCOL_ERROR);var t=n[0],i=u._routingUtil.parseTtl(t,e),o=u._routingUtil.parseServers(t,e),s=o.routers,a=o.readers,f=o.writers;return l._assertNonEmpty(s,"routers",e),l._assertNonEmpty(a,"readers",e),new c["default"](s,a,f,i)})}}],[{key:"_assertNonEmpty",value:function(l,n,e){if(l.isEmpty())throw(0,h.newError)("Received no "+n+" from router "+e,h.PROTOCOL_ERROR)}}]),l}();e["default"]=d},{"../error":277,"./routing-table":295,"babel-runtime/core-js/json/stringify":16,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],294:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0});var t=l("babel-runtime/core-js/json/stringify"),r=u(t),i=l("babel-runtime/helpers/classCallCheck"),o=u(i),s=l("babel-runtime/helpers/createClass"),a=u(s),f=function(){function l(n){(0,o["default"])(this,l),this._items=n||[],this._offset=0}return(0,a["default"])(l,[{key:"next",value:function(){if(this.isEmpty())return null;var l=this._offset%this.size();return this._offset++,this._items[l]}},{key:"pushAll",value:function(l){if(!Array.isArray(l))throw new TypeError("Array expected but got: "+l);Array.prototype.push.apply(this._items,l)}},{key:"isEmpty",value:function(){return 0===this._items.length}},{key:"size",value:function(){return this._items.length}},{key:"toArray",value:function(){return this._items}},{key:"remove",value:function(l){this._items=this._items.filter(function(n){return n!==l})}},{key:"toString",value:function(){return(0,r["default"])(this._items)}}]),l}();e["default"]=f},{"babel-runtime/core-js/json/stringify":16,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],295:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0});var t=l("babel-runtime/helpers/toConsumableArray"),r=u(t),i=l("babel-runtime/core-js/array/from"),o=u(i),s=l("babel-runtime/core-js/set"),a=u(s),f=l("babel-runtime/helpers/classCallCheck"),c=u(f),h=l("babel-runtime/helpers/createClass"),d=u(h),p=l("../integer"),b=l("./round-robin-array"),v=u(b),_=l("../driver"),y=1,m=function(){function l(n,e,u,t){(0,c["default"])(this,l),this.routers=n||new v["default"],this.readers=e||new v["default"],this.writers=u||new v["default"],this.expirationTime=t||(0,p["int"])(0)}return(0,d["default"])(l,[{key:"forget",value:function(l){this.readers.remove(l),this.writers.remove(l)}},{key:"forgetRouter",value:function(l){this.routers.remove(l)}},{key:"forgetWriter",value:function(l){this.writers.remove(l)}},{key:"serversDiff",value:function(l){var n=new a["default"](this._allServers()),e=l._allServers();return e.forEach(function(l){return n["delete"](l)}),(0,o["default"])(n)}},{key:"isStaleFor",value:function(l){return this.expirationTime.lessThan(Date.now())||this.routers.size()=0){var i=(0,r["default"])({},m,n._routingContext);l.run(g,i,e)}else l.run(y,{},e)})}}]),l}();e["default"]=k},{"../error":277,"../integer":280,"./round-robin-array":294,"./server-version":297,"babel-runtime/core-js/json/stringify":16,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/defineProperty":30}],297:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}function t(l,n){var e=parseInt(l);if(!e&&0!==e)throw new Error("Unparsable number "+n+": '"+l+"'");return e}function r(l,n){return l0&&void 0!==arguments[0]?arguments[0]:function(l){return l};(0,r["default"])(this,l),this._fieldKeys=null,this._fieldLookup=null,this._queuedRecords=[],this._tail=null,this._error=null,this._hasFailed=!1,this._errorTransformer=n,this._observer=null,this._conn=null}return(0,o["default"])(l,[{key:"onNext",value:function(l){var n=new a["default"](this._fieldKeys,l,this._fieldLookup);this._observer?this._observer.onNext(n):this._queuedRecords.push(n)}},{key:"onCompleted",value:function(l){if(null===this._fieldKeys){if(this._fieldKeys=[],this._fieldLookup={},l.fields&&l.fields.length>0){this._fieldKeys=l.fields;for(var n=0;n0)for(var n=0;nthis._maxRetryTimeMs||!l._canRetryOn(u)?i["default"].reject(u):new i["default"](function(l,u){var t=o._computeDelayWithJitter(r),i=setTimeout(function(){o._inFlightTimeoutIds=o._inFlightTimeoutIds.filter(function(l){return l!==i}),o._executeTransactionInsidePromise(n,e,l,u)},t);o._inFlightTimeoutIds.push(i)})["catch"](function(l){var u=r*o._multiplier;return o._retryTransactionPromise(n,e,l,t,u)})}},{key:"_executeTransactionInsidePromise",value:function(l,n,e,u){try{var t=l(),r=n(t),o=i["default"].resolve(r);o.then(function(l){t.isOpen()?t.commit().then(function(){e(l)})["catch"](function(l){u(l)}):e(l)})["catch"](function(l){u(l)})}catch(s){u(s)}}},{key:"_computeDelayWithJitter",value:function(l){var n=l*this._jitterFactor,e=l-n,u=l+n;return Math.random()*(u-e)+e}},{key:"_verifyAfterConstruction",value:function(){if(this._maxRetryTimeMs<0)throw(0,c.newError)("Max retry time should be >= 0: "+this._maxRetryTimeMs);if(this._initialRetryDelayMs<0)throw(0,c.newError)("Initial retry delay should >= 0: "+this._initialRetryDelayMs);if(this._multiplier<1)throw(0,c.newError)("Multiplier should be >= 1.0: "+this._multiplier);if(this._jitterFactor<0||this._jitterFactor>1)throw(0,c.newError)("Jitter factor should be in [0.0, 1.0]: "+this._jitterFactor)}}],[{key:"_canRetryOn",value:function(l){return l&&l.code&&(l.code===c.SERVICE_UNAVAILABLE||l.code===c.SESSION_EXPIRED||this._isTransientError(l))}},{key:"_isTransientError",value:function(l){var n=l.code;return n.indexOf("TransientError")>=0&&("Neo.TransientError.Transaction.Terminated"!==n&&"Neo.TransientError.Transaction.LockClientStopped"!==n)}}]),l}();e["default"]=v},{"../error":277,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],300:[function(l,n,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var u=l("./buf"),t=l("string_decoder"),r=l("./../error"),i={};try{l.resolve("buffer");var o=new t.StringDecoder("utf8"),s=l("buffer");i={encode:function(l){return new u.NodeBuffer(new s.Buffer(l,"UTF-8"))},decode:function(l,n){if(l instanceof u.NodeBuffer){var e=l.position,t=e+n;return l.position=Math.min(t,l.length),l._buffer.toString("utf8",e,t)}if(l instanceof u.CombinedBuffer){var i=d(l,n,function(l){return o.write(l._buffer)},function(){return o.end()});return i}throw(0,r.newError)("Don't know how to decode strings from `"+l+"`.")}}}catch(a){var f=l("../../external/text-encoding/index"),c=new f.TextEncoder("utf-8"),h=new f.TextDecoder("utf-8");i={encode:function(l){return new u.HeapBuffer(c.encode(l).buffer)},decode:function(l,n){if(l instanceof u.HeapBuffer)return h.decode(l.readView(Math.min(n,l.length-l.position)));for(var e=(0,u.alloc)(n),t=0;t=n.length)return r-=n.length,"";n._updatePos(r-n.position);var u=Math.min(n.length-r,t),i=n.readSlice(u);return n._updatePos(u),t=Math.max(t-i.length,0),r=0,l+e(i)},"");return i+u()};e["default"]=i},{"../../external/text-encoding/index":272,"./../error":277,"./buf":281,buffer:67,string_decoder:269}],301:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}function t(l){if(null===l)return!0;if(!r(l))return!1;for(var n in l)if(l.hasOwnProperty(n))return!1;return!0}function r(l){var n="undefined"==typeof l?"undefined":(0,_["default"])(l);return"function"===n||"object"===n&&Boolean(l)}function i(l,n){if(!o(l))throw new TypeError(n+" expected to be string but was: "+(0,b["default"])(l));return l}function o(l){return"[object String]"===Object.prototype.toString.call(l)}function s(l){i(l,"URL");var n=l.match(g)[1]||"";return n.toLowerCase()}function a(l){return i(l,"URL"),l.match(g)[2]}function f(l){return i(l,"URL"),l.match(g)[3]}function c(l){return i(l,"URL"),l.match(g)[4]}function h(l){var n=l.match(g)[7]||"",e={};return n&&n.split("&").forEach(function(n){var u=n.split("=");if(2!==u.length)throw new Error("Invalid parameters: '"+u+"' in URL '"+l+"'.");var t=d(u[0],"key",l),r=d(u[1],"value",l);if(e[t])throw new Error("Duplicated query parameters with key '"+t+"' in URL '"+l+"'");e[t]=r}),e}function d(l,n,e){var u=l.trim();if(!u)throw new Error("Illegal empty "+n+" in URL query '"+e+"'");return u}Object.defineProperty(e,"__esModule",{value:!0}),e.ENCRYPTION_OFF=e.ENCRYPTION_ON=e.parseRoutingContext=e.parsePort=e.parseHost=e.parseUrl=e.parseScheme=e.assertString=e.isEmptyObjectOrNull=void 0;var p=l("babel-runtime/core-js/json/stringify"),b=u(p),v=l("babel-runtime/helpers/typeof"),_=u(v),y="ENCRYPTION_ON",m="ENCRYPTION_OFF",g=new RegExp(["([^/]+//)?","(([^:/?#]*)","(?::([0-9]+))?)","([^?]*)?","(\\?(.+))?"].join(""));e.isEmptyObjectOrNull=t,e.assertString=i,e.parseScheme=s,e.parseUrl=a,e.parseHost=f,e.parsePort=c,e.parseRoutingContext=h,e.ENCRYPTION_ON=y,e.ENCRYPTION_OFF=m},{"babel-runtime/core-js/json/stringify":16,"babel-runtime/helpers/typeof":35}],302:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}function t(l){var n={};return l.forEach(function(l,e){n[l]=e}),n}Object.defineProperty(e,"__esModule",{value:!0});var r=l("babel-runtime/helpers/classCallCheck"),i=u(r),o=l("babel-runtime/helpers/createClass"),s=u(o),a=l("./error"),f=function(){function l(n,e){var u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;(0,i["default"])(this,l),this.keys=n,this.length=n.length,this._fields=e,this._fieldLookup=u||t(n)}return(0,s["default"])(l,[{key:"forEach",value:function(l){for(var n=0;nthis._fields.length-1||n<0)throw(0,a.newError)("This record has no field with index '"+n+"'. Remember that indexes start at `0`, and make sure your statement returns records in the shape you meant it to.");return this._fields[n]}},{key:"has",value:function(l){return"number"==typeof l?l>=0&&l0}},{key:"nodesCreated",value:function(){return this._stats.nodesCreated}},{key:"nodesDeleted",value:function(){return this._stats.nodesDeleted}},{key:"relationshipsCreated",value:function(){return this._stats.relationshipsCreated}},{key:"relationshipsDeleted",value:function(){return this._stats.relationshipsDeleted}},{key:"propertiesSet",value:function(){return this._stats.propertiesSet}},{key:"labelsAdded",value:function(){return this._stats.labelsAdded}},{key:"labelsRemoved",value:function(){return this._stats.labelsRemoved}},{key:"indexesAdded",value:function(){return this._stats.indexesAdded}},{key:"indexesRemoved",value:function(){return this._stats.indexesRemoved}},{key:"constraintsAdded",value:function(){return this._stats.constraintsAdded}},{key:"constraintsRemoved",value:function(){return this._stats.constraintsRemoved}}]),l}(),b=function(){function l(n){(0,o["default"])(this,l),this.code=n.code,this.title=n.title,this.description=n.description,this.severity=n.severity,this.position=l._constructPosition(n.position)}return(0,a["default"])(l,null,[{key:"_constructPosition",value:function(l){return l?{offset:l.offset.toInt(),line:l.line.toInt(),column:l.column.toInt()}:{}}}]),l}(),v=function g(l){(0,o["default"])(this,g),l&&(this.address=l.address,this.version=l.version)},_={READ_ONLY:"r",READ_WRITE:"rw",WRITE_ONLY:"w",SCHEMA_WRITE:"s"};e.statementType=_,e["default"]=c},{"./integer":280,"babel-runtime/core-js/object/keys":22,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],304:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0});var t=l("babel-runtime/core-js/promise"),r=u(t),i=l("babel-runtime/helpers/classCallCheck"),o=u(i),s=l("babel-runtime/helpers/createClass"),a=u(s),f=l("./result-summary"),c=u(f),h=l("./internal/connection-holder"),d=function(){function l(n,e,u,t,r){(0,o["default"])(this,l),this._streamObserver=n,this._p=null,this._statement=e,this._parameters=u||{},this._metaSupplier=t||function(){return{}},this._connectionHolder=r||h.EMPTY_CONNECTION_HOLDER}return(0,a["default"])(l,[{key:"_createPromise",value:function(){if(!this._p){var l=this;this._p=new r["default"](function(n,e){var u=[],t={onNext:function(l){u.push(l)},onCompleted:function(l){n({records:u,summary:l})},onError:function(l){e(l)}};l.subscribe(t)})}}},{key:"then",value:function(l,n){return this._createPromise(),this._p.then(l,n)}},{key:"catch",value:function(l){return this._createPromise(),this._p["catch"](l)}},{key:"subscribe",value:function(l){var n=this,e=l.onCompleted,u=this,t=function(t){var r=u._metaSupplier();for(var i in r)r.hasOwnProperty(i)&&(t[i]=r[i]);var o=new c["default"](n._statement,n._parameters,t);u._connectionHolder.releaseConnection().then(function(){e.call(l,o)})};l.onCompleted=t;var r=l.onError||function(l){console.log("Uncaught error when processing result: "+l)},i=function(n){u._connectionHolder.releaseConnection().then(function(){r.call(l,n)})};l.onError=i,this._streamObserver.subscribe(l)}}]),l}();e["default"]=d},{"./internal/connection-holder":286,"./result-summary":303,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29}],305:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}Object.defineProperty(e,"__esModule",{value:!0});var t=l("babel-runtime/core-js/object/get-prototype-of"),r=u(t),i=l("babel-runtime/helpers/classCallCheck"),o=u(i),s=l("babel-runtime/helpers/createClass"),a=u(s),f=l("babel-runtime/helpers/possibleConstructorReturn"),c=u(f),h=l("babel-runtime/helpers/inherits"),d=u(h),p=l("./session"),b=u(p),v=l("./driver"),_=l("./error"),y=l("./internal/connection-providers"),m=function(l){function n(l,e,u){var t=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};(0,o["default"])(this,n);var s=(0,c["default"])(this,(n.__proto__||(0,r["default"])(n)).call(this,l,u,t,n._validateConfig(i)));return s._routingContext=e,s}return(0,d["default"])(n,l),(0,a["default"])(n,[{key:"_createConnectionProvider",value:function(l,n,e){return new y.LoadBalancer(l,this._routingContext,n,e)}},{key:"_createSession",value:function(l,e,u,t){var r=this;return new g(l,e,u,t,function(l,e){if(l.code===_.SESSION_EXPIRED)return r._forgetConnection(e),l;if(n._isFailureToWrite(l)){var u="UNKNOWN";return e&&(u=e.url,r._connectionProvider.forgetWriter(e.url)),(0,_.newError)("No longer possible to write to server at "+u,_.SESSION_EXPIRED)}return l})}},{key:"_connectionErrorCode",value:function(){return _.SESSION_EXPIRED}},{key:"_forgetConnection",value:function(l){l&&this._connectionProvider.forget(l.url)}}],[{key:"_validateConfig",value:function(l){if("TRUST_ON_FIRST_USE"===l.trust)throw(0,_.newError)("The chosen trust mode is not compatible with a routing driver");return l}},{key:"_isFailureToWrite",value:function(l){return"Neo.ClientError.Cluster.NotALeader"===l.code||"Neo.ClientError.General.ForbiddenOnReadOnlyDatabase"===l.code}}]),n}(v.Driver),g=function(l){function n(l,e,u,t,i){(0,o["default"])(this,n);var s=(0,c["default"])(this,(n.__proto__||(0,r["default"])(n)).call(this,l,e,u,t));return s._onFailedConnection=i,s}return(0,d["default"])(n,l),(0,a["default"])(n,[{key:"_onRunFailure",value:function(){return this._onFailedConnection}}]),n}(b["default"]);e["default"]=m},{"./driver":276,"./error":277,"./internal/connection-providers":287,"./session":306,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33}],306:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}function t(l){var n=l&&l.maxTransactionRetryTime?l.maxTransactionRetryTime:null;return new O["default"](n)}Object.defineProperty(e,"__esModule",{value:!0});var r=l("babel-runtime/core-js/object/assign"),i=u(r),o=l("babel-runtime/core-js/object/get-prototype-of"),s=u(o),a=l("babel-runtime/helpers/possibleConstructorReturn"),f=u(a),c=l("babel-runtime/helpers/get"),h=u(c),d=l("babel-runtime/helpers/inherits"),p=u(d),b=l("babel-runtime/helpers/typeof"),v=u(b),_=l("babel-runtime/helpers/classCallCheck"),y=u(_),m=l("babel-runtime/helpers/createClass"),g=u(m),w=l("./internal/stream-observer"),k=u(w),E=l("./result"),S=u(E),M=l("./transaction"),j=u(M),I=l("./error"),C=l("./internal/util"),A=l("./internal/connection-holder"),x=u(A),R=l("./driver"),T=u(R),B=l("./internal/transaction-executor"),O=u(B),P=function(){function l(n,e,u,r){(0,y["default"])(this,l),this._mode=n,this._readConnectionHolder=new x["default"](R.READ,e),this._writeConnectionHolder=new x["default"](R.WRITE,e),this._open=!0,this._hasTx=!1,this._lastBookmark=u,this._transactionExecutor=t(r)}return(0,g["default"])(l,[{key:"run",value:function(l){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return"object"===("undefined"==typeof l?"undefined":(0,v["default"])(l))&&l.text&&(n=l.parameters||{},l=l.text),(0,C.assertString)(l,"Cypher statement"),this._run(l,n,function(e,u){return e.run(l,n,u)})}},{key:"_run",value:function(l,n,e){var u=new U(this._onRunFailure()),t=this._connectionHolderWithMode(this._mode);return this._hasTx?u.onError((0,I.newError)("Statements cannot be run directly on a session with an open transaction; either run from within the transaction or use a different session.")):(t.initializeConnection(),t.getConnection().then(function(l){ +u.resolveConnection(l),e(l,u),l.pullAll(u),l.sync()})["catch"](function(l){return u.onError(l)})),new S["default"](u,l,n,function(){return u.meta()},t)}},{key:"beginTransaction",value:function(l){return this._beginTransaction(this._mode,l)}},{key:"_beginTransaction",value:function(l,n){var e=this;if(n&&((0,C.assertString)(n,"Bookmark"),this._updateBookmark(n)),this._hasTx)throw(0,I.newError)("You cannot begin a transaction on a session with an open transaction; either run from within the transaction or use a different session.");var u=T["default"]._validateSessionMode(l),t=this._connectionHolderWithMode(u);return t.initializeConnection(),this._hasTx=!0,new j["default"](t,function(){e._hasTx=!1},this._onRunFailure(),this._lastBookmark,this._updateBookmark.bind(this))}},{key:"lastBookmark",value:function(){return this._lastBookmark}},{key:"readTransaction",value:function(l){return this._runTransaction(R.READ,l)}},{key:"writeTransaction",value:function(l){return this._runTransaction(R.WRITE,l)}},{key:"_runTransaction",value:function(l,n){var e=this;return this._transactionExecutor.execute(function(){return e._beginTransaction(l,e.lastBookmark())},n)}},{key:"_updateBookmark",value:function(l){l&&(this._lastBookmark=l)}},{key:"close",value:function(){var l=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return null};this._open?(this._open=!1,this._transactionExecutor.close(),this._readConnectionHolder.close().then(function(){l._writeConnectionHolder.close().then(function(){n()})})):n()}},{key:"_onRunFailure",value:function(){return function(l){return l}}},{key:"_connectionHolderWithMode",value:function(l){if(l===R.READ)return this._readConnectionHolder;if(l===R.WRITE)return this._writeConnectionHolder;throw(0,I.newError)("Unknown access mode: "+l)}}]),l}(),U=function(l){function n(l){(0,y["default"])(this,n);var e=(0,f["default"])(this,(n.__proto__||(0,s["default"])(n)).call(this,l));return e._meta={},e}return(0,p["default"])(n,l),(0,g["default"])(n,[{key:"onCompleted",value:function(l){(0,h["default"])(n.prototype.__proto__||(0,s["default"])(n.prototype),"onCompleted",this).call(this,l);for(var e in l)l.hasOwnProperty(e)&&(this._meta[e]=l[e])}},{key:"meta",value:function(){var l={server:this._conn.server};return(0,i["default"])({},this._meta,l)}}]),n}(k["default"]);e["default"]=P},{"./driver":276,"./error":277,"./internal/connection-holder":286,"./internal/stream-observer":298,"./internal/transaction-executor":299,"./internal/util":301,"./result":304,"./transaction":307,"babel-runtime/core-js/object/assign":17,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/get":31,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33,"babel-runtime/helpers/typeof":35}],307:[function(l,n,e){"use strict";function u(l){return l&&l.__esModule?l:{"default":l}}function t(l,n,e){return n.getConnection().then(function(n){e.resolveConnection(n),n.run(l,{},e),n.pullAll(e),n.sync()})["catch"](function(l){return e.onError(l)}),new I["default"](e,l,{},o,n)}function r(l,n,e,u){return new I["default"](l,n,e,u,A.EMPTY_CONNECTION_HOLDER)}function i(l,n,e){return new I["default"](l,n,e,o,A.EMPTY_CONNECTION_HOLDER)}function o(){return{}}Object.defineProperty(e,"__esModule",{value:!0});var s=l("babel-runtime/core-js/object/get-prototype-of"),a=u(s),f=l("babel-runtime/helpers/possibleConstructorReturn"),c=u(f),h=l("babel-runtime/helpers/get"),d=u(h),p=l("babel-runtime/helpers/inherits"),b=u(p),v=l("babel-runtime/core-js/promise"),_=u(v),y=l("babel-runtime/helpers/typeof"),m=u(y),g=l("babel-runtime/helpers/classCallCheck"),w=u(g),k=l("babel-runtime/helpers/createClass"),E=u(k),S=l("./internal/stream-observer"),M=u(S),j=l("./result"),I=u(j),C=l("./internal/util"),A=l("./internal/connection-holder"),x=function(){function l(n,e,u,t,r){(0,w["default"])(this,l),this._connectionHolder=n;var i=new R(this),o={};t&&(o={bookmark:t}),this._connectionHolder.getConnection().then(function(l){i.resolveConnection(l),l.run("BEGIN",o,i),l.pullAll(i)})["catch"](function(l){return i.onError(l)}),this._state=T.ACTIVE,this._onClose=e,this._errorTransformer=u,this._onBookmark=r||function(){}}return(0,E["default"])(l,[{key:"run",value:function(l,n){return"object"===("undefined"==typeof l?"undefined":(0,m["default"])(l))&&l.text&&(n=l.parameters||{},l=l.text),(0,C.assertString)(l,"Cypher statement"),this._state.run(this._connectionHolder,new R(this),l,n)}},{key:"commit",value:function(){var l=this._state.commit(this._connectionHolder,new R(this));return this._state=l.state,this._onClose(),l.result}},{key:"rollback",value:function(){var l=this._state.rollback(this._connectionHolder,new R(this));return this._state=l.state,this._onClose(),l.result}},{key:"isOpen",value:function(){return this._state==T.ACTIVE}},{key:"_onError",value:function(){var l=this;return this.isOpen()?this.rollback()["catch"](function(l){}).then(function(){l._state=T.FAILED}):(this._state=T.FAILED,this._onClose(),_["default"].resolve())}}]),l}(),R=function(l){function n(l){(0,w["default"])(this,n);var e=(0,c["default"])(this,(n.__proto__||(0,a["default"])(n)).call(this,l._errorTransformer||function(l){return l}));return e._tx=l,e._hasFailed=!1,e}return(0,b["default"])(n,l),(0,E["default"])(n,[{key:"onError",value:function(l){var e=this;this._hasFailed||this._tx._onError().then(function(){(0,d["default"])(n.prototype.__proto__||(0,a["default"])(n.prototype),"onError",e).call(e,l),e._hasFailed=!0})}},{key:"onCompleted",value:function(l){(0,d["default"])(n.prototype.__proto__||(0,a["default"])(n.prototype),"onCompleted",this).call(this,l);var e=l.bookmark;this._tx._onBookmark(e)}},{key:"serverMeta",value:function e(){var e={server:this._conn.server};return e}}]),n}(M["default"]),T={ACTIVE:{commit:function(l,n){return{result:t("COMMIT",l,n),state:T.SUCCEEDED}},rollback:function(l,n){return{result:t("ROLLBACK",l,n),state:T.ROLLED_BACK}},run:function(l,n,e,u){return l.getConnection().then(function(l){n.resolveConnection(l),l.run(e,u||{},n),l.pullAll(n),l.sync()})["catch"](function(l){return n.onError(l)}),r(n,e,u,function(){return n.serverMeta()})}},FAILED:{commit:function(l,n){return n.onError({error:"Cannot commit statements in this transaction, because previous statements in the transaction has failed and the transaction has been rolled back. Please start a new transaction to run another statement."}),{result:i(n,"COMMIT",{}),state:T.FAILED}},rollback:function(l,n){return n.onError({error:"Cannot rollback transaction, because previous statements in the transaction has failed and the transaction has already been rolled back."}),{result:i(n,"ROLLBACK",{}),state:T.FAILED}},run:function(l,n,e,u){return n.onError({error:"Cannot run statement, because previous statements in the transaction has failed and the transaction has already been rolled back."}),i(n,e,u)}},SUCCEEDED:{commit:function(l,n){return n.onError({error:"Cannot commit statements in this transaction, because commit has already been successfully called on the transaction and transaction has been closed. Please start a new transaction to run another statement."}),{result:i(n,"COMMIT",{}),state:T.SUCCEEDED}},rollback:function(l,n){return n.onError({error:"Cannot rollback transaction, because transaction has already been successfully closed."}),{result:i(n,"ROLLBACK",{}),state:T.SUCCEEDED}},run:function(l,n,e,u){return n.onError({error:"Cannot run statement, because transaction has already been successfully closed."}),i(n,e,u)}},ROLLED_BACK:{commit:function(l,n){return n.onError({error:"Cannot commit this transaction, because it has already been rolled back."}),{result:i(n,"COMMIT",{}),state:T.ROLLED_BACK}},rollback:function(l,n){return n.onError({error:"Cannot rollback transaction, because transaction has already been rolled back."}),{result:i(n,"ROLLBACK",{}),state:T.ROLLED_BACK}},run:function(l,n,e,u){return n.onError({error:"Cannot run statement, because transaction has already been rolled back."}),i(n,e,u)}}};e["default"]=x},{"./internal/connection-holder":286,"./internal/stream-observer":298,"./internal/util":301,"./result":304,"babel-runtime/core-js/object/get-prototype-of":21,"babel-runtime/core-js/promise":24,"babel-runtime/helpers/classCallCheck":28,"babel-runtime/helpers/createClass":29,"babel-runtime/helpers/get":31,"babel-runtime/helpers/inherits":32,"babel-runtime/helpers/possibleConstructorReturn":33,"babel-runtime/helpers/typeof":35}],308:[function(l,n,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e["default"]="0.0.0-dev"},{}]},{},[275])(275)}); \ No newline at end of file diff --git a/lib/browser/neo4j-web.test.js b/lib/browser/neo4j-web.test.js index 5b6ccdae1..b905e0efc 100644 --- a/lib/browser/neo4j-web.test.js +++ b/lib/browser/neo4j-web.test.js @@ -3254,7 +3254,13 @@ var Driver = function () { this._token = token; this._config = config; this._pool = new _pool2.default(this._createConnection.bind(this), this._destroyConnection.bind(this), Driver._validateConnection.bind(this), config.connectionPoolSize); - this._connectionProvider = this._createConnectionProvider(url, this._pool, this._driverOnErrorCallback.bind(this)); + + /** + * Reference to the connection provider. Initialized lazily by {@link _getOrCreateConnectionProvider}. + * @type {ConnectionProvider} + * @private + */ + this._connectionProvider = null; } /** @@ -3267,7 +3273,7 @@ var Driver = function () { key: '_createConnection', value: function _createConnection(url, release) { var sessionId = this._sessionIdGenerator++; - var conn = (0, _connector.connect)(url, this._config); + var conn = (0, _connector.connect)(url, this._config, this._connectionErrorCode()); var streamObserver = new _ConnectionStreamObserver(this, conn); conn.initialize(this._userAgent, this._token, streamObserver); conn._id = sessionId; @@ -3319,23 +3325,42 @@ var Driver = function () { key: 'session', value: function session(mode, bookmark) { var sessionMode = Driver._validateSessionMode(mode); - return this._createSession(sessionMode, this._connectionProvider, bookmark, this._config); + var connectionProvider = this._getOrCreateConnectionProvider(); + return this._createSession(sessionMode, connectionProvider, bookmark, this._config); } }, { key: '_createConnectionProvider', - //Extension point + // Extension point value: function _createConnectionProvider(address, connectionPool, driverOnErrorCallback) { return new _connectionProviders.DirectConnectionProvider(address, connectionPool, driverOnErrorCallback); } - //Extension point + // Extension point }, { key: '_createSession', value: function _createSession(mode, connectionProvider, bookmark, config) { return new _session2.default(mode, connectionProvider, bookmark, config); } + + // Extension point + + }, { + key: '_connectionErrorCode', + value: function _connectionErrorCode() { + // connection errors might result in different error codes depending on the driver + return _error.SERVICE_UNAVAILABLE; + } + }, { + key: '_getOrCreateConnectionProvider', + value: function _getOrCreateConnectionProvider() { + if (!this._connectionProvider) { + var driverOnErrorCallback = this._driverOnErrorCallback.bind(this); + this._connectionProvider = this._createConnectionProvider(this._url, this._pool, driverOnErrorCallback); + } + return this._connectionProvider; + } }, { key: '_driverOnErrorCallback', value: function _driverOnErrorCallback(error) { @@ -3414,8 +3439,9 @@ var _ConnectionStreamObserver = function (_StreamObserver) { if (this._driver.onCompleted) { this._driver.onCompleted(message); } - if (this._conn && message && message.server) { - this._conn.setServerVersion(message.server); + + if (this._observer && this._observer.onComplete) { + this._observer.onCompleted(message); } } }]); @@ -3427,7 +3453,7 @@ exports.READ = READ; exports.WRITE = WRITE; exports.default = Driver; -},{"./error":5,"./internal/connection-providers":15,"./internal/connector":16,"./internal/pool":21,"./internal/stream-observer":25,"./session":33,"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/get":65,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67}],5:[function(require,module,exports){ +},{"./error":5,"./internal/connection-providers":16,"./internal/connector":17,"./internal/pool":21,"./internal/stream-observer":27,"./session":35,"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/get":69,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71}],5:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -3512,7 +3538,7 @@ exports.SERVICE_UNAVAILABLE = SERVICE_UNAVAILABLE; exports.SESSION_EXPIRED = SESSION_EXPIRED; exports.PROTOCOL_ERROR = PROTOCOL_ERROR; -},{"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67}],6:[function(require,module,exports){ +},{"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71}],6:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -3740,7 +3766,7 @@ exports.UnboundRelationship = UnboundRelationship; exports.Path = Path; exports.PathSegment = PathSegment; -},{"babel-runtime/core-js/json/stringify":51,"babel-runtime/core-js/object/keys":57,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],7:[function(require,module,exports){ +},{"babel-runtime/core-js/json/stringify":54,"babel-runtime/core-js/object/keys":60,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],7:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -3776,53 +3802,61 @@ var _version = require('../version'); var _version2 = _interopRequireDefault(_version); -var _connector = require('./internal/connector'); - var _util = require('./internal/util'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + var auth = { basic: function basic(username, password) { var realm = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; if (realm) { - return { scheme: "basic", principal: username, credentials: password, realm: realm }; + return { scheme: 'basic', principal: username, credentials: password, realm: realm }; } else { - return { scheme: "basic", principal: username, credentials: password }; + return { scheme: 'basic', principal: username, credentials: password }; } }, + kerberos: function kerberos(base64EncodedTicket) { + return { + scheme: 'kerberos', + principal: '', // This empty string is required for backwards compatibility. + credentials: base64EncodedTicket + }; + }, custom: function custom(principal, credentials, realm, scheme) { var parameters = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined; if (parameters) { - return { scheme: scheme, principal: principal, credentials: credentials, realm: realm, - parameters: parameters }; + return { + scheme: scheme, principal: principal, credentials: credentials, realm: realm, + parameters: parameters + }; } else { return { scheme: scheme, principal: principal, credentials: credentials, realm: realm }; } } -}; /** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +}; var USER_AGENT = "neo4j-javascript/" + _version2.default; /** @@ -3897,13 +3931,17 @@ function driver(url, authToken) { var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; (0, _util.assertString)(url, 'Bolt URL'); - var scheme = (0, _connector.parseScheme)(url); - if (scheme === "bolt+routing://") { - return new _routingDriver2.default((0, _connector.parseUrl)(url), USER_AGENT, authToken, config); - } else if (scheme === "bolt://") { - return new _driver.Driver((0, _connector.parseUrl)(url), USER_AGENT, authToken, config); + var scheme = (0, _util.parseScheme)(url); + var routingContext = (0, _util.parseRoutingContext)(url); + if (scheme === 'bolt+routing://') { + return new _routingDriver2.default((0, _util.parseUrl)(url), routingContext, USER_AGENT, authToken, config); + } else if (scheme === 'bolt://') { + if (!(0, _util.isEmptyObjectOrNull)(routingContext)) { + throw new Error('Parameters are not supported with scheme \'bolt\'. Given URL: \'' + url + '\''); + } + return new _driver.Driver((0, _util.parseUrl)(url), USER_AGENT, authToken, config); } else { - throw new Error("Unknown scheme: " + scheme); + throw new Error('Unknown scheme: ' + scheme); } } @@ -3956,7 +3994,7 @@ exports.session = session; exports.error = error; exports.default = forExport; -},{"../version":35,"./driver":4,"./error":5,"./graph-types":6,"./integer":8,"./internal/connector":16,"./internal/util":28,"./record":29,"./result":31,"./result-summary":30,"./routing-driver":32}],8:[function(require,module,exports){ +},{"../version":37,"./driver":4,"./error":5,"./graph-types":6,"./integer":8,"./internal/util":30,"./record":31,"./result":33,"./result-summary":32,"./routing-driver":34}],8:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -4936,7 +4974,7 @@ exports.toNumber = toNumber; exports.toString = toString; exports.default = Integer; -},{"./error":5,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],9:[function(require,module,exports){ +},{"./error":5,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],9:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -5721,7 +5759,98 @@ exports.CombinedBuffer = CombinedBuffer; exports.NodeBuffer = NodeBuffer; exports.alloc = alloc; -},{"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/get":65,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67,"buffer":101}],10:[function(require,module,exports){ +},{"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/get":69,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71,"buffer":105}],10:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require('babel-runtime/helpers/createClass'); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _features = require('./features'); + +var _features2 = _interopRequireDefault(_features); + +var _error = require('../error'); + +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; +} + +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var ChannelConfig = function () { + function ChannelConfig(host, port, driverConfig, connectionErrorCode) { + (0, _classCallCheck3.default)(this, ChannelConfig); + + this.host = host; + this.port = port; + this.encrypted = ChannelConfig._extractEncrypted(driverConfig); + this.trust = ChannelConfig._extractTrust(driverConfig); + this.trustedCertificates = ChannelConfig._extractTrustedCertificates(driverConfig); + this.knownHostsPath = ChannelConfig._extractKnownHostsPath(driverConfig); + this.connectionErrorCode = connectionErrorCode || _error.SERVICE_UNAVAILABLE; + } + + (0, _createClass3.default)(ChannelConfig, null, [{ + key: '_extractEncrypted', + value: function _extractEncrypted(driverConfig) { + // check if encryption was configured by the user, use explicit null check because we permit boolean value + var encryptionConfigured = driverConfig.encrypted == null; + // default to using encryption if trust-all-certificates is available + return encryptionConfigured ? (0, _features2.default)('trust_all_certificates') : driverConfig.encrypted; + } + }, { + key: '_extractTrust', + value: function _extractTrust(driverConfig) { + if (driverConfig.trust) { + return driverConfig.trust; + } + // default to using TRUST_ALL_CERTIFICATES if it is available + return (0, _features2.default)('trust_all_certificates') ? 'TRUST_ALL_CERTIFICATES' : 'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES'; + } + }, { + key: '_extractTrustedCertificates', + value: function _extractTrustedCertificates(driverConfig) { + return driverConfig.trustedCertificates || []; + } + }, { + key: '_extractKnownHostsPath', + value: function _extractKnownHostsPath(driverConfig) { + return driverConfig.knownHosts || null; + } + }]); + return ChannelConfig; +}(); + +exports.default = ChannelConfig; +; + +},{"../error":5,"./features":18,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],11:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -5768,7 +5897,12 @@ var observer = { */ var DummyChannel = function () { - function DummyChannel(opts) { + + /** + * @constructor + * @param {ChannelConfig} config - configuration for the new channel. + */ + function DummyChannel(config) { (0, _classCallCheck3.default)(this, DummyChannel); this.written = []; @@ -5808,44 +5942,44 @@ var channel = DummyChannel; exports.channel = channel; exports.observer = observer; -},{"./buf":9,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],11:[function(require,module,exports){ -"use strict"; +},{"./buf":9,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],12:[function(require,module,exports){ +'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var _createClass2 = require("babel-runtime/helpers/createClass"); +var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); -var _net = require("net"); +var _net = require('net'); var _net2 = _interopRequireDefault(_net); -var _tls = require("tls"); +var _tls = require('tls'); var _tls2 = _interopRequireDefault(_tls); -var _fs = require("fs"); +var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); -var _path = require("path"); +var _path = require('path'); var _path2 = _interopRequireDefault(_path); -var _os = require("os"); +var _os = require('os'); -var _buf = require("./buf"); +var _buf = require('./buf'); -var _util = require("./util"); +var _util = require('./util'); -var _error = require("./../error"); +var _error = require('./../error'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; @@ -5951,18 +6085,18 @@ var TrustStrategy = { /** * @deprecated Since version 1.0. Will be deleted in a future version. {@link #TRUST_CUSTOM_CA_SIGNED_CERTIFICATES}. */ - TRUST_SIGNED_CERTIFICATES: function TRUST_SIGNED_CERTIFICATES(opts, onSuccess, onFailure) { + TRUST_SIGNED_CERTIFICATES: function TRUST_SIGNED_CERTIFICATES(config, onSuccess, onFailure) { console.log("`TRUST_SIGNED_CERTIFICATES` has been deprecated as option and will be removed in a future version of " + "the driver. Please use `TRUST_CUSTOM_CA_SIGNED_CERTIFICATES` instead."); - return TrustStrategy.TRUST_CUSTOM_CA_SIGNED_CERTIFICATES(opts, onSuccess, onFailure); + return TrustStrategy.TRUST_CUSTOM_CA_SIGNED_CERTIFICATES(config, onSuccess, onFailure); }, - TRUST_CUSTOM_CA_SIGNED_CERTIFICATES: function TRUST_CUSTOM_CA_SIGNED_CERTIFICATES(opts, onSuccess, onFailure) { - if (!opts.trustedCertificates || opts.trustedCertificates.length == 0) { + TRUST_CUSTOM_CA_SIGNED_CERTIFICATES: function TRUST_CUSTOM_CA_SIGNED_CERTIFICATES(config, onSuccess, onFailure) { + if (!config.trustedCertificates || config.trustedCertificates.length === 0) { onFailure((0, _error.newError)("You are using TRUST_CUSTOM_CA_SIGNED_CERTIFICATES as the method " + "to verify trust for encrypted connections, but have not configured any " + "trustedCertificates. You must specify the path to at least one trusted " + "X.509 certificate for this to work. Two other alternatives is to use " + "TRUST_ALL_CERTIFICATES or to disable encryption by setting encrypted=\"" + _util.ENCRYPTION_OFF + "\"" + "in your driver configuration.")); return; } var tlsOpts = { - ca: opts.trustedCertificates.map(function (f) { + ca: config.trustedCertificates.map(function (f) { return _fs2.default.readFileSync(f); }), // Because we manually check for this in the connect callback, to give @@ -5970,7 +6104,7 @@ var TrustStrategy = { rejectUnauthorized: false }; - var socket = _tls2.default.connect(opts.port, opts.host, tlsOpts, function () { + var socket = _tls2.default.connect(config.port, config.host, tlsOpts, function () { if (!socket.authorized) { onFailure((0, _error.newError)("Server certificate is not trusted. If you trust the database you are connecting to, add" + " the signing certificate, or the server certificate, to the list of certificates trusted by this driver" + " using `neo4j.v1.driver(.., { trustedCertificates:['path/to/certificate.crt']}). This " + " is a security measure to protect against man-in-the-middle attacks. If you are just trying " + " Neo4j out and are not concerned about encryption, simply disable it using `encrypted=\"" + _util.ENCRYPTION_OFF + "\"`" + " in the driver options. Socket responded with: " + socket.authorizationError)); } else { @@ -5980,14 +6114,14 @@ var TrustStrategy = { socket.on('error', onFailure); return socket; }, - TRUST_SYSTEM_CA_SIGNED_CERTIFICATES: function TRUST_SYSTEM_CA_SIGNED_CERTIFICATES(opts, onSuccess, onFailure) { + TRUST_SYSTEM_CA_SIGNED_CERTIFICATES: function TRUST_SYSTEM_CA_SIGNED_CERTIFICATES(config, onSuccess, onFailure) { var tlsOpts = { // Because we manually check for this in the connect callback, to give // a more helpful error to the user rejectUnauthorized: false }; - var socket = _tls2.default.connect(opts.port, opts.host, tlsOpts, function () { + var socket = _tls2.default.connect(config.port, config.host, tlsOpts, function () { if (!socket.authorized) { onFailure((0, _error.newError)("Server certificate is not trusted. If you trust the database you are connecting to, use " + "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES and add" + " the signing certificate, or the server certificate, to the list of certificates trusted by this driver" + " using `neo4j.v1.driver(.., { trustedCertificates:['path/to/certificate.crt']}). This " + " is a security measure to protect against man-in-the-middle attacks. If you are just trying " + " Neo4j out and are not concerned about encryption, simply disable it using `encrypted=\"" + _util.ENCRYPTION_OFF + "\"`" + " in the driver options. Socket responded with: " + socket.authorizationError)); } else { @@ -6000,7 +6134,7 @@ var TrustStrategy = { /** * @deprecated in 1.1 in favour of {@link #TRUST_ALL_CERTIFICATES}. Will be deleted in a future version. */ - TRUST_ON_FIRST_USE: function TRUST_ON_FIRST_USE(opts, onSuccess, onFailure) { + TRUST_ON_FIRST_USE: function TRUST_ON_FIRST_USE(config, onSuccess, onFailure) { console.log("`TRUST_ON_FIRST_USE` has been deprecated as option and will be removed in a future version of " + "the driver. Please use `TRUST_ALL_CERTIFICATES` instead."); var tlsOpts = { @@ -6008,7 +6142,7 @@ var TrustStrategy = { rejectUnauthorized: false }; - var socket = _tls2.default.connect(opts.port, opts.host, tlsOpts, function () { + var socket = _tls2.default.connect(config.port, config.host, tlsOpts, function () { var serverCert = socket.getPeerCertificate( /*raw=*/true); if (!serverCert.raw) { @@ -6021,8 +6155,8 @@ var TrustStrategy = { } var serverFingerprint = require('crypto').createHash('sha512').update(serverCert.raw).digest("hex"); - var knownHostsPath = opts.knownHosts || _path2.default.join(userHome(), ".neo4j", "known_hosts"); - var serverId = opts.host + ":" + opts.port; + var knownHostsPath = config.knownHostsPath || _path2.default.join(userHome(), ".neo4j", "known_hosts"); + var serverId = config.host + ":" + config.port; loadFingerprint(serverId, knownHostsPath, function (knownFingerprint) { if (knownFingerprint === serverFingerprint) { @@ -6043,11 +6177,11 @@ var TrustStrategy = { return socket; }, - TRUST_ALL_CERTIFICATES: function TRUST_ALL_CERTIFICATES(opts, onSuccess, onFailure) { + TRUST_ALL_CERTIFICATES: function TRUST_ALL_CERTIFICATES(config, onSuccess, onFailure) { var tlsOpts = { rejectUnauthorized: false }; - var socket = _tls2.default.connect(opts.port, opts.host, tlsOpts, function () { + var socket = _tls2.default.connect(config.port, config.host, tlsOpts, function () { var certificate = socket.getPeerCertificate(); if ((0, _util.isEmptyObjectOrNull)(certificate)) { onFailure((0, _error.newError)("Secure connection was successful but server did not return any valid " + "certificates. Such connection can not be trusted. If you are just trying " + " Neo4j out and are not concerned about encryption, simply disable it using " + "`encrypted=\"" + _util.ENCRYPTION_OFF + "\"` in the driver options. " + "Socket responded with: " + socket.authorizationError)); @@ -6060,20 +6194,27 @@ var TrustStrategy = { } }; -function connect(opts, onSuccess) { +/** + * Connect using node socket. + * @param {ChannelConfig} config - configuration of this channel. + * @param {function} onSuccess - callback to execute on connection success. + * @param {function} onFailure - callback to execute on connection failure. + * @return {*} socket connection. + */ +function connect(config, onSuccess) { var onFailure = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () { return null; }; //still allow boolean for backwards compatibility - if (opts.encrypted === false || opts.encrypted === _util.ENCRYPTION_OFF) { - var conn = _net2.default.connect(opts.port, opts.host, onSuccess); + if (config.encrypted === false || config.encrypted === _util.ENCRYPTION_OFF) { + var conn = _net2.default.connect(config.port, config.host, onSuccess); conn.on('error', onFailure); return conn; - } else if (TrustStrategy[opts.trust]) { - return TrustStrategy[opts.trust](opts, onSuccess, onFailure); + } else if (TrustStrategy[config.trust]) { + return TrustStrategy[config.trust](config, onSuccess, onFailure); } else { - onFailure((0, _error.newError)("Unknown trust strategy: " + opts.trust + ". Please use either " + "trust:'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES' or trust:'TRUST_ALL_CERTIFICATES' in your driver " + "configuration. Alternatively, you can disable encryption by setting " + "`encrypted:\"" + _util.ENCRYPTION_OFF + "\"`. There is no mechanism to use encryption without trust verification, " + "because this incurs the overhead of encryption without improving security. If " + "the driver does not verify that the peer it is connected to is really Neo4j, it " + "is very easy for an attacker to bypass the encryption by pretending to be Neo4j.")); + onFailure((0, _error.newError)("Unknown trust strategy: " + config.trust + ". Please use either " + "trust:'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES' or trust:'TRUST_ALL_CERTIFICATES' in your driver " + "configuration. Alternatively, you can disable encryption by setting " + "`encrypted:\"" + _util.ENCRYPTION_OFF + "\"`. There is no mechanism to use encryption without trust verification, " + "because this incurs the overhead of encryption without improving security. If " + "the driver does not verify that the peer it is connected to is really Neo4j, it " + "is very easy for an attacker to bypass the encryption by pretending to be Neo4j.")); } } @@ -6087,11 +6228,9 @@ var NodeChannel = function () { /** * Create new instance - * @param {Object} opts - Options object - * @param {string} opts.host - The host, including protocol to connect to. - * @param {Integer} opts.port - The port to use. + * @param {ChannelConfig} config - configuration for this channel. */ - function NodeChannel(opts) { + function NodeChannel(config) { (0, _classCallCheck3.default)(this, NodeChannel); var self = this; @@ -6103,9 +6242,10 @@ var NodeChannel = function () { this._error = null; this._handleConnectionError = this._handleConnectionError.bind(this); this._handleConnectionTerminated = this._handleConnectionTerminated.bind(this); + this._connectionErrorCode = config.connectionErrorCode; - this._encrypted = opts.encrypted; - this._conn = connect(opts, function () { + this._encrypted = config.encrypted; + this._conn = connect(config, function () { if (!self._open) { return; } @@ -6129,24 +6269,24 @@ var NodeChannel = function () { } (0, _createClass3.default)(NodeChannel, [{ - key: "_handleConnectionError", + key: '_handleConnectionError', value: function _handleConnectionError(err) { var msg = err.message || 'Failed to connect to server'; - this._error = (0, _error.newError)(msg, _error.SESSION_EXPIRED); + this._error = (0, _error.newError)(msg, this._connectionErrorCode); if (this.onerror) { this.onerror(this._error); } } }, { - key: "_handleConnectionTerminated", + key: '_handleConnectionTerminated', value: function _handleConnectionTerminated() { - this._error = (0, _error.newError)('Connection was closed by server', _error.SESSION_EXPIRED); + this._error = (0, _error.newError)('Connection was closed by server', this._connectionErrorCode); if (this.onerror) { this.onerror(this._error); } } }, { - key: "isEncrypted", + key: 'isEncrypted', value: function isEncrypted() { return this._encrypted; } @@ -6157,7 +6297,7 @@ var NodeChannel = function () { */ }, { - key: "write", + key: 'write', value: function write(buffer) { // If there is a pending queue, push this on that queue. This means // we are not yet connected, so we queue things locally. @@ -6177,7 +6317,7 @@ var NodeChannel = function () { */ }, { - key: "close", + key: 'close', value: function close() { var cb = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () { return null; @@ -6207,7 +6347,7 @@ try { exports.default = _nodeChannelModule; -},{"./../error":5,"./buf":9,"./util":28,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"crypto":220,"fs":98,"net":98,"os":265,"path":271,"readline":98,"tls":98}],12:[function(require,module,exports){ +},{"./../error":5,"./buf":9,"./util":30,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"crypto":225,"fs":102,"net":102,"os":307,"path":313,"readline":102,"tls":102}],13:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -6240,31 +6380,30 @@ var WebSocketChannel = function () { /** * Create new instance - * @param {Object} opts - Options object - * @param {string} opts.host - The host, including protocol to connect to. - * @param {Integer} opts.port - The port to use. + * @param {ChannelConfig} config - configuration for this channel. */ - function WebSocketChannel(opts) { + function WebSocketChannel(config) { (0, _classCallCheck3.default)(this, WebSocketChannel); this._open = true; this._pending = []; this._error = null; this._handleConnectionError = this._handleConnectionError.bind(this); + this._connectionErrorCode = config.connectionErrorCode; - this._encrypted = opts.encrypted; + this._encrypted = config.encrypted; var scheme = "ws"; //Allow boolean for backwards compatibility - if (opts.encrypted === true || opts.encrypted === _util.ENCRYPTION_ON) { - if (!opts.trust || opts.trust === "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES") { + if (config.encrypted === true || config.encrypted === _util.ENCRYPTION_ON) { + if (!config.trust || config.trust === 'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES') { scheme = "wss"; } else { - this._error = (0, _error.newError)("The browser version of this driver only supports one trust " + "strategy, 'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES'. " + opts.trust + " is not supported. Please " + "either use TRUST_CUSTOM_CA_SIGNED_CERTIFICATES or disable encryption by setting " + "`encrypted:\"" + _util.ENCRYPTION_OFF + "\"` in the driver configuration."); + this._error = (0, _error.newError)("The browser version of this driver only supports one trust " + 'strategy, \'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES\'. ' + config.trust + ' is not supported. Please ' + "either use TRUST_CUSTOM_CA_SIGNED_CERTIFICATES or disable encryption by setting " + "`encrypted:\"" + _util.ENCRYPTION_OFF + "\"` in the driver configuration."); return; } } - this._url = scheme + "://" + opts.host + ":" + opts.port; + this._url = scheme + '://' + config.host + ':' + config.port; this._ws = new WebSocket(this._url); this._ws.binaryType = "arraybuffer"; @@ -6300,7 +6439,7 @@ var WebSocketChannel = function () { // onerror triggers on websocket close as well.. don't get me started. if (this._open) { // http://stackoverflow.com/questions/25779831/how-to-catch-websocket-connection-to-ws-xxxnn-failed-connection-closed-be - this._error = (0, _error.newError)("WebSocket connection failure. Due to security " + "constraints in your web browser, the reason for the failure is not available " + "to this Neo4j Driver. Please use your browsers development console to determine " + "the root cause of the failure. Common reasons include the database being " + "unavailable, using the wrong connection URL or temporary network problems. " + "If you have enabled encryption, ensure your browser is configured to trust the " + "certificate Neo4j is configured to use. WebSocket `readyState` is: " + this._ws.readyState); + this._error = (0, _error.newError)("WebSocket connection failure. Due to security " + "constraints in your web browser, the reason for the failure is not available " + "to this Neo4j Driver. Please use your browsers development console to determine " + "the root cause of the failure. Common reasons include the database being " + "unavailable, using the wrong connection URL or temporary network problems. " + "If you have enabled encryption, ensure your browser is configured to trust the " + "certificate Neo4j is configured to use. WebSocket `readyState` is: " + this._ws.readyState, this._connectionErrorCode); if (this.onerror) { this.onerror(this._error); } @@ -6373,7 +6512,7 @@ var _websocketChannelModule = { channel: WebSocketChannel, available: available exports.default = _websocketChannelModule; -},{"./../error":5,"./buf":9,"./util":28,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],13:[function(require,module,exports){ +},{"./../error":5,"./buf":9,"./util":30,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],14:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -6641,7 +6780,7 @@ var Dechunker = function () { exports.Chunker = Chunker; exports.Dechunker = Dechunker; -},{"./buf":9,"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67}],14:[function(require,module,exports){ +},{"./buf":9,"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71}],15:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -6847,7 +6986,7 @@ var EmptyConnectionHolder = function (_ConnectionHolder) { var EMPTY_CONNECTION_HOLDER = exports.EMPTY_CONNECTION_HOLDER = new EmptyConnectionHolder(); -},{"../error":5,"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/core-js/promise":59,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67}],15:[function(require,module,exports){ +},{"../error":5,"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71}],16:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -6905,29 +7044,14 @@ var _features2 = _interopRequireDefault(_features); var _hostNameResolvers = require('./host-name-resolvers'); +var _routingUtil = require('./routing-util'); + +var _routingUtil2 = _interopRequireDefault(_routingUtil); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -/** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - var ConnectionProvider = function () { function ConnectionProvider() { (0, _classCallCheck3.default)(this, ConnectionProvider); @@ -6951,7 +7075,24 @@ var ConnectionProvider = function () { } }]); return ConnectionProvider; -}(); +}(); /** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ var DirectConnectionProvider = exports.DirectConnectionProvider = function (_ConnectionProvider) { (0, _inherits3.default)(DirectConnectionProvider, _ConnectionProvider); @@ -6981,32 +7122,33 @@ var DirectConnectionProvider = exports.DirectConnectionProvider = function (_Con var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { (0, _inherits3.default)(LoadBalancer, _ConnectionProvider2); - function LoadBalancer(address, connectionPool, driverOnErrorCallback) { + function LoadBalancer(address, routingContext, connectionPool, driverOnErrorCallback) { (0, _classCallCheck3.default)(this, LoadBalancer); var _this2 = (0, _possibleConstructorReturn3.default)(this, (LoadBalancer.__proto__ || (0, _getPrototypeOf2.default)(LoadBalancer)).call(this)); _this2._seedRouter = address; _this2._routingTable = new _routingTable2.default(new _roundRobinArray2.default([_this2._seedRouter])); - _this2._rediscovery = new _rediscovery2.default(); + _this2._rediscovery = new _rediscovery2.default(new _routingUtil2.default(routingContext)); _this2._connectionPool = connectionPool; _this2._driverOnErrorCallback = driverOnErrorCallback; _this2._hostNameResolver = LoadBalancer._createHostNameResolver(); + _this2._useSeedRouter = false; return _this2; } (0, _createClass3.default)(LoadBalancer, [{ key: 'acquireConnection', - value: function acquireConnection(mode) { + value: function acquireConnection(accessMode) { var _this3 = this; - var connectionPromise = this._freshRoutingTable().then(function (routingTable) { - if (mode === _driver.READ) { + var connectionPromise = this._freshRoutingTable(accessMode).then(function (routingTable) { + if (accessMode === _driver.READ) { return _this3._acquireConnectionToServer(routingTable.readers, 'read'); - } else if (mode === _driver.WRITE) { + } else if (accessMode === _driver.WRITE) { return _this3._acquireConnectionToServer(routingTable.writers, 'write'); } else { - throw (0, _error.newError)('Illegal mode ' + mode); + throw (0, _error.newError)('Illegal mode ' + accessMode); } }); return this._withAdditionalOnErrorCallback(connectionPromise, this._driverOnErrorCallback); @@ -7027,16 +7169,16 @@ var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { value: function _acquireConnectionToServer(serversRoundRobinArray, serverName) { var address = serversRoundRobinArray.next(); if (!address) { - return _promise2.default.reject((0, _error.newError)('No ' + serverName + ' servers available', _error.SESSION_EXPIRED)); + return _promise2.default.reject((0, _error.newError)('Failed to obtain connection towards ' + serverName + ' server. Known routing table is: ' + this._routingTable, _error.SESSION_EXPIRED)); } return this._connectionPool.acquire(address); } }, { key: '_freshRoutingTable', - value: function _freshRoutingTable() { + value: function _freshRoutingTable(accessMode) { var currentRoutingTable = this._routingTable; - if (!currentRoutingTable.isStale()) { + if (!currentRoutingTable.isStaleFor(accessMode)) { return _promise2.default.resolve(currentRoutingTable); } return this._refreshRoutingTable(currentRoutingTable); @@ -7044,60 +7186,90 @@ var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { }, { key: '_refreshRoutingTable', value: function _refreshRoutingTable(currentRoutingTable) { - var _this4 = this; - var knownRouters = currentRoutingTable.routers.toArray(); - return this._fetchNewRoutingTable(knownRouters, currentRoutingTable).then(function (newRoutingTable) { - if (LoadBalancer._isValidRoutingTable(newRoutingTable)) { - // one of the known routers returned a valid routing table - use it + if (this._useSeedRouter) { + return this._fetchRoutingTableFromSeedRouterFallbackToKnownRouters(knownRouters, currentRoutingTable); + } + return this._fetchRoutingTableFromKnownRoutersFallbackToSeedRouter(knownRouters, currentRoutingTable); + } + }, { + key: '_fetchRoutingTableFromSeedRouterFallbackToKnownRouters', + value: function _fetchRoutingTableFromSeedRouterFallbackToKnownRouters(knownRouters, currentRoutingTable) { + var _this4 = this; + + // we start with seed router, no routers were probed before + var seenRouters = []; + return this._fetchRoutingTableUsingSeedRouter(seenRouters, this._seedRouter).then(function (newRoutingTable) { + if (newRoutingTable) { + _this4._useSeedRouter = false; return newRoutingTable; } - if (!newRoutingTable) { - // returned routing table was undefined, this means a connection error happened and the last known - // router did not return a valid routing table, so we need to forget it - var lastRouterIndex = knownRouters.length - 1; - LoadBalancer._forgetRouter(currentRoutingTable, knownRouters, lastRouterIndex); + // seed router did not return a valid routing table - try to use other known routers + return _this4._fetchRoutingTableUsingKnownRouters(knownRouters, currentRoutingTable); + }).then(function (newRoutingTable) { + _this4._applyRoutingTableIfPossible(newRoutingTable); + return newRoutingTable; + }); + } + }, { + key: '_fetchRoutingTableFromKnownRoutersFallbackToSeedRouter', + value: function _fetchRoutingTableFromKnownRoutersFallbackToSeedRouter(knownRouters, currentRoutingTable) { + var _this5 = this; + + return this._fetchRoutingTableUsingKnownRouters(knownRouters, currentRoutingTable).then(function (newRoutingTable) { + if (newRoutingTable) { + return newRoutingTable; } // none of the known routers returned a valid routing table - try to use seed router address for rediscovery - return _this4._fetchNewRoutingTableUsingSeedRouterAddress(knownRouters, _this4._seedRouter); + return _this5._fetchRoutingTableUsingSeedRouter(knownRouters, _this5._seedRouter); }).then(function (newRoutingTable) { - if (LoadBalancer._isValidRoutingTable(newRoutingTable)) { - _this4._updateRoutingTable(newRoutingTable); + _this5._applyRoutingTableIfPossible(newRoutingTable); + return newRoutingTable; + }); + } + }, { + key: '_fetchRoutingTableUsingKnownRouters', + value: function _fetchRoutingTableUsingKnownRouters(knownRouters, currentRoutingTable) { + return this._fetchRoutingTable(knownRouters, currentRoutingTable).then(function (newRoutingTable) { + if (newRoutingTable) { + // one of the known routers returned a valid routing table - use it return newRoutingTable; } - // none of the existing routers returned valid routing table, throw exception - throw (0, _error.newError)('Could not perform discovery. No routing servers available.', _error.SERVICE_UNAVAILABLE); + // returned routing table was undefined, this means a connection error happened and the last known + // router did not return a valid routing table, so we need to forget it + var lastRouterIndex = knownRouters.length - 1; + LoadBalancer._forgetRouter(currentRoutingTable, knownRouters, lastRouterIndex); + + return null; }); } }, { - key: '_fetchNewRoutingTableUsingSeedRouterAddress', - value: function _fetchNewRoutingTableUsingSeedRouterAddress(knownRouters, seedRouter) { - var _this5 = this; + key: '_fetchRoutingTableUsingSeedRouter', + value: function _fetchRoutingTableUsingSeedRouter(seenRouters, seedRouter) { + var _this6 = this; return this._hostNameResolver.resolve(seedRouter).then(function (resolvedRouterAddresses) { // filter out all addresses that we've already tried var newAddresses = resolvedRouterAddresses.filter(function (address) { - return knownRouters.indexOf(address) < 0; + return seenRouters.indexOf(address) < 0; }); - return _this5._fetchNewRoutingTable(newAddresses, null); + return _this6._fetchRoutingTable(newAddresses, null); }); } }, { - key: '_fetchNewRoutingTable', - value: function _fetchNewRoutingTable(routerAddresses, routingTable) { - var _this6 = this; + key: '_fetchRoutingTable', + value: function _fetchRoutingTable(routerAddresses, routingTable) { + var _this7 = this; return routerAddresses.reduce(function (refreshedTablePromise, currentRouter, currentIndex) { return refreshedTablePromise.then(function (newRoutingTable) { if (newRoutingTable) { - if (!newRoutingTable.writers.isEmpty()) { - // valid routing table was fetched - just return it, try next router otherwise - return newRoutingTable; - } + // valid routing table was fetched - just return it, try next router otherwise + return newRoutingTable; } else { // returned routing table was undefined, this means a connection error happened and we need to forget the // previous router and try the next one @@ -7106,8 +7278,8 @@ var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { } // try next router - var session = _this6._createSessionForRediscovery(currentRouter); - return _this6._rediscovery.lookupRoutingTableOnRouter(session, currentRouter); + var session = _this7._createSessionForRediscovery(currentRouter); + return _this7._rediscovery.lookupRoutingTableOnRouter(session, currentRouter); }); }, _promise2.default.resolve(null)); } @@ -7115,32 +7287,45 @@ var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { key: '_createSessionForRediscovery', value: function _createSessionForRediscovery(routerAddress) { var connection = this._connectionPool.acquire(routerAddress); - var connectionPromise = _promise2.default.resolve(connection); - var connectionProvider = new SingleConnectionProvider(connectionPromise); + // initialized connection is required for routing procedure call + // server version needs to be known to decide which routing procedure to use + var initializedConnectionPromise = connection.initializationCompleted(); + var connectionProvider = new SingleConnectionProvider(initializedConnectionPromise); return new _session2.default(_driver.READ, connectionProvider); } + }, { + key: '_applyRoutingTableIfPossible', + value: function _applyRoutingTableIfPossible(newRoutingTable) { + if (!newRoutingTable) { + // none of routing servers returned valid routing table, throw exception + throw (0, _error.newError)('Could not perform discovery. No routing servers available. Known routing table: ' + this._routingTable, _error.SERVICE_UNAVAILABLE); + } + + if (newRoutingTable.writers.isEmpty()) { + // use seed router next time. this is important when cluster is partitioned. it tries to make sure driver + // does not always get routing table without writers because it talks exclusively to a minority partition + this._useSeedRouter = true; + } + + this._updateRoutingTable(newRoutingTable); + } }, { key: '_updateRoutingTable', value: function _updateRoutingTable(newRoutingTable) { - var _this7 = this; + var _this8 = this; var currentRoutingTable = this._routingTable; // close old connections to servers not present in the new routing table var staleServers = currentRoutingTable.serversDiff(newRoutingTable); staleServers.forEach(function (server) { - return _this7._connectionPool.purge(server); + return _this8._connectionPool.purge(server); }); // make this driver instance aware of the new table this._routingTable = newRoutingTable; } }], [{ - key: '_isValidRoutingTable', - value: function _isValidRoutingTable(routingTable) { - return routingTable && !routingTable.writers.isEmpty(); - } - }, { key: '_forgetRouter', value: function _forgetRouter(routingTable, routersArray, routerIndex) { var address = routersArray[routerIndex]; @@ -7166,10 +7351,10 @@ var SingleConnectionProvider = exports.SingleConnectionProvider = function (_Con function SingleConnectionProvider(connectionPromise) { (0, _classCallCheck3.default)(this, SingleConnectionProvider); - var _this8 = (0, _possibleConstructorReturn3.default)(this, (SingleConnectionProvider.__proto__ || (0, _getPrototypeOf2.default)(SingleConnectionProvider)).call(this)); + var _this9 = (0, _possibleConstructorReturn3.default)(this, (SingleConnectionProvider.__proto__ || (0, _getPrototypeOf2.default)(SingleConnectionProvider)).call(this)); - _this8._connectionPromise = connectionPromise; - return _this8; + _this9._connectionPromise = connectionPromise; + return _this9; } (0, _createClass3.default)(SingleConnectionProvider, [{ @@ -7183,13 +7368,17 @@ var SingleConnectionProvider = exports.SingleConnectionProvider = function (_Con return SingleConnectionProvider; }(ConnectionProvider); -},{"../driver":4,"../error":5,"../session":33,"./features":17,"./host-name-resolvers":19,"./rediscovery":22,"./round-robin-array":23,"./routing-table":24,"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/core-js/promise":59,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67}],16:[function(require,module,exports){ +},{"../driver":4,"../error":5,"../session":35,"./features":18,"./host-name-resolvers":19,"./rediscovery":22,"./round-robin-array":23,"./routing-table":24,"./routing-util":25,"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71}],17:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); -exports.Connection = exports.parsePort = exports.parseHost = exports.parseUrl = exports.parseScheme = exports.connect = undefined; +exports.Connection = exports.connect = undefined; + +var _promise = require('babel-runtime/core-js/promise'); + +var _promise2 = _interopRequireDefault(_promise); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); @@ -7213,10 +7402,6 @@ var _chNode2 = _interopRequireDefault(_chNode); var _chunking = require('./chunking'); -var _features = require('./features'); - -var _features2 = _interopRequireDefault(_features); - var _packstream = require('./packstream'); var _buf = require('./buf'); @@ -7225,6 +7410,16 @@ var _graphTypes = require('../graph-types'); var _error = require('./../error'); +var _chConfig = require('./ch-config'); + +var _chConfig2 = _interopRequireDefault(_chConfig); + +var _util = require('./util'); + +var _streamObserver = require('./stream-observer'); + +var _streamObserver2 = _interopRequireDefault(_streamObserver); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -7247,6 +7442,7 @@ function _interopRequireDefault(obj) { * See the License for the specific language governing permissions and * limitations under the License. */ + var Channel = void 0; if (_chNode2.default.available) { Channel = _chNode2.default.channel; @@ -7300,28 +7496,6 @@ NODE = 0x4E, MAGIC_PREAMBLE = 0x6060B017, DEBUG = false; -var URLREGEX = new RegExp(["([^/]+//)?", // scheme -"(([^:/?#]*)", // hostname -"(?::([0-9]+))?)", // port (optional) -".*"].join("")); // everything else - -function parseScheme(url) { - var scheme = url.match(URLREGEX)[1] || ''; - return scheme.toLowerCase(); -} - -function parseUrl(url) { - return url.match(URLREGEX)[2]; -} - -function parseHost(url) { - return url.match(URLREGEX)[3]; -} - -function parsePort(url) { - return url.match(URLREGEX)[4]; -} - /** * Very rudimentary log handling, should probably be replaced by something proper at some point. * @param actor the part that sent the message, 'S' for server and 'C' for client @@ -7444,6 +7618,8 @@ var Connection = function () { this._isHandlingFailure = false; this._currentFailure = null; + this._state = new ConnectionState(this); + // Set to true on fatal errors, to get this out of session pool. this._isBroken = false; @@ -7598,7 +7774,8 @@ var Connection = function () { var _this2 = this; log("C", "INIT", clientName, token); - this._queueObserver(observer); + var initObserver = this._state.wrap(observer); + this._queueObserver(initObserver); this._packer.packStruct(INIT, [this._packable(clientName), this._packable(token)], function (err) { return _this2._handleFatalError(err); }); @@ -7727,6 +7904,18 @@ var Connection = function () { } } + /** + * Get promise resolved when connection initialization succeed or rejected when it fails. + * Connection is initialized using {@link initialize} function. + * @return {Promise} the result of connection initialization. + */ + + }, { + key: 'initializationCompleted', + value: function initializationCompleted() { + return this._state.initializationCompleted(); + } + /** * Synchronize - flush all queued outgoing messages and route their responses * to their respective handlers. @@ -7779,42 +7968,118 @@ var Connection = function () { return Connection; }(); +var ConnectionState = function () { + + /** + * @constructor + * @param {Connection} connection the connection to track state for. + */ + function ConnectionState(connection) { + (0, _classCallCheck3.default)(this, ConnectionState); + + this._connection = connection; + + this._initialized = false; + this._initializationError = null; + + this._resolvePromise = null; + this._rejectPromise = null; + } + + /** + * Wrap the given observer to track connection's initialization state. + * @param {StreamObserver} observer the observer used for INIT message. + * @return {StreamObserver} updated observer. + */ + + (0, _createClass3.default)(ConnectionState, [{ + key: 'wrap', + value: function wrap(observer) { + var _this10 = this; + + return { + onNext: function onNext(record) { + if (observer && observer.onNext) { + observer.onNext(record); + } + }, + onError: function onError(error) { + _this10._initializationError = error; + if (_this10._rejectPromise) { + _this10._rejectPromise(error); + _this10._rejectPromise = null; + } + if (observer && observer.onError) { + observer.onError(error); + } + }, + onCompleted: function onCompleted(metaData) { + if (metaData && metaData.server) { + _this10._connection.setServerVersion(metaData.server); + } + _this10._initialized = true; + if (_this10._resolvePromise) { + _this10._resolvePromise(_this10._connection); + _this10._resolvePromise = null; + } + if (observer && observer.onCompleted) { + observer.onCompleted(metaData); + } + } + }; + } + + /** + * Get promise resolved when connection initialization succeed or rejected when it fails. + * @return {Promise} the result of connection initialization. + */ + + }, { + key: 'initializationCompleted', + value: function initializationCompleted() { + var _this11 = this; + + if (this._initialized) { + return _promise2.default.resolve(this._connection); + } else if (this._initializationError) { + return _promise2.default.reject(this._initializationError); + } else { + return new _promise2.default(function (resolve, reject) { + _this11._resolvePromise = resolve; + _this11._rejectPromise = reject; + }); + } + } + }]); + return ConnectionState; +}(); + /** * Crete new connection to the provided url. * @access private * @param {string} url - 'neo4j'-prefixed URL to Neo4j Bolt endpoint - * @param {object} config + * @param {object} config - this driver configuration + * @param {string=null} connectionErrorCode - error code for errors raised on connection errors * @return {Connection} - New connection */ function connect(url) { var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var connectionErrorCode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var Ch = config.channel || Channel; - var host = parseHost(url); - var port = parsePort(url) || 7687; + var host = (0, _util.parseHost)(url); + var port = (0, _util.parsePort)(url) || 7687; var completeUrl = host + ':' + port; + var channelConfig = new _chConfig2.default(host, port, config, connectionErrorCode); - return new Connection(new Ch({ - host: parseHost(url), - port: parsePort(url) || 7687, - // Default to using encryption if trust-on-first-use is available - encrypted: config.encrypted == null ? (0, _features2.default)("trust_all_certificates") : config.encrypted, - // Default to using TRUST_ALL_CERTIFICATES if it is available - trust: config.trust || ((0, _features2.default)("trust_all_certificates") ? "TRUST_ALL_CERTIFICATES" : "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES"), - trustedCertificates: config.trustedCertificates || [], - knownHosts: config.knownHosts - }), completeUrl); + return new Connection(new Ch(channelConfig), completeUrl); } exports.connect = connect; -exports.parseScheme = parseScheme; -exports.parseUrl = parseUrl; -exports.parseHost = parseHost; -exports.parsePort = parsePort; exports.Connection = Connection; -},{"../graph-types":6,"./../error":5,"./buf":9,"./ch-node":11,"./ch-websocket":12,"./chunking":13,"./features":17,"./packstream":20,"babel-runtime/core-js/json/stringify":51,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],17:[function(require,module,exports){ +},{"../graph-types":6,"./../error":5,"./buf":9,"./ch-config":10,"./ch-node":12,"./ch-websocket":13,"./chunking":14,"./packstream":20,"./stream-observer":27,"./util":30,"babel-runtime/core-js/json/stringify":54,"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],18:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -7882,137 +8147,7 @@ function hasFeature(name) { exports.default = hasFeature; -},{"dns":98,"tls":98}],18:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _stringify = require('babel-runtime/core-js/json/stringify'); - -var _stringify2 = _interopRequireDefault(_stringify); - -var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require('babel-runtime/helpers/createClass'); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _roundRobinArray = require('./round-robin-array'); - -var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); - -var _error = require('../error'); - -var _integer = require('../integer'); - -var _integer2 = _interopRequireDefault(_integer); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; -} - -var PROCEDURE_CALL = 'CALL dbms.cluster.routing.getServers'; /** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -var PROCEDURE_NOT_FOUND_CODE = 'Neo.ClientError.Procedure.ProcedureNotFound'; - -var GetServersUtil = function () { - function GetServersUtil() { - (0, _classCallCheck3.default)(this, GetServersUtil); - } - - (0, _createClass3.default)(GetServersUtil, [{ - key: 'callGetServers', - value: function callGetServers(session, routerAddress) { - return session.run(PROCEDURE_CALL).then(function (result) { - session.close(); - return result.records; - }).catch(function (error) { - if (error.code === PROCEDURE_NOT_FOUND_CODE) { - // throw when getServers procedure not found because this is clearly a configuration issue - throw (0, _error.newError)('Server ' + routerAddress + ' could not perform routing. ' + 'Make sure you are connecting to a causal cluster', _error.SERVICE_UNAVAILABLE); - } - // return nothing when failed to connect because code higher in the callstack is still able to retry with a - // different session towards a different router - return null; - }); - } - }, { - key: 'parseTtl', - value: function parseTtl(record, routerAddress) { - try { - var now = (0, _integer.int)(Date.now()); - var expires = record.get('ttl').multiply(1000).add(now); - // if the server uses a really big expire time like Long.MAX_VALUE this may have overflowed - if (expires.lessThan(now)) { - return _integer2.default.MAX_VALUE; - } - return expires; - } catch (error) { - throw (0, _error.newError)('Unable to parse TTL entry from router ' + routerAddress + ' from record:\n' + (0, _stringify2.default)(record), _error.PROTOCOL_ERROR); - } - } - }, { - key: 'parseServers', - value: function parseServers(record, routerAddress) { - try { - var servers = record.get('servers'); - - var routers = new _roundRobinArray2.default(); - var readers = new _roundRobinArray2.default(); - var writers = new _roundRobinArray2.default(); - - servers.forEach(function (server) { - var role = server['role']; - var addresses = server['addresses']; - - if (role === 'ROUTE') { - routers.pushAll(addresses); - } else if (role === 'WRITE') { - writers.pushAll(addresses); - } else if (role === 'READ') { - readers.pushAll(addresses); - } else { - throw (0, _error.newError)('Unknown server role "' + role + '"', _error.PROTOCOL_ERROR); - } - }); - - return { - routers: routers, - readers: readers, - writers: writers - }; - } catch (ignore) { - throw (0, _error.newError)('Unable to parse servers entry from router ' + routerAddress + ' from record:\n' + (0, _stringify2.default)(record), _error.PROTOCOL_ERROR); - } - } - }]); - return GetServersUtil; -}(); - -exports.default = GetServersUtil; - -},{"../error":5,"../integer":8,"./round-robin-array":23,"babel-runtime/core-js/json/stringify":51,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],19:[function(require,module,exports){ +},{"dns":102,"tls":102}],19:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -8044,7 +8179,7 @@ var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); -var _connector = require('./connector'); +var _util = require('./util'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; @@ -8115,8 +8250,8 @@ var DnsHostNameResolver = exports.DnsHostNameResolver = function (_HostNameResol value: function resolve(seedRouter) { var _this3 = this; - var seedRouterHost = (0, _connector.parseHost)(seedRouter); - var seedRouterPort = (0, _connector.parsePort)(seedRouter); + var seedRouterHost = (0, _util.parseHost)(seedRouter); + var seedRouterPort = (0, _util.parsePort)(seedRouter); return new _promise2.default(function (resolve) { _this3._dns.lookup(seedRouterHost, { all: true }, function (error, addresses) { @@ -8147,7 +8282,7 @@ function addressWithPort(addressObject, port) { return address; } -},{"./connector":16,"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/core-js/promise":59,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67,"dns":98}],20:[function(require,module,exports){ +},{"./util":30,"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71,"dns":102}],20:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -8610,7 +8745,7 @@ exports.Packer = Packer; exports.Unpacker = Unpacker; exports.Structure = Structure; -},{"../integer":8,"./../error":5,"./utf8":27,"babel-runtime/core-js/object/keys":57,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/typeof":69}],21:[function(require,module,exports){ +},{"../integer":8,"./../error":5,"./utf8":29,"babel-runtime/core-js/object/keys":60,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/typeof":73}],21:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -8745,115 +8880,17 @@ var Pool = function () { exports.default = Pool; -},{"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],22:[function(require,module,exports){ -"use strict"; +},{"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],22:[function(require,module,exports){ +'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); -var _stringify = require("babel-runtime/core-js/json/stringify"); +var _stringify = require('babel-runtime/core-js/json/stringify'); var _stringify2 = _interopRequireDefault(_stringify); -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _getServersUtil = require("./get-servers-util"); - -var _getServersUtil2 = _interopRequireDefault(_getServersUtil); - -var _routingTable = require("./routing-table"); - -var _routingTable2 = _interopRequireDefault(_routingTable); - -var _error = require("../error"); - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; -} - -var Rediscovery = function () { - function Rediscovery(getServersUtil) { - (0, _classCallCheck3.default)(this, Rediscovery); - - this._getServersUtil = getServersUtil || new _getServersUtil2.default(); - } - - (0, _createClass3.default)(Rediscovery, [{ - key: "lookupRoutingTableOnRouter", - value: function lookupRoutingTableOnRouter(session, routerAddress) { - var _this = this; - - return this._getServersUtil.callGetServers(session, routerAddress).then(function (records) { - if (records === null) { - // connection error happened, unable to retrieve routing table from this router, next one should be queried - return null; - } - - if (records.length !== 1) { - throw (0, _error.newError)('Illegal response from router "' + routerAddress + '". ' + 'Received ' + records.length + ' records but expected only one.\n' + (0, _stringify2.default)(records), _error.PROTOCOL_ERROR); - } - - var record = records[0]; - - var expirationTime = _this._getServersUtil.parseTtl(record, routerAddress); - - var _getServersUtil$parse = _this._getServersUtil.parseServers(record, routerAddress), - routers = _getServersUtil$parse.routers, - readers = _getServersUtil$parse.readers, - writers = _getServersUtil$parse.writers; - - Rediscovery._assertNonEmpty(routers, 'routers', routerAddress); - Rediscovery._assertNonEmpty(readers, 'readers', routerAddress); - // case with no writers is processed higher in the promise chain because only RoutingDriver knows - // how to deal with such table and how to treat router that returned such table - - return new _routingTable2.default(routers, readers, writers, expirationTime); - }); - } - }], [{ - key: "_assertNonEmpty", - value: function _assertNonEmpty(serversRoundRobinArray, serversName, routerAddress) { - if (serversRoundRobinArray.isEmpty()) { - throw (0, _error.newError)('Received no ' + serversName + ' from router ' + routerAddress, _error.PROTOCOL_ERROR); - } - } - }]); - return Rediscovery; -}(); /** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -exports.default = Rediscovery; - -},{"../error":5,"./get-servers-util":18,"./routing-table":24,"babel-runtime/core-js/json/stringify":51,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],23:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); @@ -8862,119 +8899,11 @@ var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; -} - -/** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * An array that lets you hop through the elements endlessly. - */ -var RoundRobinArray = function () { - function RoundRobinArray(items) { - (0, _classCallCheck3.default)(this, RoundRobinArray); - - this._items = items || []; - this._offset = 0; - } - - (0, _createClass3.default)(RoundRobinArray, [{ - key: 'next', - value: function next() { - if (this.isEmpty()) { - return null; - } - var index = this._offset % this.size(); - this._offset++; - return this._items[index]; - } - }, { - key: 'pushAll', - value: function pushAll(elems) { - if (!Array.isArray(elems)) { - throw new TypeError('Array expected but got: ' + elems); - } - - Array.prototype.push.apply(this._items, elems); - } - }, { - key: 'isEmpty', - value: function isEmpty() { - return this._items.length === 0; - } - }, { - key: 'size', - value: function size() { - return this._items.length; - } - }, { - key: 'toArray', - value: function toArray() { - return this._items; - } - }, { - key: 'remove', - value: function remove(item) { - this._items = this._items.filter(function (element) { - return element !== item; - }); - } - }]); - return RoundRobinArray; -}(); - -exports.default = RoundRobinArray; - -},{"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],24:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray"); - -var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); - -var _from = require("babel-runtime/core-js/array/from"); - -var _from2 = _interopRequireDefault(_from); - -var _set = require("babel-runtime/core-js/set"); - -var _set2 = _interopRequireDefault(_set); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _integer = require("../integer"); +var _routingTable = require('./routing-table'); -var _roundRobinArray = require("./round-robin-array"); +var _routingTable2 = _interopRequireDefault(_routingTable); -var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); +var _error = require('../error'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; @@ -8998,7 +8927,233 @@ function _interopRequireDefault(obj) { * See the License for the specific language governing permissions and * limitations under the License. */ -var MIN_ROUTERS = 1; + +var Rediscovery = function () { + + /** + * @constructor + * @param {RoutingUtil} routingUtil the util to use. + */ + function Rediscovery(routingUtil) { + (0, _classCallCheck3.default)(this, Rediscovery); + + this._routingUtil = routingUtil; + } + + /** + * Try to fetch new routing table from the given router. + * @param {Session} session the session to use. + * @param {string} routerAddress the URL of the router. + * @return {Promise} promise resolved with new routing table or null when connection error happened. + */ + + (0, _createClass3.default)(Rediscovery, [{ + key: 'lookupRoutingTableOnRouter', + value: function lookupRoutingTableOnRouter(session, routerAddress) { + var _this = this; + + return this._routingUtil.callRoutingProcedure(session, routerAddress).then(function (records) { + if (records === null) { + // connection error happened, unable to retrieve routing table from this router, next one should be queried + return null; + } + + if (records.length !== 1) { + throw (0, _error.newError)('Illegal response from router "' + routerAddress + '". ' + 'Received ' + records.length + ' records but expected only one.\n' + (0, _stringify2.default)(records), _error.PROTOCOL_ERROR); + } + + var record = records[0]; + + var expirationTime = _this._routingUtil.parseTtl(record, routerAddress); + + var _routingUtil$parseSer = _this._routingUtil.parseServers(record, routerAddress), + routers = _routingUtil$parseSer.routers, + readers = _routingUtil$parseSer.readers, + writers = _routingUtil$parseSer.writers; + + Rediscovery._assertNonEmpty(routers, 'routers', routerAddress); + Rediscovery._assertNonEmpty(readers, 'readers', routerAddress); + // case with no writers is processed higher in the promise chain because only RoutingDriver knows + // how to deal with such table and how to treat router that returned such table + + return new _routingTable2.default(routers, readers, writers, expirationTime); + }); + } + }], [{ + key: '_assertNonEmpty', + value: function _assertNonEmpty(serversRoundRobinArray, serversName, routerAddress) { + if (serversRoundRobinArray.isEmpty()) { + throw (0, _error.newError)('Received no ' + serversName + ' from router ' + routerAddress, _error.PROTOCOL_ERROR); + } + } + }]); + return Rediscovery; +}(); + +exports.default = Rediscovery; + +},{"../error":5,"./routing-table":24,"babel-runtime/core-js/json/stringify":54,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],23:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _stringify = require('babel-runtime/core-js/json/stringify'); + +var _stringify2 = _interopRequireDefault(_stringify); + +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require('babel-runtime/helpers/createClass'); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; +} + +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * An array that lets you hop through the elements endlessly. + */ +var RoundRobinArray = function () { + function RoundRobinArray(items) { + (0, _classCallCheck3.default)(this, RoundRobinArray); + + this._items = items || []; + this._offset = 0; + } + + (0, _createClass3.default)(RoundRobinArray, [{ + key: 'next', + value: function next() { + if (this.isEmpty()) { + return null; + } + var index = this._offset % this.size(); + this._offset++; + return this._items[index]; + } + }, { + key: 'pushAll', + value: function pushAll(elems) { + if (!Array.isArray(elems)) { + throw new TypeError('Array expected but got: ' + elems); + } + + Array.prototype.push.apply(this._items, elems); + } + }, { + key: 'isEmpty', + value: function isEmpty() { + return this._items.length === 0; + } + }, { + key: 'size', + value: function size() { + return this._items.length; + } + }, { + key: 'toArray', + value: function toArray() { + return this._items; + } + }, { + key: 'remove', + value: function remove(item) { + this._items = this._items.filter(function (element) { + return element !== item; + }); + } + }, { + key: 'toString', + value: function toString() { + return (0, _stringify2.default)(this._items); + } + }]); + return RoundRobinArray; +}(); + +exports.default = RoundRobinArray; + +},{"babel-runtime/core-js/json/stringify":54,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],24:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); + +var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); + +var _from = require('babel-runtime/core-js/array/from'); + +var _from2 = _interopRequireDefault(_from); + +var _set = require('babel-runtime/core-js/set'); + +var _set2 = _interopRequireDefault(_set); + +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require('babel-runtime/helpers/createClass'); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _integer = require('../integer'); + +var _roundRobinArray = require('./round-robin-array'); + +var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); + +var _driver = require('../driver'); + +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; +} + +var MIN_ROUTERS = 1; /** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ var RoutingTable = function () { function RoutingTable(routers, readers, writers, expirationTime) { @@ -9011,7 +9166,7 @@ var RoutingTable = function () { } (0, _createClass3.default)(RoutingTable, [{ - key: "forget", + key: 'forget', value: function forget(address) { // Don't remove it from the set of routers, since that might mean we lose our ability to re-discover, // just remove it from the set of readers and writers, so that we don't use it for actual work without @@ -9020,17 +9175,17 @@ var RoutingTable = function () { this.writers.remove(address); } }, { - key: "forgetRouter", + key: 'forgetRouter', value: function forgetRouter(address) { this.routers.remove(address); } }, { - key: "forgetWriter", + key: 'forgetWriter', value: function forgetWriter(address) { this.writers.remove(address); } }, { - key: "serversDiff", + key: 'serversDiff', value: function serversDiff(otherRoutingTable) { var oldServers = new _set2.default(this._allServers()); var newServers = otherRoutingTable._allServers(); @@ -9039,23 +9194,327 @@ var RoutingTable = function () { }); return (0, _from2.default)(oldServers); } + + /** + * Check if this routing table is fresh to perform the required operation. + * @param {string} accessMode the type of operation. Allowed values are {@link READ} and {@link WRITE}. + * @return {boolean} true when this table contains servers to serve the required operation, + * false otherwise. + */ + }, { - key: "isStale", - value: function isStale() { - return this.expirationTime.lessThan(Date.now()) || this.routers.size() <= MIN_ROUTERS || this.readers.isEmpty() || this.writers.isEmpty(); + key: 'isStaleFor', + value: function isStaleFor(accessMode) { + return this.expirationTime.lessThan(Date.now()) || this.routers.size() < MIN_ROUTERS || accessMode === _driver.READ && this.readers.isEmpty() || accessMode === _driver.WRITE && this.writers.isEmpty(); } }, { - key: "_allServers", + key: '_allServers', value: function _allServers() { return [].concat((0, _toConsumableArray3.default)(this.routers.toArray()), (0, _toConsumableArray3.default)(this.readers.toArray()), (0, _toConsumableArray3.default)(this.writers.toArray())); } + }, { + key: 'toString', + value: function toString() { + return 'RoutingTable[' + ('expirationTime=' + this.expirationTime + ', ') + ('routers=' + this.routers + ', ') + ('readers=' + this.readers + ', ') + ('writers=' + this.writers + ']'); + } }]); return RoutingTable; }(); exports.default = RoutingTable; -},{"../integer":8,"./round-robin-array":23,"babel-runtime/core-js/array/from":50,"babel-runtime/core-js/set":60,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/toConsumableArray":68}],25:[function(require,module,exports){ +},{"../driver":4,"../integer":8,"./round-robin-array":23,"babel-runtime/core-js/array/from":53,"babel-runtime/core-js/set":63,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/toConsumableArray":72}],25:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); + +var _defineProperty3 = _interopRequireDefault(_defineProperty2); + +var _stringify = require('babel-runtime/core-js/json/stringify'); + +var _stringify2 = _interopRequireDefault(_stringify); + +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require('babel-runtime/helpers/createClass'); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _roundRobinArray = require('./round-robin-array'); + +var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); + +var _error = require('../error'); + +var _integer = require('../integer'); + +var _integer2 = _interopRequireDefault(_integer); + +var _serverVersion = require('./server-version'); + +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; +} + +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var CALL_GET_SERVERS = 'CALL dbms.cluster.routing.getServers'; +var GET_ROUTING_TABLE_PARAM = 'context'; +var CALL_GET_ROUTING_TABLE = 'CALL dbms.cluster.routing.getRoutingTable({' + GET_ROUTING_TABLE_PARAM + '})'; +var PROCEDURE_NOT_FOUND_CODE = 'Neo.ClientError.Procedure.ProcedureNotFound'; + +var RoutingUtil = function () { + function RoutingUtil(routingContext) { + (0, _classCallCheck3.default)(this, RoutingUtil); + + this._routingContext = routingContext; + } + + /** + * Invoke routing procedure using the given session. + * @param {Session} session the session to use. + * @param {string} routerAddress the URL of the router. + * @return {Promise} promise resolved with records returned by the procedure call or null if + * connection error happened. + */ + + (0, _createClass3.default)(RoutingUtil, [{ + key: 'callRoutingProcedure', + value: function callRoutingProcedure(session, routerAddress) { + return this._callAvailableRoutingProcedure(session).then(function (result) { + session.close(); + return result.records; + }).catch(function (error) { + if (error.code === PROCEDURE_NOT_FOUND_CODE) { + // throw when getServers procedure not found because this is clearly a configuration issue + throw (0, _error.newError)('Server ' + routerAddress + ' could not perform routing. ' + 'Make sure you are connecting to a causal cluster', _error.SERVICE_UNAVAILABLE); + } + // return nothing when failed to connect because code higher in the callstack is still able to retry with a + // different session towards a different router + return null; + }); + } + }, { + key: 'parseTtl', + value: function parseTtl(record, routerAddress) { + try { + var now = (0, _integer.int)(Date.now()); + var expires = record.get('ttl').multiply(1000).add(now); + // if the server uses a really big expire time like Long.MAX_VALUE this may have overflowed + if (expires.lessThan(now)) { + return _integer2.default.MAX_VALUE; + } + return expires; + } catch (error) { + throw (0, _error.newError)('Unable to parse TTL entry from router ' + routerAddress + ' from record:\n' + (0, _stringify2.default)(record), _error.PROTOCOL_ERROR); + } + } + }, { + key: 'parseServers', + value: function parseServers(record, routerAddress) { + try { + var servers = record.get('servers'); + + var routers = new _roundRobinArray2.default(); + var readers = new _roundRobinArray2.default(); + var writers = new _roundRobinArray2.default(); + + servers.forEach(function (server) { + var role = server['role']; + var addresses = server['addresses']; + + if (role === 'ROUTE') { + routers.pushAll(addresses); + } else if (role === 'WRITE') { + writers.pushAll(addresses); + } else if (role === 'READ') { + readers.pushAll(addresses); + } else { + throw (0, _error.newError)('Unknown server role "' + role + '"', _error.PROTOCOL_ERROR); + } + }); + + return { + routers: routers, + readers: readers, + writers: writers + }; + } catch (ignore) { + throw (0, _error.newError)('Unable to parse servers entry from router ' + routerAddress + ' from record:\n' + (0, _stringify2.default)(record), _error.PROTOCOL_ERROR); + } + } + }, { + key: '_callAvailableRoutingProcedure', + value: function _callAvailableRoutingProcedure(session) { + var _this = this; + + return session._run(null, null, function (connection, streamObserver) { + var serverVersionString = connection.server.version; + var serverVersion = _serverVersion.ServerVersion.fromString(serverVersionString); + + if (serverVersion.compareTo(_serverVersion.VERSION_3_2_0) >= 0) { + var params = (0, _defineProperty3.default)({}, GET_ROUTING_TABLE_PARAM, _this._routingContext); + connection.run(CALL_GET_ROUTING_TABLE, params, streamObserver); + } else { + connection.run(CALL_GET_SERVERS, {}, streamObserver); + } + }); + } + }]); + return RoutingUtil; +}(); + +exports.default = RoutingUtil; + +},{"../error":5,"../integer":8,"./round-robin-array":23,"./server-version":26,"babel-runtime/core-js/json/stringify":54,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/defineProperty":68}],26:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.VERSION_3_2_0 = exports.ServerVersion = undefined; + +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require('babel-runtime/helpers/createClass'); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _util = require('./util'); + +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; +} + +var SERVER_VERSION_REGEX = new RegExp('^(Neo4j/)?(\\d+)\\.(\\d+)(?:\\.)?(\\d*)(\\.|-|\\+)?([0-9A-Za-z-.]*)?$'); /** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var ServerVersion = function () { + + /** + * @constructor + * @param {number} major the major version number. + * @param {number} minor the minor version number. + * @param {number} patch the patch version number. + */ + function ServerVersion(major, minor, patch) { + (0, _classCallCheck3.default)(this, ServerVersion); + + this.major = major; + this.minor = minor; + this.patch = patch; + } + + /** + * Parse given string to a {@link ServerVersion} object. + * @param versionStr the string to parse. + * @return {ServerVersion} version for the given string. + * @throws Error if given string can't be parsed. + */ + + (0, _createClass3.default)(ServerVersion, [{ + key: 'compareTo', + + /** + * Compare this version to the given one. + * @param {ServerVersion} other the version to compare with. + * @return {number} value 0 if this version is the same as the given one, value less then 0 when this version + * was released earlier than the given one and value greater then 0 when this version was released after + * than the given one. + */ + value: function compareTo(other) { + var result = compareInts(this.major, other.major); + if (result === 0) { + result = compareInts(this.minor, other.minor); + if (result === 0) { + result = compareInts(this.patch, other.patch); + } + } + return result; + } + }], [{ + key: 'fromString', + value: function fromString(versionStr) { + if (!versionStr) { + return new ServerVersion(3, 0, 0); + } + + (0, _util.assertString)(versionStr, 'Neo4j version string'); + + var version = versionStr.match(SERVER_VERSION_REGEX); + if (!version) { + throw new Error('Unparsable Neo4j version: ' + versionStr); + } + + var major = parseIntStrict(version[2]); + var minor = parseIntStrict(version[3]); + var patch = parseIntStrict(version[4] || 0); + + return new ServerVersion(major, minor, patch); + } + }]); + return ServerVersion; +}(); + +function parseIntStrict(str, name) { + var value = parseInt(str); + if (!value && value !== 0) { + throw new Error('Unparsable number ' + name + ': \'' + str + '\''); + } + return value; +} + +function compareInts(x, y) { + return x < y ? -1 : x === y ? 0 : 1; +} + +var VERSION_3_2_0 = new ServerVersion(3, 2, 0); + +exports.ServerVersion = ServerVersion; +exports.VERSION_3_2_0 = VERSION_3_2_0; + +},{"./util":30,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],27:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -9232,7 +9691,7 @@ var StreamObserver = function () { exports.default = StreamObserver; -},{"../record":29,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],26:[function(require,module,exports){ +},{"../record":31,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],28:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -9440,7 +9899,7 @@ function _valueOrDefault(value, defaultValue) { return defaultValue; } -},{"../error":5,"babel-runtime/core-js/promise":59,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],27:[function(require,module,exports){ +},{"../error":5,"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],29:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -9557,13 +10016,13 @@ var streamDecodeCombinedBuffer = function streamDecodeCombinedBuffer(combinedBuf exports.default = platformObj; -},{"../../external/text-encoding/index":1,"./../error":5,"./buf":9,"buffer":101,"string_decoder":304}],28:[function(require,module,exports){ +},{"../../external/text-encoding/index":1,"./../error":5,"./buf":9,"buffer":105,"string_decoder":346}],30:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.ENCRYPTION_OFF = exports.ENCRYPTION_ON = exports.assertString = exports.isEmptyObjectOrNull = undefined; +exports.ENCRYPTION_OFF = exports.ENCRYPTION_ON = exports.parseRoutingContext = exports.parsePort = exports.parseHost = exports.parseUrl = exports.parseScheme = exports.assertString = exports.isEmptyObjectOrNull = undefined; var _stringify = require("babel-runtime/core-js/json/stringify"); @@ -9599,8 +10058,15 @@ function _interopRequireDefault(obj) { var ENCRYPTION_ON = "ENCRYPTION_ON"; var ENCRYPTION_OFF = "ENCRYPTION_OFF"; +var URL_REGEX = new RegExp(['([^/]+//)?', // scheme +'(([^:/?#]*)', // hostname +'(?::([0-9]+))?)', // port (optional) +'([^?]*)?', // everything else +'(\\?(.+))?' // query +].join('')); + function isEmptyObjectOrNull(obj) { - if (isNull(obj)) { + if (obj === null) { return true; } @@ -9617,10 +10083,6 @@ function isEmptyObjectOrNull(obj) { return true; } -function isNull(obj) { - return obj === null; -} - function isObject(obj) { var type = typeof obj === "undefined" ? "undefined" : (0, _typeof3.default)(obj); return type === 'function' || type === 'object' && Boolean(obj); @@ -9637,12 +10099,69 @@ function isString(str) { return Object.prototype.toString.call(str) === '[object String]'; } +function parseScheme(url) { + assertString(url, 'URL'); + var scheme = url.match(URL_REGEX)[1] || ''; + return scheme.toLowerCase(); +} + +function parseUrl(url) { + assertString(url, 'URL'); + return url.match(URL_REGEX)[2]; +} + +function parseHost(url) { + assertString(url, 'URL'); + return url.match(URL_REGEX)[3]; +} + +function parsePort(url) { + assertString(url, 'URL'); + return url.match(URL_REGEX)[4]; +} + +function parseRoutingContext(url) { + var query = url.match(URL_REGEX)[7] || ''; + var context = {}; + if (query) { + query.split('&').forEach(function (pair) { + var keyValue = pair.split('='); + if (keyValue.length !== 2) { + throw new Error('Invalid parameters: \'' + keyValue + '\' in URL \'' + url + '\'.'); + } + + var key = trimAndVerify(keyValue[0], 'key', url); + var value = trimAndVerify(keyValue[1], 'value', url); + + if (context[key]) { + throw new Error("Duplicated query parameters with key '" + key + "' in URL '" + url + "'"); + } + + context[key] = value; + }); + } + return context; +} + +function trimAndVerify(string, name, url) { + var result = string.trim(); + if (!result) { + throw new Error("Illegal empty " + name + " in URL query '" + url + "'"); + } + return result; +} + exports.isEmptyObjectOrNull = isEmptyObjectOrNull; exports.assertString = assertString; +exports.parseScheme = parseScheme; +exports.parseUrl = parseUrl; +exports.parseHost = parseHost; +exports.parsePort = parsePort; +exports.parseRoutingContext = parseRoutingContext; exports.ENCRYPTION_ON = ENCRYPTION_ON; exports.ENCRYPTION_OFF = ENCRYPTION_OFF; -},{"babel-runtime/core-js/json/stringify":51,"babel-runtime/helpers/typeof":69}],29:[function(require,module,exports){ +},{"babel-runtime/core-js/json/stringify":54,"babel-runtime/helpers/typeof":73}],31:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -9815,7 +10334,7 @@ var Record = function () { exports.default = Record; -},{"./error":5,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],30:[function(require,module,exports){ +},{"./error":5,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],32:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -10201,7 +10720,7 @@ var statementType = { exports.statementType = statementType; exports.default = ResultSummary; -},{"./integer":8,"babel-runtime/core-js/object/keys":57,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],31:[function(require,module,exports){ +},{"./integer":8,"babel-runtime/core-js/object/keys":60,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],33:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -10394,7 +10913,7 @@ var Result = function () { exports.default = Result; -},{"./internal/connection-holder":14,"./result-summary":30,"babel-runtime/core-js/promise":59,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],32:[function(require,module,exports){ +},{"./internal/connection-holder":15,"./result-summary":32,"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],34:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -10460,17 +10979,21 @@ function _interopRequireDefault(obj) { var RoutingDriver = function (_Driver) { (0, _inherits3.default)(RoutingDriver, _Driver); - function RoutingDriver(url, userAgent) { - var token = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - var config = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + function RoutingDriver(url, routingContext, userAgent) { + var token = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + var config = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; (0, _classCallCheck3.default)(this, RoutingDriver); - return (0, _possibleConstructorReturn3.default)(this, (RoutingDriver.__proto__ || (0, _getPrototypeOf2.default)(RoutingDriver)).call(this, url, userAgent, token, RoutingDriver._validateConfig(config))); + + var _this = (0, _possibleConstructorReturn3.default)(this, (RoutingDriver.__proto__ || (0, _getPrototypeOf2.default)(RoutingDriver)).call(this, url, userAgent, token, RoutingDriver._validateConfig(config))); + + _this._routingContext = routingContext; + return _this; } (0, _createClass3.default)(RoutingDriver, [{ key: '_createConnectionProvider', value: function _createConnectionProvider(address, connectionPool, driverOnErrorCallback) { - return new _connectionProviders.LoadBalancer(address, connectionPool, driverOnErrorCallback); + return new _connectionProviders.LoadBalancer(address, this._routingContext, connectionPool, driverOnErrorCallback); } }, { key: '_createSession', @@ -10478,13 +11001,10 @@ var RoutingDriver = function (_Driver) { var _this2 = this; return new RoutingSession(mode, connectionProvider, bookmark, config, function (error, conn) { - if (error.code === _error.SERVICE_UNAVAILABLE || error.code === _error.SESSION_EXPIRED) { - // connection is undefined if error happened before connection was acquired - if (conn) { - _this2._connectionProvider.forget(conn.url); - } + if (error.code === _error.SESSION_EXPIRED) { + _this2._forgetConnection(conn); return error; - } else if (error.code === 'Neo.ClientError.Cluster.NotALeader') { + } else if (RoutingDriver._isFailureToWrite(error)) { var url = 'UNKNOWN'; // connection is undefined if error happened before connection was acquired if (conn) { @@ -10497,6 +11017,21 @@ var RoutingDriver = function (_Driver) { } }); } + }, { + key: '_connectionErrorCode', + value: function _connectionErrorCode() { + // connection errors mean SERVICE_UNAVAILABLE for direct driver but for routing driver they should only + // result in SESSION_EXPIRED because there might still exist other servers capable of serving the request + return _error.SESSION_EXPIRED; + } + }, { + key: '_forgetConnection', + value: function _forgetConnection(connection) { + // connection is undefined if error happened before connection was acquired + if (connection) { + this._connectionProvider.forget(connection.url); + } + } }], [{ key: '_validateConfig', value: function _validateConfig(config) { @@ -10505,6 +11040,11 @@ var RoutingDriver = function (_Driver) { } return config; } + }, { + key: '_isFailureToWrite', + value: function _isFailureToWrite(error) { + return error.code === 'Neo.ClientError.Cluster.NotALeader' || error.code === 'Neo.ClientError.General.ForbiddenOnReadOnlyDatabase'; + } }]); return RoutingDriver; }(_driver.Driver); @@ -10532,7 +11072,7 @@ var RoutingSession = function (_Session) { exports.default = RoutingDriver; -},{"./driver":4,"./error":5,"./internal/connection-providers":15,"./session":33,"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67}],33:[function(require,module,exports){ +},{"./driver":4,"./error":5,"./internal/connection-providers":16,"./session":35,"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71}],35:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -10666,22 +11206,29 @@ var Session = function () { parameters = statement.parameters || {}; statement = statement.text; } - (0, _util.assertString)(statement, "Cypher statement"); + (0, _util.assertString)(statement, 'Cypher statement'); + return this._run(statement, parameters, function (connection, streamObserver) { + return connection.run(statement, parameters, streamObserver); + }); + } + }, { + key: '_run', + value: function _run(statement, parameters, statementRunner) { var streamObserver = new _RunObserver(this._onRunFailure()); var connectionHolder = this._connectionHolderWithMode(this._mode); if (!this._hasTx) { connectionHolder.initializeConnection(); connectionHolder.getConnection().then(function (connection) { streamObserver.resolveConnection(connection); - connection.run(statement, parameters, streamObserver); + statementRunner(connection, streamObserver); connection.pullAll(streamObserver); connection.sync(); }).catch(function (error) { return streamObserver.onError(error); }); } else { - streamObserver.onError((0, _error.newError)("Statements cannot be run directly on a " + "session with an open transaction; either run from within the " + "transaction or use a different session.")); + streamObserver.onError((0, _error.newError)('Statements cannot be run directly on a ' + 'session with an open transaction; either run from within the ' + 'transaction or use a different session.')); } return new _result2.default(streamObserver, statement, parameters, function () { return streamObserver.meta(); @@ -10890,7 +11437,7 @@ function _createTransactionExecutor(config) { exports.default = Session; -},{"./driver":4,"./error":5,"./internal/connection-holder":14,"./internal/stream-observer":25,"./internal/transaction-executor":26,"./internal/util":28,"./result":31,"./transaction":34,"babel-runtime/core-js/object/assign":52,"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/get":65,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67,"babel-runtime/helpers/typeof":69}],34:[function(require,module,exports){ +},{"./driver":4,"./error":5,"./internal/connection-holder":15,"./internal/stream-observer":27,"./internal/transaction-executor":28,"./internal/util":30,"./result":33,"./transaction":36,"babel-runtime/core-js/object/assign":55,"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/get":69,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71,"babel-runtime/helpers/typeof":73}],36:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -11273,7 +11820,7 @@ function emptyMetadataSupplier() { exports.default = Transaction; -},{"./internal/connection-holder":14,"./internal/stream-observer":25,"./internal/util":28,"./result":31,"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/core-js/promise":59,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/get":65,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67,"babel-runtime/helpers/typeof":69}],35:[function(require,module,exports){ +},{"./internal/connection-holder":15,"./internal/stream-observer":27,"./internal/util":30,"./result":33,"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/get":69,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71,"babel-runtime/helpers/typeof":73}],37:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -11307,7 +11854,7 @@ Object.defineProperty(exports, "__esModule", { // system to control version names at packaging time. exports.default = "0.0.0-dev"; -},{}],36:[function(require,module,exports){ +},{}],38:[function(require,module,exports){ var asn1 = exports; asn1.bignum = require('bn.js'); @@ -11318,7 +11865,7 @@ asn1.constants = require('./asn1/constants'); asn1.decoders = require('./asn1/decoders'); asn1.encoders = require('./asn1/encoders'); -},{"./asn1/api":37,"./asn1/base":39,"./asn1/constants":43,"./asn1/decoders":45,"./asn1/encoders":48,"bn.js":71}],37:[function(require,module,exports){ +},{"./asn1/api":39,"./asn1/base":41,"./asn1/constants":45,"./asn1/decoders":47,"./asn1/encoders":50,"bn.js":75}],39:[function(require,module,exports){ var asn1 = require('../asn1'); var inherits = require('inherits'); @@ -11381,7 +11928,7 @@ Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) { return this._getEncoder(enc).encode(data, reporter); }; -},{"../asn1":36,"inherits":258,"vm":306}],38:[function(require,module,exports){ +},{"../asn1":38,"inherits":297,"vm":351}],40:[function(require,module,exports){ var inherits = require('inherits'); var Reporter = require('../base').Reporter; var Buffer = require('buffer').Buffer; @@ -11499,7 +12046,7 @@ EncoderBuffer.prototype.join = function join(out, offset) { return out; }; -},{"../base":39,"buffer":101,"inherits":258}],39:[function(require,module,exports){ +},{"../base":41,"buffer":105,"inherits":297}],41:[function(require,module,exports){ var base = exports; base.Reporter = require('./reporter').Reporter; @@ -11507,7 +12054,7 @@ base.DecoderBuffer = require('./buffer').DecoderBuffer; base.EncoderBuffer = require('./buffer').EncoderBuffer; base.Node = require('./node'); -},{"./buffer":38,"./node":40,"./reporter":41}],40:[function(require,module,exports){ +},{"./buffer":40,"./node":42,"./reporter":43}],42:[function(require,module,exports){ var Reporter = require('../base').Reporter; var EncoderBuffer = require('../base').EncoderBuffer; var DecoderBuffer = require('../base').DecoderBuffer; @@ -12143,7 +12690,7 @@ Node.prototype._isPrintstr = function isPrintstr(str) { return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str); }; -},{"../base":39,"minimalistic-assert":263}],41:[function(require,module,exports){ +},{"../base":41,"minimalistic-assert":305}],43:[function(require,module,exports){ var inherits = require('inherits'); function Reporter(options) { @@ -12266,7 +12813,7 @@ ReporterError.prototype.rethrow = function rethrow(msg) { return this; }; -},{"inherits":258}],42:[function(require,module,exports){ +},{"inherits":297}],44:[function(require,module,exports){ var constants = require('../constants'); exports.tagClass = { @@ -12310,7 +12857,7 @@ exports.tag = { }; exports.tagByName = constants._reverse(exports.tag); -},{"../constants":43}],43:[function(require,module,exports){ +},{"../constants":45}],45:[function(require,module,exports){ var constants = exports; // Helper @@ -12331,7 +12878,7 @@ constants._reverse = function reverse(map) { constants.der = require('./der'); -},{"./der":42}],44:[function(require,module,exports){ +},{"./der":44}],46:[function(require,module,exports){ var inherits = require('inherits'); var asn1 = require('../../asn1'); @@ -12657,13 +13204,13 @@ function derDecodeLen(buf, primitive, fail) { return len; } -},{"../../asn1":36,"inherits":258}],45:[function(require,module,exports){ +},{"../../asn1":38,"inherits":297}],47:[function(require,module,exports){ var decoders = exports; decoders.der = require('./der'); decoders.pem = require('./pem'); -},{"./der":44,"./pem":46}],46:[function(require,module,exports){ +},{"./der":46,"./pem":48}],48:[function(require,module,exports){ var inherits = require('inherits'); var Buffer = require('buffer').Buffer; @@ -12714,7 +13261,7 @@ PEMDecoder.prototype.decode = function decode(data, options) { return DERDecoder.prototype.decode.call(this, input, options); }; -},{"./der":44,"buffer":101,"inherits":258}],47:[function(require,module,exports){ +},{"./der":46,"buffer":105,"inherits":297}],49:[function(require,module,exports){ var inherits = require('inherits'); var Buffer = require('buffer').Buffer; @@ -13011,13 +13558,13 @@ function encodeTag(tag, primitive, cls, reporter) { return res; } -},{"../../asn1":36,"buffer":101,"inherits":258}],48:[function(require,module,exports){ +},{"../../asn1":38,"buffer":105,"inherits":297}],50:[function(require,module,exports){ var encoders = exports; encoders.der = require('./der'); encoders.pem = require('./pem'); -},{"./der":47,"./pem":49}],49:[function(require,module,exports){ +},{"./der":49,"./pem":51}],51:[function(require,module,exports){ var inherits = require('inherits'); var DEREncoder = require('./der'); @@ -13040,33 +13587,528 @@ PEMEncoder.prototype.encode = function encode(data, options) { return out.join('\n'); }; -},{"./der":47,"inherits":258}],50:[function(require,module,exports){ +},{"./der":49,"inherits":297}],52:[function(require,module,exports){ +(function (global){ +'use strict'; + +// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js +// original notice: + +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +function compare(a, b) { + if (a === b) { + return 0; + } + + var x = a.length; + var y = b.length; + + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i]; + y = b[i]; + break; + } + } + + if (x < y) { + return -1; + } + if (y < x) { + return 1; + } + return 0; +} +function isBuffer(b) { + if (global.Buffer && typeof global.Buffer.isBuffer === 'function') { + return global.Buffer.isBuffer(b); + } + return !!(b != null && b._isBuffer); +} + +// based on node assert, original notice: + +// http://wiki.commonjs.org/wiki/Unit_Testing/1.0 +// +// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! +// +// Originally from narwhal.js (http://narwhaljs.org) +// Copyright (c) 2009 Thomas Robinson <280north.com> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the 'Software'), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +var util = require('util/'); +var hasOwn = Object.prototype.hasOwnProperty; +var pSlice = Array.prototype.slice; +var functionsHaveNames = (function () { + return function foo() {}.name === 'foo'; +}()); +function pToString (obj) { + return Object.prototype.toString.call(obj); +} +function isView(arrbuf) { + if (isBuffer(arrbuf)) { + return false; + } + if (typeof global.ArrayBuffer !== 'function') { + return false; + } + if (typeof ArrayBuffer.isView === 'function') { + return ArrayBuffer.isView(arrbuf); + } + if (!arrbuf) { + return false; + } + if (arrbuf instanceof DataView) { + return true; + } + if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) { + return true; + } + return false; +} +// 1. The assert module provides functions that throw +// AssertionError's when particular conditions are not met. The +// assert module must conform to the following interface. + +var assert = module.exports = ok; + +// 2. The AssertionError is defined in assert. +// new assert.AssertionError({ message: message, +// actual: actual, +// expected: expected }) + +var regex = /\s*function\s+([^\(\s]*)\s*/; +// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js +function getName(func) { + if (!util.isFunction(func)) { + return; + } + if (functionsHaveNames) { + return func.name; + } + var str = func.toString(); + var match = str.match(regex); + return match && match[1]; +} +assert.AssertionError = function AssertionError(options) { + this.name = 'AssertionError'; + this.actual = options.actual; + this.expected = options.expected; + this.operator = options.operator; + if (options.message) { + this.message = options.message; + this.generatedMessage = false; + } else { + this.message = getMessage(this); + this.generatedMessage = true; + } + var stackStartFunction = options.stackStartFunction || fail; + if (Error.captureStackTrace) { + Error.captureStackTrace(this, stackStartFunction); + } else { + // non v8 browsers so we can have a stacktrace + var err = new Error(); + if (err.stack) { + var out = err.stack; + + // try to strip useless frames + var fn_name = getName(stackStartFunction); + var idx = out.indexOf('\n' + fn_name); + if (idx >= 0) { + // once we have located the function frame + // we need to strip out everything before it (and its line) + var next_line = out.indexOf('\n', idx + 1); + out = out.substring(next_line + 1); + } + + this.stack = out; + } + } +}; + +// assert.AssertionError instanceof Error +util.inherits(assert.AssertionError, Error); + +function truncate(s, n) { + if (typeof s === 'string') { + return s.length < n ? s : s.slice(0, n); + } else { + return s; + } +} +function inspect(something) { + if (functionsHaveNames || !util.isFunction(something)) { + return util.inspect(something); + } + var rawname = getName(something); + var name = rawname ? ': ' + rawname : ''; + return '[Function' + name + ']'; +} +function getMessage(self) { + return truncate(inspect(self.actual), 128) + ' ' + + self.operator + ' ' + + truncate(inspect(self.expected), 128); +} + +// At present only the three keys mentioned above are used and +// understood by the spec. Implementations or sub modules can pass +// other keys to the AssertionError's constructor - they will be +// ignored. + +// 3. All of the following functions must throw an AssertionError +// when a corresponding condition is not met, with a message that +// may be undefined if not provided. All assertion methods provide +// both the actual and expected values to the assertion error for +// display purposes. + +function fail(actual, expected, message, operator, stackStartFunction) { + throw new assert.AssertionError({ + message: message, + actual: actual, + expected: expected, + operator: operator, + stackStartFunction: stackStartFunction + }); +} + +// EXTENSION! allows for well behaved errors defined elsewhere. +assert.fail = fail; + +// 4. Pure assertion tests whether a value is truthy, as determined +// by !!guard. +// assert.ok(guard, message_opt); +// This statement is equivalent to assert.equal(true, !!guard, +// message_opt);. To test strictly for the value true, use +// assert.strictEqual(true, guard, message_opt);. + +function ok(value, message) { + if (!value) fail(value, true, message, '==', assert.ok); +} +assert.ok = ok; + +// 5. The equality assertion tests shallow, coercive equality with +// ==. +// assert.equal(actual, expected, message_opt); + +assert.equal = function equal(actual, expected, message) { + if (actual != expected) fail(actual, expected, message, '==', assert.equal); +}; + +// 6. The non-equality assertion tests for whether two objects are not equal +// with != assert.notEqual(actual, expected, message_opt); + +assert.notEqual = function notEqual(actual, expected, message) { + if (actual == expected) { + fail(actual, expected, message, '!=', assert.notEqual); + } +}; + +// 7. The equivalence assertion tests a deep equality relation. +// assert.deepEqual(actual, expected, message_opt); + +assert.deepEqual = function deepEqual(actual, expected, message) { + if (!_deepEqual(actual, expected, false)) { + fail(actual, expected, message, 'deepEqual', assert.deepEqual); + } +}; + +assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) { + if (!_deepEqual(actual, expected, true)) { + fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual); + } +}; + +function _deepEqual(actual, expected, strict, memos) { + // 7.1. All identical values are equivalent, as determined by ===. + if (actual === expected) { + return true; + } else if (isBuffer(actual) && isBuffer(expected)) { + return compare(actual, expected) === 0; + + // 7.2. If the expected value is a Date object, the actual value is + // equivalent if it is also a Date object that refers to the same time. + } else if (util.isDate(actual) && util.isDate(expected)) { + return actual.getTime() === expected.getTime(); + + // 7.3 If the expected value is a RegExp object, the actual value is + // equivalent if it is also a RegExp object with the same source and + // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`). + } else if (util.isRegExp(actual) && util.isRegExp(expected)) { + return actual.source === expected.source && + actual.global === expected.global && + actual.multiline === expected.multiline && + actual.lastIndex === expected.lastIndex && + actual.ignoreCase === expected.ignoreCase; + + // 7.4. Other pairs that do not both pass typeof value == 'object', + // equivalence is determined by ==. + } else if ((actual === null || typeof actual !== 'object') && + (expected === null || typeof expected !== 'object')) { + return strict ? actual === expected : actual == expected; + + // If both values are instances of typed arrays, wrap their underlying + // ArrayBuffers in a Buffer each to increase performance + // This optimization requires the arrays to have the same type as checked by + // Object.prototype.toString (aka pToString). Never perform binary + // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their + // bit patterns are not identical. + } else if (isView(actual) && isView(expected) && + pToString(actual) === pToString(expected) && + !(actual instanceof Float32Array || + actual instanceof Float64Array)) { + return compare(new Uint8Array(actual.buffer), + new Uint8Array(expected.buffer)) === 0; + + // 7.5 For all other Object pairs, including Array objects, equivalence is + // determined by having the same number of owned properties (as verified + // with Object.prototype.hasOwnProperty.call), the same set of keys + // (although not necessarily the same order), equivalent values for every + // corresponding key, and an identical 'prototype' property. Note: this + // accounts for both named and indexed properties on Arrays. + } else if (isBuffer(actual) !== isBuffer(expected)) { + return false; + } else { + memos = memos || {actual: [], expected: []}; + + var actualIndex = memos.actual.indexOf(actual); + if (actualIndex !== -1) { + if (actualIndex === memos.expected.indexOf(expected)) { + return true; + } + } + + memos.actual.push(actual); + memos.expected.push(expected); + + return objEquiv(actual, expected, strict, memos); + } +} + +function isArguments(object) { + return Object.prototype.toString.call(object) == '[object Arguments]'; +} + +function objEquiv(a, b, strict, actualVisitedObjects) { + if (a === null || a === undefined || b === null || b === undefined) + return false; + // if one is a primitive, the other must be same + if (util.isPrimitive(a) || util.isPrimitive(b)) + return a === b; + if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b)) + return false; + var aIsArgs = isArguments(a); + var bIsArgs = isArguments(b); + if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs)) + return false; + if (aIsArgs) { + a = pSlice.call(a); + b = pSlice.call(b); + return _deepEqual(a, b, strict); + } + var ka = objectKeys(a); + var kb = objectKeys(b); + var key, i; + // having the same number of owned properties (keys incorporates + // hasOwnProperty) + if (ka.length !== kb.length) + return false; + //the same set of keys (although not necessarily the same order), + ka.sort(); + kb.sort(); + //~~~cheap key test + for (i = ka.length - 1; i >= 0; i--) { + if (ka[i] !== kb[i]) + return false; + } + //equivalent values for every corresponding key, and + //~~~possibly expensive deep test + for (i = ka.length - 1; i >= 0; i--) { + key = ka[i]; + if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects)) + return false; + } + return true; +} + +// 8. The non-equivalence assertion tests for any deep inequality. +// assert.notDeepEqual(actual, expected, message_opt); + +assert.notDeepEqual = function notDeepEqual(actual, expected, message) { + if (_deepEqual(actual, expected, false)) { + fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); + } +}; + +assert.notDeepStrictEqual = notDeepStrictEqual; +function notDeepStrictEqual(actual, expected, message) { + if (_deepEqual(actual, expected, true)) { + fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual); + } +} + + +// 9. The strict equality assertion tests strict equality, as determined by ===. +// assert.strictEqual(actual, expected, message_opt); + +assert.strictEqual = function strictEqual(actual, expected, message) { + if (actual !== expected) { + fail(actual, expected, message, '===', assert.strictEqual); + } +}; + +// 10. The strict non-equality assertion tests for strict inequality, as +// determined by !==. assert.notStrictEqual(actual, expected, message_opt); + +assert.notStrictEqual = function notStrictEqual(actual, expected, message) { + if (actual === expected) { + fail(actual, expected, message, '!==', assert.notStrictEqual); + } +}; + +function expectedException(actual, expected) { + if (!actual || !expected) { + return false; + } + + if (Object.prototype.toString.call(expected) == '[object RegExp]') { + return expected.test(actual); + } + + try { + if (actual instanceof expected) { + return true; + } + } catch (e) { + // Ignore. The instanceof check doesn't work for arrow functions. + } + + if (Error.isPrototypeOf(expected)) { + return false; + } + + return expected.call({}, actual) === true; +} + +function _tryBlock(block) { + var error; + try { + block(); + } catch (e) { + error = e; + } + return error; +} + +function _throws(shouldThrow, block, expected, message) { + var actual; + + if (typeof block !== 'function') { + throw new TypeError('"block" argument must be a function'); + } + + if (typeof expected === 'string') { + message = expected; + expected = null; + } + + actual = _tryBlock(block); + + message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + + (message ? ' ' + message : '.'); + + if (shouldThrow && !actual) { + fail(actual, expected, 'Missing expected exception' + message); + } + + var userProvidedMessage = typeof message === 'string'; + var isUnwantedException = !shouldThrow && util.isError(actual); + var isUnexpectedException = !shouldThrow && actual && !expected; + + if ((isUnwantedException && + userProvidedMessage && + expectedException(actual, expected)) || + isUnexpectedException) { + fail(actual, expected, 'Got unwanted exception' + message); + } + + if ((shouldThrow && actual && expected && + !expectedException(actual, expected)) || (!shouldThrow && actual)) { + throw actual; + } +} + +// 11. Expected to throw an error: +// assert.throws(block, Error_opt, message_opt); + +assert.throws = function(block, /*optional*/error, /*optional*/message) { + _throws(true, block, error, message); +}; + +// EXTENSION! This is annoying to write outside this module. +assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) { + _throws(false, block, error, message); +}; + +assert.ifError = function(err) { if (err) throw err; }; + +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) { + if (hasOwn.call(obj, key)) keys.push(key); + } + return keys; +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"util/":350}],53:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/array/from"), __esModule: true }; -},{"core-js/library/fn/array/from":103}],51:[function(require,module,exports){ +},{"core-js/library/fn/array/from":108}],54:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/json/stringify"), __esModule: true }; -},{"core-js/library/fn/json/stringify":104}],52:[function(require,module,exports){ +},{"core-js/library/fn/json/stringify":109}],55:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/assign"), __esModule: true }; -},{"core-js/library/fn/object/assign":105}],53:[function(require,module,exports){ +},{"core-js/library/fn/object/assign":110}],56:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/create"), __esModule: true }; -},{"core-js/library/fn/object/create":106}],54:[function(require,module,exports){ +},{"core-js/library/fn/object/create":111}],57:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/define-property"), __esModule: true }; -},{"core-js/library/fn/object/define-property":107}],55:[function(require,module,exports){ +},{"core-js/library/fn/object/define-property":112}],58:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/get-own-property-descriptor"), __esModule: true }; -},{"core-js/library/fn/object/get-own-property-descriptor":108}],56:[function(require,module,exports){ +},{"core-js/library/fn/object/get-own-property-descriptor":113}],59:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/get-prototype-of"), __esModule: true }; -},{"core-js/library/fn/object/get-prototype-of":109}],57:[function(require,module,exports){ +},{"core-js/library/fn/object/get-prototype-of":114}],60:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/keys"), __esModule: true }; -},{"core-js/library/fn/object/keys":110}],58:[function(require,module,exports){ +},{"core-js/library/fn/object/keys":115}],61:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/set-prototype-of"), __esModule: true }; -},{"core-js/library/fn/object/set-prototype-of":111}],59:[function(require,module,exports){ +},{"core-js/library/fn/object/set-prototype-of":116}],62:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/promise"), __esModule: true }; -},{"core-js/library/fn/promise":112}],60:[function(require,module,exports){ +},{"core-js/library/fn/promise":117}],63:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/set"), __esModule: true }; -},{"core-js/library/fn/set":113}],61:[function(require,module,exports){ +},{"core-js/library/fn/set":118}],64:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/symbol"), __esModule: true }; -},{"core-js/library/fn/symbol":114}],62:[function(require,module,exports){ +},{"core-js/library/fn/symbol":119}],65:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/symbol/iterator"), __esModule: true }; -},{"core-js/library/fn/symbol/iterator":115}],63:[function(require,module,exports){ +},{"core-js/library/fn/symbol/iterator":120}],66:[function(require,module,exports){ "use strict"; exports.__esModule = true; @@ -13076,7 +14118,7 @@ exports.default = function (instance, Constructor) { throw new TypeError("Cannot call a class as a function"); } }; -},{}],64:[function(require,module,exports){ +},{}],67:[function(require,module,exports){ "use strict"; exports.__esModule = true; @@ -13104,7 +14146,32 @@ exports.default = function () { return Constructor; }; }(); -},{"../core-js/object/define-property":54}],65:[function(require,module,exports){ +},{"../core-js/object/define-property":57}],68:[function(require,module,exports){ +"use strict"; + +exports.__esModule = true; + +var _defineProperty = require("../core-js/object/define-property"); + +var _defineProperty2 = _interopRequireDefault(_defineProperty); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = function (obj, key, value) { + if (key in obj) { + (0, _defineProperty2.default)(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +}; +},{"../core-js/object/define-property":57}],69:[function(require,module,exports){ "use strict"; exports.__esModule = true; @@ -13143,7 +14210,7 @@ exports.default = function get(object, property, receiver) { return getter.call(receiver); } }; -},{"../core-js/object/get-own-property-descriptor":55,"../core-js/object/get-prototype-of":56}],66:[function(require,module,exports){ +},{"../core-js/object/get-own-property-descriptor":58,"../core-js/object/get-prototype-of":59}],70:[function(require,module,exports){ "use strict"; exports.__esModule = true; @@ -13177,7 +14244,7 @@ exports.default = function (subClass, superClass) { }); if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass; }; -},{"../core-js/object/create":53,"../core-js/object/set-prototype-of":58,"../helpers/typeof":69}],67:[function(require,module,exports){ +},{"../core-js/object/create":56,"../core-js/object/set-prototype-of":61,"../helpers/typeof":73}],71:[function(require,module,exports){ "use strict"; exports.__esModule = true; @@ -13195,7 +14262,7 @@ exports.default = function (self, call) { return call && ((typeof call === "undefined" ? "undefined" : (0, _typeof3.default)(call)) === "object" || typeof call === "function") ? call : self; }; -},{"../helpers/typeof":69}],68:[function(require,module,exports){ +},{"../helpers/typeof":73}],72:[function(require,module,exports){ "use strict"; exports.__esModule = true; @@ -13217,7 +14284,7 @@ exports.default = function (arr) { return (0, _from2.default)(arr); } }; -},{"../core-js/array/from":50}],69:[function(require,module,exports){ +},{"../core-js/array/from":53}],73:[function(require,module,exports){ "use strict"; exports.__esModule = true; @@ -13239,7 +14306,7 @@ exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.d } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj); }; -},{"../core-js/symbol":61,"../core-js/symbol/iterator":62}],70:[function(require,module,exports){ +},{"../core-js/symbol":64,"../core-js/symbol/iterator":65}],74:[function(require,module,exports){ 'use strict' exports.byteLength = byteLength @@ -13355,7 +14422,7 @@ function fromByteArray (uint8) { return parts.join('') } -},{}],71:[function(require,module,exports){ +},{}],75:[function(require,module,exports){ (function (module, exports) { 'use strict'; @@ -16784,7 +17851,7 @@ function fromByteArray (uint8) { }; })(typeof module === 'undefined' || module, this); -},{}],72:[function(require,module,exports){ +},{}],76:[function(require,module,exports){ var r; module.exports = function rand(len) { @@ -16851,9 +17918,9 @@ if (typeof self === 'object') { } } -},{"crypto":73}],73:[function(require,module,exports){ +},{"crypto":77}],77:[function(require,module,exports){ -},{}],74:[function(require,module,exports){ +},{}],78:[function(require,module,exports){ (function (Buffer){ // based on the aes implimentation in triple sec // https://github.com/keybase/triplesec @@ -17035,7 +18102,7 @@ exports.AES = AES }).call(this,require("buffer").Buffer) -},{"buffer":101}],75:[function(require,module,exports){ +},{"buffer":105}],79:[function(require,module,exports){ (function (Buffer){ var aes = require('./aes') var Transform = require('cipher-base') @@ -17137,7 +18204,7 @@ function xorTest (a, b) { }).call(this,require("buffer").Buffer) -},{"./aes":74,"./ghash":79,"buffer":101,"buffer-xor":100,"cipher-base":102,"inherits":258}],76:[function(require,module,exports){ +},{"./aes":78,"./ghash":83,"buffer":105,"buffer-xor":104,"cipher-base":106,"inherits":297}],80:[function(require,module,exports){ var ciphers = require('./encrypter') exports.createCipher = exports.Cipher = ciphers.createCipher exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv @@ -17150,7 +18217,7 @@ function getCiphers () { } exports.listCiphers = exports.getCiphers = getCiphers -},{"./decrypter":77,"./encrypter":78,"./modes":80}],77:[function(require,module,exports){ +},{"./decrypter":81,"./encrypter":82,"./modes":84}],81:[function(require,module,exports){ (function (Buffer){ var aes = require('./aes') var Transform = require('cipher-base') @@ -17292,7 +18359,7 @@ exports.createDecipheriv = createDecipheriv }).call(this,require("buffer").Buffer) -},{"./aes":74,"./authCipher":75,"./modes":80,"./modes/cbc":81,"./modes/cfb":82,"./modes/cfb1":83,"./modes/cfb8":84,"./modes/ctr":85,"./modes/ecb":86,"./modes/ofb":87,"./streamCipher":88,"buffer":101,"cipher-base":102,"evp_bytestokey":248,"inherits":258}],78:[function(require,module,exports){ +},{"./aes":78,"./authCipher":79,"./modes":84,"./modes/cbc":85,"./modes/cfb":86,"./modes/cfb1":87,"./modes/cfb8":88,"./modes/ctr":89,"./modes/ecb":90,"./modes/ofb":91,"./streamCipher":92,"buffer":105,"cipher-base":106,"evp_bytestokey":253,"inherits":297}],82:[function(require,module,exports){ (function (Buffer){ var aes = require('./aes') var Transform = require('cipher-base') @@ -17419,7 +18486,7 @@ exports.createCipher = createCipher }).call(this,require("buffer").Buffer) -},{"./aes":74,"./authCipher":75,"./modes":80,"./modes/cbc":81,"./modes/cfb":82,"./modes/cfb1":83,"./modes/cfb8":84,"./modes/ctr":85,"./modes/ecb":86,"./modes/ofb":87,"./streamCipher":88,"buffer":101,"cipher-base":102,"evp_bytestokey":248,"inherits":258}],79:[function(require,module,exports){ +},{"./aes":78,"./authCipher":79,"./modes":84,"./modes/cbc":85,"./modes/cfb":86,"./modes/cfb1":87,"./modes/cfb8":88,"./modes/ctr":89,"./modes/ecb":90,"./modes/ofb":91,"./streamCipher":92,"buffer":105,"cipher-base":106,"evp_bytestokey":253,"inherits":297}],83:[function(require,module,exports){ (function (Buffer){ var zeros = new Buffer(16) zeros.fill(0) @@ -17522,7 +18589,7 @@ function xor (a, b) { }).call(this,require("buffer").Buffer) -},{"buffer":101}],80:[function(require,module,exports){ +},{"buffer":105}],84:[function(require,module,exports){ exports['aes-128-ecb'] = { cipher: 'AES', key: 128, @@ -17695,7 +18762,7 @@ exports['aes-256-gcm'] = { type: 'auth' } -},{}],81:[function(require,module,exports){ +},{}],85:[function(require,module,exports){ var xor = require('buffer-xor') exports.encrypt = function (self, block) { @@ -17714,7 +18781,7 @@ exports.decrypt = function (self, block) { return xor(out, pad) } -},{"buffer-xor":100}],82:[function(require,module,exports){ +},{"buffer-xor":104}],86:[function(require,module,exports){ (function (Buffer){ var xor = require('buffer-xor') @@ -17750,7 +18817,7 @@ function encryptStart (self, data, decrypt) { }).call(this,require("buffer").Buffer) -},{"buffer":101,"buffer-xor":100}],83:[function(require,module,exports){ +},{"buffer":105,"buffer-xor":104}],87:[function(require,module,exports){ (function (Buffer){ function encryptByte (self, byteParam, decrypt) { var pad @@ -17789,7 +18856,7 @@ function shiftIn (buffer, value) { }).call(this,require("buffer").Buffer) -},{"buffer":101}],84:[function(require,module,exports){ +},{"buffer":105}],88:[function(require,module,exports){ (function (Buffer){ function encryptByte (self, byteParam, decrypt) { var pad = self._cipher.encryptBlock(self._prev) @@ -17809,7 +18876,7 @@ exports.encrypt = function (self, chunk, decrypt) { }).call(this,require("buffer").Buffer) -},{"buffer":101}],85:[function(require,module,exports){ +},{"buffer":105}],89:[function(require,module,exports){ (function (Buffer){ var xor = require('buffer-xor') @@ -17845,7 +18912,7 @@ exports.encrypt = function (self, chunk) { }).call(this,require("buffer").Buffer) -},{"buffer":101,"buffer-xor":100}],86:[function(require,module,exports){ +},{"buffer":105,"buffer-xor":104}],90:[function(require,module,exports){ exports.encrypt = function (self, block) { return self._cipher.encryptBlock(block) } @@ -17853,7 +18920,7 @@ exports.decrypt = function (self, block) { return self._cipher.decryptBlock(block) } -},{}],87:[function(require,module,exports){ +},{}],91:[function(require,module,exports){ (function (Buffer){ var xor = require('buffer-xor') @@ -17874,7 +18941,7 @@ exports.encrypt = function (self, chunk) { }).call(this,require("buffer").Buffer) -},{"buffer":101,"buffer-xor":100}],88:[function(require,module,exports){ +},{"buffer":105,"buffer-xor":104}],92:[function(require,module,exports){ (function (Buffer){ var aes = require('./aes') var Transform = require('cipher-base') @@ -17904,7 +18971,7 @@ StreamCipher.prototype._final = function () { }).call(this,require("buffer").Buffer) -},{"./aes":74,"buffer":101,"cipher-base":102,"inherits":258}],89:[function(require,module,exports){ +},{"./aes":78,"buffer":105,"cipher-base":106,"inherits":297}],93:[function(require,module,exports){ var ebtk = require('evp_bytestokey') var aes = require('browserify-aes/browser') var DES = require('browserify-des') @@ -17979,7 +19046,7 @@ function getCiphers () { } exports.listCiphers = exports.getCiphers = getCiphers -},{"browserify-aes/browser":76,"browserify-aes/modes":80,"browserify-des":90,"browserify-des/modes":91,"evp_bytestokey":248}],90:[function(require,module,exports){ +},{"browserify-aes/browser":80,"browserify-aes/modes":84,"browserify-des":94,"browserify-des/modes":95,"evp_bytestokey":253}],94:[function(require,module,exports){ (function (Buffer){ var CipherBase = require('cipher-base') var des = require('des.js') @@ -18027,7 +19094,7 @@ DES.prototype._final = function () { }).call(this,require("buffer").Buffer) -},{"buffer":101,"cipher-base":102,"des.js":221,"inherits":258}],91:[function(require,module,exports){ +},{"buffer":105,"cipher-base":106,"des.js":226,"inherits":297}],95:[function(require,module,exports){ exports['des-ecb'] = { key: 8, iv: 0 @@ -18053,7 +19120,7 @@ exports['des-ede'] = { iv: 0 } -},{}],92:[function(require,module,exports){ +},{}],96:[function(require,module,exports){ (function (Buffer){ var bn = require('bn.js'); var randomBytes = require('randombytes'); @@ -18098,7 +19165,7 @@ function getr(priv) { }).call(this,require("buffer").Buffer) -},{"bn.js":71,"buffer":101,"randombytes":282}],93:[function(require,module,exports){ +},{"bn.js":75,"buffer":105,"randombytes":324}],97:[function(require,module,exports){ (function (Buffer){ 'use strict' exports['RSA-SHA224'] = exports.sha224WithRSAEncryption = { @@ -18175,7 +19242,7 @@ exports['RSA-MD5'] = exports.md5WithRSAEncryption = { }).call(this,require("buffer").Buffer) -},{"buffer":101}],94:[function(require,module,exports){ +},{"buffer":105}],98:[function(require,module,exports){ (function (Buffer){ var _algos = require('./algos') var createHash = require('create-hash') @@ -18283,7 +19350,7 @@ module.exports = { }).call(this,require("buffer").Buffer) -},{"./algos":93,"./sign":96,"./verify":97,"buffer":101,"create-hash":216,"inherits":258,"stream":303}],95:[function(require,module,exports){ +},{"./algos":97,"./sign":100,"./verify":101,"buffer":105,"create-hash":221,"inherits":297,"stream":345}],99:[function(require,module,exports){ 'use strict' exports['1.3.132.0.10'] = 'secp256k1' @@ -18297,7 +19364,7 @@ exports['1.3.132.0.34'] = 'p384' exports['1.3.132.0.35'] = 'p521' -},{}],96:[function(require,module,exports){ +},{}],100:[function(require,module,exports){ (function (Buffer){ // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js var createHmac = require('create-hmac') @@ -18487,7 +19554,7 @@ module.exports.makeKey = makeKey }).call(this,require("buffer").Buffer) -},{"./curves":95,"bn.js":71,"browserify-rsa":92,"buffer":101,"create-hmac":219,"elliptic":231,"parse-asn1":270}],97:[function(require,module,exports){ +},{"./curves":99,"bn.js":75,"browserify-rsa":96,"buffer":105,"create-hmac":224,"elliptic":236,"parse-asn1":312}],101:[function(require,module,exports){ (function (Buffer){ // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js var curves = require('./curves') @@ -18595,9 +19662,9 @@ module.exports = verify }).call(this,require("buffer").Buffer) -},{"./curves":95,"bn.js":71,"buffer":101,"elliptic":231,"parse-asn1":270}],98:[function(require,module,exports){ -arguments[4][73][0].apply(exports,arguments) -},{"dup":73}],99:[function(require,module,exports){ +},{"./curves":99,"bn.js":75,"buffer":105,"elliptic":236,"parse-asn1":312}],102:[function(require,module,exports){ +arguments[4][77][0].apply(exports,arguments) +},{"dup":77}],103:[function(require,module,exports){ (function (global){ 'use strict'; @@ -18710,7 +19777,7 @@ exports.allocUnsafeSlow = function allocUnsafeSlow(size) { }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"buffer":101}],100:[function(require,module,exports){ +},{"buffer":105}],104:[function(require,module,exports){ (function (Buffer){ module.exports = function xor (a, b) { var length = Math.min(a.length, b.length) @@ -18725,7 +19792,7 @@ module.exports = function xor (a, b) { }).call(this,require("buffer").Buffer) -},{"buffer":101}],101:[function(require,module,exports){ +},{"buffer":105}],105:[function(require,module,exports){ (function (global){ /*! * The buffer module from node.js, for the browser. @@ -20519,7 +21586,7 @@ function isnan (val) { }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"base64-js":70,"ieee754":256,"isarray":260}],102:[function(require,module,exports){ +},{"base64-js":74,"ieee754":295,"isarray":299}],106:[function(require,module,exports){ (function (Buffer){ var Transform = require('stream').Transform var inherits = require('inherits') @@ -20614,89 +21681,300 @@ CipherBase.prototype._toString = function (value, enc, fin) { }).call(this,require("buffer").Buffer) -},{"buffer":101,"inherits":258,"stream":303,"string_decoder":304}],103:[function(require,module,exports){ +},{"buffer":105,"inherits":297,"stream":345,"string_decoder":346}],107:[function(require,module,exports){ +module.exports={ + "O_RDONLY": 0, + "O_WRONLY": 1, + "O_RDWR": 2, + "S_IFMT": 61440, + "S_IFREG": 32768, + "S_IFDIR": 16384, + "S_IFCHR": 8192, + "S_IFBLK": 24576, + "S_IFIFO": 4096, + "S_IFLNK": 40960, + "S_IFSOCK": 49152, + "O_CREAT": 512, + "O_EXCL": 2048, + "O_NOCTTY": 131072, + "O_TRUNC": 1024, + "O_APPEND": 8, + "O_DIRECTORY": 1048576, + "O_NOFOLLOW": 256, + "O_SYNC": 128, + "O_SYMLINK": 2097152, + "O_NONBLOCK": 4, + "S_IRWXU": 448, + "S_IRUSR": 256, + "S_IWUSR": 128, + "S_IXUSR": 64, + "S_IRWXG": 56, + "S_IRGRP": 32, + "S_IWGRP": 16, + "S_IXGRP": 8, + "S_IRWXO": 7, + "S_IROTH": 4, + "S_IWOTH": 2, + "S_IXOTH": 1, + "E2BIG": 7, + "EACCES": 13, + "EADDRINUSE": 48, + "EADDRNOTAVAIL": 49, + "EAFNOSUPPORT": 47, + "EAGAIN": 35, + "EALREADY": 37, + "EBADF": 9, + "EBADMSG": 94, + "EBUSY": 16, + "ECANCELED": 89, + "ECHILD": 10, + "ECONNABORTED": 53, + "ECONNREFUSED": 61, + "ECONNRESET": 54, + "EDEADLK": 11, + "EDESTADDRREQ": 39, + "EDOM": 33, + "EDQUOT": 69, + "EEXIST": 17, + "EFAULT": 14, + "EFBIG": 27, + "EHOSTUNREACH": 65, + "EIDRM": 90, + "EILSEQ": 92, + "EINPROGRESS": 36, + "EINTR": 4, + "EINVAL": 22, + "EIO": 5, + "EISCONN": 56, + "EISDIR": 21, + "ELOOP": 62, + "EMFILE": 24, + "EMLINK": 31, + "EMSGSIZE": 40, + "EMULTIHOP": 95, + "ENAMETOOLONG": 63, + "ENETDOWN": 50, + "ENETRESET": 52, + "ENETUNREACH": 51, + "ENFILE": 23, + "ENOBUFS": 55, + "ENODATA": 96, + "ENODEV": 19, + "ENOENT": 2, + "ENOEXEC": 8, + "ENOLCK": 77, + "ENOLINK": 97, + "ENOMEM": 12, + "ENOMSG": 91, + "ENOPROTOOPT": 42, + "ENOSPC": 28, + "ENOSR": 98, + "ENOSTR": 99, + "ENOSYS": 78, + "ENOTCONN": 57, + "ENOTDIR": 20, + "ENOTEMPTY": 66, + "ENOTSOCK": 38, + "ENOTSUP": 45, + "ENOTTY": 25, + "ENXIO": 6, + "EOPNOTSUPP": 102, + "EOVERFLOW": 84, + "EPERM": 1, + "EPIPE": 32, + "EPROTO": 100, + "EPROTONOSUPPORT": 43, + "EPROTOTYPE": 41, + "ERANGE": 34, + "EROFS": 30, + "ESPIPE": 29, + "ESRCH": 3, + "ESTALE": 70, + "ETIME": 101, + "ETIMEDOUT": 60, + "ETXTBSY": 26, + "EWOULDBLOCK": 35, + "EXDEV": 18, + "SIGHUP": 1, + "SIGINT": 2, + "SIGQUIT": 3, + "SIGILL": 4, + "SIGTRAP": 5, + "SIGABRT": 6, + "SIGIOT": 6, + "SIGBUS": 10, + "SIGFPE": 8, + "SIGKILL": 9, + "SIGUSR1": 30, + "SIGSEGV": 11, + "SIGUSR2": 31, + "SIGPIPE": 13, + "SIGALRM": 14, + "SIGTERM": 15, + "SIGCHLD": 20, + "SIGCONT": 19, + "SIGSTOP": 17, + "SIGTSTP": 18, + "SIGTTIN": 21, + "SIGTTOU": 22, + "SIGURG": 16, + "SIGXCPU": 24, + "SIGXFSZ": 25, + "SIGVTALRM": 26, + "SIGPROF": 27, + "SIGWINCH": 28, + "SIGIO": 23, + "SIGSYS": 12, + "SSL_OP_ALL": 2147486719, + "SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION": 262144, + "SSL_OP_CIPHER_SERVER_PREFERENCE": 4194304, + "SSL_OP_CISCO_ANYCONNECT": 32768, + "SSL_OP_COOKIE_EXCHANGE": 8192, + "SSL_OP_CRYPTOPRO_TLSEXT_BUG": 2147483648, + "SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS": 2048, + "SSL_OP_EPHEMERAL_RSA": 0, + "SSL_OP_LEGACY_SERVER_CONNECT": 4, + "SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER": 32, + "SSL_OP_MICROSOFT_SESS_ID_BUG": 1, + "SSL_OP_MSIE_SSLV2_RSA_PADDING": 0, + "SSL_OP_NETSCAPE_CA_DN_BUG": 536870912, + "SSL_OP_NETSCAPE_CHALLENGE_BUG": 2, + "SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG": 1073741824, + "SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG": 8, + "SSL_OP_NO_COMPRESSION": 131072, + "SSL_OP_NO_QUERY_MTU": 4096, + "SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION": 65536, + "SSL_OP_NO_SSLv2": 16777216, + "SSL_OP_NO_SSLv3": 33554432, + "SSL_OP_NO_TICKET": 16384, + "SSL_OP_NO_TLSv1": 67108864, + "SSL_OP_NO_TLSv1_1": 268435456, + "SSL_OP_NO_TLSv1_2": 134217728, + "SSL_OP_PKCS1_CHECK_1": 0, + "SSL_OP_PKCS1_CHECK_2": 0, + "SSL_OP_SINGLE_DH_USE": 1048576, + "SSL_OP_SINGLE_ECDH_USE": 524288, + "SSL_OP_SSLEAY_080_CLIENT_DH_BUG": 128, + "SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG": 0, + "SSL_OP_TLS_BLOCK_PADDING_BUG": 512, + "SSL_OP_TLS_D5_BUG": 256, + "SSL_OP_TLS_ROLLBACK_BUG": 8388608, + "ENGINE_METHOD_DSA": 2, + "ENGINE_METHOD_DH": 4, + "ENGINE_METHOD_RAND": 8, + "ENGINE_METHOD_ECDH": 16, + "ENGINE_METHOD_ECDSA": 32, + "ENGINE_METHOD_CIPHERS": 64, + "ENGINE_METHOD_DIGESTS": 128, + "ENGINE_METHOD_STORE": 256, + "ENGINE_METHOD_PKEY_METHS": 512, + "ENGINE_METHOD_PKEY_ASN1_METHS": 1024, + "ENGINE_METHOD_ALL": 65535, + "ENGINE_METHOD_NONE": 0, + "DH_CHECK_P_NOT_SAFE_PRIME": 2, + "DH_CHECK_P_NOT_PRIME": 1, + "DH_UNABLE_TO_CHECK_GENERATOR": 4, + "DH_NOT_SUITABLE_GENERATOR": 8, + "NPN_ENABLED": 1, + "RSA_PKCS1_PADDING": 1, + "RSA_SSLV23_PADDING": 2, + "RSA_NO_PADDING": 3, + "RSA_PKCS1_OAEP_PADDING": 4, + "RSA_X931_PADDING": 5, + "RSA_PKCS1_PSS_PADDING": 6, + "POINT_CONVERSION_COMPRESSED": 2, + "POINT_CONVERSION_UNCOMPRESSED": 4, + "POINT_CONVERSION_HYBRID": 6, + "F_OK": 0, + "R_OK": 4, + "W_OK": 2, + "X_OK": 1, + "UV_UDP_REUSEADDR": 4 +} + +},{}],108:[function(require,module,exports){ require('../../modules/es6.string.iterator'); require('../../modules/es6.array.from'); module.exports = require('../../modules/_core').Array.from; -},{"../../modules/_core":130,"../../modules/es6.array.from":196,"../../modules/es6.string.iterator":208}],104:[function(require,module,exports){ +},{"../../modules/_core":135,"../../modules/es6.array.from":201,"../../modules/es6.string.iterator":213}],109:[function(require,module,exports){ var core = require('../../modules/_core') , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify}); module.exports = function stringify(it){ // eslint-disable-line no-unused-vars return $JSON.stringify.apply($JSON, arguments); }; -},{"../../modules/_core":130}],105:[function(require,module,exports){ +},{"../../modules/_core":135}],110:[function(require,module,exports){ require('../../modules/es6.object.assign'); module.exports = require('../../modules/_core').Object.assign; -},{"../../modules/_core":130,"../../modules/es6.object.assign":198}],106:[function(require,module,exports){ +},{"../../modules/_core":135,"../../modules/es6.object.assign":203}],111:[function(require,module,exports){ require('../../modules/es6.object.create'); var $Object = require('../../modules/_core').Object; module.exports = function create(P, D){ return $Object.create(P, D); }; -},{"../../modules/_core":130,"../../modules/es6.object.create":199}],107:[function(require,module,exports){ +},{"../../modules/_core":135,"../../modules/es6.object.create":204}],112:[function(require,module,exports){ require('../../modules/es6.object.define-property'); var $Object = require('../../modules/_core').Object; module.exports = function defineProperty(it, key, desc){ return $Object.defineProperty(it, key, desc); }; -},{"../../modules/_core":130,"../../modules/es6.object.define-property":200}],108:[function(require,module,exports){ +},{"../../modules/_core":135,"../../modules/es6.object.define-property":205}],113:[function(require,module,exports){ require('../../modules/es6.object.get-own-property-descriptor'); var $Object = require('../../modules/_core').Object; module.exports = function getOwnPropertyDescriptor(it, key){ return $Object.getOwnPropertyDescriptor(it, key); }; -},{"../../modules/_core":130,"../../modules/es6.object.get-own-property-descriptor":201}],109:[function(require,module,exports){ +},{"../../modules/_core":135,"../../modules/es6.object.get-own-property-descriptor":206}],114:[function(require,module,exports){ require('../../modules/es6.object.get-prototype-of'); module.exports = require('../../modules/_core').Object.getPrototypeOf; -},{"../../modules/_core":130,"../../modules/es6.object.get-prototype-of":202}],110:[function(require,module,exports){ +},{"../../modules/_core":135,"../../modules/es6.object.get-prototype-of":207}],115:[function(require,module,exports){ require('../../modules/es6.object.keys'); module.exports = require('../../modules/_core').Object.keys; -},{"../../modules/_core":130,"../../modules/es6.object.keys":203}],111:[function(require,module,exports){ +},{"../../modules/_core":135,"../../modules/es6.object.keys":208}],116:[function(require,module,exports){ require('../../modules/es6.object.set-prototype-of'); module.exports = require('../../modules/_core').Object.setPrototypeOf; -},{"../../modules/_core":130,"../../modules/es6.object.set-prototype-of":204}],112:[function(require,module,exports){ +},{"../../modules/_core":135,"../../modules/es6.object.set-prototype-of":209}],117:[function(require,module,exports){ require('../modules/es6.object.to-string'); require('../modules/es6.string.iterator'); require('../modules/web.dom.iterable'); require('../modules/es6.promise'); module.exports = require('../modules/_core').Promise; -},{"../modules/_core":130,"../modules/es6.object.to-string":205,"../modules/es6.promise":206,"../modules/es6.string.iterator":208,"../modules/web.dom.iterable":213}],113:[function(require,module,exports){ +},{"../modules/_core":135,"../modules/es6.object.to-string":210,"../modules/es6.promise":211,"../modules/es6.string.iterator":213,"../modules/web.dom.iterable":218}],118:[function(require,module,exports){ require('../modules/es6.object.to-string'); require('../modules/es6.string.iterator'); require('../modules/web.dom.iterable'); require('../modules/es6.set'); require('../modules/es7.set.to-json'); module.exports = require('../modules/_core').Set; -},{"../modules/_core":130,"../modules/es6.object.to-string":205,"../modules/es6.set":207,"../modules/es6.string.iterator":208,"../modules/es7.set.to-json":210,"../modules/web.dom.iterable":213}],114:[function(require,module,exports){ +},{"../modules/_core":135,"../modules/es6.object.to-string":210,"../modules/es6.set":212,"../modules/es6.string.iterator":213,"../modules/es7.set.to-json":215,"../modules/web.dom.iterable":218}],119:[function(require,module,exports){ require('../../modules/es6.symbol'); require('../../modules/es6.object.to-string'); require('../../modules/es7.symbol.async-iterator'); require('../../modules/es7.symbol.observable'); module.exports = require('../../modules/_core').Symbol; -},{"../../modules/_core":130,"../../modules/es6.object.to-string":205,"../../modules/es6.symbol":209,"../../modules/es7.symbol.async-iterator":211,"../../modules/es7.symbol.observable":212}],115:[function(require,module,exports){ +},{"../../modules/_core":135,"../../modules/es6.object.to-string":210,"../../modules/es6.symbol":214,"../../modules/es7.symbol.async-iterator":216,"../../modules/es7.symbol.observable":217}],120:[function(require,module,exports){ require('../../modules/es6.string.iterator'); require('../../modules/web.dom.iterable'); module.exports = require('../../modules/_wks-ext').f('iterator'); -},{"../../modules/_wks-ext":193,"../../modules/es6.string.iterator":208,"../../modules/web.dom.iterable":213}],116:[function(require,module,exports){ +},{"../../modules/_wks-ext":198,"../../modules/es6.string.iterator":213,"../../modules/web.dom.iterable":218}],121:[function(require,module,exports){ module.exports = function(it){ if(typeof it != 'function')throw TypeError(it + ' is not a function!'); return it; }; -},{}],117:[function(require,module,exports){ +},{}],122:[function(require,module,exports){ module.exports = function(){ /* empty */ }; -},{}],118:[function(require,module,exports){ +},{}],123:[function(require,module,exports){ module.exports = function(it, Constructor, name, forbiddenField){ if(!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)){ throw TypeError(name + ': incorrect invocation!'); } return it; }; -},{}],119:[function(require,module,exports){ +},{}],124:[function(require,module,exports){ var isObject = require('./_is-object'); module.exports = function(it){ if(!isObject(it))throw TypeError(it + ' is not an object!'); return it; }; -},{"./_is-object":150}],120:[function(require,module,exports){ +},{"./_is-object":155}],125:[function(require,module,exports){ var forOf = require('./_for-of'); module.exports = function(iter, ITERATOR){ @@ -20705,7 +21983,7 @@ module.exports = function(iter, ITERATOR){ return result; }; -},{"./_for-of":140}],121:[function(require,module,exports){ +},{"./_for-of":145}],126:[function(require,module,exports){ // false -> Array#indexOf // true -> Array#includes var toIObject = require('./_to-iobject') @@ -20727,7 +22005,7 @@ module.exports = function(IS_INCLUDES){ } return !IS_INCLUDES && -1; }; }; -},{"./_to-index":185,"./_to-iobject":187,"./_to-length":188}],122:[function(require,module,exports){ +},{"./_to-index":190,"./_to-iobject":192,"./_to-length":193}],127:[function(require,module,exports){ // 0 -> Array#forEach // 1 -> Array#map // 2 -> Array#filter @@ -20772,7 +22050,7 @@ module.exports = function(TYPE, $create){ return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; }; }; -},{"./_array-species-create":124,"./_ctx":132,"./_iobject":147,"./_to-length":188,"./_to-object":189}],123:[function(require,module,exports){ +},{"./_array-species-create":129,"./_ctx":137,"./_iobject":152,"./_to-length":193,"./_to-object":194}],128:[function(require,module,exports){ var isObject = require('./_is-object') , isArray = require('./_is-array') , SPECIES = require('./_wks')('species'); @@ -20789,14 +22067,14 @@ module.exports = function(original){ } } return C === undefined ? Array : C; }; -},{"./_is-array":149,"./_is-object":150,"./_wks":194}],124:[function(require,module,exports){ +},{"./_is-array":154,"./_is-object":155,"./_wks":199}],129:[function(require,module,exports){ // 9.4.2.3 ArraySpeciesCreate(originalArray, length) var speciesConstructor = require('./_array-species-constructor'); module.exports = function(original, length){ return new (speciesConstructor(original))(length); }; -},{"./_array-species-constructor":123}],125:[function(require,module,exports){ +},{"./_array-species-constructor":128}],130:[function(require,module,exports){ // getting tag from 19.1.3.6 Object.prototype.toString() var cof = require('./_cof') , TAG = require('./_wks')('toStringTag') @@ -20820,13 +22098,13 @@ module.exports = function(it){ // ES3 arguments fallback : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; }; -},{"./_cof":126,"./_wks":194}],126:[function(require,module,exports){ +},{"./_cof":131,"./_wks":199}],131:[function(require,module,exports){ var toString = {}.toString; module.exports = function(it){ return toString.call(it).slice(8, -1); }; -},{}],127:[function(require,module,exports){ +},{}],132:[function(require,module,exports){ 'use strict'; var dP = require('./_object-dp').f , create = require('./_object-create') @@ -20969,7 +22247,7 @@ module.exports = { setSpecies(NAME); } }; -},{"./_an-instance":118,"./_ctx":132,"./_defined":133,"./_descriptors":134,"./_for-of":140,"./_iter-define":153,"./_iter-step":155,"./_meta":159,"./_object-create":162,"./_object-dp":163,"./_redefine-all":175,"./_set-species":178}],128:[function(require,module,exports){ +},{"./_an-instance":123,"./_ctx":137,"./_defined":138,"./_descriptors":139,"./_for-of":145,"./_iter-define":158,"./_iter-step":160,"./_meta":164,"./_object-create":167,"./_object-dp":168,"./_redefine-all":180,"./_set-species":183}],133:[function(require,module,exports){ // https://github.com/DavidBruant/Map-Set.prototype.toJSON var classof = require('./_classof') , from = require('./_array-from-iterable'); @@ -20979,7 +22257,7 @@ module.exports = function(NAME){ return from(this); }; }; -},{"./_array-from-iterable":120,"./_classof":125}],129:[function(require,module,exports){ +},{"./_array-from-iterable":125,"./_classof":130}],134:[function(require,module,exports){ 'use strict'; var global = require('./_global') , $export = require('./_export') @@ -21039,10 +22317,10 @@ module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){ return C; }; -},{"./_an-instance":118,"./_array-methods":122,"./_descriptors":134,"./_export":138,"./_fails":139,"./_for-of":140,"./_global":141,"./_hide":143,"./_is-object":150,"./_meta":159,"./_object-dp":163,"./_redefine-all":175,"./_set-to-string-tag":179}],130:[function(require,module,exports){ +},{"./_an-instance":123,"./_array-methods":127,"./_descriptors":139,"./_export":143,"./_fails":144,"./_for-of":145,"./_global":146,"./_hide":148,"./_is-object":155,"./_meta":164,"./_object-dp":168,"./_redefine-all":180,"./_set-to-string-tag":184}],135:[function(require,module,exports){ var core = module.exports = {version: '2.4.0'}; if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef -},{}],131:[function(require,module,exports){ +},{}],136:[function(require,module,exports){ 'use strict'; var $defineProperty = require('./_object-dp') , createDesc = require('./_property-desc'); @@ -21051,7 +22329,7 @@ module.exports = function(object, index, value){ if(index in object)$defineProperty.f(object, index, createDesc(0, value)); else object[index] = value; }; -},{"./_object-dp":163,"./_property-desc":174}],132:[function(require,module,exports){ +},{"./_object-dp":168,"./_property-desc":179}],137:[function(require,module,exports){ // optional / simple context binding var aFunction = require('./_a-function'); module.exports = function(fn, that, length){ @@ -21072,18 +22350,18 @@ module.exports = function(fn, that, length){ return fn.apply(that, arguments); }; }; -},{"./_a-function":116}],133:[function(require,module,exports){ +},{"./_a-function":121}],138:[function(require,module,exports){ // 7.2.1 RequireObjectCoercible(argument) module.exports = function(it){ if(it == undefined)throw TypeError("Can't call method on " + it); return it; }; -},{}],134:[function(require,module,exports){ +},{}],139:[function(require,module,exports){ // Thank's IE8 for his funny defineProperty module.exports = !require('./_fails')(function(){ return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; }); -},{"./_fails":139}],135:[function(require,module,exports){ +},{"./_fails":144}],140:[function(require,module,exports){ var isObject = require('./_is-object') , document = require('./_global').document // in old IE typeof document.createElement is 'object' @@ -21091,12 +22369,12 @@ var isObject = require('./_is-object') module.exports = function(it){ return is ? document.createElement(it) : {}; }; -},{"./_global":141,"./_is-object":150}],136:[function(require,module,exports){ +},{"./_global":146,"./_is-object":155}],141:[function(require,module,exports){ // IE 8- don't enum bug keys module.exports = ( 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' ).split(','); -},{}],137:[function(require,module,exports){ +},{}],142:[function(require,module,exports){ // all enumerable object keys, includes symbols var getKeys = require('./_object-keys') , gOPS = require('./_object-gops') @@ -21112,7 +22390,7 @@ module.exports = function(it){ while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key); } return result; }; -},{"./_object-gops":168,"./_object-keys":171,"./_object-pie":172}],138:[function(require,module,exports){ +},{"./_object-gops":173,"./_object-keys":176,"./_object-pie":177}],143:[function(require,module,exports){ var global = require('./_global') , core = require('./_core') , ctx = require('./_ctx') @@ -21174,7 +22452,7 @@ $export.W = 32; // wrap $export.U = 64; // safe $export.R = 128; // real proto method for `library` module.exports = $export; -},{"./_core":130,"./_ctx":132,"./_global":141,"./_hide":143}],139:[function(require,module,exports){ +},{"./_core":135,"./_ctx":137,"./_global":146,"./_hide":148}],144:[function(require,module,exports){ module.exports = function(exec){ try { return !!exec(); @@ -21182,7 +22460,7 @@ module.exports = function(exec){ return true; } }; -},{}],140:[function(require,module,exports){ +},{}],145:[function(require,module,exports){ var ctx = require('./_ctx') , call = require('./_iter-call') , isArrayIter = require('./_is-array-iter') @@ -21208,17 +22486,17 @@ var exports = module.exports = function(iterable, entries, fn, that, ITERATOR){ }; exports.BREAK = BREAK; exports.RETURN = RETURN; -},{"./_an-object":119,"./_ctx":132,"./_is-array-iter":148,"./_iter-call":151,"./_to-length":188,"./core.get-iterator-method":195}],141:[function(require,module,exports){ +},{"./_an-object":124,"./_ctx":137,"./_is-array-iter":153,"./_iter-call":156,"./_to-length":193,"./core.get-iterator-method":200}],146:[function(require,module,exports){ // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 var global = module.exports = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef -},{}],142:[function(require,module,exports){ +},{}],147:[function(require,module,exports){ var hasOwnProperty = {}.hasOwnProperty; module.exports = function(it, key){ return hasOwnProperty.call(it, key); }; -},{}],143:[function(require,module,exports){ +},{}],148:[function(require,module,exports){ var dP = require('./_object-dp') , createDesc = require('./_property-desc'); module.exports = require('./_descriptors') ? function(object, key, value){ @@ -21227,13 +22505,13 @@ module.exports = require('./_descriptors') ? function(object, key, value){ object[key] = value; return object; }; -},{"./_descriptors":134,"./_object-dp":163,"./_property-desc":174}],144:[function(require,module,exports){ +},{"./_descriptors":139,"./_object-dp":168,"./_property-desc":179}],149:[function(require,module,exports){ module.exports = require('./_global').document && document.documentElement; -},{"./_global":141}],145:[function(require,module,exports){ +},{"./_global":146}],150:[function(require,module,exports){ module.exports = !require('./_descriptors') && !require('./_fails')(function(){ return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7; }); -},{"./_descriptors":134,"./_dom-create":135,"./_fails":139}],146:[function(require,module,exports){ +},{"./_descriptors":139,"./_dom-create":140,"./_fails":144}],151:[function(require,module,exports){ // fast apply, http://jsperf.lnkit.com/fast-apply/5 module.exports = function(fn, args, that){ var un = that === undefined; @@ -21250,13 +22528,13 @@ module.exports = function(fn, args, that){ : fn.call(that, args[0], args[1], args[2], args[3]); } return fn.apply(that, args); }; -},{}],147:[function(require,module,exports){ +},{}],152:[function(require,module,exports){ // fallback for non-array-like ES3 and non-enumerable old V8 strings var cof = require('./_cof'); module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){ return cof(it) == 'String' ? it.split('') : Object(it); }; -},{"./_cof":126}],148:[function(require,module,exports){ +},{"./_cof":131}],153:[function(require,module,exports){ // check on default Array iterator var Iterators = require('./_iterators') , ITERATOR = require('./_wks')('iterator') @@ -21265,17 +22543,17 @@ var Iterators = require('./_iterators') module.exports = function(it){ return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); }; -},{"./_iterators":156,"./_wks":194}],149:[function(require,module,exports){ +},{"./_iterators":161,"./_wks":199}],154:[function(require,module,exports){ // 7.2.2 IsArray(argument) var cof = require('./_cof'); module.exports = Array.isArray || function isArray(arg){ return cof(arg) == 'Array'; }; -},{"./_cof":126}],150:[function(require,module,exports){ +},{"./_cof":131}],155:[function(require,module,exports){ module.exports = function(it){ return typeof it === 'object' ? it !== null : typeof it === 'function'; }; -},{}],151:[function(require,module,exports){ +},{}],156:[function(require,module,exports){ // call something on iterator step with safe closing on error var anObject = require('./_an-object'); module.exports = function(iterator, fn, value, entries){ @@ -21288,7 +22566,7 @@ module.exports = function(iterator, fn, value, entries){ throw e; } }; -},{"./_an-object":119}],152:[function(require,module,exports){ +},{"./_an-object":124}],157:[function(require,module,exports){ 'use strict'; var create = require('./_object-create') , descriptor = require('./_property-desc') @@ -21302,7 +22580,7 @@ module.exports = function(Constructor, NAME, next){ Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)}); setToStringTag(Constructor, NAME + ' Iterator'); }; -},{"./_hide":143,"./_object-create":162,"./_property-desc":174,"./_set-to-string-tag":179,"./_wks":194}],153:[function(require,module,exports){ +},{"./_hide":148,"./_object-create":167,"./_property-desc":179,"./_set-to-string-tag":184,"./_wks":199}],158:[function(require,module,exports){ 'use strict'; var LIBRARY = require('./_library') , $export = require('./_export') @@ -21373,7 +22651,7 @@ module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED } return methods; }; -},{"./_export":138,"./_has":142,"./_hide":143,"./_iter-create":152,"./_iterators":156,"./_library":158,"./_object-gpo":169,"./_redefine":176,"./_set-to-string-tag":179,"./_wks":194}],154:[function(require,module,exports){ +},{"./_export":143,"./_has":147,"./_hide":148,"./_iter-create":157,"./_iterators":161,"./_library":163,"./_object-gpo":174,"./_redefine":181,"./_set-to-string-tag":184,"./_wks":199}],159:[function(require,module,exports){ var ITERATOR = require('./_wks')('iterator') , SAFE_CLOSING = false; @@ -21395,13 +22673,13 @@ module.exports = function(exec, skipClosing){ } catch(e){ /* empty */ } return safe; }; -},{"./_wks":194}],155:[function(require,module,exports){ +},{"./_wks":199}],160:[function(require,module,exports){ module.exports = function(done, value){ return {value: value, done: !!done}; }; -},{}],156:[function(require,module,exports){ +},{}],161:[function(require,module,exports){ module.exports = {}; -},{}],157:[function(require,module,exports){ +},{}],162:[function(require,module,exports){ var getKeys = require('./_object-keys') , toIObject = require('./_to-iobject'); module.exports = function(object, el){ @@ -21412,9 +22690,9 @@ module.exports = function(object, el){ , key; while(length > index)if(O[key = keys[index++]] === el)return key; }; -},{"./_object-keys":171,"./_to-iobject":187}],158:[function(require,module,exports){ +},{"./_object-keys":176,"./_to-iobject":192}],163:[function(require,module,exports){ module.exports = true; -},{}],159:[function(require,module,exports){ +},{}],164:[function(require,module,exports){ var META = require('./_uid')('meta') , isObject = require('./_is-object') , has = require('./_has') @@ -21468,7 +22746,7 @@ var meta = module.exports = { getWeak: getWeak, onFreeze: onFreeze }; -},{"./_fails":139,"./_has":142,"./_is-object":150,"./_object-dp":163,"./_uid":191}],160:[function(require,module,exports){ +},{"./_fails":144,"./_has":147,"./_is-object":155,"./_object-dp":168,"./_uid":196}],165:[function(require,module,exports){ var global = require('./_global') , macrotask = require('./_task').set , Observer = global.MutationObserver || global.WebKitMutationObserver @@ -21537,7 +22815,7 @@ module.exports = function(){ } last = task; }; }; -},{"./_cof":126,"./_global":141,"./_task":184}],161:[function(require,module,exports){ +},{"./_cof":131,"./_global":146,"./_task":189}],166:[function(require,module,exports){ 'use strict'; // 19.1.2.1 Object.assign(target, source, ...) var getKeys = require('./_object-keys') @@ -21571,7 +22849,7 @@ module.exports = !$assign || require('./_fails')(function(){ while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key]; } return T; } : $assign; -},{"./_fails":139,"./_iobject":147,"./_object-gops":168,"./_object-keys":171,"./_object-pie":172,"./_to-object":189}],162:[function(require,module,exports){ +},{"./_fails":144,"./_iobject":152,"./_object-gops":173,"./_object-keys":176,"./_object-pie":177,"./_to-object":194}],167:[function(require,module,exports){ // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) var anObject = require('./_an-object') , dPs = require('./_object-dps') @@ -21614,7 +22892,7 @@ module.exports = Object.create || function create(O, Properties){ return Properties === undefined ? result : dPs(result, Properties); }; -},{"./_an-object":119,"./_dom-create":135,"./_enum-bug-keys":136,"./_html":144,"./_object-dps":164,"./_shared-key":180}],163:[function(require,module,exports){ +},{"./_an-object":124,"./_dom-create":140,"./_enum-bug-keys":141,"./_html":149,"./_object-dps":169,"./_shared-key":185}],168:[function(require,module,exports){ var anObject = require('./_an-object') , IE8_DOM_DEFINE = require('./_ie8-dom-define') , toPrimitive = require('./_to-primitive') @@ -21631,7 +22909,7 @@ exports.f = require('./_descriptors') ? Object.defineProperty : function defineP if('value' in Attributes)O[P] = Attributes.value; return O; }; -},{"./_an-object":119,"./_descriptors":134,"./_ie8-dom-define":145,"./_to-primitive":190}],164:[function(require,module,exports){ +},{"./_an-object":124,"./_descriptors":139,"./_ie8-dom-define":150,"./_to-primitive":195}],169:[function(require,module,exports){ var dP = require('./_object-dp') , anObject = require('./_an-object') , getKeys = require('./_object-keys'); @@ -21645,7 +22923,7 @@ module.exports = require('./_descriptors') ? Object.defineProperties : function while(length > i)dP.f(O, P = keys[i++], Properties[P]); return O; }; -},{"./_an-object":119,"./_descriptors":134,"./_object-dp":163,"./_object-keys":171}],165:[function(require,module,exports){ +},{"./_an-object":124,"./_descriptors":139,"./_object-dp":168,"./_object-keys":176}],170:[function(require,module,exports){ var pIE = require('./_object-pie') , createDesc = require('./_property-desc') , toIObject = require('./_to-iobject') @@ -21662,7 +22940,7 @@ exports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor } catch(e){ /* empty */ } if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]); }; -},{"./_descriptors":134,"./_has":142,"./_ie8-dom-define":145,"./_object-pie":172,"./_property-desc":174,"./_to-iobject":187,"./_to-primitive":190}],166:[function(require,module,exports){ +},{"./_descriptors":139,"./_has":147,"./_ie8-dom-define":150,"./_object-pie":177,"./_property-desc":179,"./_to-iobject":192,"./_to-primitive":195}],171:[function(require,module,exports){ // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window var toIObject = require('./_to-iobject') , gOPN = require('./_object-gopn').f @@ -21683,7 +22961,7 @@ module.exports.f = function getOwnPropertyNames(it){ return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it)); }; -},{"./_object-gopn":167,"./_to-iobject":187}],167:[function(require,module,exports){ +},{"./_object-gopn":172,"./_to-iobject":192}],172:[function(require,module,exports){ // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O) var $keys = require('./_object-keys-internal') , hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype'); @@ -21691,9 +22969,9 @@ var $keys = require('./_object-keys-internal') exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){ return $keys(O, hiddenKeys); }; -},{"./_enum-bug-keys":136,"./_object-keys-internal":170}],168:[function(require,module,exports){ +},{"./_enum-bug-keys":141,"./_object-keys-internal":175}],173:[function(require,module,exports){ exports.f = Object.getOwnPropertySymbols; -},{}],169:[function(require,module,exports){ +},{}],174:[function(require,module,exports){ // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) var has = require('./_has') , toObject = require('./_to-object') @@ -21707,7 +22985,7 @@ module.exports = Object.getPrototypeOf || function(O){ return O.constructor.prototype; } return O instanceof Object ? ObjectProto : null; }; -},{"./_has":142,"./_shared-key":180,"./_to-object":189}],170:[function(require,module,exports){ +},{"./_has":147,"./_shared-key":185,"./_to-object":194}],175:[function(require,module,exports){ var has = require('./_has') , toIObject = require('./_to-iobject') , arrayIndexOf = require('./_array-includes')(false) @@ -21725,7 +23003,7 @@ module.exports = function(object, names){ } return result; }; -},{"./_array-includes":121,"./_has":142,"./_shared-key":180,"./_to-iobject":187}],171:[function(require,module,exports){ +},{"./_array-includes":126,"./_has":147,"./_shared-key":185,"./_to-iobject":192}],176:[function(require,module,exports){ // 19.1.2.14 / 15.2.3.14 Object.keys(O) var $keys = require('./_object-keys-internal') , enumBugKeys = require('./_enum-bug-keys'); @@ -21733,9 +23011,9 @@ var $keys = require('./_object-keys-internal') module.exports = Object.keys || function keys(O){ return $keys(O, enumBugKeys); }; -},{"./_enum-bug-keys":136,"./_object-keys-internal":170}],172:[function(require,module,exports){ +},{"./_enum-bug-keys":141,"./_object-keys-internal":175}],177:[function(require,module,exports){ exports.f = {}.propertyIsEnumerable; -},{}],173:[function(require,module,exports){ +},{}],178:[function(require,module,exports){ // most Object methods by ES6 should accept primitives var $export = require('./_export') , core = require('./_core') @@ -21746,7 +23024,7 @@ module.exports = function(KEY, exec){ exp[KEY] = exec(fn); $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp); }; -},{"./_core":130,"./_export":138,"./_fails":139}],174:[function(require,module,exports){ +},{"./_core":135,"./_export":143,"./_fails":144}],179:[function(require,module,exports){ module.exports = function(bitmap, value){ return { enumerable : !(bitmap & 1), @@ -21755,7 +23033,7 @@ module.exports = function(bitmap, value){ value : value }; }; -},{}],175:[function(require,module,exports){ +},{}],180:[function(require,module,exports){ var hide = require('./_hide'); module.exports = function(target, src, safe){ for(var key in src){ @@ -21763,9 +23041,9 @@ module.exports = function(target, src, safe){ else hide(target, key, src[key]); } return target; }; -},{"./_hide":143}],176:[function(require,module,exports){ +},{"./_hide":148}],181:[function(require,module,exports){ module.exports = require('./_hide'); -},{"./_hide":143}],177:[function(require,module,exports){ +},{"./_hide":148}],182:[function(require,module,exports){ // Works with __proto__ only. Old v8 can't work with null proto objects. /* eslint-disable no-proto */ var isObject = require('./_is-object') @@ -21791,7 +23069,7 @@ module.exports = { }({}, false) : undefined), check: check }; -},{"./_an-object":119,"./_ctx":132,"./_is-object":150,"./_object-gopd":165}],178:[function(require,module,exports){ +},{"./_an-object":124,"./_ctx":137,"./_is-object":155,"./_object-gopd":170}],183:[function(require,module,exports){ 'use strict'; var global = require('./_global') , core = require('./_core') @@ -21806,7 +23084,7 @@ module.exports = function(KEY){ get: function(){ return this; } }); }; -},{"./_core":130,"./_descriptors":134,"./_global":141,"./_object-dp":163,"./_wks":194}],179:[function(require,module,exports){ +},{"./_core":135,"./_descriptors":139,"./_global":146,"./_object-dp":168,"./_wks":199}],184:[function(require,module,exports){ var def = require('./_object-dp').f , has = require('./_has') , TAG = require('./_wks')('toStringTag'); @@ -21814,20 +23092,20 @@ var def = require('./_object-dp').f module.exports = function(it, tag, stat){ if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag}); }; -},{"./_has":142,"./_object-dp":163,"./_wks":194}],180:[function(require,module,exports){ +},{"./_has":147,"./_object-dp":168,"./_wks":199}],185:[function(require,module,exports){ var shared = require('./_shared')('keys') , uid = require('./_uid'); module.exports = function(key){ return shared[key] || (shared[key] = uid(key)); }; -},{"./_shared":181,"./_uid":191}],181:[function(require,module,exports){ +},{"./_shared":186,"./_uid":196}],186:[function(require,module,exports){ var global = require('./_global') , SHARED = '__core-js_shared__' , store = global[SHARED] || (global[SHARED] = {}); module.exports = function(key){ return store[key] || (store[key] = {}); }; -},{"./_global":141}],182:[function(require,module,exports){ +},{"./_global":146}],187:[function(require,module,exports){ // 7.3.20 SpeciesConstructor(O, defaultConstructor) var anObject = require('./_an-object') , aFunction = require('./_a-function') @@ -21836,7 +23114,7 @@ module.exports = function(O, D){ var C = anObject(O).constructor, S; return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S); }; -},{"./_a-function":116,"./_an-object":119,"./_wks":194}],183:[function(require,module,exports){ +},{"./_a-function":121,"./_an-object":124,"./_wks":199}],188:[function(require,module,exports){ var toInteger = require('./_to-integer') , defined = require('./_defined'); // true -> String#at @@ -21854,7 +23132,7 @@ module.exports = function(TO_STRING){ : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; }; }; -},{"./_defined":133,"./_to-integer":186}],184:[function(require,module,exports){ +},{"./_defined":138,"./_to-integer":191}],189:[function(require,module,exports){ var ctx = require('./_ctx') , invoke = require('./_invoke') , html = require('./_html') @@ -21930,7 +23208,7 @@ module.exports = { set: setTask, clear: clearTask }; -},{"./_cof":126,"./_ctx":132,"./_dom-create":135,"./_global":141,"./_html":144,"./_invoke":146}],185:[function(require,module,exports){ +},{"./_cof":131,"./_ctx":137,"./_dom-create":140,"./_global":146,"./_html":149,"./_invoke":151}],190:[function(require,module,exports){ var toInteger = require('./_to-integer') , max = Math.max , min = Math.min; @@ -21938,34 +23216,34 @@ module.exports = function(index, length){ index = toInteger(index); return index < 0 ? max(index + length, 0) : min(index, length); }; -},{"./_to-integer":186}],186:[function(require,module,exports){ +},{"./_to-integer":191}],191:[function(require,module,exports){ // 7.1.4 ToInteger var ceil = Math.ceil , floor = Math.floor; module.exports = function(it){ return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); }; -},{}],187:[function(require,module,exports){ +},{}],192:[function(require,module,exports){ // to indexed object, toObject with fallback for non-array-like ES3 strings var IObject = require('./_iobject') , defined = require('./_defined'); module.exports = function(it){ return IObject(defined(it)); }; -},{"./_defined":133,"./_iobject":147}],188:[function(require,module,exports){ +},{"./_defined":138,"./_iobject":152}],193:[function(require,module,exports){ // 7.1.15 ToLength var toInteger = require('./_to-integer') , min = Math.min; module.exports = function(it){ return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 }; -},{"./_to-integer":186}],189:[function(require,module,exports){ +},{"./_to-integer":191}],194:[function(require,module,exports){ // 7.1.13 ToObject(argument) var defined = require('./_defined'); module.exports = function(it){ return Object(defined(it)); }; -},{"./_defined":133}],190:[function(require,module,exports){ +},{"./_defined":138}],195:[function(require,module,exports){ // 7.1.1 ToPrimitive(input [, PreferredType]) var isObject = require('./_is-object'); // instead of the ES6 spec version, we didn't implement @@toPrimitive case @@ -21978,13 +23256,13 @@ module.exports = function(it, S){ if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; throw TypeError("Can't convert object to primitive value"); }; -},{"./_is-object":150}],191:[function(require,module,exports){ +},{"./_is-object":155}],196:[function(require,module,exports){ var id = 0 , px = Math.random(); module.exports = function(key){ return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); }; -},{}],192:[function(require,module,exports){ +},{}],197:[function(require,module,exports){ var global = require('./_global') , core = require('./_core') , LIBRARY = require('./_library') @@ -21994,9 +23272,9 @@ module.exports = function(name){ var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {}); if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)}); }; -},{"./_core":130,"./_global":141,"./_library":158,"./_object-dp":163,"./_wks-ext":193}],193:[function(require,module,exports){ +},{"./_core":135,"./_global":146,"./_library":163,"./_object-dp":168,"./_wks-ext":198}],198:[function(require,module,exports){ exports.f = require('./_wks'); -},{"./_wks":194}],194:[function(require,module,exports){ +},{"./_wks":199}],199:[function(require,module,exports){ var store = require('./_shared')('wks') , uid = require('./_uid') , Symbol = require('./_global').Symbol @@ -22008,7 +23286,7 @@ var $exports = module.exports = function(name){ }; $exports.store = store; -},{"./_global":141,"./_shared":181,"./_uid":191}],195:[function(require,module,exports){ +},{"./_global":146,"./_shared":186,"./_uid":196}],200:[function(require,module,exports){ var classof = require('./_classof') , ITERATOR = require('./_wks')('iterator') , Iterators = require('./_iterators'); @@ -22017,7 +23295,7 @@ module.exports = require('./_core').getIteratorMethod = function(it){ || it['@@iterator'] || Iterators[classof(it)]; }; -},{"./_classof":125,"./_core":130,"./_iterators":156,"./_wks":194}],196:[function(require,module,exports){ +},{"./_classof":130,"./_core":135,"./_iterators":161,"./_wks":199}],201:[function(require,module,exports){ 'use strict'; var ctx = require('./_ctx') , $export = require('./_export') @@ -22056,7 +23334,7 @@ $export($export.S + $export.F * !require('./_iter-detect')(function(iter){ Array } }); -},{"./_create-property":131,"./_ctx":132,"./_export":138,"./_is-array-iter":148,"./_iter-call":151,"./_iter-detect":154,"./_to-length":188,"./_to-object":189,"./core.get-iterator-method":195}],197:[function(require,module,exports){ +},{"./_create-property":136,"./_ctx":137,"./_export":143,"./_is-array-iter":153,"./_iter-call":156,"./_iter-detect":159,"./_to-length":193,"./_to-object":194,"./core.get-iterator-method":200}],202:[function(require,module,exports){ 'use strict'; var addToUnscopables = require('./_add-to-unscopables') , step = require('./_iter-step') @@ -22091,20 +23369,20 @@ Iterators.Arguments = Iterators.Array; addToUnscopables('keys'); addToUnscopables('values'); addToUnscopables('entries'); -},{"./_add-to-unscopables":117,"./_iter-define":153,"./_iter-step":155,"./_iterators":156,"./_to-iobject":187}],198:[function(require,module,exports){ +},{"./_add-to-unscopables":122,"./_iter-define":158,"./_iter-step":160,"./_iterators":161,"./_to-iobject":192}],203:[function(require,module,exports){ // 19.1.3.1 Object.assign(target, source) var $export = require('./_export'); $export($export.S + $export.F, 'Object', {assign: require('./_object-assign')}); -},{"./_export":138,"./_object-assign":161}],199:[function(require,module,exports){ +},{"./_export":143,"./_object-assign":166}],204:[function(require,module,exports){ var $export = require('./_export') // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) $export($export.S, 'Object', {create: require('./_object-create')}); -},{"./_export":138,"./_object-create":162}],200:[function(require,module,exports){ +},{"./_export":143,"./_object-create":167}],205:[function(require,module,exports){ var $export = require('./_export'); // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes) $export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperty: require('./_object-dp').f}); -},{"./_descriptors":134,"./_export":138,"./_object-dp":163}],201:[function(require,module,exports){ +},{"./_descriptors":139,"./_export":143,"./_object-dp":168}],206:[function(require,module,exports){ // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) var toIObject = require('./_to-iobject') , $getOwnPropertyDescriptor = require('./_object-gopd').f; @@ -22114,7 +23392,7 @@ require('./_object-sap')('getOwnPropertyDescriptor', function(){ return $getOwnPropertyDescriptor(toIObject(it), key); }; }); -},{"./_object-gopd":165,"./_object-sap":173,"./_to-iobject":187}],202:[function(require,module,exports){ +},{"./_object-gopd":170,"./_object-sap":178,"./_to-iobject":192}],207:[function(require,module,exports){ // 19.1.2.9 Object.getPrototypeOf(O) var toObject = require('./_to-object') , $getPrototypeOf = require('./_object-gpo'); @@ -22124,7 +23402,7 @@ require('./_object-sap')('getPrototypeOf', function(){ return $getPrototypeOf(toObject(it)); }; }); -},{"./_object-gpo":169,"./_object-sap":173,"./_to-object":189}],203:[function(require,module,exports){ +},{"./_object-gpo":174,"./_object-sap":178,"./_to-object":194}],208:[function(require,module,exports){ // 19.1.2.14 Object.keys(O) var toObject = require('./_to-object') , $keys = require('./_object-keys'); @@ -22134,13 +23412,13 @@ require('./_object-sap')('keys', function(){ return $keys(toObject(it)); }; }); -},{"./_object-keys":171,"./_object-sap":173,"./_to-object":189}],204:[function(require,module,exports){ +},{"./_object-keys":176,"./_object-sap":178,"./_to-object":194}],209:[function(require,module,exports){ // 19.1.3.19 Object.setPrototypeOf(O, proto) var $export = require('./_export'); $export($export.S, 'Object', {setPrototypeOf: require('./_set-proto').set}); -},{"./_export":138,"./_set-proto":177}],205:[function(require,module,exports){ -arguments[4][73][0].apply(exports,arguments) -},{"dup":73}],206:[function(require,module,exports){ +},{"./_export":143,"./_set-proto":182}],210:[function(require,module,exports){ +arguments[4][77][0].apply(exports,arguments) +},{"dup":77}],211:[function(require,module,exports){ 'use strict'; var LIBRARY = require('./_library') , global = require('./_global') @@ -22440,7 +23718,7 @@ $export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(functi return capability.promise; } }); -},{"./_a-function":116,"./_an-instance":118,"./_classof":125,"./_core":130,"./_ctx":132,"./_export":138,"./_for-of":140,"./_global":141,"./_is-object":150,"./_iter-detect":154,"./_library":158,"./_microtask":160,"./_redefine-all":175,"./_set-species":178,"./_set-to-string-tag":179,"./_species-constructor":182,"./_task":184,"./_wks":194}],207:[function(require,module,exports){ +},{"./_a-function":121,"./_an-instance":123,"./_classof":130,"./_core":135,"./_ctx":137,"./_export":143,"./_for-of":145,"./_global":146,"./_is-object":155,"./_iter-detect":159,"./_library":163,"./_microtask":165,"./_redefine-all":180,"./_set-species":183,"./_set-to-string-tag":184,"./_species-constructor":187,"./_task":189,"./_wks":199}],212:[function(require,module,exports){ 'use strict'; var strong = require('./_collection-strong'); @@ -22453,7 +23731,7 @@ module.exports = require('./_collection')('Set', function(get){ return strong.def(this, value = value === 0 ? 0 : value, value); } }, strong); -},{"./_collection":129,"./_collection-strong":127}],208:[function(require,module,exports){ +},{"./_collection":134,"./_collection-strong":132}],213:[function(require,module,exports){ 'use strict'; var $at = require('./_string-at')(true); @@ -22471,7 +23749,7 @@ require('./_iter-define')(String, 'String', function(iterated){ this._i += point.length; return {value: point, done: false}; }); -},{"./_iter-define":153,"./_string-at":183}],209:[function(require,module,exports){ +},{"./_iter-define":158,"./_string-at":188}],214:[function(require,module,exports){ 'use strict'; // ECMAScript 6 symbols shim var global = require('./_global') @@ -22707,16 +23985,16 @@ setToStringTag($Symbol, 'Symbol'); setToStringTag(Math, 'Math', true); // 24.3.3 JSON[@@toStringTag] setToStringTag(global.JSON, 'JSON', true); -},{"./_an-object":119,"./_descriptors":134,"./_enum-keys":137,"./_export":138,"./_fails":139,"./_global":141,"./_has":142,"./_hide":143,"./_is-array":149,"./_keyof":157,"./_library":158,"./_meta":159,"./_object-create":162,"./_object-dp":163,"./_object-gopd":165,"./_object-gopn":167,"./_object-gopn-ext":166,"./_object-gops":168,"./_object-keys":171,"./_object-pie":172,"./_property-desc":174,"./_redefine":176,"./_set-to-string-tag":179,"./_shared":181,"./_to-iobject":187,"./_to-primitive":190,"./_uid":191,"./_wks":194,"./_wks-define":192,"./_wks-ext":193}],210:[function(require,module,exports){ +},{"./_an-object":124,"./_descriptors":139,"./_enum-keys":142,"./_export":143,"./_fails":144,"./_global":146,"./_has":147,"./_hide":148,"./_is-array":154,"./_keyof":162,"./_library":163,"./_meta":164,"./_object-create":167,"./_object-dp":168,"./_object-gopd":170,"./_object-gopn":172,"./_object-gopn-ext":171,"./_object-gops":173,"./_object-keys":176,"./_object-pie":177,"./_property-desc":179,"./_redefine":181,"./_set-to-string-tag":184,"./_shared":186,"./_to-iobject":192,"./_to-primitive":195,"./_uid":196,"./_wks":199,"./_wks-define":197,"./_wks-ext":198}],215:[function(require,module,exports){ // https://github.com/DavidBruant/Map-Set.prototype.toJSON var $export = require('./_export'); $export($export.P + $export.R, 'Set', {toJSON: require('./_collection-to-json')('Set')}); -},{"./_collection-to-json":128,"./_export":138}],211:[function(require,module,exports){ +},{"./_collection-to-json":133,"./_export":143}],216:[function(require,module,exports){ require('./_wks-define')('asyncIterator'); -},{"./_wks-define":192}],212:[function(require,module,exports){ +},{"./_wks-define":197}],217:[function(require,module,exports){ require('./_wks-define')('observable'); -},{"./_wks-define":192}],213:[function(require,module,exports){ +},{"./_wks-define":197}],218:[function(require,module,exports){ require('./es6.array.iterator'); var global = require('./_global') , hide = require('./_hide') @@ -22730,7 +24008,7 @@ for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList' if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME); Iterators[NAME] = Iterators.Array; } -},{"./_global":141,"./_hide":143,"./_iterators":156,"./_wks":194,"./es6.array.iterator":197}],214:[function(require,module,exports){ +},{"./_global":146,"./_hide":148,"./_iterators":161,"./_wks":199,"./es6.array.iterator":202}],219:[function(require,module,exports){ (function (Buffer){ // Copyright Joyent, Inc. and other Node contributors. // @@ -22842,7 +24120,7 @@ function objectToString(o) { }).call(this,{"isBuffer":require("../../is-buffer/index.js")}) -},{"../../is-buffer/index.js":259}],215:[function(require,module,exports){ +},{"../../is-buffer/index.js":298}],220:[function(require,module,exports){ (function (Buffer){ var elliptic = require('elliptic'); var BN = require('bn.js'); @@ -22969,7 +24247,7 @@ function formatReturnValue(bn, enc, len) { }).call(this,require("buffer").Buffer) -},{"bn.js":71,"buffer":101,"elliptic":231}],216:[function(require,module,exports){ +},{"bn.js":75,"buffer":105,"elliptic":236}],221:[function(require,module,exports){ (function (Buffer){ 'use strict'; var inherits = require('inherits') @@ -23026,7 +24304,7 @@ module.exports = function createHash (alg) { }).call(this,require("buffer").Buffer) -},{"./md5":218,"buffer":101,"cipher-base":102,"inherits":258,"ripemd160":294,"sha.js":296}],217:[function(require,module,exports){ +},{"./md5":223,"buffer":105,"cipher-base":106,"inherits":297,"ripemd160":336,"sha.js":338}],222:[function(require,module,exports){ (function (Buffer){ 'use strict'; var intSize = 4; @@ -23064,7 +24342,7 @@ function hash(buf, fn, hashSize, bigEndian) { exports.hash = hash; }).call(this,require("buffer").Buffer) -},{"buffer":101}],218:[function(require,module,exports){ +},{"buffer":105}],223:[function(require,module,exports){ 'use strict'; /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message @@ -23221,7 +24499,7 @@ function bit_rol(num, cnt) module.exports = function md5(buf) { return helpers.hash(buf, core_md5, 16); }; -},{"./helpers":217}],219:[function(require,module,exports){ +},{"./helpers":222}],224:[function(require,module,exports){ (function (Buffer){ 'use strict'; var createHash = require('create-hash/browser'); @@ -23294,7 +24572,7 @@ module.exports = function createHmac(alg, key) { }).call(this,require("buffer").Buffer) -},{"buffer":101,"create-hash/browser":216,"inherits":258,"stream":303}],220:[function(require,module,exports){ +},{"buffer":105,"create-hash/browser":221,"inherits":297,"stream":345}],225:[function(require,module,exports){ 'use strict' exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes') @@ -23373,7 +24651,7 @@ var publicEncrypt = require('public-encrypt') } }) -},{"browserify-cipher":89,"browserify-sign":94,"browserify-sign/algos":93,"create-ecdh":215,"create-hash":216,"create-hmac":219,"diffie-hellman":227,"pbkdf2":272,"public-encrypt":276,"randombytes":282}],221:[function(require,module,exports){ +},{"browserify-cipher":93,"browserify-sign":98,"browserify-sign/algos":97,"create-ecdh":220,"create-hash":221,"create-hmac":224,"diffie-hellman":232,"pbkdf2":314,"public-encrypt":318,"randombytes":324}],226:[function(require,module,exports){ 'use strict'; exports.utils = require('./des/utils'); @@ -23382,7 +24660,7 @@ exports.DES = require('./des/des'); exports.CBC = require('./des/cbc'); exports.EDE = require('./des/ede'); -},{"./des/cbc":222,"./des/cipher":223,"./des/des":224,"./des/ede":225,"./des/utils":226}],222:[function(require,module,exports){ +},{"./des/cbc":227,"./des/cipher":228,"./des/des":229,"./des/ede":230,"./des/utils":231}],227:[function(require,module,exports){ 'use strict'; var assert = require('minimalistic-assert'); @@ -23449,7 +24727,7 @@ proto._update = function _update(inp, inOff, out, outOff) { } }; -},{"inherits":258,"minimalistic-assert":263}],223:[function(require,module,exports){ +},{"inherits":297,"minimalistic-assert":305}],228:[function(require,module,exports){ 'use strict'; var assert = require('minimalistic-assert'); @@ -23592,7 +24870,7 @@ Cipher.prototype._finalDecrypt = function _finalDecrypt() { return this._unpad(out); }; -},{"minimalistic-assert":263}],224:[function(require,module,exports){ +},{"minimalistic-assert":305}],229:[function(require,module,exports){ 'use strict'; var assert = require('minimalistic-assert'); @@ -23737,7 +25015,7 @@ DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { utils.rip(l, r, out, off); }; -},{"../des":221,"inherits":258,"minimalistic-assert":263}],225:[function(require,module,exports){ +},{"../des":226,"inherits":297,"minimalistic-assert":305}],230:[function(require,module,exports){ 'use strict'; var assert = require('minimalistic-assert'); @@ -23794,7 +25072,7 @@ EDE.prototype._update = function _update(inp, inOff, out, outOff) { EDE.prototype._pad = DES.prototype._pad; EDE.prototype._unpad = DES.prototype._unpad; -},{"../des":221,"inherits":258,"minimalistic-assert":263}],226:[function(require,module,exports){ +},{"../des":226,"inherits":297,"minimalistic-assert":305}],231:[function(require,module,exports){ 'use strict'; exports.readUInt32BE = function readUInt32BE(bytes, off) { @@ -24052,7 +25330,7 @@ exports.padSplit = function padSplit(num, size, group) { return out.join(' '); }; -},{}],227:[function(require,module,exports){ +},{}],232:[function(require,module,exports){ (function (Buffer){ var generatePrime = require('./lib/generatePrime') var primes = require('./lib/primes.json') @@ -24099,7 +25377,7 @@ exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman }).call(this,require("buffer").Buffer) -},{"./lib/dh":228,"./lib/generatePrime":229,"./lib/primes.json":230,"buffer":101}],228:[function(require,module,exports){ +},{"./lib/dh":233,"./lib/generatePrime":234,"./lib/primes.json":235,"buffer":105}],233:[function(require,module,exports){ (function (Buffer){ var BN = require('bn.js'); var MillerRabin = require('miller-rabin'); @@ -24268,7 +25546,7 @@ function formatReturnValue(bn, enc) { }).call(this,require("buffer").Buffer) -},{"./generatePrime":229,"bn.js":71,"buffer":101,"miller-rabin":262,"randombytes":282}],229:[function(require,module,exports){ +},{"./generatePrime":234,"bn.js":75,"buffer":105,"miller-rabin":304,"randombytes":324}],234:[function(require,module,exports){ var randomBytes = require('randombytes'); module.exports = findPrime; findPrime.simpleSieve = simpleSieve; @@ -24375,7 +25653,7 @@ function findPrime(bits, gen) { } -},{"bn.js":71,"miller-rabin":262,"randombytes":282}],230:[function(require,module,exports){ +},{"bn.js":75,"miller-rabin":304,"randombytes":324}],235:[function(require,module,exports){ module.exports={ "modp1": { "gen": "02", @@ -24410,7 +25688,7 @@ module.exports={ "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff" } } -},{}],231:[function(require,module,exports){ +},{}],236:[function(require,module,exports){ 'use strict'; var elliptic = exports; @@ -24425,7 +25703,7 @@ elliptic.curves = require('./elliptic/curves'); elliptic.ec = require('./elliptic/ec'); elliptic.eddsa = require('./elliptic/eddsa'); -},{"../package.json":246,"./elliptic/curve":234,"./elliptic/curves":237,"./elliptic/ec":238,"./elliptic/eddsa":241,"./elliptic/utils":245,"brorand":72}],232:[function(require,module,exports){ +},{"../package.json":251,"./elliptic/curve":239,"./elliptic/curves":242,"./elliptic/ec":243,"./elliptic/eddsa":246,"./elliptic/utils":250,"brorand":76}],237:[function(require,module,exports){ 'use strict'; var BN = require('bn.js'); @@ -24802,7 +26080,7 @@ BasePoint.prototype.dblp = function dblp(k) { return r; }; -},{"../../elliptic":231,"bn.js":71}],233:[function(require,module,exports){ +},{"../../elliptic":236,"bn.js":75}],238:[function(require,module,exports){ 'use strict'; var curve = require('../curve'); @@ -25237,7 +26515,7 @@ Point.prototype.eqXToP = function eqXToP(x) { Point.prototype.toP = Point.prototype.normalize; Point.prototype.mixedAdd = Point.prototype.add; -},{"../../elliptic":231,"../curve":234,"bn.js":71,"inherits":258}],234:[function(require,module,exports){ +},{"../../elliptic":236,"../curve":239,"bn.js":75,"inherits":297}],239:[function(require,module,exports){ 'use strict'; var curve = exports; @@ -25247,7 +26525,7 @@ curve.short = require('./short'); curve.mont = require('./mont'); curve.edwards = require('./edwards'); -},{"./base":232,"./edwards":233,"./mont":235,"./short":236}],235:[function(require,module,exports){ +},{"./base":237,"./edwards":238,"./mont":240,"./short":241}],240:[function(require,module,exports){ 'use strict'; var curve = require('../curve'); @@ -25429,7 +26707,7 @@ Point.prototype.getX = function getX() { return this.x.fromRed(); }; -},{"../../elliptic":231,"../curve":234,"bn.js":71,"inherits":258}],236:[function(require,module,exports){ +},{"../../elliptic":236,"../curve":239,"bn.js":75,"inherits":297}],241:[function(require,module,exports){ 'use strict'; var curve = require('../curve'); @@ -26369,7 +27647,7 @@ JPoint.prototype.isInfinity = function isInfinity() { return this.z.cmpn(0) === 0; }; -},{"../../elliptic":231,"../curve":234,"bn.js":71,"inherits":258}],237:[function(require,module,exports){ +},{"../../elliptic":236,"../curve":239,"bn.js":75,"inherits":297}],242:[function(require,module,exports){ 'use strict'; var curves = exports; @@ -26576,7 +27854,7 @@ defineCurve('secp256k1', { ] }); -},{"../elliptic":231,"./precomputed/secp256k1":244,"hash.js":249}],238:[function(require,module,exports){ +},{"../elliptic":236,"./precomputed/secp256k1":249,"hash.js":288}],243:[function(require,module,exports){ 'use strict'; var BN = require('bn.js'); @@ -26818,7 +28096,7 @@ EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { throw new Error('Unable to find valid recovery factor'); }; -},{"../../elliptic":231,"./key":239,"./signature":240,"bn.js":71,"hmac-drbg":255}],239:[function(require,module,exports){ +},{"../../elliptic":236,"./key":244,"./signature":245,"bn.js":75,"hmac-drbg":294}],244:[function(require,module,exports){ 'use strict'; var BN = require('bn.js'); @@ -26939,7 +28217,7 @@ KeyPair.prototype.inspect = function inspect() { ' pub: ' + (this.pub && this.pub.inspect()) + ' >'; }; -},{"../../elliptic":231,"bn.js":71}],240:[function(require,module,exports){ +},{"../../elliptic":236,"bn.js":75}],245:[function(require,module,exports){ 'use strict'; var BN = require('bn.js'); @@ -27076,7 +28354,7 @@ Signature.prototype.toDER = function toDER(enc) { return utils.encode(res, enc); }; -},{"../../elliptic":231,"bn.js":71}],241:[function(require,module,exports){ +},{"../../elliptic":236,"bn.js":75}],246:[function(require,module,exports){ 'use strict'; var hash = require('hash.js'); @@ -27196,7 +28474,7 @@ EDDSA.prototype.isPoint = function isPoint(val) { return val instanceof this.pointClass; }; -},{"../../elliptic":231,"./key":242,"./signature":243,"hash.js":249}],242:[function(require,module,exports){ +},{"../../elliptic":236,"./key":247,"./signature":248,"hash.js":288}],247:[function(require,module,exports){ 'use strict'; var elliptic = require('../../elliptic'); @@ -27294,7 +28572,7 @@ KeyPair.prototype.getPublic = function getPublic(enc) { module.exports = KeyPair; -},{"../../elliptic":231}],243:[function(require,module,exports){ +},{"../../elliptic":236}],248:[function(require,module,exports){ 'use strict'; var BN = require('bn.js'); @@ -27362,7 +28640,7 @@ Signature.prototype.toHex = function toHex() { module.exports = Signature; -},{"../../elliptic":231,"bn.js":71}],244:[function(require,module,exports){ +},{"../../elliptic":236,"bn.js":75}],249:[function(require,module,exports){ module.exports = { doubles: { step: 4, @@ -28144,7 +29422,7 @@ module.exports = { } }; -},{}],245:[function(require,module,exports){ +},{}],250:[function(require,module,exports){ 'use strict'; var utils = exports; @@ -28266,7 +29544,7 @@ function intFromLE(bytes) { utils.intFromLE = intFromLE; -},{"bn.js":71,"minimalistic-assert":263,"minimalistic-crypto-utils":264}],246:[function(require,module,exports){ +},{"bn.js":75,"minimalistic-assert":305,"minimalistic-crypto-utils":306}],251:[function(require,module,exports){ module.exports={ "_args": [ [ @@ -28391,7 +29669,7 @@ module.exports={ "version": "6.4.0" } -},{}],247:[function(require,module,exports){ +},{}],252:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -28695,7 +29973,7 @@ function isUndefined(arg) { return arg === void 0; } -},{}],248:[function(require,module,exports){ +},{}],253:[function(require,module,exports){ (function (Buffer){ var md5 = require('create-hash/md5') module.exports = EVP_BytesToKey @@ -28768,274 +30046,2716 @@ function EVP_BytesToKey (password, salt, keyLen, ivLen) { }).call(this,require("buffer").Buffer) -},{"buffer":101,"create-hash/md5":218}],249:[function(require,module,exports){ -var hash = exports; +},{"buffer":105,"create-hash/md5":223}],254:[function(require,module,exports){ +(function (Buffer){ +var fs = require('graceful-fs') -hash.utils = require('./hash/utils'); -hash.common = require('./hash/common'); -hash.sha = require('./hash/sha'); -hash.ripemd = require('./hash/ripemd'); -hash.hmac = require('./hash/hmac'); +var BUF_LENGTH = 64 * 1024 +var _buff = new Buffer(BUF_LENGTH) -// Proxy hash functions to the main object -hash.sha1 = hash.sha.sha1; -hash.sha256 = hash.sha.sha256; -hash.sha224 = hash.sha.sha224; -hash.sha384 = hash.sha.sha384; -hash.sha512 = hash.sha.sha512; -hash.ripemd160 = hash.ripemd.ripemd160; +function copyFileSync (srcFile, destFile, options) { + var clobber = options.clobber + var preserveTimestamps = options.preserveTimestamps -},{"./hash/common":250,"./hash/hmac":251,"./hash/ripemd":252,"./hash/sha":253,"./hash/utils":254}],250:[function(require,module,exports){ -var hash = require('../hash'); -var utils = hash.utils; -var assert = utils.assert; + if (fs.existsSync(destFile)) { + if (clobber) { + fs.unlinkSync(destFile) + } else { + var err = new Error('EEXIST: ' + destFile + ' already exists.') + err.code = 'EEXIST' + err.errno = -17 + err.path = destFile + throw err + } + } -function BlockHash() { - this.pending = null; - this.pendingTotal = 0; - this.blockSize = this.constructor.blockSize; - this.outSize = this.constructor.outSize; - this.hmacStrength = this.constructor.hmacStrength; - this.padLength = this.constructor.padLength / 8; - this.endian = 'big'; + var fdr = fs.openSync(srcFile, 'r') + var stat = fs.fstatSync(fdr) + var fdw = fs.openSync(destFile, 'w', stat.mode) + var bytesRead = 1 + var pos = 0 - this._delta8 = this.blockSize / 8; - this._delta32 = this.blockSize / 32; -} -exports.BlockHash = BlockHash; + while (bytesRead > 0) { + bytesRead = fs.readSync(fdr, _buff, 0, BUF_LENGTH, pos) + fs.writeSync(fdw, _buff, 0, bytesRead) + pos += bytesRead + } -BlockHash.prototype.update = function update(msg, enc) { - // Convert message to array, pad it, and join into 32bit blocks - msg = utils.toArray(msg, enc); - if (!this.pending) - this.pending = msg; - else - this.pending = this.pending.concat(msg); - this.pendingTotal += msg.length; + if (preserveTimestamps) { + fs.futimesSync(fdw, stat.atime, stat.mtime) + } - // Enough data, try updating - if (this.pending.length >= this._delta8) { - msg = this.pending; + fs.closeSync(fdr) + fs.closeSync(fdw) +} - // Process pending data in blocks - var r = msg.length % this._delta8; - this.pending = msg.slice(msg.length - r, msg.length); - if (this.pending.length === 0) - this.pending = null; +module.exports = copyFileSync - msg = utils.join32(msg, 0, msg.length - r, this.endian); - for (var i = 0; i < msg.length; i += this._delta32) - this._update(msg, i, i + this._delta32); +}).call(this,require("buffer").Buffer) + +},{"buffer":105,"graceful-fs":285}],255:[function(require,module,exports){ +(function (process){ +var fs = require('graceful-fs') +var path = require('path') +var copyFileSync = require('./copy-file-sync') +var mkdir = require('../mkdirs') + +function copySync (src, dest, options) { + if (typeof options === 'function' || options instanceof RegExp) { + options = {filter: options} + } + + options = options || {} + options.recursive = !!options.recursive + + // default to true for now + options.clobber = 'clobber' in options ? !!options.clobber : true + options.dereference = 'dereference' in options ? !!options.dereference : false + options.preserveTimestamps = 'preserveTimestamps' in options ? !!options.preserveTimestamps : false + + options.filter = options.filter || function () { return true } + + // Warn about using preserveTimestamps on 32-bit node: + if (options.preserveTimestamps && process.arch === 'ia32') { + console.warn('fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n' + + 'see https://github.com/jprichardson/node-fs-extra/issues/269') + } + + var stats = (options.recursive && !options.dereference) ? fs.lstatSync(src) : fs.statSync(src) + var destFolder = path.dirname(dest) + var destFolderExists = fs.existsSync(destFolder) + var performCopy = false + + if (stats.isFile()) { + if (options.filter instanceof RegExp) { + console.warn('Warning: fs-extra: Passing a RegExp filter is deprecated, use a function') + performCopy = options.filter.test(src) + } else if (typeof options.filter === 'function') performCopy = options.filter(src) + + if (performCopy) { + if (!destFolderExists) mkdir.mkdirsSync(destFolder) + copyFileSync(src, dest, {clobber: options.clobber, preserveTimestamps: options.preserveTimestamps}) + } + } else if (stats.isDirectory()) { + if (!fs.existsSync(dest)) mkdir.mkdirsSync(dest) + var contents = fs.readdirSync(src) + contents.forEach(function (content) { + var opts = options + opts.recursive = true + copySync(path.join(src, content), path.join(dest, content), opts) + }) + } else if (options.recursive && stats.isSymbolicLink()) { + var srcPath = fs.readlinkSync(src) + fs.symlinkSync(srcPath, dest) } +} - return this; -}; +module.exports = copySync -BlockHash.prototype.digest = function digest(enc) { - this.update(this._pad()); - assert(this.pending === null); +}).call(this,require('_process')) - return this._digest(enc); -}; +},{"../mkdirs":272,"./copy-file-sync":254,"_process":317,"graceful-fs":285,"path":313}],256:[function(require,module,exports){ +module.exports = { + copySync: require('./copy-sync') +} -BlockHash.prototype._pad = function pad() { - var len = this.pendingTotal; - var bytes = this._delta8; - var k = bytes - ((len + this.padLength) % bytes); - var res = new Array(k + this.padLength); - res[0] = 0x80; - for (var i = 1; i < k; i++) - res[i] = 0; +},{"./copy-sync":255}],257:[function(require,module,exports){ +(function (process){ +var fs = require('graceful-fs') +var path = require('path') +var ncp = require('./ncp') +var mkdir = require('../mkdirs') + +function copy (src, dest, options, callback) { + if (typeof options === 'function' && !callback) { + callback = options + options = {} + } else if (typeof options === 'function' || options instanceof RegExp) { + options = {filter: options} + } + callback = callback || function () {} + options = options || {} + + // Warn about using preserveTimestamps on 32-bit node: + if (options.preserveTimestamps && process.arch === 'ia32') { + console.warn('fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n' + + 'see https://github.com/jprichardson/node-fs-extra/issues/269') + } + + // don't allow src and dest to be the same + var basePath = process.cwd() + var currentPath = path.resolve(basePath, src) + var targetPath = path.resolve(basePath, dest) + if (currentPath === targetPath) return callback(new Error('Source and destination must not be the same.')) + + fs.lstat(src, function (err, stats) { + if (err) return callback(err) + + var dir = null + if (stats.isDirectory()) { + var parts = dest.split(path.sep) + parts.pop() + dir = parts.join(path.sep) + } else { + dir = path.dirname(dest) + } - // Append length - len <<= 3; - if (this.endian === 'big') { - for (var t = 8; t < this.padLength; t++) - res[i++] = 0; + fs.exists(dir, function (dirExists) { + if (dirExists) return ncp(src, dest, options, callback) + mkdir.mkdirs(dir, function (err) { + if (err) return callback(err) + ncp(src, dest, options, callback) + }) + }) + }) +} - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = (len >>> 24) & 0xff; - res[i++] = (len >>> 16) & 0xff; - res[i++] = (len >>> 8) & 0xff; - res[i++] = len & 0xff; - } else { - res[i++] = len & 0xff; - res[i++] = (len >>> 8) & 0xff; - res[i++] = (len >>> 16) & 0xff; - res[i++] = (len >>> 24) & 0xff; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; +module.exports = copy - for (var t = 8; t < this.padLength; t++) - res[i++] = 0; - } +}).call(this,require('_process')) - return res; -}; +},{"../mkdirs":272,"./ncp":259,"_process":317,"graceful-fs":285,"path":313}],258:[function(require,module,exports){ +module.exports = { + copy: require('./copy') +} -},{"../hash":249}],251:[function(require,module,exports){ -var hmac = exports; +},{"./copy":257}],259:[function(require,module,exports){ +(function (process){ +// imported from ncp (this is temporary, will rewrite) -var hash = require('../hash'); -var utils = hash.utils; -var assert = utils.assert; +var fs = require('graceful-fs') +var path = require('path') +var utimes = require('../util/utimes') -function Hmac(hash, key, enc) { - if (!(this instanceof Hmac)) - return new Hmac(hash, key, enc); - this.Hash = hash; - this.blockSize = hash.blockSize / 8; - this.outSize = hash.outSize / 8; - this.inner = null; - this.outer = null; +function ncp (source, dest, options, callback) { + if (!callback) { + callback = options + options = {} + } - this._init(utils.toArray(key, enc)); -} -module.exports = Hmac; + var basePath = process.cwd() + var currentPath = path.resolve(basePath, source) + var targetPath = path.resolve(basePath, dest) -Hmac.prototype._init = function init(key) { - // Shorten key, if needed - if (key.length > this.blockSize) - key = new this.Hash().update(key).digest(); - assert(key.length <= this.blockSize); + var filter = options.filter + var transform = options.transform + var clobber = options.clobber !== false // default true + var dereference = options.dereference + var preserveTimestamps = options.preserveTimestamps === true - // Add padding to key - for (var i = key.length; i < this.blockSize; i++) - key.push(0); + var started = 0 + var finished = 0 + var running = 0 - for (var i = 0; i < key.length; i++) - key[i] ^= 0x36; - this.inner = new this.Hash().update(key); + var errored = false - // 0x36 ^ 0x5c = 0x6a - for (var i = 0; i < key.length; i++) - key[i] ^= 0x6a; - this.outer = new this.Hash().update(key); -}; + startCopy(currentPath) -Hmac.prototype.update = function update(msg, enc) { - this.inner.update(msg, enc); - return this; -}; + function startCopy (source) { + started++ + if (filter) { + if (filter instanceof RegExp) { + console.warn('Warning: fs-extra: Passing a RegExp filter is deprecated, use a function') + if (!filter.test(source)) { + return doneOne(true) + } + } else if (typeof filter === 'function') { + if (!filter(source)) { + return doneOne(true) + } + } + } + return getStats(source) + } -Hmac.prototype.digest = function digest(enc) { - this.outer.update(this.inner.digest()); - return this.outer.digest(enc); -}; + function getStats (source) { + var stat = dereference ? fs.stat : fs.lstat + running++ + stat(source, function (err, stats) { + if (err) return onError(err) -},{"../hash":249}],252:[function(require,module,exports){ -var hash = require('../hash'); -var utils = hash.utils; + // We need to get the mode from the stats object and preserve it. + var item = { + name: source, + mode: stats.mode, + mtime: stats.mtime, // modified time + atime: stats.atime, // access time + stats: stats // temporary + } -var rotl32 = utils.rotl32; -var sum32 = utils.sum32; -var sum32_3 = utils.sum32_3; -var sum32_4 = utils.sum32_4; -var BlockHash = hash.common.BlockHash; + if (stats.isDirectory()) { + return onDir(item) + } else if (stats.isFile() || stats.isCharacterDevice() || stats.isBlockDevice()) { + return onFile(item) + } else if (stats.isSymbolicLink()) { + // Symlinks don't really need to know about the mode. + return onLink(source) + } + }) + } -function RIPEMD160() { - if (!(this instanceof RIPEMD160)) - return new RIPEMD160(); + function onFile (file) { + var target = file.name.replace(currentPath, targetPath.replace('$', '$$$$')) // escapes '$' with '$$' + isWritable(target, function (writable) { + if (writable) { + copyFile(file, target) + } else { + if (clobber) { + rmFile(target, function () { + copyFile(file, target) + }) + } else { + var err = new Error('EEXIST: ' + target + ' already exists.') + err.code = 'EEXIST' + err.errno = -17 + err.path = target + onError(err) + } + } + }) + } - BlockHash.call(this); + function copyFile (file, target) { + var readStream = fs.createReadStream(file.name) + var writeStream = fs.createWriteStream(target, { mode: file.mode }) - this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ]; - this.endian = 'little'; -} -utils.inherits(RIPEMD160, BlockHash); -exports.ripemd160 = RIPEMD160; + readStream.on('error', onError) + writeStream.on('error', onError) -RIPEMD160.blockSize = 512; -RIPEMD160.outSize = 160; -RIPEMD160.hmacStrength = 192; -RIPEMD160.padLength = 64; + if (transform) { + transform(readStream, writeStream, file) + } else { + writeStream.on('open', function () { + readStream.pipe(writeStream) + }) + } + + writeStream.once('finish', function () { + fs.chmod(target, file.mode, function (err) { + if (err) return onError(err) + if (preserveTimestamps) { + utimes.utimesMillis(target, file.atime, file.mtime, function (err) { + if (err) return onError(err) + return doneOne() + }) + } else { + doneOne() + } + }) + }) + } -RIPEMD160.prototype._update = function update(msg, start) { - var A = this.h[0]; - var B = this.h[1]; - var C = this.h[2]; - var D = this.h[3]; - var E = this.h[4]; - var Ah = A; - var Bh = B; - var Ch = C; - var Dh = D; - var Eh = E; - for (var j = 0; j < 80; j++) { - var T = sum32( - rotl32( - sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), - s[j]), - E); - A = E; - E = D; - D = rotl32(C, 10); - C = B; - B = T; - T = sum32( - rotl32( - sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), - sh[j]), - Eh); - Ah = Eh; - Eh = Dh; - Dh = rotl32(Ch, 10); - Ch = Bh; - Bh = T; + function rmFile (file, done) { + fs.unlink(file, function (err) { + if (err) return onError(err) + return done() + }) } - T = sum32_3(this.h[1], C, Dh); - this.h[1] = sum32_3(this.h[2], D, Eh); - this.h[2] = sum32_3(this.h[3], E, Ah); - this.h[3] = sum32_3(this.h[4], A, Bh); - this.h[4] = sum32_3(this.h[0], B, Ch); - this.h[0] = T; -}; -RIPEMD160.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'little'); - else - return utils.split32(this.h, 'little'); -}; + function onDir (dir) { + var target = dir.name.replace(currentPath, targetPath.replace('$', '$$$$')) // escapes '$' with '$$' + isWritable(target, function (writable) { + if (writable) { + return mkDir(dir, target) + } + copyDir(dir.name) + }) + } -function f(j, x, y, z) { - if (j <= 15) - return x ^ y ^ z; - else if (j <= 31) - return (x & y) | ((~x) & z); - else if (j <= 47) - return (x | (~y)) ^ z; - else if (j <= 63) - return (x & z) | (y & (~z)); - else - return x ^ (y | (~z)); -} + function mkDir (dir, target) { + fs.mkdir(target, dir.mode, function (err) { + if (err) return onError(err) + // despite setting mode in fs.mkdir, doesn't seem to work + // so we set it here. + fs.chmod(target, dir.mode, function (err) { + if (err) return onError(err) + copyDir(dir.name) + }) + }) + } -function K(j) { - if (j <= 15) - return 0x00000000; - else if (j <= 31) - return 0x5a827999; - else if (j <= 47) - return 0x6ed9eba1; - else if (j <= 63) - return 0x8f1bbcdc; - else - return 0xa953fd4e; -} + function copyDir (dir) { + fs.readdir(dir, function (err, items) { + if (err) return onError(err) + items.forEach(function (item) { + startCopy(path.join(dir, item)) + }) + return doneOne() + }) + } -function Kh(j) { - if (j <= 15) - return 0x50a28be6; - else if (j <= 31) - return 0x5c4dd124; - else if (j <= 47) - return 0x6d703ef3; + function onLink (link) { + var target = link.replace(currentPath, targetPath) + fs.readlink(link, function (err, resolvedPath) { + if (err) return onError(err) + checkLink(resolvedPath, target) + }) + } + + function checkLink (resolvedPath, target) { + if (dereference) { + resolvedPath = path.resolve(basePath, resolvedPath) + } + isWritable(target, function (writable) { + if (writable) { + return makeLink(resolvedPath, target) + } + fs.readlink(target, function (err, targetDest) { + if (err) return onError(err) + + if (dereference) { + targetDest = path.resolve(basePath, targetDest) + } + if (targetDest === resolvedPath) { + return doneOne() + } + return rmFile(target, function () { + makeLink(resolvedPath, target) + }) + }) + }) + } + + function makeLink (linkPath, target) { + fs.symlink(linkPath, target, function (err) { + if (err) return onError(err) + return doneOne() + }) + } + + function isWritable (path, done) { + fs.lstat(path, function (err) { + if (err) { + if (err.code === 'ENOENT') return done(true) + return done(false) + } + return done(false) + }) + } + + function onError (err) { + // ensure callback is defined & called only once: + if (!errored && callback !== undefined) { + errored = true + return callback(err) + } + } + + function doneOne (skipped) { + if (!skipped) running-- + finished++ + if ((started === finished) && (running === 0)) { + if (callback !== undefined) { + return callback(null) + } + } + } +} + +module.exports = ncp + +}).call(this,require('_process')) + +},{"../util/utimes":281,"_process":317,"graceful-fs":285,"path":313}],260:[function(require,module,exports){ +var fs = require('fs') +var path = require('path') +var mkdir = require('../mkdirs') +var remove = require('../remove') + +function emptyDir (dir, callback) { + callback = callback || function () {} + fs.readdir(dir, function (err, items) { + if (err) return mkdir.mkdirs(dir, callback) + + items = items.map(function (item) { + return path.join(dir, item) + }) + + deleteItem() + + function deleteItem () { + var item = items.pop() + if (!item) return callback() + remove.remove(item, function (err) { + if (err) return callback(err) + deleteItem() + }) + } + }) +} + +function emptyDirSync (dir) { + var items + try { + items = fs.readdirSync(dir) + } catch (err) { + return mkdir.mkdirsSync(dir) + } + + items.forEach(function (item) { + item = path.join(dir, item) + remove.removeSync(item) + }) +} + +module.exports = { + emptyDirSync: emptyDirSync, + emptydirSync: emptyDirSync, + emptyDir: emptyDir, + emptydir: emptyDir +} + +},{"../mkdirs":272,"../remove":278,"fs":102,"path":313}],261:[function(require,module,exports){ +var path = require('path') +var fs = require('graceful-fs') +var mkdir = require('../mkdirs') + +function createFile (file, callback) { + function makeFile () { + fs.writeFile(file, '', function (err) { + if (err) return callback(err) + callback() + }) + } + + fs.exists(file, function (fileExists) { + if (fileExists) return callback() + var dir = path.dirname(file) + fs.exists(dir, function (dirExists) { + if (dirExists) return makeFile() + mkdir.mkdirs(dir, function (err) { + if (err) return callback(err) + makeFile() + }) + }) + }) +} + +function createFileSync (file) { + if (fs.existsSync(file)) return + + var dir = path.dirname(file) + if (!fs.existsSync(dir)) { + mkdir.mkdirsSync(dir) + } + + fs.writeFileSync(file, '') +} + +module.exports = { + createFile: createFile, + createFileSync: createFileSync, + // alias + ensureFile: createFile, + ensureFileSync: createFileSync +} + +},{"../mkdirs":272,"graceful-fs":285,"path":313}],262:[function(require,module,exports){ +var file = require('./file') +var link = require('./link') +var symlink = require('./symlink') + +module.exports = { + // file + createFile: file.createFile, + createFileSync: file.createFileSync, + ensureFile: file.createFile, + ensureFileSync: file.createFileSync, + // link + createLink: link.createLink, + createLinkSync: link.createLinkSync, + ensureLink: link.createLink, + ensureLinkSync: link.createLinkSync, + // symlink + createSymlink: symlink.createSymlink, + createSymlinkSync: symlink.createSymlinkSync, + ensureSymlink: symlink.createSymlink, + ensureSymlinkSync: symlink.createSymlinkSync +} + +},{"./file":261,"./link":263,"./symlink":266}],263:[function(require,module,exports){ +var path = require('path') +var fs = require('graceful-fs') +var mkdir = require('../mkdirs') + +function createLink (srcpath, dstpath, callback) { + function makeLink (srcpath, dstpath) { + fs.link(srcpath, dstpath, function (err) { + if (err) return callback(err) + callback(null) + }) + } + + fs.exists(dstpath, function (destinationExists) { + if (destinationExists) return callback(null) + fs.lstat(srcpath, function (err, stat) { + if (err) { + err.message = err.message.replace('lstat', 'ensureLink') + return callback(err) + } + + var dir = path.dirname(dstpath) + fs.exists(dir, function (dirExists) { + if (dirExists) return makeLink(srcpath, dstpath) + mkdir.mkdirs(dir, function (err) { + if (err) return callback(err) + makeLink(srcpath, dstpath) + }) + }) + }) + }) +} + +function createLinkSync (srcpath, dstpath, callback) { + var destinationExists = fs.existsSync(dstpath) + if (destinationExists) return undefined + + try { + fs.lstatSync(srcpath) + } catch (err) { + err.message = err.message.replace('lstat', 'ensureLink') + throw err + } + + var dir = path.dirname(dstpath) + var dirExists = fs.existsSync(dir) + if (dirExists) return fs.linkSync(srcpath, dstpath) + mkdir.mkdirsSync(dir) + + return fs.linkSync(srcpath, dstpath) +} + +module.exports = { + createLink: createLink, + createLinkSync: createLinkSync, + // alias + ensureLink: createLink, + ensureLinkSync: createLinkSync +} + +},{"../mkdirs":272,"graceful-fs":285,"path":313}],264:[function(require,module,exports){ +var path = require('path') +// path.isAbsolute shim for Node.js 0.10 support +var fs = require('graceful-fs') + +/** + * Function that returns two types of paths, one relative to symlink, and one + * relative to the current working directory. Checks if path is absolute or + * relative. If the path is relative, this function checks if the path is + * relative to symlink or relative to current working directory. This is an + * initiative to find a smarter `srcpath` to supply when building symlinks. + * This allows you to determine which path to use out of one of three possible + * types of source paths. The first is an absolute path. This is detected by + * `path.isAbsolute()`. When an absolute path is provided, it is checked to + * see if it exists. If it does it's used, if not an error is returned + * (callback)/ thrown (sync). The other two options for `srcpath` are a + * relative url. By default Node's `fs.symlink` works by creating a symlink + * using `dstpath` and expects the `srcpath` to be relative to the newly + * created symlink. If you provide a `srcpath` that does not exist on the file + * system it results in a broken symlink. To minimize this, the function + * checks to see if the 'relative to symlink' source file exists, and if it + * does it will use it. If it does not, it checks if there's a file that + * exists that is relative to the current working directory, if does its used. + * This preserves the expectations of the original fs.symlink spec and adds + * the ability to pass in `relative to current working direcotry` paths. + */ + +function symlinkPaths (srcpath, dstpath, callback) { + if (path.isAbsolute(srcpath)) { + return fs.lstat(srcpath, function (err, stat) { + if (err) { + err.message = err.message.replace('lstat', 'ensureSymlink') + return callback(err) + } + return callback(null, { + 'toCwd': srcpath, + 'toDst': srcpath + }) + }) + } else { + var dstdir = path.dirname(dstpath) + var relativeToDst = path.join(dstdir, srcpath) + return fs.exists(relativeToDst, function (exists) { + if (exists) { + return callback(null, { + 'toCwd': relativeToDst, + 'toDst': srcpath + }) + } else { + return fs.lstat(srcpath, function (err, stat) { + if (err) { + err.message = err.message.replace('lstat', 'ensureSymlink') + return callback(err) + } + return callback(null, { + 'toCwd': srcpath, + 'toDst': path.relative(dstdir, srcpath) + }) + }) + } + }) + } +} + +function symlinkPathsSync (srcpath, dstpath) { + var exists + if (path.isAbsolute(srcpath)) { + exists = fs.existsSync(srcpath) + if (!exists) throw new Error('absolute srcpath does not exist') + return { + 'toCwd': srcpath, + 'toDst': srcpath + } + } else { + var dstdir = path.dirname(dstpath) + var relativeToDst = path.join(dstdir, srcpath) + exists = fs.existsSync(relativeToDst) + if (exists) { + return { + 'toCwd': relativeToDst, + 'toDst': srcpath + } + } else { + exists = fs.existsSync(srcpath) + if (!exists) throw new Error('relative srcpath does not exist') + return { + 'toCwd': srcpath, + 'toDst': path.relative(dstdir, srcpath) + } + } + } +} + +module.exports = { + 'symlinkPaths': symlinkPaths, + 'symlinkPathsSync': symlinkPathsSync +} + +},{"graceful-fs":285,"path":313}],265:[function(require,module,exports){ +var fs = require('graceful-fs') + +function symlinkType (srcpath, type, callback) { + callback = (typeof type === 'function') ? type : callback + type = (typeof type === 'function') ? false : type + if (type) return callback(null, type) + fs.lstat(srcpath, function (err, stats) { + if (err) return callback(null, 'file') + type = (stats && stats.isDirectory()) ? 'dir' : 'file' + callback(null, type) + }) +} + +function symlinkTypeSync (srcpath, type) { + if (type) return type + try { + var stats = fs.lstatSync(srcpath) + } catch (e) { + return 'file' + } + return (stats && stats.isDirectory()) ? 'dir' : 'file' +} + +module.exports = { + symlinkType: symlinkType, + symlinkTypeSync: symlinkTypeSync +} + +},{"graceful-fs":285}],266:[function(require,module,exports){ +var path = require('path') +var fs = require('graceful-fs') +var _mkdirs = require('../mkdirs') +var mkdirs = _mkdirs.mkdirs +var mkdirsSync = _mkdirs.mkdirsSync + +var _symlinkPaths = require('./symlink-paths') +var symlinkPaths = _symlinkPaths.symlinkPaths +var symlinkPathsSync = _symlinkPaths.symlinkPathsSync + +var _symlinkType = require('./symlink-type') +var symlinkType = _symlinkType.symlinkType +var symlinkTypeSync = _symlinkType.symlinkTypeSync + +function createSymlink (srcpath, dstpath, type, callback) { + callback = (typeof type === 'function') ? type : callback + type = (typeof type === 'function') ? false : type + + fs.exists(dstpath, function (destinationExists) { + if (destinationExists) return callback(null) + symlinkPaths(srcpath, dstpath, function (err, relative) { + if (err) return callback(err) + srcpath = relative.toDst + symlinkType(relative.toCwd, type, function (err, type) { + if (err) return callback(err) + var dir = path.dirname(dstpath) + fs.exists(dir, function (dirExists) { + if (dirExists) return fs.symlink(srcpath, dstpath, type, callback) + mkdirs(dir, function (err) { + if (err) return callback(err) + fs.symlink(srcpath, dstpath, type, callback) + }) + }) + }) + }) + }) +} + +function createSymlinkSync (srcpath, dstpath, type, callback) { + callback = (typeof type === 'function') ? type : callback + type = (typeof type === 'function') ? false : type + + var destinationExists = fs.existsSync(dstpath) + if (destinationExists) return undefined + + var relative = symlinkPathsSync(srcpath, dstpath) + srcpath = relative.toDst + type = symlinkTypeSync(relative.toCwd, type) + var dir = path.dirname(dstpath) + var exists = fs.existsSync(dir) + if (exists) return fs.symlinkSync(srcpath, dstpath, type) + mkdirsSync(dir) + return fs.symlinkSync(srcpath, dstpath, type) +} + +module.exports = { + createSymlink: createSymlink, + createSymlinkSync: createSymlinkSync, + // alias + ensureSymlink: createSymlink, + ensureSymlinkSync: createSymlinkSync +} + +},{"../mkdirs":272,"./symlink-paths":264,"./symlink-type":265,"graceful-fs":285,"path":313}],267:[function(require,module,exports){ +var assign = require('./util/assign') + +var fse = {} +var gfs = require('graceful-fs') + +// attach fs methods to fse +Object.keys(gfs).forEach(function (key) { + fse[key] = gfs[key] +}) + +var fs = fse + +assign(fs, require('./copy')) +assign(fs, require('./copy-sync')) +assign(fs, require('./mkdirs')) +assign(fs, require('./remove')) +assign(fs, require('./json')) +assign(fs, require('./move')) +assign(fs, require('./empty')) +assign(fs, require('./ensure')) +assign(fs, require('./output')) +assign(fs, require('./walk')) +assign(fs, require('./walk-sync')) + +module.exports = fs + +// maintain backwards compatibility for awhile +var jsonfile = {} +Object.defineProperty(jsonfile, 'spaces', { + get: function () { + return fs.spaces // found in ./json + }, + set: function (val) { + fs.spaces = val + } +}) + +module.exports.jsonfile = jsonfile // so users of fs-extra can modify jsonFile.spaces + +},{"./copy":258,"./copy-sync":256,"./empty":260,"./ensure":262,"./json":268,"./mkdirs":272,"./move":276,"./output":277,"./remove":278,"./util/assign":280,"./walk":283,"./walk-sync":282,"graceful-fs":285}],268:[function(require,module,exports){ +var jsonFile = require('./jsonfile') + +jsonFile.outputJsonSync = require('./output-json-sync') +jsonFile.outputJson = require('./output-json') +// aliases +jsonFile.outputJSONSync = require('./output-json-sync') +jsonFile.outputJSON = require('./output-json') + +module.exports = jsonFile + +},{"./jsonfile":269,"./output-json":271,"./output-json-sync":270}],269:[function(require,module,exports){ +var jsonFile = require('jsonfile') + +module.exports = { + // jsonfile exports + readJson: jsonFile.readFile, + readJSON: jsonFile.readFile, + readJsonSync: jsonFile.readFileSync, + readJSONSync: jsonFile.readFileSync, + writeJson: jsonFile.writeFile, + writeJSON: jsonFile.writeFile, + writeJsonSync: jsonFile.writeFileSync, + writeJSONSync: jsonFile.writeFileSync, + spaces: 2 // default in fs-extra +} + +},{"jsonfile":300}],270:[function(require,module,exports){ +var fs = require('graceful-fs') +var path = require('path') +var jsonFile = require('./jsonfile') +var mkdir = require('../mkdirs') + +function outputJsonSync (file, data, options) { + var dir = path.dirname(file) + + if (!fs.existsSync(dir)) { + mkdir.mkdirsSync(dir) + } + + jsonFile.writeJsonSync(file, data, options) +} + +module.exports = outputJsonSync + +},{"../mkdirs":272,"./jsonfile":269,"graceful-fs":285,"path":313}],271:[function(require,module,exports){ +var fs = require('graceful-fs') +var path = require('path') +var jsonFile = require('./jsonfile') +var mkdir = require('../mkdirs') + +function outputJson (file, data, options, callback) { + if (typeof options === 'function') { + callback = options + options = {} + } + + var dir = path.dirname(file) + + fs.exists(dir, function (itDoes) { + if (itDoes) return jsonFile.writeJson(file, data, options, callback) + + mkdir.mkdirs(dir, function (err) { + if (err) return callback(err) + jsonFile.writeJson(file, data, options, callback) + }) + }) +} + +module.exports = outputJson + +},{"../mkdirs":272,"./jsonfile":269,"graceful-fs":285,"path":313}],272:[function(require,module,exports){ +module.exports = { + mkdirs: require('./mkdirs'), + mkdirsSync: require('./mkdirs-sync'), + // alias + mkdirp: require('./mkdirs'), + mkdirpSync: require('./mkdirs-sync'), + ensureDir: require('./mkdirs'), + ensureDirSync: require('./mkdirs-sync') +} + +},{"./mkdirs":274,"./mkdirs-sync":273}],273:[function(require,module,exports){ +(function (process){ +var fs = require('graceful-fs') +var path = require('path') +var invalidWin32Path = require('./win32').invalidWin32Path + +var o777 = parseInt('0777', 8) + +function mkdirsSync (p, opts, made) { + if (!opts || typeof opts !== 'object') { + opts = { mode: opts } + } + + var mode = opts.mode + var xfs = opts.fs || fs + + if (process.platform === 'win32' && invalidWin32Path(p)) { + var errInval = new Error(p + ' contains invalid WIN32 path characters.') + errInval.code = 'EINVAL' + throw errInval + } + + if (mode === undefined) { + mode = o777 & (~process.umask()) + } + if (!made) made = null + + p = path.resolve(p) + + try { + xfs.mkdirSync(p, mode) + made = made || p + } catch (err0) { + switch (err0.code) { + case 'ENOENT': + if (path.dirname(p) === p) throw err0 + made = mkdirsSync(path.dirname(p), opts, made) + mkdirsSync(p, opts, made) + break + + // In the case of any other error, just see if there's a dir + // there already. If so, then hooray! If not, then something + // is borked. + default: + var stat + try { + stat = xfs.statSync(p) + } catch (err1) { + throw err0 + } + if (!stat.isDirectory()) throw err0 + break + } + } + + return made +} + +module.exports = mkdirsSync + +}).call(this,require('_process')) + +},{"./win32":275,"_process":317,"graceful-fs":285,"path":313}],274:[function(require,module,exports){ +(function (process){ +var fs = require('graceful-fs') +var path = require('path') +var invalidWin32Path = require('./win32').invalidWin32Path + +var o777 = parseInt('0777', 8) + +function mkdirs (p, opts, callback, made) { + if (typeof opts === 'function') { + callback = opts + opts = {} + } else if (!opts || typeof opts !== 'object') { + opts = { mode: opts } + } + + if (process.platform === 'win32' && invalidWin32Path(p)) { + var errInval = new Error(p + ' contains invalid WIN32 path characters.') + errInval.code = 'EINVAL' + return callback(errInval) + } + + var mode = opts.mode + var xfs = opts.fs || fs + + if (mode === undefined) { + mode = o777 & (~process.umask()) + } + if (!made) made = null + + callback = callback || function () {} + p = path.resolve(p) + + xfs.mkdir(p, mode, function (er) { + if (!er) { + made = made || p + return callback(null, made) + } + switch (er.code) { + case 'ENOENT': + if (path.dirname(p) === p) return callback(er) + mkdirs(path.dirname(p), opts, function (er, made) { + if (er) callback(er, made) + else mkdirs(p, opts, callback, made) + }) + break + + // In the case of any other error, just see if there's a dir + // there already. If so, then hooray! If not, then something + // is borked. + default: + xfs.stat(p, function (er2, stat) { + // if the stat fails, then that's super weird. + // let the original error be the failure reason. + if (er2 || !stat.isDirectory()) callback(er, made) + else callback(null, made) + }) + break + } + }) +} + +module.exports = mkdirs + +}).call(this,require('_process')) + +},{"./win32":275,"_process":317,"graceful-fs":285,"path":313}],275:[function(require,module,exports){ +'use strict' +var path = require('path') + +// get drive on windows +function getRootPath (p) { + p = path.normalize(path.resolve(p)).split(path.sep) + if (p.length > 0) return p[0] + else return null +} + +// http://stackoverflow.com/a/62888/10333 contains more accurate +// TODO: expand to include the rest +var INVALID_PATH_CHARS = /[<>:"|?*]/ + +function invalidWin32Path (p) { + var rp = getRootPath(p) + p = p.replace(rp, '') + return INVALID_PATH_CHARS.test(p) +} + +module.exports = { + getRootPath: getRootPath, + invalidWin32Path: invalidWin32Path +} + +},{"path":313}],276:[function(require,module,exports){ +// most of this code was written by Andrew Kelley +// licensed under the BSD license: see +// https://github.com/andrewrk/node-mv/blob/master/package.json + +// this needs a cleanup + +var fs = require('graceful-fs') +var ncp = require('../copy/ncp') +var path = require('path') +var remove = require('../remove').remove +var mkdirp = require('../mkdirs').mkdirs + +function mv (source, dest, options, callback) { + if (typeof options === 'function') { + callback = options + options = {} + } + + var shouldMkdirp = ('mkdirp' in options) ? options.mkdirp : true + var clobber = ('clobber' in options) ? options.clobber : false + + var limit = options.limit || 16 + + if (shouldMkdirp) { + mkdirs() + } else { + doRename() + } + + function mkdirs () { + mkdirp(path.dirname(dest), function (err) { + if (err) return callback(err) + doRename() + }) + } + + function doRename () { + if (clobber) { + fs.rename(source, dest, function (err) { + if (!err) return callback() + + if (err.code === 'ENOTEMPTY' || err.code === 'EEXIST') { + remove(dest, function (err) { + if (err) return callback(err) + options.clobber = false // just clobbered it, no need to do it again + mv(source, dest, options, callback) + }) + return + } + + // weird Windows shit + if (err.code === 'EPERM') { + setTimeout(function () { + remove(dest, function (err) { + if (err) return callback(err) + options.clobber = false + mv(source, dest, options, callback) + }) + }, 200) + return + } + + if (err.code !== 'EXDEV') return callback(err) + moveAcrossDevice(source, dest, clobber, limit, callback) + }) + } else { + fs.link(source, dest, function (err) { + if (err) { + if (err.code === 'EXDEV' || err.code === 'EISDIR' || err.code === 'EPERM') { + moveAcrossDevice(source, dest, clobber, limit, callback) + return + } + callback(err) + return + } + fs.unlink(source, callback) + }) + } + } +} + +function moveAcrossDevice (source, dest, clobber, limit, callback) { + fs.stat(source, function (err, stat) { + if (err) { + callback(err) + return + } + + if (stat.isDirectory()) { + moveDirAcrossDevice(source, dest, clobber, limit, callback) + } else { + moveFileAcrossDevice(source, dest, clobber, limit, callback) + } + }) +} + +function moveFileAcrossDevice (source, dest, clobber, limit, callback) { + var outFlags = clobber ? 'w' : 'wx' + var ins = fs.createReadStream(source) + var outs = fs.createWriteStream(dest, {flags: outFlags}) + + ins.on('error', function (err) { + ins.destroy() + outs.destroy() + outs.removeListener('close', onClose) + + // may want to create a directory but `out` line above + // creates an empty file for us: See #108 + // don't care about error here + fs.unlink(dest, function () { + // note: `err` here is from the input stream errror + if (err.code === 'EISDIR' || err.code === 'EPERM') { + moveDirAcrossDevice(source, dest, clobber, limit, callback) + } else { + callback(err) + } + }) + }) + + outs.on('error', function (err) { + ins.destroy() + outs.destroy() + outs.removeListener('close', onClose) + callback(err) + }) + + outs.once('close', onClose) + ins.pipe(outs) + + function onClose () { + fs.unlink(source, callback) + } +} + +function moveDirAcrossDevice (source, dest, clobber, limit, callback) { + var options = { + stopOnErr: true, + clobber: false, + limit: limit + } + + function startNcp () { + ncp(source, dest, options, function (errList) { + if (errList) return callback(errList[0]) + remove(source, callback) + }) + } + + if (clobber) { + remove(dest, function (err) { + if (err) return callback(err) + startNcp() + }) + } else { + startNcp() + } +} + +module.exports = { + move: mv +} + +},{"../copy/ncp":259,"../mkdirs":272,"../remove":278,"graceful-fs":285,"path":313}],277:[function(require,module,exports){ +var path = require('path') +var fs = require('graceful-fs') +var mkdir = require('../mkdirs') + +function outputFile (file, data, encoding, callback) { + if (typeof encoding === 'function') { + callback = encoding + encoding = 'utf8' + } + + var dir = path.dirname(file) + fs.exists(dir, function (itDoes) { + if (itDoes) return fs.writeFile(file, data, encoding, callback) + + mkdir.mkdirs(dir, function (err) { + if (err) return callback(err) + + fs.writeFile(file, data, encoding, callback) + }) + }) +} + +function outputFileSync (file, data, encoding) { + var dir = path.dirname(file) + if (fs.existsSync(dir)) { + return fs.writeFileSync.apply(fs, arguments) + } + mkdir.mkdirsSync(dir) + fs.writeFileSync.apply(fs, arguments) +} + +module.exports = { + outputFile: outputFile, + outputFileSync: outputFileSync +} + +},{"../mkdirs":272,"graceful-fs":285,"path":313}],278:[function(require,module,exports){ +var rimraf = require('./rimraf') + +function removeSync (dir) { + return rimraf.sync(dir, {disableGlob: true}) +} + +function remove (dir, callback) { + var options = {disableGlob: true} + return callback ? rimraf(dir, options, callback) : rimraf(dir, options, function () {}) +} + +module.exports = { + remove: remove, + removeSync: removeSync +} + +},{"./rimraf":279}],279:[function(require,module,exports){ +(function (process){ +module.exports = rimraf +rimraf.sync = rimrafSync + +var assert = require('assert') +var path = require('path') +var fs = require('graceful-fs') + +var isWindows = (process.platform === 'win32') + +function defaults (options) { + var methods = [ + 'unlink', + 'chmod', + 'stat', + 'lstat', + 'rmdir', + 'readdir' + ] + methods.forEach(function (m) { + options[m] = options[m] || fs[m] + m = m + 'Sync' + options[m] = options[m] || fs[m] + }) + + options.maxBusyTries = options.maxBusyTries || 3 +} + +function rimraf (p, options, cb) { + if (typeof options === 'function') { + cb = options + options = {} + } + + assert(p, 'rimraf: missing path') + assert.equal(typeof p, 'string', 'rimraf: path should be a string') + assert.equal(typeof cb, 'function', 'rimraf: callback function required') + assert(options, 'rimraf: invalid options argument provided') + assert.equal(typeof options, 'object', 'rimraf: options should be object') + + defaults(options) + + var busyTries = 0 + + rimraf_(p, options, function CB (er) { + if (er) { + if (isWindows && (er.code === 'EBUSY' || er.code === 'ENOTEMPTY' || er.code === 'EPERM') && + busyTries < options.maxBusyTries) { + busyTries++ + var time = busyTries * 100 + // try again, with the same exact callback as this one. + return setTimeout(function () { + rimraf_(p, options, CB) + }, time) + } + + // already gone + if (er.code === 'ENOENT') er = null + } + + cb(er) + }) +} + +// Two possible strategies. +// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR +// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR +// +// Both result in an extra syscall when you guess wrong. However, there +// are likely far more normal files in the world than directories. This +// is based on the assumption that a the average number of files per +// directory is >= 1. +// +// If anyone ever complains about this, then I guess the strategy could +// be made configurable somehow. But until then, YAGNI. +function rimraf_ (p, options, cb) { + assert(p) + assert(options) + assert(typeof cb === 'function') + + // sunos lets the root user unlink directories, which is... weird. + // so we have to lstat here and make sure it's not a dir. + options.lstat(p, function (er, st) { + if (er && er.code === 'ENOENT') { + return cb(null) + } + + // Windows can EPERM on stat. Life is suffering. + if (er && er.code === 'EPERM' && isWindows) { + fixWinEPERM(p, options, er, cb) + } + + if (st && st.isDirectory()) { + return rmdir(p, options, er, cb) + } + + options.unlink(p, function (er) { + if (er) { + if (er.code === 'ENOENT') { + return cb(null) + } + if (er.code === 'EPERM') { + return (isWindows) + ? fixWinEPERM(p, options, er, cb) + : rmdir(p, options, er, cb) + } + if (er.code === 'EISDIR') { + return rmdir(p, options, er, cb) + } + } + return cb(er) + }) + }) +} + +function fixWinEPERM (p, options, er, cb) { + assert(p) + assert(options) + assert(typeof cb === 'function') + if (er) { + assert(er instanceof Error) + } + + options.chmod(p, 666, function (er2) { + if (er2) { + cb(er2.code === 'ENOENT' ? null : er) + } else { + options.stat(p, function (er3, stats) { + if (er3) { + cb(er3.code === 'ENOENT' ? null : er) + } else if (stats.isDirectory()) { + rmdir(p, options, er, cb) + } else { + options.unlink(p, cb) + } + }) + } + }) +} + +function fixWinEPERMSync (p, options, er) { + assert(p) + assert(options) + if (er) { + assert(er instanceof Error) + } + + try { + options.chmodSync(p, 666) + } catch (er2) { + if (er2.code === 'ENOENT') { + return + } else { + throw er + } + } + + try { + var stats = options.statSync(p) + } catch (er3) { + if (er3.code === 'ENOENT') { + return + } else { + throw er + } + } + + if (stats.isDirectory()) { + rmdirSync(p, options, er) + } else { + options.unlinkSync(p) + } +} + +function rmdir (p, options, originalEr, cb) { + assert(p) + assert(options) + if (originalEr) { + assert(originalEr instanceof Error) + } + assert(typeof cb === 'function') + + // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS) + // if we guessed wrong, and it's not a directory, then + // raise the original error. + options.rmdir(p, function (er) { + if (er && (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM')) { + rmkids(p, options, cb) + } else if (er && er.code === 'ENOTDIR') { + cb(originalEr) + } else { + cb(er) + } + }) +} + +function rmkids (p, options, cb) { + assert(p) + assert(options) + assert(typeof cb === 'function') + + options.readdir(p, function (er, files) { + if (er) { + return cb(er) + } + var n = files.length + if (n === 0) { + return options.rmdir(p, cb) + } + var errState + files.forEach(function (f) { + rimraf(path.join(p, f), options, function (er) { + if (errState) { + return + } + if (er) { + return cb(errState = er) + } + if (--n === 0) { + options.rmdir(p, cb) + } + }) + }) + }) +} + +// this looks simpler, and is strictly *faster*, but will +// tie up the JavaScript thread and fail on excessively +// deep directory trees. +function rimrafSync (p, options) { + options = options || {} + defaults(options) + + assert(p, 'rimraf: missing path') + assert.equal(typeof p, 'string', 'rimraf: path should be a string') + assert(options, 'rimraf: missing options') + assert.equal(typeof options, 'object', 'rimraf: options should be object') + + try { + var st = options.lstatSync(p) + } catch (er) { + if (er.code === 'ENOENT') { + return + } + + // Windows can EPERM on stat. Life is suffering. + if (er.code === 'EPERM' && isWindows) { + fixWinEPERMSync(p, options, er) + } + } + + try { + // sunos lets the root user unlink directories, which is... weird. + if (st && st.isDirectory()) { + rmdirSync(p, options, null) + } else { + options.unlinkSync(p) + } + } catch (er) { + if (er.code === 'ENOENT') { + return + } + if (er.code === 'EPERM') { + return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er) + } + if (er.code !== 'EISDIR') { + throw er + } + rmdirSync(p, options, er) + } +} + +function rmdirSync (p, options, originalEr) { + assert(p) + assert(options) + if (originalEr) { + assert(originalEr instanceof Error) + } + + try { + options.rmdirSync(p) + } catch (er) { + if (er.code === 'ENOENT') { + return + } + if (er.code === 'ENOTDIR') { + throw originalEr + } + if (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM') { + rmkidsSync(p, options) + } + } +} + +function rmkidsSync (p, options) { + assert(p) + assert(options) + options.readdirSync(p).forEach(function (f) { + rimrafSync(path.join(p, f), options) + }) + options.rmdirSync(p, options) +} + +}).call(this,require('_process')) + +},{"_process":317,"assert":52,"graceful-fs":285,"path":313}],280:[function(require,module,exports){ +// simple mutable assign +function assign () { + var args = [].slice.call(arguments).filter(function (i) { return i }) + var dest = args.shift() + args.forEach(function (src) { + Object.keys(src).forEach(function (key) { + dest[key] = src[key] + }) + }) + + return dest +} + +module.exports = assign + +},{}],281:[function(require,module,exports){ +var fs = require('graceful-fs') +var path = require('path') +var os = require('os') + +// HFS, ext{2,3}, FAT do not, Node.js v0.10 does not +function hasMillisResSync () { + var tmpfile = path.join('millis-test-sync' + Date.now().toString() + Math.random().toString().slice(2)) + tmpfile = path.join(os.tmpdir(), tmpfile) + + // 550 millis past UNIX epoch + var d = new Date(1435410243862) + fs.writeFileSync(tmpfile, 'https://github.com/jprichardson/node-fs-extra/pull/141') + var fd = fs.openSync(tmpfile, 'r+') + fs.futimesSync(fd, d, d) + fs.closeSync(fd) + return fs.statSync(tmpfile).mtime > 1435410243000 +} + +function hasMillisRes (callback) { + var tmpfile = path.join('millis-test' + Date.now().toString() + Math.random().toString().slice(2)) + tmpfile = path.join(os.tmpdir(), tmpfile) + + // 550 millis past UNIX epoch + var d = new Date(1435410243862) + fs.writeFile(tmpfile, 'https://github.com/jprichardson/node-fs-extra/pull/141', function (err) { + if (err) return callback(err) + fs.open(tmpfile, 'r+', function (err, fd) { + if (err) return callback(err) + fs.futimes(fd, d, d, function (err) { + if (err) return callback(err) + fs.close(fd, function (err) { + if (err) return callback(err) + fs.stat(tmpfile, function (err, stats) { + if (err) return callback(err) + callback(null, stats.mtime > 1435410243000) + }) + }) + }) + }) + }) +} + +function timeRemoveMillis (timestamp) { + if (typeof timestamp === 'number') { + return Math.floor(timestamp / 1000) * 1000 + } else if (timestamp instanceof Date) { + return new Date(Math.floor(timestamp.getTime() / 1000) * 1000) + } else { + throw new Error('fs-extra: timeRemoveMillis() unknown parameter type') + } +} + +function utimesMillis (path, atime, mtime, callback) { + // if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback) + fs.open(path, 'r+', function (err, fd) { + if (err) return callback(err) + fs.futimes(fd, atime, mtime, function (futimesErr) { + fs.close(fd, function (closeErr) { + if (callback) callback(futimesErr || closeErr) + }) + }) + }) +} + +module.exports = { + hasMillisRes: hasMillisRes, + hasMillisResSync: hasMillisResSync, + timeRemoveMillis: timeRemoveMillis, + utimesMillis: utimesMillis +} + +},{"graceful-fs":285,"os":307,"path":313}],282:[function(require,module,exports){ +var fs = require('graceful-fs') +var path = require('path') + +var walkSync = function (dir, filelist) { + var files = fs.readdirSync(dir) + filelist = filelist || [] + files.forEach(function (file) { + var nestedPath = path.join(dir, file) + if (fs.lstatSync(nestedPath).isDirectory()) { + filelist = walkSync(nestedPath, filelist) + } else { + filelist.push(nestedPath) + } + }) + return filelist +} + +module.exports = { + walkSync: walkSync +} + +},{"graceful-fs":285,"path":313}],283:[function(require,module,exports){ +var klaw = require('klaw') + +module.exports = { + walk: klaw +} + +},{"klaw":302}],284:[function(require,module,exports){ +'use strict' + +var fs = require('fs') + +module.exports = clone(fs) + +function clone (obj) { + if (obj === null || typeof obj !== 'object') + return obj + + if (obj instanceof Object) + var copy = { __proto__: obj.__proto__ } + else + var copy = Object.create(null) + + Object.getOwnPropertyNames(obj).forEach(function (key) { + Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key)) + }) + + return copy +} + +},{"fs":102}],285:[function(require,module,exports){ +(function (process){ +var fs = require('fs') +var polyfills = require('./polyfills.js') +var legacy = require('./legacy-streams.js') +var queue = [] + +var util = require('util') + +function noop () {} + +var debug = noop +if (util.debuglog) + debug = util.debuglog('gfs4') +else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) + debug = function() { + var m = util.format.apply(util, arguments) + m = 'GFS4: ' + m.split(/\n/).join('\nGFS4: ') + console.error(m) + } + +if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) { + process.on('exit', function() { + debug(queue) + require('assert').equal(queue.length, 0) + }) +} + +module.exports = patch(require('./fs.js')) +if (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH) { + module.exports = patch(fs) +} + +// Always patch fs.close/closeSync, because we want to +// retry() whenever a close happens *anywhere* in the program. +// This is essential when multiple graceful-fs instances are +// in play at the same time. +module.exports.close = +fs.close = (function (fs$close) { return function (fd, cb) { + return fs$close.call(fs, fd, function (err) { + if (!err) + retry() + + if (typeof cb === 'function') + cb.apply(this, arguments) + }) +}})(fs.close) + +module.exports.closeSync = +fs.closeSync = (function (fs$closeSync) { return function (fd) { + // Note that graceful-fs also retries when fs.closeSync() fails. + // Looks like a bug to me, although it's probably a harmless one. + var rval = fs$closeSync.apply(fs, arguments) + retry() + return rval +}})(fs.closeSync) + +function patch (fs) { + // Everything that references the open() function needs to be in here + polyfills(fs) + fs.gracefulify = patch + fs.FileReadStream = ReadStream; // Legacy name. + fs.FileWriteStream = WriteStream; // Legacy name. + fs.createReadStream = createReadStream + fs.createWriteStream = createWriteStream + var fs$readFile = fs.readFile + fs.readFile = readFile + function readFile (path, options, cb) { + if (typeof options === 'function') + cb = options, options = null + + return go$readFile(path, options, cb) + + function go$readFile (path, options, cb) { + return fs$readFile(path, options, function (err) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$readFile, [path, options, cb]]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + retry() + } + }) + } + } + + var fs$writeFile = fs.writeFile + fs.writeFile = writeFile + function writeFile (path, data, options, cb) { + if (typeof options === 'function') + cb = options, options = null + + return go$writeFile(path, data, options, cb) + + function go$writeFile (path, data, options, cb) { + return fs$writeFile(path, data, options, function (err) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$writeFile, [path, data, options, cb]]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + retry() + } + }) + } + } + + var fs$appendFile = fs.appendFile + if (fs$appendFile) + fs.appendFile = appendFile + function appendFile (path, data, options, cb) { + if (typeof options === 'function') + cb = options, options = null + + return go$appendFile(path, data, options, cb) + + function go$appendFile (path, data, options, cb) { + return fs$appendFile(path, data, options, function (err) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$appendFile, [path, data, options, cb]]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + retry() + } + }) + } + } + + var fs$readdir = fs.readdir + fs.readdir = readdir + function readdir (path, options, cb) { + var args = [path] + if (typeof options !== 'function') { + args.push(options) + } else { + cb = options + } + args.push(go$readdir$cb) + + return go$readdir(args) + + function go$readdir$cb (err, files) { + if (files && files.sort) + files.sort() + + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$readdir, [args]]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + retry() + } + } + } + + function go$readdir (args) { + return fs$readdir.apply(fs, args) + } + + if (process.version.substr(0, 4) === 'v0.8') { + var legStreams = legacy(fs) + ReadStream = legStreams.ReadStream + WriteStream = legStreams.WriteStream + } + + var fs$ReadStream = fs.ReadStream + ReadStream.prototype = Object.create(fs$ReadStream.prototype) + ReadStream.prototype.open = ReadStream$open + + var fs$WriteStream = fs.WriteStream + WriteStream.prototype = Object.create(fs$WriteStream.prototype) + WriteStream.prototype.open = WriteStream$open + + fs.ReadStream = ReadStream + fs.WriteStream = WriteStream + + function ReadStream (path, options) { + if (this instanceof ReadStream) + return fs$ReadStream.apply(this, arguments), this + else + return ReadStream.apply(Object.create(ReadStream.prototype), arguments) + } + + function ReadStream$open () { + var that = this + open(that.path, that.flags, that.mode, function (err, fd) { + if (err) { + if (that.autoClose) + that.destroy() + + that.emit('error', err) + } else { + that.fd = fd + that.emit('open', fd) + that.read() + } + }) + } + + function WriteStream (path, options) { + if (this instanceof WriteStream) + return fs$WriteStream.apply(this, arguments), this + else + return WriteStream.apply(Object.create(WriteStream.prototype), arguments) + } + + function WriteStream$open () { + var that = this + open(that.path, that.flags, that.mode, function (err, fd) { + if (err) { + that.destroy() + that.emit('error', err) + } else { + that.fd = fd + that.emit('open', fd) + } + }) + } + + function createReadStream (path, options) { + return new ReadStream(path, options) + } + + function createWriteStream (path, options) { + return new WriteStream(path, options) + } + + var fs$open = fs.open + fs.open = open + function open (path, flags, mode, cb) { + if (typeof mode === 'function') + cb = mode, mode = null + + return go$open(path, flags, mode, cb) + + function go$open (path, flags, mode, cb) { + return fs$open(path, flags, mode, function (err, fd) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$open, [path, flags, mode, cb]]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + retry() + } + }) + } + } + + return fs +} + +function enqueue (elem) { + debug('ENQUEUE', elem[0].name, elem[1]) + queue.push(elem) +} + +function retry () { + var elem = queue.shift() + if (elem) { + debug('RETRY', elem[0].name, elem[1]) + elem[0].apply(null, elem[1]) + } +} + +}).call(this,require('_process')) + +},{"./fs.js":284,"./legacy-streams.js":286,"./polyfills.js":287,"_process":317,"assert":52,"fs":102,"util":350}],286:[function(require,module,exports){ +(function (process){ +var Stream = require('stream').Stream + +module.exports = legacy + +function legacy (fs) { + return { + ReadStream: ReadStream, + WriteStream: WriteStream + } + + function ReadStream (path, options) { + if (!(this instanceof ReadStream)) return new ReadStream(path, options); + + Stream.call(this); + + var self = this; + + this.path = path; + this.fd = null; + this.readable = true; + this.paused = false; + + this.flags = 'r'; + this.mode = 438; /*=0666*/ + this.bufferSize = 64 * 1024; + + options = options || {}; + + // Mixin options into this + var keys = Object.keys(options); + for (var index = 0, length = keys.length; index < length; index++) { + var key = keys[index]; + this[key] = options[key]; + } + + if (this.encoding) this.setEncoding(this.encoding); + + if (this.start !== undefined) { + if ('number' !== typeof this.start) { + throw TypeError('start must be a Number'); + } + if (this.end === undefined) { + this.end = Infinity; + } else if ('number' !== typeof this.end) { + throw TypeError('end must be a Number'); + } + + if (this.start > this.end) { + throw new Error('start must be <= end'); + } + + this.pos = this.start; + } + + if (this.fd !== null) { + process.nextTick(function() { + self._read(); + }); + return; + } + + fs.open(this.path, this.flags, this.mode, function (err, fd) { + if (err) { + self.emit('error', err); + self.readable = false; + return; + } + + self.fd = fd; + self.emit('open', fd); + self._read(); + }) + } + + function WriteStream (path, options) { + if (!(this instanceof WriteStream)) return new WriteStream(path, options); + + Stream.call(this); + + this.path = path; + this.fd = null; + this.writable = true; + + this.flags = 'w'; + this.encoding = 'binary'; + this.mode = 438; /*=0666*/ + this.bytesWritten = 0; + + options = options || {}; + + // Mixin options into this + var keys = Object.keys(options); + for (var index = 0, length = keys.length; index < length; index++) { + var key = keys[index]; + this[key] = options[key]; + } + + if (this.start !== undefined) { + if ('number' !== typeof this.start) { + throw TypeError('start must be a Number'); + } + if (this.start < 0) { + throw new Error('start must be >= zero'); + } + + this.pos = this.start; + } + + this.busy = false; + this._queue = []; + + if (this.fd === null) { + this._open = fs.open; + this._queue.push([this._open, this.path, this.flags, this.mode, undefined]); + this.flush(); + } + } +} + +}).call(this,require('_process')) + +},{"_process":317,"stream":345}],287:[function(require,module,exports){ +(function (process){ +var fs = require('./fs.js') +var constants = require('constants') + +var origCwd = process.cwd +var cwd = null + +var platform = process.env.GRACEFUL_FS_PLATFORM || process.platform + +process.cwd = function() { + if (!cwd) + cwd = origCwd.call(process) + return cwd +} +try { + process.cwd() +} catch (er) {} + +var chdir = process.chdir +process.chdir = function(d) { + cwd = null + chdir.call(process, d) +} + +module.exports = patch + +function patch (fs) { + // (re-)implement some things that are known busted or missing. + + // lchmod, broken prior to 0.6.2 + // back-port the fix here. + if (constants.hasOwnProperty('O_SYMLINK') && + process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) { + patchLchmod(fs) + } + + // lutimes implementation, or no-op + if (!fs.lutimes) { + patchLutimes(fs) + } + + // https://github.com/isaacs/node-graceful-fs/issues/4 + // Chown should not fail on einval or eperm if non-root. + // It should not fail on enosys ever, as this just indicates + // that a fs doesn't support the intended operation. + + fs.chown = chownFix(fs.chown) + fs.fchown = chownFix(fs.fchown) + fs.lchown = chownFix(fs.lchown) + + fs.chmod = chmodFix(fs.chmod) + fs.fchmod = chmodFix(fs.fchmod) + fs.lchmod = chmodFix(fs.lchmod) + + fs.chownSync = chownFixSync(fs.chownSync) + fs.fchownSync = chownFixSync(fs.fchownSync) + fs.lchownSync = chownFixSync(fs.lchownSync) + + fs.chmodSync = chmodFixSync(fs.chmodSync) + fs.fchmodSync = chmodFixSync(fs.fchmodSync) + fs.lchmodSync = chmodFixSync(fs.lchmodSync) + + fs.stat = statFix(fs.stat) + fs.fstat = statFix(fs.fstat) + fs.lstat = statFix(fs.lstat) + + fs.statSync = statFixSync(fs.statSync) + fs.fstatSync = statFixSync(fs.fstatSync) + fs.lstatSync = statFixSync(fs.lstatSync) + + // if lchmod/lchown do not exist, then make them no-ops + if (!fs.lchmod) { + fs.lchmod = function (path, mode, cb) { + if (cb) process.nextTick(cb) + } + fs.lchmodSync = function () {} + } + if (!fs.lchown) { + fs.lchown = function (path, uid, gid, cb) { + if (cb) process.nextTick(cb) + } + fs.lchownSync = function () {} + } + + // on Windows, A/V software can lock the directory, causing this + // to fail with an EACCES or EPERM if the directory contains newly + // created files. Try again on failure, for up to 60 seconds. + + // Set the timeout this long because some Windows Anti-Virus, such as Parity + // bit9, may lock files for up to a minute, causing npm package install + // failures. Also, take care to yield the scheduler. Windows scheduling gives + // CPU to a busy looping process, which can cause the program causing the lock + // contention to be starved of CPU by node, so the contention doesn't resolve. + if (platform === "win32") { + fs.rename = (function (fs$rename) { return function (from, to, cb) { + var start = Date.now() + var backoff = 0; + fs$rename(from, to, function CB (er) { + if (er + && (er.code === "EACCES" || er.code === "EPERM") + && Date.now() - start < 60000) { + setTimeout(function() { + fs.stat(to, function (stater, st) { + if (stater && stater.code === "ENOENT") + fs$rename(from, to, CB); + else + cb(er) + }) + }, backoff) + if (backoff < 100) + backoff += 10; + return; + } + if (cb) cb(er) + }) + }})(fs.rename) + } + + // if read() returns EAGAIN, then just try it again. + fs.read = (function (fs$read) { return function (fd, buffer, offset, length, position, callback_) { + var callback + if (callback_ && typeof callback_ === 'function') { + var eagCounter = 0 + callback = function (er, _, __) { + if (er && er.code === 'EAGAIN' && eagCounter < 10) { + eagCounter ++ + return fs$read.call(fs, fd, buffer, offset, length, position, callback) + } + callback_.apply(this, arguments) + } + } + return fs$read.call(fs, fd, buffer, offset, length, position, callback) + }})(fs.read) + + fs.readSync = (function (fs$readSync) { return function (fd, buffer, offset, length, position) { + var eagCounter = 0 + while (true) { + try { + return fs$readSync.call(fs, fd, buffer, offset, length, position) + } catch (er) { + if (er.code === 'EAGAIN' && eagCounter < 10) { + eagCounter ++ + continue + } + throw er + } + } + }})(fs.readSync) +} + +function patchLchmod (fs) { + fs.lchmod = function (path, mode, callback) { + fs.open( path + , constants.O_WRONLY | constants.O_SYMLINK + , mode + , function (err, fd) { + if (err) { + if (callback) callback(err) + return + } + // prefer to return the chmod error, if one occurs, + // but still try to close, and report closing errors if they occur. + fs.fchmod(fd, mode, function (err) { + fs.close(fd, function(err2) { + if (callback) callback(err || err2) + }) + }) + }) + } + + fs.lchmodSync = function (path, mode) { + var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode) + + // prefer to return the chmod error, if one occurs, + // but still try to close, and report closing errors if they occur. + var threw = true + var ret + try { + ret = fs.fchmodSync(fd, mode) + threw = false + } finally { + if (threw) { + try { + fs.closeSync(fd) + } catch (er) {} + } else { + fs.closeSync(fd) + } + } + return ret + } +} + +function patchLutimes (fs) { + if (constants.hasOwnProperty("O_SYMLINK")) { + fs.lutimes = function (path, at, mt, cb) { + fs.open(path, constants.O_SYMLINK, function (er, fd) { + if (er) { + if (cb) cb(er) + return + } + fs.futimes(fd, at, mt, function (er) { + fs.close(fd, function (er2) { + if (cb) cb(er || er2) + }) + }) + }) + } + + fs.lutimesSync = function (path, at, mt) { + var fd = fs.openSync(path, constants.O_SYMLINK) + var ret + var threw = true + try { + ret = fs.futimesSync(fd, at, mt) + threw = false + } finally { + if (threw) { + try { + fs.closeSync(fd) + } catch (er) {} + } else { + fs.closeSync(fd) + } + } + return ret + } + + } else { + fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) } + fs.lutimesSync = function () {} + } +} + +function chmodFix (orig) { + if (!orig) return orig + return function (target, mode, cb) { + return orig.call(fs, target, mode, function (er) { + if (chownErOk(er)) er = null + if (cb) cb.apply(this, arguments) + }) + } +} + +function chmodFixSync (orig) { + if (!orig) return orig + return function (target, mode) { + try { + return orig.call(fs, target, mode) + } catch (er) { + if (!chownErOk(er)) throw er + } + } +} + + +function chownFix (orig) { + if (!orig) return orig + return function (target, uid, gid, cb) { + return orig.call(fs, target, uid, gid, function (er) { + if (chownErOk(er)) er = null + if (cb) cb.apply(this, arguments) + }) + } +} + +function chownFixSync (orig) { + if (!orig) return orig + return function (target, uid, gid) { + try { + return orig.call(fs, target, uid, gid) + } catch (er) { + if (!chownErOk(er)) throw er + } + } +} + + +function statFix (orig) { + if (!orig) return orig + // Older versions of Node erroneously returned signed integers for + // uid + gid. + return function (target, cb) { + return orig.call(fs, target, function (er, stats) { + if (!stats) return cb.apply(this, arguments) + if (stats.uid < 0) stats.uid += 0x100000000 + if (stats.gid < 0) stats.gid += 0x100000000 + if (cb) cb.apply(this, arguments) + }) + } +} + +function statFixSync (orig) { + if (!orig) return orig + // Older versions of Node erroneously returned signed integers for + // uid + gid. + return function (target) { + var stats = orig.call(fs, target) + if (stats.uid < 0) stats.uid += 0x100000000 + if (stats.gid < 0) stats.gid += 0x100000000 + return stats; + } +} + +// ENOSYS means that the fs doesn't support the op. Just ignore +// that, because it doesn't matter. +// +// if there's no getuid, or if getuid() is something other +// than 0, and the error is EINVAL or EPERM, then just ignore +// it. +// +// This specific case is a silent failure in cp, install, tar, +// and most other unix tools that manage permissions. +// +// When running as root, or if other types of errors are +// encountered, then it's strict. +function chownErOk (er) { + if (!er) + return true + + if (er.code === "ENOSYS") + return true + + var nonroot = !process.getuid || process.getuid() !== 0 + if (nonroot) { + if (er.code === "EINVAL" || er.code === "EPERM") + return true + } + + return false +} + +}).call(this,require('_process')) + +},{"./fs.js":284,"_process":317,"constants":107}],288:[function(require,module,exports){ +var hash = exports; + +hash.utils = require('./hash/utils'); +hash.common = require('./hash/common'); +hash.sha = require('./hash/sha'); +hash.ripemd = require('./hash/ripemd'); +hash.hmac = require('./hash/hmac'); + +// Proxy hash functions to the main object +hash.sha1 = hash.sha.sha1; +hash.sha256 = hash.sha.sha256; +hash.sha224 = hash.sha.sha224; +hash.sha384 = hash.sha.sha384; +hash.sha512 = hash.sha.sha512; +hash.ripemd160 = hash.ripemd.ripemd160; + +},{"./hash/common":289,"./hash/hmac":290,"./hash/ripemd":291,"./hash/sha":292,"./hash/utils":293}],289:[function(require,module,exports){ +var hash = require('../hash'); +var utils = hash.utils; +var assert = utils.assert; + +function BlockHash() { + this.pending = null; + this.pendingTotal = 0; + this.blockSize = this.constructor.blockSize; + this.outSize = this.constructor.outSize; + this.hmacStrength = this.constructor.hmacStrength; + this.padLength = this.constructor.padLength / 8; + this.endian = 'big'; + + this._delta8 = this.blockSize / 8; + this._delta32 = this.blockSize / 32; +} +exports.BlockHash = BlockHash; + +BlockHash.prototype.update = function update(msg, enc) { + // Convert message to array, pad it, and join into 32bit blocks + msg = utils.toArray(msg, enc); + if (!this.pending) + this.pending = msg; + else + this.pending = this.pending.concat(msg); + this.pendingTotal += msg.length; + + // Enough data, try updating + if (this.pending.length >= this._delta8) { + msg = this.pending; + + // Process pending data in blocks + var r = msg.length % this._delta8; + this.pending = msg.slice(msg.length - r, msg.length); + if (this.pending.length === 0) + this.pending = null; + + msg = utils.join32(msg, 0, msg.length - r, this.endian); + for (var i = 0; i < msg.length; i += this._delta32) + this._update(msg, i, i + this._delta32); + } + + return this; +}; + +BlockHash.prototype.digest = function digest(enc) { + this.update(this._pad()); + assert(this.pending === null); + + return this._digest(enc); +}; + +BlockHash.prototype._pad = function pad() { + var len = this.pendingTotal; + var bytes = this._delta8; + var k = bytes - ((len + this.padLength) % bytes); + var res = new Array(k + this.padLength); + res[0] = 0x80; + for (var i = 1; i < k; i++) + res[i] = 0; + + // Append length + len <<= 3; + if (this.endian === 'big') { + for (var t = 8; t < this.padLength; t++) + res[i++] = 0; + + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = (len >>> 24) & 0xff; + res[i++] = (len >>> 16) & 0xff; + res[i++] = (len >>> 8) & 0xff; + res[i++] = len & 0xff; + } else { + res[i++] = len & 0xff; + res[i++] = (len >>> 8) & 0xff; + res[i++] = (len >>> 16) & 0xff; + res[i++] = (len >>> 24) & 0xff; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + + for (var t = 8; t < this.padLength; t++) + res[i++] = 0; + } + + return res; +}; + +},{"../hash":288}],290:[function(require,module,exports){ +var hmac = exports; + +var hash = require('../hash'); +var utils = hash.utils; +var assert = utils.assert; + +function Hmac(hash, key, enc) { + if (!(this instanceof Hmac)) + return new Hmac(hash, key, enc); + this.Hash = hash; + this.blockSize = hash.blockSize / 8; + this.outSize = hash.outSize / 8; + this.inner = null; + this.outer = null; + + this._init(utils.toArray(key, enc)); +} +module.exports = Hmac; + +Hmac.prototype._init = function init(key) { + // Shorten key, if needed + if (key.length > this.blockSize) + key = new this.Hash().update(key).digest(); + assert(key.length <= this.blockSize); + + // Add padding to key + for (var i = key.length; i < this.blockSize; i++) + key.push(0); + + for (var i = 0; i < key.length; i++) + key[i] ^= 0x36; + this.inner = new this.Hash().update(key); + + // 0x36 ^ 0x5c = 0x6a + for (var i = 0; i < key.length; i++) + key[i] ^= 0x6a; + this.outer = new this.Hash().update(key); +}; + +Hmac.prototype.update = function update(msg, enc) { + this.inner.update(msg, enc); + return this; +}; + +Hmac.prototype.digest = function digest(enc) { + this.outer.update(this.inner.digest()); + return this.outer.digest(enc); +}; + +},{"../hash":288}],291:[function(require,module,exports){ +var hash = require('../hash'); +var utils = hash.utils; + +var rotl32 = utils.rotl32; +var sum32 = utils.sum32; +var sum32_3 = utils.sum32_3; +var sum32_4 = utils.sum32_4; +var BlockHash = hash.common.BlockHash; + +function RIPEMD160() { + if (!(this instanceof RIPEMD160)) + return new RIPEMD160(); + + BlockHash.call(this); + + this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ]; + this.endian = 'little'; +} +utils.inherits(RIPEMD160, BlockHash); +exports.ripemd160 = RIPEMD160; + +RIPEMD160.blockSize = 512; +RIPEMD160.outSize = 160; +RIPEMD160.hmacStrength = 192; +RIPEMD160.padLength = 64; + +RIPEMD160.prototype._update = function update(msg, start) { + var A = this.h[0]; + var B = this.h[1]; + var C = this.h[2]; + var D = this.h[3]; + var E = this.h[4]; + var Ah = A; + var Bh = B; + var Ch = C; + var Dh = D; + var Eh = E; + for (var j = 0; j < 80; j++) { + var T = sum32( + rotl32( + sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), + s[j]), + E); + A = E; + E = D; + D = rotl32(C, 10); + C = B; + B = T; + T = sum32( + rotl32( + sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), + sh[j]), + Eh); + Ah = Eh; + Eh = Dh; + Dh = rotl32(Ch, 10); + Ch = Bh; + Bh = T; + } + T = sum32_3(this.h[1], C, Dh); + this.h[1] = sum32_3(this.h[2], D, Eh); + this.h[2] = sum32_3(this.h[3], E, Ah); + this.h[3] = sum32_3(this.h[4], A, Bh); + this.h[4] = sum32_3(this.h[0], B, Ch); + this.h[0] = T; +}; + +RIPEMD160.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'little'); + else + return utils.split32(this.h, 'little'); +}; + +function f(j, x, y, z) { + if (j <= 15) + return x ^ y ^ z; + else if (j <= 31) + return (x & y) | ((~x) & z); + else if (j <= 47) + return (x | (~y)) ^ z; + else if (j <= 63) + return (x & z) | (y & (~z)); + else + return x ^ (y | (~z)); +} + +function K(j) { + if (j <= 15) + return 0x00000000; + else if (j <= 31) + return 0x5a827999; + else if (j <= 47) + return 0x6ed9eba1; + else if (j <= 63) + return 0x8f1bbcdc; + else + return 0xa953fd4e; +} + +function Kh(j) { + if (j <= 15) + return 0x50a28be6; + else if (j <= 31) + return 0x5c4dd124; + else if (j <= 47) + return 0x6d703ef3; else if (j <= 63) return 0x7a6d76e9; else @@ -29074,7 +32794,7 @@ var sh = [ 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]; -},{"../hash":249}],253:[function(require,module,exports){ +},{"../hash":288}],292:[function(require,module,exports){ var hash = require('../hash'); var utils = hash.utils; var assert = utils.assert; @@ -29640,7 +33360,7 @@ function g1_512_lo(xh, xl) { return r; } -},{"../hash":249}],254:[function(require,module,exports){ +},{"../hash":288}],293:[function(require,module,exports){ var utils = exports; var inherits = require('inherits'); @@ -29899,7 +33619,7 @@ function shr64_lo(ah, al, num) { }; exports.shr64_lo = shr64_lo; -},{"inherits":258}],255:[function(require,module,exports){ +},{"inherits":297}],294:[function(require,module,exports){ 'use strict'; var hash = require('hash.js'); @@ -30014,7 +33734,7 @@ HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { return utils.encode(res, enc); }; -},{"hash.js":249,"minimalistic-assert":263,"minimalistic-crypto-utils":264}],256:[function(require,module,exports){ +},{"hash.js":288,"minimalistic-assert":305,"minimalistic-crypto-utils":306}],295:[function(require,module,exports){ exports.read = function (buffer, offset, isLE, mLen, nBytes) { var e, m var eLen = nBytes * 8 - mLen - 1 @@ -30100,7 +33820,7 @@ exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { buffer[offset + i - d] |= s * 128 } -},{}],257:[function(require,module,exports){ +},{}],296:[function(require,module,exports){ var indexOf = [].indexOf; @@ -30111,7 +33831,7 @@ module.exports = function(arr, obj){ } return -1; }; -},{}],258:[function(require,module,exports){ +},{}],297:[function(require,module,exports){ if (typeof Object.create === 'function') { // implementation from standard node.js 'util' module module.exports = function inherits(ctor, superCtor) { @@ -30136,7 +33856,7 @@ if (typeof Object.create === 'function') { } } -},{}],259:[function(require,module,exports){ +},{}],298:[function(require,module,exports){ /*! * Determine if an object is a Buffer * @@ -30159,14 +33879,229 @@ function isSlowBuffer (obj) { return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0)) } -},{}],260:[function(require,module,exports){ +},{}],299:[function(require,module,exports){ var toString = {}.toString; module.exports = Array.isArray || function (arr) { return toString.call(arr) == '[object Array]'; }; -},{}],261:[function(require,module,exports){ +},{}],300:[function(require,module,exports){ +(function (Buffer){ +var _fs +try { + _fs = require('graceful-fs') +} catch (_) { + _fs = require('fs') +} + +function readFile (file, options, callback) { + if (callback == null) { + callback = options + options = {} + } + + if (typeof options === 'string') { + options = {encoding: options} + } + + options = options || {} + var fs = options.fs || _fs + + var shouldThrow = true + // DO NOT USE 'passParsingErrors' THE NAME WILL CHANGE!!!, use 'throws' instead + if ('passParsingErrors' in options) { + shouldThrow = options.passParsingErrors + } else if ('throws' in options) { + shouldThrow = options.throws + } + + fs.readFile(file, options, function (err, data) { + if (err) return callback(err) + + data = stripBom(data) + + var obj + try { + obj = JSON.parse(data, options ? options.reviver : null) + } catch (err2) { + if (shouldThrow) { + err2.message = file + ': ' + err2.message + return callback(err2) + } else { + return callback(null, null) + } + } + + callback(null, obj) + }) +} + +function readFileSync (file, options) { + options = options || {} + if (typeof options === 'string') { + options = {encoding: options} + } + + var fs = options.fs || _fs + + var shouldThrow = true + // DO NOT USE 'passParsingErrors' THE NAME WILL CHANGE!!!, use 'throws' instead + if ('passParsingErrors' in options) { + shouldThrow = options.passParsingErrors + } else if ('throws' in options) { + shouldThrow = options.throws + } + + var content = fs.readFileSync(file, options) + content = stripBom(content) + + try { + return JSON.parse(content, options.reviver) + } catch (err) { + if (shouldThrow) { + err.message = file + ': ' + err.message + throw err + } else { + return null + } + } +} + +function writeFile (file, obj, options, callback) { + if (callback == null) { + callback = options + options = {} + } + options = options || {} + var fs = options.fs || _fs + + var spaces = typeof options === 'object' && options !== null + ? 'spaces' in options + ? options.spaces : this.spaces + : this.spaces + + var str = '' + try { + str = JSON.stringify(obj, options ? options.replacer : null, spaces) + '\n' + } catch (err) { + if (callback) return callback(err, null) + } + + fs.writeFile(file, str, options, callback) +} + +function writeFileSync (file, obj, options) { + options = options || {} + var fs = options.fs || _fs + + var spaces = typeof options === 'object' && options !== null + ? 'spaces' in options + ? options.spaces : this.spaces + : this.spaces + + var str = JSON.stringify(obj, options.replacer, spaces) + '\n' + // not sure if fs.writeFileSync returns anything, but just in case + return fs.writeFileSync(file, str, options) +} + +function stripBom (content) { + // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified + if (Buffer.isBuffer(content)) content = content.toString('utf8') + content = content.replace(/^\uFEFF/, '') + return content +} + +var jsonfile = { + spaces: null, + readFile: readFile, + readFileSync: readFileSync, + writeFile: writeFile, + writeFileSync: writeFileSync +} + +module.exports = jsonfile + +}).call(this,{"isBuffer":require("../is-buffer/index.js")}) + +},{"../is-buffer/index.js":298,"fs":102,"graceful-fs":285}],301:[function(require,module,exports){ +// simple mutable assign (extracted from fs-extra) +// I really like object-assign package, but I wanted a lean package with zero deps +function _assign () { + var args = [].slice.call(arguments).filter(function (i) { return i }) + var dest = args.shift() + args.forEach(function (src) { + Object.keys(src).forEach(function (key) { + dest[key] = src[key] + }) + }) + + return dest +} + +// thank you baby Jesus for Node v4 and Object.assign +module.exports = Object.assign || _assign + +},{}],302:[function(require,module,exports){ +var assert = require('assert') +var fs +try { + fs = require('graceful-fs') +} catch (e) { + fs = require('fs') +} +var path = require('path') +var Readable = require('stream').Readable +var util = require('util') +var assign = require('./assign') + +function Walker (dir, options) { + assert.strictEqual(typeof dir, 'string', '`dir` parameter should be of type string. Got type: ' + typeof dir) + var defaultStreamOptions = { objectMode: true } + var defaultOpts = { queueMethod: 'shift', pathSorter: undefined, filter: undefined } + options = assign(defaultOpts, options, defaultStreamOptions) + + Readable.call(this, options) + this.root = path.resolve(dir) + this.paths = [this.root] + this.options = options + this.fs = options.fs || fs // mock-fs +} +util.inherits(Walker, Readable) + +Walker.prototype._read = function () { + if (this.paths.length === 0) return this.push(null) + var self = this + var pathItem = this.paths[this.options.queueMethod]() + + self.fs.lstat(pathItem, function (err, stats) { + var item = { path: pathItem, stats: stats } + if (err) return self.emit('error', err, item) + if (!stats.isDirectory()) return self.push(item) + + self.fs.readdir(pathItem, function (err, pathItems) { + if (err) { + self.push(item) + return self.emit('error', err, item) + } + + pathItems = pathItems.map(function (part) { return path.join(pathItem, part) }) + if (self.options.filter) pathItems = pathItems.filter(self.options.filter) + if (self.options.pathSorter) pathItems.sort(self.options.pathSorter) + pathItems.forEach(function (pi) { self.paths.push(pi) }) + + self.push(item) + }) + }) +} + +function walk (root, options) { + return new Walker(root, options) +} + +module.exports = walk + +},{"./assign":301,"assert":52,"fs":102,"graceful-fs":285,"path":313,"stream":345,"util":350}],303:[function(require,module,exports){ (function (global){ "use strict"; @@ -30827,7 +34762,7 @@ exports.install = function install(target, now, toFake, loopLimit) { }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],262:[function(require,module,exports){ +},{}],304:[function(require,module,exports){ var bn = require('bn.js'); var brorand = require('brorand'); @@ -30942,7 +34877,7 @@ MillerRabin.prototype.getDivisor = function getDivisor(n, k) { return false; }; -},{"bn.js":71,"brorand":72}],263:[function(require,module,exports){ +},{"bn.js":75,"brorand":76}],305:[function(require,module,exports){ module.exports = assert; function assert(val, msg) { @@ -30955,7 +34890,7 @@ assert.equal = function assertEqual(l, r, msg) { throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r)); }; -},{}],264:[function(require,module,exports){ +},{}],306:[function(require,module,exports){ 'use strict'; var utils = exports; @@ -31015,7 +34950,7 @@ utils.encode = function encode(arr, enc) { return arr; }; -},{}],265:[function(require,module,exports){ +},{}],307:[function(require,module,exports){ exports.endianness = function () { return 'LE' }; exports.hostname = function () { @@ -31062,7 +34997,7 @@ exports.tmpdir = exports.tmpDir = function () { exports.EOL = '\n'; -},{}],266:[function(require,module,exports){ +},{}],308:[function(require,module,exports){ module.exports={"2.16.840.1.101.3.4.1.1": "aes-128-ecb", "2.16.840.1.101.3.4.1.2": "aes-128-cbc", "2.16.840.1.101.3.4.1.3": "aes-128-ofb", @@ -31076,7 +35011,7 @@ module.exports={"2.16.840.1.101.3.4.1.1": "aes-128-ecb", "2.16.840.1.101.3.4.1.43": "aes-256-ofb", "2.16.840.1.101.3.4.1.44": "aes-256-cfb" } -},{}],267:[function(require,module,exports){ +},{}],309:[function(require,module,exports){ // from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js // Fedor, you are amazing. 'use strict' @@ -31200,7 +35135,7 @@ exports.signature = asn1.define('signature', function () { ) }) -},{"./certificate":268,"asn1.js":36}],268:[function(require,module,exports){ +},{"./certificate":310,"asn1.js":38}],310:[function(require,module,exports){ // from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js // thanks to @Rantanen @@ -31290,7 +35225,7 @@ var X509Certificate = asn.define('X509Certificate', function () { module.exports = X509Certificate -},{"asn1.js":36}],269:[function(require,module,exports){ +},{"asn1.js":38}],311:[function(require,module,exports){ (function (Buffer){ // adapted from https://github.com/apatil/pemstrip var findProc = /Proc-Type: 4,ENCRYPTED\n\r?DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)\n\r?\n\r?([0-9A-z\n\r\+\/\=]+)\n\r?/m @@ -31325,7 +35260,7 @@ module.exports = function (okey, password) { }).call(this,require("buffer").Buffer) -},{"browserify-aes":76,"buffer":101,"evp_bytestokey":248}],270:[function(require,module,exports){ +},{"browserify-aes":80,"buffer":105,"evp_bytestokey":253}],312:[function(require,module,exports){ (function (Buffer){ var asn1 = require('./asn1') var aesid = require('./aesid.json') @@ -31436,7 +35371,7 @@ function decrypt (data, password) { }).call(this,require("buffer").Buffer) -},{"./aesid.json":266,"./asn1":267,"./fixProc":269,"browserify-aes":76,"buffer":101,"pbkdf2":272}],271:[function(require,module,exports){ +},{"./aesid.json":308,"./asn1":309,"./fixProc":311,"browserify-aes":80,"buffer":105,"pbkdf2":314}],313:[function(require,module,exports){ (function (process){ // Copyright Joyent, Inc. and other Node contributors. // @@ -31665,7 +35600,7 @@ var substr = 'ab'.substr(-1) === 'b' }).call(this,require('_process')) -},{"_process":275}],272:[function(require,module,exports){ +},{"_process":317}],314:[function(require,module,exports){ (function (process,Buffer){ var createHmac = require('create-hmac') var checkParameters = require('./precondition') @@ -31738,7 +35673,7 @@ exports.pbkdf2Sync = function (password, salt, iterations, keylen, digest) { }).call(this,require('_process'),require("buffer").Buffer) -},{"./precondition":273,"_process":275,"buffer":101,"create-hmac":219}],273:[function(require,module,exports){ +},{"./precondition":315,"_process":317,"buffer":105,"create-hmac":224}],315:[function(require,module,exports){ var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs module.exports = function (iterations, keylen) { if (typeof iterations !== 'number') { @@ -31758,7 +35693,7 @@ module.exports = function (iterations, keylen) { } } -},{}],274:[function(require,module,exports){ +},{}],316:[function(require,module,exports){ (function (process){ 'use strict'; @@ -31806,7 +35741,7 @@ function nextTick(fn, arg1, arg2, arg3) { }).call(this,require('_process')) -},{"_process":275}],275:[function(require,module,exports){ +},{"_process":317}],317:[function(require,module,exports){ // shim for using process in browser var process = module.exports = {}; @@ -31988,7 +35923,7 @@ process.chdir = function (dir) { }; process.umask = function() { return 0; }; -},{}],276:[function(require,module,exports){ +},{}],318:[function(require,module,exports){ exports.publicEncrypt = require('./publicEncrypt'); exports.privateDecrypt = require('./privateDecrypt'); @@ -31999,7 +35934,7 @@ exports.privateEncrypt = function privateEncrypt(key, buf) { exports.publicDecrypt = function publicDecrypt(key, buf) { return exports.privateDecrypt(key, buf, true); }; -},{"./privateDecrypt":278,"./publicEncrypt":279}],277:[function(require,module,exports){ +},{"./privateDecrypt":320,"./publicEncrypt":321}],319:[function(require,module,exports){ (function (Buffer){ var createHash = require('create-hash'); module.exports = function (seed, len) { @@ -32019,7 +35954,7 @@ function i2ops(c) { } }).call(this,require("buffer").Buffer) -},{"buffer":101,"create-hash":216}],278:[function(require,module,exports){ +},{"buffer":105,"create-hash":221}],320:[function(require,module,exports){ (function (Buffer){ var parseKeys = require('parse-asn1'); var mgf = require('./mgf'); @@ -32131,7 +36066,7 @@ function compare(a, b){ } }).call(this,require("buffer").Buffer) -},{"./mgf":277,"./withPublic":280,"./xor":281,"bn.js":71,"browserify-rsa":92,"buffer":101,"create-hash":216,"parse-asn1":270}],279:[function(require,module,exports){ +},{"./mgf":319,"./withPublic":322,"./xor":323,"bn.js":75,"browserify-rsa":96,"buffer":105,"create-hash":221,"parse-asn1":312}],321:[function(require,module,exports){ (function (Buffer){ var parseKeys = require('parse-asn1'); var randomBytes = require('randombytes'); @@ -32230,7 +36165,7 @@ function nonZero(len, crypto) { } }).call(this,require("buffer").Buffer) -},{"./mgf":277,"./withPublic":280,"./xor":281,"bn.js":71,"browserify-rsa":92,"buffer":101,"create-hash":216,"parse-asn1":270,"randombytes":282}],280:[function(require,module,exports){ +},{"./mgf":319,"./withPublic":322,"./xor":323,"bn.js":75,"browserify-rsa":96,"buffer":105,"create-hash":221,"parse-asn1":312,"randombytes":324}],322:[function(require,module,exports){ (function (Buffer){ var bn = require('bn.js'); function withPublic(paddedMsg, key) { @@ -32244,7 +36179,7 @@ function withPublic(paddedMsg, key) { module.exports = withPublic; }).call(this,require("buffer").Buffer) -},{"bn.js":71,"buffer":101}],281:[function(require,module,exports){ +},{"bn.js":75,"buffer":105}],323:[function(require,module,exports){ module.exports = function xor(a, b) { var len = a.length; var i = -1; @@ -32253,7 +36188,7 @@ module.exports = function xor(a, b) { } return a }; -},{}],282:[function(require,module,exports){ +},{}],324:[function(require,module,exports){ (function (process,global,Buffer){ 'use strict' @@ -32294,10 +36229,10 @@ function randomBytes (size, cb) { }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) -},{"_process":275,"buffer":101}],283:[function(require,module,exports){ +},{"_process":317,"buffer":105}],325:[function(require,module,exports){ module.exports = require("./lib/_stream_duplex.js") -},{"./lib/_stream_duplex.js":284}],284:[function(require,module,exports){ +},{"./lib/_stream_duplex.js":326}],326:[function(require,module,exports){ // a duplex stream is just a stream that is both readable and writable. // Since JS doesn't have multiple prototypal inheritance, this class // prototypally inherits from Readable, and then parasitically from @@ -32373,7 +36308,7 @@ function forEach(xs, f) { f(xs[i], i); } } -},{"./_stream_readable":286,"./_stream_writable":288,"core-util-is":214,"inherits":258,"process-nextick-args":274}],285:[function(require,module,exports){ +},{"./_stream_readable":328,"./_stream_writable":330,"core-util-is":219,"inherits":297,"process-nextick-args":316}],327:[function(require,module,exports){ // a passthrough stream. // basically just the most minimal sort of Transform stream. // Every written chunk gets output as-is. @@ -32400,7 +36335,7 @@ function PassThrough(options) { PassThrough.prototype._transform = function (chunk, encoding, cb) { cb(null, chunk); }; -},{"./_stream_transform":287,"core-util-is":214,"inherits":258}],286:[function(require,module,exports){ +},{"./_stream_transform":329,"core-util-is":219,"inherits":297}],328:[function(require,module,exports){ (function (process){ 'use strict'; @@ -33345,7 +37280,7 @@ function indexOf(xs, x) { } }).call(this,require('_process')) -},{"./_stream_duplex":284,"./internal/streams/BufferList":289,"_process":275,"buffer":101,"buffer-shims":99,"core-util-is":214,"events":247,"inherits":258,"isarray":260,"process-nextick-args":274,"string_decoder/":304,"util":73}],287:[function(require,module,exports){ +},{"./_stream_duplex":326,"./internal/streams/BufferList":331,"_process":317,"buffer":105,"buffer-shims":103,"core-util-is":219,"events":252,"inherits":297,"isarray":299,"process-nextick-args":316,"string_decoder/":346,"util":77}],329:[function(require,module,exports){ // a transform stream is a readable/writable stream where you do // something with the data. Sometimes it's called a "filter", // but that's not a great name for it, since that implies a thing where @@ -33528,7 +37463,7 @@ function done(stream, er, data) { return stream.push(null); } -},{"./_stream_duplex":284,"core-util-is":214,"inherits":258}],288:[function(require,module,exports){ +},{"./_stream_duplex":326,"core-util-is":219,"inherits":297}],330:[function(require,module,exports){ (function (process){ // A bit simpler than readable streams. // Implement an async ._write(chunk, encoding, cb), and it'll handle all @@ -34083,7 +38018,7 @@ function CorkedRequest(state) { } }).call(this,require('_process')) -},{"./_stream_duplex":284,"_process":275,"buffer":101,"buffer-shims":99,"core-util-is":214,"events":247,"inherits":258,"process-nextick-args":274,"util-deprecate":305}],289:[function(require,module,exports){ +},{"./_stream_duplex":326,"_process":317,"buffer":105,"buffer-shims":103,"core-util-is":219,"events":252,"inherits":297,"process-nextick-args":316,"util-deprecate":347}],331:[function(require,module,exports){ 'use strict'; var Buffer = require('buffer').Buffer; @@ -34148,10 +38083,10 @@ BufferList.prototype.concat = function (n) { } return ret; }; -},{"buffer":101,"buffer-shims":99}],290:[function(require,module,exports){ +},{"buffer":105,"buffer-shims":103}],332:[function(require,module,exports){ module.exports = require("./lib/_stream_passthrough.js") -},{"./lib/_stream_passthrough.js":285}],291:[function(require,module,exports){ +},{"./lib/_stream_passthrough.js":327}],333:[function(require,module,exports){ (function (process){ var Stream = (function (){ try { @@ -34172,13 +38107,13 @@ if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) { }).call(this,require('_process')) -},{"./lib/_stream_duplex.js":284,"./lib/_stream_passthrough.js":285,"./lib/_stream_readable.js":286,"./lib/_stream_transform.js":287,"./lib/_stream_writable.js":288,"_process":275}],292:[function(require,module,exports){ +},{"./lib/_stream_duplex.js":326,"./lib/_stream_passthrough.js":327,"./lib/_stream_readable.js":328,"./lib/_stream_transform.js":329,"./lib/_stream_writable.js":330,"_process":317}],334:[function(require,module,exports){ module.exports = require("./lib/_stream_transform.js") -},{"./lib/_stream_transform.js":287}],293:[function(require,module,exports){ +},{"./lib/_stream_transform.js":329}],335:[function(require,module,exports){ module.exports = require("./lib/_stream_writable.js") -},{"./lib/_stream_writable.js":288}],294:[function(require,module,exports){ +},{"./lib/_stream_writable.js":330}],336:[function(require,module,exports){ (function (Buffer){ /* CryptoJS v3.1.2 @@ -34393,7 +38328,7 @@ module.exports = ripemd160 }).call(this,require("buffer").Buffer) -},{"buffer":101}],295:[function(require,module,exports){ +},{"buffer":105}],337:[function(require,module,exports){ (function (Buffer){ // prototype class for hash functions function Hash (blockSize, finalSize) { @@ -34467,7 +38402,7 @@ module.exports = Hash }).call(this,require("buffer").Buffer) -},{"buffer":101}],296:[function(require,module,exports){ +},{"buffer":105}],338:[function(require,module,exports){ var exports = module.exports = function SHA (algorithm) { algorithm = algorithm.toLowerCase() @@ -34484,7 +38419,7 @@ exports.sha256 = require('./sha256') exports.sha384 = require('./sha384') exports.sha512 = require('./sha512') -},{"./sha":297,"./sha1":298,"./sha224":299,"./sha256":300,"./sha384":301,"./sha512":302}],297:[function(require,module,exports){ +},{"./sha":339,"./sha1":340,"./sha224":341,"./sha256":342,"./sha384":343,"./sha512":344}],339:[function(require,module,exports){ (function (Buffer){ /* * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined @@ -34582,7 +38517,7 @@ module.exports = Sha }).call(this,require("buffer").Buffer) -},{"./hash":295,"buffer":101,"inherits":258}],298:[function(require,module,exports){ +},{"./hash":337,"buffer":105,"inherits":297}],340:[function(require,module,exports){ (function (Buffer){ /* * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined @@ -34685,7 +38620,7 @@ module.exports = Sha1 }).call(this,require("buffer").Buffer) -},{"./hash":295,"buffer":101,"inherits":258}],299:[function(require,module,exports){ +},{"./hash":337,"buffer":105,"inherits":297}],341:[function(require,module,exports){ (function (Buffer){ /** * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined @@ -34742,7 +38677,7 @@ module.exports = Sha224 }).call(this,require("buffer").Buffer) -},{"./hash":295,"./sha256":300,"buffer":101,"inherits":258}],300:[function(require,module,exports){ +},{"./hash":337,"./sha256":342,"buffer":105,"inherits":297}],342:[function(require,module,exports){ (function (Buffer){ /** * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined @@ -34881,7 +38816,7 @@ module.exports = Sha256 }).call(this,require("buffer").Buffer) -},{"./hash":295,"buffer":101,"inherits":258}],301:[function(require,module,exports){ +},{"./hash":337,"buffer":105,"inherits":297}],343:[function(require,module,exports){ (function (Buffer){ var inherits = require('inherits') var SHA512 = require('./sha512') @@ -34942,7 +38877,7 @@ module.exports = Sha384 }).call(this,require("buffer").Buffer) -},{"./hash":295,"./sha512":302,"buffer":101,"inherits":258}],302:[function(require,module,exports){ +},{"./hash":337,"./sha512":344,"buffer":105,"inherits":297}],344:[function(require,module,exports){ (function (Buffer){ var inherits = require('inherits') var Hash = require('./hash') @@ -35206,7 +39141,7 @@ module.exports = Sha512 }).call(this,require("buffer").Buffer) -},{"./hash":295,"buffer":101,"inherits":258}],303:[function(require,module,exports){ +},{"./hash":337,"buffer":105,"inherits":297}],345:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -35335,7 +39270,7 @@ Stream.prototype.pipe = function(dest, options) { return dest; }; -},{"events":247,"inherits":258,"readable-stream/duplex.js":283,"readable-stream/passthrough.js":290,"readable-stream/readable.js":291,"readable-stream/transform.js":292,"readable-stream/writable.js":293}],304:[function(require,module,exports){ +},{"events":252,"inherits":297,"readable-stream/duplex.js":325,"readable-stream/passthrough.js":332,"readable-stream/readable.js":333,"readable-stream/transform.js":334,"readable-stream/writable.js":335}],346:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -35558,7 +39493,7 @@ function base64DetectIncompleteChar(buffer) { this.charLength = this.charReceived ? 3 : 0; } -},{"buffer":101}],305:[function(require,module,exports){ +},{"buffer":105}],347:[function(require,module,exports){ (function (global){ /** @@ -35630,7 +39565,607 @@ function config (name) { }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],306:[function(require,module,exports){ +},{}],348:[function(require,module,exports){ +arguments[4][297][0].apply(exports,arguments) +},{"dup":297}],349:[function(require,module,exports){ +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' + && typeof arg.copy === 'function' + && typeof arg.fill === 'function' + && typeof arg.readUInt8 === 'function'; +} +},{}],350:[function(require,module,exports){ +(function (process,global){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var formatRegExp = /%[sdj%]/g; +exports.format = function(f) { + if (!isString(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; +}; + + +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function(fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(global.process)) { + return function() { + return exports.deprecate(fn, msg).apply(this, arguments); + }; + } + + if (process.noDeprecation === true) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +}; + + +var debugs = {}; +var debugEnviron; +exports.debuglog = function(set) { + if (isUndefined(debugEnviron)) + debugEnviron = process.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = process.pid; + debugs[set] = function() { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function() {}; + } + } + return debugs[set]; +}; + + +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); +} +exports.inspect = inspect; + + +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +inspect.colors = { + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] +}; + +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; + + +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } +} + + +function stylizeNoColor(str, styleType) { + return str; +} + + +function arrayToHash(array) { + var hash = {}; + + array.forEach(function(val, idx) { + hash[val] = true; + }); + + return hash; +} + + +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } + + var base = '', array = false, braces = ['{', '}']; + + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } + + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + + ctx.seen.push(value); + + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + + ctx.seen.pop(); + + return reduceToSingleString(output, base, braces); +} + + +function formatPrimitive(ctx, value) { + if (isUndefined(value)) + return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) + return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) + return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) + return ctx.stylize('null', 'null'); +} + + +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; +} + + +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; +} + + +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + + return name + ': ' + str; +} + + +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + } + + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} + + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(ar) { + return Array.isArray(ar); +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return isObject(e) && + (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = require('./support/isBuffer'); + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + + +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} + + +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; + +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} + + +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function() { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +}; + + +/** + * Inherit the prototype methods from one constructor into another. + * + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). + * + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. + */ +exports.inherits = require('inherits'); + +exports._extend = function(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; +}; + +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./support/isBuffer":349,"_process":317,"inherits":348}],351:[function(require,module,exports){ var indexOf = require('indexof'); var Object_keys = function (obj) { @@ -35770,13 +40305,13 @@ exports.createContext = Script.createContext = function (context) { return copy; }; -},{"indexof":257}],307:[function(require,module,exports){ +},{"indexof":296}],352:[function(require,module,exports){ arguments[4][1][0].apply(exports,arguments) -},{"./lib/encoding.js":309,"dup":1}],308:[function(require,module,exports){ +},{"./lib/encoding.js":354,"dup":1}],353:[function(require,module,exports){ arguments[4][2][0].apply(exports,arguments) -},{"dup":2}],309:[function(require,module,exports){ +},{"dup":2}],354:[function(require,module,exports){ arguments[4][3][0].apply(exports,arguments) -},{"./encoding-indexes.js":308,"dup":3}],310:[function(require,module,exports){ +},{"./encoding-indexes.js":353,"dup":3}],355:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -35882,7 +40417,13 @@ var Driver = function () { this._token = token; this._config = config; this._pool = new _pool2.default(this._createConnection.bind(this), this._destroyConnection.bind(this), Driver._validateConnection.bind(this), config.connectionPoolSize); - this._connectionProvider = this._createConnectionProvider(url, this._pool, this._driverOnErrorCallback.bind(this)); + + /** + * Reference to the connection provider. Initialized lazily by {@link _getOrCreateConnectionProvider}. + * @type {ConnectionProvider} + * @private + */ + this._connectionProvider = null; } /** @@ -35896,7 +40437,7 @@ var Driver = function () { key: '_createConnection', value: function _createConnection(url, release) { var sessionId = this._sessionIdGenerator++; - var conn = (0, _connector.connect)(url, this._config); + var conn = (0, _connector.connect)(url, this._config, this._connectionErrorCode()); var streamObserver = new _ConnectionStreamObserver(this, conn); conn.initialize(this._userAgent, this._token, streamObserver); conn._id = sessionId; @@ -35949,24 +40490,43 @@ var Driver = function () { key: 'session', value: function session(mode, bookmark) { var sessionMode = Driver._validateSessionMode(mode); - return this._createSession(sessionMode, this._connectionProvider, bookmark, this._config); + var connectionProvider = this._getOrCreateConnectionProvider(); + return this._createSession(sessionMode, connectionProvider, bookmark, this._config); } }, { key: '_createConnectionProvider', - //Extension point + // Extension point value: function _createConnectionProvider(address, connectionPool, driverOnErrorCallback) { return new _connectionProviders.DirectConnectionProvider(address, connectionPool, driverOnErrorCallback); } - //Extension point + // Extension point }, { key: '_createSession', value: function _createSession(mode, connectionProvider, bookmark, config) { return new _session2.default(mode, connectionProvider, bookmark, config); } + + // Extension point + + }, { + key: '_connectionErrorCode', + value: function _connectionErrorCode() { + // connection errors might result in different error codes depending on the driver + return _error.SERVICE_UNAVAILABLE; + } + }, { + key: '_getOrCreateConnectionProvider', + value: function _getOrCreateConnectionProvider() { + if (!this._connectionProvider) { + var driverOnErrorCallback = this._driverOnErrorCallback.bind(this); + this._connectionProvider = this._createConnectionProvider(this._url, this._pool, driverOnErrorCallback); + } + return this._connectionProvider; + } }, { key: '_driverOnErrorCallback', value: function _driverOnErrorCallback(error) { @@ -36046,8 +40606,9 @@ var _ConnectionStreamObserver = function (_StreamObserver) { if (this._driver.onCompleted) { this._driver.onCompleted(message); } - if (this._conn && message && message.server) { - this._conn.setServerVersion(message.server); + + if (this._observer && this._observer.onComplete) { + this._observer.onCompleted(message); } } }]); @@ -36059,7 +40620,7 @@ exports.READ = READ; exports.WRITE = WRITE; exports.default = Driver; -},{"./error":311,"./internal/connection-providers":321,"./internal/connector":322,"./internal/pool":327,"./internal/stream-observer":331,"./session":339,"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/get":65,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67}],311:[function(require,module,exports){ +},{"./error":356,"./internal/connection-providers":367,"./internal/connector":368,"./internal/pool":372,"./internal/stream-observer":378,"./session":386,"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/get":69,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71}],356:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -36142,7 +40703,7 @@ exports.SERVICE_UNAVAILABLE = SERVICE_UNAVAILABLE; exports.SESSION_EXPIRED = SESSION_EXPIRED; exports.PROTOCOL_ERROR = PROTOCOL_ERROR; -},{"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67}],312:[function(require,module,exports){ +},{"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71}],357:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -36373,7 +40934,7 @@ exports.UnboundRelationship = UnboundRelationship; exports.Path = Path; exports.PathSegment = PathSegment; -},{"babel-runtime/core-js/json/stringify":51,"babel-runtime/core-js/object/keys":57,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],313:[function(require,module,exports){ +},{"babel-runtime/core-js/json/stringify":54,"babel-runtime/core-js/object/keys":60,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],358:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -36409,51 +40970,59 @@ var _version = require('../version'); var _version2 = _interopRequireDefault(_version); -var _connector = require('./internal/connector'); - var _util = require('./internal/util'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + var auth = { basic: function basic(username, password) { var realm = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; if (realm) { - return { scheme: "basic", principal: username, credentials: password, realm: realm }; + return { scheme: 'basic', principal: username, credentials: password, realm: realm }; } else { - return { scheme: "basic", principal: username, credentials: password }; + return { scheme: 'basic', principal: username, credentials: password }; } }, + kerberos: function kerberos(base64EncodedTicket) { + return { + scheme: 'kerberos', + principal: '', // This empty string is required for backwards compatibility. + credentials: base64EncodedTicket + }; + }, custom: function custom(principal, credentials, realm, scheme) { var parameters = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined; if (parameters) { - return { scheme: scheme, principal: principal, credentials: credentials, realm: realm, - parameters: parameters }; + return { + scheme: scheme, principal: principal, credentials: credentials, realm: realm, + parameters: parameters + }; } else { return { scheme: scheme, principal: principal, credentials: credentials, realm: realm }; } } -}; /** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +}; var USER_AGENT = "neo4j-javascript/" + _version2.default; /** @@ -36528,13 +41097,17 @@ function driver(url, authToken) { var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; (0, _util.assertString)(url, 'Bolt URL'); - var scheme = (0, _connector.parseScheme)(url); - if (scheme === "bolt+routing://") { - return new _routingDriver2.default((0, _connector.parseUrl)(url), USER_AGENT, authToken, config); - } else if (scheme === "bolt://") { - return new _driver.Driver((0, _connector.parseUrl)(url), USER_AGENT, authToken, config); + var scheme = (0, _util.parseScheme)(url); + var routingContext = (0, _util.parseRoutingContext)(url); + if (scheme === 'bolt+routing://') { + return new _routingDriver2.default((0, _util.parseUrl)(url), routingContext, USER_AGENT, authToken, config); + } else if (scheme === 'bolt://') { + if (!(0, _util.isEmptyObjectOrNull)(routingContext)) { + throw new Error('Parameters are not supported with scheme \'bolt\'. Given URL: \'' + url + '\''); + } + return new _driver.Driver((0, _util.parseUrl)(url), USER_AGENT, authToken, config); } else { - throw new Error("Unknown scheme: " + scheme); + throw new Error('Unknown scheme: ' + scheme); } } @@ -36587,7 +41160,7 @@ exports.session = session; exports.error = error; exports.default = forExport; -},{"../version":341,"./driver":310,"./error":311,"./graph-types":312,"./integer":314,"./internal/connector":322,"./internal/util":334,"./record":335,"./result":337,"./result-summary":336,"./routing-driver":338}],314:[function(require,module,exports){ +},{"../version":388,"./driver":355,"./error":356,"./graph-types":357,"./integer":359,"./internal/util":381,"./record":382,"./result":384,"./result-summary":383,"./routing-driver":385}],359:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -37568,7 +42141,7 @@ exports.toNumber = toNumber; exports.toString = toString; exports.default = Integer; -},{"./error":311,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],315:[function(require,module,exports){ +},{"./error":356,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],360:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -38356,7 +42929,96 @@ exports.CombinedBuffer = CombinedBuffer; exports.NodeBuffer = NodeBuffer; exports.alloc = alloc; -},{"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/get":65,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67,"buffer":101}],316:[function(require,module,exports){ +},{"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/get":69,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71,"buffer":105}],361:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require('babel-runtime/helpers/createClass'); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _features = require('./features'); + +var _features2 = _interopRequireDefault(_features); + +var _error = require('../error'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var ChannelConfig = function () { + function ChannelConfig(host, port, driverConfig, connectionErrorCode) { + (0, _classCallCheck3.default)(this, ChannelConfig); + + this.host = host; + this.port = port; + this.encrypted = ChannelConfig._extractEncrypted(driverConfig); + this.trust = ChannelConfig._extractTrust(driverConfig); + this.trustedCertificates = ChannelConfig._extractTrustedCertificates(driverConfig); + this.knownHostsPath = ChannelConfig._extractKnownHostsPath(driverConfig); + this.connectionErrorCode = connectionErrorCode || _error.SERVICE_UNAVAILABLE; + } + + (0, _createClass3.default)(ChannelConfig, null, [{ + key: '_extractEncrypted', + value: function _extractEncrypted(driverConfig) { + // check if encryption was configured by the user, use explicit null check because we permit boolean value + var encryptionConfigured = driverConfig.encrypted == null; + // default to using encryption if trust-all-certificates is available + return encryptionConfigured ? (0, _features2.default)('trust_all_certificates') : driverConfig.encrypted; + } + }, { + key: '_extractTrust', + value: function _extractTrust(driverConfig) { + if (driverConfig.trust) { + return driverConfig.trust; + } + // default to using TRUST_ALL_CERTIFICATES if it is available + return (0, _features2.default)('trust_all_certificates') ? 'TRUST_ALL_CERTIFICATES' : 'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES'; + } + }, { + key: '_extractTrustedCertificates', + value: function _extractTrustedCertificates(driverConfig) { + return driverConfig.trustedCertificates || []; + } + }, { + key: '_extractKnownHostsPath', + value: function _extractKnownHostsPath(driverConfig) { + return driverConfig.knownHosts || null; + } + }]); + return ChannelConfig; +}(); + +exports.default = ChannelConfig; +; + +},{"../error":356,"./features":369,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],362:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -38401,7 +43063,12 @@ var observer = { */ var DummyChannel = function () { - function DummyChannel(opts) { + + /** + * @constructor + * @param {ChannelConfig} config - configuration for the new channel. + */ + function DummyChannel(config) { (0, _classCallCheck3.default)(this, DummyChannel); this.written = []; @@ -38441,44 +43108,44 @@ var channel = DummyChannel; exports.channel = channel; exports.observer = observer; -},{"./buf":315,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],317:[function(require,module,exports){ -"use strict"; +},{"./buf":360,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],363:[function(require,module,exports){ +'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var _createClass2 = require("babel-runtime/helpers/createClass"); +var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); -var _net = require("net"); +var _net = require('net'); var _net2 = _interopRequireDefault(_net); -var _tls = require("tls"); +var _tls = require('tls'); var _tls2 = _interopRequireDefault(_tls); -var _fs = require("fs"); +var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); -var _path = require("path"); +var _path = require('path'); var _path2 = _interopRequireDefault(_path); -var _os = require("os"); +var _os = require('os'); -var _buf = require("./buf"); +var _buf = require('./buf'); -var _util = require("./util"); +var _util = require('./util'); -var _error = require("./../error"); +var _error = require('./../error'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -38582,18 +43249,18 @@ var TrustStrategy = { /** * @deprecated Since version 1.0. Will be deleted in a future version. {@link #TRUST_CUSTOM_CA_SIGNED_CERTIFICATES}. */ - TRUST_SIGNED_CERTIFICATES: function TRUST_SIGNED_CERTIFICATES(opts, onSuccess, onFailure) { + TRUST_SIGNED_CERTIFICATES: function TRUST_SIGNED_CERTIFICATES(config, onSuccess, onFailure) { console.log("`TRUST_SIGNED_CERTIFICATES` has been deprecated as option and will be removed in a future version of " + "the driver. Please use `TRUST_CUSTOM_CA_SIGNED_CERTIFICATES` instead."); - return TrustStrategy.TRUST_CUSTOM_CA_SIGNED_CERTIFICATES(opts, onSuccess, onFailure); + return TrustStrategy.TRUST_CUSTOM_CA_SIGNED_CERTIFICATES(config, onSuccess, onFailure); }, - TRUST_CUSTOM_CA_SIGNED_CERTIFICATES: function TRUST_CUSTOM_CA_SIGNED_CERTIFICATES(opts, onSuccess, onFailure) { - if (!opts.trustedCertificates || opts.trustedCertificates.length == 0) { + TRUST_CUSTOM_CA_SIGNED_CERTIFICATES: function TRUST_CUSTOM_CA_SIGNED_CERTIFICATES(config, onSuccess, onFailure) { + if (!config.trustedCertificates || config.trustedCertificates.length === 0) { onFailure((0, _error.newError)("You are using TRUST_CUSTOM_CA_SIGNED_CERTIFICATES as the method " + "to verify trust for encrypted connections, but have not configured any " + "trustedCertificates. You must specify the path to at least one trusted " + "X.509 certificate for this to work. Two other alternatives is to use " + "TRUST_ALL_CERTIFICATES or to disable encryption by setting encrypted=\"" + _util.ENCRYPTION_OFF + "\"" + "in your driver configuration.")); return; } var tlsOpts = { - ca: opts.trustedCertificates.map(function (f) { + ca: config.trustedCertificates.map(function (f) { return _fs2.default.readFileSync(f); }), // Because we manually check for this in the connect callback, to give @@ -38601,7 +43268,7 @@ var TrustStrategy = { rejectUnauthorized: false }; - var socket = _tls2.default.connect(opts.port, opts.host, tlsOpts, function () { + var socket = _tls2.default.connect(config.port, config.host, tlsOpts, function () { if (!socket.authorized) { onFailure((0, _error.newError)("Server certificate is not trusted. If you trust the database you are connecting to, add" + " the signing certificate, or the server certificate, to the list of certificates trusted by this driver" + " using `neo4j.v1.driver(.., { trustedCertificates:['path/to/certificate.crt']}). This " + " is a security measure to protect against man-in-the-middle attacks. If you are just trying " + " Neo4j out and are not concerned about encryption, simply disable it using `encrypted=\"" + _util.ENCRYPTION_OFF + "\"`" + " in the driver options. Socket responded with: " + socket.authorizationError)); } else { @@ -38611,14 +43278,14 @@ var TrustStrategy = { socket.on('error', onFailure); return socket; }, - TRUST_SYSTEM_CA_SIGNED_CERTIFICATES: function TRUST_SYSTEM_CA_SIGNED_CERTIFICATES(opts, onSuccess, onFailure) { + TRUST_SYSTEM_CA_SIGNED_CERTIFICATES: function TRUST_SYSTEM_CA_SIGNED_CERTIFICATES(config, onSuccess, onFailure) { var tlsOpts = { // Because we manually check for this in the connect callback, to give // a more helpful error to the user rejectUnauthorized: false }; - var socket = _tls2.default.connect(opts.port, opts.host, tlsOpts, function () { + var socket = _tls2.default.connect(config.port, config.host, tlsOpts, function () { if (!socket.authorized) { onFailure((0, _error.newError)("Server certificate is not trusted. If you trust the database you are connecting to, use " + "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES and add" + " the signing certificate, or the server certificate, to the list of certificates trusted by this driver" + " using `neo4j.v1.driver(.., { trustedCertificates:['path/to/certificate.crt']}). This " + " is a security measure to protect against man-in-the-middle attacks. If you are just trying " + " Neo4j out and are not concerned about encryption, simply disable it using `encrypted=\"" + _util.ENCRYPTION_OFF + "\"`" + " in the driver options. Socket responded with: " + socket.authorizationError)); } else { @@ -38631,7 +43298,7 @@ var TrustStrategy = { /** * @deprecated in 1.1 in favour of {@link #TRUST_ALL_CERTIFICATES}. Will be deleted in a future version. */ - TRUST_ON_FIRST_USE: function TRUST_ON_FIRST_USE(opts, onSuccess, onFailure) { + TRUST_ON_FIRST_USE: function TRUST_ON_FIRST_USE(config, onSuccess, onFailure) { console.log("`TRUST_ON_FIRST_USE` has been deprecated as option and will be removed in a future version of " + "the driver. Please use `TRUST_ALL_CERTIFICATES` instead."); var tlsOpts = { @@ -38639,7 +43306,7 @@ var TrustStrategy = { rejectUnauthorized: false }; - var socket = _tls2.default.connect(opts.port, opts.host, tlsOpts, function () { + var socket = _tls2.default.connect(config.port, config.host, tlsOpts, function () { var serverCert = socket.getPeerCertificate( /*raw=*/true); if (!serverCert.raw) { @@ -38652,8 +43319,8 @@ var TrustStrategy = { } var serverFingerprint = require('crypto').createHash('sha512').update(serverCert.raw).digest("hex"); - var knownHostsPath = opts.knownHosts || _path2.default.join(userHome(), ".neo4j", "known_hosts"); - var serverId = opts.host + ":" + opts.port; + var knownHostsPath = config.knownHostsPath || _path2.default.join(userHome(), ".neo4j", "known_hosts"); + var serverId = config.host + ":" + config.port; loadFingerprint(serverId, knownHostsPath, function (knownFingerprint) { if (knownFingerprint === serverFingerprint) { @@ -38674,11 +43341,11 @@ var TrustStrategy = { return socket; }, - TRUST_ALL_CERTIFICATES: function TRUST_ALL_CERTIFICATES(opts, onSuccess, onFailure) { + TRUST_ALL_CERTIFICATES: function TRUST_ALL_CERTIFICATES(config, onSuccess, onFailure) { var tlsOpts = { rejectUnauthorized: false }; - var socket = _tls2.default.connect(opts.port, opts.host, tlsOpts, function () { + var socket = _tls2.default.connect(config.port, config.host, tlsOpts, function () { var certificate = socket.getPeerCertificate(); if ((0, _util.isEmptyObjectOrNull)(certificate)) { onFailure((0, _error.newError)("Secure connection was successful but server did not return any valid " + "certificates. Such connection can not be trusted. If you are just trying " + " Neo4j out and are not concerned about encryption, simply disable it using " + "`encrypted=\"" + _util.ENCRYPTION_OFF + "\"` in the driver options. " + "Socket responded with: " + socket.authorizationError)); @@ -38691,20 +43358,27 @@ var TrustStrategy = { } }; -function connect(opts, onSuccess) { +/** + * Connect using node socket. + * @param {ChannelConfig} config - configuration of this channel. + * @param {function} onSuccess - callback to execute on connection success. + * @param {function} onFailure - callback to execute on connection failure. + * @return {*} socket connection. + */ +function connect(config, onSuccess) { var onFailure = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () { return null; }; //still allow boolean for backwards compatibility - if (opts.encrypted === false || opts.encrypted === _util.ENCRYPTION_OFF) { - var conn = _net2.default.connect(opts.port, opts.host, onSuccess); + if (config.encrypted === false || config.encrypted === _util.ENCRYPTION_OFF) { + var conn = _net2.default.connect(config.port, config.host, onSuccess); conn.on('error', onFailure); return conn; - } else if (TrustStrategy[opts.trust]) { - return TrustStrategy[opts.trust](opts, onSuccess, onFailure); + } else if (TrustStrategy[config.trust]) { + return TrustStrategy[config.trust](config, onSuccess, onFailure); } else { - onFailure((0, _error.newError)("Unknown trust strategy: " + opts.trust + ". Please use either " + "trust:'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES' or trust:'TRUST_ALL_CERTIFICATES' in your driver " + "configuration. Alternatively, you can disable encryption by setting " + "`encrypted:\"" + _util.ENCRYPTION_OFF + "\"`. There is no mechanism to use encryption without trust verification, " + "because this incurs the overhead of encryption without improving security. If " + "the driver does not verify that the peer it is connected to is really Neo4j, it " + "is very easy for an attacker to bypass the encryption by pretending to be Neo4j.")); + onFailure((0, _error.newError)("Unknown trust strategy: " + config.trust + ". Please use either " + "trust:'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES' or trust:'TRUST_ALL_CERTIFICATES' in your driver " + "configuration. Alternatively, you can disable encryption by setting " + "`encrypted:\"" + _util.ENCRYPTION_OFF + "\"`. There is no mechanism to use encryption without trust verification, " + "because this incurs the overhead of encryption without improving security. If " + "the driver does not verify that the peer it is connected to is really Neo4j, it " + "is very easy for an attacker to bypass the encryption by pretending to be Neo4j.")); } } @@ -38718,11 +43392,9 @@ var NodeChannel = function () { /** * Create new instance - * @param {Object} opts - Options object - * @param {string} opts.host - The host, including protocol to connect to. - * @param {Integer} opts.port - The port to use. + * @param {ChannelConfig} config - configuration for this channel. */ - function NodeChannel(opts) { + function NodeChannel(config) { (0, _classCallCheck3.default)(this, NodeChannel); var self = this; @@ -38734,9 +43406,10 @@ var NodeChannel = function () { this._error = null; this._handleConnectionError = this._handleConnectionError.bind(this); this._handleConnectionTerminated = this._handleConnectionTerminated.bind(this); + this._connectionErrorCode = config.connectionErrorCode; - this._encrypted = opts.encrypted; - this._conn = connect(opts, function () { + this._encrypted = config.encrypted; + this._conn = connect(config, function () { if (!self._open) { return; } @@ -38760,24 +43433,24 @@ var NodeChannel = function () { } (0, _createClass3.default)(NodeChannel, [{ - key: "_handleConnectionError", + key: '_handleConnectionError', value: function _handleConnectionError(err) { var msg = err.message || 'Failed to connect to server'; - this._error = (0, _error.newError)(msg, _error.SESSION_EXPIRED); + this._error = (0, _error.newError)(msg, this._connectionErrorCode); if (this.onerror) { this.onerror(this._error); } } }, { - key: "_handleConnectionTerminated", + key: '_handleConnectionTerminated', value: function _handleConnectionTerminated() { - this._error = (0, _error.newError)('Connection was closed by server', _error.SESSION_EXPIRED); + this._error = (0, _error.newError)('Connection was closed by server', this._connectionErrorCode); if (this.onerror) { this.onerror(this._error); } } }, { - key: "isEncrypted", + key: 'isEncrypted', value: function isEncrypted() { return this._encrypted; } @@ -38788,7 +43461,7 @@ var NodeChannel = function () { */ }, { - key: "write", + key: 'write', value: function write(buffer) { // If there is a pending queue, push this on that queue. This means // we are not yet connected, so we queue things locally. @@ -38808,7 +43481,7 @@ var NodeChannel = function () { */ }, { - key: "close", + key: 'close', value: function close() { var cb = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () { return null; @@ -38838,7 +43511,7 @@ try { exports.default = _nodeChannelModule; -},{"./../error":311,"./buf":315,"./util":334,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"crypto":220,"fs":98,"net":98,"os":265,"path":271,"readline":98,"tls":98}],318:[function(require,module,exports){ +},{"./../error":356,"./buf":360,"./util":381,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"crypto":225,"fs":102,"net":102,"os":307,"path":313,"readline":102,"tls":102}],364:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -38869,11 +43542,9 @@ var WebSocketChannel = function () { /** * Create new instance - * @param {Object} opts - Options object - * @param {string} opts.host - The host, including protocol to connect to. - * @param {Integer} opts.port - The port to use. + * @param {ChannelConfig} config - configuration for this channel. */ - function WebSocketChannel(opts) { + function WebSocketChannel(config) { (0, _classCallCheck3.default)(this, WebSocketChannel); @@ -38881,20 +43552,21 @@ var WebSocketChannel = function () { this._pending = []; this._error = null; this._handleConnectionError = this._handleConnectionError.bind(this); + this._connectionErrorCode = config.connectionErrorCode; - this._encrypted = opts.encrypted; + this._encrypted = config.encrypted; var scheme = "ws"; //Allow boolean for backwards compatibility - if (opts.encrypted === true || opts.encrypted === _util.ENCRYPTION_ON) { - if (!opts.trust || opts.trust === "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES") { + if (config.encrypted === true || config.encrypted === _util.ENCRYPTION_ON) { + if (!config.trust || config.trust === 'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES') { scheme = "wss"; } else { - this._error = (0, _error.newError)("The browser version of this driver only supports one trust " + "strategy, 'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES'. " + opts.trust + " is not supported. Please " + "either use TRUST_CUSTOM_CA_SIGNED_CERTIFICATES or disable encryption by setting " + "`encrypted:\"" + _util.ENCRYPTION_OFF + "\"` in the driver configuration."); + this._error = (0, _error.newError)("The browser version of this driver only supports one trust " + 'strategy, \'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES\'. ' + config.trust + ' is not supported. Please ' + "either use TRUST_CUSTOM_CA_SIGNED_CERTIFICATES or disable encryption by setting " + "`encrypted:\"" + _util.ENCRYPTION_OFF + "\"` in the driver configuration."); return; } } - this._url = scheme + "://" + opts.host + ":" + opts.port; + this._url = scheme + '://' + config.host + ':' + config.port; this._ws = new WebSocket(this._url); this._ws.binaryType = "arraybuffer"; @@ -38930,7 +43602,7 @@ var WebSocketChannel = function () { // onerror triggers on websocket close as well.. don't get me started. if (this._open) { // http://stackoverflow.com/questions/25779831/how-to-catch-websocket-connection-to-ws-xxxnn-failed-connection-closed-be - this._error = (0, _error.newError)("WebSocket connection failure. Due to security " + "constraints in your web browser, the reason for the failure is not available " + "to this Neo4j Driver. Please use your browsers development console to determine " + "the root cause of the failure. Common reasons include the database being " + "unavailable, using the wrong connection URL or temporary network problems. " + "If you have enabled encryption, ensure your browser is configured to trust the " + "certificate Neo4j is configured to use. WebSocket `readyState` is: " + this._ws.readyState); + this._error = (0, _error.newError)("WebSocket connection failure. Due to security " + "constraints in your web browser, the reason for the failure is not available " + "to this Neo4j Driver. Please use your browsers development console to determine " + "the root cause of the failure. Common reasons include the database being " + "unavailable, using the wrong connection URL or temporary network problems. " + "If you have enabled encryption, ensure your browser is configured to trust the " + "certificate Neo4j is configured to use. WebSocket `readyState` is: " + this._ws.readyState, this._connectionErrorCode); if (this.onerror) { this.onerror(this._error); } @@ -39003,7 +43675,7 @@ var _websocketChannelModule = { channel: WebSocketChannel, available: available exports.default = _websocketChannelModule; -},{"./../error":311,"./buf":315,"./util":334,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],319:[function(require,module,exports){ +},{"./../error":356,"./buf":360,"./util":381,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],365:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -39270,7 +43942,7 @@ var Dechunker = function () { exports.Chunker = Chunker; exports.Dechunker = Dechunker; -},{"./buf":315,"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67}],320:[function(require,module,exports){ +},{"./buf":360,"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71}],366:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -39476,7 +44148,7 @@ var EmptyConnectionHolder = function (_ConnectionHolder) { var EMPTY_CONNECTION_HOLDER = exports.EMPTY_CONNECTION_HOLDER = new EmptyConnectionHolder(); -},{"../error":311,"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/core-js/promise":59,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67}],321:[function(require,module,exports){ +},{"../error":356,"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71}],367:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -39534,26 +44206,11 @@ var _features2 = _interopRequireDefault(_features); var _hostNameResolvers = require('./host-name-resolvers'); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var _routingUtil = require('./routing-util'); -/** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +var _routingUtil2 = _interopRequireDefault(_routingUtil); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var ConnectionProvider = function () { function ConnectionProvider() { @@ -39578,7 +44235,24 @@ var ConnectionProvider = function () { } }]); return ConnectionProvider; -}(); +}(); /** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ var DirectConnectionProvider = exports.DirectConnectionProvider = function (_ConnectionProvider) { (0, _inherits3.default)(DirectConnectionProvider, _ConnectionProvider); @@ -39608,32 +44282,33 @@ var DirectConnectionProvider = exports.DirectConnectionProvider = function (_Con var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { (0, _inherits3.default)(LoadBalancer, _ConnectionProvider2); - function LoadBalancer(address, connectionPool, driverOnErrorCallback) { + function LoadBalancer(address, routingContext, connectionPool, driverOnErrorCallback) { (0, _classCallCheck3.default)(this, LoadBalancer); var _this2 = (0, _possibleConstructorReturn3.default)(this, (LoadBalancer.__proto__ || (0, _getPrototypeOf2.default)(LoadBalancer)).call(this)); _this2._seedRouter = address; _this2._routingTable = new _routingTable2.default(new _roundRobinArray2.default([_this2._seedRouter])); - _this2._rediscovery = new _rediscovery2.default(); + _this2._rediscovery = new _rediscovery2.default(new _routingUtil2.default(routingContext)); _this2._connectionPool = connectionPool; _this2._driverOnErrorCallback = driverOnErrorCallback; _this2._hostNameResolver = LoadBalancer._createHostNameResolver(); + _this2._useSeedRouter = false; return _this2; } (0, _createClass3.default)(LoadBalancer, [{ key: 'acquireConnection', - value: function acquireConnection(mode) { + value: function acquireConnection(accessMode) { var _this3 = this; - var connectionPromise = this._freshRoutingTable().then(function (routingTable) { - if (mode === _driver.READ) { + var connectionPromise = this._freshRoutingTable(accessMode).then(function (routingTable) { + if (accessMode === _driver.READ) { return _this3._acquireConnectionToServer(routingTable.readers, 'read'); - } else if (mode === _driver.WRITE) { + } else if (accessMode === _driver.WRITE) { return _this3._acquireConnectionToServer(routingTable.writers, 'write'); } else { - throw (0, _error.newError)('Illegal mode ' + mode); + throw (0, _error.newError)('Illegal mode ' + accessMode); } }); return this._withAdditionalOnErrorCallback(connectionPromise, this._driverOnErrorCallback); @@ -39654,16 +44329,16 @@ var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { value: function _acquireConnectionToServer(serversRoundRobinArray, serverName) { var address = serversRoundRobinArray.next(); if (!address) { - return _promise2.default.reject((0, _error.newError)('No ' + serverName + ' servers available', _error.SESSION_EXPIRED)); + return _promise2.default.reject((0, _error.newError)('Failed to obtain connection towards ' + serverName + ' server. Known routing table is: ' + this._routingTable, _error.SESSION_EXPIRED)); } return this._connectionPool.acquire(address); } }, { key: '_freshRoutingTable', - value: function _freshRoutingTable() { + value: function _freshRoutingTable(accessMode) { var currentRoutingTable = this._routingTable; - if (!currentRoutingTable.isStale()) { + if (!currentRoutingTable.isStaleFor(accessMode)) { return _promise2.default.resolve(currentRoutingTable); } return this._refreshRoutingTable(currentRoutingTable); @@ -39671,60 +44346,90 @@ var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { }, { key: '_refreshRoutingTable', value: function _refreshRoutingTable(currentRoutingTable) { - var _this4 = this; - var knownRouters = currentRoutingTable.routers.toArray(); - return this._fetchNewRoutingTable(knownRouters, currentRoutingTable).then(function (newRoutingTable) { - if (LoadBalancer._isValidRoutingTable(newRoutingTable)) { - // one of the known routers returned a valid routing table - use it + if (this._useSeedRouter) { + return this._fetchRoutingTableFromSeedRouterFallbackToKnownRouters(knownRouters, currentRoutingTable); + } + return this._fetchRoutingTableFromKnownRoutersFallbackToSeedRouter(knownRouters, currentRoutingTable); + } + }, { + key: '_fetchRoutingTableFromSeedRouterFallbackToKnownRouters', + value: function _fetchRoutingTableFromSeedRouterFallbackToKnownRouters(knownRouters, currentRoutingTable) { + var _this4 = this; + + // we start with seed router, no routers were probed before + var seenRouters = []; + return this._fetchRoutingTableUsingSeedRouter(seenRouters, this._seedRouter).then(function (newRoutingTable) { + if (newRoutingTable) { + _this4._useSeedRouter = false; return newRoutingTable; } - if (!newRoutingTable) { - // returned routing table was undefined, this means a connection error happened and the last known - // router did not return a valid routing table, so we need to forget it - var lastRouterIndex = knownRouters.length - 1; - LoadBalancer._forgetRouter(currentRoutingTable, knownRouters, lastRouterIndex); + // seed router did not return a valid routing table - try to use other known routers + return _this4._fetchRoutingTableUsingKnownRouters(knownRouters, currentRoutingTable); + }).then(function (newRoutingTable) { + _this4._applyRoutingTableIfPossible(newRoutingTable); + return newRoutingTable; + }); + } + }, { + key: '_fetchRoutingTableFromKnownRoutersFallbackToSeedRouter', + value: function _fetchRoutingTableFromKnownRoutersFallbackToSeedRouter(knownRouters, currentRoutingTable) { + var _this5 = this; + + return this._fetchRoutingTableUsingKnownRouters(knownRouters, currentRoutingTable).then(function (newRoutingTable) { + if (newRoutingTable) { + return newRoutingTable; } // none of the known routers returned a valid routing table - try to use seed router address for rediscovery - return _this4._fetchNewRoutingTableUsingSeedRouterAddress(knownRouters, _this4._seedRouter); + return _this5._fetchRoutingTableUsingSeedRouter(knownRouters, _this5._seedRouter); }).then(function (newRoutingTable) { - if (LoadBalancer._isValidRoutingTable(newRoutingTable)) { - _this4._updateRoutingTable(newRoutingTable); + _this5._applyRoutingTableIfPossible(newRoutingTable); + return newRoutingTable; + }); + } + }, { + key: '_fetchRoutingTableUsingKnownRouters', + value: function _fetchRoutingTableUsingKnownRouters(knownRouters, currentRoutingTable) { + return this._fetchRoutingTable(knownRouters, currentRoutingTable).then(function (newRoutingTable) { + if (newRoutingTable) { + // one of the known routers returned a valid routing table - use it return newRoutingTable; } - // none of the existing routers returned valid routing table, throw exception - throw (0, _error.newError)('Could not perform discovery. No routing servers available.', _error.SERVICE_UNAVAILABLE); + // returned routing table was undefined, this means a connection error happened and the last known + // router did not return a valid routing table, so we need to forget it + var lastRouterIndex = knownRouters.length - 1; + LoadBalancer._forgetRouter(currentRoutingTable, knownRouters, lastRouterIndex); + + return null; }); } }, { - key: '_fetchNewRoutingTableUsingSeedRouterAddress', - value: function _fetchNewRoutingTableUsingSeedRouterAddress(knownRouters, seedRouter) { - var _this5 = this; + key: '_fetchRoutingTableUsingSeedRouter', + value: function _fetchRoutingTableUsingSeedRouter(seenRouters, seedRouter) { + var _this6 = this; return this._hostNameResolver.resolve(seedRouter).then(function (resolvedRouterAddresses) { // filter out all addresses that we've already tried var newAddresses = resolvedRouterAddresses.filter(function (address) { - return knownRouters.indexOf(address) < 0; + return seenRouters.indexOf(address) < 0; }); - return _this5._fetchNewRoutingTable(newAddresses, null); + return _this6._fetchRoutingTable(newAddresses, null); }); } }, { - key: '_fetchNewRoutingTable', - value: function _fetchNewRoutingTable(routerAddresses, routingTable) { - var _this6 = this; + key: '_fetchRoutingTable', + value: function _fetchRoutingTable(routerAddresses, routingTable) { + var _this7 = this; return routerAddresses.reduce(function (refreshedTablePromise, currentRouter, currentIndex) { return refreshedTablePromise.then(function (newRoutingTable) { if (newRoutingTable) { - if (!newRoutingTable.writers.isEmpty()) { - // valid routing table was fetched - just return it, try next router otherwise - return newRoutingTable; - } + // valid routing table was fetched - just return it, try next router otherwise + return newRoutingTable; } else { // returned routing table was undefined, this means a connection error happened and we need to forget the // previous router and try the next one @@ -39733,8 +44438,8 @@ var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { } // try next router - var session = _this6._createSessionForRediscovery(currentRouter); - return _this6._rediscovery.lookupRoutingTableOnRouter(session, currentRouter); + var session = _this7._createSessionForRediscovery(currentRouter); + return _this7._rediscovery.lookupRoutingTableOnRouter(session, currentRouter); }); }, _promise2.default.resolve(null)); } @@ -39742,32 +44447,45 @@ var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { key: '_createSessionForRediscovery', value: function _createSessionForRediscovery(routerAddress) { var connection = this._connectionPool.acquire(routerAddress); - var connectionPromise = _promise2.default.resolve(connection); - var connectionProvider = new SingleConnectionProvider(connectionPromise); + // initialized connection is required for routing procedure call + // server version needs to be known to decide which routing procedure to use + var initializedConnectionPromise = connection.initializationCompleted(); + var connectionProvider = new SingleConnectionProvider(initializedConnectionPromise); return new _session2.default(_driver.READ, connectionProvider); } + }, { + key: '_applyRoutingTableIfPossible', + value: function _applyRoutingTableIfPossible(newRoutingTable) { + if (!newRoutingTable) { + // none of routing servers returned valid routing table, throw exception + throw (0, _error.newError)('Could not perform discovery. No routing servers available. Known routing table: ' + this._routingTable, _error.SERVICE_UNAVAILABLE); + } + + if (newRoutingTable.writers.isEmpty()) { + // use seed router next time. this is important when cluster is partitioned. it tries to make sure driver + // does not always get routing table without writers because it talks exclusively to a minority partition + this._useSeedRouter = true; + } + + this._updateRoutingTable(newRoutingTable); + } }, { key: '_updateRoutingTable', value: function _updateRoutingTable(newRoutingTable) { - var _this7 = this; + var _this8 = this; var currentRoutingTable = this._routingTable; // close old connections to servers not present in the new routing table var staleServers = currentRoutingTable.serversDiff(newRoutingTable); staleServers.forEach(function (server) { - return _this7._connectionPool.purge(server); + return _this8._connectionPool.purge(server); }); // make this driver instance aware of the new table this._routingTable = newRoutingTable; } }], [{ - key: '_isValidRoutingTable', - value: function _isValidRoutingTable(routingTable) { - return routingTable && !routingTable.writers.isEmpty(); - } - }, { key: '_forgetRouter', value: function _forgetRouter(routingTable, routersArray, routerIndex) { var address = routersArray[routerIndex]; @@ -39793,10 +44511,10 @@ var SingleConnectionProvider = exports.SingleConnectionProvider = function (_Con function SingleConnectionProvider(connectionPromise) { (0, _classCallCheck3.default)(this, SingleConnectionProvider); - var _this8 = (0, _possibleConstructorReturn3.default)(this, (SingleConnectionProvider.__proto__ || (0, _getPrototypeOf2.default)(SingleConnectionProvider)).call(this)); + var _this9 = (0, _possibleConstructorReturn3.default)(this, (SingleConnectionProvider.__proto__ || (0, _getPrototypeOf2.default)(SingleConnectionProvider)).call(this)); - _this8._connectionPromise = connectionPromise; - return _this8; + _this9._connectionPromise = connectionPromise; + return _this9; } (0, _createClass3.default)(SingleConnectionProvider, [{ @@ -39810,13 +44528,17 @@ var SingleConnectionProvider = exports.SingleConnectionProvider = function (_Con return SingleConnectionProvider; }(ConnectionProvider); -},{"../driver":310,"../error":311,"../session":339,"./features":323,"./host-name-resolvers":325,"./rediscovery":328,"./round-robin-array":329,"./routing-table":330,"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/core-js/promise":59,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67}],322:[function(require,module,exports){ +},{"../driver":355,"../error":356,"../session":386,"./features":369,"./host-name-resolvers":370,"./rediscovery":373,"./round-robin-array":374,"./routing-table":375,"./routing-util":376,"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71}],368:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); -exports.Connection = exports.parsePort = exports.parseHost = exports.parseUrl = exports.parseScheme = exports.connect = undefined; +exports.Connection = exports.connect = undefined; + +var _promise = require('babel-runtime/core-js/promise'); + +var _promise2 = _interopRequireDefault(_promise); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); @@ -39840,10 +44562,6 @@ var _chNode2 = _interopRequireDefault(_chNode); var _chunking = require('./chunking'); -var _features = require('./features'); - -var _features2 = _interopRequireDefault(_features); - var _packstream = require('./packstream'); var _buf = require('./buf'); @@ -39852,6 +44570,16 @@ var _graphTypes = require('../graph-types'); var _error = require('./../error'); +var _chConfig = require('./ch-config'); + +var _chConfig2 = _interopRequireDefault(_chConfig); + +var _util = require('./util'); + +var _streamObserver = require('./stream-observer'); + +var _streamObserver2 = _interopRequireDefault(_streamObserver); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** @@ -39872,6 +44600,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * See the License for the specific language governing permissions and * limitations under the License. */ + var Channel = void 0; if (_chNode2.default.available) { Channel = _chNode2.default.channel; @@ -39914,28 +44643,6 @@ NODE = 0x4E, MAGIC_PREAMBLE = 0x6060B017, DEBUG = false; -var URLREGEX = new RegExp(["([^/]+//)?", // scheme -"(([^:/?#]*)", // hostname -"(?::([0-9]+))?)", // port (optional) -".*"].join("")); // everything else - -function parseScheme(url) { - var scheme = url.match(URLREGEX)[1] || ''; - return scheme.toLowerCase(); -} - -function parseUrl(url) { - return url.match(URLREGEX)[2]; -} - -function parseHost(url) { - return url.match(URLREGEX)[3]; -} - -function parsePort(url) { - return url.match(URLREGEX)[4]; -} - /** * Very rudimentary log handling, should probably be replaced by something proper at some point. * @param actor the part that sent the message, 'S' for server and 'C' for client @@ -40058,6 +44765,8 @@ var Connection = function () { this._isHandlingFailure = false; this._currentFailure = null; + this._state = new ConnectionState(this); + // Set to true on fatal errors, to get this out of session pool. this._isBroken = false; @@ -40213,7 +44922,8 @@ var Connection = function () { var _this2 = this; log("C", "INIT", clientName, token); - this._queueObserver(observer); + var initObserver = this._state.wrap(observer); + this._queueObserver(initObserver); this._packer.packStruct(INIT, [this._packable(clientName), this._packable(token)], function (err) { return _this2._handleFatalError(err); }); @@ -40342,6 +45052,18 @@ var Connection = function () { } } + /** + * Get promise resolved when connection initialization succeed or rejected when it fails. + * Connection is initialized using {@link initialize} function. + * @return {Promise} the result of connection initialization. + */ + + }, { + key: 'initializationCompleted', + value: function initializationCompleted() { + return this._state.initializationCompleted(); + } + /** * Synchronize - flush all queued outgoing messages and route their responses * to their respective handlers. @@ -40394,43 +45116,120 @@ var Connection = function () { return Connection; }(); +var ConnectionState = function () { + + /** + * @constructor + * @param {Connection} connection the connection to track state for. + */ + function ConnectionState(connection) { + (0, _classCallCheck3.default)(this, ConnectionState); + + this._connection = connection; + + this._initialized = false; + this._initializationError = null; + + this._resolvePromise = null; + this._rejectPromise = null; + } + + /** + * Wrap the given observer to track connection's initialization state. + * @param {StreamObserver} observer the observer used for INIT message. + * @return {StreamObserver} updated observer. + */ + + + (0, _createClass3.default)(ConnectionState, [{ + key: 'wrap', + value: function wrap(observer) { + var _this10 = this; + + return { + onNext: function onNext(record) { + if (observer && observer.onNext) { + observer.onNext(record); + } + }, + onError: function onError(error) { + _this10._initializationError = error; + if (_this10._rejectPromise) { + _this10._rejectPromise(error); + _this10._rejectPromise = null; + } + if (observer && observer.onError) { + observer.onError(error); + } + }, + onCompleted: function onCompleted(metaData) { + if (metaData && metaData.server) { + _this10._connection.setServerVersion(metaData.server); + } + _this10._initialized = true; + if (_this10._resolvePromise) { + _this10._resolvePromise(_this10._connection); + _this10._resolvePromise = null; + } + if (observer && observer.onCompleted) { + observer.onCompleted(metaData); + } + } + }; + } + + /** + * Get promise resolved when connection initialization succeed or rejected when it fails. + * @return {Promise} the result of connection initialization. + */ + + }, { + key: 'initializationCompleted', + value: function initializationCompleted() { + var _this11 = this; + + if (this._initialized) { + return _promise2.default.resolve(this._connection); + } else if (this._initializationError) { + return _promise2.default.reject(this._initializationError); + } else { + return new _promise2.default(function (resolve, reject) { + _this11._resolvePromise = resolve; + _this11._rejectPromise = reject; + }); + } + } + }]); + return ConnectionState; +}(); + /** * Crete new connection to the provided url. * @access private * @param {string} url - 'neo4j'-prefixed URL to Neo4j Bolt endpoint - * @param {object} config + * @param {object} config - this driver configuration + * @param {string=null} connectionErrorCode - error code for errors raised on connection errors * @return {Connection} - New connection */ function connect(url) { var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var connectionErrorCode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var Ch = config.channel || Channel; - var host = parseHost(url); - var port = parsePort(url) || 7687; + var host = (0, _util.parseHost)(url); + var port = (0, _util.parsePort)(url) || 7687; var completeUrl = host + ':' + port; + var channelConfig = new _chConfig2.default(host, port, config, connectionErrorCode); - return new Connection(new Ch({ - host: parseHost(url), - port: parsePort(url) || 7687, - // Default to using encryption if trust-on-first-use is available - encrypted: config.encrypted == null ? (0, _features2.default)("trust_all_certificates") : config.encrypted, - // Default to using TRUST_ALL_CERTIFICATES if it is available - trust: config.trust || ((0, _features2.default)("trust_all_certificates") ? "TRUST_ALL_CERTIFICATES" : "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES"), - trustedCertificates: config.trustedCertificates || [], - knownHosts: config.knownHosts - }), completeUrl); + return new Connection(new Ch(channelConfig), completeUrl); } exports.connect = connect; -exports.parseScheme = parseScheme; -exports.parseUrl = parseUrl; -exports.parseHost = parseHost; -exports.parsePort = parsePort; exports.Connection = Connection; -},{"../graph-types":312,"./../error":311,"./buf":315,"./ch-node":317,"./ch-websocket":318,"./chunking":319,"./features":323,"./packstream":326,"babel-runtime/core-js/json/stringify":51,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],323:[function(require,module,exports){ +},{"../graph-types":357,"./../error":356,"./buf":360,"./ch-config":361,"./ch-node":363,"./ch-websocket":364,"./chunking":365,"./packstream":371,"./stream-observer":378,"./util":381,"babel-runtime/core-js/json/stringify":54,"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],369:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -40498,135 +45297,7 @@ function hasFeature(name) { exports.default = hasFeature; -},{"dns":98,"tls":98}],324:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _stringify = require('babel-runtime/core-js/json/stringify'); - -var _stringify2 = _interopRequireDefault(_stringify); - -var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require('babel-runtime/helpers/createClass'); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _roundRobinArray = require('./round-robin-array'); - -var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); - -var _error = require('../error'); - -var _integer = require('../integer'); - -var _integer2 = _interopRequireDefault(_integer); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var PROCEDURE_CALL = 'CALL dbms.cluster.routing.getServers'; /** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -var PROCEDURE_NOT_FOUND_CODE = 'Neo.ClientError.Procedure.ProcedureNotFound'; - -var GetServersUtil = function () { - function GetServersUtil() { - (0, _classCallCheck3.default)(this, GetServersUtil); - } - - (0, _createClass3.default)(GetServersUtil, [{ - key: 'callGetServers', - value: function callGetServers(session, routerAddress) { - return session.run(PROCEDURE_CALL).then(function (result) { - session.close(); - return result.records; - }).catch(function (error) { - if (error.code === PROCEDURE_NOT_FOUND_CODE) { - // throw when getServers procedure not found because this is clearly a configuration issue - throw (0, _error.newError)('Server ' + routerAddress + ' could not perform routing. ' + 'Make sure you are connecting to a causal cluster', _error.SERVICE_UNAVAILABLE); - } - // return nothing when failed to connect because code higher in the callstack is still able to retry with a - // different session towards a different router - return null; - }); - } - }, { - key: 'parseTtl', - value: function parseTtl(record, routerAddress) { - try { - var now = (0, _integer.int)(Date.now()); - var expires = record.get('ttl').multiply(1000).add(now); - // if the server uses a really big expire time like Long.MAX_VALUE this may have overflowed - if (expires.lessThan(now)) { - return _integer2.default.MAX_VALUE; - } - return expires; - } catch (error) { - throw (0, _error.newError)('Unable to parse TTL entry from router ' + routerAddress + ' from record:\n' + (0, _stringify2.default)(record), _error.PROTOCOL_ERROR); - } - } - }, { - key: 'parseServers', - value: function parseServers(record, routerAddress) { - try { - var servers = record.get('servers'); - - var routers = new _roundRobinArray2.default(); - var readers = new _roundRobinArray2.default(); - var writers = new _roundRobinArray2.default(); - - servers.forEach(function (server) { - var role = server['role']; - var addresses = server['addresses']; - - if (role === 'ROUTE') { - routers.pushAll(addresses); - } else if (role === 'WRITE') { - writers.pushAll(addresses); - } else if (role === 'READ') { - readers.pushAll(addresses); - } else { - throw (0, _error.newError)('Unknown server role "' + role + '"', _error.PROTOCOL_ERROR); - } - }); - - return { - routers: routers, - readers: readers, - writers: writers - }; - } catch (ignore) { - throw (0, _error.newError)('Unable to parse servers entry from router ' + routerAddress + ' from record:\n' + (0, _stringify2.default)(record), _error.PROTOCOL_ERROR); - } - } - }]); - return GetServersUtil; -}(); - -exports.default = GetServersUtil; - -},{"../error":311,"../integer":314,"./round-robin-array":329,"babel-runtime/core-js/json/stringify":51,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],325:[function(require,module,exports){ +},{"dns":102,"tls":102}],370:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -40658,7 +45329,7 @@ var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); -var _connector = require('./connector'); +var _util = require('./util'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -40727,8 +45398,8 @@ var DnsHostNameResolver = exports.DnsHostNameResolver = function (_HostNameResol value: function resolve(seedRouter) { var _this3 = this; - var seedRouterHost = (0, _connector.parseHost)(seedRouter); - var seedRouterPort = (0, _connector.parsePort)(seedRouter); + var seedRouterHost = (0, _util.parseHost)(seedRouter); + var seedRouterPort = (0, _util.parsePort)(seedRouter); return new _promise2.default(function (resolve) { _this3._dns.lookup(seedRouterHost, { all: true }, function (error, addresses) { @@ -40759,7 +45430,7 @@ function addressWithPort(addressObject, port) { return address; } -},{"./connector":322,"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/core-js/promise":59,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67,"dns":98}],326:[function(require,module,exports){ +},{"./util":381,"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71,"dns":102}],371:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -41223,7 +45894,7 @@ exports.Packer = Packer; exports.Unpacker = Unpacker; exports.Structure = Structure; -},{"../integer":314,"./../error":311,"./utf8":333,"babel-runtime/core-js/object/keys":57,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/typeof":69}],327:[function(require,module,exports){ +},{"../integer":359,"./../error":356,"./utf8":380,"babel-runtime/core-js/object/keys":60,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/typeof":73}],372:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -41356,50 +46027,78 @@ var Pool = function () { exports.default = Pool; -},{"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],328:[function(require,module,exports){ -"use strict"; +},{"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],373:[function(require,module,exports){ +'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); -var _stringify = require("babel-runtime/core-js/json/stringify"); +var _stringify = require('babel-runtime/core-js/json/stringify'); var _stringify2 = _interopRequireDefault(_stringify); -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var _createClass2 = require("babel-runtime/helpers/createClass"); +var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); -var _getServersUtil = require("./get-servers-util"); - -var _getServersUtil2 = _interopRequireDefault(_getServersUtil); - -var _routingTable = require("./routing-table"); +var _routingTable = require('./routing-table'); var _routingTable2 = _interopRequireDefault(_routingTable); -var _error = require("../error"); +var _error = require('../error'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + var Rediscovery = function () { - function Rediscovery(getServersUtil) { + + /** + * @constructor + * @param {RoutingUtil} routingUtil the util to use. + */ + function Rediscovery(routingUtil) { (0, _classCallCheck3.default)(this, Rediscovery); - this._getServersUtil = getServersUtil || new _getServersUtil2.default(); + this._routingUtil = routingUtil; } + /** + * Try to fetch new routing table from the given router. + * @param {Session} session the session to use. + * @param {string} routerAddress the URL of the router. + * @return {Promise} promise resolved with new routing table or null when connection error happened. + */ + + (0, _createClass3.default)(Rediscovery, [{ - key: "lookupRoutingTableOnRouter", + key: 'lookupRoutingTableOnRouter', value: function lookupRoutingTableOnRouter(session, routerAddress) { var _this = this; - return this._getServersUtil.callGetServers(session, routerAddress).then(function (records) { + return this._routingUtil.callRoutingProcedure(session, routerAddress).then(function (records) { if (records === null) { // connection error happened, unable to retrieve routing table from this router, next one should be queried return null; @@ -41411,12 +46110,12 @@ var Rediscovery = function () { var record = records[0]; - var expirationTime = _this._getServersUtil.parseTtl(record, routerAddress); + var expirationTime = _this._routingUtil.parseTtl(record, routerAddress); - var _getServersUtil$parse = _this._getServersUtil.parseServers(record, routerAddress), - routers = _getServersUtil$parse.routers, - readers = _getServersUtil$parse.readers, - writers = _getServersUtil$parse.writers; + var _routingUtil$parseSer = _this._routingUtil.parseServers(record, routerAddress), + routers = _routingUtil$parseSer.routers, + readers = _routingUtil$parseSer.readers, + writers = _routingUtil$parseSer.writers; Rediscovery._assertNonEmpty(routers, 'routers', routerAddress); Rediscovery._assertNonEmpty(readers, 'readers', routerAddress); @@ -41427,7 +46126,7 @@ var Rediscovery = function () { }); } }], [{ - key: "_assertNonEmpty", + key: '_assertNonEmpty', value: function _assertNonEmpty(serversRoundRobinArray, serversName, routerAddress) { if (serversRoundRobinArray.isEmpty()) { throw (0, _error.newError)('Received no ' + serversName + ' from router ' + routerAddress, _error.PROTOCOL_ERROR); @@ -41435,34 +46134,21 @@ var Rediscovery = function () { } }]); return Rediscovery; -}(); /** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +}(); exports.default = Rediscovery; -},{"../error":311,"./get-servers-util":324,"./routing-table":330,"babel-runtime/core-js/json/stringify":51,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],329:[function(require,module,exports){ +},{"../error":356,"./routing-table":375,"babel-runtime/core-js/json/stringify":54,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],374:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); +var _stringify = require('babel-runtime/core-js/json/stringify'); + +var _stringify2 = _interopRequireDefault(_stringify); + var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); @@ -41544,45 +46230,176 @@ var RoundRobinArray = function () { return element !== item; }); } + }, { + key: 'toString', + value: function toString() { + return (0, _stringify2.default)(this._items); + } }]); return RoundRobinArray; }(); exports.default = RoundRobinArray; -},{"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],330:[function(require,module,exports){ -"use strict"; +},{"babel-runtime/core-js/json/stringify":54,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],375:[function(require,module,exports){ +'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); -var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray"); +var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); -var _from = require("babel-runtime/core-js/array/from"); +var _from = require('babel-runtime/core-js/array/from'); var _from2 = _interopRequireDefault(_from); -var _set = require("babel-runtime/core-js/set"); +var _set = require('babel-runtime/core-js/set'); var _set2 = _interopRequireDefault(_set); -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var _createClass2 = require("babel-runtime/helpers/createClass"); +var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); -var _integer = require("../integer"); +var _integer = require('../integer'); -var _roundRobinArray = require("./round-robin-array"); +var _roundRobinArray = require('./round-robin-array'); var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); +var _driver = require('../driver'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var MIN_ROUTERS = 1; /** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var RoutingTable = function () { + function RoutingTable(routers, readers, writers, expirationTime) { + (0, _classCallCheck3.default)(this, RoutingTable); + + this.routers = routers || new _roundRobinArray2.default(); + this.readers = readers || new _roundRobinArray2.default(); + this.writers = writers || new _roundRobinArray2.default(); + this.expirationTime = expirationTime || (0, _integer.int)(0); + } + + (0, _createClass3.default)(RoutingTable, [{ + key: 'forget', + value: function forget(address) { + // Don't remove it from the set of routers, since that might mean we lose our ability to re-discover, + // just remove it from the set of readers and writers, so that we don't use it for actual work without + // performing discovery first. + this.readers.remove(address); + this.writers.remove(address); + } + }, { + key: 'forgetRouter', + value: function forgetRouter(address) { + this.routers.remove(address); + } + }, { + key: 'forgetWriter', + value: function forgetWriter(address) { + this.writers.remove(address); + } + }, { + key: 'serversDiff', + value: function serversDiff(otherRoutingTable) { + var oldServers = new _set2.default(this._allServers()); + var newServers = otherRoutingTable._allServers(); + newServers.forEach(function (newServer) { + return oldServers.delete(newServer); + }); + return (0, _from2.default)(oldServers); + } + + /** + * Check if this routing table is fresh to perform the required operation. + * @param {string} accessMode the type of operation. Allowed values are {@link READ} and {@link WRITE}. + * @return {boolean} true when this table contains servers to serve the required operation, + * false otherwise. + */ + + }, { + key: 'isStaleFor', + value: function isStaleFor(accessMode) { + return this.expirationTime.lessThan(Date.now()) || this.routers.size() < MIN_ROUTERS || accessMode === _driver.READ && this.readers.isEmpty() || accessMode === _driver.WRITE && this.writers.isEmpty(); + } + }, { + key: '_allServers', + value: function _allServers() { + return [].concat((0, _toConsumableArray3.default)(this.routers.toArray()), (0, _toConsumableArray3.default)(this.readers.toArray()), (0, _toConsumableArray3.default)(this.writers.toArray())); + } + }, { + key: 'toString', + value: function toString() { + return 'RoutingTable[' + ('expirationTime=' + this.expirationTime + ', ') + ('routers=' + this.routers + ', ') + ('readers=' + this.readers + ', ') + ('writers=' + this.writers + ']'); + } + }]); + return RoutingTable; +}(); + +exports.default = RoutingTable; + +},{"../driver":355,"../integer":359,"./round-robin-array":374,"babel-runtime/core-js/array/from":53,"babel-runtime/core-js/set":63,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/toConsumableArray":72}],376:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); + +var _defineProperty3 = _interopRequireDefault(_defineProperty2); + +var _stringify = require('babel-runtime/core-js/json/stringify'); + +var _stringify2 = _interopRequireDefault(_stringify); + +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require('babel-runtime/helpers/createClass'); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _roundRobinArray = require('./round-robin-array'); + +var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); + +var _error = require('../error'); + +var _integer = require('../integer'); + +var _integer2 = _interopRequireDefault(_integer); + +var _serverVersion = require('./server-version'); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** @@ -41603,64 +46420,242 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * See the License for the specific language governing permissions and * limitations under the License. */ -var MIN_ROUTERS = 1; -var RoutingTable = function () { - function RoutingTable(routers, readers, writers, expirationTime) { - (0, _classCallCheck3.default)(this, RoutingTable); +var CALL_GET_SERVERS = 'CALL dbms.cluster.routing.getServers'; +var GET_ROUTING_TABLE_PARAM = 'context'; +var CALL_GET_ROUTING_TABLE = 'CALL dbms.cluster.routing.getRoutingTable({' + GET_ROUTING_TABLE_PARAM + '})'; +var PROCEDURE_NOT_FOUND_CODE = 'Neo.ClientError.Procedure.ProcedureNotFound'; - this.routers = routers || new _roundRobinArray2.default(); - this.readers = readers || new _roundRobinArray2.default(); - this.writers = writers || new _roundRobinArray2.default(); - this.expirationTime = expirationTime || (0, _integer.int)(0); +var RoutingUtil = function () { + function RoutingUtil(routingContext) { + (0, _classCallCheck3.default)(this, RoutingUtil); + + this._routingContext = routingContext; } - (0, _createClass3.default)(RoutingTable, [{ - key: "forget", - value: function forget(address) { - // Don't remove it from the set of routers, since that might mean we lose our ability to re-discover, - // just remove it from the set of readers and writers, so that we don't use it for actual work without - // performing discovery first. - this.readers.remove(address); - this.writers.remove(address); + /** + * Invoke routing procedure using the given session. + * @param {Session} session the session to use. + * @param {string} routerAddress the URL of the router. + * @return {Promise} promise resolved with records returned by the procedure call or null if + * connection error happened. + */ + + + (0, _createClass3.default)(RoutingUtil, [{ + key: 'callRoutingProcedure', + value: function callRoutingProcedure(session, routerAddress) { + return this._callAvailableRoutingProcedure(session).then(function (result) { + session.close(); + return result.records; + }).catch(function (error) { + if (error.code === PROCEDURE_NOT_FOUND_CODE) { + // throw when getServers procedure not found because this is clearly a configuration issue + throw (0, _error.newError)('Server ' + routerAddress + ' could not perform routing. ' + 'Make sure you are connecting to a causal cluster', _error.SERVICE_UNAVAILABLE); + } + // return nothing when failed to connect because code higher in the callstack is still able to retry with a + // different session towards a different router + return null; + }); } }, { - key: "forgetRouter", - value: function forgetRouter(address) { - this.routers.remove(address); + key: 'parseTtl', + value: function parseTtl(record, routerAddress) { + try { + var now = (0, _integer.int)(Date.now()); + var expires = record.get('ttl').multiply(1000).add(now); + // if the server uses a really big expire time like Long.MAX_VALUE this may have overflowed + if (expires.lessThan(now)) { + return _integer2.default.MAX_VALUE; + } + return expires; + } catch (error) { + throw (0, _error.newError)('Unable to parse TTL entry from router ' + routerAddress + ' from record:\n' + (0, _stringify2.default)(record), _error.PROTOCOL_ERROR); + } } }, { - key: "forgetWriter", - value: function forgetWriter(address) { - this.writers.remove(address); + key: 'parseServers', + value: function parseServers(record, routerAddress) { + try { + var servers = record.get('servers'); + + var routers = new _roundRobinArray2.default(); + var readers = new _roundRobinArray2.default(); + var writers = new _roundRobinArray2.default(); + + servers.forEach(function (server) { + var role = server['role']; + var addresses = server['addresses']; + + if (role === 'ROUTE') { + routers.pushAll(addresses); + } else if (role === 'WRITE') { + writers.pushAll(addresses); + } else if (role === 'READ') { + readers.pushAll(addresses); + } else { + throw (0, _error.newError)('Unknown server role "' + role + '"', _error.PROTOCOL_ERROR); + } + }); + + return { + routers: routers, + readers: readers, + writers: writers + }; + } catch (ignore) { + throw (0, _error.newError)('Unable to parse servers entry from router ' + routerAddress + ' from record:\n' + (0, _stringify2.default)(record), _error.PROTOCOL_ERROR); + } } }, { - key: "serversDiff", - value: function serversDiff(otherRoutingTable) { - var oldServers = new _set2.default(this._allServers()); - var newServers = otherRoutingTable._allServers(); - newServers.forEach(function (newServer) { - return oldServers.delete(newServer); + key: '_callAvailableRoutingProcedure', + value: function _callAvailableRoutingProcedure(session) { + var _this = this; + + return session._run(null, null, function (connection, streamObserver) { + var serverVersionString = connection.server.version; + var serverVersion = _serverVersion.ServerVersion.fromString(serverVersionString); + + if (serverVersion.compareTo(_serverVersion.VERSION_3_2_0) >= 0) { + var params = (0, _defineProperty3.default)({}, GET_ROUTING_TABLE_PARAM, _this._routingContext); + connection.run(CALL_GET_ROUTING_TABLE, params, streamObserver); + } else { + connection.run(CALL_GET_SERVERS, {}, streamObserver); + } }); - return (0, _from2.default)(oldServers); } - }, { - key: "isStale", - value: function isStale() { - return this.expirationTime.lessThan(Date.now()) || this.routers.size() <= MIN_ROUTERS || this.readers.isEmpty() || this.writers.isEmpty(); + }]); + return RoutingUtil; +}(); + +exports.default = RoutingUtil; + +},{"../error":356,"../integer":359,"./round-robin-array":374,"./server-version":377,"babel-runtime/core-js/json/stringify":54,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/defineProperty":68}],377:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.VERSION_3_2_0 = exports.ServerVersion = undefined; + +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require('babel-runtime/helpers/createClass'); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _util = require('./util'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var SERVER_VERSION_REGEX = new RegExp('^(Neo4j/)?(\\d+)\\.(\\d+)(?:\\.)?(\\d*)(\\.|-|\\+)?([0-9A-Za-z-.]*)?$'); /** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var ServerVersion = function () { + + /** + * @constructor + * @param {number} major the major version number. + * @param {number} minor the minor version number. + * @param {number} patch the patch version number. + */ + function ServerVersion(major, minor, patch) { + (0, _classCallCheck3.default)(this, ServerVersion); + + this.major = major; + this.minor = minor; + this.patch = patch; + } + + /** + * Parse given string to a {@link ServerVersion} object. + * @param versionStr the string to parse. + * @return {ServerVersion} version for the given string. + * @throws Error if given string can't be parsed. + */ + + + (0, _createClass3.default)(ServerVersion, [{ + key: 'compareTo', + + + /** + * Compare this version to the given one. + * @param {ServerVersion} other the version to compare with. + * @return {number} value 0 if this version is the same as the given one, value less then 0 when this version + * was released earlier than the given one and value greater then 0 when this version was released after + * than the given one. + */ + value: function compareTo(other) { + var result = compareInts(this.major, other.major); + if (result === 0) { + result = compareInts(this.minor, other.minor); + if (result === 0) { + result = compareInts(this.patch, other.patch); + } + } + return result; } - }, { - key: "_allServers", - value: function _allServers() { - return [].concat((0, _toConsumableArray3.default)(this.routers.toArray()), (0, _toConsumableArray3.default)(this.readers.toArray()), (0, _toConsumableArray3.default)(this.writers.toArray())); + }], [{ + key: 'fromString', + value: function fromString(versionStr) { + if (!versionStr) { + return new ServerVersion(3, 0, 0); + } + + (0, _util.assertString)(versionStr, 'Neo4j version string'); + + var version = versionStr.match(SERVER_VERSION_REGEX); + if (!version) { + throw new Error('Unparsable Neo4j version: ' + versionStr); + } + + var major = parseIntStrict(version[2]); + var minor = parseIntStrict(version[3]); + var patch = parseIntStrict(version[4] || 0); + + return new ServerVersion(major, minor, patch); } }]); - return RoutingTable; + return ServerVersion; }(); -exports.default = RoutingTable; +function parseIntStrict(str, name) { + var value = parseInt(str); + if (!value && value !== 0) { + throw new Error('Unparsable number ' + name + ': \'' + str + '\''); + } + return value; +} -},{"../integer":314,"./round-robin-array":329,"babel-runtime/core-js/array/from":50,"babel-runtime/core-js/set":60,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/toConsumableArray":68}],331:[function(require,module,exports){ +function compareInts(x, y) { + return x < y ? -1 : x === y ? 0 : 1; +} + +var VERSION_3_2_0 = new ServerVersion(3, 2, 0); + +exports.ServerVersion = ServerVersion; +exports.VERSION_3_2_0 = VERSION_3_2_0; + +},{"./util":381,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],378:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -41836,7 +46831,7 @@ var StreamObserver = function () { exports.default = StreamObserver; -},{"../record":335,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],332:[function(require,module,exports){ +},{"../record":382,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],379:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -42042,7 +47037,7 @@ function _valueOrDefault(value, defaultValue) { return defaultValue; } -},{"../error":311,"babel-runtime/core-js/promise":59,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],333:[function(require,module,exports){ +},{"../error":356,"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],380:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -42159,13 +47154,13 @@ var streamDecodeCombinedBuffer = function streamDecodeCombinedBuffer(combinedBuf exports.default = platformObj; -},{"../../external/text-encoding/index":307,"./../error":311,"./buf":315,"buffer":101,"string_decoder":304}],334:[function(require,module,exports){ +},{"../../external/text-encoding/index":352,"./../error":356,"./buf":360,"buffer":105,"string_decoder":346}],381:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.ENCRYPTION_OFF = exports.ENCRYPTION_ON = exports.assertString = exports.isEmptyObjectOrNull = undefined; +exports.ENCRYPTION_OFF = exports.ENCRYPTION_ON = exports.parseRoutingContext = exports.parsePort = exports.parseHost = exports.parseUrl = exports.parseScheme = exports.assertString = exports.isEmptyObjectOrNull = undefined; var _stringify = require("babel-runtime/core-js/json/stringify"); @@ -42199,8 +47194,15 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var ENCRYPTION_ON = "ENCRYPTION_ON"; var ENCRYPTION_OFF = "ENCRYPTION_OFF"; +var URL_REGEX = new RegExp(['([^/]+//)?', // scheme +'(([^:/?#]*)', // hostname +'(?::([0-9]+))?)', // port (optional) +'([^?]*)?', // everything else +'(\\?(.+))?' // query +].join('')); + function isEmptyObjectOrNull(obj) { - if (isNull(obj)) { + if (obj === null) { return true; } @@ -42217,10 +47219,6 @@ function isEmptyObjectOrNull(obj) { return true; } -function isNull(obj) { - return obj === null; -} - function isObject(obj) { var type = typeof obj === "undefined" ? "undefined" : (0, _typeof3.default)(obj); return type === 'function' || type === 'object' && Boolean(obj); @@ -42237,12 +47235,69 @@ function isString(str) { return Object.prototype.toString.call(str) === '[object String]'; } +function parseScheme(url) { + assertString(url, 'URL'); + var scheme = url.match(URL_REGEX)[1] || ''; + return scheme.toLowerCase(); +} + +function parseUrl(url) { + assertString(url, 'URL'); + return url.match(URL_REGEX)[2]; +} + +function parseHost(url) { + assertString(url, 'URL'); + return url.match(URL_REGEX)[3]; +} + +function parsePort(url) { + assertString(url, 'URL'); + return url.match(URL_REGEX)[4]; +} + +function parseRoutingContext(url) { + var query = url.match(URL_REGEX)[7] || ''; + var context = {}; + if (query) { + query.split('&').forEach(function (pair) { + var keyValue = pair.split('='); + if (keyValue.length !== 2) { + throw new Error('Invalid parameters: \'' + keyValue + '\' in URL \'' + url + '\'.'); + } + + var key = trimAndVerify(keyValue[0], 'key', url); + var value = trimAndVerify(keyValue[1], 'value', url); + + if (context[key]) { + throw new Error("Duplicated query parameters with key '" + key + "' in URL '" + url + "'"); + } + + context[key] = value; + }); + } + return context; +} + +function trimAndVerify(string, name, url) { + var result = string.trim(); + if (!result) { + throw new Error("Illegal empty " + name + " in URL query '" + url + "'"); + } + return result; +} + exports.isEmptyObjectOrNull = isEmptyObjectOrNull; exports.assertString = assertString; +exports.parseScheme = parseScheme; +exports.parseUrl = parseUrl; +exports.parseHost = parseHost; +exports.parsePort = parsePort; +exports.parseRoutingContext = parseRoutingContext; exports.ENCRYPTION_ON = ENCRYPTION_ON; exports.ENCRYPTION_OFF = ENCRYPTION_OFF; -},{"babel-runtime/core-js/json/stringify":51,"babel-runtime/helpers/typeof":69}],335:[function(require,module,exports){ +},{"babel-runtime/core-js/json/stringify":54,"babel-runtime/helpers/typeof":73}],382:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -42414,7 +47469,7 @@ var Record = function () { exports.default = Record; -},{"./error":311,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],336:[function(require,module,exports){ +},{"./error":356,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],383:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -42803,7 +47858,7 @@ var statementType = { exports.statementType = statementType; exports.default = ResultSummary; -},{"./integer":314,"babel-runtime/core-js/object/keys":57,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],337:[function(require,module,exports){ +},{"./integer":359,"babel-runtime/core-js/object/keys":60,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],384:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -42995,7 +48050,7 @@ var Result = function () { exports.default = Result; -},{"./internal/connection-holder":320,"./result-summary":336,"babel-runtime/core-js/promise":59,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],338:[function(require,module,exports){ +},{"./internal/connection-holder":366,"./result-summary":383,"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],385:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -43059,17 +48114,21 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var RoutingDriver = function (_Driver) { (0, _inherits3.default)(RoutingDriver, _Driver); - function RoutingDriver(url, userAgent) { - var token = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - var config = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + function RoutingDriver(url, routingContext, userAgent) { + var token = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + var config = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; (0, _classCallCheck3.default)(this, RoutingDriver); - return (0, _possibleConstructorReturn3.default)(this, (RoutingDriver.__proto__ || (0, _getPrototypeOf2.default)(RoutingDriver)).call(this, url, userAgent, token, RoutingDriver._validateConfig(config))); + + var _this = (0, _possibleConstructorReturn3.default)(this, (RoutingDriver.__proto__ || (0, _getPrototypeOf2.default)(RoutingDriver)).call(this, url, userAgent, token, RoutingDriver._validateConfig(config))); + + _this._routingContext = routingContext; + return _this; } (0, _createClass3.default)(RoutingDriver, [{ key: '_createConnectionProvider', value: function _createConnectionProvider(address, connectionPool, driverOnErrorCallback) { - return new _connectionProviders.LoadBalancer(address, connectionPool, driverOnErrorCallback); + return new _connectionProviders.LoadBalancer(address, this._routingContext, connectionPool, driverOnErrorCallback); } }, { key: '_createSession', @@ -43077,13 +48136,10 @@ var RoutingDriver = function (_Driver) { var _this2 = this; return new RoutingSession(mode, connectionProvider, bookmark, config, function (error, conn) { - if (error.code === _error.SERVICE_UNAVAILABLE || error.code === _error.SESSION_EXPIRED) { - // connection is undefined if error happened before connection was acquired - if (conn) { - _this2._connectionProvider.forget(conn.url); - } + if (error.code === _error.SESSION_EXPIRED) { + _this2._forgetConnection(conn); return error; - } else if (error.code === 'Neo.ClientError.Cluster.NotALeader') { + } else if (RoutingDriver._isFailureToWrite(error)) { var url = 'UNKNOWN'; // connection is undefined if error happened before connection was acquired if (conn) { @@ -43096,6 +48152,21 @@ var RoutingDriver = function (_Driver) { } }); } + }, { + key: '_connectionErrorCode', + value: function _connectionErrorCode() { + // connection errors mean SERVICE_UNAVAILABLE for direct driver but for routing driver they should only + // result in SESSION_EXPIRED because there might still exist other servers capable of serving the request + return _error.SESSION_EXPIRED; + } + }, { + key: '_forgetConnection', + value: function _forgetConnection(connection) { + // connection is undefined if error happened before connection was acquired + if (connection) { + this._connectionProvider.forget(connection.url); + } + } }], [{ key: '_validateConfig', value: function _validateConfig(config) { @@ -43104,6 +48175,11 @@ var RoutingDriver = function (_Driver) { } return config; } + }, { + key: '_isFailureToWrite', + value: function _isFailureToWrite(error) { + return error.code === 'Neo.ClientError.Cluster.NotALeader' || error.code === 'Neo.ClientError.General.ForbiddenOnReadOnlyDatabase'; + } }]); return RoutingDriver; }(_driver.Driver); @@ -43131,7 +48207,7 @@ var RoutingSession = function (_Session) { exports.default = RoutingDriver; -},{"./driver":310,"./error":311,"./internal/connection-providers":321,"./session":339,"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67}],339:[function(require,module,exports){ +},{"./driver":355,"./error":356,"./internal/connection-providers":367,"./session":386,"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71}],386:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -43264,22 +48340,29 @@ var Session = function () { parameters = statement.parameters || {}; statement = statement.text; } - (0, _util.assertString)(statement, "Cypher statement"); + (0, _util.assertString)(statement, 'Cypher statement'); + return this._run(statement, parameters, function (connection, streamObserver) { + return connection.run(statement, parameters, streamObserver); + }); + } + }, { + key: '_run', + value: function _run(statement, parameters, statementRunner) { var streamObserver = new _RunObserver(this._onRunFailure()); var connectionHolder = this._connectionHolderWithMode(this._mode); if (!this._hasTx) { connectionHolder.initializeConnection(); connectionHolder.getConnection().then(function (connection) { streamObserver.resolveConnection(connection); - connection.run(statement, parameters, streamObserver); + statementRunner(connection, streamObserver); connection.pullAll(streamObserver); connection.sync(); }).catch(function (error) { return streamObserver.onError(error); }); } else { - streamObserver.onError((0, _error.newError)("Statements cannot be run directly on a " + "session with an open transaction; either run from within the " + "transaction or use a different session.")); + streamObserver.onError((0, _error.newError)('Statements cannot be run directly on a ' + 'session with an open transaction; either run from within the ' + 'transaction or use a different session.')); } return new _result2.default(streamObserver, statement, parameters, function () { return streamObserver.meta(); @@ -43489,7 +48572,7 @@ function _createTransactionExecutor(config) { exports.default = Session; -},{"./driver":310,"./error":311,"./internal/connection-holder":320,"./internal/stream-observer":331,"./internal/transaction-executor":332,"./internal/util":334,"./result":337,"./transaction":340,"babel-runtime/core-js/object/assign":52,"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/get":65,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67,"babel-runtime/helpers/typeof":69}],340:[function(require,module,exports){ +},{"./driver":355,"./error":356,"./internal/connection-holder":366,"./internal/stream-observer":378,"./internal/transaction-executor":379,"./internal/util":381,"./result":384,"./transaction":387,"babel-runtime/core-js/object/assign":55,"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/get":69,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71,"babel-runtime/helpers/typeof":73}],387:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -43873,7 +48956,7 @@ function emptyMetadataSupplier() { exports.default = Transaction; -},{"./internal/connection-holder":320,"./internal/stream-observer":331,"./internal/util":334,"./result":337,"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/core-js/promise":59,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/get":65,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67,"babel-runtime/helpers/typeof":69}],341:[function(require,module,exports){ +},{"./internal/connection-holder":366,"./internal/stream-observer":378,"./internal/util":381,"./result":384,"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/get":69,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71,"babel-runtime/helpers/typeof":73}],388:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { @@ -43907,7 +48990,7 @@ Object.defineProperty(exports, "__esModule", { // system to control version names at packaging time. exports.default = "0.0.0-dev"; -},{}],342:[function(require,module,exports){ +},{}],389:[function(require,module,exports){ 'use strict'; /** @@ -44115,7 +49198,129 @@ function writeString(b, str) { return b; } -},{"../../lib/v1/internal/buf":9,"../../lib/v1/internal/packstream.js":20,"../../lib/v1/internal/utf8":27}],343:[function(require,module,exports){ +},{"../../lib/v1/internal/buf":9,"../../lib/v1/internal/packstream.js":20,"../../lib/v1/internal/utf8":29}],390:[function(require,module,exports){ +'use strict'; + +var _chConfig = require('../../src/v1/internal/ch-config'); + +var _chConfig2 = _interopRequireDefault(_chConfig); + +var _features = require('../../src/v1/internal/features'); + +var _features2 = _interopRequireDefault(_features); + +var _error = require('../../src/v1/error'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +describe('ChannelConfig', function () { + + it('should respect given host', function () { + var host = 'neo4j.com'; + + var config = new _chConfig2.default(host, 42, {}, ''); + + expect(config.host).toEqual(host); + }); + + it('should respect given port', function () { + var port = 4242; + + var config = new _chConfig2.default('', port, {}, ''); + + expect(config.port).toEqual(port); + }); + + it('should respect given encrypted conf', function () { + var encrypted = 'ENCRYPTION_ON'; + + var config = new _chConfig2.default('', 42, { encrypted: encrypted }, ''); + + expect(config.encrypted).toEqual(encrypted); + }); + + it('should respect given trust conf', function () { + var trust = 'TRUST_ALL_CERTIFICATES'; + + var config = new _chConfig2.default('', 42, { trust: trust }, ''); + + expect(config.trust).toEqual(trust); + }); + + it('should respect given trusted certificates conf', function () { + var trustedCertificates = ['./foo.pem', './bar.pem', './baz.pem']; + + var config = new _chConfig2.default('', 42, { trustedCertificates: trustedCertificates }, ''); + + expect(config.trustedCertificates).toEqual(trustedCertificates); + }); + + it('should respect given known hosts', function () { + var knownHostsPath = '~/.neo4j/known_hosts'; + + var config = new _chConfig2.default('', 42, { knownHosts: knownHostsPath }, ''); + + expect(config.knownHostsPath).toEqual(knownHostsPath); + }); + + it('should respect given connection error code', function () { + var connectionErrorCode = 'ConnectionFailed'; + + var config = new _chConfig2.default('', 42, {}, connectionErrorCode); + + expect(config.connectionErrorCode).toEqual(connectionErrorCode); + }); + + it('should use encryption if available but not configured', function () { + var config = new _chConfig2.default('', 42, {}, ''); + + expect(config.encrypted).toEqual((0, _features2.default)('trust_all_certificates')); + }); + + it('should use available trust conf when nothing configured', function () { + var config = new _chConfig2.default('', 42, {}, ''); + + var availableTrust = (0, _features2.default)('trust_all_certificates') ? 'TRUST_ALL_CERTIFICATES' : 'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES'; + expect(config.trust).toEqual(availableTrust); + }); + + it('should have no trusted certificates when not configured', function () { + var config = new _chConfig2.default('', 42, {}, ''); + + expect(config.trustedCertificates).toEqual([]); + }); + + it('should have null known hosts path when not configured', function () { + var config = new _chConfig2.default('', 42, {}, ''); + + expect(config.knownHostsPath).toBeNull(); + }); + + it('should have service unavailable as default error code', function () { + var config = new _chConfig2.default('', 42, {}, ''); + + expect(config.connectionErrorCode).toEqual(_error.SERVICE_UNAVAILABLE); + }); +}); /** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +},{"../../src/v1/error":356,"../../src/v1/internal/ch-config":361,"../../src/v1/internal/features":369}],391:[function(require,module,exports){ 'use strict'; /** @@ -44255,7 +49460,7 @@ function bytes() { return b; } -},{"../../lib/v1/internal/buf":9,"../../lib/v1/internal/ch-dummy.js":10,"../../lib/v1/internal/chunking":13}],344:[function(require,module,exports){ +},{"../../lib/v1/internal/buf":9,"../../lib/v1/internal/ch-dummy.js":11,"../../lib/v1/internal/chunking":14}],392:[function(require,module,exports){ 'use strict'; var _promise = require('babel-runtime/core-js/promise'); @@ -44317,1011 +49522,1621 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de describe('EmptyConnectionHolder', function () { - it('should return rejected promise instead of connection', function (done) { - _connectionHolder.EMPTY_CONNECTION_HOLDER.getConnection().catch(function () { + it('should return rejected promise instead of connection', function (done) { + _connectionHolder.EMPTY_CONNECTION_HOLDER.getConnection().catch(function () { + done(); + }); + }); + + it('should return resolved promise on release', function (done) { + _connectionHolder.EMPTY_CONNECTION_HOLDER.releaseConnection().then(function () { + done(); + }); + }); + + it('should return resolved promise on close', function (done) { + _connectionHolder.EMPTY_CONNECTION_HOLDER.close().then(function () { + done(); + }); + }); +}); + +describe('ConnectionHolder', function () { + + it('should acquire new connection during initialization', function () { + var connectionProvider = new RecordingConnectionProvider([new _fakeConnection2.default()]); + var connectionHolder = new _connectionHolder2.default(_driver.READ, connectionProvider); + + connectionHolder.initializeConnection(); + + expect(connectionProvider.acquireConnectionInvoked).toBe(1); + }); + + it('should return acquired during initialization connection', function (done) { + var connection = new _fakeConnection2.default(); + var connectionProvider = newSingleConnectionProvider(connection); + var connectionHolder = new _connectionHolder2.default(_driver.READ, connectionProvider); + + connectionHolder.initializeConnection(); + + connectionHolder.getConnection().then(function (connection) { + expect(connection).toBe(connection); + done(); + }); + }); + + it('should release connection with single user', function (done) { + var connection = new _fakeConnection2.default(); + var connectionProvider = newSingleConnectionProvider(connection); + var connectionHolder = new _connectionHolder2.default(_driver.READ, connectionProvider); + + connectionHolder.initializeConnection(); + + connectionHolder.releaseConnection().then(function () { + expect(connection.isReleasedOnce()).toBeTruthy(); + done(); + }); + }); + + it('should not release connection with multiple users', function (done) { + var connection = new _fakeConnection2.default(); + var connectionProvider = newSingleConnectionProvider(connection); + var connectionHolder = new _connectionHolder2.default(_driver.READ, connectionProvider); + + connectionHolder.initializeConnection(); + connectionHolder.initializeConnection(); + connectionHolder.initializeConnection(); + + connectionHolder.releaseConnection().then(function () { + expect(connection.isNeverReleased()).toBeTruthy(); + done(); + }); + }); + + it('should release connection with multiple users when all users release', function (done) { + var connection = new _fakeConnection2.default(); + var connectionProvider = newSingleConnectionProvider(connection); + var connectionHolder = new _connectionHolder2.default(_driver.READ, connectionProvider); + + connectionHolder.initializeConnection(); + connectionHolder.initializeConnection(); + connectionHolder.initializeConnection(); + + connectionHolder.releaseConnection().then(function () { + connectionHolder.releaseConnection().then(function () { + connectionHolder.releaseConnection().then(function () { + expect(connection.isReleasedOnce()).toBeTruthy(); + done(); + }); + }); + }); + }); + + it('should do nothing when closed and not initialized', function (done) { + var connection = new _fakeConnection2.default(); + var connectionProvider = newSingleConnectionProvider(connection); + var connectionHolder = new _connectionHolder2.default(_driver.READ, connectionProvider); + + connectionHolder.close().then(function () { + expect(connection.isNeverReleased()).toBeTruthy(); + done(); + }); + }); + + it('should close even when users exist', function (done) { + var connection = new _fakeConnection2.default(); + var connectionProvider = newSingleConnectionProvider(connection); + var connectionHolder = new _connectionHolder2.default(_driver.READ, connectionProvider); + + connectionHolder.initializeConnection(); + connectionHolder.initializeConnection(); + + connectionHolder.close().then(function () { + expect(connection.isReleasedOnceOnSessionClose()).toBeTruthy(); + done(); + }); + }); + + it('should initialize new connection after releasing current one', function (done) { + var connection1 = new _fakeConnection2.default(); + var connection2 = new _fakeConnection2.default(); + var connectionProvider = new RecordingConnectionProvider([connection1, connection2]); + var connectionHolder = new _connectionHolder2.default(_driver.READ, connectionProvider); + + connectionHolder.initializeConnection(); + + connectionHolder.releaseConnection().then(function () { + expect(connection1.isReleasedOnce()).toBeTruthy(); + + connectionHolder.initializeConnection(); + connectionHolder.releaseConnection().then(function () { + expect(connection2.isReleasedOnce()).toBeTruthy(); + done(); + }); + }); + }); + + it('should initialize new connection after being closed', function (done) { + var connection1 = new _fakeConnection2.default(); + var connection2 = new _fakeConnection2.default(); + var connectionProvider = new RecordingConnectionProvider([connection1, connection2]); + var connectionHolder = new _connectionHolder2.default(_driver.READ, connectionProvider); + + connectionHolder.initializeConnection(); + + connectionHolder.close().then(function () { + expect(connection1.isReleasedOnceOnSessionClose()).toBeTruthy(); + + connectionHolder.initializeConnection(); + connectionHolder.close().then(function () { + expect(connection2.isReleasedOnceOnSessionClose()).toBeTruthy(); + done(); + }); + }); + }); +}); + +var RecordingConnectionProvider = function (_SingleConnectionProv) { + (0, _inherits3.default)(RecordingConnectionProvider, _SingleConnectionProv); + + function RecordingConnectionProvider(connections) { + (0, _classCallCheck3.default)(this, RecordingConnectionProvider); + + var _this = (0, _possibleConstructorReturn3.default)(this, (RecordingConnectionProvider.__proto__ || (0, _getPrototypeOf2.default)(RecordingConnectionProvider)).call(this, _promise2.default.resolve())); + + _this.connectionPromises = connections.map(function (conn) { + return _promise2.default.resolve(conn); + }); + _this.acquireConnectionInvoked = 0; + return _this; + } + + (0, _createClass3.default)(RecordingConnectionProvider, [{ + key: 'acquireConnection', + value: function acquireConnection(mode) { + return this.connectionPromises[this.acquireConnectionInvoked++]; + } + }]); + return RecordingConnectionProvider; +}(_connectionProviders.SingleConnectionProvider); + +function newSingleConnectionProvider(connection) { + return new _connectionProviders.SingleConnectionProvider(_promise2.default.resolve(connection)); +} + +},{"../../src/v1/driver":355,"../../src/v1/internal/connection-holder":366,"../../src/v1/internal/connection-providers":367,"./fake-connection":395,"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71}],393:[function(require,module,exports){ +'use strict'; + +var _promise = require('babel-runtime/core-js/promise'); + +var _promise2 = _interopRequireDefault(_promise); + +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require('babel-runtime/helpers/createClass'); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _driver = require('../../src/v1/driver'); + +var _integer = require('../../src/v1/integer'); + +var _integer2 = _interopRequireDefault(_integer); + +var _error = require('../../src/v1/error'); + +var _routingTable = require('../../src/v1/internal/routing-table'); + +var _routingTable2 = _interopRequireDefault(_routingTable); + +var _roundRobinArray = require('../../src/v1/internal/round-robin-array'); + +var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); + +var _connectionProviders = require('../../src/v1/internal/connection-providers'); + +var _pool = require('../../src/v1/internal/pool'); + +var _pool2 = _interopRequireDefault(_pool); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var NO_OP_DRIVER_CALLBACK = function NO_OP_DRIVER_CALLBACK() {}; /** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +describe('DirectConnectionProvider', function () { + + it('acquires connection from the pool', function (done) { + var pool = newPool(); + var connectionProvider = newDirectConnectionProvider('localhost:123', pool); + + connectionProvider.acquireConnection(_driver.READ).then(function (connection) { + expect(connection).toBeDefined(); + expect(connection.address).toEqual('localhost:123'); + expect(connection.release).toBeDefined(); + expect(pool.has('localhost:123')).toBeTruthy(); + + done(); + }); + }); +}); + +describe('LoadBalancer', function () { + + it('can forget address', function () { + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-2'], ['server-2', 'server-4']); + + loadBalancer.forget('server-2'); + + expectRoutingTable(loadBalancer, ['server-1', 'server-2'], ['server-3'], ['server-4']); + }); + + it('can not forget unknown address', function () { + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6']); + + loadBalancer.forget('server-42'); + + expectRoutingTable(loadBalancer, ['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6']); + }); + + it('purges connections when address is forgotten', function () { + var pool = newPool(); + + pool.acquire('server-1'); + pool.acquire('server-3'); + pool.acquire('server-5'); + expectPoolToContain(pool, ['server-1', 'server-3', 'server-5']); + + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-2'], ['server-2', 'server-4'], pool); + + loadBalancer.forget('server-1'); + loadBalancer.forget('server-5'); + + expectPoolToContain(pool, ['server-3']); + expectPoolToNotContain(pool, ['server-1', 'server-5']); + }); + + it('can forget writer address', function () { + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-2'], ['server-2', 'server-4']); + + loadBalancer.forgetWriter('server-2'); + + expectRoutingTable(loadBalancer, ['server-1', 'server-2'], ['server-3', 'server-2'], ['server-4']); + }); + + it('can not forget unknown writer address', function () { + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6']); + + loadBalancer.forgetWriter('server-42'); + + expectRoutingTable(loadBalancer, ['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6']); + }); + + it('initializes routing table with the given router', function () { + var loadBalancer = new _connectionProviders.LoadBalancer('server-ABC', {}, newPool(), NO_OP_DRIVER_CALLBACK); + + expectRoutingTable(loadBalancer, ['server-ABC'], [], []); + }); + + it('acquires read connection with up-to-date routing table', function (done) { + var pool = newPool(); + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], pool); + + loadBalancer.acquireConnection(_driver.READ).then(function (connection) { + expect(connection.address).toEqual('server-3'); + expect(pool.has('server-3')).toBeTruthy(); + + loadBalancer.acquireConnection(_driver.READ).then(function (connection) { + expect(connection.address).toEqual('server-4'); + expect(pool.has('server-4')).toBeTruthy(); + + done(); + }); + }); + }); + + it('acquires write connection with up-to-date routing table', function (done) { + var pool = newPool(); + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], pool); + + loadBalancer.acquireConnection(_driver.WRITE).then(function (connection) { + expect(connection.address).toEqual('server-5'); + expect(pool.has('server-5')).toBeTruthy(); + + loadBalancer.acquireConnection(_driver.WRITE).then(function (connection) { + expect(connection.address).toEqual('server-6'); + expect(pool.has('server-6')).toBeTruthy(); + + done(); + }); + }); + }); + + it('throws for illegal access mode', function (done) { + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6']); + + loadBalancer.acquireConnection('WRONG').catch(function (error) { + expect(error.message).toEqual('Illegal mode WRONG'); + done(); + }); + }); + + it('refreshes stale routing table to get read connection', function (done) { + var pool = newPool(); + var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], pool, (0, _integer.int)(0), // expired routing table + { 'server-1': updatedRoutingTable }); + + loadBalancer.acquireConnection(_driver.READ).then(function (connection) { + expect(connection.address).toEqual('server-C'); + expect(pool.has('server-C')).toBeTruthy(); + + loadBalancer.acquireConnection(_driver.READ).then(function (connection) { + expect(connection.address).toEqual('server-D'); + expect(pool.has('server-D')).toBeTruthy(); + + done(); + }); + }); + }); + + it('refreshes stale routing table to get write connection', function (done) { + var pool = newPool(); + var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], pool, (0, _integer.int)(0), // expired routing table + { 'server-1': updatedRoutingTable }); + + loadBalancer.acquireConnection(_driver.WRITE).then(function (connection) { + expect(connection.address).toEqual('server-E'); + expect(pool.has('server-E')).toBeTruthy(); + + loadBalancer.acquireConnection(_driver.WRITE).then(function (connection) { + expect(connection.address).toEqual('server-F'); + expect(pool.has('server-F')).toBeTruthy(); + + done(); + }); + }); + }); + + it('refreshes stale routing table to get read connection when one router fails', function (done) { + var pool = newPool(); + var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], pool, (0, _integer.int)(0), // expired routing table + { + 'server-1': null, // returns no routing table + 'server-2': updatedRoutingTable + }); + + loadBalancer.acquireConnection(_driver.READ).then(function (connection) { + expect(connection.address).toEqual('server-C'); + expect(pool.has('server-C')).toBeTruthy(); + + loadBalancer.acquireConnection(_driver.READ).then(function (connection) { + expect(connection.address).toEqual('server-D'); + expect(pool.has('server-D')).toBeTruthy(); + + done(); + }); + }); + }); + + it('refreshes stale routing table to get write connection when one router fails', function (done) { + var pool = newPool(); + var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], pool, (0, _integer.int)(0), // expired routing table + { + 'server-1': null, // returns no routing table + 'server-2': updatedRoutingTable + }); + + loadBalancer.acquireConnection(_driver.WRITE).then(function (connection) { + expect(connection.address).toEqual('server-E'); + expect(pool.has('server-E')).toBeTruthy(); + + loadBalancer.acquireConnection(_driver.WRITE).then(function (connection) { + expect(connection.address).toEqual('server-F'); + expect(pool.has('server-F')).toBeTruthy(); + + done(); + }); + }); + }); + + it('refreshes routing table without readers to get read connection', function (done) { + var pool = newPool(); + var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], [], // no readers + ['server-3', 'server-4'], pool, _integer2.default.MAX_VALUE, { + 'server-1': null, // returns no routing table + 'server-2': updatedRoutingTable + }); + + loadBalancer.acquireConnection(_driver.READ).then(function (connection) { + expect(connection.address).toEqual('server-C'); + expect(pool.has('server-C')).toBeTruthy(); + + loadBalancer.acquireConnection(_driver.READ).then(function (connection) { + expect(connection.address).toEqual('server-D'); + expect(pool.has('server-D')).toBeTruthy(); + + done(); + }); + }); + }); + + it('refreshes routing table without writers to get write connection', function (done) { + var pool = newPool(); + var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], [], // no writers + pool, (0, _integer.int)(0), // expired routing table + { + 'server-1': null, // returns no routing table + 'server-2': updatedRoutingTable + }); + + loadBalancer.acquireConnection(_driver.WRITE).then(function (connection) { + expect(connection.address).toEqual('server-E'); + expect(pool.has('server-E')).toBeTruthy(); + + loadBalancer.acquireConnection(_driver.WRITE).then(function (connection) { + expect(connection.address).toEqual('server-F'); + expect(pool.has('server-F')).toBeTruthy(); + + done(); + }); + }); + }); + + it('throws when all routers return nothing while getting read connection', function (done) { + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], newPool(), (0, _integer.int)(0), // expired routing table + { + 'server-1': null, // returns no routing table + 'server-2': null // returns no routing table + }); + + loadBalancer.acquireConnection(_driver.READ).catch(function (error) { + expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); + done(); + }); + }); + + it('throws when all routers return nothing while getting write connection', function (done) { + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], newPool(), (0, _integer.int)(0), // expired routing table + { + 'server-1': null, // returns no routing table + 'server-2': null // returns no routing table + }); + + loadBalancer.acquireConnection(_driver.WRITE).catch(function (error) { + expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); done(); }); }); - it('should return resolved promise on release', function (done) { - _connectionHolder.EMPTY_CONNECTION_HOLDER.releaseConnection().then(function () { + it('throws when all routers return routing tables without readers while getting read connection', function (done) { + var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], [], // no readers - table can't satisfy connection requirement + ['server-C', 'server-D']); + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], newPool(), (0, _integer.int)(0), // expired routing table + { + 'server-1': updatedRoutingTable, + 'server-2': updatedRoutingTable + }); + + loadBalancer.acquireConnection(_driver.READ).catch(function (error) { + expect(error.code).toEqual(_error.SESSION_EXPIRED); done(); }); }); - it('should return resolved promise on close', function (done) { - _connectionHolder.EMPTY_CONNECTION_HOLDER.close().then(function () { + it('throws when all routers return routing tables without writers while getting write connection', function (done) { + var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], [] // no writers - table can't satisfy connection requirement + ); + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], newPool(), (0, _integer.int)(0), // expired routing table + { + 'server-1': updatedRoutingTable, + 'server-2': updatedRoutingTable + }); + + loadBalancer.acquireConnection(_driver.WRITE).catch(function (error) { + expect(error.code).toEqual(_error.SESSION_EXPIRED); done(); }); }); -}); -describe('ConnectionHolder', function () { + it('throws when stale routing table without routers while getting read connection', function (done) { + var loadBalancer = newLoadBalancer([], // no routers + ['server-3', 'server-4'], ['server-5', 'server-6'], newPool(), (0, _integer.int)(0) // expired routing table + ); - it('should acquire new connection during initialization', function () { - var connectionProvider = new RecordingConnectionProvider([new _fakeConnection2.default()]); - var connectionHolder = new _connectionHolder2.default(_driver.READ, connectionProvider); + loadBalancer.acquireConnection(_driver.READ).catch(function (error) { + expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); + done(); + }); + }); - connectionHolder.initializeConnection(); + it('throws when stale routing table without routers while getting write connection', function (done) { + var loadBalancer = newLoadBalancer([], // no routers + ['server-3', 'server-4'], ['server-5', 'server-6'], newPool(), (0, _integer.int)(0) // expired routing table + ); - expect(connectionProvider.acquireConnectionInvoked).toBe(1); + loadBalancer.acquireConnection(_driver.WRITE).catch(function (error) { + expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); + done(); + }); }); - it('should return acquired during initialization connection', function (done) { - var connection = new _fakeConnection2.default(); - var connectionProvider = newSingleConnectionProvider(connection); - var connectionHolder = new _connectionHolder2.default(_driver.READ, connectionProvider); - - connectionHolder.initializeConnection(); + it('updates routing table after refresh', function (done) { + var pool = newPool(); + var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], pool, (0, _integer.int)(0), // expired routing table + { + 'server-1': updatedRoutingTable + }); - connectionHolder.getConnection().then(function (connection) { - expect(connection).toBe(connection); + loadBalancer.acquireConnection(_driver.READ).then(function () { + expectRoutingTable(loadBalancer, ['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); + expectPoolToNotContain(pool, ['server-1', 'server-2', 'server-3', 'server-4', 'server-5', 'server-6']); done(); }); }); - it('should release connection with single user', function (done) { - var connection = new _fakeConnection2.default(); - var connectionProvider = newSingleConnectionProvider(connection); - var connectionHolder = new _connectionHolder2.default(_driver.READ, connectionProvider); - - connectionHolder.initializeConnection(); + it('forgets all routers when they fail while acquiring read connection', function (done) { + var loadBalancer = newLoadBalancer(['server-1', 'server-2', 'server-3'], ['server-4', 'server-5'], ['server-6', 'server-7'], newPool(), (0, _integer.int)(0) // expired routing table + ); - connectionHolder.releaseConnection().then(function () { - expect(connection.isReleasedOnce()).toBeTruthy(); + loadBalancer.acquireConnection(_driver.READ).catch(function (error) { + expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); + expectRoutingTable(loadBalancer, [], ['server-4', 'server-5'], ['server-6', 'server-7']); done(); }); }); - it('should not release connection with multiple users', function (done) { - var connection = new _fakeConnection2.default(); - var connectionProvider = newSingleConnectionProvider(connection); - var connectionHolder = new _connectionHolder2.default(_driver.READ, connectionProvider); - - connectionHolder.initializeConnection(); - connectionHolder.initializeConnection(); - connectionHolder.initializeConnection(); + it('forgets all routers when they fail while acquiring write connection', function (done) { + var loadBalancer = newLoadBalancer(['server-1', 'server-2', 'server-3'], ['server-4', 'server-5'], ['server-6', 'server-7'], newPool(), (0, _integer.int)(0) // expired routing table + ); - connectionHolder.releaseConnection().then(function () { - expect(connection.isNeverReleased()).toBeTruthy(); + loadBalancer.acquireConnection(_driver.WRITE).catch(function (error) { + expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); + expectRoutingTable(loadBalancer, [], ['server-4', 'server-5'], ['server-6', 'server-7']); done(); }); }); - it('should release connection with multiple users when all users release', function (done) { - var connection = new _fakeConnection2.default(); - var connectionProvider = newSingleConnectionProvider(connection); - var connectionHolder = new _connectionHolder2.default(_driver.READ, connectionProvider); + it('uses seed router address when all existing routers fail', function (done) { + var updatedRoutingTable = newRoutingTable(['server-A', 'server-B', 'server-C'], ['server-D', 'server-E'], ['server-F', 'server-G']); - connectionHolder.initializeConnection(); - connectionHolder.initializeConnection(); - connectionHolder.initializeConnection(); + var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-0'], // seed router address resolves just to itself + ['server-1', 'server-2', 'server-3'], ['server-4', 'server-5'], ['server-6', 'server-7'], (0, _integer.int)(0), // expired routing table + { + 'server-1': null, // returns no routing table + 'server-2': null, // returns no routing table + 'server-3': null, // returns no routing table + 'server-0': updatedRoutingTable + }); - connectionHolder.releaseConnection().then(function () { - connectionHolder.releaseConnection().then(function () { - connectionHolder.releaseConnection().then(function () { - expect(connection.isReleasedOnce()).toBeTruthy(); - done(); - }); + loadBalancer.acquireConnection(_driver.READ).then(function (connection1) { + expect(connection1.address).toEqual('server-D'); + + loadBalancer.acquireConnection(_driver.WRITE).then(function (connection2) { + expect(connection2.address).toEqual('server-F'); + + expectRoutingTable(loadBalancer, ['server-A', 'server-B', 'server-C'], ['server-D', 'server-E'], ['server-F', 'server-G']); + done(); }); }); }); - it('should do nothing when closed and not initialized', function (done) { - var connection = new _fakeConnection2.default(); - var connectionProvider = newSingleConnectionProvider(connection); - var connectionHolder = new _connectionHolder2.default(_driver.READ, connectionProvider); + it('uses resolved seed router address when all existing routers fail', function (done) { + var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); - connectionHolder.close().then(function () { - expect(connection.isNeverReleased()).toBeTruthy(); - done(); + var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-01'], // seed router address resolves to a different one + ['server-1', 'server-2', 'server-3'], ['server-4', 'server-5'], ['server-6', 'server-7'], (0, _integer.int)(0), // expired routing table + { + 'server-1': null, // returns no routing table + 'server-2': null, // returns no routing table + 'server-3': null, // returns no routing table + 'server-01': updatedRoutingTable }); - }); - it('should close even when users exist', function (done) { - var connection = new _fakeConnection2.default(); - var connectionProvider = newSingleConnectionProvider(connection); - var connectionHolder = new _connectionHolder2.default(_driver.READ, connectionProvider); + loadBalancer.acquireConnection(_driver.WRITE).then(function (connection1) { + expect(connection1.address).toEqual('server-E'); - connectionHolder.initializeConnection(); - connectionHolder.initializeConnection(); + loadBalancer.acquireConnection(_driver.READ).then(function (connection2) { + expect(connection2.address).toEqual('server-C'); - connectionHolder.close().then(function () { - expect(connection.isReleasedOnceOnSessionClose()).toBeTruthy(); - done(); + expectRoutingTable(loadBalancer, ['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); + done(); + }); }); }); - it('should initialize new connection after releasing current one', function (done) { - var connection1 = new _fakeConnection2.default(); - var connection2 = new _fakeConnection2.default(); - var connectionProvider = new RecordingConnectionProvider([connection1, connection2]); - var connectionHolder = new _connectionHolder2.default(_driver.READ, connectionProvider); + it('uses resolved seed router address that returns correct routing table when all existing routers fail', function (done) { + var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C'], ['server-D', 'server-E']); - connectionHolder.initializeConnection(); + var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-01', 'server-02', 'server-03'], // seed router address resolves to 3 different addresses + ['server-1'], ['server-2'], ['server-3'], (0, _integer.int)(0), // expired routing table + { + 'server-1': null, // returns no routing table + 'server-01': null, // returns no routing table + 'server-02': null, // returns no routing table + 'server-03': updatedRoutingTable + }); - connectionHolder.releaseConnection().then(function () { - expect(connection1.isReleasedOnce()).toBeTruthy(); + loadBalancer.acquireConnection(_driver.WRITE).then(function (connection1) { + expect(connection1.address).toEqual('server-D'); - connectionHolder.initializeConnection(); - connectionHolder.releaseConnection().then(function () { - expect(connection2.isReleasedOnce()).toBeTruthy(); + loadBalancer.acquireConnection(_driver.WRITE).then(function (connection2) { + expect(connection2.address).toEqual('server-E'); + + expectRoutingTable(loadBalancer, ['server-A', 'server-B'], ['server-C'], ['server-D', 'server-E']); done(); }); }); }); - it('should initialize new connection after being closed', function (done) { - var connection1 = new _fakeConnection2.default(); - var connection2 = new _fakeConnection2.default(); - var connectionProvider = new RecordingConnectionProvider([connection1, connection2]); - var connectionHolder = new _connectionHolder2.default(_driver.READ, connectionProvider); + it('fails when both existing routers and seed router fail to return a routing table', function (done) { + var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-0'], // seed router address resolves just to itself + ['server-1', 'server-2', 'server-3'], ['server-4', 'server-5'], ['server-6'], (0, _integer.int)(0), // expired routing table + { + 'server-1': null, // returns no routing table + 'server-2': null, // returns no routing table + 'server-3': null, // returns no routing table + 'server-0': null // returns no routing table + }); - connectionHolder.initializeConnection(); + loadBalancer.acquireConnection(_driver.READ).catch(function (error) { + expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); - connectionHolder.close().then(function () { - expect(connection1.isReleasedOnceOnSessionClose()).toBeTruthy(); + expectRoutingTable(loadBalancer, [], // all routers were forgotten because they failed + ['server-4', 'server-5'], ['server-6']); + + loadBalancer.acquireConnection(_driver.WRITE).catch(function (error) { + expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); + + expectRoutingTable(loadBalancer, [], // all routers were forgotten because they failed + ['server-4', 'server-5'], ['server-6']); - connectionHolder.initializeConnection(); - connectionHolder.close().then(function () { - expect(connection2.isReleasedOnceOnSessionClose()).toBeTruthy(); done(); }); }); }); -}); -var RecordingConnectionProvider = function (_SingleConnectionProv) { - (0, _inherits3.default)(RecordingConnectionProvider, _SingleConnectionProv); + it('fails when both existing routers and resolved seed router fail to return a routing table', function (done) { + var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-01'], // seed router address resolves to a different one + ['server-1', 'server-2'], ['server-3'], ['server-4'], (0, _integer.int)(0), // expired routing table + { + 'server-1': null, // returns no routing table + 'server-2': null, // returns no routing table + 'server-01': null // returns no routing table + }); - function RecordingConnectionProvider(connections) { - (0, _classCallCheck3.default)(this, RecordingConnectionProvider); + loadBalancer.acquireConnection(_driver.WRITE).catch(function (error) { + expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); - var _this = (0, _possibleConstructorReturn3.default)(this, (RecordingConnectionProvider.__proto__ || (0, _getPrototypeOf2.default)(RecordingConnectionProvider)).call(this, _promise2.default.resolve())); + expectRoutingTable(loadBalancer, [], // all routers were forgotten because they failed + ['server-3'], ['server-4']); - _this.connectionPromises = connections.map(function (conn) { - return _promise2.default.resolve(conn); + loadBalancer.acquireConnection(_driver.READ).catch(function (error) { + expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); + + expectRoutingTable(loadBalancer, [], // all routers were forgotten because they failed + ['server-3'], ['server-4']); + + done(); + }); }); - _this.acquireConnectionInvoked = 0; - return _this; - } + }); - (0, _createClass3.default)(RecordingConnectionProvider, [{ - key: 'acquireConnection', - value: function acquireConnection(mode) { - return this.connectionPromises[this.acquireConnectionInvoked++]; - } - }]); - return RecordingConnectionProvider; -}(_connectionProviders.SingleConnectionProvider); + it('fails when both existing routers and all resolved seed routers fail to return a routing table', function (done) { + var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-02', 'server-01'], // seed router address resolves to 2 different addresses + ['server-1', 'server-2', 'server-3'], ['server-4'], ['server-5'], (0, _integer.int)(0), // expired routing table + { + 'server-1': null, // returns no routing table + 'server-2': null, // returns no routing table + 'server-3': null, // returns no routing table + 'server-01': null, // returns no routing table + 'server-02': null // returns no routing table + }); -function newSingleConnectionProvider(connection) { - return new _connectionProviders.SingleConnectionProvider(_promise2.default.resolve(connection)); -} + loadBalancer.acquireConnection(_driver.READ).catch(function (error) { + expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); -},{"../../src/v1/driver":310,"../../src/v1/internal/connection-holder":320,"../../src/v1/internal/connection-providers":321,"./fake-connection":347,"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/core-js/promise":59,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67}],345:[function(require,module,exports){ -'use strict'; + expectRoutingTable(loadBalancer, [], // all known seed servers failed to return routing tables and were forgotten + ['server-4'], ['server-5']); -var _promise = require('babel-runtime/core-js/promise'); + loadBalancer.acquireConnection(_driver.WRITE).catch(function (error) { + expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); -var _promise2 = _interopRequireDefault(_promise); + expectRoutingTable(loadBalancer, [], // all known seed servers failed to return routing tables and were forgotten + ['server-4'], ['server-5']); -var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); + done(); + }); + }); + }); -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + it('uses seed router when no existing routers', function (done) { + var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C'], ['server-D']); -var _createClass2 = require('babel-runtime/helpers/createClass'); + var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-0'], // seed router address resolves just to itself + [], // no routers in the known routing table + ['server-1', 'server-2'], ['server-3'], _integer2.default.MAX_VALUE, // not expired + { + 'server-0': updatedRoutingTable + }); -var _createClass3 = _interopRequireDefault(_createClass2); + loadBalancer.acquireConnection(_driver.WRITE).then(function (connection1) { + expect(connection1.address).toEqual('server-D'); -var _driver = require('../../src/v1/driver'); + loadBalancer.acquireConnection(_driver.READ).then(function (connection2) { + expect(connection2.address).toEqual('server-C'); -var _integer = require('../../src/v1/integer'); + expectRoutingTable(loadBalancer, ['server-A', 'server-B'], ['server-C'], ['server-D']); + done(); + }); + }); + }); -var _integer2 = _interopRequireDefault(_integer); + it('uses resolved seed router when no existing routers', function (done) { + var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-F', 'server-E']); -var _error = require('../../src/v1/error'); + var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-01'], // seed router address resolves to a different one + [], // no routers in the known routing table + ['server-1', 'server-2'], ['server-3', 'server-4'], _integer2.default.MAX_VALUE, // not expired + { + 'server-01': updatedRoutingTable + }); -var _routingTable = require('../../src/v1/internal/routing-table'); + loadBalancer.acquireConnection(_driver.READ).then(function (connection1) { + expect(connection1.address).toEqual('server-C'); -var _routingTable2 = _interopRequireDefault(_routingTable); + loadBalancer.acquireConnection(_driver.WRITE).then(function (connection2) { + expect(connection2.address).toEqual('server-F'); -var _roundRobinArray = require('../../src/v1/internal/round-robin-array'); + expectRoutingTable(loadBalancer, ['server-A', 'server-B'], ['server-C', 'server-D'], ['server-F', 'server-E']); + done(); + }); + }); + }); -var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); + it('uses resolved seed router that returns routing table when no existing routers exist', function (done) { + var updatedRoutingTable = newRoutingTable(['server-A', 'server-B', 'server-C'], ['server-D', 'server-E'], ['server-F']); -var _connectionProviders = require('../../src/v1/internal/connection-providers'); + var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-02', 'server-01', 'server-03'], // seed router address resolves to 3 different addresses + [], // no routers in the known routing table + ['server-1'], ['server-2', 'server-3'], _integer2.default.MAX_VALUE, // not expired + { + 'server-01': null, // returns no routing table + 'server-02': null, // returns no routing table + 'server-03': updatedRoutingTable + }); -var _pool = require('../../src/v1/internal/pool'); + loadBalancer.acquireConnection(_driver.WRITE).then(function (connection1) { + expect(connection1.address).toEqual('server-F'); -var _pool2 = _interopRequireDefault(_pool); + loadBalancer.acquireConnection(_driver.READ).then(function (connection2) { + expect(connection2.address).toEqual('server-D'); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + expectRoutingTable(loadBalancer, ['server-A', 'server-B', 'server-C'], ['server-D', 'server-E'], ['server-F']); + done(); + }); + }); + }); -var NO_OP_DRIVER_CALLBACK = function NO_OP_DRIVER_CALLBACK() {}; /** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + it('ignores already probed routers after seed router resolution', function (done) { + var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); -describe('DirectConnectionProvider', function () { + var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-1', 'server-01', 'server-2', 'server-02'], // seed router address resolves to 4 different addresses + ['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], (0, _integer.int)(0), // expired routing table + { + 'server-1': null, // returns no routing table + 'server-01': null, // returns no routing table + 'server-2': null, // returns no routing table + 'server-02': updatedRoutingTable + }); + var usedRouterArrays = []; + setupLoadBalancerToRememberRouters(loadBalancer, usedRouterArrays); - it('acquires connection from the pool', function (done) { - var pool = newPool(); - var connectionProvider = newDirectConnectionProvider('localhost:123', pool); + loadBalancer.acquireConnection(_driver.READ).then(function (connection1) { + expect(connection1.address).toEqual('server-C'); - connectionProvider.acquireConnection(_driver.READ).then(function (connection) { - expect(connection).toBeDefined(); - expect(connection.address).toEqual('localhost:123'); - expect(connection.release).toBeDefined(); - expect(pool.has('localhost:123')).toBeTruthy(); + loadBalancer.acquireConnection(_driver.WRITE).then(function (connection2) { + expect(connection2.address).toEqual('server-E'); - done(); + // two sets of routers probed: + // 1) existing routers 'server-1' & 'server-2' + // 2) resolved routers 'server-01' & 'server-02' + expect(usedRouterArrays.length).toEqual(2); + expect(usedRouterArrays[0]).toEqual(['server-1', 'server-2']); + expect(usedRouterArrays[1]).toEqual(['server-01', 'server-02']); + + expectRoutingTable(loadBalancer, ['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); + done(); + }); }); }); -}); -describe('LoadBalancer', function () { + it('throws session expired when refreshed routing table has no readers', function (done) { + var pool = newPool(); + var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], [], // no readers + ['server-C', 'server-D']); + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], pool, (0, _integer.int)(0), // expired routing table + { + 'server-1': updatedRoutingTable + }); - it('can forget address', function () { - var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-2'], ['server-2', 'server-4']); + loadBalancer.acquireConnection(_driver.READ).catch(function (error) { + expect(error.code).toEqual(_error.SESSION_EXPIRED); + done(); + }); + }); - loadBalancer.forget('server-2'); + it('throws session expired when refreshed routing table has no writers', function (done) { + var pool = newPool(); + var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], [] // no writers + ); + var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], pool, (0, _integer.int)(0), // expired routing table + { + 'server-1': updatedRoutingTable + }); - expectRoutingTable(loadBalancer, ['server-1', 'server-2'], ['server-3'], ['server-4']); + loadBalancer.acquireConnection(_driver.WRITE).catch(function (error) { + expect(error.code).toEqual(_error.SESSION_EXPIRED); + done(); + }); }); - it('can not forget unknown address', function () { - var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6']); + it('should use resolved seed router after accepting table with no writers', function (done) { + var routingTable1 = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], [] // no writers + ); + var routingTable2 = newRoutingTable(['server-AA', 'server-BB'], ['server-CC', 'server-DD'], ['server-EE']); - loadBalancer.forget('server-42'); + var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-02', 'server-01'], // seed router address resolves to 2 different addresses + ['server-1'], ['server-2', 'server-3'], ['server-4', 'server-5'], (0, _integer.int)(0), // expired routing table + { + 'server-1': routingTable1, + 'server-A': routingTable1, + 'server-B': routingTable1, + 'server-01': null, // returns no routing table + 'server-02': routingTable2 + }); - expectRoutingTable(loadBalancer, ['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6']); - }); + loadBalancer.acquireConnection(_driver.READ).then(function (connection1) { + expect(connection1.address).toEqual('server-C'); - it('purges connections when address is forgotten', function () { - var pool = newPool(); + loadBalancer.acquireConnection(_driver.READ).then(function (connection2) { + expect(connection2.address).toEqual('server-D'); - pool.acquire('server-1'); - pool.acquire('server-3'); - pool.acquire('server-5'); - expectPoolToContain(pool, ['server-1', 'server-3', 'server-5']); + expectRoutingTable(loadBalancer, ['server-A', 'server-B'], ['server-C', 'server-D'], []); - var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-2'], ['server-2', 'server-4'], pool); + loadBalancer.acquireConnection(_driver.WRITE).then(function (connection3) { + expect(connection3.address).toEqual('server-EE'); - loadBalancer.forget('server-1'); - loadBalancer.forget('server-5'); + expectRoutingTable(loadBalancer, ['server-AA', 'server-BB'], ['server-CC', 'server-DD'], ['server-EE']); - expectPoolToContain(pool, ['server-3']); - expectPoolToNotContain(pool, ['server-1', 'server-5']); + done(); + }); + }); + }); }); +}); - it('can forget writer address', function () { - var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-2'], ['server-2', 'server-4']); - - loadBalancer.forgetWriter('server-2'); +function newDirectConnectionProvider(address, pool) { + return new _connectionProviders.DirectConnectionProvider(address, pool, NO_OP_DRIVER_CALLBACK); +} - expectRoutingTable(loadBalancer, ['server-1', 'server-2'], ['server-3', 'server-2'], ['server-4']); - }); +function newLoadBalancer(routers, readers, writers) { + var pool = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; + var expirationTime = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : _integer2.default.MAX_VALUE; + var routerToRoutingTable = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - it('can not forget unknown writer address', function () { - var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6']); + var seedRouter = 'server-non-existing-seed-router'; + return newLoadBalancerWithSeedRouter(seedRouter, [seedRouter], routers, readers, writers, expirationTime, routerToRoutingTable, pool); +} - loadBalancer.forgetWriter('server-42'); +function newLoadBalancerWithSeedRouter(seedRouter, seedRouterResolved, routers, readers, writers) { + var expirationTime = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : _integer2.default.MAX_VALUE; + var routerToRoutingTable = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {}; + var connectionPool = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null; - expectRoutingTable(loadBalancer, ['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6']); - }); + var loadBalancer = new _connectionProviders.LoadBalancer(seedRouter, {}, connectionPool || newPool(), NO_OP_DRIVER_CALLBACK); + loadBalancer._routingTable = new _routingTable2.default(new _roundRobinArray2.default(routers), new _roundRobinArray2.default(readers), new _roundRobinArray2.default(writers), expirationTime); + loadBalancer._rediscovery = new FakeRediscovery(routerToRoutingTable); + loadBalancer._hostNameResolver = new FakeDnsResolver(seedRouterResolved); + return loadBalancer; +} - it('initializes routing table with the given router', function () { - var loadBalancer = new _connectionProviders.LoadBalancer('server-ABC', newPool(), NO_OP_DRIVER_CALLBACK); +function newRoutingTable(routers, readers, writers) { + var expirationTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _integer2.default.MAX_VALUE; - expectRoutingTable(loadBalancer, ['server-ABC'], [], []); - }); + return new _routingTable2.default(new _roundRobinArray2.default(routers), new _roundRobinArray2.default(readers), new _roundRobinArray2.default(writers), expirationTime); +} - it('acquires read connection with up-to-date routing table', function (done) { - var pool = newPool(); - var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], pool); +function setupLoadBalancerToRememberRouters(loadBalancer, routersArray) { + var originalFetch = loadBalancer._fetchRoutingTable.bind(loadBalancer); + var rememberingFetch = function rememberingFetch(routerAddresses, routingTable) { + routersArray.push(routerAddresses); + return originalFetch(routerAddresses, routingTable); + }; + loadBalancer._fetchRoutingTable = rememberingFetch; +} - loadBalancer.acquireConnection(_driver.READ).then(function (connection) { - expect(connection.address).toEqual('server-3'); - expect(pool.has('server-3')).toBeTruthy(); +function newPool() { + return new _pool2.default(FakeConnection.create); +} - loadBalancer.acquireConnection(_driver.READ).then(function (connection) { - expect(connection.address).toEqual('server-4'); - expect(pool.has('server-4')).toBeTruthy(); +function expectRoutingTable(loadBalancer, routers, readers, writers) { + expect(loadBalancer._routingTable.routers.toArray()).toEqual(routers); + expect(loadBalancer._routingTable.readers.toArray()).toEqual(readers); + expect(loadBalancer._routingTable.writers.toArray()).toEqual(writers); +} - done(); - }); - }); +function expectPoolToContain(pool, addresses) { + addresses.forEach(function (address) { + expect(pool.has(address)).toBeTruthy(); + }); +} + +function expectPoolToNotContain(pool, addresses) { + addresses.forEach(function (address) { + expect(pool.has(address)).toBeFalsy(); }); +} - it('acquires write connection with up-to-date routing table', function (done) { - var pool = newPool(); - var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], pool); +var FakeConnection = function () { + function FakeConnection(address, release) { + (0, _classCallCheck3.default)(this, FakeConnection); - loadBalancer.acquireConnection(_driver.WRITE).then(function (connection) { - expect(connection.address).toEqual('server-5'); - expect(pool.has('server-5')).toBeTruthy(); + this.address = address; + this.release = release; + } - loadBalancer.acquireConnection(_driver.WRITE).then(function (connection) { - expect(connection.address).toEqual('server-6'); - expect(pool.has('server-6')).toBeTruthy(); + (0, _createClass3.default)(FakeConnection, [{ + key: 'initializationCompleted', + value: function initializationCompleted() { + return _promise2.default.resolve(this); + } + }], [{ + key: 'create', + value: function create(address, release) { + return new FakeConnection(address, release); + } + }]); + return FakeConnection; +}(); - done(); - }); - }); - }); +var FakeRediscovery = function () { + function FakeRediscovery(routerToRoutingTable) { + (0, _classCallCheck3.default)(this, FakeRediscovery); - it('throws for illegal access mode', function (done) { - var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6']); + this._routerToRoutingTable = routerToRoutingTable; + } - loadBalancer.acquireConnection('WRONG').catch(function (error) { - expect(error.message).toEqual('Illegal mode WRONG'); - done(); - }); - }); + (0, _createClass3.default)(FakeRediscovery, [{ + key: 'lookupRoutingTableOnRouter', + value: function lookupRoutingTableOnRouter(ignored, router) { + return this._routerToRoutingTable[router]; + } + }]); + return FakeRediscovery; +}(); - it('refreshes stale routing table to get read connection', function (done) { - var pool = newPool(); - var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); - var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], pool, (0, _integer.int)(0), // expired routing table - { 'server-1': updatedRoutingTable }); +var FakeDnsResolver = function () { + function FakeDnsResolver(addresses) { + (0, _classCallCheck3.default)(this, FakeDnsResolver); - loadBalancer.acquireConnection(_driver.READ).then(function (connection) { - expect(connection.address).toEqual('server-C'); - expect(pool.has('server-C')).toBeTruthy(); + this._addresses = addresses; + } - loadBalancer.acquireConnection(_driver.READ).then(function (connection) { - expect(connection.address).toEqual('server-D'); - expect(pool.has('server-D')).toBeTruthy(); + (0, _createClass3.default)(FakeDnsResolver, [{ + key: 'resolve', + value: function resolve(seedRouter) { + return _promise2.default.resolve(this._addresses ? this._addresses : [seedRouter]); + } + }]); + return FakeDnsResolver; +}(); - done(); - }); - }); - }); +},{"../../src/v1/driver":355,"../../src/v1/error":356,"../../src/v1/integer":359,"../../src/v1/internal/connection-providers":367,"../../src/v1/internal/pool":372,"../../src/v1/internal/round-robin-array":374,"../../src/v1/internal/routing-table":375,"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],394:[function(require,module,exports){ +'use strict'; - it('refreshes stale routing table to get write connection', function (done) { - var pool = newPool(); - var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); - var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], pool, (0, _integer.int)(0), // expired routing table - { 'server-1': updatedRoutingTable }); +var _chDummy = require('../../src/v1/internal/ch-dummy'); - loadBalancer.acquireConnection(_driver.WRITE).then(function (connection) { - expect(connection.address).toEqual('server-E'); - expect(pool.has('server-E')).toBeTruthy(); +var DummyChannel = _interopRequireWildcard(_chDummy); - loadBalancer.acquireConnection(_driver.WRITE).then(function (connection) { - expect(connection.address).toEqual('server-F'); - expect(pool.has('server-F')).toBeTruthy(); +var _connector = require('../../src/v1/internal/connector'); - done(); - }); - }); - }); +var _packstream = require('../../src/v1/internal/packstream'); - it('refreshes stale routing table to get read connection when one router fails', function (done) { - var pool = newPool(); - var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); - var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], pool, (0, _integer.int)(0), // expired routing table - { - 'server-1': null, // returns no routing table - 'server-2': updatedRoutingTable - }); +var _chunking = require('../../src/v1/internal/chunking'); - loadBalancer.acquireConnection(_driver.READ).then(function (connection) { - expect(connection.address).toEqual('server-C'); - expect(pool.has('server-C')).toBeTruthy(); +var _buf = require('../../src/v1/internal/buf'); - loadBalancer.acquireConnection(_driver.READ).then(function (connection) { - expect(connection.address).toEqual('server-D'); - expect(pool.has('server-D')).toBeTruthy(); +var _error = require('../../src/v1/error'); - done(); - }); - }); - }); +var _sharedNeo4j = require('../internal/shared-neo4j'); - it('refreshes stale routing table to get write connection', function (done) { - var pool = newPool(); - var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); - var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], pool, (0, _integer.int)(0), // expired routing table - { - 'server-1': null, // returns no routing table - 'server-2': updatedRoutingTable - }); +var _sharedNeo4j2 = _interopRequireDefault(_sharedNeo4j); - loadBalancer.acquireConnection(_driver.WRITE).then(function (connection) { - expect(connection.address).toEqual('server-E'); - expect(pool.has('server-E')).toBeTruthy(); +var _serverVersion = require('../../src/v1/internal/server-version'); - loadBalancer.acquireConnection(_driver.WRITE).then(function (connection) { - expect(connection.address).toEqual('server-F'); - expect(pool.has('server-F')).toBeTruthy(); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - done(); - }); - }); - }); +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - it('refreshes stale routing table to get read connection when one router returns illegal response', function (done) { - var pool = newPool(); - var newIllegalRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], [] // no writers - table is illegal and should be skipped - ); - var newLegalRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); - var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], pool, (0, _integer.int)(0), // expired routing table - { - 'server-1': newIllegalRoutingTable, - 'server-2': newLegalRoutingTable - }); +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ - loadBalancer.acquireConnection(_driver.READ).then(function (connection) { - expect(connection.address).toEqual('server-C'); - expect(pool.has('server-C')).toBeTruthy(); +describe('connector', function () { - loadBalancer.acquireConnection(_driver.READ).then(function (connection) { - expect(connection.address).toEqual('server-D'); - expect(pool.has('server-D')).toBeTruthy(); + it('should read/write basic messages', function (done) { + // Given + var conn = (0, _connector.connect)("bolt://localhost"); + // When + conn.initialize("mydriver/0.0.0", basicAuthToken(), { + onCompleted: function onCompleted(msg) { + expect(msg).not.toBeNull(); + conn.close(); done(); - }); + }, + onError: console.log }); + conn.sync(); }); - it('refreshes stale routing table to get write connection when one router returns illegal response', function (done) { - var pool = newPool(); - var newIllegalRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], [] // no writers - table is illegal and should be skipped - ); - var newLegalRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); - var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], pool, (0, _integer.int)(0), // expired routing table - { - 'server-1': newIllegalRoutingTable, - 'server-2': newLegalRoutingTable - }); - - loadBalancer.acquireConnection(_driver.WRITE).then(function (connection) { - expect(connection.address).toEqual('server-E'); - expect(pool.has('server-E')).toBeTruthy(); - - loadBalancer.acquireConnection(_driver.WRITE).then(function (connection) { - expect(connection.address).toEqual('server-F'); - expect(pool.has('server-F')).toBeTruthy(); + it('should retrieve stream', function (done) { + // Given + var conn = (0, _connector.connect)("bolt://localhost"); + // When + var records = []; + conn.initialize("mydriver/0.0.0", basicAuthToken()); + conn.run("RETURN 1.0", {}); + conn.pullAll({ + onNext: function onNext(record) { + records.push(record); + }, + onCompleted: function onCompleted() { + expect(records[0][0]).toBe(1); + conn.close(); done(); - }); + } }); + conn.sync(); }); - it('throws when all routers return nothing while getting read connection', function (done) { - var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], newPool(), (0, _integer.int)(0), // expired routing table - { - 'server-1': null, // returns no routing table - 'server-2': null // returns no routing table - }); + it('should use DummyChannel to read what gets written', function (done) { + // Given + var observer = DummyChannel.observer; + var conn = (0, _connector.connect)("bolt://localhost", { channel: DummyChannel.channel }); - loadBalancer.acquireConnection(_driver.READ).catch(function (error) { - expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); - done(); - }); + // When + conn.initialize("mydriver/0.0.0", basicAuthToken()); + conn.run("RETURN 1", {}); + conn.sync(); + expect(observer.instance.toHex()).toBe('60 60 b0 17 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 44 b2 01 8e 6d 79 64 72 69 76 65 72 2f 30 2e 30 2e 30 a3 86 73 63 68 65 6d 65 85 62 61 73 69 63 89 70 72 69 6e 63 69 70 61 6c 85 6e 65 6f 34 6a 8b 63 72 65 64 65 6e 74 69 61 6c 73 88 70 61 73 73 77 6f 72 64 00 00 00 0c b2 10 88 52 45 54 55 52 4e 20 31 a0 00 00 '); + done(); }); - it('throws when all routers return nothing while getting write connection', function (done) { - var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], newPool(), (0, _integer.int)(0), // expired routing table - { - 'server-1': null, // returns no routing table - 'server-2': null // returns no routing table - }); + it('should provide error message when connecting to http-port', function (done) { + // Given + var conn = (0, _connector.connect)("bolt://localhost:7474", { encrypted: false }); - loadBalancer.acquireConnection(_driver.WRITE).catch(function (error) { - expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); - done(); + // When + conn.initialize("mydriver/0.0.0", basicAuthToken(), { + onCompleted: function onCompleted(msg) {}, + onError: function onError(err) { + //only node gets the pretty error message + if (require('../../lib/v1/internal/ch-node.js').available) { + expect(err.message).toBe("Server responded HTTP. Make sure you are not trying to connect to the http endpoint " + "(HTTP defaults to port 7474 whereas BOLT defaults to port 7687)"); + } + done(); + } }); + conn.sync(); }); - it('throws when all routers return illegal routing tables while getting read connection', function (done) { - var newIllegalRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], [] // no writers - table is illegal and should be skipped - ); - var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], newPool(), (0, _integer.int)(0), // expired routing table - { - 'server-1': newIllegalRoutingTable, - 'server-2': newIllegalRoutingTable - }); + it('should convert failure messages to errors', function (done) { + var channel = new DummyChannel.channel(); + var connection = new _connector.Connection(channel, 'bolt://localhost'); - loadBalancer.acquireConnection(_driver.READ).catch(function (error) { - expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); - done(); - }); - }); + var errorCode = 'Neo.ClientError.Schema.ConstraintValidationFailed'; + var errorMessage = 'Node 0 already exists with label User and property "email"=[john@doe.com]'; - it('throws when all routers return illegal routing tables while getting write connection', function (done) { - var newIllegalRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], [] // no writers - table is illegal and should be skipped - ); - var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], newPool(), (0, _integer.int)(0), // expired routing table - { - 'server-1': newIllegalRoutingTable, - 'server-2': newIllegalRoutingTable + connection._queueObserver({ + onError: function onError(error) { + expectNeo4jError(error, errorCode, errorMessage); + done(); + } }); - loadBalancer.acquireConnection(_driver.WRITE).catch(function (error) { - expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); - done(); - }); + channel.onmessage(packedHandshakeMessage()); + channel.onmessage(packedFailureMessage(errorCode, errorMessage)); }); - it('throws when stale routing table without routers while getting read connection', function (done) { - var loadBalancer = newLoadBalancer([], // no routers - ['server-3', 'server-4'], ['server-5', 'server-6'], newPool(), (0, _integer.int)(0) // expired routing table - ); + it('should notify when connection initialization completes', function (done) { + var connection = (0, _connector.connect)('bolt://localhost'); - loadBalancer.acquireConnection(_driver.READ).catch(function (error) { - expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); + connection.initializationCompleted().then(function (initializedConnection) { + expect(initializedConnection).toBe(connection); done(); }); + + connection.initialize('mydriver/0.0.0', basicAuthToken()); }); - it('throws when stale routing table without routers while getting write connection', function (done) { - var loadBalancer = newLoadBalancer([], // no routers - ['server-3', 'server-4'], ['server-5', 'server-6'], newPool(), (0, _integer.int)(0) // expired routing table - ); + it('should notify when connection initialization fails', function (done) { + var connection = (0, _connector.connect)('bolt://localhost:7474'); // wrong port - loadBalancer.acquireConnection(_driver.WRITE).catch(function (error) { - expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); + connection.initializationCompleted().catch(function (error) { + expect(error).toBeDefined(); done(); }); + + connection.initialize('mydriver/0.0.0', basicAuthToken()); }); - it('updates routing table after refresh', function (done) { - var pool = newPool(); - var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); - var loadBalancer = newLoadBalancer(['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], pool, (0, _integer.int)(0), // expired routing table - { - 'server-1': updatedRoutingTable - }); + it('should notify provided observer when connection initialization completes', function (done) { + var connection = (0, _connector.connect)('bolt://localhost'); - loadBalancer.acquireConnection(_driver.READ).then(function () { - expectRoutingTable(loadBalancer, ['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); - expectPoolToNotContain(pool, ['server-1', 'server-2', 'server-3', 'server-4', 'server-5', 'server-6']); - done(); + connection.initialize('mydriver/0.0.0', basicAuthToken(), { + onCompleted: function onCompleted(metaData) { + expect(metaData).toBeDefined(); + done(); + } }); }); - it('forgets all routers when they fail while acquiring read connection', function (done) { - var loadBalancer = newLoadBalancer(['server-1', 'server-2', 'server-3'], ['server-4', 'server-5'], ['server-6', 'server-7'], newPool(), (0, _integer.int)(0) // expired routing table - ); + it('should notify provided observer when connection initialization fails', function (done) { + var connection = (0, _connector.connect)('bolt://localhost:7474'); // wrong port - loadBalancer.acquireConnection(_driver.READ).catch(function (error) { - expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); - expectRoutingTable(loadBalancer, [], ['server-4', 'server-5'], ['server-6', 'server-7']); - done(); + connection.initialize('mydriver/0.0.0', basicAuthToken(), { + onError: function onError(error) { + expect(error).toBeDefined(); + done(); + } }); }); - it('forgets all routers when they fail while acquiring write connection', function (done) { - var loadBalancer = newLoadBalancer(['server-1', 'server-2', 'server-3'], ['server-4', 'server-5'], ['server-6', 'server-7'], newPool(), (0, _integer.int)(0) // expired routing table - ); + it('should have server version after connection initialization completed', function (done) { + var connection = (0, _connector.connect)('bolt://localhost'); - loadBalancer.acquireConnection(_driver.WRITE).catch(function (error) { - expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); - expectRoutingTable(loadBalancer, [], ['server-4', 'server-5'], ['server-6', 'server-7']); + connection.initializationCompleted().then(function (initializedConnection) { + var serverVersion = _serverVersion.ServerVersion.fromString(initializedConnection.server.version); + expect(serverVersion).toBeDefined(); done(); }); - }); - it('uses seed router address when all existing routers failed', function (done) { - var illegalRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], [] // no writers - table is illegal and should be skipped - ); - var updatedRoutingTable = newRoutingTable(['server-A', 'server-B', 'server-C'], ['server-D', 'server-E'], ['server-F', 'server-G']); - - var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-0'], // seed router address resolves just to itself - ['server-1', 'server-2', 'server-3'], ['server-4', 'server-5'], ['server-6', 'server-7'], (0, _integer.int)(0), // expired routing table - { - 'server-1': null, // returns no routing table - 'server-2': illegalRoutingTable, - 'server-3': null, // returns no routing table - 'server-0': updatedRoutingTable - }); + connection.initialize('mydriver/0.0.0', basicAuthToken()); + }); - loadBalancer.acquireConnection(_driver.READ).then(function (connection1) { - expect(connection1.address).toEqual('server-D'); + function packedHandshakeMessage() { + var result = (0, _buf.alloc)(4); + result.putInt32(0, 1); + result.reset(); + return result; + } - loadBalancer.acquireConnection(_driver.WRITE).then(function (connection2) { - expect(connection2.address).toEqual('server-F'); + function packedFailureMessage(code, message) { + var channel = new DummyChannel.channel(); + var chunker = new _chunking.Chunker(channel); + var packer = new _packstream.Packer(chunker); + packer.packStruct(0x7F, [packer.packable({ code: code, message: message })]); + chunker.messageBoundary(); + chunker.flush(); + var data = channel.toBuffer(); + var result = (0, _buf.alloc)(data.length); + result.putBytes(0, data); + return result; + } - expectRoutingTable(loadBalancer, ['server-A', 'server-B', 'server-C'], ['server-D', 'server-E'], ['server-F', 'server-G']); - done(); - }); - }); - }); + function expectNeo4jError(error, expectedCode, expectedMessage) { + expect(function () { + throw error; + }).toThrow(new _error.Neo4jError(expectedMessage, expectedCode)); + } - it('uses resolved seed router address when all existing routers failed', function (done) { - var illegalRoutingTable = newRoutingTable(['server-A'], ['server-B'], [] // no writers - table is illegal and should be skipped - ); - var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); + function basicAuthToken() { + return { + scheme: 'basic', + principal: _sharedNeo4j2.default.username, + credentials: _sharedNeo4j2.default.password + }; + } +}); - var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-01'], // seed router address resolves to a different one - ['server-1', 'server-2', 'server-3'], ['server-4', 'server-5'], ['server-6', 'server-7'], (0, _integer.int)(0), // expired routing table - { - 'server-1': illegalRoutingTable, - 'server-2': illegalRoutingTable, - 'server-3': null, // returns no routing table - 'server-01': updatedRoutingTable - }); +},{"../../lib/v1/internal/ch-node.js":12,"../../src/v1/error":356,"../../src/v1/internal/buf":360,"../../src/v1/internal/ch-dummy":362,"../../src/v1/internal/chunking":365,"../../src/v1/internal/connector":368,"../../src/v1/internal/packstream":371,"../../src/v1/internal/server-version":377,"../internal/shared-neo4j":404}],395:[function(require,module,exports){ +"use strict"; - loadBalancer.acquireConnection(_driver.WRITE).then(function (connection1) { - expect(connection1.address).toEqual('server-E'); +Object.defineProperty(exports, "__esModule", { + value: true +}); - loadBalancer.acquireConnection(_driver.READ).then(function (connection2) { - expect(connection2.address).toEqual('server-C'); +var _promise = require("babel-runtime/core-js/promise"); - expectRoutingTable(loadBalancer, ['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); - done(); - }); - }); - }); +var _promise2 = _interopRequireDefault(_promise); - it('uses resolved seed router address that returns correct routing table when all existing routers failed', function (done) { - var illegalRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], [] // no writers - table is illegal and should be skipped - ); - var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C'], ['server-D', 'server-E']); +var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-01', 'server-02', 'server-03'], // seed router address resolves to 3 different addresses - ['server-1'], ['server-2'], ['server-3'], (0, _integer.int)(0), // expired routing table - { - 'server-1': illegalRoutingTable, - 'server-01': null, // returns no routing table - 'server-02': illegalRoutingTable, - 'server-03': updatedRoutingTable - }); +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - loadBalancer.acquireConnection(_driver.WRITE).then(function (connection1) { - expect(connection1.address).toEqual('server-D'); +var _createClass2 = require("babel-runtime/helpers/createClass"); - loadBalancer.acquireConnection(_driver.WRITE).then(function (connection2) { - expect(connection2.address).toEqual('server-E'); +var _createClass3 = _interopRequireDefault(_createClass2); - expectRoutingTable(loadBalancer, ['server-A', 'server-B'], ['server-C'], ['server-D', 'server-E']); - done(); - }); - }); - }); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - it('fails when existing routers fail and seed router returns an invalid routing table', function (done) { - var emptyIllegalRoutingTable = newRoutingTable([], [], []); +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ - var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-0'], // seed router address resolves just to itself - ['server-1', 'server-2', 'server-3'], ['server-4', 'server-5'], ['server-6'], (0, _integer.int)(0), // expired routing table - { - 'server-1': emptyIllegalRoutingTable, - 'server-2': null, // returns no routing table - 'server-3': null, // returns no routing table - 'server-0': emptyIllegalRoutingTable - }); +/** + * This class is like a mock of {@link Connection} that tracks invocations count. + * It tries to maintain same "interface" as {@link Connection}. + * It could be replaced with a proper mock by a library like testdouble. + * At the time of writing such libraries require {@link Proxy} support but browser tests execute in + * PhantomJS which does not support proxies. + */ +var FakeConnection = function () { + function FakeConnection() { + (0, _classCallCheck3.default)(this, FakeConnection); - loadBalancer.acquireConnection(_driver.READ).catch(function (error) { - expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); + this.resetInvoked = 0; + this.resetAsyncInvoked = 0; + this.syncInvoked = 0; + this.releaseInvoked = 0; + this.seenStatements = []; + this.seenParameters = []; + this.server = {}; + } - expectRoutingTable(loadBalancer, ['server-1'], // only server-1 is in the table, it returned a routing table which turned out to be invalid - ['server-4', 'server-5'], ['server-6']); + (0, _createClass3.default)(FakeConnection, [{ + key: "run", + value: function run(statement, parameters) { + this.seenStatements.push(statement); + this.seenParameters.push(parameters); + } + }, { + key: "discardAll", + value: function discardAll() {} + }, { + key: "reset", + value: function reset() { + this.resetInvoked++; + } + }, { + key: "resetAsync", + value: function resetAsync() { + this.resetAsyncInvoked++; + } + }, { + key: "sync", + value: function sync() { + this.syncInvoked++; + } + }, { + key: "_release", + value: function _release() { + this.releaseInvoked++; + } + }, { + key: "initializationCompleted", + value: function initializationCompleted() { + return _promise2.default.resolve(this); + } + }, { + key: "isReleasedOnceOnSessionClose", + value: function isReleasedOnceOnSessionClose() { + return this.isReleasedOnSessionCloseTimes(1); + } + }, { + key: "isReleasedOnSessionCloseTimes", + value: function isReleasedOnSessionCloseTimes(times) { + return this.resetAsyncInvoked === times && this.resetInvoked === 0 && this.syncInvoked === times && this.releaseInvoked === times; + } + }, { + key: "isNeverReleased", + value: function isNeverReleased() { + return this.isReleasedTimes(0); + } + }, { + key: "isReleasedOnce", + value: function isReleasedOnce() { + return this.isReleasedTimes(1); + } + }, { + key: "isReleasedTimes", + value: function isReleasedTimes(times) { + return this.resetAsyncInvoked === 0 && this.resetInvoked === times && this.syncInvoked === times && this.releaseInvoked === times; + } + }, { + key: "withServerVersion", + value: function withServerVersion(version) { + this.server.version = version; + return this; + } + }]); + return FakeConnection; +}(); - loadBalancer.acquireConnection(_driver.WRITE).catch(function (error) { - expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); +exports.default = FakeConnection; +; - expectRoutingTable(loadBalancer, ['server-1'], // only server-1 is in the table, it returned a routing table which turned out to be invalid - ['server-4', 'server-5'], ['server-6']); +},{"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],396:[function(require,module,exports){ +'use strict'; - done(); - }); - }); - }); +var _hostNameResolvers = require('../../src/v1/internal/host-name-resolvers'); - it('fails when existing routers fail and resolved seed router returns an invalid routing table', function (done) { - var illegalRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], [] // no writers - table is illegal and should be skipped - ); +var _features = require('../../src/v1/internal/features'); - var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-01'], // seed router address resolves to a different one - ['server-1', 'server-2'], ['server-3'], ['server-4'], (0, _integer.int)(0), // expired routing table - { - 'server-1': null, // returns no routing table - 'server-2': illegalRoutingTable, - 'server-01': null // returns no routing table - }); +var _features2 = _interopRequireDefault(_features); - loadBalancer.acquireConnection(_driver.WRITE).catch(function (error) { - expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); +var _util = require('../../src/v1/internal/util'); - expectRoutingTable(loadBalancer, ['server-2'], // only server-2 is in the table, it returned a routing table which turned out to be invalid - ['server-3'], ['server-4']); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - loadBalancer.acquireConnection(_driver.READ).catch(function (error) { - expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); +describe('DummyHostNameResolver', function () { - expectRoutingTable(loadBalancer, ['server-2'], // only server-2 is in the table, it returned a routing table which turned out to be invalid - ['server-3'], ['server-4']); + it('should resolve given address to itself', function (done) { + var seedRouter = 'localhost'; + var resolver = new _hostNameResolvers.DummyHostNameResolver(); - done(); - }); + resolver.resolve(seedRouter).then(function (addresses) { + expect(addresses.length).toEqual(1); + expect(addresses[0]).toEqual(seedRouter); + done(); }); }); - it('fails when existing routers fail and all resolved seed routers return an invalid routing table', function (done) { - var illegalRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], [] // no writers - table is illegal and should be skipped - ); + it('should resolve given address with port to itself', function (done) { + var seedRouter = 'localhost:7474'; + var resolver = new _hostNameResolvers.DummyHostNameResolver(); - var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-02', 'server-01'], // seed router address resolves to 2 different addresses - ['server-1', 'server-2', 'server-3'], ['server-4'], ['server-5'], (0, _integer.int)(0), // expired routing table - { - 'server-1': null, // returns no routing table - 'server-2': null, // returns no routing table - 'server-3': null, // returns no routing table - 'server-01': illegalRoutingTable, - 'server-02': null // returns no routing table + resolver.resolve(seedRouter).then(function (addresses) { + expect(addresses.length).toEqual(1); + expect(addresses[0]).toEqual(seedRouter); + done(); }); + }); +}); /** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ - loadBalancer.acquireConnection(_driver.READ).catch(function (error) { - expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); - - expectRoutingTable(loadBalancer, [], // all known seed servers failed to return routing tables and were forgotten - ['server-4'], ['server-5']); +describe('DnsHostNameResolver', function () { - loadBalancer.acquireConnection(_driver.WRITE).catch(function (error) { - expect(error.code).toEqual(_error.SERVICE_UNAVAILABLE); + if ((0, _features2.default)('dns_lookup')) { - expectRoutingTable(loadBalancer, [], // all known seed servers failed to return routing tables and were forgotten - ['server-4'], ['server-5']); + var originalTimeout = void 0; - done(); - }); + beforeEach(function () { + // it sometimes takes couple seconds to perform dns lookup, increase the async test timeout + originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; + jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000; }); - }); - - it('uses seed router when no existing routers', function (done) { - var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C'], ['server-D']); - var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-0'], // seed router address resolves just to itself - [], // no routers in the known routing table - ['server-1', 'server-2'], ['server-3'], _integer2.default.MAX_VALUE, // not expired - { - 'server-0': updatedRoutingTable + afterEach(function () { + jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; }); - loadBalancer.acquireConnection(_driver.WRITE).then(function (connection1) { - expect(connection1.address).toEqual('server-D'); + it('should resolve address', function (done) { + var seedRouter = 'neo4j.com'; + var resolver = new _hostNameResolvers.DnsHostNameResolver(); - loadBalancer.acquireConnection(_driver.READ).then(function (connection2) { - expect(connection2.address).toEqual('server-C'); + resolver.resolve(seedRouter).then(function (addresses) { + expect(addresses.length).toBeGreaterThan(0); + + addresses.forEach(function (address) { + expectToBeDefined(address); + expect((0, _util.parseScheme)(address)).toEqual(''); + expectToBeDefined((0, _util.parseHost)(address)); + expect((0, _util.parsePort)(address)).not.toBeDefined(); + }); - expectRoutingTable(loadBalancer, ['server-A', 'server-B'], ['server-C'], ['server-D']); done(); }); }); - }); - - it('uses resolved seed router when no existing routers', function (done) { - var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-F', 'server-E']); - var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-01'], // seed router address resolves to a different one - [], // no routers in the known routing table - ['server-1', 'server-2'], ['server-3', 'server-4'], _integer2.default.MAX_VALUE, // not expired - { - 'server-01': updatedRoutingTable - }); + it('should resolve address with port', function (done) { + var seedRouter = 'neo4j.com:7474'; + var resolver = new _hostNameResolvers.DnsHostNameResolver(); - loadBalancer.acquireConnection(_driver.READ).then(function (connection1) { - expect(connection1.address).toEqual('server-C'); + resolver.resolve(seedRouter).then(function (addresses) { + expect(addresses.length).toBeGreaterThan(0); - loadBalancer.acquireConnection(_driver.WRITE).then(function (connection2) { - expect(connection2.address).toEqual('server-F'); + addresses.forEach(function (address) { + expectToBeDefined(address); + expect((0, _util.parseScheme)(address)).toEqual(''); + expectToBeDefined((0, _util.parseHost)(address)); + expect((0, _util.parsePort)(address)).toEqual('7474'); + }); - expectRoutingTable(loadBalancer, ['server-A', 'server-B'], ['server-C', 'server-D'], ['server-F', 'server-E']); done(); }); }); - }); - - it('uses resolved seed router that returns correct routing table when no existing routers exist', function (done) { - var illegalRoutingTable = newRoutingTable(['server-A'], ['server-B'], [] // no writers - table is illegal and should be skipped - ); - var updatedRoutingTable = newRoutingTable(['server-A', 'server-B', 'server-C'], ['server-D', 'server-E'], ['server-F']); - - var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-02', 'server-01', 'server-03'], // seed router address resolves to 3 different addresses - [], // no routers in the known routing table - ['server-1'], ['server-2', 'server-3'], _integer2.default.MAX_VALUE, // not expired - { - 'server-01': null, - 'server-02': illegalRoutingTable, - 'server-03': updatedRoutingTable - }); - - loadBalancer.acquireConnection(_driver.WRITE).then(function (connection1) { - expect(connection1.address).toEqual('server-F'); - loadBalancer.acquireConnection(_driver.READ).then(function (connection2) { - expect(connection2.address).toEqual('server-D'); + it('should resolve unresolvable address to itself', function (done) { + var seedRouter = '127.0.0.1'; // IP can't be resolved + var resolver = new _hostNameResolvers.DnsHostNameResolver(); - expectRoutingTable(loadBalancer, ['server-A', 'server-B', 'server-C'], ['server-D', 'server-E'], ['server-F']); + resolver.resolve(seedRouter).then(function (addresses) { + expect(addresses.length).toEqual(1); + expect(addresses[0]).toEqual(seedRouter); done(); }); }); - }); - - it('ignores already probed routers after seed router resolution', function (done) { - var illegalRoutingTable = newRoutingTable(['server-A'], ['server-B'], [] // no writers - table is illegal and should be skipped - ); - var updatedRoutingTable = newRoutingTable(['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); - - var loadBalancer = newLoadBalancerWithSeedRouter('server-0', ['server-1', 'server-01', 'server-2', 'server-02'], // seed router address resolves to 4 different addresses - ['server-1', 'server-2'], ['server-3', 'server-4'], ['server-5', 'server-6'], (0, _integer.int)(0), // expired routing table - { - 'server-1': null, - 'server-01': null, - 'server-2': illegalRoutingTable, - 'server-02': updatedRoutingTable - }); - var usedRouterArrays = []; - setupLoadBalancerToRememberRouters(loadBalancer, usedRouterArrays); - loadBalancer.acquireConnection(_driver.READ).then(function (connection1) { - expect(connection1.address).toEqual('server-C'); - - loadBalancer.acquireConnection(_driver.WRITE).then(function (connection2) { - expect(connection2.address).toEqual('server-E'); - - // two sets of routers probed: - // 1) existing routers 'server-1' & 'server-2' - // 2) resolved routers 'server-01' & 'server-02' - expect(usedRouterArrays.length).toEqual(2); - expect(usedRouterArrays[0]).toEqual(['server-1', 'server-2']); - expect(usedRouterArrays[1]).toEqual(['server-01', 'server-02']); + it('should resolve unresolvable address with port to itself', function (done) { + var seedRouter = '127.0.0.1:7474'; // IP can't be resolved + var resolver = new _hostNameResolvers.DnsHostNameResolver(); - expectRoutingTable(loadBalancer, ['server-A', 'server-B'], ['server-C', 'server-D'], ['server-E', 'server-F']); + resolver.resolve(seedRouter).then(function (addresses) { + expect(addresses.length).toEqual(1); + expect(addresses[0]).toEqual(seedRouter); done(); }); }); - }); + } }); -function newDirectConnectionProvider(address, pool) { - return new _connectionProviders.DirectConnectionProvider(address, pool, NO_OP_DRIVER_CALLBACK); -} - -function newLoadBalancer(routers, readers, writers) { - var pool = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - var expirationTime = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : _integer2.default.MAX_VALUE; - var routerToRoutingTable = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - - var seedRouter = 'server-non-existing-seed-router'; - return newLoadBalancerWithSeedRouter(seedRouter, [seedRouter], routers, readers, writers, expirationTime, routerToRoutingTable, pool); -} - -function newLoadBalancerWithSeedRouter(seedRouter, seedRouterResolved, routers, readers, writers) { - var expirationTime = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : _integer2.default.MAX_VALUE; - var routerToRoutingTable = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {}; - var connectionPool = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null; - - var loadBalancer = new _connectionProviders.LoadBalancer(seedRouter, connectionPool || newPool(), NO_OP_DRIVER_CALLBACK); - loadBalancer._routingTable = new _routingTable2.default(new _roundRobinArray2.default(routers), new _roundRobinArray2.default(readers), new _roundRobinArray2.default(writers), expirationTime); - loadBalancer._rediscovery = new FakeRediscovery(routerToRoutingTable); - loadBalancer._hostNameResolver = new FakeDnsResolver(seedRouterResolved); - return loadBalancer; +function expectToBeDefined(value) { + expect(value).toBeDefined(); + expect(value).not.toBeNull(); } -function newRoutingTable(routers, readers, writers) { - var expirationTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _integer2.default.MAX_VALUE; - - return new _routingTable2.default(new _roundRobinArray2.default(routers), new _roundRobinArray2.default(readers), new _roundRobinArray2.default(writers), expirationTime); -} +},{"../../src/v1/internal/features":369,"../../src/v1/internal/host-name-resolvers":370,"../../src/v1/internal/util":381}],397:[function(require,module,exports){ +"use strict"; -function setupLoadBalancerToRememberRouters(loadBalancer, routersArray) { - var originalFetch = loadBalancer._fetchNewRoutingTable.bind(loadBalancer); - var rememberingFetch = function rememberingFetch(routerAddresses, routingTable) { - routersArray.push(routerAddresses); - return originalFetch(routerAddresses, routingTable); - }; - loadBalancer._fetchNewRoutingTable = rememberingFetch; -} +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ -function newPool() { - return new _pool2.default(FakeConnection.create); -} +var alloc = require('../../lib/v1/internal/buf').alloc, + packstream = require("../../lib/v1/internal/packstream"), + Integer = require("../../lib/v1/integer").default, + Packer = packstream.Packer, + Unpacker = packstream.Unpacker, + Structure = packstream.Structure; -function expectRoutingTable(loadBalancer, routers, readers, writers) { - expect(loadBalancer._routingTable.routers.toArray()).toEqual(routers); - expect(loadBalancer._routingTable.readers.toArray()).toEqual(readers); - expect(loadBalancer._routingTable.writers.toArray()).toEqual(writers); -} +describe('packstream', function () { -function expectPoolToContain(pool, addresses) { - addresses.forEach(function (address) { - expect(pool.has(address)).toBeTruthy(); + it('should pack integers', function () { + var n, i; + // test small numbers + for (n = -999; n <= 999; n += 1) { + i = Integer.fromNumber(n); + expect(packAndUnpack(i).toString()).toBe(i.toString()); + } + // positive numbers + for (n = 16; n <= 16; n += 1) { + i = Integer.fromNumber(Math.pow(2, n)); + expect(packAndUnpack(i).toString()).toBe(i.toString()); + } + // negative numbers + for (n = 0; n <= 63; n += 1) { + i = Integer.fromNumber(-Math.pow(2, n)); + expect(packAndUnpack(i).toString()).toBe(i.toString()); + } }); -} - -function expectPoolToNotContain(pool, addresses) { - addresses.forEach(function (address) { - expect(pool.has(address)).toBeFalsy(); + it('should pack strings', function () { + expect(packAndUnpack("")).toBe(""); + expect(packAndUnpack("abcdefg123567")).toBe("abcdefg123567"); + var str = Array(65536 + 1).join('a'); // 2 ^ 16 + 1 + expect(packAndUnpack(str, str.length + 8)).toBe(str); + }); + it('should pack structures', function () { + expect(packAndUnpack(new Structure(1, ["Hello, world!!!"])).fields[0]).toBe("Hello, world!!!"); + }); + it('should pack lists', function () { + var list = ['a', 'b']; + var roundtripped = packAndUnpack(list); + expect(roundtripped[0]).toBe(list[0]); + expect(roundtripped[1]).toBe(list[1]); }); -} - -var FakeConnection = function () { - function FakeConnection(address, release) { - (0, _classCallCheck3.default)(this, FakeConnection); - - this.address = address; - this.release = release; - } - - (0, _createClass3.default)(FakeConnection, null, [{ - key: 'create', - value: function create(address, release) { - return new FakeConnection(address, release); - } - }]); - return FakeConnection; -}(); - -var FakeRediscovery = function () { - function FakeRediscovery(routerToRoutingTable) { - (0, _classCallCheck3.default)(this, FakeRediscovery); - - this._routerToRoutingTable = routerToRoutingTable; - } - (0, _createClass3.default)(FakeRediscovery, [{ - key: 'lookupRoutingTableOnRouter', - value: function lookupRoutingTableOnRouter(ignored, router) { - return this._routerToRoutingTable[router]; + it('should pack long lists', function () { + var listLength = 256; + var list = []; + for (var i = 0; i < listLength; i++) { + list.push(null); } - }]); - return FakeRediscovery; -}(); - -var FakeDnsResolver = function () { - function FakeDnsResolver(addresses) { - (0, _classCallCheck3.default)(this, FakeDnsResolver); - - this._addresses = addresses; - } + var roundtripped = packAndUnpack(list, 1400); + expect(roundtripped[0]).toBe(list[0]); + expect(roundtripped[1]).toBe(list[1]); + }); +}); - (0, _createClass3.default)(FakeDnsResolver, [{ - key: 'resolve', - value: function resolve(seedRouter) { - return _promise2.default.resolve(this._addresses ? this._addresses : [seedRouter]); - } - }]); - return FakeDnsResolver; -}(); +function packAndUnpack(val, bufferSize) { + bufferSize = bufferSize || 128; + var buffer = alloc(bufferSize); + new Packer(buffer).packable(val)(); + buffer.reset(); + return new Unpacker().unpack(buffer); +} -},{"../../src/v1/driver":310,"../../src/v1/error":311,"../../src/v1/integer":314,"../../src/v1/internal/connection-providers":321,"../../src/v1/internal/pool":327,"../../src/v1/internal/round-robin-array":329,"../../src/v1/internal/routing-table":330,"babel-runtime/core-js/promise":59,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],346:[function(require,module,exports){ +},{"../../lib/v1/integer":8,"../../lib/v1/internal/buf":9,"../../lib/v1/internal/packstream":20}],398:[function(require,module,exports){ 'use strict'; -var _chDummy = require('../../src/v1/internal/ch-dummy'); - -var DummyChannel = _interopRequireWildcard(_chDummy); - -var _connector = require('../../src/v1/internal/connector'); - -var _packstream = require('../../src/v1/internal/packstream'); - -var _chunking = require('../../src/v1/internal/chunking'); - -var _buf = require('../../src/v1/internal/buf'); - -var _error = require('../../src/v1/error'); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - /** * Copyright (c) 2002-2017 "Neo Technology,"," * Network Engine for Objects in Lund AB [http://neotechnology.com] @@ -45341,127 +51156,172 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; * limitations under the License. */ -describe('connector', function () { +var Pool = require('../../lib/v1/internal/pool').default; - it('should read/write basic messages', function (done) { +describe('Pool', function () { + it('allocates if pool is empty', function () { // Given - var conn = (0, _connector.connect)("bolt://localhost"); + var counter = 0; + var key = "bolt://localhost:7687"; + var pool = new Pool(function (url, release) { + return new Resource(url, counter++, release); + }); // When - conn.initialize("mydriver/0.0.0", { scheme: "basic", principal: "neo4j", credentials: "neo4j" }, { - onCompleted: function onCompleted(msg) { - expect(msg).not.toBeNull(); - conn.close(); - done(); - }, - onError: console.log - }); - conn.sync(); + var r0 = pool.acquire(key); + var r1 = pool.acquire(key); + + // Then + expect(r0.id).toBe(0); + expect(r1.id).toBe(1); }); - it('should retrieve stream', function (done) { - // Given - var conn = (0, _connector.connect)("bolt://localhost"); + it('pools if resources are returned', function () { + // Given a pool that allocates + var counter = 0; + var key = "bolt://localhost:7687"; + var pool = new Pool(function (url, release) { + return new Resource(url, counter++, release); + }); // When - var records = []; - conn.initialize("mydriver/0.0.0", { scheme: "basic", principal: "neo4j", credentials: "neo4j" }); - conn.run("RETURN 1.0", {}); - conn.pullAll({ - onNext: function onNext(record) { - records.push(record); - }, - onCompleted: function onCompleted() { - expect(records[0][0]).toBe(1); - conn.close(); - done(); - } + var r0 = pool.acquire(key); + r0.close(); + var r1 = pool.acquire(key); + + // Then + expect(r0.id).toBe(0); + expect(r1.id).toBe(0); + }); + + it('handles multiple keys', function () { + // Given a pool that allocates + var counter = 0; + var key1 = "bolt://localhost:7687"; + var key2 = "bolt://localhost:7688"; + var pool = new Pool(function (url, release) { + return new Resource(url, counter++, release); }); - conn.sync(); + + // When + var r0 = pool.acquire(key1); + var r1 = pool.acquire(key2); + r0.close(); + var r2 = pool.acquire(key1); + var r3 = pool.acquire(key2); + + // Then + expect(r0.id).toBe(0); + expect(r1.id).toBe(1); + expect(r2.id).toBe(0); + expect(r3.id).toBe(2); }); - it('should use DummyChannel to read what gets written', function (done) { - // Given - var observer = DummyChannel.observer; - var conn = (0, _connector.connect)("bolt://localhost", { channel: DummyChannel.channel }); + it('frees if pool reaches max size', function () { + // Given a pool that tracks destroyed resources + var counter = 0, + destroyed = []; + var key = "bolt://localhost:7687"; + var pool = new Pool(function (url, release) { + return new Resource(url, counter++, release); + }, function (resource) { + destroyed.push(resource); + }, function (resource) { + return true; + }, 2 // maxIdle + ); + + // When + var r0 = pool.acquire(key); + var r1 = pool.acquire(key); + var r2 = pool.acquire(key); + r0.close(); + r1.close(); + r2.close(); + + // Then + expect(destroyed.length).toBe(1); + expect(destroyed[0].id).toBe(r2.id); + }); + + it('frees if validate returns false', function () { + // Given a pool that allocates + var counter = 0, + destroyed = []; + var key = "bolt://localhost:7687"; + var pool = new Pool(function (url, release) { + return new Resource(url, counter++, release); + }, function (resource) { + destroyed.push(resource); + }, function (resource) { + return false; + }, 1000 // maxIdle + ); // When - conn.initialize("mydriver/0.0.0", { scheme: "basic", principal: "neo4j", credentials: "neo4j" }); - conn.run("RETURN 1", {}); - conn.sync(); - expect(observer.instance.toHex()).toBe('60 60 b0 17 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 41 b2 01 8e 6d 79 64 72 69 76 65 72 2f 30 2e 30 2e 30 a3 86 73 63 68 65 6d 65 85 62 61 73 69 63 89 70 72 69 6e 63 69 70 61 6c 85 6e 65 6f 34 6a 8b 63 72 65 64 65 6e 74 69 61 6c 73 85 6e 65 6f 34 6a 00 00 00 0c b2 10 88 52 45 54 55 52 4e 20 31 a0 00 00 '); - done(); - }); - - it('should provide error message when connecting to http-port', function (done) { - // Given - var conn = (0, _connector.connect)("bolt://localhost:7474", { encrypted: false }); + var r0 = pool.acquire(key); + var r1 = pool.acquire(key); + r0.close(); + r1.close(); - // When - conn.initialize("mydriver/0.0.0", { scheme: "basic", principal: "neo4j", credentials: "neo4j" }, { - onCompleted: function onCompleted(msg) {}, - onError: function onError(err) { - //only node gets the pretty error message - if (require('../../lib/v1/internal/ch-node.js').available) { - expect(err.message).toBe("Server responded HTTP. Make sure you are not trying to connect to the http endpoint " + "(HTTP defaults to port 7474 whereas BOLT defaults to port 7687)"); - } - done(); - } - }); - conn.sync(); + // Then + expect(destroyed.length).toBe(2); + expect(destroyed[0].id).toBe(r0.id); + expect(destroyed[1].id).toBe(r1.id); }); - it('should convert failure messages to errors', function (done) { - var channel = new DummyChannel.channel(); - var connection = new _connector.Connection(channel, 'bolt://localhost'); + it('purges keys', function () { + // Given a pool that allocates + var counter = 0; + var key1 = "bolt://localhost:7687"; + var key2 = "bolt://localhost:7688"; + var pool = new Pool(function (url, release) { + return new Resource(url, counter++, release); + }, function (res) { + res.destroyed = true;return true; + }); - var errorCode = 'Neo.ClientError.Schema.ConstraintValidationFailed'; - var errorMessage = 'Node 0 already exists with label User and property "email"=[john@doe.com]'; + // When + var r0 = pool.acquire(key1); + var r1 = pool.acquire(key2); + r0.close(); + r1.close(); + expect(pool.has(key1)).toBe(true); + expect(pool.has(key2)).toBe(true); + pool.purge(key1); + expect(pool.has(key1)).toBe(false); + expect(pool.has(key2)).toBe(true); - connection._queueObserver({ - onError: function onError(error) { - expectNeo4jError(error, errorCode, errorMessage); - done(); - } - }); + var r2 = pool.acquire(key1); + var r3 = pool.acquire(key2); - channel.onmessage(packedHandshakeMessage()); - channel.onmessage(packedFailureMessage(errorCode, errorMessage)); + // Then + expect(r0.id).toBe(0); + expect(r0.destroyed).toBe(true); + expect(r1.id).toBe(1); + expect(r2.id).toBe(2); + expect(r3.id).toBe(1); }); +}); - function packedHandshakeMessage() { - var result = (0, _buf.alloc)(4); - result.putInt32(0, 1); - result.reset(); - return result; - } +function Resource(key, id, release) { + var self = this; + this.id = id; + this.close = function () { + release(key, self); + }; +} - function packedFailureMessage(code, message) { - var channel = new DummyChannel.channel(); - var chunker = new _chunking.Chunker(channel); - var packer = new _packstream.Packer(chunker); - packer.packStruct(0x7F, [packer.packable({ code: code, message: message })]); - chunker.messageBoundary(); - chunker.flush(); - var data = channel.toBuffer(); - var result = (0, _buf.alloc)(data.length); - result.putBytes(0, data); - return result; - } +},{"../../lib/v1/internal/pool":21}],399:[function(require,module,exports){ +"use strict"; - function expectNeo4jError(error, expectedCode, expectedMessage) { - expect(function () { - throw error; - }).toThrow(new _error.Neo4jError(expectedMessage, expectedCode)); - } -}); +var _promise = require("babel-runtime/core-js/promise"); -},{"../../lib/v1/internal/ch-node.js":11,"../../src/v1/error":311,"../../src/v1/internal/buf":315,"../../src/v1/internal/ch-dummy":316,"../../src/v1/internal/chunking":319,"../../src/v1/internal/connector":322,"../../src/v1/internal/packstream":326}],347:[function(require,module,exports){ -"use strict"; +var _promise2 = _interopRequireDefault(_promise); -Object.defineProperty(exports, "__esModule", { - value: true -}); +var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); + +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); @@ -45471,120 +51331,27 @@ var _createClass2 = require("babel-runtime/helpers/createClass"); var _createClass3 = _interopRequireDefault(_createClass2); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * This class is like a mock of {@link Connection} that tracks invocations count. - * It tries to maintain same "interface" as {@link Connection}. - * It could be replaced with a proper mock by a library like testdouble. - * At the time of writing such libraries require {@link Proxy} support but browser tests execute in - * PhantomJS which does not support proxies. - */ -var FakeConnection = function () { - function FakeConnection() { - (0, _classCallCheck3.default)(this, FakeConnection); - - this.resetInvoked = 0; - this.resetAsyncInvoked = 0; - this.syncInvoked = 0; - this.releaseInvoked = 0; - } - - (0, _createClass3.default)(FakeConnection, [{ - key: "run", - value: function run() {} - }, { - key: "discardAll", - value: function discardAll() {} - }, { - key: "reset", - value: function reset() { - this.resetInvoked++; - } - }, { - key: "resetAsync", - value: function resetAsync() { - this.resetAsyncInvoked++; - } - }, { - key: "sync", - value: function sync() { - this.syncInvoked++; - } - }, { - key: "_release", - value: function _release() { - this.releaseInvoked++; - } - }, { - key: "isReleasedOnceOnSessionClose", - value: function isReleasedOnceOnSessionClose() { - return this.isReleasedOnSessionCloseTimes(1); - } - }, { - key: "isReleasedOnSessionCloseTimes", - value: function isReleasedOnSessionCloseTimes(times) { - return this.resetAsyncInvoked === times && this.resetInvoked === 0 && this.syncInvoked === times && this.releaseInvoked === times; - } - }, { - key: "isNeverReleased", - value: function isNeverReleased() { - return this.isReleasedTimes(0); - } - }, { - key: "isReleasedOnce", - value: function isReleasedOnce() { - return this.isReleasedTimes(1); - } - }, { - key: "isReleasedTimes", - value: function isReleasedTimes(times) { - return this.resetAsyncInvoked === 0 && this.resetInvoked === times && this.syncInvoked === times && this.releaseInvoked === times; - } - }]); - return FakeConnection; -}(); +var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); -exports.default = FakeConnection; -; +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); -},{"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],348:[function(require,module,exports){ -"use strict"; +var _inherits2 = require("babel-runtime/helpers/inherits"); -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); +var _inherits3 = _interopRequireDefault(_inherits2); -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); +var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray"); -var _createClass2 = require("babel-runtime/helpers/createClass"); +var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); -var _createClass3 = _interopRequireDefault(_createClass2); +var _rediscovery = require("../../src/v1/internal/rediscovery"); -var _promise = require("babel-runtime/core-js/promise"); +var _rediscovery2 = _interopRequireDefault(_rediscovery); -var _promise2 = _interopRequireDefault(_promise); +var _routingUtil = require("../../src/v1/internal/routing-util"); -var _getServersUtil = require("../../src/v1/internal/get-servers-util"); +var _routingUtil2 = _interopRequireDefault(_routingUtil); -var _getServersUtil2 = _interopRequireDefault(_getServersUtil); +var _error = require("../../src/v1/error"); var _record = require("../../src/v1/record"); @@ -45592,13 +51359,13 @@ var _record2 = _interopRequireDefault(_record); var _integer = require("../../src/v1/integer"); -var _integer2 = _interopRequireDefault(_integer); +var _roundRobinArray = require("../../src/v1/internal/round-robin-array"); -var _error = require("../../src/v1/error"); +var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); -var _lolex = require("lolex"); +var _routingTable = require("../../src/v1/internal/routing-table"); -var _lolex2 = _interopRequireDefault(_lolex); +var _routingTable2 = _interopRequireDefault(_routingTable); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -45621,328 +51388,465 @@ var ROUTER_ADDRESS = 'bolt+routing://test.router.com'; /** * limitations under the License. */ -describe('get-servers-util', function () { +describe('rediscovery', function () { - var clock = void 0; + it('should return null when connection error happens', function (done) { + var util = new FakeRoutingUtil({ + callRoutingProcedure: function callRoutingProcedure() { + return null; + } + }); - beforeAll(function () { - clock = _lolex2.default.install(); + lookupRoutingTableOnRouter(util).then(function (routingTable) { + expect(routingTable).toBeNull(); + done(); + }); }); - afterAll(function () { - clock.uninstall(); + it('should throw when no records are returned', function (done) { + var util = new FakeRoutingUtil({ + callRoutingProcedure: function callRoutingProcedure() { + return []; + } + }); + + lookupRoutingTableOnRouter(util).catch(function (error) { + expectProtocolError(error, 'Illegal response from router'); + done(); + }); }); - it('should return retrieved records when query succeeds', function (done) { - var session = FakeSession.successful({ records: ['foo', 'bar', 'baz'] }); + it('should throw when multiple records are returned', function (done) { + var util = new FakeRoutingUtil({ + callRoutingProcedure: function callRoutingProcedure() { + return [new _record2.default(['a'], ['aaa']), new _record2.default(['b'], ['bbb'])]; + } + }); - callGetServers(session).then(function (records) { - expect(records).toEqual(['foo', 'bar', 'baz']); + lookupRoutingTableOnRouter(util).catch(function (error) { + expectProtocolError(error, 'Illegal response from router'); done(); - }).catch(console.log); + }); }); - it('should close session when query succeeds', function (done) { - var session = FakeSession.successful({ records: ['foo', 'bar', 'baz'] }); + it('should throw when ttl parsing throws', function (done) { + var util = new FakeRoutingUtil({ + callRoutingProcedure: function callRoutingProcedure() { + return [new _record2.default(['a'], ['aaa'])]; + }, + parseTtl: function parseTtl() { + throw (0, _error.newError)('Unable to parse TTL', _error.PROTOCOL_ERROR); + } + }); - callGetServers(session).then(function () { - expect(session.isClosed()).toBeTruthy(); + lookupRoutingTableOnRouter(util).catch(function (error) { + expectProtocolError(error, 'Unable to parse TTL'); done(); - }).catch(console.log); + }); }); - it('should not close session when query fails', function (done) { - var session = FakeSession.failed((0, _error.newError)('Oh no!', _error.SESSION_EXPIRED)); + it('should throw when servers parsing throws', function (done) { + var util = new FakeRoutingUtil({ + callRoutingProcedure: function callRoutingProcedure() { + return [new _record2.default(['a'], ['aaa'])]; + }, + parseTtl: function parseTtl() { + return (0, _integer.int)(42); + }, + parseServers: function parseServers() { + throw (0, _error.newError)('Unable to parse servers', _error.PROTOCOL_ERROR); + } + }); - callGetServers(session).then(function () { - expect(session.isClosed()).toBeFalsy(); + lookupRoutingTableOnRouter(util).catch(function (error) { + expectProtocolError(error, 'Unable to parse servers'); done(); - }).catch(console.log); + }); }); - it('should return null on connection error', function (done) { - var session = FakeSession.failed((0, _error.newError)('Oh no!', _error.SESSION_EXPIRED)); + it('should throw when no routers', function (done) { + var util = new FakeRoutingUtil({ + callRoutingProcedure: function callRoutingProcedure() { + return [new _record2.default(['a'], ['aaa'])]; + }, + parseTtl: function parseTtl() { + return (0, _integer.int)(42); + }, + parseServers: function parseServers() { + return { + routers: new _roundRobinArray2.default(), + readers: new _roundRobinArray2.default(['reader1']), + writers: new _roundRobinArray2.default(['writer1']) + }; + } + }); - callGetServers(session).then(function (records) { - expect(records).toBeNull(); + lookupRoutingTableOnRouter(util).catch(function (error) { + expectProtocolError(error, 'Received no routers'); done(); - }).catch(console.log); + }); }); - it('should fail when procedure not found', function (done) { - var session = FakeSession.failed((0, _error.newError)('Oh no!', 'Neo.ClientError.Procedure.ProcedureNotFound')); + it('should throw when no readers', function (done) { + var util = new FakeRoutingUtil({ + callRoutingProcedure: function callRoutingProcedure() { + return [new _record2.default(['a'], ['aaa'])]; + }, + parseTtl: function parseTtl() { + return (0, _integer.int)(42); + }, + parseServers: function parseServers() { + return { + routers: new _roundRobinArray2.default(['router1']), + readers: new _roundRobinArray2.default(), + writers: new _roundRobinArray2.default(['writer1']) + }; + } + }); - callGetServers(session).catch(function (error) { - expect(error.code).toBe(_error.SERVICE_UNAVAILABLE); - expect(error.message).toBe('Server ' + ROUTER_ADDRESS + ' could not perform routing. ' + 'Make sure you are connecting to a causal cluster'); + lookupRoutingTableOnRouter(util).catch(function (error) { + expectProtocolError(error, 'Received no readers'); done(); }); }); - it('should parse valid ttl', function () { - testValidTtlParsing(100, 5); - testValidTtlParsing(Date.now(), 3600); // 1 hour - testValidTtlParsing(Date.now(), 86400); // 24 hours - testValidTtlParsing(Date.now(), 3628800); // 42 days - testValidTtlParsing(0, 1); - testValidTtlParsing(50, 0); - testValidTtlParsing(Date.now(), 0); + it('should return routing table when no writers', function (done) { + var util = new FakeRoutingUtil({ + callRoutingProcedure: function callRoutingProcedure() { + return [new _record2.default(['a'], ['aaa'])]; + }, + parseTtl: function parseTtl() { + return (0, _integer.int)(42); + }, + parseServers: function parseServers() { + return { + routers: new _roundRobinArray2.default(['router1']), + readers: new _roundRobinArray2.default(['reader1']), + writers: new _roundRobinArray2.default() + }; + } + }); + + lookupRoutingTableOnRouter(util).then(function (routingTable) { + expect(routingTable).toBeDefined(); + expect(routingTable).not.toBeNull(); + done(); + }); }); - it('should not overflow parsing huge ttl', function () { - var record = newRecord({ ttl: _integer2.default.MAX_VALUE }); - clock.setSystemTime(42); + it('should return valid routing table with 1 router, 1 reader and 1 writer', function (done) { + testValidRoutingTable(['router1'], ['reader1'], ['writer1'], (0, _integer.int)(42), done); + }); - var expirationTime = parseTtl(record); + it('should return valid routing table with 2 routers, 2 readers and 2 writers', function (done) { + testValidRoutingTable(['router1', 'router2'], ['reader1', 'reader2'], ['writer1', 'writer2'], (0, _integer.int)(Date.now()), done); + }); - expect(expirationTime).toBe(_integer2.default.MAX_VALUE); + it('should return valid routing table with 1 router, 3 readers and 1 writer', function (done) { + testValidRoutingTable(['router1'], ['reader1', 'reader2', 'reader3'], ['writer1'], (0, _integer.int)(12345), done); }); - it('should return valid value parsing negative ttl', function () { - var record = newRecord({ ttl: (0, _integer.int)(-42) }); - clock.setSystemTime(42); + function testValidRoutingTable(routerAddresses, readerAddresses, writerAddresses, expires, done) { + var util = new FakeRoutingUtil({ + callRoutingProcedure: function callRoutingProcedure() { + return [new _record2.default(['a'], ['aaa'])]; + }, + parseTtl: function parseTtl() { + return expires; + }, + parseServers: function parseServers() { + return { + routers: new _roundRobinArray2.default(routerAddresses), + readers: new _roundRobinArray2.default(readerAddresses), + writers: new _roundRobinArray2.default(writerAddresses) + }; + } + }); - var expirationTime = parseTtl(record); + lookupRoutingTableOnRouter(util).then(function (routingTable) { + expect(routingTable).toBeDefined(); + expect(routingTable).not.toBeNull(); - expect(expirationTime).toBe(_integer2.default.MAX_VALUE); - }); + expect(routingTable.expirationTime).toEqual(expires); - it('should throw when record does not have a ttl entry', function (done) { - var record = new _record2.default(["notTtl", "servers"], []); - expectProtocolError(function () { - return parseTtl(record); - }, done); - }); + var allServers = routingTable.serversDiff(new _routingTable2.default()).sort(); + var allExpectedServers = [].concat((0, _toConsumableArray3.default)(routerAddresses), (0, _toConsumableArray3.default)(readerAddresses), (0, _toConsumableArray3.default)(writerAddresses)).sort(); + expect(allServers).toEqual(allExpectedServers); - it('should parse servers', function () { - testValidServersParsing([], [], []); + done(); + }); + } - testValidServersParsing(['router1'], [], []); - testValidServersParsing([], ['reader1'], []); - testValidServersParsing([], [], ['writer1']); + function lookupRoutingTableOnRouter(routingUtil) { + var rediscovery = new _rediscovery2.default(routingUtil); + return rediscovery.lookupRoutingTableOnRouter(null, ROUTER_ADDRESS); + } - testValidServersParsing(['router1'], ['reader1'], []); - testValidServersParsing(['router1'], ['reader1'], ['writer1']); - testValidServersParsing([], ['reader1'], ['writer1']); + function expectProtocolError(error, messagePrefix) { + expect(error.code).toEqual(_error.PROTOCOL_ERROR); + expect(error.message.indexOf(messagePrefix)).toEqual(0); + } - testValidServersParsing(['router1'], ['reader1'], ['writer1']); - testValidServersParsing(['router1', 'router2'], ['reader1', 'reader2'], ['writer1']); - testValidServersParsing(['router1', 'router2'], ['reader1', 'reader2'], ['writer1', 'writer2']); - }); + function shouldNotBeCalled() { + throw new Error('Should not be called'); + } - it('should fail to parse servers entry when record does not have servers', function (done) { - var record = new _record2.default(['ttl', 'notServers'], [(0, _integer.int)(42), [{ "role": "READ", "addresses": ['1', '2', '3'] }]]); - expectProtocolError(function () { - return parseServers(record); - }, done); - }); + var FakeRoutingUtil = function (_RoutingUtil) { + (0, _inherits3.default)(FakeRoutingUtil, _RoutingUtil); - it('should fail to parse servers entry without role', function (done) { - var record = new _record2.default(['ttl', 'servers'], [(0, _integer.int)(42), [{ "notRole": "READ", "addresses": ['1', '2', '3'] }]]); - expectProtocolError(function () { - return parseServers(record); - }, done); - }); + function FakeRoutingUtil(_ref) { + var _ref$callRoutingProce = _ref.callRoutingProcedure, + callRoutingProcedure = _ref$callRoutingProce === undefined ? shouldNotBeCalled : _ref$callRoutingProce, + _ref$parseTtl = _ref.parseTtl, + parseTtl = _ref$parseTtl === undefined ? shouldNotBeCalled : _ref$parseTtl, + _ref$parseServers = _ref.parseServers, + parseServers = _ref$parseServers === undefined ? shouldNotBeCalled : _ref$parseServers; + (0, _classCallCheck3.default)(this, FakeRoutingUtil); - it('should fail to parse servers entry with illegal role', function (done) { - var record = new _record2.default(['ttl', 'servers'], [(0, _integer.int)(42), [{ "role": "ARBITER", "addresses": ['1', '2', '3'] }]]); - expectProtocolError(function () { - return parseServers(record); - }, done); - }); + var _this = (0, _possibleConstructorReturn3.default)(this, (FakeRoutingUtil.__proto__ || (0, _getPrototypeOf2.default)(FakeRoutingUtil)).call(this)); - it('should fail to parse servers entry with just ttl', function (done) { - var record = new _record2.default(['ttl', 'servers'], [(0, _integer.int)(42), [{ "role": "READ" }]]); - expectProtocolError(function () { - return parseServers(record); - }, done); - }); + _this._callAvailableRoutingProcedure = callRoutingProcedure; + _this._parseTtl = parseTtl; + _this._parseServers = parseServers; + return _this; + } - it('should fail to parse servers entry without addresses', function (done) { - var record = new _record2.default(['ttl', 'servers'], [(0, _integer.int)(42), [{ "role": "WRITE", "notAddresses": ['1', '2', '3'] }]]); - expectProtocolError(function () { - return parseServers(record); - }, done); + (0, _createClass3.default)(FakeRoutingUtil, [{ + key: "callRoutingProcedure", + value: function callRoutingProcedure(session, routerAddress) { + var _this2 = this; + + return new _promise2.default(function (resolve, reject) { + try { + resolve(_this2._callAvailableRoutingProcedure()); + } catch (error) { + reject(error); + } + }); + } + }, { + key: "parseTtl", + value: function parseTtl(record, routerAddress) { + return this._parseTtl(); + } + }, { + key: "parseServers", + value: function parseServers(record, routerAddress) { + return this._parseServers(); + } + }]); + return FakeRoutingUtil; + }(_routingUtil2.default); +}); + +},{"../../src/v1/error":356,"../../src/v1/integer":359,"../../src/v1/internal/rediscovery":373,"../../src/v1/internal/round-robin-array":374,"../../src/v1/internal/routing-table":375,"../../src/v1/internal/routing-util":376,"../../src/v1/record":382,"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71,"babel-runtime/helpers/toConsumableArray":72}],400:[function(require,module,exports){ +'use strict'; + +var _roundRobinArray = require('../../lib/v1/internal/round-robin-array'); + +var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +describe('round-robin-array', function () { + + it('should behave correctly when empty', function () { + var array = new _roundRobinArray2.default(); + + expect(array.isEmpty()).toBeTruthy(); + expect(array.size()).toEqual(0); + expect(array.next()).toBeNull(); + expect(array.toArray()).toEqual([]); + + array.remove(1); + + expect(array.isEmpty()).toBeTruthy(); + expect(array.size()).toEqual(0); + expect(array.next()).toBeNull(); + expect(array.toArray()).toEqual([]); }); - it('should fail to parse servers entry with string addresses', function (done) { - var record = new _record2.default(['ttl', 'servers'], [(0, _integer.int)(42), [{ "role": "WRITE", "addresses": '' }]]); - expectProtocolError(function () { - return parseServers(record); - }, done); - }); + it('should behave correctly when contains single element', function () { + var array = new _roundRobinArray2.default([5]); - it('should fail to parse servers entry with null addresses', function (done) { - var record = new _record2.default(['ttl', 'servers'], [(0, _integer.int)(42), [{ "role": "WRITE", "addresses": null }]]); - expectProtocolError(function () { - return parseServers(record); - }, done); - }); + expect(array.isEmpty()).toBeFalsy(); + expect(array.size()).toEqual(1); + expect(array.next()).toEqual(5); + expect(array.toArray()).toEqual([5]); - it('should fail to parse servers entry with integer addresses', function (done) { - var record = new _record2.default(['ttl', 'servers'], [(0, _integer.int)(42), [{ "role": "WRITE", "addresses": 12345 }]]); - expectProtocolError(function () { - return parseServers(record); - }, done); - }); + array.remove(1); - it('should fail to parse servers entry with object addresses', function (done) { - var record = new _record2.default(['ttl', 'servers'], [(0, _integer.int)(42), [{ "role": "WRITE", "addresses": { key: ['localhost'] } }]]); - expectProtocolError(function () { - return parseServers(record); - }, done); - }); + expect(array.isEmpty()).toBeFalsy(); + expect(array.size()).toEqual(1); + expect(array.next()).toEqual(5); + expect(array.toArray()).toEqual([5]); - function testValidTtlParsing(currentTime, ttlSeconds) { - var record = newRecord({ ttl: (0, _integer.int)(ttlSeconds) }); - clock.setSystemTime(currentTime); + array.remove(5); - var expirationTime = parseTtl(record).toNumber(); + expect(array.isEmpty()).toBeTruthy(); + expect(array.size()).toEqual(0); + expect(array.next()).toBeNull(); + expect(array.toArray()).toEqual([]); + }); - expect(expirationTime).toEqual(currentTime + ttlSeconds * 1000); - } + it('should push items', function () { + var array1 = new _roundRobinArray2.default(); + array1.pushAll([1]); + expect(array1.toArray()).toEqual([1]); - function testValidServersParsing(routerAddresses, readerAddresses, writerAddresses) { - var record = newRecord({ routers: routerAddresses, readers: readerAddresses, writers: writerAddresses }); + var array2 = new _roundRobinArray2.default([]); + array2.pushAll([1, 2, 3]); + expect(array2.toArray()).toEqual([1, 2, 3]); - var _parseServers = parseServers(record), - routers = _parseServers.routers, - readers = _parseServers.readers, - writers = _parseServers.writers; + var array3 = new _roundRobinArray2.default([1, 2, 3]); + array3.pushAll([4, 5]); + expect(array3.toArray()).toEqual([1, 2, 3, 4, 5]); + }); - expect(routers.toArray()).toEqual(routerAddresses); - expect(readers.toArray()).toEqual(readerAddresses); - expect(writers.toArray()).toEqual(writerAddresses); - } + it('should push empty array', function () { + var emptyArray = new _roundRobinArray2.default(); + emptyArray.pushAll([]); + expect(emptyArray.isEmpty()).toBeTruthy(); - function callGetServers(session) { - var util = new _getServersUtil2.default(); - return util.callGetServers(session, ROUTER_ADDRESS); - } + var nonEmptyArray = new _roundRobinArray2.default([1, 2, 3]); + nonEmptyArray.pushAll([]); + expect(nonEmptyArray.toArray()).toEqual([1, 2, 3]); + }); - function parseTtl(record) { - var util = new _getServersUtil2.default(); - return util.parseTtl(record, ROUTER_ADDRESS); - } + it('should throw when trying to push illegal items', function () { + var emptyArray = new _roundRobinArray2.default(); + var nonEmptyArray = new _roundRobinArray2.default([1, 2, 3]); - function parseServers(record) { - var util = new _getServersUtil2.default(); - return util.parseServers(record, ROUTER_ADDRESS); - } + expect(function () { + return emptyArray.pushAll(undefined); + }).toThrow(); + expect(function () { + return nonEmptyArray.pushAll(undefined); + }).toThrow(); - function newRecord(_ref) { - var _ref$ttl = _ref.ttl, - ttl = _ref$ttl === undefined ? (0, _integer.int)(42) : _ref$ttl, - _ref$routers = _ref.routers, - routers = _ref$routers === undefined ? [] : _ref$routers, - _ref$readers = _ref.readers, - readers = _ref$readers === undefined ? [] : _ref$readers, - _ref$writers = _ref.writers, - writers = _ref$writers === undefined ? [] : _ref$writers; + expect(function () { + return emptyArray.pushAll(null); + }).toThrow(); + expect(function () { + return nonEmptyArray.pushAll(null); + }).toThrow(); - var routersField = { - "role": "ROUTE", - "addresses": routers - }; - var readersField = { - "role": "READ", - "addresses": readers - }; - var writersField = { - "role": "WRITE", - "addresses": writers - }; - return new _record2.default(["ttl", "servers"], [ttl, [routersField, readersField, writersField]]); - } + expect(function () { + return emptyArray.pushAll({}); + }).toThrow(); + expect(function () { + return nonEmptyArray.pushAll({}); + }).toThrow(); - function expectProtocolError(action, done) { - var promise = new _promise2.default(function (resolve, reject) { - try { - resolve(action()); - } catch (e) { - reject(e); - } - }); + expect(function () { + return emptyArray.pushAll({ a: 1, b: 2 }); + }).toThrow(); + expect(function () { + return nonEmptyArray.pushAll({ a: 1, b: 2 }); + }).toThrow(); + }); - promise.catch(function (error) { - expect(error.code).toBe(_error.PROTOCOL_ERROR); - done(); - }); - } + it('should step through array', function () { + var array = new _roundRobinArray2.default([1, 2, 3, 4, 5]); - var FakeSession = function () { - function FakeSession(runResponse) { - (0, _classCallCheck3.default)(this, FakeSession); + expect(array.next()).toEqual(1); + expect(array.next()).toEqual(2); + expect(array.next()).toEqual(3); + expect(array.next()).toEqual(4); + expect(array.next()).toEqual(5); + expect(array.next()).toEqual(1); + expect(array.next()).toEqual(2); + }); - this._runResponse = runResponse; - this._closed = false; - } + it('should step through single element array', function () { + var array = new _roundRobinArray2.default([5]); - (0, _createClass3.default)(FakeSession, [{ - key: "run", - value: function run() { - return this._runResponse; - } - }, { - key: "close", - value: function close() { - this._closed = true; - } - }, { - key: "isClosed", - value: function isClosed() { - return this._closed; - } - }], [{ - key: "successful", - value: function successful(result) { - return new FakeSession(_promise2.default.resolve(result)); - } - }, { - key: "failed", - value: function failed(error) { - return new FakeSession(_promise2.default.reject(error)); - } - }]); - return FakeSession; - }(); -}); + expect(array.next()).toEqual(5); + expect(array.next()).toEqual(5); + expect(array.next()).toEqual(5); + }); -},{"../../src/v1/error":311,"../../src/v1/integer":314,"../../src/v1/internal/get-servers-util":324,"../../src/v1/record":335,"babel-runtime/core-js/promise":59,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"lolex":261}],349:[function(require,module,exports){ -'use strict'; + it('should handle deleting item before current ', function () { + var array = new _roundRobinArray2.default([1, 2, 3, 4, 5]); -var _hostNameResolvers = require('../../src/v1/internal/host-name-resolvers'); + expect(array.next()).toEqual(1); + expect(array.next()).toEqual(2); + array.remove(2); + expect(array.next()).toEqual(4); + expect(array.next()).toEqual(5); + expect(array.next()).toEqual(1); + expect(array.next()).toEqual(3); + expect(array.next()).toEqual(4); + expect(array.next()).toEqual(5); + }); -var _features = require('../../src/v1/internal/features'); + it('should handle deleting item on current ', function () { + var array = new _roundRobinArray2.default([1, 2, 3, 4, 5]); -var _features2 = _interopRequireDefault(_features); + expect(array.next()).toEqual(1); + expect(array.next()).toEqual(2); + array.remove(3); + expect(array.next()).toEqual(4); + expect(array.next()).toEqual(5); + expect(array.next()).toEqual(1); + expect(array.next()).toEqual(2); + expect(array.next()).toEqual(4); + expect(array.next()).toEqual(5); + }); -var _connector = require('../../src/v1/internal/connector'); + it('should handle deleting item after current ', function () { + var array = new _roundRobinArray2.default([1, 2, 3, 4, 5]); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + expect(array.next()).toEqual(1); + expect(array.next()).toEqual(2); + array.remove(4); + expect(array.next()).toEqual(3); + expect(array.next()).toEqual(5); + expect(array.next()).toEqual(1); + expect(array.next()).toEqual(2); + expect(array.next()).toEqual(3); + }); -describe('DummyHostNameResolver', function () { + it('should handle deleting last item ', function () { + var array = new _roundRobinArray2.default([1, 2, 3, 4, 5]); - it('should resolve given address to itself', function (done) { - var seedRouter = 'localhost'; - var resolver = new _hostNameResolvers.DummyHostNameResolver(); + expect(array.next()).toEqual(1); + expect(array.next()).toEqual(2); + expect(array.next()).toEqual(3); + expect(array.next()).toEqual(4); + array.remove(5); + expect(array.next()).toEqual(1); + expect(array.next()).toEqual(2); + expect(array.next()).toEqual(3); + expect(array.next()).toEqual(4); + expect(array.next()).toEqual(1); + }); - resolver.resolve(seedRouter).then(function (addresses) { - expect(addresses.length).toEqual(1); - expect(addresses[0]).toEqual(seedRouter); - done(); - }); + it('should handle deleting first item ', function () { + var array = new _roundRobinArray2.default([1, 2, 3, 4, 5]); + array.remove(1); + expect(array.next()).toEqual(2); + expect(array.next()).toEqual(3); + expect(array.next()).toEqual(4); + expect(array.next()).toEqual(5); + expect(array.next()).toEqual(2); + expect(array.next()).toEqual(3); + expect(array.next()).toEqual(4); + expect(array.next()).toEqual(5); }); - it('should resolve given address with port to itself', function (done) { - var seedRouter = 'localhost:7474'; - var resolver = new _hostNameResolvers.DummyHostNameResolver(); + it('should handle deleting multiple items ', function () { + var array = new _roundRobinArray2.default([1, 2, 3, 1, 1]); + array.remove(1); + expect(array.next()).toEqual(2); + expect(array.next()).toEqual(3); + expect(array.next()).toEqual(2); + expect(array.next()).toEqual(3); + }); - resolver.resolve(seedRouter).then(function (addresses) { - expect(addresses.length).toEqual(1); - expect(addresses[0]).toEqual(seedRouter); - done(); - }); + it('should have correct toString ', function () { + var array = new _roundRobinArray2.default([1, 2, 3]); + expect(array.toString()).toEqual('[1,2,3]'); }); }); /** * Copyright (c) 2002-2017 "Neo Technology,"," @@ -45963,89 +51867,22 @@ describe('DummyHostNameResolver', function () { * limitations under the License. */ -describe('DnsHostNameResolver', function () { - - if ((0, _features2.default)('dns_lookup')) { - - var originalTimeout = void 0; - - beforeEach(function () { - // it sometimes takes couple seconds to perform dns lookup, increase the async test timeout - originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; - jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000; - }); - - afterEach(function () { - jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; - }); - - it('should resolve address', function (done) { - var seedRouter = 'neo4j.com'; - var resolver = new _hostNameResolvers.DnsHostNameResolver(); - - resolver.resolve(seedRouter).then(function (addresses) { - expect(addresses.length).toBeGreaterThan(0); - - addresses.forEach(function (address) { - expectToBeDefined(address); - expect((0, _connector.parseScheme)(address)).toEqual(''); - expectToBeDefined((0, _connector.parseHost)(address)); - expect((0, _connector.parsePort)(address)).not.toBeDefined(); - }); - - done(); - }); - }); - - it('should resolve address with port', function (done) { - var seedRouter = 'neo4j.com:7474'; - var resolver = new _hostNameResolvers.DnsHostNameResolver(); - - resolver.resolve(seedRouter).then(function (addresses) { - expect(addresses.length).toBeGreaterThan(0); - - addresses.forEach(function (address) { - expectToBeDefined(address); - expect((0, _connector.parseScheme)(address)).toEqual(''); - expectToBeDefined((0, _connector.parseHost)(address)); - expect((0, _connector.parsePort)(address)).toEqual('7474'); - }); +},{"../../lib/v1/internal/round-robin-array":23}],401:[function(require,module,exports){ +'use strict'; - done(); - }); - }); +var _routingTable = require('../../src/v1/internal/routing-table'); - it('should resolve unresolvable address to itself', function (done) { - var seedRouter = '127.0.0.1'; // IP can't be resolved - var resolver = new _hostNameResolvers.DnsHostNameResolver(); +var _routingTable2 = _interopRequireDefault(_routingTable); - resolver.resolve(seedRouter).then(function (addresses) { - expect(addresses.length).toEqual(1); - expect(addresses[0]).toEqual(seedRouter); - done(); - }); - }); +var _roundRobinArray = require('../../src/v1/internal/round-robin-array'); - it('should resolve unresolvable address with port to itself', function (done) { - var seedRouter = '127.0.0.1:7474'; // IP can't be resolved - var resolver = new _hostNameResolvers.DnsHostNameResolver(); +var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); - resolver.resolve(seedRouter).then(function (addresses) { - expect(addresses.length).toEqual(1); - expect(addresses[0]).toEqual(seedRouter); - done(); - }); - }); - } -}); +var _integer = require('../../src/v1/integer'); -function expectToBeDefined(value) { - expect(value).toBeDefined(); - expect(value).not.toBeNull(); -} +var _driver = require('../../src/v1/driver'); -},{"../../src/v1/internal/connector":322,"../../src/v1/internal/features":323,"../../src/v1/internal/host-name-resolvers":325}],350:[function(require,module,exports){ -"use strict"; +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Copyright (c) 2002-2017 "Neo Technology,"," @@ -46065,778 +51902,700 @@ function expectToBeDefined(value) { * See the License for the specific language governing permissions and * limitations under the License. */ +describe('routing-table', function () { -var alloc = require('../../lib/v1/internal/buf').alloc, - packstream = require("../../lib/v1/internal/packstream"), - Integer = require("../../lib/v1/integer").default, - Packer = packstream.Packer, - Unpacker = packstream.Unpacker, - Structure = packstream.Structure; + it('should not be stale when has routers, readers, writers and future expiration date', function () { + var table = createTable([1, 2], [3, 4], [5, 6], notExpired()); + expect(table.isStaleFor(_driver.READ)).toBeFalsy(); + expect(table.isStaleFor(_driver.WRITE)).toBeFalsy(); + }); -describe('packstream', function () { + it('should be stale when expiration date in the past', function () { + var table = createTable([1, 2], [1, 2], [1, 2], expired()); + expect(table.isStaleFor(_driver.READ)).toBeTruthy(); + expect(table.isStaleFor(_driver.WRITE)).toBeTruthy(); + }); - it('should pack integers', function () { - var n, i; - // test small numbers - for (n = -999; n <= 999; n += 1) { - i = Integer.fromNumber(n); - expect(packAndUnpack(i).toString()).toBe(i.toString()); - } - // positive numbers - for (n = 16; n <= 16; n += 1) { - i = Integer.fromNumber(Math.pow(2, n)); - expect(packAndUnpack(i).toString()).toBe(i.toString()); - } - // negative numbers - for (n = 0; n <= 63; n += 1) { - i = Integer.fromNumber(-Math.pow(2, n)); - expect(packAndUnpack(i).toString()).toBe(i.toString()); - } + it('should not be stale when has single router', function () { + var table = createTable([1], [2, 3], [4, 5], notExpired()); + expect(table.isStaleFor(_driver.READ)).toBeFalsy(); + expect(table.isStaleFor(_driver.WRITE)).toBeFalsy(); }); - it('should pack strings', function () { - expect(packAndUnpack("")).toBe(""); - expect(packAndUnpack("abcdefg123567")).toBe("abcdefg123567"); - var str = Array(65536 + 1).join('a'); // 2 ^ 16 + 1 - expect(packAndUnpack(str, str.length + 8)).toBe(str); + + it('should be stale for reads but not writes when no readers', function () { + var table = createTable([1, 2], [], [3, 4], notExpired()); + expect(table.isStaleFor(_driver.READ)).toBeTruthy(); + expect(table.isStaleFor(_driver.WRITE)).toBeFalsy(); }); - it('should pack structures', function () { - expect(packAndUnpack(new Structure(1, ["Hello, world!!!"])).fields[0]).toBe("Hello, world!!!"); + + it('should be stale for writes but not reads when no writers', function () { + var table = createTable([1, 2], [3, 4], [], notExpired()); + expect(table.isStaleFor(_driver.READ)).toBeFalsy(); + expect(table.isStaleFor(_driver.WRITE)).toBeTruthy(); }); - it('should pack lists', function () { - var list = ['a', 'b']; - var roundtripped = packAndUnpack(list); - expect(roundtripped[0]).toBe(list[0]); - expect(roundtripped[1]).toBe(list[1]); + + it('should not be stale with single reader', function () { + var table = createTable([1, 2], [3], [4, 5], notExpired()); + expect(table.isStaleFor(_driver.READ)).toBeFalsy(); + expect(table.isStaleFor(_driver.WRITE)).toBeFalsy(); }); - it('should pack long lists', function () { - var listLength = 256; - var list = []; - for (var i = 0; i < listLength; i++) { - list.push(null); - } - var roundtripped = packAndUnpack(list, 1400); - expect(roundtripped[0]).toBe(list[0]); - expect(roundtripped[1]).toBe(list[1]); + it('should not be stale with single writer', function () { + var table = createTable([1, 2], [3, 4], [5], notExpired()); + expect(table.isStaleFor(_driver.READ)).toBeFalsy(); + expect(table.isStaleFor(_driver.WRITE)).toBeFalsy(); }); -}); -function packAndUnpack(val, bufferSize) { - bufferSize = bufferSize || 128; - var buffer = alloc(bufferSize); - new Packer(buffer).packable(val)(); - buffer.reset(); - return new Unpacker().unpack(buffer); -} + it('should forget reader, writer but not router', function () { + var table = createTable([1, 2], [1, 2], [1, 2], notExpired()); -},{"../../lib/v1/integer":8,"../../lib/v1/internal/buf":9,"../../lib/v1/internal/packstream":20}],351:[function(require,module,exports){ -'use strict'; + table.forget(1); -/** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + expect(table.routers.toArray()).toEqual([1, 2]); + expect(table.readers.toArray()).toEqual([2]); + expect(table.writers.toArray()).toEqual([2]); + }); -var Pool = require('../../lib/v1/internal/pool').default; + it('should forget single reader', function () { + var table = createTable([1, 2], [42], [1, 2, 3], notExpired()); -describe('Pool', function () { - it('allocates if pool is empty', function () { - // Given - var counter = 0; - var key = "bolt://localhost:7687"; - var pool = new Pool(function (url, release) { - return new Resource(url, counter++, release); - }); + table.forget(42); + + expect(table.routers.toArray()).toEqual([1, 2]); + expect(table.readers.toArray()).toEqual([]); + expect(table.writers.toArray()).toEqual([1, 2, 3]); + }); + + it('should forget single writer', function () { + var table = createTable([1, 2], [3, 4, 5], [42], notExpired()); + + table.forget(42); + + expect(table.routers.toArray()).toEqual([1, 2]); + expect(table.readers.toArray()).toEqual([3, 4, 5]); + expect(table.writers.toArray()).toEqual([]); + }); + + it('should forget router', function () { + var table = createTable([1, 2], [1, 3], [4, 1], notExpired()); + + table.forgetRouter(1); + + expect(table.routers.toArray()).toEqual([2]); + expect(table.readers.toArray()).toEqual([1, 3]); + expect(table.writers.toArray()).toEqual([4, 1]); + }); + + it('should forget writer', function () { + var table = createTable([1, 2, 3], [2, 1, 5], [5, 1], notExpired()); + + table.forgetWriter(1); + + expect(table.routers.toArray()).toEqual([1, 2, 3]); + expect(table.readers.toArray()).toEqual([2, 1, 5]); + expect(table.writers.toArray()).toEqual([5]); + }); + + it('should return all servers in diff when other table is empty', function () { + var oldTable = createTable([1, 2], [3, 4], [5, 6], notExpired()); + var newTable = createTable([], [], [], notExpired()); + + var servers = oldTable.serversDiff(newTable); + + expect(servers).toEqual([1, 2, 3, 4, 5, 6]); + }); + + it('should no servers in diff when this table is empty', function () { + var oldTable = createTable([], [], [], notExpired()); + var newTable = createTable([1, 2], [3, 4], [5, 6], notExpired()); - // When - var r0 = pool.acquire(key); - var r1 = pool.acquire(key); + var servers = oldTable.serversDiff(newTable); - // Then - expect(r0.id).toBe(0); - expect(r1.id).toBe(1); + expect(servers).toEqual([]); }); - it('pools if resources are returned', function () { - // Given a pool that allocates - var counter = 0; - var key = "bolt://localhost:7687"; - var pool = new Pool(function (url, release) { - return new Resource(url, counter++, release); - }); + it('should include different routers in servers diff', function () { + var oldTable = createTable([1, 7, 2, 42], [3, 4], [5, 6], notExpired()); + var newTable = createTable([1, 2], [3, 4], [5, 6], notExpired()); - // When - var r0 = pool.acquire(key); - r0.close(); - var r1 = pool.acquire(key); + var servers = oldTable.serversDiff(newTable); - // Then - expect(r0.id).toBe(0); - expect(r1.id).toBe(0); + expect(servers).toEqual([7, 42]); }); - it('handles multiple keys', function () { - // Given a pool that allocates - var counter = 0; - var key1 = "bolt://localhost:7687"; - var key2 = "bolt://localhost:7688"; - var pool = new Pool(function (url, release) { - return new Resource(url, counter++, release); - }); + it('should include different readers in servers diff', function () { + var oldTable = createTable([1, 2], [3, 7, 4, 42], [5, 6], notExpired()); + var newTable = createTable([1, 2], [3, 4], [5, 6], notExpired()); - // When - var r0 = pool.acquire(key1); - var r1 = pool.acquire(key2); - r0.close(); - var r2 = pool.acquire(key1); - var r3 = pool.acquire(key2); + var servers = oldTable.serversDiff(newTable); - // Then - expect(r0.id).toBe(0); - expect(r1.id).toBe(1); - expect(r2.id).toBe(0); - expect(r3.id).toBe(2); + expect(servers).toEqual([7, 42]); }); - it('frees if pool reaches max size', function () { - // Given a pool that tracks destroyed resources - var counter = 0, - destroyed = []; - var key = "bolt://localhost:7687"; - var pool = new Pool(function (url, release) { - return new Resource(url, counter++, release); - }, function (resource) { - destroyed.push(resource); - }, function (resource) { - return true; - }, 2 // maxIdle - ); + it('should include different writers in servers diff', function () { + var oldTable = createTable([1, 2], [3, 4], [5, 7, 6, 42], notExpired()); + var newTable = createTable([1, 2], [3, 4], [5, 6], notExpired()); - // When - var r0 = pool.acquire(key); - var r1 = pool.acquire(key); - var r2 = pool.acquire(key); - r0.close(); - r1.close(); - r2.close(); + var servers = oldTable.serversDiff(newTable); - // Then - expect(destroyed.length).toBe(1); - expect(destroyed[0].id).toBe(r2.id); + expect(servers).toEqual([7, 42]); }); - it('frees if validate returns false', function () { - // Given a pool that allocates - var counter = 0, - destroyed = []; - var key = "bolt://localhost:7687"; - var pool = new Pool(function (url, release) { - return new Resource(url, counter++, release); - }, function (resource) { - destroyed.push(resource); - }, function (resource) { - return false; - }, 1000 // maxIdle - ); + it('should include different servers in diff', function () { + var oldTable = createTable([1, 2, 11], [22, 3, 33, 4], [5, 44, 6], notExpired()); + var newTable = createTable([1], [2, 3, 4, 6], [5], notExpired()); - // When - var r0 = pool.acquire(key); - var r1 = pool.acquire(key); - r0.close(); - r1.close(); + var servers = oldTable.serversDiff(newTable); - // Then - expect(destroyed.length).toBe(2); - expect(destroyed[0].id).toBe(r0.id); - expect(destroyed[1].id).toBe(r1.id); + expect(servers).toEqual([11, 22, 33, 44]); }); - it('purges keys', function () { - // Given a pool that allocates - var counter = 0; - var key1 = "bolt://localhost:7687"; - var key2 = "bolt://localhost:7688"; - var pool = new Pool(function (url, release) { - return new Resource(url, counter++, release); - }, function (res) { - res.destroyed = true;return true; - }); + it('should have correct toString', function () { + var table = createTable([1, 2], [3, 4], [5, 6], 42); + expect(table.toString()).toEqual('RoutingTable[expirationTime=42, routers=[1,2], readers=[3,4], writers=[5,6]]'); + }); - // When - var r0 = pool.acquire(key1); - var r1 = pool.acquire(key2); - r0.close(); - r1.close(); - expect(pool.has(key1)).toBe(true); - expect(pool.has(key2)).toBe(true); - pool.purge(key1); - expect(pool.has(key1)).toBe(false); - expect(pool.has(key2)).toBe(true); + function expired() { + return Date.now() - 3600; // expired an hour ago + } - var r2 = pool.acquire(key1); - var r3 = pool.acquire(key2); + function notExpired() { + return Date.now() + 3600; // will expire in an hour + } - // Then - expect(r0.id).toBe(0); - expect(r0.destroyed).toBe(true); - expect(r1.id).toBe(1); - expect(r2.id).toBe(2); - expect(r3.id).toBe(1); - }); + function createTable(routers, readers, writers, expirationTime) { + var routersArray = new _roundRobinArray2.default(routers); + var readersArray = new _roundRobinArray2.default(readers); + var writersArray = new _roundRobinArray2.default(writers); + var expiration = (0, _integer.int)(expirationTime); + return new _routingTable2.default(routersArray, readersArray, writersArray, expiration); + } }); -function Resource(key, id, release) { - var self = this; - this.id = id; - this.close = function () { - release(key, self); - }; -} +},{"../../src/v1/driver":355,"../../src/v1/integer":359,"../../src/v1/internal/round-robin-array":374,"../../src/v1/internal/routing-table":375}],402:[function(require,module,exports){ +'use strict'; -},{"../../lib/v1/internal/pool":21}],352:[function(require,module,exports){ -"use strict"; +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); -var _promise = require("babel-runtime/core-js/promise"); +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var _promise2 = _interopRequireDefault(_promise); +var _createClass2 = require('babel-runtime/helpers/createClass'); -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); +var _createClass3 = _interopRequireDefault(_createClass2); -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); +var _promise = require('babel-runtime/core-js/promise'); -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); +var _promise2 = _interopRequireDefault(_promise); -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); +var _routingUtil = require('../../src/v1/internal/routing-util'); -var _createClass2 = require("babel-runtime/helpers/createClass"); +var _routingUtil2 = _interopRequireDefault(_routingUtil); -var _createClass3 = _interopRequireDefault(_createClass2); +var _record = require('../../src/v1/record'); -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); +var _record2 = _interopRequireDefault(_record); -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); +var _integer = require('../../src/v1/integer'); -var _inherits2 = require("babel-runtime/helpers/inherits"); +var _integer2 = _interopRequireDefault(_integer); -var _inherits3 = _interopRequireDefault(_inherits2); +var _error = require('../../src/v1/error'); -var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray"); +var _lolex = require('lolex'); -var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); +var _lolex2 = _interopRequireDefault(_lolex); -var _rediscovery = require("../../src/v1/internal/rediscovery"); +var _fakeConnection = require('./fake-connection'); -var _rediscovery2 = _interopRequireDefault(_rediscovery); +var _fakeConnection2 = _interopRequireDefault(_fakeConnection); -var _getServersUtil = require("../../src/v1/internal/get-servers-util"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var _getServersUtil2 = _interopRequireDefault(_getServersUtil); +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ -var _error = require("../../src/v1/error"); +var ROUTER_ADDRESS = 'bolt+routing://test.router.com'; -var _record = require("../../src/v1/record"); +describe('get-servers-util', function () { -var _record2 = _interopRequireDefault(_record); + var clock = void 0; -var _integer = require("../../src/v1/integer"); + beforeAll(function () { + clock = _lolex2.default.install(); + }); -var _roundRobinArray = require("../../src/v1/internal/round-robin-array"); + afterAll(function () { + clock.uninstall(); + }); -var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); + it('should return retrieved records when query succeeds', function (done) { + var session = FakeSession.successful({ records: ['foo', 'bar', 'baz'] }); -var _routingTable = require("../../src/v1/internal/routing-table"); + callRoutingProcedure(session).then(function (records) { + expect(records).toEqual(['foo', 'bar', 'baz']); + done(); + }).catch(console.log); + }); -var _routingTable2 = _interopRequireDefault(_routingTable); + it('should close session when query succeeds', function (done) { + var session = FakeSession.successful({ records: ['foo', 'bar', 'baz'] }); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + callRoutingProcedure(session).then(function () { + expect(session.isClosed()).toBeTruthy(); + done(); + }).catch(console.log); + }); -var ROUTER_ADDRESS = 'bolt+routing://test.router.com'; /** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + it('should not close session when query fails', function (done) { + var session = FakeSession.failed((0, _error.newError)('Oh no!', _error.SESSION_EXPIRED)); -describe('rediscovery', function () { + callRoutingProcedure(session).then(function () { + expect(session.isClosed()).toBeFalsy(); + done(); + }).catch(console.log); + }); - it('should return null when connection error happens', function (done) { - var util = new FakeGetServersUtil({ - callGetServers: function callGetServers() { - return null; - } - }); + it('should return null on connection error', function (done) { + var session = FakeSession.failed((0, _error.newError)('Oh no!', _error.SESSION_EXPIRED)); - lookupRoutingTableOnRouter(util).then(function (routingTable) { - expect(routingTable).toBeNull(); + callRoutingProcedure(session).then(function (records) { + expect(records).toBeNull(); done(); - }); + }).catch(console.log); }); - it('should throw when no records are returned', function (done) { - var util = new FakeGetServersUtil({ - callGetServers: function callGetServers() { - return []; - } - }); + it('should fail when procedure not found', function (done) { + var session = FakeSession.failed((0, _error.newError)('Oh no!', 'Neo.ClientError.Procedure.ProcedureNotFound')); - lookupRoutingTableOnRouter(util).catch(function (error) { - expectProtocolError(error, 'Illegal response from router'); + callRoutingProcedure(session).catch(function (error) { + expect(error.code).toBe(_error.SERVICE_UNAVAILABLE); + expect(error.message).toBe('Server ' + ROUTER_ADDRESS + ' could not perform routing. ' + 'Make sure you are connecting to a causal cluster'); done(); }); }); - it('should throw when multiple records are returned', function (done) { - var util = new FakeGetServersUtil({ - callGetServers: function callGetServers() { - return [new _record2.default(['a'], ['aaa']), new _record2.default(['b'], ['bbb'])]; - } - }); + it('should use getServers procedure when server version is older than 3.2.0', function (done) { + var connection = new _fakeConnection2.default().withServerVersion('Neo4j/3.1.9'); + var session = FakeSession.withFakeConnection(connection); - lookupRoutingTableOnRouter(util).catch(function (error) { - expectProtocolError(error, 'Illegal response from router'); + callRoutingProcedure(session, {}).then(function () { + expect(connection.seenStatements).toEqual(['CALL dbms.cluster.routing.getServers']); + expect(connection.seenParameters).toEqual([{}]); done(); }); }); - it('should throw when ttl parsing throws', function (done) { - var util = new FakeGetServersUtil({ - callGetServers: function callGetServers() { - return [new _record2.default(['a'], ['aaa'])]; - }, - parseTtl: function parseTtl() { - throw (0, _error.newError)('Unable to parse TTL', _error.PROTOCOL_ERROR); - } - }); + it('should use getRoutingTable procedure with empty routing context when server version is 3.2.0', function (done) { + var connection = new _fakeConnection2.default().withServerVersion('Neo4j/3.2.0'); + var session = FakeSession.withFakeConnection(connection); - lookupRoutingTableOnRouter(util).catch(function (error) { - expectProtocolError(error, 'Unable to parse TTL'); + callRoutingProcedure(session, {}).then(function () { + expect(connection.seenStatements).toEqual(['CALL dbms.cluster.routing.getRoutingTable({context})']); + expect(connection.seenParameters).toEqual([{ context: {} }]); done(); }); }); - it('should throw when servers parsing throws', function (done) { - var util = new FakeGetServersUtil({ - callGetServers: function callGetServers() { - return [new _record2.default(['a'], ['aaa'])]; - }, - parseTtl: function parseTtl() { - return (0, _integer.int)(42); - }, - parseServers: function parseServers() { - throw (0, _error.newError)('Unable to parse servers', _error.PROTOCOL_ERROR); - } - }); + it('should use getRoutingTable procedure with routing context when server version is 3.2.0', function (done) { + var connection = new _fakeConnection2.default().withServerVersion('Neo4j/3.2.0'); + var session = FakeSession.withFakeConnection(connection); - lookupRoutingTableOnRouter(util).catch(function (error) { - expectProtocolError(error, 'Unable to parse servers'); + callRoutingProcedure(session, { key1: 'value1', key2: 'value2' }).then(function () { + expect(connection.seenStatements).toEqual(['CALL dbms.cluster.routing.getRoutingTable({context})']); + expect(connection.seenParameters).toEqual([{ context: { key1: 'value1', key2: 'value2' } }]); done(); }); }); - it('should throw when no routers', function (done) { - var util = new FakeGetServersUtil({ - callGetServers: function callGetServers() { - return [new _record2.default(['a'], ['aaa'])]; - }, - parseTtl: function parseTtl() { - return (0, _integer.int)(42); - }, - parseServers: function parseServers() { - return { - routers: new _roundRobinArray2.default(), - readers: new _roundRobinArray2.default(['reader1']), - writers: new _roundRobinArray2.default(['writer1']) - }; - } - }); + it('should use getRoutingTable procedure with empty routing context when server version is newer than 3.2.0', function (done) { + var connection = new _fakeConnection2.default().withServerVersion('Neo4j/3.3.5'); + var session = FakeSession.withFakeConnection(connection); - lookupRoutingTableOnRouter(util).catch(function (error) { - expectProtocolError(error, 'Received no routers'); + callRoutingProcedure(session, {}).then(function () { + expect(connection.seenStatements).toEqual(['CALL dbms.cluster.routing.getRoutingTable({context})']); + expect(connection.seenParameters).toEqual([{ context: {} }]); done(); }); }); - it('should throw when no readers', function (done) { - var util = new FakeGetServersUtil({ - callGetServers: function callGetServers() { - return [new _record2.default(['a'], ['aaa'])]; - }, - parseTtl: function parseTtl() { - return (0, _integer.int)(42); - }, - parseServers: function parseServers() { - return { - routers: new _roundRobinArray2.default(['router1']), - readers: new _roundRobinArray2.default(), - writers: new _roundRobinArray2.default(['writer1']) - }; - } - }); + it('should use getRoutingTable procedure with routing context when server version is newer than 3.2.0', function (done) { + var connection = new _fakeConnection2.default().withServerVersion('Neo4j/3.2.8'); + var session = FakeSession.withFakeConnection(connection); - lookupRoutingTableOnRouter(util).catch(function (error) { - expectProtocolError(error, 'Received no readers'); + callRoutingProcedure(session, { key1: 'foo', key2: 'bar' }).then(function () { + expect(connection.seenStatements).toEqual(['CALL dbms.cluster.routing.getRoutingTable({context})']); + expect(connection.seenParameters).toEqual([{ context: { key1: 'foo', key2: 'bar' } }]); done(); }); }); - it('should return routing table when no writers', function (done) { - var util = new FakeGetServersUtil({ - callGetServers: function callGetServers() { - return [new _record2.default(['a'], ['aaa'])]; - }, - parseTtl: function parseTtl() { - return (0, _integer.int)(42); - }, - parseServers: function parseServers() { - return { - routers: new _roundRobinArray2.default(['router1']), - readers: new _roundRobinArray2.default(['reader1']), - writers: new _roundRobinArray2.default() - }; - } - }); + it('should parse valid ttl', function () { + testValidTtlParsing(100, 5); + testValidTtlParsing(Date.now(), 3600); // 1 hour + testValidTtlParsing(Date.now(), 86400); // 24 hours + testValidTtlParsing(Date.now(), 3628800); // 42 days + testValidTtlParsing(0, 1); + testValidTtlParsing(50, 0); + testValidTtlParsing(Date.now(), 0); + }); - lookupRoutingTableOnRouter(util).then(function (routingTable) { - expect(routingTable).toBeDefined(); - expect(routingTable).not.toBeNull(); - done(); - }); + it('should not overflow parsing huge ttl', function () { + var record = newRecord({ ttl: _integer2.default.MAX_VALUE }); + clock.setSystemTime(42); + + var expirationTime = parseTtl(record); + + expect(expirationTime).toBe(_integer2.default.MAX_VALUE); }); - it('should return valid routing table with 1 router, 1 reader and 1 writer', function (done) { - testValidRoutingTable(['router1'], ['reader1'], ['writer1'], (0, _integer.int)(42), done); + it('should return valid value parsing negative ttl', function () { + var record = newRecord({ ttl: (0, _integer.int)(-42) }); + clock.setSystemTime(42); + + var expirationTime = parseTtl(record); + + expect(expirationTime).toBe(_integer2.default.MAX_VALUE); }); - it('should return valid routing table with 2 routers, 2 readers and 2 writers', function (done) { - testValidRoutingTable(['router1', 'router2'], ['reader1', 'reader2'], ['writer1', 'writer2'], (0, _integer.int)(Date.now()), done); + it('should throw when record does not have a ttl entry', function (done) { + var record = new _record2.default(["notTtl", "servers"], []); + expectProtocolError(function () { + return parseTtl(record); + }, done); }); - it('should return valid routing table with 1 router, 3 readers and 1 writer', function (done) { - testValidRoutingTable(['router1'], ['reader1', 'reader2', 'reader3'], ['writer1'], (0, _integer.int)(12345), done); + it('should parse servers', function () { + testValidServersParsing([], [], []); + + testValidServersParsing(['router1'], [], []); + testValidServersParsing([], ['reader1'], []); + testValidServersParsing([], [], ['writer1']); + + testValidServersParsing(['router1'], ['reader1'], []); + testValidServersParsing(['router1'], ['reader1'], ['writer1']); + testValidServersParsing([], ['reader1'], ['writer1']); + + testValidServersParsing(['router1'], ['reader1'], ['writer1']); + testValidServersParsing(['router1', 'router2'], ['reader1', 'reader2'], ['writer1']); + testValidServersParsing(['router1', 'router2'], ['reader1', 'reader2'], ['writer1', 'writer2']); }); - function testValidRoutingTable(routerAddresses, readerAddresses, writerAddresses, expires, done) { - var util = new FakeGetServersUtil({ - callGetServers: function callGetServers() { - return [new _record2.default(['a'], ['aaa'])]; - }, - parseTtl: function parseTtl() { - return expires; - }, - parseServers: function parseServers() { - return { - routers: new _roundRobinArray2.default(routerAddresses), - readers: new _roundRobinArray2.default(readerAddresses), - writers: new _roundRobinArray2.default(writerAddresses) - }; - } - }); + it('should fail to parse servers entry when record does not have servers', function (done) { + var record = new _record2.default(['ttl', 'notServers'], [(0, _integer.int)(42), [{ "role": "READ", "addresses": ['1', '2', '3'] }]]); + expectProtocolError(function () { + return parseServers(record); + }, done); + }); - lookupRoutingTableOnRouter(util).then(function (routingTable) { - expect(routingTable).toBeDefined(); - expect(routingTable).not.toBeNull(); + it('should fail to parse servers entry without role', function (done) { + var record = new _record2.default(['ttl', 'servers'], [(0, _integer.int)(42), [{ "notRole": "READ", "addresses": ['1', '2', '3'] }]]); + expectProtocolError(function () { + return parseServers(record); + }, done); + }); - expect(routingTable.expirationTime).toEqual(expires); + it('should fail to parse servers entry with illegal role', function (done) { + var record = new _record2.default(['ttl', 'servers'], [(0, _integer.int)(42), [{ "role": "ARBITER", "addresses": ['1', '2', '3'] }]]); + expectProtocolError(function () { + return parseServers(record); + }, done); + }); - var allServers = routingTable.serversDiff(new _routingTable2.default()).sort(); - var allExpectedServers = [].concat((0, _toConsumableArray3.default)(routerAddresses), (0, _toConsumableArray3.default)(readerAddresses), (0, _toConsumableArray3.default)(writerAddresses)).sort(); - expect(allServers).toEqual(allExpectedServers); + it('should fail to parse servers entry with just ttl', function (done) { + var record = new _record2.default(['ttl', 'servers'], [(0, _integer.int)(42), [{ "role": "READ" }]]); + expectProtocolError(function () { + return parseServers(record); + }, done); + }); - done(); - }); + it('should fail to parse servers entry without addresses', function (done) { + var record = new _record2.default(['ttl', 'servers'], [(0, _integer.int)(42), [{ "role": "WRITE", "notAddresses": ['1', '2', '3'] }]]); + expectProtocolError(function () { + return parseServers(record); + }, done); + }); + + it('should fail to parse servers entry with string addresses', function (done) { + var record = new _record2.default(['ttl', 'servers'], [(0, _integer.int)(42), [{ "role": "WRITE", "addresses": '' }]]); + expectProtocolError(function () { + return parseServers(record); + }, done); + }); + + it('should fail to parse servers entry with null addresses', function (done) { + var record = new _record2.default(['ttl', 'servers'], [(0, _integer.int)(42), [{ "role": "WRITE", "addresses": null }]]); + expectProtocolError(function () { + return parseServers(record); + }, done); + }); + + it('should fail to parse servers entry with integer addresses', function (done) { + var record = new _record2.default(['ttl', 'servers'], [(0, _integer.int)(42), [{ "role": "WRITE", "addresses": 12345 }]]); + expectProtocolError(function () { + return parseServers(record); + }, done); + }); + + it('should fail to parse servers entry with object addresses', function (done) { + var record = new _record2.default(['ttl', 'servers'], [(0, _integer.int)(42), [{ "role": "WRITE", "addresses": { key: ['localhost'] } }]]); + expectProtocolError(function () { + return parseServers(record); + }, done); + }); + + function testValidTtlParsing(currentTime, ttlSeconds) { + var record = newRecord({ ttl: (0, _integer.int)(ttlSeconds) }); + clock.setSystemTime(currentTime); + + var expirationTime = parseTtl(record).toNumber(); + + expect(expirationTime).toEqual(currentTime + ttlSeconds * 1000); + } + + function testValidServersParsing(routerAddresses, readerAddresses, writerAddresses) { + var record = newRecord({ routers: routerAddresses, readers: readerAddresses, writers: writerAddresses }); + + var _parseServers = parseServers(record), + routers = _parseServers.routers, + readers = _parseServers.readers, + writers = _parseServers.writers; + + expect(routers.toArray()).toEqual(routerAddresses); + expect(readers.toArray()).toEqual(readerAddresses); + expect(writers.toArray()).toEqual(writerAddresses); + } + + function callRoutingProcedure(session, routingContext) { + var util = new _routingUtil2.default(routingContext || {}); + return util.callRoutingProcedure(session, ROUTER_ADDRESS); } - function lookupRoutingTableOnRouter(getServersUtil) { - var rediscovery = new _rediscovery2.default(getServersUtil); - return rediscovery.lookupRoutingTableOnRouter(null, ROUTER_ADDRESS); + function parseTtl(record) { + var util = new _routingUtil2.default(); + return util.parseTtl(record, ROUTER_ADDRESS); } - function expectProtocolError(error, messagePrefix) { - expect(error.code).toEqual(_error.PROTOCOL_ERROR); - expect(error.message.indexOf(messagePrefix)).toEqual(0); + function parseServers(record) { + var util = new _routingUtil2.default(); + return util.parseServers(record, ROUTER_ADDRESS); } - function shouldNotBeCalled() { - throw new Error('Should not be called'); + function newRecord(_ref) { + var _ref$ttl = _ref.ttl, + ttl = _ref$ttl === undefined ? (0, _integer.int)(42) : _ref$ttl, + _ref$routers = _ref.routers, + routers = _ref$routers === undefined ? [] : _ref$routers, + _ref$readers = _ref.readers, + readers = _ref$readers === undefined ? [] : _ref$readers, + _ref$writers = _ref.writers, + writers = _ref$writers === undefined ? [] : _ref$writers; + + var routersField = { + "role": "ROUTE", + "addresses": routers + }; + var readersField = { + "role": "READ", + "addresses": readers + }; + var writersField = { + "role": "WRITE", + "addresses": writers + }; + return new _record2.default(["ttl", "servers"], [ttl, [routersField, readersField, writersField]]); } - var FakeGetServersUtil = function (_GetServersUtil) { - (0, _inherits3.default)(FakeGetServersUtil, _GetServersUtil); + function expectProtocolError(action, done) { + var promise = new _promise2.default(function (resolve, reject) { + try { + resolve(action()); + } catch (e) { + reject(e); + } + }); - function FakeGetServersUtil(_ref) { - var _ref$callGetServers = _ref.callGetServers, - callGetServers = _ref$callGetServers === undefined ? shouldNotBeCalled : _ref$callGetServers, - _ref$parseTtl = _ref.parseTtl, - parseTtl = _ref$parseTtl === undefined ? shouldNotBeCalled : _ref$parseTtl, - _ref$parseServers = _ref.parseServers, - parseServers = _ref$parseServers === undefined ? shouldNotBeCalled : _ref$parseServers; - (0, _classCallCheck3.default)(this, FakeGetServersUtil); + promise.catch(function (error) { + expect(error.code).toBe(_error.PROTOCOL_ERROR); + done(); + }); + } - var _this = (0, _possibleConstructorReturn3.default)(this, (FakeGetServersUtil.__proto__ || (0, _getPrototypeOf2.default)(FakeGetServersUtil)).call(this)); + var FakeSession = function () { + function FakeSession(runResponse, fakeConnection) { + (0, _classCallCheck3.default)(this, FakeSession); - _this._callGetServers = callGetServers; - _this._parseTtl = parseTtl; - _this._parseServers = parseServers; - return _this; + this._runResponse = runResponse; + this._fakeConnection = fakeConnection; + this._closed = false; } - (0, _createClass3.default)(FakeGetServersUtil, [{ - key: "callGetServers", - value: function callGetServers(session, routerAddress) { - var _this2 = this; - - return new _promise2.default(function (resolve, reject) { - try { - resolve(_this2._callGetServers()); - } catch (error) { - reject(error); - } - }); + (0, _createClass3.default)(FakeSession, [{ + key: '_run', + value: function _run(ignoreStatement, ignoreParameters, statementRunner) { + if (this._runResponse) { + return this._runResponse; + } + statementRunner(this._fakeConnection); + return _promise2.default.resolve(); } }, { - key: "parseTtl", - value: function parseTtl(record, routerAddress) { - return this._parseTtl(); + key: 'close', + value: function close() { + this._closed = true; } }, { - key: "parseServers", - value: function parseServers(record, routerAddress) { - return this._parseServers(); + key: 'isClosed', + value: function isClosed() { + return this._closed; + } + }], [{ + key: 'successful', + value: function successful(result) { + return new FakeSession(_promise2.default.resolve(result), null); + } + }, { + key: 'failed', + value: function failed(error) { + return new FakeSession(_promise2.default.reject(error), null); + } + }, { + key: 'withFakeConnection', + value: function withFakeConnection(connection) { + return new FakeSession(null, connection); } }]); - return FakeGetServersUtil; - }(_getServersUtil2.default); + return FakeSession; + }(); }); -},{"../../src/v1/error":311,"../../src/v1/integer":314,"../../src/v1/internal/get-servers-util":324,"../../src/v1/internal/rediscovery":328,"../../src/v1/internal/round-robin-array":329,"../../src/v1/internal/routing-table":330,"../../src/v1/record":335,"babel-runtime/core-js/object/get-prototype-of":56,"babel-runtime/core-js/promise":59,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64,"babel-runtime/helpers/inherits":66,"babel-runtime/helpers/possibleConstructorReturn":67,"babel-runtime/helpers/toConsumableArray":68}],353:[function(require,module,exports){ +},{"../../src/v1/error":356,"../../src/v1/integer":359,"../../src/v1/internal/routing-util":376,"../../src/v1/record":382,"./fake-connection":395,"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"lolex":303}],403:[function(require,module,exports){ 'use strict'; -var _roundRobinArray = require('../../lib/v1/internal/round-robin-array'); - -var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -describe('round-robin-array', function () { - - it('should behave correctly when empty', function () { - var array = new _roundRobinArray2.default(); - - expect(array.isEmpty()).toBeTruthy(); - expect(array.size()).toEqual(0); - expect(array.next()).toBeNull(); - expect(array.toArray()).toEqual([]); +var _serverVersion = require('../../src/v1/internal/server-version'); - array.remove(1); +describe('ServerVersion', function () { - expect(array.isEmpty()).toBeTruthy(); - expect(array.size()).toEqual(0); - expect(array.next()).toBeNull(); - expect(array.toArray()).toEqual([]); + it('should construct with correct values', function () { + verifyVersion(new _serverVersion.ServerVersion(2, 3, 10), 2, 3, 10); + verifyVersion(new _serverVersion.ServerVersion(3, 2, 0), 3, 2, 0); + verifyVersion(new _serverVersion.ServerVersion(1, 9, 12), 1, 9, 12); }); - it('should behave correctly when contains single element', function () { - var array = new _roundRobinArray2.default([5]); - - expect(array.isEmpty()).toBeFalsy(); - expect(array.size()).toEqual(1); - expect(array.next()).toEqual(5); - expect(array.toArray()).toEqual([5]); - - array.remove(1); - - expect(array.isEmpty()).toBeFalsy(); - expect(array.size()).toEqual(1); - expect(array.next()).toEqual(5); - expect(array.toArray()).toEqual([5]); - - array.remove(5); - - expect(array.isEmpty()).toBeTruthy(); - expect(array.size()).toEqual(0); - expect(array.next()).toBeNull(); - expect(array.toArray()).toEqual([]); + it('should define correct 3.2.0 constant', function () { + verifyVersion(_serverVersion.VERSION_3_2_0, 3, 2, 0); }); - it('should push items', function () { - var array1 = new _roundRobinArray2.default(); - array1.pushAll([1]); - expect(array1.toArray()).toEqual([1]); - - var array2 = new _roundRobinArray2.default([]); - array2.pushAll([1, 2, 3]); - expect(array2.toArray()).toEqual([1, 2, 3]); - - var array3 = new _roundRobinArray2.default([1, 2, 3]); - array3.pushAll([4, 5]); - expect(array3.toArray()).toEqual([1, 2, 3, 4, 5]); + it('should parse "undefined" strings to 3.0.0 for backwards compatibility reasons', function () { + verifyVersion(parse(null), 3, 0, 0); + verifyVersion(parse(undefined), 3, 0, 0); + verifyVersion(parse(''), 3, 0, 0); }); - it('should push empty array', function () { - var emptyArray = new _roundRobinArray2.default(); - emptyArray.pushAll([]); - expect(emptyArray.isEmpty()).toBeTruthy(); - - var nonEmptyArray = new _roundRobinArray2.default([1, 2, 3]); - nonEmptyArray.pushAll([]); - expect(nonEmptyArray.toArray()).toEqual([1, 2, 3]); + it('should fail to parse object, array and function', function () { + expect(function () { + return parse({}); + }).toThrowError(TypeError); + expect(function () { + return parse([]); + }).toThrowError(TypeError); + expect(function () { + return parse(function () {}); + }).toThrowError(TypeError); }); - it('should throw when trying to push illegal items', function () { - var emptyArray = new _roundRobinArray2.default(); - var nonEmptyArray = new _roundRobinArray2.default([1, 2, 3]); - + it('should fail to parse illegal strings', function () { expect(function () { - return emptyArray.pushAll(undefined); + return parse('Cat'); }).toThrow(); expect(function () { - return nonEmptyArray.pushAll(undefined); + return parse('Dog'); }).toThrow(); - expect(function () { - return emptyArray.pushAll(null); + return parse('Neo4j'); }).toThrow(); expect(function () { - return nonEmptyArray.pushAll(null); + return parse('Neo4j/'); }).toThrow(); - expect(function () { - return emptyArray.pushAll({}); + return parse('Not-Neo4j/3.1.0'); }).toThrow(); expect(function () { - return nonEmptyArray.pushAll({}); + return parse('Neo4j/5'); }).toThrow(); - expect(function () { - return emptyArray.pushAll({ a: 1, b: 2 }); + return parse('Neo4j/3.'); }).toThrow(); expect(function () { - return nonEmptyArray.pushAll({ a: 1, b: 2 }); + return parse('Neo4j/1.A'); + }).toThrow(); + expect(function () { + return parse('Neo4j/1.Hello'); }).toThrow(); }); - it('should step through array', function () { - var array = new _roundRobinArray2.default([1, 2, 3, 4, 5]); - - expect(array.next()).toEqual(1); - expect(array.next()).toEqual(2); - expect(array.next()).toEqual(3); - expect(array.next()).toEqual(4); - expect(array.next()).toEqual(5); - expect(array.next()).toEqual(1); - expect(array.next()).toEqual(2); - }); - - it('should step through single element array', function () { - var array = new _roundRobinArray2.default([5]); + it('should parse valid version strings', function () { + verifyVersion(parse('Neo4j/3.2.1'), 3, 2, 1); + verifyVersion(parse('Neo4j/1.9.10'), 1, 9, 10); + verifyVersion(parse('Neo4j/7.77.777'), 7, 77, 777); - expect(array.next()).toEqual(5); - expect(array.next()).toEqual(5); - expect(array.next()).toEqual(5); - }); + verifyVersion(parse('Neo4j/3.10.0-GA'), 3, 10, 0); + verifyVersion(parse('Neo4j/2.5.5-RC01'), 2, 5, 5); + verifyVersion(parse('Neo4j/3.1.1-SNAPSHOT'), 3, 1, 1); + verifyVersion(parse('Neo4j/2.0.0-M09'), 2, 0, 0); - it('should handle deleting item before current ', function () { - var array = new _roundRobinArray2.default([1, 2, 3, 4, 5]); + verifyVersion(parse('Neo4j/3.2'), 3, 2, 0); + verifyVersion(parse('Neo4j/1.5'), 1, 5, 0); + verifyVersion(parse('Neo4j/42.42'), 42, 42, 0); - expect(array.next()).toEqual(1); - expect(array.next()).toEqual(2); - array.remove(2); - expect(array.next()).toEqual(4); - expect(array.next()).toEqual(5); - expect(array.next()).toEqual(1); - expect(array.next()).toEqual(3); - expect(array.next()).toEqual(4); - expect(array.next()).toEqual(5); + verifyVersion(parse('Neo4j/2.2-GA'), 2, 2, 0); + verifyVersion(parse('Neo4j/3.0-RC01'), 3, 0, 0); + verifyVersion(parse('Neo4j/2.3-SNAPSHOT'), 2, 3, 0); + verifyVersion(parse('Neo4j/2.2-M09'), 2, 2, 0); }); - it('should handle deleting item on current ', function () { - var array = new _roundRobinArray2.default([1, 2, 3, 4, 5]); - - expect(array.next()).toEqual(1); - expect(array.next()).toEqual(2); - array.remove(3); - expect(array.next()).toEqual(4); - expect(array.next()).toEqual(5); - expect(array.next()).toEqual(1); - expect(array.next()).toEqual(2); - expect(array.next()).toEqual(4); - expect(array.next()).toEqual(5); + it('should compare equal versions', function () { + expect(new _serverVersion.ServerVersion(3, 1, 0).compareTo(new _serverVersion.ServerVersion(3, 1, 0))).toEqual(0); + expect(new _serverVersion.ServerVersion(1, 9, 12).compareTo(new _serverVersion.ServerVersion(1, 9, 12))).toEqual(0); + expect(new _serverVersion.ServerVersion(2, 3, 8).compareTo(new _serverVersion.ServerVersion(2, 3, 8))).toEqual(0); }); - it('should handle deleting item after current ', function () { - var array = new _roundRobinArray2.default([1, 2, 3, 4, 5]); + it('should compare correctly by major', function () { + expect(new _serverVersion.ServerVersion(3, 1, 0).compareTo(new _serverVersion.ServerVersion(2, 1, 0))).toBeGreaterThan(0); + expect(new _serverVersion.ServerVersion(2, 1, 0).compareTo(new _serverVersion.ServerVersion(3, 1, 0))).toBeLessThan(0); - expect(array.next()).toEqual(1); - expect(array.next()).toEqual(2); - array.remove(4); - expect(array.next()).toEqual(3); - expect(array.next()).toEqual(5); - expect(array.next()).toEqual(1); - expect(array.next()).toEqual(2); - expect(array.next()).toEqual(3); + expect(new _serverVersion.ServerVersion(3, 1, 4).compareTo(new _serverVersion.ServerVersion(1, 9, 10))).toBeGreaterThan(0); + expect(new _serverVersion.ServerVersion(1, 5, 42).compareTo(new _serverVersion.ServerVersion(10, 10, 43))).toBeLessThan(0); }); - it('should handle deleting last item ', function () { - var array = new _roundRobinArray2.default([1, 2, 3, 4, 5]); - - expect(array.next()).toEqual(1); - expect(array.next()).toEqual(2); - expect(array.next()).toEqual(3); - expect(array.next()).toEqual(4); - array.remove(5); - expect(array.next()).toEqual(1); - expect(array.next()).toEqual(2); - expect(array.next()).toEqual(3); - expect(array.next()).toEqual(4); - expect(array.next()).toEqual(1); - }); + it('should compare correctly by minor', function () { + expect(new _serverVersion.ServerVersion(3, 3, 0).compareTo(new _serverVersion.ServerVersion(3, 1, 0))).toBeGreaterThan(0); + expect(new _serverVersion.ServerVersion(1, 3, 5).compareTo(new _serverVersion.ServerVersion(1, 9, 5))).toBeLessThan(0); - it('should handle deleting first item ', function () { - var array = new _roundRobinArray2.default([1, 2, 3, 4, 5]); - array.remove(1); - expect(array.next()).toEqual(2); - expect(array.next()).toEqual(3); - expect(array.next()).toEqual(4); - expect(array.next()).toEqual(5); - expect(array.next()).toEqual(2); - expect(array.next()).toEqual(3); - expect(array.next()).toEqual(4); - expect(array.next()).toEqual(5); + expect(new _serverVersion.ServerVersion(3, 9, 5).compareTo(new _serverVersion.ServerVersion(3, 1, 2))).toBeGreaterThan(0); + expect(new _serverVersion.ServerVersion(1, 5, 42).compareTo(new _serverVersion.ServerVersion(1, 10, 11))).toBeLessThan(0); }); - it('should handle deleting multiple items ', function () { - var array = new _roundRobinArray2.default([1, 2, 3, 1, 1]); - array.remove(1); - expect(array.next()).toEqual(2); - expect(array.next()).toEqual(3); - expect(array.next()).toEqual(2); - expect(array.next()).toEqual(3); + it('should compare correctly by patch', function () { + expect(new _serverVersion.ServerVersion(3, 3, 6).compareTo(new _serverVersion.ServerVersion(3, 3, 5))).toBeGreaterThan(0); + expect(new _serverVersion.ServerVersion(1, 8, 2).compareTo(new _serverVersion.ServerVersion(1, 8, 8))).toBeLessThan(0); + expect(new _serverVersion.ServerVersion(9, 9, 9).compareTo(new _serverVersion.ServerVersion(9, 9, 0))).toBeGreaterThan(0); + expect(new _serverVersion.ServerVersion(3, 3, 3).compareTo(new _serverVersion.ServerVersion(3, 3, 42))).toBeLessThan(0); }); }); /** * Copyright (c) 2002-2017 "Neo Technology,"," @@ -46857,197 +52616,342 @@ describe('round-robin-array', function () { * limitations under the License. */ -},{"../../lib/v1/internal/round-robin-array":23}],354:[function(require,module,exports){ -"use strict"; +function verifyVersion(serverVersion, expectedMajor, expectedMinor, expectedPatch) { + expect(serverVersion.major).toEqual(expectedMajor); + expect(serverVersion.minor).toEqual(expectedMinor); + expect(serverVersion.patch).toEqual(expectedPatch); +} -var _routingTable = require("../../src/v1/internal/routing-table"); +function parse(string) { + return _serverVersion.ServerVersion.fromString(string); +} -var _routingTable2 = _interopRequireDefault(_routingTable); +},{"../../src/v1/internal/server-version":377}],404:[function(require,module,exports){ +'use strict'; -var _roundRobinArray = require("../../src/v1/internal/round-robin-array"); +Object.defineProperty(exports, "__esModule", { + value: true +}); -var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); +var _from = require('babel-runtime/core-js/array/from'); -var _integer = require("../../src/v1/integer"); +var _from2 = _interopRequireDefault(_from); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); -describe('routing-table', function () { +var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); - it('should not be stale when has routers, readers, writers and future expiration date', function () { - var table = createTable([1, 2], [3, 4], [5, 6], notExpired()); - expect(table.isStale()).toBeFalsy(); - }); +var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); - it('should be stale when expiration date in the past', function () { - var table = createTable([1, 2], [1, 2], [1, 2], expired()); - expect(table.isStale()).toBeTruthy(); - }); +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - it('should be stale when has single router', function () { - var table = createTable([1], [2, 3], [4, 5], notExpired()); - expect(table.isStale()).toBeTruthy(); - }); +var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); - it('should be stale when no readers', function () { - var table = createTable([1, 2], [], [3, 4], notExpired()); - expect(table.isStale()).toBeTruthy(); - }); +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - it('should be stale when no writers', function () { - var table = createTable([1, 2], [3, 4], [], notExpired()); - expect(table.isStale()).toBeTruthy(); - }); +var _inherits2 = require('babel-runtime/helpers/inherits'); - it('should not be stale with single reader', function () { - var table = createTable([1, 2], [3], [4, 5], notExpired()); - expect(table.isStale()).toBeFalsy(); - }); +var _inherits3 = _interopRequireDefault(_inherits2); - it('should not be stale with single writer', function () { - var table = createTable([1, 2], [3, 4], [5], notExpired()); - expect(table.isStale()).toBeFalsy(); - }); +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); - it('should forget reader, writer but not router', function () { - var table = createTable([1, 2], [1, 2], [1, 2], notExpired()); +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - table.forget(1); +var _createClass2 = require('babel-runtime/helpers/createClass'); - expect(table.routers.toArray()).toEqual([1, 2]); - expect(table.readers.toArray()).toEqual([2]); - expect(table.writers.toArray()).toEqual([2]); - }); +var _createClass3 = _interopRequireDefault(_createClass2); - it('should forget single reader', function () { - var table = createTable([1, 2], [42], [1, 2, 3], notExpired()); +var _v = require('../../src/v1'); - table.forget(42); +var _v2 = _interopRequireDefault(_v); - expect(table.routers.toArray()).toEqual([1, 2]); - expect(table.readers.toArray()).toEqual([]); - expect(table.writers.toArray()).toEqual([1, 2, 3]); - }); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - it('should forget single writer', function () { - var table = createTable([1, 2], [3, 4, 5], [42], notExpired()); +var UnsupportedPlatform = function () { + function UnsupportedPlatform() { + (0, _classCallCheck3.default)(this, UnsupportedPlatform); + } - table.forget(42); + (0, _createClass3.default)(UnsupportedPlatform, [{ + key: 'pathJoin', + value: function pathJoin() { + throw new Error('Module \'path\' is not available on this platform'); + } + }, { + key: 'spawn', + value: function spawn(command, args) { + throw new Error('Module \'child_process\' is not available on this platform'); + } + }, { + key: 'listDir', + value: function listDir(path) { + throw new Error('Module \'fs\' is not available on this platform'); + } + }, { + key: 'removeDir', + value: function removeDir(path) { + throw new Error('Module \'fs\' is not available on this platform'); + } + }, { + key: 'isDirectory', + value: function isDirectory(path) { + throw new Error('Module \'fs\' is not available on this platform'); + } + }]); + return UnsupportedPlatform; +}(); /** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ - expect(table.routers.toArray()).toEqual([1, 2]); - expect(table.readers.toArray()).toEqual([3, 4, 5]); - expect(table.writers.toArray()).toEqual([]); - }); +var SupportedPlatform = function (_UnsupportedPlatform) { + (0, _inherits3.default)(SupportedPlatform, _UnsupportedPlatform); - it('should forget router', function () { - var table = createTable([1, 2], [1, 3], [4, 1], notExpired()); + function SupportedPlatform() { + (0, _classCallCheck3.default)(this, SupportedPlatform); - table.forgetRouter(1); + var _this = (0, _possibleConstructorReturn3.default)(this, (SupportedPlatform.__proto__ || (0, _getPrototypeOf2.default)(SupportedPlatform)).call(this)); - expect(table.routers.toArray()).toEqual([2]); - expect(table.readers.toArray()).toEqual([1, 3]); - expect(table.writers.toArray()).toEqual([4, 1]); - }); + _this._path = require('path'); + _this._childProcess = require('child_process'); + _this._fs = require('fs-extra'); + return _this; + } - it('should forget writer', function () { - var table = createTable([1, 2, 3], [2, 1, 5], [5, 1], notExpired()); + (0, _createClass3.default)(SupportedPlatform, [{ + key: 'pathJoin', + value: function pathJoin() { + var _path; - table.forgetWriter(1); + return (_path = this._path).join.apply(_path, (0, _toConsumableArray3.default)((0, _from2.default)(arguments))); + } + }, { + key: 'spawn', + value: function spawn(command, args) { + return this._childProcess.spawnSync(command, args); + } + }, { + key: 'listDir', + value: function listDir(path) { + return this._fs.readdirSync(path); + } + }, { + key: 'removeDir', + value: function removeDir(path) { + if (this.isDirectory(path)) { + this._fs.removeSync(path); + } + } + }, { + key: 'isDirectory', + value: function isDirectory(path) { + try { + this._fs.accessSync(path); + var stat = this._fs.statSync(path); + return stat.isDirectory(); + } catch (e) { + return false; + } + } + }], [{ + key: 'create', + value: function create() { + try { + return new SupportedPlatform(); + } catch (e) { + return null; + } + } + }]); + return SupportedPlatform; +}(UnsupportedPlatform); - expect(table.routers.toArray()).toEqual([1, 2, 3]); - expect(table.readers.toArray()).toEqual([2, 1, 5]); - expect(table.writers.toArray()).toEqual([5]); - }); +var platform = SupportedPlatform.create() || new UnsupportedPlatform(); - it('should return all servers in diff when other table is empty', function () { - var oldTable = createTable([1, 2], [3, 4], [5, 6], notExpired()); - var newTable = createTable([], [], [], notExpired()); +var username = 'neo4j'; +var password = 'password'; +var authToken = _v2.default.auth.basic(username, password); - var servers = oldTable.serversDiff(newTable); +var neoCtrlVersionParam = '-e'; +var defaultNeo4jVersion = '3.1.3'; +var defaultNeoCtrlArgs = neoCtrlVersionParam + ' ' + defaultNeo4jVersion; - expect(servers).toEqual([1, 2, 3, 4, 5, 6]); - }); +function neo4jCertPath(dir) { + var neo4jDir = findExistingNeo4jDirStrict(dir); + return platform.pathJoin(neo4jDir, 'certificates', 'neo4j.cert'); +} - it('should no servers in diff when this table is empty', function () { - var oldTable = createTable([], [], [], notExpired()); - var newTable = createTable([1, 2], [3, 4], [5, 6], notExpired()); +function neo4jKeyPath(dir) { + var neo4jDir = findExistingNeo4jDirStrict(dir); + return platform.pathJoin(neo4jDir, 'certificates', 'neo4j.key'); +} - var servers = oldTable.serversDiff(newTable); +function start(dir, givenNeoCtrlArgs) { + var boltKitCheckResult = runCommand('neoctrl-install', ['-h']); - expect(servers).toEqual([]); - }); + if (boltKitCheckResult.successful) { + var neo4jDir = installNeo4j(dir, givenNeoCtrlArgs); + createDefaultUser(neo4jDir); + startNeo4j(neo4jDir); + } else { + console.log('Boltkit unavailable. Please install it by running \'pip install --upgrade boltkit.'); + console.log('Integration tests will be skipped.'); + console.log('Command \'neoctrl-install -h\' resulted in\n' + boltKitCheckResult.fullOutput); + } +} - it('should include different routers in servers diff', function () { - var oldTable = createTable([1, 7, 2, 42], [3, 4], [5, 6], notExpired()); - var newTable = createTable([1, 2], [3, 4], [5, 6], notExpired()); +function stop(dir) { + var neo4jDir = findExistingNeo4jDirStrict(dir); + stopNeo4j(neo4jDir); +} - var servers = oldTable.serversDiff(newTable); +function restart(dir) { + var neo4jDir = findExistingNeo4jDirStrict(dir); + stopNeo4j(neo4jDir); + startNeo4j(neo4jDir); +} - expect(servers).toEqual([7, 42]); +function installNeo4j(dir, givenNeoCtrlArgs) { + var neoCtrlArgs = givenNeoCtrlArgs || defaultNeoCtrlArgs; + var argsArray = neoCtrlArgs.split(' ').map(function (value) { + return value.trim(); }); + argsArray.push(dir); - it('should include different readers in servers diff', function () { - var oldTable = createTable([1, 2], [3, 7, 4, 42], [5, 6], notExpired()); - var newTable = createTable([1, 2], [3, 4], [5, 6], notExpired()); + var neo4jVersion = extractNeo4jVersion(argsArray); + var existingNeo4jDir = findExistingNeo4jDir(dir, neo4jVersion); + if (existingNeo4jDir) { + console.log('Found existing Neo4j ' + neo4jVersion + ' installation at: \'' + existingNeo4jDir + '\''); + return existingNeo4jDir; + } else { + platform.removeDir(dir); - var servers = oldTable.serversDiff(newTable); + console.log('Installing Neo4j with neoctrl arguments: \'' + neoCtrlArgs + '\''); + var result = runCommand('neoctrl-install', argsArray); + if (!result.successful) { + throw new Error('Unable to install Neo4j.\n' + result.fullOutput); + } - expect(servers).toEqual([7, 42]); - }); + var installedNeo4jDir = result.stdout; + console.log('Installed Neo4j to: \'' + installedNeo4jDir + '\''); + return installedNeo4jDir; + } +} - it('should include different writers in servers diff', function () { - var oldTable = createTable([1, 2], [3, 4], [5, 7, 6, 42], notExpired()); - var newTable = createTable([1, 2], [3, 4], [5, 6], notExpired()); +function createDefaultUser(neo4jDir) { + console.log('Creating user \'' + username + '\' for Neo4j at: \'' + neo4jDir + '\''); + var result = runCommand('neoctrl-create-user', [neo4jDir, username, password]); + if (!result.successful) { + throw new Error('Unable to create user: \'' + username + '\' for Neo4j at: ' + neo4jDir + '\'\n' + result.fullOutput); + } + console.log('Created user \'' + username + '\' for Neo4j at: \'' + neo4jDir + '\''); +} - var servers = oldTable.serversDiff(newTable); +function startNeo4j(neo4jDir) { + console.log('Starting Neo4j at: \'' + neo4jDir + '\''); + var result = runCommand('neoctrl-start', [neo4jDir]); + if (!result.successful) { + throw new Error('Unable to start Neo4j.\n' + result.fullOutput); + } + console.log('Started Neo4j at: \'' + neo4jDir + '\''); +} - expect(servers).toEqual([7, 42]); - }); +function stopNeo4j(neo4jDir) { + console.log('Stopping Neo4j at: \'' + neo4jDir + '\''); + var result = runCommand('neoctrl-stop', [neo4jDir]); + if (!result.successful) { + throw new Error('Unable to stop Neo4j at: \'' + neo4jDir + '\'\n' + result.fullOutput); + } +} - it('should include different servers in diff', function () { - var oldTable = createTable([1, 2, 11], [22, 3, 33, 4], [5, 44, 6], notExpired()); - var newTable = createTable([1], [2, 3, 4, 6], [5], notExpired()); +function findExistingNeo4jDirStrict(dir) { + var neo4jDir = findExistingNeo4jDir(dir, null); + if (!neo4jDir) { + throw new Error('Unable to find Neo4j dir in: \'' + dir + '\''); + } + return neo4jDir; +} - var servers = oldTable.serversDiff(newTable); +function findExistingNeo4jDir(dir, neo4jVersion) { + if (!platform.isDirectory(dir)) { + return null; + } - expect(servers).toEqual([11, 22, 33, 44]); + var dirs = platform.listDir(dir).filter(function (entry) { + return isNeo4jDir(entry, neo4jVersion); + }).map(function (entry) { + return platform.pathJoin(dir, entry); + }).filter(function (entry) { + return platform.isDirectory(entry); }); - function expired() { - return Date.now() - 3600; // expired an hour ago + return dirs.length === 1 ? dirs[0] : null; +} + +function isNeo4jDir(name, version) { + if (!name.startsWith('neo4j')) { + return false; + } + if (version && name.indexOf(version) === -1) { + return false; } + return true; +} - function notExpired() { - return Date.now() + 3600; // will expire in an hour +function extractNeo4jVersion(neoCtrlArgs) { + var index = neoCtrlArgs.indexOf(neoCtrlVersionParam); + if (index === -1) { + throw new Error('No \'' + neoCtrlVersionParam + '\' parameter'); } - function createTable(routers, readers, writers, expirationTime) { - var routersArray = new _roundRobinArray2.default(routers); - var readersArray = new _roundRobinArray2.default(readers); - var writersArray = new _roundRobinArray2.default(writers); - var expiration = (0, _integer.int)(expirationTime); - return new _routingTable2.default(routersArray, readersArray, writersArray, expiration); + var version = neoCtrlArgs[index + 1]; + if (!version) { + throw new Error('Version is undefined in: ' + neoCtrlArgs); } -}); /** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -},{"../../src/v1/integer":314,"../../src/v1/internal/round-robin-array":329,"../../src/v1/internal/routing-table":330}],355:[function(require,module,exports){ + return version.trim(); +} + +function runCommand(command, args) { + var spawnResult = platform.spawn(command, args); + return new RunCommandResult(spawnResult); +} + +var RunCommandResult = function RunCommandResult(spawnResult) { + (0, _classCallCheck3.default)(this, RunCommandResult); + + this.successful = spawnResult.status === 0; + this.stdout = (spawnResult.stdout || '').toString().trim(); + this.stderr = (spawnResult.stderr || '').toString().trim(); + this.fullOutput = 'STDOUT:\n\t' + this.stdout + '\n' + 'STDERR:\n\t' + this.stderr + '\n' + 'EXIT CODE:\n\t' + spawnResult.status + '\n' + 'ERROR:\n\t' + spawnResult.error + '\n'; +}; + +exports.default = { + start: start, + stop: stop, + restart: restart, + neo4jCertPath: neo4jCertPath, + neo4jKeyPath: neo4jKeyPath, + username: username, + password: password, + authToken: authToken +}; + +},{"../../src/v1":358,"babel-runtime/core-js/array/from":53,"babel-runtime/core-js/object/get-prototype-of":59,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67,"babel-runtime/helpers/inherits":70,"babel-runtime/helpers/possibleConstructorReturn":71,"babel-runtime/helpers/toConsumableArray":72,"child_process":102,"fs-extra":267,"path":313}],405:[function(require,module,exports){ 'use strict'; var _streamObserver = require('../../src/v1/internal/stream-observer'); @@ -47217,7 +53121,7 @@ function newObserver() { }; } -},{"../../src/v1/internal/stream-observer":331,"./fake-connection":347}],356:[function(require,module,exports){ +},{"../../src/v1/internal/stream-observer":378,"./fake-connection":395}],406:[function(require,module,exports){ (function (global){ "use strict"; @@ -47343,7 +53247,7 @@ var FakeDate = function () { }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],357:[function(require,module,exports){ +},{"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],407:[function(require,module,exports){ "use strict"; var _keys = require("babel-runtime/core-js/object/keys"); @@ -47375,6 +53279,7 @@ var neo4j = require("../../lib/v1"); var fs = require("fs"); var path = require('path'); var hasFeature = require("../../lib/v1/internal/features").default; +var sharedNeo4j = require("../internal/shared-neo4j").default; describe('trust-signed-certificates', function () { @@ -47391,7 +53296,7 @@ describe('trust-signed-certificates', function () { } // Given - driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j"), { + driver = neo4j.driver("bolt://localhost", sharedNeo4j.authToken, { encrypted: "ENCRYPTION_ON", trust: "TRUST_SIGNED_CERTIFICATES", trustedCertificates: ["test/resources/random.certificate"] @@ -47412,10 +53317,10 @@ describe('trust-signed-certificates', function () { } // Given - driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j"), { + driver = neo4j.driver("bolt://localhost", sharedNeo4j.authToken, { encrypted: "ENCRYPTION_ON", trust: "TRUST_SIGNED_CERTIFICATES", - trustedCertificates: ["build/neo4j/certificates/neo4j.cert"] + trustedCertificates: [neo4jCertPath()] }); // When @@ -47430,10 +53335,10 @@ describe('trust-signed-certificates', function () { } // Given - driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j"), { + driver = neo4j.driver("bolt://localhost", sharedNeo4j.authToken, { encrypted: true, trust: "TRUST_SIGNED_CERTIFICATES", - trustedCertificates: ["build/neo4j/certificates/neo4j.cert", "build/neo4j/certificates/neo4j.cert"] + trustedCertificates: [neo4jCertPath(), neo4jCertPath()] }); // When @@ -47459,7 +53364,7 @@ describe('trust-all-certificates', function () { } // Given - driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j"), { + driver = neo4j.driver("bolt://localhost", sharedNeo4j.authToken, { encrypted: "ENCRYPTION_ON", trust: "TRUST_ALL_CERTIFICATES" }); @@ -47489,7 +53394,7 @@ describe('trust-custom-ca-signed-certificates', function () { } // Given - driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j"), { + driver = neo4j.driver("bolt://localhost", sharedNeo4j.authToken, { encrypted: true, trust: "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES", trustedCertificates: ["test/resources/random.certificate"] @@ -47510,10 +53415,10 @@ describe('trust-custom-ca-signed-certificates', function () { } // Given - driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j"), { + driver = neo4j.driver("bolt://localhost", sharedNeo4j.authToken, { encrypted: true, trust: "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES", - trustedCertificates: ["build/neo4j/certificates/neo4j.cert"] + trustedCertificates: [neo4jCertPath()] }); // When @@ -47539,7 +53444,7 @@ describe('trust-system-ca-signed-certificates', function () { } // Given - driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j"), { + driver = neo4j.driver("bolt://localhost", sharedNeo4j.authToken, { encrypted: true, trust: "TRUST_SYSTEM_CA_SIGNED_CERTIFICATES" }); @@ -47583,7 +53488,7 @@ describe('trust-on-first-use', function () { fs.rmdirSync(knownHostsDir); } catch (_) {} - driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j"), { + driver = neo4j.driver("bolt://localhost", sharedNeo4j.authToken, { encrypted: true, trust: "TRUST_ON_FIRST_USE", knownHosts: knownHostsPath @@ -47620,7 +53525,7 @@ describe('trust-on-first-use', function () { fs.unlinkSync(knownHostsPath); } - driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j"), { + driver = neo4j.driver("bolt://localhost", sharedNeo4j.authToken, { encrypted: true, trust: "TRUST_ON_FIRST_USE", knownHosts: knownHostsPath @@ -47659,7 +53564,7 @@ describe('trust-on-first-use', function () { fs.unlinkSync(knownHostsPath); } - driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j"), { + driver = neo4j.driver("bolt://localhost", sharedNeo4j.authToken, { encrypted: "ENCRYPTION_ON", trust: "TRUST_ON_FIRST_USE", knownHosts: knownHostsPath @@ -47688,7 +53593,7 @@ describe('trust-on-first-use', function () { } fs.writeFileSync(knownHostsPath, ''); - driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j"), { + driver = neo4j.driver("bolt://localhost", sharedNeo4j.authToken, { encrypted: true, trust: "TRUST_ON_FIRST_USE", knownHosts: knownHostsPath @@ -47731,7 +53636,7 @@ describe('trust-on-first-use', function () { // Given var knownHostsPath = "test/resources/random_known_hosts"; - driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j"), { + driver = neo4j.driver("bolt://localhost", sharedNeo4j.authToken, { encrypted: "ENCRYPTION_ON", trust: "TRUST_ON_FIRST_USE", knownHosts: knownHostsPath @@ -47762,7 +53667,11 @@ function unMuteConsoleLog(originalLog) { console.log = originalLog; } -},{"../../lib/v1":7,"../../lib/v1/internal/ch-node.js":11,"../../lib/v1/internal/features":17,"babel-runtime/core-js/object/keys":57,"fs":98,"path":271}],358:[function(require,module,exports){ +function neo4jCertPath() { + return sharedNeo4j.neo4jCertPath(path.join('build', 'neo4j')); +} + +},{"../../lib/v1":7,"../../lib/v1/internal/ch-node.js":12,"../../lib/v1/internal/features":18,"../internal/shared-neo4j":404,"babel-runtime/core-js/object/keys":60,"fs":102,"path":313}],408:[function(require,module,exports){ 'use strict'; var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); @@ -48140,7 +54049,7 @@ var FakeTransaction = function () { return FakeTransaction; }(); -},{"../../src/v1/error":311,"../../src/v1/internal/transaction-executor":332,"./timers-util":356,"babel-runtime/core-js/promise":59,"babel-runtime/helpers/classCallCheck":63,"babel-runtime/helpers/createClass":64}],359:[function(require,module,exports){ +},{"../../src/v1/error":356,"../../src/v1/internal/transaction-executor":379,"./timers-util":406,"babel-runtime/core-js/promise":62,"babel-runtime/helpers/classCallCheck":66,"babel-runtime/helpers/createClass":67}],409:[function(require,module,exports){ 'use strict'; /** @@ -48304,29 +54213,14 @@ function packAndUnpack(str) { return utf8.decode(buffer, buffer.length); } -},{"../../lib/v1/internal/buf":9,"../../lib/v1/internal/utf8":27}],360:[function(require,module,exports){ +},{"../../lib/v1/internal/buf":9,"../../lib/v1/internal/utf8":29}],410:[function(require,module,exports){ 'use strict'; -/** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +var _util = require('../../src/v1/internal/util'); -var util = require('../../lib/v1/internal/util.js'); +var util = _interopRequireWildcard(_util); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } describe('util', function () { @@ -48364,6 +54258,160 @@ describe('util', function () { verifyInvalidString(console.log); }); + it('should parse scheme', function () { + verifyScheme('bolt://', 'bolt://localhost'); + verifyScheme('bolt://', 'bolt://localhost:7687'); + verifyScheme('bolt://', 'bolt://neo4j.com'); + verifyScheme('bolt://', 'bolt://neo4j.com:80'); + + verifyScheme('bolt+routing://', 'bolt+routing://127.0.0.1'); + verifyScheme('bolt+routing://', 'bolt+routing://127.0.0.1:7687'); + verifyScheme('bolt+routing://', 'bolt+routing://neo4j.com'); + verifyScheme('bolt+routing://', 'bolt+routing://neo4j.com:80'); + + verifyScheme('wss://', 'wss://server.com'); + verifyScheme('wss://', 'wss://server.com:7687'); + verifyScheme('wss://', 'wss://1.1.1.1'); + verifyScheme('wss://', 'wss://8.8.8.8:80'); + + verifyScheme('', 'invalid url'); + verifyScheme('', 'localhost:7676'); + verifyScheme('', '127.0.0.1'); + }); + + it('should fail to parse scheme from non-string argument', function () { + expect(function () { + return util.parseScheme({}); + }).toThrowError(TypeError); + expect(function () { + return util.parseScheme(['bolt://localhost:2020']); + }).toThrowError(TypeError); + expect(function () { + return util.parseScheme(function () { + return 'bolt://localhost:8888'; + }); + }).toThrowError(TypeError); + }); + + it('should parse url', function () { + verifyUrl('localhost', 'bolt://localhost'); + verifyUrl('localhost:9090', 'bolt://localhost:9090'); + verifyUrl('127.0.0.1', 'bolt://127.0.0.1'); + verifyUrl('127.0.0.1:7687', 'bolt://127.0.0.1:7687'); + verifyUrl('10.198.20.1', 'bolt+routing://10.198.20.1'); + verifyUrl('15.8.8.9:20004', 'wss://15.8.8.9:20004'); + }); + + it('should fail to parse url from non-string argument', function () { + expect(function () { + return util.parseUrl({}); + }).toThrowError(TypeError); + expect(function () { + return util.parseUrl(['bolt://localhost:2020']); + }).toThrowError(TypeError); + expect(function () { + return util.parseUrl(function () { + return 'bolt://localhost:8888'; + }); + }).toThrowError(TypeError); + }); + + it('should parse host', function () { + verifyHost('localhost', 'bolt://localhost'); + verifyHost('neo4j.com', 'bolt+routing://neo4j.com'); + verifyHost('neo4j.com', 'bolt+routing://neo4j.com:8080'); + verifyHost('127.0.0.1', 'https://127.0.0.1'); + verifyHost('127.0.0.1', 'ws://127.0.0.1:2020'); + }); + + it('should fail to parse host from non-string argument', function () { + expect(function () { + return util.parseHost({}); + }).toThrowError(TypeError); + expect(function () { + return util.parseHost(['bolt://localhost:2020']); + }).toThrowError(TypeError); + expect(function () { + return util.parseHost(function () { + return 'bolt://localhost:8888'; + }); + }).toThrowError(TypeError); + }); + + it('should parse port', function () { + verifyPort('7474', 'http://localhost:7474'); + verifyPort('8080', 'http://127.0.0.1:8080'); + verifyPort('20005', 'bolt+routing://neo4j.com:20005'); + verifyPort('4242', 'bolt+routing://1.1.1.1:4242'); + verifyPort('42', 'http://10.192.168.5:42'); + + verifyPort(undefined, 'https://localhost'); + verifyPort(undefined, 'ws://8.8.8.8'); + }); + + it('should fail to parse port from non-string argument', function () { + expect(function () { + return util.parsePort({ port: 1515 }); + }).toThrowError(TypeError); + expect(function () { + return util.parsePort(['bolt://localhost:2020']); + }).toThrowError(TypeError); + expect(function () { + return util.parsePort(function () { + return 'bolt://localhost:8888'; + }); + }).toThrowError(TypeError); + }); + + it('should parse routing context', function () { + verifyRoutingContext({ + name: 'molly', + age: '1', + color: 'white' + }, 'bolt+routing://localhost:7687/cat?name=molly&age=1&color=white'); + + verifyRoutingContext({ + key1: 'value1', + key2: 'value2' + }, 'bolt+routing://localhost:7687/?key1=value1&key2=value2'); + + verifyRoutingContext({ key: 'value' }, 'bolt+routing://10.198.12.2:9999?key=value'); + + verifyRoutingContext({}, 'bolt+routing://localhost:7687?'); + verifyRoutingContext({}, 'bolt+routing://localhost:7687/?'); + verifyRoutingContext({}, 'bolt+routing://localhost:7687/cat?'); + verifyRoutingContext({}, 'bolt+routing://localhost:7687/lala'); + }); + + it('should fail to parse routing context from non-string argument', function () { + expect(function () { + return util.parseRoutingContext({ key1: 'value1' }); + }).toThrowError(TypeError); + expect(function () { + return util.parseRoutingContext(['bolt://localhost:2020/?key=value']); + }).toThrowError(TypeError); + expect(function () { + return util.parseRoutingContext(function () { + return 'bolt://localhost?key1=value&key2=value2'; + }); + }).toThrowError(TypeError); + }); + + it('should fail to parse routing context from illegal parameters', function () { + expect(function () { + return util.parseRoutingContext('bolt+routing://localhost:7687/?justKey'); + }).toThrow(); + expect(function () { + return util.parseRoutingContext('bolt+routing://localhost:7687/?=value1&key2=value2'); + }).toThrow(); + expect(function () { + return util.parseRoutingContext('bolt+routing://localhost:7687/key1?=value1&key2='); + }).toThrow(); + expect(function () { + return util.parseRoutingContext('bolt+routing://localhost:7687/?key1=value1&key2=value2&key1=value2'); + }).toThrow(); + }); + function verifyValidString(str) { expect(util.assertString(str, 'Test string')).toBe(str); } @@ -48373,11 +54421,136 @@ describe('util', function () { return util.assertString(str, 'Test string'); }).toThrowError(TypeError); } -}); -},{"../../lib/v1/internal/util.js":28}],361:[function(require,module,exports){ + function verifyScheme(expectedScheme, url) { + expect(util.parseScheme(url)).toEqual(expectedScheme); + } + + function verifyUrl(expectedUrl, url) { + expect(util.parseUrl(url)).toEqual(expectedUrl); + } + + function verifyHost(expectedHost, url) { + expect(util.parseHost(url)).toEqual(expectedHost); + } + + function verifyPort(expectedPort, url) { + expect(util.parsePort(url)).toEqual(expectedPort); + } + + function verifyRoutingContext(expectedRoutingContext, url) { + expect(util.parseRoutingContext(url)).toEqual(expectedRoutingContext); + } +}); /** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +},{"../../src/v1/internal/util":381}],411:[function(require,module,exports){ +'use strict'; + +var _v = require('../../src/v1'); + +var _v2 = _interopRequireDefault(_v); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +describe('auth', function () { + + it('should use correct username and password in basic auth', function () { + var token = _v2.default.auth.basic('cat', 'dog'); + expect(token).toEqual({ + scheme: 'basic', + principal: 'cat', + credentials: 'dog' + }); + }); + + it('should support realm in basic auth', function () { + var token = _v2.default.auth.basic('cat', 'dog', 'apartment'); + expect(token).toEqual({ + scheme: 'basic', + principal: 'cat', + credentials: 'dog', + realm: 'apartment' + }); + }); + + it('should use correct ticket in kerberos', function () { + var token = _v2.default.auth.kerberos('my-ticket'); + expect(token).toEqual({ + scheme: 'kerberos', + principal: '', + credentials: 'my-ticket' + }); + }); + + it('should construct correct custom auth', function () { + var token = _v2.default.auth.custom('cat', 'dog', 'apartment', 'pets'); + expect(token).toEqual({ + scheme: 'pets', + principal: 'cat', + credentials: 'dog', + realm: 'apartment' + }); + }); + + it('should support parameters in custom auth', function () { + var token = _v2.default.auth.custom('cat', 'dog', 'apartment', 'pets', { key1: 'value1', key2: 42 }); + expect(token).toEqual({ + scheme: 'pets', + principal: 'cat', + credentials: 'dog', + realm: 'apartment', + parameters: { key1: 'value1', key2: 42 } + }); + }); +}); /** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +},{"../../src/v1":358}],412:[function(require,module,exports){ 'use strict'; +var _v = require('../../src/v1'); + +var _v2 = _interopRequireDefault(_v); + +var _sharedNeo4j = require('../internal/shared-neo4j'); + +var _sharedNeo4j2 = _interopRequireDefault(_sharedNeo4j); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + /** * Copyright (c) 2002-2017 "Neo Technology,"," * Network Engine for Objects in Lund AB [http://neotechnology.com] @@ -48397,21 +54570,23 @@ describe('util', function () { * limitations under the License. */ -var neo4j = require("../../lib/v1"); - describe('driver', function () { - var driver; + + var driver = void 0; + beforeEach(function () { driver = null; }); + afterEach(function () { if (driver) { driver.close(); } }); + it('should expose sessions', function () { // Given - driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j")); + driver = _v2.default.driver("bolt://localhost", _sharedNeo4j2.default.authToken); // When var session = driver.session(); @@ -48421,14 +54596,15 @@ describe('driver', function () { driver.close(); }); - xit('should handle connection errors', function (done) { + it('should handle connection errors', function (done) { // Given - driver = neo4j.driver("bolt://localhoste", neo4j.auth.basic("neo4j", "neo4j")); + driver = _v2.default.driver("bolt://localhoste", _sharedNeo4j2.default.authToken); // Expect - driver.onError = function (err) { + driver.onError = function (error) { //the error message is different whether in browser or node - expect(err.message).not.toBeNull(); + expect(error.message).not.toBeNull(); + expect(error.code).toEqual(_v2.default.error.SERVICE_UNAVAILABLE); done(); }; @@ -48438,28 +54614,28 @@ describe('driver', function () { it('should handle wrong scheme', function () { expect(function () { - return neo4j.driver("tank://localhost", neo4j.auth.basic("neo4j", "neo4j")); + return _v2.default.driver("tank://localhost", _sharedNeo4j2.default.authToken); }).toThrow(new Error("Unknown scheme: tank://")); }); it('should handle URL parameter string', function () { expect(function () { - return neo4j.driver({ uri: 'bolt://localhost' }); + return _v2.default.driver({ uri: 'bolt://localhost' }); }).toThrowError(TypeError); expect(function () { - return neo4j.driver(['bolt:localhost']); + return _v2.default.driver(['bolt:localhost']); }).toThrowError(TypeError); expect(function () { - var driver = neo4j.driver(String('bolt://localhost', neo4j.auth.basic("neo4j", "neo4j"))); + var driver = _v2.default.driver(String('bolt://localhost'), _sharedNeo4j2.default.authToken); return driver.session(); }).toBeDefined(); }); it('should fail early on wrong credentials', function (done) { // Given - driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "who would use such a password")); + driver = _v2.default.driver("bolt://localhost", _v2.default.auth.basic("neo4j", "who would use such a password")); // Expect driver.onError = function (err) { @@ -48474,7 +54650,7 @@ describe('driver', function () { it('should indicate success early on correct credentials', function (done) { // Given - driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j")); + driver = _v2.default.driver("bolt://localhost", _sharedNeo4j2.default.authToken); // Expect driver.onCompleted = function (meta) { @@ -48487,7 +54663,7 @@ describe('driver', function () { it('should be possible to pass a realm with basic auth tokens', function (done) { // Given - driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j", "native")); + driver = _v2.default.driver("bolt://localhost", _v2.default.auth.basic(_sharedNeo4j2.default.username, _sharedNeo4j2.default.password, "native")); // Expect driver.onCompleted = function (meta) { @@ -48500,7 +54676,7 @@ describe('driver', function () { it('should be possible to create custom auth tokens', function (done) { // Given - driver = neo4j.driver("bolt://localhost", neo4j.auth.custom("neo4j", "neo4j", "native", "basic")); + driver = _v2.default.driver("bolt://localhost", _v2.default.auth.custom(_sharedNeo4j2.default.username, _sharedNeo4j2.default.password, "native", "basic")); // Expect driver.onCompleted = function (meta) { @@ -48513,7 +54689,7 @@ describe('driver', function () { it('should be possible to create custom auth tokens with additional parameters', function (done) { // Given - driver = neo4j.driver("bolt://localhost", neo4j.auth.custom("neo4j", "neo4j", "native", "basic", { secret: 42 })); + driver = _v2.default.driver("bolt://localhost", _v2.default.auth.custom(_sharedNeo4j2.default.username, _sharedNeo4j2.default.password, "native", "basic", { secret: 42 })); // Expect driver.onCompleted = function () { @@ -48526,12 +54702,12 @@ describe('driver', function () { it('should fail nicely when connecting with routing to standalone server', function (done) { // Given - driver = neo4j.driver("bolt+routing://localhost", neo4j.auth.basic("neo4j", "neo4j")); + driver = _v2.default.driver("bolt+routing://localhost", _sharedNeo4j2.default.authToken); // Expect driver.onError = function (error) { expect(error.message).toEqual('Server localhost could not perform routing. Make sure you are connecting to a causal cluster'); - expect(error.code).toEqual(neo4j.error.SERVICE_UNAVAILABLE); + expect(error.code).toEqual(_v2.default.error.SERVICE_UNAVAILABLE); done(); }; @@ -48540,18 +54716,18 @@ describe('driver', function () { }); it('should have correct user agent', function () { - var directDriver = neo4j.driver("bolt://localhost"); + var directDriver = _v2.default.driver("bolt://localhost"); expect(directDriver._userAgent).toBe("neo4j-javascript/0.0.0-dev"); directDriver.close(); - var routingDriver = neo4j.driver("bolt+routing://localhost"); + var routingDriver = _v2.default.driver("bolt+routing://localhost"); expect(routingDriver._userAgent).toBe("neo4j-javascript/0.0.0-dev"); routingDriver.close(); }); it('should fail when TRUST_ON_FIRST_USE is used with routing', function () { var createRoutingDriverWithTOFU = function createRoutingDriverWithTOFU() { - driver = neo4j.driver('bolt+routing://localhost', neo4j.auth.basic('neo4j', 'neo4j'), { + driver = _v2.default.driver('bolt+routing://localhost', _sharedNeo4j2.default.username, { encrypted: "ENCRYPTION_ON", trust: 'TRUST_ON_FIRST_USE' }); @@ -48560,11 +54736,17 @@ describe('driver', function () { expect(createRoutingDriverWithTOFU).toThrow(); }); + it('should fail when bolt:// scheme used with routing params', function () { + expect(function () { + return _v2.default.driver('bolt://localhost:7687/?policy=my_policy'); + }).toThrow(); + }); + var exposedTypes = ['Node', 'Path', 'PathSegment', 'Record', 'Relationship', 'Result', 'ResultSummary', 'UnboundRelationship']; exposedTypes.forEach(function (type) { it('should expose type ' + type, function () { - expect(undefined === neo4j.types[type]).toBe(false); + expect(undefined === _v2.default.types[type]).toBe(false); }); }); @@ -48578,7 +54760,7 @@ describe('driver', function () { } }); -},{"../../lib/v1":7}],362:[function(require,module,exports){ +},{"../../src/v1":358,"../internal/shared-neo4j":404}],413:[function(require,module,exports){ 'use strict'; /** @@ -48625,7 +54807,7 @@ describe('Pool', function () { }); }); -},{"../../lib/v1":7}],363:[function(require,module,exports){ +},{"../../lib/v1":7}],414:[function(require,module,exports){ 'use strict'; /** @@ -48650,6 +54832,7 @@ describe('Pool', function () { var path = require('path'); var os = require('os'); var NodeChannel = require('../../lib/v1/internal/ch-node').default; +var sharedNeo4j = require('../../test/internal/shared-neo4j').default; describe('Package', function () { var driverGlobal = { close: function close() {} }; @@ -48671,7 +54854,7 @@ describe('Package', function () { done.fail('Could not load sandbox package'); } - driverGlobal = neo4jReq.v1.driver("bolt://localhost", neo4jReq.v1.auth.basic("neo4j", "neo4j")); + driverGlobal = neo4jReq.v1.driver("bolt://localhost", neo4jReq.v1.auth.basic(sharedNeo4j.username, sharedNeo4j.password)); var session = driverGlobal.session(); session.run('RETURN 1 AS answer').then(function (result) { expect(result.records.length).toBe(1); @@ -48685,7 +54868,7 @@ describe('Package', function () { }); }); -},{"../../lib/v1/internal/ch-node":11,"os":265,"path":271}],364:[function(require,module,exports){ +},{"../../lib/v1/internal/ch-node":12,"../../test/internal/shared-neo4j":404,"os":307,"path":313}],415:[function(require,module,exports){ "use strict"; /** @@ -48793,8 +54976,18 @@ describe('Record', function () { }); }); -},{"../../lib/v1/error":5,"../../lib/v1/record":29}],365:[function(require,module,exports){ -"use strict"; +},{"../../lib/v1/error":5,"../../lib/v1/record":31}],416:[function(require,module,exports){ +'use strict'; + +var _v = require('../../src/v1'); + +var _v2 = _interopRequireDefault(_v); + +var _sharedNeo4j = require('../internal/shared-neo4j'); + +var _sharedNeo4j2 = _interopRequireDefault(_sharedNeo4j); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Copyright (c) 2002-2017 "Neo Technology,"," @@ -48815,14 +55008,13 @@ describe('Record', function () { * limitations under the License. */ -var neo4j = require("../../lib/v1"); - describe('result stream', function () { - var driver, session; + var driver = void 0, + session = void 0; beforeEach(function (done) { - driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j")); + driver = _v2.default.driver('bolt://localhost', _sharedNeo4j2.default.authToken); session = driver.session(); session.run("MATCH (n) DETACH DELETE n").then(done); @@ -48835,7 +55027,7 @@ describe('result stream', function () { it('should allow chaining `then`, returning a new thing in each', function (done) { // When & Then session.run("RETURN 1").then(function () { - return "first"; + return 'first'; }).then(function (arg) { expect(arg).toBe("first"); return "second"; @@ -48855,7 +55047,7 @@ describe('result stream', function () { }); }); -},{"../../lib/v1":7}],366:[function(require,module,exports){ +},{"../../src/v1":358,"../internal/shared-neo4j":404}],417:[function(require,module,exports){ 'use strict'; var _promise = require('babel-runtime/core-js/promise'); @@ -48880,26 +55072,11 @@ var _fakeConnection = require('../internal/fake-connection'); var _fakeConnection2 = _interopRequireDefault(_fakeConnection); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var _sharedNeo4j = require('../internal/shared-neo4j'); -/** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +var _sharedNeo4j2 = _interopRequireDefault(_sharedNeo4j); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } describe('session', function () { @@ -48909,7 +55086,7 @@ describe('session', function () { var originalTimeout = void 0; beforeEach(function (done) { - driver = _v2.default.driver('bolt://localhost', _v2.default.auth.basic('neo4j', 'neo4j')); + driver = _v2.default.driver('bolt://localhost', _sharedNeo4j2.default.authToken); driver.onCompleted = function (meta) { serverMetadata = meta['server']; }; @@ -48981,7 +55158,7 @@ describe('session', function () { }); it('should be possible to close driver after closing session with failed tx ', function (done) { - var driver = _v2.default.driver('bolt://localhost', _v2.default.auth.basic('neo4j', 'neo4j')); + var driver = _v2.default.driver('bolt://localhost', _sharedNeo4j2.default.authToken); var session = driver.session(); var tx = session.beginTransaction(); tx.run('INVALID QUERY').catch(function () { @@ -49169,7 +55346,7 @@ describe('session', function () { expect(sum.hasPlan()).toBe(true); //When there's a profile, there's a plan expect(sum.hasProfile()).toBe(true); expect(sum.profile.operatorType).toBe('ProduceResults'); - expect(sum.profile.arguments.runtime).toBe('INTERPRETED'); + expect(['INTERPRETED', 'COMPILED']).toContain(sum.profile.arguments.runtime); expect(sum.profile.identifiers[0]).toBe('n'); expect(sum.profile.children[0].operatorType).toBe('Filter'); expect(sum.profile.rows).toBe(0); @@ -49805,6 +55982,27 @@ describe('session', function () { }); }); + it('should be able to do nested queries', function (done) { + session.run('CREATE (knight:Person:Knight {name: {name1}, castle: {castle}})' + 'CREATE (king:Person {name: {name2}, title: {title}})', { name1: 'Lancelot', castle: 'Camelot', name2: 'Arthur', title: 'King' }).then(function () { + session.run('MATCH (knight:Person:Knight) WHERE knight.castle = {castle} RETURN id(knight) AS knight_id', { castle: 'Camelot' }).subscribe({ + onNext: function onNext(record) { + session.run('MATCH (knight) WHERE id(knight) = {id} MATCH (king:Person) WHERE king.name = {king} CREATE (knight)-[:DEFENDS]->(king)', { id: record.get('knight_id'), king: 'Arthur' }); + }, + onCompleted: function onCompleted() { + session.run('MATCH (:Knight)-[:DEFENDS]->() RETURN count(*)').then(function (result) { + session.close(); + var count = result.records[0].get(0).toInt(); + expect(count).toEqual(1); + done(); + }); + }, + onError: function onError(error) { + console.log(error); + } + }); + }); + }); + function serverIs31OrLater(done) { // lazy way of checking the version number // if server has been set we know it is at least 3.1 @@ -49870,17 +56068,56 @@ describe('session', function () { }); }); } -}); +}); /** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ -},{"../../src/v1":313,"../../src/v1/driver":310,"../../src/v1/internal/connection-providers":321,"../../src/v1/result-summary":336,"../../src/v1/session":339,"../internal/fake-connection":347,"babel-runtime/core-js/promise":59}],367:[function(require,module,exports){ +},{"../../src/v1":358,"../../src/v1/driver":355,"../../src/v1/internal/connection-providers":367,"../../src/v1/result-summary":383,"../../src/v1/session":386,"../internal/fake-connection":395,"../internal/shared-neo4j":404,"babel-runtime/core-js/promise":62}],418:[function(require,module,exports){ 'use strict'; -var _v = require('../../lib/v1'); +var _v = require('../../src/v1'); var _v2 = _interopRequireDefault(_v); +var _sharedNeo4j = require('../internal/shared-neo4j'); + +var _sharedNeo4j2 = _interopRequireDefault(_sharedNeo4j); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ describe('transaction', function () { var driver = void 0; @@ -49893,7 +56130,7 @@ describe('transaction', function () { originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; jasmine.DEFAULT_TIMEOUT_INTERVAL = 60000; - driver = _v2.default.driver("bolt://localhost", _v2.default.auth.basic("neo4j", "neo4j")); + driver = _v2.default.driver("bolt://localhost", _sharedNeo4j2.default.authToken); driver.onCompleted = function (meta) { server = meta['server']; }; @@ -50374,27 +56611,10 @@ describe('transaction', function () { } return false; } -}); /** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +}); -},{"../../lib/v1":7}],368:[function(require,module,exports){ -'use strict'; +},{"../../src/v1":358,"../internal/shared-neo4j":404}],419:[function(require,module,exports){ +"use strict"; /** * Copyright (c) 2002-2017 "Neo Technology,"," @@ -50416,6 +56636,7 @@ describe('transaction', function () { */ var neo4j = require("../../lib/v1"); +var sharedNeo4j = require("../internal/shared-neo4j").default; describe('floating point values', function () { it('should support float 1.0 ', testVal(1)); @@ -50464,7 +56685,7 @@ describe('map values', function () { describe('node values', function () { it('should support returning nodes ', function (done) { // Given - var driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j")); + var driver = neo4j.driver("bolt://localhost", sharedNeo4j.authToken); var session = driver.session(); // When @@ -50483,7 +56704,7 @@ describe('node values', function () { describe('relationship values', function () { it('should support returning relationships', function (done) { // Given - var driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j")); + var driver = neo4j.driver("bolt://localhost", sharedNeo4j.authToken); var session = driver.session(); // When @@ -50502,7 +56723,7 @@ describe('relationship values', function () { describe('path values', function () { it('should support returning paths', function (done) { // Given - var driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j")); + var driver = neo4j.driver("bolt://localhost", sharedNeo4j.authToken); var session = driver.session(); // When @@ -50532,7 +56753,7 @@ describe('path values', function () { function testVal(val, expected) { return function (done) { - var driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j")); + var driver = neo4j.driver("bolt://localhost", sharedNeo4j.authToken); var session = driver.session(); session.run("RETURN {val} as v", { val: val }).then(function (result) { @@ -50545,5 +56766,5 @@ function testVal(val, expected) { }; } -},{"../../lib/v1":7}]},{},[342,343,344,345,346,348,349,350,351,352,353,354,355,357,358,359,360,361,362,363,364,365,366,367,368]) -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvZXh0ZXJuYWwvdGV4dC1lbmNvZGluZy9pbmRleC5qcyIsImxpYi9leHRlcm5hbC90ZXh0LWVuY29kaW5nL2xpYi9lbmNvZGluZy1pbmRleGVzLmpzIiwibGliL2V4dGVybmFsL3RleHQtZW5jb2RpbmcvbGliL2VuY29kaW5nLmpzIiwibGliL3YxL2RyaXZlci5qcyIsImxpYi92MS9lcnJvci5qcyIsImxpYi92MS9ncmFwaC10eXBlcy5qcyIsImxpYi92MS9pbmRleC5qcyIsImxpYi92MS9pbnRlZ2VyLmpzIiwibGliL3YxL2ludGVybmFsL2J1Zi5qcyIsImxpYi92MS9pbnRlcm5hbC9jaC1kdW1teS5qcyIsImxpYi92MS9pbnRlcm5hbC9jaC1ub2RlLmpzIiwibGliL3YxL2ludGVybmFsL2NoLXdlYnNvY2tldC5qcyIsImxpYi92MS9pbnRlcm5hbC9jaHVua2luZy5qcyIsImxpYi92MS9pbnRlcm5hbC9jb25uZWN0aW9uLWhvbGRlci5qcyIsImxpYi92MS9pbnRlcm5hbC9jb25uZWN0aW9uLXByb3ZpZGVycy5qcyIsImxpYi92MS9pbnRlcm5hbC9jb25uZWN0b3IuanMiLCJsaWIvdjEvaW50ZXJuYWwvZmVhdHVyZXMuanMiLCJsaWIvdjEvaW50ZXJuYWwvZ2V0LXNlcnZlcnMtdXRpbC5qcyIsImxpYi92MS9pbnRlcm5hbC9ob3N0LW5hbWUtcmVzb2x2ZXJzLmpzIiwibGliL3YxL2ludGVybmFsL3BhY2tzdHJlYW0uanMiLCJsaWIvdjEvaW50ZXJuYWwvcG9vbC5qcyIsImxpYi92MS9pbnRlcm5hbC9yZWRpc2NvdmVyeS5qcyIsImxpYi92MS9pbnRlcm5hbC9yb3VuZC1yb2Jpbi1hcnJheS5qcyIsImxpYi92MS9pbnRlcm5hbC9yb3V0aW5nLXRhYmxlLmpzIiwibGliL3YxL2ludGVybmFsL3N0cmVhbS1vYnNlcnZlci5qcyIsImxpYi92MS9pbnRlcm5hbC90cmFuc2FjdGlvbi1leGVjdXRvci5qcyIsImxpYi92MS9pbnRlcm5hbC91dGY4LmpzIiwibGliL3YxL2ludGVybmFsL3V0aWwuanMiLCJsaWIvdjEvcmVjb3JkLmpzIiwibGliL3YxL3Jlc3VsdC1zdW1tYXJ5LmpzIiwibGliL3YxL3Jlc3VsdC5qcyIsImxpYi92MS9yb3V0aW5nLWRyaXZlci5qcyIsImxpYi92MS9zZXNzaW9uLmpzIiwibGliL3YxL3RyYW5zYWN0aW9uLmpzIiwibGliL3ZlcnNpb24uanMiLCJub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2FwaS5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2Jhc2UvYnVmZmVyLmpzIiwibm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYmFzZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2Jhc2Uvbm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2Jhc2UvcmVwb3J0ZXIuanMiLCJub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9jb25zdGFudHMvZGVyLmpzIiwibm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvY29uc3RhbnRzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvZGVjb2RlcnMvZGVyLmpzIiwibm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvZGVjb2RlcnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9kZWNvZGVycy9wZW0uanMiLCJub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9lbmNvZGVycy9kZXIuanMiLCJub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9lbmNvZGVycy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2VuY29kZXJzL3BlbS5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvYXJyYXkvZnJvbS5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvanNvbi9zdHJpbmdpZnkuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9hc3NpZ24uanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9jcmVhdGUuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3NldC5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9zeW1ib2wvaXRlcmF0b3IuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZ2V0LmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIm5vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYm4uanMvbGliL2JuLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3JhbmQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3Nlci1yZXNvbHZlL2VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL2Flcy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9hdXRoQ2lwaGVyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvZGVjcnlwdGVyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL2VuY3J5cHRlci5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9naGFzaC5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy9jYmMuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY2ZiLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2NmYjEuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY2ZiOC5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy9jdHIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvZWNiLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL29mYi5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9zdHJlYW1DaXBoZXIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1jaXBoZXIvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWRlcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWRlcy9tb2Rlcy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXJzYS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vYWxnb3MuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1zaWduL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1zaWduL2N1cnZlcy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vdmVyaWZ5LmpzIiwibm9kZV9tb2R1bGVzL2J1ZmZlci1zaGltcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9idWZmZXIteG9yL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaXBoZXItYmFzZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vYXJyYXkvZnJvbS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vanNvbi9zdHJpbmdpZnkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9hc3NpZ24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9jcmVhdGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3Qva2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2UuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3NldC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9zeW1ib2wvaXRlcmF0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LW1ldGhvZHMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jbGFzc29mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2xsZWN0aW9uLXRvLWpzb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvbGxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY3R4LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZWZpbmVkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19leHBvcnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mb3Itb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2dsb2JhbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGFzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19odG1sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW52b2tlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZXRlY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19rZXlvZi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbGlicmFyeS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbWV0YS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdwby5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qtc2FwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19yZWRlZmluZS1hbGwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtcHJvdG8uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC1zcGVjaWVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zdHJpbmctYXQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Rhc2suanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWluZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbnRlZ2VyLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1leHQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5LmZyb20uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zZXQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zZXQudG8tanNvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtdXRpbC1pcy9saWIvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9jcmVhdGUtZWNkaC9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2NyZWF0ZS1oYXNoL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvY3JlYXRlLWhhc2gvaGVscGVycy5qcyIsIm5vZGVfbW9kdWxlcy9jcmVhdGUtaGFzaC9tZDUuanMiLCJub2RlX21vZHVsZXMvY3JlYXRlLWhtYWMvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tYnJvd3NlcmlmeS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kZXMuanMvbGliL2Rlcy5qcyIsIm5vZGVfbW9kdWxlcy9kZXMuanMvbGliL2Rlcy9jYmMuanMiLCJub2RlX21vZHVsZXMvZGVzLmpzL2xpYi9kZXMvY2lwaGVyLmpzIiwibm9kZV9tb2R1bGVzL2Rlcy5qcy9saWIvZGVzL2Rlcy5qcyIsIm5vZGVfbW9kdWxlcy9kZXMuanMvbGliL2Rlcy9lZGUuanMiLCJub2RlX21vZHVsZXMvZGVzLmpzL2xpYi9kZXMvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvZGlmZmllLWhlbGxtYW4vYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9kaWZmaWUtaGVsbG1hbi9saWIvZGguanMiLCJub2RlX21vZHVsZXMvZGlmZmllLWhlbGxtYW4vbGliL2dlbmVyYXRlUHJpbWUuanMiLCJub2RlX21vZHVsZXMvZGlmZmllLWhlbGxtYW4vbGliL3ByaW1lcy5qc29uIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvY3VydmUvYmFzZS5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvY3VydmUvZWR3YXJkcy5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvY3VydmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlL21vbnQuanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlL3Nob3J0LmpzIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9jdXJ2ZXMuanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9lYy9rZXkuanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VjL3NpZ25hdHVyZS5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvZWRkc2EvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VkZHNhL2tleS5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvZWRkc2Evc2lnbmF0dXJlLmpzIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9wcmVjb21wdXRlZC9zZWNwMjU2azEuanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL3BhY2thZ2UuanNvbiIsIm5vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIiwibm9kZV9tb2R1bGVzL2V2cF9ieXRlc3Rva2V5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanMiLCJub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9jb21tb24uanMiLCJub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9obWFjLmpzIiwibm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzIiwibm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLmpzIiwibm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvaG1hYy1kcmJnL2xpYi9obWFjLWRyYmcuanMiLCJub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pbmRleG9mL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvaXMtYnVmZmVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2lzYXJyYXkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbG9sZXgvc3JjL2xvbGV4LXNyYy5qcyIsIm5vZGVfbW9kdWxlcy9taWxsZXItcmFiaW4vbGliL21yLmpzIiwibm9kZV9tb2R1bGVzL21pbmltYWxpc3RpYy1hc3NlcnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWNyeXB0by11dGlscy9saWIvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvb3MtYnJvd3NlcmlmeS9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlLWFzbjEvYWVzaWQuanNvbiIsIm5vZGVfbW9kdWxlcy9wYXJzZS1hc24xL2FzbjEuanMiLCJub2RlX21vZHVsZXMvcGFyc2UtYXNuMS9jZXJ0aWZpY2F0ZS5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZS1hc24xL2ZpeFByb2MuanMiLCJub2RlX21vZHVsZXMvcGFyc2UtYXNuMS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcGJrZGYyL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcGJrZGYyL3ByZWNvbmRpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzLW5leHRpY2stYXJncy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcHVibGljLWVuY3J5cHQvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9wdWJsaWMtZW5jcnlwdC9tZ2YuanMiLCJub2RlX21vZHVsZXMvcHVibGljLWVuY3J5cHQvcHJpdmF0ZURlY3J5cHQuanMiLCJub2RlX21vZHVsZXMvcHVibGljLWVuY3J5cHQvcHVibGljRW5jcnlwdC5qcyIsIm5vZGVfbW9kdWxlcy9wdWJsaWMtZW5jcnlwdC93aXRoUHVibGljLmpzIiwibm9kZV9tb2R1bGVzL3B1YmxpYy1lbmNyeXB0L3hvci5qcyIsIm5vZGVfbW9kdWxlcy9yYW5kb21ieXRlcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9kdXBsZXguanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0LmpzIiwibm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9wYXNzdGhyb3VnaC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUuanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL3RyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vd3JpdGFibGUuanMiLCJub2RlX21vZHVsZXMvcmlwZW1kMTYwL2xpYi9yaXBlbWQxNjAuanMiLCJub2RlX21vZHVsZXMvc2hhLmpzL2hhc2guanMiLCJub2RlX21vZHVsZXMvc2hhLmpzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NoYS5qcy9zaGEuanMiLCJub2RlX21vZHVsZXMvc2hhLmpzL3NoYTEuanMiLCJub2RlX21vZHVsZXMvc2hhLmpzL3NoYTIyNC5qcyIsIm5vZGVfbW9kdWxlcy9zaGEuanMvc2hhMjU2LmpzIiwibm9kZV9tb2R1bGVzL3NoYS5qcy9zaGEzODQuanMiLCJub2RlX21vZHVsZXMvc2hhLmpzL3NoYTUxMi5qcyIsIm5vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zdHJpbmdfZGVjb2Rlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy91dGlsLWRlcHJlY2F0ZS9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3ZtLWJyb3dzZXJpZnkvaW5kZXguanMiLCJzcmMvdjEvZHJpdmVyLmpzIiwic3JjL3YxL2Vycm9yLmpzIiwic3JjL3YxL2dyYXBoLXR5cGVzLmpzIiwic3JjL3YxL2luZGV4LmpzIiwic3JjL3YxL2ludGVnZXIuanMiLCJzcmMvdjEvaW50ZXJuYWwvYnVmLmpzIiwic3JjL3YxL2ludGVybmFsL2NoLWR1bW15LmpzIiwic3JjL3YxL2ludGVybmFsL2NoLW5vZGUuanMiLCJzcmMvdjEvaW50ZXJuYWwvY2gtd2Vic29ja2V0LmpzIiwic3JjL3YxL2ludGVybmFsL2NodW5raW5nLmpzIiwic3JjL3YxL2ludGVybmFsL2Nvbm5lY3Rpb24taG9sZGVyLmpzIiwic3JjL3YxL2ludGVybmFsL2Nvbm5lY3Rpb24tcHJvdmlkZXJzLmpzIiwic3JjL3YxL2ludGVybmFsL2Nvbm5lY3Rvci5qcyIsInNyYy92MS9pbnRlcm5hbC9mZWF0dXJlcy5qcyIsInNyYy92MS9pbnRlcm5hbC9nZXQtc2VydmVycy11dGlsLmpzIiwic3JjL3YxL2ludGVybmFsL2hvc3QtbmFtZS1yZXNvbHZlcnMuanMiLCJzcmMvdjEvaW50ZXJuYWwvcGFja3N0cmVhbS5qcyIsInNyYy92MS9pbnRlcm5hbC9wb29sLmpzIiwic3JjL3YxL2ludGVybmFsL3JlZGlzY292ZXJ5LmpzIiwic3JjL3YxL2ludGVybmFsL3JvdW5kLXJvYmluLWFycmF5LmpzIiwic3JjL3YxL2ludGVybmFsL3JvdXRpbmctdGFibGUuanMiLCJzcmMvdjEvaW50ZXJuYWwvc3RyZWFtLW9ic2VydmVyLmpzIiwic3JjL3YxL2ludGVybmFsL3RyYW5zYWN0aW9uLWV4ZWN1dG9yLmpzIiwic3JjL3YxL2ludGVybmFsL3V0ZjguanMiLCJzcmMvdjEvaW50ZXJuYWwvdXRpbC5qcyIsInNyYy92MS9yZWNvcmQuanMiLCJzcmMvdjEvcmVzdWx0LXN1bW1hcnkuanMiLCJzcmMvdjEvcmVzdWx0LmpzIiwic3JjL3YxL3JvdXRpbmctZHJpdmVyLmpzIiwic3JjL3YxL3Nlc3Npb24uanMiLCJzcmMvdjEvdHJhbnNhY3Rpb24uanMiLCJzcmMvdmVyc2lvbi5qcyIsInRlc3QvaW50ZXJuYWwvYnVmLnRlc3QuanMiLCJ0ZXN0L2ludGVybmFsL2NodW5raW5nLnRlc3QuanMiLCJ0ZXN0L2ludGVybmFsL2Nvbm5lY3Rpb24taG9sZGVyLnRlc3QuanMiLCJ0ZXN0L2ludGVybmFsL2Nvbm5lY3Rpb24tcHJvdmlkZXJzLnRlc3QuanMiLCJ0ZXN0L2ludGVybmFsL2Nvbm5lY3Rvci50ZXN0LmpzIiwidGVzdC9pbnRlcm5hbC9mYWtlLWNvbm5lY3Rpb24uanMiLCJ0ZXN0L2ludGVybmFsL2dldC1zZXJ2ZXJzLXV0aWwudGVzdC5qcyIsInRlc3QvaW50ZXJuYWwvaG9zdC1uYW1lLXJlc29sdmVycy50ZXN0LmpzIiwidGVzdC9pbnRlcm5hbC9wYWNrc3RyZWFtLnRlc3QuanMiLCJ0ZXN0L2ludGVybmFsL3Bvb2wudGVzdC5qcyIsInRlc3QvaW50ZXJuYWwvcmVkaXNjb3ZlcnkudGVzdC5qcyIsInRlc3QvaW50ZXJuYWwvcm91bmQtcm9iaW4tYXJyYXkudGVzdC5qcyIsInRlc3QvaW50ZXJuYWwvcm91dGluZy10YWJsZS50ZXN0LmpzIiwidGVzdC9pbnRlcm5hbC9zdHJlYW0tb2JzZXJ2ZXIudGVzdC5qcyIsInRlc3QvaW50ZXJuYWwvdGltZXJzLXV0aWwuanMiLCJ0ZXN0L2ludGVybmFsL3Rscy50ZXN0LmpzIiwidGVzdC9pbnRlcm5hbC90cmFuc2FjdGlvbi1leGVjdXRvci50ZXN0LmpzIiwidGVzdC9pbnRlcm5hbC91dGY4LnRlc3QuanMiLCJ0ZXN0L2ludGVybmFsL3V0aWwudGVzdC5qcyIsInRlc3QvdjEvZHJpdmVyLnRlc3QuanMiLCJ0ZXN0L3YxL2ludGVnZXIudGVzdC5qcyIsInRlc3QvdjEvcGFja2FnZS50ZXN0LmpzIiwidGVzdC92MS9yZWNvcmQudGVzdC5qcyIsInRlc3QvdjEvcmVzdWx0LnRlc3QuanMiLCJ0ZXN0L3YxL3Nlc3Npb24udGVzdC5qcyIsInRlc3QvdjEvdHJhbnNhY3Rpb24udGVzdC5qcyIsInRlc3QvdjEvdHlwZXMudGVzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTs7QUNBQTs7QUNBQTs7QUNBQTs7QUNBQTs7QUNBQTs7QUNBQTs7QUNBQTs7QUNBQTs7QUNBQTs7QUNBQTs7QUNBQTs7QUNBQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuMkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRUE7OztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2pMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDakdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDMUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN6RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDdkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDekxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM3dkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDMUZBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTs7QUNEQTtBQUNBOztBQ0RBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7O0FDQUE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBOztBQ0ZBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBOzs7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFPQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTs7QUNBQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzNHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDMUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9JQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNoUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3BLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdlhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDamJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzE2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNXdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDOVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDeEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDM0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNwQ0E7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDNTZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNyTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3RpQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7OztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNoQkE7QUFDQTs7QUNEQTtBQUNBOzs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNsTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN0SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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LFVBQVMsR0FBVCxFQUFjO0FBQUUsY0FBUSxHQUFSLENBQVksR0FBWjtBQUFtQixLQUw5QztBQU1ELEdBVkQ7QUFXRCIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIvLyBUaGlzIGlzIGZyZWUgYW5kIHVuZW5jdW1iZXJlZCBzb2Z0d2FyZSByZWxlYXNlZCBpbnRvIHRoZSBwdWJsaWMgZG9tYWluLlxuLy8gU2VlIExJQ0VOU0UubWQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbnZhciBlbmNvZGluZyA9IHJlcXVpcmUoXCIuL2xpYi9lbmNvZGluZy5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFRleHRFbmNvZGVyOiBlbmNvZGluZy5UZXh0RW5jb2RlcixcbiAgVGV4dERlY29kZXI6IGVuY29kaW5nLlRleHREZWNvZGVyLFxufTtcbiIsIihmdW5jdGlvbihnbG9iYWwpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICBnbG9iYWxbXCJlbmNvZGluZy1pbmRleGVzXCJdID0ge1xuICBcImJpZzVcIjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTczOTIsMTk1MDYsMTc5MjMsMTc4MzAsMTc3ODQsMTYwMzU5LDE5ODMxLDE3ODQzLDE2Mjk5MywxOTY4MiwxNjMwMTMsMTUyNTMsMTgyMzAsMTgyNDQsMTk1MjcsMTk1MjAsMTQ4MTU5LDE0NDkxOSwxNjA1OTQsMTU5MzcxLDE1OTk1NCwxOTU0MywxNzI4ODEsMTgyNTUsMTc4ODIsMTk1ODksMTYyOTI0LDE5NzE5LDE5MTA4LDE4MDgxLDE1ODQ5OSwyOTIyMSwxNTQxOTYsMTM3ODI3LDE0Njk1MCwxNDcyOTcsMjYxODksMjIyNjcsbnVsbCwzMjE0OSwyMjgxMywxNjY4NDEsMTU4NjAsMzg3MDgsMTYyNzk5LDIzNTE1LDEzODU5MCwyMzIwNCwxMzg2MSwxNzE2OTYsMjMyNDksMjM0NzksMjM4MDQsMjY0NzgsMzQxOTUsMTcwMzA5LDI5NzkzLDI5ODUzLDE0NDUzLDEzODU3OSwxNDUwNTQsMTU1NjgxLDE2MTA4LDE1MzgyMiwxNTA5MywzMTQ4NCw0MDg1NSwxNDc4MDksMTY2MTU3LDE0Mzg1MCwxMzM3NzAsMTQzOTY2LDE3MTYyLDMzOTI0LDQwODU0LDM3OTM1LDE4NzM2LDM0MzIzLDIyNjc4LDM4NzMwLDM3NDAwLDMxMTg0LDMxMjgyLDI2MjA4LDI3MTc3LDM0OTczLDI5NzcyLDMxNjg1LDI2NDk4LDMxMjc2LDIxMDcxLDM2OTM0LDEzNTQyLDI5NjM2LDE1NTA2NSwyOTg5NCw0MDkwMywyMjQ1MSwxODczNSwyMTU4MCwxNjY4OSwxNDUwMzgsMjI1NTIsMzEzNDYsMTYyNjYxLDM1NzI3LDE4MDk0LDE1OTM2OCwxNjc2OSwxNTUwMzMsMzE2NjIsMTQwNDc2LDQwOTA0LDE0MDQ4MSwxNDA0ODksMTQwNDkyLDQwOTA1LDM0MDUyLDE0NDgyNywxNjU2NCw0MDkwNiwxNzYzMywxNzU2MTUsMjUyODEsMjg3ODIsNDA5MDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMjczNiwxMjczNywxMjczOCwxMjczOSwxMjc0MCwxMzEzNDAsMTI3NDEsMTMxMjgxLDEzMTI3NywxMjc0MiwxMjc0MywxMzEyNzUsMTM5MjQwLDEyNzQ0LDEzMTI3NCwxMjc0NSwxMjc0NiwxMjc0NywxMjc0OCwxMzEzNDIsMTI3NDksMTI3NTAsMjU2LDE5Myw0NjEsMTkyLDI3NCwyMDEsMjgyLDIwMCwzMzIsMjExLDQ2NSwyMTAsbnVsbCw3ODcwLG51bGwsNzg3MiwyMDIsMjU3LDIyNSw0NjIsMjI0LDU5MywyNzUsMjMzLDI4MywyMzIsMjk5LDIzNyw0NjQsMjM2LDMzMywyNDMsNDY2LDI0MiwzNjMsMjUwLDQ2OCwyNDksNDcwLDQ3Miw0NzQsNDc2LDI1MixudWxsLDc4NzEsbnVsbCw3ODczLDIzNCw2MDksOTE3OCw5MTc5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE3Mjk2OSwxMzU0OTMsbnVsbCwyNTg2NixudWxsLG51bGwsMjAwMjksMjgzODEsNDAyNzAsMzczNDMsbnVsbCxudWxsLDE2MTU4OSwyNTc0NSwyMDI1MCwyMDI2NCwyMDM5MiwyMDgyMiwyMDg1MiwyMDg5MiwyMDk2NCwyMTE1MywyMTE2MCwyMTMwNywyMTMyNiwyMTQ1NywyMTQ2NCwyMjI0MiwyMjc2OCwyMjc4OCwyMjc5MSwyMjgzNCwyMjgzNiwyMzM5OCwyMzQ1NCwyMzQ1NSwyMzcwNiwyNDE5OCwyNDYzNSwyNTk5MywyNjYyMiwyNjYyOCwyNjcyNSwyNzk4MiwyODg2MCwzMDAwNSwzMjQyMCwzMjQyOCwzMjQ0MiwzMjQ1NSwzMjQ2MywzMjQ3OSwzMjUxOCwzMjU2NywzMzQwMiwzMzQ4NywzMzY0NywzNTI3MCwzNTc3NCwzNTgxMCwzNjcxMCwzNjcxMSwzNjcxOCwyOTcxMywzMTk5NiwzMjIwNSwyNjk1MCwzMTQzMywyMTAzMSxudWxsLG51bGwsbnVsbCxudWxsLDM3MjYwLDMwOTA0LDM3MjE0LDMyOTU2LG51bGwsMzYxMDcsMzMwMTQsMTMzNjA3LG51bGwsbnVsbCwzMjkyNyw0MDY0NywxOTY2MSw0MDM5Myw0MDQ2MCwxOTUxOCwxNzE1MTAsMTU5NzU4LDQwNDU4LDE3MjMzOSwxMzc2MSxudWxsLDI4MzE0LDMzMzQyLDI5OTc3LG51bGwsMTg3MDUsMzk1MzIsMzk1NjcsNDA4NTcsMzExMTEsMTY0OTcyLDEzODY5OCwxMzI1NjAsMTQyMDU0LDIwMDA0LDIwMDk3LDIwMDk2LDIwMTAzLDIwMTU5LDIwMjAzLDIwMjc5LDEzMzg4LDIwNDEzLDE1OTQ0LDIwNDgzLDIwNjE2LDEzNDM3LDEzNDU5LDEzNDc3LDIwODcwLDIyNzg5LDIwOTU1LDIwOTg4LDIwOTk3LDIwMTA1LDIxMTEzLDIxMTM2LDIxMjg3LDEzNzY3LDIxNDE3LDEzNjQ5LDIxNDI0LDEzNjUxLDIxNDQyLDIxNTM5LDEzNjc3LDEzNjgyLDEzOTUzLDIxNjUxLDIxNjY3LDIxNjg0LDIxNjg5LDIxNzEyLDIxNzQzLDIxNzg0LDIxNzk1LDIxODAwLDEzNzIwLDIxODIzLDEzNzMzLDEzNzU5LDIxOTc1LDEzNzY1LDE2MzIwNCwyMTc5NyxudWxsLDEzNDIxMCwxMzQ0MjEsMTUxODUxLDIxOTA0LDE0MjUzNCwxNDgyOCwxMzE5MDUsMzY0MjIsMTUwOTY4LDE2OTE4OSwxNjQ2NywxNjQwMzAsMzA1ODYsMTQyMzkyLDE0OTAwLDE4Mzg5LDE2NDE4OSwxNTgxOTQsMTUxMDE4LDI1ODIxLDEzNDUyNCwxMzUwOTIsMTM0MzU3LDEzNTQxMiwyNTc0MSwzNjQ3OCwxMzQ4MDYsMTM0MTU1LDEzNTAxMiwxNDI1MDUsMTY0NDM4LDE0ODY5MSxudWxsLDEzNDQ3MCwxNzA1NzMsMTY0MDczLDE4NDIwLDE1MTIwNywxNDI1MzAsMzk2MDIsMTQ5NTEsMTY5NDYwLDE2MzY1LDEzNTc0LDE1MjI2MywxNjk5NDAsMTYxOTkyLDE0MjY2MCw0MDMwMiwzODkzMyxudWxsLDE3MzY5LDE1NTgxMywyNTc4MCwyMTczMSwxNDI2NjgsMTQyMjgyLDEzNTI4NywxNDg0MywxMzUyNzksMTU3NDAyLDE1NzQ2MiwxNjIyMDgsMjU4MzQsMTUxNjM0LDEzNDIxMSwzNjQ1NiwxMzk2ODEsMTY2NzMyLDEzMjkxMyxudWxsLDE4NDQzLDEzMTQ5NywxNjM3OCwyMjY0MywxNDI3MzMsbnVsbCwxNDg5MzYsMTMyMzQ4LDE1NTc5OSwxMzQ5ODgsMTM0NTUwLDIxODgxLDE2NTcxLDE3MzM4LG51bGwsMTkxMjQsMTQxOTI2LDEzNTMyNSwzMzE5NCwzOTE1NywxMzQ1NTYsMjU0NjUsMTQ4NDYsMTQxMTczLDM2Mjg4LDIyMTc3LDI1NzI0LDE1OTM5LG51bGwsMTczNTY5LDEzNDY2NSwxNDIwMzEsMTQyNTM3LG51bGwsMTM1MzY4LDE0NTg1OCwxNDczOCwxNDg1NCwxNjQ1MDcsMTM2ODgsMTU1MjA5LDEzOTQ2MywyMjA5OCwxMzQ5NjEsMTQyNTE0LDE2OTc2MCwxMzUwMCwyNzcwOSwxNTEwOTksbnVsbCxudWxsLDE2MTE0MCwxNDI5ODcsMTM5Nzg0LDE3MzY1OSwxNjcxMTcsMTM0Nzc4LDEzNDE5NiwxNTc3MjQsMzI2NTksMTM1Mzc1LDE0MTMxNSwxNDE2MjUsMTM4MTksMTUyMDM1LDEzNDc5NiwxMzUwNTMsMTM0ODI2LDE2Mjc1LDEzNDk2MCwxMzQ0NzEsMTM1NTAzLDEzNDczMixudWxsLDEzNDgyNywxMzQwNTcsMTM0NDcyLDEzNTM2MCwxMzU0ODUsMTYzNzcsMTQwOTUwLDI1NjUwLDEzNTA4NSwxNDQzNzIsMTYxMzM3LDE0MjI4NiwxMzQ1MjYsMTM0NTI3LDE0MjQxNywxNDI0MjEsMTQ4NzIsMTM0ODA4LDEzNTM2NywxMzQ5NTgsMTczNjE4LDE1ODU0NCwxNjcxMjIsMTY3MzIxLDE2NzExNCwzODMxNCwyMTcwOCwzMzQ3NiwyMTk0NSxudWxsLDE3MTcxNSwzOTk3NCwzOTYwNiwxNjE2MzAsMTQyODMwLDI4OTkyLDMzMTMzLDMzMDA0LDIzNTgwLDE1NzA0MiwzMzA3NiwxNDIzMSwyMTM0MywxNjQwMjksMzczMDIsMTM0OTA2LDEzNDY3MSwxMzQ3NzUsMTM0OTA3LDEzNzg5LDE1MTAxOSwxMzgzMywxMzQzNTgsMjIxOTEsMTQxMjM3LDEzNTM2OSwxMzQ2NzIsMTM0Nzc2LDEzNTI4OCwxMzU0OTYsMTY0MzU5LDEzNjI3NywxMzQ3NzcsMTUxMTIwLDE0Mjc1NiwyMzEyNCwxMzUxOTcsMTM1MTk4LDEzNTQxMywxMzU0MTQsMjI0MjgsMTM0NjczLDE2MTQyOCwxNjQ1NTcsMTM1MDkzLDEzNDc3OSwxNTE5MzQsMTQwODMsMTM1MDk0LDEzNTU1MiwxNTIyODAsMTcyNzMzLDE0OTk3OCwxMzcyNzQsMTQ3ODMxLDE2NDQ3NiwyMjY4MSwyMTA5NiwxMzg1MCwxNTM0MDUsMzE2NjYsMjM0MDAsMTg0MzIsMTkyNDQsNDA3NDMsMTg5MTksMzk5NjcsMzk4MjEsMTU0NDg0LDE0MzY3NywyMjAxMSwxMzgxMCwyMjE1MywyMDAwOCwyMjc4NiwxMzgxNzcsMTk0NjgwLDM4NzM3LDEzMTIwNiwyMDA1OSwyMDE1NSwxMzYzMCwyMzU4NywyNDQwMSwyNDUxNiwxNDU4NiwyNTE2NCwyNTkwOSwyNzUxNCwyNzcwMSwyNzcwNiwyODc4MCwyOTIyNywyMDAxMiwyOTM1NywxNDk3MzcsMzI1OTQsMzEwMzUsMzE5OTMsMzI1OTUsMTU2MjY2LDEzNTA1LG51bGwsMTU2NDkxLDMyNzcwLDMyODk2LDE1NzIwMiwxNTgwMzMsMjEzNDEsMzQ5MTYsMzUyNjUsMTYxOTcwLDM1NzQ0LDM2MTI1LDM4MDIxLDM4MjY0LDM4MjcxLDM4Mzc2LDE2NzQzOSwzODg4NiwzOTAyOSwzOTExOCwzOTEzNCwzOTI2NywxNzAwMDAsNDAwNjAsNDA0NzksNDA2NDQsMjc1MDMsNjM3NTEsMjAwMjMsMTMxMjA3LDM4NDI5LDI1MTQzLDM4MDUwLG51bGwsMjA1MzksMjgxNTgsMTcxMTIzLDQwODcwLDE1ODE3LDM0OTU5LDE0Nzc5MCwyODc5MSwyMzc5NywxOTIzMiwxNTIwMTMsMTM2NTcsMTU0OTI4LDI0ODY2LDE2NjQ1MCwzNjc3NSwzNzM2NiwyOTA3MywyNjM5MywyOTYyNiwxNDQwMDEsMTcyMjk1LDE1NDk5LDEzNzYwMCwxOTIxNiwzMDk0OCwyOTY5OCwyMDkxMCwxNjU2NDcsMTYzOTMsMjcyMzUsMTcyNzMwLDE2OTMxLDM0MzE5LDEzMzc0MywzMTI3NCwxNzAzMTEsMTY2NjM0LDM4NzQxLDI4NzQ5LDIxMjg0LDEzOTM5MCwzNzg3NiwzMDQyNSwxNjYzNzEsNDA4NzEsMzA2ODUsMjAxMzEsMjA0NjQsMjA2NjgsMjAwMTUsMjAyNDcsNDA4NzIsMjE1NTYsMzIxMzksMjI2NzQsMjI3MzYsMTM4Njc4LDI0MjEwLDI0MjE3LDI0NTE0LDE0MTA3NCwyNTk5NSwxNDQzNzcsMjY5MDUsMjcyMDMsMTQ2NTMxLDI3OTAzLG51bGwsMjkxODQsMTQ4NzQxLDI5NTgwLDE2MDkxLDE1MDAzNSwyMzMxNywyOTg4MSwzNTcxNSwxNTQ3ODgsMTUzMjM3LDMxMzc5LDMxNzI0LDMxOTM5LDMyMzY0LDMzNTI4LDM0MTk5LDQwODczLDM0OTYwLDQwODc0LDM2NTM3LDQwODc1LDM2ODE1LDM0MTQzLDM5MzkyLDM3NDA5LDQwODc2LDE2NzM1MywxMzYyNTUsMTY0OTcsMTcwNTgsMjMwNjYsbnVsbCxudWxsLG51bGwsMzkwMTYsMjY0NzUsMTcwMTQsMjIzMzMsbnVsbCwzNDI2MiwxNDk4ODMsMzM0NzEsMTYwMDEzLDE5NTg1LDE1OTA5MiwyMzkzMSwxNTg0ODUsMTU5Njc4LDQwODc3LDQwODc4LDIzNDQ2LDQwODc5LDI2MzQzLDMyMzQ3LDI4MjQ3LDMxMTc4LDE1NzUyLDE3NjAzLDE0Mzk1OCwxNDEyMDYsMTczMDYsMTc3MTgsbnVsbCwyMzc2NSwxNDYyMDIsMzU1NzcsMjM2NzIsMTU2MzQsMTQ0NzIxLDIzOTI4LDQwODgyLDI5MDE1LDE3NzUyLDE0NzY5MiwxMzg3ODcsMTk1NzUsMTQ3MTIsMTMzODYsMTMxNDkyLDE1ODc4NSwzNTUzMiwyMDQwNCwxMzE2NDEsMjI5NzUsMzMxMzIsMzg5OTgsMTcwMjM0LDI0Mzc5LDEzNDA0NyxudWxsLDEzOTcxMywxNjYyNTMsMTY2NDIsMTgxMDcsMTY4MDU3LDE2MTM1LDQwODgzLDE3MjQ2OSwxNjYzMiwxNDI5NCwxODE2NywxNTg3OTAsMTY3NjQsMTY1NTU0LDE2MDc2NywxNzc3MywxNDU0OCwxNTI3MzAsMTc3NjEsMTc2OTEsMTk4NDksMTk1NzksMTk4MzAsMTc4OTgsMTYzMjgsMTUwMjg3LDEzOTIxLDE3NjMwLDE3NTk3LDE2ODc3LDIzODcwLDIzODgwLDIzODk0LDE1ODY4LDE0MzUxLDIzOTcyLDIzOTkzLDE0MzY4LDE0MzkyLDI0MTMwLDI0MjUzLDI0MzU3LDI0NDUxLDE0NjAwLDE0NjEyLDE0NjU1LDE0NjY5LDI0NzkxLDI0ODkzLDIzNzgxLDE0NzI5LDI1MDE1LDI1MDE3LDI1MDM5LDE0Nzc2LDI1MTMyLDI1MjMyLDI1MzE3LDI1MzY4LDE0ODQwLDIyMTkzLDE0ODUxLDI1NTcwLDI1NTk1LDI1NjA3LDI1NjkwLDE0OTIzLDI1NzkyLDIzODI5LDIyMDQ5LDQwODYzLDE0OTk5LDI1OTkwLDE1MDM3LDI2MTExLDI2MTk1LDE1MDkwLDI2MjU4LDE1MTM4LDI2MzkwLDE1MTcwLDI2NTMyLDI2NjI0LDE1MTkyLDI2Njk4LDI2NzU2LDE1MjE4LDE1MjE3LDE1MjI3LDI2ODg5LDI2OTQ3LDI5Mjc2LDI2OTgwLDI3MDM5LDI3MDEzLDE1MjkyLDI3MDk0LDE1MzI1LDI3MjM3LDI3MjUyLDI3MjQ5LDI3MjY2LDE1MzQwLDI3Mjg5LDE1MzQ2LDI3MzA3LDI3MzE3LDI3MzQ4LDI3MzgyLDI3NTIxLDI3NTg1LDI3NjI2LDI3NzY1LDI3ODE4LDE1NTYzLDI3OTA2LDI3OTEwLDI3OTQyLDI4MDMzLDE1NTk5LDI4MDY4LDI4MDgxLDI4MTgxLDI4MTg0LDI4MjAxLDI4Mjk0LDE2NjMzNiwyODM0NywyODM4NiwyODM3OCw0MDgzMSwyODM5MiwyODM5MywyODQ1MiwyODQ2OCwxNTY4NiwxNDcyNjUsMjg1NDUsMjg2MDYsMTU3MjIsMTU3MzMsMjkxMTEsMjM3MDUsMTU3NTQsMjg3MTYsMTU3NjEsMjg3NTIsMjg3NTYsMjg3ODMsMjg3OTksMjg4MDksMTMxODc3LDE3MzQ1LDEzODA5LDEzNDg3MiwxNDcxNTksMjI0NjIsMTU5NDQzLDI4OTkwLDE1MzU2OCwxMzkwMiwyNzA0MiwxNjY4ODksMjM0MTIsMzEzMDUsMTUzODI1LDE2OTE3NywzMTMzMywzMTM1NywxNTQwMjgsMzE0MTksMzE0MDgsMzE0MjYsMzE0MjcsMjkxMzcsMTU2ODEzLDE2ODQyLDMxNDUwLDMxNDUzLDMxNDY2LDE2ODc5LDIxNjgyLDE1NDYyNSwzMTQ5OSwzMTU3MywzMTUyOSwxNTIzMzQsMTU0ODc4LDMxNjUwLDMxNTk5LDMzNjkyLDE1NDU0OCwxNTg4NDcsMzE2OTYsMzM4MjUsMzE2MzQsMzE2NzIsMTU0OTEyLDE1Nzg5LDE1NDcyNSwzMzkzOCwzMTczOCwzMTc1MCwzMTc5NywxNTQ4MTcsMzE4MTIsMzE4NzUsMTQ5NjM0LDMxOTEwLDI2MjM3LDE0ODg1NiwzMTk0NSwzMTk0MywzMTk3NCwzMTg2MCwzMTk4NywzMTk4OSwzMTk1MCwzMjM1OSwxNzY5MywxNTkzMDAsMzIwOTMsMTU5NDQ2LDI5ODM3LDMyMTM3LDMyMTcxLDI4OTgxLDMyMTc5LDMyMjEwLDE0NzU0MywxNTU2ODksMzIyMjgsMTU2MzUsMzIyNDUsMTM3MjA5LDMyMjI5LDE2NDcxNywzMjI4NSwxNTU5MzcsMTU1OTk0LDMyMzY2LDMyNDAyLDE3MTk1LDM3OTk2LDMyMjk1LDMyNTc2LDMyNTc3LDMyNTgzLDMxMDMwLDE1NjM2OCwzOTM5MywzMjY2MywxNTY0OTcsMzI2NzUsMTM2ODAxLDEzMTE3NiwxNzc1NiwxNDUyNTQsMTc2NjcsMTY0NjY2LDMyNzYyLDE1NjgwOSwzMjc3MywzMjc3NiwzMjc5NywzMjgwOCwzMjgxNSwxNzIxNjcsMTU4OTE1LDMyODI3LDMyODI4LDMyODY1LDE0MTA3NiwxODgyNSwxNTcyMjIsMTQ2OTE1LDE1NzQxNiwyNjQwNSwzMjkzNSwxNjY0NzIsMzMwMzEsMzMwNTAsMjI3MDQsMTQxMDQ2LDI3Nzc1LDE1NjgyNCwxNTE0ODAsMjU4MzEsMTM2MzMwLDMzMzA0LDEzNzMxMCwyNzIxOSwxNTAxMTcsMTUwMTY1LDE3NTMwLDMzMzIxLDEzMzkwMSwxNTgyOTAsMTQ2ODE0LDIwNDczLDEzNjQ0NSwzNDAxOCwzMzYzNCwxNTg0NzQsMTQ5OTI3LDE0NDY4OCwxMzcwNzUsMTQ2OTM2LDMzNDUwLDI2OTA3LDE5NDk2NCwxNjg1OSwzNDEyMywzMzQ4OCwzMzU2MiwxMzQ2NzgsMTM3MTQwLDE0MDE3LDE0Mzc0MSwxNDQ3MzAsMzM0MDMsMzM1MDYsMzM1NjAsMTQ3MDgzLDE1OTEzOSwxNTg0NjksMTU4NjE1LDE0NDg0NiwxNTgwNywzMzU2NSwyMTk5NiwzMzY2OSwxNzY3NSwxNTkxNDEsMzM3MDgsMzM3MjksMzM3NDcsMTM0MzgsMTU5NDQ0LDI3MjIzLDM0MTM4LDEzNDYyLDE1OTI5OCwxNDMwODcsMzM4ODAsMTU0NTk2LDMzOTA1LDE1ODI3LDE3NjM2LDI3MzAzLDMzODY2LDE0NjYxMywzMTA2NCwzMzk2MCwxNTg2MTQsMTU5MzUxLDE1OTI5OSwzNDAxNCwzMzgwNywzMzY4MSwxNzU2OCwzMzkzOSwzNDAyMCwxNTQ3NjksMTY5NjAsMTU0ODE2LDE3NzMxLDM0MTAwLDIzMjgyLDE1OTM4NSwxNzcwMywzNDE2MywxNzY4NiwyNjU1OSwzNDMyNiwxNjU0MTMsMTY1NDM1LDM0MjQxLDE1OTg4MCwzNDMwNiwxMzY1NzgsMTU5OTQ5LDE5NDk5NCwxNzc3MCwzNDM0NCwxMzg5NiwxMzczNzgsMjE0OTUsMTYwNjY2LDM0NDMwLDM0NjczLDE3MjI4MCwzNDc5OCwxNDIzNzUsMzQ3MzcsMzQ3NzgsMzQ4MzEsMjIxMTMsMzQ0MTIsMjY3MTAsMTc5MzUsMzQ4ODUsMzQ4ODYsMTYxMjQ4LDE0Njg3MywxNjEyNTIsMzQ5MTAsMzQ5NzIsMTgwMTEsMzQ5OTYsMzQ5OTcsMjU1MzcsMzUwMTMsMzA1ODMsMTYxNTUxLDM1MjA3LDM1MjEwLDM1MjM4LDM1MjQxLDM1MjM5LDM1MjYwLDE2NjQzNywzNTMwMywxNjIwODQsMTYyNDkzLDM1NDg0LDMwNjExLDM3Mzc0LDM1NDcyLDE2MjM5MywzMTQ2NSwxNjI2MTgsMTQ3MzQzLDE4MTk1LDE2MjYxNiwyOTA1MiwzNTU5NiwzNTYxNSwxNTI2MjQsMTUyOTMzLDM1NjQ3LDM1NjYwLDM1NjYxLDM1NDk3LDE1MDEzOCwzNTcyOCwzNTczOSwzNTUwMywxMzY5MjcsMTc5NDEsMzQ4OTUsMzU5OTUsMTYzMTU2LDE2MzIxNSwxOTUwMjgsMTQxMTcsMTYzMTU1LDM2MDU0LDE2MzIyNCwxNjMyNjEsMzYxMTQsMzYwOTksMTM3NDg4LDM2MDU5LDI4NzY0LDM2MTEzLDE1MDcyOSwxNjA4MCwzNjIxNSwzNjI2NSwxNjM4NDIsMTM1MTg4LDE0OTg5OCwxNTIyOCwxNjQyODQsMTYwMDEyLDMxNDYzLDM2NTI1LDM2NTM0LDM2NTQ3LDM3NTg4LDM2NjMzLDM2NjUzLDE2NDcwOSwxNjQ4ODIsMzY3NzMsMzc2MzUsMTcyNzAzLDEzMzcxMiwzNjc4NywxODczMCwxNjYzNjYsMTY1MTgxLDE0Njg3NSwyNDMxMiwxNDM5NzAsMzY4NTcsMTcyMDUyLDE2NTU2NCwxNjUxMjEsMTQwMDY5LDE0NzIwLDE1OTQ0NywzNjkxOSwxNjUxODAsMTYyNDk0LDM2OTYxLDE2NTIyOCwxNjUzODcsMzcwMzIsMTY1NjUxLDM3MDYwLDE2NTYwNiwzNzAzOCwzNzExNywzNzIyMywxNTA4OCwzNzI4OSwzNzMxNiwzMTkxNiwxNjYxOTUsMTM4ODg5LDM3MzkwLDI3ODA3LDM3NDQxLDM3NDc0LDE1MzAxNywzNzU2MSwxNjY1OTgsMTQ2NTg3LDE2NjY2OCwxNTMwNTEsMTM0NDQ5LDM3Njc2LDM3NzM5LDE2NjYyNSwxNjY4OTEsMjg4MTUsMjMyMzUsMTY2NjI2LDE2NjYyOSwxODc4OSwzNzQ0NCwxNjY4OTIsMTY2OTY5LDE2NjkxMSwzNzc0NywzNzk3OSwzNjU0MCwzODI3NywzODMxMCwzNzkyNiwzODMwNCwyODY2MiwxNzA4MSwxNDA5MjIsMTY1NTkyLDEzNTgwNCwxNDY5OTAsMTg5MTEsMjc2NzYsMzg1MjMsMzg1NTAsMTY3NDgsMzg1NjMsMTU5NDQ1LDI1MDUwLDM4NTgyLDMwOTY1LDE2NjYyNCwzODU4OSwyMTQ1MiwxODg0OSwxNTg5MDQsMTMxNzAwLDE1NjY4OCwxNjgxMTEsMTY4MTY1LDE1MDIyNSwxMzc0OTMsMTQ0MTM4LDM4NzA1LDM0MzcwLDM4NzEwLDE4OTU5LDE3NzI1LDE3Nzk3LDE1MDI0OSwyODc4OSwyMzM2MSwzODY4MywzODc0OCwxNjg0MDUsMzg3NDMsMjMzNzAsMTY4NDI3LDM4NzUxLDM3OTI1LDIwNjg4LDE0MzU0MywxNDM1NDgsMzg3OTMsMzg4MTUsMzg4MzMsMzg4NDYsMzg4NDgsMzg4NjYsMzg4ODAsMTUyNjg0LDM4ODk0LDI5NzI0LDE2OTAxMSwzODkxMSwzODkwMSwxNjg5ODksMTYyMTcwLDE5MTUzLDM4OTY0LDM4OTYzLDM4OTg3LDM5MDE0LDE1MTE4LDE2MDExNywxNTY5NywxMzI2NTYsMTQ3ODA0LDE1MzM1MCwzOTExNCwzOTA5NSwzOTExMiwzOTExMSwxOTE5OSwxNTkwMTUsMTM2OTE1LDIxOTM2LDM5MTM3LDM5MTQyLDM5MTQ4LDM3NzUyLDM5MjI1LDE1MDA1NywxOTMxNCwxNzAwNzEsMTcwMjQ1LDM5NDEzLDM5NDM2LDM5NDgzLDM5NDQwLDM5NTEyLDE1MzM4MSwxNDAyMCwxNjgxMTMsMTcwOTY1LDM5NjQ4LDM5NjUwLDE3MDc1NywzOTY2OCwxOTQ3MCwzOTcwMCwzOTcyNSwxNjUzNzYsMjA1MzIsMzk3MzIsMTU4MTIwLDE0NTMxLDE0MzQ4NSwzOTc2MCwzOTc0NCwxNzEzMjYsMjMxMDksMTM3MzE1LDM5ODIyLDE0ODA0MywzOTkzOCwzOTkzNSwzOTk0OCwxNzE2MjQsNDA0MDQsMTcxOTU5LDE3MjQzNCwxNzI0NTksMTcyMjU3LDE3MjMyMywxNzI1MTEsNDAzMTgsNDAzMjMsMTcyMzQwLDQwNDYyLDI2NzYwLDQwMzg4LDEzOTYxMSwxNzI0MzUsMTcyNTc2LDEzNzUzMSwxNzI1OTUsNDAyNDksMTcyMjE3LDE3MjcyNCw0MDU5Miw0MDU5Nyw0MDYwNiw0MDYxMCwxOTc2NCw0MDYxOCw0MDYyMywxNDgzMjQsNDA2NDEsMTUyMDAsMTQ4MjEsMTU2NDUsMjAyNzQsMTQyNzAsMTY2OTU1LDQwNzA2LDQwNzEyLDE5MzUwLDM3OTI0LDE1OTEzOCw0MDcyNyw0MDcyNiw0MDc2MSwyMjE3NSwyMjE1NCw0MDc3MywzOTM1MiwxNjgwNzUsMzg4OTgsMzM5MTksNDA4MDIsNDA4MDksMzE0NTIsNDA4NDYsMjkyMDYsMTkzOTAsMTQ5ODc3LDE0OTk0NywyOTA0NywxNTAwMDgsMTQ4Mjk2LDE1MDA5NywyOTU5OCwxNjY4NzQsMTM3NDY2LDMxMTM1LDE2NjI3MCwxNjc0NzgsMzc3MzcsMzc4NzUsMTY2NDY4LDM3NjEyLDM3NzYxLDM3ODM1LDE2NjI1MiwxNDg2NjUsMjkyMDcsMTYxMDcsMzA1NzgsMzEyOTksMjg4ODAsMTQ4NTk1LDE0ODQ3MiwyOTA1NCwxMzcxOTksMjg4MzUsMTM3NDA2LDE0NDc5MywxNjA3MSwxMzczNDksMTUyNjIzLDEzNzIwOCwxNDExNCwxMzY5NTUsMTM3MjczLDE0MDQ5LDEzNzA3NiwxMzc0MjUsMTU1NDY3LDE0MTE1LDEzNjg5NiwyMjM2MywxNTAwNTMsMTM2MTkwLDEzNTg0OCwxMzYxMzQsMTM2Mzc0LDM0MDUxLDE0NTA2MiwzNDA1MSwzMzg3NywxNDk5MDgsMTYwMTAxLDE0Njk5MywxNTI5MjQsMTQ3MTk1LDE1OTgyNiwxNzY1MiwxNDUxMzQsMTcwMzk3LDE1OTUyNiwyNjYxNywxNDEzMSwxNTM4MSwxNTg0NywyMjYzNiwxMzc1MDYsMjY2NDAsMTY0NzEsMTQ1MjE1LDE0NzY4MSwxNDc1OTUsMTQ3NzI3LDE1ODc1MywyMTcwNywyMjE3NCwxNTczNjEsMjIxNjIsMTM1MTM1LDEzNDA1NiwxMzQ2NjksMzc4MzAsMTY2Njc1LDM3Nzg4LDIwMjE2LDIwNzc5LDE0MzYxLDE0ODUzNCwyMDE1NiwxMzIxOTcsMTMxOTY3LDIwMjk5LDIwMzYyLDE1MzE2OSwyMzE0NCwxMzE0OTksMTMyMDQzLDE0NzQ1LDEzMTg1MCwxMzIxMTYsMTMzNjUsMjAyNjUsMTMxNzc2LDE2NzYwMywxMzE3MDEsMzU1NDYsMTMxNTk2LDIwMTIwLDIwNjg1LDIwNzQ5LDIwMzg2LDIwMjI3LDE1MDAzMCwxNDcwODIsMjAyOTAsMjA1MjYsMjA1ODgsMjA2MDksMjA0MjgsMjA0NTMsMjA1NjgsMjA3MzIsMjA4MjUsMjA4MjcsMjA4MjksMjA4MzAsMjgyNzgsMTQ0Nzg5LDE0NzAwMSwxNDcxMzUsMjgwMTgsMTM3MzQ4LDE0NzA4MSwyMDkwNCwyMDkzMSwxMzI1NzYsMTc2MjksMTMyMjU5LDEzMjI0MiwxMzIyNDEsMzYyMTgsMTY2NTU2LDEzMjg3OCwyMTA4MSwyMTE1NiwxMzMyMzUsMjEyMTcsMzc3NDIsMTgwNDIsMjkwNjgsMTQ4MzY0LDEzNDE3NiwxNDk5MzIsMTM1Mzk2LDI3MDg5LDEzNDY4NSwyOTgxNywxNjA5NCwyOTg0OSwyOTcxNiwyOTc4MiwyOTU5MiwxOTM0MiwxNTAyMDQsMTQ3NTk3LDIxNDU2LDEzNzAwLDI5MTk5LDE0NzY1NywyMTk0MCwxMzE5MDksMjE3MDksMTM0MDg2LDIyMzAxLDM3NDY5LDM4NjQ0LDM3NzM0LDIyNDkzLDIyNDEzLDIyMzk5LDEzODg2LDIyNzMxLDIzMTkzLDE2NjQ3MCwxMzY5NTQsMTM3MDcxLDEzNjk3NiwyMzA4NCwyMjk2OCwzNzUxOSwyMzE2NiwyMzI0NywyMzA1OCwxNTM5MjYsMTM3NzE1LDEzNzMxMywxNDgxMTcsMTQwNjksMjc5MDksMjk3NjMsMjMwNzMsMTU1MjY3LDIzMTY5LDE2Njg3MSwxMzIxMTUsMzc4NTYsMjk4MzYsMTM1OTM5LDI4OTMzLDE4ODAyLDM3ODk2LDE2NjM5NSwzNzgyMSwxNDI0MCwyMzU4MiwyMzcxMCwyNDE1OCwyNDEzNiwxMzc2MjIsMTM3NTk2LDE0NjE1OCwyNDI2OSwyMzM3NSwxMzc0NzUsMTM3NDc2LDE0MDgxLDEzNzM3NiwxNDA0NSwxMzY5NTgsMTQwMzUsMzMwNjYsMTY2NDcxLDEzODY4MiwxNDQ0OTgsMTY2MzEyLDI0MzMyLDI0MzM0LDEzNzUxMSwxMzcxMzEsMjMxNDcsMTM3MDE5LDIzMzY0LDM0MzI0LDE2MTI3NywzNDkxMiwyNDcwMiwxNDE0MDgsMTQwODQzLDI0NTM5LDE2MDU2LDE0MDcxOSwxNDA3MzQsMTY4MDcyLDE1OTYwMywyNTAyNCwxMzExMzQsMTMxMTQyLDE0MDgyNywyNDk4NSwyNDk4NCwyNDY5MywxNDI0OTEsMTQyNTk5LDE0OTIwNCwxNjgyNjksMjU3MTMsMTQ5MDkzLDE0MjE4NiwxNDg4OSwxNDIxMTQsMTQ0NDY0LDE3MDIxOCwxNDI5NjgsMjUzOTksMTczMTQ3LDI1NzgyLDI1MzkzLDI1NTUzLDE0OTk4NywxNDI2OTUsMjUyNTIsMTQyNDk3LDI1NjU5LDI1OTYzLDI2OTk0LDE1MzQ4LDE0MzUwMiwxNDQwNDUsMTQ5ODk3LDE0NDA0MywyMTc3MywxNDQwOTYsMTM3NDMzLDE2OTAyMywyNjMxOCwxNDQwMDksMTQzNzk1LDE1MDcyLDE2Nzg0LDE1Mjk2NCwxNjY2OTAsMTUyOTc1LDEzNjk1NiwxNTI5MjMsMTUyNjEzLDMwOTU4LDE0MzYxOSwxMzcyNTgsMTQzOTI0LDEzNDEyLDE0Mzg4NywxNDM3NDYsMTQ4MTY5LDI2MjU0LDE1OTAxMiwyNjIxOSwxOTM0NywyNjE2MCwxNjE5MDQsMTM4NzMxLDI2MjExLDE0NDA4MiwxNDQwOTcsMjYxNDIsMTUzNzE0LDE0NTQ1LDE0NTQ2NiwxNDUzNDAsMTUyNTcsMTQ1MzE0LDE0NDM4MiwyOTkwNCwxNTI1NCwyNjUxMSwxNDkwMzQsMjY4MDYsMjY2NTQsMTUzMDAsMjczMjYsMTQ0MzUsMTQ1MzY1LDE0ODYxNSwyNzE4NywyNzIxOCwyNzMzNywyNzM5NywxMzc0OTAsMjU4NzMsMjY3NzYsMjcyMTIsMTUzMTksMjcyNTgsMjc0NzksMTQ3MzkyLDE0NjU4NiwzNzc5MiwzNzYxOCwxNjY4OTAsMTY2NjAzLDM3NTEzLDE2Mzg3MCwxNjYzNjQsMzc5OTEsMjgwNjksMjg0MjcsMTQ5OTk2LDI4MDA3LDE0NzMyNywxNTc1OSwyODE2NCwxNDc1MTYsMjMxMDEsMjgxNzAsMjI1OTksMjc5NDAsMzA3ODYsMjg5ODcsMTQ4MjUwLDE0ODA4NiwyODkxMywyOTI2NCwyOTMxOSwyOTMzMiwxNDkzOTEsMTQ5Mjg1LDIwODU3LDE1MDE4MCwxMzI1ODcsMjk4MTgsMTQ3MTkyLDE0NDk5MSwxNTAwOTAsMTQ5NzgzLDE1NTYxNywxNjEzNCwxNjA0OSwxNTAyMzksMTY2OTQ3LDE0NzI1MywyNDc0MywxNjExNSwyOTkwMCwyOTc1NiwzNzc2NywyOTc1MSwxNzU2NywxNTkyMTAsMTc3NDUsMzAwODMsMTYyMjcsMTUwNzQ1LDE1MDc5MCwxNjIxNiwzMDAzNywzMDMyMywxNzM1MTAsMTUxMjksMjk4MDAsMTY2NjA0LDE0OTkzMSwxNDk5MDIsMTUwOTksMTU4MjEsMTUwMDk0LDE2MTI3LDE0OTk1NywxNDk3NDcsMzczNzAsMjIzMjIsMzc2OTgsMTY2NjI3LDEzNzMxNiwyMDcwMywxNTIwOTcsMTUyMDM5LDMwNTg0LDE0MzkyMiwzMDQ3OCwzMDQ3OSwzMDU4NywxNDkxNDMsMTQ1MjgxLDE0OTQyLDE0OTc0NCwyOTc1MiwyOTg1MSwxNjA2MywxNTAyMDIsMTUwMjE1LDE2NTg0LDE1MDE2NiwxNTYwNzgsMzc2MzksMTUyOTYxLDMwNzUwLDMwODYxLDMwODU2LDMwOTMwLDI5NjQ4LDMxMDY1LDE2MTYwMSwxNTMzMTUsMTY2NTQsMzExMzEsMzM5NDIsMzExNDEsMjcxODEsMTQ3MTk0LDMxMjkwLDMxMjIwLDE2NzUwLDEzNjkzNCwxNjY5MCwzNzQyOSwzMTIxNywxMzQ0NzYsMTQ5OTAwLDEzMTczNywxNDY4NzQsMTM3MDcwLDEzNzE5LDIxODY3LDEzNjgwLDEzOTk0LDEzMTU0MCwxMzQxNTcsMzE0NTgsMjMxMjksMTQxMDQ1LDE1NDI4NywxNTQyNjgsMjMwNTMsMTMxNjc1LDMwOTYwLDIzMDgyLDE1NDU2NiwzMTQ4NiwxNjg4OSwzMTgzNywzMTg1MywxNjkxMywxNTQ1NDcsMTU1MzI0LDE1NTMwMiwzMTk0OSwxNTAwMDksMTM3MTM2LDMxODg2LDMxODY4LDMxOTE4LDI3MzE0LDMyMjIwLDMyMjYzLDMyMjExLDMyNTkwLDE1NjI1NywxNTU5OTYsMTYyNjMyLDMyMTUxLDE1NTI2NiwxNzAwMiwxNTg1ODEsMTMzMzk4LDI2NTgyLDEzMTE1MCwxNDQ4NDcsMjI0NjgsMTU2NjkwLDE1NjY2NCwxNDk4NTgsMzI3MzMsMzE1MjcsMTMzMTY0LDE1NDM0NSwxNTQ5NDcsMzE1MDAsMTU1MTUwLDM5Mzk4LDM0MzczLDM5NTIzLDI3MTY0LDE0NDQ0NywxNDgxOCwxNTAwMDcsMTU3MTAxLDM5NDU1LDE1NzA4OCwzMzkyMCwxNjAwMzksMTU4OTI5LDE3NjQyLDMzMDc5LDE3NDEwLDMyOTY2LDMzMDMzLDMzMDkwLDE1NzYyMCwzOTEwNywxNTgyNzQsMzMzNzgsMzMzODEsMTU4Mjg5LDMzODc1LDE1OTE0MywzNDMyMCwxNjAyODMsMjMxNzQsMTY3NjcsMTM3MjgwLDIzMzM5LDEzNzM3NywyMzI2OCwxMzc0MzIsMzQ0NjQsMTk1MDA0LDE0NjgzMSwzNDg2MSwxNjA4MDIsMjMwNDIsMzQ5MjYsMjAyOTMsMzQ5NTEsMzUwMDcsMzUwNDYsMzUxNzMsMzUxNDksMTUzMjE5LDM1MTU2LDE2MTY2OSwxNjE2NjgsMTY2OTAxLDE2Njg3MywxNjY4MTIsMTY2MzkzLDE2MDQ1LDMzOTU1LDE4MTY1LDE4MTI3LDE0MzIyLDM1Mzg5LDM1MzU2LDE2OTAzMiwyNDM5NywzNzQxOSwxNDgxMDAsMjYwNjgsMjg5NjksMjg4NjgsMTM3Mjg1LDQwMzAxLDM1OTk5LDM2MDczLDE2MzI5MiwyMjkzOCwzMDY1OSwyMzAyNCwxNzI2MiwxNDAzNiwzNjM5NCwzNjUxOSwxNTA1MzcsMzY2NTYsMzY2ODIsMTcxNDAsMjc3MzYsMjg2MDMsMTQwMDY1LDE4NTg3LDI4NTM3LDI4Mjk5LDEzNzE3OCwzOTkxMywxNDAwNSwxNDk4MDcsMzcwNTEsMzcwMTUsMjE4NzMsMTg2OTQsMzczMDcsMzc4OTIsMTY2NDc1LDE2NDgyLDE2NjY1MiwzNzkyNywxNjY5NDEsMTY2OTcxLDM0MDIxLDM1MzcxLDM4Mjk3LDM4MzExLDM4Mjk1LDM4Mjk0LDE2NzIyMCwyOTc2NSwxNjA2NiwxNDk3NTksMTUwMDgyLDE0ODQ1OCwxNjEwMywxNDM5MDksMzg1NDMsMTY3NjU1LDE2NzUyNiwxNjc1MjUsMTYwNzYsMTQ5OTk3LDE1MDEzNiwxNDc0MzgsMjk3MTQsMjk4MDMsMTYxMjQsMzg3MjEsMTY4MTEyLDI2Njk1LDE4OTczLDE2ODA4MywxNTM1NjcsMzg3NDksMzc3MzYsMTY2MjgxLDE2Njk1MCwxNjY3MDMsMTU2NjA2LDM3NTYyLDIzMzEzLDM1Njg5LDE4NzQ4LDI5Njg5LDE0Nzk5NSwzODgxMSwzODc2OSwzOTIyNCwxMzQ5NTAsMjQwMDEsMTY2ODUzLDE1MDE5NCwzODk0MywxNjkxNzgsMzc2MjIsMTY5NDMxLDM3MzQ5LDE3NjAwLDE2NjczNiwxNTAxMTksMTY2NzU2LDM5MTMyLDE2NjQ2OSwxNjEyOCwzNzQxOCwxODcyNSwzMzgxMiwzOTIyNywzOTI0NSwxNjI1NjYsMTU4NjksMzkzMjMsMTkzMTEsMzkzMzgsMzk1MTYsMTY2NzU3LDE1MzgwMCwyNzI3OSwzOTQ1NywyMzI5NCwzOTQ3MSwxNzAyMjUsMTkzNDQsMTcwMzEyLDM5MzU2LDE5Mzg5LDE5MzUxLDM3NzU3LDIyNjQyLDEzNTkzOCwyMjU2MiwxNDk5NDQsMTM2NDI0LDMwNzg4LDE0MTA4NywxNDY4NzIsMjY4MjEsMTU3NDEsMzc5NzYsMTQ2MzEsMjQ5MTIsMTQxMTg1LDE0MTY3NSwyNDgzOSw0MDAxNSw0MDAxOSw0MDA1OSwzOTk4OSwzOTk1MiwzOTgwNywzOTg4NywxNzE1NjUsMzk4MzksMTcyNTMzLDE3MjI4Niw0MDIyNSwxOTYzMCwxNDc3MTYsNDA0NzIsMTk2MzIsNDAyMDQsMTcyNDY4LDE3MjI2OSwxNzIyNzUsMTcwMjg3LDQwMzU3LDMzOTgxLDE1OTI1MCwxNTk3MTEsMTU4NTk0LDM0MzAwLDE3NzE1LDE1OTE0MCwxNTkzNjQsMTU5MjE2LDMzODI0LDM0Mjg2LDE1OTIzMiwxNDUzNjcsMTU1NzQ4LDMxMjAyLDE0NDc5NiwxNDQ5NjAsMTg3MzMsMTQ5OTgyLDE1NzE0LDM3ODUxLDM3NTY2LDM3NzA0LDEzMTc3NSwzMDkwNSwzNzQ5NSwzNzk2NSwyMDQ1MiwxMzM3NiwzNjk2NCwxNTI5MjUsMzA3ODEsMzA4MDQsMzA5MDIsMzA3OTUsMTM3MDQ3LDE0MzgxNywxNDk4MjUsMTM5NzgsMjAzMzgsMjg2MzQsMjg2MzMsMjg3MDIsMjg3MDIsMjE1MjQsMTQ3ODkzLDIyNDU5LDIyNzcxLDIyNDEwLDQwMjE0LDIyNDg3LDI4OTgwLDEzNDg3LDE0Nzg4NCwyOTE2MywxNTg3ODQsMTUxNDQ3LDIzMzM2LDEzNzE0MSwxNjY0NzMsMjQ4NDQsMjMyNDYsMjMwNTEsMTcwODQsMTQ4NjE2LDE0MTI0LDE5MzIzLDE2NjM5NiwzNzgxOSwzNzgxNiwxMzc0MzAsMTM0OTQxLDMzOTA2LDE1ODkxMiwxMzYyMTEsMTQ4MjE4LDE0MjM3NCwxNDg0MTcsMjI5MzIsMTQ2ODcxLDE1NzUwNSwzMjE2OCwxNTU5OTUsMTU1ODEyLDE0OTk0NSwxNDk4OTksMTY2Mzk0LDM3NjA1LDI5NjY2LDE2MTA1LDI5ODc2LDE2Njc1NSwxMzczNzUsMTYwOTcsMTUwMTk1LDI3MzUyLDI5NjgzLDI5NjkxLDE2MDg2LDE1MDA3OCwxNTAxNjQsMTM3MTc3LDE1MDExOCwxMzIwMDcsMTM2MjI4LDE0OTk4OSwyOTc2OCwxNDk3ODIsMjg4MzcsMTQ5ODc4LDM3NTA4LDI5NjcwLDM3NzI3LDEzMjM1MCwzNzY4MSwxNjY2MDYsMTY2NDIyLDM3NzY2LDE2Njg4NywxNTMwNDUsMTg3NDEsMTY2NTMwLDI5MDM1LDE0OTgyNywxMzQzOTksMjIxODAsMTMyNjM0LDEzNDEyMywxMzQzMjgsMjE3NjIsMzExNzIsMTM3MjEwLDMyMjU0LDEzNjg5OCwxNTAwOTYsMTM3Mjk4LDE3NzEwLDM3ODg5LDE0MDkwLDE2NjU5MiwxNDk5MzMsMjI5NjAsMTM3NDA3LDEzNzM0NywxNjA5MDAsMjMyMDEsMTQwNTAsMTQ2Nzc5LDE0MDAwLDM3NDcxLDIzMTYxLDE2NjUyOSwxMzczMTQsMzc3NDgsMTU1NjUsMTMzODEyLDE5MDk0LDE0NzMwLDIwNzI0LDE1NzIxLDE1NjkyLDEzNjA5MiwyOTA0NSwxNzE0NywxNjQzNzYsMjgxNzUsMTY4MTY0LDE3NjQzLDI3OTkxLDE2MzQwNywyODc3NSwyNzgyMywxNTU3NCwxNDc0MzcsMTQ2OTg5LDI4MTYyLDI4NDI4LDE1NzI3LDEzMjA4NSwzMDAzMywxNDAxMiwxMzUxMiwxODA0OCwxNjA5MCwxODU0NSwyMjk4MCwzNzQ4NiwxODc1MCwzNjY3MywxNjY5NDAsMTU4NjU2LDIyNTQ2LDIyNDcyLDE0MDM4LDEzNjI3NCwyODkyNiwxNDgzMjIsMTUwMTI5LDE0MzMzMSwxMzU4NTYsMTQwMjIxLDI2ODA5LDI2OTgzLDEzNjA4OCwxNDQ2MTMsMTYyODA0LDE0NTExOSwxNjY1MzEsMTQ1MzY2LDE0NDM3OCwxNTA2ODcsMjcxNjIsMTQ1MDY5LDE1ODkwMywzMzg1NCwxNzYzMSwxNzYxNCwxNTkwMTQsMTU5MDU3LDE1ODg1MCwxNTk3MTAsMjg0MzksMTYwMDA5LDMzNTk3LDEzNzAxOCwzMzc3MywxNTg4NDgsMTU5ODI3LDEzNzE3OSwyMjkyMSwyMzE3MCwxMzcxMzksMjMxMzcsMjMxNTMsMTM3NDc3LDE0Nzk2NCwxNDEyNSwyMzAyMywxMzcwMjAsMTQwMjMsMjkwNzAsMzc3NzYsMjYyNjYsMTQ4MTMzLDIzMTUwLDIzMDgzLDE0ODExNSwyNzE3OSwxNDcxOTMsMTYxNTkwLDE0ODU3MSwxNDgxNzAsMjg5NTcsMTQ4MDU3LDE2NjM2OSwyMDQwMCwxNTkwMTYsMjM3NDYsMTQ4Njg2LDE2MzQwNSwxNDg0MTMsMjcxNDgsMTQ4MDU0LDEzNTk0MCwyODgzOCwyODk3OSwxNDg0NTcsMTU3ODEsMjc4NzEsMTk0NTk3LDE1MDA5NSwzMjM1NywyMzAxOSwyMzg1NSwxNTg1OSwyNDQxMiwxNTAxMDksMTM3MTgzLDMyMTY0LDMzODMwLDIxNjM3LDE0NjE3MCwxNDQxMjgsMTMxNjA0LDIyMzk4LDEzMzMzMywxMzI2MzMsMTYzNTcsMTM5MTY2LDE3MjcyNiwyODY3NSwxNjgyODMsMjM5MjAsMjk1ODMsMzE5NTUsMTY2NDg5LDE2ODk5MiwyMDQyNCwzMjc0MywyOTM4OSwyOTQ1NiwxNjI1NDgsMjk0OTYsMjk0OTcsMTUzMzM0LDI5NTA1LDI5NTEyLDE2MDQxLDE2MjU4NCwzNjk3MiwyOTE3MywxNDk3NDYsMjk2NjUsMzMyNzAsMTYwNzQsMzA0NzYsMTYwODEsMjc4MTAsMjIyNjksMjk3MjEsMjk3MjYsMjk3MjcsMTYwOTgsMTYxMTIsMTYxMTYsMTYxMjIsMjk5MDcsMTYxNDIsMTYyMTEsMzAwMTgsMzAwNjEsMzAwNjYsMzAwOTMsMTYyNTIsMzAxNTIsMzAxNzIsMTYzMjAsMzAyODUsMTYzNDMsMzAzMjQsMTYzNDgsMzAzMzAsMTUxMzg4LDI5MDY0LDIyMDUxLDM1MjAwLDIyNjMzLDE2NDEzLDMwNTMxLDE2NDQxLDI2NDY1LDE2NDUzLDEzNzg3LDMwNjE2LDE2NDkwLDE2NDk1LDIzNjQ2LDMwNjU0LDMwNjY3LDIyNzcwLDMwNzQ0LDI4ODU3LDMwNzQ4LDE2NTUyLDMwNzc3LDMwNzkxLDMwODAxLDMwODIyLDMzODY0LDE1Mjg4NSwzMTAyNywyNjYyNywzMTAyNiwxNjY0MywxNjY0OSwzMTEyMSwzMTEyOSwzNjc5NSwzMTIzOCwzNjc5NiwxNjc0MywzMTM3NywxNjgxOCwzMTQyMCwzMzQwMSwxNjgzNiwzMTQzOSwzMTQ1MSwxNjg0NywyMDAwMSwzMTU4NiwzMTU5NiwzMTYxMSwzMTc2MiwzMTc3MSwxNjk5MiwxNzAxOCwzMTg2NywzMTkwMCwxNzAzNiwzMTkyOCwxNzA0NCwzMTk4MSwzNjc1NSwyODg2NCwxMzQzNTEsMzIyMDcsMzIyMTIsMzIyMDgsMzIyNTMsMzI2ODYsMzI2OTIsMjkzNDMsMTczMDMsMzI4MDAsMzI4MDUsMzE1NDUsMzI4MTQsMzI4MTcsMzI4NTIsMTU4MjAsMjI0NTIsMjg4MzIsMzI5NTEsMzMwMDEsMTczODksMzMwMzYsMjk0ODIsMzMwMzgsMzMwNDIsMzAwNDgsMzMwNDQsMTc0MDksMTUxNjEsMzMxMTAsMzMxMTMsMzMxMTQsMTc0MjcsMjI1ODYsMzMxNDgsMzMxNTYsMTc0NDUsMzMxNzEsMTc0NTMsMzMxODksMjI1MTEsMzMyMTcsMzMyNTIsMzMzNjQsMTc1NTEsMzM0NDYsMzMzOTgsMzM0ODIsMzM0OTYsMzM1MzUsMTc1ODQsMzM2MjMsMzg1MDUsMjcwMTgsMzM3OTcsMjg5MTcsMzM4OTIsMjQ4MDMsMzM5MjgsMTc2NjgsMzM5ODIsMzQwMTcsMzQwNDAsMzQwNjQsMzQxMDQsMzQxMzAsMTc3MjMsMzQxNTksMzQxNjAsMzQyNzIsMTc3ODMsMzQ0MTgsMzQ0NTAsMzQ0ODIsMzQ1NDMsMzg0NjksMzQ2OTksMTc5MjYsMTc5NDMsMzQ5OTAsMzUwNzEsMzUxMDgsMzUxNDMsMzUyMTcsMTYyMTUxLDM1MzY5LDM1Mzg0LDM1NDc2LDM1NTA4LDM1OTIxLDM2MDUyLDM2MDgyLDM2MTI0LDE4MzI4LDIyNjIzLDM2MjkxLDE4NDEzLDIwMjA2LDM2NDEwLDIxOTc2LDIyMzU2LDM2NDY1LDIyMDA1LDM2NTI4LDE4NDg3LDM2NTU4LDM2NTc4LDM2NTgwLDM2NTg5LDM2NTk0LDM2NzkxLDM2ODAxLDM2ODEwLDM2ODEyLDM2OTE1LDM5MzY0LDE4NjA1LDM5MTM2LDM3Mzk1LDE4NzE4LDM3NDE2LDM3NDY0LDM3NDgzLDM3NTUzLDM3NTUwLDM3NTY3LDM3NjAzLDM3NjExLDM3NjE5LDM3NjIwLDM3NjI5LDM3Njk5LDM3NzY0LDM3ODA1LDE4NzU3LDE4NzY5LDQwNjM5LDM3OTExLDIxMjQ5LDM3OTE3LDM3OTMzLDM3OTUwLDE4Nzk0LDM3OTcyLDM4MDA5LDM4MTg5LDM4MzA2LDE4ODU1LDM4Mzg4LDM4NDUxLDE4OTE3LDI2NTI4LDE4OTgwLDM4NzIwLDE4OTk3LDM4ODM0LDM4ODUwLDIyMTAwLDE5MTcyLDI0ODA4LDM5MDk3LDE5MjI1LDM5MTUzLDIyNTk2LDM5MTgyLDM5MTkzLDIwOTE2LDM5MTk2LDM5MjIzLDM5MjM0LDM5MjYxLDM5MjY2LDE5MzEyLDM5MzY1LDE5MzU3LDM5NDg0LDM5Njk1LDMxMzYzLDM5Nzg1LDM5ODA5LDM5OTAxLDM5OTIxLDM5OTI0LDE5NTY1LDM5OTY4LDE0MTkxLDEzODE3OCw0MDI2NSwzOTk5NCw0MDcwMiwyMjA5Niw0MDMzOSw0MDM4MSw0MDM4NCw0MDQ0NCwzODEzNCwzNjc5MCw0MDU3MSw0MDYyMCw0MDYyNSw0MDYzNyw0MDY0NiwzODEwOCw0MDY3NCw0MDY4OSw0MDY5NiwzMTQzMiw0MDc3MiwxMzEyMjAsMTMxNzY3LDEzMjAwMCwyNjkwNiwzODA4MywyMjk1NiwxMzIzMTEsMjI1OTIsMzgwODEsMTQyNjUsMTMyNTY1LDEzMjYyOSwxMzI3MjYsMTM2ODkwLDIyMzU5LDI5MDQzLDEzMzgyNiwxMzM4MzcsMTM0MDc5LDIxNjEwLDE5NDYxOSwxMzQwOTEsMjE2NjIsMTM0MTM5LDEzNDIwMywxMzQyMjcsMTM0MjQ1LDEzNDI2OCwyNDgwNywxMzQyODUsMjIxMzgsMTM0MzI1LDEzNDM2NSwxMzQzODEsMTM0NTExLDEzNDU3OCwxMzQ2MDAsMjY5NjUsMzk5ODMsMzQ3MjUsMTM0NjYwLDEzNDY3MCwxMzQ4NzEsMTM1MDU2LDEzNDk1NywxMzQ3NzEsMjM1ODQsMTM1MTAwLDI0MDc1LDEzNTI2MCwxMzUyNDcsMTM1Mjg2LDI2Mzk4LDEzNTI5MSwxMzUzMDQsMTM1MzE4LDEzODk1LDEzNTM1OSwxMzUzNzksMTM1NDcxLDEzNTQ4MywyMTM0OCwzMzk2NSwxMzU5MDcsMTM2MDUzLDEzNTk5MCwzNTcxMywxMzY1NjcsMTM2NzI5LDEzNzE1NSwxMzcxNTksMjAwODgsMjg4NTksMTM3MjYxLDEzNzU3OCwxMzc3NzMsMTM3Nzk3LDEzODI4MiwxMzgzNTIsMTM4NDEyLDEzODk1MiwyNTI4MywxMzg5NjUsMTM5MDI5LDI5MDgwLDI2NzA5LDEzOTMzMywyNzExMywxNDAyNCwxMzk5MDAsMTQwMjQ3LDE0MDI4MiwxNDEwOTgsMTQxNDI1LDE0MTY0NywzMzUzMywxNDE2NzEsMTQxNzE1LDE0MjAzNywzNTIzNywxNDIwNTYsMzY3NjgsMTQyMDk0LDM4ODQwLDE0MjE0MywzODk4MywzOTYxMywxNDI0MTIsbnVsbCwxNDI0NzIsMTQyNTE5LDE1NDYwMCwxNDI2MDAsMTQyNjEwLDE0Mjc3NSwxNDI3NDEsMTQyOTE0LDE0MzIyMCwxNDMzMDgsMTQzNDExLDE0MzQ2MiwxNDQxNTksMTQ0MzUwLDI0NDk3LDI2MTg0LDI2MzAzLDE2MjQyNSwxNDQ3NDMsMTQ0ODgzLDI5MTg1LDE0OTk0NiwzMDY3OSwxNDQ5MjIsMTQ1MTc0LDMyMzkxLDEzMTkxMCwyMjcwOSwyNjM4MiwyNjkwNCwxNDYwODcsMTYxMzY3LDE1NTYxOCwxNDY5NjEsMTQ3MTI5LDE2MTI3OCwxMzk0MTgsMTg2NDAsMTkxMjgsMTQ3NzM3LDE2NjU1NCwxNDgyMDYsMTQ4MjM3LDE0NzUxNSwxNDgyNzYsMTQ4Mzc0LDE1MDA4NSwxMzI1NTQsMjA5NDYsMTMyNjI1LDIyOTQzLDEzODkyMCwxNTI5NCwxNDY2ODcsMTQ4NDg0LDE0ODY5NCwyMjQwOCwxNDkxMDgsMTQ3NDcsMTQ5Mjk1LDE2NTM1MiwxNzA0NDEsMTQxNzgsMTM5NzE1LDM1Njc4LDE2NjczNCwzOTM4MiwxNDk1MjIsMTQ5NzU1LDE1MDAzNywyOTE5MywxNTAyMDgsMTM0MjY0LDIyODg1LDE1MTIwNSwxNTE0MzAsMTMyOTg1LDM2NTcwLDE1MTU5NiwyMTEzNSwyMjMzNSwyOTA0MSwxNTIyMTcsMTUyNjAxLDE0NzI3NCwxNTAxODMsMjE5NDgsMTUyNjQ2LDE1MjY4NiwxNTg1NDYsMzczMzIsMTM0MjcsMTUyODk1LDE2MTMzMCwxNTI5MjYsMTgyMDAsMTUyOTMwLDE1MjkzNCwxNTM1NDMsMTQ5ODIzLDE1MzY5MywyMDU4MiwxMzU2MywxNDQzMzIsMjQ3OTgsMTUzODU5LDE4MzAwLDE2NjIxNiwxNTQyODYsMTU0NTA1LDE1NDYzMCwxMzg2NDAsMjI0MzMsMjkwMDksMjg1OTgsMTU1OTA2LDE2MjgzNCwzNjk1MCwxNTYwODIsMTUxNDUwLDM1NjgyLDE1NjY3NCwxNTY3NDYsMjM4OTksMTU4NzExLDM2NjYyLDE1NjgwNCwxMzc1MDAsMzU1NjIsMTUwMDA2LDE1NjgwOCwxNDc0MzksMTU2OTQ2LDE5MzkyLDE1NzExOSwxNTczNjUsMTQxMDgzLDM3OTg5LDE1MzU2OSwyNDk4MSwyMzA3OSwxOTQ3NjUsMjA0MTEsMjIyMDEsMTQ4NzY5LDE1NzQzNiwyMDA3NCwxNDk4MTIsMzg0ODYsMjgwNDcsMTU4OTA5LDEzODQ4LDM1MTkxLDE1NzU5MywxNTc4MDYsMTU2Njg5LDE1Nzc5MCwyOTE1MSwxNTc4OTUsMzE1NTQsMTY4MTI4LDEzMzY0OSwxNTc5OTAsMzcxMjQsMTU4MDA5LDMxMzAxLDQwNDMyLDE1ODIwMiwzOTQ2MiwxNTgyNTMsMTM5MTksMTU2Nzc3LDEzMTEwNSwzMTEwNywxNTgyNjAsMTU4NTU1LDIzODUyLDE0NDY2NSwzMzc0MywxNTg2MjEsMTgxMjgsMTU4ODg0LDMwMDExLDM0OTE3LDE1OTE1MCwyMjcxMCwxNDEwOCwxNDA2ODUsMTU5ODE5LDE2MDIwNSwxNTQ0NCwxNjAzODQsMTYwMzg5LDM3NTA1LDEzOTY0MiwxNjAzOTUsMzc2ODAsMTYwNDg2LDE0OTk2OCwyNzcwNSwzODA0NywxNjA4NDgsMTM0OTA0LDM0ODU1LDM1MDYxLDE0MTYwNiwxNjQ5NzksMTM3MTM3LDI4MzQ0LDE1MDA1OCwxMzcyNDgsMTQ3NTYsMTQwMDksMjM1NjgsMzEyMDMsMTc3MjcsMjYyOTQsMTcxMTgxLDE3MDE0OCwzNTEzOSwxNjE3NDAsMTYxODgwLDIyMjMwLDE2NjA3LDEzNjcxNCwxNDc1MywxNDUxOTksMTY0MDcyLDEzNjEzMywyOTEwMSwzMzYzOCwxNjIyNjksMTY4MzYwLDIzMTQzLDE5NjM5LDE1OTkxOSwxNjYzMTUsMTYyMzAxLDE2MjMxNCwxNjI1NzEsMTYzMTc0LDE0NzgzNCwzMTU1NSwzMTEwMiwxNjM4NDksMjg1OTcsMTcyNzY3LDI3MTM5LDE2NDYzMiwyMTQxMCwxNTkyMzksMzc4MjMsMjY2NzgsMzg3NDksMTY0MjA3LDE2Mzg3NSwxNTgxMzMsMTM2MTczLDE0MzkxOSwxNjM5MTIsMjM5NDEsMTY2OTYwLDE2Mzk3MSwyMjI5MywzODk0NywxNjYyMTcsMjM5NzksMTQ5ODk2LDI2MDQ2LDI3MDkzLDIxNDU4LDE1MDE4MSwxNDczMjksMTUzNzcsMjY0MjIsMTYzOTg0LDE2NDA4NCwxNjQxNDIsMTM5MTY5LDE2NDE3NSwxNjQyMzMsMTY0MjcxLDE2NDM3OCwxNjQ2MTQsMTY0NjU1LDE2NDc0NiwxMzc3MCwxNjQ5NjgsMTY1NTQ2LDE4NjgyLDI1NTc0LDE2NjIzMCwzMDcyOCwzNzQ2MSwxNjYzMjgsMTczOTQsMTY2Mzc1LDE3Mzc1LDE2NjM3NiwxNjY3MjYsMTY2ODY4LDIzMDMyLDE2NjkyMSwzNjYxOSwxNjc4NzcsMTY4MTcyLDMxNTY5LDE2ODIwOCwxNjgyNTIsMTU4NjMsMTY4Mjg2LDE1MDIxOCwzNjgxNiwyOTMyNywyMjE1NSwxNjkxOTEsMTY5NDQ5LDE2OTM5MiwxNjk0MDAsMTY5Nzc4LDE3MDE5MywxNzAzMTMsMTcwMzQ2LDE3MDQzNSwxNzA1MzYsMTcwNzY2LDE3MTM1NCwxNzE0MTksMzI0MTUsMTcxNzY4LDE3MTgxMSwxOTYyMCwzODIxNSwxNzI2OTEsMjkwOTAsMTcyNzk5LDE5ODU3LDM2ODgyLDE3MzUxNSwxOTg2OCwxMzQzMDAsMzY3OTgsMjE5NTMsMzY3OTQsMTQwNDY0LDM2NzkzLDE1MDE2MywxNzY3MywzMjM4MywyODUwMiwyNzMxMywyMDIwMiwxMzU0MCwxNjY3MDAsMTYxOTQ5LDE0MTM4LDM2NDgwLDEzNzIwNSwxNjM4NzYsMTY2NzY0LDE2NjgwOSwxNjIzNjYsMTU3MzU5LDE1ODUxLDE2MTM2NSwxNDY2MTUsMTUzMTQxLDE1Mzk0MiwyMDEyMiwxNTUyNjUsMTU2MjQ4LDIyMjA3LDEzNDc2NSwzNjM2NiwyMzQwNSwxNDcwODAsMTUwNjg2LDI1NTY2LDI1Mjk2LDEzNzIwNiwxMzczMzksMjU5MDQsMjIwNjEsMTU0Njk4LDIxNTMwLDE1MjMzNywxNTgxNCwxNzE0MTYsMTk1ODEsMjIwNTAsMjIwNDYsMzI1ODUsMTU1MzUyLDIyOTAxLDE0Njc1MiwzNDY3MiwxOTk5NiwxMzUxNDYsMTM0NDczLDE0NTA4MiwzMzA0Nyw0MDI4NiwzNjEyMCwzMDI2Nyw0MDAwNSwzMDI4NiwzMDY0OSwzNzcwMSwyMTU1NCwzMzA5NiwzMzUyNywyMjA1MywzMzA3NCwzMzgxNiwzMjk1NywyMTk5NCwzMTA3NCwyMjA4MywyMTUyNiwxMzQ4MTMsMTM3NzQsMjIwMjEsMjIwMDEsMjYzNTMsMTY0NTc4LDEzODY5LDMwMDA0LDIyMDAwLDIxOTQ2LDIxNjU1LDIxODc0LDEzNDIwOSwxMzQyOTQsMjQyNzIsMTUxODgwLDEzNDc3NCwxNDI0MzQsMTM0ODE4LDQwNjE5LDMyMDkwLDIxOTgyLDEzNTI4NSwyNTI0NSwzODc2NSwyMTY1MiwzNjA0NSwyOTE3NCwzNzIzOCwyNTU5NiwyNTUyOSwyNTU5OCwyMTg2NSwxNDIxNDcsNDAwNTAsMTQzMDI3LDIwODkwLDEzNTM1LDEzNDU2NywyMDkwMywyMTU4MSwyMTc5MCwyMTc3OSwzMDMxMCwzNjM5NywxNTc4MzQsMzAxMjksMzI5NTAsMzQ4MjAsMzQ2OTQsMzUwMTUsMzMyMDYsMzM4MjAsMTM1MzYxLDE3NjQ0LDI5NDQ0LDE0OTI1NCwyMzQ0MCwzMzU0NywxNTc4NDMsMjIxMzksMTQxMDQ0LDE2MzExOSwxNDc4NzUsMTYzMTg3LDE1OTQ0MCwxNjA0MzgsMzcyMzIsMTM1NjQxLDM3Mzg0LDE0NjY4NCwxNzM3MzcsMTM0ODI4LDEzNDkwNSwyOTI4NiwxMzg0MDIsMTgyNTQsMTUxNDkwLDE2MzgzMywxMzUxNDcsMTY2MzQsNDAwMjksMjU4ODcsMTQyNzUyLDE4Njc1LDE0OTQ3MiwxNzEzODgsMTM1MTQ4LDEzNDY2NiwyNDY3NCwxNjExODcsMTM1MTQ5LG51bGwsMTU1NzIwLDEzNTU1OSwyOTA5MSwzMjM5OCw0MDI3MiwxOTk5NCwxOTk3MiwxMzY4NywyMzMwOSwyNzgyNiwyMTM1MSwxMzk5NiwxNDgxMiwyMTM3MywxMzk4OSwxNDkwMTYsMjI2ODIsMTUwMzgyLDMzMzI1LDIxNTc5LDIyNDQyLDE1NDI2MSwxMzM0OTcsbnVsbCwxNDkzMCwxNDAzODksMjk1NTYsMTcxNjkyLDE5NzIxLDM5OTE3LDE0NjY4NiwxNzE4MjQsMTk1NDcsMTUxNDY1LDE2OTM3NCwxNzE5OTgsMzM4ODQsMTQ2ODcwLDE2MDQzNCwxNTc2MTksMTQ1MTg0LDI1MzkwLDMyMDM3LDE0NzE5MSwxNDY5ODgsMTQ4OTAsMzY4NzIsMjExOTYsMTU5ODgsMTM5NDYsMTc4OTcsMTMyMjM4LDMwMjcyLDIzMjgwLDEzNDgzOCwzMDg0MiwxNjM2MzAsMjI2OTUsMTY1NzUsMjIxNDAsMzk4MTksMjM5MjQsMzAyOTIsMTczMTA4LDQwNTgxLDE5NjgxLDMwMjAxLDE0MzMxLDI0ODU3LDE0MzU3OCwxNDg0NjYsbnVsbCwyMjEwOSwxMzU4NDksMjI0MzksMTQ5ODU5LDE3MTUyNiwyMTA0NCwxNTk5MTgsMTM3NDEsMjc3MjIsNDAzMTYsMzE4MzAsMzk3MzcsMjI0OTQsMTM3MDY4LDIzNjM1LDI1ODExLDE2OTE2OCwxNTY0NjksMTYwMTAwLDM0NDc3LDEzNDQ0MCwxNTkwMTAsMTUwMjQyLDEzNDUxMyxudWxsLDIwOTkwLDEzOTAyMywyMzk1MCwzODY1OSwxMzg3MDUsNDA1NzcsMzY5NDAsMzE1MTksMzk2ODIsMjM3NjEsMzE2NTEsMjUxOTIsMjUzOTcsMzk2NzksMzE2OTUsMzk3MjIsMzE4NzAsMzk3MjYsMzE4MTAsMzE4NzgsMzk5NTcsMzE3NDAsMzk2ODksNDA3MjcsMzk5NjMsMTQ5ODIyLDQwNzk0LDIxODc1LDIzNDkxLDIwNDc3LDQwNjAwLDIwNDY2LDIxMDg4LDE1ODc4LDIxMjAxLDIyMzc1LDIwNTY2LDIyOTY3LDI0MDgyLDM4ODU2LDQwMzYzLDM2NzAwLDIxNjA5LDM4ODM2LDM5MjMyLDM4ODQyLDIxMjkyLDI0ODgwLDI2OTI0LDIxNDY2LDM5OTQ2LDQwMTk0LDE5NTE1LDM4NDY1LDI3MDA4LDIwNjQ2LDMwMDIyLDEzNzA2OSwzOTM4NiwyMTEwNyxudWxsLDM3MjA5LDM4NTI5LDM3MjEyLG51bGwsMzcyMDEsMTY3NTc1LDI1NDcxLDE1OTAxMSwyNzMzOCwyMjAzMywzNzI2MiwzMDA3NCwyNTIyMSwxMzIwOTIsMjk1MTksMzE4NTYsMTU0NjU3LDE0NjY4NSxudWxsLDE0OTc4NSwzMDQyMiwzOTgzNywyMDAxMCwxMzQzNTYsMzM3MjYsMzQ4ODIsbnVsbCwyMzYyNiwyNzA3MiwyMDcxNywyMjM5NCwyMTAyMywyNDA1MywyMDE3NCwyNzY5NywxMzE1NzAsMjAyODEsMjE2NjAsMjE3MjIsMjExNDYsMzYyMjYsMTM4MjIsMjQzMzIsMTM4MTEsbnVsbCwyNzQ3NCwzNzI0NCw0MDg2OSwzOTgzMSwzODk1OCwzOTA5MiwzOTYxMCw0MDYxNiw0MDU4MCwyOTA1MCwzMTUwOCxudWxsLDI3NjQyLDM0ODQwLDMyNjMyLG51bGwsMjIwNDgsMTczNjQyLDM2NDcxLDQwNzg3LG51bGwsMzYzMDgsMzY0MzEsNDA0NzYsMzYzNTMsMjUyMTgsMTY0NzMzLDM2MzkyLDM2NDY5LDMxNDQzLDE1MDEzNSwzMTI5NCwzMDkzNiwyNzg4MiwzNTQzMSwzMDIxNSwxNjY0OTAsNDA3NDIsMjc4NTQsMzQ3NzQsMzAxNDcsMTcyNzIyLDMwODAzLDE5NDYyNCwzNjEwOCwyOTQxMCwyOTU1MywzNTYyOSwyOTQ0MiwyOTkzNywzNjA3NSwxNTAyMDMsMzQzNTEsMjQ1MDYsMzQ5NzYsMTc1OTEsbnVsbCwxMzcyNzUsMTU5MjM3LG51bGwsMzU0NTQsMTQwNTcxLG51bGwsMjQ4MjksMzAzMTEsMzk2MzksNDAyNjAsMzc3NDIsMzk4MjMsMzQ4MDUsbnVsbCwzNDgzMSwzNjA4NywyOTQ4NCwzODY4OSwzOTg1NiwxMzc4MiwyOTM2MiwxOTQ2MywzMTgyNSwzOTI0MiwxNTU5OTMsMjQ5MjEsMTk0NjAsNDA1OTgsMjQ5NTcsbnVsbCwyMjM2NywyNDk0MywyNTI1NCwyNTE0NSwyNTI5NCwxNDk0MCwyNTA1OCwyMTQxOCwxNDQzNzMsMjU0NDQsMjY2MjYsMTM3NzgsMjM4OTUsMTY2ODUwLDM2ODI2LDE2NzQ4MSxudWxsLDIwNjk3LDEzODU2NiwzMDk4MiwyMTI5OCwzODQ1NiwxMzQ5NzEsMTY0ODUsbnVsbCwzMDcxOCxudWxsLDMxOTM4LDE1NTQxOCwzMTk2MiwzMTI3NywzMjg3MCwzMjg2NywzMjA3NywyOTk1NywyOTkzOCwzNTIyMCwzMzMwNiwyNjM4MCwzMjg2NiwxNjA5MDIsMzI4NTksMjk5MzYsMzMwMjcsMzA1MDAsMzUyMDksMTU3NjQ0LDMwMDM1LDE1OTQ0MSwzNDcyOSwzNDc2NiwzMzIyNCwzNDcwMCwzNTQwMSwzNjAxMywzNTY1MSwzMDUwNywyOTk0NCwzNDAxMCwxMzg3NywyNzA1OCwzNjI2MixudWxsLDM1MjQxLDI5ODAwLDI4MDg5LDM0NzUzLDE0NzQ3MywyOTkyNywxNTgzNSwyOTA0NiwyNDc0MCwyNDk4OCwxNTU2OSwyOTAyNiwyNDY5NSxudWxsLDMyNjI1LDE2NjcwMSwyOTI2NCwyNDgwOSwxOTMyNiwyMTAyNCwxNTM4NCwxNDY2MzEsMTU1MzUxLDE2MTM2NiwxNTI4ODEsMTM3NTQwLDEzNTkzNCwxNzAyNDMsMTU5MTk2LDE1OTkxNywyMzc0NSwxNTYwNzcsMTY2NDE1LDE0NTAxNSwxMzEzMTAsMTU3NzY2LDE1MTMxMCwxNzc2MiwyMzMyNywxNTY0OTIsNDA3ODQsNDA2MTQsMTU2MjY3LDEyMjg4LDY1MjkyLDEyMjg5LDEyMjkwLDY1Mjk0LDgyMzEsNjUzMDcsNjUzMDYsNjUzMTEsNjUyODEsNjUwNzIsODIzMCw4MjI5LDY1MTA0LDY1MTA1LDY1MTA2LDE4Myw2NTEwOCw2NTEwOSw2NTExMCw2NTExMSw2NTM3Miw4MjExLDY1MDczLDgyMTIsNjUwNzUsOTU4OCw2NTA3Niw2NTEwMyw2NTI4OCw2NTI4OSw2NTA3Nyw2NTA3OCw2NTM3MSw2NTM3Myw2NTA3OSw2NTA4MCwxMjMwOCwxMjMwOSw2NTA4MSw2NTA4MiwxMjMwNCwxMjMwNSw2NTA4Myw2NTA4NCwxMjI5OCwxMjI5OSw2NTA4NSw2NTA4NiwxMjI5NiwxMjI5Nyw2NTA4Nyw2NTA4OCwxMjMwMCwxMjMwMSw2NTA4OSw2NTA5MCwxMjMwMiwxMjMwMyw2NTA5MSw2NTA5Miw2NTExMyw2NTExNCw2NTExNSw2NTExNiw2NTExNyw2NTExOCw4MjE2LDgyMTcsODIyMCw4MjIxLDEyMzE3LDEyMzE4LDgyNDUsODI0Miw2NTI4Myw2NTI4Niw2NTI5MCw4MjUxLDE2NywxMjI5MSw5Njc1LDk2NzksOTY1MSw5NjUwLDk2NzgsOTczNCw5NzMzLDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY2MSw5NjYwLDEyOTYzLDg0NTMsMTc1LDY1NTA3LDY1MzQzLDcxNyw2NTA5Nyw2NTA5OCw2NTEwMSw2NTEwMiw2NTA5OSw2NTEwMCw2NTExOSw2NTEyMCw2NTEyMSw2NTI5MSw2NTI5MywyMTUsMjQ3LDE3Nyw4NzMwLDY1MzA4LDY1MzEwLDY1MzA5LDg4MDYsODgwNyw4ODAwLDg3MzQsODc4Niw4ODAxLDY1MTIyLDY1MTIzLDY1MTI0LDY1MTI1LDY1MTI2LDY1Mzc0LDg3NDUsODc0Niw4ODY5LDg3MzYsODczNSw4ODk1LDEzMjY2LDEzMjY1LDg3NDcsODc1MCw4NzU3LDg3NTYsOTc5Miw5Nzk0LDg4NTMsODg1Nyw4NTkzLDg1OTUsODU5Miw4NTk0LDg1OTgsODU5OSw4NjAxLDg2MDAsODc0MSw4NzM5LDY1Mjk1LDY1MzQwLDg3MjUsNjUxMjgsNjUyODQsNjU1MDksMTIzMDYsNjU1MDQsNjU1MDUsNjUyODUsNjUzMTIsODQ1MSw4NDU3LDY1MTI5LDY1MTMwLDY1MTMxLDEzMjY5LDEzMjEyLDEzMjEzLDEzMjE0LDEzMjYyLDEzMjE3LDEzMTk4LDEzMTk5LDEzMjUyLDE3NiwyMDgyNSwyMDgyNywyMDgzMCwyMDgyOSwyMDgzMywyMDgzNSwyMTk5MSwyOTkyOSwzMTk1MCw5NjAxLDk2MDIsOTYwMyw5NjA0LDk2MDUsOTYwNiw5NjA3LDk2MDgsOTYxNSw5NjE0LDk2MTMsOTYxMiw5NjExLDk2MTAsOTYwOSw5NTMyLDk1MjQsOTUxNiw5NTA4LDk1MDAsOTYyMCw5NDcyLDk0NzQsOTYyMSw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1ODEsOTU4Miw5NTg0LDk1ODMsOTU1Miw5NTY2LDk1NzgsOTU2OSw5Njk4LDk2OTksOTcwMSw5NzAwLDk1ODUsOTU4Niw5NTg3LDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsMTIzMjEsMTIzMjIsMTIzMjMsMTIzMjQsMTIzMjUsMTIzMjYsMTIzMjcsMTIzMjgsMTIzMjksMjEzMTMsMjEzMTYsMjEzMTcsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksMTI1NDksMTI1NTAsMTI1NTEsMTI1NTIsMTI1NTMsMTI1NTQsMTI1NTUsMTI1NTYsMTI1NTcsMTI1NTgsMTI1NTksMTI1NjAsMTI1NjEsMTI1NjIsMTI1NjMsMTI1NjQsMTI1NjUsMTI1NjYsMTI1NjcsMTI1NjgsMTI1NjksMTI1NzAsMTI1NzEsMTI1NzIsMTI1NzMsMTI1NzQsMTI1NzUsMTI1NzYsMTI1NzcsMTI1NzgsMTI1NzksMTI1ODAsMTI1ODEsMTI1ODIsMTI1ODMsMTI1ODQsMTI1ODUsNzI5LDcxMyw3MTQsNzExLDcxNSw5MjE2LDkyMTcsOTIxOCw5MjE5LDkyMjAsOTIyMSw5MjIyLDkyMjMsOTIyNCw5MjI1LDkyMjYsOTIyNyw5MjI4LDkyMjksOTIzMCw5MjMxLDkyMzIsOTIzMyw5MjM0LDkyMzUsOTIzNiw5MjM3LDkyMzgsOTIzOSw5MjQwLDkyNDEsOTI0Miw5MjQzLDkyNDQsOTI0NSw5MjQ2LDkyNDcsOTI0OSw4MzY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTk2OCwyMDA1NywxOTk2OSwxOTk3MSwyMDAzNSwyMDA2MSwyMDEwMiwyMDEwOCwyMDE1NCwyMDc5OSwyMDgzNywyMDg0MywyMDk2MCwyMDk5MiwyMDk5MywyMTE0NywyMTI2OSwyMTMxMywyMTM0MCwyMTQ0OCwxOTk3NywxOTk3OSwxOTk3NiwxOTk3OCwyMDAxMSwyMDAyNCwyMDk2MSwyMDAzNywyMDA0MCwyMDA2MywyMDA2MiwyMDExMCwyMDEyOSwyMDgwMCwyMDk5NSwyMTI0MiwyMTMxNSwyMTQ0OSwyMTQ3NSwyMjMwMywyMjc2MywyMjgwNSwyMjgyMywyMjg5OSwyMzM3NiwyMzM3NywyMzM3OSwyMzU0NCwyMzU2NywyMzU4NiwyMzYwOCwyMzY2NSwyNDAyOSwyNDAzNywyNDA0OSwyNDA1MCwyNDA1MSwyNDA2MiwyNDE3OCwyNDMxOCwyNDMzMSwyNDMzOSwyNTE2NSwxOTk4NSwxOTk4NCwxOTk4MSwyMDAxMywyMDAxNiwyMDAyNSwyMDA0MywyMzYwOSwyMDEwNCwyMDExMywyMDExNywyMDExNCwyMDExNiwyMDEzMCwyMDE2MSwyMDE2MCwyMDE2MywyMDE2NiwyMDE2NywyMDE3MywyMDE3MCwyMDE3MSwyMDE2NCwyMDgwMywyMDgwMSwyMDgzOSwyMDg0NSwyMDg0NiwyMDg0NCwyMDg4NywyMDk4MiwyMDk5OCwyMDk5OSwyMTAwMCwyMTI0MywyMTI0NiwyMTI0NywyMTI3MCwyMTMwNSwyMTMyMCwyMTMxOSwyMTMxNywyMTM0MiwyMTM4MCwyMTQ1MSwyMTQ1MCwyMTQ1MywyMjc2NCwyMjgyNSwyMjgyNywyMjgyNiwyMjgyOSwyMzM4MCwyMzU2OSwyMzU4OCwyMzYxMCwyMzY2MywyNDA1MiwyNDE4NywyNDMxOSwyNDM0MCwyNDM0MSwyNDUxNSwyNTA5NiwyNTE0MiwyNTE2MywyNTE2NiwyNTkwMywyNTk5MSwyNjAwNywyNjAyMCwyNjA0MSwyNjA4NSwyNjM1MiwyNjM3NiwyNjQwOCwyNzQyNCwyNzQ5MCwyNzUxMywyNzU5NSwyNzYwNCwyNzYxMSwyNzY2MywyNzcwMCwyODc3OSwyOTIyNiwyOTIzOCwyOTI0MywyOTI1NSwyOTI3MywyOTI3NSwyOTM1NiwyOTU3OSwxOTk5MywxOTk5MCwxOTk4OSwxOTk4OCwxOTk5MiwyMDAyNywyMDA0NSwyMDA0NywyMDA0NiwyMDE5NywyMDE4NCwyMDE4MCwyMDE4MSwyMDE4MiwyMDE4MywyMDE5NSwyMDE5NiwyMDE4NSwyMDE5MCwyMDgwNSwyMDgwNCwyMDg3MywyMDg3NCwyMDkwOCwyMDk4NSwyMDk4NiwyMDk4NCwyMTAwMiwyMTE1MiwyMTE1MSwyMTI1MywyMTI1NCwyMTI3MSwyMTI3NywyMDE5MSwyMTMyMiwyMTMyMSwyMTM0NSwyMTM0NCwyMTM1OSwyMTM1OCwyMTQzNSwyMTQ4NywyMTQ3NiwyMTQ5MSwyMTQ4NCwyMTQ4NiwyMTQ4MSwyMTQ4MCwyMTUwMCwyMTQ5NiwyMTQ5MywyMTQ4MywyMTQ3OCwyMTQ4MiwyMTQ5MCwyMTQ4OSwyMTQ4OCwyMTQ3NywyMTQ4NSwyMTQ5OSwyMjIzNSwyMjIzNCwyMjgwNiwyMjgzMCwyMjgzMywyMjkwMCwyMjkwMiwyMzM4MSwyMzQyNywyMzYxMiwyNDA0MCwyNDAzOSwyNDAzOCwyNDA2NiwyNDA2NywyNDE3OSwyNDE4OCwyNDMyMSwyNDM0NCwyNDM0MywyNDUxNywyNTA5OCwyNTE3MSwyNTE3MiwyNTE3MCwyNTE2OSwyNjAyMSwyNjA4NiwyNjQxNCwyNjQxMiwyNjQxMCwyNjQxMSwyNjQxMywyNzQ5MSwyNzU5NywyNzY2NSwyNzY2NCwyNzcwNCwyNzcxMywyNzcxMiwyNzcxMCwyOTM1OSwyOTU3MiwyOTU3NywyOTkxNiwyOTkyNiwyOTk3NiwyOTk4MywyOTk5MiwyOTk5MywzMDAwMCwzMDAwMSwzMDAwMiwzMDAwMywzMDA5MSwzMDMzMywzMDM4MiwzMDM5OSwzMDQ0NiwzMDY4MywzMDY5MCwzMDcwNywzMTAzNCwzMTE2NiwzMTM0OCwzMTQzNSwxOTk5OCwxOTk5OSwyMDA1MCwyMDA1MSwyMDA3MywyMDEyMSwyMDEzMiwyMDEzNCwyMDEzMywyMDIyMywyMDIzMywyMDI0OSwyMDIzNCwyMDI0NSwyMDIzNywyMDI0MCwyMDI0MSwyMDIzOSwyMDIxMCwyMDIxNCwyMDIxOSwyMDIwOCwyMDIxMSwyMDIyMSwyMDIyNSwyMDIzNSwyMDgwOSwyMDgwNywyMDgwNiwyMDgwOCwyMDg0MCwyMDg0OSwyMDg3NywyMDkxMiwyMTAxNSwyMTAwOSwyMTAxMCwyMTAwNiwyMTAxNCwyMTE1NSwyMTI1NiwyMTI4MSwyMTI4MCwyMTM2MCwyMTM2MSwyMTUxMywyMTUxOSwyMTUxNiwyMTUxNCwyMTUyMCwyMTUwNSwyMTUxNSwyMTUwOCwyMTUyMSwyMTUxNywyMTUxMiwyMTUwNywyMTUxOCwyMTUxMCwyMTUyMiwyMjI0MCwyMjIzOCwyMjIzNywyMjMyMywyMjMyMCwyMjMxMiwyMjMxNywyMjMxNiwyMjMxOSwyMjMxMywyMjgwOSwyMjgxMCwyMjgzOSwyMjg0MCwyMjkxNiwyMjkwNCwyMjkxNSwyMjkwOSwyMjkwNSwyMjkxNCwyMjkxMywyMzM4MywyMzM4NCwyMzQzMSwyMzQzMiwyMzQyOSwyMzQzMywyMzU0NiwyMzU3NCwyMzY3MywyNDAzMCwyNDA3MCwyNDE4MiwyNDE4MCwyNDMzNSwyNDM0NywyNDUzNywyNDUzNCwyNTEwMiwyNTEwMCwyNTEwMSwyNTEwNCwyNTE4NywyNTE3OSwyNTE3NiwyNTkxMCwyNjA4OSwyNjA4OCwyNjA5MiwyNjA5MywyNjM1NCwyNjM1NSwyNjM3NywyNjQyOSwyNjQyMCwyNjQxNywyNjQyMSwyNzQyNSwyNzQ5MiwyNzUxNSwyNzY3MCwyNzc0MSwyNzczNSwyNzczNywyNzc0MywyNzc0NCwyNzcyOCwyNzczMywyNzc0NSwyNzczOSwyNzcyNSwyNzcyNiwyODc4NCwyOTI3OSwyOTI3NywzMDMzNCwzMTQ4MSwzMTg1OSwzMTk5MiwzMjU2NiwzMjY1MCwzMjcwMSwzMjc2OSwzMjc3MSwzMjc4MCwzMjc4NiwzMjgxOSwzMjg5NSwzMjkwNSwzMjkwNywzMjkwOCwzMzI1MSwzMzI1OCwzMzI2NywzMzI3NiwzMzI5MiwzMzMwNywzMzMxMSwzMzM5MCwzMzM5NCwzMzQwNiwzNDQxMSwzNDg4MCwzNDg5MiwzNDkxNSwzNTE5OSwzODQzMywyMDAxOCwyMDEzNiwyMDMwMSwyMDMwMywyMDI5NSwyMDMxMSwyMDMxOCwyMDI3NiwyMDMxNSwyMDMwOSwyMDI3MiwyMDMwNCwyMDMwNSwyMDI4NSwyMDI4MiwyMDI4MCwyMDI5MSwyMDMwOCwyMDI4NCwyMDI5NCwyMDMyMywyMDMxNiwyMDMyMCwyMDI3MSwyMDMwMiwyMDI3OCwyMDMxMywyMDMxNywyMDI5NiwyMDMxNCwyMDgxMiwyMDgxMSwyMDgxMywyMDg1MywyMDkxOCwyMDkxOSwyMTAyOSwyMTAyOCwyMTAzMywyMTAzNCwyMTAzMiwyMTE2MywyMTE2MSwyMTE2MiwyMTE2NCwyMTI4MywyMTM2MywyMTM2NSwyMTUzMywyMTU0OSwyMTUzNCwyMTU2NiwyMTU0MiwyMTU4MiwyMTU0MywyMTU3NCwyMTU3MSwyMTU1NSwyMTU3NiwyMTU3MCwyMTUzMSwyMTU0NSwyMTU3OCwyMTU2MSwyMTU2MywyMTU2MCwyMTU1MCwyMTU1NywyMTU1OCwyMTUzNiwyMTU2NCwyMTU2OCwyMTU1MywyMTU0NywyMTUzNSwyMTU0OCwyMjI1MCwyMjI1NiwyMjI0NCwyMjI1MSwyMjM0NiwyMjM1MywyMjMzNiwyMjM0OSwyMjM0MywyMjM1MCwyMjMzNCwyMjM1MiwyMjM1MSwyMjMzMSwyMjc2NywyMjg0NiwyMjk0MSwyMjkzMCwyMjk1MiwyMjk0MiwyMjk0NywyMjkzNywyMjkzNCwyMjkyNSwyMjk0OCwyMjkzMSwyMjkyMiwyMjk0OSwyMzM4OSwyMzM4OCwyMzM4NiwyMzM4NywyMzQzNiwyMzQzNSwyMzQzOSwyMzU5NiwyMzYxNiwyMzYxNywyMzYxNSwyMzYxNCwyMzY5NiwyMzY5NywyMzcwMCwyMzY5MiwyNDA0MywyNDA3NiwyNDIwNywyNDE5OSwyNDIwMiwyNDMxMSwyNDMyNCwyNDM1MSwyNDQyMCwyNDQxOCwyNDQzOSwyNDQ0MSwyNDUzNiwyNDUyNCwyNDUzNSwyNDUyNSwyNDU2MSwyNDU1NSwyNDU2OCwyNDU1NCwyNTEwNiwyNTEwNSwyNTIyMCwyNTIzOSwyNTIzOCwyNTIxNiwyNTIwNiwyNTIyNSwyNTE5NywyNTIyNiwyNTIxMiwyNTIxNCwyNTIwOSwyNTIwMywyNTIzNCwyNTE5OSwyNTI0MCwyNTE5OCwyNTIzNywyNTIzNSwyNTIzMywyNTIyMiwyNTkxMywyNTkxNSwyNTkxMiwyNjA5NywyNjM1NiwyNjQ2MywyNjQ0NiwyNjQ0NywyNjQ0OCwyNjQ0OSwyNjQ2MCwyNjQ1NCwyNjQ2MiwyNjQ0MSwyNjQzOCwyNjQ2NCwyNjQ1MSwyNjQ1NSwyNzQ5MywyNzU5OSwyNzcxNCwyNzc0MiwyNzgwMSwyNzc3NywyNzc4NCwyNzc4NSwyNzc4MSwyNzgwMywyNzc1NCwyNzc3MCwyNzc5MiwyNzc2MCwyNzc4OCwyNzc1MiwyNzc5OCwyNzc5NCwyNzc3MywyNzc3OSwyNzc2MiwyNzc3NCwyNzc2NCwyNzc4MiwyNzc2NiwyNzc4OSwyNzc5NiwyNzgwMCwyNzc3OCwyODc5MCwyODc5NiwyODc5NywyODc5MiwyOTI4MiwyOTI4MSwyOTI4MCwyOTM4MCwyOTM3OCwyOTU5MCwyOTk5NiwyOTk5NSwzMDAwNywzMDAwOCwzMDMzOCwzMDQ0NywzMDY5MSwzMTE2OSwzMTE2OCwzMTE2NywzMTM1MCwzMTk5NSwzMjU5NywzMjkxOCwzMjkxNSwzMjkyNSwzMjkyMCwzMjkyMywzMjkyMiwzMjk0NiwzMzM5MSwzMzQyNiwzMzQxOSwzMzQyMSwzNTIxMSwzNTI4MiwzNTMyOCwzNTg5NSwzNTkxMCwzNTkyNSwzNTk5NywzNjE5NiwzNjIwOCwzNjI3NSwzNjUyMywzNjU1NCwzNjc2MywzNjc4NCwzNjgwMiwzNjgwNiwzNjgwNSwzNjgwNCwyNDAzMywzNzAwOSwzNzAyNiwzNzAzNCwzNzAzMCwzNzAyNywzNzE5MywzNzMxOCwzNzMyNCwzODQ1MCwzODQ0NiwzODQ0OSwzODQ0MiwzODQ0NCwyMDAwNiwyMDA1NCwyMDA4MywyMDEwNywyMDEyMywyMDEyNiwyMDEzOSwyMDE0MCwyMDMzNSwyMDM4MSwyMDM2NSwyMDMzOSwyMDM1MSwyMDMzMiwyMDM3OSwyMDM2MywyMDM1OCwyMDM1NSwyMDMzNiwyMDM0MSwyMDM2MCwyMDMyOSwyMDM0NywyMDM3NCwyMDM1MCwyMDM2NywyMDM2OSwyMDM0NiwyMDgyMCwyMDgxOCwyMDgyMSwyMDg0MSwyMDg1NSwyMDg1NCwyMDg1NiwyMDkyNSwyMDk4OSwyMTA1MSwyMTA0OCwyMTA0NywyMTA1MCwyMTA0MCwyMTAzOCwyMTA0NiwyMTA1NywyMTE4MiwyMTE3OSwyMTMzMCwyMTMzMiwyMTMzMSwyMTMyOSwyMTM1MCwyMTM2NywyMTM2OCwyMTM2OSwyMTQ2MiwyMTQ2MCwyMTQ2MywyMTYxOSwyMTYyMSwyMTY1NCwyMTYyNCwyMTY1MywyMTYzMiwyMTYyNywyMTYyMywyMTYzNiwyMTY1MCwyMTYzOCwyMTYyOCwyMTY0OCwyMTYxNywyMTYyMiwyMTY0NCwyMTY1OCwyMTYwMiwyMTYwOCwyMTY0MywyMTYyOSwyMTY0NiwyMjI2NiwyMjQwMywyMjM5MSwyMjM3OCwyMjM3NywyMjM2OSwyMjM3NCwyMjM3MiwyMjM5NiwyMjgxMiwyMjg1NywyMjg1NSwyMjg1NiwyMjg1MiwyMjg2OCwyMjk3NCwyMjk3MSwyMjk5NiwyMjk2OSwyMjk1OCwyMjk5MywyMjk4MiwyMjk5MiwyMjk4OSwyMjk4NywyMjk5NSwyMjk4NiwyMjk1OSwyMjk2MywyMjk5NCwyMjk4MSwyMzM5MSwyMzM5NiwyMzM5NSwyMzQ0NywyMzQ1MCwyMzQ0OCwyMzQ1MiwyMzQ0OSwyMzQ1MSwyMzU3OCwyMzYyNCwyMzYyMSwyMzYyMiwyMzczNSwyMzcxMywyMzczNiwyMzcyMSwyMzcyMywyMzcyOSwyMzczMSwyNDA4OCwyNDA5MCwyNDA4NiwyNDA4NSwyNDA5MSwyNDA4MSwyNDE4NCwyNDIxOCwyNDIxNSwyNDIyMCwyNDIxMywyNDIxNCwyNDMxMCwyNDM1OCwyNDM1OSwyNDM2MSwyNDQ0OCwyNDQ0OSwyNDQ0NywyNDQ0NCwyNDU0MSwyNDU0NCwyNDU3MywyNDU2NSwyNDU3NSwyNDU5MSwyNDU5NiwyNDYyMywyNDYyOSwyNDU5OCwyNDYxOCwyNDU5NywyNDYwOSwyNDYxNSwyNDYxNywyNDYxOSwyNDYwMywyNTExMCwyNTEwOSwyNTE1MSwyNTE1MCwyNTE1MiwyNTIxNSwyNTI4OSwyNTI5MiwyNTI4NCwyNTI3OSwyNTI4MiwyNTI3MywyNTI5OCwyNTMwNywyNTI1OSwyNTI5OSwyNTMwMCwyNTI5MSwyNTI4OCwyNTI1NiwyNTI3NywyNTI3NiwyNTI5NiwyNTMwNSwyNTI4NywyNTI5MywyNTI2OSwyNTMwNiwyNTI2NSwyNTMwNCwyNTMwMiwyNTMwMywyNTI4NiwyNTI2MCwyNTI5NCwyNTkxOCwyNjAyMywyNjA0NCwyNjEwNiwyNjEzMiwyNjEzMSwyNjEyNCwyNjExOCwyNjExNCwyNjEyNiwyNjExMiwyNjEyNywyNjEzMywyNjEyMiwyNjExOSwyNjM4MSwyNjM3OSwyNjQ3NywyNjUwNywyNjUxNywyNjQ4MSwyNjUyNCwyNjQ4MywyNjQ4NywyNjUwMywyNjUyNSwyNjUxOSwyNjQ3OSwyNjQ4MCwyNjQ5NSwyNjUwNSwyNjQ5NCwyNjUxMiwyNjQ4NSwyNjUyMiwyNjUxNSwyNjQ5MiwyNjQ3NCwyNjQ4MiwyNzQyNywyNzQ5NCwyNzQ5NSwyNzUxOSwyNzY2NywyNzY3NSwyNzg3NSwyNzg4MCwyNzg5MSwyNzgyNSwyNzg1MiwyNzg3NywyNzgyNywyNzgzNywyNzgzOCwyNzgzNiwyNzg3NCwyNzgxOSwyNzg2MSwyNzg1OSwyNzgzMiwyNzg0NCwyNzgzMywyNzg0MSwyNzgyMiwyNzg2MywyNzg0NSwyNzg4OSwyNzgzOSwyNzgzNSwyNzg3MywyNzg2NywyNzg1MCwyNzgyMCwyNzg4NywyNzg2OCwyNzg2MiwyNzg3MiwyODgyMSwyODgxNCwyODgxOCwyODgxMCwyODgyNSwyOTIyOCwyOTIyOSwyOTI0MCwyOTI1NiwyOTI4NywyOTI4OSwyOTM3NiwyOTM5MCwyOTQwMSwyOTM5OSwyOTM5MiwyOTYwOSwyOTYwOCwyOTU5OSwyOTYxMSwyOTYwNSwzMDAxMywzMDEwOSwzMDEwNSwzMDEwNiwzMDM0MCwzMDQwMiwzMDQ1MCwzMDQ1MiwzMDY5MywzMDcxNywzMTAzOCwzMTA0MCwzMTA0MSwzMTE3NywzMTE3NiwzMTM1NCwzMTM1MywzMTQ4MiwzMTk5OCwzMjU5NiwzMjY1MiwzMjY1MSwzMjc3MywzMjk1NCwzMjkzMywzMjkzMCwzMjk0NSwzMjkyOSwzMjkzOSwzMjkzNywzMjk0OCwzMjkzOCwzMjk0MywzMzI1MywzMzI3OCwzMzI5MywzMzQ1OSwzMzQzNywzMzQzMywzMzQ1MywzMzQ2OSwzMzQzOSwzMzQ2NSwzMzQ1NywzMzQ1MiwzMzQ0NSwzMzQ1NSwzMzQ2NCwzMzQ0MywzMzQ1NiwzMzQ3MCwzMzQ2MywzNDM4MiwzNDQxNywyMTAyMSwzNDkyMCwzNjU1NSwzNjgxNCwzNjgyMCwzNjgxNywzNzA0NSwzNzA0OCwzNzA0MSwzNzA0NiwzNzMxOSwzNzMyOSwzODI2MywzODI3MiwzODQyOCwzODQ2NCwzODQ2MywzODQ1OSwzODQ2OCwzODQ2NiwzODU4NSwzODYzMiwzODczOCwzODc1MCwyMDEyNywyMDE0MSwyMDE0MiwyMDQ0OSwyMDQwNSwyMDM5OSwyMDQxNSwyMDQ0OCwyMDQzMywyMDQzMSwyMDQ0NSwyMDQxOSwyMDQwNiwyMDQ0MCwyMDQ0NywyMDQyNiwyMDQzOSwyMDM5OCwyMDQzMiwyMDQyMCwyMDQxOCwyMDQ0MiwyMDQzMCwyMDQ0NiwyMDQwNywyMDgyMywyMDg4MiwyMDg4MSwyMDg5NiwyMTA3MCwyMTA1OSwyMTA2NiwyMTA2OSwyMTA2OCwyMTA2NywyMTA2MywyMTE5MSwyMTE5MywyMTE4NywyMTE4NSwyMTI2MSwyMTMzNSwyMTM3MSwyMTQwMiwyMTQ2NywyMTY3NiwyMTY5NiwyMTY3MiwyMTcxMCwyMTcwNSwyMTY4OCwyMTY3MCwyMTY4MywyMTcwMywyMTY5OCwyMTY5MywyMTY3NCwyMTY5NywyMTcwMCwyMTcwNCwyMTY3OSwyMTY3NSwyMTY4MSwyMTY5MSwyMTY3MywyMTY3MSwyMTY5NSwyMjI3MSwyMjQwMiwyMjQxMSwyMjQzMiwyMjQzNSwyMjQzNCwyMjQ3OCwyMjQ0NiwyMjQxOSwyMjg2OSwyMjg2NSwyMjg2MywyMjg2MiwyMjg2NCwyMzAwNCwyMzAwMCwyMzAzOSwyMzAxMSwyMzAxNiwyMzA0MywyMzAxMywyMzAxOCwyMzAwMiwyMzAxNCwyMzA0MSwyMzAzNSwyMzQwMSwyMzQ1OSwyMzQ2MiwyMzQ2MCwyMzQ1OCwyMzQ2MSwyMzU1MywyMzYzMCwyMzYzMSwyMzYyOSwyMzYyNywyMzc2OSwyMzc2MiwyNDA1NSwyNDA5MywyNDEwMSwyNDA5NSwyNDE4OSwyNDIyNCwyNDIzMCwyNDMxNCwyNDMyOCwyNDM2NSwyNDQyMSwyNDQ1NiwyNDQ1MywyNDQ1OCwyNDQ1OSwyNDQ1NSwyNDQ2MCwyNDQ1NywyNDU5NCwyNDYwNSwyNDYwOCwyNDYxMywyNDU5MCwyNDYxNiwyNDY1MywyNDY4OCwyNDY4MCwyNDY3NCwyNDY0NiwyNDY0MywyNDY4NCwyNDY4MywyNDY4MiwyNDY3NiwyNTE1MywyNTMwOCwyNTM2NiwyNTM1MywyNTM0MCwyNTMyNSwyNTM0NSwyNTMyNiwyNTM0MSwyNTM1MSwyNTMyOSwyNTMzNSwyNTMyNywyNTMyNCwyNTM0MiwyNTMzMiwyNTM2MSwyNTM0NiwyNTkxOSwyNTkyNSwyNjAyNywyNjA0NSwyNjA4MiwyNjE0OSwyNjE1NywyNjE0NCwyNjE1MSwyNjE1OSwyNjE0MywyNjE1MiwyNjE2MSwyNjE0OCwyNjM1OSwyNjYyMywyNjU3OSwyNjYwOSwyNjU4MCwyNjU3NiwyNjYwNCwyNjU1MCwyNjU0MywyNjYxMywyNjYwMSwyNjYwNywyNjU2NCwyNjU3NywyNjU0OCwyNjU4NiwyNjU5NywyNjU1MiwyNjU3NSwyNjU5MCwyNjYxMSwyNjU0NCwyNjU4NSwyNjU5NCwyNjU4OSwyNjU3OCwyNzQ5OCwyNzUyMywyNzUyNiwyNzU3MywyNzYwMiwyNzYwNywyNzY3OSwyNzg0OSwyNzkxNSwyNzk1NCwyNzk0NiwyNzk2OSwyNzk0MSwyNzkxNiwyNzk1MywyNzkzNCwyNzkyNywyNzk2MywyNzk2NSwyNzk2NiwyNzk1OCwyNzkzMSwyNzg5MywyNzk2MSwyNzk0MywyNzk2MCwyNzk0NSwyNzk1MCwyNzk1NywyNzkxOCwyNzk0NywyODg0MywyODg1OCwyODg1MSwyODg0NCwyODg0NywyODg0NSwyODg1NiwyODg0NiwyODgzNiwyOTIzMiwyOTI5OCwyOTI5NSwyOTMwMCwyOTQxNywyOTQwOCwyOTQwOSwyOTYyMywyOTY0MiwyOTYyNywyOTYxOCwyOTY0NSwyOTYzMiwyOTYxOSwyOTk3OCwyOTk5NywzMDAzMSwzMDAyOCwzMDAzMCwzMDAyNywzMDEyMywzMDExNiwzMDExNywzMDExNCwzMDExNSwzMDMyOCwzMDM0MiwzMDM0MywzMDM0NCwzMDQwOCwzMDQwNiwzMDQwMywzMDQwNSwzMDQ2NSwzMDQ1NywzMDQ1NiwzMDQ3MywzMDQ3NSwzMDQ2MiwzMDQ2MCwzMDQ3MSwzMDY4NCwzMDcyMiwzMDc0MCwzMDczMiwzMDczMywzMTA0NiwzMTA0OSwzMTA0OCwzMTA0NywzMTE2MSwzMTE2MiwzMTE4NSwzMTE4NiwzMTE3OSwzMTM1OSwzMTM2MSwzMTQ4NywzMTQ4NSwzMTg2OSwzMjAwMiwzMjAwNSwzMjAwMCwzMjAwOSwzMjAwNywzMjAwNCwzMjAwNiwzMjU2OCwzMjY1NCwzMjcwMywzMjc3MiwzMjc4NCwzMjc4MSwzMjc4NSwzMjgyMiwzMjk4MiwzMjk5NywzMjk4NiwzMjk2MywzMjk2NCwzMjk3MiwzMjk5MywzMjk4NywzMjk3NCwzMjk5MCwzMjk5NiwzMjk4OSwzMzI2OCwzMzMxNCwzMzUxMSwzMzUzOSwzMzU0MSwzMzUwNywzMzQ5OSwzMzUxMCwzMzU0MCwzMzUwOSwzMzUzOCwzMzU0NSwzMzQ5MCwzMzQ5NSwzMzUyMSwzMzUzNywzMzUwMCwzMzQ5MiwzMzQ4OSwzMzUwMiwzMzQ5MSwzMzUwMywzMzUxOSwzMzU0MiwzNDM4NCwzNDQyNSwzNDQyNywzNDQyNiwzNDg5MywzNDkyMywzNTIwMSwzNTI4NCwzNTMzNiwzNTMzMCwzNTMzMSwzNTk5OCwzNjAwMCwzNjIxMiwzNjIxMSwzNjI3NiwzNjU1NywzNjU1NiwzNjg0OCwzNjgzOCwzNjgzNCwzNjg0MiwzNjgzNywzNjg0NSwzNjg0MywzNjgzNiwzNjg0MCwzNzA2NiwzNzA3MCwzNzA1NywzNzA1OSwzNzE5NSwzNzE5NCwzNzMyNSwzODI3NCwzODQ4MCwzODQ3NSwzODQ3NiwzODQ3NywzODc1NCwzODc2MSwzODg1OSwzODg5MywzODg5OSwzODkxMywzOTA4MCwzOTEzMSwzOTEzNSwzOTMxOCwzOTMyMSwyMDA1NiwyMDE0NywyMDQ5MiwyMDQ5MywyMDUxNSwyMDQ2MywyMDUxOCwyMDUxNywyMDQ3MiwyMDUyMSwyMDUwMiwyMDQ4NiwyMDU0MCwyMDUxMSwyMDUwNiwyMDQ5OCwyMDQ5NywyMDQ3NCwyMDQ4MCwyMDUwMCwyMDUyMCwyMDQ2NSwyMDUxMywyMDQ5MSwyMDUwNSwyMDUwNCwyMDQ2NywyMDQ2MiwyMDUyNSwyMDUyMiwyMDQ3OCwyMDUyMywyMDQ4OSwyMDg2MCwyMDkwMCwyMDkwMSwyMDg5OCwyMDk0MSwyMDk0MCwyMDkzNCwyMDkzOSwyMTA3OCwyMTA4NCwyMTA3NiwyMTA4MywyMTA4NSwyMTI5MCwyMTM3NSwyMTQwNywyMTQwNSwyMTQ3MSwyMTczNiwyMTc3NiwyMTc2MSwyMTgxNSwyMTc1NiwyMTczMywyMTc0NiwyMTc2NiwyMTc1NCwyMTc4MCwyMTczNywyMTc0MSwyMTcyOSwyMTc2OSwyMTc0MiwyMTczOCwyMTczNCwyMTc5OSwyMTc2NywyMTc1NywyMTc3NSwyMjI3NSwyMjI3NiwyMjQ2NiwyMjQ4NCwyMjQ3NSwyMjQ2NywyMjUzNywyMjc5OSwyMjg3MSwyMjg3MiwyMjg3NCwyMzA1NywyMzA2NCwyMzA2OCwyMzA3MSwyMzA2NywyMzA1OSwyMzAyMCwyMzA3MiwyMzA3NSwyMzA4MSwyMzA3NywyMzA1MiwyMzA0OSwyMzQwMywyMzY0MCwyMzQ3MiwyMzQ3NSwyMzQ3OCwyMzQ3NiwyMzQ3MCwyMzQ3NywyMzQ4MSwyMzQ4MCwyMzU1NiwyMzYzMywyMzYzNywyMzYzMiwyMzc4OSwyMzgwNSwyMzgwMywyMzc4NiwyMzc4NCwyMzc5MiwyMzc5OCwyMzgwOSwyMzc5NiwyNDA0NiwyNDEwOSwyNDEwNywyNDIzNSwyNDIzNywyNDIzMSwyNDM2OSwyNDQ2NiwyNDQ2NSwyNDQ2NCwyNDY2NSwyNDY3NSwyNDY3NywyNDY1NiwyNDY2MSwyNDY4NSwyNDY4MSwyNDY4NywyNDcwOCwyNDczNSwyNDczMCwyNDcxNywyNDcyNCwyNDcxNiwyNDcwOSwyNDcyNiwyNTE1OSwyNTMzMSwyNTM1MiwyNTM0MywyNTQyMiwyNTQwNiwyNTM5MSwyNTQyOSwyNTQxMCwyNTQxNCwyNTQyMywyNTQxNywyNTQwMiwyNTQyNCwyNTQwNSwyNTM4NiwyNTM4NywyNTM4NCwyNTQyMSwyNTQyMCwyNTkyOCwyNTkyOSwyNjAwOSwyNjA0OSwyNjA1MywyNjE3OCwyNjE4NSwyNjE5MSwyNjE3OSwyNjE5NCwyNjE4OCwyNjE4MSwyNjE3NywyNjM2MCwyNjM4OCwyNjM4OSwyNjM5MSwyNjY1NywyNjY4MCwyNjY5NiwyNjY5NCwyNjcwNywyNjY4MSwyNjY5MCwyNjcwOCwyNjY2NSwyNjgwMywyNjY0NywyNjcwMCwyNjcwNSwyNjY4NSwyNjYxMiwyNjcwNCwyNjY4OCwyNjY4NCwyNjY5MSwyNjY2NiwyNjY5MywyNjY0MywyNjY0OCwyNjY4OSwyNzUzMCwyNzUyOSwyNzU3NSwyNzY4MywyNzY4NywyNzY4OCwyNzY4NiwyNzY4NCwyNzg4OCwyODAxMCwyODA1MywyODA0MCwyODAzOSwyODAwNiwyODAyNCwyODAyMywyNzk5MywyODA1MSwyODAxMiwyODA0MSwyODAxNCwyNzk5NCwyODAyMCwyODAwOSwyODA0NCwyODA0MiwyODAyNSwyODAzNywyODAwNSwyODA1MiwyODg3NCwyODg4OCwyODkwMCwyODg4OSwyODg3MiwyODg3OSwyOTI0MSwyOTMwNSwyOTQzNiwyOTQzMywyOTQzNywyOTQzMiwyOTQzMSwyOTU3NCwyOTY3NywyOTcwNSwyOTY3OCwyOTY2NCwyOTY3NCwyOTY2MiwzMDAzNiwzMDA0NSwzMDA0NCwzMDA0MiwzMDA0MSwzMDE0MiwzMDE0OSwzMDE1MSwzMDEzMCwzMDEzMSwzMDE0MSwzMDE0MCwzMDEzNywzMDE0NiwzMDEzNiwzMDM0NywzMDM4NCwzMDQxMCwzMDQxMywzMDQxNCwzMDUwNSwzMDQ5NSwzMDQ5NiwzMDUwNCwzMDY5NywzMDc2OCwzMDc1OSwzMDc3NiwzMDc0OSwzMDc3MiwzMDc3NSwzMDc1NywzMDc2NSwzMDc1MiwzMDc1MSwzMDc3MCwzMTA2MSwzMTA1NiwzMTA3MiwzMTA3MSwzMTA2MiwzMTA3MCwzMTA2OSwzMTA2MywzMTA2NiwzMTIwNCwzMTIwMywzMTIwNywzMTE5OSwzMTIwNiwzMTIwOSwzMTE5MiwzMTM2NCwzMTM2OCwzMTQ0OSwzMTQ5NCwzMTUwNSwzMTg4MSwzMjAzMywzMjAyMywzMjAxMSwzMjAxMCwzMjAzMiwzMjAzNCwzMjAyMCwzMjAxNiwzMjAyMSwzMjAyNiwzMjAyOCwzMjAxMywzMjAyNSwzMjAyNywzMjU3MCwzMjYwNywzMjY2MCwzMjcwOSwzMjcwNSwzMjc3NCwzMjc5MiwzMjc4OSwzMjc5MywzMjc5MSwzMjgyOSwzMjgzMSwzMzAwOSwzMzAyNiwzMzAwOCwzMzAyOSwzMzAwNSwzMzAxMiwzMzAzMCwzMzAxNiwzMzAxMSwzMzAzMiwzMzAyMSwzMzAzNCwzMzAyMCwzMzAwNywzMzI2MSwzMzI2MCwzMzI4MCwzMzI5NiwzMzMyMiwzMzMyMywzMzMyMCwzMzMyNCwzMzQ2NywzMzU3OSwzMzYxOCwzMzYyMCwzMzYxMCwzMzU5MiwzMzYxNiwzMzYwOSwzMzU4OSwzMzU4OCwzMzYxNSwzMzU4NiwzMzU5MywzMzU5MCwzMzU1OSwzMzYwMCwzMzU4NSwzMzU3NiwzMzYwMywzNDM4OCwzNDQ0MiwzNDQ3NCwzNDQ1MSwzNDQ2OCwzNDQ3MywzNDQ0NCwzNDQ2NywzNDQ2MCwzNDkyOCwzNDkzNSwzNDk0NSwzNDk0NiwzNDk0MSwzNDkzNywzNTM1MiwzNTM0NCwzNTM0MiwzNTM0MCwzNTM0OSwzNTMzOCwzNTM1MSwzNTM0NywzNTM1MCwzNTM0MywzNTM0NSwzNTkxMiwzNTk2MiwzNTk2MSwzNjAwMSwzNjAwMiwzNjIxNSwzNjUyNCwzNjU2MiwzNjU2NCwzNjU1OSwzNjc4NSwzNjg2NSwzNjg3MCwzNjg1NSwzNjg2NCwzNjg1OCwzNjg1MiwzNjg2NywzNjg2MSwzNjg2OSwzNjg1NiwzNzAxMywzNzA4OSwzNzA4NSwzNzA5MCwzNzIwMiwzNzE5NywzNzE5NiwzNzMzNiwzNzM0MSwzNzMzNSwzNzM0MCwzNzMzNywzODI3NSwzODQ5OCwzODQ5OSwzODQ5NywzODQ5MSwzODQ5MywzODUwMCwzODQ4OCwzODQ5NCwzODU4NywzOTEzOCwzOTM0MCwzOTU5MiwzOTY0MCwzOTcxNywzOTczMCwzOTc0MCwyMDA5NCwyMDYwMiwyMDYwNSwyMDU3MiwyMDU1MSwyMDU0NywyMDU1NiwyMDU3MCwyMDU1MywyMDU4MSwyMDU5OCwyMDU1OCwyMDU2NSwyMDU5NywyMDU5NiwyMDU5OSwyMDU1OSwyMDQ5NSwyMDU5MSwyMDU4OSwyMDgyOCwyMDg4NSwyMDk3NiwyMTA5OCwyMTEwMywyMTIwMiwyMTIwOSwyMTIwOCwyMTIwNSwyMTI2NCwyMTI2MywyMTI3MywyMTMxMSwyMTMxMiwyMTMxMCwyMTQ0MywyNjM2NCwyMTgzMCwyMTg2NiwyMTg2MiwyMTgyOCwyMTg1NCwyMTg1NywyMTgyNywyMTgzNCwyMTgwOSwyMTg0NiwyMTgzOSwyMTg0NSwyMTgwNywyMTg2MCwyMTgxNiwyMTgwNiwyMTg1MiwyMTgwNCwyMTg1OSwyMTgxMSwyMTgyNSwyMTg0NywyMjI4MCwyMjI4MywyMjI4MSwyMjQ5NSwyMjUzMywyMjUzOCwyMjUzNCwyMjQ5NiwyMjUwMCwyMjUyMiwyMjUzMCwyMjU4MSwyMjUxOSwyMjUyMSwyMjgxNiwyMjg4MiwyMzA5NCwyMzEwNSwyMzExMywyMzE0MiwyMzE0NiwyMzEwNCwyMzEwMCwyMzEzOCwyMzEzMCwyMzExMCwyMzExNCwyMzQwOCwyMzQ5NSwyMzQ5MywyMzQ5MiwyMzQ5MCwyMzQ4NywyMzQ5NCwyMzU2MSwyMzU2MCwyMzU1OSwyMzY0OCwyMzY0NCwyMzY0NSwyMzgxNSwyMzgxNCwyMzgyMiwyMzgzNSwyMzgzMCwyMzg0MiwyMzgyNSwyMzg0OSwyMzgyOCwyMzgzMywyMzg0NCwyMzg0NywyMzgzMSwyNDAzNCwyNDEyMCwyNDExOCwyNDExNSwyNDExOSwyNDI0NywyNDI0OCwyNDI0NiwyNDI0NSwyNDI1NCwyNDM3MywyNDM3NSwyNDQwNywyNDQyOCwyNDQyNSwyNDQyNywyNDQ3MSwyNDQ3MywyNDQ3OCwyNDQ3MiwyNDQ4MSwyNDQ4MCwyNDQ3NiwyNDcwMywyNDczOSwyNDcxMywyNDczNiwyNDc0NCwyNDc3OSwyNDc1NiwyNDgwNiwyNDc2NSwyNDc3MywyNDc2MywyNDc1NywyNDc5NiwyNDc2NCwyNDc5MiwyNDc4OSwyNDc3NCwyNDc5OSwyNDc2MCwyNDc5NCwyNDc3NSwyNTExNCwyNTExNSwyNTE2MCwyNTUwNCwyNTUxMSwyNTQ1OCwyNTQ5NCwyNTUwNiwyNTUwOSwyNTQ2MywyNTQ0NywyNTQ5NiwyNTUxNCwyNTQ1NywyNTUxMywyNTQ4MSwyNTQ3NSwyNTQ5OSwyNTQ1MSwyNTUxMiwyNTQ3NiwyNTQ4MCwyNTQ5NywyNTUwNSwyNTUxNiwyNTQ5MCwyNTQ4NywyNTQ3MiwyNTQ2NywyNTQ0OSwyNTQ0OCwyNTQ2NiwyNTk0OSwyNTk0MiwyNTkzNywyNTk0NSwyNTk0MywyMTg1NSwyNTkzNSwyNTk0NCwyNTk0MSwyNTk0MCwyNjAxMiwyNjAxMSwyNjAyOCwyNjA2MywyNjA1OSwyNjA2MCwyNjA2MiwyNjIwNSwyNjIwMiwyNjIxMiwyNjIxNiwyNjIxNCwyNjIwNiwyNjM2MSwyMTIwNywyNjM5NSwyNjc1MywyNjc5OSwyNjc4NiwyNjc3MSwyNjgwNSwyNjc1MSwyNjc0MiwyNjgwMSwyNjc5MSwyNjc3NSwyNjgwMCwyNjc1NSwyNjgyMCwyNjc5NywyNjc1OCwyNjc1NywyNjc3MiwyNjc4MSwyNjc5MiwyNjc4MywyNjc4NSwyNjc1NCwyNzQ0MiwyNzU3OCwyNzYyNywyNzYyOCwyNzY5MSwyODA0NiwyODA5MiwyODE0NywyODEyMSwyODA4MiwyODEyOSwyODEwOCwyODEzMiwyODE1NSwyODE1NCwyODE2NSwyODEwMywyODEwNywyODA3OSwyODExMywyODA3OCwyODEyNiwyODE1MywyODA4OCwyODE1MSwyODE0OSwyODEwMSwyODExNCwyODE4NiwyODA4NSwyODEyMiwyODEzOSwyODEyMCwyODEzOCwyODE0NSwyODE0MiwyODEzNiwyODEwMiwyODEwMCwyODA3NCwyODE0MCwyODA5NSwyODEzNCwyODkyMSwyODkzNywyODkzOCwyODkyNSwyODkxMSwyOTI0NSwyOTMwOSwyOTMxMywyOTQ2OCwyOTQ2NywyOTQ2MiwyOTQ1OSwyOTQ2NSwyOTU3NSwyOTcwMSwyOTcwNiwyOTY5OSwyOTcwMiwyOTY5NCwyOTcwOSwyOTkyMCwyOTk0MiwyOTk0MywyOTk4MCwyOTk4NiwzMDA1MywzMDA1NCwzMDA1MCwzMDA2NCwzMDA5NSwzMDE2NCwzMDE2NSwzMDEzMywzMDE1NCwzMDE1NywzMDM1MCwzMDQyMCwzMDQxOCwzMDQyNywzMDUxOSwzMDUyNiwzMDUyNCwzMDUxOCwzMDUyMCwzMDUyMiwzMDgyNywzMDc4NywzMDc5OCwzMTA3NywzMTA4MCwzMTA4NSwzMTIyNywzMTM3OCwzMTM4MSwzMTUyMCwzMTUyOCwzMTUxNSwzMTUzMiwzMTUyNiwzMTUxMywzMTUxOCwzMTUzNCwzMTg5MCwzMTg5NSwzMTg5MywzMjA3MCwzMjA2NywzMjExMywzMjA0NiwzMjA1NywzMjA2MCwzMjA2NCwzMjA0OCwzMjA1MSwzMjA2OCwzMjA0NywzMjA2NiwzMjA1MCwzMjA0OSwzMjU3MywzMjY3MCwzMjY2NiwzMjcxNiwzMjcxOCwzMjcyMiwzMjc5NiwzMjg0MiwzMjgzOCwzMzA3MSwzMzA0NiwzMzA1OSwzMzA2NywzMzA2NSwzMzA3MiwzMzA2MCwzMzI4MiwzMzMzMywzMzMzNSwzMzMzNCwzMzMzNywzMzY3OCwzMzY5NCwzMzY4OCwzMzY1NiwzMzY5OCwzMzY4NiwzMzcyNSwzMzcwNywzMzY4MiwzMzY3NCwzMzY4MywzMzY3MywzMzY5NiwzMzY1NSwzMzY1OSwzMzY2MCwzMzY3MCwzMzcwMywzNDM4OSwyNDQyNiwzNDUwMywzNDQ5NiwzNDQ4NiwzNDUwMCwzNDQ4NSwzNDUwMiwzNDUwNywzNDQ4MSwzNDQ3OSwzNDUwNSwzNDg5OSwzNDk3NCwzNDk1MiwzNDk4NywzNDk2MiwzNDk2NiwzNDk1NywzNDk1NSwzNTIxOSwzNTIxNSwzNTM3MCwzNTM1NywzNTM2MywzNTM2NSwzNTM3NywzNTM3MywzNTM1OSwzNTM1NSwzNTM2MiwzNTkxMywzNTkzMCwzNjAwOSwzNjAxMiwzNjAxMSwzNjAwOCwzNjAxMCwzNjAwNywzNjE5OSwzNjE5OCwzNjI4NiwzNjI4MiwzNjU3MSwzNjU3NSwzNjg4OSwzNjg3NywzNjg5MCwzNjg4NywzNjg5OSwzNjg5NSwzNjg5MywzNjg4MCwzNjg4NSwzNjg5NCwzNjg5NiwzNjg3OSwzNjg5OCwzNjg4NiwzNjg5MSwzNjg4NCwzNzA5NiwzNzEwMSwzNzExNywzNzIwNywzNzMyNiwzNzM2NSwzNzM1MCwzNzM0NywzNzM1MSwzNzM1NywzNzM1MywzODI4MSwzODUwNiwzODUxNywzODUxNSwzODUyMCwzODUxMiwzODUxNiwzODUxOCwzODUxOSwzODUwOCwzODU5MiwzODYzNCwzODYzMywzMTQ1NiwzMTQ1NSwzODkxNCwzODkxNSwzOTc3MCw0MDE2NSw0MDU2NSw0MDU3NSw0MDYxMyw0MDYzNSwyMDY0MiwyMDYyMSwyMDYxMywyMDYzMywyMDYyNSwyMDYwOCwyMDYzMCwyMDYzMiwyMDYzNCwyNjM2OCwyMDk3NywyMTEwNiwyMTEwOCwyMTEwOSwyMTA5NywyMTIxNCwyMTIxMywyMTIxMSwyMTMzOCwyMTQxMywyMTg4MywyMTg4OCwyMTkyNywyMTg4NCwyMTg5OCwyMTkxNywyMTkxMiwyMTg5MCwyMTkxNiwyMTkzMCwyMTkwOCwyMTg5NSwyMTg5OSwyMTg5MSwyMTkzOSwyMTkzNCwyMTkxOSwyMTgyMiwyMTkzOCwyMTkxNCwyMTk0NywyMTkzMiwyMTkzNywyMTg4NiwyMTg5NywyMTkzMSwyMTkxMywyMjI4NSwyMjU3NSwyMjU3MCwyMjU4MCwyMjU2NCwyMjU3NiwyMjU3NywyMjU2MSwyMjU1NywyMjU2MCwyMjc3NywyMjc3OCwyMjg4MCwyMzE1OSwyMzE5NCwyMzE2NywyMzE4NiwyMzE5NSwyMzIwNywyMzQxMSwyMzQwOSwyMzUwNiwyMzUwMCwyMzUwNywyMzUwNCwyMzU2MiwyMzU2MywyMzYwMSwyMzg4NCwyMzg4OCwyMzg2MCwyMzg3OSwyNDA2MSwyNDEzMywyNDEyNSwyNDEyOCwyNDEzMSwyNDE5MCwyNDI2NiwyNDI1NywyNDI1OCwyNDI2MCwyNDM4MCwyNDQyOSwyNDQ4OSwyNDQ5MCwyNDQ4OCwyNDc4NSwyNDgwMSwyNDc1NCwyNDc1OCwyNDgwMCwyNDg2MCwyNDg2NywyNDgyNiwyNDg1MywyNDgxNiwyNDgyNywyNDgyMCwyNDkzNiwyNDgxNywyNDg0NiwyNDgyMiwyNDg0MSwyNDgzMiwyNDg1MCwyNTExOSwyNTE2MSwyNTUwNywyNTQ4NCwyNTU1MSwyNTUzNiwyNTU3NywyNTU0NSwyNTU0MiwyNTU0OSwyNTU1NCwyNTU3MSwyNTU1MiwyNTU2OSwyNTU1OCwyNTU4MSwyNTU4MiwyNTQ2MiwyNTU4OCwyNTU3OCwyNTU2MywyNTY4MiwyNTU2MiwyNTU5MywyNTk1MCwyNTk1OCwyNTk1NCwyNTk1NSwyNjAwMSwyNjAwMCwyNjAzMSwyNjIyMiwyNjIyNCwyNjIyOCwyNjIzMCwyNjIyMywyNjI1NywyNjIzNCwyNjIzOCwyNjIzMSwyNjM2NiwyNjM2NywyNjM5OSwyNjM5NywyNjg3NCwyNjgzNywyNjg0OCwyNjg0MCwyNjgzOSwyNjg4NSwyNjg0NywyNjg2OSwyNjg2MiwyNjg1NSwyNjg3MywyNjgzNCwyNjg2NiwyNjg1MSwyNjgyNywyNjgyOSwyNjg5MywyNjg5OCwyNjg5NCwyNjgyNSwyNjg0MiwyNjk5MCwyNjg3NSwyNzQ1NCwyNzQ1MCwyNzQ1MywyNzU0NCwyNzU0MiwyNzU4MCwyNzYzMSwyNzY5NCwyNzY5NSwyNzY5MiwyODIwNywyODIxNiwyODI0NCwyODE5MywyODIxMCwyODI2MywyODIzNCwyODE5MiwyODE5NywyODE5NSwyODE4NywyODI1MSwyODI0OCwyODE5NiwyODI0NiwyODI3MCwyODIwNSwyODE5OCwyODI3MSwyODIxMiwyODIzNywyODIxOCwyODIwNCwyODIyNywyODE4OSwyODIyMiwyODM2MywyODI5NywyODE4NSwyODIzOCwyODI1OSwyODIyOCwyODI3NCwyODI2NSwyODI1NSwyODk1MywyODk1NCwyODk2NiwyODk3NiwyODk2MSwyODk4MiwyOTAzOCwyODk1NiwyOTI2MCwyOTMxNiwyOTMxMiwyOTQ5NCwyOTQ3NywyOTQ5MiwyOTQ4MSwyOTc1NCwyOTczOCwyOTc0NywyOTczMCwyOTczMywyOTc0OSwyOTc1MCwyOTc0OCwyOTc0MywyOTcyMywyOTczNCwyOTczNiwyOTk4OSwyOTk5MCwzMDA1OSwzMDA1OCwzMDE3OCwzMDE3MSwzMDE3OSwzMDE2OSwzMDE2OCwzMDE3NCwzMDE3NiwzMDMzMSwzMDMzMiwzMDM1OCwzMDM1NSwzMDM4OCwzMDQyOCwzMDU0MywzMDcwMSwzMDgxMywzMDgyOCwzMDgzMSwzMTI0NSwzMTI0MCwzMTI0MywzMTIzNywzMTIzMiwzMTM4NCwzMTM4MywzMTM4MiwzMTQ2MSwzMTQ1OSwzMTU2MSwzMTU3NCwzMTU1OCwzMTU2OCwzMTU3MCwzMTU3MiwzMTU2NSwzMTU2MywzMTU2NywzMTU2OSwzMTkwMywzMTkwOSwzMjA5NCwzMjA4MCwzMjEwNCwzMjA4NSwzMjA0MywzMjExMCwzMjExNCwzMjA5NywzMjEwMiwzMjA5OCwzMjExMiwzMjExNSwyMTg5MiwzMjcyNCwzMjcyNSwzMjc3OSwzMjg1MCwzMjkwMSwzMzEwOSwzMzEwOCwzMzA5OSwzMzEwNSwzMzEwMiwzMzA4MSwzMzA5NCwzMzA4NiwzMzEwMCwzMzEwNywzMzE0MCwzMzI5OCwzMzMwOCwzMzc2OSwzMzc5NSwzMzc4NCwzMzgwNSwzMzc2MCwzMzczMywzMzgwMywzMzcyOSwzMzc3NSwzMzc3NywzMzc4MCwzMzg3OSwzMzgwMiwzMzc3NiwzMzgwNCwzMzc0MCwzMzc4OSwzMzc3OCwzMzczOCwzMzg0OCwzMzgwNiwzMzc5NiwzMzc1NiwzMzc5OSwzMzc0OCwzMzc1OSwzNDM5NSwzNDUyNywzNDUyMSwzNDU0MSwzNDUxNiwzNDUyMywzNDUzMiwzNDUxMiwzNDUyNiwzNDkwMywzNTAwOSwzNTAxMCwzNDk5MywzNTIwMywzNTIyMiwzNTM4NywzNTQyNCwzNTQxMywzNTQyMiwzNTM4OCwzNTM5MywzNTQxMiwzNTQxOSwzNTQwOCwzNTM5OCwzNTM4MCwzNTM4NiwzNTM4MiwzNTQxNCwzNTkzNywzNTk3MCwzNjAxNSwzNjAyOCwzNjAxOSwzNjAyOSwzNjAzMywzNjAyNywzNjAzMiwzNjAyMCwzNjAyMywzNjAyMiwzNjAzMSwzNjAyNCwzNjIzNCwzNjIyOSwzNjIyNSwzNjMwMiwzNjMxNywzNjI5OSwzNjMxNCwzNjMwNSwzNjMwMCwzNjMxNSwzNjI5NCwzNjYwMywzNjYwMCwzNjYwNCwzNjc2NCwzNjkxMCwzNjkxNywzNjkxMywzNjkyMCwzNjkxNCwzNjkxOCwzNzEyMiwzNzEwOSwzNzEyOSwzNzExOCwzNzIxOSwzNzIyMSwzNzMyNywzNzM5NiwzNzM5NywzNzQxMSwzNzM4NSwzNzQwNiwzNzM4OSwzNzM5MiwzNzM4MywzNzM5MywzODI5MiwzODI4NywzODI4MywzODI4OSwzODI5MSwzODI5MCwzODI4NiwzODUzOCwzODU0MiwzODUzOSwzODUyNSwzODUzMywzODUzNCwzODU0MSwzODUxNCwzODUzMiwzODU5MywzODU5NywzODU5NiwzODU5OCwzODU5OSwzODYzOSwzODY0MiwzODg2MCwzODkxNywzODkxOCwzODkyMCwzOTE0MywzOTE0NiwzOTE1MSwzOTE0NSwzOTE1NCwzOTE0OSwzOTM0MiwzOTM0MSw0MDY0Myw0MDY1Myw0MDY1NywyMDA5OCwyMDY1MywyMDY2MSwyMDY1OCwyMDY1OSwyMDY3NywyMDY3MCwyMDY1MiwyMDY2MywyMDY2NywyMDY1NSwyMDY3OSwyMTExOSwyMTExMSwyMTExNywyMTIxNSwyMTIyMiwyMTIyMCwyMTIxOCwyMTIxOSwyMTI5NSwyMTk4MywyMTk5MiwyMTk3MSwyMTk5MCwyMTk2NiwyMTk4MCwyMTk1OSwyMTk2OSwyMTk4NywyMTk4OCwyMTk5OSwyMTk3OCwyMTk4NSwyMTk1NywyMTk1OCwyMTk4OSwyMTk2MSwyMjI5MCwyMjI5MSwyMjYyMiwyMjYwOSwyMjYxNiwyMjYxNSwyMjYxOCwyMjYxMiwyMjYzNSwyMjYwNCwyMjYzNywyMjYwMiwyMjYyNiwyMjYxMCwyMjYwMywyMjg4NywyMzIzMywyMzI0MSwyMzI0NCwyMzIzMCwyMzIyOSwyMzIyOCwyMzIxOSwyMzIzNCwyMzIxOCwyMzkxMywyMzkxOSwyNDE0MCwyNDE4NSwyNDI2NSwyNDI2NCwyNDMzOCwyNDQwOSwyNDQ5MiwyNDQ5NCwyNDg1OCwyNDg0NywyNDkwNCwyNDg2MywyNDgxOSwyNDg1OSwyNDgyNSwyNDgzMywyNDg0MCwyNDkxMCwyNDkwOCwyNDkwMCwyNDkwOSwyNDg5NCwyNDg4NCwyNDg3MSwyNDg0NSwyNDgzOCwyNDg4NywyNTEyMSwyNTEyMiwyNTYxOSwyNTY2MiwyNTYzMCwyNTY0MiwyNTY0NSwyNTY2MSwyNTY0NCwyNTYxNSwyNTYyOCwyNTYyMCwyNTYxMywyNTY1NCwyNTYyMiwyNTYyMywyNTYwNiwyNTk2NCwyNjAxNSwyNjAzMiwyNjI2MywyNjI0OSwyNjI0NywyNjI0OCwyNjI2MiwyNjI0NCwyNjI2NCwyNjI1MywyNjM3MSwyNzAyOCwyNjk4OSwyNjk3MCwyNjk5OSwyNjk3NiwyNjk2NCwyNjk5NywyNjkyOCwyNzAxMCwyNjk1NCwyNjk4NCwyNjk4NywyNjk3NCwyNjk2MywyNzAwMSwyNzAxNCwyNjk3MywyNjk3OSwyNjk3MSwyNzQ2MywyNzUwNiwyNzU4NCwyNzU4MywyNzYwMywyNzY0NSwyODMyMiwyODMzNSwyODM3MSwyODM0MiwyODM1NCwyODMwNCwyODMxNywyODM1OSwyODM1NywyODMyNSwyODMxMiwyODM0OCwyODM0NiwyODMzMSwyODM2OSwyODMxMCwyODMxNiwyODM1NiwyODM3MiwyODMzMCwyODMyNywyODM0MCwyOTAwNiwyOTAxNywyOTAzMywyOTAyOCwyOTAwMSwyOTAzMSwyOTAyMCwyOTAzNiwyOTAzMCwyOTAwNCwyOTAyOSwyOTAyMiwyODk5OCwyOTAzMiwyOTAxNCwyOTI0MiwyOTI2NiwyOTQ5NSwyOTUwOSwyOTUwMywyOTUwMiwyOTgwNywyOTc4NiwyOTc4MSwyOTc5MSwyOTc5MCwyOTc2MSwyOTc1OSwyOTc4NSwyOTc4NywyOTc4OCwzMDA3MCwzMDA3MiwzMDIwOCwzMDE5MiwzMDIwOSwzMDE5NCwzMDE5MywzMDIwMiwzMDIwNywzMDE5NiwzMDE5NSwzMDQzMCwzMDQzMSwzMDU1NSwzMDU3MSwzMDU2NiwzMDU1OCwzMDU2MywzMDU4NSwzMDU3MCwzMDU3MiwzMDU1NiwzMDU2NSwzMDU2OCwzMDU2MiwzMDcwMiwzMDg2MiwzMDg5NiwzMDg3MSwzMDg3MiwzMDg2MCwzMDg1NywzMDg0NCwzMDg2NSwzMDg2NywzMDg0NywzMTA5OCwzMTEwMywzMTEwNSwzMzgzNiwzMTE2NSwzMTI2MCwzMTI1OCwzMTI2NCwzMTI1MiwzMTI2MywzMTI2MiwzMTM5MSwzMTM5MiwzMTYwNywzMTY4MCwzMTU4NCwzMTU5OCwzMTU5MSwzMTkyMSwzMTkyMywzMTkyNSwzMjE0NywzMjEyMSwzMjE0NSwzMjEyOSwzMjE0MywzMjA5MSwzMjYyMiwzMjYxNywzMjYxOCwzMjYyNiwzMjY4MSwzMjY4MCwzMjY3NiwzMjg1NCwzMjg1NiwzMjkwMiwzMjkwMCwzMzEzNywzMzEzNiwzMzE0NCwzMzEyNSwzMzEzNCwzMzEzOSwzMzEzMSwzMzE0NSwzMzE0NiwzMzEyNiwzMzI4NSwzMzM1MSwzMzkyMiwzMzkxMSwzMzg1MywzMzg0MSwzMzkwOSwzMzg5NCwzMzg5OSwzMzg2NSwzMzkwMCwzMzg4MywzMzg1MiwzMzg0NSwzMzg4OSwzMzg5MSwzMzg5NywzMzkwMSwzMzg2MiwzNDM5OCwzNDM5NiwzNDM5OSwzNDU1MywzNDU3OSwzNDU2OCwzNDU2NywzNDU2MCwzNDU1OCwzNDU1NSwzNDU2MiwzNDU2MywzNDU2NiwzNDU3MCwzNDkwNSwzNTAzOSwzNTAyOCwzNTAzMywzNTAzNiwzNTAzMiwzNTAzNywzNTA0MSwzNTAxOCwzNTAyOSwzNTAyNiwzNTIyOCwzNTI5OSwzNTQzNSwzNTQ0MiwzNTQ0MywzNTQzMCwzNTQzMywzNTQ0MCwzNTQ2MywzNTQ1MiwzNTQyNywzNTQ4OCwzNTQ0MSwzNTQ2MSwzNTQzNywzNTQyNiwzNTQzOCwzNTQzNiwzNTQ0OSwzNTQ1MSwzNTM5MCwzNTQzMiwzNTkzOCwzNTk3OCwzNTk3NywzNjA0MiwzNjAzOSwzNjA0MCwzNjAzNiwzNjAxOCwzNjAzNSwzNjAzNCwzNjAzNywzNjMyMSwzNjMxOSwzNjMyOCwzNjMzNSwzNjMzOSwzNjM0NiwzNjMzMCwzNjMyNCwzNjMyNiwzNjUzMCwzNjYxMSwzNjYxNywzNjYwNiwzNjYxOCwzNjc2NywzNjc4NiwzNjkzOSwzNjkzOCwzNjk0NywzNjkzMCwzNjk0OCwzNjkyNCwzNjk0OSwzNjk0NCwzNjkzNSwzNjk0MywzNjk0MiwzNjk0MSwzNjk0NSwzNjkyNiwzNjkyOSwzNzEzOCwzNzE0MywzNzIyOCwzNzIyNiwzNzIyNSwzNzMyMSwzNzQzMSwzNzQ2MywzNzQzMiwzNzQzNywzNzQ0MCwzNzQzOCwzNzQ2NywzNzQ1MSwzNzQ3NiwzNzQ1NywzNzQyOCwzNzQ0OSwzNzQ1MywzNzQ0NSwzNzQzMywzNzQzOSwzNzQ2NiwzODI5NiwzODU1MiwzODU0OCwzODU0OSwzODYwNSwzODYwMywzODYwMSwzODYwMiwzODY0NywzODY1MSwzODY0OSwzODY0NiwzODc0MiwzODc3MiwzODc3NCwzODkyOCwzODkyOSwzODkzMSwzODkyMiwzODkzMCwzODkyNCwzOTE2NCwzOTE1NiwzOTE2NSwzOTE2NiwzOTM0NywzOTM0NSwzOTM0OCwzOTY0OSw0MDE2OSw0MDU3OCw0MDcxOCw0MDcyMyw0MDczNiwyMDcxMSwyMDcxOCwyMDcwOSwyMDY5NCwyMDcxNywyMDY5OCwyMDY5MywyMDY4NywyMDY4OSwyMDcyMSwyMDY4NiwyMDcxMywyMDgzNCwyMDk3OSwyMTEyMywyMTEyMiwyMTI5NywyMTQyMSwyMjAxNCwyMjAxNiwyMjA0MywyMjAzOSwyMjAxMywyMjAzNiwyMjAyMiwyMjAyNSwyMjAyOSwyMjAzMCwyMjAwNywyMjAzOCwyMjA0NywyMjAyNCwyMjAzMiwyMjAwNiwyMjI5NiwyMjI5NCwyMjY0NSwyMjY1NCwyMjY1OSwyMjY3NSwyMjY2NiwyMjY0OSwyMjY2MSwyMjY1MywyMjc4MSwyMjgyMSwyMjgxOCwyMjgyMCwyMjg5MCwyMjg4OSwyMzI2NSwyMzI3MCwyMzI3MywyMzI1NSwyMzI1NCwyMzI1NiwyMzI2NywyMzQxMywyMzUxOCwyMzUyNywyMzUyMSwyMzUyNSwyMzUyNiwyMzUyOCwyMzUyMiwyMzUyNCwyMzUxOSwyMzU2NSwyMzY1MCwyMzk0MCwyMzk0MywyNDE1NSwyNDE2MywyNDE0OSwyNDE1MSwyNDE0OCwyNDI3NSwyNDI3OCwyNDMzMCwyNDM5MCwyNDQzMiwyNDUwNSwyNDkwMywyNDg5NSwyNDkwNywyNDk1MSwyNDkzMCwyNDkzMSwyNDkyNywyNDkyMiwyNDkyMCwyNDk0OSwyNTEzMCwyNTczNSwyNTY4OCwyNTY4NCwyNTc2NCwyNTcyMCwyNTY5NSwyNTcyMiwyNTY4MSwyNTcwMywyNTY1MiwyNTcwOSwyNTcyMywyNTk3MCwyNjAxNywyNjA3MSwyNjA3MCwyNjI3NCwyNjI4MCwyNjI2OSwyNzAzNiwyNzA0OCwyNzAyOSwyNzA3MywyNzA1NCwyNzA5MSwyNzA4MywyNzAzNSwyNzA2MywyNzA2NywyNzA1MSwyNzA2MCwyNzA4OCwyNzA4NSwyNzA1MywyNzA4NCwyNzA0NiwyNzA3NSwyNzA0MywyNzQ2NSwyNzQ2OCwyNzY5OSwyODQ2NywyODQzNiwyODQxNCwyODQzNSwyODQwNCwyODQ1NywyODQ3OCwyODQ0OCwyODQ2MCwyODQzMSwyODQxOCwyODQ1MCwyODQxNSwyODM5OSwyODQyMiwyODQ2NSwyODQ3MiwyODQ2NiwyODQ1MSwyODQzNywyODQ1OSwyODQ2MywyODU1MiwyODQ1OCwyODM5NiwyODQxNywyODQwMiwyODM2NCwyODQwNywyOTA3NiwyOTA4MSwyOTA1MywyOTA2NiwyOTA2MCwyOTA3NCwyOTI0NiwyOTMzMCwyOTMzNCwyOTUwOCwyOTUyMCwyOTc5NiwyOTc5NSwyOTgwMiwyOTgwOCwyOTgwNSwyOTk1NiwzMDA5NywzMDI0NywzMDIyMSwzMDIxOSwzMDIxNywzMDIyNywzMDQzMywzMDQzNSwzMDU5NiwzMDU4OSwzMDU5MSwzMDU2MSwzMDkxMywzMDg3OSwzMDg4NywzMDg5OSwzMDg4OSwzMDg4MywzMTExOCwzMTExOSwzMTExNywzMTI3OCwzMTI4MSwzMTQwMiwzMTQwMSwzMTQ2OSwzMTQ3MSwzMTY0OSwzMTYzNywzMTYyNywzMTYwNSwzMTYzOSwzMTY0NSwzMTYzNiwzMTYzMSwzMTY3MiwzMTYyMywzMTYyMCwzMTkyOSwzMTkzMywzMTkzNCwzMjE4NywzMjE3NiwzMjE1NiwzMjE4OSwzMjE5MCwzMjE2MCwzMjIwMiwzMjE4MCwzMjE3OCwzMjE3NywzMjE4NiwzMjE2MiwzMjE5MSwzMjE4MSwzMjE4NCwzMjE3MywzMjIxMCwzMjE5OSwzMjE3MiwzMjYyNCwzMjczNiwzMjczNywzMjczNSwzMjg2MiwzMjg1OCwzMjkwMywzMzEwNCwzMzE1MiwzMzE2NywzMzE2MCwzMzE2MiwzMzE1MSwzMzE1NCwzMzI1NSwzMzI3NCwzMzI4NywzMzMwMCwzMzMxMCwzMzM1NSwzMzk5MywzMzk4MywzMzk5MCwzMzk4OCwzMzk0NSwzMzk1MCwzMzk3MCwzMzk0OCwzMzk5NSwzMzk3NiwzMzk4NCwzNDAwMywzMzkzNiwzMzk4MCwzNDAwMSwzMzk5NCwzNDYyMywzNDU4OCwzNDYxOSwzNDU5NCwzNDU5NywzNDYxMiwzNDU4NCwzNDY0NSwzNDYxNSwzNDYwMSwzNTA1OSwzNTA3NCwzNTA2MCwzNTA2NSwzNTA2NCwzNTA2OSwzNTA0OCwzNTA5OCwzNTA1NSwzNTQ5NCwzNTQ2OCwzNTQ4NiwzNTQ5MSwzNTQ2OSwzNTQ4OSwzNTQ3NSwzNTQ5MiwzNTQ5OCwzNTQ5MywzNTQ5NiwzNTQ4MCwzNTQ3MywzNTQ4MiwzNTQ5NSwzNTk0NiwzNTk4MSwzNTk4MCwzNjA1MSwzNjA0OSwzNjA1MCwzNjIwMywzNjI0OSwzNjI0NSwzNjM0OCwzNjYyOCwzNjYyNiwzNjYyOSwzNjYyNywzNjc3MSwzNjk2MCwzNjk1MiwzNjk1NiwzNjk2MywzNjk1MywzNjk1OCwzNjk2MiwzNjk1NywzNjk1NSwzNzE0NSwzNzE0NCwzNzE1MCwzNzIzNywzNzI0MCwzNzIzOSwzNzIzNiwzNzQ5NiwzNzUwNCwzNzUwOSwzNzUyOCwzNzUyNiwzNzQ5OSwzNzUyMywzNzUzMiwzNzU0NCwzNzUwMCwzNzUyMSwzODMwNSwzODMxMiwzODMxMywzODMwNywzODMwOSwzODMwOCwzODU1MywzODU1NiwzODU1NSwzODYwNCwzODYxMCwzODY1NiwzODc4MCwzODc4OSwzODkwMiwzODkzNSwzODkzNiwzOTA4NywzOTA4OSwzOTE3MSwzOTE3MywzOTE4MCwzOTE3NywzOTM2MSwzOTU5OSwzOTYwMCwzOTY1NCwzOTc0NSwzOTc0Niw0MDE4MCw0MDE4Miw0MDE3OSw0MDYzNiw0MDc2Myw0MDc3OCwyMDc0MCwyMDczNiwyMDczMSwyMDcyNSwyMDcyOSwyMDczOCwyMDc0NCwyMDc0NSwyMDc0MSwyMDk1NiwyMTEyNywyMTEyOCwyMTEyOSwyMTEzMywyMTEzMCwyMTIzMiwyMTQyNiwyMjA2MiwyMjA3NSwyMjA3MywyMjA2NiwyMjA3OSwyMjA2OCwyMjA1NywyMjA5OSwyMjA5NCwyMjEwMywyMjEzMiwyMjA3MCwyMjA2MywyMjA2NCwyMjY1NiwyMjY4NywyMjY4NiwyMjcwNywyMjY4NCwyMjcwMiwyMjY5NywyMjY5NCwyMjg5MywyMzMwNSwyMzI5MSwyMzMwNywyMzI4NSwyMzMwOCwyMzMwNCwyMzUzNCwyMzUzMiwyMzUyOSwyMzUzMSwyMzY1MiwyMzY1MywyMzk2NSwyMzk1NiwyNDE2MiwyNDE1OSwyNDE2MSwyNDI5MCwyNDI4MiwyNDI4NywyNDI4NSwyNDI5MSwyNDI4OCwyNDM5MiwyNDQzMywyNDUwMywyNDUwMSwyNDk1MCwyNDkzNSwyNDk0MiwyNDkyNSwyNDkxNywyNDk2MiwyNDk1NiwyNDk0NCwyNDkzOSwyNDk1OCwyNDk5OSwyNDk3NiwyNTAwMywyNDk3NCwyNTAwNCwyNDk4NiwyNDk5NiwyNDk4MCwyNTAwNiwyNTEzNCwyNTcwNSwyNTcxMSwyNTcyMSwyNTc1OCwyNTc3OCwyNTczNiwyNTc0NCwyNTc3NiwyNTc2NSwyNTc0NywyNTc0OSwyNTc2OSwyNTc0NiwyNTc3NCwyNTc3MywyNTc3MSwyNTc1NCwyNTc3MiwyNTc1MywyNTc2MiwyNTc3OSwyNTk3MywyNTk3NSwyNTk3NiwyNjI4NiwyNjI4MywyNjI5MiwyNjI4OSwyNzE3MSwyNzE2NywyNzExMiwyNzEzNywyNzE2NiwyNzE2MSwyNzEzMywyNzE2OSwyNzE1NSwyNzE0NiwyNzEyMywyNzEzOCwyNzE0MSwyNzExNywyNzE1MywyNzQ3MiwyNzQ3MCwyNzU1NiwyNzU4OSwyNzU5MCwyODQ3OSwyODU0MCwyODU0OCwyODQ5NywyODUxOCwyODUwMCwyODU1MCwyODUyNSwyODUwNywyODUzNiwyODUyNiwyODU1OCwyODUzOCwyODUyOCwyODUxNiwyODU2NywyODUwNCwyODM3MywyODUyNywyODUxMiwyODUxMSwyOTA4NywyOTEwMCwyOTEwNSwyOTA5NiwyOTI3MCwyOTMzOSwyOTUxOCwyOTUyNywyOTgwMSwyOTgzNSwyOTgyNywyOTgyMiwyOTgyNCwzMDA3OSwzMDI0MCwzMDI0OSwzMDIzOSwzMDI0NCwzMDI0NiwzMDI0MSwzMDI0MiwzMDM2MiwzMDM5NCwzMDQzNiwzMDYwNiwzMDU5OSwzMDYwNCwzMDYwOSwzMDYwMywzMDkyMywzMDkxNywzMDkwNiwzMDkyMiwzMDkxMCwzMDkzMywzMDkwOCwzMDkyOCwzMTI5NSwzMTI5MiwzMTI5NiwzMTI5MywzMTI4NywzMTI5MSwzMTQwNywzMTQwNiwzMTY2MSwzMTY2NSwzMTY4NCwzMTY2OCwzMTY4NiwzMTY4NywzMTY4MSwzMTY0OCwzMTY5MiwzMTk0NiwzMjIyNCwzMjI0NCwzMjIzOSwzMjI1MSwzMjIxNiwzMjIzNiwzMjIyMSwzMjIzMiwzMjIyNywzMjIxOCwzMjIyMiwzMjIzMywzMjE1OCwzMjIxNywzMjI0MiwzMjI0OSwzMjYyOSwzMjYzMSwzMjY4NywzMjc0NSwzMjgwNiwzMzE3OSwzMzE4MCwzMzE4MSwzMzE4NCwzMzE3OCwzMzE3NiwzNDA3MSwzNDEwOSwzNDA3NCwzNDAzMCwzNDA5MiwzNDA5MywzNDA2NywzNDA2NSwzNDA4MywzNDA4MSwzNDA2OCwzNDAyOCwzNDA4NSwzNDA0NywzNDA1NCwzNDY5MCwzNDY3NiwzNDY3OCwzNDY1NiwzNDY2MiwzNDY4MCwzNDY2NCwzNDY0OSwzNDY0NywzNDYzNiwzNDY0MywzNDkwNywzNDkwOSwzNTA4OCwzNTA3OSwzNTA5MCwzNTA5MSwzNTA5MywzNTA4MiwzNTUxNiwzNTUzOCwzNTUyNywzNTUyNCwzNTQ3NywzNTUzMSwzNTU3NiwzNTUwNiwzNTUyOSwzNTUyMiwzNTUxOSwzNTUwNCwzNTU0MiwzNTUzMywzNTUxMCwzNTUxMywzNTU0NywzNTkxNiwzNTkxOCwzNTk0OCwzNjA2NCwzNjA2MiwzNjA3MCwzNjA2OCwzNjA3NiwzNjA3NywzNjA2NiwzNjA2NywzNjA2MCwzNjA3NCwzNjA2NSwzNjIwNSwzNjI1NSwzNjI1OSwzNjM5NSwzNjM2OCwzNjM4MSwzNjM4NiwzNjM2NywzNjM5MywzNjM4MywzNjM4NSwzNjM4MiwzNjUzOCwzNjYzNywzNjYzNSwzNjYzOSwzNjY0OSwzNjY0NiwzNjY1MCwzNjYzNiwzNjYzOCwzNjY0NSwzNjk2OSwzNjk3NCwzNjk2OCwzNjk3MywzNjk4MywzNzE2OCwzNzE2NSwzNzE1OSwzNzE2OSwzNzI1NSwzNzI1NywzNzI1OSwzNzI1MSwzNzU3MywzNzU2MywzNzU1OSwzNzYxMCwzNzU0OCwzNzYwNCwzNzU2OSwzNzU1NSwzNzU2NCwzNzU4NiwzNzU3NSwzNzYxNiwzNzU1NCwzODMxNywzODMyMSwzODY2MCwzODY2MiwzODY2MywzODY2NSwzODc1MiwzODc5NywzODc5NSwzODc5OSwzODk0NSwzODk1NSwzODk0MCwzOTA5MSwzOTE3OCwzOTE4NywzOTE4NiwzOTE5MiwzOTM4OSwzOTM3NiwzOTM5MSwzOTM4NywzOTM3NywzOTM4MSwzOTM3OCwzOTM4NSwzOTYwNywzOTY2MiwzOTY2MywzOTcxOSwzOTc0OSwzOTc0OCwzOTc5OSwzOTc5MSw0MDE5OCw0MDIwMSw0MDE5NSw0MDYxNyw0MDYzOCw0MDY1NCwyMjY5Niw0MDc4NiwyMDc1NCwyMDc2MCwyMDc1NiwyMDc1MiwyMDc1NywyMDg2NCwyMDkwNiwyMDk1NywyMTEzNywyMTEzOSwyMTIzNSwyMjEwNSwyMjEyMywyMjEzNywyMjEyMSwyMjExNiwyMjEzNiwyMjEyMiwyMjEyMCwyMjExNywyMjEyOSwyMjEyNywyMjEyNCwyMjExNCwyMjEzNCwyMjcyMSwyMjcxOCwyMjcyNywyMjcyNSwyMjg5NCwyMzMyNSwyMzM0OCwyMzQxNiwyMzUzNiwyMzU2NiwyNDM5NCwyNTAxMCwyNDk3NywyNTAwMSwyNDk3MCwyNTAzNywyNTAxNCwyNTAyMiwyNTAzNCwyNTAzMiwyNTEzNiwyNTc5NywyNTc5MywyNTgwMywyNTc4NywyNTc4OCwyNTgxOCwyNTc5NiwyNTc5OSwyNTc5NCwyNTgwNSwyNTc5MSwyNTgxMCwyNTgxMiwyNTc5MCwyNTk3MiwyNjMxMCwyNjMxMywyNjI5NywyNjMwOCwyNjMxMSwyNjI5NiwyNzE5NywyNzE5MiwyNzE5NCwyNzIyNSwyNzI0MywyNzIyNCwyNzE5MywyNzIwNCwyNzIzNCwyNzIzMywyNzIxMSwyNzIwNywyNzE4OSwyNzIzMSwyNzIwOCwyNzQ4MSwyNzUxMSwyNzY1MywyODYxMCwyODU5MywyODU3NywyODYxMSwyODU4MCwyODYwOSwyODU4MywyODU5NSwyODYwOCwyODYwMSwyODU5OCwyODU4MiwyODU3NiwyODU5NiwyOTExOCwyOTEyOSwyOTEzNiwyOTEzOCwyOTEyOCwyOTE0MSwyOTExMywyOTEzNCwyOTE0NSwyOTE0OCwyOTEyMywyOTEyNCwyOTU0NCwyOTg1MiwyOTg1OSwyOTg0OCwyOTg1NSwyOTg1NCwyOTkyMiwyOTk2NCwyOTk2NSwzMDI2MCwzMDI2NCwzMDI2NiwzMDQzOSwzMDQzNywzMDYyNCwzMDYyMiwzMDYyMywzMDYyOSwzMDk1MiwzMDkzOCwzMDk1NiwzMDk1MSwzMTE0MiwzMTMwOSwzMTMxMCwzMTMwMiwzMTMwOCwzMTMwNywzMTQxOCwzMTcwNSwzMTc2MSwzMTY4OSwzMTcxNiwzMTcwNywzMTcxMywzMTcyMSwzMTcxOCwzMTk1NywzMTk1OCwzMjI2NiwzMjI3MywzMjI2NCwzMjI4MywzMjI5MSwzMjI4NiwzMjI4NSwzMjI2NSwzMjI3MiwzMjYzMywzMjY5MCwzMjc1MiwzMjc1MywzMjc1MCwzMjgwOCwzMzIwMywzMzE5MywzMzE5MiwzMzI3NSwzMzI4OCwzMzM2OCwzMzM2OSwzNDEyMiwzNDEzNywzNDEyMCwzNDE1MiwzNDE1MywzNDExNSwzNDEyMSwzNDE1NywzNDE1NCwzNDE0MiwzNDY5MSwzNDcxOSwzNDcxOCwzNDcyMiwzNDcwMSwzNDkxMywzNTExNCwzNTEyMiwzNTEwOSwzNTExNSwzNTEwNSwzNTI0MiwzNTIzOCwzNTU1OCwzNTU3OCwzNTU2MywzNTU2OSwzNTU4NCwzNTU0OCwzNTU1OSwzNTU2NiwzNTU4MiwzNTU4NSwzNTU4NiwzNTU3NSwzNTU2NSwzNTU3MSwzNTU3NCwzNTU4MCwzNTk0NywzNTk0OSwzNTk4NywzNjA4NCwzNjQyMCwzNjQwMSwzNjQwNCwzNjQxOCwzNjQwOSwzNjQwNSwzNjY2NywzNjY1NSwzNjY2NCwzNjY1OSwzNjc3NiwzNjc3NCwzNjk4MSwzNjk4MCwzNjk4NCwzNjk3OCwzNjk4OCwzNjk4NiwzNzE3MiwzNzI2NiwzNzY2NCwzNzY4NiwzNzYyNCwzNzY4MywzNzY3OSwzNzY2NiwzNzYyOCwzNzY3NSwzNzYzNiwzNzY1OCwzNzY0OCwzNzY3MCwzNzY2NSwzNzY1MywzNzY3OCwzNzY1NywzODMzMSwzODU2NywzODU2OCwzODU3MCwzODYxMywzODY3MCwzODY3MywzODY3OCwzODY2OSwzODY3NSwzODY3MSwzODc0NywzODc0OCwzODc1OCwzODgwOCwzODk2MCwzODk2OCwzODk3MSwzODk2NywzODk1NywzODk2OSwzODk0OCwzOTE4NCwzOTIwOCwzOTE5OCwzOTE5NSwzOTIwMSwzOTE5NCwzOTQwNSwzOTM5NCwzOTQwOSwzOTYwOCwzOTYxMiwzOTY3NSwzOTY2MSwzOTcyMCwzOTgyNSw0MDIxMyw0MDIyNyw0MDIzMCw0MDIzMiw0MDIxMCw0MDIxOSw0MDY2NCw0MDY2MCw0MDg0NSw0MDg2MCwyMDc3OCwyMDc2NywyMDc2OSwyMDc4NiwyMTIzNywyMjE1OCwyMjE0NCwyMjE2MCwyMjE0OSwyMjE1MSwyMjE1OSwyMjc0MSwyMjczOSwyMjczNywyMjczNCwyMzM0NCwyMzMzOCwyMzMzMiwyMzQxOCwyMzYwNywyMzY1NiwyMzk5NiwyMzk5NCwyMzk5NywyMzk5MiwyNDE3MSwyNDM5NiwyNDUwOSwyNTAzMywyNTAyNiwyNTAzMSwyNTA2MiwyNTAzNSwyNTEzOCwyNTE0MCwyNTgwNiwyNTgwMiwyNTgxNiwyNTgyNCwyNTg0MCwyNTgzMCwyNTgzNiwyNTg0MSwyNTgyNiwyNTgzNywyNTk4NiwyNTk4NywyNjMyOSwyNjMyNiwyNzI2NCwyNzI4NCwyNzI2OCwyNzI5OCwyNzI5MiwyNzM1NSwyNzI5OSwyNzI2MiwyNzI4NywyNzI4MCwyNzI5NiwyNzQ4NCwyNzU2NiwyNzYxMCwyNzY1NiwyODYzMiwyODY1NywyODYzOSwyODY0MCwyODYzNSwyODY0NCwyODY1MSwyODY1NSwyODU0NCwyODY1MiwyODY0MSwyODY0OSwyODYyOSwyODY1NCwyODY1NiwyOTE1OSwyOTE1MSwyOTE2NiwyOTE1OCwyOTE1NywyOTE2NSwyOTE2NCwyOTE3MiwyOTE1MiwyOTIzNywyOTI1NCwyOTU1MiwyOTU1NCwyOTg2NSwyOTg3MiwyOTg2MiwyOTg2NCwzMDI3OCwzMDI3NCwzMDI4NCwzMDQ0MiwzMDY0MywzMDYzNCwzMDY0MCwzMDYzNiwzMDYzMSwzMDYzNywzMDcwMywzMDk2NywzMDk3MCwzMDk2NCwzMDk1OSwzMDk3NywzMTE0MywzMTE0NiwzMTMxOSwzMTQyMywzMTc1MSwzMTc1NywzMTc0MiwzMTczNSwzMTc1NiwzMTcxMiwzMTk2OCwzMTk2NCwzMTk2NiwzMTk3MCwzMTk2NywzMTk2MSwzMTk2NSwzMjMwMiwzMjMxOCwzMjMyNiwzMjMxMSwzMjMwNiwzMjMyMywzMjI5OSwzMjMxNywzMjMwNSwzMjMyNSwzMjMyMSwzMjMwOCwzMjMxMywzMjMyOCwzMjMwOSwzMjMxOSwzMjMwMywzMjU4MCwzMjc1NSwzMjc2NCwzMjg4MSwzMjg4MiwzMjg4MCwzMjg3OSwzMjg4MywzMzIyMiwzMzIxOSwzMzIxMCwzMzIxOCwzMzIxNiwzMzIxNSwzMzIxMywzMzIyNSwzMzIxNCwzMzI1NiwzMzI4OSwzMzM5MywzNDIxOCwzNDE4MCwzNDE3NCwzNDIwNCwzNDE5MywzNDE5NiwzNDIyMywzNDIwMywzNDE4MywzNDIxNiwzNDE4NiwzNDQwNywzNDc1MiwzNDc2OSwzNDczOSwzNDc3MCwzNDc1OCwzNDczMSwzNDc0NywzNDc0NiwzNDc2MCwzNDc2MywzNTEzMSwzNTEyNiwzNTE0MCwzNTEyOCwzNTEzMywzNTI0NCwzNTU5OCwzNTYwNywzNTYwOSwzNTYxMSwzNTU5NCwzNTYxNiwzNTYxMywzNTU4OCwzNTYwMCwzNTkwNSwzNTkwMywzNTk1NSwzNjA5MCwzNjA5MywzNjA5MiwzNjA4OCwzNjA5MSwzNjI2NCwzNjQyNSwzNjQyNywzNjQyNCwzNjQyNiwzNjY3NiwzNjY3MCwzNjY3NCwzNjY3NywzNjY3MSwzNjk5MSwzNjk4OSwzNjk5NiwzNjk5MywzNjk5NCwzNjk5MiwzNzE3NywzNzI4MywzNzI3OCwzNzI3NiwzNzcwOSwzNzc2MiwzNzY3MiwzNzc0OSwzNzcwNiwzNzczMywzNzcwNywzNzY1NiwzNzc1OCwzNzc0MCwzNzcyMywzNzc0NCwzNzcyMiwzNzcxNiwzODM0NiwzODM0NywzODM0OCwzODM0NCwzODM0MiwzODU3NywzODU4NCwzODYxNCwzODY4NCwzODY4NiwzODgxNiwzODg2NywzODk4MiwzOTA5NCwzOTIyMSwzOTQyNSwzOTQyMywzOTg1NCwzOTg1MSwzOTg1MCwzOTg1Myw0MDI1MSw0MDI1NSw0MDU4Nyw0MDY1NSw0MDY3MCw0MDY2OCw0MDY2OSw0MDY2Nyw0MDc2Niw0MDc3OSwyMTQ3NCwyMjE2NSwyMjE5MCwyMjc0NSwyMjc0NCwyMzM1MiwyNDQxMywyNTA1OSwyNTEzOSwyNTg0NCwyNTg0MiwyNTg1NCwyNTg2MiwyNTg1MCwyNTg1MSwyNTg0NywyNjAzOSwyNjMzMiwyNjQwNiwyNzMxNSwyNzMwOCwyNzMzMSwyNzMyMywyNzMyMCwyNzMzMCwyNzMxMCwyNzMxMSwyNzQ4NywyNzUxMiwyNzU2NywyODY4MSwyODY4MywyODY3MCwyODY3OCwyODY2NiwyODY4OSwyODY4NywyOTE3OSwyOTE4MCwyOTE4MiwyOTE3NiwyOTU1OSwyOTU1NywyOTg2MywyOTg4NywyOTk3MywzMDI5NCwzMDI5NiwzMDI5MCwzMDY1MywzMDY1NSwzMDY1MSwzMDY1MiwzMDk5MCwzMTE1MCwzMTMyOSwzMTMzMCwzMTMyOCwzMTQyOCwzMTQyOSwzMTc4NywzMTc4MywzMTc4NiwzMTc3NCwzMTc3OSwzMTc3NywzMTk3NSwzMjM0MCwzMjM0MSwzMjM1MCwzMjM0NiwzMjM1MywzMjMzOCwzMjM0NSwzMjU4NCwzMjc2MSwzMjc2MywzMjg4NywzMjg4NiwzMzIyOSwzMzIzMSwzMzI5MCwzNDI1NSwzNDIxNywzNDI1MywzNDI1NiwzNDI0OSwzNDIyNCwzNDIzNCwzNDIzMywzNDIxNCwzNDc5OSwzNDc5NiwzNDgwMiwzNDc4NCwzNTIwNiwzNTI1MCwzNTMxNiwzNTYyNCwzNTY0MSwzNTYyOCwzNTYyNywzNTkyMCwzNjEwMSwzNjQ0MSwzNjQ1MSwzNjQ1NCwzNjQ1MiwzNjQ0NywzNjQzNywzNjU0NCwzNjY4MSwzNjY4NSwzNjk5OSwzNjk5NSwzNzAwMCwzNzI5MSwzNzI5MiwzNzMyOCwzNzc4MCwzNzc3MCwzNzc4MiwzNzc5NCwzNzgxMSwzNzgwNiwzNzgwNCwzNzgwOCwzNzc4NCwzNzc4NiwzNzc4MywzODM1NiwzODM1OCwzODM1MiwzODM1NywzODYyNiwzODYyMCwzODYxNywzODYxOSwzODYyMiwzODY5MiwzODgxOSwzODgyMiwzODgyOSwzODkwNSwzODk4OSwzODk5MSwzODk4OCwzODk5MCwzODk5NSwzOTA5OCwzOTIzMCwzOTIzMSwzOTIyOSwzOTIxNCwzOTMzMywzOTQzOCwzOTYxNywzOTY4MywzOTY4NiwzOTc1OSwzOTc1OCwzOTc1NywzOTg4MiwzOTg4MSwzOTkzMywzOTg4MCwzOTg3Miw0MDI3Myw0MDI4NSw0MDI4OCw0MDY3Miw0MDcyNSw0MDc0OCwyMDc4NywyMjE4MSwyMjc1MCwyMjc1MSwyMjc1NCwyMzU0MSw0MDg0OCwyNDMwMCwyNTA3NCwyNTA3OSwyNTA3OCwyNTA3NywyNTg1NiwyNTg3MSwyNjMzNiwyNjMzMywyNzM2NSwyNzM1NywyNzM1NCwyNzM0NywyODY5OSwyODcwMywyODcxMiwyODY5OCwyODcwMSwyODY5MywyODY5NiwyOTE5MCwyOTE5NywyOTI3MiwyOTM0NiwyOTU2MCwyOTU2MiwyOTg4NSwyOTg5OCwyOTkyMywzMDA4NywzMDA4NiwzMDMwMywzMDMwNSwzMDY2MywzMTAwMSwzMTE1MywzMTMzOSwzMTMzNywzMTgwNiwzMTgwNywzMTgwMCwzMTgwNSwzMTc5OSwzMTgwOCwzMjM2MywzMjM2NSwzMjM3NywzMjM2MSwzMjM2MiwzMjY0NSwzMjM3MSwzMjY5NCwzMjY5NywzMjY5NiwzMzI0MCwzNDI4MSwzNDI2OSwzNDI4MiwzNDI2MSwzNDI3NiwzNDI3NywzNDI5NSwzNDgxMSwzNDgyMSwzNDgyOSwzNDgwOSwzNDgxNCwzNTE2OCwzNTE2NywzNTE1OCwzNTE2NiwzNTY0OSwzNTY3NiwzNTY3MiwzNTY1NywzNTY3NCwzNTY2MiwzNTY2MywzNTY1NCwzNTY3MywzNjEwNCwzNjEwNiwzNjQ3NiwzNjQ2NiwzNjQ4NywzNjQ3MCwzNjQ2MCwzNjQ3NCwzNjQ2OCwzNjY5MiwzNjY4NiwzNjc4MSwzNzAwMiwzNzAwMywzNzI5NywzNzI5NCwzNzg1NywzNzg0MSwzNzg1NSwzNzgyNywzNzgzMiwzNzg1MiwzNzg1MywzNzg0NiwzNzg1OCwzNzgzNywzNzg0OCwzNzg2MCwzNzg0NywzNzg2NCwzODM2NCwzODU4MCwzODYyNywzODY5OCwzODY5NSwzODc1MywzODg3NiwzODkwNywzOTAwNiwzOTAwMCwzOTAwMywzOTEwMCwzOTIzNywzOTI0MSwzOTQ0NiwzOTQ0OSwzOTY5MywzOTkxMiwzOTkxMSwzOTg5NCwzOTg5OSw0MDMyOSw0MDI4OSw0MDMwNiw0MDI5OCw0MDMwMCw0MDU5NCw0MDU5OSw0MDU5NSw0MDYyOCwyMTI0MCwyMjE4NCwyMjE5OSwyMjE5OCwyMjE5NiwyMjIwNCwyMjc1NiwyMzM2MCwyMzM2MywyMzQyMSwyMzU0MiwyNDAwOSwyNTA4MCwyNTA4MiwyNTg4MCwyNTg3NiwyNTg4MSwyNjM0MiwyNjQwNywyNzM3MiwyODczNCwyODcyMCwyODcyMiwyOTIwMCwyOTU2MywyOTkwMywzMDMwNiwzMDMwOSwzMTAxNCwzMTAxOCwzMTAyMCwzMTAxOSwzMTQzMSwzMTQ3OCwzMTgyMCwzMTgxMSwzMTgyMSwzMTk4MywzMTk4NCwzNjc4MiwzMjM4MSwzMjM4MCwzMjM4NiwzMjU4OCwzMjc2OCwzMzI0MiwzMzM4MiwzNDI5OSwzNDI5NywzNDMyMSwzNDI5OCwzNDMxMCwzNDMxNSwzNDMxMSwzNDMxNCwzNDgzNiwzNDgzNywzNTE3MiwzNTI1OCwzNTMyMCwzNTY5NiwzNTY5MiwzNTY4NiwzNTY5NSwzNTY3OSwzNTY5MSwzNjExMSwzNjEwOSwzNjQ4OSwzNjQ4MSwzNjQ4NSwzNjQ4MiwzNzMwMCwzNzMyMywzNzkxMiwzNzg5MSwzNzg4NSwzODM2OSwzODcwNCwzOTEwOCwzOTI1MCwzOTI0OSwzOTMzNiwzOTQ2NywzOTQ3MiwzOTQ3OSwzOTQ3NywzOTk1NSwzOTk0OSw0MDU2OSw0MDYyOSw0MDY4MCw0MDc1MSw0MDc5OSw0MDgwMyw0MDgwMSwyMDc5MSwyMDc5MiwyMjIwOSwyMjIwOCwyMjIxMCwyMjgwNCwyMzY2MCwyNDAxMywyNTA4NCwyNTA4NiwyNTg4NSwyNTg4NCwyNjAwNSwyNjM0NSwyNzM4NywyNzM5NiwyNzM4NiwyNzU3MCwyODc0OCwyOTIxMSwyOTM1MSwyOTkxMCwyOTkwOCwzMDMxMywzMDY3NSwzMTgyNCwzMjM5OSwzMjM5NiwzMjcwMCwzNDMyNywzNDM0OSwzNDMzMCwzNDg1MSwzNDg1MCwzNDg0OSwzNDg0NywzNTE3OCwzNTE4MCwzNTI2MSwzNTcwMCwzNTcwMywzNTcwOSwzNjExNSwzNjQ5MCwzNjQ5MywzNjQ5MSwzNjcwMywzNjc4MywzNzMwNiwzNzkzNCwzNzkzOSwzNzk0MSwzNzk0NiwzNzk0NCwzNzkzOCwzNzkzMSwzODM3MCwzODcxMiwzODcxMywzODcwNiwzODkxMSwzOTAxNSwzOTAxMywzOTI1NSwzOTQ5MywzOTQ5MSwzOTQ4OCwzOTQ4NiwzOTYzMSwzOTc2NCwzOTc2MSwzOTk4MSwzOTk3Myw0MDM2Nyw0MDM3Miw0MDM4Niw0MDM3Niw0MDYwNSw0MDY4Nyw0MDcyOSw0MDc5Niw0MDgwNiw0MDgwNywyMDc5NiwyMDc5NSwyMjIxNiwyMjIxOCwyMjIxNywyMzQyMywyNDAyMCwyNDAxOCwyNDM5OCwyNTA4NywyNTg5MiwyNzQwMiwyNzQ4OSwyODc1MywyODc2MCwyOTU2OCwyOTkyNCwzMDA5MCwzMDMxOCwzMDMxNiwzMTE1NSwzMTg0MCwzMTgzOSwzMjg5NCwzMjg5MywzMzI0NywzNTE4NiwzNTE4MywzNTMyNCwzNTcxMiwzNjExOCwzNjExOSwzNjQ5NywzNjQ5OSwzNjcwNSwzNzE5MiwzNzk1NiwzNzk2OSwzNzk3MCwzODcxNywzODcxOCwzODg1MSwzODg0OSwzOTAxOSwzOTI1MywzOTUwOSwzOTUwMSwzOTYzNCwzOTcwNiw0MDAwOSwzOTk4NSwzOTk5OCwzOTk5NSw0MDQwMyw0MDQwNyw0MDc1Niw0MDgxMiw0MDgxMCw0MDg1MiwyMjIyMCwyNDAyMiwyNTA4OCwyNTg5MSwyNTg5OSwyNTg5OCwyNjM0OCwyNzQwOCwyOTkxNCwzMTQzNCwzMTg0NCwzMTg0MywzMTg0NSwzMjQwMywzMjQwNiwzMjQwNCwzMzI1MCwzNDM2MCwzNDM2NywzNDg2NSwzNTcyMiwzNzAwOCwzNzAwNywzNzk4NywzNzk4NCwzNzk4OCwzODc2MCwzOTAyMywzOTI2MCwzOTUxNCwzOTUxNSwzOTUxMSwzOTYzNSwzOTYzNiwzOTYzMyw0MDAyMCw0MDAyMyw0MDAyMiw0MDQyMSw0MDYwNyw0MDY5MiwyMjIyNSwyMjc2MSwyNTkwMCwyODc2NiwzMDMyMSwzMDMyMiwzMDY3OSwzMjU5MiwzMjY0OCwzNDg3MCwzNDg3MywzNDkxNCwzNTczMSwzNTczMCwzNTczNCwzMzM5OSwzNjEyMywzNzMxMiwzNzk5NCwzODcyMiwzODcyOCwzODcyNCwzODg1NCwzOTAyNCwzOTUxOSwzOTcxNCwzOTc2OCw0MDAzMSw0MDQ0MSw0MDQ0Miw0MDU3Miw0MDU3Myw0MDcxMSw0MDgyMyw0MDgxOCwyNDMwNywyNzQxNCwyODc3MSwzMTg1MiwzMTg1NCwzNDg3NSwzNTI2NCwzNjUxMywzNzMxMywzODAwMiwzODAwMCwzOTAyNSwzOTI2MiwzOTYzOCwzOTcxNSw0MDY1MiwyODc3MiwzMDY4MiwzNTczOCwzODAwNywzODg1NywzOTUyMiwzOTUyNSwzMjQxMiwzNTc0MCwzNjUyMiwzNzMxNywzODAxMywzODAxNCwzODAxMiw0MDA1NSw0MDA1Niw0MDY5NSwzNTkyNCwzODAxNSw0MDQ3NCwyOTIyNCwzOTUzMCwzOTcyOSw0MDQ3NSw0MDQ3OCwzMTg1OCw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDkzMzIsOTMzMyw5MzM0LDkzMzUsOTMzNiw5MzM3LDkzMzgsOTMzOSw5MzQwLDkzNDEsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSwyMDAyMiwyMDAzMSwyMDEwMSwyMDEyOCwyMDg2NiwyMDg4NiwyMDkwNywyMTI0MSwyMTMwNCwyMTM1MywyMTQzMCwyMjc5NCwyMzQyNCwyNDAyNywxMjA4MywyNDE5MSwyNDMwOCwyNDQwMCwyNDQxNywyNTkwOCwyNjA4MCwzMDA5OCwzMDMyNiwzNjc4OSwzODU4MiwxNjgsNzEwLDEyNTQxLDEyNTQyLDEyNDQ1LDEyNDQ2LDEyMjkxLDIwMTg5LDEyMjkzLDEyMjk0LDEyMjk1LDEyNTQwLDY1MzM5LDY1MzQxLDEwMDQ1LDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDg2NzksODYzMiw4NjMzLDEyNzUxLDEzMTI3NiwyMDA1OCwxMzEyMTAsMjA5OTQsMTc1NTMsNDA4ODAsMjA4NzIsNDA4ODEsMTYxMjg3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjU1MDYsNjU1MDgsNjUyODcsNjUyODIsMTI4NDksODQ3MCw4NDgxLDEyNDQzLDEyNDQ0LDExOTA0LDExOTA4LDExOTEwLDExOTExLDExOTEyLDExOTE0LDExOTE2LDExOTE3LDExOTI1LDExOTMyLDExOTMzLDExOTQxLDExOTQzLDExOTQ2LDExOTQ4LDExOTUwLDExOTU4LDExOTY0LDExOTY2LDExOTc0LDExOTc4LDExOTgwLDExOTgxLDExOTgzLDExOTkwLDExOTkxLDExOTk4LDEyMDAzLG51bGwsbnVsbCxudWxsLDY0Myw1OTIsNjAzLDU5Niw2MjksMzM5LDI0OCwzMzEsNjUwLDYxOCwyMDAzNCwyMDA2MCwyMDk4MSwyMTI3NCwyMTM3OCwxOTk3NSwxOTk4MCwyMDAzOSwyMDEwOSwyMjIzMSw2NDAxMiwyMzY2MiwyNDQzNSwxOTk4MywyMDg3MSwxOTk4MiwyMDAxNCwyMDExNSwyMDE2MiwyMDE2OSwyMDE2OCwyMDg4OCwyMTI0NCwyMTM1NiwyMTQzMywyMjMwNCwyMjc4NywyMjgyOCwyMzU2OCwyNDA2MywyNjA4MSwyNzU3MSwyNzU5NiwyNzY2OCwyOTI0NywyMDAxNywyMDAyOCwyMDIwMCwyMDE4OCwyMDIwMSwyMDE5MywyMDE4OSwyMDE4NiwyMTAwNCwyMTI3NiwyMTMyNCwyMjMwNiwyMjMwNywyMjgwNywyMjgzMSwyMzQyNSwyMzQyOCwyMzU3MCwyMzYxMSwyMzY2OCwyMzY2NywyNDA2OCwyNDE5MiwyNDE5NCwyNDUyMSwyNTA5NywyNTE2OCwyNzY2OSwyNzcwMiwyNzcxNSwyNzcxMSwyNzcwNywyOTM1OCwyOTM2MCwyOTU3OCwzMTE2MCwzMjkwNiwzODQzMCwyMDIzOCwyMDI0OCwyMDI2OCwyMDIxMywyMDI0NCwyMDIwOSwyMDIyNCwyMDIxNSwyMDIzMiwyMDI1MywyMDIyNiwyMDIyOSwyMDI1OCwyMDI0MywyMDIyOCwyMDIxMiwyMDI0MiwyMDkxMywyMTAxMSwyMTAwMSwyMTAwOCwyMTE1OCwyMTI4MiwyMTI3OSwyMTMyNSwyMTM4NiwyMTUxMSwyMjI0MSwyMjIzOSwyMjMxOCwyMjMxNCwyMjMyNCwyMjg0NCwyMjkxMiwyMjkwOCwyMjkxNywyMjkwNywyMjkxMCwyMjkwMywyMjkxMSwyMzM4MiwyMzU3MywyMzU4OSwyMzY3NiwyMzY3NCwyMzY3NSwyMzY3OCwyNDAzMSwyNDE4MSwyNDE5NiwyNDMyMiwyNDM0NiwyNDQzNiwyNDUzMywyNDUzMiwyNDUyNywyNTE4MCwyNTE4MiwyNTE4OCwyNTE4NSwyNTE5MCwyNTE4NiwyNTE3NywyNTE4NCwyNTE3OCwyNTE4OSwyNjA5NSwyNjA5NCwyNjQzMCwyNjQyNSwyNjQyNCwyNjQyNywyNjQyNiwyNjQzMSwyNjQyOCwyNjQxOSwyNzY3MiwyNzcxOCwyNzczMCwyNzc0MCwyNzcyNywyNzcyMiwyNzczMiwyNzcyMywyNzcyNCwyODc4NSwyOTI3OCwyOTM2NCwyOTM2NSwyOTU4MiwyOTk5NCwzMDMzNSwzMTM0OSwzMjU5MywzMzQwMCwzMzQwNCwzMzQwOCwzMzQwNSwzMzQwNywzNDM4MSwzNTE5OCwzNzAxNywzNzAxNSwzNzAxNiwzNzAxOSwzNzAxMiwzODQzNCwzODQzNiwzODQzMiwzODQzNSwyMDMxMCwyMDI4MywyMDMyMiwyMDI5NywyMDMwNywyMDMyNCwyMDI4NiwyMDMyNywyMDMwNiwyMDMxOSwyMDI4OSwyMDMxMiwyMDI2OSwyMDI3NSwyMDI4NywyMDMyMSwyMDg3OSwyMDkyMSwyMTAyMCwyMTAyMiwyMTAyNSwyMTE2NSwyMTE2NiwyMTI1NywyMTM0NywyMTM2MiwyMTM5MCwyMTM5MSwyMTU1MiwyMTU1OSwyMTU0NiwyMTU4OCwyMTU3MywyMTUyOSwyMTUzMiwyMTU0MSwyMTUyOCwyMTU2NSwyMTU4MywyMTU2OSwyMTU0NCwyMTU0MCwyMTU3NSwyMjI1NCwyMjI0NywyMjI0NSwyMjMzNywyMjM0MSwyMjM0OCwyMjM0NSwyMjM0NywyMjM1NCwyMjc5MCwyMjg0OCwyMjk1MCwyMjkzNiwyMjk0NCwyMjkzNSwyMjkyNiwyMjk0NiwyMjkyOCwyMjkyNywyMjk1MSwyMjk0NSwyMzQzOCwyMzQ0MiwyMzU5MiwyMzU5NCwyMzY5MywyMzY5NSwyMzY4OCwyMzY5MSwyMzY4OSwyMzY5OCwyMzY5MCwyMzY4NiwyMzY5OSwyMzcwMSwyNDAzMiwyNDA3NCwyNDA3OCwyNDIwMywyNDIwMSwyNDIwNCwyNDIwMCwyNDIwNSwyNDMyNSwyNDM0OSwyNDQ0MCwyNDQzOCwyNDUzMCwyNDUyOSwyNDUyOCwyNDU1NywyNDU1MiwyNDU1OCwyNDU2MywyNDU0NSwyNDU0OCwyNDU0NywyNDU3MCwyNDU1OSwyNDU2NywyNDU3MSwyNDU3NiwyNDU2NCwyNTE0NiwyNTIxOSwyNTIyOCwyNTIzMCwyNTIzMSwyNTIzNiwyNTIyMywyNTIwMSwyNTIxMSwyNTIxMCwyNTIwMCwyNTIxNywyNTIyNCwyNTIwNywyNTIxMywyNTIwMiwyNTIwNCwyNTkxMSwyNjA5NiwyNjEwMCwyNjA5OSwyNjA5OCwyNjEwMSwyNjQzNywyNjQzOSwyNjQ1NywyNjQ1MywyNjQ0NCwyNjQ0MCwyNjQ2MSwyNjQ0NSwyNjQ1OCwyNjQ0MywyNzYwMCwyNzY3MywyNzY3NCwyNzc2OCwyNzc1MSwyNzc1NSwyNzc4MCwyNzc4NywyNzc5MSwyNzc2MSwyNzc1OSwyNzc1MywyNzgwMiwyNzc1NywyNzc4MywyNzc5NywyNzgwNCwyNzc1MCwyNzc2MywyNzc0OSwyNzc3MSwyNzc5MCwyODc4OCwyODc5NCwyOTI4MywyOTM3NSwyOTM3MywyOTM3OSwyOTM4MiwyOTM3NywyOTM3MCwyOTM4MSwyOTU4OSwyOTU5MSwyOTU4NywyOTU4OCwyOTU4NiwzMDAxMCwzMDAwOSwzMDEwMCwzMDEwMSwzMDMzNywzMTAzNywzMjgyMCwzMjkxNywzMjkyMSwzMjkxMiwzMjkxNCwzMjkyNCwzMzQyNCwzMzQyMywzMzQxMywzMzQyMiwzMzQyNSwzMzQyNywzMzQxOCwzMzQxMSwzMzQxMiwzNTk2MCwzNjgwOSwzNjc5OSwzNzAyMywzNzAyNSwzNzAyOSwzNzAyMiwzNzAzMSwzNzAyNCwzODQ0OCwzODQ0MCwzODQ0NywzODQ0NSwyMDAxOSwyMDM3NiwyMDM0OCwyMDM1NywyMDM0OSwyMDM1MiwyMDM1OSwyMDM0MiwyMDM0MCwyMDM2MSwyMDM1NiwyMDM0MywyMDMwMCwyMDM3NSwyMDMzMCwyMDM3OCwyMDM0NSwyMDM1MywyMDM0NCwyMDM2OCwyMDM4MCwyMDM3MiwyMDM4MiwyMDM3MCwyMDM1NCwyMDM3MywyMDMzMSwyMDMzNCwyMDg5NCwyMDkyNCwyMDkyNiwyMTA0NSwyMTA0MiwyMTA0MywyMTA2MiwyMTA0MSwyMTE4MCwyMTI1OCwyMTI1OSwyMTMwOCwyMTM5NCwyMTM5NiwyMTYzOSwyMTYzMSwyMTYzMywyMTY0OSwyMTYzNCwyMTY0MCwyMTYxMSwyMTYyNiwyMTYzMCwyMTYwNSwyMTYxMiwyMTYyMCwyMTYwNiwyMTY0NSwyMTYxNSwyMTYwMSwyMTYwMCwyMTY1NiwyMTYwMywyMTYwNywyMTYwNCwyMjI2MywyMjI2NSwyMjM4MywyMjM4NiwyMjM4MSwyMjM3OSwyMjM4NSwyMjM4NCwyMjM5MCwyMjQwMCwyMjM4OSwyMjM5NSwyMjM4NywyMjM4OCwyMjM3MCwyMjM3NiwyMjM5NywyMjc5NiwyMjg1MywyMjk2NSwyMjk3MCwyMjk5MSwyMjk5MCwyMjk2MiwyMjk4OCwyMjk3NywyMjk2NiwyMjk3MiwyMjk3OSwyMjk5OCwyMjk2MSwyMjk3MywyMjk3NiwyMjk4NCwyMjk2NCwyMjk4MywyMzM5NCwyMzM5NywyMzQ0MywyMzQ0NSwyMzYyMCwyMzYyMywyMzcyNiwyMzcxNiwyMzcxMiwyMzczMywyMzcyNywyMzcyMCwyMzcyNCwyMzcxMSwyMzcxNSwyMzcyNSwyMzcxNCwyMzcyMiwyMzcxOSwyMzcwOSwyMzcxNywyMzczNCwyMzcyOCwyMzcxOCwyNDA4NywyNDA4NCwyNDA4OSwyNDM2MCwyNDM1NCwyNDM1NSwyNDM1NiwyNDQwNCwyNDQ1MCwyNDQ0NiwyNDQ0NSwyNDU0MiwyNDU0OSwyNDYyMSwyNDYxNCwyNDYwMSwyNDYyNiwyNDU4NywyNDYyOCwyNDU4NiwyNDU5OSwyNDYyNywyNDYwMiwyNDYwNiwyNDYyMCwyNDYxMCwyNDU4OSwyNDU5MiwyNDYyMiwyNDU5NSwyNDU5MywyNDU4OCwyNDU4NSwyNDYwNCwyNTEwOCwyNTE0OSwyNTI2MSwyNTI2OCwyNTI5NywyNTI3OCwyNTI1OCwyNTI3MCwyNTI5MCwyNTI2MiwyNTI2NywyNTI2MywyNTI3NSwyNTI1NywyNTI2NCwyNTI3MiwyNTkxNywyNjAyNCwyNjA0MywyNjEyMSwyNjEwOCwyNjExNiwyNjEzMCwyNjEyMCwyNjEwNywyNjExNSwyNjEyMywyNjEyNSwyNjExNywyNjEwOSwyNjEyOSwyNjEyOCwyNjM1OCwyNjM3OCwyNjUwMSwyNjQ3NiwyNjUxMCwyNjUxNCwyNjQ4NiwyNjQ5MSwyNjUyMCwyNjUwMiwyNjUwMCwyNjQ4NCwyNjUwOSwyNjUwOCwyNjQ5MCwyNjUyNywyNjUxMywyNjUyMSwyNjQ5OSwyNjQ5MywyNjQ5NywyNjQ4OCwyNjQ4OSwyNjUxNiwyNzQyOSwyNzUyMCwyNzUxOCwyNzYxNCwyNzY3NywyNzc5NSwyNzg4NCwyNzg4MywyNzg4NiwyNzg2NSwyNzgzMCwyNzg2MCwyNzgyMSwyNzg3OSwyNzgzMSwyNzg1NiwyNzg0MiwyNzgzNCwyNzg0MywyNzg0NiwyNzg4NSwyNzg5MCwyNzg1OCwyNzg2OSwyNzgyOCwyNzc4NiwyNzgwNSwyNzc3NiwyNzg3MCwyNzg0MCwyNzk1MiwyNzg1MywyNzg0NywyNzgyNCwyNzg5NywyNzg1NSwyNzg4MSwyNzg1NywyODgyMCwyODgyNCwyODgwNSwyODgxOSwyODgwNiwyODgwNCwyODgxNywyODgyMiwyODgwMiwyODgyNiwyODgwMywyOTI5MCwyOTM5OCwyOTM4NywyOTQwMCwyOTM4NSwyOTQwNCwyOTM5NCwyOTM5NiwyOTQwMiwyOTM4OCwyOTM5MywyOTYwNCwyOTYwMSwyOTYxMywyOTYwNiwyOTYwMiwyOTYwMCwyOTYxMiwyOTU5NywyOTkxNywyOTkyOCwzMDAxNSwzMDAxNiwzMDAxNCwzMDA5MiwzMDEwNCwzMDM4MywzMDQ1MSwzMDQ0OSwzMDQ0OCwzMDQ1MywzMDcxMiwzMDcxNiwzMDcxMywzMDcxNSwzMDcxNCwzMDcxMSwzMTA0MiwzMTAzOSwzMTE3MywzMTM1MiwzMTM1NSwzMTQ4MywzMTg2MSwzMTk5NywzMjgyMSwzMjkxMSwzMjk0MiwzMjkzMSwzMjk1MiwzMjk0OSwzMjk0MSwzMzMxMiwzMzQ0MCwzMzQ3MiwzMzQ1MSwzMzQzNCwzMzQzMiwzMzQzNSwzMzQ2MSwzMzQ0NywzMzQ1NCwzMzQ2OCwzMzQzOCwzMzQ2NiwzMzQ2MCwzMzQ0OCwzMzQ0MSwzMzQ0OSwzMzQ3NCwzMzQ0NCwzMzQ3NSwzMzQ2MiwzMzQ0MiwzNDQxNiwzNDQxNSwzNDQxMywzNDQxNCwzNTkyNiwzNjgxOCwzNjgxMSwzNjgxOSwzNjgxMywzNjgyMiwzNjgyMSwzNjgyMywzNzA0MiwzNzA0NCwzNzAzOSwzNzA0MywzNzA0MCwzODQ1NywzODQ2MSwzODQ2MCwzODQ1OCwzODQ2NywyMDQyOSwyMDQyMSwyMDQzNSwyMDQwMiwyMDQyNSwyMDQyNywyMDQxNywyMDQzNiwyMDQ0NCwyMDQ0MSwyMDQxMSwyMDQwMywyMDQ0MywyMDQyMywyMDQzOCwyMDQxMCwyMDQxNiwyMDQwOSwyMDQ2MCwyMTA2MCwyMTA2NSwyMTE4NCwyMTE4NiwyMTMwOSwyMTM3MiwyMTM5OSwyMTM5OCwyMTQwMSwyMTQwMCwyMTY5MCwyMTY2NSwyMTY3NywyMTY2OSwyMTcxMSwyMTY5OSwzMzU0OSwyMTY4NywyMTY3OCwyMTcxOCwyMTY4NiwyMTcwMSwyMTcwMiwyMTY2NCwyMTYxNiwyMTY5MiwyMTY2NiwyMTY5NCwyMTYxOCwyMTcyNiwyMTY4MCwyMjQ1MywyMjQzMCwyMjQzMSwyMjQzNiwyMjQxMiwyMjQyMywyMjQyOSwyMjQyNywyMjQyMCwyMjQyNCwyMjQxNSwyMjQyNSwyMjQzNywyMjQyNiwyMjQyMSwyMjc3MiwyMjc5NywyMjg2NywyMzAwOSwyMzAwNiwyMzAyMiwyMzA0MCwyMzAyNSwyMzAwNSwyMzAzNCwyMzAzNywyMzAzNiwyMzAzMCwyMzAxMiwyMzAyNiwyMzAzMSwyMzAwMywyMzAxNywyMzAyNywyMzAyOSwyMzAwOCwyMzAzOCwyMzAyOCwyMzAyMSwyMzQ2NCwyMzYyOCwyMzc2MCwyMzc2OCwyMzc1NiwyMzc2NywyMzc1NSwyMzc3MSwyMzc3NCwyMzc3MCwyMzc1MywyMzc1MSwyMzc1NCwyMzc2NiwyMzc2MywyMzc2NCwyMzc1OSwyMzc1MiwyMzc1MCwyMzc1OCwyMzc3NSwyMzgwMCwyNDA1NywyNDA5NywyNDA5OCwyNDA5OSwyNDA5NiwyNDEwMCwyNDI0MCwyNDIyOCwyNDIyNiwyNDIxOSwyNDIyNywyNDIyOSwyNDMyNywyNDM2NiwyNDQwNiwyNDQ1NCwyNDYzMSwyNDYzMywyNDY2MCwyNDY5MCwyNDY3MCwyNDY0NSwyNDY1OSwyNDY0NywyNDY0OSwyNDY2NywyNDY1MiwyNDY0MCwyNDY0MiwyNDY3MSwyNDYxMiwyNDY0NCwyNDY2NCwyNDY3OCwyNDY4NiwyNTE1NCwyNTE1NSwyNTI5NSwyNTM1NywyNTM1NSwyNTMzMywyNTM1OCwyNTM0NywyNTMyMywyNTMzNywyNTM1OSwyNTM1NiwyNTMzNiwyNTMzNCwyNTM0NCwyNTM2MywyNTM2NCwyNTMzOCwyNTM2NSwyNTMzOSwyNTMyOCwyNTkyMSwyNTkyMywyNjAyNiwyNjA0NywyNjE2NiwyNjE0NSwyNjE2MiwyNjE2NSwyNjE0MCwyNjE1MCwyNjE0NiwyNjE2MywyNjE1NSwyNjE3MCwyNjE0MSwyNjE2NCwyNjE2OSwyNjE1OCwyNjM4MywyNjM4NCwyNjU2MSwyNjYxMCwyNjU2OCwyNjU1NCwyNjU4OCwyNjU1NSwyNjYxNiwyNjU4NCwyNjU2MCwyNjU1MSwyNjU2NSwyNjYwMywyNjU5NiwyNjU5MSwyNjU0OSwyNjU3MywyNjU0NywyNjYxNSwyNjYxNCwyNjYwNiwyNjU5NSwyNjU2MiwyNjU1MywyNjU3NCwyNjU5OSwyNjYwOCwyNjU0NiwyNjYyMCwyNjU2NiwyNjYwNSwyNjU3MiwyNjU0MiwyNjU5OCwyNjU4NywyNjYxOCwyNjU2OSwyNjU3MCwyNjU2MywyNjYwMiwyNjU3MSwyNzQzMiwyNzUyMiwyNzUyNCwyNzU3NCwyNzYwNiwyNzYwOCwyNzYxNiwyNzY4MCwyNzY4MSwyNzk0NCwyNzk1NiwyNzk0OSwyNzkzNSwyNzk2NCwyNzk2NywyNzkyMiwyNzkxNCwyNzg2NiwyNzk1NSwyNzkwOCwyNzkyOSwyNzk2MiwyNzkzMCwyNzkyMSwyNzkwNCwyNzkzMywyNzk3MCwyNzkwNSwyNzkyOCwyNzk1OSwyNzkwNywyNzkxOSwyNzk2OCwyNzkxMSwyNzkzNiwyNzk0OCwyNzkxMiwyNzkzOCwyNzkxMywyNzkyMCwyODg1NSwyODgzMSwyODg2MiwyODg0OSwyODg0OCwyODgzMywyODg1MiwyODg1MywyODg0MSwyOTI0OSwyOTI1NywyOTI1OCwyOTI5MiwyOTI5NiwyOTI5OSwyOTI5NCwyOTM4NiwyOTQxMiwyOTQxNiwyOTQxOSwyOTQwNywyOTQxOCwyOTQxNCwyOTQxMSwyOTU3MywyOTY0NCwyOTYzNCwyOTY0MCwyOTYzNywyOTYyNSwyOTYyMiwyOTYyMSwyOTYyMCwyOTY3NSwyOTYzMSwyOTYzOSwyOTYzMCwyOTYzNSwyOTYzOCwyOTYyNCwyOTY0MywyOTkzMiwyOTkzNCwyOTk5OCwzMDAyMywzMDAyNCwzMDExOSwzMDEyMiwzMDMyOSwzMDQwNCwzMDQ3MiwzMDQ2NywzMDQ2OCwzMDQ2OSwzMDQ3NCwzMDQ1NSwzMDQ1OSwzMDQ1OCwzMDY5NSwzMDY5NiwzMDcyNiwzMDczNywzMDczOCwzMDcyNSwzMDczNiwzMDczNSwzMDczNCwzMDcyOSwzMDcyMywzMDczOSwzMTA1MCwzMTA1MiwzMTA1MSwzMTA0NSwzMTA0NCwzMTE4OSwzMTE4MSwzMTE4MywzMTE5MCwzMTE4MiwzMTM2MCwzMTM1OCwzMTQ0MSwzMTQ4OCwzMTQ4OSwzMTg2NiwzMTg2NCwzMTg2NSwzMTg3MSwzMTg3MiwzMTg3MywzMjAwMywzMjAwOCwzMjAwMSwzMjYwMCwzMjY1NywzMjY1MywzMjcwMiwzMjc3NSwzMjc4MiwzMjc4MywzMjc4OCwzMjgyMywzMjk4NCwzMjk2NywzMjk5MiwzMjk3NywzMjk2OCwzMjk2MiwzMjk3NiwzMjk2NSwzMjk5NSwzMjk4NSwzMjk4OCwzMjk3MCwzMjk4MSwzMjk2OSwzMjk3NSwzMjk4MywzMjk5OCwzMjk3MywzMzI3OSwzMzMxMywzMzQyOCwzMzQ5NywzMzUzNCwzMzUyOSwzMzU0MywzMzUxMiwzMzUzNiwzMzQ5MywzMzU5NCwzMzUxNSwzMzQ5NCwzMzUyNCwzMzUxNiwzMzUwNSwzMzUyMiwzMzUyNSwzMzU0OCwzMzUzMSwzMzUyNiwzMzUyMCwzMzUxNCwzMzUwOCwzMzUwNCwzMzUzMCwzMzUyMywzMzUxNywzNDQyMywzNDQyMCwzNDQyOCwzNDQxOSwzNDg4MSwzNDg5NCwzNDkxOSwzNDkyMiwzNDkyMSwzNTI4MywzNTMzMiwzNTMzNSwzNjIxMCwzNjgzNSwzNjgzMywzNjg0NiwzNjgzMiwzNzEwNSwzNzA1MywzNzA1NSwzNzA3NywzNzA2MSwzNzA1NCwzNzA2MywzNzA2NywzNzA2NCwzNzMzMiwzNzMzMSwzODQ4NCwzODQ3OSwzODQ4MSwzODQ4MywzODQ3NCwzODQ3OCwyMDUxMCwyMDQ4NSwyMDQ4NywyMDQ5OSwyMDUxNCwyMDUyOCwyMDUwNywyMDQ2OSwyMDQ2OCwyMDUzMSwyMDUzNSwyMDUyNCwyMDQ3MCwyMDQ3MSwyMDUwMywyMDUwOCwyMDUxMiwyMDUxOSwyMDUzMywyMDUyNywyMDUyOSwyMDQ5NCwyMDgyNiwyMDg4NCwyMDg4MywyMDkzOCwyMDkzMiwyMDkzMywyMDkzNiwyMDk0MiwyMTA4OSwyMTA4MiwyMTA3NCwyMTA4NiwyMTA4NywyMTA3NywyMTA5MCwyMTE5NywyMTI2MiwyMTQwNiwyMTc5OCwyMTczMCwyMTc4MywyMTc3OCwyMTczNSwyMTc0NywyMTczMiwyMTc4NiwyMTc1OSwyMTc2NCwyMTc2OCwyMTczOSwyMTc3NywyMTc2NSwyMTc0NSwyMTc3MCwyMTc1NSwyMTc1MSwyMTc1MiwyMTcyOCwyMTc3NCwyMTc2MywyMTc3MSwyMjI3MywyMjI3NCwyMjQ3NiwyMjU3OCwyMjQ4NSwyMjQ4MiwyMjQ1OCwyMjQ3MCwyMjQ2MSwyMjQ2MCwyMjQ1NiwyMjQ1NCwyMjQ2MywyMjQ3MSwyMjQ4MCwyMjQ1NywyMjQ2NSwyMjc5OCwyMjg1OCwyMzA2NSwyMzA2MiwyMzA4NSwyMzA4NiwyMzA2MSwyMzA1NSwyMzA2MywyMzA1MCwyMzA3MCwyMzA5MSwyMzQwNCwyMzQ2MywyMzQ2OSwyMzQ2OCwyMzU1NSwyMzYzOCwyMzYzNiwyMzc4OCwyMzgwNywyMzc5MCwyMzc5MywyMzc5OSwyMzgwOCwyMzgwMSwyNDEwNSwyNDEwNCwyNDIzMiwyNDIzOCwyNDIzNCwyNDIzNiwyNDM3MSwyNDM2OCwyNDQyMywyNDY2OSwyNDY2NiwyNDY3OSwyNDY0MSwyNDczOCwyNDcxMiwyNDcwNCwyNDcyMiwyNDcwNSwyNDczMywyNDcwNywyNDcyNSwyNDczMSwyNDcyNywyNDcxMSwyNDczMiwyNDcxOCwyNTExMywyNTE1OCwyNTMzMCwyNTM2MCwyNTQzMCwyNTM4OCwyNTQxMiwyNTQxMywyNTM5OCwyNTQxMSwyNTU3MiwyNTQwMSwyNTQxOSwyNTQxOCwyNTQwNCwyNTM4NSwyNTQwOSwyNTM5NiwyNTQzMiwyNTQyOCwyNTQzMywyNTM4OSwyNTQxNSwyNTM5NSwyNTQzNCwyNTQyNSwyNTQwMCwyNTQzMSwyNTQwOCwyNTQxNiwyNTkzMCwyNTkyNiwyNjA1NCwyNjA1MSwyNjA1MiwyNjA1MCwyNjE4NiwyNjIwNywyNjE4MywyNjE5MywyNjM4NiwyNjM4NywyNjY1NSwyNjY1MCwyNjY5NywyNjY3NCwyNjY3NSwyNjY4MywyNjY5OSwyNjcwMywyNjY0NiwyNjY3MywyNjY1MiwyNjY3NywyNjY2NywyNjY2OSwyNjY3MSwyNjcwMiwyNjY5MiwyNjY3NiwyNjY1MywyNjY0MiwyNjY0NCwyNjY2MiwyNjY2NCwyNjY3MCwyNjcwMSwyNjY4MiwyNjY2MSwyNjY1NiwyNzQzNiwyNzQzOSwyNzQzNywyNzQ0MSwyNzQ0NCwyNzUwMSwzMjg5OCwyNzUyOCwyNzYyMiwyNzYyMCwyNzYyNCwyNzYxOSwyNzYxOCwyNzYyMywyNzY4NSwyODAyNiwyODAwMywyODAwNCwyODAyMiwyNzkxNywyODAwMSwyODA1MCwyNzk5MiwyODAwMiwyODAxMywyODAxNSwyODA0OSwyODA0NSwyODE0MywyODAzMSwyODAzOCwyNzk5OCwyODAwNywyODAwMCwyODA1NSwyODAxNiwyODAyOCwyNzk5OSwyODAzNCwyODA1NiwyNzk1MSwyODAwOCwyODA0MywyODAzMCwyODAzMiwyODAzNiwyNzkyNiwyODAzNSwyODAyNywyODAyOSwyODAyMSwyODA0OCwyODg5MiwyODg4MywyODg4MSwyODg5MywyODg3NSwzMjU2OSwyODg5OCwyODg4NywyODg4MiwyODg5NCwyODg5NiwyODg4NCwyODg3NywyODg2OSwyODg3MCwyODg3MSwyODg5MCwyODg3OCwyODg5NywyOTI1MCwyOTMwNCwyOTMwMywyOTMwMiwyOTQ0MCwyOTQzNCwyOTQyOCwyOTQzOCwyOTQzMCwyOTQyNywyOTQzNSwyOTQ0MSwyOTY1MSwyOTY1NywyOTY2OSwyOTY1NCwyOTYyOCwyOTY3MSwyOTY2NywyOTY3MywyOTY2MCwyOTY1MCwyOTY1OSwyOTY1MiwyOTY2MSwyOTY1OCwyOTY1NSwyOTY1NiwyOTY3MiwyOTkxOCwyOTkxOSwyOTk0MCwyOTk0MSwyOTk4NSwzMDA0MywzMDA0NywzMDEyOCwzMDE0NSwzMDEzOSwzMDE0OCwzMDE0NCwzMDE0MywzMDEzNCwzMDEzOCwzMDM0NiwzMDQwOSwzMDQ5MywzMDQ5MSwzMDQ4MCwzMDQ4MywzMDQ4MiwzMDQ5OSwzMDQ4MSwzMDQ4NSwzMDQ4OSwzMDQ5MCwzMDQ5OCwzMDUwMywzMDc1NSwzMDc2NCwzMDc1NCwzMDc3MywzMDc2NywzMDc2MCwzMDc2NiwzMDc2MywzMDc1MywzMDc2MSwzMDc3MSwzMDc2MiwzMDc2OSwzMTA2MCwzMTA2NywzMTA1NSwzMTA2OCwzMTA1OSwzMTA1OCwzMTA1NywzMTIxMSwzMTIxMiwzMTIwMCwzMTIxNCwzMTIxMywzMTIxMCwzMTE5NiwzMTE5OCwzMTE5NywzMTM2NiwzMTM2OSwzMTM2NSwzMTM3MSwzMTM3MiwzMTM3MCwzMTM2NywzMTQ0OCwzMTUwNCwzMTQ5MiwzMTUwNywzMTQ5MywzMTUwMywzMTQ5NiwzMTQ5OCwzMTUwMiwzMTQ5NywzMTUwNiwzMTg3NiwzMTg4OSwzMTg4MiwzMTg4NCwzMTg4MCwzMTg4NSwzMTg3NywzMjAzMCwzMjAyOSwzMjAxNywzMjAxNCwzMjAyNCwzMjAyMiwzMjAxOSwzMjAzMSwzMjAxOCwzMjAxNSwzMjAxMiwzMjYwNCwzMjYwOSwzMjYwNiwzMjYwOCwzMjYwNSwzMjYwMywzMjY2MiwzMjY1OCwzMjcwNywzMjcwNiwzMjcwNCwzMjc5MCwzMjgzMCwzMjgyNSwzMzAxOCwzMzAxMCwzMzAxNywzMzAxMywzMzAyNSwzMzAxOSwzMzAyNCwzMzI4MSwzMzMyNywzMzMxNywzMzU4NywzMzU4MSwzMzYwNCwzMzU2MSwzMzYxNywzMzU3MywzMzYyMiwzMzU5OSwzMzYwMSwzMzU3NCwzMzU2NCwzMzU3MCwzMzYwMiwzMzYxNCwzMzU2MywzMzU3OCwzMzU0NCwzMzU5NiwzMzYxMywzMzU1OCwzMzU3MiwzMzU2OCwzMzU5MSwzMzU4MywzMzU3NywzMzYwNywzMzYwNSwzMzYxMiwzMzYxOSwzMzU2NiwzMzU4MCwzMzYxMSwzMzU3NSwzMzYwOCwzNDM4NywzNDM4NiwzNDQ2NiwzNDQ3MiwzNDQ1NCwzNDQ0NSwzNDQ0OSwzNDQ2MiwzNDQzOSwzNDQ1NSwzNDQzOCwzNDQ0MywzNDQ1OCwzNDQzNywzNDQ2OSwzNDQ1NywzNDQ2NSwzNDQ3MSwzNDQ1MywzNDQ1NiwzNDQ0NiwzNDQ2MSwzNDQ0OCwzNDQ1MiwzNDg4MywzNDg4NCwzNDkyNSwzNDkzMywzNDkzNCwzNDkzMCwzNDk0NCwzNDkyOSwzNDk0MywzNDkyNywzNDk0NywzNDk0MiwzNDkzMiwzNDk0MCwzNTM0NiwzNTkxMSwzNTkyNywzNTk2MywzNjAwNCwzNjAwMywzNjIxNCwzNjIxNiwzNjI3NywzNjI3OSwzNjI3OCwzNjU2MSwzNjU2MywzNjg2MiwzNjg1MywzNjg2NiwzNjg2MywzNjg1OSwzNjg2OCwzNjg2MCwzNjg1NCwzNzA3OCwzNzA4OCwzNzA4MSwzNzA4MiwzNzA5MSwzNzA4NywzNzA5MywzNzA4MCwzNzA4MywzNzA3OSwzNzA4NCwzNzA5MiwzNzIwMCwzNzE5OCwzNzE5OSwzNzMzMywzNzM0NiwzNzMzOCwzODQ5MiwzODQ5NSwzODU4OCwzOTEzOSwzOTY0NywzOTcyNywyMDA5NSwyMDU5MiwyMDU4NiwyMDU3NywyMDU3NCwyMDU3NiwyMDU2MywyMDU1NSwyMDU3MywyMDU5NCwyMDU1MiwyMDU1NywyMDU0NSwyMDU3MSwyMDU1NCwyMDU3OCwyMDUwMSwyMDU0OSwyMDU3NSwyMDU4NSwyMDU4NywyMDU3OSwyMDU4MCwyMDU1MCwyMDU0NCwyMDU5MCwyMDU5NSwyMDU2NywyMDU2MSwyMDk0NCwyMTA5OSwyMTEwMSwyMTEwMCwyMTEwMiwyMTIwNiwyMTIwMywyMTI5MywyMTQwNCwyMTg3NywyMTg3OCwyMTgyMCwyMTgzNywyMTg0MCwyMTgxMiwyMTgwMiwyMTg0MSwyMTg1OCwyMTgxNCwyMTgxMywyMTgwOCwyMTg0MiwyMTgyOSwyMTc3MiwyMTgxMCwyMTg2MSwyMTgzOCwyMTgxNywyMTgzMiwyMTgwNSwyMTgxOSwyMTgyNCwyMTgzNSwyMjI4MiwyMjI3OSwyMjUyMywyMjU0OCwyMjQ5OCwyMjUxOCwyMjQ5MiwyMjUxNiwyMjUyOCwyMjUwOSwyMjUyNSwyMjUzNiwyMjUyMCwyMjUzOSwyMjUxNSwyMjQ3OSwyMjUzNSwyMjUxMCwyMjQ5OSwyMjUxNCwyMjUwMSwyMjUwOCwyMjQ5NywyMjU0MiwyMjUyNCwyMjU0NCwyMjUwMywyMjUyOSwyMjU0MCwyMjUxMywyMjUwNSwyMjUxMiwyMjU0MSwyMjUzMiwyMjg3NiwyMzEzNiwyMzEyOCwyMzEyNSwyMzE0MywyMzEzNCwyMzA5NiwyMzA5MywyMzE0OSwyMzEyMCwyMzEzNSwyMzE0MSwyMzE0OCwyMzEyMywyMzE0MCwyMzEyNywyMzEwNywyMzEzMywyMzEyMiwyMzEwOCwyMzEzMSwyMzExMiwyMzE4MiwyMzEwMiwyMzExNywyMzA5NywyMzExNiwyMzE1MiwyMzE0NSwyMzExMSwyMzEyMSwyMzEyNiwyMzEwNiwyMzEzMiwyMzQxMCwyMzQwNiwyMzQ4OSwyMzQ4OCwyMzY0MSwyMzgzOCwyMzgxOSwyMzgzNywyMzgzNCwyMzg0MCwyMzgyMCwyMzg0OCwyMzgyMSwyMzg0NiwyMzg0NSwyMzgyMywyMzg1NiwyMzgyNiwyMzg0MywyMzgzOSwyMzg1NCwyNDEyNiwyNDExNiwyNDI0MSwyNDI0NCwyNDI0OSwyNDI0MiwyNDI0MywyNDM3NCwyNDM3NiwyNDQ3NSwyNDQ3MCwyNDQ3OSwyNDcxNCwyNDcyMCwyNDcxMCwyNDc2NiwyNDc1MiwyNDc2MiwyNDc4NywyNDc4OCwyNDc4MywyNDgwNCwyNDc5MywyNDc5NywyNDc3NiwyNDc1MywyNDc5NSwyNDc1OSwyNDc3OCwyNDc2NywyNDc3MSwyNDc4MSwyNDc2OCwyNTM5NCwyNTQ0NSwyNTQ4MiwyNTQ3NCwyNTQ2OSwyNTUzMywyNTUwMiwyNTUxNywyNTUwMSwyNTQ5NSwyNTUxNSwyNTQ4NiwyNTQ1NSwyNTQ3OSwyNTQ4OCwyNTQ1NCwyNTUxOSwyNTQ2MSwyNTUwMCwyNTQ1MywyNTUxOCwyNTQ2OCwyNTUwOCwyNTQwMywyNTUwMywyNTQ2NCwyNTQ3NywyNTQ3MywyNTQ4OSwyNTQ4NSwyNTQ1NiwyNTkzOSwyNjA2MSwyNjIxMywyNjIwOSwyNjIwMywyNjIwMSwyNjIwNCwyNjIxMCwyNjM5MiwyNjc0NSwyNjc1OSwyNjc2OCwyNjc4MCwyNjczMywyNjczNCwyNjc5OCwyNjc5NSwyNjk2NiwyNjczNSwyNjc4NywyNjc5NiwyNjc5MywyNjc0MSwyNjc0MCwyNjgwMiwyNjc2NywyNjc0MywyNjc3MCwyNjc0OCwyNjczMSwyNjczOCwyNjc5NCwyNjc1MiwyNjczNywyNjc1MCwyNjc3OSwyNjc3NCwyNjc2MywyNjc4NCwyNjc2MSwyNjc4OCwyNjc0NCwyNjc0NywyNjc2OSwyNjc2NCwyNjc2MiwyNjc0OSwyNzQ0NiwyNzQ0MywyNzQ0NywyNzQ0OCwyNzUzNywyNzUzNSwyNzUzMywyNzUzNCwyNzUzMiwyNzY5MCwyODA5NiwyODA3NSwyODA4NCwyODA4MywyODI3NiwyODA3NiwyODEzNywyODEzMCwyODA4NywyODE1MCwyODExNiwyODE2MCwyODEwNCwyODEyOCwyODEyNywyODExOCwyODA5NCwyODEzMywyODEyNCwyODEyNSwyODEyMywyODE0OCwyODEwNiwyODA5MywyODE0MSwyODE0NCwyODA5MCwyODExNywyODA5OCwyODExMSwyODEwNSwyODExMiwyODE0NiwyODExNSwyODE1NywyODExOSwyODEwOSwyODEzMSwyODA5MSwyODkyMiwyODk0MSwyODkxOSwyODk1MSwyODkxNiwyODk0MCwyODkxMiwyODkzMiwyODkxNSwyODk0NCwyODkyNCwyODkyNywyODkzNCwyODk0NywyODkyOCwyODkyMCwyODkxOCwyODkzOSwyODkzMCwyODk0MiwyOTMxMCwyOTMwNywyOTMwOCwyOTMxMSwyOTQ2OSwyOTQ2MywyOTQ0NywyOTQ1NywyOTQ2NCwyOTQ1MCwyOTQ0OCwyOTQzOSwyOTQ1NSwyOTQ3MCwyOTU3NiwyOTY4NiwyOTY4OCwyOTY4NSwyOTcwMCwyOTY5NywyOTY5MywyOTcwMywyOTY5NiwyOTY5MCwyOTY5MiwyOTY5NSwyOTcwOCwyOTcwNywyOTY4NCwyOTcwNCwzMDA1MiwzMDA1MSwzMDE1OCwzMDE2MiwzMDE1OSwzMDE1NSwzMDE1NiwzMDE2MSwzMDE2MCwzMDM1MSwzMDM0NSwzMDQxOSwzMDUyMSwzMDUxMSwzMDUwOSwzMDUxMywzMDUxNCwzMDUxNiwzMDUxNSwzMDUyNSwzMDUwMSwzMDUyMywzMDUxNywzMDc5MiwzMDgwMiwzMDc5MywzMDc5NywzMDc5NCwzMDc5NiwzMDc1OCwzMDc4OSwzMDgwMCwzMTA3NiwzMTA3OSwzMTA4MSwzMTA4MiwzMTA3NSwzMTA4MywzMTA3MywzMTE2MywzMTIyNiwzMTIyNCwzMTIyMiwzMTIyMywzMTM3NSwzMTM4MCwzMTM3NiwzMTU0MSwzMTU1OSwzMTU0MCwzMTUyNSwzMTUzNiwzMTUyMiwzMTUyNCwzMTUzOSwzMTUxMiwzMTUzMCwzMTUxNywzMTUzNywzMTUzMSwzMTUzMywzMTUzNSwzMTUzOCwzMTU0NCwzMTUxNCwzMTUyMywzMTg5MiwzMTg5NiwzMTg5NCwzMTkwNywzMjA1MywzMjA2MSwzMjA1NiwzMjA1NCwzMjA1OCwzMjA2OSwzMjA0NCwzMjA0MSwzMjA2NSwzMjA3MSwzMjA2MiwzMjA2MywzMjA3NCwzMjA1OSwzMjA0MCwzMjYxMSwzMjY2MSwzMjY2OCwzMjY2OSwzMjY2NywzMjcxNCwzMjcxNSwzMjcxNywzMjcyMCwzMjcyMSwzMjcxMSwzMjcxOSwzMjcxMywzMjc5OSwzMjc5OCwzMjc5NSwzMjgzOSwzMjgzNSwzMjg0MCwzMzA0OCwzMzA2MSwzMzA0OSwzMzA1MSwzMzA2OSwzMzA1NSwzMzA2OCwzMzA1NCwzMzA1NywzMzA0NSwzMzA2MywzMzA1MywzMzA1OCwzMzI5NywzMzMzNiwzMzMzMSwzMzMzOCwzMzMzMiwzMzMzMCwzMzM5NiwzMzY4MCwzMzY5OSwzMzcwNCwzMzY3NywzMzY1OCwzMzY1MSwzMzcwMCwzMzY1MiwzMzY3OSwzMzY2NSwzMzY4NSwzMzY4OSwzMzY1MywzMzY4NCwzMzcwNSwzMzY2MSwzMzY2NywzMzY3NiwzMzY5MywzMzY5MSwzMzcwNiwzMzY3NSwzMzY2MiwzMzcwMSwzMzcxMSwzMzY3MiwzMzY4NywzMzcxMiwzMzY2MywzMzcwMiwzMzY3MSwzMzcxMCwzMzY1NCwzMzY5MCwzNDM5MywzNDM5MCwzNDQ5NSwzNDQ4NywzNDQ5OCwzNDQ5NywzNDUwMSwzNDQ5MCwzNDQ4MCwzNDUwNCwzNDQ4OSwzNDQ4MywzNDQ4OCwzNDUwOCwzNDQ4NCwzNDQ5MSwzNDQ5MiwzNDQ5OSwzNDQ5MywzNDQ5NCwzNDg5OCwzNDk1MywzNDk2NSwzNDk4NCwzNDk3OCwzNDk4NiwzNDk3MCwzNDk2MSwzNDk3NywzNDk3NSwzNDk2OCwzNDk4MywzNDk2OSwzNDk3MSwzNDk2NywzNDk4MCwzNDk4OCwzNDk1NiwzNDk2MywzNDk1OCwzNTIwMiwzNTI4NiwzNTI4OSwzNTI4NSwzNTM3NiwzNTM2NywzNTM3MiwzNTM1OCwzNTg5NywzNTg5OSwzNTkzMiwzNTkzMywzNTk2NSwzNjAwNSwzNjIyMSwzNjIxOSwzNjIxNywzNjI4NCwzNjI5MCwzNjI4MSwzNjI4NywzNjI4OSwzNjU2OCwzNjU3NCwzNjU3MywzNjU3MiwzNjU2NywzNjU3NiwzNjU3NywzNjkwMCwzNjg3NSwzNjg4MSwzNjg5MiwzNjg3NiwzNjg5NywzNzEwMywzNzA5OCwzNzEwNCwzNzEwOCwzNzEwNiwzNzEwNywzNzA3NiwzNzA5OSwzNzEwMCwzNzA5NywzNzIwNiwzNzIwOCwzNzIxMCwzNzIwMywzNzIwNSwzNzM1NiwzNzM2NCwzNzM2MSwzNzM2MywzNzM2OCwzNzM0OCwzNzM2OSwzNzM1NCwzNzM1NSwzNzM2NywzNzM1MiwzNzM1OCwzODI2NiwzODI3OCwzODI4MCwzODUyNCwzODUwOSwzODUwNywzODUxMywzODUxMSwzODU5MSwzODc2MiwzODkxNiwzOTE0MSwzOTMxOSwyMDYzNSwyMDYyOSwyMDYyOCwyMDYzOCwyMDYxOSwyMDY0MywyMDYxMSwyMDYyMCwyMDYyMiwyMDYzNywyMDU4NCwyMDYzNiwyMDYyNiwyMDYxMCwyMDYxNSwyMDgzMSwyMDk0OCwyMTI2NiwyMTI2NSwyMTQxMiwyMTQxNSwyMTkwNSwyMTkyOCwyMTkyNSwyMTkzMywyMTg3OSwyMjA4NSwyMTkyMiwyMTkwNywyMTg5NiwyMTkwMywyMTk0MSwyMTg4OSwyMTkyMywyMTkwNiwyMTkyNCwyMTg4NSwyMTkwMCwyMTkyNiwyMTg4NywyMTkwOSwyMTkyMSwyMTkwMiwyMjI4NCwyMjU2OSwyMjU4MywyMjU1MywyMjU1OCwyMjU2NywyMjU2MywyMjU2OCwyMjUxNywyMjYwMCwyMjU2NSwyMjU1NiwyMjU1NSwyMjU3OSwyMjU5MSwyMjU4MiwyMjU3NCwyMjU4NSwyMjU4NCwyMjU3MywyMjU3MiwyMjU4NywyMjg4MSwyMzIxNSwyMzE4OCwyMzE5OSwyMzE2MiwyMzIwMiwyMzE5OCwyMzE2MCwyMzIwNiwyMzE2NCwyMzIwNSwyMzIxMiwyMzE4OSwyMzIxNCwyMzA5NSwyMzE3MiwyMzE3OCwyMzE5MSwyMzE3MSwyMzE3OSwyMzIwOSwyMzE2MywyMzE2NSwyMzE4MCwyMzE5NiwyMzE4MywyMzE4NywyMzE5NywyMzUzMCwyMzUwMSwyMzQ5OSwyMzUwOCwyMzUwNSwyMzQ5OCwyMzUwMiwyMzU2NCwyMzYwMCwyMzg2MywyMzg3NSwyMzkxNSwyMzg3MywyMzg4MywyMzg3MSwyMzg2MSwyMzg4OSwyMzg4NiwyMzg5MywyMzg1OSwyMzg2NiwyMzg5MCwyMzg2OSwyMzg1NywyMzg5NywyMzg3NCwyMzg2NSwyMzg4MSwyMzg2NCwyMzg2OCwyMzg1OCwyMzg2MiwyMzg3MiwyMzg3NywyNDEzMiwyNDEyOSwyNDQwOCwyNDQ4NiwyNDQ4NSwyNDQ5MSwyNDc3NywyNDc2MSwyNDc4MCwyNDgwMiwyNDc4MiwyNDc3MiwyNDg1MiwyNDgxOCwyNDg0MiwyNDg1NCwyNDgzNywyNDgyMSwyNDg1MSwyNDgyNCwyNDgyOCwyNDgzMCwyNDc2OSwyNDgzNSwyNDg1NiwyNDg2MSwyNDg0OCwyNDgzMSwyNDgzNiwyNDg0MywyNTE2MiwyNTQ5MiwyNTUyMSwyNTUyMCwyNTU1MCwyNTU3MywyNTU3NiwyNTU4MywyNTUzOSwyNTc1NywyNTU4NywyNTU0NiwyNTU2OCwyNTU5MCwyNTU1NywyNTU4NiwyNTU4OSwyNTY5NywyNTU2NywyNTUzNCwyNTU2NSwyNTU2NCwyNTU0MCwyNTU2MCwyNTU1NSwyNTUzOCwyNTU0MywyNTU0OCwyNTU0NywyNTU0NCwyNTU4NCwyNTU1OSwyNTU2MSwyNTkwNiwyNTk1OSwyNTk2MiwyNTk1NiwyNTk0OCwyNTk2MCwyNTk1NywyNTk5NiwyNjAxMywyNjAxNCwyNjAzMCwyNjA2NCwyNjA2NiwyNjIzNiwyNjIyMCwyNjIzNSwyNjI0MCwyNjIyNSwyNjIzMywyNjIxOCwyNjIyNiwyNjM2OSwyNjg5MiwyNjgzNSwyNjg4NCwyNjg0NCwyNjkyMiwyNjg2MCwyNjg1OCwyNjg2NSwyNjg5NSwyNjgzOCwyNjg3MSwyNjg1OSwyNjg1MiwyNjg3MCwyNjg5OSwyNjg5NiwyNjg2NywyNjg0OSwyNjg4NywyNjgyOCwyNjg4OCwyNjk5MiwyNjgwNCwyNjg5NywyNjg2MywyNjgyMiwyNjkwMCwyNjg3MiwyNjgzMiwyNjg3NywyNjg3NiwyNjg1NiwyNjg5MSwyNjg5MCwyNjkwMywyNjgzMCwyNjgyNCwyNjg0NSwyNjg0NiwyNjg1NCwyNjg2OCwyNjgzMywyNjg4NiwyNjgzNiwyNjg1NywyNjkwMSwyNjkxNywyNjgyMywyNzQ0OSwyNzQ1MSwyNzQ1NSwyNzQ1MiwyNzU0MCwyNzU0MywyNzU0NSwyNzU0MSwyNzU4MSwyNzYzMiwyNzYzNCwyNzYzNSwyNzY5NiwyODE1NiwyODIzMCwyODIzMSwyODE5MSwyODIzMywyODI5NiwyODIyMCwyODIyMSwyODIyOSwyODI1OCwyODIwMywyODIyMywyODIyNSwyODI1MywyODI3NSwyODE4OCwyODIxMSwyODIzNSwyODIyNCwyODI0MSwyODIxOSwyODE2MywyODIwNiwyODI1NCwyODI2NCwyODI1MiwyODI1NywyODIwOSwyODIwMCwyODI1NiwyODI3MywyODI2NywyODIxNywyODE5NCwyODIwOCwyODI0MywyODI2MSwyODE5OSwyODI4MCwyODI2MCwyODI3OSwyODI0NSwyODI4MSwyODI0MiwyODI2MiwyODIxMywyODIxNCwyODI1MCwyODk2MCwyODk1OCwyODk3NSwyODkyMywyODk3NCwyODk3NywyODk2MywyODk2NSwyODk2MiwyODk3OCwyODk1OSwyODk2OCwyODk4NiwyODk1NSwyOTI1OSwyOTI3NCwyOTMyMCwyOTMyMSwyOTMxOCwyOTMxNywyOTMyMywyOTQ1OCwyOTQ1MSwyOTQ4OCwyOTQ3NCwyOTQ4OSwyOTQ5MSwyOTQ3OSwyOTQ5MCwyOTQ4NSwyOTQ3OCwyOTQ3NSwyOTQ5MywyOTQ1MiwyOTc0MiwyOTc0MCwyOTc0NCwyOTczOSwyOTcxOCwyOTcyMiwyOTcyOSwyOTc0MSwyOTc0NSwyOTczMiwyOTczMSwyOTcyNSwyOTczNywyOTcyOCwyOTc0NiwyOTk0NywyOTk5OSwzMDA2MywzMDA2MCwzMDE4MywzMDE3MCwzMDE3NywzMDE4MiwzMDE3MywzMDE3NSwzMDE4MCwzMDE2NywzMDM1NywzMDM1NCwzMDQyNiwzMDUzNCwzMDUzNSwzMDUzMiwzMDU0MSwzMDUzMywzMDUzOCwzMDU0MiwzMDUzOSwzMDU0MCwzMDY4NiwzMDcwMCwzMDgxNiwzMDgyMCwzMDgyMSwzMDgxMiwzMDgyOSwzMDgzMywzMDgyNiwzMDgzMCwzMDgzMiwzMDgyNSwzMDgyNCwzMDgxNCwzMDgxOCwzMTA5MiwzMTA5MSwzMTA5MCwzMTA4OCwzMTIzNCwzMTI0MiwzMTIzNSwzMTI0NCwzMTIzNiwzMTM4NSwzMTQ2MiwzMTQ2MCwzMTU2MiwzMTU0NywzMTU1NiwzMTU2MCwzMTU2NCwzMTU2NiwzMTU1MiwzMTU3NiwzMTU1NywzMTkwNiwzMTkwMiwzMTkxMiwzMTkwNSwzMjA4OCwzMjExMSwzMjA5OSwzMjA4MywzMjA4NiwzMjEwMywzMjEwNiwzMjA3OSwzMjEwOSwzMjA5MiwzMjEwNywzMjA4MiwzMjA4NCwzMjEwNSwzMjA4MSwzMjA5NSwzMjA3OCwzMjU3NCwzMjU3NSwzMjYxMywzMjYxNCwzMjY3NCwzMjY3MiwzMjY3MywzMjcyNywzMjg0OSwzMjg0NywzMjg0OCwzMzAyMiwzMjk4MCwzMzA5MSwzMzA5OCwzMzEwNiwzMzEwMywzMzA5NSwzMzA4NSwzMzEwMSwzMzA4MiwzMzI1NCwzMzI2MiwzMzI3MSwzMzI3MiwzMzI3MywzMzI4NCwzMzM0MCwzMzM0MSwzMzM0MywzMzM5NywzMzU5NSwzMzc0MywzMzc4NSwzMzgyNywzMzcyOCwzMzc2OCwzMzgxMCwzMzc2NywzMzc2NCwzMzc4OCwzMzc4MiwzMzgwOCwzMzczNCwzMzczNiwzMzc3MSwzMzc2MywzMzcyNywzMzc5MywzMzc1NywzMzc2NSwzMzc1MiwzMzc5MSwzMzc2MSwzMzczOSwzMzc0MiwzMzc1MCwzMzc4MSwzMzczNywzMzgwMSwzMzgwNywzMzc1OCwzMzgwOSwzMzc5OCwzMzczMCwzMzc3OSwzMzc0OSwzMzc4NiwzMzczNSwzMzc0NSwzMzc3MCwzMzgxMSwzMzczMSwzMzc3MiwzMzc3NCwzMzczMiwzMzc4NywzMzc1MSwzMzc2MiwzMzgxOSwzMzc1NSwzMzc5MCwzNDUyMCwzNDUzMCwzNDUzNCwzNDUxNSwzNDUzMSwzNDUyMiwzNDUzOCwzNDUyNSwzNDUzOSwzNDUyNCwzNDU0MCwzNDUzNywzNDUxOSwzNDUzNiwzNDUxMywzNDg4OCwzNDkwMiwzNDkwMSwzNTAwMiwzNTAzMSwzNTAwMSwzNTAwMCwzNTAwOCwzNTAwNiwzNDk5OCwzNTAwNCwzNDk5OSwzNTAwNSwzNDk5NCwzNTA3MywzNTAxNywzNTIyMSwzNTIyNCwzNTIyMywzNTI5MywzNTI5MCwzNTI5MSwzNTQwNiwzNTQwNSwzNTM4NSwzNTQxNywzNTM5MiwzNTQxNSwzNTQxNiwzNTM5NiwzNTM5NywzNTQxMCwzNTQwMCwzNTQwOSwzNTQwMiwzNTQwNCwzNTQwNywzNTkzNSwzNTk2OSwzNTk2OCwzNjAyNiwzNjAzMCwzNjAxNiwzNjAyNSwzNjAyMSwzNjIyOCwzNjIyNCwzNjIzMywzNjMxMiwzNjMwNywzNjMwMSwzNjI5NSwzNjMxMCwzNjMxNiwzNjMwMywzNjMwOSwzNjMxMywzNjI5NiwzNjMxMSwzNjI5MywzNjU5MSwzNjU5OSwzNjYwMiwzNjYwMSwzNjU4MiwzNjU5MCwzNjU4MSwzNjU5NywzNjU4MywzNjU4NCwzNjU5OCwzNjU4NywzNjU5MywzNjU4OCwzNjU5NiwzNjU4NSwzNjkwOSwzNjkxNiwzNjkxMSwzNzEyNiwzNzE2NCwzNzEyNCwzNzExOSwzNzExNiwzNzEyOCwzNzExMywzNzExNSwzNzEyMSwzNzEyMCwzNzEyNywzNzEyNSwzNzEyMywzNzIxNywzNzIyMCwzNzIxNSwzNzIxOCwzNzIxNiwzNzM3NywzNzM4NiwzNzQxMywzNzM3OSwzNzQwMiwzNzQxNCwzNzM5MSwzNzM4OCwzNzM3NiwzNzM5NCwzNzM3NSwzNzM3MywzNzM4MiwzNzM4MCwzNzQxNSwzNzM3OCwzNzQwNCwzNzQxMiwzNzQwMSwzNzM5OSwzNzM4MSwzNzM5OCwzODI2NywzODI4NSwzODI4NCwzODI4OCwzODUzNSwzODUyNiwzODUzNiwzODUzNywzODUzMSwzODUyOCwzODU5NCwzODYwMCwzODU5NSwzODY0MSwzODY0MCwzODc2NCwzODc2OCwzODc2NiwzODkxOSwzOTA4MSwzOTE0Nyw0MDE2Niw0MDY5NywyMDA5OSwyMDEwMCwyMDE1MCwyMDY2OSwyMDY3MSwyMDY3OCwyMDY1NCwyMDY3NiwyMDY4MiwyMDY2MCwyMDY4MCwyMDY3NCwyMDY1NiwyMDY3MywyMDY2NiwyMDY1NywyMDY4MywyMDY4MSwyMDY2MiwyMDY2NCwyMDk1MSwyMTExNCwyMTExMiwyMTExNSwyMTExNiwyMTk1NSwyMTk3OSwyMTk2NCwyMTk2OCwyMTk2MywyMTk2MiwyMTk4MSwyMTk1MiwyMTk3MiwyMTk1NiwyMTk5MywyMTk1MSwyMTk3MCwyMTkwMSwyMTk2NywyMTk3MywyMTk4NiwyMTk3NCwyMTk2MCwyMjAwMiwyMTk2NSwyMTk3NywyMTk1NCwyMjI5MiwyMjYxMSwyMjYzMiwyMjYyOCwyMjYwNywyMjYwNSwyMjYwMSwyMjYzOSwyMjYxMywyMjYwNiwyMjYyMSwyMjYxNywyMjYyOSwyMjYxOSwyMjU4OSwyMjYyNywyMjY0MSwyMjc4MCwyMzIzOSwyMzIzNiwyMzI0MywyMzIyNiwyMzIyNCwyMzIxNywyMzIyMSwyMzIxNiwyMzIzMSwyMzI0MCwyMzIyNywyMzIzOCwyMzIyMywyMzIzMiwyMzI0MiwyMzIyMCwyMzIyMiwyMzI0NSwyMzIyNSwyMzE4NCwyMzUxMCwyMzUxMiwyMzUxMywyMzU4MywyMzYwMywyMzkyMSwyMzkwNywyMzg4MiwyMzkwOSwyMzkyMiwyMzkxNiwyMzkwMiwyMzkxMiwyMzkxMSwyMzkwNiwyNDA0OCwyNDE0MywyNDE0MiwyNDEzOCwyNDE0MSwyNDEzOSwyNDI2MSwyNDI2OCwyNDI2MiwyNDI2NywyNDI2MywyNDM4NCwyNDQ5NSwyNDQ5MywyNDgyMywyNDkwNSwyNDkwNiwyNDg3NSwyNDkwMSwyNDg4NiwyNDg4MiwyNDg3OCwyNDkwMiwyNDg3OSwyNDkxMSwyNDg3MywyNDg5NiwyNTEyMCwzNzIyNCwyNTEyMywyNTEyNSwyNTEyNCwyNTU0MSwyNTU4NSwyNTU3OSwyNTYxNiwyNTYxOCwyNTYwOSwyNTYzMiwyNTYzNiwyNTY1MSwyNTY2NywyNTYzMSwyNTYyMSwyNTYyNCwyNTY1NywyNTY1NSwyNTYzNCwyNTYzNSwyNTYxMiwyNTYzOCwyNTY0OCwyNTY0MCwyNTY2NSwyNTY1MywyNTY0NywyNTYxMCwyNTYyNiwyNTY2NCwyNTYzNywyNTYzOSwyNTYxMSwyNTU3NSwyNTYyNywyNTY0NiwyNTYzMywyNTYxNCwyNTk2NywyNjAwMiwyNjA2NywyNjI0NiwyNjI1MiwyNjI2MSwyNjI1NiwyNjI1MSwyNjI1MCwyNjI2NSwyNjI2MCwyNjIzMiwyNjQwMCwyNjk4MiwyNjk3NSwyNjkzNiwyNjk1OCwyNjk3OCwyNjk5MywyNjk0MywyNjk0OSwyNjk4NiwyNjkzNywyNjk0NiwyNjk2NywyNjk2OSwyNzAwMiwyNjk1MiwyNjk1MywyNjkzMywyNjk4OCwyNjkzMSwyNjk0MSwyNjk4MSwyNjg2NCwyNzAwMCwyNjkzMiwyNjk4NSwyNjk0NCwyNjk5MSwyNjk0OCwyNjk5OCwyNjk2OCwyNjk0NSwyNjk5NiwyNjk1NiwyNjkzOSwyNjk1NSwyNjkzNSwyNjk3MiwyNjk1OSwyNjk2MSwyNjkzMCwyNjk2MiwyNjkyNywyNzAwMywyNjk0MCwyNzQ2MiwyNzQ2MSwyNzQ1OSwyNzQ1OCwyNzQ2NCwyNzQ1NywyNzU0Nyw2NDAxMywyNzY0MywyNzY0NCwyNzY0MSwyNzYzOSwyNzY0MCwyODMxNSwyODM3NCwyODM2MCwyODMwMywyODM1MiwyODMxOSwyODMwNywyODMwOCwyODMyMCwyODMzNywyODM0NSwyODM1OCwyODM3MCwyODM0OSwyODM1MywyODMxOCwyODM2MSwyODM0MywyODMzNiwyODM2NSwyODMyNiwyODM2NywyODMzOCwyODM1MCwyODM1NSwyODM4MCwyODM3NiwyODMxMywyODMwNiwyODMwMiwyODMwMSwyODMyNCwyODMyMSwyODM1MSwyODMzOSwyODM2OCwyODM2MiwyODMxMSwyODMzNCwyODMyMywyODk5OSwyOTAxMiwyOTAxMCwyOTAyNywyOTAyNCwyODk5MywyOTAyMSwyOTAyNiwyOTA0MiwyOTA0OCwyOTAzNCwyOTAyNSwyODk5NCwyOTAxNiwyODk5NSwyOTAwMywyOTA0MCwyOTAyMywyOTAwOCwyOTAxMSwyODk5NiwyOTAwNSwyOTAxOCwyOTI2MywyOTMyNSwyOTMyNCwyOTMyOSwyOTMyOCwyOTMyNiwyOTUwMCwyOTUwNiwyOTQ5OSwyOTQ5OCwyOTUwNCwyOTUxNCwyOTUxMywyOTc2NCwyOTc3MCwyOTc3MSwyOTc3OCwyOTc3NywyOTc4MywyOTc2MCwyOTc3NSwyOTc3NiwyOTc3NCwyOTc2MiwyOTc2NiwyOTc3MywyOTc4MCwyOTkyMSwyOTk1MSwyOTk1MCwyOTk0OSwyOTk4MSwzMDA3MywzMDA3MSwyNzAxMSwzMDE5MSwzMDIyMywzMDIxMSwzMDE5OSwzMDIwNiwzMDIwNCwzMDIwMSwzMDIwMCwzMDIyNCwzMDIwMywzMDE5OCwzMDE4OSwzMDE5NywzMDIwNSwzMDM2MSwzMDM4OSwzMDQyOSwzMDU0OSwzMDU1OSwzMDU2MCwzMDU0NiwzMDU1MCwzMDU1NCwzMDU2OSwzMDU2NywzMDU0OCwzMDU1MywzMDU3MywzMDY4OCwzMDg1NSwzMDg3NCwzMDg2OCwzMDg2MywzMDg1MiwzMDg2OSwzMDg1MywzMDg1NCwzMDg4MSwzMDg1MSwzMDg0MSwzMDg3MywzMDg0OCwzMDg3MCwzMDg0MywzMTEwMCwzMTEwNiwzMTEwMSwzMTA5NywzMTI0OSwzMTI1NiwzMTI1NywzMTI1MCwzMTI1NSwzMTI1MywzMTI2NiwzMTI1MSwzMTI1OSwzMTI0OCwzMTM5NSwzMTM5NCwzMTM5MCwzMTQ2NywzMTU5MCwzMTU4OCwzMTU5NywzMTYwNCwzMTU5MywzMTYwMiwzMTU4OSwzMTYwMywzMTYwMSwzMTYwMCwzMTU4NSwzMTYwOCwzMTYwNiwzMTU4NywzMTkyMiwzMTkyNCwzMTkxOSwzMjEzNiwzMjEzNCwzMjEyOCwzMjE0MSwzMjEyNywzMjEzMywzMjEyMiwzMjE0MiwzMjEyMywzMjEzMSwzMjEyNCwzMjE0MCwzMjE0OCwzMjEzMiwzMjEyNSwzMjE0NiwzMjYyMSwzMjYxOSwzMjYxNSwzMjYxNiwzMjYyMCwzMjY3OCwzMjY3NywzMjY3OSwzMjczMSwzMjczMiwzMjgwMSwzMzEyNCwzMzEyMCwzMzE0MywzMzExNiwzMzEyOSwzMzExNSwzMzEyMiwzMzEzOCwyNjQwMSwzMzExOCwzMzE0MiwzMzEyNywzMzEzNSwzMzA5MiwzMzEyMSwzMzMwOSwzMzM1MywzMzM0OCwzMzM0NCwzMzM0NiwzMzM0OSwzNDAzMywzMzg1NSwzMzg3OCwzMzkxMCwzMzkxMywzMzkzNSwzMzkzMywzMzg5MywzMzg3MywzMzg1NiwzMzkyNiwzMzg5NSwzMzg0MCwzMzg2OSwzMzkxNywzMzg4MiwzMzg4MSwzMzkwOCwzMzkwNywzMzg4NSwzNDA1NSwzMzg4NiwzMzg0NywzMzg1MCwzMzg0NCwzMzkxNCwzMzg1OSwzMzkxMiwzMzg0MiwzMzg2MSwzMzgzMywzMzc1MywzMzg2NywzMzgzOSwzMzg1OCwzMzgzNywzMzg4NywzMzkwNCwzMzg0OSwzMzg3MCwzMzg2OCwzMzg3NCwzMzkwMywzMzk4OSwzMzkzNCwzMzg1MSwzMzg2MywzMzg0NiwzMzg0MywzMzg5NiwzMzkxOCwzMzg2MCwzMzgzNSwzMzg4OCwzMzg3NiwzMzkwMiwzMzg3MiwzNDU3MSwzNDU2NCwzNDU1MSwzNDU3MiwzNDU1NCwzNDUxOCwzNDU0OSwzNDYzNywzNDU1MiwzNDU3NCwzNDU2OSwzNDU2MSwzNDU1MCwzNDU3MywzNDU2NSwzNTAzMCwzNTAxOSwzNTAyMSwzNTAyMiwzNTAzOCwzNTAzNSwzNTAzNCwzNTAyMCwzNTAyNCwzNTIwNSwzNTIyNywzNTI5NSwzNTMwMSwzNTMwMCwzNTI5NywzNTI5NiwzNTI5OCwzNTI5MiwzNTMwMiwzNTQ0NiwzNTQ2MiwzNTQ1NSwzNTQyNSwzNTM5MSwzNTQ0NywzNTQ1OCwzNTQ2MCwzNTQ0NSwzNTQ1OSwzNTQ1NywzNTQ0NCwzNTQ1MCwzNTkwMCwzNTkxNSwzNTkxNCwzNTk0MSwzNTk0MCwzNTk0MiwzNTk3NCwzNTk3MiwzNTk3MywzNjA0NCwzNjIwMCwzNjIwMSwzNjI0MSwzNjIzNiwzNjIzOCwzNjIzOSwzNjIzNywzNjI0MywzNjI0NCwzNjI0MCwzNjI0MiwzNjMzNiwzNjMyMCwzNjMzMiwzNjMzNywzNjMzNCwzNjMwNCwzNjMyOSwzNjMyMywzNjMyMiwzNjMyNywzNjMzOCwzNjMzMSwzNjM0MCwzNjYxNCwzNjYwNywzNjYwOSwzNjYwOCwzNjYxMywzNjYxNSwzNjYxNiwzNjYxMCwzNjYxOSwzNjk0NiwzNjkyNywzNjkzMiwzNjkzNywzNjkyNSwzNzEzNiwzNzEzMywzNzEzNSwzNzEzNywzNzE0MiwzNzE0MCwzNzEzMSwzNzEzNCwzNzIzMCwzNzIzMSwzNzQ0OCwzNzQ1OCwzNzQyNCwzNzQzNCwzNzQ3OCwzNzQyNywzNzQ3NywzNzQ3MCwzNzUwNywzNzQyMiwzNzQ1MCwzNzQ0NiwzNzQ4NSwzNzQ4NCwzNzQ1NSwzNzQ3MiwzNzQ3OSwzNzQ4NywzNzQzMCwzNzQ3MywzNzQ4OCwzNzQyNSwzNzQ2MCwzNzQ3NSwzNzQ1NiwzNzQ5MCwzNzQ1NCwzNzQ1OSwzNzQ1MiwzNzQ2MiwzNzQyNiwzODMwMywzODMwMCwzODMwMiwzODI5OSwzODU0NiwzODU0NywzODU0NSwzODU1MSwzODYwNiwzODY1MCwzODY1MywzODY0OCwzODY0NSwzODc3MSwzODc3NSwzODc3NiwzODc3MCwzODkyNywzODkyNSwzODkyNiwzOTA4NCwzOTE1OCwzOTE2MSwzOTM0MywzOTM0NiwzOTM0NCwzOTM0OSwzOTU5NywzOTU5NSwzOTc3MSw0MDE3MCw0MDE3Myw0MDE2Nyw0MDU3Niw0MDcwMSwyMDcxMCwyMDY5MiwyMDY5NSwyMDcxMiwyMDcyMywyMDY5OSwyMDcxNCwyMDcwMSwyMDcwOCwyMDY5MSwyMDcxNiwyMDcyMCwyMDcxOSwyMDcwNywyMDcwNCwyMDk1MiwyMTEyMCwyMTEyMSwyMTIyNSwyMTIyNywyMTI5NiwyMTQyMCwyMjA1NSwyMjAzNywyMjAyOCwyMjAzNCwyMjAxMiwyMjAzMSwyMjA0NCwyMjAxNywyMjAzNSwyMjAxOCwyMjAxMCwyMjA0NSwyMjAyMCwyMjAxNSwyMjAwOSwyMjY2NSwyMjY1MiwyMjY3MiwyMjY4MCwyMjY2MiwyMjY1NywyMjY1NSwyMjY0NCwyMjY2NywyMjY1MCwyMjY2MywyMjY3MywyMjY3MCwyMjY0NiwyMjY1OCwyMjY2NCwyMjY1MSwyMjY3NiwyMjY3MSwyMjc4MiwyMjg5MSwyMzI2MCwyMzI3OCwyMzI2OSwyMzI1MywyMzI3NCwyMzI1OCwyMzI3NywyMzI3NSwyMzI4MywyMzI2NiwyMzI2NCwyMzI1OSwyMzI3NiwyMzI2MiwyMzI2MSwyMzI1NywyMzI3MiwyMzI2MywyMzQxNSwyMzUyMCwyMzUyMywyMzY1MSwyMzkzOCwyMzkzNiwyMzkzMywyMzk0MiwyMzkzMCwyMzkzNywyMzkyNywyMzk0NiwyMzk0NSwyMzk0NCwyMzkzNCwyMzkzMiwyMzk0OSwyMzkyOSwyMzkzNSwyNDE1MiwyNDE1MywyNDE0NywyNDI4MCwyNDI3MywyNDI3OSwyNDI3MCwyNDI4NCwyNDI3NywyNDI4MSwyNDI3NCwyNDI3NiwyNDM4OCwyNDM4NywyNDQzMSwyNDUwMiwyNDg3NiwyNDg3MiwyNDg5NywyNDkyNiwyNDk0NSwyNDk0NywyNDkxNCwyNDkxNSwyNDk0NiwyNDk0MCwyNDk2MCwyNDk0OCwyNDkxNiwyNDk1NCwyNDkyMywyNDkzMywyNDg5MSwyNDkzOCwyNDkyOSwyNDkxOCwyNTEyOSwyNTEyNywyNTEzMSwyNTY0MywyNTY3NywyNTY5MSwyNTY5MywyNTcxNiwyNTcxOCwyNTcxNCwyNTcxNSwyNTcyNSwyNTcxNywyNTcwMiwyNTc2NiwyNTY3OCwyNTczMCwyNTY5NCwyNTY5MiwyNTY3NSwyNTY4MywyNTY5NiwyNTY4MCwyNTcyNywyNTY2MywyNTcwOCwyNTcwNywyNTY4OSwyNTcwMSwyNTcxOSwyNTk3MSwyNjAxNiwyNjI3MywyNjI3MiwyNjI3MSwyNjM3MywyNjM3MiwyNjQwMiwyNzA1NywyNzA2MiwyNzA4MSwyNzA0MCwyNzA4NiwyNzAzMCwyNzA1NiwyNzA1MiwyNzA2OCwyNzAyNSwyNzAzMywyNzAyMiwyNzA0NywyNzAyMSwyNzA0OSwyNzA3MCwyNzA1NSwyNzA3MSwyNzA3NiwyNzA2OSwyNzA0NCwyNzA5MiwyNzA2NSwyNzA4MiwyNzAzNCwyNzA4NywyNzA1OSwyNzAyNywyNzA1MCwyNzA0MSwyNzAzOCwyNzA5NywyNzAzMSwyNzAyNCwyNzA3NCwyNzA2MSwyNzA0NSwyNzA3OCwyNzQ2NiwyNzQ2OSwyNzQ2NywyNzU1MCwyNzU1MSwyNzU1MiwyNzU4NywyNzU4OCwyNzY0NiwyODM2NiwyODQwNSwyODQwMSwyODQxOSwyODQ1MywyODQwOCwyODQ3MSwyODQxMSwyODQ2MiwyODQyNSwyODQ5NCwyODQ0MSwyODQ0MiwyODQ1NSwyODQ0MCwyODQ3NSwyODQzNCwyODM5NywyODQyNiwyODQ3MCwyODUzMSwyODQwOSwyODM5OCwyODQ2MSwyODQ4MCwyODQ2NCwyODQ3NiwyODQ2OSwyODM5NSwyODQyMywyODQzMCwyODQ4MywyODQyMSwyODQxMywyODQwNiwyODQ3MywyODQ0NCwyODQxMiwyODQ3NCwyODQ0NywyODQyOSwyODQ0NiwyODQyNCwyODQ0OSwyOTA2MywyOTA3MiwyOTA2NSwyOTA1NiwyOTA2MSwyOTA1OCwyOTA3MSwyOTA1MSwyOTA2MiwyOTA1NywyOTA3OSwyOTI1MiwyOTI2NywyOTMzNSwyOTMzMywyOTMzMSwyOTUwNywyOTUxNywyOTUyMSwyOTUxNiwyOTc5NCwyOTgxMSwyOTgwOSwyOTgxMywyOTgxMCwyOTc5OSwyOTgwNiwyOTk1MiwyOTk1NCwyOTk1NSwzMDA3NywzMDA5NiwzMDIzMCwzMDIxNiwzMDIyMCwzMDIyOSwzMDIyNSwzMDIxOCwzMDIyOCwzMDM5MiwzMDU5MywzMDU4OCwzMDU5NywzMDU5NCwzMDU3NCwzMDU5MiwzMDU3NSwzMDU5MCwzMDU5NSwzMDg5OCwzMDg5MCwzMDkwMCwzMDg5MywzMDg4OCwzMDg0NiwzMDg5MSwzMDg3OCwzMDg4NSwzMDg4MCwzMDg5MiwzMDg4MiwzMDg4NCwzMTEyOCwzMTExNCwzMTExNSwzMTEyNiwzMTEyNSwzMTEyNCwzMTEyMywzMTEyNywzMTExMiwzMTEyMiwzMTEyMCwzMTI3NSwzMTMwNiwzMTI4MCwzMTI3OSwzMTI3MiwzMTI3MCwzMTQwMCwzMTQwMywzMTQwNCwzMTQ3MCwzMTYyNCwzMTY0NCwzMTYyNiwzMTYzMywzMTYzMiwzMTYzOCwzMTYyOSwzMTYyOCwzMTY0MywzMTYzMCwzMTYyMSwzMTY0MCwyMTEyNCwzMTY0MSwzMTY1MiwzMTYxOCwzMTkzMSwzMTkzNSwzMTkzMiwzMTkzMCwzMjE2NywzMjE4MywzMjE5NCwzMjE2MywzMjE3MCwzMjE5MywzMjE5MiwzMjE5NywzMjE1NywzMjIwNiwzMjE5NiwzMjE5OCwzMjIwMywzMjIwNCwzMjE3NSwzMjE4NSwzMjE1MCwzMjE4OCwzMjE1OSwzMjE2NiwzMjE3NCwzMjE2OSwzMjE2MSwzMjIwMSwzMjYyNywzMjczOCwzMjczOSwzMjc0MSwzMjczNCwzMjgwNCwzMjg2MSwzMjg2MCwzMzE2MSwzMzE1OCwzMzE1NSwzMzE1OSwzMzE2NSwzMzE2NCwzMzE2MywzMzMwMSwzMzk0MywzMzk1NiwzMzk1MywzMzk1MSwzMzk3OCwzMzk5OCwzMzk4NiwzMzk2NCwzMzk2NiwzMzk2MywzMzk3NywzMzk3MiwzMzk4NSwzMzk5NywzMzk2MiwzMzk0NiwzMzk2OSwzNDAwMCwzMzk0OSwzMzk1OSwzMzk3OSwzMzk1NCwzMzk0MCwzMzk5MSwzMzk5NiwzMzk0NywzMzk2MSwzMzk2NywzMzk2MCwzNDAwNiwzMzk0NCwzMzk3NCwzMzk5OSwzMzk1MiwzNDAwNywzNDAwNCwzNDAwMiwzNDAxMSwzMzk2OCwzMzkzNywzNDQwMSwzNDYxMSwzNDU5NSwzNDYwMCwzNDY2NywzNDYyNCwzNDYwNiwzNDU5MCwzNDU5MywzNDU4NSwzNDU4NywzNDYyNywzNDYwNCwzNDYyNSwzNDYyMiwzNDYzMCwzNDU5MiwzNDYxMCwzNDYwMiwzNDYwNSwzNDYyMCwzNDU3OCwzNDYxOCwzNDYwOSwzNDYxMywzNDYyNiwzNDU5OCwzNDU5OSwzNDYxNiwzNDU5NiwzNDU4NiwzNDYwOCwzNDU3NywzNTA2MywzNTA0NywzNTA1NywzNTA1OCwzNTA2NiwzNTA3MCwzNTA1NCwzNTA2OCwzNTA2MiwzNTA2NywzNTA1NiwzNTA1MiwzNTA1MSwzNTIyOSwzNTIzMywzNTIzMSwzNTIzMCwzNTMwNSwzNTMwNywzNTMwNCwzNTQ5OSwzNTQ4MSwzNTQ2NywzNTQ3NCwzNTQ3MSwzNTQ3OCwzNTkwMSwzNTk0NCwzNTk0NSwzNjA1MywzNjA0NywzNjA1NSwzNjI0NiwzNjM2MSwzNjM1NCwzNjM1MSwzNjM2NSwzNjM0OSwzNjM2MiwzNjM1NSwzNjM1OSwzNjM1OCwzNjM1NywzNjM1MCwzNjM1MiwzNjM1NiwzNjYyNCwzNjYyNSwzNjYyMiwzNjYyMSwzNzE1NSwzNzE0OCwzNzE1MiwzNzE1NCwzNzE1MSwzNzE0OSwzNzE0NiwzNzE1NiwzNzE1MywzNzE0NywzNzI0MiwzNzIzNCwzNzI0MSwzNzIzNSwzNzU0MSwzNzU0MCwzNzQ5NCwzNzUzMSwzNzQ5OCwzNzUzNiwzNzUyNCwzNzU0NiwzNzUxNywzNzU0MiwzNzUzMCwzNzU0NywzNzQ5NywzNzUyNywzNzUwMywzNzUzOSwzNzYxNCwzNzUxOCwzNzUwNiwzNzUyNSwzNzUzOCwzNzUwMSwzNzUxMiwzNzUzNywzNzUxNCwzNzUxMCwzNzUxNiwzNzUyOSwzNzU0MywzNzUwMiwzNzUxMSwzNzU0NSwzNzUzMywzNzUxNSwzNzQyMSwzODU1OCwzODU2MSwzODY1NSwzODc0NCwzODc4MSwzODc3OCwzODc4MiwzODc4NywzODc4NCwzODc4NiwzODc3OSwzODc4OCwzODc4NSwzODc4MywzODg2MiwzODg2MSwzODkzNCwzOTA4NSwzOTA4NiwzOTE3MCwzOTE2OCwzOTE3NSwzOTMyNSwzOTMyNCwzOTM2MywzOTM1MywzOTM1NSwzOTM1NCwzOTM2MiwzOTM1NywzOTM2NywzOTYwMSwzOTY1MSwzOTY1NSwzOTc0MiwzOTc0MywzOTc3NiwzOTc3NywzOTc3NSw0MDE3Nyw0MDE3OCw0MDE4MSw0MDYxNSwyMDczNSwyMDczOSwyMDc4NCwyMDcyOCwyMDc0MiwyMDc0MywyMDcyNiwyMDczNCwyMDc0NywyMDc0OCwyMDczMywyMDc0NiwyMTEzMSwyMTEzMiwyMTIzMywyMTIzMSwyMjA4OCwyMjA4MiwyMjA5MiwyMjA2OSwyMjA4MSwyMjA5MCwyMjA4OSwyMjA4NiwyMjEwNCwyMjEwNiwyMjA4MCwyMjA2NywyMjA3NywyMjA2MCwyMjA3OCwyMjA3MiwyMjA1OCwyMjA3NCwyMjI5OCwyMjY5OSwyMjY4NSwyMjcwNSwyMjY4OCwyMjY5MSwyMjcwMywyMjcwMCwyMjY5MywyMjY4OSwyMjc4MywyMzI5NSwyMzI4NCwyMzI5MywyMzI4NywyMzI4NiwyMzI5OSwyMzI4OCwyMzI5OCwyMzI4OSwyMzI5NywyMzMwMywyMzMwMSwyMzMxMSwyMzY1NSwyMzk2MSwyMzk1OSwyMzk2NywyMzk1NCwyMzk3MCwyMzk1NSwyMzk1NywyMzk2OCwyMzk2NCwyMzk2OSwyMzk2MiwyMzk2NiwyNDE2OSwyNDE1NywyNDE2MCwyNDE1NiwzMjI0MywyNDI4MywyNDI4NiwyNDI4OSwyNDM5MywyNDQ5OCwyNDk3MSwyNDk2MywyNDk1MywyNTAwOSwyNTAwOCwyNDk5NCwyNDk2OSwyNDk4NywyNDk3OSwyNTAwNywyNTAwNSwyNDk5MSwyNDk3OCwyNTAwMiwyNDk5MywyNDk3MywyNDkzNCwyNTAxMSwyNTEzMywyNTcxMCwyNTcxMiwyNTc1MCwyNTc2MCwyNTczMywyNTc1MSwyNTc1NiwyNTc0MywyNTczOSwyNTczOCwyNTc0MCwyNTc2MywyNTc1OSwyNTcwNCwyNTc3NywyNTc1MiwyNTk3NCwyNTk3OCwyNTk3NywyNTk3OSwyNjAzNCwyNjAzNSwyNjI5MywyNjI4OCwyNjI4MSwyNjI5MCwyNjI5NSwyNjI4MiwyNjI4NywyNzEzNiwyNzE0MiwyNzE1OSwyNzEwOSwyNzEyOCwyNzE1NywyNzEyMSwyNzEwOCwyNzE2OCwyNzEzNSwyNzExNiwyNzEwNiwyNzE2MywyNzE2NSwyNzEzNCwyNzE3NSwyNzEyMiwyNzExOCwyNzE1NiwyNzEyNywyNzExMSwyNzIwMCwyNzE0NCwyNzExMCwyNzEzMSwyNzE0OSwyNzEzMiwyNzExNSwyNzE0NSwyNzE0MCwyNzE2MCwyNzE3MywyNzE1MSwyNzEyNiwyNzE3NCwyNzE0MywyNzEyNCwyNzE1OCwyNzQ3MywyNzU1NywyNzU1NSwyNzU1NCwyNzU1OCwyNzY0OSwyNzY0OCwyNzY0NywyNzY1MCwyODQ4MSwyODQ1NCwyODU0MiwyODU1MSwyODYxNCwyODU2MiwyODU1NywyODU1MywyODU1NiwyODUxNCwyODQ5NSwyODU0OSwyODUwNiwyODU2NiwyODUzNCwyODUyNCwyODU0NiwyODUwMSwyODUzMCwyODQ5OCwyODQ5NiwyODUwMywyODU2NCwyODU2MywyODUwOSwyODQxNiwyODUxMywyODUyMywyODU0MSwyODUxOSwyODU2MCwyODQ5OSwyODU1NSwyODUyMSwyODU0MywyODU2NSwyODUxNSwyODUzNSwyODUyMiwyODUzOSwyOTEwNiwyOTEwMywyOTA4MywyOTEwNCwyOTA4OCwyOTA4MiwyOTA5NywyOTEwOSwyOTA4NSwyOTA5MywyOTA4NiwyOTA5MiwyOTA4OSwyOTA5OCwyOTA4NCwyOTA5NSwyOTEwNywyOTMzNiwyOTMzOCwyOTUyOCwyOTUyMiwyOTUzNCwyOTUzNSwyOTUzNiwyOTUzMywyOTUzMSwyOTUzNywyOTUzMCwyOTUyOSwyOTUzOCwyOTgzMSwyOTgzMywyOTgzNCwyOTgzMCwyOTgyNSwyOTgyMSwyOTgyOSwyOTgzMiwyOTgyMCwyOTgxNywyOTk2MCwyOTk1OSwzMDA3OCwzMDI0NSwzMDIzOCwzMDIzMywzMDIzNywzMDIzNiwzMDI0MywzMDIzNCwzMDI0OCwzMDIzNSwzMDM2NCwzMDM2NSwzMDM2NiwzMDM2MywzMDYwNSwzMDYwNywzMDYwMSwzMDYwMCwzMDkyNSwzMDkwNywzMDkyNywzMDkyNCwzMDkyOSwzMDkyNiwzMDkzMiwzMDkyMCwzMDkxNSwzMDkxNiwzMDkyMSwzMTEzMCwzMTEzNywzMTEzNiwzMTEzMiwzMTEzOCwzMTEzMSwyNzUxMCwzMTI4OSwzMTQxMCwzMTQxMiwzMTQxMSwzMTY3MSwzMTY5MSwzMTY3OCwzMTY2MCwzMTY5NCwzMTY2MywzMTY3MywzMTY5MCwzMTY2OSwzMTk0MSwzMTk0NCwzMTk0OCwzMTk0NywzMjI0NywzMjIxOSwzMjIzNCwzMjIzMSwzMjIxNSwzMjIyNSwzMjI1OSwzMjI1MCwzMjIzMCwzMjI0NiwzMjI0MSwzMjI0MCwzMjIzOCwzMjIyMywzMjYzMCwzMjY4NCwzMjY4OCwzMjY4NSwzMjc0OSwzMjc0NywzMjc0NiwzMjc0OCwzMjc0MiwzMjc0NCwzMjg2OCwzMjg3MSwzMzE4NywzMzE4MywzMzE4MiwzMzE3MywzMzE4NiwzMzE3NywzMzE3NSwzMzMwMiwzMzM1OSwzMzM2MywzMzM2MiwzMzM2MCwzMzM1OCwzMzM2MSwzNDA4NCwzNDEwNywzNDA2MywzNDA0OCwzNDA4OSwzNDA2MiwzNDA1NywzNDA2MSwzNDA3OSwzNDA1OCwzNDA4NywzNDA3NiwzNDA0MywzNDA5MSwzNDA0MiwzNDA1NiwzNDA2MCwzNDAzNiwzNDA5MCwzNDAzNCwzNDA2OSwzNDAzOSwzNDAyNywzNDAzNSwzNDA0NCwzNDA2NiwzNDAyNiwzNDAyNSwzNDA3MCwzNDA0NiwzNDA4OCwzNDA3NywzNDA5NCwzNDA1MCwzNDA0NSwzNDA3OCwzNDAzOCwzNDA5NywzNDA4NiwzNDAyMywzNDAyNCwzNDAzMiwzNDAzMSwzNDA0MSwzNDA3MiwzNDA4MCwzNDA5NiwzNDA1OSwzNDA3MywzNDA5NSwzNDQwMiwzNDY0NiwzNDY1OSwzNDY2MCwzNDY3OSwzNDc4NSwzNDY3NSwzNDY0OCwzNDY0NCwzNDY1MSwzNDY0MiwzNDY1NywzNDY1MCwzNDY0MSwzNDY1NCwzNDY2OSwzNDY2NiwzNDY0MCwzNDYzOCwzNDY1NSwzNDY1MywzNDY3MSwzNDY2OCwzNDY4MiwzNDY3MCwzNDY1MiwzNDY2MSwzNDYzOSwzNDY4MywzNDY3NywzNDY1OCwzNDY2MywzNDY2NSwzNDkwNiwzNTA3NywzNTA4NCwzNTA5MiwzNTA4MywzNTA5NSwzNTA5NiwzNTA5NywzNTA3OCwzNTA5NCwzNTA4OSwzNTA4NiwzNTA4MSwzNTIzNCwzNTIzNiwzNTIzNSwzNTMwOSwzNTMxMiwzNTMwOCwzNTUzNSwzNTUyNiwzNTUxMiwzNTUzOSwzNTUzNywzNTU0MCwzNTU0MSwzNTUxNSwzNTU0MywzNTUxOCwzNTUyMCwzNTUyNSwzNTU0NCwzNTUyMywzNTUxNCwzNTUxNywzNTU0NSwzNTkwMiwzNTkxNywzNTk4MywzNjA2OSwzNjA2MywzNjA1NywzNjA3MiwzNjA1OCwzNjA2MSwzNjA3MSwzNjI1NiwzNjI1MiwzNjI1NywzNjI1MSwzNjM4NCwzNjM4NywzNjM4OSwzNjM4OCwzNjM5OCwzNjM3MywzNjM3OSwzNjM3NCwzNjM2OSwzNjM3NywzNjM5MCwzNjM5MSwzNjM3MiwzNjM3MCwzNjM3NiwzNjM3MSwzNjM4MCwzNjM3NSwzNjM3OCwzNjY1MiwzNjY0NCwzNjYzMiwzNjYzNCwzNjY0MCwzNjY0MywzNjYzMCwzNjYzMSwzNjk3OSwzNjk3NiwzNjk3NSwzNjk2NywzNjk3MSwzNzE2NywzNzE2MywzNzE2MSwzNzE2MiwzNzE3MCwzNzE1OCwzNzE2NiwzNzI1MywzNzI1NCwzNzI1OCwzNzI0OSwzNzI1MCwzNzI1MiwzNzI0OCwzNzU4NCwzNzU3MSwzNzU3MiwzNzU2OCwzNzU5MywzNzU1OCwzNzU4MywzNzYxNywzNzU5OSwzNzU5MiwzNzYwOSwzNzU5MSwzNzU5NywzNzU4MCwzNzYxNSwzNzU3MCwzNzYwOCwzNzU3OCwzNzU3NiwzNzU4MiwzNzYwNiwzNzU4MSwzNzU4OSwzNzU3NywzNzYwMCwzNzU5OCwzNzYwNywzNzU4NSwzNzU4NywzNzU1NywzNzYwMSwzNzU3NCwzNzU1NiwzODI2OCwzODMxNiwzODMxNSwzODMxOCwzODMyMCwzODU2NCwzODU2MiwzODYxMSwzODY2MSwzODY2NCwzODY1OCwzODc0NiwzODc5NCwzODc5OCwzODc5MiwzODg2NCwzODg2MywzODk0MiwzODk0MSwzODk1MCwzODk1MywzODk1MiwzODk0NCwzODkzOSwzODk1MSwzOTA5MCwzOTE3NiwzOTE2MiwzOTE4NSwzOTE4OCwzOTE5MCwzOTE5MSwzOTE4OSwzOTM4OCwzOTM3MywzOTM3NSwzOTM3OSwzOTM4MCwzOTM3NCwzOTM2OSwzOTM4MiwzOTM4NCwzOTM3MSwzOTM4MywzOTM3MiwzOTYwMywzOTY2MCwzOTY1OSwzOTY2NywzOTY2NiwzOTY2NSwzOTc1MCwzOTc0NywzOTc4MywzOTc5NiwzOTc5MywzOTc4MiwzOTc5OCwzOTc5NywzOTc5MiwzOTc4NCwzOTc4MCwzOTc4OCw0MDE4OCw0MDE4Niw0MDE4OSw0MDE5MSw0MDE4Myw0MDE5OSw0MDE5Miw0MDE4NSw0MDE4Nyw0MDIwMCw0MDE5Nyw0MDE5Niw0MDU3OSw0MDY1OSw0MDcxOSw0MDcyMCwyMDc2NCwyMDc1NSwyMDc1OSwyMDc2MiwyMDc1MywyMDk1OCwyMTMwMCwyMTQ3MywyMjEyOCwyMjExMiwyMjEyNiwyMjEzMSwyMjExOCwyMjExNSwyMjEyNSwyMjEzMCwyMjExMCwyMjEzNSwyMjMwMCwyMjI5OSwyMjcyOCwyMjcxNywyMjcyOSwyMjcxOSwyMjcxNCwyMjcyMiwyMjcxNiwyMjcyNiwyMzMxOSwyMzMyMSwyMzMyMywyMzMyOSwyMzMxNiwyMzMxNSwyMzMxMiwyMzMxOCwyMzMzNiwyMzMyMiwyMzMyOCwyMzMyNiwyMzUzNSwyMzk4MCwyMzk4NSwyMzk3NywyMzk3NSwyMzk4OSwyMzk4NCwyMzk4MiwyMzk3OCwyMzk3NiwyMzk4NiwyMzk4MSwyMzk4MywyMzk4OCwyNDE2NywyNDE2OCwyNDE2NiwyNDE3NSwyNDI5NywyNDI5NSwyNDI5NCwyNDI5NiwyNDI5MywyNDM5NSwyNDUwOCwyNDk4OSwyNTAwMCwyNDk4MiwyNTAyOSwyNTAxMiwyNTAzMCwyNTAyNSwyNTAzNiwyNTAxOCwyNTAyMywyNTAxNiwyNDk3MiwyNTgxNSwyNTgxNCwyNTgwOCwyNTgwNywyNTgwMSwyNTc4OSwyNTczNywyNTc5NSwyNTgxOSwyNTg0MywyNTgxNywyNTkwNywyNTk4MywyNTk4MCwyNjAxOCwyNjMxMiwyNjMwMiwyNjMwNCwyNjMxNCwyNjMxNSwyNjMxOSwyNjMwMSwyNjI5OSwyNjI5OCwyNjMxNiwyNjQwMywyNzE4OCwyNzIzOCwyNzIwOSwyNzIzOSwyNzE4NiwyNzI0MCwyNzE5OCwyNzIyOSwyNzI0NSwyNzI1NCwyNzIyNywyNzIxNywyNzE3NiwyNzIyNiwyNzE5NSwyNzE5OSwyNzIwMSwyNzI0MiwyNzIzNiwyNzIxNiwyNzIxNSwyNzIyMCwyNzI0NywyNzI0MSwyNzIzMiwyNzE5NiwyNzIzMCwyNzIyMiwyNzIyMSwyNzIxMywyNzIxNCwyNzIwNiwyNzQ3NywyNzQ3NiwyNzQ3OCwyNzU1OSwyNzU2MiwyNzU2MywyNzU5MiwyNzU5MSwyNzY1MiwyNzY1MSwyNzY1NCwyODU4OSwyODYxOSwyODU3OSwyODYxNSwyODYwNCwyODYyMiwyODYxNiwyODUxMCwyODYxMiwyODYwNSwyODU3NCwyODYxOCwyODU4NCwyODY3NiwyODU4MSwyODU5MCwyODYwMiwyODU4OCwyODU4NiwyODYyMywyODYwNywyODYwMCwyODU3OCwyODYxNywyODU4NywyODYyMSwyODU5MSwyODU5NCwyODU5MiwyOTEyNSwyOTEyMiwyOTExOSwyOTExMiwyOTE0MiwyOTEyMCwyOTEyMSwyOTEzMSwyOTE0MCwyOTEzMCwyOTEyNywyOTEzNSwyOTExNywyOTE0NCwyOTExNiwyOTEyNiwyOTE0NiwyOTE0NywyOTM0MSwyOTM0MiwyOTU0NSwyOTU0MiwyOTU0MywyOTU0OCwyOTU0MSwyOTU0NywyOTU0NiwyOTgyMywyOTg1MCwyOTg1NiwyOTg0NCwyOTg0MiwyOTg0NSwyOTg1NywyOTk2MywzMDA4MCwzMDI1NSwzMDI1MywzMDI1NywzMDI2OSwzMDI1OSwzMDI2OCwzMDI2MSwzMDI1OCwzMDI1NiwzMDM5NSwzMDQzOCwzMDYxOCwzMDYyMSwzMDYyNSwzMDYyMCwzMDYxOSwzMDYyNiwzMDYyNywzMDYxMywzMDYxNywzMDYxNSwzMDk0MSwzMDk1MywzMDk0OSwzMDk1NCwzMDk0MiwzMDk0NywzMDkzOSwzMDk0NSwzMDk0NiwzMDk1NywzMDk0MywzMDk0NCwzMTE0MCwzMTMwMCwzMTMwNCwzMTMwMywzMTQxNCwzMTQxNiwzMTQxMywzMTQwOSwzMTQxNSwzMTcxMCwzMTcxNSwzMTcxOSwzMTcwOSwzMTcwMSwzMTcxNywzMTcwNiwzMTcyMCwzMTczNywzMTcwMCwzMTcyMiwzMTcxNCwzMTcwOCwzMTcyMywzMTcwNCwzMTcxMSwzMTk1NCwzMTk1NiwzMTk1OSwzMTk1MiwzMTk1MywzMjI3NCwzMjI4OSwzMjI3OSwzMjI2OCwzMjI4NywzMjI4OCwzMjI3NSwzMjI3MCwzMjI4NCwzMjI3NywzMjI4MiwzMjI5MCwzMjI2NywzMjI3MSwzMjI3OCwzMjI2OSwzMjI3NiwzMjI5MywzMjI5MiwzMjU3OSwzMjYzNSwzMjYzNiwzMjYzNCwzMjY4OSwzMjc1MSwzMjgxMCwzMjgwOSwzMjg3NiwzMzIwMSwzMzE5MCwzMzE5OCwzMzIwOSwzMzIwNSwzMzE5NSwzMzIwMCwzMzE5NiwzMzIwNCwzMzIwMiwzMzIwNywzMzE5MSwzMzI2NiwzMzM2NSwzMzM2NiwzMzM2NywzNDEzNCwzNDExNywzNDE1NSwzNDEyNSwzNDEzMSwzNDE0NSwzNDEzNiwzNDExMiwzNDExOCwzNDE0OCwzNDExMywzNDE0NiwzNDExNiwzNDEyOSwzNDExOSwzNDE0NywzNDExMCwzNDEzOSwzNDE2MSwzNDEyNiwzNDE1OCwzNDE2NSwzNDEzMywzNDE1MSwzNDE0NCwzNDE4OCwzNDE1MCwzNDE0MSwzNDEzMiwzNDE0OSwzNDE1NiwzNDQwMywzNDQwNSwzNDQwNCwzNDcxNSwzNDcwMywzNDcxMSwzNDcwNywzNDcwNiwzNDY5NiwzNDY4OSwzNDcxMCwzNDcxMiwzNDY4MSwzNDY5NSwzNDcyMywzNDY5MywzNDcwNCwzNDcwNSwzNDcxNywzNDY5MiwzNDcwOCwzNDcxNiwzNDcxNCwzNDY5NywzNTEwMiwzNTExMCwzNTEyMCwzNTExNywzNTExOCwzNTExMSwzNTEyMSwzNTEwNiwzNTExMywzNTEwNywzNTExOSwzNTExNiwzNTEwMywzNTMxMywzNTU1MiwzNTU1NCwzNTU3MCwzNTU3MiwzNTU3MywzNTU0OSwzNTYwNCwzNTU1NiwzNTU1MSwzNTU2OCwzNTUyOCwzNTU1MCwzNTU1MywzNTU2MCwzNTU4MywzNTU2NywzNTU3OSwzNTk4NSwzNTk4NiwzNTk4NCwzNjA4NSwzNjA3OCwzNjA4MSwzNjA4MCwzNjA4MywzNjIwNCwzNjIwNiwzNjI2MSwzNjI2MywzNjQwMywzNjQxNCwzNjQwOCwzNjQxNiwzNjQyMSwzNjQwNiwzNjQxMiwzNjQxMywzNjQxNywzNjQwMCwzNjQxNSwzNjU0MSwzNjY2MiwzNjY1NCwzNjY2MSwzNjY1OCwzNjY2NSwzNjY2MywzNjY2MCwzNjk4MiwzNjk4NSwzNjk4NywzNjk5OCwzNzExNCwzNzE3MSwzNzE3MywzNzE3NCwzNzI2NywzNzI2NCwzNzI2NSwzNzI2MSwzNzI2MywzNzY3MSwzNzY2MiwzNzY0MCwzNzY2MywzNzYzOCwzNzY0NywzNzc1NCwzNzY4OCwzNzY5MiwzNzY1OSwzNzY2NywzNzY1MCwzNzYzMywzNzcwMiwzNzY3NywzNzY0NiwzNzY0NSwzNzU3OSwzNzY2MSwzNzYyNiwzNzY2OSwzNzY1MSwzNzYyNSwzNzYyMywzNzY4NCwzNzYzNCwzNzY2OCwzNzYzMSwzNzY3MywzNzY4OSwzNzY4NSwzNzY3NCwzNzY1MiwzNzY0NCwzNzY0MywzNzYzMCwzNzY0MSwzNzYzMiwzNzYyNywzNzY1NCwzODMzMiwzODM0OSwzODMzNCwzODMyOSwzODMzMCwzODMyNiwzODMzNSwzODMyNSwzODMzMywzODU2OSwzODYxMiwzODY2NywzODY3NCwzODY3MiwzODgwOSwzODgwNywzODgwNCwzODg5NiwzODkwNCwzODk2NSwzODk1OSwzODk2MiwzOTIwNCwzOTE5OSwzOTIwNywzOTIwOSwzOTMyNiwzOTQwNiwzOTQwNCwzOTM5NywzOTM5NiwzOTQwOCwzOTM5NSwzOTQwMiwzOTQwMSwzOTM5OSwzOTYwOSwzOTYxNSwzOTYwNCwzOTYxMSwzOTY3MCwzOTY3NCwzOTY3MywzOTY3MSwzOTczMSwzOTgwOCwzOTgxMywzOTgxNSwzOTgwNCwzOTgwNiwzOTgwMywzOTgxMCwzOTgyNywzOTgyNiwzOTgyNCwzOTgwMiwzOTgyOSwzOTgwNSwzOTgxNiw0MDIyOSw0MDIxNSw0MDIyNCw0MDIyMiw0MDIxMiw0MDIzMyw0MDIyMSw0MDIxNiw0MDIyNiw0MDIwOCw0MDIxNyw0MDIyMyw0MDU4NCw0MDU4Miw0MDU4Myw0MDYyMiw0MDYyMSw0MDY2MSw0MDY2Miw0MDY5OCw0MDcyMiw0MDc2NSwyMDc3NCwyMDc3MywyMDc3MCwyMDc3MiwyMDc2OCwyMDc3NywyMTIzNiwyMjE2MywyMjE1NiwyMjE1NywyMjE1MCwyMjE0OCwyMjE0NywyMjE0MiwyMjE0NiwyMjE0MywyMjE0NSwyMjc0MiwyMjc0MCwyMjczNSwyMjczOCwyMzM0MSwyMzMzMywyMzM0NiwyMzMzMSwyMzM0MCwyMzMzNSwyMzMzNCwyMzM0MywyMzM0MiwyMzQxOSwyMzUzNywyMzUzOCwyMzk5MSwyNDE3MiwyNDE3MCwyNDUxMCwyNDUwNywyNTAyNywyNTAxMywyNTAyMCwyNTA2MywyNTA1NiwyNTA2MSwyNTA2MCwyNTA2NCwyNTA1NCwyNTgzOSwyNTgzMywyNTgyNywyNTgzNSwyNTgyOCwyNTgzMiwyNTk4NSwyNTk4NCwyNjAzOCwyNjA3NCwyNjMyMiwyNzI3NywyNzI4NiwyNzI2NSwyNzMwMSwyNzI3MywyNzI5NSwyNzI5MSwyNzI5NywyNzI5NCwyNzI3MSwyNzI4MywyNzI3OCwyNzI4NSwyNzI2NywyNzMwNCwyNzMwMCwyNzI4MSwyNzI2MywyNzMwMiwyNzI5MCwyNzI2OSwyNzI3NiwyNzI4MiwyNzQ4MywyNzU2NSwyNzY1NywyODYyMCwyODU4NSwyODY2MCwyODYyOCwyODY0MywyODYzNiwyODY1MywyODY0NywyODY0NiwyODYzOCwyODY1OCwyODYzNywyODY0MiwyODY0OCwyOTE1MywyOTE2OSwyOTE2MCwyOTE3MCwyOTE1NiwyOTE2OCwyOTE1NCwyOTU1NSwyOTU1MCwyOTU1MSwyOTg0NywyOTg3NCwyOTg2NywyOTg0MCwyOTg2NiwyOTg2OSwyOTg3MywyOTg2MSwyOTg3MSwyOTk2OCwyOTk2OSwyOTk3MCwyOTk2NywzMDA4NCwzMDI3NSwzMDI4MCwzMDI4MSwzMDI3OSwzMDM3MiwzMDQ0MSwzMDY0NSwzMDYzNSwzMDY0MiwzMDY0NywzMDY0NiwzMDY0NCwzMDY0MSwzMDYzMiwzMDcwNCwzMDk2MywzMDk3MywzMDk3OCwzMDk3MSwzMDk3MiwzMDk2MiwzMDk4MSwzMDk2OSwzMDk3NCwzMDk4MCwzMTE0NywzMTE0NCwzMTMyNCwzMTMyMywzMTMxOCwzMTMyMCwzMTMxNiwzMTMyMiwzMTQyMiwzMTQyNCwzMTQyNSwzMTc0OSwzMTc1OSwzMTczMCwzMTc0NCwzMTc0MywzMTczOSwzMTc1OCwzMTczMiwzMTc1NSwzMTczMSwzMTc0NiwzMTc1MywzMTc0NywzMTc0NSwzMTczNiwzMTc0MSwzMTc1MCwzMTcyOCwzMTcyOSwzMTc2MCwzMTc1NCwzMTk3NiwzMjMwMSwzMjMxNiwzMjMyMiwzMjMwNywzODk4NCwzMjMxMiwzMjI5OCwzMjMyOSwzMjMyMCwzMjMyNywzMjI5NywzMjMzMiwzMjMwNCwzMjMxNSwzMjMxMCwzMjMyNCwzMjMxNCwzMjU4MSwzMjYzOSwzMjYzOCwzMjYzNywzMjc1NiwzMjc1NCwzMjgxMiwzMzIxMSwzMzIyMCwzMzIyOCwzMzIyNiwzMzIyMSwzMzIyMywzMzIxMiwzMzI1NywzMzM3MSwzMzM3MCwzMzM3MiwzNDE3OSwzNDE3NiwzNDE5MSwzNDIxNSwzNDE5NywzNDIwOCwzNDE4NywzNDIxMSwzNDE3MSwzNDIxMiwzNDIwMiwzNDIwNiwzNDE2NywzNDE3MiwzNDE4NSwzNDIwOSwzNDE3MCwzNDE2OCwzNDEzNSwzNDE5MCwzNDE5OCwzNDE4MiwzNDE4OSwzNDIwMSwzNDIwNSwzNDE3NywzNDIxMCwzNDE3OCwzNDE4NCwzNDE4MSwzNDE2OSwzNDE2NiwzNDIwMCwzNDE5MiwzNDIwNywzNDQwOCwzNDc1MCwzNDczMCwzNDczMywzNDc1NywzNDczNiwzNDczMiwzNDc0NSwzNDc0MSwzNDc0OCwzNDczNCwzNDc2MSwzNDc1NSwzNDc1NCwzNDc2NCwzNDc0MywzNDczNSwzNDc1NiwzNDc2MiwzNDc0MCwzNDc0MiwzNDc1MSwzNDc0NCwzNDc0OSwzNDc4MiwzNDczOCwzNTEyNSwzNTEyMywzNTEzMiwzNTEzNCwzNTEzNywzNTE1NCwzNTEyNywzNTEzOCwzNTI0NSwzNTI0NywzNTI0NiwzNTMxNCwzNTMxNSwzNTYxNCwzNTYwOCwzNTYwNiwzNTYwMSwzNTU4OSwzNTU5NSwzNTYxOCwzNTU5OSwzNTYwMiwzNTYwNSwzNTU5MSwzNTU5NywzNTU5MiwzNTU5MCwzNTYxMiwzNTYwMywzNTYxMCwzNTkxOSwzNTk1MiwzNTk1NCwzNTk1MywzNTk1MSwzNTk4OSwzNTk4OCwzNjA4OSwzNjIwNywzNjQzMCwzNjQyOSwzNjQzNSwzNjQzMiwzNjQyOCwzNjQyMywzNjY3NSwzNjY3MiwzNjk5NywzNjk5MCwzNzE3NiwzNzI3NCwzNzI4MiwzNzI3NSwzNzI3MywzNzI3OSwzNzI4MSwzNzI3NywzNzI4MCwzNzc5MywzNzc2MywzNzgwNywzNzczMiwzNzcxOCwzNzcwMywzNzc1NiwzNzcyMCwzNzcyNCwzNzc1MCwzNzcwNSwzNzcxMiwzNzcxMywzNzcyOCwzNzc0MSwzNzc3NSwzNzcwOCwzNzczOCwzNzc1MywzNzcxOSwzNzcxNywzNzcxNCwzNzcxMSwzNzc0NSwzNzc1MSwzNzc1NSwzNzcyOSwzNzcyNiwzNzczMSwzNzczNSwzNzc2MCwzNzcxMCwzNzcyMSwzODM0MywzODMzNiwzODM0NSwzODMzOSwzODM0MSwzODMyNywzODU3NCwzODU3NiwzODU3MiwzODY4OCwzODY4NywzODY4MCwzODY4NSwzODY4MSwzODgxMCwzODgxNywzODgxMiwzODgxNCwzODgxMywzODg2OSwzODg2OCwzODg5NywzODk3NywzODk4MCwzODk4NiwzODk4NSwzODk4MSwzODk3OSwzOTIwNSwzOTIxMSwzOTIxMiwzOTIxMCwzOTIxOSwzOTIxOCwzOTIxNSwzOTIxMywzOTIxNywzOTIxNiwzOTMyMCwzOTMzMSwzOTMyOSwzOTQyNiwzOTQxOCwzOTQxMiwzOTQxNSwzOTQxNywzOTQxNiwzOTQxNCwzOTQxOSwzOTQyMSwzOTQyMiwzOTQyMCwzOTQyNywzOTYxNCwzOTY3OCwzOTY3NywzOTY4MSwzOTY3NiwzOTc1MiwzOTgzNCwzOTg0OCwzOTgzOCwzOTgzNSwzOTg0NiwzOTg0MSwzOTg0NSwzOTg0NCwzOTgxNCwzOTg0MiwzOTg0MCwzOTg1NSw0MDI0Myw0MDI1Nyw0MDI5NSw0MDI0Niw0MDIzOCw0MDIzOSw0MDI0MSw0MDI0OCw0MDI0MCw0MDI2MSw0MDI1OCw0MDI1OSw0MDI1NCw0MDI0Nyw0MDI1Niw0MDI1MywzMjc1Nyw0MDIzNyw0MDU4Niw0MDU4NSw0MDU4OSw0MDYyNCw0MDY0OCw0MDY2Niw0MDY5OSw0MDcwMyw0MDc0MCw0MDczOSw0MDczOCw0MDc4OCw0MDg2NCwyMDc4NSwyMDc4MSwyMDc4MiwyMjE2OCwyMjE3MiwyMjE2NywyMjE3MCwyMjE3MywyMjE2OSwyMjg5NiwyMzM1NiwyMzY1NywyMzY1OCwyNDAwMCwyNDE3MywyNDE3NCwyNTA0OCwyNTA1NSwyNTA2OSwyNTA3MCwyNTA3MywyNTA2NiwyNTA3MiwyNTA2NywyNTA0NiwyNTA2NSwyNTg1NSwyNTg2MCwyNTg1MywyNTg0OCwyNTg1NywyNTg1OSwyNTg1MiwyNjAwNCwyNjA3NSwyNjMzMCwyNjMzMSwyNjMyOCwyNzMzMywyNzMyMSwyNzMyNSwyNzM2MSwyNzMzNCwyNzMyMiwyNzMxOCwyNzMxOSwyNzMzNSwyNzMxNiwyNzMwOSwyNzQ4NiwyNzU5MywyNzY1OSwyODY3OSwyODY4NCwyODY4NSwyODY3MywyODY3NywyODY5MiwyODY4NiwyODY3MSwyODY3MiwyODY2NywyODcxMCwyODY2OCwyODY2MywyODY4MiwyOTE4NSwyOTE4MywyOTE3NywyOTE4NywyOTE4MSwyOTU1OCwyOTg4MCwyOTg4OCwyOTg3NywyOTg4OSwyOTg4NiwyOTg3OCwyOTg4MywyOTg5MCwyOTk3MiwyOTk3MSwzMDMwMCwzMDMwOCwzMDI5NywzMDI4OCwzMDI5MSwzMDI5NSwzMDI5OCwzMDM3NCwzMDM5NywzMDQ0NCwzMDY1OCwzMDY1MCwzMDk3NSwzMDk4OCwzMDk5NSwzMDk5NiwzMDk4NSwzMDk5MiwzMDk5NCwzMDk5MywzMTE0OSwzMTE0OCwzMTMyNywzMTc3MiwzMTc4NSwzMTc2OSwzMTc3NiwzMTc3NSwzMTc4OSwzMTc3MywzMTc4MiwzMTc4NCwzMTc3OCwzMTc4MSwzMTc5MiwzMjM0OCwzMjMzNiwzMjM0MiwzMjM1NSwzMjM0NCwzMjM1NCwzMjM1MSwzMjMzNywzMjM1MiwzMjM0MywzMjMzOSwzMjY5MywzMjY5MSwzMjc1OSwzMjc2MCwzMjg4NSwzMzIzMywzMzIzNCwzMzIzMiwzMzM3NSwzMzM3NCwzNDIyOCwzNDI0NiwzNDI0MCwzNDI0MywzNDI0MiwzNDIyNywzNDIyOSwzNDIzNywzNDI0NywzNDI0NCwzNDIzOSwzNDI1MSwzNDI1NCwzNDI0OCwzNDI0NSwzNDIyNSwzNDIzMCwzNDI1OCwzNDM0MCwzNDIzMiwzNDIzMSwzNDIzOCwzNDQwOSwzNDc5MSwzNDc5MCwzNDc4NiwzNDc3OSwzNDc5NSwzNDc5NCwzNDc4OSwzNDc4MywzNDgwMywzNDc4OCwzNDc3MiwzNDc4MCwzNDc3MSwzNDc5NywzNDc3NiwzNDc4NywzNDcyNCwzNDc3NSwzNDc3NywzNDgxNywzNDgwNCwzNDc5MiwzNDc4MSwzNTE1NSwzNTE0NywzNTE1MSwzNTE0OCwzNTE0MiwzNTE1MiwzNTE1MywzNTE0NSwzNTYyNiwzNTYyMywzNTYxOSwzNTYzNSwzNTYzMiwzNTYzNywzNTY1NSwzNTYzMSwzNTY0NCwzNTY0NiwzNTYzMywzNTYyMSwzNTYzOSwzNTYyMiwzNTYzOCwzNTYzMCwzNTYyMCwzNTY0MywzNTY0NSwzNTY0MiwzNTkwNiwzNTk1NywzNTk5MywzNTk5MiwzNTk5MSwzNjA5NCwzNjEwMCwzNjA5OCwzNjA5NiwzNjQ0NCwzNjQ1MCwzNjQ0OCwzNjQzOSwzNjQzOCwzNjQ0NiwzNjQ1MywzNjQ1NSwzNjQ0MywzNjQ0MiwzNjQ0OSwzNjQ0NSwzNjQ1NywzNjQzNiwzNjY3OCwzNjY3OSwzNjY4MCwzNjY4MywzNzE2MCwzNzE3OCwzNzE3OSwzNzE4MiwzNzI4OCwzNzI4NSwzNzI4NywzNzI5NSwzNzI5MCwzNzgxMywzNzc3MiwzNzc3OCwzNzgxNSwzNzc4NywzNzc4OSwzNzc2OSwzNzc5OSwzNzc3NCwzNzgwMiwzNzc5MCwzNzc5OCwzNzc4MSwzNzc2OCwzNzc4NSwzNzc5MSwzNzc3MywzNzgwOSwzNzc3NywzNzgxMCwzNzc5NiwzNzgwMCwzNzgxMiwzNzc5NSwzNzc5NywzODM1NCwzODM1NSwzODM1MywzODU3OSwzODYxNSwzODYxOCwyNDAwMiwzODYyMywzODYxNiwzODYyMSwzODY5MSwzODY5MCwzODY5MywzODgyOCwzODgzMCwzODgyNCwzODgyNywzODgyMCwzODgyNiwzODgxOCwzODgyMSwzODg3MSwzODg3MywzODg3MCwzODg3MiwzODkwNiwzODk5MiwzODk5MywzODk5NCwzOTA5NiwzOTIzMywzOTIyOCwzOTIyNiwzOTQzOSwzOTQzNSwzOTQzMywzOTQzNywzOTQyOCwzOTQ0MSwzOTQzNCwzOTQyOSwzOTQzMSwzOTQzMCwzOTYxNiwzOTY0NCwzOTY4OCwzOTY4NCwzOTY4NSwzOTcyMSwzOTczMywzOTc1NCwzOTc1NiwzOTc1NSwzOTg3OSwzOTg3OCwzOTg3NSwzOTg3MSwzOTg3MywzOTg2MSwzOTg2NCwzOTg5MSwzOTg2MiwzOTg3NiwzOTg2NSwzOTg2OSw0MDI4NCw0MDI3NSw0MDI3MSw0MDI2Niw0MDI4Myw0MDI2Nyw0MDI4MSw0MDI3OCw0MDI2OCw0MDI3OSw0MDI3NCw0MDI3Niw0MDI4Nyw0MDI4MCw0MDI4Miw0MDU5MCw0MDU4OCw0MDY3MSw0MDcwNSw0MDcwNCw0MDcyNiw0MDc0MSw0MDc0Nyw0MDc0Niw0MDc0NSw0MDc0NCw0MDc4MCw0MDc4OSwyMDc4OCwyMDc4OSwyMTE0MiwyMTIzOSwyMTQyOCwyMjE4NywyMjE4OSwyMjE4MiwyMjE4MywyMjE4NiwyMjE4OCwyMjc0NiwyMjc0OSwyMjc0NywyMjgwMiwyMzM1NywyMzM1OCwyMzM1OSwyNDAwMywyNDE3NiwyNDUxMSwyNTA4MywyNTg2MywyNTg3MiwyNTg2OSwyNTg2NSwyNTg2OCwyNTg3MCwyNTk4OCwyNjA3OCwyNjA3NywyNjMzNCwyNzM2NywyNzM2MCwyNzM0MCwyNzM0NSwyNzM1MywyNzMzOSwyNzM1OSwyNzM1NiwyNzM0NCwyNzM3MSwyNzM0MywyNzM0MSwyNzM1OCwyNzQ4OCwyNzU2OCwyNzY2MCwyODY5NywyODcxMSwyODcwNCwyODY5NCwyODcxNSwyODcwNSwyODcwNiwyODcwNywyODcxMywyODY5NSwyODcwOCwyODcwMCwyODcxNCwyOTE5NiwyOTE5NCwyOTE5MSwyOTE4NiwyOTE4OSwyOTM0OSwyOTM1MCwyOTM0OCwyOTM0NywyOTM0NSwyOTg5OSwyOTg5MywyOTg3OSwyOTg5MSwyOTk3NCwzMDMwNCwzMDY2NSwzMDY2NiwzMDY2MCwzMDcwNSwzMTAwNSwzMTAwMywzMTAwOSwzMTAwNCwzMDk5OSwzMTAwNiwzMTE1MiwzMTMzNSwzMTMzNiwzMTc5NSwzMTgwNCwzMTgwMSwzMTc4OCwzMTgwMywzMTk4MCwzMTk3OCwzMjM3NCwzMjM3MywzMjM3NiwzMjM2OCwzMjM3NSwzMjM2NywzMjM3OCwzMjM3MCwzMjM3MiwzMjM2MCwzMjU4NywzMjU4NiwzMjY0MywzMjY0NiwzMjY5NSwzMjc2NSwzMjc2NiwzMjg4OCwzMzIzOSwzMzIzNywzMzM4MCwzMzM3NywzMzM3OSwzNDI4MywzNDI4OSwzNDI4NSwzNDI2NSwzNDI3MywzNDI4MCwzNDI2NiwzNDI2MywzNDI4NCwzNDI5MCwzNDI5NiwzNDI2NCwzNDI3MSwzNDI3NSwzNDI2OCwzNDI1NywzNDI4OCwzNDI3OCwzNDI4NywzNDI3MCwzNDI3NCwzNDgxNiwzNDgxMCwzNDgxOSwzNDgwNiwzNDgwNywzNDgyNSwzNDgyOCwzNDgyNywzNDgyMiwzNDgxMiwzNDgyNCwzNDgxNSwzNDgyNiwzNDgxOCwzNTE3MCwzNTE2MiwzNTE2MywzNTE1OSwzNTE2OSwzNTE2NCwzNTE2MCwzNTE2NSwzNTE2MSwzNTIwOCwzNTI1NSwzNTI1NCwzNTMxOCwzNTY2NCwzNTY1NiwzNTY1OCwzNTY0OCwzNTY2NywzNTY3MCwzNTY2OCwzNTY1OSwzNTY2OSwzNTY2NSwzNTY1MCwzNTY2NiwzNTY3MSwzNTkwNywzNTk1OSwzNTk1OCwzNTk5NCwzNjEwMiwzNjEwMywzNjEwNSwzNjI2OCwzNjI2NiwzNjI2OSwzNjI2NywzNjQ2MSwzNjQ3MiwzNjQ2NywzNjQ1OCwzNjQ2MywzNjQ3NSwzNjU0NiwzNjY5MCwzNjY4OSwzNjY4NywzNjY4OCwzNjY5MSwzNjc4OCwzNzE4NCwzNzE4MywzNzI5NiwzNzI5MywzNzg1NCwzNzgzMSwzNzgzOSwzNzgyNiwzNzg1MCwzNzg0MCwzNzg4MSwzNzg2OCwzNzgzNiwzNzg0OSwzNzgwMSwzNzg2MiwzNzgzNCwzNzg0NCwzNzg3MCwzNzg1OSwzNzg0NSwzNzgyOCwzNzgzOCwzNzgyNCwzNzg0MiwzNzg2MywzODI2OSwzODM2MiwzODM2MywzODYyNSwzODY5NywzODY5OSwzODcwMCwzODY5NiwzODY5NCwzODgzNSwzODgzOSwzODgzOCwzODg3NywzODg3OCwzODg3OSwzOTAwNCwzOTAwMSwzOTAwNSwzODk5OSwzOTEwMywzOTEwMSwzOTA5OSwzOTEwMiwzOTI0MCwzOTIzOSwzOTIzNSwzOTMzNCwzOTMzNSwzOTQ1MCwzOTQ0NSwzOTQ2MSwzOTQ1MywzOTQ2MCwzOTQ1MSwzOTQ1OCwzOTQ1NiwzOTQ2MywzOTQ1OSwzOTQ1NCwzOTQ1MiwzOTQ0NCwzOTYxOCwzOTY5MSwzOTY5MCwzOTY5NCwzOTY5MiwzOTczNSwzOTkxNCwzOTkxNSwzOTkwNCwzOTkwMiwzOTkwOCwzOTkxMCwzOTkwNiwzOTkyMCwzOTg5MiwzOTg5NSwzOTkxNiwzOTkwMCwzOTg5NywzOTkwOSwzOTg5MywzOTkwNSwzOTg5OCw0MDMxMSw0MDMyMSw0MDMzMCw0MDMyNCw0MDMyOCw0MDMwNSw0MDMyMCw0MDMxMiw0MDMyNiw0MDMzMSw0MDMzMiw0MDMxNyw0MDI5OSw0MDMwOCw0MDMwOSw0MDMwNCw0MDI5Nyw0MDMyNSw0MDMwNyw0MDMxNSw0MDMyMiw0MDMwMyw0MDMxMyw0MDMxOSw0MDMyNyw0MDI5Niw0MDU5Niw0MDU5Myw0MDY0MCw0MDcwMCw0MDc0OSw0MDc2OCw0MDc2OSw0MDc4MSw0MDc5MCw0MDc5MSw0MDc5MiwyMTMwMywyMjE5NCwyMjE5NywyMjE5NSwyMjc1NSwyMzM2NSwyNDAwNiwyNDAwNywyNDMwMiwyNDMwMywyNDUxMiwyNDUxMywyNTA4MSwyNTg3OSwyNTg3OCwyNTg3NywyNTg3NSwyNjA3OSwyNjM0NCwyNjMzOSwyNjM0MCwyNzM3OSwyNzM3NiwyNzM3MCwyNzM2OCwyNzM4NSwyNzM3NywyNzM3NCwyNzM3NSwyODczMiwyODcyNSwyODcxOSwyODcyNywyODcyNCwyODcyMSwyODczOCwyODcyOCwyODczNSwyODczMCwyODcyOSwyODczNiwyODczMSwyODcyMywyODczNywyOTIwMywyOTIwNCwyOTM1MiwyOTU2NSwyOTU2NCwyOTg4MiwzMDM3OSwzMDM3OCwzMDM5OCwzMDQ0NSwzMDY2OCwzMDY3MCwzMDY3MSwzMDY2OSwzMDcwNiwzMTAxMywzMTAxMSwzMTAxNSwzMTAxNiwzMTAxMiwzMTAxNywzMTE1NCwzMTM0MiwzMTM0MCwzMTM0MSwzMTQ3OSwzMTgxNywzMTgxNiwzMTgxOCwzMTgxNSwzMTgxMywzMTk4MiwzMjM3OSwzMjM4MiwzMjM4NSwzMjM4NCwzMjY5OCwzMjc2NywzMjg4OSwzMzI0MywzMzI0MSwzMzI5MSwzMzM4NCwzMzM4NSwzNDMzOCwzNDMwMywzNDMwNSwzNDMwMiwzNDMzMSwzNDMwNCwzNDI5NCwzNDMwOCwzNDMxMywzNDMwOSwzNDMxNiwzNDMwMSwzNDg0MSwzNDgzMiwzNDgzMywzNDgzOSwzNDgzNSwzNDgzOCwzNTE3MSwzNTE3NCwzNTI1NywzNTMxOSwzNTY4MCwzNTY5MCwzNTY3NywzNTY4OCwzNTY4MywzNTY4NSwzNTY4NywzNTY5MywzNjI3MCwzNjQ4NiwzNjQ4OCwzNjQ4NCwzNjY5NywzNjY5NCwzNjY5NSwzNjY5MywzNjY5NiwzNjY5OCwzNzAwNSwzNzE4NywzNzE4NSwzNzMwMywzNzMwMSwzNzI5OCwzNzI5OSwzNzg5OSwzNzkwNywzNzg4MywzNzkyMCwzNzkwMywzNzkwOCwzNzg4NiwzNzkwOSwzNzkwNCwzNzkyOCwzNzkxMywzNzkwMSwzNzg3NywzNzg4OCwzNzg3OSwzNzg5NSwzNzkwMiwzNzkxMCwzNzkwNiwzNzg4MiwzNzg5NywzNzg4MCwzNzg5OCwzNzg4NywzNzg4NCwzNzkwMCwzNzg3OCwzNzkwNSwzNzg5NCwzODM2NiwzODM2OCwzODM2NywzODcwMiwzODcwMywzODg0MSwzODg0MywzODkwOSwzODkxMCwzOTAwOCwzOTAxMCwzOTAxMSwzOTAwNywzOTEwNSwzOTEwNiwzOTI0OCwzOTI0NiwzOTI1NywzOTI0NCwzOTI0MywzOTI1MSwzOTQ3NCwzOTQ3NiwzOTQ3MywzOTQ2OCwzOTQ2NiwzOTQ3OCwzOTQ2NSwzOTQ3MCwzOTQ4MCwzOTQ2OSwzOTYyMywzOTYyNiwzOTYyMiwzOTY5NiwzOTY5OCwzOTY5NywzOTk0NywzOTk0NCwzOTkyNywzOTk0MSwzOTk1NCwzOTkyOCw0MDAwMCwzOTk0MywzOTk1MCwzOTk0MiwzOTk1OSwzOTk1NiwzOTk0NSw0MDM1MSw0MDM0NSw0MDM1Niw0MDM0OSw0MDMzOCw0MDM0NCw0MDMzNiw0MDM0Nyw0MDM1Miw0MDM0MCw0MDM0OCw0MDM2Miw0MDM0Myw0MDM1Myw0MDM0Niw0MDM1NCw0MDM2MCw0MDM1MCw0MDM1NSw0MDM4Myw0MDM2MSw0MDM0Miw0MDM1OCw0MDM1OSw0MDYwMSw0MDYwMyw0MDYwMiw0MDY3Nyw0MDY3Niw0MDY3OSw0MDY3OCw0MDc1Miw0MDc1MCw0MDc5NSw0MDgwMCw0MDc5OCw0MDc5Nyw0MDc5Myw0MDg0OSwyMDc5NCwyMDc5MywyMTE0NCwyMTE0MywyMjIxMSwyMjIwNSwyMjIwNiwyMzM2OCwyMzM2NywyNDAxMSwyNDAxNSwyNDMwNSwyNTA4NSwyNTg4MywyNzM5NCwyNzM4OCwyNzM5NSwyNzM4NCwyNzM5MiwyODczOSwyODc0MCwyODc0NiwyODc0NCwyODc0NSwyODc0MSwyODc0MiwyOTIxMywyOTIxMCwyOTIwOSwyOTU2NiwyOTk3NSwzMDMxNCwzMDY3MiwzMTAyMSwzMTAyNSwzMTAyMywzMTgyOCwzMTgyNywzMTk4NiwzMjM5NCwzMjM5MSwzMjM5MiwzMjM5NSwzMjM5MCwzMjM5NywzMjU4OSwzMjY5OSwzMjgxNiwzMzI0NSwzNDMyOCwzNDM0NiwzNDM0MiwzNDMzNSwzNDMzOSwzNDMzMiwzNDMyOSwzNDM0MywzNDM1MCwzNDMzNywzNDMzNiwzNDM0NSwzNDMzNCwzNDM0MSwzNDg1NywzNDg0NSwzNDg0MywzNDg0OCwzNDg1MiwzNDg0NCwzNDg1OSwzNDg5MCwzNTE4MSwzNTE3NywzNTE4MiwzNTE3OSwzNTMyMiwzNTcwNSwzNTcwNCwzNTY1MywzNTcwNiwzNTcwNywzNjExMiwzNjExNiwzNjI3MSwzNjQ5NCwzNjQ5MiwzNjcwMiwzNjY5OSwzNjcwMSwzNzE5MCwzNzE4OCwzNzE4OSwzNzMwNSwzNzk1MSwzNzk0NywzNzk0MiwzNzkyOSwzNzk0OSwzNzk0OCwzNzkzNiwzNzk0NSwzNzkzMCwzNzk0MywzNzkzMiwzNzk1MiwzNzkzNywzODM3MywzODM3MiwzODM3MSwzODcwOSwzODcxNCwzODg0NywzODg4MSwzOTAxMiwzOTExMywzOTExMCwzOTEwNCwzOTI1NiwzOTI1NCwzOTQ4MSwzOTQ4NSwzOTQ5NCwzOTQ5MiwzOTQ5MCwzOTQ4OSwzOTQ4MiwzOTQ4NywzOTYyOSwzOTcwMSwzOTcwMywzOTcwNCwzOTcwMiwzOTczOCwzOTc2MiwzOTk3OSwzOTk2NSwzOTk2NCwzOTk4MCwzOTk3MSwzOTk3NiwzOTk3NywzOTk3MiwzOTk2OSw0MDM3NSw0MDM3NCw0MDM4MCw0MDM4NSw0MDM5MSw0MDM5NCw0MDM5OSw0MDM4Miw0MDM4OSw0MDM4Nyw0MDM3OSw0MDM3Myw0MDM5OCw0MDM3Nyw0MDM3OCw0MDM2NCw0MDM5Miw0MDM2OSw0MDM2NSw0MDM5Niw0MDM3MSw0MDM5Nyw0MDM3MCw0MDU3MCw0MDYwNCw0MDY4Myw0MDY4Niw0MDY4NSw0MDczMSw0MDcyOCw0MDczMCw0MDc1Myw0MDc4Miw0MDgwNSw0MDgwNCw0MDg1MCwyMDE1MywyMjIxNCwyMjIxMywyMjIxOSwyMjg5NywyMzM3MSwyMzM3MiwyNDAyMSwyNDAxNywyNDMwNiwyNTg4OSwyNTg4OCwyNTg5NCwyNTg5MCwyNzQwMywyNzQwMCwyNzQwMSwyNzY2MSwyODc1NywyODc1OCwyODc1OSwyODc1NCwyOTIxNCwyOTIxNSwyOTM1MywyOTU2NywyOTkxMiwyOTkwOSwyOTkxMywyOTkxMSwzMDMxNywzMDM4MSwzMTAyOSwzMTE1NiwzMTM0NCwzMTM0NSwzMTgzMSwzMTgzNiwzMTgzMywzMTgzNSwzMTgzNCwzMTk4OCwzMTk4NSwzMjQwMSwzMjU5MSwzMjY0NywzMzI0NiwzMzM4NywzNDM1NiwzNDM1NywzNDM1NSwzNDM0OCwzNDM1NCwzNDM1OCwzNDg2MCwzNDg1NiwzNDg1NCwzNDg1OCwzNDg1MywzNTE4NSwzNTI2MywzNTI2MiwzNTMyMywzNTcxMCwzNTcxNiwzNTcxNCwzNTcxOCwzNTcxNywzNTcxMSwzNjExNywzNjUwMSwzNjUwMCwzNjUwNiwzNjQ5OCwzNjQ5NiwzNjUwMiwzNjUwMywzNjcwNCwzNjcwNiwzNzE5MSwzNzk2NCwzNzk2OCwzNzk2MiwzNzk2MywzNzk2NywzNzk1OSwzNzk1NywzNzk2MCwzNzk2MSwzNzk1OCwzODcxOSwzODg4MywzOTAxOCwzOTAxNywzOTExNSwzOTI1MiwzOTI1OSwzOTUwMiwzOTUwNywzOTUwOCwzOTUwMCwzOTUwMywzOTQ5NiwzOTQ5OCwzOTQ5NywzOTUwNiwzOTUwNCwzOTYzMiwzOTcwNSwzOTcyMywzOTczOSwzOTc2NiwzOTc2NSw0MDAwNiw0MDAwOCwzOTk5OSw0MDAwNCwzOTk5MywzOTk4Nyw0MDAwMSwzOTk5NiwzOTk5MSwzOTk4OCwzOTk4NiwzOTk5NywzOTk5MCw0MDQxMSw0MDQwMiw0MDQxNCw0MDQxMCw0MDM5NSw0MDQwMCw0MDQxMiw0MDQwMSw0MDQxNSw0MDQyNSw0MDQwOSw0MDQwOCw0MDQwNiw0MDQzNyw0MDQwNSw0MDQxMyw0MDYzMCw0MDY4OCw0MDc1Nyw0MDc1NSw0MDc1NCw0MDc3MCw0MDgxMSw0MDg1Myw0MDg2NiwyMDc5NywyMTE0NSwyMjc2MCwyMjc1OSwyMjg5OCwyMzM3MywyNDAyNCwzNDg2MywyNDM5OSwyNTA4OSwyNTA5MSwyNTA5MiwyNTg5NywyNTg5MywyNjAwNiwyNjM0NywyNzQwOSwyNzQxMCwyNzQwNywyNzU5NCwyODc2MywyODc2MiwyOTIxOCwyOTU3MCwyOTU2OSwyOTU3MSwzMDMyMCwzMDY3NiwzMTg0NywzMTg0NiwzMjQwNSwzMzM4OCwzNDM2MiwzNDM2OCwzNDM2MSwzNDM2NCwzNDM1MywzNDM2MywzNDM2NiwzNDg2NCwzNDg2NiwzNDg2MiwzNDg2NywzNTE5MCwzNTE4OCwzNTE4NywzNTMyNiwzNTcyNCwzNTcyNiwzNTcyMywzNTcyMCwzNTkwOSwzNjEyMSwzNjUwNCwzNjcwOCwzNjcwNywzNzMwOCwzNzk4NiwzNzk3MywzNzk4MSwzNzk3NSwzNzk4MiwzODg1MiwzODg1MywzODkxMiwzOTUxMCwzOTUxMywzOTcxMCwzOTcxMSwzOTcxMiw0MDAxOCw0MDAyNCw0MDAxNiw0MDAxMCw0MDAxMyw0MDAxMSw0MDAyMSw0MDAyNSw0MDAxMiw0MDAxNCw0MDQ0Myw0MDQzOSw0MDQzMSw0MDQxOSw0MDQyNyw0MDQ0MCw0MDQyMCw0MDQzOCw0MDQxNyw0MDQzMCw0MDQyMiw0MDQzNCw0MDQzMiw0MDQxOCw0MDQyOCw0MDQzNiw0MDQzNSw0MDQyNCw0MDQyOSw0MDY0Miw0MDY1Niw0MDY5MCw0MDY5MSw0MDcxMCw0MDczMiw0MDc2MCw0MDc1OSw0MDc1OCw0MDc3MSw0MDc4Myw0MDgxNyw0MDgxNiw0MDgxNCw0MDgxNSwyMjIyNywyMjIyMSwyMzM3NCwyMzY2MSwyNTkwMSwyNjM0OSwyNjM1MCwyNzQxMSwyODc2NywyODc2OSwyODc2NSwyODc2OCwyOTIxOSwyOTkxNSwyOTkyNSwzMDY3NywzMTAzMiwzMTE1OSwzMTE1OCwzMTg1MCwzMjQwNywzMjY0OSwzMzM4OSwzNDM3MSwzNDg3MiwzNDg3MSwzNDg2OSwzNDg5MSwzNTczMiwzNTczMywzNjUxMCwzNjUxMSwzNjUxMiwzNjUwOSwzNzMxMCwzNzMwOSwzNzMxNCwzNzk5NSwzNzk5MiwzNzk5MywzODYyOSwzODcyNiwzODcyMywzODcyNywzODg1NSwzODg4NSwzOTUxOCwzOTYzNywzOTc2OSw0MDAzNSw0MDAzOSw0MDAzOCw0MDAzNCw0MDAzMCw0MDAzMiw0MDQ1MCw0MDQ0Niw0MDQ1NSw0MDQ1MSw0MDQ1NCw0MDQ1Myw0MDQ0OCw0MDQ0OSw0MDQ1Nyw0MDQ0Nyw0MDQ0NSw0MDQ1Miw0MDYwOCw0MDczNCw0MDc3NCw0MDgyMCw0MDgyMSw0MDgyMiwyMjIyOCwyNTkwMiwyNjA0MCwyNzQxNiwyNzQxNywyNzQxNSwyNzQxOCwyODc3MCwyOTIyMiwyOTM1NCwzMDY4MCwzMDY4MSwzMTAzMywzMTg0OSwzMTg1MSwzMTk5MCwzMjQxMCwzMjQwOCwzMjQxMSwzMjQwOSwzMzI0OCwzMzI0OSwzNDM3NCwzNDM3NSwzNDM3NiwzNTE5MywzNTE5NCwzNTE5NiwzNTE5NSwzNTMyNywzNTczNiwzNTczNywzNjUxNywzNjUxNiwzNjUxNSwzNzk5OCwzNzk5NywzNzk5OSwzODAwMSwzODAwMywzODcyOSwzOTAyNiwzOTI2Myw0MDA0MCw0MDA0Niw0MDA0NSw0MDQ1OSw0MDQ2MSw0MDQ2NCw0MDQ2Myw0MDQ2Niw0MDQ2NSw0MDYwOSw0MDY5Myw0MDcxMyw0MDc3NSw0MDgyNCw0MDgyNyw0MDgyNiw0MDgyNSwyMjMwMiwyODc3NCwzMTg1NSwzNDg3NiwzNjI3NCwzNjUxOCwzNzMxNSwzODAwNCwzODAwOCwzODAwNiwzODAwNSwzOTUyMCw0MDA1Miw0MDA1MSw0MDA0OSw0MDA1Myw0MDQ2OCw0MDQ2Nyw0MDY5NCw0MDcxNCw0MDg2OCwyODc3NiwyODc3MywzMTk5MSwzNDQxMCwzNDg3OCwzNDg3NywzNDg3OSwzNTc0MiwzNTk5NiwzNjUyMSwzNjU1MywzODczMSwzOTAyNywzOTAyOCwzOTExNiwzOTI2NSwzOTMzOSwzOTUyNCwzOTUyNiwzOTUyNywzOTcxNiw0MDQ2OSw0MDQ3MSw0MDc3NiwyNTA5NSwyNzQyMiwyOTIyMywzNDM4MCwzNjUyMCwzODAxOCwzODAxNiwzODAxNywzOTUyOSwzOTUyOCwzOTcyNiw0MDQ3MywyOTIyNSwzNDM3OSwzNTc0MywzODAxOSw0MDA1Nyw0MDYzMSwzMDMyNSwzOTUzMSw0MDA1OCw0MDQ3NywyODc3NywyODc3OCw0MDYxMiw0MDgzMCw0MDc3Nyw0MDg1NiwzMDg0OSwzNzU2MSwzNTAyMywyMjcxNSwyNDY1OCwzMTkxMSwyMzI5MCw5NTU2LDk1NzQsOTU1OSw5NTY4LDk1ODAsOTU3MSw5NTYyLDk1NzcsOTU2NSw5NTU0LDk1NzIsOTU1Nyw5NTY2LDk1NzgsOTU2OSw5NTYwLDk1NzUsOTU2Myw5NTU1LDk1NzMsOTU1OCw5NTY3LDk1NzksOTU3MCw5NTYxLDk1NzYsOTU2NCw5NTUzLDk1NTIsOTU4MSw5NTgyLDk1ODQsOTU4Myw2NTUxNywxMzI0MjMsMzc1OTUsMTMyNTc1LDE0NzM5NywzNDEyNCwxNzA3NywyOTY3OSwyMDkxNywxMzg5NywxNDk4MjYsMTY2MzcyLDM3NzAwLDEzNzY5MSwzMzUxOCwxNDY2MzIsMzA3ODAsMjY0MzYsMjUzMTEsMTQ5ODExLDE2NjMxNCwxMzE3NDQsMTU4NjQzLDEzNTk0MSwyMDM5NSwxNDA1MjUsMjA0ODgsMTU5MDE3LDE2MjQzNiwxNDQ4OTYsMTUwMTkzLDE0MDU2MywyMDUyMSwxMzE5NjYsMjQ0ODQsMTMxOTY4LDEzMTkxMSwyODM3OSwxMzIxMjcsMjA2MDUsMjA3MzcsMTM0MzQsMjA3NTAsMzkwMjAsMTQxNDcsMzM4MTQsMTQ5OTI0LDEzMjIzMSwyMDgzMiwxNDQzMDgsMjA4NDIsMTM0MTQzLDEzOTUxNiwxMzE4MTMsMTQwNTkyLDEzMjQ5NCwxNDM5MjMsMTM3NjAzLDIzNDI2LDM0Njg1LDEzMjUzMSwxNDY1ODUsMjA5MTQsMjA5MjAsNDAyNDQsMjA5MzcsMjA5NDMsMjA5NDUsMTU1ODAsMjA5NDcsMTUwMTgyLDIwOTE1LDIwOTYyLDIxMzE0LDIwOTczLDMzNzQxLDI2OTQyLDE0NTE5NywyNDQ0MywyMTAwMywyMTAzMCwyMTA1MiwyMTE3MywyMTA3OSwyMTE0MCwyMTE3NywyMTE4OSwzMTc2NSwzNDExNCwyMTIxNiwzNDMxNywxNTg0ODMsMjEyNTMsMTY2NjIyLDIxODMzLDI4Mzc3LDE0NzMyOCwxMzM0NjAsMTQ3NDM2LDIxMjk5LDIxMzE2LDEzNDExNCwyNzg1MSwxMzY5OTgsMjY2NTEsMjk2NTMsMjQ2NTAsMTYwNDIsMTQ1NDAsMTM2OTM2LDI5MTQ5LDE3NTcwLDIxMzU3LDIxMzY0LDE2NTU0NywyMTM3NCwyMTM3NSwxMzY1OTgsMTM2NzIzLDMwNjk0LDIxMzk1LDE2NjU1NSwyMTQwOCwyMTQxOSwyMTQyMiwyOTYwNywxNTM0NTgsMTYyMTcsMjk1OTYsMjE0NDEsMjE0NDUsMjc3MjEsMjAwNDEsMjI1MjYsMjE0NjUsMTUwMTksMTM0MDMxLDIxNDcyLDE0NzQzNSwxNDI3NTUsMjE0OTQsMTM0MjYzLDIxNTIzLDI4NzkzLDIxODAzLDI2MTk5LDI3OTk1LDIxNjEzLDE1ODU0NywxMzQ1MTYsMjE4NTMsMjE2NDcsMjE2NjgsMTgzNDIsMTM2OTczLDEzNDg3NywxNTc5NiwxMzQ0NzcsMTY2MzMyLDE0MDk1MiwyMTgzMSwxOTY5MywyMTU1MSwyOTcxOSwyMTg5NCwyMTkyOSwyMjAyMSwxMzc0MzEsMTQ3NTE0LDE3NzQ2LDE0ODUzMywyNjI5MSwxMzUzNDgsMjIwNzEsMjYzMTcsMTQ0MDEwLDI2Mjc2LDI2Mjg1LDIyMDkzLDIyMDk1LDMwOTYxLDIyMjU3LDM4NzkxLDIxNTAyLDIyMjcyLDIyMjU1LDIyMjUzLDE2Njc1OCwxMzg1OSwxMzU3NTksMjIzNDIsMTQ3ODc3LDI3NzU4LDI4ODExLDIyMzM4LDE0MDAxLDE1ODg0NiwyMjUwMiwxMzYyMTQsMjI1MzEsMTM2Mjc2LDE0ODMyMywyMjU2NiwxNTA1MTcsMjI2MjAsMjI2OTgsMTM2NjUsMjI3NTIsMjI3NDgsMTM1NzQwLDIyNzc5LDIzNTUxLDIyMzM5LDE3MjM2OCwxNDgwODgsMzc4NDMsMTM3MjksMjI4MTUsMjY3OTAsMTQwMTksMjgyNDksMTM2NzY2LDIzMDc2LDIxODQzLDEzNjg1MCwzNDA1MywyMjk4NSwxMzQ0NzgsMTU4ODQ5LDE1OTAxOCwxMzcxODAsMjMwMDEsMTM3MjExLDEzNzEzOCwxNTkxNDIsMjgwMTcsMTM3MjU2LDEzNjkxNywyMzAzMywxNTkzMDEsMjMyMTEsMjMxMzksMTQwNTQsMTQ5OTI5LDIzMTU5LDE0MDg4LDIzMTkwLDI5Nzk3LDIzMjUxLDE1OTY0OSwxNDA2MjgsMTU3NDksMTM3NDg5LDE0MTMwLDEzNjg4OCwyNDE5NSwyMTIwMCwyMzQxNCwyNTk5MiwyMzQyMCwxNjIzMTgsMTYzODgsMTg1MjUsMTMxNTg4LDIzNTA5LDI0OTI4LDEzNzc4MCwxNTQwNjAsMTMyNTE3LDIzNTM5LDIzNDUzLDE5NzI4LDIzNTU3LDEzODA1MiwyMzU3MSwyOTY0NiwyMzU3MiwxMzg0MDUsMTU4NTA0LDIzNjI1LDE4NjUzLDIzNjg1LDIzNzg1LDIzNzkxLDIzOTQ3LDEzODc0NSwxMzg4MDcsMjM4MjQsMjM4MzIsMjM4NzgsMTM4OTE2LDIzNzM4LDI0MDIzLDMzNTMyLDE0MzgxLDE0OTc2MSwxMzkzMzcsMTM5NjM1LDMzNDE1LDE0MzkwLDE1Mjk4LDI0MTEwLDI3Mjc0LDI0MTgxLDI0MTg2LDE0ODY2OCwxMzQzNTUsMjE0MTQsMjAxNTEsMjQyNzIsMjE0MTYsMTM3MDczLDI0MDczLDI0MzA4LDE2NDk5NCwyNDMxMywyNDMxNSwxNDQ5NiwyNDMxNiwyNjY4NiwzNzkxNSwyNDMzMywxMzE1MjEsMTk0NzA4LDE1MDcwLDE4NjA2LDEzNTk5NCwyNDM3OCwxNTc4MzIsMTQwMjQwLDI0NDA4LDE0MDQwMSwyNDQxOSwzODg0NSwxNTkzNDIsMjQ0MzQsMzc2OTYsMTY2NDU0LDI0NDg3LDIzOTkwLDE1NzExLDE1MjE0NCwxMzkxMTQsMTU5OTkyLDE0MDkwNCwzNzMzNCwxMzE3NDIsMTY2NDQxLDI0NjI1LDI2MjQ1LDEzNzMzNSwxNDY5MSwxNTgxNSwxMzg4MSwyMjQxNiwxNDEyMzYsMzEwODksMTU5MzYsMjQ3MzQsMjQ3NDAsMjQ3NTUsMTQ5ODkwLDE0OTkwMywxNjIzODcsMjk4NjAsMjA3MDUsMjMyMDAsMjQ5MzIsMzM4MjgsMjQ4OTgsMTk0NzI2LDE1OTQ0MiwyNDk2MSwyMDk4MCwxMzI2OTQsMjQ5NjcsMjM0NjYsMTQ3MzgzLDE0MTQwNywyNTA0MywxNjY4MTMsMTcwMzMzLDI1MDQwLDE0NjQyLDE0MTY5NiwxNDE1MDUsMjQ2MTEsMjQ5MjQsMjU4ODYsMjU0ODMsMTMxMzUyLDI1Mjg1LDEzNzA3MiwyNTMwMSwxNDI4NjEsMjU0NTIsMTQ5OTgzLDE0ODcxLDI1NjU2LDI1NTkyLDEzNjA3OCwxMzcyMTIsMjU3NDQsMjg1NTQsMTQyOTAyLDM4OTMyLDE0NzU5NiwxNTMzNzMsMjU4MjUsMjU4MjksMzgwMTEsMTQ5NTAsMjU2NTgsMTQ5MzUsMjU5MzMsMjg0MzgsMTUwMDU2LDE1MDA1MSwyNTk4OSwyNTk2NSwyNTk1MSwxNDM0ODYsMjYwMzcsMTQ5ODI0LDE5MjU1LDI2MDY1LDE2NjAwLDEzNzI1NywyNjA4MCwyNjA4MywyNDU0MywxNDQzODQsMjYxMzYsMTQzODYzLDE0Mzg2NCwyNjE4MCwxNDM3ODAsMTQzNzgxLDI2MTg3LDEzNDc3MywyNjIxNSwxNTIwMzgsMjYyMjcsMjYyMjgsMTM4ODEzLDE0MzkyMSwxNjUzNjQsMTQzODE2LDE1MjMzOSwzMDY2MSwxNDE1NTksMzkzMzIsMjYzNzAsMTQ4MzgwLDE1MDA0OSwxNTE0NywyNzEzMCwxNDUzNDYsMjY0NjIsMjY0NzEsMjY0NjYsMTQ3OTE3LDE2ODE3MywyNjU4MywxNzY0MSwyNjY1OCwyODI0MCwzNzQzNiwyNjYyNSwxNDQzNTgsMTU5MTM2LDI2NzE3LDE0NDQ5NSwyNzEwNSwyNzE0NywxNjY2MjMsMjY5OTUsMjY4MTksMTQ0ODQ1LDI2ODgxLDI2ODgwLDE1NjY2LDE0ODQ5LDE0NDk1NiwxNTIzMiwyNjU0MCwyNjk3NywxNjY0NzQsMTcxNDgsMjY5MzQsMjcwMzIsMTUyNjUsMTMyMDQxLDMzNjM1LDIwNjI0LDI3MTI5LDE0NDk4NSwxMzk1NjIsMjcyMDUsMTQ1MTU1LDI3MjkzLDE1MzQ3LDI2NTQ1LDI3MzM2LDE2ODM0OCwxNTM3MywyNzQyMSwxMzM0MTEsMjQ3OTgsMjc0NDUsMjc1MDgsMTQxMjYxLDI4MzQxLDE0NjEzOSwxMzIwMjEsMTM3NTYwLDE0MTQ0LDIxNTM3LDE0NjI2NiwyNzYxNywxNDcxOTYsMjc2MTIsMjc3MDMsMTQwNDI3LDE0OTc0NSwxNTg1NDUsMjc3MzgsMzMzMTgsMjc3NjksMTQ2ODc2LDE3NjA1LDE0Njg3NywxNDc4NzYsMTQ5NzcyLDE0OTc2MCwxNDY2MzMsMTQwNTMsMTU1OTUsMTM0NDUwLDM5ODExLDE0Mzg2NSwxNDA0MzMsMzI2NTUsMjY2NzksMTU5MDEzLDE1OTEzNywxNTkyMTEsMjgwNTQsMjc5OTYsMjgyODQsMjg0MjAsMTQ5ODg3LDE0NzU4OSwxNTkzNDYsMzQwOTksMTU5NjA0LDIwOTM1LDI3ODA0LDI4MTg5LDMzODM4LDE2NjY4OSwyODIwNywxNDY5OTEsMjk3NzksMTQ3MzMwLDMxMTgwLDI4MjM5LDIzMTg1LDE0MzQzNSwyODY2NCwxNDA5MywyODU3MywxNDY5OTIsMjg0MTAsMTM2MzQzLDE0NzUxNywxNzc0OSwzNzg3MiwyODQ4NCwyODUwOCwxNTY5NCwyODUzMiwxNjgzMDQsMTU2NzUsMjg1NzUsMTQ3NzgwLDI4NjI3LDE0NzYwMSwxNDc3OTcsMTQ3NTEzLDE0NzQ0MCwxNDczODAsMTQ3Nzc1LDIwOTU5LDE0Nzc5OCwxNDc3OTksMTQ3Nzc2LDE1NjEyNSwyODc0NywyODc5OCwyODgzOSwyODgwMSwyODg3NiwyODg4NSwyODg4NiwyODg5NSwxNjY0NCwxNTg0OCwyOTEwOCwyOTA3OCwxNDgwODcsMjg5NzEsMjg5OTcsMjMxNzYsMjkwMDIsMjkwMzgsMjM3MDgsMTQ4MzI1LDI5MDA3LDM3NzMwLDE0ODE2MSwyODk3MiwxNDg1NzAsMTUwMDU1LDE1MDA1MCwyOTExNCwxNjY4ODgsMjg4NjEsMjkxOTgsMzc5NTQsMjkyMDUsMjI4MDEsMzc5NTUsMjkyMjAsMzc2OTcsMTUzMDkzLDI5MjMwLDI5MjQ4LDE0OTg3NiwyNjgxMywyOTI2OSwyOTI3MSwxNTk1NywxNDM0MjgsMjY2MzcsMjg0NzcsMjkzMTQsMjk0ODIsMjk0ODMsMTQ5NTM5LDE2NTkzMSwxODY2OSwxNjU4OTIsMjk0ODAsMjk0ODYsMjk2NDcsMjk2MTAsMTM0MjAyLDE1ODI1NCwyOTY0MSwyOTc2OSwxNDc5MzgsMTM2OTM1LDE1MDA1MiwyNjE0NywxNDAyMSwxNDk5NDMsMTQ5OTAxLDE1MDAxMSwyOTY4NywyOTcxNywyNjg4MywxNTAwNTQsMjk3NTMsMTMyNTQ3LDE2MDg3LDI5Nzg4LDE0MTQ4NSwyOTc5MiwxNjc2MDIsMjk3NjcsMjk2NjgsMjk4MTQsMzM3MjEsMjk4MDQsMTQxMjgsMjk4MTIsMzc4NzMsMjcxODAsMjk4MjYsMTg3NzEsMTUwMTU2LDE0NzgwNywxNTAxMzcsMTY2Nzk5LDIzMzY2LDE2NjkxNSwxMzczNzQsMjk4OTYsMTM3NjA4LDI5OTY2LDI5OTI5LDI5OTgyLDE2NzY0MSwxMzc4MDMsMjM1MTEsMTY3NTk2LDM3NzY1LDMwMDI5LDMwMDI2LDMwMDU1LDMwMDYyLDE1MTQyNiwxNjEzMiwxNTA4MDMsMzAwOTQsMjk3ODksMzAxMTAsMzAxMzIsMzAyMTAsMzAyNTIsMzAyODksMzAyODcsMzAzMTksMzAzMjYsMTU2NjYxLDMwMzUyLDMzMjYzLDE0MzI4LDE1Nzk2OSwxNTc5NjYsMzAzNjksMzAzNzMsMzAzOTEsMzA0MTIsMTU5NjQ3LDMzODkwLDE1MTcwOSwxNTE5MzMsMTM4NzgwLDMwNDk0LDMwNTAyLDMwNTI4LDI1Nzc1LDE1MjA5NiwzMDU1MiwxNDQwNDQsMzA2MzksMTY2MjQ0LDE2NjI0OCwxMzY4OTcsMzA3MDgsMzA3MjksMTM2MDU0LDE1MDAzNCwyNjgyNiwzMDg5NSwzMDkxOSwzMDkzMSwzODU2NSwzMTAyMiwxNTMwNTYsMzA5MzUsMzEwMjgsMzA4OTcsMTYxMjkyLDM2NzkyLDM0OTQ4LDE2NjY5OSwxNTU3NzksMTQwODI4LDMxMTEwLDM1MDcyLDI2ODgyLDMxMTA0LDE1MzY4NywzMTEzMywxNjI2MTcsMzEwMzYsMzExNDUsMjgyMDIsMTYwMDM4LDE2MDQwLDMxMTc0LDE2ODIwNSwzMTE4OF0sXG4gIFwiZXVjLWtyXCI6WzQ0MDM0LDQ0MDM1LDQ0MDM3LDQ0MDM4LDQ0MDQzLDQ0MDQ0LDQ0MDQ1LDQ0MDQ2LDQ0MDQ3LDQ0MDU2LDQ0MDYyLDQ0MDYzLDQ0MDY1LDQ0MDY2LDQ0MDY3LDQ0MDY5LDQ0MDcwLDQ0MDcxLDQ0MDcyLDQ0MDczLDQ0MDc0LDQ0MDc1LDQ0MDc4LDQ0MDgyLDQ0MDgzLDQ0MDg0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MDg1LDQ0MDg2LDQ0MDg3LDQ0MDkwLDQ0MDkxLDQ0MDkzLDQ0MDk0LDQ0MDk1LDQ0MDk3LDQ0MDk4LDQ0MDk5LDQ0MTAwLDQ0MTAxLDQ0MTAyLDQ0MTAzLDQ0MTA0LDQ0MTA1LDQ0MTA2LDQ0MTA4LDQ0MTEwLDQ0MTExLDQ0MTEyLDQ0MTEzLDQ0MTE0LDQ0MTE1LDQ0MTE3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MTE4LDQ0MTE5LDQ0MTIxLDQ0MTIyLDQ0MTIzLDQ0MTI1LDQ0MTI2LDQ0MTI3LDQ0MTI4LDQ0MTI5LDQ0MTMwLDQ0MTMxLDQ0MTMyLDQ0MTMzLDQ0MTM0LDQ0MTM1LDQ0MTM2LDQ0MTM3LDQ0MTM4LDQ0MTM5LDQ0MTQwLDQ0MTQxLDQ0MTQyLDQ0MTQzLDQ0MTQ2LDQ0MTQ3LDQ0MTQ5LDQ0MTUwLDQ0MTUzLDQ0MTU1LDQ0MTU2LDQ0MTU3LDQ0MTU4LDQ0MTU5LDQ0MTYyLDQ0MTY3LDQ0MTY4LDQ0MTczLDQ0MTc0LDQ0MTc1LDQ0MTc3LDQ0MTc4LDQ0MTc5LDQ0MTgxLDQ0MTgyLDQ0MTgzLDQ0MTg0LDQ0MTg1LDQ0MTg2LDQ0MTg3LDQ0MTkwLDQ0MTk0LDQ0MTk1LDQ0MTk2LDQ0MTk3LDQ0MTk4LDQ0MTk5LDQ0MjAzLDQ0MjA1LDQ0MjA2LDQ0MjA5LDQ0MjEwLDQ0MjExLDQ0MjEyLDQ0MjEzLDQ0MjE0LDQ0MjE1LDQ0MjE4LDQ0MjIyLDQ0MjIzLDQ0MjI0LDQ0MjI2LDQ0MjI3LDQ0MjI5LDQ0MjMwLDQ0MjMxLDQ0MjMzLDQ0MjM0LDQ0MjM1LDQ0MjM3LDQ0MjM4LDQ0MjM5LDQ0MjQwLDQ0MjQxLDQ0MjQyLDQ0MjQzLDQ0MjQ0LDQ0MjQ2LDQ0MjQ4LDQ0MjQ5LDQ0MjUwLDQ0MjUxLDQ0MjUyLDQ0MjUzLDQ0MjU0LDQ0MjU1LDQ0MjU4LDQ0MjU5LDQ0MjYxLDQ0MjYyLDQ0MjY1LDQ0MjY3LDQ0MjY5LDQ0MjcwLDQ0Mjc0LDQ0Mjc2LDQ0Mjc5LDQ0MjgwLDQ0MjgxLDQ0MjgyLDQ0MjgzLDQ0Mjg2LDQ0Mjg3LDQ0Mjg5LDQ0MjkwLDQ0MjkxLDQ0MjkzLDQ0Mjk1LDQ0Mjk2LDQ0Mjk3LDQ0Mjk4LDQ0Mjk5LDQ0MzAyLDQ0MzA0LDQ0MzA2LDQ0MzA3LDQ0MzA4LDQ0MzA5LDQ0MzEwLDQ0MzExLDQ0MzEzLDQ0MzE0LDQ0MzE1LDQ0MzE3LDQ0MzE4LDQ0MzE5LDQ0MzIxLDQ0MzIyLDQ0MzIzLDQ0MzI0LDQ0MzI1LDQ0MzI2LDQ0MzI3LDQ0MzI4LDQ0MzMwLDQ0MzMxLDQ0MzM0LDQ0MzM1LDQ0MzM2LDQ0MzM3LDQ0MzM4LDQ0MzM5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MzQyLDQ0MzQzLDQ0MzQ1LDQ0MzQ2LDQ0MzQ3LDQ0MzQ5LDQ0MzUwLDQ0MzUxLDQ0MzUyLDQ0MzUzLDQ0MzU0LDQ0MzU1LDQ0MzU4LDQ0MzYwLDQ0MzYyLDQ0MzYzLDQ0MzY0LDQ0MzY1LDQ0MzY2LDQ0MzY3LDQ0MzY5LDQ0MzcwLDQ0MzcxLDQ0MzczLDQ0Mzc0LDQ0Mzc1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0Mzc3LDQ0Mzc4LDQ0Mzc5LDQ0MzgwLDQ0MzgxLDQ0MzgyLDQ0MzgzLDQ0Mzg0LDQ0Mzg2LDQ0Mzg4LDQ0Mzg5LDQ0MzkwLDQ0MzkxLDQ0MzkyLDQ0MzkzLDQ0Mzk0LDQ0Mzk1LDQ0Mzk4LDQ0Mzk5LDQ0NDAxLDQ0NDAyLDQ0NDA3LDQ0NDA4LDQ0NDA5LDQ0NDEwLDQ0NDE0LDQ0NDE2LDQ0NDE5LDQ0NDIwLDQ0NDIxLDQ0NDIyLDQ0NDIzLDQ0NDI2LDQ0NDI3LDQ0NDI5LDQ0NDMwLDQ0NDMxLDQ0NDMzLDQ0NDM0LDQ0NDM1LDQ0NDM2LDQ0NDM3LDQ0NDM4LDQ0NDM5LDQ0NDQwLDQ0NDQxLDQ0NDQyLDQ0NDQzLDQ0NDQ2LDQ0NDQ3LDQ0NDQ4LDQ0NDQ5LDQ0NDUwLDQ0NDUxLDQ0NDUzLDQ0NDU0LDQ0NDU1LDQ0NDU2LDQ0NDU3LDQ0NDU4LDQ0NDU5LDQ0NDYwLDQ0NDYxLDQ0NDYyLDQ0NDYzLDQ0NDY0LDQ0NDY1LDQ0NDY2LDQ0NDY3LDQ0NDY4LDQ0NDY5LDQ0NDcwLDQ0NDcyLDQ0NDczLDQ0NDc0LDQ0NDc1LDQ0NDc2LDQ0NDc3LDQ0NDc4LDQ0NDc5LDQ0NDgyLDQ0NDgzLDQ0NDg1LDQ0NDg2LDQ0NDg3LDQ0NDg5LDQ0NDkwLDQ0NDkxLDQ0NDkyLDQ0NDkzLDQ0NDk0LDQ0NDk1LDQ0NDk4LDQ0NTAwLDQ0NTAxLDQ0NTAyLDQ0NTAzLDQ0NTA0LDQ0NTA1LDQ0NTA2LDQ0NTA3LDQ0NTA5LDQ0NTEwLDQ0NTExLDQ0NTEzLDQ0NTE0LDQ0NTE1LDQ0NTE3LDQ0NTE4LDQ0NTE5LDQ0NTIwLDQ0NTIxLDQ0NTIyLDQ0NTIzLDQ0NTI0LDQ0NTI1LDQ0NTI2LDQ0NTI3LDQ0NTI4LDQ0NTI5LDQ0NTMwLDQ0NTMxLDQ0NTMyLDQ0NTMzLDQ0NTM0LDQ0NTM1LDQ0NTM4LDQ0NTM5LDQ0NTQxLDQ0NTQyLDQ0NTQ2LDQ0NTQ3LDQ0NTQ4LDQ0NTQ5LDQ0NTUwLDQ0NTUxLDQ0NTU0LDQ0NTU2LDQ0NTU4LDQ0NTU5LDQ0NTYwLDQ0NTYxLDQ0NTYyLDQ0NTYzLDQ0NTY1LDQ0NTY2LDQ0NTY3LDQ0NTY4LDQ0NTY5LDQ0NTcwLDQ0NTcxLDQ0NTcyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0NTczLDQ0NTc0LDQ0NTc1LDQ0NTc2LDQ0NTc3LDQ0NTc4LDQ0NTc5LDQ0NTgwLDQ0NTgxLDQ0NTgyLDQ0NTgzLDQ0NTg0LDQ0NTg1LDQ0NTg2LDQ0NTg3LDQ0NTg4LDQ0NTg5LDQ0NTkwLDQ0NTkxLDQ0NTk0LDQ0NTk1LDQ0NTk3LDQ0NTk4LDQ0NjAxLDQ0NjAzLDQ0NjA0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0NjA1LDQ0NjA2LDQ0NjA3LDQ0NjEwLDQ0NjEyLDQ0NjE1LDQ0NjE2LDQ0NjE3LDQ0NjE5LDQ0NjIzLDQ0NjI1LDQ0NjI2LDQ0NjI3LDQ0NjI5LDQ0NjMxLDQ0NjMyLDQ0NjMzLDQ0NjM0LDQ0NjM1LDQ0NjM4LDQ0NjQyLDQ0NjQzLDQ0NjQ0LDQ0NjQ2LDQ0NjQ3LDQ0NjUwLDQ0NjUxLDQ0NjUzLDQ0NjU0LDQ0NjU1LDQ0NjU3LDQ0NjU4LDQ0NjU5LDQ0NjYwLDQ0NjYxLDQ0NjYyLDQ0NjYzLDQ0NjY2LDQ0NjcwLDQ0NjcxLDQ0NjcyLDQ0NjczLDQ0Njc0LDQ0Njc1LDQ0Njc4LDQ0Njc5LDQ0NjgwLDQ0NjgxLDQ0NjgyLDQ0NjgzLDQ0Njg1LDQ0Njg2LDQ0Njg3LDQ0Njg4LDQ0Njg5LDQ0NjkwLDQ0NjkxLDQ0NjkyLDQ0NjkzLDQ0Njk0LDQ0Njk1LDQ0Njk2LDQ0Njk3LDQ0Njk4LDQ0Njk5LDQ0NzAwLDQ0NzAxLDQ0NzAyLDQ0NzAzLDQ0NzA0LDQ0NzA1LDQ0NzA2LDQ0NzA3LDQ0NzA4LDQ0NzA5LDQ0NzEwLDQ0NzExLDQ0NzEyLDQ0NzEzLDQ0NzE0LDQ0NzE1LDQ0NzE2LDQ0NzE3LDQ0NzE4LDQ0NzE5LDQ0NzIwLDQ0NzIxLDQ0NzIyLDQ0NzIzLDQ0NzI0LDQ0NzI1LDQ0NzI2LDQ0NzI3LDQ0NzI4LDQ0NzI5LDQ0NzMwLDQ0NzMxLDQ0NzM1LDQ0NzM3LDQ0NzM4LDQ0NzM5LDQ0NzQxLDQ0NzQyLDQ0NzQzLDQ0NzQ0LDQ0NzQ1LDQ0NzQ2LDQ0NzQ3LDQ0NzUwLDQ0NzU0LDQ0NzU1LDQ0NzU2LDQ0NzU3LDQ0NzU4LDQ0NzU5LDQ0NzYyLDQ0NzYzLDQ0NzY1LDQ0NzY2LDQ0NzY3LDQ0NzY4LDQ0NzY5LDQ0NzcwLDQ0NzcxLDQ0NzcyLDQ0NzczLDQ0Nzc0LDQ0Nzc1LDQ0Nzc3LDQ0Nzc4LDQ0NzgwLDQ0NzgyLDQ0NzgzLDQ0Nzg0LDQ0Nzg1LDQ0Nzg2LDQ0Nzg3LDQ0Nzg5LDQ0NzkwLDQ0NzkxLDQ0NzkzLDQ0Nzk0LDQ0Nzk1LDQ0Nzk3LDQ0Nzk4LDQ0Nzk5LDQ0ODAwLDQ0ODAxLDQ0ODAyLDQ0ODAzLDQ0ODA0LDQ0ODA1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0ODA2LDQ0ODA5LDQ0ODEwLDQ0ODExLDQ0ODEyLDQ0ODE0LDQ0ODE1LDQ0ODE3LDQ0ODE4LDQ0ODE5LDQ0ODIwLDQ0ODIxLDQ0ODIyLDQ0ODIzLDQ0ODI0LDQ0ODI1LDQ0ODI2LDQ0ODI3LDQ0ODI4LDQ0ODI5LDQ0ODMwLDQ0ODMxLDQ0ODMyLDQ0ODMzLDQ0ODM0LDQ0ODM1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0ODM2LDQ0ODM3LDQ0ODM4LDQ0ODM5LDQ0ODQwLDQ0ODQxLDQ0ODQyLDQ0ODQzLDQ0ODQ2LDQ0ODQ3LDQ0ODQ5LDQ0ODUxLDQ0ODUzLDQ0ODU0LDQ0ODU1LDQ0ODU2LDQ0ODU3LDQ0ODU4LDQ0ODU5LDQ0ODYyLDQ0ODY0LDQ0ODY4LDQ0ODY5LDQ0ODcwLDQ0ODcxLDQ0ODc0LDQ0ODc1LDQ0ODc2LDQ0ODc3LDQ0ODc4LDQ0ODc5LDQ0ODgxLDQ0ODgyLDQ0ODgzLDQ0ODg0LDQ0ODg1LDQ0ODg2LDQ0ODg3LDQ0ODg4LDQ0ODg5LDQ0ODkwLDQ0ODkxLDQ0ODk0LDQ0ODk1LDQ0ODk2LDQ0ODk3LDQ0ODk4LDQ0ODk5LDQ0OTAyLDQ0OTAzLDQ0OTA0LDQ0OTA1LDQ0OTA2LDQ0OTA3LDQ0OTA4LDQ0OTA5LDQ0OTEwLDQ0OTExLDQ0OTEyLDQ0OTEzLDQ0OTE0LDQ0OTE1LDQ0OTE2LDQ0OTE3LDQ0OTE4LDQ0OTE5LDQ0OTIwLDQ0OTIyLDQ0OTIzLDQ0OTI0LDQ0OTI1LDQ0OTI2LDQ0OTI3LDQ0OTI5LDQ0OTMwLDQ0OTMxLDQ0OTMzLDQ0OTM0LDQ0OTM1LDQ0OTM3LDQ0OTM4LDQ0OTM5LDQ0OTQwLDQ0OTQxLDQ0OTQyLDQ0OTQzLDQ0OTQ2LDQ0OTQ3LDQ0OTQ4LDQ0OTUwLDQ0OTUxLDQ0OTUyLDQ0OTUzLDQ0OTU0LDQ0OTU1LDQ0OTU3LDQ0OTU4LDQ0OTU5LDQ0OTYwLDQ0OTYxLDQ0OTYyLDQ0OTYzLDQ0OTY0LDQ0OTY1LDQ0OTY2LDQ0OTY3LDQ0OTY4LDQ0OTY5LDQ0OTcwLDQ0OTcxLDQ0OTcyLDQ0OTczLDQ0OTc0LDQ0OTc1LDQ0OTc2LDQ0OTc3LDQ0OTc4LDQ0OTc5LDQ0OTgwLDQ0OTgxLDQ0OTgyLDQ0OTgzLDQ0OTg2LDQ0OTg3LDQ0OTg5LDQ0OTkwLDQ0OTkxLDQ0OTkzLDQ0OTk0LDQ0OTk1LDQ0OTk2LDQ0OTk3LDQ0OTk4LDQ1MDAyLDQ1MDA0LDQ1MDA3LDQ1MDA4LDQ1MDA5LDQ1MDEwLDQ1MDExLDQ1MDEzLDQ1MDE0LDQ1MDE1LDQ1MDE2LDQ1MDE3LDQ1MDE4LDQ1MDE5LDQ1MDIxLDQ1MDIyLDQ1MDIzLDQ1MDI0LDQ1MDI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1MDI2LDQ1MDI3LDQ1MDI4LDQ1MDI5LDQ1MDMwLDQ1MDMxLDQ1MDM0LDQ1MDM1LDQ1MDM2LDQ1MDM3LDQ1MDM4LDQ1MDM5LDQ1MDQyLDQ1MDQzLDQ1MDQ1LDQ1MDQ2LDQ1MDQ3LDQ1MDQ5LDQ1MDUwLDQ1MDUxLDQ1MDUyLDQ1MDUzLDQ1MDU0LDQ1MDU1LDQ1MDU4LDQ1MDU5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1MDYxLDQ1MDYyLDQ1MDYzLDQ1MDY0LDQ1MDY1LDQ1MDY2LDQ1MDY3LDQ1MDY5LDQ1MDcwLDQ1MDcxLDQ1MDczLDQ1MDc0LDQ1MDc1LDQ1MDc3LDQ1MDc4LDQ1MDc5LDQ1MDgwLDQ1MDgxLDQ1MDgyLDQ1MDgzLDQ1MDg2LDQ1MDg3LDQ1MDg4LDQ1MDg5LDQ1MDkwLDQ1MDkxLDQ1MDkyLDQ1MDkzLDQ1MDk0LDQ1MDk1LDQ1MDk3LDQ1MDk4LDQ1MDk5LDQ1MTAwLDQ1MTAxLDQ1MTAyLDQ1MTAzLDQ1MTA0LDQ1MTA1LDQ1MTA2LDQ1MTA3LDQ1MTA4LDQ1MTA5LDQ1MTEwLDQ1MTExLDQ1MTEyLDQ1MTEzLDQ1MTE0LDQ1MTE1LDQ1MTE2LDQ1MTE3LDQ1MTE4LDQ1MTE5LDQ1MTIwLDQ1MTIxLDQ1MTIyLDQ1MTIzLDQ1MTI2LDQ1MTI3LDQ1MTI5LDQ1MTMxLDQ1MTMzLDQ1MTM1LDQ1MTM2LDQ1MTM3LDQ1MTM4LDQ1MTQyLDQ1MTQ0LDQ1MTQ2LDQ1MTQ3LDQ1MTQ4LDQ1MTUwLDQ1MTUxLDQ1MTUyLDQ1MTUzLDQ1MTU0LDQ1MTU1LDQ1MTU2LDQ1MTU3LDQ1MTU4LDQ1MTU5LDQ1MTYwLDQ1MTYxLDQ1MTYyLDQ1MTYzLDQ1MTY0LDQ1MTY1LDQ1MTY2LDQ1MTY3LDQ1MTY4LDQ1MTY5LDQ1MTcwLDQ1MTcxLDQ1MTcyLDQ1MTczLDQ1MTc0LDQ1MTc1LDQ1MTc2LDQ1MTc3LDQ1MTc4LDQ1MTc5LDQ1MTgyLDQ1MTgzLDQ1MTg1LDQ1MTg2LDQ1MTg3LDQ1MTg5LDQ1MTkwLDQ1MTkxLDQ1MTkyLDQ1MTkzLDQ1MTk0LDQ1MTk1LDQ1MTk4LDQ1MjAwLDQ1MjAyLDQ1MjAzLDQ1MjA0LDQ1MjA1LDQ1MjA2LDQ1MjA3LDQ1MjExLDQ1MjEzLDQ1MjE0LDQ1MjE5LDQ1MjIwLDQ1MjIxLDQ1MjIyLDQ1MjIzLDQ1MjI2LDQ1MjMyLDQ1MjM0LDQ1MjM4LDQ1MjM5LDQ1MjQxLDQ1MjQyLDQ1MjQzLDQ1MjQ1LDQ1MjQ2LDQ1MjQ3LDQ1MjQ4LDQ1MjQ5LDQ1MjUwLDQ1MjUxLDQ1MjU0LDQ1MjU4LDQ1MjU5LDQ1MjYwLDQ1MjYxLDQ1MjYyLDQ1MjYzLDQ1MjY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1MjY3LDQ1MjY5LDQ1MjcwLDQ1MjcxLDQ1MjczLDQ1Mjc0LDQ1Mjc1LDQ1Mjc2LDQ1Mjc3LDQ1Mjc4LDQ1Mjc5LDQ1MjgxLDQ1MjgyLDQ1MjgzLDQ1Mjg0LDQ1Mjg2LDQ1Mjg3LDQ1Mjg4LDQ1Mjg5LDQ1MjkwLDQ1MjkxLDQ1MjkyLDQ1MjkzLDQ1Mjk0LDQ1Mjk1LDQ1Mjk2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1Mjk3LDQ1Mjk4LDQ1Mjk5LDQ1MzAwLDQ1MzAxLDQ1MzAyLDQ1MzAzLDQ1MzA0LDQ1MzA1LDQ1MzA2LDQ1MzA3LDQ1MzA4LDQ1MzA5LDQ1MzEwLDQ1MzExLDQ1MzEyLDQ1MzEzLDQ1MzE0LDQ1MzE1LDQ1MzE2LDQ1MzE3LDQ1MzE4LDQ1MzE5LDQ1MzIyLDQ1MzI1LDQ1MzI2LDQ1MzI3LDQ1MzI5LDQ1MzMyLDQ1MzMzLDQ1MzM0LDQ1MzM1LDQ1MzM4LDQ1MzQyLDQ1MzQzLDQ1MzQ0LDQ1MzQ1LDQ1MzQ2LDQ1MzUwLDQ1MzUxLDQ1MzUzLDQ1MzU0LDQ1MzU1LDQ1MzU3LDQ1MzU4LDQ1MzU5LDQ1MzYwLDQ1MzYxLDQ1MzYyLDQ1MzYzLDQ1MzY2LDQ1MzcwLDQ1MzcxLDQ1MzcyLDQ1MzczLDQ1Mzc0LDQ1Mzc1LDQ1Mzc4LDQ1Mzc5LDQ1MzgxLDQ1MzgyLDQ1MzgzLDQ1Mzg1LDQ1Mzg2LDQ1Mzg3LDQ1Mzg4LDQ1Mzg5LDQ1MzkwLDQ1MzkxLDQ1Mzk0LDQ1Mzk1LDQ1Mzk4LDQ1Mzk5LDQ1NDAxLDQ1NDAyLDQ1NDAzLDQ1NDA1LDQ1NDA2LDQ1NDA3LDQ1NDA5LDQ1NDEwLDQ1NDExLDQ1NDEyLDQ1NDEzLDQ1NDE0LDQ1NDE1LDQ1NDE2LDQ1NDE3LDQ1NDE4LDQ1NDE5LDQ1NDIwLDQ1NDIxLDQ1NDIyLDQ1NDIzLDQ1NDI0LDQ1NDI1LDQ1NDI2LDQ1NDI3LDQ1NDI4LDQ1NDI5LDQ1NDMwLDQ1NDMxLDQ1NDM0LDQ1NDM1LDQ1NDM3LDQ1NDM4LDQ1NDM5LDQ1NDQxLDQ1NDQzLDQ1NDQ0LDQ1NDQ1LDQ1NDQ2LDQ1NDQ3LDQ1NDUwLDQ1NDUyLDQ1NDU0LDQ1NDU1LDQ1NDU2LDQ1NDU3LDQ1NDYxLDQ1NDYyLDQ1NDYzLDQ1NDY1LDQ1NDY2LDQ1NDY3LDQ1NDY5LDQ1NDcwLDQ1NDcxLDQ1NDcyLDQ1NDczLDQ1NDc0LDQ1NDc1LDQ1NDc2LDQ1NDc3LDQ1NDc4LDQ1NDc5LDQ1NDgxLDQ1NDgyLDQ1NDgzLDQ1NDg0LDQ1NDg1LDQ1NDg2LDQ1NDg3LDQ1NDg4LDQ1NDg5LDQ1NDkwLDQ1NDkxLDQ1NDkyLDQ1NDkzLDQ1NDk0LDQ1NDk1LDQ1NDk2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NDk3LDQ1NDk4LDQ1NDk5LDQ1NTAwLDQ1NTAxLDQ1NTAyLDQ1NTAzLDQ1NTA0LDQ1NTA1LDQ1NTA2LDQ1NTA3LDQ1NTA4LDQ1NTA5LDQ1NTEwLDQ1NTExLDQ1NTEyLDQ1NTEzLDQ1NTE0LDQ1NTE1LDQ1NTE3LDQ1NTE4LDQ1NTE5LDQ1NTIxLDQ1NTIyLDQ1NTIzLDQ1NTI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NTI2LDQ1NTI3LDQ1NTI4LDQ1NTI5LDQ1NTMwLDQ1NTMxLDQ1NTM0LDQ1NTM2LDQ1NTM3LDQ1NTM4LDQ1NTM5LDQ1NTQwLDQ1NTQxLDQ1NTQyLDQ1NTQzLDQ1NTQ2LDQ1NTQ3LDQ1NTQ5LDQ1NTUwLDQ1NTUxLDQ1NTUzLDQ1NTU0LDQ1NTU1LDQ1NTU2LDQ1NTU3LDQ1NTU4LDQ1NTU5LDQ1NTYwLDQ1NTYyLDQ1NTY0LDQ1NTY2LDQ1NTY3LDQ1NTY4LDQ1NTY5LDQ1NTcwLDQ1NTcxLDQ1NTc0LDQ1NTc1LDQ1NTc3LDQ1NTc4LDQ1NTgxLDQ1NTgyLDQ1NTgzLDQ1NTg0LDQ1NTg1LDQ1NTg2LDQ1NTg3LDQ1NTkwLDQ1NTkyLDQ1NTk0LDQ1NTk1LDQ1NTk2LDQ1NTk3LDQ1NTk4LDQ1NTk5LDQ1NjAxLDQ1NjAyLDQ1NjAzLDQ1NjA0LDQ1NjA1LDQ1NjA2LDQ1NjA3LDQ1NjA4LDQ1NjA5LDQ1NjEwLDQ1NjExLDQ1NjEyLDQ1NjEzLDQ1NjE0LDQ1NjE1LDQ1NjE2LDQ1NjE3LDQ1NjE4LDQ1NjE5LDQ1NjIxLDQ1NjIyLDQ1NjIzLDQ1NjI0LDQ1NjI1LDQ1NjI2LDQ1NjI3LDQ1NjI5LDQ1NjMwLDQ1NjMxLDQ1NjMyLDQ1NjMzLDQ1NjM0LDQ1NjM1LDQ1NjM2LDQ1NjM3LDQ1NjM4LDQ1NjM5LDQ1NjQwLDQ1NjQxLDQ1NjQyLDQ1NjQzLDQ1NjQ0LDQ1NjQ1LDQ1NjQ2LDQ1NjQ3LDQ1NjQ4LDQ1NjQ5LDQ1NjUwLDQ1NjUxLDQ1NjUyLDQ1NjUzLDQ1NjU0LDQ1NjU1LDQ1NjU3LDQ1NjU4LDQ1NjU5LDQ1NjYxLDQ1NjYyLDQ1NjYzLDQ1NjY1LDQ1NjY2LDQ1NjY3LDQ1NjY4LDQ1NjY5LDQ1NjcwLDQ1NjcxLDQ1Njc0LDQ1Njc1LDQ1Njc2LDQ1Njc3LDQ1Njc4LDQ1Njc5LDQ1NjgwLDQ1NjgxLDQ1NjgyLDQ1NjgzLDQ1Njg2LDQ1Njg3LDQ1Njg4LDQ1Njg5LDQ1NjkwLDQ1NjkxLDQ1NjkzLDQ1Njk0LDQ1Njk1LDQ1Njk2LDQ1Njk3LDQ1Njk4LDQ1Njk5LDQ1NzAyLDQ1NzAzLDQ1NzA0LDQ1NzA2LDQ1NzA3LDQ1NzA4LDQ1NzA5LDQ1NzEwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NzExLDQ1NzE0LDQ1NzE1LDQ1NzE3LDQ1NzE4LDQ1NzE5LDQ1NzIzLDQ1NzI0LDQ1NzI1LDQ1NzI2LDQ1NzI3LDQ1NzMwLDQ1NzMyLDQ1NzM1LDQ1NzM2LDQ1NzM3LDQ1NzM5LDQ1NzQxLDQ1NzQyLDQ1NzQzLDQ1NzQ1LDQ1NzQ2LDQ1NzQ3LDQ1NzQ5LDQ1NzUwLDQ1NzUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NzUyLDQ1NzUzLDQ1NzU0LDQ1NzU1LDQ1NzU2LDQ1NzU3LDQ1NzU4LDQ1NzU5LDQ1NzYwLDQ1NzYxLDQ1NzYyLDQ1NzYzLDQ1NzY0LDQ1NzY1LDQ1NzY2LDQ1NzY3LDQ1NzcwLDQ1NzcxLDQ1NzczLDQ1Nzc0LDQ1Nzc1LDQ1Nzc3LDQ1Nzc5LDQ1NzgwLDQ1NzgxLDQ1NzgyLDQ1NzgzLDQ1Nzg2LDQ1Nzg4LDQ1NzkwLDQ1NzkxLDQ1NzkyLDQ1NzkzLDQ1Nzk1LDQ1Nzk5LDQ1ODAxLDQ1ODAyLDQ1ODA4LDQ1ODA5LDQ1ODEwLDQ1ODE0LDQ1ODIwLDQ1ODIxLDQ1ODIyLDQ1ODI2LDQ1ODI3LDQ1ODI5LDQ1ODMwLDQ1ODMxLDQ1ODMzLDQ1ODM0LDQ1ODM1LDQ1ODM2LDQ1ODM3LDQ1ODM4LDQ1ODM5LDQ1ODQyLDQ1ODQ2LDQ1ODQ3LDQ1ODQ4LDQ1ODQ5LDQ1ODUwLDQ1ODUxLDQ1ODUzLDQ1ODU0LDQ1ODU1LDQ1ODU2LDQ1ODU3LDQ1ODU4LDQ1ODU5LDQ1ODYwLDQ1ODYxLDQ1ODYyLDQ1ODYzLDQ1ODY0LDQ1ODY1LDQ1ODY2LDQ1ODY3LDQ1ODY4LDQ1ODY5LDQ1ODcwLDQ1ODcxLDQ1ODcyLDQ1ODczLDQ1ODc0LDQ1ODc1LDQ1ODc2LDQ1ODc3LDQ1ODc4LDQ1ODc5LDQ1ODgwLDQ1ODgxLDQ1ODgyLDQ1ODgzLDQ1ODg0LDQ1ODg1LDQ1ODg2LDQ1ODg3LDQ1ODg4LDQ1ODg5LDQ1ODkwLDQ1ODkxLDQ1ODkyLDQ1ODkzLDQ1ODk0LDQ1ODk1LDQ1ODk2LDQ1ODk3LDQ1ODk4LDQ1ODk5LDQ1OTAwLDQ1OTAxLDQ1OTAyLDQ1OTAzLDQ1OTA0LDQ1OTA1LDQ1OTA2LDQ1OTA3LDQ1OTExLDQ1OTEzLDQ1OTE0LDQ1OTE3LDQ1OTIwLDQ1OTIxLDQ1OTIyLDQ1OTIzLDQ1OTI2LDQ1OTI4LDQ1OTMwLDQ1OTMyLDQ1OTMzLDQ1OTM1LDQ1OTM4LDQ1OTM5LDQ1OTQxLDQ1OTQyLDQ1OTQzLDQ1OTQ1LDQ1OTQ2LDQ1OTQ3LDQ1OTQ4LDQ1OTQ5LDQ1OTUwLDQ1OTUxLDQ1OTU0LDQ1OTU4LDQ1OTU5LDQ1OTYwLDQ1OTYxLDQ1OTYyLDQ1OTYzLDQ1OTY1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1OTY2LDQ1OTY3LDQ1OTY5LDQ1OTcwLDQ1OTcxLDQ1OTczLDQ1OTc0LDQ1OTc1LDQ1OTc2LDQ1OTc3LDQ1OTc4LDQ1OTc5LDQ1OTgwLDQ1OTgxLDQ1OTgyLDQ1OTgzLDQ1OTg2LDQ1OTg3LDQ1OTg4LDQ1OTg5LDQ1OTkwLDQ1OTkxLDQ1OTkzLDQ1OTk0LDQ1OTk1LDQ1OTk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1OTk4LDQ1OTk5LDQ2MDAwLDQ2MDAxLDQ2MDAyLDQ2MDAzLDQ2MDA0LDQ2MDA1LDQ2MDA2LDQ2MDA3LDQ2MDA4LDQ2MDA5LDQ2MDEwLDQ2MDExLDQ2MDEyLDQ2MDEzLDQ2MDE0LDQ2MDE1LDQ2MDE2LDQ2MDE3LDQ2MDE4LDQ2MDE5LDQ2MDIyLDQ2MDIzLDQ2MDI1LDQ2MDI2LDQ2MDI5LDQ2MDMxLDQ2MDMzLDQ2MDM0LDQ2MDM1LDQ2MDM4LDQ2MDQwLDQ2MDQyLDQ2MDQ0LDQ2MDQ2LDQ2MDQ3LDQ2MDQ5LDQ2MDUwLDQ2MDUxLDQ2MDUzLDQ2MDU0LDQ2MDU1LDQ2MDU3LDQ2MDU4LDQ2MDU5LDQ2MDYwLDQ2MDYxLDQ2MDYyLDQ2MDYzLDQ2MDY0LDQ2MDY1LDQ2MDY2LDQ2MDY3LDQ2MDY4LDQ2MDY5LDQ2MDcwLDQ2MDcxLDQ2MDcyLDQ2MDczLDQ2MDc0LDQ2MDc1LDQ2MDc3LDQ2MDc4LDQ2MDc5LDQ2MDgwLDQ2MDgxLDQ2MDgyLDQ2MDgzLDQ2MDg0LDQ2MDg1LDQ2MDg2LDQ2MDg3LDQ2MDg4LDQ2MDg5LDQ2MDkwLDQ2MDkxLDQ2MDkyLDQ2MDkzLDQ2MDk0LDQ2MDk1LDQ2MDk3LDQ2MDk4LDQ2MDk5LDQ2MTAwLDQ2MTAxLDQ2MTAyLDQ2MTAzLDQ2MTA1LDQ2MTA2LDQ2MTA3LDQ2MTA5LDQ2MTEwLDQ2MTExLDQ2MTEzLDQ2MTE0LDQ2MTE1LDQ2MTE2LDQ2MTE3LDQ2MTE4LDQ2MTE5LDQ2MTIyLDQ2MTI0LDQ2MTI1LDQ2MTI2LDQ2MTI3LDQ2MTI4LDQ2MTI5LDQ2MTMwLDQ2MTMxLDQ2MTMzLDQ2MTM0LDQ2MTM1LDQ2MTM2LDQ2MTM3LDQ2MTM4LDQ2MTM5LDQ2MTQwLDQ2MTQxLDQ2MTQyLDQ2MTQzLDQ2MTQ0LDQ2MTQ1LDQ2MTQ2LDQ2MTQ3LDQ2MTQ4LDQ2MTQ5LDQ2MTUwLDQ2MTUxLDQ2MTUyLDQ2MTUzLDQ2MTU0LDQ2MTU1LDQ2MTU2LDQ2MTU3LDQ2MTU4LDQ2MTU5LDQ2MTYyLDQ2MTYzLDQ2MTY1LDQ2MTY2LDQ2MTY3LDQ2MTY5LDQ2MTcwLDQ2MTcxLDQ2MTcyLDQ2MTczLDQ2MTc0LDQ2MTc1LDQ2MTc4LDQ2MTgwLDQ2MTgyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2MTgzLDQ2MTg0LDQ2MTg1LDQ2MTg2LDQ2MTg3LDQ2MTg5LDQ2MTkwLDQ2MTkxLDQ2MTkyLDQ2MTkzLDQ2MTk0LDQ2MTk1LDQ2MTk2LDQ2MTk3LDQ2MTk4LDQ2MTk5LDQ2MjAwLDQ2MjAxLDQ2MjAyLDQ2MjAzLDQ2MjA0LDQ2MjA1LDQ2MjA2LDQ2MjA3LDQ2MjA5LDQ2MjEwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2MjExLDQ2MjEyLDQ2MjEzLDQ2MjE0LDQ2MjE1LDQ2MjE3LDQ2MjE4LDQ2MjE5LDQ2MjIwLDQ2MjIxLDQ2MjIyLDQ2MjIzLDQ2MjI0LDQ2MjI1LDQ2MjI2LDQ2MjI3LDQ2MjI4LDQ2MjI5LDQ2MjMwLDQ2MjMxLDQ2MjMyLDQ2MjMzLDQ2MjM0LDQ2MjM1LDQ2MjM2LDQ2MjM4LDQ2MjM5LDQ2MjQwLDQ2MjQxLDQ2MjQyLDQ2MjQzLDQ2MjQ1LDQ2MjQ2LDQ2MjQ3LDQ2MjQ5LDQ2MjUwLDQ2MjUxLDQ2MjUzLDQ2MjU0LDQ2MjU1LDQ2MjU2LDQ2MjU3LDQ2MjU4LDQ2MjU5LDQ2MjYwLDQ2MjYyLDQ2MjY0LDQ2MjY2LDQ2MjY3LDQ2MjY4LDQ2MjY5LDQ2MjcwLDQ2MjcxLDQ2MjczLDQ2Mjc0LDQ2Mjc1LDQ2Mjc3LDQ2Mjc4LDQ2Mjc5LDQ2MjgxLDQ2MjgyLDQ2MjgzLDQ2Mjg0LDQ2Mjg1LDQ2Mjg2LDQ2Mjg3LDQ2Mjg5LDQ2MjkwLDQ2MjkxLDQ2MjkyLDQ2Mjk0LDQ2Mjk1LDQ2Mjk2LDQ2Mjk3LDQ2Mjk4LDQ2Mjk5LDQ2MzAyLDQ2MzAzLDQ2MzA1LDQ2MzA2LDQ2MzA5LDQ2MzExLDQ2MzEyLDQ2MzEzLDQ2MzE0LDQ2MzE1LDQ2MzE4LDQ2MzIwLDQ2MzIyLDQ2MzIzLDQ2MzI0LDQ2MzI1LDQ2MzI2LDQ2MzI3LDQ2MzI5LDQ2MzMwLDQ2MzMxLDQ2MzMyLDQ2MzMzLDQ2MzM0LDQ2MzM1LDQ2MzM2LDQ2MzM3LDQ2MzM4LDQ2MzM5LDQ2MzQwLDQ2MzQxLDQ2MzQyLDQ2MzQzLDQ2MzQ0LDQ2MzQ1LDQ2MzQ2LDQ2MzQ3LDQ2MzQ4LDQ2MzQ5LDQ2MzUwLDQ2MzUxLDQ2MzUyLDQ2MzUzLDQ2MzU0LDQ2MzU1LDQ2MzU4LDQ2MzU5LDQ2MzYxLDQ2MzYyLDQ2MzY1LDQ2MzY2LDQ2MzY3LDQ2MzY4LDQ2MzY5LDQ2MzcwLDQ2MzcxLDQ2Mzc0LDQ2Mzc5LDQ2MzgwLDQ2MzgxLDQ2MzgyLDQ2MzgzLDQ2Mzg2LDQ2Mzg3LDQ2Mzg5LDQ2MzkwLDQ2MzkxLDQ2MzkzLDQ2Mzk0LDQ2Mzk1LDQ2Mzk2LDQ2Mzk3LDQ2Mzk4LDQ2Mzk5LDQ2NDAyLDQ2NDA2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NDA3LDQ2NDA4LDQ2NDA5LDQ2NDEwLDQ2NDE0LDQ2NDE1LDQ2NDE3LDQ2NDE4LDQ2NDE5LDQ2NDIxLDQ2NDIyLDQ2NDIzLDQ2NDI0LDQ2NDI1LDQ2NDI2LDQ2NDI3LDQ2NDMwLDQ2NDM0LDQ2NDM1LDQ2NDM2LDQ2NDM3LDQ2NDM4LDQ2NDM5LDQ2NDQwLDQ2NDQxLDQ2NDQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NDQzLDQ2NDQ0LDQ2NDQ1LDQ2NDQ2LDQ2NDQ3LDQ2NDQ4LDQ2NDQ5LDQ2NDUwLDQ2NDUxLDQ2NDUyLDQ2NDUzLDQ2NDU0LDQ2NDU1LDQ2NDU2LDQ2NDU3LDQ2NDU4LDQ2NDU5LDQ2NDYwLDQ2NDYxLDQ2NDYyLDQ2NDYzLDQ2NDY0LDQ2NDY1LDQ2NDY2LDQ2NDY3LDQ2NDY4LDQ2NDY5LDQ2NDcwLDQ2NDcxLDQ2NDcyLDQ2NDczLDQ2NDc0LDQ2NDc1LDQ2NDc2LDQ2NDc3LDQ2NDc4LDQ2NDc5LDQ2NDgwLDQ2NDgxLDQ2NDgyLDQ2NDgzLDQ2NDg0LDQ2NDg1LDQ2NDg2LDQ2NDg3LDQ2NDg4LDQ2NDg5LDQ2NDkwLDQ2NDkxLDQ2NDkyLDQ2NDkzLDQ2NDk0LDQ2NDk1LDQ2NDk4LDQ2NDk5LDQ2NTAxLDQ2NTAyLDQ2NTAzLDQ2NTA1LDQ2NTA4LDQ2NTA5LDQ2NTEwLDQ2NTExLDQ2NTE0LDQ2NTE4LDQ2NTE5LDQ2NTIwLDQ2NTIxLDQ2NTIyLDQ2NTI2LDQ2NTI3LDQ2NTI5LDQ2NTMwLDQ2NTMxLDQ2NTMzLDQ2NTM0LDQ2NTM1LDQ2NTM2LDQ2NTM3LDQ2NTM4LDQ2NTM5LDQ2NTQyLDQ2NTQ2LDQ2NTQ3LDQ2NTQ4LDQ2NTQ5LDQ2NTUwLDQ2NTUxLDQ2NTUzLDQ2NTU0LDQ2NTU1LDQ2NTU2LDQ2NTU3LDQ2NTU4LDQ2NTU5LDQ2NTYwLDQ2NTYxLDQ2NTYyLDQ2NTYzLDQ2NTY0LDQ2NTY1LDQ2NTY2LDQ2NTY3LDQ2NTY4LDQ2NTY5LDQ2NTcwLDQ2NTcxLDQ2NTczLDQ2NTc0LDQ2NTc1LDQ2NTc2LDQ2NTc3LDQ2NTc4LDQ2NTc5LDQ2NTgwLDQ2NTgxLDQ2NTgyLDQ2NTgzLDQ2NTg0LDQ2NTg1LDQ2NTg2LDQ2NTg3LDQ2NTg4LDQ2NTg5LDQ2NTkwLDQ2NTkxLDQ2NTkyLDQ2NTkzLDQ2NTk0LDQ2NTk1LDQ2NTk2LDQ2NTk3LDQ2NTk4LDQ2NTk5LDQ2NjAwLDQ2NjAxLDQ2NjAyLDQ2NjAzLDQ2NjA0LDQ2NjA1LDQ2NjA2LDQ2NjA3LDQ2NjEwLDQ2NjExLDQ2NjEzLDQ2NjE0LDQ2NjE1LDQ2NjE3LDQ2NjE4LDQ2NjE5LDQ2NjIwLDQ2NjIxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NjIyLDQ2NjIzLDQ2NjI0LDQ2NjI1LDQ2NjI2LDQ2NjI3LDQ2NjI4LDQ2NjMwLDQ2NjMxLDQ2NjMyLDQ2NjMzLDQ2NjM0LDQ2NjM1LDQ2NjM3LDQ2NjM4LDQ2NjM5LDQ2NjQwLDQ2NjQxLDQ2NjQyLDQ2NjQzLDQ2NjQ1LDQ2NjQ2LDQ2NjQ3LDQ2NjQ4LDQ2NjQ5LDQ2NjUwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NjUxLDQ2NjUyLDQ2NjUzLDQ2NjU0LDQ2NjU1LDQ2NjU2LDQ2NjU3LDQ2NjU4LDQ2NjU5LDQ2NjYwLDQ2NjYxLDQ2NjYyLDQ2NjYzLDQ2NjY1LDQ2NjY2LDQ2NjY3LDQ2NjY4LDQ2NjY5LDQ2NjcwLDQ2NjcxLDQ2NjcyLDQ2NjczLDQ2Njc0LDQ2Njc1LDQ2Njc2LDQ2Njc3LDQ2Njc4LDQ2Njc5LDQ2NjgwLDQ2NjgxLDQ2NjgyLDQ2NjgzLDQ2Njg0LDQ2Njg1LDQ2Njg2LDQ2Njg3LDQ2Njg4LDQ2Njg5LDQ2NjkwLDQ2NjkxLDQ2NjkzLDQ2Njk0LDQ2Njk1LDQ2Njk3LDQ2Njk4LDQ2Njk5LDQ2NzAwLDQ2NzAxLDQ2NzAyLDQ2NzAzLDQ2NzA0LDQ2NzA1LDQ2NzA2LDQ2NzA3LDQ2NzA4LDQ2NzA5LDQ2NzEwLDQ2NzExLDQ2NzEyLDQ2NzEzLDQ2NzE0LDQ2NzE1LDQ2NzE2LDQ2NzE3LDQ2NzE4LDQ2NzE5LDQ2NzIwLDQ2NzIxLDQ2NzIyLDQ2NzIzLDQ2NzI0LDQ2NzI1LDQ2NzI2LDQ2NzI3LDQ2NzI4LDQ2NzI5LDQ2NzMwLDQ2NzMxLDQ2NzMyLDQ2NzMzLDQ2NzM0LDQ2NzM1LDQ2NzM2LDQ2NzM3LDQ2NzM4LDQ2NzM5LDQ2NzQwLDQ2NzQxLDQ2NzQyLDQ2NzQzLDQ2NzQ0LDQ2NzQ1LDQ2NzQ2LDQ2NzQ3LDQ2NzUwLDQ2NzUxLDQ2NzUzLDQ2NzU0LDQ2NzU1LDQ2NzU3LDQ2NzU4LDQ2NzU5LDQ2NzYwLDQ2NzYxLDQ2NzYyLDQ2NzY1LDQ2NzY2LDQ2NzY3LDQ2NzY4LDQ2NzcwLDQ2NzcxLDQ2NzcyLDQ2NzczLDQ2Nzc0LDQ2Nzc1LDQ2Nzc2LDQ2Nzc3LDQ2Nzc4LDQ2Nzc5LDQ2NzgwLDQ2NzgxLDQ2NzgyLDQ2NzgzLDQ2Nzg0LDQ2Nzg1LDQ2Nzg2LDQ2Nzg3LDQ2Nzg4LDQ2Nzg5LDQ2NzkwLDQ2NzkxLDQ2NzkyLDQ2NzkzLDQ2Nzk0LDQ2Nzk1LDQ2Nzk2LDQ2Nzk3LDQ2Nzk4LDQ2Nzk5LDQ2ODAwLDQ2ODAxLDQ2ODAyLDQ2ODAzLDQ2ODA1LDQ2ODA2LDQ2ODA3LDQ2ODA4LDQ2ODA5LDQ2ODEwLDQ2ODExLDQ2ODEyLDQ2ODEzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2ODE0LDQ2ODE1LDQ2ODE2LDQ2ODE3LDQ2ODE4LDQ2ODE5LDQ2ODIwLDQ2ODIxLDQ2ODIyLDQ2ODIzLDQ2ODI0LDQ2ODI1LDQ2ODI2LDQ2ODI3LDQ2ODI4LDQ2ODI5LDQ2ODMwLDQ2ODMxLDQ2ODMzLDQ2ODM0LDQ2ODM1LDQ2ODM3LDQ2ODM4LDQ2ODM5LDQ2ODQxLDQ2ODQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2ODQzLDQ2ODQ0LDQ2ODQ1LDQ2ODQ2LDQ2ODQ3LDQ2ODUwLDQ2ODUxLDQ2ODUyLDQ2ODU0LDQ2ODU1LDQ2ODU2LDQ2ODU3LDQ2ODU4LDQ2ODU5LDQ2ODYwLDQ2ODYxLDQ2ODYyLDQ2ODYzLDQ2ODY0LDQ2ODY1LDQ2ODY2LDQ2ODY3LDQ2ODY4LDQ2ODY5LDQ2ODcwLDQ2ODcxLDQ2ODcyLDQ2ODczLDQ2ODc0LDQ2ODc1LDQ2ODc2LDQ2ODc3LDQ2ODc4LDQ2ODc5LDQ2ODgwLDQ2ODgxLDQ2ODgyLDQ2ODgzLDQ2ODg0LDQ2ODg1LDQ2ODg2LDQ2ODg3LDQ2ODkwLDQ2ODkxLDQ2ODkzLDQ2ODk0LDQ2ODk3LDQ2ODk4LDQ2ODk5LDQ2OTAwLDQ2OTAxLDQ2OTAyLDQ2OTAzLDQ2OTA2LDQ2OTA4LDQ2OTA5LDQ2OTEwLDQ2OTExLDQ2OTEyLDQ2OTEzLDQ2OTE0LDQ2OTE1LDQ2OTE3LDQ2OTE4LDQ2OTE5LDQ2OTIxLDQ2OTIyLDQ2OTIzLDQ2OTI1LDQ2OTI2LDQ2OTI3LDQ2OTI4LDQ2OTI5LDQ2OTMwLDQ2OTMxLDQ2OTM0LDQ2OTM1LDQ2OTM2LDQ2OTM3LDQ2OTM4LDQ2OTM5LDQ2OTQwLDQ2OTQxLDQ2OTQyLDQ2OTQzLDQ2OTQ1LDQ2OTQ2LDQ2OTQ3LDQ2OTQ5LDQ2OTUwLDQ2OTUxLDQ2OTUzLDQ2OTU0LDQ2OTU1LDQ2OTU2LDQ2OTU3LDQ2OTU4LDQ2OTU5LDQ2OTYyLDQ2OTY0LDQ2OTY2LDQ2OTY3LDQ2OTY4LDQ2OTY5LDQ2OTcwLDQ2OTcxLDQ2OTc0LDQ2OTc1LDQ2OTc3LDQ2OTc4LDQ2OTc5LDQ2OTgxLDQ2OTgyLDQ2OTgzLDQ2OTg0LDQ2OTg1LDQ2OTg2LDQ2OTg3LDQ2OTkwLDQ2OTk1LDQ2OTk2LDQ2OTk3LDQ3MDAyLDQ3MDAzLDQ3MDA1LDQ3MDA2LDQ3MDA3LDQ3MDA5LDQ3MDEwLDQ3MDExLDQ3MDEyLDQ3MDEzLDQ3MDE0LDQ3MDE1LDQ3MDE4LDQ3MDIyLDQ3MDIzLDQ3MDI0LDQ3MDI1LDQ3MDI2LDQ3MDI3LDQ3MDMwLDQ3MDMxLDQ3MDMzLDQ3MDM0LDQ3MDM1LDQ3MDM2LDQ3MDM3LDQ3MDM4LDQ3MDM5LDQ3MDQwLDQ3MDQxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MDQyLDQ3MDQzLDQ3MDQ0LDQ3MDQ1LDQ3MDQ2LDQ3MDQ4LDQ3MDUwLDQ3MDUxLDQ3MDUyLDQ3MDUzLDQ3MDU0LDQ3MDU1LDQ3MDU2LDQ3MDU3LDQ3MDU4LDQ3MDU5LDQ3MDYwLDQ3MDYxLDQ3MDYyLDQ3MDYzLDQ3MDY0LDQ3MDY1LDQ3MDY2LDQ3MDY3LDQ3MDY4LDQ3MDY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MDcwLDQ3MDcxLDQ3MDcyLDQ3MDczLDQ3MDc0LDQ3MDc1LDQ3MDc2LDQ3MDc3LDQ3MDc4LDQ3MDc5LDQ3MDgwLDQ3MDgxLDQ3MDgyLDQ3MDgzLDQ3MDg2LDQ3MDg3LDQ3MDg5LDQ3MDkwLDQ3MDkxLDQ3MDkzLDQ3MDk0LDQ3MDk1LDQ3MDk2LDQ3MDk3LDQ3MDk4LDQ3MDk5LDQ3MTAyLDQ3MTA2LDQ3MTA3LDQ3MTA4LDQ3MTA5LDQ3MTEwLDQ3MTE0LDQ3MTE1LDQ3MTE3LDQ3MTE4LDQ3MTE5LDQ3MTIxLDQ3MTIyLDQ3MTIzLDQ3MTI0LDQ3MTI1LDQ3MTI2LDQ3MTI3LDQ3MTMwLDQ3MTMyLDQ3MTM0LDQ3MTM1LDQ3MTM2LDQ3MTM3LDQ3MTM4LDQ3MTM5LDQ3MTQyLDQ3MTQzLDQ3MTQ1LDQ3MTQ2LDQ3MTQ3LDQ3MTQ5LDQ3MTUwLDQ3MTUxLDQ3MTUyLDQ3MTUzLDQ3MTU0LDQ3MTU1LDQ3MTU4LDQ3MTYyLDQ3MTYzLDQ3MTY0LDQ3MTY1LDQ3MTY2LDQ3MTY3LDQ3MTY5LDQ3MTcwLDQ3MTcxLDQ3MTczLDQ3MTc0LDQ3MTc1LDQ3MTc2LDQ3MTc3LDQ3MTc4LDQ3MTc5LDQ3MTgwLDQ3MTgxLDQ3MTgyLDQ3MTgzLDQ3MTg0LDQ3MTg2LDQ3MTg4LDQ3MTg5LDQ3MTkwLDQ3MTkxLDQ3MTkyLDQ3MTkzLDQ3MTk0LDQ3MTk1LDQ3MTk4LDQ3MTk5LDQ3MjAxLDQ3MjAyLDQ3MjAzLDQ3MjA1LDQ3MjA2LDQ3MjA3LDQ3MjA4LDQ3MjA5LDQ3MjEwLDQ3MjExLDQ3MjE0LDQ3MjE2LDQ3MjE4LDQ3MjE5LDQ3MjIwLDQ3MjIxLDQ3MjIyLDQ3MjIzLDQ3MjI1LDQ3MjI2LDQ3MjI3LDQ3MjI5LDQ3MjMwLDQ3MjMxLDQ3MjMyLDQ3MjMzLDQ3MjM0LDQ3MjM1LDQ3MjM2LDQ3MjM3LDQ3MjM4LDQ3MjM5LDQ3MjQwLDQ3MjQxLDQ3MjQyLDQ3MjQzLDQ3MjQ0LDQ3MjQ2LDQ3MjQ3LDQ3MjQ4LDQ3MjQ5LDQ3MjUwLDQ3MjUxLDQ3MjUyLDQ3MjUzLDQ3MjU0LDQ3MjU1LDQ3MjU2LDQ3MjU3LDQ3MjU4LDQ3MjU5LDQ3MjYwLDQ3MjYxLDQ3MjYyLDQ3MjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MjY0LDQ3MjY1LDQ3MjY2LDQ3MjY3LDQ3MjY4LDQ3MjY5LDQ3MjcwLDQ3MjcxLDQ3MjczLDQ3Mjc0LDQ3Mjc1LDQ3Mjc2LDQ3Mjc3LDQ3Mjc4LDQ3Mjc5LDQ3MjgxLDQ3MjgyLDQ3MjgzLDQ3Mjg1LDQ3Mjg2LDQ3Mjg3LDQ3Mjg5LDQ3MjkwLDQ3MjkxLDQ3MjkyLDQ3MjkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3Mjk0LDQ3Mjk1LDQ3Mjk4LDQ3MzAwLDQ3MzAyLDQ3MzAzLDQ3MzA0LDQ3MzA1LDQ3MzA2LDQ3MzA3LDQ3MzA5LDQ3MzEwLDQ3MzExLDQ3MzEzLDQ3MzE0LDQ3MzE1LDQ3MzE3LDQ3MzE4LDQ3MzE5LDQ3MzIwLDQ3MzIxLDQ3MzIyLDQ3MzIzLDQ3MzI0LDQ3MzI2LDQ3MzI4LDQ3MzMwLDQ3MzMxLDQ3MzMyLDQ3MzMzLDQ3MzM0LDQ3MzM1LDQ3MzM4LDQ3MzM5LDQ3MzQxLDQ3MzQyLDQ3MzQzLDQ3MzQ1LDQ3MzQ2LDQ3MzQ3LDQ3MzQ4LDQ3MzQ5LDQ3MzUwLDQ3MzUxLDQ3MzU0LDQ3MzU2LDQ3MzU4LDQ3MzU5LDQ3MzYwLDQ3MzYxLDQ3MzYyLDQ3MzYzLDQ3MzY1LDQ3MzY2LDQ3MzY3LDQ3MzY4LDQ3MzY5LDQ3MzcwLDQ3MzcxLDQ3MzcyLDQ3MzczLDQ3Mzc0LDQ3Mzc1LDQ3Mzc2LDQ3Mzc3LDQ3Mzc4LDQ3Mzc5LDQ3MzgwLDQ3MzgxLDQ3MzgyLDQ3MzgzLDQ3Mzg1LDQ3Mzg2LDQ3Mzg3LDQ3Mzg4LDQ3Mzg5LDQ3MzkwLDQ3MzkxLDQ3MzkzLDQ3Mzk0LDQ3Mzk1LDQ3Mzk2LDQ3Mzk3LDQ3Mzk4LDQ3Mzk5LDQ3NDAwLDQ3NDAxLDQ3NDAyLDQ3NDAzLDQ3NDA0LDQ3NDA1LDQ3NDA2LDQ3NDA3LDQ3NDA4LDQ3NDA5LDQ3NDEwLDQ3NDExLDQ3NDEyLDQ3NDEzLDQ3NDE0LDQ3NDE1LDQ3NDE2LDQ3NDE3LDQ3NDE4LDQ3NDE5LDQ3NDIyLDQ3NDIzLDQ3NDI1LDQ3NDI2LDQ3NDI3LDQ3NDI5LDQ3NDMwLDQ3NDMxLDQ3NDMyLDQ3NDMzLDQ3NDM0LDQ3NDM1LDQ3NDM3LDQ3NDM4LDQ3NDQwLDQ3NDQyLDQ3NDQzLDQ3NDQ0LDQ3NDQ1LDQ3NDQ2LDQ3NDQ3LDQ3NDUwLDQ3NDUxLDQ3NDUzLDQ3NDU0LDQ3NDU1LDQ3NDU3LDQ3NDU4LDQ3NDU5LDQ3NDYwLDQ3NDYxLDQ3NDYyLDQ3NDYzLDQ3NDY2LDQ3NDY4LDQ3NDcwLDQ3NDcxLDQ3NDcyLDQ3NDczLDQ3NDc0LDQ3NDc1LDQ3NDc4LDQ3NDc5LDQ3NDgxLDQ3NDgyLDQ3NDgzLDQ3NDg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NDg2LDQ3NDg3LDQ3NDg4LDQ3NDg5LDQ3NDkwLDQ3NDkxLDQ3NDk0LDQ3NDk2LDQ3NDk5LDQ3NTAwLDQ3NTAzLDQ3NTA0LDQ3NTA1LDQ3NTA2LDQ3NTA3LDQ3NTA4LDQ3NTA5LDQ3NTEwLDQ3NTExLDQ3NTEyLDQ3NTEzLDQ3NTE0LDQ3NTE1LDQ3NTE2LDQ3NTE3LDQ3NTE4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NTE5LDQ3NTIwLDQ3NTIxLDQ3NTIyLDQ3NTIzLDQ3NTI0LDQ3NTI1LDQ3NTI2LDQ3NTI3LDQ3NTI4LDQ3NTI5LDQ3NTMwLDQ3NTMxLDQ3NTM0LDQ3NTM1LDQ3NTM3LDQ3NTM4LDQ3NTM5LDQ3NTQxLDQ3NTQyLDQ3NTQzLDQ3NTQ0LDQ3NTQ1LDQ3NTQ2LDQ3NTQ3LDQ3NTUwLDQ3NTUyLDQ3NTU0LDQ3NTU1LDQ3NTU2LDQ3NTU3LDQ3NTU4LDQ3NTU5LDQ3NTYyLDQ3NTYzLDQ3NTY1LDQ3NTcxLDQ3NTcyLDQ3NTczLDQ3NTc0LDQ3NTc1LDQ3NTc4LDQ3NTgwLDQ3NTgzLDQ3NTg0LDQ3NTg2LDQ3NTkwLDQ3NTkxLDQ3NTkzLDQ3NTk0LDQ3NTk1LDQ3NTk3LDQ3NTk4LDQ3NTk5LDQ3NjAwLDQ3NjAxLDQ3NjAyLDQ3NjAzLDQ3NjA2LDQ3NjExLDQ3NjEyLDQ3NjEzLDQ3NjE0LDQ3NjE1LDQ3NjE4LDQ3NjE5LDQ3NjIwLDQ3NjIxLDQ3NjIyLDQ3NjIzLDQ3NjI1LDQ3NjI2LDQ3NjI3LDQ3NjI4LDQ3NjI5LDQ3NjMwLDQ3NjMxLDQ3NjMyLDQ3NjMzLDQ3NjM0LDQ3NjM1LDQ3NjM2LDQ3NjM4LDQ3NjM5LDQ3NjQwLDQ3NjQxLDQ3NjQyLDQ3NjQzLDQ3NjQ0LDQ3NjQ1LDQ3NjQ2LDQ3NjQ3LDQ3NjQ4LDQ3NjQ5LDQ3NjUwLDQ3NjUxLDQ3NjUyLDQ3NjUzLDQ3NjU0LDQ3NjU1LDQ3NjU2LDQ3NjU3LDQ3NjU4LDQ3NjU5LDQ3NjYwLDQ3NjYxLDQ3NjYyLDQ3NjYzLDQ3NjY0LDQ3NjY1LDQ3NjY2LDQ3NjY3LDQ3NjY4LDQ3NjY5LDQ3NjcwLDQ3NjcxLDQ3Njc0LDQ3Njc1LDQ3Njc3LDQ3Njc4LDQ3Njc5LDQ3NjgxLDQ3NjgzLDQ3Njg0LDQ3Njg1LDQ3Njg2LDQ3Njg3LDQ3NjkwLDQ3NjkyLDQ3Njk1LDQ3Njk2LDQ3Njk3LDQ3Njk4LDQ3NzAyLDQ3NzAzLDQ3NzA1LDQ3NzA2LDQ3NzA3LDQ3NzA5LDQ3NzEwLDQ3NzExLDQ3NzEyLDQ3NzEzLDQ3NzE0LDQ3NzE1LDQ3NzE4LDQ3NzIyLDQ3NzIzLDQ3NzI0LDQ3NzI1LDQ3NzI2LDQ3NzI3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NzMwLDQ3NzMxLDQ3NzMzLDQ3NzM0LDQ3NzM1LDQ3NzM3LDQ3NzM4LDQ3NzM5LDQ3NzQwLDQ3NzQxLDQ3NzQyLDQ3NzQzLDQ3NzQ0LDQ3NzQ1LDQ3NzQ2LDQ3NzUwLDQ3NzUyLDQ3NzUzLDQ3NzU0LDQ3NzU1LDQ3NzU3LDQ3NzU4LDQ3NzU5LDQ3NzYwLDQ3NzYxLDQ3NzYyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NzYzLDQ3NzY0LDQ3NzY1LDQ3NzY2LDQ3NzY3LDQ3NzY4LDQ3NzY5LDQ3NzcwLDQ3NzcxLDQ3NzcyLDQ3NzczLDQ3Nzc0LDQ3Nzc1LDQ3Nzc2LDQ3Nzc3LDQ3Nzc4LDQ3Nzc5LDQ3NzgwLDQ3NzgxLDQ3NzgyLDQ3NzgzLDQ3Nzg2LDQ3Nzg5LDQ3NzkwLDQ3NzkxLDQ3NzkzLDQ3Nzk1LDQ3Nzk2LDQ3Nzk3LDQ3Nzk4LDQ3Nzk5LDQ3ODAyLDQ3ODA0LDQ3ODA2LDQ3ODA3LDQ3ODA4LDQ3ODA5LDQ3ODEwLDQ3ODExLDQ3ODEzLDQ3ODE0LDQ3ODE1LDQ3ODE3LDQ3ODE4LDQ3ODE5LDQ3ODIwLDQ3ODIxLDQ3ODIyLDQ3ODIzLDQ3ODI0LDQ3ODI1LDQ3ODI2LDQ3ODI3LDQ3ODI4LDQ3ODI5LDQ3ODMwLDQ3ODMxLDQ3ODM0LDQ3ODM1LDQ3ODM2LDQ3ODM3LDQ3ODM4LDQ3ODM5LDQ3ODQwLDQ3ODQxLDQ3ODQyLDQ3ODQzLDQ3ODQ0LDQ3ODQ1LDQ3ODQ2LDQ3ODQ3LDQ3ODQ4LDQ3ODQ5LDQ3ODUwLDQ3ODUxLDQ3ODUyLDQ3ODUzLDQ3ODU0LDQ3ODU1LDQ3ODU2LDQ3ODU3LDQ3ODU4LDQ3ODU5LDQ3ODYwLDQ3ODYxLDQ3ODYyLDQ3ODYzLDQ3ODY0LDQ3ODY1LDQ3ODY2LDQ3ODY3LDQ3ODY5LDQ3ODcwLDQ3ODcxLDQ3ODczLDQ3ODc0LDQ3ODc1LDQ3ODc3LDQ3ODc4LDQ3ODc5LDQ3ODgwLDQ3ODgxLDQ3ODgyLDQ3ODgzLDQ3ODg0LDQ3ODg2LDQ3ODg4LDQ3ODkwLDQ3ODkxLDQ3ODkyLDQ3ODkzLDQ3ODk0LDQ3ODk1LDQ3ODk3LDQ3ODk4LDQ3ODk5LDQ3OTAxLDQ3OTAyLDQ3OTAzLDQ3OTA1LDQ3OTA2LDQ3OTA3LDQ3OTA4LDQ3OTA5LDQ3OTEwLDQ3OTExLDQ3OTEyLDQ3OTE0LDQ3OTE2LDQ3OTE3LDQ3OTE4LDQ3OTE5LDQ3OTIwLDQ3OTIxLDQ3OTIyLDQ3OTIzLDQ3OTI3LDQ3OTI5LDQ3OTMwLDQ3OTM1LDQ3OTM2LDQ3OTM3LDQ3OTM4LDQ3OTM5LDQ3OTQyLDQ3OTQ0LDQ3OTQ2LDQ3OTQ3LDQ3OTQ4LDQ3OTUwLDQ3OTUzLDQ3OTU0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3OTU1LDQ3OTU3LDQ3OTU4LDQ3OTU5LDQ3OTYxLDQ3OTYyLDQ3OTYzLDQ3OTY0LDQ3OTY1LDQ3OTY2LDQ3OTY3LDQ3OTY4LDQ3OTcwLDQ3OTcyLDQ3OTczLDQ3OTc0LDQ3OTc1LDQ3OTc2LDQ3OTc3LDQ3OTc4LDQ3OTc5LDQ3OTgxLDQ3OTgyLDQ3OTgzLDQ3OTg0LDQ3OTg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3OTg2LDQ3OTg3LDQ3OTg4LDQ3OTg5LDQ3OTkwLDQ3OTkxLDQ3OTkyLDQ3OTkzLDQ3OTk0LDQ3OTk1LDQ3OTk2LDQ3OTk3LDQ3OTk4LDQ3OTk5LDQ4MDAwLDQ4MDAxLDQ4MDAyLDQ4MDAzLDQ4MDA0LDQ4MDA1LDQ4MDA2LDQ4MDA3LDQ4MDA5LDQ4MDEwLDQ4MDExLDQ4MDEzLDQ4MDE0LDQ4MDE1LDQ4MDE3LDQ4MDE4LDQ4MDE5LDQ4MDIwLDQ4MDIxLDQ4MDIyLDQ4MDIzLDQ4MDI0LDQ4MDI1LDQ4MDI2LDQ4MDI3LDQ4MDI4LDQ4MDI5LDQ4MDMwLDQ4MDMxLDQ4MDMyLDQ4MDMzLDQ4MDM0LDQ4MDM1LDQ4MDM3LDQ4MDM4LDQ4MDM5LDQ4MDQxLDQ4MDQyLDQ4MDQzLDQ4MDQ1LDQ4MDQ2LDQ4MDQ3LDQ4MDQ4LDQ4MDQ5LDQ4MDUwLDQ4MDUxLDQ4MDUzLDQ4MDU0LDQ4MDU2LDQ4MDU3LDQ4MDU4LDQ4MDU5LDQ4MDYwLDQ4MDYxLDQ4MDYyLDQ4MDYzLDQ4MDY1LDQ4MDY2LDQ4MDY3LDQ4MDY5LDQ4MDcwLDQ4MDcxLDQ4MDczLDQ4MDc0LDQ4MDc1LDQ4MDc2LDQ4MDc3LDQ4MDc4LDQ4MDc5LDQ4MDgxLDQ4MDgyLDQ4MDg0LDQ4MDg1LDQ4MDg2LDQ4MDg3LDQ4MDg4LDQ4MDg5LDQ4MDkwLDQ4MDkxLDQ4MDkyLDQ4MDkzLDQ4MDk0LDQ4MDk1LDQ4MDk2LDQ4MDk3LDQ4MDk4LDQ4MDk5LDQ4MTAwLDQ4MTAxLDQ4MTAyLDQ4MTAzLDQ4MTA0LDQ4MTA1LDQ4MTA2LDQ4MTA3LDQ4MTA4LDQ4MTA5LDQ4MTEwLDQ4MTExLDQ4MTEyLDQ4MTEzLDQ4MTE0LDQ4MTE1LDQ4MTE2LDQ4MTE3LDQ4MTE4LDQ4MTE5LDQ4MTIyLDQ4MTIzLDQ4MTI1LDQ4MTI2LDQ4MTI5LDQ4MTMxLDQ4MTMyLDQ4MTMzLDQ4MTM0LDQ4MTM1LDQ4MTM4LDQ4MTQyLDQ4MTQ0LDQ4MTQ2LDQ4MTQ3LDQ4MTUzLDQ4MTU0LDQ4MTYwLDQ4MTYxLDQ4MTYyLDQ4MTYzLDQ4MTY2LDQ4MTY4LDQ4MTcwLDQ4MTcxLDQ4MTcyLDQ4MTc0LDQ4MTc1LDQ4MTc4LDQ4MTc5LDQ4MTgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4MTgyLDQ4MTgzLDQ4MTg1LDQ4MTg2LDQ4MTg3LDQ4MTg4LDQ4MTg5LDQ4MTkwLDQ4MTkxLDQ4MTk0LDQ4MTk4LDQ4MTk5LDQ4MjAwLDQ4MjAyLDQ4MjAzLDQ4MjA2LDQ4MjA3LDQ4MjA5LDQ4MjEwLDQ4MjExLDQ4MjEyLDQ4MjEzLDQ4MjE0LDQ4MjE1LDQ4MjE2LDQ4MjE3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4MjE4LDQ4MjE5LDQ4MjIwLDQ4MjIyLDQ4MjIzLDQ4MjI0LDQ4MjI1LDQ4MjI2LDQ4MjI3LDQ4MjI4LDQ4MjI5LDQ4MjMwLDQ4MjMxLDQ4MjMyLDQ4MjMzLDQ4MjM0LDQ4MjM1LDQ4MjM2LDQ4MjM3LDQ4MjM4LDQ4MjM5LDQ4MjQwLDQ4MjQxLDQ4MjQyLDQ4MjQzLDQ4MjQ0LDQ4MjQ1LDQ4MjQ2LDQ4MjQ3LDQ4MjQ4LDQ4MjQ5LDQ4MjUwLDQ4MjUxLDQ4MjUyLDQ4MjUzLDQ4MjU0LDQ4MjU1LDQ4MjU2LDQ4MjU3LDQ4MjU4LDQ4MjU5LDQ4MjYyLDQ4MjYzLDQ4MjY1LDQ4MjY2LDQ4MjY5LDQ4MjcxLDQ4MjcyLDQ4MjczLDQ4Mjc0LDQ4Mjc1LDQ4Mjc4LDQ4MjgwLDQ4MjgzLDQ4Mjg0LDQ4Mjg1LDQ4Mjg2LDQ4Mjg3LDQ4MjkwLDQ4MjkxLDQ4MjkzLDQ4Mjk0LDQ4Mjk3LDQ4Mjk4LDQ4Mjk5LDQ4MzAwLDQ4MzAxLDQ4MzAyLDQ4MzAzLDQ4MzA2LDQ4MzEwLDQ4MzExLDQ4MzEyLDQ4MzEzLDQ4MzE0LDQ4MzE1LDQ4MzE4LDQ4MzE5LDQ4MzIxLDQ4MzIyLDQ4MzIzLDQ4MzI1LDQ4MzI2LDQ4MzI3LDQ4MzI4LDQ4MzI5LDQ4MzMwLDQ4MzMxLDQ4MzMyLDQ4MzM0LDQ4MzM4LDQ4MzM5LDQ4MzQwLDQ4MzQyLDQ4MzQzLDQ4MzQ1LDQ4MzQ2LDQ4MzQ3LDQ4MzQ5LDQ4MzUwLDQ4MzUxLDQ4MzUyLDQ4MzUzLDQ4MzU0LDQ4MzU1LDQ4MzU2LDQ4MzU3LDQ4MzU4LDQ4MzU5LDQ4MzYwLDQ4MzYxLDQ4MzYyLDQ4MzYzLDQ4MzY0LDQ4MzY1LDQ4MzY2LDQ4MzY3LDQ4MzY4LDQ4MzY5LDQ4MzcwLDQ4MzcxLDQ4Mzc1LDQ4Mzc3LDQ4Mzc4LDQ4Mzc5LDQ4MzgxLDQ4MzgyLDQ4MzgzLDQ4Mzg0LDQ4Mzg1LDQ4Mzg2LDQ4Mzg3LDQ4MzkwLDQ4MzkyLDQ4Mzk0LDQ4Mzk1LDQ4Mzk2LDQ4Mzk3LDQ4Mzk4LDQ4Mzk5LDQ4NDAxLDQ4NDAyLDQ4NDAzLDQ4NDA1LDQ4NDA2LDQ4NDA3LDQ4NDA4LDQ4NDA5LDQ4NDEwLDQ4NDExLDQ4NDEyLDQ4NDEzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NDE0LDQ4NDE1LDQ4NDE2LDQ4NDE3LDQ4NDE4LDQ4NDE5LDQ4NDIxLDQ4NDIyLDQ4NDIzLDQ4NDI0LDQ4NDI1LDQ4NDI2LDQ4NDI3LDQ4NDI5LDQ4NDMwLDQ4NDMxLDQ4NDMyLDQ4NDMzLDQ4NDM0LDQ4NDM1LDQ4NDM2LDQ4NDM3LDQ4NDM4LDQ4NDM5LDQ4NDQwLDQ4NDQxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NDQyLDQ4NDQzLDQ4NDQ0LDQ4NDQ1LDQ4NDQ2LDQ4NDQ3LDQ4NDQ5LDQ4NDUwLDQ4NDUxLDQ4NDUyLDQ4NDUzLDQ4NDU0LDQ4NDU1LDQ4NDU4LDQ4NDU5LDQ4NDYxLDQ4NDYyLDQ4NDYzLDQ4NDY1LDQ4NDY2LDQ4NDY3LDQ4NDY4LDQ4NDY5LDQ4NDcwLDQ4NDcxLDQ4NDc0LDQ4NDc1LDQ4NDc2LDQ4NDc3LDQ4NDc4LDQ4NDc5LDQ4NDgwLDQ4NDgxLDQ4NDgyLDQ4NDgzLDQ4NDg1LDQ4NDg2LDQ4NDg3LDQ4NDg5LDQ4NDkwLDQ4NDkxLDQ4NDkyLDQ4NDkzLDQ4NDk0LDQ4NDk1LDQ4NDk2LDQ4NDk3LDQ4NDk4LDQ4NDk5LDQ4NTAwLDQ4NTAxLDQ4NTAyLDQ4NTAzLDQ4NTA0LDQ4NTA1LDQ4NTA2LDQ4NTA3LDQ4NTA4LDQ4NTA5LDQ4NTEwLDQ4NTExLDQ4NTE0LDQ4NTE1LDQ4NTE3LDQ4NTE4LDQ4NTIzLDQ4NTI0LDQ4NTI1LDQ4NTI2LDQ4NTI3LDQ4NTMwLDQ4NTMyLDQ4NTM0LDQ4NTM1LDQ4NTM2LDQ4NTM5LDQ4NTQxLDQ4NTQyLDQ4NTQzLDQ4NTQ0LDQ4NTQ1LDQ4NTQ2LDQ4NTQ3LDQ4NTQ5LDQ4NTUwLDQ4NTUxLDQ4NTUyLDQ4NTUzLDQ4NTU0LDQ4NTU1LDQ4NTU2LDQ4NTU3LDQ4NTU4LDQ4NTU5LDQ4NTYxLDQ4NTYyLDQ4NTYzLDQ4NTY0LDQ4NTY1LDQ4NTY2LDQ4NTY3LDQ4NTY5LDQ4NTcwLDQ4NTcxLDQ4NTcyLDQ4NTczLDQ4NTc0LDQ4NTc1LDQ4NTc2LDQ4NTc3LDQ4NTc4LDQ4NTc5LDQ4NTgwLDQ4NTgxLDQ4NTgyLDQ4NTgzLDQ4NTg0LDQ4NTg1LDQ4NTg2LDQ4NTg3LDQ4NTg4LDQ4NTg5LDQ4NTkwLDQ4NTkxLDQ4NTkyLDQ4NTkzLDQ4NTk0LDQ4NTk1LDQ4NTk4LDQ4NTk5LDQ4NjAxLDQ4NjAyLDQ4NjAzLDQ4NjA1LDQ4NjA2LDQ4NjA3LDQ4NjA4LDQ4NjA5LDQ4NjEwLDQ4NjExLDQ4NjEyLDQ4NjEzLDQ4NjE0LDQ4NjE1LDQ4NjE2LDQ4NjE4LDQ4NjE5LDQ4NjIwLDQ4NjIxLDQ4NjIyLDQ4NjIzLDQ4NjI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NjI2LDQ4NjI3LDQ4NjI5LDQ4NjMwLDQ4NjMxLDQ4NjMzLDQ4NjM0LDQ4NjM1LDQ4NjM2LDQ4NjM3LDQ4NjM4LDQ4NjM5LDQ4NjQxLDQ4NjQyLDQ4NjQ0LDQ4NjQ2LDQ4NjQ3LDQ4NjQ4LDQ4NjQ5LDQ4NjUwLDQ4NjUxLDQ4NjU0LDQ4NjU1LDQ4NjU3LDQ4NjU4LDQ4NjU5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NjYxLDQ4NjYyLDQ4NjYzLDQ4NjY0LDQ4NjY1LDQ4NjY2LDQ4NjY3LDQ4NjcwLDQ4NjcyLDQ4NjczLDQ4Njc0LDQ4Njc1LDQ4Njc2LDQ4Njc3LDQ4Njc4LDQ4Njc5LDQ4NjgwLDQ4NjgxLDQ4NjgyLDQ4NjgzLDQ4Njg0LDQ4Njg1LDQ4Njg2LDQ4Njg3LDQ4Njg4LDQ4Njg5LDQ4NjkwLDQ4NjkxLDQ4NjkyLDQ4NjkzLDQ4Njk0LDQ4Njk1LDQ4Njk2LDQ4Njk3LDQ4Njk4LDQ4Njk5LDQ4NzAwLDQ4NzAxLDQ4NzAyLDQ4NzAzLDQ4NzA0LDQ4NzA1LDQ4NzA2LDQ4NzA3LDQ4NzEwLDQ4NzExLDQ4NzEzLDQ4NzE0LDQ4NzE1LDQ4NzE3LDQ4NzE5LDQ4NzIwLDQ4NzIxLDQ4NzIyLDQ4NzIzLDQ4NzI2LDQ4NzI4LDQ4NzMyLDQ4NzMzLDQ4NzM0LDQ4NzM1LDQ4NzM4LDQ4NzM5LDQ4NzQxLDQ4NzQyLDQ4NzQzLDQ4NzQ1LDQ4NzQ3LDQ4NzQ4LDQ4NzQ5LDQ4NzUwLDQ4NzUxLDQ4NzU0LDQ4NzU4LDQ4NzU5LDQ4NzYwLDQ4NzYxLDQ4NzYyLDQ4NzY2LDQ4NzY3LDQ4NzY5LDQ4NzcwLDQ4NzcxLDQ4NzczLDQ4Nzc0LDQ4Nzc1LDQ4Nzc2LDQ4Nzc3LDQ4Nzc4LDQ4Nzc5LDQ4NzgyLDQ4Nzg2LDQ4Nzg3LDQ4Nzg4LDQ4Nzg5LDQ4NzkwLDQ4NzkxLDQ4Nzk0LDQ4Nzk1LDQ4Nzk2LDQ4Nzk3LDQ4Nzk4LDQ4Nzk5LDQ4ODAwLDQ4ODAxLDQ4ODAyLDQ4ODAzLDQ4ODA0LDQ4ODA1LDQ4ODA2LDQ4ODA3LDQ4ODA5LDQ4ODEwLDQ4ODExLDQ4ODEyLDQ4ODEzLDQ4ODE0LDQ4ODE1LDQ4ODE2LDQ4ODE3LDQ4ODE4LDQ4ODE5LDQ4ODIwLDQ4ODIxLDQ4ODIyLDQ4ODIzLDQ4ODI0LDQ4ODI1LDQ4ODI2LDQ4ODI3LDQ4ODI4LDQ4ODI5LDQ4ODMwLDQ4ODMxLDQ4ODMyLDQ4ODMzLDQ4ODM0LDQ4ODM1LDQ4ODM2LDQ4ODM3LDQ4ODM4LDQ4ODM5LDQ4ODQwLDQ4ODQxLDQ4ODQyLDQ4ODQzLDQ4ODQ0LDQ4ODQ1LDQ4ODQ2LDQ4ODQ3LDQ4ODUwLDQ4ODUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4ODUzLDQ4ODU0LDQ4ODU3LDQ4ODU4LDQ4ODU5LDQ4ODYwLDQ4ODYxLDQ4ODYyLDQ4ODYzLDQ4ODY1LDQ4ODY2LDQ4ODcwLDQ4ODcxLDQ4ODcyLDQ4ODczLDQ4ODc0LDQ4ODc1LDQ4ODc3LDQ4ODc4LDQ4ODc5LDQ4ODgwLDQ4ODgxLDQ4ODgyLDQ4ODgzLDQ4ODg0LDQ4ODg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4ODg2LDQ4ODg3LDQ4ODg4LDQ4ODg5LDQ4ODkwLDQ4ODkxLDQ4ODkyLDQ4ODkzLDQ4ODk0LDQ4ODk1LDQ4ODk2LDQ4ODk4LDQ4ODk5LDQ4OTAwLDQ4OTAxLDQ4OTAyLDQ4OTAzLDQ4OTA2LDQ4OTA3LDQ4OTA4LDQ4OTA5LDQ4OTEwLDQ4OTExLDQ4OTEyLDQ4OTEzLDQ4OTE0LDQ4OTE1LDQ4OTE2LDQ4OTE3LDQ4OTE4LDQ4OTE5LDQ4OTIyLDQ4OTI2LDQ4OTI3LDQ4OTI4LDQ4OTI5LDQ4OTMwLDQ4OTMxLDQ4OTMyLDQ4OTMzLDQ4OTM0LDQ4OTM1LDQ4OTM2LDQ4OTM3LDQ4OTM4LDQ4OTM5LDQ4OTQwLDQ4OTQxLDQ4OTQyLDQ4OTQzLDQ4OTQ0LDQ4OTQ1LDQ4OTQ2LDQ4OTQ3LDQ4OTQ4LDQ4OTQ5LDQ4OTUwLDQ4OTUxLDQ4OTUyLDQ4OTUzLDQ4OTU0LDQ4OTU1LDQ4OTU2LDQ4OTU3LDQ4OTU4LDQ4OTU5LDQ4OTYyLDQ4OTYzLDQ4OTY1LDQ4OTY2LDQ4OTY3LDQ4OTY5LDQ4OTcwLDQ4OTcxLDQ4OTcyLDQ4OTczLDQ4OTc0LDQ4OTc1LDQ4OTc4LDQ4OTc5LDQ4OTgwLDQ4OTgyLDQ4OTgzLDQ4OTg0LDQ4OTg1LDQ4OTg2LDQ4OTg3LDQ4OTg4LDQ4OTg5LDQ4OTkwLDQ4OTkxLDQ4OTkyLDQ4OTkzLDQ4OTk0LDQ4OTk1LDQ4OTk2LDQ4OTk3LDQ4OTk4LDQ4OTk5LDQ5MDAwLDQ5MDAxLDQ5MDAyLDQ5MDAzLDQ5MDA0LDQ5MDA1LDQ5MDA2LDQ5MDA3LDQ5MDA4LDQ5MDA5LDQ5MDEwLDQ5MDExLDQ5MDEyLDQ5MDEzLDQ5MDE0LDQ5MDE1LDQ5MDE2LDQ5MDE3LDQ5MDE4LDQ5MDE5LDQ5MDIwLDQ5MDIxLDQ5MDIyLDQ5MDIzLDQ5MDI0LDQ5MDI1LDQ5MDI2LDQ5MDI3LDQ5MDI4LDQ5MDI5LDQ5MDMwLDQ5MDMxLDQ5MDMyLDQ5MDMzLDQ5MDM0LDQ5MDM1LDQ5MDM2LDQ5MDM3LDQ5MDM4LDQ5MDM5LDQ5MDQwLDQ5MDQxLDQ5MDQyLDQ5MDQzLDQ5MDQ1LDQ5MDQ2LDQ5MDQ3LDQ5MDQ4LDQ5MDQ5LDQ5MDUwLDQ5MDUxLDQ5MDUyLDQ5MDUzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5MDU0LDQ5MDU1LDQ5MDU2LDQ5MDU3LDQ5MDU4LDQ5MDU5LDQ5MDYwLDQ5MDYxLDQ5MDYyLDQ5MDYzLDQ5MDY0LDQ5MDY1LDQ5MDY2LDQ5MDY3LDQ5MDY4LDQ5MDY5LDQ5MDcwLDQ5MDcxLDQ5MDczLDQ5MDc0LDQ5MDc1LDQ5MDc2LDQ5MDc3LDQ5MDc4LDQ5MDc5LDQ5MDgwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5MDgxLDQ5MDgyLDQ5MDgzLDQ5MDg0LDQ5MDg1LDQ5MDg2LDQ5MDg3LDQ5MDg4LDQ5MDg5LDQ5MDkwLDQ5MDkxLDQ5MDkyLDQ5MDk0LDQ5MDk1LDQ5MDk2LDQ5MDk3LDQ5MDk4LDQ5MDk5LDQ5MTAyLDQ5MTAzLDQ5MTA1LDQ5MTA2LDQ5MTA3LDQ5MTA5LDQ5MTEwLDQ5MTExLDQ5MTEyLDQ5MTEzLDQ5MTE0LDQ5MTE1LDQ5MTE3LDQ5MTE4LDQ5MTIwLDQ5MTIyLDQ5MTIzLDQ5MTI0LDQ5MTI1LDQ5MTI2LDQ5MTI3LDQ5MTI4LDQ5MTI5LDQ5MTMwLDQ5MTMxLDQ5MTMyLDQ5MTMzLDQ5MTM0LDQ5MTM1LDQ5MTM2LDQ5MTM3LDQ5MTM4LDQ5MTM5LDQ5MTQwLDQ5MTQxLDQ5MTQyLDQ5MTQzLDQ5MTQ0LDQ5MTQ1LDQ5MTQ2LDQ5MTQ3LDQ5MTQ4LDQ5MTQ5LDQ5MTUwLDQ5MTUxLDQ5MTUyLDQ5MTUzLDQ5MTU0LDQ5MTU1LDQ5MTU2LDQ5MTU3LDQ5MTU4LDQ5MTU5LDQ5MTYwLDQ5MTYxLDQ5MTYyLDQ5MTYzLDQ5MTY0LDQ5MTY1LDQ5MTY2LDQ5MTY3LDQ5MTY4LDQ5MTY5LDQ5MTcwLDQ5MTcxLDQ5MTcyLDQ5MTczLDQ5MTc0LDQ5MTc1LDQ5MTc2LDQ5MTc3LDQ5MTc4LDQ5MTc5LDQ5MTgwLDQ5MTgxLDQ5MTgyLDQ5MTgzLDQ5MTg0LDQ5MTg1LDQ5MTg2LDQ5MTg3LDQ5MTg4LDQ5MTg5LDQ5MTkwLDQ5MTkxLDQ5MTkyLDQ5MTkzLDQ5MTk0LDQ5MTk1LDQ5MTk2LDQ5MTk3LDQ5MTk4LDQ5MTk5LDQ5MjAwLDQ5MjAxLDQ5MjAyLDQ5MjAzLDQ5MjA0LDQ5MjA1LDQ5MjA2LDQ5MjA3LDQ5MjA4LDQ5MjA5LDQ5MjEwLDQ5MjExLDQ5MjEzLDQ5MjE0LDQ5MjE1LDQ5MjE2LDQ5MjE3LDQ5MjE4LDQ5MjE5LDQ5MjIwLDQ5MjIxLDQ5MjIyLDQ5MjIzLDQ5MjI0LDQ5MjI1LDQ5MjI2LDQ5MjI3LDQ5MjI4LDQ5MjI5LDQ5MjMwLDQ5MjMxLDQ5MjMyLDQ5MjM0LDQ5MjM1LDQ5MjM2LDQ5MjM3LDQ5MjM4LDQ5MjM5LDQ5MjQxLDQ5MjQyLDQ5MjQzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5MjQ1LDQ5MjQ2LDQ5MjQ3LDQ5MjQ5LDQ5MjUwLDQ5MjUxLDQ5MjUyLDQ5MjUzLDQ5MjU0LDQ5MjU1LDQ5MjU4LDQ5MjU5LDQ5MjYwLDQ5MjYxLDQ5MjYyLDQ5MjYzLDQ5MjY0LDQ5MjY1LDQ5MjY2LDQ5MjY3LDQ5MjY4LDQ5MjY5LDQ5MjcwLDQ5MjcxLDQ5MjcyLDQ5MjczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5Mjc0LDQ5Mjc1LDQ5Mjc2LDQ5Mjc3LDQ5Mjc4LDQ5Mjc5LDQ5MjgwLDQ5MjgxLDQ5MjgyLDQ5MjgzLDQ5Mjg0LDQ5Mjg1LDQ5Mjg2LDQ5Mjg3LDQ5Mjg4LDQ5Mjg5LDQ5MjkwLDQ5MjkxLDQ5MjkyLDQ5MjkzLDQ5Mjk0LDQ5Mjk1LDQ5Mjk4LDQ5Mjk5LDQ5MzAxLDQ5MzAyLDQ5MzAzLDQ5MzA1LDQ5MzA2LDQ5MzA3LDQ5MzA4LDQ5MzA5LDQ5MzEwLDQ5MzExLDQ5MzE0LDQ5MzE2LDQ5MzE4LDQ5MzE5LDQ5MzIwLDQ5MzIxLDQ5MzIyLDQ5MzIzLDQ5MzI2LDQ5MzI5LDQ5MzMwLDQ5MzM1LDQ5MzM2LDQ5MzM3LDQ5MzM4LDQ5MzM5LDQ5MzQyLDQ5MzQ2LDQ5MzQ3LDQ5MzQ4LDQ5MzUwLDQ5MzUxLDQ5MzU0LDQ5MzU1LDQ5MzU3LDQ5MzU4LDQ5MzU5LDQ5MzYxLDQ5MzYyLDQ5MzYzLDQ5MzY0LDQ5MzY1LDQ5MzY2LDQ5MzY3LDQ5MzcwLDQ5Mzc0LDQ5Mzc1LDQ5Mzc2LDQ5Mzc3LDQ5Mzc4LDQ5Mzc5LDQ5MzgyLDQ5MzgzLDQ5Mzg1LDQ5Mzg2LDQ5Mzg3LDQ5Mzg5LDQ5MzkwLDQ5MzkxLDQ5MzkyLDQ5MzkzLDQ5Mzk0LDQ5Mzk1LDQ5Mzk4LDQ5NDAwLDQ5NDAyLDQ5NDAzLDQ5NDA0LDQ5NDA1LDQ5NDA2LDQ5NDA3LDQ5NDA5LDQ5NDEwLDQ5NDExLDQ5NDEzLDQ5NDE0LDQ5NDE1LDQ5NDE3LDQ5NDE4LDQ5NDE5LDQ5NDIwLDQ5NDIxLDQ5NDIyLDQ5NDIzLDQ5NDI1LDQ5NDI2LDQ5NDI3LDQ5NDI4LDQ5NDMwLDQ5NDMxLDQ5NDMyLDQ5NDMzLDQ5NDM0LDQ5NDM1LDQ5NDQxLDQ5NDQyLDQ5NDQ1LDQ5NDQ4LDQ5NDQ5LDQ5NDUwLDQ5NDUxLDQ5NDU0LDQ5NDU4LDQ5NDU5LDQ5NDYwLDQ5NDYxLDQ5NDYzLDQ5NDY2LDQ5NDY3LDQ5NDY5LDQ5NDcwLDQ5NDcxLDQ5NDczLDQ5NDc0LDQ5NDc1LDQ5NDc2LDQ5NDc3LDQ5NDc4LDQ5NDc5LDQ5NDgyLDQ5NDg2LDQ5NDg3LDQ5NDg4LDQ5NDg5LDQ5NDkwLDQ5NDkxLDQ5NDk0LDQ5NDk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NDk3LDQ5NDk4LDQ5NDk5LDQ5NTAxLDQ5NTAyLDQ5NTAzLDQ5NTA0LDQ5NTA1LDQ5NTA2LDQ5NTA3LDQ5NTEwLDQ5NTE0LDQ5NTE1LDQ5NTE2LDQ5NTE3LDQ5NTE4LDQ5NTE5LDQ5NTIxLDQ5NTIyLDQ5NTIzLDQ5NTI1LDQ5NTI2LDQ5NTI3LDQ5NTI5LDQ5NTMwLDQ5NTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NTMyLDQ5NTMzLDQ5NTM0LDQ5NTM1LDQ5NTM2LDQ5NTM3LDQ5NTM4LDQ5NTM5LDQ5NTQwLDQ5NTQyLDQ5NTQzLDQ5NTQ0LDQ5NTQ1LDQ5NTQ2LDQ5NTQ3LDQ5NTUxLDQ5NTUzLDQ5NTU0LDQ5NTU1LDQ5NTU3LDQ5NTU5LDQ5NTYwLDQ5NTYxLDQ5NTYyLDQ5NTYzLDQ5NTY2LDQ5NTY4LDQ5NTcwLDQ5NTcxLDQ5NTcyLDQ5NTc0LDQ5NTc1LDQ5NTc4LDQ5NTc5LDQ5NTgxLDQ5NTgyLDQ5NTgzLDQ5NTg1LDQ5NTg2LDQ5NTg3LDQ5NTg4LDQ5NTg5LDQ5NTkwLDQ5NTkxLDQ5NTkyLDQ5NTkzLDQ5NTk0LDQ5NTk1LDQ5NTk2LDQ5NTk4LDQ5NTk5LDQ5NjAwLDQ5NjAxLDQ5NjAyLDQ5NjAzLDQ5NjA1LDQ5NjA2LDQ5NjA3LDQ5NjA5LDQ5NjEwLDQ5NjExLDQ5NjEzLDQ5NjE0LDQ5NjE1LDQ5NjE2LDQ5NjE3LDQ5NjE4LDQ5NjE5LDQ5NjIxLDQ5NjIyLDQ5NjI1LDQ5NjI2LDQ5NjI3LDQ5NjI4LDQ5NjI5LDQ5NjMwLDQ5NjMxLDQ5NjMzLDQ5NjM0LDQ5NjM1LDQ5NjM3LDQ5NjM4LDQ5NjM5LDQ5NjQxLDQ5NjQyLDQ5NjQzLDQ5NjQ0LDQ5NjQ1LDQ5NjQ2LDQ5NjQ3LDQ5NjUwLDQ5NjUyLDQ5NjUzLDQ5NjU0LDQ5NjU1LDQ5NjU2LDQ5NjU3LDQ5NjU4LDQ5NjU5LDQ5NjYyLDQ5NjYzLDQ5NjY1LDQ5NjY2LDQ5NjY3LDQ5NjY5LDQ5NjcwLDQ5NjcxLDQ5NjcyLDQ5NjczLDQ5Njc0LDQ5Njc1LDQ5Njc4LDQ5NjgwLDQ5NjgyLDQ5NjgzLDQ5Njg0LDQ5Njg1LDQ5Njg2LDQ5Njg3LDQ5NjkwLDQ5NjkxLDQ5NjkzLDQ5Njk0LDQ5Njk3LDQ5Njk4LDQ5Njk5LDQ5NzAwLDQ5NzAxLDQ5NzAyLDQ5NzAzLDQ5NzA2LDQ5NzA4LDQ5NzEwLDQ5NzEyLDQ5NzE1LDQ5NzE3LDQ5NzE4LDQ5NzE5LDQ5NzIwLDQ5NzIxLDQ5NzIyLDQ5NzIzLDQ5NzI0LDQ5NzI1LDQ5NzI2LDQ5NzI3LDQ5NzI4LDQ5NzI5LDQ5NzMwLDQ5NzMxLDQ5NzMyLDQ5NzMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NzM0LDQ5NzM1LDQ5NzM3LDQ5NzM4LDQ5NzM5LDQ5NzQwLDQ5NzQxLDQ5NzQyLDQ5NzQzLDQ5NzQ2LDQ5NzQ3LDQ5NzQ5LDQ5NzUwLDQ5NzUxLDQ5NzUzLDQ5NzU0LDQ5NzU1LDQ5NzU2LDQ5NzU3LDQ5NzU4LDQ5NzU5LDQ5NzYxLDQ5NzYyLDQ5NzYzLDQ5NzY0LDQ5NzY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NzY3LDQ5NzY4LDQ5NzY5LDQ5NzcwLDQ5NzcxLDQ5Nzc0LDQ5Nzc1LDQ5Nzc3LDQ5Nzc4LDQ5Nzc5LDQ5NzgxLDQ5NzgyLDQ5NzgzLDQ5Nzg0LDQ5Nzg1LDQ5Nzg2LDQ5Nzg3LDQ5NzkwLDQ5NzkyLDQ5Nzk0LDQ5Nzk1LDQ5Nzk2LDQ5Nzk3LDQ5Nzk4LDQ5Nzk5LDQ5ODAyLDQ5ODAzLDQ5ODA0LDQ5ODA1LDQ5ODA2LDQ5ODA3LDQ5ODA5LDQ5ODEwLDQ5ODExLDQ5ODEyLDQ5ODEzLDQ5ODE0LDQ5ODE1LDQ5ODE3LDQ5ODE4LDQ5ODIwLDQ5ODIyLDQ5ODIzLDQ5ODI0LDQ5ODI1LDQ5ODI2LDQ5ODI3LDQ5ODMwLDQ5ODMxLDQ5ODMzLDQ5ODM0LDQ5ODM1LDQ5ODM4LDQ5ODM5LDQ5ODQwLDQ5ODQxLDQ5ODQyLDQ5ODQzLDQ5ODQ2LDQ5ODQ4LDQ5ODUwLDQ5ODUxLDQ5ODUyLDQ5ODUzLDQ5ODU0LDQ5ODU1LDQ5ODU2LDQ5ODU3LDQ5ODU4LDQ5ODU5LDQ5ODYwLDQ5ODYxLDQ5ODYyLDQ5ODYzLDQ5ODY0LDQ5ODY1LDQ5ODY2LDQ5ODY3LDQ5ODY4LDQ5ODY5LDQ5ODcwLDQ5ODcxLDQ5ODcyLDQ5ODczLDQ5ODc0LDQ5ODc1LDQ5ODc2LDQ5ODc3LDQ5ODc4LDQ5ODc5LDQ5ODgwLDQ5ODgxLDQ5ODgyLDQ5ODgzLDQ5ODg2LDQ5ODg3LDQ5ODg5LDQ5ODkwLDQ5ODkzLDQ5ODk0LDQ5ODk1LDQ5ODk2LDQ5ODk3LDQ5ODk4LDQ5OTAyLDQ5OTA0LDQ5OTA2LDQ5OTA3LDQ5OTA4LDQ5OTA5LDQ5OTExLDQ5OTE0LDQ5OTE3LDQ5OTE4LDQ5OTE5LDQ5OTIxLDQ5OTIyLDQ5OTIzLDQ5OTI0LDQ5OTI1LDQ5OTI2LDQ5OTI3LDQ5OTMwLDQ5OTMxLDQ5OTM0LDQ5OTM1LDQ5OTM2LDQ5OTM3LDQ5OTM4LDQ5OTQyLDQ5OTQzLDQ5OTQ1LDQ5OTQ2LDQ5OTQ3LDQ5OTQ5LDQ5OTUwLDQ5OTUxLDQ5OTUyLDQ5OTUzLDQ5OTU0LDQ5OTU1LDQ5OTU4LDQ5OTU5LDQ5OTYyLDQ5OTYzLDQ5OTY0LDQ5OTY1LDQ5OTY2LDQ5OTY3LDQ5OTY4LDQ5OTY5LDQ5OTcwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5OTcxLDQ5OTcyLDQ5OTczLDQ5OTc0LDQ5OTc1LDQ5OTc2LDQ5OTc3LDQ5OTc4LDQ5OTc5LDQ5OTgwLDQ5OTgxLDQ5OTgyLDQ5OTgzLDQ5OTg0LDQ5OTg1LDQ5OTg2LDQ5OTg3LDQ5OTg4LDQ5OTkwLDQ5OTkxLDQ5OTkyLDQ5OTkzLDQ5OTk0LDQ5OTk1LDQ5OTk2LDQ5OTk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5OTk4LDQ5OTk5LDUwMDAwLDUwMDAxLDUwMDAyLDUwMDAzLDUwMDA0LDUwMDA1LDUwMDA2LDUwMDA3LDUwMDA4LDUwMDA5LDUwMDEwLDUwMDExLDUwMDEyLDUwMDEzLDUwMDE0LDUwMDE1LDUwMDE2LDUwMDE3LDUwMDE4LDUwMDE5LDUwMDIwLDUwMDIxLDUwMDIyLDUwMDIzLDUwMDI2LDUwMDI3LDUwMDI5LDUwMDMwLDUwMDMxLDUwMDMzLDUwMDM1LDUwMDM2LDUwMDM3LDUwMDM4LDUwMDM5LDUwMDQyLDUwMDQzLDUwMDQ2LDUwMDQ3LDUwMDQ4LDUwMDQ5LDUwMDUwLDUwMDUxLDUwMDUzLDUwMDU0LDUwMDU1LDUwMDU3LDUwMDU4LDUwMDU5LDUwMDYxLDUwMDYyLDUwMDYzLDUwMDY0LDUwMDY1LDUwMDY2LDUwMDY3LDUwMDY4LDUwMDY5LDUwMDcwLDUwMDcxLDUwMDcyLDUwMDczLDUwMDc0LDUwMDc1LDUwMDc2LDUwMDc3LDUwMDc4LDUwMDc5LDUwMDgwLDUwMDgxLDUwMDgyLDUwMDgzLDUwMDg0LDUwMDg1LDUwMDg2LDUwMDg3LDUwMDg4LDUwMDg5LDUwMDkwLDUwMDkxLDUwMDkyLDUwMDkzLDUwMDk0LDUwMDk1LDUwMDk2LDUwMDk3LDUwMDk4LDUwMDk5LDUwMTAwLDUwMTAxLDUwMTAyLDUwMTAzLDUwMTA0LDUwMTA1LDUwMTA2LDUwMTA3LDUwMTA4LDUwMTA5LDUwMTEwLDUwMTExLDUwMTEzLDUwMTE0LDUwMTE1LDUwMTE2LDUwMTE3LDUwMTE4LDUwMTE5LDUwMTIwLDUwMTIxLDUwMTIyLDUwMTIzLDUwMTI0LDUwMTI1LDUwMTI2LDUwMTI3LDUwMTI4LDUwMTI5LDUwMTMwLDUwMTMxLDUwMTMyLDUwMTMzLDUwMTM0LDUwMTM1LDUwMTM4LDUwMTM5LDUwMTQxLDUwMTQyLDUwMTQ1LDUwMTQ3LDUwMTQ4LDUwMTQ5LDUwMTUwLDUwMTUxLDUwMTU0LDUwMTU1LDUwMTU2LDUwMTU4LDUwMTU5LDUwMTYwLDUwMTYxLDUwMTYyLDUwMTYzLDUwMTY2LDUwMTY3LDUwMTY5LDUwMTcwLDUwMTcxLDUwMTcyLDUwMTczLDUwMTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwMTc1LDUwMTc2LDUwMTc3LDUwMTc4LDUwMTc5LDUwMTgwLDUwMTgxLDUwMTgyLDUwMTgzLDUwMTg1LDUwMTg2LDUwMTg3LDUwMTg4LDUwMTg5LDUwMTkwLDUwMTkxLDUwMTkzLDUwMTk0LDUwMTk1LDUwMTk2LDUwMTk3LDUwMTk4LDUwMTk5LDUwMjAwLDUwMjAxLDUwMjAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwMjAzLDUwMjA0LDUwMjA1LDUwMjA2LDUwMjA3LDUwMjA4LDUwMjA5LDUwMjEwLDUwMjExLDUwMjEzLDUwMjE0LDUwMjE1LDUwMjE2LDUwMjE3LDUwMjE4LDUwMjE5LDUwMjIxLDUwMjIyLDUwMjIzLDUwMjI1LDUwMjI2LDUwMjI3LDUwMjI5LDUwMjMwLDUwMjMxLDUwMjMyLDUwMjMzLDUwMjM0LDUwMjM1LDUwMjM4LDUwMjM5LDUwMjQwLDUwMjQxLDUwMjQyLDUwMjQzLDUwMjQ0LDUwMjQ1LDUwMjQ2LDUwMjQ3LDUwMjQ5LDUwMjUwLDUwMjUxLDUwMjUyLDUwMjUzLDUwMjU0LDUwMjU1LDUwMjU2LDUwMjU3LDUwMjU4LDUwMjU5LDUwMjYwLDUwMjYxLDUwMjYyLDUwMjYzLDUwMjY0LDUwMjY1LDUwMjY2LDUwMjY3LDUwMjY4LDUwMjY5LDUwMjcwLDUwMjcxLDUwMjcyLDUwMjczLDUwMjc0LDUwMjc1LDUwMjc4LDUwMjc5LDUwMjgxLDUwMjgyLDUwMjgzLDUwMjg1LDUwMjg2LDUwMjg3LDUwMjg4LDUwMjg5LDUwMjkwLDUwMjkxLDUwMjk0LDUwMjk1LDUwMjk2LDUwMjk4LDUwMjk5LDUwMzAwLDUwMzAxLDUwMzAyLDUwMzAzLDUwMzA1LDUwMzA2LDUwMzA3LDUwMzA4LDUwMzA5LDUwMzEwLDUwMzExLDUwMzEyLDUwMzEzLDUwMzE0LDUwMzE1LDUwMzE2LDUwMzE3LDUwMzE4LDUwMzE5LDUwMzIwLDUwMzIxLDUwMzIyLDUwMzIzLDUwMzI1LDUwMzI2LDUwMzI3LDUwMzI4LDUwMzI5LDUwMzMwLDUwMzMxLDUwMzMzLDUwMzM0LDUwMzM1LDUwMzM2LDUwMzM3LDUwMzM4LDUwMzM5LDUwMzQwLDUwMzQxLDUwMzQyLDUwMzQzLDUwMzQ0LDUwMzQ1LDUwMzQ2LDUwMzQ3LDUwMzQ4LDUwMzQ5LDUwMzUwLDUwMzUxLDUwMzUyLDUwMzUzLDUwMzU0LDUwMzU1LDUwMzU2LDUwMzU3LDUwMzU4LDUwMzU5LDUwMzYxLDUwMzYyLDUwMzYzLDUwMzY1LDUwMzY2LDUwMzY3LDUwMzY4LDUwMzY5LDUwMzcwLDUwMzcxLDUwMzcyLDUwMzczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwMzc0LDUwMzc1LDUwMzc2LDUwMzc3LDUwMzc4LDUwMzc5LDUwMzgwLDUwMzgxLDUwMzgyLDUwMzgzLDUwMzg0LDUwMzg1LDUwMzg2LDUwMzg3LDUwMzg4LDUwMzg5LDUwMzkwLDUwMzkxLDUwMzkyLDUwMzkzLDUwMzk0LDUwMzk1LDUwMzk2LDUwMzk3LDUwMzk4LDUwMzk5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwNDAwLDUwNDAxLDUwNDAyLDUwNDAzLDUwNDA0LDUwNDA1LDUwNDA2LDUwNDA3LDUwNDA4LDUwNDEwLDUwNDExLDUwNDEyLDUwNDEzLDUwNDE0LDUwNDE1LDUwNDE4LDUwNDE5LDUwNDIxLDUwNDIyLDUwNDIzLDUwNDI1LDUwNDI3LDUwNDI4LDUwNDI5LDUwNDMwLDUwNDM0LDUwNDM1LDUwNDM2LDUwNDM3LDUwNDM4LDUwNDM5LDUwNDQwLDUwNDQxLDUwNDQyLDUwNDQzLDUwNDQ1LDUwNDQ2LDUwNDQ3LDUwNDQ5LDUwNDUwLDUwNDUxLDUwNDUzLDUwNDU0LDUwNDU1LDUwNDU2LDUwNDU3LDUwNDU4LDUwNDU5LDUwNDYxLDUwNDYyLDUwNDYzLDUwNDY0LDUwNDY1LDUwNDY2LDUwNDY3LDUwNDY4LDUwNDY5LDUwNDcwLDUwNDcxLDUwNDc0LDUwNDc1LDUwNDc3LDUwNDc4LDUwNDc5LDUwNDgxLDUwNDgyLDUwNDgzLDUwNDg0LDUwNDg1LDUwNDg2LDUwNDg3LDUwNDkwLDUwNDkyLDUwNDk0LDUwNDk1LDUwNDk2LDUwNDk3LDUwNDk4LDUwNDk5LDUwNTAyLDUwNTAzLDUwNTA3LDUwNTExLDUwNTEyLDUwNTEzLDUwNTE0LDUwNTE4LDUwNTIyLDUwNTIzLDUwNTI0LDUwNTI3LDUwNTMwLDUwNTMxLDUwNTMzLDUwNTM0LDUwNTM1LDUwNTM3LDUwNTM4LDUwNTM5LDUwNTQwLDUwNTQxLDUwNTQyLDUwNTQzLDUwNTQ2LDUwNTUwLDUwNTUxLDUwNTUyLDUwNTUzLDUwNTU0LDUwNTU1LDUwNTU4LDUwNTU5LDUwNTYxLDUwNTYyLDUwNTYzLDUwNTY1LDUwNTY2LDUwNTY4LDUwNTY5LDUwNTcwLDUwNTcxLDUwNTc0LDUwNTc2LDUwNTc4LDUwNTc5LDUwNTgwLDUwNTgyLDUwNTg1LDUwNTg2LDUwNTg3LDUwNTg5LDUwNTkwLDUwNTkxLDUwNTkzLDUwNTk0LDUwNTk1LDUwNTk2LDUwNTk3LDUwNTk4LDUwNTk5LDUwNjAwLDUwNjAyLDUwNjAzLDUwNjA0LDUwNjA1LDUwNjA2LDUwNjA3LDUwNjA4LDUwNjA5LDUwNjEwLDUwNjExLDUwNjE0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwNjE1LDUwNjE4LDUwNjIzLDUwNjI0LDUwNjI1LDUwNjI2LDUwNjI3LDUwNjM1LDUwNjM3LDUwNjM5LDUwNjQyLDUwNjQzLDUwNjQ1LDUwNjQ2LDUwNjQ3LDUwNjQ5LDUwNjUwLDUwNjUxLDUwNjUyLDUwNjUzLDUwNjU0LDUwNjU1LDUwNjU4LDUwNjYwLDUwNjYyLDUwNjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwNjY0LDUwNjY1LDUwNjY2LDUwNjY3LDUwNjcxLDUwNjczLDUwNjc0LDUwNjc1LDUwNjc3LDUwNjgwLDUwNjgxLDUwNjgyLDUwNjgzLDUwNjkwLDUwNjkxLDUwNjkyLDUwNjk3LDUwNjk4LDUwNjk5LDUwNzAxLDUwNzAyLDUwNzAzLDUwNzA1LDUwNzA2LDUwNzA3LDUwNzA4LDUwNzA5LDUwNzEwLDUwNzExLDUwNzE0LDUwNzE3LDUwNzE4LDUwNzE5LDUwNzIwLDUwNzIxLDUwNzIyLDUwNzIzLDUwNzI2LDUwNzI3LDUwNzI5LDUwNzMwLDUwNzMxLDUwNzM1LDUwNzM3LDUwNzM4LDUwNzQyLDUwNzQ0LDUwNzQ2LDUwNzQ4LDUwNzQ5LDUwNzUwLDUwNzUxLDUwNzU0LDUwNzU1LDUwNzU3LDUwNzU4LDUwNzU5LDUwNzYxLDUwNzYyLDUwNzYzLDUwNzY0LDUwNzY1LDUwNzY2LDUwNzY3LDUwNzcwLDUwNzc0LDUwNzc1LDUwNzc2LDUwNzc3LDUwNzc4LDUwNzc5LDUwNzgyLDUwNzgzLDUwNzg1LDUwNzg2LDUwNzg3LDUwNzg4LDUwNzg5LDUwNzkwLDUwNzkxLDUwNzkyLDUwNzkzLDUwNzk0LDUwNzk1LDUwNzk3LDUwNzk4LDUwODAwLDUwODAyLDUwODAzLDUwODA0LDUwODA1LDUwODA2LDUwODA3LDUwODEwLDUwODExLDUwODEzLDUwODE0LDUwODE1LDUwODE3LDUwODE4LDUwODE5LDUwODIwLDUwODIxLDUwODIyLDUwODIzLDUwODI2LDUwODI4LDUwODMwLDUwODMxLDUwODMyLDUwODMzLDUwODM0LDUwODM1LDUwODM4LDUwODM5LDUwODQxLDUwODQyLDUwODQzLDUwODQ1LDUwODQ2LDUwODQ3LDUwODQ4LDUwODQ5LDUwODUwLDUwODUxLDUwODU0LDUwODU2LDUwODU4LDUwODU5LDUwODYwLDUwODYxLDUwODYyLDUwODYzLDUwODY2LDUwODY3LDUwODY5LDUwODcwLDUwODcxLDUwODc1LDUwODc2LDUwODc3LDUwODc4LDUwODc5LDUwODgyLDUwODg0LDUwODg2LDUwODg3LDUwODg4LDUwODg5LDUwODkwLDUwODkxLDUwODk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwODk1LDUwODk3LDUwODk4LDUwODk5LDUwOTAxLDUwOTAyLDUwOTAzLDUwOTA0LDUwOTA1LDUwOTA2LDUwOTA3LDUwOTEwLDUwOTExLDUwOTE0LDUwOTE1LDUwOTE2LDUwOTE3LDUwOTE4LDUwOTE5LDUwOTIyLDUwOTIzLDUwOTI1LDUwOTI2LDUwOTI3LDUwOTI5LDUwOTMwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwOTMxLDUwOTMyLDUwOTMzLDUwOTM0LDUwOTM1LDUwOTM4LDUwOTM5LDUwOTQwLDUwOTQyLDUwOTQzLDUwOTQ0LDUwOTQ1LDUwOTQ2LDUwOTQ3LDUwOTUwLDUwOTUxLDUwOTUzLDUwOTU0LDUwOTU1LDUwOTU3LDUwOTU4LDUwOTU5LDUwOTYwLDUwOTYxLDUwOTYyLDUwOTYzLDUwOTY2LDUwOTY4LDUwOTcwLDUwOTcxLDUwOTcyLDUwOTczLDUwOTc0LDUwOTc1LDUwOTc4LDUwOTc5LDUwOTgxLDUwOTgyLDUwOTgzLDUwOTg1LDUwOTg2LDUwOTg3LDUwOTg4LDUwOTg5LDUwOTkwLDUwOTkxLDUwOTk0LDUwOTk2LDUwOTk4LDUxMDAwLDUxMDAxLDUxMDAyLDUxMDAzLDUxMDA2LDUxMDA3LDUxMDA5LDUxMDEwLDUxMDExLDUxMDEzLDUxMDE0LDUxMDE1LDUxMDE2LDUxMDE3LDUxMDE5LDUxMDIyLDUxMDI0LDUxMDMzLDUxMDM0LDUxMDM1LDUxMDM3LDUxMDM4LDUxMDM5LDUxMDQxLDUxMDQyLDUxMDQzLDUxMDQ0LDUxMDQ1LDUxMDQ2LDUxMDQ3LDUxMDQ5LDUxMDUwLDUxMDUyLDUxMDUzLDUxMDU0LDUxMDU1LDUxMDU2LDUxMDU3LDUxMDU4LDUxMDU5LDUxMDYyLDUxMDYzLDUxMDY1LDUxMDY2LDUxMDY3LDUxMDcxLDUxMDcyLDUxMDczLDUxMDc0LDUxMDc4LDUxMDgzLDUxMDg0LDUxMDg1LDUxMDg3LDUxMDkwLDUxMDkxLDUxMDkzLDUxMDk3LDUxMDk5LDUxMTAwLDUxMTAxLDUxMTAyLDUxMTAzLDUxMTA2LDUxMTExLDUxMTEyLDUxMTEzLDUxMTE0LDUxMTE1LDUxMTE4LDUxMTE5LDUxMTIxLDUxMTIyLDUxMTIzLDUxMTI1LDUxMTI2LDUxMTI3LDUxMTI4LDUxMTI5LDUxMTMwLDUxMTMxLDUxMTM0LDUxMTM4LDUxMTM5LDUxMTQwLDUxMTQxLDUxMTQyLDUxMTQzLDUxMTQ2LDUxMTQ3LDUxMTQ5LDUxMTUxLDUxMTUzLDUxMTU0LDUxMTU1LDUxMTU2LDUxMTU3LDUxMTU4LDUxMTU5LDUxMTYxLDUxMTYyLDUxMTYzLDUxMTY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxMTY2LDUxMTY3LDUxMTY4LDUxMTY5LDUxMTcwLDUxMTcxLDUxMTczLDUxMTc0LDUxMTc1LDUxMTc3LDUxMTc4LDUxMTc5LDUxMTgxLDUxMTgyLDUxMTgzLDUxMTg0LDUxMTg1LDUxMTg2LDUxMTg3LDUxMTg4LDUxMTg5LDUxMTkwLDUxMTkxLDUxMTkyLDUxMTkzLDUxMTk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxMTk1LDUxMTk2LDUxMTk3LDUxMTk4LDUxMTk5LDUxMjAyLDUxMjAzLDUxMjA1LDUxMjA2LDUxMjA3LDUxMjA5LDUxMjExLDUxMjEyLDUxMjEzLDUxMjE0LDUxMjE1LDUxMjE4LDUxMjIwLDUxMjIzLDUxMjI0LDUxMjI1LDUxMjI2LDUxMjI3LDUxMjMwLDUxMjMxLDUxMjMzLDUxMjM0LDUxMjM1LDUxMjM3LDUxMjM4LDUxMjM5LDUxMjQwLDUxMjQxLDUxMjQyLDUxMjQzLDUxMjQ2LDUxMjQ4LDUxMjUwLDUxMjUxLDUxMjUyLDUxMjUzLDUxMjU0LDUxMjU1LDUxMjU3LDUxMjU4LDUxMjU5LDUxMjYxLDUxMjYyLDUxMjYzLDUxMjY1LDUxMjY2LDUxMjY3LDUxMjY4LDUxMjY5LDUxMjcwLDUxMjcxLDUxMjc0LDUxMjc1LDUxMjc4LDUxMjc5LDUxMjgwLDUxMjgxLDUxMjgyLDUxMjgzLDUxMjg1LDUxMjg2LDUxMjg3LDUxMjg4LDUxMjg5LDUxMjkwLDUxMjkxLDUxMjkyLDUxMjkzLDUxMjk0LDUxMjk1LDUxMjk2LDUxMjk3LDUxMjk4LDUxMjk5LDUxMzAwLDUxMzAxLDUxMzAyLDUxMzAzLDUxMzA0LDUxMzA1LDUxMzA2LDUxMzA3LDUxMzA4LDUxMzA5LDUxMzEwLDUxMzExLDUxMzE0LDUxMzE1LDUxMzE3LDUxMzE4LDUxMzE5LDUxMzIxLDUxMzIzLDUxMzI0LDUxMzI1LDUxMzI2LDUxMzI3LDUxMzMwLDUxMzMyLDUxMzM2LDUxMzM3LDUxMzM4LDUxMzQyLDUxMzQzLDUxMzQ0LDUxMzQ1LDUxMzQ2LDUxMzQ3LDUxMzQ5LDUxMzUwLDUxMzUxLDUxMzUyLDUxMzUzLDUxMzU0LDUxMzU1LDUxMzU2LDUxMzU4LDUxMzYwLDUxMzYyLDUxMzYzLDUxMzY0LDUxMzY1LDUxMzY2LDUxMzY3LDUxMzY5LDUxMzcwLDUxMzcxLDUxMzcyLDUxMzczLDUxMzc0LDUxMzc1LDUxMzc2LDUxMzc3LDUxMzc4LDUxMzc5LDUxMzgwLDUxMzgxLDUxMzgyLDUxMzgzLDUxMzg0LDUxMzg1LDUxMzg2LDUxMzg3LDUxMzkwLDUxMzkxLDUxMzkyLDUxMzkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxMzk0LDUxMzk1LDUxMzk3LDUxMzk4LDUxMzk5LDUxNDAxLDUxNDAyLDUxNDAzLDUxNDA1LDUxNDA2LDUxNDA3LDUxNDA4LDUxNDA5LDUxNDEwLDUxNDExLDUxNDE0LDUxNDE2LDUxNDE4LDUxNDE5LDUxNDIwLDUxNDIxLDUxNDIyLDUxNDIzLDUxNDI2LDUxNDI3LDUxNDI5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNDMwLDUxNDMxLDUxNDMyLDUxNDMzLDUxNDM0LDUxNDM1LDUxNDM2LDUxNDM3LDUxNDM4LDUxNDM5LDUxNDQwLDUxNDQxLDUxNDQyLDUxNDQzLDUxNDQ0LDUxNDQ2LDUxNDQ3LDUxNDQ4LDUxNDQ5LDUxNDUwLDUxNDUxLDUxNDU0LDUxNDU1LDUxNDU3LDUxNDU4LDUxNDU5LDUxNDYzLDUxNDY0LDUxNDY1LDUxNDY2LDUxNDY3LDUxNDcwLDEyMjg4LDEyMjg5LDEyMjkwLDE4Myw4MjI5LDgyMzAsMTY4LDEyMjkxLDE3Myw4MjEzLDg3NDEsNjUzNDAsODc2NCw4MjE2LDgyMTcsODIyMCw4MjIxLDEyMzA4LDEyMzA5LDEyMjk2LDEyMjk3LDEyMjk4LDEyMjk5LDEyMzAwLDEyMzAxLDEyMzAyLDEyMzAzLDEyMzA0LDEyMzA1LDE3NywyMTUsMjQ3LDg4MDAsODgwNCw4ODA1LDg3MzQsODc1NiwxNzYsODI0Miw4MjQzLDg0NTEsODQ5MSw2NTUwNCw2NTUwNSw2NTUwOSw5Nzk0LDk3OTIsODczNiw4ODY5LDg5NzgsODcwNiw4NzExLDg4MDEsODc4NiwxNjcsODI1MSw5NzM0LDk3MzMsOTY3NSw5Njc5LDk2NzgsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjUxLDk2NTAsOTY2MSw5NjYwLDg1OTQsODU5Miw4NTkzLDg1OTUsODU5NiwxMjMwNyw4ODEwLDg4MTEsODczMCw4NzY1LDg3MzMsODc1Nyw4NzQ3LDg3NDgsODcxMiw4NzE1LDg4MzgsODgzOSw4ODM0LDg4MzUsODc0Niw4NzQ1LDg3NDMsODc0NCw2NTUwNiw1MTQ3Miw1MTQ3NCw1MTQ3NSw1MTQ3Niw1MTQ3Nyw1MTQ3OCw1MTQ3OSw1MTQ4MSw1MTQ4Miw1MTQ4Myw1MTQ4NCw1MTQ4NSw1MTQ4Niw1MTQ4Nyw1MTQ4OCw1MTQ4OSw1MTQ5MCw1MTQ5MSw1MTQ5Miw1MTQ5Myw1MTQ5NCw1MTQ5NSw1MTQ5Niw1MTQ5Nyw1MTQ5OCw1MTQ5OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTUwMSw1MTUwMiw1MTUwMyw1MTUwNCw1MTUwNSw1MTUwNiw1MTUwNyw1MTUwOSw1MTUxMCw1MTUxMSw1MTUxMiw1MTUxMyw1MTUxNCw1MTUxNSw1MTUxNiw1MTUxNyw1MTUxOCw1MTUxOSw1MTUyMCw1MTUyMSw1MTUyMiw1MTUyMyw1MTUyNCw1MTUyNSw1MTUyNiw1MTUyNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTUyOCw1MTUyOSw1MTUzMCw1MTUzMSw1MTUzMiw1MTUzMyw1MTUzNCw1MTUzNSw1MTUzOCw1MTUzOSw1MTU0MSw1MTU0Miw1MTU0Myw1MTU0NSw1MTU0Niw1MTU0Nyw1MTU0OCw1MTU0OSw1MTU1MCw1MTU1MSw1MTU1NCw1MTU1Niw1MTU1Nyw1MTU1OCw1MTU1OSw1MTU2MCw1MTU2MSw1MTU2Miw1MTU2Myw1MTU2NSw1MTU2Niw1MTU2Nyw4NjU4LDg2NjAsODcwNCw4NzA3LDE4MCw2NTM3NCw3MTEsNzI4LDczMyw3MzAsNzI5LDE4NCw3MzEsMTYxLDE5MSw3MjAsODc1MCw4NzIxLDg3MTksMTY0LDg0NTcsODI0MCw5NjY1LDk2NjQsOTY1NSw5NjU0LDk4MjgsOTgyNCw5ODI1LDk4MjksOTgzMSw5ODI3LDg4NTcsOTY3Miw5NjM1LDk2ODAsOTY4MSw5NjE4LDk2MzYsOTYzNyw5NjQwLDk2MzksOTYzOCw5NjQxLDk4MzIsOTc0Myw5NzQyLDk3NTYsOTc1OCwxODIsODIyNCw4MjI1LDg1OTcsODU5OSw4NjAxLDg1OTgsODYwMCw5ODM3LDk4MzMsOTgzNCw5ODM2LDEyOTI3LDEyODI4LDg0NzAsMTMyNTUsODQ4MiwxMzI1MCwxMzI3Miw4NDgxLDgzNjQsMTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTU2OSw1MTU3MCw1MTU3MSw1MTU3Myw1MTU3NCw1MTU3NSw1MTU3Niw1MTU3Nyw1MTU3OCw1MTU3OSw1MTU4MSw1MTU4Miw1MTU4Myw1MTU4NCw1MTU4NSw1MTU4Niw1MTU4Nyw1MTU4OCw1MTU4OSw1MTU5MCw1MTU5MSw1MTU5NCw1MTU5NSw1MTU5Nyw1MTU5OCw1MTU5OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTYwMSw1MTYwMiw1MTYwMyw1MTYwNCw1MTYwNSw1MTYwNiw1MTYwNyw1MTYxMCw1MTYxMiw1MTYxNCw1MTYxNSw1MTYxNiw1MTYxNyw1MTYxOCw1MTYxOSw1MTYyMCw1MTYyMSw1MTYyMiw1MTYyMyw1MTYyNCw1MTYyNSw1MTYyNiw1MTYyNyw1MTYyOCw1MTYyOSw1MTYzMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTYzMSw1MTYzMiw1MTYzMyw1MTYzNCw1MTYzNSw1MTYzNiw1MTYzNyw1MTYzOCw1MTYzOSw1MTY0MCw1MTY0MSw1MTY0Miw1MTY0Myw1MTY0NCw1MTY0NSw1MTY0Niw1MTY0Nyw1MTY1MCw1MTY1MSw1MTY1Myw1MTY1NCw1MTY1Nyw1MTY1OSw1MTY2MCw1MTY2MSw1MTY2Miw1MTY2Myw1MTY2Niw1MTY2OCw1MTY3MSw1MTY3Miw1MTY3NSw2NTI4MSw2NTI4Miw2NTI4Myw2NTI4NCw2NTI4NSw2NTI4Niw2NTI4Nyw2NTI4OCw2NTI4OSw2NTI5MCw2NTI5MSw2NTI5Miw2NTI5Myw2NTI5NCw2NTI5NSw2NTI5Niw2NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2NTMwMSw2NTMwMiw2NTMwMyw2NTMwNCw2NTMwNSw2NTMwNiw2NTMwNyw2NTMwOCw2NTMwOSw2NTMxMCw2NTMxMSw2NTMxMiw2NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCw2NTMzOSw2NTUxMCw2NTM0MSw2NTM0Miw2NTM0Myw2NTM0NCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCw2NTM3MSw2NTM3Miw2NTM3Myw2NTUwNyw1MTY3OCw1MTY3OSw1MTY4MSw1MTY4Myw1MTY4NSw1MTY4Niw1MTY4OCw1MTY4OSw1MTY5MCw1MTY5MSw1MTY5NCw1MTY5OCw1MTY5OSw1MTcwMCw1MTcwMSw1MTcwMiw1MTcwMyw1MTcwNiw1MTcwNyw1MTcwOSw1MTcxMCw1MTcxMSw1MTcxMyw1MTcxNCw1MTcxNSw1MTcxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTcxNyw1MTcxOCw1MTcxOSw1MTcyMiw1MTcyNiw1MTcyNyw1MTcyOCw1MTcyOSw1MTczMCw1MTczMSw1MTczMyw1MTczNCw1MTczNSw1MTczNyw1MTczOCw1MTczOSw1MTc0MCw1MTc0MSw1MTc0Miw1MTc0Myw1MTc0NCw1MTc0NSw1MTc0Niw1MTc0Nyw1MTc0OCw1MTc0OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTc1MCw1MTc1MSw1MTc1Miw1MTc1NCw1MTc1NSw1MTc1Niw1MTc1Nyw1MTc1OCw1MTc1OSw1MTc2MCw1MTc2MSw1MTc2Miw1MTc2Myw1MTc2NCw1MTc2NSw1MTc2Niw1MTc2Nyw1MTc2OCw1MTc2OSw1MTc3MCw1MTc3MSw1MTc3Miw1MTc3Myw1MTc3NCw1MTc3NSw1MTc3Niw1MTc3Nyw1MTc3OCw1MTc3OSw1MTc4MCw1MTc4MSw1MTc4MiwxMjU5MywxMjU5NCwxMjU5NSwxMjU5NiwxMjU5NywxMjU5OCwxMjU5OSwxMjYwMCwxMjYwMSwxMjYwMiwxMjYwMywxMjYwNCwxMjYwNSwxMjYwNiwxMjYwNywxMjYwOCwxMjYwOSwxMjYxMCwxMjYxMSwxMjYxMiwxMjYxMywxMjYxNCwxMjYxNSwxMjYxNiwxMjYxNywxMjYxOCwxMjYxOSwxMjYyMCwxMjYyMSwxMjYyMiwxMjYyMywxMjYyNCwxMjYyNSwxMjYyNiwxMjYyNywxMjYyOCwxMjYyOSwxMjYzMCwxMjYzMSwxMjYzMiwxMjYzMywxMjYzNCwxMjYzNSwxMjYzNiwxMjYzNywxMjYzOCwxMjYzOSwxMjY0MCwxMjY0MSwxMjY0MiwxMjY0MywxMjY0NCwxMjY0NSwxMjY0NiwxMjY0NywxMjY0OCwxMjY0OSwxMjY1MCwxMjY1MSwxMjY1MiwxMjY1MywxMjY1NCwxMjY1NSwxMjY1NiwxMjY1NywxMjY1OCwxMjY1OSwxMjY2MCwxMjY2MSwxMjY2MiwxMjY2MywxMjY2NCwxMjY2NSwxMjY2NiwxMjY2NywxMjY2OCwxMjY2OSwxMjY3MCwxMjY3MSwxMjY3MiwxMjY3MywxMjY3NCwxMjY3NSwxMjY3NiwxMjY3NywxMjY3OCwxMjY3OSwxMjY4MCwxMjY4MSwxMjY4MiwxMjY4MywxMjY4NCwxMjY4NSwxMjY4Niw1MTc4Myw1MTc4NCw1MTc4NSw1MTc4Niw1MTc4Nyw1MTc5MCw1MTc5MSw1MTc5Myw1MTc5NCw1MTc5NSw1MTc5Nyw1MTc5OCw1MTc5OSw1MTgwMCw1MTgwMSw1MTgwMiw1MTgwMyw1MTgwNiw1MTgxMCw1MTgxMSw1MTgxMiw1MTgxMyw1MTgxNCw1MTgxNSw1MTgxNyw1MTgxOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTgxOSw1MTgyMCw1MTgyMSw1MTgyMiw1MTgyMyw1MTgyNCw1MTgyNSw1MTgyNiw1MTgyNyw1MTgyOCw1MTgyOSw1MTgzMCw1MTgzMSw1MTgzMiw1MTgzMyw1MTgzNCw1MTgzNSw1MTgzNiw1MTgzOCw1MTgzOSw1MTg0MCw1MTg0MSw1MTg0Miw1MTg0Myw1MTg0NSw1MTg0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTg0Nyw1MTg0OCw1MTg0OSw1MTg1MCw1MTg1MSw1MTg1Miw1MTg1Myw1MTg1NCw1MTg1NSw1MTg1Niw1MTg1Nyw1MTg1OCw1MTg1OSw1MTg2MCw1MTg2MSw1MTg2Miw1MTg2Myw1MTg2NSw1MTg2Niw1MTg2Nyw1MTg2OCw1MTg2OSw1MTg3MCw1MTg3MSw1MTg3Miw1MTg3Myw1MTg3NCw1MTg3NSw1MTg3Niw1MTg3Nyw1MTg3OCw1MTg3OSw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxODgwLDUxODgxLDUxODgyLDUxODgzLDUxODg0LDUxODg1LDUxODg2LDUxODg3LDUxODg4LDUxODg5LDUxODkwLDUxODkxLDUxODkyLDUxODkzLDUxODk0LDUxODk1LDUxODk2LDUxODk3LDUxODk4LDUxODk5LDUxOTAyLDUxOTAzLDUxOTA1LDUxOTA2LDUxOTA3LDUxOTA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxOTEwLDUxOTExLDUxOTEyLDUxOTEzLDUxOTE0LDUxOTE1LDUxOTE4LDUxOTIwLDUxOTIyLDUxOTI0LDUxOTI1LDUxOTI2LDUxOTI3LDUxOTMwLDUxOTMxLDUxOTMyLDUxOTMzLDUxOTM0LDUxOTM1LDUxOTM3LDUxOTM4LDUxOTM5LDUxOTQwLDUxOTQxLDUxOTQyLDUxOTQzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxOTQ0LDUxOTQ1LDUxOTQ2LDUxOTQ3LDUxOTQ5LDUxOTUwLDUxOTUxLDUxOTUyLDUxOTUzLDUxOTU0LDUxOTU1LDUxOTU3LDUxOTU4LDUxOTU5LDUxOTYwLDUxOTYxLDUxOTYyLDUxOTYzLDUxOTY0LDUxOTY1LDUxOTY2LDUxOTY3LDUxOTY4LDUxOTY5LDUxOTcwLDUxOTcxLDUxOTcyLDUxOTczLDUxOTc0LDUxOTc1LDUxOTc3LDUxOTc4LDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Niw5NDkyLDk1MDAsOTUxNiw5NTA4LDk1MjQsOTUzMiw5NDczLDk0NzUsOTQ4Nyw5NDkxLDk0OTksOTQ5NSw5NTA3LDk1MjMsOTUxNSw5NTMxLDk1NDcsOTUwNCw5NTE5LDk1MTIsOTUyNyw5NTM1LDk1MDEsOTUyMCw5NTA5LDk1MjgsOTUzOCw5NDkwLDk0ODksOTQ5OCw5NDk3LDk0OTQsOTQ5Myw5NDg2LDk0ODUsOTUwMiw5NTAzLDk1MDUsOTUwNiw5NTEwLDk1MTEsOTUxMyw5NTE0LDk1MTcsOTUxOCw5NTIxLDk1MjIsOTUyNSw5NTI2LDk1MjksOTUzMCw5NTMzLDk1MzQsOTUzNiw5NTM3LDk1MzksOTU0MCw5NTQxLDk1NDIsOTU0Myw5NTQ0LDk1NDUsOTU0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE5NzksNTE5ODAsNTE5ODEsNTE5ODIsNTE5ODMsNTE5ODUsNTE5ODYsNTE5ODcsNTE5ODksNTE5OTAsNTE5OTEsNTE5OTMsNTE5OTQsNTE5OTUsNTE5OTYsNTE5OTcsNTE5OTgsNTE5OTksNTIwMDIsNTIwMDMsNTIwMDQsNTIwMDUsNTIwMDYsNTIwMDcsNTIwMDgsNTIwMDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIwMTAsNTIwMTEsNTIwMTIsNTIwMTMsNTIwMTQsNTIwMTUsNTIwMTYsNTIwMTcsNTIwMTgsNTIwMTksNTIwMjAsNTIwMjEsNTIwMjIsNTIwMjMsNTIwMjQsNTIwMjUsNTIwMjYsNTIwMjcsNTIwMjgsNTIwMjksNTIwMzAsNTIwMzEsNTIwMzIsNTIwMzQsNTIwMzUsNTIwMzYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIwMzcsNTIwMzgsNTIwMzksNTIwNDIsNTIwNDMsNTIwNDUsNTIwNDYsNTIwNDcsNTIwNDksNTIwNTAsNTIwNTEsNTIwNTIsNTIwNTMsNTIwNTQsNTIwNTUsNTIwNTgsNTIwNTksNTIwNjAsNTIwNjIsNTIwNjMsNTIwNjQsNTIwNjUsNTIwNjYsNTIwNjcsNTIwNjksNTIwNzAsNTIwNzEsNTIwNzIsNTIwNzMsNTIwNzQsNTIwNzUsNTIwNzYsMTMyMDUsMTMyMDYsMTMyMDcsODQ2NywxMzIwOCwxMzI1MiwxMzIxOSwxMzIyMCwxMzIyMSwxMzIyMiwxMzIwOSwxMzIxMCwxMzIxMSwxMzIxMiwxMzIxMywxMzIxNCwxMzIxNSwxMzIxNiwxMzIxNywxMzIxOCwxMzI1OCwxMzE5NywxMzE5OCwxMzE5OSwxMzI2MywxMzE5MiwxMzE5MywxMzI1NiwxMzIyMywxMzIyNCwxMzIzMiwxMzIzMywxMzIzNCwxMzIzNSwxMzIzNiwxMzIzNywxMzIzOCwxMzIzOSwxMzI0MCwxMzI0MSwxMzE4NCwxMzE4NSwxMzE4NiwxMzE4NywxMzE4OCwxMzI0MiwxMzI0MywxMzI0NCwxMzI0NSwxMzI0NiwxMzI0NywxMzIwMCwxMzIwMSwxMzIwMiwxMzIwMywxMzIwNCw4NDg2LDEzMjQ4LDEzMjQ5LDEzMTk0LDEzMTk1LDEzMTk2LDEzMjcwLDEzMjUzLDEzMjI5LDEzMjMwLDEzMjMxLDEzMjc1LDEzMjI1LDEzMjI2LDEzMjI3LDEzMjI4LDEzMjc3LDEzMjY0LDEzMjY3LDEzMjUxLDEzMjU3LDEzMjc2LDEzMjU0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMDc3LDUyMDc4LDUyMDc5LDUyMDgwLDUyMDgxLDUyMDgyLDUyMDgzLDUyMDg0LDUyMDg1LDUyMDg2LDUyMDg3LDUyMDkwLDUyMDkxLDUyMDkyLDUyMDkzLDUyMDk0LDUyMDk1LDUyMDk2LDUyMDk3LDUyMDk4LDUyMDk5LDUyMTAwLDUyMTAxLDUyMTAyLDUyMTAzLDUyMTA0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMTA1LDUyMTA2LDUyMTA3LDUyMTA4LDUyMTA5LDUyMTEwLDUyMTExLDUyMTEyLDUyMTEzLDUyMTE0LDUyMTE1LDUyMTE2LDUyMTE3LDUyMTE4LDUyMTE5LDUyMTIwLDUyMTIxLDUyMTIyLDUyMTIzLDUyMTI1LDUyMTI2LDUyMTI3LDUyMTI4LDUyMTI5LDUyMTMwLDUyMTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMTMyLDUyMTMzLDUyMTM0LDUyMTM1LDUyMTM2LDUyMTM3LDUyMTM4LDUyMTM5LDUyMTQwLDUyMTQxLDUyMTQyLDUyMTQzLDUyMTQ0LDUyMTQ1LDUyMTQ2LDUyMTQ3LDUyMTQ4LDUyMTQ5LDUyMTUwLDUyMTUxLDUyMTUzLDUyMTU0LDUyMTU1LDUyMTU2LDUyMTU3LDUyMTU4LDUyMTU5LDUyMTYwLDUyMTYxLDUyMTYyLDUyMTYzLDUyMTY0LDE5OCwyMDgsMTcwLDI5NCxudWxsLDMwNixudWxsLDMxOSwzMjEsMjE2LDMzOCwxODYsMjIyLDM1OCwzMzAsbnVsbCwxMjg5NiwxMjg5NywxMjg5OCwxMjg5OSwxMjkwMCwxMjkwMSwxMjkwMiwxMjkwMywxMjkwNCwxMjkwNSwxMjkwNiwxMjkwNywxMjkwOCwxMjkwOSwxMjkxMCwxMjkxMSwxMjkxMiwxMjkxMywxMjkxNCwxMjkxNSwxMjkxNiwxMjkxNywxMjkxOCwxMjkxOSwxMjkyMCwxMjkyMSwxMjkyMiwxMjkyMyw5NDI0LDk0MjUsOTQyNiw5NDI3LDk0MjgsOTQyOSw5NDMwLDk0MzEsOTQzMiw5NDMzLDk0MzQsOTQzNSw5NDM2LDk0MzcsOTQzOCw5NDM5LDk0NDAsOTQ0MSw5NDQyLDk0NDMsOTQ0NCw5NDQ1LDk0NDYsOTQ0Nyw5NDQ4LDk0NDksOTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkzMjAsOTMyMSw5MzIyLDkzMjMsOTMyNCw5MzI1LDkzMjYsMTg5LDg1MzEsODUzMiwxODgsMTkwLDg1MzksODU0MCw4NTQxLDg1NDIsNTIxNjUsNTIxNjYsNTIxNjcsNTIxNjgsNTIxNjksNTIxNzAsNTIxNzEsNTIxNzIsNTIxNzMsNTIxNzQsNTIxNzUsNTIxNzYsNTIxNzcsNTIxNzgsNTIxNzksNTIxODEsNTIxODIsNTIxODMsNTIxODQsNTIxODUsNTIxODYsNTIxODcsNTIxODgsNTIxODksNTIxOTAsNTIxOTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIxOTIsNTIxOTMsNTIxOTQsNTIxOTUsNTIxOTcsNTIxOTgsNTIyMDAsNTIyMDIsNTIyMDMsNTIyMDQsNTIyMDUsNTIyMDYsNTIyMDcsNTIyMDgsNTIyMDksNTIyMTAsNTIyMTEsNTIyMTIsNTIyMTMsNTIyMTQsNTIyMTUsNTIyMTYsNTIyMTcsNTIyMTgsNTIyMTksNTIyMjAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIyMjEsNTIyMjIsNTIyMjMsNTIyMjQsNTIyMjUsNTIyMjYsNTIyMjcsNTIyMjgsNTIyMjksNTIyMzAsNTIyMzEsNTIyMzIsNTIyMzMsNTIyMzQsNTIyMzUsNTIyMzgsNTIyMzksNTIyNDEsNTIyNDIsNTIyNDMsNTIyNDUsNTIyNDYsNTIyNDcsNTIyNDgsNTIyNDksNTIyNTAsNTIyNTEsNTIyNTQsNTIyNTUsNTIyNTYsNTIyNTksNTIyNjAsMjMwLDI3MywyNDAsMjk1LDMwNSwzMDcsMzEyLDMyMCwzMjIsMjQ4LDMzOSwyMjMsMjU0LDM1OSwzMzEsMzI5LDEyODAwLDEyODAxLDEyODAyLDEyODAzLDEyODA0LDEyODA1LDEyODA2LDEyODA3LDEyODA4LDEyODA5LDEyODEwLDEyODExLDEyODEyLDEyODEzLDEyODE0LDEyODE1LDEyODE2LDEyODE3LDEyODE4LDEyODE5LDEyODIwLDEyODIxLDEyODIyLDEyODIzLDEyODI0LDEyODI1LDEyODI2LDEyODI3LDkzNzIsOTM3Myw5Mzc0LDkzNzUsOTM3Niw5Mzc3LDkzNzgsOTM3OSw5MzgwLDkzODEsOTM4Miw5MzgzLDkzODQsOTM4NSw5Mzg2LDkzODcsOTM4OCw5Mzg5LDkzOTAsOTM5MSw5MzkyLDkzOTMsOTM5NCw5Mzk1LDkzOTYsOTM5Nyw5MzMyLDkzMzMsOTMzNCw5MzM1LDkzMzYsOTMzNyw5MzM4LDkzMzksOTM0MCw5MzQxLDkzNDIsOTM0Myw5MzQ0LDkzNDUsOTM0NiwxODUsMTc4LDE3OSw4MzA4LDgzMTksODMyMSw4MzIyLDgzMjMsODMyNCw1MjI2MSw1MjI2Miw1MjI2Niw1MjI2Nyw1MjI2OSw1MjI3MSw1MjI3Myw1MjI3NCw1MjI3NSw1MjI3Niw1MjI3Nyw1MjI3OCw1MjI3OSw1MjI4Miw1MjI4Nyw1MjI4OCw1MjI4OSw1MjI5MCw1MjI5MSw1MjI5NCw1MjI5NSw1MjI5Nyw1MjI5OCw1MjI5OSw1MjMwMSw1MjMwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjMwMyw1MjMwNCw1MjMwNSw1MjMwNiw1MjMwNyw1MjMxMCw1MjMxNCw1MjMxNSw1MjMxNiw1MjMxNyw1MjMxOCw1MjMxOSw1MjMyMSw1MjMyMiw1MjMyMyw1MjMyNSw1MjMyNyw1MjMyOSw1MjMzMCw1MjMzMSw1MjMzMiw1MjMzMyw1MjMzNCw1MjMzNSw1MjMzNyw1MjMzOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjMzOSw1MjM0MCw1MjM0Miw1MjM0Myw1MjM0NCw1MjM0NSw1MjM0Niw1MjM0Nyw1MjM0OCw1MjM0OSw1MjM1MCw1MjM1MSw1MjM1Miw1MjM1Myw1MjM1NCw1MjM1NSw1MjM1Niw1MjM1Nyw1MjM1OCw1MjM1OSw1MjM2MCw1MjM2MSw1MjM2Miw1MjM2Myw1MjM2NCw1MjM2NSw1MjM2Niw1MjM2Nyw1MjM2OCw1MjM2OSw1MjM3MCw1MjM3MSwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwxMjM2MCwxMjM2MSwxMjM2MiwxMjM2MywxMjM2NCwxMjM2NSwxMjM2NiwxMjM2NywxMjM2OCwxMjM2OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3MywxMjM3NCwxMjM3NSwxMjM3NiwxMjM3NywxMjM3OCwxMjM3OSwxMjM4MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4OCwxMjM4OSwxMjM5MCwxMjM5MSwxMjM5MiwxMjM5MywxMjM5NCwxMjM5NSwxMjM5NiwxMjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQwMSwxMjQwMiwxMjQwMywxMjQwNCwxMjQwNSwxMjQwNiwxMjQwNywxMjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwxMjQxNSwxMjQxNiwxMjQxNywxMjQxOCwxMjQxOSwxMjQyMCwxMjQyMSwxMjQyMiwxMjQyMywxMjQyNCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwxMjQzMCwxMjQzMSwxMjQzMiwxMjQzMywxMjQzNCwxMjQzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIzNzIsNTIzNzMsNTIzNzQsNTIzNzUsNTIzNzgsNTIzNzksNTIzODEsNTIzODIsNTIzODMsNTIzODUsNTIzODYsNTIzODcsNTIzODgsNTIzODksNTIzOTAsNTIzOTEsNTIzOTQsNTIzOTgsNTIzOTksNTI0MDAsNTI0MDEsNTI0MDIsNTI0MDMsNTI0MDYsNTI0MDcsNTI0MDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI0MTAsNTI0MTEsNTI0MTMsNTI0MTQsNTI0MTUsNTI0MTYsNTI0MTcsNTI0MTgsNTI0MTksNTI0MjIsNTI0MjQsNTI0MjYsNTI0MjcsNTI0MjgsNTI0MjksNTI0MzAsNTI0MzEsNTI0MzMsNTI0MzQsNTI0MzUsNTI0MzcsNTI0MzgsNTI0MzksNTI0NDAsNTI0NDEsNTI0NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI0NDMsNTI0NDQsNTI0NDUsNTI0NDYsNTI0NDcsNTI0NDgsNTI0NDksNTI0NTAsNTI0NTEsNTI0NTMsNTI0NTQsNTI0NTUsNTI0NTYsNTI0NTcsNTI0NTgsNTI0NTksNTI0NjEsNTI0NjIsNTI0NjMsNTI0NjUsNTI0NjYsNTI0NjcsNTI0NjgsNTI0NjksNTI0NzAsNTI0NzEsNTI0NzIsNTI0NzMsNTI0NzQsNTI0NzUsNTI0NzYsNTI0NzcsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNDc4LDUyNDc5LDUyNDgwLDUyNDgyLDUyNDgzLDUyNDg0LDUyNDg1LDUyNDg2LDUyNDg3LDUyNDkwLDUyNDkxLDUyNDkzLDUyNDk0LDUyNDk1LDUyNDk3LDUyNDk4LDUyNDk5LDUyNTAwLDUyNTAxLDUyNTAyLDUyNTAzLDUyNTA2LDUyNTA4LDUyNTEwLDUyNTExLDUyNTEyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNTEzLDUyNTE0LDUyNTE1LDUyNTE3LDUyNTE4LDUyNTE5LDUyNTIxLDUyNTIyLDUyNTIzLDUyNTI1LDUyNTI2LDUyNTI3LDUyNTI4LDUyNTI5LDUyNTMwLDUyNTMxLDUyNTMyLDUyNTMzLDUyNTM0LDUyNTM1LDUyNTM2LDUyNTM4LDUyNTM5LDUyNTQwLDUyNTQxLDUyNTQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNTQzLDUyNTQ0LDUyNTQ1LDUyNTQ2LDUyNTQ3LDUyNTQ4LDUyNTQ5LDUyNTUwLDUyNTUxLDUyNTUyLDUyNTUzLDUyNTU0LDUyNTU1LDUyNTU2LDUyNTU3LDUyNTU4LDUyNTU5LDUyNTYwLDUyNTYxLDUyNTYyLDUyNTYzLDUyNTY0LDUyNTY1LDUyNTY2LDUyNTY3LDUyNTY4LDUyNTY5LDUyNTcwLDUyNTcxLDUyNTczLDUyNTc0LDUyNTc1LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI1NzcsNTI1NzgsNTI1NzksNTI1ODEsNTI1ODIsNTI1ODMsNTI1ODQsNTI1ODUsNTI1ODYsNTI1ODcsNTI1OTAsNTI1OTIsNTI1OTQsNTI1OTUsNTI1OTYsNTI1OTcsNTI1OTgsNTI1OTksNTI2MDEsNTI2MDIsNTI2MDMsNTI2MDQsNTI2MDUsNTI2MDYsNTI2MDcsNTI2MDgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI2MDksNTI2MTAsNTI2MTEsNTI2MTIsNTI2MTMsNTI2MTQsNTI2MTUsNTI2MTcsNTI2MTgsNTI2MTksNTI2MjAsNTI2MjEsNTI2MjIsNTI2MjMsNTI2MjQsNTI2MjUsNTI2MjYsNTI2MjcsNTI2MzAsNTI2MzEsNTI2MzMsNTI2MzQsNTI2MzUsNTI2MzcsNTI2MzgsNTI2MzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI2NDAsNTI2NDEsNTI2NDIsNTI2NDMsNTI2NDYsNTI2NDgsNTI2NTAsNTI2NTEsNTI2NTIsNTI2NTMsNTI2NTQsNTI2NTUsNTI2NTcsNTI2NTgsNTI2NTksNTI2NjAsNTI2NjEsNTI2NjIsNTI2NjMsNTI2NjQsNTI2NjUsNTI2NjYsNTI2NjcsNTI2NjgsNTI2NjksNTI2NzAsNTI2NzEsNTI2NzIsNTI2NzMsNTI2NzQsNTI2NzUsNTI2NzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjY3OCw1MjY3OSw1MjY4MCw1MjY4MSw1MjY4Miw1MjY4Myw1MjY4NSw1MjY4Niw1MjY4Nyw1MjY4OSw1MjY5MCw1MjY5MSw1MjY5Miw1MjY5Myw1MjY5NCw1MjY5NSw1MjY5Niw1MjY5Nyw1MjY5OCw1MjY5OSw1MjcwMCw1MjcwMSw1MjcwMiw1MjcwMyw1MjcwNCw1MjcwNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjcwNiw1MjcwNyw1MjcwOCw1MjcwOSw1MjcxMCw1MjcxMSw1MjcxMyw1MjcxNCw1MjcxNSw1MjcxNyw1MjcxOCw1MjcxOSw1MjcyMSw1MjcyMiw1MjcyMyw1MjcyNCw1MjcyNSw1MjcyNiw1MjcyNyw1MjczMCw1MjczMiw1MjczNCw1MjczNSw1MjczNiw1MjczNyw1MjczOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjczOSw1Mjc0MSw1Mjc0Miw1Mjc0Myw1Mjc0NSw1Mjc0Niw1Mjc0Nyw1Mjc0OSw1Mjc1MCw1Mjc1MSw1Mjc1Miw1Mjc1Myw1Mjc1NCw1Mjc1NSw1Mjc1Nyw1Mjc1OCw1Mjc1OSw1Mjc2MCw1Mjc2Miw1Mjc2Myw1Mjc2NCw1Mjc2NSw1Mjc2Niw1Mjc2Nyw1Mjc3MCw1Mjc3MSw1Mjc3Myw1Mjc3NCw1Mjc3NSw1Mjc3Nyw1Mjc3OCw1Mjc3OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNzgwLDUyNzgxLDUyNzgyLDUyNzgzLDUyNzg2LDUyNzg4LDUyNzkwLDUyNzkxLDUyNzkyLDUyNzkzLDUyNzk0LDUyNzk1LDUyNzk2LDUyNzk3LDUyNzk4LDUyNzk5LDUyODAwLDUyODAxLDUyODAyLDUyODAzLDUyODA0LDUyODA1LDUyODA2LDUyODA3LDUyODA4LDUyODA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyODEwLDUyODExLDUyODEyLDUyODEzLDUyODE0LDUyODE1LDUyODE2LDUyODE3LDUyODE4LDUyODE5LDUyODIwLDUyODIxLDUyODIyLDUyODIzLDUyODI2LDUyODI3LDUyODI5LDUyODMwLDUyODM0LDUyODM1LDUyODM2LDUyODM3LDUyODM4LDUyODM5LDUyODQyLDUyODQ0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyODQ2LDUyODQ3LDUyODQ4LDUyODQ5LDUyODUwLDUyODUxLDUyODU0LDUyODU1LDUyODU3LDUyODU4LDUyODU5LDUyODYxLDUyODYyLDUyODYzLDUyODY0LDUyODY1LDUyODY2LDUyODY3LDUyODcwLDUyODcyLDUyODc0LDUyODc1LDUyODc2LDUyODc3LDUyODc4LDUyODc5LDUyODgyLDUyODgzLDUyODg1LDUyODg2LDUyODg3LDUyODg5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI4OTAsNTI4OTEsNTI4OTIsNTI4OTMsNTI4OTQsNTI4OTUsNTI4OTgsNTI5MDIsNTI5MDMsNTI5MDQsNTI5MDUsNTI5MDYsNTI5MDcsNTI5MTAsNTI5MTEsNTI5MTIsNTI5MTMsNTI5MTQsNTI5MTUsNTI5MTYsNTI5MTcsNTI5MTgsNTI5MTksNTI5MjAsNTI5MjEsNTI5MjIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI5MjMsNTI5MjQsNTI5MjUsNTI5MjYsNTI5MjcsNTI5MjgsNTI5MzAsNTI5MzEsNTI5MzIsNTI5MzMsNTI5MzQsNTI5MzUsNTI5MzYsNTI5MzcsNTI5MzgsNTI5MzksNTI5NDAsNTI5NDEsNTI5NDIsNTI5NDMsNTI5NDQsNTI5NDUsNTI5NDYsNTI5NDcsNTI5NDgsNTI5NDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI5NTAsNTI5NTEsNTI5NTIsNTI5NTMsNTI5NTQsNTI5NTUsNTI5NTYsNTI5NTcsNTI5NTgsNTI5NTksNTI5NjAsNTI5NjEsNTI5NjIsNTI5NjMsNTI5NjYsNTI5NjcsNTI5NjksNTI5NzAsNTI5NzMsNTI5NzQsNTI5NzUsNTI5NzYsNTI5NzcsNTI5NzgsNTI5NzksNTI5ODIsNTI5ODYsNTI5ODcsNTI5ODgsNTI5ODksNTI5OTAsNTI5OTEsNDQwMzIsNDQwMzMsNDQwMzYsNDQwMzksNDQwNDAsNDQwNDEsNDQwNDIsNDQwNDgsNDQwNDksNDQwNTAsNDQwNTEsNDQwNTIsNDQwNTMsNDQwNTQsNDQwNTUsNDQwNTcsNDQwNTgsNDQwNTksNDQwNjAsNDQwNjEsNDQwNjQsNDQwNjgsNDQwNzYsNDQwNzcsNDQwNzksNDQwODAsNDQwODEsNDQwODgsNDQwODksNDQwOTIsNDQwOTYsNDQxMDcsNDQxMDksNDQxMTYsNDQxMjAsNDQxMjQsNDQxNDQsNDQxNDUsNDQxNDgsNDQxNTEsNDQxNTIsNDQxNTQsNDQxNjAsNDQxNjEsNDQxNjMsNDQxNjQsNDQxNjUsNDQxNjYsNDQxNjksNDQxNzAsNDQxNzEsNDQxNzIsNDQxNzYsNDQxODAsNDQxODgsNDQxODksNDQxOTEsNDQxOTIsNDQxOTMsNDQyMDAsNDQyMDEsNDQyMDIsNDQyMDQsNDQyMDcsNDQyMDgsNDQyMTYsNDQyMTcsNDQyMTksNDQyMjAsNDQyMjEsNDQyMjUsNDQyMjgsNDQyMzIsNDQyMzYsNDQyNDUsNDQyNDcsNDQyNTYsNDQyNTcsNDQyNjAsNDQyNjMsNDQyNjQsNDQyNjYsNDQyNjgsNDQyNzEsNDQyNzIsNDQyNzMsNDQyNzUsNDQyNzcsNDQyNzgsNDQyODQsNDQyODUsNDQyODgsNDQyOTIsNDQyOTQsNTI5OTQsNTI5OTUsNTI5OTcsNTI5OTgsNTI5OTksNTMwMDEsNTMwMDIsNTMwMDMsNTMwMDQsNTMwMDUsNTMwMDYsNTMwMDcsNTMwMTAsNTMwMTIsNTMwMTQsNTMwMTUsNTMwMTYsNTMwMTcsNTMwMTgsNTMwMTksNTMwMjEsNTMwMjIsNTMwMjMsNTMwMjUsNTMwMjYsNTMwMjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMwMjksNTMwMzAsNTMwMzEsNTMwMzIsNTMwMzMsNTMwMzQsNTMwMzUsNTMwMzgsNTMwNDIsNTMwNDMsNTMwNDQsNTMwNDUsNTMwNDYsNTMwNDcsNTMwNDksNTMwNTAsNTMwNTEsNTMwNTIsNTMwNTMsNTMwNTQsNTMwNTUsNTMwNTYsNTMwNTcsNTMwNTgsNTMwNTksNTMwNjAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMwNjEsNTMwNjIsNTMwNjMsNTMwNjQsNTMwNjUsNTMwNjYsNTMwNjcsNTMwNjgsNTMwNjksNTMwNzAsNTMwNzEsNTMwNzIsNTMwNzMsNTMwNzQsNTMwNzUsNTMwNzgsNTMwNzksNTMwODEsNTMwODIsNTMwODMsNTMwODUsNTMwODYsNTMwODcsNTMwODgsNTMwODksNTMwOTAsNTMwOTEsNTMwOTQsNTMwOTYsNTMwOTgsNTMwOTksNTMxMDAsNDQzMDAsNDQzMDEsNDQzMDMsNDQzMDUsNDQzMTIsNDQzMTYsNDQzMjAsNDQzMjksNDQzMzIsNDQzMzMsNDQzNDAsNDQzNDEsNDQzNDQsNDQzNDgsNDQzNTYsNDQzNTcsNDQzNTksNDQzNjEsNDQzNjgsNDQzNzIsNDQzNzYsNDQzODUsNDQzODcsNDQzOTYsNDQzOTcsNDQ0MDAsNDQ0MDMsNDQ0MDQsNDQ0MDUsNDQ0MDYsNDQ0MTEsNDQ0MTIsNDQ0MTMsNDQ0MTUsNDQ0MTcsNDQ0MTgsNDQ0MjQsNDQ0MjUsNDQ0MjgsNDQ0MzIsNDQ0NDQsNDQ0NDUsNDQ0NTIsNDQ0NzEsNDQ0ODAsNDQ0ODEsNDQ0ODQsNDQ0ODgsNDQ0OTYsNDQ0OTcsNDQ0OTksNDQ1MDgsNDQ1MTIsNDQ1MTYsNDQ1MzYsNDQ1MzcsNDQ1NDAsNDQ1NDMsNDQ1NDQsNDQ1NDUsNDQ1NTIsNDQ1NTMsNDQ1NTUsNDQ1NTcsNDQ1NjQsNDQ1OTIsNDQ1OTMsNDQ1OTYsNDQ1OTksNDQ2MDAsNDQ2MDIsNDQ2MDgsNDQ2MDksNDQ2MTEsNDQ2MTMsNDQ2MTQsNDQ2MTgsNDQ2MjAsNDQ2MjEsNDQ2MjIsNDQ2MjQsNDQ2MjgsNDQ2MzAsNDQ2MzYsNDQ2MzcsNDQ2MzksNDQ2NDAsNDQ2NDEsNDQ2NDUsNDQ2NDgsNDQ2NDksNDQ2NTIsNDQ2NTYsNDQ2NjQsNTMxMDEsNTMxMDIsNTMxMDMsNTMxMDYsNTMxMDcsNTMxMDksNTMxMTAsNTMxMTEsNTMxMTMsNTMxMTQsNTMxMTUsNTMxMTYsNTMxMTcsNTMxMTgsNTMxMTksNTMxMjEsNTMxMjIsNTMxMjMsNTMxMjQsNTMxMjYsNTMxMjcsNTMxMjgsNTMxMjksNTMxMzAsNTMxMzEsNTMxMzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMxMzQsNTMxMzUsNTMxMzYsNTMxMzcsNTMxMzgsNTMxMzksNTMxNDAsNTMxNDEsNTMxNDIsNTMxNDMsNTMxNDQsNTMxNDUsNTMxNDYsNTMxNDcsNTMxNDgsNTMxNDksNTMxNTAsNTMxNTEsNTMxNTIsNTMxNTQsNTMxNTUsNTMxNTYsNTMxNTcsNTMxNTgsNTMxNTksNTMxNjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMxNjIsNTMxNjMsNTMxNjQsNTMxNjUsNTMxNjYsNTMxNjcsNTMxNjksNTMxNzAsNTMxNzEsNTMxNzIsNTMxNzMsNTMxNzQsNTMxNzUsNTMxNzYsNTMxNzcsNTMxNzgsNTMxNzksNTMxODAsNTMxODEsNTMxODIsNTMxODMsNTMxODQsNTMxODUsNTMxODYsNTMxODcsNTMxODksNTMxOTAsNTMxOTEsNTMxOTIsNTMxOTMsNTMxOTQsNTMxOTUsNDQ2NjUsNDQ2NjcsNDQ2NjgsNDQ2NjksNDQ2NzYsNDQ2NzcsNDQ2ODQsNDQ3MzIsNDQ3MzMsNDQ3MzQsNDQ3MzYsNDQ3NDAsNDQ3NDgsNDQ3NDksNDQ3NTEsNDQ3NTIsNDQ3NTMsNDQ3NjAsNDQ3NjEsNDQ3NjQsNDQ3NzYsNDQ3NzksNDQ3ODEsNDQ3ODgsNDQ3OTIsNDQ3OTYsNDQ4MDcsNDQ4MDgsNDQ4MTMsNDQ4MTYsNDQ4NDQsNDQ4NDUsNDQ4NDgsNDQ4NTAsNDQ4NTIsNDQ4NjAsNDQ4NjEsNDQ4NjMsNDQ4NjUsNDQ4NjYsNDQ4NjcsNDQ4NzIsNDQ4NzMsNDQ4ODAsNDQ4OTIsNDQ4OTMsNDQ5MDAsNDQ5MDEsNDQ5MjEsNDQ5MjgsNDQ5MzIsNDQ5MzYsNDQ5NDQsNDQ5NDUsNDQ5NDksNDQ5NTYsNDQ5ODQsNDQ5ODUsNDQ5ODgsNDQ5OTIsNDQ5OTksNDUwMDAsNDUwMDEsNDUwMDMsNDUwMDUsNDUwMDYsNDUwMTIsNDUwMjAsNDUwMzIsNDUwMzMsNDUwNDAsNDUwNDEsNDUwNDQsNDUwNDgsNDUwNTYsNDUwNTcsNDUwNjAsNDUwNjgsNDUwNzIsNDUwNzYsNDUwODQsNDUwODUsNDUwOTYsNDUxMjQsNDUxMjUsNDUxMjgsNDUxMzAsNDUxMzIsNDUxMzQsNDUxMzksNDUxNDAsNDUxNDEsNDUxNDMsNDUxNDUsNTMxOTYsNTMxOTcsNTMxOTgsNTMxOTksNTMyMDAsNTMyMDEsNTMyMDIsNTMyMDMsNTMyMDQsNTMyMDUsNTMyMDYsNTMyMDcsNTMyMDgsNTMyMDksNTMyMTAsNTMyMTEsNTMyMTIsNTMyMTMsNTMyMTQsNTMyMTUsNTMyMTgsNTMyMTksNTMyMjEsNTMyMjIsNTMyMjMsNTMyMjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMyMjYsNTMyMjcsNTMyMjgsNTMyMjksNTMyMzAsNTMyMzEsNTMyMzQsNTMyMzYsNTMyMzgsNTMyMzksNTMyNDAsNTMyNDEsNTMyNDIsNTMyNDMsNTMyNDUsNTMyNDYsNTMyNDcsNTMyNDksNTMyNTAsNTMyNTEsNTMyNTMsNTMyNTQsNTMyNTUsNTMyNTYsNTMyNTcsNTMyNTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMyNTksNTMyNjAsNTMyNjEsNTMyNjIsNTMyNjMsNTMyNjQsNTMyNjYsNTMyNjcsNTMyNjgsNTMyNjksNTMyNzAsNTMyNzEsNTMyNzMsNTMyNzQsNTMyNzUsNTMyNzYsNTMyNzcsNTMyNzgsNTMyNzksNTMyODAsNTMyODEsNTMyODIsNTMyODMsNTMyODQsNTMyODUsNTMyODYsNTMyODcsNTMyODgsNTMyODksNTMyOTAsNTMyOTEsNTMyOTIsNDUxNDksNDUxODAsNDUxODEsNDUxODQsNDUxODgsNDUxOTYsNDUxOTcsNDUxOTksNDUyMDEsNDUyMDgsNDUyMDksNDUyMTAsNDUyMTIsNDUyMTUsNDUyMTYsNDUyMTcsNDUyMTgsNDUyMjQsNDUyMjUsNDUyMjcsNDUyMjgsNDUyMjksNDUyMzAsNDUyMzEsNDUyMzMsNDUyMzUsNDUyMzYsNDUyMzcsNDUyNDAsNDUyNDQsNDUyNTIsNDUyNTMsNDUyNTUsNDUyNTYsNDUyNTcsNDUyNjQsNDUyNjUsNDUyNjgsNDUyNzIsNDUyODAsNDUyODUsNDUzMjAsNDUzMjEsNDUzMjMsNDUzMjQsNDUzMjgsNDUzMzAsNDUzMzEsNDUzMzYsNDUzMzcsNDUzMzksNDUzNDAsNDUzNDEsNDUzNDcsNDUzNDgsNDUzNDksNDUzNTIsNDUzNTYsNDUzNjQsNDUzNjUsNDUzNjcsNDUzNjgsNDUzNjksNDUzNzYsNDUzNzcsNDUzODAsNDUzODQsNDUzOTIsNDUzOTMsNDUzOTYsNDUzOTcsNDU0MDAsNDU0MDQsNDU0MDgsNDU0MzIsNDU0MzMsNDU0MzYsNDU0NDAsNDU0NDIsNDU0NDgsNDU0NDksNDU0NTEsNDU0NTMsNDU0NTgsNDU0NTksNDU0NjAsNDU0NjQsNDU0NjgsNDU0ODAsNDU1MTYsNDU1MjAsNDU1MjQsNDU1MzIsNDU1MzMsNTMyOTQsNTMyOTUsNTMyOTYsNTMyOTcsNTMyOTgsNTMyOTksNTMzMDIsNTMzMDMsNTMzMDUsNTMzMDYsNTMzMDcsNTMzMDksNTMzMTAsNTMzMTEsNTMzMTIsNTMzMTMsNTMzMTQsNTMzMTUsNTMzMTgsNTMzMjAsNTMzMjIsNTMzMjMsNTMzMjQsNTMzMjUsNTMzMjYsNTMzMjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMzMjksNTMzMzAsNTMzMzEsNTMzMzMsNTMzMzQsNTMzMzUsNTMzMzcsNTMzMzgsNTMzMzksNTMzNDAsNTMzNDEsNTMzNDIsNTMzNDMsNTMzNDUsNTMzNDYsNTMzNDcsNTMzNDgsNTMzNDksNTMzNTAsNTMzNTEsNTMzNTIsNTMzNTMsNTMzNTQsNTMzNTUsNTMzNTgsNTMzNTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMzNjEsNTMzNjIsNTMzNjMsNTMzNjUsNTMzNjYsNTMzNjcsNTMzNjgsNTMzNjksNTMzNzAsNTMzNzEsNTMzNzQsNTMzNzUsNTMzNzYsNTMzNzgsNTMzNzksNTMzODAsNTMzODEsNTMzODIsNTMzODMsNTMzODQsNTMzODUsNTMzODYsNTMzODcsNTMzODgsNTMzODksNTMzOTAsNTMzOTEsNTMzOTIsNTMzOTMsNTMzOTQsNTMzOTUsNTMzOTYsNDU1MzUsNDU1NDQsNDU1NDUsNDU1NDgsNDU1NTIsNDU1NjEsNDU1NjMsNDU1NjUsNDU1NzIsNDU1NzMsNDU1NzYsNDU1NzksNDU1ODAsNDU1ODgsNDU1ODksNDU1OTEsNDU1OTMsNDU2MDAsNDU2MjAsNDU2MjgsNDU2NTYsNDU2NjAsNDU2NjQsNDU2NzIsNDU2NzMsNDU2ODQsNDU2ODUsNDU2OTIsNDU3MDAsNDU3MDEsNDU3MDUsNDU3MTIsNDU3MTMsNDU3MTYsNDU3MjAsNDU3MjEsNDU3MjIsNDU3MjgsNDU3MjksNDU3MzEsNDU3MzMsNDU3MzQsNDU3MzgsNDU3NDAsNDU3NDQsNDU3NDgsNDU3NjgsNDU3NjksNDU3NzIsNDU3NzYsNDU3NzgsNDU3ODQsNDU3ODUsNDU3ODcsNDU3ODksNDU3OTQsNDU3OTYsNDU3OTcsNDU3OTgsNDU4MDAsNDU4MDMsNDU4MDQsNDU4MDUsNDU4MDYsNDU4MDcsNDU4MTEsNDU4MTIsNDU4MTMsNDU4MTUsNDU4MTYsNDU4MTcsNDU4MTgsNDU4MTksNDU4MjMsNDU4MjQsNDU4MjUsNDU4MjgsNDU4MzIsNDU4NDAsNDU4NDEsNDU4NDMsNDU4NDQsNDU4NDUsNDU4NTIsNDU5MDgsNDU5MDksNDU5MTAsNDU5MTIsNDU5MTUsNDU5MTYsNDU5MTgsNDU5MTksNDU5MjQsNDU5MjUsNTMzOTcsNTMzOTgsNTMzOTksNTM0MDAsNTM0MDEsNTM0MDIsNTM0MDMsNTM0MDQsNTM0MDUsNTM0MDYsNTM0MDcsNTM0MDgsNTM0MDksNTM0MTAsNTM0MTEsNTM0MTQsNTM0MTUsNTM0MTcsNTM0MTgsNTM0MTksNTM0MjEsNTM0MjIsNTM0MjMsNTM0MjQsNTM0MjUsNTM0MjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM0MjcsNTM0MzAsNTM0MzIsNTM0MzQsNTM0MzUsNTM0MzYsNTM0MzcsNTM0MzgsNTM0MzksNTM0NDIsNTM0NDMsNTM0NDUsNTM0NDYsNTM0NDcsNTM0NTAsNTM0NTEsNTM0NTIsNTM0NTMsNTM0NTQsNTM0NTUsNTM0NTgsNTM0NjIsNTM0NjMsNTM0NjQsNTM0NjUsNTM0NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM0NjcsNTM0NzAsNTM0NzEsNTM0NzMsNTM0NzQsNTM0NzUsNTM0NzcsNTM0NzgsNTM0NzksNTM0ODAsNTM0ODEsNTM0ODIsNTM0ODMsNTM0ODYsNTM0OTAsNTM0OTEsNTM0OTIsNTM0OTMsNTM0OTQsNTM0OTUsNTM0OTcsNTM0OTgsNTM0OTksNTM1MDAsNTM1MDEsNTM1MDIsNTM1MDMsNTM1MDQsNTM1MDUsNTM1MDYsNTM1MDcsNTM1MDgsNDU5MjcsNDU5MjksNDU5MzEsNDU5MzQsNDU5MzYsNDU5MzcsNDU5NDAsNDU5NDQsNDU5NTIsNDU5NTMsNDU5NTUsNDU5NTYsNDU5NTcsNDU5NjQsNDU5NjgsNDU5NzIsNDU5ODQsNDU5ODUsNDU5OTIsNDU5OTYsNDYwMjAsNDYwMjEsNDYwMjQsNDYwMjcsNDYwMjgsNDYwMzAsNDYwMzIsNDYwMzYsNDYwMzcsNDYwMzksNDYwNDEsNDYwNDMsNDYwNDUsNDYwNDgsNDYwNTIsNDYwNTYsNDYwNzYsNDYwOTYsNDYxMDQsNDYxMDgsNDYxMTIsNDYxMjAsNDYxMjEsNDYxMjMsNDYxMzIsNDYxNjAsNDYxNjEsNDYxNjQsNDYxNjgsNDYxNzYsNDYxNzcsNDYxNzksNDYxODEsNDYxODgsNDYyMDgsNDYyMTYsNDYyMzcsNDYyNDQsNDYyNDgsNDYyNTIsNDYyNjEsNDYyNjMsNDYyNjUsNDYyNzIsNDYyNzYsNDYyODAsNDYyODgsNDYyOTMsNDYzMDAsNDYzMDEsNDYzMDQsNDYzMDcsNDYzMDgsNDYzMTAsNDYzMTYsNDYzMTcsNDYzMTksNDYzMjEsNDYzMjgsNDYzNTYsNDYzNTcsNDYzNjAsNDYzNjMsNDYzNjQsNDYzNzIsNDYzNzMsNDYzNzUsNDYzNzYsNDYzNzcsNDYzNzgsNDYzODQsNDYzODUsNDYzODgsNDYzOTIsNTM1MDksNTM1MTAsNTM1MTEsNTM1MTIsNTM1MTMsNTM1MTQsNTM1MTUsNTM1MTYsNTM1MTgsNTM1MTksNTM1MjAsNTM1MjEsNTM1MjIsNTM1MjMsNTM1MjQsNTM1MjUsNTM1MjYsNTM1MjcsNTM1MjgsNTM1MjksNTM1MzAsNTM1MzEsNTM1MzIsNTM1MzMsNTM1MzQsNTM1MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM1MzYsNTM1MzcsNTM1MzgsNTM1MzksNTM1NDAsNTM1NDEsNTM1NDIsNTM1NDMsNTM1NDQsNTM1NDUsNTM1NDYsNTM1NDcsNTM1NDgsNTM1NDksNTM1NTAsNTM1NTEsNTM1NTQsNTM1NTUsNTM1NTcsNTM1NTgsNTM1NTksNTM1NjEsNTM1NjMsNTM1NjQsNTM1NjUsNTM1NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM1NjcsNTM1NzAsNTM1NzQsNTM1NzUsNTM1NzYsNTM1NzcsNTM1NzgsNTM1NzksNTM1ODIsNTM1ODMsNTM1ODUsNTM1ODYsNTM1ODcsNTM1ODksNTM1OTAsNTM1OTEsNTM1OTIsNTM1OTMsNTM1OTQsNTM1OTUsNTM1OTgsNTM2MDAsNTM2MDIsNTM2MDMsNTM2MDQsNTM2MDUsNTM2MDYsNTM2MDcsNTM2MDksNTM2MTAsNTM2MTEsNTM2MTMsNDY0MDAsNDY0MDEsNDY0MDMsNDY0MDQsNDY0MDUsNDY0MTEsNDY0MTIsNDY0MTMsNDY0MTYsNDY0MjAsNDY0MjgsNDY0MjksNDY0MzEsNDY0MzIsNDY0MzMsNDY0OTYsNDY0OTcsNDY1MDAsNDY1MDQsNDY1MDYsNDY1MDcsNDY1MTIsNDY1MTMsNDY1MTUsNDY1MTYsNDY1MTcsNDY1MjMsNDY1MjQsNDY1MjUsNDY1MjgsNDY1MzIsNDY1NDAsNDY1NDEsNDY1NDMsNDY1NDQsNDY1NDUsNDY1NTIsNDY1NzIsNDY2MDgsNDY2MDksNDY2MTIsNDY2MTYsNDY2MjksNDY2MzYsNDY2NDQsNDY2NjQsNDY2OTIsNDY2OTYsNDY3NDgsNDY3NDksNDY3NTIsNDY3NTYsNDY3NjMsNDY3NjQsNDY3NjksNDY4MDQsNDY4MzIsNDY4MzYsNDY4NDAsNDY4NDgsNDY4NDksNDY4NTMsNDY4ODgsNDY4ODksNDY4OTIsNDY4OTUsNDY4OTYsNDY5MDQsNDY5MDUsNDY5MDcsNDY5MTYsNDY5MjAsNDY5MjQsNDY5MzIsNDY5MzMsNDY5NDQsNDY5NDgsNDY5NTIsNDY5NjAsNDY5NjEsNDY5NjMsNDY5NjUsNDY5NzIsNDY5NzMsNDY5NzYsNDY5ODAsNDY5ODgsNDY5ODksNDY5OTEsNDY5OTIsNDY5OTMsNDY5OTQsNDY5OTgsNDY5OTksNTM2MTQsNTM2MTUsNTM2MTYsNTM2MTcsNTM2MTgsNTM2MTksNTM2MjAsNTM2MjEsNTM2MjIsNTM2MjMsNTM2MjQsNTM2MjUsNTM2MjYsNTM2MjcsNTM2MjksNTM2MzAsNTM2MzEsNTM2MzIsNTM2MzMsNTM2MzQsNTM2MzUsNTM2MzcsNTM2MzgsNTM2MzksNTM2NDEsNTM2NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM2NDMsNTM2NDQsNTM2NDUsNTM2NDYsNTM2NDcsNTM2NDgsNTM2NDksNTM2NTAsNTM2NTEsNTM2NTIsNTM2NTMsNTM2NTQsNTM2NTUsNTM2NTYsNTM2NTcsNTM2NTgsNTM2NTksNTM2NjAsNTM2NjEsNTM2NjIsNTM2NjMsNTM2NjYsNTM2NjcsNTM2NjksNTM2NzAsNTM2NzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM2NzMsNTM2NzQsNTM2NzUsNTM2NzYsNTM2NzcsNTM2NzgsNTM2NzksNTM2ODIsNTM2ODQsNTM2ODYsNTM2ODcsNTM2ODgsNTM2ODksNTM2OTEsNTM2OTMsNTM2OTQsNTM2OTUsNTM2OTcsNTM2OTgsNTM2OTksNTM3MDAsNTM3MDEsNTM3MDIsNTM3MDMsNTM3MDQsNTM3MDUsNTM3MDYsNTM3MDcsNTM3MDgsNTM3MDksNTM3MTAsNTM3MTEsNDcwMDAsNDcwMDEsNDcwMDQsNDcwMDgsNDcwMTYsNDcwMTcsNDcwMTksNDcwMjAsNDcwMjEsNDcwMjgsNDcwMjksNDcwMzIsNDcwNDcsNDcwNDksNDcwODQsNDcwODUsNDcwODgsNDcwOTIsNDcxMDAsNDcxMDEsNDcxMDMsNDcxMDQsNDcxMDUsNDcxMTEsNDcxMTIsNDcxMTMsNDcxMTYsNDcxMjAsNDcxMjgsNDcxMjksNDcxMzEsNDcxMzMsNDcxNDAsNDcxNDEsNDcxNDQsNDcxNDgsNDcxNTYsNDcxNTcsNDcxNTksNDcxNjAsNDcxNjEsNDcxNjgsNDcxNzIsNDcxODUsNDcxODcsNDcxOTYsNDcxOTcsNDcyMDAsNDcyMDQsNDcyMTIsNDcyMTMsNDcyMTUsNDcyMTcsNDcyMjQsNDcyMjgsNDcyNDUsNDcyNzIsNDcyODAsNDcyODQsNDcyODgsNDcyOTYsNDcyOTcsNDcyOTksNDczMDEsNDczMDgsNDczMTIsNDczMTYsNDczMjUsNDczMjcsNDczMjksNDczMzYsNDczMzcsNDczNDAsNDczNDQsNDczNTIsNDczNTMsNDczNTUsNDczNTcsNDczNjQsNDczODQsNDczOTIsNDc0MjAsNDc0MjEsNDc0MjQsNDc0MjgsNDc0MzYsNDc0MzksNDc0NDEsNDc0NDgsNDc0NDksNDc0NTIsNDc0NTYsNDc0NjQsNDc0NjUsNTM3MTIsNTM3MTMsNTM3MTQsNTM3MTUsNTM3MTYsNTM3MTcsNTM3MTgsNTM3MTksNTM3MjEsNTM3MjIsNTM3MjMsNTM3MjQsNTM3MjUsNTM3MjYsNTM3MjcsNTM3MjgsNTM3MjksNTM3MzAsNTM3MzEsNTM3MzIsNTM3MzMsNTM3MzQsNTM3MzUsNTM3MzYsNTM3MzcsNTM3MzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM3MzksNTM3NDAsNTM3NDEsNTM3NDIsNTM3NDMsNTM3NDQsNTM3NDUsNTM3NDYsNTM3NDcsNTM3NDksNTM3NTAsNTM3NTEsNTM3NTMsNTM3NTQsNTM3NTUsNTM3NTYsNTM3NTcsNTM3NTgsNTM3NTksNTM3NjAsNTM3NjEsNTM3NjIsNTM3NjMsNTM3NjQsNTM3NjUsNTM3NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM3NjgsNTM3NzAsNTM3NzEsNTM3NzIsNTM3NzMsNTM3NzQsNTM3NzUsNTM3NzcsNTM3NzgsNTM3NzksNTM3ODAsNTM3ODEsNTM3ODIsNTM3ODMsNTM3ODQsNTM3ODUsNTM3ODYsNTM3ODcsNTM3ODgsNTM3ODksNTM3OTAsNTM3OTEsNTM3OTIsNTM3OTMsNTM3OTQsNTM3OTUsNTM3OTYsNTM3OTcsNTM3OTgsNTM3OTksNTM4MDAsNTM4MDEsNDc0NjcsNDc0NjksNDc0NzYsNDc0NzcsNDc0ODAsNDc0ODQsNDc0OTIsNDc0OTMsNDc0OTUsNDc0OTcsNDc0OTgsNDc1MDEsNDc1MDIsNDc1MzIsNDc1MzMsNDc1MzYsNDc1NDAsNDc1NDgsNDc1NDksNDc1NTEsNDc1NTMsNDc1NjAsNDc1NjEsNDc1NjQsNDc1NjYsNDc1NjcsNDc1NjgsNDc1NjksNDc1NzAsNDc1NzYsNDc1NzcsNDc1NzksNDc1ODEsNDc1ODIsNDc1ODUsNDc1ODcsNDc1ODgsNDc1ODksNDc1OTIsNDc1OTYsNDc2MDQsNDc2MDUsNDc2MDcsNDc2MDgsNDc2MDksNDc2MTAsNDc2MTYsNDc2MTcsNDc2MjQsNDc2MzcsNDc2NzIsNDc2NzMsNDc2NzYsNDc2ODAsNDc2ODIsNDc2ODgsNDc2ODksNDc2OTEsNDc2OTMsNDc2OTQsNDc2OTksNDc3MDAsNDc3MDEsNDc3MDQsNDc3MDgsNDc3MTYsNDc3MTcsNDc3MTksNDc3MjAsNDc3MjEsNDc3MjgsNDc3MjksNDc3MzIsNDc3MzYsNDc3NDcsNDc3NDgsNDc3NDksNDc3NTEsNDc3NTYsNDc3ODQsNDc3ODUsNDc3ODcsNDc3ODgsNDc3OTIsNDc3OTQsNDc4MDAsNDc4MDEsNDc4MDMsNDc4MDUsNDc4MTIsNDc4MTYsNDc4MzIsNDc4MzMsNDc4NjgsNTM4MDIsNTM4MDMsNTM4MDYsNTM4MDcsNTM4MDksNTM4MTAsNTM4MTEsNTM4MTMsNTM4MTQsNTM4MTUsNTM4MTYsNTM4MTcsNTM4MTgsNTM4MTksNTM4MjIsNTM4MjQsNTM4MjYsNTM4MjcsNTM4MjgsNTM4MjksNTM4MzAsNTM4MzEsNTM4MzMsNTM4MzQsNTM4MzUsNTM4MzYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM4MzcsNTM4MzgsNTM4MzksNTM4NDAsNTM4NDEsNTM4NDIsNTM4NDMsNTM4NDQsNTM4NDUsNTM4NDYsNTM4NDcsNTM4NDgsNTM4NDksNTM4NTAsNTM4NTEsNTM4NTMsNTM4NTQsNTM4NTUsNTM4NTYsNTM4NTcsNTM4NTgsNTM4NTksNTM4NjEsNTM4NjIsNTM4NjMsNTM4NjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM4NjUsNTM4NjYsNTM4NjcsNTM4NjgsNTM4NjksNTM4NzAsNTM4NzEsNTM4NzIsNTM4NzMsNTM4NzQsNTM4NzUsNTM4NzYsNTM4NzcsNTM4NzgsNTM4NzksNTM4ODAsNTM4ODEsNTM4ODIsNTM4ODMsNTM4ODQsNTM4ODUsNTM4ODYsNTM4ODcsNTM4OTAsNTM4OTEsNTM4OTMsNTM4OTQsNTM4OTUsNTM4OTcsNTM4OTgsNTM4OTksNTM5MDAsNDc4NzIsNDc4NzYsNDc4ODUsNDc4ODcsNDc4ODksNDc4OTYsNDc5MDAsNDc5MDQsNDc5MTMsNDc5MTUsNDc5MjQsNDc5MjUsNDc5MjYsNDc5MjgsNDc5MzEsNDc5MzIsNDc5MzMsNDc5MzQsNDc5NDAsNDc5NDEsNDc5NDMsNDc5NDUsNDc5NDksNDc5NTEsNDc5NTIsNDc5NTYsNDc5NjAsNDc5NjksNDc5NzEsNDc5ODAsNDgwMDgsNDgwMTIsNDgwMTYsNDgwMzYsNDgwNDAsNDgwNDQsNDgwNTIsNDgwNTUsNDgwNjQsNDgwNjgsNDgwNzIsNDgwODAsNDgwODMsNDgxMjAsNDgxMjEsNDgxMjQsNDgxMjcsNDgxMjgsNDgxMzAsNDgxMzYsNDgxMzcsNDgxMzksNDgxNDAsNDgxNDEsNDgxNDMsNDgxNDUsNDgxNDgsNDgxNDksNDgxNTAsNDgxNTEsNDgxNTIsNDgxNTUsNDgxNTYsNDgxNTcsNDgxNTgsNDgxNTksNDgxNjQsNDgxNjUsNDgxNjcsNDgxNjksNDgxNzMsNDgxNzYsNDgxNzcsNDgxODAsNDgxODQsNDgxOTIsNDgxOTMsNDgxOTUsNDgxOTYsNDgxOTcsNDgyMDEsNDgyMDQsNDgyMDUsNDgyMDgsNDgyMjEsNDgyNjAsNDgyNjEsNDgyNjQsNDgyNjcsNDgyNjgsNDgyNzAsNDgyNzYsNDgyNzcsNDgyNzksNTM5MDEsNTM5MDIsNTM5MDMsNTM5MDYsNTM5MDcsNTM5MDgsNTM5MTAsNTM5MTEsNTM5MTIsNTM5MTMsNTM5MTQsNTM5MTUsNTM5MTcsNTM5MTgsNTM5MTksNTM5MjEsNTM5MjIsNTM5MjMsNTM5MjUsNTM5MjYsNTM5MjcsNTM5MjgsNTM5MjksNTM5MzAsNTM5MzEsNTM5MzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM5MzQsNTM5MzUsNTM5MzYsNTM5MzgsNTM5MzksNTM5NDAsNTM5NDEsNTM5NDIsNTM5NDMsNTM5NDYsNTM5NDcsNTM5NDksNTM5NTAsNTM5NTMsNTM5NTUsNTM5NTYsNTM5NTcsNTM5NTgsNTM5NTksNTM5NjIsNTM5NjQsNTM5NjUsNTM5NjYsNTM5NjcsNTM5NjgsNTM5NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM5NzAsNTM5NzEsNTM5NzMsNTM5NzQsNTM5NzUsNTM5NzcsNTM5NzgsNTM5NzksNTM5ODEsNTM5ODIsNTM5ODMsNTM5ODQsNTM5ODUsNTM5ODYsNTM5ODcsNTM5OTAsNTM5OTEsNTM5OTIsNTM5OTMsNTM5OTQsNTM5OTUsNTM5OTYsNTM5OTcsNTM5OTgsNTM5OTksNTQwMDIsNTQwMDMsNTQwMDUsNTQwMDYsNTQwMDcsNTQwMDksNTQwMTAsNDgyODEsNDgyODIsNDgyODgsNDgyODksNDgyOTIsNDgyOTUsNDgyOTYsNDgzMDQsNDgzMDUsNDgzMDcsNDgzMDgsNDgzMDksNDgzMTYsNDgzMTcsNDgzMjAsNDgzMjQsNDgzMzMsNDgzMzUsNDgzMzYsNDgzMzcsNDgzNDEsNDgzNDQsNDgzNDgsNDgzNzIsNDgzNzMsNDgzNzQsNDgzNzYsNDgzODAsNDgzODgsNDgzODksNDgzOTEsNDgzOTMsNDg0MDAsNDg0MDQsNDg0MjAsNDg0MjgsNDg0NDgsNDg0NTYsNDg0NTcsNDg0NjAsNDg0NjQsNDg0NzIsNDg0NzMsNDg0ODQsNDg0ODgsNDg1MTIsNDg1MTMsNDg1MTYsNDg1MTksNDg1MjAsNDg1MjEsNDg1MjIsNDg1MjgsNDg1MjksNDg1MzEsNDg1MzMsNDg1MzcsNDg1MzgsNDg1NDAsNDg1NDgsNDg1NjAsNDg1NjgsNDg1OTYsNDg1OTcsNDg2MDAsNDg2MDQsNDg2MTcsNDg2MjQsNDg2MjgsNDg2MzIsNDg2NDAsNDg2NDMsNDg2NDUsNDg2NTIsNDg2NTMsNDg2NTYsNDg2NjAsNDg2NjgsNDg2NjksNDg2NzEsNDg3MDgsNDg3MDksNDg3MTIsNDg3MTYsNDg3MTgsNDg3MjQsNDg3MjUsNDg3MjcsNDg3MjksNDg3MzAsNDg3MzEsNDg3MzYsNDg3MzcsNDg3NDAsNTQwMTEsNTQwMTIsNTQwMTMsNTQwMTQsNTQwMTUsNTQwMTgsNTQwMjAsNTQwMjIsNTQwMjMsNTQwMjQsNTQwMjUsNTQwMjYsNTQwMjcsNTQwMzEsNTQwMzMsNTQwMzQsNTQwMzUsNTQwMzcsNTQwMzksNTQwNDAsNTQwNDEsNTQwNDIsNTQwNDMsNTQwNDYsNTQwNTAsNTQwNTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQwNTIsNTQwNTQsNTQwNTUsNTQwNTgsNTQwNTksNTQwNjEsNTQwNjIsNTQwNjMsNTQwNjUsNTQwNjYsNTQwNjcsNTQwNjgsNTQwNjksNTQwNzAsNTQwNzEsNTQwNzQsNTQwNzgsNTQwNzksNTQwODAsNTQwODEsNTQwODIsNTQwODMsNTQwODYsNTQwODcsNTQwODgsNTQwODksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQwOTAsNTQwOTEsNTQwOTIsNTQwOTMsNTQwOTQsNTQwOTUsNTQwOTYsNTQwOTcsNTQwOTgsNTQwOTksNTQxMDAsNTQxMDEsNTQxMDIsNTQxMDMsNTQxMDQsNTQxMDUsNTQxMDYsNTQxMDcsNTQxMDgsNTQxMDksNTQxMTAsNTQxMTEsNTQxMTIsNTQxMTMsNTQxMTQsNTQxMTUsNTQxMTYsNTQxMTcsNTQxMTgsNTQxMTksNTQxMjAsNTQxMjEsNDg3NDQsNDg3NDYsNDg3NTIsNDg3NTMsNDg3NTUsNDg3NTYsNDg3NTcsNDg3NjMsNDg3NjQsNDg3NjUsNDg3NjgsNDg3NzIsNDg3ODAsNDg3ODEsNDg3ODMsNDg3ODQsNDg3ODUsNDg3OTIsNDg3OTMsNDg4MDgsNDg4NDgsNDg4NDksNDg4NTIsNDg4NTUsNDg4NTYsNDg4NjQsNDg4NjcsNDg4NjgsNDg4NjksNDg4NzYsNDg4OTcsNDg5MDQsNDg5MDUsNDg5MjAsNDg5MjEsNDg5MjMsNDg5MjQsNDg5MjUsNDg5NjAsNDg5NjEsNDg5NjQsNDg5NjgsNDg5NzYsNDg5NzcsNDg5ODEsNDkwNDQsNDkwNzIsNDkwOTMsNDkxMDAsNDkxMDEsNDkxMDQsNDkxMDgsNDkxMTYsNDkxMTksNDkxMjEsNDkyMTIsNDkyMzMsNDkyNDAsNDkyNDQsNDkyNDgsNDkyNTYsNDkyNTcsNDkyOTYsNDkyOTcsNDkzMDAsNDkzMDQsNDkzMTIsNDkzMTMsNDkzMTUsNDkzMTcsNDkzMjQsNDkzMjUsNDkzMjcsNDkzMjgsNDkzMzEsNDkzMzIsNDkzMzMsNDkzMzQsNDkzNDAsNDkzNDEsNDkzNDMsNDkzNDQsNDkzNDUsNDkzNDksNDkzNTIsNDkzNTMsNDkzNTYsNDkzNjAsNDkzNjgsNDkzNjksNDkzNzEsNDkzNzIsNDkzNzMsNDkzODAsNTQxMjIsNTQxMjMsNTQxMjQsNTQxMjUsNTQxMjYsNTQxMjcsNTQxMjgsNTQxMjksNTQxMzAsNTQxMzEsNTQxMzIsNTQxMzMsNTQxMzQsNTQxMzUsNTQxMzYsNTQxMzcsNTQxMzgsNTQxMzksNTQxNDIsNTQxNDMsNTQxNDUsNTQxNDYsNTQxNDcsNTQxNDksNTQxNTAsNTQxNTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQxNTIsNTQxNTMsNTQxNTQsNTQxNTUsNTQxNTgsNTQxNjIsNTQxNjMsNTQxNjQsNTQxNjUsNTQxNjYsNTQxNjcsNTQxNzAsNTQxNzEsNTQxNzMsNTQxNzQsNTQxNzUsNTQxNzcsNTQxNzgsNTQxNzksNTQxODAsNTQxODEsNTQxODIsNTQxODMsNTQxODYsNTQxODgsNTQxOTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQxOTEsNTQxOTIsNTQxOTMsNTQxOTQsNTQxOTUsNTQxOTcsNTQxOTgsNTQxOTksNTQyMDEsNTQyMDIsNTQyMDMsNTQyMDUsNTQyMDYsNTQyMDcsNTQyMDgsNTQyMDksNTQyMTAsNTQyMTEsNTQyMTQsNTQyMTUsNTQyMTgsNTQyMTksNTQyMjAsNTQyMjEsNTQyMjIsNTQyMjMsNTQyMjUsNTQyMjYsNTQyMjcsNTQyMjgsNTQyMjksNTQyMzAsNDkzODEsNDkzODQsNDkzODgsNDkzOTYsNDkzOTcsNDkzOTksNDk0MDEsNDk0MDgsNDk0MTIsNDk0MTYsNDk0MjQsNDk0MjksNDk0MzYsNDk0MzcsNDk0MzgsNDk0MzksNDk0NDAsNDk0NDMsNDk0NDQsNDk0NDYsNDk0NDcsNDk0NTIsNDk0NTMsNDk0NTUsNDk0NTYsNDk0NTcsNDk0NjIsNDk0NjQsNDk0NjUsNDk0NjgsNDk0NzIsNDk0ODAsNDk0ODEsNDk0ODMsNDk0ODQsNDk0ODUsNDk0OTIsNDk0OTMsNDk0OTYsNDk1MDAsNDk1MDgsNDk1MDksNDk1MTEsNDk1MTIsNDk1MTMsNDk1MjAsNDk1MjQsNDk1MjgsNDk1NDEsNDk1NDgsNDk1NDksNDk1NTAsNDk1NTIsNDk1NTYsNDk1NTgsNDk1NjQsNDk1NjUsNDk1NjcsNDk1NjksNDk1NzMsNDk1NzYsNDk1NzcsNDk1ODAsNDk1ODQsNDk1OTcsNDk2MDQsNDk2MDgsNDk2MTIsNDk2MjAsNDk2MjMsNDk2MjQsNDk2MzIsNDk2MzYsNDk2NDAsNDk2NDgsNDk2NDksNDk2NTEsNDk2NjAsNDk2NjEsNDk2NjQsNDk2NjgsNDk2NzYsNDk2NzcsNDk2NzksNDk2ODEsNDk2ODgsNDk2ODksNDk2OTIsNDk2OTUsNDk2OTYsNDk3MDQsNDk3MDUsNDk3MDcsNDk3MDksNTQyMzEsNTQyMzMsNTQyMzQsNTQyMzUsNTQyMzYsNTQyMzcsNTQyMzgsNTQyMzksNTQyNDAsNTQyNDIsNTQyNDQsNTQyNDUsNTQyNDYsNTQyNDcsNTQyNDgsNTQyNDksNTQyNTAsNTQyNTEsNTQyNTQsNTQyNTUsNTQyNTcsNTQyNTgsNTQyNTksNTQyNjEsNTQyNjIsNTQyNjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQyNjQsNTQyNjUsNTQyNjYsNTQyNjcsNTQyNzAsNTQyNzIsNTQyNzQsNTQyNzUsNTQyNzYsNTQyNzcsNTQyNzgsNTQyNzksNTQyODEsNTQyODIsNTQyODMsNTQyODQsNTQyODUsNTQyODYsNTQyODcsNTQyODgsNTQyODksNTQyOTAsNTQyOTEsNTQyOTIsNTQyOTMsNTQyOTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQyOTUsNTQyOTYsNTQyOTcsNTQyOTgsNTQyOTksNTQzMDAsNTQzMDIsNTQzMDMsNTQzMDQsNTQzMDUsNTQzMDYsNTQzMDcsNTQzMDgsNTQzMDksNTQzMTAsNTQzMTEsNTQzMTIsNTQzMTMsNTQzMTQsNTQzMTUsNTQzMTYsNTQzMTcsNTQzMTgsNTQzMTksNTQzMjAsNTQzMjEsNTQzMjIsNTQzMjMsNTQzMjQsNTQzMjUsNTQzMjYsNTQzMjcsNDk3MTEsNDk3MTMsNDk3MTQsNDk3MTYsNDk3MzYsNDk3NDQsNDk3NDUsNDk3NDgsNDk3NTIsNDk3NjAsNDk3NjUsNDk3NzIsNDk3NzMsNDk3NzYsNDk3ODAsNDk3ODgsNDk3ODksNDk3OTEsNDk3OTMsNDk4MDAsNDk4MDEsNDk4MDgsNDk4MTYsNDk4MTksNDk4MjEsNDk4MjgsNDk4MjksNDk4MzIsNDk4MzYsNDk4MzcsNDk4NDQsNDk4NDUsNDk4NDcsNDk4NDksNDk4ODQsNDk4ODUsNDk4ODgsNDk4OTEsNDk4OTIsNDk4OTksNDk5MDAsNDk5MDEsNDk5MDMsNDk5MDUsNDk5MTAsNDk5MTIsNDk5MTMsNDk5MTUsNDk5MTYsNDk5MjAsNDk5MjgsNDk5MjksNDk5MzIsNDk5MzMsNDk5MzksNDk5NDAsNDk5NDEsNDk5NDQsNDk5NDgsNDk5NTYsNDk5NTcsNDk5NjAsNDk5NjEsNDk5ODksNTAwMjQsNTAwMjUsNTAwMjgsNTAwMzIsNTAwMzQsNTAwNDAsNTAwNDEsNTAwNDQsNTAwNDUsNTAwNTIsNTAwNTYsNTAwNjAsNTAxMTIsNTAxMzYsNTAxMzcsNTAxNDAsNTAxNDMsNTAxNDQsNTAxNDYsNTAxNTIsNTAxNTMsNTAxNTcsNTAxNjQsNTAxNjUsNTAxNjgsNTAxODQsNTAxOTIsNTAyMTIsNTAyMjAsNTAyMjQsNTQzMjgsNTQzMjksNTQzMzAsNTQzMzEsNTQzMzIsNTQzMzMsNTQzMzQsNTQzMzUsNTQzMzcsNTQzMzgsNTQzMzksNTQzNDEsNTQzNDIsNTQzNDMsNTQzNDQsNTQzNDUsNTQzNDYsNTQzNDcsNTQzNDgsNTQzNDksNTQzNTAsNTQzNTEsNTQzNTIsNTQzNTMsNTQzNTQsNTQzNTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQzNTYsNTQzNTcsNTQzNTgsNTQzNTksNTQzNjAsNTQzNjEsNTQzNjIsNTQzNjMsNTQzNjUsNTQzNjYsNTQzNjcsNTQzNjksNTQzNzAsNTQzNzEsNTQzNzMsNTQzNzQsNTQzNzUsNTQzNzYsNTQzNzcsNTQzNzgsNTQzNzksNTQzODAsNTQzODIsNTQzODQsNTQzODUsNTQzODYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQzODcsNTQzODgsNTQzODksNTQzOTAsNTQzOTEsNTQzOTQsNTQzOTUsNTQzOTcsNTQzOTgsNTQ0MDEsNTQ0MDMsNTQ0MDQsNTQ0MDUsNTQ0MDYsNTQ0MDcsNTQ0MTAsNTQ0MTIsNTQ0MTQsNTQ0MTUsNTQ0MTYsNTQ0MTcsNTQ0MTgsNTQ0MTksNTQ0MjEsNTQ0MjIsNTQ0MjMsNTQ0MjQsNTQ0MjUsNTQ0MjYsNTQ0MjcsNTQ0MjgsNTQ0MjksNTAyMjgsNTAyMzYsNTAyMzcsNTAyNDgsNTAyNzYsNTAyNzcsNTAyODAsNTAyODQsNTAyOTIsNTAyOTMsNTAyOTcsNTAzMDQsNTAzMjQsNTAzMzIsNTAzNjAsNTAzNjQsNTA0MDksNTA0MTYsNTA0MTcsNTA0MjAsNTA0MjQsNTA0MjYsNTA0MzEsNTA0MzIsNTA0MzMsNTA0NDQsNTA0NDgsNTA0NTIsNTA0NjAsNTA0NzIsNTA0NzMsNTA0NzYsNTA0ODAsNTA0ODgsNTA0ODksNTA0OTEsNTA0OTMsNTA1MDAsNTA1MDEsNTA1MDQsNTA1MDUsNTA1MDYsNTA1MDgsNTA1MDksNTA1MTAsNTA1MTUsNTA1MTYsNTA1MTcsNTA1MTksNTA1MjAsNTA1MjEsNTA1MjUsNTA1MjYsNTA1MjgsNTA1MjksNTA1MzIsNTA1MzYsNTA1NDQsNTA1NDUsNTA1NDcsNTA1NDgsNTA1NDksNTA1NTYsNTA1NTcsNTA1NjAsNTA1NjQsNTA1NjcsNTA1NzIsNTA1NzMsNTA1NzUsNTA1NzcsNTA1ODEsNTA1ODMsNTA1ODQsNTA1ODgsNTA1OTIsNTA2MDEsNTA2MTIsNTA2MTMsNTA2MTYsNTA2MTcsNTA2MTksNTA2MjAsNTA2MjEsNTA2MjIsNTA2MjgsNTA2MjksNTA2MzAsNTA2MzEsNTA2MzIsNTA2MzMsNTA2MzQsNTA2MzYsNTA2MzgsNTQ0MzAsNTQ0MzEsNTQ0MzIsNTQ0MzMsNTQ0MzQsNTQ0MzUsNTQ0MzYsNTQ0MzcsNTQ0MzgsNTQ0MzksNTQ0NDAsNTQ0NDIsNTQ0NDMsNTQ0NDQsNTQ0NDUsNTQ0NDYsNTQ0NDcsNTQ0NDgsNTQ0NDksNTQ0NTAsNTQ0NTEsNTQ0NTIsNTQ0NTMsNTQ0NTQsNTQ0NTUsNTQ0NTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ0NTcsNTQ0NTgsNTQ0NTksNTQ0NjAsNTQ0NjEsNTQ0NjIsNTQ0NjMsNTQ0NjQsNTQ0NjUsNTQ0NjYsNTQ0NjcsNTQ0NjgsNTQ0NjksNTQ0NzAsNTQ0NzEsNTQ0NzIsNTQ0NzMsNTQ0NzQsNTQ0NzUsNTQ0NzcsNTQ0NzgsNTQ0NzksNTQ0ODEsNTQ0ODIsNTQ0ODMsNTQ0ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ0ODYsNTQ0ODcsNTQ0ODgsNTQ0ODksNTQ0OTAsNTQ0OTEsNTQ0OTMsNTQ0OTQsNTQ0OTYsNTQ0OTcsNTQ0OTgsNTQ0OTksNTQ1MDAsNTQ1MDEsNTQ1MDIsNTQ1MDMsNTQ1MDUsNTQ1MDYsNTQ1MDcsNTQ1MDksNTQ1MTAsNTQ1MTEsNTQ1MTMsNTQ1MTQsNTQ1MTUsNTQ1MTYsNTQ1MTcsNTQ1MTgsNTQ1MTksNTQ1MjEsNTQ1MjIsNTQ1MjQsNTA2NDAsNTA2NDEsNTA2NDQsNTA2NDgsNTA2NTYsNTA2NTcsNTA2NTksNTA2NjEsNTA2NjgsNTA2NjksNTA2NzAsNTA2NzIsNTA2NzYsNTA2NzgsNTA2NzksNTA2ODQsNTA2ODUsNTA2ODYsNTA2ODcsNTA2ODgsNTA2ODksNTA2OTMsNTA2OTQsNTA2OTUsNTA2OTYsNTA3MDAsNTA3MDQsNTA3MTIsNTA3MTMsNTA3MTUsNTA3MTYsNTA3MjQsNTA3MjUsNTA3MjgsNTA3MzIsNTA3MzMsNTA3MzQsNTA3MzYsNTA3MzksNTA3NDAsNTA3NDEsNTA3NDMsNTA3NDUsNTA3NDcsNTA3NTIsNTA3NTMsNTA3NTYsNTA3NjAsNTA3NjgsNTA3NjksNTA3NzEsNTA3NzIsNTA3NzMsNTA3ODAsNTA3ODEsNTA3ODQsNTA3OTYsNTA3OTksNTA4MDEsNTA4MDgsNTA4MDksNTA4MTIsNTA4MTYsNTA4MjQsNTA4MjUsNTA4MjcsNTA4MjksNTA4MzYsNTA4MzcsNTA4NDAsNTA4NDQsNTA4NTIsNTA4NTMsNTA4NTUsNTA4NTcsNTA4NjQsNTA4NjUsNTA4NjgsNTA4NzIsNTA4NzMsNTA4NzQsNTA4ODAsNTA4ODEsNTA4ODMsNTA4ODUsNTA4OTIsNTA4OTMsNTA4OTYsNTA5MDAsNTA5MDgsNTA5MDksNTA5MTIsNTA5MTMsNTA5MjAsNTQ1MjYsNTQ1MjcsNTQ1MjgsNTQ1MjksNTQ1MzAsNTQ1MzEsNTQ1MzMsNTQ1MzQsNTQ1MzUsNTQ1MzcsNTQ1MzgsNTQ1MzksNTQ1NDEsNTQ1NDIsNTQ1NDMsNTQ1NDQsNTQ1NDUsNTQ1NDYsNTQ1NDcsNTQ1NTAsNTQ1NTIsNTQ1NTMsNTQ1NTQsNTQ1NTUsNTQ1NTYsNTQ1NTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ1NTgsNTQ1NTksNTQ1NjAsNTQ1NjEsNTQ1NjIsNTQ1NjMsNTQ1NjQsNTQ1NjUsNTQ1NjYsNTQ1NjcsNTQ1NjgsNTQ1NjksNTQ1NzAsNTQ1NzEsNTQ1NzIsNTQ1NzMsNTQ1NzQsNTQ1NzUsNTQ1NzYsNTQ1NzcsNTQ1NzgsNTQ1NzksNTQ1ODAsNTQ1ODEsNTQ1ODIsNTQ1ODMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ1ODQsNTQ1ODUsNTQ1ODYsNTQ1ODcsNTQ1OTAsNTQ1OTEsNTQ1OTMsNTQ1OTQsNTQ1OTUsNTQ1OTcsNTQ1OTgsNTQ1OTksNTQ2MDAsNTQ2MDEsNTQ2MDIsNTQ2MDMsNTQ2MDYsNTQ2MDgsNTQ2MTAsNTQ2MTEsNTQ2MTIsNTQ2MTMsNTQ2MTQsNTQ2MTUsNTQ2MTgsNTQ2MTksNTQ2MjEsNTQ2MjIsNTQ2MjMsNTQ2MjUsNTQ2MjYsNTQ2MjcsNTA5MjEsNTA5MjQsNTA5MjgsNTA5MzYsNTA5MzcsNTA5NDEsNTA5NDgsNTA5NDksNTA5NTIsNTA5NTYsNTA5NjQsNTA5NjUsNTA5NjcsNTA5NjksNTA5NzYsNTA5NzcsNTA5ODAsNTA5ODQsNTA5OTIsNTA5OTMsNTA5OTUsNTA5OTcsNTA5OTksNTEwMDQsNTEwMDUsNTEwMDgsNTEwMTIsNTEwMTgsNTEwMjAsNTEwMjEsNTEwMjMsNTEwMjUsNTEwMjYsNTEwMjcsNTEwMjgsNTEwMjksNTEwMzAsNTEwMzEsNTEwMzIsNTEwMzYsNTEwNDAsNTEwNDgsNTEwNTEsNTEwNjAsNTEwNjEsNTEwNjQsNTEwNjgsNTEwNjksNTEwNzAsNTEwNzUsNTEwNzYsNTEwNzcsNTEwNzksNTEwODAsNTEwODEsNTEwODIsNTEwODYsNTEwODgsNTEwODksNTEwOTIsNTEwOTQsNTEwOTUsNTEwOTYsNTEwOTgsNTExMDQsNTExMDUsNTExMDcsNTExMDgsNTExMDksNTExMTAsNTExMTYsNTExMTcsNTExMjAsNTExMjQsNTExMzIsNTExMzMsNTExMzUsNTExMzYsNTExMzcsNTExNDQsNTExNDUsNTExNDgsNTExNTAsNTExNTIsNTExNjAsNTExNjUsNTExNzIsNTExNzYsNTExODAsNTEyMDAsNTEyMDEsNTEyMDQsNTEyMDgsNTEyMTAsNTQ2MjgsNTQ2MzAsNTQ2MzEsNTQ2MzQsNTQ2MzYsNTQ2MzgsNTQ2MzksNTQ2NDAsNTQ2NDEsNTQ2NDIsNTQ2NDMsNTQ2NDYsNTQ2NDcsNTQ2NDksNTQ2NTAsNTQ2NTEsNTQ2NTMsNTQ2NTQsNTQ2NTUsNTQ2NTYsNTQ2NTcsNTQ2NTgsNTQ2NTksNTQ2NjIsNTQ2NjYsNTQ2NjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ2NjgsNTQ2NjksNTQ2NzAsNTQ2NzEsNTQ2NzMsNTQ2NzQsNTQ2NzUsNTQ2NzYsNTQ2NzcsNTQ2NzgsNTQ2NzksNTQ2ODAsNTQ2ODEsNTQ2ODIsNTQ2ODMsNTQ2ODQsNTQ2ODUsNTQ2ODYsNTQ2ODcsNTQ2ODgsNTQ2ODksNTQ2OTAsNTQ2OTEsNTQ2OTIsNTQ2OTQsNTQ2OTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ2OTYsNTQ2OTcsNTQ2OTgsNTQ2OTksNTQ3MDAsNTQ3MDEsNTQ3MDIsNTQ3MDMsNTQ3MDQsNTQ3MDUsNTQ3MDYsNTQ3MDcsNTQ3MDgsNTQ3MDksNTQ3MTAsNTQ3MTEsNTQ3MTIsNTQ3MTMsNTQ3MTQsNTQ3MTUsNTQ3MTYsNTQ3MTcsNTQ3MTgsNTQ3MTksNTQ3MjAsNTQ3MjEsNTQ3MjIsNTQ3MjMsNTQ3MjQsNTQ3MjUsNTQ3MjYsNTQ3MjcsNTEyMTYsNTEyMTcsNTEyMTksNTEyMjEsNTEyMjIsNTEyMjgsNTEyMjksNTEyMzIsNTEyMzYsNTEyNDQsNTEyNDUsNTEyNDcsNTEyNDksNTEyNTYsNTEyNjAsNTEyNjQsNTEyNzIsNTEyNzMsNTEyNzYsNTEyNzcsNTEyODQsNTEzMTIsNTEzMTMsNTEzMTYsNTEzMjAsNTEzMjIsNTEzMjgsNTEzMjksNTEzMzEsNTEzMzMsNTEzMzQsNTEzMzUsNTEzMzksNTEzNDAsNTEzNDEsNTEzNDgsNTEzNTcsNTEzNTksNTEzNjEsNTEzNjgsNTEzODgsNTEzODksNTEzOTYsNTE0MDAsNTE0MDQsNTE0MTIsNTE0MTMsNTE0MTUsNTE0MTcsNTE0MjQsNTE0MjUsNTE0MjgsNTE0NDUsNTE0NTIsNTE0NTMsNTE0NTYsNTE0NjAsNTE0NjEsNTE0NjIsNTE0NjgsNTE0NjksNTE0NzEsNTE0NzMsNTE0ODAsNTE1MDAsNTE1MDgsNTE1MzYsNTE1MzcsNTE1NDAsNTE1NDQsNTE1NTIsNTE1NTMsNTE1NTUsNTE1NjQsNTE1NjgsNTE1NzIsNTE1ODAsNTE1OTIsNTE1OTMsNTE1OTYsNTE2MDAsNTE2MDgsNTE2MDksNTE2MTEsNTE2MTMsNTE2NDgsNTE2NDksNTE2NTIsNTE2NTUsNTE2NTYsNTE2NTgsNTE2NjQsNTE2NjUsNTE2NjcsNTQ3MzAsNTQ3MzEsNTQ3MzMsNTQ3MzQsNTQ3MzUsNTQ3MzcsNTQ3MzksNTQ3NDAsNTQ3NDEsNTQ3NDIsNTQ3NDMsNTQ3NDYsNTQ3NDgsNTQ3NTAsNTQ3NTEsNTQ3NTIsNTQ3NTMsNTQ3NTQsNTQ3NTUsNTQ3NTgsNTQ3NTksNTQ3NjEsNTQ3NjIsNTQ3NjMsNTQ3NjUsNTQ3NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ3NjcsNTQ3NjgsNTQ3NjksNTQ3NzAsNTQ3NzEsNTQ3NzQsNTQ3NzYsNTQ3NzgsNTQ3NzksNTQ3ODAsNTQ3ODEsNTQ3ODIsNTQ3ODMsNTQ3ODYsNTQ3ODcsNTQ3ODksNTQ3OTAsNTQ3OTEsNTQ3OTMsNTQ3OTQsNTQ3OTUsNTQ3OTYsNTQ3OTcsNTQ3OTgsNTQ3OTksNTQ4MDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ4MDYsNTQ4MDcsNTQ4MDgsNTQ4MDksNTQ4MTAsNTQ4MTEsNTQ4MTMsNTQ4MTQsNTQ4MTUsNTQ4MTcsNTQ4MTgsNTQ4MTksNTQ4MjEsNTQ4MjIsNTQ4MjMsNTQ4MjQsNTQ4MjUsNTQ4MjYsNTQ4MjcsNTQ4MjgsNTQ4MzAsNTQ4MzEsNTQ4MzIsNTQ4MzMsNTQ4MzQsNTQ4MzUsNTQ4MzYsNTQ4MzcsNTQ4MzgsNTQ4MzksNTQ4NDIsNTQ4NDMsNTE2NjksNTE2NzAsNTE2NzMsNTE2NzQsNTE2NzYsNTE2NzcsNTE2ODAsNTE2ODIsNTE2ODQsNTE2ODcsNTE2OTIsNTE2OTMsNTE2OTUsNTE2OTYsNTE2OTcsNTE3MDQsNTE3MDUsNTE3MDgsNTE3MTIsNTE3MjAsNTE3MjEsNTE3MjMsNTE3MjQsNTE3MjUsNTE3MzIsNTE3MzYsNTE3NTMsNTE3ODgsNTE3ODksNTE3OTIsNTE3OTYsNTE4MDQsNTE4MDUsNTE4MDcsNTE4MDgsNTE4MDksNTE4MTYsNTE4MzcsNTE4NDQsNTE4NjQsNTE5MDAsNTE5MDEsNTE5MDQsNTE5MDgsNTE5MTYsNTE5MTcsNTE5MTksNTE5MjEsNTE5MjMsNTE5MjgsNTE5MjksNTE5MzYsNTE5NDgsNTE5NTYsNTE5NzYsNTE5ODQsNTE5ODgsNTE5OTIsNTIwMDAsNTIwMDEsNTIwMzMsNTIwNDAsNTIwNDEsNTIwNDQsNTIwNDgsNTIwNTYsNTIwNTcsNTIwNjEsNTIwNjgsNTIwODgsNTIwODksNTIxMjQsNTIxNTIsNTIxODAsNTIxOTYsNTIxOTksNTIyMDEsNTIyMzYsNTIyMzcsNTIyNDAsNTIyNDQsNTIyNTIsNTIyNTMsNTIyNTcsNTIyNTgsNTIyNjMsNTIyNjQsNTIyNjUsNTIyNjgsNTIyNzAsNTIyNzIsNTIyODAsNTIyODEsNTIyODMsNTQ4NDUsNTQ4NDYsNTQ4NDcsNTQ4NDksNTQ4NTAsNTQ4NTEsNTQ4NTIsNTQ4NTQsNTQ4NTUsNTQ4NTgsNTQ4NjAsNTQ4NjIsNTQ4NjMsNTQ4NjQsNTQ4NjYsNTQ4NjcsNTQ4NzAsNTQ4NzEsNTQ4NzMsNTQ4NzQsNTQ4NzUsNTQ4NzcsNTQ4NzgsNTQ4NzksNTQ4ODAsNTQ4ODEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ4ODIsNTQ4ODMsNTQ4ODQsNTQ4ODUsNTQ4ODYsNTQ4ODgsNTQ4OTAsNTQ4OTEsNTQ4OTIsNTQ4OTMsNTQ4OTQsNTQ4OTUsNTQ4OTgsNTQ4OTksNTQ5MDEsNTQ5MDIsNTQ5MDMsNTQ5MDQsNTQ5MDUsNTQ5MDYsNTQ5MDcsNTQ5MDgsNTQ5MDksNTQ5MTAsNTQ5MTEsNTQ5MTIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ5MTMsNTQ5MTQsNTQ5MTYsNTQ5MTgsNTQ5MTksNTQ5MjAsNTQ5MjEsNTQ5MjIsNTQ5MjMsNTQ5MjYsNTQ5MjcsNTQ5MjksNTQ5MzAsNTQ5MzEsNTQ5MzMsNTQ5MzQsNTQ5MzUsNTQ5MzYsNTQ5MzcsNTQ5MzgsNTQ5MzksNTQ5NDAsNTQ5NDIsNTQ5NDQsNTQ5NDYsNTQ5NDcsNTQ5NDgsNTQ5NDksNTQ5NTAsNTQ5NTEsNTQ5NTMsNTQ5NTQsNTIyODQsNTIyODUsNTIyODYsNTIyOTIsNTIyOTMsNTIyOTYsNTIzMDAsNTIzMDgsNTIzMDksNTIzMTEsNTIzMTIsNTIzMTMsNTIzMjAsNTIzMjQsNTIzMjYsNTIzMjgsNTIzMzYsNTIzNDEsNTIzNzYsNTIzNzcsNTIzODAsNTIzODQsNTIzOTIsNTIzOTMsNTIzOTUsNTIzOTYsNTIzOTcsNTI0MDQsNTI0MDUsNTI0MDgsNTI0MTIsNTI0MjAsNTI0MjEsNTI0MjMsNTI0MjUsNTI0MzIsNTI0MzYsNTI0NTIsNTI0NjAsNTI0NjQsNTI0ODEsNTI0ODgsNTI0ODksNTI0OTIsNTI0OTYsNTI1MDQsNTI1MDUsNTI1MDcsNTI1MDksNTI1MTYsNTI1MjAsNTI1MjQsNTI1MzcsNTI1NzIsNTI1NzYsNTI1ODAsNTI1ODgsNTI1ODksNTI1OTEsNTI1OTMsNTI2MDAsNTI2MTYsNTI2MjgsNTI2MjksNTI2MzIsNTI2MzYsNTI2NDQsNTI2NDUsNTI2NDcsNTI2NDksNTI2NTYsNTI2NzYsNTI2ODQsNTI2ODgsNTI3MTIsNTI3MTYsNTI3MjAsNTI3MjgsNTI3MjksNTI3MzEsNTI3MzMsNTI3NDAsNTI3NDQsNTI3NDgsNTI3NTYsNTI3NjEsNTI3NjgsNTI3NjksNTI3NzIsNTI3NzYsNTI3ODQsNTI3ODUsNTI3ODcsNTI3ODksNTQ5NTUsNTQ5NTcsNTQ5NTgsNTQ5NTksNTQ5NjEsNTQ5NjIsNTQ5NjMsNTQ5NjQsNTQ5NjUsNTQ5NjYsNTQ5NjcsNTQ5NjgsNTQ5NzAsNTQ5NzIsNTQ5NzMsNTQ5NzQsNTQ5NzUsNTQ5NzYsNTQ5NzcsNTQ5NzgsNTQ5NzksNTQ5ODIsNTQ5ODMsNTQ5ODUsNTQ5ODYsNTQ5ODcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ5ODksNTQ5OTAsNTQ5OTEsNTQ5OTIsNTQ5OTQsNTQ5OTUsNTQ5OTcsNTQ5OTgsNTUwMDAsNTUwMDIsNTUwMDMsNTUwMDQsNTUwMDUsNTUwMDYsNTUwMDcsNTUwMDksNTUwMTAsNTUwMTEsNTUwMTMsNTUwMTQsNTUwMTUsNTUwMTcsNTUwMTgsNTUwMTksNTUwMjAsNTUwMjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTUwMjIsNTUwMjMsNTUwMjUsNTUwMjYsNTUwMjcsNTUwMjgsNTUwMzAsNTUwMzEsNTUwMzIsNTUwMzMsNTUwMzQsNTUwMzUsNTUwMzgsNTUwMzksNTUwNDEsNTUwNDIsNTUwNDMsNTUwNDUsNTUwNDYsNTUwNDcsNTUwNDgsNTUwNDksNTUwNTAsNTUwNTEsNTUwNTIsNTUwNTMsNTUwNTQsNTUwNTUsNTUwNTYsNTUwNTgsNTUwNTksNTUwNjAsNTI4MjQsNTI4MjUsNTI4MjgsNTI4MzEsNTI4MzIsNTI4MzMsNTI4NDAsNTI4NDEsNTI4NDMsNTI4NDUsNTI4NTIsNTI4NTMsNTI4NTYsNTI4NjAsNTI4NjgsNTI4NjksNTI4NzEsNTI4NzMsNTI4ODAsNTI4ODEsNTI4ODQsNTI4ODgsNTI4OTYsNTI4OTcsNTI4OTksNTI5MDAsNTI5MDEsNTI5MDgsNTI5MDksNTI5MjksNTI5NjQsNTI5NjUsNTI5NjgsNTI5NzEsNTI5NzIsNTI5ODAsNTI5ODEsNTI5ODMsNTI5ODQsNTI5ODUsNTI5OTIsNTI5OTMsNTI5OTYsNTMwMDAsNTMwMDgsNTMwMDksNTMwMTEsNTMwMTMsNTMwMjAsNTMwMjQsNTMwMjgsNTMwMzYsNTMwMzcsNTMwMzksNTMwNDAsNTMwNDEsNTMwNDgsNTMwNzYsNTMwNzcsNTMwODAsNTMwODQsNTMwOTIsNTMwOTMsNTMwOTUsNTMwOTcsNTMxMDQsNTMxMDUsNTMxMDgsNTMxMTIsNTMxMjAsNTMxMjUsNTMxMzIsNTMxNTMsNTMxNjAsNTMxNjgsNTMxODgsNTMyMTYsNTMyMTcsNTMyMjAsNTMyMjQsNTMyMzIsNTMyMzMsNTMyMzUsNTMyMzcsNTMyNDQsNTMyNDgsNTMyNTIsNTMyNjUsNTMyNzIsNTMyOTMsNTMzMDAsNTMzMDEsNTMzMDQsNTMzMDgsNTUwNjEsNTUwNjIsNTUwNjMsNTUwNjYsNTUwNjcsNTUwNjksNTUwNzAsNTUwNzEsNTUwNzMsNTUwNzQsNTUwNzUsNTUwNzYsNTUwNzcsNTUwNzgsNTUwNzksNTUwODIsNTUwODQsNTUwODYsNTUwODcsNTUwODgsNTUwODksNTUwOTAsNTUwOTEsNTUwOTQsNTUwOTUsNTUwOTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTUwOTgsNTUwOTksNTUxMDEsNTUxMDIsNTUxMDMsNTUxMDQsNTUxMDUsNTUxMDYsNTUxMDcsNTUxMDksNTUxMTAsNTUxMTIsNTUxMTQsNTUxMTUsNTUxMTYsNTUxMTcsNTUxMTgsNTUxMTksNTUxMjIsNTUxMjMsNTUxMjUsNTUxMzAsNTUxMzEsNTUxMzIsNTUxMzMsNTUxMzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTUxMzUsNTUxMzgsNTUxNDAsNTUxNDIsNTUxNDMsNTUxNDQsNTUxNDYsNTUxNDcsNTUxNDksNTUxNTAsNTUxNTEsNTUxNTMsNTUxNTQsNTUxNTUsNTUxNTcsNTUxNTgsNTUxNTksNTUxNjAsNTUxNjEsNTUxNjIsNTUxNjMsNTUxNjYsNTUxNjcsNTUxNjgsNTUxNzAsNTUxNzEsNTUxNzIsNTUxNzMsNTUxNzQsNTUxNzUsNTUxNzgsNTUxNzksNTMzMTYsNTMzMTcsNTMzMTksNTMzMjEsNTMzMjgsNTMzMzIsNTMzMzYsNTMzNDQsNTMzNTYsNTMzNTcsNTMzNjAsNTMzNjQsNTMzNzIsNTMzNzMsNTMzNzcsNTM0MTIsNTM0MTMsNTM0MTYsNTM0MjAsNTM0MjgsNTM0MjksNTM0MzEsNTM0MzMsNTM0NDAsNTM0NDEsNTM0NDQsNTM0NDgsNTM0NDksNTM0NTYsNTM0NTcsNTM0NTksNTM0NjAsNTM0NjEsNTM0NjgsNTM0NjksNTM0NzIsNTM0NzYsNTM0ODQsNTM0ODUsNTM0ODcsNTM0ODgsNTM0ODksNTM0OTYsNTM1MTcsNTM1NTIsNTM1NTMsNTM1NTYsNTM1NjAsNTM1NjIsNTM1NjgsNTM1NjksNTM1NzEsNTM1NzIsNTM1NzMsNTM1ODAsNTM1ODEsNTM1ODQsNTM1ODgsNTM1OTYsNTM1OTcsNTM1OTksNTM2MDEsNTM2MDgsNTM2MTIsNTM2MjgsNTM2MzYsNTM2NDAsNTM2NjQsNTM2NjUsNTM2NjgsNTM2NzIsNTM2ODAsNTM2ODEsNTM2ODMsNTM2ODUsNTM2OTAsNTM2OTIsNTM2OTYsNTM3MjAsNTM3NDgsNTM3NTIsNTM3NjcsNTM3NjksNTM3NzYsNTM4MDQsNTM4MDUsNTM4MDgsNTM4MTIsNTM4MjAsNTM4MjEsNTM4MjMsNTM4MjUsNTM4MzIsNTM4NTIsNTUxODEsNTUxODIsNTUxODMsNTUxODUsNTUxODYsNTUxODcsNTUxODgsNTUxODksNTUxOTAsNTUxOTEsNTUxOTQsNTUxOTYsNTUxOTgsNTUxOTksNTUyMDAsNTUyMDEsNTUyMDIsNTUyMDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM4NjAsNTM4ODgsNTM4ODksNTM4OTIsNTM4OTYsNTM5MDQsNTM5MDUsNTM5MDksNTM5MTYsNTM5MjAsNTM5MjQsNTM5MzIsNTM5MzcsNTM5NDQsNTM5NDUsNTM5NDgsNTM5NTEsNTM5NTIsNTM5NTQsNTM5NjAsNTM5NjEsNTM5NjMsNTM5NzIsNTM5NzYsNTM5ODAsNTM5ODgsNTM5ODksNTQwMDAsNTQwMDEsNTQwMDQsNTQwMDgsNTQwMTYsNTQwMTcsNTQwMTksNTQwMjEsNTQwMjgsNTQwMjksNTQwMzAsNTQwMzIsNTQwMzYsNTQwMzgsNTQwNDQsNTQwNDUsNTQwNDcsNTQwNDgsNTQwNDksNTQwNTMsNTQwNTYsNTQwNTcsNTQwNjAsNTQwNjQsNTQwNzIsNTQwNzMsNTQwNzUsNTQwNzYsNTQwNzcsNTQwODQsNTQwODUsNTQxNDAsNTQxNDEsNTQxNDQsNTQxNDgsNTQxNTYsNTQxNTcsNTQxNTksNTQxNjAsNTQxNjEsNTQxNjgsNTQxNjksNTQxNzIsNTQxNzYsNTQxODQsNTQxODUsNTQxODcsNTQxODksNTQxOTYsNTQyMDAsNTQyMDQsNTQyMTIsNTQyMTMsNTQyMTYsNTQyMTcsNTQyMjQsNTQyMzIsNTQyNDEsNTQyNDMsNTQyNTIsNTQyNTMsNTQyNTYsNTQyNjAsNTQyNjgsNTQyNjksNTQyNzEsNTQyNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQyODAsNTQzMDEsNTQzMzYsNTQzNDAsNTQzNjQsNTQzNjgsNTQzNzIsNTQzODEsNTQzODMsNTQzOTIsNTQzOTMsNTQzOTYsNTQzOTksNTQ0MDAsNTQ0MDIsNTQ0MDgsNTQ0MDksNTQ0MTEsNTQ0MTMsNTQ0MjAsNTQ0NDEsNTQ0NzYsNTQ0ODAsNTQ0ODQsNTQ0OTIsNTQ0OTUsNTQ1MDQsNTQ1MDgsNTQ1MTIsNTQ1MjAsNTQ1MjMsNTQ1MjUsNTQ1MzIsNTQ1MzYsNTQ1NDAsNTQ1NDgsNTQ1NDksNTQ1NTEsNTQ1ODgsNTQ1ODksNTQ1OTIsNTQ1OTYsNTQ2MDQsNTQ2MDUsNTQ2MDcsNTQ2MDksNTQ2MTYsNTQ2MTcsNTQ2MjAsNTQ2MjQsNTQ2MjksNTQ2MzIsNTQ2MzMsNTQ2MzUsNTQ2MzcsNTQ2NDQsNTQ2NDUsNTQ2NDgsNTQ2NTIsNTQ2NjAsNTQ2NjEsNTQ2NjMsNTQ2NjQsNTQ2NjUsNTQ2NzIsNTQ2OTMsNTQ3MjgsNTQ3MjksNTQ3MzIsNTQ3MzYsNTQ3MzgsNTQ3NDQsNTQ3NDUsNTQ3NDcsNTQ3NDksNTQ3NTYsNTQ3NTcsNTQ3NjAsNTQ3NjQsNTQ3NzIsNTQ3NzMsNTQ3NzUsNTQ3NzcsNTQ3ODQsNTQ3ODUsNTQ3ODgsNTQ3OTIsNTQ4MDAsNTQ4MDEsNTQ4MDMsNTQ4MDQsNTQ4MDUsNTQ4MTIsNTQ4MTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ4MjAsNTQ4MjksNTQ4NDAsNTQ4NDEsNTQ4NDQsNTQ4NDgsNTQ4NTMsNTQ4NTYsNTQ4NTcsNTQ4NTksNTQ4NjEsNTQ4NjUsNTQ4NjgsNTQ4NjksNTQ4NzIsNTQ4NzYsNTQ4ODcsNTQ4ODksNTQ4OTYsNTQ4OTcsNTQ5MDAsNTQ5MTUsNTQ5MTcsNTQ5MjQsNTQ5MjUsNTQ5MjgsNTQ5MzIsNTQ5NDEsNTQ5NDMsNTQ5NDUsNTQ5NTIsNTQ5NTYsNTQ5NjAsNTQ5NjksNTQ5NzEsNTQ5ODAsNTQ5ODEsNTQ5ODQsNTQ5ODgsNTQ5OTMsNTQ5OTYsNTQ5OTksNTUwMDEsNTUwMDgsNTUwMTIsNTUwMTYsNTUwMjQsNTUwMjksNTUwMzYsNTUwMzcsNTUwNDAsNTUwNDQsNTUwNTcsNTUwNjQsNTUwNjUsNTUwNjgsNTUwNzIsNTUwODAsNTUwODEsNTUwODMsNTUwODUsNTUwOTIsNTUwOTMsNTUwOTYsNTUxMDAsNTUxMDgsNTUxMTEsNTUxMTMsNTUxMjAsNTUxMjEsNTUxMjQsNTUxMjYsNTUxMjcsNTUxMjgsNTUxMjksNTUxMzYsNTUxMzcsNTUxMzksNTUxNDEsNTUxNDUsNTUxNDgsNTUxNTIsNTUxNTYsNTUxNjQsNTUxNjUsNTUxNjksNTUxNzYsNTUxNzcsNTUxODAsNTUxODQsNTUxOTIsNTUxOTMsNTUxOTUsNTUxOTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDI4NSwyMDMzOSwyMDU1MSwyMDcyOSwyMTE1MiwyMTQ4NywyMTYyMSwyMTczMywyMjAyNSwyMzIzMywyMzQ3OCwyNjI0NywyNjU1MCwyNjU1MSwyNjYwNywyNzQ2OCwyOTYzNCwzMDE0NiwzMTI5MiwzMzQ5OSwzMzU0MCwzNDkwMywzNDk1MiwzNTM4MiwzNjA0MCwzNjMwMywzNjYwMywzNjgzOCwzOTM4MSwyMTA1MSwyMTM2NCwyMTUwOCwyNDY4MiwyNDkzMiwyNzU4MCwyOTY0NywzMzA1MCwzNTI1OCwzNTI4MiwzODMwNywyMDM1NSwyMTAwMiwyMjcxOCwyMjkwNCwyMzAxNCwyNDE3OCwyNDE4NSwyNTAzMSwyNTUzNiwyNjQzOCwyNjYwNCwyNjc1MSwyODU2NywzMDI4NiwzMDQ3NSwzMDk2NSwzMTI0MCwzMTQ4NywzMTc3NywzMjkyNSwzMzM5MCwzMzM5MywzNTU2MywzODI5MSwyMDA3NSwyMTkxNywyNjM1OSwyODIxMiwzMDg4MywzMTQ2OSwzMzg4MywzNTA4OCwzNDYzOCwzODgyNCwyMTIwOCwyMjM1MCwyMjU3MCwyMzg4NCwyNDg2MywyNTAyMiwyNTEyMSwyNTk1NCwyNjU3NywyNzIwNCwyODE4NywyOTk3NiwzMDEzMSwzMDQzNSwzMDY0MCwzMjA1OCwzNzAzOSwzNzk2OSwzNzk3MCw0MDg1MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTI4MywyMzcyNCwzMDAwMiwzMjk4NywzNzQ0MCwzODI5NiwyMTA4MywyMjUzNiwyMzAwNCwyMzcxMywyMzgzMSwyNDI0NywyNDM3OCwyNDM5NCwyNDk1MSwyNzc0MywzMDA3NCwzMDA4NiwzMTk2OCwzMjExNSwzMjE3NywzMjY1MiwzMzEwOCwzMzMxMywzNDE5MywzNTEzNywzNTYxMSwzNzYyOCwzODQ3Nyw0MDAwNywyMDE3MSwyMDIxNSwyMDQ5MSwyMDk3NywyMjYwNywyNDg4NywyNDg5NCwyNDkzNiwyNTkxMywyNzExNCwyODQzMywzMDExNywzMDM0MiwzMDQyMiwzMTYyMywzMzQ0NSwzMzk5NSw2Mzc0NCwzNzc5OSwzODI4MywyMTg4OCwyMzQ1OCwyMjM1Myw2Mzc0NSwzMTkyMywzMjY5NywzNzMwMSwyMDUyMCwyMTQzNSwyMzYyMSwyNDA0MCwyNTI5OCwyNTQ1NCwyNTgxOCwyNTgzMSwyODE5MiwyODg0NCwzMTA2NywzNjMxNywzNjM4Miw2Mzc0NiwzNjk4OSwzNzQ0NSwzNzYyNCwyMDA5NCwyMDIxNCwyMDU4MSwyNDA2MiwyNDMxNCwyNDgzOCwyNjk2NywzMzEzNywzNDM4OCwzNjQyMywzNzc0OSwzOTQ2NywyMDA2MiwyMDYyNSwyNjQ4MCwyNjY4OCwyMDc0NSwyMTEzMywyMTEzOCwyNzI5OCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMDY1MiwzNzM5Miw0MDY2MCwyMTE2MywyNDYyMywzNjg1MCwyMDU1MiwyNTAwMSwyNTU4MSwyNTgwMiwyNjY4NCwyNzI2OCwyODYwOCwzMzE2MCwzNTIzMywzODU0OCwyMjUzMywyOTMwOSwyOTM1NiwyOTk1NiwzMjEyMSwzMjM2NSwzMjkzNywzNTIxMSwzNTcwMCwzNjk2Myw0MDI3MywyNTIyNSwyNzc3MCwyODUwMCwzMjA4MCwzMjU3MCwzNTM2MywyMDg2MCwyNDkwNiwzMTY0NSwzNTYwOSwzNzQ2MywzNzc3MiwyMDE0MCwyMDQzNSwyMDUxMCwyMDY3MCwyMDc0MiwyMTE4NSwyMTE5NywyMTM3NSwyMjM4NCwyMjY1OSwyNDIxOCwyNDQ2NSwyNDk1MCwyNTAwNCwyNTgwNiwyNTk2NCwyNjIyMywyNjI5OSwyNjM1NiwyNjc3NSwyODAzOSwyODgwNSwyODkxMywyOTg1NSwyOTg2MSwyOTg5OCwzMDE2OSwzMDgyOCwzMDk1NiwzMTQ1NSwzMTQ3OCwzMjA2OSwzMjE0NywzMjc4OSwzMjgzMSwzMzA1MSwzMzY4NiwzNTY4NiwzNjYyOSwzNjg4NSwzNzg1NywzODkxNSwzODk2OCwzOTUxNCwzOTkxMiwyMDQxOCwyMTg0MywyMjU4NiwyMjg2NSwyMzM5NSwyMzYyMiwyNDc2MCwyNTEwNiwyNjY5MCwyNjgwMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg1NiwyODMzMCwzMDAyOCwzMDMyOCwzMDkyNiwzMTI5MywzMTk5NSwzMjM2MywzMjM4MCwzNTMzNiwzNTQ4OSwzNTkwMywzODU0Miw0MDM4OCwyMTQ3NiwyMTQ4MSwyMTU3OCwyMTYxNywyMjI2NiwyMjk5MywyMzM5NiwyMzYxMSwyNDIzNSwyNTMzNSwyNTkxMSwyNTkyNSwyNTk3MCwyNjI3MiwyNjU0MywyNzA3MywyNzgzNywzMDIwNCwzMDM1MiwzMDU5MCwzMTI5NSwzMjY2MCwzMjc3MSwzMjkyOSwzMzE2NywzMzUxMCwzMzUzMywzMzc3NiwzNDI0MSwzNDg2NSwzNDk5NiwzNTQ5Myw2Mzc0NywzNjc2NCwzNzY3OCwzODU5OSwzOTAxNSwzOTY0MCw0MDcyMywyMTc0MSwyNjAxMSwyNjM1NCwyNjc2NywzMTI5NiwzNTg5NSw0MDI4OCwyMjI1NiwyMjM3MiwyMzgyNSwyNjExOCwyNjgwMSwyNjgyOSwyODQxNCwyOTczNiwzNDk3NCwzOTkwOCwyNzc1Miw2Mzc0OCwzOTU5MiwyMDM3OSwyMDg0NCwyMDg0OSwyMTE1MSwyMzM4MCwyNDAzNywyNDY1NiwyNDY4NSwyNTMyOSwyNTUxMSwyNTkxNSwyOTY1NywzMTM1NCwzNDQ2NywzNjAwMiwzODc5OSwyMDAxOCwyMzUyMSwyNTA5NiwyNjUyNCwyOTkxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTE4NSwzMzc0NywzNTQ2MywzNTUwNiwzNjMyOCwzNjk0MiwzNzcwNywzODk4MiwyNDI3NSwyNzExMiwzNDMwMywzNzEwMSw2Mzc0OSwyMDg5NiwyMzQ0OCwyMzUzMiwyNDkzMSwyNjg3NCwyNzQ1NCwyODc0OCwyOTc0MywyOTkxMiwzMTY0OSwzMjU5MiwzMzczMywzNTI2NCwzNjAxMSwzODM2NCwzOTIwOCwyMTAzOCwyNDY2OSwyNTMyNCwzNjg2NiwyMDM2MiwyMDgwOSwyMTI4MSwyMjc0NSwyNDI5MSwyNjMzNiwyNzk2MCwyODgyNiwyOTM3OCwyOTY1NCwzMTU2OCwzMzAwOSwzNzk3OSwyMTM1MCwyNTQ5OSwzMjYxOSwyMDA1NCwyMDYwOCwyMjYwMiwyMjc1MCwyNDYxOCwyNDg3MSwyNTI5NiwyNzA4OCwzOTc0NSwyMzQzOSwzMjAyNCwzMjk0NSwzNjcwMywyMDEzMiwyMDY4OSwyMTY3NiwyMTkzMiwyMzMwOCwyMzk2OCwyNDAzOSwyNTg5OCwyNTkzNCwyNjY1NywyNzIxMSwyOTQwOSwzMDM1MCwzMDcwMywzMjA5NCwzMjc2MSwzMzE4NCwzNDEyNiwzNDUyNywzNjYxMSwzNjY4NiwzNzA2NiwzOTE3MSwzOTUwOSwzOTg1MSwxOTk5MiwyMDAzNywyMDA2MSwyMDE2NywyMDQ2NSwyMDg1NSwyMTI0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTMxMiwyMTQ3NSwyMTQ3NywyMTY0NiwyMjAzNiwyMjM4OSwyMjQzNCwyMzQ5NSwyMzk0MywyNDI3MiwyNTA4NCwyNTMwNCwyNTkzNywyNjU1MiwyNjYwMSwyNzA4MywyNzQ3MiwyNzU5MCwyNzYyOCwyNzcxNCwyODMxNywyODc5MiwyOTM5OSwyOTU5MCwyOTY5OSwzMDY1NSwzMDY5NywzMTM1MCwzMjEyNywzMjc3NywzMzI3NiwzMzI4NSwzMzI5MCwzMzUwMywzNDkxNCwzNTYzNSwzNjA5MiwzNjU0NCwzNjg4MSwzNzA0MSwzNzQ3NiwzNzU1OCwzOTM3OCwzOTQ5Myw0MDE2OSw0MDQwNyw0MDg2MCwyMjI4MywyMzYxNiwzMzczOCwzODgxNiwzODgyNyw0MDYyOCwyMTUzMSwzMTM4NCwzMjY3NiwzNTAzMywzNjU1NywzNzA4OSwyMjUyOCwyMzYyNCwyNTQ5NiwzMTM5MSwyMzQ3MCwyNDMzOSwzMTM1MywzMTQwNiwzMzQyMiwzNjUyNCwyMDUxOCwyMTA0OCwyMTI0MCwyMTM2NywyMjI4MCwyNTMzMSwyNTQ1OCwyNzQwMiwyODA5OSwzMDUxOSwyMTQxMywyOTUyNywzNDE1MiwzNjQ3MCwzODM1NywyNjQyNiwyNzMzMSwyODUyOCwzNTQzNywzNjU1NiwzOTI0Myw2Mzc1MCwyNjIzMSwyNzUxMiwzNjAyMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzOTc0MCw2Mzc1MSwyMTQ4MywyMjMxNywyMjg2MiwyNTU0MiwyNzEzMSwyOTY3NCwzMDc4OSwzMTQxOCwzMTQyOSwzMTk5OCwzMzkwOSwzNTIxNSwzNjIxMSwzNjkxNywzODMxMiwyMTI0MywyMjM0MywzMDAyMywzMTU4NCwzMzc0MCwzNzQwNiw2Mzc1MiwyNzIyNCwyMDgxMSwyMTA2NywyMTEyNywyNTExOSwyNjg0MCwyNjk5NywzODU1MywyMDY3NywyMTE1NiwyMTIyMCwyNTAyNywyNjAyMCwyNjY4MSwyNzEzNSwyOTgyMiwzMTU2MywzMzQ2NSwzMzc3MSwzNTI1MCwzNTY0MSwzNjgxNywzOTI0MSw2Mzc1MywyMDE3MCwyMjkzNSwyNTgxMCwyNjEyOSwyNzI3OCwyOTc0OCwzMTEwNSwzMTE2NSwzMzQ0OSwzNDk0MiwzNDk0MywzNTE2Nyw2Mzc1NCwzNzY3MCwyMDIzNSwyMTQ1MCwyNDYxMywyNTIwMSwyNzc2MiwzMjAyNiwzMjEwMiwyMDEyMCwyMDgzNCwzMDY4NCwzMjk0MywyMDIyNSwyMDIzOCwyMDg1NCwyMDg2NCwyMTk4MCwyMjEyMCwyMjMzMSwyMjUyMiwyMjUyNCwyMjgwNCwyMjg1NSwyMjkzMSwyMzQ5MiwyMzY5NiwyMzgyMiwyNDA0OSwyNDE5MCwyNDUyNCwyNTIxNiwyNjA3MSwyNjA4MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjM5OCwyNjM5OSwyNjQ2MiwyNjgyNywyNjgyMCwyNzIzMSwyNzQ1MCwyNzY4MywyNzc3MywyNzc3OCwyODEwMywyOTU5MiwyOTczNCwyOTczOCwyOTgyNiwyOTg1OSwzMDA3MiwzMDA3OSwzMDg0OSwzMDk1OSwzMTA0MSwzMTA0NywzMTA0OCwzMTA5OCwzMTYzNywzMjAwMCwzMjE4NiwzMjY0OCwzMjc3NCwzMjgxMywzMjkwOCwzNTM1MiwzNTY2MywzNTkxMiwzNjIxNSwzNzY2NSwzNzY2OCwzOTEzOCwzOTI0OSwzOTQzOCwzOTQzOSwzOTUyNSw0MDU5NCwzMjIwMiwyMDM0MiwyMTUxMywyNTMyNiwyNjcwOCwzNzMyOSwyMTkzMSwyMDc5NCw2Mzc1NSw2Mzc1NiwyMzA2OCwyNTA2Miw2Mzc1NywyNTI5NSwyNTM0Myw2Mzc1OCw2Mzc1OSw2Mzc2MCw2Mzc2MSw2Mzc2Miw2Mzc2MywzNzAyNyw2Mzc2NCw2Mzc2NSw2Mzc2Niw2Mzc2Nyw2Mzc2OCwzNTU4Miw2Mzc2OSw2Mzc3MCw2Mzc3MSw2Mzc3MiwyNjI2Miw2Mzc3MywyOTAxNCw2Mzc3NCw2Mzc3NSwzODYyNyw2Mzc3NiwyNTQyMywyNTQ2NiwyMTMzNSw2Mzc3NywyNjUxMSwyNjk3NiwyODI3NSw2Mzc3OCwzMDAwNyw2Mzc3OSw2Mzc4MCw2Mzc4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjAxMyw2Mzc4Miw2Mzc4MywzNDkzMCwyMjIxOCwyMzA2NCw2Mzc4NCw2Mzc4NSw2Mzc4Niw2Mzc4Nyw2Mzc4OCwyMDAzNSw2Mzc4OSwyMDgzOSwyMjg1NiwyNjYwOCwzMjc4NCw2Mzc5MCwyMjg5OSwyNDE4MCwyNTc1NCwzMTE3OCwyNDU2NSwyNDY4NCwyNTI4OCwyNTQ2NywyMzUyNywyMzUxMSwyMTE2Miw2Mzc5MSwyMjkwMCwyNDM2MSwyNDU5NCw2Mzc5Miw2Mzc5Myw2Mzc5NCwyOTc4NSw2Mzc5NSw2Mzc5Niw2Mzc5Nyw2Mzc5OCw2Mzc5OSw2MzgwMCwzOTM3Nyw2MzgwMSw2MzgwMiw2MzgwMyw2MzgwNCw2MzgwNSw2MzgwNiw2MzgwNyw2MzgwOCw2MzgwOSw2MzgxMCw2MzgxMSwyODYxMSw2MzgxMiw2MzgxMywzMzIxNSwzNjc4NiwyNDgxNyw2MzgxNCw2MzgxNSwzMzEyNiw2MzgxNiw2MzgxNywyMzYxNSw2MzgxOCw2MzgxOSw2MzgyMCw2MzgyMSw2MzgyMiw2MzgyMyw2MzgyNCw2MzgyNSwyMzI3MywzNTM2NSwyNjQ5MSwzMjAxNiw2MzgyNiw2MzgyNyw2MzgyOCw2MzgyOSw2MzgzMCw2MzgzMSwzMzAyMSw2MzgzMiw2MzgzMywyMzYxMiwyNzg3NywyMTMxMSwyODM0NiwyMjgxMCwzMzU5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDAyNSwyMDE1MCwyMDI5NCwyMTkzNCwyMjI5NiwyMjcyNywyNDQwNiwyNjAzOSwyNjA4NiwyNzI2NCwyNzU3MywyODIzNywzMDcwMSwzMTQ3MSwzMTc3NCwzMjIyMiwzNDUwNywzNDk2MiwzNzE3MCwzNzcyMywyNTc4NywyODYwNiwyOTU2MiwzMDEzNiwzNjk0OCwyMTg0NiwyMjM0OSwyNTAxOCwyNTgxMiwyNjMxMSwyODEyOSwyODI1MSwyODUyNSwyODYwMSwzMDE5MiwzMjgzNSwzMzIxMywzNDExMywzNTIwMywzNTUyNywzNTY3NCwzNzY2MywyNzc5NSwzMDAzNSwzMTU3MiwzNjM2NywzNjk1NywyMTc3NiwyMjUzMCwyMjYxNiwyNDE2MiwyNTA5NSwyNTc1OCwyNjg0OCwzMDA3MCwzMTk1OCwzNDczOSw0MDY4MCwyMDE5NSwyMjQwOCwyMjM4MiwyMjgyMywyMzU2NSwyMzcyOSwyNDExOCwyNDQ1MywyNTE0MCwyNTgyNSwyOTYxOSwzMzI3NCwzNDk1NSwzNjAyNCwzODUzOCw0MDY2NywyMzQyOSwyNDUwMywyNDc1NSwyMDQ5OCwyMDk5MiwyMTA0MCwyMjI5NCwyMjU4MSwyMjYxNSwyMzU2NiwyMzY0OCwyMzc5OCwyMzk0NywyNDIzMCwyNDQ2NiwyNDc2NCwyNTM2MSwyNTQ4MSwyNTYyMywyNjY5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg3MywyNzMzMCwyODEyMCwyODE5MywyODM3MiwyODY0NCwyOTE4MiwzMDQyOCwzMDU4NSwzMTE1MywzMTI5MSwzMzc5NiwzNTI0MSwzNjA3NywzNjMzOSwzNjQyNCwzNjg2NywzNjg4NCwzNjk0NywzNzExNywzNzcwOSwzODUxOCwzODg3NiwyNzYwMiwyODY3OCwyOTI3MiwyOTM0NiwyOTU0NCwzMDU2MywzMTE2NywzMTcxNiwzMjQxMSwzNTcxMiwyMjY5NywyNDc3NSwyNTk1OCwyNjEwOSwyNjMwMiwyNzc4OCwyODk1OCwyOTEyOSwzNTkzMCwzODkzMSwyMDA3NywzMTM2MSwyMDE4OSwyMDkwOCwyMDk0MSwyMTIwNSwyMTUxNiwyNDk5OSwyNjQ4MSwyNjcwNCwyNjg0NywyNzkzNCwyODU0MCwzMDE0MCwzMDY0MywzMTQ2MSwzMzAxMiwzMzg5MSwzNzUwOSwyMDgyOCwyNjAwNywyNjQ2MCwyNjUxNSwzMDE2OCwzMTQzMSwzMzY1MSw2MzgzNCwzNTkxMCwzNjg4NywzODk1NywyMzY2MywzMzIxNiwzMzQzNCwzNjkyOSwzNjk3NSwzNzM4OSwyNDQ3MSwyMzk2NSwyNzIyNSwyOTEyOCwzMDMzMSwzMTU2MSwzNDI3NiwzNTU4OCwzNzE1OSwzOTQ3MiwyMTg5NSwyNTA3OCw2MzgzNSwzMDMxMywzMjY0NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNDM2NywzNDc0NiwzNTA2NCwzNzAwNyw2MzgzNiwyNzkzMSwyODg4OSwyOTY2MiwzMjA5NywzMzg1Myw2MzgzNywzNzIyNiwzOTQwOSw2MzgzOCwyMDA5OCwyMTM2NSwyNzM5NiwyNzQxMCwyODczNCwyOTIxMSwzNDM0OSw0MDQ3OCwyMTA2OCwzNjc3MSwyMzg4OCwyNTgyOSwyNTkwMCwyNzQxNCwyODY1MSwzMTgxMSwzMjQxMiwzNDI1MywzNTE3MiwzNTI2MSwyNTI4OSwzMzI0MCwzNDg0NywyNDI2NiwyNjM5MSwyODAxMCwyOTQzNiwyOTcwMSwyOTgwNywzNDY5MCwzNzA4NiwyMDM1OCwyMzgyMSwyNDQ4MCwzMzgwMiwyMDkxOSwyNTUwNCwzMDA1MywyMDE0MiwyMDQ4NiwyMDg0MSwyMDkzNywyNjc1MywyNzE1MywzMTkxOCwzMTkyMSwzMTk3NSwzMzM5MSwzNTUzOCwzNjYzNSwzNzMyNywyMDQwNiwyMDc5MSwyMTIzNywyMTU3MCwyNDMwMCwyNDk0MiwyNTE1MCwyNjA1MywyNzM1NCwyODY3MCwzMTAxOCwzNDI2OCwzNDg1MSwzODMxNywzOTUyMiwzOTUzMCw0MDU5OSw0MDY1NCwyMTE0NywyNjMxMCwyNzUxMSwyODcwMSwzMTAxOSwzNjcwNiwzODcyMiwyNDk3NiwyNTA4OCwyNTg5MSwyODQ1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTAwMSwyOTgzMywzMjI0NCwzMjg3OSwzNDAzMCwzNjY0NiwzNjg5OSwzNzcwNiwyMDkyNSwyMTAxNSwyMTE1NSwyNzkxNiwyODg3MiwzNTAxMCwyNDI2NSwyNTk4NiwyNzU2NiwyODYxMCwzMTgwNiwyOTU1NywyMDE5NiwyMDI3OCwyMjI2NSw2MzgzOSwyMzczOCwyMzk5NCwyNDYwNCwyOTYxOCwzMTUzMywzMjY2NiwzMjcxOCwzMjgzOCwzNjg5NCwzNzQyOCwzODY0NiwzODcyOCwzODkzNiw0MDgwMSwyMDM2MywyODU4MywzMTE1MCwzNzMwMCwzODU4MywyMTIxNCw2Mzg0MCwyNTczNiwyNTc5NiwyNzM0NywyODUxMCwyODY5NiwyOTIwMCwzMDQzOSwzMjc2OSwzNDMxMCwzNDM5NiwzNjMzNSwzNjYxMywzODcwNiwzOTc5MSw0MDQ0Miw0MDU2NSwzMDg2MCwzMTEwMywzMjE2MCwzMzczNywzNzYzNiw0MDU3NSw0MDU5NSwzNTU0MiwyMjc1MSwyNDMyNCwyNjQwNywyODcxMSwyOTkwMywzMTg0MCwzMjg5NCwyMDc2OSwyODcxMiwyOTI4MiwzMDkyMiwzNjAzNCwzNjA1OCwzNjA4NCwzODY0NywyMDEwMiwyMDY5OCwyMzUzNCwyNDI3OCwyNjAwOSwyOTEzNCwzMDI3NCwzMDYzNywzMjg0MiwzNDA0NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjk4OCwzOTcxOSw0MDg0NSwyMjc0NCwyMzEwNSwyMzY1MCwyNzE1NSwyODEyMiwyODQzMSwzMDI2NywzMjA0NywzMjMxMSwzNDA3OCwzNTEyOCwzNzg2MCwzODQ3NSwyMTEyOSwyNjA2NiwyNjYxMSwyNzA2MCwyNzk2OSwyODMxNiwyODY4NywyOTcwNSwyOTc5MiwzMDA0MSwzMDI0NCwzMDgyNywzNTYyOCwzOTAwNiwyMDg0NSwyNTEzNCwzODUyMCwyMDM3NCwyMDUyMywyMzgzMywyODEzOCwzMjE4NCwzNjY1MCwyNDQ1OSwyNDkwMCwyNjY0Nyw2Mzg0MSwzODUzNCwyMTIwMiwzMjkwNywyMDk1NiwyMDk0MCwyNjk3NCwzMTI2MCwzMjE5MCwzMzc3NywzODUxNywyMDQ0MiwyMTAzMywyMTQwMCwyMTUxOSwyMTc3NCwyMzY1MywyNDc0MywyNjQ0NiwyNjc5MiwyODAxMiwyOTMxMywyOTQzMiwyOTcwMiwyOTgyNyw2Mzg0MiwzMDE3OCwzMTg1MiwzMjYzMywzMjY5NiwzMzY3MywzNTAyMywzNTA0MSwzNzMyNCwzNzMyOCwzODYyNiwzOTg4MSwyMTUzMywyODU0MiwyOTEzNiwyOTg0OCwzNDI5OCwzNjUyMiwzODU2Myw0MDAyMyw0MDYwNywyNjUxOSwyODEwNywyOTc0NywzMzI1NiwzODY3OCwzMDc2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTQzNSwzMTUyMCwzMTg5MCwyNTcwNSwyOTgwMiwzMDE5NCwzMDkwOCwzMDk1MiwzOTM0MCwzOTc2NCw0MDYzNSwyMzUxOCwyNDE0OSwyODQ0OCwzMzE4MCwzMzcwNywzNzAwMCwxOTk3NSwyMTMyNSwyMzA4MSwyNDAxOCwyNDM5OCwyNDkzMCwyNTQwNSwyNjIxNywyNjM2NCwyODQxNSwyODQ1OSwyODc3MSwzMDYyMiwzMzgzNiwzNDA2NywzNDg3NSwzNjYyNywzOTIzNywzOTk5NSwyMTc4OCwyNTI3MywyNjQxMSwyNzgxOSwzMzU0NSwzNTE3OCwzODc3OCwyMDEyOSwyMjkxNiwyNDUzNiwyNDUzNywyNjM5NSwzMjE3OCwzMjU5NiwzMzQyNiwzMzU3OSwzMzcyNSwzNjYzOCwzNzAxNywyMjQ3NSwyMjk2OSwyMzE4NiwyMzUwNCwyNjE1MSwyNjUyMiwyNjc1NywyNzU5OSwyOTAyOCwzMjYyOSwzNjAyMywzNjA2NywzNjk5MywzOTc0OSwzMzAzMiwzNTk3OCwzODQ3NiwzOTQ4OCw0MDYxMywyMzM5MSwyNzY2NywyOTQ2NywzMDQ1MCwzMDQzMSwzMzgwNCwyMDkwNiwzNTIxOSwyMDgxMywyMDg4NSwyMTE5MywyNjgyNSwyNzc5NiwzMDQ2OCwzMDQ5NiwzMjE5MSwzMjIzNiwzODc1NCw0MDYyOSwyODM1NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNDA2NSwyMDkwMSwyMTUxNywyMTYyOSwyNjEyNiwyNjI2OSwyNjkxOSwyODMxOSwzMDM5OSwzMDYwOSwzMzU1OSwzMzk4NiwzNDcxOSwzNzIyNSwzNzUyOCw0MDE4MCwzNDk0NiwyMDM5OCwyMDg4MiwyMTIxNSwyMjk4MiwyNDEyNSwyNDkxNywyNTcyMCwyNTcyMSwyNjI4NiwyNjU3NiwyNzE2OSwyNzU5NywyNzYxMSwyOTI3OSwyOTI4MSwyOTc2MSwzMDUyMCwzMDY4MywzMjc5MSwzMzQ2OCwzMzU0MSwzNTU4NCwzNTYyNCwzNTk4MCwyNjQwOCwyNzc5MiwyOTI4NywzMDQ0NiwzMDU2NiwzMTMwMiw0MDM2MSwyNzUxOSwyNzc5NCwyMjgxOCwyNjQwNiwzMzk0NSwyMTM1OSwyMjY3NSwyMjkzNywyNDI4NywyNTU1MSwyNjE2NCwyNjQ4MywyODIxOCwyOTQ4MywzMTQ0NywzMzQ5NSwzNzY3MiwyMTIwOSwyNDA0MywyNTAwNiwyNTAzNSwyNTA5OCwyNTI4NywyNTc3MSwyNjA4MCwyNjk2OSwyNzQ5NCwyNzU5NSwyODk2MSwyOTY4NywzMDA0NSwzMjMyNiwzMzMxMCwzMzUzOCwzNDE1NCwzNTQ5MSwzNjAzMSwzODY5NSw0MDI4OSwyMjY5Niw0MDY2NCwyMDQ5NywyMTAwNiwyMTU2MywyMTgzOSwyNTk5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNzc2NiwzMjAxMCwzMjAxMSwzMjg2MiwzNDQ0MiwzODI3MiwzODYzOSwyMTI0NywyNzc5NywyOTI4OSwyMTYxOSwyMzE5NCwyMzYxNCwyMzg4MywyNDM5NiwyNDQ5NCwyNjQxMCwyNjgwNiwyNjk3OSwyODIyMCwyODIyOCwzMDQ3MywzMTg1OSwzMjY1NCwzNDE4MywzNTU5OCwzNjg1NSwzODc1Myw0MDY5MiwyMzczNSwyNDc1OCwyNDg0NSwyNTAwMywyNTkzNSwyNjEwNywyNjEwOCwyNzY2NSwyNzg4NywyOTU5OSwyOTY0MSwzMjIyNSwzODI5MiwyMzQ5NCwzNDU4OCwzNTYwMCwyMTA4NSwyMTMzOCwyNTI5MywyNTYxNSwyNTc3OCwyNjQyMCwyNzE5MiwyNzg1MCwyOTYzMiwyOTg1NCwzMTYzNiwzMTg5MywzMjI4MywzMzE2MiwzMzMzNCwzNDE4MCwzNjg0MywzODY0OSwzOTM2MSwyMDI3NiwyMTMyMiwyMTQ1MywyMTQ2NywyNTI5MiwyNTY0NCwyNTg1NiwyNjAwMSwyNzA3NSwyNzg4NiwyODUwNCwyOTY3NywzMDAzNiwzMDI0MiwzMDQzNiwzMDQ2MCwzMDkyOCwzMDk3MSwzMTAyMCwzMjA3MCwzMzMyNCwzNDc4NCwzNjgyMCwzODkzMCwzOTE1MSwyMTE4NywyNTMwMCwyNTc2NSwyODE5NiwyODQ5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMDMzMiwzNjI5OSwzNzI5NywzNzQ3NCwzOTY2MiwzOTc0NywyMDUxNSwyMDYyMSwyMjM0NiwyMjk1MiwyMzU5MiwyNDEzNSwyNDQzOSwyNTE1MSwyNTkxOCwyNjA0MSwyNjA0OSwyNjEyMSwyNjUwNywyNzAzNiwyODM1NCwzMDkxNywzMjAzMywzMjkzOCwzMzE1MiwzMzMyMywzMzQ1OSwzMzk1MywzNDQ0NCwzNTM3MCwzNTYwNywzNzAzMCwzODQ1MCw0MDg0OCwyMDQ5MywyMDQ2Nyw2Mzg0MywyMjUyMSwyNDQ3MiwyNTMwOCwyNTQ5MCwyNjQ3OSwyODIyNywyODk1MywzMDQwMywzMjk3MiwzMjk4NiwzNTA2MCwzNTA2MSwzNTA5NywzNjA2NCwzNjY0OSwzNzE5NywzODUwNiwyMDI3MSwyMDMzNiwyNDA5MSwyNjU3NSwyNjY1OCwzMDMzMywzMDMzNCwzOTc0OCwyNDE2MSwyNzE0NiwyOTAzMywyOTE0MCwzMDA1OCw2Mzg0NCwzMjMyMSwzNDExNSwzNDI4MSwzOTEzMiwyMDI0MCwzMTU2NywzMjYyNCwzODMwOSwyMDk2MSwyNDA3MCwyNjgwNSwyNzcxMCwyNzcyNiwyNzg2NywyOTM1OSwzMTY4NCwzMzUzOSwyNzg2MSwyOTc1NCwyMDczMSwyMTEyOCwyMjcyMSwyNTgxNiwyNzI4NywyOTg2MywzMDI5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMDg4NywzNDMyNywzODM3MCwzODcxMyw2Mzg0NSwyMTM0MiwyNDMyMSwzNTcyMiwzNjc3NiwzNjc4MywzNzAwMiwyMTAyOSwzMDYyOSw0MDAwOSw0MDcxMiwxOTk5MywyMDQ4MiwyMDg1MywyMzY0MywyNDE4MywyNjE0MiwyNjE3MCwyNjU2NCwyNjgyMSwyODg1MSwyOTk1MywzMDE0OSwzMTE3NywzMTQ1MywzNjY0NywzOTIwMCwzOTQzMiwyMDQ0NSwyMjU2MSwyMjU3NywyMzU0MiwyNjIyMiwyNzQ5MywyNzkyMSwyODI4MiwyODU0MSwyOTY2OCwyOTk5NSwzMzc2OSwzNTAzNiwzNTA5MSwzNTY3NiwzNjYyOCwyMDIzOSwyMDY5MywyMTI2NCwyMTM0MCwyMzQ0MywyNDQ4OSwyNjM4MSwzMTExOSwzMzE0NSwzMzU4MywzNDA2OCwzNTA3OSwzNTIwNiwzNjY2NSwzNjY2NywzOTMzMywzOTk1NCwyNjQxMiwyMDA4NiwyMDQ3MiwyMjg1NywyMzU1MywyMzc5MSwyMzc5MiwyNTQ0NywyNjgzNCwyODkyNSwyOTA5MCwyOTczOSwzMjI5OSwzNDAyOCwzNDU2MiwzNjg5OCwzNzU4Niw0MDE3OSwxOTk4MSwyMDE4NCwyMDQ2MywyMDYxMywyMTA3OCwyMTEwMywyMTU0MiwyMTY0OCwyMjQ5NiwyMjgyNywyMzE0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMzM4NiwyMzQxMywyMzUwMCwyNDIyMCw2Mzg0NiwyNTIwNiwyNTk3NSwyNjAyMywyODAxNCwyODMyNSwyOTIzOCwzMTUyNiwzMTgwNywzMjU2NiwzMzEwNCwzMzEwNSwzMzE3OCwzMzM0NCwzMzQzMywzMzcwNSwzNTMzMSwzNjAwMCwzNjA3MCwzNjA5MSwzNjIxMiwzNjI4MiwzNzA5NiwzNzM0MCwzODQyOCwzODQ2OCwzOTM4NSw0MDE2NywyMTI3MSwyMDk5OCwyMTU0NSwyMjEzMiwyMjcwNywyMjg2OCwyMjg5NCwyNDU3NSwyNDk5NiwyNTE5OCwyNjEyOCwyNzc3NCwyODk1NCwzMDQwNiwzMTg4MSwzMTk2NiwzMjAyNywzMzQ1MiwzNjAzMywzODY0MCw2Mzg0NywyMDMxNSwyNDM0MywyNDQ0NywyNTI4MiwyMzg0OSwyNjM3OSwyNjg0MiwzMDg0NCwzMjMyMyw0MDMwMCwxOTk4OSwyMDYzMywyMTI2OSwyMTI5MCwyMTMyOSwyMjkxNSwyMzEzOCwyNDE5OSwyNDc1NCwyNDk3MCwyNTE2MSwyNTIwOSwyNjAwMCwyNjUwMywyNzA0NywyNzYwNCwyNzYwNiwyNzYwNywyNzYwOCwyNzgzMiw2Mzg0OCwyOTc0OSwzMDIwMiwzMDczOCwzMDg2NSwzMTE4OSwzMTE5MiwzMTg3NSwzMjIwMywzMjczNywzMjkzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMzA4NiwzMzIxOCwzMzc3OCwzNDU4NiwzNTA0OCwzNTUxMywzNTY5MiwzNjAyNywzNzE0NSwzODc1MCwzOTEzMSw0MDc2MywyMjE4OCwyMzMzOCwyNDQyOCwyNTk5NiwyNzMxNSwyNzU2NywyNzk5NiwyODY1NywyODY5MywyOTI3NywyOTYxMywzNjAwNywzNjA1MSwzODk3MSwyNDk3NywyNzcwMywzMjg1NiwzOTQyNSwyMDA0NSwyMDEwNywyMDEyMywyMDE4MSwyMDI4MiwyMDI4NCwyMDM1MSwyMDQ0NywyMDczNSwyMTQ5MCwyMTQ5NiwyMTc2NiwyMTk4NywyMjIzNSwyMjc2MywyMjg4MiwyMzA1NywyMzUzMSwyMzU0NiwyMzU1NiwyNDA1MSwyNDEwNywyNDQ3MywyNDYwNSwyNTQ0OCwyNjAxMiwyNjAzMSwyNjYxNCwyNjYxOSwyNjc5NywyNzUxNSwyNzgwMSwyNzg2MywyODE5NSwyODY4MSwyOTUwOSwzMDcyMiwzMTAzOCwzMTA0MCwzMTA3MiwzMTE2OSwzMTcyMSwzMjAyMywzMjExNCwzMjkwMiwzMzI5MywzMzY3OCwzNDAwMSwzNDUwMywzNTAzOSwzNTQwOCwzNTQyMiwzNTYxMywzNjA2MCwzNjE5OCwzNjc4MSwzNzAzNCwzOTE2NCwzOTM5MSw0MDYwNSwyMTA2Niw2Mzg0OSwyNjM4OCw2Mzg1MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDYzMiwyMTAzNCwyMzY2NSwyNTk1NSwyNzczMywyOTY0MiwyOTk4NywzMDEwOSwzMTYzOSwzMzk0OCwzNzI0MCwzODcwNCwyMDA4NywyNTc0NiwyNzU3OCwyOTAyMiwzNDIxNywxOTk3Nyw2Mzg1MSwyNjQ0MSwyNjg2MiwyODE4MywzMzQzOSwzNDA3MiwzNDkyMywyNTU5MSwyODU0NSwzNzM5NCwzOTA4NywxOTk3OCwyMDY2MywyMDY4NywyMDc2NywyMTgzMCwyMTkzMCwyMjAzOSwyMzM2MCwyMzU3NywyMzc3NiwyNDEyMCwyNDIwMiwyNDIyNCwyNDI1OCwyNDgxOSwyNjcwNSwyNzIzMywyODI0OCwyOTI0NSwyOTI0OCwyOTM3NiwzMDQ1NiwzMTA3NywzMTY2NSwzMjcyNCwzNTA1OSwzNTMxNiwzNTQ0MywzNTkzNywzNjA2MiwzODY4NCwyMjYyMiwyOTg4NSwzNjA5MywyMTk1OSw2Mzg1MiwzMTMyOSwzMjAzNCwzMzM5NCwyOTI5OCwyOTk4MywyOTk4OSw2Mzg1MywzMTUxMywyMjY2MSwyMjc3OSwyMzk5NiwyNDIwNywyNDI0NiwyNDQ2NCwyNDY2MSwyNTIzNCwyNTQ3MSwyNTkzMywyNjI1NywyNjMyOSwyNjM2MCwyNjY0NiwyNjg2NiwyOTMxMiwyOTc5MCwzMTU5OCwzMjExMCwzMjIxNCwzMjYyNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjk5NywzMzI5OCwzNDIyMywzNTE5OSwzNTQ3NSwzNjg5MywzNzYwNCw0MDY1Myw0MDczNiwyMjgwNSwyMjg5MywyNDEwOSwyNDc5NiwyNjEzMiwyNjIyNywyNjUxMiwyNzcyOCwyODEwMSwyODUxMSwzMDcwNywzMDg4OSwzMzk5MCwzNzMyMywzNzY3NSwyMDE4NSwyMDY4MiwyMDgwOCwyMTg5MiwyMzMwNywyMzQ1OSwyNTE1OSwyNTk4MiwyNjA1OSwyODIxMCwyOTA1MywyOTY5NywyOTc2NCwyOTgzMSwyOTg4NywzMDMxNiwzMTE0NiwzMjIxOCwzMjM0MSwzMjY4MCwzMzE0NiwzMzIwMywzMzMzNywzNDMzMCwzNDc5NiwzNTQ0NSwzNjMyMywzNjk4NCwzNzUyMSwzNzkyNSwzOTI0NSwzOTg1NCwyMTM1MiwyMzYzMywyNjk2NCwyNzg0NCwyNzk0NSwyODIwMywzMzI5MiwzNDIwMywzNTEzMSwzNTM3MywzNTQ5OCwzODYzNCw0MDgwNywyMTA4OSwyNjI5NywyNzU3MCwzMjQwNiwzNDgxNCwzNjEwOSwzODI3NSwzODQ5MywyNTg4NSwyODA0MSwyOTE2Niw2Mzg1NCwyMjQ3OCwyMjk5NSwyMzQ2OCwyNDYxNSwyNDgyNiwyNTEwNCwyNjE0MywyNjIwNywyOTQ4MSwyOTY4OSwzMDQyNywzMDQ2NSwzMTU5NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjg1NCwzMjg4MiwzMzEyNSwzNTQ4OCwzNzI2NiwxOTk5MCwyMTIxOCwyNzUwNiwyNzkyNywzMTIzNywzMTU0NSwzMjA0OCw2Mzg1NSwzNjAxNiwyMTQ4NCwyMjA2MywyMjYwOSwyMzQ3NywyMzU2NywyMzU2OSwyNDAzNCwyNTE1MiwyNTQ3NSwyNTYyMCwyNjE1NywyNjgwMywyNzgzNiwyODA0MCwyODMzNSwyODcwMywyODgzNiwyOTEzOCwyOTk5MCwzMDA5NSwzMDA5NCwzMDIzMywzMTUwNSwzMTcxMiwzMTc4NywzMjAzMiwzMjA1NywzNDA5MiwzNDE1NywzNDMxMSwzNTM4MCwzNjg3NywzNjk2MSwzNzA0NSwzNzU1OSwzODkwMiwzOTQ3OSwyMDQzOSwyMzY2MCwyNjQ2MywyODA0OSwzMTkwMywzMjM5NiwzNTYwNiwzNjExOCwzNjg5NSwyMzQwMywyNDA2MSwyNTYxMywzMzk4NCwzNjk1NiwzOTEzNywyOTU3NSwyMzQzNSwyNDczMCwyNjQ5NCwyODEyNiwzNTM1OSwzNTQ5NCwzNjg2NSwzODkyNCwyMTA0Nyw2Mzg1NiwyODc1MywzMDg2MiwzNzc4MiwzNDkyOCwzNzMzNSwyMDQ2MiwyMTQ2MywyMjAxMywyMjIzNCwyMjQwMiwyMjc4MSwyMzIzNCwyMzQzMiwyMzcyMywyMzc0NCwyNDEwMSwyNDgzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNTEwMSwyNTE2MywyNTQ4MCwyNTYyOCwyNTkxMCwyNTk3NiwyNzE5MywyNzUzMCwyNzcwMCwyNzkyOSwyODQ2NSwyOTE1OSwyOTQxNywyOTU2MCwyOTcwMywyOTg3NCwzMDI0NiwzMDU2MSwzMTE2OCwzMTMxOSwzMTQ2NiwzMTkyOSwzMjE0MywzMjE3MiwzMjM1MywzMjY3MCwzMzA2NSwzMzU4NSwzMzkzNiwzNDAxMCwzNDI4MiwzNDk2NiwzNTUwNCwzNTcyOCwzNjY2NCwzNjkzMCwzNjk5NSwzNzIyOCwzNzUyNiwzNzU2MSwzODUzOSwzODU2NywzODU2OCwzODYxNCwzODY1NiwzODkyMCwzOTMxOCwzOTYzNSwzOTcwNiwyMTQ2MCwyMjY1NCwyMjgwOSwyMzQwOCwyMzQ4NywyODExMywyODUwNiwyOTA4NywyOTcyOSwyOTg4MSwzMjkwMSwzMzc4OSwyNDAzMywyNDQ1NSwyNDQ5MCwyNDY0MiwyNjA5MiwyNjY0MiwyNjk5MSwyNzIxOSwyNzUyOSwyNzk1NywyODE0NywyOTY2NywzMDQ2MiwzMDYzNiwzMTU2NSwzMjAyMCwzMzA1OSwzMzMwOCwzMzYwMCwzNDAzNiwzNDE0NywzNTQyNiwzNTUyNCwzNzI1NSwzNzY2MiwzODkxOCwzOTM0OCwyNTEwMCwzNDg5OSwzNjg0OCwzNzQ3NywyMzgxNSwyMzg0NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMzkxMywyOTc5MSwzMzE4MSwzNDY2NCwyODYyOSwyNTM0MiwzMjcyMiwzNTEyNiwzNTE4NiwxOTk5OCwyMDA1NiwyMDcxMSwyMTIxMywyMTMxOSwyNTIxNSwyNjExOSwzMjM2MSwzNDgyMSwzODQ5NCwyMDM2NSwyMTI3MywyMjA3MCwyMjk4NywyMzIwNCwyMzYwOCwyMzYzMCwyMzYyOSwyNDA2NiwyNDMzNywyNDY0MywyNjA0NSwyNjE1OSwyNjE3OCwyNjU1OCwyNjYxMiwyOTQ2OCwzMDY5MCwzMTAzNCwzMjcwOSwzMzk0MCwzMzk5NywzNTIyMiwzNTQzMCwzNTQzMywzNTU1MywzNTkyNSwzNTk2MiwyMjUxNiwyMzUwOCwyNDMzNSwyNDY4NywyNTMyNSwyNjg5MywyNzU0MiwyODI1MiwyOTA2MCwzMTY5OCwzNDY0NSwzNTY3MiwzNjYwNiwzOTEzNSwzOTE2NiwyMDI4MCwyMDM1MywyMDQ0OSwyMTYyNywyMzA3MiwyMzQ4MCwyNDg5MiwyNjAzMiwyNjIxNiwyOTE4MCwzMDAwMywzMTA3MCwzMjA1MSwzMzEwMiwzMzI1MSwzMzY4OCwzNDIxOCwzNDI1NCwzNDU2MywzNTMzOCwzNjUyMywzNjc2Myw2Mzg1NywzNjgwNSwyMjgzMywyMzQ2MCwyMzUyNiwyNDcxMywyMzUyOSwyMzU2MywyNDUxNSwyNzc3NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzg1OCwyODE0NSwyODY4MywyOTk3OCwzMzQ1NSwzNTU3NCwyMDE2MCwyMTMxMyw2Mzg1OSwzODYxNywyNzY2MywyMDEyNiwyMDQyMCwyMDgxOCwyMTg1NCwyMzA3NywyMzc4NCwyNTEwNSwyOTI3MywzMzQ2OSwzMzcwNiwzNDU1OCwzNDkwNSwzNTM1NywzODQ2MywzODU5NywzOTE4Nyw0MDIwMSw0MDI4NSwyMjUzOCwyMzczMSwyMzk5NywyNDEzMiwyNDgwMSwyNDg1MywyNTU2OSwyNzEzOCwyODE5NywzNzEyMiwzNzcxNiwzODk5MCwzOTk1Miw0MDgyMywyMzQzMywyMzczNiwyNTM1MywyNjE5MSwyNjY5NiwzMDUyNCwzODU5MywzODc5NywzODk5NiwzOTgzOSwyNjAxNywzNTU4NSwzNjU1NSwzODMzMiwyMTgxMywyMzcyMSwyNDAyMiwyNDI0NSwyNjI2MywzMDI4NCwzMzc4MCwzODM0MywyMjczOSwyNTI3NiwyOTM5MCw0MDIzMiwyMDIwOCwyMjgzMCwyNDU5MSwyNjE3MSwyNzUyMywzMTIwNyw0MDIzMCwyMTM5NSwyMTY5NiwyMjQ2NywyMzgzMCwyNDg1OSwyNjMyNiwyODA3OSwzMDg2MSwzMzQwNiwzODU1MiwzODcyNCwyMTM4MCwyNTIxMiwyNTQ5NCwyODA4MiwzMjI2NiwzMzA5OSwzODk4OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNzM4NywzMjU4OCw0MDM2Nyw0MDQ3NCwyMDA2MywyMDUzOSwyMDkxOCwyMjgxMiwyNDgyNSwyNTU5MCwyNjkyOCwyOTI0MiwzMjgyMiw2Mzg2MCwzNzMyNiwyNDM2OSw2Mzg2MSw2Mzg2MiwzMjAwNCwzMzUwOSwzMzkwMywzMzk3OSwzNDI3NywzNjQ5Myw2Mzg2MywyMDMzNSw2Mzg2NCw2Mzg2NSwyMjc1NiwyMzM2MywyNDY2NSwyNTU2MiwyNTg4MCwyNTk2NSwyNjI2NCw2Mzg2NiwyNjk1NCwyNzE3MSwyNzkxNSwyODY3MywyOTAzNiwzMDE2MiwzMDIyMSwzMTE1NSwzMTM0NCw2Mzg2NywzMjY1MCw2Mzg2OCwzNTE0MCw2Mzg2OSwzNTczMSwzNzMxMiwzODUyNSw2Mzg3MCwzOTE3OCwyMjI3NiwyNDQ4MSwyNjA0NCwyODQxNywzMDIwOCwzMTE0MiwzNTQ4NiwzOTM0MSwzOTc3MCw0MDgxMiwyMDc0MCwyNTAxNCwyNTIzMywyNzI3NywzMzIyMiwyMDU0NywyMjU3NiwyNDQyMiwyODkzNywzNTMyOCwzNTU3OCwyMzQyMCwzNDMyNiwyMDQ3NCwyMDc5NiwyMjE5NiwyMjg1MiwyNTUxMywyODE1MywyMzk3OCwyNjk4OSwyMDg3MCwyMDEwNCwyMDMxMyw2Mzg3MSw2Mzg3Miw2Mzg3MywyMjkxNCw2Mzg3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzg3NSwyNzQ4NywyNzc0MSw2Mzg3NiwyOTg3NywzMDk5OCw2Mzg3NywzMzI4NywzMzM0OSwzMzU5MywzNjY3MSwzNjcwMSw2Mzg3OCwzOTE5Miw2Mzg3OSw2Mzg4MCw2Mzg4MSwyMDEzNCw2Mzg4MiwyMjQ5NSwyNDQ0MSwyNjEzMSw2Mzg4Myw2Mzg4NCwzMDEyMywzMjM3NywzNTY5NSw2Mzg4NSwzNjg3MCwzOTUxNSwyMjE4MSwyMjU2NywyMzAzMiwyMzA3MSwyMzQ3Niw2Mzg4NiwyNDMxMCw2Mzg4Nyw2Mzg4OCwyNTQyNCwyNTQwMyw2Mzg4OSwyNjk0MSwyNzc4MywyNzgzOSwyODA0NiwyODA1MSwyODE0OSwyODQzNiw2Mzg5MCwyODg5NSwyODk4MiwyOTAxNyw2Mzg5MSwyOTEyMywyOTE0MSw2Mzg5MiwzMDc5OSwzMDgzMSw2Mzg5MywzMTYwNSwzMjIyNyw2Mzg5NCwzMjMwMyw2Mzg5NSwzNDg5MywzNjU3NSw2Mzg5Niw2Mzg5Nyw2Mzg5OCwzNzQ2Nyw2Mzg5OSw0MDE4Miw2MzkwMCw2MzkwMSw2MzkwMiwyNDcwOSwyODAzNyw2MzkwMywyOTEwNSw2MzkwNCw2MzkwNSwzODMyMSwyMTQyMSw2MzkwNiw2MzkwNyw2MzkwOCwyNjU3OSw2MzkwOSwyODgxNCwyODk3NiwyOTc0NCwzMzM5OCwzMzQ5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2MzkxMCwzODMzMSwzOTY1Myw0MDU3MywyNjMwOCw2MzkxMSwyOTEyMSwzMzg2NSw2MzkxMiw2MzkxMywyMjYwMyw2MzkxNCw2MzkxNSwyMzk5MiwyNDQzMyw2MzkxNiwyNjE0NCwyNjI1NCwyNzAwMSwyNzA1NCwyNzcwNCwyNzg5MSwyODIxNCwyODQ4MSwyODYzNCwyODY5OSwyODcxOSwyOTAwOCwyOTE1MSwyOTU1Miw2MzkxNywyOTc4Nyw2MzkxOCwyOTkwOCwzMDQwOCwzMTMxMCwzMjQwMyw2MzkxOSw2MzkyMCwzMzUyMSwzNTQyNCwzNjgxNCw2MzkyMSwzNzcwNCw2MzkyMiwzODY4MSw2MzkyMyw2MzkyNCwyMDAzNCwyMDUyMiw2MzkyNSwyMTAwMCwyMTQ3MywyNjM1NSwyNzc1NywyODYxOCwyOTQ1MCwzMDU5MSwzMTMzMCwzMzQ1NCwzNDI2OSwzNDMwNiw2MzkyNiwzNTAyOCwzNTQyNywzNTcwOSwzNTk0Nyw2MzkyNywzNzU1NSw2MzkyOCwzODY3NSwzODkyOCwyMDExNiwyMDIzNywyMDQyNSwyMDY1OCwyMTMyMCwyMTU2NiwyMTU1NSwyMTk3OCwyMjYyNiwyMjcxNCwyMjg4NywyMzA2NywyMzUyNCwyNDczNSw2MzkyOSwyNTAzNCwyNTk0MiwyNjExMSwyNjIxMiwyNjc5MSwyNzczOCwyODU5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyODg3OSwyOTEwMCwyOTUyMiwzMTYxMywzNDU2OCwzNTQ5MiwzOTk4Niw0MDcxMSwyMzYyNywyNzc3OSwyOTUwOCwyOTU3NywzNzQzNCwyODMzMSwyOTc5NywzMDIzOSwzMTMzNywzMjI3NywzNDMxNCwyMDgwMCwyMjcyNSwyNTc5MywyOTkzNCwyOTk3MywzMDMyMCwzMjcwNSwzNzAxMywzODYwNSwzOTI1MiwyODE5OCwyOTkyNiwzMTQwMSwzMTQwMiwzMzI1MywzNDUyMSwzNDY4MCwzNTM1NSwyMzExMywyMzQzNiwyMzQ1MSwyNjc4NSwyNjg4MCwyODAwMywyOTYwOSwyOTcxNSwyOTc0MCwzMDg3MSwzMjIzMywzMjc0NywzMzA0OCwzMzEwOSwzMzY5NCwzNTkxNiwzODQ0NiwzODkyOSwyNjM1MiwyNDQ0OCwyNjEwNiwyNjUwNSwyNzc1NCwyOTU3OSwyMDUyNSwyMzA0MywyNzQ5OCwzMDcwMiwyMjgwNiwyMzkxNiwyNDAxMywyOTQ3NywzMDAzMSw2MzkzMCw2MzkzMSwyMDcwOSwyMDk4NSwyMjU3NSwyMjgyOSwyMjkzNCwyMzAwMiwyMzUyNSw2MzkzMiw2MzkzMywyMzk3MCwyNTMwMywyNTYyMiwyNTc0NywyNTg1NCw2MzkzNCwyNjMzMiw2MzkzNSwyNzIwOCw2MzkzNiwyOTE4MywyOTc5Niw2MzkzNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTM2OCwzMTQwNywzMjMyNywzMjM1MCwzMjc2OCwzMzEzNiw2MzkzOCwzNDc5OSwzNTIwMSwzNTYxNiwzNjk1Myw2MzkzOSwzNjk5MiwzOTI1MCwyNDk1OCwyNzQ0MiwyODAyMCwzMjI4NywzNTEwOSwzNjc4NSwyMDQzMywyMDY1MywyMDg4NywyMTE5MSwyMjQ3MSwyMjY2NSwyMzQ4MSwyNDI0OCwyNDg5OCwyNzAyOSwyODA0NCwyODI2MywyODM0MiwyOTA3NiwyOTc5NCwyOTk5MiwyOTk5NiwzMjg4MywzMzU5MiwzMzk5MywzNjM2MiwzNzc4MCwzNzg1NCw2Mzk0MCwyMDExMCwyMDMwNSwyMDU5OCwyMDc3OCwyMTQ0OCwyMTQ1MSwyMTQ5MSwyMzQzMSwyMzUwNywyMzU4OCwyNDg1OCwyNDk2MiwyNjEwMCwyOTI3NSwyOTU5MSwyOTc2MCwzMDQwMiwzMTA1NiwzMTEyMSwzMTE2MSwzMjAwNiwzMjcwMSwzMzQxOSwzNDI2MSwzNDM5OCwzNjgwMiwzNjkzNSwzNzEwOSwzNzM1NCwzODUzMywzODYzMiwzODYzMywyMTIwNiwyNDQyMywyNjA5MywyNjE2MSwyNjY3MSwyOTAyMCwzMTI4NiwzNzA1NywzODkyMiwyMDExMyw2Mzk0MSwyNzIxOCwyNzU1MCwyODU2MCwyOTA2NSwzMjc5MiwzMzQ2NCwzNDEzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjkzOSwzODU0OSwzODY0MiwzODkwNywzNDA3NCwzOTcyOSwyMDExMiwyOTA2NiwzODU5NiwyMDgwMywyMTQwNywyMTcyOSwyMjI5MSwyMjI5MCwyMjQzNSwyMzE5NSwyMzIzNiwyMzQ5MSwyNDYxNiwyNDg5NSwyNTU4OCwyNzc4MSwyNzk2MSwyODI3NCwyODMwNCwyOTIzMiwyOTUwMywyOTc4MywzMzQ4OSwzNDk0NSwzNjY3NywzNjk2MCw2Mzk0MiwzODQ5OCwzOTAwMCw0MDIxOSwyNjM3NiwzNjIzNCwzNzQ3MCwyMDMwMSwyMDU1MywyMDcwMiwyMTM2MSwyMjI4NSwyMjk5NiwyMzA0MSwyMzU2MSwyNDk0NCwyNjI1NiwyODIwNSwyOTIzNCwyOTc3MSwzMjIzOSwzMjk2MywzMzgwNiwzMzg5NCwzNDExMSwzNDY1NSwzNDkwNywzNTA5NiwzNTU4NiwzNjk0OSwzODg1OSwzOTc1OSwyMDA4MywyMDM2OSwyMDc1NCwyMDg0Miw2Mzk0MywyMTgwNywyMTkyOSwyMzQxOCwyMzQ2MSwyNDE4OCwyNDE4OSwyNDI1NCwyNDczNiwyNDc5OSwyNDg0MCwyNDg0MSwyNTU0MCwyNTkxMiwyNjM3Nyw2Mzk0NCwyNjU4MCwyNjU4Niw2Mzk0NSwyNjk3NywyNjk3OCwyNzgzMywyNzk0Myw2Mzk0NiwyODIxNiw2Mzk0NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyODY0MSwyOTQ5NCwyOTQ5NSw2Mzk0OCwyOTc4OCwzMDAwMSw2Mzk0OSwzMDI5MCw2Mzk1MCw2Mzk1MSwzMjE3MywzMzI3OCwzMzg0OCwzNTAyOSwzNTQ4MCwzNTU0NywzNTU2NSwzNjQwMCwzNjQxOCwzNjkzOCwzNjkyNiwzNjk4NiwzNzE5MywzNzMyMSwzNzc0Miw2Mzk1Miw2Mzk1MywyMjUzNyw2Mzk1NCwyNzYwMywzMjkwNSwzMjk0Niw2Mzk1NSw2Mzk1NiwyMDgwMSwyMjg5MSwyMzYwOSw2Mzk1Nyw2Mzk1OCwyODUxNiwyOTYwNywzMjk5NiwzNjEwMyw2Mzk1OSwzNzM5OSwzODI4Nyw2Mzk2MCw2Mzk2MSw2Mzk2Miw2Mzk2MywzMjg5NSwyNTEwMiwyODcwMCwzMjEwNCwzNDcwMSw2Mzk2NCwyMjQzMiwyNDY4MSwyNDkwMywyNzU3NSwzNTUxOCwzNzUwNCwzODU3NywyMDA1NywyMTUzNSwyODEzOSwzNDA5MywzODUxMiwzODg5OSwzOTE1MCwyNTU1OCwyNzg3NSwzNzAwOSwyMDk1NywyNTAzMywzMzIxMCw0MDQ0MSwyMDM4MSwyMDUwNiwyMDczNiwyMzQ1MiwyNDg0NywyNTA4NywyNTgzNiwyNjg4NSwyNzU4OSwzMDA5NywzMDY5MSwzMjY4MSwzMzM4MCwzNDE5MSwzNDgxMSwzNDkxNSwzNTUxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNTY5NiwzNzI5MSwyMDEwOCwyMDE5NywyMDIzNCw2Mzk2NSw2Mzk2NiwyMjgzOSwyMzAxNiw2Mzk2NywyNDA1MCwyNDM0NywyNDQxMSwyNDYwOSw2Mzk2OCw2Mzk2OSw2Mzk3MCw2Mzk3MSwyOTI0NiwyOTY2OSw2Mzk3MiwzMDA2NCwzMDE1Nyw2Mzk3MywzMTIyNyw2Mzk3NCwzMjc4MCwzMjgxOSwzMjkwMCwzMzUwNSwzMzYxNyw2Mzk3NSw2Mzk3NiwzNjAyOSwzNjAxOSwzNjk5OSw2Mzk3Nyw2Mzk3OCwzOTE1NiwzOTE4MCw2Mzk3OSw2Mzk4MCwyODcyNywzMDQxMCwzMjcxNCwzMjcxNiwzMjc2NCwzNTYxMCwyMDE1NCwyMDE2MSwyMDk5NSwyMTM2MCw2Mzk4MSwyMTY5MywyMjI0MCwyMzAzNSwyMzQ5MywyNDM0MSwyNDUyNSwyODI3MCw2Mzk4Miw2Mzk4MywzMjEwNiwzMzU4OSw2Mzk4NCwzNDQ1MSwzNTQ2OSw2Mzk4NSwzODc2NSwzODc3NSw2Mzk4Niw2Mzk4NywxOTk2OCwyMDMxNCwyMDM1MCwyMjc3NywyNjA4NSwyODMyMiwzNjkyMCwzNzgwOCwzOTM1MywyMDIxOSwyMjc2NCwyMjkyMiwyMzAwMSwyNDY0MSw2Mzk4OCw2Mzk4OSwzMTI1Miw2Mzk5MCwzMzYxNSwzNjAzNSwyMDgzNywyMTMxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzk5MSw2Mzk5Miw2Mzk5MywyMDE3MywyMTA5NywyMzM4MSwzMzQ3MSwyMDE4MCwyMTA1MCwyMTY3MiwyMjk4NSwyMzAzOSwyMzM3NiwyMzM4MywyMzM4OCwyNDY3NSwyNDkwNCwyODM2MywyODgyNSwyOTAzOCwyOTU3NCwyOTk0MywzMDEzMywzMDkxMywzMjA0MywzMjc3MywzMzI1OCwzMzU3NiwzNDA3MSwzNDI0OSwzNTU2NiwzNjAzOSwzODYwNCwyMDMxNiwyMTI0MiwyMjIwNCwyNjAyNywyNjE1MiwyODc5NiwyODg1NiwyOTIzNywzMjE4OSwzMzQyMSwzNzE5NiwzODU5Miw0MDMwNiwyMzQwOSwyNjg1NSwyNzU0NCwyODUzOCwzMDQzMCwyMzY5NywyNjI4MywyODUwNywzMTY2OCwzMTc4NiwzNDg3MCwzODYyMCwxOTk3NiwyMDE4MywyMTI4MCwyMjU4MCwyMjcxNSwyMjc2NywyMjg5MiwyMzU1OSwyNDExNSwyNDE5NiwyNDM3MywyNTQ4NCwyNjI5MCwyNjQ1NCwyNzE2NywyNzI5OSwyNzQwNCwyODQ3OSwyOTI1NCw2Mzk5NCwyOTUyMCwyOTgzNSwzMTQ1NiwzMTkxMSwzMzE0NCwzMzI0NywzMzI1NSwzMzY3NCwzMzkwMCwzNDA4MywzNDE5NiwzNDI1NSwzNTAzNywzNjExNSwzNzI5MiwzODI2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzODU1NiwyMDg3NywyMTcwNSwyMjMxMiwyMzQ3MiwyNTE2NSwyNjQ0OCwyNjY4NSwyNjc3MSwyODIyMSwyODM3MSwyODc5NywzMjI4OSwzNTAwOSwzNjAwMSwzNjYxNyw0MDc3OSw0MDc4MiwyOTIyOSwzMTYzMSwzNTUzMywzNzY1OCwyMDI5NSwyMDMwMiwyMDc4NiwyMTYzMiwyMjk5MiwyNDIxMywyNTI2OSwyNjQ4NSwyNjk5MCwyNzE1OSwyNzgyMiwyODE4NiwyOTQwMSwyOTQ4MiwzMDE0MSwzMTY3MiwzMjA1MywzMzUxMSwzMzc4NSwzMzg3OSwzNDI5NSwzNTQxOSwzNjAxNSwzNjQ4NywzNjg4OSwzNzA0OCwzODYwNiw0MDc5OSwyMTIxOSwyMTUxNCwyMzI2NSwyMzQ5MCwyNTY4OCwyNTk3MywyODQwNCwyOTM4MCw2Mzk5NSwzMDM0MCwzMTMwOSwzMTUxNSwzMTgyMSwzMjMxOCwzMjczNSwzMzY1OSwzNTYyNywzNjA0MiwzNjE5NiwzNjMyMSwzNjQ0NywzNjg0MiwzNjg1NywzNjk2OSwzNzg0MSwyMDI5MSwyMDM0NiwyMDY1OSwyMDg0MCwyMDg1NiwyMTA2OSwyMTA5OCwyMjYyNSwyMjY1MiwyMjg4MCwyMzU2MCwyMzYzNywyNDI4MywyNDczMSwyNTEzNiwyNjY0MywyNzU4MywyNzY1NiwyODU5MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTAwNiwyOTcyOCwzMDAwMCwzMDAwOCwzMDAzMywzMDMyMiwzMTU2NCwzMTYyNywzMTY2MSwzMTY4NiwzMjM5OSwzNTQzOCwzNjY3MCwzNjY4MSwzNzQzOSwzNzUyMywzNzY2NiwzNzkzMSwzODY1MSwzOTAwMiwzOTAxOSwzOTE5OCwyMDk5OSwyNTEzMCwyNTI0MCwyNzk5MywzMDMwOCwzMTQzNCwzMTY4MCwzMjExOCwyMTM0NCwyMzc0MiwyNDIxNSwyODQ3MiwyODg1NywzMTg5NiwzODY3MywzOTgyMiw0MDY3MCwyNTUwOSwyNTcyMiwzNDY3OCwxOTk2OSwyMDExNywyMDE0MSwyMDU3MiwyMDU5NywyMTU3NiwyMjk3OSwyMzQ1MCwyNDEyOCwyNDIzNywyNDMxMSwyNDQ0OSwyNDc3MywyNTQwMiwyNTkxOSwyNTk3MiwyNjA2MCwyNjIzMCwyNjIzMiwyNjYyMiwyNjk4NCwyNzI3MywyNzQ5MSwyNzcxMiwyODA5NiwyODEzNiwyODE5MSwyODI1NCwyODcwMiwyODgzMywyOTU4MiwyOTY5MywzMDAxMCwzMDU1NSwzMDg1NSwzMTExOCwzMTI0MywzMTM1NywzMTkzNCwzMjE0MiwzMzM1MSwzNTMzMCwzNTU2MiwzNTk5OCwzNzE2NSwzNzE5NCwzNzMzNiwzNzQ3OCwzNzU4MCwzNzY2NCwzODY2MiwzODc0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzODc0OCwzODkxNCw0MDcxOCwyMTA0NiwyMTEzNywyMTg4NCwyMjU2NCwyNDA5MywyNDM1MSwyNDcxNiwyNTU1MiwyNjc5OSwyODYzOSwzMTA4NSwzMTUzMiwzMzIyOSwzNDIzNCwzNTA2OSwzNTU3NiwzNjQyMCwzNzI2MSwzODUwMCwzODU1NSwzODcxNywzODk4OCw0MDc3OCwyMDQzMCwyMDgwNiwyMDkzOSwyMTE2MSwyMjA2NiwyNDM0MCwyNDQyNywyNTUxNCwyNTgwNSwyNjA4OSwyNjE3NywyNjM2MiwyNjM2MSwyNjM5NywyNjc4MSwyNjgzOSwyNzEzMywyODQzNywyODUyNiwyOTAzMSwyOTE1NywyOTIyNiwyOTg2NiwzMDUyMiwzMTA2MiwzMTA2NiwzMTE5OSwzMTI2NCwzMTM4MSwzMTg5NSwzMTk2NywzMjA2OCwzMjM2OCwzMjkwMywzNDI5OSwzNDQ2OCwzNTQxMiwzNTUxOSwzNjI0OSwzNjQ4MSwzNjg5NiwzNjk3MywzNzM0NywzODQ1OSwzODYxMyw0MDE2NSwyNjA2MywzMTc1MSwzNjI3NSwzNzgyNywyMzM4NCwyMzU2MiwyMTMzMCwyNTMwNSwyOTQ2OSwyMDUxOSwyMzQ0NywyNDQ3OCwyNDc1MiwyNDkzOSwyNjgzNywyODEyMSwyOTc0MiwzMTI3OCwzMjA2NiwzMjE1NiwzMjMwNSwzMzEzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjM5NCwzNjQwNSwzNzc1OCwzNzkxMiwyMDMwNCwyMjM1MiwyNDAzOCwyNDIzMSwyNTM4NywzMjYxOCwyMDAyNywyMDMwMywyMDM2NywyMDU3MCwyMzAwNSwzMjk2NCwyMTYxMCwyMTYwOCwyMjAxNCwyMjg2MywyMzQ0OSwyNDAzMCwyNDI4MiwyNjIwNSwyNjQxNywyNjYwOSwyNjY2NiwyNzg4MCwyNzk1NCwyODIzNCwyODU1NywyODg1NSwyOTY2NCwzMDA4NywzMTgyMCwzMjAwMiwzMjA0NCwzMjE2MiwzMzMxMSwzNDUyMywzNTM4NywzNTQ2MSwzNjIwOCwzNjQ5MCwzNjY1OSwzNjkxMywzNzE5OCwzNzIwMiwzNzk1NiwzOTM3NiwzMTQ4MSwzMTkwOSwyMDQyNiwyMDczNywyMDkzNCwyMjQ3MiwyMzUzNSwyMzgwMywyNjIwMSwyNzE5NywyNzk5NCwyODMxMCwyODY1MiwyODk0MCwzMDA2MywzMTQ1OSwzNDg1MCwzNjg5NywzNjk4MSwzODYwMywzOTQyMywzMzUzNywyMDAxMywyMDIxMCwzNDg4NiwzNzMyNSwyMTM3MywyNzM1NSwyNjk4NywyNzcxMywzMzkxNCwyMjY4NiwyNDk3NCwyNjM2NiwyNTMyNywyODg5MywyOTk2OSwzMDE1MSwzMjMzOCwzMzk3NiwzNTY1NywzNjEwNCwyMDA0MywyMTQ4MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTY3NSwyMjMyMCwyMjMzNiwyNDUzNSwyNTM0NSwyNTM1MSwyNTcxMSwyNTkwMywyNjA4OCwyNjIzNCwyNjUyNSwyNjU0NywyNzQ5MCwyNzc0NCwyNzgwMiwyODQ2MCwzMDY5MywzMDc1NywzMTA0OSwzMTA2MywzMjAyNSwzMjkzMCwzMzAyNiwzMzI2NywzMzQzNywzMzQ2MywzNDU4NCwzNTQ2OCw2Mzk5NiwzNjEwMCwzNjI4NiwzNjk3OCwzMDQ1MiwzMTI1NywzMTI4NywzMjM0MCwzMjg4NywyMTc2NywyMTk3MiwyMjY0NSwyNTM5MSwyNTYzNCwyNjE4NSwyNjE4NywyNjczMywyNzAzNSwyNzUyNCwyNzk0MSwyODMzNywyOTY0NSwyOTgwMCwyOTg1NywzMDA0MywzMDEzNywzMDQzMywzMDQ5NCwzMDYwMywzMTIwNiwzMjI2NSwzMjI4NSwzMzI3NSwzNDA5NSwzNDk2NywzNTM4NiwzNjA0OSwzNjU4NywzNjc4NCwzNjkxNCwzNzgwNSwzODQ5OSwzODUxNSwzODY2MywyMDM1NiwyMTQ4OSwyMzAxOCwyMzI0MSwyNDA4OSwyNjcwMiwyOTg5NCwzMDE0MiwzMTIwOSwzMTM3OCwzMzE4NywzNDU0MSwzNjA3NCwzNjMwMCwzNjg0NSwyNjAxNSwyNjM4OSw2Mzk5NywyMjUxOSwyODUwMywzMjIyMSwzNjY1NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNzg3OCwzODU5OCwyNDUwMSwyNTA3NCwyODU0OCwxOTk4OCwyMDM3NiwyMDUxMSwyMTQ0OSwyMTk4MywyMzkxOSwyNDA0NiwyNzQyNSwyNzQ5MiwzMDkyMywzMTY0Miw2Mzk5OCwzNjQyNSwzNjU1NCwzNjk3NCwyNTQxNywyNTY2MiwzMDUyOCwzMTM2NCwzNzY3OSwzODAxNSw0MDgxMCwyNTc3NiwyODU5MSwyOTE1OCwyOTg2NCwyOTkxNCwzMTQyOCwzMTc2MiwzMjM4NiwzMTkyMiwzMjQwOCwzNTczOCwzNjEwNiwzODAxMywzOTE4NCwzOTI0NCwyMTA0OSwyMzUxOSwyNTgzMCwyNjQxMywzMjA0NiwyMDcxNywyMTQ0MywyMjY0OSwyNDkyMCwyNDkyMSwyNTA4MiwyNjAyOCwzMTQ0OSwzNTczMCwzNTczNCwyMDQ4OSwyMDUxMywyMTEwOSwyMTgwOSwyMzEwMCwyNDI4OCwyNDQzMiwyNDg4NCwyNTk1MCwyNjEyNCwyNjE2NiwyNjI3NCwyNzA4NSwyODM1NiwyODQ2NiwyOTQ2MiwzMDI0MSwzMTM3OSwzMzA4MSwzMzM2OSwzMzc1MCwzMzk4MCwyMDY2MSwyMjUxMiwyMzQ4OCwyMzUyOCwyNDQyNSwyNTUwNSwzMDc1OCwzMjE4MSwzMzc1NiwzNDA4MSwzNzMxOSwzNzM2NSwyMDg3NCwyNjYxMywzMTU3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjAxMiwyMDkzMiwyMjk3MSwyNDc2NSwzNDM4OSwyMDUwOCw2Mzk5OSwyMTA3NiwyMzYxMCwyNDk1NywyNTExNCwyNTI5OSwyNTg0MiwyNjAyMSwyODM2NCwzMDI0MCwzMzAzNCwzNjQ0OCwzODQ5NSwzODU4NywyMDE5MSwyMTMxNSwyMTkxMiwyMjgyNSwyNDAyOSwyNTc5NywyNzg0OSwyODE1NCwyOTU4OCwzMTM1OSwzMzMwNywzNDIxNCwzNjA2OCwzNjM2OCwzNjk4MywzNzM1MSwzODM2OSwzODQzMywzODg1NCwyMDk4NCwyMTc0NiwyMTg5NCwyNDUwNSwyNTc2NCwyODU1MiwzMjE4MCwzNjYzOSwzNjY4NSwzNzk0MSwyMDY4MSwyMzU3NCwyNzgzOCwyODE1NSwyOTk3OSwzMDY1MSwzMTgwNSwzMTg0NCwzNTQ0OSwzNTUyMiwyMjU1OCwyMjk3NCwyNDA4NiwyNTQ2MywyOTI2NiwzMDA5MCwzMDU3MSwzNTU0OCwzNjAyOCwzNjYyNiwyNDMwNywyNjIyOCwyODE1MiwzMjg5MywzMzcyOSwzNTUzMSwzODczNywzOTg5NCw2NDAwMCwyMTA1OSwyNjM2NywyODA1MywyODM5OSwzMjIyNCwzNTU1OCwzNjkxMCwzNjk1OCwzOTYzNiwyMTAyMSwyMTExOSwyMTczNiwyNDk4MCwyNTIyMCwyNTMwNywyNjc4NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg5OCwyNjk3MCwyNzE4OSwyODgxOCwyODk2NiwzMDgxMywzMDk3NywzMDk5MCwzMTE4NiwzMTI0NSwzMjkxOCwzMzQwMCwzMzQ5MywzMzYwOSwzNDEyMSwzNTk3MCwzNjIyOSwzNzIxOCwzNzI1OSwzNzI5NCwyMDQxOSwyMjIyNSwyOTE2NSwzMDY3OSwzNDU2MCwzNTMyMCwyMzU0NCwyNDUzNCwyNjQ0OSwzNzAzMiwyMTQ3NCwyMjYxOCwyMzU0MSwyNDc0MCwyNDk2MSwyNTY5NiwzMjMxNywzMjg4MCwzNDA4NSwzNzUwNywyNTc3NCwyMDY1MiwyMzgyOCwyNjM2OCwyMjY4NCwyNTI3NywyNTUxMiwyNjg5NCwyNzAwMCwyNzE2NiwyODI2NywzMDM5NCwzMTE3OSwzMzQ2NywzMzgzMywzNTUzNSwzNjI2NCwzNjg2MSwzNzEzOCwzNzE5NSwzNzI3NiwzNzY0OCwzNzY1NiwzNzc4NiwzODYxOSwzOTQ3OCwzOTk0OSwxOTk4NSwzMDA0NCwzMTA2OSwzMTQ4MiwzMTU2OSwzMTY4OSwzMjMwMiwzMzk4OCwzNjQ0MSwzNjQ2OCwzNjYwMCwzNjg4MCwyNjE0OSwyNjk0MywyOTc2MywyMDk4NiwyNjQxNCw0MDY2OCwyMDgwNSwyNDU0NCwyNzc5OCwzNDgwMiwzNDkwOSwzNDkzNSwyNDc1NiwzMzIwNSwzMzc5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjEwMSwyMTQ2MiwyMTU2MSwyMjA2OCwyMzA5NCwyMzYwMSwyODgxMCwzMjczNiwzMjg1OCwzMzAzMCwzMzI2MSwzNjI1OSwzNzI1NywzOTUxOSw0MDQzNCwyMDU5NiwyMDE2NCwyMTQwOCwyNDgyNywyODIwNCwyMzY1MiwyMDM2MCwyMDUxNiwyMTk4OCwyMzc2OSwyNDE1OSwyNDY3NywyNjc3MiwyNzgzNSwyODEwMCwyOTExOCwzMDE2NCwzMDE5NiwzMDMwNSwzMTI1OCwzMTMwNSwzMjE5OSwzMjI1MSwzMjYyMiwzMzI2OCwzNDQ3MywzNjYzNiwzODYwMSwzOTM0Nyw0MDc4NiwyMTA2MywyMTE4OSwzOTE0OSwzNTI0MiwxOTk3MSwyNjU3OCwyODQyMiwyMDQwNSwyMzUyMiwyNjUxNywyNzc4NCwyODAyNCwyOTcyMywzMDc1OSwzNzM0MSwzNzc1NiwzNDc1NiwzMTIwNCwzMTI4MSwyNDU1NSwyMDE4MiwyMTY2OCwyMTgyMiwyMjcwMiwyMjk0OSwyNDgxNiwyNTE3MSwyNTMwMiwyNjQyMiwyNjk2NSwzMzMzMywzODQ2NCwzOTM0NSwzOTM4OSwyMDUyNCwyMTMzMSwyMTgyOCwyMjM5Niw2NDAwMSwyNTE3Niw2NDAwMiwyNTgyNiwyNjIxOSwyNjU4OSwyODYwOSwyODY1NSwyOTczMCwyOTc1MiwzNTM1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNzk0NCwyMTU4NSwyMjAyMiwyMjM3NCwyNDM5MiwyNDk4NiwyNzQ3MCwyODc2MCwyODg0NSwzMjE4NywzNTQ3NywyMjg5MCwzMzA2NywyNTUwNiwzMDQ3MiwzMjgyOSwzNjAxMCwyMjYxMiwyNTY0NSwyNzA2NywyMzQ0NSwyNDA4MSwyODI3MSw2NDAwMywzNDE1MywyMDgxMiwyMTQ4OCwyMjgyNiwyNDYwOCwyNDkwNywyNzUyNiwyNzc2MCwyNzg4OCwzMTUxOCwzMjk3NCwzMzQ5MiwzNjI5NCwzNzA0MCwzOTA4OSw2NDAwNCwyNTc5OSwyODU4MCwyNTc0NSwyNTg2MCwyMDgxNCwyMTUyMCwyMjMwMywzNTM0MiwyNDkyNywyNjc0Miw2NDAwNSwzMDE3MSwzMTU3MCwzMjExMywzNjg5MCwyMjUzNCwyNzA4NCwzMzE1MSwzNTExNCwzNjg2NCwzODk2OSwyMDYwMCwyMjg3MSwyMjk1NiwyNTIzNywzNjg3OSwzOTcyMiwyNDkyNSwyOTMwNSwzODM1OCwyMjM2OSwyMzExMCwyNDA1MiwyNTIyNiwyNTc3MywyNTg1MCwyNjQ4NywyNzg3NCwyNzk2NiwyOTIyOCwyOTc1MCwzMDc3MiwzMjYzMSwzMzQ1MywzNjMxNSwzODkzNSwyMTAyOCwyMjMzOCwyNjQ5NSwyOTI1NiwyOTkyMywzNjAwOSwzNjc3NCwzNzM5MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzODQ0MiwyMDg0MywyMTQ4NSwyNTQyMCwyMDMyOSwyMTc2NCwyNDcyNiwyNTk0MywyNzgwMywyODAzMSwyOTI2MCwyOTQzNywzMTI1NSwzNTIwNywzNTk5NywyNDQyOSwyODU1OCwyODkyMSwzMzE5MiwyNDg0NiwyMDQxNSwyMDU1OSwyNTE1MywyOTI1NSwzMTY4NywzMjIzMiwzMjc0NSwzNjk0MSwzODgyOSwzOTQ0OSwzNjAyMiwyMjM3OCwyNDE3OSwyNjU0NCwzMzgwNSwzNTQxMywyMTUzNiwyMzMxOCwyNDE2MywyNDI5MCwyNDMzMCwyNTk4NywzMjk1NCwzNDEwOSwzODI4MSwzODQ5MSwyMDI5NiwyMTI1MywyMTI2MSwyMTI2MywyMTYzOCwyMTc1NCwyMjI3NSwyNDA2NywyNDU5OCwyNTI0MywyNTI2NSwyNTQyOSw2NDAwNiwyNzg3MywyODAwNiwzMDEyOSwzMDc3MCwzMjk5MCwzMzA3MSwzMzUwMiwzMzg4OSwzMzk3MCwzNDk1NywzNTA5MCwzNjg3NSwzNzYxMCwzOTE2NSwzOTgyNSwyNDEzMywyNjI5MiwyNjMzMywyODY4OSwyOTE5MCw2NDAwNywyMDQ2OSwyMTExNywyNDQyNiwyNDkxNSwyNjQ1MSwyNzE2MSwyODQxOCwyOTkyMiwzMTA4MCwzNDkyMCwzNTk2MSwzOTExMSwzOTEwOCwzOTQ5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTY5NywzMTI2MywyNjk2MywzNTU3NSwzNTkxNCwzOTA4MCwzOTM0MiwyNDQ0NCwyNTI1OSwzMDEzMCwzMDM4MiwzNDk4NywzNjk5MSwzODQ2NiwyMTMwNSwyNDM4MCwyNDUxNywyNzg1MiwyOTY0NCwzMDA1MCwzMDA5MSwzMTU1OCwzMzUzNCwzOTMyNSwyMDA0NywzNjkyNCwxOTk3OSwyMDMwOSwyMTQxNCwyMjc5OSwyNDI2NCwyNjE2MCwyNzgyNywyOTc4MSwzMzY1NSwzNDY2MiwzNjAzMiwzNjk0NCwzODY4NiwzOTk1NywyMjczNywyMzQxNiwzNDM4NCwzNTYwNCw0MDM3MiwyMzUwNiwyNDY4MCwyNDcxNywyNjA5NywyNzczNSwyODQ1MCwyODU3OSwyODY5OCwzMjU5NywzMjc1MiwzODI4OSwzODI5MCwzODQ4MCwzODg2NywyMTEwNiwzNjY3NiwyMDk4OSwyMTU0NywyMTY4OCwyMTg1OSwyMTg5OCwyNzMyMywyODA4NSwzMjIxNiwzMzM4MiwzNzUzMiwzODUxOSw0MDU2OSwyMTUxMiwyMTcwNCwzMDQxOCwzNDUzMiwzODMwOCwzODM1NiwzODQ5MiwyMDEzMCwyMDIzMywyMzAyMiwyMzI3MCwyNDA1NSwyNDY1OCwyNTIzOSwyNjQ3NywyNjY4OSwyNzc4MiwyODIwNywzMjU2OCwzMjkyMywzMzMyMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NDAwOCw2NDAwOSwzODkxNywyMDEzMywyMDU2NSwyMTY4MywyMjQxOSwyMjg3NCwyMzQwMSwyMzQ3NSwyNTAzMiwyNjk5OSwyODAyMywyODcwNywzNDgwOSwzNTI5OSwzNTQ0MiwzNTU1OSwzNjk5NCwzOTQwNSwzOTYwOCwyMTE4MiwyNjY4MCwyMDUwMiwyNDE4NCwyNjQ0NywzMzYwNywzNDg5MiwyMDEzOSwyMTUyMSwyMjE5MCwyOTY3MCwzNzE0MSwzODkxMSwzOTE3NywzOTI1NSwzOTMyMSwyMjA5OSwyMjY4NywzNDM5NSwzNTM3NywyNTAxMCwyNzM4MiwyOTU2MywzNjU2MiwyNzQ2MywzODU3MCwzOTUxMSwyMjg2OSwyOTE4NCwzNjIwMywzODc2MSwyMDQzNiwyMzc5NiwyNDM1OCwyNTA4MCwyNjIwMywyNzg4MywyODg0MywyOTU3MiwyOTYyNSwyOTY5NCwzMDUwNSwzMDU0MSwzMjA2NywzMjA5OCwzMjI5MSwzMzMzNSwzNDg5OCw2NDAxMCwzNjA2NiwzNzQ0OSwzOTAyMywyMzM3NywzMTM0OCwzNDg4MCwzODkxMywyMzI0NCwyMDQ0OCwyMTMzMiwyMjg0NiwyMzgwNSwyNTQwNiwyODAyNSwyOTQzMywzMzAyOSwzMzAzMSwzMzY5OCwzNzU4MywzODk2MCwyMDEzNiwyMDgwNCwyMTAwOSwyMjQxMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNDQxOCwyNzg0MiwyODM2NiwyODY3NywyODc1MiwyODg0NywyOTA3NCwyOTY3MywyOTgwMSwzMzYxMCwzNDcyMiwzNDkxMywzNjg3MiwzNzAyNiwzNzc5NSwzOTMzNiwyMDg0NiwyNDQwNywyNDgwMCwyNDkzNSwyNjI5MSwzNDEzNywzNjQyNiwzNzI5NSwzODc5NSwyMDA0NiwyMDExNCwyMTYyOCwyMjc0MSwyMjc3OCwyMjkwOSwyMzczMywyNDM1OSwyNTE0MiwyNTE2MCwyNjEyMiwyNjIxNSwyNzYyNywyODAwOSwyODExMSwyODI0NiwyODQwOCwyODU2NCwyODY0MCwyODY0OSwyODc2NSwyOTM5MiwyOTczMywyOTc4NiwyOTkyMCwzMDM1NSwzMTA2OCwzMTk0NiwzMjI4NiwzMjk5MywzMzQ0NiwzMzg5OSwzMzk4MywzNDM4MiwzNDM5OSwzNDY3NiwzNTcwMywzNTk0NiwzNzgwNCwzODkxMiwzOTAxMywyNDc4NSwyNTExMCwzNzIzOSwyMzEzMCwyNjEyNywyODE1MSwyODIyMiwyOTc1OSwzOTc0NiwyNDU3MywyNDc5NCwzMTUwMywyMTcwMCwyNDM0NCwyNzc0MiwyNzg1OSwyNzk0NiwyODg4OCwzMjAwNSwzNDQyNSwzNTM0MCw0MDI1MSwyMTI3MCwyMTY0NCwyMzMwMSwyNzE5NCwyODc3OSwzMDA2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTExNywzMTE2NiwzMzQ1NywzMzc3NSwzNTQ0MSwzNTY0OSwzNjAwOCwzODc3Miw2NDAxMSwyNTg0NCwyNTg5OSwzMDkwNiwzMDkwNywzMTMzOSwyMDAyNCwyMTkxNCwyMjg2NCwyMzQ2MiwyNDE4NywyNDczOSwyNTU2MywyNzQ4OSwyNjIxMywyNjcwNywyODE4NSwyOTAyOSwyOTg3MiwzMjAwOCwzNjk5NiwzOTUyOSwzOTk3MywyNzk2MywyODM2OSwyOTUwMiwzNTkwNSwzODM0NiwyMDk3NiwyNDE0MCwyNDQ4OCwyNDY1MywyNDgyMiwyNDg4MCwyNDkwOCwyNjE3OSwyNjE4MCwyNzA0NSwyNzg0MSwyODI1NSwyODM2MSwyODUxNCwyOTAwNCwyOTg1MiwzMDM0MywzMTY4MSwzMTc4MywzMzYxOCwzNDY0NywzNjk0NSwzODU0MSw0MDY0MywyMTI5NSwyMjIzOCwyNDMxNSwyNDQ1OCwyNDY3NCwyNDcyNCwyNTA3OSwyNjIxNCwyNjM3MSwyNzI5MiwyODE0MiwyODU5MCwyODc4NCwyOTU0NiwzMjM2MiwzMzIxNCwzMzU4OCwzNDUxNiwzNTQ5NiwzNjAzNiwyMTEyMywyOTU1NCwyMzQ0NiwyNzI0MywzNzg5MiwyMTc0MiwyMjE1MCwyMzM4OSwyNTkyOCwyNTk4OSwyNjMxMywyNjc4MywyODA0NSwyODEwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTI0MywzMjk0OCwzNzIzNywzOTUwMSwyMDM5OSwyMDUwNSwyMTQwMiwyMTUxOCwyMTU2NCwyMTg5NywyMTk1NywyNDEyNywyNDQ2MCwyNjQyOSwyOTAzMCwyOTY2MSwzNjg2OSwyMTIxMSwyMTIzNSwyMjYyOCwyMjczNCwyODkzMiwyOTA3MSwyOTE3OSwzNDIyNCwzNTM0NywyNjI0OCwzNDIxNiwyMTkyNywyNjI0NCwyOTAwMiwzMzg0MSwyMTMyMSwyMTkxMywyNzU4NSwyNDQwOSwyNDUwOSwyNTU4MiwyNjI0OSwyODk5OSwzNTU2OSwzNjYzNyw0MDYzOCwyMDI0MSwyNTY1OCwyODg3NSwzMDA1NCwzNDQwNywyNDY3NiwzNTY2Miw0MDQ0MCwyMDgwNywyMDk4MiwyMTI1NiwyNzk1OCwzMzAxNiw0MDY1NywyNjEzMywyNzQyNywyODgyNCwzMDE2NSwyMTUwNywyMzY3MywzMjAwNywzNTM1MCwyNzQyNCwyNzQ1MywyNzQ2MiwyMTU2MCwyNDY4OCwyNzk2NSwzMjcyNSwzMzI4OCwyMDY5NCwyMDk1OCwyMTkxNiwyMjEyMywyMjIyMSwyMzAyMCwyMzMwNSwyNDA3NiwyNDk4NSwyNDk4NCwyNTEzNywyNjIwNiwyNjM0MiwyOTA4MSwyOTExMywyOTExNCwyOTM1MSwzMTE0MywzMTIzMiwzMjY5MCwzNTQ0MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxcbiAgXCJnYjE4MDMwXCI6WzE5OTcwLDE5OTcyLDE5OTczLDE5OTc0LDE5OTgzLDE5OTg2LDE5OTkxLDE5OTk5LDIwMDAwLDIwMDAxLDIwMDAzLDIwMDA2LDIwMDA5LDIwMDE0LDIwMDE1LDIwMDE3LDIwMDE5LDIwMDIxLDIwMDIzLDIwMDI4LDIwMDMyLDIwMDMzLDIwMDM0LDIwMDM2LDIwMDM4LDIwMDQyLDIwMDQ5LDIwMDUzLDIwMDU1LDIwMDU4LDIwMDU5LDIwMDY2LDIwMDY3LDIwMDY4LDIwMDY5LDIwMDcxLDIwMDcyLDIwMDc0LDIwMDc1LDIwMDc2LDIwMDc3LDIwMDc4LDIwMDc5LDIwMDgyLDIwMDg0LDIwMDg1LDIwMDg2LDIwMDg3LDIwMDg4LDIwMDg5LDIwMDkwLDIwMDkxLDIwMDkyLDIwMDkzLDIwMDk1LDIwMDk2LDIwMDk3LDIwMDk4LDIwMDk5LDIwMTAwLDIwMTAxLDIwMTAzLDIwMTA2LDIwMTEyLDIwMTE4LDIwMTE5LDIwMTIxLDIwMTI0LDIwMTI1LDIwMTI2LDIwMTMxLDIwMTM4LDIwMTQzLDIwMTQ0LDIwMTQ1LDIwMTQ4LDIwMTUwLDIwMTUxLDIwMTUyLDIwMTUzLDIwMTU2LDIwMTU3LDIwMTU4LDIwMTY4LDIwMTcyLDIwMTc1LDIwMTc2LDIwMTc4LDIwMTg2LDIwMTg3LDIwMTg4LDIwMTkyLDIwMTk0LDIwMTk4LDIwMTk5LDIwMjAxLDIwMjA1LDIwMjA2LDIwMjA3LDIwMjA5LDIwMjEyLDIwMjE2LDIwMjE3LDIwMjE4LDIwMjIwLDIwMjIyLDIwMjI0LDIwMjI2LDIwMjI3LDIwMjI4LDIwMjI5LDIwMjMwLDIwMjMxLDIwMjMyLDIwMjM1LDIwMjM2LDIwMjQyLDIwMjQzLDIwMjQ0LDIwMjQ1LDIwMjQ2LDIwMjUyLDIwMjUzLDIwMjU3LDIwMjU5LDIwMjY0LDIwMjY1LDIwMjY4LDIwMjY5LDIwMjcwLDIwMjczLDIwMjc1LDIwMjc3LDIwMjc5LDIwMjgxLDIwMjgzLDIwMjg2LDIwMjg3LDIwMjg4LDIwMjg5LDIwMjkwLDIwMjkyLDIwMjkzLDIwMjk1LDIwMjk2LDIwMjk3LDIwMjk4LDIwMjk5LDIwMzAwLDIwMzA2LDIwMzA4LDIwMzEwLDIwMzIxLDIwMzIyLDIwMzI2LDIwMzI4LDIwMzMwLDIwMzMxLDIwMzMzLDIwMzM0LDIwMzM3LDIwMzM4LDIwMzQxLDIwMzQzLDIwMzQ0LDIwMzQ1LDIwMzQ2LDIwMzQ5LDIwMzUyLDIwMzUzLDIwMzU0LDIwMzU3LDIwMzU4LDIwMzU5LDIwMzYyLDIwMzY0LDIwMzY2LDIwMzY4LDIwMzcwLDIwMzcxLDIwMzczLDIwMzc0LDIwMzc2LDIwMzc3LDIwMzc4LDIwMzgwLDIwMzgyLDIwMzgzLDIwMzg1LDIwMzg2LDIwMzg4LDIwMzk1LDIwMzk3LDIwNDAwLDIwNDAxLDIwNDAyLDIwNDAzLDIwNDA0LDIwNDA2LDIwNDA3LDIwNDA4LDIwNDA5LDIwNDEwLDIwNDExLDIwNDEyLDIwNDEzLDIwNDE0LDIwNDE2LDIwNDE3LDIwNDE4LDIwNDIyLDIwNDIzLDIwNDI0LDIwNDI1LDIwNDI3LDIwNDI4LDIwNDI5LDIwNDM0LDIwNDM1LDIwNDM2LDIwNDM3LDIwNDM4LDIwNDQxLDIwNDQzLDIwNDQ4LDIwNDUwLDIwNDUyLDIwNDUzLDIwNDU1LDIwNDU5LDIwNDYwLDIwNDY0LDIwNDY2LDIwNDY4LDIwNDY5LDIwNDcwLDIwNDcxLDIwNDczLDIwNDc1LDIwNDc2LDIwNDc3LDIwNDc5LDIwNDgwLDIwNDgxLDIwNDgyLDIwNDgzLDIwNDg0LDIwNDg1LDIwNDg2LDIwNDg3LDIwNDg4LDIwNDg5LDIwNDkwLDIwNDkxLDIwNDk0LDIwNDk2LDIwNDk3LDIwNDk5LDIwNTAxLDIwNTAyLDIwNTAzLDIwNTA3LDIwNTA5LDIwNTEwLDIwNTEyLDIwNTE0LDIwNTE1LDIwNTE2LDIwNTE5LDIwNTIzLDIwNTI3LDIwNTI4LDIwNTI5LDIwNTMwLDIwNTMxLDIwNTMyLDIwNTMzLDIwNTM0LDIwNTM1LDIwNTM2LDIwNTM3LDIwNTM5LDIwNTQxLDIwNTQzLDIwNTQ0LDIwNTQ1LDIwNTQ2LDIwNTQ4LDIwNTQ5LDIwNTUwLDIwNTUzLDIwNTU0LDIwNTU1LDIwNTU3LDIwNTYwLDIwNTYxLDIwNTYyLDIwNTYzLDIwNTY0LDIwNTY2LDIwNTY3LDIwNTY4LDIwNTY5LDIwNTcxLDIwNTczLDIwNTc0LDIwNTc1LDIwNTc2LDIwNTc3LDIwNTc4LDIwNTc5LDIwNTgwLDIwNTgyLDIwNTgzLDIwNTg0LDIwNTg1LDIwNTg2LDIwNTg3LDIwNTg5LDIwNTkwLDIwNTkxLDIwNTkyLDIwNTkzLDIwNTk0LDIwNTk1LDIwNTk2LDIwNTk3LDIwNjAwLDIwNjAxLDIwNjAyLDIwNjA0LDIwNjA1LDIwNjA5LDIwNjEwLDIwNjExLDIwNjEyLDIwNjE0LDIwNjE1LDIwNjE3LDIwNjE4LDIwNjE5LDIwNjIwLDIwNjIyLDIwNjIzLDIwNjI0LDIwNjI1LDIwNjI2LDIwNjI3LDIwNjI4LDIwNjI5LDIwNjMwLDIwNjMxLDIwNjMyLDIwNjMzLDIwNjM0LDIwNjM1LDIwNjM2LDIwNjM3LDIwNjM4LDIwNjM5LDIwNjQwLDIwNjQxLDIwNjQyLDIwNjQ0LDIwNjQ2LDIwNjUwLDIwNjUxLDIwNjUzLDIwNjU0LDIwNjU1LDIwNjU2LDIwNjU3LDIwNjU5LDIwNjYwLDIwNjYxLDIwNjYyLDIwNjYzLDIwNjY0LDIwNjY1LDIwNjY4LDIwNjY5LDIwNjcwLDIwNjcxLDIwNjcyLDIwNjczLDIwNjc0LDIwNjc1LDIwNjc2LDIwNjc3LDIwNjc4LDIwNjc5LDIwNjgwLDIwNjgxLDIwNjgyLDIwNjgzLDIwNjg0LDIwNjg1LDIwNjg2LDIwNjg4LDIwNjg5LDIwNjkwLDIwNjkxLDIwNjkyLDIwNjkzLDIwNjk1LDIwNjk2LDIwNjk3LDIwNjk5LDIwNzAwLDIwNzAxLDIwNzAyLDIwNzAzLDIwNzA0LDIwNzA1LDIwNzA2LDIwNzA3LDIwNzA4LDIwNzA5LDIwNzEyLDIwNzEzLDIwNzE0LDIwNzE1LDIwNzE5LDIwNzIwLDIwNzIxLDIwNzIyLDIwNzI0LDIwNzI2LDIwNzI3LDIwNzI4LDIwNzI5LDIwNzMwLDIwNzMyLDIwNzMzLDIwNzM0LDIwNzM1LDIwNzM2LDIwNzM3LDIwNzM4LDIwNzM5LDIwNzQwLDIwNzQxLDIwNzQ0LDIwNzQ1LDIwNzQ2LDIwNzQ4LDIwNzQ5LDIwNzUwLDIwNzUxLDIwNzUyLDIwNzUzLDIwNzU1LDIwNzU2LDIwNzU3LDIwNzU4LDIwNzU5LDIwNzYwLDIwNzYxLDIwNzYyLDIwNzYzLDIwNzY0LDIwNzY1LDIwNzY2LDIwNzY3LDIwNzY4LDIwNzcwLDIwNzcxLDIwNzcyLDIwNzczLDIwNzc0LDIwNzc1LDIwNzc2LDIwNzc3LDIwNzc4LDIwNzc5LDIwNzgwLDIwNzgxLDIwNzgyLDIwNzgzLDIwNzg0LDIwNzg1LDIwNzg2LDIwNzg3LDIwNzg4LDIwNzg5LDIwNzkwLDIwNzkxLDIwNzkyLDIwNzkzLDIwNzk0LDIwNzk1LDIwNzk2LDIwNzk3LDIwNzk4LDIwODAyLDIwODA3LDIwODEwLDIwODEyLDIwODE0LDIwODE1LDIwODE2LDIwODE4LDIwODE5LDIwODIzLDIwODI0LDIwODI1LDIwODI3LDIwODI5LDIwODMwLDIwODMxLDIwODMyLDIwODMzLDIwODM1LDIwODM2LDIwODM4LDIwODM5LDIwODQxLDIwODQyLDIwODQ3LDIwODUwLDIwODU4LDIwODYyLDIwODYzLDIwODY3LDIwODY4LDIwODcwLDIwODcxLDIwODc0LDIwODc1LDIwODc4LDIwODc5LDIwODgwLDIwODgxLDIwODgzLDIwODg0LDIwODg4LDIwODkwLDIwODkzLDIwODk0LDIwODk1LDIwODk3LDIwODk5LDIwOTAyLDIwOTAzLDIwOTA0LDIwOTA1LDIwOTA2LDIwOTA5LDIwOTEwLDIwOTE2LDIwOTIwLDIwOTIxLDIwOTIyLDIwOTI2LDIwOTI3LDIwOTI5LDIwOTMwLDIwOTMxLDIwOTMzLDIwOTM2LDIwOTM4LDIwOTQxLDIwOTQyLDIwOTQ0LDIwOTQ2LDIwOTQ3LDIwOTQ4LDIwOTQ5LDIwOTUwLDIwOTUxLDIwOTUyLDIwOTUzLDIwOTU0LDIwOTU2LDIwOTU4LDIwOTU5LDIwOTYyLDIwOTYzLDIwOTY1LDIwOTY2LDIwOTY3LDIwOTY4LDIwOTY5LDIwOTcwLDIwOTcyLDIwOTc0LDIwOTc3LDIwOTc4LDIwOTgwLDIwOTgzLDIwOTkwLDIwOTk2LDIwOTk3LDIxMDAxLDIxMDAzLDIxMDA0LDIxMDA3LDIxMDA4LDIxMDExLDIxMDEyLDIxMDEzLDIxMDIwLDIxMDIyLDIxMDIzLDIxMDI1LDIxMDI2LDIxMDI3LDIxMDI5LDIxMDMwLDIxMDMxLDIxMDM0LDIxMDM2LDIxMDM5LDIxMDQxLDIxMDQyLDIxMDQ0LDIxMDQ1LDIxMDUyLDIxMDU0LDIxMDYwLDIxMDYxLDIxMDYyLDIxMDYzLDIxMDY0LDIxMDY1LDIxMDY3LDIxMDcwLDIxMDcxLDIxMDc0LDIxMDc1LDIxMDc3LDIxMDc5LDIxMDgwLDIxMDgxLDIxMDgyLDIxMDgzLDIxMDg1LDIxMDg3LDIxMDg4LDIxMDkwLDIxMDkxLDIxMDkyLDIxMDk0LDIxMDk2LDIxMDk5LDIxMTAwLDIxMTAxLDIxMTAyLDIxMTA0LDIxMTA1LDIxMTA3LDIxMTA4LDIxMTA5LDIxMTEwLDIxMTExLDIxMTEyLDIxMTEzLDIxMTE0LDIxMTE1LDIxMTE2LDIxMTE4LDIxMTIwLDIxMTIzLDIxMTI0LDIxMTI1LDIxMTI2LDIxMTI3LDIxMTI5LDIxMTMwLDIxMTMxLDIxMTMyLDIxMTMzLDIxMTM0LDIxMTM1LDIxMTM3LDIxMTM4LDIxMTQwLDIxMTQxLDIxMTQyLDIxMTQzLDIxMTQ0LDIxMTQ1LDIxMTQ2LDIxMTQ4LDIxMTU2LDIxMTU3LDIxMTU4LDIxMTU5LDIxMTY2LDIxMTY3LDIxMTY4LDIxMTcyLDIxMTczLDIxMTc0LDIxMTc1LDIxMTc2LDIxMTc3LDIxMTc4LDIxMTc5LDIxMTgwLDIxMTgxLDIxMTg0LDIxMTg1LDIxMTg2LDIxMTg4LDIxMTg5LDIxMTkwLDIxMTkyLDIxMTk0LDIxMTk2LDIxMTk3LDIxMTk4LDIxMTk5LDIxMjAxLDIxMjAzLDIxMjA0LDIxMjA1LDIxMjA3LDIxMjA5LDIxMjEwLDIxMjExLDIxMjEyLDIxMjEzLDIxMjE0LDIxMjE2LDIxMjE3LDIxMjE4LDIxMjE5LDIxMjIxLDIxMjIyLDIxMjIzLDIxMjI0LDIxMjI1LDIxMjI2LDIxMjI3LDIxMjI4LDIxMjI5LDIxMjMwLDIxMjMxLDIxMjMzLDIxMjM0LDIxMjM1LDIxMjM2LDIxMjM3LDIxMjM4LDIxMjM5LDIxMjQwLDIxMjQzLDIxMjQ0LDIxMjQ1LDIxMjQ5LDIxMjUwLDIxMjUxLDIxMjUyLDIxMjU1LDIxMjU3LDIxMjU4LDIxMjU5LDIxMjYwLDIxMjYyLDIxMjY1LDIxMjY2LDIxMjY3LDIxMjY4LDIxMjcyLDIxMjc1LDIxMjc2LDIxMjc4LDIxMjc5LDIxMjgyLDIxMjg0LDIxMjg1LDIxMjg3LDIxMjg4LDIxMjg5LDIxMjkxLDIxMjkyLDIxMjkzLDIxMjk1LDIxMjk2LDIxMjk3LDIxMjk4LDIxMjk5LDIxMzAwLDIxMzAxLDIxMzAyLDIxMzAzLDIxMzA0LDIxMzA4LDIxMzA5LDIxMzEyLDIxMzE0LDIxMzE2LDIxMzE4LDIxMzIzLDIxMzI0LDIxMzI1LDIxMzI4LDIxMzMyLDIxMzM2LDIxMzM3LDIxMzM5LDIxMzQxLDIxMzQ5LDIxMzUyLDIxMzU0LDIxMzU2LDIxMzU3LDIxMzYyLDIxMzY2LDIxMzY5LDIxMzcxLDIxMzcyLDIxMzczLDIxMzc0LDIxMzc2LDIxMzc3LDIxMzc5LDIxMzgzLDIxMzg0LDIxMzg2LDIxMzkwLDIxMzkxLDIxMzkyLDIxMzkzLDIxMzk0LDIxMzk1LDIxMzk2LDIxMzk4LDIxMzk5LDIxNDAxLDIxNDAzLDIxNDA0LDIxNDA2LDIxNDA4LDIxNDA5LDIxNDEyLDIxNDE1LDIxNDE4LDIxNDE5LDIxNDIwLDIxNDIxLDIxNDIzLDIxNDI0LDIxNDI1LDIxNDI2LDIxNDI3LDIxNDI4LDIxNDI5LDIxNDMxLDIxNDMyLDIxNDMzLDIxNDM0LDIxNDM2LDIxNDM3LDIxNDM4LDIxNDQwLDIxNDQzLDIxNDQ0LDIxNDQ1LDIxNDQ2LDIxNDQ3LDIxNDU0LDIxNDU1LDIxNDU2LDIxNDU4LDIxNDU5LDIxNDYxLDIxNDY2LDIxNDY4LDIxNDY5LDIxNDcwLDIxNDczLDIxNDc0LDIxNDc5LDIxNDkyLDIxNDk4LDIxNTAyLDIxNTAzLDIxNTA0LDIxNTA2LDIxNTA5LDIxNTExLDIxNTE1LDIxNTI0LDIxNTI4LDIxNTI5LDIxNTMwLDIxNTMyLDIxNTM4LDIxNTQwLDIxNTQxLDIxNTQ2LDIxNTUyLDIxNTU1LDIxNTU4LDIxNTU5LDIxNTYyLDIxNTY1LDIxNTY3LDIxNTY5LDIxNTcwLDIxNTcyLDIxNTczLDIxNTc1LDIxNTc3LDIxNTgwLDIxNTgxLDIxNTgyLDIxNTgzLDIxNTg1LDIxNTk0LDIxNTk3LDIxNTk4LDIxNTk5LDIxNjAwLDIxNjAxLDIxNjAzLDIxNjA1LDIxNjA3LDIxNjA5LDIxNjEwLDIxNjExLDIxNjEyLDIxNjEzLDIxNjE0LDIxNjE1LDIxNjE2LDIxNjIwLDIxNjI1LDIxNjI2LDIxNjMwLDIxNjMxLDIxNjMzLDIxNjM1LDIxNjM3LDIxNjM5LDIxNjQwLDIxNjQxLDIxNjQyLDIxNjQ1LDIxNjQ5LDIxNjUxLDIxNjU1LDIxNjU2LDIxNjYwLDIxNjYyLDIxNjYzLDIxNjY0LDIxNjY1LDIxNjY2LDIxNjY5LDIxNjc4LDIxNjgwLDIxNjgyLDIxNjg1LDIxNjg2LDIxNjg3LDIxNjg5LDIxNjkwLDIxNjkyLDIxNjk0LDIxNjk5LDIxNzAxLDIxNzA2LDIxNzA3LDIxNzE4LDIxNzIwLDIxNzIzLDIxNzI4LDIxNzI5LDIxNzMwLDIxNzMxLDIxNzMyLDIxNzM5LDIxNzQwLDIxNzQzLDIxNzQ0LDIxNzQ1LDIxNzQ4LDIxNzQ5LDIxNzUwLDIxNzUxLDIxNzUyLDIxNzUzLDIxNzU1LDIxNzU4LDIxNzYwLDIxNzYyLDIxNzYzLDIxNzY0LDIxNzY1LDIxNzY4LDIxNzcwLDIxNzcxLDIxNzcyLDIxNzczLDIxNzc0LDIxNzc4LDIxNzc5LDIxNzgxLDIxNzgyLDIxNzgzLDIxNzg0LDIxNzg1LDIxNzg2LDIxNzg4LDIxNzg5LDIxNzkwLDIxNzkxLDIxNzkzLDIxNzk3LDIxNzk4LDIxODAwLDIxODAxLDIxODAzLDIxODA1LDIxODEwLDIxODEyLDIxODEzLDIxODE0LDIxODE2LDIxODE3LDIxODE4LDIxODE5LDIxODIxLDIxODI0LDIxODI2LDIxODI5LDIxODMxLDIxODMyLDIxODM1LDIxODM2LDIxODM3LDIxODM4LDIxODM5LDIxODQxLDIxODQyLDIxODQzLDIxODQ0LDIxODQ3LDIxODQ4LDIxODQ5LDIxODUwLDIxODUxLDIxODUzLDIxODU0LDIxODU1LDIxODU2LDIxODU4LDIxODU5LDIxODY0LDIxODY1LDIxODY3LDIxODcxLDIxODcyLDIxODczLDIxODc0LDIxODc1LDIxODc2LDIxODgxLDIxODgyLDIxODg1LDIxODg3LDIxODkzLDIxODk0LDIxOTAwLDIxOTAxLDIxOTAyLDIxOTA0LDIxOTA2LDIxOTA3LDIxOTA5LDIxOTEwLDIxOTExLDIxOTE0LDIxOTE1LDIxOTE4LDIxOTIwLDIxOTIxLDIxOTIyLDIxOTIzLDIxOTI0LDIxOTI1LDIxOTI2LDIxOTI4LDIxOTI5LDIxOTMwLDIxOTMxLDIxOTMyLDIxOTMzLDIxOTM0LDIxOTM1LDIxOTM2LDIxOTM4LDIxOTQwLDIxOTQyLDIxOTQ0LDIxOTQ2LDIxOTQ4LDIxOTUxLDIxOTUyLDIxOTUzLDIxOTU0LDIxOTU1LDIxOTU4LDIxOTU5LDIxOTYwLDIxOTYyLDIxOTYzLDIxOTY2LDIxOTY3LDIxOTY4LDIxOTczLDIxOTc1LDIxOTc2LDIxOTc3LDIxOTc4LDIxOTc5LDIxOTgyLDIxOTg0LDIxOTg2LDIxOTkxLDIxOTkzLDIxOTk3LDIxOTk4LDIyMDAwLDIyMDAxLDIyMDA0LDIyMDA2LDIyMDA4LDIyMDA5LDIyMDEwLDIyMDExLDIyMDEyLDIyMDE1LDIyMDE4LDIyMDE5LDIyMDIwLDIyMDIxLDIyMDIyLDIyMDIzLDIyMDI2LDIyMDI3LDIyMDI5LDIyMDMyLDIyMDMzLDIyMDM0LDIyMDM1LDIyMDM2LDIyMDM3LDIyMDM4LDIyMDM5LDIyMDQxLDIyMDQyLDIyMDQ0LDIyMDQ1LDIyMDQ4LDIyMDQ5LDIyMDUwLDIyMDUzLDIyMDU0LDIyMDU2LDIyMDU3LDIyMDU4LDIyMDU5LDIyMDYyLDIyMDYzLDIyMDY0LDIyMDY3LDIyMDY5LDIyMDcxLDIyMDcyLDIyMDc0LDIyMDc2LDIyMDc3LDIyMDc4LDIyMDgwLDIyMDgxLDIyMDgyLDIyMDgzLDIyMDg0LDIyMDg1LDIyMDg2LDIyMDg3LDIyMDg4LDIyMDg5LDIyMDkwLDIyMDkxLDIyMDk1LDIyMDk2LDIyMDk3LDIyMDk4LDIyMDk5LDIyMTAxLDIyMTAyLDIyMTA2LDIyMTA3LDIyMTA5LDIyMTEwLDIyMTExLDIyMTEyLDIyMTEzLDIyMTE1LDIyMTE3LDIyMTE4LDIyMTE5LDIyMTI1LDIyMTI2LDIyMTI3LDIyMTI4LDIyMTMwLDIyMTMxLDIyMTMyLDIyMTMzLDIyMTM1LDIyMTM2LDIyMTM3LDIyMTM4LDIyMTQxLDIyMTQyLDIyMTQzLDIyMTQ0LDIyMTQ1LDIyMTQ2LDIyMTQ3LDIyMTQ4LDIyMTUxLDIyMTUyLDIyMTUzLDIyMTU0LDIyMTU1LDIyMTU2LDIyMTU3LDIyMTYwLDIyMTYxLDIyMTYyLDIyMTY0LDIyMTY1LDIyMTY2LDIyMTY3LDIyMTY4LDIyMTY5LDIyMTcwLDIyMTcxLDIyMTcyLDIyMTczLDIyMTc0LDIyMTc1LDIyMTc2LDIyMTc3LDIyMTc4LDIyMTgwLDIyMTgxLDIyMTgyLDIyMTgzLDIyMTg0LDIyMTg1LDIyMTg2LDIyMTg3LDIyMTg4LDIyMTg5LDIyMTkwLDIyMTkyLDIyMTkzLDIyMTk0LDIyMTk1LDIyMTk2LDIyMTk3LDIyMTk4LDIyMjAwLDIyMjAxLDIyMjAyLDIyMjAzLDIyMjA1LDIyMjA2LDIyMjA3LDIyMjA4LDIyMjA5LDIyMjEwLDIyMjExLDIyMjEyLDIyMjEzLDIyMjE0LDIyMjE1LDIyMjE2LDIyMjE3LDIyMjE5LDIyMjIwLDIyMjIxLDIyMjIyLDIyMjIzLDIyMjI0LDIyMjI1LDIyMjI2LDIyMjI3LDIyMjI5LDIyMjMwLDIyMjMyLDIyMjMzLDIyMjM2LDIyMjQzLDIyMjQ1LDIyMjQ2LDIyMjQ3LDIyMjQ4LDIyMjQ5LDIyMjUwLDIyMjUyLDIyMjU0LDIyMjU1LDIyMjU4LDIyMjU5LDIyMjYyLDIyMjYzLDIyMjY0LDIyMjY3LDIyMjY4LDIyMjcyLDIyMjczLDIyMjc0LDIyMjc3LDIyMjc5LDIyMjgzLDIyMjg0LDIyMjg1LDIyMjg2LDIyMjg3LDIyMjg4LDIyMjg5LDIyMjkwLDIyMjkxLDIyMjkyLDIyMjkzLDIyMjk0LDIyMjk1LDIyMjk2LDIyMjk3LDIyMjk4LDIyMjk5LDIyMzAxLDIyMzAyLDIyMzA0LDIyMzA1LDIyMzA2LDIyMzA4LDIyMzA5LDIyMzEwLDIyMzExLDIyMzE1LDIyMzIxLDIyMzIyLDIyMzI0LDIyMzI1LDIyMzI2LDIyMzI3LDIyMzI4LDIyMzMyLDIyMzMzLDIyMzM1LDIyMzM3LDIyMzM5LDIyMzQwLDIyMzQxLDIyMzQyLDIyMzQ0LDIyMzQ1LDIyMzQ3LDIyMzU0LDIyMzU1LDIyMzU2LDIyMzU3LDIyMzU4LDIyMzYwLDIyMzYxLDIyMzcwLDIyMzcxLDIyMzczLDIyMzc1LDIyMzgwLDIyMzgyLDIyMzg0LDIyMzg1LDIyMzg2LDIyMzg4LDIyMzg5LDIyMzkyLDIyMzkzLDIyMzk0LDIyMzk3LDIyMzk4LDIyMzk5LDIyNDAwLDIyNDAxLDIyNDA3LDIyNDA4LDIyNDA5LDIyNDEwLDIyNDEzLDIyNDE0LDIyNDE1LDIyNDE2LDIyNDE3LDIyNDIwLDIyNDIxLDIyNDIyLDIyNDIzLDIyNDI0LDIyNDI1LDIyNDI2LDIyNDI4LDIyNDI5LDIyNDMwLDIyNDMxLDIyNDM3LDIyNDQwLDIyNDQyLDIyNDQ0LDIyNDQ3LDIyNDQ4LDIyNDQ5LDIyNDUxLDIyNDUzLDIyNDU0LDIyNDU1LDIyNDU3LDIyNDU4LDIyNDU5LDIyNDYwLDIyNDYxLDIyNDYyLDIyNDYzLDIyNDY0LDIyNDY1LDIyNDY4LDIyNDY5LDIyNDcwLDIyNDcxLDIyNDcyLDIyNDczLDIyNDc0LDIyNDc2LDIyNDc3LDIyNDgwLDIyNDgxLDIyNDgzLDIyNDg2LDIyNDg3LDIyNDkxLDIyNDkyLDIyNDk0LDIyNDk3LDIyNDk4LDIyNDk5LDIyNTAxLDIyNTAyLDIyNTAzLDIyNTA0LDIyNTA1LDIyNTA2LDIyNTA3LDIyNTA4LDIyNTEwLDIyNTEyLDIyNTEzLDIyNTE0LDIyNTE1LDIyNTE3LDIyNTE4LDIyNTE5LDIyNTIzLDIyNTI0LDIyNTI2LDIyNTI3LDIyNTI5LDIyNTMxLDIyNTMyLDIyNTMzLDIyNTM2LDIyNTM3LDIyNTM4LDIyNTQwLDIyNTQyLDIyNTQzLDIyNTQ0LDIyNTQ2LDIyNTQ3LDIyNTQ4LDIyNTUwLDIyNTUxLDIyNTUyLDIyNTU0LDIyNTU1LDIyNTU2LDIyNTU3LDIyNTU5LDIyNTYyLDIyNTYzLDIyNTY1LDIyNTY2LDIyNTY3LDIyNTY4LDIyNTY5LDIyNTcxLDIyNTcyLDIyNTczLDIyNTc0LDIyNTc1LDIyNTc3LDIyNTc4LDIyNTc5LDIyNTgwLDIyNTgyLDIyNTgzLDIyNTg0LDIyNTg1LDIyNTg2LDIyNTg3LDIyNTg4LDIyNTg5LDIyNTkwLDIyNTkxLDIyNTkyLDIyNTkzLDIyNTk0LDIyNTk1LDIyNTk3LDIyNTk4LDIyNTk5LDIyNjAwLDIyNjAxLDIyNjAyLDIyNjAzLDIyNjA2LDIyNjA3LDIyNjA4LDIyNjEwLDIyNjExLDIyNjEzLDIyNjE0LDIyNjE1LDIyNjE3LDIyNjE4LDIyNjE5LDIyNjIwLDIyNjIxLDIyNjIzLDIyNjI0LDIyNjI1LDIyNjI2LDIyNjI3LDIyNjI4LDIyNjMwLDIyNjMxLDIyNjMyLDIyNjMzLDIyNjM0LDIyNjM3LDIyNjM4LDIyNjM5LDIyNjQwLDIyNjQxLDIyNjQyLDIyNjQzLDIyNjQ0LDIyNjQ1LDIyNjQ2LDIyNjQ3LDIyNjQ4LDIyNjQ5LDIyNjUwLDIyNjUxLDIyNjUyLDIyNjUzLDIyNjU1LDIyNjU4LDIyNjYwLDIyNjYyLDIyNjYzLDIyNjY0LDIyNjY2LDIyNjY3LDIyNjY4LDIyNjY5LDIyNjcwLDIyNjcxLDIyNjcyLDIyNjczLDIyNjc2LDIyNjc3LDIyNjc4LDIyNjc5LDIyNjgwLDIyNjgzLDIyNjg0LDIyNjg1LDIyNjg4LDIyNjg5LDIyNjkwLDIyNjkxLDIyNjkyLDIyNjkzLDIyNjk0LDIyNjk1LDIyNjk4LDIyNjk5LDIyNzAwLDIyNzAxLDIyNzAyLDIyNzAzLDIyNzA0LDIyNzA1LDIyNzA2LDIyNzA3LDIyNzA4LDIyNzA5LDIyNzEwLDIyNzExLDIyNzEyLDIyNzEzLDIyNzE0LDIyNzE1LDIyNzE3LDIyNzE4LDIyNzE5LDIyNzIwLDIyNzIyLDIyNzIzLDIyNzI0LDIyNzI2LDIyNzI3LDIyNzI4LDIyNzI5LDIyNzMwLDIyNzMxLDIyNzMyLDIyNzMzLDIyNzM0LDIyNzM1LDIyNzM2LDIyNzM4LDIyNzM5LDIyNzQwLDIyNzQyLDIyNzQzLDIyNzQ0LDIyNzQ1LDIyNzQ2LDIyNzQ3LDIyNzQ4LDIyNzQ5LDIyNzUwLDIyNzUxLDIyNzUyLDIyNzUzLDIyNzU0LDIyNzU1LDIyNzU3LDIyNzU4LDIyNzU5LDIyNzYwLDIyNzYxLDIyNzYyLDIyNzY1LDIyNzY3LDIyNzY5LDIyNzcwLDIyNzcyLDIyNzczLDIyNzc1LDIyNzc2LDIyNzc4LDIyNzc5LDIyNzgwLDIyNzgxLDIyNzgyLDIyNzgzLDIyNzg0LDIyNzg1LDIyNzg3LDIyNzg5LDIyNzkwLDIyNzkyLDIyNzkzLDIyNzk0LDIyNzk1LDIyNzk2LDIyNzk4LDIyODAwLDIyODAxLDIyODAyLDIyODAzLDIyODA3LDIyODA4LDIyODExLDIyODEzLDIyODE0LDIyODE2LDIyODE3LDIyODE4LDIyODE5LDIyODIyLDIyODI0LDIyODI4LDIyODMyLDIyODM0LDIyODM1LDIyODM3LDIyODM4LDIyODQzLDIyODQ1LDIyODQ2LDIyODQ3LDIyODQ4LDIyODUxLDIyODUzLDIyODU0LDIyODU4LDIyODYwLDIyODYxLDIyODY0LDIyODY2LDIyODY3LDIyODczLDIyODc1LDIyODc2LDIyODc3LDIyODc4LDIyODc5LDIyODgxLDIyODgzLDIyODg0LDIyODg2LDIyODg3LDIyODg4LDIyODg5LDIyODkwLDIyODkxLDIyODkyLDIyODkzLDIyODk0LDIyODk1LDIyODk2LDIyODk3LDIyODk4LDIyOTAxLDIyOTAzLDIyOTA2LDIyOTA3LDIyOTA4LDIyOTEwLDIyOTExLDIyOTEyLDIyOTE3LDIyOTIxLDIyOTIzLDIyOTI0LDIyOTI2LDIyOTI3LDIyOTI4LDIyOTI5LDIyOTMyLDIyOTMzLDIyOTM2LDIyOTM4LDIyOTM5LDIyOTQwLDIyOTQxLDIyOTQzLDIyOTQ0LDIyOTQ1LDIyOTQ2LDIyOTUwLDIyOTUxLDIyOTU2LDIyOTU3LDIyOTYwLDIyOTYxLDIyOTYzLDIyOTY0LDIyOTY1LDIyOTY2LDIyOTY3LDIyOTY4LDIyOTcwLDIyOTcyLDIyOTczLDIyOTc1LDIyOTc2LDIyOTc3LDIyOTc4LDIyOTc5LDIyOTgwLDIyOTgxLDIyOTgzLDIyOTg0LDIyOTg1LDIyOTg4LDIyOTg5LDIyOTkwLDIyOTkxLDIyOTk3LDIyOTk4LDIzMDAxLDIzMDAzLDIzMDA2LDIzMDA3LDIzMDA4LDIzMDA5LDIzMDEwLDIzMDEyLDIzMDE0LDIzMDE1LDIzMDE3LDIzMDE4LDIzMDE5LDIzMDIxLDIzMDIyLDIzMDIzLDIzMDI0LDIzMDI1LDIzMDI2LDIzMDI3LDIzMDI4LDIzMDI5LDIzMDMwLDIzMDMxLDIzMDMyLDIzMDM0LDIzMDM2LDIzMDM3LDIzMDM4LDIzMDQwLDIzMDQyLDIzMDUwLDIzMDUxLDIzMDUzLDIzMDU0LDIzMDU1LDIzMDU2LDIzMDU4LDIzMDYwLDIzMDYxLDIzMDYyLDIzMDYzLDIzMDY1LDIzMDY2LDIzMDY3LDIzMDY5LDIzMDcwLDIzMDczLDIzMDc0LDIzMDc2LDIzMDc4LDIzMDc5LDIzMDgwLDIzMDgyLDIzMDgzLDIzMDg0LDIzMDg1LDIzMDg2LDIzMDg3LDIzMDg4LDIzMDkxLDIzMDkzLDIzMDk1LDIzMDk2LDIzMDk3LDIzMDk4LDIzMDk5LDIzMTAxLDIzMTAyLDIzMTAzLDIzMTA1LDIzMTA2LDIzMTA3LDIzMTA4LDIzMTA5LDIzMTExLDIzMTEyLDIzMTE1LDIzMTE2LDIzMTE3LDIzMTE4LDIzMTE5LDIzMTIwLDIzMTIxLDIzMTIyLDIzMTIzLDIzMTI0LDIzMTI2LDIzMTI3LDIzMTI4LDIzMTI5LDIzMTMxLDIzMTMyLDIzMTMzLDIzMTM0LDIzMTM1LDIzMTM2LDIzMTM3LDIzMTM5LDIzMTQwLDIzMTQxLDIzMTQyLDIzMTQ0LDIzMTQ1LDIzMTQ3LDIzMTQ4LDIzMTQ5LDIzMTUwLDIzMTUxLDIzMTUyLDIzMTUzLDIzMTU0LDIzMTU1LDIzMTYwLDIzMTYxLDIzMTYzLDIzMTY0LDIzMTY1LDIzMTY2LDIzMTY4LDIzMTY5LDIzMTcwLDIzMTcxLDIzMTcyLDIzMTczLDIzMTc0LDIzMTc1LDIzMTc2LDIzMTc3LDIzMTc4LDIzMTc5LDIzMTgwLDIzMTgxLDIzMTgyLDIzMTgzLDIzMTg0LDIzMTg1LDIzMTg3LDIzMTg4LDIzMTg5LDIzMTkwLDIzMTkxLDIzMTkyLDIzMTkzLDIzMTk2LDIzMTk3LDIzMTk4LDIzMTk5LDIzMjAwLDIzMjAxLDIzMjAyLDIzMjAzLDIzMjA0LDIzMjA1LDIzMjA2LDIzMjA3LDIzMjA4LDIzMjA5LDIzMjExLDIzMjEyLDIzMjEzLDIzMjE0LDIzMjE1LDIzMjE2LDIzMjE3LDIzMjIwLDIzMjIyLDIzMjIzLDIzMjI1LDIzMjI2LDIzMjI3LDIzMjI4LDIzMjI5LDIzMjMxLDIzMjMyLDIzMjM1LDIzMjM2LDIzMjM3LDIzMjM4LDIzMjM5LDIzMjQwLDIzMjQyLDIzMjQzLDIzMjQ1LDIzMjQ2LDIzMjQ3LDIzMjQ4LDIzMjQ5LDIzMjUxLDIzMjUzLDIzMjU1LDIzMjU3LDIzMjU4LDIzMjU5LDIzMjYxLDIzMjYyLDIzMjYzLDIzMjY2LDIzMjY4LDIzMjY5LDIzMjcxLDIzMjcyLDIzMjc0LDIzMjc2LDIzMjc3LDIzMjc4LDIzMjc5LDIzMjgwLDIzMjgyLDIzMjgzLDIzMjg0LDIzMjg1LDIzMjg2LDIzMjg3LDIzMjg4LDIzMjg5LDIzMjkwLDIzMjkxLDIzMjkyLDIzMjkzLDIzMjk0LDIzMjk1LDIzMjk2LDIzMjk3LDIzMjk4LDIzMjk5LDIzMzAwLDIzMzAxLDIzMzAyLDIzMzAzLDIzMzA0LDIzMzA2LDIzMzA3LDIzMzA4LDIzMzA5LDIzMzEwLDIzMzExLDIzMzEyLDIzMzEzLDIzMzE0LDIzMzE1LDIzMzE2LDIzMzE3LDIzMzIwLDIzMzIxLDIzMzIyLDIzMzIzLDIzMzI0LDIzMzI1LDIzMzI2LDIzMzI3LDIzMzI4LDIzMzI5LDIzMzMwLDIzMzMxLDIzMzMyLDIzMzMzLDIzMzM0LDIzMzM1LDIzMzM2LDIzMzM3LDIzMzM4LDIzMzM5LDIzMzQwLDIzMzQxLDIzMzQyLDIzMzQzLDIzMzQ0LDIzMzQ1LDIzMzQ3LDIzMzQ5LDIzMzUwLDIzMzUyLDIzMzUzLDIzMzU0LDIzMzU1LDIzMzU2LDIzMzU3LDIzMzU4LDIzMzU5LDIzMzYxLDIzMzYyLDIzMzYzLDIzMzY0LDIzMzY1LDIzMzY2LDIzMzY3LDIzMzY4LDIzMzY5LDIzMzcwLDIzMzcxLDIzMzcyLDIzMzczLDIzMzc0LDIzMzc1LDIzMzc4LDIzMzgyLDIzMzkwLDIzMzkyLDIzMzkzLDIzMzk5LDIzNDAwLDIzNDAzLDIzNDA1LDIzNDA2LDIzNDA3LDIzNDEwLDIzNDEyLDIzNDE0LDIzNDE1LDIzNDE2LDIzNDE3LDIzNDE5LDIzNDIwLDIzNDIyLDIzNDIzLDIzNDI2LDIzNDMwLDIzNDM0LDIzNDM3LDIzNDM4LDIzNDQwLDIzNDQxLDIzNDQyLDIzNDQ0LDIzNDQ2LDIzNDU1LDIzNDYzLDIzNDY0LDIzNDY1LDIzNDY4LDIzNDY5LDIzNDcwLDIzNDcxLDIzNDczLDIzNDc0LDIzNDc5LDIzNDgyLDIzNDgzLDIzNDg0LDIzNDg4LDIzNDg5LDIzNDkxLDIzNDk2LDIzNDk3LDIzNDk4LDIzNDk5LDIzNTAxLDIzNTAyLDIzNTAzLDIzNTA1LDIzNTA4LDIzNTA5LDIzNTEwLDIzNTExLDIzNTEyLDIzNTEzLDIzNTE0LDIzNTE1LDIzNTE2LDIzNTIwLDIzNTIyLDIzNTIzLDIzNTI2LDIzNTI3LDIzNTI5LDIzNTMwLDIzNTMxLDIzNTMyLDIzNTMzLDIzNTM1LDIzNTM3LDIzNTM4LDIzNTM5LDIzNTQwLDIzNTQxLDIzNTQyLDIzNTQzLDIzNTQ5LDIzNTUwLDIzNTUyLDIzNTU0LDIzNTU1LDIzNTU3LDIzNTU5LDIzNTYwLDIzNTYzLDIzNTY0LDIzNTY1LDIzNTY2LDIzNTY4LDIzNTcwLDIzNTcxLDIzNTc1LDIzNTc3LDIzNTc5LDIzNTgyLDIzNTgzLDIzNTg0LDIzNTg1LDIzNTg3LDIzNTkwLDIzNTkyLDIzNTkzLDIzNTk0LDIzNTk1LDIzNTk3LDIzNTk4LDIzNTk5LDIzNjAwLDIzNjAyLDIzNjAzLDIzNjA1LDIzNjA2LDIzNjA3LDIzNjE5LDIzNjIwLDIzNjIyLDIzNjIzLDIzNjI4LDIzNjI5LDIzNjM0LDIzNjM1LDIzNjM2LDIzNjM4LDIzNjM5LDIzNjQwLDIzNjQyLDIzNjQzLDIzNjQ0LDIzNjQ1LDIzNjQ3LDIzNjUwLDIzNjUyLDIzNjU1LDIzNjU2LDIzNjU3LDIzNjU4LDIzNjU5LDIzNjYwLDIzNjYxLDIzNjY0LDIzNjY2LDIzNjY3LDIzNjY4LDIzNjY5LDIzNjcwLDIzNjcxLDIzNjcyLDIzNjc1LDIzNjc2LDIzNjc3LDIzNjc4LDIzNjgwLDIzNjgzLDIzNjg0LDIzNjg1LDIzNjg2LDIzNjg3LDIzNjg5LDIzNjkwLDIzNjkxLDIzNjk0LDIzNjk1LDIzNjk4LDIzNjk5LDIzNzAxLDIzNzA5LDIzNzEwLDIzNzExLDIzNzEyLDIzNzEzLDIzNzE2LDIzNzE3LDIzNzE4LDIzNzE5LDIzNzIwLDIzNzIyLDIzNzI2LDIzNzI3LDIzNzI4LDIzNzMwLDIzNzMyLDIzNzM0LDIzNzM3LDIzNzM4LDIzNzM5LDIzNzQwLDIzNzQyLDIzNzQ0LDIzNzQ2LDIzNzQ3LDIzNzQ5LDIzNzUwLDIzNzUxLDIzNzUyLDIzNzUzLDIzNzU0LDIzNzU2LDIzNzU3LDIzNzU4LDIzNzU5LDIzNzYwLDIzNzYxLDIzNzYzLDIzNzY0LDIzNzY1LDIzNzY2LDIzNzY3LDIzNzY4LDIzNzcwLDIzNzcxLDIzNzcyLDIzNzczLDIzNzc0LDIzNzc1LDIzNzc2LDIzNzc4LDIzNzc5LDIzNzgzLDIzNzg1LDIzNzg3LDIzNzg4LDIzNzkwLDIzNzkxLDIzNzkzLDIzNzk0LDIzNzk1LDIzNzk2LDIzNzk3LDIzNzk4LDIzNzk5LDIzODAwLDIzODAxLDIzODAyLDIzODA0LDIzODA1LDIzODA2LDIzODA3LDIzODA4LDIzODA5LDIzODEyLDIzODEzLDIzODE2LDIzODE3LDIzODE4LDIzODE5LDIzODIwLDIzODIxLDIzODIzLDIzODI0LDIzODI1LDIzODI2LDIzODI3LDIzODI5LDIzODMxLDIzODMyLDIzODMzLDIzODM0LDIzODM2LDIzODM3LDIzODM5LDIzODQwLDIzODQxLDIzODQyLDIzODQzLDIzODQ1LDIzODQ4LDIzODUwLDIzODUxLDIzODUyLDIzODU1LDIzODU2LDIzODU3LDIzODU4LDIzODU5LDIzODYxLDIzODYyLDIzODYzLDIzODY0LDIzODY1LDIzODY2LDIzODY3LDIzODY4LDIzODcxLDIzODcyLDIzODczLDIzODc0LDIzODc1LDIzODc2LDIzODc3LDIzODc4LDIzODgwLDIzODgxLDIzODg1LDIzODg2LDIzODg3LDIzODg4LDIzODg5LDIzODkwLDIzODkxLDIzODkyLDIzODkzLDIzODk0LDIzODk1LDIzODk3LDIzODk4LDIzOTAwLDIzOTAyLDIzOTAzLDIzOTA0LDIzOTA1LDIzOTA2LDIzOTA3LDIzOTA4LDIzOTA5LDIzOTEwLDIzOTExLDIzOTEyLDIzOTE0LDIzOTE3LDIzOTE4LDIzOTIwLDIzOTIxLDIzOTIyLDIzOTIzLDIzOTI1LDIzOTI2LDIzOTI3LDIzOTI4LDIzOTI5LDIzOTMwLDIzOTMxLDIzOTMyLDIzOTMzLDIzOTM0LDIzOTM1LDIzOTM2LDIzOTM3LDIzOTM5LDIzOTQwLDIzOTQxLDIzOTQyLDIzOTQzLDIzOTQ0LDIzOTQ1LDIzOTQ2LDIzOTQ3LDIzOTQ4LDIzOTQ5LDIzOTUwLDIzOTUxLDIzOTUyLDIzOTUzLDIzOTU0LDIzOTU1LDIzOTU2LDIzOTU3LDIzOTU4LDIzOTU5LDIzOTYwLDIzOTYyLDIzOTYzLDIzOTY0LDIzOTY2LDIzOTY3LDIzOTY4LDIzOTY5LDIzOTcwLDIzOTcxLDIzOTcyLDIzOTczLDIzOTc0LDIzOTc1LDIzOTc2LDIzOTc3LDIzOTc4LDIzOTc5LDIzOTgwLDIzOTgxLDIzOTgyLDIzOTgzLDIzOTg0LDIzOTg1LDIzOTg2LDIzOTg3LDIzOTg4LDIzOTg5LDIzOTkwLDIzOTkyLDIzOTkzLDIzOTk0LDIzOTk1LDIzOTk2LDIzOTk3LDIzOTk4LDIzOTk5LDI0MDAwLDI0MDAxLDI0MDAyLDI0MDAzLDI0MDA0LDI0MDA2LDI0MDA3LDI0MDA4LDI0MDA5LDI0MDEwLDI0MDExLDI0MDEyLDI0MDE0LDI0MDE1LDI0MDE2LDI0MDE3LDI0MDE4LDI0MDE5LDI0MDIwLDI0MDIxLDI0MDIyLDI0MDIzLDI0MDI0LDI0MDI1LDI0MDI2LDI0MDI4LDI0MDMxLDI0MDMyLDI0MDM1LDI0MDM2LDI0MDQyLDI0MDQ0LDI0MDQ1LDI0MDQ4LDI0MDUzLDI0MDU0LDI0MDU2LDI0MDU3LDI0MDU4LDI0MDU5LDI0MDYwLDI0MDYzLDI0MDY0LDI0MDY4LDI0MDcxLDI0MDczLDI0MDc0LDI0MDc1LDI0MDc3LDI0MDc4LDI0MDgyLDI0MDgzLDI0MDg3LDI0MDk0LDI0MDk1LDI0MDk2LDI0MDk3LDI0MDk4LDI0MDk5LDI0MTAwLDI0MTAxLDI0MTA0LDI0MTA1LDI0MTA2LDI0MTA3LDI0MTA4LDI0MTExLDI0MTEyLDI0MTE0LDI0MTE1LDI0MTE2LDI0MTE3LDI0MTE4LDI0MTIxLDI0MTIyLDI0MTI2LDI0MTI3LDI0MTI4LDI0MTI5LDI0MTMxLDI0MTM0LDI0MTM1LDI0MTM2LDI0MTM3LDI0MTM4LDI0MTM5LDI0MTQxLDI0MTQyLDI0MTQzLDI0MTQ0LDI0MTQ1LDI0MTQ2LDI0MTQ3LDI0MTUwLDI0MTUxLDI0MTUyLDI0MTUzLDI0MTU0LDI0MTU2LDI0MTU3LDI0MTU5LDI0MTYwLDI0MTYzLDI0MTY0LDI0MTY1LDI0MTY2LDI0MTY3LDI0MTY4LDI0MTY5LDI0MTcwLDI0MTcxLDI0MTcyLDI0MTczLDI0MTc0LDI0MTc1LDI0MTc2LDI0MTc3LDI0MTgxLDI0MTgzLDI0MTg1LDI0MTkwLDI0MTkzLDI0MTk0LDI0MTk1LDI0MTk3LDI0MjAwLDI0MjAxLDI0MjA0LDI0MjA1LDI0MjA2LDI0MjEwLDI0MjE2LDI0MjE5LDI0MjIxLDI0MjI1LDI0MjI2LDI0MjI3LDI0MjI4LDI0MjMyLDI0MjMzLDI0MjM0LDI0MjM1LDI0MjM2LDI0MjM4LDI0MjM5LDI0MjQwLDI0MjQxLDI0MjQyLDI0MjQ0LDI0MjUwLDI0MjUxLDI0MjUyLDI0MjUzLDI0MjU1LDI0MjU2LDI0MjU3LDI0MjU4LDI0MjU5LDI0MjYwLDI0MjYxLDI0MjYyLDI0MjYzLDI0MjY0LDI0MjY3LDI0MjY4LDI0MjY5LDI0MjcwLDI0MjcxLDI0MjcyLDI0Mjc2LDI0Mjc3LDI0Mjc5LDI0MjgwLDI0MjgxLDI0MjgyLDI0Mjg0LDI0Mjg1LDI0Mjg2LDI0Mjg3LDI0Mjg4LDI0Mjg5LDI0MjkwLDI0MjkxLDI0MjkyLDI0MjkzLDI0Mjk0LDI0Mjk1LDI0Mjk3LDI0Mjk5LDI0MzAwLDI0MzAxLDI0MzAyLDI0MzAzLDI0MzA0LDI0MzA1LDI0MzA2LDI0MzA3LDI0MzA5LDI0MzEyLDI0MzEzLDI0MzE1LDI0MzE2LDI0MzE3LDI0MzI1LDI0MzI2LDI0MzI3LDI0MzI5LDI0MzMyLDI0MzMzLDI0MzM0LDI0MzM2LDI0MzM4LDI0MzQwLDI0MzQyLDI0MzQ1LDI0MzQ2LDI0MzQ4LDI0MzQ5LDI0MzUwLDI0MzUzLDI0MzU0LDI0MzU1LDI0MzU2LDI0MzYwLDI0MzYzLDI0MzY0LDI0MzY2LDI0MzY4LDI0MzcwLDI0MzcxLDI0MzcyLDI0MzczLDI0Mzc0LDI0Mzc1LDI0Mzc2LDI0Mzc5LDI0MzgxLDI0MzgyLDI0MzgzLDI0Mzg1LDI0Mzg2LDI0Mzg3LDI0Mzg4LDI0Mzg5LDI0MzkwLDI0MzkxLDI0MzkyLDI0MzkzLDI0Mzk0LDI0Mzk1LDI0Mzk2LDI0Mzk3LDI0Mzk4LDI0Mzk5LDI0NDAxLDI0NDA0LDI0NDA5LDI0NDEwLDI0NDExLDI0NDEyLDI0NDE0LDI0NDE1LDI0NDE2LDI0NDE5LDI0NDIxLDI0NDIzLDI0NDI0LDI0NDI3LDI0NDMwLDI0NDMxLDI0NDM0LDI0NDM2LDI0NDM3LDI0NDM4LDI0NDQwLDI0NDQyLDI0NDQ1LDI0NDQ2LDI0NDQ3LDI0NDUxLDI0NDU0LDI0NDYxLDI0NDYyLDI0NDYzLDI0NDY1LDI0NDY3LDI0NDY4LDI0NDcwLDI0NDc0LDI0NDc1LDI0NDc3LDI0NDc4LDI0NDc5LDI0NDgwLDI0NDgyLDI0NDgzLDI0NDg0LDI0NDg1LDI0NDg2LDI0NDg3LDI0NDg5LDI0NDkxLDI0NDkyLDI0NDk1LDI0NDk2LDI0NDk3LDI0NDk4LDI0NDk5LDI0NTAwLDI0NTAyLDI0NTA0LDI0NTA1LDI0NTA2LDI0NTA3LDI0NTEwLDI0NTExLDI0NTEyLDI0NTEzLDI0NTE0LDI0NTE5LDI0NTIwLDI0NTIyLDI0NTIzLDI0NTI2LDI0NTMxLDI0NTMyLDI0NTMzLDI0NTM4LDI0NTM5LDI0NTQwLDI0NTQyLDI0NTQzLDI0NTQ2LDI0NTQ3LDI0NTQ5LDI0NTUwLDI0NTUyLDI0NTUzLDI0NTU2LDI0NTU5LDI0NTYwLDI0NTYyLDI0NTYzLDI0NTY0LDI0NTY2LDI0NTY3LDI0NTY5LDI0NTcwLDI0NTcyLDI0NTgzLDI0NTg0LDI0NTg1LDI0NTg3LDI0NTg4LDI0NTkyLDI0NTkzLDI0NTk1LDI0NTk5LDI0NjAwLDI0NjAyLDI0NjA2LDI0NjA3LDI0NjEwLDI0NjExLDI0NjEyLDI0NjIwLDI0NjIxLDI0NjIyLDI0NjI0LDI0NjI1LDI0NjI2LDI0NjI3LDI0NjI4LDI0NjMwLDI0NjMxLDI0NjMyLDI0NjMzLDI0NjM0LDI0NjM3LDI0NjM4LDI0NjQwLDI0NjQ0LDI0NjQ1LDI0NjQ2LDI0NjQ3LDI0NjQ4LDI0NjQ5LDI0NjUwLDI0NjUyLDI0NjU0LDI0NjU1LDI0NjU3LDI0NjU5LDI0NjYwLDI0NjYyLDI0NjYzLDI0NjY0LDI0NjY3LDI0NjY4LDI0NjcwLDI0NjcxLDI0NjcyLDI0NjczLDI0Njc3LDI0Njc4LDI0Njg2LDI0Njg5LDI0NjkwLDI0NjkyLDI0NjkzLDI0Njk1LDI0NzAyLDI0NzA0LDI0NzA1LDI0NzA2LDI0NzA5LDI0NzEwLDI0NzExLDI0NzEyLDI0NzE0LDI0NzE1LDI0NzE4LDI0NzE5LDI0NzIwLDI0NzIxLDI0NzIzLDI0NzI1LDI0NzI3LDI0NzI4LDI0NzI5LDI0NzMyLDI0NzM0LDI0NzM3LDI0NzM4LDI0NzQwLDI0NzQxLDI0NzQzLDI0NzQ1LDI0NzQ2LDI0NzUwLDI0NzUyLDI0NzU1LDI0NzU3LDI0NzU4LDI0NzU5LDI0NzYxLDI0NzYyLDI0NzY1LDI0NzY2LDI0NzY3LDI0NzY4LDI0NzY5LDI0NzcwLDI0NzcxLDI0NzcyLDI0Nzc1LDI0Nzc2LDI0Nzc3LDI0NzgwLDI0NzgxLDI0NzgyLDI0NzgzLDI0Nzg0LDI0Nzg2LDI0Nzg3LDI0Nzg4LDI0NzkwLDI0NzkxLDI0NzkzLDI0Nzk1LDI0Nzk4LDI0ODAxLDI0ODAyLDI0ODAzLDI0ODA0LDI0ODA1LDI0ODEwLDI0ODE3LDI0ODE4LDI0ODIxLDI0ODIzLDI0ODI0LDI0ODI3LDI0ODI4LDI0ODI5LDI0ODMwLDI0ODMxLDI0ODM0LDI0ODM1LDI0ODM2LDI0ODM3LDI0ODM5LDI0ODQyLDI0ODQzLDI0ODQ0LDI0ODQ4LDI0ODQ5LDI0ODUwLDI0ODUxLDI0ODUyLDI0ODU0LDI0ODU1LDI0ODU2LDI0ODU3LDI0ODU5LDI0ODYwLDI0ODYxLDI0ODYyLDI0ODY1LDI0ODY2LDI0ODY5LDI0ODcyLDI0ODczLDI0ODc0LDI0ODc2LDI0ODc3LDI0ODc4LDI0ODc5LDI0ODgwLDI0ODgxLDI0ODgyLDI0ODgzLDI0ODg0LDI0ODg1LDI0ODg2LDI0ODg3LDI0ODg4LDI0ODg5LDI0ODkwLDI0ODkxLDI0ODkyLDI0ODkzLDI0ODk0LDI0ODk2LDI0ODk3LDI0ODk4LDI0ODk5LDI0OTAwLDI0OTAxLDI0OTAyLDI0OTAzLDI0OTA1LDI0OTA3LDI0OTA5LDI0OTExLDI0OTEyLDI0OTE0LDI0OTE1LDI0OTE2LDI0OTE4LDI0OTE5LDI0OTIwLDI0OTIxLDI0OTIyLDI0OTIzLDI0OTI0LDI0OTI2LDI0OTI3LDI0OTI4LDI0OTI5LDI0OTMxLDI0OTMyLDI0OTMzLDI0OTM0LDI0OTM3LDI0OTM4LDI0OTM5LDI0OTQwLDI0OTQxLDI0OTQyLDI0OTQzLDI0OTQ1LDI0OTQ2LDI0OTQ3LDI0OTQ4LDI0OTUwLDI0OTUyLDI0OTUzLDI0OTU0LDI0OTU1LDI0OTU2LDI0OTU3LDI0OTU4LDI0OTU5LDI0OTYwLDI0OTYxLDI0OTYyLDI0OTYzLDI0OTY0LDI0OTY1LDI0OTY2LDI0OTY3LDI0OTY4LDI0OTY5LDI0OTcwLDI0OTcyLDI0OTczLDI0OTc1LDI0OTc2LDI0OTc3LDI0OTc4LDI0OTc5LDI0OTgxLDI0OTgyLDI0OTgzLDI0OTg0LDI0OTg1LDI0OTg2LDI0OTg3LDI0OTg4LDI0OTkwLDI0OTkxLDI0OTkyLDI0OTkzLDI0OTk0LDI0OTk1LDI0OTk2LDI0OTk3LDI0OTk4LDI1MDAyLDI1MDAzLDI1MDA1LDI1MDA2LDI1MDA3LDI1MDA4LDI1MDA5LDI1MDEwLDI1MDExLDI1MDEyLDI1MDEzLDI1MDE0LDI1MDE2LDI1MDE3LDI1MDE4LDI1MDE5LDI1MDIwLDI1MDIxLDI1MDIzLDI1MDI0LDI1MDI1LDI1MDI3LDI1MDI4LDI1MDI5LDI1MDMwLDI1MDMxLDI1MDMzLDI1MDM2LDI1MDM3LDI1MDM4LDI1MDM5LDI1MDQwLDI1MDQzLDI1MDQ1LDI1MDQ2LDI1MDQ3LDI1MDQ4LDI1MDQ5LDI1MDUwLDI1MDUxLDI1MDUyLDI1MDUzLDI1MDU0LDI1MDU1LDI1MDU2LDI1MDU3LDI1MDU4LDI1MDU5LDI1MDYwLDI1MDYxLDI1MDYzLDI1MDY0LDI1MDY1LDI1MDY2LDI1MDY3LDI1MDY4LDI1MDY5LDI1MDcwLDI1MDcxLDI1MDcyLDI1MDczLDI1MDc0LDI1MDc1LDI1MDc2LDI1MDc4LDI1MDc5LDI1MDgwLDI1MDgxLDI1MDgyLDI1MDgzLDI1MDg0LDI1MDg1LDI1MDg2LDI1MDg4LDI1MDg5LDI1MDkwLDI1MDkxLDI1MDkyLDI1MDkzLDI1MDk1LDI1MDk3LDI1MTA3LDI1MTA4LDI1MTEzLDI1MTE2LDI1MTE3LDI1MTE4LDI1MTIwLDI1MTIzLDI1MTI2LDI1MTI3LDI1MTI4LDI1MTI5LDI1MTMxLDI1MTMzLDI1MTM1LDI1MTM2LDI1MTM3LDI1MTM4LDI1MTQxLDI1MTQyLDI1MTQ0LDI1MTQ1LDI1MTQ2LDI1MTQ3LDI1MTQ4LDI1MTU0LDI1MTU2LDI1MTU3LDI1MTU4LDI1MTYyLDI1MTY3LDI1MTY4LDI1MTczLDI1MTc0LDI1MTc1LDI1MTc3LDI1MTc4LDI1MTgwLDI1MTgxLDI1MTgyLDI1MTgzLDI1MTg0LDI1MTg1LDI1MTg2LDI1MTg4LDI1MTg5LDI1MTkyLDI1MjAxLDI1MjAyLDI1MjA0LDI1MjA1LDI1MjA3LDI1MjA4LDI1MjEwLDI1MjExLDI1MjEzLDI1MjE3LDI1MjE4LDI1MjE5LDI1MjIxLDI1MjIyLDI1MjIzLDI1MjI0LDI1MjI3LDI1MjI4LDI1MjI5LDI1MjMwLDI1MjMxLDI1MjMyLDI1MjM2LDI1MjQxLDI1MjQ0LDI1MjQ1LDI1MjQ2LDI1MjUxLDI1MjU0LDI1MjU1LDI1MjU3LDI1MjU4LDI1MjYxLDI1MjYyLDI1MjYzLDI1MjY0LDI1MjY2LDI1MjY3LDI1MjY4LDI1MjcwLDI1MjcxLDI1MjcyLDI1Mjc0LDI1Mjc4LDI1MjgwLDI1MjgxLDI1MjgzLDI1MjkxLDI1Mjk1LDI1Mjk3LDI1MzAxLDI1MzA5LDI1MzEwLDI1MzEyLDI1MzEzLDI1MzE2LDI1MzIyLDI1MzIzLDI1MzI4LDI1MzMwLDI1MzMzLDI1MzM2LDI1MzM3LDI1MzM4LDI1MzM5LDI1MzQ0LDI1MzQ3LDI1MzQ4LDI1MzQ5LDI1MzUwLDI1MzU0LDI1MzU1LDI1MzU2LDI1MzU3LDI1MzU5LDI1MzYwLDI1MzYyLDI1MzYzLDI1MzY0LDI1MzY1LDI1MzY3LDI1MzY4LDI1MzY5LDI1MzcyLDI1MzgyLDI1MzgzLDI1Mzg1LDI1Mzg4LDI1Mzg5LDI1MzkwLDI1MzkyLDI1MzkzLDI1Mzk1LDI1Mzk2LDI1Mzk3LDI1Mzk4LDI1Mzk5LDI1NDAwLDI1NDAzLDI1NDA0LDI1NDA2LDI1NDA3LDI1NDA4LDI1NDA5LDI1NDEyLDI1NDE1LDI1NDE2LDI1NDE4LDI1NDI1LDI1NDI2LDI1NDI3LDI1NDI4LDI1NDMwLDI1NDMxLDI1NDMyLDI1NDMzLDI1NDM0LDI1NDM1LDI1NDM2LDI1NDM3LDI1NDQwLDI1NDQ0LDI1NDQ1LDI1NDQ2LDI1NDQ4LDI1NDUwLDI1NDUxLDI1NDUyLDI1NDU1LDI1NDU2LDI1NDU4LDI1NDU5LDI1NDYwLDI1NDYxLDI1NDY0LDI1NDY1LDI1NDY4LDI1NDY5LDI1NDcwLDI1NDcxLDI1NDczLDI1NDc1LDI1NDc2LDI1NDc3LDI1NDc4LDI1NDgzLDI1NDg1LDI1NDg5LDI1NDkxLDI1NDkyLDI1NDkzLDI1NDk1LDI1NDk3LDI1NDk4LDI1NDk5LDI1NTAwLDI1NTAxLDI1NTAyLDI1NTAzLDI1NTA1LDI1NTA4LDI1NTEwLDI1NTE1LDI1NTE5LDI1NTIxLDI1NTIyLDI1NTI1LDI1NTI2LDI1NTI5LDI1NTMxLDI1NTMzLDI1NTM1LDI1NTM2LDI1NTM3LDI1NTM4LDI1NTM5LDI1NTQxLDI1NTQzLDI1NTQ0LDI1NTQ2LDI1NTQ3LDI1NTQ4LDI1NTUzLDI1NTU1LDI1NTU2LDI1NTU3LDI1NTU5LDI1NTYwLDI1NTYxLDI1NTYyLDI1NTYzLDI1NTY0LDI1NTY1LDI1NTY3LDI1NTcwLDI1NTcyLDI1NTczLDI1NTc0LDI1NTc1LDI1NTc2LDI1NTc5LDI1NTgwLDI1NTgyLDI1NTgzLDI1NTg0LDI1NTg1LDI1NTg3LDI1NTg5LDI1NTkxLDI1NTkzLDI1NTk0LDI1NTk1LDI1NTk2LDI1NTk4LDI1NjAzLDI1NjA0LDI1NjA2LDI1NjA3LDI1NjA4LDI1NjA5LDI1NjEwLDI1NjEzLDI1NjE0LDI1NjE3LDI1NjE4LDI1NjIxLDI1NjIyLDI1NjIzLDI1NjI0LDI1NjI1LDI1NjI2LDI1NjI5LDI1NjMxLDI1NjM0LDI1NjM1LDI1NjM2LDI1NjM3LDI1NjM5LDI1NjQwLDI1NjQxLDI1NjQzLDI1NjQ2LDI1NjQ3LDI1NjQ4LDI1NjQ5LDI1NjUwLDI1NjUxLDI1NjUzLDI1NjU0LDI1NjU1LDI1NjU2LDI1NjU3LDI1NjU5LDI1NjYwLDI1NjYyLDI1NjY0LDI1NjY2LDI1NjY3LDI1NjczLDI1Njc1LDI1Njc2LDI1Njc3LDI1Njc4LDI1Njc5LDI1NjgwLDI1NjgxLDI1NjgzLDI1Njg1LDI1Njg2LDI1Njg3LDI1Njg5LDI1NjkwLDI1NjkxLDI1NjkyLDI1NjkzLDI1Njk1LDI1Njk2LDI1Njk3LDI1Njk4LDI1Njk5LDI1NzAwLDI1NzAxLDI1NzAyLDI1NzA0LDI1NzA2LDI1NzA3LDI1NzA4LDI1NzEwLDI1NzExLDI1NzEyLDI1NzEzLDI1NzE0LDI1NzE1LDI1NzE2LDI1NzE3LDI1NzE4LDI1NzE5LDI1NzIzLDI1NzI0LDI1NzI1LDI1NzI2LDI1NzI3LDI1NzI4LDI1NzI5LDI1NzMxLDI1NzM0LDI1NzM2LDI1NzM3LDI1NzM4LDI1NzM5LDI1NzQwLDI1NzQxLDI1NzQyLDI1NzQzLDI1NzQ0LDI1NzQ3LDI1NzQ4LDI1NzUxLDI1NzUyLDI1NzU0LDI1NzU1LDI1NzU2LDI1NzU3LDI1NzU5LDI1NzYwLDI1NzYxLDI1NzYyLDI1NzYzLDI1NzY1LDI1NzY2LDI1NzY3LDI1NzY4LDI1NzcwLDI1NzcxLDI1Nzc1LDI1Nzc3LDI1Nzc4LDI1Nzc5LDI1NzgwLDI1NzgyLDI1Nzg1LDI1Nzg3LDI1Nzg5LDI1NzkwLDI1NzkxLDI1NzkzLDI1Nzk1LDI1Nzk2LDI1Nzk4LDI1Nzk5LDI1ODAwLDI1ODAxLDI1ODAyLDI1ODAzLDI1ODA0LDI1ODA3LDI1ODA5LDI1ODExLDI1ODEyLDI1ODEzLDI1ODE0LDI1ODE3LDI1ODE4LDI1ODE5LDI1ODIwLDI1ODIxLDI1ODIzLDI1ODI0LDI1ODI1LDI1ODI3LDI1ODI5LDI1ODMxLDI1ODMyLDI1ODMzLDI1ODM0LDI1ODM1LDI1ODM2LDI1ODM3LDI1ODM4LDI1ODM5LDI1ODQwLDI1ODQxLDI1ODQyLDI1ODQzLDI1ODQ0LDI1ODQ1LDI1ODQ2LDI1ODQ3LDI1ODQ4LDI1ODQ5LDI1ODUwLDI1ODUxLDI1ODUyLDI1ODUzLDI1ODU0LDI1ODU1LDI1ODU3LDI1ODU4LDI1ODU5LDI1ODYwLDI1ODYxLDI1ODYyLDI1ODYzLDI1ODY0LDI1ODY2LDI1ODY3LDI1ODY4LDI1ODY5LDI1ODcwLDI1ODcxLDI1ODcyLDI1ODczLDI1ODc1LDI1ODc2LDI1ODc3LDI1ODc4LDI1ODc5LDI1ODgxLDI1ODgyLDI1ODgzLDI1ODg0LDI1ODg1LDI1ODg2LDI1ODg3LDI1ODg4LDI1ODg5LDI1ODkwLDI1ODkxLDI1ODkyLDI1ODk0LDI1ODk1LDI1ODk2LDI1ODk3LDI1ODk4LDI1OTAwLDI1OTAxLDI1OTA0LDI1OTA1LDI1OTA2LDI1OTA3LDI1OTExLDI1OTE0LDI1OTE2LDI1OTE3LDI1OTIwLDI1OTIxLDI1OTIyLDI1OTIzLDI1OTI0LDI1OTI2LDI1OTI3LDI1OTMwLDI1OTMxLDI1OTMzLDI1OTM0LDI1OTM2LDI1OTM4LDI1OTM5LDI1OTQwLDI1OTQzLDI1OTQ0LDI1OTQ2LDI1OTQ4LDI1OTUxLDI1OTUyLDI1OTUzLDI1OTU2LDI1OTU3LDI1OTU5LDI1OTYwLDI1OTYxLDI1OTYyLDI1OTY1LDI1OTY2LDI1OTY3LDI1OTY5LDI1OTcxLDI1OTczLDI1OTc0LDI1OTc2LDI1OTc3LDI1OTc4LDI1OTc5LDI1OTgwLDI1OTgxLDI1OTgyLDI1OTgzLDI1OTg0LDI1OTg1LDI1OTg2LDI1OTg3LDI1OTg4LDI1OTg5LDI1OTkwLDI1OTkyLDI1OTkzLDI1OTk0LDI1OTk3LDI1OTk4LDI1OTk5LDI2MDAyLDI2MDA0LDI2MDA1LDI2MDA2LDI2MDA4LDI2MDEwLDI2MDEzLDI2MDE0LDI2MDE2LDI2MDE4LDI2MDE5LDI2MDIyLDI2MDI0LDI2MDI2LDI2MDI4LDI2MDMwLDI2MDMzLDI2MDM0LDI2MDM1LDI2MDM2LDI2MDM3LDI2MDM4LDI2MDM5LDI2MDQwLDI2MDQyLDI2MDQzLDI2MDQ2LDI2MDQ3LDI2MDQ4LDI2MDUwLDI2MDU1LDI2MDU2LDI2MDU3LDI2MDU4LDI2MDYxLDI2MDY0LDI2MDY1LDI2MDY3LDI2MDY4LDI2MDY5LDI2MDcyLDI2MDczLDI2MDc0LDI2MDc1LDI2MDc2LDI2MDc3LDI2MDc4LDI2MDc5LDI2MDgxLDI2MDgzLDI2MDg0LDI2MDkwLDI2MDkxLDI2MDk4LDI2MDk5LDI2MTAwLDI2MTAxLDI2MTA0LDI2MTA1LDI2MTA3LDI2MTA4LDI2MTA5LDI2MTEwLDI2MTExLDI2MTEzLDI2MTE2LDI2MTE3LDI2MTE5LDI2MTIwLDI2MTIxLDI2MTIzLDI2MTI1LDI2MTI4LDI2MTI5LDI2MTMwLDI2MTM0LDI2MTM1LDI2MTM2LDI2MTM4LDI2MTM5LDI2MTQwLDI2MTQyLDI2MTQ1LDI2MTQ2LDI2MTQ3LDI2MTQ4LDI2MTUwLDI2MTUzLDI2MTU0LDI2MTU1LDI2MTU2LDI2MTU4LDI2MTYwLDI2MTYyLDI2MTYzLDI2MTY3LDI2MTY4LDI2MTY5LDI2MTcwLDI2MTcxLDI2MTczLDI2MTc1LDI2MTc2LDI2MTc4LDI2MTgwLDI2MTgxLDI2MTgyLDI2MTgzLDI2MTg0LDI2MTg1LDI2MTg2LDI2MTg5LDI2MTkwLDI2MTkyLDI2MTkzLDI2MjAwLDI2MjAxLDI2MjAzLDI2MjA0LDI2MjA1LDI2MjA2LDI2MjA4LDI2MjEwLDI2MjExLDI2MjEzLDI2MjE1LDI2MjE3LDI2MjE4LDI2MjE5LDI2MjIwLDI2MjIxLDI2MjI1LDI2MjI2LDI2MjI3LDI2MjI5LDI2MjMyLDI2MjMzLDI2MjM1LDI2MjM2LDI2MjM3LDI2MjM5LDI2MjQwLDI2MjQxLDI2MjQzLDI2MjQ1LDI2MjQ2LDI2MjQ4LDI2MjQ5LDI2MjUwLDI2MjUxLDI2MjUzLDI2MjU0LDI2MjU1LDI2MjU2LDI2MjU4LDI2MjU5LDI2MjYwLDI2MjYxLDI2MjY0LDI2MjY1LDI2MjY2LDI2MjY3LDI2MjY4LDI2MjcwLDI2MjcxLDI2MjcyLDI2MjczLDI2Mjc0LDI2Mjc1LDI2Mjc2LDI2Mjc3LDI2Mjc4LDI2MjgxLDI2MjgyLDI2MjgzLDI2Mjg0LDI2Mjg1LDI2Mjg3LDI2Mjg4LDI2Mjg5LDI2MjkwLDI2MjkxLDI2MjkzLDI2Mjk0LDI2Mjk1LDI2Mjk2LDI2Mjk4LDI2Mjk5LDI2MzAwLDI2MzAxLDI2MzAzLDI2MzA0LDI2MzA1LDI2MzA2LDI2MzA3LDI2MzA4LDI2MzA5LDI2MzEwLDI2MzExLDI2MzEyLDI2MzEzLDI2MzE0LDI2MzE1LDI2MzE2LDI2MzE3LDI2MzE4LDI2MzE5LDI2MzIwLDI2MzIxLDI2MzIyLDI2MzIzLDI2MzI0LDI2MzI1LDI2MzI2LDI2MzI3LDI2MzI4LDI2MzMwLDI2MzM0LDI2MzM1LDI2MzM2LDI2MzM3LDI2MzM4LDI2MzM5LDI2MzQwLDI2MzQxLDI2MzQzLDI2MzQ0LDI2MzQ2LDI2MzQ3LDI2MzQ4LDI2MzQ5LDI2MzUwLDI2MzUxLDI2MzUzLDI2MzU3LDI2MzU4LDI2MzYwLDI2MzYyLDI2MzYzLDI2MzY1LDI2MzY5LDI2MzcwLDI2MzcxLDI2MzcyLDI2MzczLDI2Mzc0LDI2Mzc1LDI2MzgwLDI2MzgyLDI2MzgzLDI2Mzg1LDI2Mzg2LDI2Mzg3LDI2MzkwLDI2MzkyLDI2MzkzLDI2Mzk0LDI2Mzk2LDI2Mzk4LDI2NDAwLDI2NDAxLDI2NDAyLDI2NDAzLDI2NDA0LDI2NDA1LDI2NDA3LDI2NDA5LDI2NDE0LDI2NDE2LDI2NDE4LDI2NDE5LDI2NDIyLDI2NDIzLDI2NDI0LDI2NDI1LDI2NDI3LDI2NDI4LDI2NDMwLDI2NDMxLDI2NDMzLDI2NDM2LDI2NDM3LDI2NDM5LDI2NDQyLDI2NDQzLDI2NDQ1LDI2NDUwLDI2NDUyLDI2NDUzLDI2NDU1LDI2NDU2LDI2NDU3LDI2NDU4LDI2NDU5LDI2NDYxLDI2NDY2LDI2NDY3LDI2NDY4LDI2NDcwLDI2NDcxLDI2NDc1LDI2NDc2LDI2NDc4LDI2NDgxLDI2NDg0LDI2NDg2LDI2NDg4LDI2NDg5LDI2NDkwLDI2NDkxLDI2NDkzLDI2NDk2LDI2NDk4LDI2NDk5LDI2NTAxLDI2NTAyLDI2NTA0LDI2NTA2LDI2NTA4LDI2NTA5LDI2NTEwLDI2NTExLDI2NTEzLDI2NTE0LDI2NTE1LDI2NTE2LDI2NTE4LDI2NTIxLDI2NTIzLDI2NTI3LDI2NTI4LDI2NTI5LDI2NTMyLDI2NTM0LDI2NTM3LDI2NTQwLDI2NTQyLDI2NTQ1LDI2NTQ2LDI2NTQ4LDI2NTUzLDI2NTU0LDI2NTU1LDI2NTU2LDI2NTU3LDI2NTU4LDI2NTU5LDI2NTYwLDI2NTYyLDI2NTY1LDI2NTY2LDI2NTY3LDI2NTY4LDI2NTY5LDI2NTcwLDI2NTcxLDI2NTcyLDI2NTczLDI2NTc0LDI2NTgxLDI2NTgyLDI2NTgzLDI2NTg3LDI2NTkxLDI2NTkzLDI2NTk1LDI2NTk2LDI2NTk4LDI2NTk5LDI2NjAwLDI2NjAyLDI2NjAzLDI2NjA1LDI2NjA2LDI2NjEwLDI2NjEzLDI2NjE0LDI2NjE1LDI2NjE2LDI2NjE3LDI2NjE4LDI2NjE5LDI2NjIwLDI2NjIyLDI2NjI1LDI2NjI2LDI2NjI3LDI2NjI4LDI2NjMwLDI2NjM3LDI2NjQwLDI2NjQyLDI2NjQ0LDI2NjQ1LDI2NjQ4LDI2NjQ5LDI2NjUwLDI2NjUxLDI2NjUyLDI2NjU0LDI2NjU1LDI2NjU2LDI2NjU4LDI2NjU5LDI2NjYwLDI2NjYxLDI2NjYyLDI2NjYzLDI2NjY0LDI2NjY3LDI2NjY4LDI2NjY5LDI2NjcwLDI2NjcxLDI2NjcyLDI2NjczLDI2Njc2LDI2Njc3LDI2Njc4LDI2NjgyLDI2NjgzLDI2Njg3LDI2Njk1LDI2Njk5LDI2NzAxLDI2NzAzLDI2NzA2LDI2NzEwLDI2NzExLDI2NzEyLDI2NzEzLDI2NzE0LDI2NzE1LDI2NzE2LDI2NzE3LDI2NzE4LDI2NzE5LDI2NzMwLDI2NzMyLDI2NzMzLDI2NzM0LDI2NzM1LDI2NzM2LDI2NzM3LDI2NzM4LDI2NzM5LDI2NzQxLDI2NzQ0LDI2NzQ1LDI2NzQ2LDI2NzQ3LDI2NzQ4LDI2NzQ5LDI2NzUwLDI2NzUxLDI2NzUyLDI2NzU0LDI2NzU2LDI2NzU5LDI2NzYwLDI2NzYxLDI2NzYyLDI2NzYzLDI2NzY0LDI2NzY1LDI2NzY2LDI2NzY4LDI2NzY5LDI2NzcwLDI2NzcyLDI2NzczLDI2Nzc0LDI2Nzc2LDI2Nzc3LDI2Nzc4LDI2Nzc5LDI2NzgwLDI2NzgxLDI2NzgyLDI2NzgzLDI2Nzg0LDI2Nzg1LDI2Nzg3LDI2Nzg4LDI2Nzg5LDI2NzkzLDI2Nzk0LDI2Nzk1LDI2Nzk2LDI2Nzk4LDI2ODAxLDI2ODAyLDI2ODA0LDI2ODA2LDI2ODA3LDI2ODA4LDI2ODA5LDI2ODEwLDI2ODExLDI2ODEyLDI2ODEzLDI2ODE0LDI2ODE1LDI2ODE3LDI2ODE5LDI2ODIwLDI2ODIxLDI2ODIyLDI2ODIzLDI2ODI0LDI2ODI2LDI2ODI4LDI2ODMwLDI2ODMxLDI2ODMyLDI2ODMzLDI2ODM1LDI2ODM2LDI2ODM4LDI2ODM5LDI2ODQxLDI2ODQzLDI2ODQ0LDI2ODQ1LDI2ODQ2LDI2ODQ3LDI2ODQ5LDI2ODUwLDI2ODUyLDI2ODUzLDI2ODU0LDI2ODU1LDI2ODU2LDI2ODU3LDI2ODU4LDI2ODU5LDI2ODYwLDI2ODYxLDI2ODYzLDI2ODY2LDI2ODY3LDI2ODY4LDI2ODcwLDI2ODcxLDI2ODcyLDI2ODc1LDI2ODc3LDI2ODc4LDI2ODc5LDI2ODgwLDI2ODgyLDI2ODgzLDI2ODg0LDI2ODg2LDI2ODg3LDI2ODg4LDI2ODg5LDI2ODkwLDI2ODkyLDI2ODk1LDI2ODk3LDI2ODk5LDI2OTAwLDI2OTAxLDI2OTAyLDI2OTAzLDI2OTA0LDI2OTA1LDI2OTA2LDI2OTA3LDI2OTA4LDI2OTA5LDI2OTEwLDI2OTEzLDI2OTE0LDI2OTE1LDI2OTE3LDI2OTE4LDI2OTE5LDI2OTIwLDI2OTIxLDI2OTIyLDI2OTIzLDI2OTI0LDI2OTI2LDI2OTI3LDI2OTI5LDI2OTMwLDI2OTMxLDI2OTMzLDI2OTM0LDI2OTM1LDI2OTM2LDI2OTM4LDI2OTM5LDI2OTQwLDI2OTQyLDI2OTQ0LDI2OTQ1LDI2OTQ3LDI2OTQ4LDI2OTQ5LDI2OTUwLDI2OTUxLDI2OTUyLDI2OTUzLDI2OTU0LDI2OTU1LDI2OTU2LDI2OTU3LDI2OTU4LDI2OTU5LDI2OTYwLDI2OTYxLDI2OTYyLDI2OTYzLDI2OTY1LDI2OTY2LDI2OTY4LDI2OTY5LDI2OTcxLDI2OTcyLDI2OTc1LDI2OTc3LDI2OTc4LDI2OTgwLDI2OTgxLDI2OTgzLDI2OTg0LDI2OTg1LDI2OTg2LDI2OTg4LDI2OTg5LDI2OTkxLDI2OTkyLDI2OTk0LDI2OTk1LDI2OTk2LDI2OTk3LDI2OTk4LDI3MDAyLDI3MDAzLDI3MDA1LDI3MDA2LDI3MDA3LDI3MDA5LDI3MDExLDI3MDEzLDI3MDE4LDI3MDE5LDI3MDIwLDI3MDIyLDI3MDIzLDI3MDI0LDI3MDI1LDI3MDI2LDI3MDI3LDI3MDMwLDI3MDMxLDI3MDMzLDI3MDM0LDI3MDM3LDI3MDM4LDI3MDM5LDI3MDQwLDI3MDQxLDI3MDQyLDI3MDQzLDI3MDQ0LDI3MDQ1LDI3MDQ2LDI3MDQ5LDI3MDUwLDI3MDUyLDI3MDU0LDI3MDU1LDI3MDU2LDI3MDU4LDI3MDU5LDI3MDYxLDI3MDYyLDI3MDY0LDI3MDY1LDI3MDY2LDI3MDY4LDI3MDY5LDI3MDcwLDI3MDcxLDI3MDcyLDI3MDc0LDI3MDc1LDI3MDc2LDI3MDc3LDI3MDc4LDI3MDc5LDI3MDgwLDI3MDgxLDI3MDgzLDI3MDg1LDI3MDg3LDI3MDg5LDI3MDkwLDI3MDkxLDI3MDkzLDI3MDk0LDI3MDk1LDI3MDk2LDI3MDk3LDI3MDk4LDI3MTAwLDI3MTAxLDI3MTAyLDI3MTA1LDI3MTA2LDI3MTA3LDI3MTA4LDI3MTA5LDI3MTEwLDI3MTExLDI3MTEyLDI3MTEzLDI3MTE0LDI3MTE1LDI3MTE2LDI3MTE4LDI3MTE5LDI3MTIwLDI3MTIxLDI3MTIzLDI3MTI0LDI3MTI1LDI3MTI2LDI3MTI3LDI3MTI4LDI3MTI5LDI3MTMwLDI3MTMxLDI3MTMyLDI3MTM0LDI3MTM2LDI3MTM3LDI3MTM4LDI3MTM5LDI3MTQwLDI3MTQxLDI3MTQyLDI3MTQzLDI3MTQ0LDI3MTQ1LDI3MTQ3LDI3MTQ4LDI3MTQ5LDI3MTUwLDI3MTUxLDI3MTUyLDI3MTUzLDI3MTU0LDI3MTU1LDI3MTU2LDI3MTU3LDI3MTU4LDI3MTYxLDI3MTYyLDI3MTYzLDI3MTY0LDI3MTY1LDI3MTY2LDI3MTY4LDI3MTcwLDI3MTcxLDI3MTcyLDI3MTczLDI3MTc0LDI3MTc1LDI3MTc3LDI3MTc5LDI3MTgwLDI3MTgxLDI3MTgyLDI3MTg0LDI3MTg2LDI3MTg3LDI3MTg4LDI3MTkwLDI3MTkxLDI3MTkyLDI3MTkzLDI3MTk0LDI3MTk1LDI3MTk2LDI3MTk5LDI3MjAwLDI3MjAxLDI3MjAyLDI3MjAzLDI3MjA1LDI3MjA2LDI3MjA4LDI3MjA5LDI3MjEwLDI3MjExLDI3MjEyLDI3MjEzLDI3MjE0LDI3MjE1LDI3MjE3LDI3MjE4LDI3MjE5LDI3MjIwLDI3MjIxLDI3MjIyLDI3MjIzLDI3MjI2LDI3MjI4LDI3MjI5LDI3MjMwLDI3MjMxLDI3MjMyLDI3MjM0LDI3MjM1LDI3MjM2LDI3MjM4LDI3MjM5LDI3MjQwLDI3MjQxLDI3MjQyLDI3MjQzLDI3MjQ0LDI3MjQ1LDI3MjQ2LDI3MjQ3LDI3MjQ4LDI3MjUwLDI3MjUxLDI3MjUyLDI3MjUzLDI3MjU0LDI3MjU1LDI3MjU2LDI3MjU4LDI3MjU5LDI3MjYxLDI3MjYyLDI3MjYzLDI3MjY1LDI3MjY2LDI3MjY3LDI3MjY5LDI3MjcwLDI3MjcxLDI3MjcyLDI3MjczLDI3Mjc0LDI3Mjc1LDI3Mjc2LDI3Mjc3LDI3Mjc5LDI3MjgyLDI3MjgzLDI3Mjg0LDI3Mjg1LDI3Mjg2LDI3Mjg4LDI3Mjg5LDI3MjkwLDI3MjkxLDI3MjkyLDI3MjkzLDI3Mjk0LDI3Mjk1LDI3Mjk3LDI3Mjk4LDI3Mjk5LDI3MzAwLDI3MzAxLDI3MzAyLDI3MzAzLDI3MzA0LDI3MzA2LDI3MzA5LDI3MzEwLDI3MzExLDI3MzEyLDI3MzEzLDI3MzE0LDI3MzE1LDI3MzE2LDI3MzE3LDI3MzE4LDI3MzE5LDI3MzIwLDI3MzIxLDI3MzIyLDI3MzIzLDI3MzI0LDI3MzI1LDI3MzI2LDI3MzI3LDI3MzI4LDI3MzI5LDI3MzMwLDI3MzMxLDI3MzMyLDI3MzMzLDI3MzM0LDI3MzM1LDI3MzM2LDI3MzM3LDI3MzM4LDI3MzM5LDI3MzQwLDI3MzQxLDI3MzQyLDI3MzQzLDI3MzQ0LDI3MzQ1LDI3MzQ2LDI3MzQ3LDI3MzQ4LDI3MzQ5LDI3MzUwLDI3MzUxLDI3MzUyLDI3MzUzLDI3MzU0LDI3MzU1LDI3MzU2LDI3MzU3LDI3MzU4LDI3MzU5LDI3MzYwLDI3MzYxLDI3MzYyLDI3MzYzLDI3MzY0LDI3MzY1LDI3MzY2LDI3MzY3LDI3MzY4LDI3MzY5LDI3MzcwLDI3MzcxLDI3MzcyLDI3MzczLDI3Mzc0LDI3Mzc1LDI3Mzc2LDI3Mzc3LDI3Mzc4LDI3Mzc5LDI3MzgwLDI3MzgxLDI3MzgyLDI3MzgzLDI3Mzg0LDI3Mzg1LDI3Mzg2LDI3Mzg3LDI3Mzg4LDI3Mzg5LDI3MzkwLDI3MzkxLDI3MzkyLDI3MzkzLDI3Mzk0LDI3Mzk1LDI3Mzk2LDI3Mzk3LDI3Mzk4LDI3Mzk5LDI3NDAwLDI3NDAxLDI3NDAyLDI3NDAzLDI3NDA0LDI3NDA1LDI3NDA2LDI3NDA3LDI3NDA4LDI3NDA5LDI3NDEwLDI3NDExLDI3NDEyLDI3NDEzLDI3NDE0LDI3NDE1LDI3NDE2LDI3NDE3LDI3NDE4LDI3NDE5LDI3NDIwLDI3NDIxLDI3NDIyLDI3NDIzLDI3NDI5LDI3NDMwLDI3NDMyLDI3NDMzLDI3NDM0LDI3NDM1LDI3NDM2LDI3NDM3LDI3NDM4LDI3NDM5LDI3NDQwLDI3NDQxLDI3NDQzLDI3NDQ0LDI3NDQ1LDI3NDQ2LDI3NDQ4LDI3NDUxLDI3NDUyLDI3NDUzLDI3NDU1LDI3NDU2LDI3NDU3LDI3NDU4LDI3NDYwLDI3NDYxLDI3NDY0LDI3NDY2LDI3NDY3LDI3NDY5LDI3NDcwLDI3NDcxLDI3NDcyLDI3NDczLDI3NDc0LDI3NDc1LDI3NDc2LDI3NDc3LDI3NDc4LDI3NDc5LDI3NDgwLDI3NDgyLDI3NDgzLDI3NDg0LDI3NDg1LDI3NDg2LDI3NDg3LDI3NDg4LDI3NDg5LDI3NDk2LDI3NDk3LDI3NDk5LDI3NTAwLDI3NTAxLDI3NTAyLDI3NTAzLDI3NTA0LDI3NTA1LDI3NTA2LDI3NTA3LDI3NTA4LDI3NTA5LDI3NTEwLDI3NTExLDI3NTEyLDI3NTE0LDI3NTE3LDI3NTE4LDI3NTE5LDI3NTIwLDI3NTI1LDI3NTI4LDI3NTMyLDI3NTM0LDI3NTM1LDI3NTM2LDI3NTM3LDI3NTQwLDI3NTQxLDI3NTQzLDI3NTQ0LDI3NTQ1LDI3NTQ4LDI3NTQ5LDI3NTUwLDI3NTUxLDI3NTUyLDI3NTU0LDI3NTU1LDI3NTU2LDI3NTU3LDI3NTU4LDI3NTU5LDI3NTYwLDI3NTYxLDI3NTYzLDI3NTY0LDI3NTY1LDI3NTY2LDI3NTY3LDI3NTY4LDI3NTY5LDI3NTcwLDI3NTc0LDI3NTc2LDI3NTc3LDI3NTc4LDI3NTc5LDI3NTgwLDI3NTgxLDI3NTgyLDI3NTg0LDI3NTg3LDI3NTg4LDI3NTkwLDI3NTkxLDI3NTkyLDI3NTkzLDI3NTk0LDI3NTk2LDI3NTk4LDI3NjAwLDI3NjAxLDI3NjA4LDI3NjEwLDI3NjEyLDI3NjEzLDI3NjE0LDI3NjE1LDI3NjE2LDI3NjE4LDI3NjE5LDI3NjIwLDI3NjIxLDI3NjIyLDI3NjIzLDI3NjI0LDI3NjI1LDI3NjI4LDI3NjI5LDI3NjMwLDI3NjMyLDI3NjMzLDI3NjM0LDI3NjM2LDI3NjM4LDI3NjM5LDI3NjQwLDI3NjQyLDI3NjQzLDI3NjQ0LDI3NjQ2LDI3NjQ3LDI3NjQ4LDI3NjQ5LDI3NjUwLDI3NjUxLDI3NjUyLDI3NjU2LDI3NjU3LDI3NjU4LDI3NjU5LDI3NjYwLDI3NjYyLDI3NjY2LDI3NjcxLDI3Njc2LDI3Njc3LDI3Njc4LDI3NjgwLDI3NjgzLDI3Njg1LDI3NjkxLDI3NjkyLDI3NjkzLDI3Njk3LDI3Njk5LDI3NzAyLDI3NzAzLDI3NzA1LDI3NzA2LDI3NzA3LDI3NzA4LDI3NzEwLDI3NzExLDI3NzE1LDI3NzE2LDI3NzE3LDI3NzIwLDI3NzIzLDI3NzI0LDI3NzI1LDI3NzI2LDI3NzI3LDI3NzI5LDI3NzMwLDI3NzMxLDI3NzM0LDI3NzM2LDI3NzM3LDI3NzM4LDI3NzQ2LDI3NzQ3LDI3NzQ5LDI3NzUwLDI3NzUxLDI3NzU1LDI3NzU2LDI3NzU3LDI3NzU4LDI3NzU5LDI3NzYxLDI3NzYzLDI3NzY1LDI3NzY3LDI3NzY4LDI3NzcwLDI3NzcxLDI3NzcyLDI3Nzc1LDI3Nzc2LDI3NzgwLDI3NzgzLDI3Nzg2LDI3Nzg3LDI3Nzg5LDI3NzkwLDI3NzkzLDI3Nzk0LDI3Nzk3LDI3Nzk4LDI3Nzk5LDI3ODAwLDI3ODAyLDI3ODA0LDI3ODA1LDI3ODA2LDI3ODA4LDI3ODEwLDI3ODE2LDI3ODIwLDI3ODIzLDI3ODI0LDI3ODI4LDI3ODI5LDI3ODMwLDI3ODMxLDI3ODM0LDI3ODQwLDI3ODQxLDI3ODQyLDI3ODQzLDI3ODQ2LDI3ODQ3LDI3ODQ4LDI3ODUxLDI3ODUzLDI3ODU0LDI3ODU1LDI3ODU3LDI3ODU4LDI3ODY0LDI3ODY1LDI3ODY2LDI3ODY4LDI3ODY5LDI3ODcxLDI3ODc2LDI3ODc4LDI3ODc5LDI3ODgxLDI3ODg0LDI3ODg1LDI3ODkwLDI3ODkyLDI3ODk3LDI3OTAzLDI3OTA0LDI3OTA2LDI3OTA3LDI3OTA5LDI3OTEwLDI3OTEyLDI3OTEzLDI3OTE0LDI3OTE3LDI3OTE5LDI3OTIwLDI3OTIxLDI3OTIzLDI3OTI0LDI3OTI1LDI3OTI2LDI3OTI4LDI3OTMyLDI3OTMzLDI3OTM1LDI3OTM2LDI3OTM3LDI3OTM4LDI3OTM5LDI3OTQwLDI3OTQyLDI3OTQ0LDI3OTQ1LDI3OTQ4LDI3OTQ5LDI3OTUxLDI3OTUyLDI3OTU2LDI3OTU4LDI3OTU5LDI3OTYwLDI3OTYyLDI3OTY3LDI3OTY4LDI3OTcwLDI3OTcyLDI3OTc3LDI3OTgwLDI3OTg0LDI3OTg5LDI3OTkwLDI3OTkxLDI3OTkyLDI3OTk1LDI3OTk3LDI3OTk5LDI4MDAxLDI4MDAyLDI4MDA0LDI4MDA1LDI4MDA3LDI4MDA4LDI4MDExLDI4MDEyLDI4MDEzLDI4MDE2LDI4MDE3LDI4MDE4LDI4MDE5LDI4MDIxLDI4MDIyLDI4MDI1LDI4MDI2LDI4MDI3LDI4MDI5LDI4MDMwLDI4MDMxLDI4MDMyLDI4MDMzLDI4MDM1LDI4MDM2LDI4MDM4LDI4MDM5LDI4MDQyLDI4MDQzLDI4MDQ1LDI4MDQ3LDI4MDQ4LDI4MDUwLDI4MDU0LDI4MDU1LDI4MDU2LDI4MDU3LDI4MDU4LDI4MDYwLDI4MDY2LDI4MDY5LDI4MDc2LDI4MDc3LDI4MDgwLDI4MDgxLDI4MDgzLDI4MDg0LDI4MDg2LDI4MDg3LDI4MDg5LDI4MDkwLDI4MDkxLDI4MDkyLDI4MDkzLDI4MDk0LDI4MDk3LDI4MDk4LDI4MDk5LDI4MTA0LDI4MTA1LDI4MTA2LDI4MTA5LDI4MTEwLDI4MTExLDI4MTEyLDI4MTE0LDI4MTE1LDI4MTE2LDI4MTE3LDI4MTE5LDI4MTIyLDI4MTIzLDI4MTI0LDI4MTI3LDI4MTMwLDI4MTMxLDI4MTMzLDI4MTM1LDI4MTM2LDI4MTM3LDI4MTM4LDI4MTQxLDI4MTQzLDI4MTQ0LDI4MTQ2LDI4MTQ4LDI4MTQ5LDI4MTUwLDI4MTUyLDI4MTU0LDI4MTU3LDI4MTU4LDI4MTU5LDI4MTYwLDI4MTYxLDI4MTYyLDI4MTYzLDI4MTY0LDI4MTY2LDI4MTY3LDI4MTY4LDI4MTY5LDI4MTcxLDI4MTc1LDI4MTc4LDI4MTc5LDI4MTgxLDI4MTg0LDI4MTg1LDI4MTg3LDI4MTg4LDI4MTkwLDI4MTkxLDI4MTk0LDI4MTk4LDI4MTk5LDI4MjAwLDI4MjAyLDI4MjA0LDI4MjA2LDI4MjA4LDI4MjA5LDI4MjExLDI4MjEzLDI4MjE0LDI4MjE1LDI4MjE3LDI4MjE5LDI4MjIwLDI4MjIxLDI4MjIyLDI4MjIzLDI4MjI0LDI4MjI1LDI4MjI2LDI4MjI5LDI4MjMwLDI4MjMxLDI4MjMyLDI4MjMzLDI4MjM0LDI4MjM1LDI4MjM2LDI4MjM5LDI4MjQwLDI4MjQxLDI4MjQyLDI4MjQ1LDI4MjQ3LDI4MjQ5LDI4MjUwLDI4MjUyLDI4MjUzLDI4MjU0LDI4MjU2LDI4MjU3LDI4MjU4LDI4MjU5LDI4MjYwLDI4MjYxLDI4MjYyLDI4MjYzLDI4MjY0LDI4MjY1LDI4MjY2LDI4MjY4LDI4MjY5LDI4MjcxLDI4MjcyLDI4MjczLDI4Mjc0LDI4Mjc1LDI4Mjc2LDI4Mjc3LDI4Mjc4LDI4Mjc5LDI4MjgwLDI4MjgxLDI4MjgyLDI4MjgzLDI4Mjg0LDI4Mjg1LDI4Mjg4LDI4Mjg5LDI4MjkwLDI4MjkyLDI4Mjk1LDI4Mjk2LDI4Mjk4LDI4Mjk5LDI4MzAwLDI4MzAxLDI4MzAyLDI4MzA1LDI4MzA2LDI4MzA3LDI4MzA4LDI4MzA5LDI4MzEwLDI4MzExLDI4MzEzLDI4MzE0LDI4MzE1LDI4MzE3LDI4MzE4LDI4MzIwLDI4MzIxLDI4MzIzLDI4MzI0LDI4MzI2LDI4MzI4LDI4MzI5LDI4MzMxLDI4MzMyLDI4MzMzLDI4MzM0LDI4MzM2LDI4MzM5LDI4MzQxLDI4MzQ0LDI4MzQ1LDI4MzQ4LDI4MzUwLDI4MzUxLDI4MzUyLDI4MzU1LDI4MzU2LDI4MzU3LDI4MzU4LDI4MzYwLDI4MzYxLDI4MzYyLDI4MzY0LDI4MzY1LDI4MzY2LDI4MzY4LDI4MzcwLDI4Mzc0LDI4Mzc2LDI4Mzc3LDI4Mzc5LDI4MzgwLDI4MzgxLDI4Mzg3LDI4MzkxLDI4Mzk0LDI4Mzk1LDI4Mzk2LDI4Mzk3LDI4Mzk4LDI4Mzk5LDI4NDAwLDI4NDAxLDI4NDAyLDI4NDAzLDI4NDA1LDI4NDA2LDI4NDA3LDI4NDA4LDI4NDEwLDI4NDExLDI4NDEyLDI4NDEzLDI4NDE0LDI4NDE1LDI4NDE2LDI4NDE3LDI4NDE5LDI4NDIwLDI4NDIxLDI4NDIzLDI4NDI0LDI4NDI2LDI4NDI3LDI4NDI4LDI4NDI5LDI4NDMwLDI4NDMyLDI4NDMzLDI4NDM0LDI4NDM4LDI4NDM5LDI4NDQwLDI4NDQxLDI4NDQyLDI4NDQzLDI4NDQ0LDI4NDQ1LDI4NDQ2LDI4NDQ3LDI4NDQ5LDI4NDUwLDI4NDUxLDI4NDUzLDI4NDU0LDI4NDU1LDI4NDU2LDI4NDYwLDI4NDYyLDI4NDY0LDI4NDY2LDI4NDY4LDI4NDY5LDI4NDcxLDI4NDcyLDI4NDczLDI4NDc0LDI4NDc1LDI4NDc2LDI4NDc3LDI4NDc5LDI4NDgwLDI4NDgxLDI4NDgyLDI4NDgzLDI4NDg0LDI4NDg1LDI4NDg4LDI4NDg5LDI4NDkwLDI4NDkyLDI4NDk0LDI4NDk1LDI4NDk2LDI4NDk3LDI4NDk4LDI4NDk5LDI4NTAwLDI4NTAxLDI4NTAyLDI4NTAzLDI4NTA1LDI4NTA2LDI4NTA3LDI4NTA5LDI4NTExLDI4NTEyLDI4NTEzLDI4NTE1LDI4NTE2LDI4NTE3LDI4NTE5LDI4NTIwLDI4NTIxLDI4NTIyLDI4NTIzLDI4NTI0LDI4NTI3LDI4NTI4LDI4NTI5LDI4NTMxLDI4NTMzLDI4NTM0LDI4NTM1LDI4NTM3LDI4NTM5LDI4NTQxLDI4NTQyLDI4NTQzLDI4NTQ0LDI4NTQ1LDI4NTQ2LDI4NTQ3LDI4NTQ5LDI4NTUwLDI4NTUxLDI4NTU0LDI4NTU1LDI4NTU5LDI4NTYwLDI4NTYxLDI4NTYyLDI4NTYzLDI4NTY0LDI4NTY1LDI4NTY2LDI4NTY3LDI4NTY4LDI4NTY5LDI4NTcwLDI4NTcxLDI4NTczLDI4NTc0LDI4NTc1LDI4NTc2LDI4NTc4LDI4NTc5LDI4NTgwLDI4NTgxLDI4NTgyLDI4NTg0LDI4NTg1LDI4NTg2LDI4NTg3LDI4NTg4LDI4NTg5LDI4NTkwLDI4NTkxLDI4NTkyLDI4NTkzLDI4NTk0LDI4NTk2LDI4NTk3LDI4NTk5LDI4NjAwLDI4NjAyLDI4NjAzLDI4NjA0LDI4NjA1LDI4NjA2LDI4NjA3LDI4NjA5LDI4NjExLDI4NjEyLDI4NjEzLDI4NjE0LDI4NjE1LDI4NjE2LDI4NjE4LDI4NjE5LDI4NjIwLDI4NjIxLDI4NjIyLDI4NjIzLDI4NjI0LDI4NjI3LDI4NjI4LDI4NjI5LDI4NjMwLDI4NjMxLDI4NjMyLDI4NjMzLDI4NjM0LDI4NjM1LDI4NjM2LDI4NjM3LDI4NjM5LDI4NjQyLDI4NjQzLDI4NjQ0LDI4NjQ1LDI4NjQ2LDI4NjQ3LDI4NjQ4LDI4NjQ5LDI4NjUwLDI4NjUxLDI4NjUyLDI4NjUzLDI4NjU2LDI4NjU3LDI4NjU4LDI4NjU5LDI4NjYwLDI4NjYxLDI4NjYyLDI4NjYzLDI4NjY0LDI4NjY1LDI4NjY2LDI4NjY3LDI4NjY4LDI4NjY5LDI4NjcwLDI4NjcxLDI4NjcyLDI4NjczLDI4Njc0LDI4Njc1LDI4Njc2LDI4Njc3LDI4Njc4LDI4Njc5LDI4NjgwLDI4NjgxLDI4NjgyLDI4NjgzLDI4Njg0LDI4Njg1LDI4Njg2LDI4Njg3LDI4Njg4LDI4NjkwLDI4NjkxLDI4NjkyLDI4NjkzLDI4Njk0LDI4Njk1LDI4Njk2LDI4Njk3LDI4NzAwLDI4NzAxLDI4NzAyLDI4NzAzLDI4NzA0LDI4NzA1LDI4NzA2LDI4NzA4LDI4NzA5LDI4NzEwLDI4NzExLDI4NzEyLDI4NzEzLDI4NzE0LDI4NzE1LDI4NzE2LDI4NzE3LDI4NzE4LDI4NzE5LDI4NzIwLDI4NzIxLDI4NzIyLDI4NzIzLDI4NzI0LDI4NzI2LDI4NzI3LDI4NzI4LDI4NzMwLDI4NzMxLDI4NzMyLDI4NzMzLDI4NzM0LDI4NzM1LDI4NzM2LDI4NzM3LDI4NzM4LDI4NzM5LDI4NzQwLDI4NzQxLDI4NzQyLDI4NzQzLDI4NzQ0LDI4NzQ1LDI4NzQ2LDI4NzQ3LDI4NzQ5LDI4NzUwLDI4NzUyLDI4NzUzLDI4NzU0LDI4NzU1LDI4NzU2LDI4NzU3LDI4NzU4LDI4NzU5LDI4NzYwLDI4NzYxLDI4NzYyLDI4NzYzLDI4NzY0LDI4NzY1LDI4NzY3LDI4NzY4LDI4NzY5LDI4NzcwLDI4NzcxLDI4NzcyLDI4NzczLDI4Nzc0LDI4Nzc1LDI4Nzc2LDI4Nzc3LDI4Nzc4LDI4NzgyLDI4Nzg1LDI4Nzg2LDI4Nzg3LDI4Nzg4LDI4NzkxLDI4NzkzLDI4Nzk0LDI4Nzk1LDI4Nzk3LDI4ODAxLDI4ODAyLDI4ODAzLDI4ODA0LDI4ODA2LDI4ODA3LDI4ODA4LDI4ODExLDI4ODEyLDI4ODEzLDI4ODE1LDI4ODE2LDI4ODE3LDI4ODE5LDI4ODIzLDI4ODI0LDI4ODI2LDI4ODI3LDI4ODMwLDI4ODMxLDI4ODMyLDI4ODMzLDI4ODM0LDI4ODM1LDI4ODM2LDI4ODM3LDI4ODM4LDI4ODM5LDI4ODQwLDI4ODQxLDI4ODQyLDI4ODQ4LDI4ODUwLDI4ODUyLDI4ODUzLDI4ODU0LDI4ODU4LDI4ODYyLDI4ODYzLDI4ODY4LDI4ODY5LDI4ODcwLDI4ODcxLDI4ODczLDI4ODc1LDI4ODc2LDI4ODc3LDI4ODc4LDI4ODc5LDI4ODgwLDI4ODgxLDI4ODgyLDI4ODgzLDI4ODg0LDI4ODg1LDI4ODg2LDI4ODg3LDI4ODkwLDI4ODkyLDI4ODkzLDI4ODk0LDI4ODk2LDI4ODk3LDI4ODk4LDI4ODk5LDI4OTAxLDI4OTA2LDI4OTEwLDI4OTEyLDI4OTEzLDI4OTE0LDI4OTE1LDI4OTE2LDI4OTE3LDI4OTE4LDI4OTIwLDI4OTIyLDI4OTIzLDI4OTI0LDI4OTI2LDI4OTI3LDI4OTI4LDI4OTI5LDI4OTMwLDI4OTMxLDI4OTMyLDI4OTMzLDI4OTM0LDI4OTM1LDI4OTM2LDI4OTM5LDI4OTQwLDI4OTQxLDI4OTQyLDI4OTQzLDI4OTQ1LDI4OTQ2LDI4OTQ4LDI4OTUxLDI4OTU1LDI4OTU2LDI4OTU3LDI4OTU4LDI4OTU5LDI4OTYwLDI4OTYxLDI4OTYyLDI4OTYzLDI4OTY0LDI4OTY1LDI4OTY3LDI4OTY4LDI4OTY5LDI4OTcwLDI4OTcxLDI4OTcyLDI4OTczLDI4OTc0LDI4OTc4LDI4OTc5LDI4OTgwLDI4OTgxLDI4OTgzLDI4OTg0LDI4OTg1LDI4OTg2LDI4OTg3LDI4OTg4LDI4OTg5LDI4OTkwLDI4OTkxLDI4OTkyLDI4OTkzLDI4OTk0LDI4OTk1LDI4OTk2LDI4OTk4LDI4OTk5LDI5MDAwLDI5MDAxLDI5MDAzLDI5MDA1LDI5MDA3LDI5MDA4LDI5MDA5LDI5MDEwLDI5MDExLDI5MDEyLDI5MDEzLDI5MDE0LDI5MDE1LDI5MDE2LDI5MDE3LDI5MDE4LDI5MDE5LDI5MDIxLDI5MDIzLDI5MDI0LDI5MDI1LDI5MDI2LDI5MDI3LDI5MDI5LDI5MDMzLDI5MDM0LDI5MDM1LDI5MDM2LDI5MDM3LDI5MDM5LDI5MDQwLDI5MDQxLDI5MDQ0LDI5MDQ1LDI5MDQ2LDI5MDQ3LDI5MDQ5LDI5MDUxLDI5MDUyLDI5MDU0LDI5MDU1LDI5MDU2LDI5MDU3LDI5MDU4LDI5MDU5LDI5MDYxLDI5MDYyLDI5MDYzLDI5MDY0LDI5MDY1LDI5MDY3LDI5MDY4LDI5MDY5LDI5MDcwLDI5MDcyLDI5MDczLDI5MDc0LDI5MDc1LDI5MDc3LDI5MDc4LDI5MDc5LDI5MDgyLDI5MDgzLDI5MDg0LDI5MDg1LDI5MDg2LDI5MDg5LDI5MDkwLDI5MDkxLDI5MDkyLDI5MDkzLDI5MDk0LDI5MDk1LDI5MDk3LDI5MDk4LDI5MDk5LDI5MTAxLDI5MTAyLDI5MTAzLDI5MTA0LDI5MTA1LDI5MTA2LDI5MTA4LDI5MTEwLDI5MTExLDI5MTEyLDI5MTE0LDI5MTE1LDI5MTE2LDI5MTE3LDI5MTE4LDI5MTE5LDI5MTIwLDI5MTIxLDI5MTIyLDI5MTI0LDI5MTI1LDI5MTI2LDI5MTI3LDI5MTI4LDI5MTI5LDI5MTMwLDI5MTMxLDI5MTMyLDI5MTMzLDI5MTM1LDI5MTM2LDI5MTM3LDI5MTM4LDI5MTM5LDI5MTQyLDI5MTQzLDI5MTQ0LDI5MTQ1LDI5MTQ2LDI5MTQ3LDI5MTQ4LDI5MTQ5LDI5MTUwLDI5MTUxLDI5MTUzLDI5MTU0LDI5MTU1LDI5MTU2LDI5MTU4LDI5MTYwLDI5MTYxLDI5MTYyLDI5MTYzLDI5MTY0LDI5MTY1LDI5MTY3LDI5MTY4LDI5MTY5LDI5MTcwLDI5MTcxLDI5MTcyLDI5MTczLDI5MTc0LDI5MTc1LDI5MTc2LDI5MTc4LDI5MTc5LDI5MTgwLDI5MTgxLDI5MTgyLDI5MTgzLDI5MTg0LDI5MTg1LDI5MTg2LDI5MTg3LDI5MTg4LDI5MTg5LDI5MTkxLDI5MTkyLDI5MTkzLDI5MTk0LDI5MTk1LDI5MTk2LDI5MTk3LDI5MTk4LDI5MTk5LDI5MjAwLDI5MjAxLDI5MjAyLDI5MjAzLDI5MjA0LDI5MjA1LDI5MjA2LDI5MjA3LDI5MjA4LDI5MjA5LDI5MjEwLDI5MjExLDI5MjEyLDI5MjE0LDI5MjE1LDI5MjE2LDI5MjE3LDI5MjE4LDI5MjE5LDI5MjIwLDI5MjIxLDI5MjIyLDI5MjIzLDI5MjI1LDI5MjI3LDI5MjI5LDI5MjMwLDI5MjMxLDI5MjM0LDI5MjM1LDI5MjM2LDI5MjQyLDI5MjQ0LDI5MjQ2LDI5MjQ4LDI5MjQ5LDI5MjUwLDI5MjUxLDI5MjUyLDI5MjUzLDI5MjU0LDI5MjU3LDI5MjU4LDI5MjU5LDI5MjYyLDI5MjYzLDI5MjY0LDI5MjY1LDI5MjY3LDI5MjY4LDI5MjY5LDI5MjcxLDI5MjcyLDI5Mjc0LDI5Mjc2LDI5Mjc4LDI5MjgwLDI5MjgzLDI5Mjg0LDI5Mjg1LDI5Mjg4LDI5MjkwLDI5MjkxLDI5MjkyLDI5MjkzLDI5Mjk2LDI5Mjk3LDI5Mjk5LDI5MzAwLDI5MzAyLDI5MzAzLDI5MzA0LDI5MzA3LDI5MzA4LDI5MzA5LDI5MzE0LDI5MzE1LDI5MzE3LDI5MzE4LDI5MzE5LDI5MzIwLDI5MzIxLDI5MzI0LDI5MzI2LDI5MzI4LDI5MzI5LDI5MzMxLDI5MzMyLDI5MzMzLDI5MzM0LDI5MzM1LDI5MzM2LDI5MzM3LDI5MzM4LDI5MzM5LDI5MzQwLDI5MzQxLDI5MzQyLDI5MzQ0LDI5MzQ1LDI5MzQ2LDI5MzQ3LDI5MzQ4LDI5MzQ5LDI5MzUwLDI5MzUxLDI5MzUyLDI5MzUzLDI5MzU0LDI5MzU1LDI5MzU4LDI5MzYxLDI5MzYyLDI5MzYzLDI5MzY1LDI5MzcwLDI5MzcxLDI5MzcyLDI5MzczLDI5Mzc0LDI5Mzc1LDI5Mzc2LDI5MzgxLDI5MzgyLDI5MzgzLDI5Mzg1LDI5Mzg2LDI5Mzg3LDI5Mzg4LDI5MzkxLDI5MzkzLDI5Mzk1LDI5Mzk2LDI5Mzk3LDI5Mzk4LDI5NDAwLDI5NDAyLDI5NDAzLDU4NTY2LDU4NTY3LDU4NTY4LDU4NTY5LDU4NTcwLDU4NTcxLDU4NTcyLDU4NTczLDU4NTc0LDU4NTc1LDU4NTc2LDU4NTc3LDU4NTc4LDU4NTc5LDU4NTgwLDU4NTgxLDU4NTgyLDU4NTgzLDU4NTg0LDU4NTg1LDU4NTg2LDU4NTg3LDU4NTg4LDU4NTg5LDU4NTkwLDU4NTkxLDU4NTkyLDU4NTkzLDU4NTk0LDU4NTk1LDU4NTk2LDU4NTk3LDU4NTk4LDU4NTk5LDU4NjAwLDU4NjAxLDU4NjAyLDU4NjAzLDU4NjA0LDU4NjA1LDU4NjA2LDU4NjA3LDU4NjA4LDU4NjA5LDU4NjEwLDU4NjExLDU4NjEyLDU4NjEzLDU4NjE0LDU4NjE1LDU4NjE2LDU4NjE3LDU4NjE4LDU4NjE5LDU4NjIwLDU4NjIxLDU4NjIyLDU4NjIzLDU4NjI0LDU4NjI1LDU4NjI2LDU4NjI3LDU4NjI4LDU4NjI5LDU4NjMwLDU4NjMxLDU4NjMyLDU4NjMzLDU4NjM0LDU4NjM1LDU4NjM2LDU4NjM3LDU4NjM4LDU4NjM5LDU4NjQwLDU4NjQxLDU4NjQyLDU4NjQzLDU4NjQ0LDU4NjQ1LDU4NjQ2LDU4NjQ3LDU4NjQ4LDU4NjQ5LDU4NjUwLDU4NjUxLDU4NjUyLDU4NjUzLDU4NjU0LDU4NjU1LDU4NjU2LDU4NjU3LDU4NjU4LDU4NjU5LDU4NjYwLDU4NjYxLDEyMjg4LDEyMjg5LDEyMjkwLDE4Myw3MTMsNzExLDE2OCwxMjI5MSwxMjI5Myw4MjEyLDY1Mzc0LDgyMTQsODIzMCw4MjE2LDgyMTcsODIyMCw4MjIxLDEyMzA4LDEyMzA5LDEyMjk2LDEyMjk3LDEyMjk4LDEyMjk5LDEyMzAwLDEyMzAxLDEyMzAyLDEyMzAzLDEyMzEwLDEyMzExLDEyMzA0LDEyMzA1LDE3NywyMTUsMjQ3LDg3NTgsODc0Myw4NzQ0LDg3MjEsODcxOSw4NzQ2LDg3NDUsODcxMiw4NzU5LDg3MzAsODg2OSw4NzQxLDg3MzYsODk3OCw4ODU3LDg3NDcsODc1MCw4ODAxLDg3ODAsODc3Niw4NzY1LDg3MzMsODgwMCw4ODE0LDg4MTUsODgwNCw4ODA1LDg3MzQsODc1Nyw4NzU2LDk3OTQsOTc5MiwxNzYsODI0Miw4MjQzLDg0NTEsNjUyODQsMTY0LDY1NTA0LDY1NTA1LDgyNDAsMTY3LDg0NzAsOTczNCw5NzMzLDk2NzUsOTY3OSw5Njc4LDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY1MSw5NjUwLDgyNTEsODU5NCw4NTkyLDg1OTMsODU5NSwxMjMwNyw1ODY2Miw1ODY2Myw1ODY2NCw1ODY2NSw1ODY2Niw1ODY2Nyw1ODY2OCw1ODY2OSw1ODY3MCw1ODY3MSw1ODY3Miw1ODY3Myw1ODY3NCw1ODY3NSw1ODY3Niw1ODY3Nyw1ODY3OCw1ODY3OSw1ODY4MCw1ODY4MSw1ODY4Miw1ODY4Myw1ODY4NCw1ODY4NSw1ODY4Niw1ODY4Nyw1ODY4OCw1ODY4OSw1ODY5MCw1ODY5MSw1ODY5Miw1ODY5Myw1ODY5NCw1ODY5NSw1ODY5Niw1ODY5Nyw1ODY5OCw1ODY5OSw1ODcwMCw1ODcwMSw1ODcwMiw1ODcwMyw1ODcwNCw1ODcwNSw1ODcwNiw1ODcwNyw1ODcwOCw1ODcwOSw1ODcxMCw1ODcxMSw1ODcxMiw1ODcxMyw1ODcxNCw1ODcxNSw1ODcxNiw1ODcxNyw1ODcxOCw1ODcxOSw1ODcyMCw1ODcyMSw1ODcyMiw1ODcyMyw1ODcyNCw1ODcyNSw1ODcyNiw1ODcyNyw1ODcyOCw1ODcyOSw1ODczMCw1ODczMSw1ODczMiw1ODczMyw1ODczNCw1ODczNSw1ODczNiw1ODczNyw1ODczOCw1ODczOSw1ODc0MCw1ODc0MSw1ODc0Miw1ODc0Myw1ODc0NCw1ODc0NSw1ODc0Niw1ODc0Nyw1ODc0OCw1ODc0OSw1ODc1MCw1ODc1MSw1ODc1Miw1ODc1Myw1ODc1NCw1ODc1NSw1ODc1Niw1ODc1Nyw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LDU5MjM4LDU5MjM5LDU5MjQwLDU5MjQxLDU5MjQyLDU5MjQzLDkzNTIsOTM1Myw5MzU0LDkzNTUsOTM1Niw5MzU3LDkzNTgsOTM1OSw5MzYwLDkzNjEsOTM2Miw5MzYzLDkzNjQsOTM2NSw5MzY2LDkzNjcsOTM2OCw5MzY5LDkzNzAsOTM3MSw5MzMyLDkzMzMsOTMzNCw5MzM1LDkzMzYsOTMzNyw5MzM4LDkzMzksOTM0MCw5MzQxLDkzNDIsOTM0Myw5MzQ0LDkzNDUsOTM0Niw5MzQ3LDkzNDgsOTM0OSw5MzUwLDkzNTEsOTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkzMjAsOTMyMSw4MzY0LDU5MjQ1LDEyODMyLDEyODMzLDEyODM0LDEyODM1LDEyODM2LDEyODM3LDEyODM4LDEyODM5LDEyODQwLDEyODQxLDU5MjQ2LDU5MjQ3LDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsODU1NCw4NTU1LDU5MjQ4LDU5MjQ5LDU4NzU4LDU4NzU5LDU4NzYwLDU4NzYxLDU4NzYyLDU4NzYzLDU4NzY0LDU4NzY1LDU4NzY2LDU4NzY3LDU4NzY4LDU4NzY5LDU4NzcwLDU4NzcxLDU4NzcyLDU4NzczLDU4Nzc0LDU4Nzc1LDU4Nzc2LDU4Nzc3LDU4Nzc4LDU4Nzc5LDU4NzgwLDU4NzgxLDU4NzgyLDU4NzgzLDU4Nzg0LDU4Nzg1LDU4Nzg2LDU4Nzg3LDU4Nzg4LDU4Nzg5LDU4NzkwLDU4NzkxLDU4NzkyLDU4NzkzLDU4Nzk0LDU4Nzk1LDU4Nzk2LDU4Nzk3LDU4Nzk4LDU4Nzk5LDU4ODAwLDU4ODAxLDU4ODAyLDU4ODAzLDU4ODA0LDU4ODA1LDU4ODA2LDU4ODA3LDU4ODA4LDU4ODA5LDU4ODEwLDU4ODExLDU4ODEyLDU4ODEzLDU4ODE0LDU4ODE1LDU4ODE2LDU4ODE3LDU4ODE4LDU4ODE5LDU4ODIwLDU4ODIxLDU4ODIyLDU4ODIzLDU4ODI0LDU4ODI1LDU4ODI2LDU4ODI3LDU4ODI4LDU4ODI5LDU4ODMwLDU4ODMxLDU4ODMyLDU4ODMzLDU4ODM0LDU4ODM1LDU4ODM2LDU4ODM3LDU4ODM4LDU4ODM5LDU4ODQwLDU4ODQxLDU4ODQyLDU4ODQzLDU4ODQ0LDU4ODQ1LDU4ODQ2LDU4ODQ3LDU4ODQ4LDU4ODQ5LDU4ODUwLDU4ODUxLDU4ODUyLDEyMjg4LDY1MjgxLDY1MjgyLDY1MjgzLDY1NTA5LDY1Mjg1LDY1Mjg2LDY1Mjg3LDY1Mjg4LDY1Mjg5LDY1MjkwLDY1MjkxLDY1MjkyLDY1MjkzLDY1Mjk0LDY1Mjk1LDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LDY1MzA2LDY1MzA3LDY1MzA4LDY1MzA5LDY1MzEwLDY1MzExLDY1MzEyLDY1MzEzLDY1MzE0LDY1MzE1LDY1MzE2LDY1MzE3LDY1MzE4LDY1MzE5LDY1MzIwLDY1MzIxLDY1MzIyLDY1MzIzLDY1MzI0LDY1MzI1LDY1MzI2LDY1MzI3LDY1MzI4LDY1MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LDY1MzM5LDY1MzQwLDY1MzQxLDY1MzQyLDY1MzQzLDY1MzQ0LDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1MzQ4LDY1MzQ5LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1MzU0LDY1MzU1LDY1MzU2LDY1MzU3LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5LDY1MzcwLDY1MzcxLDY1MzcyLDY1MzczLDY1NTA3LDU4ODU0LDU4ODU1LDU4ODU2LDU4ODU3LDU4ODU4LDU4ODU5LDU4ODYwLDU4ODYxLDU4ODYyLDU4ODYzLDU4ODY0LDU4ODY1LDU4ODY2LDU4ODY3LDU4ODY4LDU4ODY5LDU4ODcwLDU4ODcxLDU4ODcyLDU4ODczLDU4ODc0LDU4ODc1LDU4ODc2LDU4ODc3LDU4ODc4LDU4ODc5LDU4ODgwLDU4ODgxLDU4ODgyLDU4ODgzLDU4ODg0LDU4ODg1LDU4ODg2LDU4ODg3LDU4ODg4LDU4ODg5LDU4ODkwLDU4ODkxLDU4ODkyLDU4ODkzLDU4ODk0LDU4ODk1LDU4ODk2LDU4ODk3LDU4ODk4LDU4ODk5LDU4OTAwLDU4OTAxLDU4OTAyLDU4OTAzLDU4OTA0LDU4OTA1LDU4OTA2LDU4OTA3LDU4OTA4LDU4OTA5LDU4OTEwLDU4OTExLDU4OTEyLDU4OTEzLDU4OTE0LDU4OTE1LDU4OTE2LDU4OTE3LDU4OTE4LDU4OTE5LDU4OTIwLDU4OTIxLDU4OTIyLDU4OTIzLDU4OTI0LDU4OTI1LDU4OTI2LDU4OTI3LDU4OTI4LDU4OTI5LDU4OTMwLDU4OTMxLDU4OTMyLDU4OTMzLDU4OTM0LDU4OTM1LDU4OTM2LDU4OTM3LDU4OTM4LDU4OTM5LDU4OTQwLDU4OTQxLDU4OTQyLDU4OTQzLDU4OTQ0LDU4OTQ1LDU4OTQ2LDU4OTQ3LDU4OTQ4LDU4OTQ5LDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LDU5MjUwLDU5MjUxLDU5MjUyLDU5MjUzLDU5MjU0LDU5MjU1LDU5MjU2LDU5MjU3LDU5MjU4LDU5MjU5LDU5MjYwLDU4OTUwLDU4OTUxLDU4OTUyLDU4OTUzLDU4OTU0LDU4OTU1LDU4OTU2LDU4OTU3LDU4OTU4LDU4OTU5LDU4OTYwLDU4OTYxLDU4OTYyLDU4OTYzLDU4OTY0LDU4OTY1LDU4OTY2LDU4OTY3LDU4OTY4LDU4OTY5LDU4OTcwLDU4OTcxLDU4OTcyLDU4OTczLDU4OTc0LDU4OTc1LDU4OTc2LDU4OTc3LDU4OTc4LDU4OTc5LDU4OTgwLDU4OTgxLDU4OTgyLDU4OTgzLDU4OTg0LDU4OTg1LDU4OTg2LDU4OTg3LDU4OTg4LDU4OTg5LDU4OTkwLDU4OTkxLDU4OTkyLDU4OTkzLDU4OTk0LDU4OTk1LDU4OTk2LDU4OTk3LDU4OTk4LDU4OTk5LDU5MDAwLDU5MDAxLDU5MDAyLDU5MDAzLDU5MDA0LDU5MDA1LDU5MDA2LDU5MDA3LDU5MDA4LDU5MDA5LDU5MDEwLDU5MDExLDU5MDEyLDU5MDEzLDU5MDE0LDU5MDE1LDU5MDE2LDU5MDE3LDU5MDE4LDU5MDE5LDU5MDIwLDU5MDIxLDU5MDIyLDU5MDIzLDU5MDI0LDU5MDI1LDU5MDI2LDU5MDI3LDU5MDI4LDU5MDI5LDU5MDMwLDU5MDMxLDU5MDMyLDU5MDMzLDU5MDM0LDU5MDM1LDU5MDM2LDU5MDM3LDU5MDM4LDU5MDM5LDU5MDQwLDU5MDQxLDU5MDQyLDU5MDQzLDU5MDQ0LDU5MDQ1LDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LDU5MjYxLDU5MjYyLDU5MjYzLDU5MjY0LDU5MjY1LDU5MjY2LDU5MjY3LDU5MjY4LDU5MDQ2LDU5MDQ3LDU5MDQ4LDU5MDQ5LDU5MDUwLDU5MDUxLDU5MDUyLDU5MDUzLDU5MDU0LDU5MDU1LDU5MDU2LDU5MDU3LDU5MDU4LDU5MDU5LDU5MDYwLDU5MDYxLDU5MDYyLDU5MDYzLDU5MDY0LDU5MDY1LDU5MDY2LDU5MDY3LDU5MDY4LDU5MDY5LDU5MDcwLDU5MDcxLDU5MDcyLDU5MDczLDU5MDc0LDU5MDc1LDU5MDc2LDU5MDc3LDU5MDc4LDU5MDc5LDU5MDgwLDU5MDgxLDU5MDgyLDU5MDgzLDU5MDg0LDU5MDg1LDU5MDg2LDU5MDg3LDU5MDg4LDU5MDg5LDU5MDkwLDU5MDkxLDU5MDkyLDU5MDkzLDU5MDk0LDU5MDk1LDU5MDk2LDU5MDk3LDU5MDk4LDU5MDk5LDU5MTAwLDU5MTAxLDU5MTAyLDU5MTAzLDU5MTA0LDU5MTA1LDU5MTA2LDU5MTA3LDU5MTA4LDU5MTA5LDU5MTEwLDU5MTExLDU5MTEyLDU5MTEzLDU5MTE0LDU5MTE1LDU5MTE2LDU5MTE3LDU5MTE4LDU5MTE5LDU5MTIwLDU5MTIxLDU5MTIyLDU5MTIzLDU5MTI0LDU5MTI1LDU5MTI2LDU5MTI3LDU5MTI4LDU5MTI5LDU5MTMwLDU5MTMxLDU5MTMyLDU5MTMzLDU5MTM0LDU5MTM1LDU5MTM2LDU5MTM3LDU5MTM4LDU5MTM5LDU5MTQwLDU5MTQxLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDU5MjY5LDU5MjcwLDU5MjcxLDU5MjcyLDU5MjczLDU5Mjc0LDU5Mjc1LDU5Mjc2LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDU5Mjc3LDU5Mjc4LDU5Mjc5LDU5MjgwLDU5MjgxLDU5MjgyLDU5MjgzLDY1MDc3LDY1MDc4LDY1MDgxLDY1MDgyLDY1MDg3LDY1MDg4LDY1MDg1LDY1MDg2LDY1MDg5LDY1MDkwLDY1MDkxLDY1MDkyLDU5Mjg0LDU5Mjg1LDY1MDgzLDY1MDg0LDY1MDc5LDY1MDgwLDY1MDczLDU5Mjg2LDY1MDc1LDY1MDc2LDU5Mjg3LDU5Mjg4LDU5Mjg5LDU5MjkwLDU5MjkxLDU5MjkyLDU5MjkzLDU5Mjk0LDU5Mjk1LDU5MTQyLDU5MTQzLDU5MTQ0LDU5MTQ1LDU5MTQ2LDU5MTQ3LDU5MTQ4LDU5MTQ5LDU5MTUwLDU5MTUxLDU5MTUyLDU5MTUzLDU5MTU0LDU5MTU1LDU5MTU2LDU5MTU3LDU5MTU4LDU5MTU5LDU5MTYwLDU5MTYxLDU5MTYyLDU5MTYzLDU5MTY0LDU5MTY1LDU5MTY2LDU5MTY3LDU5MTY4LDU5MTY5LDU5MTcwLDU5MTcxLDU5MTcyLDU5MTczLDU5MTc0LDU5MTc1LDU5MTc2LDU5MTc3LDU5MTc4LDU5MTc5LDU5MTgwLDU5MTgxLDU5MTgyLDU5MTgzLDU5MTg0LDU5MTg1LDU5MTg2LDU5MTg3LDU5MTg4LDU5MTg5LDU5MTkwLDU5MTkxLDU5MTkyLDU5MTkzLDU5MTk0LDU5MTk1LDU5MTk2LDU5MTk3LDU5MTk4LDU5MTk5LDU5MjAwLDU5MjAxLDU5MjAyLDU5MjAzLDU5MjA0LDU5MjA1LDU5MjA2LDU5MjA3LDU5MjA4LDU5MjA5LDU5MjEwLDU5MjExLDU5MjEyLDU5MjEzLDU5MjE0LDU5MjE1LDU5MjE2LDU5MjE3LDU5MjE4LDU5MjE5LDU5MjIwLDU5MjIxLDU5MjIyLDU5MjIzLDU5MjI0LDU5MjI1LDU5MjI2LDU5MjI3LDU5MjI4LDU5MjI5LDU5MjMwLDU5MjMxLDU5MjMyLDU5MjMzLDU5MjM0LDU5MjM1LDU5MjM2LDU5MjM3LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDU5Mjk2LDU5Mjk3LDU5Mjk4LDU5Mjk5LDU5MzAwLDU5MzAxLDU5MzAyLDU5MzAzLDU5MzA0LDU5MzA1LDU5MzA2LDU5MzA3LDU5MzA4LDU5MzA5LDU5MzEwLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDU5MzExLDU5MzEyLDU5MzEzLDU5MzE0LDU5MzE1LDU5MzE2LDU5MzE3LDU5MzE4LDU5MzE5LDU5MzIwLDU5MzIxLDU5MzIyLDU5MzIzLDcxNCw3MTUsNzI5LDgyMTEsODIxMyw4MjI5LDgyNDUsODQ1Myw4NDU3LDg1OTgsODU5OSw4NjAwLDg2MDEsODcyNSw4NzM1LDg3MzksODc4Niw4ODA2LDg4MDcsODg5NSw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTU4MSw5NTgyLDk1ODMsOTU4NCw5NTg1LDk1ODYsOTU4Nyw5NjAxLDk2MDIsOTYwMyw5NjA0LDk2MDUsOTYwNiw5NjA3LDk2MDgsOTYwOSw5NjEwLDk2MTEsOTYxMiw5NjEzLDk2MTQsOTYxNSw5NjE5LDk2MjAsOTYyMSw5NjYwLDk2NjEsOTY5OCw5Njk5LDk3MDAsOTcwMSw5NzM3LDg4NTMsMTIzMDYsMTIzMTcsMTIzMTgsNTkzMjQsNTkzMjUsNTkzMjYsNTkzMjcsNTkzMjgsNTkzMjksNTkzMzAsNTkzMzEsNTkzMzIsNTkzMzMsNTkzMzQsMjU3LDIyNSw0NjIsMjI0LDI3NSwyMzMsMjgzLDIzMiwyOTksMjM3LDQ2NCwyMzYsMzMzLDI0Myw0NjYsMjQyLDM2MywyNTAsNDY4LDI0OSw0NzAsNDcyLDQ3NCw0NzYsMjUyLDIzNCw1OTMsNTkzMzUsMzI0LDMyOCw1MDUsNjA5LDU5MzM3LDU5MzM4LDU5MzM5LDU5MzQwLDEyNTQ5LDEyNTUwLDEyNTUxLDEyNTUyLDEyNTUzLDEyNTU0LDEyNTU1LDEyNTU2LDEyNTU3LDEyNTU4LDEyNTU5LDEyNTYwLDEyNTYxLDEyNTYyLDEyNTYzLDEyNTY0LDEyNTY1LDEyNTY2LDEyNTY3LDEyNTY4LDEyNTY5LDEyNTcwLDEyNTcxLDEyNTcyLDEyNTczLDEyNTc0LDEyNTc1LDEyNTc2LDEyNTc3LDEyNTc4LDEyNTc5LDEyNTgwLDEyNTgxLDEyNTgyLDEyNTgzLDEyNTg0LDEyNTg1LDU5MzQxLDU5MzQyLDU5MzQzLDU5MzQ0LDU5MzQ1LDU5MzQ2LDU5MzQ3LDU5MzQ4LDU5MzQ5LDU5MzUwLDU5MzUxLDU5MzUyLDU5MzUzLDU5MzU0LDU5MzU1LDU5MzU2LDU5MzU3LDU5MzU4LDU5MzU5LDU5MzYwLDU5MzYxLDEyMzIxLDEyMzIyLDEyMzIzLDEyMzI0LDEyMzI1LDEyMzI2LDEyMzI3LDEyMzI4LDEyMzI5LDEyOTYzLDEzMTk4LDEzMTk5LDEzMjEyLDEzMjEzLDEzMjE0LDEzMjE3LDEzMjUyLDEzMjYyLDEzMjY1LDEzMjY2LDEzMjY5LDY1MDcyLDY1NTA2LDY1NTA4LDU5MzYyLDg0ODEsMTI4NDksNTkzNjMsODIwOCw1OTM2NCw1OTM2NSw1OTM2NiwxMjU0MCwxMjQ0MywxMjQ0NCwxMjU0MSwxMjU0MiwxMjI5NCwxMjQ0NSwxMjQ0Niw2NTA5Nyw2NTA5OCw2NTA5OSw2NTEwMCw2NTEwMSw2NTEwMiw2NTEwMyw2NTEwNCw2NTEwNSw2NTEwNiw2NTEwOCw2NTEwOSw2NTExMCw2NTExMSw2NTExMyw2NTExNCw2NTExNSw2NTExNiw2NTExNyw2NTExOCw2NTExOSw2NTEyMCw2NTEyMSw2NTEyMiw2NTEyMyw2NTEyNCw2NTEyNSw2NTEyNiw2NTEyOCw2NTEyOSw2NTEzMCw2NTEzMSwxMjM1MCwxMjI3MiwxMjI3MywxMjI3NCwxMjI3NSwxMjI3NiwxMjI3NywxMjI3OCwxMjI3OSwxMjI4MCwxMjI4MSwxMjI4MiwxMjI4MywxMjI5NSw1OTM4MCw1OTM4MSw1OTM4Miw1OTM4Myw1OTM4NCw1OTM4NSw1OTM4Niw1OTM4Nyw1OTM4OCw1OTM4OSw1OTM5MCw1OTM5MSw1OTM5Miw5NDcyLDk0NzMsOTQ3NCw5NDc1LDk0NzYsOTQ3Nyw5NDc4LDk0NzksOTQ4MCw5NDgxLDk0ODIsOTQ4Myw5NDg0LDk0ODUsOTQ4Niw5NDg3LDk0ODgsOTQ4OSw5NDkwLDk0OTEsOTQ5Miw5NDkzLDk0OTQsOTQ5NSw5NDk2LDk0OTcsOTQ5OCw5NDk5LDk1MDAsOTUwMSw5NTAyLDk1MDMsOTUwNCw5NTA1LDk1MDYsOTUwNyw5NTA4LDk1MDksOTUxMCw5NTExLDk1MTIsOTUxMyw5NTE0LDk1MTUsOTUxNiw5NTE3LDk1MTgsOTUxOSw5NTIwLDk1MjEsOTUyMiw5NTIzLDk1MjQsOTUyNSw5NTI2LDk1MjcsOTUyOCw5NTI5LDk1MzAsOTUzMSw5NTMyLDk1MzMsOTUzNCw5NTM1LDk1MzYsOTUzNyw5NTM4LDk1MzksOTU0MCw5NTQxLDk1NDIsOTU0Myw5NTQ0LDk1NDUsOTU0Niw5NTQ3LDU5MzkzLDU5Mzk0LDU5Mzk1LDU5Mzk2LDU5Mzk3LDU5Mzk4LDU5Mzk5LDU5NDAwLDU5NDAxLDU5NDAyLDU5NDAzLDU5NDA0LDU5NDA1LDU5NDA2LDU5NDA3LDI5NDA0LDI5NDA1LDI5NDA3LDI5NDEwLDI5NDExLDI5NDEyLDI5NDEzLDI5NDE0LDI5NDE1LDI5NDE4LDI5NDE5LDI5NDI5LDI5NDMwLDI5NDMzLDI5NDM3LDI5NDM4LDI5NDM5LDI5NDQwLDI5NDQyLDI5NDQ0LDI5NDQ1LDI5NDQ2LDI5NDQ3LDI5NDQ4LDI5NDQ5LDI5NDUxLDI5NDUyLDI5NDUzLDI5NDU1LDI5NDU2LDI5NDU3LDI5NDU4LDI5NDYwLDI5NDY0LDI5NDY1LDI5NDY2LDI5NDcxLDI5NDcyLDI5NDc1LDI5NDc2LDI5NDc4LDI5NDc5LDI5NDgwLDI5NDg1LDI5NDg3LDI5NDg4LDI5NDkwLDI5NDkxLDI5NDkzLDI5NDk0LDI5NDk4LDI5NDk5LDI5NTAwLDI5NTAxLDI5NTA0LDI5NTA1LDI5NTA2LDI5NTA3LDI5NTA4LDI5NTA5LDI5NTEwLDI5NTExLDI5NTEyLDI5NTEzLDI5NTE0LDI5NTE1LDI5NTE2LDI5NTE4LDI5NTE5LDI5NTIxLDI5NTIzLDI5NTI0LDI5NTI1LDI5NTI2LDI5NTI4LDI5NTI5LDI5NTMwLDI5NTMxLDI5NTMyLDI5NTMzLDI5NTM0LDI5NTM1LDI5NTM3LDI5NTM4LDI5NTM5LDI5NTQwLDI5NTQxLDI5NTQyLDI5NTQzLDI5NTQ0LDI5NTQ1LDI5NTQ2LDI5NTQ3LDI5NTUwLDI5NTUyLDI5NTUzLDU3MzQ0LDU3MzQ1LDU3MzQ2LDU3MzQ3LDU3MzQ4LDU3MzQ5LDU3MzUwLDU3MzUxLDU3MzUyLDU3MzUzLDU3MzU0LDU3MzU1LDU3MzU2LDU3MzU3LDU3MzU4LDU3MzU5LDU3MzYwLDU3MzYxLDU3MzYyLDU3MzYzLDU3MzY0LDU3MzY1LDU3MzY2LDU3MzY3LDU3MzY4LDU3MzY5LDU3MzcwLDU3MzcxLDU3MzcyLDU3MzczLDU3Mzc0LDU3Mzc1LDU3Mzc2LDU3Mzc3LDU3Mzc4LDU3Mzc5LDU3MzgwLDU3MzgxLDU3MzgyLDU3MzgzLDU3Mzg0LDU3Mzg1LDU3Mzg2LDU3Mzg3LDU3Mzg4LDU3Mzg5LDU3MzkwLDU3MzkxLDU3MzkyLDU3MzkzLDU3Mzk0LDU3Mzk1LDU3Mzk2LDU3Mzk3LDU3Mzk4LDU3Mzk5LDU3NDAwLDU3NDAxLDU3NDAyLDU3NDAzLDU3NDA0LDU3NDA1LDU3NDA2LDU3NDA3LDU3NDA4LDU3NDA5LDU3NDEwLDU3NDExLDU3NDEyLDU3NDEzLDU3NDE0LDU3NDE1LDU3NDE2LDU3NDE3LDU3NDE4LDU3NDE5LDU3NDIwLDU3NDIxLDU3NDIyLDU3NDIzLDU3NDI0LDU3NDI1LDU3NDI2LDU3NDI3LDU3NDI4LDU3NDI5LDU3NDMwLDU3NDMxLDU3NDMyLDU3NDMzLDU3NDM0LDU3NDM1LDU3NDM2LDU3NDM3LDI5NTU0LDI5NTU1LDI5NTU2LDI5NTU3LDI5NTU4LDI5NTU5LDI5NTYwLDI5NTYxLDI5NTYyLDI5NTYzLDI5NTY0LDI5NTY1LDI5NTY3LDI5NTY4LDI5NTY5LDI5NTcwLDI5NTcxLDI5NTczLDI5NTc0LDI5NTc2LDI5NTc4LDI5NTgwLDI5NTgxLDI5NTgzLDI5NTg0LDI5NTg2LDI5NTg3LDI5NTg4LDI5NTg5LDI5NTkxLDI5NTkyLDI5NTkzLDI5NTk0LDI5NTk2LDI5NTk3LDI5NTk4LDI5NjAwLDI5NjAxLDI5NjAzLDI5NjA0LDI5NjA1LDI5NjA2LDI5NjA3LDI5NjA4LDI5NjEwLDI5NjEyLDI5NjEzLDI5NjE3LDI5NjIwLDI5NjIxLDI5NjIyLDI5NjI0LDI5NjI1LDI5NjI4LDI5NjI5LDI5NjMwLDI5NjMxLDI5NjMzLDI5NjM1LDI5NjM2LDI5NjM3LDI5NjM4LDI5NjM5LDI5NjQzLDI5NjQ0LDI5NjQ2LDI5NjUwLDI5NjUxLDI5NjUyLDI5NjUzLDI5NjU0LDI5NjU1LDI5NjU2LDI5NjU4LDI5NjU5LDI5NjYwLDI5NjYxLDI5NjYzLDI5NjY1LDI5NjY2LDI5NjY3LDI5NjY4LDI5NjcwLDI5NjcyLDI5Njc0LDI5Njc1LDI5Njc2LDI5Njc4LDI5Njc5LDI5NjgwLDI5NjgxLDI5NjgzLDI5Njg0LDI5Njg1LDI5Njg2LDI5Njg3LDU3NDM4LDU3NDM5LDU3NDQwLDU3NDQxLDU3NDQyLDU3NDQzLDU3NDQ0LDU3NDQ1LDU3NDQ2LDU3NDQ3LDU3NDQ4LDU3NDQ5LDU3NDUwLDU3NDUxLDU3NDUyLDU3NDUzLDU3NDU0LDU3NDU1LDU3NDU2LDU3NDU3LDU3NDU4LDU3NDU5LDU3NDYwLDU3NDYxLDU3NDYyLDU3NDYzLDU3NDY0LDU3NDY1LDU3NDY2LDU3NDY3LDU3NDY4LDU3NDY5LDU3NDcwLDU3NDcxLDU3NDcyLDU3NDczLDU3NDc0LDU3NDc1LDU3NDc2LDU3NDc3LDU3NDc4LDU3NDc5LDU3NDgwLDU3NDgxLDU3NDgyLDU3NDgzLDU3NDg0LDU3NDg1LDU3NDg2LDU3NDg3LDU3NDg4LDU3NDg5LDU3NDkwLDU3NDkxLDU3NDkyLDU3NDkzLDU3NDk0LDU3NDk1LDU3NDk2LDU3NDk3LDU3NDk4LDU3NDk5LDU3NTAwLDU3NTAxLDU3NTAyLDU3NTAzLDU3NTA0LDU3NTA1LDU3NTA2LDU3NTA3LDU3NTA4LDU3NTA5LDU3NTEwLDU3NTExLDU3NTEyLDU3NTEzLDU3NTE0LDU3NTE1LDU3NTE2LDU3NTE3LDU3NTE4LDU3NTE5LDU3NTIwLDU3NTIxLDU3NTIyLDU3NTIzLDU3NTI0LDU3NTI1LDU3NTI2LDU3NTI3LDU3NTI4LDU3NTI5LDU3NTMwLDU3NTMxLDI5Njg4LDI5Njg5LDI5NjkwLDI5NjkxLDI5NjkyLDI5NjkzLDI5Njk0LDI5Njk1LDI5Njk2LDI5Njk3LDI5Njk4LDI5NzAwLDI5NzAzLDI5NzA0LDI5NzA3LDI5NzA4LDI5NzA5LDI5NzEwLDI5NzEzLDI5NzE0LDI5NzE1LDI5NzE2LDI5NzE3LDI5NzE4LDI5NzE5LDI5NzIwLDI5NzIxLDI5NzI0LDI5NzI1LDI5NzI2LDI5NzI3LDI5NzI4LDI5NzI5LDI5NzMxLDI5NzMyLDI5NzM1LDI5NzM3LDI5NzM5LDI5NzQxLDI5NzQzLDI5NzQ1LDI5NzQ2LDI5NzUxLDI5NzUyLDI5NzUzLDI5NzU0LDI5NzU1LDI5NzU3LDI5NzU4LDI5NzU5LDI5NzYwLDI5NzYyLDI5NzYzLDI5NzY0LDI5NzY1LDI5NzY2LDI5NzY3LDI5NzY4LDI5NzY5LDI5NzcwLDI5NzcxLDI5NzcyLDI5NzczLDI5Nzc0LDI5Nzc1LDI5Nzc2LDI5Nzc3LDI5Nzc4LDI5Nzc5LDI5NzgwLDI5NzgyLDI5Nzg0LDI5Nzg5LDI5NzkyLDI5NzkzLDI5Nzk0LDI5Nzk1LDI5Nzk2LDI5Nzk3LDI5Nzk4LDI5Nzk5LDI5ODAwLDI5ODAxLDI5ODAyLDI5ODAzLDI5ODA0LDI5ODA2LDI5ODA3LDI5ODA5LDI5ODEwLDI5ODExLDI5ODEyLDI5ODEzLDI5ODE2LDI5ODE3LDI5ODE4LDU3NTMyLDU3NTMzLDU3NTM0LDU3NTM1LDU3NTM2LDU3NTM3LDU3NTM4LDU3NTM5LDU3NTQwLDU3NTQxLDU3NTQyLDU3NTQzLDU3NTQ0LDU3NTQ1LDU3NTQ2LDU3NTQ3LDU3NTQ4LDU3NTQ5LDU3NTUwLDU3NTUxLDU3NTUyLDU3NTUzLDU3NTU0LDU3NTU1LDU3NTU2LDU3NTU3LDU3NTU4LDU3NTU5LDU3NTYwLDU3NTYxLDU3NTYyLDU3NTYzLDU3NTY0LDU3NTY1LDU3NTY2LDU3NTY3LDU3NTY4LDU3NTY5LDU3NTcwLDU3NTcxLDU3NTcyLDU3NTczLDU3NTc0LDU3NTc1LDU3NTc2LDU3NTc3LDU3NTc4LDU3NTc5LDU3NTgwLDU3NTgxLDU3NTgyLDU3NTgzLDU3NTg0LDU3NTg1LDU3NTg2LDU3NTg3LDU3NTg4LDU3NTg5LDU3NTkwLDU3NTkxLDU3NTkyLDU3NTkzLDU3NTk0LDU3NTk1LDU3NTk2LDU3NTk3LDU3NTk4LDU3NTk5LDU3NjAwLDU3NjAxLDU3NjAyLDU3NjAzLDU3NjA0LDU3NjA1LDU3NjA2LDU3NjA3LDU3NjA4LDU3NjA5LDU3NjEwLDU3NjExLDU3NjEyLDU3NjEzLDU3NjE0LDU3NjE1LDU3NjE2LDU3NjE3LDU3NjE4LDU3NjE5LDU3NjIwLDU3NjIxLDU3NjIyLDU3NjIzLDU3NjI0LDU3NjI1LDI5ODE5LDI5ODIwLDI5ODIxLDI5ODIzLDI5ODI2LDI5ODI4LDI5ODI5LDI5ODMwLDI5ODMyLDI5ODMzLDI5ODM0LDI5ODM2LDI5ODM3LDI5ODM5LDI5ODQxLDI5ODQyLDI5ODQzLDI5ODQ0LDI5ODQ1LDI5ODQ2LDI5ODQ3LDI5ODQ4LDI5ODQ5LDI5ODUwLDI5ODUxLDI5ODUzLDI5ODU1LDI5ODU2LDI5ODU3LDI5ODU4LDI5ODU5LDI5ODYwLDI5ODYxLDI5ODYyLDI5ODY2LDI5ODY3LDI5ODY4LDI5ODY5LDI5ODcwLDI5ODcxLDI5ODcyLDI5ODczLDI5ODc0LDI5ODc1LDI5ODc2LDI5ODc3LDI5ODc4LDI5ODc5LDI5ODgwLDI5ODgxLDI5ODgzLDI5ODg0LDI5ODg1LDI5ODg2LDI5ODg3LDI5ODg4LDI5ODg5LDI5ODkwLDI5ODkxLDI5ODkyLDI5ODkzLDI5ODk0LDI5ODk1LDI5ODk2LDI5ODk3LDI5ODk4LDI5ODk5LDI5OTAwLDI5OTAxLDI5OTAyLDI5OTAzLDI5OTA0LDI5OTA1LDI5OTA3LDI5OTA4LDI5OTA5LDI5OTEwLDI5OTExLDI5OTEyLDI5OTEzLDI5OTE0LDI5OTE1LDI5OTE3LDI5OTE5LDI5OTIxLDI5OTI1LDI5OTI3LDI5OTI4LDI5OTI5LDI5OTMwLDI5OTMxLDI5OTMyLDI5OTMzLDI5OTM2LDI5OTM3LDI5OTM4LDU3NjI2LDU3NjI3LDU3NjI4LDU3NjI5LDU3NjMwLDU3NjMxLDU3NjMyLDU3NjMzLDU3NjM0LDU3NjM1LDU3NjM2LDU3NjM3LDU3NjM4LDU3NjM5LDU3NjQwLDU3NjQxLDU3NjQyLDU3NjQzLDU3NjQ0LDU3NjQ1LDU3NjQ2LDU3NjQ3LDU3NjQ4LDU3NjQ5LDU3NjUwLDU3NjUxLDU3NjUyLDU3NjUzLDU3NjU0LDU3NjU1LDU3NjU2LDU3NjU3LDU3NjU4LDU3NjU5LDU3NjYwLDU3NjYxLDU3NjYyLDU3NjYzLDU3NjY0LDU3NjY1LDU3NjY2LDU3NjY3LDU3NjY4LDU3NjY5LDU3NjcwLDU3NjcxLDU3NjcyLDU3NjczLDU3Njc0LDU3Njc1LDU3Njc2LDU3Njc3LDU3Njc4LDU3Njc5LDU3NjgwLDU3NjgxLDU3NjgyLDU3NjgzLDU3Njg0LDU3Njg1LDU3Njg2LDU3Njg3LDU3Njg4LDU3Njg5LDU3NjkwLDU3NjkxLDU3NjkyLDU3NjkzLDU3Njk0LDU3Njk1LDU3Njk2LDU3Njk3LDU3Njk4LDU3Njk5LDU3NzAwLDU3NzAxLDU3NzAyLDU3NzAzLDU3NzA0LDU3NzA1LDU3NzA2LDU3NzA3LDU3NzA4LDU3NzA5LDU3NzEwLDU3NzExLDU3NzEyLDU3NzEzLDU3NzE0LDU3NzE1LDU3NzE2LDU3NzE3LDU3NzE4LDU3NzE5LDI5OTM5LDI5OTQxLDI5OTQ0LDI5OTQ1LDI5OTQ2LDI5OTQ3LDI5OTQ4LDI5OTQ5LDI5OTUwLDI5OTUyLDI5OTUzLDI5OTU0LDI5OTU1LDI5OTU3LDI5OTU4LDI5OTU5LDI5OTYwLDI5OTYxLDI5OTYyLDI5OTYzLDI5OTY0LDI5OTY2LDI5OTY4LDI5OTcwLDI5OTcyLDI5OTczLDI5OTc0LDI5OTc1LDI5OTc5LDI5OTgxLDI5OTgyLDI5OTg0LDI5OTg1LDI5OTg2LDI5OTg3LDI5OTg4LDI5OTkwLDI5OTkxLDI5OTk0LDI5OTk4LDMwMDA0LDMwMDA2LDMwMDA5LDMwMDEyLDMwMDEzLDMwMDE1LDMwMDE3LDMwMDE4LDMwMDE5LDMwMDIwLDMwMDIyLDMwMDIzLDMwMDI1LDMwMDI2LDMwMDI5LDMwMDMyLDMwMDMzLDMwMDM0LDMwMDM1LDMwMDM3LDMwMDM4LDMwMDM5LDMwMDQwLDMwMDQ1LDMwMDQ2LDMwMDQ3LDMwMDQ4LDMwMDQ5LDMwMDUwLDMwMDUxLDMwMDUyLDMwMDU1LDMwMDU2LDMwMDU3LDMwMDU5LDMwMDYwLDMwMDYxLDMwMDYyLDMwMDYzLDMwMDY0LDMwMDY1LDMwMDY3LDMwMDY5LDMwMDcwLDMwMDcxLDMwMDc0LDMwMDc1LDMwMDc2LDMwMDc3LDMwMDc4LDMwMDgwLDMwMDgxLDMwMDgyLDMwMDg0LDMwMDg1LDMwMDg3LDU3NzIwLDU3NzIxLDU3NzIyLDU3NzIzLDU3NzI0LDU3NzI1LDU3NzI2LDU3NzI3LDU3NzI4LDU3NzI5LDU3NzMwLDU3NzMxLDU3NzMyLDU3NzMzLDU3NzM0LDU3NzM1LDU3NzM2LDU3NzM3LDU3NzM4LDU3NzM5LDU3NzQwLDU3NzQxLDU3NzQyLDU3NzQzLDU3NzQ0LDU3NzQ1LDU3NzQ2LDU3NzQ3LDU3NzQ4LDU3NzQ5LDU3NzUwLDU3NzUxLDU3NzUyLDU3NzUzLDU3NzU0LDU3NzU1LDU3NzU2LDU3NzU3LDU3NzU4LDU3NzU5LDU3NzYwLDU3NzYxLDU3NzYyLDU3NzYzLDU3NzY0LDU3NzY1LDU3NzY2LDU3NzY3LDU3NzY4LDU3NzY5LDU3NzcwLDU3NzcxLDU3NzcyLDU3NzczLDU3Nzc0LDU3Nzc1LDU3Nzc2LDU3Nzc3LDU3Nzc4LDU3Nzc5LDU3NzgwLDU3NzgxLDU3NzgyLDU3NzgzLDU3Nzg0LDU3Nzg1LDU3Nzg2LDU3Nzg3LDU3Nzg4LDU3Nzg5LDU3NzkwLDU3NzkxLDU3NzkyLDU3NzkzLDU3Nzk0LDU3Nzk1LDU3Nzk2LDU3Nzk3LDU3Nzk4LDU3Nzk5LDU3ODAwLDU3ODAxLDU3ODAyLDU3ODAzLDU3ODA0LDU3ODA1LDU3ODA2LDU3ODA3LDU3ODA4LDU3ODA5LDU3ODEwLDU3ODExLDU3ODEyLDU3ODEzLDMwMDg4LDMwMDg5LDMwMDkwLDMwMDkyLDMwMDkzLDMwMDk0LDMwMDk2LDMwMDk5LDMwMTAxLDMwMTA0LDMwMTA3LDMwMTA4LDMwMTEwLDMwMTE0LDMwMTE4LDMwMTE5LDMwMTIwLDMwMTIxLDMwMTIyLDMwMTI1LDMwMTM0LDMwMTM1LDMwMTM4LDMwMTM5LDMwMTQzLDMwMTQ0LDMwMTQ1LDMwMTUwLDMwMTU1LDMwMTU2LDMwMTU4LDMwMTU5LDMwMTYwLDMwMTYxLDMwMTYzLDMwMTY3LDMwMTY5LDMwMTcwLDMwMTcyLDMwMTczLDMwMTc1LDMwMTc2LDMwMTc3LDMwMTgxLDMwMTg1LDMwMTg4LDMwMTg5LDMwMTkwLDMwMTkxLDMwMTk0LDMwMTk1LDMwMTk3LDMwMTk4LDMwMTk5LDMwMjAwLDMwMjAyLDMwMjAzLDMwMjA1LDMwMjA2LDMwMjEwLDMwMjEyLDMwMjE0LDMwMjE1LDMwMjE2LDMwMjE3LDMwMjE5LDMwMjIxLDMwMjIyLDMwMjIzLDMwMjI1LDMwMjI2LDMwMjI3LDMwMjI4LDMwMjMwLDMwMjM0LDMwMjM2LDMwMjM3LDMwMjM4LDMwMjQxLDMwMjQzLDMwMjQ3LDMwMjQ4LDMwMjUyLDMwMjU0LDMwMjU1LDMwMjU3LDMwMjU4LDMwMjYyLDMwMjYzLDMwMjY1LDMwMjY2LDMwMjY3LDMwMjY5LDMwMjczLDMwMjc0LDMwMjc2LDU3ODE0LDU3ODE1LDU3ODE2LDU3ODE3LDU3ODE4LDU3ODE5LDU3ODIwLDU3ODIxLDU3ODIyLDU3ODIzLDU3ODI0LDU3ODI1LDU3ODI2LDU3ODI3LDU3ODI4LDU3ODI5LDU3ODMwLDU3ODMxLDU3ODMyLDU3ODMzLDU3ODM0LDU3ODM1LDU3ODM2LDU3ODM3LDU3ODM4LDU3ODM5LDU3ODQwLDU3ODQxLDU3ODQyLDU3ODQzLDU3ODQ0LDU3ODQ1LDU3ODQ2LDU3ODQ3LDU3ODQ4LDU3ODQ5LDU3ODUwLDU3ODUxLDU3ODUyLDU3ODUzLDU3ODU0LDU3ODU1LDU3ODU2LDU3ODU3LDU3ODU4LDU3ODU5LDU3ODYwLDU3ODYxLDU3ODYyLDU3ODYzLDU3ODY0LDU3ODY1LDU3ODY2LDU3ODY3LDU3ODY4LDU3ODY5LDU3ODcwLDU3ODcxLDU3ODcyLDU3ODczLDU3ODc0LDU3ODc1LDU3ODc2LDU3ODc3LDU3ODc4LDU3ODc5LDU3ODgwLDU3ODgxLDU3ODgyLDU3ODgzLDU3ODg0LDU3ODg1LDU3ODg2LDU3ODg3LDU3ODg4LDU3ODg5LDU3ODkwLDU3ODkxLDU3ODkyLDU3ODkzLDU3ODk0LDU3ODk1LDU3ODk2LDU3ODk3LDU3ODk4LDU3ODk5LDU3OTAwLDU3OTAxLDU3OTAyLDU3OTAzLDU3OTA0LDU3OTA1LDU3OTA2LDU3OTA3LDMwMjc3LDMwMjc4LDMwMjc5LDMwMjgwLDMwMjgxLDMwMjgyLDMwMjgzLDMwMjg2LDMwMjg3LDMwMjg4LDMwMjg5LDMwMjkwLDMwMjkxLDMwMjkzLDMwMjk1LDMwMjk2LDMwMjk3LDMwMjk4LDMwMjk5LDMwMzAxLDMwMzAzLDMwMzA0LDMwMzA1LDMwMzA2LDMwMzA4LDMwMzA5LDMwMzEwLDMwMzExLDMwMzEyLDMwMzEzLDMwMzE0LDMwMzE2LDMwMzE3LDMwMzE4LDMwMzIwLDMwMzIxLDMwMzIyLDMwMzIzLDMwMzI0LDMwMzI1LDMwMzI2LDMwMzI3LDMwMzI5LDMwMzMwLDMwMzMyLDMwMzM1LDMwMzM2LDMwMzM3LDMwMzM5LDMwMzQxLDMwMzQ1LDMwMzQ2LDMwMzQ4LDMwMzQ5LDMwMzUxLDMwMzUyLDMwMzU0LDMwMzU2LDMwMzU3LDMwMzU5LDMwMzYwLDMwMzYyLDMwMzYzLDMwMzY0LDMwMzY1LDMwMzY2LDMwMzY3LDMwMzY4LDMwMzY5LDMwMzcwLDMwMzcxLDMwMzczLDMwMzc0LDMwMzc1LDMwMzc2LDMwMzc3LDMwMzc4LDMwMzc5LDMwMzgwLDMwMzgxLDMwMzgzLDMwMzg0LDMwMzg3LDMwMzg5LDMwMzkwLDMwMzkxLDMwMzkyLDMwMzkzLDMwMzk0LDMwMzk1LDMwMzk2LDMwMzk3LDMwMzk4LDMwNDAwLDMwNDAxLDMwNDAzLDIxODM0LDM4NDYzLDIyNDY3LDI1Mzg0LDIxNzEwLDIxNzY5LDIxNjk2LDMwMzUzLDMwMjg0LDM0MTA4LDMwNzAyLDMzNDA2LDMwODYxLDI5MjMzLDM4NTUyLDM4Nzk3LDI3Njg4LDIzNDMzLDIwNDc0LDI1MzUzLDI2MjYzLDIzNzM2LDMzMDE4LDI2Njk2LDMyOTQyLDI2MTE0LDMwNDE0LDIwOTg1LDI1OTQyLDI5MTAwLDMyNzUzLDM0OTQ4LDIwNjU4LDIyODg1LDI1MDM0LDI4NTk1LDMzNDUzLDI1NDIwLDI1MTcwLDIxNDg1LDIxNTQzLDMxNDk0LDIwODQzLDMwMTE2LDI0MDUyLDI1MzAwLDM2Mjk5LDM4Nzc0LDI1MjI2LDMyNzkzLDIyMzY1LDM4NzEyLDMyNjEwLDI5MjQwLDMwMzMzLDI2NTc1LDMwMzM0LDI1NjcwLDIwMzM2LDM2MTMzLDI1MzA4LDMxMjU1LDI2MDAxLDI5Njc3LDI1NjQ0LDI1MjAzLDMzMzI0LDM5MDQxLDI2NDk1LDI5MjU2LDI1MTk4LDI1MjkyLDIwMjc2LDI5OTIzLDIxMzIyLDIxMTUwLDMyNDU4LDM3MDMwLDI0MTEwLDI2NzU4LDI3MDM2LDMzMTUyLDMyNDY1LDI2ODM0LDMwOTE3LDM0NDQ0LDM4MjI1LDIwNjIxLDM1ODc2LDMzNTAyLDMyOTkwLDIxMjUzLDM1MDkwLDIxMDkzLDMwNDA0LDMwNDA3LDMwNDA5LDMwNDExLDMwNDEyLDMwNDE5LDMwNDIxLDMwNDI1LDMwNDI2LDMwNDI4LDMwNDI5LDMwNDMwLDMwNDMyLDMwNDMzLDMwNDM0LDMwNDM1LDMwNDM2LDMwNDM4LDMwNDM5LDMwNDQwLDMwNDQxLDMwNDQyLDMwNDQzLDMwNDQ0LDMwNDQ1LDMwNDQ4LDMwNDUxLDMwNDUzLDMwNDU0LDMwNDU1LDMwNDU4LDMwNDU5LDMwNDYxLDMwNDYzLDMwNDY0LDMwNDY2LDMwNDY3LDMwNDY5LDMwNDcwLDMwNDc0LDMwNDc2LDMwNDc4LDMwNDc5LDMwNDgwLDMwNDgxLDMwNDgyLDMwNDgzLDMwNDg0LDMwNDg1LDMwNDg2LDMwNDg3LDMwNDg4LDMwNDkxLDMwNDkyLDMwNDkzLDMwNDk0LDMwNDk3LDMwNDk5LDMwNTAwLDMwNTAxLDMwNTAzLDMwNTA2LDMwNTA3LDMwNTA4LDMwNTEwLDMwNTEyLDMwNTEzLDMwNTE0LDMwNTE1LDMwNTE2LDMwNTIxLDMwNTIzLDMwNTI1LDMwNTI2LDMwNTI3LDMwNTMwLDMwNTMyLDMwNTMzLDMwNTM0LDMwNTM2LDMwNTM3LDMwNTM4LDMwNTM5LDMwNTQwLDMwNTQxLDMwNTQyLDMwNTQzLDMwNTQ2LDMwNTQ3LDMwNTQ4LDMwNTQ5LDMwNTUwLDMwNTUxLDMwNTUyLDMwNTUzLDMwNTU2LDM0MTgwLDM4NjQ5LDIwNDQ1LDIyNTYxLDM5MjgxLDIzNDUzLDI1MjY1LDI1MjUzLDI2MjkyLDM1OTYxLDQwMDc3LDI5MTkwLDI2NDc5LDMwODY1LDI0NzU0LDIxMzI5LDIxMjcxLDM2NzQ0LDMyOTcyLDM2MTI1LDM4MDQ5LDIwNDkzLDI5Mzg0LDIyNzkxLDI0ODExLDI4OTUzLDM0OTg3LDIyODY4LDMzNTE5LDI2NDEyLDMxNTI4LDIzODQ5LDMyNTAzLDI5OTk3LDI3ODkzLDM2NDU0LDM2ODU2LDM2OTI0LDQwNzYzLDI3NjA0LDM3MTQ1LDMxNTA4LDI0NDQ0LDMwODg3LDM0MDA2LDM0MTA5LDI3NjA1LDI3NjA5LDI3NjA2LDI0MDY1LDI0MTk5LDMwMjAxLDM4MzgxLDI1OTQ5LDI0MzMwLDI0NTE3LDM2NzY3LDIyNzIxLDMzMjE4LDM2OTkxLDM4NDkxLDM4ODI5LDM2NzkzLDMyNTM0LDM2MTQwLDI1MTUzLDIwNDE1LDIxNDY0LDIxMzQyLDM2Nzc2LDM2Nzc3LDM2Nzc5LDM2OTQxLDI2NjMxLDI0NDI2LDMzMTc2LDM0OTIwLDQwMTUwLDI0OTcxLDIxMDM1LDMwMjUwLDI0NDI4LDI1OTk2LDI4NjI2LDI4MzkyLDIzNDg2LDI1NjcyLDIwODUzLDIwOTEyLDI2NTY0LDE5OTkzLDMxMTc3LDM5MjkyLDI4ODUxLDMwNTU3LDMwNTU4LDMwNTU5LDMwNTYwLDMwNTY0LDMwNTY3LDMwNTY5LDMwNTcwLDMwNTczLDMwNTc0LDMwNTc1LDMwNTc2LDMwNTc3LDMwNTc4LDMwNTc5LDMwNTgwLDMwNTgxLDMwNTgyLDMwNTgzLDMwNTg0LDMwNTg2LDMwNTg3LDMwNTg4LDMwNTkzLDMwNTk0LDMwNTk1LDMwNTk4LDMwNTk5LDMwNjAwLDMwNjAxLDMwNjAyLDMwNjAzLDMwNjA3LDMwNjA4LDMwNjExLDMwNjEyLDMwNjEzLDMwNjE0LDMwNjE1LDMwNjE2LDMwNjE3LDMwNjE4LDMwNjE5LDMwNjIwLDMwNjIxLDMwNjIyLDMwNjI1LDMwNjI3LDMwNjI4LDMwNjMwLDMwNjMyLDMwNjM1LDMwNjM3LDMwNjM4LDMwNjM5LDMwNjQxLDMwNjQyLDMwNjQ0LDMwNjQ2LDMwNjQ3LDMwNjQ4LDMwNjQ5LDMwNjUwLDMwNjUyLDMwNjU0LDMwNjU2LDMwNjU3LDMwNjU4LDMwNjU5LDMwNjYwLDMwNjYxLDMwNjYyLDMwNjYzLDMwNjY0LDMwNjY1LDMwNjY2LDMwNjY3LDMwNjY4LDMwNjcwLDMwNjcxLDMwNjcyLDMwNjczLDMwNjc0LDMwNjc1LDMwNjc2LDMwNjc3LDMwNjc4LDMwNjgwLDMwNjgxLDMwNjgyLDMwNjg1LDMwNjg2LDMwNjg3LDMwNjg4LDMwNjg5LDMwNjkyLDMwMTQ5LDI0MTgyLDI5NjI3LDMzNzYwLDI1NzczLDI1MzIwLDM4MDY5LDI3ODc0LDIxMzM4LDIxMTg3LDI1NjE1LDM4MDgyLDMxNjM2LDIwMjcxLDI0MDkxLDMzMzM0LDMzMDQ2LDMzMTYyLDI4MTk2LDI3ODUwLDM5NTM5LDI1NDI5LDIxMzQwLDIxNzU0LDM0OTE3LDIyNDk2LDE5OTgxLDI0MDY3LDI3NDkzLDMxODA3LDM3MDk2LDI0NTk4LDI1ODMwLDI5NDY4LDM1MDA5LDI2NDQ4LDI1MTY1LDM2MTMwLDMwNTcyLDM2MzkzLDM3MzE5LDI0NDI1LDMzNzU2LDM0MDgxLDM5MTg0LDIxNDQyLDM0NDUzLDI3NTMxLDI0ODEzLDI0ODA4LDI4Nzk5LDMzNDg1LDMzMzI5LDIwMTc5LDI3ODE1LDM0MjU1LDI1ODA1LDMxOTYxLDI3MTMzLDI2MzYxLDMzNjA5LDIxMzk3LDMxNTc0LDIwMzkxLDIwODc2LDI3OTc5LDIzNjE4LDM2NDYxLDI1NTU0LDIxNDQ5LDMzNTgwLDMzNTkwLDI2NTk3LDMwOTAwLDI1NjYxLDIzNTE5LDIzNzAwLDI0MDQ2LDM1ODE1LDI1Mjg2LDI2NjEyLDM1OTYyLDI1NjAwLDI1NTMwLDM0NjMzLDM5MzA3LDM1ODYzLDMyNTQ0LDM4MTMwLDIwMTM1LDM4NDE2LDM5MDc2LDI2MTI0LDI5NDYyLDMwNjk0LDMwNjk2LDMwNjk4LDMwNzAzLDMwNzA0LDMwNzA1LDMwNzA2LDMwNzA4LDMwNzA5LDMwNzExLDMwNzEzLDMwNzE0LDMwNzE1LDMwNzE2LDMwNzIzLDMwNzI0LDMwNzI1LDMwNzI2LDMwNzI3LDMwNzI4LDMwNzMwLDMwNzMxLDMwNzM0LDMwNzM1LDMwNzM2LDMwNzM5LDMwNzQxLDMwNzQ1LDMwNzQ3LDMwNzUwLDMwNzUyLDMwNzUzLDMwNzU0LDMwNzU2LDMwNzYwLDMwNzYyLDMwNzYzLDMwNzY2LDMwNzY3LDMwNzY5LDMwNzcwLDMwNzcxLDMwNzczLDMwNzc0LDMwNzgxLDMwNzgzLDMwNzg1LDMwNzg2LDMwNzg3LDMwNzg4LDMwNzkwLDMwNzkyLDMwNzkzLDMwNzk0LDMwNzk1LDMwNzk3LDMwNzk5LDMwODAxLDMwODAzLDMwODA0LDMwODA4LDMwODA5LDMwODEwLDMwODExLDMwODEyLDMwODE0LDMwODE1LDMwODE2LDMwODE3LDMwODE4LDMwODE5LDMwODIwLDMwODIxLDMwODIyLDMwODIzLDMwODI0LDMwODI1LDMwODMxLDMwODMyLDMwODMzLDMwODM0LDMwODM1LDMwODM2LDMwODM3LDMwODM4LDMwODQwLDMwODQxLDMwODQyLDMwODQzLDMwODQ1LDMwODQ2LDMwODQ3LDMwODQ4LDMwODQ5LDMwODUwLDMwODUxLDIyMzMwLDIzNTgxLDI0MTIwLDM4MjcxLDIwNjA3LDMyOTI4LDIxMzc4LDI1OTUwLDMwMDIxLDIxODA5LDIwNTEzLDM2MjI5LDI1MjIwLDM4MDQ2LDI2Mzk3LDIyMDY2LDI4NTI2LDI0MDM0LDIxNTU3LDI4ODE4LDM2NzEwLDI1MTk5LDI1NzY0LDI1NTA3LDI0NDQzLDI4NTUyLDM3MTA4LDMzMjUxLDM2Nzg0LDIzNTc2LDI2MjE2LDI0NTYxLDI3Nzg1LDM4NDcyLDM2MjI1LDM0OTI0LDI1NzQ1LDMxMjE2LDIyNDc4LDI3MjI1LDI1MTA0LDIxNTc2LDIwMDU2LDMxMjQzLDI0ODA5LDI4NTQ4LDM1ODAyLDI1MjE1LDM2ODk0LDM5NTYzLDMxMjA0LDIxNTA3LDMwMTk2LDI1MzQ1LDIxMjczLDI3NzQ0LDM2ODMxLDI0MzQ3LDM5NTM2LDMyODI3LDQwODMxLDIwMzYwLDIzNjEwLDM2MTk2LDMyNzA5LDI2MDIxLDI4ODYxLDIwODA1LDIwOTE0LDM0NDExLDIzODE1LDIzNDU2LDI1Mjc3LDM3MjI4LDMwMDY4LDM2MzY0LDMxMjY0LDI0ODMzLDMxNjA5LDIwMTY3LDMyNTA0LDMwNTk3LDE5OTg1LDMzMjYxLDIxMDIxLDIwOTg2LDI3MjQ5LDIxNDE2LDM2NDg3LDM4MTQ4LDM4NjA3LDI4MzUzLDM4NTAwLDI2OTcwLDMwODUyLDMwODUzLDMwODU0LDMwODU2LDMwODU4LDMwODU5LDMwODYzLDMwODY0LDMwODY2LDMwODY4LDMwODY5LDMwODcwLDMwODczLDMwODc3LDMwODc4LDMwODgwLDMwODgyLDMwODg0LDMwODg2LDMwODg4LDMwODg5LDMwODkwLDMwODkxLDMwODkyLDMwODkzLDMwODk0LDMwODk1LDMwOTAxLDMwOTAyLDMwOTAzLDMwOTA0LDMwOTA2LDMwOTA3LDMwOTA4LDMwOTA5LDMwOTExLDMwOTEyLDMwOTE0LDMwOTE1LDMwOTE2LDMwOTE4LDMwOTE5LDMwOTIwLDMwOTI0LDMwOTI1LDMwOTI2LDMwOTI3LDMwOTI5LDMwOTMwLDMwOTMxLDMwOTM0LDMwOTM1LDMwOTM2LDMwOTM4LDMwOTM5LDMwOTQwLDMwOTQxLDMwOTQyLDMwOTQzLDMwOTQ0LDMwOTQ1LDMwOTQ2LDMwOTQ3LDMwOTQ4LDMwOTQ5LDMwOTUwLDMwOTUxLDMwOTUzLDMwOTU0LDMwOTU1LDMwOTU3LDMwOTU4LDMwOTU5LDMwOTYwLDMwOTYxLDMwOTYzLDMwOTY1LDMwOTY2LDMwOTY4LDMwOTY5LDMwOTcxLDMwOTcyLDMwOTczLDMwOTc0LDMwOTc1LDMwOTc2LDMwOTc4LDMwOTc5LDMwOTgwLDMwOTgyLDMwOTgzLDMwOTg0LDMwOTg1LDMwOTg2LDMwOTg3LDMwOTg4LDMwNzg0LDIwNjQ4LDMwNjc5LDI1NjE2LDM1MzAyLDIyNzg4LDI1NTcxLDI0MDI5LDMxMzU5LDI2OTQxLDIwMjU2LDMzMzM3LDIxOTEyLDIwMDE4LDMwMTI2LDMxMzgzLDI0MTYyLDI0MjAyLDM4MzgzLDIxMDE5LDIxNTYxLDI4ODEwLDI1NDYyLDM4MTgwLDIyNDAyLDI2MTQ5LDI2OTQzLDM3MjU1LDIxNzY3LDI4MTQ3LDMyNDMxLDM0ODUwLDI1MTM5LDMyNDk2LDMwMTMzLDMzNTc2LDMwOTEzLDM4NjA0LDM2NzY2LDI0OTA0LDI5OTQzLDM1Nzg5LDI3NDkyLDIxMDUwLDM2MTc2LDI3NDI1LDMyODc0LDMzOTA1LDIyMjU3LDIxMjU0LDIwMTc0LDE5OTk1LDIwOTQ1LDMxODk1LDM3MjU5LDMxNzUxLDIwNDE5LDM2NDc5LDMxNzEzLDMxMzg4LDI1NzAzLDIzODI4LDIwNjUyLDMzMDMwLDMwMjA5LDMxOTI5LDI4MTQwLDMyNzM2LDI2NDQ5LDIzMzg0LDIzNTQ0LDMwOTIzLDI1Nzc0LDI1NjE5LDI1NTE0LDI1Mzg3LDM4MTY5LDI1NjQ1LDM2Nzk4LDMxNTcyLDMwMjQ5LDI1MTcxLDIyODIzLDIxNTc0LDI3NTEzLDIwNjQzLDI1MTQwLDI0MTAyLDI3NTI2LDIwMTk1LDM2MTUxLDM0OTU1LDI0NDUzLDM2OTEwLDMwOTg5LDMwOTkwLDMwOTkxLDMwOTkyLDMwOTkzLDMwOTk0LDMwOTk2LDMwOTk3LDMwOTk4LDMwOTk5LDMxMDAwLDMxMDAxLDMxMDAyLDMxMDAzLDMxMDA0LDMxMDA1LDMxMDA3LDMxMDA4LDMxMDA5LDMxMDEwLDMxMDExLDMxMDEzLDMxMDE0LDMxMDE1LDMxMDE2LDMxMDE3LDMxMDE4LDMxMDE5LDMxMDIwLDMxMDIxLDMxMDIyLDMxMDIzLDMxMDI0LDMxMDI1LDMxMDI2LDMxMDI3LDMxMDI5LDMxMDMwLDMxMDMxLDMxMDMyLDMxMDMzLDMxMDM3LDMxMDM5LDMxMDQyLDMxMDQzLDMxMDQ0LDMxMDQ1LDMxMDQ3LDMxMDUwLDMxMDUxLDMxMDUyLDMxMDUzLDMxMDU0LDMxMDU1LDMxMDU2LDMxMDU3LDMxMDU4LDMxMDYwLDMxMDYxLDMxMDY0LDMxMDY1LDMxMDczLDMxMDc1LDMxMDc2LDMxMDc4LDMxMDgxLDMxMDgyLDMxMDgzLDMxMDg0LDMxMDg2LDMxMDg4LDMxMDg5LDMxMDkwLDMxMDkxLDMxMDkyLDMxMDkzLDMxMDk0LDMxMDk3LDMxMDk5LDMxMTAwLDMxMTAxLDMxMTAyLDMxMTAzLDMxMTA2LDMxMTA3LDMxMTEwLDMxMTExLDMxMTEyLDMxMTEzLDMxMTE1LDMxMTE2LDMxMTE3LDMxMTE4LDMxMTIwLDMxMTIxLDMxMTIyLDI0NjA4LDMyODI5LDI1Mjg1LDIwMDI1LDIxMzMzLDM3MTEyLDI1NTI4LDMyOTY2LDI2MDg2LDI3Njk0LDIwMjk0LDI0ODE0LDI4MTI5LDM1ODA2LDI0Mzc3LDM0NTA3LDI0NDAzLDI1Mzc3LDIwODI2LDMzNjMzLDI2NzIzLDIwOTkyLDI1NDQzLDM2NDI0LDIwNDk4LDIzNzA3LDMxMDk1LDIzNTQ4LDIxMDQwLDMxMjkxLDI0NzY0LDM2OTQ3LDMwNDIzLDI0NTAzLDI0NDcxLDMwMzQwLDM2NDYwLDI4NzgzLDMwMzMxLDMxNTYxLDMwNjM0LDIwOTc5LDM3MDExLDIyNTY0LDIwMzAyLDI4NDA0LDM2ODQyLDI1OTMyLDMxNTE1LDI5MzgwLDI4MDY4LDMyNzM1LDIzMjY1LDI1MjY5LDI0MjEzLDIyMzIwLDMzOTIyLDMxNTMyLDI0MDkzLDI0MzUxLDM2ODgyLDMyNTMyLDM5MDcyLDI1NDc0LDI4MzU5LDMwODcyLDI4ODU3LDIwODU2LDM4NzQ3LDIyNDQzLDMwMDA1LDIwMjkxLDMwMDA4LDI0MjE1LDI0ODA2LDIyODgwLDI4MDk2LDI3NTgzLDMwODU3LDIxNTAwLDM4NjEzLDIwOTM5LDIwOTkzLDI1NDgxLDIxNTE0LDM4MDM1LDM1ODQzLDM2MzAwLDI5MjQxLDMwODc5LDM0Njc4LDM2ODQ1LDM1ODUzLDIxNDcyLDMxMTIzLDMxMTI0LDMxMTI1LDMxMTI2LDMxMTI3LDMxMTI4LDMxMTI5LDMxMTMxLDMxMTMyLDMxMTMzLDMxMTM0LDMxMTM1LDMxMTM2LDMxMTM3LDMxMTM4LDMxMTM5LDMxMTQwLDMxMTQxLDMxMTQyLDMxMTQ0LDMxMTQ1LDMxMTQ2LDMxMTQ3LDMxMTQ4LDMxMTQ5LDMxMTUwLDMxMTUxLDMxMTUyLDMxMTUzLDMxMTU0LDMxMTU2LDMxMTU3LDMxMTU4LDMxMTU5LDMxMTYwLDMxMTY0LDMxMTY3LDMxMTcwLDMxMTcyLDMxMTczLDMxMTc1LDMxMTc2LDMxMTc4LDMxMTgwLDMxMTgyLDMxMTgzLDMxMTg0LDMxMTg3LDMxMTg4LDMxMTkwLDMxMTkxLDMxMTkzLDMxMTk0LDMxMTk1LDMxMTk2LDMxMTk3LDMxMTk4LDMxMjAwLDMxMjAxLDMxMjAyLDMxMjA1LDMxMjA4LDMxMjEwLDMxMjEyLDMxMjE0LDMxMjE3LDMxMjE4LDMxMjE5LDMxMjIwLDMxMjIxLDMxMjIyLDMxMjIzLDMxMjI1LDMxMjI2LDMxMjI4LDMxMjMwLDMxMjMxLDMxMjMzLDMxMjM2LDMxMjM3LDMxMjM5LDMxMjQwLDMxMjQxLDMxMjQyLDMxMjQ0LDMxMjQ3LDMxMjQ4LDMxMjQ5LDMxMjUwLDMxMjUxLDMxMjUzLDMxMjU0LDMxMjU2LDMxMjU3LDMxMjU5LDMxMjYwLDE5OTY5LDMwNDQ3LDIxNDg2LDM4MDI1LDM5MDMwLDQwNzE4LDM4MTg5LDIzNDUwLDM1NzQ2LDIwMDAyLDE5OTk2LDIwOTA4LDMzODkxLDI1MDI2LDIxMTYwLDI2NjM1LDIwMzc1LDI0NjgzLDIwOTIzLDI3OTM0LDIwODI4LDI1MjM4LDI2MDA3LDM4NDk3LDM1OTEwLDM2ODg3LDMwMTY4LDM3MTE3LDMwNTYzLDI3NjAyLDI5MzIyLDI5NDIwLDM1ODM1LDIyNTgxLDMwNTg1LDM2MTcyLDI2NDYwLDM4MjA4LDMyOTIyLDI0MjMwLDI4MTkzLDIyOTMwLDMxNDcxLDMwNzAxLDM4MjAzLDI3NTczLDI2MDI5LDMyNTI2LDIyNTM0LDIwODE3LDM4NDMxLDIzNTQ1LDIyNjk3LDIxNTQ0LDM2NDY2LDI1OTU4LDM5MDM5LDIyMjQ0LDM4MDQ1LDMwNDYyLDM2OTI5LDI1NDc5LDIxNzAyLDIyODEwLDIyODQyLDIyNDI3LDM2NTMwLDI2NDIxLDM2MzQ2LDMzMzMzLDIxMDU3LDI0ODE2LDIyNTQ5LDM0NTU4LDIzNzg0LDQwNTE3LDIwNDIwLDM5MDY5LDM1NzY5LDIzMDc3LDI0Njk0LDIxMzgwLDI1MjEyLDM2OTQzLDM3MTIyLDM5Mjk1LDI0NjgxLDMyNzgwLDIwNzk5LDMyODE5LDIzNTcyLDM5Mjg1LDI3OTUzLDIwMTA4LDMxMjYxLDMxMjYzLDMxMjY1LDMxMjY2LDMxMjY4LDMxMjY5LDMxMjcwLDMxMjcxLDMxMjcyLDMxMjczLDMxMjc0LDMxMjc1LDMxMjc2LDMxMjc3LDMxMjc4LDMxMjc5LDMxMjgwLDMxMjgxLDMxMjgyLDMxMjg0LDMxMjg1LDMxMjg2LDMxMjg4LDMxMjkwLDMxMjk0LDMxMjk2LDMxMjk3LDMxMjk4LDMxMjk5LDMxMzAwLDMxMzAxLDMxMzAzLDMxMzA0LDMxMzA1LDMxMzA2LDMxMzA3LDMxMzA4LDMxMzA5LDMxMzEwLDMxMzExLDMxMzEyLDMxMzE0LDMxMzE1LDMxMzE2LDMxMzE3LDMxMzE4LDMxMzIwLDMxMzIxLDMxMzIyLDMxMzIzLDMxMzI0LDMxMzI1LDMxMzI2LDMxMzI3LDMxMzI4LDMxMzI5LDMxMzMwLDMxMzMxLDMxMzMyLDMxMzMzLDMxMzM0LDMxMzM1LDMxMzM2LDMxMzM3LDMxMzM4LDMxMzM5LDMxMzQwLDMxMzQxLDMxMzQyLDMxMzQzLDMxMzQ1LDMxMzQ2LDMxMzQ3LDMxMzQ5LDMxMzU1LDMxMzU2LDMxMzU3LDMxMzU4LDMxMzYyLDMxMzY1LDMxMzY3LDMxMzY5LDMxMzcwLDMxMzcxLDMxMzcyLDMxMzc0LDMxMzc1LDMxMzc2LDMxMzc5LDMxMzgwLDMxMzg1LDMxMzg2LDMxMzg3LDMxMzkwLDMxMzkzLDMxMzk0LDM2MTQ0LDIxNDU3LDMyNjAyLDMxNTY3LDIwMjQwLDIwMDQ3LDM4NDAwLDI3ODYxLDI5NjQ4LDM0MjgxLDI0MDcwLDMwMDU4LDMyNzYzLDI3MTQ2LDMwNzE4LDM4MDM0LDMyMzIxLDIwOTYxLDI4OTAyLDIxNDUzLDM2ODIwLDMzNTM5LDM2MTM3LDI5MzU5LDM5Mjc3LDI3ODY3LDIyMzQ2LDMzNDU5LDI2MDQxLDMyOTM4LDI1MTUxLDM4NDUwLDIyOTUyLDIwMjIzLDM1Nzc1LDMyNDQyLDI1OTE4LDMzNzc4LDM4NzUwLDIxODU3LDM5MTM0LDMyOTMzLDIxMjkwLDM1ODM3LDIxNTM2LDMyOTU0LDI0MjIzLDI3ODMyLDM2MTUzLDMzNDUyLDM3MjEwLDIxNTQ1LDI3Njc1LDIwOTk4LDMyNDM5LDIyMzY3LDI4OTU0LDI3Nzc0LDMxODgxLDIyODU5LDIwMjIxLDI0NTc1LDI0ODY4LDMxOTE0LDIwMDE2LDIzNTUzLDI2NTM5LDM0NTYyLDIzNzkyLDM4MTU1LDM5MTE4LDMwMTI3LDI4OTI1LDM2ODk4LDIwOTExLDMyNTQxLDM1NzczLDIyODU3LDIwOTY0LDIwMzE1LDIxNTQyLDIyODI3LDI1OTc1LDMyOTMyLDIzNDEzLDI1MjA2LDI1MjgyLDM2NzUyLDI0MTMzLDI3Njc5LDMxNTI2LDIwMjM5LDIwNDQwLDI2MzgxLDMxMzk1LDMxMzk2LDMxMzk5LDMxNDAxLDMxNDAyLDMxNDAzLDMxNDA2LDMxNDA3LDMxNDA4LDMxNDA5LDMxNDEwLDMxNDEyLDMxNDEzLDMxNDE0LDMxNDE1LDMxNDE2LDMxNDE3LDMxNDE4LDMxNDE5LDMxNDIwLDMxNDIxLDMxNDIyLDMxNDI0LDMxNDI1LDMxNDI2LDMxNDI3LDMxNDI4LDMxNDI5LDMxNDMwLDMxNDMxLDMxNDMyLDMxNDMzLDMxNDM0LDMxNDM2LDMxNDM3LDMxNDM4LDMxNDM5LDMxNDQwLDMxNDQxLDMxNDQyLDMxNDQzLDMxNDQ0LDMxNDQ1LDMxNDQ3LDMxNDQ4LDMxNDUwLDMxNDUxLDMxNDUyLDMxNDUzLDMxNDU3LDMxNDU4LDMxNDYwLDMxNDYzLDMxNDY0LDMxNDY1LDMxNDY2LDMxNDY3LDMxNDY4LDMxNDcwLDMxNDcyLDMxNDczLDMxNDc0LDMxNDc1LDMxNDc2LDMxNDc3LDMxNDc4LDMxNDc5LDMxNDgwLDMxNDgzLDMxNDg0LDMxNDg2LDMxNDg4LDMxNDg5LDMxNDkwLDMxNDkzLDMxNDk1LDMxNDk3LDMxNTAwLDMxNTAxLDMxNTAyLDMxNTA0LDMxNTA2LDMxNTA3LDMxNTEwLDMxNTExLDMxNTEyLDMxNTE0LDMxNTE2LDMxNTE3LDMxNTE5LDMxNTIxLDMxNTIyLDMxNTIzLDMxNTI3LDMxNTI5LDMxNTMzLDI4MDE0LDI4MDc0LDMxMTE5LDM0OTkzLDI0MzQzLDI5OTk1LDI1MjQyLDM2NzQxLDIwNDYzLDM3MzQwLDI2MDIzLDMzMDcxLDMzMTA1LDI0MjIwLDMzMTA0LDM2MjEyLDIxMTAzLDM1MjA2LDM2MTcxLDIyNzk3LDIwNjEzLDIwMTg0LDM4NDI4LDI5MjM4LDMzMTQ1LDM2MTI3LDIzNTAwLDM1NzQ3LDM4NDY4LDIyOTE5LDMyNTM4LDIxNjQ4LDIyMTM0LDIyMDMwLDM1ODEzLDI1OTEzLDI3MDEwLDM4MDQxLDMwNDIyLDI4Mjk3LDI0MTc4LDI5OTc2LDI2NDM4LDI2NTc3LDMxNDg3LDMyOTI1LDM2MjE0LDI0ODYzLDMxMTc0LDI1OTU0LDM2MTk1LDIwODcyLDIxMDE4LDM4MDUwLDMyNTY4LDMyOTIzLDMyNDM0LDIzNzAzLDI4MjA3LDI2NDY0LDMxNzA1LDMwMzQ3LDM5NjQwLDMzMTY3LDMyNjYwLDMxOTU3LDI1NjMwLDM4MjI0LDMxMjk1LDIxNTc4LDIxNzMzLDI3NDY4LDI1NjAxLDI1MDk2LDQwNTA5LDMzMDExLDMwMTA1LDIxMTA2LDM4NzYxLDMzODgzLDI2Njg0LDM0NTMyLDM4NDAxLDM4NTQ4LDM4MTI0LDIwMDEwLDIxNTA4LDMyNDczLDI2NjgxLDM2MzE5LDMyNzg5LDI2MzU2LDI0MjE4LDMyNjk3LDMxNTM1LDMxNTM2LDMxNTM4LDMxNTQwLDMxNTQxLDMxNTQyLDMxNTQzLDMxNTQ1LDMxNTQ3LDMxNTQ5LDMxNTUxLDMxNTUyLDMxNTUzLDMxNTU0LDMxNTU1LDMxNTU2LDMxNTU4LDMxNTYwLDMxNTYyLDMxNTY1LDMxNTY2LDMxNTcxLDMxNTczLDMxNTc1LDMxNTc3LDMxNTgwLDMxNTgyLDMxNTgzLDMxNTg1LDMxNTg3LDMxNTg4LDMxNTg5LDMxNTkwLDMxNTkxLDMxNTkyLDMxNTkzLDMxNTk0LDMxNTk1LDMxNTk2LDMxNTk3LDMxNTk5LDMxNjAwLDMxNjAzLDMxNjA0LDMxNjA2LDMxNjA4LDMxNjEwLDMxNjEyLDMxNjEzLDMxNjE1LDMxNjE3LDMxNjE4LDMxNjE5LDMxNjIwLDMxNjIyLDMxNjIzLDMxNjI0LDMxNjI1LDMxNjI2LDMxNjI3LDMxNjI4LDMxNjMwLDMxNjMxLDMxNjMzLDMxNjM0LDMxNjM1LDMxNjM4LDMxNjQwLDMxNjQxLDMxNjQyLDMxNjQzLDMxNjQ2LDMxNjQ3LDMxNjQ4LDMxNjUxLDMxNjUyLDMxNjUzLDMxNjYyLDMxNjYzLDMxNjY0LDMxNjY2LDMxNjY3LDMxNjY5LDMxNjcwLDMxNjcxLDMxNjczLDMxNjc0LDMxNjc1LDMxNjc2LDMxNjc3LDMxNjc4LDMxNjc5LDMxNjgwLDMxNjgyLDMxNjgzLDMxNjg0LDIyNDY2LDMyODMxLDI2Nzc1LDI0MDM3LDI1OTE1LDIxMTUxLDI0Njg1LDQwODU4LDIwMzc5LDM2NTI0LDIwODQ0LDIzNDY3LDI0MzM5LDI0MDQxLDI3NzQyLDI1MzI5LDM2MTI5LDIwODQ5LDM4MDU3LDIxMjQ2LDI3ODA3LDMzNTAzLDI5Mzk5LDIyNDM0LDI2NTAwLDM2MTQxLDIyODE1LDM2NzY0LDMzNzM1LDIxNjUzLDMxNjI5LDIwMjcyLDI3ODM3LDIzMzk2LDIyOTkzLDQwNzIzLDIxNDc2LDM0NTA2LDM5NTkyLDM1ODk1LDMyOTI5LDI1OTI1LDM5MDM4LDIyMjY2LDM4NTk5LDIxMDM4LDI5OTE2LDIxMDcyLDIzNTIxLDI1MzQ2LDM1MDc0LDIwMDU0LDI1Mjk2LDI0NjE4LDI2ODc0LDIwODUxLDIzNDQ4LDIwODk2LDM1MjY2LDMxNjQ5LDM5MzAyLDMyNTkyLDI0ODE1LDI4NzQ4LDM2MTQzLDIwODA5LDI0MTkxLDM2ODkxLDI5ODA4LDM1MjY4LDIyMzE3LDMwNzg5LDI0NDAyLDQwODYzLDM4Mzk0LDM2NzEyLDM5NzQwLDM1ODA5LDMwMzI4LDI2NjkwLDI2NTg4LDM2MzMwLDM2MTQ5LDIxMDUzLDM2NzQ2LDI4Mzc4LDI2ODI5LDM4MTQ5LDM3MTAxLDIyMjY5LDI2NTI0LDM1MDY1LDM2ODA3LDIxNzA0LDMxNjg1LDMxNjg4LDMxNjg5LDMxNjkwLDMxNjkxLDMxNjkzLDMxNjk0LDMxNjk1LDMxNjk2LDMxNjk4LDMxNzAwLDMxNzAxLDMxNzAyLDMxNzAzLDMxNzA0LDMxNzA3LDMxNzA4LDMxNzEwLDMxNzExLDMxNzEyLDMxNzE0LDMxNzE1LDMxNzE2LDMxNzE5LDMxNzIwLDMxNzIxLDMxNzIzLDMxNzI0LDMxNzI1LDMxNzI3LDMxNzI4LDMxNzMwLDMxNzMxLDMxNzMyLDMxNzMzLDMxNzM0LDMxNzM2LDMxNzM3LDMxNzM4LDMxNzM5LDMxNzQxLDMxNzQzLDMxNzQ0LDMxNzQ1LDMxNzQ2LDMxNzQ3LDMxNzQ4LDMxNzQ5LDMxNzUwLDMxNzUyLDMxNzUzLDMxNzU0LDMxNzU3LDMxNzU4LDMxNzYwLDMxNzYxLDMxNzYyLDMxNzYzLDMxNzY0LDMxNzY1LDMxNzY3LDMxNzY4LDMxNzY5LDMxNzcwLDMxNzcxLDMxNzcyLDMxNzczLDMxNzc0LDMxNzc2LDMxNzc3LDMxNzc4LDMxNzc5LDMxNzgwLDMxNzgxLDMxNzg0LDMxNzg1LDMxNzg3LDMxNzg4LDMxNzg5LDMxNzkwLDMxNzkxLDMxNzkyLDMxNzkzLDMxNzk0LDMxNzk1LDMxNzk2LDMxNzk3LDMxNzk4LDMxNzk5LDMxODAxLDMxODAyLDMxODAzLDMxODA0LDMxODA1LDMxODA2LDMxODEwLDM5NjA4LDIzNDAxLDI4MDIzLDI3Njg2LDIwMTMzLDIzNDc1LDM5NTU5LDM3MjE5LDI1MDAwLDM3MDM5LDM4ODg5LDIxNTQ3LDI4MDg1LDIzNTA2LDIwOTg5LDIxODk4LDMyNTk3LDMyNzUyLDI1Nzg4LDI1NDIxLDI2MDk3LDI1MDIyLDI0NzE3LDI4OTM4LDI3NzM1LDI3NzIxLDIyODMxLDI2NDc3LDMzMzIyLDIyNzQxLDIyMTU4LDM1OTQ2LDI3NjI3LDM3MDg1LDIyOTA5LDMyNzkxLDIxNDk1LDI4MDA5LDIxNjIxLDIxOTE3LDMzNjU1LDMzNzQzLDI2NjgwLDMxMTY2LDIxNjQ0LDIwMzA5LDIxNTEyLDMwNDE4LDM1OTc3LDM4NDAyLDI3ODI3LDI4MDg4LDM2MjAzLDM1MDg4LDQwNTQ4LDM2MTU0LDIyMDc5LDQwNjU3LDMwMTY1LDI0NDU2LDI5NDA4LDI0NjgwLDIxNzU2LDIwMTM2LDI3MTc4LDM0OTEzLDI0NjU4LDM2NzIwLDIxNzAwLDI4ODg4LDM0NDI1LDQwNTExLDI3OTQ2LDIzNDM5LDI0MzQ0LDMyNDE4LDIxODk3LDIwMzk5LDI5NDkyLDIxNTY0LDIxNDAyLDIwNTA1LDIxNTE4LDIxNjI4LDIwMDQ2LDI0NTczLDI5Nzg2LDIyNzc0LDMzODk5LDMyOTkzLDM0Njc2LDI5MzkyLDMxOTQ2LDI4MjQ2LDMxODExLDMxODEyLDMxODEzLDMxODE0LDMxODE1LDMxODE2LDMxODE3LDMxODE4LDMxODE5LDMxODIwLDMxODIyLDMxODIzLDMxODI0LDMxODI1LDMxODI2LDMxODI3LDMxODI4LDMxODI5LDMxODMwLDMxODMxLDMxODMyLDMxODMzLDMxODM0LDMxODM1LDMxODM2LDMxODM3LDMxODM4LDMxODM5LDMxODQwLDMxODQxLDMxODQyLDMxODQzLDMxODQ0LDMxODQ1LDMxODQ2LDMxODQ3LDMxODQ4LDMxODQ5LDMxODUwLDMxODUxLDMxODUyLDMxODUzLDMxODU0LDMxODU1LDMxODU2LDMxODU3LDMxODU4LDMxODYxLDMxODYyLDMxODYzLDMxODY0LDMxODY1LDMxODY2LDMxODcwLDMxODcxLDMxODcyLDMxODczLDMxODc0LDMxODc1LDMxODc2LDMxODc3LDMxODc4LDMxODc5LDMxODgwLDMxODgyLDMxODgzLDMxODg0LDMxODg1LDMxODg2LDMxODg3LDMxODg4LDMxODkxLDMxODkyLDMxODk0LDMxODk3LDMxODk4LDMxODk5LDMxOTA0LDMxOTA1LDMxOTA3LDMxOTEwLDMxOTExLDMxOTEyLDMxOTEzLDMxOTE1LDMxOTE2LDMxOTE3LDMxOTE5LDMxOTIwLDMxOTI0LDMxOTI1LDMxOTI2LDMxOTI3LDMxOTI4LDMxOTMwLDMxOTMxLDI0MzU5LDM0MzgyLDIxODA0LDI1MjUyLDIwMTE0LDI3ODE4LDI1MTQzLDMzNDU3LDIxNzE5LDIxMzI2LDI5NTAyLDI4MzY5LDMwMDExLDIxMDEwLDIxMjcwLDM1ODA1LDI3MDg4LDI0NDU4LDI0NTc2LDI4MTQyLDIyMzUxLDI3NDI2LDI5NjE1LDI2NzA3LDM2ODI0LDMyNTMxLDI1NDQyLDI0NzM5LDIxNzk2LDMwMTg2LDM1OTM4LDI4OTQ5LDI4MDY3LDIzNDYyLDI0MTg3LDMzNjE4LDI0OTA4LDQwNjQ0LDMwOTcwLDM0NjQ3LDMxNzgzLDMwMzQzLDIwOTc2LDI0ODIyLDI5MDA0LDI2MTc5LDI0MTQwLDI0NjUzLDM1ODU0LDI4Nzg0LDI1MzgxLDM2NzQ1LDI0NTA5LDI0Njc0LDM0NTE2LDIyMjM4LDI3NTg1LDI0NzI0LDI0OTM1LDIxMzIxLDI0ODAwLDI2MjE0LDM2MTU5LDMxMjI5LDIwMjUwLDI4OTA1LDI3NzE5LDM1NzYzLDM1ODI2LDMyNDcyLDMzNjM2LDI2MTI3LDIzMTMwLDM5NzQ2LDI3OTg1LDI4MTUxLDM1OTA1LDI3OTYzLDIwMjQ5LDI4Nzc5LDMzNzE5LDI1MTEwLDI0Nzg1LDM4NjY5LDM2MTM1LDMxMDk2LDIwOTg3LDIyMzM0LDIyNTIyLDI2NDI2LDMwMDcyLDMxMjkzLDMxMjE1LDMxNjM3LDMxOTM1LDMxOTM2LDMxOTM4LDMxOTM5LDMxOTQwLDMxOTQyLDMxOTQ1LDMxOTQ3LDMxOTUwLDMxOTUxLDMxOTUyLDMxOTUzLDMxOTU0LDMxOTU1LDMxOTU2LDMxOTYwLDMxOTYyLDMxOTYzLDMxOTY1LDMxOTY2LDMxOTY5LDMxOTcwLDMxOTcxLDMxOTcyLDMxOTczLDMxOTc0LDMxOTc1LDMxOTc3LDMxOTc4LDMxOTc5LDMxOTgwLDMxOTgxLDMxOTgyLDMxOTg0LDMxOTg1LDMxOTg2LDMxOTg3LDMxOTg4LDMxOTg5LDMxOTkwLDMxOTkxLDMxOTkzLDMxOTk0LDMxOTk2LDMxOTk3LDMxOTk4LDMxOTk5LDMyMDAwLDMyMDAxLDMyMDAyLDMyMDAzLDMyMDA0LDMyMDA1LDMyMDA2LDMyMDA3LDMyMDA4LDMyMDA5LDMyMDExLDMyMDEyLDMyMDEzLDMyMDE0LDMyMDE1LDMyMDE2LDMyMDE3LDMyMDE4LDMyMDE5LDMyMDIwLDMyMDIxLDMyMDIyLDMyMDIzLDMyMDI0LDMyMDI1LDMyMDI2LDMyMDI3LDMyMDI4LDMyMDI5LDMyMDMwLDMyMDMxLDMyMDMzLDMyMDM1LDMyMDM2LDMyMDM3LDMyMDM4LDMyMDQwLDMyMDQxLDMyMDQyLDMyMDQ0LDMyMDQ1LDMyMDQ2LDMyMDQ4LDMyMDQ5LDMyMDUwLDMyMDUxLDMyMDUyLDMyMDUzLDMyMDU0LDMyOTA4LDM5MjY5LDM2ODU3LDI4NjA4LDM1NzQ5LDQwNDgxLDIzMDIwLDMyNDg5LDMyNTIxLDIxNTEzLDI2NDk3LDI2ODQwLDM2NzUzLDMxODIxLDM4NTk4LDIxNDUwLDI0NjEzLDMwMTQyLDI3NzYyLDIxMzYzLDIzMjQxLDMyNDIzLDI1MzgwLDIwOTYwLDMzMDM0LDI0MDQ5LDM0MDE1LDI1MjE2LDIwODY0LDIzMzk1LDIwMjM4LDMxMDg1LDIxMDU4LDI0NzYwLDI3OTgyLDIzNDkyLDIzNDkwLDM1NzQ1LDM1NzYwLDI2MDgyLDI0NTI0LDM4NDY5LDIyOTMxLDMyNDg3LDMyNDI2LDIyMDI1LDI2NTUxLDIyODQxLDIwMzM5LDIzNDc4LDIxMTUyLDMzNjI2LDM5MDUwLDM2MTU4LDMwMDAyLDM4MDc4LDIwNTUxLDMxMjkyLDIwMjE1LDI2NTUwLDM5NTUwLDIzMjMzLDI3NTE2LDMwNDE3LDIyMzYyLDIzNTc0LDMxNTQ2LDM4Mzg4LDI5MDA2LDIwODYwLDMyOTM3LDMzMzkyLDIyOTA0LDMyNTE2LDMzNTc1LDI2ODE2LDI2NjA0LDMwODk3LDMwODM5LDI1MzE1LDI1NDQxLDMxNjE2LDIwNDYxLDIxMDk4LDIwOTQzLDMzNjE2LDI3MDk5LDM3NDkyLDM2MzQxLDM2MTQ1LDM1MjY1LDM4MTkwLDMxNjYxLDIwMjE0LDMyMDU1LDMyMDU2LDMyMDU3LDMyMDU4LDMyMDU5LDMyMDYwLDMyMDYxLDMyMDYyLDMyMDYzLDMyMDY0LDMyMDY1LDMyMDY2LDMyMDY3LDMyMDY4LDMyMDY5LDMyMDcwLDMyMDcxLDMyMDcyLDMyMDczLDMyMDc0LDMyMDc1LDMyMDc2LDMyMDc3LDMyMDc4LDMyMDc5LDMyMDgwLDMyMDgxLDMyMDgyLDMyMDgzLDMyMDg0LDMyMDg1LDMyMDg2LDMyMDg3LDMyMDg4LDMyMDg5LDMyMDkwLDMyMDkxLDMyMDkyLDMyMDkzLDMyMDk0LDMyMDk1LDMyMDk2LDMyMDk3LDMyMDk4LDMyMDk5LDMyMTAwLDMyMTAxLDMyMTAyLDMyMTAzLDMyMTA0LDMyMTA1LDMyMTA2LDMyMTA3LDMyMTA4LDMyMTA5LDMyMTExLDMyMTEyLDMyMTEzLDMyMTE0LDMyMTE1LDMyMTE2LDMyMTE3LDMyMTE4LDMyMTIwLDMyMTIxLDMyMTIyLDMyMTIzLDMyMTI0LDMyMTI1LDMyMTI2LDMyMTI3LDMyMTI4LDMyMTI5LDMyMTMwLDMyMTMxLDMyMTMyLDMyMTMzLDMyMTM0LDMyMTM1LDMyMTM2LDMyMTM3LDMyMTM4LDMyMTM5LDMyMTQwLDMyMTQxLDMyMTQyLDMyMTQzLDMyMTQ0LDMyMTQ1LDMyMTQ2LDMyMTQ3LDMyMTQ4LDMyMTQ5LDMyMTUwLDMyMTUxLDMyMTUyLDIwNTgxLDMzMzI4LDIxMDczLDM5Mjc5LDI4MTc2LDI4MjkzLDI4MDcxLDI0MzE0LDIwNzI1LDIzMDA0LDIzNTU4LDI3OTc0LDI3NzQzLDMwMDg2LDMzOTMxLDI2NzI4LDIyODcwLDM1NzYyLDIxMjgwLDM3MjMzLDM4NDc3LDM0MTIxLDI2ODk4LDMwOTc3LDI4OTY2LDMzMDE0LDIwMTMyLDM3MDY2LDI3OTc1LDM5NTU2LDIzMDQ3LDIyMjA0LDI1NjA1LDM4MTI4LDMwNjk5LDIwMzg5LDMzMDUwLDI5NDA5LDM1MjgyLDM5MjkwLDMyNTY0LDMyNDc4LDIxMTE5LDI1OTQ1LDM3MjM3LDM2NzM1LDM2NzM5LDIxNDgzLDMxMzgyLDI1NTgxLDI1NTA5LDMwMzQyLDMxMjI0LDM0OTAzLDM4NDU0LDI1MTMwLDIxMTYzLDMzNDEwLDI2NzA4LDI2NDgwLDI1NDYzLDMwNTcxLDMxNDY5LDI3OTA1LDMyNDY3LDM1Mjk5LDIyOTkyLDI1MTA2LDM0MjQ5LDMzNDQ1LDMwMDI4LDIwNTExLDIwMTcxLDMwMTE3LDM1ODE5LDIzNjI2LDI0MDYyLDMxNTYzLDI2MDIwLDM3MzI5LDIwMTcwLDI3OTQxLDM1MTY3LDMyMDM5LDM4MTgyLDIwMTY1LDM1ODgwLDM2ODI3LDM4NzcxLDI2MTg3LDMxMTA1LDM2ODE3LDI4OTA4LDI4MDI0LDMyMTUzLDMyMTU0LDMyMTU1LDMyMTU2LDMyMTU3LDMyMTU4LDMyMTU5LDMyMTYwLDMyMTYxLDMyMTYyLDMyMTYzLDMyMTY0LDMyMTY1LDMyMTY3LDMyMTY4LDMyMTY5LDMyMTcwLDMyMTcxLDMyMTcyLDMyMTczLDMyMTc1LDMyMTc2LDMyMTc3LDMyMTc4LDMyMTc5LDMyMTgwLDMyMTgxLDMyMTgyLDMyMTgzLDMyMTg0LDMyMTg1LDMyMTg2LDMyMTg3LDMyMTg4LDMyMTg5LDMyMTkwLDMyMTkxLDMyMTkyLDMyMTkzLDMyMTk0LDMyMTk1LDMyMTk2LDMyMTk3LDMyMTk4LDMyMTk5LDMyMjAwLDMyMjAxLDMyMjAyLDMyMjAzLDMyMjA0LDMyMjA1LDMyMjA2LDMyMjA3LDMyMjA4LDMyMjA5LDMyMjEwLDMyMjExLDMyMjEyLDMyMjEzLDMyMjE0LDMyMjE1LDMyMjE2LDMyMjE3LDMyMjE4LDMyMjE5LDMyMjIwLDMyMjIxLDMyMjIyLDMyMjIzLDMyMjI0LDMyMjI1LDMyMjI2LDMyMjI3LDMyMjI4LDMyMjI5LDMyMjMwLDMyMjMxLDMyMjMyLDMyMjMzLDMyMjM0LDMyMjM1LDMyMjM2LDMyMjM3LDMyMjM4LDMyMjM5LDMyMjQwLDMyMjQxLDMyMjQyLDMyMjQzLDMyMjQ0LDMyMjQ1LDMyMjQ2LDMyMjQ3LDMyMjQ4LDMyMjQ5LDMyMjUwLDIzNjEzLDIxMTcwLDMzNjA2LDIwODM0LDMzNTUwLDMwNTU1LDI2MjMwLDQwMTIwLDIwMTQwLDI0Nzc4LDMxOTM0LDMxOTIzLDMyNDYzLDIwMTE3LDM1Njg2LDI2MjIzLDM5MDQ4LDM4NzQ1LDIyNjU5LDI1OTY0LDM4MjM2LDI0NDUyLDMwMTUzLDM4NzQyLDMxNDU1LDMxNDU0LDIwOTI4LDI4ODQ3LDMxMzg0LDI1NTc4LDMxMzUwLDMyNDE2LDI5NTkwLDM4ODkzLDIwMDM3LDI4NzkyLDIwMDYxLDM3MjAyLDIxNDE3LDI1OTM3LDI2MDg3LDMzMjc2LDMzMjg1LDIxNjQ2LDIzNjAxLDMwMTA2LDM4ODE2LDI1MzA0LDI5NDAxLDMwMTQxLDIzNjIxLDM5NTQ1LDMzNzM4LDIzNjE2LDIxNjMyLDMwNjk3LDIwMDMwLDI3ODIyLDMyODU4LDI1Mjk4LDI1NDU0LDI0MDQwLDIwODU1LDM2MzE3LDM2MzgyLDM4MTkxLDIwNDY1LDIxNDc3LDI0ODA3LDI4ODQ0LDIxMDk1LDI1NDI0LDQwNTE1LDIzMDcxLDIwNTE4LDMwNTE5LDIxMzY3LDMyNDgyLDI1NzMzLDI1ODk5LDI1MjI1LDI1NDk2LDIwNTAwLDI5MjM3LDM1MjczLDIwOTE1LDM1Nzc2LDMyNDc3LDIyMzQzLDMzNzQwLDM4MDU1LDIwODkxLDIxNTMxLDIzODAzLDMyMjUxLDMyMjUyLDMyMjUzLDMyMjU0LDMyMjU1LDMyMjU2LDMyMjU3LDMyMjU4LDMyMjU5LDMyMjYwLDMyMjYxLDMyMjYyLDMyMjYzLDMyMjY0LDMyMjY1LDMyMjY2LDMyMjY3LDMyMjY4LDMyMjY5LDMyMjcwLDMyMjcxLDMyMjcyLDMyMjczLDMyMjc0LDMyMjc1LDMyMjc2LDMyMjc3LDMyMjc4LDMyMjc5LDMyMjgwLDMyMjgxLDMyMjgyLDMyMjgzLDMyMjg0LDMyMjg1LDMyMjg2LDMyMjg3LDMyMjg4LDMyMjg5LDMyMjkwLDMyMjkxLDMyMjkyLDMyMjkzLDMyMjk0LDMyMjk1LDMyMjk2LDMyMjk3LDMyMjk4LDMyMjk5LDMyMzAwLDMyMzAxLDMyMzAyLDMyMzAzLDMyMzA0LDMyMzA1LDMyMzA2LDMyMzA3LDMyMzA4LDMyMzA5LDMyMzEwLDMyMzExLDMyMzEyLDMyMzEzLDMyMzE0LDMyMzE2LDMyMzE3LDMyMzE4LDMyMzE5LDMyMzIwLDMyMzIyLDMyMzIzLDMyMzI0LDMyMzI1LDMyMzI2LDMyMzI4LDMyMzI5LDMyMzMwLDMyMzMxLDMyMzMyLDMyMzMzLDMyMzM0LDMyMzM1LDMyMzM2LDMyMzM3LDMyMzM4LDMyMzM5LDMyMzQwLDMyMzQxLDMyMzQyLDMyMzQzLDMyMzQ0LDMyMzQ1LDMyMzQ2LDMyMzQ3LDMyMzQ4LDMyMzQ5LDIwNDI2LDMxNDU5LDI3OTk0LDM3MDg5LDM5NTY3LDIxODg4LDIxNjU0LDIxMzQ1LDIxNjc5LDI0MzIwLDI1NTc3LDI2OTk5LDIwOTc1LDI0OTM2LDIxMDAyLDIyNTcwLDIxMjA4LDIyMzUwLDMwNzMzLDMwNDc1LDI0MjQ3LDI0OTUxLDMxOTY4LDI1MTc5LDI1MjM5LDIwMTMwLDI4ODIxLDMyNzcxLDI1MzM1LDI4OTAwLDM4NzUyLDIyMzkxLDMzNDk5LDI2NjA3LDI2ODY5LDMwOTMzLDM5MDYzLDMxMTg1LDIyNzcxLDIxNjgzLDIxNDg3LDI4MjEyLDIwODExLDIxMDUxLDIzNDU4LDM1ODM4LDMyOTQzLDIxODI3LDIyNDM4LDI0NjkxLDIyMzUzLDIxNTQ5LDMxMzU0LDI0NjU2LDIzMzgwLDI1NTExLDI1MjQ4LDIxNDc1LDI1MTg3LDIzNDk1LDI2NTQzLDIxNzQxLDMxMzkxLDMzNTEwLDM3MjM5LDI0MjExLDM1MDQ0LDIyODQwLDIyNDQ2LDI1MzU4LDM2MzI4LDMzMDA3LDIyMzU5LDMxNjA3LDIwMzkzLDI0NTU1LDIzNDg1LDI3NDU0LDIxMjgxLDMxNTY4LDI5Mzc4LDI2Njk0LDMwNzE5LDMwNTE4LDI2MTAzLDIwOTE3LDIwMTExLDMwNDIwLDIzNzQzLDMxMzk3LDMzOTA5LDIyODYyLDM5NzQ1LDIwNjA4LDMyMzUwLDMyMzUxLDMyMzUyLDMyMzUzLDMyMzU0LDMyMzU1LDMyMzU2LDMyMzU3LDMyMzU4LDMyMzU5LDMyMzYwLDMyMzYxLDMyMzYyLDMyMzYzLDMyMzY0LDMyMzY1LDMyMzY2LDMyMzY3LDMyMzY4LDMyMzY5LDMyMzcwLDMyMzcxLDMyMzcyLDMyMzczLDMyMzc0LDMyMzc1LDMyMzc2LDMyMzc3LDMyMzc4LDMyMzc5LDMyMzgwLDMyMzgxLDMyMzgyLDMyMzgzLDMyMzg0LDMyMzg1LDMyMzg3LDMyMzg4LDMyMzg5LDMyMzkwLDMyMzkxLDMyMzkyLDMyMzkzLDMyMzk0LDMyMzk1LDMyMzk2LDMyMzk3LDMyMzk4LDMyMzk5LDMyNDAwLDMyNDAxLDMyNDAyLDMyNDAzLDMyNDA0LDMyNDA1LDMyNDA2LDMyNDA3LDMyNDA4LDMyNDA5LDMyNDEwLDMyNDEyLDMyNDEzLDMyNDE0LDMyNDMwLDMyNDM2LDMyNDQzLDMyNDQ0LDMyNDcwLDMyNDg0LDMyNDkyLDMyNTA1LDMyNTIyLDMyNTI4LDMyNTQyLDMyNTY3LDMyNTY5LDMyNTcxLDMyNTcyLDMyNTczLDMyNTc0LDMyNTc1LDMyNTc2LDMyNTc3LDMyNTc5LDMyNTgyLDMyNTgzLDMyNTg0LDMyNTg1LDMyNTg2LDMyNTg3LDMyNTg4LDMyNTg5LDMyNTkwLDMyNTkxLDMyNTk0LDMyNTk1LDM5MzA0LDI0ODcxLDI4MjkxLDIyMzcyLDI2MTE4LDI1NDE0LDIyMjU2LDI1MzI0LDI1MTkzLDI0Mjc1LDM4NDIwLDIyNDAzLDI1Mjg5LDIxODk1LDM0NTkzLDMzMDk4LDM2NzcxLDIxODYyLDMzNzEzLDI2NDY5LDM2MTgyLDM0MDEzLDIzMTQ2LDI2NjM5LDI1MzE4LDMxNzI2LDM4NDE3LDIwODQ4LDI4NTcyLDM1ODg4LDI1NTk3LDM1MjcyLDI1MDQyLDMyNTE4LDI4ODY2LDI4Mzg5LDI5NzAxLDI3MDI4LDI5NDM2LDI0MjY2LDM3MDcwLDI2MzkxLDI4MDEwLDI1NDM4LDIxMTcxLDI5MjgyLDMyNzY5LDIwMzMyLDIzMDEzLDM3MjI2LDI4ODg5LDI4MDYxLDIxMjAyLDIwMDQ4LDM4NjQ3LDM4MjUzLDM0MTc0LDMwOTIyLDMyMDQ3LDIwNzY5LDIyNDE4LDI1Nzk0LDMyOTA3LDMxODY3LDI3ODgyLDI2ODY1LDI2OTc0LDIwOTE5LDIxNDAwLDI2NzkyLDI5MzEzLDQwNjU0LDMxNzI5LDI5NDMyLDMxMTYzLDI4NDM1LDI5NzAyLDI2NDQ2LDM3MzI0LDQwMTAwLDMxMDM2LDMzNjczLDMzNjIwLDIxNTE5LDI2NjQ3LDIwMDI5LDIxMzg1LDIxMTY5LDMwNzgyLDIxMzgyLDIxMDMzLDIwNjE2LDIwMzYzLDIwNDMyLDMyNTk4LDMyNjAxLDMyNjAzLDMyNjA0LDMyNjA1LDMyNjA2LDMyNjA4LDMyNjExLDMyNjEyLDMyNjEzLDMyNjE0LDMyNjE1LDMyNjE5LDMyNjIwLDMyNjIxLDMyNjIzLDMyNjI0LDMyNjI3LDMyNjI5LDMyNjMwLDMyNjMxLDMyNjMyLDMyNjM0LDMyNjM1LDMyNjM2LDMyNjM3LDMyNjM5LDMyNjQwLDMyNjQyLDMyNjQzLDMyNjQ0LDMyNjQ1LDMyNjQ2LDMyNjQ3LDMyNjQ4LDMyNjQ5LDMyNjUxLDMyNjUzLDMyNjU1LDMyNjU2LDMyNjU3LDMyNjU4LDMyNjU5LDMyNjYxLDMyNjYyLDMyNjYzLDMyNjY0LDMyNjY1LDMyNjY3LDMyNjY4LDMyNjcyLDMyNjc0LDMyNjc1LDMyNjc3LDMyNjc4LDMyNjgwLDMyNjgxLDMyNjgyLDMyNjgzLDMyNjg0LDMyNjg1LDMyNjg2LDMyNjg5LDMyNjkxLDMyNjkyLDMyNjkzLDMyNjk0LDMyNjk1LDMyNjk4LDMyNjk5LDMyNzAyLDMyNzA0LDMyNzA2LDMyNzA3LDMyNzA4LDMyNzEwLDMyNzExLDMyNzEyLDMyNzEzLDMyNzE1LDMyNzE3LDMyNzE5LDMyNzIwLDMyNzIxLDMyNzIyLDMyNzIzLDMyNzI2LDMyNzI3LDMyNzI5LDMyNzMwLDMyNzMxLDMyNzMyLDMyNzMzLDMyNzM0LDMyNzM4LDMyNzM5LDMwMTc4LDMxNDM1LDMxODkwLDI3ODEzLDM4NTgyLDIxMTQ3LDI5ODI3LDIxNzM3LDIwNDU3LDMyODUyLDMzNzE0LDM2ODMwLDM4MjU2LDI0MjY1LDI0NjA0LDI4MDYzLDI0MDg4LDI1OTQ3LDMzMDgwLDM4MTQyLDI0NjUxLDI4ODYwLDMyNDUxLDMxOTE4LDIwOTM3LDI2NzUzLDMxOTIxLDMzMzkxLDIwMDA0LDM2NzQyLDM3MzI3LDI2MjM4LDIwMTQyLDM1ODQ1LDI1NzY5LDMyODQyLDIwNjk4LDMwMTAzLDI5MTM0LDIzNTI1LDM2Nzk3LDI4NTE4LDIwMTAyLDI1NzMwLDM4MjQzLDI0Mjc4LDI2MDA5LDIxMDE1LDM1MDEwLDI4ODcyLDIxMTU1LDI5NDU0LDI5NzQ3LDI2NTE5LDMwOTY3LDM4Njc4LDIwMDIwLDM3MDUxLDQwMTU4LDI4MTA3LDIwOTU1LDM2MTYxLDIxNTMzLDI1Mjk0LDI5NjE4LDMzNzc3LDM4NjQ2LDQwODM2LDM4MDgzLDIwMjc4LDMyNjY2LDIwOTQwLDI4Nzg5LDM4NTE3LDIzNzI1LDM5MDQ2LDIxNDc4LDIwMTk2LDI4MzE2LDI5NzA1LDI3MDYwLDMwODI3LDM5MzExLDMwMDQxLDIxMDE2LDMwMjQ0LDI3OTY5LDI2NjExLDIwODQ1LDQwODU3LDMyODQzLDIxNjU3LDMxNTQ4LDMxNDIzLDMyNzQwLDMyNzQzLDMyNzQ0LDMyNzQ2LDMyNzQ3LDMyNzQ4LDMyNzQ5LDMyNzUxLDMyNzU0LDMyNzU2LDMyNzU3LDMyNzU4LDMyNzU5LDMyNzYwLDMyNzYxLDMyNzYyLDMyNzY1LDMyNzY2LDMyNzY3LDMyNzcwLDMyNzc1LDMyNzc2LDMyNzc3LDMyNzc4LDMyNzgyLDMyNzgzLDMyNzg1LDMyNzg3LDMyNzk0LDMyNzk1LDMyNzk3LDMyNzk4LDMyNzk5LDMyODAxLDMyODAzLDMyODA0LDMyODExLDMyODEyLDMyODEzLDMyODE0LDMyODE1LDMyODE2LDMyODE4LDMyODIwLDMyODI1LDMyODI2LDMyODI4LDMyODMwLDMyODMyLDMyODMzLDMyODM2LDMyODM3LDMyODM5LDMyODQwLDMyODQxLDMyODQ2LDMyODQ3LDMyODQ4LDMyODQ5LDMyODUxLDMyODUzLDMyODU0LDMyODU1LDMyODU3LDMyODU5LDMyODYwLDMyODYxLDMyODYyLDMyODYzLDMyODY0LDMyODY1LDMyODY2LDMyODY3LDMyODY4LDMyODY5LDMyODcwLDMyODcxLDMyODcyLDMyODc1LDMyODc2LDMyODc3LDMyODc4LDMyODc5LDMyODgwLDMyODgyLDMyODgzLDMyODg0LDMyODg1LDMyODg2LDMyODg3LDMyODg4LDMyODg5LDMyODkwLDMyODkxLDMyODkyLDMyODkzLDM4NTM0LDIyNDA0LDI1MzE0LDM4NDcxLDI3MDA0LDIzMDQ0LDI1NjAyLDMxNjk5LDI4NDMxLDM4NDc1LDMzNDQ2LDIxMzQ2LDM5MDQ1LDI0MjA4LDI4ODA5LDI1NTIzLDIxMzQ4LDM0MzgzLDQwMDY1LDQwNTk1LDMwODYwLDM4NzA2LDM2MzM1LDM2MTYyLDQwNTc1LDI4NTEwLDMxMTA4LDI0NDA1LDM4NDcwLDI1MTM0LDM5NTQwLDIxNTI1LDM4MTA5LDIwMzg3LDI2MDUzLDIzNjUzLDIzNjQ5LDMyNTMzLDM0Mzg1LDI3Njk1LDI0NDU5LDI5NTc1LDI4Mzg4LDMyNTExLDIzNzgyLDI1MzcxLDIzNDAyLDI4MzkwLDIxMzY1LDIwMDgxLDI1NTA0LDMwMDUzLDI1MjQ5LDM2NzE4LDIwMjYyLDIwMTc3LDI3ODE0LDMyNDM4LDM1NzcwLDMzODIxLDM0NzQ2LDMyNTk5LDM2OTIzLDM4MTc5LDMxNjU3LDM5NTg1LDM1MDY0LDMzODUzLDI3OTMxLDM5NTU4LDMyNDc2LDIyOTIwLDQwNjM1LDI5NTk1LDMwNzIxLDM0NDM0LDM5NTMyLDM5NTU0LDIyMDQzLDIxNTI3LDIyNDc1LDIwMDgwLDQwNjE0LDIxMzM0LDM2ODA4LDMzMDMzLDMwNjEwLDM5MzE0LDM0NTQyLDI4Mzg1LDM0MDY3LDI2MzY0LDI0OTMwLDI4NDU5LDMyODk0LDMyODk3LDMyODk4LDMyOTAxLDMyOTA0LDMyOTA2LDMyOTA5LDMyOTEwLDMyOTExLDMyOTEyLDMyOTEzLDMyOTE0LDMyOTE2LDMyOTE3LDMyOTE5LDMyOTIxLDMyOTI2LDMyOTMxLDMyOTM0LDMyOTM1LDMyOTM2LDMyOTQwLDMyOTQ0LDMyOTQ3LDMyOTQ5LDMyOTUwLDMyOTUyLDMyOTUzLDMyOTU1LDMyOTY1LDMyOTY3LDMyOTY4LDMyOTY5LDMyOTcwLDMyOTcxLDMyOTc1LDMyOTc2LDMyOTc3LDMyOTc4LDMyOTc5LDMyOTgwLDMyOTgxLDMyOTg0LDMyOTkxLDMyOTkyLDMyOTk0LDMyOTk1LDMyOTk4LDMzMDA2LDMzMDEzLDMzMDE1LDMzMDE3LDMzMDE5LDMzMDIyLDMzMDIzLDMzMDI0LDMzMDI1LDMzMDI3LDMzMDI4LDMzMDI5LDMzMDMxLDMzMDMyLDMzMDM1LDMzMDM2LDMzMDQ1LDMzMDQ3LDMzMDQ5LDMzMDUxLDMzMDUyLDMzMDUzLDMzMDU1LDMzMDU2LDMzMDU3LDMzMDU4LDMzMDU5LDMzMDYwLDMzMDYxLDMzMDYyLDMzMDYzLDMzMDY0LDMzMDY1LDMzMDY2LDMzMDY3LDMzMDY5LDMzMDcwLDMzMDcyLDMzMDc1LDMzMDc2LDMzMDc3LDMzMDc5LDMzMDgxLDMzMDgyLDMzMDgzLDMzMDg0LDMzMDg1LDMzMDg3LDM1ODgxLDMzNDI2LDMzNTc5LDMwNDUwLDI3NjY3LDI0NTM3LDMzNzI1LDI5NDgzLDMzNTQxLDM4MTcwLDI3NjExLDMwNjgzLDM4MDg2LDIxMzU5LDMzNTM4LDIwODgyLDI0MTI1LDM1OTgwLDM2MTUyLDIwMDQwLDI5NjExLDI2NTIyLDI2NzU3LDM3MjM4LDM4NjY1LDI5MDI4LDI3ODA5LDMwNDczLDIzMTg2LDM4MjA5LDI3NTk5LDMyNjU0LDI2MTUxLDIzNTA0LDIyOTY5LDIzMTk0LDM4Mzc2LDM4MzkxLDIwMjA0LDMzODA0LDMzOTQ1LDI3MzA4LDMwNDMxLDM4MTkyLDI5NDY3LDI2NzkwLDIzMzkxLDMwNTExLDM3Mjc0LDM4NzUzLDMxOTY0LDM2ODU1LDM1ODY4LDI0MzU3LDMxODU5LDMxMTkyLDM1MjY5LDI3ODUyLDM0NTg4LDIzNDk0LDI0MTMwLDI2ODI1LDMwNDk2LDMyNTAxLDIwODg1LDIwODEzLDIxMTkzLDIzMDgxLDMyNTE3LDM4NzU0LDMzNDk1LDI1NTUxLDMwNTk2LDM0MjU2LDMxMTg2LDI4MjE4LDI0MjE3LDIyOTM3LDM0MDY1LDI4NzgxLDI3NjY1LDI1Mjc5LDMwMzk5LDI1OTM1LDI0NzUxLDM4Mzk3LDI2MTI2LDM0NzE5LDQwNDgzLDM4MTI1LDIxNTE3LDIxNjI5LDM1ODg0LDI1NzIwLDMzMDg4LDMzMDg5LDMzMDkwLDMzMDkxLDMzMDkyLDMzMDkzLDMzMDk1LDMzMDk3LDMzMTAxLDMzMTAyLDMzMTAzLDMzMTA2LDMzMTEwLDMzMTExLDMzMTEyLDMzMTE1LDMzMTE2LDMzMTE3LDMzMTE4LDMzMTE5LDMzMTIxLDMzMTIyLDMzMTIzLDMzMTI0LDMzMTI2LDMzMTI4LDMzMTMwLDMzMTMxLDMzMTMyLDMzMTM1LDMzMTM4LDMzMTM5LDMzMTQxLDMzMTQyLDMzMTQzLDMzMTQ0LDMzMTUzLDMzMTU1LDMzMTU2LDMzMTU3LDMzMTU4LDMzMTU5LDMzMTYxLDMzMTYzLDMzMTY0LDMzMTY1LDMzMTY2LDMzMTY4LDMzMTcwLDMzMTcxLDMzMTcyLDMzMTczLDMzMTc0LDMzMTc1LDMzMTc3LDMzMTc4LDMzMTgyLDMzMTgzLDMzMTg0LDMzMTg1LDMzMTg2LDMzMTg4LDMzMTg5LDMzMTkxLDMzMTkzLDMzMTk1LDMzMTk2LDMzMTk3LDMzMTk4LDMzMTk5LDMzMjAwLDMzMjAxLDMzMjAyLDMzMjA0LDMzMjA1LDMzMjA2LDMzMjA3LDMzMjA4LDMzMjA5LDMzMjEyLDMzMjEzLDMzMjE0LDMzMjE1LDMzMjIwLDMzMjIxLDMzMjIzLDMzMjI0LDMzMjI1LDMzMjI3LDMzMjI5LDMzMjMwLDMzMjMxLDMzMjMyLDMzMjMzLDMzMjM0LDMzMjM1LDI1NzIxLDM0MzIxLDI3MTY5LDMzMTgwLDMwOTUyLDI1NzA1LDM5NzY0LDI1MjczLDI2NDExLDMzNzA3LDIyNjk2LDQwNjY0LDI3ODE5LDI4NDQ4LDIzNTE4LDM4NDc2LDM1ODUxLDI5Mjc5LDI2NTc2LDI1Mjg3LDI5MjgxLDIwMTM3LDIyOTgyLDI3NTk3LDIyNjc1LDI2Mjg2LDI0MTQ5LDIxMjE1LDI0OTE3LDI2NDA4LDMwNDQ2LDMwNTY2LDI5Mjg3LDMxMzAyLDI1MzQzLDIxNzM4LDIxNTg0LDM4MDQ4LDM3MDI3LDIzMDY4LDMyNDM1LDI3NjcwLDIwMDM1LDIyOTAyLDMyNzg0LDIyODU2LDIxMzM1LDMwMDA3LDM4NTkwLDIyMjE4LDI1Mzc2LDMzMDQxLDI0NzAwLDM4MzkzLDI4MTE4LDIxNjAyLDM5Mjk3LDIwODY5LDIzMjczLDMzMDIxLDIyOTU4LDM4Njc1LDIwNTIyLDI3ODc3LDIzNjEyLDI1MzExLDIwMzIwLDIxMzExLDMzMTQ3LDM2ODcwLDI4MzQ2LDM0MDkxLDI1Mjg4LDI0MTgwLDMwOTEwLDI1NzgxLDI1NDY3LDI0NTY1LDIzMDY0LDM3MjQ3LDQwNDc5LDIzNjE1LDI1NDIzLDMyODM0LDIzNDIxLDIxODcwLDM4MjE4LDM4MjIxLDI4MDM3LDI0NzQ0LDI2NTkyLDI5NDA2LDIwOTU3LDIzNDI1LDMzMjM2LDMzMjM3LDMzMjM4LDMzMjM5LDMzMjQwLDMzMjQxLDMzMjQyLDMzMjQzLDMzMjQ0LDMzMjQ1LDMzMjQ2LDMzMjQ3LDMzMjQ4LDMzMjQ5LDMzMjUwLDMzMjUyLDMzMjUzLDMzMjU0LDMzMjU2LDMzMjU3LDMzMjU5LDMzMjYyLDMzMjYzLDMzMjY0LDMzMjY1LDMzMjY2LDMzMjY5LDMzMjcwLDMzMjcxLDMzMjcyLDMzMjczLDMzMjc0LDMzMjc3LDMzMjc5LDMzMjgzLDMzMjg3LDMzMjg4LDMzMjg5LDMzMjkwLDMzMjkxLDMzMjk0LDMzMjk1LDMzMjk3LDMzMjk5LDMzMzAxLDMzMzAyLDMzMzAzLDMzMzA0LDMzMzA1LDMzMzA2LDMzMzA5LDMzMzEyLDMzMzE2LDMzMzE3LDMzMzE4LDMzMzE5LDMzMzIxLDMzMzI2LDMzMzMwLDMzMzM4LDMzMzQwLDMzMzQxLDMzMzQzLDMzMzQ0LDMzMzQ1LDMzMzQ2LDMzMzQ3LDMzMzQ5LDMzMzUwLDMzMzUyLDMzMzU0LDMzMzU2LDMzMzU3LDMzMzU4LDMzMzYwLDMzMzYxLDMzMzYyLDMzMzYzLDMzMzY0LDMzMzY1LDMzMzY2LDMzMzY3LDMzMzY5LDMzMzcxLDMzMzcyLDMzMzczLDMzMzc0LDMzMzc2LDMzMzc3LDMzMzc4LDMzMzc5LDMzMzgwLDMzMzgxLDMzMzgyLDMzMzgzLDMzMzg1LDI1MzE5LDI3ODcwLDI5Mjc1LDI1MTk3LDM4MDYyLDMyNDQ1LDMzMDQzLDI3OTg3LDIwODkyLDI0MzI0LDIyOTAwLDIxMTYyLDI0NTk0LDIyODk5LDI2MjYyLDM0Mzg0LDMwMTExLDI1Mzg2LDI1MDYyLDMxOTgzLDM1ODM0LDIxNzM0LDI3NDMxLDQwNDg1LDI3NTcyLDM0MjYxLDIxNTg5LDIwNTk4LDI3ODEyLDIxODY2LDM2Mjc2LDI5MjI4LDI0MDg1LDI0NTk3LDI5NzUwLDI1MjkzLDI1NDkwLDI5MjYwLDI0NDcyLDI4MjI3LDI3OTY2LDI1ODU2LDI4NTA0LDMwNDI0LDMwOTI4LDMwNDYwLDMwMDM2LDIxMDI4LDIxNDY3LDIwMDUxLDI0MjIyLDI2MDQ5LDMyODEwLDMyOTgyLDI1MjQzLDIxNjM4LDIxMDMyLDI4ODQ2LDM0OTU3LDM2MzA1LDI3ODczLDIxNjI0LDMyOTg2LDIyNTIxLDM1MDYwLDM2MTgwLDM4NTA2LDM3MTk3LDIwMzI5LDI3ODAzLDIxOTQzLDMwNDA2LDMwNzY4LDI1MjU2LDI4OTIxLDI4NTU4LDI0NDI5LDM0MDI4LDI2ODQyLDMwODQ0LDMxNzM1LDMzMTkyLDI2Mzc5LDQwNTI3LDI1NDQ3LDMwODk2LDIyMzgzLDMwNzM4LDM4NzEzLDI1MjA5LDI1MjU5LDIxMTI4LDI5NzQ5LDI3NjA3LDMzMzg2LDMzMzg3LDMzMzg4LDMzMzg5LDMzMzkzLDMzMzk3LDMzMzk4LDMzMzk5LDMzNDAwLDMzNDAzLDMzNDA0LDMzNDA4LDMzNDA5LDMzNDExLDMzNDEzLDMzNDE0LDMzNDE1LDMzNDE3LDMzNDIwLDMzNDI0LDMzNDI3LDMzNDI4LDMzNDI5LDMzNDMwLDMzNDM0LDMzNDM1LDMzNDM4LDMzNDQwLDMzNDQyLDMzNDQzLDMzNDQ3LDMzNDU4LDMzNDYxLDMzNDYyLDMzNDY2LDMzNDY3LDMzNDY4LDMzNDcxLDMzNDcyLDMzNDc0LDMzNDc1LDMzNDc3LDMzNDc4LDMzNDgxLDMzNDg4LDMzNDk0LDMzNDk3LDMzNDk4LDMzNTAxLDMzNTA2LDMzNTExLDMzNTEyLDMzNTEzLDMzNTE0LDMzNTE2LDMzNTE3LDMzNTE4LDMzNTIwLDMzNTIyLDMzNTIzLDMzNTI1LDMzNTI2LDMzNTI4LDMzNTMwLDMzNTMyLDMzNTMzLDMzNTM0LDMzNTM1LDMzNTM2LDMzNTQ2LDMzNTQ3LDMzNTQ5LDMzNTUyLDMzNTU0LDMzNTU1LDMzNTU4LDMzNTYwLDMzNTYxLDMzNTY1LDMzNTY2LDMzNTY3LDMzNTY4LDMzNTY5LDMzNTcwLDMzNTcxLDMzNTcyLDMzNTczLDMzNTc0LDMzNTc3LDMzNTc4LDMzNTgyLDMzNTg0LDMzNTg2LDMzNTkxLDMzNTk1LDMzNTk3LDIxODYwLDMzMDg2LDMwMTMwLDMwMzgyLDIxMzA1LDMwMTc0LDIwNzMxLDIzNjE3LDM1NjkyLDMxNjg3LDIwNTU5LDI5MjU1LDM5NTc1LDM5MTI4LDI4NDE4LDI5OTIyLDMxMDgwLDI1NzM1LDMwNjI5LDI1MzQwLDM5MDU3LDM2MTM5LDIxNjk3LDMyODU2LDIwMDUwLDIyMzc4LDMzNTI5LDMzODA1LDI0MTc5LDIwOTczLDI5OTQyLDM1NzgwLDIzNjMxLDIyMzY5LDI3OTAwLDM5MDQ3LDIzMTEwLDMwNzcyLDM5NzQ4LDM2ODQzLDMxODkzLDIxMDc4LDI1MTY5LDM4MTM4LDIwMTY2LDMzNjcwLDMzODg5LDMzNzY5LDMzOTcwLDIyNDg0LDI2NDIwLDIyMjc1LDI2MjIyLDI4MDA2LDM1ODg5LDI2MzMzLDI4Njg5LDI2Mzk5LDI3NDUwLDI2NjQ2LDI1MTE0LDIyOTcxLDE5OTcxLDIwOTMyLDI4NDIyLDI2NTc4LDI3NzkxLDIwODU0LDI2ODI3LDIyODU1LDI3NDk1LDMwMDU0LDIzODIyLDMzMDQwLDQwNzg0LDI2MDcxLDMxMDQ4LDMxMDQxLDM5NTY5LDM2MjE1LDIzNjgyLDIwMDYyLDIwMjI1LDIxNTUxLDIyODY1LDMwNzMyLDIyMTIwLDI3NjY4LDM2ODA0LDI0MzIzLDI3NzczLDI3ODc1LDM1NzU1LDI1NDg4LDMzNTk4LDMzNTk5LDMzNjAxLDMzNjAyLDMzNjA0LDMzNjA1LDMzNjA4LDMzNjEwLDMzNjExLDMzNjEyLDMzNjEzLDMzNjE0LDMzNjE5LDMzNjIxLDMzNjIyLDMzNjIzLDMzNjI0LDMzNjI1LDMzNjI5LDMzNjM0LDMzNjQ4LDMzNjQ5LDMzNjUwLDMzNjUxLDMzNjUyLDMzNjUzLDMzNjU0LDMzNjU3LDMzNjU4LDMzNjYyLDMzNjYzLDMzNjY0LDMzNjY1LDMzNjY2LDMzNjY3LDMzNjY4LDMzNjcxLDMzNjcyLDMzNjc0LDMzNjc1LDMzNjc2LDMzNjc3LDMzNjc5LDMzNjgwLDMzNjgxLDMzNjg0LDMzNjg1LDMzNjg2LDMzNjg3LDMzNjg5LDMzNjkwLDMzNjkzLDMzNjk1LDMzNjk3LDMzNjk4LDMzNjk5LDMzNzAwLDMzNzAxLDMzNzAyLDMzNzAzLDMzNzA4LDMzNzA5LDMzNzEwLDMzNzExLDMzNzE3LDMzNzIzLDMzNzI2LDMzNzI3LDMzNzMwLDMzNzMxLDMzNzMyLDMzNzM0LDMzNzM2LDMzNzM3LDMzNzM5LDMzNzQxLDMzNzQyLDMzNzQ0LDMzNzQ1LDMzNzQ2LDMzNzQ3LDMzNzQ5LDMzNzUxLDMzNzUzLDMzNzU0LDMzNzU1LDMzNzU4LDMzNzYyLDMzNzYzLDMzNzY0LDMzNzY2LDMzNzY3LDMzNzY4LDMzNzcxLDMzNzcyLDMzNzczLDI0Njg4LDI3OTY1LDI5MzAxLDI1MTkwLDM4MDMwLDM4MDg1LDIxMzE1LDM2ODAxLDMxNjE0LDIwMTkxLDM1ODc4LDIwMDk0LDQwNjYwLDM4MDY1LDM4MDY3LDIxMDY5LDI4NTA4LDM2OTYzLDI3OTczLDM1ODkyLDIyNTQ1LDIzODg0LDI3NDI0LDI3NDY1LDI2NTM4LDIxNTk1LDMzMTA4LDMyNjUyLDIyNjgxLDM0MTAzLDI0Mzc4LDI1MjUwLDI3MjA3LDM4MjAxLDI1OTcwLDI0NzA4LDI2NzI1LDMwNjMxLDIwMDUyLDIwMzkyLDI0MDM5LDM4ODA4LDI1NzcyLDMyNzI4LDIzNzg5LDIwNDMxLDMxMzczLDIwOTk5LDMzNTQwLDE5OTg4LDI0NjIzLDMxMzYzLDM4MDU0LDIwNDA1LDIwMTQ2LDMxMjA2LDI5NzQ4LDIxMjIwLDMzNDY1LDI1ODEwLDMxMTY1LDIzNTE3LDI3Nzc3LDM4NzM4LDM2NzMxLDI3NjgyLDIwNTQyLDIxMzc1LDI4MTY1LDI1ODA2LDI2MjI4LDI3Njk2LDI0NzczLDM5MDMxLDM1ODMxLDI0MTk4LDI5NzU2LDMxMzUxLDMxMTc5LDE5OTkyLDM3MDQxLDI5Njk5LDI3NzE0LDIyMjM0LDM3MTk1LDI3ODQ1LDM2MjM1LDIxMzA2LDM0NTAyLDI2MzU0LDM2NTI3LDIzNjI0LDM5NTM3LDI4MTkyLDMzNzc0LDMzNzc1LDMzNzc5LDMzNzgwLDMzNzgxLDMzNzgyLDMzNzgzLDMzNzg2LDMzNzg3LDMzNzg4LDMzNzkwLDMzNzkxLDMzNzkyLDMzNzk0LDMzNzk3LDMzNzk5LDMzODAwLDMzODAxLDMzODAyLDMzODA4LDMzODEwLDMzODExLDMzODEyLDMzODEzLDMzODE0LDMzODE1LDMzODE3LDMzODE4LDMzODE5LDMzODIyLDMzODIzLDMzODI0LDMzODI1LDMzODI2LDMzODI3LDMzODMzLDMzODM0LDMzODM1LDMzODM2LDMzODM3LDMzODM4LDMzODM5LDMzODQwLDMzODQyLDMzODQzLDMzODQ0LDMzODQ1LDMzODQ2LDMzODQ3LDMzODQ5LDMzODUwLDMzODUxLDMzODU0LDMzODU1LDMzODU2LDMzODU3LDMzODU4LDMzODU5LDMzODYwLDMzODYxLDMzODYzLDMzODY0LDMzODY1LDMzODY2LDMzODY3LDMzODY4LDMzODY5LDMzODcwLDMzODcxLDMzODcyLDMzODc0LDMzODc1LDMzODc2LDMzODc3LDMzODc4LDMzODgwLDMzODg1LDMzODg2LDMzODg3LDMzODg4LDMzODkwLDMzODkyLDMzODkzLDMzODk0LDMzODk1LDMzODk2LDMzODk4LDMzOTAyLDMzOTAzLDMzOTA0LDMzOTA2LDMzOTA4LDMzOTExLDMzOTEzLDMzOTE1LDMzOTE2LDIxNDYyLDIzMDk0LDQwODQzLDM2MjU5LDIxNDM1LDIyMjgwLDM5MDc5LDI2NDM1LDM3Mjc1LDI3ODQ5LDIwODQwLDMwMTU0LDI1MzMxLDI5MzU2LDIxMDQ4LDIxMTQ5LDMyNTcwLDI4ODIwLDMwMjY0LDIxMzY0LDQwNTIyLDI3MDYzLDMwODMwLDM4NTkyLDM1MDMzLDMyNjc2LDI4OTgyLDI5MTIzLDIwODczLDI2NTc5LDI5OTI0LDIyNzU2LDI1ODgwLDIyMTk5LDM1NzUzLDM5Mjg2LDI1MjAwLDMyNDY5LDI0ODI1LDI4OTA5LDIyNzY0LDIwMTYxLDIwMTU0LDI0NTI1LDM4ODg3LDIwMjE5LDM1NzQ4LDIwOTk1LDIyOTIyLDMyNDI3LDI1MTcyLDIwMTczLDI2MDg1LDI1MTAyLDMzNTkyLDMzOTkzLDMzNjM1LDM0NzAxLDI5MDc2LDI4MzQyLDIzNDgxLDMyNDY2LDIwODg3LDI1NTQ1LDI2NTgwLDMyOTA1LDMzNTkzLDM0ODM3LDIwNzU0LDIzNDE4LDIyOTE0LDM2Nzg1LDIwMDgzLDI3NzQxLDIwODM3LDM1MTA5LDM2NzE5LDM4NDQ2LDM0MTIyLDI5NzkwLDM4MTYwLDM4Mzg0LDI4MDcwLDMzNTA5LDI0MzY5LDI1NzQ2LDI3OTIyLDMzODMyLDMzMTM0LDQwMTMxLDIyNjIyLDM2MTg3LDE5OTc3LDIxNDQxLDMzOTE3LDMzOTE4LDMzOTE5LDMzOTIwLDMzOTIxLDMzOTIzLDMzOTI0LDMzOTI1LDMzOTI2LDMzOTMwLDMzOTMzLDMzOTM1LDMzOTM2LDMzOTM3LDMzOTM4LDMzOTM5LDMzOTQwLDMzOTQxLDMzOTQyLDMzOTQ0LDMzOTQ2LDMzOTQ3LDMzOTQ5LDMzOTUwLDMzOTUxLDMzOTUyLDMzOTU0LDMzOTU1LDMzOTU2LDMzOTU3LDMzOTU4LDMzOTU5LDMzOTYwLDMzOTYxLDMzOTYyLDMzOTYzLDMzOTY0LDMzOTY1LDMzOTY2LDMzOTY4LDMzOTY5LDMzOTcxLDMzOTczLDMzOTc0LDMzOTc1LDMzOTc5LDMzOTgwLDMzOTgyLDMzOTg0LDMzOTg2LDMzOTg3LDMzOTg5LDMzOTkwLDMzOTkxLDMzOTkyLDMzOTk1LDMzOTk2LDMzOTk4LDMzOTk5LDM0MDAyLDM0MDA0LDM0MDA1LDM0MDA3LDM0MDA4LDM0MDA5LDM0MDEwLDM0MDExLDM0MDEyLDM0MDE0LDM0MDE3LDM0MDE4LDM0MDIwLDM0MDIzLDM0MDI0LDM0MDI1LDM0MDI2LDM0MDI3LDM0MDI5LDM0MDMwLDM0MDMxLDM0MDMzLDM0MDM0LDM0MDM1LDM0MDM2LDM0MDM3LDM0MDM4LDM0MDM5LDM0MDQwLDM0MDQxLDM0MDQyLDM0MDQzLDM0MDQ1LDM0MDQ2LDM0MDQ4LDM0MDQ5LDM0MDUwLDIwMjU0LDI1OTU1LDI2NzA1LDIxOTcxLDIwMDA3LDI1NjIwLDM5NTc4LDI1MTk1LDIzMjM0LDI5NzkxLDMzMzk0LDI4MDczLDI2ODYyLDIwNzExLDMzNjc4LDMwNzIyLDI2NDMyLDIxMDQ5LDI3ODAxLDMyNDMzLDIwNjY3LDIxODYxLDI5MDIyLDMxNTc5LDI2MTk0LDI5NjQyLDMzNTE1LDI2NDQxLDIzNjY1LDIxMDI0LDI5MDUzLDM0OTIzLDM4Mzc4LDM4NDg1LDI1Nzk3LDM2MTkzLDMzMjAzLDIxODkyLDI3NzMzLDI1MTU5LDMyNTU4LDIyNjc0LDIwMjYwLDIxODMwLDM2MTc1LDI2MTg4LDE5OTc4LDIzNTc4LDM1MDU5LDI2Nzg2LDI1NDIyLDMxMjQ1LDI4OTAzLDMzNDIxLDIxMjQyLDM4OTAyLDIzNTY5LDIxNzM2LDM3MDQ1LDMyNDYxLDIyODgyLDM2MTcwLDM0NTAzLDMzMjkyLDMzMjkzLDM2MTk4LDI1NjY4LDIzNTU2LDI0OTEzLDI4MDQxLDMxMDM4LDM1Nzc0LDMwNzc1LDMwMDAzLDIxNjI3LDIwMjgwLDM2NTIzLDI4MTQ1LDIzMDcyLDMyNDUzLDMxMDcwLDI3Nzg0LDIzNDU3LDIzMTU4LDI5OTc4LDMyOTU4LDI0OTEwLDI4MTgzLDIyNzY4LDI5OTgzLDI5OTg5LDI5Mjk4LDIxMzE5LDMyNDk5LDM0MDUxLDM0MDUyLDM0MDUzLDM0MDU0LDM0MDU1LDM0MDU2LDM0MDU3LDM0MDU4LDM0MDU5LDM0MDYxLDM0MDYyLDM0MDYzLDM0MDY0LDM0MDY2LDM0MDY4LDM0MDY5LDM0MDcwLDM0MDcyLDM0MDczLDM0MDc1LDM0MDc2LDM0MDc3LDM0MDc4LDM0MDgwLDM0MDgyLDM0MDgzLDM0MDg0LDM0MDg1LDM0MDg2LDM0MDg3LDM0MDg4LDM0MDg5LDM0MDkwLDM0MDkzLDM0MDk0LDM0MDk1LDM0MDk2LDM0MDk3LDM0MDk4LDM0MDk5LDM0MTAwLDM0MTAxLDM0MTAyLDM0MTEwLDM0MTExLDM0MTEyLDM0MTEzLDM0MTE0LDM0MTE2LDM0MTE3LDM0MTE4LDM0MTE5LDM0MTIzLDM0MTI0LDM0MTI1LDM0MTI2LDM0MTI3LDM0MTI4LDM0MTI5LDM0MTMwLDM0MTMxLDM0MTMyLDM0MTMzLDM0MTM1LDM0MTM2LDM0MTM4LDM0MTM5LDM0MTQwLDM0MTQxLDM0MTQzLDM0MTQ0LDM0MTQ1LDM0MTQ2LDM0MTQ3LDM0MTQ5LDM0MTUwLDM0MTUxLDM0MTUzLDM0MTU0LDM0MTU1LDM0MTU2LDM0MTU3LDM0MTU4LDM0MTU5LDM0MTYwLDM0MTYxLDM0MTYzLDM0MTY1LDM0MTY2LDM0MTY3LDM0MTY4LDM0MTcyLDM0MTczLDM0MTc1LDM0MTc2LDM0MTc3LDMwNDY1LDMwNDI3LDIxMDk3LDMyOTg4LDIyMzA3LDI0MDcyLDIyODMzLDI5NDIyLDI2MDQ1LDI4Mjg3LDM1Nzk5LDIzNjA4LDM0NDE3LDIxMzEzLDMwNzA3LDI1MzQyLDI2MTAyLDIwMTYwLDM5MTM1LDM0NDMyLDIzNDU0LDM1NzgyLDIxNDkwLDMwNjkwLDIwMzUxLDIzNjMwLDM5NTQyLDIyOTg3LDI0MzM1LDMxMDM0LDIyNzYzLDE5OTkwLDI2NjIzLDIwMTA3LDI1MzI1LDM1NDc1LDM2ODkzLDIxMTgzLDI2MTU5LDIxOTgwLDIyMTI0LDM2ODY2LDIwMTgxLDIwMzY1LDM3MzIyLDM5MjgwLDI3NjYzLDI0MDY2LDI0NjQzLDIzNDYwLDM1MjcwLDM1Nzk3LDI1OTEwLDI1MTYzLDM5MzE4LDIzNDMyLDIzNTUxLDI1NDgwLDIxODA2LDIxNDYzLDMwMjQ2LDIwODYxLDM0MDkyLDI2NTMwLDI2ODAzLDI3NTMwLDI1MjM0LDM2NzU1LDIxNDYwLDMzMjk4LDI4MTEzLDMwMDk1LDIwMDcwLDM2MTc0LDIzNDA4LDI5MDg3LDM0MjIzLDI2MjU3LDI2MzI5LDMyNjI2LDM0NTYwLDQwNjUzLDQwNzM2LDIzNjQ2LDI2NDE1LDM2ODQ4LDI2NjQxLDI2NDYzLDI1MTAxLDMxNDQ2LDIyNjYxLDI0MjQ2LDI1OTY4LDI4NDY1LDM0MTc4LDM0MTc5LDM0MTgyLDM0MTg0LDM0MTg1LDM0MTg2LDM0MTg3LDM0MTg4LDM0MTg5LDM0MTkwLDM0MTkyLDM0MTkzLDM0MTk0LDM0MTk1LDM0MTk2LDM0MTk3LDM0MTk4LDM0MTk5LDM0MjAwLDM0MjAxLDM0MjAyLDM0MjA1LDM0MjA2LDM0MjA3LDM0MjA4LDM0MjA5LDM0MjEwLDM0MjExLDM0MjEzLDM0MjE0LDM0MjE1LDM0MjE3LDM0MjE5LDM0MjIwLDM0MjIxLDM0MjI1LDM0MjI2LDM0MjI3LDM0MjI4LDM0MjI5LDM0MjMwLDM0MjMyLDM0MjM0LDM0MjM1LDM0MjM2LDM0MjM3LDM0MjM4LDM0MjM5LDM0MjQwLDM0MjQyLDM0MjQzLDM0MjQ0LDM0MjQ1LDM0MjQ2LDM0MjQ3LDM0MjQ4LDM0MjUwLDM0MjUxLDM0MjUyLDM0MjUzLDM0MjU0LDM0MjU3LDM0MjU4LDM0MjYwLDM0MjYyLDM0MjYzLDM0MjY0LDM0MjY1LDM0MjY2LDM0MjY3LDM0MjY5LDM0MjcwLDM0MjcxLDM0MjcyLDM0MjczLDM0Mjc0LDM0Mjc1LDM0Mjc3LDM0Mjc4LDM0Mjc5LDM0MjgwLDM0MjgyLDM0MjgzLDM0Mjg0LDM0Mjg1LDM0Mjg2LDM0Mjg3LDM0Mjg4LDM0Mjg5LDM0MjkwLDM0MjkxLDM0MjkyLDM0MjkzLDM0Mjk0LDM0Mjk1LDM0Mjk2LDI0NjYxLDIxMDQ3LDMyNzgxLDI1Njg0LDM0OTI4LDI5OTkzLDI0MDY5LDI2NjQzLDI1MzMyLDM4Njg0LDIxNDUyLDI5MjQ1LDM1ODQxLDI3NzAwLDMwNTYxLDMxMjQ2LDIxNTUwLDMwNjM2LDM5MDM0LDMzMzA4LDM1ODI4LDMwODA1LDI2Mzg4LDI4ODY1LDI2MDMxLDI1NzQ5LDIyMDcwLDI0NjA1LDMxMTY5LDIxNDk2LDE5OTk3LDI3NTE1LDMyOTAyLDIzNTQ2LDIxOTg3LDIyMjM1LDIwMjgyLDIwMjg0LDM5MjgyLDI0MDUxLDI2NDk0LDMyODI0LDI0NTc4LDM5MDQyLDM2ODY1LDIzNDM1LDM1NzcyLDM1ODI5LDI1NjI4LDMzMzY4LDI1ODIyLDIyMDEzLDMzNDg3LDM3MjIxLDIwNDM5LDMyMDMyLDM2ODk1LDMxOTAzLDIwNzIzLDIyNjA5LDI4MzM1LDIzNDg3LDM1Nzg1LDMyODk5LDM3MjQwLDMzOTQ4LDMxNjM5LDM0NDI5LDM4NTM5LDM4NTQzLDMyNDg1LDM5NjM1LDMwODYyLDIzNjgxLDMxMzE5LDM2OTMwLDM4NTY3LDMxMDcxLDIzMzg1LDI1NDM5LDMxNDk5LDM0MDAxLDI2Nzk3LDIxNzY2LDMyNTUzLDI5NzEyLDMyMDM0LDM4MTQ1LDI1MTUyLDIyNjA0LDIwMTgyLDIzNDI3LDIyOTA1LDIyNjEyLDM0Mjk3LDM0Mjk4LDM0MzAwLDM0MzAxLDM0MzAyLDM0MzA0LDM0MzA1LDM0MzA2LDM0MzA3LDM0MzA4LDM0MzEwLDM0MzExLDM0MzEyLDM0MzEzLDM0MzE0LDM0MzE1LDM0MzE2LDM0MzE3LDM0MzE4LDM0MzE5LDM0MzIwLDM0MzIyLDM0MzIzLDM0MzI0LDM0MzI1LDM0MzI3LDM0MzI4LDM0MzI5LDM0MzMwLDM0MzMxLDM0MzMyLDM0MzMzLDM0MzM0LDM0MzM1LDM0MzM2LDM0MzM3LDM0MzM4LDM0MzM5LDM0MzQwLDM0MzQxLDM0MzQyLDM0MzQ0LDM0MzQ2LDM0MzQ3LDM0MzQ4LDM0MzQ5LDM0MzUwLDM0MzUxLDM0MzUyLDM0MzUzLDM0MzU0LDM0MzU1LDM0MzU2LDM0MzU3LDM0MzU4LDM0MzU5LDM0MzYxLDM0MzYyLDM0MzYzLDM0MzY1LDM0MzY2LDM0MzY3LDM0MzY4LDM0MzY5LDM0MzcwLDM0MzcxLDM0MzcyLDM0MzczLDM0Mzc0LDM0Mzc1LDM0Mzc2LDM0Mzc3LDM0Mzc4LDM0Mzc5LDM0MzgwLDM0Mzg2LDM0Mzg3LDM0Mzg5LDM0MzkwLDM0MzkxLDM0MzkyLDM0MzkzLDM0Mzk1LDM0Mzk2LDM0Mzk3LDM0Mzk5LDM0NDAwLDM0NDAxLDM0NDAzLDM0NDA0LDM0NDA1LDM0NDA2LDM0NDA3LDM0NDA4LDM0NDA5LDM0NDEwLDI5NTQ5LDI1Mzc0LDM2NDI3LDM2MzY3LDMyOTc0LDMzNDkyLDI1MjYwLDIxNDg4LDI3ODg4LDM3MjE0LDIyODI2LDI0NTc3LDI3NzYwLDIyMzQ5LDI1Njc0LDM2MTM4LDMwMjUxLDI4MzkzLDIyMzYzLDI3MjY0LDMwMTkyLDI4NTI1LDM1ODg1LDM1ODQ4LDIyMzc0LDI3NjMxLDM0OTYyLDMwODk5LDI1NTA2LDIxNDk3LDI4ODQ1LDI3NzQ4LDIyNjE2LDI1NjQyLDIyNTMwLDI2ODQ4LDMzMTc5LDIxNzc2LDMxOTU4LDIwNTA0LDM2NTM4LDI4MTA4LDM2MjU1LDI4OTA3LDI1NDg3LDI4MDU5LDI4MzcyLDMyNDg2LDMzNzk2LDI2NjkxLDM2ODY3LDI4MTIwLDM4NTE4LDM1NzUyLDIyODcxLDI5MzA1LDM0Mjc2LDMzMTUwLDMwMTQwLDM1NDY2LDI2Nzk5LDIxMDc2LDM2Mzg2LDM4MTYxLDI1NTUyLDM5MDY0LDM2NDIwLDIxODg0LDIwMzA3LDI2MzY3LDIyMTU5LDI0Nzg5LDI4MDUzLDIxMDU5LDIzNjI1LDIyODI1LDI4MTU1LDIyNjM1LDMwMDAwLDI5OTgwLDI0Njg0LDMzMzAwLDMzMDk0LDI1MzYxLDI2NDY1LDM2ODM0LDMwNTIyLDM2MzM5LDM2MTQ4LDM4MDgxLDI0MDg2LDIxMzgxLDIxNTQ4LDI4ODY3LDM0NDEzLDM0NDE1LDM0NDE2LDM0NDE4LDM0NDE5LDM0NDIwLDM0NDIxLDM0NDIyLDM0NDIzLDM0NDI0LDM0NDM1LDM0NDM2LDM0NDM3LDM0NDM4LDM0NDM5LDM0NDQwLDM0NDQxLDM0NDQ2LDM0NDQ3LDM0NDQ4LDM0NDQ5LDM0NDUwLDM0NDUyLDM0NDU0LDM0NDU1LDM0NDU2LDM0NDU3LDM0NDU4LDM0NDU5LDM0NDYyLDM0NDYzLDM0NDY0LDM0NDY1LDM0NDY2LDM0NDY5LDM0NDcwLDM0NDc1LDM0NDc3LDM0NDc4LDM0NDgyLDM0NDgzLDM0NDg3LDM0NDg4LDM0NDg5LDM0NDkxLDM0NDkyLDM0NDkzLDM0NDk0LDM0NDk1LDM0NDk3LDM0NDk4LDM0NDk5LDM0NTAxLDM0NTA0LDM0NTA4LDM0NTA5LDM0NTE0LDM0NTE1LDM0NTE3LDM0NTE4LDM0NTE5LDM0NTIyLDM0NTI0LDM0NTI1LDM0NTI4LDM0NTI5LDM0NTMwLDM0NTMxLDM0NTMzLDM0NTM0LDM0NTM1LDM0NTM2LDM0NTM4LDM0NTM5LDM0NTQwLDM0NTQzLDM0NTQ5LDM0NTUwLDM0NTUxLDM0NTU0LDM0NTU1LDM0NTU2LDM0NTU3LDM0NTU5LDM0NTYxLDM0NTY0LDM0NTY1LDM0NTY2LDM0NTcxLDM0NTcyLDM0NTc0LDM0NTc1LDM0NTc2LDM0NTc3LDM0NTgwLDM0NTgyLDI3NzEyLDI0MzExLDIwNTcyLDIwMTQxLDI0MjM3LDI1NDAyLDMzMzUxLDM2ODkwLDI2NzA0LDM3MjMwLDMwNjQzLDIxNTE2LDM4MTA4LDI0NDIwLDMxNDYxLDI2NzQyLDI1NDEzLDMxNTcwLDMyNDc5LDMwMTcxLDIwNTk5LDI1MjM3LDIyODM2LDM2ODc5LDIwOTg0LDMxMTcxLDMxMzYxLDIyMjcwLDI0NDY2LDM2ODg0LDI4MDM0LDIzNjQ4LDIyMzAzLDIxNTIwLDIwODIwLDI4MjM3LDIyMjQyLDI1NTEyLDM5MDU5LDMzMTUxLDM0NTgxLDM1MTE0LDM2ODY0LDIxNTM0LDIzNjYzLDMzMjE2LDI1MzAyLDI1MTc2LDMzMDczLDQwNTAxLDM4NDY0LDM5NTM0LDM5NTQ4LDI2OTI1LDIyOTQ5LDI1Mjk5LDIxODIyLDI1MzY2LDIxNzAzLDM0NTIxLDI3OTY0LDIzMDQzLDI5OTI2LDM0OTcyLDI3NDk4LDIyODA2LDM1OTE2LDI0MzY3LDI4Mjg2LDI5NjA5LDM5MDM3LDIwMDI0LDI4OTE5LDIzNDM2LDMwODcxLDI1NDA1LDI2MjAyLDMwMzU4LDI0Nzc5LDIzNDUxLDIzMTEzLDE5OTc1LDMzMTA5LDI3NzU0LDI5NTc5LDIwMTI5LDI2NTA1LDMyNTkzLDI0NDQ4LDI2MTA2LDI2Mzk1LDI0NTM2LDIyOTE2LDIzMDQxLDM0NTg1LDM0NTg3LDM0NTg5LDM0NTkxLDM0NTkyLDM0NTk2LDM0NTk4LDM0NTk5LDM0NjAwLDM0NjAyLDM0NjAzLDM0NjA0LDM0NjA1LDM0NjA3LDM0NjA4LDM0NjEwLDM0NjExLDM0NjEzLDM0NjE0LDM0NjE2LDM0NjE3LDM0NjE4LDM0NjIwLDM0NjIxLDM0NjI0LDM0NjI1LDM0NjI2LDM0NjI3LDM0NjI4LDM0NjI5LDM0NjMwLDM0NjM0LDM0NjM1LDM0NjM3LDM0NjM5LDM0NjQwLDM0NjQxLDM0NjQyLDM0NjQ0LDM0NjQ1LDM0NjQ2LDM0NjQ4LDM0NjUwLDM0NjUxLDM0NjUyLDM0NjUzLDM0NjU0LDM0NjU1LDM0NjU3LDM0NjU4LDM0NjYyLDM0NjYzLDM0NjY0LDM0NjY1LDM0NjY2LDM0NjY3LDM0NjY4LDM0NjY5LDM0NjcxLDM0NjczLDM0Njc0LDM0Njc1LDM0Njc3LDM0Njc5LDM0NjgwLDM0NjgxLDM0NjgyLDM0Njg3LDM0Njg4LDM0Njg5LDM0NjkyLDM0Njk0LDM0Njk1LDM0Njk3LDM0Njk4LDM0NzAwLDM0NzAyLDM0NzAzLDM0NzA0LDM0NzA1LDM0NzA2LDM0NzA4LDM0NzA5LDM0NzEwLDM0NzEyLDM0NzEzLDM0NzE0LDM0NzE1LDM0NzE2LDM0NzE3LDM0NzE4LDM0NzIwLDM0NzIxLDM0NzIyLDM0NzIzLDM0NzI0LDI0MDEzLDI0NDk0LDIxMzYxLDM4ODg2LDM2ODI5LDI2NjkzLDIyMjYwLDIxODA3LDI0Nzk5LDIwMDI2LDI4NDkzLDMyNTAwLDMzNDc5LDMzODA2LDIyOTk2LDIwMjU1LDIwMjY2LDIzNjE0LDMyNDI4LDI2NDEwLDM0MDc0LDIxNjE5LDMwMDMxLDMyOTYzLDIxODkwLDM5NzU5LDIwMzAxLDI4MjA1LDM1ODU5LDIzNTYxLDI0OTQ0LDIxMzU1LDMwMjM5LDI4MjAxLDM0NDQyLDI1OTkxLDM4Mzk1LDMyNDQxLDIxNTYzLDMxMjgzLDMyMDEwLDM4MzgyLDIxOTg1LDMyNzA1LDI5OTM0LDI1MzczLDM0NTgzLDI4MDY1LDMxMzg5LDI1MTA1LDI2MDE3LDIxMzUxLDI1NTY5LDI3Nzc5LDI0MDQzLDIxNTk2LDM4MDU2LDIwMDQ0LDI3NzQ1LDM1ODIwLDIzNjI3LDI2MDgwLDMzNDM2LDI2NzkxLDIxNTY2LDIxNTU2LDI3NTk1LDI3NDk0LDIwMTE2LDI1NDEwLDIxMzIwLDMzMzEwLDIwMjM3LDIwMzk4LDIyMzY2LDI1MDk4LDM4NjU0LDI2MjEyLDI5Mjg5LDIxMjQ3LDIxMTUzLDI0NzM1LDM1ODIzLDI2MTMyLDI5MDgxLDI2NTEyLDM1MTk5LDMwODAyLDMwNzE3LDI2MjI0LDIyMDc1LDIxNTYwLDM4MTc3LDI5MzA2LDM0NzI1LDM0NzI2LDM0NzI3LDM0NzI5LDM0NzMwLDM0NzM0LDM0NzM2LDM0NzM3LDM0NzM4LDM0NzQwLDM0NzQyLDM0NzQzLDM0NzQ0LDM0NzQ1LDM0NzQ3LDM0NzQ4LDM0NzUwLDM0NzUxLDM0NzUzLDM0NzU0LDM0NzU1LDM0NzU2LDM0NzU3LDM0NzU5LDM0NzYwLDM0NzYxLDM0NzY0LDM0NzY1LDM0NzY2LDM0NzY3LDM0NzY4LDM0NzcyLDM0NzczLDM0Nzc0LDM0Nzc1LDM0Nzc2LDM0Nzc3LDM0Nzc4LDM0NzgwLDM0NzgxLDM0NzgyLDM0NzgzLDM0Nzg1LDM0Nzg2LDM0Nzg3LDM0Nzg4LDM0NzkwLDM0NzkxLDM0NzkyLDM0NzkzLDM0Nzk1LDM0Nzk2LDM0Nzk3LDM0Nzk5LDM0ODAwLDM0ODAxLDM0ODAyLDM0ODAzLDM0ODA0LDM0ODA1LDM0ODA2LDM0ODA3LDM0ODA4LDM0ODEwLDM0ODExLDM0ODEyLDM0ODEzLDM0ODE1LDM0ODE2LDM0ODE3LDM0ODE4LDM0ODIwLDM0ODIxLDM0ODIyLDM0ODIzLDM0ODI0LDM0ODI1LDM0ODI3LDM0ODI4LDM0ODI5LDM0ODMwLDM0ODMxLDM0ODMyLDM0ODMzLDM0ODM0LDM0ODM2LDM0ODM5LDM0ODQwLDM0ODQxLDM0ODQyLDM0ODQ0LDM0ODQ1LDM0ODQ2LDM0ODQ3LDM0ODQ4LDM0ODUxLDMxMjMyLDI0Njg3LDI0MDc2LDI0NzEzLDMzMTgxLDIyODA1LDI0Nzk2LDI5MDYwLDI4OTExLDI4MzMwLDI3NzI4LDI5MzEyLDI3MjY4LDM0OTg5LDI0MTA5LDIwMDY0LDIzMjE5LDIxOTE2LDM4MTE1LDI3OTI3LDMxOTk1LDM4NTUzLDI1MTAzLDMyNDU0LDMwNjA2LDM0NDMwLDIxMjgzLDM4Njg2LDM2NzU4LDI2MjQ3LDIzNzc3LDIwMzg0LDI5NDIxLDE5OTc5LDIxNDE0LDIyNzk5LDIxNTIzLDI1NDcyLDM4MTg0LDIwODA4LDIwMTg1LDQwMDkyLDMyNDIwLDIxNjg4LDM2MTMyLDM0OTAwLDMzMzM1LDM4Mzg2LDI4MDQ2LDI0MzU4LDIzMjQ0LDI2MTc0LDM4NTA1LDI5NjE2LDI5NDg2LDIxNDM5LDMzMTQ2LDM5MzAxLDMyNjczLDIzNDY2LDM4NTE5LDM4NDgwLDMyNDQ3LDMwNDU2LDIxNDEwLDM4MjYyLDM5MzIxLDMxNjY1LDM1MTQwLDI4MjQ4LDIwMDY1LDMyNzI0LDMxMDc3LDM1ODE0LDI0ODE5LDIxNzA5LDIwMTM5LDM5MDMzLDI0MDU1LDI3MjMzLDIwNjg3LDIxNTIxLDM1OTM3LDMzODMxLDMwODEzLDM4NjYwLDIxMDY2LDIxNzQyLDIyMTc5LDM4MTQ0LDI4MDQwLDIzNDc3LDI4MTAyLDI2MTk1LDM0ODUyLDM0ODUzLDM0ODU0LDM0ODU1LDM0ODU2LDM0ODU3LDM0ODU4LDM0ODU5LDM0ODYwLDM0ODYxLDM0ODYyLDM0ODYzLDM0ODY0LDM0ODY1LDM0ODY3LDM0ODY4LDM0ODY5LDM0ODcwLDM0ODcxLDM0ODcyLDM0ODc0LDM0ODc1LDM0ODc3LDM0ODc4LDM0ODc5LDM0ODgxLDM0ODgyLDM0ODgzLDM0ODg2LDM0ODg3LDM0ODg4LDM0ODg5LDM0ODkwLDM0ODkxLDM0ODk0LDM0ODk1LDM0ODk2LDM0ODk3LDM0ODk4LDM0ODk5LDM0OTAxLDM0OTAyLDM0OTA0LDM0OTA2LDM0OTA3LDM0OTA4LDM0OTA5LDM0OTEwLDM0OTExLDM0OTEyLDM0OTE4LDM0OTE5LDM0OTIyLDM0OTI1LDM0OTI3LDM0OTI5LDM0OTMxLDM0OTMyLDM0OTMzLDM0OTM0LDM0OTM2LDM0OTM3LDM0OTM4LDM0OTM5LDM0OTQwLDM0OTQ0LDM0OTQ3LDM0OTUwLDM0OTUxLDM0OTUzLDM0OTU0LDM0OTU2LDM0OTU4LDM0OTU5LDM0OTYwLDM0OTYxLDM0OTYzLDM0OTY0LDM0OTY1LDM0OTY3LDM0OTY4LDM0OTY5LDM0OTcwLDM0OTcxLDM0OTczLDM0OTc0LDM0OTc1LDM0OTc2LDM0OTc3LDM0OTc5LDM0OTgxLDM0OTgyLDM0OTgzLDM0OTg0LDM0OTg1LDM0OTg2LDIzNTY3LDIzMzg5LDI2NjU3LDMyOTE4LDIxODgwLDMxNTA1LDI1OTI4LDI2OTY0LDIwMTIzLDI3NDYzLDM0NjM4LDM4Nzk1LDIxMzI3LDI1Mzc1LDI1NjU4LDM3MDM0LDI2MDEyLDMyOTYxLDM1ODU2LDIwODg5LDI2ODAwLDIxMzY4LDM0ODA5LDI1MDMyLDI3ODQ0LDI3ODk5LDM1ODc0LDIzNjMzLDM0MjE4LDMzNDU1LDM4MTU2LDI3NDI3LDM2NzYzLDI2MDMyLDI0NTcxLDI0NTE1LDIwNDQ5LDM0ODg1LDI2MTQzLDMzMTI1LDI5NDgxLDI0ODI2LDIwODUyLDIxMDA5LDIyNDExLDI0NDE4LDM3MDI2LDM0ODkyLDM3MjY2LDI0MTg0LDI2NDQ3LDI0NjE1LDIyOTk1LDIwODA0LDIwOTgyLDMzMDE2LDIxMjU2LDI3NzY5LDM4NTk2LDI5MDY2LDIwMjQxLDIwNDYyLDMyNjcwLDI2NDI5LDIxOTU3LDM4MTUyLDMxMTY4LDM0OTY2LDMyNDgzLDIyNjg3LDI1MTAwLDM4NjU2LDM0Mzk0LDIyMDQwLDM5MDM1LDI0NDY0LDM1NzY4LDMzOTg4LDM3MjA3LDIxNDY1LDI2MDkzLDI0MjA3LDMwMDQ0LDI0Njc2LDMyMTEwLDIzMTY3LDMyNDkwLDMyNDkzLDM2NzEzLDIxOTI3LDIzNDU5LDI0NzQ4LDI2MDU5LDI5NTcyLDM0OTg4LDM0OTkwLDM0OTkxLDM0OTkyLDM0OTk0LDM0OTk1LDM0OTk2LDM0OTk3LDM0OTk4LDM1MDAwLDM1MDAxLDM1MDAyLDM1MDAzLDM1MDA1LDM1MDA2LDM1MDA3LDM1MDA4LDM1MDExLDM1MDEyLDM1MDE1LDM1MDE2LDM1MDE4LDM1MDE5LDM1MDIwLDM1MDIxLDM1MDIzLDM1MDI0LDM1MDI1LDM1MDI3LDM1MDMwLDM1MDMxLDM1MDM0LDM1MDM1LDM1MDM2LDM1MDM3LDM1MDM4LDM1MDQwLDM1MDQxLDM1MDQ2LDM1MDQ3LDM1MDQ5LDM1MDUwLDM1MDUxLDM1MDUyLDM1MDUzLDM1MDU0LDM1MDU1LDM1MDU4LDM1MDYxLDM1MDYyLDM1MDYzLDM1MDY2LDM1MDY3LDM1MDY5LDM1MDcxLDM1MDcyLDM1MDczLDM1MDc1LDM1MDc2LDM1MDc3LDM1MDc4LDM1MDc5LDM1MDgwLDM1MDgxLDM1MDgzLDM1MDg0LDM1MDg1LDM1MDg2LDM1MDg3LDM1MDg5LDM1MDkyLDM1MDkzLDM1MDk0LDM1MDk1LDM1MDk2LDM1MTAwLDM1MTAxLDM1MTAyLDM1MTAzLDM1MTA0LDM1MTA2LDM1MTA3LDM1MTA4LDM1MTEwLDM1MTExLDM1MTEyLDM1MTEzLDM1MTE2LDM1MTE3LDM1MTE4LDM1MTE5LDM1MTIxLDM1MTIyLDM1MTIzLDM1MTI1LDM1MTI3LDM2ODczLDMwMzA3LDMwNTA1LDMyNDc0LDM4NzcyLDM0MjAzLDIzMzk4LDMxMzQ4LDM4NjM0LDM0ODgwLDIxMTk1LDI5MDcxLDI0NDkwLDI2MDkyLDM1ODEwLDIzNTQ3LDM5NTM1LDI0MDMzLDI3NTI5LDI3NzM5LDM1NzU3LDM1NzU5LDM2ODc0LDM2ODA1LDIxMzg3LDI1Mjc2LDQwNDg2LDQwNDkzLDIxNTY4LDIwMDExLDMzNDY5LDI5MjczLDM0NDYwLDIzODMwLDM0OTA1LDI4MDc5LDM4NTk3LDIxNzEzLDIwMTIyLDM1NzY2LDI4OTM3LDIxNjkzLDM4NDA5LDI4ODk1LDI4MTUzLDMwNDE2LDIwMDA1LDMwNzQwLDM0NTc4LDIzNzIxLDI0MzEwLDM1MzI4LDM5MDY4LDM4NDE0LDI4ODE0LDI3ODM5LDIyODUyLDI1NTEzLDMwNTI0LDM0ODkzLDI4NDM2LDMzMzk1LDIyNTc2LDI5MTQxLDIxMzg4LDMwNzQ2LDM4NTkzLDIxNzYxLDI0NDIyLDI4OTc2LDIzNDc2LDM1ODY2LDM5NTY0LDI3NTIzLDIyODMwLDQwNDk1LDMxMjA3LDI2NDcyLDI1MTk2LDIwMzM1LDMwMTEzLDMyNjUwLDI3OTE1LDM4NDUxLDI3Njg3LDIwMjA4LDMwMTYyLDIwODU5LDI2Njc5LDI4NDc4LDM2OTkyLDMzMTM2LDIyOTM0LDI5ODE0LDM1MTI4LDM1MTI5LDM1MTMwLDM1MTMxLDM1MTMyLDM1MTMzLDM1MTM0LDM1MTM1LDM1MTM2LDM1MTM4LDM1MTM5LDM1MTQxLDM1MTQyLDM1MTQzLDM1MTQ0LDM1MTQ1LDM1MTQ2LDM1MTQ3LDM1MTQ4LDM1MTQ5LDM1MTUwLDM1MTUxLDM1MTUyLDM1MTUzLDM1MTU0LDM1MTU1LDM1MTU2LDM1MTU3LDM1MTU4LDM1MTU5LDM1MTYwLDM1MTYxLDM1MTYyLDM1MTYzLDM1MTY0LDM1MTY1LDM1MTY4LDM1MTY5LDM1MTcwLDM1MTcxLDM1MTcyLDM1MTczLDM1MTc1LDM1MTc2LDM1MTc3LDM1MTc4LDM1MTc5LDM1MTgwLDM1MTgxLDM1MTgyLDM1MTgzLDM1MTg0LDM1MTg1LDM1MTg2LDM1MTg3LDM1MTg4LDM1MTg5LDM1MTkwLDM1MTkxLDM1MTkyLDM1MTkzLDM1MTk0LDM1MTk2LDM1MTk3LDM1MTk4LDM1MjAwLDM1MjAyLDM1MjA0LDM1MjA1LDM1MjA3LDM1MjA4LDM1MjA5LDM1MjEwLDM1MjExLDM1MjEyLDM1MjEzLDM1MjE0LDM1MjE1LDM1MjE2LDM1MjE3LDM1MjE4LDM1MjE5LDM1MjIwLDM1MjIxLDM1MjIyLDM1MjIzLDM1MjI0LDM1MjI1LDM1MjI2LDM1MjI3LDM1MjI4LDM1MjI5LDM1MjMwLDM1MjMxLDM1MjMyLDM1MjMzLDI1NjcxLDIzNTkxLDM2OTY1LDMxMzc3LDM1ODc1LDIzMDAyLDIxNjc2LDMzMjgwLDMzNjQ3LDM1MjAxLDMyNzY4LDI2OTI4LDIyMDk0LDMyODIyLDI5MjM5LDM3MzI2LDIwOTE4LDIwMDYzLDM5MDI5LDI1NDk0LDE5OTk0LDIxNDk0LDI2MzU1LDMzMDk5LDIyODEyLDI4MDgyLDE5OTY4LDIyNzc3LDIxMzA3LDI1NTU4LDM4MTI5LDIwMzgxLDIwMjM0LDM0OTE1LDM5MDU2LDIyODM5LDM2OTUxLDMxMjI3LDIwMjAyLDMzMDA4LDMwMDk3LDI3Nzc4LDIzNDUyLDIzMDE2LDI0NDEzLDI2ODg1LDM0NDMzLDIwNTA2LDI0MDUwLDIwMDU3LDMwNjkxLDIwMTk3LDMzNDAyLDI1MjMzLDI2MTMxLDM3MDA5LDIzNjczLDIwMTU5LDI0NDQxLDMzMjIyLDM2OTIwLDMyOTAwLDMwMTIzLDIwMTM0LDM1MDI4LDI0ODQ3LDI3NTg5LDI0NTE4LDIwMDQxLDMwNDEwLDI4MzIyLDM1ODExLDM1NzU4LDM1ODUwLDM1NzkzLDI0MzIyLDMyNzY0LDMyNzE2LDMyNDYyLDMzNTg5LDMzNjQzLDIyMjQwLDI3NTc1LDM4ODk5LDM4NDUyLDIzMDM1LDIxNTM1LDM4MTM0LDI4MTM5LDIzNDkzLDM5Mjc4LDIzNjA5LDI0MzQxLDM4NTQ0LDM1MjM0LDM1MjM1LDM1MjM2LDM1MjM3LDM1MjM4LDM1MjM5LDM1MjQwLDM1MjQxLDM1MjQyLDM1MjQzLDM1MjQ0LDM1MjQ1LDM1MjQ2LDM1MjQ3LDM1MjQ4LDM1MjQ5LDM1MjUwLDM1MjUxLDM1MjUyLDM1MjUzLDM1MjU0LDM1MjU1LDM1MjU2LDM1MjU3LDM1MjU4LDM1MjU5LDM1MjYwLDM1MjYxLDM1MjYyLDM1MjYzLDM1MjY0LDM1MjY3LDM1Mjc3LDM1MjgzLDM1Mjg0LDM1Mjg1LDM1Mjg3LDM1Mjg4LDM1Mjg5LDM1MjkxLDM1MjkzLDM1Mjk1LDM1Mjk2LDM1Mjk3LDM1Mjk4LDM1MzAwLDM1MzAzLDM1MzA0LDM1MzA1LDM1MzA2LDM1MzA4LDM1MzA5LDM1MzEwLDM1MzEyLDM1MzEzLDM1MzE0LDM1MzE2LDM1MzE3LDM1MzE4LDM1MzE5LDM1MzIwLDM1MzIxLDM1MzIyLDM1MzIzLDM1MzI0LDM1MzI1LDM1MzI2LDM1MzI3LDM1MzI5LDM1MzMwLDM1MzMxLDM1MzMyLDM1MzMzLDM1MzM0LDM1MzM2LDM1MzM3LDM1MzM4LDM1MzM5LDM1MzQwLDM1MzQxLDM1MzQyLDM1MzQzLDM1MzQ0LDM1MzQ1LDM1MzQ2LDM1MzQ3LDM1MzQ4LDM1MzQ5LDM1MzUwLDM1MzUxLDM1MzUyLDM1MzUzLDM1MzU0LDM1MzU1LDM1MzU2LDM1MzU3LDIxMzYwLDMzNTIxLDI3MTg1LDIzMTU2LDQwNTYwLDI0MjEyLDMyNTUyLDMzNzIxLDMzODI4LDMzODI5LDMzNjM5LDM0NjMxLDM2ODE0LDM2MTk0LDMwNDA4LDI0NDMzLDM5MDYyLDMwODI4LDI2MTQ0LDIxNzI3LDI1MzE3LDIwMzIzLDMzMjE5LDMwMTUyLDI0MjQ4LDM4NjA1LDM2MzYyLDM0NTUzLDIxNjQ3LDI3ODkxLDI4MDQ0LDI3NzA0LDI0NzAzLDIxMTkxLDI5OTkyLDI0MTg5LDIwMjQ4LDI0NzM2LDI0NTUxLDIzNTg4LDMwMDAxLDM3MDM4LDM4MDgwLDI5MzY5LDI3ODMzLDI4MjE2LDM3MTkzLDI2Mzc3LDIxNDUxLDIxNDkxLDIwMzA1LDM3MzIxLDM1ODI1LDIxNDQ4LDI0MTg4LDM2ODAyLDI4MTMyLDIwMTEwLDMwNDAyLDI3MDE0LDM0Mzk4LDI0ODU4LDMzMjg2LDIwMzEzLDIwNDQ2LDM2OTI2LDQwMDYwLDI0ODQxLDI4MTg5LDI4MTgwLDM4NTMzLDIwMTA0LDIzMDg5LDM4NjMyLDE5OTgyLDIzNjc5LDMxMTYxLDIzNDMxLDM1ODIxLDMyNzAxLDI5NTc3LDIyNDk1LDMzNDE5LDM3MDU3LDIxNTA1LDM2OTM1LDIxOTQ3LDIzNzg2LDI0NDgxLDI0ODQwLDI3NDQyLDI5NDI1LDMyOTQ2LDM1NDY1LDM1MzU4LDM1MzU5LDM1MzYwLDM1MzYxLDM1MzYyLDM1MzYzLDM1MzY0LDM1MzY1LDM1MzY2LDM1MzY3LDM1MzY4LDM1MzY5LDM1MzcwLDM1MzcxLDM1MzcyLDM1MzczLDM1Mzc0LDM1Mzc1LDM1Mzc2LDM1Mzc3LDM1Mzc4LDM1Mzc5LDM1MzgwLDM1MzgxLDM1MzgyLDM1MzgzLDM1Mzg0LDM1Mzg1LDM1Mzg2LDM1Mzg3LDM1Mzg4LDM1Mzg5LDM1MzkxLDM1MzkyLDM1MzkzLDM1Mzk0LDM1Mzk1LDM1Mzk2LDM1Mzk3LDM1Mzk4LDM1Mzk5LDM1NDAxLDM1NDAyLDM1NDAzLDM1NDA0LDM1NDA1LDM1NDA2LDM1NDA3LDM1NDA4LDM1NDA5LDM1NDEwLDM1NDExLDM1NDEyLDM1NDEzLDM1NDE0LDM1NDE1LDM1NDE2LDM1NDE3LDM1NDE4LDM1NDE5LDM1NDIwLDM1NDIxLDM1NDIyLDM1NDIzLDM1NDI0LDM1NDI1LDM1NDI2LDM1NDI3LDM1NDI4LDM1NDI5LDM1NDMwLDM1NDMxLDM1NDMyLDM1NDMzLDM1NDM0LDM1NDM1LDM1NDM2LDM1NDM3LDM1NDM4LDM1NDM5LDM1NDQwLDM1NDQxLDM1NDQyLDM1NDQzLDM1NDQ0LDM1NDQ1LDM1NDQ2LDM1NDQ3LDM1NDQ4LDM1NDUwLDM1NDUxLDM1NDUyLDM1NDUzLDM1NDU0LDM1NDU1LDM1NDU2LDI4MDIwLDIzNTA3LDM1MDI5LDM5MDQ0LDM1OTQ3LDM5NTMzLDQwNDk5LDI4MTcwLDIwOTAwLDIwODAzLDIyNDM1LDM0OTQ1LDIxNDA3LDI1NTg4LDM2NzU3LDIyMjUzLDIxNTkyLDIyMjc4LDI5NTAzLDI4MzA0LDMyNTM2LDM2ODI4LDMzNDg5LDI0ODk1LDI0NjE2LDM4NDk4LDI2MzUyLDMyNDIyLDM2MjM0LDM2MjkxLDM4MDUzLDIzNzMxLDMxOTA4LDI2Mzc2LDI0NzQyLDM4NDA1LDMyNzkyLDIwMTEzLDM3MDk1LDIxMjQ4LDM4NTA0LDIwODAxLDM2ODE2LDM0MTY0LDM3MjEzLDI2MTk3LDM4OTAxLDIzMzgxLDIxMjc3LDMwNzc2LDI2NDM0LDI2Njg1LDIxNzA1LDI4Nzk4LDIzNDcyLDM2NzMzLDIwODc3LDIyMzEyLDIxNjgxLDI1ODc0LDI2MjQyLDM2MTkwLDM2MTYzLDMzMDM5LDMzOTAwLDM2OTczLDMxOTY3LDIwOTkxLDM0Mjk5LDI2NTMxLDI2MDg5LDI4NTc3LDM0NDY4LDM2NDgxLDIyMTIyLDM2ODk2LDMwMzM4LDI4NzkwLDI5MTU3LDM2MTMxLDI1MzIxLDIxMDE3LDI3OTAxLDM2MTU2LDI0NTkwLDIyNjg2LDI0OTc0LDI2MzY2LDM2MTkyLDI1MTY2LDIxOTM5LDI4MTk1LDI2NDEzLDM2NzExLDM1NDU3LDM1NDU4LDM1NDU5LDM1NDYwLDM1NDYxLDM1NDYyLDM1NDYzLDM1NDY0LDM1NDY3LDM1NDY4LDM1NDY5LDM1NDcwLDM1NDcxLDM1NDcyLDM1NDczLDM1NDc0LDM1NDc2LDM1NDc3LDM1NDc4LDM1NDc5LDM1NDgwLDM1NDgxLDM1NDgyLDM1NDgzLDM1NDg0LDM1NDg1LDM1NDg2LDM1NDg3LDM1NDg4LDM1NDg5LDM1NDkwLDM1NDkxLDM1NDkyLDM1NDkzLDM1NDk0LDM1NDk1LDM1NDk2LDM1NDk3LDM1NDk4LDM1NDk5LDM1NTAwLDM1NTAxLDM1NTAyLDM1NTAzLDM1NTA0LDM1NTA1LDM1NTA2LDM1NTA3LDM1NTA4LDM1NTA5LDM1NTEwLDM1NTExLDM1NTEyLDM1NTEzLDM1NTE0LDM1NTE1LDM1NTE2LDM1NTE3LDM1NTE4LDM1NTE5LDM1NTIwLDM1NTIxLDM1NTIyLDM1NTIzLDM1NTI0LDM1NTI1LDM1NTI2LDM1NTI3LDM1NTI4LDM1NTI5LDM1NTMwLDM1NTMxLDM1NTMyLDM1NTMzLDM1NTM0LDM1NTM1LDM1NTM2LDM1NTM3LDM1NTM4LDM1NTM5LDM1NTQwLDM1NTQxLDM1NTQyLDM1NTQzLDM1NTQ0LDM1NTQ1LDM1NTQ2LDM1NTQ3LDM1NTQ4LDM1NTQ5LDM1NTUwLDM1NTUxLDM1NTUyLDM1NTUzLDM1NTU0LDM1NTU1LDM4MTEzLDM4MzkyLDMwNTA0LDI2NjI5LDI3MDQ4LDIxNjQzLDIwMDQ1LDI4ODU2LDM1Nzg0LDI1Njg4LDI1OTk1LDIzNDI5LDMxMzY0LDIwNTM4LDIzNTI4LDMwNjUxLDI3NjE3LDM1NDQ5LDMxODk2LDI3ODM4LDMwNDE1LDI2MDI1LDM2NzU5LDIzODUzLDIzNjM3LDM0MzYwLDI2NjMyLDIxMzQ0LDI1MTEyLDMxNDQ5LDI4MjUxLDMyNTA5LDI3MTY3LDMxNDU2LDI0NDMyLDI4NDY3LDI0MzUyLDI1NDg0LDI4MDcyLDI2NDU0LDE5OTc2LDI0MDgwLDM2MTM0LDIwMTgzLDMyOTYwLDMwMjYwLDM4NTU2LDI1MzA3LDI2MTU3LDI1MjE0LDI3ODM2LDM2MjEzLDI5MDMxLDMyNjE3LDIwODA2LDMyOTAzLDIxNDg0LDM2OTc0LDI1MjQwLDIxNzQ2LDM0NTQ0LDM2NzYxLDMyNzczLDM4MTY3LDM0MDcxLDM2ODI1LDI3OTkzLDI5NjQ1LDI2MDE1LDMwNDk1LDI5OTU2LDMwNzU5LDMzMjc1LDM2MTI2LDM4MDI0LDIwMzkwLDI2NTE3LDMwMTM3LDM1Nzg2LDM4NjYzLDI1MzkxLDM4MjE1LDM4NDUzLDMzOTc2LDI1Mzc5LDMwNTI5LDI0NDQ5LDI5NDI0LDIwMTA1LDI0NTk2LDI1OTcyLDI1MzI3LDI3NDkxLDI1OTE5LDM1NTU2LDM1NTU3LDM1NTU4LDM1NTU5LDM1NTYwLDM1NTYxLDM1NTYyLDM1NTYzLDM1NTY0LDM1NTY1LDM1NTY2LDM1NTY3LDM1NTY4LDM1NTY5LDM1NTcwLDM1NTcxLDM1NTcyLDM1NTczLDM1NTc0LDM1NTc1LDM1NTc2LDM1NTc3LDM1NTc4LDM1NTc5LDM1NTgwLDM1NTgxLDM1NTgyLDM1NTgzLDM1NTg0LDM1NTg1LDM1NTg2LDM1NTg3LDM1NTg4LDM1NTg5LDM1NTkwLDM1NTkyLDM1NTkzLDM1NTk0LDM1NTk1LDM1NTk2LDM1NTk3LDM1NTk4LDM1NTk5LDM1NjAwLDM1NjAxLDM1NjAyLDM1NjAzLDM1NjA0LDM1NjA1LDM1NjA2LDM1NjA3LDM1NjA4LDM1NjA5LDM1NjEwLDM1NjExLDM1NjEyLDM1NjEzLDM1NjE0LDM1NjE1LDM1NjE2LDM1NjE3LDM1NjE4LDM1NjE5LDM1NjIwLDM1NjIxLDM1NjIzLDM1NjI0LDM1NjI1LDM1NjI2LDM1NjI3LDM1NjI4LDM1NjI5LDM1NjMwLDM1NjMxLDM1NjMyLDM1NjMzLDM1NjM0LDM1NjM1LDM1NjM2LDM1NjM3LDM1NjM4LDM1NjM5LDM1NjQwLDM1NjQxLDM1NjQyLDM1NjQzLDM1NjQ0LDM1NjQ1LDM1NjQ2LDM1NjQ3LDM1NjQ4LDM1NjQ5LDM1NjUwLDM1NjUxLDM1NjUyLDM1NjUzLDI0MTAzLDMwMTUxLDM3MDczLDM1Nzc3LDMzNDM3LDI2NTI1LDI1OTAzLDIxNTUzLDM0NTg0LDMwNjkzLDMyOTMwLDMzMDI2LDI3NzEzLDIwMDQzLDMyNDU1LDMyODQ0LDMwNDUyLDI2ODkzLDI3NTQyLDI1MTkxLDIwNTQwLDIwMzU2LDIyMzM2LDI1MzUxLDI3NDkwLDM2Mjg2LDIxNDgyLDI2MDg4LDMyNDQwLDI0NTM1LDI1MzcwLDI1NTI3LDMzMjY3LDMzMjY4LDMyNjIyLDI0MDkyLDIzNzY5LDIxMDQ2LDI2MjM0LDMxMjA5LDMxMjU4LDM2MTM2LDI4ODI1LDMwMTY0LDI4MzgyLDI3ODM1LDMxMzc4LDIwMDEzLDMwNDA1LDI0NTQ0LDM4MDQ3LDM0OTM1LDMyNDU2LDMxMTgxLDMyOTU5LDM3MzI1LDIwMjEwLDIwMjQ3LDMzMzExLDIxNjA4LDI0MDMwLDI3OTU0LDM1Nzg4LDMxOTA5LDM2NzI0LDMyOTIwLDI0MDkwLDIxNjUwLDMwMzg1LDIzNDQ5LDI2MTcyLDM5NTg4LDI5NjY0LDI2NjY2LDM0NTIzLDI2NDE3LDI5NDgyLDM1ODMyLDM1ODAzLDM2ODgwLDMxNDgxLDI4ODkxLDI5MDM4LDI1Mjg0LDMwNjMzLDIyMDY1LDIwMDI3LDMzODc5LDI2NjA5LDIxMTYxLDM0NDk2LDM2MTQyLDM4MTM2LDMxNTY5LDM1NjU0LDM1NjU1LDM1NjU2LDM1NjU3LDM1NjU4LDM1NjU5LDM1NjYwLDM1NjYxLDM1NjYyLDM1NjYzLDM1NjY0LDM1NjY1LDM1NjY2LDM1NjY3LDM1NjY4LDM1NjY5LDM1NjcwLDM1NjcxLDM1NjcyLDM1NjczLDM1Njc0LDM1Njc1LDM1Njc2LDM1Njc3LDM1Njc4LDM1Njc5LDM1NjgwLDM1NjgxLDM1NjgyLDM1NjgzLDM1Njg0LDM1Njg1LDM1Njg3LDM1Njg4LDM1Njg5LDM1NjkwLDM1NjkxLDM1NjkzLDM1Njk0LDM1Njk1LDM1Njk2LDM1Njk3LDM1Njk4LDM1Njk5LDM1NzAwLDM1NzAxLDM1NzAyLDM1NzAzLDM1NzA0LDM1NzA1LDM1NzA2LDM1NzA3LDM1NzA4LDM1NzA5LDM1NzEwLDM1NzExLDM1NzEyLDM1NzEzLDM1NzE0LDM1NzE1LDM1NzE2LDM1NzE3LDM1NzE4LDM1NzE5LDM1NzIwLDM1NzIxLDM1NzIyLDM1NzIzLDM1NzI0LDM1NzI1LDM1NzI2LDM1NzI3LDM1NzI4LDM1NzI5LDM1NzMwLDM1NzMxLDM1NzMyLDM1NzMzLDM1NzM0LDM1NzM1LDM1NzM2LDM1NzM3LDM1NzM4LDM1NzM5LDM1NzQwLDM1NzQxLDM1NzQyLDM1NzQzLDM1NzU2LDM1NzYxLDM1NzcxLDM1NzgzLDM1NzkyLDM1ODE4LDM1ODQ5LDM1ODcwLDIwMzAzLDI3ODgwLDMxMDY5LDM5NTQ3LDI1MjM1LDI5MjI2LDI1MzQxLDE5OTg3LDMwNzQyLDM2NzE2LDI1Nzc2LDM2MTg2LDMxNjg2LDI2NzI5LDI0MTk2LDM1MDEzLDIyOTE4LDI1NzU4LDIyNzY2LDI5MzY2LDI2ODk0LDM4MTgxLDM2ODYxLDM2MTg0LDIyMzY4LDMyNTEyLDM1ODQ2LDIwOTM0LDI1NDE3LDI1MzA1LDIxMzMxLDI2NzAwLDI5NzMwLDMzNTM3LDM3MTk2LDIxODI4LDMwNTI4LDI4Nzk2LDI3OTc4LDIwODU3LDIxNjcyLDM2MTY0LDIzMDM5LDI4MzYzLDI4MTAwLDIzMzg4LDMyMDQzLDIwMTgwLDMxODY5LDI4MzcxLDIzMzc2LDMzMjU4LDI4MTczLDIzMzgzLDM5NjgzLDI2ODM3LDM2Mzk0LDIzNDQ3LDMyNTA4LDI0NjM1LDMyNDM3LDM3MDQ5LDM2MjA4LDIyODYzLDI1NTQ5LDMxMTk5LDM2Mjc1LDIxMzMwLDI2MDYzLDMxMDYyLDM1NzgxLDM4NDU5LDMyNDUyLDM4MDc1LDMyMzg2LDIyMDY4LDM3MjU3LDI2MzY4LDMyNjE4LDIzNTYyLDM2OTgxLDI2MTUyLDI0MDM4LDIwMzA0LDI2NTkwLDIwNTcwLDIwMzE2LDIyMzUyLDI0MjMxLDU5NDA4LDU5NDA5LDU5NDEwLDU5NDExLDU5NDEyLDM1ODk2LDM1ODk3LDM1ODk4LDM1ODk5LDM1OTAwLDM1OTAxLDM1OTAyLDM1OTAzLDM1OTA0LDM1OTA2LDM1OTA3LDM1OTA4LDM1OTA5LDM1OTEyLDM1OTE0LDM1OTE1LDM1OTE3LDM1OTE4LDM1OTE5LDM1OTIwLDM1OTIxLDM1OTIyLDM1OTIzLDM1OTI0LDM1OTI2LDM1OTI3LDM1OTI4LDM1OTI5LDM1OTMxLDM1OTMyLDM1OTMzLDM1OTM0LDM1OTM1LDM1OTM2LDM1OTM5LDM1OTQwLDM1OTQxLDM1OTQyLDM1OTQzLDM1OTQ0LDM1OTQ1LDM1OTQ4LDM1OTQ5LDM1OTUwLDM1OTUxLDM1OTUyLDM1OTUzLDM1OTU0LDM1OTU2LDM1OTU3LDM1OTU4LDM1OTU5LDM1OTYzLDM1OTY0LDM1OTY1LDM1OTY2LDM1OTY3LDM1OTY4LDM1OTY5LDM1OTcxLDM1OTcyLDM1OTc0LDM1OTc1LDM1OTc2LDM1OTc5LDM1OTgxLDM1OTgyLDM1OTgzLDM1OTg0LDM1OTg1LDM1OTg2LDM1OTg3LDM1OTg5LDM1OTkwLDM1OTkxLDM1OTkzLDM1OTk0LDM1OTk1LDM1OTk2LDM1OTk3LDM1OTk4LDM1OTk5LDM2MDAwLDM2MDAxLDM2MDAyLDM2MDAzLDM2MDA0LDM2MDA1LDM2MDA2LDM2MDA3LDM2MDA4LDM2MDA5LDM2MDEwLDM2MDExLDM2MDEyLDM2MDEzLDIwMTA5LDE5OTgwLDIwODAwLDE5OTg0LDI0MzE5LDIxMzE3LDE5OTg5LDIwMTIwLDE5OTk4LDM5NzMwLDIzNDA0LDIyMTIxLDIwMDA4LDMxMTYyLDIwMDMxLDIxMjY5LDIwMDM5LDIyODI5LDI5MjQzLDIxMzU4LDI3NjY0LDIyMjM5LDMyOTk2LDM5MzE5LDI3NjAzLDMwNTkwLDQwNzI3LDIwMDIyLDIwMTI3LDQwNzIwLDIwMDYwLDIwMDczLDIwMTE1LDMzNDE2LDIzMzg3LDIxODY4LDIyMDMxLDIwMTY0LDIxMzg5LDIxNDA1LDIxNDExLDIxNDEzLDIxNDIyLDM4NzU3LDM2MTg5LDIxMjc0LDIxNDkzLDIxMjg2LDIxMjk0LDIxMzEwLDM2MTg4LDIxMzUwLDIxMzQ3LDIwOTk0LDIxMDAwLDIxMDA2LDIxMDM3LDIxMDQzLDIxMDU1LDIxMDU2LDIxMDY4LDIxMDg2LDIxMDg5LDIxMDg0LDMzOTY3LDIxMTE3LDIxMTIyLDIxMTIxLDIxMTM2LDIxMTM5LDIwODY2LDMyNTk2LDIwMTU1LDIwMTYzLDIwMTY5LDIwMTYyLDIwMjAwLDIwMTkzLDIwMjAzLDIwMTkwLDIwMjUxLDIwMjExLDIwMjU4LDIwMzI0LDIwMjEzLDIwMjYxLDIwMjYzLDIwMjMzLDIwMjY3LDIwMzE4LDIwMzI3LDI1OTEyLDIwMzE0LDIwMzE3LDM2MDE0LDM2MDE1LDM2MDE2LDM2MDE3LDM2MDE4LDM2MDE5LDM2MDIwLDM2MDIxLDM2MDIyLDM2MDIzLDM2MDI0LDM2MDI1LDM2MDI2LDM2MDI3LDM2MDI4LDM2MDI5LDM2MDMwLDM2MDMxLDM2MDMyLDM2MDMzLDM2MDM0LDM2MDM1LDM2MDM2LDM2MDM3LDM2MDM4LDM2MDM5LDM2MDQwLDM2MDQxLDM2MDQyLDM2MDQzLDM2MDQ0LDM2MDQ1LDM2MDQ2LDM2MDQ3LDM2MDQ4LDM2MDQ5LDM2MDUwLDM2MDUxLDM2MDUyLDM2MDUzLDM2MDU0LDM2MDU1LDM2MDU2LDM2MDU3LDM2MDU4LDM2MDU5LDM2MDYwLDM2MDYxLDM2MDYyLDM2MDYzLDM2MDY0LDM2MDY1LDM2MDY2LDM2MDY3LDM2MDY4LDM2MDY5LDM2MDcwLDM2MDcxLDM2MDcyLDM2MDczLDM2MDc0LDM2MDc1LDM2MDc2LDM2MDc3LDM2MDc4LDM2MDc5LDM2MDgwLDM2MDgxLDM2MDgyLDM2MDgzLDM2MDg0LDM2MDg1LDM2MDg2LDM2MDg3LDM2MDg4LDM2MDg5LDM2MDkwLDM2MDkxLDM2MDkyLDM2MDkzLDM2MDk0LDM2MDk1LDM2MDk2LDM2MDk3LDM2MDk4LDM2MDk5LDM2MTAwLDM2MTAxLDM2MTAyLDM2MTAzLDM2MTA0LDM2MTA1LDM2MTA2LDM2MTA3LDM2MTA4LDM2MTA5LDIwMzE5LDIwMzExLDIwMjc0LDIwMjg1LDIwMzQyLDIwMzQwLDIwMzY5LDIwMzYxLDIwMzU1LDIwMzY3LDIwMzUwLDIwMzQ3LDIwMzk0LDIwMzQ4LDIwMzk2LDIwMzcyLDIwNDU0LDIwNDU2LDIwNDU4LDIwNDIxLDIwNDQyLDIwNDUxLDIwNDQ0LDIwNDMzLDIwNDQ3LDIwNDcyLDIwNTIxLDIwNTU2LDIwNDY3LDIwNTI0LDIwNDk1LDIwNTI2LDIwNTI1LDIwNDc4LDIwNTA4LDIwNDkyLDIwNTE3LDIwNTIwLDIwNjA2LDIwNTQ3LDIwNTY1LDIwNTUyLDIwNTU4LDIwNTg4LDIwNjAzLDIwNjQ1LDIwNjQ3LDIwNjQ5LDIwNjY2LDIwNjk0LDIwNzQyLDIwNzE3LDIwNzE2LDIwNzEwLDIwNzE4LDIwNzQzLDIwNzQ3LDIwMTg5LDI3NzA5LDIwMzEyLDIwMzI1LDIwNDMwLDQwODY0LDI3NzE4LDMxODYwLDIwODQ2LDI0MDYxLDQwNjQ5LDM5MzIwLDIwODY1LDIyODA0LDIxMjQxLDIxMjYxLDM1MzM1LDIxMjY0LDIwOTcxLDIyODA5LDIwODIxLDIwMTI4LDIwODIyLDIwMTQ3LDM0OTI2LDM0OTgwLDIwMTQ5LDMzMDQ0LDM1MDI2LDMxMTA0LDIzMzQ4LDM0ODE5LDMyNjk2LDIwOTA3LDIwOTEzLDIwOTI1LDIwOTI0LDM2MTEwLDM2MTExLDM2MTEyLDM2MTEzLDM2MTE0LDM2MTE1LDM2MTE2LDM2MTE3LDM2MTE4LDM2MTE5LDM2MTIwLDM2MTIxLDM2MTIyLDM2MTIzLDM2MTI0LDM2MTI4LDM2MTc3LDM2MTc4LDM2MTgzLDM2MTkxLDM2MTk3LDM2MjAwLDM2MjAxLDM2MjAyLDM2MjA0LDM2MjA2LDM2MjA3LDM2MjA5LDM2MjEwLDM2MjE2LDM2MjE3LDM2MjE4LDM2MjE5LDM2MjIwLDM2MjIxLDM2MjIyLDM2MjIzLDM2MjI0LDM2MjI2LDM2MjI3LDM2MjMwLDM2MjMxLDM2MjMyLDM2MjMzLDM2MjM2LDM2MjM3LDM2MjM4LDM2MjM5LDM2MjQwLDM2MjQyLDM2MjQzLDM2MjQ1LDM2MjQ2LDM2MjQ3LDM2MjQ4LDM2MjQ5LDM2MjUwLDM2MjUxLDM2MjUyLDM2MjUzLDM2MjU0LDM2MjU2LDM2MjU3LDM2MjU4LDM2MjYwLDM2MjYxLDM2MjYyLDM2MjYzLDM2MjY0LDM2MjY1LDM2MjY2LDM2MjY3LDM2MjY4LDM2MjY5LDM2MjcwLDM2MjcxLDM2MjcyLDM2Mjc0LDM2Mjc4LDM2Mjc5LDM2MjgxLDM2MjgzLDM2Mjg1LDM2Mjg4LDM2Mjg5LDM2MjkwLDM2MjkzLDM2Mjk1LDM2Mjk2LDM2Mjk3LDM2Mjk4LDM2MzAxLDM2MzA0LDM2MzA2LDM2MzA3LDM2MzA4LDIwOTM1LDIwODg2LDIwODk4LDIwOTAxLDM1NzQ0LDM1NzUwLDM1NzUxLDM1NzU0LDM1NzY0LDM1NzY1LDM1NzY3LDM1Nzc4LDM1Nzc5LDM1Nzg3LDM1NzkxLDM1NzkwLDM1Nzk0LDM1Nzk1LDM1Nzk2LDM1Nzk4LDM1ODAwLDM1ODAxLDM1ODA0LDM1ODA3LDM1ODA4LDM1ODEyLDM1ODE2LDM1ODE3LDM1ODIyLDM1ODI0LDM1ODI3LDM1ODMwLDM1ODMzLDM1ODM2LDM1ODM5LDM1ODQwLDM1ODQyLDM1ODQ0LDM1ODQ3LDM1ODUyLDM1ODU1LDM1ODU3LDM1ODU4LDM1ODYwLDM1ODYxLDM1ODYyLDM1ODY1LDM1ODY3LDM1ODY0LDM1ODY5LDM1ODcxLDM1ODcyLDM1ODczLDM1ODc3LDM1ODc5LDM1ODgyLDM1ODgzLDM1ODg2LDM1ODg3LDM1ODkwLDM1ODkxLDM1ODkzLDM1ODk0LDIxMzUzLDIxMzcwLDM4NDI5LDM4NDM0LDM4NDMzLDM4NDQ5LDM4NDQyLDM4NDYxLDM4NDYwLDM4NDY2LDM4NDczLDM4NDg0LDM4NDk1LDM4NTAzLDM4NTA4LDM4NTE0LDM4NTE2LDM4NTM2LDM4NTQxLDM4NTUxLDM4NTc2LDM3MDE1LDM3MDE5LDM3MDIxLDM3MDE3LDM3MDM2LDM3MDI1LDM3MDQ0LDM3MDQzLDM3MDQ2LDM3MDUwLDM2MzA5LDM2MzEyLDM2MzEzLDM2MzE2LDM2MzIwLDM2MzIxLDM2MzIyLDM2MzI1LDM2MzI2LDM2MzI3LDM2MzI5LDM2MzMzLDM2MzM0LDM2MzM2LDM2MzM3LDM2MzM4LDM2MzQwLDM2MzQyLDM2MzQ4LDM2MzUwLDM2MzUxLDM2MzUyLDM2MzUzLDM2MzU0LDM2MzU1LDM2MzU2LDM2MzU4LDM2MzU5LDM2MzYwLDM2MzYzLDM2MzY1LDM2MzY2LDM2MzY4LDM2MzY5LDM2MzcwLDM2MzcxLDM2MzczLDM2Mzc0LDM2Mzc1LDM2Mzc2LDM2Mzc3LDM2Mzc4LDM2Mzc5LDM2MzgwLDM2Mzg0LDM2Mzg1LDM2Mzg4LDM2Mzg5LDM2MzkwLDM2MzkxLDM2MzkyLDM2Mzk1LDM2Mzk3LDM2NDAwLDM2NDAyLDM2NDAzLDM2NDA0LDM2NDA2LDM2NDA3LDM2NDA4LDM2NDExLDM2NDEyLDM2NDE0LDM2NDE1LDM2NDE5LDM2NDIxLDM2NDIyLDM2NDI4LDM2NDI5LDM2NDMwLDM2NDMxLDM2NDMyLDM2NDM1LDM2NDM2LDM2NDM3LDM2NDM4LDM2NDM5LDM2NDQwLDM2NDQyLDM2NDQzLDM2NDQ0LDM2NDQ1LDM2NDQ2LDM2NDQ3LDM2NDQ4LDM2NDQ5LDM2NDUwLDM2NDUxLDM2NDUyLDM2NDUzLDM2NDU1LDM2NDU2LDM2NDU4LDM2NDU5LDM2NDYyLDM2NDY1LDM3MDQ4LDM3MDQwLDM3MDcxLDM3MDYxLDM3MDU0LDM3MDcyLDM3MDYwLDM3MDYzLDM3MDc1LDM3MDk0LDM3MDkwLDM3MDg0LDM3MDc5LDM3MDgzLDM3MDk5LDM3MTAzLDM3MTE4LDM3MTI0LDM3MTU0LDM3MTUwLDM3MTU1LDM3MTY5LDM3MTY3LDM3MTc3LDM3MTg3LDM3MTkwLDIxMDA1LDIyODUwLDIxMTU0LDIxMTY0LDIxMTY1LDIxMTgyLDIxNzU5LDIxMjAwLDIxMjA2LDIxMjMyLDIxNDcxLDI5MTY2LDMwNjY5LDI0MzA4LDIwOTgxLDIwOTg4LDM5NzI3LDIxNDMwLDI0MzIxLDMwMDQyLDI0MDQ3LDIyMzQ4LDIyNDQxLDIyNDMzLDIyNjU0LDIyNzE2LDIyNzI1LDIyNzM3LDIyMzEzLDIyMzE2LDIyMzE0LDIyMzIzLDIyMzI5LDIyMzE4LDIyMzE5LDIyMzY0LDIyMzMxLDIyMzM4LDIyMzc3LDIyNDA1LDIyMzc5LDIyNDA2LDIyMzk2LDIyMzk1LDIyMzc2LDIyMzgxLDIyMzkwLDIyMzg3LDIyNDQ1LDIyNDM2LDIyNDEyLDIyNDUwLDIyNDc5LDIyNDM5LDIyNDUyLDIyNDE5LDIyNDMyLDIyNDg1LDIyNDg4LDIyNDkwLDIyNDg5LDIyNDgyLDIyNDU2LDIyNTE2LDIyNTExLDIyNTIwLDIyNTAwLDIyNDkzLDM2NDY3LDM2NDY5LDM2NDcxLDM2NDcyLDM2NDczLDM2NDc0LDM2NDc1LDM2NDc3LDM2NDc4LDM2NDgwLDM2NDgyLDM2NDgzLDM2NDg0LDM2NDg2LDM2NDg4LDM2NDg5LDM2NDkwLDM2NDkxLDM2NDkyLDM2NDkzLDM2NDk0LDM2NDk3LDM2NDk4LDM2NDk5LDM2NTAxLDM2NTAyLDM2NTAzLDM2NTA0LDM2NTA1LDM2NTA2LDM2NTA3LDM2NTA5LDM2NTExLDM2NTEyLDM2NTEzLDM2NTE0LDM2NTE1LDM2NTE2LDM2NTE3LDM2NTE4LDM2NTE5LDM2NTIwLDM2NTIxLDM2NTIyLDM2NTI1LDM2NTI2LDM2NTI4LDM2NTI5LDM2NTMxLDM2NTMyLDM2NTMzLDM2NTM0LDM2NTM1LDM2NTM2LDM2NTM3LDM2NTM5LDM2NTQwLDM2NTQxLDM2NTQyLDM2NTQzLDM2NTQ0LDM2NTQ1LDM2NTQ2LDM2NTQ3LDM2NTQ4LDM2NTQ5LDM2NTUwLDM2NTUxLDM2NTUyLDM2NTUzLDM2NTU0LDM2NTU1LDM2NTU2LDM2NTU3LDM2NTU5LDM2NTYwLDM2NTYxLDM2NTYyLDM2NTYzLDM2NTY0LDM2NTY1LDM2NTY2LDM2NTY3LDM2NTY4LDM2NTY5LDM2NTcwLDM2NTcxLDM2NTcyLDM2NTczLDM2NTc0LDM2NTc1LDM2NTc2LDM2NTc3LDM2NTc4LDM2NTc5LDM2NTgwLDIyNTM5LDIyNTQxLDIyNTI1LDIyNTA5LDIyNTI4LDIyNTU4LDIyNTUzLDIyNTk2LDIyNTYwLDIyNjI5LDIyNjM2LDIyNjU3LDIyNjY1LDIyNjgyLDIyNjU2LDM5MzM2LDQwNzI5LDI1MDg3LDMzNDAxLDMzNDA1LDMzNDA3LDMzNDIzLDMzNDE4LDMzNDQ4LDMzNDEyLDMzNDIyLDMzNDI1LDMzNDMxLDMzNDMzLDMzNDUxLDMzNDY0LDMzNDcwLDMzNDU2LDMzNDgwLDMzNDgyLDMzNTA3LDMzNDMyLDMzNDYzLDMzNDU0LDMzNDgzLDMzNDg0LDMzNDczLDMzNDQ5LDMzNDYwLDMzNDQxLDMzNDUwLDMzNDM5LDMzNDc2LDMzNDg2LDMzNDQ0LDMzNTA1LDMzNTQ1LDMzNTI3LDMzNTA4LDMzNTUxLDMzNTQzLDMzNTAwLDMzNTI0LDMzNDkwLDMzNDk2LDMzNTQ4LDMzNTMxLDMzNDkxLDMzNTUzLDMzNTYyLDMzNTQyLDMzNTU2LDMzNTU3LDMzNTA0LDMzNDkzLDMzNTY0LDMzNjE3LDMzNjI3LDMzNjI4LDMzNTQ0LDMzNjgyLDMzNTk2LDMzNTg4LDMzNTg1LDMzNjkxLDMzNjMwLDMzNTgzLDMzNjE1LDMzNjA3LDMzNjAzLDMzNjMxLDMzNjAwLDMzNTU5LDMzNjMyLDMzNTgxLDMzNTk0LDMzNTg3LDMzNjM4LDMzNjM3LDM2NTgxLDM2NTgyLDM2NTgzLDM2NTg0LDM2NTg1LDM2NTg2LDM2NTg3LDM2NTg4LDM2NTg5LDM2NTkwLDM2NTkxLDM2NTkyLDM2NTkzLDM2NTk0LDM2NTk1LDM2NTk2LDM2NTk3LDM2NTk4LDM2NTk5LDM2NjAwLDM2NjAxLDM2NjAyLDM2NjAzLDM2NjA0LDM2NjA1LDM2NjA2LDM2NjA3LDM2NjA4LDM2NjA5LDM2NjEwLDM2NjExLDM2NjEyLDM2NjEzLDM2NjE0LDM2NjE1LDM2NjE2LDM2NjE3LDM2NjE4LDM2NjE5LDM2NjIwLDM2NjIxLDM2NjIyLDM2NjIzLDM2NjI0LDM2NjI1LDM2NjI2LDM2NjI3LDM2NjI4LDM2NjI5LDM2NjMwLDM2NjMxLDM2NjMyLDM2NjMzLDM2NjM0LDM2NjM1LDM2NjM2LDM2NjM3LDM2NjM4LDM2NjM5LDM2NjQwLDM2NjQxLDM2NjQyLDM2NjQzLDM2NjQ0LDM2NjQ1LDM2NjQ2LDM2NjQ3LDM2NjQ4LDM2NjQ5LDM2NjUwLDM2NjUxLDM2NjUyLDM2NjUzLDM2NjU0LDM2NjU1LDM2NjU2LDM2NjU3LDM2NjU4LDM2NjU5LDM2NjYwLDM2NjYxLDM2NjYyLDM2NjYzLDM2NjY0LDM2NjY1LDM2NjY2LDM2NjY3LDM2NjY4LDM2NjY5LDM2NjcwLDM2NjcxLDM2NjcyLDM2NjczLDM2Njc0LDM2Njc1LDM2Njc2LDMzNjQwLDMzNTYzLDMzNjQxLDMzNjQ0LDMzNjQyLDMzNjQ1LDMzNjQ2LDMzNzEyLDMzNjU2LDMzNzE1LDMzNzE2LDMzNjk2LDMzNzA2LDMzNjgzLDMzNjkyLDMzNjY5LDMzNjYwLDMzNzE4LDMzNzA1LDMzNjYxLDMzNzIwLDMzNjU5LDMzNjg4LDMzNjk0LDMzNzA0LDMzNzIyLDMzNzI0LDMzNzI5LDMzNzkzLDMzNzY1LDMzNzUyLDIyNTM1LDMzODE2LDMzODAzLDMzNzU3LDMzNzg5LDMzNzUwLDMzODIwLDMzODQ4LDMzODA5LDMzNzk4LDMzNzQ4LDMzNzU5LDMzODA3LDMzNzk1LDMzNzg0LDMzNzg1LDMzNzcwLDMzNzMzLDMzNzI4LDMzODMwLDMzNzc2LDMzNzYxLDMzODg0LDMzODczLDMzODgyLDMzODgxLDMzOTA3LDMzOTI3LDMzOTI4LDMzOTE0LDMzOTI5LDMzOTEyLDMzODUyLDMzODYyLDMzODk3LDMzOTEwLDMzOTMyLDMzOTM0LDMzODQxLDMzOTAxLDMzOTg1LDMzOTk3LDM0MDAwLDM0MDIyLDMzOTgxLDM0MDAzLDMzOTk0LDMzOTgzLDMzOTc4LDM0MDE2LDMzOTUzLDMzOTc3LDMzOTcyLDMzOTQzLDM0MDIxLDM0MDE5LDM0MDYwLDI5OTY1LDM0MTA0LDM0MDMyLDM0MTA1LDM0MDc5LDM0MTA2LDM2Njc3LDM2Njc4LDM2Njc5LDM2NjgwLDM2NjgxLDM2NjgyLDM2NjgzLDM2Njg0LDM2Njg1LDM2Njg2LDM2Njg3LDM2Njg4LDM2Njg5LDM2NjkwLDM2NjkxLDM2NjkyLDM2NjkzLDM2Njk0LDM2Njk1LDM2Njk2LDM2Njk3LDM2Njk4LDM2Njk5LDM2NzAwLDM2NzAxLDM2NzAyLDM2NzAzLDM2NzA0LDM2NzA1LDM2NzA2LDM2NzA3LDM2NzA4LDM2NzA5LDM2NzE0LDM2NzM2LDM2NzQ4LDM2NzU0LDM2NzY1LDM2NzY4LDM2NzY5LDM2NzcwLDM2NzcyLDM2NzczLDM2Nzc0LDM2Nzc1LDM2Nzc4LDM2NzgwLDM2NzgxLDM2NzgyLDM2NzgzLDM2Nzg2LDM2Nzg3LDM2Nzg4LDM2Nzg5LDM2NzkxLDM2NzkyLDM2Nzk0LDM2Nzk1LDM2Nzk2LDM2Nzk5LDM2ODAwLDM2ODAzLDM2ODA2LDM2ODA5LDM2ODEwLDM2ODExLDM2ODEyLDM2ODEzLDM2ODE1LDM2ODE4LDM2ODIyLDM2ODIzLDM2ODI2LDM2ODMyLDM2ODMzLDM2ODM1LDM2ODM5LDM2ODQ0LDM2ODQ3LDM2ODQ5LDM2ODUwLDM2ODUyLDM2ODUzLDM2ODU0LDM2ODU4LDM2ODU5LDM2ODYwLDM2ODYyLDM2ODYzLDM2ODcxLDM2ODcyLDM2ODc2LDM2ODc4LDM2ODgzLDM2ODg1LDM2ODg4LDM0MTM0LDM0MTA3LDM0MDQ3LDM0MDQ0LDM0MTM3LDM0MTIwLDM0MTUyLDM0MTQ4LDM0MTQyLDM0MTcwLDMwNjI2LDM0MTE1LDM0MTYyLDM0MTcxLDM0MjEyLDM0MjE2LDM0MTgzLDM0MTkxLDM0MTY5LDM0MjIyLDM0MjA0LDM0MTgxLDM0MjMzLDM0MjMxLDM0MjI0LDM0MjU5LDM0MjQxLDM0MjY4LDM0MzAzLDM0MzQzLDM0MzA5LDM0MzQ1LDM0MzI2LDM0MzY0LDI0MzE4LDI0MzI4LDIyODQ0LDIyODQ5LDMyODIzLDIyODY5LDIyODc0LDIyODcyLDIxMjYzLDIzNTg2LDIzNTg5LDIzNTk2LDIzNjA0LDI1MTY0LDI1MTk0LDI1MjQ3LDI1Mjc1LDI1MjkwLDI1MzA2LDI1MzAzLDI1MzI2LDI1Mzc4LDI1MzM0LDI1NDAxLDI1NDE5LDI1NDExLDI1NTE3LDI1NTkwLDI1NDU3LDI1NDY2LDI1NDg2LDI1NTI0LDI1NDUzLDI1NTE2LDI1NDgyLDI1NDQ5LDI1NTE4LDI1NTMyLDI1NTg2LDI1NTkyLDI1NTY4LDI1NTk5LDI1NTQwLDI1NTY2LDI1NTUwLDI1NjgyLDI1NTQyLDI1NTM0LDI1NjY5LDI1NjY1LDI1NjExLDI1NjI3LDI1NjMyLDI1NjEyLDI1NjM4LDI1NjMzLDI1Njk0LDI1NzMyLDI1NzA5LDI1NzUwLDM2ODg5LDM2ODkyLDM2ODk5LDM2OTAwLDM2OTAxLDM2OTAzLDM2OTA0LDM2OTA1LDM2OTA2LDM2OTA3LDM2OTA4LDM2OTEyLDM2OTEzLDM2OTE0LDM2OTE1LDM2OTE2LDM2OTE5LDM2OTIxLDM2OTIyLDM2OTI1LDM2OTI3LDM2OTI4LDM2OTMxLDM2OTMzLDM2OTM0LDM2OTM2LDM2OTM3LDM2OTM4LDM2OTM5LDM2OTQwLDM2OTQyLDM2OTQ4LDM2OTQ5LDM2OTUwLDM2OTUzLDM2OTU0LDM2OTU2LDM2OTU3LDM2OTU4LDM2OTU5LDM2OTYwLDM2OTYxLDM2OTY0LDM2OTY2LDM2OTY3LDM2OTY5LDM2OTcwLDM2OTcxLDM2OTcyLDM2OTc1LDM2OTc2LDM2OTc3LDM2OTc4LDM2OTc5LDM2OTgyLDM2OTgzLDM2OTg0LDM2OTg1LDM2OTg2LDM2OTg3LDM2OTg4LDM2OTkwLDM2OTkzLDM2OTk2LDM2OTk3LDM2OTk4LDM2OTk5LDM3MDAxLDM3MDAyLDM3MDA0LDM3MDA1LDM3MDA2LDM3MDA3LDM3MDA4LDM3MDEwLDM3MDEyLDM3MDE0LDM3MDE2LDM3MDE4LDM3MDIwLDM3MDIyLDM3MDIzLDM3MDI0LDM3MDI4LDM3MDI5LDM3MDMxLDM3MDMyLDM3MDMzLDM3MDM1LDM3MDM3LDM3MDQyLDM3MDQ3LDM3MDUyLDM3MDUzLDM3MDU1LDM3MDU2LDI1NzIyLDI1NzgzLDI1Nzg0LDI1NzUzLDI1Nzg2LDI1NzkyLDI1ODA4LDI1ODE1LDI1ODI4LDI1ODI2LDI1ODY1LDI1ODkzLDI1OTAyLDI0MzMxLDI0NTMwLDI5OTc3LDI0MzM3LDIxMzQzLDIxNDg5LDIxNTAxLDIxNDgxLDIxNDgwLDIxNDk5LDIxNTIyLDIxNTI2LDIxNTEwLDIxNTc5LDIxNTg2LDIxNTg3LDIxNTg4LDIxNTkwLDIxNTcxLDIxNTM3LDIxNTkxLDIxNTkzLDIxNTM5LDIxNTU0LDIxNjM0LDIxNjUyLDIxNjIzLDIxNjE3LDIxNjA0LDIxNjU4LDIxNjU5LDIxNjM2LDIxNjIyLDIxNjA2LDIxNjYxLDIxNzEyLDIxNjc3LDIxNjk4LDIxNjg0LDIxNzE0LDIxNjcxLDIxNjcwLDIxNzE1LDIxNzE2LDIxNjE4LDIxNjY3LDIxNzE3LDIxNjkxLDIxNjk1LDIxNzA4LDIxNzIxLDIxNzIyLDIxNzI0LDIxNjczLDIxNjc0LDIxNjY4LDIxNzI1LDIxNzExLDIxNzI2LDIxNzg3LDIxNzM1LDIxNzkyLDIxNzU3LDIxNzgwLDIxNzQ3LDIxNzk0LDIxNzk1LDIxNzc1LDIxNzc3LDIxNzk5LDIxODAyLDIxODYzLDIxOTAzLDIxOTQxLDIxODMzLDIxODY5LDIxODI1LDIxODQ1LDIxODIzLDIxODQwLDIxODIwLDM3MDU4LDM3MDU5LDM3MDYyLDM3MDY0LDM3MDY1LDM3MDY3LDM3MDY4LDM3MDY5LDM3MDc0LDM3MDc2LDM3MDc3LDM3MDc4LDM3MDgwLDM3MDgxLDM3MDgyLDM3MDg2LDM3MDg3LDM3MDg4LDM3MDkxLDM3MDkyLDM3MDkzLDM3MDk3LDM3MDk4LDM3MTAwLDM3MTAyLDM3MTA0LDM3MTA1LDM3MTA2LDM3MTA3LDM3MTA5LDM3MTEwLDM3MTExLDM3MTEzLDM3MTE0LDM3MTE1LDM3MTE2LDM3MTE5LDM3MTIwLDM3MTIxLDM3MTIzLDM3MTI1LDM3MTI2LDM3MTI3LDM3MTI4LDM3MTI5LDM3MTMwLDM3MTMxLDM3MTMyLDM3MTMzLDM3MTM0LDM3MTM1LDM3MTM2LDM3MTM3LDM3MTM4LDM3MTM5LDM3MTQwLDM3MTQxLDM3MTQyLDM3MTQzLDM3MTQ0LDM3MTQ2LDM3MTQ3LDM3MTQ4LDM3MTQ5LDM3MTUxLDM3MTUyLDM3MTUzLDM3MTU2LDM3MTU3LDM3MTU4LDM3MTU5LDM3MTYwLDM3MTYxLDM3MTYyLDM3MTYzLDM3MTY0LDM3MTY1LDM3MTY2LDM3MTY4LDM3MTcwLDM3MTcxLDM3MTcyLDM3MTczLDM3MTc0LDM3MTc1LDM3MTc2LDM3MTc4LDM3MTc5LDM3MTgwLDM3MTgxLDM3MTgyLDM3MTgzLDM3MTg0LDM3MTg1LDM3MTg2LDM3MTg4LDIxODE1LDIxODQ2LDIxODc3LDIxODc4LDIxODc5LDIxODExLDIxODA4LDIxODUyLDIxODk5LDIxOTcwLDIxODkxLDIxOTM3LDIxOTQ1LDIxODk2LDIxODg5LDIxOTE5LDIxODg2LDIxOTc0LDIxOTA1LDIxODgzLDIxOTgzLDIxOTQ5LDIxOTUwLDIxOTA4LDIxOTEzLDIxOTk0LDIyMDA3LDIxOTYxLDIyMDQ3LDIxOTY5LDIxOTk1LDIxOTk2LDIxOTcyLDIxOTkwLDIxOTgxLDIxOTU2LDIxOTk5LDIxOTg5LDIyMDAyLDIyMDAzLDIxOTY0LDIxOTY1LDIxOTkyLDIyMDA1LDIxOTg4LDM2NzU2LDIyMDQ2LDIyMDI0LDIyMDI4LDIyMDE3LDIyMDUyLDIyMDUxLDIyMDE0LDIyMDE2LDIyMDU1LDIyMDYxLDIyMTA0LDIyMDczLDIyMTAzLDIyMDYwLDIyMDkzLDIyMTE0LDIyMTA1LDIyMTA4LDIyMDkyLDIyMTAwLDIyMTUwLDIyMTE2LDIyMTI5LDIyMTIzLDIyMTM5LDIyMTQwLDIyMTQ5LDIyMTYzLDIyMTkxLDIyMjI4LDIyMjMxLDIyMjM3LDIyMjQxLDIyMjYxLDIyMjUxLDIyMjY1LDIyMjcxLDIyMjc2LDIyMjgyLDIyMjgxLDIyMzAwLDI0MDc5LDI0MDg5LDI0MDg0LDI0MDgxLDI0MTEzLDI0MTIzLDI0MTI0LDM3MTg5LDM3MTkxLDM3MTkyLDM3MjAxLDM3MjAzLDM3MjA0LDM3MjA1LDM3MjA2LDM3MjA4LDM3MjA5LDM3MjExLDM3MjEyLDM3MjE1LDM3MjE2LDM3MjIyLDM3MjIzLDM3MjI0LDM3MjI3LDM3MjI5LDM3MjM1LDM3MjQyLDM3MjQzLDM3MjQ0LDM3MjQ4LDM3MjQ5LDM3MjUwLDM3MjUxLDM3MjUyLDM3MjU0LDM3MjU2LDM3MjU4LDM3MjYyLDM3MjYzLDM3MjY3LDM3MjY4LDM3MjY5LDM3MjcwLDM3MjcxLDM3MjcyLDM3MjczLDM3Mjc2LDM3Mjc3LDM3Mjc4LDM3Mjc5LDM3MjgwLDM3MjgxLDM3Mjg0LDM3Mjg1LDM3Mjg2LDM3Mjg3LDM3Mjg4LDM3Mjg5LDM3MjkxLDM3MjkyLDM3Mjk2LDM3Mjk3LDM3Mjk4LDM3Mjk5LDM3MzAyLDM3MzAzLDM3MzA0LDM3MzA1LDM3MzA3LDM3MzA4LDM3MzA5LDM3MzEwLDM3MzExLDM3MzEyLDM3MzEzLDM3MzE0LDM3MzE1LDM3MzE2LDM3MzE3LDM3MzE4LDM3MzIwLDM3MzIzLDM3MzI4LDM3MzMwLDM3MzMxLDM3MzMyLDM3MzMzLDM3MzM0LDM3MzM1LDM3MzM2LDM3MzM3LDM3MzM4LDM3MzM5LDM3MzQxLDM3MzQyLDM3MzQzLDM3MzQ0LDM3MzQ1LDM3MzQ2LDM3MzQ3LDM3MzQ4LDM3MzQ5LDI0MTE5LDI0MTMyLDI0MTQ4LDI0MTU1LDI0MTU4LDI0MTYxLDIzNjkyLDIzNjc0LDIzNjkzLDIzNjk2LDIzNzAyLDIzNjg4LDIzNzA0LDIzNzA1LDIzNjk3LDIzNzA2LDIzNzA4LDIzNzMzLDIzNzE0LDIzNzQxLDIzNzI0LDIzNzIzLDIzNzI5LDIzNzE1LDIzNzQ1LDIzNzM1LDIzNzQ4LDIzNzYyLDIzNzgwLDIzNzU1LDIzNzgxLDIzODEwLDIzODExLDIzODQ3LDIzODQ2LDIzODU0LDIzODQ0LDIzODM4LDIzODE0LDIzODM1LDIzODk2LDIzODcwLDIzODYwLDIzODY5LDIzOTE2LDIzODk5LDIzOTE5LDIzOTAxLDIzOTE1LDIzODgzLDIzODgyLDIzOTEzLDIzOTI0LDIzOTM4LDIzOTYxLDIzOTY1LDM1OTU1LDIzOTkxLDI0MDA1LDI0NDM1LDI0NDM5LDI0NDUwLDI0NDU1LDI0NDU3LDI0NDYwLDI0NDY5LDI0NDczLDI0NDc2LDI0NDg4LDI0NDkzLDI0NTAxLDI0NTA4LDM0OTE0LDI0NDE3LDI5MzU3LDI5MzYwLDI5MzY0LDI5MzY3LDI5MzY4LDI5Mzc5LDI5Mzc3LDI5MzkwLDI5Mzg5LDI5Mzk0LDI5NDE2LDI5NDIzLDI5NDE3LDI5NDI2LDI5NDI4LDI5NDMxLDI5NDQxLDI5NDI3LDI5NDQzLDI5NDM0LDM3MzUwLDM3MzUxLDM3MzUyLDM3MzUzLDM3MzU0LDM3MzU1LDM3MzU2LDM3MzU3LDM3MzU4LDM3MzU5LDM3MzYwLDM3MzYxLDM3MzYyLDM3MzYzLDM3MzY0LDM3MzY1LDM3MzY2LDM3MzY3LDM3MzY4LDM3MzY5LDM3MzcwLDM3MzcxLDM3MzcyLDM3MzczLDM3Mzc0LDM3Mzc1LDM3Mzc2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzg3LDM3Mzg4LDM3Mzg5LDM3MzkwLDM3MzkxLDM3MzkyLDM3MzkzLDM3Mzk0LDM3Mzk1LDM3Mzk2LDM3Mzk3LDM3Mzk4LDM3Mzk5LDM3NDAwLDM3NDAxLDM3NDAyLDM3NDAzLDM3NDA0LDM3NDA1LDM3NDA2LDM3NDA3LDM3NDA4LDM3NDA5LDM3NDEwLDM3NDExLDM3NDEyLDM3NDEzLDM3NDE0LDM3NDE1LDM3NDE2LDM3NDE3LDM3NDE4LDM3NDE5LDM3NDIwLDM3NDIxLDM3NDIyLDM3NDIzLDM3NDI0LDM3NDI1LDM3NDI2LDM3NDI3LDM3NDI4LDM3NDI5LDM3NDMwLDM3NDMxLDM3NDMyLDM3NDMzLDM3NDM0LDM3NDM1LDM3NDM2LDM3NDM3LDM3NDM4LDM3NDM5LDM3NDQwLDM3NDQxLDM3NDQyLDM3NDQzLDM3NDQ0LDM3NDQ1LDI5NDM1LDI5NDYzLDI5NDU5LDI5NDczLDI5NDUwLDI5NDcwLDI5NDY5LDI5NDYxLDI5NDc0LDI5NDk3LDI5NDc3LDI5NDg0LDI5NDk2LDI5NDg5LDI5NTIwLDI5NTE3LDI5NTI3LDI5NTM2LDI5NTQ4LDI5NTUxLDI5NTY2LDMzMzA3LDIyODIxLDM5MTQzLDIyODIwLDIyNzg2LDM5MjY3LDM5MjcxLDM5MjcyLDM5MjczLDM5Mjc0LDM5Mjc1LDM5Mjc2LDM5Mjg0LDM5Mjg3LDM5MjkzLDM5Mjk2LDM5MzAwLDM5MzAzLDM5MzA2LDM5MzA5LDM5MzEyLDM5MzEzLDM5MzE1LDM5MzE2LDM5MzE3LDI0MTkyLDI0MjA5LDI0MjAzLDI0MjE0LDI0MjI5LDI0MjI0LDI0MjQ5LDI0MjQ1LDI0MjU0LDI0MjQzLDM2MTc5LDI0Mjc0LDI0MjczLDI0MjgzLDI0Mjk2LDI0Mjk4LDMzMjEwLDI0NTE2LDI0NTIxLDI0NTM0LDI0NTI3LDI0NTc5LDI0NTU4LDI0NTgwLDI0NTQ1LDI0NTQ4LDI0NTc0LDI0NTgxLDI0NTgyLDI0NTU0LDI0NTU3LDI0NTY4LDI0NjAxLDI0NjI5LDI0NjE0LDI0NjAzLDI0NTkxLDI0NTg5LDI0NjE3LDI0NjE5LDI0NTg2LDI0NjM5LDI0NjA5LDI0Njk2LDI0Njk3LDI0Njk5LDI0Njk4LDI0NjQyLDM3NDQ2LDM3NDQ3LDM3NDQ4LDM3NDQ5LDM3NDUwLDM3NDUxLDM3NDUyLDM3NDUzLDM3NDU0LDM3NDU1LDM3NDU2LDM3NDU3LDM3NDU4LDM3NDU5LDM3NDYwLDM3NDYxLDM3NDYyLDM3NDYzLDM3NDY0LDM3NDY1LDM3NDY2LDM3NDY3LDM3NDY4LDM3NDY5LDM3NDcwLDM3NDcxLDM3NDcyLDM3NDczLDM3NDc0LDM3NDc1LDM3NDc2LDM3NDc3LDM3NDc4LDM3NDc5LDM3NDgwLDM3NDgxLDM3NDgyLDM3NDgzLDM3NDg0LDM3NDg1LDM3NDg2LDM3NDg3LDM3NDg4LDM3NDg5LDM3NDkwLDM3NDkxLDM3NDkzLDM3NDk0LDM3NDk1LDM3NDk2LDM3NDk3LDM3NDk4LDM3NDk5LDM3NTAwLDM3NTAxLDM3NTAyLDM3NTAzLDM3NTA0LDM3NTA1LDM3NTA2LDM3NTA3LDM3NTA4LDM3NTA5LDM3NTEwLDM3NTExLDM3NTEyLDM3NTEzLDM3NTE0LDM3NTE1LDM3NTE2LDM3NTE3LDM3NTE5LDM3NTIwLDM3NTIxLDM3NTIyLDM3NTIzLDM3NTI0LDM3NTI1LDM3NTI2LDM3NTI3LDM3NTI4LDM3NTI5LDM3NTMwLDM3NTMxLDM3NTMyLDM3NTMzLDM3NTM0LDM3NTM1LDM3NTM2LDM3NTM3LDM3NTM4LDM3NTM5LDM3NTQwLDM3NTQxLDM3NTQyLDM3NTQzLDI0NjgyLDI0NzAxLDI0NzI2LDI0NzMwLDI0NzQ5LDI0NzMzLDI0NzA3LDI0NzIyLDI0NzE2LDI0NzMxLDI0ODEyLDI0NzYzLDI0NzUzLDI0Nzk3LDI0NzkyLDI0Nzc0LDI0Nzk0LDI0NzU2LDI0ODY0LDI0ODcwLDI0ODUzLDI0ODY3LDI0ODIwLDI0ODMyLDI0ODQ2LDI0ODc1LDI0OTA2LDI0OTQ5LDI1MDA0LDI0OTgwLDI0OTk5LDI1MDE1LDI1MDQ0LDI1MDc3LDI0NTQxLDM4NTc5LDM4Mzc3LDM4Mzc5LDM4Mzg1LDM4Mzg3LDM4Mzg5LDM4MzkwLDM4Mzk2LDM4Mzk4LDM4NDAzLDM4NDA0LDM4NDA2LDM4NDA4LDM4NDEwLDM4NDExLDM4NDEyLDM4NDEzLDM4NDE1LDM4NDE4LDM4NDIxLDM4NDIyLDM4NDIzLDM4NDI1LDM4NDI2LDIwMDEyLDI5MjQ3LDI1MTA5LDI3NzAxLDI3NzMyLDI3NzQwLDI3NzIyLDI3ODExLDI3NzgxLDI3NzkyLDI3Nzk2LDI3Nzg4LDI3NzUyLDI3NzUzLDI3NzY0LDI3NzY2LDI3NzgyLDI3ODE3LDI3ODU2LDI3ODYwLDI3ODIxLDI3ODk1LDI3ODk2LDI3ODg5LDI3ODYzLDI3ODI2LDI3ODcyLDI3ODYyLDI3ODk4LDI3ODgzLDI3ODg2LDI3ODI1LDI3ODU5LDI3ODg3LDI3OTAyLDM3NTQ0LDM3NTQ1LDM3NTQ2LDM3NTQ3LDM3NTQ4LDM3NTQ5LDM3NTUxLDM3NTUyLDM3NTUzLDM3NTU0LDM3NTU1LDM3NTU2LDM3NTU3LDM3NTU4LDM3NTU5LDM3NTYwLDM3NTYxLDM3NTYyLDM3NTYzLDM3NTY0LDM3NTY1LDM3NTY2LDM3NTY3LDM3NTY4LDM3NTY5LDM3NTcwLDM3NTcxLDM3NTcyLDM3NTczLDM3NTc0LDM3NTc1LDM3NTc3LDM3NTc4LDM3NTc5LDM3NTgwLDM3NTgxLDM3NTgyLDM3NTgzLDM3NTg0LDM3NTg1LDM3NTg2LDM3NTg3LDM3NTg4LDM3NTg5LDM3NTkwLDM3NTkxLDM3NTkyLDM3NTkzLDM3NTk0LDM3NTk1LDM3NTk2LDM3NTk3LDM3NTk4LDM3NTk5LDM3NjAwLDM3NjAxLDM3NjAyLDM3NjAzLDM3NjA0LDM3NjA1LDM3NjA2LDM3NjA3LDM3NjA4LDM3NjA5LDM3NjEwLDM3NjExLDM3NjEyLDM3NjEzLDM3NjE0LDM3NjE1LDM3NjE2LDM3NjE3LDM3NjE4LDM3NjE5LDM3NjIwLDM3NjIxLDM3NjIyLDM3NjIzLDM3NjI0LDM3NjI1LDM3NjI2LDM3NjI3LDM3NjI4LDM3NjI5LDM3NjMwLDM3NjMxLDM3NjMyLDM3NjMzLDM3NjM0LDM3NjM1LDM3NjM2LDM3NjM3LDM3NjM4LDM3NjM5LDM3NjQwLDM3NjQxLDI3OTYxLDI3OTQzLDI3OTE2LDI3OTcxLDI3OTc2LDI3OTExLDI3OTA4LDI3OTI5LDI3OTE4LDI3OTQ3LDI3OTgxLDI3OTUwLDI3OTU3LDI3OTMwLDI3OTgzLDI3OTg2LDI3OTg4LDI3OTU1LDI4MDQ5LDI4MDE1LDI4MDYyLDI4MDY0LDI3OTk4LDI4MDUxLDI4MDUyLDI3OTk2LDI4MDAwLDI4MDI4LDI4MDAzLDI4MTg2LDI4MTAzLDI4MTAxLDI4MTI2LDI4MTc0LDI4MDk1LDI4MTI4LDI4MTc3LDI4MTM0LDI4MTI1LDI4MTIxLDI4MTgyLDI4MDc1LDI4MTcyLDI4MDc4LDI4MjAzLDI4MjcwLDI4MjM4LDI4MjY3LDI4MzM4LDI4MjU1LDI4Mjk0LDI4MjQzLDI4MjQ0LDI4MjEwLDI4MTk3LDI4MjI4LDI4MzgzLDI4MzM3LDI4MzEyLDI4Mzg0LDI4NDYxLDI4Mzg2LDI4MzI1LDI4MzI3LDI4MzQ5LDI4MzQ3LDI4MzQzLDI4Mzc1LDI4MzQwLDI4MzY3LDI4MzAzLDI4MzU0LDI4MzE5LDI4NTE0LDI4NDg2LDI4NDg3LDI4NDUyLDI4NDM3LDI4NDA5LDI4NDYzLDI4NDcwLDI4NDkxLDI4NTMyLDI4NDU4LDI4NDI1LDI4NDU3LDI4NTUzLDI4NTU3LDI4NTU2LDI4NTM2LDI4NTMwLDI4NTQwLDI4NTM4LDI4NjI1LDM3NjQyLDM3NjQzLDM3NjQ0LDM3NjQ1LDM3NjQ2LDM3NjQ3LDM3NjQ4LDM3NjQ5LDM3NjUwLDM3NjUxLDM3NjUyLDM3NjUzLDM3NjU0LDM3NjU1LDM3NjU2LDM3NjU3LDM3NjU4LDM3NjU5LDM3NjYwLDM3NjYxLDM3NjYyLDM3NjYzLDM3NjY0LDM3NjY1LDM3NjY2LDM3NjY3LDM3NjY4LDM3NjY5LDM3NjcwLDM3NjcxLDM3NjcyLDM3NjczLDM3Njc0LDM3Njc1LDM3Njc2LDM3Njc3LDM3Njc4LDM3Njc5LDM3NjgwLDM3NjgxLDM3NjgyLDM3NjgzLDM3Njg0LDM3Njg1LDM3Njg2LDM3Njg3LDM3Njg4LDM3Njg5LDM3NjkwLDM3NjkxLDM3NjkyLDM3NjkzLDM3Njk1LDM3Njk2LDM3Njk3LDM3Njk4LDM3Njk5LDM3NzAwLDM3NzAxLDM3NzAyLDM3NzAzLDM3NzA0LDM3NzA1LDM3NzA2LDM3NzA3LDM3NzA4LDM3NzA5LDM3NzEwLDM3NzExLDM3NzEyLDM3NzEzLDM3NzE0LDM3NzE1LDM3NzE2LDM3NzE3LDM3NzE4LDM3NzE5LDM3NzIwLDM3NzIxLDM3NzIyLDM3NzIzLDM3NzI0LDM3NzI1LDM3NzI2LDM3NzI3LDM3NzI4LDM3NzI5LDM3NzMwLDM3NzMxLDM3NzMyLDM3NzMzLDM3NzM0LDM3NzM1LDM3NzM2LDM3NzM3LDM3NzM5LDI4NjE3LDI4NTgzLDI4NjAxLDI4NTk4LDI4NjEwLDI4NjQxLDI4NjU0LDI4NjM4LDI4NjQwLDI4NjU1LDI4Njk4LDI4NzA3LDI4Njk5LDI4NzI5LDI4NzI1LDI4NzUxLDI4NzY2LDIzNDI0LDIzNDI4LDIzNDQ1LDIzNDQzLDIzNDYxLDIzNDgwLDI5OTk5LDM5NTgyLDI1NjUyLDIzNTI0LDIzNTM0LDM1MTIwLDIzNTM2LDM2NDIzLDM1NTkxLDM2NzkwLDM2ODE5LDM2ODIxLDM2ODM3LDM2ODQ2LDM2ODM2LDM2ODQxLDM2ODM4LDM2ODUxLDM2ODQwLDM2ODY5LDM2ODY4LDM2ODc1LDM2OTAyLDM2ODgxLDM2ODc3LDM2ODg2LDM2ODk3LDM2OTE3LDM2OTE4LDM2OTA5LDM2OTExLDM2OTMyLDM2OTQ1LDM2OTQ2LDM2OTQ0LDM2OTY4LDM2OTUyLDM2OTYyLDM2OTU1LDI2Mjk3LDM2OTgwLDM2OTg5LDM2OTk0LDM3MDAwLDM2OTk1LDM3MDAzLDI0NDAwLDI0NDA3LDI0NDA2LDI0NDA4LDIzNjExLDIxNjc1LDIzNjMyLDIzNjQxLDIzNDA5LDIzNjUxLDIzNjU0LDMyNzAwLDI0MzYyLDI0MzYxLDI0MzY1LDMzMzk2LDI0MzgwLDM5NzM5LDIzNjYyLDIyOTEzLDIyOTE1LDIyOTI1LDIyOTUzLDIyOTU0LDIyOTQ3LDM3NzQwLDM3NzQxLDM3NzQyLDM3NzQzLDM3NzQ0LDM3NzQ1LDM3NzQ2LDM3NzQ3LDM3NzQ4LDM3NzQ5LDM3NzUwLDM3NzUxLDM3NzUyLDM3NzUzLDM3NzU0LDM3NzU1LDM3NzU2LDM3NzU3LDM3NzU4LDM3NzU5LDM3NzYwLDM3NzYxLDM3NzYyLDM3NzYzLDM3NzY0LDM3NzY1LDM3NzY2LDM3NzY3LDM3NzY4LDM3NzY5LDM3NzcwLDM3NzcxLDM3NzcyLDM3NzczLDM3Nzc0LDM3Nzc2LDM3Nzc3LDM3Nzc4LDM3Nzc5LDM3NzgwLDM3NzgxLDM3NzgyLDM3NzgzLDM3Nzg0LDM3Nzg1LDM3Nzg2LDM3Nzg3LDM3Nzg4LDM3Nzg5LDM3NzkwLDM3NzkxLDM3NzkyLDM3NzkzLDM3Nzk0LDM3Nzk1LDM3Nzk2LDM3Nzk3LDM3Nzk4LDM3Nzk5LDM3ODAwLDM3ODAxLDM3ODAyLDM3ODAzLDM3ODA0LDM3ODA1LDM3ODA2LDM3ODA3LDM3ODA4LDM3ODA5LDM3ODEwLDM3ODExLDM3ODEyLDM3ODEzLDM3ODE0LDM3ODE1LDM3ODE2LDM3ODE3LDM3ODE4LDM3ODE5LDM3ODIwLDM3ODIxLDM3ODIyLDM3ODIzLDM3ODI0LDM3ODI1LDM3ODI2LDM3ODI3LDM3ODI4LDM3ODI5LDM3ODMwLDM3ODMxLDM3ODMyLDM3ODMzLDM3ODM1LDM3ODM2LDM3ODM3LDIyOTM1LDIyOTg2LDIyOTU1LDIyOTQyLDIyOTQ4LDIyOTk0LDIyOTYyLDIyOTU5LDIyOTk5LDIyOTc0LDIzMDQ1LDIzMDQ2LDIzMDA1LDIzMDQ4LDIzMDExLDIzMDAwLDIzMDMzLDIzMDUyLDIzMDQ5LDIzMDkwLDIzMDkyLDIzMDU3LDIzMDc1LDIzMDU5LDIzMTA0LDIzMTQzLDIzMTE0LDIzMTI1LDIzMTAwLDIzMTM4LDIzMTU3LDMzMDA0LDIzMjEwLDIzMTk1LDIzMTU5LDIzMTYyLDIzMjMwLDIzMjc1LDIzMjE4LDIzMjUwLDIzMjUyLDIzMjI0LDIzMjY0LDIzMjY3LDIzMjgxLDIzMjU0LDIzMjcwLDIzMjU2LDIzMjYwLDIzMzA1LDIzMzE5LDIzMzE4LDIzMzQ2LDIzMzUxLDIzMzYwLDIzNTczLDIzNTgwLDIzMzg2LDIzMzk3LDIzNDExLDIzMzc3LDIzMzc5LDIzMzk0LDM5NTQxLDM5NTQzLDM5NTQ0LDM5NTQ2LDM5NTUxLDM5NTQ5LDM5NTUyLDM5NTUzLDM5NTU3LDM5NTYwLDM5NTYyLDM5NTY4LDM5NTcwLDM5NTcxLDM5NTc0LDM5NTc2LDM5NTc5LDM5NTgwLDM5NTgxLDM5NTgzLDM5NTg0LDM5NTg2LDM5NTg3LDM5NTg5LDM5NTkxLDMyNDE1LDMyNDE3LDMyNDE5LDMyNDIxLDMyNDI0LDMyNDI1LDM3ODM4LDM3ODM5LDM3ODQwLDM3ODQxLDM3ODQyLDM3ODQzLDM3ODQ0LDM3ODQ1LDM3ODQ3LDM3ODQ4LDM3ODQ5LDM3ODUwLDM3ODUxLDM3ODUyLDM3ODUzLDM3ODU0LDM3ODU1LDM3ODU2LDM3ODU3LDM3ODU4LDM3ODU5LDM3ODYwLDM3ODYxLDM3ODYyLDM3ODYzLDM3ODY0LDM3ODY1LDM3ODY2LDM3ODY3LDM3ODY4LDM3ODY5LDM3ODcwLDM3ODcxLDM3ODcyLDM3ODczLDM3ODc0LDM3ODc1LDM3ODc2LDM3ODc3LDM3ODc4LDM3ODc5LDM3ODgwLDM3ODgxLDM3ODgyLDM3ODgzLDM3ODg0LDM3ODg1LDM3ODg2LDM3ODg3LDM3ODg4LDM3ODg5LDM3ODkwLDM3ODkxLDM3ODkyLDM3ODkzLDM3ODk0LDM3ODk1LDM3ODk2LDM3ODk3LDM3ODk4LDM3ODk5LDM3OTAwLDM3OTAxLDM3OTAyLDM3OTAzLDM3OTA0LDM3OTA1LDM3OTA2LDM3OTA3LDM3OTA4LDM3OTA5LDM3OTEwLDM3OTExLDM3OTEyLDM3OTEzLDM3OTE0LDM3OTE1LDM3OTE2LDM3OTE3LDM3OTE4LDM3OTE5LDM3OTIwLDM3OTIxLDM3OTIyLDM3OTIzLDM3OTI0LDM3OTI1LDM3OTI2LDM3OTI3LDM3OTI4LDM3OTI5LDM3OTMwLDM3OTMxLDM3OTMyLDM3OTMzLDM3OTM0LDMyNDI5LDMyNDMyLDMyNDQ2LDMyNDQ4LDMyNDQ5LDMyNDUwLDMyNDU3LDMyNDU5LDMyNDYwLDMyNDY0LDMyNDY4LDMyNDcxLDMyNDc1LDMyNDgwLDMyNDgxLDMyNDg4LDMyNDkxLDMyNDk0LDMyNDk1LDMyNDk3LDMyNDk4LDMyNTI1LDMyNTAyLDMyNTA2LDMyNTA3LDMyNTEwLDMyNTEzLDMyNTE0LDMyNTE1LDMyNTE5LDMyNTIwLDMyNTIzLDMyNTI0LDMyNTI3LDMyNTI5LDMyNTMwLDMyNTM1LDMyNTM3LDMyNTQwLDMyNTM5LDMyNTQzLDMyNTQ1LDMyNTQ2LDMyNTQ3LDMyNTQ4LDMyNTQ5LDMyNTUwLDMyNTUxLDMyNTU0LDMyNTU1LDMyNTU2LDMyNTU3LDMyNTU5LDMyNTYwLDMyNTYxLDMyNTYyLDMyNTYzLDMyNTY1LDI0MTg2LDMwMDc5LDI0MDI3LDMwMDE0LDM3MDEzLDI5NTgyLDI5NTg1LDI5NjE0LDI5NjAyLDI5NTk5LDI5NjQ3LDI5NjM0LDI5NjQ5LDI5NjIzLDI5NjE5LDI5NjMyLDI5NjQxLDI5NjQwLDI5NjY5LDI5NjU3LDM5MDM2LDI5NzA2LDI5NjczLDI5NjcxLDI5NjYyLDI5NjI2LDI5NjgyLDI5NzExLDI5NzM4LDI5Nzg3LDI5NzM0LDI5NzMzLDI5NzM2LDI5NzQ0LDI5NzQyLDI5NzQwLDM3OTM1LDM3OTM2LDM3OTM3LDM3OTM4LDM3OTM5LDM3OTQwLDM3OTQxLDM3OTQyLDM3OTQzLDM3OTQ0LDM3OTQ1LDM3OTQ2LDM3OTQ3LDM3OTQ4LDM3OTQ5LDM3OTUxLDM3OTUyLDM3OTUzLDM3OTU0LDM3OTU1LDM3OTU2LDM3OTU3LDM3OTU4LDM3OTU5LDM3OTYwLDM3OTYxLDM3OTYyLDM3OTYzLDM3OTY0LDM3OTY1LDM3OTY2LDM3OTY3LDM3OTY4LDM3OTY5LDM3OTcwLDM3OTcxLDM3OTcyLDM3OTczLDM3OTc0LDM3OTc1LDM3OTc2LDM3OTc3LDM3OTc4LDM3OTc5LDM3OTgwLDM3OTgxLDM3OTgyLDM3OTgzLDM3OTg0LDM3OTg1LDM3OTg2LDM3OTg3LDM3OTg4LDM3OTg5LDM3OTkwLDM3OTkxLDM3OTkyLDM3OTkzLDM3OTk0LDM3OTk2LDM3OTk3LDM3OTk4LDM3OTk5LDM4MDAwLDM4MDAxLDM4MDAyLDM4MDAzLDM4MDA0LDM4MDA1LDM4MDA2LDM4MDA3LDM4MDA4LDM4MDA5LDM4MDEwLDM4MDExLDM4MDEyLDM4MDEzLDM4MDE0LDM4MDE1LDM4MDE2LDM4MDE3LDM4MDE4LDM4MDE5LDM4MDIwLDM4MDMzLDM4MDM4LDM4MDQwLDM4MDg3LDM4MDk1LDM4MDk5LDM4MTAwLDM4MTA2LDM4MTE4LDM4MTM5LDM4MTcyLDM4MTc2LDI5NzIzLDI5NzIyLDI5NzYxLDI5Nzg4LDI5NzgzLDI5NzgxLDI5Nzg1LDI5ODE1LDI5ODA1LDI5ODIyLDI5ODUyLDI5ODM4LDI5ODI0LDI5ODI1LDI5ODMxLDI5ODM1LDI5ODU0LDI5ODY0LDI5ODY1LDI5ODQwLDI5ODYzLDI5OTA2LDI5ODgyLDM4ODkwLDM4ODkxLDM4ODkyLDI2NDQ0LDI2NDUxLDI2NDYyLDI2NDQwLDI2NDczLDI2NTMzLDI2NTAzLDI2NDc0LDI2NDgzLDI2NTIwLDI2NTM1LDI2NDg1LDI2NTM2LDI2NTI2LDI2NTQxLDI2NTA3LDI2NDg3LDI2NDkyLDI2NjA4LDI2NjMzLDI2NTg0LDI2NjM0LDI2NjAxLDI2NTQ0LDI2NjM2LDI2NTg1LDI2NTQ5LDI2NTg2LDI2NTQ3LDI2NTg5LDI2NjI0LDI2NTYzLDI2NTUyLDI2NTk0LDI2NjM4LDI2NTYxLDI2NjIxLDI2Njc0LDI2Njc1LDI2NzIwLDI2NzIxLDI2NzAyLDI2NzIyLDI2NjkyLDI2NzI0LDI2NzU1LDI2NjUzLDI2NzA5LDI2NzI2LDI2Njg5LDI2NzI3LDI2Njg4LDI2Njg2LDI2Njk4LDI2Njk3LDI2NjY1LDI2ODA1LDI2NzY3LDI2NzQwLDI2NzQzLDI2NzcxLDI2NzMxLDI2ODE4LDI2OTkwLDI2ODc2LDI2OTExLDI2OTEyLDI2ODczLDM4MTgzLDM4MTk1LDM4MjA1LDM4MjExLDM4MjE2LDM4MjE5LDM4MjI5LDM4MjM0LDM4MjQwLDM4MjU0LDM4MjYwLDM4MjYxLDM4MjYzLDM4MjY0LDM4MjY1LDM4MjY2LDM4MjY3LDM4MjY4LDM4MjY5LDM4MjcwLDM4MjcyLDM4MjczLDM4Mjc0LDM4Mjc1LDM4Mjc2LDM4Mjc3LDM4Mjc4LDM4Mjc5LDM4MjgwLDM4MjgxLDM4MjgyLDM4MjgzLDM4Mjg0LDM4Mjg1LDM4Mjg2LDM4Mjg3LDM4Mjg4LDM4Mjg5LDM4MjkwLDM4MjkxLDM4MjkyLDM4MjkzLDM4Mjk0LDM4Mjk1LDM4Mjk2LDM4Mjk3LDM4Mjk4LDM4Mjk5LDM4MzAwLDM4MzAxLDM4MzAyLDM4MzAzLDM4MzA0LDM4MzA1LDM4MzA2LDM4MzA3LDM4MzA4LDM4MzA5LDM4MzEwLDM4MzExLDM4MzEyLDM4MzEzLDM4MzE0LDM4MzE1LDM4MzE2LDM4MzE3LDM4MzE4LDM4MzE5LDM4MzIwLDM4MzIxLDM4MzIyLDM4MzIzLDM4MzI0LDM4MzI1LDM4MzI2LDM4MzI3LDM4MzI4LDM4MzI5LDM4MzMwLDM4MzMxLDM4MzMyLDM4MzMzLDM4MzM0LDM4MzM1LDM4MzM2LDM4MzM3LDM4MzM4LDM4MzM5LDM4MzQwLDM4MzQxLDM4MzQyLDM4MzQzLDM4MzQ0LDM4MzQ1LDM4MzQ2LDM4MzQ3LDI2OTE2LDI2ODY0LDI2ODkxLDI2ODgxLDI2OTY3LDI2ODUxLDI2ODk2LDI2OTkzLDI2OTM3LDI2OTc2LDI2OTQ2LDI2OTczLDI3MDEyLDI2OTg3LDI3MDA4LDI3MDMyLDI3MDAwLDI2OTMyLDI3MDg0LDI3MDE1LDI3MDE2LDI3MDg2LDI3MDE3LDI2OTgyLDI2OTc5LDI3MDAxLDI3MDM1LDI3MDQ3LDI3MDY3LDI3MDUxLDI3MDUzLDI3MDkyLDI3MDU3LDI3MDczLDI3MDgyLDI3MTAzLDI3MDI5LDI3MTA0LDI3MDIxLDI3MTM1LDI3MTgzLDI3MTE3LDI3MTU5LDI3MTYwLDI3MjM3LDI3MTIyLDI3MjA0LDI3MTk4LDI3Mjk2LDI3MjE2LDI3MjI3LDI3MTg5LDI3Mjc4LDI3MjU3LDI3MTk3LDI3MTc2LDI3MjI0LDI3MjYwLDI3MjgxLDI3MjgwLDI3MzA1LDI3Mjg3LDI3MzA3LDI5NDk1LDI5NTIyLDI3NTIxLDI3NTIyLDI3NTI3LDI3NTI0LDI3NTM4LDI3NTM5LDI3NTMzLDI3NTQ2LDI3NTQ3LDI3NTUzLDI3NTYyLDM2NzE1LDM2NzE3LDM2NzIxLDM2NzIyLDM2NzIzLDM2NzI1LDM2NzI2LDM2NzI4LDM2NzI3LDM2NzI5LDM2NzMwLDM2NzMyLDM2NzM0LDM2NzM3LDM2NzM4LDM2NzQwLDM2NzQzLDM2NzQ3LDM4MzQ4LDM4MzQ5LDM4MzUwLDM4MzUxLDM4MzUyLDM4MzUzLDM4MzU0LDM4MzU1LDM4MzU2LDM4MzU3LDM4MzU4LDM4MzU5LDM4MzYwLDM4MzYxLDM4MzYyLDM4MzYzLDM4MzY0LDM4MzY1LDM4MzY2LDM4MzY3LDM4MzY4LDM4MzY5LDM4MzcwLDM4MzcxLDM4MzcyLDM4MzczLDM4Mzc0LDM4Mzc1LDM4MzgwLDM4Mzk5LDM4NDA3LDM4NDE5LDM4NDI0LDM4NDI3LDM4NDMwLDM4NDMyLDM4NDM1LDM4NDM2LDM4NDM3LDM4NDM4LDM4NDM5LDM4NDQwLDM4NDQxLDM4NDQzLDM4NDQ0LDM4NDQ1LDM4NDQ3LDM4NDQ4LDM4NDU1LDM4NDU2LDM4NDU3LDM4NDU4LDM4NDYyLDM4NDY1LDM4NDY3LDM4NDc0LDM4NDc4LDM4NDc5LDM4NDgxLDM4NDgyLDM4NDgzLDM4NDg2LDM4NDg3LDM4NDg4LDM4NDg5LDM4NDkwLDM4NDkyLDM4NDkzLDM4NDk0LDM4NDk2LDM4NDk5LDM4NTAxLDM4NTAyLDM4NTA3LDM4NTA5LDM4NTEwLDM4NTExLDM4NTEyLDM4NTEzLDM4NTE1LDM4NTIwLDM4NTIxLDM4NTIyLDM4NTIzLDM4NTI0LDM4NTI1LDM4NTI2LDM4NTI3LDM4NTI4LDM4NTI5LDM4NTMwLDM4NTMxLDM4NTMyLDM4NTM1LDM4NTM3LDM4NTM4LDM2NzQ5LDM2NzUwLDM2NzUxLDM2NzYwLDM2NzYyLDM2NTU4LDI1MDk5LDI1MTExLDI1MTE1LDI1MTE5LDI1MTIyLDI1MTIxLDI1MTI1LDI1MTI0LDI1MTMyLDMzMjU1LDI5OTM1LDI5OTQwLDI5OTUxLDI5OTY3LDI5OTY5LDI5OTcxLDI1OTA4LDI2MDk0LDI2MDk1LDI2MDk2LDI2MTIyLDI2MTM3LDI2NDgyLDI2MTE1LDI2MTMzLDI2MTEyLDI4ODA1LDI2MzU5LDI2MTQxLDI2MTY0LDI2MTYxLDI2MTY2LDI2MTY1LDMyNzc0LDI2MjA3LDI2MTk2LDI2MTc3LDI2MTkxLDI2MTk4LDI2MjA5LDI2MTk5LDI2MjMxLDI2MjQ0LDI2MjUyLDI2Mjc5LDI2MjY5LDI2MzAyLDI2MzMxLDI2MzMyLDI2MzQyLDI2MzQ1LDM2MTQ2LDM2MTQ3LDM2MTUwLDM2MTU1LDM2MTU3LDM2MTYwLDM2MTY1LDM2MTY2LDM2MTY4LDM2MTY5LDM2MTY3LDM2MTczLDM2MTgxLDM2MTg1LDM1MjcxLDM1Mjc0LDM1Mjc1LDM1Mjc2LDM1Mjc4LDM1Mjc5LDM1MjgwLDM1MjgxLDI5Mjk0LDI5MzQzLDI5Mjc3LDI5Mjg2LDI5Mjk1LDI5MzEwLDI5MzExLDI5MzE2LDI5MzIzLDI5MzI1LDI5MzI3LDI5MzMwLDI1MzUyLDI1Mzk0LDI1NTIwLDM4NTQwLDM4NTQyLDM4NTQ1LDM4NTQ2LDM4NTQ3LDM4NTQ5LDM4NTUwLDM4NTU0LDM4NTU1LDM4NTU3LDM4NTU4LDM4NTU5LDM4NTYwLDM4NTYxLDM4NTYyLDM4NTYzLDM4NTY0LDM4NTY1LDM4NTY2LDM4NTY4LDM4NTY5LDM4NTcwLDM4NTcxLDM4NTcyLDM4NTczLDM4NTc0LDM4NTc1LDM4NTc3LDM4NTc4LDM4NTgwLDM4NTgxLDM4NTgzLDM4NTg0LDM4NTg2LDM4NTg3LDM4NTkxLDM4NTk0LDM4NTk1LDM4NjAwLDM4NjAyLDM4NjAzLDM4NjA4LDM4NjA5LDM4NjExLDM4NjEyLDM4NjE0LDM4NjE1LDM4NjE2LDM4NjE3LDM4NjE4LDM4NjE5LDM4NjIwLDM4NjIxLDM4NjIyLDM4NjIzLDM4NjI1LDM4NjI2LDM4NjI3LDM4NjI4LDM4NjI5LDM4NjMwLDM4NjMxLDM4NjM1LDM4NjM2LDM4NjM3LDM4NjM4LDM4NjQwLDM4NjQxLDM4NjQyLDM4NjQ0LDM4NjQ1LDM4NjQ4LDM4NjUwLDM4NjUxLDM4NjUyLDM4NjUzLDM4NjU1LDM4NjU4LDM4NjU5LDM4NjYxLDM4NjY2LDM4NjY3LDM4NjY4LDM4NjcyLDM4NjczLDM4Njc0LDM4Njc2LDM4Njc3LDM4Njc5LDM4NjgwLDM4NjgxLDM4NjgyLDM4NjgzLDM4Njg1LDM4Njg3LDM4Njg4LDI1NjYzLDI1ODE2LDMyNzcyLDI3NjI2LDI3NjM1LDI3NjQ1LDI3NjM3LDI3NjQxLDI3NjUzLDI3NjU1LDI3NjU0LDI3NjYxLDI3NjY5LDI3NjcyLDI3NjczLDI3Njc0LDI3NjgxLDI3Njg5LDI3Njg0LDI3NjkwLDI3Njk4LDI1OTA5LDI1OTQxLDI1OTYzLDI5MjYxLDI5MjY2LDI5MjcwLDI5MjMyLDM0NDAyLDIxMDE0LDMyOTI3LDMyOTI0LDMyOTE1LDMyOTU2LDI2Mzc4LDMyOTU3LDMyOTQ1LDMyOTM5LDMyOTQxLDMyOTQ4LDMyOTUxLDMyOTk5LDMzMDAwLDMzMDAxLDMzMDAyLDMyOTg3LDMyOTYyLDMyOTY0LDMyOTg1LDMyOTczLDMyOTgzLDI2Mzg0LDMyOTg5LDMzMDAzLDMzMDA5LDMzMDEyLDMzMDA1LDMzMDM3LDMzMDM4LDMzMDEwLDMzMDIwLDI2Mzg5LDMzMDQyLDM1OTMwLDMzMDc4LDMzMDU0LDMzMDY4LDMzMDQ4LDMzMDc0LDMzMDk2LDMzMTAwLDMzMTA3LDMzMTQwLDMzMTEzLDMzMTE0LDMzMTM3LDMzMTIwLDMzMTI5LDMzMTQ4LDMzMTQ5LDMzMTMzLDMzMTI3LDIyNjA1LDIzMjIxLDMzMTYwLDMzMTU0LDMzMTY5LDI4MzczLDMzMTg3LDMzMTk0LDMzMjI4LDI2NDA2LDMzMjI2LDMzMjExLDM4Njg5LDM4NjkwLDM4NjkxLDM4NjkyLDM4NjkzLDM4Njk0LDM4Njk1LDM4Njk2LDM4Njk3LDM4Njk5LDM4NzAwLDM4NzAyLDM4NzAzLDM4NzA1LDM4NzA3LDM4NzA4LDM4NzA5LDM4NzEwLDM4NzExLDM4NzE0LDM4NzE1LDM4NzE2LDM4NzE3LDM4NzE5LDM4NzIwLDM4NzIxLDM4NzIyLDM4NzIzLDM4NzI0LDM4NzI1LDM4NzI2LDM4NzI3LDM4NzI4LDM4NzI5LDM4NzMwLDM4NzMxLDM4NzMyLDM4NzMzLDM4NzM0LDM4NzM1LDM4NzM2LDM4NzM3LDM4NzQwLDM4NzQxLDM4NzQzLDM4NzQ0LDM4NzQ2LDM4NzQ4LDM4NzQ5LDM4NzUxLDM4NzU1LDM4NzU2LDM4NzU4LDM4NzU5LDM4NzYwLDM4NzYyLDM4NzYzLDM4NzY0LDM4NzY1LDM4NzY2LDM4NzY3LDM4NzY4LDM4NzY5LDM4NzcwLDM4NzczLDM4Nzc1LDM4Nzc2LDM4Nzc3LDM4Nzc4LDM4Nzc5LDM4NzgxLDM4NzgyLDM4NzgzLDM4Nzg0LDM4Nzg1LDM4Nzg2LDM4Nzg3LDM4Nzg4LDM4NzkwLDM4NzkxLDM4NzkyLDM4NzkzLDM4Nzk0LDM4Nzk2LDM4Nzk4LDM4Nzk5LDM4ODAwLDM4ODAzLDM4ODA1LDM4ODA2LDM4ODA3LDM4ODA5LDM4ODEwLDM4ODExLDM4ODEyLDM4ODEzLDMzMjE3LDMzMTkwLDI3NDI4LDI3NDQ3LDI3NDQ5LDI3NDU5LDI3NDYyLDI3NDgxLDM5MTIxLDM5MTIyLDM5MTIzLDM5MTI1LDM5MTI5LDM5MTMwLDI3NTcxLDI0Mzg0LDI3NTg2LDM1MzE1LDI2MDAwLDQwNzg1LDI2MDAzLDI2MDQ0LDI2MDU0LDI2MDUyLDI2MDUxLDI2MDYwLDI2MDYyLDI2MDY2LDI2MDcwLDI4ODAwLDI4ODI4LDI4ODIyLDI4ODI5LDI4ODU5LDI4ODY0LDI4ODU1LDI4ODQzLDI4ODQ5LDI4OTA0LDI4ODc0LDI4OTQ0LDI4OTQ3LDI4OTUwLDI4OTc1LDI4OTc3LDI5MDQzLDI5MDIwLDI5MDMyLDI4OTk3LDI5MDQyLDI5MDAyLDI5MDQ4LDI5MDUwLDI5MDgwLDI5MTA3LDI5MTA5LDI5MDk2LDI5MDg4LDI5MTUyLDI5MTQwLDI5MTU5LDI5MTc3LDI5MjEzLDI5MjI0LDI4NzgwLDI4OTUyLDI5MDMwLDI5MTEzLDI1MTUwLDI1MTQ5LDI1MTU1LDI1MTYwLDI1MTYxLDMxMDM1LDMxMDQwLDMxMDQ2LDMxMDQ5LDMxMDY3LDMxMDY4LDMxMDU5LDMxMDY2LDMxMDc0LDMxMDYzLDMxMDcyLDMxMDg3LDMxMDc5LDMxMDk4LDMxMTA5LDMxMTE0LDMxMTMwLDMxMTQzLDMxMTU1LDI0NTI5LDI0NTI4LDM4ODE0LDM4ODE1LDM4ODE3LDM4ODE4LDM4ODIwLDM4ODIxLDM4ODIyLDM4ODIzLDM4ODI0LDM4ODI1LDM4ODI2LDM4ODI4LDM4ODMwLDM4ODMyLDM4ODMzLDM4ODM1LDM4ODM3LDM4ODM4LDM4ODM5LDM4ODQwLDM4ODQxLDM4ODQyLDM4ODQzLDM4ODQ0LDM4ODQ1LDM4ODQ2LDM4ODQ3LDM4ODQ4LDM4ODQ5LDM4ODUwLDM4ODUxLDM4ODUyLDM4ODUzLDM4ODU0LDM4ODU1LDM4ODU2LDM4ODU3LDM4ODU4LDM4ODU5LDM4ODYwLDM4ODYxLDM4ODYyLDM4ODYzLDM4ODY0LDM4ODY1LDM4ODY2LDM4ODY3LDM4ODY4LDM4ODY5LDM4ODcwLDM4ODcxLDM4ODcyLDM4ODczLDM4ODc0LDM4ODc1LDM4ODc2LDM4ODc3LDM4ODc4LDM4ODc5LDM4ODgwLDM4ODgxLDM4ODgyLDM4ODgzLDM4ODg0LDM4ODg1LDM4ODg4LDM4ODk0LDM4ODk1LDM4ODk2LDM4ODk3LDM4ODk4LDM4OTAwLDM4OTAzLDM4OTA0LDM4OTA1LDM4OTA2LDM4OTA3LDM4OTA4LDM4OTA5LDM4OTEwLDM4OTExLDM4OTEyLDM4OTEzLDM4OTE0LDM4OTE1LDM4OTE2LDM4OTE3LDM4OTE4LDM4OTE5LDM4OTIwLDM4OTIxLDM4OTIyLDM4OTIzLDM4OTI0LDM4OTI1LDM4OTI2LDI0NjM2LDI0NjY5LDI0NjY2LDI0Njc5LDI0NjQxLDI0NjY1LDI0Njc1LDI0NzQ3LDI0ODM4LDI0ODQ1LDI0OTI1LDI1MDAxLDI0OTg5LDI1MDM1LDI1MDQxLDI1MDk0LDMyODk2LDMyODk1LDI3Nzk1LDI3ODk0LDI4MTU2LDMwNzEwLDMwNzEyLDMwNzIwLDMwNzI5LDMwNzQzLDMwNzQ0LDMwNzM3LDI2MDI3LDMwNzY1LDMwNzQ4LDMwNzQ5LDMwNzc3LDMwNzc4LDMwNzc5LDMwNzUxLDMwNzgwLDMwNzU3LDMwNzY0LDMwNzU1LDMwNzYxLDMwNzk4LDMwODI5LDMwODA2LDMwODA3LDMwNzU4LDMwODAwLDMwNzkxLDMwNzk2LDMwODI2LDMwODc1LDMwODY3LDMwODc0LDMwODU1LDMwODc2LDMwODgxLDMwODgzLDMwODk4LDMwOTA1LDMwODg1LDMwOTMyLDMwOTM3LDMwOTIxLDMwOTU2LDMwOTYyLDMwOTgxLDMwOTY0LDMwOTk1LDMxMDEyLDMxMDA2LDMxMDI4LDQwODU5LDQwNjk3LDQwNjk5LDQwNzAwLDMwNDQ5LDMwNDY4LDMwNDc3LDMwNDU3LDMwNDcxLDMwNDcyLDMwNDkwLDMwNDk4LDMwNDg5LDMwNTA5LDMwNTAyLDMwNTE3LDMwNTIwLDMwNTQ0LDMwNTQ1LDMwNTM1LDMwNTMxLDMwNTU0LDMwNTY4LDM4OTI3LDM4OTI4LDM4OTI5LDM4OTMwLDM4OTMxLDM4OTMyLDM4OTMzLDM4OTM0LDM4OTM1LDM4OTM2LDM4OTM3LDM4OTM4LDM4OTM5LDM4OTQwLDM4OTQxLDM4OTQyLDM4OTQzLDM4OTQ0LDM4OTQ1LDM4OTQ2LDM4OTQ3LDM4OTQ4LDM4OTQ5LDM4OTUwLDM4OTUxLDM4OTUyLDM4OTUzLDM4OTU0LDM4OTU1LDM4OTU2LDM4OTU3LDM4OTU4LDM4OTU5LDM4OTYwLDM4OTYxLDM4OTYyLDM4OTYzLDM4OTY0LDM4OTY1LDM4OTY2LDM4OTY3LDM4OTY4LDM4OTY5LDM4OTcwLDM4OTcxLDM4OTcyLDM4OTczLDM4OTc0LDM4OTc1LDM4OTc2LDM4OTc3LDM4OTc4LDM4OTc5LDM4OTgwLDM4OTgxLDM4OTgyLDM4OTgzLDM4OTg0LDM4OTg1LDM4OTg2LDM4OTg3LDM4OTg4LDM4OTg5LDM4OTkwLDM4OTkxLDM4OTkyLDM4OTkzLDM4OTk0LDM4OTk1LDM4OTk2LDM4OTk3LDM4OTk4LDM4OTk5LDM5MDAwLDM5MDAxLDM5MDAyLDM5MDAzLDM5MDA0LDM5MDA1LDM5MDA2LDM5MDA3LDM5MDA4LDM5MDA5LDM5MDEwLDM5MDExLDM5MDEyLDM5MDEzLDM5MDE0LDM5MDE1LDM5MDE2LDM5MDE3LDM5MDE4LDM5MDE5LDM5MDIwLDM5MDIxLDM5MDIyLDMwNTYyLDMwNTY1LDMwNTkxLDMwNjA1LDMwNTg5LDMwNTkyLDMwNjA0LDMwNjA5LDMwNjIzLDMwNjI0LDMwNjQwLDMwNjQ1LDMwNjUzLDMwMDEwLDMwMDE2LDMwMDMwLDMwMDI3LDMwMDI0LDMwMDQzLDMwMDY2LDMwMDczLDMwMDgzLDMyNjAwLDMyNjA5LDMyNjA3LDM1NDAwLDMyNjE2LDMyNjI4LDMyNjI1LDMyNjMzLDMyNjQxLDMyNjM4LDMwNDEzLDMwNDM3LDM0ODY2LDM4MDIxLDM4MDIyLDM4MDIzLDM4MDI3LDM4MDI2LDM4MDI4LDM4MDI5LDM4MDMxLDM4MDMyLDM4MDM2LDM4MDM5LDM4MDM3LDM4MDQyLDM4MDQzLDM4MDQ0LDM4MDUxLDM4MDUyLDM4MDU5LDM4MDU4LDM4MDYxLDM4MDYwLDM4MDYzLDM4MDY0LDM4MDY2LDM4MDY4LDM4MDcwLDM4MDcxLDM4MDcyLDM4MDczLDM4MDc0LDM4MDc2LDM4MDc3LDM4MDc5LDM4MDg0LDM4MDg4LDM4MDg5LDM4MDkwLDM4MDkxLDM4MDkyLDM4MDkzLDM4MDk0LDM4MDk2LDM4MDk3LDM4MDk4LDM4MTAxLDM4MTAyLDM4MTAzLDM4MTA1LDM4MTA0LDM4MTA3LDM4MTEwLDM4MTExLDM4MTEyLDM4MTE0LDM4MTE2LDM4MTE3LDM4MTE5LDM4MTIwLDM4MTIyLDM5MDIzLDM5MDI0LDM5MDI1LDM5MDI2LDM5MDI3LDM5MDI4LDM5MDUxLDM5MDU0LDM5MDU4LDM5MDYxLDM5MDY1LDM5MDc1LDM5MDgwLDM5MDgxLDM5MDgyLDM5MDgzLDM5MDg0LDM5MDg1LDM5MDg2LDM5MDg3LDM5MDg4LDM5MDg5LDM5MDkwLDM5MDkxLDM5MDkyLDM5MDkzLDM5MDk0LDM5MDk1LDM5MDk2LDM5MDk3LDM5MDk4LDM5MDk5LDM5MTAwLDM5MTAxLDM5MTAyLDM5MTAzLDM5MTA0LDM5MTA1LDM5MTA2LDM5MTA3LDM5MTA4LDM5MTA5LDM5MTEwLDM5MTExLDM5MTEyLDM5MTEzLDM5MTE0LDM5MTE1LDM5MTE2LDM5MTE3LDM5MTE5LDM5MTIwLDM5MTI0LDM5MTI2LDM5MTI3LDM5MTMxLDM5MTMyLDM5MTMzLDM5MTM2LDM5MTM3LDM5MTM4LDM5MTM5LDM5MTQwLDM5MTQxLDM5MTQyLDM5MTQ1LDM5MTQ2LDM5MTQ3LDM5MTQ4LDM5MTQ5LDM5MTUwLDM5MTUxLDM5MTUyLDM5MTUzLDM5MTU0LDM5MTU1LDM5MTU2LDM5MTU3LDM5MTU4LDM5MTU5LDM5MTYwLDM5MTYxLDM5MTYyLDM5MTYzLDM5MTY0LDM5MTY1LDM5MTY2LDM5MTY3LDM5MTY4LDM5MTY5LDM5MTcwLDM5MTcxLDM5MTcyLDM5MTczLDM5MTc0LDM5MTc1LDM4MTIxLDM4MTIzLDM4MTI2LDM4MTI3LDM4MTMxLDM4MTMyLDM4MTMzLDM4MTM1LDM4MTM3LDM4MTQwLDM4MTQxLDM4MTQzLDM4MTQ3LDM4MTQ2LDM4MTUwLDM4MTUxLDM4MTUzLDM4MTU0LDM4MTU3LDM4MTU4LDM4MTU5LDM4MTYyLDM4MTYzLDM4MTY0LDM4MTY1LDM4MTY2LDM4MTY4LDM4MTcxLDM4MTczLDM4MTc0LDM4MTc1LDM4MTc4LDM4MTg2LDM4MTg3LDM4MTg1LDM4MTg4LDM4MTkzLDM4MTk0LDM4MTk2LDM4MTk4LDM4MTk5LDM4MjAwLDM4MjA0LDM4MjA2LDM4MjA3LDM4MjEwLDM4MTk3LDM4MjEyLDM4MjEzLDM4MjE0LDM4MjE3LDM4MjIwLDM4MjIyLDM4MjIzLDM4MjI2LDM4MjI3LDM4MjI4LDM4MjMwLDM4MjMxLDM4MjMyLDM4MjMzLDM4MjM1LDM4MjM4LDM4MjM5LDM4MjM3LDM4MjQxLDM4MjQyLDM4MjQ0LDM4MjQ1LDM4MjQ2LDM4MjQ3LDM4MjQ4LDM4MjQ5LDM4MjUwLDM4MjUxLDM4MjUyLDM4MjU1LDM4MjU3LDM4MjU4LDM4MjU5LDM4MjAyLDMwNjk1LDMwNzAwLDM4NjAxLDMxMTg5LDMxMjEzLDMxMjAzLDMxMjExLDMxMjM4LDIzODc5LDMxMjM1LDMxMjM0LDMxMjYyLDMxMjUyLDM5MTc2LDM5MTc3LDM5MTc4LDM5MTc5LDM5MTgwLDM5MTgyLDM5MTgzLDM5MTg1LDM5MTg2LDM5MTg3LDM5MTg4LDM5MTg5LDM5MTkwLDM5MTkxLDM5MTkyLDM5MTkzLDM5MTk0LDM5MTk1LDM5MTk2LDM5MTk3LDM5MTk4LDM5MTk5LDM5MjAwLDM5MjAxLDM5MjAyLDM5MjAzLDM5MjA0LDM5MjA1LDM5MjA2LDM5MjA3LDM5MjA4LDM5MjA5LDM5MjEwLDM5MjExLDM5MjEyLDM5MjEzLDM5MjE1LDM5MjE2LDM5MjE3LDM5MjE4LDM5MjE5LDM5MjIwLDM5MjIxLDM5MjIyLDM5MjIzLDM5MjI0LDM5MjI1LDM5MjI2LDM5MjI3LDM5MjI4LDM5MjI5LDM5MjMwLDM5MjMxLDM5MjMyLDM5MjMzLDM5MjM0LDM5MjM1LDM5MjM2LDM5MjM3LDM5MjM4LDM5MjM5LDM5MjQwLDM5MjQxLDM5MjQyLDM5MjQzLDM5MjQ0LDM5MjQ1LDM5MjQ2LDM5MjQ3LDM5MjQ4LDM5MjQ5LDM5MjUwLDM5MjUxLDM5MjU0LDM5MjU1LDM5MjU2LDM5MjU3LDM5MjU4LDM5MjU5LDM5MjYwLDM5MjYxLDM5MjYyLDM5MjYzLDM5MjY0LDM5MjY1LDM5MjY2LDM5MjY4LDM5MjcwLDM5MjgzLDM5Mjg4LDM5Mjg5LDM5MjkxLDM5Mjk0LDM5Mjk4LDM5Mjk5LDM5MzA1LDMxMjg5LDMxMjg3LDMxMzEzLDQwNjU1LDM5MzMzLDMxMzQ0LDMwMzQ0LDMwMzUwLDMwMzU1LDMwMzYxLDMwMzcyLDI5OTE4LDI5OTIwLDI5OTk2LDQwNDgwLDQwNDgyLDQwNDg4LDQwNDg5LDQwNDkwLDQwNDkxLDQwNDkyLDQwNDk4LDQwNDk3LDQwNTAyLDQwNTA0LDQwNTAzLDQwNTA1LDQwNTA2LDQwNTEwLDQwNTEzLDQwNTE0LDQwNTE2LDQwNTE4LDQwNTE5LDQwNTIwLDQwNTIxLDQwNTIzLDQwNTI0LDQwNTI2LDQwNTI5LDQwNTMzLDQwNTM1LDQwNTM4LDQwNTM5LDQwNTQwLDQwNTQyLDQwNTQ3LDQwNTUwLDQwNTUxLDQwNTUyLDQwNTUzLDQwNTU0LDQwNTU1LDQwNTU2LDQwNTYxLDQwNTU3LDQwNTYzLDMwMDk4LDMwMTAwLDMwMTAyLDMwMTEyLDMwMTA5LDMwMTI0LDMwMTE1LDMwMTMxLDMwMTMyLDMwMTM2LDMwMTQ4LDMwMTI5LDMwMTI4LDMwMTQ3LDMwMTQ2LDMwMTY2LDMwMTU3LDMwMTc5LDMwMTg0LDMwMTgyLDMwMTgwLDMwMTg3LDMwMTgzLDMwMjExLDMwMTkzLDMwMjA0LDMwMjA3LDMwMjI0LDMwMjA4LDMwMjEzLDMwMjIwLDMwMjMxLDMwMjE4LDMwMjQ1LDMwMjMyLDMwMjI5LDMwMjMzLDM5MzA4LDM5MzEwLDM5MzIyLDM5MzIzLDM5MzI0LDM5MzI1LDM5MzI2LDM5MzI3LDM5MzI4LDM5MzI5LDM5MzMwLDM5MzMxLDM5MzMyLDM5MzM0LDM5MzM1LDM5MzM3LDM5MzM4LDM5MzM5LDM5MzQwLDM5MzQxLDM5MzQyLDM5MzQzLDM5MzQ0LDM5MzQ1LDM5MzQ2LDM5MzQ3LDM5MzQ4LDM5MzQ5LDM5MzUwLDM5MzUxLDM5MzUyLDM5MzUzLDM5MzU0LDM5MzU1LDM5MzU2LDM5MzU3LDM5MzU4LDM5MzU5LDM5MzYwLDM5MzYxLDM5MzYyLDM5MzYzLDM5MzY0LDM5MzY1LDM5MzY2LDM5MzY3LDM5MzY4LDM5MzY5LDM5MzcwLDM5MzcxLDM5MzcyLDM5MzczLDM5Mzc0LDM5Mzc1LDM5Mzc2LDM5Mzc3LDM5Mzc4LDM5Mzc5LDM5MzgwLDM5MzgxLDM5MzgyLDM5MzgzLDM5Mzg0LDM5Mzg1LDM5Mzg2LDM5Mzg3LDM5Mzg4LDM5Mzg5LDM5MzkwLDM5MzkxLDM5MzkyLDM5MzkzLDM5Mzk0LDM5Mzk1LDM5Mzk2LDM5Mzk3LDM5Mzk4LDM5Mzk5LDM5NDAwLDM5NDAxLDM5NDAyLDM5NDAzLDM5NDA0LDM5NDA1LDM5NDA2LDM5NDA3LDM5NDA4LDM5NDA5LDM5NDEwLDM5NDExLDM5NDEyLDM5NDEzLDM5NDE0LDM5NDE1LDM5NDE2LDM5NDE3LDMwMjM1LDMwMjY4LDMwMjQyLDMwMjQwLDMwMjcyLDMwMjUzLDMwMjU2LDMwMjcxLDMwMjYxLDMwMjc1LDMwMjcwLDMwMjU5LDMwMjg1LDMwMzAyLDMwMjkyLDMwMzAwLDMwMjk0LDMwMzE1LDMwMzE5LDMyNzE0LDMxNDYyLDMxMzUyLDMxMzUzLDMxMzYwLDMxMzY2LDMxMzY4LDMxMzgxLDMxMzk4LDMxMzkyLDMxNDA0LDMxNDAwLDMxNDA1LDMxNDExLDM0OTE2LDM0OTIxLDM0OTMwLDM0OTQxLDM0OTQzLDM0OTQ2LDM0OTc4LDM1MDE0LDM0OTk5LDM1MDA0LDM1MDE3LDM1MDQyLDM1MDIyLDM1MDQzLDM1MDQ1LDM1MDU3LDM1MDk4LDM1MDY4LDM1MDQ4LDM1MDcwLDM1MDU2LDM1MTA1LDM1MDk3LDM1MDkxLDM1MDk5LDM1MDgyLDM1MTI0LDM1MTE1LDM1MTI2LDM1MTM3LDM1MTc0LDM1MTk1LDMwMDkxLDMyOTk3LDMwMzg2LDMwMzg4LDMwNjg0LDMyNzg2LDMyNzg4LDMyNzkwLDMyNzk2LDMyODAwLDMyODAyLDMyODA1LDMyODA2LDMyODA3LDMyODA5LDMyODA4LDMyODE3LDMyNzc5LDMyODIxLDMyODM1LDMyODM4LDMyODQ1LDMyODUwLDMyODczLDMyODgxLDM1MjAzLDM5MDMyLDM5MDQwLDM5MDQzLDM5NDE4LDM5NDE5LDM5NDIwLDM5NDIxLDM5NDIyLDM5NDIzLDM5NDI0LDM5NDI1LDM5NDI2LDM5NDI3LDM5NDI4LDM5NDI5LDM5NDMwLDM5NDMxLDM5NDMyLDM5NDMzLDM5NDM0LDM5NDM1LDM5NDM2LDM5NDM3LDM5NDM4LDM5NDM5LDM5NDQwLDM5NDQxLDM5NDQyLDM5NDQzLDM5NDQ0LDM5NDQ1LDM5NDQ2LDM5NDQ3LDM5NDQ4LDM5NDQ5LDM5NDUwLDM5NDUxLDM5NDUyLDM5NDUzLDM5NDU0LDM5NDU1LDM5NDU2LDM5NDU3LDM5NDU4LDM5NDU5LDM5NDYwLDM5NDYxLDM5NDYyLDM5NDYzLDM5NDY0LDM5NDY1LDM5NDY2LDM5NDY3LDM5NDY4LDM5NDY5LDM5NDcwLDM5NDcxLDM5NDcyLDM5NDczLDM5NDc0LDM5NDc1LDM5NDc2LDM5NDc3LDM5NDc4LDM5NDc5LDM5NDgwLDM5NDgxLDM5NDgyLDM5NDgzLDM5NDg0LDM5NDg1LDM5NDg2LDM5NDg3LDM5NDg4LDM5NDg5LDM5NDkwLDM5NDkxLDM5NDkyLDM5NDkzLDM5NDk0LDM5NDk1LDM5NDk2LDM5NDk3LDM5NDk4LDM5NDk5LDM5NTAwLDM5NTAxLDM5NTAyLDM5NTAzLDM5NTA0LDM5NTA1LDM5NTA2LDM5NTA3LDM5NTA4LDM5NTA5LDM5NTEwLDM5NTExLDM5NTEyLDM5NTEzLDM5MDQ5LDM5MDUyLDM5MDUzLDM5MDU1LDM5MDYwLDM5MDY2LDM5MDY3LDM5MDcwLDM5MDcxLDM5MDczLDM5MDc0LDM5MDc3LDM5MDc4LDM0MzgxLDM0Mzg4LDM0NDEyLDM0NDE0LDM0NDMxLDM0NDI2LDM0NDI4LDM0NDI3LDM0NDcyLDM0NDQ1LDM0NDQzLDM0NDc2LDM0NDYxLDM0NDcxLDM0NDY3LDM0NDc0LDM0NDUxLDM0NDczLDM0NDg2LDM0NTAwLDM0NDg1LDM0NTEwLDM0NDgwLDM0NDkwLDM0NDgxLDM0NDc5LDM0NTA1LDM0NTExLDM0NDg0LDM0NTM3LDM0NTQ1LDM0NTQ2LDM0NTQxLDM0NTQ3LDM0NTEyLDM0NTc5LDM0NTI2LDM0NTQ4LDM0NTI3LDM0NTIwLDM0NTEzLDM0NTYzLDM0NTY3LDM0NTUyLDM0NTY4LDM0NTcwLDM0NTczLDM0NTY5LDM0NTk1LDM0NjE5LDM0NTkwLDM0NTk3LDM0NjA2LDM0NTg2LDM0NjIyLDM0NjMyLDM0NjEyLDM0NjA5LDM0NjAxLDM0NjE1LDM0NjIzLDM0NjkwLDM0NTk0LDM0Njg1LDM0Njg2LDM0NjgzLDM0NjU2LDM0NjcyLDM0NjM2LDM0NjcwLDM0Njk5LDM0NjQzLDM0NjU5LDM0Njg0LDM0NjYwLDM0NjQ5LDM0NjYxLDM0NzA3LDM0NzM1LDM0NzI4LDM0NzcwLDM5NTE0LDM5NTE1LDM5NTE2LDM5NTE3LDM5NTE4LDM5NTE5LDM5NTIwLDM5NTIxLDM5NTIyLDM5NTIzLDM5NTI0LDM5NTI1LDM5NTI2LDM5NTI3LDM5NTI4LDM5NTI5LDM5NTMwLDM5NTMxLDM5NTM4LDM5NTU1LDM5NTYxLDM5NTY1LDM5NTY2LDM5NTcyLDM5NTczLDM5NTc3LDM5NTkwLDM5NTkzLDM5NTk0LDM5NTk1LDM5NTk2LDM5NTk3LDM5NTk4LDM5NTk5LDM5NjAyLDM5NjAzLDM5NjA0LDM5NjA1LDM5NjA5LDM5NjExLDM5NjEzLDM5NjE0LDM5NjE1LDM5NjE5LDM5NjIwLDM5NjIyLDM5NjIzLDM5NjI0LDM5NjI1LDM5NjI2LDM5NjI5LDM5NjMwLDM5NjMxLDM5NjMyLDM5NjM0LDM5NjM2LDM5NjM3LDM5NjM4LDM5NjM5LDM5NjQxLDM5NjQyLDM5NjQzLDM5NjQ0LDM5NjQ1LDM5NjQ2LDM5NjQ4LDM5NjUwLDM5NjUxLDM5NjUyLDM5NjUzLDM5NjU1LDM5NjU2LDM5NjU3LDM5NjU4LDM5NjYwLDM5NjYyLDM5NjY0LDM5NjY1LDM5NjY2LDM5NjY3LDM5NjY4LDM5NjY5LDM5NjcwLDM5NjcxLDM5NjcyLDM5Njc0LDM5Njc2LDM5Njc3LDM5Njc4LDM5Njc5LDM5NjgwLDM5NjgxLDM5NjgyLDM5Njg0LDM5Njg1LDM5Njg2LDM0NzU4LDM0Njk2LDM0NjkzLDM0NzMzLDM0NzExLDM0NjkxLDM0NzMxLDM0Nzg5LDM0NzMyLDM0NzQxLDM0NzM5LDM0NzYzLDM0NzcxLDM0NzQ5LDM0NzY5LDM0NzUyLDM0NzYyLDM0Nzc5LDM0Nzk0LDM0Nzg0LDM0Nzk4LDM0ODM4LDM0ODM1LDM0ODE0LDM0ODI2LDM0ODQzLDM0ODQ5LDM0ODczLDM0ODc2LDMyNTY2LDMyNTc4LDMyNTgwLDMyNTgxLDMzMjk2LDMxNDgyLDMxNDg1LDMxNDk2LDMxNDkxLDMxNDkyLDMxNTA5LDMxNDk4LDMxNTMxLDMxNTAzLDMxNTU5LDMxNTQ0LDMxNTMwLDMxNTEzLDMxNTM0LDMxNTM3LDMxNTIwLDMxNTI1LDMxNTI0LDMxNTM5LDMxNTUwLDMxNTE4LDMxNTc2LDMxNTc4LDMxNTU3LDMxNjA1LDMxNTY0LDMxNTgxLDMxNTg0LDMxNTk4LDMxNjExLDMxNTg2LDMxNjAyLDMxNjAxLDMxNjMyLDMxNjU0LDMxNjU1LDMxNjcyLDMxNjYwLDMxNjQ1LDMxNjU2LDMxNjIxLDMxNjU4LDMxNjQ0LDMxNjUwLDMxNjU5LDMxNjY4LDMxNjk3LDMxNjgxLDMxNjkyLDMxNzA5LDMxNzA2LDMxNzE3LDMxNzE4LDMxNzIyLDMxNzU2LDMxNzQyLDMxNzQwLDMxNzU5LDMxNzY2LDMxNzU1LDM5Njg3LDM5Njg5LDM5NjkwLDM5NjkxLDM5NjkyLDM5NjkzLDM5Njk0LDM5Njk2LDM5Njk3LDM5Njk4LDM5NzAwLDM5NzAxLDM5NzAyLDM5NzAzLDM5NzA0LDM5NzA1LDM5NzA2LDM5NzA3LDM5NzA4LDM5NzA5LDM5NzEwLDM5NzEyLDM5NzEzLDM5NzE0LDM5NzE2LDM5NzE3LDM5NzE4LDM5NzE5LDM5NzIwLDM5NzIxLDM5NzIyLDM5NzIzLDM5NzI0LDM5NzI1LDM5NzI2LDM5NzI4LDM5NzI5LDM5NzMxLDM5NzMyLDM5NzMzLDM5NzM0LDM5NzM1LDM5NzM2LDM5NzM3LDM5NzM4LDM5NzQxLDM5NzQyLDM5NzQzLDM5NzQ0LDM5NzUwLDM5NzU0LDM5NzU1LDM5NzU2LDM5NzU4LDM5NzYwLDM5NzYyLDM5NzYzLDM5NzY1LDM5NzY2LDM5NzY3LDM5NzY4LDM5NzY5LDM5NzcwLDM5NzcxLDM5NzcyLDM5NzczLDM5Nzc0LDM5Nzc1LDM5Nzc2LDM5Nzc3LDM5Nzc4LDM5Nzc5LDM5NzgwLDM5NzgxLDM5NzgyLDM5NzgzLDM5Nzg0LDM5Nzg1LDM5Nzg2LDM5Nzg3LDM5Nzg4LDM5Nzg5LDM5NzkwLDM5NzkxLDM5NzkyLDM5NzkzLDM5Nzk0LDM5Nzk1LDM5Nzk2LDM5Nzk3LDM5Nzk4LDM5Nzk5LDM5ODAwLDM5ODAxLDM5ODAyLDM5ODAzLDMxNzc1LDMxNzg2LDMxNzgyLDMxODAwLDMxODA5LDMxODA4LDMzMjc4LDMzMjgxLDMzMjgyLDMzMjg0LDMzMjYwLDM0ODg0LDMzMzEzLDMzMzE0LDMzMzE1LDMzMzI1LDMzMzI3LDMzMzIwLDMzMzIzLDMzMzM2LDMzMzM5LDMzMzMxLDMzMzMyLDMzMzQyLDMzMzQ4LDMzMzUzLDMzMzU1LDMzMzU5LDMzMzcwLDMzMzc1LDMzMzg0LDM0OTQyLDM0OTQ5LDM0OTUyLDM1MDMyLDM1MDM5LDM1MTY2LDMyNjY5LDMyNjcxLDMyNjc5LDMyNjg3LDMyNjg4LDMyNjkwLDMxODY4LDI1OTI5LDMxODg5LDMxOTAxLDMxOTAwLDMxOTAyLDMxOTA2LDMxOTIyLDMxOTMyLDMxOTMzLDMxOTM3LDMxOTQzLDMxOTQ4LDMxOTQ5LDMxOTQ0LDMxOTQxLDMxOTU5LDMxOTc2LDMzMzkwLDI2MjgwLDMyNzAzLDMyNzE4LDMyNzI1LDMyNzQxLDMyNzM3LDMyNzQyLDMyNzQ1LDMyNzUwLDMyNzU1LDMxOTkyLDMyMTE5LDMyMTY2LDMyMTc0LDMyMzI3LDMyNDExLDQwNjMyLDQwNjI4LDM2MjExLDM2MjI4LDM2MjQ0LDM2MjQxLDM2MjczLDM2MTk5LDM2MjA1LDM1OTExLDM1OTEzLDM3MTk0LDM3MjAwLDM3MTk4LDM3MTk5LDM3MjIwLDM5ODA0LDM5ODA1LDM5ODA2LDM5ODA3LDM5ODA4LDM5ODA5LDM5ODEwLDM5ODExLDM5ODEyLDM5ODEzLDM5ODE0LDM5ODE1LDM5ODE2LDM5ODE3LDM5ODE4LDM5ODE5LDM5ODIwLDM5ODIxLDM5ODIyLDM5ODIzLDM5ODI0LDM5ODI1LDM5ODI2LDM5ODI3LDM5ODI4LDM5ODI5LDM5ODMwLDM5ODMxLDM5ODMyLDM5ODMzLDM5ODM0LDM5ODM1LDM5ODM2LDM5ODM3LDM5ODM4LDM5ODM5LDM5ODQwLDM5ODQxLDM5ODQyLDM5ODQzLDM5ODQ0LDM5ODQ1LDM5ODQ2LDM5ODQ3LDM5ODQ4LDM5ODQ5LDM5ODUwLDM5ODUxLDM5ODUyLDM5ODUzLDM5ODU0LDM5ODU1LDM5ODU2LDM5ODU3LDM5ODU4LDM5ODU5LDM5ODYwLDM5ODYxLDM5ODYyLDM5ODYzLDM5ODY0LDM5ODY1LDM5ODY2LDM5ODY3LDM5ODY4LDM5ODY5LDM5ODcwLDM5ODcxLDM5ODcyLDM5ODczLDM5ODc0LDM5ODc1LDM5ODc2LDM5ODc3LDM5ODc4LDM5ODc5LDM5ODgwLDM5ODgxLDM5ODgyLDM5ODgzLDM5ODg0LDM5ODg1LDM5ODg2LDM5ODg3LDM5ODg4LDM5ODg5LDM5ODkwLDM5ODkxLDM5ODkyLDM5ODkzLDM5ODk0LDM5ODk1LDM5ODk2LDM5ODk3LDM5ODk4LDM5ODk5LDM3MjE4LDM3MjE3LDM3MjMyLDM3MjI1LDM3MjMxLDM3MjQ1LDM3MjQ2LDM3MjM0LDM3MjM2LDM3MjQxLDM3MjYwLDM3MjUzLDM3MjY0LDM3MjYxLDM3MjY1LDM3MjgyLDM3MjgzLDM3MjkwLDM3MjkzLDM3Mjk0LDM3Mjk1LDM3MzAxLDM3MzAwLDM3MzA2LDM1OTI1LDQwNTc0LDM2MjgwLDM2MzMxLDM2MzU3LDM2NDQxLDM2NDU3LDM2Mjc3LDM2Mjg3LDM2Mjg0LDM2MjgyLDM2MjkyLDM2MzEwLDM2MzExLDM2MzE0LDM2MzE4LDM2MzAyLDM2MzAzLDM2MzE1LDM2Mjk0LDM2MzMyLDM2MzQzLDM2MzQ0LDM2MzIzLDM2MzQ1LDM2MzQ3LDM2MzI0LDM2MzYxLDM2MzQ5LDM2MzcyLDM2MzgxLDM2MzgzLDM2Mzk2LDM2Mzk4LDM2Mzg3LDM2Mzk5LDM2NDEwLDM2NDE2LDM2NDA5LDM2NDA1LDM2NDEzLDM2NDAxLDM2NDI1LDM2NDE3LDM2NDE4LDM2NDMzLDM2NDM0LDM2NDI2LDM2NDY0LDM2NDcwLDM2NDc2LDM2NDYzLDM2NDY4LDM2NDg1LDM2NDk1LDM2NTAwLDM2NDk2LDM2NTA4LDM2NTEwLDM1OTYwLDM1OTcwLDM1OTc4LDM1OTczLDM1OTkyLDM1OTg4LDI2MDExLDM1Mjg2LDM1Mjk0LDM1MjkwLDM1MjkyLDM5OTAwLDM5OTAxLDM5OTAyLDM5OTAzLDM5OTA0LDM5OTA1LDM5OTA2LDM5OTA3LDM5OTA4LDM5OTA5LDM5OTEwLDM5OTExLDM5OTEyLDM5OTEzLDM5OTE0LDM5OTE1LDM5OTE2LDM5OTE3LDM5OTE4LDM5OTE5LDM5OTIwLDM5OTIxLDM5OTIyLDM5OTIzLDM5OTI0LDM5OTI1LDM5OTI2LDM5OTI3LDM5OTI4LDM5OTI5LDM5OTMwLDM5OTMxLDM5OTMyLDM5OTMzLDM5OTM0LDM5OTM1LDM5OTM2LDM5OTM3LDM5OTM4LDM5OTM5LDM5OTQwLDM5OTQxLDM5OTQyLDM5OTQzLDM5OTQ0LDM5OTQ1LDM5OTQ2LDM5OTQ3LDM5OTQ4LDM5OTQ5LDM5OTUwLDM5OTUxLDM5OTUyLDM5OTUzLDM5OTU0LDM5OTU1LDM5OTU2LDM5OTU3LDM5OTU4LDM5OTU5LDM5OTYwLDM5OTYxLDM5OTYyLDM5OTYzLDM5OTY0LDM5OTY1LDM5OTY2LDM5OTY3LDM5OTY4LDM5OTY5LDM5OTcwLDM5OTcxLDM5OTcyLDM5OTczLDM5OTc0LDM5OTc1LDM5OTc2LDM5OTc3LDM5OTc4LDM5OTc5LDM5OTgwLDM5OTgxLDM5OTgyLDM5OTgzLDM5OTg0LDM5OTg1LDM5OTg2LDM5OTg3LDM5OTg4LDM5OTg5LDM5OTkwLDM5OTkxLDM5OTkyLDM5OTkzLDM5OTk0LDM5OTk1LDM1MzAxLDM1MzA3LDM1MzExLDM1MzkwLDM1NjIyLDM4NzM5LDM4NjMzLDM4NjQzLDM4NjM5LDM4NjYyLDM4NjU3LDM4NjY0LDM4NjcxLDM4NjcwLDM4Njk4LDM4NzAxLDM4NzA0LDM4NzE4LDQwODMyLDQwODM1LDQwODM3LDQwODM4LDQwODM5LDQwODQwLDQwODQxLDQwODQyLDQwODQ0LDQwNzAyLDQwNzE1LDQwNzE3LDM4NTg1LDM4NTg4LDM4NTg5LDM4NjA2LDM4NjEwLDMwNjU1LDM4NjI0LDM3NTE4LDM3NTUwLDM3NTc2LDM3Njk0LDM3NzM4LDM3ODM0LDM3Nzc1LDM3OTUwLDM3OTk1LDQwMDYzLDQwMDY2LDQwMDY5LDQwMDcwLDQwMDcxLDQwMDcyLDMxMjY3LDQwMDc1LDQwMDc4LDQwMDgwLDQwMDgxLDQwMDgyLDQwMDg0LDQwMDg1LDQwMDkwLDQwMDkxLDQwMDk0LDQwMDk1LDQwMDk2LDQwMDk3LDQwMDk4LDQwMDk5LDQwMTAxLDQwMTAyLDQwMTAzLDQwMTA0LDQwMTA1LDQwMTA3LDQwMTA5LDQwMTEwLDQwMTEyLDQwMTEzLDQwMTE0LDQwMTE1LDQwMTE2LDQwMTE3LDQwMTE4LDQwMTE5LDQwMTIyLDQwMTIzLDQwMTI0LDQwMTI1LDQwMTMyLDQwMTMzLDQwMTM0LDQwMTM1LDQwMTM4LDQwMTM5LDM5OTk2LDM5OTk3LDM5OTk4LDM5OTk5LDQwMDAwLDQwMDAxLDQwMDAyLDQwMDAzLDQwMDA0LDQwMDA1LDQwMDA2LDQwMDA3LDQwMDA4LDQwMDA5LDQwMDEwLDQwMDExLDQwMDEyLDQwMDEzLDQwMDE0LDQwMDE1LDQwMDE2LDQwMDE3LDQwMDE4LDQwMDE5LDQwMDIwLDQwMDIxLDQwMDIyLDQwMDIzLDQwMDI0LDQwMDI1LDQwMDI2LDQwMDI3LDQwMDI4LDQwMDI5LDQwMDMwLDQwMDMxLDQwMDMyLDQwMDMzLDQwMDM0LDQwMDM1LDQwMDM2LDQwMDM3LDQwMDM4LDQwMDM5LDQwMDQwLDQwMDQxLDQwMDQyLDQwMDQzLDQwMDQ0LDQwMDQ1LDQwMDQ2LDQwMDQ3LDQwMDQ4LDQwMDQ5LDQwMDUwLDQwMDUxLDQwMDUyLDQwMDUzLDQwMDU0LDQwMDU1LDQwMDU2LDQwMDU3LDQwMDU4LDQwMDU5LDQwMDYxLDQwMDYyLDQwMDY0LDQwMDY3LDQwMDY4LDQwMDczLDQwMDc0LDQwMDc2LDQwMDc5LDQwMDgzLDQwMDg2LDQwMDg3LDQwMDg4LDQwMDg5LDQwMDkzLDQwMTA2LDQwMTA4LDQwMTExLDQwMTIxLDQwMTI2LDQwMTI3LDQwMTI4LDQwMTI5LDQwMTMwLDQwMTM2LDQwMTM3LDQwMTQ1LDQwMTQ2LDQwMTU0LDQwMTU1LDQwMTYwLDQwMTYxLDQwMTQwLDQwMTQxLDQwMTQyLDQwMTQzLDQwMTQ0LDQwMTQ3LDQwMTQ4LDQwMTQ5LDQwMTUxLDQwMTUyLDQwMTUzLDQwMTU2LDQwMTU3LDQwMTU5LDQwMTYyLDM4NzgwLDM4Nzg5LDM4ODAxLDM4ODAyLDM4ODA0LDM4ODMxLDM4ODI3LDM4ODE5LDM4ODM0LDM4ODM2LDM5NjAxLDM5NjAwLDM5NjA3LDQwNTM2LDM5NjA2LDM5NjEwLDM5NjEyLDM5NjE3LDM5NjE2LDM5NjIxLDM5NjE4LDM5NjI3LDM5NjI4LDM5NjMzLDM5NzQ5LDM5NzQ3LDM5NzUxLDM5NzUzLDM5NzUyLDM5NzU3LDM5NzYxLDM5MTQ0LDM5MTgxLDM5MjE0LDM5MjUzLDM5MjUyLDM5NjQ3LDM5NjQ5LDM5NjU0LDM5NjYzLDM5NjU5LDM5Njc1LDM5NjYxLDM5NjczLDM5Njg4LDM5Njk1LDM5Njk5LDM5NzExLDM5NzE1LDQwNjM3LDQwNjM4LDMyMzE1LDQwNTc4LDQwNTgzLDQwNTg0LDQwNTg3LDQwNTk0LDM3ODQ2LDQwNjA1LDQwNjA3LDQwNjY3LDQwNjY4LDQwNjY5LDQwNjcyLDQwNjcxLDQwNjc0LDQwNjgxLDQwNjc5LDQwNjc3LDQwNjgyLDQwNjg3LDQwNzM4LDQwNzQ4LDQwNzUxLDQwNzYxLDQwNzU5LDQwNzY1LDQwNzY2LDQwNzcyLDQwMTYzLDQwMTY0LDQwMTY1LDQwMTY2LDQwMTY3LDQwMTY4LDQwMTY5LDQwMTcwLDQwMTcxLDQwMTcyLDQwMTczLDQwMTc0LDQwMTc1LDQwMTc2LDQwMTc3LDQwMTc4LDQwMTc5LDQwMTgwLDQwMTgxLDQwMTgyLDQwMTgzLDQwMTg0LDQwMTg1LDQwMTg2LDQwMTg3LDQwMTg4LDQwMTg5LDQwMTkwLDQwMTkxLDQwMTkyLDQwMTkzLDQwMTk0LDQwMTk1LDQwMTk2LDQwMTk3LDQwMTk4LDQwMTk5LDQwMjAwLDQwMjAxLDQwMjAyLDQwMjAzLDQwMjA0LDQwMjA1LDQwMjA2LDQwMjA3LDQwMjA4LDQwMjA5LDQwMjEwLDQwMjExLDQwMjEyLDQwMjEzLDQwMjE0LDQwMjE1LDQwMjE2LDQwMjE3LDQwMjE4LDQwMjE5LDQwMjIwLDQwMjIxLDQwMjIyLDQwMjIzLDQwMjI0LDQwMjI1LDQwMjI2LDQwMjI3LDQwMjI4LDQwMjI5LDQwMjMwLDQwMjMxLDQwMjMyLDQwMjMzLDQwMjM0LDQwMjM1LDQwMjM2LDQwMjM3LDQwMjM4LDQwMjM5LDQwMjQwLDQwMjQxLDQwMjQyLDQwMjQzLDQwMjQ0LDQwMjQ1LDQwMjQ2LDQwMjQ3LDQwMjQ4LDQwMjQ5LDQwMjUwLDQwMjUxLDQwMjUyLDQwMjUzLDQwMjU0LDQwMjU1LDQwMjU2LDQwMjU3LDQwMjU4LDU3OTA4LDU3OTA5LDU3OTEwLDU3OTExLDU3OTEyLDU3OTEzLDU3OTE0LDU3OTE1LDU3OTE2LDU3OTE3LDU3OTE4LDU3OTE5LDU3OTIwLDU3OTIxLDU3OTIyLDU3OTIzLDU3OTI0LDU3OTI1LDU3OTI2LDU3OTI3LDU3OTI4LDU3OTI5LDU3OTMwLDU3OTMxLDU3OTMyLDU3OTMzLDU3OTM0LDU3OTM1LDU3OTM2LDU3OTM3LDU3OTM4LDU3OTM5LDU3OTQwLDU3OTQxLDU3OTQyLDU3OTQzLDU3OTQ0LDU3OTQ1LDU3OTQ2LDU3OTQ3LDU3OTQ4LDU3OTQ5LDU3OTUwLDU3OTUxLDU3OTUyLDU3OTUzLDU3OTU0LDU3OTU1LDU3OTU2LDU3OTU3LDU3OTU4LDU3OTU5LDU3OTYwLDU3OTYxLDU3OTYyLDU3OTYzLDU3OTY0LDU3OTY1LDU3OTY2LDU3OTY3LDU3OTY4LDU3OTY5LDU3OTcwLDU3OTcxLDU3OTcyLDU3OTczLDU3OTc0LDU3OTc1LDU3OTc2LDU3OTc3LDU3OTc4LDU3OTc5LDU3OTgwLDU3OTgxLDU3OTgyLDU3OTgzLDU3OTg0LDU3OTg1LDU3OTg2LDU3OTg3LDU3OTg4LDU3OTg5LDU3OTkwLDU3OTkxLDU3OTkyLDU3OTkzLDU3OTk0LDU3OTk1LDU3OTk2LDU3OTk3LDU3OTk4LDU3OTk5LDU4MDAwLDU4MDAxLDQwMjU5LDQwMjYwLDQwMjYxLDQwMjYyLDQwMjYzLDQwMjY0LDQwMjY1LDQwMjY2LDQwMjY3LDQwMjY4LDQwMjY5LDQwMjcwLDQwMjcxLDQwMjcyLDQwMjczLDQwMjc0LDQwMjc1LDQwMjc2LDQwMjc3LDQwMjc4LDQwMjc5LDQwMjgwLDQwMjgxLDQwMjgyLDQwMjgzLDQwMjg0LDQwMjg1LDQwMjg2LDQwMjg3LDQwMjg4LDQwMjg5LDQwMjkwLDQwMjkxLDQwMjkyLDQwMjkzLDQwMjk0LDQwMjk1LDQwMjk2LDQwMjk3LDQwMjk4LDQwMjk5LDQwMzAwLDQwMzAxLDQwMzAyLDQwMzAzLDQwMzA0LDQwMzA1LDQwMzA2LDQwMzA3LDQwMzA4LDQwMzA5LDQwMzEwLDQwMzExLDQwMzEyLDQwMzEzLDQwMzE0LDQwMzE1LDQwMzE2LDQwMzE3LDQwMzE4LDQwMzE5LDQwMzIwLDQwMzIxLDQwMzIyLDQwMzIzLDQwMzI0LDQwMzI1LDQwMzI2LDQwMzI3LDQwMzI4LDQwMzI5LDQwMzMwLDQwMzMxLDQwMzMyLDQwMzMzLDQwMzM0LDQwMzM1LDQwMzM2LDQwMzM3LDQwMzM4LDQwMzM5LDQwMzQwLDQwMzQxLDQwMzQyLDQwMzQzLDQwMzQ0LDQwMzQ1LDQwMzQ2LDQwMzQ3LDQwMzQ4LDQwMzQ5LDQwMzUwLDQwMzUxLDQwMzUyLDQwMzUzLDQwMzU0LDU4MDAyLDU4MDAzLDU4MDA0LDU4MDA1LDU4MDA2LDU4MDA3LDU4MDA4LDU4MDA5LDU4MDEwLDU4MDExLDU4MDEyLDU4MDEzLDU4MDE0LDU4MDE1LDU4MDE2LDU4MDE3LDU4MDE4LDU4MDE5LDU4MDIwLDU4MDIxLDU4MDIyLDU4MDIzLDU4MDI0LDU4MDI1LDU4MDI2LDU4MDI3LDU4MDI4LDU4MDI5LDU4MDMwLDU4MDMxLDU4MDMyLDU4MDMzLDU4MDM0LDU4MDM1LDU4MDM2LDU4MDM3LDU4MDM4LDU4MDM5LDU4MDQwLDU4MDQxLDU4MDQyLDU4MDQzLDU4MDQ0LDU4MDQ1LDU4MDQ2LDU4MDQ3LDU4MDQ4LDU4MDQ5LDU4MDUwLDU4MDUxLDU4MDUyLDU4MDUzLDU4MDU0LDU4MDU1LDU4MDU2LDU4MDU3LDU4MDU4LDU4MDU5LDU4MDYwLDU4MDYxLDU4MDYyLDU4MDYzLDU4MDY0LDU4MDY1LDU4MDY2LDU4MDY3LDU4MDY4LDU4MDY5LDU4MDcwLDU4MDcxLDU4MDcyLDU4MDczLDU4MDc0LDU4MDc1LDU4MDc2LDU4MDc3LDU4MDc4LDU4MDc5LDU4MDgwLDU4MDgxLDU4MDgyLDU4MDgzLDU4MDg0LDU4MDg1LDU4MDg2LDU4MDg3LDU4MDg4LDU4MDg5LDU4MDkwLDU4MDkxLDU4MDkyLDU4MDkzLDU4MDk0LDU4MDk1LDQwMzU1LDQwMzU2LDQwMzU3LDQwMzU4LDQwMzU5LDQwMzYwLDQwMzYxLDQwMzYyLDQwMzYzLDQwMzY0LDQwMzY1LDQwMzY2LDQwMzY3LDQwMzY4LDQwMzY5LDQwMzcwLDQwMzcxLDQwMzcyLDQwMzczLDQwMzc0LDQwMzc1LDQwMzc2LDQwMzc3LDQwMzc4LDQwMzc5LDQwMzgwLDQwMzgxLDQwMzgyLDQwMzgzLDQwMzg0LDQwMzg1LDQwMzg2LDQwMzg3LDQwMzg4LDQwMzg5LDQwMzkwLDQwMzkxLDQwMzkyLDQwMzkzLDQwMzk0LDQwMzk1LDQwMzk2LDQwMzk3LDQwMzk4LDQwMzk5LDQwNDAwLDQwNDAxLDQwNDAyLDQwNDAzLDQwNDA0LDQwNDA1LDQwNDA2LDQwNDA3LDQwNDA4LDQwNDA5LDQwNDEwLDQwNDExLDQwNDEyLDQwNDEzLDQwNDE0LDQwNDE1LDQwNDE2LDQwNDE3LDQwNDE4LDQwNDE5LDQwNDIwLDQwNDIxLDQwNDIyLDQwNDIzLDQwNDI0LDQwNDI1LDQwNDI2LDQwNDI3LDQwNDI4LDQwNDI5LDQwNDMwLDQwNDMxLDQwNDMyLDQwNDMzLDQwNDM0LDQwNDM1LDQwNDM2LDQwNDM3LDQwNDM4LDQwNDM5LDQwNDQwLDQwNDQxLDQwNDQyLDQwNDQzLDQwNDQ0LDQwNDQ1LDQwNDQ2LDQwNDQ3LDQwNDQ4LDQwNDQ5LDQwNDUwLDU4MDk2LDU4MDk3LDU4MDk4LDU4MDk5LDU4MTAwLDU4MTAxLDU4MTAyLDU4MTAzLDU4MTA0LDU4MTA1LDU4MTA2LDU4MTA3LDU4MTA4LDU4MTA5LDU4MTEwLDU4MTExLDU4MTEyLDU4MTEzLDU4MTE0LDU4MTE1LDU4MTE2LDU4MTE3LDU4MTE4LDU4MTE5LDU4MTIwLDU4MTIxLDU4MTIyLDU4MTIzLDU4MTI0LDU4MTI1LDU4MTI2LDU4MTI3LDU4MTI4LDU4MTI5LDU4MTMwLDU4MTMxLDU4MTMyLDU4MTMzLDU4MTM0LDU4MTM1LDU4MTM2LDU4MTM3LDU4MTM4LDU4MTM5LDU4MTQwLDU4MTQxLDU4MTQyLDU4MTQzLDU4MTQ0LDU4MTQ1LDU4MTQ2LDU4MTQ3LDU4MTQ4LDU4MTQ5LDU4MTUwLDU4MTUxLDU4MTUyLDU4MTUzLDU4MTU0LDU4MTU1LDU4MTU2LDU4MTU3LDU4MTU4LDU4MTU5LDU4MTYwLDU4MTYxLDU4MTYyLDU4MTYzLDU4MTY0LDU4MTY1LDU4MTY2LDU4MTY3LDU4MTY4LDU4MTY5LDU4MTcwLDU4MTcxLDU4MTcyLDU4MTczLDU4MTc0LDU4MTc1LDU4MTc2LDU4MTc3LDU4MTc4LDU4MTc5LDU4MTgwLDU4MTgxLDU4MTgyLDU4MTgzLDU4MTg0LDU4MTg1LDU4MTg2LDU4MTg3LDU4MTg4LDU4MTg5LDQwNDUxLDQwNDUyLDQwNDUzLDQwNDU0LDQwNDU1LDQwNDU2LDQwNDU3LDQwNDU4LDQwNDU5LDQwNDYwLDQwNDYxLDQwNDYyLDQwNDYzLDQwNDY0LDQwNDY1LDQwNDY2LDQwNDY3LDQwNDY4LDQwNDY5LDQwNDcwLDQwNDcxLDQwNDcyLDQwNDczLDQwNDc0LDQwNDc1LDQwNDc2LDQwNDc3LDQwNDc4LDQwNDg0LDQwNDg3LDQwNDk0LDQwNDk2LDQwNTAwLDQwNTA3LDQwNTA4LDQwNTEyLDQwNTI1LDQwNTI4LDQwNTMwLDQwNTMxLDQwNTMyLDQwNTM0LDQwNTM3LDQwNTQxLDQwNTQzLDQwNTQ0LDQwNTQ1LDQwNTQ2LDQwNTQ5LDQwNTU4LDQwNTU5LDQwNTYyLDQwNTY0LDQwNTY1LDQwNTY2LDQwNTY3LDQwNTY4LDQwNTY5LDQwNTcwLDQwNTcxLDQwNTcyLDQwNTczLDQwNTc2LDQwNTc3LDQwNTc5LDQwNTgwLDQwNTgxLDQwNTgyLDQwNTg1LDQwNTg2LDQwNTg4LDQwNTg5LDQwNTkwLDQwNTkxLDQwNTkyLDQwNTkzLDQwNTk2LDQwNTk3LDQwNTk4LDQwNTk5LDQwNjAwLDQwNjAxLDQwNjAyLDQwNjAzLDQwNjA0LDQwNjA2LDQwNjA4LDQwNjA5LDQwNjEwLDQwNjExLDQwNjEyLDQwNjEzLDQwNjE1LDQwNjE2LDQwNjE3LDQwNjE4LDU4MTkwLDU4MTkxLDU4MTkyLDU4MTkzLDU4MTk0LDU4MTk1LDU4MTk2LDU4MTk3LDU4MTk4LDU4MTk5LDU4MjAwLDU4MjAxLDU4MjAyLDU4MjAzLDU4MjA0LDU4MjA1LDU4MjA2LDU4MjA3LDU4MjA4LDU4MjA5LDU4MjEwLDU4MjExLDU4MjEyLDU4MjEzLDU4MjE0LDU4MjE1LDU4MjE2LDU4MjE3LDU4MjE4LDU4MjE5LDU4MjIwLDU4MjIxLDU4MjIyLDU4MjIzLDU4MjI0LDU4MjI1LDU4MjI2LDU4MjI3LDU4MjI4LDU4MjI5LDU4MjMwLDU4MjMxLDU4MjMyLDU4MjMzLDU4MjM0LDU4MjM1LDU4MjM2LDU4MjM3LDU4MjM4LDU4MjM5LDU4MjQwLDU4MjQxLDU4MjQyLDU4MjQzLDU4MjQ0LDU4MjQ1LDU4MjQ2LDU4MjQ3LDU4MjQ4LDU4MjQ5LDU4MjUwLDU4MjUxLDU4MjUyLDU4MjUzLDU4MjU0LDU4MjU1LDU4MjU2LDU4MjU3LDU4MjU4LDU4MjU5LDU4MjYwLDU4MjYxLDU4MjYyLDU4MjYzLDU4MjY0LDU4MjY1LDU4MjY2LDU4MjY3LDU4MjY4LDU4MjY5LDU4MjcwLDU4MjcxLDU4MjcyLDU4MjczLDU4Mjc0LDU4Mjc1LDU4Mjc2LDU4Mjc3LDU4Mjc4LDU4Mjc5LDU4MjgwLDU4MjgxLDU4MjgyLDU4MjgzLDQwNjE5LDQwNjIwLDQwNjIxLDQwNjIyLDQwNjIzLDQwNjI0LDQwNjI1LDQwNjI2LDQwNjI3LDQwNjI5LDQwNjMwLDQwNjMxLDQwNjMzLDQwNjM0LDQwNjM2LDQwNjM5LDQwNjQwLDQwNjQxLDQwNjQyLDQwNjQzLDQwNjQ1LDQwNjQ2LDQwNjQ3LDQwNjQ4LDQwNjUwLDQwNjUxLDQwNjUyLDQwNjU2LDQwNjU4LDQwNjU5LDQwNjYxLDQwNjYyLDQwNjYzLDQwNjY1LDQwNjY2LDQwNjcwLDQwNjczLDQwNjc1LDQwNjc2LDQwNjc4LDQwNjgwLDQwNjgzLDQwNjg0LDQwNjg1LDQwNjg2LDQwNjg4LDQwNjg5LDQwNjkwLDQwNjkxLDQwNjkyLDQwNjkzLDQwNjk0LDQwNjk1LDQwNjk2LDQwNjk4LDQwNzAxLDQwNzAzLDQwNzA0LDQwNzA1LDQwNzA2LDQwNzA3LDQwNzA4LDQwNzA5LDQwNzEwLDQwNzExLDQwNzEyLDQwNzEzLDQwNzE0LDQwNzE2LDQwNzE5LDQwNzIxLDQwNzIyLDQwNzI0LDQwNzI1LDQwNzI2LDQwNzI4LDQwNzMwLDQwNzMxLDQwNzMyLDQwNzMzLDQwNzM0LDQwNzM1LDQwNzM3LDQwNzM5LDQwNzQwLDQwNzQxLDQwNzQyLDQwNzQzLDQwNzQ0LDQwNzQ1LDQwNzQ2LDQwNzQ3LDQwNzQ5LDQwNzUwLDQwNzUyLDQwNzUzLDU4Mjg0LDU4Mjg1LDU4Mjg2LDU4Mjg3LDU4Mjg4LDU4Mjg5LDU4MjkwLDU4MjkxLDU4MjkyLDU4MjkzLDU4Mjk0LDU4Mjk1LDU4Mjk2LDU4Mjk3LDU4Mjk4LDU4Mjk5LDU4MzAwLDU4MzAxLDU4MzAyLDU4MzAzLDU4MzA0LDU4MzA1LDU4MzA2LDU4MzA3LDU4MzA4LDU4MzA5LDU4MzEwLDU4MzExLDU4MzEyLDU4MzEzLDU4MzE0LDU4MzE1LDU4MzE2LDU4MzE3LDU4MzE4LDU4MzE5LDU4MzIwLDU4MzIxLDU4MzIyLDU4MzIzLDU4MzI0LDU4MzI1LDU4MzI2LDU4MzI3LDU4MzI4LDU4MzI5LDU4MzMwLDU4MzMxLDU4MzMyLDU4MzMzLDU4MzM0LDU4MzM1LDU4MzM2LDU4MzM3LDU4MzM4LDU4MzM5LDU4MzQwLDU4MzQxLDU4MzQyLDU4MzQzLDU4MzQ0LDU4MzQ1LDU4MzQ2LDU4MzQ3LDU4MzQ4LDU4MzQ5LDU4MzUwLDU4MzUxLDU4MzUyLDU4MzUzLDU4MzU0LDU4MzU1LDU4MzU2LDU4MzU3LDU4MzU4LDU4MzU5LDU4MzYwLDU4MzYxLDU4MzYyLDU4MzYzLDU4MzY0LDU4MzY1LDU4MzY2LDU4MzY3LDU4MzY4LDU4MzY5LDU4MzcwLDU4MzcxLDU4MzcyLDU4MzczLDU4Mzc0LDU4Mzc1LDU4Mzc2LDU4Mzc3LDQwNzU0LDQwNzU1LDQwNzU2LDQwNzU3LDQwNzU4LDQwNzYwLDQwNzYyLDQwNzY0LDQwNzY3LDQwNzY4LDQwNzY5LDQwNzcwLDQwNzcxLDQwNzczLDQwNzc0LDQwNzc1LDQwNzc2LDQwNzc3LDQwNzc4LDQwNzc5LDQwNzgwLDQwNzgxLDQwNzgyLDQwNzgzLDQwNzg2LDQwNzg3LDQwNzg4LDQwNzg5LDQwNzkwLDQwNzkxLDQwNzkyLDQwNzkzLDQwNzk0LDQwNzk1LDQwNzk2LDQwNzk3LDQwNzk4LDQwNzk5LDQwODAwLDQwODAxLDQwODAyLDQwODAzLDQwODA0LDQwODA1LDQwODA2LDQwODA3LDQwODA4LDQwODA5LDQwODEwLDQwODExLDQwODEyLDQwODEzLDQwODE0LDQwODE1LDQwODE2LDQwODE3LDQwODE4LDQwODE5LDQwODIwLDQwODIxLDQwODIyLDQwODIzLDQwODI0LDQwODI1LDQwODI2LDQwODI3LDQwODI4LDQwODI5LDQwODMwLDQwODMzLDQwODM0LDQwODQ1LDQwODQ2LDQwODQ3LDQwODQ4LDQwODQ5LDQwODUwLDQwODUxLDQwODUyLDQwODUzLDQwODU0LDQwODU1LDQwODU2LDQwODYwLDQwODYxLDQwODYyLDQwODY1LDQwODY2LDQwODY3LDQwODY4LDQwODY5LDYzNzg4LDYzODY1LDYzODkzLDYzOTc1LDYzOTg1LDU4Mzc4LDU4Mzc5LDU4MzgwLDU4MzgxLDU4MzgyLDU4MzgzLDU4Mzg0LDU4Mzg1LDU4Mzg2LDU4Mzg3LDU4Mzg4LDU4Mzg5LDU4MzkwLDU4MzkxLDU4MzkyLDU4MzkzLDU4Mzk0LDU4Mzk1LDU4Mzk2LDU4Mzk3LDU4Mzk4LDU4Mzk5LDU4NDAwLDU4NDAxLDU4NDAyLDU4NDAzLDU4NDA0LDU4NDA1LDU4NDA2LDU4NDA3LDU4NDA4LDU4NDA5LDU4NDEwLDU4NDExLDU4NDEyLDU4NDEzLDU4NDE0LDU4NDE1LDU4NDE2LDU4NDE3LDU4NDE4LDU4NDE5LDU4NDIwLDU4NDIxLDU4NDIyLDU4NDIzLDU4NDI0LDU4NDI1LDU4NDI2LDU4NDI3LDU4NDI4LDU4NDI5LDU4NDMwLDU4NDMxLDU4NDMyLDU4NDMzLDU4NDM0LDU4NDM1LDU4NDM2LDU4NDM3LDU4NDM4LDU4NDM5LDU4NDQwLDU4NDQxLDU4NDQyLDU4NDQzLDU4NDQ0LDU4NDQ1LDU4NDQ2LDU4NDQ3LDU4NDQ4LDU4NDQ5LDU4NDUwLDU4NDUxLDU4NDUyLDU4NDUzLDU4NDU0LDU4NDU1LDU4NDU2LDU4NDU3LDU4NDU4LDU4NDU5LDU4NDYwLDU4NDYxLDU4NDYyLDU4NDYzLDU4NDY0LDU4NDY1LDU4NDY2LDU4NDY3LDU4NDY4LDU4NDY5LDU4NDcwLDU4NDcxLDY0MDEyLDY0MDEzLDY0MDE0LDY0MDE1LDY0MDE3LDY0MDE5LDY0MDIwLDY0MDI0LDY0MDMxLDY0MDMyLDY0MDMzLDY0MDM1LDY0MDM2LDY0MDM5LDY0MDQwLDY0MDQxLDExOTA1LDU5NDE0LDU5NDE1LDU5NDE2LDExOTA4LDEzNDI3LDEzMzgzLDExOTEyLDExOTE1LDU5NDIyLDEzNzI2LDEzODUwLDEzODM4LDExOTE2LDExOTI3LDE0NzAyLDE0NjE2LDU5NDMwLDE0Nzk5LDE0ODE1LDE0OTYzLDE0ODAwLDU5NDM1LDU5NDM2LDE1MTgyLDE1NDcwLDE1NTg0LDExOTQzLDU5NDQxLDU5NDQyLDExOTQ2LDE2NDcwLDE2NzM1LDExOTUwLDE3MjA3LDExOTU1LDExOTU4LDExOTU5LDU5NDUxLDE3MzI5LDE3MzI0LDExOTYzLDE3MzczLDE3NjIyLDE4MDE3LDE3OTk2LDU5NDU5LDE4MjExLDE4MjE3LDE4MzAwLDE4MzE3LDExOTc4LDE4NzU5LDE4ODEwLDE4ODEzLDE4ODE4LDE4ODE5LDE4ODIxLDE4ODIyLDE4ODQ3LDE4ODQzLDE4ODcxLDE4ODcwLDU5NDc2LDU5NDc3LDE5NjE5LDE5NjE1LDE5NjE2LDE5NjE3LDE5NTc1LDE5NjE4LDE5NzMxLDE5NzMyLDE5NzMzLDE5NzM0LDE5NzM1LDE5NzM2LDE5NzM3LDE5ODg2LDU5NDkyLDU4NDcyLDU4NDczLDU4NDc0LDU4NDc1LDU4NDc2LDU4NDc3LDU4NDc4LDU4NDc5LDU4NDgwLDU4NDgxLDU4NDgyLDU4NDgzLDU4NDg0LDU4NDg1LDU4NDg2LDU4NDg3LDU4NDg4LDU4NDg5LDU4NDkwLDU4NDkxLDU4NDkyLDU4NDkzLDU4NDk0LDU4NDk1LDU4NDk2LDU4NDk3LDU4NDk4LDU4NDk5LDU4NTAwLDU4NTAxLDU4NTAyLDU4NTAzLDU4NTA0LDU4NTA1LDU4NTA2LDU4NTA3LDU4NTA4LDU4NTA5LDU4NTEwLDU4NTExLDU4NTEyLDU4NTEzLDU4NTE0LDU4NTE1LDU4NTE2LDU4NTE3LDU4NTE4LDU4NTE5LDU4NTIwLDU4NTIxLDU4NTIyLDU4NTIzLDU4NTI0LDU4NTI1LDU4NTI2LDU4NTI3LDU4NTI4LDU4NTI5LDU4NTMwLDU4NTMxLDU4NTMyLDU4NTMzLDU4NTM0LDU4NTM1LDU4NTM2LDU4NTM3LDU4NTM4LDU4NTM5LDU4NTQwLDU4NTQxLDU4NTQyLDU4NTQzLDU4NTQ0LDU4NTQ1LDU4NTQ2LDU4NTQ3LDU4NTQ4LDU4NTQ5LDU4NTUwLDU4NTUxLDU4NTUyLDU4NTUzLDU4NTU0LDU4NTU1LDU4NTU2LDU4NTU3LDU4NTU4LDU4NTU5LDU4NTYwLDU4NTYxLDU4NTYyLDU4NTYzLDU4NTY0LDU4NTY1XSxcbiAgXCJnYjE4MDMwLXJhbmdlc1wiOltbMCwxMjhdLFszNiwxNjVdLFszOCwxNjldLFs0NSwxNzhdLFs1MCwxODRdLFs4MSwyMTZdLFs4OSwyMjZdLFs5NSwyMzVdLFs5NiwyMzhdLFsxMDAsMjQ0XSxbMTAzLDI0OF0sWzEwNCwyNTFdLFsxMDUsMjUzXSxbMTA5LDI1OF0sWzEyNiwyNzZdLFsxMzMsMjg0XSxbMTQ4LDMwMF0sWzE3MiwzMjVdLFsxNzUsMzI5XSxbMTc5LDMzNF0sWzIwOCwzNjRdLFszMDYsNDYzXSxbMzA3LDQ2NV0sWzMwOCw0NjddLFszMDksNDY5XSxbMzEwLDQ3MV0sWzMxMSw0NzNdLFszMTIsNDc1XSxbMzEzLDQ3N10sWzM0MSw1MDZdLFs0MjgsNTk0XSxbNDQzLDYxMF0sWzU0NCw3MTJdLFs1NDUsNzE2XSxbNTU4LDczMF0sWzc0MSw5MzBdLFs3NDIsOTM4XSxbNzQ5LDk2Ml0sWzc1MCw5NzBdLFs4MDUsMTAyNl0sWzgxOSwxMTA0XSxbODIwLDExMDZdLFs3OTIyLDgyMDldLFs3OTI0LDgyMTVdLFs3OTI1LDgyMThdLFs3OTI3LDgyMjJdLFs3OTM0LDgyMzFdLFs3OTQzLDgyNDFdLFs3OTQ0LDgyNDRdLFs3OTQ1LDgyNDZdLFs3OTUwLDgyNTJdLFs4MDYyLDgzNjVdLFs4MTQ4LDg0NTJdLFs4MTQ5LDg0NTRdLFs4MTUyLDg0NThdLFs4MTY0LDg0NzFdLFs4MTc0LDg0ODJdLFs4MjM2LDg1NTZdLFs4MjQwLDg1NzBdLFs4MjYyLDg1OTZdLFs4MjY0LDg2MDJdLFs4Mzc0LDg3MTNdLFs4MzgwLDg3MjBdLFs4MzgxLDg3MjJdLFs4Mzg0LDg3MjZdLFs4Mzg4LDg3MzFdLFs4MzkwLDg3MzddLFs4MzkyLDg3NDBdLFs4MzkzLDg3NDJdLFs4Mzk0LDg3NDhdLFs4Mzk2LDg3NTFdLFs4NDAxLDg3NjBdLFs4NDA2LDg3NjZdLFs4NDE2LDg3NzddLFs4NDE5LDg3ODFdLFs4NDI0LDg3ODddLFs4NDM3LDg4MDJdLFs4NDM5LDg4MDhdLFs4NDQ1LDg4MTZdLFs4NDgyLDg4NTRdLFs4NDg1LDg4NThdLFs4NDk2LDg4NzBdLFs4NTIxLDg4OTZdLFs4NjAzLDg5NzldLFs4OTM2LDkzMjJdLFs4OTQ2LDkzNzJdLFs5MDQ2LDk1NDhdLFs5MDUwLDk1ODhdLFs5MDYzLDk2MTZdLFs5MDY2LDk2MjJdLFs5MDc2LDk2MzRdLFs5MDkyLDk2NTJdLFs5MTAwLDk2NjJdLFs5MTA4LDk2NzJdLFs5MTExLDk2NzZdLFs5MTEzLDk2ODBdLFs5MTMxLDk3MDJdLFs5MTYyLDk3MzVdLFs5MTY0LDk3MzhdLFs5MjE4LDk3OTNdLFs5MjE5LDk3OTVdLFsxMTMyOSwxMTkwNl0sWzExMzMxLDExOTA5XSxbMTEzMzQsMTE5MTNdLFsxMTMzNiwxMTkxN10sWzExMzQ2LDExOTI4XSxbMTEzNjEsMTE5NDRdLFsxMTM2MywxMTk0N10sWzExMzY2LDExOTUxXSxbMTEzNzAsMTE5NTZdLFsxMTM3MiwxMTk2MF0sWzExMzc1LDExOTY0XSxbMTEzODksMTE5NzldLFsxMTY4MiwxMjI4NF0sWzExNjg2LDEyMjkyXSxbMTE2ODcsMTIzMTJdLFsxMTY5MiwxMjMxOV0sWzExNjk0LDEyMzMwXSxbMTE3MTQsMTIzNTFdLFsxMTcxNiwxMjQzNl0sWzExNzIzLDEyNDQ3XSxbMTE3MjUsMTI1MzVdLFsxMTczMCwxMjU0M10sWzExNzM2LDEyNTg2XSxbMTE5ODIsMTI4NDJdLFsxMTk4OSwxMjg1MF0sWzEyMTAyLDEyOTY0XSxbMTIzMzYsMTMyMDBdLFsxMjM0OCwxMzIxNV0sWzEyMzUwLDEzMjE4XSxbMTIzODQsMTMyNTNdLFsxMjM5MywxMzI2M10sWzEyMzk1LDEzMjY3XSxbMTIzOTcsMTMyNzBdLFsxMjUxMCwxMzM4NF0sWzEyNTUzLDEzNDI4XSxbMTI4NTEsMTM3MjddLFsxMjk2MiwxMzgzOV0sWzEyOTczLDEzODUxXSxbMTM3MzgsMTQ2MTddLFsxMzgyMywxNDcwM10sWzEzOTE5LDE0ODAxXSxbMTM5MzMsMTQ4MTZdLFsxNDA4MCwxNDk2NF0sWzE0Mjk4LDE1MTgzXSxbMTQ1ODUsMTU0NzFdLFsxNDY5OCwxNTU4NV0sWzE1NTgzLDE2NDcxXSxbMTU4NDcsMTY3MzZdLFsxNjMxOCwxNzIwOF0sWzE2NDM0LDE3MzI1XSxbMTY0MzgsMTczMzBdLFsxNjQ4MSwxNzM3NF0sWzE2NzI5LDE3NjIzXSxbMTcxMDIsMTc5OTddLFsxNzEyMiwxODAxOF0sWzE3MzE1LDE4MjEyXSxbMTczMjAsMTgyMThdLFsxNzQwMiwxODMwMV0sWzE3NDE4LDE4MzE4XSxbMTc4NTksMTg3NjBdLFsxNzkwOSwxODgxMV0sWzE3OTExLDE4ODE0XSxbMTc5MTUsMTg4MjBdLFsxNzkxNiwxODgyM10sWzE3OTM2LDE4ODQ0XSxbMTc5MzksMTg4NDhdLFsxNzk2MSwxODg3Ml0sWzE4NjY0LDE5NTc2XSxbMTg3MDMsMTk2MjBdLFsxODgxNCwxOTczOF0sWzE4OTYyLDE5ODg3XSxbMTkwNDMsNDA4NzBdLFszMzQ2OSw1OTI0NF0sWzMzNDcwLDU5MzM2XSxbMzM0NzEsNTkzNjddLFszMzQ4NCw1OTQxM10sWzMzNDg1LDU5NDE3XSxbMzM0OTAsNTk0MjNdLFszMzQ5Nyw1OTQzMV0sWzMzNTAxLDU5NDM3XSxbMzM1MDUsNTk0NDNdLFszMzUxMyw1OTQ1Ml0sWzMzNTIwLDU5NDYwXSxbMzM1MzYsNTk0NzhdLFszMzU1MCw1OTQ5M10sWzM3ODQ1LDYzNzg5XSxbMzc5MjEsNjM4NjZdLFszNzk0OCw2Mzg5NF0sWzM4MDI5LDYzOTc2XSxbMzgwMzgsNjM5ODZdLFszODA2NCw2NDAxNl0sWzM4MDY1LDY0MDE4XSxbMzgwNjYsNjQwMjFdLFszODA2OSw2NDAyNV0sWzM4MDc1LDY0MDM0XSxbMzgwNzYsNjQwMzddLFszODA3OCw2NDA0Ml0sWzM5MTA4LDY1MDc0XSxbMzkxMDksNjUwOTNdLFszOTExMyw2NTEwN10sWzM5MTE0LDY1MTEyXSxbMzkxMTUsNjUxMjddLFszOTExNiw2NTEzMl0sWzM5MjY1LDY1Mzc1XSxbMzkzOTQsNjU1MTBdLFsxODkwMDAsNjU1MzZdXSxcbiAgXCJqaXMwMjA4XCI6WzEyMjg4LDEyMjg5LDEyMjkwLDY1MjkyLDY1Mjk0LDEyNTM5LDY1MzA2LDY1MzA3LDY1MzExLDY1MjgxLDEyNDQzLDEyNDQ0LDE4MCw2NTM0NCwxNjgsNjUzNDIsNjU1MDcsNjUzNDMsMTI1NDEsMTI1NDIsMTI0NDUsMTI0NDYsMTIyOTEsMjAxODksMTIyOTMsMTIyOTQsMTIyOTUsMTI1NDAsODIxMyw4MjA4LDY1Mjk1LDY1MzQwLDY1Mzc0LDg3NDEsNjUzNzIsODIzMCw4MjI5LDgyMTYsODIxNyw4MjIwLDgyMjEsNjUyODgsNjUyODksMTIzMDgsMTIzMDksNjUzMzksNjUzNDEsNjUzNzEsNjUzNzMsMTIyOTYsMTIyOTcsMTIyOTgsMTIyOTksMTIzMDAsMTIzMDEsMTIzMDIsMTIzMDMsMTIzMDQsMTIzMDUsNjUyOTEsNjUyOTMsMTc3LDIxNSwyNDcsNjUzMDksODgwMCw2NTMwOCw2NTMxMCw4ODA2LDg4MDcsODczNCw4NzU2LDk3OTQsOTc5MiwxNzYsODI0Miw4MjQzLDg0NTEsNjU1MDksNjUyODQsNjU1MDQsNjU1MDUsNjUyODUsNjUyODMsNjUyODYsNjUyOTAsNjUzMTIsMTY3LDk3MzQsOTczMyw5Njc1LDk2NzksOTY3OCw5NjcxLDk2NzAsOTYzMyw5NjMyLDk2NTEsOTY1MCw5NjYxLDk2NjAsODI1MSwxMjMwNiw4NTk0LDg1OTIsODU5Myw4NTk1LDEyMzA3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NzEyLDg3MTUsODgzOCw4ODM5LDg4MzQsODgzNSw4NzQ2LDg3NDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg3NDMsODc0NCw2NTUwNiw4NjU4LDg2NjAsODcwNCw4NzA3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NzM2LDg4NjksODk3OCw4NzA2LDg3MTEsODgwMSw4Nzg2LDg4MTAsODgxMSw4NzMwLDg3NjUsODczMyw4NzU3LDg3NDcsODc0OCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg0OTEsODI0MCw5ODM5LDk4MzcsOTgzNCw4MjI0LDgyMjUsMTgyLG51bGwsbnVsbCxudWxsLG51bGwsOTcxMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTI5Niw2NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2NTMwMSw2NTMwMiw2NTMwMyw2NTMwNCw2NTMwNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY1MzEzLDY1MzE0LDY1MzE1LDY1MzE2LDY1MzE3LDY1MzE4LDY1MzE5LDY1MzIwLDY1MzIxLDY1MzIyLDY1MzIzLDY1MzI0LDY1MzI1LDY1MzI2LDY1MzI3LDY1MzI4LDY1MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1MzQ4LDY1MzQ5LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1MzU0LDY1MzU1LDY1MzU2LDY1MzU3LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5LDY1MzcwLG51bGwsbnVsbCxudWxsLG51bGwsMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDk2LDk0OTIsOTUwMCw5NTE2LDk1MDgsOTUyNCw5NTMyLDk0NzMsOTQ3NSw5NDg3LDk0OTEsOTQ5OSw5NDk1LDk1MDcsOTUyMyw5NTE1LDk1MzEsOTU0Nyw5NTA0LDk1MTksOTUxMiw5NTI3LDk1MzUsOTUwMSw5NTIwLDk1MDksOTUyOCw5NTM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDkzMTIsOTMxMyw5MzE0LDkzMTUsOTMxNiw5MzE3LDkzMTgsOTMxOSw5MzIwLDkzMjEsOTMyMiw5MzIzLDkzMjQsOTMyNSw5MzI2LDkzMjcsOTMyOCw5MzI5LDkzMzAsOTMzMSw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLG51bGwsMTMxMjksMTMwNzYsMTMwOTAsMTMxMzMsMTMwODAsMTMwOTUsMTMwNTksMTMxMTAsMTMxMzcsMTMxNDMsMTMwNjksMTMwOTQsMTMwOTEsMTMwOTksMTMxMzAsMTMxMTUsMTMyMTIsMTMyMTMsMTMyMTQsMTMxOTgsMTMxOTksMTMyNTIsMTMyMTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEzMTc5LDEyMzE3LDEyMzE5LDg0NzAsMTMyNjEsODQ4MSwxMjk2NCwxMjk2NSwxMjk2NiwxMjk2NywxMjk2OCwxMjg0OSwxMjg1MCwxMjg1NywxMzE4MiwxMzE4MSwxMzE4MCw4Nzg2LDg4MDEsODc0Nyw4NzUwLDg3MjEsODczMCw4ODY5LDg3MzYsODczNSw4ODk1LDg3NTcsODc0NSw4NzQ2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjAxMjQsMjE3ODIsMjMwNDMsMzg0NjMsMjE2OTYsMjQ4NTksMjUzODQsMjMwMzAsMzY4OTgsMzM5MDksMzM1NjQsMzEzMTIsMjQ3NDYsMjU1NjksMjgxOTcsMjYwOTMsMzM4OTQsMzM0NDYsMzk5MjUsMjY3NzEsMjIzMTEsMjYwMTcsMjUyMDEsMjM0NTEsMjI5OTIsMzQ0MjcsMzkxNTYsMzIwOTgsMzIxOTAsMzk4MjIsMjUxMTAsMzE5MDMsMzQ5OTksMjM0MzMsMjQyNDUsMjUzNTMsMjYyNjMsMjY2OTYsMzgzNDMsMzg3OTcsMjY0NDcsMjAxOTcsMjAyMzQsMjAzMDEsMjAzODEsMjA1NTMsMjIyNTgsMjI4MzksMjI5OTYsMjMwNDEsMjM1NjEsMjQ3OTksMjQ4NDcsMjQ5NDQsMjYxMzEsMjY4ODUsMjg4NTgsMzAwMzEsMzAwNjQsMzEyMjcsMzIxNzMsMzIyMzksMzI5NjMsMzM4MDYsMzQ5MTUsMzU1ODYsMzY5NDksMzY5ODYsMjEzMDcsMjAxMTcsMjAxMzMsMjI0OTUsMzI5NDYsMzcwNTcsMzA5NTksMTk5NjgsMjI3NjksMjgzMjIsMzY5MjAsMzEyODIsMzM1NzYsMzM0MTksMzk5ODMsMjA4MDEsMjEzNjAsMjE2OTMsMjE3MjksMjIyNDAsMjMwMzUsMjQzNDEsMzkxNTQsMjgxMzksMzI5OTYsMzQwOTMsMzg0OTgsMzg1MTIsMzg1NjAsMzg5MDcsMjE1MTUsMjE0OTEsMjM0MzEsMjg4NzksMzI3MDEsMzY4MDIsMzg2MzIsMjEzNTksNDAyODQsMzE0MTgsMTk5ODUsMzA4NjcsMzMyNzYsMjgxOTgsMjIwNDAsMjE3NjQsMjc0MjEsMzQwNzQsMzk5OTUsMjMwMTMsMjE0MTcsMjgwMDYsMjk5MTYsMzgyODcsMjIwODIsMjAxMTMsMzY5MzksMzg2NDIsMzM2MTUsMzkxODAsMjE0NzMsMjE5NDIsMjMzNDQsMjQ0MzMsMjYxNDQsMjYzNTUsMjY2MjgsMjc3MDQsMjc4OTEsMjc5NDUsMjk3ODcsMzA0MDgsMzEzMTAsMzg5NjQsMzM1MjEsMzQ5MDcsMzU0MjQsMzc2MTMsMjgwODIsMzAxMjMsMzA0MTAsMzkzNjUsMjQ3NDIsMzU1ODUsMzYyMzQsMzgzMjIsMjcwMjIsMjE0MjEsMjA4NzAsMjIyOTAsMjI1NzYsMjI4NTIsMjM0NzYsMjQzMTAsMjQ2MTYsMjU1MTMsMjU1ODgsMjc4MzksMjg0MzYsMjg4MTQsMjg5NDgsMjkwMTcsMjkxNDEsMjk1MDMsMzIyNTcsMzMzOTgsMzM0ODksMzQxOTksMzY5NjAsMzc0NjcsNDAyMTksMjI2MzMsMjYwNDQsMjc3MzgsMjk5ODksMjA5ODUsMjI4MzAsMjI4ODUsMjQ0NDgsMjQ1NDAsMjUyNzYsMjYxMDYsMjcxNzgsMjc0MzEsMjc1NzIsMjk1NzksMzI3MDUsMzUxNTgsNDAyMzYsNDAyMDYsNDA2NDQsMjM3MTMsMjc3OTgsMzM2NTksMjA3NDAsMjM2MjcsMjUwMTQsMzMyMjIsMjY3NDIsMjkyODEsMjAwNTcsMjA0NzQsMjEzNjgsMjQ2ODEsMjgyMDEsMzEzMTEsMzg4OTksMTk5NzksMjEyNzAsMjAyMDYsMjAzMDksMjAyODUsMjAzODUsMjAzMzksMjExNTIsMjE0ODcsMjIwMjUsMjI3OTksMjMyMzMsMjM0NzgsMjM1MjEsMzExODUsMjYyNDcsMjY1MjQsMjY1NTAsMjc0NjgsMjc4MjcsMjg3NzksMjk2MzQsMzExMTcsMzExNjYsMzEyOTIsMzE2MjMsMzM0NTcsMzM0OTksMzM1NDAsMzM2NTUsMzM3NzUsMzM3NDcsMzQ2NjIsMzU1MDYsMjIwNTcsMzYwMDgsMzY4MzgsMzY5NDIsMzg2ODYsMzQ0NDIsMjA0MjAsMjM3ODQsMjUxMDUsMjkyNzMsMzAwMTEsMzMyNTMsMzM0NjksMzQ1NTgsMzYwMzIsMzg1OTcsMzkxODcsMzkzODEsMjAxNzEsMjAyNTAsMzUyOTksMjIyMzgsMjI2MDIsMjI3MzAsMjQzMTUsMjQ1NTUsMjQ2MTgsMjQ3MjQsMjQ2NzQsMjUwNDAsMjUxMDYsMjUyOTYsMjU5MTMsMzk3NDUsMjYyMTQsMjY4MDAsMjgwMjMsMjg3ODQsMzAwMjgsMzAzNDIsMzIxMTcsMzM0NDUsMzQ4MDksMzgyODMsMzg1NDIsMzU5OTcsMjA5NzcsMjExODIsMjI4MDYsMjE2ODMsMjM0NzUsMjM4MzAsMjQ5MzYsMjcwMTAsMjgwNzksMzA4NjEsMzM5OTUsMzQ5MDMsMzU0NDIsMzc3OTksMzk2MDgsMjgwMTIsMzkzMzYsMzQ1MjEsMjI0MzUsMjY2MjMsMzQ1MTAsMzczOTAsMjExMjMsMjIxNTEsMjE1MDgsMjQyNzUsMjUzMTMsMjU3ODUsMjY2ODQsMjY2ODAsMjc1NzksMjk1NTQsMzA5MDYsMzEzMzksMzUyMjYsMzUyODIsMzYyMDMsMzY2MTEsMzcxMDEsMzgzMDcsMzg1NDgsMzg3NjEsMjMzOTgsMjM3MzEsMjcwMDUsMzg5ODksMzg5OTAsMjU0OTksMzE1MjAsMjcxNzksMjcyNjMsMjY4MDYsMzk5NDksMjg1MTEsMjExMDYsMjE5MTcsMjQ2ODgsMjUzMjQsMjc5NjMsMjgxNjcsMjgzNjksMzM4ODMsMzUwODgsMzY2NzYsMTk5ODgsMzk5OTMsMjE0OTQsMjY5MDcsMjcxOTQsMzg3ODgsMjY2NjYsMjA4MjgsMzE0MjcsMzM5NzAsMzczNDAsMzc3NzIsMjIxMDcsNDAyMzIsMjY2NTgsMzM1NDEsMzM4NDEsMzE5MDksMjEwMDAsMzM0NzcsMjk5MjYsMjAwOTQsMjAzNTUsMjA4OTYsMjM1MDYsMjEwMDIsMjEyMDgsMjEyMjMsMjQwNTksMjE5MTQsMjI1NzAsMjMwMTQsMjM0MzYsMjM0NDgsMjM1MTUsMjQxNzgsMjQxODUsMjQ3MzksMjQ4NjMsMjQ5MzEsMjUwMjIsMjU1NjMsMjU5NTQsMjY1NzcsMjY3MDcsMjY4NzQsMjc0NTQsMjc0NzUsMjc3MzUsMjg0NTAsMjg1NjcsMjg0ODUsMjk4NzIsMjk5NzYsMzA0MzUsMzA0NzUsMzE0ODcsMzE2NDksMzE3NzcsMzIyMzMsMzI1NjYsMzI3NTIsMzI5MjUsMzMzODIsMzM2OTQsMzUyNTEsMzU1MzIsMzYwMTEsMzY5OTYsMzc5NjksMzgyOTEsMzgyODksMzgzMDYsMzg1MDEsMzg4NjcsMzkyMDgsMzMzMDQsMjAwMjQsMjE1NDcsMjM3MzYsMjQwMTIsMjk2MDksMzAyODQsMzA1MjQsMjM3MjEsMzI3NDcsMzYxMDcsMzg1OTMsMzg5MjksMzg5OTYsMzkwMDAsMjAyMjUsMjAyMzgsMjEzNjEsMjE5MTYsMjIxMjAsMjI1MjIsMjI4NTUsMjMzMDUsMjM0OTIsMjM2OTYsMjQwNzYsMjQxOTAsMjQ1MjQsMjU1ODIsMjY0MjYsMjYwNzEsMjYwODIsMjYzOTksMjY4MjcsMjY4MjAsMjcyMzEsMjQxMTIsMjc1ODksMjc2NzEsMjc3NzMsMzAwNzksMzEwNDgsMjMzOTUsMzEyMzIsMzIwMDAsMjQ1MDksMzUyMTUsMzUzNTIsMzYwMjAsMzYyMTUsMzY1NTYsMzY2MzcsMzkxMzgsMzk0MzgsMzk3NDAsMjAwOTYsMjA2MDUsMjA3MzYsMjI5MzEsMjM0NTIsMjUxMzUsMjUyMTYsMjU4MzYsMjc0NTAsMjkzNDQsMzAwOTcsMzEwNDcsMzI2ODEsMzQ4MTEsMzU1MTYsMzU2OTYsMjU1MTYsMzM3MzgsMzg4MTYsMjE1MTMsMjE1MDcsMjE5MzEsMjY3MDgsMjcyMjQsMzU0NDAsMzA3NTksMjY0ODUsNDA2NTMsMjEzNjQsMjM0NTgsMzMwNTAsMzQzODQsMzY4NzAsMTk5OTIsMjAwMzcsMjAxNjcsMjAyNDEsMjE0NTAsMjE1NjAsMjM0NzAsMjQzMzksMjQ2MTMsMjU5MzcsMjY0MjksMjc3MTQsMjc3NjIsMjc4NzUsMjg3OTIsMjk2OTksMzEzNTAsMzE0MDYsMzE0OTYsMzIwMjYsMzE5OTgsMzIxMDIsMjYwODcsMjkyNzUsMjE0MzUsMjM2MjEsMjQwNDAsMjUyOTgsMjUzMTIsMjUzNjksMjgxOTIsMzQzOTQsMzUzNzcsMzYzMTcsMzc2MjQsMjg0MTcsMzExNDIsMzk3NzAsMjAxMzYsMjAxMzksMjAxNDAsMjAzNzksMjAzODQsMjA2ODksMjA4MDcsMzE0NzgsMjA4NDksMjA5ODIsMjEzMzIsMjEyODEsMjEzNzUsMjE0ODMsMjE5MzIsMjI2NTksMjM3NzcsMjQzNzUsMjQzOTQsMjQ2MjMsMjQ2NTYsMjQ2ODUsMjUzNzUsMjU5NDUsMjcyMTEsMjc4NDEsMjkzNzgsMjk0MjEsMzA3MDMsMzMwMTYsMzMwMjksMzMyODgsMzQxMjYsMzcxMTEsMzc4NTcsMzg5MTEsMzkyNTUsMzk1MTQsMjAyMDgsMjA5NTcsMjM1OTcsMjYyNDEsMjY5ODksMjM2MTYsMjYzNTQsMjY5OTcsMjk1NzcsMjY3MDQsMzE4NzMsMjA2NzcsMjEyMjAsMjIzNDMsMjQwNjIsMzc2NzAsMjYwMjAsMjc0MjcsMjc0NTMsMjk3NDgsMzExMDUsMzExNjUsMzE1NjMsMzIyMDIsMzM0NjUsMzM3NDAsMzQ5NDMsMzUxNjcsMzU2NDEsMzY4MTcsMzczMjksMjE1MzUsMzc1MDQsMjAwNjEsMjA1MzQsMjE0NzcsMjEzMDYsMjkzOTksMjk1OTAsMzA2OTcsMzM1MTAsMzY1MjcsMzkzNjYsMzkzNjgsMzkzNzgsMjA4NTUsMjQ4NTgsMzQzOTgsMjE5MzYsMzEzNTQsMjA1OTgsMjM1MDcsMzY5MzUsMzg1MzMsMjAwMTgsMjczNTUsMzczNTEsMjM2MzMsMjM2MjQsMjU0OTYsMzEzOTEsMjc3OTUsMzg3NzIsMzY3MDUsMzE0MDIsMjkwNjYsMzg1MzYsMzE4NzQsMjY2NDcsMzIzNjgsMjY3MDUsMzc3NDAsMjEyMzQsMjE1MzEsMzQyMTksMzUzNDcsMzI2NzYsMzY1NTcsMzcwODksMjEzNTAsMzQ5NTIsMzEwNDEsMjA0MTgsMjA2NzAsMjEwMDksMjA4MDQsMjE4NDMsMjIzMTcsMjk2NzQsMjI0MTEsMjI4NjUsMjQ0MTgsMjQ0NTIsMjQ2OTMsMjQ5NTAsMjQ5MzUsMjUwMDEsMjU1MjIsMjU2NTgsMjU5NjQsMjYyMjMsMjY2OTAsMjgxNzksMzAwNTQsMzEyOTMsMzE5OTUsMzIwNzYsMzIxNTMsMzIzMzEsMzI2MTksMzM1NTAsMzM2MTAsMzQ1MDksMzUzMzYsMzU0MjcsMzU2ODYsMzY2MDUsMzg5MzgsNDAzMzUsMzM0NjQsMzY4MTQsMzk5MTIsMjExMjcsMjUxMTksMjU3MzEsMjg2MDgsMzg1NTMsMjY2ODksMjA2MjUsMjc0MjQsMjc3NzAsMjg1MDAsMzEzNDgsMzIwODAsMzQ4ODAsMzUzNjMsMjYzNzYsMjAyMTQsMjA1MzcsMjA1MTgsMjA1ODEsMjA4NjAsMjEwNDgsMjEwOTEsMjE5MjcsMjIyODcsMjI1MzMsMjMyNDQsMjQzMTQsMjUwMTAsMjUwODAsMjUzMzEsMjU0NTgsMjY5MDgsMjcxNzcsMjkzMDksMjkzNTYsMjk0ODYsMzA3NDAsMzA4MzEsMzIxMjEsMzA0NzYsMzI5MzcsMzUyMTEsMzU2MDksMzYwNjYsMzY1NjIsMzY5NjMsMzc3NDksMzg1MjIsMzg5OTcsMzk0NDMsNDA1NjgsMjA4MDMsMjE0MDcsMjE0MjcsMjQxODcsMjQzNTgsMjgxODcsMjgzMDQsMjk1NzIsMjk2OTQsMzIwNjcsMzMzMzUsMzUzMjgsMzU1NzgsMzg0ODAsMjAwNDYsMjA0OTEsMjE0NzYsMjE2MjgsMjIyNjYsMjI5OTMsMjMzOTYsMjQwNDksMjQyMzUsMjQzNTksMjUxNDQsMjU5MjUsMjY1NDMsMjgyNDYsMjkzOTIsMzE5NDYsMzQ5OTYsMzI5MjksMzI5OTMsMzM3NzYsMzQzODIsMzU0NjMsMzYzMjgsMzc0MzEsMzg1OTksMzkwMTUsNDA3MjMsMjAxMTYsMjAxMTQsMjAyMzcsMjEzMjAsMjE1NzcsMjE1NjYsMjMwODcsMjQ0NjAsMjQ0ODEsMjQ3MzUsMjY3OTEsMjcyNzgsMjk3ODYsMzA4NDksMzU0ODYsMzU0OTIsMzU3MDMsMzcyNjQsMjAwNjIsMzk4ODEsMjAxMzIsMjAzNDgsMjAzOTksMjA1MDUsMjA1MDIsMjA4MDksMjA4NDQsMjExNTEsMjExNzcsMjEyNDYsMjE0MDIsMjE0NzUsMjE1MjEsMjE1MTgsMjE4OTcsMjIzNTMsMjI0MzQsMjI5MDksMjMzODAsMjMzODksMjM0MzksMjQwMzcsMjQwMzksMjQwNTUsMjQxODQsMjQxOTUsMjQyMTgsMjQyNDcsMjQzNDQsMjQ2NTgsMjQ5MDgsMjUyMzksMjUzMDQsMjU1MTEsMjU5MTUsMjYxMTQsMjYxNzksMjYzNTYsMjY0NzcsMjY2NTcsMjY3NzUsMjcwODMsMjc3NDMsMjc5NDYsMjgwMDksMjgyMDcsMjgzMTcsMzAwMDIsMzAzNDMsMzA4MjgsMzEyOTUsMzE5NjgsMzIwMDUsMzIwMjQsMzIwOTQsMzIxNzcsMzI3ODksMzI3NzEsMzI5NDMsMzI5NDUsMzMxMDgsMzMxNjcsMzMzMjIsMzM2MTgsMzQ4OTIsMzQ5MTMsMzU2MTEsMzYwMDIsMzYwOTIsMzcwNjYsMzcyMzcsMzc0ODksMzA3ODMsMzc2MjgsMzgzMDgsMzg0NzcsMzg5MTcsMzkzMjEsMzk2NDAsNDAyNTEsMjEwODMsMjExNjMsMjE0OTUsMjE1MTIsMjI3NDEsMjUzMzUsMjg2NDAsMzU5NDYsMzY3MDMsNDA2MzMsMjA4MTEsMjEwNTEsMjE1NzgsMjIyNjksMzEyOTYsMzcyMzksNDAyODgsNDA2NTgsMjk1MDgsMjg0MjUsMzMxMzYsMjk5NjksMjQ1NzMsMjQ3OTQsMzk1OTIsMjk0MDMsMzY3OTYsMjc0OTIsMzg5MTUsMjAxNzAsMjIyNTYsMjIzNzIsMjI3MTgsMjMxMzAsMjQ2ODAsMjUwMzEsMjYxMjcsMjYxMTgsMjY2ODEsMjY4MDEsMjgxNTEsMzAxNjUsMzIwNTgsMzMzOTAsMzk3NDYsMjAxMjMsMjAzMDQsMjE0NDksMjE3NjYsMjM5MTksMjQwMzgsMjQwNDYsMjY2MTksMjc4MDEsMjk4MTEsMzA3MjIsMzU0MDgsMzc3ODIsMzUwMzksMjIzNTIsMjQyMzEsMjUzODcsMjA2NjEsMjA2NTIsMjA4NzcsMjYzNjgsMjE3MDUsMjI2MjIsMjI5NzEsMjM0NzIsMjQ0MjUsMjUxNjUsMjU1MDUsMjY2ODUsMjc1MDcsMjgxNjgsMjg3OTcsMzczMTksMjkzMTIsMzA3NDEsMzA3NTgsMzEwODUsMjU5OTgsMzIwNDgsMzM3NTYsMzUwMDksMzY2MTcsMzg1NTUsMjEwOTIsMjIzMTIsMjY0NDgsMzI2MTgsMzYwMDEsMjA5MTYsMjIzMzgsMzg0NDIsMjI1ODYsMjcwMTgsMzI5NDgsMjE2ODIsMjM4MjIsMjI1MjQsMzA4NjksNDA0NDIsMjAzMTYsMjEwNjYsMjE2NDMsMjU2NjIsMjYxNTIsMjYzODgsMjY2MTMsMzEzNjQsMzE1NzQsMzIwMzQsMzc2NzksMjY3MTYsMzk4NTMsMzE1NDUsMjEyNzMsMjA4NzQsMjEwNDcsMjM1MTksMjUzMzQsMjU3NzQsMjU4MzAsMjY0MTMsMjc1NzgsMzQyMTcsMzg2MDksMzAzNTIsMzk4OTQsMjU0MjAsMzc2MzgsMzk4NTEsMzAzOTksMjYxOTQsMTk5NzcsMjA2MzIsMjE0NDIsMjM2NjUsMjQ4MDgsMjU3NDYsMjU5NTUsMjY3MTksMjkxNTgsMjk2NDIsMjk5ODcsMzE2MzksMzIzODYsMzQ0NTMsMzU3MTUsMzYwNTksMzcyNDAsMzkxODQsMjYwMjgsMjYyODMsMjc1MzEsMjAxODEsMjAxODAsMjAyODIsMjAzNTEsMjEwNTAsMjE0OTYsMjE0OTAsMjE5ODcsMjIyMzUsMjI3NjMsMjI5ODcsMjI5ODUsMjMwMzksMjMzNzYsMjM2MjksMjQwNjYsMjQxMDcsMjQ1MzUsMjQ2MDUsMjUzNTEsMjU5MDMsMjMzODgsMjYwMzEsMjYwNDUsMjYwODgsMjY1MjUsMjc0OTAsMjc1MTUsMjc2NjMsMjk1MDksMzEwNDksMzExNjksMzE5OTIsMzIwMjUsMzIwNDMsMzI5MzAsMzMwMjYsMzMyNjcsMzUyMjIsMzU0MjIsMzU0MzMsMzU0MzAsMzU0NjgsMzU1NjYsMzYwMzksMzYwNjAsMzg2MDQsMzkxNjQsMjc1MDMsMjAxMDcsMjAyODQsMjAzNjUsMjA4MTYsMjMzODMsMjM1NDYsMjQ5MDQsMjUzNDUsMjYxNzgsMjc0MjUsMjgzNjMsMjc4MzUsMjkyNDYsMjk4ODUsMzAxNjQsMzA5MTMsMzEwMzQsMzI3ODAsMzI4MTksMzMyNTgsMzM5NDAsMzY3NjYsMjc3MjgsNDA1NzUsMjQzMzUsMzU2NzIsNDAyMzUsMzE0ODIsMzY2MDAsMjM0MzcsMzg2MzUsMTk5NzEsMjE0ODksMjI1MTksMjI4MzMsMjMyNDEsMjM0NjAsMjQ3MTMsMjgyODcsMjg0MjIsMzAxNDIsMzYwNzQsMjM0NTUsMzQwNDgsMzE3MTIsMjA1OTQsMjY2MTIsMzM0MzcsMjM2NDksMzQxMjIsMzIyODYsMzMyOTQsMjA4ODksMjM1NTYsMjU0NDgsMzYxOTgsMjYwMTIsMjkwMzgsMzEwMzgsMzIwMjMsMzI3NzMsMzU2MTMsMzY1NTQsMzY5NzQsMzQ1MDMsMzcwMzQsMjA1MTEsMjEyNDIsMjM2MTAsMjY0NTEsMjg3OTYsMjkyMzcsMzcxOTYsMzczMjAsMzc2NzUsMzM1MDksMjM0OTAsMjQzNjksMjQ4MjUsMjAwMjcsMjE0NjIsMjM0MzIsMjUxNjMsMjY0MTcsMjc1MzAsMjk0MTcsMjk2NjQsMzEyNzgsMzMxMzEsMzYyNTksMzcyMDIsMzkzMTgsMjA3NTQsMjE0NjMsMjE2MTAsMjM1NTEsMjU0ODAsMjcxOTMsMzIxNzIsMzg2NTYsMjIyMzQsMjE0NTQsMjE2MDgsMjM0NDcsMjM2MDEsMjQwMzAsMjA0NjIsMjQ4MzMsMjUzNDIsMjc5NTQsMzExNjgsMzExNzksMzIwNjYsMzIzMzMsMzI3MjIsMzMyNjEsMzMzMTEsMzM5MzYsMzQ4ODYsMzUxODYsMzU3MjgsMzY0NjgsMzY2NTUsMzY5MTMsMzcxOTUsMzcyMjgsMzg1OTgsMzcyNzYsMjAxNjAsMjAzMDMsMjA4MDUsMjEzMTMsMjQ0NjcsMjUxMDIsMjY1ODAsMjc3MTMsMjgxNzEsMjk1MzksMzIyOTQsMzczMjUsMzc1MDcsMjE0NjAsMjI4MDksMjM0ODcsMjgxMTMsMzEwNjksMzIzMDIsMzE4OTksMjI2NTQsMjkwODcsMjA5ODYsMzQ4OTksMzY4NDgsMjA0MjYsMjM4MDMsMjYxNDksMzA2MzYsMzE0NTksMzMzMDgsMzk0MjMsMjA5MzQsMjQ0OTAsMjYwOTIsMjY5OTEsMjc1MjksMjgxNDcsMjgzMTAsMjg1MTYsMzA0NjIsMzIwMjAsMjQwMzMsMzY5ODEsMzcyNTUsMzg5MTgsMjA5NjYsMjEwMjEsMjUxNTIsMjYyNTcsMjYzMjksMjgxODYsMjQyNDYsMzIyMTAsMzI2MjYsMjYzNjAsMzQyMjMsMzQyOTUsMzU1NzYsMjExNjEsMjE0NjUsMjI4OTksMjQyMDcsMjQ0NjQsMjQ2NjEsMzc2MDQsMzg1MDAsMjA2NjMsMjA3NjcsMjEyMTMsMjEyODAsMjEzMTksMjE0ODQsMjE3MzYsMjE4MzAsMjE4MDksMjIwMzksMjI4ODgsMjI5NzQsMjMxMDAsMjM0NzcsMjM1NTgsMjM1NjcsMjM1NjksMjM1NzgsMjQxOTYsMjQyMDIsMjQyODgsMjQ0MzIsMjUyMTUsMjUyMjAsMjUzMDcsMjU0ODQsMjU0NjMsMjYxMTksMjYxMjQsMjYxNTcsMjYyMzAsMjY0OTQsMjY3ODYsMjcxNjcsMjcxODksMjc4MzYsMjgwNDAsMjgxNjksMjgyNDgsMjg5ODgsMjg5NjYsMjkwMzEsMzAxNTEsMzA0NjUsMzA4MTMsMzA5NzcsMzEwNzcsMzEyMTYsMzE0NTYsMzE1MDUsMzE5MTEsMzIwNTcsMzI5MTgsMzM3NTAsMzM5MzEsMzQxMjEsMzQ5MDksMzUwNTksMzUzNTksMzUzODgsMzU0MTIsMzU0NDMsMzU5MzcsMzYwNjIsMzcyODQsMzc0NzgsMzc3NTgsMzc5MTIsMzg1NTYsMzg4MDgsMTk5NzgsMTk5NzYsMTk5OTgsMjAwNTUsMjA4ODcsMjExMDQsMjI0NzgsMjI1ODAsMjI3MzIsMjMzMzAsMjQxMjAsMjQ3NzMsMjU4NTQsMjY0NjUsMjY0NTQsMjc5NzIsMjkzNjYsMzAwNjcsMzEzMzEsMzM5NzYsMzU2OTgsMzczMDQsMzc2NjQsMjIwNjUsMjI1MTYsMzkxNjYsMjUzMjUsMjY4OTMsMjc1NDIsMjkxNjUsMzIzNDAsMzI4ODcsMzMzOTQsMzUzMDIsMzkxMzUsMzQ2NDUsMzY3ODUsMjM2MTEsMjAyODAsMjA0NDksMjA0MDUsMjE3NjcsMjMwNzIsMjM1MTcsMjM1MjksMjQ1MTUsMjQ5MTAsMjUzOTEsMjYwMzIsMjYxODcsMjY4NjIsMjcwMzUsMjgwMjQsMjgxNDUsMzAwMDMsMzAxMzcsMzA0OTUsMzEwNzAsMzEyMDYsMzIwNTEsMzMyNTEsMzM0NTUsMzQyMTgsMzUyNDIsMzUzODYsMzY1MjMsMzY3NjMsMzY5MTQsMzczNDEsMzg2NjMsMjAxNTQsMjAxNjEsMjA5OTUsMjI2NDUsMjI3NjQsMjM1NjMsMjk5NzgsMjM2MTMsMzMxMDIsMzUzMzgsMzY4MDUsMzg0OTksMzg3NjUsMzE1MjUsMzU1MzUsMzg5MjAsMzcyMTgsMjIyNTksMjE0MTYsMzY4ODcsMjE1NjEsMjI0MDIsMjQxMDEsMjU1MTIsMjc3MDAsMjg4MTAsMzA1NjEsMzE4ODMsMzI3MzYsMzQ5MjgsMzY5MzAsMzcyMDQsMzc2NDgsMzc2NTYsMzg1NDMsMjk3OTAsMzk2MjAsMjM4MTUsMjM5MTMsMjU5NjgsMjY1MzAsMzYyNjQsMzg2MTksMjU0NTQsMjY0NDEsMjY5MDUsMzM3MzMsMzg5MzUsMzg1OTIsMzUwNzAsMjg1NDgsMjU3MjIsMjM1NDQsMTk5OTAsMjg3MTYsMzAwNDUsMjYxNTksMjA5MzIsMjEwNDYsMjEyMTgsMjI5OTUsMjQ0NDksMjQ2MTUsMjUxMDQsMjU5MTksMjU5NzIsMjYxNDMsMjYyMjgsMjY4NjYsMjY2NDYsMjc0OTEsMjgxNjUsMjkyOTgsMjk5ODMsMzA0MjcsMzE5MzQsMzI4NTQsMjI3NjgsMzUwNjksMzUxOTksMzU0ODgsMzU0NzUsMzU1MzEsMzY4OTMsMzcyNjYsMzg3MzgsMzg3NDUsMjU5OTMsMzEyNDYsMzMwMzAsMzg1ODcsMjQxMDksMjQ3OTYsMjUxMTQsMjYwMjEsMjYxMzIsMjY1MTIsMzA3MDcsMzEzMDksMzE4MjEsMzIzMTgsMzMwMzQsMzYwMTIsMzYxOTYsMzYzMjEsMzY0NDcsMzA4ODksMjA5OTksMjUzMDUsMjU1MDksMjU2NjYsMjUyNDAsMzUzNzMsMzEzNjMsMzE2ODAsMzU1MDAsMzg2MzQsMzIxMTgsMzMyOTIsMzQ2MzMsMjAxODUsMjA4MDgsMjEzMTUsMjEzNDQsMjM0NTksMjM1NTQsMjM1NzQsMjQwMjksMjUxMjYsMjUxNTksMjU3NzYsMjY2NDMsMjY2NzYsMjc4NDksMjc5NzMsMjc5MjcsMjY1NzksMjg1MDgsMjkwMDYsMjkwNTMsMjYwNTksMzEzNTksMzE2NjEsMzIyMTgsMzIzMzAsMzI2ODAsMzMxNDYsMzMzMDcsMzMzMzcsMzQyMTQsMzU0MzgsMzYwNDYsMzYzNDEsMzY5ODQsMzY5ODMsMzc1NDksMzc1MjEsMzgyNzUsMzk4NTQsMjEwNjksMjE4OTIsMjg0NzIsMjg5ODIsMjA4NDAsMzExMDksMzIzNDEsMzMyMDMsMzE5NTAsMjIwOTIsMjI2MDksMjM3MjAsMjU1MTQsMjYzNjYsMjYzNjUsMjY5NzAsMjk0MDEsMzAwOTUsMzAwOTQsMzA5OTAsMzEwNjIsMzExOTksMzE4OTUsMzIwMzIsMzIwNjgsMzQzMTEsMzUzODAsMzg0NTksMzY5NjEsNDA3MzYsMjA3MTEsMjExMDksMjE0NTIsMjE0NzQsMjA0ODksMjE5MzAsMjI3NjYsMjI4NjMsMjkyNDUsMjM0MzUsMjM2NTIsMjEyNzcsMjQ4MDMsMjQ4MTksMjU0MzYsMjU0NzUsMjU0MDcsMjU1MzEsMjU4MDUsMjYwODksMjYzNjEsMjQwMzUsMjcwODUsMjcxMzMsMjg0MzcsMjkxNTcsMjAxMDUsMzAxODUsMzA0NTYsMzEzNzksMzE5NjcsMzIyMDcsMzIxNTYsMzI4NjUsMzM2MDksMzM2MjQsMzM5MDAsMzM5ODAsMzQyOTksMzUwMTMsMzYyMDgsMzY4NjUsMzY5NzMsMzc3ODMsMzg2ODQsMzk0NDIsMjA2ODcsMjI2NzksMjQ5NzQsMzMyMzUsMzQxMDEsMzYxMDQsMzY4OTYsMjA0MTksMjA1OTYsMjEwNjMsMjEzNjMsMjQ2ODcsMjU0MTcsMjY0NjMsMjgyMDQsMzYyNzUsMzY4OTUsMjA0MzksMjM2NDYsMzYwNDIsMjYwNjMsMzIxNTQsMjEzMzAsMzQ5NjYsMjA4NTQsMjU1MzksMjMzODQsMjM0MDMsMjM1NjIsMjU2MTMsMjY0NDksMzY5NTYsMjAxODIsMjI4MTAsMjI4MjYsMjc3NjAsMzU0MDksMjE4MjIsMjI1NDksMjI5NDksMjQ4MTYsMjUxNzEsMjY1NjEsMzMzMzMsMjY5NjUsMzg0NjQsMzkzNjQsMzk0NjQsMjAzMDcsMjI1MzQsMjM1NTAsMzI3ODQsMjM3MjksMjQxMTEsMjQ0NTMsMjQ2MDgsMjQ5MDcsMjUxNDAsMjYzNjcsMjc4ODgsMjgzODIsMzI5NzQsMzMxNTEsMzM0OTIsMzQ5NTUsMzYwMjQsMzY4NjQsMzY5MTAsMzg1MzgsNDA2NjcsMzk4OTksMjAxOTUsMjE0ODgsMjI4MjMsMzE1MzIsMzcyNjEsMzg5ODgsNDA0NDEsMjgzODEsMjg3MTEsMjEzMzEsMjE4MjgsMjM0MjksMjUxNzYsMjUyNDYsMjUyOTksMjc4MTAsMjg2NTUsMjk3MzAsMzUzNTEsMzc5NDQsMjg2MDksMzU1ODIsMzM1OTIsMjA5NjcsMzQ1NTIsMjE0ODIsMjE0ODEsMjAyOTQsMzY5NDgsMzY3ODQsMjI4OTAsMzMwNzMsMjQwNjEsMzE0NjYsMzY3OTksMjY4NDIsMzU4OTUsMjk0MzIsNDAwMDgsMjcxOTcsMzU1MDQsMjAwMjUsMjEzMzYsMjIwMjIsMjIzNzQsMjUyODUsMjU1MDYsMjYwODYsMjc0NzAsMjgxMjksMjgyNTEsMjg4NDUsMzA3MDEsMzE0NzEsMzE2NTgsMzIxODcsMzI4MjksMzI5NjYsMzQ1MDcsMzU0NzcsMzc3MjMsMjIyNDMsMjI3MjcsMjQzODIsMjYwMjksMjYyNjIsMjcyNjQsMjc1NzMsMzAwMDcsMzU1MjcsMjA1MTYsMzA2OTMsMjIzMjAsMjQzNDcsMjQ2NzcsMjYyMzQsMjc3NDQsMzAxOTYsMzEyNTgsMzI2MjIsMzMyNjgsMzQ1ODQsMzY5MzMsMzkzNDcsMzE2ODksMzAwNDQsMzE0ODEsMzE1NjksMzM5ODgsMzY4ODAsMzEyMDksMzEzNzgsMzM1OTAsMjMyNjUsMzA1MjgsMjAwMTMsMjAyMTAsMjM0NDksMjQ1NDQsMjUyNzcsMjYxNzIsMjY2MDksMjc4ODAsMzQ0MTEsMzQ5MzUsMzUzODcsMzcxOTgsMzc2MTksMzkzNzYsMjcxNTksMjg3MTAsMjk0ODIsMzM1MTEsMzM4NzksMzYwMTUsMTk5NjksMjA4MDYsMjA5MzksMjE4OTksMjM1NDEsMjQwODYsMjQxMTUsMjQxOTMsMjQzNDAsMjQzNzMsMjQ0MjcsMjQ1MDAsMjUwNzQsMjUzNjEsMjYyNzQsMjYzOTcsMjg1MjYsMjkyNjYsMzAwMTAsMzA1MjIsMzI4ODQsMzMwODEsMzMxNDQsMzQ2NzgsMzU1MTksMzU1NDgsMzYyMjksMzYzMzksMzc1MzAsMzgyNjMsMzg5MTQsNDAxNjUsMjExODksMjU0MzEsMzA0NTIsMjYzODksMjc3ODQsMjk2NDUsMzYwMzUsMzc4MDYsMzg1MTUsMjc5NDEsMjI2ODQsMjY4OTQsMjcwODQsMzY4NjEsMzc3ODYsMzAxNzEsMzY4OTAsMjI2MTgsMjY2MjYsMjU1MjQsMjcxMzEsMjAyOTEsMjg0NjAsMjY1ODQsMzY3OTUsMzQwODYsMzIxODAsMzc3MTYsMjY5NDMsMjg1MjgsMjIzNzgsMjI3NzUsMjMzNDAsMzIwNDQsMjkyMjYsMjE1MTQsMzczNDcsNDAzNzIsMjAxNDEsMjAzMDIsMjA1NzIsMjA1OTcsMjEwNTksMzU5OTgsMjE1NzYsMjI1NjQsMjM0NTAsMjQwOTMsMjQyMTMsMjQyMzcsMjQzMTEsMjQzNTEsMjQ3MTYsMjUyNjksMjU0MDIsMjU1NTIsMjY3OTksMjc3MTIsMzA4NTUsMzExMTgsMzEyNDMsMzIyMjQsMzMzNTEsMzUzMzAsMzU1NTgsMzY0MjAsMzY4ODMsMzcwNDgsMzcxNjUsMzczMzYsNDA3MTgsMjc4NzcsMjU2ODgsMjU4MjYsMjU5NzMsMjg0MDQsMzAzNDAsMzE1MTUsMzY5NjksMzc4NDEsMjgzNDYsMjE3NDYsMjQ1MDUsMjU3NjQsMzY2ODUsMzY4NDUsMzc0NDQsMjA4NTYsMjI2MzUsMjI4MjUsMjM2MzcsMjQyMTUsMjgxNTUsMzIzOTksMjk5ODAsMzYwMjgsMzY1NzgsMzkwMDMsMjg4NTcsMjAyNTMsMjc1ODMsMjg1OTMsMzAwMDAsMzg2NTEsMjA4MTQsMjE1MjAsMjI1ODEsMjI2MTUsMjI5NTYsMjM2NDgsMjQ0NjYsMjYwMDcsMjY0NjAsMjgxOTMsMzAzMzEsMzM3NTksMzYwNzcsMzY4ODQsMzcxMTcsMzc3MDksMzA3NTcsMzA3NzgsMjExNjIsMjQyMzAsMjIzMDMsMjI5MDAsMjQ1OTQsMjA0OTgsMjA4MjYsMjA5MDgsMjA5NDEsMjA5OTIsMjE3NzYsMjI2MTIsMjI2MTYsMjI4NzEsMjM0NDUsMjM3OTgsMjM5NDcsMjQ3NjQsMjUyMzcsMjU2NDUsMjY0ODEsMjY2OTEsMjY4MTIsMjY4NDcsMzA0MjMsMjgxMjAsMjgyNzEsMjgwNTksMjg3ODMsMjkxMjgsMjQ0MDMsMzAxNjgsMzEwOTUsMzE1NjEsMzE1NzIsMzE1NzAsMzE5NTgsMzIxMTMsMjEwNDAsMzM4OTEsMzQxNTMsMzQyNzYsMzUzNDIsMzU1ODgsMzU5MTAsMzYzNjcsMzY4NjcsMzY4NzksMzc5MTMsMzg1MTgsMzg5NTcsMzk0NzIsMzgzNjAsMjA2ODUsMjEyMDUsMjE1MTYsMjI1MzAsMjM1NjYsMjQ5OTksMjU3NTgsMjc5MzQsMzA2NDMsMzE0NjEsMzMwMTIsMzM3OTYsMzY5NDcsMzc1MDksMjM3NzYsNDAxOTksMjEzMTEsMjQ0NzEsMjQ0OTksMjgwNjAsMjkzMDUsMzA1NjMsMzExNjcsMzE3MTYsMjc2MDIsMjk0MjAsMzU1MDEsMjY2MjcsMjcyMzMsMjA5ODQsMzEzNjEsMjY5MzIsMjM2MjYsNDAxODIsMzM1MTUsMjM0OTMsMzcxOTMsMjg3MDIsMjIxMzYsMjM2NjMsMjQ3NzUsMjU5NTgsMjc3ODgsMzU5MzAsMzY5MjksMzg5MzEsMjE1ODUsMjYzMTEsMzczODksMjI4NTYsMzcwMjcsMjA4NjksMjAwNDUsMjA5NzAsMzQyMDEsMzU1OTgsMjg3NjAsMjU0NjYsMzc3MDcsMjY5NzgsMzkzNDgsMzIyNjAsMzAwNzEsMjEzMzUsMjY5NzYsMzY1NzUsMzg2MjcsMjc3NDEsMjAxMDgsMjM2MTIsMjQzMzYsMzY4NDEsMjEyNTAsMzYwNDksMzI5MDUsMzQ0MjUsMjQzMTksMjYwODUsMjAwODMsMjA4MzcsMjI5MTQsMjM2MTUsMzg4OTQsMjAyMTksMjI5MjIsMjQ1MjUsMzU0NjksMjg2NDEsMzExNTIsMzEwNzQsMjM1MjcsMzM5MDUsMjk0ODMsMjkxMDUsMjQxODAsMjQ1NjUsMjU0NjcsMjU3NTQsMjkxMjMsMzE4OTYsMjAwMzUsMjQzMTYsMjAwNDMsMjI0OTIsMjIxNzgsMjQ3NDUsMjg2MTEsMzIwMTMsMzMwMjEsMzMwNzUsMzMyMTUsMzY3ODYsMzUyMjMsMzQ0NjgsMjQwNTIsMjUyMjYsMjU3NzMsMzUyMDcsMjY0ODcsMjc4NzQsMjc5NjYsMjk3NTAsMzA3NzIsMjMxMTAsMzI2MjksMzM0NTMsMzkzNDAsMjA0NjcsMjQyNTksMjUzMDksMjU0OTAsMjU5NDMsMjY0NzksMzA0MDMsMjkyNjAsMzI5NzIsMzI5NTQsMzY2NDksMzcxOTcsMjA0OTMsMjI1MjEsMjMxODYsMjY3NTcsMjY5OTUsMjkwMjgsMjk0MzcsMzYwMjMsMjI3NzAsMzYwNjQsMzg1MDYsMzY4ODksMzQ2ODcsMzEyMDQsMzA2OTUsMzM4MzMsMjAyNzEsMjEwOTMsMjEzMzgsMjUyOTMsMjY1NzUsMjc4NTAsMzAzMzMsMzE2MzYsMzE4OTMsMzMzMzQsMzQxODAsMzY4NDMsMjYzMzMsMjg0NDgsMjkxOTAsMzIyODMsMzM3MDcsMzkzNjEsNDA2MTQsMjA5ODksMzE2NjUsMzA4MzQsMzE2NzIsMzI5MDMsMzE1NjAsMjczNjgsMjQxNjEsMzI5MDgsMzAwMzMsMzAwNDgsMjA4NDMsMzc0NzQsMjgzMDAsMzAzMzAsMzcyNzEsMzk2NTgsMjAyNDAsMzI2MjQsMjUyNDQsMzE1NjcsMzgzMDksNDAxNjksMjIxMzgsMjI2MTcsMzQ1MzIsMzg1ODgsMjAyNzYsMjEwMjgsMjEzMjIsMjE0NTMsMjE0NjcsMjQwNzAsMjU2NDQsMjYwMDEsMjY0OTUsMjc3MTAsMjc3MjYsMjkyNTYsMjkzNTksMjk2NzcsMzAwMzYsMzIzMjEsMzMzMjQsMzQyODEsMzYwMDksMzE2ODQsMzczMTgsMjkwMzMsMzg5MzAsMzkxNTEsMjU0MDUsMjYyMTcsMzAwNTgsMzA0MzYsMzA5MjgsMzQxMTUsMzQ1NDIsMjEyOTAsMjEzMjksMjE1NDIsMjI5MTUsMjQxOTksMjQ0NDQsMjQ3NTQsMjUxNjEsMjUyMDksMjUyNTksMjYwMDAsMjc2MDQsMjc4NTIsMzAxMzAsMzAzODIsMzA4NjUsMzExOTIsMzIyMDMsMzI2MzEsMzI5MzMsMzQ5ODcsMzU1MTMsMzYwMjcsMzY5OTEsMzg3NTAsMzkxMzEsMjcxNDcsMzE4MDAsMjA2MzMsMjM2MTQsMjQ0OTQsMjY1MDMsMjc2MDgsMjk3NDksMzA0NzMsMzI2NTQsNDA3NjMsMjY1NzAsMzEyNTUsMjEzMDUsMzAwOTEsMzk2NjEsMjQ0MjIsMzMxODEsMzM3NzcsMzI5MjAsMjQzODAsMjQ1MTcsMzAwNTAsMzE1NTgsMzY5MjQsMjY3MjcsMjMwMTksMjMxOTUsMzIwMTYsMzAzMzQsMzU2MjgsMjA0NjksMjQ0MjYsMjcxNjEsMjc3MDMsMjg0MTgsMjk5MjIsMzEwODAsMzQ5MjAsMzU0MTMsMzU5NjEsMjQyODcsMjU1NTEsMzAxNDksMzExODYsMzM0OTUsMzc2NzIsMzc2MTgsMzM5NDgsMzQ1NDEsMzk5ODEsMjE2OTcsMjQ0MjgsMjU5OTYsMjc5OTYsMjg2OTMsMzYwMDcsMzYwNTEsMzg5NzEsMjU5MzUsMjk5NDIsMTk5ODEsMjAxODQsMjI0OTYsMjI4MjcsMjMxNDIsMjM1MDAsMjA5MDQsMjQwNjcsMjQyMjAsMjQ1OTgsMjUyMDYsMjU5NzUsMjYwMjMsMjYyMjIsMjgwMTQsMjkyMzgsMzE1MjYsMzMxMDQsMzMxNzgsMzM0MzMsMzU2NzYsMzYwMDAsMzYwNzAsMzYyMTIsMzg0MjgsMzg0NjgsMjAzOTgsMjU3NzEsMjc0OTQsMzMzMTAsMzM4ODksMzQxNTQsMzcwOTYsMjM1NTMsMjY5NjMsMzkwODAsMzM5MTQsMzQxMzUsMjAyMzksMjExMDMsMjQ0ODksMjQxMzMsMjYzODEsMzExMTksMzMxNDUsMzUwNzksMzUyMDYsMjgxNDksMjQzNDMsMjUxNzMsMjc4MzIsMjAxNzUsMjkyODksMzk4MjYsMjA5OTgsMjE1NjMsMjIxMzIsMjI3MDcsMjQ5OTYsMjUxOTgsMjg5NTQsMjI4OTQsMzE4ODEsMzE5NjYsMzIwMjcsMzg2NDAsMjU5OTEsMzI4NjIsMTk5OTMsMjAzNDEsMjA4NTMsMjI1OTIsMjQxNjMsMjQxNzksMjQzMzAsMjY1NjQsMjAwMDYsMzQxMDksMzgyODEsMzg0OTEsMzE4NTksMzg5MTMsMjA3MzEsMjI3MjEsMzAyOTQsMzA4ODcsMjEwMjksMzA2MjksMzQwNjUsMzE2MjIsMjA1NTksMjI3OTMsMjkyNTUsMzE2ODcsMzIyMzIsMzY3OTQsMzY4MjAsMzY5NDEsMjA0MTUsMjExOTMsMjMwODEsMjQzMjEsMzg4MjksMjA0NDUsMzMzMDMsMzc2MTAsMjIyNzUsMjU0MjksMjc0OTcsMjk5OTUsMzUwMzYsMzY2MjgsMzEyOTgsMjEyMTUsMjI2NzUsMjQ5MTcsMjUwOTgsMjYyODYsMjc1OTcsMzE4MDcsMzM3NjksMjA1MTUsMjA0NzIsMjEyNTMsMjE1NzQsMjI1NzcsMjI4NTcsMjM0NTMsMjM3OTIsMjM3OTEsMjM4NDksMjQyMTQsMjUyNjUsMjU0NDcsMjU5MTgsMjYwNDEsMjYzNzksMjc4NjEsMjc4NzMsMjg5MjEsMzA3NzAsMzIyOTksMzI5OTAsMzM0NTksMzM4MDQsMzQwMjgsMzQ1NjIsMzUwOTAsMzUzNzAsMzU5MTQsMzcwMzAsMzc1ODYsMzkxNjUsNDAxNzksNDAzMDAsMjAwNDcsMjAxMjksMjA2MjEsMjEwNzgsMjIzNDYsMjI5NTIsMjQxMjUsMjQ1MzYsMjQ1MzcsMjUxNTEsMjYyOTIsMjYzOTUsMjY1NzYsMjY4MzQsMjA4ODIsMzIwMzMsMzI5MzgsMzMxOTIsMzU1ODQsMzU5ODAsMzYwMzEsMzc1MDIsMzg0NTAsMjE1MzYsMzg5NTYsMjEyNzEsMjA2OTMsMjEzNDAsMjI2OTYsMjU3NzgsMjY0MjAsMjkyODcsMzA1NjYsMzEzMDIsMzczNTAsMjExODcsMjc4MDksMjc1MjYsMjI1MjgsMjQxNDAsMjI4NjgsMjY0MTIsMzI3NjMsMjA5NjEsMzA0MDYsMjU3MDUsMzA5NTIsMzk3NjQsNDA2MzUsMjI0NzUsMjI5NjksMjYxNTEsMjY1MjIsMjc1OTgsMjE3MzcsMjcwOTcsMjQxNDksMzMxODAsMjY1MTcsMzk4NTAsMjY2MjIsNDAwMTgsMjY3MTcsMjAxMzQsMjA0NTEsMjE0NDgsMjUyNzMsMjY0MTEsMjc4MTksMzY4MDQsMjAzOTcsMzIzNjUsNDA2MzksMTk5NzUsMjQ5MzAsMjgyODgsMjg0NTksMzQwNjcsMjE2MTksMjY0MTAsMzk3NDksMjQwNTEsMzE2MzcsMjM3MjQsMjM0OTQsMzQ1ODgsMjgyMzQsMzQwMDEsMzEyNTIsMzMwMzIsMjI5MzcsMzE4ODUsMjc2NjUsMzA0OTYsMjEyMDksMjI4MTgsMjg5NjEsMjkyNzksMzA2ODMsMzg2OTUsNDAyODksMjY4OTEsMjMxNjcsMjMwNjQsMjA5MDEsMjE1MTcsMjE2MjksMjYxMjYsMzA0MzEsMzY4NTUsMzc1MjgsNDAxODAsMjMwMTgsMjkyNzcsMjgzNTcsMjA4MTMsMjY4MjUsMzIxOTEsMzIyMzYsMzg3NTQsNDA2MzQsMjU3MjAsMjcxNjksMzM1MzgsMjI5MTYsMjMzOTEsMjc2MTEsMjk0NjcsMzA0NTAsMzIxNzgsMzI3OTEsMzM5NDUsMjA3ODYsMjY0MDgsNDA2NjUsMzA0NDYsMjY0NjYsMjEyNDcsMzkxNzMsMjM1ODgsMjUxNDcsMzE4NzAsMzYwMTYsMjE4MzksMjQ3NTgsMzIwMTEsMzgyNzIsMjEyNDksMjAwNjMsMjA5MTgsMjI4MTIsMjkyNDIsMzI4MjIsMzczMjYsMjQzNTcsMzA2OTAsMjEzODAsMjQ0NDEsMzIwMDQsMzQyMjAsMzUzNzksMzY0OTMsMzg3NDIsMjY2MTEsMzQyMjIsMzc5NzEsMjQ4NDEsMjQ4NDAsMjc4MzMsMzAyOTAsMzU1NjUsMzY2NjQsMjE4MDcsMjAzMDUsMjA3NzgsMjExOTEsMjE0NTEsMjM0NjEsMjQxODksMjQ3MzYsMjQ5NjIsMjU1NTgsMjYzNzcsMjY1ODYsMjgyNjMsMjgwNDQsMjk0OTQsMjk0OTUsMzAwMDEsMzEwNTYsMzUwMjksMzU0ODAsMzY5MzgsMzcwMDksMzcxMDksMzg1OTYsMzQ3MDEsMjI4MDUsMjAxMDQsMjAzMTMsMTk5ODIsMzU0NjUsMzY2NzEsMzg5MjgsMjA2NTMsMjQxODgsMjI5MzQsMjM0ODEsMjQyNDgsMjU1NjIsMjU1OTQsMjU3OTMsMjYzMzIsMjY5NTQsMjcwOTYsMjc5MTUsMjgzNDIsMjkwNzYsMjk5OTIsMzE0MDcsMzI2NTAsMzI3NjgsMzM4NjUsMzM5OTMsMzUyMDEsMzU2MTcsMzYzNjIsMzY5NjUsMzg1MjUsMzkxNzgsMjQ5NTgsMjUyMzMsMjc0NDIsMjc3NzksMjgwMjAsMzI3MTYsMzI3NjQsMjgwOTYsMzI2NDUsMzQ3NDYsMzUwNjQsMjY0NjksMzM3MTMsMzg5NzIsMzg2NDcsMjc5MzEsMzIwOTcsMzM4NTMsMzcyMjYsMjAwODEsMjEzNjUsMjM4ODgsMjczOTYsMjg2NTEsMzQyNTMsMzQzNDksMzUyMzksMjEwMzMsMjE1MTksMjM2NTMsMjY0NDYsMjY3OTIsMjk3MDIsMjk4MjcsMzAxNzgsMzUwMjMsMzUwNDEsMzczMjQsMzg2MjYsMzg1MjAsMjQ0NTksMjk1NzUsMzE0MzUsMzM4NzAsMjU1MDQsMzAwNTMsMjExMjksMjc5NjksMjgzMTYsMjk3MDUsMzAwNDEsMzA4MjcsMzE4OTAsMzg1MzQsMzE0NTIsNDA4NDUsMjA0MDYsMjQ5NDIsMjYwNTMsMzQzOTYsMjAxMDIsMjAxNDIsMjA2OTgsMjAwMDEsMjA5NDAsMjM1MzQsMjYwMDksMjY3NTMsMjgwOTIsMjk0NzEsMzAyNzQsMzA2MzcsMzEyNjAsMzE5NzUsMzMzOTEsMzU1MzgsMzY5ODgsMzczMjcsMzg1MTcsMzg5MzYsMjExNDcsMzIyMDksMjA1MjMsMjE0MDAsMjY1MTksMjgxMDcsMjkxMzYsMjk3NDcsMzMyNTYsMzY2NTAsMzg1NjMsNDAwMjMsNDA2MDcsMjk3OTIsMjI1OTMsMjgwNTcsMzIwNDcsMzkwMDYsMjAxOTYsMjAyNzgsMjAzNjMsMjA5MTksMjExNjksMjM5OTQsMjQ2MDQsMjk2MTgsMzEwMzYsMzM0OTEsMzc0MjgsMzg1ODMsMzg2NDYsMzg2NjYsNDA1OTksNDA4MDIsMjYyNzgsMjc1MDgsMjEwMTUsMjExNTUsMjg4NzIsMzUwMTAsMjQyNjUsMjQ2NTEsMjQ5NzYsMjg0NTEsMjkwMDEsMzE4MDYsMzIyNDQsMzI4NzksMzQwMzAsMzY4OTksMzc2NzYsMjE1NzAsMzk3OTEsMjczNDcsMjg4MDksMzYwMzQsMzYzMzUsMzg3MDYsMjExNzIsMjMxMDUsMjQyNjYsMjQzMjQsMjYzOTEsMjcwMDQsMjcwMjgsMjgwMTAsMjg0MzEsMjkyODIsMjk0MzYsMzE3MjUsMzI3NjksMzI4OTQsMzQ2MzUsMzcwNzAsMjA4NDUsNDA1OTUsMzExMDgsMzI5MDcsMzc2ODIsMzU1NDIsMjA1MjUsMjE2NDQsMzU0NDEsMjc0OTgsMzYwMzYsMzMwMzEsMjQ3ODUsMjY1MjgsNDA0MzQsMjAxMjEsMjAxMjAsMzk5NTIsMzU0MzUsMzQyNDEsMzQxNTIsMjY4ODAsMjgyODYsMzA4NzEsMzMxMDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNDMzMiwxOTk4NCwxOTk4OSwyMDAxMCwyMDAxNywyMDAyMiwyMDAyOCwyMDAzMSwyMDAzNCwyMDA1NCwyMDA1NiwyMDA5OCwyMDEwMSwzNTk0NywyMDEwNiwzMzI5OCwyNDMzMywyMDExMCwyMDEyNiwyMDEyNywyMDEyOCwyMDEzMCwyMDE0NCwyMDE0NywyMDE1MCwyMDE3NCwyMDE3MywyMDE2NCwyMDE2NiwyMDE2MiwyMDE4MywyMDE5MCwyMDIwNSwyMDE5MSwyMDIxNSwyMDIzMywyMDMxNCwyMDI3MiwyMDMxNSwyMDMxNywyMDMxMSwyMDI5NSwyMDM0MiwyMDM2MCwyMDM2NywyMDM3NiwyMDM0NywyMDMyOSwyMDMzNiwyMDM2OSwyMDMzNSwyMDM1OCwyMDM3NCwyMDc2MCwyMDQzNiwyMDQ0NywyMDQzMCwyMDQ0MCwyMDQ0MywyMDQzMywyMDQ0MiwyMDQzMiwyMDQ1MiwyMDQ1MywyMDUwNiwyMDUyMCwyMDUwMCwyMDUyMiwyMDUxNywyMDQ4NSwyMDI1MiwyMDQ3MCwyMDUxMywyMDUyMSwyMDUyNCwyMDQ3OCwyMDQ2MywyMDQ5NywyMDQ4NiwyMDU0NywyMDU1MSwyNjM3MSwyMDU2NSwyMDU2MCwyMDU1MiwyMDU3MCwyMDU2NiwyMDU4OCwyMDYwMCwyMDYwOCwyMDYzNCwyMDYxMywyMDY2MCwyMDY1OCwyMDY4MSwyMDY4MiwyMDY1OSwyMDY3NCwyMDY5NCwyMDcwMiwyMDcwOSwyMDcxNywyMDcwNywyMDcxOCwyMDcyOSwyMDcyNSwyMDc0NSwyMDczNywyMDczOCwyMDc1OCwyMDc1NywyMDc1NiwyMDc2MiwyMDc2OSwyMDc5NCwyMDc5MSwyMDc5NiwyMDc5NSwyMDc5OSwyMDgwMCwyMDgxOCwyMDgxMiwyMDgyMCwyMDgzNCwzMTQ4MCwyMDg0MSwyMDg0MiwyMDg0NiwyMDg2NCwyMDg2NiwyMjIzMiwyMDg3NiwyMDg3MywyMDg3OSwyMDg4MSwyMDg4MywyMDg4NSwyMDg4NiwyMDkwMCwyMDkwMiwyMDg5OCwyMDkwNSwyMDkwNiwyMDkwNywyMDkxNSwyMDkxMywyMDkxNCwyMDkxMiwyMDkxNywyMDkyNSwyMDkzMywyMDkzNywyMDk1NSwyMDk2MCwzNDM4OSwyMDk2OSwyMDk3MywyMDk3NiwyMDk4MSwyMDk5MCwyMDk5NiwyMTAwMywyMTAxMiwyMTAwNiwyMTAzMSwyMTAzNCwyMTAzOCwyMTA0MywyMTA0OSwyMTA3MSwyMTA2MCwyMTA2NywyMTA2OCwyMTA4NiwyMTA3NiwyMTA5OCwyMTEwOCwyMTA5NywyMTEwNywyMTExOSwyMTExNywyMTEzMywyMTE0MCwyMTEzOCwyMTEwNSwyMTEyOCwyMTEzNywzNjc3NiwzNjc3NSwyMTE2NCwyMTE2NSwyMTE4MCwyMTE3MywyMTE4NSwyMTE5NywyMTIwNywyMTIxNCwyMTIxOSwyMTIyMiwzOTE0OSwyMTIxNiwyMTIzNSwyMTIzNywyMTI0MCwyMTI0MSwyMTI1NCwyMTI1NiwzMDAwOCwyMTI2MSwyMTI2NCwyMTI2MywyMTI2OSwyMTI3NCwyMTI4MywyMTI5NSwyMTI5NywyMTI5OSwyMTMwNCwyMTMxMiwyMTMxOCwyMTMxNywxOTk5MSwyMTMyMSwyMTMyNSwyMDk1MCwyMTM0MiwyMTM1MywyMTM1OCwyMjgwOCwyMTM3MSwyMTM2NywyMTM3OCwyMTM5OCwyMTQwOCwyMTQxNCwyMTQxMywyMTQyMiwyMTQyNCwyMTQzMCwyMTQ0MywzMTc2MiwzODYxNywyMTQ3MSwyNjM2NCwyOTE2NiwyMTQ4NiwyMTQ4MCwyMTQ4NSwyMTQ5OCwyMTUwNSwyMTU2NSwyMTU2OCwyMTU0OCwyMTU0OSwyMTU2NCwyMTU1MCwyMTU1OCwyMTU0NSwyMTUzMywyMTU4MiwyMTY0NywyMTYyMSwyMTY0NiwyMTU5OSwyMTYxNywyMTYyMywyMTYxNiwyMTY1MCwyMTYyNywyMTYzMiwyMTYyMiwyMTYzNiwyMTY0OCwyMTYzOCwyMTcwMywyMTY2NiwyMTY4OCwyMTY2OSwyMTY3NiwyMTcwMCwyMTcwNCwyMTY3MiwyMTY3NSwyMTY5OCwyMTY2OCwyMTY5NCwyMTY5MiwyMTcyMCwyMTczMywyMTczNCwyMTc3NSwyMTc4MCwyMTc1NywyMTc0MiwyMTc0MSwyMTc1NCwyMTczMCwyMTgxNywyMTgyNCwyMTg1OSwyMTgzNiwyMTgwNiwyMTg1MiwyMTgyOSwyMTg0NiwyMTg0NywyMTgxNiwyMTgxMSwyMTg1MywyMTkxMywyMTg4OCwyMTY3OSwyMTg5OCwyMTkxOSwyMTg4MywyMTg4NiwyMTkxMiwyMTkxOCwyMTkzNCwyMTg4NCwyMTg5MSwyMTkyOSwyMTg5NSwyMTkyOCwyMTk3OCwyMTk1NywyMTk4MywyMTk1NiwyMTk4MCwyMTk4OCwyMTk3MiwyMjAzNiwyMjAwNywyMjAzOCwyMjAxNCwyMjAxMywyMjA0MywyMjAwOSwyMjA5NCwyMjA5NiwyOTE1MSwyMjA2OCwyMjA3MCwyMjA2NiwyMjA3MiwyMjEyMywyMjExNiwyMjA2MywyMjEyNCwyMjEyMiwyMjE1MCwyMjE0NCwyMjE1NCwyMjE3NiwyMjE2NCwyMjE1OSwyMjE4MSwyMjE5MCwyMjE5OCwyMjE5NiwyMjIxMCwyMjIwNCwyMjIwOSwyMjIxMSwyMjIwOCwyMjIxNiwyMjIyMiwyMjIyNSwyMjIyNywyMjIzMSwyMjI1NCwyMjI2NSwyMjI3MiwyMjI3MSwyMjI3NiwyMjI4MSwyMjI4MCwyMjI4MywyMjI4NSwyMjI5MSwyMjI5NiwyMjI5NCwyMTk1OSwyMjMwMCwyMjMxMCwyMjMyNywyMjMyOCwyMjM1MCwyMjMzMSwyMjMzNiwyMjM1MSwyMjM3NywyMjQ2NCwyMjQwOCwyMjM2OSwyMjM5OSwyMjQwOSwyMjQxOSwyMjQzMiwyMjQ1MSwyMjQzNiwyMjQ0MiwyMjQ0OCwyMjQ2NywyMjQ3MCwyMjQ4NCwyMjQ4MiwyMjQ4MywyMjUzOCwyMjQ4NiwyMjQ5OSwyMjUzOSwyMjU1MywyMjU1NywyMjY0MiwyMjU2MSwyMjYyNiwyMjYwMywyMjY0MCwyNzU4NCwyMjYxMCwyMjU4OSwyMjY0OSwyMjY2MSwyMjcxMywyMjY4NywyMjY5OSwyMjcxNCwyMjc1MCwyMjcxNSwyMjcxMiwyMjcwMiwyMjcyNSwyMjczOSwyMjczNywyMjc0MywyMjc0NSwyMjc0NCwyMjc1NywyMjc0OCwyMjc1NiwyMjc1MSwyMjc2NywyMjc3OCwyMjc3NywyMjc3OSwyMjc4MCwyMjc4MSwyMjc4NiwyMjc5NCwyMjgwMCwyMjgxMSwyNjc5MCwyMjgyMSwyMjgyOCwyMjgyOSwyMjgzNCwyMjg0MCwyMjg0NiwzMTQ0MiwyMjg2OSwyMjg2NCwyMjg2MiwyMjg3NCwyMjg3MiwyMjg4MiwyMjg4MCwyMjg4NywyMjg5MiwyMjg4OSwyMjkwNCwyMjkxMywyMjk0MSwyMDMxOCwyMDM5NSwyMjk0NywyMjk2MiwyMjk4MiwyMzAxNiwyMzAwNCwyMjkyNSwyMzAwMSwyMzAwMiwyMzA3NywyMzA3MSwyMzA1NywyMzA2OCwyMzA0OSwyMzA2NiwyMzEwNCwyMzE0OCwyMzExMywyMzA5MywyMzA5NCwyMzEzOCwyMzE0NiwyMzE5NCwyMzIyOCwyMzIzMCwyMzI0MywyMzIzNCwyMzIyOSwyMzI2NywyMzI1NSwyMzI3MCwyMzI3MywyMzI1NCwyMzI5MCwyMzI5MSwyMzMwOCwyMzMwNywyMzMxOCwyMzM0NiwyMzI0OCwyMzMzOCwyMzM1MCwyMzM1OCwyMzM2MywyMzM2NSwyMzM2MCwyMzM3NywyMzM4MSwyMzM4NiwyMzM4NywyMzM5NywyMzQwMSwyMzQwOCwyMzQxMSwyMzQxMywyMzQxNiwyNTk5MiwyMzQxOCwyMzQyNCwyMzQyNywyMzQ2MiwyMzQ4MCwyMzQ5MSwyMzQ5NSwyMzQ5NywyMzUwOCwyMzUwNCwyMzUyNCwyMzUyNiwyMzUyMiwyMzUxOCwyMzUyNSwyMzUzMSwyMzUzNiwyMzU0MiwyMzUzOSwyMzU1NywyMzU1OSwyMzU2MCwyMzU2NSwyMzU3MSwyMzU4NCwyMzU4NiwyMzU5MiwyMzYwOCwyMzYwOSwyMzYxNywyMzYyMiwyMzYzMCwyMzYzNSwyMzYzMiwyMzYzMSwyMzQwOSwyMzY2MCwyMzY2MiwyMDA2NiwyMzY3MCwyMzY3MywyMzY5MiwyMzY5NywyMzcwMCwyMjkzOSwyMzcyMywyMzczOSwyMzczNCwyMzc0MCwyMzczNSwyMzc0OSwyMzc0MiwyMzc1MSwyMzc2OSwyMzc4NSwyMzgwNSwyMzgwMiwyMzc4OSwyMzk0OCwyMzc4NiwyMzgxOSwyMzgyOSwyMzgzMSwyMzkwMCwyMzgzOSwyMzgzNSwyMzgyNSwyMzgyOCwyMzg0MiwyMzgzNCwyMzgzMywyMzgzMiwyMzg4NCwyMzg5MCwyMzg4NiwyMzg4MywyMzkxNiwyMzkyMywyMzkyNiwyMzk0MywyMzk0MCwyMzkzOCwyMzk3MCwyMzk2NSwyMzk4MCwyMzk4MiwyMzk5NywyMzk1MiwyMzk5MSwyMzk5NiwyNDAwOSwyNDAxMywyNDAxOSwyNDAxOCwyNDAyMiwyNDAyNywyNDA0MywyNDA1MCwyNDA1MywyNDA3NSwyNDA5MCwyNDA4OSwyNDA4MSwyNDA5MSwyNDExOCwyNDExOSwyNDEzMiwyNDEzMSwyNDEyOCwyNDE0MiwyNDE1MSwyNDE0OCwyNDE1OSwyNDE2MiwyNDE2NCwyNDEzNSwyNDE4MSwyNDE4MiwyNDE4Niw0MDYzNiwyNDE5MSwyNDIyNCwyNDI1NywyNDI1OCwyNDI2NCwyNDI3MiwyNDI3MSwyNDI3OCwyNDI5MSwyNDI4NSwyNDI4MiwyNDI4MywyNDI5MCwyNDI4OSwyNDI5NiwyNDI5NywyNDMwMCwyNDMwNSwyNDMwNywyNDMwNCwyNDMwOCwyNDMxMiwyNDMxOCwyNDMyMywyNDMyOSwyNDQxMywyNDQxMiwyNDMzMSwyNDMzNywyNDM0MiwyNDM2MSwyNDM2NSwyNDM3NiwyNDM4NSwyNDM5MiwyNDM5NiwyNDM5OCwyNDM2NywyNDQwMSwyNDQwNiwyNDQwNywyNDQwOSwyNDQxNywyNDQyOSwyNDQzNSwyNDQzOSwyNDQ1MSwyNDQ1MCwyNDQ0NywyNDQ1OCwyNDQ1NiwyNDQ2NSwyNDQ1NSwyNDQ3OCwyNDQ3MywyNDQ3MiwyNDQ4MCwyNDQ4OCwyNDQ5MywyNDUwOCwyNDUzNCwyNDU3MSwyNDU0OCwyNDU2OCwyNDU2MSwyNDU0MSwyNDc1NSwyNDU3NSwyNDYwOSwyNDY3MiwyNDYwMSwyNDU5MiwyNDYxNywyNDU5MCwyNDYyNSwyNDYwMywyNDU5NywyNDYxOSwyNDYxNCwyNDU5MSwyNDYzNCwyNDY2NiwyNDY0MSwyNDY4MiwyNDY5NSwyNDY3MSwyNDY1MCwyNDY0NiwyNDY1MywyNDY3NSwyNDY0MywyNDY3NiwyNDY0MiwyNDY4NCwyNDY4MywyNDY2NSwyNDcwNSwyNDcxNywyNDgwNywyNDcwNywyNDczMCwyNDcwOCwyNDczMSwyNDcyNiwyNDcyNywyNDcyMiwyNDc0MywyNDcxNSwyNDgwMSwyNDc2MCwyNDgwMCwyNDc4NywyNDc1NiwyNDU2MCwyNDc2NSwyNDc3NCwyNDc1NywyNDc5MiwyNDkwOSwyNDg1MywyNDgzOCwyNDgyMiwyNDgyMywyNDgzMiwyNDgyMCwyNDgyNiwyNDgzNSwyNDg2NSwyNDgyNywyNDgxNywyNDg0NSwyNDg0NiwyNDkwMywyNDg5NCwyNDg3MiwyNDg3MSwyNDkwNiwyNDg5NSwyNDg5MiwyNDg3NiwyNDg4NCwyNDg5MywyNDg5OCwyNDkwMCwyNDk0NywyNDk1MSwyNDkyMCwyNDkyMSwyNDkyMiwyNDkzOSwyNDk0OCwyNDk0MywyNDkzMywyNDk0NSwyNDkyNywyNDkyNSwyNDkxNSwyNDk0OSwyNDk4NSwyNDk4MiwyNDk2NywyNTAwNCwyNDk4MCwyNDk4NiwyNDk3MCwyNDk3NywyNTAwMywyNTAwNiwyNTAzNiwyNTAzNCwyNTAzMywyNTA3OSwyNTAzMiwyNTAyNywyNTAzMCwyNTAxOCwyNTAzNSwzMjYzMywyNTAzNywyNTA2MiwyNTA1OSwyNTA3OCwyNTA4MiwyNTA3NiwyNTA4NywyNTA4NSwyNTA4NCwyNTA4NiwyNTA4OCwyNTA5NiwyNTA5NywyNTEwMSwyNTEwMCwyNTEwOCwyNTExNSwyNTExOCwyNTEyMSwyNTEzMCwyNTEzNCwyNTEzNiwyNTEzOCwyNTEzOSwyNTE1MywyNTE2NiwyNTE4MiwyNTE4NywyNTE3OSwyNTE4NCwyNTE5MiwyNTIxMiwyNTIxOCwyNTIyNSwyNTIxNCwyNTIzNCwyNTIzNSwyNTIzOCwyNTMwMCwyNTIxOSwyNTIzNiwyNTMwMywyNTI5NywyNTI3NSwyNTI5NSwyNTM0MywyNTI4NiwyNTgxMiwyNTI4OCwyNTMwOCwyNTI5MiwyNTI5MCwyNTI4MiwyNTI4NywyNTI0MywyNTI4OSwyNTM1NiwyNTMyNiwyNTMyOSwyNTM4MywyNTM0NiwyNTM1MiwyNTMyNywyNTMzMywyNTQyNCwyNTQwNiwyNTQyMSwyNTYyOCwyNTQyMywyNTQ5NCwyNTQ4NiwyNTQ3MiwyNTUxNSwyNTQ2MiwyNTUwNywyNTQ4NywyNTQ4MSwyNTUwMywyNTUyNSwyNTQ1MSwyNTQ0OSwyNTUzNCwyNTU3NywyNTUzNiwyNTU0MiwyNTU3MSwyNTU0NSwyNTU1NCwyNTU5MCwyNTU0MCwyNTYyMiwyNTY1MiwyNTYwNiwyNTYxOSwyNTYzOCwyNTY1NCwyNTg4NSwyNTYyMywyNTY0MCwyNTYxNSwyNTcwMywyNTcxMSwyNTcxOCwyNTY3OCwyNTg5OCwyNTc0OSwyNTc0NywyNTc2NSwyNTc2OSwyNTczNiwyNTc4OCwyNTgxOCwyNTgxMCwyNTc5NywyNTc5OSwyNTc4NywyNTgxNiwyNTc5NCwyNTg0MSwyNTgzMSwzMzI4OSwyNTgyNCwyNTgyNSwyNTI2MCwyNTgyNywyNTgzOSwyNTkwMCwyNTg0NiwyNTg0NCwyNTg0MiwyNTg1MCwyNTg1NiwyNTg1MywyNTg4MCwyNTg4NCwyNTg2MSwyNTg5MiwyNTg5MSwyNTg5OSwyNTkwOCwyNTkwOSwyNTkxMSwyNTkxMCwyNTkxMiwzMDAyNywyNTkyOCwyNTk0MiwyNTk0MSwyNTkzMywyNTk0NCwyNTk1MCwyNTk0OSwyNTk3MCwyNTk3NiwyNTk4NiwyNTk4NywzNTcyMiwyNjAxMSwyNjAxNSwyNjAyNywyNjAzOSwyNjA1MSwyNjA1NCwyNjA0OSwyNjA1MiwyNjA2MCwyNjA2NiwyNjA3NSwyNjA3MywyNjA4MCwyNjA4MSwyNjA5NywyNjQ4MiwyNjEyMiwyNjExNSwyNjEwNywyNjQ4MywyNjE2NSwyNjE2NiwyNjE2NCwyNjE0MCwyNjE5MSwyNjE4MCwyNjE4NSwyNjE3NywyNjIwNiwyNjIwNSwyNjIxMiwyNjIxNSwyNjIxNiwyNjIwNywyNjIxMCwyNjIyNCwyNjI0MywyNjI0OCwyNjI1NCwyNjI0OSwyNjI0NCwyNjI2NCwyNjI2OSwyNjMwNSwyNjI5NywyNjMxMywyNjMwMiwyNjMwMCwyNjMwOCwyNjI5NiwyNjMyNiwyNjMzMCwyNjMzNiwyNjE3NSwyNjM0MiwyNjM0NSwyNjM1MiwyNjM1NywyNjM1OSwyNjM4MywyNjM5MCwyNjM5OCwyNjQwNiwyNjQwNywzODcxMiwyNjQxNCwyNjQzMSwyNjQyMiwyNjQzMywyNjQyNCwyNjQyMywyNjQzOCwyNjQ2MiwyNjQ2NCwyNjQ1NywyNjQ2NywyNjQ2OCwyNjUwNSwyNjQ4MCwyNjUzNywyNjQ5MiwyNjQ3NCwyNjUwOCwyNjUwNywyNjUzNCwyNjUyOSwyNjUwMSwyNjU1MSwyNjYwNywyNjU0OCwyNjYwNCwyNjU0NywyNjYwMSwyNjU1MiwyNjU5NiwyNjU5MCwyNjU4OSwyNjU5NCwyNjYwNiwyNjU1MywyNjU3NCwyNjU2NiwyNjU5OSwyNzI5MiwyNjY1NCwyNjY5NCwyNjY2NSwyNjY4OCwyNjcwMSwyNjY3NCwyNjcwMiwyNjgwMywyNjY2NywyNjcxMywyNjcyMywyNjc0MywyNjc1MSwyNjc4MywyNjc2NywyNjc5NywyNjc3MiwyNjc4MSwyNjc3OSwyNjc1NSwyNzMxMCwyNjgwOSwyNjc0MCwyNjgwNSwyNjc4NCwyNjgxMCwyNjg5NSwyNjc2NSwyNjc1MCwyNjg4MSwyNjgyNiwyNjg4OCwyNjg0MCwyNjkxNCwyNjkxOCwyNjg0OSwyNjg5MiwyNjgyOSwyNjgzNiwyNjg1NSwyNjgzNywyNjkzNCwyNjg5OCwyNjg4NCwyNjgzOSwyNjg1MSwyNjkxNywyNjg3MywyNjg0OCwyNjg2MywyNjkyMCwyNjkyMiwyNjkwNiwyNjkxNSwyNjkxMywyNjgyMiwyNzAwMSwyNjk5OSwyNjk3MiwyNzAwMCwyNjk4NywyNjk2NCwyNzAwNiwyNjk5MCwyNjkzNywyNjk5NiwyNjk0MSwyNjk2OSwyNjkyOCwyNjk3NywyNjk3NCwyNjk3MywyNzAwOSwyNjk4NiwyNzA1OCwyNzA1NCwyNzA4OCwyNzA3MSwyNzA3MywyNzA5MSwyNzA3MCwyNzA4NiwyMzUyOCwyNzA4MiwyNzEwMSwyNzA2NywyNzA3NSwyNzA0NywyNzE4MiwyNzAyNSwyNzA0MCwyNzAzNiwyNzAyOSwyNzA2MCwyNzEwMiwyNzExMiwyNzEzOCwyNzE2MywyNzEzNSwyNzQwMiwyNzEyOSwyNzEyMiwyNzExMSwyNzE0MSwyNzA1NywyNzE2NiwyNzExNywyNzE1NiwyNzExNSwyNzE0NiwyNzE1NCwyNzMyOSwyNzE3MSwyNzE1NSwyNzIwNCwyNzE0OCwyNzI1MCwyNzE5MCwyNzI1NiwyNzIwNywyNzIzNCwyNzIyNSwyNzIzOCwyNzIwOCwyNzE5MiwyNzE3MCwyNzI4MCwyNzI3NywyNzI5NiwyNzI2OCwyNzI5OCwyNzI5OSwyNzI4NywzNDMyNywyNzMyMywyNzMzMSwyNzMzMCwyNzMyMCwyNzMxNSwyNzMwOCwyNzM1OCwyNzM0NSwyNzM1OSwyNzMwNiwyNzM1NCwyNzM3MCwyNzM4NywyNzM5NywzNDMyNiwyNzM4NiwyNzQxMCwyNzQxNCwzOTcyOSwyNzQyMywyNzQ0OCwyNzQ0NywzMDQyOCwyNzQ0OSwzOTE1MCwyNzQ2MywyNzQ1OSwyNzQ2NSwyNzQ3MiwyNzQ4MSwyNzQ3NiwyNzQ4MywyNzQ4NywyNzQ4OSwyNzUxMiwyNzUxMywyNzUxOSwyNzUyMCwyNzUyNCwyNzUyMywyNzUzMywyNzU0NCwyNzU0MSwyNzU1MCwyNzU1NiwyNzU2MiwyNzU2MywyNzU2NywyNzU3MCwyNzU2OSwyNzU3MSwyNzU3NSwyNzU4MCwyNzU5MCwyNzU5NSwyNzYwMywyNzYxNSwyNzYyOCwyNzYyNywyNzYzNSwyNzYzMSw0MDYzOCwyNzY1NiwyNzY2NywyNzY2OCwyNzY3NSwyNzY4NCwyNzY4MywyNzc0MiwyNzczMywyNzc0NiwyNzc1NCwyNzc3OCwyNzc4OSwyNzgwMiwyNzc3NywyNzgwMywyNzc3NCwyNzc1MiwyNzc2MywyNzc5NCwyNzc5MiwyNzg0NCwyNzg4OSwyNzg1OSwyNzgzNywyNzg2MywyNzg0NSwyNzg2OSwyNzgyMiwyNzgyNSwyNzgzOCwyNzgzNCwyNzg2NywyNzg4NywyNzg2NSwyNzg4MiwyNzkzNSwzNDg5MywyNzk1OCwyNzk0NywyNzk2NSwyNzk2MCwyNzkyOSwyNzk1NywyNzk1NSwyNzkyMiwyNzkxNiwyODAwMywyODA1MSwyODAwNCwyNzk5NCwyODAyNSwyNzk5MywyODA0NiwyODA1MywyODY0NCwyODAzNywyODE1MywyODE4MSwyODE3MCwyODA4NSwyODEwMywyODEzNCwyODA4OCwyODEwMiwyODE0MCwyODEyNiwyODEwOCwyODEzNiwyODExNCwyODEwMSwyODE1NCwyODEyMSwyODEzMiwyODExNywyODEzOCwyODE0MiwyODIwNSwyODI3MCwyODIwNiwyODE4NSwyODI3NCwyODI1NSwyODIyMiwyODE5NSwyODI2NywyODIwMywyODI3OCwyODIzNywyODE5MSwyODIyNywyODIxOCwyODIzOCwyODE5NiwyODQxNSwyODE4OSwyODIxNiwyODI5MCwyODMzMCwyODMxMiwyODM2MSwyODM0MywyODM3MSwyODM0OSwyODMzNSwyODM1NiwyODMzOCwyODM3MiwyODM3MywyODMwMywyODMyNSwyODM1NCwyODMxOSwyODQ4MSwyODQzMywyODc0OCwyODM5NiwyODQwOCwyODQxNCwyODQ3OSwyODQwMiwyODQ2NSwyODM5OSwyODQ2NiwyODM2NCwyODQ3OCwyODQzNSwyODQwNywyODU1MCwyODUzOCwyODUzNiwyODU0NSwyODU0NCwyODUyNywyODUwNywyODY1OSwyODUyNSwyODU0NiwyODU0MCwyODUwNCwyODU1OCwyODU2MSwyODYxMCwyODUxOCwyODU5NSwyODU3OSwyODU3NywyODU4MCwyODYwMSwyODYxNCwyODU4NiwyODYzOSwyODYyOSwyODY1MiwyODYyOCwyODYzMiwyODY1NywyODY1NCwyODYzNSwyODY4MSwyODY4MywyODY2NiwyODY4OSwyODY3MywyODY4NywyODY3MCwyODY5OSwyODY5OCwyODUzMiwyODcwMSwyODY5NiwyODcwMywyODcyMCwyODczNCwyODcyMiwyODc1MywyODc3MSwyODgyNSwyODgxOCwyODg0NywyODkxMywyODg0NCwyODg1NiwyODg1MSwyODg0NiwyODg5NSwyODg3NSwyODg5MywyODg4OSwyODkzNywyODkyNSwyODk1NiwyODk1MywyOTAyOSwyOTAxMywyOTA2NCwyOTAzMCwyOTAyNiwyOTAwNCwyOTAxNCwyOTAzNiwyOTA3MSwyOTE3OSwyOTA2MCwyOTA3NywyOTA5NiwyOTEwMCwyOTE0MywyOTExMywyOTExOCwyOTEzOCwyOTEyOSwyOTE0MCwyOTEzNCwyOTE1MiwyOTE2NCwyOTE1OSwyOTE3MywyOTE4MCwyOTE3NywyOTE4MywyOTE5NywyOTIwMCwyOTIxMSwyOTIyNCwyOTIyOSwyOTIyOCwyOTIzMiwyOTIzNCwyOTI0MywyOTI0NCwyOTI0NywyOTI0OCwyOTI1NCwyOTI1OSwyOTI3MiwyOTMwMCwyOTMxMCwyOTMxNCwyOTMxMywyOTMxOSwyOTMzMCwyOTMzNCwyOTM0NiwyOTM1MSwyOTM2OSwyOTM2MiwyOTM3OSwyOTM4MiwyOTM4MCwyOTM5MCwyOTM5NCwyOTQxMCwyOTQwOCwyOTQwOSwyOTQzMywyOTQzMSwyMDQ5NSwyOTQ2MywyOTQ1MCwyOTQ2OCwyOTQ2MiwyOTQ2OSwyOTQ5MiwyOTQ4NywyOTQ4MSwyOTQ3NywyOTUwMiwyOTUxOCwyOTUxOSw0MDY2NCwyOTUyNywyOTU0NiwyOTU0NCwyOTU1MiwyOTU2MCwyOTU1NywyOTU2MywyOTU2MiwyOTY0MCwyOTYxOSwyOTY0NiwyOTYyNywyOTYzMiwyOTY2OSwyOTY3OCwyOTY2MiwyOTg1OCwyOTcwMSwyOTgwNywyOTczMywyOTY4OCwyOTc0NiwyOTc1NCwyOTc4MSwyOTc1OSwyOTc5MSwyOTc4NSwyOTc2MSwyOTc4OCwyOTgwMSwyOTgwOCwyOTc5NSwyOTgwMiwyOTgxNCwyOTgyMiwyOTgzNSwyOTg1NCwyOTg2MywyOTg5OCwyOTkwMywyOTkwOCwyOTY4MSwyOTkyMCwyOTkyMywyOTkyNywyOTkyOSwyOTkzNCwyOTkzOCwyOTkzNiwyOTkzNywyOTk0NCwyOTk0MywyOTk1NiwyOTk1NSwyOTk1NywyOTk2NCwyOTk2NiwyOTk2NSwyOTk3MywyOTk3MSwyOTk4MiwyOTk5MCwyOTk5NiwzMDAxMiwzMDAyMCwzMDAyOSwzMDAyNiwzMDAyNSwzMDA0MywzMDAyMiwzMDA0MiwzMDA1NywzMDA1MiwzMDA1NSwzMDA1OSwzMDA2MSwzMDA3MiwzMDA3MCwzMDA4NiwzMDA4NywzMDA2OCwzMDA5MCwzMDA4OSwzMDA4MiwzMDEwMCwzMDEwNiwzMDEwOSwzMDExNywzMDExNSwzMDE0NiwzMDEzMSwzMDE0NywzMDEzMywzMDE0MSwzMDEzNiwzMDE0MCwzMDEyOSwzMDE1NywzMDE1NCwzMDE2MiwzMDE2OSwzMDE3OSwzMDE3NCwzMDIwNiwzMDIwNywzMDIwNCwzMDIwOSwzMDE5MiwzMDIwMiwzMDE5NCwzMDE5NSwzMDIxOSwzMDIyMSwzMDIxNywzMDIzOSwzMDI0NywzMDI0MCwzMDI0MSwzMDI0MiwzMDI0NCwzMDI2MCwzMDI1NiwzMDI2NywzMDI3OSwzMDI4MCwzMDI3OCwzMDMwMCwzMDI5NiwzMDMwNSwzMDMwNiwzMDMxMiwzMDMxMywzMDMxNCwzMDMxMSwzMDMxNiwzMDMyMCwzMDMyMiwzMDMyNiwzMDMyOCwzMDMzMiwzMDMzNiwzMDMzOSwzMDM0NCwzMDM0NywzMDM1MCwzMDM1OCwzMDM1NSwzMDM2MSwzMDM2MiwzMDM4NCwzMDM4OCwzMDM5MiwzMDM5MywzMDM5NCwzMDQwMiwzMDQxMywzMDQyMiwzMDQxOCwzMDQzMCwzMDQzMywzMDQzNywzMDQzOSwzMDQ0MiwzNDM1MSwzMDQ1OSwzMDQ3MiwzMDQ3MSwzMDQ2OCwzMDUwNSwzMDUwMCwzMDQ5NCwzMDUwMSwzMDUwMiwzMDQ5MSwzMDUxOSwzMDUyMCwzMDUzNSwzMDU1NCwzMDU2OCwzMDU3MSwzMDU1NSwzMDU2NSwzMDU5MSwzMDU5MCwzMDU4NSwzMDYwNiwzMDYwMywzMDYwOSwzMDYyNCwzMDYyMiwzMDY0MCwzMDY0NiwzMDY0OSwzMDY1NSwzMDY1MiwzMDY1MywzMDY1MSwzMDY2MywzMDY2OSwzMDY3OSwzMDY4MiwzMDY4NCwzMDY5MSwzMDcwMiwzMDcxNiwzMDczMiwzMDczOCwzMTAxNCwzMDc1MiwzMTAxOCwzMDc4OSwzMDg2MiwzMDgzNiwzMDg1NCwzMDg0NCwzMDg3NCwzMDg2MCwzMDg4MywzMDkwMSwzMDg5MCwzMDg5NSwzMDkyOSwzMDkxOCwzMDkyMywzMDkzMiwzMDkxMCwzMDkwOCwzMDkxNywzMDkyMiwzMDk1NiwzMDk1MSwzMDkzOCwzMDk3MywzMDk2NCwzMDk4MywzMDk5NCwzMDk5MywzMTAwMSwzMTAyMCwzMTAxOSwzMTA0MCwzMTA3MiwzMTA2MywzMTA3MSwzMTA2NiwzMTA2MSwzMTA1OSwzMTA5OCwzMTEwMywzMTExNCwzMTEzMywzMTE0Myw0MDc3OSwzMTE0NiwzMTE1MCwzMTE1NSwzMTE2MSwzMTE2MiwzMTE3NywzMTE4OSwzMTIwNywzMTIxMiwzMTIwMSwzMTIwMywzMTI0MCwzMTI0NSwzMTI1NiwzMTI1NywzMTI2NCwzMTI2MywzMTEwNCwzMTI4MSwzMTI5MSwzMTI5NCwzMTI4NywzMTI5OSwzMTMxOSwzMTMwNSwzMTMyOSwzMTMzMCwzMTMzNyw0MDg2MSwzMTM0NCwzMTM1MywzMTM1NywzMTM2OCwzMTM4MywzMTM4MSwzMTM4NCwzMTM4MiwzMTQwMSwzMTQzMiwzMTQwOCwzMTQxNCwzMTQyOSwzMTQyOCwzMTQyMywzNjk5NSwzMTQzMSwzMTQzNCwzMTQzNywzMTQzOSwzMTQ0NSwzMTQ0MywzMTQ0OSwzMTQ1MCwzMTQ1MywzMTQ1NywzMTQ1OCwzMTQ2MiwzMTQ2OSwzMTQ3MiwzMTQ5MCwzMTUwMywzMTQ5OCwzMTQ5NCwzMTUzOSwzMTUxMiwzMTUxMywzMTUxOCwzMTU0MSwzMTUyOCwzMTU0MiwzMTU2OCwzMTYxMCwzMTQ5MiwzMTU2NSwzMTQ5OSwzMTU2NCwzMTU1NywzMTYwNSwzMTU4OSwzMTYwNCwzMTU5MSwzMTYwMCwzMTYwMSwzMTU5NiwzMTU5OCwzMTY0NSwzMTY0MCwzMTY0NywzMTYyOSwzMTY0NCwzMTY0MiwzMTYyNywzMTYzNCwzMTYzMSwzMTU4MSwzMTY0MSwzMTY5MSwzMTY4MSwzMTY5MiwzMTY5NSwzMTY2OCwzMTY4NiwzMTcwOSwzMTcyMSwzMTc2MSwzMTc2NCwzMTcxOCwzMTcxNywzMTg0MCwzMTc0NCwzMTc1MSwzMTc2MywzMTczMSwzMTczNSwzMTc2NywzMTc1NywzMTczNCwzMTc3OSwzMTc4MywzMTc4NiwzMTc3NSwzMTc5OSwzMTc4NywzMTgwNSwzMTgyMCwzMTgxMSwzMTgyOCwzMTgyMywzMTgwOCwzMTgyNCwzMTgzMiwzMTgzOSwzMTg0NCwzMTgzMCwzMTg0NSwzMTg1MiwzMTg2MSwzMTg3NSwzMTg4OCwzMTkwOCwzMTkxNywzMTkwNiwzMTkxNSwzMTkwNSwzMTkxMiwzMTkyMywzMTkyMiwzMTkyMSwzMTkxOCwzMTkyOSwzMTkzMywzMTkzNiwzMTk0MSwzMTkzOCwzMTk2MCwzMTk1NCwzMTk2NCwzMTk3MCwzOTczOSwzMTk4MywzMTk4NiwzMTk4OCwzMTk5MCwzMTk5NCwzMjAwNiwzMjAwMiwzMjAyOCwzMjAyMSwzMjAxMCwzMjA2OSwzMjA3NSwzMjA0NiwzMjA1MCwzMjA2MywzMjA1MywzMjA3MCwzMjExNSwzMjA4NiwzMjA3OCwzMjExNCwzMjEwNCwzMjExMCwzMjA3OSwzMjA5OSwzMjE0NywzMjEzNywzMjA5MSwzMjE0MywzMjEyNSwzMjE1NSwzMjE4NiwzMjE3NCwzMjE2MywzMjE4MSwzMjE5OSwzMjE4OSwzMjE3MSwzMjMxNywzMjE2MiwzMjE3NSwzMjIyMCwzMjE4NCwzMjE1OSwzMjE3NiwzMjIxNiwzMjIyMSwzMjIyOCwzMjIyMiwzMjI1MSwzMjI0MiwzMjIyNSwzMjI2MSwzMjI2NiwzMjI5MSwzMjI4OSwzMjI3NCwzMjMwNSwzMjI4NywzMjI2NSwzMjI2NywzMjI5MCwzMjMyNiwzMjM1OCwzMjMxNSwzMjMwOSwzMjMxMywzMjMyMywzMjMxMSwzMjMwNiwzMjMxNCwzMjM1OSwzMjM0OSwzMjM0MiwzMjM1MCwzMjM0NSwzMjM0NiwzMjM3NywzMjM2MiwzMjM2MSwzMjM4MCwzMjM3OSwzMjM4NywzMjIxMywzMjM4MSwzNjc4MiwzMjM4MywzMjM5MiwzMjM5MywzMjM5NiwzMjQwMiwzMjQwMCwzMjQwMywzMjQwNCwzMjQwNiwzMjM5OCwzMjQxMSwzMjQxMiwzMjU2OCwzMjU3MCwzMjU4MSwzMjU4OCwzMjU4OSwzMjU5MCwzMjU5MiwzMjU5MywzMjU5NywzMjU5NiwzMjYwMCwzMjYwNywzMjYwOCwzMjYxNiwzMjYxNywzMjYxNSwzMjYzMiwzMjY0MiwzMjY0NiwzMjY0MywzMjY0OCwzMjY0NywzMjY1MiwzMjY2MCwzMjY3MCwzMjY2OSwzMjY2NiwzMjY3NSwzMjY4NywzMjY5MCwzMjY5NywzMjY4NiwzMjY5NCwzMjY5NiwzNTY5NywzMjcwOSwzMjcxMCwzMjcxNCwzMjcyNSwzMjcyNCwzMjczNywzMjc0MiwzMjc0NSwzMjc1NSwzMjc2MSwzOTEzMiwzMjc3NCwzMjc3MiwzMjc3OSwzMjc4NiwzMjc5MiwzMjc5MywzMjc5NiwzMjgwMSwzMjgwOCwzMjgzMSwzMjgyNywzMjg0MiwzMjgzOCwzMjg1MCwzMjg1NiwzMjg1OCwzMjg2MywzMjg2NiwzMjg3MiwzMjg4MywzMjg4MiwzMjg4MCwzMjg4NiwzMjg4OSwzMjg5MywzMjg5NSwzMjkwMCwzMjkwMiwzMjkwMSwzMjkyMywzMjkxNSwzMjkyMiwzMjk0MSwyMDg4MCwzMjk0MCwzMjk4NywzMjk5NywzMjk4NSwzMjk4OSwzMjk2NCwzMjk4NiwzMjk4MiwzMzAzMywzMzAwNywzMzAwOSwzMzA1MSwzMzA2NSwzMzA1OSwzMzA3MSwzMzA5OSwzODUzOSwzMzA5NCwzMzA4NiwzMzEwNywzMzEwNSwzMzAyMCwzMzEzNywzMzEzNCwzMzEyNSwzMzEyNiwzMzE0MCwzMzE1NSwzMzE2MCwzMzE2MiwzMzE1MiwzMzE1NCwzMzE4NCwzMzE3MywzMzE4OCwzMzE4NywzMzExOSwzMzE3MSwzMzE5MywzMzIwMCwzMzIwNSwzMzIxNCwzMzIwOCwzMzIxMywzMzIxNiwzMzIxOCwzMzIxMCwzMzIyNSwzMzIyOSwzMzIzMywzMzI0MSwzMzI0MCwzMzIyNCwzMzI0MiwzMzI0NywzMzI0OCwzMzI1NSwzMzI3NCwzMzI3NSwzMzI3OCwzMzI4MSwzMzI4MiwzMzI4NSwzMzI4NywzMzI5MCwzMzI5MywzMzI5NiwzMzMwMiwzMzMyMSwzMzMyMywzMzMzNiwzMzMzMSwzMzM0NCwzMzM2OSwzMzM2OCwzMzM3MywzMzM3MCwzMzM3NSwzMzM4MCwzMzM3OCwzMzM4NCwzMzM4NiwzMzM4NywzMzMyNiwzMzM5MywzMzM5OSwzMzQwMCwzMzQwNiwzMzQyMSwzMzQyNiwzMzQ1MSwzMzQzOSwzMzQ2NywzMzQ1MiwzMzUwNSwzMzUwNywzMzUwMywzMzQ5MCwzMzUyNCwzMzUyMywzMzUzMCwzMzY4MywzMzUzOSwzMzUzMSwzMzUyOSwzMzUwMiwzMzU0MiwzMzUwMCwzMzU0NSwzMzQ5NywzMzU4OSwzMzU4OCwzMzU1OCwzMzU4NiwzMzU4NSwzMzYwMCwzMzU5MywzMzYxNiwzMzYwNSwzMzU4MywzMzU3OSwzMzU1OSwzMzU2MCwzMzY2OSwzMzY5MCwzMzcwNiwzMzY5NSwzMzY5OCwzMzY4NiwzMzU3MSwzMzY3OCwzMzY3MSwzMzY3NCwzMzY2MCwzMzcxNywzMzY1MSwzMzY1MywzMzY5NiwzMzY3MywzMzcwNCwzMzc4MCwzMzgxMSwzMzc3MSwzMzc0MiwzMzc4OSwzMzc5NSwzMzc1MiwzMzgwMywzMzcyOSwzMzc4MywzMzc5OSwzMzc2MCwzMzc3OCwzMzgwNSwzMzgyNiwzMzgyNCwzMzcyNSwzMzg0OCwzNDA1NCwzMzc4NywzMzkwMSwzMzgzNCwzMzg1MiwzNDEzOCwzMzkyNCwzMzkxMSwzMzg5OSwzMzk2NSwzMzkwMiwzMzkyMiwzMzg5NywzMzg2MiwzMzgzNiwzMzkwMywzMzkxMywzMzg0NSwzMzk5NCwzMzg5MCwzMzk3NywzMzk4MywzMzk1MSwzNDAwOSwzMzk5NywzMzk3OSwzNDAxMCwzNDAwMCwzMzk4NSwzMzk5MCwzNDAwNiwzMzk1MywzNDA4MSwzNDA0NywzNDAzNiwzNDA3MSwzNDA3MiwzNDA5MiwzNDA3OSwzNDA2OSwzNDA2OCwzNDA0NCwzNDExMiwzNDE0NywzNDEzNiwzNDEyMCwzNDExMywzNDMwNiwzNDEyMywzNDEzMywzNDE3NiwzNDIxMiwzNDE4NCwzNDE5MywzNDE4NiwzNDIxNiwzNDE1NywzNDE5NiwzNDIwMywzNDI4MiwzNDE4MywzNDIwNCwzNDE2NywzNDE3NCwzNDE5MiwzNDI0OSwzNDIzNCwzNDI1NSwzNDIzMywzNDI1NiwzNDI2MSwzNDI2OSwzNDI3NywzNDI2OCwzNDI5NywzNDMxNCwzNDMyMywzNDMxNSwzNDMwMiwzNDI5OCwzNDMxMCwzNDMzOCwzNDMzMCwzNDM1MiwzNDM2NywzNDM4MSwyMDA1MywzNDM4OCwzNDM5OSwzNDQwNywzNDQxNywzNDQ1MSwzNDQ2NywzNDQ3MywzNDQ3NCwzNDQ0MywzNDQ0NCwzNDQ4NiwzNDQ3OSwzNDUwMCwzNDUwMiwzNDQ4MCwzNDUwNSwzNDg1MSwzNDQ3NSwzNDUxNiwzNDUyNiwzNDUzNywzNDU0MCwzNDUyNywzNDUyMywzNDU0MywzNDU3OCwzNDU2NiwzNDU2OCwzNDU2MCwzNDU2MywzNDU1NSwzNDU3NywzNDU2OSwzNDU3MywzNDU1MywzNDU3MCwzNDYxMiwzNDYyMywzNDYxNSwzNDYxOSwzNDU5NywzNDYwMSwzNDU4NiwzNDY1NiwzNDY1NSwzNDY4MCwzNDYzNiwzNDYzOCwzNDY3NiwzNDY0NywzNDY2NCwzNDY3MCwzNDY0OSwzNDY0MywzNDY1OSwzNDY2NiwzNDgyMSwzNDcyMiwzNDcxOSwzNDY5MCwzNDczNSwzNDc2MywzNDc0OSwzNDc1MiwzNDc2OCwzODYxNCwzNDczMSwzNDc1NiwzNDczOSwzNDc1OSwzNDc1OCwzNDc0NywzNDc5OSwzNDgwMiwzNDc4NCwzNDgzMSwzNDgyOSwzNDgxNCwzNDgwNiwzNDgwNywzNDgzMCwzNDc3MCwzNDgzMywzNDgzOCwzNDgzNywzNDg1MCwzNDg0OSwzNDg2NSwzNDg3MCwzNDg3MywzNDg1NSwzNDg3NSwzNDg4NCwzNDg4MiwzNDg5OCwzNDkwNSwzNDkxMCwzNDkxNCwzNDkyMywzNDk0NSwzNDk0MiwzNDk3NCwzNDkzMywzNDk0MSwzNDk5NywzNDkzMCwzNDk0NiwzNDk2NywzNDk2MiwzNDk5MCwzNDk2OSwzNDk3OCwzNDk1NywzNDk4MCwzNDk5MiwzNTAwNywzNDk5MywzNTAxMSwzNTAxMiwzNTAyOCwzNTAzMiwzNTAzMywzNTAzNywzNTA2NSwzNTA3NCwzNTA2OCwzNTA2MCwzNTA0OCwzNTA1OCwzNTA3NiwzNTA4NCwzNTA4MiwzNTA5MSwzNTEzOSwzNTEwMiwzNTEwOSwzNTExNCwzNTExNSwzNTEzNywzNTE0MCwzNTEzMSwzNTEyNiwzNTEyOCwzNTE0OCwzNTEwMSwzNTE2OCwzNTE2NiwzNTE3NCwzNTE3MiwzNTE4MSwzNTE3OCwzNTE4MywzNTE4OCwzNTE5MSwzNTE5OCwzNTIwMywzNTIwOCwzNTIxMCwzNTIxOSwzNTIyNCwzNTIzMywzNTI0MSwzNTIzOCwzNTI0NCwzNTI0NywzNTI1MCwzNTI1OCwzNTI2MSwzNTI2MywzNTI2NCwzNTI5MCwzNTI5MiwzNTI5MywzNTMwMywzNTMxNiwzNTMyMCwzNTMzMSwzNTM1MCwzNTM0NCwzNTM0MCwzNTM1NSwzNTM1NywzNTM2NSwzNTM4MiwzNTM5MywzNTQxOSwzNTQxMCwzNTM5OCwzNTQwMCwzNTQ1MiwzNTQzNywzNTQzNiwzNTQyNiwzNTQ2MSwzNTQ1OCwzNTQ2MCwzNTQ5NiwzNTQ4OSwzNTQ3MywzNTQ5MywzNTQ5NCwzNTQ4MiwzNTQ5MSwzNTUyNCwzNTUzMywzNTUyMiwzNTU0NiwzNTU2MywzNTU3MSwzNTU1OSwzNTU1NiwzNTU2OSwzNTYwNCwzNTU1MiwzNTU1NCwzNTU3NSwzNTU1MCwzNTU0NywzNTU5NiwzNTU5MSwzNTYxMCwzNTU1MywzNTYwNiwzNTYwMCwzNTYwNywzNTYxNiwzNTYzNSwzODgyNywzNTYyMiwzNTYyNywzNTY0NiwzNTYyNCwzNTY0OSwzNTY2MCwzNTY2MywzNTY2MiwzNTY1NywzNTY3MCwzNTY3NSwzNTY3NCwzNTY5MSwzNTY3OSwzNTY5MiwzNTY5NSwzNTcwMCwzNTcwOSwzNTcxMiwzNTcyNCwzNTcyNiwzNTczMCwzNTczMSwzNTczNCwzNTczNywzNTczOCwzNTg5OCwzNTkwNSwzNTkwMywzNTkxMiwzNTkxNiwzNTkxOCwzNTkyMCwzNTkyNSwzNTkzOCwzNTk0OCwzNTk2MCwzNTk2MiwzNTk3MCwzNTk3NywzNTk3MywzNTk3OCwzNTk4MSwzNTk4MiwzNTk4OCwzNTk2NCwzNTk5MiwyNTExNywzNjAxMywzNjAxMCwzNjAyOSwzNjAxOCwzNjAxOSwzNjAxNCwzNjAyMiwzNjA0MCwzNjAzMywzNjA2OCwzNjA2NywzNjA1OCwzNjA5MywzNjA5MCwzNjA5MSwzNjEwMCwzNjEwMSwzNjEwNiwzNjEwMywzNjExMSwzNjEwOSwzNjExMiw0MDc4MiwzNjExNSwzNjA0NSwzNjExNiwzNjExOCwzNjE5OSwzNjIwNSwzNjIwOSwzNjIxMSwzNjIyNSwzNjI0OSwzNjI5MCwzNjI4NiwzNjI4MiwzNjMwMywzNjMxNCwzNjMxMCwzNjMwMCwzNjMxNSwzNjI5OSwzNjMzMCwzNjMzMSwzNjMxOSwzNjMyMywzNjM0OCwzNjM2MCwzNjM2MSwzNjM1MSwzNjM4MSwzNjM4MiwzNjM2OCwzNjM4MywzNjQxOCwzNjQwNSwzNjQwMCwzNjQwNCwzNjQyNiwzNjQyMywzNjQyNSwzNjQyOCwzNjQzMiwzNjQyNCwzNjQ0MSwzNjQ1MiwzNjQ0OCwzNjM5NCwzNjQ1MSwzNjQzNywzNjQ3MCwzNjQ2NiwzNjQ3NiwzNjQ4MSwzNjQ4NywzNjQ4NSwzNjQ4NCwzNjQ5MSwzNjQ5MCwzNjQ5OSwzNjQ5NywzNjUwMCwzNjUwNSwzNjUyMiwzNjUxMywzNjUyNCwzNjUyOCwzNjU1MCwzNjUyOSwzNjU0MiwzNjU0OSwzNjU1MiwzNjU1NSwzNjU3MSwzNjU3OSwzNjYwNCwzNjYwMywzNjU4NywzNjYwNiwzNjYxOCwzNjYxMywzNjYyOSwzNjYyNiwzNjYzMywzNjYyNywzNjYzNiwzNjYzOSwzNjYzNSwzNjYyMCwzNjY0NiwzNjY1OSwzNjY2NywzNjY2NSwzNjY3NywzNjY3NCwzNjY3MCwzNjY4NCwzNjY4MSwzNjY3OCwzNjY4NiwzNjY5NSwzNjcwMCwzNjcwNiwzNjcwNywzNjcwOCwzNjc2NCwzNjc2NywzNjc3MSwzNjc4MSwzNjc4MywzNjc5MSwzNjgyNiwzNjgzNywzNjgzNCwzNjg0MiwzNjg0NywzNjk5OSwzNjg1MiwzNjg2OSwzNjg1NywzNjg1OCwzNjg4MSwzNjg4NSwzNjg5NywzNjg3NywzNjg5NCwzNjg4NiwzNjg3NSwzNjkwMywzNjkxOCwzNjkxNywzNjkyMSwzNjg1NiwzNjk0MywzNjk0NCwzNjk0NSwzNjk0NiwzNjg3OCwzNjkzNywzNjkyNiwzNjk1MCwzNjk1MiwzNjk1OCwzNjk2OCwzNjk3NSwzNjk4MiwzODU2OCwzNjk3OCwzNjk5NCwzNjk4OSwzNjk5MywzNjk5MiwzNzAwMiwzNzAwMSwzNzAwNywzNzAzMiwzNzAzOSwzNzA0MSwzNzA0NSwzNzA5MCwzNzA5MiwyNTE2MCwzNzA4MywzNzEyMiwzNzEzOCwzNzE0NSwzNzE3MCwzNzE2OCwzNzE5NCwzNzIwNiwzNzIwOCwzNzIxOSwzNzIyMSwzNzIyNSwzNzIzNSwzNzIzNCwzNzI1OSwzNzI1NywzNzI1MCwzNzI4MiwzNzI5MSwzNzI5NSwzNzI5MCwzNzMwMSwzNzMwMCwzNzMwNiwzNzMxMiwzNzMxMywzNzMyMSwzNzMyMywzNzMyOCwzNzMzNCwzNzM0MywzNzM0NSwzNzMzOSwzNzM3MiwzNzM2NSwzNzM2NiwzNzQwNiwzNzM3NSwzNzM5NiwzNzQyMCwzNzM5NywzNzM5MywzNzQ3MCwzNzQ2MywzNzQ0NSwzNzQ0OSwzNzQ3NiwzNzQ0OCwzNzUyNSwzNzQzOSwzNzQ1MSwzNzQ1NiwzNzUzMiwzNzUyNiwzNzUyMywzNzUzMSwzNzQ2NiwzNzU4MywzNzU2MSwzNzU1OSwzNzYwOSwzNzY0NywzNzYyNiwzNzcwMCwzNzY3OCwzNzY1NywzNzY2NiwzNzY1OCwzNzY2NywzNzY5MCwzNzY4NSwzNzY5MSwzNzcyNCwzNzcyOCwzNzc1NiwzNzc0MiwzNzcxOCwzNzgwOCwzNzgwNCwzNzgwNSwzNzc4MCwzNzgxNywzNzg0NiwzNzg0NywzNzg2NCwzNzg2MSwzNzg0OCwzNzgyNywzNzg1MywzNzg0MCwzNzgzMiwzNzg2MCwzNzkxNCwzNzkwOCwzNzkwNywzNzg5MSwzNzg5NSwzNzkwNCwzNzk0MiwzNzkzMSwzNzk0MSwzNzkyMSwzNzk0NiwzNzk1MywzNzk3MCwzNzk1NiwzNzk3OSwzNzk4NCwzNzk4NiwzNzk4MiwzNzk5NCwzNzQxNywzODAwMCwzODAwNSwzODAwNywzODAxMywzNzk3OCwzODAxMiwzODAxNCwzODAxNywzODAxNSwzODI3NCwzODI3OSwzODI4MiwzODI5MiwzODI5NCwzODI5NiwzODI5NywzODMwNCwzODMxMiwzODMxMSwzODMxNywzODMzMiwzODMzMSwzODMyOSwzODMzNCwzODM0NiwyODY2MiwzODMzOSwzODM0OSwzODM0OCwzODM1NywzODM1NiwzODM1OCwzODM2NCwzODM2OSwzODM3MywzODM3MCwzODQzMywzODQ0MCwzODQ0NiwzODQ0NywzODQ2NiwzODQ3NiwzODQ3OSwzODQ3NSwzODUxOSwzODQ5MiwzODQ5NCwzODQ5MywzODQ5NSwzODUwMiwzODUxNCwzODUwOCwzODU0MSwzODU1MiwzODU0OSwzODU1MSwzODU3MCwzODU2NywzODU3NywzODU3OCwzODU3NiwzODU4MCwzODU4MiwzODU4NCwzODU4NSwzODYwNiwzODYwMywzODYwMSwzODYwNSwzNTE0OSwzODYyMCwzODY2OSwzODYxMywzODY0OSwzODY2MCwzODY2MiwzODY2NCwzODY3NSwzODY3MCwzODY3MywzODY3MSwzODY3OCwzODY4MSwzODY5MiwzODY5OCwzODcwNCwzODcxMywzODcxNywzODcxOCwzODcyNCwzODcyNiwzODcyOCwzODcyMiwzODcyOSwzODc0OCwzODc1MiwzODc1NiwzODc1OCwzODc2MCwyMTIwMiwzODc2MywzODc2OSwzODc3NywzODc4OSwzODc4MCwzODc4NSwzODc3OCwzODc5MCwzODc5NSwzODc5OSwzODgwMCwzODgxMiwzODgyNCwzODgyMiwzODgxOSwzODgzNSwzODgzNiwzODg1MSwzODg1NCwzODg1NiwzODg1OSwzODg3NiwzODg5Myw0MDc4MywzODg5OCwzMTQ1NSwzODkwMiwzODkwMSwzODkyNywzODkyNCwzODk2OCwzODk0OCwzODk0NSwzODk2NywzODk3MywzODk4MiwzODk5MSwzODk4NywzOTAxOSwzOTAyMywzOTAyNCwzOTAyNSwzOTAyOCwzOTAyNywzOTA4MiwzOTA4NywzOTA4OSwzOTA5NCwzOTEwOCwzOTEwNywzOTExMCwzOTE0NSwzOTE0NywzOTE3MSwzOTE3NywzOTE4NiwzOTE4OCwzOTE5MiwzOTIwMSwzOTE5NywzOTE5OCwzOTIwNCwzOTIwMCwzOTIxMiwzOTIxNCwzOTIyOSwzOTIzMCwzOTIzNCwzOTI0MSwzOTIzNywzOTI0OCwzOTI0MywzOTI0OSwzOTI1MCwzOTI0NCwzOTI1MywzOTMxOSwzOTMyMCwzOTMzMywzOTM0MSwzOTM0MiwzOTM1NiwzOTM5MSwzOTM4NywzOTM4OSwzOTM4NCwzOTM3NywzOTQwNSwzOTQwNiwzOTQwOSwzOTQxMCwzOTQxOSwzOTQxNiwzOTQyNSwzOTQzOSwzOTQyOSwzOTM5NCwzOTQ0OSwzOTQ2NywzOTQ3OSwzOTQ5MywzOTQ5MCwzOTQ4OCwzOTQ5MSwzOTQ4NiwzOTUwOSwzOTUwMSwzOTUxNSwzOTUxMSwzOTUxOSwzOTUyMiwzOTUyNSwzOTUyNCwzOTUyOSwzOTUzMSwzOTUzMCwzOTU5NywzOTYwMCwzOTYxMiwzOTYxNiwzOTYzMSwzOTYzMywzOTYzNSwzOTYzNiwzOTY0NiwzOTY0NywzOTY1MCwzOTY1MSwzOTY1NCwzOTY2MywzOTY1OSwzOTY2MiwzOTY2OCwzOTY2NSwzOTY3MSwzOTY3NSwzOTY4NiwzOTcwNCwzOTcwNiwzOTcxMSwzOTcxNCwzOTcxNSwzOTcxNywzOTcxOSwzOTcyMCwzOTcyMSwzOTcyMiwzOTcyNiwzOTcyNywzOTczMCwzOTc0OCwzOTc0NywzOTc1OSwzOTc1NywzOTc1OCwzOTc2MSwzOTc2OCwzOTc5NiwzOTgyNywzOTgxMSwzOTgyNSwzOTgzMCwzOTgzMSwzOTgzOSwzOTg0MCwzOTg0OCwzOTg2MCwzOTg3MiwzOTg4MiwzOTg2NSwzOTg3OCwzOTg4NywzOTg4OSwzOTg5MCwzOTkwNywzOTkwNiwzOTkwOCwzOTg5MiwzOTkwNSwzOTk5NCwzOTkyMiwzOTkyMSwzOTkyMCwzOTk1NywzOTk1NiwzOTk0NSwzOTk1NSwzOTk0OCwzOTk0MiwzOTk0NCwzOTk1NCwzOTk0NiwzOTk0MCwzOTk4MiwzOTk2MywzOTk3MywzOTk3MiwzOTk2OSwzOTk4NCw0MDAwNywzOTk4Niw0MDAwNiwzOTk5OCw0MDAyNiw0MDAzMiw0MDAzOSw0MDA1NCw0MDA1Niw0MDE2Nyw0MDE3Miw0MDE3Niw0MDIwMSw0MDIwMCw0MDE3MSw0MDE5NSw0MDE5OCw0MDIzNCw0MDIzMCw0MDM2Nyw0MDIyNyw0MDIyMyw0MDI2MCw0MDIxMyw0MDIxMCw0MDI1Nyw0MDI1NSw0MDI1NCw0MDI2Miw0MDI2NCw0MDI4NSw0MDI4Niw0MDI5Miw0MDI3Myw0MDI3Miw0MDI4MSw0MDMwNiw0MDMyOSw0MDMyNyw0MDM2Myw0MDMwMyw0MDMxNCw0MDM0Niw0MDM1Niw0MDM2MSw0MDM3MCw0MDM4OCw0MDM4NSw0MDM3OSw0MDM3Niw0MDM3OCw0MDM5MCw0MDM5OSw0MDM4Niw0MDQwOSw0MDQwMyw0MDQ0MCw0MDQyMiw0MDQyOSw0MDQzMSw0MDQ0NSw0MDQ3NCw0MDQ3NSw0MDQ3OCw0MDU2NSw0MDU2OSw0MDU3Myw0MDU3Nyw0MDU4NCw0MDU4Nyw0MDU4OCw0MDU5NCw0MDU5Nyw0MDU5Myw0MDYwNSw0MDYxMyw0MDYxNyw0MDYzMiw0MDYxOCw0MDYyMSwzODc1Myw0MDY1Miw0MDY1NCw0MDY1NSw0MDY1Niw0MDY2MCw0MDY2OCw0MDY3MCw0MDY2OSw0MDY3Miw0MDY3Nyw0MDY4MCw0MDY4Nyw0MDY5Miw0MDY5NCw0MDY5NSw0MDY5Nyw0MDY5OSw0MDcwMCw0MDcwMSw0MDcxMSw0MDcxMiwzMDM5MSw0MDcyNSw0MDczNyw0MDc0OCw0MDc2Niw0MDc3OCw0MDc4Niw0MDc4OCw0MDgwMyw0MDc5OSw0MDgwMCw0MDgwMSw0MDgwNiw0MDgwNyw0MDgxMiw0MDgxMCw0MDgyMyw0MDgxOCw0MDgyMiw0MDg1Myw0MDg2MCw0MDg2NCwyMjU3NSwyNzA3OSwzNjk1MywyOTc5NiwyMDk1NiwyOTA4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzIzOTQsMzUxMDAsMzc3MDQsMzc1MTIsMzQwMTIsMjA0MjUsMjg4NTksMjYxNjEsMjY4MjQsMzc2MjUsMjYzNjMsMjQzODksMjAwMDgsMjAxOTMsMjAyMjAsMjAyMjQsMjAyMjcsMjAyODEsMjAzMTAsMjAzNzAsMjAzNjIsMjAzNzgsMjAzNzIsMjA0MjksMjA1NDQsMjA1MTQsMjA0NzksMjA1MTAsMjA1NTAsMjA1OTIsMjA1NDYsMjA2MjgsMjA3MjQsMjA2OTYsMjA4MTAsMjA4MzYsMjA4OTMsMjA5MjYsMjA5NzIsMjEwMTMsMjExNDgsMjExNTgsMjExODQsMjEyMTEsMjEyNDgsMjEyNTUsMjEyODQsMjEzNjIsMjEzOTUsMjE0MjYsMjE0NjksNjQwMTQsMjE2NjAsMjE2NDIsMjE2NzMsMjE3NTksMjE4OTQsMjIzNjEsMjIzNzMsMjI0NDQsMjI0NzIsMjI0NzEsNjQwMTUsNjQwMTYsMjI2ODYsMjI3MDYsMjI3OTUsMjI4NjcsMjI4NzUsMjI4NzcsMjI4ODMsMjI5NDgsMjI5NzAsMjMzODIsMjM0ODgsMjk5OTksMjM1MTIsMjM1MzIsMjM1ODIsMjM3MTgsMjM3MzgsMjM3OTcsMjM4NDcsMjM4OTEsNjQwMTcsMjM4NzQsMjM5MTcsMjM5OTIsMjM5OTMsMjQwMTYsMjQzNTMsMjQzNzIsMjQ0MjMsMjQ1MDMsMjQ1NDIsMjQ2NjksMjQ3MDksMjQ3MTQsMjQ3OTgsMjQ3ODksMjQ4NjQsMjQ4MTgsMjQ4NDksMjQ4ODcsMjQ4ODAsMjQ5ODQsMjUxMDcsMjUyNTQsMjU1ODksMjU2OTYsMjU3NTcsMjU4MDYsMjU5MzQsMjYxMTIsMjYxMzMsMjYxNzEsMjYxMjEsMjYxNTgsMjYxNDIsMjYxNDgsMjYyMTMsMjYxOTksMjYyMDEsNjQwMTgsMjYyMjcsMjYyNjUsMjYyNzIsMjYyOTAsMjYzMDMsMjYzNjIsMjYzODIsNjM3ODUsMjY0NzAsMjY1NTUsMjY3MDYsMjY1NjAsMjY2MjUsMjY2OTIsMjY4MzEsNjQwMTksMjY5ODQsNjQwMjAsMjcwMzIsMjcxMDYsMjcxODQsMjcyNDMsMjcyMDYsMjcyNTEsMjcyNjIsMjczNjIsMjczNjQsMjc2MDYsMjc3MTEsMjc3NDAsMjc3ODIsMjc3NTksMjc4NjYsMjc5MDgsMjgwMzksMjgwMTUsMjgwNTQsMjgwNzYsMjgxMTEsMjgxNTIsMjgxNDYsMjgxNTYsMjgyMTcsMjgyNTIsMjgxOTksMjgyMjAsMjgzNTEsMjg1NTIsMjg1OTcsMjg2NjEsMjg2NzcsMjg2NzksMjg3MTIsMjg4MDUsMjg4NDMsMjg5NDMsMjg5MzIsMjkwMjAsMjg5OTgsMjg5OTksNjQwMjEsMjkxMjEsMjkxODIsMjkzNjEsMjkzNzQsMjk0NzYsNjQwMjIsMjk1NTksMjk2MjksMjk2NDEsMjk2NTQsMjk2NjcsMjk2NTAsMjk3MDMsMjk2ODUsMjk3MzQsMjk3MzgsMjk3MzcsMjk3NDIsMjk3OTQsMjk4MzMsMjk4NTUsMjk5NTMsMzAwNjMsMzAzMzgsMzAzNjQsMzAzNjYsMzAzNjMsMzAzNzQsNjQwMjMsMzA1MzQsMjExNjcsMzA3NTMsMzA3OTgsMzA4MjAsMzA4NDIsMzEwMjQsNjQwMjQsNjQwMjUsNjQwMjYsMzExMjQsNjQwMjcsMzExMzEsMzE0NDEsMzE0NjMsNjQwMjgsMzE0NjcsMzE2NDYsNjQwMjksMzIwNzIsMzIwOTIsMzIxODMsMzIxNjAsMzIyMTQsMzIzMzgsMzI1ODMsMzI2NzMsNjQwMzAsMzM1MzcsMzM2MzQsMzM2NjMsMzM3MzUsMzM3ODIsMzM4NjQsMzM5NzIsMzQxMzEsMzQxMzcsMzQxNTUsNjQwMzEsMzQyMjQsNjQwMzIsNjQwMzMsMzQ4MjMsMzUwNjEsMzUzNDYsMzUzODMsMzU0NDksMzU0OTUsMzU1MTgsMzU1NTEsNjQwMzQsMzU1NzQsMzU2NjcsMzU3MTEsMzYwODAsMzYwODQsMzYxMTQsMzYyMTQsNjQwMzUsMzY1NTksNjQwMzYsNjQwMzcsMzY5NjcsMzcwODYsNjQwMzgsMzcxNDEsMzcxNTksMzczMzgsMzczMzUsMzczNDIsMzczNTcsMzczNTgsMzczNDgsMzczNDksMzczODIsMzczOTIsMzczODYsMzc0MzQsMzc0NDAsMzc0MzYsMzc0NTQsMzc0NjUsMzc0NTcsMzc0MzMsMzc0NzksMzc1NDMsMzc0OTUsMzc0OTYsMzc2MDcsMzc1OTEsMzc1OTMsMzc1ODQsNjQwMzksMzc1ODksMzc2MDAsMzc1ODcsMzc2NjksMzc2NjUsMzc2MjcsNjQwNDAsMzc2NjIsMzc2MzEsMzc2NjEsMzc2MzQsMzc3NDQsMzc3MTksMzc3OTYsMzc4MzAsMzc4NTQsMzc4ODAsMzc5MzcsMzc5NTcsMzc5NjAsMzgyOTAsNjM5NjQsNjQwNDEsMzg1NTcsMzg1NzUsMzg3MDcsMzg3MTUsMzg3MjMsMzg3MzMsMzg3MzUsMzg3MzcsMzg3NDEsMzg5OTksMzkwMTMsNjQwNDIsNjQwNDMsMzkyMDcsNjQwNDQsMzkzMjYsMzk1MDIsMzk2NDEsMzk2NDQsMzk3OTcsMzk3OTQsMzk4MjMsMzk4NTcsMzk4NjcsMzk5MzYsNDAzMDQsNDAyOTksNjQwNDUsNDA0NzMsNDA2NTcsbnVsbCxudWxsLDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksNjU1MDYsNjU1MDgsNjUyODcsNjUyODIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsNjU1MDYsNjU1MDgsNjUyODcsNjUyODIsMTI4NDksODQ3MCw4NDgxLDg3NTcsMzIzOTQsMzUxMDAsMzc3MDQsMzc1MTIsMzQwMTIsMjA0MjUsMjg4NTksMjYxNjEsMjY4MjQsMzc2MjUsMjYzNjMsMjQzODksMjAwMDgsMjAxOTMsMjAyMjAsMjAyMjQsMjAyMjcsMjAyODEsMjAzMTAsMjAzNzAsMjAzNjIsMjAzNzgsMjAzNzIsMjA0MjksMjA1NDQsMjA1MTQsMjA0NzksMjA1MTAsMjA1NTAsMjA1OTIsMjA1NDYsMjA2MjgsMjA3MjQsMjA2OTYsMjA4MTAsMjA4MzYsMjA4OTMsMjA5MjYsMjA5NzIsMjEwMTMsMjExNDgsMjExNTgsMjExODQsMjEyMTEsMjEyNDgsMjEyNTUsMjEyODQsMjEzNjIsMjEzOTUsMjE0MjYsMjE0NjksNjQwMTQsMjE2NjAsMjE2NDIsMjE2NzMsMjE3NTksMjE4OTQsMjIzNjEsMjIzNzMsMjI0NDQsMjI0NzIsMjI0NzEsNjQwMTUsNjQwMTYsMjI2ODYsMjI3MDYsMjI3OTUsMjI4NjcsMjI4NzUsMjI4NzcsMjI4ODMsMjI5NDgsMjI5NzAsMjMzODIsMjM0ODgsMjk5OTksMjM1MTIsMjM1MzIsMjM1ODIsMjM3MTgsMjM3MzgsMjM3OTcsMjM4NDcsMjM4OTEsNjQwMTcsMjM4NzQsMjM5MTcsMjM5OTIsMjM5OTMsMjQwMTYsMjQzNTMsMjQzNzIsMjQ0MjMsMjQ1MDMsMjQ1NDIsMjQ2NjksMjQ3MDksMjQ3MTQsMjQ3OTgsMjQ3ODksMjQ4NjQsMjQ4MTgsMjQ4NDksMjQ4ODcsMjQ4ODAsMjQ5ODQsMjUxMDcsMjUyNTQsMjU1ODksMjU2OTYsMjU3NTcsMjU4MDYsMjU5MzQsMjYxMTIsMjYxMzMsMjYxNzEsMjYxMjEsMjYxNTgsMjYxNDIsMjYxNDgsMjYyMTMsMjYxOTksMjYyMDEsNjQwMTgsMjYyMjcsMjYyNjUsMjYyNzIsMjYyOTAsMjYzMDMsMjYzNjIsMjYzODIsNjM3ODUsMjY0NzAsMjY1NTUsMjY3MDYsMjY1NjAsMjY2MjUsMjY2OTIsMjY4MzEsNjQwMTksMjY5ODQsNjQwMjAsMjcwMzIsMjcxMDYsMjcxODQsMjcyNDMsMjcyMDYsMjcyNTEsMjcyNjIsMjczNjIsMjczNjQsMjc2MDYsMjc3MTEsMjc3NDAsMjc3ODIsMjc3NTksMjc4NjYsMjc5MDgsMjgwMzksMjgwMTUsMjgwNTQsMjgwNzYsMjgxMTEsMjgxNTIsMjgxNDYsMjgxNTYsMjgyMTcsMjgyNTIsMjgxOTksMjgyMjAsMjgzNTEsMjg1NTIsMjg1OTcsMjg2NjEsMjg2NzcsMjg2NzksMjg3MTIsMjg4MDUsMjg4NDMsMjg5NDMsMjg5MzIsMjkwMjAsMjg5OTgsMjg5OTksNjQwMjEsMjkxMjEsMjkxODIsMjkzNjEsMjkzNzQsMjk0NzYsNjQwMjIsMjk1NTksMjk2MjksMjk2NDEsMjk2NTQsMjk2NjcsMjk2NTAsMjk3MDMsMjk2ODUsMjk3MzQsMjk3MzgsMjk3MzcsMjk3NDIsMjk3OTQsMjk4MzMsMjk4NTUsMjk5NTMsMzAwNjMsMzAzMzgsMzAzNjQsMzAzNjYsMzAzNjMsMzAzNzQsNjQwMjMsMzA1MzQsMjExNjcsMzA3NTMsMzA3OTgsMzA4MjAsMzA4NDIsMzEwMjQsNjQwMjQsNjQwMjUsNjQwMjYsMzExMjQsNjQwMjcsMzExMzEsMzE0NDEsMzE0NjMsNjQwMjgsMzE0NjcsMzE2NDYsNjQwMjksMzIwNzIsMzIwOTIsMzIxODMsMzIxNjAsMzIyMTQsMzIzMzgsMzI1ODMsMzI2NzMsNjQwMzAsMzM1MzcsMzM2MzQsMzM2NjMsMzM3MzUsMzM3ODIsMzM4NjQsMzM5NzIsMzQxMzEsMzQxMzcsMzQxNTUsNjQwMzEsMzQyMjQsNjQwMzIsNjQwMzMsMzQ4MjMsMzUwNjEsMzUzNDYsMzUzODMsMzU0NDksMzU0OTUsMzU1MTgsMzU1NTEsNjQwMzQsMzU1NzQsMzU2NjcsMzU3MTEsMzYwODAsMzYwODQsMzYxMTQsMzYyMTQsNjQwMzUsMzY1NTksNjQwMzYsNjQwMzcsMzY5NjcsMzcwODYsNjQwMzgsMzcxNDEsMzcxNTksMzczMzgsMzczMzUsMzczNDIsMzczNTcsMzczNTgsMzczNDgsMzczNDksMzczODIsMzczOTIsMzczODYsMzc0MzQsMzc0NDAsMzc0MzYsMzc0NTQsMzc0NjUsMzc0NTcsMzc0MzMsMzc0NzksMzc1NDMsMzc0OTUsMzc0OTYsMzc2MDcsMzc1OTEsMzc1OTMsMzc1ODQsNjQwMzksMzc1ODksMzc2MDAsMzc1ODcsMzc2NjksMzc2NjUsMzc2MjcsNjQwNDAsMzc2NjIsMzc2MzEsMzc2NjEsMzc2MzQsMzc3NDQsMzc3MTksMzc3OTYsMzc4MzAsMzc4NTQsMzc4ODAsMzc5MzcsMzc5NTcsMzc5NjAsMzgyOTAsNjM5NjQsNjQwNDEsMzg1NTcsMzg1NzUsMzg3MDcsMzg3MTUsMzg3MjMsMzg3MzMsMzg3MzUsMzg3MzcsMzg3NDEsMzg5OTksMzkwMTMsNjQwNDIsNjQwNDMsMzkyMDcsNjQwNDQsMzkzMjYsMzk1MDIsMzk2NDEsMzk2NDQsMzk3OTcsMzk3OTQsMzk4MjMsMzk4NTcsMzk4NjcsMzk5MzYsNDAzMDQsNDAyOTksNjQwNDUsNDA0NzMsNDA2NTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxcbiAgXCJqaXMwMjEyXCI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDcyOCw3MTEsMTg0LDcyOSw3MzMsMTc1LDczMSw3MzAsNjUzNzQsOTAwLDkwMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTYxLDE2NiwxOTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE4NiwxNzAsMTY5LDE3NCw4NDgyLDE2NCw4NDcwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MDIsOTA0LDkwNSw5MDYsOTM4LG51bGwsOTA4LG51bGwsOTEwLDkzOSxudWxsLDkxMSxudWxsLG51bGwsbnVsbCxudWxsLDk0MCw5NDEsOTQyLDk0Myw5NzAsOTEyLDk3Miw5NjIsOTczLDk3MSw5NDQsOTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzOCwxMDM5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExOCwxMTE5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTk4LDI3MixudWxsLDI5NCxudWxsLDMwNixudWxsLDMyMSwzMTksbnVsbCwzMzAsMjE2LDMzOCxudWxsLDM1OCwyMjIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMzAsMjczLDI0MCwyOTUsMzA1LDMwNywzMTIsMzIyLDMyMCwzMjksMzMxLDI0OCwzMzksMjIzLDM1OSwyNTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTMsMTkyLDE5NiwxOTQsMjU4LDQ2MSwyNTYsMjYwLDE5NywxOTUsMjYyLDI2NCwyNjgsMTk5LDI2NiwyNzAsMjAxLDIwMCwyMDMsMjAyLDI4MiwyNzgsMjc0LDI4MCxudWxsLDI4NCwyODYsMjkwLDI4OCwyOTIsMjA1LDIwNCwyMDcsMjA2LDQ2MywzMDQsMjk4LDMwMiwyOTYsMzA4LDMxMCwzMTMsMzE3LDMxNSwzMjMsMzI3LDMyNSwyMDksMjExLDIxMCwyMTQsMjEyLDQ2NSwzMzYsMzMyLDIxMywzNDAsMzQ0LDM0MiwzNDYsMzQ4LDM1MiwzNTAsMzU2LDM1NCwyMTgsMjE3LDIyMCwyMTksMzY0LDQ2NywzNjgsMzYyLDM3MCwzNjYsMzYwLDQ3MSw0NzUsNDczLDQ2OSwzNzIsMjIxLDM3NiwzNzQsMzc3LDM4MSwzNzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMjUsMjI0LDIyOCwyMjYsMjU5LDQ2MiwyNTcsMjYxLDIyOSwyMjcsMjYzLDI2NSwyNjksMjMxLDI2NywyNzEsMjMzLDIzMiwyMzUsMjM0LDI4MywyNzksMjc1LDI4MSw1MDEsMjg1LDI4NyxudWxsLDI4OSwyOTMsMjM3LDIzNiwyMzksMjM4LDQ2NCxudWxsLDI5OSwzMDMsMjk3LDMwOSwzMTEsMzE0LDMxOCwzMTYsMzI0LDMyOCwzMjYsMjQxLDI0MywyNDIsMjQ2LDI0NCw0NjYsMzM3LDMzMywyNDUsMzQxLDM0NSwzNDMsMzQ3LDM0OSwzNTMsMzUxLDM1NywzNTUsMjUwLDI0OSwyNTIsMjUxLDM2NSw0NjgsMzY5LDM2MywzNzEsMzY3LDM2MSw0NzIsNDc2LDQ3NCw0NzAsMzczLDI1MywyNTUsMzc1LDM3OCwzODIsMzgwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTk3MCwxOTk3MiwxOTk3MywxOTk4MCwxOTk4NiwxOTk5OSwyMDAwMywyMDAwNCwyMDAwOCwyMDAxMSwyMDAxNCwyMDAxNSwyMDAxNiwyMDAyMSwyMDAzMiwyMDAzMywyMDAzNiwyMDAzOSwyMDA0OSwyMDA1OCwyMDA2MCwyMDA2NywyMDA3MiwyMDA3MywyMDA4NCwyMDA4NSwyMDA4OSwyMDA5NSwyMDEwOSwyMDExOCwyMDExOSwyMDEyNSwyMDE0MywyMDE1MywyMDE2MywyMDE3NiwyMDE4NiwyMDE4NywyMDE5MiwyMDE5MywyMDE5NCwyMDIwMCwyMDIwNywyMDIwOSwyMDIxMSwyMDIxMywyMDIyMSwyMDIyMiwyMDIyMywyMDIyNCwyMDIyNiwyMDIyNywyMDIzMiwyMDIzNSwyMDIzNiwyMDI0MiwyMDI0NSwyMDI0NiwyMDI0NywyMDI0OSwyMDI3MCwyMDI3MywyMDMyMCwyMDI3NSwyMDI3NywyMDI3OSwyMDI4MSwyMDI4MywyMDI4NiwyMDI4OCwyMDI5MCwyMDI5NiwyMDI5NywyMDI5OSwyMDMwMCwyMDMwNiwyMDMwOCwyMDMxMCwyMDMxMiwyMDMxOSwyMDMyMywyMDMzMCwyMDMzMiwyMDMzNCwyMDMzNywyMDM0MywyMDM0NCwyMDM0NSwyMDM0NiwyMDM0OSwyMDM1MCwyMDM1MywyMDM1NCwyMDM1NiwyMDM1NywyMDM2MSwyMDM2MiwyMDM2NCwyMDM2NiwyMDM2OCwyMDM3MCwyMDM3MSwyMDM3MiwyMDM3NSwyMDM3NywyMDM3OCwyMDM4MiwyMDM4MywyMDQwMiwyMDQwNywyMDQwOSwyMDQxMSwyMDQxMiwyMDQxMywyMDQxNCwyMDQxNiwyMDQxNywyMDQyMSwyMDQyMiwyMDQyNCwyMDQyNSwyMDQyNywyMDQyOCwyMDQyOSwyMDQzMSwyMDQzNCwyMDQ0NCwyMDQ0OCwyMDQ1MCwyMDQ2NCwyMDQ2NiwyMDQ3NiwyMDQ3NywyMDQ3OSwyMDQ4MCwyMDQ4MSwyMDQ4NCwyMDQ4NywyMDQ5MCwyMDQ5MiwyMDQ5NCwyMDQ5NiwyMDQ5OSwyMDUwMywyMDUwNCwyMDUwNywyMDUwOCwyMDUwOSwyMDUxMCwyMDUxNCwyMDUxOSwyMDUyNiwyMDUyOCwyMDUzMCwyMDUzMSwyMDUzMywyMDU0NCwyMDU0NSwyMDU0NiwyMDU0OSwyMDU1MCwyMDU1NCwyMDU1NiwyMDU1OCwyMDU2MSwyMDU2MiwyMDU2MywyMDU2NywyMDU2OSwyMDU3NSwyMDU3NiwyMDU3OCwyMDU3OSwyMDU4MiwyMDU4MywyMDU4NiwyMDU4OSwyMDU5MiwyMDU5MywyMDUzOSwyMDYwOSwyMDYxMSwyMDYxMiwyMDYxNCwyMDYxOCwyMDYyMiwyMDYyMywyMDYyNCwyMDYyNiwyMDYyNywyMDYyOCwyMDYzMCwyMDYzNSwyMDYzNiwyMDYzOCwyMDYzOSwyMDY0MCwyMDY0MSwyMDY0MiwyMDY1MCwyMDY1NSwyMDY1NiwyMDY2NSwyMDY2NiwyMDY2OSwyMDY3MiwyMDY3NSwyMDY3NiwyMDY3OSwyMDY4NCwyMDY4NiwyMDY4OCwyMDY5MSwyMDY5MiwyMDY5NiwyMDcwMCwyMDcwMSwyMDcwMywyMDcwNiwyMDcwOCwyMDcxMCwyMDcxMiwyMDcxMywyMDcxOSwyMDcyMSwyMDcyNiwyMDczMCwyMDczNCwyMDczOSwyMDc0MiwyMDc0MywyMDc0NCwyMDc0NywyMDc0OCwyMDc0OSwyMDc1MCwyMDcyMiwyMDc1MiwyMDc1OSwyMDc2MSwyMDc2MywyMDc2NCwyMDc2NSwyMDc2NiwyMDc3MSwyMDc3NSwyMDc3NiwyMDc4MCwyMDc4MSwyMDc4MywyMDc4NSwyMDc4NywyMDc4OCwyMDc4OSwyMDc5MiwyMDc5MywyMDgwMiwyMDgxMCwyMDgxNSwyMDgxOSwyMDgyMSwyMDgyMywyMDgyNCwyMDgzMSwyMDgzNiwyMDgzOCwyMDg2MiwyMDg2NywyMDg2OCwyMDg3NSwyMDg3OCwyMDg4OCwyMDg5MywyMDg5NywyMDg5OSwyMDkwOSwyMDkyMCwyMDkyMiwyMDkyNCwyMDkyNiwyMDkyNywyMDkzMCwyMDkzNiwyMDk0MywyMDk0NSwyMDk0NiwyMDk0NywyMDk0OSwyMDk1MiwyMDk1OCwyMDk2MiwyMDk2NSwyMDk3NCwyMDk3OCwyMDk3OSwyMDk4MCwyMDk4MywyMDk5MywyMDk5NCwyMDk5NywyMTAxMCwyMTAxMSwyMTAxMywyMTAxNCwyMTAxNiwyMTAyNiwyMTAzMiwyMTA0MSwyMTA0MiwyMTA0NSwyMTA1MiwyMTA2MSwyMTA2NSwyMTA3NywyMTA3OSwyMTA4MCwyMTA4MiwyMTA4NCwyMTA4NywyMTA4OCwyMTA4OSwyMTA5NCwyMTEwMiwyMTExMSwyMTExMiwyMTExMywyMTEyMCwyMTEyMiwyMTEyNSwyMTEzMCwyMTEzMiwyMTEzOSwyMTE0MSwyMTE0MiwyMTE0MywyMTE0NCwyMTE0NiwyMTE0OCwyMTE1NiwyMTE1NywyMTE1OCwyMTE1OSwyMTE2NywyMTE2OCwyMTE3NCwyMTE3NSwyMTE3NiwyMTE3OCwyMTE3OSwyMTE4MSwyMTE4NCwyMTE4OCwyMTE5MCwyMTE5MiwyMTE5NiwyMTE5OSwyMTIwMSwyMTIwNCwyMTIwNiwyMTIxMSwyMTIxMiwyMTIxNywyMTIyMSwyMTIyNCwyMTIyNSwyMTIyNiwyMTIyOCwyMTIzMiwyMTIzMywyMTIzNiwyMTIzOCwyMTIzOSwyMTI0OCwyMTI1MSwyMTI1OCwyMTI1OSwyMTI2MCwyMTI2NSwyMTI2NywyMTI3MiwyMTI3NSwyMTI3NiwyMTI3OCwyMTI3OSwyMTI4NSwyMTI4NywyMTI4OCwyMTI4OSwyMTI5MSwyMTI5MiwyMTI5MywyMTI5NiwyMTI5OCwyMTMwMSwyMTMwOCwyMTMwOSwyMTMxMCwyMTMxNCwyMTMyNCwyMTMyMywyMTMzNywyMTMzOSwyMTM0NSwyMTM0NywyMTM0OSwyMTM1NiwyMTM1NywyMTM2MiwyMTM2OSwyMTM3NCwyMTM3OSwyMTM4MywyMTM4NCwyMTM5MCwyMTM5NSwyMTM5NiwyMTQwMSwyMTQwNSwyMTQwOSwyMTQxMiwyMTQxOCwyMTQxOSwyMTQyMywyMTQyNiwyMTQyOCwyMTQyOSwyMTQzMSwyMTQzMiwyMTQzNCwyMTQzNywyMTQ0MCwyMTQ0NSwyMTQ1NSwyMTQ1OCwyMTQ1OSwyMTQ2MSwyMTQ2NiwyMTQ2OSwyMTQ3MCwyMTQ3MiwyMTQ3OCwyMTQ3OSwyMTQ5MywyMTUwNiwyMTUyMywyMTUzMCwyMTUzNywyMTU0MywyMTU0NCwyMTU0NiwyMTU1MSwyMTU1MywyMTU1NiwyMTU1NywyMTU3MSwyMTU3MiwyMTU3NSwyMTU4MSwyMTU4MywyMTU5OCwyMTYwMiwyMTYwNCwyMTYwNiwyMTYwNywyMTYwOSwyMTYxMSwyMTYxMywyMTYxNCwyMTYyMCwyMTYzMSwyMTYzMywyMTYzNSwyMTYzNywyMTY0MCwyMTY0MSwyMTY0NSwyMTY0OSwyMTY1MywyMTY1NCwyMTY2MCwyMTY2MywyMTY2NSwyMTY3MCwyMTY3MSwyMTY3MywyMTY3NCwyMTY3NywyMTY3OCwyMTY4MSwyMTY4NywyMTY4OSwyMTY5MCwyMTY5MSwyMTY5NSwyMTcwMiwyMTcwNiwyMTcwOSwyMTcxMCwyMTcyOCwyMTczOCwyMTc0MCwyMTc0MywyMTc1MCwyMTc1NiwyMTc1OCwyMTc1OSwyMTc2MCwyMTc2MSwyMTc2NSwyMTc2OCwyMTc2OSwyMTc3MiwyMTc3MywyMTc3NCwyMTc4MSwyMTgwMiwyMTgwMywyMTgxMCwyMTgxMywyMTgxNCwyMTgxOSwyMTgyMCwyMTgyMSwyMTgyNSwyMTgzMSwyMTgzMywyMTgzNCwyMTgzNywyMTg0MCwyMTg0MSwyMTg0OCwyMTg1MCwyMTg1MSwyMTg1NCwyMTg1NiwyMTg1NywyMTg2MCwyMTg2MiwyMTg4NywyMTg4OSwyMTg5MCwyMTg5NCwyMTg5NiwyMTkwMiwyMTkwMywyMTkwNSwyMTkwNiwyMTkwNywyMTkwOCwyMTkxMSwyMTkyMywyMTkyNCwyMTkzMywyMTkzOCwyMTk1MSwyMTk1MywyMTk1NSwyMTk1OCwyMTk2MSwyMTk2MywyMTk2NCwyMTk2NiwyMTk2OSwyMTk3MCwyMTk3MSwyMTk3NSwyMTk3NiwyMTk3OSwyMTk4MiwyMTk4NiwyMTk5MywyMjAwNiwyMjAxNSwyMjAyMSwyMjAyNCwyMjAyNiwyMjAyOSwyMjAzMCwyMjAzMSwyMjAzMiwyMjAzMywyMjAzNCwyMjA0MSwyMjA2MCwyMjA2NCwyMjA2NywyMjA2OSwyMjA3MSwyMjA3MywyMjA3NSwyMjA3NiwyMjA3NywyMjA3OSwyMjA4MCwyMjA4MSwyMjA4MywyMjA4NCwyMjA4NiwyMjA4OSwyMjA5MSwyMjA5MywyMjA5NSwyMjEwMCwyMjExMCwyMjExMiwyMjExMywyMjExNCwyMjExNSwyMjExOCwyMjEyMSwyMjEyNSwyMjEyNywyMjEyOSwyMjEzMCwyMjEzMywyMjE0OCwyMjE0OSwyMjE1MiwyMjE1NSwyMjE1NiwyMjE2NSwyMjE2OSwyMjE3MCwyMjE3MywyMjE3NCwyMjE3NSwyMjE4MiwyMjE4MywyMjE4NCwyMjE4NSwyMjE4NywyMjE4OCwyMjE4OSwyMjE5MywyMjE5NSwyMjE5OSwyMjIwNiwyMjIxMywyMjIxNywyMjIxOCwyMjIxOSwyMjIyMywyMjIyNCwyMjIyMCwyMjIyMSwyMjIzMywyMjIzNiwyMjIzNywyMjIzOSwyMjI0MSwyMjI0NCwyMjI0NSwyMjI0NiwyMjI0NywyMjI0OCwyMjI1NywyMjI1MSwyMjI1MywyMjI2MiwyMjI2MywyMjI3MywyMjI3NCwyMjI3OSwyMjI4MiwyMjI4NCwyMjI4OSwyMjI5MywyMjI5OCwyMjI5OSwyMjMwMSwyMjMwNCwyMjMwNiwyMjMwNywyMjMwOCwyMjMwOSwyMjMxMywyMjMxNCwyMjMxNiwyMjMxOCwyMjMxOSwyMjMyMywyMjMyNCwyMjMzMywyMjMzNCwyMjMzNSwyMjM0MSwyMjM0MiwyMjM0OCwyMjM0OSwyMjM1NCwyMjM3MCwyMjM3MywyMjM3NSwyMjM3NiwyMjM3OSwyMjM4MSwyMjM4MiwyMjM4MywyMjM4NCwyMjM4NSwyMjM4NywyMjM4OCwyMjM4OSwyMjM5MSwyMjM5MywyMjM5NCwyMjM5NSwyMjM5NiwyMjM5OCwyMjQwMSwyMjQwMywyMjQxMiwyMjQyMCwyMjQyMywyMjQyNSwyMjQyNiwyMjQyOCwyMjQyOSwyMjQzMCwyMjQzMSwyMjQzMywyMjQyMSwyMjQzOSwyMjQ0MCwyMjQ0MSwyMjQ0NCwyMjQ1NiwyMjQ2MSwyMjQ3MSwyMjQ3MiwyMjQ3NiwyMjQ3OSwyMjQ4NSwyMjQ5MywyMjQ5NCwyMjUwMCwyMjUwMiwyMjUwMywyMjUwNSwyMjUwOSwyMjUxMiwyMjUxNywyMjUxOCwyMjUyMCwyMjUyNSwyMjUyNiwyMjUyNywyMjUzMSwyMjUzMiwyMjUzNiwyMjUzNywyMjQ5NywyMjU0MCwyMjU0MSwyMjU1NSwyMjU1OCwyMjU1OSwyMjU2MCwyMjU2NiwyMjU2NywyMjU3MywyMjU3OCwyMjU4NSwyMjU5MSwyMjYwMSwyMjYwNCwyMjYwNSwyMjYwNywyMjYwOCwyMjYxMywyMjYyMywyMjYyNSwyMjYyOCwyMjYzMSwyMjYzMiwyMjY0OCwyMjY1MiwyMjY1NSwyMjY1NiwyMjY1NywyMjY2MywyMjY2NCwyMjY2NSwyMjY2NiwyMjY2OCwyMjY2OSwyMjY3MSwyMjY3MiwyMjY3NiwyMjY3OCwyMjY4NSwyMjY4OCwyMjY4OSwyMjY5MCwyMjY5NCwyMjY5NywyMjcwNSwyMjcwNiwyMjcyNCwyMjcxNiwyMjcyMiwyMjcyOCwyMjczMywyMjczNCwyMjczNiwyMjczOCwyMjc0MCwyMjc0MiwyMjc0NiwyMjc0OSwyMjc1MywyMjc1NCwyMjc2MSwyMjc3MSwyMjc4OSwyMjc5MCwyMjc5NSwyMjc5NiwyMjgwMiwyMjgwMywyMjgwNCwzNDM2OSwyMjgxMywyMjgxNywyMjgxOSwyMjgyMCwyMjgyNCwyMjgzMSwyMjgzMiwyMjgzNSwyMjgzNywyMjgzOCwyMjg0NywyMjg1MSwyMjg1NCwyMjg2NiwyMjg2NywyMjg3MywyMjg3NSwyMjg3NywyMjg3OCwyMjg3OSwyMjg4MSwyMjg4MywyMjg5MSwyMjg5MywyMjg5NSwyMjg5OCwyMjkwMSwyMjkwMiwyMjkwNSwyMjkwNywyMjkwOCwyMjkyMywyMjkyNCwyMjkyNiwyMjkzMCwyMjkzMywyMjkzNSwyMjk0MywyMjk0OCwyMjk1MSwyMjk1NywyMjk1OCwyMjk1OSwyMjk2MCwyMjk2MywyMjk2NywyMjk3MCwyMjk3MiwyMjk3NywyMjk3OSwyMjk4MCwyMjk4NCwyMjk4NiwyMjk4OSwyMjk5NCwyMzAwNSwyMzAwNiwyMzAwNywyMzAxMSwyMzAxMiwyMzAxNSwyMzAyMiwyMzAyMywyMzAyNSwyMzAyNiwyMzAyOCwyMzAzMSwyMzA0MCwyMzA0NCwyMzA1MiwyMzA1MywyMzA1NCwyMzA1OCwyMzA1OSwyMzA3MCwyMzA3NSwyMzA3NiwyMzA3OSwyMzA4MCwyMzA4MiwyMzA4NSwyMzA4OCwyMzEwOCwyMzEwOSwyMzExMSwyMzExMiwyMzExNiwyMzEyMCwyMzEyNSwyMzEzNCwyMzEzOSwyMzE0MSwyMzE0MywyMzE0OSwyMzE1OSwyMzE2MiwyMzE2MywyMzE2NiwyMzE3OSwyMzE4NCwyMzE4NywyMzE5MCwyMzE5MywyMzE5NiwyMzE5OCwyMzE5OSwyMzIwMCwyMzIwMiwyMzIwNywyMzIxMiwyMzIxNywyMzIxOCwyMzIxOSwyMzIyMSwyMzIyNCwyMzIyNiwyMzIyNywyMzIzMSwyMzIzNiwyMzIzOCwyMzI0MCwyMzI0NywyMzI1OCwyMzI2MCwyMzI2NCwyMzI2OSwyMzI3NCwyMzI3OCwyMzI4NSwyMzI4NiwyMzI5MywyMzI5NiwyMzI5NywyMzMwNCwyMzMxOSwyMzM0OCwyMzMyMSwyMzMyMywyMzMyNSwyMzMyOSwyMzMzMywyMzM0MSwyMzM1MiwyMzM2MSwyMzM3MSwyMzM3MiwyMzM3OCwyMzM4MiwyMzM5MCwyMzQwMCwyMzQwNiwyMzQwNywyMzQyMCwyMzQyMSwyMzQyMiwyMzQyMywyMzQyNSwyMzQyOCwyMzQzMCwyMzQzNCwyMzQzOCwyMzQ0MCwyMzQ0MSwyMzQ0MywyMzQ0NCwyMzQ0NiwyMzQ2NCwyMzQ2NSwyMzQ2OCwyMzQ2OSwyMzQ3MSwyMzQ3MywyMzQ3NCwyMzQ3OSwyMzQ4MiwyMzQ4NCwyMzQ4OCwyMzQ4OSwyMzUwMSwyMzUwMywyMzUxMCwyMzUxMSwyMzUxMiwyMzUxMywyMzUxNCwyMzUyMCwyMzUzNSwyMzUzNywyMzU0MCwyMzU0OSwyMzU2NCwyMzU3NSwyMzU4MiwyMzU4MywyMzU4NywyMzU5MCwyMzU5MywyMzU5NSwyMzU5NiwyMzU5OCwyMzYwMCwyMzYwMiwyMzYwNSwyMzYwNiwyMzY0MSwyMzY0MiwyMzY0NCwyMzY1MCwyMzY1MSwyMzY1NSwyMzY1NiwyMzY1NywyMzY2MSwyMzY2NCwyMzY2OCwyMzY2OSwyMzY3NCwyMzY3NSwyMzY3NiwyMzY3NywyMzY4NywyMzY4OCwyMzY5MCwyMzY5NSwyMzY5OCwyMzcwOSwyMzcxMSwyMzcxMiwyMzcxNCwyMzcxNSwyMzcxOCwyMzcyMiwyMzczMCwyMzczMiwyMzczMywyMzczOCwyMzc1MywyMzc1NSwyMzc2MiwyMzc3MywyMzc2NywyMzc5MCwyMzc5MywyMzc5NCwyMzc5NiwyMzgwOSwyMzgxNCwyMzgyMSwyMzgyNiwyMzg1MSwyMzg0MywyMzg0NCwyMzg0NiwyMzg0NywyMzg1NywyMzg2MCwyMzg2NSwyMzg2OSwyMzg3MSwyMzg3NCwyMzg3NSwyMzg3OCwyMzg4MCwyMzg5MywyMzg4OSwyMzg5NywyMzg4MiwyMzkwMywyMzkwNCwyMzkwNSwyMzkwNiwyMzkwOCwyMzkxNCwyMzkxNywyMzkyMCwyMzkyOSwyMzkzMCwyMzkzNCwyMzkzNSwyMzkzNywyMzkzOSwyMzk0NCwyMzk0NiwyMzk1NCwyMzk1NSwyMzk1NiwyMzk1NywyMzk2MSwyMzk2MywyMzk2NywyMzk2OCwyMzk3NSwyMzk3OSwyMzk4NCwyMzk4OCwyMzk5MiwyMzk5MywyNDAwMywyNDAwNywyNDAxMSwyNDAxNiwyNDAxNCwyNDAyNCwyNDAyNSwyNDAzMiwyNDAzNiwyNDA0MSwyNDA1NiwyNDA1NywyNDA2NCwyNDA3MSwyNDA3NywyNDA4MiwyNDA4NCwyNDA4NSwyNDA4OCwyNDA5NSwyNDA5NiwyNDExMCwyNDEwNCwyNDExNCwyNDExNywyNDEyNiwyNDEzOSwyNDE0NCwyNDEzNywyNDE0NSwyNDE1MCwyNDE1MiwyNDE1NSwyNDE1NiwyNDE1OCwyNDE2OCwyNDE3MCwyNDE3MSwyNDE3MiwyNDE3MywyNDE3NCwyNDE3NiwyNDE5MiwyNDIwMywyNDIwNiwyNDIyNiwyNDIyOCwyNDIyOSwyNDIzMiwyNDIzNCwyNDIzNiwyNDI0MSwyNDI0MywyNDI1MywyNDI1NCwyNDI1NSwyNDI2MiwyNDI2OCwyNDI2NywyNDI3MCwyNDI3MywyNDI3NCwyNDI3NiwyNDI3NywyNDI4NCwyNDI4NiwyNDI5MywyNDI5OSwyNDMyMiwyNDMyNiwyNDMyNywyNDMyOCwyNDMzNCwyNDM0NSwyNDM0OCwyNDM0OSwyNDM1MywyNDM1NCwyNDM1NSwyNDM1NiwyNDM2MCwyNDM2MywyNDM2NCwyNDM2NiwyNDM2OCwyNDM3MiwyNDM3NCwyNDM3OSwyNDM4MSwyNDM4MywyNDM4NCwyNDM4OCwyNDM4OSwyNDM5MSwyNDM5NywyNDQwMCwyNDQwNCwyNDQwOCwyNDQxMSwyNDQxNiwyNDQxOSwyNDQyMCwyNDQyMywyNDQzMSwyNDQzNCwyNDQzNiwyNDQzNywyNDQ0MCwyNDQ0MiwyNDQ0NSwyNDQ0NiwyNDQ1NywyNDQ2MSwyNDQ2MywyNDQ3MCwyNDQ3NiwyNDQ3NywyNDQ4MiwyNDQ4NywyNDQ5MSwyNDQ4NCwyNDQ5MiwyNDQ5NSwyNDQ5NiwyNDQ5NywyNDUwNCwyNDUxNiwyNDUxOSwyNDUyMCwyNDUyMSwyNDUyMywyNDUyOCwyNDUyOSwyNDUzMCwyNDUzMSwyNDUzMiwyNDU0MiwyNDU0NSwyNDU0NiwyNDU1MiwyNDU1MywyNDU1NCwyNDU1NiwyNDU1NywyNDU1OCwyNDU1OSwyNDU2MiwyNDU2MywyNDU2NiwyNDU3MCwyNDU3MiwyNDU4MywyNDU4NiwyNDU4OSwyNDU5NSwyNDU5NiwyNDU5OSwyNDYwMCwyNDYwMiwyNDYwNywyNDYxMiwyNDYyMSwyNDYyNywyNDYyOSwyNDY0MCwyNDY0NywyNDY0OCwyNDY0OSwyNDY1MiwyNDY1NywyNDY2MCwyNDY2MiwyNDY2MywyNDY2OSwyNDY3MywyNDY3OSwyNDY4OSwyNDcwMiwyNDcwMywyNDcwNiwyNDcxMCwyNDcxMiwyNDcxNCwyNDcxOCwyNDcyMSwyNDcyMywyNDcyNSwyNDcyOCwyNDczMywyNDczNCwyNDczOCwyNDc0MCwyNDc0MSwyNDc0NCwyNDc1MiwyNDc1MywyNDc1OSwyNDc2MywyNDc2NiwyNDc3MCwyNDc3MiwyNDc3NiwyNDc3NywyNDc3OCwyNDc3OSwyNDc4MiwyNDc4MywyNDc4OCwyNDc4OSwyNDc5MywyNDc5NSwyNDc5NywyNDc5OCwyNDgwMiwyNDgwNSwyNDgxOCwyNDgyMSwyNDgyNCwyNDgyOCwyNDgyOSwyNDgzNCwyNDgzOSwyNDg0MiwyNDg0NCwyNDg0OCwyNDg0OSwyNDg1MCwyNDg1MSwyNDg1MiwyNDg1NCwyNDg1NSwyNDg1NywyNDg2MCwyNDg2MiwyNDg2NiwyNDg3NCwyNDg3NSwyNDg4MCwyNDg4MSwyNDg4NSwyNDg4NiwyNDg4NywyNDg4OSwyNDg5NywyNDkwMSwyNDkwMiwyNDkwNSwyNDkyNiwyNDkyOCwyNDk0MCwyNDk0NiwyNDk1MiwyNDk1NSwyNDk1NiwyNDk1OSwyNDk2MCwyNDk2MSwyNDk2MywyNDk2NCwyNDk3MSwyNDk3MywyNDk3OCwyNDk3OSwyNDk4MywyNDk4NCwyNDk4OCwyNDk4OSwyNDk5MSwyNDk5MiwyNDk5NywyNTAwMCwyNTAwMiwyNTAwNSwyNTAxNiwyNTAxNywyNTAyMCwyNTAyNCwyNTAyNSwyNTAyNiwyNTAzOCwyNTAzOSwyNTA0NSwyNTA1MiwyNTA1MywyNTA1NCwyNTA1NSwyNTA1NywyNTA1OCwyNTA2MywyNTA2NSwyNTA2MSwyNTA2OCwyNTA2OSwyNTA3MSwyNTA4OSwyNTA5MSwyNTA5MiwyNTA5NSwyNTEwNywyNTEwOSwyNTExNiwyNTEyMCwyNTEyMiwyNTEyMywyNTEyNywyNTEyOSwyNTEzMSwyNTE0NSwyNTE0OSwyNTE1NCwyNTE1NSwyNTE1NiwyNTE1OCwyNTE2NCwyNTE2OCwyNTE2OSwyNTE3MCwyNTE3MiwyNTE3NCwyNTE3OCwyNTE4MCwyNTE4OCwyNTE5NywyNTE5OSwyNTIwMywyNTIxMCwyNTIxMywyNTIyOSwyNTIzMCwyNTIzMSwyNTIzMiwyNTI1NCwyNTI1NiwyNTI2NywyNTI3MCwyNTI3MSwyNTI3NCwyNTI3OCwyNTI3OSwyNTI4NCwyNTI5NCwyNTMwMSwyNTMwMiwyNTMwNiwyNTMyMiwyNTMzMCwyNTMzMiwyNTM0MCwyNTM0MSwyNTM0NywyNTM0OCwyNTM1NCwyNTM1NSwyNTM1NywyNTM2MCwyNTM2MywyNTM2NiwyNTM2OCwyNTM4NSwyNTM4NiwyNTM4OSwyNTM5NywyNTM5OCwyNTQwMSwyNTQwNCwyNTQwOSwyNTQxMCwyNTQxMSwyNTQxMiwyNTQxNCwyNTQxOCwyNTQxOSwyNTQyMiwyNTQyNiwyNTQyNywyNTQyOCwyNTQzMiwyNTQzNSwyNTQ0NSwyNTQ0NiwyNTQ1MiwyNTQ1MywyNTQ1NywyNTQ2MCwyNTQ2MSwyNTQ2NCwyNTQ2OCwyNTQ2OSwyNTQ3MSwyNTQ3NCwyNTQ3NiwyNTQ3OSwyNTQ4MiwyNTQ4OCwyNTQ5MiwyNTQ5MywyNTQ5NywyNTQ5OCwyNTUwMiwyNTUwOCwyNTUxMCwyNTUxNywyNTUxOCwyNTUxOSwyNTUzMywyNTUzNywyNTU0MSwyNTU0NCwyNTU1MCwyNTU1MywyNTU1NSwyNTU1NiwyNTU1NywyNTU2NCwyNTU2OCwyNTU3MywyNTU3OCwyNTU4MCwyNTU4NiwyNTU4NywyNTU4OSwyNTU5MiwyNTU5MywyNTYwOSwyNTYxMCwyNTYxNiwyNTYxOCwyNTYyMCwyNTYyNCwyNTYzMCwyNTYzMiwyNTYzNCwyNTYzNiwyNTYzNywyNTY0MSwyNTY0MiwyNTY0NywyNTY0OCwyNTY1MywyNTY2MSwyNTY2MywyNTY3NSwyNTY3OSwyNTY4MSwyNTY4MiwyNTY4MywyNTY4NCwyNTY5MCwyNTY5MSwyNTY5MiwyNTY5MywyNTY5NSwyNTY5NiwyNTY5NywyNTY5OSwyNTcwOSwyNTcxNSwyNTcxNiwyNTcyMywyNTcyNSwyNTczMywyNTczNSwyNTc0MywyNTc0NCwyNTc0NSwyNTc1MiwyNTc1MywyNTc1NSwyNTc1NywyNTc1OSwyNTc2MSwyNTc2MywyNTc2NiwyNTc2OCwyNTc3MiwyNTc3OSwyNTc4OSwyNTc5MCwyNTc5MSwyNTc5NiwyNTgwMSwyNTgwMiwyNTgwMywyNTgwNCwyNTgwNiwyNTgwOCwyNTgwOSwyNTgxMywyNTgxNSwyNTgyOCwyNTgyOSwyNTgzMywyNTgzNCwyNTgzNywyNTg0MCwyNTg0NSwyNTg0NywyNTg1MSwyNTg1NSwyNTg1NywyNTg2MCwyNTg2NCwyNTg2NSwyNTg2NiwyNTg3MSwyNTg3NSwyNTg3NiwyNTg3OCwyNTg4MSwyNTg4MywyNTg4NiwyNTg4NywyNTg5MCwyNTg5NCwyNTg5NywyNTkwMiwyNTkwNSwyNTkxNCwyNTkxNiwyNTkxNywyNTkyMywyNTkyNywyNTkyOSwyNTkzNiwyNTkzOCwyNTk0MCwyNTk1MSwyNTk1MiwyNTk1OSwyNTk2MywyNTk3OCwyNTk4MSwyNTk4NSwyNTk4OSwyNTk5NCwyNjAwMiwyNjAwNSwyNjAwOCwyNjAxMywyNjAxNiwyNjAxOSwyNjAyMiwyNjAzMCwyNjAzNCwyNjAzNSwyNjAzNiwyNjA0NywyNjA1MCwyNjA1NiwyNjA1NywyNjA2MiwyNjA2NCwyNjA2OCwyNjA3MCwyNjA3MiwyNjA3OSwyNjA5NiwyNjA5OCwyNjEwMCwyNjEwMSwyNjEwNSwyNjExMCwyNjExMSwyNjExMiwyNjExNiwyNjEyMCwyNjEyMSwyNjEyNSwyNjEyOSwyNjEzMCwyNjEzMywyNjEzNCwyNjE0MSwyNjE0MiwyNjE0NSwyNjE0NiwyNjE0NywyNjE0OCwyNjE1MCwyNjE1MywyNjE1NCwyNjE1NSwyNjE1NiwyNjE1OCwyNjE2MCwyNjE2MSwyNjE2MywyNjE2OSwyNjE2NywyNjE3NiwyNjE4MSwyNjE4MiwyNjE4NiwyNjE4OCwyNjE5MywyNjE5MCwyNjE5OSwyNjIwMCwyNjIwMSwyNjIwMywyNjIwNCwyNjIwOCwyNjIwOSwyNjM2MywyNjIxOCwyNjIxOSwyNjIyMCwyNjIzOCwyNjIyNywyNjIyOSwyNjIzOSwyNjIzMSwyNjIzMiwyNjIzMywyNjIzNSwyNjI0MCwyNjIzNiwyNjI1MSwyNjI1MiwyNjI1MywyNjI1NiwyNjI1OCwyNjI2NSwyNjI2NiwyNjI2NywyNjI2OCwyNjI3MSwyNjI3MiwyNjI3NiwyNjI4NSwyNjI4OSwyNjI5MCwyNjI5MywyNjI5OSwyNjMwMywyNjMwNCwyNjMwNiwyNjMwNywyNjMxMiwyNjMxNiwyNjMxOCwyNjMxOSwyNjMyNCwyNjMzMSwyNjMzNSwyNjM0NCwyNjM0NywyNjM0OCwyNjM1MCwyNjM2MiwyNjM3MywyNjM3NSwyNjM4MiwyNjM4NywyNjM5MywyNjM5NiwyNjQwMCwyNjQwMiwyNjQxOSwyNjQzMCwyNjQzNywyNjQzOSwyNjQ0MCwyNjQ0NCwyNjQ1MiwyNjQ1MywyNjQ2MSwyNjQ3MCwyNjQ3NiwyNjQ3OCwyNjQ4NCwyNjQ4NiwyNjQ5MSwyNjQ5NywyNjUwMCwyNjUxMCwyNjUxMSwyNjUxMywyNjUxNSwyNjUxOCwyNjUyMCwyNjUyMSwyNjUyMywyNjU0NCwyNjU0NSwyNjU0NiwyNjU0OSwyNjU1NSwyNjU1NiwyNjU1NywyNjYxNywyNjU2MCwyNjU2MiwyNjU2MywyNjU2NSwyNjU2OCwyNjU2OSwyNjU3OCwyNjU4MywyNjU4NSwyNjU4OCwyNjU5MywyNjU5OCwyNjYwOCwyNjYxMCwyNjYxNCwyNjYxNSwyNjcwNiwyNjY0NCwyNjY0OSwyNjY1MywyNjY1NSwyNjY2NCwyNjY2MywyNjY2OCwyNjY2OSwyNjY3MSwyNjY3MiwyNjY3MywyNjY3NSwyNjY4MywyNjY4NywyNjY5MiwyNjY5MywyNjY5OCwyNjcwMCwyNjcwOSwyNjcxMSwyNjcxMiwyNjcxNSwyNjczMSwyNjczNCwyNjczNSwyNjczNiwyNjczNywyNjczOCwyNjc0MSwyNjc0NSwyNjc0NiwyNjc0NywyNjc0OCwyNjc1NCwyNjc1NiwyNjc1OCwyNjc2MCwyNjc3NCwyNjc3NiwyNjc3OCwyNjc4MCwyNjc4NSwyNjc4NywyNjc4OSwyNjc5MywyNjc5NCwyNjc5OCwyNjgwMiwyNjgxMSwyNjgyMSwyNjgyNCwyNjgyOCwyNjgzMSwyNjgzMiwyNjgzMywyNjgzNSwyNjgzOCwyNjg0MSwyNjg0NCwyNjg0NSwyNjg1MywyNjg1NiwyNjg1OCwyNjg1OSwyNjg2MCwyNjg2MSwyNjg2NCwyNjg2NSwyNjg2OSwyNjg3MCwyNjg3NSwyNjg3NiwyNjg3NywyNjg4NiwyNjg4OSwyNjg5MCwyNjg5NiwyNjg5NywyNjg5OSwyNjkwMiwyNjkwMywyNjkyOSwyNjkzMSwyNjkzMywyNjkzNiwyNjkzOSwyNjk0NiwyNjk0OSwyNjk1MywyNjk1OCwyNjk2NywyNjk3MSwyNjk3OSwyNjk4MCwyNjk4MSwyNjk4MiwyNjk4NCwyNjk4NSwyNjk4OCwyNjk5MiwyNjk5MywyNjk5NCwyNzAwMiwyNzAwMywyNzAwNywyNzAwOCwyNzAyMSwyNzAyNiwyNzAzMCwyNzAzMiwyNzA0MSwyNzA0NSwyNzA0NiwyNzA0OCwyNzA1MSwyNzA1MywyNzA1NSwyNzA2MywyNzA2NCwyNzA2NiwyNzA2OCwyNzA3NywyNzA4MCwyNzA4OSwyNzA5NCwyNzA5NSwyNzEwNiwyNzEwOSwyNzExOCwyNzExOSwyNzEyMSwyNzEyMywyNzEyNSwyNzEzNCwyNzEzNiwyNzEzNywyNzEzOSwyNzE1MSwyNzE1MywyNzE1NywyNzE2MiwyNzE2NSwyNzE2OCwyNzE3MiwyNzE3NiwyNzE4NCwyNzE4NiwyNzE4OCwyNzE5MSwyNzE5NSwyNzE5OCwyNzE5OSwyNzIwNSwyNzIwNiwyNzIwOSwyNzIxMCwyNzIxNCwyNzIxNiwyNzIxNywyNzIxOCwyNzIyMSwyNzIyMiwyNzIyNywyNzIzNiwyNzIzOSwyNzI0MiwyNzI0OSwyNzI1MSwyNzI2MiwyNzI2NSwyNzI2NywyNzI3MCwyNzI3MSwyNzI3MywyNzI3NSwyNzI4MSwyNzI5MSwyNzI5MywyNzI5NCwyNzI5NSwyNzMwMSwyNzMwNywyNzMxMSwyNzMxMiwyNzMxMywyNzMxNiwyNzMyNSwyNzMyNiwyNzMyNywyNzMzNCwyNzMzNywyNzMzNiwyNzM0MCwyNzM0NCwyNzM0OCwyNzM0OSwyNzM1MCwyNzM1NiwyNzM1NywyNzM2NCwyNzM2NywyNzM3MiwyNzM3NiwyNzM3NywyNzM3OCwyNzM4OCwyNzM4OSwyNzM5NCwyNzM5NSwyNzM5OCwyNzM5OSwyNzQwMSwyNzQwNywyNzQwOCwyNzQwOSwyNzQxNSwyNzQxOSwyNzQyMiwyNzQyOCwyNzQzMiwyNzQzNSwyNzQzNiwyNzQzOSwyNzQ0NSwyNzQ0NiwyNzQ1MSwyNzQ1NSwyNzQ2MiwyNzQ2NiwyNzQ2OSwyNzQ3NCwyNzQ3OCwyNzQ4MCwyNzQ4NSwyNzQ4OCwyNzQ5NSwyNzQ5OSwyNzUwMiwyNzUwNCwyNzUwOSwyNzUxNywyNzUxOCwyNzUyMiwyNzUyNSwyNzU0MywyNzU0NywyNzU1MSwyNzU1MiwyNzU1NCwyNzU1NSwyNzU2MCwyNzU2MSwyNzU2NCwyNzU2NSwyNzU2NiwyNzU2OCwyNzU3NiwyNzU3NywyNzU4MSwyNzU4MiwyNzU4NywyNzU4OCwyNzU5MywyNzU5NiwyNzYwNiwyNzYxMCwyNzYxNywyNzYxOSwyNzYyMiwyNzYyMywyNzYzMCwyNzYzMywyNzYzOSwyNzY0MSwyNzY0NywyNzY1MCwyNzY1MiwyNzY1MywyNzY1NywyNzY2MSwyNzY2MiwyNzY2NCwyNzY2NiwyNzY3MywyNzY3OSwyNzY4NiwyNzY4NywyNzY4OCwyNzY5MiwyNzY5NCwyNzY5OSwyNzcwMSwyNzcwMiwyNzcwNiwyNzcwNywyNzcxMSwyNzcyMiwyNzcyMywyNzcyNSwyNzcyNywyNzczMCwyNzczMiwyNzczNywyNzczOSwyNzc0MCwyNzc1NSwyNzc1NywyNzc1OSwyNzc2NCwyNzc2NiwyNzc2OCwyNzc2OSwyNzc3MSwyNzc4MSwyNzc4MiwyNzc4MywyNzc4NSwyNzc5NiwyNzc5NywyNzc5OSwyNzgwMCwyNzgwNCwyNzgwNywyNzgyNCwyNzgyNiwyNzgyOCwyNzg0MiwyNzg0NiwyNzg1MywyNzg1NSwyNzg1NiwyNzg1NywyNzg1OCwyNzg2MCwyNzg2MiwyNzg2NiwyNzg2OCwyNzg3MiwyNzg3OSwyNzg4MSwyNzg4MywyNzg4NCwyNzg4NiwyNzg5MCwyNzg5MiwyNzkwOCwyNzkxMSwyNzkxNCwyNzkxOCwyNzkxOSwyNzkyMSwyNzkyMywyNzkzMCwyNzk0MiwyNzk0MywyNzk0NCwyNzc1MSwyNzk1MCwyNzk1MSwyNzk1MywyNzk2MSwyNzk2NCwyNzk2NywyNzk5MSwyNzk5OCwyNzk5OSwyODAwMSwyODAwNSwyODAwNywyODAxNSwyODAxNiwyODAyOCwyODAzNCwyODAzOSwyODA0OSwyODA1MCwyODA1MiwyODA1NCwyODA1NSwyODA1NiwyODA3NCwyODA3NiwyODA4NCwyODA4NywyODA4OSwyODA5MywyODA5NSwyODEwMCwyODEwNCwyODEwNiwyODExMCwyODExMSwyODExOCwyODEyMywyODEyNSwyODEyNywyODEyOCwyODEzMCwyODEzMywyODEzNywyODE0MywyODE0NCwyODE0OCwyODE1MCwyODE1NiwyODE2MCwyODE2NCwyODE5MCwyODE5NCwyODE5OSwyODIxMCwyODIxNCwyODIxNywyODIxOSwyODIyMCwyODIyOCwyODIyOSwyODIzMiwyODIzMywyODIzNSwyODIzOSwyODI0MSwyODI0MiwyODI0MywyODI0NCwyODI0NywyODI1MiwyODI1MywyODI1NCwyODI1OCwyODI1OSwyODI2NCwyODI3NSwyODI4MywyODI4NSwyODMwMSwyODMwNywyODMxMywyODMyMCwyODMyNywyODMzMywyODMzNCwyODMzNywyODMzOSwyODM0NywyODM1MSwyODM1MiwyODM1MywyODM1NSwyODM1OSwyODM2MCwyODM2MiwyODM2NSwyODM2NiwyODM2NywyODM5NSwyODM5NywyODM5OCwyODQwOSwyODQxMSwyODQxMywyODQyMCwyODQyNCwyODQyNiwyODQyOCwyODQyOSwyODQzOCwyODQ0MCwyODQ0MiwyODQ0MywyODQ1NCwyODQ1NywyODQ1OCwyODQ2MywyODQ2NCwyODQ2NywyODQ3MCwyODQ3NSwyODQ3NiwyODQ2MSwyODQ5NSwyODQ5NywyODQ5OCwyODQ5OSwyODUwMywyODUwNSwyODUwNiwyODUwOSwyODUxMCwyODUxMywyODUxNCwyODUyMCwyODUyNCwyODU0MSwyODU0MiwyODU0NywyODU1MSwyODU1MiwyODU1NSwyODU1NiwyODU1NywyODU2MCwyODU2MiwyODU2MywyODU2NCwyODU2NiwyODU3MCwyODU3NSwyODU3NiwyODU4MSwyODU4MiwyODU4MywyODU4NCwyODU5MCwyODU5MSwyODU5MiwyODU5NywyODU5OCwyODYwNCwyODYxMywyODYxNSwyODYxNiwyODYxOCwyODYzNCwyODYzOCwyODY0OCwyODY0OSwyODY1NiwyODY2MSwyODY2NSwyODY2OCwyODY2OSwyODY3MiwyODY3NywyODY3OCwyODY3OSwyODY4NSwyODY5NSwyODcwNCwyODcwNywyODcxOSwyODcyNCwyODcyNywyODcyOSwyODczMiwyODczOSwyODc0MCwyODc0NCwyODc0NSwyODc0NiwyODc0NywyODc1NiwyODc1NywyODc2NSwyODc2NiwyODc1MCwyODc3MiwyODc3MywyODc4MCwyODc4MiwyODc4OSwyODc5MCwyODc5OCwyODgwMSwyODgwNSwyODgwNiwyODgyMCwyODgyMSwyODgyMiwyODgyMywyODgyNCwyODgyNywyODgzNiwyODg0MywyODg0OCwyODg0OSwyODg1MiwyODg1NSwyODg3NCwyODg4MSwyODg4MywyODg4NCwyODg4NSwyODg4NiwyODg4OCwyODg5MiwyODkwMCwyODkyMiwyODkzMSwyODkzMiwyODkzMywyODkzNCwyODkzNSwyODkzOSwyODk0MCwyODk0MywyODk1OCwyODk2MCwyODk3MSwyODk3MywyODk3NSwyODk3NiwyODk3NywyODk4NCwyODk5MywyODk5NywyODk5OCwyODk5OSwyOTAwMiwyOTAwMywyOTAwOCwyOTAxMCwyOTAxNSwyOTAxOCwyOTAyMCwyOTAyMiwyOTAyNCwyOTAzMiwyOTA0OSwyOTA1NiwyOTA2MSwyOTA2MywyOTA2OCwyOTA3NCwyOTA4MiwyOTA4MywyOTA4OCwyOTA5MCwyOTEwMywyOTEwNCwyOTEwNiwyOTEwNywyOTExNCwyOTExOSwyOTEyMCwyOTEyMSwyOTEyNCwyOTEzMSwyOTEzMiwyOTEzOSwyOTE0MiwyOTE0NSwyOTE0NiwyOTE0OCwyOTE3NiwyOTE4MiwyOTE4NCwyOTE5MSwyOTE5MiwyOTE5MywyOTIwMywyOTIwNywyOTIxMCwyOTIxMywyOTIxNSwyOTIyMCwyOTIyNywyOTIzMSwyOTIzNiwyOTI0MCwyOTI0MSwyOTI0OSwyOTI1MCwyOTI1MSwyOTI1MywyOTI2MiwyOTI2MywyOTI2NCwyOTI2NywyOTI2OSwyOTI3MCwyOTI3NCwyOTI3NiwyOTI3OCwyOTI4MCwyOTI4MywyOTI4OCwyOTI5MSwyOTI5NCwyOTI5NSwyOTI5NywyOTMwMywyOTMwNCwyOTMwNywyOTMwOCwyOTMxMSwyOTMxNiwyOTMyMSwyOTMyNSwyOTMyNiwyOTMzMSwyOTMzOSwyOTM1MiwyOTM1NywyOTM1OCwyOTM2MSwyOTM2NCwyOTM3NCwyOTM3NywyOTM4MywyOTM4NSwyOTM4OCwyOTM5NywyOTM5OCwyOTQwMCwyOTQwNywyOTQxMywyOTQyNywyOTQyOCwyOTQzNCwyOTQzNSwyOTQzOCwyOTQ0MiwyOTQ0NCwyOTQ0NSwyOTQ0NywyOTQ1MSwyOTQ1MywyOTQ1OCwyOTQ1OSwyOTQ2NCwyOTQ2NSwyOTQ3MCwyOTQ3NCwyOTQ3NiwyOTQ3OSwyOTQ4MCwyOTQ4NCwyOTQ4OSwyOTQ5MCwyOTQ5MywyOTQ5OCwyOTQ5OSwyOTUwMSwyOTUwNywyOTUxNywyOTUyMCwyOTUyMiwyOTUyNiwyOTUyOCwyOTUzMywyOTUzNCwyOTUzNSwyOTUzNiwyOTU0MiwyOTU0MywyOTU0NSwyOTU0NywyOTU0OCwyOTU1MCwyOTU1MSwyOTU1MywyOTU1OSwyOTU2MSwyOTU2NCwyOTU2OCwyOTU2OSwyOTU3MSwyOTU3MywyOTU3NCwyOTU4MiwyOTU4NCwyOTU4NywyOTU4OSwyOTU5MSwyOTU5MiwyOTU5NiwyOTU5OCwyOTU5OSwyOTYwMCwyOTYwMiwyOTYwNSwyOTYwNiwyOTYxMCwyOTYxMSwyOTYxMywyOTYyMSwyOTYyMywyOTYyNSwyOTYyOCwyOTYyOSwyOTYzMSwyOTYzNywyOTYzOCwyOTY0MSwyOTY0MywyOTY0NCwyOTY0NywyOTY1MCwyOTY1MSwyOTY1NCwyOTY1NywyOTY2MSwyOTY2NSwyOTY2NywyOTY3MCwyOTY3MSwyOTY3MywyOTY4NCwyOTY4NSwyOTY4NywyOTY4OSwyOTY5MCwyOTY5MSwyOTY5MywyOTY5NSwyOTY5NiwyOTY5NywyOTcwMCwyOTcwMywyOTcwNiwyOTcxMywyOTcyMiwyOTcyMywyOTczMiwyOTczNCwyOTczNiwyOTczNywyOTczOCwyOTczOSwyOTc0MCwyOTc0MSwyOTc0MiwyOTc0MywyOTc0NCwyOTc0NSwyOTc1MywyOTc2MCwyOTc2MywyOTc2NCwyOTc2NiwyOTc2NywyOTc3MSwyOTc3MywyOTc3NywyOTc3OCwyOTc4MywyOTc4OSwyOTc5NCwyOTc5OCwyOTc5OSwyOTgwMCwyOTgwMywyOTgwNSwyOTgwNiwyOTgwOSwyOTgxMCwyOTgyNCwyOTgyNSwyOTgyOSwyOTgzMCwyOTgzMSwyOTgzMywyOTgzOSwyOTg0MCwyOTg0MSwyOTg0MiwyOTg0OCwyOTg0OSwyOTg1MCwyOTg1MiwyOTg1NSwyOTg1NiwyOTg1NywyOTg1OSwyOTg2MiwyOTg2NCwyOTg2NSwyOTg2NiwyOTg2NywyOTg3MCwyOTg3MSwyOTg3MywyOTg3NCwyOTg3NywyOTg4MSwyOTg4MywyOTg4NywyOTg5NiwyOTg5NywyOTkwMCwyOTkwNCwyOTkwNywyOTkxMiwyOTkxNCwyOTkxNSwyOTkxOCwyOTkxOSwyOTkyNCwyOTkyOCwyOTkzMCwyOTkzMSwyOTkzNSwyOTk0MCwyOTk0NiwyOTk0NywyOTk0OCwyOTk1MSwyOTk1OCwyOTk3MCwyOTk3NCwyOTk3NSwyOTk4NCwyOTk4NSwyOTk4OCwyOTk5MSwyOTk5MywyOTk5NCwyOTk5OSwzMDAwNiwzMDAwOSwzMDAxMywzMDAxNCwzMDAxNSwzMDAxNiwzMDAxOSwzMDAyMywzMDAyNCwzMDAzMCwzMDAzMiwzMDAzNCwzMDAzOSwzMDA0NiwzMDA0NywzMDA0OSwzMDA2MywzMDA2NSwzMDA3MywzMDA3NCwzMDA3NSwzMDA3NiwzMDA3NywzMDA3OCwzMDA4MSwzMDA4NSwzMDA5NiwzMDA5OCwzMDA5OSwzMDEwMSwzMDEwNSwzMDEwOCwzMDExNCwzMDExNiwzMDEzMiwzMDEzOCwzMDE0MywzMDE0NCwzMDE0NSwzMDE0OCwzMDE1MCwzMDE1NiwzMDE1OCwzMDE1OSwzMDE2NywzMDE3MiwzMDE3NSwzMDE3NiwzMDE3NywzMDE4MCwzMDE4MywzMDE4OCwzMDE5MCwzMDE5MSwzMDE5MywzMDIwMSwzMDIwOCwzMDIxMCwzMDIxMSwzMDIxMiwzMDIxNSwzMDIxNiwzMDIxOCwzMDIyMCwzMDIyMywzMDIyNiwzMDIyNywzMDIyOSwzMDIzMCwzMDIzMywzMDIzNSwzMDIzNiwzMDIzNywzMDIzOCwzMDI0MywzMDI0NSwzMDI0NiwzMDI0OSwzMDI1MywzMDI1OCwzMDI1OSwzMDI2MSwzMDI2NCwzMDI2NSwzMDI2NiwzMDI2OCwzMDI4MiwzMDI3MiwzMDI3MywzMDI3NSwzMDI3NiwzMDI3NywzMDI4MSwzMDI4MywzMDI5MywzMDI5NywzMDMwMywzMDMwOCwzMDMwOSwzMDMxNywzMDMxOCwzMDMxOSwzMDMyMSwzMDMyNCwzMDMzNywzMDM0MSwzMDM0OCwzMDM0OSwzMDM1NywzMDM2MywzMDM2NCwzMDM2NSwzMDM2NywzMDM2OCwzMDM3MCwzMDM3MSwzMDM3MiwzMDM3MywzMDM3NCwzMDM3NSwzMDM3NiwzMDM3OCwzMDM4MSwzMDM5NywzMDQwMSwzMDQwNSwzMDQwOSwzMDQxMSwzMDQxMiwzMDQxNCwzMDQyMCwzMDQyNSwzMDQzMiwzMDQzOCwzMDQ0MCwzMDQ0NCwzMDQ0OCwzMDQ0OSwzMDQ1NCwzMDQ1NywzMDQ2MCwzMDQ2NCwzMDQ3MCwzMDQ3NCwzMDQ3OCwzMDQ4MiwzMDQ4NCwzMDQ4NSwzMDQ4NywzMDQ4OSwzMDQ5MCwzMDQ5MiwzMDQ5OCwzMDUwNCwzMDUwOSwzMDUxMCwzMDUxMSwzMDUxNiwzMDUxNywzMDUxOCwzMDUyMSwzMDUyNSwzMDUyNiwzMDUzMCwzMDUzMywzMDUzNCwzMDUzOCwzMDU0MSwzMDU0MiwzMDU0MywzMDU0NiwzMDU1MCwzMDU1MSwzMDU1NiwzMDU1OCwzMDU1OSwzMDU2MCwzMDU2MiwzMDU2NCwzMDU2NywzMDU3MCwzMDU3MiwzMDU3NiwzMDU3OCwzMDU3OSwzMDU4MCwzMDU4NiwzMDU4OSwzMDU5MiwzMDU5NiwzMDYwNCwzMDYwNSwzMDYxMiwzMDYxMywzMDYxNCwzMDYxOCwzMDYyMywzMDYyNiwzMDYzMSwzMDYzNCwzMDYzOCwzMDYzOSwzMDY0MSwzMDY0NSwzMDY1NCwzMDY1OSwzMDY2NSwzMDY3MywzMDY3NCwzMDY3NywzMDY4MSwzMDY4NiwzMDY4NywzMDY4OCwzMDY5MiwzMDY5NCwzMDY5OCwzMDcwMCwzMDcwNCwzMDcwNSwzMDcwOCwzMDcxMiwzMDcxNSwzMDcyNSwzMDcyNiwzMDcyOSwzMDczMywzMDczNCwzMDczNywzMDc0OSwzMDc1MywzMDc1NCwzMDc1NSwzMDc2NSwzMDc2NiwzMDc2OCwzMDc3MywzMDc3NSwzMDc4NywzMDc4OCwzMDc5MSwzMDc5MiwzMDc5NiwzMDc5OCwzMDgwMiwzMDgxMiwzMDgxNCwzMDgxNiwzMDgxNywzMDgxOSwzMDgyMCwzMDgyNCwzMDgyNiwzMDgzMCwzMDg0MiwzMDg0NiwzMDg1OCwzMDg2MywzMDg2OCwzMDg3MiwzMDg4MSwzMDg3NywzMDg3OCwzMDg3OSwzMDg4NCwzMDg4OCwzMDg5MiwzMDg5MywzMDg5NiwzMDg5NywzMDg5OCwzMDg5OSwzMDkwNywzMDkwOSwzMDkxMSwzMDkxOSwzMDkyMCwzMDkyMSwzMDkyNCwzMDkyNiwzMDkzMCwzMDkzMSwzMDkzMywzMDkzNCwzMDk0OCwzMDkzOSwzMDk0MywzMDk0NCwzMDk0NSwzMDk1MCwzMDk1NCwzMDk2MiwzMDk2MywzMDk3NiwzMDk2NiwzMDk2NywzMDk3MCwzMDk3MSwzMDk3NSwzMDk4MiwzMDk4OCwzMDk5MiwzMTAwMiwzMTAwNCwzMTAwNiwzMTAwNywzMTAwOCwzMTAxMywzMTAxNSwzMTAxNywzMTAyMSwzMTAyNSwzMTAyOCwzMTAyOSwzMTAzNSwzMTAzNywzMTAzOSwzMTA0NCwzMTA0NSwzMTA0NiwzMTA1MCwzMTA1MSwzMTA1NSwzMTA1NywzMTA2MCwzMTA2NCwzMTA2NywzMTA2OCwzMTA3OSwzMTA4MSwzMTA4MywzMTA5MCwzMTA5NywzMTA5OSwzMTEwMCwzMTEwMiwzMTExNSwzMTExNiwzMTEyMSwzMTEyMywzMTEyNCwzMTEyNSwzMTEyNiwzMTEyOCwzMTEzMSwzMTEzMiwzMTEzNywzMTE0NCwzMTE0NSwzMTE0NywzMTE1MSwzMTE1MywzMTE1NiwzMTE2MCwzMTE2MywzMTE3MCwzMTE3MiwzMTE3NSwzMTE3NiwzMTE3OCwzMTE4MywzMTE4OCwzMTE5MCwzMTE5NCwzMTE5NywzMTE5OCwzMTIwMCwzMTIwMiwzMTIwNSwzMTIxMCwzMTIxMSwzMTIxMywzMTIxNywzMTIyNCwzMTIyOCwzMTIzNCwzMTIzNSwzMTIzOSwzMTI0MSwzMTI0MiwzMTI0NCwzMTI0OSwzMTI1MywzMTI1OSwzMTI2MiwzMTI2NSwzMTI3MSwzMTI3NSwzMTI3NywzMTI3OSwzMTI4MCwzMTI4NCwzMTI4NSwzMTI4OCwzMTI4OSwzMTI5MCwzMTMwMCwzMTMwMSwzMTMwMywzMTMwNCwzMTMwOCwzMTMxNywzMTMxOCwzMTMyMSwzMTMyNCwzMTMyNSwzMTMyNywzMTMyOCwzMTMzMywzMTMzNSwzMTMzOCwzMTM0MSwzMTM0OSwzMTM1MiwzMTM1OCwzMTM2MCwzMTM2MiwzMTM2NSwzMTM2NiwzMTM3MCwzMTM3MSwzMTM3NiwzMTM3NywzMTM4MCwzMTM5MCwzMTM5MiwzMTM5NSwzMTQwNCwzMTQxMSwzMTQxMywzMTQxNywzMTQxOSwzMTQyMCwzMTQzMCwzMTQzMywzMTQzNiwzMTQzOCwzMTQ0MSwzMTQ1MSwzMTQ2NCwzMTQ2NSwzMTQ2NywzMTQ2OCwzMTQ3MywzMTQ3NiwzMTQ4MywzMTQ4NSwzMTQ4NiwzMTQ5NSwzMTUwOCwzMTUxOSwzMTUyMywzMTUyNywzMTUyOSwzMTUzMCwzMTUzMSwzMTUzMywzMTUzNCwzMTUzNSwzMTUzNiwzMTUzNywzMTU0MCwzMTU0OSwzMTU1MSwzMTU1MiwzMTU1MywzMTU1OSwzMTU2NiwzMTU3MywzMTU4NCwzMTU4OCwzMTU5MCwzMTU5MywzMTU5NCwzMTU5NywzMTU5OSwzMTYwMiwzMTYwMywzMTYwNywzMTYyMCwzMTYyNSwzMTYzMCwzMTYzMiwzMTYzMywzMTYzOCwzMTY0MywzMTY0NiwzMTY0OCwzMTY1MywzMTY2MCwzMTY2MywzMTY2NCwzMTY2NiwzMTY2OSwzMTY3MCwzMTY3NCwzMTY3NSwzMTY3NiwzMTY3NywzMTY4MiwzMTY4NSwzMTY4OCwzMTY5MCwzMTcwMCwzMTcwMiwzMTcwMywzMTcwNSwzMTcwNiwzMTcwNywzMTcyMCwzMTcyMiwzMTczMCwzMTczMiwzMTczMywzMTczNiwzMTczNywzMTczOCwzMTc0MCwzMTc0MiwzMTc0NSwzMTc0NiwzMTc0NywzMTc0OCwzMTc1MCwzMTc1MywzMTc1NSwzMTc1NiwzMTc1OCwzMTc1OSwzMTc2OSwzMTc3MSwzMTc3NiwzMTc4MSwzMTc4MiwzMTc4NCwzMTc4OCwzMTc5MywzMTc5NSwzMTc5NiwzMTc5OCwzMTgwMSwzMTgwMiwzMTgxNCwzMTgxOCwzMTgyOSwzMTgyNSwzMTgyNiwzMTgyNywzMTgzMywzMTgzNCwzMTgzNSwzMTgzNiwzMTgzNywzMTgzOCwzMTg0MSwzMTg0MywzMTg0NywzMTg0OSwzMTg1MywzMTg1NCwzMTg1NiwzMTg1OCwzMTg2NSwzMTg2OCwzMTg2OSwzMTg3OCwzMTg3OSwzMTg4NywzMTg5MiwzMTkwMiwzMTkwNCwzMTkxMCwzMTkyMCwzMTkyNiwzMTkyNywzMTkzMCwzMTkzMSwzMTkzMiwzMTkzNSwzMTk0MCwzMTk0MywzMTk0NCwzMTk0NSwzMTk0OSwzMTk1MSwzMTk1NSwzMTk1NiwzMTk1NywzMTk1OSwzMTk2MSwzMTk2MiwzMTk2NSwzMTk3NCwzMTk3NywzMTk3OSwzMTk4OSwzMjAwMywzMjAwNywzMjAwOCwzMjAwOSwzMjAxNSwzMjAxNywzMjAxOCwzMjAxOSwzMjAyMiwzMjAyOSwzMjAzMCwzMjAzNSwzMjAzOCwzMjA0MiwzMjA0NSwzMjA0OSwzMjA2MCwzMjA2MSwzMjA2MiwzMjA2NCwzMjA2NSwzMjA3MSwzMjA3MiwzMjA3NywzMjA4MSwzMjA4MywzMjA4NywzMjA4OSwzMjA5MCwzMjA5MiwzMjA5MywzMjEwMSwzMjEwMywzMjEwNiwzMjExMiwzMjEyMCwzMjEyMiwzMjEyMywzMjEyNywzMjEyOSwzMjEzMCwzMjEzMSwzMjEzMywzMjEzNCwzMjEzNiwzMjEzOSwzMjE0MCwzMjE0MSwzMjE0NSwzMjE1MCwzMjE1MSwzMjE1NywzMjE1OCwzMjE2NiwzMjE2NywzMjE3MCwzMjE3OSwzMjE4MiwzMjE4MywzMjE4NSwzMjE5NCwzMjE5NSwzMjE5NiwzMjE5NywzMjE5OCwzMjIwNCwzMjIwNSwzMjIwNiwzMjIxNSwzMjIxNywzMjI1NiwzMjIyNiwzMjIyOSwzMjIzMCwzMjIzNCwzMjIzNSwzMjIzNywzMjI0MSwzMjI0NSwzMjI0NiwzMjI0OSwzMjI1MCwzMjI2NCwzMjI3MiwzMjI3MywzMjI3NywzMjI3OSwzMjI4NCwzMjI4NSwzMjI4OCwzMjI5NSwzMjI5NiwzMjMwMCwzMjMwMSwzMjMwMywzMjMwNywzMjMxMCwzMjMxOSwzMjMyNCwzMjMyNSwzMjMyNywzMjMzNCwzMjMzNiwzMjMzOCwzMjM0NCwzMjM1MSwzMjM1MywzMjM1NCwzMjM1NywzMjM2MywzMjM2NiwzMjM2NywzMjM3MSwzMjM3NiwzMjM4MiwzMjM4NSwzMjM5MCwzMjM5MSwzMjM5NCwzMjM5NywzMjQwMSwzMjQwNSwzMjQwOCwzMjQxMCwzMjQxMywzMjQxNCwzMjU3MiwzMjU3MSwzMjU3MywzMjU3NCwzMjU3NSwzMjU3OSwzMjU4MCwzMjU4MywzMjU5MSwzMjU5NCwzMjU5NSwzMjYwMywzMjYwNCwzMjYwNSwzMjYwOSwzMjYxMSwzMjYxMiwzMjYxMywzMjYxNCwzMjYyMSwzMjYyNSwzMjYzNywzMjYzOCwzMjYzOSwzMjY0MCwzMjY1MSwzMjY1MywzMjY1NSwzMjY1NiwzMjY1NywzMjY2MiwzMjY2MywzMjY2OCwzMjY3MywzMjY3NCwzMjY3OCwzMjY4MiwzMjY4NSwzMjY5MiwzMjcwMCwzMjcwMywzMjcwNCwzMjcwNywzMjcxMiwzMjcxOCwzMjcxOSwzMjczMSwzMjczNSwzMjczOSwzMjc0MSwzMjc0NCwzMjc0OCwzMjc1MCwzMjc1MSwzMjc1NCwzMjc2MiwzMjc2NSwzMjc2NiwzMjc2NywzMjc3NSwzMjc3NiwzMjc3OCwzMjc4MSwzMjc4MiwzMjc4MywzMjc4NSwzMjc4NywzMjc4OCwzMjc5MCwzMjc5NywzMjc5OCwzMjc5OSwzMjgwMCwzMjgwNCwzMjgwNiwzMjgxMiwzMjgxNCwzMjgxNiwzMjgyMCwzMjgyMSwzMjgyMywzMjgyNSwzMjgyNiwzMjgyOCwzMjgzMCwzMjgzMiwzMjgzNiwzMjg2NCwzMjg2OCwzMjg3MCwzMjg3NywzMjg4MSwzMjg4NSwzMjg5NywzMjkwNCwzMjkxMCwzMjkyNCwzMjkyNiwzMjkzNCwzMjkzNSwzMjkzOSwzMjk1MiwzMjk1MywzMjk2OCwzMjk3MywzMjk3NSwzMjk3OCwzMjk4MCwzMjk4MSwzMjk4MywzMjk4NCwzMjk5MiwzMzAwNSwzMzAwNiwzMzAwOCwzMzAxMCwzMzAxMSwzMzAxNCwzMzAxNywzMzAxOCwzMzAyMiwzMzAyNywzMzAzNSwzMzA0NiwzMzA0NywzMzA0OCwzMzA1MiwzMzA1NCwzMzA1NiwzMzA2MCwzMzA2MywzMzA2OCwzMzA3MiwzMzA3NywzMzA4MiwzMzA4NCwzMzA5MywzMzA5NSwzMzA5OCwzMzEwMCwzMzEwNiwzMzExMSwzMzEyMCwzMzEyMSwzMzEyNywzMzEyOCwzMzEyOSwzMzEzMywzMzEzNSwzMzE0MywzMzE1MywzMzE2OCwzMzE1NiwzMzE1NywzMzE1OCwzMzE2MywzMzE2NiwzMzE3NCwzMzE3NiwzMzE3OSwzMzE4MiwzMzE4NiwzMzE5OCwzMzIwMiwzMzIwNCwzMzIxMSwzMzIyNywzMzIxOSwzMzIyMSwzMzIyNiwzMzIzMCwzMzIzMSwzMzIzNywzMzIzOSwzMzI0MywzMzI0NSwzMzI0NiwzMzI0OSwzMzI1MiwzMzI1OSwzMzI2MCwzMzI2NCwzMzI2NSwzMzI2NiwzMzI2OSwzMzI3MCwzMzI3MiwzMzI3MywzMzI3NywzMzI3OSwzMzI4MCwzMzI4MywzMzI5NSwzMzI5OSwzMzMwMCwzMzMwNSwzMzMwNiwzMzMwOSwzMzMxMywzMzMxNCwzMzMyMCwzMzMzMCwzMzMzMiwzMzMzOCwzMzM0NywzMzM0OCwzMzM0OSwzMzM1MCwzMzM1NSwzMzM1OCwzMzM1OSwzMzM2MSwzMzM2NiwzMzM3MiwzMzM3NiwzMzM3OSwzMzM4MywzMzM4OSwzMzM5NiwzMzQwMywzMzQwNSwzMzQwNywzMzQwOCwzMzQwOSwzMzQxMSwzMzQxMiwzMzQxNSwzMzQxNywzMzQxOCwzMzQyMiwzMzQyNSwzMzQyOCwzMzQzMCwzMzQzMiwzMzQzNCwzMzQzNSwzMzQ0MCwzMzQ0MSwzMzQ0MywzMzQ0NCwzMzQ0NywzMzQ0OCwzMzQ0OSwzMzQ1MCwzMzQ1NCwzMzQ1NiwzMzQ1OCwzMzQ2MCwzMzQ2MywzMzQ2NiwzMzQ2OCwzMzQ3MCwzMzQ3MSwzMzQ3OCwzMzQ4OCwzMzQ5MywzMzQ5OCwzMzUwNCwzMzUwNiwzMzUwOCwzMzUxMiwzMzUxNCwzMzUxNywzMzUxOSwzMzUyNiwzMzUyNywzMzUzMywzMzUzNCwzMzUzNiwzMzUzNywzMzU0MywzMzU0NCwzMzU0NiwzMzU0NywzMzYyMCwzMzU2MywzMzU2NSwzMzU2NiwzMzU2NywzMzU2OSwzMzU3MCwzMzU4MCwzMzU4MSwzMzU4MiwzMzU4NCwzMzU4NywzMzU5MSwzMzU5NCwzMzU5NiwzMzU5NywzMzYwMiwzMzYwMywzMzYwNCwzMzYwNywzMzYxMywzMzYxNCwzMzYxNywzMzYyMSwzMzYyMiwzMzYyMywzMzY0OCwzMzY1NiwzMzY2MSwzMzY2MywzMzY2NCwzMzY2NiwzMzY2OCwzMzY3MCwzMzY3NywzMzY4MiwzMzY4NCwzMzY4NSwzMzY4OCwzMzY4OSwzMzY5MSwzMzY5MiwzMzY5MywzMzcwMiwzMzcwMywzMzcwNSwzMzcwOCwzMzcyNiwzMzcyNywzMzcyOCwzMzczNSwzMzczNywzMzc0MywzMzc0NCwzMzc0NSwzMzc0OCwzMzc1NywzMzYxOSwzMzc2OCwzMzc3MCwzMzc4MiwzMzc4NCwzMzc4NSwzMzc4OCwzMzc5MywzMzc5OCwzMzgwMiwzMzgwNywzMzgwOSwzMzgxMywzMzgxNywzMzcwOSwzMzgzOSwzMzg0OSwzMzg2MSwzMzg2MywzMzg2NCwzMzg2NiwzMzg2OSwzMzg3MSwzMzg3MywzMzg3NCwzMzg3OCwzMzg4MCwzMzg4MSwzMzg4MiwzMzg4NCwzMzg4OCwzMzg5MiwzMzg5MywzMzg5NSwzMzg5OCwzMzkwNCwzMzkwNywzMzkwOCwzMzkxMCwzMzkxMiwzMzkxNiwzMzkxNywzMzkyMSwzMzkyNSwzMzkzOCwzMzkzOSwzMzk0MSwzMzk1MCwzMzk1OCwzMzk2MCwzMzk2MSwzMzk2MiwzMzk2NywzMzk2OSwzMzk3MiwzMzk3OCwzMzk4MSwzMzk4MiwzMzk4NCwzMzk4NiwzMzk5MSwzMzk5MiwzMzk5NiwzMzk5OSwzNDAwMywzNDAxMiwzNDAyMywzNDAyNiwzNDAzMSwzNDAzMiwzNDAzMywzNDAzNCwzNDAzOSwzNDA5OCwzNDA0MiwzNDA0MywzNDA0NSwzNDA1MCwzNDA1MSwzNDA1NSwzNDA2MCwzNDA2MiwzNDA2NCwzNDA3NiwzNDA3OCwzNDA4MiwzNDA4MywzNDA4NCwzNDA4NSwzNDA4NywzNDA5MCwzNDA5MSwzNDA5NSwzNDA5OSwzNDEwMCwzNDEwMiwzNDExMSwzNDExOCwzNDEyNywzNDEyOCwzNDEyOSwzNDEzMCwzNDEzMSwzNDEzNCwzNDEzNywzNDE0MCwzNDE0MSwzNDE0MiwzNDE0MywzNDE0NCwzNDE0NSwzNDE0NiwzNDE0OCwzNDE1NSwzNDE1OSwzNDE2OSwzNDE3MCwzNDE3MSwzNDE3MywzNDE3NSwzNDE3NywzNDE4MSwzNDE4MiwzNDE4NSwzNDE4NywzNDE4OCwzNDE5MSwzNDE5NSwzNDIwMCwzNDIwNSwzNDIwNywzNDIwOCwzNDIxMCwzNDIxMywzNDIxNSwzNDIyOCwzNDIzMCwzNDIzMSwzNDIzMiwzNDIzNiwzNDIzNywzNDIzOCwzNDIzOSwzNDI0MiwzNDI0NywzNDI1MCwzNDI1MSwzNDI1NCwzNDIyMSwzNDI2NCwzNDI2NiwzNDI3MSwzNDI3MiwzNDI3OCwzNDI4MCwzNDI4NSwzNDI5MSwzNDI5NCwzNDMwMCwzNDMwMywzNDMwNCwzNDMwOCwzNDMwOSwzNDMxNywzNDMxOCwzNDMyMCwzNDMyMSwzNDMyMiwzNDMyOCwzNDMyOSwzNDMzMSwzNDMzNCwzNDMzNywzNDM0MywzNDM0NSwzNDM1OCwzNDM2MCwzNDM2MiwzNDM2NCwzNDM2NSwzNDM2OCwzNDM3MCwzNDM3NCwzNDM4NiwzNDM4NywzNDM5MCwzNDM5MSwzNDM5MiwzNDM5MywzNDM5NywzNDQwMCwzNDQwMSwzNDQwMiwzNDQwMywzNDQwNCwzNDQwOSwzNDQxMiwzNDQxNSwzNDQyMSwzNDQyMiwzNDQyMywzNDQyNiwzNDQ0NSwzNDQ0OSwzNDQ1NCwzNDQ1NiwzNDQ1OCwzNDQ2MCwzNDQ2NSwzNDQ3MCwzNDQ3MSwzNDQ3MiwzNDQ3NywzNDQ4MSwzNDQ4MywzNDQ4NCwzNDQ4NSwzNDQ4NywzNDQ4OCwzNDQ4OSwzNDQ5NSwzNDQ5NiwzNDQ5NywzNDQ5OSwzNDUwMSwzNDUxMywzNDUxNCwzNDUxNywzNDUxOSwzNDUyMiwzNDUyNCwzNDUyOCwzNDUzMSwzNDUzMywzNDUzNSwzNDQ0MCwzNDU1NCwzNDU1NiwzNDU1NywzNDU2NCwzNDU2NSwzNDU2NywzNDU3MSwzNDU3NCwzNDU3NSwzNDU3NiwzNDU3OSwzNDU4MCwzNDU4NSwzNDU5MCwzNDU5MSwzNDU5MywzNDU5NSwzNDYwMCwzNDYwNiwzNDYwNywzNDYwOSwzNDYxMCwzNDYxNywzNDYxOCwzNDYyMCwzNDYyMSwzNDYyMiwzNDYyNCwzNDYyNywzNDYyOSwzNDYzNywzNDY0OCwzNDY1MywzNDY1NywzNDY2MCwzNDY2MSwzNDY3MSwzNDY3MywzNDY3NCwzNDY4MywzNDY5MSwzNDY5MiwzNDY5MywzNDY5NCwzNDY5NSwzNDY5NiwzNDY5NywzNDY5OSwzNDcwMCwzNDcwNCwzNDcwNywzNDcwOSwzNDcxMSwzNDcxMiwzNDcxMywzNDcxOCwzNDcyMCwzNDcyMywzNDcyNywzNDczMiwzNDczMywzNDczNCwzNDczNywzNDc0MSwzNDc1MCwzNDc1MSwzNDc1MywzNDc2MCwzNDc2MSwzNDc2MiwzNDc2NiwzNDc3MywzNDc3NCwzNDc3NywzNDc3OCwzNDc4MCwzNDc4MywzNDc4NiwzNDc4NywzNDc4OCwzNDc5NCwzNDc5NSwzNDc5NywzNDgwMSwzNDgwMywzNDgwOCwzNDgxMCwzNDgxNSwzNDgxNywzNDgxOSwzNDgyMiwzNDgyNSwzNDgyNiwzNDgyNywzNDgzMiwzNDg0MSwzNDgzNCwzNDgzNSwzNDgzNiwzNDg0MCwzNDg0MiwzNDg0MywzNDg0NCwzNDg0NiwzNDg0NywzNDg1NiwzNDg2MSwzNDg2MiwzNDg2NCwzNDg2NiwzNDg2OSwzNDg3NCwzNDg3NiwzNDg4MSwzNDg4MywzNDg4NSwzNDg4OCwzNDg4OSwzNDg5MCwzNDg5MSwzNDg5NCwzNDg5NywzNDkwMSwzNDkwMiwzNDkwNCwzNDkwNiwzNDkwOCwzNDkxMSwzNDkxMiwzNDkxNiwzNDkyMSwzNDkyOSwzNDkzNywzNDkzOSwzNDk0NCwzNDk2OCwzNDk3MCwzNDk3MSwzNDk3MiwzNDk3NSwzNDk3NiwzNDk4NCwzNDk4NiwzNTAwMiwzNTAwNSwzNTAwNiwzNTAwOCwzNTAxOCwzNTAxOSwzNTAyMCwzNTAyMSwzNTAyMiwzNTAyNSwzNTAyNiwzNTAyNywzNTAzNSwzNTAzOCwzNTA0NywzNTA1NSwzNTA1NiwzNTA1NywzNTA2MSwzNTA2MywzNTA3MywzNTA3OCwzNTA4NSwzNTA4NiwzNTA4NywzNTA5MywzNTA5NCwzNTA5NiwzNTA5NywzNTA5OCwzNTEwMCwzNTEwNCwzNTExMCwzNTExMSwzNTExMiwzNTEyMCwzNTEyMSwzNTEyMiwzNTEyNSwzNTEyOSwzNTEzMCwzNTEzNCwzNTEzNiwzNTEzOCwzNTE0MSwzNTE0MiwzNTE0NSwzNTE1MSwzNTE1NCwzNTE1OSwzNTE2MiwzNTE2MywzNTE2NCwzNTE2OSwzNTE3MCwzNTE3MSwzNTE3OSwzNTE4MiwzNTE4NCwzNTE4NywzNTE4OSwzNTE5NCwzNTE5NSwzNTE5NiwzNTE5NywzNTIwOSwzNTIxMywzNTIxNiwzNTIyMCwzNTIyMSwzNTIyNywzNTIyOCwzNTIzMSwzNTIzMiwzNTIzNywzNTI0OCwzNTI1MiwzNTI1MywzNTI1NCwzNTI1NSwzNTI2MCwzNTI4NCwzNTI4NSwzNTI4NiwzNTI4NywzNTI4OCwzNTMwMSwzNTMwNSwzNTMwNywzNTMwOSwzNTMxMywzNTMxNSwzNTMxOCwzNTMyMSwzNTMyNSwzNTMyNywzNTMzMiwzNTMzMywzNTMzNSwzNTM0MywzNTM0NSwzNTM0NiwzNTM0OCwzNTM0OSwzNTM1OCwzNTM2MCwzNTM2MiwzNTM2NCwzNTM2NiwzNTM3MSwzNTM3MiwzNTM3NSwzNTM4MSwzNTM4MywzNTM4OSwzNTM5MCwzNTM5MiwzNTM5NSwzNTM5NywzNTM5OSwzNTQwMSwzNTQwNSwzNTQwNiwzNTQxMSwzNTQxNCwzNTQxNSwzNTQxNiwzNTQyMCwzNTQyMSwzNTQyNSwzNTQyOSwzNTQzMSwzNTQ0NSwzNTQ0NiwzNTQ0NywzNTQ0OSwzNTQ1MCwzNTQ1MSwzNTQ1NCwzNTQ1NSwzNTQ1NiwzNTQ1OSwzNTQ2MiwzNTQ2NywzNTQ3MSwzNTQ3MiwzNTQ3NCwzNTQ3OCwzNTQ3OSwzNTQ4MSwzNTQ4NywzNTQ5NSwzNTQ5NywzNTUwMiwzNTUwMywzNTUwNywzNTUxMCwzNTUxMSwzNTUxNSwzNTUxOCwzNTUyMywzNTUyNiwzNTUyOCwzNTUyOSwzNTUzMCwzNTUzNywzNTUzOSwzNTU0MCwzNTU0MSwzNTU0MywzNTU0OSwzNTU1MSwzNTU2NCwzNTU2OCwzNTU3MiwzNTU3MywzNTU3NCwzNTU4MCwzNTU4MywzNTU4OSwzNTU5MCwzNTU5NSwzNTYwMSwzNTYxMiwzNTYxNCwzNTYxNSwzNTU5NCwzNTYyOSwzNTYzMiwzNTYzOSwzNTY0NCwzNTY1MCwzNTY1MSwzNTY1MiwzNTY1MywzNTY1NCwzNTY1NiwzNTY2NiwzNTY2NywzNTY2OCwzNTY3MywzNTY2MSwzNTY3OCwzNTY4MywzNTY5MywzNTcwMiwzNTcwNCwzNTcwNSwzNTcwOCwzNTcxMCwzNTcxMywzNTcxNiwzNTcxNywzNTcyMywzNTcyNSwzNTcyNywzNTczMiwzNTczMywzNTc0MCwzNTc0MiwzNTc0MywzNTg5NiwzNTg5NywzNTkwMSwzNTkwMiwzNTkwOSwzNTkxMSwzNTkxMywzNTkxNSwzNTkxOSwzNTkyMSwzNTkyMywzNTkyNCwzNTkyNywzNTkyOCwzNTkzMSwzNTkzMywzNTkyOSwzNTkzOSwzNTk0MCwzNTk0MiwzNTk0NCwzNTk0NSwzNTk0OSwzNTk1NSwzNTk1NywzNTk1OCwzNTk2MywzNTk2NiwzNTk3NCwzNTk3NSwzNTk3OSwzNTk4NCwzNTk4NiwzNTk4NywzNTk5MywzNTk5NSwzNTk5NiwzNjAwNCwzNjAyNSwzNjAyNiwzNjAzNywzNjAzOCwzNjA0MSwzNjA0MywzNjA0NywzNjA1NCwzNjA1MywzNjA1NywzNjA2MSwzNjA2NSwzNjA3MiwzNjA3NiwzNjA3OSwzNjA4MCwzNjA4MiwzNjA4NSwzNjA4NywzNjA4OCwzNjA5NCwzNjA5NSwzNjA5NywzNjA5OSwzNjEwNSwzNjExNCwzNjExOSwzNjEyMywzNjE5NywzNjIwMSwzNjIwNCwzNjIwNiwzNjIyMywzNjIyNiwzNjIyOCwzNjIzMiwzNjIzNywzNjI0MCwzNjI0MSwzNjI0NSwzNjI1NCwzNjI1NSwzNjI1NiwzNjI2MiwzNjI2NywzNjI2OCwzNjI3MSwzNjI3NCwzNjI3NywzNjI3OSwzNjI4MSwzNjI4MywzNjI4OCwzNjI5MywzNjI5NCwzNjI5NSwzNjI5NiwzNjI5OCwzNjMwMiwzNjMwNSwzNjMwOCwzNjMwOSwzNjMxMSwzNjMxMywzNjMyNCwzNjMyNSwzNjMyNywzNjMzMiwzNjMzNiwzNjI4NCwzNjMzNywzNjMzOCwzNjM0MCwzNjM0OSwzNjM1MywzNjM1NiwzNjM1NywzNjM1OCwzNjM2MywzNjM2OSwzNjM3MiwzNjM3NCwzNjM4NCwzNjM4NSwzNjM4NiwzNjM4NywzNjM5MCwzNjM5MSwzNjQwMSwzNjQwMywzNjQwNiwzNjQwNywzNjQwOCwzNjQwOSwzNjQxMywzNjQxNiwzNjQxNywzNjQyNywzNjQyOSwzNjQzMCwzNjQzMSwzNjQzNiwzNjQ0MywzNjQ0NCwzNjQ0NSwzNjQ0NiwzNjQ0OSwzNjQ1MCwzNjQ1NywzNjQ2MCwzNjQ2MSwzNjQ2MywzNjQ2NCwzNjQ2NSwzNjQ3MywzNjQ3NCwzNjQ3NSwzNjQ4MiwzNjQ4MywzNjQ4OSwzNjQ5NiwzNjQ5OCwzNjUwMSwzNjUwNiwzNjUwNywzNjUwOSwzNjUxMCwzNjUxNCwzNjUxOSwzNjUyMSwzNjUyNSwzNjUyNiwzNjUzMSwzNjUzMywzNjUzOCwzNjUzOSwzNjU0NCwzNjU0NSwzNjU0NywzNjU0OCwzNjU1MSwzNjU1OSwzNjU2MSwzNjU2NCwzNjU3MiwzNjU4NCwzNjU5MCwzNjU5MiwzNjU5MywzNjU5OSwzNjYwMSwzNjYwMiwzNjU4OSwzNjYwOCwzNjYxMCwzNjYxNSwzNjYxNiwzNjYyMywzNjYyNCwzNjYzMCwzNjYzMSwzNjYzMiwzNjYzOCwzNjY0MCwzNjY0MSwzNjY0MywzNjY0NSwzNjY0NywzNjY0OCwzNjY1MiwzNjY1MywzNjY1NCwzNjY2MCwzNjY2MSwzNjY2MiwzNjY2MywzNjY2NiwzNjY3MiwzNjY3MywzNjY3NSwzNjY3OSwzNjY4NywzNjY4OSwzNjY5MCwzNjY5MSwzNjY5MiwzNjY5MywzNjY5NiwzNjcwMSwzNjcwMiwzNjcwOSwzNjc2NSwzNjc2OCwzNjc2OSwzNjc3MiwzNjc3MywzNjc3NCwzNjc4OSwzNjc5MCwzNjc5MiwzNjc5OCwzNjgwMCwzNjgwMSwzNjgwNiwzNjgxMCwzNjgxMSwzNjgxMywzNjgxNiwzNjgxOCwzNjgxOSwzNjgyMSwzNjgzMiwzNjgzNSwzNjgzNiwzNjg0MCwzNjg0NiwzNjg0OSwzNjg1MywzNjg1NCwzNjg1OSwzNjg2MiwzNjg2NiwzNjg2OCwzNjg3MiwzNjg3NiwzNjg4OCwzNjg5MSwzNjkwNCwzNjkwNSwzNjkxMSwzNjkwNiwzNjkwOCwzNjkwOSwzNjkxNSwzNjkxNiwzNjkxOSwzNjkyNywzNjkzMSwzNjkzMiwzNjk0MCwzNjk1NSwzNjk1NywzNjk2MiwzNjk2NiwzNjk2NywzNjk3MiwzNjk3NiwzNjk4MCwzNjk4NSwzNjk5NywzNzAwMCwzNzAwMywzNzAwNCwzNzAwNiwzNzAwOCwzNzAxMywzNzAxNSwzNzAxNiwzNzAxNywzNzAxOSwzNzAyNCwzNzAyNSwzNzAyNiwzNzAyOSwzNzA0MCwzNzA0MiwzNzA0MywzNzA0NCwzNzA0NiwzNzA1MywzNzA2OCwzNzA1NCwzNzA1OSwzNzA2MCwzNzA2MSwzNzA2MywzNzA2NCwzNzA3NywzNzA3OSwzNzA4MCwzNzA4MSwzNzA4NCwzNzA4NSwzNzA4NywzNzA5MywzNzA3NCwzNzExMCwzNzA5OSwzNzEwMywzNzEwNCwzNzEwOCwzNzExOCwzNzExOSwzNzEyMCwzNzEyNCwzNzEyNSwzNzEyNiwzNzEyOCwzNzEzMywzNzEzNiwzNzE0MCwzNzE0MiwzNzE0MywzNzE0NCwzNzE0NiwzNzE0OCwzNzE1MCwzNzE1MiwzNzE1NywzNzE1NCwzNzE1NSwzNzE1OSwzNzE2MSwzNzE2NiwzNzE2NywzNzE2OSwzNzE3MiwzNzE3NCwzNzE3NSwzNzE3NywzNzE3OCwzNzE4MCwzNzE4MSwzNzE4NywzNzE5MSwzNzE5MiwzNzE5OSwzNzIwMywzNzIwNywzNzIwOSwzNzIxMCwzNzIxMSwzNzIxNywzNzIyMCwzNzIyMywzNzIyOSwzNzIzNiwzNzI0MSwzNzI0MiwzNzI0MywzNzI0OSwzNzI1MSwzNzI1MywzNzI1NCwzNzI1OCwzNzI2MiwzNzI2NSwzNzI2NywzNzI2OCwzNzI2OSwzNzI3MiwzNzI3OCwzNzI4MSwzNzI4NiwzNzI4OCwzNzI5MiwzNzI5MywzNzI5NCwzNzI5NiwzNzI5NywzNzI5OCwzNzI5OSwzNzMwMiwzNzMwNywzNzMwOCwzNzMwOSwzNzMxMSwzNzMxNCwzNzMxNSwzNzMxNywzNzMzMSwzNzMzMiwzNzMzNSwzNzMzNywzNzMzOCwzNzM0MiwzNzM0OCwzNzM0OSwzNzM1MywzNzM1NCwzNzM1NiwzNzM1NywzNzM1OCwzNzM1OSwzNzM2MCwzNzM2MSwzNzM2NywzNzM2OSwzNzM3MSwzNzM3MywzNzM3NiwzNzM3NywzNzM4MCwzNzM4MSwzNzM4MiwzNzM4MywzNzM4NSwzNzM4NiwzNzM4OCwzNzM5MiwzNzM5NCwzNzM5NSwzNzM5OCwzNzQwMCwzNzQwNCwzNzQwNSwzNzQxMSwzNzQxMiwzNzQxMywzNzQxNCwzNzQxNiwzNzQyMiwzNzQyMywzNzQyNCwzNzQyNywzNzQyOSwzNzQzMCwzNzQzMiwzNzQzMywzNzQzNCwzNzQzNiwzNzQzOCwzNzQ0MCwzNzQ0MiwzNzQ0MywzNzQ0NiwzNzQ0NywzNzQ1MCwzNzQ1MywzNzQ1NCwzNzQ1NSwzNzQ1NywzNzQ2NCwzNzQ2NSwzNzQ2OCwzNzQ2OSwzNzQ3MiwzNzQ3MywzNzQ3NywzNzQ3OSwzNzQ4MCwzNzQ4MSwzNzQ4NiwzNzQ4NywzNzQ4OCwzNzQ5MywzNzQ5NCwzNzQ5NSwzNzQ5NiwzNzQ5NywzNzQ5OSwzNzUwMCwzNzUwMSwzNzUwMywzNzUxMiwzNzUxMywzNzUxNCwzNzUxNywzNzUxOCwzNzUyMiwzNzUyNywzNzUyOSwzNzUzNSwzNzUzNiwzNzU0MCwzNzU0MSwzNzU0MywzNzU0NCwzNzU0NywzNzU1MSwzNzU1NCwzNzU1OCwzNzU2MCwzNzU2MiwzNzU2MywzNzU2NCwzNzU2NSwzNzU2NywzNzU2OCwzNzU2OSwzNzU3MCwzNzU3MSwzNzU3MywzNzU3NCwzNzU3NSwzNzU3NiwzNzU3OSwzNzU4MCwzNzU4MSwzNzU4MiwzNzU4NCwzNzU4NywzNzU4OSwzNzU5MSwzNzU5MiwzNzU5MywzNzU5NiwzNzU5NywzNzU5OSwzNzYwMCwzNzYwMSwzNzYwMywzNzYwNSwzNzYwNywzNzYwOCwzNzYxMiwzNzYxNCwzNzYxNiwzNzYyNSwzNzYyNywzNzYzMSwzNzYzMiwzNzYzNCwzNzY0MCwzNzY0NSwzNzY0OSwzNzY1MiwzNzY1MywzNzY2MCwzNzY2MSwzNzY2MiwzNzY2MywzNzY2NSwzNzY2OCwzNzY2OSwzNzY3MSwzNzY3MywzNzY3NCwzNzY4MywzNzY4NCwzNzY4NiwzNzY4NywzNzcwMywzNzcwNCwzNzcwNSwzNzcxMiwzNzcxMywzNzcxNCwzNzcxNywzNzcxOSwzNzcyMCwzNzcyMiwzNzcyNiwzNzczMiwzNzczMywzNzczNSwzNzczNywzNzczOCwzNzc0MSwzNzc0MywzNzc0NCwzNzc0NSwzNzc0NywzNzc0OCwzNzc1MCwzNzc1NCwzNzc1NywzNzc1OSwzNzc2MCwzNzc2MSwzNzc2MiwzNzc2OCwzNzc3MCwzNzc3MSwzNzc3MywzNzc3NSwzNzc3OCwzNzc4MSwzNzc4NCwzNzc4NywzNzc5MCwzNzc5MywzNzc5NSwzNzc5NiwzNzc5OCwzNzgwMCwzNzgwMywzNzgxMiwzNzgxMywzNzgxNCwzNzgxOCwzNzgwMSwzNzgyNSwzNzgyOCwzNzgyOSwzNzgzMCwzNzgzMSwzNzgzMywzNzgzNCwzNzgzNSwzNzgzNiwzNzgzNywzNzg0MywzNzg0OSwzNzg1MiwzNzg1NCwzNzg1NSwzNzg1OCwzNzg2MiwzNzg2MywzNzg4MSwzNzg3OSwzNzg4MCwzNzg4MiwzNzg4MywzNzg4NSwzNzg4OSwzNzg5MCwzNzg5MiwzNzg5NiwzNzg5NywzNzkwMSwzNzkwMiwzNzkwMywzNzkwOSwzNzkxMCwzNzkxMSwzNzkxOSwzNzkzNCwzNzkzNSwzNzkzNywzNzkzOCwzNzkzOSwzNzk0MCwzNzk0NywzNzk1MSwzNzk0OSwzNzk1NSwzNzk1NywzNzk2MCwzNzk2MiwzNzk2NCwzNzk3MywzNzk3NywzNzk4MCwzNzk4MywzNzk4NSwzNzk4NywzNzk5MiwzNzk5NSwzNzk5NywzNzk5OCwzNzk5OSwzODAwMSwzODAwMiwzODAyMCwzODAxOSwzODI2NCwzODI2NSwzODI3MCwzODI3NiwzODI4MCwzODI4NCwzODI4NSwzODI4NiwzODMwMSwzODMwMiwzODMwMywzODMwNSwzODMxMCwzODMxMywzODMxNSwzODMxNiwzODMyNCwzODMyNiwzODMzMCwzODMzMywzODMzNSwzODM0MiwzODM0NCwzODM0NSwzODM0NywzODM1MiwzODM1MywzODM1NCwzODM1NSwzODM2MSwzODM2MiwzODM2NSwzODM2NiwzODM2NywzODM2OCwzODM3MiwzODM3NCwzODQyOSwzODQzMCwzODQzNCwzODQzNiwzODQzNywzODQzOCwzODQ0NCwzODQ0OSwzODQ1MSwzODQ1NSwzODQ1NiwzODQ1NywzODQ1OCwzODQ2MCwzODQ2MSwzODQ2NSwzODQ4MiwzODQ4NCwzODQ4NiwzODQ4NywzODQ4OCwzODQ5NywzODUxMCwzODUxNiwzODUyMywzODUyNCwzODUyNiwzODUyNywzODUyOSwzODUzMCwzODUzMSwzODUzMiwzODUzNywzODU0NSwzODU1MCwzODU1NCwzODU1NywzODU1OSwzODU2NCwzODU2NSwzODU2NiwzODU2OSwzODU3NCwzODU3NSwzODU3OSwzODU4NiwzODYwMiwzODYxMCwyMzk4NiwzODYxNiwzODYxOCwzODYyMSwzODYyMiwzODYyMywzODYzMywzODYzOSwzODY0MSwzODY1MCwzODY1OCwzODY1OSwzODY2MSwzODY2NSwzODY4MiwzODY4MywzODY4NSwzODY4OSwzODY5MCwzODY5MSwzODY5NiwzODcwNSwzODcwNywzODcyMSwzODcyMywzODczMCwzODczNCwzODczNSwzODc0MSwzODc0MywzODc0NCwzODc0NiwzODc0NywzODc1NSwzODc1OSwzODc2MiwzODc2NiwzODc3MSwzODc3NCwzODc3NSwzODc3NiwzODc3OSwzODc4MSwzODc4MywzODc4NCwzODc5MywzODgwNSwzODgwNiwzODgwNywzODgwOSwzODgxMCwzODgxNCwzODgxNSwzODgxOCwzODgyOCwzODgzMCwzODgzMywzODgzNCwzODgzNywzODgzOCwzODg0MCwzODg0MSwzODg0MiwzODg0NCwzODg0NiwzODg0NywzODg0OSwzODg1MiwzODg1MywzODg1NSwzODg1NywzODg1OCwzODg2MCwzODg2MSwzODg2MiwzODg2NCwzODg2NSwzODg2OCwzODg3MSwzODg3MiwzODg3MywzODg3NywzODg3OCwzODg4MCwzODg3NSwzODg4MSwzODg4NCwzODg5NSwzODg5NywzODkwMCwzODkwMywzODkwNCwzODkwNiwzODkxOSwzODkyMiwzODkzNywzODkyNSwzODkyNiwzODkzMiwzODkzNCwzODk0MCwzODk0MiwzODk0NCwzODk0NywzODk1MCwzODk1NSwzODk1OCwzODk1OSwzODk2MCwzODk2MiwzODk2MywzODk2NSwzODk0OSwzODk3NCwzODk4MCwzODk4MywzODk4NiwzODk5MywzODk5NCwzODk5NSwzODk5OCwzODk5OSwzOTAwMSwzOTAwMiwzOTAxMCwzOTAxMSwzOTAxMywzOTAxNCwzOTAxOCwzOTAyMCwzOTA4MywzOTA4NSwzOTA4NiwzOTA4OCwzOTA5MiwzOTA5NSwzOTA5NiwzOTA5OCwzOTA5OSwzOTEwMywzOTEwNiwzOTEwOSwzOTExMiwzOTExNiwzOTEzNywzOTEzOSwzOTE0MSwzOTE0MiwzOTE0MywzOTE0NiwzOTE1NSwzOTE1OCwzOTE3MCwzOTE3NSwzOTE3NiwzOTE4NSwzOTE4OSwzOTE5MCwzOTE5MSwzOTE5NCwzOTE5NSwzOTE5NiwzOTE5OSwzOTIwMiwzOTIwNiwzOTIwNywzOTIxMSwzOTIxNywzOTIxOCwzOTIxOSwzOTIyMCwzOTIyMSwzOTIyNSwzOTIyNiwzOTIyNywzOTIyOCwzOTIzMiwzOTIzMywzOTIzOCwzOTIzOSwzOTI0MCwzOTI0NSwzOTI0NiwzOTI1MiwzOTI1NiwzOTI1NywzOTI1OSwzOTI2MCwzOTI2MiwzOTI2MywzOTI2NCwzOTMyMywzOTMyNSwzOTMyNywzOTMzNCwzOTM0NCwzOTM0NSwzOTM0NiwzOTM0OSwzOTM1MywzOTM1NCwzOTM1NywzOTM1OSwzOTM2MywzOTM2OSwzOTM3OSwzOTM4MCwzOTM4NSwzOTM4NiwzOTM4OCwzOTM5MCwzOTM5OSwzOTQwMiwzOTQwMywzOTQwNCwzOTQwOCwzOTQxMiwzOTQxMywzOTQxNywzOTQyMSwzOTQyMiwzOTQyNiwzOTQyNywzOTQyOCwzOTQzNSwzOTQzNiwzOTQ0MCwzOTQ0MSwzOTQ0NiwzOTQ1NCwzOTQ1NiwzOTQ1OCwzOTQ1OSwzOTQ2MCwzOTQ2MywzOTQ2OSwzOTQ3MCwzOTQ3NSwzOTQ3NywzOTQ3OCwzOTQ4MCwzOTQ5NSwzOTQ4OSwzOTQ5MiwzOTQ5OCwzOTQ5OSwzOTUwMCwzOTUwMiwzOTUwNSwzOTUwOCwzOTUxMCwzOTUxNywzOTU5NCwzOTU5NiwzOTU5OCwzOTU5OSwzOTYwMiwzOTYwNCwzOTYwNSwzOTYwNiwzOTYwOSwzOTYxMSwzOTYxNCwzOTYxNSwzOTYxNywzOTYxOSwzOTYyMiwzOTYyNCwzOTYzMCwzOTYzMiwzOTYzNCwzOTYzNywzOTYzOCwzOTYzOSwzOTY0MywzOTY0NCwzOTY0OCwzOTY1MiwzOTY1MywzOTY1NSwzOTY1NywzOTY2MCwzOTY2NiwzOTY2NywzOTY2OSwzOTY3MywzOTY3NCwzOTY3NywzOTY3OSwzOTY4MCwzOTY4MSwzOTY4MiwzOTY4MywzOTY4NCwzOTY4NSwzOTY4OCwzOTY4OSwzOTY5MSwzOTY5MiwzOTY5MywzOTY5NCwzOTY5NiwzOTY5OCwzOTcwMiwzOTcwNSwzOTcwNywzOTcwOCwzOTcxMiwzOTcxOCwzOTcyMywzOTcyNSwzOTczMSwzOTczMiwzOTczMywzOTczNSwzOTczNywzOTczOCwzOTc0MSwzOTc1MiwzOTc1NSwzOTc1NiwzOTc2NSwzOTc2NiwzOTc2NywzOTc3MSwzOTc3NCwzOTc3NywzOTc3OSwzOTc4MSwzOTc4MiwzOTc4NCwzOTc4NiwzOTc4NywzOTc4OCwzOTc4OSwzOTc5MCwzOTc5NSwzOTc5NywzOTc5OSwzOTgwMCwzOTgwMSwzOTgwNywzOTgwOCwzOTgxMiwzOTgxMywzOTgxNCwzOTgxNSwzOTgxNywzOTgxOCwzOTgxOSwzOTgyMSwzOTgyMywzOTgyNCwzOTgyOCwzOTgzNCwzOTgzNywzOTgzOCwzOTg0NiwzOTg0NywzOTg0OSwzOTg1MiwzOTg1NiwzOTg1NywzOTg1OCwzOTg2MywzOTg2NCwzOTg2NywzOTg2OCwzOTg3MCwzOTg3MSwzOTg3MywzOTg3OSwzOTg4MCwzOTg4NiwzOTg4OCwzOTg5NSwzOTg5NiwzOTkwMSwzOTkwMywzOTkwOSwzOTkxMSwzOTkxNCwzOTkxNSwzOTkxOSwzOTkyMywzOTkyNywzOTkyOCwzOTkyOSwzOTkzMCwzOTkzMywzOTkzNSwzOTkzNiwzOTkzOCwzOTk0NywzOTk1MSwzOTk1MywzOTk1OCwzOTk2MCwzOTk2MSwzOTk2MiwzOTk2NCwzOTk2NiwzOTk3MCwzOTk3MSwzOTk3NCwzOTk3NSwzOTk3NiwzOTk3NywzOTk3OCwzOTk4NSwzOTk4OSwzOTk5MCwzOTk5MSwzOTk5Nyw0MDAwMSw0MDAwMyw0MDAwNCw0MDAwNSw0MDAwOSw0MDAxMCw0MDAxNCw0MDAxNSw0MDAxNiw0MDAxOSw0MDAyMCw0MDAyMiw0MDAyNCw0MDAyNyw0MDAyOSw0MDAzMCw0MDAzMSw0MDAzNSw0MDA0MSw0MDA0Miw0MDAyOCw0MDA0Myw0MDA0MCw0MDA0Niw0MDA0OCw0MDA1MCw0MDA1Myw0MDA1NSw0MDA1OSw0MDE2Niw0MDE3OCw0MDE4Myw0MDE4NSw0MDIwMyw0MDE5NCw0MDIwOSw0MDIxNSw0MDIxNiw0MDIyMCw0MDIyMSw0MDIyMiw0MDIzOSw0MDI0MCw0MDI0Miw0MDI0Myw0MDI0NCw0MDI1MCw0MDI1Miw0MDI2MSw0MDI1Myw0MDI1OCw0MDI1OSw0MDI2Myw0MDI2Niw0MDI3NSw0MDI3Niw0MDI4Nyw0MDI5MSw0MDI5MCw0MDI5Myw0MDI5Nyw0MDI5OCw0MDI5OSw0MDMwNCw0MDMxMCw0MDMxMSw0MDMxNSw0MDMxNiw0MDMxOCw0MDMyMyw0MDMyNCw0MDMyNiw0MDMzMCw0MDMzMyw0MDMzNCw0MDMzOCw0MDMzOSw0MDM0MSw0MDM0Miw0MDM0Myw0MDM0NCw0MDM1Myw0MDM2Miw0MDM2NCw0MDM2Niw0MDM2OSw0MDM3Myw0MDM3Nyw0MDM4MCw0MDM4Myw0MDM4Nyw0MDM5MSw0MDM5Myw0MDM5NCw0MDQwNCw0MDQwNSw0MDQwNiw0MDQwNyw0MDQxMCw0MDQxNCw0MDQxNSw0MDQxNiw0MDQyMSw0MDQyMyw0MDQyNSw0MDQyNyw0MDQzMCw0MDQzMiw0MDQzNSw0MDQzNiw0MDQ0Niw0MDQ1OCw0MDQ1MCw0MDQ1NSw0MDQ2Miw0MDQ2NCw0MDQ2NSw0MDQ2Niw0MDQ2OSw0MDQ3MCw0MDQ3Myw0MDQ3Niw0MDQ3Nyw0MDU3MCw0MDU3MSw0MDU3Miw0MDU3Niw0MDU3OCw0MDU3OSw0MDU4MCw0MDU4MSw0MDU4Myw0MDU5MCw0MDU5MSw0MDU5OCw0MDYwMCw0MDYwMyw0MDYwNiw0MDYxMiw0MDYxNiw0MDYyMCw0MDYyMiw0MDYyMyw0MDYyNCw0MDYyNyw0MDYyOCw0MDYyOSw0MDY0Niw0MDY0OCw0MDY1MSw0MDY2MSw0MDY3MSw0MDY3Niw0MDY3OSw0MDY4NCw0MDY4NSw0MDY4Niw0MDY4OCw0MDY4OSw0MDY5MCw0MDY5Myw0MDY5Niw0MDcwMyw0MDcwNiw0MDcwNyw0MDcxMyw0MDcxOSw0MDcyMCw0MDcyMSw0MDcyMiw0MDcyNCw0MDcyNiw0MDcyNyw0MDcyOSw0MDczMCw0MDczMSw0MDczNSw0MDczOCw0MDc0Miw0MDc0Niw0MDc0Nyw0MDc1MSw0MDc1Myw0MDc1NCw0MDc1Niw0MDc1OSw0MDc2MSw0MDc2Miw0MDc2NCw0MDc2NSw0MDc2Nyw0MDc2OSw0MDc3MSw0MDc3Miw0MDc3Myw0MDc3NCw0MDc3NSw0MDc4Nyw0MDc4OSw0MDc5MCw0MDc5MSw0MDc5Miw0MDc5NCw0MDc5Nyw0MDc5OCw0MDgwOCw0MDgwOSw0MDgxMyw0MDgxNCw0MDgxNSw0MDgxNiw0MDgxNyw0MDgxOSw0MDgyMSw0MDgyNiw0MDgyOSw0MDg0Nyw0MDg0OCw0MDg0OSw0MDg1MCw0MDg1Miw0MDg1NCw0MDg1NSw0MDg2Miw0MDg2NSw0MDg2Niw0MDg2Nyw0MDg2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFxuICBcImlibTg2NlwiOlsxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4Nyw5NjE3LDk2MTgsOTYxOSw5NDc0LDk1MDgsOTU2OSw5NTcwLDk1NTgsOTU1Nyw5NTcxLDk1NTMsOTU1OSw5NTY1LDk1NjQsOTU2Myw5NDg4LDk0OTIsOTUyNCw5NTE2LDk1MDAsOTQ3Miw5NTMyLDk1NjYsOTU2Nyw5NTYyLDk1NTYsOTU3Nyw5NTc0LDk1NjgsOTU1Miw5NTgwLDk1NzUsOTU3Niw5NTcyLDk1NzMsOTU2MSw5NTYwLDk1NTQsOTU1NSw5NTc5LDk1NzgsOTQ5Niw5NDg0LDk2MDgsOTYwNCw5NjEyLDk2MTYsOTYwMCwxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDEwMjUsMTEwNSwxMDI4LDExMDgsMTAzMSwxMTExLDEwMzgsMTExOCwxNzYsODcyOSwxODMsODczMCw4NDcwLDE2NCw5NjMyLDE2MF0sXG4gIFwiaXNvLTg4NTktMlwiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsNzI4LDMyMSwxNjQsMzE3LDM0NiwxNjcsMTY4LDM1MiwzNTAsMzU2LDM3NywxNzMsMzgxLDM3OSwxNzYsMjYxLDczMSwzMjIsMTgwLDMxOCwzNDcsNzExLDE4NCwzNTMsMzUxLDM1NywzNzgsNzMzLDM4MiwzODAsMzQwLDE5MywxOTQsMjU4LDE5NiwzMTMsMjYyLDE5OSwyNjgsMjAxLDI4MCwyMDMsMjgyLDIwNSwyMDYsMjcwLDI3MiwzMjMsMzI3LDIxMSwyMTIsMzM2LDIxNCwyMTUsMzQ0LDM2NiwyMTgsMzY4LDIyMCwyMjEsMzU0LDIyMywzNDEsMjI1LDIyNiwyNTksMjI4LDMxNCwyNjMsMjMxLDI2OSwyMzMsMjgxLDIzNSwyODMsMjM3LDIzOCwyNzEsMjczLDMyNCwzMjgsMjQzLDI0NCwzMzcsMjQ2LDI0NywzNDUsMzY3LDI1MCwzNjksMjUyLDI1MywzNTUsNzI5XSxcbiAgXCJpc28tODg1OS0zXCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI5NCw3MjgsMTYzLDE2NCxudWxsLDI5MiwxNjcsMTY4LDMwNCwzNTAsMjg2LDMwOCwxNzMsbnVsbCwzNzksMTc2LDI5NSwxNzgsMTc5LDE4MCwxODEsMjkzLDE4MywxODQsMzA1LDM1MSwyODcsMzA5LDE4OSxudWxsLDM4MCwxOTIsMTkzLDE5NCxudWxsLDE5NiwyNjYsMjY0LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LG51bGwsMjA5LDIxMCwyMTEsMjEyLDI4OCwyMTQsMjE1LDI4NCwyMTcsMjE4LDIxOSwyMjAsMzY0LDM0OCwyMjMsMjI0LDIyNSwyMjYsbnVsbCwyMjgsMjY3LDI2NSwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSxudWxsLDI0MSwyNDIsMjQzLDI0NCwyODksMjQ2LDI0NywyODUsMjQ5LDI1MCwyNTEsMjUyLDM2NSwzNDksNzI5XSxcbiAgXCJpc28tODg1OS00XCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCwzMTIsMzQyLDE2NCwyOTYsMzE1LDE2NywxNjgsMzUyLDI3NCwyOTAsMzU4LDE3MywzODEsMTc1LDE3NiwyNjEsNzMxLDM0MywxODAsMjk3LDMxNiw3MTEsMTg0LDM1MywyNzUsMjkxLDM1OSwzMzAsMzgyLDMzMSwyNTYsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMzAyLDI2OCwyMDEsMjgwLDIwMywyNzgsMjA1LDIwNiwyOTgsMjcyLDMyNSwzMzIsMzEwLDIxMiwyMTMsMjE0LDIxNSwyMTYsMzcwLDIxOCwyMTksMjIwLDM2MCwzNjIsMjIzLDI1NywyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwzMDMsMjY5LDIzMywyODEsMjM1LDI3OSwyMzcsMjM4LDI5OSwyNzMsMzI2LDMzMywzMTEsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwzNzEsMjUwLDI1MSwyNTIsMzYxLDM2Myw3MjldLFxuICBcImlzby04ODU5LTVcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTczLDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDg0NzAsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTY3LDExMTgsMTExOV0sXG4gIFwiaXNvLTg4NTktNlwiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCxudWxsLG51bGwsbnVsbCwxNjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNTQ4LDE3MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE1NjMsbnVsbCxudWxsLG51bGwsMTU2NyxudWxsLDE1NjksMTU3MCwxNTcxLDE1NzIsMTU3MywxNTc0LDE1NzUsMTU3NiwxNTc3LDE1NzgsMTU3OSwxNTgwLDE1ODEsMTU4MiwxNTgzLDE1ODQsMTU4NSwxNTg2LDE1ODcsMTU4OCwxNTg5LDE1OTAsMTU5MSwxNTkyLDE1OTMsMTU5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTYwMCwxNjAxLDE2MDIsMTYwMywxNjA0LDE2MDUsMTYwNiwxNjA3LDE2MDgsMTYwOSwxNjEwLDE2MTEsMTYxMiwxNjEzLDE2MTQsMTYxNSwxNjE2LDE2MTcsMTYxOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxcbiAgXCJpc28tODg1OS03XCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDgyMTYsODIxNywxNjMsODM2NCw4MzY3LDE2NiwxNjcsMTY4LDE2OSw4OTAsMTcxLDE3MiwxNzMsbnVsbCw4MjEzLDE3NiwxNzcsMTc4LDE3OSw5MDAsOTAxLDkwMiwxODMsOTA0LDkwNSw5MDYsMTg3LDkwOCwxODksOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSxudWxsLDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsbnVsbF0sXG4gIFwiaXNvLTg4NTktOFwiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCxudWxsLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMjE1LDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDI0NywxODcsMTg4LDE4OSwxOTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDgyMTUsMTQ4OCwxNDg5LDE0OTAsMTQ5MSwxNDkyLDE0OTMsMTQ5NCwxNDk1LDE0OTYsMTQ5NywxNDk4LDE0OTksMTUwMCwxNTAxLDE1MDIsMTUwMywxNTA0LDE1MDUsMTUwNiwxNTA3LDE1MDgsMTUwOSwxNTEwLDE1MTEsMTUxMiwxNTEzLDE1MTQsbnVsbCxudWxsLDgyMDYsODIwNyxudWxsXSxcbiAgXCJpc28tODg1OS0xMFwiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsMjc0LDI5MCwyOTgsMjk2LDMxMCwxNjcsMzE1LDI3MiwzNTIsMzU4LDM4MSwxNzMsMzYyLDMzMCwxNzYsMjYxLDI3NSwyOTEsMjk5LDI5NywzMTEsMTgzLDMxNiwyNzMsMzUzLDM1OSwzODIsODIxMywzNjMsMzMxLDI1NiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwzMDIsMjY4LDIwMSwyODAsMjAzLDI3OCwyMDUsMjA2LDIwNywyMDgsMzI1LDMzMiwyMTEsMjEyLDIxMywyMTQsMzYwLDIxNiwzNzAsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjU3LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDMwMywyNjksMjMzLDI4MSwyMzUsMjc5LDIzNywyMzgsMjM5LDI0MCwzMjYsMzMzLDI0MywyNDQsMjQ1LDI0NiwzNjEsMjQ4LDM3MSwyNTAsMjUxLDI1MiwyNTMsMjU0LDMxMl0sXG4gIFwiaXNvLTg4NTktMTNcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsODIyMSwxNjIsMTYzLDE2NCw4MjIyLDE2NiwxNjcsMjE2LDE2OSwzNDIsMTcxLDE3MiwxNzMsMTc0LDE5OCwxNzYsMTc3LDE3OCwxNzksODIyMCwxODEsMTgyLDE4MywyNDgsMTg1LDM0MywxODcsMTg4LDE4OSwxOTAsMjMwLDI2MCwzMDIsMjU2LDI2MiwxOTYsMTk3LDI4MCwyNzQsMjY4LDIwMSwzNzcsMjc4LDI5MCwzMTAsMjk4LDMxNSwzNTIsMzIzLDMyNSwyMTEsMzMyLDIxMywyMTQsMjE1LDM3MCwzMjEsMzQ2LDM2MiwyMjAsMzc5LDM4MSwyMjMsMjYxLDMwMywyNTcsMjYzLDIyOCwyMjksMjgxLDI3NSwyNjksMjMzLDM3OCwyNzksMjkxLDMxMSwyOTksMzE2LDM1MywzMjQsMzI2LDI0MywzMzMsMjQ1LDI0NiwyNDcsMzcxLDMyMiwzNDcsMzYzLDI1MiwzODAsMzgyLDgyMTddLFxuICBcImlzby04ODU5LTE0XCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDc2ODIsNzY4MywxNjMsMjY2LDI2Nyw3NjkwLDE2Nyw3ODA4LDE2OSw3ODEwLDc2OTEsNzkyMiwxNzMsMTc0LDM3Niw3NzEwLDc3MTEsMjg4LDI4OSw3NzQ0LDc3NDUsMTgyLDc3NjYsNzgwOSw3NzY3LDc4MTEsNzc3Niw3OTIzLDc4MTIsNzgxMyw3Nzc3LDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywzNzIsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsNzc4NiwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwzNzQsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwzNzMsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsNzc4NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywzNzUsMjU1XSxcbiAgXCJpc28tODg1OS0xNVwiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwxNjEsMTYyLDE2Myw4MzY0LDE2NSwzNTIsMTY3LDM1MywxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDM4MSwxODEsMTgyLDE4MywzODIsMTg1LDE4NiwxODcsMzM4LDMzOSwzNzYsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NV0sXG4gIFwiaXNvLTg4NTktMTZcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjYwLDI2MSwzMjEsODM2NCw4MjIyLDM1MiwxNjcsMzUzLDE2OSw1MzYsMTcxLDM3NywxNzMsMzc4LDM3OSwxNzYsMTc3LDI2OCwzMjIsMzgxLDgyMjEsMTgyLDE4MywzODIsMjY5LDUzNywxODcsMzM4LDMzOSwzNzYsMzgwLDE5MiwxOTMsMTk0LDI1OCwxOTYsMjYyLDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyNzIsMzIzLDIxMCwyMTEsMjEyLDMzNiwyMTQsMzQ2LDM2OCwyMTcsMjE4LDIxOSwyMjAsMjgwLDUzOCwyMjMsMjI0LDIyNSwyMjYsMjU5LDIyOCwyNjMsMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI3MywzMjQsMjQyLDI0MywyNDQsMzM3LDI0NiwzNDcsMzY5LDI0OSwyNTAsMjUxLDI1MiwyODEsNTM5LDI1NV0sXG4gIFwia29pOC1yXCI6Wzk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksODk5Miw5NjMyLDg3MjksODczMCw4Nzc2LDg4MDQsODgwNSwxNjAsODk5MywxNzYsMTc4LDE4MywyNDcsOTU1Miw5NTUzLDk1NTQsMTEwNSw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSwxMDI1LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCwxNjksMTEwMiwxMDcyLDEwNzMsMTA5NCwxMDc2LDEwNzcsMTA5MiwxMDc1LDEwOTMsMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDExMDMsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDc4LDEwNzQsMTEwMCwxMDk5LDEwNzksMTA5NiwxMTAxLDEwOTcsMTA5NSwxMDk4LDEwNzAsMTA0MCwxMDQxLDEwNjIsMTA0NCwxMDQ1LDEwNjAsMTA0MywxMDYxLDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDcxLDEwNTYsMTA1NywxMDU4LDEwNTksMTA0NiwxMDQyLDEwNjgsMTA2NywxMDQ3LDEwNjQsMTA2OSwxMDY1LDEwNjMsMTA2Nl0sXG4gIFwia29pOC11XCI6Wzk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksODk5Miw5NjMyLDg3MjksODczMCw4Nzc2LDg4MDQsODgwNSwxNjAsODk5MywxNzYsMTc4LDE4MywyNDcsOTU1Miw5NTUzLDk1NTQsMTEwNSwxMTA4LDk1NTYsMTExMCwxMTExLDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2MywxMTY5LDExMTgsOTU2Niw5NTY3LDk1NjgsOTU2OSwxMDI1LDEwMjgsOTU3MSwxMDMwLDEwMzEsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDExNjgsMTAzOCwxNjksMTEwMiwxMDcyLDEwNzMsMTA5NCwxMDc2LDEwNzcsMTA5MiwxMDc1LDEwOTMsMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDExMDMsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDc4LDEwNzQsMTEwMCwxMDk5LDEwNzksMTA5NiwxMTAxLDEwOTcsMTA5NSwxMDk4LDEwNzAsMTA0MCwxMDQxLDEwNjIsMTA0NCwxMDQ1LDEwNjAsMTA0MywxMDYxLDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDcxLDEwNTYsMTA1NywxMDU4LDEwNTksMTA0NiwxMDQyLDEwNjgsMTA2NywxMDQ3LDEwNjQsMTA2OSwxMDY1LDEwNjMsMTA2Nl0sXG4gIFwibWFjaW50b3NoXCI6WzE5NiwxOTcsMTk5LDIwMSwyMDksMjE0LDIyMCwyMjUsMjI0LDIyNiwyMjgsMjI3LDIyOSwyMzEsMjMzLDIzMiwyMzQsMjM1LDIzNywyMzYsMjM4LDIzOSwyNDEsMjQzLDI0MiwyNDQsMjQ2LDI0NSwyNTAsMjQ5LDI1MSwyNTIsODIyNCwxNzYsMTYyLDE2MywxNjcsODIyNiwxODIsMjIzLDE3NCwxNjksODQ4MiwxODAsMTY4LDg4MDAsMTk4LDIxNiw4NzM0LDE3Nyw4ODA0LDg4MDUsMTY1LDE4MSw4NzA2LDg3MjEsODcxOSw5NjAsODc0NywxNzAsMTg2LDkzNywyMzAsMjQ4LDE5MSwxNjEsMTcyLDg3MzAsNDAyLDg3NzYsODcxMCwxNzEsMTg3LDgyMzAsMTYwLDE5MiwxOTUsMjEzLDMzOCwzMzksODIxMSw4MjEyLDgyMjAsODIyMSw4MjE2LDgyMTcsMjQ3LDk2NzQsMjU1LDM3Niw4MjYwLDgzNjQsODI0OSw4MjUwLDY0MjU3LDY0MjU4LDgyMjUsMTgzLDgyMTgsODIyMiw4MjQwLDE5NCwyMDIsMTkzLDIwMywyMDAsMjA1LDIwNiwyMDcsMjA0LDIxMSwyMTIsNjM3NDMsMjEwLDIxOCwyMTksMjE3LDMwNSw3MTAsNzMyLDE3NSw3MjgsNzI5LDczMCwxODQsNzMzLDczMSw3MTFdLFxuICBcIndpbmRvd3MtODc0XCI6WzgzNjQsMTI5LDEzMCwxMzEsMTMyLDgyMzAsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDM1ODUsMzU4NiwzNTg3LDM1ODgsMzU4OSwzNTkwLDM1OTEsMzU5MiwzNTkzLDM1OTQsMzU5NSwzNTk2LDM1OTcsMzU5OCwzNTk5LDM2MDAsMzYwMSwzNjAyLDM2MDMsMzYwNCwzNjA1LDM2MDYsMzYwNywzNjA4LDM2MDksMzYxMCwzNjExLDM2MTIsMzYxMywzNjE0LDM2MTUsMzYxNiwzNjE3LDM2MTgsMzYxOSwzNjIwLDM2MjEsMzYyMiwzNjIzLDM2MjQsMzYyNSwzNjI2LDM2MjcsMzYyOCwzNjI5LDM2MzAsMzYzMSwzNjMyLDM2MzMsMzYzNCwzNjM1LDM2MzYsMzYzNywzNjM4LDM2MzksMzY0MCwzNjQxLDM2NDIsbnVsbCxudWxsLG51bGwsbnVsbCwzNjQ3LDM2NDgsMzY0OSwzNjUwLDM2NTEsMzY1MiwzNjUzLDM2NTQsMzY1NSwzNjU2LDM2NTcsMzY1OCwzNjU5LDM2NjAsMzY2MSwzNjYyLDM2NjMsMzY2NCwzNjY1LDM2NjYsMzY2NywzNjY4LDM2NjksMzY3MCwzNjcxLDM2NzIsMzY3MywzNjc0LDM2NzUsbnVsbCxudWxsLG51bGwsbnVsbF0sXG4gIFwid2luZG93cy0xMjUwXCI6WzgzNjQsMTI5LDgyMTgsMTMxLDgyMjIsODIzMCw4MjI0LDgyMjUsMTM2LDgyNDAsMzUyLDgyNDksMzQ2LDM1NiwzODEsMzc3LDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1Miw4NDgyLDM1Myw4MjUwLDM0NywzNTcsMzgyLDM3OCwxNjAsNzExLDcyOCwzMjEsMTY0LDI2MCwxNjYsMTY3LDE2OCwxNjksMzUwLDE3MSwxNzIsMTczLDE3NCwzNzksMTc2LDE3Nyw3MzEsMzIyLDE4MCwxODEsMTgyLDE4MywxODQsMjYxLDM1MSwxODcsMzE3LDczMywzMTgsMzgwLDM0MCwxOTMsMTk0LDI1OCwxOTYsMzEzLDI2MiwxOTksMjY4LDIwMSwyODAsMjAzLDI4MiwyMDUsMjA2LDI3MCwyNzIsMzIzLDMyNywyMTEsMjEyLDMzNiwyMTQsMjE1LDM0NCwzNjYsMjE4LDM2OCwyMjAsMjIxLDM1NCwyMjMsMzQxLDIyNSwyMjYsMjU5LDIyOCwzMTQsMjYzLDIzMSwyNjksMjMzLDI4MSwyMzUsMjgzLDIzNywyMzgsMjcxLDI3MywzMjQsMzI4LDI0MywyNDQsMzM3LDI0NiwyNDcsMzQ1LDM2NywyNTAsMzY5LDI1MiwyNTMsMzU1LDcyOV0sXG4gIFwid2luZG93cy0xMjUxXCI6WzEwMjYsMTAyNyw4MjE4LDExMDcsODIyMiw4MjMwLDgyMjQsODIyNSw4MzY0LDgyNDAsMTAzMyw4MjQ5LDEwMzQsMTAzNiwxMDM1LDEwMzksMTEwNiw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1Miw4NDgyLDExMTMsODI1MCwxMTE0LDExMTYsMTExNSwxMTE5LDE2MCwxMDM4LDExMTgsMTAzMiwxNjQsMTE2OCwxNjYsMTY3LDEwMjUsMTY5LDEwMjgsMTcxLDE3MiwxNzMsMTc0LDEwMzEsMTc2LDE3NywxMDMwLDExMTAsMTE2OSwxODEsMTgyLDE4MywxMTA1LDg0NzAsMTEwOCwxODcsMTExMiwxMDI5LDExMDksMTExMSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzXSxcbiAgXCJ3aW5kb3dzLTEyNTJcIjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwzNTIsODI0OSwzMzgsMTQxLDM4MSwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0ODIsMzUzLDgyNTAsMzM5LDE1NywzODIsMzc2LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1XSxcbiAgXCJ3aW5kb3dzLTEyNTNcIjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSwxMzYsODI0MCwxMzgsODI0OSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMTU0LDgyNTAsMTU2LDE1NywxNTgsMTU5LDE2MCw5MDEsOTAyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSxudWxsLDE3MSwxNzIsMTczLDE3NCw4MjEzLDE3NiwxNzcsMTc4LDE3OSw5MDAsMTgxLDE4MiwxODMsOTA0LDkwNSw5MDYsMTg3LDkwOCwxODksOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSxudWxsLDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsbnVsbF0sXG4gIFwid2luZG93cy0xMjU0XCI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMzUyLDgyNDksMzM4LDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDM1Myw4MjUwLDMzOSwxNTcsMTU4LDM3NiwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyODYsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMzA0LDM1MCwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI4NywyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwzMDUsMzUxLDI1NV0sXG4gIFwid2luZG93cy0xMjU1XCI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMTM4LDgyNDksMTQwLDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDE1NCw4MjUwLDE1NiwxNTcsMTU4LDE1OSwxNjAsMTYxLDE2MiwxNjMsODM2MiwxNjUsMTY2LDE2NywxNjgsMTY5LDIxNSwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwyNDcsMTg3LDE4OCwxODksMTkwLDE5MSwxNDU2LDE0NTcsMTQ1OCwxNDU5LDE0NjAsMTQ2MSwxNDYyLDE0NjMsMTQ2NCwxNDY1LG51bGwsMTQ2NywxNDY4LDE0NjksMTQ3MCwxNDcxLDE0NzIsMTQ3MywxNDc0LDE0NzUsMTUyMCwxNTIxLDE1MjIsMTUyMywxNTI0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTQ4OCwxNDg5LDE0OTAsMTQ5MSwxNDkyLDE0OTMsMTQ5NCwxNDk1LDE0OTYsMTQ5NywxNDk4LDE0OTksMTUwMCwxNTAxLDE1MDIsMTUwMywxNTA0LDE1MDUsMTUwNiwxNTA3LDE1MDgsMTUwOSwxNTEwLDE1MTEsMTUxMiwxNTEzLDE1MTQsbnVsbCxudWxsLDgyMDYsODIwNyxudWxsXSxcbiAgXCJ3aW5kb3dzLTEyNTZcIjpbODM2NCwxNjYyLDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMTY1Nyw4MjQ5LDMzOCwxNjcwLDE2ODgsMTY3MiwxNzExLDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTcwNSw4NDgyLDE2ODEsODI1MCwzMzksODIwNCw4MjA1LDE3MjIsMTYwLDE1NDgsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzI2LDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE1NjMsMTg3LDE4OCwxODksMTkwLDE1NjcsMTcyOSwxNTY5LDE1NzAsMTU3MSwxNTcyLDE1NzMsMTU3NCwxNTc1LDE1NzYsMTU3NywxNTc4LDE1NzksMTU4MCwxNTgxLDE1ODIsMTU4MywxNTg0LDE1ODUsMTU4NiwxNTg3LDE1ODgsMTU4OSwxNTkwLDIxNSwxNTkxLDE1OTIsMTU5MywxNTk0LDE2MDAsMTYwMSwxNjAyLDE2MDMsMjI0LDE2MDQsMjI2LDE2MDUsMTYwNiwxNjA3LDE2MDgsMjMxLDIzMiwyMzMsMjM0LDIzNSwxNjA5LDE2MTAsMjM4LDIzOSwxNjExLDE2MTIsMTYxMywxNjE0LDI0NCwxNjE1LDE2MTYsMjQ3LDE2MTcsMjQ5LDE2MTgsMjUxLDI1Miw4MjA2LDgyMDcsMTc0Nl0sXG4gIFwid2luZG93cy0xMjU3XCI6WzgzNjQsMTI5LDgyMTgsMTMxLDgyMjIsODIzMCw4MjI0LDgyMjUsMTM2LDgyNDAsMTM4LDgyNDksMTQwLDE2OCw3MTEsMTg0LDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1Miw4NDgyLDE1NCw4MjUwLDE1NiwxNzUsNzMxLDE1OSwxNjAsbnVsbCwxNjIsMTYzLDE2NCxudWxsLDE2NiwxNjcsMjE2LDE2OSwzNDIsMTcxLDE3MiwxNzMsMTc0LDE5OCwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDI0OCwxODUsMzQzLDE4NywxODgsMTg5LDE5MCwyMzAsMjYwLDMwMiwyNTYsMjYyLDE5NiwxOTcsMjgwLDI3NCwyNjgsMjAxLDM3NywyNzgsMjkwLDMxMCwyOTgsMzE1LDM1MiwzMjMsMzI1LDIxMSwzMzIsMjEzLDIxNCwyMTUsMzcwLDMyMSwzNDYsMzYyLDIyMCwzNzksMzgxLDIyMywyNjEsMzAzLDI1NywyNjMsMjI4LDIyOSwyODEsMjc1LDI2OSwyMzMsMzc4LDI3OSwyOTEsMzExLDI5OSwzMTYsMzUzLDMyNCwzMjYsMjQzLDMzMywyNDUsMjQ2LDI0NywzNzEsMzIyLDM0NywzNjMsMjUyLDM4MCwzODIsNzI5XSxcbiAgXCJ3aW5kb3dzLTEyNThcIjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwxMzgsODI0OSwzMzgsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0ODIsMTU0LDgyNTAsMzM5LDE1NywxNTgsMzc2LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMjU4LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsNzY4LDIwNSwyMDYsMjA3LDI3MiwyMDksNzc3LDIxMSwyMTIsNDE2LDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCw0MzEsNzcxLDIyMywyMjQsMjI1LDIyNiwyNTksMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSw3NjksMjM3LDIzOCwyMzksMjczLDI0MSw4MDMsMjQzLDI0NCw0MTcsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDQzMiw4MzYzLDI1NV0sXG4gIFwieC1tYWMtY3lyaWxsaWNcIjpbMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDgyMjQsMTc2LDExNjgsMTYzLDE2Nyw4MjI2LDE4MiwxMDMwLDE3NCwxNjksODQ4MiwxMDI2LDExMDYsODgwMCwxMDI3LDExMDcsODczNCwxNzcsODgwNCw4ODA1LDExMTAsMTgxLDExNjksMTAzMiwxMDI4LDExMDgsMTAzMSwxMTExLDEwMzMsMTExMywxMDM0LDExMTQsMTExMiwxMDI5LDE3Miw4NzMwLDQwMiw4Nzc2LDg3MTAsMTcxLDE4Nyw4MjMwLDE2MCwxMDM1LDExMTUsMTAzNiwxMTE2LDExMDksODIxMSw4MjEyLDgyMjAsODIyMSw4MjE2LDgyMTcsMjQ3LDgyMjIsMTAzOCwxMTE4LDEwMzksMTExOSw4NDcwLDEwMjUsMTEwNSwxMTAzLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsODM2NF1cbn07XG59KHRoaXMpKTtcbiIsIi8vIFRoaXMgaXMgZnJlZSBhbmQgdW5lbmN1bWJlcmVkIHNvZnR3YXJlIHJlbGVhc2VkIGludG8gdGhlIHB1YmxpYyBkb21haW4uXG4vLyBTZWUgTElDRU5TRS5tZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuLy8gSWYgd2UncmUgaW4gbm9kZSByZXF1aXJlIGVuY29kaW5nLWluZGV4ZXMgYW5kIGF0dGFjaCBpdCB0byB0aGUgZ2xvYmFsLlxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEdsb2JhbCB8dGhpc3wgcmVxdWlyZWQgZm9yIHJlc29sdmluZyBpbmRleGVzIGluIG5vZGUuXG4gKiBAc3VwcHJlc3Mge2dsb2JhbFRoaXN9XG4gKi9cbmlmICh0eXBlb2YgbW9kdWxlICE9PSBcInVuZGVmaW5lZFwiICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gIHRoaXNbXCJlbmNvZGluZy1pbmRleGVzXCJdID1cbiAgICByZXF1aXJlKFwiLi9lbmNvZGluZy1pbmRleGVzLmpzXCIpW1wiZW5jb2RpbmctaW5kZXhlc1wiXTtcbn1cblxuKGZ1bmN0aW9uKGdsb2JhbCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy9cbiAgLy8gVXRpbGl0aWVzXG4gIC8vXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhIFRoZSBudW1iZXIgdG8gdGVzdC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pbiBUaGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgcmFuZ2UsIGluY2x1c2l2ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heCBUaGUgbWF4aW11bSB2YWx1ZSBpbiB0aGUgcmFuZ2UsIGluY2x1c2l2ZS5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBhID49IG1pbiBhbmQgYSA8PSBtYXguXG4gICAqL1xuICBmdW5jdGlvbiBpblJhbmdlKGEsIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIG1pbiA8PSBhICYmIGEgPD0gbWF4O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1lcmF0b3IuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkIFRoZSBkZW5vbWluYXRvci5cbiAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgcmVzdWx0IG9mIHRoZSBpbnRlZ2VyIGRpdmlzaW9uIG9mIG4gYnkgZC5cbiAgICovXG4gIGZ1bmN0aW9uIGRpdihuLCBkKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IobiAvIGQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Kn0gb1xuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqL1xuICBmdW5jdGlvbiBUb0RpY3Rpb25hcnkobykge1xuICAgIGlmIChvID09PSB1bmRlZmluZWQpIHJldHVybiB7fTtcbiAgICBpZiAobyA9PT0gT2JqZWN0KG8pKSByZXR1cm4gbztcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0NvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IHRvIGRpY3Rpb25hcnknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIElucHV0IHN0cmluZyBvZiBVVEYtMTYgY29kZSB1bml0cy5cbiAgICogQHJldHVybiB7IUFycmF5LjxudW1iZXI+fSBDb2RlIHBvaW50cy5cbiAgICovXG4gIGZ1bmN0aW9uIHN0cmluZ1RvQ29kZVBvaW50cyhzdHJpbmcpIHtcbiAgICAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tb2J0YWluLXVuaWNvZGVcblxuICAgIC8vIDEuIExldCBTIGJlIHRoZSBET01TdHJpbmcgdmFsdWUuXG4gICAgdmFyIHMgPSBTdHJpbmcoc3RyaW5nKTtcblxuICAgIC8vIDIuIExldCBuIGJlIHRoZSBsZW5ndGggb2YgUy5cbiAgICB2YXIgbiA9IHMubGVuZ3RoO1xuXG4gICAgLy8gMy4gSW5pdGlhbGl6ZSBpIHRvIDAuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgLy8gNC4gSW5pdGlhbGl6ZSBVIHRvIGJlIGFuIGVtcHR5IHNlcXVlbmNlIG9mIFVuaWNvZGUgY2hhcmFjdGVycy5cbiAgICB2YXIgdSA9IFtdO1xuXG4gICAgLy8gNS4gV2hpbGUgaSA8IG46XG4gICAgd2hpbGUgKGkgPCBuKSB7XG5cbiAgICAgIC8vIDEuIExldCBjIGJlIHRoZSBjb2RlIHVuaXQgaW4gUyBhdCBpbmRleCBpLlxuICAgICAgdmFyIGMgPSBzLmNoYXJDb2RlQXQoaSk7XG5cbiAgICAgIC8vIDIuIERlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgYzpcblxuICAgICAgLy8gYyA8IDB4RDgwMCBvciBjID4gMHhERkZGXG4gICAgICBpZiAoYyA8IDB4RDgwMCB8fCBjID4gMHhERkZGKSB7XG4gICAgICAgIC8vIEFwcGVuZCB0byBVIHRoZSBVbmljb2RlIGNoYXJhY3RlciB3aXRoIGNvZGUgcG9pbnQgYy5cbiAgICAgICAgdS5wdXNoKGMpO1xuICAgICAgfVxuXG4gICAgICAvLyAweERDMDAg4omkIGMg4omkIDB4REZGRlxuICAgICAgZWxzZSBpZiAoMHhEQzAwIDw9IGMgJiYgYyA8PSAweERGRkYpIHtcbiAgICAgICAgLy8gQXBwZW5kIHRvIFUgYSBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSLlxuICAgICAgICB1LnB1c2goMHhGRkZEKTtcbiAgICAgIH1cblxuICAgICAgLy8gMHhEODAwIOKJpCBjIOKJpCAweERCRkZcbiAgICAgIGVsc2UgaWYgKDB4RDgwMCA8PSBjICYmIGMgPD0gMHhEQkZGKSB7XG4gICAgICAgIC8vIDEuIElmIGkgPSBu4oiSMSwgdGhlbiBhcHBlbmQgdG8gVSBhIFUrRkZGRCBSRVBMQUNFTUVOVFxuICAgICAgICAvLyBDSEFSQUNURVIuXG4gICAgICAgIGlmIChpID09PSBuIC0gMSkge1xuICAgICAgICAgIHUucHVzaCgweEZGRkQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaSA8IG7iiJIxOlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAvLyAxLiBMZXQgZCBiZSB0aGUgY29kZSB1bml0IGluIFMgYXQgaW5kZXggaSsxLlxuICAgICAgICAgIHZhciBkID0gc3RyaW5nLmNoYXJDb2RlQXQoaSArIDEpO1xuXG4gICAgICAgICAgLy8gMi4gSWYgMHhEQzAwIOKJpCBkIOKJpCAweERGRkYsIHRoZW46XG4gICAgICAgICAgaWYgKDB4REMwMCA8PSBkICYmIGQgPD0gMHhERkZGKSB7XG4gICAgICAgICAgICAvLyAxLiBMZXQgYSBiZSBjICYgMHgzRkYuXG4gICAgICAgICAgICB2YXIgYSA9IGMgJiAweDNGRjtcblxuICAgICAgICAgICAgLy8gMi4gTGV0IGIgYmUgZCAmIDB4M0ZGLlxuICAgICAgICAgICAgdmFyIGIgPSBkICYgMHgzRkY7XG5cbiAgICAgICAgICAgIC8vIDMuIEFwcGVuZCB0byBVIHRoZSBVbmljb2RlIGNoYXJhY3RlciB3aXRoIGNvZGUgcG9pbnRcbiAgICAgICAgICAgIC8vIDJeMTYrMl4xMCphK2IuXG4gICAgICAgICAgICB1LnB1c2goMHgxMDAwMCArIChhIDw8IDEwKSArIGIpO1xuXG4gICAgICAgICAgICAvLyA0LiBTZXQgaSB0byBpKzEuXG4gICAgICAgICAgICBpICs9IDE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBkIDwgMHhEQzAwIG9yIGQgPiAweERGRkYuIEFwcGVuZCB0byBVIGFcbiAgICAgICAgICAvLyBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSLlxuICAgICAgICAgIGVsc2UgIHtcbiAgICAgICAgICAgIHUucHVzaCgweEZGRkQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBTZXQgaSB0byBpKzEuXG4gICAgICBpICs9IDE7XG4gICAgfVxuXG4gICAgLy8gNi4gUmV0dXJuIFUuXG4gICAgcmV0dXJuIHU7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNvZGVfcG9pbnRzIEFycmF5IG9mIGNvZGUgcG9pbnRzLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cmluZyBTdHJpbmcgb2YgVVRGLTE2IGNvZGUgdW5pdHMuXG4gICAqL1xuICBmdW5jdGlvbiBjb2RlUG9pbnRzVG9TdHJpbmcoY29kZV9wb2ludHMpIHtcbiAgICB2YXIgcyA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZV9wb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBjcCA9IGNvZGVfcG9pbnRzW2ldO1xuICAgICAgaWYgKGNwIDw9IDB4RkZGRikge1xuICAgICAgICBzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY3ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3AgLT0gMHgxMDAwMDtcbiAgICAgICAgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjcCA+PiAxMCkgKyAweEQ4MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3AgJiAweDNGRikgKyAweERDMDApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcztcbiAgfVxuXG5cbiAgLy9cbiAgLy8gSW1wbGVtZW50YXRpb24gb2YgRW5jb2Rpbmcgc3BlY2lmaWNhdGlvblxuICAvLyBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy9cbiAgLy9cblxuICAvL1xuICAvLyAzLiBUZXJtaW5vbG9neVxuICAvL1xuXG4gIC8qKlxuICAgKiBFbmQtb2Ytc3RyZWFtIGlzIGEgc3BlY2lhbCB0b2tlbiB0aGF0IHNpZ25pZmllcyBubyBtb3JlIHRva2Vuc1xuICAgKiBhcmUgaW4gdGhlIHN0cmVhbS5cbiAgICogQGNvbnN0XG4gICAqLyB2YXIgZW5kX29mX3N0cmVhbSA9IC0xO1xuXG4gIC8qKlxuICAgKiBBIHN0cmVhbSByZXByZXNlbnRzIGFuIG9yZGVyZWQgc2VxdWVuY2Ugb2YgdG9rZW5zLlxuICAgKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSB0b2tlbnMgQXJyYXkgb2YgdG9rZW5zIHRoYXQgcHJvdmlkZSB0aGVcbiAgICogc3RyZWFtLlxuICAgKi9cbiAgZnVuY3Rpb24gU3RyZWFtKHRva2Vucykge1xuICAgIC8qKiBAdHlwZSB7IUFycmF5LjxudW1iZXI+fSAqL1xuICAgIHRoaXMudG9rZW5zID0gW10uc2xpY2UuY2FsbCh0b2tlbnMpO1xuICB9XG5cbiAgU3RyZWFtLnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGVuZC1vZi1zdHJlYW0gaGFzIGJlZW4gaGl0LlxuICAgICAqL1xuICAgIGVuZE9mU3RyZWFtOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhdGhpcy50b2tlbnMubGVuZ3RoO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGEgdG9rZW4gaXMgcmVhZCBmcm9tIGEgc3RyZWFtLCB0aGUgZmlyc3QgdG9rZW4gaW4gdGhlXG4gICAgICogc3RyZWFtIG11c3QgYmUgcmV0dXJuZWQgYW5kIHN1YnNlcXVlbnRseSByZW1vdmVkLCBhbmRcbiAgICAgKiBlbmQtb2Ytc3RyZWFtIG11c3QgYmUgcmV0dXJuZWQgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBHZXQgdGhlIG5leHQgdG9rZW4gZnJvbSB0aGUgc3RyZWFtLCBvclxuICAgICAqIGVuZF9vZl9zdHJlYW0uXG4gICAgICovXG4gICAgIHJlYWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCF0aGlzLnRva2Vucy5sZW5ndGgpXG4gICAgICAgIHJldHVybiBlbmRfb2Zfc3RyZWFtO1xuICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5zaGlmdCgpO1xuICAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2hlbiBvbmUgb3IgbW9yZSB0b2tlbnMgYXJlIHByZXBlbmRlZCB0byBhIHN0cmVhbSwgdGhvc2UgdG9rZW5zXG4gICAgICogbXVzdCBiZSBpbnNlcnRlZCwgaW4gZ2l2ZW4gb3JkZXIsIGJlZm9yZSB0aGUgZmlyc3QgdG9rZW4gaW4gdGhlXG4gICAgICogc3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IHRva2VuIFRoZSB0b2tlbihzKSB0byBwcmVwZW5kIHRvIHRoZSBzdHJlYW0uXG4gICAgICovXG4gICAgcHJlcGVuZDogZnVuY3Rpb24odG9rZW4pIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRva2VuKSkge1xuICAgICAgICB2YXIgdG9rZW5zID0gLyoqQHR5cGUgeyFBcnJheS48bnVtYmVyPn0qLyh0b2tlbik7XG4gICAgICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoKVxuICAgICAgICAgIHRoaXMudG9rZW5zLnVuc2hpZnQodG9rZW5zLnBvcCgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnVuc2hpZnQodG9rZW4pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaGVuIG9uZSBvciBtb3JlIHRva2VucyBhcmUgcHVzaGVkIHRvIGEgc3RyZWFtLCB0aG9zZSB0b2tlbnNcbiAgICAgKiBtdXN0IGJlIGluc2VydGVkLCBpbiBnaXZlbiBvcmRlciwgYWZ0ZXIgdGhlIGxhc3QgdG9rZW4gaW4gdGhlXG4gICAgICogc3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IHRva2VuIFRoZSB0b2tlbnMocykgdG8gcHJlcGVuZCB0byB0aGUgc3RyZWFtLlxuICAgICAqL1xuICAgIHB1c2g6IGZ1bmN0aW9uKHRva2VuKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0b2tlbikpIHtcbiAgICAgICAgdmFyIHRva2VucyA9IC8qKkB0eXBlIHshQXJyYXkuPG51bWJlcj59Ki8odG9rZW4pO1xuICAgICAgICB3aGlsZSAodG9rZW5zLmxlbmd0aClcbiAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHRva2Vucy5zaGlmdCgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvL1xuICAvLyA0LiBFbmNvZGluZ3NcbiAgLy9cblxuICAvLyA0LjEgRW5jb2RlcnMgYW5kIGRlY29kZXJzXG5cbiAgLyoqIEBjb25zdCAqL1xuICB2YXIgZmluaXNoZWQgPSAtMTtcblxuICAvKipcbiAgICogQHBhcmFtIHtib29sZWFufSBmYXRhbCBJZiB0cnVlLCBkZWNvZGluZyBlcnJvcnMgcmFpc2UgYW4gZXhjZXB0aW9uLlxuICAgKiBAcGFyYW0ge251bWJlcj19IG9wdF9jb2RlX3BvaW50IE92ZXJyaWRlIHRoZSBzdGFuZGFyZCBmYWxsYmFjayBjb2RlIHBvaW50LlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2RlIHBvaW50IHRvIGluc2VydCBvbiBhIGRlY29kaW5nIGVycm9yLlxuICAgKi9cbiAgZnVuY3Rpb24gZGVjb2RlckVycm9yKGZhdGFsLCBvcHRfY29kZV9wb2ludCkge1xuICAgIGlmIChmYXRhbClcbiAgICAgIHRocm93IFR5cGVFcnJvcignRGVjb2RlciBlcnJvcicpO1xuICAgIHJldHVybiBvcHRfY29kZV9wb2ludCB8fCAweEZGRkQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgVGhlIGNvZGUgcG9pbnQgdGhhdCBjb3VsZCBub3QgYmUgZW5jb2RlZC5cbiAgICogQHJldHVybiB7bnVtYmVyfSBBbHdheXMgdGhyb3dzLCBubyB2YWx1ZSBpcyBhY3R1YWxseSByZXR1cm5lZC5cbiAgICovXG4gIGZ1bmN0aW9uIGVuY29kZXJFcnJvcihjb2RlX3BvaW50KSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdUaGUgY29kZSBwb2ludCAnICsgY29kZV9wb2ludCArICcgY291bGQgbm90IGJlIGVuY29kZWQuJyk7XG4gIH1cblxuICAvKiogQGludGVyZmFjZSAqL1xuICBmdW5jdGlvbiBEZWNvZGVyKCkge31cbiAgRGVjb2Rlci5wcm90b3R5cGUgPSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBUaGUgc3RyZWFtIG9mIGJ5dGVzIGJlaW5nIGRlY29kZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdGUgVGhlIG5leHQgYnl0ZSByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBUaGUgbmV4dCBjb2RlIHBvaW50KHMpXG4gICAgICogICAgIGRlY29kZWQsIG9yIG51bGwgaWYgbm90IGVub3VnaCBkYXRhIGV4aXN0cyBpbiB0aGUgaW5wdXRcbiAgICAgKiAgICAgc3RyZWFtIHRvIGRlY29kZSBhIGNvbXBsZXRlIGNvZGUgcG9pbnQsIG9yIHxmaW5pc2hlZHwuXG4gICAgICovXG4gICAgaGFuZGxlcjogZnVuY3Rpb24oc3RyZWFtLCBiaXRlKSB7fVxuICB9O1xuXG4gIC8qKiBAaW50ZXJmYWNlICovXG4gIGZ1bmN0aW9uIEVuY29kZXIoKSB7fVxuICBFbmNvZGVyLnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgY29kZSBwb2ludHMgYmVpbmcgZW5jb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQsIG9yIHxmaW5pc2hlZHwuXG4gICAgICovXG4gICAgaGFuZGxlcjogZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7fVxuICB9O1xuXG4gIC8vIDQuMiBOYW1lcyBhbmQgbGFiZWxzXG5cbiAgLy8gVE9ETzogRGVmaW5lIEB0eXBlZGVmIGZvciBFbmNvZGluZzoge25hbWU6c3RyaW5nLGxhYmVsczpBcnJheS48c3RyaW5nPn1cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWNvbXBpbGVyL2lzc3Vlcy8yNDdcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIFRoZSBlbmNvZGluZyBsYWJlbC5cbiAgICogQHJldHVybiB7P3tuYW1lOnN0cmluZyxsYWJlbHM6QXJyYXkuPHN0cmluZz59fVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0RW5jb2RpbmcobGFiZWwpIHtcbiAgICAvLyAxLiBSZW1vdmUgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBsYWJlbC5cbiAgICBsYWJlbCA9IFN0cmluZyhsYWJlbCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyAyLiBJZiBsYWJlbCBpcyBhbiBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBhbnkgb2YgdGhlXG4gICAgLy8gbGFiZWxzIGxpc3RlZCBpbiB0aGUgdGFibGUgYmVsb3csIHJldHVybiB0aGUgY29ycmVzcG9uZGluZ1xuICAgIC8vIGVuY29kaW5nLCBhbmQgZmFpbHVyZSBvdGhlcndpc2UuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsYWJlbF90b19lbmNvZGluZywgbGFiZWwpKSB7XG4gICAgICByZXR1cm4gbGFiZWxfdG9fZW5jb2RpbmdbbGFiZWxdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNvZGluZ3MgdGFibGU6IGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnL2VuY29kaW5ncy5qc29uXG4gICAqIEBjb25zdFxuICAgKiBAdHlwZSB7IUFycmF5Ljx7XG4gICAqICAgICAgICAgIGhlYWRpbmc6IHN0cmluZyxcbiAgICogICAgICAgICAgZW5jb2RpbmdzOiBBcnJheS48e25hbWU6c3RyaW5nLGxhYmVsczpBcnJheS48c3RyaW5nPn0+XG4gICAqICAgICAgICB9Pn1cbiAgICovXG4gIHZhciBlbmNvZGluZ3MgPSBbXG4gIHtcbiAgICBcImVuY29kaW5nc1wiOiBbXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcInVuaWNvZGUtMS0xLXV0Zi04XCIsXG4gICAgICAgICAgXCJ1dGYtOFwiLFxuICAgICAgICAgIFwidXRmOFwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcInV0Zi04XCJcbiAgICAgIH1cbiAgICBdLFxuICAgIFwiaGVhZGluZ1wiOiBcIlRoZSBFbmNvZGluZ1wiXG4gIH0sXG4gIHtcbiAgICBcImVuY29kaW5nc1wiOiBbXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcIjg2NlwiLFxuICAgICAgICAgIFwiY3A4NjZcIixcbiAgICAgICAgICBcImNzaWJtODY2XCIsXG4gICAgICAgICAgXCJpYm04NjZcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJpYm04NjZcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiY3Npc29sYXRpbjJcIixcbiAgICAgICAgICBcImlzby04ODU5LTJcIixcbiAgICAgICAgICBcImlzby1pci0xMDFcIixcbiAgICAgICAgICBcImlzbzg4NTktMlwiLFxuICAgICAgICAgIFwiaXNvODg1OTJcIixcbiAgICAgICAgICBcImlzb184ODU5LTJcIixcbiAgICAgICAgICBcImlzb184ODU5LTI6MTk4N1wiLFxuICAgICAgICAgIFwibDJcIixcbiAgICAgICAgICBcImxhdGluMlwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcImlzby04ODU5LTJcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiY3Npc29sYXRpbjNcIixcbiAgICAgICAgICBcImlzby04ODU5LTNcIixcbiAgICAgICAgICBcImlzby1pci0xMDlcIixcbiAgICAgICAgICBcImlzbzg4NTktM1wiLFxuICAgICAgICAgIFwiaXNvODg1OTNcIixcbiAgICAgICAgICBcImlzb184ODU5LTNcIixcbiAgICAgICAgICBcImlzb184ODU5LTM6MTk4OFwiLFxuICAgICAgICAgIFwibDNcIixcbiAgICAgICAgICBcImxhdGluM1wiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcImlzby04ODU5LTNcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiY3Npc29sYXRpbjRcIixcbiAgICAgICAgICBcImlzby04ODU5LTRcIixcbiAgICAgICAgICBcImlzby1pci0xMTBcIixcbiAgICAgICAgICBcImlzbzg4NTktNFwiLFxuICAgICAgICAgIFwiaXNvODg1OTRcIixcbiAgICAgICAgICBcImlzb184ODU5LTRcIixcbiAgICAgICAgICBcImlzb184ODU5LTQ6MTk4OFwiLFxuICAgICAgICAgIFwibDRcIixcbiAgICAgICAgICBcImxhdGluNFwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcImlzby04ODU5LTRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiY3Npc29sYXRpbmN5cmlsbGljXCIsXG4gICAgICAgICAgXCJjeXJpbGxpY1wiLFxuICAgICAgICAgIFwiaXNvLTg4NTktNVwiLFxuICAgICAgICAgIFwiaXNvLWlyLTE0NFwiLFxuICAgICAgICAgIFwiaXNvODg1OS01XCIsXG4gICAgICAgICAgXCJpc284ODU5NVwiLFxuICAgICAgICAgIFwiaXNvXzg4NTktNVwiLFxuICAgICAgICAgIFwiaXNvXzg4NTktNToxOTg4XCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwiaXNvLTg4NTktNVwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJhcmFiaWNcIixcbiAgICAgICAgICBcImFzbW8tNzA4XCIsXG4gICAgICAgICAgXCJjc2lzbzg4NTk2ZVwiLFxuICAgICAgICAgIFwiY3Npc284ODU5NmlcIixcbiAgICAgICAgICBcImNzaXNvbGF0aW5hcmFiaWNcIixcbiAgICAgICAgICBcImVjbWEtMTE0XCIsXG4gICAgICAgICAgXCJpc28tODg1OS02XCIsXG4gICAgICAgICAgXCJpc28tODg1OS02LWVcIixcbiAgICAgICAgICBcImlzby04ODU5LTYtaVwiLFxuICAgICAgICAgIFwiaXNvLWlyLTEyN1wiLFxuICAgICAgICAgIFwiaXNvODg1OS02XCIsXG4gICAgICAgICAgXCJpc284ODU5NlwiLFxuICAgICAgICAgIFwiaXNvXzg4NTktNlwiLFxuICAgICAgICAgIFwiaXNvXzg4NTktNjoxOTg3XCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwiaXNvLTg4NTktNlwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJjc2lzb2xhdGluZ3JlZWtcIixcbiAgICAgICAgICBcImVjbWEtMTE4XCIsXG4gICAgICAgICAgXCJlbG90XzkyOFwiLFxuICAgICAgICAgIFwiZ3JlZWtcIixcbiAgICAgICAgICBcImdyZWVrOFwiLFxuICAgICAgICAgIFwiaXNvLTg4NTktN1wiLFxuICAgICAgICAgIFwiaXNvLWlyLTEyNlwiLFxuICAgICAgICAgIFwiaXNvODg1OS03XCIsXG4gICAgICAgICAgXCJpc284ODU5N1wiLFxuICAgICAgICAgIFwiaXNvXzg4NTktN1wiLFxuICAgICAgICAgIFwiaXNvXzg4NTktNzoxOTg3XCIsXG4gICAgICAgICAgXCJzdW5fZXVfZ3JlZWtcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJpc28tODg1OS03XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImNzaXNvODg1OThlXCIsXG4gICAgICAgICAgXCJjc2lzb2xhdGluaGVicmV3XCIsXG4gICAgICAgICAgXCJoZWJyZXdcIixcbiAgICAgICAgICBcImlzby04ODU5LThcIixcbiAgICAgICAgICBcImlzby04ODU5LTgtZVwiLFxuICAgICAgICAgIFwiaXNvLWlyLTEzOFwiLFxuICAgICAgICAgIFwiaXNvODg1OS04XCIsXG4gICAgICAgICAgXCJpc284ODU5OFwiLFxuICAgICAgICAgIFwiaXNvXzg4NTktOFwiLFxuICAgICAgICAgIFwiaXNvXzg4NTktODoxOTg4XCIsXG4gICAgICAgICAgXCJ2aXN1YWxcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJpc28tODg1OS04XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImNzaXNvODg1OThpXCIsXG4gICAgICAgICAgXCJpc28tODg1OS04LWlcIixcbiAgICAgICAgICBcImxvZ2ljYWxcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJpc28tODg1OS04LWlcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiY3Npc29sYXRpbjZcIixcbiAgICAgICAgICBcImlzby04ODU5LTEwXCIsXG4gICAgICAgICAgXCJpc28taXItMTU3XCIsXG4gICAgICAgICAgXCJpc284ODU5LTEwXCIsXG4gICAgICAgICAgXCJpc284ODU5MTBcIixcbiAgICAgICAgICBcImw2XCIsXG4gICAgICAgICAgXCJsYXRpbjZcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJpc28tODg1OS0xMFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJpc28tODg1OS0xM1wiLFxuICAgICAgICAgIFwiaXNvODg1OS0xM1wiLFxuICAgICAgICAgIFwiaXNvODg1OTEzXCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwiaXNvLTg4NTktMTNcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiaXNvLTg4NTktMTRcIixcbiAgICAgICAgICBcImlzbzg4NTktMTRcIixcbiAgICAgICAgICBcImlzbzg4NTkxNFwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcImlzby04ODU5LTE0XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImNzaXNvbGF0aW45XCIsXG4gICAgICAgICAgXCJpc28tODg1OS0xNVwiLFxuICAgICAgICAgIFwiaXNvODg1OS0xNVwiLFxuICAgICAgICAgIFwiaXNvODg1OTE1XCIsXG4gICAgICAgICAgXCJpc29fODg1OS0xNVwiLFxuICAgICAgICAgIFwibDlcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJpc28tODg1OS0xNVwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJpc28tODg1OS0xNlwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcImlzby04ODU5LTE2XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImNza29pOHJcIixcbiAgICAgICAgICBcImtvaVwiLFxuICAgICAgICAgIFwia29pOFwiLFxuICAgICAgICAgIFwia29pOC1yXCIsXG4gICAgICAgICAgXCJrb2k4X3JcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJrb2k4LXJcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwia29pOC1ydVwiLFxuICAgICAgICAgIFwia29pOC11XCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwia29pOC11XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImNzbWFjaW50b3NoXCIsXG4gICAgICAgICAgXCJtYWNcIixcbiAgICAgICAgICBcIm1hY2ludG9zaFwiLFxuICAgICAgICAgIFwieC1tYWMtcm9tYW5cIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJtYWNpbnRvc2hcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiZG9zLTg3NFwiLFxuICAgICAgICAgIFwiaXNvLTg4NTktMTFcIixcbiAgICAgICAgICBcImlzbzg4NTktMTFcIixcbiAgICAgICAgICBcImlzbzg4NTkxMVwiLFxuICAgICAgICAgIFwidGlzLTYyMFwiLFxuICAgICAgICAgIFwid2luZG93cy04NzRcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJ3aW5kb3dzLTg3NFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJjcDEyNTBcIixcbiAgICAgICAgICBcIndpbmRvd3MtMTI1MFwiLFxuICAgICAgICAgIFwieC1jcDEyNTBcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJ3aW5kb3dzLTEyNTBcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiY3AxMjUxXCIsXG4gICAgICAgICAgXCJ3aW5kb3dzLTEyNTFcIixcbiAgICAgICAgICBcIngtY3AxMjUxXCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwid2luZG93cy0xMjUxXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImFuc2lfeDMuNC0xOTY4XCIsXG4gICAgICAgICAgXCJhc2NpaVwiLFxuICAgICAgICAgIFwiY3AxMjUyXCIsXG4gICAgICAgICAgXCJjcDgxOVwiLFxuICAgICAgICAgIFwiY3Npc29sYXRpbjFcIixcbiAgICAgICAgICBcImlibTgxOVwiLFxuICAgICAgICAgIFwiaXNvLTg4NTktMVwiLFxuICAgICAgICAgIFwiaXNvLWlyLTEwMFwiLFxuICAgICAgICAgIFwiaXNvODg1OS0xXCIsXG4gICAgICAgICAgXCJpc284ODU5MVwiLFxuICAgICAgICAgIFwiaXNvXzg4NTktMVwiLFxuICAgICAgICAgIFwiaXNvXzg4NTktMToxOTg3XCIsXG4gICAgICAgICAgXCJsMVwiLFxuICAgICAgICAgIFwibGF0aW4xXCIsXG4gICAgICAgICAgXCJ1cy1hc2NpaVwiLFxuICAgICAgICAgIFwid2luZG93cy0xMjUyXCIsXG4gICAgICAgICAgXCJ4LWNwMTI1MlwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcIndpbmRvd3MtMTI1MlwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJjcDEyNTNcIixcbiAgICAgICAgICBcIndpbmRvd3MtMTI1M1wiLFxuICAgICAgICAgIFwieC1jcDEyNTNcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJ3aW5kb3dzLTEyNTNcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiY3AxMjU0XCIsXG4gICAgICAgICAgXCJjc2lzb2xhdGluNVwiLFxuICAgICAgICAgIFwiaXNvLTg4NTktOVwiLFxuICAgICAgICAgIFwiaXNvLWlyLTE0OFwiLFxuICAgICAgICAgIFwiaXNvODg1OS05XCIsXG4gICAgICAgICAgXCJpc284ODU5OVwiLFxuICAgICAgICAgIFwiaXNvXzg4NTktOVwiLFxuICAgICAgICAgIFwiaXNvXzg4NTktOToxOTg5XCIsXG4gICAgICAgICAgXCJsNVwiLFxuICAgICAgICAgIFwibGF0aW41XCIsXG4gICAgICAgICAgXCJ3aW5kb3dzLTEyNTRcIixcbiAgICAgICAgICBcIngtY3AxMjU0XCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwid2luZG93cy0xMjU0XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImNwMTI1NVwiLFxuICAgICAgICAgIFwid2luZG93cy0xMjU1XCIsXG4gICAgICAgICAgXCJ4LWNwMTI1NVwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcIndpbmRvd3MtMTI1NVwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJjcDEyNTZcIixcbiAgICAgICAgICBcIndpbmRvd3MtMTI1NlwiLFxuICAgICAgICAgIFwieC1jcDEyNTZcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJ3aW5kb3dzLTEyNTZcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiY3AxMjU3XCIsXG4gICAgICAgICAgXCJ3aW5kb3dzLTEyNTdcIixcbiAgICAgICAgICBcIngtY3AxMjU3XCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwid2luZG93cy0xMjU3XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImNwMTI1OFwiLFxuICAgICAgICAgIFwid2luZG93cy0xMjU4XCIsXG4gICAgICAgICAgXCJ4LWNwMTI1OFwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcIndpbmRvd3MtMTI1OFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJ4LW1hYy1jeXJpbGxpY1wiLFxuICAgICAgICAgIFwieC1tYWMtdWtyYWluaWFuXCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwieC1tYWMtY3lyaWxsaWNcIlxuICAgICAgfVxuICAgIF0sXG4gICAgXCJoZWFkaW5nXCI6IFwiTGVnYWN5IHNpbmdsZS1ieXRlIGVuY29kaW5nc1wiXG4gIH0sXG4gIHtcbiAgICBcImVuY29kaW5nc1wiOiBbXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImNoaW5lc2VcIixcbiAgICAgICAgICBcImNzZ2IyMzEyXCIsXG4gICAgICAgICAgXCJjc2lzbzU4Z2IyMzEyODBcIixcbiAgICAgICAgICBcImdiMjMxMlwiLFxuICAgICAgICAgIFwiZ2JfMjMxMlwiLFxuICAgICAgICAgIFwiZ2JfMjMxMi04MFwiLFxuICAgICAgICAgIFwiZ2JrXCIsXG4gICAgICAgICAgXCJpc28taXItNThcIixcbiAgICAgICAgICBcIngtZ2JrXCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwiZ2JrXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImdiMTgwMzBcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJnYjE4MDMwXCJcbiAgICAgIH1cbiAgICBdLFxuICAgIFwiaGVhZGluZ1wiOiBcIkxlZ2FjeSBtdWx0aS1ieXRlIENoaW5lc2UgKHNpbXBsaWZpZWQpIGVuY29kaW5nc1wiXG4gIH0sXG4gIHtcbiAgICBcImVuY29kaW5nc1wiOiBbXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImJpZzVcIixcbiAgICAgICAgICBcImJpZzUtaGtzY3NcIixcbiAgICAgICAgICBcImNuLWJpZzVcIixcbiAgICAgICAgICBcImNzYmlnNVwiLFxuICAgICAgICAgIFwieC14LWJpZzVcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJiaWc1XCJcbiAgICAgIH1cbiAgICBdLFxuICAgIFwiaGVhZGluZ1wiOiBcIkxlZ2FjeSBtdWx0aS1ieXRlIENoaW5lc2UgKHRyYWRpdGlvbmFsKSBlbmNvZGluZ3NcIlxuICB9LFxuICB7XG4gICAgXCJlbmNvZGluZ3NcIjogW1xuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJjc2V1Y3BrZGZtdGphcGFuZXNlXCIsXG4gICAgICAgICAgXCJldWMtanBcIixcbiAgICAgICAgICBcIngtZXVjLWpwXCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwiZXVjLWpwXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImNzaXNvMjAyMmpwXCIsXG4gICAgICAgICAgXCJpc28tMjAyMi1qcFwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcImlzby0yMDIyLWpwXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImNzc2hpZnRqaXNcIixcbiAgICAgICAgICBcIm1zOTMyXCIsXG4gICAgICAgICAgXCJtc19rYW5qaVwiLFxuICAgICAgICAgIFwic2hpZnQtamlzXCIsXG4gICAgICAgICAgXCJzaGlmdF9qaXNcIixcbiAgICAgICAgICBcInNqaXNcIixcbiAgICAgICAgICBcIndpbmRvd3MtMzFqXCIsXG4gICAgICAgICAgXCJ4LXNqaXNcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJzaGlmdF9qaXNcIlxuICAgICAgfVxuICAgIF0sXG4gICAgXCJoZWFkaW5nXCI6IFwiTGVnYWN5IG11bHRpLWJ5dGUgSmFwYW5lc2UgZW5jb2RpbmdzXCJcbiAgfSxcbiAge1xuICAgIFwiZW5jb2RpbmdzXCI6IFtcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiY3NldWNrclwiLFxuICAgICAgICAgIFwiY3Nrc2M1NjAxMTk4N1wiLFxuICAgICAgICAgIFwiZXVjLWtyXCIsXG4gICAgICAgICAgXCJpc28taXItMTQ5XCIsXG4gICAgICAgICAgXCJrb3JlYW5cIixcbiAgICAgICAgICBcImtzX2NfNTYwMS0xOTg3XCIsXG4gICAgICAgICAgXCJrc19jXzU2MDEtMTk4OVwiLFxuICAgICAgICAgIFwia3NjNTYwMVwiLFxuICAgICAgICAgIFwia3NjXzU2MDFcIixcbiAgICAgICAgICBcIndpbmRvd3MtOTQ5XCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwiZXVjLWtyXCJcbiAgICAgIH1cbiAgICBdLFxuICAgIFwiaGVhZGluZ1wiOiBcIkxlZ2FjeSBtdWx0aS1ieXRlIEtvcmVhbiBlbmNvZGluZ3NcIlxuICB9LFxuICB7XG4gICAgXCJlbmNvZGluZ3NcIjogW1xuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJjc2lzbzIwMjJrclwiLFxuICAgICAgICAgIFwiaHotZ2ItMjMxMlwiLFxuICAgICAgICAgIFwiaXNvLTIwMjItY25cIixcbiAgICAgICAgICBcImlzby0yMDIyLWNuLWV4dFwiLFxuICAgICAgICAgIFwiaXNvLTIwMjIta3JcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJyZXBsYWNlbWVudFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJ1dGYtMTZiZVwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcInV0Zi0xNmJlXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcInV0Zi0xNlwiLFxuICAgICAgICAgIFwidXRmLTE2bGVcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJ1dGYtMTZsZVwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJ4LXVzZXItZGVmaW5lZFwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcIngtdXNlci1kZWZpbmVkXCJcbiAgICAgIH1cbiAgICBdLFxuICAgIFwiaGVhZGluZ1wiOiBcIkxlZ2FjeSBtaXNjZWxsYW5lb3VzIGVuY29kaW5nc1wiXG4gIH1cbiAgXTtcblxuICAvLyBMYWJlbCB0byBlbmNvZGluZyByZWdpc3RyeS5cbiAgLyoqIEB0eXBlIHtPYmplY3QuPHN0cmluZyx7bmFtZTpzdHJpbmcsbGFiZWxzOkFycmF5LjxzdHJpbmc+fT59ICovXG4gIHZhciBsYWJlbF90b19lbmNvZGluZyA9IHt9O1xuICBlbmNvZGluZ3MuZm9yRWFjaChmdW5jdGlvbihjYXRlZ29yeSkge1xuICAgIGNhdGVnb3J5LmVuY29kaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKGVuY29kaW5nKSB7XG4gICAgICBlbmNvZGluZy5sYWJlbHMuZm9yRWFjaChmdW5jdGlvbihsYWJlbCkge1xuICAgICAgICBsYWJlbF90b19lbmNvZGluZ1tsYWJlbF0gPSBlbmNvZGluZztcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBSZWdpc3RyeSBvZiBvZiBlbmNvZGVyL2RlY29kZXIgZmFjdG9yaWVzLCBieSBlbmNvZGluZyBuYW1lLlxuICAvKiogQHR5cGUge09iamVjdC48c3RyaW5nLCBmdW5jdGlvbih7ZmF0YWw6Ym9vbGVhbn0pOiBFbmNvZGVyPn0gKi9cbiAgdmFyIGVuY29kZXJzID0ge307XG4gIC8qKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIGZ1bmN0aW9uKHtmYXRhbDpib29sZWFufSk6IERlY29kZXI+fSAqL1xuICB2YXIgZGVjb2RlcnMgPSB7fTtcblxuICAvL1xuICAvLyA1LiBJbmRleGVzXG4gIC8vXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwb2ludGVyIFRoZSB8cG9pbnRlcnwgdG8gc2VhcmNoIGZvci5cbiAgICogQHBhcmFtIHsoIUFycmF5Ljw/bnVtYmVyPnx1bmRlZmluZWQpfSBpbmRleCBUaGUgfGluZGV4fCB0byBzZWFyY2ggd2l0aGluLlxuICAgKiBAcmV0dXJuIHs/bnVtYmVyfSBUaGUgY29kZSBwb2ludCBjb3JyZXNwb25kaW5nIHRvIHxwb2ludGVyfCBpbiB8aW5kZXh8LFxuICAgKiAgICAgb3IgbnVsbCBpZiB8Y29kZSBwb2ludHwgaXMgbm90IGluIHxpbmRleHwuXG4gICAqL1xuICBmdW5jdGlvbiBpbmRleENvZGVQb2ludEZvcihwb2ludGVyLCBpbmRleCkge1xuICAgIGlmICghaW5kZXgpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBpbmRleFtwb2ludGVyXSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IFRoZSB8Y29kZSBwb2ludHwgdG8gc2VhcmNoIGZvci5cbiAgICogQHBhcmFtIHshQXJyYXkuPD9udW1iZXI+fSBpbmRleCBUaGUgfGluZGV4fCB0byBzZWFyY2ggd2l0aGluLlxuICAgKiBAcmV0dXJuIHs/bnVtYmVyfSBUaGUgZmlyc3QgcG9pbnRlciBjb3JyZXNwb25kaW5nIHRvIHxjb2RlIHBvaW50fCBpblxuICAgKiAgICAgfGluZGV4fCwgb3IgbnVsbCBpZiB8Y29kZSBwb2ludHwgaXMgbm90IGluIHxpbmRleHwuXG4gICAqL1xuICBmdW5jdGlvbiBpbmRleFBvaW50ZXJGb3IoY29kZV9wb2ludCwgaW5kZXgpIHtcbiAgICB2YXIgcG9pbnRlciA9IGluZGV4LmluZGV4T2YoY29kZV9wb2ludCk7XG4gICAgcmV0dXJuIHBvaW50ZXIgPT09IC0xID8gbnVsbCA6IHBvaW50ZXI7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgaW5kZXguXG4gICAqIEByZXR1cm4geyghQXJyYXkuPG51bWJlcj58IUFycmF5LjxBcnJheS48bnVtYmVyPj4pfVxuICAgKiAgKi9cbiAgZnVuY3Rpb24gaW5kZXgobmFtZSkge1xuICAgIGlmICghKCdlbmNvZGluZy1pbmRleGVzJyBpbiBnbG9iYWwpKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIkluZGV4ZXMgbWlzc2luZy5cIiArXG4gICAgICAgICAgICAgICAgICBcIiBEaWQgeW91IGZvcmdldCB0byBpbmNsdWRlIGVuY29kaW5nLWluZGV4ZXMuanM/XCIpO1xuICAgIH1cbiAgICByZXR1cm4gZ2xvYmFsWydlbmNvZGluZy1pbmRleGVzJ11bbmFtZV07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBvaW50ZXIgVGhlIHxwb2ludGVyfCB0byBzZWFyY2ggZm9yIGluIHRoZSBnYjE4MDMwIGluZGV4LlxuICAgKiBAcmV0dXJuIHs/bnVtYmVyfSBUaGUgY29kZSBwb2ludCBjb3JyZXNwb25kaW5nIHRvIHxwb2ludGVyfCBpbiB8aW5kZXh8LFxuICAgKiAgICAgb3IgbnVsbCBpZiB8Y29kZSBwb2ludHwgaXMgbm90IGluIHRoZSBnYjE4MDMwIGluZGV4LlxuICAgKi9cbiAgZnVuY3Rpb24gaW5kZXhHQjE4MDMwUmFuZ2VzQ29kZVBvaW50Rm9yKHBvaW50ZXIpIHtcbiAgICAvLyAxLiBJZiBwb2ludGVyIGlzIGdyZWF0ZXIgdGhhbiAzOTQxOSBhbmQgbGVzcyB0aGFuIDE4OTAwMCwgb3JcbiAgICAvLyBwb2ludGVyIGlzIGdyZWF0ZXIgdGhhbiAxMjM3NTc1LCByZXR1cm4gbnVsbC5cbiAgICBpZiAoKHBvaW50ZXIgPiAzOTQxOSAmJiBwb2ludGVyIDwgMTg5MDAwKSB8fCAocG9pbnRlciA+IDEyMzc1NzUpKVxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAvLyAyLiBMZXQgb2Zmc2V0IGJlIHRoZSBsYXN0IHBvaW50ZXIgaW4gaW5kZXggZ2IxODAzMCByYW5nZXMgdGhhdFxuICAgIC8vIGlzIGVxdWFsIHRvIG9yIGxlc3MgdGhhbiBwb2ludGVyIGFuZCBsZXQgY29kZSBwb2ludCBvZmZzZXQgYmVcbiAgICAvLyBpdHMgY29ycmVzcG9uZGluZyBjb2RlIHBvaW50LlxuICAgIHZhciBvZmZzZXQgPSAwO1xuICAgIHZhciBjb2RlX3BvaW50X29mZnNldCA9IDA7XG4gICAgdmFyIGlkeCA9IGluZGV4KCdnYjE4MDMwJyk7XG4gICAgdmFyIGk7XG4gICAgZm9yIChpID0gMDsgaSA8IGlkeC5sZW5ndGg7ICsraSkge1xuICAgICAgLyoqIEB0eXBlIHshQXJyYXkuPG51bWJlcj59ICovXG4gICAgICB2YXIgZW50cnkgPSBpZHhbaV07XG4gICAgICBpZiAoZW50cnlbMF0gPD0gcG9pbnRlcikge1xuICAgICAgICBvZmZzZXQgPSBlbnRyeVswXTtcbiAgICAgICAgY29kZV9wb2ludF9vZmZzZXQgPSBlbnRyeVsxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMuIFJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludCBvZmZzZXQgK1xuICAgIC8vIHBvaW50ZXIg4oiSIG9mZnNldC5cbiAgICByZXR1cm4gY29kZV9wb2ludF9vZmZzZXQgKyBwb2ludGVyIC0gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IFRoZSB8Y29kZSBwb2ludHwgdG8gbG9jYXRlIGluIHRoZSBnYjE4MDMwIGluZGV4LlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBmaXJzdCBwb2ludGVyIGNvcnJlc3BvbmRpbmcgdG8gfGNvZGUgcG9pbnR8IGluIHRoZVxuICAgKiAgICAgZ2IxODAzMCBpbmRleC5cbiAgICovXG4gIGZ1bmN0aW9uIGluZGV4R0IxODAzMFJhbmdlc1BvaW50ZXJGb3IoY29kZV9wb2ludCkge1xuICAgIC8vIDEuIExldCBvZmZzZXQgYmUgdGhlIGxhc3QgY29kZSBwb2ludCBpbiBpbmRleCBnYjE4MDMwIHJhbmdlc1xuICAgIC8vIHRoYXQgaXMgZXF1YWwgdG8gb3IgbGVzcyB0aGFuIGNvZGUgcG9pbnQgYW5kIGxldCBwb2ludGVyIG9mZnNldFxuICAgIC8vIGJlIGl0cyBjb3JyZXNwb25kaW5nIHBvaW50ZXIuXG4gICAgdmFyIG9mZnNldCA9IDA7XG4gICAgdmFyIHBvaW50ZXJfb2Zmc2V0ID0gMDtcbiAgICB2YXIgaWR4ID0gaW5kZXgoJ2diMTgwMzAnKTtcbiAgICB2YXIgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgaWR4Lmxlbmd0aDsgKytpKSB7XG4gICAgICAvKiogQHR5cGUgeyFBcnJheS48bnVtYmVyPn0gKi9cbiAgICAgIHZhciBlbnRyeSA9IGlkeFtpXTtcbiAgICAgIGlmIChlbnRyeVsxXSA8PSBjb2RlX3BvaW50KSB7XG4gICAgICAgIG9mZnNldCA9IGVudHJ5WzFdO1xuICAgICAgICBwb2ludGVyX29mZnNldCA9IGVudHJ5WzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMi4gUmV0dXJuIGEgcG9pbnRlciB3aG9zZSB2YWx1ZSBpcyBwb2ludGVyIG9mZnNldCArIGNvZGUgcG9pbnRcbiAgICAvLyDiiJIgb2Zmc2V0LlxuICAgIHJldHVybiBwb2ludGVyX29mZnNldCArIGNvZGVfcG9pbnQgLSBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgVGhlIHxjb2RlX3BvaW50fCB0byBzZWFyY2ggZm9yIGluIHRoZSBzaGlmdF9qaXMgaW5kZXguXG4gICAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBjb2RlIHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gfHBvaW50ZXJ8IGluIHxpbmRleHwsXG4gICAqICAgICBvciBudWxsIGlmIHxjb2RlIHBvaW50fCBpcyBub3QgaW4gdGhlIHNoaWZ0X2ppcyBpbmRleC5cbiAgICovXG4gIGZ1bmN0aW9uIGluZGV4U2hpZnRKSVNQb2ludGVyRm9yKGNvZGVfcG9pbnQpIHtcbiAgICAvLyAxLiBMZXQgaW5kZXggYmUgaW5kZXggamlzMDIwOCBleGNsdWRpbmcgYWxsIHBvaW50ZXJzIGluIHRoZVxuICAgIC8vIHJhbmdlIDgyNzIgdG8gODgzNS5cbiAgICB2YXIgcG9pbnRlciA9IGluZGV4UG9pbnRlckZvcihjb2RlX3BvaW50LCBpbmRleCgnamlzMDIwOCcpKTtcbiAgICBpZiAocG9pbnRlciA9PT0gbnVsbCB8fCBpblJhbmdlKHBvaW50ZXIsIDgyNzIsIDg4MzUpKVxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIGluZGV4IHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQgaW4gaW5kZXguXG4gICAgcmV0dXJuIHBvaW50ZXI7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgVGhlIHxjb2RlX3BvaW50fCB0byBzZWFyY2ggZm9yIGluIHRoZSBiaWc1IGluZGV4LlxuICAgKiBAcmV0dXJuIHs/bnVtYmVyfSBUaGUgY29kZSBwb2ludCBjb3JyZXNwb25kaW5nIHRvIHxwb2ludGVyfCBpbiB8aW5kZXh8LFxuICAgKiAgICAgb3IgbnVsbCBpZiB8Y29kZSBwb2ludHwgaXMgbm90IGluIHRoZSBiaWc1IGluZGV4LlxuICAgKi9cbiAgZnVuY3Rpb24gaW5kZXhCaWc1UG9pbnRlckZvcihjb2RlX3BvaW50KSB7XG5cbiAgICAvLyAxLiBMZXQgaW5kZXggYmUgaW5kZXggYmlnNS5cbiAgICB2YXIgaW5kZXhfID0gaW5kZXgoJ2JpZzUnKTtcblxuICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgVSsyNTUwLCBVKzI1NUUsIFUrMjU2MSwgVSsyNTZBLCBVKzUzNDEsIG9yXG4gICAgLy8gVSs1MzQ1LCByZXR1cm4gdGhlIGxhc3QgcG9pbnRlciBjb3JyZXNwb25kaW5nIHRvIGNvZGUgcG9pbnQgaW5cbiAgICAvLyBpbmRleC5cbiAgICBpZiAoY29kZV9wb2ludCA9PT0gMHgyNTUwIHx8IGNvZGVfcG9pbnQgPT09IDB4MjU1RSB8fFxuICAgICAgICBjb2RlX3BvaW50ID09PSAweDI1NjEgfHwgY29kZV9wb2ludCA9PT0gMHgyNTZBIHx8XG4gICAgICAgIGNvZGVfcG9pbnQgPT09IDB4NTM0MSB8fCBjb2RlX3BvaW50ID09PSAweDUzNDUpIHtcbiAgICAgIHJldHVybiBpbmRleC5sYXN0SW5kZXhPZihjb2RlX3BvaW50KTtcbiAgICB9XG5cbiAgICAvLyAzLiBSZXR1cm4gdGhlIGluZGV4IHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQgaW4gaW5kZXguXG4gICAgcmV0dXJuIGluZGV4UG9pbnRlckZvcihjb2RlX3BvaW50LCBpbmRleF8pO1xuICB9XG5cbiAgLy9cbiAgLy8gNy4gQVBJXG4gIC8vXG5cbiAgLyoqIEBjb25zdCAqLyB2YXIgREVGQVVMVF9FTkNPRElORyA9ICd1dGYtOCc7XG5cbiAgLy8gNy4xIEludGVyZmFjZSBUZXh0RGVjb2RlclxuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBlbmNvZGluZyBUaGUgbGFiZWwgb2YgdGhlIGVuY29kaW5nO1xuICAgKiAgICAgZGVmYXVsdHMgdG8gJ3V0Zi04Jy5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBUZXh0RGVjb2RlcihlbmNvZGluZywgb3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUZXh0RGVjb2RlcikpIHtcbiAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBlbmNvZGluZyA9IGVuY29kaW5nICE9PSB1bmRlZmluZWQgPyBTdHJpbmcoZW5jb2RpbmcpIDogREVGQVVMVF9FTkNPRElORztcbiAgICBvcHRpb25zID0gVG9EaWN0aW9uYXJ5KG9wdGlvbnMpO1xuICAgIC8qKiBAcHJpdmF0ZSAqL1xuICAgIHRoaXMuX2VuY29kaW5nID0gZ2V0RW5jb2RpbmcoZW5jb2RpbmcpO1xuICAgIGlmICh0aGlzLl9lbmNvZGluZyA9PT0gbnVsbCB8fCB0aGlzLl9lbmNvZGluZy5uYW1lID09PSAncmVwbGFjZW1lbnQnKVxuICAgICAgdGhyb3cgUmFuZ2VFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKTtcblxuICAgIGlmICghZGVjb2RlcnNbdGhpcy5fZW5jb2RpbmcubmFtZV0pIHtcbiAgICAgIHRocm93IEVycm9yKCdEZWNvZGVyIG5vdCBwcmVzZW50LicgK1xuICAgICAgICAgICAgICAgICAgJyBEaWQgeW91IGZvcmdldCB0byBpbmNsdWRlIGVuY29kaW5nLWluZGV4ZXMuanM/Jyk7XG4gICAgfVxuXG4gICAgLyoqIEBwcml2YXRlIEB0eXBlIHtib29sZWFufSAqL1xuICAgIHRoaXMuX3N0cmVhbWluZyA9IGZhbHNlO1xuICAgIC8qKiBAcHJpdmF0ZSBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgICB0aGlzLl9CT01zZWVuID0gZmFsc2U7XG4gICAgLyoqIEBwcml2YXRlIEB0eXBlIHs/RGVjb2Rlcn0gKi9cbiAgICB0aGlzLl9kZWNvZGVyID0gbnVsbDtcbiAgICAvKiogQHByaXZhdGUgQHR5cGUge2Jvb2xlYW59ICovXG4gICAgdGhpcy5fZmF0YWwgPSBCb29sZWFuKG9wdGlvbnNbJ2ZhdGFsJ10pO1xuICAgIC8qKiBAcHJpdmF0ZSBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgICB0aGlzLl9pZ25vcmVCT00gPSBCb29sZWFuKG9wdGlvbnNbJ2lnbm9yZUJPTSddKTtcblxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnZW5jb2RpbmcnLCB7dmFsdWU6IHRoaXMuX2VuY29kaW5nLm5hbWV9KTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnZmF0YWwnLCB7dmFsdWU6IHRoaXMuX2ZhdGFsfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2lnbm9yZUJPTScsIHt2YWx1ZTogdGhpcy5faWdub3JlQk9NfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5jb2RpbmcgPSB0aGlzLl9lbmNvZGluZy5uYW1lO1xuICAgICAgdGhpcy5mYXRhbCA9IHRoaXMuX2ZhdGFsO1xuICAgICAgdGhpcy5pZ25vcmVCT00gPSB0aGlzLl9pZ25vcmVCT007XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBUZXh0RGVjb2Rlci5wcm90b3R5cGUgPSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtBcnJheUJ1ZmZlclZpZXc9fSBpbnB1dCBUaGUgYnVmZmVyIG9mIGJ5dGVzIHRvIGRlY29kZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnNcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBkZWNvZGVkIHN0cmluZy5cbiAgICAgKi9cbiAgICBkZWNvZGU6IGZ1bmN0aW9uIGRlY29kZShpbnB1dCwgb3B0aW9ucykge1xuICAgICAgdmFyIGJ5dGVzO1xuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgaW5wdXQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICBieXRlcyA9IG5ldyBVaW50OEFycmF5KGlucHV0KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiAnYnVmZmVyJyBpbiBpbnB1dCAmJlxuICAgICAgICAgICAgICAgICBpbnB1dC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICBieXRlcyA9IG5ldyBVaW50OEFycmF5KGlucHV0LmJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmJ5dGVMZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnl0ZXMgPSBuZXcgVWludDhBcnJheSgwKTtcbiAgICAgIH1cblxuICAgICAgb3B0aW9ucyA9IFRvRGljdGlvbmFyeShvcHRpb25zKTtcblxuICAgICAgaWYgKCF0aGlzLl9zdHJlYW1pbmcpIHtcbiAgICAgICAgdGhpcy5fZGVjb2RlciA9IGRlY29kZXJzW3RoaXMuX2VuY29kaW5nLm5hbWVdKHtmYXRhbDogdGhpcy5fZmF0YWx9KTtcbiAgICAgICAgdGhpcy5fQk9Nc2VlbiA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5fc3RyZWFtaW5nID0gQm9vbGVhbihvcHRpb25zWydzdHJlYW0nXSk7XG5cbiAgICAgIHZhciBpbnB1dF9zdHJlYW0gPSBuZXcgU3RyZWFtKGJ5dGVzKTtcblxuICAgICAgdmFyIGNvZGVfcG9pbnRzID0gW107XG5cbiAgICAgIC8qKiBAdHlwZSB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gKi9cbiAgICAgIHZhciByZXN1bHQ7XG5cbiAgICAgIHdoaWxlICghaW5wdXRfc3RyZWFtLmVuZE9mU3RyZWFtKCkpIHtcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5fZGVjb2Rlci5oYW5kbGVyKGlucHV0X3N0cmVhbSwgaW5wdXRfc3RyZWFtLnJlYWQoKSk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IGZpbmlzaGVkKVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKVxuICAgICAgICAgIGNvZGVfcG9pbnRzLnB1c2guYXBwbHkoY29kZV9wb2ludHMsIC8qKkB0eXBlIHshQXJyYXkuPG51bWJlcj59Ki8ocmVzdWx0KSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBjb2RlX3BvaW50cy5wdXNoKHJlc3VsdCk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuX3N0cmVhbWluZykge1xuICAgICAgICBkbyB7XG4gICAgICAgICAgcmVzdWx0ID0gdGhpcy5fZGVjb2Rlci5oYW5kbGVyKGlucHV0X3N0cmVhbSwgaW5wdXRfc3RyZWFtLnJlYWQoKSk7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gZmluaXNoZWQpXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSlcbiAgICAgICAgICAgIGNvZGVfcG9pbnRzLnB1c2guYXBwbHkoY29kZV9wb2ludHMsIC8qKkB0eXBlIHshQXJyYXkuPG51bWJlcj59Ki8ocmVzdWx0KSk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgY29kZV9wb2ludHMucHVzaChyZXN1bHQpO1xuICAgICAgICB9IHdoaWxlICghaW5wdXRfc3RyZWFtLmVuZE9mU3RyZWFtKCkpO1xuICAgICAgICB0aGlzLl9kZWNvZGVyID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvZGVfcG9pbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBJZiBlbmNvZGluZyBpcyBvbmUgb2YgdXRmLTgsIHV0Zi0xNmJlLCBhbmQgdXRmLTE2bGUsIGFuZFxuICAgICAgICAvLyBpZ25vcmUgQk9NIGZsYWcgYW5kIEJPTSBzZWVuIGZsYWcgYXJlIHVuc2V0LCBydW4gdGhlc2VcbiAgICAgICAgLy8gc3Vic3Vic3RlcHM6XG4gICAgICAgIGlmIChbJ3V0Zi04JywgJ3V0Zi0xNmxlJywgJ3V0Zi0xNmJlJ10uaW5kZXhPZih0aGlzLmVuY29kaW5nKSAhPT0gLTEgJiZcbiAgICAgICAgICAgICF0aGlzLl9pZ25vcmVCT00gJiYgIXRoaXMuX0JPTXNlZW4pIHtcbiAgICAgICAgICAvLyBJZiB0b2tlbiBpcyBVK0ZFRkYsIHNldCBCT00gc2VlbiBmbGFnLlxuICAgICAgICAgIGlmIChjb2RlX3BvaW50c1swXSA9PT0gMHhGRUZGKSB7XG4gICAgICAgICAgICB0aGlzLl9CT01zZWVuID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvZGVfcG9pbnRzLnNoaWZ0KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgaWYgdG9rZW4gaXMgbm90IGVuZC1vZi1zdHJlYW0sIHNldCBCT00gc2VlblxuICAgICAgICAgICAgLy8gZmxhZyBhbmQgYXBwZW5kIHRva2VuIHRvIG91dHB1dC5cbiAgICAgICAgICAgIHRoaXMuX0JPTXNlZW4gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29kZVBvaW50c1RvU3RyaW5nKGNvZGVfcG9pbnRzKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gNy4yIEludGVyZmFjZSBUZXh0RW5jb2RlclxuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBlbmNvZGluZyBUaGUgbGFiZWwgb2YgdGhlIGVuY29kaW5nO1xuICAgKiAgICAgZGVmYXVsdHMgdG8gJ3V0Zi04Jy5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBUZXh0RW5jb2RlcihlbmNvZGluZywgb3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUZXh0RW5jb2RlcikpXG4gICAgICByZXR1cm4gbmV3IFRleHRFbmNvZGVyKGVuY29kaW5nLCBvcHRpb25zKTtcbiAgICBlbmNvZGluZyA9IGVuY29kaW5nICE9PSB1bmRlZmluZWQgPyBTdHJpbmcoZW5jb2RpbmcpIDogREVGQVVMVF9FTkNPRElORztcbiAgICBvcHRpb25zID0gVG9EaWN0aW9uYXJ5KG9wdGlvbnMpO1xuICAgIC8qKiBAcHJpdmF0ZSAqL1xuICAgIHRoaXMuX2VuY29kaW5nID0gZ2V0RW5jb2RpbmcoZW5jb2RpbmcpO1xuICAgIGlmICh0aGlzLl9lbmNvZGluZyA9PT0gbnVsbCB8fCB0aGlzLl9lbmNvZGluZy5uYW1lID09PSAncmVwbGFjZW1lbnQnKVxuICAgICAgdGhyb3cgUmFuZ2VFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKTtcblxuICAgIHZhciBhbGxvd0xlZ2FjeUVuY29kaW5nID1cbiAgICAgICAgICBCb29sZWFuKG9wdGlvbnNbJ05PTlNUQU5EQVJEX2FsbG93TGVnYWN5RW5jb2RpbmcnXSk7XG4gICAgdmFyIGlzTGVnYWN5RW5jb2RpbmcgPSAodGhpcy5fZW5jb2RpbmcubmFtZSAhPT0gJ3V0Zi04JyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuY29kaW5nLm5hbWUgIT09ICd1dGYtMTZsZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbmNvZGluZy5uYW1lICE9PSAndXRmLTE2YmUnKTtcbiAgICBpZiAodGhpcy5fZW5jb2RpbmcgPT09IG51bGwgfHwgKGlzTGVnYWN5RW5jb2RpbmcgJiYgIWFsbG93TGVnYWN5RW5jb2RpbmcpKVxuICAgICAgdGhyb3cgUmFuZ2VFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKTtcblxuICAgIGlmICghZW5jb2RlcnNbdGhpcy5fZW5jb2RpbmcubmFtZV0pIHtcbiAgICAgIHRocm93IEVycm9yKCdFbmNvZGVyIG5vdCBwcmVzZW50LicgK1xuICAgICAgICAgICAgICAgICAgJyBEaWQgeW91IGZvcmdldCB0byBpbmNsdWRlIGVuY29kaW5nLWluZGV4ZXMuanM/Jyk7XG4gICAgfVxuXG4gICAgLyoqIEBwcml2YXRlIEB0eXBlIHtib29sZWFufSAqL1xuICAgIHRoaXMuX3N0cmVhbWluZyA9IGZhbHNlO1xuICAgIC8qKiBAcHJpdmF0ZSBAdHlwZSB7P0VuY29kZXJ9ICovXG4gICAgdGhpcy5fZW5jb2RlciA9IG51bGw7XG4gICAgLyoqIEBwcml2YXRlIEB0eXBlIHt7ZmF0YWw6IGJvb2xlYW59fSAqL1xuICAgIHRoaXMuX29wdGlvbnMgPSB7ZmF0YWw6IEJvb2xlYW4ob3B0aW9uc1snZmF0YWwnXSl9O1xuXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSlcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnZW5jb2RpbmcnLCB7dmFsdWU6IHRoaXMuX2VuY29kaW5nLm5hbWV9KTtcbiAgICBlbHNlXG4gICAgICB0aGlzLmVuY29kaW5nID0gdGhpcy5fZW5jb2RpbmcubmFtZTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgVGV4dEVuY29kZXIucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X3N0cmluZyBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnNcbiAgICAgKiBAcmV0dXJuIHtVaW50OEFycmF5fSBFbmNvZGVkIGJ5dGVzLCBhcyBhIFVpbnQ4QXJyYXkuXG4gICAgICovXG4gICAgZW5jb2RlOiBmdW5jdGlvbiBlbmNvZGUob3B0X3N0cmluZywgb3B0aW9ucykge1xuICAgICAgb3B0X3N0cmluZyA9IG9wdF9zdHJpbmcgPyBTdHJpbmcob3B0X3N0cmluZykgOiAnJztcbiAgICAgIG9wdGlvbnMgPSBUb0RpY3Rpb25hcnkob3B0aW9ucyk7XG5cbiAgICAgIC8vIE5PVEU6IFRoaXMgb3B0aW9uIGlzIG5vbnN0YW5kYXJkLiBOb25lIG9mIHRoZSBlbmNvZGluZ3NcbiAgICAgIC8vIHBlcm1pdHRlZCBmb3IgZW5jb2RpbmcgKGkuZS4gVVRGLTgsIFVURi0xNikgYXJlIHN0YXRlZnVsLFxuICAgICAgLy8gc28gc3RyZWFtaW5nIGlzIG5vdCBuZWNlc3NhcnkuXG4gICAgICBpZiAoIXRoaXMuX3N0cmVhbWluZylcbiAgICAgICAgdGhpcy5fZW5jb2RlciA9IGVuY29kZXJzW3RoaXMuX2VuY29kaW5nLm5hbWVdKHRoaXMuX29wdGlvbnMpO1xuICAgICAgdGhpcy5fc3RyZWFtaW5nID0gQm9vbGVhbihvcHRpb25zWydzdHJlYW0nXSk7XG5cbiAgICAgIHZhciBieXRlcyA9IFtdO1xuICAgICAgdmFyIGlucHV0X3N0cmVhbSA9IG5ldyBTdHJlYW0oc3RyaW5nVG9Db2RlUG9pbnRzKG9wdF9zdHJpbmcpKTtcbiAgICAgIC8qKiBAdHlwZSB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gKi9cbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAoIWlucHV0X3N0cmVhbS5lbmRPZlN0cmVhbSgpKSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuX2VuY29kZXIuaGFuZGxlcihpbnB1dF9zdHJlYW0sIGlucHV0X3N0cmVhbS5yZWFkKCkpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBmaW5pc2hlZClcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSlcbiAgICAgICAgICBieXRlcy5wdXNoLmFwcGx5KGJ5dGVzLCAvKipAdHlwZSB7IUFycmF5LjxudW1iZXI+fSovKHJlc3VsdCkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgYnl0ZXMucHVzaChyZXN1bHQpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLl9zdHJlYW1pbmcpIHtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICByZXN1bHQgPSB0aGlzLl9lbmNvZGVyLmhhbmRsZXIoaW5wdXRfc3RyZWFtLCBpbnB1dF9zdHJlYW0ucmVhZCgpKTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBmaW5pc2hlZClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpXG4gICAgICAgICAgICBieXRlcy5wdXNoLmFwcGx5KGJ5dGVzLCAvKipAdHlwZSB7IUFycmF5LjxudW1iZXI+fSovKHJlc3VsdCkpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGJ5dGVzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lbmNvZGVyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShieXRlcyk7XG4gICAgfVxuICB9O1xuXG5cbiAgLy9cbiAgLy8gOC4gVGhlIGVuY29kaW5nXG4gIC8vXG5cbiAgLy8gOC4xIHV0Zi04XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RGVjb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBVVEY4RGVjb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcblxuICAgIC8vIHV0Zi04J3MgZGVjb2RlcidzIGhhcyBhbiBhc3NvY2lhdGVkIHV0Zi04IGNvZGUgcG9pbnQsIHV0Zi04XG4gICAgLy8gYnl0ZXMgc2VlbiwgYW5kIHV0Zi04IGJ5dGVzIG5lZWRlZCAoYWxsIGluaXRpYWxseSAwKSwgYSB1dGYtOFxuICAgIC8vIGxvd2VyIGJvdW5kYXJ5IChpbml0aWFsbHkgMHg4MCksIGFuZCBhIHV0Zi04IHVwcGVyIGJvdW5kYXJ5XG4gICAgLy8gKGluaXRpYWxseSAweEJGKS5cbiAgICB2YXIgLyoqIEB0eXBlIHtudW1iZXJ9ICovIHV0ZjhfY29kZV9wb2ludCA9IDAsXG4gICAgICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyB1dGY4X2J5dGVzX3NlZW4gPSAwLFxuICAgICAgICAvKiogQHR5cGUge251bWJlcn0gKi8gdXRmOF9ieXRlc19uZWVkZWQgPSAwLFxuICAgICAgICAvKiogQHR5cGUge251bWJlcn0gKi8gdXRmOF9sb3dlcl9ib3VuZGFyeSA9IDB4ODAsXG4gICAgICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyB1dGY4X3VwcGVyX2JvdW5kYXJ5ID0gMHhCRjtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBieXRlcyBiZWluZyBkZWNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRlIFRoZSBuZXh0IGJ5dGUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gVGhlIG5leHQgY29kZSBwb2ludChzKVxuICAgICAqICAgICBkZWNvZGVkLCBvciBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YSBleGlzdHMgaW4gdGhlIGlucHV0XG4gICAgICogICAgIHN0cmVhbSB0byBkZWNvZGUgYSBjb21wbGV0ZSBjb2RlIHBvaW50LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgYml0ZSkge1xuICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCB1dGYtOCBieXRlcyBuZWVkZWQgaXMgbm90IDAsXG4gICAgICAvLyBzZXQgdXRmLTggYnl0ZXMgbmVlZGVkIHRvIDAgYW5kIHJldHVybiBlcnJvci5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmIHV0ZjhfYnl0ZXNfbmVlZGVkICE9PSAwKSB7XG4gICAgICAgIHV0ZjhfYnl0ZXNfbmVlZGVkID0gMDtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMy4gSWYgdXRmLTggYnl0ZXMgbmVlZGVkIGlzIDAsIGJhc2VkIG9uIGJ5dGU6XG4gICAgICBpZiAodXRmOF9ieXRlc19uZWVkZWQgPT09IDApIHtcblxuICAgICAgICAvLyAweDAwIHRvIDB4N0ZcbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgwMCwgMHg3RikpIHtcbiAgICAgICAgICAvLyBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGJ5dGUuXG4gICAgICAgICAgcmV0dXJuIGJpdGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAweEMyIHRvIDB4REZcbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHhDMiwgMHhERikpIHtcbiAgICAgICAgICAvLyBTZXQgdXRmLTggYnl0ZXMgbmVlZGVkIHRvIDEgYW5kIHV0Zi04IGNvZGUgcG9pbnQgdG8gYnl0ZVxuICAgICAgICAgIC8vIOKIkiAweEMwLlxuICAgICAgICAgIHV0ZjhfYnl0ZXNfbmVlZGVkID0gMTtcbiAgICAgICAgICB1dGY4X2NvZGVfcG9pbnQgPSBiaXRlIC0gMHhDMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDB4RTAgdG8gMHhFRlxuICAgICAgICBlbHNlIGlmIChpblJhbmdlKGJpdGUsIDB4RTAsIDB4RUYpKSB7XG4gICAgICAgICAgLy8gMS4gSWYgYnl0ZSBpcyAweEUwLCBzZXQgdXRmLTggbG93ZXIgYm91bmRhcnkgdG8gMHhBMC5cbiAgICAgICAgICBpZiAoYml0ZSA9PT0gMHhFMClcbiAgICAgICAgICAgIHV0ZjhfbG93ZXJfYm91bmRhcnkgPSAweEEwO1xuICAgICAgICAgIC8vIDIuIElmIGJ5dGUgaXMgMHhFRCwgc2V0IHV0Zi04IHVwcGVyIGJvdW5kYXJ5IHRvIDB4OUYuXG4gICAgICAgICAgaWYgKGJpdGUgPT09IDB4RUQpXG4gICAgICAgICAgICB1dGY4X3VwcGVyX2JvdW5kYXJ5ID0gMHg5RjtcbiAgICAgICAgICAvLyAzLiBTZXQgdXRmLTggYnl0ZXMgbmVlZGVkIHRvIDIgYW5kIHV0Zi04IGNvZGUgcG9pbnQgdG9cbiAgICAgICAgICAvLyBieXRlIOKIkiAweEUwLlxuICAgICAgICAgIHV0ZjhfYnl0ZXNfbmVlZGVkID0gMjtcbiAgICAgICAgICB1dGY4X2NvZGVfcG9pbnQgPSBiaXRlIC0gMHhFMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDB4RjAgdG8gMHhGNFxuICAgICAgICBlbHNlIGlmIChpblJhbmdlKGJpdGUsIDB4RjAsIDB4RjQpKSB7XG4gICAgICAgICAgLy8gMS4gSWYgYnl0ZSBpcyAweEYwLCBzZXQgdXRmLTggbG93ZXIgYm91bmRhcnkgdG8gMHg5MC5cbiAgICAgICAgICBpZiAoYml0ZSA9PT0gMHhGMClcbiAgICAgICAgICAgIHV0ZjhfbG93ZXJfYm91bmRhcnkgPSAweDkwO1xuICAgICAgICAgIC8vIDIuIElmIGJ5dGUgaXMgMHhGNCwgc2V0IHV0Zi04IHVwcGVyIGJvdW5kYXJ5IHRvIDB4OEYuXG4gICAgICAgICAgaWYgKGJpdGUgPT09IDB4RjQpXG4gICAgICAgICAgICB1dGY4X3VwcGVyX2JvdW5kYXJ5ID0gMHg4RjtcbiAgICAgICAgICAvLyAzLiBTZXQgdXRmLTggYnl0ZXMgbmVlZGVkIHRvIDMgYW5kIHV0Zi04IGNvZGUgcG9pbnQgdG9cbiAgICAgICAgICAvLyBieXRlIOKIkiAweEYwLlxuICAgICAgICAgIHV0ZjhfYnl0ZXNfbmVlZGVkID0gMztcbiAgICAgICAgICB1dGY4X2NvZGVfcG9pbnQgPSBiaXRlIC0gMHhGMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAvLyBSZXR1cm4gZXJyb3IuXG4gICAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGVuIChieXRlIGlzIGluIHRoZSByYW5nZSAweEMyIHRvIDB4RjQpIHNldCB1dGYtOCBjb2RlXG4gICAgICAgIC8vIHBvaW50IHRvIHV0Zi04IGNvZGUgcG9pbnQgPDwgKDYgw5cgdXRmLTggYnl0ZXMgbmVlZGVkKSBhbmRcbiAgICAgICAgLy8gcmV0dXJuIGNvbnRpbnVlLlxuICAgICAgICB1dGY4X2NvZGVfcG9pbnQgPSB1dGY4X2NvZGVfcG9pbnQgPDwgKDYgKiB1dGY4X2J5dGVzX25lZWRlZCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBieXRlIGlzIG5vdCBpbiB0aGUgcmFuZ2UgdXRmLTggbG93ZXIgYm91bmRhcnkgdG8gdXRmLThcbiAgICAgIC8vIHVwcGVyIGJvdW5kYXJ5LCBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICBpZiAoIWluUmFuZ2UoYml0ZSwgdXRmOF9sb3dlcl9ib3VuZGFyeSwgdXRmOF91cHBlcl9ib3VuZGFyeSkpIHtcblxuICAgICAgICAvLyAxLiBTZXQgdXRmLTggY29kZSBwb2ludCwgdXRmLTggYnl0ZXMgbmVlZGVkLCBhbmQgdXRmLThcbiAgICAgICAgLy8gYnl0ZXMgc2VlbiB0byAwLCBzZXQgdXRmLTggbG93ZXIgYm91bmRhcnkgdG8gMHg4MCwgYW5kIHNldFxuICAgICAgICAvLyB1dGYtOCB1cHBlciBib3VuZGFyeSB0byAweEJGLlxuICAgICAgICB1dGY4X2NvZGVfcG9pbnQgPSB1dGY4X2J5dGVzX25lZWRlZCA9IHV0ZjhfYnl0ZXNfc2VlbiA9IDA7XG4gICAgICAgIHV0ZjhfbG93ZXJfYm91bmRhcnkgPSAweDgwO1xuICAgICAgICB1dGY4X3VwcGVyX2JvdW5kYXJ5ID0gMHhCRjtcblxuICAgICAgICAvLyAyLiBQcmVwZW5kIGJ5dGUgdG8gc3RyZWFtLlxuICAgICAgICBzdHJlYW0ucHJlcGVuZChiaXRlKTtcblxuICAgICAgICAvLyAzLiBSZXR1cm4gZXJyb3IuXG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBTZXQgdXRmLTggbG93ZXIgYm91bmRhcnkgdG8gMHg4MCBhbmQgdXRmLTggdXBwZXIgYm91bmRhcnlcbiAgICAgIC8vIHRvIDB4QkYuXG4gICAgICB1dGY4X2xvd2VyX2JvdW5kYXJ5ID0gMHg4MDtcbiAgICAgIHV0ZjhfdXBwZXJfYm91bmRhcnkgPSAweEJGO1xuXG4gICAgICAvLyA2LiBJbmNyZWFzZSB1dGYtOCBieXRlcyBzZWVuIGJ5IG9uZSBhbmQgc2V0IHV0Zi04IGNvZGUgcG9pbnRcbiAgICAgIC8vIHRvIHV0Zi04IGNvZGUgcG9pbnQgKyAoYnl0ZSDiiJIgMHg4MCkgPDwgKDYgw5cgKHV0Zi04IGJ5dGVzXG4gICAgICAvLyBuZWVkZWQg4oiSIHV0Zi04IGJ5dGVzIHNlZW4pKS5cbiAgICAgIHV0ZjhfYnl0ZXNfc2VlbiArPSAxO1xuICAgICAgdXRmOF9jb2RlX3BvaW50ICs9IChiaXRlIC0gMHg4MCkgPDwgKDYgKiAodXRmOF9ieXRlc19uZWVkZWQgLSB1dGY4X2J5dGVzX3NlZW4pKTtcblxuICAgICAgLy8gNy4gSWYgdXRmLTggYnl0ZXMgc2VlbiBpcyBub3QgZXF1YWwgdG8gdXRmLTggYnl0ZXMgbmVlZGVkLFxuICAgICAgLy8gY29udGludWUuXG4gICAgICBpZiAodXRmOF9ieXRlc19zZWVuICE9PSB1dGY4X2J5dGVzX25lZWRlZClcbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgIC8vIDguIExldCBjb2RlIHBvaW50IGJlIHV0Zi04IGNvZGUgcG9pbnQuXG4gICAgICB2YXIgY29kZV9wb2ludCA9IHV0ZjhfY29kZV9wb2ludDtcblxuICAgICAgLy8gOS4gU2V0IHV0Zi04IGNvZGUgcG9pbnQsIHV0Zi04IGJ5dGVzIG5lZWRlZCwgYW5kIHV0Zi04IGJ5dGVzXG4gICAgICAvLyBzZWVuIHRvIDAuXG4gICAgICB1dGY4X2NvZGVfcG9pbnQgPSB1dGY4X2J5dGVzX25lZWRlZCA9IHV0ZjhfYnl0ZXNfc2VlbiA9IDA7XG5cbiAgICAgIC8vIDEwLiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICByZXR1cm4gY29kZV9wb2ludDtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBVVEY4RW5jb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIElucHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7XG4gICAgICAvLyAxLiBJZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgaW4gdGhlIHJhbmdlIFUrMDAwMCB0byBVKzAwN0YsIHJldHVybiBhXG4gICAgICAvLyBieXRlIHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICBpZiAoaW5SYW5nZShjb2RlX3BvaW50LCAweDAwMDAsIDB4MDA3ZikpXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuXG4gICAgICAvLyAzLiBTZXQgY291bnQgYW5kIG9mZnNldCBiYXNlZCBvbiB0aGUgcmFuZ2UgY29kZSBwb2ludCBpcyBpbjpcbiAgICAgIHZhciBjb3VudCwgb2Zmc2V0O1xuICAgICAgLy8gVSswMDgwIHRvIFUrMDdGRjogICAgMSBhbmQgMHhDMFxuICAgICAgaWYgKGluUmFuZ2UoY29kZV9wb2ludCwgMHgwMDgwLCAweDA3RkYpKSB7XG4gICAgICAgIGNvdW50ID0gMTtcbiAgICAgICAgb2Zmc2V0ID0gMHhDMDtcbiAgICAgIH1cbiAgICAgIC8vIFUrMDgwMCB0byBVK0ZGRkY6ICAgIDIgYW5kIDB4RTBcbiAgICAgIGVsc2UgaWYgKGluUmFuZ2UoY29kZV9wb2ludCwgMHgwODAwLCAweEZGRkYpKSB7XG4gICAgICAgIGNvdW50ID0gMjtcbiAgICAgICAgb2Zmc2V0ID0gMHhFMDtcbiAgICAgIH1cbiAgICAgIC8vIFUrMTAwMDAgdG8gVSsxMEZGRkY6IDMgYW5kIDB4RjBcbiAgICAgIGVsc2UgaWYgKGluUmFuZ2UoY29kZV9wb2ludCwgMHgxMDAwMCwgMHgxMEZGRkYpKSB7XG4gICAgICAgIGNvdW50ID0gMztcbiAgICAgICAgb2Zmc2V0ID0gMHhGMDtcbiAgICAgIH1cblxuICAgICAgLy8gNC5MZXQgYnl0ZXMgYmUgYSBieXRlIHNlcXVlbmNlIHdob3NlIGZpcnN0IGJ5dGUgaXMgKGNvZGVcbiAgICAgIC8vIHBvaW50ID4+ICg2IMOXIGNvdW50KSkgKyBvZmZzZXQuXG4gICAgICB2YXIgYnl0ZXMgPSBbKGNvZGVfcG9pbnQgPj4gKDYgKiBjb3VudCkpICsgb2Zmc2V0XTtcblxuICAgICAgLy8gNS4gUnVuIHRoZXNlIHN1YnN0ZXBzIHdoaWxlIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiAwOlxuICAgICAgd2hpbGUgKGNvdW50ID4gMCkge1xuXG4gICAgICAgIC8vIDEuIFNldCB0ZW1wIHRvIGNvZGUgcG9pbnQgPj4gKDYgw5cgKGNvdW50IOKIkiAxKSkuXG4gICAgICAgIHZhciB0ZW1wID0gY29kZV9wb2ludCA+PiAoNiAqIChjb3VudCAtIDEpKTtcblxuICAgICAgICAvLyAyLiBBcHBlbmQgdG8gYnl0ZXMgMHg4MCB8ICh0ZW1wICYgMHgzRikuXG4gICAgICAgIGJ5dGVzLnB1c2goMHg4MCB8ICh0ZW1wICYgMHgzRikpO1xuXG4gICAgICAgIC8vIDMuIERlY3JlYXNlIGNvdW50IGJ5IG9uZS5cbiAgICAgICAgY291bnQgLT0gMTtcbiAgICAgIH1cblxuICAgICAgLy8gNi4gUmV0dXJuIGJ5dGVzIGJ5dGVzLCBpbiBvcmRlci5cbiAgICAgIHJldHVybiBieXRlcztcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBlbmNvZGVyc1sndXRmLTgnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFVURjhFbmNvZGVyKG9wdGlvbnMpO1xuICB9O1xuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWyd1dGYtOCddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgVVRGOERlY29kZXIob3B0aW9ucyk7XG4gIH07XG5cbiAgLy9cbiAgLy8gOS4gTGVnYWN5IHNpbmdsZS1ieXRlIGVuY29kaW5nc1xuICAvL1xuXG4gIC8vIDkuMSBzaW5nbGUtYnl0ZSBkZWNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBpbmRleCBUaGUgZW5jb2RpbmcgaW5kZXguXG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gU2luZ2xlQnl0ZURlY29kZXIoaW5kZXgsIG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBieXRlcyBiZWluZyBkZWNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRlIFRoZSBuZXh0IGJ5dGUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gVGhlIG5leHQgY29kZSBwb2ludChzKVxuICAgICAqICAgICBkZWNvZGVkLCBvciBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YSBleGlzdHMgaW4gdGhlIGlucHV0XG4gICAgICogICAgIHN0cmVhbSB0byBkZWNvZGUgYSBjb21wbGV0ZSBjb2RlIHBvaW50LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgYml0ZSkge1xuICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAyLiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDAwIHRvIDB4N0YsIHJldHVybiBhIGNvZGUgcG9pbnRcbiAgICAgIC8vIHdob3NlIHZhbHVlIGlzIGJ5dGUuXG4gICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDAwLCAweDdGKSlcbiAgICAgICAgcmV0dXJuIGJpdGU7XG5cbiAgICAgIC8vIDMuIExldCBjb2RlIHBvaW50IGJlIHRoZSBpbmRleCBjb2RlIHBvaW50IGZvciBieXRlIOKIkiAweDgwIGluXG4gICAgICAvLyBpbmRleCBzaW5nbGUtYnl0ZS5cbiAgICAgIHZhciBjb2RlX3BvaW50ID0gaW5kZXhbYml0ZSAtIDB4ODBdO1xuXG4gICAgICAvLyA0LiBJZiBjb2RlIHBvaW50IGlzIG51bGwsIHJldHVybiBlcnJvci5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsKVxuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgLy8gNS4gUmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG4gICAgfTtcbiAgfVxuXG4gIC8vIDkuMiBzaW5nbGUtYnl0ZSBlbmNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0VuY29kZXJ9XG4gICAqIEBwYXJhbSB7IUFycmF5Ljw/bnVtYmVyPn0gaW5kZXggVGhlIGVuY29kaW5nIGluZGV4LlxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFNpbmdsZUJ5dGVFbmNvZGVyKGluZGV4LCBvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIElucHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7XG4gICAgICAvLyAxLiBJZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgaW4gdGhlIHJhbmdlIFUrMDAwMCB0byBVKzAwN0YsIHJldHVybiBhXG4gICAgICAvLyBieXRlIHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICBpZiAoaW5SYW5nZShjb2RlX3BvaW50LCAweDAwMDAsIDB4MDA3RikpXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuXG4gICAgICAvLyAzLiBMZXQgcG9pbnRlciBiZSB0aGUgaW5kZXggcG9pbnRlciBmb3IgY29kZSBwb2ludCBpbiBpbmRleFxuICAgICAgLy8gc2luZ2xlLWJ5dGUuXG4gICAgICB2YXIgcG9pbnRlciA9IGluZGV4UG9pbnRlckZvcihjb2RlX3BvaW50LCBpbmRleCk7XG5cbiAgICAgIC8vIDQuIElmIHBvaW50ZXIgaXMgbnVsbCwgcmV0dXJuIGVycm9yIHdpdGggY29kZSBwb2ludC5cbiAgICAgIGlmIChwb2ludGVyID09PSBudWxsKVxuICAgICAgICBlbmNvZGVyRXJyb3IoY29kZV9wb2ludCk7XG5cbiAgICAgIC8vIDUuIFJldHVybiBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgcG9pbnRlciArIDB4ODAuXG4gICAgICByZXR1cm4gcG9pbnRlciArIDB4ODA7XG4gICAgfTtcbiAgfVxuXG4gIChmdW5jdGlvbigpIHtcbiAgICBpZiAoISgnZW5jb2RpbmctaW5kZXhlcycgaW4gZ2xvYmFsKSlcbiAgICAgIHJldHVybjtcbiAgICBlbmNvZGluZ3MuZm9yRWFjaChmdW5jdGlvbihjYXRlZ29yeSkge1xuICAgICAgaWYgKGNhdGVnb3J5LmhlYWRpbmcgIT09ICdMZWdhY3kgc2luZ2xlLWJ5dGUgZW5jb2RpbmdzJylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2F0ZWdvcnkuZW5jb2RpbmdzLmZvckVhY2goZnVuY3Rpb24oZW5jb2RpbmcpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBlbmNvZGluZy5uYW1lO1xuICAgICAgICB2YXIgaWR4ID0gaW5kZXgobmFtZSk7XG4gICAgICAgIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgICAgICAgZGVjb2RlcnNbbmFtZV0gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBTaW5nbGVCeXRlRGVjb2RlcihpZHgsIG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgICAgICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gICAgICAgIGVuY29kZXJzW25hbWVdID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgICAgIHJldHVybiBuZXcgU2luZ2xlQnl0ZUVuY29kZXIoaWR4LCBvcHRpb25zKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KCkpO1xuXG4gIC8vXG4gIC8vIDEwLiBMZWdhY3kgbXVsdGktYnl0ZSBDaGluZXNlIChzaW1wbGlmaWVkKSBlbmNvZGluZ3NcbiAgLy9cblxuICAvLyAxMC4xIGdia1xuXG4gIC8vIDEwLjEuMSBnYmsgZGVjb2RlclxuICAvLyBnYmsncyBkZWNvZGVyIGlzIGdiMTgwMzAncyBkZWNvZGVyLlxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWydnYmsnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEdCMTgwMzBEZWNvZGVyKG9wdGlvbnMpO1xuICB9O1xuXG4gIC8vIDEwLjEuMiBnYmsgZW5jb2RlclxuICAvLyBnYmsncyBlbmNvZGVyIGlzIGdiMTgwMzAncyBlbmNvZGVyIHdpdGggaXRzIGdiayBmbGFnIHNldC5cbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBlbmNvZGVyc1snZ2JrJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBHQjE4MDMwRW5jb2RlcihvcHRpb25zLCB0cnVlKTtcbiAgfTtcblxuICAvLyAxMC4yIGdiMTgwMzBcblxuICAvLyAxMC4yLjEgZ2IxODAzMCBkZWNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gR0IxODAzMERlY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLy8gZ2IxODAzMCdzIGRlY29kZXIgaGFzIGFuIGFzc29jaWF0ZWQgZ2IxODAzMCBmaXJzdCwgZ2IxODAzMFxuICAgIC8vIHNlY29uZCwgYW5kIGdiMTgwMzAgdGhpcmQgKGFsbCBpbml0aWFsbHkgMHgwMCkuXG4gICAgdmFyIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyBnYjE4MDMwX2ZpcnN0ID0gMHgwMCxcbiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGdiMTgwMzBfc2Vjb25kID0gMHgwMCxcbiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGdiMTgwMzBfdGhpcmQgPSAweDAwO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBieXRlcyBiZWluZyBkZWNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRlIFRoZSBuZXh0IGJ5dGUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gVGhlIG5leHQgY29kZSBwb2ludChzKVxuICAgICAqICAgICBkZWNvZGVkLCBvciBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YSBleGlzdHMgaW4gdGhlIGlucHV0XG4gICAgICogICAgIHN0cmVhbSB0byBkZWNvZGUgYSBjb21wbGV0ZSBjb2RlIHBvaW50LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgYml0ZSkge1xuICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBnYjE4MDMwIGZpcnN0LCBnYjE4MDMwXG4gICAgICAvLyBzZWNvbmQsIGFuZCBnYjE4MDMwIHRoaXJkIGFyZSAweDAwLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiBnYjE4MDMwX2ZpcnN0ID09PSAweDAwICYmXG4gICAgICAgICAgZ2IxODAzMF9zZWNvbmQgPT09IDB4MDAgJiYgZ2IxODAzMF90aGlyZCA9PT0gMHgwMCkge1xuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG4gICAgICB9XG4gICAgICAvLyAyLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0sIGFuZCBnYjE4MDMwIGZpcnN0LCBnYjE4MDMwXG4gICAgICAvLyBzZWNvbmQsIG9yIGdiMTgwMzAgdGhpcmQgaXMgbm90IDB4MDAsIHNldCBnYjE4MDMwIGZpcnN0LFxuICAgICAgLy8gZ2IxODAzMCBzZWNvbmQsIGFuZCBnYjE4MDMwIHRoaXJkIHRvIDB4MDAsIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJlxuICAgICAgICAgIChnYjE4MDMwX2ZpcnN0ICE9PSAweDAwIHx8IGdiMTgwMzBfc2Vjb25kICE9PSAweDAwIHx8IGdiMTgwMzBfdGhpcmQgIT09IDB4MDApKSB7XG4gICAgICAgIGdiMTgwMzBfZmlyc3QgPSAweDAwO1xuICAgICAgICBnYjE4MDMwX3NlY29uZCA9IDB4MDA7XG4gICAgICAgIGdiMTgwMzBfdGhpcmQgPSAweDAwO1xuICAgICAgICBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuICAgICAgdmFyIGNvZGVfcG9pbnQ7XG4gICAgICAvLyAzLiBJZiBnYjE4MDMwIHRoaXJkIGlzIG5vdCAweDAwLCBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICBpZiAoZ2IxODAzMF90aGlyZCAhPT0gMHgwMCkge1xuICAgICAgICAvLyAxLiBMZXQgY29kZSBwb2ludCBiZSBudWxsLlxuICAgICAgICBjb2RlX3BvaW50ID0gbnVsbDtcbiAgICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHgzMCB0byAweDM5LCBzZXQgY29kZSBwb2ludCB0b1xuICAgICAgICAvLyB0aGUgaW5kZXggZ2IxODAzMCByYW5nZXMgY29kZSBwb2ludCBmb3IgKCgoZ2IxODAzMCBmaXJzdCDiiJJcbiAgICAgICAgLy8gMHg4MSkgw5cgMTAgKyBnYjE4MDMwIHNlY29uZCDiiJIgMHgzMCkgw5cgMTI2ICsgZ2IxODAzMCB0aGlyZCDiiJJcbiAgICAgICAgLy8gMHg4MSkgw5cgMTAgKyBieXRlIOKIkiAweDMwLlxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDMwLCAweDM5KSkge1xuICAgICAgICAgIGNvZGVfcG9pbnQgPSBpbmRleEdCMTgwMzBSYW5nZXNDb2RlUG9pbnRGb3IoXG4gICAgICAgICAgICAgICgoKGdiMTgwMzBfZmlyc3QgLSAweDgxKSAqIDEwICsgKGdiMTgwMzBfc2Vjb25kIC0gMHgzMCkpICogMTI2ICtcbiAgICAgICAgICAgICAgIChnYjE4MDMwX3RoaXJkIC0gMHg4MSkpICogMTAgKyBiaXRlIC0gMHgzMCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBMZXQgYnVmZmVyIGJlIGEgYnl0ZSBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIGdiMTgwMzBcbiAgICAgICAgLy8gc2Vjb25kLCBnYjE4MDMwIHRoaXJkLCBhbmQgYnl0ZSwgaW4gb3JkZXIuXG4gICAgICAgIHZhciBidWZmZXIgPSBbZ2IxODAzMF9zZWNvbmQsIGdiMTgwMzBfdGhpcmQsIGJpdGVdO1xuXG4gICAgICAgIC8vIDQuIFNldCBnYjE4MDMwIGZpcnN0LCBnYjE4MDMwIHNlY29uZCwgYW5kIGdiMTgwMzAgdGhpcmQgdG9cbiAgICAgICAgLy8gMHgwMC5cbiAgICAgICAgZ2IxODAzMF9maXJzdCA9IDB4MDA7XG4gICAgICAgIGdiMTgwMzBfc2Vjb25kID0gMHgwMDtcbiAgICAgICAgZ2IxODAzMF90aGlyZCA9IDB4MDA7XG5cbiAgICAgICAgLy8gNS4gSWYgY29kZSBwb2ludCBpcyBudWxsLCBwcmVwZW5kIGJ1ZmZlciB0byBzdHJlYW0gYW5kXG4gICAgICAgIC8vIHJldHVybiBlcnJvci5cbiAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IG51bGwpIHtcbiAgICAgICAgICBzdHJlYW0ucHJlcGVuZChidWZmZXIpO1xuICAgICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNi4gUmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcbiAgICAgIH1cblxuICAgICAgLy8gNC4gSWYgZ2IxODAzMCBzZWNvbmQgaXMgbm90IDB4MDAsIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICAgIGlmIChnYjE4MDMwX3NlY29uZCAhPT0gMHgwMCkge1xuXG4gICAgICAgIC8vIDEuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4ODEgdG8gMHhGRSwgc2V0IGdiMTgwMzAgdGhpcmRcbiAgICAgICAgLy8gdG8gYnl0ZSBhbmQgcmV0dXJuIGNvbnRpbnVlLlxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDgxLCAweEZFKSkge1xuICAgICAgICAgIGdiMTgwMzBfdGhpcmQgPSBiaXRlO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gUHJlcGVuZCBnYjE4MDMwIHNlY29uZCBmb2xsb3dlZCBieSBieXRlIHRvIHN0cmVhbSwgc2V0XG4gICAgICAgIC8vIGdiMTgwMzAgZmlyc3QgYW5kIGdiMTgwMzAgc2Vjb25kIHRvIDB4MDAsIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICAgIHN0cmVhbS5wcmVwZW5kKFtnYjE4MDMwX3NlY29uZCwgYml0ZV0pO1xuICAgICAgICBnYjE4MDMwX2ZpcnN0ID0gMHgwMDtcbiAgICAgICAgZ2IxODAzMF9zZWNvbmQgPSAweDAwO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgIH1cblxuICAgICAgLy8gNS4gSWYgZ2IxODAzMCBmaXJzdCBpcyBub3QgMHgwMCwgcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgICAgaWYgKGdiMTgwMzBfZmlyc3QgIT09IDB4MDApIHtcblxuICAgICAgICAvLyAxLiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDMwIHRvIDB4MzksIHNldCBnYjE4MDMwIHNlY29uZFxuICAgICAgICAvLyB0byBieXRlIGFuZCByZXR1cm4gY29udGludWUuXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4MzAsIDB4MzkpKSB7XG4gICAgICAgICAgZ2IxODAzMF9zZWNvbmQgPSBiaXRlO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gTGV0IGxlYWQgYmUgZ2IxODAzMCBmaXJzdCwgbGV0IHBvaW50ZXIgYmUgbnVsbCwgYW5kIHNldFxuICAgICAgICAvLyBnYjE4MDMwIGZpcnN0IHRvIDB4MDAuXG4gICAgICAgIHZhciBsZWFkID0gZ2IxODAzMF9maXJzdDtcbiAgICAgICAgdmFyIHBvaW50ZXIgPSBudWxsO1xuICAgICAgICBnYjE4MDMwX2ZpcnN0ID0gMHgwMDtcblxuICAgICAgICAvLyAzLiBMZXQgb2Zmc2V0IGJlIDB4NDAgaWYgYnl0ZSBpcyBsZXNzIHRoYW4gMHg3RiBhbmQgMHg0MVxuICAgICAgICAvLyBvdGhlcndpc2UuXG4gICAgICAgIHZhciBvZmZzZXQgPSBiaXRlIDwgMHg3RiA/IDB4NDAgOiAweDQxO1xuXG4gICAgICAgIC8vIDQuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4NDAgdG8gMHg3RSBvciAweDgwIHRvIDB4RkUsXG4gICAgICAgIC8vIHNldCBwb2ludGVyIHRvIChsZWFkIOKIkiAweDgxKSDDlyAxOTAgKyAoYnl0ZSDiiJIgb2Zmc2V0KS5cbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHg0MCwgMHg3RSkgfHwgaW5SYW5nZShiaXRlLCAweDgwLCAweEZFKSlcbiAgICAgICAgICBwb2ludGVyID0gKGxlYWQgLSAweDgxKSAqIDE5MCArIChiaXRlIC0gb2Zmc2V0KTtcblxuICAgICAgICAvLyA1LiBMZXQgY29kZSBwb2ludCBiZSBudWxsIGlmIHBvaW50ZXIgaXMgbnVsbCBhbmQgdGhlIGluZGV4XG4gICAgICAgIC8vIGNvZGUgcG9pbnQgZm9yIHBvaW50ZXIgaW4gaW5kZXggZ2IxODAzMCBvdGhlcndpc2UuXG4gICAgICAgIGNvZGVfcG9pbnQgPSBwb2ludGVyID09PSBudWxsID8gbnVsbCA6XG4gICAgICAgICAgICBpbmRleENvZGVQb2ludEZvcihwb2ludGVyLCBpbmRleCgnZ2IxODAzMCcpKTtcblxuICAgICAgICAvLyA2LiBJZiBjb2RlIHBvaW50IGlzIG51bGwgYW5kIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4MDAgdG9cbiAgICAgICAgLy8gMHg3RiwgcHJlcGVuZCBieXRlIHRvIHN0cmVhbS5cbiAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IG51bGwgJiYgaW5SYW5nZShiaXRlLCAweDAwLCAweDdGKSlcbiAgICAgICAgICBzdHJlYW0ucHJlcGVuZChiaXRlKTtcblxuICAgICAgICAvLyA3LiBJZiBjb2RlIHBvaW50IGlzIG51bGwsIHJldHVybiBlcnJvci5cbiAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IG51bGwpXG4gICAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgICAgLy8gOC4gUmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcbiAgICAgIH1cblxuICAgICAgLy8gNi4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHgwMCB0byAweDdGLCByZXR1cm4gYSBjb2RlIHBvaW50XG4gICAgICAvLyB3aG9zZSB2YWx1ZSBpcyBieXRlLlxuICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgwMCwgMHg3RikpXG4gICAgICAgIHJldHVybiBiaXRlO1xuXG4gICAgICAvLyA3LiBJZiBieXRlIGlzIDB4ODAsIHJldHVybiBjb2RlIHBvaW50IFUrMjBBQy5cbiAgICAgIGlmIChiaXRlID09PSAweDgwKVxuICAgICAgICByZXR1cm4gMHgyMEFDO1xuXG4gICAgICAvLyA4LiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDgxIHRvIDB4RkUsIHNldCBnYjE4MDMwIGZpcnN0IHRvXG4gICAgICAvLyBieXRlIGFuZCByZXR1cm4gY29udGludWUuXG4gICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDgxLCAweEZFKSkge1xuICAgICAgICBnYjE4MDMwX2ZpcnN0ID0gYml0ZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIDkuIFJldHVybiBlcnJvci5cbiAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgIH07XG4gIH1cblxuICAvLyAxMC4yLjIgZ2IxODAzMCBlbmNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0VuY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBnYmtfZmxhZ1xuICAgKi9cbiAgZnVuY3Rpb24gR0IxODAzMEVuY29kZXIob3B0aW9ucywgZ2JrX2ZsYWcpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8vIGdiMTgwMzAncyBkZWNvZGVyIGhhcyBhbiBhc3NvY2lhdGVkIGdiayBmbGFnIChpbml0aWFsbHkgdW5zZXQpLlxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gSW5wdXQgc3RyZWFtLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IE5leHQgY29kZSBwb2ludCByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IEJ5dGUocykgdG8gZW1pdC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGNvZGVfcG9pbnQpIHtcbiAgICAgIC8vIDEuIElmIGNvZGUgcG9pbnQgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMi4gSWYgY29kZSBwb2ludCBpcyBpbiB0aGUgcmFuZ2UgVSswMDAwIHRvIFUrMDA3RiwgcmV0dXJuIGFcbiAgICAgIC8vIGJ5dGUgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIGlmIChpblJhbmdlKGNvZGVfcG9pbnQsIDB4MDAwMCwgMHgwMDdGKSkge1xuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgdGhlIGdiayBmbGFnIGlzIHNldCBhbmQgY29kZSBwb2ludCBpcyBVKzIwQUMsIHJldHVyblxuICAgICAgLy8gYnl0ZSAweDgwLlxuICAgICAgaWYgKGdia19mbGFnICYmIGNvZGVfcG9pbnQgPT09IDB4MjBBQylcbiAgICAgICAgcmV0dXJuIDB4ODA7XG5cbiAgICAgIC8vIDQuIExldCBwb2ludGVyIGJlIHRoZSBpbmRleCBwb2ludGVyIGZvciBjb2RlIHBvaW50IGluIGluZGV4XG4gICAgICAvLyBnYjE4MDMwLlxuICAgICAgdmFyIHBvaW50ZXIgPSBpbmRleFBvaW50ZXJGb3IoY29kZV9wb2ludCwgaW5kZXgoJ2diMTgwMzAnKSk7XG5cbiAgICAgIC8vIDUuIElmIHBvaW50ZXIgaXMgbm90IG51bGwsIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICAgIGlmIChwb2ludGVyICE9PSBudWxsKSB7XG5cbiAgICAgICAgLy8gMS4gTGV0IGxlYWQgYmUgcG9pbnRlciAvIDE5MCArIDB4ODEuXG4gICAgICAgIHZhciBsZWFkID0gZGl2KHBvaW50ZXIsIDE5MCkgKyAweDgxO1xuXG4gICAgICAgIC8vIDIuIExldCB0cmFpbCBiZSBwb2ludGVyICUgMTkwLlxuICAgICAgICB2YXIgdHJhaWwgPSBwb2ludGVyICUgMTkwO1xuXG4gICAgICAgIC8vIDMuIExldCBvZmZzZXQgYmUgMHg0MCBpZiB0cmFpbCBpcyBsZXNzIHRoYW4gMHgzRiBhbmQgMHg0MSBvdGhlcndpc2UuXG4gICAgICAgIHZhciBvZmZzZXQgPSB0cmFpbCA8IDB4M0YgPyAweDQwIDogMHg0MTtcblxuICAgICAgICAvLyA0LiBSZXR1cm4gdHdvIGJ5dGVzIHdob3NlIHZhbHVlcyBhcmUgbGVhZCBhbmQgdHJhaWwgKyBvZmZzZXQuXG4gICAgICAgIHJldHVybiBbbGVhZCwgdHJhaWwgKyBvZmZzZXRdO1xuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiBnYmsgZmxhZyBpcyBzZXQsIHJldHVybiBlcnJvciB3aXRoIGNvZGUgcG9pbnQuXG4gICAgICBpZiAoZ2JrX2ZsYWcpXG4gICAgICAgIHJldHVybiBlbmNvZGVyRXJyb3IoY29kZV9wb2ludCk7XG5cbiAgICAgIC8vIDcuIFNldCBwb2ludGVyIHRvIHRoZSBpbmRleCBnYjE4MDMwIHJhbmdlcyBwb2ludGVyIGZvciBjb2RlXG4gICAgICAvLyBwb2ludC5cbiAgICAgIHBvaW50ZXIgPSBpbmRleEdCMTgwMzBSYW5nZXNQb2ludGVyRm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyA4LiBMZXQgYnl0ZTEgYmUgcG9pbnRlciAvIDEwIC8gMTI2IC8gMTAuXG4gICAgICB2YXIgYnl0ZTEgPSBkaXYoZGl2KGRpdihwb2ludGVyLCAxMCksIDEyNiksIDEwKTtcblxuICAgICAgLy8gOS4gU2V0IHBvaW50ZXIgdG8gcG9pbnRlciDiiJIgYnl0ZTEgw5cgMTAgw5cgMTI2IMOXIDEwLlxuICAgICAgcG9pbnRlciA9IHBvaW50ZXIgLSBieXRlMSAqIDEwICogMTI2ICogMTA7XG5cbiAgICAgIC8vIDEwLiBMZXQgYnl0ZTIgYmUgcG9pbnRlciAvIDEwIC8gMTI2LlxuICAgICAgdmFyIGJ5dGUyID0gZGl2KGRpdihwb2ludGVyLCAxMCksIDEyNik7XG5cbiAgICAgIC8vIDExLiBTZXQgcG9pbnRlciB0byBwb2ludGVyIOKIkiBieXRlMiDDlyAxMCDDlyAxMjYuXG4gICAgICBwb2ludGVyID0gcG9pbnRlciAtIGJ5dGUyICogMTAgKiAxMjY7XG5cbiAgICAgIC8vIDEyLiBMZXQgYnl0ZTMgYmUgcG9pbnRlciAvIDEwLlxuICAgICAgdmFyIGJ5dGUzID0gZGl2KHBvaW50ZXIsIDEwKTtcblxuICAgICAgLy8gMTMuIExldCBieXRlNCBiZSBwb2ludGVyIOKIkiBieXRlMyDDlyAxMC5cbiAgICAgIHZhciBieXRlNCA9IHBvaW50ZXIgLSBieXRlMyAqIDEwO1xuXG4gICAgICAvLyAxNC4gUmV0dXJuIGZvdXIgYnl0ZXMgd2hvc2UgdmFsdWVzIGFyZSBieXRlMSArIDB4ODEsIGJ5dGUyICtcbiAgICAgIC8vIDB4MzAsIGJ5dGUzICsgMHg4MSwgYnl0ZTQgKyAweDMwLlxuICAgICAgcmV0dXJuIFtieXRlMSArIDB4ODEsXG4gICAgICAgICAgICAgIGJ5dGUyICsgMHgzMCxcbiAgICAgICAgICAgICAgYnl0ZTMgKyAweDgxLFxuICAgICAgICAgICAgICBieXRlNCArIDB4MzBdO1xuICAgIH07XG4gIH1cblxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGVuY29kZXJzWydnYjE4MDMwJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBHQjE4MDMwRW5jb2RlcihvcHRpb25zKTtcbiAgfTtcbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBkZWNvZGVyc1snZ2IxODAzMCddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgR0IxODAzMERlY29kZXIob3B0aW9ucyk7XG4gIH07XG5cblxuICAvL1xuICAvLyAxMS4gTGVnYWN5IG11bHRpLWJ5dGUgQ2hpbmVzZSAodHJhZGl0aW9uYWwpIGVuY29kaW5nc1xuICAvL1xuXG4gIC8vIDExLjEgYmlnNVxuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gQmlnNURlY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLy8gYmlnNSdzIGRlY29kZXIgaGFzIGFuIGFzc29jaWF0ZWQgYmlnNSBsZWFkIChpbml0aWFsbHkgMHgwMCkuXG4gICAgdmFyIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyBiaWc1X2xlYWQgPSAweDAwO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBUaGUgc3RyZWFtIG9mIGJ5dGVzIGJlaW5nIGRlY29kZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdGUgVGhlIG5leHQgYnl0ZSByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBUaGUgbmV4dCBjb2RlIHBvaW50KHMpXG4gICAgICogICAgIGRlY29kZWQsIG9yIG51bGwgaWYgbm90IGVub3VnaCBkYXRhIGV4aXN0cyBpbiB0aGUgaW5wdXRcbiAgICAgKiAgICAgc3RyZWFtIHRvIGRlY29kZSBhIGNvbXBsZXRlIGNvZGUgcG9pbnQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBiaXRlKSB7XG4gICAgICAvLyAxLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIGJpZzUgbGVhZCBpcyBub3QgMHgwMCwgc2V0XG4gICAgICAvLyBiaWc1IGxlYWQgdG8gMHgwMCBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0gJiYgYmlnNV9sZWFkICE9PSAweDAwKSB7XG4gICAgICAgIGJpZzVfbGVhZCA9IDB4MDA7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIGJpZzUgbGVhZCBpcyAweDAwLCByZXR1cm5cbiAgICAgIC8vIGZpbmlzaGVkLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0gJiYgYmlnNV9sZWFkID09PSAweDAwKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDMuIElmIGJpZzUgbGVhZCBpcyBub3QgMHgwMCwgbGV0IGxlYWQgYmUgYmlnNSBsZWFkLCBsZXRcbiAgICAgIC8vIHBvaW50ZXIgYmUgbnVsbCwgc2V0IGJpZzUgbGVhZCB0byAweDAwLCBhbmQgdGhlbiBydW4gdGhlc2VcbiAgICAgIC8vIHN1YnN0ZXBzOlxuICAgICAgaWYgKGJpZzVfbGVhZCAhPT0gMHgwMCkge1xuICAgICAgICB2YXIgbGVhZCA9IGJpZzVfbGVhZDtcbiAgICAgICAgdmFyIHBvaW50ZXIgPSBudWxsO1xuICAgICAgICBiaWc1X2xlYWQgPSAweDAwO1xuXG4gICAgICAgIC8vIDEuIExldCBvZmZzZXQgYmUgMHg0MCBpZiBieXRlIGlzIGxlc3MgdGhhbiAweDdGIGFuZCAweDYyXG4gICAgICAgIC8vIG90aGVyd2lzZS5cbiAgICAgICAgdmFyIG9mZnNldCA9IGJpdGUgPCAweDdGID8gMHg0MCA6IDB4NjI7XG5cbiAgICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHg0MCB0byAweDdFIG9yIDB4QTEgdG8gMHhGRSxcbiAgICAgICAgLy8gc2V0IHBvaW50ZXIgdG8gKGxlYWQg4oiSIDB4ODEpIMOXIDE1NyArIChieXRlIOKIkiBvZmZzZXQpLlxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDQwLCAweDdFKSB8fCBpblJhbmdlKGJpdGUsIDB4QTEsIDB4RkUpKVxuICAgICAgICAgIHBvaW50ZXIgPSAobGVhZCAtIDB4ODEpICogMTU3ICsgKGJpdGUgLSBvZmZzZXQpO1xuXG4gICAgICAgIC8vIDMuIElmIHRoZXJlIGlzIGEgcm93IGluIHRoZSB0YWJsZSBiZWxvdyB3aG9zZSBmaXJzdCBjb2x1bW5cbiAgICAgICAgLy8gaXMgcG9pbnRlciwgcmV0dXJuIHRoZSB0d28gY29kZSBwb2ludHMgbGlzdGVkIGluIGl0cyBzZWNvbmRcbiAgICAgICAgLy8gY29sdW1uXG4gICAgICAgIC8vIFBvaW50ZXIgfCBDb2RlIHBvaW50c1xuICAgICAgICAvLyAtLS0tLS0tLSstLS0tLS0tLS0tLS0tLVxuICAgICAgICAvLyAxMTMzICAgIHwgVSswMENBIFUrMDMwNFxuICAgICAgICAvLyAxMTM1ICAgIHwgVSswMENBIFUrMDMwQ1xuICAgICAgICAvLyAxMTY0ICAgIHwgVSswMEVBIFUrMDMwNFxuICAgICAgICAvLyAxMTY2ICAgIHwgVSswMEVBIFUrMDMwQ1xuICAgICAgICBzd2l0Y2ggKHBvaW50ZXIpIHtcbiAgICAgICAgICBjYXNlIDExMzM6IHJldHVybiBbMHgwMENBLCAweDAzMDRdO1xuICAgICAgICAgIGNhc2UgMTEzNTogcmV0dXJuIFsweDAwQ0EsIDB4MDMwQ107XG4gICAgICAgICAgY2FzZSAxMTY0OiByZXR1cm4gWzB4MDBFQSwgMHgwMzA0XTtcbiAgICAgICAgICBjYXNlIDExNjY6IHJldHVybiBbMHgwMEVBLCAweDAzMENdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4gTGV0IGNvZGUgcG9pbnQgYmUgbnVsbCBpZiBwb2ludGVyIGlzIG51bGwgYW5kIHRoZSBpbmRleFxuICAgICAgICAvLyBjb2RlIHBvaW50IGZvciBwb2ludGVyIGluIGluZGV4IGJpZzUgb3RoZXJ3aXNlLlxuICAgICAgICB2YXIgY29kZV9wb2ludCA9IChwb2ludGVyID09PSBudWxsKSA/IG51bGwgOlxuICAgICAgICAgICAgaW5kZXhDb2RlUG9pbnRGb3IocG9pbnRlciwgaW5kZXgoJ2JpZzUnKSk7XG5cbiAgICAgICAgLy8gNS4gSWYgY29kZSBwb2ludCBpcyBudWxsIGFuZCBieXRlIGlzIGluIHRoZSByYW5nZSAweDAwIHRvXG4gICAgICAgIC8vIDB4N0YsIHByZXBlbmQgYnl0ZSB0byBzdHJlYW0uXG4gICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsICYmIGluUmFuZ2UoYml0ZSwgMHgwMCwgMHg3RikpXG4gICAgICAgICAgc3RyZWFtLnByZXBlbmQoYml0ZSk7XG5cbiAgICAgICAgLy8gNi4gSWYgY29kZSBwb2ludCBpcyBudWxsLCByZXR1cm4gZXJyb3IuXG4gICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsKVxuICAgICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICAgIC8vIDcuIFJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4MDAgdG8gMHg3RiwgcmV0dXJuIGEgY29kZSBwb2ludFxuICAgICAgLy8gd2hvc2UgdmFsdWUgaXMgYnl0ZS5cbiAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4MDAsIDB4N0YpKVxuICAgICAgICByZXR1cm4gYml0ZTtcblxuICAgICAgLy8gNS4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHg4MSB0byAweEZFLCBzZXQgYmlnNSBsZWFkIHRvXG4gICAgICAvLyBieXRlIGFuZCByZXR1cm4gY29udGludWUuXG4gICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDgxLCAweEZFKSkge1xuICAgICAgICBiaWc1X2xlYWQgPSBiaXRlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gNi4gUmV0dXJuIGVycm9yLlxuICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0VuY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gQmlnNUVuY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBJbnB1dCBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgTmV4dCBjb2RlIHBvaW50IHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gQnl0ZShzKSB0byBlbWl0LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgY29kZV9wb2ludCkge1xuICAgICAgLy8gMS4gSWYgY29kZSBwb2ludCBpcyBlbmQtb2Ytc3RyZWFtLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAyLiBJZiBjb2RlIHBvaW50IGlzIGluIHRoZSByYW5nZSBVKzAwMDAgdG8gVSswMDdGLCByZXR1cm4gYVxuICAgICAgLy8gYnl0ZSB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgaWYgKGluUmFuZ2UoY29kZV9wb2ludCwgMHgwMDAwLCAweDAwN0YpKVxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcblxuICAgICAgLy8gMy4gTGV0IHBvaW50ZXIgYmUgdGhlIGluZGV4IGJpZzUgcG9pbnRlciBmb3IgY29kZSBwb2ludC5cbiAgICAgIHZhciBwb2ludGVyID0gaW5kZXhCaWc1UG9pbnRlckZvcihjb2RlX3BvaW50LCBpbmRleCgnYmlnNScpKTtcblxuICAgICAgLy8gNC4gSWYgcG9pbnRlciBpcyBudWxsLCByZXR1cm4gZXJyb3Igd2l0aCBjb2RlIHBvaW50LlxuICAgICAgaWYgKHBvaW50ZXIgPT09IG51bGwpXG4gICAgICAgIHJldHVybiBlbmNvZGVyRXJyb3IoY29kZV9wb2ludCk7XG5cbiAgICAgIC8vIDUuIExldCBsZWFkIGJlIHBvaW50ZXIgLyAxNTcgKyAweDgxLlxuICAgICAgdmFyIGxlYWQgPSBkaXYocG9pbnRlciwgMTU3KSArIDB4ODE7XG5cbiAgICAgIC8vIDYuIElmIGxlYWQgaXMgbGVzcyB0aGFuIDB4QTEsIHJldHVybiBlcnJvciB3aXRoIGNvZGUgcG9pbnQuXG4gICAgICBpZiAobGVhZCA8IDB4QTEpXG4gICAgICAgIHJldHVybiBlbmNvZGVyRXJyb3IoY29kZV9wb2ludCk7XG5cbiAgICAgIC8vIDcuIExldCB0cmFpbCBiZSBwb2ludGVyICUgMTU3LlxuICAgICAgdmFyIHRyYWlsID0gcG9pbnRlciAlIDE1NztcblxuICAgICAgLy8gOC4gTGV0IG9mZnNldCBiZSAweDQwIGlmIHRyYWlsIGlzIGxlc3MgdGhhbiAweDNGIGFuZCAweDYyXG4gICAgICAvLyBvdGhlcndpc2UuXG4gICAgICB2YXIgb2Zmc2V0ID0gdHJhaWwgPCAweDNGID8gMHg0MCA6IDB4NjI7XG5cbiAgICAgIC8vIFJldHVybiB0d28gYnl0ZXMgd2hvc2UgdmFsdWVzIGFyZSBsZWFkIGFuZCB0cmFpbCArIG9mZnNldC5cbiAgICAgIHJldHVybiBbbGVhZCwgdHJhaWwgKyBvZmZzZXRdO1xuICAgIH07XG4gIH1cblxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGVuY29kZXJzWydiaWc1J10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBCaWc1RW5jb2RlcihvcHRpb25zKTtcbiAgfTtcbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBkZWNvZGVyc1snYmlnNSddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgQmlnNURlY29kZXIob3B0aW9ucyk7XG4gIH07XG5cblxuICAvL1xuICAvLyAxMi4gTGVnYWN5IG11bHRpLWJ5dGUgSmFwYW5lc2UgZW5jb2RpbmdzXG4gIC8vXG5cbiAgLy8gMTIuMSBldWMtanBcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtEZWNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIEVVQ0pQRGVjb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcblxuICAgIC8vIGV1Yy1qcCdzIGRlY29kZXIgaGFzIGFuIGFzc29jaWF0ZWQgZXVjLWpwIGppczAyMTIgZmxhZ1xuICAgIC8vIChpbml0aWFsbHkgdW5zZXQpIGFuZCBldWMtanAgbGVhZCAoaW5pdGlhbGx5IDB4MDApLlxuICAgIHZhciAvKiogQHR5cGUge2Jvb2xlYW59ICovIGV1Y2pwX2ppczAyMTJfZmxhZyA9IGZhbHNlLFxuICAgICAgICAvKiogQHR5cGUge251bWJlcn0gKi8gZXVjanBfbGVhZCA9IDB4MDA7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHtcbiAgICAgIC8vIDEuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSBhbmQgZXVjLWpwIGxlYWQgaXMgbm90IDB4MDAsIHNldFxuICAgICAgLy8gZXVjLWpwIGxlYWQgdG8gMHgwMCwgYW5kIHJldHVybiBlcnJvci5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmIGV1Y2pwX2xlYWQgIT09IDB4MDApIHtcbiAgICAgICAgZXVjanBfbGVhZCA9IDB4MDA7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIGV1Yy1qcCBsZWFkIGlzIDB4MDAsIHJldHVyblxuICAgICAgLy8gZmluaXNoZWQuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiBldWNqcF9sZWFkID09PSAweDAwKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDMuIElmIGV1Yy1qcCBsZWFkIGlzIDB4OEUgYW5kIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4QTEgdG9cbiAgICAgIC8vIDB4REYsIHNldCBldWMtanAgbGVhZCB0byAweDAwIGFuZCByZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlXG4gICAgICAvLyB2YWx1ZSBpcyAweEZGNjEgKyBieXRlIOKIkiAweEExLlxuICAgICAgaWYgKGV1Y2pwX2xlYWQgPT09IDB4OEUgJiYgaW5SYW5nZShiaXRlLCAweEExLCAweERGKSkge1xuICAgICAgICBldWNqcF9sZWFkID0gMHgwMDtcbiAgICAgICAgcmV0dXJuIDB4RkY2MSArIGJpdGUgLSAweEExO1xuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBldWMtanAgbGVhZCBpcyAweDhGIGFuZCBieXRlIGlzIGluIHRoZSByYW5nZSAweEExIHRvXG4gICAgICAvLyAweEZFLCBzZXQgdGhlIGV1Yy1qcCBqaXMwMjEyIGZsYWcsIHNldCBldWMtanAgbGVhZCB0byBieXRlLFxuICAgICAgLy8gYW5kIHJldHVybiBjb250aW51ZS5cbiAgICAgIGlmIChldWNqcF9sZWFkID09PSAweDhGICYmIGluUmFuZ2UoYml0ZSwgMHhBMSwgMHhGRSkpIHtcbiAgICAgICAgZXVjanBfamlzMDIxMl9mbGFnID0gdHJ1ZTtcbiAgICAgICAgZXVjanBfbGVhZCA9IGJpdGU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiBldWMtanAgbGVhZCBpcyBub3QgMHgwMCwgbGV0IGxlYWQgYmUgZXVjLWpwIGxlYWQsIHNldFxuICAgICAgLy8gZXVjLWpwIGxlYWQgdG8gMHgwMCwgYW5kIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICAgIGlmIChldWNqcF9sZWFkICE9PSAweDAwKSB7XG4gICAgICAgIHZhciBsZWFkID0gZXVjanBfbGVhZDtcbiAgICAgICAgZXVjanBfbGVhZCA9IDB4MDA7XG5cbiAgICAgICAgLy8gMS4gTGV0IGNvZGUgcG9pbnQgYmUgbnVsbC5cbiAgICAgICAgdmFyIGNvZGVfcG9pbnQgPSBudWxsO1xuXG4gICAgICAgIC8vIDIuIElmIGxlYWQgYW5kIGJ5dGUgYXJlIGJvdGggaW4gdGhlIHJhbmdlIDB4QTEgdG8gMHhGRSwgc2V0XG4gICAgICAgIC8vIGNvZGUgcG9pbnQgdG8gdGhlIGluZGV4IGNvZGUgcG9pbnQgZm9yIChsZWFkIOKIkiAweEExKSDDlyA5NCArXG4gICAgICAgIC8vIGJ5dGUg4oiSIDB4QTEgaW4gaW5kZXggamlzMDIwOCBpZiB0aGUgZXVjLWpwIGppczAyMTIgZmxhZyBpc1xuICAgICAgICAvLyB1bnNldCBhbmQgaW4gaW5kZXggamlzMDIxMiBvdGhlcndpc2UuXG4gICAgICAgIGlmIChpblJhbmdlKGxlYWQsIDB4QTEsIDB4RkUpICYmIGluUmFuZ2UoYml0ZSwgMHhBMSwgMHhGRSkpIHtcbiAgICAgICAgICBjb2RlX3BvaW50ID0gaW5kZXhDb2RlUG9pbnRGb3IoXG4gICAgICAgICAgICAobGVhZCAtIDB4QTEpICogOTQgKyAoYml0ZSAtIDB4QTEpLFxuICAgICAgICAgICAgaW5kZXgoIWV1Y2pwX2ppczAyMTJfZmxhZyA/ICdqaXMwMjA4JyA6ICdqaXMwMjEyJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gVW5zZXQgdGhlIGV1Yy1qcCBqaXMwMjEyIGZsYWcuXG4gICAgICAgIGV1Y2pwX2ppczAyMTJfZmxhZyA9IGZhbHNlO1xuXG4gICAgICAgIC8vIDQuIElmIGJ5dGUgaXMgbm90IGluIHRoZSByYW5nZSAweEExIHRvIDB4RkUsIHByZXBlbmQgYnl0ZVxuICAgICAgICAvLyB0byBzdHJlYW0uXG4gICAgICAgIGlmICghaW5SYW5nZShiaXRlLCAweEExLCAweEZFKSlcbiAgICAgICAgICBzdHJlYW0ucHJlcGVuZChiaXRlKTtcblxuICAgICAgICAvLyA1LiBJZiBjb2RlIHBvaW50IGlzIG51bGwsIHJldHVybiBlcnJvci5cbiAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IG51bGwpXG4gICAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgICAgLy8gNi4gUmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcbiAgICAgIH1cblxuICAgICAgLy8gNi4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHgwMCB0byAweDdGLCByZXR1cm4gYSBjb2RlIHBvaW50XG4gICAgICAvLyB3aG9zZSB2YWx1ZSBpcyBieXRlLlxuICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgwMCwgMHg3RikpXG4gICAgICAgIHJldHVybiBiaXRlO1xuXG4gICAgICAvLyA3LiBJZiBieXRlIGlzIDB4OEUsIDB4OEYsIG9yIGluIHRoZSByYW5nZSAweEExIHRvIDB4RkUsIHNldFxuICAgICAgLy8gZXVjLWpwIGxlYWQgdG8gYnl0ZSBhbmQgcmV0dXJuIGNvbnRpbnVlLlxuICAgICAgaWYgKGJpdGUgPT09IDB4OEUgfHwgYml0ZSA9PT0gMHg4RiB8fCBpblJhbmdlKGJpdGUsIDB4QTEsIDB4RkUpKSB7XG4gICAgICAgIGV1Y2pwX2xlYWQgPSBiaXRlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gOC4gUmV0dXJuIGVycm9yLlxuICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0VuY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gRVVDSlBFbmNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gSW5wdXQgc3RyZWFtLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IE5leHQgY29kZSBwb2ludCByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IEJ5dGUocykgdG8gZW1pdC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGNvZGVfcG9pbnQpIHtcbiAgICAgIC8vIDEuIElmIGNvZGUgcG9pbnQgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMi4gSWYgY29kZSBwb2ludCBpcyBpbiB0aGUgcmFuZ2UgVSswMDAwIHRvIFUrMDA3RiwgcmV0dXJuIGFcbiAgICAgIC8vIGJ5dGUgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIGlmIChpblJhbmdlKGNvZGVfcG9pbnQsIDB4MDAwMCwgMHgwMDdGKSlcbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG5cbiAgICAgIC8vIDMuIElmIGNvZGUgcG9pbnQgaXMgVSswMEE1LCByZXR1cm4gYnl0ZSAweDVDLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4MDBBNSlcbiAgICAgICAgcmV0dXJuIDB4NUM7XG5cbiAgICAgIC8vIDQuIElmIGNvZGUgcG9pbnQgaXMgVSsyMDNFLCByZXR1cm4gYnl0ZSAweDdFLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4MjAzRSlcbiAgICAgICAgcmV0dXJuIDB4N0U7XG5cbiAgICAgIC8vIDUuIElmIGNvZGUgcG9pbnQgaXMgaW4gdGhlIHJhbmdlIFUrRkY2MSB0byBVK0ZGOUYsIHJldHVybiB0d29cbiAgICAgIC8vIGJ5dGVzIHdob3NlIHZhbHVlcyBhcmUgMHg4RSBhbmQgY29kZSBwb2ludCDiiJIgMHhGRjYxICsgMHhBMS5cbiAgICAgIGlmIChpblJhbmdlKGNvZGVfcG9pbnQsIDB4RkY2MSwgMHhGRjlGKSlcbiAgICAgICAgcmV0dXJuIFsweDhFLCBjb2RlX3BvaW50IC0gMHhGRjYxICsgMHhBMV07XG5cbiAgICAgIC8vIDYuIElmIGNvZGUgcG9pbnQgaXMgVSsyMDIyLCBzZXQgaXQgdG8gVStGRjBELlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4MjAyMilcbiAgICAgICAgY29kZV9wb2ludCA9IDB4RkYwRDtcblxuICAgICAgLy8gNy4gTGV0IHBvaW50ZXIgYmUgdGhlIGluZGV4IHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQgaW4gaW5kZXhcbiAgICAgIC8vIGppczAyMDguXG4gICAgICB2YXIgcG9pbnRlciA9IGluZGV4UG9pbnRlckZvcihjb2RlX3BvaW50LCBpbmRleCgnamlzMDIwOCcpKTtcblxuICAgICAgLy8gOC4gSWYgcG9pbnRlciBpcyBudWxsLCByZXR1cm4gZXJyb3Igd2l0aCBjb2RlIHBvaW50LlxuICAgICAgaWYgKHBvaW50ZXIgPT09IG51bGwpXG4gICAgICAgIHJldHVybiBlbmNvZGVyRXJyb3IoY29kZV9wb2ludCk7XG5cbiAgICAgIC8vIDkuIExldCBsZWFkIGJlIHBvaW50ZXIgLyA5NCArIDB4QTEuXG4gICAgICB2YXIgbGVhZCA9IGRpdihwb2ludGVyLCA5NCkgKyAweEExO1xuXG4gICAgICAvLyAxMC4gTGV0IHRyYWlsIGJlIHBvaW50ZXIgJSA5NCArIDB4QTEuXG4gICAgICB2YXIgdHJhaWwgPSBwb2ludGVyICUgOTQgKyAweEExO1xuXG4gICAgICAvLyAxMS4gUmV0dXJuIHR3byBieXRlcyB3aG9zZSB2YWx1ZXMgYXJlIGxlYWQgYW5kIHRyYWlsLlxuICAgICAgcmV0dXJuIFtsZWFkLCB0cmFpbF07XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ2V1Yy1qcCddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgRVVDSlBFbmNvZGVyKG9wdGlvbnMpO1xuICB9O1xuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWydldWMtanAnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEVVQ0pQRGVjb2RlcihvcHRpb25zKTtcbiAgfTtcblxuICAvLyAxMi4yIGlzby0yMDIyLWpwXG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RGVjb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBJU08yMDIySlBEZWNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8qKiBAZW51bSAqL1xuICAgIHZhciBzdGF0ZXMgPSB7XG4gICAgICBBU0NJSTogMCxcbiAgICAgIFJvbWFuOiAxLFxuICAgICAgS2F0YWthbmE6IDIsXG4gICAgICBMZWFkQnl0ZTogMyxcbiAgICAgIFRyYWlsQnl0ZTogNCxcbiAgICAgIEVzY2FwZVN0YXJ0OiA1LFxuICAgICAgRXNjYXBlOiA2XG4gICAgfTtcbiAgICAvLyBpc28tMjAyMi1qcCdzIGRlY29kZXIgaGFzIGFuIGFzc29jaWF0ZWQgaXNvLTIwMjItanAgZGVjb2RlclxuICAgIC8vIHN0YXRlIChpbml0aWFsbHkgQVNDSUkpLCBpc28tMjAyMi1qcCBkZWNvZGVyIG91dHB1dCBzdGF0ZVxuICAgIC8vIChpbml0aWFsbHkgQVNDSUkpLCBpc28tMjAyMi1qcCBsZWFkIChpbml0aWFsbHkgMHgwMCksIGFuZFxuICAgIC8vIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnIChpbml0aWFsbHkgdW5zZXQpLlxuICAgIHZhciAvKiogQHR5cGUge251bWJlcn0gKi8gaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBzdGF0ZXMuQVNDSUksXG4gICAgICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyBpc28yMDIyanBfZGVjb2Rlcl9vdXRwdXRfc3RhdGUgPSBzdGF0ZXMuQVNDSUksXG4gICAgICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyBpc28yMDIyanBfbGVhZCA9IDB4MDAsXG4gICAgICAgIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBUaGUgc3RyZWFtIG9mIGJ5dGVzIGJlaW5nIGRlY29kZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdGUgVGhlIG5leHQgYnl0ZSByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBUaGUgbmV4dCBjb2RlIHBvaW50KHMpXG4gICAgICogICAgIGRlY29kZWQsIG9yIG51bGwgaWYgbm90IGVub3VnaCBkYXRhIGV4aXN0cyBpbiB0aGUgaW5wdXRcbiAgICAgKiAgICAgc3RyZWFtIHRvIGRlY29kZSBhIGNvbXBsZXRlIGNvZGUgcG9pbnQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBiaXRlKSB7XG4gICAgICAvLyBzd2l0Y2hpbmcgb24gaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZTpcbiAgICAgIHN3aXRjaCAoaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUpIHtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICBjYXNlIHN0YXRlcy5BU0NJSTpcbiAgICAgICAgLy8gQVNDSUlcbiAgICAgICAgLy8gQmFzZWQgb24gYnl0ZTpcblxuICAgICAgICAvLyAweDFCXG4gICAgICAgIGlmIChiaXRlID09PSAweDFCKSB7XG4gICAgICAgICAgLy8gU2V0IGlzby0yMDIyLWpwIGRlY29kZXIgc3RhdGUgdG8gZXNjYXBlIHN0YXJ0IGFuZCByZXR1cm5cbiAgICAgICAgICAvLyBjb250aW51ZS5cbiAgICAgICAgICBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IHN0YXRlcy5Fc2NhcGVTdGFydDtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDB4MDAgdG8gMHg3RiwgZXhjbHVkaW5nIDB4MEUsIDB4MEYsIGFuZCAweDFCXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4MDAsIDB4N0YpICYmIGJpdGUgIT09IDB4MEVcbiAgICAgICAgICAgICYmIGJpdGUgIT09IDB4MEYgJiYgYml0ZSAhPT0gMHgxQikge1xuICAgICAgICAgIC8vIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZyBhbmQgcmV0dXJuIGEgY29kZSBwb2ludFxuICAgICAgICAgIC8vIHdob3NlIHZhbHVlIGlzIGJ5dGUuXG4gICAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIGJpdGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbmQtb2Ytc3RyZWFtXG4gICAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtKSB7XG4gICAgICAgICAgLy8gUmV0dXJuIGZpbmlzaGVkLlxuICAgICAgICAgIHJldHVybiBmaW5pc2hlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZVxuICAgICAgICAvLyBVbnNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcgYW5kIHJldHVybiBlcnJvci5cbiAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICBjYXNlIHN0YXRlcy5Sb21hbjpcbiAgICAgICAgLy8gUm9tYW5cbiAgICAgICAgLy8gQmFzZWQgb24gYnl0ZTpcblxuICAgICAgICAvLyAweDFCXG4gICAgICAgIGlmIChiaXRlID09PSAweDFCKSB7XG4gICAgICAgICAgLy8gU2V0IGlzby0yMDIyLWpwIGRlY29kZXIgc3RhdGUgdG8gZXNjYXBlIHN0YXJ0IGFuZCByZXR1cm5cbiAgICAgICAgICAvLyBjb250aW51ZS5cbiAgICAgICAgICBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IHN0YXRlcy5Fc2NhcGVTdGFydDtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDB4NUNcbiAgICAgICAgaWYgKGJpdGUgPT09IDB4NUMpIHtcbiAgICAgICAgICAvLyBVbnNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcgYW5kIHJldHVybiBjb2RlIHBvaW50XG4gICAgICAgICAgLy8gVSswMEE1LlxuICAgICAgICAgIGlzbzIwMjJqcF9vdXRwdXRfZmxhZyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiAweDAwQTU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAweDdFXG4gICAgICAgIGlmIChiaXRlID09PSAweDdFKSB7XG4gICAgICAgICAgLy8gVW5zZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnIGFuZCByZXR1cm4gY29kZSBwb2ludFxuICAgICAgICAgIC8vIFUrMjAzRS5cbiAgICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gMHgyMDNFO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMHgwMCB0byAweDdGLCBleGNsdWRpbmcgMHgwRSwgMHgwRiwgMHgxQiwgMHg1QywgYW5kIDB4N0VcbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgwMCwgMHg3RikgJiYgYml0ZSAhPT0gMHgwRSAmJiBiaXRlICE9PSAweDBGXG4gICAgICAgICAgICAmJiBiaXRlICE9PSAweDFCICYmIGJpdGUgIT09IDB4NUMgJiYgYml0ZSAhPT0gMHg3RSkge1xuICAgICAgICAgIC8vIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZyBhbmQgcmV0dXJuIGEgY29kZSBwb2ludFxuICAgICAgICAgIC8vIHdob3NlIHZhbHVlIGlzIGJ5dGUuXG4gICAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIGJpdGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbmQtb2Ytc3RyZWFtXG4gICAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtKSB7XG4gICAgICAgICAgLy8gUmV0dXJuIGZpbmlzaGVkLlxuICAgICAgICAgIHJldHVybiBmaW5pc2hlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZVxuICAgICAgICAvLyBVbnNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcgYW5kIHJldHVybiBlcnJvci5cbiAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICBjYXNlIHN0YXRlcy5LYXRha2FuYTpcbiAgICAgICAgLy8gS2F0YWthbmFcbiAgICAgICAgLy8gQmFzZWQgb24gYnl0ZTpcblxuICAgICAgICAvLyAweDFCXG4gICAgICAgIGlmIChiaXRlID09PSAweDFCKSB7XG4gICAgICAgICAgLy8gU2V0IGlzby0yMDIyLWpwIGRlY29kZXIgc3RhdGUgdG8gZXNjYXBlIHN0YXJ0IGFuZCByZXR1cm5cbiAgICAgICAgICAvLyBjb250aW51ZS5cbiAgICAgICAgICBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IHN0YXRlcy5Fc2NhcGVTdGFydDtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDB4MjEgdG8gMHg1RlxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDIxLCAweDVGKSkge1xuICAgICAgICAgIC8vIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZyBhbmQgcmV0dXJuIGEgY29kZSBwb2ludFxuICAgICAgICAgIC8vIHdob3NlIHZhbHVlIGlzIDB4RkY2MSArIGJ5dGUg4oiSIDB4MjEuXG4gICAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIDB4RkY2MSArIGJpdGUgLSAweDIxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW5kLW9mLXN0cmVhbVxuICAgICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSkge1xuICAgICAgICAgIC8vIFJldHVybiBmaW5pc2hlZC5cbiAgICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcndpc2VcbiAgICAgICAgLy8gVW5zZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICAgIGlzbzIwMjJqcF9vdXRwdXRfZmxhZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgY2FzZSBzdGF0ZXMuTGVhZEJ5dGU6XG4gICAgICAgIC8vIExlYWQgYnl0ZVxuICAgICAgICAvLyBCYXNlZCBvbiBieXRlOlxuXG4gICAgICAgIC8vIDB4MUJcbiAgICAgICAgaWYgKGJpdGUgPT09IDB4MUIpIHtcbiAgICAgICAgICAvLyBTZXQgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byBlc2NhcGUgc3RhcnQgYW5kIHJldHVyblxuICAgICAgICAgIC8vIGNvbnRpbnVlLlxuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkVzY2FwZVN0YXJ0O1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMHgyMSB0byAweDdFXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4MjEsIDB4N0UpKSB7XG4gICAgICAgICAgLy8gVW5zZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnLCBzZXQgaXNvLTIwMjItanAgbGVhZFxuICAgICAgICAgIC8vIHRvIGJ5dGUsIGlzby0yMDIyLWpwIGRlY29kZXIgc3RhdGUgdG8gdHJhaWwgYnl0ZSwgYW5kXG4gICAgICAgICAgLy8gcmV0dXJuIGNvbnRpbnVlLlxuICAgICAgICAgIGlzbzIwMjJqcF9vdXRwdXRfZmxhZyA9IGZhbHNlO1xuICAgICAgICAgIGlzbzIwMjJqcF9sZWFkID0gYml0ZTtcbiAgICAgICAgICBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IHN0YXRlcy5UcmFpbEJ5dGU7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbmQtb2Ytc3RyZWFtXG4gICAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtKSB7XG4gICAgICAgICAgLy8gUmV0dXJuIGZpbmlzaGVkLlxuICAgICAgICAgIHJldHVybiBmaW5pc2hlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZVxuICAgICAgICAvLyBVbnNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcgYW5kIHJldHVybiBlcnJvci5cbiAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICBjYXNlIHN0YXRlcy5UcmFpbEJ5dGU6XG4gICAgICAgIC8vIFRyYWlsIGJ5dGVcbiAgICAgICAgLy8gQmFzZWQgb24gYnl0ZTpcblxuICAgICAgICAvLyAweDFCXG4gICAgICAgIGlmIChiaXRlID09PSAweDFCKSB7XG4gICAgICAgICAgLy8gU2V0IGlzby0yMDIyLWpwIGRlY29kZXIgc3RhdGUgdG8gZXNjYXBlIHN0YXJ0IGFuZCByZXR1cm5cbiAgICAgICAgICAvLyBjb250aW51ZS5cbiAgICAgICAgICBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IHN0YXRlcy5Fc2NhcGVTdGFydDtcbiAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDB4MjEgdG8gMHg3RVxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDIxLCAweDdFKSkge1xuICAgICAgICAgIC8vIDEuIFNldCB0aGUgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byBsZWFkIGJ5dGUuXG4gICAgICAgICAgaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBzdGF0ZXMuTGVhZEJ5dGU7XG5cbiAgICAgICAgICAvLyAyLiBMZXQgcG9pbnRlciBiZSAoaXNvLTIwMjItanAgbGVhZCDiiJIgMHgyMSkgw5cgOTQgKyBieXRlIOKIkiAweDIxLlxuICAgICAgICAgIHZhciBwb2ludGVyID0gKGlzbzIwMjJqcF9sZWFkIC0gMHgyMSkgKiA5NCArIGJpdGUgLSAweDIxO1xuXG4gICAgICAgICAgLy8gMy4gTGV0IGNvZGUgcG9pbnQgYmUgdGhlIGluZGV4IGNvZGUgcG9pbnQgZm9yIHBvaW50ZXIgaW4gaW5kZXggamlzMDIwOC5cbiAgICAgICAgICB2YXIgY29kZV9wb2ludCA9IGluZGV4Q29kZVBvaW50Rm9yKHBvaW50ZXIsIGluZGV4KCdqaXMwMjA4JykpO1xuXG4gICAgICAgICAgLy8gNC4gSWYgY29kZSBwb2ludCBpcyBudWxsLCByZXR1cm4gZXJyb3IuXG4gICAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgICAgIC8vIDUuIFJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVuZC1vZi1zdHJlYW1cbiAgICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0pIHtcbiAgICAgICAgICAvLyBTZXQgdGhlIGlzby0yMDIyLWpwIGRlY29kZXIgc3RhdGUgdG8gbGVhZCBieXRlLCBwcmVwZW5kXG4gICAgICAgICAgLy8gYnl0ZSB0byBzdHJlYW0sIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICAgICAgaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBzdGF0ZXMuTGVhZEJ5dGU7XG4gICAgICAgICAgc3RyZWFtLnByZXBlbmQoYml0ZSk7XG4gICAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcndpc2VcbiAgICAgICAgLy8gU2V0IGlzby0yMDIyLWpwIGRlY29kZXIgc3RhdGUgdG8gbGVhZCBieXRlIGFuZCByZXR1cm5cbiAgICAgICAgLy8gZXJyb3IuXG4gICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkxlYWRCeXRlO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgY2FzZSBzdGF0ZXMuRXNjYXBlU3RhcnQ6XG4gICAgICAgIC8vIEVzY2FwZSBzdGFydFxuXG4gICAgICAgIC8vIDEuIElmIGJ5dGUgaXMgZWl0aGVyIDB4MjQgb3IgMHgyOCwgc2V0IGlzby0yMDIyLWpwIGxlYWQgdG9cbiAgICAgICAgLy8gYnl0ZSwgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byBlc2NhcGUsIGFuZCByZXR1cm5cbiAgICAgICAgLy8gY29udGludWUuXG4gICAgICAgIGlmIChiaXRlID09PSAweDI0IHx8IGJpdGUgPT09IDB4MjgpIHtcbiAgICAgICAgICBpc28yMDIyanBfbGVhZCA9IGJpdGU7XG4gICAgICAgICAgaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBzdGF0ZXMuRXNjYXBlO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gUHJlcGVuZCBieXRlIHRvIHN0cmVhbS5cbiAgICAgICAgc3RyZWFtLnByZXBlbmQoYml0ZSk7XG5cbiAgICAgICAgLy8gMy4gVW5zZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnLCBzZXQgaXNvLTIwMjItanBcbiAgICAgICAgLy8gZGVjb2RlciBzdGF0ZSB0byBpc28tMjAyMi1qcCBkZWNvZGVyIG91dHB1dCBzdGF0ZSwgYW5kXG4gICAgICAgIC8vIHJldHVybiBlcnJvci5cbiAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gaXNvMjAyMmpwX2RlY29kZXJfb3V0cHV0X3N0YXRlO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgY2FzZSBzdGF0ZXMuRXNjYXBlOlxuICAgICAgICAvLyBFc2NhcGVcblxuICAgICAgICAvLyAxLiBMZXQgbGVhZCBiZSBpc28tMjAyMi1qcCBsZWFkIGFuZCBzZXQgaXNvLTIwMjItanAgbGVhZCB0b1xuICAgICAgICAvLyAweDAwLlxuICAgICAgICB2YXIgbGVhZCA9IGlzbzIwMjJqcF9sZWFkO1xuICAgICAgICBpc28yMDIyanBfbGVhZCA9IDB4MDA7XG5cbiAgICAgICAgLy8gMi4gTGV0IHN0YXRlIGJlIG51bGwuXG4gICAgICAgIHZhciBzdGF0ZSA9IG51bGw7XG5cbiAgICAgICAgLy8gMy4gSWYgbGVhZCBpcyAweDI4IGFuZCBieXRlIGlzIDB4NDIsIHNldCBzdGF0ZSB0byBBU0NJSS5cbiAgICAgICAgaWYgKGxlYWQgPT09IDB4MjggJiYgYml0ZSA9PT0gMHg0MilcbiAgICAgICAgICBzdGF0ZSA9IHN0YXRlcy5BU0NJSTtcblxuICAgICAgICAvLyA0LiBJZiBsZWFkIGlzIDB4MjggYW5kIGJ5dGUgaXMgMHg0QSwgc2V0IHN0YXRlIHRvIFJvbWFuLlxuICAgICAgICBpZiAobGVhZCA9PT0gMHgyOCAmJiBiaXRlID09PSAweDRBKVxuICAgICAgICAgIHN0YXRlID0gc3RhdGVzLlJvbWFuO1xuXG4gICAgICAgIC8vIDUuIElmIGxlYWQgaXMgMHgyOCBhbmQgYnl0ZSBpcyAweDQ5LCBzZXQgc3RhdGUgdG8gS2F0YWthbmEuXG4gICAgICAgIGlmIChsZWFkID09PSAweDI4ICYmIGJpdGUgPT09IDB4NDkpXG4gICAgICAgICAgc3RhdGUgPSBzdGF0ZXMuS2F0YWthbmE7XG5cbiAgICAgICAgLy8gNi4gSWYgbGVhZCBpcyAweDI0IGFuZCBieXRlIGlzIGVpdGhlciAweDQwIG9yIDB4NDIsIHNldFxuICAgICAgICAvLyBzdGF0ZSB0byBsZWFkIGJ5dGUuXG4gICAgICAgIGlmIChsZWFkID09PSAweDI0ICYmIChiaXRlID09PSAweDQwIHx8IGJpdGUgPT09IDB4NDIpKVxuICAgICAgICAgIHN0YXRlID0gc3RhdGVzLkxlYWRCeXRlO1xuXG4gICAgICAgIC8vIDcuIElmIHN0YXRlIGlzIG5vbi1udWxsLCBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIDEuIFNldCBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlIGFuZCBpc28tMjAyMi1qcCBkZWNvZGVyXG4gICAgICAgICAgLy8gb3V0cHV0IHN0YXRlIHRvIHN0YXRlcy5cbiAgICAgICAgICBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGU7XG5cbiAgICAgICAgICAvLyAyLiBMZXQgb3V0cHV0IGZsYWcgYmUgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnLlxuICAgICAgICAgIHZhciBvdXRwdXRfZmxhZyA9IGlzbzIwMjJqcF9vdXRwdXRfZmxhZztcblxuICAgICAgICAgIC8vIDMuIFNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcuXG4gICAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gdHJ1ZTtcblxuICAgICAgICAgIC8vIDQuIFJldHVybiBjb250aW51ZSwgaWYgb3V0cHV0IGZsYWcgaXMgdW5zZXQsIGFuZCBlcnJvclxuICAgICAgICAgIC8vIG90aGVyd2lzZS5cbiAgICAgICAgICByZXR1cm4gIW91dHB1dF9mbGFnID8gbnVsbCA6IGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA4LiBQcmVwZW5kIGxlYWQgYW5kIGJ5dGUgdG8gc3RyZWFtLlxuICAgICAgICBzdHJlYW0ucHJlcGVuZChbbGVhZCwgYml0ZV0pO1xuXG4gICAgICAgIC8vIDkuIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZywgc2V0IGlzby0yMDIyLWpwXG4gICAgICAgIC8vIGRlY29kZXIgc3RhdGUgdG8gaXNvLTIwMjItanAgZGVjb2RlciBvdXRwdXQgc3RhdGUgYW5kXG4gICAgICAgIC8vIHJldHVybiBlcnJvci5cbiAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gaXNvMjAyMmpwX2RlY29kZXJfb3V0cHV0X3N0YXRlO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBJU08yMDIySlBFbmNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8vIGlzby0yMDIyLWpwJ3MgZW5jb2RlciBoYXMgYW4gYXNzb2NpYXRlZCBpc28tMjAyMi1qcCBlbmNvZGVyXG4gICAgLy8gc3RhdGUgd2hpY2ggaXMgb25lIG9mIEFTQ0lJLCBSb21hbiwgYW5kIGppczAyMDggKGluaXRpYWxseVxuICAgIC8vIEFTQ0lJKS5cbiAgICAvKiogQGVudW0gKi9cbiAgICB2YXIgc3RhdGVzID0ge1xuICAgICAgQVNDSUk6IDAsXG4gICAgICBSb21hbjogMSxcbiAgICAgIGppczAyMDg6IDJcbiAgICB9O1xuICAgIHZhciAvKiogQHR5cGUge251bWJlcn0gKi8gaXNvMjAyMmpwX3N0YXRlID0gc3RhdGVzLkFTQ0lJO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gSW5wdXQgc3RyZWFtLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IE5leHQgY29kZSBwb2ludCByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IEJ5dGUocykgdG8gZW1pdC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGNvZGVfcG9pbnQpIHtcbiAgICAgIC8vIDEuIElmIGNvZGUgcG9pbnQgaXMgZW5kLW9mLXN0cmVhbSBhbmQgaXNvLTIwMjItanAgZW5jb2RlclxuICAgICAgLy8gc3RhdGUgaXMgbm90IEFTQ0lJLCBwcmVwZW5kIGNvZGUgcG9pbnQgdG8gc3RyZWFtLCBzZXRcbiAgICAgIC8vIGlzby0yMDIyLWpwIGVuY29kZXIgc3RhdGUgdG8gQVNDSUksIGFuZCByZXR1cm4gdGhyZWUgYnl0ZXNcbiAgICAgIC8vIDB4MUIgMHgyOCAweDQyLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IGVuZF9vZl9zdHJlYW0gJiZcbiAgICAgICAgICBpc28yMDIyanBfc3RhdGUgIT09IHN0YXRlcy5BU0NJSSkge1xuICAgICAgICBzdHJlYW0ucHJlcGVuZChjb2RlX3BvaW50KTtcbiAgICAgICAgcmV0dXJuIFsweDFCLCAweDI4LCAweDQyXTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgY29kZSBwb2ludCBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBpc28tMjAyMi1qcCBlbmNvZGVyXG4gICAgICAvLyBzdGF0ZSBpcyBBU0NJSSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IGVuZF9vZl9zdHJlYW0gJiYgaXNvMjAyMmpwX3N0YXRlID09PSBzdGF0ZXMuQVNDSUkpXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMy4gSWYgaXNvLTIwMjItanAgZW5jb2RlciBzdGF0ZSBpcyBBU0NJSSBhbmQgY29kZSBwb2ludCBpcyBpblxuICAgICAgLy8gdGhlIHJhbmdlIFUrMDAwMCB0byBVKzAwN0YsIHJldHVybiBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgY29kZVxuICAgICAgLy8gcG9pbnQuXG4gICAgICBpZiAoaXNvMjAyMmpwX3N0YXRlID09PSBzdGF0ZXMuQVNDSUkgJiZcbiAgICAgICAgICBpblJhbmdlKGNvZGVfcG9pbnQsIDB4MDAwMCwgMHgwMDdGKSlcbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG5cbiAgICAgIC8vIDQuIElmIGlzby0yMDIyLWpwIGVuY29kZXIgc3RhdGUgaXMgUm9tYW4gYW5kIGNvZGUgcG9pbnQgaXMgaW5cbiAgICAgIC8vIHRoZSByYW5nZSBVKzAwMDAgdG8gVSswMDdGLCBleGNsdWRpbmcgVSswMDVDIGFuZCBVKzAwN0UsIG9yXG4gICAgICAvLyBpcyBVKzAwQTUgb3IgVSsyMDNFLCBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICBpZiAoaXNvMjAyMmpwX3N0YXRlID09PSBzdGF0ZXMuUm9tYW4gJiZcbiAgICAgICAgICBpblJhbmdlKGNvZGVfcG9pbnQsIDB4MDAwMCwgMHgwMDdGKSAmJlxuICAgICAgICAgIGNvZGVfcG9pbnQgIT09IDB4MDA1QyAmJiBjb2RlX3BvaW50ICE9PSAweDAwN0UpIHtcblxuICAgICAgICAvLyAxLiBJZiBjb2RlIHBvaW50IGlzIGluIHRoZSByYW5nZSBVKzAwMDAgdG8gVSswMDdGLCByZXR1cm4gYVxuICAgICAgICAvLyBieXRlIHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICAgIGlmIChpblJhbmdlKGNvZGVfcG9pbnQsIDB4MDAwMCwgMHgwMDdGKSlcbiAgICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcblxuICAgICAgICAvLyAyLiBJZiBjb2RlIHBvaW50IGlzIFUrMDBBNSwgcmV0dXJuIGJ5dGUgMHg1Qy5cbiAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4MDBBNSlcbiAgICAgICAgICByZXR1cm4gMHg1QztcblxuICAgICAgICAvLyAzLiBJZiBjb2RlIHBvaW50IGlzIFUrMjAzRSwgcmV0dXJuIGJ5dGUgMHg3RS5cbiAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4MjAzRSlcbiAgICAgICAgICByZXR1cm4gMHg3RTtcbiAgICAgIH1cblxuICAgICAgLy8gNS4gSWYgY29kZSBwb2ludCBpcyBpbiB0aGUgcmFuZ2UgVSswMDAwIHRvIFUrMDA3RiwgYW5kXG4gICAgICAvLyBpc28tMjAyMi1qcCBlbmNvZGVyIHN0YXRlIGlzIG5vdCBBU0NJSSwgcHJlcGVuZCBjb2RlIHBvaW50IHRvXG4gICAgICAvLyBzdHJlYW0sIHNldCBpc28tMjAyMi1qcCBlbmNvZGVyIHN0YXRlIHRvIEFTQ0lJLCBhbmQgcmV0dXJuXG4gICAgICAvLyB0aHJlZSBieXRlcyAweDFCIDB4MjggMHg0Mi5cbiAgICAgIGlmIChpblJhbmdlKGNvZGVfcG9pbnQsIDB4MDAwMCwgMHgwMDdGKSAmJlxuICAgICAgICAgIGlzbzIwMjJqcF9zdGF0ZSAhPT0gc3RhdGVzLkFTQ0lJKSB7XG4gICAgICAgIHN0cmVhbS5wcmVwZW5kKGNvZGVfcG9pbnQpO1xuICAgICAgICBpc28yMDIyanBfc3RhdGUgPSBzdGF0ZXMuQVNDSUk7XG4gICAgICAgIHJldHVybiBbMHgxQiwgMHgyOCwgMHg0Ml07XG4gICAgICB9XG5cbiAgICAgIC8vIDYuIElmIGNvZGUgcG9pbnQgaXMgZWl0aGVyIFUrMDBBNSBvciBVKzIwM0UsIGFuZCBpc28tMjAyMi1qcFxuICAgICAgLy8gZW5jb2RlciBzdGF0ZSBpcyBub3QgUm9tYW4sIHByZXBlbmQgY29kZSBwb2ludCB0byBzdHJlYW0sIHNldFxuICAgICAgLy8gaXNvLTIwMjItanAgZW5jb2RlciBzdGF0ZSB0byBSb21hbiwgYW5kIHJldHVybiB0aHJlZSBieXRlc1xuICAgICAgLy8gMHgxQiAweDI4IDB4NEEuXG4gICAgICBpZiAoKGNvZGVfcG9pbnQgPT09IDB4MDBBNSB8fCBjb2RlX3BvaW50ID09PSAweDIwM0UpICYmXG4gICAgICAgICAgaXNvMjAyMmpwX3N0YXRlICE9PSBzdGF0ZXMuUm9tYW4pIHtcbiAgICAgICAgc3RyZWFtLnByZXBlbmQoY29kZV9wb2ludCk7XG4gICAgICAgIGlzbzIwMjJqcF9zdGF0ZSA9IHN0YXRlcy5Sb21hbjtcbiAgICAgICAgcmV0dXJuIFsweDFCLCAweDI4LCAweDRBXTtcbiAgICAgIH1cblxuICAgICAgLy8gNy4gSWYgY29kZSBwb2ludCBpcyBVKzIwMjIsIHNldCBpdCB0byBVK0ZGMEQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gMHgyMDIyKVxuICAgICAgICBjb2RlX3BvaW50ID0gMHhGRjBEO1xuXG4gICAgICAvLyA4LiBMZXQgcG9pbnRlciBiZSB0aGUgaW5kZXggcG9pbnRlciBmb3IgY29kZSBwb2ludCBpbiBpbmRleFxuICAgICAgLy8gamlzMDIwOC5cbiAgICAgIHZhciBwb2ludGVyID0gaW5kZXhQb2ludGVyRm9yKGNvZGVfcG9pbnQsIGluZGV4KCdqaXMwMjA4JykpO1xuXG4gICAgICAvLyA5LiBJZiBwb2ludGVyIGlzIG51bGwsIHJldHVybiBlcnJvciB3aXRoIGNvZGUgcG9pbnQuXG4gICAgICBpZiAocG9pbnRlciA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGVuY29kZXJFcnJvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gMTAuIElmIGlzby0yMDIyLWpwIGVuY29kZXIgc3RhdGUgaXMgbm90IGppczAyMDgsIHByZXBlbmQgY29kZVxuICAgICAgLy8gcG9pbnQgdG8gc3RyZWFtLCBzZXQgaXNvLTIwMjItanAgZW5jb2RlciBzdGF0ZSB0byBqaXMwMjA4LFxuICAgICAgLy8gYW5kIHJldHVybiB0aHJlZSBieXRlcyAweDFCIDB4MjQgMHg0Mi5cbiAgICAgIGlmIChpc28yMDIyanBfc3RhdGUgIT09IHN0YXRlcy5qaXMwMjA4KSB7XG4gICAgICAgIHN0cmVhbS5wcmVwZW5kKGNvZGVfcG9pbnQpO1xuICAgICAgICBpc28yMDIyanBfc3RhdGUgPSBzdGF0ZXMuamlzMDIwODtcbiAgICAgICAgcmV0dXJuIFsweDFCLCAweDI0LCAweDQyXTtcbiAgICAgIH1cblxuICAgICAgLy8gMTEuIExldCBsZWFkIGJlIHBvaW50ZXIgLyA5NCArIDB4MjEuXG4gICAgICB2YXIgbGVhZCA9IGRpdihwb2ludGVyLCA5NCkgKyAweDIxO1xuXG4gICAgICAvLyAxMi4gTGV0IHRyYWlsIGJlIHBvaW50ZXIgJSA5NCArIDB4MjEuXG4gICAgICB2YXIgdHJhaWwgPSBwb2ludGVyICUgOTQgKyAweDIxO1xuXG4gICAgICAvLyAxMy4gUmV0dXJuIHR3byBieXRlcyB3aG9zZSB2YWx1ZXMgYXJlIGxlYWQgYW5kIHRyYWlsLlxuICAgICAgcmV0dXJuIFtsZWFkLCB0cmFpbF07XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ2lzby0yMDIyLWpwJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBJU08yMDIySlBFbmNvZGVyKG9wdGlvbnMpO1xuICB9O1xuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWydpc28tMjAyMi1qcCddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgSVNPMjAyMkpQRGVjb2RlcihvcHRpb25zKTtcbiAgfTtcblxuICAvLyAxMi4zIHNoaWZ0X2ppc1xuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gU2hpZnRKSVNEZWNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8vIHNoaWZ0X2ppcydzIGRlY29kZXIgaGFzIGFuIGFzc29jaWF0ZWQgc2hpZnRfamlzIGxlYWQgKGluaXRpYWxseVxuICAgIC8vIDB4MDApLlxuICAgIHZhciAvKiogQHR5cGUge251bWJlcn0gKi8gc2hpZnRqaXNfbGVhZCA9IDB4MDA7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBUaGUgc3RyZWFtIG9mIGJ5dGVzIGJlaW5nIGRlY29kZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdGUgVGhlIG5leHQgYnl0ZSByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBUaGUgbmV4dCBjb2RlIHBvaW50KHMpXG4gICAgICogICAgIGRlY29kZWQsIG9yIG51bGwgaWYgbm90IGVub3VnaCBkYXRhIGV4aXN0cyBpbiB0aGUgaW5wdXRcbiAgICAgKiAgICAgc3RyZWFtIHRvIGRlY29kZSBhIGNvbXBsZXRlIGNvZGUgcG9pbnQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBiaXRlKSB7XG4gICAgICAvLyAxLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIHNoaWZ0X2ppcyBsZWFkIGlzIG5vdCAweDAwLFxuICAgICAgLy8gc2V0IHNoaWZ0X2ppcyBsZWFkIHRvIDB4MDAgYW5kIHJldHVybiBlcnJvci5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmIHNoaWZ0amlzX2xlYWQgIT09IDB4MDApIHtcbiAgICAgICAgc2hpZnRqaXNfbGVhZCA9IDB4MDA7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIHNoaWZ0X2ppcyBsZWFkIGlzIDB4MDAsXG4gICAgICAvLyByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiBzaGlmdGppc19sZWFkID09PSAweDAwKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDMuIElmIHNoaWZ0X2ppcyBsZWFkIGlzIG5vdCAweDAwLCBsZXQgbGVhZCBiZSBzaGlmdF9qaXMgbGVhZCxcbiAgICAgIC8vIGxldCBwb2ludGVyIGJlIG51bGwsIHNldCBzaGlmdF9qaXMgbGVhZCB0byAweDAwLCBhbmQgdGhlbiBydW5cbiAgICAgIC8vIHRoZXNlIHN1YnN0ZXBzOlxuICAgICAgaWYgKHNoaWZ0amlzX2xlYWQgIT09IDB4MDApIHtcbiAgICAgICAgdmFyIGxlYWQgPSBzaGlmdGppc19sZWFkO1xuICAgICAgICB2YXIgcG9pbnRlciA9IG51bGw7XG4gICAgICAgIHNoaWZ0amlzX2xlYWQgPSAweDAwO1xuXG4gICAgICAgIC8vIDEuIExldCBvZmZzZXQgYmUgMHg0MCwgaWYgYnl0ZSBpcyBsZXNzIHRoYW4gMHg3RiwgYW5kIDB4NDFcbiAgICAgICAgLy8gb3RoZXJ3aXNlLlxuICAgICAgICB2YXIgb2Zmc2V0ID0gKGJpdGUgPCAweDdGKSA/IDB4NDAgOiAweDQxO1xuXG4gICAgICAgIC8vIDIuIExldCBsZWFkIG9mZnNldCBiZSAweDgxLCBpZiBsZWFkIGlzIGxlc3MgdGhhbiAweEEwLCBhbmRcbiAgICAgICAgLy8gMHhDMSBvdGhlcndpc2UuXG4gICAgICAgIHZhciBsZWFkX29mZnNldCA9IChsZWFkIDwgMHhBMCkgPyAweDgxIDogMHhDMTtcblxuICAgICAgICAvLyAzLiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDQwIHRvIDB4N0Ugb3IgMHg4MCB0byAweEZDLFxuICAgICAgICAvLyBzZXQgcG9pbnRlciB0byAobGVhZCDiiJIgbGVhZCBvZmZzZXQpIMOXIDE4OCArIGJ5dGUg4oiSIG9mZnNldC5cbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHg0MCwgMHg3RSkgfHwgaW5SYW5nZShiaXRlLCAweDgwLCAweEZDKSlcbiAgICAgICAgICBwb2ludGVyID0gKGxlYWQgLSBsZWFkX29mZnNldCkgKiAxODggKyBiaXRlIC0gb2Zmc2V0O1xuXG4gICAgICAgIC8vIDQuIExldCBjb2RlIHBvaW50IGJlIG51bGwsIGlmIHBvaW50ZXIgaXMgbnVsbCwgYW5kIHRoZVxuICAgICAgICAvLyBpbmRleCBjb2RlIHBvaW50IGZvciBwb2ludGVyIGluIGluZGV4IGppczAyMDggb3RoZXJ3aXNlLlxuICAgICAgICB2YXIgY29kZV9wb2ludCA9IChwb2ludGVyID09PSBudWxsKSA/IG51bGwgOlxuICAgICAgICAgICAgICBpbmRleENvZGVQb2ludEZvcihwb2ludGVyLCBpbmRleCgnamlzMDIwOCcpKTtcblxuICAgICAgICAvLyA1LiBJZiBjb2RlIHBvaW50IGlzIG51bGwgYW5kIHBvaW50ZXIgaXMgaW4gdGhlIHJhbmdlIDg4MzZcbiAgICAgICAgLy8gdG8gMTA1MjgsIHJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgMHhFMDAwICtcbiAgICAgICAgLy8gcG9pbnRlciDiiJIgODgzNi5cbiAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IG51bGwgJiYgcG9pbnRlciAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgaW5SYW5nZShwb2ludGVyLCA4ODM2LCAxMDUyOCkpXG4gICAgICAgICAgcmV0dXJuIDB4RTAwMCArIHBvaW50ZXIgLSA4ODM2O1xuXG4gICAgICAgIC8vIDYuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCBhbmQgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHgwMCB0b1xuICAgICAgICAvLyAweDdGLCBwcmVwZW5kIGJ5dGUgdG8gc3RyZWFtLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gbnVsbCAmJiBpblJhbmdlKGJpdGUsIDB4MDAsIDB4N0YpKVxuICAgICAgICAgIHN0cmVhbS5wcmVwZW5kKGJpdGUpO1xuXG4gICAgICAgIC8vIDcuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcmV0dXJuIGVycm9yLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgICAvLyA4LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDAwIHRvIDB4ODAsIHJldHVybiBhIGNvZGUgcG9pbnRcbiAgICAgIC8vIHdob3NlIHZhbHVlIGlzIGJ5dGUuXG4gICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDAwLCAweDgwKSlcbiAgICAgICAgcmV0dXJuIGJpdGU7XG5cbiAgICAgIC8vIDUuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4QTEgdG8gMHhERiwgcmV0dXJuIGEgY29kZSBwb2ludFxuICAgICAgLy8gd2hvc2UgdmFsdWUgaXMgMHhGRjYxICsgYnl0ZSDiiJIgMHhBMS5cbiAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4QTEsIDB4REYpKVxuICAgICAgICByZXR1cm4gMHhGRjYxICsgYml0ZSAtIDB4QTE7XG5cbiAgICAgIC8vIDYuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4ODEgdG8gMHg5RiBvciAweEUwIHRvIDB4RkMsIHNldFxuICAgICAgLy8gc2hpZnRfamlzIGxlYWQgdG8gYnl0ZSBhbmQgcmV0dXJuIGNvbnRpbnVlLlxuICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHg4MSwgMHg5RikgfHwgaW5SYW5nZShiaXRlLCAweEUwLCAweEZDKSkge1xuICAgICAgICBzaGlmdGppc19sZWFkID0gYml0ZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIDcuIFJldHVybiBlcnJvci5cbiAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtFbmNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFNoaWZ0SklTRW5jb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIElucHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7XG4gICAgICAvLyAxLiBJZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgaW4gdGhlIHJhbmdlIFUrMDAwMCB0byBVKzAwODAsIHJldHVybiBhXG4gICAgICAvLyBieXRlIHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICBpZiAoaW5SYW5nZShjb2RlX3BvaW50LCAweDAwMDAsIDB4MDA4MCkpXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuXG4gICAgICAvLyAzLiBJZiBjb2RlIHBvaW50IGlzIFUrMDBBNSwgcmV0dXJuIGJ5dGUgMHg1Qy5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSAweDAwQTUpXG4gICAgICAgIHJldHVybiAweDVDO1xuXG4gICAgICAvLyA0LiBJZiBjb2RlIHBvaW50IGlzIFUrMjAzRSwgcmV0dXJuIGJ5dGUgMHg3RS5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSAweDIwM0UpXG4gICAgICAgIHJldHVybiAweDdFO1xuXG4gICAgICAvLyA1LiBJZiBjb2RlIHBvaW50IGlzIGluIHRoZSByYW5nZSBVK0ZGNjEgdG8gVStGRjlGLCByZXR1cm4gYVxuICAgICAgLy8gYnl0ZSB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50IOKIkiAweEZGNjEgKyAweEExLlxuICAgICAgaWYgKGluUmFuZ2UoY29kZV9wb2ludCwgMHhGRjYxLCAweEZGOUYpKVxuICAgICAgICByZXR1cm4gY29kZV9wb2ludCAtIDB4RkY2MSArIDB4QTE7XG5cbiAgICAgIC8vIDYuIElmIGNvZGUgcG9pbnQgaXMgVSsyMDIyLCBzZXQgaXQgdG8gVStGRjBELlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4MjAyMilcbiAgICAgICAgY29kZV9wb2ludCA9IDB4RkYwRDtcblxuICAgICAgLy8gNy4gTGV0IHBvaW50ZXIgYmUgdGhlIGluZGV4IHNoaWZ0X2ppcyBwb2ludGVyIGZvciBjb2RlIHBvaW50LlxuICAgICAgdmFyIHBvaW50ZXIgPSBpbmRleFNoaWZ0SklTUG9pbnRlckZvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gOC4gSWYgcG9pbnRlciBpcyBudWxsLCByZXR1cm4gZXJyb3Igd2l0aCBjb2RlIHBvaW50LlxuICAgICAgaWYgKHBvaW50ZXIgPT09IG51bGwpXG4gICAgICAgIHJldHVybiBlbmNvZGVyRXJyb3IoY29kZV9wb2ludCk7XG5cbiAgICAgIC8vIDkuIExldCBsZWFkIGJlIHBvaW50ZXIgLyAxODguXG4gICAgICB2YXIgbGVhZCA9IGRpdihwb2ludGVyLCAxODgpO1xuXG4gICAgICAvLyAxMC4gTGV0IGxlYWQgb2Zmc2V0IGJlIDB4ODEsIGlmIGxlYWQgaXMgbGVzcyB0aGFuIDB4MUYsIGFuZFxuICAgICAgLy8gMHhDMSBvdGhlcndpc2UuXG4gICAgICB2YXIgbGVhZF9vZmZzZXQgPSAobGVhZCA8IDB4MUYpID8gMHg4MSA6IDB4QzE7XG5cbiAgICAgIC8vIDExLiBMZXQgdHJhaWwgYmUgcG9pbnRlciAlIDE4OC5cbiAgICAgIHZhciB0cmFpbCA9IHBvaW50ZXIgJSAxODg7XG5cbiAgICAgIC8vIDEyLiBMZXQgb2Zmc2V0IGJlIDB4NDAsIGlmIHRyYWlsIGlzIGxlc3MgdGhhbiAweDNGLCBhbmQgMHg0MVxuICAgICAgLy8gb3RoZXJ3aXNlLlxuICAgICAgdmFyIG9mZnNldCA9ICh0cmFpbCA8IDB4M0YpID8gMHg0MCA6IDB4NDE7XG5cbiAgICAgIC8vIDEzLiBSZXR1cm4gdHdvIGJ5dGVzIHdob3NlIHZhbHVlcyBhcmUgbGVhZCArIGxlYWQgb2Zmc2V0IGFuZFxuICAgICAgLy8gdHJhaWwgKyBvZmZzZXQuXG4gICAgICByZXR1cm4gW2xlYWQgKyBsZWFkX29mZnNldCwgdHJhaWwgKyBvZmZzZXRdO1xuICAgIH07XG4gIH1cblxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGVuY29kZXJzWydzaGlmdF9qaXMnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFNoaWZ0SklTRW5jb2RlcihvcHRpb25zKTtcbiAgfTtcbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBkZWNvZGVyc1snc2hpZnRfamlzJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBTaGlmdEpJU0RlY29kZXIob3B0aW9ucyk7XG4gIH07XG5cbiAgLy9cbiAgLy8gMTMuIExlZ2FjeSBtdWx0aS1ieXRlIEtvcmVhbiBlbmNvZGluZ3NcbiAgLy9cblxuICAvLyAxMy4xIGV1Yy1rclxuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gRVVDS1JEZWNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuXG4gICAgLy8gZXVjLWtyJ3MgZGVjb2RlciBoYXMgYW4gYXNzb2NpYXRlZCBldWMta3IgbGVhZCAoaW5pdGlhbGx5IDB4MDApLlxuICAgIHZhciAvKiogQHR5cGUge251bWJlcn0gKi8gZXVja3JfbGVhZCA9IDB4MDA7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBUaGUgc3RyZWFtIG9mIGJ5dGVzIGJlaW5nIGRlY29kZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdGUgVGhlIG5leHQgYnl0ZSByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBUaGUgbmV4dCBjb2RlIHBvaW50KHMpXG4gICAgICogICAgIGRlY29kZWQsIG9yIG51bGwgaWYgbm90IGVub3VnaCBkYXRhIGV4aXN0cyBpbiB0aGUgaW5wdXRcbiAgICAgKiAgICAgc3RyZWFtIHRvIGRlY29kZSBhIGNvbXBsZXRlIGNvZGUgcG9pbnQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBiaXRlKSB7XG4gICAgICAvLyAxLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIGV1Yy1rciBsZWFkIGlzIG5vdCAweDAwLCBzZXRcbiAgICAgIC8vIGV1Yy1rciBsZWFkIHRvIDB4MDAgYW5kIHJldHVybiBlcnJvci5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmIGV1Y2tyX2xlYWQgIT09IDApIHtcbiAgICAgICAgZXVja3JfbGVhZCA9IDB4MDA7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIGV1Yy1rciBsZWFkIGlzIDB4MDAsIHJldHVyblxuICAgICAgLy8gZmluaXNoZWQuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiBldWNrcl9sZWFkID09PSAwKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDMuIElmIGV1Yy1rciBsZWFkIGlzIG5vdCAweDAwLCBsZXQgbGVhZCBiZSBldWMta3IgbGVhZCwgbGV0XG4gICAgICAvLyBwb2ludGVyIGJlIG51bGwsIHNldCBldWMta3IgbGVhZCB0byAweDAwLCBhbmQgdGhlbiBydW4gdGhlc2VcbiAgICAgIC8vIHN1YnN0ZXBzOlxuICAgICAgaWYgKGV1Y2tyX2xlYWQgIT09IDB4MDApIHtcbiAgICAgICAgdmFyIGxlYWQgPSBldWNrcl9sZWFkO1xuICAgICAgICB2YXIgcG9pbnRlciA9IG51bGw7XG4gICAgICAgIGV1Y2tyX2xlYWQgPSAweDAwO1xuXG4gICAgICAgIC8vIDEuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4NDEgdG8gMHhGRSwgc2V0IHBvaW50ZXIgdG9cbiAgICAgICAgLy8gKGxlYWQg4oiSIDB4ODEpIMOXIDE5MCArIChieXRlIOKIkiAweDQxKS5cbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHg0MSwgMHhGRSkpXG4gICAgICAgICAgcG9pbnRlciA9IChsZWFkIC0gMHg4MSkgKiAxOTAgKyAoYml0ZSAtIDB4NDEpO1xuXG4gICAgICAgIC8vIDIuIExldCBjb2RlIHBvaW50IGJlIG51bGwsIGlmIHBvaW50ZXIgaXMgbnVsbCwgYW5kIHRoZVxuICAgICAgICAvLyBpbmRleCBjb2RlIHBvaW50IGZvciBwb2ludGVyIGluIGluZGV4IGV1Yy1rciBvdGhlcndpc2UuXG4gICAgICAgIHZhciBjb2RlX3BvaW50ID0gKHBvaW50ZXIgPT09IG51bGwpID8gbnVsbCA6IGluZGV4Q29kZVBvaW50Rm9yKHBvaW50ZXIsIGluZGV4KCdldWMta3InKSk7XG5cbiAgICAgICAgLy8gMy4gSWYgY29kZSBwb2ludCBpcyBudWxsIGFuZCBieXRlIGlzIGluIHRoZSByYW5nZSAweDAwIHRvXG4gICAgICAgIC8vIDB4N0YsIHByZXBlbmQgYnl0ZSB0byBzdHJlYW0uXG4gICAgICAgIGlmIChwb2ludGVyID09PSBudWxsICYmIGluUmFuZ2UoYml0ZSwgMHgwMCwgMHg3RikpXG4gICAgICAgICAgc3RyZWFtLnByZXBlbmQoYml0ZSk7XG5cbiAgICAgICAgLy8gNC4gSWYgY29kZSBwb2ludCBpcyBudWxsLCByZXR1cm4gZXJyb3IuXG4gICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsKVxuICAgICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICAgIC8vIDUuIFJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4MDAgdG8gMHg3RiwgcmV0dXJuIGEgY29kZSBwb2ludFxuICAgICAgLy8gd2hvc2UgdmFsdWUgaXMgYnl0ZS5cbiAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4MDAsIDB4N0YpKVxuICAgICAgICByZXR1cm4gYml0ZTtcblxuICAgICAgLy8gNS4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHg4MSB0byAweEZFLCBzZXQgZXVjLWtyIGxlYWQgdG9cbiAgICAgIC8vIGJ5dGUgYW5kIHJldHVybiBjb250aW51ZS5cbiAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4ODEsIDB4RkUpKSB7XG4gICAgICAgIGV1Y2tyX2xlYWQgPSBiaXRlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gNi4gUmV0dXJuIGVycm9yLlxuICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0VuY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gRVVDS1JFbmNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gSW5wdXQgc3RyZWFtLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IE5leHQgY29kZSBwb2ludCByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IEJ5dGUocykgdG8gZW1pdC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGNvZGVfcG9pbnQpIHtcbiAgICAgIC8vIDEuIElmIGNvZGUgcG9pbnQgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMi4gSWYgY29kZSBwb2ludCBpcyBpbiB0aGUgcmFuZ2UgVSswMDAwIHRvIFUrMDA3RiwgcmV0dXJuIGFcbiAgICAgIC8vIGJ5dGUgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIGlmIChpblJhbmdlKGNvZGVfcG9pbnQsIDB4MDAwMCwgMHgwMDdGKSlcbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG5cbiAgICAgIC8vIDMuIExldCBwb2ludGVyIGJlIHRoZSBpbmRleCBwb2ludGVyIGZvciBjb2RlIHBvaW50IGluIGluZGV4XG4gICAgICAvLyBldWMta3IuXG4gICAgICB2YXIgcG9pbnRlciA9IGluZGV4UG9pbnRlckZvcihjb2RlX3BvaW50LCBpbmRleCgnZXVjLWtyJykpO1xuXG4gICAgICAvLyA0LiBJZiBwb2ludGVyIGlzIG51bGwsIHJldHVybiBlcnJvciB3aXRoIGNvZGUgcG9pbnQuXG4gICAgICBpZiAocG9pbnRlciA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGVuY29kZXJFcnJvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gNS4gTGV0IGxlYWQgYmUgcG9pbnRlciAvIDE5MCArIDB4ODEuXG4gICAgICB2YXIgbGVhZCA9IGRpdihwb2ludGVyLCAxOTApICsgMHg4MTtcblxuICAgICAgLy8gNi4gTGV0IHRyYWlsIGJlIHBvaW50ZXIgJSAxOTAgKyAweDQxLlxuICAgICAgdmFyIHRyYWlsID0gKHBvaW50ZXIgJSAxOTApICsgMHg0MTtcblxuICAgICAgLy8gNy4gUmV0dXJuIHR3byBieXRlcyB3aG9zZSB2YWx1ZXMgYXJlIGxlYWQgYW5kIHRyYWlsLlxuICAgICAgcmV0dXJuIFtsZWFkLCB0cmFpbF07XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ2V1Yy1rciddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgRVVDS1JFbmNvZGVyKG9wdGlvbnMpO1xuICB9O1xuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWydldWMta3InXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEVVQ0tSRGVjb2RlcihvcHRpb25zKTtcbiAgfTtcblxuXG4gIC8vXG4gIC8vIDE0LiBMZWdhY3kgbWlzY2VsbGFuZW91cyBlbmNvZGluZ3NcbiAgLy9cblxuICAvLyAxNC4xIHJlcGxhY2VtZW50XG5cbiAgLy8gTm90IG5lZWRlZCAtIEFQSSB0aHJvd3MgUmFuZ2VFcnJvclxuXG4gIC8vIDE0LjIgdXRmLTE2XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3VuaXRcbiAgICogQHBhcmFtIHtib29sZWFufSB1dGYxNmJlXG4gICAqIEByZXR1cm4geyFBcnJheS48bnVtYmVyPn0gYnl0ZXNcbiAgICovXG4gIGZ1bmN0aW9uIGNvbnZlcnRDb2RlVW5pdFRvQnl0ZXMoY29kZV91bml0LCB1dGYxNmJlKSB7XG4gICAgLy8gMS4gTGV0IGJ5dGUxIGJlIGNvZGUgdW5pdCA+PiA4LlxuICAgIHZhciBieXRlMSA9IGNvZGVfdW5pdCA+PiA4O1xuXG4gICAgLy8gMi4gTGV0IGJ5dGUyIGJlIGNvZGUgdW5pdCAmIDB4MDBGRi5cbiAgICB2YXIgYnl0ZTIgPSBjb2RlX3VuaXQgJiAweDAwRkY7XG5cbiAgICAvLyAzLiBUaGVuIHJldHVybiB0aGUgYnl0ZXMgaW4gb3JkZXI6XG4gICAgICAgIC8vIHV0Zi0xNmJlIGZsYWcgaXMgc2V0OiBieXRlMSwgdGhlbiBieXRlMi5cbiAgICBpZiAodXRmMTZiZSlcbiAgICAgIHJldHVybiBbYnl0ZTEsIGJ5dGUyXTtcbiAgICAvLyB1dGYtMTZiZSBmbGFnIGlzIHVuc2V0OiBieXRlMiwgdGhlbiBieXRlMS5cbiAgICByZXR1cm4gW2J5dGUyLCBieXRlMV07XG4gIH1cblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtEZWNvZGVyfVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHV0ZjE2X2JlIFRydWUgaWYgYmlnLWVuZGlhbiwgZmFsc2UgaWYgbGl0dGxlLWVuZGlhbi5cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBVVEYxNkRlY29kZXIodXRmMTZfYmUsIG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIHZhciAvKiogQHR5cGUgez9udW1iZXJ9ICovIHV0ZjE2X2xlYWRfYnl0ZSA9IG51bGwsXG4gICAgICAgIC8qKiBAdHlwZSB7P251bWJlcn0gKi8gdXRmMTZfbGVhZF9zdXJyb2dhdGUgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBieXRlcyBiZWluZyBkZWNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRlIFRoZSBuZXh0IGJ5dGUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gVGhlIG5leHQgY29kZSBwb2ludChzKVxuICAgICAqICAgICBkZWNvZGVkLCBvciBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YSBleGlzdHMgaW4gdGhlIGlucHV0XG4gICAgICogICAgIHN0cmVhbSB0byBkZWNvZGUgYSBjb21wbGV0ZSBjb2RlIHBvaW50LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgYml0ZSkge1xuICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBlaXRoZXIgdXRmLTE2IGxlYWQgYnl0ZSBvclxuICAgICAgLy8gdXRmLTE2IGxlYWQgc3Vycm9nYXRlIGlzIG5vdCBudWxsLCBzZXQgdXRmLTE2IGxlYWQgYnl0ZSBhbmRcbiAgICAgIC8vIHV0Zi0xNiBsZWFkIHN1cnJvZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0gJiYgKHV0ZjE2X2xlYWRfYnl0ZSAhPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGYxNl9sZWFkX3N1cnJvZ2F0ZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSBhbmQgdXRmLTE2IGxlYWQgYnl0ZSBhbmQgdXRmLTE2XG4gICAgICAvLyBsZWFkIHN1cnJvZ2F0ZSBhcmUgbnVsbCwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0gJiYgdXRmMTZfbGVhZF9ieXRlID09PSBudWxsICYmXG4gICAgICAgICAgdXRmMTZfbGVhZF9zdXJyb2dhdGUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiB1dGYtMTYgbGVhZCBieXRlIGlzIG51bGwsIHNldCB1dGYtMTYgbGVhZCBieXRlIHRvIGJ5dGVcbiAgICAgIC8vIGFuZCByZXR1cm4gY29udGludWUuXG4gICAgICBpZiAodXRmMTZfbGVhZF9ieXRlID09PSBudWxsKSB7XG4gICAgICAgIHV0ZjE2X2xlYWRfYnl0ZSA9IGJpdGU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyA0LiBMZXQgY29kZSB1bml0IGJlIHRoZSByZXN1bHQgb2Y6XG4gICAgICB2YXIgY29kZV91bml0O1xuICAgICAgaWYgKHV0ZjE2X2JlKSB7XG4gICAgICAgIC8vIHV0Zi0xNmJlIGRlY29kZXIgZmxhZyBpcyBzZXRcbiAgICAgICAgLy8gICAodXRmLTE2IGxlYWQgYnl0ZSA8PCA4KSArIGJ5dGUuXG4gICAgICAgIGNvZGVfdW5pdCA9ICh1dGYxNl9sZWFkX2J5dGUgPDwgOCkgKyBiaXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXRmLTE2YmUgZGVjb2RlciBmbGFnIGlzIHVuc2V0XG4gICAgICAgIC8vICAgKGJ5dGUgPDwgOCkgKyB1dGYtMTYgbGVhZCBieXRlLlxuICAgICAgICBjb2RlX3VuaXQgPSAoYml0ZSA8PCA4KSArIHV0ZjE2X2xlYWRfYnl0ZTtcbiAgICAgIH1cbiAgICAgIC8vIFRoZW4gc2V0IHV0Zi0xNiBsZWFkIGJ5dGUgdG8gbnVsbC5cbiAgICAgIHV0ZjE2X2xlYWRfYnl0ZSA9IG51bGw7XG5cbiAgICAgIC8vIDUuIElmIHV0Zi0xNiBsZWFkIHN1cnJvZ2F0ZSBpcyBub3QgbnVsbCwgbGV0IGxlYWQgc3Vycm9nYXRlXG4gICAgICAvLyBiZSB1dGYtMTYgbGVhZCBzdXJyb2dhdGUsIHNldCB1dGYtMTYgbGVhZCBzdXJyb2dhdGUgdG8gbnVsbCxcbiAgICAgIC8vIGFuZCB0aGVuIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICAgIGlmICh1dGYxNl9sZWFkX3N1cnJvZ2F0ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbGVhZF9zdXJyb2dhdGUgPSB1dGYxNl9sZWFkX3N1cnJvZ2F0ZTtcbiAgICAgICAgdXRmMTZfbGVhZF9zdXJyb2dhdGUgPSBudWxsO1xuXG4gICAgICAgIC8vIDEuIElmIGNvZGUgdW5pdCBpcyBpbiB0aGUgcmFuZ2UgVStEQzAwIHRvIFUrREZGRiwgcmV0dXJuIGFcbiAgICAgICAgLy8gY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyAweDEwMDAwICsgKChsZWFkIHN1cnJvZ2F0ZSDiiJJcbiAgICAgICAgLy8gMHhEODAwKSA8PCAxMCkgKyAoY29kZSB1bml0IOKIkiAweERDMDApLlxuICAgICAgICBpZiAoaW5SYW5nZShjb2RlX3VuaXQsIDB4REMwMCwgMHhERkZGKSkge1xuICAgICAgICAgIHJldHVybiAweDEwMDAwICsgKGxlYWRfc3Vycm9nYXRlIC0gMHhEODAwKSAqIDB4NDAwICtcbiAgICAgICAgICAgICAgKGNvZGVfdW5pdCAtIDB4REMwMCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBQcmVwZW5kIHRoZSBzZXF1ZW5jZSByZXN1bHRpbmcgb2YgY29udmVydGluZyBjb2RlIHVuaXRcbiAgICAgICAgLy8gdG8gYnl0ZXMgdXNpbmcgdXRmLTE2YmUgZGVjb2RlciBmbGFnIHRvIHN0cmVhbSBhbmQgcmV0dXJuXG4gICAgICAgIC8vIGVycm9yLlxuICAgICAgICBzdHJlYW0ucHJlcGVuZChjb252ZXJ0Q29kZVVuaXRUb0J5dGVzKGNvZGVfdW5pdCwgdXRmMTZfYmUpKTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICB9XG5cbiAgICAgIC8vIDYuIElmIGNvZGUgdW5pdCBpcyBpbiB0aGUgcmFuZ2UgVStEODAwIHRvIFUrREJGRiwgc2V0IHV0Zi0xNlxuICAgICAgLy8gbGVhZCBzdXJyb2dhdGUgdG8gY29kZSB1bml0IGFuZCByZXR1cm4gY29udGludWUuXG4gICAgICBpZiAoaW5SYW5nZShjb2RlX3VuaXQsIDB4RDgwMCwgMHhEQkZGKSkge1xuICAgICAgICB1dGYxNl9sZWFkX3N1cnJvZ2F0ZSA9IGNvZGVfdW5pdDtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIDcuIElmIGNvZGUgdW5pdCBpcyBpbiB0aGUgcmFuZ2UgVStEQzAwIHRvIFUrREZGRiwgcmV0dXJuXG4gICAgICAvLyBlcnJvci5cbiAgICAgIGlmIChpblJhbmdlKGNvZGVfdW5pdCwgMHhEQzAwLCAweERGRkYpKVxuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgLy8gOC4gUmV0dXJuIGNvZGUgcG9pbnQgY29kZSB1bml0LlxuICAgICAgcmV0dXJuIGNvZGVfdW5pdDtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHtib29sZWFufSB1dGYxNl9iZSBUcnVlIGlmIGJpZy1lbmRpYW4sIGZhbHNlIGlmIGxpdHRsZS1lbmRpYW4uXG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gVVRGMTZFbmNvZGVyKHV0ZjE2X2JlLCBvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIElucHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7XG4gICAgICAvLyAxLiBJZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgaW4gdGhlIHJhbmdlIFUrMDAwMCB0byBVK0ZGRkYsIHJldHVybiB0aGVcbiAgICAgIC8vIHNlcXVlbmNlIHJlc3VsdGluZyBvZiBjb252ZXJ0aW5nIGNvZGUgcG9pbnQgdG8gYnl0ZXMgdXNpbmdcbiAgICAgIC8vIHV0Zi0xNmJlIGVuY29kZXIgZmxhZy5cbiAgICAgIGlmIChpblJhbmdlKGNvZGVfcG9pbnQsIDB4MDAwMCwgMHhGRkZGKSlcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRDb2RlVW5pdFRvQnl0ZXMoY29kZV9wb2ludCwgdXRmMTZfYmUpO1xuXG4gICAgICAvLyAzLiBMZXQgbGVhZCBiZSAoKGNvZGUgcG9pbnQg4oiSIDB4MTAwMDApID4+IDEwKSArIDB4RDgwMCxcbiAgICAgIC8vIGNvbnZlcnRlZCB0byBieXRlcyB1c2luZyB1dGYtMTZiZSBlbmNvZGVyIGZsYWcuXG4gICAgICB2YXIgbGVhZCA9IGNvbnZlcnRDb2RlVW5pdFRvQnl0ZXMoXG4gICAgICAgICgoY29kZV9wb2ludCAtIDB4MTAwMDApID4+IDEwKSArIDB4RDgwMCwgdXRmMTZfYmUpO1xuXG4gICAgICAvLyA0LiBMZXQgdHJhaWwgYmUgKChjb2RlIHBvaW50IOKIkiAweDEwMDAwKSAmIDB4M0ZGKSArIDB4REMwMCxcbiAgICAgIC8vIGNvbnZlcnRlZCB0byBieXRlcyB1c2luZyB1dGYtMTZiZSBlbmNvZGVyIGZsYWcuXG4gICAgICB2YXIgdHJhaWwgPSBjb252ZXJ0Q29kZVVuaXRUb0J5dGVzKFxuICAgICAgICAoKGNvZGVfcG9pbnQgLSAweDEwMDAwKSAmIDB4M0ZGKSArIDB4REMwMCwgdXRmMTZfYmUpO1xuXG4gICAgICAvLyA1LiBSZXR1cm4gYSBieXRlIHNlcXVlbmNlIG9mIGxlYWQgZm9sbG93ZWQgYnkgdHJhaWwuXG4gICAgICByZXR1cm4gbGVhZC5jb25jYXQodHJhaWwpO1xuICAgIH07XG4gIH1cblxuICAvLyAxNC4zIHV0Zi0xNmJlXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ3V0Zi0xNmJlJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBVVEYxNkVuY29kZXIodHJ1ZSwgb3B0aW9ucyk7XG4gIH07XG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZGVjb2RlcnNbJ3V0Zi0xNmJlJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBVVEYxNkRlY29kZXIodHJ1ZSwgb3B0aW9ucyk7XG4gIH07XG5cbiAgLy8gMTQuNCB1dGYtMTZsZVxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGVuY29kZXJzWyd1dGYtMTZsZSddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgVVRGMTZFbmNvZGVyKGZhbHNlLCBvcHRpb25zKTtcbiAgfTtcbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBkZWNvZGVyc1sndXRmLTE2bGUnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFVURjE2RGVjb2RlcihmYWxzZSwgb3B0aW9ucyk7XG4gIH07XG5cbiAgLy8gMTQuNSB4LXVzZXItZGVmaW5lZFxuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gWFVzZXJEZWZpbmVkRGVjb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHtcbiAgICAgIC8vIDEuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHgwMCB0byAweDdGLCByZXR1cm4gYSBjb2RlIHBvaW50XG4gICAgICAvLyB3aG9zZSB2YWx1ZSBpcyBieXRlLlxuICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgwMCwgMHg3RikpXG4gICAgICAgIHJldHVybiBiaXRlO1xuXG4gICAgICAvLyAzLiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIDB4Rjc4MCArIGJ5dGUg4oiSIDB4ODAuXG4gICAgICByZXR1cm4gMHhGNzgwICsgYml0ZSAtIDB4ODA7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0VuY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gWFVzZXJEZWZpbmVkRW5jb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIElucHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7XG4gICAgICAvLyAxLklmIGNvZGUgcG9pbnQgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMi4gSWYgY29kZSBwb2ludCBpcyBpbiB0aGUgcmFuZ2UgVSswMDAwIHRvIFUrMDA3RiwgcmV0dXJuIGFcbiAgICAgIC8vIGJ5dGUgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIGlmIChpblJhbmdlKGNvZGVfcG9pbnQsIDB4MDAwMCwgMHgwMDdGKSlcbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG5cbiAgICAgIC8vIDMuIElmIGNvZGUgcG9pbnQgaXMgaW4gdGhlIHJhbmdlIFUrRjc4MCB0byBVK0Y3RkYsIHJldHVybiBhXG4gICAgICAvLyBieXRlIHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQg4oiSIDB4Rjc4MCArIDB4ODAuXG4gICAgICBpZiAoaW5SYW5nZShjb2RlX3BvaW50LCAweEY3ODAsIDB4RjdGRikpXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50IC0gMHhGNzgwICsgMHg4MDtcblxuICAgICAgLy8gNC4gUmV0dXJuIGVycm9yIHdpdGggY29kZSBwb2ludC5cbiAgICAgIHJldHVybiBlbmNvZGVyRXJyb3IoY29kZV9wb2ludCk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ3gtdXNlci1kZWZpbmVkJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBYVXNlckRlZmluZWRFbmNvZGVyKG9wdGlvbnMpO1xuICB9O1xuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWyd4LXVzZXItZGVmaW5lZCddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgWFVzZXJEZWZpbmVkRGVjb2RlcihvcHRpb25zKTtcbiAgfTtcblxuICBpZiAoIWdsb2JhbFsnVGV4dEVuY29kZXInXSlcbiAgICBnbG9iYWxbJ1RleHRFbmNvZGVyJ10gPSBUZXh0RW5jb2RlcjtcbiAgaWYgKCFnbG9iYWxbJ1RleHREZWNvZGVyJ10pXG4gICAgZ2xvYmFsWydUZXh0RGVjb2RlciddID0gVGV4dERlY29kZXI7XG59KHRoaXMpKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuV1JJVEUgPSBleHBvcnRzLlJFQUQgPSBleHBvcnRzLkRyaXZlciA9IHVuZGVmaW5lZDtcblxudmFyIF9nZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG52YXIgX2dldFByb3RvdHlwZU9mMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dldFByb3RvdHlwZU9mKTtcblxudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuJyk7XG5cbnZhciBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMik7XG5cbnZhciBfZ2V0MiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9nZXQnKTtcblxudmFyIF9nZXQzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0Mik7XG5cbnZhciBfaW5oZXJpdHMyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzJyk7XG5cbnZhciBfaW5oZXJpdHMzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5oZXJpdHMyKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2snKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc0NhbGxDaGVjazIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcycpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbnZhciBfc2Vzc2lvbiA9IHJlcXVpcmUoJy4vc2Vzc2lvbicpO1xuXG52YXIgX3Nlc3Npb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2Vzc2lvbik7XG5cbnZhciBfcG9vbCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvcG9vbCcpO1xuXG52YXIgX3Bvb2wyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcG9vbCk7XG5cbnZhciBfY29ubmVjdG9yID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9jb25uZWN0b3InKTtcblxudmFyIF9zdHJlYW1PYnNlcnZlciA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtLW9ic2VydmVyJyk7XG5cbnZhciBfc3RyZWFtT2JzZXJ2ZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3RyZWFtT2JzZXJ2ZXIpO1xuXG52YXIgX2Vycm9yID0gcmVxdWlyZSgnLi9lcnJvcicpO1xuXG52YXIgX2Nvbm5lY3Rpb25Qcm92aWRlcnMgPSByZXF1aXJlKCcuL2ludGVybmFsL2Nvbm5lY3Rpb24tcHJvdmlkZXJzJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG52YXIgUkVBRCA9ICdSRUFEJyxcbiAgICBXUklURSA9ICdXUklURSc7XG4vKipcbiAqIEEgZHJpdmVyIG1haW50YWlucyBvbmUgb3IgbW9yZSB7QGxpbmsgU2Vzc2lvbiBzZXNzaW9uc30gd2l0aCBhIHJlbW90ZVxuICogTmVvNGogaW5zdGFuY2UuIFRocm91Z2ggdGhlIHtAbGluayBTZXNzaW9uIHNlc3Npb25zfSB5b3UgY2FuIHNlbmQgc3RhdGVtZW50c1xuICogYW5kIHJldHJpZXZlIHJlc3VsdHMgZnJvbSB0aGUgZGF0YWJhc2UuXG4gKlxuICogRHJpdmVycyBhcmUgcmVhc29uYWJseSBleHBlbnNpdmUgdG8gY3JlYXRlIC0geW91IHNob3VsZCBzdHJpdmUgdG8ga2VlcCBvbmVcbiAqIGRyaXZlciBpbnN0YW5jZSBhcm91bmQgcGVyIE5lbzRqIEluc3RhbmNlIHlvdSBjb25uZWN0IHRvLlxuICpcbiAqIEBhY2Nlc3MgcHVibGljXG4gKi9cblxudmFyIERyaXZlciA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIFlvdSBzaG91bGQgbm90IGJlIGNhbGxpbmcgdGhpcyBkaXJlY3RseSwgaW5zdGVhZCB1c2Uge0BsaW5rIGRyaXZlcn0uXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyQWdlbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IHRva2VuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWdcbiAgICogQGFjY2VzcyBwcml2YXRlXG4gICAqL1xuICBmdW5jdGlvbiBEcml2ZXIodXJsLCB1c2VyQWdlbnQpIHtcbiAgICB2YXIgdG9rZW4gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgIHZhciBjb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHt9O1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIERyaXZlcik7XG5cbiAgICB0aGlzLl91cmwgPSB1cmw7XG4gICAgdGhpcy5fdXNlckFnZW50ID0gdXNlckFnZW50O1xuICAgIHRoaXMuX29wZW5TZXNzaW9ucyA9IHt9O1xuICAgIHRoaXMuX3Nlc3Npb25JZEdlbmVyYXRvciA9IDA7XG4gICAgdGhpcy5fdG9rZW4gPSB0b2tlbjtcbiAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5fcG9vbCA9IG5ldyBfcG9vbDIuZGVmYXVsdCh0aGlzLl9jcmVhdGVDb25uZWN0aW9uLmJpbmQodGhpcyksIHRoaXMuX2Rlc3Ryb3lDb25uZWN0aW9uLmJpbmQodGhpcyksIERyaXZlci5fdmFsaWRhdGVDb25uZWN0aW9uLmJpbmQodGhpcyksIGNvbmZpZy5jb25uZWN0aW9uUG9vbFNpemUpO1xuICAgIHRoaXMuX2Nvbm5lY3Rpb25Qcm92aWRlciA9IHRoaXMuX2NyZWF0ZUNvbm5lY3Rpb25Qcm92aWRlcih1cmwsIHRoaXMuX3Bvb2wsIHRoaXMuX2RyaXZlck9uRXJyb3JDYWxsYmFjay5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgY29ubmVjdGlvbiBpbnN0YW5jZS5cbiAgICogQHJldHVybiB7Q29ubmVjdGlvbn0gbmV3IGNvbm5lY3Rvci1hcGkgc2Vzc2lvbiBpbnN0YW5jZSwgYSBsb3cgbGV2ZWwgc2Vzc2lvbiBBUEkuXG4gICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgKi9cblxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKERyaXZlciwgW3tcbiAgICBrZXk6ICdfY3JlYXRlQ29ubmVjdGlvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jcmVhdGVDb25uZWN0aW9uKHVybCwgcmVsZWFzZSkge1xuICAgICAgdmFyIHNlc3Npb25JZCA9IHRoaXMuX3Nlc3Npb25JZEdlbmVyYXRvcisrO1xuICAgICAgdmFyIGNvbm4gPSAoMCwgX2Nvbm5lY3Rvci5jb25uZWN0KSh1cmwsIHRoaXMuX2NvbmZpZyk7XG4gICAgICB2YXIgc3RyZWFtT2JzZXJ2ZXIgPSBuZXcgX0Nvbm5lY3Rpb25TdHJlYW1PYnNlcnZlcih0aGlzLCBjb25uKTtcbiAgICAgIGNvbm4uaW5pdGlhbGl6ZSh0aGlzLl91c2VyQWdlbnQsIHRoaXMuX3Rva2VuLCBzdHJlYW1PYnNlcnZlcik7XG4gICAgICBjb25uLl9pZCA9IHNlc3Npb25JZDtcbiAgICAgIGNvbm4uX3JlbGVhc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByZWxlYXNlKHVybCwgY29ubik7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLl9vcGVuU2Vzc2lvbnNbc2Vzc2lvbklkXSA9IGNvbm47XG4gICAgICByZXR1cm4gY29ubjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayB0aGF0IGEgY29ubmVjdGlvbiBpcyB1c2FibGVcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRoZSBjb25uZWN0aW9uIGlzIG9wZW5cbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKiovXG5cbiAgfSwge1xuICAgIGtleTogJ19kZXN0cm95Q29ubmVjdGlvbicsXG5cblxuICAgIC8qKlxuICAgICAqIERpc3Bvc2Ugb2YgYSBsaXZlIHNlc3Npb24sIGNsb3NpbmcgYW55IGFzc29jaWF0ZWQgcmVzb3VyY2VzLlxuICAgICAqIEByZXR1cm4ge1Nlc3Npb259IG5ldyBzZXNzaW9uLlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBfZGVzdHJveUNvbm5lY3Rpb24oY29ubikge1xuICAgICAgZGVsZXRlIHRoaXMuX29wZW5TZXNzaW9uc1tjb25uLl9pZF07XG4gICAgICBjb25uLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWNxdWlyZSBhIHNlc3Npb24gdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZGF0YWJhc2UuIFRoZSBkcml2ZXIgbWFpbnRhaW5zXG4gICAgICogYSBwb29sIG9mIHNlc3Npb25zLCBzbyBjYWxsaW5nIHRoaXMgbWV0aG9kIGlzIG5vcm1hbGx5IGNoZWFwIGJlY2F1c2UgeW91XG4gICAgICogd2lsbCBiZSBwdWxsaW5nIGEgc2Vzc2lvbiBvdXQgb2YgdGhlIGNvbW1vbiBwb29sLlxuICAgICAqXG4gICAgICogVGhpcyBjb21lcyB3aXRoIHNvbWUgcmVzcG9uc2liaWxpdHkgLSBtYWtlIHN1cmUgeW91IGFsd2F5cyBjYWxsXG4gICAgICoge0BsaW5rIFNlc3Npb24jY2xvc2UoKX0gd2hlbiB5b3UgYXJlIGRvbmUgdXNpbmcgYSBzZXNzaW9uLCBhbmQgbGlrZXdpc2UsXG4gICAgICogbWFrZSBzdXJlIHlvdSBkb24ndCBjbG9zZSB5b3VyIHNlc3Npb24gYmVmb3JlIHlvdSBhcmUgZG9uZSB1c2luZyBpdC4gT25jZVxuICAgICAqIGl0IGlzIHJldHVybmVkIHRvIHRoZSBwb29sLCB0aGUgc2Vzc2lvbiB3aWxsIGJlIHJlc2V0IHRvIGEgY2xlYW4gc3RhdGUgYW5kXG4gICAgICogbWFkZSBhdmFpbGFibGUgZm9yIG90aGVycyB0byB1c2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW21vZGU9V1JJVEVdIHRoZSBhY2Nlc3MgbW9kZSBvZiB0aGlzIHNlc3Npb24sIGFsbG93ZWQgdmFsdWVzIGFyZSB7QGxpbmsgUkVBRH0gYW5kIHtAbGluayBXUklURX0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtib29rbWFyaz1udWxsXSB0aGUgaW5pdGlhbCByZWZlcmVuY2UgdG8gc29tZSBwcmV2aW91cyB0cmFuc2FjdGlvbi4gVmFsdWUgaXMgb3B0aW9uYWwgYW5kXG4gICAgICogYWJzZW5jZSBpbmRpY2F0ZXMgdGhhdCB0aGF0IHRoZSBib29rbWFyayBkb2VzIG5vdCBleGlzdCBvciBpcyB1bmtub3duLlxuICAgICAqIEByZXR1cm4ge1Nlc3Npb259IG5ldyBzZXNzaW9uLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzZXNzaW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2Vzc2lvbihtb2RlLCBib29rbWFyaykge1xuICAgICAgdmFyIHNlc3Npb25Nb2RlID0gRHJpdmVyLl92YWxpZGF0ZVNlc3Npb25Nb2RlKG1vZGUpO1xuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVNlc3Npb24oc2Vzc2lvbk1vZGUsIHRoaXMuX2Nvbm5lY3Rpb25Qcm92aWRlciwgYm9va21hcmssIHRoaXMuX2NvbmZpZyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2NyZWF0ZUNvbm5lY3Rpb25Qcm92aWRlcicsXG5cblxuICAgIC8vRXh0ZW5zaW9uIHBvaW50XG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jcmVhdGVDb25uZWN0aW9uUHJvdmlkZXIoYWRkcmVzcywgY29ubmVjdGlvblBvb2wsIGRyaXZlck9uRXJyb3JDYWxsYmFjaykge1xuICAgICAgcmV0dXJuIG5ldyBfY29ubmVjdGlvblByb3ZpZGVycy5EaXJlY3RDb25uZWN0aW9uUHJvdmlkZXIoYWRkcmVzcywgY29ubmVjdGlvblBvb2wsIGRyaXZlck9uRXJyb3JDYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLy9FeHRlbnNpb24gcG9pbnRcblxuICB9LCB7XG4gICAga2V5OiAnX2NyZWF0ZVNlc3Npb24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfY3JlYXRlU2Vzc2lvbihtb2RlLCBjb25uZWN0aW9uUHJvdmlkZXIsIGJvb2ttYXJrLCBjb25maWcpIHtcbiAgICAgIHJldHVybiBuZXcgX3Nlc3Npb24yLmRlZmF1bHQobW9kZSwgY29ubmVjdGlvblByb3ZpZGVyLCBib29rbWFyaywgY29uZmlnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZHJpdmVyT25FcnJvckNhbGxiYWNrJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2RyaXZlck9uRXJyb3JDYWxsYmFjayhlcnJvcikge1xuICAgICAgdmFyIHVzZXJEZWZpbmVkT25FcnJvckNhbGxiYWNrID0gdGhpcy5vbkVycm9yO1xuICAgICAgaWYgKHVzZXJEZWZpbmVkT25FcnJvckNhbGxiYWNrICYmIGVycm9yLmNvZGUgPT09IF9lcnJvci5TRVJWSUNFX1VOQVZBSUxBQkxFKSB7XG4gICAgICAgIHVzZXJEZWZpbmVkT25FcnJvckNhbGxiYWNrKGVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gdGVsbCB0aGUgZHJpdmVyIGFib3V0IHRoaXMgZXJyb3JcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZSBhbGwgb3BlbiBzZXNzaW9ucyBhbmQgb3RoZXIgYXNzb2NpYXRlZCByZXNvdXJjZXMuIFlvdSBzaG91bGRcbiAgICAgKiBtYWtlIHN1cmUgdG8gdXNlIHRoaXMgd2hlbiB5b3UgYXJlIGRvbmUgd2l0aCB0aGlzIGRyaXZlciBpbnN0YW5jZS5cbiAgICAgKiBAcmV0dXJuIHVuZGVmaW5lZFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdjbG9zZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgZm9yICh2YXIgc2Vzc2lvbklkIGluIHRoaXMuX29wZW5TZXNzaW9ucykge1xuICAgICAgICBpZiAodGhpcy5fb3BlblNlc3Npb25zLmhhc093blByb3BlcnR5KHNlc3Npb25JZCkpIHtcbiAgICAgICAgICB0aGlzLl9vcGVuU2Vzc2lvbnNbc2Vzc2lvbklkXS5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Bvb2wucHVyZ2VBbGwoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogJ192YWxpZGF0ZUNvbm5lY3Rpb24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfdmFsaWRhdGVDb25uZWN0aW9uKGNvbm4pIHtcbiAgICAgIHJldHVybiBjb25uLmlzT3BlbigpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ192YWxpZGF0ZVNlc3Npb25Nb2RlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3ZhbGlkYXRlU2Vzc2lvbk1vZGUocmF3TW9kZSkge1xuICAgICAgdmFyIG1vZGUgPSByYXdNb2RlIHx8IFdSSVRFO1xuICAgICAgaWYgKG1vZGUgIT09IFJFQUQgJiYgbW9kZSAhPT0gV1JJVEUpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvci5uZXdFcnJvcikoJ0lsbGVnYWwgc2Vzc2lvbiBtb2RlICcgKyBtb2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtb2RlO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gRHJpdmVyO1xufSgpO1xuXG4vKiogSW50ZXJuYWwgc3RyZWFtIG9ic2VydmVyIHVzZWQgZm9yIGNvbm5lY3Rpb24gc3RhdGUgKi9cblxuXG52YXIgX0Nvbm5lY3Rpb25TdHJlYW1PYnNlcnZlciA9IGZ1bmN0aW9uIChfU3RyZWFtT2JzZXJ2ZXIpIHtcbiAgKDAsIF9pbmhlcml0czMuZGVmYXVsdCkoX0Nvbm5lY3Rpb25TdHJlYW1PYnNlcnZlciwgX1N0cmVhbU9ic2VydmVyKTtcblxuICBmdW5jdGlvbiBfQ29ubmVjdGlvblN0cmVhbU9ic2VydmVyKGRyaXZlciwgY29ubikge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIF9Db25uZWN0aW9uU3RyZWFtT2JzZXJ2ZXIpO1xuXG4gICAgdmFyIF90aGlzID0gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoX0Nvbm5lY3Rpb25TdHJlYW1PYnNlcnZlci5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoX0Nvbm5lY3Rpb25TdHJlYW1PYnNlcnZlcikpLmNhbGwodGhpcykpO1xuXG4gICAgX3RoaXMuX2RyaXZlciA9IGRyaXZlcjtcbiAgICBfdGhpcy5fY29ubiA9IGNvbm47XG4gICAgX3RoaXMuX2hhc0ZhaWxlZCA9IGZhbHNlO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKF9Db25uZWN0aW9uU3RyZWFtT2JzZXJ2ZXIsIFt7XG4gICAga2V5OiAnb25FcnJvcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uRXJyb3IoZXJyb3IpIHtcbiAgICAgIGlmICghdGhpcy5faGFzRmFpbGVkKSB7XG4gICAgICAgICgwLCBfZ2V0My5kZWZhdWx0KShfQ29ubmVjdGlvblN0cmVhbU9ic2VydmVyLnByb3RvdHlwZS5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoX0Nvbm5lY3Rpb25TdHJlYW1PYnNlcnZlci5wcm90b3R5cGUpLCAnb25FcnJvcicsIHRoaXMpLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICBpZiAodGhpcy5fZHJpdmVyLm9uRXJyb3IpIHtcbiAgICAgICAgICB0aGlzLl9kcml2ZXIub25FcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faGFzRmFpbGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvbkNvbXBsZXRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ29tcGxldGVkKG1lc3NhZ2UpIHtcbiAgICAgIGlmICh0aGlzLl9kcml2ZXIub25Db21wbGV0ZWQpIHtcbiAgICAgICAgdGhpcy5fZHJpdmVyLm9uQ29tcGxldGVkKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2Nvbm4gJiYgbWVzc2FnZSAmJiBtZXNzYWdlLnNlcnZlcikge1xuICAgICAgICB0aGlzLl9jb25uLnNldFNlcnZlclZlcnNpb24obWVzc2FnZS5zZXJ2ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gX0Nvbm5lY3Rpb25TdHJlYW1PYnNlcnZlcjtcbn0oX3N0cmVhbU9ic2VydmVyMi5kZWZhdWx0KTtcblxuZXhwb3J0cy5Ecml2ZXIgPSBEcml2ZXI7XG5leHBvcnRzLlJFQUQgPSBSRUFEO1xuZXhwb3J0cy5XUklURSA9IFdSSVRFO1xuZXhwb3J0cy5kZWZhdWx0ID0gRHJpdmVyOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuUFJPVE9DT0xfRVJST1IgPSBleHBvcnRzLlNFU1NJT05fRVhQSVJFRCA9IGV4cG9ydHMuU0VSVklDRV9VTkFWQUlMQUJMRSA9IGV4cG9ydHMuTmVvNGpFcnJvciA9IGV4cG9ydHMubmV3RXJyb3IgPSB1bmRlZmluZWQ7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxudmFyIF9nZXRQcm90b3R5cGVPZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRQcm90b3R5cGVPZik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2syID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJyk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuJyk7XG5cbnZhciBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMik7XG5cbnZhciBfaW5oZXJpdHMyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzJyk7XG5cbnZhciBfaW5oZXJpdHMzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5oZXJpdHMyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEEgY29tbW9uIHBsYWNlIGZvciBjb25zdHJ1Y3RpbmcgZXJyb3Igb2JqZWN0cywgdG8ga2VlcCB0aGVtXG4vLyB1bmlmb3JtIGFjcm9zcyB0aGUgZHJpdmVyIHN1cmZhY2UuXG5cbnZhciBTRVJWSUNFX1VOQVZBSUxBQkxFID0gJ1NlcnZpY2VVbmF2YWlsYWJsZSc7XG52YXIgU0VTU0lPTl9FWFBJUkVEID0gJ1Nlc3Npb25FeHBpcmVkJztcbnZhciBQUk9UT0NPTF9FUlJPUiA9ICdQcm90b2NvbEVycm9yJztcblxuZnVuY3Rpb24gbmV3RXJyb3IobWVzc2FnZSkge1xuICB2YXIgY29kZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogXCJOL0FcIjtcblxuICAvLyBUT0RPOiBJZGVhIGlzIHRoYXQgd2UgY2FuIGNoZWNrIHRoZSBjb2RlIGhlcmUgYW5kIHRocm93IHN1Yi1jbGFzc2VzXG4gIC8vIG9mIE5lbzRqRXJyb3IgYXMgYXBwcm9wcmlhdGVcbiAgcmV0dXJuIG5ldyBOZW80akVycm9yKG1lc3NhZ2UsIGNvZGUpO1xufVxuXG52YXIgTmVvNGpFcnJvciA9IGZ1bmN0aW9uIChfRXJyb3IpIHtcbiAgKDAsIF9pbmhlcml0czMuZGVmYXVsdCkoTmVvNGpFcnJvciwgX0Vycm9yKTtcblxuICBmdW5jdGlvbiBOZW80akVycm9yKG1lc3NhZ2UpIHtcbiAgICB2YXIgY29kZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogXCJOL0FcIjtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBOZW80akVycm9yKTtcblxuICAgIHZhciBfdGhpcyA9ICgwLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMuZGVmYXVsdCkodGhpcywgKE5lbzRqRXJyb3IuX19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKE5lbzRqRXJyb3IpKS5jYWxsKHRoaXMsIG1lc3NhZ2UpKTtcblxuICAgIF90aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIF90aGlzLmNvZGUgPSBjb2RlO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBOZW80akVycm9yO1xufShFcnJvcik7XG5cbmV4cG9ydHMubmV3RXJyb3IgPSBuZXdFcnJvcjtcbmV4cG9ydHMuTmVvNGpFcnJvciA9IE5lbzRqRXJyb3I7XG5leHBvcnRzLlNFUlZJQ0VfVU5BVkFJTEFCTEUgPSBTRVJWSUNFX1VOQVZBSUxBQkxFO1xuZXhwb3J0cy5TRVNTSU9OX0VYUElSRUQgPSBTRVNTSU9OX0VYUElSRUQ7XG5leHBvcnRzLlBST1RPQ09MX0VSUk9SID0gUFJPVE9DT0xfRVJST1I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlBhdGhTZWdtZW50ID0gZXhwb3J0cy5QYXRoID0gZXhwb3J0cy5VbmJvdW5kUmVsYXRpb25zaGlwID0gZXhwb3J0cy5SZWxhdGlvbnNoaXAgPSBleHBvcnRzLk5vZGUgPSB1bmRlZmluZWQ7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9qc29uL3N0cmluZ2lmeVwiKTtcblxudmFyIF9zdHJpbmdpZnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3RyaW5naWZ5KTtcblxudmFyIF9rZXlzID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5c1wiKTtcblxudmFyIF9rZXlzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2tleXMpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2tcIik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKipcbiAqIENsYXNzIGZvciBOb2RlIFR5cGUuXG4gKi9cbnZhciBOb2RlID0gZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gaWRlbnRpdHkgLSBVbmlxdWUgaWRlbnRpdHlcbiAgICogQHBhcmFtIHtBcnJheX0gbGFiZWxzIC0gQXJyYXkgZm9yIGFsbCBsYWJlbHNcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgLSBNYXAgd2l0aCBub2RlIHByb3BlcnRpZXNcbiAgICovXG4gIGZ1bmN0aW9uIE5vZGUoaWRlbnRpdHksIGxhYmVscywgcHJvcGVydGllcykge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIE5vZGUpO1xuXG4gICAgdGhpcy5pZGVudGl0eSA9IGlkZW50aXR5O1xuICAgIHRoaXMubGFiZWxzID0gbGFiZWxzO1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShOb2RlLCBbe1xuICAgIGtleTogXCJ0b1N0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHZhciBzID0gXCIoXCIgKyB0aGlzLmlkZW50aXR5O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxhYmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzICs9IFwiOlwiICsgdGhpcy5sYWJlbHNbaV07XG4gICAgICB9XG4gICAgICB2YXIga2V5cyA9ICgwLCBfa2V5czIuZGVmYXVsdCkodGhpcy5wcm9wZXJ0aWVzKTtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcyArPSBcIiB7XCI7XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBrZXlzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgIGlmIChfaSA+IDApIHMgKz0gXCIsXCI7XG4gICAgICAgICAgcyArPSBrZXlzW19pXSArIFwiOlwiICsgKDAsIF9zdHJpbmdpZnkyLmRlZmF1bHQpKHRoaXMucHJvcGVydGllc1trZXlzW19pXV0pO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBzICs9IFwiKVwiO1xuICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBOb2RlO1xufSgpO1xuXG4vKipcbiAqIENsYXNzIGZvciBSZWxhdGlvbnNoaXAgVHlwZS5cbiAqL1xuXG5cbnZhciBSZWxhdGlvbnNoaXAgPSBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtJbnRlZ2VyfSBpZGVudGl0eSAtIFVuaXF1ZSBpZGVudGl0eVxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IHN0YXJ0IC0gSWRlbnRpdHkgb2Ygc3RhcnQgTm9kZVxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IGVuZCAtIElkZW50aXR5IG9mIGVuZCBOb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gUmVsYXRpb25zaGlwIHR5cGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgLSBNYXAgd2l0aCByZWxhdGlvbnNoaXAgcHJvcGVydGllc1xuICAgKi9cbiAgZnVuY3Rpb24gUmVsYXRpb25zaGlwKGlkZW50aXR5LCBzdGFydCwgZW5kLCB0eXBlLCBwcm9wZXJ0aWVzKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUmVsYXRpb25zaGlwKTtcblxuICAgIHRoaXMuaWRlbnRpdHkgPSBpZGVudGl0eTtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoUmVsYXRpb25zaGlwLCBbe1xuICAgIGtleTogXCJ0b1N0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHZhciBzID0gXCIoXCIgKyB0aGlzLnN0YXJ0ICsgXCIpLVs6XCIgKyB0aGlzLnR5cGU7XG4gICAgICB2YXIga2V5cyA9ICgwLCBfa2V5czIuZGVmYXVsdCkodGhpcy5wcm9wZXJ0aWVzKTtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcyArPSBcIiB7XCI7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChpID4gMCkgcyArPSBcIixcIjtcbiAgICAgICAgICBzICs9IGtleXNbaV0gKyBcIjpcIiArICgwLCBfc3RyaW5naWZ5Mi5kZWZhdWx0KSh0aGlzLnByb3BlcnRpZXNba2V5c1tpXV0pO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBzICs9IFwiXS0+KFwiICsgdGhpcy5lbmQgKyBcIilcIjtcbiAgICAgIHJldHVybiBzO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gUmVsYXRpb25zaGlwO1xufSgpO1xuXG4vKipcbiAqIENsYXNzIGZvciBVbmJvdW5kUmVsYXRpb25zaGlwIFR5cGUuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqL1xuXG5cbnZhciBVbmJvdW5kUmVsYXRpb25zaGlwID0gZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gaWRlbnRpdHkgLSBVbmlxdWUgaWRlbnRpdHlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBSZWxhdGlvbnNoaXAgdHlwZVxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyAtIE1hcCB3aXRoIHJlbGF0aW9uc2hpcCBwcm9wZXJ0aWVzXG4gICAqL1xuICBmdW5jdGlvbiBVbmJvdW5kUmVsYXRpb25zaGlwKGlkZW50aXR5LCB0eXBlLCBwcm9wZXJ0aWVzKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgVW5ib3VuZFJlbGF0aW9uc2hpcCk7XG5cbiAgICB0aGlzLmlkZW50aXR5ID0gaWRlbnRpdHk7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgcmVsYXRpb25zaGlwXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gc3RhcnQgLSBJZGVudGl0eSBvZiBzdGFydCBub2RlXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gZW5kIC0gSWRlbnRpdHkgb2YgZW5kIG5vZGVcbiAgICogQHJldHVybiB7UmVsYXRpb25zaGlwfSAtIENyZWF0ZWQgcmVsYXRpb25zaGlwXG4gICAqL1xuXG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoVW5ib3VuZFJlbGF0aW9uc2hpcCwgW3tcbiAgICBrZXk6IFwiYmluZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBiaW5kKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHJldHVybiBuZXcgUmVsYXRpb25zaGlwKHRoaXMuaWRlbnRpdHksIHN0YXJ0LCBlbmQsIHRoaXMudHlwZSwgdGhpcy5wcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9TdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICB2YXIgcyA9IFwiLVs6XCIgKyB0aGlzLnR5cGU7XG4gICAgICB2YXIga2V5cyA9ICgwLCBfa2V5czIuZGVmYXVsdCkodGhpcy5wcm9wZXJ0aWVzKTtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcyArPSBcIiB7XCI7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChpID4gMCkgcyArPSBcIixcIjtcbiAgICAgICAgICBzICs9IGtleXNbaV0gKyBcIjpcIiArICgwLCBfc3RyaW5naWZ5Mi5kZWZhdWx0KSh0aGlzLnByb3BlcnRpZXNba2V5c1tpXV0pO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBzICs9IFwiXS0+XCI7XG4gICAgICByZXR1cm4gcztcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFVuYm91bmRSZWxhdGlvbnNoaXA7XG59KCk7XG5cbi8qKlxuICogQ2xhc3MgZm9yIFBhdGhTZWdtZW50IFR5cGUuXG4gKi9cblxuXG52YXIgUGF0aFNlZ21lbnQgPVxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7Tm9kZX0gc3RhcnQgLSBzdGFydCBub2RlXG4gKiBAcGFyYW0ge1JlbGF0aW9uc2hpcH0gcmVsIC0gcmVsYXRpb25zaGlwIHRoYXQgY29ubmVjdHMgc3RhcnQgYW5kIGVuZCBub2RlXG4gKiBAcGFyYW0ge05vZGV9IGVuZCAtIGVuZCBub2RlXG4gKi9cbmZ1bmN0aW9uIFBhdGhTZWdtZW50KHN0YXJ0LCByZWwsIGVuZCkge1xuICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBQYXRoU2VnbWVudCk7XG5cbiAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICB0aGlzLnJlbGF0aW9uc2hpcCA9IHJlbDtcbiAgdGhpcy5lbmQgPSBlbmQ7XG59O1xuXG4vKipcbiAqIENsYXNzIGZvciBQYXRoIFR5cGUuXG4gKi9cblxuXG52YXIgUGF0aCA9XG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtOb2RlfSBzdGFydCAgLSBzdGFydCBub2RlXG4gKiBAcGFyYW0ge05vZGV9IGVuZCAtIGVuZCBub2RlXG4gKiBAcGFyYW0ge0FycmF5fSBzZWdtZW50cyAtIEFycmF5IG9mIFNlZ21lbnRzXG4gKi9cbmZ1bmN0aW9uIFBhdGgoc3RhcnQsIGVuZCwgc2VnbWVudHMpIHtcbiAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUGF0aCk7XG5cbiAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICB0aGlzLmVuZCA9IGVuZDtcbiAgdGhpcy5zZWdtZW50cyA9IHNlZ21lbnRzO1xuICB0aGlzLmxlbmd0aCA9IHNlZ21lbnRzLmxlbmd0aDtcbn07XG5cbmV4cG9ydHMuTm9kZSA9IE5vZGU7XG5leHBvcnRzLlJlbGF0aW9uc2hpcCA9IFJlbGF0aW9uc2hpcDtcbmV4cG9ydHMuVW5ib3VuZFJlbGF0aW9uc2hpcCA9IFVuYm91bmRSZWxhdGlvbnNoaXA7XG5leHBvcnRzLlBhdGggPSBQYXRoO1xuZXhwb3J0cy5QYXRoU2VnbWVudCA9IFBhdGhTZWdtZW50OyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXJyb3IgPSBleHBvcnRzLnNlc3Npb24gPSBleHBvcnRzLnR5cGVzID0gZXhwb3J0cy5hdXRoID0gZXhwb3J0cy5OZW80akVycm9yID0gZXhwb3J0cy5pbnRlZ2VyID0gZXhwb3J0cy5pc0ludCA9IGV4cG9ydHMuaW50ID0gZXhwb3J0cy5kcml2ZXIgPSB1bmRlZmluZWQ7XG5cbnZhciBfaW50ZWdlciA9IHJlcXVpcmUoJy4vaW50ZWdlcicpO1xuXG52YXIgX2dyYXBoVHlwZXMgPSByZXF1aXJlKCcuL2dyYXBoLXR5cGVzJyk7XG5cbnZhciBfZXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yJyk7XG5cbnZhciBfcmVzdWx0ID0gcmVxdWlyZSgnLi9yZXN1bHQnKTtcblxudmFyIF9yZXN1bHQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVzdWx0KTtcblxudmFyIF9yZXN1bHRTdW1tYXJ5ID0gcmVxdWlyZSgnLi9yZXN1bHQtc3VtbWFyeScpO1xuXG52YXIgX3Jlc3VsdFN1bW1hcnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVzdWx0U3VtbWFyeSk7XG5cbnZhciBfcmVjb3JkID0gcmVxdWlyZSgnLi9yZWNvcmQnKTtcblxudmFyIF9yZWNvcmQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVjb3JkKTtcblxudmFyIF9kcml2ZXIgPSByZXF1aXJlKCcuL2RyaXZlcicpO1xuXG52YXIgX3JvdXRpbmdEcml2ZXIgPSByZXF1aXJlKCcuL3JvdXRpbmctZHJpdmVyJyk7XG5cbnZhciBfcm91dGluZ0RyaXZlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yb3V0aW5nRHJpdmVyKTtcblxudmFyIF92ZXJzaW9uID0gcmVxdWlyZSgnLi4vdmVyc2lvbicpO1xuXG52YXIgX3ZlcnNpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdmVyc2lvbik7XG5cbnZhciBfY29ubmVjdG9yID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9jb25uZWN0b3InKTtcblxudmFyIF91dGlsID0gcmVxdWlyZSgnLi9pbnRlcm5hbC91dGlsJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBhdXRoID0ge1xuICBiYXNpYzogZnVuY3Rpb24gYmFzaWModXNlcm5hbWUsIHBhc3N3b3JkKSB7XG4gICAgdmFyIHJlYWxtID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAocmVhbG0pIHtcbiAgICAgIHJldHVybiB7IHNjaGVtZTogXCJiYXNpY1wiLCBwcmluY2lwYWw6IHVzZXJuYW1lLCBjcmVkZW50aWFsczogcGFzc3dvcmQsIHJlYWxtOiByZWFsbSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyBzY2hlbWU6IFwiYmFzaWNcIiwgcHJpbmNpcGFsOiB1c2VybmFtZSwgY3JlZGVudGlhbHM6IHBhc3N3b3JkIH07XG4gICAgfVxuICB9LFxuICBjdXN0b206IGZ1bmN0aW9uIGN1c3RvbShwcmluY2lwYWwsIGNyZWRlbnRpYWxzLCByZWFsbSwgc2NoZW1lKSB7XG4gICAgdmFyIHBhcmFtZXRlcnMgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChwYXJhbWV0ZXJzKSB7XG4gICAgICByZXR1cm4geyBzY2hlbWU6IHNjaGVtZSwgcHJpbmNpcGFsOiBwcmluY2lwYWwsIGNyZWRlbnRpYWxzOiBjcmVkZW50aWFscywgcmVhbG06IHJlYWxtLFxuICAgICAgICBwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7IHNjaGVtZTogc2NoZW1lLCBwcmluY2lwYWw6IHByaW5jaXBhbCwgY3JlZGVudGlhbHM6IGNyZWRlbnRpYWxzLCByZWFsbTogcmVhbG0gfTtcbiAgICB9XG4gIH1cbn07IC8qKlxuICAgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICAgICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICAgICpcbiAgICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICAgICpcbiAgICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgICAqXG4gICAgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gICAgKlxuICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgICAqL1xuXG52YXIgVVNFUl9BR0VOVCA9IFwibmVvNGotamF2YXNjcmlwdC9cIiArIF92ZXJzaW9uMi5kZWZhdWx0O1xuXG4vKipcbiAqIENvbnN0cnVjdCBhIG5ldyBOZW80aiBEcml2ZXIuIFRoaXMgaXMgeW91ciBtYWluIGVudHJ5IHBvaW50IGZvciB0aGlzXG4gKiBsaWJyYXJ5LlxuICpcbiAqICMjIENvbmZpZ3VyYXRpb25cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIG9wdGlvbmFsbHkgdGFrZXMgYSBjb25maWd1cmF0aW9uIGFyZ3VtZW50LiBBdmFpbGFibGUgY29uZmlndXJhdGlvblxuICogb3B0aW9ucyBhcmUgYXMgZm9sbG93czpcbiAqXG4gKiAgICAge1xuICogICAgICAgLy8gRW5jcnlwdGlvbiBsZXZlbDogRU5DUllQVElPTl9PTiBvciBFTkNSWVBUSU9OX09GRi5cbiAqICAgICAgIGVuY3J5cHRlZDogRU5DUllQVElPTl9PTnxFTkNSWVBUSU9OX09GRlxuICpcbiAqICAgICAgIC8vIFRydXN0IHN0cmF0ZWd5IHRvIHVzZSBpZiBlbmNyeXB0aW9uIGlzIGVuYWJsZWQuIFRoZXJlIGlzIG5vIG1vZGUgdG8gZGlzYWJsZVxuICogICAgICAgLy8gdHJ1c3Qgb3RoZXIgdGhhbiBkaXNhYmxpbmcgZW5jcnlwdGlvbiBhbHRvZ2V0aGVyLiBUaGUgcmVhc29uIGZvclxuICogICAgICAgLy8gdGhpcyBpcyB0aGF0IGlmIHlvdSBkb24ndCBrbm93IHdobyB5b3UgYXJlIHRhbGtpbmcgdG8sIGl0IGlzIGVhc3kgZm9yIGFuXG4gKiAgICAgICAvLyBhdHRhY2tlciB0byBoaWphY2sgeW91ciBlbmNyeXB0ZWQgY29ubmVjdGlvbiwgcmVuZGVyaW5nIGVuY3J5cHRpb24gcG9pbnRsZXNzLlxuICogICAgICAgLy9cbiAqICAgICAgIC8vIFRSVVNUX0FMTF9DRVJUSUZJQ0FURVMgaXMgdGhlIGRlZmF1bHQgY2hvaWNlIGZvciBOb2RlSlMgZGVwbG95bWVudHMuIEl0IG9ubHkgcmVxdWlyZXNcbiAqICAgICAgIC8vIG5ldyBob3N0IHRvIHByb3ZpZGUgYSBjZXJ0aWZpY2F0ZSBhbmQgZG9lcyBubyB2ZXJpZmljYXRpb24gb2YgdGhlIHByb3ZpZGVkIGNlcnRpZmljYXRlLlxuICogICAgICAgLy9cbiAqICAgICAgIC8vIFRSVVNUX09OX0ZJUlNUX1VTRSBpcyBhdmFpbGFibGUgZm9yIG1vZGVybiBOb2RlSlMgZGVwbG95bWVudHMsIGFuZCB3b3Jrc1xuICogICAgICAgLy8gc2ltaWxhcmx5IHRvIGhvdyBgc3NsYCB3b3JrcyAtIHRoZSBmaXJzdCB0aW1lIHdlIGNvbm5lY3QgdG8gYSBuZXcgaG9zdCxcbiAqICAgICAgIC8vIHdlIHJlbWVtYmVyIHRoZSBjZXJ0aWZpY2F0ZSB0aGV5IHVzZS4gSWYgdGhlIGNlcnRpZmljYXRlIGV2ZXIgY2hhbmdlcywgd2VcbiAqICAgICAgIC8vIGFzc3VtZSBpdCBpcyBhbiBhdHRlbXB0IHRvIGhpamFjayB0aGUgY29ubmVjdGlvbiBhbmQgcmVxdWlyZSBtYW51YWwgaW50ZXJ2ZW50aW9uLlxuICogICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGJ5IGRlZmF1bHQsIGNvbm5lY3Rpb25zIFwianVzdCB3b3JrXCIgd2hpbGUgc3RpbGwgZ2l2aW5nIHlvdVxuICogICAgICAgLy8gZ29vZCBlbmNyeXB0ZWQgcHJvdGVjdGlvbi5cbiAqICAgICAgIC8vXG4gKiAgICAgICAvLyBUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFUyBpcyB0aGUgY2xhc3NpYyBhcHByb2FjaCB0byB0cnVzdCB2ZXJpZmljYXRpb24gLVxuICogICAgICAgLy8gd2hlbmV2ZXIgd2UgZXN0YWJsaXNoIGFuIGVuY3J5cHRlZCBjb25uZWN0aW9uLCB3ZSBlbnN1cmUgdGhlIGhvc3QgaXMgdXNpbmdcbiAqICAgICAgIC8vIGFuIGVuY3J5cHRpb24gY2VydGlmaWNhdGUgdGhhdCBpcyBpbiwgb3IgaXMgc2lnbmVkIGJ5LCBhIGNlcnRpZmljYXRlIGxpc3RlZFxuICogICAgICAgLy8gYXMgdHJ1c3RlZC4gSW4gdGhlIHdlYiBidW5kbGUsIHRoaXMgbGlzdCBvZiB0cnVzdGVkIGNlcnRpZmljYXRlcyBpcyBtYWludGFpbmVkXG4gKiAgICAgICAvLyBieSB0aGUgd2ViIGJyb3dzZXIuIEluIE5vZGVKUywgeW91IGNvbmZpZ3VyZSB0aGUgbGlzdCB3aXRoIHRoZSBuZXh0IGNvbmZpZyBvcHRpb24uXG4gKiAgICAgICAvL1xuICogICAgICAgLy8gVFJVU1RfU1lTVEVNX0NBX1NJR05FRF9DRVJUSUZJQ0FURVMgbWVhbmQgdGhhdCB5b3UgdHJ1c3Qgd2hhdGV2ZXIgY2VydGlmaWNhdGVzXG4gKiAgICAgICAvLyBhcmUgaW4gdGhlIGRlZmF1bHQgY2VydGlmaWNhdGUgY2hhaW4gb2YgdGhcbiAqICAgICAgIHRydXN0OiBcIlRSVVNUX0FMTF9DRVJUSUZJQ0FURVNcIiB8IFwiVFJVU1RfT05fRklSU1RfVVNFXCIgfCBcIlRSVVNUX1NJR05FRF9DRVJUSUZJQ0FURVNcIiB8XG4gICogICAgICAgXCJUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFU1wiIHwgXCJUUlVTVF9TWVNURU1fQ0FfU0lHTkVEX0NFUlRJRklDQVRFU1wiLFxuICpcbiAqICAgICAgIC8vIExpc3Qgb2Ygb25lIG9yIG1vcmUgcGF0aHMgdG8gdHJ1c3RlZCBlbmNyeXB0aW9uIGNlcnRpZmljYXRlcy4gVGhpcyBvbmx5XG4gKiAgICAgICAvLyB3b3JrcyBpbiB0aGUgTm9kZUpTIGJ1bmRsZSwgYW5kIG9ubHkgbWF0dGVycyBpZiB5b3UgdXNlIFwiVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVNcIi5cbiAqICAgICAgIC8vIFRoZSBjZXJ0aWZpY2F0ZSBmaWxlcyBzaG91bGQgYmUgaW4gcmVndWxhciBYLjUwOSBQRU0gZm9ybWF0LlxuICogICAgICAgLy8gRm9yIGluc3RhbmNlLCBbJy4vdHJ1c3RlZC5wZW0nXVxuICogICAgICAgdHJ1c3RlZENlcnRpZmljYXRlczogW10sXG4gKlxuICogICAgICAgLy8gUGF0aCB0byBhIGZpbGUgd2hlcmUgdGhlIGRyaXZlciBzYXZlcyBob3N0cyBpdCBoYXMgc2VlbiBpbiB0aGUgcGFzdCwgdGhpcyBpc1xuICogICAgICAgLy8gdmVyeSBzaW1pbGFyIHRvIHRoZSBzc2wgdG9vbCdzIGtub3duX2hvc3RzIGZpbGUuIEVhY2ggdGltZSB3ZSBjb25uZWN0IHRvIGFcbiAqICAgICAgIC8vIG5ldyBob3N0LCBhIGhhc2ggb2YgdGhlaXIgY2VydGlmaWNhdGUgaXMgc3RvcmVkIGFsb25nIHdpdGggdGhlIGRvbWFpbiBuYW1lIGFuZFxuICogICAgICAgLy8gcG9ydCwgYW5kIHRoaXMgaXMgdGhlbiB1c2VkIHRvIHZlcmlmeSB0aGUgaG9zdCBjZXJ0aWZpY2F0ZSBkb2VzIG5vdCBjaGFuZ2UuXG4gKiAgICAgICAvLyBUaGlzIHNldHRpbmcgaGFzIG5vIGVmZmVjdCB1bmxlc3MgVFJVU1RfT05fRklSU1RfVVNFIGlzIGVuYWJsZWQuXG4gKiAgICAgICBrbm93bkhvc3RzOlwifi8ubmVvNGova25vd25faG9zdHNcIixcbiAqXG4gKiAgICAgICAvLyBUaGUgbWF4IG51bWJlciBvZiBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbGxvd2VkIGlkbGUgaW4gdGhlIHBvb2wgYXQgYW55IHRpbWUuXG4gKiAgICAgICAvLyBDb25uZWN0aW9uIHdpbGwgYmUgZGVzdHJveWVkIGlmIHRoaXMgdGhyZXNob2xkIGlzIGV4Y2VlZGVkLlxuICogICAgICAgY29ubmVjdGlvblBvb2xTaXplOiA1MCxcbiAqXG4gKiAgICAgICAvLyBTcGVjaWZ5IHRoZSBtYXhpbXVtIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRyYW5zYWN0aW9ucyBhcmUgYWxsb3dlZCB0byByZXRyeSB2aWFcbiAqICAgICAgIC8vIHtAbGluayBTZXNzaW9uI3JlYWRUcmFuc2FjdGlvbigpfSBhbmQge0BsaW5rIFNlc3Npb24jd3JpdGVUcmFuc2FjdGlvbigpfSBmdW5jdGlvbnMuIFRoZXNlIGZ1bmN0aW9uc1xuICogICAgICAgLy8gd2lsbCByZXRyeSB0aGUgZ2l2ZW4gdW5pdCBvZiB3b3JrIG9uIGBTZXJ2aWNlVW5hdmFpbGFibGVgLCBgU2Vzc2lvbkV4cGlyZWRgIGFuZCB0cmFuc2llbnQgZXJyb3JzIHdpdGhcbiAqICAgICAgIC8vIGV4cG9uZW50aWFsIGJhY2tvZmYgdXNpbmcgaW5pdGlhbCBkZWxheSBvZiAxIHNlY29uZC4gRGVmYXVsdCB2YWx1ZSBpcyAzMDAwMCB3aGljaCBpcyAzMCBzZWNvbmRzLlxuICogICAgICAgbWF4VHJhbnNhY3Rpb25SZXRyeVRpbWU6IDMwMDAwLFxuICogICAgIH1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgZm9yIHRoZSBOZW80aiBkYXRhYmFzZSwgZm9yIGluc3RhbmNlIFwiYm9sdDovL2xvY2FsaG9zdFwiXG4gKiBAcGFyYW0ge01hcDxTdHJpbmcsU3RyaW5nPn0gYXV0aFRva2VuIEF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzLiBTZWUge0BsaW5rIGF1dGh9IGZvciBoZWxwZXJzLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBDb25maWd1cmF0aW9uIG9iamVjdC4gU2VlIHRoZSBjb25maWd1cmF0aW9uIHNlY3Rpb24gYWJvdmUgZm9yIGRldGFpbHMuXG4gKiBAcmV0dXJucyB7RHJpdmVyfVxuICovXG5mdW5jdGlvbiBkcml2ZXIodXJsLCBhdXRoVG9rZW4pIHtcbiAgdmFyIGNvbmZpZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG5cbiAgKDAsIF91dGlsLmFzc2VydFN0cmluZykodXJsLCAnQm9sdCBVUkwnKTtcbiAgdmFyIHNjaGVtZSA9ICgwLCBfY29ubmVjdG9yLnBhcnNlU2NoZW1lKSh1cmwpO1xuICBpZiAoc2NoZW1lID09PSBcImJvbHQrcm91dGluZzovL1wiKSB7XG4gICAgcmV0dXJuIG5ldyBfcm91dGluZ0RyaXZlcjIuZGVmYXVsdCgoMCwgX2Nvbm5lY3Rvci5wYXJzZVVybCkodXJsKSwgVVNFUl9BR0VOVCwgYXV0aFRva2VuLCBjb25maWcpO1xuICB9IGVsc2UgaWYgKHNjaGVtZSA9PT0gXCJib2x0Oi8vXCIpIHtcbiAgICByZXR1cm4gbmV3IF9kcml2ZXIuRHJpdmVyKCgwLCBfY29ubmVjdG9yLnBhcnNlVXJsKSh1cmwpLCBVU0VSX0FHRU5ULCBhdXRoVG9rZW4sIGNvbmZpZyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBzY2hlbWU6IFwiICsgc2NoZW1lKTtcbiAgfVxufVxuXG52YXIgdHlwZXMgPSB7XG4gIE5vZGU6IF9ncmFwaFR5cGVzLk5vZGUsXG4gIFJlbGF0aW9uc2hpcDogX2dyYXBoVHlwZXMuUmVsYXRpb25zaGlwLFxuICBVbmJvdW5kUmVsYXRpb25zaGlwOiBfZ3JhcGhUeXBlcy5VbmJvdW5kUmVsYXRpb25zaGlwLFxuICBQYXRoU2VnbWVudDogX2dyYXBoVHlwZXMuUGF0aFNlZ21lbnQsXG4gIFBhdGg6IF9ncmFwaFR5cGVzLlBhdGgsXG4gIFJlc3VsdDogX3Jlc3VsdDIuZGVmYXVsdCxcbiAgUmVzdWx0U3VtbWFyeTogX3Jlc3VsdFN1bW1hcnkyLmRlZmF1bHQsXG4gIFJlY29yZDogX3JlY29yZDIuZGVmYXVsdFxufTtcblxudmFyIHNlc3Npb24gPSB7XG4gIFJFQUQ6IF9kcml2ZXIuUkVBRCxcbiAgV1JJVEU6IF9kcml2ZXIuV1JJVEVcbn07XG52YXIgZXJyb3IgPSB7XG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEU6IF9lcnJvci5TRVJWSUNFX1VOQVZBSUxBQkxFLFxuICBTRVNTSU9OX0VYUElSRUQ6IF9lcnJvci5TRVNTSU9OX0VYUElSRUQsXG4gIFBST1RPQ09MX0VSUk9SOiBfZXJyb3IuUFJPVE9DT0xfRVJST1Jcbn07XG52YXIgaW50ZWdlciA9IHtcbiAgdG9OdW1iZXI6IF9pbnRlZ2VyLnRvTnVtYmVyLFxuICB0b1N0cmluZzogX2ludGVnZXIudG9TdHJpbmcsXG4gIGluU2FmZVJhbmdlOiBfaW50ZWdlci5pblNhZmVSYW5nZVxufTtcblxudmFyIGZvckV4cG9ydCA9IHtcbiAgZHJpdmVyOiBkcml2ZXIsXG4gIGludDogX2ludGVnZXIuaW50LFxuICBpc0ludDogX2ludGVnZXIuaXNJbnQsXG4gIGludGVnZXI6IGludGVnZXIsXG4gIE5lbzRqRXJyb3I6IF9lcnJvci5OZW80akVycm9yLFxuICBhdXRoOiBhdXRoLFxuICB0eXBlczogdHlwZXMsXG4gIHNlc3Npb246IHNlc3Npb24sXG4gIGVycm9yOiBlcnJvclxufTtcblxuZXhwb3J0cy5kcml2ZXIgPSBkcml2ZXI7XG5leHBvcnRzLmludCA9IF9pbnRlZ2VyLmludDtcbmV4cG9ydHMuaXNJbnQgPSBfaW50ZWdlci5pc0ludDtcbmV4cG9ydHMuaW50ZWdlciA9IGludGVnZXI7XG5leHBvcnRzLk5lbzRqRXJyb3IgPSBfZXJyb3IuTmVvNGpFcnJvcjtcbmV4cG9ydHMuYXV0aCA9IGF1dGg7XG5leHBvcnRzLnR5cGVzID0gdHlwZXM7XG5leHBvcnRzLnNlc3Npb24gPSBzZXNzaW9uO1xuZXhwb3J0cy5lcnJvciA9IGVycm9yO1xuZXhwb3J0cy5kZWZhdWx0ID0gZm9yRXhwb3J0OyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudG9TdHJpbmcgPSBleHBvcnRzLnRvTnVtYmVyID0gZXhwb3J0cy5pblNhZmVSYW5nZSA9IGV4cG9ydHMuaXNJbnQgPSBleHBvcnRzLmludCA9IHVuZGVmaW5lZDtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2snKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc0NhbGxDaGVjazIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcycpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbnZhciBfZXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIDY0IGJpdCB0d28ncy1jb21wbGVtZW50IGludGVnZXIsIGdpdmVuIGl0cyBsb3cgYW5kIGhpZ2ggMzIgYml0IHZhbHVlcyBhcyAqc2lnbmVkKiBpbnRlZ2Vycy5cbiAqICBTZWUgdGhlIGZyb20qIGZ1bmN0aW9ucyBiZWxvdyBmb3IgbW9yZSBjb252ZW5pZW50IHdheXMgb2YgY29uc3RydWN0aW5nIEludGVnZXJzLlxuICogQGFjY2VzcyBwdWJsaWNcbiAqIEBleHBvcnRzIEludGVnZXJcbiAqIEBjbGFzcyBBIEludGVnZXIgY2xhc3MgZm9yIHJlcHJlc2VudGluZyBhIDY0IGJpdCB0d28ncy1jb21wbGVtZW50IGludGVnZXIgdmFsdWUuXG4gKiBAcGFyYW0ge251bWJlcn0gbG93IFRoZSBsb3cgKHNpZ25lZCkgMzIgYml0cyBvZiB0aGUgbG9uZ1xuICogQHBhcmFtIHtudW1iZXJ9IGhpZ2ggVGhlIGhpZ2ggKHNpZ25lZCkgMzIgYml0cyBvZiB0aGUgbG9uZ1xuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQGRlcHJlY2F0ZWQgVGhpcyBjbGFzcyB3aWxsIGJlIHJlbW92ZWQgb3IgbWFkZSBpbnRlcm5hbCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIuXG4gKi9cbnZhciBJbnRlZ2VyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBJbnRlZ2VyKGxvdywgaGlnaCkge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIEludGVnZXIpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxvdyAzMiBiaXRzIGFzIGEgc2lnbmVkIHZhbHVlLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuICAgIHRoaXMubG93ID0gbG93IHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoaWdoIDMyIGJpdHMgYXMgYSBzaWduZWQgdmFsdWUuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAZXhwb3NlXG4gICAgICovXG4gICAgdGhpcy5oaWdoID0gaGlnaCB8IDA7XG4gIH1cblxuICAvLyBUaGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYW4gSW50ZWdlciBpcyB0aGUgdHdvIGdpdmVuIHNpZ25lZCwgMzItYml0IHZhbHVlcy5cbiAgLy8gV2UgdXNlIDMyLWJpdCBwaWVjZXMgYmVjYXVzZSB0aGVzZSBhcmUgdGhlIHNpemUgb2YgaW50ZWdlcnMgb24gd2hpY2hcbiAgLy8gSmF2YXNjcmlwdCBwZXJmb3JtcyBiaXQtb3BlcmF0aW9ucy4gIEZvciBvcGVyYXRpb25zIGxpa2UgYWRkaXRpb24gYW5kXG4gIC8vIG11bHRpcGxpY2F0aW9uLCB3ZSBzcGxpdCBlYWNoIG51bWJlciBpbnRvIDE2IGJpdCBwaWVjZXMsIHdoaWNoIGNhbiBlYXNpbHkgYmVcbiAgLy8gbXVsdGlwbGllZCB3aXRoaW4gSmF2YXNjcmlwdCdzIGZsb2F0aW5nLXBvaW50IHJlcHJlc2VudGF0aW9uIHdpdGhvdXQgb3ZlcmZsb3dcbiAgLy8gb3IgY2hhbmdlIGluIHNpZ24uXG4gIC8vXG4gIC8vIEluIHRoZSBhbGdvcml0aG1zIGJlbG93LCB3ZSBmcmVxdWVudGx5IHJlZHVjZSB0aGUgbmVnYXRpdmUgY2FzZSB0byB0aGVcbiAgLy8gcG9zaXRpdmUgY2FzZSBieSBuZWdhdGluZyB0aGUgaW5wdXQocykgYW5kIHRoZW4gcG9zdC1wcm9jZXNzaW5nIHRoZSByZXN1bHQuXG4gIC8vIE5vdGUgdGhhdCB3ZSBtdXN0IEFMV0FZUyBjaGVjayBzcGVjaWFsbHkgd2hldGhlciB0aG9zZSB2YWx1ZXMgYXJlIE1JTl9WQUxVRVxuICAvLyAoLTJeNjMpIGJlY2F1c2UgLU1JTl9WQUxVRSA9PSBNSU5fVkFMVUUgKHNpbmNlIDJeNjMgY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzXG4gIC8vIGEgcG9zaXRpdmUgbnVtYmVyLCBpdCBvdmVyZmxvd3MgYmFjayBpbnRvIGEgbmVnYXRpdmUpLiAgTm90IGhhbmRsaW5nIHRoaXNcbiAgLy8gY2FzZSB3b3VsZCBvZnRlbiByZXN1bHQgaW4gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAvL1xuICAvLyBDb21tb24gY29uc3RhbnQgdmFsdWVzIFpFUk8sIE9ORSwgTkVHX09ORSwgZXRjLiBhcmUgZGVmaW5lZCBiZWxvdyB0aGUgZnJvbSpcbiAgLy8gbWV0aG9kcyBvbiB3aGljaCB0aGV5IGRlcGVuZC5cblxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKEludGVnZXIsIFt7XG4gICAga2V5OiAnaW5TYWZlUmFuZ2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpblNhZmVSYW5nZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyZWF0ZXJUaGFuT3JFcXVhbChJbnRlZ2VyLk1JTl9TQUZFX1ZBTFVFKSAmJiB0aGlzLmxlc3NUaGFuT3JFcXVhbChJbnRlZ2VyLk1BWF9TQUZFX1ZBTFVFKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIEludGVnZXIgdG8gYW4gZXhhY3QgamF2YXNjcmlwdCBOdW1iZXIsIGFzc3VtaW5nIGl0IGlzIGEgMzIgYml0IGludGVnZXIuXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKiBAZXhwb3NlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3RvSW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9JbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb3c7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAndG9OdW1iZXInLFxuXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgSW50ZWdlciB0byBhIHRoZSBuZWFyZXN0IGZsb2F0aW5nLXBvaW50IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdmFsdWUgKGRvdWJsZSwgNTMgYml0IG1hbnRpc3NhKS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9OdW1iZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oaWdoICogVFdPX1BXUl8zMl9EQkwgKyAodGhpcy5sb3cgPj4+IDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBJbnRlZ2VyIHRvIGEgc3RyaW5nIHdyaXR0ZW4gaW4gdGhlIHNwZWNpZmllZCByYWRpeC5cbiAgICAgKiBAcGFyYW0ge251bWJlcj19IHJhZGl4IFJhZGl4ICgyLTM2KSwgZGVmYXVsdHMgdG8gMTBcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqIEBvdmVycmlkZVxuICAgICAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IElmIGByYWRpeGAgaXMgb3V0IG9mIHJhbmdlXG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICd0b1N0cmluZycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKHJhZGl4KSB7XG4gICAgICByYWRpeCA9IHJhZGl4IHx8IDEwO1xuICAgICAgaWYgKHJhZGl4IDwgMiB8fCAzNiA8IHJhZGl4KSB0aHJvdyBSYW5nZUVycm9yKCdyYWRpeCBvdXQgb2YgcmFuZ2U6ICcgKyByYWRpeCk7XG4gICAgICBpZiAodGhpcy5pc1plcm8oKSkgcmV0dXJuICcwJztcbiAgICAgIHZhciByZW07XG4gICAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpIHtcbiAgICAgICAgaWYgKHRoaXMuZXF1YWxzKEludGVnZXIuTUlOX1ZBTFVFKSkge1xuICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2hhbmdlIHRoZSBJbnRlZ2VyIHZhbHVlIGJlZm9yZSBpdCBjYW4gYmUgbmVnYXRlZCwgc28gd2UgcmVtb3ZlXG4gICAgICAgICAgLy8gdGhlIGJvdHRvbS1tb3N0IGRpZ2l0IGluIHRoaXMgYmFzZSBhbmQgdGhlbiByZWN1cnNlIHRvIGRvIHRoZSByZXN0LlxuICAgICAgICAgIHZhciByYWRpeEludGVnZXIgPSBJbnRlZ2VyLmZyb21OdW1iZXIocmFkaXgpO1xuICAgICAgICAgIHZhciBkaXYgPSB0aGlzLmRpdihyYWRpeEludGVnZXIpO1xuICAgICAgICAgIHJlbSA9IGRpdi5tdWx0aXBseShyYWRpeEludGVnZXIpLnN1YnRyYWN0KHRoaXMpO1xuICAgICAgICAgIHJldHVybiBkaXYudG9TdHJpbmcocmFkaXgpICsgcmVtLnRvSW50KCkudG9TdHJpbmcocmFkaXgpO1xuICAgICAgICB9IGVsc2UgcmV0dXJuICctJyArIHRoaXMubmVnYXRlKCkudG9TdHJpbmcocmFkaXgpO1xuICAgICAgfVxuXG4gICAgICAvLyBEbyBzZXZlcmFsICg2KSBkaWdpdHMgZWFjaCB0aW1lIHRocm91Z2ggdGhlIGxvb3AsIHNvIGFzIHRvXG4gICAgICAvLyBtaW5pbWl6ZSB0aGUgY2FsbHMgdG8gdGhlIHZlcnkgZXhwZW5zaXZlIGVtdWxhdGVkIGRpdi5cbiAgICAgIHZhciByYWRpeFRvUG93ZXIgPSBJbnRlZ2VyLmZyb21OdW1iZXIoTWF0aC5wb3cocmFkaXgsIDYpKTtcbiAgICAgIHJlbSA9IHRoaXM7XG4gICAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVtRGl2ID0gcmVtLmRpdihyYWRpeFRvUG93ZXIpLFxuICAgICAgICAgICAgaW50dmFsID0gcmVtLnN1YnRyYWN0KHJlbURpdi5tdWx0aXBseShyYWRpeFRvUG93ZXIpKS50b0ludCgpID4+PiAwLFxuICAgICAgICAgICAgZGlnaXRzID0gaW50dmFsLnRvU3RyaW5nKHJhZGl4KTtcbiAgICAgICAgcmVtID0gcmVtRGl2O1xuICAgICAgICBpZiAocmVtLmlzWmVybygpKSByZXR1cm4gZGlnaXRzICsgcmVzdWx0O2Vsc2Uge1xuICAgICAgICAgIHdoaWxlIChkaWdpdHMubGVuZ3RoIDwgNikge1xuICAgICAgICAgICAgZGlnaXRzID0gJzAnICsgZGlnaXRzO1xuICAgICAgICAgIH1yZXN1bHQgPSAnJyArIGRpZ2l0cyArIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGhpZ2ggMzIgYml0cyBhcyBhIHNpZ25lZCBpbnRlZ2VyLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFNpZ25lZCBoaWdoIGJpdHNcbiAgICAgKiBAZXhwb3NlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2dldEhpZ2hCaXRzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0SGlnaEJpdHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oaWdoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGxvdyAzMiBiaXRzIGFzIGEgc2lnbmVkIGludGVnZXIuXG4gICAgICogQHJldHVybnMge251bWJlcn0gU2lnbmVkIGxvdyBiaXRzXG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdnZXRMb3dCaXRzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TG93Qml0cygpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvdztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gcmVwcmVzZW50IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIEludGVnZXIuXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKiBAZXhwb3NlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2dldE51bUJpdHNBYnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXROdW1CaXRzQWJzKCkge1xuICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSByZXR1cm4gdGhpcy5lcXVhbHMoSW50ZWdlci5NSU5fVkFMVUUpID8gNjQgOiB0aGlzLm5lZ2F0ZSgpLmdldE51bUJpdHNBYnMoKTtcbiAgICAgIHZhciB2YWwgPSB0aGlzLmhpZ2ggIT0gMCA/IHRoaXMuaGlnaCA6IHRoaXMubG93O1xuICAgICAgZm9yICh2YXIgYml0ID0gMzE7IGJpdCA+IDA7IGJpdC0tKSB7XG4gICAgICAgIGlmICgodmFsICYgMSA8PCBiaXQpICE9IDApIGJyZWFrO1xuICAgICAgfXJldHVybiB0aGlzLmhpZ2ggIT0gMCA/IGJpdCArIDMzIDogYml0ICsgMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0cyBpZiB0aGlzIEludGVnZXIncyB2YWx1ZSBlcXVhbHMgemVyby5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKiBAZXhwb3NlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2lzWmVybycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzWmVybygpIHtcbiAgICAgIHJldHVybiB0aGlzLmhpZ2ggPT09IDAgJiYgdGhpcy5sb3cgPT09IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBJbnRlZ2VyJ3MgdmFsdWUgaXMgbmVnYXRpdmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpc05lZ2F0aXZlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNOZWdhdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhpZ2ggPCAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3RzIGlmIHRoaXMgSW50ZWdlcidzIHZhbHVlIGlzIHBvc2l0aXZlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnaXNQb3NpdGl2ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzUG9zaXRpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oaWdoID49IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBJbnRlZ2VyJ3MgdmFsdWUgaXMgb2RkLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnaXNPZGQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc09kZCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5sb3cgJiAxKSA9PT0gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0cyBpZiB0aGlzIEludGVnZXIncyB2YWx1ZSBpcyBldmVuLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnaXNFdmVuJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNFdmVuKCkge1xuICAgICAgcmV0dXJuICh0aGlzLmxvdyAmIDEpID09PSAwO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2VxdWFscycsXG5cblxuICAgIC8qKlxuICAgICAqIFRlc3RzIGlmIHRoaXMgSW50ZWdlcidzIHZhbHVlIGVxdWFscyB0aGUgc3BlY2lmaWVkJ3MuXG4gICAgICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gZXF1YWxzKG90aGVyKSB7XG4gICAgICBpZiAoIUludGVnZXIuaXNJbnRlZ2VyKG90aGVyKSkgb3RoZXIgPSBJbnRlZ2VyLmZyb21WYWx1ZShvdGhlcik7XG4gICAgICByZXR1cm4gdGhpcy5oaWdoID09PSBvdGhlci5oaWdoICYmIHRoaXMubG93ID09PSBvdGhlci5sb3c7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBJbnRlZ2VyJ3MgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBzcGVjaWZpZWQncy5cbiAgICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdub3RFcXVhbHMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBub3RFcXVhbHMob3RoZXIpIHtcbiAgICAgICF0aGlzLmVxdWFscyggLyogdmFsaWRhdGVzICovb3RoZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3RzIGlmIHRoaXMgSW50ZWdlcidzIHZhbHVlIGlzIGxlc3MgdGhhbiB0aGUgc3BlY2lmaWVkJ3MuXG4gICAgICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnbGVzc1RoYW4nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsZXNzVGhhbihvdGhlcikge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZSggLyogdmFsaWRhdGVzICovb3RoZXIpIDwgMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0cyBpZiB0aGlzIEludGVnZXIncyB2YWx1ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLlxuICAgICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKiBAZXhwb3NlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2xlc3NUaGFuT3JFcXVhbCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxlc3NUaGFuT3JFcXVhbChvdGhlcikge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZSggLyogdmFsaWRhdGVzICovb3RoZXIpIDw9IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBJbnRlZ2VyJ3MgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHRoZSBzcGVjaWZpZWQncy5cbiAgICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdncmVhdGVyVGhhbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdyZWF0ZXJUaGFuKG90aGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21wYXJlKCAvKiB2YWxpZGF0ZXMgKi9vdGhlcikgPiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3RzIGlmIHRoaXMgSW50ZWdlcidzIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0aGUgc3BlY2lmaWVkJ3MuXG4gICAgICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZ3JlYXRlclRoYW5PckVxdWFsJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ3JlYXRlclRoYW5PckVxdWFsKG90aGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21wYXJlKCAvKiB2YWxpZGF0ZXMgKi9vdGhlcikgPj0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlcyB0aGlzIEludGVnZXIncyB2YWx1ZSB3aXRoIHRoZSBzcGVjaWZpZWQncy5cbiAgICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXG4gICAgICogQHJldHVybnMge251bWJlcn0gMCBpZiB0aGV5IGFyZSB0aGUgc2FtZSwgMSBpZiB0aGUgdGhpcyBpcyBncmVhdGVyIGFuZCAtMVxuICAgICAqICBpZiB0aGUgZ2l2ZW4gb25lIGlzIGdyZWF0ZXJcbiAgICAgKiBAZXhwb3NlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2NvbXBhcmUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wYXJlKG90aGVyKSB7XG4gICAgICBpZiAoIUludGVnZXIuaXNJbnRlZ2VyKG90aGVyKSkgb3RoZXIgPSBJbnRlZ2VyLmZyb21WYWx1ZShvdGhlcik7XG4gICAgICBpZiAodGhpcy5lcXVhbHMob3RoZXIpKSByZXR1cm4gMDtcbiAgICAgIHZhciB0aGlzTmVnID0gdGhpcy5pc05lZ2F0aXZlKCksXG4gICAgICAgICAgb3RoZXJOZWcgPSBvdGhlci5pc05lZ2F0aXZlKCk7XG4gICAgICBpZiAodGhpc05lZyAmJiAhb3RoZXJOZWcpIHJldHVybiAtMTtcbiAgICAgIGlmICghdGhpc05lZyAmJiBvdGhlck5lZykgcmV0dXJuIDE7XG4gICAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBzaWduIGJpdHMgYXJlIHRoZSBzYW1lXG4gICAgICByZXR1cm4gdGhpcy5zdWJ0cmFjdChvdGhlcikuaXNOZWdhdGl2ZSgpID8gLTEgOiAxO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5lZ2F0ZXMgdGhpcyBJbnRlZ2VyJ3MgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyFJbnRlZ2VyfSBOZWdhdGVkIEludGVnZXJcbiAgICAgKiBAZXhwb3NlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ25lZ2F0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG5lZ2F0ZSgpIHtcbiAgICAgIGlmICh0aGlzLmVxdWFscyhJbnRlZ2VyLk1JTl9WQUxVRSkpIHJldHVybiBJbnRlZ2VyLk1JTl9WQUxVRTtcbiAgICAgIHJldHVybiB0aGlzLm5vdCgpLmFkZChJbnRlZ2VyLk9ORSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc3VtIG9mIHRoaXMgYW5kIHRoZSBzcGVjaWZpZWQgSW50ZWdlci5cbiAgICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IGFkZGVuZCBBZGRlbmRcbiAgICAgKiBAcmV0dXJucyB7IUludGVnZXJ9IFN1bVxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnYWRkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkKGFkZGVuZCkge1xuICAgICAgaWYgKCFJbnRlZ2VyLmlzSW50ZWdlcihhZGRlbmQpKSBhZGRlbmQgPSBJbnRlZ2VyLmZyb21WYWx1ZShhZGRlbmQpO1xuXG4gICAgICAvLyBEaXZpZGUgZWFjaCBudW1iZXIgaW50byA0IGNodW5rcyBvZiAxNiBiaXRzLCBhbmQgdGhlbiBzdW0gdGhlIGNodW5rcy5cblxuICAgICAgdmFyIGE0OCA9IHRoaXMuaGlnaCA+Pj4gMTY7XG4gICAgICB2YXIgYTMyID0gdGhpcy5oaWdoICYgMHhGRkZGO1xuICAgICAgdmFyIGExNiA9IHRoaXMubG93ID4+PiAxNjtcbiAgICAgIHZhciBhMDAgPSB0aGlzLmxvdyAmIDB4RkZGRjtcblxuICAgICAgdmFyIGI0OCA9IGFkZGVuZC5oaWdoID4+PiAxNjtcbiAgICAgIHZhciBiMzIgPSBhZGRlbmQuaGlnaCAmIDB4RkZGRjtcbiAgICAgIHZhciBiMTYgPSBhZGRlbmQubG93ID4+PiAxNjtcbiAgICAgIHZhciBiMDAgPSBhZGRlbmQubG93ICYgMHhGRkZGO1xuXG4gICAgICB2YXIgYzQ4ID0gMCxcbiAgICAgICAgICBjMzIgPSAwLFxuICAgICAgICAgIGMxNiA9IDAsXG4gICAgICAgICAgYzAwID0gMDtcbiAgICAgIGMwMCArPSBhMDAgKyBiMDA7XG4gICAgICBjMTYgKz0gYzAwID4+PiAxNjtcbiAgICAgIGMwMCAmPSAweEZGRkY7XG4gICAgICBjMTYgKz0gYTE2ICsgYjE2O1xuICAgICAgYzMyICs9IGMxNiA+Pj4gMTY7XG4gICAgICBjMTYgJj0gMHhGRkZGO1xuICAgICAgYzMyICs9IGEzMiArIGIzMjtcbiAgICAgIGM0OCArPSBjMzIgPj4+IDE2O1xuICAgICAgYzMyICY9IDB4RkZGRjtcbiAgICAgIGM0OCArPSBhNDggKyBiNDg7XG4gICAgICBjNDggJj0gMHhGRkZGO1xuICAgICAgcmV0dXJuIEludGVnZXIuZnJvbUJpdHMoYzE2IDw8IDE2IHwgYzAwLCBjNDggPDwgMTYgfCBjMzIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRpZmZlcmVuY2Ugb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBJbnRlZ2VyLlxuICAgICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gc3VidHJhaGVuZCBTdWJ0cmFoZW5kXG4gICAgICogQHJldHVybnMgeyFJbnRlZ2VyfSBEaWZmZXJlbmNlXG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzdWJ0cmFjdCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN1YnRyYWN0KHN1YnRyYWhlbmQpIHtcbiAgICAgIGlmICghSW50ZWdlci5pc0ludGVnZXIoc3VidHJhaGVuZCkpIHN1YnRyYWhlbmQgPSBJbnRlZ2VyLmZyb21WYWx1ZShzdWJ0cmFoZW5kKTtcbiAgICAgIHJldHVybiB0aGlzLmFkZChzdWJ0cmFoZW5kLm5lZ2F0ZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIHRoaXMgYW5kIHRoZSBzcGVjaWZpZWQgSW50ZWdlci5cbiAgICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IG11bHRpcGxpZXIgTXVsdGlwbGllclxuICAgICAqIEByZXR1cm5zIHshSW50ZWdlcn0gUHJvZHVjdFxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnbXVsdGlwbHknLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBtdWx0aXBseShtdWx0aXBsaWVyKSB7XG4gICAgICBpZiAodGhpcy5pc1plcm8oKSkgcmV0dXJuIEludGVnZXIuWkVSTztcbiAgICAgIGlmICghSW50ZWdlci5pc0ludGVnZXIobXVsdGlwbGllcikpIG11bHRpcGxpZXIgPSBJbnRlZ2VyLmZyb21WYWx1ZShtdWx0aXBsaWVyKTtcbiAgICAgIGlmIChtdWx0aXBsaWVyLmlzWmVybygpKSByZXR1cm4gSW50ZWdlci5aRVJPO1xuICAgICAgaWYgKHRoaXMuZXF1YWxzKEludGVnZXIuTUlOX1ZBTFVFKSkgcmV0dXJuIG11bHRpcGxpZXIuaXNPZGQoKSA/IEludGVnZXIuTUlOX1ZBTFVFIDogSW50ZWdlci5aRVJPO1xuICAgICAgaWYgKG11bHRpcGxpZXIuZXF1YWxzKEludGVnZXIuTUlOX1ZBTFVFKSkgcmV0dXJuIHRoaXMuaXNPZGQoKSA/IEludGVnZXIuTUlOX1ZBTFVFIDogSW50ZWdlci5aRVJPO1xuXG4gICAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpIHtcbiAgICAgICAgaWYgKG11bHRpcGxpZXIuaXNOZWdhdGl2ZSgpKSByZXR1cm4gdGhpcy5uZWdhdGUoKS5tdWx0aXBseShtdWx0aXBsaWVyLm5lZ2F0ZSgpKTtlbHNlIHJldHVybiB0aGlzLm5lZ2F0ZSgpLm11bHRpcGx5KG11bHRpcGxpZXIpLm5lZ2F0ZSgpO1xuICAgICAgfSBlbHNlIGlmIChtdWx0aXBsaWVyLmlzTmVnYXRpdmUoKSkgcmV0dXJuIHRoaXMubXVsdGlwbHkobXVsdGlwbGllci5uZWdhdGUoKSkubmVnYXRlKCk7XG5cbiAgICAgIC8vIElmIGJvdGggbG9uZ3MgYXJlIHNtYWxsLCB1c2UgZmxvYXQgbXVsdGlwbGljYXRpb25cbiAgICAgIGlmICh0aGlzLmxlc3NUaGFuKFRXT19QV1JfMjQpICYmIG11bHRpcGxpZXIubGVzc1RoYW4oVFdPX1BXUl8yNCkpIHJldHVybiBJbnRlZ2VyLmZyb21OdW1iZXIodGhpcy50b051bWJlcigpICogbXVsdGlwbGllci50b051bWJlcigpKTtcblxuICAgICAgLy8gRGl2aWRlIGVhY2ggbG9uZyBpbnRvIDQgY2h1bmtzIG9mIDE2IGJpdHMsIGFuZCB0aGVuIGFkZCB1cCA0eDQgcHJvZHVjdHMuXG4gICAgICAvLyBXZSBjYW4gc2tpcCBwcm9kdWN0cyB0aGF0IHdvdWxkIG92ZXJmbG93LlxuXG4gICAgICB2YXIgYTQ4ID0gdGhpcy5oaWdoID4+PiAxNjtcbiAgICAgIHZhciBhMzIgPSB0aGlzLmhpZ2ggJiAweEZGRkY7XG4gICAgICB2YXIgYTE2ID0gdGhpcy5sb3cgPj4+IDE2O1xuICAgICAgdmFyIGEwMCA9IHRoaXMubG93ICYgMHhGRkZGO1xuXG4gICAgICB2YXIgYjQ4ID0gbXVsdGlwbGllci5oaWdoID4+PiAxNjtcbiAgICAgIHZhciBiMzIgPSBtdWx0aXBsaWVyLmhpZ2ggJiAweEZGRkY7XG4gICAgICB2YXIgYjE2ID0gbXVsdGlwbGllci5sb3cgPj4+IDE2O1xuICAgICAgdmFyIGIwMCA9IG11bHRpcGxpZXIubG93ICYgMHhGRkZGO1xuXG4gICAgICB2YXIgYzQ4ID0gMCxcbiAgICAgICAgICBjMzIgPSAwLFxuICAgICAgICAgIGMxNiA9IDAsXG4gICAgICAgICAgYzAwID0gMDtcbiAgICAgIGMwMCArPSBhMDAgKiBiMDA7XG4gICAgICBjMTYgKz0gYzAwID4+PiAxNjtcbiAgICAgIGMwMCAmPSAweEZGRkY7XG4gICAgICBjMTYgKz0gYTE2ICogYjAwO1xuICAgICAgYzMyICs9IGMxNiA+Pj4gMTY7XG4gICAgICBjMTYgJj0gMHhGRkZGO1xuICAgICAgYzE2ICs9IGEwMCAqIGIxNjtcbiAgICAgIGMzMiArPSBjMTYgPj4+IDE2O1xuICAgICAgYzE2ICY9IDB4RkZGRjtcbiAgICAgIGMzMiArPSBhMzIgKiBiMDA7XG4gICAgICBjNDggKz0gYzMyID4+PiAxNjtcbiAgICAgIGMzMiAmPSAweEZGRkY7XG4gICAgICBjMzIgKz0gYTE2ICogYjE2O1xuICAgICAgYzQ4ICs9IGMzMiA+Pj4gMTY7XG4gICAgICBjMzIgJj0gMHhGRkZGO1xuICAgICAgYzMyICs9IGEwMCAqIGIzMjtcbiAgICAgIGM0OCArPSBjMzIgPj4+IDE2O1xuICAgICAgYzMyICY9IDB4RkZGRjtcbiAgICAgIGM0OCArPSBhNDggKiBiMDAgKyBhMzIgKiBiMTYgKyBhMTYgKiBiMzIgKyBhMDAgKiBiNDg7XG4gICAgICBjNDggJj0gMHhGRkZGO1xuICAgICAgcmV0dXJuIEludGVnZXIuZnJvbUJpdHMoYzE2IDw8IDE2IHwgYzAwLCBjNDggPDwgMTYgfCBjMzIpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2RpdicsXG5cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhpcyBJbnRlZ2VyIGRpdmlkZWQgYnkgdGhlIHNwZWNpZmllZC5cbiAgICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IGRpdmlzb3IgRGl2aXNvclxuICAgICAqIEByZXR1cm5zIHshSW50ZWdlcn0gUXVvdGllbnRcbiAgICAgKiBAZXhwb3NlXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRpdihkaXZpc29yKSB7XG4gICAgICBpZiAoIUludGVnZXIuaXNJbnRlZ2VyKGRpdmlzb3IpKSBkaXZpc29yID0gSW50ZWdlci5mcm9tVmFsdWUoZGl2aXNvcik7XG4gICAgICBpZiAoZGl2aXNvci5pc1plcm8oKSkgdGhyb3cgKDAsIF9lcnJvci5uZXdFcnJvcikoJ2RpdmlzaW9uIGJ5IHplcm8nKTtcbiAgICAgIGlmICh0aGlzLmlzWmVybygpKSByZXR1cm4gSW50ZWdlci5aRVJPO1xuICAgICAgdmFyIGFwcHJveCwgcmVtLCByZXM7XG4gICAgICBpZiAodGhpcy5lcXVhbHMoSW50ZWdlci5NSU5fVkFMVUUpKSB7XG4gICAgICAgIGlmIChkaXZpc29yLmVxdWFscyhJbnRlZ2VyLk9ORSkgfHwgZGl2aXNvci5lcXVhbHMoSW50ZWdlci5ORUdfT05FKSkgcmV0dXJuIEludGVnZXIuTUlOX1ZBTFVFOyAvLyByZWNhbGwgdGhhdCAtTUlOX1ZBTFVFID09IE1JTl9WQUxVRVxuICAgICAgICBlbHNlIGlmIChkaXZpc29yLmVxdWFscyhJbnRlZ2VyLk1JTl9WQUxVRSkpIHJldHVybiBJbnRlZ2VyLk9ORTtlbHNlIHtcbiAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgfG90aGVyfCA+PSAyLCBzbyB8dGhpcy9vdGhlcnwgPCB8TUlOX1ZBTFVFfC5cbiAgICAgICAgICAgIHZhciBoYWxmVGhpcyA9IHRoaXMuc2hpZnRSaWdodCgxKTtcbiAgICAgICAgICAgIGFwcHJveCA9IGhhbGZUaGlzLmRpdihkaXZpc29yKS5zaGlmdExlZnQoMSk7XG4gICAgICAgICAgICBpZiAoYXBwcm94LmVxdWFscyhJbnRlZ2VyLlpFUk8pKSB7XG4gICAgICAgICAgICAgIHJldHVybiBkaXZpc29yLmlzTmVnYXRpdmUoKSA/IEludGVnZXIuT05FIDogSW50ZWdlci5ORUdfT05FO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVtID0gdGhpcy5zdWJ0cmFjdChkaXZpc29yLm11bHRpcGx5KGFwcHJveCkpO1xuICAgICAgICAgICAgICByZXMgPSBhcHByb3guYWRkKHJlbS5kaXYoZGl2aXNvcikpO1xuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGl2aXNvci5lcXVhbHMoSW50ZWdlci5NSU5fVkFMVUUpKSByZXR1cm4gSW50ZWdlci5aRVJPO1xuICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSB7XG4gICAgICAgIGlmIChkaXZpc29yLmlzTmVnYXRpdmUoKSkgcmV0dXJuIHRoaXMubmVnYXRlKCkuZGl2KGRpdmlzb3IubmVnYXRlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5uZWdhdGUoKS5kaXYoZGl2aXNvcikubmVnYXRlKCk7XG4gICAgICB9IGVsc2UgaWYgKGRpdmlzb3IuaXNOZWdhdGl2ZSgpKSByZXR1cm4gdGhpcy5kaXYoZGl2aXNvci5uZWdhdGUoKSkubmVnYXRlKCk7XG5cbiAgICAgIC8vIFJlcGVhdCB0aGUgZm9sbG93aW5nIHVudGlsIHRoZSByZW1haW5kZXIgaXMgbGVzcyB0aGFuIG90aGVyOiAgZmluZCBhXG4gICAgICAvLyBmbG9hdGluZy1wb2ludCB0aGF0IGFwcHJveGltYXRlcyByZW1haW5kZXIgLyBvdGhlciAqZnJvbSBiZWxvdyosIGFkZCB0aGlzXG4gICAgICAvLyBpbnRvIHRoZSByZXN1bHQsIGFuZCBzdWJ0cmFjdCBpdCBmcm9tIHRoZSByZW1haW5kZXIuICBJdCBpcyBjcml0aWNhbCB0aGF0XG4gICAgICAvLyB0aGUgYXBwcm94aW1hdGUgdmFsdWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSByZWFsIHZhbHVlIHNvIHRoYXQgdGhlXG4gICAgICAvLyByZW1haW5kZXIgbmV2ZXIgYmVjb21lcyBuZWdhdGl2ZS5cbiAgICAgIHJlcyA9IEludGVnZXIuWkVSTztcbiAgICAgIHJlbSA9IHRoaXM7XG4gICAgICB3aGlsZSAocmVtLmdyZWF0ZXJUaGFuT3JFcXVhbChkaXZpc29yKSkge1xuICAgICAgICAvLyBBcHByb3hpbWF0ZSB0aGUgcmVzdWx0IG9mIGRpdmlzaW9uLiBUaGlzIG1heSBiZSBhIGxpdHRsZSBncmVhdGVyIG9yXG4gICAgICAgIC8vIHNtYWxsZXIgdGhhbiB0aGUgYWN0dWFsIHZhbHVlLlxuICAgICAgICBhcHByb3ggPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHJlbS50b051bWJlcigpIC8gZGl2aXNvci50b051bWJlcigpKSk7XG5cbiAgICAgICAgLy8gV2Ugd2lsbCB0d2VhayB0aGUgYXBwcm94aW1hdGUgcmVzdWx0IGJ5IGNoYW5naW5nIGl0IGluIHRoZSA0OC10aCBkaWdpdCBvclxuICAgICAgICAvLyB0aGUgc21hbGxlc3Qgbm9uLWZyYWN0aW9uYWwgZGlnaXQsIHdoaWNoZXZlciBpcyBsYXJnZXIuXG4gICAgICAgIHZhciBsb2cyID0gTWF0aC5jZWlsKE1hdGgubG9nKGFwcHJveCkgLyBNYXRoLkxOMiksXG4gICAgICAgICAgICBkZWx0YSA9IGxvZzIgPD0gNDggPyAxIDogTWF0aC5wb3coMiwgbG9nMiAtIDQ4KSxcblxuXG4gICAgICAgIC8vIERlY3JlYXNlIHRoZSBhcHByb3hpbWF0aW9uIHVudGlsIGl0IGlzIHNtYWxsZXIgdGhhbiB0aGUgcmVtYWluZGVyLiAgTm90ZVxuICAgICAgICAvLyB0aGF0IGlmIGl0IGlzIHRvbyBsYXJnZSwgdGhlIHByb2R1Y3Qgb3ZlcmZsb3dzIGFuZCBpcyBuZWdhdGl2ZS5cbiAgICAgICAgYXBwcm94UmVzID0gSW50ZWdlci5mcm9tTnVtYmVyKGFwcHJveCksXG4gICAgICAgICAgICBhcHByb3hSZW0gPSBhcHByb3hSZXMubXVsdGlwbHkoZGl2aXNvcik7XG4gICAgICAgIHdoaWxlIChhcHByb3hSZW0uaXNOZWdhdGl2ZSgpIHx8IGFwcHJveFJlbS5ncmVhdGVyVGhhbihyZW0pKSB7XG4gICAgICAgICAgYXBwcm94IC09IGRlbHRhO1xuICAgICAgICAgIGFwcHJveFJlcyA9IEludGVnZXIuZnJvbU51bWJlcihhcHByb3gpO1xuICAgICAgICAgIGFwcHJveFJlbSA9IGFwcHJveFJlcy5tdWx0aXBseShkaXZpc29yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIGtub3cgdGhlIGFuc3dlciBjYW4ndCBiZSB6ZXJvLi4uIGFuZCBhY3R1YWxseSwgemVybyB3b3VsZCBjYXVzZVxuICAgICAgICAvLyBpbmZpbml0ZSByZWN1cnNpb24gc2luY2Ugd2Ugd291bGQgbWFrZSBubyBwcm9ncmVzcy5cbiAgICAgICAgaWYgKGFwcHJveFJlcy5pc1plcm8oKSkgYXBwcm94UmVzID0gSW50ZWdlci5PTkU7XG5cbiAgICAgICAgcmVzID0gcmVzLmFkZChhcHByb3hSZXMpO1xuICAgICAgICByZW0gPSByZW0uc3VidHJhY3QoYXBwcm94UmVtKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGlzIEludGVnZXIgbW9kdWxvIHRoZSBzcGVjaWZpZWQuXG4gICAgICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfSBkaXZpc29yIERpdmlzb3JcbiAgICAgKiBAcmV0dXJucyB7IUludGVnZXJ9IFJlbWFpbmRlclxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnbW9kdWxvJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbW9kdWxvKGRpdmlzb3IpIHtcbiAgICAgIGlmICghSW50ZWdlci5pc0ludGVnZXIoZGl2aXNvcikpIGRpdmlzb3IgPSBJbnRlZ2VyLmZyb21WYWx1ZShkaXZpc29yKTtcbiAgICAgIHJldHVybiB0aGlzLnN1YnRyYWN0KHRoaXMuZGl2KGRpdmlzb3IpLm11bHRpcGx5KGRpdmlzb3IpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBiaXR3aXNlIE5PVCBvZiB0aGlzIEludGVnZXIuXG4gICAgICogQHJldHVybnMgeyFJbnRlZ2VyfVxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnbm90JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbm90KCkge1xuICAgICAgcmV0dXJuIEludGVnZXIuZnJvbUJpdHMofnRoaXMubG93LCB+dGhpcy5oaWdoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBiaXR3aXNlIEFORCBvZiB0aGlzIEludGVnZXIgYW5kIHRoZSBzcGVjaWZpZWQuXG4gICAgICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciBJbnRlZ2VyXG4gICAgICogQHJldHVybnMgeyFJbnRlZ2VyfVxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnYW5kJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYW5kKG90aGVyKSB7XG4gICAgICBpZiAoIUludGVnZXIuaXNJbnRlZ2VyKG90aGVyKSkgb3RoZXIgPSBJbnRlZ2VyLmZyb21WYWx1ZShvdGhlcik7XG4gICAgICByZXR1cm4gSW50ZWdlci5mcm9tQml0cyh0aGlzLmxvdyAmIG90aGVyLmxvdywgdGhpcy5oaWdoICYgb3RoZXIuaGlnaCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYml0d2lzZSBPUiBvZiB0aGlzIEludGVnZXIgYW5kIHRoZSBzcGVjaWZpZWQuXG4gICAgICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciBJbnRlZ2VyXG4gICAgICogQHJldHVybnMgeyFJbnRlZ2VyfVxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnb3InLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvcihvdGhlcikge1xuICAgICAgaWYgKCFJbnRlZ2VyLmlzSW50ZWdlcihvdGhlcikpIG90aGVyID0gSW50ZWdlci5mcm9tVmFsdWUob3RoZXIpO1xuICAgICAgcmV0dXJuIEludGVnZXIuZnJvbUJpdHModGhpcy5sb3cgfCBvdGhlci5sb3csIHRoaXMuaGlnaCB8IG90aGVyLmhpZ2gpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGJpdHdpc2UgWE9SIG9mIHRoaXMgSW50ZWdlciBhbmQgdGhlIGdpdmVuIG9uZS5cbiAgICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIEludGVnZXJcbiAgICAgKiBAcmV0dXJucyB7IUludGVnZXJ9XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICd4b3InLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB4b3Iob3RoZXIpIHtcbiAgICAgIGlmICghSW50ZWdlci5pc0ludGVnZXIob3RoZXIpKSBvdGhlciA9IEludGVnZXIuZnJvbVZhbHVlKG90aGVyKTtcbiAgICAgIHJldHVybiBJbnRlZ2VyLmZyb21CaXRzKHRoaXMubG93IF4gb3RoZXIubG93LCB0aGlzLmhpZ2ggXiBvdGhlci5oaWdoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoaXMgSW50ZWdlciB3aXRoIGJpdHMgc2hpZnRlZCB0byB0aGUgbGVmdCBieSB0aGUgZ2l2ZW4gYW1vdW50LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfCFJbnRlZ2VyfSBudW1CaXRzIE51bWJlciBvZiBiaXRzXG4gICAgICogQHJldHVybnMgeyFJbnRlZ2VyfSBTaGlmdGVkIEludGVnZXJcbiAgICAgKiBAZXhwb3NlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3NoaWZ0TGVmdCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNoaWZ0TGVmdChudW1CaXRzKSB7XG4gICAgICBpZiAoSW50ZWdlci5pc0ludGVnZXIobnVtQml0cykpIG51bUJpdHMgPSBudW1CaXRzLnRvSW50KCk7XG4gICAgICBpZiAoKG51bUJpdHMgJj0gNjMpID09PSAwKSByZXR1cm4gdGhpcztlbHNlIGlmIChudW1CaXRzIDwgMzIpIHJldHVybiBJbnRlZ2VyLmZyb21CaXRzKHRoaXMubG93IDw8IG51bUJpdHMsIHRoaXMuaGlnaCA8PCBudW1CaXRzIHwgdGhpcy5sb3cgPj4+IDMyIC0gbnVtQml0cyk7ZWxzZSByZXR1cm4gSW50ZWdlci5mcm9tQml0cygwLCB0aGlzLmxvdyA8PCBudW1CaXRzIC0gMzIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhpcyBJbnRlZ2VyIHdpdGggYml0cyBhcml0aG1ldGljYWxseSBzaGlmdGVkIHRvIHRoZSByaWdodCBieSB0aGUgZ2l2ZW4gYW1vdW50LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfCFJbnRlZ2VyfSBudW1CaXRzIE51bWJlciBvZiBiaXRzXG4gICAgICogQHJldHVybnMgeyFJbnRlZ2VyfSBTaGlmdGVkIEludGVnZXJcbiAgICAgKiBAZXhwb3NlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3NoaWZ0UmlnaHQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaGlmdFJpZ2h0KG51bUJpdHMpIHtcbiAgICAgIGlmIChJbnRlZ2VyLmlzSW50ZWdlcihudW1CaXRzKSkgbnVtQml0cyA9IG51bUJpdHMudG9JbnQoKTtcbiAgICAgIGlmICgobnVtQml0cyAmPSA2MykgPT09IDApIHJldHVybiB0aGlzO2Vsc2UgaWYgKG51bUJpdHMgPCAzMikgcmV0dXJuIEludGVnZXIuZnJvbUJpdHModGhpcy5sb3cgPj4+IG51bUJpdHMgfCB0aGlzLmhpZ2ggPDwgMzIgLSBudW1CaXRzLCB0aGlzLmhpZ2ggPj4gbnVtQml0cyk7ZWxzZSByZXR1cm4gSW50ZWdlci5mcm9tQml0cyh0aGlzLmhpZ2ggPj4gbnVtQml0cyAtIDMyLCB0aGlzLmhpZ2ggPj0gMCA/IDAgOiAtMSk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBJbnRlZ2VyO1xufSgpO1xuXG4vKipcbiAqIEFuIGluZGljYXRvciB1c2VkIHRvIHJlbGlhYmx5IGRldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYSBJbnRlZ2VyIG9yIG5vdC5cbiAqIEB0eXBlIHtib29sZWFufVxuICogQGNvbnN0XG4gKiBAZXhwb3NlXG4gKiBAcHJpdmF0ZVxuICovXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gNjQtYml0IEludGVnZXIgbGlicmFyeSwgb3JpZ2luYWxseSBmcm9tIExvbmcuanMgYnkgZGNvZGVJT1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rjb2RlSU8vTG9uZy5qc1xuLy8gTGljZW5zZSBBcGFjaGUgMlxuXG5JbnRlZ2VyLl9faXNJbnRlZ2VyX187XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRlZ2VyLnByb3RvdHlwZSwgXCJfX2lzSW50ZWdlcl9fXCIsIHtcbiAgdmFsdWU6IHRydWUsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59KTtcblxuLyoqXG4gKiBUZXN0cyBpZiB0aGUgc3BlY2lmaWVkIG9iamVjdCBpcyBhIEludGVnZXIuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gb2JqIE9iamVjdFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuaXNJbnRlZ2VyID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gKG9iaiAmJiBvYmpbXCJfX2lzSW50ZWdlcl9fXCJdKSA9PT0gdHJ1ZTtcbn07XG5cbi8qKlxuICogQSBjYWNoZSBvZiB0aGUgSW50ZWdlciByZXByZXNlbnRhdGlvbnMgb2Ygc21hbGwgaW50ZWdlciB2YWx1ZXMuXG4gKiBAdHlwZSB7IU9iamVjdH1cbiAqIEBpbm5lclxuICogQHByaXZhdGVcbiAqL1xudmFyIElOVF9DQUNIRSA9IHt9O1xuXG4vKipcbiAqIFJldHVybnMgYSBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gMzIgYml0IGludGVnZXIgdmFsdWUuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgMzIgYml0IGludGVnZXIgaW4gcXVlc3Rpb25cbiAqIEByZXR1cm5zIHshSW50ZWdlcn0gVGhlIGNvcnJlc3BvbmRpbmcgSW50ZWdlciB2YWx1ZVxuICogQGV4cG9zZVxuICovXG5JbnRlZ2VyLmZyb21JbnQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIG9iaiwgY2FjaGVkT2JqO1xuICB2YWx1ZSA9IHZhbHVlIHwgMDtcbiAgaWYgKC0xMjggPD0gdmFsdWUgJiYgdmFsdWUgPCAxMjgpIHtcbiAgICBjYWNoZWRPYmogPSBJTlRfQ0FDSEVbdmFsdWVdO1xuICAgIGlmIChjYWNoZWRPYmopIHJldHVybiBjYWNoZWRPYmo7XG4gIH1cbiAgb2JqID0gbmV3IEludGVnZXIodmFsdWUsIHZhbHVlIDwgMCA/IC0xIDogMCwgZmFsc2UpO1xuICBpZiAoLTEyOCA8PSB2YWx1ZSAmJiB2YWx1ZSA8IDEyOCkgSU5UX0NBQ0hFW3ZhbHVlXSA9IG9iajtcbiAgcmV0dXJuIG9iajtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIEludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiB2YWx1ZSwgcHJvdmlkZWQgdGhhdCBpdCBpcyBhIGZpbml0ZSBudW1iZXIuIE90aGVyd2lzZSwgemVybyBpcyByZXR1cm5lZC5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRoZSBudW1iZXIgaW4gcXVlc3Rpb25cbiAqIEByZXR1cm5zIHshSW50ZWdlcn0gVGhlIGNvcnJlc3BvbmRpbmcgSW50ZWdlciB2YWx1ZVxuICogQGV4cG9zZVxuICovXG5JbnRlZ2VyLmZyb21OdW1iZXIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCAhaXNGaW5pdGUodmFsdWUpKSByZXR1cm4gSW50ZWdlci5aRVJPO1xuICBpZiAodmFsdWUgPD0gLVRXT19QV1JfNjNfREJMKSByZXR1cm4gSW50ZWdlci5NSU5fVkFMVUU7XG4gIGlmICh2YWx1ZSArIDEgPj0gVFdPX1BXUl82M19EQkwpIHJldHVybiBJbnRlZ2VyLk1BWF9WQUxVRTtcbiAgaWYgKHZhbHVlIDwgMCkgcmV0dXJuIEludGVnZXIuZnJvbU51bWJlcigtdmFsdWUpLm5lZ2F0ZSgpO1xuICByZXR1cm4gbmV3IEludGVnZXIodmFsdWUgJSBUV09fUFdSXzMyX0RCTCB8IDAsIHZhbHVlIC8gVFdPX1BXUl8zMl9EQkwgfCAwKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIEludGVnZXIgcmVwcmVzZW50aW5nIHRoZSA2NCBiaXQgaW50ZWdlciB0aGF0IGNvbWVzIGJ5IGNvbmNhdGVuYXRpbmcgdGhlIGdpdmVuIGxvdyBhbmQgaGlnaCBiaXRzLiBFYWNoIGlzXG4gKiAgYXNzdW1lZCB0byB1c2UgMzIgYml0cy5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IGxvd0JpdHMgVGhlIGxvdyAzMiBiaXRzXG4gKiBAcGFyYW0ge251bWJlcn0gaGlnaEJpdHMgVGhlIGhpZ2ggMzIgYml0c1xuICogQHJldHVybnMgeyFJbnRlZ2VyfSBUaGUgY29ycmVzcG9uZGluZyBJbnRlZ2VyIHZhbHVlXG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuZnJvbUJpdHMgPSBmdW5jdGlvbiAobG93Qml0cywgaGlnaEJpdHMpIHtcbiAgcmV0dXJuIG5ldyBJbnRlZ2VyKGxvd0JpdHMsIGhpZ2hCaXRzKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIEludGVnZXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIHN0cmluZywgd3JpdHRlbiB1c2luZyB0aGUgc3BlY2lmaWVkIHJhZGl4LlxuICogQGFjY2VzcyBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIFRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBJbnRlZ2VyXG4gKiBAcGFyYW0ge251bWJlcj19IHJhZGl4IFRoZSByYWRpeCBpbiB3aGljaCB0aGUgdGV4dCBpcyB3cml0dGVuICgyLTM2KSwgZGVmYXVsdHMgdG8gMTBcbiAqIEByZXR1cm5zIHshSW50ZWdlcn0gVGhlIGNvcnJlc3BvbmRpbmcgSW50ZWdlciB2YWx1ZVxuICogQGV4cG9zZVxuICovXG5JbnRlZ2VyLmZyb21TdHJpbmcgPSBmdW5jdGlvbiAoc3RyLCByYWRpeCkge1xuICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkgdGhyb3cgKDAsIF9lcnJvci5uZXdFcnJvcikoJ251bWJlciBmb3JtYXQgZXJyb3I6IGVtcHR5IHN0cmluZycpO1xuICBpZiAoc3RyID09PSBcIk5hTlwiIHx8IHN0ciA9PT0gXCJJbmZpbml0eVwiIHx8IHN0ciA9PT0gXCIrSW5maW5pdHlcIiB8fCBzdHIgPT09IFwiLUluZmluaXR5XCIpIHJldHVybiBJbnRlZ2VyLlpFUk87XG4gIHJhZGl4ID0gcmFkaXggfHwgMTA7XG4gIGlmIChyYWRpeCA8IDIgfHwgMzYgPCByYWRpeCkgdGhyb3cgKDAsIF9lcnJvci5uZXdFcnJvcikoJ3JhZGl4IG91dCBvZiByYW5nZTogJyArIHJhZGl4KTtcblxuICB2YXIgcDtcbiAgaWYgKChwID0gc3RyLmluZGV4T2YoJy0nKSkgPiAwKSB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKSgnbnVtYmVyIGZvcm1hdCBlcnJvcjogaW50ZXJpb3IgXCItXCIgY2hhcmFjdGVyOiAnICsgc3RyKTtlbHNlIGlmIChwID09PSAwKSByZXR1cm4gSW50ZWdlci5mcm9tU3RyaW5nKHN0ci5zdWJzdHJpbmcoMSksIHJhZGl4KS5uZWdhdGUoKTtcblxuICAvLyBEbyBzZXZlcmFsICg4KSBkaWdpdHMgZWFjaCB0aW1lIHRocm91Z2ggdGhlIGxvb3AsIHNvIGFzIHRvXG4gIC8vIG1pbmltaXplIHRoZSBjYWxscyB0byB0aGUgdmVyeSBleHBlbnNpdmUgZW11bGF0ZWQgZGl2LlxuICB2YXIgcmFkaXhUb1Bvd2VyID0gSW50ZWdlci5mcm9tTnVtYmVyKE1hdGgucG93KHJhZGl4LCA4KSk7XG5cbiAgdmFyIHJlc3VsdCA9IEludGVnZXIuWkVSTztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpICs9IDgpIHtcbiAgICB2YXIgc2l6ZSA9IE1hdGgubWluKDgsIHN0ci5sZW5ndGggLSBpKTtcbiAgICB2YXIgdmFsdWUgPSBwYXJzZUludChzdHIuc3Vic3RyaW5nKGksIGkgKyBzaXplKSwgcmFkaXgpO1xuICAgIGlmIChzaXplIDwgOCkge1xuICAgICAgdmFyIHBvd2VyID0gSW50ZWdlci5mcm9tTnVtYmVyKE1hdGgucG93KHJhZGl4LCBzaXplKSk7XG4gICAgICByZXN1bHQgPSByZXN1bHQubXVsdGlwbHkocG93ZXIpLmFkZChJbnRlZ2VyLmZyb21OdW1iZXIodmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0Lm11bHRpcGx5KHJhZGl4VG9Qb3dlcik7XG4gICAgICByZXN1bHQgPSByZXN1bHQuYWRkKEludGVnZXIuZnJvbU51bWJlcih2YWx1ZSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgc3BlY2lmaWVkIHZhbHVlIHRvIGEgSW50ZWdlci5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfCF7bG93OiBudW1iZXIsIGhpZ2g6IG51bWJlcn19IHZhbCBWYWx1ZVxuICogQHJldHVybnMgeyFJbnRlZ2VyfVxuICogQGV4cG9zZVxuICovXG5JbnRlZ2VyLmZyb21WYWx1ZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgaWYgKHZhbCAvKiBpcyBjb21wYXRpYmxlICovIGluc3RhbmNlb2YgSW50ZWdlcikgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSByZXR1cm4gSW50ZWdlci5mcm9tTnVtYmVyKHZhbCk7XG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykgcmV0dXJuIEludGVnZXIuZnJvbVN0cmluZyh2YWwpO1xuICAvLyBUaHJvd3MgZm9yIG5vbi1vYmplY3RzLCBjb252ZXJ0cyBub24taW5zdGFuY2VvZiBJbnRlZ2VyOlxuICByZXR1cm4gbmV3IEludGVnZXIodmFsLmxvdywgdmFsLmhpZ2gpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgc3BlY2lmaWVkIHZhbHVlIHRvIGEgbnVtYmVyLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd8IXtsb3c6IG51bWJlciwgaGlnaDogbnVtYmVyfX0gdmFsIFZhbHVlXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICogQGV4cG9zZVxuICovXG5JbnRlZ2VyLnRvTnVtYmVyID0gZnVuY3Rpb24gKHZhbCkge1xuICByZXR1cm4gSW50ZWdlci5mcm9tVmFsdWUodmFsKS50b051bWJlcigpO1xufTtcblxuLyoqXG4qIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgdmFsdWUgdG8gYSBzdHJpbmcuXG4qIEBhY2Nlc3MgcHJpdmF0ZVxuKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd8IXtsb3c6IG51bWJlciwgaGlnaDogbnVtYmVyfX0gdmFsIFZhbHVlXG4qIEBwYXJhbSB7bnVtYmVyfSByYWRpeCBvcHRpb25hbCByYWRpeCBmb3Igc3RyaW5nIGNvbnZlcnNpb24sIGRlZmF1bHRzIHRvIDEwXG4qIEByZXR1cm5zIHtTdHJpbmd9XG4qIEBleHBvc2VcbiovXG5JbnRlZ2VyLnRvU3RyaW5nID0gZnVuY3Rpb24gKHZhbCwgcmFkaXgpIHtcbiAgcmV0dXJuIEludGVnZXIuZnJvbVZhbHVlKHZhbCkudG9TdHJpbmcocmFkaXgpO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGluIHRoZSBzYWZlIHJhbmdlIGluIG9yZGVyIHRvIGJlIGNvbnZlcnRlZCB0byBhIG5hdGl2ZSBudW1iZXJcbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfCF7bG93OiBudW1iZXIsIGhpZ2g6IG51bWJlcn19IHZhbCBWYWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IHJhZGl4IG9wdGlvbmFsIHJhZGl4IGZvciBzdHJpbmcgY29udmVyc2lvbiwgZGVmYXVsdHMgdG8gMTBcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQGV4cG9zZVxuICovXG5JbnRlZ2VyLmluU2FmZVJhbmdlID0gZnVuY3Rpb24gKHZhbCkge1xuICByZXR1cm4gSW50ZWdlci5mcm9tVmFsdWUodmFsKS5pblNhZmVSYW5nZSgpO1xufTtcblxuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGNvbnN0XG4gKiBAaW5uZXJcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBUV09fUFdSXzE2X0RCTCA9IDEgPDwgMTY7XG5cbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqIEBjb25zdFxuICogQGlubmVyXG4gKiBAcHJpdmF0ZVxuICovXG52YXIgVFdPX1BXUl8yNF9EQkwgPSAxIDw8IDI0O1xuXG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAY29uc3RcbiAqIEBpbm5lclxuICogQHByaXZhdGVcbiAqL1xudmFyIFRXT19QV1JfMzJfREJMID0gVFdPX1BXUl8xNl9EQkwgKiBUV09fUFdSXzE2X0RCTDtcblxuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGNvbnN0XG4gKiBAaW5uZXJcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBUV09fUFdSXzY0X0RCTCA9IFRXT19QV1JfMzJfREJMICogVFdPX1BXUl8zMl9EQkw7XG5cbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqIEBjb25zdFxuICogQGlubmVyXG4gKiBAcHJpdmF0ZVxuICovXG52YXIgVFdPX1BXUl82M19EQkwgPSBUV09fUFdSXzY0X0RCTCAvIDI7XG5cbi8qKlxuICogQHR5cGUgeyFJbnRlZ2VyfVxuICogQGNvbnN0XG4gKiBAaW5uZXJcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBUV09fUFdSXzI0ID0gSW50ZWdlci5mcm9tSW50KFRXT19QV1JfMjRfREJMKTtcblxuLyoqXG4gKiBTaWduZWQgemVyby5cbiAqIEB0eXBlIHshSW50ZWdlcn1cbiAqIEBleHBvc2VcbiAqL1xuSW50ZWdlci5aRVJPID0gSW50ZWdlci5mcm9tSW50KDApO1xuXG4vKipcbiAqIFNpZ25lZCBvbmUuXG4gKiBAdHlwZSB7IUludGVnZXJ9XG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuT05FID0gSW50ZWdlci5mcm9tSW50KDEpO1xuXG4vKipcbiAqIFNpZ25lZCBuZWdhdGl2ZSBvbmUuXG4gKiBAdHlwZSB7IUludGVnZXJ9XG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuTkVHX09ORSA9IEludGVnZXIuZnJvbUludCgtMSk7XG5cbi8qKlxuICogTWF4aW11bSBzaWduZWQgdmFsdWUuXG4gKiBAdHlwZSB7IUludGVnZXJ9XG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuTUFYX1ZBTFVFID0gSW50ZWdlci5mcm9tQml0cygweEZGRkZGRkZGIHwgMCwgMHg3RkZGRkZGRiB8IDAsIGZhbHNlKTtcblxuLyoqXG4gKiBNaW5pbXVtIHNpZ25lZCB2YWx1ZS5cbiAqIEB0eXBlIHshSW50ZWdlcn1cbiAqIEBleHBvc2VcbiAqL1xuSW50ZWdlci5NSU5fVkFMVUUgPSBJbnRlZ2VyLmZyb21CaXRzKDAsIDB4ODAwMDAwMDAgfCAwLCBmYWxzZSk7XG5cbi8qKlxuICogTWluaW11bSBzYWZlIHZhbHVlLlxuICogQHR5cGUgeyFJbnRlZ2VyfVxuICogQGV4cG9zZVxuICovXG5JbnRlZ2VyLk1JTl9TQUZFX1ZBTFVFID0gSW50ZWdlci5mcm9tQml0cygweDEgfCAwLCAweEZGRkZGRkZGRkZFMDAwMDAgfCAwKTtcblxuLyoqXG4qIE1heGltdW0gc2FmZSB2YWx1ZS5cbiogQHR5cGUgeyFJbnRlZ2VyfVxuKiBAZXhwb3NlXG4qL1xuSW50ZWdlci5NQVhfU0FGRV9WQUxVRSA9IEludGVnZXIuZnJvbUJpdHMoMHhGRkZGRkZGRiB8IDAsIDB4MUZGRkZGIHwgMCk7XG5cbi8qKlxuICogQ2FzdCB2YWx1ZSB0byBJbnRlZ2VyIHR5cGUuXG4gKiBAYWNjZXNzIHB1YmxpY1xuICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gdXNlLlxuICogQHJldHVybiB7SW50ZWdlcn0gLSBBbiBvYmplY3Qgb2YgdHlwZSBJbnRlZ2VyLlxuICovXG52YXIgaW50ID0gSW50ZWdlci5mcm9tVmFsdWU7XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB2YXJpYWJsZSBpcyBvZiBJbnRlZ2VyIHR5cGUuXG4gKiBAYWNjZXNzIHB1YmxpY1xuICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgLSBUaGUgdmFyaWFibGUgdG8gY2hlY2suXG4gKiBAcmV0dXJuIHtCb29sZWFufSAtIElzIGl0IG9mIHRoZSBJbnRlZ2VyIHR5cGU/XG4gKi9cbnZhciBpc0ludCA9IEludGVnZXIuaXNJbnRlZ2VyO1xuXG4vKipcbiAqIENoZWNrIGlmIGEgdmFyaWFibGUgY2FuIGJlIHNhZmVseSBjb252ZXJ0ZWQgdG8gYSBudW1iZXJcbiAqIEBhY2Nlc3MgcHVibGljXG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZSAtIFRoZSB2YXJpYWJsZSB0byBjaGVja1xuICogQHJldHVybiB7Qm9vbGVhbn0gLSB0cnVlIGlmIGl0IGlzIHNhZmUgdG8gY2FsbCB0b051bWJlciBvbiB2YXJpYWJsZSBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGluU2FmZVJhbmdlID0gSW50ZWdlci5pblNhZmVSYW5nZTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHZhcmlhYmxlIHRvIGEgbnVtYmVyXG4gKiBAYWNjZXNzIHB1YmxpY1xuICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgLSBUaGUgdmFyaWFibGUgdG8gY29udmVydFxuICogQHJldHVybiB7bnVtYmVyfSAtIHRoZSB2YXJpYWJsZSBhcyBhIG51bWJlclxuICovXG52YXIgdG9OdW1iZXIgPSBJbnRlZ2VyLnRvTnVtYmVyO1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBpbnRlZ2VyIHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gKiBAYWNjZXNzIHB1YmxpY1xuICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgLSBUaGUgdmFyaWFibGUgdG8gY29udmVydFxuICogQHBhcmFtIHtudW1iZXJ9IHJhZGl4IC0gcmFkaXggdG8gdXNlIGluIHN0cmluZyBjb252ZXJzaW9uLCBkZWZhdWx0cyB0byAxMFxuICogQHJldHVybiB7U3RyaW5nfSAtIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVnZXJcbiAqL1xudmFyIHRvU3RyaW5nID0gSW50ZWdlci50b1N0cmluZztcblxuZXhwb3J0cy5pbnQgPSBpbnQ7XG5leHBvcnRzLmlzSW50ID0gaXNJbnQ7XG5leHBvcnRzLmluU2FmZVJhbmdlID0gaW5TYWZlUmFuZ2U7XG5leHBvcnRzLnRvTnVtYmVyID0gdG9OdW1iZXI7XG5leHBvcnRzLnRvU3RyaW5nID0gdG9TdHJpbmc7XG5leHBvcnRzLmRlZmF1bHQgPSBJbnRlZ2VyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hbGxvYyA9IGV4cG9ydHMuTm9kZUJ1ZmZlciA9IGV4cG9ydHMuQ29tYmluZWRCdWZmZXIgPSBleHBvcnRzLlNsaWNlQnVmZmVyID0gZXhwb3J0cy5IZWFwQnVmZmVyID0gZXhwb3J0cy5CYXNlQnVmZmVyID0gdW5kZWZpbmVkO1xuXG52YXIgX2dldDIgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2dldFwiKTtcblxudmFyIF9nZXQzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0Mik7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mXCIpO1xuXG52YXIgX2dldFByb3RvdHlwZU9mMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dldFByb3RvdHlwZU9mKTtcblxudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVyblwiKTtcblxudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yKTtcblxudmFyIF9pbmhlcml0czIgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzXCIpO1xuXG52YXIgX2luaGVyaXRzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luaGVyaXRzMik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2syID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVja1wiKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc0NhbGxDaGVjazIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMiA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3NcIik7XG5cbnZhciBfY3JlYXRlQ2xhc3MzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlQ2xhc3MyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qKiBUaGlzIG1vZHVsZSBkZWZpbmVzIGEgY29tbW9uIEFQSSBmb3IgZGVhbGluZyB3aXRoIGJpbmFyeSBkYXRhIHRoYXRcbiAgKiB3b3JrcyBmb3IgYm90aCBicm93c2VycyAodmlhIEFycmF5QnVmZmVyL0RhdGFWaWV3KSBhbmQgZm9yIE5vZGVKU1xuICAqKHZpYSBCdWZmZXIgQVBJKS5cbiAgKi9cblxudmFyIF9ub2RlID0gcmVxdWlyZShcImJ1ZmZlclwiKTtcbi8qKlxuICAqIENvbW1vbiBiYXNlIHdpdGggZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgbW9zdCBidWZmZXIgbWV0aG9kcy5cbiAgKiBCdWZmZXJzIGFyZSBzdGF0ZWZ1bCAtIHRoZXkgdHJhY2sgYSBjdXJyZW50IFwicG9zaXRpb25cIiwgdGhpcyBoZWxwcyBncmVhdGx5XG4gICogd2hlbiByZWFkaW5nIGFuZCB3cml0aW5nIGZyb20gdGhlbSBpbmNyZW1lbnRhbGx5LiBZb3UgY2FuIGFsc28gaWdub3JlIHRoZVxuICAqIHN0YXRlZnVsIHJlYWQvd3JpdGUgbWV0aG9kcy5cbiAgKiByZWFkWFhYIGFuZCB3cml0ZVhYWC1tZXRob2RzIG1vdmUgdGhlIGlubmVyIHBvc2l0aW9uIG9mIHRoZSBidWZmZXIuXG4gICogcHV0WFhYIGFuZCBnZXRYWFgtbWV0aG9kcyBkbyBub3QuXG4gICogQGFjY2VzcyBwcml2YXRlXG4gICovXG5cbnZhciBCYXNlQnVmZmVyID0gZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQ3JlYXRlIGEgaW5zdGFuY2Ugd2l0aCB0aGUgaW5qZWN0ZWQgc2l6ZS5cbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gc2l6ZVxuICAgKi9cbiAgZnVuY3Rpb24gQmFzZUJ1ZmZlcihzaXplKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgQmFzZUJ1ZmZlcik7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gMDtcbiAgICB0aGlzLmxlbmd0aCA9IHNpemU7XG4gICAgLy8gQ2FsbGluZyB0aGVzZSBvdXQgLSB0aGlzIGlzIHRoZSByZXF1aXJlZCBcbiAgICAvLyBtZXRob2RzIGEgc3ViY2xhc3MgbmVlZHMgdG8gaW1wbGVtZW50XG4gICAgdmFyIGdldFVJbnQ4ID0gbnVsbDtcbiAgICB2YXIgZ2V0SW50OCA9IG51bGw7XG4gICAgdmFyIGdldEZsb2F0NjQgPSBudWxsO1xuICAgIHZhciBnZXRTbGljZSA9IG51bGw7XG4gICAgdmFyIHB1dEZsb2F0NjQgPSBudWxsO1xuICAgIHZhciBwdXRVSW50OCA9IG51bGw7XG4gICAgdmFyIHB1dEludDggPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwXG4gICAqL1xuXG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoQmFzZUJ1ZmZlciwgW3tcbiAgICBrZXk6IFwiZ2V0SW50MTZcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0SW50MTYocCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SW50OChwKSA8PCA4IHwgdGhpcy5nZXRVSW50OChwICsgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHBcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImdldFVJbnQxNlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRVSW50MTYocCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VUludDgocCkgPDwgOCB8IHRoaXMuZ2V0VUludDgocCArIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBwXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJnZXRJbnQzMlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbnQzMihwKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJbnQ4KHApIDw8IDI0IHwgdGhpcy5nZXRVSW50OChwICsgMSkgPDwgMTYgfCB0aGlzLmdldFVJbnQ4KHAgKyAyKSA8PCA4IHwgdGhpcy5nZXRVSW50OChwICsgMyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHBcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImdldFVJbnQzMlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRVSW50MzIocCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VUludDgocCkgPDwgMjQgfCB0aGlzLmdldFVJbnQ4KHAgKyAxKSA8PCAxNiB8IHRoaXMuZ2V0VUludDgocCArIDIpIDw8IDggfCB0aGlzLmdldFVJbnQ4KHAgKyAzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0SW50NjRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0SW50NjQocCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SW50OChwKSA8PCA1NiB8IHRoaXMuZ2V0VUludDgocCArIDEpIDw8IDQ4IHwgdGhpcy5nZXRVSW50OChwICsgMikgPDwgNDAgfCB0aGlzLmdldFVJbnQ4KHAgKyAzKSA8PCAzMiB8IHRoaXMuZ2V0VUludDgocCArIDQpIDw8IDI0IHwgdGhpcy5nZXRVSW50OChwICsgNSkgPDwgMTYgfCB0aGlzLmdldFVJbnQ4KHAgKyA2KSA8PCA4IHwgdGhpcy5nZXRVSW50OChwICsgNyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgc2xpY2Ugb2YgdGhpcyBidWZmZXIuIFRoaXMgbWV0aG9kIGRvZXMgbm90IGNvcHkgYW55IGRhdGEsXG4gICAgICogYnV0IHNpbXBseSBwcm92aWRlcyBhIHNsaWNlIHZpZXcgb2YgdGhpcyBidWZmZXJcbiAgICAgKiBAcGFyYW0gc3RhcnRcbiAgICAgKiBAcGFyYW0gbGVuZ3RoXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJnZXRTbGljZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTbGljZShzdGFydCwgbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3IFNsaWNlQnVmZmVyKHN0YXJ0LCBsZW5ndGgsIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBwXG4gICAgICogQHBhcmFtIHZhbFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwicHV0SW50MTZcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHV0SW50MTYocCwgdmFsKSB7XG4gICAgICB0aGlzLnB1dEludDgocCwgdmFsID4+IDgpO1xuICAgICAgdGhpcy5wdXRVSW50OChwICsgMSwgdmFsICYgMHhGRik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHBcbiAgICAgKiBAcGFyYW0gdmFsXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJwdXRVSW50MTZcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHV0VUludDE2KHAsIHZhbCkge1xuICAgICAgdGhpcy5wdXRVSW50OChwLCB2YWwgPj4gOCAmIDB4RkYpO1xuICAgICAgdGhpcy5wdXRVSW50OChwICsgMSwgdmFsICYgMHhGRik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHBcbiAgICAgKiBAcGFyYW0gdmFsXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJwdXRJbnQzMlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXRJbnQzMihwLCB2YWwpIHtcbiAgICAgIHRoaXMucHV0SW50OChwLCB2YWwgPj4gMjQpO1xuICAgICAgdGhpcy5wdXRVSW50OChwICsgMSwgdmFsID4+IDE2ICYgMHhGRik7XG4gICAgICB0aGlzLnB1dFVJbnQ4KHAgKyAyLCB2YWwgPj4gOCAmIDB4RkYpO1xuICAgICAgdGhpcy5wdXRVSW50OChwICsgMywgdmFsICYgMHhGRik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHBcbiAgICAgKiBAcGFyYW0gdmFsXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJwdXRVSW50MzJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHV0VUludDMyKHAsIHZhbCkge1xuICAgICAgdGhpcy5wdXRVSW50OChwLCB2YWwgPj4gMjQgJiAweEZGKTtcbiAgICAgIHRoaXMucHV0VUludDgocCArIDEsIHZhbCA+PiAxNiAmIDB4RkYpO1xuICAgICAgdGhpcy5wdXRVSW50OChwICsgMiwgdmFsID4+IDggJiAweEZGKTtcbiAgICAgIHRoaXMucHV0VUludDgocCArIDMsIHZhbCAmIDB4RkYpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBwXG4gICAgICogQHBhcmFtIHZhbFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwicHV0SW50NjRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHV0SW50NjQocCwgdmFsKSB7XG4gICAgICB0aGlzLnB1dEludDgocCwgdmFsID4+IDQ4KTtcbiAgICAgIHRoaXMucHV0VUludDgocCArIDEsIHZhbCA+PiA0MiAmIDB4RkYpO1xuICAgICAgdGhpcy5wdXRVSW50OChwICsgMiwgdmFsID4+IDM2ICYgMHhGRik7XG4gICAgICB0aGlzLnB1dFVJbnQ4KHAgKyAzLCB2YWwgPj4gMzAgJiAweEZGKTtcbiAgICAgIHRoaXMucHV0VUludDgocCArIDQsIHZhbCA+PiAyNCAmIDB4RkYpO1xuICAgICAgdGhpcy5wdXRVSW50OChwICsgNSwgdmFsID4+IDE2ICYgMHhGRik7XG4gICAgICB0aGlzLnB1dFVJbnQ4KHAgKyA2LCB2YWwgPj4gOCAmIDB4RkYpO1xuICAgICAgdGhpcy5wdXRVSW50OChwICsgNywgdmFsICYgMHhGRik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHBvc2l0aW9uXG4gICAgICogQHBhcmFtIG90aGVyXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJwdXRCeXRlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXRCeXRlcyhwb3NpdGlvbiwgb3RoZXIpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBlbmQgPSBvdGhlci5yZW1haW5pbmcoKTsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgIHRoaXMucHV0VUludDgocG9zaXRpb24gKyBpLCBvdGhlci5yZWFkVUludDgoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhZCBmcm9tIHN0YXRlIHBvc2l0aW9uLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwicmVhZFVJbnQ4XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlYWRVSW50OCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFVJbnQ4KHRoaXMuX3VwZGF0ZVBvcygxKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhZCBmcm9tIHN0YXRlIHBvc2l0aW9uLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwicmVhZEludDhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVhZEludDgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJbnQ4KHRoaXMuX3VwZGF0ZVBvcygxKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhZCBmcm9tIHN0YXRlIHBvc2l0aW9uLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwicmVhZFVJbnQxNlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWFkVUludDE2KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VUludDE2KHRoaXMuX3VwZGF0ZVBvcygyKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhZCBmcm9tIHN0YXRlIHBvc2l0aW9uLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwicmVhZFVJbnQzMlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWFkVUludDMyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VUludDMyKHRoaXMuX3VwZGF0ZVBvcyg0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhZCBmcm9tIHN0YXRlIHBvc2l0aW9uLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwicmVhZEludDE2XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlYWRJbnQxNigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEludDE2KHRoaXMuX3VwZGF0ZVBvcygyKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhZCBmcm9tIHN0YXRlIHBvc2l0aW9uLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwicmVhZEludDMyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlYWRJbnQzMigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEludDMyKHRoaXMuX3VwZGF0ZVBvcyg0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhZCBmcm9tIHN0YXRlIHBvc2l0aW9uLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwicmVhZEludDY0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlYWRJbnQ2NCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEludDMyKHRoaXMuX3VwZGF0ZVBvcyg4KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhZCBmcm9tIHN0YXRlIHBvc2l0aW9uLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwicmVhZEZsb2F0NjRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVhZEZsb2F0NjQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRGbG9hdDY0KHRoaXMuX3VwZGF0ZVBvcyg4KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV3JpdGUgdG8gc3RhdGUgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHZhbFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwid3JpdGVVSW50OFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3cml0ZVVJbnQ4KHZhbCkge1xuICAgICAgdGhpcy5wdXRVSW50OCh0aGlzLl91cGRhdGVQb3MoMSksIHZhbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV3JpdGUgdG8gc3RhdGUgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHZhbFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwid3JpdGVJbnQ4XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHdyaXRlSW50OCh2YWwpIHtcbiAgICAgIHRoaXMucHV0SW50OCh0aGlzLl91cGRhdGVQb3MoMSksIHZhbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV3JpdGUgdG8gc3RhdGUgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHZhbFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwid3JpdGVJbnQxNlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3cml0ZUludDE2KHZhbCkge1xuICAgICAgdGhpcy5wdXRJbnQxNih0aGlzLl91cGRhdGVQb3MoMiksIHZhbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV3JpdGUgdG8gc3RhdGUgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHZhbFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwid3JpdGVJbnQzMlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3cml0ZUludDMyKHZhbCkge1xuICAgICAgdGhpcy5wdXRJbnQzMih0aGlzLl91cGRhdGVQb3MoNCksIHZhbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV3JpdGUgdG8gc3RhdGUgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHZhbFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwid3JpdGVVSW50MzJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gd3JpdGVVSW50MzIodmFsKSB7XG4gICAgICB0aGlzLnB1dFVJbnQzMih0aGlzLl91cGRhdGVQb3MoNCksIHZhbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV3JpdGUgdG8gc3RhdGUgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHZhbFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwid3JpdGVJbnQ2NFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3cml0ZUludDY0KHZhbCkge1xuICAgICAgdGhpcy5wdXRJbnQ2NCh0aGlzLl91cGRhdGVQb3MoOCksIHZhbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV3JpdGUgdG8gc3RhdGUgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHZhbFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwid3JpdGVGbG9hdDY0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHdyaXRlRmxvYXQ2NCh2YWwpIHtcbiAgICAgIHRoaXMucHV0RmxvYXQ2NCh0aGlzLl91cGRhdGVQb3MoOCksIHZhbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV3JpdGUgdG8gc3RhdGUgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHZhbFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwid3JpdGVCeXRlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3cml0ZUJ5dGVzKHZhbCkge1xuICAgICAgdGhpcy5wdXRCeXRlcyh0aGlzLl91cGRhdGVQb3ModmFsLnJlbWFpbmluZygpKSwgdmFsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSBzbGljZSBvZiB0aGlzIGJ1ZmZlci4gVGhpcyBtZXRob2QgZG9lcyBub3QgY29weSBhbnkgZGF0YSxcbiAgICAgKiBidXQgc2ltcGx5IHByb3ZpZGVzIGEgc2xpY2UgdmlldyBvZiB0aGlzIGJ1ZmZlclxuICAgICAqIEBwYXJhbSBsZW5ndGhcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcInJlYWRTbGljZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWFkU2xpY2UobGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTbGljZSh0aGlzLl91cGRhdGVQb3MobGVuZ3RoKSwgbGVuZ3RoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3VwZGF0ZVBvc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfdXBkYXRlUG9zKGxlbmd0aCkge1xuICAgICAgdmFyIHAgPSB0aGlzLnBvc2l0aW9uO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgcmVtYW5pbmdcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcInJlbWFpbmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW1haW5pbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sZW5ndGggLSB0aGlzLnBvc2l0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhcyByZW1hbmluZ1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzUmVtYWluaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhc1JlbWFpbmluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbWFpbmluZygpID4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldCBwb3NpdGlvbiBzdGF0ZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwicmVzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICB0aGlzLnBvc2l0aW9uID0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGJ1ZmZlciBhbmQgaXQncyBzdGF0ZS5cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IEJ1ZmZlciBhcyBhIHN0cmluZ1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwidG9TdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lICsgXCIoIHBvc2l0aW9uPVwiICsgdGhpcy5wb3NpdGlvbiArIFwiIClcXG4gIFwiICsgdGhpcy50b0hleCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYnVmZmVyLlxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gQnVmZmVyIGFzIGEgc3RyaW5nXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJ0b0hleFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b0hleCgpIHtcbiAgICAgIC8vIFRPRE8gc29tZXRoaW5nIGxpa2UgU3RyaW5nQnVpbGRlcj9cbiAgICAgIHZhciBvdXQgPSBcIlwiO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBoZXhCeXRlID0gdGhpcy5nZXRVSW50OChpKS50b1N0cmluZygxNik7XG4gICAgICAgIGlmIChoZXhCeXRlLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgaGV4Qnl0ZSA9IFwiMFwiICsgaGV4Qnl0ZTtcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gaGV4Qnl0ZSArIFwiIFwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIEJhc2VCdWZmZXI7XG59KCk7XG5cbi8qKlxuICogQmFzaWMgYnVmZmVyIGltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIHdvcmsgaW4gbW9zdCBhbnkgbW9kZXJuIEpTIGVudi5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovXG5cblxudmFyIEhlYXBCdWZmZXIgPSBmdW5jdGlvbiAoX0Jhc2VCdWZmZXIpIHtcbiAgKDAsIF9pbmhlcml0czMuZGVmYXVsdCkoSGVhcEJ1ZmZlciwgX0Jhc2VCdWZmZXIpO1xuXG4gIGZ1bmN0aW9uIEhlYXBCdWZmZXIoYXJnKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgSGVhcEJ1ZmZlcik7XG5cbiAgICB2YXIgYnVmZmVyID0gYXJnIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgPyBhcmcgOiBuZXcgQXJyYXlCdWZmZXIoYXJnKTtcblxuICAgIHZhciBfdGhpcyA9ICgwLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMuZGVmYXVsdCkodGhpcywgKEhlYXBCdWZmZXIuX19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKEhlYXBCdWZmZXIpKS5jYWxsKHRoaXMsIGJ1ZmZlci5ieXRlTGVuZ3RoKSk7XG5cbiAgICBfdGhpcy5fYnVmZmVyID0gYnVmZmVyO1xuICAgIF90aGlzLl92aWV3ID0gbmV3IERhdGFWaWV3KF90aGlzLl9idWZmZXIpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKEhlYXBCdWZmZXIsIFt7XG4gICAga2V5OiBcInB1dFVJbnQ4XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHB1dFVJbnQ4KHBvc2l0aW9uLCB2YWwpIHtcbiAgICAgIHRoaXMuX3ZpZXcuc2V0VWludDgocG9zaXRpb24sIHZhbCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFVJbnQ4XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFVJbnQ4KHBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdmlldy5nZXRVaW50OChwb3NpdGlvbik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInB1dEludDhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHV0SW50OChwb3NpdGlvbiwgdmFsKSB7XG4gICAgICB0aGlzLl92aWV3LnNldEludDgocG9zaXRpb24sIHZhbCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEludDhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0SW50OChwb3NpdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuX3ZpZXcuZ2V0SW50OChwb3NpdGlvbik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEZsb2F0NjRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RmxvYXQ2NChwb3NpdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuX3ZpZXcuZ2V0RmxvYXQ2NChwb3NpdGlvbik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInB1dEZsb2F0NjRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHV0RmxvYXQ2NChwb3NpdGlvbiwgdmFsKSB7XG4gICAgICB0aGlzLl92aWV3LnNldEZsb2F0NjQocG9zaXRpb24sIHZhbCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFNsaWNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFNsaWNlKHN0YXJ0LCBsZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLl9idWZmZXIuc2xpY2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIZWFwQnVmZmVyKHRoaXMuX2J1ZmZlci5zbGljZShzdGFydCwgc3RhcnQgKyBsZW5ndGgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNvbWUgcGxhdGZvcm1zIChlZy4gcGhhbnRvbWpzKSBkb24ndCBzdXBwb3J0IHNsaWNlLCBzbyBmYWxsIGJhY2sgdG8gYSBjb3B5XG4gICAgICAgIC8vIFdlIGRvIHRoaXMgcmF0aGVyIHRoYW4gcmV0dXJuIGEgU2xpY2VCdWZmZXIsIGJlY2F1c2Ugc2xpY2VCdWZmZXIgY2Fubm90XG4gICAgICAgIC8vIGJlIHBhc3NlZCB0byBuYXRpdmUgbmV0d29yayB3cml0ZSBvcHMgZXRjIC0gd2UgbmVlZCBBcnJheUJ1ZmZlciBmb3IgdGhhdFxuICAgICAgICB2YXIgY29weSA9IG5ldyBIZWFwQnVmZmVyKGxlbmd0aCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb3B5LnB1dFVJbnQ4KGksIHRoaXMuZ2V0VUludDgoaSArIHN0YXJ0KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmljIHRvIEhlYXBCdWZmZXIsIHRoaXMgZ2V0cyBhIERhdGFWaWV3IGZyb20gdGhlXG4gICAgICogY3VycmVudCBwb3NpdGlvbiBhbmQgb2YgdGhlIHNwZWNpZmllZCBsZW5ndGguIFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwicmVhZFZpZXdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVhZFZpZXcobGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGFWaWV3KHRoaXMuX2J1ZmZlciwgdGhpcy5fdXBkYXRlUG9zKGxlbmd0aCksIGxlbmd0aCk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBIZWFwQnVmZmVyO1xufShCYXNlQnVmZmVyKTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgdmlldyBhcyBzbGljZSBvZiBhbm90aGVyIGJ1ZmZlci5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovXG5cblxudmFyIFNsaWNlQnVmZmVyID0gZnVuY3Rpb24gKF9CYXNlQnVmZmVyMikge1xuICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShTbGljZUJ1ZmZlciwgX0Jhc2VCdWZmZXIyKTtcblxuICBmdW5jdGlvbiBTbGljZUJ1ZmZlcihzdGFydCwgbGVuZ3RoLCBpbm5lcikge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIFNsaWNlQnVmZmVyKTtcblxuICAgIHZhciBfdGhpczIgPSAoMCwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zLmRlZmF1bHQpKHRoaXMsIChTbGljZUJ1ZmZlci5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoU2xpY2VCdWZmZXIpKS5jYWxsKHRoaXMsIGxlbmd0aCkpO1xuXG4gICAgX3RoaXMyLl9zdGFydCA9IHN0YXJ0O1xuICAgIF90aGlzMi5faW5uZXIgPSBpbm5lcjtcbiAgICByZXR1cm4gX3RoaXMyO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoU2xpY2VCdWZmZXIsIFt7XG4gICAga2V5OiBcInB1dFVJbnQ4XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHB1dFVJbnQ4KHBvc2l0aW9uLCB2YWwpIHtcbiAgICAgIHRoaXMuX2lubmVyLnB1dFVJbnQ4KHRoaXMuX3N0YXJ0ICsgcG9zaXRpb24sIHZhbCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFVJbnQ4XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFVJbnQ4KHBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5uZXIuZ2V0VUludDgodGhpcy5fc3RhcnQgKyBwb3NpdGlvbik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInB1dEludDhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHV0SW50OChwb3NpdGlvbiwgdmFsKSB7XG4gICAgICB0aGlzLl9pbm5lci5wdXRJbnQ4KHRoaXMuX3N0YXJ0ICsgcG9zaXRpb24sIHZhbCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInB1dEZsb2F0NjRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHV0RmxvYXQ2NChwb3NpdGlvbiwgdmFsKSB7XG4gICAgICB0aGlzLl9pbm5lci5wdXRGbG9hdDY0KHRoaXMuX3N0YXJ0ICsgcG9zaXRpb24sIHZhbCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEludDhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0SW50OChwb3NpdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuX2lubmVyLmdldEludDgodGhpcy5fc3RhcnQgKyBwb3NpdGlvbik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEZsb2F0NjRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RmxvYXQ2NChwb3NpdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuX2lubmVyLmdldEZsb2F0NjQodGhpcy5fc3RhcnQgKyBwb3NpdGlvbik7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBTbGljZUJ1ZmZlcjtcbn0oQmFzZUJ1ZmZlcik7XG5cbi8qKlxuICogQnVmZmVyIHRoYXQgY29tYmluZXMgbXVsdGlwbGUgYnVmZmVycywgZXhwb3NpbmcgdGhlbSBhcyBvbmUgc2luZ2xlIGJ1ZmZlci5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovXG5cblxudmFyIENvbWJpbmVkQnVmZmVyID0gZnVuY3Rpb24gKF9CYXNlQnVmZmVyMykge1xuICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShDb21iaW5lZEJ1ZmZlciwgX0Jhc2VCdWZmZXIzKTtcblxuICBmdW5jdGlvbiBDb21iaW5lZEJ1ZmZlcihidWZmZXJzKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgQ29tYmluZWRCdWZmZXIpO1xuXG4gICAgdmFyIGxlbmd0aCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZW5ndGggKz0gYnVmZmVyc1tpXS5sZW5ndGg7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzMyA9ICgwLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMuZGVmYXVsdCkodGhpcywgKENvbWJpbmVkQnVmZmVyLl9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShDb21iaW5lZEJ1ZmZlcikpLmNhbGwodGhpcywgbGVuZ3RoKSk7XG5cbiAgICBfdGhpczMuX2J1ZmZlcnMgPSBidWZmZXJzO1xuICAgIHJldHVybiBfdGhpczM7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShDb21iaW5lZEJ1ZmZlciwgW3tcbiAgICBrZXk6IFwiZ2V0VUludDhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VUludDgocG9zaXRpb24pIHtcbiAgICAgIC8vIFN1cmVseSB0aGVyZSdzIGEgZmFzdGVyIHdheSB0byBkbyB0aGlzLi4gc29tZSBzb3J0IG9mIGxvb2t1cCB0YWJsZSB0aGluZz9cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5fYnVmZmVyc1tpXTtcbiAgICAgICAgLy8gSWYgdGhlIHBvc2l0aW9uIGlzIG5vdCBpbiB0aGUgY3VycmVudCBidWZmZXIsIHNraXAgdGhlIGN1cnJlbnQgYnVmZmVyXG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgcG9zaXRpb24gLT0gYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYnVmZmVyLmdldFVJbnQ4KHBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRJbnQ4XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEludDgocG9zaXRpb24pIHtcbiAgICAgIC8vIFN1cmVseSB0aGVyZSdzIGEgZmFzdGVyIHdheSB0byBkbyB0aGlzLi4gc29tZSBzb3J0IG9mIGxvb2t1cCB0YWJsZSB0aGluZz9cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5fYnVmZmVyc1tpXTtcbiAgICAgICAgLy8gSWYgdGhlIHBvc2l0aW9uIGlzIG5vdCBpbiB0aGUgY3VycmVudCBidWZmZXIsIHNraXAgdGhlIGN1cnJlbnQgYnVmZmVyXG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgcG9zaXRpb24gLT0gYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYnVmZmVyLmdldEludDgocG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEZsb2F0NjRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RmxvYXQ2NChwb3NpdGlvbikge1xuICAgICAgLy8gQXQgc29tZSBwb2ludCwgYSBtb3JlIGVmZmljaWVudCBpbXBsLiBGb3Igbm93LCB3ZSBjb3B5IHRoZSA4IGJ5dGVzXG4gICAgICAvLyB3ZSB3YW50IHRvIHJlYWQgYW5kIGRlcGVuZCBvbiB0aGUgcGxhdGZvcm0gaW1wbCBvZiBJRUVFIDc1NC5cbiAgICAgIHZhciBiID0gYWxsb2MoOCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuICAgICAgICBiLnB1dFVJbnQ4KGksIHRoaXMuZ2V0VUludDgocG9zaXRpb24gKyBpKSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGIuZ2V0RmxvYXQ2NCgwKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIENvbWJpbmVkQnVmZmVyO1xufShCYXNlQnVmZmVyKTtcblxuLyoqXG4gKiBCdWZmZXIgdXNlZCBpbiBhIE5vZGUuanMgZW52aXJvbm1lbnRcbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovXG5cblxudmFyIE5vZGVCdWZmZXIgPSBmdW5jdGlvbiAoX0Jhc2VCdWZmZXI0KSB7XG4gICgwLCBfaW5oZXJpdHMzLmRlZmF1bHQpKE5vZGVCdWZmZXIsIF9CYXNlQnVmZmVyNCk7XG5cbiAgZnVuY3Rpb24gTm9kZUJ1ZmZlcihhcmcpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBOb2RlQnVmZmVyKTtcblxuICAgIHZhciBidWZmZXIgPSBhcmcgaW5zdGFuY2VvZiBfbm9kZS5CdWZmZXIgPyBhcmcgOiBuZXcgX25vZGUuQnVmZmVyKGFyZyk7XG5cbiAgICB2YXIgX3RoaXM0ID0gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoTm9kZUJ1ZmZlci5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoTm9kZUJ1ZmZlcikpLmNhbGwodGhpcywgYnVmZmVyLmxlbmd0aCkpO1xuXG4gICAgX3RoaXM0Ll9idWZmZXIgPSBidWZmZXI7XG4gICAgcmV0dXJuIF90aGlzNDtcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKE5vZGVCdWZmZXIsIFt7XG4gICAga2V5OiBcImdldFVJbnQ4XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFVJbnQ4KHBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLnJlYWRVSW50OChwb3NpdGlvbik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEludDhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0SW50OChwb3NpdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5yZWFkSW50OChwb3NpdGlvbik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEZsb2F0NjRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RmxvYXQ2NChwb3NpdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5yZWFkRG91YmxlQkUocG9zaXRpb24pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwdXRVSW50OFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXRVSW50OChwb3NpdGlvbiwgdmFsKSB7XG4gICAgICB0aGlzLl9idWZmZXIud3JpdGVVSW50OCh2YWwsIHBvc2l0aW9uKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicHV0SW50OFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXRJbnQ4KHBvc2l0aW9uLCB2YWwpIHtcbiAgICAgIHRoaXMuX2J1ZmZlci53cml0ZUludDgodmFsLCBwb3NpdGlvbik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInB1dEZsb2F0NjRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHV0RmxvYXQ2NChwb3NpdGlvbiwgdmFsKSB7XG4gICAgICB0aGlzLl9idWZmZXIud3JpdGVEb3VibGVCRSh2YWwsIHBvc2l0aW9uKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicHV0Qnl0ZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHV0Qnl0ZXMocG9zaXRpb24sIHZhbCkge1xuICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIE5vZGVCdWZmZXIpIHtcbiAgICAgICAgdmFyIGJ5dGVzVG9Db3B5ID0gTWF0aC5taW4odmFsLmxlbmd0aCAtIHZhbC5wb3NpdGlvbiwgdGhpcy5sZW5ndGggLSBwb3NpdGlvbik7XG4gICAgICAgIHZhbC5fYnVmZmVyLmNvcHkodGhpcy5fYnVmZmVyLCBwb3NpdGlvbiwgdmFsLnBvc2l0aW9uLCB2YWwucG9zaXRpb24gKyBieXRlc1RvQ29weSk7XG4gICAgICAgIHZhbC5wb3NpdGlvbiArPSBieXRlc1RvQ29weTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICgwLCBfZ2V0My5kZWZhdWx0KShOb2RlQnVmZmVyLnByb3RvdHlwZS5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoTm9kZUJ1ZmZlci5wcm90b3R5cGUpLCBcInB1dEJ5dGVzXCIsIHRoaXMpLmNhbGwodGhpcywgcG9zaXRpb24sIHZhbCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFNsaWNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFNsaWNlKHN0YXJ0LCBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgTm9kZUJ1ZmZlcih0aGlzLl9idWZmZXIuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoKSk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBOb2RlQnVmZmVyO1xufShCYXNlQnVmZmVyKTtcblxuLy8gVXNlIEhlYXBCdWZmZXIgYnkgZGVmYXVsdCwgdW5sZXNzIEJ1ZmZlciBBUEkgaXMgYXZhaWxhYmxlLCBzZWUgYmVsb3dcblxuXG52YXIgX0RlZmF1bHRCdWZmZXIgPSBIZWFwQnVmZmVyO1xudHJ5IHtcbiAgLy8gVGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiB3ZSdyZSBub3QgcnVubmluZyBvbiBOb2RlSlMgb3IgZXF1aXZhbGVudFxuICByZXF1aXJlLnJlc29sdmUoXCJidWZmZXJcIik7XG4gIF9EZWZhdWx0QnVmZmVyID0gTm9kZUJ1ZmZlcjtcbn0gY2F0Y2ggKGUpIHt9XG5cbi8qKlxuICogQWxsb2NhdGUgYSBuZXcgYnVmZmVyIHVzaW5nIHdoYXRldmVyIG1lY2hhbmlzbSBpcyBtb3N0IHNlbnNpYmxlIGZvciB0aGVcbiAqIGN1cnJlbnQgcGxhdGZvcm1cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICogQHBhcmFtIHtJbnRlZ2VyfSBzaXplXG4gKiBAcmV0dXJuIG5ldyBidWZmZXJcbiAqL1xuZnVuY3Rpb24gYWxsb2Moc2l6ZSkge1xuICByZXR1cm4gbmV3IF9EZWZhdWx0QnVmZmVyKHNpemUpO1xufVxuXG5leHBvcnRzLkJhc2VCdWZmZXIgPSBCYXNlQnVmZmVyO1xuZXhwb3J0cy5IZWFwQnVmZmVyID0gSGVhcEJ1ZmZlcjtcbmV4cG9ydHMuU2xpY2VCdWZmZXIgPSBTbGljZUJ1ZmZlcjtcbmV4cG9ydHMuQ29tYmluZWRCdWZmZXIgPSBDb21iaW5lZEJ1ZmZlcjtcbmV4cG9ydHMuTm9kZUJ1ZmZlciA9IE5vZGVCdWZmZXI7XG5leHBvcnRzLmFsbG9jID0gYWxsb2M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm9ic2VydmVyID0gZXhwb3J0cy5jaGFubmVsID0gdW5kZWZpbmVkO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2tcIik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbnZhciBfYnVmID0gcmVxdWlyZShcIi4vYnVmXCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgb2JzZXJ2ZXIgPSB7XG4gIGluc3RhbmNlOiBudWxsLFxuICB1cGRhdGVJbnN0YW5jZTogZnVuY3Rpb24gdXBkYXRlSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgICBvYnNlcnZlci5pbnN0YW5jZSA9IGluc3RhbmNlO1xuICB9XG59OyAvKipcbiAgICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAgICAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAgICAqXG4gICAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAgICAqXG4gICAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gICAgKlxuICAgICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICAgICpcbiAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gICAgKi9cblxudmFyIER1bW15Q2hhbm5lbCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRHVtbXlDaGFubmVsKG9wdHMpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBEdW1teUNoYW5uZWwpO1xuXG4gICAgdGhpcy53cml0dGVuID0gW107XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShEdW1teUNoYW5uZWwsIFt7XG4gICAga2V5OiBcImlzRW5jcnlwdGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzRW5jcnlwdGVkKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ3cml0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3cml0ZShidWYpIHtcbiAgICAgIHRoaXMud3JpdHRlbi5wdXNoKGJ1Zik7XG4gICAgICBvYnNlcnZlci51cGRhdGVJbnN0YW5jZSh0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9IZXhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9IZXgoKSB7XG4gICAgICB2YXIgb3V0ID0gXCJcIjtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy53cml0dGVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG91dCArPSB0aGlzLndyaXR0ZW5baV0udG9IZXgoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvQnVmZmVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvQnVmZmVyKCkge1xuICAgICAgcmV0dXJuIG5ldyBfYnVmLkNvbWJpbmVkQnVmZmVyKHRoaXMud3JpdHRlbik7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBEdW1teUNoYW5uZWw7XG59KCk7XG5cbnZhciBjaGFubmVsID0gRHVtbXlDaGFubmVsO1xuXG5leHBvcnRzLmNoYW5uZWwgPSBjaGFubmVsO1xuZXhwb3J0cy5vYnNlcnZlciA9IG9ic2VydmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2tcIik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbnZhciBfbmV0ID0gcmVxdWlyZShcIm5ldFwiKTtcblxudmFyIF9uZXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbmV0KTtcblxudmFyIF90bHMgPSByZXF1aXJlKFwidGxzXCIpO1xuXG52YXIgX3RsczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90bHMpO1xuXG52YXIgX2ZzID0gcmVxdWlyZShcImZzXCIpO1xuXG52YXIgX2ZzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ZzKTtcblxudmFyIF9wYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5cbnZhciBfcGF0aDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wYXRoKTtcblxudmFyIF9vcyA9IHJlcXVpcmUoXCJvc1wiKTtcblxudmFyIF9idWYgPSByZXF1aXJlKFwiLi9idWZcIik7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5cbnZhciBfZXJyb3IgPSByZXF1aXJlKFwiLi8uLi9lcnJvclwiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX0NPTk5FQ1RJT05fSURHRU4gPSAwO1xuXG5mdW5jdGlvbiB1c2VySG9tZSgpIHtcbiAgLy8gRm9yIHNvbWUgcmVhc29uLCBCcm93c2VyaWZ5IGNob2tlcyBvbiBzaGltbWluZyBgcHJvY2Vzc2AuIFRoaXMgY29kZVxuICAvLyB3aWxsIG5ldmVyIGdldCBleGVjdXRlZCBvbiB0aGUgYnJvd3NlciBhbnl3YXksIHRvIGp1c3QgaGFjayBhcm91bmQgaXRcbiAgdmFyIGdldE91dE9mSGVyZUJyb3dzZXJpZnlZb3VyZURydW5rID0gcmVxdWlyZTtcbiAgdmFyIHByb2Nlc3MgPSBnZXRPdXRPZkhlcmVCcm93c2VyaWZ5WW91cmVEcnVuaygncHJvY2VzcycpO1xuXG4gIHJldHVybiBwcm9jZXNzLmVudltwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicgPyAnVVNFUlBST0ZJTEUnIDogJ0hPTUUnXTtcbn1cblxuZnVuY3Rpb24gbWtGdWxsUGF0aChwYXRoVG9DcmVhdGUpIHtcbiAgdHJ5IHtcbiAgICBfZnMyLmRlZmF1bHQubWtkaXJTeW5jKHBhdGhUb0NyZWF0ZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgLy8gQ3JlYXRlIHBhcmVudCBkaXJcbiAgICAgIG1rRnVsbFBhdGgoX3BhdGgyLmRlZmF1bHQuZGlybmFtZShwYXRoVG9DcmVhdGUpKTtcbiAgICAgIC8vIEFuZCBub3cgdHJ5IGFnYWluXG4gICAgICBta0Z1bGxQYXRoKHBhdGhUb0NyZWF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChlLmNvZGUgPT09ICdFRVhJU1QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gbG9hZEZpbmdlcnByaW50KHNlcnZlcklkLCBrbm93bkhvc3RzUGF0aCwgY2IpIHtcbiAgdHJ5IHtcbiAgICBfZnMyLmRlZmF1bHQuYWNjZXNzU3luYyhrbm93bkhvc3RzUGF0aCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gY2IobnVsbCk7XG4gIH1cbiAgdmFyIGZvdW5kID0gZmFsc2U7XG4gIHJlcXVpcmUoJ3JlYWRsaW5lJykuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICBpbnB1dDogX2ZzMi5kZWZhdWx0LmNyZWF0ZVJlYWRTdHJlYW0oa25vd25Ib3N0c1BhdGgpXG4gIH0pLm9uKCdsaW5lJywgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICBpZiAoIWZvdW5kICYmIGxpbmUuc3RhcnRzV2l0aChzZXJ2ZXJJZCkpIHtcbiAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgIGNiKGxpbmUuc3BsaXQoXCIgXCIpWzFdKTtcbiAgICB9XG4gIH0pLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWZvdW5kKSB7XG4gICAgICBjYihudWxsKTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgX2xvY2tGaW5nZXJwcmludEZyb21BcHBlbmRpbmcgPSB7fTtcbmZ1bmN0aW9uIHN0b3JlRmluZ2VycHJpbnQoc2VydmVySWQsIGtub3duSG9zdHNQYXRoLCBmaW5nZXJwcmludCwgY2IpIHtcbiAgLy8gd2UgY2hlY2sgaWYgdGhlIHNlcnZlcklkIGhhcyBiZWVuIGFwcGVuZGVkXG4gIGlmICghIV9sb2NrRmluZ2VycHJpbnRGcm9tQXBwZW5kaW5nW3NlcnZlcklkXSkge1xuICAgIC8vIGlmIGl0IGhhcywgd2UgaWdub3JlIGl0XG4gICAgcmV0dXJuIGNiKG51bGwpO1xuICB9XG5cbiAgLy8gd2UgbWFrZSB0aGUgbGluZSBhcyBhcHBlbmRlZFxuICAvLyAoIDEgaXMgbW9yZSBlZmZpY2llbnQgdG8gc3RvcmUgdGhhbiB0cnVlIGJlY2F1c2UgdHJ1ZSBpcyBhbiBvZGRiYWxsIClcbiAgX2xvY2tGaW5nZXJwcmludEZyb21BcHBlbmRpbmdbc2VydmVySWRdID0gMTtcblxuICAvLyBJZiBmaWxlIGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBmdWxsIHBhdGggdG8gaXRcbiAgdHJ5IHtcbiAgICBfZnMyLmRlZmF1bHQuYWNjZXNzU3luYyhrbm93bkhvc3RzUGF0aCk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICBta0Z1bGxQYXRoKF9wYXRoMi5kZWZhdWx0LmRpcm5hbWUoa25vd25Ib3N0c1BhdGgpKTtcbiAgfVxuXG4gIF9mczIuZGVmYXVsdC5hcHBlbmRGaWxlKGtub3duSG9zdHNQYXRoLCBzZXJ2ZXJJZCArIFwiIFwiICsgZmluZ2VycHJpbnQgKyBfb3MuRU9MLCBcInV0ZjhcIiwgZnVuY3Rpb24gKGVycikge1xuICAgIGRlbGV0ZSBfbG9ja0ZpbmdlcnByaW50RnJvbUFwcGVuZGluZ1tzZXJ2ZXJJZF07XG4gICAgaWYgKGVycikge1xuICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNiKGVycik7XG4gIH0pO1xufVxuXG52YXIgVHJ1c3RTdHJhdGVneSA9IHtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFNpbmNlIHZlcnNpb24gMS4wLiBXaWxsIGJlIGRlbGV0ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4ge0BsaW5rICNUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFU30uXG4gICAqL1xuICBUUlVTVF9TSUdORURfQ0VSVElGSUNBVEVTOiBmdW5jdGlvbiBUUlVTVF9TSUdORURfQ0VSVElGSUNBVEVTKG9wdHMsIG9uU3VjY2Vzcywgb25GYWlsdXJlKSB7XG4gICAgY29uc29sZS5sb2coXCJgVFJVU1RfU0lHTkVEX0NFUlRJRklDQVRFU2AgaGFzIGJlZW4gZGVwcmVjYXRlZCBhcyBvcHRpb24gYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFwiICsgXCJ0aGUgZHJpdmVyLiBQbGVhc2UgdXNlIGBUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFU2AgaW5zdGVhZC5cIik7XG4gICAgcmV0dXJuIFRydXN0U3RyYXRlZ3kuVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVMob3B0cywgb25TdWNjZXNzLCBvbkZhaWx1cmUpO1xuICB9LFxuICBUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFUzogZnVuY3Rpb24gVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVMob3B0cywgb25TdWNjZXNzLCBvbkZhaWx1cmUpIHtcbiAgICBpZiAoIW9wdHMudHJ1c3RlZENlcnRpZmljYXRlcyB8fCBvcHRzLnRydXN0ZWRDZXJ0aWZpY2F0ZXMubGVuZ3RoID09IDApIHtcbiAgICAgIG9uRmFpbHVyZSgoMCwgX2Vycm9yLm5ld0Vycm9yKShcIllvdSBhcmUgdXNpbmcgVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVMgYXMgdGhlIG1ldGhvZCBcIiArIFwidG8gdmVyaWZ5IHRydXN0IGZvciBlbmNyeXB0ZWQgIGNvbm5lY3Rpb25zLCBidXQgaGF2ZSBub3QgY29uZmlndXJlZCBhbnkgXCIgKyBcInRydXN0ZWRDZXJ0aWZpY2F0ZXMuIFlvdSAgbXVzdCBzcGVjaWZ5IHRoZSBwYXRoIHRvIGF0IGxlYXN0IG9uZSB0cnVzdGVkIFwiICsgXCJYLjUwOSBjZXJ0aWZpY2F0ZSBmb3IgdGhpcyB0byB3b3JrLiBUd28gb3RoZXIgYWx0ZXJuYXRpdmVzIGlzIHRvIHVzZSBcIiArIFwiVFJVU1RfQUxMX0NFUlRJRklDQVRFUyBvciB0byBkaXNhYmxlIGVuY3J5cHRpb24gYnkgc2V0dGluZyBlbmNyeXB0ZWQ9XFxcIlwiICsgX3V0aWwuRU5DUllQVElPTl9PRkYgKyBcIlxcXCJcIiArIFwiaW4geW91ciBkcml2ZXIgY29uZmlndXJhdGlvbi5cIikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0bHNPcHRzID0ge1xuICAgICAgY2E6IG9wdHMudHJ1c3RlZENlcnRpZmljYXRlcy5tYXAoZnVuY3Rpb24gKGYpIHtcbiAgICAgICAgcmV0dXJuIF9mczIuZGVmYXVsdC5yZWFkRmlsZVN5bmMoZik7XG4gICAgICB9KSxcbiAgICAgIC8vIEJlY2F1c2Ugd2UgbWFudWFsbHkgY2hlY2sgZm9yIHRoaXMgaW4gdGhlIGNvbm5lY3QgY2FsbGJhY2ssIHRvIGdpdmVcbiAgICAgIC8vIGEgbW9yZSBoZWxwZnVsIGVycm9yIHRvIHRoZSB1c2VyXG4gICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlXG4gICAgfTtcblxuICAgIHZhciBzb2NrZXQgPSBfdGxzMi5kZWZhdWx0LmNvbm5lY3Qob3B0cy5wb3J0LCBvcHRzLmhvc3QsIHRsc09wdHMsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghc29ja2V0LmF1dGhvcml6ZWQpIHtcbiAgICAgICAgb25GYWlsdXJlKCgwLCBfZXJyb3IubmV3RXJyb3IpKFwiU2VydmVyIGNlcnRpZmljYXRlIGlzIG5vdCB0cnVzdGVkLiBJZiB5b3UgdHJ1c3QgdGhlIGRhdGFiYXNlIHlvdSBhcmUgY29ubmVjdGluZyB0bywgYWRkXCIgKyBcIiB0aGUgc2lnbmluZyBjZXJ0aWZpY2F0ZSwgb3IgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSwgdG8gdGhlIGxpc3Qgb2YgY2VydGlmaWNhdGVzIHRydXN0ZWQgYnkgdGhpcyBkcml2ZXJcIiArIFwiIHVzaW5nIGBuZW80ai52MS5kcml2ZXIoLi4sIHsgdHJ1c3RlZENlcnRpZmljYXRlczpbJ3BhdGgvdG8vY2VydGlmaWNhdGUuY3J0J119KS4gVGhpcyBcIiArIFwiIGlzIGEgc2VjdXJpdHkgbWVhc3VyZSB0byBwcm90ZWN0IGFnYWluc3QgbWFuLWluLXRoZS1taWRkbGUgYXR0YWNrcy4gSWYgeW91IGFyZSBqdXN0IHRyeWluZyBcIiArIFwiIE5lbzRqIG91dCBhbmQgYXJlIG5vdCBjb25jZXJuZWQgYWJvdXQgZW5jcnlwdGlvbiwgc2ltcGx5IGRpc2FibGUgaXQgdXNpbmcgYGVuY3J5cHRlZD1cXFwiXCIgKyBfdXRpbC5FTkNSWVBUSU9OX09GRiArIFwiXFxcImBcIiArIFwiIGluIHRoZSBkcml2ZXIgb3B0aW9ucy4gU29ja2V0IHJlc3BvbmRlZCB3aXRoOiBcIiArIHNvY2tldC5hdXRob3JpemF0aW9uRXJyb3IpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uU3VjY2VzcygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHNvY2tldC5vbignZXJyb3InLCBvbkZhaWx1cmUpO1xuICAgIHJldHVybiBzb2NrZXQ7XG4gIH0sXG4gIFRSVVNUX1NZU1RFTV9DQV9TSUdORURfQ0VSVElGSUNBVEVTOiBmdW5jdGlvbiBUUlVTVF9TWVNURU1fQ0FfU0lHTkVEX0NFUlRJRklDQVRFUyhvcHRzLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSkge1xuXG4gICAgdmFyIHRsc09wdHMgPSB7XG4gICAgICAvLyBCZWNhdXNlIHdlIG1hbnVhbGx5IGNoZWNrIGZvciB0aGlzIGluIHRoZSBjb25uZWN0IGNhbGxiYWNrLCB0byBnaXZlXG4gICAgICAvLyBhIG1vcmUgaGVscGZ1bCBlcnJvciB0byB0aGUgdXNlclxuICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICAgIH07XG4gICAgdmFyIHNvY2tldCA9IF90bHMyLmRlZmF1bHQuY29ubmVjdChvcHRzLnBvcnQsIG9wdHMuaG9zdCwgdGxzT3B0cywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzb2NrZXQuYXV0aG9yaXplZCkge1xuICAgICAgICBvbkZhaWx1cmUoKDAsIF9lcnJvci5uZXdFcnJvcikoXCJTZXJ2ZXIgY2VydGlmaWNhdGUgaXMgbm90IHRydXN0ZWQuIElmIHlvdSB0cnVzdCB0aGUgZGF0YWJhc2UgeW91IGFyZSBjb25uZWN0aW5nIHRvLCB1c2UgXCIgKyBcIlRSVVNUX0NVU1RPTV9DQV9TSUdORURfQ0VSVElGSUNBVEVTIGFuZCBhZGRcIiArIFwiIHRoZSBzaWduaW5nIGNlcnRpZmljYXRlLCBvciB0aGUgc2VydmVyIGNlcnRpZmljYXRlLCB0byB0aGUgbGlzdCBvZiBjZXJ0aWZpY2F0ZXMgdHJ1c3RlZCBieSB0aGlzIGRyaXZlclwiICsgXCIgdXNpbmcgYG5lbzRqLnYxLmRyaXZlciguLiwgeyB0cnVzdGVkQ2VydGlmaWNhdGVzOlsncGF0aC90by9jZXJ0aWZpY2F0ZS5jcnQnXX0pLiBUaGlzIFwiICsgXCIgaXMgYSBzZWN1cml0eSBtZWFzdXJlIHRvIHByb3RlY3QgYWdhaW5zdCBtYW4taW4tdGhlLW1pZGRsZSBhdHRhY2tzLiBJZiB5b3UgYXJlIGp1c3QgdHJ5aW5nIFwiICsgXCIgTmVvNGogb3V0IGFuZCBhcmUgbm90IGNvbmNlcm5lZCBhYm91dCBlbmNyeXB0aW9uLCBzaW1wbHkgZGlzYWJsZSBpdCB1c2luZyBgZW5jcnlwdGVkPVxcXCJcIiArIF91dGlsLkVOQ1JZUFRJT05fT0ZGICsgXCJcXFwiYFwiICsgXCIgaW4gdGhlIGRyaXZlciBvcHRpb25zLiBTb2NrZXQgcmVzcG9uZGVkIHdpdGg6IFwiICsgc29ja2V0LmF1dGhvcml6YXRpb25FcnJvcikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25TdWNjZXNzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgc29ja2V0Lm9uKCdlcnJvcicsIG9uRmFpbHVyZSk7XG4gICAgcmV0dXJuIHNvY2tldDtcbiAgfSxcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIGluIDEuMSBpbiBmYXZvdXIgb2Yge0BsaW5rICNUUlVTVF9BTExfQ0VSVElGSUNBVEVTfS4gV2lsbCBiZSBkZWxldGVkIGluIGEgZnV0dXJlIHZlcnNpb24uXG4gICAqL1xuICBUUlVTVF9PTl9GSVJTVF9VU0U6IGZ1bmN0aW9uIFRSVVNUX09OX0ZJUlNUX1VTRShvcHRzLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSkge1xuICAgIGNvbnNvbGUubG9nKFwiYFRSVVNUX09OX0ZJUlNUX1VTRWAgaGFzIGJlZW4gZGVwcmVjYXRlZCBhcyBvcHRpb24gYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFwiICsgXCJ0aGUgZHJpdmVyLiBQbGVhc2UgdXNlIGBUUlVTVF9BTExfQ0VSVElGSUNBVEVTYCBpbnN0ZWFkLlwiKTtcblxuICAgIHZhciB0bHNPcHRzID0ge1xuICAgICAgLy8gQmVjYXVzZSB3ZSBtYW51YWxseSB2ZXJpZnkgdGhlIGNlcnRpZmljYXRlIGFnYWluc3Qga25vd25faG9zdHNcbiAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcbiAgICB9O1xuXG4gICAgdmFyIHNvY2tldCA9IF90bHMyLmRlZmF1bHQuY29ubmVjdChvcHRzLnBvcnQsIG9wdHMuaG9zdCwgdGxzT3B0cywgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHNlcnZlckNlcnQgPSBzb2NrZXQuZ2V0UGVlckNlcnRpZmljYXRlKCAvKnJhdz0qL3RydWUpO1xuXG4gICAgICBpZiAoIXNlcnZlckNlcnQucmF3KSB7XG4gICAgICAgIC8vIElmIGByYXdgIGlzIG5vdCBhdmFpbGFibGUsIHdlJ3JlIG9uIGFuIG9sZCB2ZXJzaW9uIG9mIE5vZGVKUywgYW5kXG4gICAgICAgIC8vIHRoZSByYXcgY2VydCBjYW5ub3QgYmUgYWNjZXNzZWQgKG9yLCBhdCBsZWFzdCBJIGNvdWxkbid0IGZpbmQgYSB3YXkgdG8pXG4gICAgICAgIC8vIHRoZXJlZm9yZSwgd2UgY2FuJ3QgZ2VuZXJhdGUgYSBTSEE1MTIgZmluZ2VycHJpbnQsIG1lYW5pbmcgd2UgY2FuJ3RcbiAgICAgICAgLy8gZG8gVE9GVSwgYW5kIHRoZSBzYWZlIGFwcHJvYWNoIGlzIHRvIGZhaWwuXG4gICAgICAgIG9uRmFpbHVyZSgoMCwgX2Vycm9yLm5ld0Vycm9yKShcIllvdSBhcmUgdXNpbmcgYSB2ZXJzaW9uIG9mIE5vZGVKUyB0aGF0IGRvZXMgbm90IFwiICsgXCJzdXBwb3J0IHRydXN0LW9uLWZpcnN0IHVzZSBlbmNyeXB0aW9uLiBZb3UgY2FuIGVpdGhlciB1cGdyYWRlIE5vZGVKUyB0byBcIiArIFwiYSBuZXdlciB2ZXJzaW9uLCB1c2UgYHRydXN0OlRSVVNUX0NVU1RPTV9DQV9TSUdORURfQ0VSVElGSUNBVEVTYCBpbiB5b3VyIGRyaXZlciBcIiArIFwiY29uZmlnIGluc3RlYWQsIG9yIGRpc2FibGUgZW5jcnlwdGlvbiB1c2luZyBgZW5jcnlwdGVkOlxcXCJcIiArIF91dGlsLkVOQ1JZUFRJT05fT0ZGICsgXCJcXFwiYC5cIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzZXJ2ZXJGaW5nZXJwcmludCA9IHJlcXVpcmUoJ2NyeXB0bycpLmNyZWF0ZUhhc2goJ3NoYTUxMicpLnVwZGF0ZShzZXJ2ZXJDZXJ0LnJhdykuZGlnZXN0KFwiaGV4XCIpO1xuICAgICAgdmFyIGtub3duSG9zdHNQYXRoID0gb3B0cy5rbm93bkhvc3RzIHx8IF9wYXRoMi5kZWZhdWx0LmpvaW4odXNlckhvbWUoKSwgXCIubmVvNGpcIiwgXCJrbm93bl9ob3N0c1wiKTtcbiAgICAgIHZhciBzZXJ2ZXJJZCA9IG9wdHMuaG9zdCArIFwiOlwiICsgb3B0cy5wb3J0O1xuXG4gICAgICBsb2FkRmluZ2VycHJpbnQoc2VydmVySWQsIGtub3duSG9zdHNQYXRoLCBmdW5jdGlvbiAoa25vd25GaW5nZXJwcmludCkge1xuICAgICAgICBpZiAoa25vd25GaW5nZXJwcmludCA9PT0gc2VydmVyRmluZ2VycHJpbnQpIHtcbiAgICAgICAgICBvblN1Y2Nlc3MoKTtcbiAgICAgICAgfSBlbHNlIGlmIChrbm93bkZpbmdlcnByaW50ID09IG51bGwpIHtcbiAgICAgICAgICBzdG9yZUZpbmdlcnByaW50KHNlcnZlcklkLCBrbm93bkhvc3RzUGF0aCwgc2VydmVyRmluZ2VycHJpbnQsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9uRmFpbHVyZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9uU3VjY2VzcygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9uRmFpbHVyZSgoMCwgX2Vycm9yLm5ld0Vycm9yKShcIkRhdGFiYXNlIGVuY3J5cHRpb24gY2VydGlmaWNhdGUgaGFzIGNoYW5nZWQsIGFuZCBubyBsb25nZXIgXCIgKyBcIm1hdGNoZXMgdGhlIGNlcnRpZmljYXRlIHN0b3JlZCBmb3IgXCIgKyBzZXJ2ZXJJZCArIFwiIGluIGBcIiArIGtub3duSG9zdHNQYXRoICsgXCJgLiBBcyBhIHNlY3VyaXR5IHByZWNhdXRpb24sIHRoaXMgZHJpdmVyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgdHJ1c3QgdGhlIG5ldyBcIiArIFwiY2VydGlmaWNhdGUsIGJlY2F1c2UgZG9pbmcgc28gd291bGQgYWxsb3cgYW4gYXR0YWNrZXIgdG8gcHJldGVuZCB0byBiZSB0aGUgTmVvNGogXCIgKyBcImluc3RhbmNlIHdlIHdhbnQgdG8gY29ubmVjdCB0by4gVGhlIGNlcnRpZmljYXRlIHByb3ZpZGVkIGJ5IHRoZSBzZXJ2ZXIgbG9va3MgbGlrZTogXCIgKyBzZXJ2ZXJDZXJ0ICsgXCIuIElmIHlvdSB0cnVzdCB0aGF0IHRoaXMgY2VydGlmaWNhdGUgaXMgdmFsaWQsIHNpbXBseSByZW1vdmUgdGhlIGxpbmUgXCIgKyBcInN0YXJ0aW5nIHdpdGggXCIgKyBzZXJ2ZXJJZCArIFwiIGluIGBcIiArIGtub3duSG9zdHNQYXRoICsgXCJgLCBhbmQgdGhlIGRyaXZlciB3aWxsIFwiICsgXCJ1cGRhdGUgdGhlIGZpbGUgd2l0aCB0aGUgbmV3IGNlcnRpZmljYXRlLiBZb3UgY2FuIGNvbmZpZ3VyZSB3aGljaCBmaWxlIHRoZSBkcml2ZXIgXCIgKyBcInNob3VsZCB1c2UgdG8gc3RvcmUgdGhpcyBpbmZvcm1hdGlvbiBieSBzZXR0aW5nIGBrbm93bkhvc3RzYCB0byBhbm90aGVyIHBhdGggaW4gXCIgKyBcInlvdXIgZHJpdmVyIGNvbmZpZ3VyYXRpb24gLSBhbmQgeW91IGNhbiBkaXNhYmxlIGVuY3J5cHRpb24gdGhlcmUgYXMgd2VsbCB1c2luZyBcIiArIFwiYGVuY3J5cHRlZDpcXFwiXCIgKyBfdXRpbC5FTkNSWVBUSU9OX09GRiArIFwiXFxcImAuXCIpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgc29ja2V0Lm9uKCdlcnJvcicsIG9uRmFpbHVyZSk7XG4gICAgcmV0dXJuIHNvY2tldDtcbiAgfSxcblxuICBUUlVTVF9BTExfQ0VSVElGSUNBVEVTOiBmdW5jdGlvbiBUUlVTVF9BTExfQ0VSVElGSUNBVEVTKG9wdHMsIG9uU3VjY2Vzcywgb25GYWlsdXJlKSB7XG4gICAgdmFyIHRsc09wdHMgPSB7XG4gICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlXG4gICAgfTtcbiAgICB2YXIgc29ja2V0ID0gX3RsczIuZGVmYXVsdC5jb25uZWN0KG9wdHMucG9ydCwgb3B0cy5ob3N0LCB0bHNPcHRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY2VydGlmaWNhdGUgPSBzb2NrZXQuZ2V0UGVlckNlcnRpZmljYXRlKCk7XG4gICAgICBpZiAoKDAsIF91dGlsLmlzRW1wdHlPYmplY3RPck51bGwpKGNlcnRpZmljYXRlKSkge1xuICAgICAgICBvbkZhaWx1cmUoKDAsIF9lcnJvci5uZXdFcnJvcikoXCJTZWN1cmUgY29ubmVjdGlvbiB3YXMgc3VjY2Vzc2Z1bCBidXQgc2VydmVyIGRpZCBub3QgcmV0dXJuIGFueSB2YWxpZCBcIiArIFwiY2VydGlmaWNhdGVzLiBTdWNoIGNvbm5lY3Rpb24gY2FuIG5vdCBiZSB0cnVzdGVkLiBJZiB5b3UgYXJlIGp1c3QgdHJ5aW5nIFwiICsgXCIgTmVvNGogb3V0IGFuZCBhcmUgbm90IGNvbmNlcm5lZCBhYm91dCBlbmNyeXB0aW9uLCBzaW1wbHkgZGlzYWJsZSBpdCB1c2luZyBcIiArIFwiYGVuY3J5cHRlZD1cXFwiXCIgKyBfdXRpbC5FTkNSWVBUSU9OX09GRiArIFwiXFxcImAgaW4gdGhlIGRyaXZlciBvcHRpb25zLiBcIiArIFwiU29ja2V0IHJlc3BvbmRlZCB3aXRoOiBcIiArIHNvY2tldC5hdXRob3JpemF0aW9uRXJyb3IpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uU3VjY2VzcygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHNvY2tldC5vbignZXJyb3InLCBvbkZhaWx1cmUpO1xuICAgIHJldHVybiBzb2NrZXQ7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNvbm5lY3Qob3B0cywgb25TdWNjZXNzKSB7XG4gIHZhciBvbkZhaWx1cmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICAvL3N0aWxsIGFsbG93IGJvb2xlYW4gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIGlmIChvcHRzLmVuY3J5cHRlZCA9PT0gZmFsc2UgfHwgb3B0cy5lbmNyeXB0ZWQgPT09IF91dGlsLkVOQ1JZUFRJT05fT0ZGKSB7XG4gICAgdmFyIGNvbm4gPSBfbmV0Mi5kZWZhdWx0LmNvbm5lY3Qob3B0cy5wb3J0LCBvcHRzLmhvc3QsIG9uU3VjY2Vzcyk7XG4gICAgY29ubi5vbignZXJyb3InLCBvbkZhaWx1cmUpO1xuICAgIHJldHVybiBjb25uO1xuICB9IGVsc2UgaWYgKFRydXN0U3RyYXRlZ3lbb3B0cy50cnVzdF0pIHtcbiAgICByZXR1cm4gVHJ1c3RTdHJhdGVneVtvcHRzLnRydXN0XShvcHRzLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSk7XG4gIH0gZWxzZSB7XG4gICAgb25GYWlsdXJlKCgwLCBfZXJyb3IubmV3RXJyb3IpKFwiVW5rbm93biB0cnVzdCBzdHJhdGVneTogXCIgKyBvcHRzLnRydXN0ICsgXCIuIFBsZWFzZSB1c2UgZWl0aGVyIFwiICsgXCJ0cnVzdDonVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVMnIG9yIHRydXN0OidUUlVTVF9BTExfQ0VSVElGSUNBVEVTJyBpbiB5b3VyIGRyaXZlciBcIiArIFwiY29uZmlndXJhdGlvbi4gQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBkaXNhYmxlIGVuY3J5cHRpb24gYnkgc2V0dGluZyBcIiArIFwiYGVuY3J5cHRlZDpcXFwiXCIgKyBfdXRpbC5FTkNSWVBUSU9OX09GRiArIFwiXFxcImAuIFRoZXJlIGlzIG5vIG1lY2hhbmlzbSB0byB1c2UgZW5jcnlwdGlvbiB3aXRob3V0IHRydXN0IHZlcmlmaWNhdGlvbiwgXCIgKyBcImJlY2F1c2UgdGhpcyBpbmN1cnMgdGhlIG92ZXJoZWFkIG9mIGVuY3J5cHRpb24gd2l0aG91dCBpbXByb3Zpbmcgc2VjdXJpdHkuIElmIFwiICsgXCJ0aGUgZHJpdmVyIGRvZXMgbm90IHZlcmlmeSB0aGF0IHRoZSBwZWVyIGl0IGlzIGNvbm5lY3RlZCB0byBpcyByZWFsbHkgTmVvNGosIGl0IFwiICsgXCJpcyB2ZXJ5IGVhc3kgZm9yIGFuIGF0dGFja2VyIHRvIGJ5cGFzcyB0aGUgZW5jcnlwdGlvbiBieSBwcmV0ZW5kaW5nIHRvIGJlIE5lbzRqLlwiKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbiBhIE5vZGUuanMgZW52aXJvbm1lbnQgdGhlICduZXQnIG1vZHVsZSBpcyB1c2VkXG4gKiBhcyB0cmFuc3BvcnQuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqL1xuXG52YXIgTm9kZUNoYW5uZWwgPSBmdW5jdGlvbiAoKSB7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBuZXcgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBPcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5ob3N0IC0gVGhlIGhvc3QsIGluY2x1ZGluZyBwcm90b2NvbCB0byBjb25uZWN0IHRvLlxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IG9wdHMucG9ydCAtIFRoZSBwb3J0IHRvIHVzZS5cbiAgICovXG4gIGZ1bmN0aW9uIE5vZGVDaGFubmVsKG9wdHMpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBOb2RlQ2hhbm5lbCk7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLmlkID0gX0NPTk5FQ1RJT05fSURHRU4rKztcbiAgICB0aGlzLmF2YWlsYWJsZSA9IHRydWU7XG4gICAgdGhpcy5fcGVuZGluZyA9IFtdO1xuICAgIHRoaXMuX29wZW4gPSB0cnVlO1xuICAgIHRoaXMuX2Vycm9yID0gbnVsbDtcbiAgICB0aGlzLl9oYW5kbGVDb25uZWN0aW9uRXJyb3IgPSB0aGlzLl9oYW5kbGVDb25uZWN0aW9uRXJyb3IuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9oYW5kbGVDb25uZWN0aW9uVGVybWluYXRlZCA9IHRoaXMuX2hhbmRsZUNvbm5lY3Rpb25UZXJtaW5hdGVkLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLl9lbmNyeXB0ZWQgPSBvcHRzLmVuY3J5cHRlZDtcbiAgICB0aGlzLl9jb25uID0gY29ubmVjdChvcHRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXNlbGYuX29wZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZWxmLl9jb25uLm9uKCdkYXRhJywgZnVuY3Rpb24gKGJ1ZmZlcikge1xuICAgICAgICBpZiAoc2VsZi5vbm1lc3NhZ2UpIHtcbiAgICAgICAgICBzZWxmLm9ubWVzc2FnZShuZXcgX2J1Zi5Ob2RlQnVmZmVyKGJ1ZmZlcikpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc2VsZi5fY29ubi5vbignZXJyb3InLCBzZWxmLl9oYW5kbGVDb25uZWN0aW9uRXJyb3IpO1xuICAgICAgc2VsZi5fY29ubi5vbignZW5kJywgc2VsZi5faGFuZGxlQ29ubmVjdGlvblRlcm1pbmF0ZWQpO1xuXG4gICAgICAvLyBEcmFpbiBhbGwgcGVuZGluZyBtZXNzYWdlc1xuICAgICAgdmFyIHBlbmRpbmcgPSBzZWxmLl9wZW5kaW5nO1xuICAgICAgc2VsZi5fcGVuZGluZyA9IG51bGw7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBlbmRpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc2VsZi53cml0ZShwZW5kaW5nW2ldKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLl9oYW5kbGVDb25uZWN0aW9uRXJyb3IpO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoTm9kZUNoYW5uZWwsIFt7XG4gICAga2V5OiBcIl9oYW5kbGVDb25uZWN0aW9uRXJyb3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2hhbmRsZUNvbm5lY3Rpb25FcnJvcihlcnIpIHtcbiAgICAgIHZhciBtc2cgPSBlcnIubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGNvbm5lY3QgdG8gc2VydmVyJztcbiAgICAgIHRoaXMuX2Vycm9yID0gKDAsIF9lcnJvci5uZXdFcnJvcikobXNnLCBfZXJyb3IuU0VTU0lPTl9FWFBJUkVEKTtcbiAgICAgIGlmICh0aGlzLm9uZXJyb3IpIHtcbiAgICAgICAgdGhpcy5vbmVycm9yKHRoaXMuX2Vycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2hhbmRsZUNvbm5lY3Rpb25UZXJtaW5hdGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9oYW5kbGVDb25uZWN0aW9uVGVybWluYXRlZCgpIHtcbiAgICAgIHRoaXMuX2Vycm9yID0gKDAsIF9lcnJvci5uZXdFcnJvcikoJ0Nvbm5lY3Rpb24gd2FzIGNsb3NlZCBieSBzZXJ2ZXInLCBfZXJyb3IuU0VTU0lPTl9FWFBJUkVEKTtcbiAgICAgIGlmICh0aGlzLm9uZXJyb3IpIHtcbiAgICAgICAgdGhpcy5vbmVycm9yKHRoaXMuX2Vycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaXNFbmNyeXB0ZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNFbmNyeXB0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZW5jcnlwdGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdyaXRlIHRoZSBwYXNzZWQgaW4gYnVmZmVyIHRvIGNvbm5lY3Rpb25cbiAgICAgKiBAcGFyYW0ge05vZGVCdWZmZXJ9IGJ1ZmZlciAtIEJ1ZmZlciB0byB3cml0ZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwid3JpdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gd3JpdGUoYnVmZmVyKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBhIHBlbmRpbmcgcXVldWUsIHB1c2ggdGhpcyBvbiB0aGF0IHF1ZXVlLiBUaGlzIG1lYW5zXG4gICAgICAvLyB3ZSBhcmUgbm90IHlldCBjb25uZWN0ZWQsIHNvIHdlIHF1ZXVlIHRoaW5ncyBsb2NhbGx5LlxuICAgICAgaWYgKHRoaXMuX3BlbmRpbmcgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZy5wdXNoKGJ1ZmZlcik7XG4gICAgICB9IGVsc2UgaWYgKGJ1ZmZlciBpbnN0YW5jZW9mIF9idWYuTm9kZUJ1ZmZlcikge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyggXCJbQ29ubiNcIit0aGlzLmlkK1wiXSBTRU5EOiBcIiwgYnVmZmVyLnRvU3RyaW5nKCkgKTtcbiAgICAgICAgdGhpcy5fY29ubi53cml0ZShidWZmZXIuX2J1ZmZlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKShcIkRvbid0IGtub3cgaG93IHRvIHdyaXRlOiBcIiArIGJ1ZmZlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2UgdGhlIGNvbm5lY3Rpb25cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYiAtIEZ1bmN0aW9uIHRvIGNhbGwgb24gY2xvc2UuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJjbG9zZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgIHZhciBjYiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX29wZW4gPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLl9jb25uKSB7XG4gICAgICAgIHRoaXMuX2Nvbm4uZW5kKCk7XG4gICAgICAgIHRoaXMuX2Nvbm4ucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIHRoaXMuX2hhbmRsZUNvbm5lY3Rpb25UZXJtaW5hdGVkKTtcbiAgICAgICAgdGhpcy5fY29ubi5vbignZW5kJywgY2IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2IoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIE5vZGVDaGFubmVsO1xufSgpO1xuXG52YXIgX25vZGVDaGFubmVsTW9kdWxlID0geyBjaGFubmVsOiBOb2RlQ2hhbm5lbCwgYXZhaWxhYmxlOiB0cnVlIH07XG5cbnRyeSB7XG4gIC8vIE9ubHkgZGVmaW5lIHRoaXMgbW9kdWxlIGlmICduZXQnIGlzIGF2YWlsYWJsZVxuICByZXF1aXJlLnJlc29sdmUoXCJuZXRcIik7XG59IGNhdGNoIChlKSB7XG4gIF9ub2RlQ2hhbm5lbE1vZHVsZSA9IHsgYXZhaWxhYmxlOiBmYWxzZSB9O1xufVxuXG5leHBvcnRzLmRlZmF1bHQgPSBfbm9kZUNoYW5uZWxNb2R1bGU7IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjaycpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzJyk7XG5cbnZhciBfY3JlYXRlQ2xhc3MzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlQ2xhc3MyKTtcblxudmFyIF9idWYgPSByZXF1aXJlKCcuL2J1ZicpO1xuXG52YXIgX2Vycm9yID0gcmVxdWlyZSgnLi8uLi9lcnJvcicpO1xuXG52YXIgX3V0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgV2ViU29ja2V0Q2hhbm5lbCB0byBiZSB1c2VkIGluIHdlYiBicm93c2Vycy5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovXG52YXIgV2ViU29ja2V0Q2hhbm5lbCA9IGZ1bmN0aW9uICgpIHtcblxuICAvKipcbiAgICogQ3JlYXRlIG5ldyBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnMgb2JqZWN0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLmhvc3QgLSBUaGUgaG9zdCwgaW5jbHVkaW5nIHByb3RvY29sIHRvIGNvbm5lY3QgdG8uXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gb3B0cy5wb3J0IC0gVGhlIHBvcnQgdG8gdXNlLlxuICAgKi9cbiAgZnVuY3Rpb24gV2ViU29ja2V0Q2hhbm5lbChvcHRzKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgV2ViU29ja2V0Q2hhbm5lbCk7XG5cblxuICAgIHRoaXMuX29wZW4gPSB0cnVlO1xuICAgIHRoaXMuX3BlbmRpbmcgPSBbXTtcbiAgICB0aGlzLl9lcnJvciA9IG51bGw7XG4gICAgdGhpcy5faGFuZGxlQ29ubmVjdGlvbkVycm9yID0gdGhpcy5faGFuZGxlQ29ubmVjdGlvbkVycm9yLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLl9lbmNyeXB0ZWQgPSBvcHRzLmVuY3J5cHRlZDtcblxuICAgIHZhciBzY2hlbWUgPSBcIndzXCI7XG4gICAgLy9BbGxvdyBib29sZWFuIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIGlmIChvcHRzLmVuY3J5cHRlZCA9PT0gdHJ1ZSB8fCBvcHRzLmVuY3J5cHRlZCA9PT0gX3V0aWwuRU5DUllQVElPTl9PTikge1xuICAgICAgaWYgKCFvcHRzLnRydXN0IHx8IG9wdHMudHJ1c3QgPT09IFwiVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVNcIikge1xuICAgICAgICBzY2hlbWUgPSBcIndzc1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZXJyb3IgPSAoMCwgX2Vycm9yLm5ld0Vycm9yKShcIlRoZSBicm93c2VyIHZlcnNpb24gb2YgdGhpcyBkcml2ZXIgb25seSBzdXBwb3J0cyBvbmUgdHJ1c3QgXCIgKyBcInN0cmF0ZWd5LCAnVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVMnLiBcIiArIG9wdHMudHJ1c3QgKyBcIiBpcyBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgXCIgKyBcImVpdGhlciB1c2UgVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVMgb3IgZGlzYWJsZSBlbmNyeXB0aW9uIGJ5IHNldHRpbmcgXCIgKyBcImBlbmNyeXB0ZWQ6XFxcIlwiICsgX3V0aWwuRU5DUllQVElPTl9PRkYgKyBcIlxcXCJgIGluIHRoZSBkcml2ZXIgY29uZmlndXJhdGlvbi5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fdXJsID0gc2NoZW1lICsgXCI6Ly9cIiArIG9wdHMuaG9zdCArIFwiOlwiICsgb3B0cy5wb3J0O1xuICAgIHRoaXMuX3dzID0gbmV3IFdlYlNvY2tldCh0aGlzLl91cmwpO1xuICAgIHRoaXMuX3dzLmJpbmFyeVR5cGUgPSBcImFycmF5YnVmZmVyXCI7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgLy9BbGwgY29ubmVjdGlvbiBlcnJvcnMgYXJlIG5vdCBzZW50IHRvIHRoZSBlcnJvciBoYW5kbGVyXG4gICAgLy93ZSBtdXN0IGFsc28gY2hlY2sgZm9yIGRpcnR5IGNsb3NlIGNhbGxzXG4gICAgdGhpcy5fd3Mub25jbG9zZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoIWUud2FzQ2xlYW4pIHtcbiAgICAgICAgc2VsZi5faGFuZGxlQ29ubmVjdGlvbkVycm9yKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLl93cy5vbm9wZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBEcmFpbiBhbGwgcGVuZGluZyBtZXNzYWdlc1xuICAgICAgdmFyIHBlbmRpbmcgPSBzZWxmLl9wZW5kaW5nO1xuICAgICAgc2VsZi5fcGVuZGluZyA9IG51bGw7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBlbmRpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc2VsZi53cml0ZShwZW5kaW5nW2ldKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX3dzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKHNlbGYub25tZXNzYWdlKSB7XG4gICAgICAgIHZhciBiID0gbmV3IF9idWYuSGVhcEJ1ZmZlcihldmVudC5kYXRhKTtcbiAgICAgICAgc2VsZi5vbm1lc3NhZ2UoYik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuX3dzLm9uZXJyb3IgPSB0aGlzLl9oYW5kbGVDb25uZWN0aW9uRXJyb3I7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShXZWJTb2NrZXRDaGFubmVsLCBbe1xuICAgIGtleTogJ19oYW5kbGVDb25uZWN0aW9uRXJyb3InLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfaGFuZGxlQ29ubmVjdGlvbkVycm9yKCkge1xuICAgICAgLy8gb25lcnJvciB0cmlnZ2VycyBvbiB3ZWJzb2NrZXQgY2xvc2UgYXMgd2VsbC4uIGRvbid0IGdldCBtZSBzdGFydGVkLlxuICAgICAgaWYgKHRoaXMuX29wZW4pIHtcbiAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNTc3OTgzMS9ob3ctdG8tY2F0Y2gtd2Vic29ja2V0LWNvbm5lY3Rpb24tdG8td3MteHh4bm4tZmFpbGVkLWNvbm5lY3Rpb24tY2xvc2VkLWJlXG4gICAgICAgIHRoaXMuX2Vycm9yID0gKDAsIF9lcnJvci5uZXdFcnJvcikoXCJXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsdXJlLiBEdWUgdG8gc2VjdXJpdHkgXCIgKyBcImNvbnN0cmFpbnRzIGluIHlvdXIgd2ViIGJyb3dzZXIsIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlIGlzIG5vdCBhdmFpbGFibGUgXCIgKyBcInRvIHRoaXMgTmVvNGogRHJpdmVyLiBQbGVhc2UgdXNlIHlvdXIgYnJvd3NlcnMgZGV2ZWxvcG1lbnQgY29uc29sZSB0byBkZXRlcm1pbmUgXCIgKyBcInRoZSByb290IGNhdXNlIG9mIHRoZSBmYWlsdXJlLiBDb21tb24gcmVhc29ucyBpbmNsdWRlIHRoZSBkYXRhYmFzZSBiZWluZyBcIiArIFwidW5hdmFpbGFibGUsIHVzaW5nIHRoZSB3cm9uZyBjb25uZWN0aW9uIFVSTCBvciB0ZW1wb3JhcnkgbmV0d29yayBwcm9ibGVtcy4gXCIgKyBcIklmIHlvdSBoYXZlIGVuYWJsZWQgZW5jcnlwdGlvbiwgZW5zdXJlIHlvdXIgYnJvd3NlciBpcyBjb25maWd1cmVkIHRvIHRydXN0IHRoZSBcIiArIFwiY2VydGlmaWNhdGUgTmVvNGogaXMgY29uZmlndXJlZCB0byB1c2UuIFdlYlNvY2tldCBgcmVhZHlTdGF0ZWAgaXM6IFwiICsgdGhpcy5fd3MucmVhZHlTdGF0ZSk7XG4gICAgICAgIGlmICh0aGlzLm9uZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLm9uZXJyb3IodGhpcy5fZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaXNFbmNyeXB0ZWQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0VuY3J5cHRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbmNyeXB0ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV3JpdGUgdGhlIHBhc3NlZCBpbiBidWZmZXIgdG8gY29ubmVjdGlvblxuICAgICAqIEBwYXJhbSB7SGVhcEJ1ZmZlcn0gYnVmZmVyIC0gQnVmZmVyIHRvIHdyaXRlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3dyaXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gd3JpdGUoYnVmZmVyKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBhIHBlbmRpbmcgcXVldWUsIHB1c2ggdGhpcyBvbiB0aGF0IHF1ZXVlLiBUaGlzIG1lYW5zXG4gICAgICAvLyB3ZSBhcmUgbm90IHlldCBjb25uZWN0ZWQsIHNvIHdlIHF1ZXVlIHRoaW5ncyBsb2NhbGx5LlxuICAgICAgaWYgKHRoaXMuX3BlbmRpbmcgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZy5wdXNoKGJ1ZmZlcik7XG4gICAgICB9IGVsc2UgaWYgKGJ1ZmZlciBpbnN0YW5jZW9mIF9idWYuSGVhcEJ1ZmZlcikge1xuICAgICAgICB0aGlzLl93cy5zZW5kKGJ1ZmZlci5fYnVmZmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3IubmV3RXJyb3IpKFwiRG9uJ3Qga25vdyBob3cgdG8gc2VuZCBidWZmZXI6IFwiICsgYnVmZmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZSB0aGUgY29ubmVjdGlvblxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNiIC0gRnVuY3Rpb24gdG8gY2FsbCBvbiBjbG9zZS5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY2xvc2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgIHZhciBjYiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX29wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuX3dzLmNsb3NlKCk7XG4gICAgICB0aGlzLl93cy5vbmNsb3NlID0gY2I7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBXZWJTb2NrZXRDaGFubmVsO1xufSgpOyAvKipcbiAgICAgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICAgICAgKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gICAgICAqXG4gICAgICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICAgICAgKlxuICAgICAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgICAgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAgICAgKlxuICAgICAgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gICAgICAqXG4gICAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICAgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgICAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICAgICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgICAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgICAgICovXG5cbnZhciBhdmFpbGFibGUgPSB0eXBlb2YgV2ViU29ja2V0ICE9PSAndW5kZWZpbmVkJztcbnZhciBfd2Vic29ja2V0Q2hhbm5lbE1vZHVsZSA9IHsgY2hhbm5lbDogV2ViU29ja2V0Q2hhbm5lbCwgYXZhaWxhYmxlOiBhdmFpbGFibGUgfTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gX3dlYnNvY2tldENoYW5uZWxNb2R1bGU7IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5EZWNodW5rZXIgPSBleHBvcnRzLkNodW5rZXIgPSB1bmRlZmluZWQ7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxudmFyIF9nZXRQcm90b3R5cGVPZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRQcm90b3R5cGVPZik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2syID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJyk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MnKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4nKTtcblxudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yKTtcblxudmFyIF9pbmhlcml0czIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMnKTtcblxudmFyIF9pbmhlcml0czMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmhlcml0czIpO1xuXG52YXIgX2J1ZiA9IHJlcXVpcmUoJy4vYnVmJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBfQ0hVTktfSEVBREVSX1NJWkUgPSAyLFxuICAgIF9NRVNTQUdFX0JPVU5EQVJZID0gMHgwMCxcbiAgICBfREVGQVVMVF9CVUZGRVJfU0laRSA9IDE0MDA7IC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjYxMzczNC9tYXhpbXVtLXBhY2tldC1zaXplLWZvci1hLXRjcC1jb25uZWN0aW9uXG5cbi8qKlxuICogTG9va3MgbGlrZSBhIHdyaXRhYmxlIGJ1ZmZlciwgY2h1bmtzIG91dHB1dCB0cmFuc3BhcmVudGx5IGludG8gYSBjaGFubmVsIGJlbG93LlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG52YXIgQ2h1bmtlciA9IGZ1bmN0aW9uIChfQmFzZUJ1ZmZlcikge1xuICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShDaHVua2VyLCBfQmFzZUJ1ZmZlcik7XG5cbiAgZnVuY3Rpb24gQ2h1bmtlcihjaGFubmVsLCBidWZmZXJTaXplKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgQ2h1bmtlcik7XG5cbiAgICB2YXIgX3RoaXMgPSAoMCwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zLmRlZmF1bHQpKHRoaXMsIChDaHVua2VyLl9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShDaHVua2VyKSkuY2FsbCh0aGlzLCAwKSk7XG5cbiAgICBfdGhpcy5fYnVmZmVyU2l6ZSA9IGJ1ZmZlclNpemUgfHwgX0RFRkFVTFRfQlVGRkVSX1NJWkU7XG4gICAgX3RoaXMuX2NoID0gY2hhbm5lbDtcbiAgICBfdGhpcy5fYnVmZmVyID0gKDAsIF9idWYuYWxsb2MpKF90aGlzLl9idWZmZXJTaXplKTtcbiAgICBfdGhpcy5fY3VycmVudENodW5rU3RhcnQgPSAwO1xuICAgIF90aGlzLl9jaHVua09wZW4gPSBmYWxzZTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShDaHVua2VyLCBbe1xuICAgIGtleTogJ3B1dFVJbnQ4JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHV0VUludDgocG9zaXRpb24sIHZhbCkge1xuICAgICAgdGhpcy5fZW5zdXJlKDEpO1xuICAgICAgdGhpcy5fYnVmZmVyLndyaXRlVUludDgodmFsKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdwdXRJbnQ4JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHV0SW50OChwb3NpdGlvbiwgdmFsKSB7XG4gICAgICB0aGlzLl9lbnN1cmUoMSk7XG4gICAgICB0aGlzLl9idWZmZXIud3JpdGVJbnQ4KHZhbCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncHV0RmxvYXQ2NCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHB1dEZsb2F0NjQocG9zaXRpb24sIHZhbCkge1xuICAgICAgdGhpcy5fZW5zdXJlKDgpO1xuICAgICAgdGhpcy5fYnVmZmVyLndyaXRlRmxvYXQ2NCh2YWwpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3B1dEJ5dGVzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHV0Qnl0ZXMocG9zaXRpb24sIGRhdGEpIHtcbiAgICAgIC8vIFRPRE86IElmIGRhdGEgaXMgbGFyZ2VyIHRoYW4gb3VyIGNodW5rIHNpemUgb3Igc28sIHdlJ3JlIHZlcnkgbGlrZWx5IGJldHRlciBvZmYganVzdCBwYXNzaW5nIHRoaXMgYnVmZmVyIG9uXG4gICAgICAvLyByYXRoZXIgdGhhbiBkb2luZyB0aGUgY29weSBoZXJlIFRPRE86ICpob3dldmVyKiBub3RlIHRoYXQgd2UgbmVlZCBzb21lIHdheSB0byBmaW5kIG91dCB3aGVuIHRoZSBkYXRhIGhhcyBiZWVuXG4gICAgICAvLyB3cml0dGVuIChhbmQgdGh1cyB0aGUgYnVmZmVyIGNhbiBiZSByZS11c2VkKSBpZiB3ZSB0YWtlIHRoYXQgYXBwcm9hY2hcbiAgICAgIHdoaWxlIChkYXRhLnJlbWFpbmluZygpID4gMCkge1xuICAgICAgICAvLyBFbnN1cmUgdGhlcmUgaXMgYW4gb3BlbiBjaHVuaywgYW5kIHRoYXQgaXQgaGFzIGF0IGxlYXN0IG9uZSBieXRlIG9mIHNwYWNlIGxlZnRcbiAgICAgICAgdGhpcy5fZW5zdXJlKDEpO1xuICAgICAgICBpZiAodGhpcy5fYnVmZmVyLnJlbWFpbmluZygpID4gZGF0YS5yZW1haW5pbmcoKSkge1xuICAgICAgICAgIHRoaXMuX2J1ZmZlci53cml0ZUJ5dGVzKGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2J1ZmZlci53cml0ZUJ5dGVzKGRhdGEucmVhZFNsaWNlKHRoaXMuX2J1ZmZlci5yZW1haW5pbmcoKSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdmbHVzaCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgICAgaWYgKHRoaXMuX2J1ZmZlci5wb3NpdGlvbiA+IDApIHtcbiAgICAgICAgdGhpcy5fY2xvc2VDaHVua0lmT3BlbigpO1xuXG4gICAgICAgIC8vIExvY2FsIGNvcHkgYW5kIGNsZWFyIHRoZSBidWZmZXIgZmllbGQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBidWZmZXIgaXMgbm90IHJlLXJlbGVhc2VkIGlmIHRoZSBmbHVzaCBjYWxsIGZhaWxzXG4gICAgICAgIHZhciBvdXQgPSB0aGlzLl9idWZmZXI7XG4gICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fY2gud3JpdGUob3V0LmdldFNsaWNlKDAsIG91dC5wb3NpdGlvbikpO1xuXG4gICAgICAgIC8vIEFsbG9jIGEgbmV3IG91dHB1dCBidWZmZXIuIFdlIGFzc3VtZSB3ZSdyZSB1c2luZyBOb2RlSlMncyBidWZmZXIgcG9vbGluZyB1bmRlciB0aGUgaG9vZCBoZXJlIVxuICAgICAgICB0aGlzLl9idWZmZXIgPSAoMCwgX2J1Zi5hbGxvYykodGhpcy5fYnVmZmVyU2l6ZSk7XG4gICAgICAgIHRoaXMuX2NodW5rT3BlbiA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQm9sdCBtZXNzYWdlcyBhcmUgZW5jb2RlZCBpbiBvbmUgb3IgbW9yZSBjaHVua3MsIGFuZCB0aGUgYm91bmRhcnkgYmV0d2VlbiB0d28gbWVzc2FnZXNcbiAgICAgKiBpcyBlbmNvZGVkIGFzIGEgMC1sZW5ndGggY2h1bmssIGAwMCAwMGAuIFRoaXMgaW5zZXJ0cyBzdWNoIGEgbWVzc2FnZSBib3VuZGFyeSwgY2xvc2luZ1xuICAgICAqIGFueSBjdXJyZW50bHkgb3BlbiBjaHVuayBhcyBuZWVkZWRcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnbWVzc2FnZUJvdW5kYXJ5JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbWVzc2FnZUJvdW5kYXJ5KCkge1xuXG4gICAgICB0aGlzLl9jbG9zZUNodW5rSWZPcGVuKCk7XG5cbiAgICAgIGlmICh0aGlzLl9idWZmZXIucmVtYWluaW5nKCkgPCBfQ0hVTktfSEVBREVSX1NJWkUpIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBXcml0ZSBtZXNzYWdlIGJvdW5kYXJ5XG4gICAgICB0aGlzLl9idWZmZXIud3JpdGVJbnQxNihfTUVTU0FHRV9CT1VOREFSWSk7XG4gICAgfVxuXG4gICAgLyoqIEVuc3VyZSBhdCBsZWFzdCB0aGUgZ2l2ZW4gc2l6ZSBpcyBhdmFpbGFibGUgZm9yIHdyaXRpbmcgKi9cblxuICB9LCB7XG4gICAga2V5OiAnX2Vuc3VyZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9lbnN1cmUoc2l6ZSkge1xuICAgICAgdmFyIHRvV3JpdGVTaXplID0gdGhpcy5fY2h1bmtPcGVuID8gc2l6ZSA6IHNpemUgKyBfQ0hVTktfSEVBREVSX1NJWkU7XG4gICAgICBpZiAodGhpcy5fYnVmZmVyLnJlbWFpbmluZygpIDwgdG9Xcml0ZVNpemUpIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuX2NodW5rT3Blbikge1xuICAgICAgICB0aGlzLl9jdXJyZW50Q2h1bmtTdGFydCA9IHRoaXMuX2J1ZmZlci5wb3NpdGlvbjtcbiAgICAgICAgdGhpcy5fYnVmZmVyLnBvc2l0aW9uID0gdGhpcy5fYnVmZmVyLnBvc2l0aW9uICsgX0NIVU5LX0hFQURFUl9TSVpFO1xuICAgICAgICB0aGlzLl9jaHVua09wZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19jbG9zZUNodW5rSWZPcGVuJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2Nsb3NlQ2h1bmtJZk9wZW4oKSB7XG4gICAgICBpZiAodGhpcy5fY2h1bmtPcGVuKSB7XG4gICAgICAgIHZhciBjaHVua1NpemUgPSB0aGlzLl9idWZmZXIucG9zaXRpb24gLSAodGhpcy5fY3VycmVudENodW5rU3RhcnQgKyBfQ0hVTktfSEVBREVSX1NJWkUpO1xuICAgICAgICB0aGlzLl9idWZmZXIucHV0VUludDE2KHRoaXMuX2N1cnJlbnRDaHVua1N0YXJ0LCBjaHVua1NpemUpO1xuICAgICAgICB0aGlzLl9jaHVua09wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIENodW5rZXI7XG59KF9idWYuQmFzZUJ1ZmZlcik7XG5cbi8qKlxuICogQ29tYmluZXMgY2h1bmtzIHVudGlsIGEgY29tcGxldGUgbWVzc2FnZSBpcyBnYXRoZXJlZCB1cCwgYW5kIHRoZW4gZm9yd2FyZHMgdGhhdFxuICogbWVzc2FnZSB0byBhbiAnb25tZXNzYWdlJyBsaXN0ZW5lci5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovXG5cblxudmFyIERlY2h1bmtlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRGVjaHVua2VyKCkge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIERlY2h1bmtlcik7XG5cbiAgICB0aGlzLl9jdXJyZW50TWVzc2FnZSA9IFtdO1xuICAgIHRoaXMuX3BhcnRpYWxDaHVua0hlYWRlciA9IDA7XG4gICAgdGhpcy5fc3RhdGUgPSB0aGlzLkFXQUlUSU5HX0NIVU5LO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoRGVjaHVua2VyLCBbe1xuICAgIGtleTogJ0FXQUlUSU5HX0NIVU5LJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gQVdBSVRJTkdfQ0hVTksoYnVmKSB7XG4gICAgICBpZiAoYnVmLnJlbWFpbmluZygpID49IDIpIHtcbiAgICAgICAgLy8gV2hvbGUgaGVhZGVyIGF2YWlsYWJsZSwgcmVhZCB0aGF0XG4gICAgICAgIHJldHVybiB0aGlzLl9vbkhlYWRlcihidWYucmVhZFVJbnQxNigpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE9ubHkgb25lIGJ5dGUgYXZhaWxhYmxlLCByZWFkIHRoYXQgYW5kIHdhaXQgZm9yIHRoZSBzZWNvbmQgYnl0ZVxuICAgICAgICB0aGlzLl9wYXJ0aWFsQ2h1bmtIZWFkZXIgPSBidWYucmVhZFVJbnQ4KCkgPDwgODtcbiAgICAgICAgcmV0dXJuIHRoaXMuSU5fSEVBREVSO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ0lOX0hFQURFUicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIElOX0hFQURFUihidWYpIHtcbiAgICAgIC8vIEZpcnN0IGhlYWRlciBieXRlIHJlYWQsIG5vdyB3ZSByZWFkIHRoZSBuZXh0IG9uZVxuICAgICAgcmV0dXJuIHRoaXMuX29uSGVhZGVyKCh0aGlzLl9wYXJ0aWFsQ2h1bmtIZWFkZXIgfCBidWYucmVhZFVJbnQ4KCkpICYgMHhGRkZGKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdJTl9DSFVOSycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIElOX0NIVU5LKGJ1Zikge1xuICAgICAgaWYgKHRoaXMuX2NodW5rU2l6ZSA8PSBidWYucmVtYWluaW5nKCkpIHtcbiAgICAgICAgLy8gQ3VycmVudCBwYWNrZXQgaXMgbGFyZ2VyIHRoYW4gY3VycmVudCBjaHVuaywgb3Igc2FtZSBzaXplOlxuICAgICAgICB0aGlzLl9jdXJyZW50TWVzc2FnZS5wdXNoKGJ1Zi5yZWFkU2xpY2UodGhpcy5fY2h1bmtTaXplKSk7XG4gICAgICAgIHJldHVybiB0aGlzLkFXQUlUSU5HX0NIVU5LO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ3VycmVudCBwYWNrZXQgaXMgc21hbGxlciB0aGFuIHRoZSBjaHVuayB3ZSdyZSByZWFkaW5nLCBzcGxpdCB0aGUgY3VycmVudCBjaHVuayBpdHNlbGYgdXBcbiAgICAgICAgdGhpcy5fY2h1bmtTaXplIC09IGJ1Zi5yZW1haW5pbmcoKTtcbiAgICAgICAgdGhpcy5fY3VycmVudE1lc3NhZ2UucHVzaChidWYucmVhZFNsaWNlKGJ1Zi5yZW1haW5pbmcoKSkpO1xuICAgICAgICByZXR1cm4gdGhpcy5JTl9DSFVOSztcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdDTE9TRUQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBDTE9TRUQoYnVmKSB7fVxuICAgIC8vIG5vLW9wXG5cblxuICAgIC8qKiBDYWxsZWQgd2hlbiBhIGNvbXBsZXRlIGNodW5rIGhlYWRlciBoYXMgYmVlbiByZWNpZXZlZCAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdfb25IZWFkZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfb25IZWFkZXIoaGVhZGVyKSB7XG4gICAgICBpZiAoaGVhZGVyID09IDApIHtcbiAgICAgICAgLy8gTWVzc2FnZSBib3VuZGFyeVxuICAgICAgICB2YXIgbWVzc2FnZSA9IHZvaWQgMDtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRNZXNzYWdlLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgbWVzc2FnZSA9IHRoaXMuX2N1cnJlbnRNZXNzYWdlWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lc3NhZ2UgPSBuZXcgX2J1Zi5Db21iaW5lZEJ1ZmZlcih0aGlzLl9jdXJyZW50TWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3VycmVudE1lc3NhZ2UgPSBbXTtcbiAgICAgICAgdGhpcy5vbm1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgIHJldHVybiB0aGlzLkFXQUlUSU5HX0NIVU5LO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fY2h1bmtTaXplID0gaGVhZGVyO1xuICAgICAgICByZXR1cm4gdGhpcy5JTl9DSFVOSztcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICd3cml0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHdyaXRlKGJ1Zikge1xuICAgICAgd2hpbGUgKGJ1Zi5oYXNSZW1haW5pbmcoKSkge1xuICAgICAgICB0aGlzLl9zdGF0ZSA9IHRoaXMuX3N0YXRlKGJ1Zik7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBEZWNodW5rZXI7XG59KCk7XG5cbmV4cG9ydHMuQ2h1bmtlciA9IENodW5rZXI7XG5leHBvcnRzLkRlY2h1bmtlciA9IERlY2h1bmtlcjsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkVNUFRZX0NPTk5FQ1RJT05fSE9MREVSID0gdW5kZWZpbmVkO1xuXG52YXIgX2dldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mJyk7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0UHJvdG90eXBlT2YpO1xuXG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4nKTtcblxudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yKTtcblxudmFyIF9pbmhlcml0czIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMnKTtcblxudmFyIF9pbmhlcml0czMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmhlcml0czIpO1xuXG52YXIgX3Byb21pc2UgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZScpO1xuXG52YXIgX3Byb21pc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvbWlzZSk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2syID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJyk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MnKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX2Vycm9yID0gcmVxdWlyZSgnLi4vZXJyb3InKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBVdGlsaXR5IHRvIGxhemlseSBpbml0aWFsaXplIGNvbm5lY3Rpb25zIGFuZCByZXR1cm4gdGhlbSBiYWNrIHRvIHRoZSBwb29sIHdoZW4gdW51c2VkLlxuICovXG52YXIgQ29ubmVjdGlvbkhvbGRlciA9IGZ1bmN0aW9uICgpIHtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlIC0gdGhlIGFjY2VzcyBtb2RlIGZvciBuZXcgY29ubmVjdGlvbiBob2xkZXIuXG4gICAqIEBwYXJhbSB7Q29ubmVjdGlvblByb3ZpZGVyfSBjb25uZWN0aW9uUHJvdmlkZXIgLSB0aGUgY29ubmVjdGlvbiBwcm92aWRlciB0byBhY3F1aXJlIGNvbm5lY3Rpb25zIGZyb20uXG4gICAqL1xuICBmdW5jdGlvbiBDb25uZWN0aW9uSG9sZGVyKG1vZGUsIGNvbm5lY3Rpb25Qcm92aWRlcikge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIENvbm5lY3Rpb25Ib2xkZXIpO1xuXG4gICAgdGhpcy5fbW9kZSA9IG1vZGU7XG4gICAgdGhpcy5fY29ubmVjdGlvblByb3ZpZGVyID0gY29ubmVjdGlvblByb3ZpZGVyO1xuICAgIHRoaXMuX3JlZmVyZW5jZUNvdW50ID0gMDtcbiAgICB0aGlzLl9jb25uZWN0aW9uUHJvbWlzZSA9IF9wcm9taXNlMi5kZWZhdWx0LnJlc29sdmUobnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSB0aGlzIGhvbGRlciBpbml0aWFsaXplIG5ldyBjb25uZWN0aW9uIGlmIG5vbmUgZXhpc3RzIGFscmVhZHkuXG4gICAqIEByZXR1cm4ge3VuZGVmaW5lZH1cbiAgICovXG5cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShDb25uZWN0aW9uSG9sZGVyLCBbe1xuICAgIGtleTogJ2luaXRpYWxpemVDb25uZWN0aW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdGlhbGl6ZUNvbm5lY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fcmVmZXJlbmNlQ291bnQgPT09IDApIHtcbiAgICAgICAgdGhpcy5fY29ubmVjdGlvblByb21pc2UgPSB0aGlzLl9jb25uZWN0aW9uUHJvdmlkZXIuYWNxdWlyZUNvbm5lY3Rpb24odGhpcy5fbW9kZSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9yZWZlcmVuY2VDb3VudCsrO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgY3VycmVudCBjb25uZWN0aW9uIHByb21pc2UuXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxDb25uZWN0aW9uPn0gcHJvbWlzZSByZXNvbHZlZCB3aXRoIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24uXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2dldENvbm5lY3Rpb24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDb25uZWN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vdGlmeSB0aGlzIGhvbGRlciB0aGF0IHNpbmdsZSBwYXJ0eSBkb2VzIG5vdCByZXF1aXJlIGN1cnJlbnQgY29ubmVjdGlvbiBhbnkgbW9yZS5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPENvbm5lY3Rpb24+fSBwcm9taXNlIHJlc29sdmVkIHdpdGggdGhlIGN1cnJlbnQgY29ubmVjdGlvbi5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAncmVsZWFzZUNvbm5lY3Rpb24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWxlYXNlQ29ubmVjdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLl9yZWZlcmVuY2VDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblByb21pc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3JlZmVyZW5jZUNvdW50LS07XG4gICAgICBpZiAodGhpcy5fcmVmZXJlbmNlQ291bnQgPT09IDApIHtcbiAgICAgICAgLy8gcmVsZWFzZSBhIGNvbm5lY3Rpb24gd2l0aG91dCBtdXRpbmcgQUNLX0ZBSUxVUkUsIHRoaXMgaXMgdGhlIGxhc3QgYWN0aW9uIG9uIHRoaXMgY29ubmVjdGlvblxuICAgICAgICByZXR1cm4gdGhpcy5fcmVsZWFzZUNvbm5lY3Rpb24odHJ1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoaXMgaG9sZGVyIGFuZCByZWxlYXNlcyBjdXJyZW50IGNvbm5lY3Rpb24gKGlmIGFueSkgZGVzcGl0ZSBhbnkgZXhpc3RpbmcgdXNlcnMuXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxDb25uZWN0aW9uPn0gcHJvbWlzZSByZXNvbHZlZCB3aGVuIGN1cnJlbnQgY29ubmVjdGlvbiBpcyByZWxlYXNlZCB0byB0aGUgcG9vbC5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY2xvc2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgIGlmICh0aGlzLl9yZWZlcmVuY2VDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblByb21pc2U7XG4gICAgICB9XG4gICAgICB0aGlzLl9yZWZlcmVuY2VDb3VudCA9IDA7XG4gICAgICAvLyByZWxlYXNlIGEgY29ubmVjdGlvbiBhbmQgbXV0ZSBBQ0tfRkFJTFVSRSwgdGhpcyBtaWdodCBiZSBjYWxsZWQgY29uY3VycmVudGx5IHdpdGggb3RoZXJcbiAgICAgIC8vIG9wZXJhdGlvbnMgYW5kIHRodXMgc2hvdWxkIGlnbm9yZSBmYWlsdXJlIGhhbmRsaW5nXG4gICAgICByZXR1cm4gdGhpcy5fcmVsZWFzZUNvbm5lY3Rpb24oZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgY3VycmVudCBwb29sZWQgY29ubmVjdGlvbiBpbnN0YW5jZSB0byB0aGUgY29ubmVjdGlvbiBwb29sLlxuICAgICAqIFdlIGRvbid0IHBvb2wgU2Vzc2lvbiBpbnN0YW5jZXMsIHRvIGF2b2lkIHVzZXJzIHVzaW5nIHRoZSBTZXNzaW9uIGFmdGVyIHRoZXkndmUgY2FsbGVkIGNsb3NlLlxuICAgICAqIFRoZSBgU2Vzc2lvbmAgb2JqZWN0IGlzIGp1c3QgYSB0aGluIHdyYXBwZXIgYXJvdW5kIENvbm5lY3Rpb24gYW55d2F5LCBzbyBpdCBtYWtlcyBsaXR0bGUgZGlmZmVyZW5jZS5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSAtIHByb21pc2UgcmVzb2x2ZWQgdGhlbiBjb25uZWN0aW9uIGlzIHJldHVybmVkIHRvIHRoZSBwb29sLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ19yZWxlYXNlQ29ubmVjdGlvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9yZWxlYXNlQ29ubmVjdGlvbihzeW5jKSB7XG4gICAgICB0aGlzLl9jb25uZWN0aW9uUHJvbWlzZSA9IHRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlLnRoZW4oZnVuY3Rpb24gKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgaWYgKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgY29ubmVjdGlvbi5yZXNldCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25uZWN0aW9uLnJlc2V0QXN5bmMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29ubmVjdGlvbi5zeW5jKCk7XG4gICAgICAgICAgY29ubmVjdGlvbi5fcmVsZWFzZSgpO1xuICAgICAgICB9XG4gICAgICB9KS5jYXRjaChmdW5jdGlvbiAoaWdub3JlZEVycm9yKSB7fSk7XG5cbiAgICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uUHJvbWlzZTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIENvbm5lY3Rpb25Ib2xkZXI7XG59KCk7IC8qKlxuICAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gICAgICAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAgICAgICpcbiAgICAgICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gICAgICAqXG4gICAgICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgICAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICAgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gICAgICAqXG4gICAgICAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAgICAgICpcbiAgICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgICAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgICAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAgICAgKi9cblxuZXhwb3J0cy5kZWZhdWx0ID0gQ29ubmVjdGlvbkhvbGRlcjtcblxudmFyIEVtcHR5Q29ubmVjdGlvbkhvbGRlciA9IGZ1bmN0aW9uIChfQ29ubmVjdGlvbkhvbGRlcikge1xuICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShFbXB0eUNvbm5lY3Rpb25Ib2xkZXIsIF9Db25uZWN0aW9uSG9sZGVyKTtcblxuICBmdW5jdGlvbiBFbXB0eUNvbm5lY3Rpb25Ib2xkZXIoKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgRW1wdHlDb25uZWN0aW9uSG9sZGVyKTtcbiAgICByZXR1cm4gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoRW1wdHlDb25uZWN0aW9uSG9sZGVyLl9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShFbXB0eUNvbm5lY3Rpb25Ib2xkZXIpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKEVtcHR5Q29ubmVjdGlvbkhvbGRlciwgW3tcbiAgICBrZXk6ICdpbml0aWFsaXplQ29ubmVjdGlvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXRpYWxpemVDb25uZWN0aW9uKCkge1xuICAgICAgLy8gbm90aGluZyB0byBpbml0aWFsaXplXG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0Q29ubmVjdGlvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldENvbm5lY3Rpb24oKSB7XG4gICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQucmVqZWN0KCgwLCBfZXJyb3IubmV3RXJyb3IpKCdUaGlzIGNvbm5lY3Rpb24gaG9sZGVyIGRvZXMgbm90IHNlcnZlIGNvbm5lY3Rpb25zJykpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbGVhc2VDb25uZWN0aW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVsZWFzZUNvbm5lY3Rpb24oKSB7XG4gICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQucmVzb2x2ZSgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2Nsb3NlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQucmVzb2x2ZSgpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gRW1wdHlDb25uZWN0aW9uSG9sZGVyO1xufShDb25uZWN0aW9uSG9sZGVyKTtcblxuLyoqXG4gKiBDb25uZWN0aW9uIGhvbGRlciB0aGF0IGRvZXMgbm90IG1hbmFnZSBhbnkgY29ubmVjdGlvbnMuXG4gKiBAdHlwZSB7Q29ubmVjdGlvbkhvbGRlcn1cbiAqL1xuXG5cbnZhciBFTVBUWV9DT05ORUNUSU9OX0hPTERFUiA9IGV4cG9ydHMuRU1QVFlfQ09OTkVDVElPTl9IT0xERVIgPSBuZXcgRW1wdHlDb25uZWN0aW9uSG9sZGVyKCk7IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5TaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIgPSBleHBvcnRzLkxvYWRCYWxhbmNlciA9IGV4cG9ydHMuRGlyZWN0Q29ubmVjdGlvblByb3ZpZGVyID0gdW5kZWZpbmVkO1xuXG52YXIgX3Byb21pc2UgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZScpO1xuXG52YXIgX3Byb21pc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvbWlzZSk7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxudmFyIF9nZXRQcm90b3R5cGVPZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRQcm90b3R5cGVPZik7XG5cbnZhciBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybicpO1xuXG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIpO1xuXG52YXIgX2luaGVyaXRzMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cycpO1xuXG52YXIgX2luaGVyaXRzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luaGVyaXRzMik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2syID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJyk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MnKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX2Vycm9yID0gcmVxdWlyZSgnLi4vZXJyb3InKTtcblxudmFyIF9kcml2ZXIgPSByZXF1aXJlKCcuLi9kcml2ZXInKTtcblxudmFyIF9zZXNzaW9uID0gcmVxdWlyZSgnLi4vc2Vzc2lvbicpO1xuXG52YXIgX3Nlc3Npb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2Vzc2lvbik7XG5cbnZhciBfcm91bmRSb2JpbkFycmF5ID0gcmVxdWlyZSgnLi9yb3VuZC1yb2Jpbi1hcnJheScpO1xuXG52YXIgX3JvdW5kUm9iaW5BcnJheTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yb3VuZFJvYmluQXJyYXkpO1xuXG52YXIgX3JvdXRpbmdUYWJsZSA9IHJlcXVpcmUoJy4vcm91dGluZy10YWJsZScpO1xuXG52YXIgX3JvdXRpbmdUYWJsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yb3V0aW5nVGFibGUpO1xuXG52YXIgX3JlZGlzY292ZXJ5ID0gcmVxdWlyZSgnLi9yZWRpc2NvdmVyeScpO1xuXG52YXIgX3JlZGlzY292ZXJ5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlZGlzY292ZXJ5KTtcblxudmFyIF9mZWF0dXJlcyA9IHJlcXVpcmUoJy4vZmVhdHVyZXMnKTtcblxudmFyIF9mZWF0dXJlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9mZWF0dXJlcyk7XG5cbnZhciBfaG9zdE5hbWVSZXNvbHZlcnMgPSByZXF1aXJlKCcuL2hvc3QtbmFtZS1yZXNvbHZlcnMnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBDb25uZWN0aW9uUHJvdmlkZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENvbm5lY3Rpb25Qcm92aWRlcigpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBDb25uZWN0aW9uUHJvdmlkZXIpO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoQ29ubmVjdGlvblByb3ZpZGVyLCBbe1xuICAgIGtleTogJ2FjcXVpcmVDb25uZWN0aW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWNxdWlyZUNvbm5lY3Rpb24obW9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBYnN0cmFjdCBmdW5jdGlvbicpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ193aXRoQWRkaXRpb25hbE9uRXJyb3JDYWxsYmFjaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF93aXRoQWRkaXRpb25hbE9uRXJyb3JDYWxsYmFjayhjb25uZWN0aW9uUHJvbWlzZSwgZHJpdmVyT25FcnJvckNhbGxiYWNrKSB7XG4gICAgICAvLyBpbnN0YWxsIGVycm9yIGhhbmRsZXIgZnJvbSB0aGUgZHJpdmVyIG9uIHRoZSBjb25uZWN0aW9uIHByb21pc2U7IHRoaXMgY2FsbGJhY2sgaXMgaW5zdGFsbGVkIHNlcGFyYXRlbHlcbiAgICAgIC8vIHNvIHRoYXQgaXQgZG9lcyBub3QgaGFuZGxlIGVycm9ycywgaW5zdGVhZCBpdCBpcyBqdXN0IGFuIGFkZGl0aW9uYWwgZXJyb3IgcmVwb3J0aW5nIGZhY2lsaXR5LlxuICAgICAgY29ubmVjdGlvblByb21pc2UuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGRyaXZlck9uRXJyb3JDYWxsYmFjayhlcnJvcik7XG4gICAgICB9KTtcbiAgICAgIC8vIHJldHVybiB0aGUgb3JpZ2luYWwgY29ubmVjdGlvbiBwcm9taXNlXG4gICAgICByZXR1cm4gY29ubmVjdGlvblByb21pc2U7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBDb25uZWN0aW9uUHJvdmlkZXI7XG59KCk7XG5cbnZhciBEaXJlY3RDb25uZWN0aW9uUHJvdmlkZXIgPSBleHBvcnRzLkRpcmVjdENvbm5lY3Rpb25Qcm92aWRlciA9IGZ1bmN0aW9uIChfQ29ubmVjdGlvblByb3ZpZGVyKSB7XG4gICgwLCBfaW5oZXJpdHMzLmRlZmF1bHQpKERpcmVjdENvbm5lY3Rpb25Qcm92aWRlciwgX0Nvbm5lY3Rpb25Qcm92aWRlcik7XG5cbiAgZnVuY3Rpb24gRGlyZWN0Q29ubmVjdGlvblByb3ZpZGVyKGFkZHJlc3MsIGNvbm5lY3Rpb25Qb29sLCBkcml2ZXJPbkVycm9yQ2FsbGJhY2spIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBEaXJlY3RDb25uZWN0aW9uUHJvdmlkZXIpO1xuXG4gICAgdmFyIF90aGlzID0gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoRGlyZWN0Q29ubmVjdGlvblByb3ZpZGVyLl9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShEaXJlY3RDb25uZWN0aW9uUHJvdmlkZXIpKS5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzLl9hZGRyZXNzID0gYWRkcmVzcztcbiAgICBfdGhpcy5fY29ubmVjdGlvblBvb2wgPSBjb25uZWN0aW9uUG9vbDtcbiAgICBfdGhpcy5fZHJpdmVyT25FcnJvckNhbGxiYWNrID0gZHJpdmVyT25FcnJvckNhbGxiYWNrO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKERpcmVjdENvbm5lY3Rpb25Qcm92aWRlciwgW3tcbiAgICBrZXk6ICdhY3F1aXJlQ29ubmVjdGlvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFjcXVpcmVDb25uZWN0aW9uKG1vZGUpIHtcbiAgICAgIHZhciBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvblBvb2wuYWNxdWlyZSh0aGlzLl9hZGRyZXNzKTtcbiAgICAgIHZhciBjb25uZWN0aW9uUHJvbWlzZSA9IF9wcm9taXNlMi5kZWZhdWx0LnJlc29sdmUoY29ubmVjdGlvbik7XG4gICAgICByZXR1cm4gdGhpcy5fd2l0aEFkZGl0aW9uYWxPbkVycm9yQ2FsbGJhY2soY29ubmVjdGlvblByb21pc2UsIHRoaXMuX2RyaXZlck9uRXJyb3JDYWxsYmFjayk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBEaXJlY3RDb25uZWN0aW9uUHJvdmlkZXI7XG59KENvbm5lY3Rpb25Qcm92aWRlcik7XG5cbnZhciBMb2FkQmFsYW5jZXIgPSBleHBvcnRzLkxvYWRCYWxhbmNlciA9IGZ1bmN0aW9uIChfQ29ubmVjdGlvblByb3ZpZGVyMikge1xuICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShMb2FkQmFsYW5jZXIsIF9Db25uZWN0aW9uUHJvdmlkZXIyKTtcblxuICBmdW5jdGlvbiBMb2FkQmFsYW5jZXIoYWRkcmVzcywgY29ubmVjdGlvblBvb2wsIGRyaXZlck9uRXJyb3JDYWxsYmFjaykge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIExvYWRCYWxhbmNlcik7XG5cbiAgICB2YXIgX3RoaXMyID0gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoTG9hZEJhbGFuY2VyLl9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShMb2FkQmFsYW5jZXIpKS5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzMi5fc2VlZFJvdXRlciA9IGFkZHJlc3M7XG4gICAgX3RoaXMyLl9yb3V0aW5nVGFibGUgPSBuZXcgX3JvdXRpbmdUYWJsZTIuZGVmYXVsdChuZXcgX3JvdW5kUm9iaW5BcnJheTIuZGVmYXVsdChbX3RoaXMyLl9zZWVkUm91dGVyXSkpO1xuICAgIF90aGlzMi5fcmVkaXNjb3ZlcnkgPSBuZXcgX3JlZGlzY292ZXJ5Mi5kZWZhdWx0KCk7XG4gICAgX3RoaXMyLl9jb25uZWN0aW9uUG9vbCA9IGNvbm5lY3Rpb25Qb29sO1xuICAgIF90aGlzMi5fZHJpdmVyT25FcnJvckNhbGxiYWNrID0gZHJpdmVyT25FcnJvckNhbGxiYWNrO1xuICAgIF90aGlzMi5faG9zdE5hbWVSZXNvbHZlciA9IExvYWRCYWxhbmNlci5fY3JlYXRlSG9zdE5hbWVSZXNvbHZlcigpO1xuICAgIHJldHVybiBfdGhpczI7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShMb2FkQmFsYW5jZXIsIFt7XG4gICAga2V5OiAnYWNxdWlyZUNvbm5lY3Rpb24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhY3F1aXJlQ29ubmVjdGlvbihtb2RlKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIGNvbm5lY3Rpb25Qcm9taXNlID0gdGhpcy5fZnJlc2hSb3V0aW5nVGFibGUoKS50aGVuKGZ1bmN0aW9uIChyb3V0aW5nVGFibGUpIHtcbiAgICAgICAgaWYgKG1vZGUgPT09IF9kcml2ZXIuUkVBRCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczMuX2FjcXVpcmVDb25uZWN0aW9uVG9TZXJ2ZXIocm91dGluZ1RhYmxlLnJlYWRlcnMsICdyZWFkJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gX2RyaXZlci5XUklURSkge1xuICAgICAgICAgIHJldHVybiBfdGhpczMuX2FjcXVpcmVDb25uZWN0aW9uVG9TZXJ2ZXIocm91dGluZ1RhYmxlLndyaXRlcnMsICd3cml0ZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93ICgwLCBfZXJyb3IubmV3RXJyb3IpKCdJbGxlZ2FsIG1vZGUgJyArIG1vZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0aGlzLl93aXRoQWRkaXRpb25hbE9uRXJyb3JDYWxsYmFjayhjb25uZWN0aW9uUHJvbWlzZSwgdGhpcy5fZHJpdmVyT25FcnJvckNhbGxiYWNrKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdmb3JnZXQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JnZXQoYWRkcmVzcykge1xuICAgICAgdGhpcy5fcm91dGluZ1RhYmxlLmZvcmdldChhZGRyZXNzKTtcbiAgICAgIHRoaXMuX2Nvbm5lY3Rpb25Qb29sLnB1cmdlKGFkZHJlc3MpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2ZvcmdldFdyaXRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvcmdldFdyaXRlcihhZGRyZXNzKSB7XG4gICAgICB0aGlzLl9yb3V0aW5nVGFibGUuZm9yZ2V0V3JpdGVyKGFkZHJlc3MpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19hY3F1aXJlQ29ubmVjdGlvblRvU2VydmVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2FjcXVpcmVDb25uZWN0aW9uVG9TZXJ2ZXIoc2VydmVyc1JvdW5kUm9iaW5BcnJheSwgc2VydmVyTmFtZSkge1xuICAgICAgdmFyIGFkZHJlc3MgPSBzZXJ2ZXJzUm91bmRSb2JpbkFycmF5Lm5leHQoKTtcbiAgICAgIGlmICghYWRkcmVzcykge1xuICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQucmVqZWN0KCgwLCBfZXJyb3IubmV3RXJyb3IpKCdObyAnICsgc2VydmVyTmFtZSArICcgc2VydmVycyBhdmFpbGFibGUnLCBfZXJyb3IuU0VTU0lPTl9FWFBJUkVEKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblBvb2wuYWNxdWlyZShhZGRyZXNzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZnJlc2hSb3V0aW5nVGFibGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZnJlc2hSb3V0aW5nVGFibGUoKSB7XG4gICAgICB2YXIgY3VycmVudFJvdXRpbmdUYWJsZSA9IHRoaXMuX3JvdXRpbmdUYWJsZTtcblxuICAgICAgaWYgKCFjdXJyZW50Um91dGluZ1RhYmxlLmlzU3RhbGUoKSkge1xuICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQucmVzb2x2ZShjdXJyZW50Um91dGluZ1RhYmxlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9yZWZyZXNoUm91dGluZ1RhYmxlKGN1cnJlbnRSb3V0aW5nVGFibGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19yZWZyZXNoUm91dGluZ1RhYmxlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3JlZnJlc2hSb3V0aW5nVGFibGUoY3VycmVudFJvdXRpbmdUYWJsZSkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHZhciBrbm93blJvdXRlcnMgPSBjdXJyZW50Um91dGluZ1RhYmxlLnJvdXRlcnMudG9BcnJheSgpO1xuXG4gICAgICByZXR1cm4gdGhpcy5fZmV0Y2hOZXdSb3V0aW5nVGFibGUoa25vd25Sb3V0ZXJzLCBjdXJyZW50Um91dGluZ1RhYmxlKS50aGVuKGZ1bmN0aW9uIChuZXdSb3V0aW5nVGFibGUpIHtcbiAgICAgICAgaWYgKExvYWRCYWxhbmNlci5faXNWYWxpZFJvdXRpbmdUYWJsZShuZXdSb3V0aW5nVGFibGUpKSB7XG4gICAgICAgICAgLy8gb25lIG9mIHRoZSBrbm93biByb3V0ZXJzIHJldHVybmVkIGEgdmFsaWQgcm91dGluZyB0YWJsZSAtIHVzZSBpdFxuICAgICAgICAgIHJldHVybiBuZXdSb3V0aW5nVGFibGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5ld1JvdXRpbmdUYWJsZSkge1xuICAgICAgICAgIC8vIHJldHVybmVkIHJvdXRpbmcgdGFibGUgd2FzIHVuZGVmaW5lZCwgdGhpcyBtZWFucyBhIGNvbm5lY3Rpb24gZXJyb3IgaGFwcGVuZWQgYW5kIHRoZSBsYXN0IGtub3duXG4gICAgICAgICAgLy8gcm91dGVyIGRpZCBub3QgcmV0dXJuIGEgdmFsaWQgcm91dGluZyB0YWJsZSwgc28gd2UgbmVlZCB0byBmb3JnZXQgaXRcbiAgICAgICAgICB2YXIgbGFzdFJvdXRlckluZGV4ID0ga25vd25Sb3V0ZXJzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgTG9hZEJhbGFuY2VyLl9mb3JnZXRSb3V0ZXIoY3VycmVudFJvdXRpbmdUYWJsZSwga25vd25Sb3V0ZXJzLCBsYXN0Um91dGVySW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm9uZSBvZiB0aGUga25vd24gcm91dGVycyByZXR1cm5lZCBhIHZhbGlkIHJvdXRpbmcgdGFibGUgLSB0cnkgdG8gdXNlIHNlZWQgcm91dGVyIGFkZHJlc3MgZm9yIHJlZGlzY292ZXJ5XG4gICAgICAgIHJldHVybiBfdGhpczQuX2ZldGNoTmV3Um91dGluZ1RhYmxlVXNpbmdTZWVkUm91dGVyQWRkcmVzcyhrbm93blJvdXRlcnMsIF90aGlzNC5fc2VlZFJvdXRlcik7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChuZXdSb3V0aW5nVGFibGUpIHtcbiAgICAgICAgaWYgKExvYWRCYWxhbmNlci5faXNWYWxpZFJvdXRpbmdUYWJsZShuZXdSb3V0aW5nVGFibGUpKSB7XG4gICAgICAgICAgX3RoaXM0Ll91cGRhdGVSb3V0aW5nVGFibGUobmV3Um91dGluZ1RhYmxlKTtcbiAgICAgICAgICByZXR1cm4gbmV3Um91dGluZ1RhYmxlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm9uZSBvZiB0aGUgZXhpc3Rpbmcgcm91dGVycyByZXR1cm5lZCB2YWxpZCByb3V0aW5nIHRhYmxlLCB0aHJvdyBleGNlcHRpb25cbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvci5uZXdFcnJvcikoJ0NvdWxkIG5vdCBwZXJmb3JtIGRpc2NvdmVyeS4gTm8gcm91dGluZyBzZXJ2ZXJzIGF2YWlsYWJsZS4nLCBfZXJyb3IuU0VSVklDRV9VTkFWQUlMQUJMRSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZmV0Y2hOZXdSb3V0aW5nVGFibGVVc2luZ1NlZWRSb3V0ZXJBZGRyZXNzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2ZldGNoTmV3Um91dGluZ1RhYmxlVXNpbmdTZWVkUm91dGVyQWRkcmVzcyhrbm93blJvdXRlcnMsIHNlZWRSb3V0ZXIpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICByZXR1cm4gdGhpcy5faG9zdE5hbWVSZXNvbHZlci5yZXNvbHZlKHNlZWRSb3V0ZXIpLnRoZW4oZnVuY3Rpb24gKHJlc29sdmVkUm91dGVyQWRkcmVzc2VzKSB7XG4gICAgICAgIC8vIGZpbHRlciBvdXQgYWxsIGFkZHJlc3NlcyB0aGF0IHdlJ3ZlIGFscmVhZHkgdHJpZWRcbiAgICAgICAgdmFyIG5ld0FkZHJlc3NlcyA9IHJlc29sdmVkUm91dGVyQWRkcmVzc2VzLmZpbHRlcihmdW5jdGlvbiAoYWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBrbm93blJvdXRlcnMuaW5kZXhPZihhZGRyZXNzKSA8IDA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM1Ll9mZXRjaE5ld1JvdXRpbmdUYWJsZShuZXdBZGRyZXNzZXMsIG51bGwpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2ZldGNoTmV3Um91dGluZ1RhYmxlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2ZldGNoTmV3Um91dGluZ1RhYmxlKHJvdXRlckFkZHJlc3Nlcywgcm91dGluZ1RhYmxlKSB7XG4gICAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgICAgcmV0dXJuIHJvdXRlckFkZHJlc3Nlcy5yZWR1Y2UoZnVuY3Rpb24gKHJlZnJlc2hlZFRhYmxlUHJvbWlzZSwgY3VycmVudFJvdXRlciwgY3VycmVudEluZGV4KSB7XG4gICAgICAgIHJldHVybiByZWZyZXNoZWRUYWJsZVByb21pc2UudGhlbihmdW5jdGlvbiAobmV3Um91dGluZ1RhYmxlKSB7XG4gICAgICAgICAgaWYgKG5ld1JvdXRpbmdUYWJsZSkge1xuICAgICAgICAgICAgaWYgKCFuZXdSb3V0aW5nVGFibGUud3JpdGVycy5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgICAgLy8gdmFsaWQgcm91dGluZyB0YWJsZSB3YXMgZmV0Y2hlZCAtIGp1c3QgcmV0dXJuIGl0LCB0cnkgbmV4dCByb3V0ZXIgb3RoZXJ3aXNlXG4gICAgICAgICAgICAgIHJldHVybiBuZXdSb3V0aW5nVGFibGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJldHVybmVkIHJvdXRpbmcgdGFibGUgd2FzIHVuZGVmaW5lZCwgdGhpcyBtZWFucyBhIGNvbm5lY3Rpb24gZXJyb3IgaGFwcGVuZWQgYW5kIHdlIG5lZWQgdG8gZm9yZ2V0IHRoZVxuICAgICAgICAgICAgLy8gcHJldmlvdXMgcm91dGVyIGFuZCB0cnkgdGhlIG5leHQgb25lXG4gICAgICAgICAgICB2YXIgcHJldmlvdXNSb3V0ZXJJbmRleCA9IGN1cnJlbnRJbmRleCAtIDE7XG4gICAgICAgICAgICBMb2FkQmFsYW5jZXIuX2ZvcmdldFJvdXRlcihyb3V0aW5nVGFibGUsIHJvdXRlckFkZHJlc3NlcywgcHJldmlvdXNSb3V0ZXJJbmRleCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gdHJ5IG5leHQgcm91dGVyXG4gICAgICAgICAgdmFyIHNlc3Npb24gPSBfdGhpczYuX2NyZWF0ZVNlc3Npb25Gb3JSZWRpc2NvdmVyeShjdXJyZW50Um91dGVyKTtcbiAgICAgICAgICByZXR1cm4gX3RoaXM2Ll9yZWRpc2NvdmVyeS5sb29rdXBSb3V0aW5nVGFibGVPblJvdXRlcihzZXNzaW9uLCBjdXJyZW50Um91dGVyKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBfcHJvbWlzZTIuZGVmYXVsdC5yZXNvbHZlKG51bGwpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfY3JlYXRlU2Vzc2lvbkZvclJlZGlzY292ZXJ5JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2NyZWF0ZVNlc3Npb25Gb3JSZWRpc2NvdmVyeShyb3V0ZXJBZGRyZXNzKSB7XG4gICAgICB2YXIgY29ubmVjdGlvbiA9IHRoaXMuX2Nvbm5lY3Rpb25Qb29sLmFjcXVpcmUocm91dGVyQWRkcmVzcyk7XG4gICAgICB2YXIgY29ubmVjdGlvblByb21pc2UgPSBfcHJvbWlzZTIuZGVmYXVsdC5yZXNvbHZlKGNvbm5lY3Rpb24pO1xuICAgICAgdmFyIGNvbm5lY3Rpb25Qcm92aWRlciA9IG5ldyBTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIoY29ubmVjdGlvblByb21pc2UpO1xuICAgICAgcmV0dXJuIG5ldyBfc2Vzc2lvbjIuZGVmYXVsdChfZHJpdmVyLlJFQUQsIGNvbm5lY3Rpb25Qcm92aWRlcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX3VwZGF0ZVJvdXRpbmdUYWJsZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF91cGRhdGVSb3V0aW5nVGFibGUobmV3Um91dGluZ1RhYmxlKSB7XG4gICAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgICAgdmFyIGN1cnJlbnRSb3V0aW5nVGFibGUgPSB0aGlzLl9yb3V0aW5nVGFibGU7XG5cbiAgICAgIC8vIGNsb3NlIG9sZCBjb25uZWN0aW9ucyB0byBzZXJ2ZXJzIG5vdCBwcmVzZW50IGluIHRoZSBuZXcgcm91dGluZyB0YWJsZVxuICAgICAgdmFyIHN0YWxlU2VydmVycyA9IGN1cnJlbnRSb3V0aW5nVGFibGUuc2VydmVyc0RpZmYobmV3Um91dGluZ1RhYmxlKTtcbiAgICAgIHN0YWxlU2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzNy5fY29ubmVjdGlvblBvb2wucHVyZ2Uoc2VydmVyKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBtYWtlIHRoaXMgZHJpdmVyIGluc3RhbmNlIGF3YXJlIG9mIHRoZSBuZXcgdGFibGVcbiAgICAgIHRoaXMuX3JvdXRpbmdUYWJsZSA9IG5ld1JvdXRpbmdUYWJsZTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogJ19pc1ZhbGlkUm91dGluZ1RhYmxlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2lzVmFsaWRSb3V0aW5nVGFibGUocm91dGluZ1RhYmxlKSB7XG4gICAgICByZXR1cm4gcm91dGluZ1RhYmxlICYmICFyb3V0aW5nVGFibGUud3JpdGVycy5pc0VtcHR5KCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2ZvcmdldFJvdXRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9mb3JnZXRSb3V0ZXIocm91dGluZ1RhYmxlLCByb3V0ZXJzQXJyYXksIHJvdXRlckluZGV4KSB7XG4gICAgICB2YXIgYWRkcmVzcyA9IHJvdXRlcnNBcnJheVtyb3V0ZXJJbmRleF07XG4gICAgICBpZiAocm91dGluZ1RhYmxlICYmIGFkZHJlc3MpIHtcbiAgICAgICAgcm91dGluZ1RhYmxlLmZvcmdldFJvdXRlcihhZGRyZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfY3JlYXRlSG9zdE5hbWVSZXNvbHZlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jcmVhdGVIb3N0TmFtZVJlc29sdmVyKCkge1xuICAgICAgaWYgKCgwLCBfZmVhdHVyZXMyLmRlZmF1bHQpKCdkbnNfbG9va3VwJykpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfaG9zdE5hbWVSZXNvbHZlcnMuRG5zSG9zdE5hbWVSZXNvbHZlcigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBfaG9zdE5hbWVSZXNvbHZlcnMuRHVtbXlIb3N0TmFtZVJlc29sdmVyKCk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBMb2FkQmFsYW5jZXI7XG59KENvbm5lY3Rpb25Qcm92aWRlcik7XG5cbnZhciBTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIgPSBleHBvcnRzLlNpbmdsZUNvbm5lY3Rpb25Qcm92aWRlciA9IGZ1bmN0aW9uIChfQ29ubmVjdGlvblByb3ZpZGVyMykge1xuICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIsIF9Db25uZWN0aW9uUHJvdmlkZXIzKTtcblxuICBmdW5jdGlvbiBTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIoY29ubmVjdGlvblByb21pc2UpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIpO1xuXG4gICAgdmFyIF90aGlzOCA9ICgwLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMuZGVmYXVsdCkodGhpcywgKFNpbmdsZUNvbm5lY3Rpb25Qcm92aWRlci5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoU2luZ2xlQ29ubmVjdGlvblByb3ZpZGVyKSkuY2FsbCh0aGlzKSk7XG5cbiAgICBfdGhpczguX2Nvbm5lY3Rpb25Qcm9taXNlID0gY29ubmVjdGlvblByb21pc2U7XG4gICAgcmV0dXJuIF90aGlzODtcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKFNpbmdsZUNvbm5lY3Rpb25Qcm92aWRlciwgW3tcbiAgICBrZXk6ICdhY3F1aXJlQ29ubmVjdGlvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFjcXVpcmVDb25uZWN0aW9uKG1vZGUpIHtcbiAgICAgIHZhciBjb25uZWN0aW9uUHJvbWlzZSA9IHRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlO1xuICAgICAgdGhpcy5fY29ubmVjdGlvblByb21pc2UgPSBudWxsO1xuICAgICAgcmV0dXJuIGNvbm5lY3Rpb25Qcm9taXNlO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gU2luZ2xlQ29ubmVjdGlvblByb3ZpZGVyO1xufShDb25uZWN0aW9uUHJvdmlkZXIpOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ29ubmVjdGlvbiA9IGV4cG9ydHMucGFyc2VQb3J0ID0gZXhwb3J0cy5wYXJzZUhvc3QgPSBleHBvcnRzLnBhcnNlVXJsID0gZXhwb3J0cy5wYXJzZVNjaGVtZSA9IGV4cG9ydHMuY29ubmVjdCA9IHVuZGVmaW5lZDtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2snKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc0NhbGxDaGVjazIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcycpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL2pzb24vc3RyaW5naWZ5Jyk7XG5cbnZhciBfc3RyaW5naWZ5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N0cmluZ2lmeSk7XG5cbnZhciBfY2hXZWJzb2NrZXQgPSByZXF1aXJlKCcuL2NoLXdlYnNvY2tldCcpO1xuXG52YXIgX2NoV2Vic29ja2V0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NoV2Vic29ja2V0KTtcblxudmFyIF9jaE5vZGUgPSByZXF1aXJlKCcuL2NoLW5vZGUnKTtcblxudmFyIF9jaE5vZGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2hOb2RlKTtcblxudmFyIF9jaHVua2luZyA9IHJlcXVpcmUoJy4vY2h1bmtpbmcnKTtcblxudmFyIF9mZWF0dXJlcyA9IHJlcXVpcmUoJy4vZmVhdHVyZXMnKTtcblxudmFyIF9mZWF0dXJlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9mZWF0dXJlcyk7XG5cbnZhciBfcGFja3N0cmVhbSA9IHJlcXVpcmUoJy4vcGFja3N0cmVhbScpO1xuXG52YXIgX2J1ZiA9IHJlcXVpcmUoJy4vYnVmJyk7XG5cbnZhciBfZ3JhcGhUeXBlcyA9IHJlcXVpcmUoJy4uL2dyYXBoLXR5cGVzJyk7XG5cbnZhciBfZXJyb3IgPSByZXF1aXJlKCcuLy4uL2Vycm9yJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIENoYW5uZWwgPSB2b2lkIDA7XG5pZiAoX2NoTm9kZTIuZGVmYXVsdC5hdmFpbGFibGUpIHtcbiAgQ2hhbm5lbCA9IF9jaE5vZGUyLmRlZmF1bHQuY2hhbm5lbDtcbn0gZWxzZSBpZiAoX2NoV2Vic29ja2V0Mi5kZWZhdWx0LmF2YWlsYWJsZSkge1xuICBDaGFubmVsID0gX2NoV2Vic29ja2V0Mi5kZWZhdWx0LmNoYW5uZWw7XG59IGVsc2Uge1xuICB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKShcIkZhdGFsOiBObyBjb21wYXRpYmxlIHRyYW5zcG9ydCBhdmFpbGFibGUuIE5lZWQgdG8gcnVuIG9uIGEgcGxhdGZvcm0gd2l0aCB0aGUgV2ViU29ja2V0IEFQSS5cIik7XG59XG5cbnZhclxuLy8gU2lnbmF0dXJlIGJ5dGVzIGZvciBlYWNoIG1lc3NhZ2UgdHlwZVxuSU5JVCA9IDB4MDEsXG4gICAgLy8gMDAwMCAwMDAxIC8vIElOSVQgPHVzZXJfYWdlbnQ+XG5BQ0tfRkFJTFVSRSA9IDB4MEUsXG4gICAgLy8gMDAwMCAxMTEwIC8vIEFDS19GQUlMVVJFXG5SRVNFVCA9IDB4MEYsXG4gICAgLy8gMDAwMCAxMTExIC8vIFJFU0VUXG5SVU4gPSAweDEwLFxuICAgIC8vIDAwMDEgMDAwMCAvLyBSVU4gPHN0YXRlbWVudD4gPHBhcmFtZXRlcnM+XG5ESVNDQVJEX0FMTCA9IDB4MkYsXG4gICAgLy8gMDAxMCAxMTExIC8vIERJU0NBUkQgKlxuUFVMTF9BTEwgPSAweDNGLFxuICAgIC8vIDAwMTEgMTExMSAvLyBQVUxMICpcblNVQ0NFU1MgPSAweDcwLFxuICAgIC8vIDAxMTEgMDAwMCAvLyBTVUNDRVNTIDxtZXRhZGF0YT5cblJFQ09SRCA9IDB4NzEsXG4gICAgLy8gMDExMSAwMDAxIC8vIFJFQ09SRCA8dmFsdWU+XG5JR05PUkVEID0gMHg3RSxcbiAgICAvLyAwMTExIDExMTAgLy8gSUdOT1JFRCA8bWV0YWRhdGE+XG5GQUlMVVJFID0gMHg3RixcbiAgICAvLyAwMTExIDExMTEgLy8gRkFJTFVSRSA8bWV0YWRhdGE+XG5cbi8vIFNpZ25hdHVyZSBieXRlcyBmb3IgaGlnaGVyLWxldmVsIGdyYXBoIG9iamVjdHNcbk5PREUgPSAweDRFLFxuICAgIFJFTEFUSU9OU0hJUCA9IDB4NTIsXG4gICAgVU5CT1VORF9SRUxBVElPTlNISVAgPSAweDcyLFxuICAgIFBBVEggPSAweDUwLFxuXG4vL3NlbnQgYmVmb3JlIHZlcnNpb24gbmVnb3RpYXRpb25cbk1BR0lDX1BSRUFNQkxFID0gMHg2MDYwQjAxNyxcbiAgICBERUJVRyA9IGZhbHNlO1xuXG52YXIgVVJMUkVHRVggPSBuZXcgUmVnRXhwKFtcIihbXi9dKy8vKT9cIiwgLy8gc2NoZW1lXG5cIigoW146Lz8jXSopXCIsIC8vIGhvc3RuYW1lXG5cIig/OjooWzAtOV0rKSk/KVwiLCAvLyBwb3J0IChvcHRpb25hbClcblwiLipcIl0uam9pbihcIlwiKSk7IC8vIGV2ZXJ5dGhpbmcgZWxzZVxuXG5mdW5jdGlvbiBwYXJzZVNjaGVtZSh1cmwpIHtcbiAgdmFyIHNjaGVtZSA9IHVybC5tYXRjaChVUkxSRUdFWClbMV0gfHwgJyc7XG4gIHJldHVybiBzY2hlbWUudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VVcmwodXJsKSB7XG4gIHJldHVybiB1cmwubWF0Y2goVVJMUkVHRVgpWzJdO1xufVxuXG5mdW5jdGlvbiBwYXJzZUhvc3QodXJsKSB7XG4gIHJldHVybiB1cmwubWF0Y2goVVJMUkVHRVgpWzNdO1xufVxuXG5mdW5jdGlvbiBwYXJzZVBvcnQodXJsKSB7XG4gIHJldHVybiB1cmwubWF0Y2goVVJMUkVHRVgpWzRdO1xufVxuXG4vKipcbiAqIFZlcnkgcnVkaW1lbnRhcnkgbG9nIGhhbmRsaW5nLCBzaG91bGQgcHJvYmFibHkgYmUgcmVwbGFjZWQgYnkgc29tZXRoaW5nIHByb3BlciBhdCBzb21lIHBvaW50LlxuICogQHBhcmFtIGFjdG9yIHRoZSBwYXJ0IHRoYXQgc2VudCB0aGUgbWVzc2FnZSwgJ1MnIGZvciBzZXJ2ZXIgYW5kICdDJyBmb3IgY2xpZW50XG4gKiBAcGFyYW0gbXNnIHRoZSBib2x0IG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gbG9nKGFjdG9yLCBtc2cpIHtcbiAgaWYgKERFQlVHKSB7XG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1zZyArPSBcIiBcIiArICgwLCBfc3RyaW5naWZ5Mi5kZWZhdWx0KShhcmd1bWVudHNbaV0pO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhhY3RvciArIFwiOlwiICsgbXNnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBOT19PUCgpIHt9XG5cbnZhciBOT19PUF9PQlNFUlZFUiA9IHtcbiAgb25OZXh0OiBOT19PUCxcbiAgb25Db21wbGV0ZWQ6IE5PX09QLFxuICBvbkVycm9yOiBOT19PUFxufTtcblxuLyoqIE1hcHMgZnJvbSBwYWNrc3RyZWFtIHN0cnVjdHVyZXMgdG8gTmVvNGogZG9tYWluIG9iamVjdHMgKi9cbnZhciBfbWFwcGVycyA9IHtcbiAgbm9kZTogZnVuY3Rpb24gbm9kZSh1bnBhY2tlciwgYnVmKSB7XG4gICAgcmV0dXJuIG5ldyBfZ3JhcGhUeXBlcy5Ob2RlKHVucGFja2VyLnVucGFjayhidWYpLCAvLyBJZGVudGl0eVxuICAgIHVucGFja2VyLnVucGFjayhidWYpLCAvLyBMYWJlbHNcbiAgICB1bnBhY2tlci51bnBhY2soYnVmKSAvLyBQcm9wZXJ0aWVzXG4gICAgKTtcbiAgfSxcbiAgcmVsOiBmdW5jdGlvbiByZWwodW5wYWNrZXIsIGJ1Zikge1xuICAgIHJldHVybiBuZXcgX2dyYXBoVHlwZXMuUmVsYXRpb25zaGlwKHVucGFja2VyLnVucGFjayhidWYpLCAvLyBJZGVudGl0eVxuICAgIHVucGFja2VyLnVucGFjayhidWYpLCAvLyBTdGFydCBOb2RlIElkZW50aXR5XG4gICAgdW5wYWNrZXIudW5wYWNrKGJ1ZiksIC8vIEVuZCBOb2RlIElkZW50aXR5XG4gICAgdW5wYWNrZXIudW5wYWNrKGJ1ZiksIC8vIFR5cGVcbiAgICB1bnBhY2tlci51bnBhY2soYnVmKSAvLyBQcm9wZXJ0aWVzXG4gICAgKTtcbiAgfSxcbiAgdW5ib3VuZFJlbDogZnVuY3Rpb24gdW5ib3VuZFJlbCh1bnBhY2tlciwgYnVmKSB7XG4gICAgcmV0dXJuIG5ldyBfZ3JhcGhUeXBlcy5VbmJvdW5kUmVsYXRpb25zaGlwKHVucGFja2VyLnVucGFjayhidWYpLCAvLyBJZGVudGl0eVxuICAgIHVucGFja2VyLnVucGFjayhidWYpLCAvLyBUeXBlXG4gICAgdW5wYWNrZXIudW5wYWNrKGJ1ZikgLy8gUHJvcGVydGllc1xuICAgICk7XG4gIH0sXG4gIHBhdGg6IGZ1bmN0aW9uIHBhdGgodW5wYWNrZXIsIGJ1Zikge1xuICAgIHZhciBub2RlcyA9IHVucGFja2VyLnVucGFjayhidWYpLFxuICAgICAgICByZWxzID0gdW5wYWNrZXIudW5wYWNrKGJ1ZiksXG4gICAgICAgIHNlcXVlbmNlID0gdW5wYWNrZXIudW5wYWNrKGJ1Zik7XG4gICAgdmFyIHByZXZOb2RlID0gbm9kZXNbMF0sXG4gICAgICAgIHNlZ21lbnRzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcXVlbmNlLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICB2YXIgcmVsSW5kZXggPSBzZXF1ZW5jZVtpXSxcbiAgICAgICAgICBuZXh0Tm9kZSA9IG5vZGVzW3NlcXVlbmNlW2kgKyAxXV0sXG4gICAgICAgICAgcmVsID0gdm9pZCAwO1xuICAgICAgaWYgKHJlbEluZGV4ID4gMCkge1xuICAgICAgICByZWwgPSByZWxzW3JlbEluZGV4IC0gMV07XG4gICAgICAgIGlmIChyZWwgaW5zdGFuY2VvZiBfZ3JhcGhUeXBlcy5VbmJvdW5kUmVsYXRpb25zaGlwKSB7XG4gICAgICAgICAgLy8gVG8gYXZvaWQgZHVwbGljYXRpb24sIHJlbGF0aW9uc2hpcHMgaW4gYSBwYXRoIGRvIG5vdCBjb250YWluXG4gICAgICAgICAgLy8gaW5mb3JtYXRpb24gYWJvdXQgdGhlaXIgc3RhcnQgYW5kIGVuZCBub2RlcywgdGhhdCdzIGluc3RlYWRcbiAgICAgICAgICAvLyBpbmZlcnJlZCBmcm9tIHRoZSBwYXRoIHNlcXVlbmNlLiBUaGlzIGlzIHVzIGluZmVycmluZyAoYW5kLFxuICAgICAgICAgIC8vIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIHJlbWVtYmVyaW5nKSB0aGUgc3RhcnQvZW5kIG9mIGEgcmVsLlxuICAgICAgICAgIHJlbHNbcmVsSW5kZXggLSAxXSA9IHJlbCA9IHJlbC5iaW5kKHByZXZOb2RlLmlkZW50aXR5LCBuZXh0Tm9kZS5pZGVudGl0eSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbCA9IHJlbHNbLXJlbEluZGV4IC0gMV07XG4gICAgICAgIGlmIChyZWwgaW5zdGFuY2VvZiBfZ3JhcGhUeXBlcy5VbmJvdW5kUmVsYXRpb25zaGlwKSB7XG4gICAgICAgICAgLy8gU2VlIGFib3ZlXG4gICAgICAgICAgcmVsc1stcmVsSW5kZXggLSAxXSA9IHJlbCA9IHJlbC5iaW5kKG5leHROb2RlLmlkZW50aXR5LCBwcmV2Tm9kZS5pZGVudGl0eSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIERvbmUgaHlkcmF0aW5nIG9uZSBwYXRoIHNlZ21lbnQuXG4gICAgICBzZWdtZW50cy5wdXNoKG5ldyBfZ3JhcGhUeXBlcy5QYXRoU2VnbWVudChwcmV2Tm9kZSwgcmVsLCBuZXh0Tm9kZSkpO1xuICAgICAgcHJldk5vZGUgPSBuZXh0Tm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBfZ3JhcGhUeXBlcy5QYXRoKG5vZGVzWzBdLCBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXSwgc2VnbWVudHMpO1xuICB9XG59O1xuXG4vKipcbiAqIEEgY29ubmVjdGlvbiBtYW5hZ2VzIHNlbmRpbmcgYW5kIHJlY2lldmluZyBtZXNzYWdlcyBvdmVyIGEgY2hhbm5lbC4gQVxuICogY29ubmVjdG9yIGlzIHZlcnkgY2xvc2VseSB0aWVkIHRvIHRoZSBCb2x0IHByb3RvY29sLCBpdCBpbXBsZW1lbnRzIHRoZVxuICogc2FtZSBtZXNzYWdlIHN0cnVjdHVyZSB3aXRoIHZlcnkgbGl0dGxlIGZyaWxscy4gVGhpcyBtZWFucyBDb25uZWN0b3JzIGFyZVxuICogbmF0dXJhbGx5IHRpZWQgdG8gYSBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbCwgYW5kIHdlIGV4cGVjdFxuICogYW5vdGhlciBsYXllciB3aWxsIGJlIG5lZWRlZCB0byBzdXBwb3J0IG11bHRpcGxlIHZlcnNpb25zLlxuICpcbiAqIFRoZSBjb25uZWN0b3IgdHJpZXMgdG8gYmF0Y2ggb3V0Ym91bmQgbWVzc2FnZXMgYnkgcmVxdWlyaW5nIGl0cyB1c2Vyc1xuICogdG8gY2FsbCAnc3luYycgd2hlbiBtZXNzYWdlcyBuZWVkIHRvIGJlIHNlbnQsIGFuZCBpdCByb3V0ZXMgcmVzcG9uc2VcbiAqIG1lc3NhZ2VzIGJhY2sgdG8gdGhlIG9yaWdpbmF0b3JzIG9mIHRoZSByZXF1ZXN0cyB0aGF0IGNyZWF0ZWQgdGhvc2VcbiAqIHJlc3BvbnNlIG1lc3NhZ2VzLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cblxudmFyIENvbm5lY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0gY2hhbm5lbCAtIGNoYW5uZWwgd2l0aCBhICd3cml0ZScgZnVuY3Rpb24gYW5kIGEgJ29ubWVzc2FnZSdcbiAgICogICAgICAgICAgICAgICAgICBjYWxsYmFjayBwcm9wZXJ0eVxuICAgKiBAcGFyYW0gdXJsIC0gdXJsIHRvIGNvbm5lY3QgdG9cbiAgICovXG4gIGZ1bmN0aW9uIENvbm5lY3Rpb24oY2hhbm5lbCwgdXJsKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgQ29ubmVjdGlvbik7XG5cbiAgICAvKipcbiAgICAgKiBBbiBvcmRlcmVkIHF1ZXVlIG9mIG9ic2VydmVycywgZWFjaCBleGNoYW5nZSByZXNwb25zZSAoemVybyBvciBtb3JlXG4gICAgICogUkVDT1JEIG1lc3NhZ2VzIGZvbGxvd2VkIGJ5IGEgU1VDQ0VTUyBtZXNzYWdlKSB3ZSByZWNpZXZlIHdpbGwgYmUgcm91dGVkXG4gICAgICogdG8gdGhlIG5leHQgcGVuZGluZyBvYnNlcnZlci5cbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLnNlcnZlciA9IHsgYWRkcmVzczogdXJsIH07XG4gICAgdGhpcy5fcGVuZGluZ09ic2VydmVycyA9IFtdO1xuICAgIHRoaXMuX2N1cnJlbnRPYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9jaCA9IGNoYW5uZWw7XG4gICAgdGhpcy5fZGVjaHVua2VyID0gbmV3IF9jaHVua2luZy5EZWNodW5rZXIoKTtcbiAgICB0aGlzLl9jaHVua2VyID0gbmV3IF9jaHVua2luZy5DaHVua2VyKGNoYW5uZWwpO1xuICAgIHRoaXMuX3BhY2tlciA9IG5ldyBfcGFja3N0cmVhbS5QYWNrZXIodGhpcy5fY2h1bmtlcik7XG4gICAgdGhpcy5fdW5wYWNrZXIgPSBuZXcgX3BhY2tzdHJlYW0uVW5wYWNrZXIoKTtcblxuICAgIHRoaXMuX2lzSGFuZGxpbmdGYWlsdXJlID0gZmFsc2U7XG4gICAgdGhpcy5fY3VycmVudEZhaWx1cmUgPSBudWxsO1xuXG4gICAgLy8gU2V0IHRvIHRydWUgb24gZmF0YWwgZXJyb3JzLCB0byBnZXQgdGhpcyBvdXQgb2Ygc2Vzc2lvbiBwb29sLlxuICAgIHRoaXMuX2lzQnJva2VuID0gZmFsc2U7XG5cbiAgICAvLyBGb3IgZGVzZXJpYWxpemF0aW9uLCBleHBsYWluIHRvIHRoZSB1bnBhY2tlciBob3cgdG8gdW5wYWNrIG5vZGVzLCByZWxzLCBwYXRocztcbiAgICB0aGlzLl91bnBhY2tlci5zdHJ1Y3RNYXBwZXJzW05PREVdID0gX21hcHBlcnMubm9kZTtcbiAgICB0aGlzLl91bnBhY2tlci5zdHJ1Y3RNYXBwZXJzW1JFTEFUSU9OU0hJUF0gPSBfbWFwcGVycy5yZWw7XG4gICAgdGhpcy5fdW5wYWNrZXIuc3RydWN0TWFwcGVyc1tVTkJPVU5EX1JFTEFUSU9OU0hJUF0gPSBfbWFwcGVycy51bmJvdW5kUmVsO1xuICAgIHRoaXMuX3VucGFja2VyLnN0cnVjdE1hcHBlcnNbUEFUSF0gPSBfbWFwcGVycy5wYXRoO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIC8vIFRPRE86IFVzaW5nIGBvbm1lc3NhZ2VgIGFuZCBgb25lcnJvcmAgY2FtZSBmcm9tIHRoZSBXZWJTb2NrZXQgQVBJLFxuICAgIC8vIGl0IHJlYWRzIHBvb3JseSBhbmQgaGFzIHNldmVyYWwgYW5ub3lpbmcgZHJhd2JhY2tzLiBTd2FwIHRvIGhhdmluZ1xuICAgIC8vIENoYW5uZWwgZXh0ZW5kIEV2ZW50RW1pdHRlciBpbnN0ZWFkLCB0aGVuIHdlIGNhbiB1c2UgYG9uKCdkYXRhJywuLilgXG4gICAgdGhpcy5fY2gub25tZXNzYWdlID0gZnVuY3Rpb24gKGJ1Zikge1xuICAgICAgdmFyIHByb3Bvc2VkID0gYnVmLnJlYWRJbnQzMigpO1xuICAgICAgaWYgKHByb3Bvc2VkID09IDEpIHtcbiAgICAgICAgLy8gT2ssIHByb3RvY29sIHJ1bm5pbmcuIFNpbXBseSBmb3J3YXJkIGFsbCBtZXNzYWdlcyBwYXN0XG4gICAgICAgIC8vIHRoaXMgdG8gdGhlIGRlY2h1bmtlclxuICAgICAgICBzZWxmLl9jaC5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoYnVmKSB7XG4gICAgICAgICAgc2VsZi5fZGVjaHVua2VyLndyaXRlKGJ1Zik7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGJ1Zi5oYXNSZW1haW5pbmcoKSkge1xuICAgICAgICAgIHNlbGYuX2RlY2h1bmtlci53cml0ZShidWYucmVhZFNsaWNlKGJ1Zi5yZW1haW5pbmcoKSkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHByb3Bvc2VkID09IDEyMTM0ODYxNjApIHtcbiAgICAgICAgLy9zZXJ2ZXIgcmVzcG9uZGVkIDEyMTM0ODYxNjAgPT0gMHg0ODU0NTQ1MCA9PSBcIkhUVFBcIlxuICAgICAgICBzZWxmLl9oYW5kbGVGYXRhbEVycm9yKCgwLCBfZXJyb3IubmV3RXJyb3IpKFwiU2VydmVyIHJlc3BvbmRlZCBIVFRQLiBNYWtlIHN1cmUgeW91IGFyZSBub3QgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gdGhlIGh0dHAgZW5kcG9pbnQgXCIgKyBcIihIVFRQIGRlZmF1bHRzIHRvIHBvcnQgNzQ3NCB3aGVyZWFzIEJPTFQgZGVmYXVsdHMgdG8gcG9ydCA3Njg3KVwiKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLl9oYW5kbGVGYXRhbEVycm9yKCgwLCBfZXJyb3IubmV3RXJyb3IpKFwiVW5rbm93biBCb2x0IHByb3RvY29sIHZlcnNpb246IFwiICsgcHJvcG9zZWQpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gTGlzdGVuIHRvIGNvbm5lY3Rpb24gZXJyb3JzLiBJbXBvcnRhbnQgbm90ZSB0aG91Z2g7XG4gICAgLy8gSW4gc29tZSBjYXNlcyB3ZSB3aWxsIGdldCBhIGNoYW5uZWwgdGhhdCBpcyBhbHJlYWR5IGJyb2tlbiAoZm9yIGluc3RhbmNlLFxuICAgIC8vIGlmIHRoZSB1c2VyIHBhc3NlcyBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucykuIEluIHRoaXMgY2FzZSwgb25lcnJvclxuICAgIC8vIHdpbGwgaGF2ZSBcImFscmVhZHkgdHJpZ2dlcmVkXCIgYmVmb3JlIHdlIGFkZCBvdXQgbGlzdGVuZXIgaGVyZS4gU28gdGhlIGxpbmVcbiAgICAvLyBiZWxvdyBhbHNvIGNoZWNrcyB0aGF0IHRoZSBjaGFubmVsIGlzIG5vdCBhbHJlYWR5IGZhaWxlZC4gVGhpcyBjb3VsZCBiZSBuaWNlbHlcbiAgICAvLyBlbmNhcHN1bGF0ZWQgaW50byBDaGFubmVsIGlmIHdlIHVzZWQgYG9uKCdlcnJvcicsIC4uKWAgcmF0aGVyIHRoYW4gYG9uZXJyb3I9Li5gXG4gICAgLy8gYXMgb3V0bGluZWQgaW4gdGhlIGNvbW1lbnQgYWJvdXQgYG9ubWVzc2FnZWAgZnVydGhlciB1cCBpbiB0aGlzIGZpbGUuXG4gICAgdGhpcy5fY2gub25lcnJvciA9IHRoaXMuX2hhbmRsZUZhdGFsRXJyb3IuYmluZCh0aGlzKTtcbiAgICBpZiAodGhpcy5fY2guX2Vycm9yKSB7XG4gICAgICB0aGlzLl9oYW5kbGVGYXRhbEVycm9yKHRoaXMuX2NoLl9lcnJvcik7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVjaHVua2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChidWYpIHtcbiAgICAgIHNlbGYuX2hhbmRsZU1lc3NhZ2Uoc2VsZi5fdW5wYWNrZXIudW5wYWNrKGJ1ZikpO1xuICAgIH07XG5cbiAgICB2YXIgaGFuZHNoYWtlID0gKDAsIF9idWYuYWxsb2MpKDUgKiA0KTtcbiAgICAvL21hZ2ljIHByZWFtYmxlXG4gICAgaGFuZHNoYWtlLndyaXRlSW50MzIoTUFHSUNfUFJFQU1CTEUpO1xuICAgIC8vcHJvcG9zZWQgdmVyc2lvbnNcbiAgICBoYW5kc2hha2Uud3JpdGVJbnQzMigxKTtcbiAgICBoYW5kc2hha2Uud3JpdGVJbnQzMigwKTtcbiAgICBoYW5kc2hha2Uud3JpdGVJbnQzMigwKTtcbiAgICBoYW5kc2hha2Uud3JpdGVJbnQzMigwKTtcbiAgICBoYW5kc2hha2UucmVzZXQoKTtcbiAgICB0aGlzLl9jaC53cml0ZShoYW5kc2hha2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiRmF0YWxcIiBtZWFucyB0aGUgY29ubmVjdGlvbiBpcyBkZWFkLiBPbmx5IGNhbGwgdGhpcyBpZiBzb21ldGhpbmdcbiAgICogaGFwcGVucyB0aGF0IGNhbm5vdCBiZSByZWNvdmVyZWQgZnJvbS4gVGhpcyB3aWxsIGxlYWQgdG8gYWxsIHN1YnNjcmliZXJzXG4gICAqIGZhaWxpbmcsIGFuZCB0aGUgY29ubmVjdGlvbiBnZXR0aW5nIGVqZWN0ZWQgZnJvbSB0aGUgc2Vzc2lvbiBwb29sLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyIGFuIGVycm9yIG9iamVjdCwgZm9yd2FyZGVkIHRvIGFsbCBjdXJyZW50IGFuZCBmdXR1cmUgc3Vic2NyaWJlcnNcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShDb25uZWN0aW9uLCBbe1xuICAgIGtleTogJ19oYW5kbGVGYXRhbEVycm9yJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2hhbmRsZUZhdGFsRXJyb3IoZXJyKSB7XG4gICAgICB0aGlzLl9pc0Jyb2tlbiA9IHRydWU7XG4gICAgICB0aGlzLl9lcnJvciA9IGVycjtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50T2JzZXJ2ZXIgJiYgdGhpcy5fY3VycmVudE9ic2VydmVyLm9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudE9ic2VydmVyLm9uRXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICh0aGlzLl9wZW5kaW5nT2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIG9ic2VydmVyID0gdGhpcy5fcGVuZGluZ09ic2VydmVycy5zaGlmdCgpO1xuICAgICAgICBpZiAob2JzZXJ2ZXIgJiYgb2JzZXJ2ZXIub25FcnJvcikge1xuICAgICAgICAgIG9ic2VydmVyLm9uRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19oYW5kbGVNZXNzYWdlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2hhbmRsZU1lc3NhZ2UobXNnKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgcGF5bG9hZCA9IG1zZy5maWVsZHNbMF07XG5cbiAgICAgIHN3aXRjaCAobXNnLnNpZ25hdHVyZSkge1xuICAgICAgICBjYXNlIFJFQ09SRDpcbiAgICAgICAgICBsb2coXCJTXCIsIFwiUkVDT1JEXCIsIG1zZyk7XG4gICAgICAgICAgdGhpcy5fY3VycmVudE9ic2VydmVyLm9uTmV4dChwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTVUNDRVNTOlxuICAgICAgICAgIGxvZyhcIlNcIiwgXCJTVUNDRVNTXCIsIG1zZyk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRPYnNlcnZlci5vbkNvbXBsZXRlZChwYXlsb2FkKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudE9ic2VydmVyID0gdGhpcy5fcGVuZGluZ09ic2VydmVycy5zaGlmdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGQUlMVVJFOlxuICAgICAgICAgIGxvZyhcIlNcIiwgXCJGQUlMVVJFXCIsIG1zZyk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRGYWlsdXJlID0gKDAsIF9lcnJvci5uZXdFcnJvcikocGF5bG9hZC5tZXNzYWdlLCBwYXlsb2FkLmNvZGUpO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudE9ic2VydmVyLm9uRXJyb3IodGhpcy5fY3VycmVudEZhaWx1cmUpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIgPSB0aGlzLl9wZW5kaW5nT2JzZXJ2ZXJzLnNoaWZ0KCk7XG4gICAgICAgICAgICAvLyBUaGluZ3MgYXJlIG5vdyBicm9rZW4uIFBlbmRpbmcgb2JzZXJ2ZXJzIHdpbGwgZ2V0IEZBSUxVUkUgbWVzc2FnZXMgcm91dGVkIHVudGlsXG4gICAgICAgICAgICAvLyBXZSBhcmUgZG9uZSBoYW5kbGluZyB0aGlzIGZhaWx1cmUuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzSGFuZGxpbmdGYWlsdXJlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2lzSGFuZGxpbmdGYWlsdXJlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAvLyBpc0hhbmRsaW5nRmFpbHVyZSB3YXMgZmFsc2UsIG1lYW5pbmcgdGhpcyBpcyB0aGUgZmlyc3QgZmFpbHVyZSBtZXNzYWdlXG4gICAgICAgICAgICAgIC8vIHdlIHNlZSBmcm9tIHRoaXMgZmFpbHVyZS4gV2UgbWF5IHNlZSBzZXZlcmFsIG90aGVycywgb25lIGZvciBlYWNoIG1lc3NhZ2VcbiAgICAgICAgICAgICAgLy8gd2UgaGFkIFwib3B0aW1pc3RpY2FsbHlcIiBhbHJlYWR5IHNlbnQgYWZ0ZXIgd2hhdGV2ZXIgaXQgd2FzIHRoYXQgZmFpbGVkLlxuICAgICAgICAgICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gYW5kIG5lZWQgdG8gQUNLIHRoZSBmaXJzdCBvbmUsIHdoaWNoIGlzIHdoeSB3ZSBhcmUgdHJhY2tpbmdcbiAgICAgICAgICAgICAgLy8gdGhpcyBfaXNIYW5kbGluZ0ZhaWx1cmUgdGhpbmcuXG4gICAgICAgICAgICAgIHRoaXMuX2Fja0ZhaWx1cmUoe1xuICAgICAgICAgICAgICAgIG9uTmV4dDogTk9fT1AsXG4gICAgICAgICAgICAgICAgb25FcnJvcjogTk9fT1AsXG4gICAgICAgICAgICAgICAgb25Db21wbGV0ZWQ6IGZ1bmN0aW9uIG9uQ29tcGxldGVkKCkge1xuICAgICAgICAgICAgICAgICAgX3RoaXMuX2lzSGFuZGxpbmdGYWlsdXJlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICBfdGhpcy5fY3VycmVudEZhaWx1cmUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIElHTk9SRUQ6XG4gICAgICAgICAgbG9nKFwiU1wiLCBcIklHTk9SRURcIiwgbXNnKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRGYWlsdXJlICYmIHRoaXMuX2N1cnJlbnRPYnNlcnZlci5vbkVycm9yKSB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIub25FcnJvcih0aGlzLl9jdXJyZW50RmFpbHVyZSk7ZWxzZSBpZiAodGhpcy5fY3VycmVudE9ic2VydmVyLm9uRXJyb3IpIHRoaXMuX2N1cnJlbnRPYnNlcnZlci5vbkVycm9yKHBheWxvYWQpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIgPSB0aGlzLl9wZW5kaW5nT2JzZXJ2ZXJzLnNoaWZ0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRoaXMuX2hhbmRsZUZhdGFsRXJyb3IoKDAsIF9lcnJvci5uZXdFcnJvcikoXCJVbmtub3duIEJvbHQgcHJvdG9jb2wgbWVzc2FnZTogXCIgKyBtc2cpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUXVldWUgYW4gSU5JVC1tZXNzYWdlIHRvIGJlIHNlbnQgdG8gdGhlIGRhdGFiYXNlICovXG5cbiAgfSwge1xuICAgIGtleTogJ2luaXRpYWxpemUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0aWFsaXplKGNsaWVudE5hbWUsIHRva2VuLCBvYnNlcnZlcikge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGxvZyhcIkNcIiwgXCJJTklUXCIsIGNsaWVudE5hbWUsIHRva2VuKTtcbiAgICAgIHRoaXMuX3F1ZXVlT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuICAgICAgdGhpcy5fcGFja2VyLnBhY2tTdHJ1Y3QoSU5JVCwgW3RoaXMuX3BhY2thYmxlKGNsaWVudE5hbWUpLCB0aGlzLl9wYWNrYWJsZSh0b2tlbildLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIuX2hhbmRsZUZhdGFsRXJyb3IoZXJyKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fY2h1bmtlci5tZXNzYWdlQm91bmRhcnkoKTtcbiAgICAgIHRoaXMuc3luYygpO1xuICAgIH1cblxuICAgIC8qKiBRdWV1ZSBhIFJVTi1tZXNzYWdlIHRvIGJlIHNlbnQgdG8gdGhlIGRhdGFiYXNlICovXG5cbiAgfSwge1xuICAgIGtleTogJ3J1bicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJ1bihzdGF0ZW1lbnQsIHBhcmFtcywgb2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICBsb2coXCJDXCIsIFwiUlVOXCIsIHN0YXRlbWVudCwgcGFyYW1zKTtcbiAgICAgIHRoaXMuX3F1ZXVlT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuICAgICAgdGhpcy5fcGFja2VyLnBhY2tTdHJ1Y3QoUlVOLCBbdGhpcy5fcGFja2FibGUoc3RhdGVtZW50KSwgdGhpcy5fcGFja2FibGUocGFyYW1zKV0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMy5faGFuZGxlRmF0YWxFcnJvcihlcnIpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9jaHVua2VyLm1lc3NhZ2VCb3VuZGFyeSgpO1xuICAgIH1cblxuICAgIC8qKiBRdWV1ZSBhIFBVTExfQUxMLW1lc3NhZ2UgdG8gYmUgc2VudCB0byB0aGUgZGF0YWJhc2UgKi9cblxuICB9LCB7XG4gICAga2V5OiAncHVsbEFsbCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHB1bGxBbGwob2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICBsb2coXCJDXCIsIFwiUFVMTF9BTExcIik7XG4gICAgICB0aGlzLl9xdWV1ZU9ic2VydmVyKG9ic2VydmVyKTtcbiAgICAgIHRoaXMuX3BhY2tlci5wYWNrU3RydWN0KFBVTExfQUxMLCBbXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICByZXR1cm4gX3RoaXM0Ll9oYW5kbGVGYXRhbEVycm9yKGVycik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2NodW5rZXIubWVzc2FnZUJvdW5kYXJ5KCk7XG4gICAgfVxuXG4gICAgLyoqIFF1ZXVlIGEgRElTQ0FSRF9BTEwtbWVzc2FnZSB0byBiZSBzZW50IHRvIHRoZSBkYXRhYmFzZSAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdkaXNjYXJkQWxsJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGlzY2FyZEFsbChvYnNlcnZlcikge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIGxvZyhcIkNcIiwgXCJESVNDQVJEX0FMTFwiKTtcbiAgICAgIHRoaXMuX3F1ZXVlT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuICAgICAgdGhpcy5fcGFja2VyLnBhY2tTdHJ1Y3QoRElTQ0FSRF9BTEwsIFtdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBfdGhpczUuX2hhbmRsZUZhdGFsRXJyb3IoZXJyKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fY2h1bmtlci5tZXNzYWdlQm91bmRhcnkoKTtcbiAgICB9XG5cbiAgICAvKiogUXVldWUgYSBSRVNFVC1tZXNzYWdlIHRvIGJlIHNlbnQgdG8gdGhlIGRhdGFiYXNlLiBNdXRlcyBmYWlsdXJlIGhhbmRsaW5nLiAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdyZXNldEFzeW5jJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXRBc3luYyhvYnNlcnZlcikge1xuICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICAgIGxvZyhcIkNcIiwgXCJSRVNFVF9BU1lOQ1wiKTtcbiAgICAgIHRoaXMuX2lzSGFuZGxpbmdGYWlsdXJlID0gdHJ1ZTtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHZhciB3cmFwcGVkT2JzID0ge1xuICAgICAgICBvbk5leHQ6IG9ic2VydmVyID8gb2JzZXJ2ZXIub25OZXh0IDogTk9fT1AsXG4gICAgICAgIG9uRXJyb3I6IG9ic2VydmVyID8gb2JzZXJ2ZXIub25FcnJvciA6IE5PX09QLFxuICAgICAgICBvbkNvbXBsZXRlZDogZnVuY3Rpb24gb25Db21wbGV0ZWQoKSB7XG4gICAgICAgICAgc2VsZi5faXNIYW5kbGluZ0ZhaWx1cmUgPSBmYWxzZTtcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm9uQ29tcGxldGVkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5fcXVldWVPYnNlcnZlcih3cmFwcGVkT2JzKTtcbiAgICAgIHRoaXMuX3BhY2tlci5wYWNrU3RydWN0KFJFU0VULCBbXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICByZXR1cm4gX3RoaXM2Ll9oYW5kbGVGYXRhbEVycm9yKGVycik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2NodW5rZXIubWVzc2FnZUJvdW5kYXJ5KCk7XG4gICAgfVxuXG4gICAgLyoqIFF1ZXVlIGEgUkVTRVQtbWVzc2FnZSB0byBiZSBzZW50IHRvIHRoZSBkYXRhYmFzZSAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdyZXNldCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2V0KG9ic2VydmVyKSB7XG4gICAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgICAgbG9nKCdDJywgJ1JFU0VUJyk7XG4gICAgICB0aGlzLl9xdWV1ZU9ic2VydmVyKG9ic2VydmVyKTtcbiAgICAgIHRoaXMuX3BhY2tlci5wYWNrU3RydWN0KFJFU0VULCBbXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICByZXR1cm4gX3RoaXM3Ll9oYW5kbGVGYXRhbEVycm9yKGVycik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2NodW5rZXIubWVzc2FnZUJvdW5kYXJ5KCk7XG4gICAgfVxuXG4gICAgLyoqIFF1ZXVlIGEgQUNLX0ZBSUxVUkUtbWVzc2FnZSB0byBiZSBzZW50IHRvIHRoZSBkYXRhYmFzZSAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdfYWNrRmFpbHVyZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9hY2tGYWlsdXJlKG9ic2VydmVyKSB7XG4gICAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgICAgbG9nKFwiQ1wiLCBcIkFDS19GQUlMVVJFXCIpO1xuICAgICAgdGhpcy5fcXVldWVPYnNlcnZlcihvYnNlcnZlcik7XG4gICAgICB0aGlzLl9wYWNrZXIucGFja1N0cnVjdChBQ0tfRkFJTFVSRSwgW10sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzOC5faGFuZGxlRmF0YWxFcnJvcihlcnIpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9jaHVua2VyLm1lc3NhZ2VCb3VuZGFyeSgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19xdWV1ZU9ic2VydmVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3F1ZXVlT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICAgIGlmICh0aGlzLl9pc0Jyb2tlbikge1xuICAgICAgICBpZiAob2JzZXJ2ZXIgJiYgb2JzZXJ2ZXIub25FcnJvcikge1xuICAgICAgICAgIG9ic2VydmVyLm9uRXJyb3IodGhpcy5fZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG9ic2VydmVyID0gb2JzZXJ2ZXIgfHwgTk9fT1BfT0JTRVJWRVI7XG4gICAgICBvYnNlcnZlci5vbkNvbXBsZXRlZCA9IG9ic2VydmVyLm9uQ29tcGxldGVkIHx8IE5PX09QO1xuICAgICAgb2JzZXJ2ZXIub25FcnJvciA9IG9ic2VydmVyLm9uRXJyb3IgfHwgTk9fT1A7XG4gICAgICBvYnNlcnZlci5vbk5leHQgPSBvYnNlcnZlci5vbk5leHQgfHwgTk9fT1A7XG4gICAgICBpZiAodGhpcy5fY3VycmVudE9ic2VydmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudE9ic2VydmVyID0gb2JzZXJ2ZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9wZW5kaW5nT2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN5bmNocm9uaXplIC0gZmx1c2ggYWxsIHF1ZXVlZCBvdXRnb2luZyBtZXNzYWdlcyBhbmQgcm91dGUgdGhlaXIgcmVzcG9uc2VzXG4gICAgICogdG8gdGhlaXIgcmVzcGVjdGl2ZSBoYW5kbGVycy5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnc3luYycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN5bmMoKSB7XG4gICAgICB0aGlzLl9jaHVua2VyLmZsdXNoKCk7XG4gICAgfVxuXG4gICAgLyoqIENoZWNrIGlmIHRoaXMgY29ubmVjdGlvbiBpcyBpbiB3b3JraW5nIGNvbmRpdGlvbiAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpc09wZW4nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc09wZW4oKSB7XG4gICAgICByZXR1cm4gIXRoaXMuX2lzQnJva2VuICYmIHRoaXMuX2NoLl9vcGVuO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2lzRW5jcnlwdGVkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNFbmNyeXB0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2guaXNFbmNyeXB0ZWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsIGNsb3NlIG9uIHRoZSBjaGFubmVsLlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNiIC0gRnVuY3Rpb24gdG8gY2FsbCBvbiBjbG9zZS5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY2xvc2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9zZShjYikge1xuICAgICAgdGhpcy5fY2guY2xvc2UoY2IpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19wYWNrYWJsZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9wYWNrYWJsZSh2YWx1ZSkge1xuICAgICAgdmFyIF90aGlzOSA9IHRoaXM7XG5cbiAgICAgIHJldHVybiB0aGlzLl9wYWNrZXIucGFja2FibGUodmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzOS5faGFuZGxlRmF0YWxFcnJvcihlcnIpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnc2V0U2VydmVyVmVyc2lvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFNlcnZlclZlcnNpb24odmVyc2lvbikge1xuICAgICAgdGhpcy5zZXJ2ZXIudmVyc2lvbiA9IHZlcnNpb247XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBDb25uZWN0aW9uO1xufSgpO1xuXG4vKipcbiAqIENyZXRlIG5ldyBjb25uZWN0aW9uIHRvIHRoZSBwcm92aWRlZCB1cmwuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSAnbmVvNGonLXByZWZpeGVkIFVSTCB0byBOZW80aiBCb2x0IGVuZHBvaW50XG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnXG4gKiBAcmV0dXJuIHtDb25uZWN0aW9ufSAtIE5ldyBjb25uZWN0aW9uXG4gKi9cblxuXG5mdW5jdGlvbiBjb25uZWN0KHVybCkge1xuICB2YXIgY29uZmlnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICB2YXIgQ2ggPSBjb25maWcuY2hhbm5lbCB8fCBDaGFubmVsO1xuICB2YXIgaG9zdCA9IHBhcnNlSG9zdCh1cmwpO1xuICB2YXIgcG9ydCA9IHBhcnNlUG9ydCh1cmwpIHx8IDc2ODc7XG4gIHZhciBjb21wbGV0ZVVybCA9IGhvc3QgKyAnOicgKyBwb3J0O1xuXG4gIHJldHVybiBuZXcgQ29ubmVjdGlvbihuZXcgQ2goe1xuICAgIGhvc3Q6IHBhcnNlSG9zdCh1cmwpLFxuICAgIHBvcnQ6IHBhcnNlUG9ydCh1cmwpIHx8IDc2ODcsXG4gICAgLy8gRGVmYXVsdCB0byB1c2luZyBlbmNyeXB0aW9uIGlmIHRydXN0LW9uLWZpcnN0LXVzZSBpcyBhdmFpbGFibGVcbiAgICBlbmNyeXB0ZWQ6IGNvbmZpZy5lbmNyeXB0ZWQgPT0gbnVsbCA/ICgwLCBfZmVhdHVyZXMyLmRlZmF1bHQpKFwidHJ1c3RfYWxsX2NlcnRpZmljYXRlc1wiKSA6IGNvbmZpZy5lbmNyeXB0ZWQsXG4gICAgLy8gRGVmYXVsdCB0byB1c2luZyBUUlVTVF9BTExfQ0VSVElGSUNBVEVTIGlmIGl0IGlzIGF2YWlsYWJsZVxuICAgIHRydXN0OiBjb25maWcudHJ1c3QgfHwgKCgwLCBfZmVhdHVyZXMyLmRlZmF1bHQpKFwidHJ1c3RfYWxsX2NlcnRpZmljYXRlc1wiKSA/IFwiVFJVU1RfQUxMX0NFUlRJRklDQVRFU1wiIDogXCJUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFU1wiKSxcbiAgICB0cnVzdGVkQ2VydGlmaWNhdGVzOiBjb25maWcudHJ1c3RlZENlcnRpZmljYXRlcyB8fCBbXSxcbiAgICBrbm93bkhvc3RzOiBjb25maWcua25vd25Ib3N0c1xuICB9KSwgY29tcGxldGVVcmwpO1xufVxuXG5leHBvcnRzLmNvbm5lY3QgPSBjb25uZWN0O1xuZXhwb3J0cy5wYXJzZVNjaGVtZSA9IHBhcnNlU2NoZW1lO1xuZXhwb3J0cy5wYXJzZVVybCA9IHBhcnNlVXJsO1xuZXhwb3J0cy5wYXJzZUhvc3QgPSBwYXJzZUhvc3Q7XG5leHBvcnRzLnBhcnNlUG9ydCA9IHBhcnNlUG9ydDtcbmV4cG9ydHMuQ29ubmVjdGlvbiA9IENvbm5lY3Rpb247IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIENlbnRyYWwgcGxhY2UgdG8gZGV0ZWN0IGZlYXR1cmUgc3VwcG9ydCBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0sXG4vLyBleHBhbmQgYXMgbmVlZGVkLlxuXG52YXIgRkVBVFVSRVMgPSB7XG4gIHRydXN0X29uX2ZpcnN0X3VzZTogZnVuY3Rpb24gdHJ1c3Rfb25fZmlyc3RfdXNlKCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBUaGlzIGlzIGluc2FuZS4gV2UgYXJlIHZlcmlmeWluZyB0aGF0IHdlIGhhdmUgYSB2ZXJzaW9uIG9mIGdldFBlZXJDZXJ0aWZpY2F0ZVxuICAgICAgLy8gdGhhdCBzdXBwb3J0cyByZWFkaW5nIHRoZSB3aG9sZSBjZXJ0aWZpY2F0ZSwgZWcgdGhpcyBjb21taXQ6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvY29tbWl0LzM0NWM0MGI2XG4gICAgICB2YXIgZ2V0UGVlckNlcnRpZmljYXRlRnVuY3Rpb24gPSByZXF1aXJlKCd0bHMnKS5UTFNTb2NrZXQucHJvdG90eXBlLmdldFBlZXJDZXJ0aWZpY2F0ZTtcbiAgICAgIHZhciBudW1iZXJPZlBhcmFtZXRlcnMgPSBnZXRQZWVyQ2VydGlmaWNhdGVGdW5jdGlvbi5sZW5ndGg7XG4gICAgICByZXR1cm4gbnVtYmVyT2ZQYXJhbWV0ZXJzID49IDE7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcbiAgdHJ1c3RfYWxsX2NlcnRpZmljYXRlczogZnVuY3Rpb24gdHJ1c3RfYWxsX2NlcnRpZmljYXRlcygpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGdldFBlZXJDZXJ0aWZpY2F0ZUZ1bmN0aW9uID0gcmVxdWlyZSgndGxzJykuVExTU29ja2V0LnByb3RvdHlwZS5nZXRQZWVyQ2VydGlmaWNhdGU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LFxuICBkbnNfbG9va3VwOiBmdW5jdGlvbiBkbnNfbG9va3VwKCkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgbG9va3VwRnVuY3Rpb24gPSByZXF1aXJlKCdkbnMnKS5sb29rdXA7XG4gICAgICBpZiAobG9va3VwRnVuY3Rpb24gJiYgdHlwZW9mIGxvb2t1cEZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGhhc0ZlYXR1cmUobmFtZSkge1xuICByZXR1cm4gRkVBVFVSRVNbbmFtZV0gJiYgRkVBVFVSRVNbbmFtZV0oKTtcbn1cblxuZXhwb3J0cy5kZWZhdWx0ID0gaGFzRmVhdHVyZTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL2pzb24vc3RyaW5naWZ5Jyk7XG5cbnZhciBfc3RyaW5naWZ5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N0cmluZ2lmeSk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2syID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJyk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MnKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX3JvdW5kUm9iaW5BcnJheSA9IHJlcXVpcmUoJy4vcm91bmQtcm9iaW4tYXJyYXknKTtcblxudmFyIF9yb3VuZFJvYmluQXJyYXkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcm91bmRSb2JpbkFycmF5KTtcblxudmFyIF9lcnJvciA9IHJlcXVpcmUoJy4uL2Vycm9yJyk7XG5cbnZhciBfaW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVnZXInKTtcblxudmFyIF9pbnRlZ2VyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ludGVnZXIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgUFJPQ0VEVVJFX0NBTEwgPSAnQ0FMTCBkYm1zLmNsdXN0ZXIucm91dGluZy5nZXRTZXJ2ZXJzJzsgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxudmFyIFBST0NFRFVSRV9OT1RfRk9VTkRfQ09ERSA9ICdOZW8uQ2xpZW50RXJyb3IuUHJvY2VkdXJlLlByb2NlZHVyZU5vdEZvdW5kJztcblxudmFyIEdldFNlcnZlcnNVdGlsID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBHZXRTZXJ2ZXJzVXRpbCgpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBHZXRTZXJ2ZXJzVXRpbCk7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShHZXRTZXJ2ZXJzVXRpbCwgW3tcbiAgICBrZXk6ICdjYWxsR2V0U2VydmVycycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNhbGxHZXRTZXJ2ZXJzKHNlc3Npb24sIHJvdXRlckFkZHJlc3MpIHtcbiAgICAgIHJldHVybiBzZXNzaW9uLnJ1bihQUk9DRURVUkVfQ0FMTCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgIHNlc3Npb24uY2xvc2UoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWNvcmRzO1xuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSBQUk9DRURVUkVfTk9UX0ZPVU5EX0NPREUpIHtcbiAgICAgICAgICAvLyB0aHJvdyB3aGVuIGdldFNlcnZlcnMgcHJvY2VkdXJlIG5vdCBmb3VuZCBiZWNhdXNlIHRoaXMgaXMgY2xlYXJseSBhIGNvbmZpZ3VyYXRpb24gaXNzdWVcbiAgICAgICAgICB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKSgnU2VydmVyICcgKyByb3V0ZXJBZGRyZXNzICsgJyBjb3VsZCBub3QgcGVyZm9ybSByb3V0aW5nLiAnICsgJ01ha2Ugc3VyZSB5b3UgYXJlIGNvbm5lY3RpbmcgdG8gYSBjYXVzYWwgY2x1c3RlcicsIF9lcnJvci5TRVJWSUNFX1VOQVZBSUxBQkxFKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXR1cm4gbm90aGluZyB3aGVuIGZhaWxlZCB0byBjb25uZWN0IGJlY2F1c2UgY29kZSBoaWdoZXIgaW4gdGhlIGNhbGxzdGFjayBpcyBzdGlsbCBhYmxlIHRvIHJldHJ5IHdpdGggYVxuICAgICAgICAvLyBkaWZmZXJlbnQgc2Vzc2lvbiB0b3dhcmRzIGEgZGlmZmVyZW50IHJvdXRlclxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3BhcnNlVHRsJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VUdGwocmVjb3JkLCByb3V0ZXJBZGRyZXNzKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbm93ID0gKDAsIF9pbnRlZ2VyLmludCkoRGF0ZS5ub3coKSk7XG4gICAgICAgIHZhciBleHBpcmVzID0gcmVjb3JkLmdldCgndHRsJykubXVsdGlwbHkoMTAwMCkuYWRkKG5vdyk7XG4gICAgICAgIC8vIGlmIHRoZSBzZXJ2ZXIgdXNlcyBhIHJlYWxseSBiaWcgZXhwaXJlIHRpbWUgbGlrZSBMb25nLk1BWF9WQUxVRSB0aGlzIG1heSBoYXZlIG92ZXJmbG93ZWRcbiAgICAgICAgaWYgKGV4cGlyZXMubGVzc1RoYW4obm93KSkge1xuICAgICAgICAgIHJldHVybiBfaW50ZWdlcjIuZGVmYXVsdC5NQVhfVkFMVUU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV4cGlyZXM7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKSgnVW5hYmxlIHRvIHBhcnNlIFRUTCBlbnRyeSBmcm9tIHJvdXRlciAnICsgcm91dGVyQWRkcmVzcyArICcgZnJvbSByZWNvcmQ6XFxuJyArICgwLCBfc3RyaW5naWZ5Mi5kZWZhdWx0KShyZWNvcmQpLCBfZXJyb3IuUFJPVE9DT0xfRVJST1IpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3BhcnNlU2VydmVycycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlU2VydmVycyhyZWNvcmQsIHJvdXRlckFkZHJlc3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBzZXJ2ZXJzID0gcmVjb3JkLmdldCgnc2VydmVycycpO1xuXG4gICAgICAgIHZhciByb3V0ZXJzID0gbmV3IF9yb3VuZFJvYmluQXJyYXkyLmRlZmF1bHQoKTtcbiAgICAgICAgdmFyIHJlYWRlcnMgPSBuZXcgX3JvdW5kUm9iaW5BcnJheTIuZGVmYXVsdCgpO1xuICAgICAgICB2YXIgd3JpdGVycyA9IG5ldyBfcm91bmRSb2JpbkFycmF5Mi5kZWZhdWx0KCk7XG5cbiAgICAgICAgc2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzZXJ2ZXIpIHtcbiAgICAgICAgICB2YXIgcm9sZSA9IHNlcnZlclsncm9sZSddO1xuICAgICAgICAgIHZhciBhZGRyZXNzZXMgPSBzZXJ2ZXJbJ2FkZHJlc3NlcyddO1xuXG4gICAgICAgICAgaWYgKHJvbGUgPT09ICdST1VURScpIHtcbiAgICAgICAgICAgIHJvdXRlcnMucHVzaEFsbChhZGRyZXNzZXMpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ1dSSVRFJykge1xuICAgICAgICAgICAgd3JpdGVycy5wdXNoQWxsKGFkZHJlc3Nlcyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAnUkVBRCcpIHtcbiAgICAgICAgICAgIHJlYWRlcnMucHVzaEFsbChhZGRyZXNzZXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKSgnVW5rbm93biBzZXJ2ZXIgcm9sZSBcIicgKyByb2xlICsgJ1wiJywgX2Vycm9yLlBST1RPQ09MX0VSUk9SKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcm91dGVyczogcm91dGVycyxcbiAgICAgICAgICByZWFkZXJzOiByZWFkZXJzLFxuICAgICAgICAgIHdyaXRlcnM6IHdyaXRlcnNcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGlnbm9yZSkge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKSgnVW5hYmxlIHRvIHBhcnNlIHNlcnZlcnMgZW50cnkgZnJvbSByb3V0ZXIgJyArIHJvdXRlckFkZHJlc3MgKyAnIGZyb20gcmVjb3JkOlxcbicgKyAoMCwgX3N0cmluZ2lmeTIuZGVmYXVsdCkocmVjb3JkKSwgX2Vycm9yLlBST1RPQ09MX0VSUk9SKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIEdldFNlcnZlcnNVdGlsO1xufSgpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBHZXRTZXJ2ZXJzVXRpbDsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkRuc0hvc3ROYW1lUmVzb2x2ZXIgPSBleHBvcnRzLkR1bW15SG9zdE5hbWVSZXNvbHZlciA9IHVuZGVmaW5lZDtcblxudmFyIF9wcm9taXNlID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UnKTtcblxudmFyIF9wcm9taXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb21pc2UpO1xuXG52YXIgX2dldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mJyk7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0UHJvdG90eXBlT2YpO1xuXG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4nKTtcblxudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yKTtcblxudmFyIF9pbmhlcml0czIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMnKTtcblxudmFyIF9pbmhlcml0czMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmhlcml0czIpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjaycpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzJyk7XG5cbnZhciBfY3JlYXRlQ2xhc3MzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlQ2xhc3MyKTtcblxudmFyIF9jb25uZWN0b3IgPSByZXF1aXJlKCcuL2Nvbm5lY3RvcicpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgSG9zdE5hbWVSZXNvbHZlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gSG9zdE5hbWVSZXNvbHZlcigpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBIb3N0TmFtZVJlc29sdmVyKTtcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKEhvc3ROYW1lUmVzb2x2ZXIsIFt7XG4gICAga2V5OiAncmVzb2x2ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc29sdmUoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fic3RyYWN0IGZ1bmN0aW9uJyk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBIb3N0TmFtZVJlc29sdmVyO1xufSgpOyAvKipcbiAgICAgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICAgICAgKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gICAgICAqXG4gICAgICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICAgICAgKlxuICAgICAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgICAgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAgICAgKlxuICAgICAgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gICAgICAqXG4gICAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICAgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgICAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICAgICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgICAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgICAgICovXG5cbnZhciBEdW1teUhvc3ROYW1lUmVzb2x2ZXIgPSBleHBvcnRzLkR1bW15SG9zdE5hbWVSZXNvbHZlciA9IGZ1bmN0aW9uIChfSG9zdE5hbWVSZXNvbHZlcikge1xuICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShEdW1teUhvc3ROYW1lUmVzb2x2ZXIsIF9Ib3N0TmFtZVJlc29sdmVyKTtcblxuICBmdW5jdGlvbiBEdW1teUhvc3ROYW1lUmVzb2x2ZXIoKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgRHVtbXlIb3N0TmFtZVJlc29sdmVyKTtcbiAgICByZXR1cm4gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoRHVtbXlIb3N0TmFtZVJlc29sdmVyLl9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShEdW1teUhvc3ROYW1lUmVzb2x2ZXIpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKER1bW15SG9zdE5hbWVSZXNvbHZlciwgW3tcbiAgICBrZXk6ICdyZXNvbHZlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzb2x2ZShzZWVkUm91dGVyKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZVRvSXRzZWxmKHNlZWRSb3V0ZXIpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gRHVtbXlIb3N0TmFtZVJlc29sdmVyO1xufShIb3N0TmFtZVJlc29sdmVyKTtcblxudmFyIERuc0hvc3ROYW1lUmVzb2x2ZXIgPSBleHBvcnRzLkRuc0hvc3ROYW1lUmVzb2x2ZXIgPSBmdW5jdGlvbiAoX0hvc3ROYW1lUmVzb2x2ZXIyKSB7XG4gICgwLCBfaW5oZXJpdHMzLmRlZmF1bHQpKERuc0hvc3ROYW1lUmVzb2x2ZXIsIF9Ib3N0TmFtZVJlc29sdmVyMik7XG5cbiAgZnVuY3Rpb24gRG5zSG9zdE5hbWVSZXNvbHZlcigpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBEbnNIb3N0TmFtZVJlc29sdmVyKTtcblxuICAgIHZhciBfdGhpczIgPSAoMCwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zLmRlZmF1bHQpKHRoaXMsIChEbnNIb3N0TmFtZVJlc29sdmVyLl9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShEbnNIb3N0TmFtZVJlc29sdmVyKSkuY2FsbCh0aGlzKSk7XG5cbiAgICBfdGhpczIuX2RucyA9IHJlcXVpcmUoJ2RucycpO1xuICAgIHJldHVybiBfdGhpczI7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShEbnNIb3N0TmFtZVJlc29sdmVyLCBbe1xuICAgIGtleTogJ3Jlc29sdmUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNvbHZlKHNlZWRSb3V0ZXIpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgc2VlZFJvdXRlckhvc3QgPSAoMCwgX2Nvbm5lY3Rvci5wYXJzZUhvc3QpKHNlZWRSb3V0ZXIpO1xuICAgICAgdmFyIHNlZWRSb3V0ZXJQb3J0ID0gKDAsIF9jb25uZWN0b3IucGFyc2VQb3J0KShzZWVkUm91dGVyKTtcblxuICAgICAgcmV0dXJuIG5ldyBfcHJvbWlzZTIuZGVmYXVsdChmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICBfdGhpczMuX2Rucy5sb29rdXAoc2VlZFJvdXRlckhvc3QsIHsgYWxsOiB0cnVlIH0sIGZ1bmN0aW9uIChlcnJvciwgYWRkcmVzc2VzKSB7XG4gICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc29sdmVUb0l0c2VsZihzZWVkUm91dGVyKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBhZGRyZXNzZXNXaXRoUG9ydHMgPSBhZGRyZXNzZXMubWFwKGZ1bmN0aW9uIChhZGRyZXNzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzV2l0aFBvcnQoYWRkcmVzcywgc2VlZFJvdXRlclBvcnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXNvbHZlKGFkZHJlc3Nlc1dpdGhQb3J0cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gRG5zSG9zdE5hbWVSZXNvbHZlcjtcbn0oSG9zdE5hbWVSZXNvbHZlcik7XG5cbmZ1bmN0aW9uIHJlc29sdmVUb0l0c2VsZihhZGRyZXNzKSB7XG4gIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5yZXNvbHZlKFthZGRyZXNzXSk7XG59XG5cbmZ1bmN0aW9uIGFkZHJlc3NXaXRoUG9ydChhZGRyZXNzT2JqZWN0LCBwb3J0KSB7XG4gIHZhciBhZGRyZXNzID0gYWRkcmVzc09iamVjdC5hZGRyZXNzO1xuICBpZiAocG9ydCkge1xuICAgIHJldHVybiBhZGRyZXNzICsgJzonICsgcG9ydDtcbiAgfVxuICByZXR1cm4gYWRkcmVzcztcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU3RydWN0dXJlID0gZXhwb3J0cy5VbnBhY2tlciA9IGV4cG9ydHMuUGFja2VyID0gdW5kZWZpbmVkO1xuXG52YXIgX2tleXMgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzXCIpO1xuXG52YXIgX2tleXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfa2V5cyk7XG5cbnZhciBfdHlwZW9mMiA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgX3R5cGVvZjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90eXBlb2YyKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrXCIpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzc1wiKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX3V0ZiA9IHJlcXVpcmUoXCIuL3V0ZjhcIik7XG5cbnZhciBfdXRmMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0Zik7XG5cbnZhciBfaW50ZWdlciA9IHJlcXVpcmUoXCIuLi9pbnRlZ2VyXCIpO1xuXG52YXIgX2ludGVnZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW50ZWdlcik7XG5cbnZhciBfZXJyb3IgPSByZXF1aXJlKFwiLi8uLi9lcnJvclwiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIFRJTllfU1RSSU5HID0gMHg4MDsgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbnZhciBUSU5ZX0xJU1QgPSAweDkwO1xudmFyIFRJTllfTUFQID0gMHhBMDtcbnZhciBUSU5ZX1NUUlVDVCA9IDB4QjA7XG52YXIgTlVMTCA9IDB4QzA7XG52YXIgRkxPQVRfNjQgPSAweEMxO1xudmFyIEZBTFNFID0gMHhDMjtcbnZhciBUUlVFID0gMHhDMztcbnZhciBJTlRfOCA9IDB4Qzg7XG52YXIgSU5UXzE2ID0gMHhDOTtcbnZhciBJTlRfMzIgPSAweENBO1xudmFyIElOVF82NCA9IDB4Q0I7XG52YXIgU1RSSU5HXzggPSAweEQwO1xudmFyIFNUUklOR18xNiA9IDB4RDE7XG52YXIgU1RSSU5HXzMyID0gMHhEMjtcbnZhciBMSVNUXzggPSAweEQ0O1xudmFyIExJU1RfMTYgPSAweEQ1O1xudmFyIExJU1RfMzIgPSAweEQ2O1xudmFyIE1BUF84ID0gMHhEODtcbnZhciBNQVBfMTYgPSAweEQ5O1xudmFyIE1BUF8zMiA9IDB4REE7XG52YXIgU1RSVUNUXzggPSAweERDO1xudmFyIFNUUlVDVF8xNiA9IDB4REQ7XG5cbi8qKlxuICAqIEEgU3RydWN0dXJlIGhhdmUgYSBzaWduYXR1cmUgYW5kIGZpZWxkcy5cbiAgKiBAYWNjZXNzIHByaXZhdGVcbiAgKi9cblxudmFyIFN0cnVjdHVyZSA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBuZXcgaW5zdGFuY2VcbiAgICovXG4gIGZ1bmN0aW9uIFN0cnVjdHVyZShzaWduYXR1cmUsIGZpZWxkcykge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIFN0cnVjdHVyZSk7XG5cbiAgICB0aGlzLnNpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbiAgICB0aGlzLmZpZWxkcyA9IGZpZWxkcztcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKFN0cnVjdHVyZSwgW3tcbiAgICBrZXk6IFwidG9TdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICB2YXIgZmllbGRTdHIgPSBcIlwiO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICBmaWVsZFN0ciArPSBcIiwgXCI7XG4gICAgICAgIH1cbiAgICAgICAgZmllbGRTdHIgKz0gdGhpcy5maWVsZHNbaV07XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJTdHJ1Y3R1cmUoXCIgKyB0aGlzLnNpZ25hdHVyZSArIFwiLCBbXCIgKyB0aGlzLmZpZWxkcyArIFwiXSlcIjtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFN0cnVjdHVyZTtcbn0oKTtcblxuLyoqXG4gICogQ2xhc3MgdG8gcGFja1xuICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAqL1xuXG5cbnZhciBQYWNrZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFBhY2tlcihjaGFubmVsKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUGFja2VyKTtcblxuICAgIHRoaXMuX2NoID0gY2hhbm5lbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcGFja2FibGUgZnVuY3Rpb24gb3V0IG9mIHRoZSBwcm92aWRlZCB2YWx1ZVxuICAgKiBAcGFyYW0geCB0aGUgdmFsdWUgdG8gcGFja1xuICAgKiBAcGFyYW0gb25FcnJvciBjYWxsYmFjayBmb3IgdGhlIGNhc2Ugd2hlbiB2YWx1ZSBjYW5ub3QgYmUgcGFja2VkXG4gICAqIEByZXR1cm5zIEZ1bmN0aW9uXG4gICAqL1xuXG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoUGFja2VyLCBbe1xuICAgIGtleTogXCJwYWNrYWJsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYWNrYWJsZSh4LCBvbkVycm9yKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAoeCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5fY2gud3JpdGVVSW50OChOVUxMKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoeCA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5fY2gud3JpdGVVSW50OChUUlVFKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoeCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuX2NoLndyaXRlVUludDgoRkFMU0UpO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgeCA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLnBhY2tGbG9hdCh4KTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHggPT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5wYWNrU3RyaW5nKHgsIG9uRXJyb3IpO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICgoMCwgX2ludGVnZXIuaXNJbnQpKHgpKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLnBhY2tJbnRlZ2VyKHgpO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh4IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpcy5wYWNrTGlzdEhlYWRlcih4Lmxlbmd0aCwgb25FcnJvcik7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHgubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBfdGhpcy5wYWNrYWJsZSh4W19pXSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHhbX2ldLCBvbkVycm9yKSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoeCBpbnN0YW5jZW9mIFN0cnVjdHVyZSkge1xuICAgICAgICB2YXIgcGFja2FibGVGaWVsZHMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4LmZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHBhY2thYmxlRmllbGRzW2ldID0gdGhpcy5wYWNrYWJsZSh4LmZpZWxkc1tpXSwgb25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMucGFja1N0cnVjdCh4LnNpZ25hdHVyZSwgcGFja2FibGVGaWVsZHMpO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICgodHlwZW9mIHggPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogKDAsIF90eXBlb2YzLmRlZmF1bHQpKHgpKSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGtleXMgPSAoMCwgX2tleXMyLmRlZmF1bHQpKHgpO1xuXG4gICAgICAgICAgdmFyIGNvdW50ID0gMDtcbiAgICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBrZXlzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgICAgICAgIGlmICh4W2tleXNbX2kyXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBfdGhpcy5wYWNrTWFwSGVhZGVyKGNvdW50LCBvbkVycm9yKTtcbiAgICAgICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBrZXlzLmxlbmd0aDsgX2kzKyspIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW19pM107XG4gICAgICAgICAgICBpZiAoeFtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgX3RoaXMucGFja1N0cmluZyhrZXkpO1xuICAgICAgICAgICAgICBfdGhpcy5wYWNrYWJsZSh4W2tleV0sIG9uRXJyb3IpKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgICBvbkVycm9yKCgwLCBfZXJyb3IubmV3RXJyb3IpKFwiQ2Fubm90IHBhY2sgdGhpcyB2YWx1ZTogXCIgKyB4KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhY2tzIGEgc3RydWN0XG4gICAgICogQHBhcmFtIHNpZ25hdHVyZSB0aGUgc2lnbmF0dXJlIG9mIHRoZSBzdHJ1Y3RcbiAgICAgKiBAcGFyYW0gcGFja2FibGVGaWVsZHMgdGhlIGZpZWxkcyBvZiB0aGUgc3RydWN0LCBtYWtlIHN1cmUgeW91IGNhbGwgYHBhY2thYmxlIG9uIGFsbCBmaWVsZHNgXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJwYWNrU3RydWN0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhY2tTdHJ1Y3Qoc2lnbmF0dXJlLCBwYWNrYWJsZUZpZWxkcywgb25FcnJvcikge1xuICAgICAgcGFja2FibGVGaWVsZHMgPSBwYWNrYWJsZUZpZWxkcyB8fCBbXTtcbiAgICAgIHRoaXMucGFja1N0cnVjdEhlYWRlcihwYWNrYWJsZUZpZWxkcy5sZW5ndGgsIHNpZ25hdHVyZSwgb25FcnJvcik7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhY2thYmxlRmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHBhY2thYmxlRmllbGRzW2ldKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInBhY2tJbnRlZ2VyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhY2tJbnRlZ2VyKHgpIHtcbiAgICAgIHZhciBoaWdoID0geC5oaWdoLFxuICAgICAgICAgIGxvdyA9IHgubG93O1xuXG4gICAgICBpZiAoeC5ncmVhdGVyVGhhbk9yRXF1YWwoLTB4MTApICYmIHgubGVzc1RoYW4oMHg4MCkpIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVJbnQ4KGxvdyk7XG4gICAgICB9IGVsc2UgaWYgKHguZ3JlYXRlclRoYW5PckVxdWFsKC0weDgwKSAmJiB4Lmxlc3NUaGFuKC0weDEwKSkge1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KElOVF84KTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVJbnQ4KGxvdyk7XG4gICAgICB9IGVsc2UgaWYgKHguZ3JlYXRlclRoYW5PckVxdWFsKC0weDgwMDApICYmIHgubGVzc1RoYW4oMHg4MDAwKSkge1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KElOVF8xNik7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlSW50MTYobG93KTtcbiAgICAgIH0gZWxzZSBpZiAoeC5ncmVhdGVyVGhhbk9yRXF1YWwoLTB4ODAwMDAwMDApICYmIHgubGVzc1RoYW4oMHg4MDAwMDAwMCkpIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChJTlRfMzIpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZUludDMyKGxvdyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KElOVF82NCk7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlSW50MzIoaGlnaCk7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlSW50MzIobG93KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicGFja0Zsb2F0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhY2tGbG9hdCh4KSB7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KEZMT0FUXzY0KTtcbiAgICAgIHRoaXMuX2NoLndyaXRlRmxvYXQ2NCh4KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicGFja1N0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYWNrU3RyaW5nKHgsIG9uRXJyb3IpIHtcbiAgICAgIHZhciBieXRlcyA9IF91dGYyLmRlZmF1bHQuZW5jb2RlKHgpO1xuICAgICAgdmFyIHNpemUgPSBieXRlcy5sZW5ndGg7XG4gICAgICBpZiAoc2l6ZSA8IDB4MTApIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChUSU5ZX1NUUklORyB8IHNpemUpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZUJ5dGVzKGJ5dGVzKTtcbiAgICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDB4MTAwKSB7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoU1RSSU5HXzgpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpemUpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZUJ5dGVzKGJ5dGVzKTtcbiAgICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDB4MTAwMDApIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChTVFJJTkdfMTYpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpemUgLyAyNTYgPj4gMCk7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoc2l6ZSAlIDI1Nik7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlQnl0ZXMoYnl0ZXMpO1xuICAgICAgfSBlbHNlIGlmIChzaXplIDwgMHgxMDAwMDAwMDApIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChTVFJJTkdfMzIpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KChzaXplIC8gMTY3NzcyMTYgPj4gMCkgJSAyNTYpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KChzaXplIC8gNjU1MzYgPj4gMCkgJSAyNTYpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KChzaXplIC8gMjU2ID4+IDApICUgMjU2KTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplICUgMjU2KTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVCeXRlcyhieXRlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkVycm9yKCgwLCBfZXJyb3IubmV3RXJyb3IpKFwiVVRGLTggc3RyaW5ncyBvZiBzaXplIFwiICsgc2l6ZSArIFwiIGFyZSBub3Qgc3VwcG9ydGVkXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicGFja0xpc3RIZWFkZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFja0xpc3RIZWFkZXIoc2l6ZSwgb25FcnJvcikge1xuICAgICAgaWYgKHNpemUgPCAweDEwKSB7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoVElOWV9MSVNUIHwgc2l6ZSk7XG4gICAgICB9IGVsc2UgaWYgKHNpemUgPCAweDEwMCkge1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KExJU1RfOCk7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoc2l6ZSk7XG4gICAgICB9IGVsc2UgaWYgKHNpemUgPCAweDEwMDAwKSB7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoTElTVF8xNik7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoKHNpemUgLyAyNTYgPj4gMCkgJSAyNTYpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpemUgJSAyNTYpO1xuICAgICAgfSBlbHNlIGlmIChzaXplIDwgMHgxMDAwMDAwMDApIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChMSVNUXzMyKTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OCgoc2l6ZSAvIDE2Nzc3MjE2ID4+IDApICUgMjU2KTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OCgoc2l6ZSAvIDY1NTM2ID4+IDApICUgMjU2KTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OCgoc2l6ZSAvIDI1NiA+PiAwKSAlIDI1Nik7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoc2l6ZSAlIDI1Nik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkVycm9yKCgwLCBfZXJyb3IubmV3RXJyb3IpKFwiTGlzdHMgb2Ygc2l6ZSBcIiArIHNpemUgKyBcIiBhcmUgbm90IHN1cHBvcnRlZFwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInBhY2tNYXBIZWFkZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFja01hcEhlYWRlcihzaXplLCBvbkVycm9yKSB7XG4gICAgICBpZiAoc2l6ZSA8IDB4MTApIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChUSU5ZX01BUCB8IHNpemUpO1xuICAgICAgfSBlbHNlIGlmIChzaXplIDwgMHgxMDApIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChNQVBfOCk7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoc2l6ZSk7XG4gICAgICB9IGVsc2UgaWYgKHNpemUgPCAweDEwMDAwKSB7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoTUFQXzE2KTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplIC8gMjU2ID4+IDApO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpemUgJSAyNTYpO1xuICAgICAgfSBlbHNlIGlmIChzaXplIDwgMHgxMDAwMDAwMDApIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChNQVBfMzIpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KChzaXplIC8gMTY3NzcyMTYgPj4gMCkgJSAyNTYpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KChzaXplIC8gNjU1MzYgPj4gMCkgJSAyNTYpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KChzaXplIC8gMjU2ID4+IDApICUgMjU2KTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplICUgMjU2KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uRXJyb3IoKDAsIF9lcnJvci5uZXdFcnJvcikoXCJNYXBzIG9mIHNpemUgXCIgKyBzaXplICsgXCIgYXJlIG5vdCBzdXBwb3J0ZWRcIikpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwYWNrU3RydWN0SGVhZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhY2tTdHJ1Y3RIZWFkZXIoc2l6ZSwgc2lnbmF0dXJlLCBvbkVycm9yKSB7XG4gICAgICBpZiAoc2l6ZSA8IDB4MTApIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChUSU5ZX1NUUlVDVCB8IHNpemUpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpZ25hdHVyZSk7XG4gICAgICB9IGVsc2UgaWYgKHNpemUgPCAweDEwMCkge1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KFNUUlVDVF84KTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplKTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaWduYXR1cmUpO1xuICAgICAgfSBlbHNlIGlmIChzaXplIDwgMHgxMDAwMCkge1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KFNUUlVDVF8xNik7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoc2l6ZSAvIDI1NiA+PiAwKTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplICUgMjU2KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uRXJyb3IoKDAsIF9lcnJvci5uZXdFcnJvcikoXCJTdHJ1Y3R1cmVzIG9mIHNpemUgXCIgKyBzaXplICsgXCIgYXJlIG5vdCBzdXBwb3J0ZWRcIikpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gUGFja2VyO1xufSgpO1xuXG4vKipcbiAgKiBDbGFzcyB0byB1bnBhY2tcbiAgKiBAYWNjZXNzIHByaXZhdGVcbiAgKi9cblxuXG52YXIgVW5wYWNrZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFVucGFja2VyKCkge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIFVucGFja2VyKTtcblxuICAgIC8vIEhpZ2hlciBsZXZlbCBsYXllcnMgY2FuIHNwZWNpZnkgaG93IHRvIG1hcCBzdHJ1Y3RzIHRvIGhpZ2hlci1sZXZlbCBvYmplY3RzLlxuICAgIC8vIElmIHdlIHJlY2lldmUgYSBzdHJ1Y3QgdGhhdCBoYXMgYSBzaWduYXR1cmUgdGhhdCBkb2VzIG5vdCBoYXZlIGEgbWFwcGVyLFxuICAgIC8vIHdlIHNpbXBseSByZXR1cm4gYSBTdHJ1Y3R1cmUgb2JqZWN0LlxuICAgIHRoaXMuc3RydWN0TWFwcGVycyA9IHt9O1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoVW5wYWNrZXIsIFt7XG4gICAga2V5OiBcInVucGFja0xpc3RcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdW5wYWNrTGlzdChzaXplLCBidWZmZXIpIHtcbiAgICAgIHZhciB2YWx1ZSA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgdmFsdWUucHVzaCh0aGlzLnVucGFjayhidWZmZXIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidW5wYWNrTWFwXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVucGFja01hcChzaXplLCBidWZmZXIpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHt9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IHRoaXMudW5wYWNrKGJ1ZmZlcik7XG4gICAgICAgIHZhbHVlW2tleV0gPSB0aGlzLnVucGFjayhidWZmZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1bnBhY2tTdHJ1Y3RcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdW5wYWNrU3RydWN0KHNpemUsIGJ1ZmZlcikge1xuICAgICAgdmFyIHNpZ25hdHVyZSA9IGJ1ZmZlci5yZWFkVUludDgoKTtcbiAgICAgIHZhciBtYXBwZXIgPSB0aGlzLnN0cnVjdE1hcHBlcnNbc2lnbmF0dXJlXTtcbiAgICAgIGlmIChtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIG1hcHBlcih0aGlzLCBidWZmZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHZhbHVlID0gbmV3IFN0cnVjdHVyZShzaWduYXR1cmUsIFtdKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgICB2YWx1ZS5maWVsZHMucHVzaCh0aGlzLnVucGFjayhidWZmZXIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVucGFja1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1bnBhY2soYnVmZmVyKSB7XG4gICAgICB2YXIgbWFya2VyID0gYnVmZmVyLnJlYWRVSW50OCgpO1xuICAgICAgaWYgKG1hcmtlciA9PSBOVUxMKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gVFJVRSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID09IEZBTFNFKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID09IEZMT0FUXzY0KSB7XG4gICAgICAgIHJldHVybiBidWZmZXIucmVhZEZsb2F0NjQoKTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID49IDAgJiYgbWFya2VyIDwgMTI4KSB7XG4gICAgICAgIHJldHVybiAoMCwgX2ludGVnZXIuaW50KShtYXJrZXIpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXIgPj0gMjQwICYmIG1hcmtlciA8IDI1Nikge1xuICAgICAgICByZXR1cm4gKDAsIF9pbnRlZ2VyLmludCkobWFya2VyIC0gMjU2KTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID09IElOVF84KSB7XG4gICAgICAgIHJldHVybiAoMCwgX2ludGVnZXIuaW50KShidWZmZXIucmVhZEludDgoKSk7XG4gICAgICB9IGVsc2UgaWYgKG1hcmtlciA9PSBJTlRfMTYpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfaW50ZWdlci5pbnQpKGJ1ZmZlci5yZWFkSW50MTYoKSk7XG4gICAgICB9IGVsc2UgaWYgKG1hcmtlciA9PSBJTlRfMzIpIHtcbiAgICAgICAgdmFyIGIgPSBidWZmZXIucmVhZEludDMyKCk7XG4gICAgICAgIHJldHVybiAoMCwgX2ludGVnZXIuaW50KShiKTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID09IElOVF82NCkge1xuICAgICAgICB2YXIgaGlnaCA9IGJ1ZmZlci5yZWFkSW50MzIoKTtcbiAgICAgICAgdmFyIGxvdyA9IGJ1ZmZlci5yZWFkSW50MzIoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBfaW50ZWdlcjIuZGVmYXVsdChsb3csIGhpZ2gpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gU1RSSU5HXzgpIHtcbiAgICAgICAgcmV0dXJuIF91dGYyLmRlZmF1bHQuZGVjb2RlKGJ1ZmZlciwgYnVmZmVyLnJlYWRVSW50OCgpKTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID09IFNUUklOR18xNikge1xuICAgICAgICByZXR1cm4gX3V0ZjIuZGVmYXVsdC5kZWNvZGUoYnVmZmVyLCBidWZmZXIucmVhZFVJbnQxNigpKTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID09IFNUUklOR18zMikge1xuICAgICAgICByZXR1cm4gX3V0ZjIuZGVmYXVsdC5kZWNvZGUoYnVmZmVyLCBidWZmZXIucmVhZFVJbnQzMigpKTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID09IExJU1RfOCkge1xuICAgICAgICByZXR1cm4gdGhpcy51bnBhY2tMaXN0KGJ1ZmZlci5yZWFkVUludDgoKSwgYnVmZmVyKTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID09IExJU1RfMTYpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5wYWNrTGlzdChidWZmZXIucmVhZFVJbnQxNigpLCBidWZmZXIpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gTElTVF8zMikge1xuICAgICAgICByZXR1cm4gdGhpcy51bnBhY2tMaXN0KGJ1ZmZlci5yZWFkVUludDMyKCksIGJ1ZmZlcik7XG4gICAgICB9IGVsc2UgaWYgKG1hcmtlciA9PSBNQVBfOCkge1xuICAgICAgICByZXR1cm4gdGhpcy51bnBhY2tNYXAoYnVmZmVyLnJlYWRVSW50OCgpLCBidWZmZXIpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gTUFQXzE2KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVucGFja01hcChidWZmZXIucmVhZFVJbnQxNigpLCBidWZmZXIpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gTUFQXzMyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVucGFja01hcChidWZmZXIucmVhZFVJbnQzMigpLCBidWZmZXIpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gU1RSVUNUXzgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5wYWNrU3RydWN0KGJ1ZmZlci5yZWFkVUludDgoKSwgYnVmZmVyKTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID09IFNUUlVDVF8xNikge1xuICAgICAgICByZXR1cm4gdGhpcy51bnBhY2tTdHJ1Y3QoYnVmZmVyLnJlYWRVSW50MTYoKSwgYnVmZmVyKTtcbiAgICAgIH1cbiAgICAgIHZhciBtYXJrZXJIaWdoID0gbWFya2VyICYgMHhGMDtcbiAgICAgIHZhciBtYXJrZXJMb3cgPSBtYXJrZXIgJiAweDBGO1xuICAgICAgaWYgKG1hcmtlckhpZ2ggPT0gMHg4MCkge1xuICAgICAgICByZXR1cm4gX3V0ZjIuZGVmYXVsdC5kZWNvZGUoYnVmZmVyLCBtYXJrZXJMb3cpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXJIaWdoID09IDB4OTApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5wYWNrTGlzdChtYXJrZXJMb3csIGJ1ZmZlcik7XG4gICAgICB9IGVsc2UgaWYgKG1hcmtlckhpZ2ggPT0gMHhBMCkge1xuICAgICAgICByZXR1cm4gdGhpcy51bnBhY2tNYXAobWFya2VyTG93LCBidWZmZXIpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXJIaWdoID09IDB4QjApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5wYWNrU3RydWN0KG1hcmtlckxvdywgYnVmZmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3IubmV3RXJyb3IpKFwiVW5rbm93biBwYWNrZWQgdmFsdWUgd2l0aCBtYXJrZXIgXCIgKyBtYXJrZXIudG9TdHJpbmcoMTYpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFVucGFja2VyO1xufSgpO1xuXG5leHBvcnRzLlBhY2tlciA9IFBhY2tlcjtcbmV4cG9ydHMuVW5wYWNrZXIgPSBVbnBhY2tlcjtcbmV4cG9ydHMuU3RydWN0dXJlID0gU3RydWN0dXJlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2tcIik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG52YXIgUG9vbCA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBjcmVhdGUgIGFuIGFsbG9jYXRpb24gZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IHJlc291cmNlLiBJdCdzIGdpdmVuXG4gICAqICAgICAgICAgICAgICAgIGEgc2luZ2xlIGFyZ3VtZW50LCBhIGZ1bmN0aW9uIHRoYXQgd2lsbCByZXR1cm4gdGhlIHJlc291cmNlIHRvXG4gICAqICAgICAgICAgICAgICAgIHRoZSBwb29sIGlmIGludm9rZWQsIHdoaWNoIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBvbiAuZGlzcG9zZVxuICAgKiAgICAgICAgICAgICAgICBvciAuY2xvc2Ugb3Igd2hhdGV2ZXIgbWVjaGFuaXNtIHRoZSByZXNvdXJjZSB1c2VzIHRvIGZpbmFsaXplLlxuICAgKiBAcGFyYW0gZGVzdHJveSBjYWxsZWQgd2l0aCB0aGUgcmVzb3VyY2Ugd2hlbiBpdCBpcyBldmljdGVkIGZyb20gdGhpcyBwb29sXG4gICAqIEBwYXJhbSB2YWxpZGF0ZSBjYWxsZWQgYXQgdmFyaW91cyB0aW1lcyAobGlrZSB3aGVuIGFuIGluc3RhbmNlIGlzIGFjcXVpcmVkIGFuZFxuICAgKiAgICAgICAgICAgICAgICAgd2hlbiBpdCBpcyByZXR1cm5lZCkuIElmIHRoaXMgcmV0dXJucyBmYWxzZSwgdGhlIHJlc291cmNlIHdpbGxcbiAgICogICAgICAgICAgICAgICAgIGJlIGV2aWN0ZWRcbiAgICogQHBhcmFtIG1heElkbGUgdGhlIG1heCBudW1iZXIgb2YgcmVzb3VyY2VzIHRoYXQgYXJlIGFsbG93ZWQgaWRsZSBpbiB0aGUgcG9vbCBhdFxuICAgKiAgICAgICAgICAgICAgICBhbnkgdGltZS4gSWYgdGhpcyB0aHJlc2hvbGQgaXMgZXhjZWVkZWQsIHJlc291cmNlcyB3aWxsIGJlIGV2aWN0ZWQuXG4gICAqL1xuICBmdW5jdGlvbiBQb29sKGNyZWF0ZSkge1xuICAgIHZhciBkZXN0cm95ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIHZhciB2YWxpZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICB2YXIgbWF4SWRsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogNTA7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUG9vbCk7XG5cbiAgICB0aGlzLl9jcmVhdGUgPSBjcmVhdGU7XG4gICAgdGhpcy5fZGVzdHJveSA9IGRlc3Ryb3k7XG4gICAgdGhpcy5fdmFsaWRhdGUgPSB2YWxpZGF0ZTtcbiAgICB0aGlzLl9tYXhJZGxlID0gbWF4SWRsZTtcbiAgICB0aGlzLl9wb29scyA9IHt9O1xuICAgIHRoaXMuX3JlbGVhc2UgPSB0aGlzLl9yZWxlYXNlLmJpbmQodGhpcyk7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShQb29sLCBbe1xuICAgIGtleTogXCJhY3F1aXJlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFjcXVpcmUoa2V5KSB7XG4gICAgICB2YXIgcmVzb3VyY2UgPSB2b2lkIDA7XG4gICAgICB2YXIgcG9vbCA9IHRoaXMuX3Bvb2xzW2tleV07XG4gICAgICBpZiAoIXBvb2wpIHtcbiAgICAgICAgcG9vbCA9IFtdO1xuICAgICAgICB0aGlzLl9wb29sc1trZXldID0gcG9vbDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChwb29sLmxlbmd0aCkge1xuICAgICAgICByZXNvdXJjZSA9IHBvb2wucG9wKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlKHJlc291cmNlKSkge1xuICAgICAgICAgIHJldHVybiByZXNvdXJjZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9kZXN0cm95KHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fY3JlYXRlKGtleSwgdGhpcy5fcmVsZWFzZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInB1cmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHB1cmdlKGtleSkge1xuICAgICAgdmFyIHJlc291cmNlID0gdm9pZCAwO1xuICAgICAgdmFyIHBvb2wgPSB0aGlzLl9wb29sc1trZXldIHx8IFtdO1xuICAgICAgd2hpbGUgKHBvb2wubGVuZ3RoKSB7XG4gICAgICAgIHJlc291cmNlID0gcG9vbC5wb3AoKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveShyZXNvdXJjZSk7XG4gICAgICB9XG4gICAgICBkZWxldGUgdGhpcy5fcG9vbHNba2V5XTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicHVyZ2VBbGxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHVyZ2VBbGwoKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5fcG9vbHMua2V5cykge1xuICAgICAgICBpZiAodGhpcy5fcG9vbHMuaGFzT3duUHJvcGVydHlrZXkpIHtcbiAgICAgICAgICB0aGlzLnB1cmdlKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgIHJldHVybiBrZXkgaW4gdGhpcy5fcG9vbHM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9yZWxlYXNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9yZWxlYXNlKGtleSwgcmVzb3VyY2UpIHtcbiAgICAgIHZhciBwb29sID0gdGhpcy5fcG9vbHNba2V5XTtcbiAgICAgIGlmICghcG9vbCkge1xuICAgICAgICAvL2tleSBoYXMgYmVlbiBwdXJnZWQsIGRvbid0IHB1dCBpdCBiYWNrXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChwb29sLmxlbmd0aCA+PSB0aGlzLl9tYXhJZGxlIHx8ICF0aGlzLl92YWxpZGF0ZShyZXNvdXJjZSkpIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveShyZXNvdXJjZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwb29sLnB1c2gocmVzb3VyY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gUG9vbDtcbn0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gUG9vbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9zdHJpbmdpZnkgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL2pzb24vc3RyaW5naWZ5XCIpO1xuXG52YXIgX3N0cmluZ2lmeTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdHJpbmdpZnkpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2tcIik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbnZhciBfZ2V0U2VydmVyc1V0aWwgPSByZXF1aXJlKFwiLi9nZXQtc2VydmVycy11dGlsXCIpO1xuXG52YXIgX2dldFNlcnZlcnNVdGlsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dldFNlcnZlcnNVdGlsKTtcblxudmFyIF9yb3V0aW5nVGFibGUgPSByZXF1aXJlKFwiLi9yb3V0aW5nLXRhYmxlXCIpO1xuXG52YXIgX3JvdXRpbmdUYWJsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yb3V0aW5nVGFibGUpO1xuXG52YXIgX2Vycm9yID0gcmVxdWlyZShcIi4uL2Vycm9yXCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgUmVkaXNjb3ZlcnkgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFJlZGlzY292ZXJ5KGdldFNlcnZlcnNVdGlsKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUmVkaXNjb3ZlcnkpO1xuXG4gICAgdGhpcy5fZ2V0U2VydmVyc1V0aWwgPSBnZXRTZXJ2ZXJzVXRpbCB8fCBuZXcgX2dldFNlcnZlcnNVdGlsMi5kZWZhdWx0KCk7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShSZWRpc2NvdmVyeSwgW3tcbiAgICBrZXk6IFwibG9va3VwUm91dGluZ1RhYmxlT25Sb3V0ZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9va3VwUm91dGluZ1RhYmxlT25Sb3V0ZXIoc2Vzc2lvbiwgcm91dGVyQWRkcmVzcykge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgcmV0dXJuIHRoaXMuX2dldFNlcnZlcnNVdGlsLmNhbGxHZXRTZXJ2ZXJzKHNlc3Npb24sIHJvdXRlckFkZHJlc3MpLnRoZW4oZnVuY3Rpb24gKHJlY29yZHMpIHtcbiAgICAgICAgaWYgKHJlY29yZHMgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBjb25uZWN0aW9uIGVycm9yIGhhcHBlbmVkLCB1bmFibGUgdG8gcmV0cmlldmUgcm91dGluZyB0YWJsZSBmcm9tIHRoaXMgcm91dGVyLCBuZXh0IG9uZSBzaG91bGQgYmUgcXVlcmllZFxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlY29yZHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgdGhyb3cgKDAsIF9lcnJvci5uZXdFcnJvcikoJ0lsbGVnYWwgcmVzcG9uc2UgZnJvbSByb3V0ZXIgXCInICsgcm91dGVyQWRkcmVzcyArICdcIi4gJyArICdSZWNlaXZlZCAnICsgcmVjb3Jkcy5sZW5ndGggKyAnIHJlY29yZHMgYnV0IGV4cGVjdGVkIG9ubHkgb25lLlxcbicgKyAoMCwgX3N0cmluZ2lmeTIuZGVmYXVsdCkocmVjb3JkcyksIF9lcnJvci5QUk9UT0NPTF9FUlJPUik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVjb3JkID0gcmVjb3Jkc1swXTtcblxuICAgICAgICB2YXIgZXhwaXJhdGlvblRpbWUgPSBfdGhpcy5fZ2V0U2VydmVyc1V0aWwucGFyc2VUdGwocmVjb3JkLCByb3V0ZXJBZGRyZXNzKTtcblxuICAgICAgICB2YXIgX2dldFNlcnZlcnNVdGlsJHBhcnNlID0gX3RoaXMuX2dldFNlcnZlcnNVdGlsLnBhcnNlU2VydmVycyhyZWNvcmQsIHJvdXRlckFkZHJlc3MpLFxuICAgICAgICAgICAgcm91dGVycyA9IF9nZXRTZXJ2ZXJzVXRpbCRwYXJzZS5yb3V0ZXJzLFxuICAgICAgICAgICAgcmVhZGVycyA9IF9nZXRTZXJ2ZXJzVXRpbCRwYXJzZS5yZWFkZXJzLFxuICAgICAgICAgICAgd3JpdGVycyA9IF9nZXRTZXJ2ZXJzVXRpbCRwYXJzZS53cml0ZXJzO1xuXG4gICAgICAgIFJlZGlzY292ZXJ5Ll9hc3NlcnROb25FbXB0eShyb3V0ZXJzLCAncm91dGVycycsIHJvdXRlckFkZHJlc3MpO1xuICAgICAgICBSZWRpc2NvdmVyeS5fYXNzZXJ0Tm9uRW1wdHkocmVhZGVycywgJ3JlYWRlcnMnLCByb3V0ZXJBZGRyZXNzKTtcbiAgICAgICAgLy8gY2FzZSB3aXRoIG5vIHdyaXRlcnMgaXMgcHJvY2Vzc2VkIGhpZ2hlciBpbiB0aGUgcHJvbWlzZSBjaGFpbiBiZWNhdXNlIG9ubHkgUm91dGluZ0RyaXZlciBrbm93c1xuICAgICAgICAvLyBob3cgdG8gZGVhbCB3aXRoIHN1Y2ggdGFibGUgYW5kIGhvdyB0byB0cmVhdCByb3V0ZXIgdGhhdCByZXR1cm5lZCBzdWNoIHRhYmxlXG5cbiAgICAgICAgcmV0dXJuIG5ldyBfcm91dGluZ1RhYmxlMi5kZWZhdWx0KHJvdXRlcnMsIHJlYWRlcnMsIHdyaXRlcnMsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcIl9hc3NlcnROb25FbXB0eVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfYXNzZXJ0Tm9uRW1wdHkoc2VydmVyc1JvdW5kUm9iaW5BcnJheSwgc2VydmVyc05hbWUsIHJvdXRlckFkZHJlc3MpIHtcbiAgICAgIGlmIChzZXJ2ZXJzUm91bmRSb2JpbkFycmF5LmlzRW1wdHkoKSkge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKSgnUmVjZWl2ZWQgbm8gJyArIHNlcnZlcnNOYW1lICsgJyBmcm9tIHJvdXRlciAnICsgcm91dGVyQWRkcmVzcywgX2Vycm9yLlBST1RPQ09MX0VSUk9SKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFJlZGlzY292ZXJ5O1xufSgpOyAvKipcbiAgICAgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICAgICAgKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gICAgICAqXG4gICAgICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICAgICAgKlxuICAgICAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgICAgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAgICAgKlxuICAgICAgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gICAgICAqXG4gICAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICAgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgICAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICAgICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgICAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgICAgICovXG5cbmV4cG9ydHMuZGVmYXVsdCA9IFJlZGlzY292ZXJ5OyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2snKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc0NhbGxDaGVjazIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcycpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKipcbiAqIEFuIGFycmF5IHRoYXQgbGV0cyB5b3UgaG9wIHRocm91Z2ggdGhlIGVsZW1lbnRzIGVuZGxlc3NseS5cbiAqL1xudmFyIFJvdW5kUm9iaW5BcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUm91bmRSb2JpbkFycmF5KGl0ZW1zKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUm91bmRSb2JpbkFycmF5KTtcblxuICAgIHRoaXMuX2l0ZW1zID0gaXRlbXMgfHwgW107XG4gICAgdGhpcy5fb2Zmc2V0ID0gMDtcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKFJvdW5kUm9iaW5BcnJheSwgW3tcbiAgICBrZXk6ICduZXh0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGlmICh0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IHRoaXMuX29mZnNldCAlIHRoaXMuc2l6ZSgpO1xuICAgICAgdGhpcy5fb2Zmc2V0Kys7XG4gICAgICByZXR1cm4gdGhpcy5faXRlbXNbaW5kZXhdO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3B1c2hBbGwnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXNoQWxsKGVsZW1zKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZWxlbXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkIGJ1dCBnb3Q6ICcgKyBlbGVtcyk7XG4gICAgICB9XG5cbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMuX2l0ZW1zLCBlbGVtcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaXNFbXB0eScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzRW1wdHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5faXRlbXMubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3NpemUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zLmxlbmd0aDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICd0b0FycmF5JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9BcnJheSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW1vdmUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmUoaXRlbSkge1xuICAgICAgdGhpcy5faXRlbXMgPSB0aGlzLl9pdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgIT09IGl0ZW07XG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFJvdW5kUm9iaW5BcnJheTtcbn0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gUm91bmRSb2JpbkFycmF5OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3RvQ29uc3VtYWJsZUFycmF5MiA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXlcIik7XG5cbnZhciBfdG9Db25zdW1hYmxlQXJyYXkzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdG9Db25zdW1hYmxlQXJyYXkyKTtcblxudmFyIF9mcm9tID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9hcnJheS9mcm9tXCIpO1xuXG52YXIgX2Zyb20yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZnJvbSk7XG5cbnZhciBfc2V0ID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9zZXRcIik7XG5cbnZhciBfc2V0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3NldCk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2syID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVja1wiKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc0NhbGxDaGVjazIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMiA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3NcIik7XG5cbnZhciBfY3JlYXRlQ2xhc3MzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlQ2xhc3MyKTtcblxudmFyIF9pbnRlZ2VyID0gcmVxdWlyZShcIi4uL2ludGVnZXJcIik7XG5cbnZhciBfcm91bmRSb2JpbkFycmF5ID0gcmVxdWlyZShcIi4vcm91bmQtcm9iaW4tYXJyYXlcIik7XG5cbnZhciBfcm91bmRSb2JpbkFycmF5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JvdW5kUm9iaW5BcnJheSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIE1JTl9ST1VURVJTID0gMTtcblxudmFyIFJvdXRpbmdUYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUm91dGluZ1RhYmxlKHJvdXRlcnMsIHJlYWRlcnMsIHdyaXRlcnMsIGV4cGlyYXRpb25UaW1lKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUm91dGluZ1RhYmxlKTtcblxuICAgIHRoaXMucm91dGVycyA9IHJvdXRlcnMgfHwgbmV3IF9yb3VuZFJvYmluQXJyYXkyLmRlZmF1bHQoKTtcbiAgICB0aGlzLnJlYWRlcnMgPSByZWFkZXJzIHx8IG5ldyBfcm91bmRSb2JpbkFycmF5Mi5kZWZhdWx0KCk7XG4gICAgdGhpcy53cml0ZXJzID0gd3JpdGVycyB8fCBuZXcgX3JvdW5kUm9iaW5BcnJheTIuZGVmYXVsdCgpO1xuICAgIHRoaXMuZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZSB8fCAoMCwgX2ludGVnZXIuaW50KSgwKTtcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKFJvdXRpbmdUYWJsZSwgW3tcbiAgICBrZXk6IFwiZm9yZ2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvcmdldChhZGRyZXNzKSB7XG4gICAgICAvLyBEb24ndCByZW1vdmUgaXQgZnJvbSB0aGUgc2V0IG9mIHJvdXRlcnMsIHNpbmNlIHRoYXQgbWlnaHQgbWVhbiB3ZSBsb3NlIG91ciBhYmlsaXR5IHRvIHJlLWRpc2NvdmVyLFxuICAgICAgLy8ganVzdCByZW1vdmUgaXQgZnJvbSB0aGUgc2V0IG9mIHJlYWRlcnMgYW5kIHdyaXRlcnMsIHNvIHRoYXQgd2UgZG9uJ3QgdXNlIGl0IGZvciBhY3R1YWwgd29yayB3aXRob3V0XG4gICAgICAvLyBwZXJmb3JtaW5nIGRpc2NvdmVyeSBmaXJzdC5cbiAgICAgIHRoaXMucmVhZGVycy5yZW1vdmUoYWRkcmVzcyk7XG4gICAgICB0aGlzLndyaXRlcnMucmVtb3ZlKGFkZHJlc3MpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmb3JnZXRSb3V0ZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9yZ2V0Um91dGVyKGFkZHJlc3MpIHtcbiAgICAgIHRoaXMucm91dGVycy5yZW1vdmUoYWRkcmVzcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZvcmdldFdyaXRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JnZXRXcml0ZXIoYWRkcmVzcykge1xuICAgICAgdGhpcy53cml0ZXJzLnJlbW92ZShhZGRyZXNzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2VydmVyc0RpZmZcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2VydmVyc0RpZmYob3RoZXJSb3V0aW5nVGFibGUpIHtcbiAgICAgIHZhciBvbGRTZXJ2ZXJzID0gbmV3IF9zZXQyLmRlZmF1bHQodGhpcy5fYWxsU2VydmVycygpKTtcbiAgICAgIHZhciBuZXdTZXJ2ZXJzID0gb3RoZXJSb3V0aW5nVGFibGUuX2FsbFNlcnZlcnMoKTtcbiAgICAgIG5ld1NlcnZlcnMuZm9yRWFjaChmdW5jdGlvbiAobmV3U2VydmVyKSB7XG4gICAgICAgIHJldHVybiBvbGRTZXJ2ZXJzLmRlbGV0ZShuZXdTZXJ2ZXIpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gKDAsIF9mcm9tMi5kZWZhdWx0KShvbGRTZXJ2ZXJzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaXNTdGFsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc1N0YWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXhwaXJhdGlvblRpbWUubGVzc1RoYW4oRGF0ZS5ub3coKSkgfHwgdGhpcy5yb3V0ZXJzLnNpemUoKSA8PSBNSU5fUk9VVEVSUyB8fCB0aGlzLnJlYWRlcnMuaXNFbXB0eSgpIHx8IHRoaXMud3JpdGVycy5pc0VtcHR5KCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9hbGxTZXJ2ZXJzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9hbGxTZXJ2ZXJzKCkge1xuICAgICAgcmV0dXJuIFtdLmNvbmNhdCgoMCwgX3RvQ29uc3VtYWJsZUFycmF5My5kZWZhdWx0KSh0aGlzLnJvdXRlcnMudG9BcnJheSgpKSwgKDAsIF90b0NvbnN1bWFibGVBcnJheTMuZGVmYXVsdCkodGhpcy5yZWFkZXJzLnRvQXJyYXkoKSksICgwLCBfdG9Db25zdW1hYmxlQXJyYXkzLmRlZmF1bHQpKHRoaXMud3JpdGVycy50b0FycmF5KCkpKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFJvdXRpbmdUYWJsZTtcbn0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gUm91dGluZ1RhYmxlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2tcIik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbnZhciBfcmVjb3JkID0gcmVxdWlyZShcIi4uL3JlY29yZFwiKTtcblxudmFyIF9yZWNvcmQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVjb3JkKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBIYW5kbGVzIGEgUlVOL1BVTExfQUxMLCBvciBSVU4vRElTQ0FSRF9BTEwgcmVxdWVzdHMsIG1hcHMgdGhlIHJlc3BvbnNlc1xuICogaW4gYSB3YXkgdGhhdCBhIHVzZXItcHJvdmlkZWQgb2JzZXJ2ZXIgY2FuIHNlZSB0aGVzZSBhcyBhIGNsZWFuIFN0cmVhbVxuICogb2YgcmVjb3Jkcy5cbiAqIFRoaXMgY2xhc3Mgd2lsbCBxdWV1ZSB1cCBpbmNvbWluZyBtZXNzYWdlcyB1bnRpbCBhIHVzZXItcHJvdmlkZWQgb2JzZXJ2ZXJcbiAqIGZvciB0aGUgaW5jb21pbmcgc3RyZWFtIGlzIHJlZ2lzdGVyZWQuIFRodXMsIHdlIGtlZXAgZmllbGRzIGFyb3VuZFxuICogZm9yIHRyYWNraW5nIGhlYWQvcmVjb3Jkcy90YWlsLiBUaGVzZSBhcmUgb25seSB1c2VkIGlmIHRoZXJlIGlzIG5vXG4gKiBvYnNlcnZlciByZWdpc3RlcmVkLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cbnZhciBTdHJlYW1PYnNlcnZlciA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0gZXJyb3JUcmFuc2Zvcm1lciBvcHRpb25hbCBjYWxsYmFjayB0byBiZSB1c2VkIGZvciBhZGRpbmcgYWRkaXRpb25hbCBsb2dpYyBvbiBlcnJvclxuICAgKi9cbiAgZnVuY3Rpb24gU3RyZWFtT2JzZXJ2ZXIoKSB7XG4gICAgdmFyIGVycm9yVHJhbnNmb3JtZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIHJldHVybiBlcnI7XG4gICAgfTtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBTdHJlYW1PYnNlcnZlcik7XG5cbiAgICB0aGlzLl9maWVsZEtleXMgPSBudWxsO1xuICAgIHRoaXMuX2ZpZWxkTG9va3VwID0gbnVsbDtcbiAgICB0aGlzLl9xdWV1ZWRSZWNvcmRzID0gW107XG4gICAgdGhpcy5fdGFpbCA9IG51bGw7XG4gICAgdGhpcy5fZXJyb3IgPSBudWxsO1xuICAgIHRoaXMuX2hhc0ZhaWxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2Vycm9yVHJhbnNmb3JtZXIgPSBlcnJvclRyYW5zZm9ybWVyO1xuICAgIHRoaXMuX29ic2VydmVyID0gbnVsbDtcbiAgICB0aGlzLl9jb25uID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIGJlIGNhbGxlZCBvbiBldmVyeSByZWNvcmQgdGhhdCBjb21lcyBpbiBhbmQgdHJhbnNmb3JtIGEgcmF3IHJlY29yZFxuICAgKiB0byBhIE9iamVjdC4gSWYgdXNlci1wcm92aWRlZCBvYnNlcnZlciBpcyBwcmVzZW50LCBwYXNzIHRyYW5zZm9ybWVkIHJlY29yZFxuICAgKiB0byBpdCdzIG9uTmV4dCBtZXRob2QsIG90aGVyd2lzZSwgcHVzaCB0byByZWNvcmQgcXVlLlxuICAgKiBAcGFyYW0ge0FycmF5fSByYXdSZWNvcmQgLSBBbiBhcnJheSB3aXRoIHRoZSByYXcgcmVjb3JkXG4gICAqL1xuXG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoU3RyZWFtT2JzZXJ2ZXIsIFt7XG4gICAga2V5OiBcIm9uTmV4dFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbk5leHQocmF3UmVjb3JkKSB7XG4gICAgICB2YXIgcmVjb3JkID0gbmV3IF9yZWNvcmQyLmRlZmF1bHQodGhpcy5fZmllbGRLZXlzLCByYXdSZWNvcmQsIHRoaXMuX2ZpZWxkTG9va3VwKTtcbiAgICAgIGlmICh0aGlzLl9vYnNlcnZlcikge1xuICAgICAgICB0aGlzLl9vYnNlcnZlci5vbk5leHQocmVjb3JkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3F1ZXVlZFJlY29yZHMucHVzaChyZWNvcmQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbkNvbXBsZXRlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNvbXBsZXRlZChtZXRhKSB7XG4gICAgICBpZiAodGhpcy5fZmllbGRLZXlzID09PSBudWxsKSB7XG4gICAgICAgIC8vIFN0cmVhbSBoZWFkZXIsIGJ1aWxkIGEgbmFtZS0+aW5kZXggZmllbGQgbG9va3VwIHRhYmxlXG4gICAgICAgIC8vIHRvIGJlIHVzZWQgYnkgcmVjb3Jkcy4gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gdG8gbWFrZSBpdFxuICAgICAgICAvLyBmYXN0ZXIgdG8gbG9vayB1cCBmaWVsZHMgaW4gYSByZWNvcmQgYnkgbmFtZSwgcmF0aGVyIHRoYW4gYnkgaW5kZXguXG4gICAgICAgIC8vIFNpbmNlIHRoZSByZWNvcmRzIHdlIGdldCBiYWNrIHZpYSBCb2x0IGFyZSBqdXN0IGFycmF5cyBvZiB2YWx1ZXMuXG4gICAgICAgIHRoaXMuX2ZpZWxkS2V5cyA9IFtdO1xuICAgICAgICB0aGlzLl9maWVsZExvb2t1cCA9IHt9O1xuICAgICAgICBpZiAobWV0YS5maWVsZHMgJiYgbWV0YS5maWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuX2ZpZWxkS2V5cyA9IG1ldGEuZmllbGRzO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWV0YS5maWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpZWxkTG9va3VwW21ldGEuZmllbGRzW2ldXSA9IGk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBFbmQgb2Ygc3RyZWFtXG4gICAgICAgIGlmICh0aGlzLl9vYnNlcnZlcikge1xuICAgICAgICAgIHRoaXMuX29ic2VydmVyLm9uQ29tcGxldGVkKG1ldGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3RhaWwgPSBtZXRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlc29sdmVDb25uZWN0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc29sdmVDb25uZWN0aW9uKGNvbm4pIHtcbiAgICAgIHRoaXMuX2Nvbm4gPSBjb25uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdpbGwgYmUgY2FsbGVkIG9uIGVycm9ycy5cbiAgICAgKiBJZiB1c2VyLXByb3ZpZGVkIG9ic2VydmVyIGlzIHByZXNlbnQsIHBhc3MgdGhlIGVycm9yXG4gICAgICogdG8gaXQncyBvbkVycm9yIG1ldGhvZCwgb3RoZXJ3aXNlIHNldCBpbnN0YW5jZSB2YXJpYWJsZSBfZXJyb3IuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGVycm9yIC0gQW4gZXJyb3Igb2JqZWN0XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJvbkVycm9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uRXJyb3IoZXJyb3IpIHtcbiAgICAgIHZhciB0cmFuc2Zvcm1lZEVycm9yID0gdGhpcy5fZXJyb3JUcmFuc2Zvcm1lcihlcnJvciwgdGhpcy5fY29ubik7XG4gICAgICBpZiAodGhpcy5faGFzRmFpbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2hhc0ZhaWxlZCA9IHRydWU7XG4gICAgICBpZiAodGhpcy5fb2JzZXJ2ZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX29ic2VydmVyLm9uRXJyb3IpIHtcbiAgICAgICAgICB0aGlzLl9vYnNlcnZlci5vbkVycm9yKHRyYW5zZm9ybWVkRXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHRyYW5zZm9ybWVkRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9lcnJvciA9IHRyYW5zZm9ybWVkRXJyb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3Vic2NyaWJlIHRvIGV2ZW50cyB3aXRoIHByb3ZpZGVkIG9ic2VydmVyLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYnNlcnZlciAtIE9ic2VydmVyIG9iamVjdFxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24ocmVjb3JkOiBPYmplY3QpfSBvYnNlcnZlci5vbk5leHQgLSBIYW5kbGUgcmVjb3Jkcywgb25lIGJ5IG9uZS5cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1ldGFkYXRhOiBPYmplY3QpfSBvYnNlcnZlci5vbkNvbXBsZXRlIC0gSGFuZGxlIHN0cmVhbSB0YWlsLCB0aGUgbWV0YWRhdGEuXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbihlcnJvcjogT2JqZWN0KX0gb2JzZXJ2ZXIub25FcnJvciAtIEhhbmRsZSBlcnJvcnMuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJzdWJzY3JpYmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XG4gICAgICBpZiAodGhpcy5fZXJyb3IpIHtcbiAgICAgICAgb2JzZXJ2ZXIub25FcnJvcih0aGlzLl9lcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9xdWV1ZWRSZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9xdWV1ZWRSZWNvcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIub25OZXh0KHRoaXMuX3F1ZXVlZFJlY29yZHNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fdGFpbCkge1xuICAgICAgICBvYnNlcnZlci5vbkNvbXBsZXRlZCh0aGlzLl90YWlsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX29ic2VydmVyID0gb2JzZXJ2ZXI7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBTdHJlYW1PYnNlcnZlcjtcbn0oKTsgLyoqXG4gICAgICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAgICAgICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICAgICAgKlxuICAgICAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAgICAgICpcbiAgICAgICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICAgICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgICAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgICAgICpcbiAgICAgICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICAgICAgKlxuICAgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICAgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICAgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gICAgICAqL1xuXG5leHBvcnRzLmRlZmF1bHQgPSBTdHJlYW1PYnNlcnZlcjsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfcHJvbWlzZSA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9wcm9taXNlJyk7XG5cbnZhciBfcHJvbWlzZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9taXNlKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2snKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc0NhbGxDaGVjazIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcycpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbnZhciBfZXJyb3IgPSByZXF1aXJlKCcuLi9lcnJvcicpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgREVGQVVMVF9NQVhfUkVUUllfVElNRV9NUyA9IDMwICogMTAwMDsgLy8gMzAgc2Vjb25kc1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBERUZBVUxUX0lOSVRJQUxfUkVUUllfREVMQVlfTVMgPSAxMDAwOyAvLyAxIHNlY29uZHNcbnZhciBERUZBVUxUX1JFVFJZX0RFTEFZX01VTFRJUExJRVIgPSAyLjA7XG52YXIgREVGQVVMVF9SRVRSWV9ERUxBWV9KSVRURVJfRkFDVE9SID0gMC4yO1xuXG52YXIgVHJhbnNhY3Rpb25FeGVjdXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVHJhbnNhY3Rpb25FeGVjdXRvcihtYXhSZXRyeVRpbWVNcywgaW5pdGlhbFJldHJ5RGVsYXlNcywgbXVsdGlwbGllciwgaml0dGVyRmFjdG9yKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgVHJhbnNhY3Rpb25FeGVjdXRvcik7XG5cbiAgICB0aGlzLl9tYXhSZXRyeVRpbWVNcyA9IF92YWx1ZU9yRGVmYXVsdChtYXhSZXRyeVRpbWVNcywgREVGQVVMVF9NQVhfUkVUUllfVElNRV9NUyk7XG4gICAgdGhpcy5faW5pdGlhbFJldHJ5RGVsYXlNcyA9IF92YWx1ZU9yRGVmYXVsdChpbml0aWFsUmV0cnlEZWxheU1zLCBERUZBVUxUX0lOSVRJQUxfUkVUUllfREVMQVlfTVMpO1xuICAgIHRoaXMuX211bHRpcGxpZXIgPSBfdmFsdWVPckRlZmF1bHQobXVsdGlwbGllciwgREVGQVVMVF9SRVRSWV9ERUxBWV9NVUxUSVBMSUVSKTtcbiAgICB0aGlzLl9qaXR0ZXJGYWN0b3IgPSBfdmFsdWVPckRlZmF1bHQoaml0dGVyRmFjdG9yLCBERUZBVUxUX1JFVFJZX0RFTEFZX0pJVFRFUl9GQUNUT1IpO1xuXG4gICAgdGhpcy5faW5GbGlnaHRUaW1lb3V0SWRzID0gW107XG5cbiAgICB0aGlzLl92ZXJpZnlBZnRlckNvbnN0cnVjdGlvbigpO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoVHJhbnNhY3Rpb25FeGVjdXRvciwgW3tcbiAgICBrZXk6ICdleGVjdXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXhlY3V0ZSh0cmFuc2FjdGlvbkNyZWF0b3IsIHRyYW5zYWN0aW9uV29yaykge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgcmV0dXJuIG5ldyBfcHJvbWlzZTIuZGVmYXVsdChmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIF90aGlzLl9leGVjdXRlVHJhbnNhY3Rpb25JbnNpZGVQcm9taXNlKHRyYW5zYWN0aW9uQ3JlYXRvciwgdHJhbnNhY3Rpb25Xb3JrLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIHZhciByZXRyeVN0YXJ0VGltZU1zID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdmFyIHJldHJ5RGVsYXlNcyA9IF90aGlzLl9pbml0aWFsUmV0cnlEZWxheU1zO1xuICAgICAgICByZXR1cm4gX3RoaXMuX3JldHJ5VHJhbnNhY3Rpb25Qcm9taXNlKHRyYW5zYWN0aW9uQ3JlYXRvciwgdHJhbnNhY3Rpb25Xb3JrLCBlcnJvciwgcmV0cnlTdGFydFRpbWVNcywgcmV0cnlEZWxheU1zKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2Nsb3NlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAvLyBjYW5jZWwgYWxsIGV4aXN0aW5nIHRpbWVvdXRzIHRvIHByZXZlbnQgZnVydGhlciByZXRyaWVzXG4gICAgICB0aGlzLl9pbkZsaWdodFRpbWVvdXRJZHMuZm9yRWFjaChmdW5jdGlvbiAodGltZW91dElkKSB7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5faW5GbGlnaHRUaW1lb3V0SWRzID0gW107XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX3JldHJ5VHJhbnNhY3Rpb25Qcm9taXNlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3JldHJ5VHJhbnNhY3Rpb25Qcm9taXNlKHRyYW5zYWN0aW9uQ3JlYXRvciwgdHJhbnNhY3Rpb25Xb3JrLCBlcnJvciwgcmV0cnlTdGFydFRpbWUsIHJldHJ5RGVsYXlNcykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBlbGFwc2VkVGltZU1zID0gRGF0ZS5ub3coKSAtIHJldHJ5U3RhcnRUaW1lO1xuXG4gICAgICBpZiAoZWxhcHNlZFRpbWVNcyA+IHRoaXMuX21heFJldHJ5VGltZU1zIHx8ICFUcmFuc2FjdGlvbkV4ZWN1dG9yLl9jYW5SZXRyeU9uKGVycm9yKSkge1xuICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQucmVqZWN0KGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBfcHJvbWlzZTIuZGVmYXVsdChmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBuZXh0UmV0cnlUaW1lID0gX3RoaXMyLl9jb21wdXRlRGVsYXlXaXRoSml0dGVyKHJldHJ5RGVsYXlNcyk7XG4gICAgICAgIHZhciB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBmaWx0ZXIgb3V0IHRoaXMgdGltZW91dElkIHdoZW4gdGltZSBoYXMgY29tZSBhbmQgZnVuY3Rpb24gaXMgYmVpbmcgZXhlY3V0ZWRcbiAgICAgICAgICBfdGhpczIuX2luRmxpZ2h0VGltZW91dElkcyA9IF90aGlzMi5faW5GbGlnaHRUaW1lb3V0SWRzLmZpbHRlcihmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBpZCAhPT0gdGltZW91dElkO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIF90aGlzMi5fZXhlY3V0ZVRyYW5zYWN0aW9uSW5zaWRlUHJvbWlzZSh0cmFuc2FjdGlvbkNyZWF0b3IsIHRyYW5zYWN0aW9uV29yaywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSwgbmV4dFJldHJ5VGltZSk7XG4gICAgICAgIC8vIGFkZCBuZXdseSBjcmVhdGVkIHRpbWVvdXRJZCB0byB0aGUgbGlzdCBvZiBhbGwgaW4tZmxpZ2h0IHRpbWVvdXRzXG4gICAgICAgIF90aGlzMi5faW5GbGlnaHRUaW1lb3V0SWRzLnB1c2godGltZW91dElkKTtcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICB2YXIgbmV4dFJldHJ5RGVsYXlNcyA9IHJldHJ5RGVsYXlNcyAqIF90aGlzMi5fbXVsdGlwbGllcjtcbiAgICAgICAgcmV0dXJuIF90aGlzMi5fcmV0cnlUcmFuc2FjdGlvblByb21pc2UodHJhbnNhY3Rpb25DcmVhdG9yLCB0cmFuc2FjdGlvbldvcmssIGVycm9yLCByZXRyeVN0YXJ0VGltZSwgbmV4dFJldHJ5RGVsYXlNcyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZXhlY3V0ZVRyYW5zYWN0aW9uSW5zaWRlUHJvbWlzZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9leGVjdXRlVHJhbnNhY3Rpb25JbnNpZGVQcm9taXNlKHRyYW5zYWN0aW9uQ3JlYXRvciwgdHJhbnNhY3Rpb25Xb3JrLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB0eCA9IHRyYW5zYWN0aW9uQ3JlYXRvcigpO1xuICAgICAgICB2YXIgdHJhbnNhY3Rpb25Xb3JrUmVzdWx0ID0gdHJhbnNhY3Rpb25Xb3JrKHR4KTtcblxuICAgICAgICAvLyB1c2VyIGRlZmluZWQgY2FsbGJhY2sgaXMgc3VwcG9zZWQgdG8gcmV0dXJuIGEgcHJvbWlzZSwgYnV0IGl0IG1pZ2h0IG5vdDsgc28gdG8gcHJvdGVjdCBhZ2FpbnN0IGFuXG4gICAgICAgIC8vIGluY29ycmVjdCBBUEkgdXNhZ2Ugd2Ugd3JhcCB0aGUgcmV0dXJuZWQgdmFsdWUgd2l0aCBhIHJlc29sdmVkIHByb21pc2U7IHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxuICAgICAgICAvLyB2YWxpZGF0aW9uIHN0ZXAgd2l0aG91dCB0eXBlIGNoZWNrc1xuICAgICAgICB2YXIgcmVzdWx0UHJvbWlzZSA9IF9wcm9taXNlMi5kZWZhdWx0LnJlc29sdmUodHJhbnNhY3Rpb25Xb3JrUmVzdWx0KTtcblxuICAgICAgICByZXN1bHRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgIGlmICh0eC5pc09wZW4oKSkge1xuICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb24gd29yayByZXR1cm5lZCByZXNvbHZlZCBwcm9taXNlIGFuZCB0cmFuc2FjdGlvbiBoYXMgbm90IGJlZW4gY29tbWl0dGVkL3JvbGxlZCBiYWNrXG4gICAgICAgICAgICAvLyB0cnkgdG8gY29tbWl0IHRoZSB0cmFuc2FjdGlvblxuICAgICAgICAgICAgdHguY29tbWl0KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIC8vIHRyYW5zYWN0aW9uIHdhcyBjb21taXR0ZWQsIHJldHVybiByZXN1bHQgdG8gdGhlIHVzZXJcbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIHRyYW5zYWN0aW9uIGZhaWxlZCB0byBjb21taXQsIHByb3BhZ2F0ZSB0aGUgZmFpbHVyZVxuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRyYW5zYWN0aW9uIHdvcmsgcmV0dXJuZWQgcmVzb2x2ZWQgcHJvbWlzZSBhbmQgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeSBjb21taXR0ZWQvcm9sbGVkIGJhY2tcbiAgICAgICAgICAgIC8vIHJldHVybiB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IGdpdmVuIHRyYW5zYWN0aW9uIHdvcmtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIC8vIHRyYW5zYWN0aW9uIHdvcmsgcmV0dXJuZWQgcmVqZWN0ZWQgcHJvbWlzZSwgcHJvcGFnYXRlIHRoZSBmYWlsdXJlXG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19jb21wdXRlRGVsYXlXaXRoSml0dGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2NvbXB1dGVEZWxheVdpdGhKaXR0ZXIoZGVsYXlNcykge1xuICAgICAgdmFyIGppdHRlciA9IGRlbGF5TXMgKiB0aGlzLl9qaXR0ZXJGYWN0b3I7XG4gICAgICB2YXIgbWluID0gZGVsYXlNcyAtIGppdHRlcjtcbiAgICAgIHZhciBtYXggPSBkZWxheU1zICsgaml0dGVyO1xuICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfdmVyaWZ5QWZ0ZXJDb25zdHJ1Y3Rpb24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfdmVyaWZ5QWZ0ZXJDb25zdHJ1Y3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fbWF4UmV0cnlUaW1lTXMgPCAwKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3IubmV3RXJyb3IpKCdNYXggcmV0cnkgdGltZSBzaG91bGQgYmUgPj0gMDogJyArIHRoaXMuX21heFJldHJ5VGltZU1zKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9pbml0aWFsUmV0cnlEZWxheU1zIDwgMCkge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKSgnSW5pdGlhbCByZXRyeSBkZWxheSBzaG91bGQgPj0gMDogJyArIHRoaXMuX2luaXRpYWxSZXRyeURlbGF5TXMpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX211bHRpcGxpZXIgPCAxLjApIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvci5uZXdFcnJvcikoJ011bHRpcGxpZXIgc2hvdWxkIGJlID49IDEuMDogJyArIHRoaXMuX211bHRpcGxpZXIpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2ppdHRlckZhY3RvciA8IDAgfHwgdGhpcy5faml0dGVyRmFjdG9yID4gMSkge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKSgnSml0dGVyIGZhY3RvciBzaG91bGQgYmUgaW4gWzAuMCwgMS4wXTogJyArIHRoaXMuX2ppdHRlckZhY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6ICdfY2FuUmV0cnlPbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jYW5SZXRyeU9uKGVycm9yKSB7XG4gICAgICByZXR1cm4gZXJyb3IgJiYgZXJyb3IuY29kZSAmJiAoZXJyb3IuY29kZSA9PT0gX2Vycm9yLlNFUlZJQ0VfVU5BVkFJTEFCTEUgfHwgZXJyb3IuY29kZSA9PT0gX2Vycm9yLlNFU1NJT05fRVhQSVJFRCB8fCB0aGlzLl9pc1RyYW5zaWVudEVycm9yKGVycm9yKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2lzVHJhbnNpZW50RXJyb3InLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfaXNUcmFuc2llbnRFcnJvcihlcnJvcikge1xuICAgICAgLy8gUmV0cmllcyBzaG91bGQgbm90IGhhcHBlbiB3aGVuIHRyYW5zYWN0aW9uIHdhcyBleHBsaWNpdGx5IHRlcm1pbmF0ZWQgYnkgdGhlIHVzZXIuXG4gICAgICAvLyBUZXJtaW5hdGlvbiBvZiB0cmFuc2FjdGlvbiBtaWdodCByZXN1bHQgaW4gdHdvIGRpZmZlcmVudCBlcnJvciBjb2RlcyBkZXBlbmRpbmcgb24gd2hlcmUgaXQgd2FzXG4gICAgICAvLyB0ZXJtaW5hdGVkLiBUaGVzZSBhcmUgcmVhbGx5IGNsaWVudCBlcnJvcnMgYnV0IGNsYXNzaWZpY2F0aW9uIG9uIHRoZSBzZXJ2ZXIgaXMgbm90IGVudGlyZWx5IGNvcnJlY3QgYW5kXG4gICAgICAvLyB0aGV5IGFyZSBjbGFzc2lmaWVkIGFzIHRyYW5zaWVudC5cblxuICAgICAgdmFyIGNvZGUgPSBlcnJvci5jb2RlO1xuICAgICAgaWYgKGNvZGUuaW5kZXhPZignVHJhbnNpZW50RXJyb3InKSA+PSAwKSB7XG4gICAgICAgIGlmIChjb2RlID09PSAnTmVvLlRyYW5zaWVudEVycm9yLlRyYW5zYWN0aW9uLlRlcm1pbmF0ZWQnIHx8IGNvZGUgPT09ICdOZW8uVHJhbnNpZW50RXJyb3IuVHJhbnNhY3Rpb24uTG9ja0NsaWVudFN0b3BwZWQnKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gVHJhbnNhY3Rpb25FeGVjdXRvcjtcbn0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gVHJhbnNhY3Rpb25FeGVjdXRvcjtcbjtcblxuZnVuY3Rpb24gX3ZhbHVlT3JEZWZhdWx0KHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcbiAgaWYgKHZhbHVlIHx8IHZhbHVlID09PSAwKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBkZWZhdWx0VmFsdWU7XG59IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2J1ZiA9IHJlcXVpcmUoJy4vYnVmJyk7XG5cbnZhciBfc3RyaW5nX2RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpO1xuXG52YXIgX2Vycm9yID0gcmVxdWlyZSgnLi8uLi9lcnJvcicpO1xuXG52YXIgcGxhdGZvcm1PYmogPSB7fTsgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICAgICAgICAgICAgICAgICAgICAgICAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAgICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgICAgICAgICAgICAgICAgICAgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgICAgICAgICAgICAgICAgICAgICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgICAgICAgICAgICAgICAgICAgICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLy8gVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGNyb3NzLXBsYXRmb3JtIFVURi04IGVuY29kZXIgYW5kIGRlY29kZXIgdGhhdCB3b3Jrc1xuLy8gd2l0aCB0aGUgQnVmZmVyIEFQSSBkZWZpbmVkIGluIGJ1Zi5qc1xuXG50cnkge1xuICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlzICdidWZmZXInIGlzIG5vdCBhdmFpbGFibGVcbiAgcmVxdWlyZS5yZXNvbHZlKFwiYnVmZmVyXCIpO1xuICB2YXIgZGVjb2RlciA9IG5ldyBfc3RyaW5nX2RlY29kZXIuU3RyaW5nRGVjb2RlcigndXRmOCcpO1xuICB2YXIgbm9kZSA9IHJlcXVpcmUoXCJidWZmZXJcIik7XG5cbiAgcGxhdGZvcm1PYmogPSB7XG4gICAgXCJlbmNvZGVcIjogZnVuY3Rpb24gZW5jb2RlKHN0cikge1xuICAgICAgcmV0dXJuIG5ldyBfYnVmLk5vZGVCdWZmZXIobmV3IG5vZGUuQnVmZmVyKHN0ciwgXCJVVEYtOFwiKSk7XG4gICAgfSxcbiAgICBcImRlY29kZVwiOiBmdW5jdGlvbiBkZWNvZGUoYnVmZmVyLCBsZW5ndGgpIHtcbiAgICAgIGlmIChidWZmZXIgaW5zdGFuY2VvZiBfYnVmLk5vZGVCdWZmZXIpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gYnVmZmVyLnBvc2l0aW9uLFxuICAgICAgICAgICAgZW5kID0gc3RhcnQgKyBsZW5ndGg7XG4gICAgICAgIGJ1ZmZlci5wb3NpdGlvbiA9IE1hdGgubWluKGVuZCwgYnVmZmVyLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiBidWZmZXIuX2J1ZmZlci50b1N0cmluZygndXRmOCcsIHN0YXJ0LCBlbmQpO1xuICAgICAgfSBlbHNlIGlmIChidWZmZXIgaW5zdGFuY2VvZiBfYnVmLkNvbWJpbmVkQnVmZmVyKSB7XG4gICAgICAgIHZhciBvdXQgPSBzdHJlYW1EZWNvZGVDb21iaW5lZEJ1ZmZlcihidWZmZXIsIGxlbmd0aCwgZnVuY3Rpb24gKHBhcnRCdWZmZXIpIHtcbiAgICAgICAgICByZXR1cm4gZGVjb2Rlci53cml0ZShwYXJ0QnVmZmVyLl9idWZmZXIpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGRlY29kZXIuZW5kKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvci5uZXdFcnJvcikoXCJEb24ndCBrbm93IGhvdyB0byBkZWNvZGUgc3RyaW5ncyBmcm9tIGBcIiArIGJ1ZmZlciArIFwiYC5cIik7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSBjYXRjaCAoZSkge1xuXG4gIC8vIE5vdCBvbiBOb2RlSlMsIGFkZCBzaGltIGZvciBXZWJBUEkgVGV4dEVuY29kZXIvVGV4dERlY29kZXJcbiAgdmFyIHRleHRFbmNvZGluZyA9IHJlcXVpcmUoJy4uLy4uL2V4dGVybmFsL3RleHQtZW5jb2RpbmcvaW5kZXgnKTtcbiAgdmFyIGVuY29kZXIgPSBuZXcgdGV4dEVuY29kaW5nLlRleHRFbmNvZGVyKFwidXRmLThcIik7XG4gIHZhciBfZGVjb2RlciA9IG5ldyB0ZXh0RW5jb2RpbmcuVGV4dERlY29kZXIoXCJ1dGYtOFwiKTtcblxuICBwbGF0Zm9ybU9iaiA9IHtcbiAgICBcImVuY29kZVwiOiBmdW5jdGlvbiBlbmNvZGUoc3RyKSB7XG4gICAgICByZXR1cm4gbmV3IF9idWYuSGVhcEJ1ZmZlcihlbmNvZGVyLmVuY29kZShzdHIpLmJ1ZmZlcik7XG4gICAgfSxcbiAgICBcImRlY29kZVwiOiBmdW5jdGlvbiBkZWNvZGUoYnVmZmVyLCBsZW5ndGgpIHtcbiAgICAgIGlmIChidWZmZXIgaW5zdGFuY2VvZiBfYnVmLkhlYXBCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIF9kZWNvZGVyLmRlY29kZShidWZmZXIucmVhZFZpZXcoTWF0aC5taW4obGVuZ3RoLCBidWZmZXIubGVuZ3RoIC0gYnVmZmVyLnBvc2l0aW9uKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRGVjb2RpbmcgY29tYmluZWQgYnVmZmVyIGlzIGNvbXBsaWNhdGVkLiBGb3Igc2ltcGxpY2l0eSwgZm9yIG5vdywgXG4gICAgICAgIC8vIHdlIHNpbXBseSBjb3B5IHRoZSBjb21iaW5lZCBidWZmZXIgaW50byBhIHJlZ3VsYXIgYnVmZmVyIGFuZCBkZWNvZGUgdGhhdC5cbiAgICAgICAgdmFyIHRtcEJ1ZiA9ICgwLCBfYnVmLmFsbG9jKShsZW5ndGgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdG1wQnVmLndyaXRlVUludDgoYnVmZmVyLnJlYWRVSW50OCgpKTtcbiAgICAgICAgfVxuICAgICAgICB0bXBCdWYucmVzZXQoKTtcbiAgICAgICAgcmV0dXJuIF9kZWNvZGVyLmRlY29kZSh0bXBCdWYucmVhZFZpZXcobGVuZ3RoKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG52YXIgc3RyZWFtRGVjb2RlQ29tYmluZWRCdWZmZXIgPSBmdW5jdGlvbiBzdHJlYW1EZWNvZGVDb21iaW5lZEJ1ZmZlcihjb21iaW5lZEJ1ZmZlcnMsIGxlbmd0aCwgZGVjb2RlRm4sIGVuZEZuKSB7XG4gIHZhciByZW1haW5pbmdCeXRlc1RvUmVhZCA9IGxlbmd0aDtcbiAgdmFyIHBvc2l0aW9uID0gY29tYmluZWRCdWZmZXJzLnBvc2l0aW9uO1xuICBjb21iaW5lZEJ1ZmZlcnMuX3VwZGF0ZVBvcyhNYXRoLm1pbihsZW5ndGgsIGNvbWJpbmVkQnVmZmVycy5sZW5ndGggLSBwb3NpdGlvbikpO1xuICAvLyBSZWR1Y2UgQ29tYmluZWRCdWZmZXJzIHRvIGEgZGVjb2RlZCBzdHJpbmdcbiAgdmFyIG91dCA9IGNvbWJpbmVkQnVmZmVycy5fYnVmZmVycy5yZWR1Y2UoZnVuY3Rpb24gKGxhc3QsIHBhcnRCdWZmZXIpIHtcbiAgICBpZiAocmVtYWluaW5nQnl0ZXNUb1JlYWQgPD0gMCkge1xuICAgICAgcmV0dXJuIGxhc3Q7XG4gICAgfSBlbHNlIGlmIChwb3NpdGlvbiA+PSBwYXJ0QnVmZmVyLmxlbmd0aCkge1xuICAgICAgcG9zaXRpb24gLT0gcGFydEJ1ZmZlci5sZW5ndGg7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnRCdWZmZXIuX3VwZGF0ZVBvcyhwb3NpdGlvbiAtIHBhcnRCdWZmZXIucG9zaXRpb24pO1xuICAgICAgdmFyIGJ5dGVzVG9SZWFkID0gTWF0aC5taW4ocGFydEJ1ZmZlci5sZW5ndGggLSBwb3NpdGlvbiwgcmVtYWluaW5nQnl0ZXNUb1JlYWQpO1xuICAgICAgdmFyIGxhc3RTbGljZSA9IHBhcnRCdWZmZXIucmVhZFNsaWNlKGJ5dGVzVG9SZWFkKTtcbiAgICAgIHBhcnRCdWZmZXIuX3VwZGF0ZVBvcyhieXRlc1RvUmVhZCk7XG4gICAgICByZW1haW5pbmdCeXRlc1RvUmVhZCA9IE1hdGgubWF4KHJlbWFpbmluZ0J5dGVzVG9SZWFkIC0gbGFzdFNsaWNlLmxlbmd0aCwgMCk7XG4gICAgICBwb3NpdGlvbiA9IDA7XG4gICAgICByZXR1cm4gbGFzdCArIGRlY29kZUZuKGxhc3RTbGljZSk7XG4gICAgfVxuICB9LCAnJyk7XG4gIHJldHVybiBvdXQgKyBlbmRGbigpO1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gcGxhdGZvcm1PYmo7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkVOQ1JZUFRJT05fT0ZGID0gZXhwb3J0cy5FTkNSWVBUSU9OX09OID0gZXhwb3J0cy5hc3NlcnRTdHJpbmcgPSBleHBvcnRzLmlzRW1wdHlPYmplY3RPck51bGwgPSB1bmRlZmluZWQ7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9qc29uL3N0cmluZ2lmeVwiKTtcblxudmFyIF9zdHJpbmdpZnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3RyaW5naWZ5KTtcblxudmFyIF90eXBlb2YyID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvaGVscGVycy90eXBlb2ZcIik7XG5cbnZhciBfdHlwZW9mMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3R5cGVvZjIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxudmFyIEVOQ1JZUFRJT05fT04gPSBcIkVOQ1JZUFRJT05fT05cIjtcbnZhciBFTkNSWVBUSU9OX09GRiA9IFwiRU5DUllQVElPTl9PRkZcIjtcblxuZnVuY3Rpb24gaXNFbXB0eU9iamVjdE9yTnVsbChvYmopIHtcbiAgaWYgKGlzTnVsbChvYmopKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoIWlzT2JqZWN0KG9iaikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBwcm9wIGluIG9iaikge1xuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNOdWxsKG9iaikge1xuICByZXR1cm4gb2JqID09PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6ICgwLCBfdHlwZW9mMy5kZWZhdWx0KShvYmopO1xuICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiBCb29sZWFuKG9iaik7XG59XG5cbmZ1bmN0aW9uIGFzc2VydFN0cmluZyhvYmosIG9iak5hbWUpIHtcbiAgaWYgKCFpc1N0cmluZyhvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihvYmpOYW1lICsgJyBleHBlY3RlZCB0byBiZSBzdHJpbmcgYnV0IHdhczogJyArICgwLCBfc3RyaW5naWZ5Mi5kZWZhdWx0KShvYmopKTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBpc1N0cmluZyhzdHIpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzdHIpID09PSAnW29iamVjdCBTdHJpbmddJztcbn1cblxuZXhwb3J0cy5pc0VtcHR5T2JqZWN0T3JOdWxsID0gaXNFbXB0eU9iamVjdE9yTnVsbDtcbmV4cG9ydHMuYXNzZXJ0U3RyaW5nID0gYXNzZXJ0U3RyaW5nO1xuZXhwb3J0cy5FTkNSWVBUSU9OX09OID0gRU5DUllQVElPTl9PTjtcbmV4cG9ydHMuRU5DUllQVElPTl9PRkYgPSBFTkNSWVBUSU9OX09GRjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrXCIpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzc1wiKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX2Vycm9yID0gcmVxdWlyZShcIi4vZXJyb3JcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIGdlbmVyYXRlRmllbGRMb29rdXAoa2V5cykge1xuICB2YXIgbG9va3VwID0ge307XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSwgaWR4KSB7XG4gICAgbG9va3VwW25hbWVdID0gaWR4O1xuICB9KTtcbiAgcmV0dXJuIGxvb2t1cDtcbn1cblxuLyoqXG4gKiBSZWNvcmRzIG1ha2UgdXAgdGhlIGNvbnRlbnRzIG9mIHRoZSB7QGxpbmsgUmVzdWx0fSwgYW5kIGlzIGhvdyB5b3UgYWNjZXNzXG4gKiB0aGUgb3V0cHV0IG9mIGEgc3RhdGVtZW50LiBBIHNpbXBsZSBzdGF0ZW1lbnQgbWlnaHQgeWllbGQgYSByZXN1bHQgc3RyZWFtXG4gKiB3aXRoIGEgc2luZ2xlIHJlY29yZCwgZm9yIGluc3RhbmNlOlxuICpcbiAqICAgICBNQVRDSCAodTpVc2VyKSBSRVRVUk4gdS5uYW1lLCB1LmFnZVxuICpcbiAqIFRoaXMgcmV0dXJucyBhIHN0cmVhbSBvZiByZWNvcmRzIHdpdGggdHdvIGZpZWxkcywgbmFtZWQgYHUubmFtZWAgYW5kIGB1LmFnZWAsXG4gKiBlYWNoIHJlY29yZCByZXByZXNlbnRzIG9uZSB1c2VyIGZvdW5kIGJ5IHRoZSBzdGF0ZW1lbnQgYWJvdmUuIFlvdSBjYW4gYWNjZXNzXG4gKiB0aGUgdmFsdWVzIG9mIGVhY2ggZmllbGQgZWl0aGVyIGJ5IG5hbWU6XG4gKlxuICogICAgIHJlY29yZC5nZXQoXCJ1Lm5hbWVcIilcbiAqXG4gKiBPciBieSBpdCdzIHBvc2l0aW9uOlxuICpcbiAqICAgICByZWNvcmQuZ2V0KDApXG4gKlxuICogQGFjY2VzcyBwdWJsaWNcbiAqL1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBSZWNvcmQgPSBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgcmVjb3JkIG9iamVjdC5cbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0ga2V5cyBBbiBhcnJheSBvZiBmaWVsZCBrZXlzLCBpbiB0aGUgb3JkZXIgdGhlIGZpZWxkcyBhcHBlYXJcbiAgICogICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHJlY29yZFxuICAgKiBAcGFyYW0ge09iamVjdH0gZmllbGRzIEFuIGFycmF5IG9mIGZpZWxkIHZhbHVlc1xuICAgKiBAcGFyYW0ge09iamVjdH0gZmllbGRMb29rdXAgQW4gb2JqZWN0IG9mIGZpZWxkTmFtZSAtPiB2YWx1ZSBpbmRleCwgdXNlZCB0byBtYXBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgbmFtZXMgdG8gdmFsdWVzLiBJZiB0aGlzIGlzIG51bGwsIG9uZSB3aWxsIGJlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFJlY29yZChrZXlzLCBmaWVsZHMpIHtcbiAgICB2YXIgZmllbGRMb29rdXAgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUmVjb3JkKTtcblxuICAgIHRoaXMua2V5cyA9IGtleXM7XG4gICAgdGhpcy5sZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB0aGlzLl9maWVsZHMgPSBmaWVsZHM7XG4gICAgdGhpcy5fZmllbGRMb29rdXAgPSBmaWVsZExvb2t1cCB8fCBnZW5lcmF0ZUZpZWxkTG9va3VwKGtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgZ2l2ZW4gZnVuY3Rpb24gZm9yIGVhY2ggZmllbGQgaW4gdGhpcyByZWNvcmQuIFRoZSBmdW5jdGlvblxuICAgKiB3aWxsIGdldCB0aHJlZSBhcmd1bWVudHMgLSB0aGUgdmFsdWUsIHRoZSBrZXkgYW5kIHRoaXMgcmVjb3JkLCBpbiB0aGF0XG4gICAqIG9yZGVyLlxuICAgKlxuICAgKiBAcGFyYW0gdmlzaXRvclxuICAgKi9cblxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKFJlY29yZCwgW3tcbiAgICBrZXk6IFwiZm9yRWFjaFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JFYWNoKHZpc2l0b3IpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5rZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZpc2l0b3IodGhpcy5fZmllbGRzW2ldLCB0aGlzLmtleXNbaV0sIHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhbiBvYmplY3Qgb3V0IG9mIHRoZSBjdXJyZW50IFJlY29yZFxuICAgICAqXG4gICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcInRvT2JqZWN0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSB2YWx1ZSBmcm9tIHRoaXMgcmVjb3JkLCBlaXRoZXIgYnkgaW5kZXggb3IgYnkgZmllbGQga2V5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd8TnVtYmVyfSBrZXkgRmllbGQga2V5LCBvciB0aGUgaW5kZXggb2YgdGhlIGZpZWxkLlxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgIHZhciBpbmRleCA9IHZvaWQgMDtcbiAgICAgIGlmICghKHR5cGVvZiBrZXkgPT09IFwibnVtYmVyXCIpKSB7XG4gICAgICAgIGluZGV4ID0gdGhpcy5fZmllbGRMb29rdXBba2V5XTtcbiAgICAgICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKShcIlRoaXMgcmVjb3JkIGhhcyBubyBmaWVsZCB3aXRoIGtleSAnXCIgKyBrZXkgKyBcIicsIGF2YWlsYWJsZSBrZXkgYXJlOiBbXCIgKyB0aGlzLmtleXMgKyBcIl0uXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleCA9IGtleTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluZGV4ID4gdGhpcy5fZmllbGRzLmxlbmd0aCAtIDEgfHwgaW5kZXggPCAwKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3IubmV3RXJyb3IpKFwiVGhpcyByZWNvcmQgaGFzIG5vIGZpZWxkIHdpdGggaW5kZXggJ1wiICsgaW5kZXggKyBcIicuIFJlbWVtYmVyIHRoYXQgaW5kZXhlcyBzdGFydCBhdCBgMGAsIFwiICsgXCJhbmQgbWFrZSBzdXJlIHlvdXIgc3RhdGVtZW50IHJldHVybnMgcmVjb3JkcyBpbiB0aGUgc2hhcGUgeW91IG1lYW50IGl0IHRvLlwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkc1tpbmRleF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSB2YWx1ZSBmcm9tIHRoaXMgcmVjb3JkLCBlaXRoZXIgYnkgaW5kZXggb3IgYnkgZmllbGQga2V5LCBleGlzdHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xOdW1iZXJ9IGtleSBGaWVsZCBrZXksIG9yIHRoZSBpbmRleCBvZiB0aGUgZmllbGQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJoYXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgLy8gaWYga2V5IGlzIGEgbnVtYmVyLCB3ZSBjaGVjayBpZiBpdCBpcyBpbiB0aGUgX2ZpZWxkcyBhcnJheVxuICAgICAgaWYgKHR5cGVvZiBrZXkgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGtleSA+PSAwICYmIGtleSA8IHRoaXMuX2ZpZWxkcy5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIGl0J3Mgbm90IGEgbnVtYmVyLCB3ZSBjaGVjayBfZmllbGRMb29rdXAgZGljdGlvbmFyeSBkaXJlY3RseVxuICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkTG9va3VwW2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFJlY29yZDtcbn0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gUmVjb3JkOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RhdGVtZW50VHlwZSA9IHVuZGVmaW5lZDtcblxudmFyIF9rZXlzID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzJyk7XG5cbnZhciBfa2V5czIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9rZXlzKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2snKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc0NhbGxDaGVjazIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcycpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbnZhciBfaW50ZWdlciA9IHJlcXVpcmUoJy4vaW50ZWdlcicpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAgKiBBIFJlc3VsdFN1bW1hcnkgaW5zdGFuY2UgY29udGFpbnMgc3RydWN0dXJlZCBtZXRhZGF0YSBmb3IgYSB7UmVzdWx0fS5cbiAgKiBAYWNjZXNzIHB1YmxpY1xuICAqL1xudmFyIFJlc3VsdFN1bW1hcnkgPSBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlbWVudCAtIFRoZSBzdGF0ZW1lbnQgdGhpcyBzdW1tYXJ5IGlzIGZvclxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1ldGVycyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBzdGF0ZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG1ldGFkYXRhIC0gU3RhdGVtZW50IG1ldGFkYXRhXG4gICAqL1xuICBmdW5jdGlvbiBSZXN1bHRTdW1tYXJ5KHN0YXRlbWVudCwgcGFyYW1ldGVycywgbWV0YWRhdGEpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBSZXN1bHRTdW1tYXJ5KTtcblxuICAgIHRoaXMuc3RhdGVtZW50ID0geyB0ZXh0OiBzdGF0ZW1lbnQsIHBhcmFtZXRlcnM6IHBhcmFtZXRlcnMgfTtcbiAgICB0aGlzLnN0YXRlbWVudFR5cGUgPSBtZXRhZGF0YS50eXBlO1xuICAgIHZhciBjb3VudGVycyA9IG5ldyBTdGF0ZW1lbnRTdGF0aXN0aWNzKG1ldGFkYXRhLnN0YXRzIHx8IHt9KTtcbiAgICB0aGlzLmNvdW50ZXJzID0gY291bnRlcnM7XG4gICAgLy9mb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHJlbW92ZSBpbiBmdXR1cmUgdmVyc2lvblxuICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcyA9IGNvdW50ZXJzO1xuICAgIHRoaXMucGxhbiA9IG1ldGFkYXRhLnBsYW4gfHwgbWV0YWRhdGEucHJvZmlsZSA/IG5ldyBQbGFuKG1ldGFkYXRhLnBsYW4gfHwgbWV0YWRhdGEucHJvZmlsZSkgOiBmYWxzZTtcbiAgICB0aGlzLnByb2ZpbGUgPSBtZXRhZGF0YS5wcm9maWxlID8gbmV3IFByb2ZpbGVkUGxhbihtZXRhZGF0YS5wcm9maWxlKSA6IGZhbHNlO1xuICAgIHRoaXMubm90aWZpY2F0aW9ucyA9IHRoaXMuX2J1aWxkTm90aWZpY2F0aW9ucyhtZXRhZGF0YS5ub3RpZmljYXRpb25zKTtcbiAgICB0aGlzLnNlcnZlciA9IG5ldyBTZXJ2ZXJJbmZvKG1ldGFkYXRhLnNlcnZlcik7XG4gICAgdGhpcy5yZXN1bHRDb25zdW1lZEFmdGVyID0gbWV0YWRhdGEucmVzdWx0X2NvbnN1bWVkX2FmdGVyO1xuICAgIHRoaXMucmVzdWx0QXZhaWxhYmxlQWZ0ZXIgPSBtZXRhZGF0YS5yZXN1bHRfYXZhaWxhYmxlX2FmdGVyO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoUmVzdWx0U3VtbWFyeSwgW3tcbiAgICBrZXk6ICdfYnVpbGROb3RpZmljYXRpb25zJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2J1aWxkTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb25zKSB7XG4gICAgICBpZiAoIW5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5vdGlmaWNhdGlvbnMubWFwKGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIHJldHVybiBuZXcgTm90aWZpY2F0aW9uKG4pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIHJlc3VsdCBzdW1tYXJ5IGhhcyBhIHBsYW5cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdoYXNQbGFuJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzUGxhbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYW4gaW5zdGFuY2VvZiBQbGFuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSByZXN1bHQgc3VtbWFyeSBoYXMgYSBwcm9maWxlXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnaGFzUHJvZmlsZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhc1Byb2ZpbGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9maWxlIGluc3RhbmNlb2YgUHJvZmlsZWRQbGFuO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gUmVzdWx0U3VtbWFyeTtcbn0oKTtcblxuLyoqXG4gICogQ2xhc3MgZm9yIGV4ZWN1dGlvbiBwbGFuIHJlY2VpdmVkIGJ5IHByZXBlbmRpbmcgQ3lwaGVyIHdpdGggRVhQTEFJTi5cbiAgKiBAYWNjZXNzIHB1YmxpY1xuICAqL1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBQbGFuID1cbi8qKlxuICogQ3JlYXRlIGEgUGxhbiBpbnN0YW5jZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gcGxhbiAtIE9iamVjdCB3aXRoIHBsYW4gZGF0YVxuICovXG5mdW5jdGlvbiBQbGFuKHBsYW4pIHtcbiAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUGxhbik7XG5cbiAgdGhpcy5vcGVyYXRvclR5cGUgPSBwbGFuLm9wZXJhdG9yVHlwZTtcbiAgdGhpcy5pZGVudGlmaWVycyA9IHBsYW4uaWRlbnRpZmllcnM7XG4gIHRoaXMuYXJndW1lbnRzID0gcGxhbi5hcmdzO1xuICB0aGlzLmNoaWxkcmVuID0gcGxhbi5jaGlsZHJlbiA/IHBsYW4uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBuZXcgUGxhbihjaGlsZCk7XG4gIH0pIDogW107XG59O1xuXG4vKipcbiAgKiBDbGFzcyBmb3IgZXhlY3V0aW9uIHBsYW4gcmVjZWl2ZWQgYnkgcHJlcGVuZGluZyBDeXBoZXIgd2l0aCBQUk9GSUxFLlxuICAqIEBhY2Nlc3MgcHVibGljXG4gICovXG5cblxudmFyIFByb2ZpbGVkUGxhbiA9XG4vKipcbiAqIENyZWF0ZSBhIFByb2ZpbGVkUGxhbiBpbnN0YW5jZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvZmlsZSAtIE9iamVjdCB3aXRoIHByb2ZpbGUgZGF0YVxuICovXG5mdW5jdGlvbiBQcm9maWxlZFBsYW4ocHJvZmlsZSkge1xuICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBQcm9maWxlZFBsYW4pO1xuXG4gIHRoaXMub3BlcmF0b3JUeXBlID0gcHJvZmlsZS5vcGVyYXRvclR5cGU7XG4gIHRoaXMuaWRlbnRpZmllcnMgPSBwcm9maWxlLmlkZW50aWZpZXJzO1xuICB0aGlzLmFyZ3VtZW50cyA9IHByb2ZpbGUuYXJncztcbiAgdGhpcy5kYkhpdHMgPSBwcm9maWxlLmFyZ3MuRGJIaXRzLnRvSW50KCk7XG4gIHRoaXMucm93cyA9IHByb2ZpbGUuYXJncy5Sb3dzLnRvSW50KCk7XG4gIHRoaXMuY2hpbGRyZW4gPSBwcm9maWxlLmNoaWxkcmVuID8gcHJvZmlsZS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9maWxlZFBsYW4oY2hpbGQpO1xuICB9KSA6IFtdO1xufTtcblxuLyoqXG4gICogR2V0IHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uIGZvciBhIHtSZXN1bHR9LlxuICAqIEBhY2Nlc3MgcHVibGljXG4gICovXG5cblxudmFyIFN0YXRlbWVudFN0YXRpc3RpY3MgPSBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBTdHJ1Y3R1cml6ZSB0aGUgc3RhdGlzdGljc1xuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRpc3RpY3MgLSBSZXN1bHQgc3RhdGlzdGljc1xuICAgKi9cbiAgZnVuY3Rpb24gU3RhdGVtZW50U3RhdGlzdGljcyhzdGF0aXN0aWNzKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIFN0YXRlbWVudFN0YXRpc3RpY3MpO1xuXG4gICAgdGhpcy5fc3RhdHMgPSB7XG4gICAgICBub2Rlc0NyZWF0ZWQ6IDAsXG4gICAgICBub2Rlc0RlbGV0ZWQ6IDAsXG4gICAgICByZWxhdGlvbnNoaXBzQ3JlYXRlZDogMCxcbiAgICAgIHJlbGF0aW9uc2hpcHNEZWxldGVkOiAwLFxuICAgICAgcHJvcGVydGllc1NldDogMCxcbiAgICAgIGxhYmVsc0FkZGVkOiAwLFxuICAgICAgbGFiZWxzUmVtb3ZlZDogMCxcbiAgICAgIGluZGV4ZXNBZGRlZDogMCxcbiAgICAgIGluZGV4ZXNSZW1vdmVkOiAwLFxuICAgICAgY29uc3RyYWludHNBZGRlZDogMCxcbiAgICAgIGNvbnN0cmFpbnRzUmVtb3ZlZDogMFxuICAgIH07XG4gICAgKDAsIF9rZXlzMi5kZWZhdWx0KShzdGF0aXN0aWNzKS5mb3JFYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgLy9UbyBjYW1lbENhc2VcbiAgICAgIF90aGlzLl9zdGF0c1tpbmRleC5yZXBsYWNlKC8oXFwtXFx3KS9nLCBmdW5jdGlvbiAobSkge1xuICAgICAgICByZXR1cm4gbVsxXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgfSldID0gKDAsIF9pbnRlZ2VyLmlzSW50KShzdGF0aXN0aWNzW2luZGV4XSkgPyBzdGF0aXN0aWNzW2luZGV4XS50b0ludCgpIDogc3RhdGlzdGljc1tpbmRleF07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGlkIHRoZSBkYXRhYmFzZSBnZXQgdXBkYXRlZD9cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG5cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShTdGF0ZW1lbnRTdGF0aXN0aWNzLCBbe1xuICAgIGtleTogJ2NvbnRhaW5zVXBkYXRlcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbnRhaW5zVXBkYXRlcygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICByZXR1cm4gKDAsIF9rZXlzMi5kZWZhdWx0KSh0aGlzLl9zdGF0cykucmVkdWNlKGZ1bmN0aW9uIChsYXN0LCBjdXJyZW50KSB7XG4gICAgICAgIHJldHVybiBsYXN0ICsgX3RoaXMyLl9zdGF0c1tjdXJyZW50XTtcbiAgICAgIH0sIDApID4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IC0gTnVtYmVyIG9mIG5vZGVzIGNyZWF0ZWQuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ25vZGVzQ3JlYXRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG5vZGVzQ3JlYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdGF0cy5ub2Rlc0NyZWF0ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7TnVtYmVyfSAtIE51bWJlciBvZiBub2RlcyBkZWxldGVkLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdub2Rlc0RlbGV0ZWQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBub2Rlc0RlbGV0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3RhdHMubm9kZXNEZWxldGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2YgcmVsYXRpb25zaGlwcyBjcmVhdGVkLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdyZWxhdGlvbnNoaXBzQ3JlYXRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbGF0aW9uc2hpcHNDcmVhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N0YXRzLnJlbGF0aW9uc2hpcHNDcmVhdGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2Ygbm9kZXMgZGVsZXRlZC5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAncmVsYXRpb25zaGlwc0RlbGV0ZWQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWxhdGlvbnNoaXBzRGVsZXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdGF0cy5yZWxhdGlvbnNoaXBzRGVsZXRlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IC0gTnVtYmVyIG9mIHByb3BlcnRpZXMgc2V0LlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdwcm9wZXJ0aWVzU2V0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHJvcGVydGllc1NldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdGF0cy5wcm9wZXJ0aWVzU2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2YgbGFiZWxzIGFkZGVkLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdsYWJlbHNBZGRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxhYmVsc0FkZGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N0YXRzLmxhYmVsc0FkZGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2YgbGFiZWxzIHJlbW92ZWQuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2xhYmVsc1JlbW92ZWQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsYWJlbHNSZW1vdmVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N0YXRzLmxhYmVsc1JlbW92ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7TnVtYmVyfSAtIE51bWJlciBvZiBpbmRleGVzIGFkZGVkLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpbmRleGVzQWRkZWQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbmRleGVzQWRkZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3RhdHMuaW5kZXhlc0FkZGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2YgaW5kZXhlcyByZW1vdmVkLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpbmRleGVzUmVtb3ZlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluZGV4ZXNSZW1vdmVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N0YXRzLmluZGV4ZXNSZW1vdmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2YgY29udHJhaW50cyBhZGRlZC5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY29uc3RyYWludHNBZGRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbnN0cmFpbnRzQWRkZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3RhdHMuY29uc3RyYWludHNBZGRlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IC0gTnVtYmVyIG9mIGNvbnRyYWludHMgcmVtb3ZlZC5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY29uc3RyYWludHNSZW1vdmVkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29uc3RyYWludHNSZW1vdmVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N0YXRzLmNvbnN0cmFpbnRzUmVtb3ZlZDtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFN0YXRlbWVudFN0YXRpc3RpY3M7XG59KCk7XG5cbi8qKlxuICAqIENsYXNzIGZvciBDeXBoZXIgbm90aWZpY2F0aW9uc1xuICAqIEBhY2Nlc3MgcHVibGljXG4gICovXG5cblxudmFyIE5vdGlmaWNhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIE5vdGlmaWNhdGlvbiBpbnN0YW5jZVxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtPYmplY3R9IG5vdGlmaWNhdGlvbiAtIE9iamVjdCB3aXRoIG5vdGlmaWNhdGlvbiBkYXRhXG4gICAqL1xuICBmdW5jdGlvbiBOb3RpZmljYXRpb24obm90aWZpY2F0aW9uKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgTm90aWZpY2F0aW9uKTtcblxuICAgIHRoaXMuY29kZSA9IG5vdGlmaWNhdGlvbi5jb2RlO1xuICAgIHRoaXMudGl0bGUgPSBub3RpZmljYXRpb24udGl0bGU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IG5vdGlmaWNhdGlvbi5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLnNldmVyaXR5ID0gbm90aWZpY2F0aW9uLnNldmVyaXR5O1xuICAgIHRoaXMucG9zaXRpb24gPSBOb3RpZmljYXRpb24uX2NvbnN0cnVjdFBvc2l0aW9uKG5vdGlmaWNhdGlvbi5wb3NpdGlvbik7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShOb3RpZmljYXRpb24sIG51bGwsIFt7XG4gICAga2V5OiAnX2NvbnN0cnVjdFBvc2l0aW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2NvbnN0cnVjdFBvc2l0aW9uKHBvcykge1xuICAgICAgaWYgKCFwb3MpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb2Zmc2V0OiBwb3Mub2Zmc2V0LnRvSW50KCksXG4gICAgICAgIGxpbmU6IHBvcy5saW5lLnRvSW50KCksXG4gICAgICAgIGNvbHVtbjogcG9zLmNvbHVtbi50b0ludCgpXG4gICAgICB9O1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gTm90aWZpY2F0aW9uO1xufSgpO1xuXG4vKipcbiAgKiBDbGFzcyBmb3IgZXhwb3Npbmcgc2VydmVyIGluZm8gZnJvbSBhIHJlc3VsdC5cbiAgKiBAYWNjZXNzIHB1YmxpY1xuICAqL1xuXG5cbnZhciBTZXJ2ZXJJbmZvID1cbi8qKlxuICogQ3JlYXRlIGEgU2VydmVySW5mbyBpbnN0YW5jZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gc2VydmVyTWV0YSAtIE9iamVjdCB3aXRoIHNlcnZlck1ldGEgZGF0YVxuICovXG5mdW5jdGlvbiBTZXJ2ZXJJbmZvKHNlcnZlck1ldGEpIHtcbiAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgU2VydmVySW5mbyk7XG5cbiAgaWYgKHNlcnZlck1ldGEpIHtcbiAgICB0aGlzLmFkZHJlc3MgPSBzZXJ2ZXJNZXRhLmFkZHJlc3M7XG4gICAgdGhpcy52ZXJzaW9uID0gc2VydmVyTWV0YS52ZXJzaW9uO1xuICB9XG59O1xuXG52YXIgc3RhdGVtZW50VHlwZSA9IHtcbiAgUkVBRF9PTkxZOiAncicsXG4gIFJFQURfV1JJVEU6ICdydycsXG4gIFdSSVRFX09OTFk6ICd3JyxcbiAgU0NIRU1BX1dSSVRFOiAncydcbn07XG5cbmV4cG9ydHMuc3RhdGVtZW50VHlwZSA9IHN0YXRlbWVudFR5cGU7XG5leHBvcnRzLmRlZmF1bHQgPSBSZXN1bHRTdW1tYXJ5OyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9wcm9taXNlID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UnKTtcblxudmFyIF9wcm9taXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb21pc2UpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjaycpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzJyk7XG5cbnZhciBfY3JlYXRlQ2xhc3MzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlQ2xhc3MyKTtcblxudmFyIF9yZXN1bHRTdW1tYXJ5ID0gcmVxdWlyZSgnLi9yZXN1bHQtc3VtbWFyeScpO1xuXG52YXIgX3Jlc3VsdFN1bW1hcnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVzdWx0U3VtbWFyeSk7XG5cbnZhciBfY29ubmVjdGlvbkhvbGRlciA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvY29ubmVjdGlvbi1ob2xkZXInKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gICogQSBzdHJlYW0gb2Yge0BsaW5rIFJlY29yZH0gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgYSBzdGF0ZW1lbnQuXG4gICogQGFjY2VzcyBwdWJsaWNcbiAgKi9cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogSW5qZWN0IHRoZSBvYnNlcnZlciB0byBiZSB1c2VkLlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGFjY2VzcyBwcml2YXRlXG4gICAqIEBwYXJhbSB7U3RyZWFtT2JzZXJ2ZXJ9IHN0cmVhbU9ic2VydmVyXG4gICAqIEBwYXJhbSB7bWl4ZWR9IHN0YXRlbWVudCAtIEN5cGhlciBzdGF0ZW1lbnQgdG8gZXhlY3V0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1ldGVycyAtIE1hcCB3aXRoIHBhcmFtZXRlcnMgdG8gdXNlIGluIHN0YXRlbWVudFxuICAgKiBAcGFyYW0gbWV0YVN1cHBsaWVyIGZ1bmN0aW9uLCB3aGVuIGNhbGxlZCBwcm92aWRlcyBtZXRhZGF0YVxuICAgKiBAcGFyYW0ge0Nvbm5lY3Rpb25Ib2xkZXJ9IGNvbm5lY3Rpb25Ib2xkZXIgLSB0byBiZSBub3RpZmllZCB3aGVuIHJlc3VsdCBpcyBlaXRoZXIgZnVsbHkgY29uc3VtZWQgb3IgZXJyb3IgaGFwcGVuZWQuXG4gICAqL1xuICBmdW5jdGlvbiBSZXN1bHQoc3RyZWFtT2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycywgbWV0YVN1cHBsaWVyLCBjb25uZWN0aW9uSG9sZGVyKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUmVzdWx0KTtcblxuICAgIHRoaXMuX3N0cmVhbU9ic2VydmVyID0gc3RyZWFtT2JzZXJ2ZXI7XG4gICAgdGhpcy5fcCA9IG51bGw7XG4gICAgdGhpcy5fc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICAgIHRoaXMuX3BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzIHx8IHt9O1xuICAgIHRoaXMuX21ldGFTdXBwbGllciA9IG1ldGFTdXBwbGllciB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfTtcbiAgICB0aGlzLl9jb25uZWN0aW9uSG9sZGVyID0gY29ubmVjdGlvbkhvbGRlciB8fCBfY29ubmVjdGlvbkhvbGRlci5FTVBUWV9DT05ORUNUSU9OX0hPTERFUjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW5kIHJldHVybiBuZXcgUHJvbWlzZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlfSBuZXcgUHJvbWlzZS5cbiAgICogQGFjY2VzcyBwcml2YXRlXG4gICAqL1xuXG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoUmVzdWx0LCBbe1xuICAgIGtleTogJ19jcmVhdGVQcm9taXNlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2NyZWF0ZVByb21pc2UoKSB7XG4gICAgICBpZiAodGhpcy5fcCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLl9wID0gbmV3IF9wcm9taXNlMi5kZWZhdWx0KGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHJlY29yZHMgPSBbXTtcbiAgICAgICAgdmFyIG9ic2VydmVyID0ge1xuICAgICAgICAgIG9uTmV4dDogZnVuY3Rpb24gb25OZXh0KHJlY29yZCkge1xuICAgICAgICAgICAgcmVjb3Jkcy5wdXNoKHJlY29yZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkNvbXBsZXRlZDogZnVuY3Rpb24gb25Db21wbGV0ZWQoc3VtbWFyeSkge1xuICAgICAgICAgICAgcmVzb2x2ZSh7IHJlY29yZHM6IHJlY29yZHMsIHN1bW1hcnk6IHN1bW1hcnkgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiBmdW5jdGlvbiBvbkVycm9yKGVycm9yKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2FpdHMgZm9yIGFsbCByZXN1bHRzIGFuZCBjYWxscyB0aGUgcGFzc2VkIGluIGZ1bmN0aW9uIHdpdGggdGhlIHJlc3VsdHMuXG4gICAgICogQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGggdGhlIHtAbGluayAjc3Vic2NyaWJlfSBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24ocmVzdWx0OiB7cmVjb3JkczpBcnJheTxSZWNvcmQ+fSl9IG9uRnVsZmlsbGVkIC0gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gZmluaXNoZWQuXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbihlcnJvcjoge21lc3NhZ2U6c3RyaW5nLCBjb2RlOnN0cmluZ30pfSBvblJlamVjdGVkIC0gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHVwb24gZXJyb3JzLlxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9IHByb21pc2UuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3RoZW4nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB0aGlzLl9jcmVhdGVQcm9taXNlKCk7XG4gICAgICByZXR1cm4gdGhpcy5fcC50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXRjaCBlcnJvcnMgd2hlbiB1c2luZyBwcm9taXNlcy5cbiAgICAgKiBDYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSBzdWJzY3JpYmUgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbihlcnJvcjoge21lc3NhZ2U6c3RyaW5nLCBjb2RlOnN0cmluZ30pfSBvblJlamVjdGVkIC0gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHVwb24gZXJyb3JzLlxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9IHByb21pc2UuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2NhdGNoJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2NhdGNoKG9uUmVqZWN0ZWQpIHtcbiAgICAgIHRoaXMuX2NyZWF0ZVByb21pc2UoKTtcbiAgICAgIHJldHVybiB0aGlzLl9wLmNhdGNoKG9uUmVqZWN0ZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0cmVhbSByZWNvcmRzIHRvIG9ic2VydmVyIGFzIHRoZXkgY29tZSBpbiwgdGhpcyBpcyBhIG1vcmUgZWZmaWNpZW50IG1ldGhvZFxuICAgICAqIG9mIGhhbmRsaW5nIHRoZSByZXN1bHRzLCBhbmQgYWxsb3dzIHlvdSB0byBoYW5kbGUgYXJiaXRyYXJpbHkgbGFyZ2UgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYnNlcnZlciAtIE9ic2VydmVyIG9iamVjdFxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24ocmVjb3JkOiBSZWNvcmQpfSBvYnNlcnZlci5vbk5leHQgLSBIYW5kbGUgcmVjb3Jkcywgb25lIGJ5IG9uZS5cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1ldGFkYXRhOiBPYmplY3QpfSBvYnNlcnZlci5vbkNvbXBsZXRlZCAtIEhhbmRsZSBzdHJlYW0gdGFpbCwgdGhlIG1ldGFkYXRhLlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oZXJyb3I6IHttZXNzYWdlOnN0cmluZywgY29kZTpzdHJpbmd9KX0gb2JzZXJ2ZXIub25FcnJvciAtIEhhbmRsZSBlcnJvcnMuXG4gICAgICogQHJldHVyblxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzdWJzY3JpYmUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBvbkNvbXBsZXRlZE9yaWdpbmFsID0gb2JzZXJ2ZXIub25Db21wbGV0ZWQ7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgb25Db21wbGV0ZWRXcmFwcGVyID0gZnVuY3Rpb24gb25Db21wbGV0ZWRXcmFwcGVyKG1ldGFkYXRhKSB7XG5cbiAgICAgICAgdmFyIGFkZGl0aW9uYWxNZXRhID0gc2VsZi5fbWV0YVN1cHBsaWVyKCk7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBhZGRpdGlvbmFsTWV0YSkge1xuICAgICAgICAgIGlmIChhZGRpdGlvbmFsTWV0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICBtZXRhZGF0YVtrZXldID0gYWRkaXRpb25hbE1ldGFba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHN1bSA9IG5ldyBfcmVzdWx0U3VtbWFyeTIuZGVmYXVsdChfdGhpcy5fc3RhdGVtZW50LCBfdGhpcy5fcGFyYW1ldGVycywgbWV0YWRhdGEpO1xuXG4gICAgICAgIC8vIG5vdGlmeSBjb25uZWN0aW9uIGhvbGRlciB0aGF0IHRoZSB1c2VkIGNvbm5lY3Rpb24gaXMgbm90IG5lZWRlZCBhbnkgbW9yZSBiZWNhdXNlIHJlc3VsdCBoYXNcbiAgICAgICAgLy8gYmVlbiBmdWxseSBjb25zdW1lZDsgY2FsbCB0aGUgb3JpZ2luYWwgb25Db21wbGV0ZWQgY2FsbGJhY2sgYWZ0ZXIgdGhhdFxuICAgICAgICBzZWxmLl9jb25uZWN0aW9uSG9sZGVyLnJlbGVhc2VDb25uZWN0aW9uKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgb25Db21wbGV0ZWRPcmlnaW5hbC5jYWxsKG9ic2VydmVyLCBzdW0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBvYnNlcnZlci5vbkNvbXBsZXRlZCA9IG9uQ29tcGxldGVkV3JhcHBlcjtcblxuICAgICAgdmFyIG9uRXJyb3JPcmlnaW5hbCA9IG9ic2VydmVyLm9uRXJyb3IgfHwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiVW5jYXVnaHQgZXJyb3Igd2hlbiBwcm9jZXNzaW5nIHJlc3VsdDogXCIgKyBlcnJvcik7XG4gICAgICB9O1xuXG4gICAgICB2YXIgb25FcnJvcldyYXBwZXIgPSBmdW5jdGlvbiBvbkVycm9yV3JhcHBlcihlcnJvcikge1xuICAgICAgICAvLyBub3RpZnkgY29ubmVjdGlvbiBob2xkZXIgdGhhdCB0aGUgdXNlZCBjb25uZWN0aW9uIGlzIG5vdCBuZWVkZWQgYW55IG1vcmUgYmVjYXVzZSBlcnJvciBoYXBwZW5lZFxuICAgICAgICAvLyBhbmQgcmVzdWx0IGNhbid0IGJlZSBjb25zdW1lZCBhbnkgZnVydGhlcjsgY2FsbCB0aGUgb3JpZ2luYWwgb25FcnJvciBjYWxsYmFjayBhZnRlciB0aGF0XG4gICAgICAgIHNlbGYuX2Nvbm5lY3Rpb25Ib2xkZXIucmVsZWFzZUNvbm5lY3Rpb24oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBvbkVycm9yT3JpZ2luYWwuY2FsbChvYnNlcnZlciwgZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBvYnNlcnZlci5vbkVycm9yID0gb25FcnJvcldyYXBwZXI7XG5cbiAgICAgIHRoaXMuX3N0cmVhbU9ic2VydmVyLnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBSZXN1bHQ7XG59KCk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IFJlc3VsdDsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxudmFyIF9nZXRQcm90b3R5cGVPZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRQcm90b3R5cGVPZik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2syID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJyk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MnKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4nKTtcblxudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yKTtcblxudmFyIF9pbmhlcml0czIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMnKTtcblxudmFyIF9pbmhlcml0czMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmhlcml0czIpO1xuXG52YXIgX3Nlc3Npb24gPSByZXF1aXJlKCcuL3Nlc3Npb24nKTtcblxudmFyIF9zZXNzaW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Nlc3Npb24pO1xuXG52YXIgX2RyaXZlciA9IHJlcXVpcmUoJy4vZHJpdmVyJyk7XG5cbnZhciBfZXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yJyk7XG5cbnZhciBfY29ubmVjdGlvblByb3ZpZGVycyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvY29ubmVjdGlvbi1wcm92aWRlcnMnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBBIGRyaXZlciB0aGF0IHN1cHBvcnRzIHJvdXRpbmcgaW4gYSBjb3JlLWVkZ2UgY2x1c3Rlci5cbiAqL1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBSb3V0aW5nRHJpdmVyID0gZnVuY3Rpb24gKF9Ecml2ZXIpIHtcbiAgKDAsIF9pbmhlcml0czMuZGVmYXVsdCkoUm91dGluZ0RyaXZlciwgX0RyaXZlcik7XG5cbiAgZnVuY3Rpb24gUm91dGluZ0RyaXZlcih1cmwsIHVzZXJBZ2VudCkge1xuICAgIHZhciB0b2tlbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgdmFyIGNvbmZpZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUm91dGluZ0RyaXZlcik7XG4gICAgcmV0dXJuICgwLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMuZGVmYXVsdCkodGhpcywgKFJvdXRpbmdEcml2ZXIuX19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKFJvdXRpbmdEcml2ZXIpKS5jYWxsKHRoaXMsIHVybCwgdXNlckFnZW50LCB0b2tlbiwgUm91dGluZ0RyaXZlci5fdmFsaWRhdGVDb25maWcoY29uZmlnKSkpO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoUm91dGluZ0RyaXZlciwgW3tcbiAgICBrZXk6ICdfY3JlYXRlQ29ubmVjdGlvblByb3ZpZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2NyZWF0ZUNvbm5lY3Rpb25Qcm92aWRlcihhZGRyZXNzLCBjb25uZWN0aW9uUG9vbCwgZHJpdmVyT25FcnJvckNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gbmV3IF9jb25uZWN0aW9uUHJvdmlkZXJzLkxvYWRCYWxhbmNlcihhZGRyZXNzLCBjb25uZWN0aW9uUG9vbCwgZHJpdmVyT25FcnJvckNhbGxiYWNrKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfY3JlYXRlU2Vzc2lvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jcmVhdGVTZXNzaW9uKG1vZGUsIGNvbm5lY3Rpb25Qcm92aWRlciwgYm9va21hcmssIGNvbmZpZykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHJldHVybiBuZXcgUm91dGluZ1Nlc3Npb24obW9kZSwgY29ubmVjdGlvblByb3ZpZGVyLCBib29rbWFyaywgY29uZmlnLCBmdW5jdGlvbiAoZXJyb3IsIGNvbm4pIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IF9lcnJvci5TRVJWSUNFX1VOQVZBSUxBQkxFIHx8IGVycm9yLmNvZGUgPT09IF9lcnJvci5TRVNTSU9OX0VYUElSRUQpIHtcbiAgICAgICAgICAvLyBjb25uZWN0aW9uIGlzIHVuZGVmaW5lZCBpZiBlcnJvciBoYXBwZW5lZCBiZWZvcmUgY29ubmVjdGlvbiB3YXMgYWNxdWlyZWRcbiAgICAgICAgICBpZiAoY29ubikge1xuICAgICAgICAgICAgX3RoaXMyLl9jb25uZWN0aW9uUHJvdmlkZXIuZm9yZ2V0KGNvbm4udXJsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9IGVsc2UgaWYgKGVycm9yLmNvZGUgPT09ICdOZW8uQ2xpZW50RXJyb3IuQ2x1c3Rlci5Ob3RBTGVhZGVyJykge1xuICAgICAgICAgIHZhciB1cmwgPSAnVU5LTk9XTic7XG4gICAgICAgICAgLy8gY29ubmVjdGlvbiBpcyB1bmRlZmluZWQgaWYgZXJyb3IgaGFwcGVuZWQgYmVmb3JlIGNvbm5lY3Rpb24gd2FzIGFjcXVpcmVkXG4gICAgICAgICAgaWYgKGNvbm4pIHtcbiAgICAgICAgICAgIHVybCA9IGNvbm4udXJsO1xuICAgICAgICAgICAgX3RoaXMyLl9jb25uZWN0aW9uUHJvdmlkZXIuZm9yZ2V0V3JpdGVyKGNvbm4udXJsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICgwLCBfZXJyb3IubmV3RXJyb3IpKCdObyBsb25nZXIgcG9zc2libGUgdG8gd3JpdGUgdG8gc2VydmVyIGF0ICcgKyB1cmwsIF9lcnJvci5TRVNTSU9OX0VYUElSRUQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6ICdfdmFsaWRhdGVDb25maWcnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfdmFsaWRhdGVDb25maWcoY29uZmlnKSB7XG4gICAgICBpZiAoY29uZmlnLnRydXN0ID09PSAnVFJVU1RfT05fRklSU1RfVVNFJykge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKSgnVGhlIGNob3NlbiB0cnVzdCBtb2RlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggYSByb3V0aW5nIGRyaXZlcicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFJvdXRpbmdEcml2ZXI7XG59KF9kcml2ZXIuRHJpdmVyKTtcblxudmFyIFJvdXRpbmdTZXNzaW9uID0gZnVuY3Rpb24gKF9TZXNzaW9uKSB7XG4gICgwLCBfaW5oZXJpdHMzLmRlZmF1bHQpKFJvdXRpbmdTZXNzaW9uLCBfU2Vzc2lvbik7XG5cbiAgZnVuY3Rpb24gUm91dGluZ1Nlc3Npb24obW9kZSwgY29ubmVjdGlvblByb3ZpZGVyLCBib29rbWFyaywgY29uZmlnLCBvbkZhaWxlZENvbm5lY3Rpb24pIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBSb3V0aW5nU2Vzc2lvbik7XG5cbiAgICB2YXIgX3RoaXMzID0gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoUm91dGluZ1Nlc3Npb24uX19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKFJvdXRpbmdTZXNzaW9uKSkuY2FsbCh0aGlzLCBtb2RlLCBjb25uZWN0aW9uUHJvdmlkZXIsIGJvb2ttYXJrLCBjb25maWcpKTtcblxuICAgIF90aGlzMy5fb25GYWlsZWRDb25uZWN0aW9uID0gb25GYWlsZWRDb25uZWN0aW9uO1xuICAgIHJldHVybiBfdGhpczM7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShSb3V0aW5nU2Vzc2lvbiwgW3tcbiAgICBrZXk6ICdfb25SdW5GYWlsdXJlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX29uUnVuRmFpbHVyZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9vbkZhaWxlZENvbm5lY3Rpb247XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBSb3V0aW5nU2Vzc2lvbjtcbn0oX3Nlc3Npb24yLmRlZmF1bHQpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBSb3V0aW5nRHJpdmVyOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2Fzc2lnbicpO1xuXG52YXIgX2Fzc2lnbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3NpZ24pO1xuXG52YXIgX2dldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mJyk7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0UHJvdG90eXBlT2YpO1xuXG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4nKTtcblxudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yKTtcblxudmFyIF9nZXQyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2dldCcpO1xuXG52YXIgX2dldDMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXQyKTtcblxudmFyIF9pbmhlcml0czIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMnKTtcblxudmFyIF9pbmhlcml0czMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmhlcml0czIpO1xuXG52YXIgX3R5cGVvZjIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvdHlwZW9mJyk7XG5cbnZhciBfdHlwZW9mMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3R5cGVvZjIpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjaycpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzJyk7XG5cbnZhciBfY3JlYXRlQ2xhc3MzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlQ2xhc3MyKTtcblxudmFyIF9zdHJlYW1PYnNlcnZlciA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtLW9ic2VydmVyJyk7XG5cbnZhciBfc3RyZWFtT2JzZXJ2ZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3RyZWFtT2JzZXJ2ZXIpO1xuXG52YXIgX3Jlc3VsdCA9IHJlcXVpcmUoJy4vcmVzdWx0Jyk7XG5cbnZhciBfcmVzdWx0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Jlc3VsdCk7XG5cbnZhciBfdHJhbnNhY3Rpb24gPSByZXF1aXJlKCcuL3RyYW5zYWN0aW9uJyk7XG5cbnZhciBfdHJhbnNhY3Rpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdHJhbnNhY3Rpb24pO1xuXG52YXIgX2Vycm9yID0gcmVxdWlyZSgnLi9lcnJvcicpO1xuXG52YXIgX3V0aWwgPSByZXF1aXJlKCcuL2ludGVybmFsL3V0aWwnKTtcblxudmFyIF9jb25uZWN0aW9uSG9sZGVyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9jb25uZWN0aW9uLWhvbGRlcicpO1xuXG52YXIgX2Nvbm5lY3Rpb25Ib2xkZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29ubmVjdGlvbkhvbGRlcik7XG5cbnZhciBfZHJpdmVyID0gcmVxdWlyZSgnLi9kcml2ZXInKTtcblxudmFyIF9kcml2ZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZHJpdmVyKTtcblxudmFyIF90cmFuc2FjdGlvbkV4ZWN1dG9yID0gcmVxdWlyZSgnLi9pbnRlcm5hbC90cmFuc2FjdGlvbi1leGVjdXRvcicpO1xuXG52YXIgX3RyYW5zYWN0aW9uRXhlY3V0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdHJhbnNhY3Rpb25FeGVjdXRvcik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICAqIEEgU2Vzc2lvbiBpbnN0YW5jZSBpcyB1c2VkIGZvciBoYW5kbGluZyB0aGUgY29ubmVjdGlvbiBhbmRcbiAgKiBzZW5kaW5nIHN0YXRlbWVudHMgdGhyb3VnaCB0aGUgY29ubmVjdGlvbi5cbiAgKiBAYWNjZXNzIHB1YmxpY1xuICAqL1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBTZXNzaW9uID0gZnVuY3Rpb24gKCkge1xuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGUgdGhlIGRlZmF1bHQgYWNjZXNzIG1vZGUgZm9yIHRoaXMgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHtDb25uZWN0aW9uUHJvdmlkZXJ9IGNvbm5lY3Rpb25Qcm92aWRlciAtIHRoZSBjb25uZWN0aW9uIHByb3ZpZGVyIHRvIGFjcXVpcmUgY29ubmVjdGlvbnMgZnJvbS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtib29rbWFyaz11bmRlZmluZWRdIC0gdGhlIGluaXRpYWwgYm9va21hcmsgZm9yIHRoaXMgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtjb25maWc9e31dIC0gdGhpcyBkcml2ZXIgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIFNlc3Npb24obW9kZSwgY29ubmVjdGlvblByb3ZpZGVyLCBib29rbWFyaywgY29uZmlnKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgU2Vzc2lvbik7XG5cbiAgICB0aGlzLl9tb2RlID0gbW9kZTtcbiAgICB0aGlzLl9yZWFkQ29ubmVjdGlvbkhvbGRlciA9IG5ldyBfY29ubmVjdGlvbkhvbGRlcjIuZGVmYXVsdChfZHJpdmVyLlJFQUQsIGNvbm5lY3Rpb25Qcm92aWRlcik7XG4gICAgdGhpcy5fd3JpdGVDb25uZWN0aW9uSG9sZGVyID0gbmV3IF9jb25uZWN0aW9uSG9sZGVyMi5kZWZhdWx0KF9kcml2ZXIuV1JJVEUsIGNvbm5lY3Rpb25Qcm92aWRlcik7XG4gICAgdGhpcy5fb3BlbiA9IHRydWU7XG4gICAgdGhpcy5faGFzVHggPSBmYWxzZTtcbiAgICB0aGlzLl9sYXN0Qm9va21hcmsgPSBib29rbWFyaztcbiAgICB0aGlzLl90cmFuc2FjdGlvbkV4ZWN1dG9yID0gX2NyZWF0ZVRyYW5zYWN0aW9uRXhlY3V0b3IoY29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gQ3lwaGVyIHN0YXRlbWVudFxuICAgKiBDb3VsZCBiZSBjYWxsZWQgd2l0aCBhIHN0YXRlbWVudCBvYmplY3QgaS5lLjoge3N0YXRlbWVudDogXCJNQVRDSCAuLi5cIiwgcGFyYW1ldGVyczoge3BhcmFtOiAxfX1cbiAgICogb3Igd2l0aCB0aGUgc3RhdGVtZW50IGFuZCBwYXJhbWV0ZXJzIGFzIHNlcGFyYXRlIGFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHttaXhlZH0gc3RhdGVtZW50IC0gQ3lwaGVyIHN0YXRlbWVudCB0byBleGVjdXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbWV0ZXJzIC0gTWFwIHdpdGggcGFyYW1ldGVycyB0byB1c2UgaW4gc3RhdGVtZW50XG4gICAqIEByZXR1cm4ge1Jlc3VsdH0gLSBOZXcgUmVzdWx0XG4gICAqL1xuXG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoU2Vzc2lvbiwgW3tcbiAgICBrZXk6ICdydW4nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBydW4oc3RhdGVtZW50KSB7XG4gICAgICB2YXIgcGFyYW1ldGVycyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICAgIGlmICgodHlwZW9mIHN0YXRlbWVudCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6ICgwLCBfdHlwZW9mMy5kZWZhdWx0KShzdGF0ZW1lbnQpKSA9PT0gJ29iamVjdCcgJiYgc3RhdGVtZW50LnRleHQpIHtcbiAgICAgICAgcGFyYW1ldGVycyA9IHN0YXRlbWVudC5wYXJhbWV0ZXJzIHx8IHt9O1xuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnQudGV4dDtcbiAgICAgIH1cbiAgICAgICgwLCBfdXRpbC5hc3NlcnRTdHJpbmcpKHN0YXRlbWVudCwgXCJDeXBoZXIgc3RhdGVtZW50XCIpO1xuXG4gICAgICB2YXIgc3RyZWFtT2JzZXJ2ZXIgPSBuZXcgX1J1bk9ic2VydmVyKHRoaXMuX29uUnVuRmFpbHVyZSgpKTtcbiAgICAgIHZhciBjb25uZWN0aW9uSG9sZGVyID0gdGhpcy5fY29ubmVjdGlvbkhvbGRlcldpdGhNb2RlKHRoaXMuX21vZGUpO1xuICAgICAgaWYgKCF0aGlzLl9oYXNUeCkge1xuICAgICAgICBjb25uZWN0aW9uSG9sZGVyLmluaXRpYWxpemVDb25uZWN0aW9uKCk7XG4gICAgICAgIGNvbm5lY3Rpb25Ib2xkZXIuZ2V0Q29ubmVjdGlvbigpLnRoZW4oZnVuY3Rpb24gKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICBzdHJlYW1PYnNlcnZlci5yZXNvbHZlQ29ubmVjdGlvbihjb25uZWN0aW9uKTtcbiAgICAgICAgICBjb25uZWN0aW9uLnJ1bihzdGF0ZW1lbnQsIHBhcmFtZXRlcnMsIHN0cmVhbU9ic2VydmVyKTtcbiAgICAgICAgICBjb25uZWN0aW9uLnB1bGxBbGwoc3RyZWFtT2JzZXJ2ZXIpO1xuICAgICAgICAgIGNvbm5lY3Rpb24uc3luYygpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gc3RyZWFtT2JzZXJ2ZXIub25FcnJvcihlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyZWFtT2JzZXJ2ZXIub25FcnJvcigoMCwgX2Vycm9yLm5ld0Vycm9yKShcIlN0YXRlbWVudHMgY2Fubm90IGJlIHJ1biBkaXJlY3RseSBvbiBhIFwiICsgXCJzZXNzaW9uIHdpdGggYW4gb3BlbiB0cmFuc2FjdGlvbjsgZWl0aGVyIHJ1biBmcm9tIHdpdGhpbiB0aGUgXCIgKyBcInRyYW5zYWN0aW9uIG9yIHVzZSBhIGRpZmZlcmVudCBzZXNzaW9uLlwiKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IF9yZXN1bHQyLmRlZmF1bHQoc3RyZWFtT2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gc3RyZWFtT2JzZXJ2ZXIubWV0YSgpO1xuICAgICAgfSwgY29ubmVjdGlvbkhvbGRlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQmVnaW4gYSBuZXcgdHJhbnNhY3Rpb24gaW4gdGhpcyBzZXNzaW9uLiBBIHNlc3Npb24gY2FuIGhhdmUgYXQgbW9zdCBvbmUgdHJhbnNhY3Rpb24gcnVubmluZyBhdCBhIHRpbWUsIGlmIHlvdVxuICAgICAqIHdhbnQgdG8gcnVuIG11bHRpcGxlIGNvbmN1cnJlbnQgdHJhbnNhY3Rpb25zLCB5b3Ugc2hvdWxkIHVzZSBtdWx0aXBsZSBjb25jdXJyZW50IHNlc3Npb25zLlxuICAgICAqXG4gICAgICogV2hpbGUgYSB0cmFuc2FjdGlvbiBpcyBvcGVuIHRoZSBzZXNzaW9uIGNhbm5vdCBiZSB1c2VkIHRvIHJ1biBzdGF0ZW1lbnRzIG91dHNpZGUgdGhlIHRyYW5zYWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGJvb2ttYXJrIC0gYSByZWZlcmVuY2UgdG8gYSBwcmV2aW91cyB0cmFuc2FjdGlvbi4gREVQUkVDQVRFRDogVGhpcyBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBpblxuICAgICAqIGZhdm91ciBvZiB7QGxpbmsgRHJpdmVyI3Nlc3Npb24oc3RyaW5nKX0gdGhhdCBhY2NlcHRzIGFuIGluaXRpYWwgYm9va21hcmsuIFNlc3Npb24gd2lsbCBlbnN1cmUgdGhhdCBhbGwgbmVzdGVkXG4gICAgICogdHJhbnNhY3Rpb25zIGFyZSBjaGFpbmVkIHdpdGggYm9va21hcmtzIHRvIGd1YXJhbnRlZSBjYXVzYWwgY29uc2lzdGVuY3kuXG4gICAgICogQHJldHVybnMge1RyYW5zYWN0aW9ufSAtIE5ldyBUcmFuc2FjdGlvblxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdiZWdpblRyYW5zYWN0aW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYmVnaW5UcmFuc2FjdGlvbihib29rbWFyaykge1xuICAgICAgcmV0dXJuIHRoaXMuX2JlZ2luVHJhbnNhY3Rpb24odGhpcy5fbW9kZSwgYm9va21hcmspO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19iZWdpblRyYW5zYWN0aW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2JlZ2luVHJhbnNhY3Rpb24oYWNjZXNzTW9kZSwgYm9va21hcmspIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmIChib29rbWFyaykge1xuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0U3RyaW5nKShib29rbWFyaywgJ0Jvb2ttYXJrJyk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUJvb2ttYXJrKGJvb2ttYXJrKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2hhc1R4KSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3IubmV3RXJyb3IpKCdZb3UgY2Fubm90IGJlZ2luIGEgdHJhbnNhY3Rpb24gb24gYSBzZXNzaW9uIHdpdGggYW4gb3BlbiB0cmFuc2FjdGlvbjsgJyArICdlaXRoZXIgcnVuIGZyb20gd2l0aGluIHRoZSB0cmFuc2FjdGlvbiBvciB1c2UgYSBkaWZmZXJlbnQgc2Vzc2lvbi4nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG1vZGUgPSBfZHJpdmVyMi5kZWZhdWx0Ll92YWxpZGF0ZVNlc3Npb25Nb2RlKGFjY2Vzc01vZGUpO1xuICAgICAgdmFyIGNvbm5lY3Rpb25Ib2xkZXIgPSB0aGlzLl9jb25uZWN0aW9uSG9sZGVyV2l0aE1vZGUobW9kZSk7XG4gICAgICBjb25uZWN0aW9uSG9sZGVyLmluaXRpYWxpemVDb25uZWN0aW9uKCk7XG4gICAgICB0aGlzLl9oYXNUeCA9IHRydWU7XG5cbiAgICAgIHJldHVybiBuZXcgX3RyYW5zYWN0aW9uMi5kZWZhdWx0KGNvbm5lY3Rpb25Ib2xkZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuX2hhc1R4ID0gZmFsc2U7XG4gICAgICB9LCB0aGlzLl9vblJ1bkZhaWx1cmUoKSwgdGhpcy5fbGFzdEJvb2ttYXJrLCB0aGlzLl91cGRhdGVCb29rbWFyay5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGJvb2ttYXJrIHJlY2VpdmVkIGZvbGxvd2luZyB0aGUgbGFzdCBjb21wbGV0ZWQge0BsaW5rIFRyYW5zYWN0aW9ufS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gYSBwcmV2aW91cyB0cmFuc2FjJ3Rpb25cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnbGFzdEJvb2ttYXJrJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbGFzdEJvb2ttYXJrKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xhc3RCb29rbWFyaztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlIGdpdmVuIHVuaXQgb2Ygd29yayBpbiBhIHtAbGluayBEcml2ZXIjUkVBRH0gdHJhbnNhY3Rpb24uXG4gICAgICpcbiAgICAgKiBUcmFuc2FjdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgY29tbWl0dGVkIHVubGVzcyB0aGUgZ2l2ZW4gZnVuY3Rpb24gdGhyb3dzIG9yIHJldHVybnMgYSByZWplY3RlZCBwcm9taXNlLlxuICAgICAqIFNvbWUgZmFpbHVyZXMgb2YgdGhlIGdpdmVuIGZ1bmN0aW9uIG9yIHRoZSBjb21taXQgaXRzZWxmIHdpbGwgYmUgcmV0cmllZCB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYgd2l0aCBpbml0aWFsXG4gICAgICogZGVsYXkgb2YgMSBzZWNvbmQgYW5kIG1heGltdW0gcmV0cnkgdGltZSBvZiAzMCBzZWNvbmRzLiBNYXhpbXVtIHJldHJ5IHRpbWUgaXMgY29uZmlndXJhYmxlIHZpYSBkcml2ZXIgY29uZmlnJ3NcbiAgICAgKiA8Y29kZT5tYXhUcmFuc2FjdGlvblJldHJ5VGltZTwvY29kZT4gcHJvcGVydHkgaW4gbWlsbGlzZWNvbmRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbih0eDogVHJhbnNhY3Rpb24pOiBQcm9taXNlfSB0cmFuc2FjdGlvbldvcmsgLSBjYWxsYmFjayB0aGF0IGV4ZWN1dGVzIG9wZXJhdGlvbnMgYWdhaW5zdFxuICAgICAqIGEgZ2l2ZW4ge0BsaW5rIFRyYW5zYWN0aW9ufS5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSByZXNvbHZlZCBwcm9taXNlIGFzIHJldHVybmVkIGJ5IHRoZSBnaXZlbiBmdW5jdGlvbiBvciByZWplY3RlZCBwcm9taXNlIHdoZW4gZ2l2ZW5cbiAgICAgKiBmdW5jdGlvbiBvciBjb21taXQgZmFpbHMuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3JlYWRUcmFuc2FjdGlvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlYWRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbldvcmspIHtcbiAgICAgIHJldHVybiB0aGlzLl9ydW5UcmFuc2FjdGlvbihfZHJpdmVyLlJFQUQsIHRyYW5zYWN0aW9uV29yayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZSBnaXZlbiB1bml0IG9mIHdvcmsgaW4gYSB7QGxpbmsgRHJpdmVyI1dSSVRFfSB0cmFuc2FjdGlvbi5cbiAgICAgKlxuICAgICAqIFRyYW5zYWN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBiZSBjb21taXR0ZWQgdW5sZXNzIHRoZSBnaXZlbiBmdW5jdGlvbiB0aHJvd3Mgb3IgcmV0dXJucyBhIHJlamVjdGVkIHByb21pc2UuXG4gICAgICogU29tZSBmYWlsdXJlcyBvZiB0aGUgZ2l2ZW4gZnVuY3Rpb24gb3IgdGhlIGNvbW1pdCBpdHNlbGYgd2lsbCBiZSByZXRyaWVkIHdpdGggZXhwb25lbnRpYWwgYmFja29mZiB3aXRoIGluaXRpYWxcbiAgICAgKiBkZWxheSBvZiAxIHNlY29uZCBhbmQgbWF4aW11bSByZXRyeSB0aW1lIG9mIDMwIHNlY29uZHMuIE1heGltdW0gcmV0cnkgdGltZSBpcyBjb25maWd1cmFibGUgdmlhIGRyaXZlciBjb25maWcnc1xuICAgICAqIDxjb2RlPm1heFRyYW5zYWN0aW9uUmV0cnlUaW1lPC9jb2RlPiBwcm9wZXJ0eSBpbiBtaWxsaXNlY29uZHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHR4OiBUcmFuc2FjdGlvbik6IFByb21pc2V9IHRyYW5zYWN0aW9uV29yayAtIGNhbGxiYWNrIHRoYXQgZXhlY3V0ZXMgb3BlcmF0aW9ucyBhZ2FpbnN0XG4gICAgICogYSBnaXZlbiB7QGxpbmsgVHJhbnNhY3Rpb259LlxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9IHJlc29sdmVkIHByb21pc2UgYXMgcmV0dXJuZWQgYnkgdGhlIGdpdmVuIGZ1bmN0aW9uIG9yIHJlamVjdGVkIHByb21pc2Ugd2hlbiBnaXZlblxuICAgICAqIGZ1bmN0aW9uIG9yIGNvbW1pdCBmYWlscy5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnd3JpdGVUcmFuc2FjdGlvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHdyaXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25Xb3JrKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcnVuVHJhbnNhY3Rpb24oX2RyaXZlci5XUklURSwgdHJhbnNhY3Rpb25Xb3JrKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfcnVuVHJhbnNhY3Rpb24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfcnVuVHJhbnNhY3Rpb24oYWNjZXNzTW9kZSwgdHJhbnNhY3Rpb25Xb3JrKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uRXhlY3V0b3IuZXhlY3V0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIuX2JlZ2luVHJhbnNhY3Rpb24oYWNjZXNzTW9kZSwgX3RoaXMyLmxhc3RCb29rbWFyaygpKTtcbiAgICAgIH0sIHRyYW5zYWN0aW9uV29yayk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX3VwZGF0ZUJvb2ttYXJrJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3VwZGF0ZUJvb2ttYXJrKG5ld0Jvb2ttYXJrKSB7XG4gICAgICBpZiAobmV3Qm9va21hcmspIHtcbiAgICAgICAgdGhpcy5fbGFzdEJvb2ttYXJrID0gbmV3Qm9va21hcms7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2UgdGhpcyBzZXNzaW9uLlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHNlc3Npb24gaGFzIGJlZW4gY2xvc2VkXG4gICAgICogQHJldHVyblxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdjbG9zZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLl9vcGVuKSB7XG4gICAgICAgIHRoaXMuX29wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fdHJhbnNhY3Rpb25FeGVjdXRvci5jbG9zZSgpO1xuICAgICAgICB0aGlzLl9yZWFkQ29ubmVjdGlvbkhvbGRlci5jbG9zZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy5fd3JpdGVDb25uZWN0aW9uSG9sZGVyLmNsb3NlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9DYW4gYmUgb3ZlcnJpZGRlbiB0byBhZGQgZXJyb3IgY2FsbGJhY2sgb24gUlVOXG5cbiAgfSwge1xuICAgIGtleTogJ19vblJ1bkZhaWx1cmUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfb25SdW5GYWlsdXJlKCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIGVycjtcbiAgICAgIH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2Nvbm5lY3Rpb25Ib2xkZXJXaXRoTW9kZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jb25uZWN0aW9uSG9sZGVyV2l0aE1vZGUobW9kZSkge1xuICAgICAgaWYgKG1vZGUgPT09IF9kcml2ZXIuUkVBRCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZENvbm5lY3Rpb25Ib2xkZXI7XG4gICAgICB9IGVsc2UgaWYgKG1vZGUgPT09IF9kcml2ZXIuV1JJVEUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dyaXRlQ29ubmVjdGlvbkhvbGRlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3IubmV3RXJyb3IpKCdVbmtub3duIGFjY2VzcyBtb2RlOiAnICsgbW9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBTZXNzaW9uO1xufSgpO1xuXG4vKiogSW50ZXJuYWwgc3RyZWFtIG9ic2VydmVyIHVzZWQgZm9yIHRyYW5zYWN0aW9uYWwgcmVzdWx0cyovXG5cblxudmFyIF9SdW5PYnNlcnZlciA9IGZ1bmN0aW9uIChfU3RyZWFtT2JzZXJ2ZXIpIHtcbiAgKDAsIF9pbmhlcml0czMuZGVmYXVsdCkoX1J1bk9ic2VydmVyLCBfU3RyZWFtT2JzZXJ2ZXIpO1xuXG4gIGZ1bmN0aW9uIF9SdW5PYnNlcnZlcihvbkVycm9yKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgX1J1bk9ic2VydmVyKTtcblxuICAgIHZhciBfdGhpczQgPSAoMCwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zLmRlZmF1bHQpKHRoaXMsIChfUnVuT2JzZXJ2ZXIuX19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKF9SdW5PYnNlcnZlcikpLmNhbGwodGhpcywgb25FcnJvcikpO1xuXG4gICAgX3RoaXM0Ll9tZXRhID0ge307XG4gICAgcmV0dXJuIF90aGlzNDtcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKF9SdW5PYnNlcnZlciwgW3tcbiAgICBrZXk6ICdvbkNvbXBsZXRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ29tcGxldGVkKG1ldGEpIHtcbiAgICAgICgwLCBfZ2V0My5kZWZhdWx0KShfUnVuT2JzZXJ2ZXIucHJvdG90eXBlLl9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShfUnVuT2JzZXJ2ZXIucHJvdG90eXBlKSwgJ29uQ29tcGxldGVkJywgdGhpcykuY2FsbCh0aGlzLCBtZXRhKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBtZXRhKSB7XG4gICAgICAgIGlmIChtZXRhLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICB0aGlzLl9tZXRhW2tleV0gPSBtZXRhW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdtZXRhJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbWV0YSgpIHtcbiAgICAgIHZhciBzZXJ2ZXJNZXRhID0geyBzZXJ2ZXI6IHRoaXMuX2Nvbm4uc2VydmVyIH07XG4gICAgICByZXR1cm4gKDAsIF9hc3NpZ24yLmRlZmF1bHQpKHt9LCB0aGlzLl9tZXRhLCBzZXJ2ZXJNZXRhKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIF9SdW5PYnNlcnZlcjtcbn0oX3N0cmVhbU9ic2VydmVyMi5kZWZhdWx0KTtcblxuZnVuY3Rpb24gX2NyZWF0ZVRyYW5zYWN0aW9uRXhlY3V0b3IoY29uZmlnKSB7XG4gIHZhciBtYXhSZXRyeVRpbWVNcyA9IGNvbmZpZyAmJiBjb25maWcubWF4VHJhbnNhY3Rpb25SZXRyeVRpbWUgPyBjb25maWcubWF4VHJhbnNhY3Rpb25SZXRyeVRpbWUgOiBudWxsO1xuICByZXR1cm4gbmV3IF90cmFuc2FjdGlvbkV4ZWN1dG9yMi5kZWZhdWx0KG1heFJldHJ5VGltZU1zKTtcbn1cblxuZXhwb3J0cy5kZWZhdWx0ID0gU2Vzc2lvbjsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxudmFyIF9nZXRQcm90b3R5cGVPZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRQcm90b3R5cGVPZik7XG5cbnZhciBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybicpO1xuXG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIpO1xuXG52YXIgX2dldDIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvZ2V0Jyk7XG5cbnZhciBfZ2V0MyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dldDIpO1xuXG52YXIgX2luaGVyaXRzMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cycpO1xuXG52YXIgX2luaGVyaXRzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luaGVyaXRzMik7XG5cbnZhciBfcHJvbWlzZSA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9wcm9taXNlJyk7XG5cbnZhciBfcHJvbWlzZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9taXNlKTtcblxudmFyIF90eXBlb2YyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL3R5cGVvZicpO1xuXG52YXIgX3R5cGVvZjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90eXBlb2YyKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2snKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc0NhbGxDaGVjazIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcycpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbnZhciBfc3RyZWFtT2JzZXJ2ZXIgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbS1vYnNlcnZlcicpO1xuXG52YXIgX3N0cmVhbU9ic2VydmVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N0cmVhbU9ic2VydmVyKTtcblxudmFyIF9yZXN1bHQgPSByZXF1aXJlKCcuL3Jlc3VsdCcpO1xuXG52YXIgX3Jlc3VsdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZXN1bHQpO1xuXG52YXIgX3V0aWwgPSByZXF1aXJlKCcuL2ludGVybmFsL3V0aWwnKTtcblxudmFyIF9jb25uZWN0aW9uSG9sZGVyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9jb25uZWN0aW9uLWhvbGRlcicpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB0cmFuc2FjdGlvbiBpbiB0aGUgTmVvNGogZGF0YWJhc2UuXG4gKlxuICogQGFjY2VzcyBwdWJsaWNcbiAqL1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgVHJhbnNhY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtDb25uZWN0aW9uSG9sZGVyfSBjb25uZWN0aW9uSG9sZGVyIC0gdGhlIGNvbm5lY3Rpb24gaG9sZGVyIHRvIGdldCBjb25uZWN0aW9uIGZyb20uXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gb25DbG9zZSAtIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay5cbiAgICogQHBhcmFtIGVycm9yVHJhbnNmb3JtZXIgY2FsbGJhY2sgdXNlIHRvIHRyYW5zZm9ybSBlcnJvclxuICAgKiBAcGFyYW0gYm9va21hcmsgb3B0aW9uYWwgYm9va21hcmtcbiAgICogQHBhcmFtIG9uQm9va21hcmsgY2FsbGJhY2sgaW52b2tlZCB3aGVuIG5ldyBib29rbWFyayBpcyBwcm9kdWNlZFxuICAgKi9cbiAgZnVuY3Rpb24gVHJhbnNhY3Rpb24oY29ubmVjdGlvbkhvbGRlciwgb25DbG9zZSwgZXJyb3JUcmFuc2Zvcm1lciwgYm9va21hcmssIG9uQm9va21hcmspIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBUcmFuc2FjdGlvbik7XG5cbiAgICB0aGlzLl9jb25uZWN0aW9uSG9sZGVyID0gY29ubmVjdGlvbkhvbGRlcjtcbiAgICB2YXIgc3RyZWFtT2JzZXJ2ZXIgPSBuZXcgX1RyYW5zYWN0aW9uU3RyZWFtT2JzZXJ2ZXIodGhpcyk7XG4gICAgdmFyIHBhcmFtcyA9IHt9O1xuICAgIGlmIChib29rbWFyaykge1xuICAgICAgcGFyYW1zID0geyBib29rbWFyazogYm9va21hcmsgfTtcbiAgICB9XG5cbiAgICB0aGlzLl9jb25uZWN0aW9uSG9sZGVyLmdldENvbm5lY3Rpb24oKS50aGVuKGZ1bmN0aW9uIChjb25uKSB7XG4gICAgICBzdHJlYW1PYnNlcnZlci5yZXNvbHZlQ29ubmVjdGlvbihjb25uKTtcbiAgICAgIGNvbm4ucnVuKCdCRUdJTicsIHBhcmFtcywgc3RyZWFtT2JzZXJ2ZXIpO1xuICAgICAgY29ubi5wdWxsQWxsKHN0cmVhbU9ic2VydmVyKTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBzdHJlYW1PYnNlcnZlci5vbkVycm9yKGVycm9yKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3N0YXRlID0gX3N0YXRlcy5BQ1RJVkU7XG4gICAgdGhpcy5fb25DbG9zZSA9IG9uQ2xvc2U7XG4gICAgdGhpcy5fZXJyb3JUcmFuc2Zvcm1lciA9IGVycm9yVHJhbnNmb3JtZXI7XG4gICAgdGhpcy5fb25Cb29rbWFyayA9IG9uQm9va21hcmsgfHwgZnVuY3Rpb24gKCkge307XG4gIH1cblxuICAvKipcbiAgICogUnVuIEN5cGhlciBzdGF0ZW1lbnRcbiAgICogQ291bGQgYmUgY2FsbGVkIHdpdGggYSBzdGF0ZW1lbnQgb2JqZWN0IGkuZS46IHtzdGF0ZW1lbnQ6IFwiTUFUQ0ggLi4uXCIsIHBhcmFtZXRlcnM6IHtwYXJhbTogMX19XG4gICAqIG9yIHdpdGggdGhlIHN0YXRlbWVudCBhbmQgcGFyYW1ldGVycyBhcyBzZXBhcmF0ZSBhcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7bWl4ZWR9IHN0YXRlbWVudCAtIEN5cGhlciBzdGF0ZW1lbnQgdG8gZXhlY3V0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1ldGVycyAtIE1hcCB3aXRoIHBhcmFtZXRlcnMgdG8gdXNlIGluIHN0YXRlbWVudFxuICAgKiBAcmV0dXJuIHtSZXN1bHR9IE5ldyBSZXN1bHRcbiAgICovXG5cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShUcmFuc2FjdGlvbiwgW3tcbiAgICBrZXk6ICdydW4nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBydW4oc3RhdGVtZW50LCBwYXJhbWV0ZXJzKSB7XG4gICAgICBpZiAoKHR5cGVvZiBzdGF0ZW1lbnQgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiAoMCwgX3R5cGVvZjMuZGVmYXVsdCkoc3RhdGVtZW50KSkgPT09ICdvYmplY3QnICYmIHN0YXRlbWVudC50ZXh0KSB7XG4gICAgICAgIHBhcmFtZXRlcnMgPSBzdGF0ZW1lbnQucGFyYW1ldGVycyB8fCB7fTtcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50LnRleHQ7XG4gICAgICB9XG4gICAgICAoMCwgX3V0aWwuYXNzZXJ0U3RyaW5nKShzdGF0ZW1lbnQsIFwiQ3lwaGVyIHN0YXRlbWVudFwiKTtcblxuICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLnJ1bih0aGlzLl9jb25uZWN0aW9uSG9sZGVyLCBuZXcgX1RyYW5zYWN0aW9uU3RyZWFtT2JzZXJ2ZXIodGhpcyksIHN0YXRlbWVudCwgcGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tbWl0cyB0aGUgdHJhbnNhY3Rpb24gYW5kIHJldHVybnMgdGhlIHJlc3VsdC5cbiAgICAgKlxuICAgICAqIEFmdGVyIGNvbW1pdHRpbmcgdGhlIHRyYW5zYWN0aW9uIGNhbiBubyBsb25nZXIgYmUgdXNlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtSZXN1bHR9IE5ldyBSZXN1bHRcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY29tbWl0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tbWl0KCkge1xuICAgICAgdmFyIGNvbW1pdHRlZCA9IHRoaXMuX3N0YXRlLmNvbW1pdCh0aGlzLl9jb25uZWN0aW9uSG9sZGVyLCBuZXcgX1RyYW5zYWN0aW9uU3RyZWFtT2JzZXJ2ZXIodGhpcykpO1xuICAgICAgdGhpcy5fc3RhdGUgPSBjb21taXR0ZWQuc3RhdGU7XG4gICAgICAvL2NsZWFuIHVwXG4gICAgICB0aGlzLl9vbkNsb3NlKCk7XG4gICAgICByZXR1cm4gY29tbWl0dGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSb2xsYmFja3MgdGhlIHRyYW5zYWN0aW9uLlxuICAgICAqXG4gICAgICogQWZ0ZXIgcm9sbGluZyBiYWNrLCB0aGUgdHJhbnNhY3Rpb24gY2FuIG5vIGxvbmdlciBiZSB1c2VkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge1Jlc3VsdH0gTmV3IFJlc3VsdFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdyb2xsYmFjaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJvbGxiYWNrKCkge1xuICAgICAgdmFyIGNvbW1pdHRlZCA9IHRoaXMuX3N0YXRlLnJvbGxiYWNrKHRoaXMuX2Nvbm5lY3Rpb25Ib2xkZXIsIG5ldyBfVHJhbnNhY3Rpb25TdHJlYW1PYnNlcnZlcih0aGlzKSk7XG4gICAgICB0aGlzLl9zdGF0ZSA9IGNvbW1pdHRlZC5zdGF0ZTtcbiAgICAgIC8vY2xlYW4gdXBcbiAgICAgIHRoaXMuX29uQ2xvc2UoKTtcbiAgICAgIHJldHVybiBjb21taXR0ZWQucmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoaXMgdHJhbnNhY3Rpb24gaXMgYWN0aXZlLCB3aGljaCBtZWFucyBjb21taXQgYW5kIHJvbGxiYWNrIGRpZCBub3QgaGFwcGVuLlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHdoZW4gbm90IGNvbW1pdHRlZCBhbmQgbm90IHJvbGxlZCBiYWNrLCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpc09wZW4nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc09wZW4oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3RhdGUgPT0gX3N0YXRlcy5BQ1RJVkU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX29uRXJyb3InLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfb25FcnJvcigpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICAgIC8vIGF0dGVtcHQgdG8gcm9sbGJhY2ssIHVzZWZ1bCB3aGVuIFRyYW5zYWN0aW9uI3J1bigpIGZhaWxlZFxuICAgICAgICByZXR1cm4gdGhpcy5yb2xsYmFjaygpLmNhdGNoKGZ1bmN0aW9uIChpZ25vcmVkRXJyb3IpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgYWxsIGVycm9ycyBiZWNhdXNlIGl0IGlzIGJlc3QgZWZmb3J0IGFuZCB0cmFuc2FjdGlvbiBtaWdodCBhbHJlYWR5IGJlIHJvbGxlZCBiYWNrXG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIGFmdGVyIHJvbGxiYWNrIGF0dGVtcHQgY2hhbmdlIHRoaXMgdHJhbnNhY3Rpb24ncyBzdGF0ZSB0byBGQUlMRURcbiAgICAgICAgICBfdGhpcy5fc3RhdGUgPSBfc3RhdGVzLkZBSUxFRDtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlcnJvciBoYXBwZW5lZCBpbiBpbi1hY3RpdmUgdHJhbnNhY3Rpb24sIGp1c3QgdG8gdGhlIGNsZWFudXAgYW5kIGNoYW5nZSBzdGF0ZSB0byBGQUlMRURcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBfc3RhdGVzLkZBSUxFRDtcbiAgICAgICAgdGhpcy5fb25DbG9zZSgpO1xuICAgICAgICAvLyBubyBhc3luYyBhY3Rpb25zIG5lZWRlZCAtIHJldHVybiByZXNvbHZlZCBwcm9taXNlXG4gICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5yZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBUcmFuc2FjdGlvbjtcbn0oKTtcblxuLyoqIEludGVybmFsIHN0cmVhbSBvYnNlcnZlciB1c2VkIGZvciB0cmFuc2FjdGlvbmFsIHJlc3VsdHMqL1xuXG5cbnZhciBfVHJhbnNhY3Rpb25TdHJlYW1PYnNlcnZlciA9IGZ1bmN0aW9uIChfU3RyZWFtT2JzZXJ2ZXIpIHtcbiAgKDAsIF9pbmhlcml0czMuZGVmYXVsdCkoX1RyYW5zYWN0aW9uU3RyZWFtT2JzZXJ2ZXIsIF9TdHJlYW1PYnNlcnZlcik7XG5cbiAgZnVuY3Rpb24gX1RyYW5zYWN0aW9uU3RyZWFtT2JzZXJ2ZXIodHgpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBfVHJhbnNhY3Rpb25TdHJlYW1PYnNlcnZlcik7XG5cbiAgICB2YXIgX3RoaXMyID0gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoX1RyYW5zYWN0aW9uU3RyZWFtT2JzZXJ2ZXIuX19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKF9UcmFuc2FjdGlvblN0cmVhbU9ic2VydmVyKSkuY2FsbCh0aGlzLCB0eC5fZXJyb3JUcmFuc2Zvcm1lciB8fCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICByZXR1cm4gZXJyO1xuICAgIH0pKTtcblxuICAgIF90aGlzMi5fdHggPSB0eDtcbiAgICAvL3RoaXMgaXMgdG8gdG8gYXZvaWQgbXVsdGlwbGUgY2FsbHMgdG8gb25FcnJvciBjYXVzZWQgYnkgSUdOT1JFRFxuICAgIF90aGlzMi5faGFzRmFpbGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIF90aGlzMjtcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKF9UcmFuc2FjdGlvblN0cmVhbU9ic2VydmVyLCBbe1xuICAgIGtleTogJ29uRXJyb3InLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkVycm9yKGVycm9yKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgaWYgKCF0aGlzLl9oYXNGYWlsZWQpIHtcbiAgICAgICAgdGhpcy5fdHguX29uRXJyb3IoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAoMCwgX2dldDMuZGVmYXVsdCkoX1RyYW5zYWN0aW9uU3RyZWFtT2JzZXJ2ZXIucHJvdG90eXBlLl9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShfVHJhbnNhY3Rpb25TdHJlYW1PYnNlcnZlci5wcm90b3R5cGUpLCAnb25FcnJvcicsIF90aGlzMykuY2FsbChfdGhpczMsIGVycm9yKTtcbiAgICAgICAgICBfdGhpczMuX2hhc0ZhaWxlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uQ29tcGxldGVkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25Db21wbGV0ZWQobWV0YSkge1xuICAgICAgKDAsIF9nZXQzLmRlZmF1bHQpKF9UcmFuc2FjdGlvblN0cmVhbU9ic2VydmVyLnByb3RvdHlwZS5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoX1RyYW5zYWN0aW9uU3RyZWFtT2JzZXJ2ZXIucHJvdG90eXBlKSwgJ29uQ29tcGxldGVkJywgdGhpcykuY2FsbCh0aGlzLCBtZXRhKTtcbiAgICAgIHZhciBib29rbWFyayA9IG1ldGEuYm9va21hcms7XG4gICAgICB0aGlzLl90eC5fb25Cb29rbWFyayhib29rbWFyayk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnc2VydmVyTWV0YScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNlcnZlck1ldGEoKSB7XG4gICAgICB2YXIgc2VydmVyTWV0YSA9IHsgc2VydmVyOiB0aGlzLl9jb25uLnNlcnZlciB9O1xuICAgICAgcmV0dXJuIHNlcnZlck1ldGE7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBfVHJhbnNhY3Rpb25TdHJlYW1PYnNlcnZlcjtcbn0oX3N0cmVhbU9ic2VydmVyMi5kZWZhdWx0KTtcblxuLyoqIGludGVybmFsIHN0YXRlIG1hY2hpbmUgb2YgdGhlIHRyYW5zYWN0aW9uKi9cblxuXG52YXIgX3N0YXRlcyA9IHtcbiAgLy9UaGUgdHJhbnNhY3Rpb24gaXMgcnVubmluZyB3aXRoIG5vIGV4cGxpY2l0IHN1Y2Nlc3Mgb3IgZmFpbHVyZSBtYXJrZWRcbiAgQUNUSVZFOiB7XG4gICAgY29tbWl0OiBmdW5jdGlvbiBjb21taXQoY29ubmVjdGlvbkhvbGRlciwgb2JzZXJ2ZXIpIHtcbiAgICAgIHJldHVybiB7IHJlc3VsdDogX3J1blB1bGxBbGwoXCJDT01NSVRcIiwgY29ubmVjdGlvbkhvbGRlciwgb2JzZXJ2ZXIpLFxuICAgICAgICBzdGF0ZTogX3N0YXRlcy5TVUNDRUVERUQgfTtcbiAgICB9LFxuICAgIHJvbGxiYWNrOiBmdW5jdGlvbiByb2xsYmFjayhjb25uZWN0aW9uSG9sZGVyLCBvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIHsgcmVzdWx0OiBfcnVuUHVsbEFsbChcIlJPTExCQUNLXCIsIGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyKSwgc3RhdGU6IF9zdGF0ZXMuUk9MTEVEX0JBQ0sgfTtcbiAgICB9LFxuICAgIHJ1bjogZnVuY3Rpb24gcnVuKGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMpIHtcbiAgICAgIGNvbm5lY3Rpb25Ib2xkZXIuZ2V0Q29ubmVjdGlvbigpLnRoZW4oZnVuY3Rpb24gKGNvbm4pIHtcbiAgICAgICAgb2JzZXJ2ZXIucmVzb2x2ZUNvbm5lY3Rpb24oY29ubik7XG4gICAgICAgIGNvbm4ucnVuKHN0YXRlbWVudCwgcGFyYW1ldGVycyB8fCB7fSwgb2JzZXJ2ZXIpO1xuICAgICAgICBjb25uLnB1bGxBbGwob2JzZXJ2ZXIpO1xuICAgICAgICBjb25uLnN5bmMoKTtcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICByZXR1cm4gb2JzZXJ2ZXIub25FcnJvcihlcnJvcik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG5ld1J1blJlc3VsdChvYnNlcnZlciwgc3RhdGVtZW50LCBwYXJhbWV0ZXJzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZlci5zZXJ2ZXJNZXRhKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy9BbiBlcnJvciBoYXMgb2NjdXJyZWQsIHRyYW5zYWN0aW9uIGNhbiBubyBsb25nZXIgYmUgdXNlZCBhbmQgbm8gbW9yZSBtZXNzYWdlcyB3aWxsXG4gIC8vIGJlIHNlbnQgZm9yIHRoaXMgdHJhbnNhY3Rpb24uXG4gIEZBSUxFRDoge1xuICAgIGNvbW1pdDogZnVuY3Rpb24gY29tbWl0KGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5vbkVycm9yKHtcbiAgICAgICAgZXJyb3I6IFwiQ2Fubm90IGNvbW1pdCBzdGF0ZW1lbnRzIGluIHRoaXMgdHJhbnNhY3Rpb24sIGJlY2F1c2UgcHJldmlvdXMgc3RhdGVtZW50cyBpbiB0aGUgXCIgKyBcInRyYW5zYWN0aW9uIGhhcyBmYWlsZWQgYW5kIHRoZSB0cmFuc2FjdGlvbiBoYXMgYmVlbiByb2xsZWQgYmFjay4gUGxlYXNlIHN0YXJ0IGEgbmV3XCIgKyBcIiB0cmFuc2FjdGlvbiB0byBydW4gYW5vdGhlciBzdGF0ZW1lbnQuXCJcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgcmVzdWx0OiBuZXdEdW1teVJlc3VsdChvYnNlcnZlciwgXCJDT01NSVRcIiwge30pLCBzdGF0ZTogX3N0YXRlcy5GQUlMRUQgfTtcbiAgICB9LFxuICAgIHJvbGxiYWNrOiBmdW5jdGlvbiByb2xsYmFjayhjb25uZWN0aW9uSG9sZGVyLCBvYnNlcnZlcikge1xuICAgICAgb2JzZXJ2ZXIub25FcnJvcih7IGVycm9yOiBcIkNhbm5vdCByb2xsYmFjayB0cmFuc2FjdGlvbiwgYmVjYXVzZSBwcmV2aW91cyBzdGF0ZW1lbnRzIGluIHRoZSBcIiArIFwidHJhbnNhY3Rpb24gaGFzIGZhaWxlZCBhbmQgdGhlIHRyYW5zYWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcm9sbGVkIGJhY2suXCIgfSk7XG4gICAgICByZXR1cm4geyByZXN1bHQ6IG5ld0R1bW15UmVzdWx0KG9ic2VydmVyLCBcIlJPTExCQUNLXCIsIHt9KSwgc3RhdGU6IF9zdGF0ZXMuRkFJTEVEIH07XG4gICAgfSxcbiAgICBydW46IGZ1bmN0aW9uIHJ1bihjb25uZWN0aW9uSG9sZGVyLCBvYnNlcnZlciwgc3RhdGVtZW50LCBwYXJhbWV0ZXJzKSB7XG4gICAgICBvYnNlcnZlci5vbkVycm9yKHsgZXJyb3I6IFwiQ2Fubm90IHJ1biBzdGF0ZW1lbnQsIGJlY2F1c2UgcHJldmlvdXMgc3RhdGVtZW50cyBpbiB0aGUgXCIgKyBcInRyYW5zYWN0aW9uIGhhcyBmYWlsZWQgYW5kIHRoZSB0cmFuc2FjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJvbGxlZCBiYWNrLlwiIH0pO1xuICAgICAgcmV0dXJuIG5ld0R1bW15UmVzdWx0KG9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMpO1xuICAgIH1cbiAgfSxcblxuICAvL1RoaXMgdHJhbnNhY3Rpb24gaGFzIHN1Y2Nlc3NmdWxseSBjb21taXR0ZWRcbiAgU1VDQ0VFREVEOiB7XG4gICAgY29tbWl0OiBmdW5jdGlvbiBjb21taXQoY29ubmVjdGlvbkhvbGRlciwgb2JzZXJ2ZXIpIHtcbiAgICAgIG9ic2VydmVyLm9uRXJyb3Ioe1xuICAgICAgICBlcnJvcjogXCJDYW5ub3QgY29tbWl0IHN0YXRlbWVudHMgaW4gdGhpcyB0cmFuc2FjdGlvbiwgYmVjYXVzZSBjb21taXQgaGFzIGFscmVhZHkgYmVlbiBzdWNjZXNzZnVsbHkgY2FsbGVkIG9uIHRoZSB0cmFuc2FjdGlvbiBhbmQgdHJhbnNhY3Rpb24gaGFzIGJlZW4gY2xvc2VkLiBQbGVhc2Ugc3RhcnQgYSBuZXdcIiArIFwiIHRyYW5zYWN0aW9uIHRvIHJ1biBhbm90aGVyIHN0YXRlbWVudC5cIlxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyByZXN1bHQ6IG5ld0R1bW15UmVzdWx0KG9ic2VydmVyLCBcIkNPTU1JVFwiLCB7fSksIHN0YXRlOiBfc3RhdGVzLlNVQ0NFRURFRCB9O1xuICAgIH0sXG4gICAgcm9sbGJhY2s6IGZ1bmN0aW9uIHJvbGxiYWNrKGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5vbkVycm9yKHsgZXJyb3I6IFwiQ2Fubm90IHJvbGxiYWNrIHRyYW5zYWN0aW9uLCBiZWNhdXNlIHRyYW5zYWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gc3VjY2Vzc2Z1bGx5IGNsb3NlZC5cIiB9KTtcbiAgICAgIHJldHVybiB7IHJlc3VsdDogbmV3RHVtbXlSZXN1bHQob2JzZXJ2ZXIsIFwiUk9MTEJBQ0tcIiwge30pLCBzdGF0ZTogX3N0YXRlcy5TVUNDRUVERUQgfTtcbiAgICB9LFxuICAgIHJ1bjogZnVuY3Rpb24gcnVuKGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMpIHtcbiAgICAgIG9ic2VydmVyLm9uRXJyb3IoeyBlcnJvcjogXCJDYW5ub3QgcnVuIHN0YXRlbWVudCwgYmVjYXVzZSB0cmFuc2FjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHN1Y2Nlc3NmdWxseSBjbG9zZWQuXCIgfSk7XG4gICAgICByZXR1cm4gbmV3RHVtbXlSZXN1bHQob2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycyk7XG4gICAgfVxuICB9LFxuXG4gIC8vVGhpcyB0cmFuc2FjdGlvbiBoYXMgYmVlbiByb2xsZWQgYmFja1xuICBST0xMRURfQkFDSzoge1xuICAgIGNvbW1pdDogZnVuY3Rpb24gY29tbWl0KGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5vbkVycm9yKHtcbiAgICAgICAgZXJyb3I6IFwiQ2Fubm90IGNvbW1pdCB0aGlzIHRyYW5zYWN0aW9uLCBiZWNhdXNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gcm9sbGVkIGJhY2suXCJcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgcmVzdWx0OiBuZXdEdW1teVJlc3VsdChvYnNlcnZlciwgXCJDT01NSVRcIiwge30pLCBzdGF0ZTogX3N0YXRlcy5ST0xMRURfQkFDSyB9O1xuICAgIH0sXG4gICAgcm9sbGJhY2s6IGZ1bmN0aW9uIHJvbGxiYWNrKGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5vbkVycm9yKHsgZXJyb3I6IFwiQ2Fubm90IHJvbGxiYWNrIHRyYW5zYWN0aW9uLCBiZWNhdXNlIHRyYW5zYWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcm9sbGVkIGJhY2suXCIgfSk7XG4gICAgICByZXR1cm4geyByZXN1bHQ6IG5ld0R1bW15UmVzdWx0KG9ic2VydmVyLCBcIlJPTExCQUNLXCIsIHt9KSwgc3RhdGU6IF9zdGF0ZXMuUk9MTEVEX0JBQ0sgfTtcbiAgICB9LFxuICAgIHJ1bjogZnVuY3Rpb24gcnVuKGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMpIHtcbiAgICAgIG9ic2VydmVyLm9uRXJyb3IoeyBlcnJvcjogXCJDYW5ub3QgcnVuIHN0YXRlbWVudCwgYmVjYXVzZSB0cmFuc2FjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJvbGxlZCBiYWNrLlwiIH0pO1xuICAgICAgcmV0dXJuIG5ld0R1bW15UmVzdWx0KG9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gX3J1blB1bGxBbGwobXNnLCBjb25uZWN0aW9uSG9sZGVyLCBvYnNlcnZlcikge1xuICBjb25uZWN0aW9uSG9sZGVyLmdldENvbm5lY3Rpb24oKS50aGVuKGZ1bmN0aW9uIChjb25uKSB7XG4gICAgb2JzZXJ2ZXIucmVzb2x2ZUNvbm5lY3Rpb24oY29ubik7XG4gICAgY29ubi5ydW4obXNnLCB7fSwgb2JzZXJ2ZXIpO1xuICAgIGNvbm4ucHVsbEFsbChvYnNlcnZlcik7XG4gICAgY29ubi5zeW5jKCk7XG4gIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgIHJldHVybiBvYnNlcnZlci5vbkVycm9yKGVycm9yKTtcbiAgfSk7XG5cbiAgLy8gZm9yIGNvbW1pdCAmIHJvbGxiYWNrIHdlIG5lZWQgcmVzdWx0IHRoYXQgdXNlcyByZWFsIGNvbm5lY3Rpb24gaG9sZGVyIGFuZCBub3RpZmllcyBpdCB3aGVuXG4gIC8vIGNvbm5lY3Rpb24gaXMgbm90IG5lZWRlZCBhbmQgY2FuIGJlIHNhZmVseSByZWxlYXNlZCB0byB0aGUgcG9vbFxuICByZXR1cm4gbmV3IF9yZXN1bHQyLmRlZmF1bHQob2JzZXJ2ZXIsIG1zZywge30sIGVtcHR5TWV0YWRhdGFTdXBwbGllciwgY29ubmVjdGlvbkhvbGRlcik7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBSZXN1bHR9IHdpdGggZW1wdHkgY29ubmVjdGlvbiBob2xkZXIuXG4gKiBTaG91bGQgYmUgdXNlZCBhcyBhIHJlc3VsdCBmb3IgcnVubmluZyBjeXBoZXIgc3RhdGVtZW50cy4gVGhleSBjYW4gcmVzdWx0IGluIG1ldGFkYXRhIGJ1dCBzaG91bGQgbm90XG4gKiBpbmZsdWVuY2UgcmVhbCBjb25uZWN0aW9uIGhvbGRlciB0byByZWxlYXNlIGNvbm5lY3Rpb25zIGJlY2F1c2Ugc2luZ2xlIHRyYW5zYWN0aW9uIGNhbiBoYXZlXG4gKiB7QGxpbmsgVHJhbnNhY3Rpb24jcnVufSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuXG4gKiBAcGFyYW0ge1N0cmVhbU9ic2VydmVyfSBvYnNlcnZlciAtIGFuIG9ic2VydmVyIGZvciB0aGUgY3JlYXRlZCByZXN1bHQuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVtZW50IC0gdGhlIGN5cGhlciBzdGF0ZW1lbnQgdGhhdCBwcm9kdWNlZCB0aGUgcmVzdWx0LlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnMgLSB0aGUgcGFyYW1ldGVycyBmb3IgY3lwaGVyIHN0YXRlbWVudCB0aGF0IHByb2R1Y2VkIHRoZSByZXN1bHQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXRhZGF0YVN1cHBsaWVyIC0gdGhlIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIG1ldGFkYXRhIG9iamVjdC5cbiAqIEByZXR1cm4ge1Jlc3VsdH0gbmV3IHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gbmV3UnVuUmVzdWx0KG9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMsIG1ldGFkYXRhU3VwcGxpZXIpIHtcbiAgcmV0dXJuIG5ldyBfcmVzdWx0Mi5kZWZhdWx0KG9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMsIG1ldGFkYXRhU3VwcGxpZXIsIF9jb25uZWN0aW9uSG9sZGVyLkVNUFRZX0NPTk5FQ1RJT05fSE9MREVSKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIFJlc3VsdH0gd2l0aG91dCBtZXRhZGF0YSBzdXBwbGllciBhbmQgd2l0aCBlbXB0eSBjb25uZWN0aW9uIGhvbGRlci5cbiAqIEZvciBjYXNlcyB3aGVuIHJlc3VsdCByZXByZXNlbnRzIGFuIGludGVybWVkaWF0ZSBvciBmYWlsZWQgYWN0aW9uLCBkb2VzIG5vdCByZXF1aXJlIGFueSBtZXRhZGF0YSBhbmQgZG9lcyBub3RcbiAqIG5lZWQgdG8gaW5mbHVlbmNlIHJlYWwgY29ubmVjdGlvbiBob2xkZXIgdG8gcmVsZWFzZSBjb25uZWN0aW9ucy5cbiAqIEBwYXJhbSB7U3RyZWFtT2JzZXJ2ZXJ9IG9ic2VydmVyIC0gYW4gb2JzZXJ2ZXIgZm9yIHRoZSBjcmVhdGVkIHJlc3VsdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZW1lbnQgLSB0aGUgY3lwaGVyIHN0YXRlbWVudCB0aGF0IHByb2R1Y2VkIHRoZSByZXN1bHQuXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1ldGVycyAtIHRoZSBwYXJhbWV0ZXJzIGZvciBjeXBoZXIgc3RhdGVtZW50IHRoYXQgcHJvZHVjZWQgdGhlIHJlc3VsdC5cbiAqIEByZXR1cm4ge1Jlc3VsdH0gbmV3IHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gbmV3RHVtbXlSZXN1bHQob2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycykge1xuICByZXR1cm4gbmV3IF9yZXN1bHQyLmRlZmF1bHQob2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycywgZW1wdHlNZXRhZGF0YVN1cHBsaWVyLCBfY29ubmVjdGlvbkhvbGRlci5FTVBUWV9DT05ORUNUSU9OX0hPTERFUik7XG59XG5cbmZ1bmN0aW9uIGVtcHR5TWV0YWRhdGFTdXBwbGllcigpIHtcbiAgcmV0dXJuIHt9O1xufVxuXG5leHBvcnRzLmRlZmF1bHQgPSBUcmFuc2FjdGlvbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBETyBOT1QgQ0hBTkdFIFRIRSBWRVJTSU9OIEJFTE9XIEhFUkVcbi8vIFRoaXMgaXMgc2V0IGJ5IHRoZSBidWlsZCBzeXN0ZW0gYXQgcmVsZWFzZSB0aW1lLCB1c2luZ1xuLy8gICBndWxwIHNldCAtLXZlcnNpb24gPHJlbGVhc2V2ZXJzaW9uPlxuLy9cbi8vIFRoaXMgaXMgc2V0IHVwIHRoaXMgd2F5IHRvIGtlZXAgdGhlIHZlcnNpb24gaW4gdGhlIGNvZGUgaW5cbi8vIHN5bmMgd2l0aCB0aGUgbnBtIHBhY2thZ2UgdmVyc2lvbiwgYW5kIHRvIGFsbG93IHRoZSBidWlsZFxuLy8gc3lzdGVtIHRvIGNvbnRyb2wgdmVyc2lvbiBuYW1lcyBhdCBwYWNrYWdpbmcgdGltZS5cbmV4cG9ydHMuZGVmYXVsdCA9IFwiMC4wLjAtZGV2XCI7IiwidmFyIGFzbjEgPSBleHBvcnRzO1xuXG5hc24xLmJpZ251bSA9IHJlcXVpcmUoJ2JuLmpzJyk7XG5cbmFzbjEuZGVmaW5lID0gcmVxdWlyZSgnLi9hc24xL2FwaScpLmRlZmluZTtcbmFzbjEuYmFzZSA9IHJlcXVpcmUoJy4vYXNuMS9iYXNlJyk7XG5hc24xLmNvbnN0YW50cyA9IHJlcXVpcmUoJy4vYXNuMS9jb25zdGFudHMnKTtcbmFzbjEuZGVjb2RlcnMgPSByZXF1aXJlKCcuL2FzbjEvZGVjb2RlcnMnKTtcbmFzbjEuZW5jb2RlcnMgPSByZXF1aXJlKCcuL2FzbjEvZW5jb2RlcnMnKTtcbiIsInZhciBhc24xID0gcmVxdWlyZSgnLi4vYXNuMScpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxudmFyIGFwaSA9IGV4cG9ydHM7XG5cbmFwaS5kZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUobmFtZSwgYm9keSkge1xuICByZXR1cm4gbmV3IEVudGl0eShuYW1lLCBib2R5KTtcbn07XG5cbmZ1bmN0aW9uIEVudGl0eShuYW1lLCBib2R5KSB7XG4gIHRoaXMubmFtZSA9IG5hbWU7XG4gIHRoaXMuYm9keSA9IGJvZHk7XG5cbiAgdGhpcy5kZWNvZGVycyA9IHt9O1xuICB0aGlzLmVuY29kZXJzID0ge307XG59O1xuXG5FbnRpdHkucHJvdG90eXBlLl9jcmVhdGVOYW1lZCA9IGZ1bmN0aW9uIGNyZWF0ZU5hbWVkKGJhc2UpIHtcbiAgdmFyIG5hbWVkO1xuICB0cnkge1xuICAgIG5hbWVkID0gcmVxdWlyZSgndm0nKS5ydW5JblRoaXNDb250ZXh0KFxuICAgICAgJyhmdW5jdGlvbiAnICsgdGhpcy5uYW1lICsgJyhlbnRpdHkpIHtcXG4nICtcbiAgICAgICcgIHRoaXMuX2luaXROYW1lZChlbnRpdHkpO1xcbicgK1xuICAgICAgJ30pJ1xuICAgICk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBuYW1lZCA9IGZ1bmN0aW9uIChlbnRpdHkpIHtcbiAgICAgIHRoaXMuX2luaXROYW1lZChlbnRpdHkpO1xuICAgIH07XG4gIH1cbiAgaW5oZXJpdHMobmFtZWQsIGJhc2UpO1xuICBuYW1lZC5wcm90b3R5cGUuX2luaXROYW1lZCA9IGZ1bmN0aW9uIGluaXRuYW1lZChlbnRpdHkpIHtcbiAgICBiYXNlLmNhbGwodGhpcywgZW50aXR5KTtcbiAgfTtcblxuICByZXR1cm4gbmV3IG5hbWVkKHRoaXMpO1xufTtcblxuRW50aXR5LnByb3RvdHlwZS5fZ2V0RGVjb2RlciA9IGZ1bmN0aW9uIF9nZXREZWNvZGVyKGVuYykge1xuICBlbmMgPSBlbmMgfHwgJ2Rlcic7XG4gIC8vIExhemlseSBjcmVhdGUgZGVjb2RlclxuICBpZiAoIXRoaXMuZGVjb2RlcnMuaGFzT3duUHJvcGVydHkoZW5jKSlcbiAgICB0aGlzLmRlY29kZXJzW2VuY10gPSB0aGlzLl9jcmVhdGVOYW1lZChhc24xLmRlY29kZXJzW2VuY10pO1xuICByZXR1cm4gdGhpcy5kZWNvZGVyc1tlbmNdO1xufTtcblxuRW50aXR5LnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoZGF0YSwgZW5jLCBvcHRpb25zKSB7XG4gIHJldHVybiB0aGlzLl9nZXREZWNvZGVyKGVuYykuZGVjb2RlKGRhdGEsIG9wdGlvbnMpO1xufTtcblxuRW50aXR5LnByb3RvdHlwZS5fZ2V0RW5jb2RlciA9IGZ1bmN0aW9uIF9nZXRFbmNvZGVyKGVuYykge1xuICBlbmMgPSBlbmMgfHwgJ2Rlcic7XG4gIC8vIExhemlseSBjcmVhdGUgZW5jb2RlclxuICBpZiAoIXRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoZW5jKSlcbiAgICB0aGlzLmVuY29kZXJzW2VuY10gPSB0aGlzLl9jcmVhdGVOYW1lZChhc24xLmVuY29kZXJzW2VuY10pO1xuICByZXR1cm4gdGhpcy5lbmNvZGVyc1tlbmNdO1xufTtcblxuRW50aXR5LnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoZGF0YSwgZW5jLCAvKiBpbnRlcm5hbCAqLyByZXBvcnRlcikge1xuICByZXR1cm4gdGhpcy5fZ2V0RW5jb2RlcihlbmMpLmVuY29kZShkYXRhLCByZXBvcnRlcik7XG59O1xuIiwidmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbnZhciBSZXBvcnRlciA9IHJlcXVpcmUoJy4uL2Jhc2UnKS5SZXBvcnRlcjtcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG5cbmZ1bmN0aW9uIERlY29kZXJCdWZmZXIoYmFzZSwgb3B0aW9ucykge1xuICBSZXBvcnRlci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiYXNlKSkge1xuICAgIHRoaXMuZXJyb3IoJ0lucHV0IG5vdCBCdWZmZXInKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLmJhc2UgPSBiYXNlO1xuICB0aGlzLm9mZnNldCA9IDA7XG4gIHRoaXMubGVuZ3RoID0gYmFzZS5sZW5ndGg7XG59XG5pbmhlcml0cyhEZWNvZGVyQnVmZmVyLCBSZXBvcnRlcik7XG5leHBvcnRzLkRlY29kZXJCdWZmZXIgPSBEZWNvZGVyQnVmZmVyO1xuXG5EZWNvZGVyQnVmZmVyLnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24gc2F2ZSgpIHtcbiAgcmV0dXJuIHsgb2Zmc2V0OiB0aGlzLm9mZnNldCwgcmVwb3J0ZXI6IFJlcG9ydGVyLnByb3RvdHlwZS5zYXZlLmNhbGwodGhpcykgfTtcbn07XG5cbkRlY29kZXJCdWZmZXIucHJvdG90eXBlLnJlc3RvcmUgPSBmdW5jdGlvbiByZXN0b3JlKHNhdmUpIHtcbiAgLy8gUmV0dXJuIHNraXBwZWQgZGF0YVxuICB2YXIgcmVzID0gbmV3IERlY29kZXJCdWZmZXIodGhpcy5iYXNlKTtcbiAgcmVzLm9mZnNldCA9IHNhdmUub2Zmc2V0O1xuICByZXMubGVuZ3RoID0gdGhpcy5vZmZzZXQ7XG5cbiAgdGhpcy5vZmZzZXQgPSBzYXZlLm9mZnNldDtcbiAgUmVwb3J0ZXIucHJvdG90eXBlLnJlc3RvcmUuY2FsbCh0aGlzLCBzYXZlLnJlcG9ydGVyKTtcblxuICByZXR1cm4gcmVzO1xufTtcblxuRGVjb2RlckJ1ZmZlci5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uIGlzRW1wdHkoKSB7XG4gIHJldHVybiB0aGlzLm9mZnNldCA9PT0gdGhpcy5sZW5ndGg7XG59O1xuXG5EZWNvZGVyQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDgoZmFpbCkge1xuICBpZiAodGhpcy5vZmZzZXQgKyAxIDw9IHRoaXMubGVuZ3RoKVxuICAgIHJldHVybiB0aGlzLmJhc2UucmVhZFVJbnQ4KHRoaXMub2Zmc2V0KyssIHRydWUpO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuZXJyb3IoZmFpbCB8fCAnRGVjb2RlckJ1ZmZlciBvdmVycnVuJyk7XG59XG5cbkRlY29kZXJCdWZmZXIucHJvdG90eXBlLnNraXAgPSBmdW5jdGlvbiBza2lwKGJ5dGVzLCBmYWlsKSB7XG4gIGlmICghKHRoaXMub2Zmc2V0ICsgYnl0ZXMgPD0gdGhpcy5sZW5ndGgpKVxuICAgIHJldHVybiB0aGlzLmVycm9yKGZhaWwgfHwgJ0RlY29kZXJCdWZmZXIgb3ZlcnJ1bicpO1xuXG4gIHZhciByZXMgPSBuZXcgRGVjb2RlckJ1ZmZlcih0aGlzLmJhc2UpO1xuXG4gIC8vIFNoYXJlIHJlcG9ydGVyIHN0YXRlXG4gIHJlcy5fcmVwb3J0ZXJTdGF0ZSA9IHRoaXMuX3JlcG9ydGVyU3RhdGU7XG5cbiAgcmVzLm9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICByZXMubGVuZ3RoID0gdGhpcy5vZmZzZXQgKyBieXRlcztcbiAgdGhpcy5vZmZzZXQgKz0gYnl0ZXM7XG4gIHJldHVybiByZXM7XG59XG5cbkRlY29kZXJCdWZmZXIucHJvdG90eXBlLnJhdyA9IGZ1bmN0aW9uIHJhdyhzYXZlKSB7XG4gIHJldHVybiB0aGlzLmJhc2Uuc2xpY2Uoc2F2ZSA/IHNhdmUub2Zmc2V0IDogdGhpcy5vZmZzZXQsIHRoaXMubGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gRW5jb2RlckJ1ZmZlcih2YWx1ZSwgcmVwb3J0ZXIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZS5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgaWYgKCEoaXRlbSBpbnN0YW5jZW9mIEVuY29kZXJCdWZmZXIpKVxuICAgICAgICBpdGVtID0gbmV3IEVuY29kZXJCdWZmZXIoaXRlbSwgcmVwb3J0ZXIpO1xuICAgICAgdGhpcy5sZW5ndGggKz0gaXRlbS5sZW5ndGg7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9LCB0aGlzKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKCEoMCA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSAweGZmKSlcbiAgICAgIHJldHVybiByZXBvcnRlci5lcnJvcignbm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZScpO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmxlbmd0aCA9IDE7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHZhbHVlKTtcbiAgfSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMubGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXBvcnRlci5lcnJvcignVW5zdXBwb3J0ZWQgdHlwZTogJyArIHR5cGVvZiB2YWx1ZSk7XG4gIH1cbn1cbmV4cG9ydHMuRW5jb2RlckJ1ZmZlciA9IEVuY29kZXJCdWZmZXI7XG5cbkVuY29kZXJCdWZmZXIucHJvdG90eXBlLmpvaW4gPSBmdW5jdGlvbiBqb2luKG91dCwgb2Zmc2V0KSB7XG4gIGlmICghb3V0KVxuICAgIG91dCA9IG5ldyBCdWZmZXIodGhpcy5sZW5ndGgpO1xuICBpZiAoIW9mZnNldClcbiAgICBvZmZzZXQgPSAwO1xuXG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm4gb3V0O1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XG4gICAgdGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgIGl0ZW0uam9pbihvdXQsIG9mZnNldCk7XG4gICAgICBvZmZzZXQgKz0gaXRlbS5sZW5ndGg7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgIG91dFtvZmZzZXRdID0gdGhpcy52YWx1ZTtcbiAgICBlbHNlIGlmICh0eXBlb2YgdGhpcy52YWx1ZSA9PT0gJ3N0cmluZycpXG4gICAgICBvdXQud3JpdGUodGhpcy52YWx1ZSwgb2Zmc2V0KTtcbiAgICBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIodGhpcy52YWx1ZSkpXG4gICAgICB0aGlzLnZhbHVlLmNvcHkob3V0LCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSB0aGlzLmxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59O1xuIiwidmFyIGJhc2UgPSBleHBvcnRzO1xuXG5iYXNlLlJlcG9ydGVyID0gcmVxdWlyZSgnLi9yZXBvcnRlcicpLlJlcG9ydGVyO1xuYmFzZS5EZWNvZGVyQnVmZmVyID0gcmVxdWlyZSgnLi9idWZmZXInKS5EZWNvZGVyQnVmZmVyO1xuYmFzZS5FbmNvZGVyQnVmZmVyID0gcmVxdWlyZSgnLi9idWZmZXInKS5FbmNvZGVyQnVmZmVyO1xuYmFzZS5Ob2RlID0gcmVxdWlyZSgnLi9ub2RlJyk7XG4iLCJ2YXIgUmVwb3J0ZXIgPSByZXF1aXJlKCcuLi9iYXNlJykuUmVwb3J0ZXI7XG52YXIgRW5jb2RlckJ1ZmZlciA9IHJlcXVpcmUoJy4uL2Jhc2UnKS5FbmNvZGVyQnVmZmVyO1xudmFyIERlY29kZXJCdWZmZXIgPSByZXF1aXJlKCcuLi9iYXNlJykuRGVjb2RlckJ1ZmZlcjtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbi8vIFN1cHBvcnRlZCB0YWdzXG52YXIgdGFncyA9IFtcbiAgJ3NlcScsICdzZXFvZicsICdzZXQnLCAnc2V0b2YnLCAnb2JqaWQnLCAnYm9vbCcsXG4gICdnZW50aW1lJywgJ3V0Y3RpbWUnLCAnbnVsbF8nLCAnZW51bScsICdpbnQnLCAnb2JqRGVzYycsXG4gICdiaXRzdHInLCAnYm1wc3RyJywgJ2NoYXJzdHInLCAnZ2Vuc3RyJywgJ2dyYXBoc3RyJywgJ2lhNXN0cicsICdpc282NDZzdHInLFxuICAnbnVtc3RyJywgJ29jdHN0cicsICdwcmludHN0cicsICd0NjFzdHInLCAndW5pc3RyJywgJ3V0ZjhzdHInLCAndmlkZW9zdHInXG5dO1xuXG4vLyBQdWJsaWMgbWV0aG9kcyBsaXN0XG52YXIgbWV0aG9kcyA9IFtcbiAgJ2tleScsICdvYmonLCAndXNlJywgJ29wdGlvbmFsJywgJ2V4cGxpY2l0JywgJ2ltcGxpY2l0JywgJ2RlZicsICdjaG9pY2UnLFxuICAnYW55JywgJ2NvbnRhaW5zJ1xuXS5jb25jYXQodGFncyk7XG5cbi8vIE92ZXJyaWRlZCBtZXRob2RzIGxpc3RcbnZhciBvdmVycmlkZWQgPSBbXG4gICdfcGVla1RhZycsICdfZGVjb2RlVGFnJywgJ191c2UnLFxuICAnX2RlY29kZVN0cicsICdfZGVjb2RlT2JqaWQnLCAnX2RlY29kZVRpbWUnLFxuICAnX2RlY29kZU51bGwnLCAnX2RlY29kZUludCcsICdfZGVjb2RlQm9vbCcsICdfZGVjb2RlTGlzdCcsXG5cbiAgJ19lbmNvZGVDb21wb3NpdGUnLCAnX2VuY29kZVN0cicsICdfZW5jb2RlT2JqaWQnLCAnX2VuY29kZVRpbWUnLFxuICAnX2VuY29kZU51bGwnLCAnX2VuY29kZUludCcsICdfZW5jb2RlQm9vbCdcbl07XG5cbmZ1bmN0aW9uIE5vZGUoZW5jLCBwYXJlbnQpIHtcbiAgdmFyIHN0YXRlID0ge307XG4gIHRoaXMuX2Jhc2VTdGF0ZSA9IHN0YXRlO1xuXG4gIHN0YXRlLmVuYyA9IGVuYztcblxuICBzdGF0ZS5wYXJlbnQgPSBwYXJlbnQgfHwgbnVsbDtcbiAgc3RhdGUuY2hpbGRyZW4gPSBudWxsO1xuXG4gIC8vIFN0YXRlXG4gIHN0YXRlLnRhZyA9IG51bGw7XG4gIHN0YXRlLmFyZ3MgPSBudWxsO1xuICBzdGF0ZS5yZXZlcnNlQXJncyA9IG51bGw7XG4gIHN0YXRlLmNob2ljZSA9IG51bGw7XG4gIHN0YXRlLm9wdGlvbmFsID0gZmFsc2U7XG4gIHN0YXRlLmFueSA9IGZhbHNlO1xuICBzdGF0ZS5vYmogPSBmYWxzZTtcbiAgc3RhdGUudXNlID0gbnVsbDtcbiAgc3RhdGUudXNlRGVjb2RlciA9IG51bGw7XG4gIHN0YXRlLmtleSA9IG51bGw7XG4gIHN0YXRlWydkZWZhdWx0J10gPSBudWxsO1xuICBzdGF0ZS5leHBsaWNpdCA9IG51bGw7XG4gIHN0YXRlLmltcGxpY2l0ID0gbnVsbDtcbiAgc3RhdGUuY29udGFpbnMgPSBudWxsO1xuXG4gIC8vIFNob3VsZCBjcmVhdGUgbmV3IGluc3RhbmNlIG9uIGVhY2ggbWV0aG9kXG4gIGlmICghc3RhdGUucGFyZW50KSB7XG4gICAgc3RhdGUuY2hpbGRyZW4gPSBbXTtcbiAgICB0aGlzLl93cmFwKCk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gTm9kZTtcblxudmFyIHN0YXRlUHJvcHMgPSBbXG4gICdlbmMnLCAncGFyZW50JywgJ2NoaWxkcmVuJywgJ3RhZycsICdhcmdzJywgJ3JldmVyc2VBcmdzJywgJ2Nob2ljZScsXG4gICdvcHRpb25hbCcsICdhbnknLCAnb2JqJywgJ3VzZScsICdhbHRlcmVkVXNlJywgJ2tleScsICdkZWZhdWx0JywgJ2V4cGxpY2l0JyxcbiAgJ2ltcGxpY2l0JywgJ2NvbnRhaW5zJ1xuXTtcblxuTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuICB2YXIgY3N0YXRlID0ge307XG4gIHN0YXRlUHJvcHMuZm9yRWFjaChmdW5jdGlvbihwcm9wKSB7XG4gICAgY3N0YXRlW3Byb3BdID0gc3RhdGVbcHJvcF07XG4gIH0pO1xuICB2YXIgcmVzID0gbmV3IHRoaXMuY29uc3RydWN0b3IoY3N0YXRlLnBhcmVudCk7XG4gIHJlcy5fYmFzZVN0YXRlID0gY3N0YXRlO1xuICByZXR1cm4gcmVzO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX3dyYXAgPSBmdW5jdGlvbiB3cmFwKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gIG1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICB0aGlzW21ldGhvZF0gPSBmdW5jdGlvbiBfd3JhcHBlZE1ldGhvZCgpIHtcbiAgICAgIHZhciBjbG9uZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO1xuICAgICAgc3RhdGUuY2hpbGRyZW4ucHVzaChjbG9uZSk7XG4gICAgICByZXR1cm4gY2xvbmVbbWV0aG9kXS5hcHBseShjbG9uZSwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9LCB0aGlzKTtcbn07XG5cbk5vZGUucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdChib2R5KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICBhc3NlcnQoc3RhdGUucGFyZW50ID09PSBudWxsKTtcbiAgYm9keS5jYWxsKHRoaXMpO1xuXG4gIC8vIEZpbHRlciBjaGlsZHJlblxuICBzdGF0ZS5jaGlsZHJlbiA9IHN0YXRlLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZC5fYmFzZVN0YXRlLnBhcmVudCA9PT0gdGhpcztcbiAgfSwgdGhpcyk7XG4gIGFzc2VydC5lcXVhbChzdGF0ZS5jaGlsZHJlbi5sZW5ndGgsIDEsICdSb290IG5vZGUgY2FuIGhhdmUgb25seSBvbmUgY2hpbGQnKTtcbn07XG5cbk5vZGUucHJvdG90eXBlLl91c2VBcmdzID0gZnVuY3Rpb24gdXNlQXJncyhhcmdzKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICAvLyBGaWx0ZXIgY2hpbGRyZW4gYW5kIGFyZ3NcbiAgdmFyIGNoaWxkcmVuID0gYXJncy5maWx0ZXIoZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGFyZyBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I7XG4gIH0sIHRoaXMpO1xuICBhcmdzID0gYXJncy5maWx0ZXIoZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuICEoYXJnIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0sIHRoaXMpO1xuXG4gIGlmIChjaGlsZHJlbi5sZW5ndGggIT09IDApIHtcbiAgICBhc3NlcnQoc3RhdGUuY2hpbGRyZW4gPT09IG51bGwpO1xuICAgIHN0YXRlLmNoaWxkcmVuID0gY2hpbGRyZW47XG5cbiAgICAvLyBSZXBsYWNlIHBhcmVudCB0byBtYWludGFpbiBiYWNrd2FyZCBsaW5rXG4gICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihjaGlsZCkge1xuICAgICAgY2hpbGQuX2Jhc2VTdGF0ZS5wYXJlbnQgPSB0aGlzO1xuICAgIH0sIHRoaXMpO1xuICB9XG4gIGlmIChhcmdzLmxlbmd0aCAhPT0gMCkge1xuICAgIGFzc2VydChzdGF0ZS5hcmdzID09PSBudWxsKTtcbiAgICBzdGF0ZS5hcmdzID0gYXJncztcbiAgICBzdGF0ZS5yZXZlcnNlQXJncyA9IGFyZ3MubWFwKGZ1bmN0aW9uKGFyZykge1xuICAgICAgaWYgKHR5cGVvZiBhcmcgIT09ICdvYmplY3QnIHx8IGFyZy5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KVxuICAgICAgICByZXR1cm4gYXJnO1xuXG4gICAgICB2YXIgcmVzID0ge307XG4gICAgICBPYmplY3Qua2V5cyhhcmcpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIGlmIChrZXkgPT0gKGtleSB8IDApKVxuICAgICAgICAgIGtleSB8PSAwO1xuICAgICAgICB2YXIgdmFsdWUgPSBhcmdba2V5XTtcbiAgICAgICAgcmVzW3ZhbHVlXSA9IGtleTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9KTtcbiAgfVxufTtcblxuLy9cbi8vIE92ZXJyaWRlZCBtZXRob2RzXG4vL1xuXG5vdmVycmlkZWQuZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgTm9kZS5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uIF9vdmVycmlkZWQoKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuICAgIHRocm93IG5ldyBFcnJvcihtZXRob2QgKyAnIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICcgKyBzdGF0ZS5lbmMpO1xuICB9O1xufSk7XG5cbi8vXG4vLyBQdWJsaWMgbWV0aG9kc1xuLy9cblxudGFncy5mb3JFYWNoKGZ1bmN0aW9uKHRhZykge1xuICBOb2RlLnByb3RvdHlwZVt0YWddID0gZnVuY3Rpb24gX3RhZ01ldGhvZCgpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gICAgYXNzZXJ0KHN0YXRlLnRhZyA9PT0gbnVsbCk7XG4gICAgc3RhdGUudGFnID0gdGFnO1xuXG4gICAgdGhpcy5fdXNlQXJncyhhcmdzKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xufSk7XG5cbk5vZGUucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShpdGVtKSB7XG4gIGFzc2VydChpdGVtKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZS51c2UgPT09IG51bGwpO1xuICBzdGF0ZS51c2UgPSBpdGVtO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUub3B0aW9uYWwgPSBmdW5jdGlvbiBvcHRpb25hbCgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIHN0YXRlLm9wdGlvbmFsID0gdHJ1ZTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbk5vZGUucHJvdG90eXBlLmRlZiA9IGZ1bmN0aW9uIGRlZih2YWwpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZVsnZGVmYXVsdCddID09PSBudWxsKTtcbiAgc3RhdGVbJ2RlZmF1bHQnXSA9IHZhbDtcbiAgc3RhdGUub3B0aW9uYWwgPSB0cnVlO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUuZXhwbGljaXQgPSBmdW5jdGlvbiBleHBsaWNpdChudW0pIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZS5leHBsaWNpdCA9PT0gbnVsbCAmJiBzdGF0ZS5pbXBsaWNpdCA9PT0gbnVsbCk7XG4gIHN0YXRlLmV4cGxpY2l0ID0gbnVtO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUuaW1wbGljaXQgPSBmdW5jdGlvbiBpbXBsaWNpdChudW0pIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZS5leHBsaWNpdCA9PT0gbnVsbCAmJiBzdGF0ZS5pbXBsaWNpdCA9PT0gbnVsbCk7XG4gIHN0YXRlLmltcGxpY2l0ID0gbnVtO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUub2JqID0gZnVuY3Rpb24gb2JqKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICBzdGF0ZS5vYmogPSB0cnVlO1xuXG4gIGlmIChhcmdzLmxlbmd0aCAhPT0gMClcbiAgICB0aGlzLl91c2VBcmdzKGFyZ3MpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUua2V5ID0gZnVuY3Rpb24ga2V5KG5ld0tleSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgYXNzZXJ0KHN0YXRlLmtleSA9PT0gbnVsbCk7XG4gIHN0YXRlLmtleSA9IG5ld0tleTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbk5vZGUucHJvdG90eXBlLmFueSA9IGZ1bmN0aW9uIGFueSgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIHN0YXRlLmFueSA9IHRydWU7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5jaG9pY2UgPSBmdW5jdGlvbiBjaG9pY2Uob2JqKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICBhc3NlcnQoc3RhdGUuY2hvaWNlID09PSBudWxsKTtcbiAgc3RhdGUuY2hvaWNlID0gb2JqO1xuICB0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmpba2V5XTtcbiAgfSkpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiBjb250YWlucyhpdGVtKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICBhc3NlcnQoc3RhdGUudXNlID09PSBudWxsKTtcbiAgc3RhdGUuY29udGFpbnMgPSBpdGVtO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIERlY29kaW5nXG4vL1xuXG5Ob2RlLnByb3RvdHlwZS5fZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKGlucHV0LCBvcHRpb25zKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICAvLyBEZWNvZGUgcm9vdCBub2RlXG4gIGlmIChzdGF0ZS5wYXJlbnQgPT09IG51bGwpXG4gICAgcmV0dXJuIGlucHV0LndyYXBSZXN1bHQoc3RhdGUuY2hpbGRyZW5bMF0uX2RlY29kZShpbnB1dCwgb3B0aW9ucykpO1xuXG4gIHZhciByZXN1bHQgPSBzdGF0ZVsnZGVmYXVsdCddO1xuICB2YXIgcHJlc2VudCA9IHRydWU7XG5cbiAgdmFyIHByZXZLZXkgPSBudWxsO1xuICBpZiAoc3RhdGUua2V5ICE9PSBudWxsKVxuICAgIHByZXZLZXkgPSBpbnB1dC5lbnRlcktleShzdGF0ZS5rZXkpO1xuXG4gIC8vIENoZWNrIGlmIHRhZyBpcyB0aGVyZVxuICBpZiAoc3RhdGUub3B0aW9uYWwpIHtcbiAgICB2YXIgdGFnID0gbnVsbDtcbiAgICBpZiAoc3RhdGUuZXhwbGljaXQgIT09IG51bGwpXG4gICAgICB0YWcgPSBzdGF0ZS5leHBsaWNpdDtcbiAgICBlbHNlIGlmIChzdGF0ZS5pbXBsaWNpdCAhPT0gbnVsbClcbiAgICAgIHRhZyA9IHN0YXRlLmltcGxpY2l0O1xuICAgIGVsc2UgaWYgKHN0YXRlLnRhZyAhPT0gbnVsbClcbiAgICAgIHRhZyA9IHN0YXRlLnRhZztcblxuICAgIGlmICh0YWcgPT09IG51bGwgJiYgIXN0YXRlLmFueSkge1xuICAgICAgLy8gVHJpYWwgYW5kIEVycm9yXG4gICAgICB2YXIgc2F2ZSA9IGlucHV0LnNhdmUoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChzdGF0ZS5jaG9pY2UgPT09IG51bGwpXG4gICAgICAgICAgdGhpcy5fZGVjb2RlR2VuZXJpYyhzdGF0ZS50YWcsIGlucHV0LCBvcHRpb25zKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRoaXMuX2RlY29kZUNob2ljZShpbnB1dCwgb3B0aW9ucyk7XG4gICAgICAgIHByZXNlbnQgPSB0cnVlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBwcmVzZW50ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpbnB1dC5yZXN0b3JlKHNhdmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVzZW50ID0gdGhpcy5fcGVla1RhZyhpbnB1dCwgdGFnLCBzdGF0ZS5hbnkpO1xuXG4gICAgICBpZiAoaW5wdXQuaXNFcnJvcihwcmVzZW50KSlcbiAgICAgICAgcmV0dXJuIHByZXNlbnQ7XG4gICAgfVxuICB9XG5cbiAgLy8gUHVzaCBvYmplY3Qgb24gc3RhY2tcbiAgdmFyIHByZXZPYmo7XG4gIGlmIChzdGF0ZS5vYmogJiYgcHJlc2VudClcbiAgICBwcmV2T2JqID0gaW5wdXQuZW50ZXJPYmplY3QoKTtcblxuICBpZiAocHJlc2VudCkge1xuICAgIC8vIFVud3JhcCBleHBsaWNpdCB2YWx1ZXNcbiAgICBpZiAoc3RhdGUuZXhwbGljaXQgIT09IG51bGwpIHtcbiAgICAgIHZhciBleHBsaWNpdCA9IHRoaXMuX2RlY29kZVRhZyhpbnB1dCwgc3RhdGUuZXhwbGljaXQpO1xuICAgICAgaWYgKGlucHV0LmlzRXJyb3IoZXhwbGljaXQpKVxuICAgICAgICByZXR1cm4gZXhwbGljaXQ7XG4gICAgICBpbnB1dCA9IGV4cGxpY2l0O1xuICAgIH1cblxuICAgIHZhciBzdGFydCA9IGlucHV0Lm9mZnNldDtcblxuICAgIC8vIFVud3JhcCBpbXBsaWNpdCBhbmQgbm9ybWFsIHZhbHVlc1xuICAgIGlmIChzdGF0ZS51c2UgPT09IG51bGwgJiYgc3RhdGUuY2hvaWNlID09PSBudWxsKSB7XG4gICAgICBpZiAoc3RhdGUuYW55KVxuICAgICAgICB2YXIgc2F2ZSA9IGlucHV0LnNhdmUoKTtcbiAgICAgIHZhciBib2R5ID0gdGhpcy5fZGVjb2RlVGFnKFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgc3RhdGUuaW1wbGljaXQgIT09IG51bGwgPyBzdGF0ZS5pbXBsaWNpdCA6IHN0YXRlLnRhZyxcbiAgICAgICAgc3RhdGUuYW55XG4gICAgICApO1xuICAgICAgaWYgKGlucHV0LmlzRXJyb3IoYm9keSkpXG4gICAgICAgIHJldHVybiBib2R5O1xuXG4gICAgICBpZiAoc3RhdGUuYW55KVxuICAgICAgICByZXN1bHQgPSBpbnB1dC5yYXcoc2F2ZSk7XG4gICAgICBlbHNlXG4gICAgICAgIGlucHV0ID0gYm9keTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRyYWNrICYmIHN0YXRlLnRhZyAhPT0gbnVsbClcbiAgICAgIG9wdGlvbnMudHJhY2soaW5wdXQucGF0aCgpLCBzdGFydCwgaW5wdXQubGVuZ3RoLCAndGFnZ2VkJyk7XG5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRyYWNrICYmIHN0YXRlLnRhZyAhPT0gbnVsbClcbiAgICAgIG9wdGlvbnMudHJhY2soaW5wdXQucGF0aCgpLCBpbnB1dC5vZmZzZXQsIGlucHV0Lmxlbmd0aCwgJ2NvbnRlbnQnKTtcblxuICAgIC8vIFNlbGVjdCBwcm9wZXIgbWV0aG9kIGZvciB0YWdcbiAgICBpZiAoc3RhdGUuYW55KVxuICAgICAgcmVzdWx0ID0gcmVzdWx0O1xuICAgIGVsc2UgaWYgKHN0YXRlLmNob2ljZSA9PT0gbnVsbClcbiAgICAgIHJlc3VsdCA9IHRoaXMuX2RlY29kZUdlbmVyaWMoc3RhdGUudGFnLCBpbnB1dCwgb3B0aW9ucyk7XG4gICAgZWxzZVxuICAgICAgcmVzdWx0ID0gdGhpcy5fZGVjb2RlQ2hvaWNlKGlucHV0LCBvcHRpb25zKTtcblxuICAgIGlmIChpbnB1dC5pc0Vycm9yKHJlc3VsdCkpXG4gICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgLy8gRGVjb2RlIGNoaWxkcmVuXG4gICAgaWYgKCFzdGF0ZS5hbnkgJiYgc3RhdGUuY2hvaWNlID09PSBudWxsICYmIHN0YXRlLmNoaWxkcmVuICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIGRlY29kZUNoaWxkcmVuKGNoaWxkKSB7XG4gICAgICAgIC8vIE5PVEU6IFdlIGFyZSBpZ25vcmluZyBlcnJvcnMgaGVyZSwgdG8gbGV0IHBhcnNlciBjb250aW51ZSB3aXRoIG90aGVyXG4gICAgICAgIC8vIHBhcnRzIG9mIGVuY29kZWQgZGF0YVxuICAgICAgICBjaGlsZC5fZGVjb2RlKGlucHV0LCBvcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIERlY29kZSBjb250YWluZWQvZW5jb2RlZCBieSBzY2hlbWEsIG9ubHkgaW4gYml0IG9yIG9jdGV0IHN0cmluZ3NcbiAgICBpZiAoc3RhdGUuY29udGFpbnMgJiYgKHN0YXRlLnRhZyA9PT0gJ29jdHN0cicgfHwgc3RhdGUudGFnID09PSAnYml0c3RyJykpIHtcbiAgICAgIHZhciBkYXRhID0gbmV3IERlY29kZXJCdWZmZXIocmVzdWx0KTtcbiAgICAgIHJlc3VsdCA9IHRoaXMuX2dldFVzZShzdGF0ZS5jb250YWlucywgaW5wdXQuX3JlcG9ydGVyU3RhdGUub2JqKVxuICAgICAgICAgIC5fZGVjb2RlKGRhdGEsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBvcCBvYmplY3RcbiAgaWYgKHN0YXRlLm9iaiAmJiBwcmVzZW50KVxuICAgIHJlc3VsdCA9IGlucHV0LmxlYXZlT2JqZWN0KHByZXZPYmopO1xuXG4gIC8vIFNldCBrZXlcbiAgaWYgKHN0YXRlLmtleSAhPT0gbnVsbCAmJiAocmVzdWx0ICE9PSBudWxsIHx8IHByZXNlbnQgPT09IHRydWUpKVxuICAgIGlucHV0LmxlYXZlS2V5KHByZXZLZXksIHN0YXRlLmtleSwgcmVzdWx0KTtcbiAgZWxzZSBpZiAocHJldktleSAhPT0gbnVsbClcbiAgICBpbnB1dC5leGl0S2V5KHByZXZLZXkpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYyA9IGZ1bmN0aW9uIGRlY29kZUdlbmVyaWModGFnLCBpbnB1dCwgb3B0aW9ucykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgaWYgKHRhZyA9PT0gJ3NlcScgfHwgdGFnID09PSAnc2V0JylcbiAgICByZXR1cm4gbnVsbDtcbiAgaWYgKHRhZyA9PT0gJ3NlcW9mJyB8fCB0YWcgPT09ICdzZXRvZicpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZUxpc3QoaW5wdXQsIHRhZywgc3RhdGUuYXJnc1swXSwgb3B0aW9ucyk7XG4gIGVsc2UgaWYgKC9zdHIkLy50ZXN0KHRhZykpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZVN0cihpbnB1dCwgdGFnLCBvcHRpb25zKTtcbiAgZWxzZSBpZiAodGFnID09PSAnb2JqaWQnICYmIHN0YXRlLmFyZ3MpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZU9iamlkKGlucHV0LCBzdGF0ZS5hcmdzWzBdLCBzdGF0ZS5hcmdzWzFdLCBvcHRpb25zKTtcbiAgZWxzZSBpZiAodGFnID09PSAnb2JqaWQnKVxuICAgIHJldHVybiB0aGlzLl9kZWNvZGVPYmppZChpbnB1dCwgbnVsbCwgbnVsbCwgb3B0aW9ucyk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ2dlbnRpbWUnIHx8IHRhZyA9PT0gJ3V0Y3RpbWUnKVxuICAgIHJldHVybiB0aGlzLl9kZWNvZGVUaW1lKGlucHV0LCB0YWcsIG9wdGlvbnMpO1xuICBlbHNlIGlmICh0YWcgPT09ICdudWxsXycpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZU51bGwoaW5wdXQsIG9wdGlvbnMpO1xuICBlbHNlIGlmICh0YWcgPT09ICdib29sJylcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlQm9vbChpbnB1dCwgb3B0aW9ucyk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ29iakRlc2MnKVxuICAgIHJldHVybiB0aGlzLl9kZWNvZGVTdHIoaW5wdXQsIHRhZywgb3B0aW9ucyk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ2ludCcgfHwgdGFnID09PSAnZW51bScpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZUludChpbnB1dCwgc3RhdGUuYXJncyAmJiBzdGF0ZS5hcmdzWzBdLCBvcHRpb25zKTtcblxuICBpZiAoc3RhdGUudXNlICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFVzZShzdGF0ZS51c2UsIGlucHV0Ll9yZXBvcnRlclN0YXRlLm9iailcbiAgICAgICAgLl9kZWNvZGUoaW5wdXQsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBpbnB1dC5lcnJvcigndW5rbm93biB0YWc6ICcgKyB0YWcpO1xuICB9XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5fZ2V0VXNlID0gZnVuY3Rpb24gX2dldFVzZShlbnRpdHksIG9iaikge1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcbiAgLy8gQ3JlYXRlIGFsdGVyZWQgdXNlIGRlY29kZXIgaWYgaW1wbGljaXQgaXMgc2V0XG4gIHN0YXRlLnVzZURlY29kZXIgPSB0aGlzLl91c2UoZW50aXR5LCBvYmopO1xuICBhc3NlcnQoc3RhdGUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCA9PT0gbnVsbCk7XG4gIHN0YXRlLnVzZURlY29kZXIgPSBzdGF0ZS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuY2hpbGRyZW5bMF07XG4gIGlmIChzdGF0ZS5pbXBsaWNpdCAhPT0gc3RhdGUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0KSB7XG4gICAgc3RhdGUudXNlRGVjb2RlciA9IHN0YXRlLnVzZURlY29kZXIuY2xvbmUoKTtcbiAgICBzdGF0ZS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQgPSBzdGF0ZS5pbXBsaWNpdDtcbiAgfVxuICByZXR1cm4gc3RhdGUudXNlRGVjb2Rlcjtcbn07XG5cbk5vZGUucHJvdG90eXBlLl9kZWNvZGVDaG9pY2UgPSBmdW5jdGlvbiBkZWNvZGVDaG9pY2UoaW5wdXQsIG9wdGlvbnMpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuICB2YXIgcmVzdWx0ID0gbnVsbDtcbiAgdmFyIG1hdGNoID0gZmFsc2U7XG5cbiAgT2JqZWN0LmtleXMoc3RhdGUuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKGtleSkge1xuICAgIHZhciBzYXZlID0gaW5wdXQuc2F2ZSgpO1xuICAgIHZhciBub2RlID0gc3RhdGUuY2hvaWNlW2tleV07XG4gICAgdHJ5IHtcbiAgICAgIHZhciB2YWx1ZSA9IG5vZGUuX2RlY29kZShpbnB1dCwgb3B0aW9ucyk7XG4gICAgICBpZiAoaW5wdXQuaXNFcnJvcih2YWx1ZSkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgcmVzdWx0ID0geyB0eXBlOiBrZXksIHZhbHVlOiB2YWx1ZSB9O1xuICAgICAgbWF0Y2ggPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlucHV0LnJlc3RvcmUoc2F2ZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9LCB0aGlzKTtcblxuICBpZiAoIW1hdGNoKVxuICAgIHJldHVybiBpbnB1dC5lcnJvcignQ2hvaWNlIG5vdCBtYXRjaGVkJyk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vXG4vLyBFbmNvZGluZ1xuLy9cblxuTm9kZS5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXIgPSBmdW5jdGlvbiBjcmVhdGVFbmNvZGVyQnVmZmVyKGRhdGEpIHtcbiAgcmV0dXJuIG5ldyBFbmNvZGVyQnVmZmVyKGRhdGEsIHRoaXMucmVwb3J0ZXIpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2VuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShkYXRhLCByZXBvcnRlciwgcGFyZW50KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcbiAgaWYgKHN0YXRlWydkZWZhdWx0J10gIT09IG51bGwgJiYgc3RhdGVbJ2RlZmF1bHQnXSA9PT0gZGF0YSlcbiAgICByZXR1cm47XG5cbiAgdmFyIHJlc3VsdCA9IHRoaXMuX2VuY29kZVZhbHVlKGRhdGEsIHJlcG9ydGVyLCBwYXJlbnQpO1xuICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuO1xuXG4gIGlmICh0aGlzLl9za2lwRGVmYXVsdChyZXN1bHQsIHJlcG9ydGVyLCBwYXJlbnQpKVxuICAgIHJldHVybjtcblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2VuY29kZVZhbHVlID0gZnVuY3Rpb24gZW5jb2RlKGRhdGEsIHJlcG9ydGVyLCBwYXJlbnQpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIC8vIERlY29kZSByb290IG5vZGVcbiAgaWYgKHN0YXRlLnBhcmVudCA9PT0gbnVsbClcbiAgICByZXR1cm4gc3RhdGUuY2hpbGRyZW5bMF0uX2VuY29kZShkYXRhLCByZXBvcnRlciB8fCBuZXcgUmVwb3J0ZXIoKSk7XG5cbiAgdmFyIHJlc3VsdCA9IG51bGw7XG5cbiAgLy8gU2V0IHJlcG9ydGVyIHRvIHNoYXJlIGl0IHdpdGggYSBjaGlsZCBjbGFzc1xuICB0aGlzLnJlcG9ydGVyID0gcmVwb3J0ZXI7XG5cbiAgLy8gQ2hlY2sgaWYgZGF0YSBpcyB0aGVyZVxuICBpZiAoc3RhdGUub3B0aW9uYWwgJiYgZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHN0YXRlWydkZWZhdWx0J10gIT09IG51bGwpXG4gICAgICBkYXRhID0gc3RhdGVbJ2RlZmF1bHQnXVxuICAgIGVsc2VcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEVuY29kZSBjaGlsZHJlbiBmaXJzdFxuICB2YXIgY29udGVudCA9IG51bGw7XG4gIHZhciBwcmltaXRpdmUgPSBmYWxzZTtcbiAgaWYgKHN0YXRlLmFueSkge1xuICAgIC8vIEFueXRoaW5nIHRoYXQgd2FzIGdpdmVuIGlzIHRyYW5zbGF0ZWQgdG8gYnVmZmVyXG4gICAgcmVzdWx0ID0gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihkYXRhKTtcbiAgfSBlbHNlIGlmIChzdGF0ZS5jaG9pY2UpIHtcbiAgICByZXN1bHQgPSB0aGlzLl9lbmNvZGVDaG9pY2UoZGF0YSwgcmVwb3J0ZXIpO1xuICB9IGVsc2UgaWYgKHN0YXRlLmNvbnRhaW5zKSB7XG4gICAgY29udGVudCA9IHRoaXMuX2dldFVzZShzdGF0ZS5jb250YWlucywgcGFyZW50KS5fZW5jb2RlKGRhdGEsIHJlcG9ydGVyKTtcbiAgICBwcmltaXRpdmUgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHN0YXRlLmNoaWxkcmVuKSB7XG4gICAgY29udGVudCA9IHN0YXRlLmNoaWxkcmVuLm1hcChmdW5jdGlvbihjaGlsZCkge1xuICAgICAgaWYgKGNoaWxkLl9iYXNlU3RhdGUudGFnID09PSAnbnVsbF8nKVxuICAgICAgICByZXR1cm4gY2hpbGQuX2VuY29kZShudWxsLCByZXBvcnRlciwgZGF0YSk7XG5cbiAgICAgIGlmIChjaGlsZC5fYmFzZVN0YXRlLmtleSA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIHJlcG9ydGVyLmVycm9yKCdDaGlsZCBzaG91bGQgaGF2ZSBhIGtleScpO1xuICAgICAgdmFyIHByZXZLZXkgPSByZXBvcnRlci5lbnRlcktleShjaGlsZC5fYmFzZVN0YXRlLmtleSk7XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpXG4gICAgICAgIHJldHVybiByZXBvcnRlci5lcnJvcignQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0Jyk7XG5cbiAgICAgIHZhciByZXMgPSBjaGlsZC5fZW5jb2RlKGRhdGFbY2hpbGQuX2Jhc2VTdGF0ZS5rZXldLCByZXBvcnRlciwgZGF0YSk7XG4gICAgICByZXBvcnRlci5sZWF2ZUtleShwcmV2S2V5KTtcblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LCB0aGlzKS5maWx0ZXIoZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9KTtcbiAgICBjb250ZW50ID0gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihjb250ZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoc3RhdGUudGFnID09PSAnc2Vxb2YnIHx8IHN0YXRlLnRhZyA9PT0gJ3NldG9mJykge1xuICAgICAgLy8gVE9ETyhpbmR1dG55KTogdGhpcyBzaG91bGQgYmUgdGhyb3duIG9uIERTTCBsZXZlbFxuICAgICAgaWYgKCEoc3RhdGUuYXJncyAmJiBzdGF0ZS5hcmdzLmxlbmd0aCA9PT0gMSkpXG4gICAgICAgIHJldHVybiByZXBvcnRlci5lcnJvcignVG9vIG1hbnkgYXJncyBmb3IgOiAnICsgc3RhdGUudGFnKTtcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKVxuICAgICAgICByZXR1cm4gcmVwb3J0ZXIuZXJyb3IoJ3NlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXknKTtcblxuICAgICAgdmFyIGNoaWxkID0gdGhpcy5jbG9uZSgpO1xuICAgICAgY2hpbGQuX2Jhc2VTdGF0ZS5pbXBsaWNpdCA9IG51bGw7XG4gICAgICBjb250ZW50ID0gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihkYXRhLm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0VXNlKHN0YXRlLmFyZ3NbMF0sIGRhdGEpLl9lbmNvZGUoaXRlbSwgcmVwb3J0ZXIpO1xuICAgICAgfSwgY2hpbGQpKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLnVzZSAhPT0gbnVsbCkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5fZ2V0VXNlKHN0YXRlLnVzZSwgcGFyZW50KS5fZW5jb2RlKGRhdGEsIHJlcG9ydGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudCA9IHRoaXMuX2VuY29kZVByaW1pdGl2ZShzdGF0ZS50YWcsIGRhdGEpO1xuICAgICAgcHJpbWl0aXZlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBFbmNvZGUgZGF0YSBpdHNlbGZcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKCFzdGF0ZS5hbnkgJiYgc3RhdGUuY2hvaWNlID09PSBudWxsKSB7XG4gICAgdmFyIHRhZyA9IHN0YXRlLmltcGxpY2l0ICE9PSBudWxsID8gc3RhdGUuaW1wbGljaXQgOiBzdGF0ZS50YWc7XG4gICAgdmFyIGNscyA9IHN0YXRlLmltcGxpY2l0ID09PSBudWxsID8gJ3VuaXZlcnNhbCcgOiAnY29udGV4dCc7XG5cbiAgICBpZiAodGFnID09PSBudWxsKSB7XG4gICAgICBpZiAoc3RhdGUudXNlID09PSBudWxsKVxuICAgICAgICByZXBvcnRlci5lcnJvcignVGFnIGNvdWxkIGJlIG9tbWl0ZWQgb25seSBmb3IgLnVzZSgpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzdGF0ZS51c2UgPT09IG51bGwpXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuX2VuY29kZUNvbXBvc2l0ZSh0YWcsIHByaW1pdGl2ZSwgY2xzLCBjb250ZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBXcmFwIGluIGV4cGxpY2l0XG4gIGlmIChzdGF0ZS5leHBsaWNpdCAhPT0gbnVsbClcbiAgICByZXN1bHQgPSB0aGlzLl9lbmNvZGVDb21wb3NpdGUoc3RhdGUuZXhwbGljaXQsIGZhbHNlLCAnY29udGV4dCcsIHJlc3VsdCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbk5vZGUucHJvdG90eXBlLl9lbmNvZGVDaG9pY2UgPSBmdW5jdGlvbiBlbmNvZGVDaG9pY2UoZGF0YSwgcmVwb3J0ZXIpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIHZhciBub2RlID0gc3RhdGUuY2hvaWNlW2RhdGEudHlwZV07XG4gIGlmICghbm9kZSkge1xuICAgIGFzc2VydChcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGRhdGEudHlwZSArICcgbm90IGZvdW5kIGluICcgK1xuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc3RhdGUuY2hvaWNlKSkpO1xuICB9XG4gIHJldHVybiBub2RlLl9lbmNvZGUoZGF0YS52YWx1ZSwgcmVwb3J0ZXIpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZSA9IGZ1bmN0aW9uIGVuY29kZVByaW1pdGl2ZSh0YWcsIGRhdGEpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGlmICgvc3RyJC8udGVzdCh0YWcpKVxuICAgIHJldHVybiB0aGlzLl9lbmNvZGVTdHIoZGF0YSwgdGFnKTtcbiAgZWxzZSBpZiAodGFnID09PSAnb2JqaWQnICYmIHN0YXRlLmFyZ3MpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKGRhdGEsIHN0YXRlLnJldmVyc2VBcmdzWzBdLCBzdGF0ZS5hcmdzWzFdKTtcbiAgZWxzZSBpZiAodGFnID09PSAnb2JqaWQnKVxuICAgIHJldHVybiB0aGlzLl9lbmNvZGVPYmppZChkYXRhLCBudWxsLCBudWxsKTtcbiAgZWxzZSBpZiAodGFnID09PSAnZ2VudGltZScgfHwgdGFnID09PSAndXRjdGltZScpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoZGF0YSwgdGFnKTtcbiAgZWxzZSBpZiAodGFnID09PSAnbnVsbF8nKVxuICAgIHJldHVybiB0aGlzLl9lbmNvZGVOdWxsKCk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ2ludCcgfHwgdGFnID09PSAnZW51bScpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZUludChkYXRhLCBzdGF0ZS5hcmdzICYmIHN0YXRlLnJldmVyc2VBcmdzWzBdKTtcbiAgZWxzZSBpZiAodGFnID09PSAnYm9vbCcpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZUJvb2woZGF0YSk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ29iakRlc2MnKVxuICAgIHJldHVybiB0aGlzLl9lbmNvZGVTdHIoZGF0YSwgdGFnKTtcbiAgZWxzZVxuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdGFnOiAnICsgdGFnKTtcbn07XG5cbk5vZGUucHJvdG90eXBlLl9pc051bXN0ciA9IGZ1bmN0aW9uIGlzTnVtc3RyKHN0cikge1xuICByZXR1cm4gL15bMC05IF0qJC8udGVzdChzdHIpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2lzUHJpbnRzdHIgPSBmdW5jdGlvbiBpc1ByaW50c3RyKHN0cikge1xuICByZXR1cm4gL15bQS1aYS16MC05ICdcXChcXClcXCssXFwtXFwuXFwvOj1cXD9dKiQvLnRlc3Qoc3RyKTtcbn07XG4iLCJ2YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG5mdW5jdGlvbiBSZXBvcnRlcihvcHRpb25zKSB7XG4gIHRoaXMuX3JlcG9ydGVyU3RhdGUgPSB7XG4gICAgb2JqOiBudWxsLFxuICAgIHBhdGg6IFtdLFxuICAgIG9wdGlvbnM6IG9wdGlvbnMgfHwge30sXG4gICAgZXJyb3JzOiBbXVxuICB9O1xufVxuZXhwb3J0cy5SZXBvcnRlciA9IFJlcG9ydGVyO1xuXG5SZXBvcnRlci5wcm90b3R5cGUuaXNFcnJvciA9IGZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiBSZXBvcnRlckVycm9yO1xufTtcblxuUmVwb3J0ZXIucHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbiBzYXZlKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZXBvcnRlclN0YXRlO1xuXG4gIHJldHVybiB7IG9iajogc3RhdGUub2JqLCBwYXRoTGVuOiBzdGF0ZS5wYXRoLmxlbmd0aCB9O1xufTtcblxuUmVwb3J0ZXIucHJvdG90eXBlLnJlc3RvcmUgPSBmdW5jdGlvbiByZXN0b3JlKGRhdGEpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVwb3J0ZXJTdGF0ZTtcblxuICBzdGF0ZS5vYmogPSBkYXRhLm9iajtcbiAgc3RhdGUucGF0aCA9IHN0YXRlLnBhdGguc2xpY2UoMCwgZGF0YS5wYXRoTGVuKTtcbn07XG5cblJlcG9ydGVyLnByb3RvdHlwZS5lbnRlcktleSA9IGZ1bmN0aW9uIGVudGVyS2V5KGtleSkge1xuICByZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2goa2V5KTtcbn07XG5cblJlcG9ydGVyLnByb3RvdHlwZS5leGl0S2V5ID0gZnVuY3Rpb24gZXhpdEtleShpbmRleCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZXBvcnRlclN0YXRlO1xuXG4gIHN0YXRlLnBhdGggPSBzdGF0ZS5wYXRoLnNsaWNlKDAsIGluZGV4IC0gMSk7XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUubGVhdmVLZXkgPSBmdW5jdGlvbiBsZWF2ZUtleShpbmRleCwga2V5LCB2YWx1ZSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZXBvcnRlclN0YXRlO1xuXG4gIHRoaXMuZXhpdEtleShpbmRleCk7XG4gIGlmIChzdGF0ZS5vYmogIT09IG51bGwpXG4gICAgc3RhdGUub2JqW2tleV0gPSB2YWx1ZTtcbn07XG5cblJlcG9ydGVyLnByb3RvdHlwZS5wYXRoID0gZnVuY3Rpb24gcGF0aCgpIHtcbiAgcmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKCcvJyk7XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUuZW50ZXJPYmplY3QgPSBmdW5jdGlvbiBlbnRlck9iamVjdCgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVwb3J0ZXJTdGF0ZTtcblxuICB2YXIgcHJldiA9IHN0YXRlLm9iajtcbiAgc3RhdGUub2JqID0ge307XG4gIHJldHVybiBwcmV2O1xufTtcblxuUmVwb3J0ZXIucHJvdG90eXBlLmxlYXZlT2JqZWN0ID0gZnVuY3Rpb24gbGVhdmVPYmplY3QocHJldikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZXBvcnRlclN0YXRlO1xuXG4gIHZhciBub3cgPSBzdGF0ZS5vYmo7XG4gIHN0YXRlLm9iaiA9IHByZXY7XG4gIHJldHVybiBub3c7XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiBlcnJvcihtc2cpIHtcbiAgdmFyIGVycjtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVwb3J0ZXJTdGF0ZTtcblxuICB2YXIgaW5oZXJpdGVkID0gbXNnIGluc3RhbmNlb2YgUmVwb3J0ZXJFcnJvcjtcbiAgaWYgKGluaGVyaXRlZCkge1xuICAgIGVyciA9IG1zZztcbiAgfSBlbHNlIHtcbiAgICBlcnIgPSBuZXcgUmVwb3J0ZXJFcnJvcihzdGF0ZS5wYXRoLm1hcChmdW5jdGlvbihlbGVtKSB7XG4gICAgICByZXR1cm4gJ1snICsgSlNPTi5zdHJpbmdpZnkoZWxlbSkgKyAnXSc7XG4gICAgfSkuam9pbignJyksIG1zZy5tZXNzYWdlIHx8IG1zZywgbXNnLnN0YWNrKTtcbiAgfVxuXG4gIGlmICghc3RhdGUub3B0aW9ucy5wYXJ0aWFsKVxuICAgIHRocm93IGVycjtcblxuICBpZiAoIWluaGVyaXRlZClcbiAgICBzdGF0ZS5lcnJvcnMucHVzaChlcnIpO1xuXG4gIHJldHVybiBlcnI7XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUud3JhcFJlc3VsdCA9IGZ1bmN0aW9uIHdyYXBSZXN1bHQocmVzdWx0KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlcG9ydGVyU3RhdGU7XG4gIGlmICghc3RhdGUub3B0aW9ucy5wYXJ0aWFsKVxuICAgIHJldHVybiByZXN1bHQ7XG5cbiAgcmV0dXJuIHtcbiAgICByZXN1bHQ6IHRoaXMuaXNFcnJvcihyZXN1bHQpID8gbnVsbCA6IHJlc3VsdCxcbiAgICBlcnJvcnM6IHN0YXRlLmVycm9yc1xuICB9O1xufTtcblxuZnVuY3Rpb24gUmVwb3J0ZXJFcnJvcihwYXRoLCBtc2cpIHtcbiAgdGhpcy5wYXRoID0gcGF0aDtcbiAgdGhpcy5yZXRocm93KG1zZyk7XG59O1xuaW5oZXJpdHMoUmVwb3J0ZXJFcnJvciwgRXJyb3IpO1xuXG5SZXBvcnRlckVycm9yLnByb3RvdHlwZS5yZXRocm93ID0gZnVuY3Rpb24gcmV0aHJvdyhtc2cpIHtcbiAgdGhpcy5tZXNzYWdlID0gbXNnICsgJyBhdDogJyArICh0aGlzLnBhdGggfHwgJyhzaGFsbG93KScpO1xuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVwb3J0ZXJFcnJvcik7XG5cbiAgaWYgKCF0aGlzLnN0YWNrKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIElFIG9ubHkgYWRkcyBzdGFjayB3aGVuIHRocm93blxuICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMubWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5zdGFjayA9IGUuc3RhY2s7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufTtcbiIsInZhciBjb25zdGFudHMgPSByZXF1aXJlKCcuLi9jb25zdGFudHMnKTtcblxuZXhwb3J0cy50YWdDbGFzcyA9IHtcbiAgMDogJ3VuaXZlcnNhbCcsXG4gIDE6ICdhcHBsaWNhdGlvbicsXG4gIDI6ICdjb250ZXh0JyxcbiAgMzogJ3ByaXZhdGUnXG59O1xuZXhwb3J0cy50YWdDbGFzc0J5TmFtZSA9IGNvbnN0YW50cy5fcmV2ZXJzZShleHBvcnRzLnRhZ0NsYXNzKTtcblxuZXhwb3J0cy50YWcgPSB7XG4gIDB4MDA6ICdlbmQnLFxuICAweDAxOiAnYm9vbCcsXG4gIDB4MDI6ICdpbnQnLFxuICAweDAzOiAnYml0c3RyJyxcbiAgMHgwNDogJ29jdHN0cicsXG4gIDB4MDU6ICdudWxsXycsXG4gIDB4MDY6ICdvYmppZCcsXG4gIDB4MDc6ICdvYmpEZXNjJyxcbiAgMHgwODogJ2V4dGVybmFsJyxcbiAgMHgwOTogJ3JlYWwnLFxuICAweDBhOiAnZW51bScsXG4gIDB4MGI6ICdlbWJlZCcsXG4gIDB4MGM6ICd1dGY4c3RyJyxcbiAgMHgwZDogJ3JlbGF0aXZlT2lkJyxcbiAgMHgxMDogJ3NlcScsXG4gIDB4MTE6ICdzZXQnLFxuICAweDEyOiAnbnVtc3RyJyxcbiAgMHgxMzogJ3ByaW50c3RyJyxcbiAgMHgxNDogJ3Q2MXN0cicsXG4gIDB4MTU6ICd2aWRlb3N0cicsXG4gIDB4MTY6ICdpYTVzdHInLFxuICAweDE3OiAndXRjdGltZScsXG4gIDB4MTg6ICdnZW50aW1lJyxcbiAgMHgxOTogJ2dyYXBoc3RyJyxcbiAgMHgxYTogJ2lzbzY0NnN0cicsXG4gIDB4MWI6ICdnZW5zdHInLFxuICAweDFjOiAndW5pc3RyJyxcbiAgMHgxZDogJ2NoYXJzdHInLFxuICAweDFlOiAnYm1wc3RyJ1xufTtcbmV4cG9ydHMudGFnQnlOYW1lID0gY29uc3RhbnRzLl9yZXZlcnNlKGV4cG9ydHMudGFnKTtcbiIsInZhciBjb25zdGFudHMgPSBleHBvcnRzO1xuXG4vLyBIZWxwZXJcbmNvbnN0YW50cy5fcmV2ZXJzZSA9IGZ1bmN0aW9uIHJldmVyc2UobWFwKSB7XG4gIHZhciByZXMgPSB7fTtcblxuICBPYmplY3Qua2V5cyhtYXApLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgLy8gQ29udmVydCBrZXkgdG8gaW50ZWdlciBpZiBpdCBpcyBzdHJpbmdpZmllZFxuICAgIGlmICgoa2V5IHwgMCkgPT0ga2V5KVxuICAgICAga2V5ID0ga2V5IHwgMDtcblxuICAgIHZhciB2YWx1ZSA9IG1hcFtrZXldO1xuICAgIHJlc1t2YWx1ZV0gPSBrZXk7XG4gIH0pO1xuXG4gIHJldHVybiByZXM7XG59O1xuXG5jb25zdGFudHMuZGVyID0gcmVxdWlyZSgnLi9kZXInKTtcbiIsInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbnZhciBhc24xID0gcmVxdWlyZSgnLi4vLi4vYXNuMScpO1xudmFyIGJhc2UgPSBhc24xLmJhc2U7XG52YXIgYmlnbnVtID0gYXNuMS5iaWdudW07XG5cbi8vIEltcG9ydCBERVIgY29uc3RhbnRzXG52YXIgZGVyID0gYXNuMS5jb25zdGFudHMuZGVyO1xuXG5mdW5jdGlvbiBERVJEZWNvZGVyKGVudGl0eSkge1xuICB0aGlzLmVuYyA9ICdkZXInO1xuICB0aGlzLm5hbWUgPSBlbnRpdHkubmFtZTtcbiAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7XG5cbiAgLy8gQ29uc3RydWN0IGJhc2UgdHJlZVxuICB0aGlzLnRyZWUgPSBuZXcgREVSTm9kZSgpO1xuICB0aGlzLnRyZWUuX2luaXQoZW50aXR5LmJvZHkpO1xufTtcbm1vZHVsZS5leHBvcnRzID0gREVSRGVjb2RlcjtcblxuREVSRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKGRhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIGJhc2UuRGVjb2RlckJ1ZmZlcikpXG4gICAgZGF0YSA9IG5ldyBiYXNlLkRlY29kZXJCdWZmZXIoZGF0YSwgb3B0aW9ucyk7XG5cbiAgcmV0dXJuIHRoaXMudHJlZS5fZGVjb2RlKGRhdGEsIG9wdGlvbnMpO1xufTtcblxuLy8gVHJlZSBtZXRob2RzXG5cbmZ1bmN0aW9uIERFUk5vZGUocGFyZW50KSB7XG4gIGJhc2UuTm9kZS5jYWxsKHRoaXMsICdkZXInLCBwYXJlbnQpO1xufVxuaW5oZXJpdHMoREVSTm9kZSwgYmFzZS5Ob2RlKTtcblxuREVSTm9kZS5wcm90b3R5cGUuX3BlZWtUYWcgPSBmdW5jdGlvbiBwZWVrVGFnKGJ1ZmZlciwgdGFnLCBhbnkpIHtcbiAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBzdGF0ZSA9IGJ1ZmZlci5zYXZlKCk7XG4gIHZhciBkZWNvZGVkVGFnID0gZGVyRGVjb2RlVGFnKGJ1ZmZlciwgJ0ZhaWxlZCB0byBwZWVrIHRhZzogXCInICsgdGFnICsgJ1wiJyk7XG4gIGlmIChidWZmZXIuaXNFcnJvcihkZWNvZGVkVGFnKSlcbiAgICByZXR1cm4gZGVjb2RlZFRhZztcblxuICBidWZmZXIucmVzdG9yZShzdGF0ZSk7XG5cbiAgcmV0dXJuIGRlY29kZWRUYWcudGFnID09PSB0YWcgfHwgZGVjb2RlZFRhZy50YWdTdHIgPT09IHRhZyB8fFxuICAgIChkZWNvZGVkVGFnLnRhZ1N0ciArICdvZicpID09PSB0YWcgfHwgYW55O1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZVRhZyA9IGZ1bmN0aW9uIGRlY29kZVRhZyhidWZmZXIsIHRhZywgYW55KSB7XG4gIHZhciBkZWNvZGVkVGFnID0gZGVyRGVjb2RlVGFnKGJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBkZWNvZGUgdGFnIG9mIFwiJyArIHRhZyArICdcIicpO1xuICBpZiAoYnVmZmVyLmlzRXJyb3IoZGVjb2RlZFRhZykpXG4gICAgcmV0dXJuIGRlY29kZWRUYWc7XG5cbiAgdmFyIGxlbiA9IGRlckRlY29kZUxlbihidWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZFRhZy5wcmltaXRpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBnZXQgbGVuZ3RoIG9mIFwiJyArIHRhZyArICdcIicpO1xuXG4gIC8vIEZhaWx1cmVcbiAgaWYgKGJ1ZmZlci5pc0Vycm9yKGxlbikpXG4gICAgcmV0dXJuIGxlbjtcblxuICBpZiAoIWFueSAmJlxuICAgICAgZGVjb2RlZFRhZy50YWcgIT09IHRhZyAmJlxuICAgICAgZGVjb2RlZFRhZy50YWdTdHIgIT09IHRhZyAmJlxuICAgICAgZGVjb2RlZFRhZy50YWdTdHIgKyAnb2YnICE9PSB0YWcpIHtcbiAgICByZXR1cm4gYnVmZmVyLmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiBcIicgKyB0YWcgKyAnXCInKTtcbiAgfVxuXG4gIGlmIChkZWNvZGVkVGFnLnByaW1pdGl2ZSB8fCBsZW4gIT09IG51bGwpXG4gICAgcmV0dXJuIGJ1ZmZlci5za2lwKGxlbiwgJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiBcIicgKyB0YWcgKyAnXCInKTtcblxuICAvLyBJbmRlZmluaXRlIGxlbmd0aC4uLiBmaW5kIEVORCB0YWdcbiAgdmFyIHN0YXRlID0gYnVmZmVyLnNhdmUoKTtcbiAgdmFyIHJlcyA9IHRoaXMuX3NraXBVbnRpbEVuZChcbiAgICAgIGJ1ZmZlcixcbiAgICAgICdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiBcIicgKyB0aGlzLnRhZyArICdcIicpO1xuICBpZiAoYnVmZmVyLmlzRXJyb3IocmVzKSlcbiAgICByZXR1cm4gcmVzO1xuXG4gIGxlbiA9IGJ1ZmZlci5vZmZzZXQgLSBzdGF0ZS5vZmZzZXQ7XG4gIGJ1ZmZlci5yZXN0b3JlKHN0YXRlKTtcbiAgcmV0dXJuIGJ1ZmZlci5za2lwKGxlbiwgJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiBcIicgKyB0YWcgKyAnXCInKTtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9za2lwVW50aWxFbmQgPSBmdW5jdGlvbiBza2lwVW50aWxFbmQoYnVmZmVyLCBmYWlsKSB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIHRhZyA9IGRlckRlY29kZVRhZyhidWZmZXIsIGZhaWwpO1xuICAgIGlmIChidWZmZXIuaXNFcnJvcih0YWcpKVxuICAgICAgcmV0dXJuIHRhZztcbiAgICB2YXIgbGVuID0gZGVyRGVjb2RlTGVuKGJ1ZmZlciwgdGFnLnByaW1pdGl2ZSwgZmFpbCk7XG4gICAgaWYgKGJ1ZmZlci5pc0Vycm9yKGxlbikpXG4gICAgICByZXR1cm4gbGVuO1xuXG4gICAgdmFyIHJlcztcbiAgICBpZiAodGFnLnByaW1pdGl2ZSB8fCBsZW4gIT09IG51bGwpXG4gICAgICByZXMgPSBidWZmZXIuc2tpcChsZW4pXG4gICAgZWxzZVxuICAgICAgcmVzID0gdGhpcy5fc2tpcFVudGlsRW5kKGJ1ZmZlciwgZmFpbCk7XG5cbiAgICAvLyBGYWlsdXJlXG4gICAgaWYgKGJ1ZmZlci5pc0Vycm9yKHJlcykpXG4gICAgICByZXR1cm4gcmVzO1xuXG4gICAgaWYgKHRhZy50YWdTdHIgPT09ICdlbmQnKVxuICAgICAgYnJlYWs7XG4gIH1cbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9kZWNvZGVMaXN0ID0gZnVuY3Rpb24gZGVjb2RlTGlzdChidWZmZXIsIHRhZywgZGVjb2RlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgd2hpbGUgKCFidWZmZXIuaXNFbXB0eSgpKSB7XG4gICAgdmFyIHBvc3NpYmxlRW5kID0gdGhpcy5fcGVla1RhZyhidWZmZXIsICdlbmQnKTtcbiAgICBpZiAoYnVmZmVyLmlzRXJyb3IocG9zc2libGVFbmQpKVxuICAgICAgcmV0dXJuIHBvc3NpYmxlRW5kO1xuXG4gICAgdmFyIHJlcyA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlciwgJ2RlcicsIG9wdGlvbnMpO1xuICAgIGlmIChidWZmZXIuaXNFcnJvcihyZXMpICYmIHBvc3NpYmxlRW5kKVxuICAgICAgYnJlYWs7XG4gICAgcmVzdWx0LnB1c2gocmVzKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZVN0ciA9IGZ1bmN0aW9uIGRlY29kZVN0cihidWZmZXIsIHRhZykge1xuICBpZiAodGFnID09PSAnYml0c3RyJykge1xuICAgIHZhciB1bnVzZWQgPSBidWZmZXIucmVhZFVJbnQ4KCk7XG4gICAgaWYgKGJ1ZmZlci5pc0Vycm9yKHVudXNlZCkpXG4gICAgICByZXR1cm4gdW51c2VkO1xuICAgIHJldHVybiB7IHVudXNlZDogdW51c2VkLCBkYXRhOiBidWZmZXIucmF3KCkgfTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdibXBzdHInKSB7XG4gICAgdmFyIHJhdyA9IGJ1ZmZlci5yYXcoKTtcbiAgICBpZiAocmF3Lmxlbmd0aCAlIDIgPT09IDEpXG4gICAgICByZXR1cm4gYnVmZmVyLmVycm9yKCdEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogYm1wc3RyIGxlbmd0aCBtaXNtYXRjaCcpO1xuXG4gICAgdmFyIHN0ciA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3Lmxlbmd0aCAvIDI7IGkrKykge1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUocmF3LnJlYWRVSW50MTZCRShpICogMikpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ251bXN0cicpIHtcbiAgICB2YXIgbnVtc3RyID0gYnVmZmVyLnJhdygpLnRvU3RyaW5nKCdhc2NpaScpO1xuICAgIGlmICghdGhpcy5faXNOdW1zdHIobnVtc3RyKSkge1xuICAgICAgcmV0dXJuIGJ1ZmZlci5lcnJvcignRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bXN0cjtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdvY3RzdHInKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5yYXcoKTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdvYmpEZXNjJykge1xuICAgIHJldHVybiBidWZmZXIucmF3KCk7XG4gIH0gZWxzZSBpZiAodGFnID09PSAncHJpbnRzdHInKSB7XG4gICAgdmFyIHByaW50c3RyID0gYnVmZmVyLnJhdygpLnRvU3RyaW5nKCdhc2NpaScpO1xuICAgIGlmICghdGhpcy5faXNQcmludHN0cihwcmludHN0cikpIHtcbiAgICAgIHJldHVybiBidWZmZXIuZXJyb3IoJ0RlY29kaW5nIG9mIHN0cmluZyB0eXBlOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ByaW50c3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gICAgcmV0dXJuIHByaW50c3RyO1xuICB9IGVsc2UgaWYgKC9zdHIkLy50ZXN0KHRhZykpIHtcbiAgICByZXR1cm4gYnVmZmVyLnJhdygpLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5lcnJvcignRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICcgKyB0YWcgKyAnIHVuc3VwcG9ydGVkJyk7XG4gIH1cbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9kZWNvZGVPYmppZCA9IGZ1bmN0aW9uIGRlY29kZU9iamlkKGJ1ZmZlciwgdmFsdWVzLCByZWxhdGl2ZSkge1xuICB2YXIgcmVzdWx0O1xuICB2YXIgaWRlbnRpZmllcnMgPSBbXTtcbiAgdmFyIGlkZW50ID0gMDtcbiAgd2hpbGUgKCFidWZmZXIuaXNFbXB0eSgpKSB7XG4gICAgdmFyIHN1YmlkZW50ID0gYnVmZmVyLnJlYWRVSW50OCgpO1xuICAgIGlkZW50IDw8PSA3O1xuICAgIGlkZW50IHw9IHN1YmlkZW50ICYgMHg3ZjtcbiAgICBpZiAoKHN1YmlkZW50ICYgMHg4MCkgPT09IDApIHtcbiAgICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnQpO1xuICAgICAgaWRlbnQgPSAwO1xuICAgIH1cbiAgfVxuICBpZiAoc3ViaWRlbnQgJiAweDgwKVxuICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnQpO1xuXG4gIHZhciBmaXJzdCA9IChpZGVudGlmaWVyc1swXSAvIDQwKSB8IDA7XG4gIHZhciBzZWNvbmQgPSBpZGVudGlmaWVyc1swXSAlIDQwO1xuXG4gIGlmIChyZWxhdGl2ZSlcbiAgICByZXN1bHQgPSBpZGVudGlmaWVycztcbiAgZWxzZVxuICAgIHJlc3VsdCA9IFtmaXJzdCwgc2Vjb25kXS5jb25jYXQoaWRlbnRpZmllcnMuc2xpY2UoMSkpO1xuXG4gIGlmICh2YWx1ZXMpIHtcbiAgICB2YXIgdG1wID0gdmFsdWVzW3Jlc3VsdC5qb2luKCcgJyldO1xuICAgIGlmICh0bXAgPT09IHVuZGVmaW5lZClcbiAgICAgIHRtcCA9IHZhbHVlc1tyZXN1bHQuam9pbignLicpXTtcbiAgICBpZiAodG1wICE9PSB1bmRlZmluZWQpXG4gICAgICByZXN1bHQgPSB0bXA7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZVRpbWUgPSBmdW5jdGlvbiBkZWNvZGVUaW1lKGJ1ZmZlciwgdGFnKSB7XG4gIHZhciBzdHIgPSBidWZmZXIucmF3KCkudG9TdHJpbmcoKTtcbiAgaWYgKHRhZyA9PT0gJ2dlbnRpbWUnKSB7XG4gICAgdmFyIHllYXIgPSBzdHIuc2xpY2UoMCwgNCkgfCAwO1xuICAgIHZhciBtb24gPSBzdHIuc2xpY2UoNCwgNikgfCAwO1xuICAgIHZhciBkYXkgPSBzdHIuc2xpY2UoNiwgOCkgfCAwO1xuICAgIHZhciBob3VyID0gc3RyLnNsaWNlKDgsIDEwKSB8IDA7XG4gICAgdmFyIG1pbiA9IHN0ci5zbGljZSgxMCwgMTIpIHwgMDtcbiAgICB2YXIgc2VjID0gc3RyLnNsaWNlKDEyLCAxNCkgfCAwO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ3V0Y3RpbWUnKSB7XG4gICAgdmFyIHllYXIgPSBzdHIuc2xpY2UoMCwgMikgfCAwO1xuICAgIHZhciBtb24gPSBzdHIuc2xpY2UoMiwgNCkgfCAwO1xuICAgIHZhciBkYXkgPSBzdHIuc2xpY2UoNCwgNikgfCAwO1xuICAgIHZhciBob3VyID0gc3RyLnNsaWNlKDYsIDgpIHwgMDtcbiAgICB2YXIgbWluID0gc3RyLnNsaWNlKDgsIDEwKSB8IDA7XG4gICAgdmFyIHNlYyA9IHN0ci5zbGljZSgxMCwgMTIpIHwgMDtcbiAgICBpZiAoeWVhciA8IDcwKVxuICAgICAgeWVhciA9IDIwMDAgKyB5ZWFyO1xuICAgIGVsc2VcbiAgICAgIHllYXIgPSAxOTAwICsgeWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYnVmZmVyLmVycm9yKCdEZWNvZGluZyAnICsgdGFnICsgJyB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Jyk7XG4gIH1cblxuICByZXR1cm4gRGF0ZS5VVEMoeWVhciwgbW9uIC0gMSwgZGF5LCBob3VyLCBtaW4sIHNlYywgMCk7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZGVjb2RlTnVsbCA9IGZ1bmN0aW9uIGRlY29kZU51bGwoYnVmZmVyKSB7XG4gIHJldHVybiBudWxsO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZUJvb2wgPSBmdW5jdGlvbiBkZWNvZGVCb29sKGJ1ZmZlcikge1xuICB2YXIgcmVzID0gYnVmZmVyLnJlYWRVSW50OCgpO1xuICBpZiAoYnVmZmVyLmlzRXJyb3IocmVzKSlcbiAgICByZXR1cm4gcmVzO1xuICBlbHNlXG4gICAgcmV0dXJuIHJlcyAhPT0gMDtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9kZWNvZGVJbnQgPSBmdW5jdGlvbiBkZWNvZGVJbnQoYnVmZmVyLCB2YWx1ZXMpIHtcbiAgLy8gQmlnaW50LCByZXR1cm4gYXMgaXQgaXMgKGFzc3VtZSBiaWcgZW5kaWFuKVxuICB2YXIgcmF3ID0gYnVmZmVyLnJhdygpO1xuICB2YXIgcmVzID0gbmV3IGJpZ251bShyYXcpO1xuXG4gIGlmICh2YWx1ZXMpXG4gICAgcmVzID0gdmFsdWVzW3Jlcy50b1N0cmluZygxMCldIHx8IHJlcztcblxuICByZXR1cm4gcmVzO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX3VzZSA9IGZ1bmN0aW9uIHVzZShlbnRpdHksIG9iaikge1xuICBpZiAodHlwZW9mIGVudGl0eSA9PT0gJ2Z1bmN0aW9uJylcbiAgICBlbnRpdHkgPSBlbnRpdHkob2JqKTtcbiAgcmV0dXJuIGVudGl0eS5fZ2V0RGVjb2RlcignZGVyJykudHJlZTtcbn07XG5cbi8vIFV0aWxpdHkgbWV0aG9kc1xuXG5mdW5jdGlvbiBkZXJEZWNvZGVUYWcoYnVmLCBmYWlsKSB7XG4gIHZhciB0YWcgPSBidWYucmVhZFVJbnQ4KGZhaWwpO1xuICBpZiAoYnVmLmlzRXJyb3IodGFnKSlcbiAgICByZXR1cm4gdGFnO1xuXG4gIHZhciBjbHMgPSBkZXIudGFnQ2xhc3NbdGFnID4+IDZdO1xuICB2YXIgcHJpbWl0aXZlID0gKHRhZyAmIDB4MjApID09PSAwO1xuXG4gIC8vIE11bHRpLW9jdGV0IHRhZyAtIGxvYWRcbiAgaWYgKCh0YWcgJiAweDFmKSA9PT0gMHgxZikge1xuICAgIHZhciBvY3QgPSB0YWc7XG4gICAgdGFnID0gMDtcbiAgICB3aGlsZSAoKG9jdCAmIDB4ODApID09PSAweDgwKSB7XG4gICAgICBvY3QgPSBidWYucmVhZFVJbnQ4KGZhaWwpO1xuICAgICAgaWYgKGJ1Zi5pc0Vycm9yKG9jdCkpXG4gICAgICAgIHJldHVybiBvY3Q7XG5cbiAgICAgIHRhZyA8PD0gNztcbiAgICAgIHRhZyB8PSBvY3QgJiAweDdmO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0YWcgJj0gMHgxZjtcbiAgfVxuICB2YXIgdGFnU3RyID0gZGVyLnRhZ1t0YWddO1xuXG4gIHJldHVybiB7XG4gICAgY2xzOiBjbHMsXG4gICAgcHJpbWl0aXZlOiBwcmltaXRpdmUsXG4gICAgdGFnOiB0YWcsXG4gICAgdGFnU3RyOiB0YWdTdHJcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGVyRGVjb2RlTGVuKGJ1ZiwgcHJpbWl0aXZlLCBmYWlsKSB7XG4gIHZhciBsZW4gPSBidWYucmVhZFVJbnQ4KGZhaWwpO1xuICBpZiAoYnVmLmlzRXJyb3IobGVuKSlcbiAgICByZXR1cm4gbGVuO1xuXG4gIC8vIEluZGVmaW5pdGUgZm9ybVxuICBpZiAoIXByaW1pdGl2ZSAmJiBsZW4gPT09IDB4ODApXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgLy8gRGVmaW5pdGUgZm9ybVxuICBpZiAoKGxlbiAmIDB4ODApID09PSAwKSB7XG4gICAgLy8gU2hvcnQgZm9ybVxuICAgIHJldHVybiBsZW47XG4gIH1cblxuICAvLyBMb25nIGZvcm1cbiAgdmFyIG51bSA9IGxlbiAmIDB4N2Y7XG4gIGlmIChudW0gPiA0KVxuICAgIHJldHVybiBidWYuZXJyb3IoJ2xlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmcnKTtcblxuICBsZW4gPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG51bTsgaSsrKSB7XG4gICAgbGVuIDw8PSA4O1xuICAgIHZhciBqID0gYnVmLnJlYWRVSW50OChmYWlsKTtcbiAgICBpZiAoYnVmLmlzRXJyb3IoaikpXG4gICAgICByZXR1cm4gajtcbiAgICBsZW4gfD0gajtcbiAgfVxuXG4gIHJldHVybiBsZW47XG59XG4iLCJ2YXIgZGVjb2RlcnMgPSBleHBvcnRzO1xuXG5kZWNvZGVycy5kZXIgPSByZXF1aXJlKCcuL2RlcicpO1xuZGVjb2RlcnMucGVtID0gcmVxdWlyZSgnLi9wZW0nKTtcbiIsInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuXG52YXIgREVSRGVjb2RlciA9IHJlcXVpcmUoJy4vZGVyJyk7XG5cbmZ1bmN0aW9uIFBFTURlY29kZXIoZW50aXR5KSB7XG4gIERFUkRlY29kZXIuY2FsbCh0aGlzLCBlbnRpdHkpO1xuICB0aGlzLmVuYyA9ICdwZW0nO1xufTtcbmluaGVyaXRzKFBFTURlY29kZXIsIERFUkRlY29kZXIpO1xubW9kdWxlLmV4cG9ydHMgPSBQRU1EZWNvZGVyO1xuXG5QRU1EZWNvZGVyLnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoZGF0YSwgb3B0aW9ucykge1xuICB2YXIgbGluZXMgPSBkYXRhLnRvU3RyaW5nKCkuc3BsaXQoL1tcXHJcXG5dKy9nKTtcblxuICB2YXIgbGFiZWwgPSBvcHRpb25zLmxhYmVsLnRvVXBwZXJDYXNlKCk7XG5cbiAgdmFyIHJlID0gL14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvO1xuICB2YXIgc3RhcnQgPSAtMTtcbiAgdmFyIGVuZCA9IC0xO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG1hdGNoID0gbGluZXNbaV0ubWF0Y2gocmUpO1xuICAgIGlmIChtYXRjaCA9PT0gbnVsbClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgaWYgKG1hdGNoWzJdICE9PSBsYWJlbClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgaWYgKHN0YXJ0ID09PSAtMSkge1xuICAgICAgaWYgKG1hdGNoWzFdICE9PSAnQkVHSU4nKVxuICAgICAgICBicmVhaztcbiAgICAgIHN0YXJ0ID0gaTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG1hdGNoWzFdICE9PSAnRU5EJylcbiAgICAgICAgYnJlYWs7XG4gICAgICBlbmQgPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChzdGFydCA9PT0gLTEgfHwgZW5kID09PSAtMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BFTSBzZWN0aW9uIG5vdCBmb3VuZCBmb3I6ICcgKyBsYWJlbCk7XG5cbiAgdmFyIGJhc2U2NCA9IGxpbmVzLnNsaWNlKHN0YXJ0ICsgMSwgZW5kKS5qb2luKCcnKTtcbiAgLy8gUmVtb3ZlIGV4Y2Vzc2l2ZSBzeW1ib2xzXG4gIGJhc2U2NC5yZXBsYWNlKC9bXmEtejAtOVxcK1xcLz1dKy9naSwgJycpO1xuXG4gIHZhciBpbnB1dCA9IG5ldyBCdWZmZXIoYmFzZTY0LCAnYmFzZTY0Jyk7XG4gIHJldHVybiBERVJEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLCBpbnB1dCwgb3B0aW9ucyk7XG59O1xuIiwidmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG5cbnZhciBhc24xID0gcmVxdWlyZSgnLi4vLi4vYXNuMScpO1xudmFyIGJhc2UgPSBhc24xLmJhc2U7XG5cbi8vIEltcG9ydCBERVIgY29uc3RhbnRzXG52YXIgZGVyID0gYXNuMS5jb25zdGFudHMuZGVyO1xuXG5mdW5jdGlvbiBERVJFbmNvZGVyKGVudGl0eSkge1xuICB0aGlzLmVuYyA9ICdkZXInO1xuICB0aGlzLm5hbWUgPSBlbnRpdHkubmFtZTtcbiAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7XG5cbiAgLy8gQ29uc3RydWN0IGJhc2UgdHJlZVxuICB0aGlzLnRyZWUgPSBuZXcgREVSTm9kZSgpO1xuICB0aGlzLnRyZWUuX2luaXQoZW50aXR5LmJvZHkpO1xufTtcbm1vZHVsZS5leHBvcnRzID0gREVSRW5jb2RlcjtcblxuREVSRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKGRhdGEsIHJlcG9ydGVyKSB7XG4gIHJldHVybiB0aGlzLnRyZWUuX2VuY29kZShkYXRhLCByZXBvcnRlcikuam9pbigpO1xufTtcblxuLy8gVHJlZSBtZXRob2RzXG5cbmZ1bmN0aW9uIERFUk5vZGUocGFyZW50KSB7XG4gIGJhc2UuTm9kZS5jYWxsKHRoaXMsICdkZXInLCBwYXJlbnQpO1xufVxuaW5oZXJpdHMoREVSTm9kZSwgYmFzZS5Ob2RlKTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZSA9IGZ1bmN0aW9uIGVuY29kZUNvbXBvc2l0ZSh0YWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50KSB7XG4gIHZhciBlbmNvZGVkVGFnID0gZW5jb2RlVGFnKHRhZywgcHJpbWl0aXZlLCBjbHMsIHRoaXMucmVwb3J0ZXIpO1xuXG4gIC8vIFNob3J0IGZvcm1cbiAgaWYgKGNvbnRlbnQubGVuZ3RoIDwgMHg4MCkge1xuICAgIHZhciBoZWFkZXIgPSBuZXcgQnVmZmVyKDIpO1xuICAgIGhlYWRlclswXSA9IGVuY29kZWRUYWc7XG4gICAgaGVhZGVyWzFdID0gY29udGVudC5sZW5ndGg7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWyBoZWFkZXIsIGNvbnRlbnQgXSk7XG4gIH1cblxuICAvLyBMb25nIGZvcm1cbiAgLy8gQ291bnQgb2N0ZXRzIHJlcXVpcmVkIHRvIHN0b3JlIGxlbmd0aFxuICB2YXIgbGVuT2N0ZXRzID0gMTtcbiAgZm9yICh2YXIgaSA9IGNvbnRlbnQubGVuZ3RoOyBpID49IDB4MTAwOyBpID4+PSA4KVxuICAgIGxlbk9jdGV0cysrO1xuXG4gIHZhciBoZWFkZXIgPSBuZXcgQnVmZmVyKDEgKyAxICsgbGVuT2N0ZXRzKTtcbiAgaGVhZGVyWzBdID0gZW5jb2RlZFRhZztcbiAgaGVhZGVyWzFdID0gMHg4MCB8IGxlbk9jdGV0cztcblxuICBmb3IgKHZhciBpID0gMSArIGxlbk9jdGV0cywgaiA9IGNvbnRlbnQubGVuZ3RoOyBqID4gMDsgaS0tLCBqID4+PSA4KVxuICAgIGhlYWRlcltpXSA9IGogJiAweGZmO1xuXG4gIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFsgaGVhZGVyLCBjb250ZW50IF0pO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZVN0ciA9IGZ1bmN0aW9uIGVuY29kZVN0cihzdHIsIHRhZykge1xuICBpZiAodGFnID09PSAnYml0c3RyJykge1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFsgc3RyLnVudXNlZCB8IDAsIHN0ci5kYXRhIF0pO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2JtcHN0cicpIHtcbiAgICB2YXIgYnVmID0gbmV3IEJ1ZmZlcihzdHIubGVuZ3RoICogMik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGJ1Zi53cml0ZVVJbnQxNkJFKHN0ci5jaGFyQ29kZUF0KGkpLCBpICogMik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGJ1Zik7XG4gIH0gZWxzZSBpZiAodGFnID09PSAnbnVtc3RyJykge1xuICAgIGlmICghdGhpcy5faXNOdW1zdHIoc3RyKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ0VuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgc3VwcG9ydHMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seSBkaWdpdHMgYW5kIHNwYWNlJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHN0cik7XG4gIH0gZWxzZSBpZiAodGFnID09PSAncHJpbnRzdHInKSB7XG4gICAgaWYgKCF0aGlzLl9pc1ByaW50c3RyKHN0cikpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCdFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaWdpdHMsIHNwYWNlLCBhcG9zdHJvcGhlLCBsZWZ0IGFuZCByaWd0aCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXJlbnRoZXNpcywgcGx1cyBzaWduLCBjb21tYSwgaHlwaGVuLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkb3QsIHNsYXNoLCBjb2xvbiwgZXF1YWwgc2lnbiwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb24gbWFyaycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihzdHIpO1xuICB9IGVsc2UgaWYgKC9zdHIkLy50ZXN0KHRhZykpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihzdHIpO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ29iakRlc2MnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoc3RyKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcignRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICcgKyB0YWcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgdW5zdXBwb3J0ZWQnKTtcbiAgfVxufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZU9iamlkID0gZnVuY3Rpb24gZW5jb2RlT2JqaWQoaWQsIHZhbHVlcywgcmVsYXRpdmUpIHtcbiAgaWYgKHR5cGVvZiBpZCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoIXZhbHVlcylcbiAgICAgIHJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCdzdHJpbmcgb2JqaWQgZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIGZvdW5kJyk7XG4gICAgaWYgKCF2YWx1ZXMuaGFzT3duUHJvcGVydHkoaWQpKVxuICAgICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ29iamlkIG5vdCBmb3VuZCBpbiB2YWx1ZXMgbWFwJyk7XG4gICAgaWQgPSB2YWx1ZXNbaWRdLnNwbGl0KC9bXFxzXFwuXSsvZyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZC5sZW5ndGg7IGkrKylcbiAgICAgIGlkW2ldIHw9IDA7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShpZCkpIHtcbiAgICBpZCA9IGlkLnNsaWNlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZC5sZW5ndGg7IGkrKylcbiAgICAgIGlkW2ldIHw9IDA7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoaWQpKSB7XG4gICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ29iamlkKCkgc2hvdWxkIGJlIGVpdGhlciBhcnJheSBvciBzdHJpbmcsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnb3Q6ICcgKyBKU09OLnN0cmluZ2lmeShpZCkpO1xuICB9XG5cbiAgaWYgKCFyZWxhdGl2ZSkge1xuICAgIGlmIChpZFsxXSA+PSA0MClcbiAgICAgIHJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCdTZWNvbmQgb2JqaWQgaWRlbnRpZmllciBPT0InKTtcbiAgICBpZC5zcGxpY2UoMCwgMiwgaWRbMF0gKiA0MCArIGlkWzFdKTtcbiAgfVxuXG4gIC8vIENvdW50IG51bWJlciBvZiBvY3RldHNcbiAgdmFyIHNpemUgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGlkLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGlkZW50ID0gaWRbaV07XG4gICAgZm9yIChzaXplKys7IGlkZW50ID49IDB4ODA7IGlkZW50ID4+PSA3KVxuICAgICAgc2l6ZSsrO1xuICB9XG5cbiAgdmFyIG9iamlkID0gbmV3IEJ1ZmZlcihzaXplKTtcbiAgdmFyIG9mZnNldCA9IG9iamlkLmxlbmd0aCAtIDE7XG4gIGZvciAodmFyIGkgPSBpZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBpZGVudCA9IGlkW2ldO1xuICAgIG9iamlkW29mZnNldC0tXSA9IGlkZW50ICYgMHg3ZjtcbiAgICB3aGlsZSAoKGlkZW50ID4+PSA3KSA+IDApXG4gICAgICBvYmppZFtvZmZzZXQtLV0gPSAweDgwIHwgKGlkZW50ICYgMHg3Zik7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihvYmppZCk7XG59O1xuXG5mdW5jdGlvbiB0d28obnVtKSB7XG4gIGlmIChudW0gPCAxMClcbiAgICByZXR1cm4gJzAnICsgbnVtO1xuICBlbHNlXG4gICAgcmV0dXJuIG51bTtcbn1cblxuREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZVRpbWUgPSBmdW5jdGlvbiBlbmNvZGVUaW1lKHRpbWUsIHRhZykge1xuICB2YXIgc3RyO1xuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKHRpbWUpO1xuXG4gIGlmICh0YWcgPT09ICdnZW50aW1lJykge1xuICAgIHN0ciA9IFtcbiAgICAgIHR3byhkYXRlLmdldEZ1bGxZZWFyKCkpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDRGF0ZSgpKSxcbiAgICAgIHR3byhkYXRlLmdldFVUQ0hvdXJzKCkpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDTWludXRlcygpKSxcbiAgICAgIHR3byhkYXRlLmdldFVUQ1NlY29uZHMoKSksXG4gICAgICAnWidcbiAgICBdLmpvaW4oJycpO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ3V0Y3RpbWUnKSB7XG4gICAgc3RyID0gW1xuICAgICAgdHdvKGRhdGUuZ2V0RnVsbFllYXIoKSAlIDEwMCksXG4gICAgICB0d28oZGF0ZS5nZXRVVENNb250aCgpICsgMSksXG4gICAgICB0d28oZGF0ZS5nZXRVVENEYXRlKCkpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDSG91cnMoKSksXG4gICAgICB0d28oZGF0ZS5nZXRVVENNaW51dGVzKCkpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDU2Vjb25kcygpKSxcbiAgICAgICdaJ1xuICAgIF0uam9pbignJyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZXBvcnRlci5lcnJvcignRW5jb2RpbmcgJyArIHRhZyArICcgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCcpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2VuY29kZVN0cihzdHIsICdvY3RzdHInKTtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9lbmNvZGVOdWxsID0gZnVuY3Rpb24gZW5jb2RlTnVsbCgpIHtcbiAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoJycpO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZUludCA9IGZ1bmN0aW9uIGVuY29kZUludChudW0sIHZhbHVlcykge1xuICBpZiAodHlwZW9mIG51bSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoIXZhbHVlcylcbiAgICAgIHJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCdTdHJpbmcgaW50IG9yIGVudW0gZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwJyk7XG4gICAgaWYgKCF2YWx1ZXMuaGFzT3duUHJvcGVydHkobnVtKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ1ZhbHVlcyBtYXAgZG9lc25cXCd0IGNvbnRhaW46ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobnVtKSk7XG4gICAgfVxuICAgIG51bSA9IHZhbHVlc1tudW1dO1xuICB9XG5cbiAgLy8gQmlnbnVtLCBhc3N1bWUgYmlnIGVuZGlhblxuICBpZiAodHlwZW9mIG51bSAhPT0gJ251bWJlcicgJiYgIUJ1ZmZlci5pc0J1ZmZlcihudW0pKSB7XG4gICAgdmFyIG51bUFycmF5ID0gbnVtLnRvQXJyYXkoKTtcbiAgICBpZiAoIW51bS5zaWduICYmIG51bUFycmF5WzBdICYgMHg4MCkge1xuICAgICAgbnVtQXJyYXkudW5zaGlmdCgwKTtcbiAgICB9XG4gICAgbnVtID0gbmV3IEJ1ZmZlcihudW1BcnJheSk7XG4gIH1cblxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG51bSkpIHtcbiAgICB2YXIgc2l6ZSA9IG51bS5sZW5ndGg7XG4gICAgaWYgKG51bS5sZW5ndGggPT09IDApXG4gICAgICBzaXplKys7XG5cbiAgICB2YXIgb3V0ID0gbmV3IEJ1ZmZlcihzaXplKTtcbiAgICBudW0uY29weShvdXQpO1xuICAgIGlmIChudW0ubGVuZ3RoID09PSAwKVxuICAgICAgb3V0WzBdID0gMFxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG91dCk7XG4gIH1cblxuICBpZiAobnVtIDwgMHg4MClcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihudW0pO1xuXG4gIGlmIChudW0gPCAweDEwMClcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMCwgbnVtXSk7XG5cbiAgdmFyIHNpemUgPSAxO1xuICBmb3IgKHZhciBpID0gbnVtOyBpID49IDB4MTAwOyBpID4+PSA4KVxuICAgIHNpemUrKztcblxuICB2YXIgb3V0ID0gbmV3IEFycmF5KHNpemUpO1xuICBmb3IgKHZhciBpID0gb3V0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgb3V0W2ldID0gbnVtICYgMHhmZjtcbiAgICBudW0gPj49IDg7XG4gIH1cbiAgaWYob3V0WzBdICYgMHg4MCkge1xuICAgIG91dC51bnNoaWZ0KDApO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIobmV3IEJ1ZmZlcihvdXQpKTtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9lbmNvZGVCb29sID0gZnVuY3Rpb24gZW5jb2RlQm9vbCh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih2YWx1ZSA/IDB4ZmYgOiAwKTtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl91c2UgPSBmdW5jdGlvbiB1c2UoZW50aXR5LCBvYmopIHtcbiAgaWYgKHR5cGVvZiBlbnRpdHkgPT09ICdmdW5jdGlvbicpXG4gICAgZW50aXR5ID0gZW50aXR5KG9iaik7XG4gIHJldHVybiBlbnRpdHkuX2dldEVuY29kZXIoJ2RlcicpLnRyZWU7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fc2tpcERlZmF1bHQgPSBmdW5jdGlvbiBza2lwRGVmYXVsdChkYXRhQnVmZmVyLCByZXBvcnRlciwgcGFyZW50KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcbiAgdmFyIGk7XG4gIGlmIChzdGF0ZVsnZGVmYXVsdCddID09PSBudWxsKVxuICAgIHJldHVybiBmYWxzZTtcblxuICB2YXIgZGF0YSA9IGRhdGFCdWZmZXIuam9pbigpO1xuICBpZiAoc3RhdGUuZGVmYXVsdEJ1ZmZlciA9PT0gdW5kZWZpbmVkKVxuICAgIHN0YXRlLmRlZmF1bHRCdWZmZXIgPSB0aGlzLl9lbmNvZGVWYWx1ZShzdGF0ZVsnZGVmYXVsdCddLCByZXBvcnRlciwgcGFyZW50KS5qb2luKCk7XG5cbiAgaWYgKGRhdGEubGVuZ3RoICE9PSBzdGF0ZS5kZWZhdWx0QnVmZmVyLmxlbmd0aClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgZm9yIChpPTA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKVxuICAgIGlmIChkYXRhW2ldICE9PSBzdGF0ZS5kZWZhdWx0QnVmZmVyW2ldKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLy8gVXRpbGl0eSBtZXRob2RzXG5cbmZ1bmN0aW9uIGVuY29kZVRhZyh0YWcsIHByaW1pdGl2ZSwgY2xzLCByZXBvcnRlcikge1xuICB2YXIgcmVzO1xuXG4gIGlmICh0YWcgPT09ICdzZXFvZicpXG4gICAgdGFnID0gJ3NlcSc7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ3NldG9mJylcbiAgICB0YWcgPSAnc2V0JztcblxuICBpZiAoZGVyLnRhZ0J5TmFtZS5oYXNPd25Qcm9wZXJ0eSh0YWcpKVxuICAgIHJlcyA9IGRlci50YWdCeU5hbWVbdGFnXTtcbiAgZWxzZSBpZiAodHlwZW9mIHRhZyA9PT0gJ251bWJlcicgJiYgKHRhZyB8IDApID09PSB0YWcpXG4gICAgcmVzID0gdGFnO1xuICBlbHNlXG4gICAgcmV0dXJuIHJlcG9ydGVyLmVycm9yKCdVbmtub3duIHRhZzogJyArIHRhZyk7XG5cbiAgaWYgKHJlcyA+PSAweDFmKVxuICAgIHJldHVybiByZXBvcnRlci5lcnJvcignTXVsdGktb2N0ZXQgdGFnIGVuY29kaW5nIHVuc3VwcG9ydGVkJyk7XG5cbiAgaWYgKCFwcmltaXRpdmUpXG4gICAgcmVzIHw9IDB4MjA7XG5cbiAgcmVzIHw9IChkZXIudGFnQ2xhc3NCeU5hbWVbY2xzIHx8ICd1bml2ZXJzYWwnXSA8PCA2KTtcblxuICByZXR1cm4gcmVzO1xufVxuIiwidmFyIGVuY29kZXJzID0gZXhwb3J0cztcblxuZW5jb2RlcnMuZGVyID0gcmVxdWlyZSgnLi9kZXInKTtcbmVuY29kZXJzLnBlbSA9IHJlcXVpcmUoJy4vcGVtJyk7XG4iLCJ2YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG52YXIgREVSRW5jb2RlciA9IHJlcXVpcmUoJy4vZGVyJyk7XG5cbmZ1bmN0aW9uIFBFTUVuY29kZXIoZW50aXR5KSB7XG4gIERFUkVuY29kZXIuY2FsbCh0aGlzLCBlbnRpdHkpO1xuICB0aGlzLmVuYyA9ICdwZW0nO1xufTtcbmluaGVyaXRzKFBFTUVuY29kZXIsIERFUkVuY29kZXIpO1xubW9kdWxlLmV4cG9ydHMgPSBQRU1FbmNvZGVyO1xuXG5QRU1FbmNvZGVyLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoZGF0YSwgb3B0aW9ucykge1xuICB2YXIgYnVmID0gREVSRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlLmNhbGwodGhpcywgZGF0YSk7XG5cbiAgdmFyIHAgPSBidWYudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB2YXIgb3V0ID0gWyAnLS0tLS1CRUdJTiAnICsgb3B0aW9ucy5sYWJlbCArICctLS0tLScgXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwLmxlbmd0aDsgaSArPSA2NClcbiAgICBvdXQucHVzaChwLnNsaWNlKGksIGkgKyA2NCkpO1xuICBvdXQucHVzaCgnLS0tLS1FTkQgJyArIG9wdGlvbnMubGFiZWwgKyAnLS0tLS0nKTtcbiAgcmV0dXJuIG91dC5qb2luKCdcXG4nKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vYXJyYXkvZnJvbVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9qc29uL3N0cmluZ2lmeVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvYXNzaWduXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9jcmVhdGVcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9nZXQtcHJvdG90eXBlLW9mXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9rZXlzXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9zZXQtcHJvdG90eXBlLW9mXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2VcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vc2V0XCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbFwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9zeW1ib2wvaXRlcmF0b3JcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpO1xuXG52YXIgX2RlZmluZVByb3BlcnR5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlZmluZVByb3BlcnR5KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICgwLCBfZGVmaW5lUHJvcGVydHkyLmRlZmF1bHQpKHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH07XG59KCk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZlwiKTtcblxudmFyIF9nZXRQcm90b3R5cGVPZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRQcm90b3R5cGVPZik7XG5cbnZhciBfZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZShcIi4uL2NvcmUtanMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKTtcblxudmFyIF9nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gIGlmIChvYmplY3QgPT09IG51bGwpIG9iamVjdCA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGRlc2MgPSAoMCwgX2dldE93blByb3BlcnR5RGVzY3JpcHRvcjIuZGVmYXVsdCkob2JqZWN0LCBwcm9wZXJ0eSk7XG5cbiAgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBwYXJlbnQgPSAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShvYmplY3QpO1xuXG4gICAgaWYgKHBhcmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiBkZXNjKSB7XG4gICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGdldHRlciA9IGRlc2MuZ2V0O1xuXG4gICAgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZlwiKTtcblxudmFyIF9zZXRQcm90b3R5cGVPZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zZXRQcm90b3R5cGVPZik7XG5cbnZhciBfY3JlYXRlID0gcmVxdWlyZShcIi4uL2NvcmUtanMvb2JqZWN0L2NyZWF0ZVwiKTtcblxudmFyIF9jcmVhdGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlKTtcblxudmFyIF90eXBlb2YyID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgX3R5cGVvZjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90eXBlb2YyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArICh0eXBlb2Ygc3VwZXJDbGFzcyA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiAoMCwgX3R5cGVvZjMuZGVmYXVsdCkoc3VwZXJDbGFzcykpKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9ICgwLCBfY3JlYXRlMi5kZWZhdWx0KShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mMi5kZWZhdWx0ID8gKDAsIF9zZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfdHlwZW9mMiA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3R5cGVvZlwiKTtcblxudmFyIF90eXBlb2YzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdHlwZW9mMik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChzZWxmLCBjYWxsKSB7XG4gIGlmICghc2VsZikge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBjYWxsICYmICgodHlwZW9mIGNhbGwgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogKDAsIF90eXBlb2YzLmRlZmF1bHQpKGNhbGwpKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9mcm9tID0gcmVxdWlyZShcIi4uL2NvcmUtanMvYXJyYXkvZnJvbVwiKTtcblxudmFyIF9mcm9tMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Zyb20pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcnIyW2ldID0gYXJyW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBhcnIyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoMCwgX2Zyb20yLmRlZmF1bHQpKGFycik7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfaXRlcmF0b3IgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9zeW1ib2wvaXRlcmF0b3JcIik7XG5cbnZhciBfaXRlcmF0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaXRlcmF0b3IpO1xuXG52YXIgX3N5bWJvbCA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL3N5bWJvbFwiKTtcblxudmFyIF9zeW1ib2wyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3ltYm9sKTtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBfaXRlcmF0b3IyLmRlZmF1bHQgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBfc3ltYm9sMi5kZWZhdWx0ICYmIG9iaiAhPT0gX3N5bWJvbDIuZGVmYXVsdC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiBfdHlwZW9mKF9pdGVyYXRvcjIuZGVmYXVsdCkgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2Yob2JqKTtcbn0gOiBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IF9zeW1ib2wyLmRlZmF1bHQgJiYgb2JqICE9PSBfc3ltYm9sMi5kZWZhdWx0LnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2Yob2JqKTtcbn07IiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gcGxhY2VIb2xkZXJzQ291bnQgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gdGhlIG51bWJlciBvZiBlcXVhbCBzaWducyAocGxhY2UgaG9sZGVycylcbiAgLy8gaWYgdGhlcmUgYXJlIHR3byBwbGFjZWhvbGRlcnMsIHRoYW4gdGhlIHR3byBjaGFyYWN0ZXJzIGJlZm9yZSBpdFxuICAvLyByZXByZXNlbnQgb25lIGJ5dGVcbiAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUsIHRoZW4gdGhlIHRocmVlIGNoYXJhY3RlcnMgYmVmb3JlIGl0IHJlcHJlc2VudCAyIGJ5dGVzXG4gIC8vIHRoaXMgaXMganVzdCBhIGNoZWFwIGhhY2sgdG8gbm90IGRvIGluZGV4T2YgdHdpY2VcbiAgcmV0dXJuIGI2NFtsZW4gLSAyXSA9PT0gJz0nID8gMiA6IGI2NFtsZW4gLSAxXSA9PT0gJz0nID8gMSA6IDBcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIC8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuICByZXR1cm4gYjY0Lmxlbmd0aCAqIDMgLyA0IC0gcGxhY2VIb2xkZXJzQ291bnQoYjY0KVxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciBpLCBqLCBsLCB0bXAsIHBsYWNlSG9sZGVycywgYXJyXG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG4gIHBsYWNlSG9sZGVycyA9IHBsYWNlSG9sZGVyc0NvdW50KGI2NClcblxuICBhcnIgPSBuZXcgQXJyKGxlbiAqIDMgLyA0IC0gcGxhY2VIb2xkZXJzKVxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgbCA9IHBsYWNlSG9sZGVycyA+IDAgPyBsZW4gLSA0IDogbGVuXG5cbiAgdmFyIEwgPSAwXG5cbiAgZm9yIChpID0gMCwgaiA9IDA7IGkgPCBsOyBpICs9IDQsIGogKz0gMykge1xuICAgIHRtcCA9IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfCAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfCByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltMKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW0wrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltMKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVycyA9PT0gMikge1xuICAgIHRtcCA9IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW0wrK10gPSB0bXAgJiAweEZGXG4gIH0gZWxzZSBpZiAocGxhY2VIb2xkZXJzID09PSAxKSB7XG4gICAgdG1wID0gKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW0wrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltMKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICsgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICsgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gKyBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID0gKHVpbnQ4W2ldIDw8IDE2KSArICh1aW50OFtpICsgMV0gPDwgOCkgKyAodWludDhbaSArIDJdKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgb3V0cHV0ID0gJydcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIG91dHB1dCArPSBsb29rdXBbdG1wID4+IDJdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl1cbiAgICBvdXRwdXQgKz0gJz09J1xuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyAodWludDhbbGVuIC0gMV0pXG4gICAgb3V0cHV0ICs9IGxvb2t1cFt0bXAgPj4gMTBdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl1cbiAgICBvdXRwdXQgKz0gbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXVxuICAgIG91dHB1dCArPSAnPSdcbiAgfVxuXG4gIHBhcnRzLnB1c2gob3V0cHV0KVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwiKGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIFV0aWxzXG4gIGZ1bmN0aW9uIGFzc2VydCAodmFsLCBtc2cpIHtcbiAgICBpZiAoIXZhbCkgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xuICB9XG5cbiAgLy8gQ291bGQgdXNlIGBpbmhlcml0c2AgbW9kdWxlLCBidXQgZG9uJ3Qgd2FudCB0byBtb3ZlIGZyb20gc2luZ2xlIGZpbGVcbiAgLy8gYXJjaGl0ZWN0dXJlIHlldC5cbiAgZnVuY3Rpb24gaW5oZXJpdHMgKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yO1xuICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9O1xuICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGU7XG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKTtcbiAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3I7XG4gIH1cblxuICAvLyBCTlxuXG4gIGZ1bmN0aW9uIEJOIChudW1iZXIsIGJhc2UsIGVuZGlhbikge1xuICAgIGlmIChCTi5pc0JOKG51bWJlcikpIHtcbiAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfVxuXG4gICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgdGhpcy53b3JkcyA9IG51bGw7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuXG4gICAgLy8gUmVkdWN0aW9uIGNvbnRleHRcbiAgICB0aGlzLnJlZCA9IG51bGw7XG5cbiAgICBpZiAobnVtYmVyICE9PSBudWxsKSB7XG4gICAgICBpZiAoYmFzZSA9PT0gJ2xlJyB8fCBiYXNlID09PSAnYmUnKSB7XG4gICAgICAgIGVuZGlhbiA9IGJhc2U7XG4gICAgICAgIGJhc2UgPSAxMDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faW5pdChudW1iZXIgfHwgMCwgYmFzZSB8fCAxMCwgZW5kaWFuIHx8ICdiZScpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IEJOO1xuICB9IGVsc2Uge1xuICAgIGV4cG9ydHMuQk4gPSBCTjtcbiAgfVxuXG4gIEJOLkJOID0gQk47XG4gIEJOLndvcmRTaXplID0gMjY7XG5cbiAgdmFyIEJ1ZmZlcjtcbiAgdHJ5IHtcbiAgICBCdWZmZXIgPSByZXF1aXJlKCdidWYnICsgJ2ZlcicpLkJ1ZmZlcjtcbiAgfSBjYXRjaCAoZSkge1xuICB9XG5cbiAgQk4uaXNCTiA9IGZ1bmN0aW9uIGlzQk4gKG51bSkge1xuICAgIGlmIChudW0gaW5zdGFuY2VvZiBCTikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bSAhPT0gbnVsbCAmJiB0eXBlb2YgbnVtID09PSAnb2JqZWN0JyAmJlxuICAgICAgbnVtLmNvbnN0cnVjdG9yLndvcmRTaXplID09PSBCTi53b3JkU2l6ZSAmJiBBcnJheS5pc0FycmF5KG51bS53b3Jkcyk7XG4gIH07XG5cbiAgQk4ubWF4ID0gZnVuY3Rpb24gbWF4IChsZWZ0LCByaWdodCkge1xuICAgIGlmIChsZWZ0LmNtcChyaWdodCkgPiAwKSByZXR1cm4gbGVmdDtcbiAgICByZXR1cm4gcmlnaHQ7XG4gIH07XG5cbiAgQk4ubWluID0gZnVuY3Rpb24gbWluIChsZWZ0LCByaWdodCkge1xuICAgIGlmIChsZWZ0LmNtcChyaWdodCkgPCAwKSByZXR1cm4gbGVmdDtcbiAgICByZXR1cm4gcmlnaHQ7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdCAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICBpZiAodHlwZW9mIG51bWJlciA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbml0TnVtYmVyKG51bWJlciwgYmFzZSwgZW5kaWFuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG51bWJlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbml0QXJyYXkobnVtYmVyLCBiYXNlLCBlbmRpYW4pO1xuICAgIH1cblxuICAgIGlmIChiYXNlID09PSAnaGV4Jykge1xuICAgICAgYmFzZSA9IDE2O1xuICAgIH1cbiAgICBhc3NlcnQoYmFzZSA9PT0gKGJhc2UgfCAwKSAmJiBiYXNlID49IDIgJiYgYmFzZSA8PSAzNik7XG5cbiAgICBudW1iZXIgPSBudW1iZXIudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGlmIChudW1iZXJbMF0gPT09ICctJykge1xuICAgICAgc3RhcnQrKztcbiAgICB9XG5cbiAgICBpZiAoYmFzZSA9PT0gMTYpIHtcbiAgICAgIHRoaXMuX3BhcnNlSGV4KG51bWJlciwgc3RhcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wYXJzZUJhc2UobnVtYmVyLCBiYXNlLCBzdGFydCk7XG4gICAgfVxuXG4gICAgaWYgKG51bWJlclswXSA9PT0gJy0nKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICB9XG5cbiAgICB0aGlzLnN0cmlwKCk7XG5cbiAgICBpZiAoZW5kaWFuICE9PSAnbGUnKSByZXR1cm47XG5cbiAgICB0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksIGJhc2UsIGVuZGlhbik7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pbml0TnVtYmVyID0gZnVuY3Rpb24gX2luaXROdW1iZXIgKG51bWJlciwgYmFzZSwgZW5kaWFuKSB7XG4gICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgbnVtYmVyID0gLW51bWJlcjtcbiAgICB9XG4gICAgaWYgKG51bWJlciA8IDB4NDAwMDAwMCkge1xuICAgICAgdGhpcy53b3JkcyA9IFsgbnVtYmVyICYgMHgzZmZmZmZmIF07XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgfSBlbHNlIGlmIChudW1iZXIgPCAweDEwMDAwMDAwMDAwMDAwKSB7XG4gICAgICB0aGlzLndvcmRzID0gW1xuICAgICAgICBudW1iZXIgJiAweDNmZmZmZmYsXG4gICAgICAgIChudW1iZXIgLyAweDQwMDAwMDApICYgMHgzZmZmZmZmXG4gICAgICBdO1xuICAgICAgdGhpcy5sZW5ndGggPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQobnVtYmVyIDwgMHgyMDAwMDAwMDAwMDAwMCk7IC8vIDIgXiA1MyAodW5zYWZlKVxuICAgICAgdGhpcy53b3JkcyA9IFtcbiAgICAgICAgbnVtYmVyICYgMHgzZmZmZmZmLFxuICAgICAgICAobnVtYmVyIC8gMHg0MDAwMDAwKSAmIDB4M2ZmZmZmZixcbiAgICAgICAgMVxuICAgICAgXTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMztcbiAgICB9XG5cbiAgICBpZiAoZW5kaWFuICE9PSAnbGUnKSByZXR1cm47XG5cbiAgICAvLyBSZXZlcnNlIHRoZSBieXRlc1xuICAgIHRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSwgYmFzZSwgZW5kaWFuKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2luaXRBcnJheSA9IGZ1bmN0aW9uIF9pbml0QXJyYXkgKG51bWJlciwgYmFzZSwgZW5kaWFuKSB7XG4gICAgLy8gUGVyaGFwcyBhIFVpbnQ4QXJyYXlcbiAgICBhc3NlcnQodHlwZW9mIG51bWJlci5sZW5ndGggPT09ICdudW1iZXInKTtcbiAgICBpZiAobnVtYmVyLmxlbmd0aCA8PSAwKSB7XG4gICAgICB0aGlzLndvcmRzID0gWyAwIF07XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGguY2VpbChudW1iZXIubGVuZ3RoIC8gMyk7XG4gICAgdGhpcy53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gMDtcbiAgICB9XG5cbiAgICB2YXIgaiwgdztcbiAgICB2YXIgb2ZmID0gMDtcbiAgICBpZiAoZW5kaWFuID09PSAnYmUnKSB7XG4gICAgICBmb3IgKGkgPSBudW1iZXIubGVuZ3RoIC0gMSwgaiA9IDA7IGkgPj0gMDsgaSAtPSAzKSB7XG4gICAgICAgIHcgPSBudW1iZXJbaV0gfCAobnVtYmVyW2kgLSAxXSA8PCA4KSB8IChudW1iZXJbaSAtIDJdIDw8IDE2KTtcbiAgICAgICAgdGhpcy53b3Jkc1tqXSB8PSAodyA8PCBvZmYpICYgMHgzZmZmZmZmO1xuICAgICAgICB0aGlzLndvcmRzW2ogKyAxXSA9ICh3ID4+PiAoMjYgLSBvZmYpKSAmIDB4M2ZmZmZmZjtcbiAgICAgICAgb2ZmICs9IDI0O1xuICAgICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgICAgb2ZmIC09IDI2O1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZW5kaWFuID09PSAnbGUnKSB7XG4gICAgICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG51bWJlci5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICB3ID0gbnVtYmVyW2ldIHwgKG51bWJlcltpICsgMV0gPDwgOCkgfCAobnVtYmVyW2kgKyAyXSA8PCAxNik7XG4gICAgICAgIHRoaXMud29yZHNbal0gfD0gKHcgPDwgb2ZmKSAmIDB4M2ZmZmZmZjtcbiAgICAgICAgdGhpcy53b3Jkc1tqICsgMV0gPSAodyA+Pj4gKDI2IC0gb2ZmKSkgJiAweDNmZmZmZmY7XG4gICAgICAgIG9mZiArPSAyNDtcbiAgICAgICAgaWYgKG9mZiA+PSAyNikge1xuICAgICAgICAgIG9mZiAtPSAyNjtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBmdW5jdGlvbiBwYXJzZUhleCAoc3RyLCBzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSAwO1xuICAgIHZhciBsZW4gPSBNYXRoLm1pbihzdHIubGVuZ3RoLCBlbmQpO1xuICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2YXIgYyA9IHN0ci5jaGFyQ29kZUF0KGkpIC0gNDg7XG5cbiAgICAgIHIgPDw9IDQ7XG5cbiAgICAgIC8vICdhJyAtICdmJ1xuICAgICAgaWYgKGMgPj0gNDkgJiYgYyA8PSA1NCkge1xuICAgICAgICByIHw9IGMgLSA0OSArIDB4YTtcblxuICAgICAgLy8gJ0EnIC0gJ0YnXG4gICAgICB9IGVsc2UgaWYgKGMgPj0gMTcgJiYgYyA8PSAyMikge1xuICAgICAgICByIHw9IGMgLSAxNyArIDB4YTtcblxuICAgICAgLy8gJzAnIC0gJzknXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByIHw9IGMgJiAweGY7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG5cbiAgQk4ucHJvdG90eXBlLl9wYXJzZUhleCA9IGZ1bmN0aW9uIF9wYXJzZUhleCAobnVtYmVyLCBzdGFydCkge1xuICAgIC8vIENyZWF0ZSBwb3NzaWJseSBiaWdnZXIgYXJyYXkgdG8gZW5zdXJlIHRoYXQgaXQgZml0cyB0aGUgbnVtYmVyXG4gICAgdGhpcy5sZW5ndGggPSBNYXRoLmNlaWwoKG51bWJlci5sZW5ndGggLSBzdGFydCkgLyA2KTtcbiAgICB0aGlzLndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSAwO1xuICAgIH1cblxuICAgIHZhciBqLCB3O1xuICAgIC8vIFNjYW4gMjQtYml0IGNodW5rcyBhbmQgYWRkIHRoZW0gdG8gdGhlIG51bWJlclxuICAgIHZhciBvZmYgPSAwO1xuICAgIGZvciAoaSA9IG51bWJlci5sZW5ndGggLSA2LCBqID0gMDsgaSA+PSBzdGFydDsgaSAtPSA2KSB7XG4gICAgICB3ID0gcGFyc2VIZXgobnVtYmVyLCBpLCBpICsgNik7XG4gICAgICB0aGlzLndvcmRzW2pdIHw9ICh3IDw8IG9mZikgJiAweDNmZmZmZmY7XG4gICAgICAvLyBOT1RFOiBgMHgzZmZmZmZgIGlzIGludGVudGlvbmFsIGhlcmUsIDI2Yml0cyBtYXggc2hpZnQgKyAyNGJpdCBoZXggbGltYlxuICAgICAgdGhpcy53b3Jkc1tqICsgMV0gfD0gdyA+Pj4gKDI2IC0gb2ZmKSAmIDB4M2ZmZmZmO1xuICAgICAgb2ZmICs9IDI0O1xuICAgICAgaWYgKG9mZiA+PSAyNikge1xuICAgICAgICBvZmYgLT0gMjY7XG4gICAgICAgIGorKztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGkgKyA2ICE9PSBzdGFydCkge1xuICAgICAgdyA9IHBhcnNlSGV4KG51bWJlciwgc3RhcnQsIGkgKyA2KTtcbiAgICAgIHRoaXMud29yZHNbal0gfD0gKHcgPDwgb2ZmKSAmIDB4M2ZmZmZmZjtcbiAgICAgIHRoaXMud29yZHNbaiArIDFdIHw9IHcgPj4+ICgyNiAtIG9mZikgJiAweDNmZmZmZjtcbiAgICB9XG4gICAgdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHBhcnNlQmFzZSAoc3RyLCBzdGFydCwgZW5kLCBtdWwpIHtcbiAgICB2YXIgciA9IDA7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKHN0ci5sZW5ndGgsIGVuZCk7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSkgLSA0ODtcblxuICAgICAgciAqPSBtdWw7XG5cbiAgICAgIC8vICdhJ1xuICAgICAgaWYgKGMgPj0gNDkpIHtcbiAgICAgICAgciArPSBjIC0gNDkgKyAweGE7XG5cbiAgICAgIC8vICdBJ1xuICAgICAgfSBlbHNlIGlmIChjID49IDE3KSB7XG4gICAgICAgIHIgKz0gYyAtIDE3ICsgMHhhO1xuXG4gICAgICAvLyAnMCcgLSAnOSdcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHIgKz0gYztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICBCTi5wcm90b3R5cGUuX3BhcnNlQmFzZSA9IGZ1bmN0aW9uIF9wYXJzZUJhc2UgKG51bWJlciwgYmFzZSwgc3RhcnQpIHtcbiAgICAvLyBJbml0aWFsaXplIGFzIHplcm9cbiAgICB0aGlzLndvcmRzID0gWyAwIF07XG4gICAgdGhpcy5sZW5ndGggPSAxO1xuXG4gICAgLy8gRmluZCBsZW5ndGggb2YgbGltYiBpbiBiYXNlXG4gICAgZm9yICh2YXIgbGltYkxlbiA9IDAsIGxpbWJQb3cgPSAxOyBsaW1iUG93IDw9IDB4M2ZmZmZmZjsgbGltYlBvdyAqPSBiYXNlKSB7XG4gICAgICBsaW1iTGVuKys7XG4gICAgfVxuICAgIGxpbWJMZW4tLTtcbiAgICBsaW1iUG93ID0gKGxpbWJQb3cgLyBiYXNlKSB8IDA7XG5cbiAgICB2YXIgdG90YWwgPSBudW1iZXIubGVuZ3RoIC0gc3RhcnQ7XG4gICAgdmFyIG1vZCA9IHRvdGFsICUgbGltYkxlbjtcbiAgICB2YXIgZW5kID0gTWF0aC5taW4odG90YWwsIHRvdGFsIC0gbW9kKSArIHN0YXJ0O1xuXG4gICAgdmFyIHdvcmQgPSAwO1xuICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBsaW1iTGVuKSB7XG4gICAgICB3b3JkID0gcGFyc2VCYXNlKG51bWJlciwgaSwgaSArIGxpbWJMZW4sIGJhc2UpO1xuXG4gICAgICB0aGlzLmltdWxuKGxpbWJQb3cpO1xuICAgICAgaWYgKHRoaXMud29yZHNbMF0gKyB3b3JkIDwgMHg0MDAwMDAwKSB7XG4gICAgICAgIHRoaXMud29yZHNbMF0gKz0gd29yZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2lhZGRuKHdvcmQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtb2QgIT09IDApIHtcbiAgICAgIHZhciBwb3cgPSAxO1xuICAgICAgd29yZCA9IHBhcnNlQmFzZShudW1iZXIsIGksIG51bWJlci5sZW5ndGgsIGJhc2UpO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbW9kOyBpKyspIHtcbiAgICAgICAgcG93ICo9IGJhc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaW11bG4ocG93KTtcbiAgICAgIGlmICh0aGlzLndvcmRzWzBdICsgd29yZCA8IDB4NDAwMDAwMCkge1xuICAgICAgICB0aGlzLndvcmRzWzBdICs9IHdvcmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pYWRkbih3b3JkKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5IChkZXN0KSB7XG4gICAgZGVzdC53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZXN0LndvcmRzW2ldID0gdGhpcy53b3Jkc1tpXTtcbiAgICB9XG4gICAgZGVzdC5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICBkZXN0Lm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZTtcbiAgICBkZXN0LnJlZCA9IHRoaXMucmVkO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uIGNsb25lICgpIHtcbiAgICB2YXIgciA9IG5ldyBCTihudWxsKTtcbiAgICB0aGlzLmNvcHkocik7XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9leHBhbmQgPSBmdW5jdGlvbiBfZXhwYW5kIChzaXplKSB7XG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoIDwgc2l6ZSkge1xuICAgICAgdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXSA9IDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIFJlbW92ZSBsZWFkaW5nIGAwYCBmcm9tIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuc3RyaXAgPSBmdW5jdGlvbiBzdHJpcCAoKSB7XG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoID4gMSAmJiB0aGlzLndvcmRzW3RoaXMubGVuZ3RoIC0gMV0gPT09IDApIHtcbiAgICAgIHRoaXMubGVuZ3RoLS07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9ub3JtU2lnbigpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5fbm9ybVNpZ24gPSBmdW5jdGlvbiBfbm9ybVNpZ24gKCkge1xuICAgIC8vIC0wID0gMFxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLndvcmRzWzBdID09PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgICByZXR1cm4gKHRoaXMucmVkID8gJzxCTi1SOiAnIDogJzxCTjogJykgKyB0aGlzLnRvU3RyaW5nKDE2KSArICc+JztcbiAgfTtcblxuICAvKlxuXG4gIHZhciB6ZXJvcyA9IFtdO1xuICB2YXIgZ3JvdXBTaXplcyA9IFtdO1xuICB2YXIgZ3JvdXBCYXNlcyA9IFtdO1xuXG4gIHZhciBzID0gJyc7XG4gIHZhciBpID0gLTE7XG4gIHdoaWxlICgrK2kgPCBCTi53b3JkU2l6ZSkge1xuICAgIHplcm9zW2ldID0gcztcbiAgICBzICs9ICcwJztcbiAgfVxuICBncm91cFNpemVzWzBdID0gMDtcbiAgZ3JvdXBTaXplc1sxXSA9IDA7XG4gIGdyb3VwQmFzZXNbMF0gPSAwO1xuICBncm91cEJhc2VzWzFdID0gMDtcbiAgdmFyIGJhc2UgPSAyIC0gMTtcbiAgd2hpbGUgKCsrYmFzZSA8IDM2ICsgMSkge1xuICAgIHZhciBncm91cFNpemUgPSAwO1xuICAgIHZhciBncm91cEJhc2UgPSAxO1xuICAgIHdoaWxlIChncm91cEJhc2UgPCAoMSA8PCBCTi53b3JkU2l6ZSkgLyBiYXNlKSB7XG4gICAgICBncm91cEJhc2UgKj0gYmFzZTtcbiAgICAgIGdyb3VwU2l6ZSArPSAxO1xuICAgIH1cbiAgICBncm91cFNpemVzW2Jhc2VdID0gZ3JvdXBTaXplO1xuICAgIGdyb3VwQmFzZXNbYmFzZV0gPSBncm91cEJhc2U7XG4gIH1cblxuICAqL1xuXG4gIHZhciB6ZXJvcyA9IFtcbiAgICAnJyxcbiAgICAnMCcsXG4gICAgJzAwJyxcbiAgICAnMDAwJyxcbiAgICAnMDAwMCcsXG4gICAgJzAwMDAwJyxcbiAgICAnMDAwMDAwJyxcbiAgICAnMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCdcbiAgXTtcblxuICB2YXIgZ3JvdXBTaXplcyA9IFtcbiAgICAwLCAwLFxuICAgIDI1LCAxNiwgMTIsIDExLCAxMCwgOSwgOCxcbiAgICA4LCA3LCA3LCA3LCA3LCA2LCA2LFxuICAgIDYsIDYsIDYsIDYsIDYsIDUsIDUsXG4gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSxcbiAgICA1LCA1LCA1LCA1LCA1LCA1LCA1XG4gIF07XG5cbiAgdmFyIGdyb3VwQmFzZXMgPSBbXG4gICAgMCwgMCxcbiAgICAzMzU1NDQzMiwgNDMwNDY3MjEsIDE2Nzc3MjE2LCA0ODgyODEyNSwgNjA0NjYxNzYsIDQwMzUzNjA3LCAxNjc3NzIxNixcbiAgICA0MzA0NjcyMSwgMTAwMDAwMDAsIDE5NDg3MTcxLCAzNTgzMTgwOCwgNjI3NDg1MTcsIDc1Mjk1MzYsIDExMzkwNjI1LFxuICAgIDE2Nzc3MjE2LCAyNDEzNzU2OSwgMzQwMTIyMjQsIDQ3MDQ1ODgxLCA2NDAwMDAwMCwgNDA4NDEwMSwgNTE1MzYzMixcbiAgICA2NDM2MzQzLCA3OTYyNjI0LCA5NzY1NjI1LCAxMTg4MTM3NiwgMTQzNDg5MDcsIDE3MjEwMzY4LCAyMDUxMTE0OSxcbiAgICAyNDMwMDAwMCwgMjg2MjkxNTEsIDMzNTU0NDMyLCAzOTEzNTM5MywgNDU0MzU0MjQsIDUyNTIxODc1LCA2MDQ2NjE3NlxuICBdO1xuXG4gIEJOLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nIChiYXNlLCBwYWRkaW5nKSB7XG4gICAgYmFzZSA9IGJhc2UgfHwgMTA7XG4gICAgcGFkZGluZyA9IHBhZGRpbmcgfCAwIHx8IDE7XG5cbiAgICB2YXIgb3V0O1xuICAgIGlmIChiYXNlID09PSAxNiB8fCBiYXNlID09PSAnaGV4Jykge1xuICAgICAgb3V0ID0gJyc7XG4gICAgICB2YXIgb2ZmID0gMDtcbiAgICAgIHZhciBjYXJyeSA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHcgPSB0aGlzLndvcmRzW2ldO1xuICAgICAgICB2YXIgd29yZCA9ICgoKHcgPDwgb2ZmKSB8IGNhcnJ5KSAmIDB4ZmZmZmZmKS50b1N0cmluZygxNik7XG4gICAgICAgIGNhcnJ5ID0gKHcgPj4+ICgyNCAtIG9mZikpICYgMHhmZmZmZmY7XG4gICAgICAgIGlmIChjYXJyeSAhPT0gMCB8fCBpICE9PSB0aGlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBvdXQgPSB6ZXJvc1s2IC0gd29yZC5sZW5ndGhdICsgd29yZCArIG91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgPSB3b3JkICsgb3V0O1xuICAgICAgICB9XG4gICAgICAgIG9mZiArPSAyO1xuICAgICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgICAgb2ZmIC09IDI2O1xuICAgICAgICAgIGktLTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNhcnJ5ICE9PSAwKSB7XG4gICAgICAgIG91dCA9IGNhcnJ5LnRvU3RyaW5nKDE2KSArIG91dDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChvdXQubGVuZ3RoICUgcGFkZGluZyAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnMCcgKyBvdXQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnLScgKyBvdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGlmIChiYXNlID09PSAoYmFzZSB8IDApICYmIGJhc2UgPj0gMiAmJiBiYXNlIDw9IDM2KSB7XG4gICAgICAvLyB2YXIgZ3JvdXBTaXplID0gTWF0aC5mbG9vcihCTi53b3JkU2l6ZSAqIE1hdGguTE4yIC8gTWF0aC5sb2coYmFzZSkpO1xuICAgICAgdmFyIGdyb3VwU2l6ZSA9IGdyb3VwU2l6ZXNbYmFzZV07XG4gICAgICAvLyB2YXIgZ3JvdXBCYXNlID0gTWF0aC5wb3coYmFzZSwgZ3JvdXBTaXplKTtcbiAgICAgIHZhciBncm91cEJhc2UgPSBncm91cEJhc2VzW2Jhc2VdO1xuICAgICAgb3V0ID0gJyc7XG4gICAgICB2YXIgYyA9IHRoaXMuY2xvbmUoKTtcbiAgICAgIGMubmVnYXRpdmUgPSAwO1xuICAgICAgd2hpbGUgKCFjLmlzWmVybygpKSB7XG4gICAgICAgIHZhciByID0gYy5tb2RuKGdyb3VwQmFzZSkudG9TdHJpbmcoYmFzZSk7XG4gICAgICAgIGMgPSBjLmlkaXZuKGdyb3VwQmFzZSk7XG5cbiAgICAgICAgaWYgKCFjLmlzWmVybygpKSB7XG4gICAgICAgICAgb3V0ID0gemVyb3NbZ3JvdXBTaXplIC0gci5sZW5ndGhdICsgciArIG91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgPSByICsgb3V0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc1plcm8oKSkge1xuICAgICAgICBvdXQgPSAnMCcgKyBvdXQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAob3V0Lmxlbmd0aCAlIHBhZGRpbmcgIT09IDApIHtcbiAgICAgICAgb3V0ID0gJzAnICsgb3V0O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgb3V0ID0gJy0nICsgb3V0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICBhc3NlcnQoZmFsc2UsICdCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Jyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvTnVtYmVyID0gZnVuY3Rpb24gdG9OdW1iZXIgKCkge1xuICAgIHZhciByZXQgPSB0aGlzLndvcmRzWzBdO1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMikge1xuICAgICAgcmV0ICs9IHRoaXMud29yZHNbMV0gKiAweDQwMDAwMDA7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxlbmd0aCA9PT0gMyAmJiB0aGlzLndvcmRzWzJdID09PSAweDAxKSB7XG4gICAgICAvLyBOT1RFOiBhdCB0aGlzIHN0YWdlIGl0IGlzIGtub3duIHRoYXQgdGhlIHRvcCBiaXQgaXMgc2V0XG4gICAgICByZXQgKz0gMHgxMDAwMDAwMDAwMDAwMCArICh0aGlzLndvcmRzWzFdICogMHg0MDAwMDAwKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubGVuZ3RoID4gMikge1xuICAgICAgYXNzZXJ0KGZhbHNlLCAnTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzJyk7XG4gICAgfVxuICAgIHJldHVybiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkgPyAtcmV0IDogcmV0O1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKDE2KTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9CdWZmZXIgPSBmdW5jdGlvbiB0b0J1ZmZlciAoZW5kaWFuLCBsZW5ndGgpIHtcbiAgICBhc3NlcnQodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpO1xuICAgIHJldHVybiB0aGlzLnRvQXJyYXlMaWtlKEJ1ZmZlciwgZW5kaWFuLCBsZW5ndGgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gdG9BcnJheSAoZW5kaWFuLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSwgZW5kaWFuLCBsZW5ndGgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b0FycmF5TGlrZSA9IGZ1bmN0aW9uIHRvQXJyYXlMaWtlIChBcnJheVR5cGUsIGVuZGlhbiwgbGVuZ3RoKSB7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0aGlzLmJ5dGVMZW5ndGgoKTtcbiAgICB2YXIgcmVxTGVuZ3RoID0gbGVuZ3RoIHx8IE1hdGgubWF4KDEsIGJ5dGVMZW5ndGgpO1xuICAgIGFzc2VydChieXRlTGVuZ3RoIDw9IHJlcUxlbmd0aCwgJ2J5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgnKTtcbiAgICBhc3NlcnQocmVxTGVuZ3RoID4gMCwgJ1JlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCcpO1xuXG4gICAgdGhpcy5zdHJpcCgpO1xuICAgIHZhciBsaXR0bGVFbmRpYW4gPSBlbmRpYW4gPT09ICdsZSc7XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheVR5cGUocmVxTGVuZ3RoKTtcblxuICAgIHZhciBiLCBpO1xuICAgIHZhciBxID0gdGhpcy5jbG9uZSgpO1xuICAgIGlmICghbGl0dGxlRW5kaWFuKSB7XG4gICAgICAvLyBBc3N1bWUgYmlnLWVuZGlhblxuICAgICAgZm9yIChpID0gMDsgaSA8IHJlcUxlbmd0aCAtIGJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgICByZXNbaV0gPSAwO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSAwOyAhcS5pc1plcm8oKTsgaSsrKSB7XG4gICAgICAgIGIgPSBxLmFuZGxuKDB4ZmYpO1xuICAgICAgICBxLml1c2hybig4KTtcblxuICAgICAgICByZXNbcmVxTGVuZ3RoIC0gaSAtIDFdID0gYjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gMDsgIXEuaXNaZXJvKCk7IGkrKykge1xuICAgICAgICBiID0gcS5hbmRsbigweGZmKTtcbiAgICAgICAgcS5pdXNocm4oOCk7XG5cbiAgICAgICAgcmVzW2ldID0gYjtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IGkgPCByZXFMZW5ndGg7IGkrKykge1xuICAgICAgICByZXNbaV0gPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgaWYgKE1hdGguY2x6MzIpIHtcbiAgICBCTi5wcm90b3R5cGUuX2NvdW50Qml0cyA9IGZ1bmN0aW9uIF9jb3VudEJpdHMgKHcpIHtcbiAgICAgIHJldHVybiAzMiAtIE1hdGguY2x6MzIodyk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBCTi5wcm90b3R5cGUuX2NvdW50Qml0cyA9IGZ1bmN0aW9uIF9jb3VudEJpdHMgKHcpIHtcbiAgICAgIHZhciB0ID0gdztcbiAgICAgIHZhciByID0gMDtcbiAgICAgIGlmICh0ID49IDB4MTAwMCkge1xuICAgICAgICByICs9IDEzO1xuICAgICAgICB0ID4+Pj0gMTM7XG4gICAgICB9XG4gICAgICBpZiAodCA+PSAweDQwKSB7XG4gICAgICAgIHIgKz0gNztcbiAgICAgICAgdCA+Pj49IDc7XG4gICAgICB9XG4gICAgICBpZiAodCA+PSAweDgpIHtcbiAgICAgICAgciArPSA0O1xuICAgICAgICB0ID4+Pj0gNDtcbiAgICAgIH1cbiAgICAgIGlmICh0ID49IDB4MDIpIHtcbiAgICAgICAgciArPSAyO1xuICAgICAgICB0ID4+Pj0gMjtcbiAgICAgIH1cbiAgICAgIHJldHVybiByICsgdDtcbiAgICB9O1xuICB9XG5cbiAgQk4ucHJvdG90eXBlLl96ZXJvQml0cyA9IGZ1bmN0aW9uIF96ZXJvQml0cyAodykge1xuICAgIC8vIFNob3J0LWN1dFxuICAgIGlmICh3ID09PSAwKSByZXR1cm4gMjY7XG5cbiAgICB2YXIgdCA9IHc7XG4gICAgdmFyIHIgPSAwO1xuICAgIGlmICgodCAmIDB4MWZmZikgPT09IDApIHtcbiAgICAgIHIgKz0gMTM7XG4gICAgICB0ID4+Pj0gMTM7XG4gICAgfVxuICAgIGlmICgodCAmIDB4N2YpID09PSAwKSB7XG4gICAgICByICs9IDc7XG4gICAgICB0ID4+Pj0gNztcbiAgICB9XG4gICAgaWYgKCh0ICYgMHhmKSA9PT0gMCkge1xuICAgICAgciArPSA0O1xuICAgICAgdCA+Pj49IDQ7XG4gICAgfVxuICAgIGlmICgodCAmIDB4MykgPT09IDApIHtcbiAgICAgIHIgKz0gMjtcbiAgICAgIHQgPj4+PSAyO1xuICAgIH1cbiAgICBpZiAoKHQgJiAweDEpID09PSAwKSB7XG4gICAgICByKys7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9O1xuXG4gIC8vIFJldHVybiBudW1iZXIgb2YgdXNlZCBiaXRzIGluIGEgQk5cbiAgQk4ucHJvdG90eXBlLmJpdExlbmd0aCA9IGZ1bmN0aW9uIGJpdExlbmd0aCAoKSB7XG4gICAgdmFyIHcgPSB0aGlzLndvcmRzW3RoaXMubGVuZ3RoIC0gMV07XG4gICAgdmFyIGhpID0gdGhpcy5fY291bnRCaXRzKHcpO1xuICAgIHJldHVybiAodGhpcy5sZW5ndGggLSAxKSAqIDI2ICsgaGk7XG4gIH07XG5cbiAgZnVuY3Rpb24gdG9CaXRBcnJheSAobnVtKSB7XG4gICAgdmFyIHcgPSBuZXcgQXJyYXkobnVtLmJpdExlbmd0aCgpKTtcblxuICAgIGZvciAodmFyIGJpdCA9IDA7IGJpdCA8IHcubGVuZ3RoOyBiaXQrKykge1xuICAgICAgdmFyIG9mZiA9IChiaXQgLyAyNikgfCAwO1xuICAgICAgdmFyIHdiaXQgPSBiaXQgJSAyNjtcblxuICAgICAgd1tiaXRdID0gKG51bS53b3Jkc1tvZmZdICYgKDEgPDwgd2JpdCkpID4+PiB3Yml0O1xuICAgIH1cblxuICAgIHJldHVybiB3O1xuICB9XG5cbiAgLy8gTnVtYmVyIG9mIHRyYWlsaW5nIHplcm8gYml0c1xuICBCTi5wcm90b3R5cGUuemVyb0JpdHMgPSBmdW5jdGlvbiB6ZXJvQml0cyAoKSB7XG4gICAgaWYgKHRoaXMuaXNaZXJvKCkpIHJldHVybiAwO1xuXG4gICAgdmFyIHIgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGIgPSB0aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2ldKTtcbiAgICAgIHIgKz0gYjtcbiAgICAgIGlmIChiICE9PSAyNikgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ieXRlTGVuZ3RoID0gZnVuY3Rpb24gYnl0ZUxlbmd0aCAoKSB7XG4gICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpIC8gOCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvVHdvcyA9IGZ1bmN0aW9uIHRvVHdvcyAod2lkdGgpIHtcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuYWJzKCkuaW5vdG4od2lkdGgpLmlhZGRuKDEpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5mcm9tVHdvcyA9IGZ1bmN0aW9uIGZyb21Ud29zICh3aWR0aCkge1xuICAgIGlmICh0aGlzLnRlc3RuKHdpZHRoIC0gMSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vdG4od2lkdGgpLmlhZGRuKDEpLmluZWcoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaXNOZWcgPSBmdW5jdGlvbiBpc05lZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRpdmUgIT09IDA7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG5lZ2F0aXZlIGNsb25lIG9mIGB0aGlzYFxuICBCTi5wcm90b3R5cGUubmVnID0gZnVuY3Rpb24gbmVnICgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW5lZyA9IGZ1bmN0aW9uIGluZWcgKCkge1xuICAgIGlmICghdGhpcy5pc1plcm8oKSkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSBePSAxO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIE9yIGBudW1gIHdpdGggYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pdW9yID0gZnVuY3Rpb24gaXVvciAobnVtKSB7XG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoIDwgbnVtLmxlbmd0aCkge1xuICAgICAgdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXSA9IDA7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldIHwgbnVtLndvcmRzW2ldO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlvciA9IGZ1bmN0aW9uIGlvciAobnVtKSB7XG4gICAgYXNzZXJ0KCh0aGlzLm5lZ2F0aXZlIHwgbnVtLm5lZ2F0aXZlKSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXVvcihudW0pO1xuICB9O1xuXG4gIC8vIE9yIGBudW1gIHdpdGggYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5vciA9IGZ1bmN0aW9uIG9yIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLmlvcihudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5pb3IodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnVvciA9IGZ1bmN0aW9uIHVvciAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5pdW9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLml1b3IodGhpcyk7XG4gIH07XG5cbiAgLy8gQW5kIGBudW1gIHdpdGggYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pdWFuZCA9IGZ1bmN0aW9uIGl1YW5kIChudW0pIHtcbiAgICAvLyBiID0gbWluLWxlbmd0aChudW0sIHRoaXMpXG4gICAgdmFyIGI7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkge1xuICAgICAgYiA9IG51bTtcbiAgICB9IGVsc2Uge1xuICAgICAgYiA9IHRoaXM7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gdGhpcy53b3Jkc1tpXSAmIG51bS53b3Jkc1tpXTtcbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCA9IGIubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaWFuZCA9IGZ1bmN0aW9uIGlhbmQgKG51bSkge1xuICAgIGFzc2VydCgodGhpcy5uZWdhdGl2ZSB8IG51bS5uZWdhdGl2ZSkgPT09IDApO1xuICAgIHJldHVybiB0aGlzLml1YW5kKG51bSk7XG4gIH07XG5cbiAgLy8gQW5kIGBudW1gIHdpdGggYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5hbmQgPSBmdW5jdGlvbiBhbmQgKG51bSkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaWFuZChudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5pYW5kKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51YW5kID0gZnVuY3Rpb24gdWFuZCAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5pdWFuZChudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5pdWFuZCh0aGlzKTtcbiAgfTtcblxuICAvLyBYb3IgYG51bWAgd2l0aCBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1eG9yID0gZnVuY3Rpb24gaXV4b3IgKG51bSkge1xuICAgIC8vIGEubGVuZ3RoID4gYi5sZW5ndGhcbiAgICB2YXIgYTtcbiAgICB2YXIgYjtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSB7XG4gICAgICBhID0gdGhpcztcbiAgICAgIGIgPSBudW07XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSBudW07XG4gICAgICBiID0gdGhpcztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBhLndvcmRzW2ldIF4gYi53b3Jkc1tpXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcyAhPT0gYSkge1xuICAgICAgZm9yICg7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSBhLndvcmRzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gYS5sZW5ndGg7XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5peG9yID0gZnVuY3Rpb24gaXhvciAobnVtKSB7XG4gICAgYXNzZXJ0KCh0aGlzLm5lZ2F0aXZlIHwgbnVtLm5lZ2F0aXZlKSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXV4b3IobnVtKTtcbiAgfTtcblxuICAvLyBYb3IgYG51bWAgd2l0aCBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLnhvciA9IGZ1bmN0aW9uIHhvciAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5peG9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLml4b3IodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnV4b3IgPSBmdW5jdGlvbiB1eG9yIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml1eG9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLml1eG9yKHRoaXMpO1xuICB9O1xuXG4gIC8vIE5vdCBgYHRoaXNgYCB3aXRoIGBgd2lkdGhgYCBiaXR3aWR0aFxuICBCTi5wcm90b3R5cGUuaW5vdG4gPSBmdW5jdGlvbiBpbm90biAod2lkdGgpIHtcbiAgICBhc3NlcnQodHlwZW9mIHdpZHRoID09PSAnbnVtYmVyJyAmJiB3aWR0aCA+PSAwKTtcblxuICAgIHZhciBieXRlc05lZWRlZCA9IE1hdGguY2VpbCh3aWR0aCAvIDI2KSB8IDA7XG4gICAgdmFyIGJpdHNMZWZ0ID0gd2lkdGggJSAyNjtcblxuICAgIC8vIEV4dGVuZCB0aGUgYnVmZmVyIHdpdGggbGVhZGluZyB6ZXJvZXNcbiAgICB0aGlzLl9leHBhbmQoYnl0ZXNOZWVkZWQpO1xuXG4gICAgaWYgKGJpdHNMZWZ0ID4gMCkge1xuICAgICAgYnl0ZXNOZWVkZWQtLTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgY29tcGxldGUgd29yZHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzTmVlZGVkOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB+dGhpcy53b3Jkc1tpXSAmIDB4M2ZmZmZmZjtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHJlc2lkdWVcbiAgICBpZiAoYml0c0xlZnQgPiAwKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gfnRoaXMud29yZHNbaV0gJiAoMHgzZmZmZmZmID4+ICgyNiAtIGJpdHNMZWZ0KSk7XG4gICAgfVxuXG4gICAgLy8gQW5kIHJlbW92ZSBsZWFkaW5nIHplcm9lc1xuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLm5vdG4gPSBmdW5jdGlvbiBub3RuICh3aWR0aCkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaW5vdG4od2lkdGgpO1xuICB9O1xuXG4gIC8vIFNldCBgYml0YCBvZiBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLnNldG4gPSBmdW5jdGlvbiBzZXRuIChiaXQsIHZhbCkge1xuICAgIGFzc2VydCh0eXBlb2YgYml0ID09PSAnbnVtYmVyJyAmJiBiaXQgPj0gMCk7XG5cbiAgICB2YXIgb2ZmID0gKGJpdCAvIDI2KSB8IDA7XG4gICAgdmFyIHdiaXQgPSBiaXQgJSAyNjtcblxuICAgIHRoaXMuX2V4cGFuZChvZmYgKyAxKTtcblxuICAgIGlmICh2YWwpIHtcbiAgICAgIHRoaXMud29yZHNbb2ZmXSA9IHRoaXMud29yZHNbb2ZmXSB8ICgxIDw8IHdiaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndvcmRzW29mZl0gPSB0aGlzLndvcmRzW29mZl0gJiB+KDEgPDwgd2JpdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICAvLyBBZGQgYG51bWAgdG8gYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pYWRkID0gZnVuY3Rpb24gaWFkZCAobnVtKSB7XG4gICAgdmFyIHI7XG5cbiAgICAvLyBuZWdhdGl2ZSArIHBvc2l0aXZlXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgbnVtLm5lZ2F0aXZlID09PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHIgPSB0aGlzLmlzdWIobnVtKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgXj0gMTtcbiAgICAgIHJldHVybiB0aGlzLl9ub3JtU2lnbigpO1xuXG4gICAgLy8gcG9zaXRpdmUgKyBuZWdhdGl2ZVxuICAgIH0gZWxzZSBpZiAodGhpcy5uZWdhdGl2ZSA9PT0gMCAmJiBudW0ubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDA7XG4gICAgICByID0gdGhpcy5pc3ViKG51bSk7XG4gICAgICBudW0ubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHIuX25vcm1TaWduKCk7XG4gICAgfVxuXG4gICAgLy8gYS5sZW5ndGggPiBiLmxlbmd0aFxuICAgIHZhciBhLCBiO1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHtcbiAgICAgIGEgPSB0aGlzO1xuICAgICAgYiA9IG51bTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IG51bTtcbiAgICAgIGIgPSB0aGlzO1xuICAgIH1cblxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICByID0gKGEud29yZHNbaV0gfCAwKSArIChiLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIHRoaXMud29yZHNbaV0gPSByICYgMHgzZmZmZmZmO1xuICAgICAgY2FycnkgPSByID4+PiAyNjtcbiAgICB9XG4gICAgZm9yICg7IGNhcnJ5ICE9PSAwICYmIGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICByID0gKGEud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHIgJiAweDNmZmZmZmY7XG4gICAgICBjYXJyeSA9IHIgPj4+IDI2O1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgaWYgKGNhcnJ5ICE9PSAwKSB7XG4gICAgICB0aGlzLndvcmRzW3RoaXMubGVuZ3RoXSA9IGNhcnJ5O1xuICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICAvLyBDb3B5IHRoZSByZXN0IG9mIHRoZSB3b3Jkc1xuICAgIH0gZWxzZSBpZiAoYSAhPT0gdGhpcykge1xuICAgICAgZm9yICg7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSBhLndvcmRzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIEFkZCBgbnVtYCB0byBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCAobnVtKSB7XG4gICAgdmFyIHJlcztcbiAgICBpZiAobnVtLm5lZ2F0aXZlICE9PSAwICYmIHRoaXMubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDA7XG4gICAgICByZXMgPSB0aGlzLnN1YihudW0pO1xuICAgICAgbnVtLm5lZ2F0aXZlIF49IDE7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSBpZiAobnVtLm5lZ2F0aXZlID09PSAwICYmIHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgcmVzID0gbnVtLnN1Yih0aGlzKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGQobnVtKTtcblxuICAgIHJldHVybiBudW0uY2xvbmUoKS5pYWRkKHRoaXMpO1xuICB9O1xuXG4gIC8vIFN1YnRyYWN0IGBudW1gIGZyb20gYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pc3ViID0gZnVuY3Rpb24gaXN1YiAobnVtKSB7XG4gICAgLy8gdGhpcyAtICgtbnVtKSA9IHRoaXMgKyBudW1cbiAgICBpZiAobnVtLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICBudW0ubmVnYXRpdmUgPSAwO1xuICAgICAgdmFyIHIgPSB0aGlzLmlhZGQobnVtKTtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gci5fbm9ybVNpZ24oKTtcblxuICAgIC8vIC10aGlzIC0gbnVtID0gLSh0aGlzICsgbnVtKVxuICAgIH0gZWxzZSBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICB0aGlzLmlhZGQobnVtKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHRoaXMuX25vcm1TaWduKCk7XG4gICAgfVxuXG4gICAgLy8gQXQgdGhpcyBwb2ludCBib3RoIG51bWJlcnMgYXJlIHBvc2l0aXZlXG4gICAgdmFyIGNtcCA9IHRoaXMuY21wKG51bSk7XG5cbiAgICAvLyBPcHRpbWl6YXRpb24gLSB6ZXJvaWZ5XG4gICAgaWYgKGNtcCA9PT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgICB0aGlzLndvcmRzWzBdID0gMDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGEgPiBiXG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGNtcCA+IDApIHtcbiAgICAgIGEgPSB0aGlzO1xuICAgICAgYiA9IG51bTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IG51bTtcbiAgICAgIGIgPSB0aGlzO1xuICAgIH1cblxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICByID0gKGEud29yZHNbaV0gfCAwKSAtIChiLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gciA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSByICYgMHgzZmZmZmZmO1xuICAgIH1cbiAgICBmb3IgKDsgY2FycnkgIT09IDAgJiYgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApICsgY2Fycnk7XG4gICAgICBjYXJyeSA9IHIgPj4gMjY7XG4gICAgICB0aGlzLndvcmRzW2ldID0gciAmIDB4M2ZmZmZmZjtcbiAgICB9XG5cbiAgICAvLyBDb3B5IHJlc3Qgb2YgdGhlIHdvcmRzXG4gICAgaWYgKGNhcnJ5ID09PSAwICYmIGkgPCBhLmxlbmd0aCAmJiBhICE9PSB0aGlzKSB7XG4gICAgICBmb3IgKDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggPSBNYXRoLm1heCh0aGlzLmxlbmd0aCwgaSk7XG5cbiAgICBpZiAoYSAhPT0gdGhpcykge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICAvLyBTdWJ0cmFjdCBgbnVtYCBmcm9tIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuc3ViID0gZnVuY3Rpb24gc3ViIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIobnVtKTtcbiAgfTtcblxuICBmdW5jdGlvbiBzbWFsbE11bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIG91dC5uZWdhdGl2ZSA9IG51bS5uZWdhdGl2ZSBeIHNlbGYubmVnYXRpdmU7XG4gICAgdmFyIGxlbiA9IChzZWxmLmxlbmd0aCArIG51bS5sZW5ndGgpIHwgMDtcbiAgICBvdXQubGVuZ3RoID0gbGVuO1xuICAgIGxlbiA9IChsZW4gLSAxKSB8IDA7XG5cbiAgICAvLyBQZWVsIG9uZSBpdGVyYXRpb24gKGNvbXBpbGVyIGNhbid0IGRvIGl0LCBiZWNhdXNlIG9mIGNvZGUgY29tcGxleGl0eSlcbiAgICB2YXIgYSA9IHNlbGYud29yZHNbMF0gfCAwO1xuICAgIHZhciBiID0gbnVtLndvcmRzWzBdIHwgMDtcbiAgICB2YXIgciA9IGEgKiBiO1xuXG4gICAgdmFyIGxvID0gciAmIDB4M2ZmZmZmZjtcbiAgICB2YXIgY2FycnkgPSAociAvIDB4NDAwMDAwMCkgfCAwO1xuICAgIG91dC53b3Jkc1swXSA9IGxvO1xuXG4gICAgZm9yICh2YXIgayA9IDE7IGsgPCBsZW47IGsrKykge1xuICAgICAgLy8gU3VtIGFsbCB3b3JkcyB3aXRoIHRoZSBzYW1lIGBpICsgaiA9IGtgIGFuZCBhY2N1bXVsYXRlIGBuY2FycnlgLFxuICAgICAgLy8gbm90ZSB0aGF0IG5jYXJyeSBjb3VsZCBiZSA+PSAweDNmZmZmZmZcbiAgICAgIHZhciBuY2FycnkgPSBjYXJyeSA+Pj4gMjY7XG4gICAgICB2YXIgcndvcmQgPSBjYXJyeSAmIDB4M2ZmZmZmZjtcbiAgICAgIHZhciBtYXhKID0gTWF0aC5taW4oaywgbnVtLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaiA9IE1hdGgubWF4KDAsIGsgLSBzZWxmLmxlbmd0aCArIDEpOyBqIDw9IG1heEo7IGorKykge1xuICAgICAgICB2YXIgaSA9IChrIC0gaikgfCAwO1xuICAgICAgICBhID0gc2VsZi53b3Jkc1tpXSB8IDA7XG4gICAgICAgIGIgPSBudW0ud29yZHNbal0gfCAwO1xuICAgICAgICByID0gYSAqIGIgKyByd29yZDtcbiAgICAgICAgbmNhcnJ5ICs9IChyIC8gMHg0MDAwMDAwKSB8IDA7XG4gICAgICAgIHJ3b3JkID0gciAmIDB4M2ZmZmZmZjtcbiAgICAgIH1cbiAgICAgIG91dC53b3Jkc1trXSA9IHJ3b3JkIHwgMDtcbiAgICAgIGNhcnJ5ID0gbmNhcnJ5IHwgMDtcbiAgICB9XG4gICAgaWYgKGNhcnJ5ICE9PSAwKSB7XG4gICAgICBvdXQud29yZHNba10gPSBjYXJyeSB8IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5sZW5ndGgtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0LnN0cmlwKCk7XG4gIH1cblxuICAvLyBUT0RPKGluZHV0bnkpOiBpdCBtYXkgYmUgcmVhc29uYWJsZSB0byBvbWl0IGl0IGZvciB1c2VycyB3aG8gZG9uJ3QgbmVlZFxuICAvLyB0byB3b3JrIHdpdGggMjU2LWJpdCBudW1iZXJzLCBvdGhlcndpc2UgaXQgZ2l2ZXMgMjAlIGltcHJvdmVtZW50IGZvciAyNTYtYml0XG4gIC8vIG11bHRpcGxpY2F0aW9uIChsaWtlIGVsbGlwdGljIHNlY3AyNTZrMSkuXG4gIHZhciBjb21iMTBNdWxUbyA9IGZ1bmN0aW9uIGNvbWIxME11bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIHZhciBhID0gc2VsZi53b3JkcztcbiAgICB2YXIgYiA9IG51bS53b3JkcztcbiAgICB2YXIgbyA9IG91dC53b3JkcztcbiAgICB2YXIgYyA9IDA7XG4gICAgdmFyIGxvO1xuICAgIHZhciBtaWQ7XG4gICAgdmFyIGhpO1xuICAgIHZhciBhMCA9IGFbMF0gfCAwO1xuICAgIHZhciBhbDAgPSBhMCAmIDB4MWZmZjtcbiAgICB2YXIgYWgwID0gYTAgPj4+IDEzO1xuICAgIHZhciBhMSA9IGFbMV0gfCAwO1xuICAgIHZhciBhbDEgPSBhMSAmIDB4MWZmZjtcbiAgICB2YXIgYWgxID0gYTEgPj4+IDEzO1xuICAgIHZhciBhMiA9IGFbMl0gfCAwO1xuICAgIHZhciBhbDIgPSBhMiAmIDB4MWZmZjtcbiAgICB2YXIgYWgyID0gYTIgPj4+IDEzO1xuICAgIHZhciBhMyA9IGFbM10gfCAwO1xuICAgIHZhciBhbDMgPSBhMyAmIDB4MWZmZjtcbiAgICB2YXIgYWgzID0gYTMgPj4+IDEzO1xuICAgIHZhciBhNCA9IGFbNF0gfCAwO1xuICAgIHZhciBhbDQgPSBhNCAmIDB4MWZmZjtcbiAgICB2YXIgYWg0ID0gYTQgPj4+IDEzO1xuICAgIHZhciBhNSA9IGFbNV0gfCAwO1xuICAgIHZhciBhbDUgPSBhNSAmIDB4MWZmZjtcbiAgICB2YXIgYWg1ID0gYTUgPj4+IDEzO1xuICAgIHZhciBhNiA9IGFbNl0gfCAwO1xuICAgIHZhciBhbDYgPSBhNiAmIDB4MWZmZjtcbiAgICB2YXIgYWg2ID0gYTYgPj4+IDEzO1xuICAgIHZhciBhNyA9IGFbN10gfCAwO1xuICAgIHZhciBhbDcgPSBhNyAmIDB4MWZmZjtcbiAgICB2YXIgYWg3ID0gYTcgPj4+IDEzO1xuICAgIHZhciBhOCA9IGFbOF0gfCAwO1xuICAgIHZhciBhbDggPSBhOCAmIDB4MWZmZjtcbiAgICB2YXIgYWg4ID0gYTggPj4+IDEzO1xuICAgIHZhciBhOSA9IGFbOV0gfCAwO1xuICAgIHZhciBhbDkgPSBhOSAmIDB4MWZmZjtcbiAgICB2YXIgYWg5ID0gYTkgPj4+IDEzO1xuICAgIHZhciBiMCA9IGJbMF0gfCAwO1xuICAgIHZhciBibDAgPSBiMCAmIDB4MWZmZjtcbiAgICB2YXIgYmgwID0gYjAgPj4+IDEzO1xuICAgIHZhciBiMSA9IGJbMV0gfCAwO1xuICAgIHZhciBibDEgPSBiMSAmIDB4MWZmZjtcbiAgICB2YXIgYmgxID0gYjEgPj4+IDEzO1xuICAgIHZhciBiMiA9IGJbMl0gfCAwO1xuICAgIHZhciBibDIgPSBiMiAmIDB4MWZmZjtcbiAgICB2YXIgYmgyID0gYjIgPj4+IDEzO1xuICAgIHZhciBiMyA9IGJbM10gfCAwO1xuICAgIHZhciBibDMgPSBiMyAmIDB4MWZmZjtcbiAgICB2YXIgYmgzID0gYjMgPj4+IDEzO1xuICAgIHZhciBiNCA9IGJbNF0gfCAwO1xuICAgIHZhciBibDQgPSBiNCAmIDB4MWZmZjtcbiAgICB2YXIgYmg0ID0gYjQgPj4+IDEzO1xuICAgIHZhciBiNSA9IGJbNV0gfCAwO1xuICAgIHZhciBibDUgPSBiNSAmIDB4MWZmZjtcbiAgICB2YXIgYmg1ID0gYjUgPj4+IDEzO1xuICAgIHZhciBiNiA9IGJbNl0gfCAwO1xuICAgIHZhciBibDYgPSBiNiAmIDB4MWZmZjtcbiAgICB2YXIgYmg2ID0gYjYgPj4+IDEzO1xuICAgIHZhciBiNyA9IGJbN10gfCAwO1xuICAgIHZhciBibDcgPSBiNyAmIDB4MWZmZjtcbiAgICB2YXIgYmg3ID0gYjcgPj4+IDEzO1xuICAgIHZhciBiOCA9IGJbOF0gfCAwO1xuICAgIHZhciBibDggPSBiOCAmIDB4MWZmZjtcbiAgICB2YXIgYmg4ID0gYjggPj4+IDEzO1xuICAgIHZhciBiOSA9IGJbOV0gfCAwO1xuICAgIHZhciBibDkgPSBiOSAmIDB4MWZmZjtcbiAgICB2YXIgYmg5ID0gYjkgPj4+IDEzO1xuXG4gICAgb3V0Lm5lZ2F0aXZlID0gc2VsZi5uZWdhdGl2ZSBeIG51bS5uZWdhdGl2ZTtcbiAgICBvdXQubGVuZ3RoID0gMTk7XG4gICAgLyogayA9IDAgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDAsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMCwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoMCwgYmgwKTtcbiAgICB2YXIgdzAgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcwID4+PiAyNikpIHwgMDtcbiAgICB3MCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDEgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDEsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMSwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoMSwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDAsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMCwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgwLCBiaDEpKSB8IDA7XG4gICAgdmFyIHcxID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MSA+Pj4gMjYpKSB8IDA7XG4gICAgdzEgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAyICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWwyLCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDIsIGJoMCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsMCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDIsIGJoMCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmwxKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmgxKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmwyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsMikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoMikpIHwgMDtcbiAgICB2YXIgdzIgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcyID4+PiAyNikpIHwgMDtcbiAgICB3MiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDMgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDMsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMywgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoMywgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoMykpIHwgMDtcbiAgICB2YXIgdzMgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHczID4+PiAyNikpIHwgMDtcbiAgICB3MyAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDQgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDQsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNCwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoNCwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMSwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwxLCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDEsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDEsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDAsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMCwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgwLCBiaDQpKSB8IDA7XG4gICAgdmFyIHc0ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3NCA+Pj4gMjYpKSB8IDA7XG4gICAgdzQgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSA1ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw1LCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDUsIGJoMCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsMCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDUsIGJoMCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmwxKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmgxKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmwyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsMikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoMikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmgzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDMpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDMpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw0KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg0KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsNSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoNSkpIHwgMDtcbiAgICB2YXIgdzUgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc1ID4+PiAyNikpIHwgMDtcbiAgICB3NSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDYgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDYsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNiwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoNiwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoNikpIHwgMDtcbiAgICB2YXIgdzYgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc2ID4+PiAyNikpIHwgMDtcbiAgICB3NiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDcgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDcsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNywgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoNywgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMSwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwxLCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDEsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDEsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDAsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMCwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgwLCBiaDcpKSB8IDA7XG4gICAgdmFyIHc3ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3NyA+Pj4gMjYpKSB8IDA7XG4gICAgdzcgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSA4ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw4LCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDgsIGJoMCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsMCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDgsIGJoMCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmwxKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmgxKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmwyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsMikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoMikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmgzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDMpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDMpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw0KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg0KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsNSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoNSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDYpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg3KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoOCkpIHwgMDtcbiAgICB2YXIgdzggPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc4ID4+PiAyNikpIHwgMDtcbiAgICB3OCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDkgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzkgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc5ID4+PiAyNikpIHwgMDtcbiAgICB3OSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDEwICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDEpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoMSk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsMSkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoMSk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMSwgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwxLCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDEsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDEsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzEwID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTAgPj4+IDI2KSkgfCAwO1xuICAgIHcxMCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDExICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDIpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoMik7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsMikpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoMik7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTEgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxMSA+Pj4gMjYpKSB8IDA7XG4gICAgdzExICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTIgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMyk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgzKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmwzKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmgzKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzEyID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTIgPj4+IDI2KSkgfCAwO1xuICAgIHcxMiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDEzICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDQpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoNCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsNCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoNCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzEzID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTMgPj4+IDI2KSkgfCAwO1xuICAgIHcxMyAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDE0ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDUpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoNSk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsNSkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoNSk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTQgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxNCA+Pj4gMjYpKSB8IDA7XG4gICAgdzE0ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTUgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNik7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg2KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw2KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg2KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzE1ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTUgPj4+IDI2KSkgfCAwO1xuICAgIHcxNSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDE2ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDcpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoNyk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsNykpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoNyk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzE2ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTYgPj4+IDI2KSkgfCAwO1xuICAgIHcxNiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDE3ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDgpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoOCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsOCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoOCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTcgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxNyA+Pj4gMjYpKSB8IDA7XG4gICAgdzE3ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTggKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsOSk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg5KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw5KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg5KTtcbiAgICB2YXIgdzE4ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTggPj4+IDI2KSkgfCAwO1xuICAgIHcxOCAmPSAweDNmZmZmZmY7XG4gICAgb1swXSA9IHcwO1xuICAgIG9bMV0gPSB3MTtcbiAgICBvWzJdID0gdzI7XG4gICAgb1szXSA9IHczO1xuICAgIG9bNF0gPSB3NDtcbiAgICBvWzVdID0gdzU7XG4gICAgb1s2XSA9IHc2O1xuICAgIG9bN10gPSB3NztcbiAgICBvWzhdID0gdzg7XG4gICAgb1s5XSA9IHc5O1xuICAgIG9bMTBdID0gdzEwO1xuICAgIG9bMTFdID0gdzExO1xuICAgIG9bMTJdID0gdzEyO1xuICAgIG9bMTNdID0gdzEzO1xuICAgIG9bMTRdID0gdzE0O1xuICAgIG9bMTVdID0gdzE1O1xuICAgIG9bMTZdID0gdzE2O1xuICAgIG9bMTddID0gdzE3O1xuICAgIG9bMThdID0gdzE4O1xuICAgIGlmIChjICE9PSAwKSB7XG4gICAgICBvWzE5XSA9IGM7XG4gICAgICBvdXQubGVuZ3RoKys7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH07XG5cbiAgLy8gUG9seWZpbGwgY29tYlxuICBpZiAoIU1hdGguaW11bCkge1xuICAgIGNvbWIxME11bFRvID0gc21hbGxNdWxUbztcbiAgfVxuXG4gIGZ1bmN0aW9uIGJpZ011bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIG91dC5uZWdhdGl2ZSA9IG51bS5uZWdhdGl2ZSBeIHNlbGYubmVnYXRpdmU7XG4gICAgb3V0Lmxlbmd0aCA9IHNlbGYubGVuZ3RoICsgbnVtLmxlbmd0aDtcblxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgdmFyIGhuY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgb3V0Lmxlbmd0aCAtIDE7IGsrKykge1xuICAgICAgLy8gU3VtIGFsbCB3b3JkcyB3aXRoIHRoZSBzYW1lIGBpICsgaiA9IGtgIGFuZCBhY2N1bXVsYXRlIGBuY2FycnlgLFxuICAgICAgLy8gbm90ZSB0aGF0IG5jYXJyeSBjb3VsZCBiZSA+PSAweDNmZmZmZmZcbiAgICAgIHZhciBuY2FycnkgPSBobmNhcnJ5O1xuICAgICAgaG5jYXJyeSA9IDA7XG4gICAgICB2YXIgcndvcmQgPSBjYXJyeSAmIDB4M2ZmZmZmZjtcbiAgICAgIHZhciBtYXhKID0gTWF0aC5taW4oaywgbnVtLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaiA9IE1hdGgubWF4KDAsIGsgLSBzZWxmLmxlbmd0aCArIDEpOyBqIDw9IG1heEo7IGorKykge1xuICAgICAgICB2YXIgaSA9IGsgLSBqO1xuICAgICAgICB2YXIgYSA9IHNlbGYud29yZHNbaV0gfCAwO1xuICAgICAgICB2YXIgYiA9IG51bS53b3Jkc1tqXSB8IDA7XG4gICAgICAgIHZhciByID0gYSAqIGI7XG5cbiAgICAgICAgdmFyIGxvID0gciAmIDB4M2ZmZmZmZjtcbiAgICAgICAgbmNhcnJ5ID0gKG5jYXJyeSArICgociAvIDB4NDAwMDAwMCkgfCAwKSkgfCAwO1xuICAgICAgICBsbyA9IChsbyArIHJ3b3JkKSB8IDA7XG4gICAgICAgIHJ3b3JkID0gbG8gJiAweDNmZmZmZmY7XG4gICAgICAgIG5jYXJyeSA9IChuY2FycnkgKyAobG8gPj4+IDI2KSkgfCAwO1xuXG4gICAgICAgIGhuY2FycnkgKz0gbmNhcnJ5ID4+PiAyNjtcbiAgICAgICAgbmNhcnJ5ICY9IDB4M2ZmZmZmZjtcbiAgICAgIH1cbiAgICAgIG91dC53b3Jkc1trXSA9IHJ3b3JkO1xuICAgICAgY2FycnkgPSBuY2Fycnk7XG4gICAgICBuY2FycnkgPSBobmNhcnJ5O1xuICAgIH1cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIG91dC53b3Jkc1trXSA9IGNhcnJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQubGVuZ3RoLS07XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dC5zdHJpcCgpO1xuICB9XG5cbiAgZnVuY3Rpb24ganVtYm9NdWxUbyAoc2VsZiwgbnVtLCBvdXQpIHtcbiAgICB2YXIgZmZ0bSA9IG5ldyBGRlRNKCk7XG4gICAgcmV0dXJuIGZmdG0ubXVscChzZWxmLCBudW0sIG91dCk7XG4gIH1cblxuICBCTi5wcm90b3R5cGUubXVsVG8gPSBmdW5jdGlvbiBtdWxUbyAobnVtLCBvdXQpIHtcbiAgICB2YXIgcmVzO1xuICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aCArIG51bS5sZW5ndGg7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxMCAmJiBudW0ubGVuZ3RoID09PSAxMCkge1xuICAgICAgcmVzID0gY29tYjEwTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH0gZWxzZSBpZiAobGVuIDwgNjMpIHtcbiAgICAgIHJlcyA9IHNtYWxsTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH0gZWxzZSBpZiAobGVuIDwgMTAyNCkge1xuICAgICAgcmVzID0gYmlnTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBqdW1ib011bFRvKHRoaXMsIG51bSwgb3V0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vIENvb2xleS1UdWtleSBhbGdvcml0aG0gZm9yIEZGVFxuICAvLyBzbGlnaHRseSByZXZpc2l0ZWQgdG8gcmVseSBvbiBsb29waW5nIGluc3RlYWQgb2YgcmVjdXJzaW9uXG5cbiAgZnVuY3Rpb24gRkZUTSAoeCwgeSkge1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbiAgfVxuXG4gIEZGVE0ucHJvdG90eXBlLm1ha2VSQlQgPSBmdW5jdGlvbiBtYWtlUkJUIChOKSB7XG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoTik7XG4gICAgdmFyIGwgPSBCTi5wcm90b3R5cGUuX2NvdW50Qml0cyhOKSAtIDE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIHRbaV0gPSB0aGlzLnJldkJpbihpLCBsLCBOKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdDtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGJpbmFyeS1yZXZlcnNlZCByZXByZXNlbnRhdGlvbiBvZiBgeGBcbiAgRkZUTS5wcm90b3R5cGUucmV2QmluID0gZnVuY3Rpb24gcmV2QmluICh4LCBsLCBOKSB7XG4gICAgaWYgKHggPT09IDAgfHwgeCA9PT0gTiAtIDEpIHJldHVybiB4O1xuXG4gICAgdmFyIHJiID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgcmIgfD0gKHggJiAxKSA8PCAobCAtIGkgLSAxKTtcbiAgICAgIHggPj49IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJiO1xuICB9O1xuXG4gIC8vIFBlcmZvcm1zIFwidHdlZWRsaW5nXCIgcGhhc2UsIHRoZXJlZm9yZSAnZW11bGF0aW5nJ1xuICAvLyBiZWhhdmlvdXIgb2YgdGhlIHJlY3Vyc2l2ZSBhbGdvcml0aG1cbiAgRkZUTS5wcm90b3R5cGUucGVybXV0ZSA9IGZ1bmN0aW9uIHBlcm11dGUgKHJidCwgcndzLCBpd3MsIHJ0d3MsIGl0d3MsIE4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgcnR3c1tpXSA9IHJ3c1tyYnRbaV1dO1xuICAgICAgaXR3c1tpXSA9IGl3c1tyYnRbaV1dO1xuICAgIH1cbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiB0cmFuc2Zvcm0gKHJ3cywgaXdzLCBydHdzLCBpdHdzLCBOLCByYnQpIHtcbiAgICB0aGlzLnBlcm11dGUocmJ0LCByd3MsIGl3cywgcnR3cywgaXR3cywgTik7XG5cbiAgICBmb3IgKHZhciBzID0gMTsgcyA8IE47IHMgPDw9IDEpIHtcbiAgICAgIHZhciBsID0gcyA8PCAxO1xuXG4gICAgICB2YXIgcnR3ZGYgPSBNYXRoLmNvcygyICogTWF0aC5QSSAvIGwpO1xuICAgICAgdmFyIGl0d2RmID0gTWF0aC5zaW4oMiAqIE1hdGguUEkgLyBsKTtcblxuICAgICAgZm9yICh2YXIgcCA9IDA7IHAgPCBOOyBwICs9IGwpIHtcbiAgICAgICAgdmFyIHJ0d2RmXyA9IHJ0d2RmO1xuICAgICAgICB2YXIgaXR3ZGZfID0gaXR3ZGY7XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzOyBqKyspIHtcbiAgICAgICAgICB2YXIgcmUgPSBydHdzW3AgKyBqXTtcbiAgICAgICAgICB2YXIgaWUgPSBpdHdzW3AgKyBqXTtcblxuICAgICAgICAgIHZhciBybyA9IHJ0d3NbcCArIGogKyBzXTtcbiAgICAgICAgICB2YXIgaW8gPSBpdHdzW3AgKyBqICsgc107XG5cbiAgICAgICAgICB2YXIgcnggPSBydHdkZl8gKiBybyAtIGl0d2RmXyAqIGlvO1xuXG4gICAgICAgICAgaW8gPSBydHdkZl8gKiBpbyArIGl0d2RmXyAqIHJvO1xuICAgICAgICAgIHJvID0gcng7XG5cbiAgICAgICAgICBydHdzW3AgKyBqXSA9IHJlICsgcm87XG4gICAgICAgICAgaXR3c1twICsgal0gPSBpZSArIGlvO1xuXG4gICAgICAgICAgcnR3c1twICsgaiArIHNdID0gcmUgLSBybztcbiAgICAgICAgICBpdHdzW3AgKyBqICsgc10gPSBpZSAtIGlvO1xuXG4gICAgICAgICAgLyoganNoaW50IG1heGRlcHRoIDogZmFsc2UgKi9cbiAgICAgICAgICBpZiAoaiAhPT0gbCkge1xuICAgICAgICAgICAgcnggPSBydHdkZiAqIHJ0d2RmXyAtIGl0d2RmICogaXR3ZGZfO1xuXG4gICAgICAgICAgICBpdHdkZl8gPSBydHdkZiAqIGl0d2RmXyArIGl0d2RmICogcnR3ZGZfO1xuICAgICAgICAgICAgcnR3ZGZfID0gcng7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLmd1ZXNzTGVuMTNiID0gZnVuY3Rpb24gZ3Vlc3NMZW4xM2IgKG4sIG0pIHtcbiAgICB2YXIgTiA9IE1hdGgubWF4KG0sIG4pIHwgMTtcbiAgICB2YXIgb2RkID0gTiAmIDE7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoTiA9IE4gLyAyIHwgMDsgTjsgTiA9IE4gPj4+IDEpIHtcbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4gMSA8PCBpICsgMSArIG9kZDtcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5jb25qdWdhdGUgPSBmdW5jdGlvbiBjb25qdWdhdGUgKHJ3cywgaXdzLCBOKSB7XG4gICAgaWYgKE4gPD0gMSkgcmV0dXJuO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOIC8gMjsgaSsrKSB7XG4gICAgICB2YXIgdCA9IHJ3c1tpXTtcblxuICAgICAgcndzW2ldID0gcndzW04gLSBpIC0gMV07XG4gICAgICByd3NbTiAtIGkgLSAxXSA9IHQ7XG5cbiAgICAgIHQgPSBpd3NbaV07XG5cbiAgICAgIGl3c1tpXSA9IC1pd3NbTiAtIGkgLSAxXTtcbiAgICAgIGl3c1tOIC0gaSAtIDFdID0gLXQ7XG4gICAgfVxuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLm5vcm1hbGl6ZTEzYiA9IGZ1bmN0aW9uIG5vcm1hbGl6ZTEzYiAod3MsIE4pIHtcbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTiAvIDI7IGkrKykge1xuICAgICAgdmFyIHcgPSBNYXRoLnJvdW5kKHdzWzIgKiBpICsgMV0gLyBOKSAqIDB4MjAwMCArXG4gICAgICAgIE1hdGgucm91bmQod3NbMiAqIGldIC8gTikgK1xuICAgICAgICBjYXJyeTtcblxuICAgICAgd3NbaV0gPSB3ICYgMHgzZmZmZmZmO1xuXG4gICAgICBpZiAodyA8IDB4NDAwMDAwMCkge1xuICAgICAgICBjYXJyeSA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYXJyeSA9IHcgLyAweDQwMDAwMDAgfCAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB3cztcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5jb252ZXJ0MTNiID0gZnVuY3Rpb24gY29udmVydDEzYiAod3MsIGxlbiwgcndzLCBOKSB7XG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjYXJyeSA9IGNhcnJ5ICsgKHdzW2ldIHwgMCk7XG5cbiAgICAgIHJ3c1syICogaV0gPSBjYXJyeSAmIDB4MWZmZjsgY2FycnkgPSBjYXJyeSA+Pj4gMTM7XG4gICAgICByd3NbMiAqIGkgKyAxXSA9IGNhcnJ5ICYgMHgxZmZmOyBjYXJyeSA9IGNhcnJ5ID4+PiAxMztcbiAgICB9XG5cbiAgICAvLyBQYWQgd2l0aCB6ZXJvZXNcbiAgICBmb3IgKGkgPSAyICogbGVuOyBpIDwgTjsgKytpKSB7XG4gICAgICByd3NbaV0gPSAwO1xuICAgIH1cblxuICAgIGFzc2VydChjYXJyeSA9PT0gMCk7XG4gICAgYXNzZXJ0KChjYXJyeSAmIH4weDFmZmYpID09PSAwKTtcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5zdHViID0gZnVuY3Rpb24gc3R1YiAoTikge1xuICAgIHZhciBwaCA9IG5ldyBBcnJheShOKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgcGhbaV0gPSAwO1xuICAgIH1cblxuICAgIHJldHVybiBwaDtcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5tdWxwID0gZnVuY3Rpb24gbXVscCAoeCwgeSwgb3V0KSB7XG4gICAgdmFyIE4gPSAyICogdGhpcy5ndWVzc0xlbjEzYih4Lmxlbmd0aCwgeS5sZW5ndGgpO1xuXG4gICAgdmFyIHJidCA9IHRoaXMubWFrZVJCVChOKTtcblxuICAgIHZhciBfID0gdGhpcy5zdHViKE4pO1xuXG4gICAgdmFyIHJ3cyA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgcndzdCA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgaXdzdCA9IG5ldyBBcnJheShOKTtcblxuICAgIHZhciBucndzID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciBucndzdCA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgbml3c3QgPSBuZXcgQXJyYXkoTik7XG5cbiAgICB2YXIgcm13cyA9IG91dC53b3JkcztcbiAgICBybXdzLmxlbmd0aCA9IE47XG5cbiAgICB0aGlzLmNvbnZlcnQxM2IoeC53b3JkcywgeC5sZW5ndGgsIHJ3cywgTik7XG4gICAgdGhpcy5jb252ZXJ0MTNiKHkud29yZHMsIHkubGVuZ3RoLCBucndzLCBOKTtcblxuICAgIHRoaXMudHJhbnNmb3JtKHJ3cywgXywgcndzdCwgaXdzdCwgTiwgcmJ0KTtcbiAgICB0aGlzLnRyYW5zZm9ybShucndzLCBfLCBucndzdCwgbml3c3QsIE4sIHJidCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgdmFyIHJ4ID0gcndzdFtpXSAqIG5yd3N0W2ldIC0gaXdzdFtpXSAqIG5pd3N0W2ldO1xuICAgICAgaXdzdFtpXSA9IHJ3c3RbaV0gKiBuaXdzdFtpXSArIGl3c3RbaV0gKiBucndzdFtpXTtcbiAgICAgIHJ3c3RbaV0gPSByeDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmp1Z2F0ZShyd3N0LCBpd3N0LCBOKTtcbiAgICB0aGlzLnRyYW5zZm9ybShyd3N0LCBpd3N0LCBybXdzLCBfLCBOLCByYnQpO1xuICAgIHRoaXMuY29uanVnYXRlKHJtd3MsIF8sIE4pO1xuICAgIHRoaXMubm9ybWFsaXplMTNiKHJtd3MsIE4pO1xuXG4gICAgb3V0Lm5lZ2F0aXZlID0geC5uZWdhdGl2ZSBeIHkubmVnYXRpdmU7XG4gICAgb3V0Lmxlbmd0aCA9IHgubGVuZ3RoICsgeS5sZW5ndGg7XG4gICAgcmV0dXJuIG91dC5zdHJpcCgpO1xuICB9O1xuXG4gIC8vIE11bHRpcGx5IGB0aGlzYCBieSBgbnVtYFxuICBCTi5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsIChudW0pIHtcbiAgICB2YXIgb3V0ID0gbmV3IEJOKG51bGwpO1xuICAgIG91dC53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCArIG51bS5sZW5ndGgpO1xuICAgIHJldHVybiB0aGlzLm11bFRvKG51bSwgb3V0KTtcbiAgfTtcblxuICAvLyBNdWx0aXBseSBlbXBsb3lpbmcgRkZUXG4gIEJOLnByb3RvdHlwZS5tdWxmID0gZnVuY3Rpb24gbXVsZiAobnVtKSB7XG4gICAgdmFyIG91dCA9IG5ldyBCTihudWxsKTtcbiAgICBvdXQud29yZHMgPSBuZXcgQXJyYXkodGhpcy5sZW5ndGggKyBudW0ubGVuZ3RoKTtcbiAgICByZXR1cm4ganVtYm9NdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gIH07XG5cbiAgLy8gSW4tcGxhY2UgTXVsdGlwbGljYXRpb25cbiAgQk4ucHJvdG90eXBlLmltdWwgPSBmdW5jdGlvbiBpbXVsIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKG51bSwgdGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmltdWxuID0gZnVuY3Rpb24gaW11bG4gKG51bSkge1xuICAgIGFzc2VydCh0eXBlb2YgbnVtID09PSAnbnVtYmVyJyk7XG4gICAgYXNzZXJ0KG51bSA8IDB4NDAwMDAwMCk7XG5cbiAgICAvLyBDYXJyeVxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdyA9ICh0aGlzLndvcmRzW2ldIHwgMCkgKiBudW07XG4gICAgICB2YXIgbG8gPSAodyAmIDB4M2ZmZmZmZikgKyAoY2FycnkgJiAweDNmZmZmZmYpO1xuICAgICAgY2FycnkgPj49IDI2O1xuICAgICAgY2FycnkgKz0gKHcgLyAweDQwMDAwMDApIHwgMDtcbiAgICAgIC8vIE5PVEU6IGxvIGlzIDI3Yml0IG1heGltdW1cbiAgICAgIGNhcnJ5ICs9IGxvID4+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBsbyAmIDB4M2ZmZmZmZjtcbiAgICB9XG5cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBjYXJyeTtcbiAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLm11bG4gPSBmdW5jdGlvbiBtdWxuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKG51bSk7XG4gIH07XG5cbiAgLy8gYHRoaXNgICogYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5zcXIgPSBmdW5jdGlvbiBzcXIgKCkge1xuICAgIHJldHVybiB0aGlzLm11bCh0aGlzKTtcbiAgfTtcblxuICAvLyBgdGhpc2AgKiBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLmlzcXIgPSBmdW5jdGlvbiBpc3FyICgpIHtcbiAgICByZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSk7XG4gIH07XG5cbiAgLy8gTWF0aC5wb3coYHRoaXNgLCBgbnVtYClcbiAgQk4ucHJvdG90eXBlLnBvdyA9IGZ1bmN0aW9uIHBvdyAobnVtKSB7XG4gICAgdmFyIHcgPSB0b0JpdEFycmF5KG51bSk7XG4gICAgaWYgKHcubGVuZ3RoID09PSAwKSByZXR1cm4gbmV3IEJOKDEpO1xuXG4gICAgLy8gU2tpcCBsZWFkaW5nIHplcm9lc1xuICAgIHZhciByZXMgPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdy5sZW5ndGg7IGkrKywgcmVzID0gcmVzLnNxcigpKSB7XG4gICAgICBpZiAod1tpXSAhPT0gMCkgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKCsraSA8IHcubGVuZ3RoKSB7XG4gICAgICBmb3IgKHZhciBxID0gcmVzLnNxcigpOyBpIDwgdy5sZW5ndGg7IGkrKywgcSA9IHEuc3FyKCkpIHtcbiAgICAgICAgaWYgKHdbaV0gPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgIHJlcyA9IHJlcy5tdWwocSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvLyBTaGlmdC1sZWZ0IGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pdXNobG4gPSBmdW5jdGlvbiBpdXNobG4gKGJpdHMpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJpdHMgPT09ICdudW1iZXInICYmIGJpdHMgPj0gMCk7XG4gICAgdmFyIHIgPSBiaXRzICUgMjY7XG4gICAgdmFyIHMgPSAoYml0cyAtIHIpIC8gMjY7XG4gICAgdmFyIGNhcnJ5TWFzayA9ICgweDNmZmZmZmYgPj4+ICgyNiAtIHIpKSA8PCAoMjYgLSByKTtcbiAgICB2YXIgaTtcblxuICAgIGlmIChyICE9PSAwKSB7XG4gICAgICB2YXIgY2FycnkgPSAwO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbmV3Q2FycnkgPSB0aGlzLndvcmRzW2ldICYgY2FycnlNYXNrO1xuICAgICAgICB2YXIgYyA9ICgodGhpcy53b3Jkc1tpXSB8IDApIC0gbmV3Q2FycnkpIDw8IHI7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSBjIHwgY2Fycnk7XG4gICAgICAgIGNhcnJ5ID0gbmV3Q2FycnkgPj4+ICgyNiAtIHIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2FycnkpIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGNhcnJ5O1xuICAgICAgICB0aGlzLmxlbmd0aCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzICE9PSAwKSB7XG4gICAgICBmb3IgKGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHRoaXMud29yZHNbaSArIHNdID0gdGhpcy53b3Jkc1tpXTtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHM7IGkrKykge1xuICAgICAgICB0aGlzLndvcmRzW2ldID0gMDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sZW5ndGggKz0gcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc2hsbiA9IGZ1bmN0aW9uIGlzaGxuIChiaXRzKSB7XG4gICAgLy8gVE9ETyhpbmR1dG55KTogaW1wbGVtZW50IG1lXG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDApO1xuICAgIHJldHVybiB0aGlzLml1c2hsbihiaXRzKTtcbiAgfTtcblxuICAvLyBTaGlmdC1yaWdodCBpbi1wbGFjZVxuICAvLyBOT1RFOiBgaGludGAgaXMgYSBsb3dlc3QgYml0IGJlZm9yZSB0cmFpbGluZyB6ZXJvZXNcbiAgLy8gTk9URTogaWYgYGV4dGVuZGVkYCBpcyBwcmVzZW50IC0gaXQgd2lsbCBiZSBmaWxsZWQgd2l0aCBkZXN0cm95ZWQgYml0c1xuICBCTi5wcm90b3R5cGUuaXVzaHJuID0gZnVuY3Rpb24gaXVzaHJuIChiaXRzLCBoaW50LCBleHRlbmRlZCkge1xuICAgIGFzc2VydCh0eXBlb2YgYml0cyA9PT0gJ251bWJlcicgJiYgYml0cyA+PSAwKTtcbiAgICB2YXIgaDtcbiAgICBpZiAoaGludCkge1xuICAgICAgaCA9IChoaW50IC0gKGhpbnQgJSAyNikpIC8gMjY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGggPSAwO1xuICAgIH1cblxuICAgIHZhciByID0gYml0cyAlIDI2O1xuICAgIHZhciBzID0gTWF0aC5taW4oKGJpdHMgLSByKSAvIDI2LCB0aGlzLmxlbmd0aCk7XG4gICAgdmFyIG1hc2sgPSAweDNmZmZmZmYgXiAoKDB4M2ZmZmZmZiA+Pj4gcikgPDwgcik7XG4gICAgdmFyIG1hc2tlZFdvcmRzID0gZXh0ZW5kZWQ7XG5cbiAgICBoIC09IHM7XG4gICAgaCA9IE1hdGgubWF4KDAsIGgpO1xuXG4gICAgLy8gRXh0ZW5kZWQgbW9kZSwgY29weSBtYXNrZWQgcGFydFxuICAgIGlmIChtYXNrZWRXb3Jkcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICAgICAgbWFza2VkV29yZHMud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldO1xuICAgICAgfVxuICAgICAgbWFza2VkV29yZHMubGVuZ3RoID0gcztcbiAgICB9XG5cbiAgICBpZiAocyA9PT0gMCkge1xuICAgICAgLy8gTm8tb3AsIHdlIHNob3VsZCBub3QgbW92ZSBhbnl0aGluZyBhdCBhbGxcbiAgICB9IGVsc2UgaWYgKHRoaXMubGVuZ3RoID4gcykge1xuICAgICAgdGhpcy5sZW5ndGggLT0gcztcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSB0aGlzLndvcmRzW2kgKyBzXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53b3Jkc1swXSA9IDA7XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgfVxuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMCAmJiAoY2FycnkgIT09IDAgfHwgaSA+PSBoKTsgaS0tKSB7XG4gICAgICB2YXIgd29yZCA9IHRoaXMud29yZHNbaV0gfCAwO1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IChjYXJyeSA8PCAoMjYgLSByKSkgfCAod29yZCA+Pj4gcik7XG4gICAgICBjYXJyeSA9IHdvcmQgJiBtYXNrO1xuICAgIH1cblxuICAgIC8vIFB1c2ggY2FycmllZCBiaXRzIGFzIGEgbWFza1xuICAgIGlmIChtYXNrZWRXb3JkcyAmJiBjYXJyeSAhPT0gMCkge1xuICAgICAgbWFza2VkV29yZHMud29yZHNbbWFza2VkV29yZHMubGVuZ3RoKytdID0gY2Fycnk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLndvcmRzWzBdID0gMDtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc2hybiA9IGZ1bmN0aW9uIGlzaHJuIChiaXRzLCBoaW50LCBleHRlbmRlZCkge1xuICAgIC8vIFRPRE8oaW5kdXRueSk6IGltcGxlbWVudCBtZVxuICAgIGFzc2VydCh0aGlzLm5lZ2F0aXZlID09PSAwKTtcbiAgICByZXR1cm4gdGhpcy5pdXNocm4oYml0cywgaGludCwgZXh0ZW5kZWQpO1xuICB9O1xuXG4gIC8vIFNoaWZ0LWxlZnRcbiAgQk4ucHJvdG90eXBlLnNobG4gPSBmdW5jdGlvbiBzaGxuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihiaXRzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudXNobG4gPSBmdW5jdGlvbiB1c2hsbiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGJpdHMpO1xuICB9O1xuXG4gIC8vIFNoaWZ0LXJpZ2h0XG4gIEJOLnByb3RvdHlwZS5zaHJuID0gZnVuY3Rpb24gc2hybiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYml0cyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnVzaHJuID0gZnVuY3Rpb24gdXNocm4gKGJpdHMpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihiaXRzKTtcbiAgfTtcblxuICAvLyBUZXN0IGlmIG4gYml0IGlzIHNldFxuICBCTi5wcm90b3R5cGUudGVzdG4gPSBmdW5jdGlvbiB0ZXN0biAoYml0KSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXQgPT09ICdudW1iZXInICYmIGJpdCA+PSAwKTtcbiAgICB2YXIgciA9IGJpdCAlIDI2O1xuICAgIHZhciBzID0gKGJpdCAtIHIpIC8gMjY7XG4gICAgdmFyIHEgPSAxIDw8IHI7XG5cbiAgICAvLyBGYXN0IGNhc2U6IGJpdCBpcyBtdWNoIGhpZ2hlciB0aGFuIGFsbCBleGlzdGluZyB3b3Jkc1xuICAgIGlmICh0aGlzLmxlbmd0aCA8PSBzKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayBiaXQgYW5kIHJldHVyblxuICAgIHZhciB3ID0gdGhpcy53b3Jkc1tzXTtcblxuICAgIHJldHVybiAhISh3ICYgcSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG9ubHkgbG93ZXJzIGJpdHMgb2YgbnVtYmVyIChpbi1wbGFjZSlcbiAgQk4ucHJvdG90eXBlLmltYXNrbiA9IGZ1bmN0aW9uIGltYXNrbiAoYml0cykge1xuICAgIGFzc2VydCh0eXBlb2YgYml0cyA9PT0gJ251bWJlcicgJiYgYml0cyA+PSAwKTtcbiAgICB2YXIgciA9IGJpdHMgJSAyNjtcbiAgICB2YXIgcyA9IChiaXRzIC0gcikgLyAyNjtcblxuICAgIGFzc2VydCh0aGlzLm5lZ2F0aXZlID09PSAwLCAnaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzJyk7XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPD0gcykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHIgIT09IDApIHtcbiAgICAgIHMrKztcbiAgICB9XG4gICAgdGhpcy5sZW5ndGggPSBNYXRoLm1pbihzLCB0aGlzLmxlbmd0aCk7XG5cbiAgICBpZiAociAhPT0gMCkge1xuICAgICAgdmFyIG1hc2sgPSAweDNmZmZmZmYgXiAoKDB4M2ZmZmZmZiA+Pj4gcikgPDwgcik7XG4gICAgICB0aGlzLndvcmRzW3RoaXMubGVuZ3RoIC0gMV0gJj0gbWFzaztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIC8vIFJldHVybiBvbmx5IGxvd2VycyBiaXRzIG9mIG51bWJlclxuICBCTi5wcm90b3R5cGUubWFza24gPSBmdW5jdGlvbiBtYXNrbiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGJpdHMpO1xuICB9O1xuXG4gIC8vIEFkZCBwbGFpbiBudW1iZXIgYG51bWAgdG8gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5pYWRkbiA9IGZ1bmN0aW9uIGlhZGRuIChudW0pIHtcbiAgICBhc3NlcnQodHlwZW9mIG51bSA9PT0gJ251bWJlcicpO1xuICAgIGFzc2VydChudW0gPCAweDQwMDAwMDApO1xuICAgIGlmIChudW0gPCAwKSByZXR1cm4gdGhpcy5pc3VibigtbnVtKTtcblxuICAgIC8vIFBvc3NpYmxlIHNpZ24gY2hhbmdlXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMSAmJiAodGhpcy53b3Jkc1swXSB8IDApIDwgbnVtKSB7XG4gICAgICAgIHRoaXMud29yZHNbMF0gPSBudW0gLSAodGhpcy53b3Jkc1swXSB8IDApO1xuICAgICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgdGhpcy5pc3VibihudW0pO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aG91dCBjaGVja3NcbiAgICByZXR1cm4gdGhpcy5faWFkZG4obnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2lhZGRuID0gZnVuY3Rpb24gX2lhZGRuIChudW0pIHtcbiAgICB0aGlzLndvcmRzWzBdICs9IG51bTtcblxuICAgIC8vIENhcnJ5XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aCAmJiB0aGlzLndvcmRzW2ldID49IDB4NDAwMDAwMDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldIC09IDB4NDAwMDAwMDtcbiAgICAgIGlmIChpID09PSB0aGlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpICsgMV0gPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpICsgMV0rKztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5sZW5ndGggPSBNYXRoLm1heCh0aGlzLmxlbmd0aCwgaSArIDEpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gU3VidHJhY3QgcGxhaW4gbnVtYmVyIGBudW1gIGZyb20gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5pc3VibiA9IGZ1bmN0aW9uIGlzdWJuIChudW0pIHtcbiAgICBhc3NlcnQodHlwZW9mIG51bSA9PT0gJ251bWJlcicpO1xuICAgIGFzc2VydChudW0gPCAweDQwMDAwMDApO1xuICAgIGlmIChudW0gPCAwKSByZXR1cm4gdGhpcy5pYWRkbigtbnVtKTtcblxuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHRoaXMuaWFkZG4obnVtKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy53b3Jkc1swXSAtPSBudW07XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEgJiYgdGhpcy53b3Jkc1swXSA8IDApIHtcbiAgICAgIHRoaXMud29yZHNbMF0gPSAtdGhpcy53b3Jkc1swXTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDYXJyeVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aCAmJiB0aGlzLndvcmRzW2ldIDwgMDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gKz0gMHg0MDAwMDAwO1xuICAgICAgICB0aGlzLndvcmRzW2kgKyAxXSAtPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmFkZG4gPSBmdW5jdGlvbiBhZGRuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnN1Ym4gPSBmdW5jdGlvbiBzdWJuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlhYnMgPSBmdW5jdGlvbiBpYWJzICgpIHtcbiAgICB0aGlzLm5lZ2F0aXZlID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5hYnMgPSBmdW5jdGlvbiBhYnMgKCkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaWFicygpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5faXNobG5zdWJtdWwgPSBmdW5jdGlvbiBfaXNobG5zdWJtdWwgKG51bSwgbXVsLCBzaGlmdCkge1xuICAgIHZhciBsZW4gPSBudW0ubGVuZ3RoICsgc2hpZnQ7XG4gICAgdmFyIGk7XG5cbiAgICB0aGlzLl9leHBhbmQobGVuKTtcblxuICAgIHZhciB3O1xuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yIChpID0gMDsgaSA8IG51bS5sZW5ndGg7IGkrKykge1xuICAgICAgdyA9ICh0aGlzLndvcmRzW2kgKyBzaGlmdF0gfCAwKSArIGNhcnJ5O1xuICAgICAgdmFyIHJpZ2h0ID0gKG51bS53b3Jkc1tpXSB8IDApICogbXVsO1xuICAgICAgdyAtPSByaWdodCAmIDB4M2ZmZmZmZjtcbiAgICAgIGNhcnJ5ID0gKHcgPj4gMjYpIC0gKChyaWdodCAvIDB4NDAwMDAwMCkgfCAwKTtcbiAgICAgIHRoaXMud29yZHNbaSArIHNoaWZ0XSA9IHcgJiAweDNmZmZmZmY7XG4gICAgfVxuICAgIGZvciAoOyBpIDwgdGhpcy5sZW5ndGggLSBzaGlmdDsgaSsrKSB7XG4gICAgICB3ID0gKHRoaXMud29yZHNbaSArIHNoaWZ0XSB8IDApICsgY2Fycnk7XG4gICAgICBjYXJyeSA9IHcgPj4gMjY7XG4gICAgICB0aGlzLndvcmRzW2kgKyBzaGlmdF0gPSB3ICYgMHgzZmZmZmZmO1xuICAgIH1cblxuICAgIGlmIChjYXJyeSA9PT0gMCkgcmV0dXJuIHRoaXMuc3RyaXAoKTtcblxuICAgIC8vIFN1YnRyYWN0aW9uIG92ZXJmbG93XG4gICAgYXNzZXJ0KGNhcnJ5ID09PSAtMSk7XG4gICAgY2FycnkgPSAwO1xuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB3ID0gLSh0aGlzLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gdyA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB3ICYgMHgzZmZmZmZmO1xuICAgIH1cbiAgICB0aGlzLm5lZ2F0aXZlID0gMTtcblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl93b3JkRGl2ID0gZnVuY3Rpb24gX3dvcmREaXYgKG51bSwgbW9kZSkge1xuICAgIHZhciBzaGlmdCA9IHRoaXMubGVuZ3RoIC0gbnVtLmxlbmd0aDtcblxuICAgIHZhciBhID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciBiID0gbnVtO1xuXG4gICAgLy8gTm9ybWFsaXplXG4gICAgdmFyIGJoaSA9IGIud29yZHNbYi5sZW5ndGggLSAxXSB8IDA7XG4gICAgdmFyIGJoaUJpdHMgPSB0aGlzLl9jb3VudEJpdHMoYmhpKTtcbiAgICBzaGlmdCA9IDI2IC0gYmhpQml0cztcbiAgICBpZiAoc2hpZnQgIT09IDApIHtcbiAgICAgIGIgPSBiLnVzaGxuKHNoaWZ0KTtcbiAgICAgIGEuaXVzaGxuKHNoaWZ0KTtcbiAgICAgIGJoaSA9IGIud29yZHNbYi5sZW5ndGggLSAxXSB8IDA7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBxdW90aWVudFxuICAgIHZhciBtID0gYS5sZW5ndGggLSBiLmxlbmd0aDtcbiAgICB2YXIgcTtcblxuICAgIGlmIChtb2RlICE9PSAnbW9kJykge1xuICAgICAgcSA9IG5ldyBCTihudWxsKTtcbiAgICAgIHEubGVuZ3RoID0gbSArIDE7XG4gICAgICBxLndvcmRzID0gbmV3IEFycmF5KHEubGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcS5sZW5ndGg7IGkrKykge1xuICAgICAgICBxLndvcmRzW2ldID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGlmZiA9IGEuY2xvbmUoKS5faXNobG5zdWJtdWwoYiwgMSwgbSk7XG4gICAgaWYgKGRpZmYubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIGEgPSBkaWZmO1xuICAgICAgaWYgKHEpIHtcbiAgICAgICAgcS53b3Jkc1ttXSA9IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaiA9IG0gLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgdmFyIHFqID0gKGEud29yZHNbYi5sZW5ndGggKyBqXSB8IDApICogMHg0MDAwMDAwICtcbiAgICAgICAgKGEud29yZHNbYi5sZW5ndGggKyBqIC0gMV0gfCAwKTtcblxuICAgICAgLy8gTk9URTogKHFqIC8gYmhpKSBpcyAoMHgzZmZmZmZmICogMHg0MDAwMDAwICsgMHgzZmZmZmZmKSAvIDB4MjAwMDAwMCBtYXhcbiAgICAgIC8vICgweDdmZmZmZmYpXG4gICAgICBxaiA9IE1hdGgubWluKChxaiAvIGJoaSkgfCAwLCAweDNmZmZmZmYpO1xuXG4gICAgICBhLl9pc2hsbnN1Ym11bChiLCBxaiwgaik7XG4gICAgICB3aGlsZSAoYS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICBxai0tO1xuICAgICAgICBhLm5lZ2F0aXZlID0gMDtcbiAgICAgICAgYS5faXNobG5zdWJtdWwoYiwgMSwgaik7XG4gICAgICAgIGlmICghYS5pc1plcm8oKSkge1xuICAgICAgICAgIGEubmVnYXRpdmUgXj0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHEpIHtcbiAgICAgICAgcS53b3Jkc1tqXSA9IHFqO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocSkge1xuICAgICAgcS5zdHJpcCgpO1xuICAgIH1cbiAgICBhLnN0cmlwKCk7XG5cbiAgICAvLyBEZW5vcm1hbGl6ZVxuICAgIGlmIChtb2RlICE9PSAnZGl2JyAmJiBzaGlmdCAhPT0gMCkge1xuICAgICAgYS5pdXNocm4oc2hpZnQpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkaXY6IHEgfHwgbnVsbCxcbiAgICAgIG1vZDogYVxuICAgIH07XG4gIH07XG5cbiAgLy8gTk9URTogMSkgYG1vZGVgIGNhbiBiZSBzZXQgdG8gYG1vZGAgdG8gcmVxdWVzdCBtb2Qgb25seSxcbiAgLy8gICAgICAgdG8gYGRpdmAgdG8gcmVxdWVzdCBkaXYgb25seSwgb3IgYmUgYWJzZW50IHRvXG4gIC8vICAgICAgIHJlcXVlc3QgYm90aCBkaXYgJiBtb2RcbiAgLy8gICAgICAgMikgYHBvc2l0aXZlYCBpcyB0cnVlIGlmIHVuc2lnbmVkIG1vZCBpcyByZXF1ZXN0ZWRcbiAgQk4ucHJvdG90eXBlLmRpdm1vZCA9IGZ1bmN0aW9uIGRpdm1vZCAobnVtLCBtb2RlLCBwb3NpdGl2ZSkge1xuICAgIGFzc2VydCghbnVtLmlzWmVybygpKTtcblxuICAgIGlmICh0aGlzLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IG5ldyBCTigwKSxcbiAgICAgICAgbW9kOiBuZXcgQk4oMClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRpdiwgbW9kLCByZXM7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgbnVtLm5lZ2F0aXZlID09PSAwKSB7XG4gICAgICByZXMgPSB0aGlzLm5lZygpLmRpdm1vZChudW0sIG1vZGUpO1xuXG4gICAgICBpZiAobW9kZSAhPT0gJ21vZCcpIHtcbiAgICAgICAgZGl2ID0gcmVzLmRpdi5uZWcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZGUgIT09ICdkaXYnKSB7XG4gICAgICAgIG1vZCA9IHJlcy5tb2QubmVnKCk7XG4gICAgICAgIGlmIChwb3NpdGl2ZSAmJiBtb2QubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgICBtb2QuaWFkZChudW0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogZGl2LFxuICAgICAgICBtb2Q6IG1vZFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uZWdhdGl2ZSA9PT0gMCAmJiBudW0ubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHJlcyA9IHRoaXMuZGl2bW9kKG51bS5uZWcoKSwgbW9kZSk7XG5cbiAgICAgIGlmIChtb2RlICE9PSAnbW9kJykge1xuICAgICAgICBkaXYgPSByZXMuZGl2Lm5lZygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IGRpdixcbiAgICAgICAgbW9kOiByZXMubW9kXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICgodGhpcy5uZWdhdGl2ZSAmIG51bS5uZWdhdGl2ZSkgIT09IDApIHtcbiAgICAgIHJlcyA9IHRoaXMubmVnKCkuZGl2bW9kKG51bS5uZWcoKSwgbW9kZSk7XG5cbiAgICAgIGlmIChtb2RlICE9PSAnZGl2Jykge1xuICAgICAgICBtb2QgPSByZXMubW9kLm5lZygpO1xuICAgICAgICBpZiAocG9zaXRpdmUgJiYgbW9kLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICAgICAgbW9kLmlzdWIobnVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IHJlcy5kaXYsXG4gICAgICAgIG1vZDogbW9kXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEJvdGggbnVtYmVycyBhcmUgcG9zaXRpdmUgYXQgdGhpcyBwb2ludFxuXG4gICAgLy8gU3RyaXAgYm90aCBudW1iZXJzIHRvIGFwcHJveGltYXRlIHNoaWZ0IHZhbHVlXG4gICAgaWYgKG51bS5sZW5ndGggPiB0aGlzLmxlbmd0aCB8fCB0aGlzLmNtcChudW0pIDwgMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGl2OiBuZXcgQk4oMCksXG4gICAgICAgIG1vZDogdGhpc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBWZXJ5IHNob3J0IHJlZHVjdGlvblxuICAgIGlmIChudW0ubGVuZ3RoID09PSAxKSB7XG4gICAgICBpZiAobW9kZSA9PT0gJ2RpdicpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkaXY6IHRoaXMuZGl2bihudW0ud29yZHNbMF0pLFxuICAgICAgICAgIG1vZDogbnVsbFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kZSA9PT0gJ21vZCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkaXY6IG51bGwsXG4gICAgICAgICAgbW9kOiBuZXcgQk4odGhpcy5tb2RuKG51bS53b3Jkc1swXSkpXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogdGhpcy5kaXZuKG51bS53b3Jkc1swXSksXG4gICAgICAgIG1vZDogbmV3IEJOKHRoaXMubW9kbihudW0ud29yZHNbMF0pKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fd29yZERpdihudW0sIG1vZGUpO1xuICB9O1xuXG4gIC8vIEZpbmQgYHRoaXNgIC8gYG51bWBcbiAgQk4ucHJvdG90eXBlLmRpdiA9IGZ1bmN0aW9uIGRpdiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZGl2bW9kKG51bSwgJ2RpdicsIGZhbHNlKS5kaXY7XG4gIH07XG5cbiAgLy8gRmluZCBgdGhpc2AgJSBgbnVtYFxuICBCTi5wcm90b3R5cGUubW9kID0gZnVuY3Rpb24gbW9kIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5kaXZtb2QobnVtLCAnbW9kJywgZmFsc2UpLm1vZDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudW1vZCA9IGZ1bmN0aW9uIHVtb2QgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmRpdm1vZChudW0sICdtb2QnLCB0cnVlKS5tb2Q7XG4gIH07XG5cbiAgLy8gRmluZCBSb3VuZChgdGhpc2AgLyBgbnVtYClcbiAgQk4ucHJvdG90eXBlLmRpdlJvdW5kID0gZnVuY3Rpb24gZGl2Um91bmQgKG51bSkge1xuICAgIHZhciBkbSA9IHRoaXMuZGl2bW9kKG51bSk7XG5cbiAgICAvLyBGYXN0IGNhc2UgLSBleGFjdCBkaXZpc2lvblxuICAgIGlmIChkbS5tb2QuaXNaZXJvKCkpIHJldHVybiBkbS5kaXY7XG5cbiAgICB2YXIgbW9kID0gZG0uZGl2Lm5lZ2F0aXZlICE9PSAwID8gZG0ubW9kLmlzdWIobnVtKSA6IGRtLm1vZDtcblxuICAgIHZhciBoYWxmID0gbnVtLnVzaHJuKDEpO1xuICAgIHZhciByMiA9IG51bS5hbmRsbigxKTtcbiAgICB2YXIgY21wID0gbW9kLmNtcChoYWxmKTtcblxuICAgIC8vIFJvdW5kIGRvd25cbiAgICBpZiAoY21wIDwgMCB8fCByMiA9PT0gMSAmJiBjbXAgPT09IDApIHJldHVybiBkbS5kaXY7XG5cbiAgICAvLyBSb3VuZCB1cFxuICAgIHJldHVybiBkbS5kaXYubmVnYXRpdmUgIT09IDAgPyBkbS5kaXYuaXN1Ym4oMSkgOiBkbS5kaXYuaWFkZG4oMSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLm1vZG4gPSBmdW5jdGlvbiBtb2RuIChudW0pIHtcbiAgICBhc3NlcnQobnVtIDw9IDB4M2ZmZmZmZik7XG4gICAgdmFyIHAgPSAoMSA8PCAyNikgJSBudW07XG5cbiAgICB2YXIgYWNjID0gMDtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgYWNjID0gKHAgKiBhY2MgKyAodGhpcy53b3Jkc1tpXSB8IDApKSAlIG51bTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9O1xuXG4gIC8vIEluLXBsYWNlIGRpdmlzaW9uIGJ5IG51bWJlclxuICBCTi5wcm90b3R5cGUuaWRpdm4gPSBmdW5jdGlvbiBpZGl2biAobnVtKSB7XG4gICAgYXNzZXJ0KG51bSA8PSAweDNmZmZmZmYpO1xuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIHcgPSAodGhpcy53b3Jkc1tpXSB8IDApICsgY2FycnkgKiAweDQwMDAwMDA7XG4gICAgICB0aGlzLndvcmRzW2ldID0gKHcgLyBudW0pIHwgMDtcbiAgICAgIGNhcnJ5ID0gdyAlIG51bTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5kaXZuID0gZnVuY3Rpb24gZGl2biAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5lZ2NkID0gZnVuY3Rpb24gZWdjZCAocCkge1xuICAgIGFzc2VydChwLm5lZ2F0aXZlID09PSAwKTtcbiAgICBhc3NlcnQoIXAuaXNaZXJvKCkpO1xuXG4gICAgdmFyIHggPSB0aGlzO1xuICAgIHZhciB5ID0gcC5jbG9uZSgpO1xuXG4gICAgaWYgKHgubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHggPSB4LnVtb2QocCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSB4LmNsb25lKCk7XG4gICAgfVxuXG4gICAgLy8gQSAqIHggKyBCICogeSA9IHhcbiAgICB2YXIgQSA9IG5ldyBCTigxKTtcbiAgICB2YXIgQiA9IG5ldyBCTigwKTtcblxuICAgIC8vIEMgKiB4ICsgRCAqIHkgPSB5XG4gICAgdmFyIEMgPSBuZXcgQk4oMCk7XG4gICAgdmFyIEQgPSBuZXcgQk4oMSk7XG5cbiAgICB2YXIgZyA9IDA7XG5cbiAgICB3aGlsZSAoeC5pc0V2ZW4oKSAmJiB5LmlzRXZlbigpKSB7XG4gICAgICB4Lml1c2hybigxKTtcbiAgICAgIHkuaXVzaHJuKDEpO1xuICAgICAgKytnO1xuICAgIH1cblxuICAgIHZhciB5cCA9IHkuY2xvbmUoKTtcbiAgICB2YXIgeHAgPSB4LmNsb25lKCk7XG5cbiAgICB3aGlsZSAoIXguaXNaZXJvKCkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBpbSA9IDE7ICh4LndvcmRzWzBdICYgaW0pID09PSAwICYmIGkgPCAyNjsgKytpLCBpbSA8PD0gMSk7XG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgeC5pdXNocm4oaSk7XG4gICAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgICAgaWYgKEEuaXNPZGQoKSB8fCBCLmlzT2RkKCkpIHtcbiAgICAgICAgICAgIEEuaWFkZCh5cCk7XG4gICAgICAgICAgICBCLmlzdWIoeHApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIEEuaXVzaHJuKDEpO1xuICAgICAgICAgIEIuaXVzaHJuKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGogPSAwLCBqbSA9IDE7ICh5LndvcmRzWzBdICYgam0pID09PSAwICYmIGogPCAyNjsgKytqLCBqbSA8PD0gMSk7XG4gICAgICBpZiAoaiA+IDApIHtcbiAgICAgICAgeS5pdXNocm4oaik7XG4gICAgICAgIHdoaWxlIChqLS0gPiAwKSB7XG4gICAgICAgICAgaWYgKEMuaXNPZGQoKSB8fCBELmlzT2RkKCkpIHtcbiAgICAgICAgICAgIEMuaWFkZCh5cCk7XG4gICAgICAgICAgICBELmlzdWIoeHApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIEMuaXVzaHJuKDEpO1xuICAgICAgICAgIEQuaXVzaHJuKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh4LmNtcCh5KSA+PSAwKSB7XG4gICAgICAgIHguaXN1Yih5KTtcbiAgICAgICAgQS5pc3ViKEMpO1xuICAgICAgICBCLmlzdWIoRCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB5LmlzdWIoeCk7XG4gICAgICAgIEMuaXN1YihBKTtcbiAgICAgICAgRC5pc3ViKEIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhOiBDLFxuICAgICAgYjogRCxcbiAgICAgIGdjZDogeS5pdXNobG4oZylcbiAgICB9O1xuICB9O1xuXG4gIC8vIFRoaXMgaXMgcmVkdWNlZCBpbmNhcm5hdGlvbiBvZiB0aGUgYmluYXJ5IEVFQVxuICAvLyBhYm92ZSwgZGVzaWduYXRlZCB0byBpbnZlcnQgbWVtYmVycyBvZiB0aGVcbiAgLy8gX3ByaW1lXyBmaWVsZHMgRihwKSBhdCBhIG1heGltYWwgc3BlZWRcbiAgQk4ucHJvdG90eXBlLl9pbnZtcCA9IGZ1bmN0aW9uIF9pbnZtcCAocCkge1xuICAgIGFzc2VydChwLm5lZ2F0aXZlID09PSAwKTtcbiAgICBhc3NlcnQoIXAuaXNaZXJvKCkpO1xuXG4gICAgdmFyIGEgPSB0aGlzO1xuICAgIHZhciBiID0gcC5jbG9uZSgpO1xuXG4gICAgaWYgKGEubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIGEgPSBhLnVtb2QocCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSBhLmNsb25lKCk7XG4gICAgfVxuXG4gICAgdmFyIHgxID0gbmV3IEJOKDEpO1xuICAgIHZhciB4MiA9IG5ldyBCTigwKTtcblxuICAgIHZhciBkZWx0YSA9IGIuY2xvbmUoKTtcblxuICAgIHdoaWxlIChhLmNtcG4oMSkgPiAwICYmIGIuY21wbigxKSA+IDApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBpbSA9IDE7IChhLndvcmRzWzBdICYgaW0pID09PSAwICYmIGkgPCAyNjsgKytpLCBpbSA8PD0gMSk7XG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgYS5pdXNocm4oaSk7XG4gICAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgICAgaWYgKHgxLmlzT2RkKCkpIHtcbiAgICAgICAgICAgIHgxLmlhZGQoZGVsdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHgxLml1c2hybigxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBqID0gMCwgam0gPSAxOyAoYi53b3Jkc1swXSAmIGptKSA9PT0gMCAmJiBqIDwgMjY7ICsraiwgam0gPDw9IDEpO1xuICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgIGIuaXVzaHJuKGopO1xuICAgICAgICB3aGlsZSAoai0tID4gMCkge1xuICAgICAgICAgIGlmICh4Mi5pc09kZCgpKSB7XG4gICAgICAgICAgICB4Mi5pYWRkKGRlbHRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB4Mi5pdXNocm4oMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGEuY21wKGIpID49IDApIHtcbiAgICAgICAgYS5pc3ViKGIpO1xuICAgICAgICB4MS5pc3ViKHgyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGIuaXN1YihhKTtcbiAgICAgICAgeDIuaXN1Yih4MSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJlcztcbiAgICBpZiAoYS5jbXBuKDEpID09PSAwKSB7XG4gICAgICByZXMgPSB4MTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0geDI7XG4gICAgfVxuXG4gICAgaWYgKHJlcy5jbXBuKDApIDwgMCkge1xuICAgICAgcmVzLmlhZGQocCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZ2NkID0gZnVuY3Rpb24gZ2NkIChudW0pIHtcbiAgICBpZiAodGhpcy5pc1plcm8oKSkgcmV0dXJuIG51bS5hYnMoKTtcbiAgICBpZiAobnVtLmlzWmVybygpKSByZXR1cm4gdGhpcy5hYnMoKTtcblxuICAgIHZhciBhID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciBiID0gbnVtLmNsb25lKCk7XG4gICAgYS5uZWdhdGl2ZSA9IDA7XG4gICAgYi5uZWdhdGl2ZSA9IDA7XG5cbiAgICAvLyBSZW1vdmUgY29tbW9uIGZhY3RvciBvZiB0d29cbiAgICBmb3IgKHZhciBzaGlmdCA9IDA7IGEuaXNFdmVuKCkgJiYgYi5pc0V2ZW4oKTsgc2hpZnQrKykge1xuICAgICAgYS5pdXNocm4oMSk7XG4gICAgICBiLml1c2hybigxKTtcbiAgICB9XG5cbiAgICBkbyB7XG4gICAgICB3aGlsZSAoYS5pc0V2ZW4oKSkge1xuICAgICAgICBhLml1c2hybigxKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChiLmlzRXZlbigpKSB7XG4gICAgICAgIGIuaXVzaHJuKDEpO1xuICAgICAgfVxuXG4gICAgICB2YXIgciA9IGEuY21wKGIpO1xuICAgICAgaWYgKHIgPCAwKSB7XG4gICAgICAgIC8vIFN3YXAgYGFgIGFuZCBgYmAgdG8gbWFrZSBgYWAgYWx3YXlzIGJpZ2dlciB0aGFuIGBiYFxuICAgICAgICB2YXIgdCA9IGE7XG4gICAgICAgIGEgPSBiO1xuICAgICAgICBiID0gdDtcbiAgICAgIH0gZWxzZSBpZiAociA9PT0gMCB8fCBiLmNtcG4oMSkgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGEuaXN1YihiKTtcbiAgICB9IHdoaWxlICh0cnVlKTtcblxuICAgIHJldHVybiBiLml1c2hsbihzaGlmdCk7XG4gIH07XG5cbiAgLy8gSW52ZXJ0IG51bWJlciBpbiB0aGUgZmllbGQgRihudW0pXG4gIEJOLnByb3RvdHlwZS5pbnZtID0gZnVuY3Rpb24gaW52bSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZWdjZChudW0pLmEudW1vZChudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc0V2ZW4gPSBmdW5jdGlvbiBpc0V2ZW4gKCkge1xuICAgIHJldHVybiAodGhpcy53b3Jkc1swXSAmIDEpID09PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc09kZCA9IGZ1bmN0aW9uIGlzT2RkICgpIHtcbiAgICByZXR1cm4gKHRoaXMud29yZHNbMF0gJiAxKSA9PT0gMTtcbiAgfTtcblxuICAvLyBBbmQgZmlyc3Qgd29yZCBhbmQgbnVtXG4gIEJOLnByb3RvdHlwZS5hbmRsbiA9IGZ1bmN0aW9uIGFuZGxuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy53b3Jkc1swXSAmIG51bTtcbiAgfTtcblxuICAvLyBJbmNyZW1lbnQgYXQgdGhlIGJpdCBwb3NpdGlvbiBpbi1saW5lXG4gIEJOLnByb3RvdHlwZS5iaW5jbiA9IGZ1bmN0aW9uIGJpbmNuIChiaXQpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJpdCA9PT0gJ251bWJlcicpO1xuICAgIHZhciByID0gYml0ICUgMjY7XG4gICAgdmFyIHMgPSAoYml0IC0gcikgLyAyNjtcbiAgICB2YXIgcSA9IDEgPDwgcjtcblxuICAgIC8vIEZhc3QgY2FzZTogYml0IGlzIG11Y2ggaGlnaGVyIHRoYW4gYWxsIGV4aXN0aW5nIHdvcmRzXG4gICAgaWYgKHRoaXMubGVuZ3RoIDw9IHMpIHtcbiAgICAgIHRoaXMuX2V4cGFuZChzICsgMSk7XG4gICAgICB0aGlzLndvcmRzW3NdIHw9IHE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBBZGQgYml0IGFuZCBwcm9wYWdhdGUsIGlmIG5lZWRlZFxuICAgIHZhciBjYXJyeSA9IHE7XG4gICAgZm9yICh2YXIgaSA9IHM7IGNhcnJ5ICE9PSAwICYmIGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdyA9IHRoaXMud29yZHNbaV0gfCAwO1xuICAgICAgdyArPSBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gdyA+Pj4gMjY7XG4gICAgICB3ICY9IDB4M2ZmZmZmZjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB3O1xuICAgIH1cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBjYXJyeTtcbiAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc1plcm8gPSBmdW5jdGlvbiBpc1plcm8gKCkge1xuICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLndvcmRzWzBdID09PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5jbXBuID0gZnVuY3Rpb24gY21wbiAobnVtKSB7XG4gICAgdmFyIG5lZ2F0aXZlID0gbnVtIDwgMDtcblxuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwICYmICFuZWdhdGl2ZSkgcmV0dXJuIC0xO1xuICAgIGlmICh0aGlzLm5lZ2F0aXZlID09PSAwICYmIG5lZ2F0aXZlKSByZXR1cm4gMTtcblxuICAgIHRoaXMuc3RyaXAoKTtcblxuICAgIHZhciByZXM7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMSkge1xuICAgICAgcmVzID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5lZ2F0aXZlKSB7XG4gICAgICAgIG51bSA9IC1udW07XG4gICAgICB9XG5cbiAgICAgIGFzc2VydChudW0gPD0gMHgzZmZmZmZmLCAnTnVtYmVyIGlzIHRvbyBiaWcnKTtcblxuICAgICAgdmFyIHcgPSB0aGlzLndvcmRzWzBdIHwgMDtcbiAgICAgIHJlcyA9IHcgPT09IG51bSA/IDAgOiB3IDwgbnVtID8gLTEgOiAxO1xuICAgIH1cbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkgcmV0dXJuIC1yZXMgfCAwO1xuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgLy8gQ29tcGFyZSB0d28gbnVtYmVycyBhbmQgcmV0dXJuOlxuICAvLyAxIC0gaWYgYHRoaXNgID4gYG51bWBcbiAgLy8gMCAtIGlmIGB0aGlzYCA9PSBgbnVtYFxuICAvLyAtMSAtIGlmIGB0aGlzYCA8IGBudW1gXG4gIEJOLnByb3RvdHlwZS5jbXAgPSBmdW5jdGlvbiBjbXAgKG51bSkge1xuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwICYmIG51bS5uZWdhdGl2ZSA9PT0gMCkgcmV0dXJuIC0xO1xuICAgIGlmICh0aGlzLm5lZ2F0aXZlID09PSAwICYmIG51bS5uZWdhdGl2ZSAhPT0gMCkgcmV0dXJuIDE7XG5cbiAgICB2YXIgcmVzID0gdGhpcy51Y21wKG51bSk7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHJldHVybiAtcmVzIHwgMDtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vIFVuc2lnbmVkIGNvbXBhcmlzb25cbiAgQk4ucHJvdG90eXBlLnVjbXAgPSBmdW5jdGlvbiB1Y21wIChudW0pIHtcbiAgICAvLyBBdCB0aGlzIHBvaW50IGJvdGggbnVtYmVycyBoYXZlIHRoZSBzYW1lIHNpZ25cbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gMTtcbiAgICBpZiAodGhpcy5sZW5ndGggPCBudW0ubGVuZ3RoKSByZXR1cm4gLTE7XG5cbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGEgPSB0aGlzLndvcmRzW2ldIHwgMDtcbiAgICAgIHZhciBiID0gbnVtLndvcmRzW2ldIHwgMDtcblxuICAgICAgaWYgKGEgPT09IGIpIGNvbnRpbnVlO1xuICAgICAgaWYgKGEgPCBiKSB7XG4gICAgICAgIHJlcyA9IC0xO1xuICAgICAgfSBlbHNlIGlmIChhID4gYikge1xuICAgICAgICByZXMgPSAxO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmd0biA9IGZ1bmN0aW9uIGd0biAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pID09PSAxO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ndCA9IGZ1bmN0aW9uIGd0IChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXAobnVtKSA9PT0gMTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZ3RlbiA9IGZ1bmN0aW9uIGd0ZW4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcG4obnVtKSA+PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ndGUgPSBmdW5jdGlvbiBndGUgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcChudW0pID49IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmx0biA9IGZ1bmN0aW9uIGx0biAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pID09PSAtMTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubHQgPSBmdW5jdGlvbiBsdCAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPT09IC0xO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5sdGVuID0gZnVuY3Rpb24gbHRlbiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pIDw9IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmx0ZSA9IGZ1bmN0aW9uIGx0ZSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPD0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZXFuID0gZnVuY3Rpb24gZXFuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPT09IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmVxID0gZnVuY3Rpb24gZXEgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcChudW0pID09PSAwO1xuICB9O1xuXG4gIC8vXG4gIC8vIEEgcmVkdWNlIGNvbnRleHQsIGNvdWxkIGJlIHVzaW5nIG1vbnRnb21lcnkgb3Igc29tZXRoaW5nIGJldHRlciwgZGVwZW5kaW5nXG4gIC8vIG9uIHRoZSBgbWAgaXRzZWxmLlxuICAvL1xuICBCTi5yZWQgPSBmdW5jdGlvbiByZWQgKG51bSkge1xuICAgIHJldHVybiBuZXcgUmVkKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvUmVkID0gZnVuY3Rpb24gdG9SZWQgKGN0eCkge1xuICAgIGFzc2VydCghdGhpcy5yZWQsICdBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0Jyk7XG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDAsICdyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcycpO1xuICAgIHJldHVybiBjdHguY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChjdHgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5mcm9tUmVkID0gZnVuY3Rpb24gZnJvbVJlZCAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAnZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCcpO1xuICAgIHJldHVybiB0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2ZvcmNlUmVkID0gZnVuY3Rpb24gX2ZvcmNlUmVkIChjdHgpIHtcbiAgICB0aGlzLnJlZCA9IGN0eDtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZm9yY2VSZWQgPSBmdW5jdGlvbiBmb3JjZVJlZCAoY3R4KSB7XG4gICAgYXNzZXJ0KCF0aGlzLnJlZCwgJ0FscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQnKTtcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VSZWQoY3R4KTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkQWRkID0gZnVuY3Rpb24gcmVkQWRkIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmFkZCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRJQWRkID0gZnVuY3Rpb24gcmVkSUFkZCAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuaWFkZCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRTdWIgPSBmdW5jdGlvbiByZWRTdWIgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuc3ViKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZElTdWIgPSBmdW5jdGlvbiByZWRJU3ViIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pc3ViKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFNobCA9IGZ1bmN0aW9uIHJlZFNobCAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5zaGwodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkTXVsID0gZnVuY3Rpb24gcmVkTXVsIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTIodGhpcywgbnVtKTtcbiAgICByZXR1cm4gdGhpcy5yZWQubXVsKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZElNdWwgPSBmdW5jdGlvbiByZWRJTXVsIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTIodGhpcywgbnVtKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuaW11bCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRTcXIgPSBmdW5jdGlvbiByZWRTcXIgKCkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuc3FyKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRJU3FyID0gZnVuY3Rpb24gcmVkSVNxciAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuaXNxcih0aGlzKTtcbiAgfTtcblxuICAvLyBTcXVhcmUgcm9vdCBvdmVyIHBcbiAgQk4ucHJvdG90eXBlLnJlZFNxcnQgPSBmdW5jdGlvbiByZWRTcXJ0ICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5zcXJ0KHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRJbnZtID0gZnVuY3Rpb24gcmVkSW52bSAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuaW52bSh0aGlzKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gbmVnYXRpdmUgY2xvbmUgb2YgYHRoaXNgICUgYHJlZCBtb2R1bG9gXG4gIEJOLnByb3RvdHlwZS5yZWROZWcgPSBmdW5jdGlvbiByZWROZWcgKCkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQubmVnKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRQb3cgPSBmdW5jdGlvbiByZWRQb3cgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCAmJiAhbnVtLnJlZCwgJ3JlZFBvdyhub3JtYWxOdW0pJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLnBvdyh0aGlzLCBudW0pO1xuICB9O1xuXG4gIC8vIFByaW1lIG51bWJlcnMgd2l0aCBlZmZpY2llbnQgcmVkdWN0aW9uXG4gIHZhciBwcmltZXMgPSB7XG4gICAgazI1NjogbnVsbCxcbiAgICBwMjI0OiBudWxsLFxuICAgIHAxOTI6IG51bGwsXG4gICAgcDI1NTE5OiBudWxsXG4gIH07XG5cbiAgLy8gUHNldWRvLU1lcnNlbm5lIHByaW1lXG4gIGZ1bmN0aW9uIE1QcmltZSAobmFtZSwgcCkge1xuICAgIC8vIFAgPSAyIF4gTiAtIEtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMucCA9IG5ldyBCTihwLCAxNik7XG4gICAgdGhpcy5uID0gdGhpcy5wLmJpdExlbmd0aCgpO1xuICAgIHRoaXMuayA9IG5ldyBCTigxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCk7XG5cbiAgICB0aGlzLnRtcCA9IHRoaXMuX3RtcCgpO1xuICB9XG5cbiAgTVByaW1lLnByb3RvdHlwZS5fdG1wID0gZnVuY3Rpb24gX3RtcCAoKSB7XG4gICAgdmFyIHRtcCA9IG5ldyBCTihudWxsKTtcbiAgICB0bXAud29yZHMgPSBuZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubiAvIDEzKSk7XG4gICAgcmV0dXJuIHRtcDtcbiAgfTtcblxuICBNUHJpbWUucHJvdG90eXBlLmlyZWR1Y2UgPSBmdW5jdGlvbiBpcmVkdWNlIChudW0pIHtcbiAgICAvLyBBc3N1bWVzIHRoYXQgYG51bWAgaXMgbGVzcyB0aGFuIGBQXjJgXG4gICAgLy8gbnVtID0gSEkgKiAoMiBeIE4gLSBLKSArIEhJICogSyArIExPID0gSEkgKiBLICsgTE8gKG1vZCBQKVxuICAgIHZhciByID0gbnVtO1xuICAgIHZhciBybGVuO1xuXG4gICAgZG8ge1xuICAgICAgdGhpcy5zcGxpdChyLCB0aGlzLnRtcCk7XG4gICAgICByID0gdGhpcy5pbXVsSyhyKTtcbiAgICAgIHIgPSByLmlhZGQodGhpcy50bXApO1xuICAgICAgcmxlbiA9IHIuYml0TGVuZ3RoKCk7XG4gICAgfSB3aGlsZSAocmxlbiA+IHRoaXMubik7XG5cbiAgICB2YXIgY21wID0gcmxlbiA8IHRoaXMubiA/IC0xIDogci51Y21wKHRoaXMucCk7XG4gICAgaWYgKGNtcCA9PT0gMCkge1xuICAgICAgci53b3Jkc1swXSA9IDA7XG4gICAgICByLmxlbmd0aCA9IDE7XG4gICAgfSBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgICByLmlzdWIodGhpcy5wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgci5zdHJpcCgpO1xuICAgIH1cblxuICAgIHJldHVybiByO1xuICB9O1xuXG4gIE1QcmltZS5wcm90b3R5cGUuc3BsaXQgPSBmdW5jdGlvbiBzcGxpdCAoaW5wdXQsIG91dCkge1xuICAgIGlucHV0Lml1c2hybih0aGlzLm4sIDAsIG91dCk7XG4gIH07XG5cbiAgTVByaW1lLnByb3RvdHlwZS5pbXVsSyA9IGZ1bmN0aW9uIGltdWxLIChudW0pIHtcbiAgICByZXR1cm4gbnVtLmltdWwodGhpcy5rKTtcbiAgfTtcblxuICBmdW5jdGlvbiBLMjU2ICgpIHtcbiAgICBNUHJpbWUuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICAnazI1NicsXG4gICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYnKTtcbiAgfVxuICBpbmhlcml0cyhLMjU2LCBNUHJpbWUpO1xuXG4gIEsyNTYucHJvdG90eXBlLnNwbGl0ID0gZnVuY3Rpb24gc3BsaXQgKGlucHV0LCBvdXRwdXQpIHtcbiAgICAvLyAyNTYgPSA5ICogMjYgKyAyMlxuICAgIHZhciBtYXNrID0gMHgzZmZmZmY7XG5cbiAgICB2YXIgb3V0TGVuID0gTWF0aC5taW4oaW5wdXQubGVuZ3RoLCA5KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG91dExlbjsgaSsrKSB7XG4gICAgICBvdXRwdXQud29yZHNbaV0gPSBpbnB1dC53b3Jkc1tpXTtcbiAgICB9XG4gICAgb3V0cHV0Lmxlbmd0aCA9IG91dExlbjtcblxuICAgIGlmIChpbnB1dC5sZW5ndGggPD0gOSkge1xuICAgICAgaW5wdXQud29yZHNbMF0gPSAwO1xuICAgICAgaW5wdXQubGVuZ3RoID0gMTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTaGlmdCBieSA5IGxpbWJzXG4gICAgdmFyIHByZXYgPSBpbnB1dC53b3Jkc1s5XTtcbiAgICBvdXRwdXQud29yZHNbb3V0cHV0Lmxlbmd0aCsrXSA9IHByZXYgJiBtYXNrO1xuXG4gICAgZm9yIChpID0gMTA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5leHQgPSBpbnB1dC53b3Jkc1tpXSB8IDA7XG4gICAgICBpbnB1dC53b3Jkc1tpIC0gMTBdID0gKChuZXh0ICYgbWFzaykgPDwgNCkgfCAocHJldiA+Pj4gMjIpO1xuICAgICAgcHJldiA9IG5leHQ7XG4gICAgfVxuICAgIHByZXYgPj4+PSAyMjtcbiAgICBpbnB1dC53b3Jkc1tpIC0gMTBdID0gcHJldjtcbiAgICBpZiAocHJldiA9PT0gMCAmJiBpbnB1dC5sZW5ndGggPiAxMCkge1xuICAgICAgaW5wdXQubGVuZ3RoIC09IDEwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dC5sZW5ndGggLT0gOTtcbiAgICB9XG4gIH07XG5cbiAgSzI1Ni5wcm90b3R5cGUuaW11bEsgPSBmdW5jdGlvbiBpbXVsSyAobnVtKSB7XG4gICAgLy8gSyA9IDB4MTAwMDAwM2QxID0gWyAweDQwLCAweDNkMSBdXG4gICAgbnVtLndvcmRzW251bS5sZW5ndGhdID0gMDtcbiAgICBudW0ud29yZHNbbnVtLmxlbmd0aCArIDFdID0gMDtcbiAgICBudW0ubGVuZ3RoICs9IDI7XG5cbiAgICAvLyBib3VuZGVkIGF0OiAweDQwICogMHgzZmZmZmZmICsgMHgzZDAgPSAweDEwMDAwMDM5MFxuICAgIHZhciBsbyA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3ID0gbnVtLndvcmRzW2ldIHwgMDtcbiAgICAgIGxvICs9IHcgKiAweDNkMTtcbiAgICAgIG51bS53b3Jkc1tpXSA9IGxvICYgMHgzZmZmZmZmO1xuICAgICAgbG8gPSB3ICogMHg0MCArICgobG8gLyAweDQwMDAwMDApIHwgMCk7XG4gICAgfVxuXG4gICAgLy8gRmFzdCBsZW5ndGggcmVkdWN0aW9uXG4gICAgaWYgKG51bS53b3Jkc1tudW0ubGVuZ3RoIC0gMV0gPT09IDApIHtcbiAgICAgIG51bS5sZW5ndGgtLTtcbiAgICAgIGlmIChudW0ud29yZHNbbnVtLmxlbmd0aCAtIDFdID09PSAwKSB7XG4gICAgICAgIG51bS5sZW5ndGgtLTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bTtcbiAgfTtcblxuICBmdW5jdGlvbiBQMjI0ICgpIHtcbiAgICBNUHJpbWUuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICAncDIyNCcsXG4gICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEnKTtcbiAgfVxuICBpbmhlcml0cyhQMjI0LCBNUHJpbWUpO1xuXG4gIGZ1bmN0aW9uIFAxOTIgKCkge1xuICAgIE1QcmltZS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgICdwMTkyJyxcbiAgICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZicpO1xuICB9XG4gIGluaGVyaXRzKFAxOTIsIE1QcmltZSk7XG5cbiAgZnVuY3Rpb24gUDI1NTE5ICgpIHtcbiAgICAvLyAyIF4gMjU1IC0gMTlcbiAgICBNUHJpbWUuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICAnMjU1MTknLFxuICAgICAgJzdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQnKTtcbiAgfVxuICBpbmhlcml0cyhQMjU1MTksIE1QcmltZSk7XG5cbiAgUDI1NTE5LnByb3RvdHlwZS5pbXVsSyA9IGZ1bmN0aW9uIGltdWxLIChudW0pIHtcbiAgICAvLyBLID0gMHgxM1xuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoaSA9IChudW0ud29yZHNbaV0gfCAwKSAqIDB4MTMgKyBjYXJyeTtcbiAgICAgIHZhciBsbyA9IGhpICYgMHgzZmZmZmZmO1xuICAgICAgaGkgPj4+PSAyNjtcblxuICAgICAgbnVtLndvcmRzW2ldID0gbG87XG4gICAgICBjYXJyeSA9IGhpO1xuICAgIH1cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIG51bS53b3Jkc1tudW0ubGVuZ3RoKytdID0gY2Fycnk7XG4gICAgfVxuICAgIHJldHVybiBudW07XG4gIH07XG5cbiAgLy8gRXhwb3J0ZWQgbW9zdGx5IGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB1c2UgcGxhaW4gbmFtZSBpbnN0ZWFkXG4gIEJOLl9wcmltZSA9IGZ1bmN0aW9uIHByaW1lIChuYW1lKSB7XG4gICAgLy8gQ2FjaGVkIHZlcnNpb24gb2YgcHJpbWVcbiAgICBpZiAocHJpbWVzW25hbWVdKSByZXR1cm4gcHJpbWVzW25hbWVdO1xuXG4gICAgdmFyIHByaW1lO1xuICAgIGlmIChuYW1lID09PSAnazI1NicpIHtcbiAgICAgIHByaW1lID0gbmV3IEsyNTYoKTtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdwMjI0Jykge1xuICAgICAgcHJpbWUgPSBuZXcgUDIyNCgpO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3AxOTInKSB7XG4gICAgICBwcmltZSA9IG5ldyBQMTkyKCk7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAncDI1NTE5Jykge1xuICAgICAgcHJpbWUgPSBuZXcgUDI1NTE5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBwcmltZSAnICsgbmFtZSk7XG4gICAgfVxuICAgIHByaW1lc1tuYW1lXSA9IHByaW1lO1xuXG4gICAgcmV0dXJuIHByaW1lO1xuICB9O1xuXG4gIC8vXG4gIC8vIEJhc2UgcmVkdWN0aW9uIGVuZ2luZVxuICAvL1xuICBmdW5jdGlvbiBSZWQgKG0pIHtcbiAgICBpZiAodHlwZW9mIG0gPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgcHJpbWUgPSBCTi5fcHJpbWUobSk7XG4gICAgICB0aGlzLm0gPSBwcmltZS5wO1xuICAgICAgdGhpcy5wcmltZSA9IHByaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQobS5ndG4oMSksICdtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEnKTtcbiAgICAgIHRoaXMubSA9IG07XG4gICAgICB0aGlzLnByaW1lID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBSZWQucHJvdG90eXBlLl92ZXJpZnkxID0gZnVuY3Rpb24gX3ZlcmlmeTEgKGEpIHtcbiAgICBhc3NlcnQoYS5uZWdhdGl2ZSA9PT0gMCwgJ3JlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzJyk7XG4gICAgYXNzZXJ0KGEucmVkLCAncmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuX3ZlcmlmeTIgPSBmdW5jdGlvbiBfdmVyaWZ5MiAoYSwgYikge1xuICAgIGFzc2VydCgoYS5uZWdhdGl2ZSB8IGIubmVnYXRpdmUpID09PSAwLCAncmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMnKTtcbiAgICBhc3NlcnQoYS5yZWQgJiYgYS5yZWQgPT09IGIucmVkLFxuICAgICAgJ3JlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmltb2QgPSBmdW5jdGlvbiBpbW9kIChhKSB7XG4gICAgaWYgKHRoaXMucHJpbWUpIHJldHVybiB0aGlzLnByaW1lLmlyZWR1Y2UoYSkuX2ZvcmNlUmVkKHRoaXMpO1xuICAgIHJldHVybiBhLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5uZWcgPSBmdW5jdGlvbiBuZWcgKGEpIHtcbiAgICBpZiAoYS5pc1plcm8oKSkge1xuICAgICAgcmV0dXJuIGEuY2xvbmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tLnN1YihhKS5fZm9yY2VSZWQodGhpcyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQgKGEsIGIpIHtcbiAgICB0aGlzLl92ZXJpZnkyKGEsIGIpO1xuXG4gICAgdmFyIHJlcyA9IGEuYWRkKGIpO1xuICAgIGlmIChyZXMuY21wKHRoaXMubSkgPj0gMCkge1xuICAgICAgcmVzLmlzdWIodGhpcy5tKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcy5fZm9yY2VSZWQodGhpcyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pYWRkID0gZnVuY3Rpb24gaWFkZCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG5cbiAgICB2YXIgcmVzID0gYS5pYWRkKGIpO1xuICAgIGlmIChyZXMuY21wKHRoaXMubSkgPj0gMCkge1xuICAgICAgcmVzLmlzdWIodGhpcy5tKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLnN1YiA9IGZ1bmN0aW9uIHN1YiAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG5cbiAgICB2YXIgcmVzID0gYS5zdWIoYik7XG4gICAgaWYgKHJlcy5jbXBuKDApIDwgMCkge1xuICAgICAgcmVzLmlhZGQodGhpcy5tKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcy5fZm9yY2VSZWQodGhpcyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pc3ViID0gZnVuY3Rpb24gaXN1YiAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG5cbiAgICB2YXIgcmVzID0gYS5pc3ViKGIpO1xuICAgIGlmIChyZXMuY21wbigwKSA8IDApIHtcbiAgICAgIHJlcy5pYWRkKHRoaXMubSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5zaGwgPSBmdW5jdGlvbiBzaGwgKGEsIG51bSkge1xuICAgIHRoaXMuX3ZlcmlmeTEoYSk7XG4gICAgcmV0dXJuIHRoaXMuaW1vZChhLnVzaGxuKG51bSkpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuaW11bCA9IGZ1bmN0aW9uIGltdWwgKGEsIGIpIHtcbiAgICB0aGlzLl92ZXJpZnkyKGEsIGIpO1xuICAgIHJldHVybiB0aGlzLmltb2QoYS5pbXVsKGIpKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG4gICAgcmV0dXJuIHRoaXMuaW1vZChhLm11bChiKSk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pc3FyID0gZnVuY3Rpb24gaXNxciAoYSkge1xuICAgIHJldHVybiB0aGlzLmltdWwoYSwgYS5jbG9uZSgpKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLnNxciA9IGZ1bmN0aW9uIHNxciAoYSkge1xuICAgIHJldHVybiB0aGlzLm11bChhLCBhKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLnNxcnQgPSBmdW5jdGlvbiBzcXJ0IChhKSB7XG4gICAgaWYgKGEuaXNaZXJvKCkpIHJldHVybiBhLmNsb25lKCk7XG5cbiAgICB2YXIgbW9kMyA9IHRoaXMubS5hbmRsbigzKTtcbiAgICBhc3NlcnQobW9kMyAlIDIgPT09IDEpO1xuXG4gICAgLy8gRmFzdCBjYXNlXG4gICAgaWYgKG1vZDMgPT09IDMpIHtcbiAgICAgIHZhciBwb3cgPSB0aGlzLm0uYWRkKG5ldyBCTigxKSkuaXVzaHJuKDIpO1xuICAgICAgcmV0dXJuIHRoaXMucG93KGEsIHBvdyk7XG4gICAgfVxuXG4gICAgLy8gVG9uZWxsaS1TaGFua3MgYWxnb3JpdGhtIChUb3RhbGx5IHVub3B0aW1pemVkIGFuZCBzbG93KVxuICAgIC8vXG4gICAgLy8gRmluZCBRIGFuZCBTLCB0aGF0IFEgKiAyIF4gUyA9IChQIC0gMSlcbiAgICB2YXIgcSA9IHRoaXMubS5zdWJuKDEpO1xuICAgIHZhciBzID0gMDtcbiAgICB3aGlsZSAoIXEuaXNaZXJvKCkgJiYgcS5hbmRsbigxKSA9PT0gMCkge1xuICAgICAgcysrO1xuICAgICAgcS5pdXNocm4oMSk7XG4gICAgfVxuICAgIGFzc2VydCghcS5pc1plcm8oKSk7XG5cbiAgICB2YXIgb25lID0gbmV3IEJOKDEpLnRvUmVkKHRoaXMpO1xuICAgIHZhciBuT25lID0gb25lLnJlZE5lZygpO1xuXG4gICAgLy8gRmluZCBxdWFkcmF0aWMgbm9uLXJlc2lkdWVcbiAgICAvLyBOT1RFOiBNYXggaXMgc3VjaCBiZWNhdXNlIG9mIGdlbmVyYWxpemVkIFJpZW1hbm4gaHlwb3RoZXNpcy5cbiAgICB2YXIgbHBvdyA9IHRoaXMubS5zdWJuKDEpLml1c2hybigxKTtcbiAgICB2YXIgeiA9IHRoaXMubS5iaXRMZW5ndGgoKTtcbiAgICB6ID0gbmV3IEJOKDIgKiB6ICogeikudG9SZWQodGhpcyk7XG5cbiAgICB3aGlsZSAodGhpcy5wb3coeiwgbHBvdykuY21wKG5PbmUpICE9PSAwKSB7XG4gICAgICB6LnJlZElBZGQobk9uZSk7XG4gICAgfVxuXG4gICAgdmFyIGMgPSB0aGlzLnBvdyh6LCBxKTtcbiAgICB2YXIgciA9IHRoaXMucG93KGEsIHEuYWRkbigxKS5pdXNocm4oMSkpO1xuICAgIHZhciB0ID0gdGhpcy5wb3coYSwgcSk7XG4gICAgdmFyIG0gPSBzO1xuICAgIHdoaWxlICh0LmNtcChvbmUpICE9PSAwKSB7XG4gICAgICB2YXIgdG1wID0gdDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyB0bXAuY21wKG9uZSkgIT09IDA7IGkrKykge1xuICAgICAgICB0bXAgPSB0bXAucmVkU3FyKCk7XG4gICAgICB9XG4gICAgICBhc3NlcnQoaSA8IG0pO1xuICAgICAgdmFyIGIgPSB0aGlzLnBvdyhjLCBuZXcgQk4oMSkuaXVzaGxuKG0gLSBpIC0gMSkpO1xuXG4gICAgICByID0gci5yZWRNdWwoYik7XG4gICAgICBjID0gYi5yZWRTcXIoKTtcbiAgICAgIHQgPSB0LnJlZE11bChjKTtcbiAgICAgIG0gPSBpO1xuICAgIH1cblxuICAgIHJldHVybiByO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuaW52bSA9IGZ1bmN0aW9uIGludm0gKGEpIHtcbiAgICB2YXIgaW52ID0gYS5faW52bXAodGhpcy5tKTtcbiAgICBpZiAoaW52Lm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICBpbnYubmVnYXRpdmUgPSAwO1xuICAgICAgcmV0dXJuIHRoaXMuaW1vZChpbnYpLnJlZE5lZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5pbW9kKGludik7XG4gICAgfVxuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUucG93ID0gZnVuY3Rpb24gcG93IChhLCBudW0pIHtcbiAgICBpZiAobnVtLmlzWmVybygpKSByZXR1cm4gbmV3IEJOKDEpO1xuICAgIGlmIChudW0uY21wbigxKSA9PT0gMCkgcmV0dXJuIGEuY2xvbmUoKTtcblxuICAgIHZhciB3aW5kb3dTaXplID0gNDtcbiAgICB2YXIgd25kID0gbmV3IEFycmF5KDEgPDwgd2luZG93U2l6ZSk7XG4gICAgd25kWzBdID0gbmV3IEJOKDEpLnRvUmVkKHRoaXMpO1xuICAgIHduZFsxXSA9IGE7XG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPCB3bmQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHduZFtpXSA9IHRoaXMubXVsKHduZFtpIC0gMV0sIGEpO1xuICAgIH1cblxuICAgIHZhciByZXMgPSB3bmRbMF07XG4gICAgdmFyIGN1cnJlbnQgPSAwO1xuICAgIHZhciBjdXJyZW50TGVuID0gMDtcbiAgICB2YXIgc3RhcnQgPSBudW0uYml0TGVuZ3RoKCkgJSAyNjtcbiAgICBpZiAoc3RhcnQgPT09IDApIHtcbiAgICAgIHN0YXJ0ID0gMjY7XG4gICAgfVxuXG4gICAgZm9yIChpID0gbnVtLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgd29yZCA9IG51bS53b3Jkc1tpXTtcbiAgICAgIGZvciAodmFyIGogPSBzdGFydCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAgIHZhciBiaXQgPSAod29yZCA+PiBqKSAmIDE7XG4gICAgICAgIGlmIChyZXMgIT09IHduZFswXSkge1xuICAgICAgICAgIHJlcyA9IHRoaXMuc3FyKHJlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYml0ID09PSAwICYmIGN1cnJlbnQgPT09IDApIHtcbiAgICAgICAgICBjdXJyZW50TGVuID0gMDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnQgPDw9IDE7XG4gICAgICAgIGN1cnJlbnQgfD0gYml0O1xuICAgICAgICBjdXJyZW50TGVuKys7XG4gICAgICAgIGlmIChjdXJyZW50TGVuICE9PSB3aW5kb3dTaXplICYmIChpICE9PSAwIHx8IGogIT09IDApKSBjb250aW51ZTtcblxuICAgICAgICByZXMgPSB0aGlzLm11bChyZXMsIHduZFtjdXJyZW50XSk7XG4gICAgICAgIGN1cnJlbnRMZW4gPSAwO1xuICAgICAgICBjdXJyZW50ID0gMDtcbiAgICAgIH1cbiAgICAgIHN0YXJ0ID0gMjY7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmNvbnZlcnRUbyA9IGZ1bmN0aW9uIGNvbnZlcnRUbyAobnVtKSB7XG4gICAgdmFyIHIgPSBudW0udW1vZCh0aGlzLm0pO1xuXG4gICAgcmV0dXJuIHIgPT09IG51bSA/IHIuY2xvbmUoKSA6IHI7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5jb252ZXJ0RnJvbSA9IGZ1bmN0aW9uIGNvbnZlcnRGcm9tIChudW0pIHtcbiAgICB2YXIgcmVzID0gbnVtLmNsb25lKCk7XG4gICAgcmVzLnJlZCA9IG51bGw7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvL1xuICAvLyBNb250Z29tZXJ5IG1ldGhvZCBlbmdpbmVcbiAgLy9cblxuICBCTi5tb250ID0gZnVuY3Rpb24gbW9udCAobnVtKSB7XG4gICAgcmV0dXJuIG5ldyBNb250KG51bSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gTW9udCAobSkge1xuICAgIFJlZC5jYWxsKHRoaXMsIG0pO1xuXG4gICAgdGhpcy5zaGlmdCA9IHRoaXMubS5iaXRMZW5ndGgoKTtcbiAgICBpZiAodGhpcy5zaGlmdCAlIDI2ICE9PSAwKSB7XG4gICAgICB0aGlzLnNoaWZ0ICs9IDI2IC0gKHRoaXMuc2hpZnQgJSAyNik7XG4gICAgfVxuXG4gICAgdGhpcy5yID0gbmV3IEJOKDEpLml1c2hsbih0aGlzLnNoaWZ0KTtcbiAgICB0aGlzLnIyID0gdGhpcy5pbW9kKHRoaXMuci5zcXIoKSk7XG4gICAgdGhpcy5yaW52ID0gdGhpcy5yLl9pbnZtcCh0aGlzLm0pO1xuXG4gICAgdGhpcy5taW52ID0gdGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pO1xuICAgIHRoaXMubWludiA9IHRoaXMubWludi51bW9kKHRoaXMucik7XG4gICAgdGhpcy5taW52ID0gdGhpcy5yLnN1Yih0aGlzLm1pbnYpO1xuICB9XG4gIGluaGVyaXRzKE1vbnQsIFJlZCk7XG5cbiAgTW9udC5wcm90b3R5cGUuY29udmVydFRvID0gZnVuY3Rpb24gY29udmVydFRvIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5pbW9kKG51bS51c2hsbih0aGlzLnNoaWZ0KSk7XG4gIH07XG5cbiAgTW9udC5wcm90b3R5cGUuY29udmVydEZyb20gPSBmdW5jdGlvbiBjb252ZXJ0RnJvbSAobnVtKSB7XG4gICAgdmFyIHIgPSB0aGlzLmltb2QobnVtLm11bCh0aGlzLnJpbnYpKTtcbiAgICByLnJlZCA9IG51bGw7XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgTW9udC5wcm90b3R5cGUuaW11bCA9IGZ1bmN0aW9uIGltdWwgKGEsIGIpIHtcbiAgICBpZiAoYS5pc1plcm8oKSB8fCBiLmlzWmVybygpKSB7XG4gICAgICBhLndvcmRzWzBdID0gMDtcbiAgICAgIGEubGVuZ3RoID0gMTtcbiAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIHZhciB0ID0gYS5pbXVsKGIpO1xuICAgIHZhciBjID0gdC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSk7XG4gICAgdmFyIHUgPSB0LmlzdWIoYykuaXVzaHJuKHRoaXMuc2hpZnQpO1xuICAgIHZhciByZXMgPSB1O1xuXG4gICAgaWYgKHUuY21wKHRoaXMubSkgPj0gMCkge1xuICAgICAgcmVzID0gdS5pc3ViKHRoaXMubSk7XG4gICAgfSBlbHNlIGlmICh1LmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMgPSB1LmlhZGQodGhpcy5tKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwgKGEsIGIpIHtcbiAgICBpZiAoYS5pc1plcm8oKSB8fCBiLmlzWmVybygpKSByZXR1cm4gbmV3IEJOKDApLl9mb3JjZVJlZCh0aGlzKTtcblxuICAgIHZhciB0ID0gYS5tdWwoYik7XG4gICAgdmFyIGMgPSB0Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKTtcbiAgICB2YXIgdSA9IHQuaXN1YihjKS5pdXNocm4odGhpcy5zaGlmdCk7XG4gICAgdmFyIHJlcyA9IHU7XG4gICAgaWYgKHUuY21wKHRoaXMubSkgPj0gMCkge1xuICAgICAgcmVzID0gdS5pc3ViKHRoaXMubSk7XG4gICAgfSBlbHNlIGlmICh1LmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMgPSB1LmlhZGQodGhpcy5tKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5pbnZtID0gZnVuY3Rpb24gaW52bSAoYSkge1xuICAgIC8vIChBUileLTEgKiBSXjIgPSAoQV4tMSAqIFJeLTEpICogUl4yID0gQV4tMSAqIFJcbiAgICB2YXIgcmVzID0gdGhpcy5pbW9kKGEuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKTtcbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcbn0pKHR5cGVvZiBtb2R1bGUgPT09ICd1bmRlZmluZWQnIHx8IG1vZHVsZSwgdGhpcyk7XG4iLCJ2YXIgcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByYW5kKGxlbikge1xuICBpZiAoIXIpXG4gICAgciA9IG5ldyBSYW5kKG51bGwpO1xuXG4gIHJldHVybiByLmdlbmVyYXRlKGxlbik7XG59O1xuXG5mdW5jdGlvbiBSYW5kKHJhbmQpIHtcbiAgdGhpcy5yYW5kID0gcmFuZDtcbn1cbm1vZHVsZS5leHBvcnRzLlJhbmQgPSBSYW5kO1xuXG5SYW5kLnByb3RvdHlwZS5nZW5lcmF0ZSA9IGZ1bmN0aW9uIGdlbmVyYXRlKGxlbikge1xuICByZXR1cm4gdGhpcy5fcmFuZChsZW4pO1xufTtcblxuLy8gRW11bGF0ZSBjcnlwdG8gQVBJIHVzaW5nIHJhbmR5XG5SYW5kLnByb3RvdHlwZS5fcmFuZCA9IGZ1bmN0aW9uIF9yYW5kKG4pIHtcbiAgaWYgKHRoaXMucmFuZC5nZXRCeXRlcylcbiAgICByZXR1cm4gdGhpcy5yYW5kLmdldEJ5dGVzKG4pO1xuXG4gIHZhciByZXMgPSBuZXcgVWludDhBcnJheShuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXMubGVuZ3RoOyBpKyspXG4gICAgcmVzW2ldID0gdGhpcy5yYW5kLmdldEJ5dGUoKTtcbiAgcmV0dXJuIHJlcztcbn07XG5cbmlmICh0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCcpIHtcbiAgaWYgKHNlbGYuY3J5cHRvICYmIHNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIE1vZGVybiBicm93c2Vyc1xuICAgIFJhbmQucHJvdG90eXBlLl9yYW5kID0gZnVuY3Rpb24gX3JhbmQobikge1xuICAgICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KG4pO1xuICAgICAgc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycik7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH07XG4gIH0gZWxzZSBpZiAoc2VsZi5tc0NyeXB0byAmJiBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIElFXG4gICAgUmFuZC5wcm90b3R5cGUuX3JhbmQgPSBmdW5jdGlvbiBfcmFuZChuKSB7XG4gICAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkobik7XG4gICAgICBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnIpO1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9O1xuXG4gIC8vIFNhZmFyaSdzIFdlYldvcmtlcnMgZG8gbm90IGhhdmUgYGNyeXB0b2BcbiAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0Jykge1xuICAgIC8vIE9sZCBqdW5rXG4gICAgUmFuZC5wcm90b3R5cGUuX3JhbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkIHlldCcpO1xuICAgIH07XG4gIH1cbn0gZWxzZSB7XG4gIC8vIE5vZGUuanMgb3IgV2ViIHdvcmtlciB3aXRoIG5vIGNyeXB0byBzdXBwb3J0XG4gIHRyeSB7XG4gICAgdmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuICAgIGlmICh0eXBlb2YgY3J5cHRvLnJhbmRvbUJ5dGVzICE9PSAnZnVuY3Rpb24nKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3Qgc3VwcG9ydGVkJyk7XG5cbiAgICBSYW5kLnByb3RvdHlwZS5fcmFuZCA9IGZ1bmN0aW9uIF9yYW5kKG4pIHtcbiAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMobik7XG4gICAgfTtcbiAgfSBjYXRjaCAoZSkge1xuICB9XG59XG4iLCIiLCIvLyBiYXNlZCBvbiB0aGUgYWVzIGltcGxpbWVudGF0aW9uIGluIHRyaXBsZSBzZWNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9rZXliYXNlL3RyaXBsZXNlY1xuXG4vLyB3aGljaCBpcyBpbiB0dXJuIGJhc2VkIG9uIHRoZSBvbmUgZnJvbSBjcnlwdG8tanNcbi8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL1xuXG52YXIgdWludF9tYXggPSBNYXRoLnBvdygyLCAzMilcbmZ1bmN0aW9uIGZpeHVwX3VpbnQzMiAoeCkge1xuICB2YXIgcmV0LCB4X3Bvc1xuICByZXQgPSB4ID4gdWludF9tYXggfHwgeCA8IDAgPyAoeF9wb3MgPSBNYXRoLmFicyh4KSAlIHVpbnRfbWF4LCB4IDwgMCA/IHVpbnRfbWF4IC0geF9wb3MgOiB4X3BvcykgOiB4XG4gIHJldHVybiByZXRcbn1cbmZ1bmN0aW9uIHNjcnViX3ZlYyAodikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHYubGVuZ3RoOyB2KyspIHtcbiAgICB2W2ldID0gMFxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBHbG9iYWwgKCkge1xuICB0aGlzLlNCT1ggPSBbXVxuICB0aGlzLklOVl9TQk9YID0gW11cbiAgdGhpcy5TVUJfTUlYID0gW1tdLCBbXSwgW10sIFtdXVxuICB0aGlzLklOVl9TVUJfTUlYID0gW1tdLCBbXSwgW10sIFtdXVxuICB0aGlzLmluaXQoKVxuICB0aGlzLlJDT04gPSBbMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgxYiwgMHgzNl1cbn1cblxuR2xvYmFsLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZCwgaSwgc3gsIHQsIHgsIHgyLCB4NCwgeDgsIHhpLCBfaVxuICBkID0gKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2ksIF9yZXN1bHRzXG4gICAgX3Jlc3VsdHMgPSBbXVxuICAgIGZvciAoaSA9IF9pID0gMDsgX2kgPCAyNTY7IGkgPSArK19pKSB7XG4gICAgICBpZiAoaSA8IDEyOCkge1xuICAgICAgICBfcmVzdWx0cy5wdXNoKGkgPDwgMSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9yZXN1bHRzLnB1c2goKGkgPDwgMSkgXiAweDExYilcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9yZXN1bHRzXG4gIH0pKClcbiAgeCA9IDBcbiAgeGkgPSAwXG4gIGZvciAoaSA9IF9pID0gMDsgX2kgPCAyNTY7IGkgPSArK19pKSB7XG4gICAgc3ggPSB4aSBeICh4aSA8PCAxKSBeICh4aSA8PCAyKSBeICh4aSA8PCAzKSBeICh4aSA8PCA0KVxuICAgIHN4ID0gKHN4ID4+PiA4KSBeIChzeCAmIDB4ZmYpIF4gMHg2M1xuICAgIHRoaXMuU0JPWFt4XSA9IHN4XG4gICAgdGhpcy5JTlZfU0JPWFtzeF0gPSB4XG4gICAgeDIgPSBkW3hdXG4gICAgeDQgPSBkW3gyXVxuICAgIHg4ID0gZFt4NF1cbiAgICB0ID0gKGRbc3hdICogMHgxMDEpIF4gKHN4ICogMHgxMDEwMTAwKVxuICAgIHRoaXMuU1VCX01JWFswXVt4XSA9ICh0IDw8IDI0KSB8ICh0ID4+PiA4KVxuICAgIHRoaXMuU1VCX01JWFsxXVt4XSA9ICh0IDw8IDE2KSB8ICh0ID4+PiAxNilcbiAgICB0aGlzLlNVQl9NSVhbMl1beF0gPSAodCA8PCA4KSB8ICh0ID4+PiAyNClcbiAgICB0aGlzLlNVQl9NSVhbM11beF0gPSB0XG4gICAgdCA9ICh4OCAqIDB4MTAxMDEwMSkgXiAoeDQgKiAweDEwMDAxKSBeICh4MiAqIDB4MTAxKSBeICh4ICogMHgxMDEwMTAwKVxuICAgIHRoaXMuSU5WX1NVQl9NSVhbMF1bc3hdID0gKHQgPDwgMjQpIHwgKHQgPj4+IDgpXG4gICAgdGhpcy5JTlZfU1VCX01JWFsxXVtzeF0gPSAodCA8PCAxNikgfCAodCA+Pj4gMTYpXG4gICAgdGhpcy5JTlZfU1VCX01JWFsyXVtzeF0gPSAodCA8PCA4KSB8ICh0ID4+PiAyNClcbiAgICB0aGlzLklOVl9TVUJfTUlYWzNdW3N4XSA9IHRcbiAgICBpZiAoeCA9PT0gMCkge1xuICAgICAgeCA9IHhpID0gMVxuICAgIH0gZWxzZSB7XG4gICAgICB4ID0geDIgXiBkW2RbZFt4OCBeIHgyXV1dXG4gICAgICB4aSBePSBkW2RbeGldXVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG52YXIgRyA9IG5ldyBHbG9iYWwoKVxuXG5BRVMuYmxvY2tTaXplID0gNCAqIDRcblxuQUVTLnByb3RvdHlwZS5ibG9ja1NpemUgPSBBRVMuYmxvY2tTaXplXG5cbkFFUy5rZXlTaXplID0gMjU2IC8gOFxuXG5BRVMucHJvdG90eXBlLmtleVNpemUgPSBBRVMua2V5U2l6ZVxuXG5mdW5jdGlvbiBidWZmZXJUb0FycmF5IChidWYpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGggLyA0XG4gIHZhciBvdXQgPSBuZXcgQXJyYXkobGVuKVxuICB2YXIgaSA9IC0xXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBvdXRbaV0gPSBidWYucmVhZFVJbnQzMkJFKGkgKiA0KVxuICB9XG4gIHJldHVybiBvdXRcbn1cbmZ1bmN0aW9uIEFFUyAoa2V5KSB7XG4gIHRoaXMuX2tleSA9IGJ1ZmZlclRvQXJyYXkoa2V5KVxuICB0aGlzLl9kb1Jlc2V0KClcbn1cblxuQUVTLnByb3RvdHlwZS5fZG9SZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGludktzUm93LCBrZXlTaXplLCBrZXlXb3Jkcywga3NSb3csIGtzUm93cywgdFxuICBrZXlXb3JkcyA9IHRoaXMuX2tleVxuICBrZXlTaXplID0ga2V5V29yZHMubGVuZ3RoXG4gIHRoaXMuX25Sb3VuZHMgPSBrZXlTaXplICsgNlxuICBrc1Jvd3MgPSAodGhpcy5fblJvdW5kcyArIDEpICogNFxuICB0aGlzLl9rZXlTY2hlZHVsZSA9IFtdXG4gIGZvciAoa3NSb3cgPSAwOyBrc1JvdyA8IGtzUm93czsga3NSb3crKykge1xuICAgIHRoaXMuX2tleVNjaGVkdWxlW2tzUm93XSA9IGtzUm93IDwga2V5U2l6ZSA/IGtleVdvcmRzW2tzUm93XSA6ICh0ID0gdGhpcy5fa2V5U2NoZWR1bGVba3NSb3cgLSAxXSwgKGtzUm93ICUga2V5U2l6ZSkgPT09IDAgPyAodCA9ICh0IDw8IDgpIHwgKHQgPj4+IDI0KSwgdCA9IChHLlNCT1hbdCA+Pj4gMjRdIDw8IDI0KSB8IChHLlNCT1hbKHQgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChHLlNCT1hbKHQgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBHLlNCT1hbdCAmIDB4ZmZdLCB0IF49IEcuUkNPTlsoa3NSb3cgLyBrZXlTaXplKSB8IDBdIDw8IDI0KSA6IGtleVNpemUgPiA2ICYmIGtzUm93ICUga2V5U2l6ZSA9PT0gNCA/IHQgPSAoRy5TQk9YW3QgPj4+IDI0XSA8PCAyNCkgfCAoRy5TQk9YWyh0ID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoRy5TQk9YWyh0ID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgRy5TQk9YW3QgJiAweGZmXSA6IHZvaWQgMCwgdGhpcy5fa2V5U2NoZWR1bGVba3NSb3cgLSBrZXlTaXplXSBeIHQpXG4gIH1cbiAgdGhpcy5faW52S2V5U2NoZWR1bGUgPSBbXVxuICBmb3IgKGludktzUm93ID0gMDsgaW52S3NSb3cgPCBrc1Jvd3M7IGludktzUm93KyspIHtcbiAgICBrc1JvdyA9IGtzUm93cyAtIGludktzUm93XG4gICAgdCA9IHRoaXMuX2tleVNjaGVkdWxlW2tzUm93IC0gKGludktzUm93ICUgNCA/IDAgOiA0KV1cbiAgICB0aGlzLl9pbnZLZXlTY2hlZHVsZVtpbnZLc1Jvd10gPSBpbnZLc1JvdyA8IDQgfHwga3NSb3cgPD0gNCA/IHQgOiBHLklOVl9TVUJfTUlYWzBdW0cuU0JPWFt0ID4+PiAyNF1dIF4gRy5JTlZfU1VCX01JWFsxXVtHLlNCT1hbKHQgPj4+IDE2KSAmIDB4ZmZdXSBeIEcuSU5WX1NVQl9NSVhbMl1bRy5TQk9YWyh0ID4+PiA4KSAmIDB4ZmZdXSBeIEcuSU5WX1NVQl9NSVhbM11bRy5TQk9YW3QgJiAweGZmXV1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5BRVMucHJvdG90eXBlLmVuY3J5cHRCbG9jayA9IGZ1bmN0aW9uIChNKSB7XG4gIE0gPSBidWZmZXJUb0FycmF5KG5ldyBCdWZmZXIoTSkpXG4gIHZhciBvdXQgPSB0aGlzLl9kb0NyeXB0QmxvY2soTSwgdGhpcy5fa2V5U2NoZWR1bGUsIEcuU1VCX01JWCwgRy5TQk9YKVxuICB2YXIgYnVmID0gbmV3IEJ1ZmZlcigxNilcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzBdLCAwKVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMV0sIDQpXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFsyXSwgOClcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzNdLCAxMilcbiAgcmV0dXJuIGJ1ZlxufVxuXG5BRVMucHJvdG90eXBlLmRlY3J5cHRCbG9jayA9IGZ1bmN0aW9uIChNKSB7XG4gIE0gPSBidWZmZXJUb0FycmF5KG5ldyBCdWZmZXIoTSkpXG4gIHZhciB0ZW1wID0gW01bM10sIE1bMV1dXG4gIE1bMV0gPSB0ZW1wWzBdXG4gIE1bM10gPSB0ZW1wWzFdXG4gIHZhciBvdXQgPSB0aGlzLl9kb0NyeXB0QmxvY2soTSwgdGhpcy5faW52S2V5U2NoZWR1bGUsIEcuSU5WX1NVQl9NSVgsIEcuSU5WX1NCT1gpXG4gIHZhciBidWYgPSBuZXcgQnVmZmVyKDE2KVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMF0sIDApXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFszXSwgNClcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzJdLCA4KVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMV0sIDEyKVxuICByZXR1cm4gYnVmXG59XG5cbkFFUy5wcm90b3R5cGUuc2NydWIgPSBmdW5jdGlvbiAoKSB7XG4gIHNjcnViX3ZlYyh0aGlzLl9rZXlTY2hlZHVsZSlcbiAgc2NydWJfdmVjKHRoaXMuX2ludktleVNjaGVkdWxlKVxuICBzY3J1Yl92ZWModGhpcy5fa2V5KVxufVxuXG5BRVMucHJvdG90eXBlLl9kb0NyeXB0QmxvY2sgPSBmdW5jdGlvbiAoTSwga2V5U2NoZWR1bGUsIFNVQl9NSVgsIFNCT1gpIHtcbiAgdmFyIGtzUm93LCBzMCwgczEsIHMyLCBzMywgdDAsIHQxLCB0MiwgdDNcblxuICBzMCA9IE1bMF0gXiBrZXlTY2hlZHVsZVswXVxuICBzMSA9IE1bMV0gXiBrZXlTY2hlZHVsZVsxXVxuICBzMiA9IE1bMl0gXiBrZXlTY2hlZHVsZVsyXVxuICBzMyA9IE1bM10gXiBrZXlTY2hlZHVsZVszXVxuICBrc1JvdyA9IDRcbiAgZm9yICh2YXIgcm91bmQgPSAxOyByb3VuZCA8IHRoaXMuX25Sb3VuZHM7IHJvdW5kKyspIHtcbiAgICB0MCA9IFNVQl9NSVhbMF1bczAgPj4+IDI0XSBeIFNVQl9NSVhbMV1bKHMxID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhbMl1bKHMyID4+PiA4KSAmIDB4ZmZdIF4gU1VCX01JWFszXVtzMyAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgICB0MSA9IFNVQl9NSVhbMF1bczEgPj4+IDI0XSBeIFNVQl9NSVhbMV1bKHMyID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhbMl1bKHMzID4+PiA4KSAmIDB4ZmZdIF4gU1VCX01JWFszXVtzMCAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgICB0MiA9IFNVQl9NSVhbMF1bczIgPj4+IDI0XSBeIFNVQl9NSVhbMV1bKHMzID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhbMl1bKHMwID4+PiA4KSAmIDB4ZmZdIF4gU1VCX01JWFszXVtzMSAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgICB0MyA9IFNVQl9NSVhbMF1bczMgPj4+IDI0XSBeIFNVQl9NSVhbMV1bKHMwID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhbMl1bKHMxID4+PiA4KSAmIDB4ZmZdIF4gU1VCX01JWFszXVtzMiAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgICBzMCA9IHQwXG4gICAgczEgPSB0MVxuICAgIHMyID0gdDJcbiAgICBzMyA9IHQzXG4gIH1cbiAgdDAgPSAoKFNCT1hbczAgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczEgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMiA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczMgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXVxuICB0MSA9ICgoU0JPWFtzMSA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyhzMiA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHMzID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFtzMCAmIDB4ZmZdKSBeIGtleVNjaGVkdWxlW2tzUm93KytdXG4gIHQyID0gKChTQk9YW3MyID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMzID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczAgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MxICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgdDMgPSAoKFNCT1hbczMgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczAgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMSA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczIgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXVxuICByZXR1cm4gW1xuICAgIGZpeHVwX3VpbnQzMih0MCksXG4gICAgZml4dXBfdWludDMyKHQxKSxcbiAgICBmaXh1cF91aW50MzIodDIpLFxuICAgIGZpeHVwX3VpbnQzMih0MylcbiAgXVxufVxuXG5leHBvcnRzLkFFUyA9IEFFU1xuIiwidmFyIGFlcyA9IHJlcXVpcmUoJy4vYWVzJylcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgR0hBU0ggPSByZXF1aXJlKCcuL2doYXNoJylcbnZhciB4b3IgPSByZXF1aXJlKCdidWZmZXIteG9yJylcbmluaGVyaXRzKFN0cmVhbUNpcGhlciwgVHJhbnNmb3JtKVxubW9kdWxlLmV4cG9ydHMgPSBTdHJlYW1DaXBoZXJcblxuZnVuY3Rpb24gU3RyZWFtQ2lwaGVyIChtb2RlLCBrZXksIGl2LCBkZWNyeXB0KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTdHJlYW1DaXBoZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1DaXBoZXIobW9kZSwga2V5LCBpdilcbiAgfVxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzKVxuICB0aGlzLl9maW5JRCA9IEJ1ZmZlci5jb25jYXQoW2l2LCBuZXcgQnVmZmVyKFswLCAwLCAwLCAxXSldKVxuICBpdiA9IEJ1ZmZlci5jb25jYXQoW2l2LCBuZXcgQnVmZmVyKFswLCAwLCAwLCAyXSldKVxuICB0aGlzLl9jaXBoZXIgPSBuZXcgYWVzLkFFUyhrZXkpXG4gIHRoaXMuX3ByZXYgPSBuZXcgQnVmZmVyKGl2Lmxlbmd0aClcbiAgdGhpcy5fY2FjaGUgPSBuZXcgQnVmZmVyKCcnKVxuICB0aGlzLl9zZWNDYWNoZSA9IG5ldyBCdWZmZXIoJycpXG4gIHRoaXMuX2RlY3J5cHQgPSBkZWNyeXB0XG4gIHRoaXMuX2FsZW4gPSAwXG4gIHRoaXMuX2xlbiA9IDBcbiAgaXYuY29weSh0aGlzLl9wcmV2KVxuICB0aGlzLl9tb2RlID0gbW9kZVxuICB2YXIgaCA9IG5ldyBCdWZmZXIoNClcbiAgaC5maWxsKDApXG4gIHRoaXMuX2doYXNoID0gbmV3IEdIQVNIKHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2soaCkpXG4gIHRoaXMuX2F1dGhUYWcgPSBudWxsXG4gIHRoaXMuX2NhbGxlZCA9IGZhbHNlXG59XG5TdHJlYW1DaXBoZXIucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgaWYgKCF0aGlzLl9jYWxsZWQgJiYgdGhpcy5fYWxlbikge1xuICAgIHZhciBydW1wID0gMTYgLSAodGhpcy5fYWxlbiAlIDE2KVxuICAgIGlmIChydW1wIDwgMTYpIHtcbiAgICAgIHJ1bXAgPSBuZXcgQnVmZmVyKHJ1bXApXG4gICAgICBydW1wLmZpbGwoMClcbiAgICAgIHRoaXMuX2doYXNoLnVwZGF0ZShydW1wKVxuICAgIH1cbiAgfVxuICB0aGlzLl9jYWxsZWQgPSB0cnVlXG4gIHZhciBvdXQgPSB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcywgY2h1bmspXG4gIGlmICh0aGlzLl9kZWNyeXB0KSB7XG4gICAgdGhpcy5fZ2hhc2gudXBkYXRlKGNodW5rKVxuICB9IGVsc2Uge1xuICAgIHRoaXMuX2doYXNoLnVwZGF0ZShvdXQpXG4gIH1cbiAgdGhpcy5fbGVuICs9IGNodW5rLmxlbmd0aFxuICByZXR1cm4gb3V0XG59XG5TdHJlYW1DaXBoZXIucHJvdG90eXBlLl9maW5hbCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuX2RlY3J5cHQgJiYgIXRoaXMuX2F1dGhUYWcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YScpXG4gIH1cbiAgdmFyIHRhZyA9IHhvcih0aGlzLl9naGFzaC5maW5hbCh0aGlzLl9hbGVuICogOCwgdGhpcy5fbGVuICogOCksIHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKVxuICBpZiAodGhpcy5fZGVjcnlwdCkge1xuICAgIGlmICh4b3JUZXN0KHRhZywgdGhpcy5fYXV0aFRhZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhJylcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fYXV0aFRhZyA9IHRhZ1xuICB9XG4gIHRoaXMuX2NpcGhlci5zY3J1YigpXG59XG5TdHJlYW1DaXBoZXIucHJvdG90eXBlLmdldEF1dGhUYWcgPSBmdW5jdGlvbiBnZXRBdXRoVGFnICgpIHtcbiAgaWYgKCF0aGlzLl9kZWNyeXB0ICYmIEJ1ZmZlci5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSkge1xuICAgIHJldHVybiB0aGlzLl9hdXRoVGFnXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZScpXG4gIH1cbn1cblN0cmVhbUNpcGhlci5wcm90b3R5cGUuc2V0QXV0aFRhZyA9IGZ1bmN0aW9uIHNldEF1dGhUYWcgKHRhZykge1xuICBpZiAodGhpcy5fZGVjcnlwdCkge1xuICAgIHRoaXMuX2F1dGhUYWcgPSB0YWdcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlJylcbiAgfVxufVxuU3RyZWFtQ2lwaGVyLnByb3RvdHlwZS5zZXRBQUQgPSBmdW5jdGlvbiBzZXRBQUQgKGJ1Zikge1xuICBpZiAoIXRoaXMuX2NhbGxlZCkge1xuICAgIHRoaXMuX2doYXNoLnVwZGF0ZShidWYpXG4gICAgdGhpcy5fYWxlbiArPSBidWYubGVuZ3RoXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0aW5nIHRvIHNldCBBQUQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUnKVxuICB9XG59XG5mdW5jdGlvbiB4b3JUZXN0IChhLCBiKSB7XG4gIHZhciBvdXQgPSAwXG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICBvdXQrK1xuICB9XG4gIHZhciBsZW4gPSBNYXRoLm1pbihhLmxlbmd0aCwgYi5sZW5ndGgpXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIG91dCArPSAoYVtpXSBeIGJbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuIiwidmFyIGNpcGhlcnMgPSByZXF1aXJlKCcuL2VuY3J5cHRlcicpXG5leHBvcnRzLmNyZWF0ZUNpcGhlciA9IGV4cG9ydHMuQ2lwaGVyID0gY2lwaGVycy5jcmVhdGVDaXBoZXJcbmV4cG9ydHMuY3JlYXRlQ2lwaGVyaXYgPSBleHBvcnRzLkNpcGhlcml2ID0gY2lwaGVycy5jcmVhdGVDaXBoZXJpdlxudmFyIGRlY2lwaGVycyA9IHJlcXVpcmUoJy4vZGVjcnlwdGVyJylcbmV4cG9ydHMuY3JlYXRlRGVjaXBoZXIgPSBleHBvcnRzLkRlY2lwaGVyID0gZGVjaXBoZXJzLmNyZWF0ZURlY2lwaGVyXG5leHBvcnRzLmNyZWF0ZURlY2lwaGVyaXYgPSBleHBvcnRzLkRlY2lwaGVyaXYgPSBkZWNpcGhlcnMuY3JlYXRlRGVjaXBoZXJpdlxudmFyIG1vZGVzID0gcmVxdWlyZSgnLi9tb2RlcycpXG5mdW5jdGlvbiBnZXRDaXBoZXJzICgpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1vZGVzKVxufVxuZXhwb3J0cy5saXN0Q2lwaGVycyA9IGV4cG9ydHMuZ2V0Q2lwaGVycyA9IGdldENpcGhlcnNcbiIsInZhciBhZXMgPSByZXF1aXJlKCcuL2FlcycpXG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnY2lwaGVyLWJhc2UnKVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIG1vZGVzID0gcmVxdWlyZSgnLi9tb2RlcycpXG52YXIgU3RyZWFtQ2lwaGVyID0gcmVxdWlyZSgnLi9zdHJlYW1DaXBoZXInKVxudmFyIEF1dGhDaXBoZXIgPSByZXF1aXJlKCcuL2F1dGhDaXBoZXInKVxudmFyIGVidGsgPSByZXF1aXJlKCdldnBfYnl0ZXN0b2tleScpXG5cbmluaGVyaXRzKERlY2lwaGVyLCBUcmFuc2Zvcm0pXG5mdW5jdGlvbiBEZWNpcGhlciAobW9kZSwga2V5LCBpdikge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGVjaXBoZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBEZWNpcGhlcihtb2RlLCBrZXksIGl2KVxuICB9XG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMpXG4gIHRoaXMuX2NhY2hlID0gbmV3IFNwbGl0dGVyKClcbiAgdGhpcy5fbGFzdCA9IHZvaWQgMFxuICB0aGlzLl9jaXBoZXIgPSBuZXcgYWVzLkFFUyhrZXkpXG4gIHRoaXMuX3ByZXYgPSBuZXcgQnVmZmVyKGl2Lmxlbmd0aClcbiAgaXYuY29weSh0aGlzLl9wcmV2KVxuICB0aGlzLl9tb2RlID0gbW9kZVxuICB0aGlzLl9hdXRvcGFkZGluZyA9IHRydWVcbn1cbkRlY2lwaGVyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhpcy5fY2FjaGUuYWRkKGRhdGEpXG4gIHZhciBjaHVua1xuICB2YXIgdGhpbmdcbiAgdmFyIG91dCA9IFtdXG4gIHdoaWxlICgoY2h1bmsgPSB0aGlzLl9jYWNoZS5nZXQodGhpcy5fYXV0b3BhZGRpbmcpKSkge1xuICAgIHRoaW5nID0gdGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsIGNodW5rKVxuICAgIG91dC5wdXNoKHRoaW5nKVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KG91dClcbn1cbkRlY2lwaGVyLnByb3RvdHlwZS5fZmluYWwgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjaHVuayA9IHRoaXMuX2NhY2hlLmZsdXNoKClcbiAgaWYgKHRoaXMuX2F1dG9wYWRkaW5nKSB7XG4gICAgcmV0dXJuIHVucGFkKHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLCBjaHVuaykpXG4gIH0gZWxzZSBpZiAoY2h1bmspIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCcpXG4gIH1cbn1cbkRlY2lwaGVyLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZyA9IGZ1bmN0aW9uIChzZXRUbykge1xuICB0aGlzLl9hdXRvcGFkZGluZyA9ICEhc2V0VG9cbiAgcmV0dXJuIHRoaXNcbn1cbmZ1bmN0aW9uIFNwbGl0dGVyICgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNwbGl0dGVyKSkge1xuICAgIHJldHVybiBuZXcgU3BsaXR0ZXIoKVxuICB9XG4gIHRoaXMuY2FjaGUgPSBuZXcgQnVmZmVyKCcnKVxufVxuU3BsaXR0ZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHRoaXMuY2FjaGUgPSBCdWZmZXIuY29uY2F0KFt0aGlzLmNhY2hlLCBkYXRhXSlcbn1cblxuU3BsaXR0ZXIucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChhdXRvUGFkZGluZykge1xuICB2YXIgb3V0XG4gIGlmIChhdXRvUGFkZGluZykge1xuICAgIGlmICh0aGlzLmNhY2hlLmxlbmd0aCA+IDE2KSB7XG4gICAgICBvdXQgPSB0aGlzLmNhY2hlLnNsaWNlKDAsIDE2KVxuICAgICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUuc2xpY2UoMTYpXG4gICAgICByZXR1cm4gb3V0XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh0aGlzLmNhY2hlLmxlbmd0aCA+PSAxNikge1xuICAgICAgb3V0ID0gdGhpcy5jYWNoZS5zbGljZSgwLCAxNilcbiAgICAgIHRoaXMuY2FjaGUgPSB0aGlzLmNhY2hlLnNsaWNlKDE2KVxuICAgICAgcmV0dXJuIG91dFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuU3BsaXR0ZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5jYWNoZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVxuICB9XG59XG5mdW5jdGlvbiB1bnBhZCAobGFzdCkge1xuICB2YXIgcGFkZGVkID0gbGFzdFsxNV1cbiAgdmFyIGkgPSAtMVxuICB3aGlsZSAoKytpIDwgcGFkZGVkKSB7XG4gICAgaWYgKGxhc3RbKGkgKyAoMTYgLSBwYWRkZWQpKV0gIT09IHBhZGRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gZGVjcnlwdCBkYXRhJylcbiAgICB9XG4gIH1cbiAgaWYgKHBhZGRlZCA9PT0gMTYpIHtcbiAgICByZXR1cm5cbiAgfVxuICByZXR1cm4gbGFzdC5zbGljZSgwLCAxNiAtIHBhZGRlZClcbn1cblxudmFyIG1vZGVsaXN0ID0ge1xuICBFQ0I6IHJlcXVpcmUoJy4vbW9kZXMvZWNiJyksXG4gIENCQzogcmVxdWlyZSgnLi9tb2Rlcy9jYmMnKSxcbiAgQ0ZCOiByZXF1aXJlKCcuL21vZGVzL2NmYicpLFxuICBDRkI4OiByZXF1aXJlKCcuL21vZGVzL2NmYjgnKSxcbiAgQ0ZCMTogcmVxdWlyZSgnLi9tb2Rlcy9jZmIxJyksXG4gIE9GQjogcmVxdWlyZSgnLi9tb2Rlcy9vZmInKSxcbiAgQ1RSOiByZXF1aXJlKCcuL21vZGVzL2N0cicpLFxuICBHQ006IHJlcXVpcmUoJy4vbW9kZXMvY3RyJylcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVjaXBoZXJpdiAoc3VpdGUsIHBhc3N3b3JkLCBpdikge1xuICB2YXIgY29uZmlnID0gbW9kZXNbc3VpdGUudG9Mb3dlckNhc2UoKV1cbiAgaWYgKCFjb25maWcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1aXRlIHR5cGUnKVxuICB9XG4gIGlmICh0eXBlb2YgaXYgPT09ICdzdHJpbmcnKSB7XG4gICAgaXYgPSBuZXcgQnVmZmVyKGl2KVxuICB9XG4gIGlmICh0eXBlb2YgcGFzc3dvcmQgPT09ICdzdHJpbmcnKSB7XG4gICAgcGFzc3dvcmQgPSBuZXcgQnVmZmVyKHBhc3N3b3JkKVxuICB9XG4gIGlmIChwYXNzd29yZC5sZW5ndGggIT09IGNvbmZpZy5rZXkgLyA4KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBrZXkgbGVuZ3RoICcgKyBwYXNzd29yZC5sZW5ndGgpXG4gIH1cbiAgaWYgKGl2Lmxlbmd0aCAhPT0gY29uZmlnLml2KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBpdiBsZW5ndGggJyArIGl2Lmxlbmd0aClcbiAgfVxuICBpZiAoY29uZmlnLnR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1DaXBoZXIobW9kZWxpc3RbY29uZmlnLm1vZGVdLCBwYXNzd29yZCwgaXYsIHRydWUpXG4gIH0gZWxzZSBpZiAoY29uZmlnLnR5cGUgPT09ICdhdXRoJykge1xuICAgIHJldHVybiBuZXcgQXV0aENpcGhlcihtb2RlbGlzdFtjb25maWcubW9kZV0sIHBhc3N3b3JkLCBpdiwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gbmV3IERlY2lwaGVyKG1vZGVsaXN0W2NvbmZpZy5tb2RlXSwgcGFzc3dvcmQsIGl2KVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEZWNpcGhlciAoc3VpdGUsIHBhc3N3b3JkKSB7XG4gIHZhciBjb25maWcgPSBtb2Rlc1tzdWl0ZS50b0xvd2VyQ2FzZSgpXVxuICBpZiAoIWNvbmZpZykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgc3VpdGUgdHlwZScpXG4gIH1cbiAgdmFyIGtleXMgPSBlYnRrKHBhc3N3b3JkLCBmYWxzZSwgY29uZmlnLmtleSwgY29uZmlnLml2KVxuICByZXR1cm4gY3JlYXRlRGVjaXBoZXJpdihzdWl0ZSwga2V5cy5rZXksIGtleXMuaXYpXG59XG5leHBvcnRzLmNyZWF0ZURlY2lwaGVyID0gY3JlYXRlRGVjaXBoZXJcbmV4cG9ydHMuY3JlYXRlRGVjaXBoZXJpdiA9IGNyZWF0ZURlY2lwaGVyaXZcbiIsInZhciBhZXMgPSByZXF1aXJlKCcuL2FlcycpXG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnY2lwaGVyLWJhc2UnKVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIG1vZGVzID0gcmVxdWlyZSgnLi9tb2RlcycpXG52YXIgZWJ0ayA9IHJlcXVpcmUoJ2V2cF9ieXRlc3Rva2V5JylcbnZhciBTdHJlYW1DaXBoZXIgPSByZXF1aXJlKCcuL3N0cmVhbUNpcGhlcicpXG52YXIgQXV0aENpcGhlciA9IHJlcXVpcmUoJy4vYXV0aENpcGhlcicpXG5pbmhlcml0cyhDaXBoZXIsIFRyYW5zZm9ybSlcbmZ1bmN0aW9uIENpcGhlciAobW9kZSwga2V5LCBpdikge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ2lwaGVyKSkge1xuICAgIHJldHVybiBuZXcgQ2lwaGVyKG1vZGUsIGtleSwgaXYpXG4gIH1cbiAgVHJhbnNmb3JtLmNhbGwodGhpcylcbiAgdGhpcy5fY2FjaGUgPSBuZXcgU3BsaXR0ZXIoKVxuICB0aGlzLl9jaXBoZXIgPSBuZXcgYWVzLkFFUyhrZXkpXG4gIHRoaXMuX3ByZXYgPSBuZXcgQnVmZmVyKGl2Lmxlbmd0aClcbiAgaXYuY29weSh0aGlzLl9wcmV2KVxuICB0aGlzLl9tb2RlID0gbW9kZVxuICB0aGlzLl9hdXRvcGFkZGluZyA9IHRydWVcbn1cbkNpcGhlci5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHRoaXMuX2NhY2hlLmFkZChkYXRhKVxuICB2YXIgY2h1bmtcbiAgdmFyIHRoaW5nXG4gIHZhciBvdXQgPSBbXVxuICB3aGlsZSAoKGNodW5rID0gdGhpcy5fY2FjaGUuZ2V0KCkpKSB7XG4gICAgdGhpbmcgPSB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcywgY2h1bmspXG4gICAgb3V0LnB1c2godGhpbmcpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQob3V0KVxufVxuQ2lwaGVyLnByb3RvdHlwZS5fZmluYWwgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjaHVuayA9IHRoaXMuX2NhY2hlLmZsdXNoKClcbiAgaWYgKHRoaXMuX2F1dG9wYWRkaW5nKSB7XG4gICAgY2h1bmsgPSB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcywgY2h1bmspXG4gICAgdGhpcy5fY2lwaGVyLnNjcnViKClcbiAgICByZXR1cm4gY2h1bmtcbiAgfSBlbHNlIGlmIChjaHVuay50b1N0cmluZygnaGV4JykgIT09ICcxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMCcpIHtcbiAgICB0aGlzLl9jaXBoZXIuc2NydWIoKVxuICAgIHRocm93IG5ldyBFcnJvcignZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoJylcbiAgfVxufVxuQ2lwaGVyLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZyA9IGZ1bmN0aW9uIChzZXRUbykge1xuICB0aGlzLl9hdXRvcGFkZGluZyA9ICEhc2V0VG9cbiAgcmV0dXJuIHRoaXNcbn1cblxuZnVuY3Rpb24gU3BsaXR0ZXIgKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3BsaXR0ZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBTcGxpdHRlcigpXG4gIH1cbiAgdGhpcy5jYWNoZSA9IG5ldyBCdWZmZXIoJycpXG59XG5TcGxpdHRlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhpcy5jYWNoZSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuY2FjaGUsIGRhdGFdKVxufVxuXG5TcGxpdHRlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5jYWNoZS5sZW5ndGggPiAxNSkge1xuICAgIHZhciBvdXQgPSB0aGlzLmNhY2hlLnNsaWNlKDAsIDE2KVxuICAgIHRoaXMuY2FjaGUgPSB0aGlzLmNhY2hlLnNsaWNlKDE2KVxuICAgIHJldHVybiBvdXRcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuU3BsaXR0ZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbGVuID0gMTYgLSB0aGlzLmNhY2hlLmxlbmd0aFxuICB2YXIgcGFkQnVmZiA9IG5ldyBCdWZmZXIobGVuKVxuXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIHBhZEJ1ZmYud3JpdGVVSW50OChsZW4sIGkpXG4gIH1cbiAgdmFyIG91dCA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuY2FjaGUsIHBhZEJ1ZmZdKVxuICByZXR1cm4gb3V0XG59XG52YXIgbW9kZWxpc3QgPSB7XG4gIEVDQjogcmVxdWlyZSgnLi9tb2Rlcy9lY2InKSxcbiAgQ0JDOiByZXF1aXJlKCcuL21vZGVzL2NiYycpLFxuICBDRkI6IHJlcXVpcmUoJy4vbW9kZXMvY2ZiJyksXG4gIENGQjg6IHJlcXVpcmUoJy4vbW9kZXMvY2ZiOCcpLFxuICBDRkIxOiByZXF1aXJlKCcuL21vZGVzL2NmYjEnKSxcbiAgT0ZCOiByZXF1aXJlKCcuL21vZGVzL29mYicpLFxuICBDVFI6IHJlcXVpcmUoJy4vbW9kZXMvY3RyJyksXG4gIEdDTTogcmVxdWlyZSgnLi9tb2Rlcy9jdHInKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDaXBoZXJpdiAoc3VpdGUsIHBhc3N3b3JkLCBpdikge1xuICB2YXIgY29uZmlnID0gbW9kZXNbc3VpdGUudG9Mb3dlckNhc2UoKV1cbiAgaWYgKCFjb25maWcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1aXRlIHR5cGUnKVxuICB9XG4gIGlmICh0eXBlb2YgaXYgPT09ICdzdHJpbmcnKSB7XG4gICAgaXYgPSBuZXcgQnVmZmVyKGl2KVxuICB9XG4gIGlmICh0eXBlb2YgcGFzc3dvcmQgPT09ICdzdHJpbmcnKSB7XG4gICAgcGFzc3dvcmQgPSBuZXcgQnVmZmVyKHBhc3N3b3JkKVxuICB9XG4gIGlmIChwYXNzd29yZC5sZW5ndGggIT09IGNvbmZpZy5rZXkgLyA4KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBrZXkgbGVuZ3RoICcgKyBwYXNzd29yZC5sZW5ndGgpXG4gIH1cbiAgaWYgKGl2Lmxlbmd0aCAhPT0gY29uZmlnLml2KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBpdiBsZW5ndGggJyArIGl2Lmxlbmd0aClcbiAgfVxuICBpZiAoY29uZmlnLnR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1DaXBoZXIobW9kZWxpc3RbY29uZmlnLm1vZGVdLCBwYXNzd29yZCwgaXYpXG4gIH0gZWxzZSBpZiAoY29uZmlnLnR5cGUgPT09ICdhdXRoJykge1xuICAgIHJldHVybiBuZXcgQXV0aENpcGhlcihtb2RlbGlzdFtjb25maWcubW9kZV0sIHBhc3N3b3JkLCBpdilcbiAgfVxuICByZXR1cm4gbmV3IENpcGhlcihtb2RlbGlzdFtjb25maWcubW9kZV0sIHBhc3N3b3JkLCBpdilcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNpcGhlciAoc3VpdGUsIHBhc3N3b3JkKSB7XG4gIHZhciBjb25maWcgPSBtb2Rlc1tzdWl0ZS50b0xvd2VyQ2FzZSgpXVxuICBpZiAoIWNvbmZpZykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgc3VpdGUgdHlwZScpXG4gIH1cbiAgdmFyIGtleXMgPSBlYnRrKHBhc3N3b3JkLCBmYWxzZSwgY29uZmlnLmtleSwgY29uZmlnLml2KVxuICByZXR1cm4gY3JlYXRlQ2lwaGVyaXYoc3VpdGUsIGtleXMua2V5LCBrZXlzLml2KVxufVxuXG5leHBvcnRzLmNyZWF0ZUNpcGhlcml2ID0gY3JlYXRlQ2lwaGVyaXZcbmV4cG9ydHMuY3JlYXRlQ2lwaGVyID0gY3JlYXRlQ2lwaGVyXG4iLCJ2YXIgemVyb3MgPSBuZXcgQnVmZmVyKDE2KVxuemVyb3MuZmlsbCgwKVxubW9kdWxlLmV4cG9ydHMgPSBHSEFTSFxuZnVuY3Rpb24gR0hBU0ggKGtleSkge1xuICB0aGlzLmggPSBrZXlcbiAgdGhpcy5zdGF0ZSA9IG5ldyBCdWZmZXIoMTYpXG4gIHRoaXMuc3RhdGUuZmlsbCgwKVxuICB0aGlzLmNhY2hlID0gbmV3IEJ1ZmZlcignJylcbn1cbi8vIGZyb20gaHR0cDovL2JpdHdpc2VzaGlmdGxlZnQuZ2l0aHViLmlvL3NqY2wvZG9jL3N5bWJvbHMvc3JjL2NvcmVfZ2NtLmpzLmh0bWxcbi8vIGJ5IEp1aG8gVsOkaMOkLUhlcnR0dWFcbkdIQVNILnByb3RvdHlwZS5naGFzaCA9IGZ1bmN0aW9uIChibG9jaykge1xuICB2YXIgaSA9IC0xXG4gIHdoaWxlICgrK2kgPCBibG9jay5sZW5ndGgpIHtcbiAgICB0aGlzLnN0YXRlW2ldIF49IGJsb2NrW2ldXG4gIH1cbiAgdGhpcy5fbXVsdGlwbHkoKVxufVxuXG5HSEFTSC5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgVmkgPSB0b0FycmF5KHRoaXMuaClcbiAgdmFyIFppID0gWzAsIDAsIDAsIDBdXG4gIHZhciBqLCB4aSwgbHNiX1ZpXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IDEyOCkge1xuICAgIHhpID0gKHRoaXMuc3RhdGVbfn4oaSAvIDgpXSAmICgxIDw8ICg3IC0gaSAlIDgpKSkgIT09IDBcbiAgICBpZiAoeGkpIHtcbiAgICAgIC8vIFpfaSsxID0gWl9pIF4gVl9pXG4gICAgICBaaSA9IHhvcihaaSwgVmkpXG4gICAgfVxuXG4gICAgLy8gU3RvcmUgdGhlIHZhbHVlIG9mIExTQihWX2kpXG4gICAgbHNiX1ZpID0gKFZpWzNdICYgMSkgIT09IDBcblxuICAgIC8vIFZfaSsxID0gVl9pID4+IDFcbiAgICBmb3IgKGogPSAzOyBqID4gMDsgai0tKSB7XG4gICAgICBWaVtqXSA9IChWaVtqXSA+Pj4gMSkgfCAoKFZpW2ogLSAxXSAmIDEpIDw8IDMxKVxuICAgIH1cbiAgICBWaVswXSA9IFZpWzBdID4+PiAxXG5cbiAgICAvLyBJZiBMU0IoVl9pKSBpcyAxLCBWX2krMSA9IChWX2kgPj4gMSkgXiBSXG4gICAgaWYgKGxzYl9WaSkge1xuICAgICAgVmlbMF0gPSBWaVswXSBeICgweGUxIDw8IDI0KVxuICAgIH1cbiAgfVxuICB0aGlzLnN0YXRlID0gZnJvbUFycmF5KFppKVxufVxuR0hBU0gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChidWYpIHtcbiAgdGhpcy5jYWNoZSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuY2FjaGUsIGJ1Zl0pXG4gIHZhciBjaHVua1xuICB3aGlsZSAodGhpcy5jYWNoZS5sZW5ndGggPj0gMTYpIHtcbiAgICBjaHVuayA9IHRoaXMuY2FjaGUuc2xpY2UoMCwgMTYpXG4gICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUuc2xpY2UoMTYpXG4gICAgdGhpcy5naGFzaChjaHVuaylcbiAgfVxufVxuR0hBU0gucHJvdG90eXBlLmZpbmFsID0gZnVuY3Rpb24gKGFibCwgYmwpIHtcbiAgaWYgKHRoaXMuY2FjaGUubGVuZ3RoKSB7XG4gICAgdGhpcy5naGFzaChCdWZmZXIuY29uY2F0KFt0aGlzLmNhY2hlLCB6ZXJvc10sIDE2KSlcbiAgfVxuICB0aGlzLmdoYXNoKGZyb21BcnJheShbXG4gICAgMCwgYWJsLFxuICAgIDAsIGJsXG4gIF0pKVxuICByZXR1cm4gdGhpcy5zdGF0ZVxufVxuXG5mdW5jdGlvbiB0b0FycmF5IChidWYpIHtcbiAgcmV0dXJuIFtcbiAgICBidWYucmVhZFVJbnQzMkJFKDApLFxuICAgIGJ1Zi5yZWFkVUludDMyQkUoNCksXG4gICAgYnVmLnJlYWRVSW50MzJCRSg4KSxcbiAgICBidWYucmVhZFVJbnQzMkJFKDEyKVxuICBdXG59XG5mdW5jdGlvbiBmcm9tQXJyYXkgKG91dCkge1xuICBvdXQgPSBvdXQubWFwKGZpeHVwX3VpbnQzMilcbiAgdmFyIGJ1ZiA9IG5ldyBCdWZmZXIoMTYpXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFswXSwgMClcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzFdLCA0KVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMl0sIDgpXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFszXSwgMTIpXG4gIHJldHVybiBidWZcbn1cbnZhciB1aW50X21heCA9IE1hdGgucG93KDIsIDMyKVxuZnVuY3Rpb24gZml4dXBfdWludDMyICh4KSB7XG4gIHZhciByZXQsIHhfcG9zXG4gIHJldCA9IHggPiB1aW50X21heCB8fCB4IDwgMCA/ICh4X3BvcyA9IE1hdGguYWJzKHgpICUgdWludF9tYXgsIHggPCAwID8gdWludF9tYXggLSB4X3BvcyA6IHhfcG9zKSA6IHhcbiAgcmV0dXJuIHJldFxufVxuZnVuY3Rpb24geG9yIChhLCBiKSB7XG4gIHJldHVybiBbXG4gICAgYVswXSBeIGJbMF0sXG4gICAgYVsxXSBeIGJbMV0sXG4gICAgYVsyXSBeIGJbMl0sXG4gICAgYVszXSBeIGJbM11cbiAgXVxufVxuIiwiZXhwb3J0c1snYWVzLTEyOC1lY2InXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAwLFxuICBtb2RlOiAnRUNCJyxcbiAgdHlwZTogJ2Jsb2NrJ1xufVxuZXhwb3J0c1snYWVzLTE5Mi1lY2InXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxOTIsXG4gIGl2OiAwLFxuICBtb2RlOiAnRUNCJyxcbiAgdHlwZTogJ2Jsb2NrJ1xufVxuZXhwb3J0c1snYWVzLTI1Ni1lY2InXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAyNTYsXG4gIGl2OiAwLFxuICBtb2RlOiAnRUNCJyxcbiAgdHlwZTogJ2Jsb2NrJ1xufVxuZXhwb3J0c1snYWVzLTEyOC1jYmMnXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NCQycsXG4gIHR5cGU6ICdibG9jaydcbn1cbmV4cG9ydHNbJ2Flcy0xOTItY2JjJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMTkyLFxuICBpdjogMTYsXG4gIG1vZGU6ICdDQkMnLFxuICB0eXBlOiAnYmxvY2snXG59XG5leHBvcnRzWydhZXMtMjU2LWNiYyddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDI1NixcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0JDJyxcbiAgdHlwZTogJ2Jsb2NrJ1xufVxuZXhwb3J0c1snYWVzMTI4J10gPSBleHBvcnRzWydhZXMtMTI4LWNiYyddXG5leHBvcnRzWydhZXMxOTInXSA9IGV4cG9ydHNbJ2Flcy0xOTItY2JjJ11cbmV4cG9ydHNbJ2FlczI1NiddID0gZXhwb3J0c1snYWVzLTI1Ni1jYmMnXVxuZXhwb3J0c1snYWVzLTEyOC1jZmInXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NGQicsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMTkyLWNmYiddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDE5MixcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0ZCJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0yNTYtY2ZiJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMjU2LFxuICBpdjogMTYsXG4gIG1vZGU6ICdDRkInLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTEyOC1jZmI4J10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMTI4LFxuICBpdjogMTYsXG4gIG1vZGU6ICdDRkI4JyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0xOTItY2ZiOCddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDE5MixcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0ZCOCcsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMjU2LWNmYjgnXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAyNTYsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NGQjgnLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTEyOC1jZmIxJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMTI4LFxuICBpdjogMTYsXG4gIG1vZGU6ICdDRkIxJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0xOTItY2ZiMSddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDE5MixcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0ZCMScsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMjU2LWNmYjEnXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAyNTYsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NGQjEnLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTEyOC1vZmInXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAxNixcbiAgbW9kZTogJ09GQicsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMTkyLW9mYiddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDE5MixcbiAgaXY6IDE2LFxuICBtb2RlOiAnT0ZCJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0yNTYtb2ZiJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMjU2LFxuICBpdjogMTYsXG4gIG1vZGU6ICdPRkInLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTEyOC1jdHInXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NUUicsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMTkyLWN0ciddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDE5MixcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ1RSJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0yNTYtY3RyJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMjU2LFxuICBpdjogMTYsXG4gIG1vZGU6ICdDVFInLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTEyOC1nY20nXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAxMixcbiAgbW9kZTogJ0dDTScsXG4gIHR5cGU6ICdhdXRoJ1xufVxuZXhwb3J0c1snYWVzLTE5Mi1nY20nXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxOTIsXG4gIGl2OiAxMixcbiAgbW9kZTogJ0dDTScsXG4gIHR5cGU6ICdhdXRoJ1xufVxuZXhwb3J0c1snYWVzLTI1Ni1nY20nXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAyNTYsXG4gIGl2OiAxMixcbiAgbW9kZTogJ0dDTScsXG4gIHR5cGU6ICdhdXRoJ1xufVxuIiwidmFyIHhvciA9IHJlcXVpcmUoJ2J1ZmZlci14b3InKVxuXG5leHBvcnRzLmVuY3J5cHQgPSBmdW5jdGlvbiAoc2VsZiwgYmxvY2spIHtcbiAgdmFyIGRhdGEgPSB4b3IoYmxvY2ssIHNlbGYuX3ByZXYpXG5cbiAgc2VsZi5fcHJldiA9IHNlbGYuX2NpcGhlci5lbmNyeXB0QmxvY2soZGF0YSlcbiAgcmV0dXJuIHNlbGYuX3ByZXZcbn1cblxuZXhwb3J0cy5kZWNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGJsb2NrKSB7XG4gIHZhciBwYWQgPSBzZWxmLl9wcmV2XG5cbiAgc2VsZi5fcHJldiA9IGJsb2NrXG4gIHZhciBvdXQgPSBzZWxmLl9jaXBoZXIuZGVjcnlwdEJsb2NrKGJsb2NrKVxuXG4gIHJldHVybiB4b3Iob3V0LCBwYWQpXG59XG4iLCJ2YXIgeG9yID0gcmVxdWlyZSgnYnVmZmVyLXhvcicpXG5cbmV4cG9ydHMuZW5jcnlwdCA9IGZ1bmN0aW9uIChzZWxmLCBkYXRhLCBkZWNyeXB0KSB7XG4gIHZhciBvdXQgPSBuZXcgQnVmZmVyKCcnKVxuICB2YXIgbGVuXG5cbiAgd2hpbGUgKGRhdGEubGVuZ3RoKSB7XG4gICAgaWYgKHNlbGYuX2NhY2hlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc2VsZi5fY2FjaGUgPSBzZWxmLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHNlbGYuX3ByZXYpXG4gICAgICBzZWxmLl9wcmV2ID0gbmV3IEJ1ZmZlcignJylcbiAgICB9XG5cbiAgICBpZiAoc2VsZi5fY2FjaGUubGVuZ3RoIDw9IGRhdGEubGVuZ3RoKSB7XG4gICAgICBsZW4gPSBzZWxmLl9jYWNoZS5sZW5ndGhcbiAgICAgIG91dCA9IEJ1ZmZlci5jb25jYXQoW291dCwgZW5jcnlwdFN0YXJ0KHNlbGYsIGRhdGEuc2xpY2UoMCwgbGVuKSwgZGVjcnlwdCldKVxuICAgICAgZGF0YSA9IGRhdGEuc2xpY2UobGVuKVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgPSBCdWZmZXIuY29uY2F0KFtvdXQsIGVuY3J5cHRTdGFydChzZWxmLCBkYXRhLCBkZWNyeXB0KV0pXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRcbn1cbmZ1bmN0aW9uIGVuY3J5cHRTdGFydCAoc2VsZiwgZGF0YSwgZGVjcnlwdCkge1xuICB2YXIgbGVuID0gZGF0YS5sZW5ndGhcbiAgdmFyIG91dCA9IHhvcihkYXRhLCBzZWxmLl9jYWNoZSlcbiAgc2VsZi5fY2FjaGUgPSBzZWxmLl9jYWNoZS5zbGljZShsZW4pXG4gIHNlbGYuX3ByZXYgPSBCdWZmZXIuY29uY2F0KFtzZWxmLl9wcmV2LCBkZWNyeXB0ID8gZGF0YSA6IG91dF0pXG4gIHJldHVybiBvdXRcbn1cbiIsImZ1bmN0aW9uIGVuY3J5cHRCeXRlIChzZWxmLCBieXRlUGFyYW0sIGRlY3J5cHQpIHtcbiAgdmFyIHBhZFxuICB2YXIgaSA9IC0xXG4gIHZhciBsZW4gPSA4XG4gIHZhciBvdXQgPSAwXG4gIHZhciBiaXQsIHZhbHVlXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBwYWQgPSBzZWxmLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHNlbGYuX3ByZXYpXG4gICAgYml0ID0gKGJ5dGVQYXJhbSAmICgxIDw8ICg3IC0gaSkpKSA/IDB4ODAgOiAwXG4gICAgdmFsdWUgPSBwYWRbMF0gXiBiaXRcbiAgICBvdXQgKz0gKCh2YWx1ZSAmIDB4ODApID4+IChpICUgOCkpXG4gICAgc2VsZi5fcHJldiA9IHNoaWZ0SW4oc2VsZi5fcHJldiwgZGVjcnlwdCA/IGJpdCA6IHZhbHVlKVxuICB9XG4gIHJldHVybiBvdXRcbn1cbmV4cG9ydHMuZW5jcnlwdCA9IGZ1bmN0aW9uIChzZWxmLCBjaHVuaywgZGVjcnlwdCkge1xuICB2YXIgbGVuID0gY2h1bmsubGVuZ3RoXG4gIHZhciBvdXQgPSBuZXcgQnVmZmVyKGxlbilcbiAgdmFyIGkgPSAtMVxuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgb3V0W2ldID0gZW5jcnlwdEJ5dGUoc2VsZiwgY2h1bmtbaV0sIGRlY3J5cHQpXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuZnVuY3Rpb24gc2hpZnRJbiAoYnVmZmVyLCB2YWx1ZSkge1xuICB2YXIgbGVuID0gYnVmZmVyLmxlbmd0aFxuICB2YXIgaSA9IC0xXG4gIHZhciBvdXQgPSBuZXcgQnVmZmVyKGJ1ZmZlci5sZW5ndGgpXG4gIGJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW2J1ZmZlciwgbmV3IEJ1ZmZlcihbdmFsdWVdKV0pXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBvdXRbaV0gPSBidWZmZXJbaV0gPDwgMSB8IGJ1ZmZlcltpICsgMV0gPj4gKDcpXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuIiwiZnVuY3Rpb24gZW5jcnlwdEJ5dGUgKHNlbGYsIGJ5dGVQYXJhbSwgZGVjcnlwdCkge1xuICB2YXIgcGFkID0gc2VsZi5fY2lwaGVyLmVuY3J5cHRCbG9jayhzZWxmLl9wcmV2KVxuICB2YXIgb3V0ID0gcGFkWzBdIF4gYnl0ZVBhcmFtXG4gIHNlbGYuX3ByZXYgPSBCdWZmZXIuY29uY2F0KFtzZWxmLl9wcmV2LnNsaWNlKDEpLCBuZXcgQnVmZmVyKFtkZWNyeXB0ID8gYnl0ZVBhcmFtIDogb3V0XSldKVxuICByZXR1cm4gb3V0XG59XG5leHBvcnRzLmVuY3J5cHQgPSBmdW5jdGlvbiAoc2VsZiwgY2h1bmssIGRlY3J5cHQpIHtcbiAgdmFyIGxlbiA9IGNodW5rLmxlbmd0aFxuICB2YXIgb3V0ID0gbmV3IEJ1ZmZlcihsZW4pXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIG91dFtpXSA9IGVuY3J5cHRCeXRlKHNlbGYsIGNodW5rW2ldLCBkZWNyeXB0KVxuICB9XG4gIHJldHVybiBvdXRcbn1cbiIsInZhciB4b3IgPSByZXF1aXJlKCdidWZmZXIteG9yJylcblxuZnVuY3Rpb24gaW5jcjMyIChpdikge1xuICB2YXIgbGVuID0gaXYubGVuZ3RoXG4gIHZhciBpdGVtXG4gIHdoaWxlIChsZW4tLSkge1xuICAgIGl0ZW0gPSBpdi5yZWFkVUludDgobGVuKVxuICAgIGlmIChpdGVtID09PSAyNTUpIHtcbiAgICAgIGl2LndyaXRlVUludDgoMCwgbGVuKVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtKytcbiAgICAgIGl2LndyaXRlVUludDgoaXRlbSwgbGVuKVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0QmxvY2sgKHNlbGYpIHtcbiAgdmFyIG91dCA9IHNlbGYuX2NpcGhlci5lbmNyeXB0QmxvY2soc2VsZi5fcHJldilcbiAgaW5jcjMyKHNlbGYuX3ByZXYpXG4gIHJldHVybiBvdXRcbn1cblxuZXhwb3J0cy5lbmNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGNodW5rKSB7XG4gIHdoaWxlIChzZWxmLl9jYWNoZS5sZW5ndGggPCBjaHVuay5sZW5ndGgpIHtcbiAgICBzZWxmLl9jYWNoZSA9IEJ1ZmZlci5jb25jYXQoW3NlbGYuX2NhY2hlLCBnZXRCbG9jayhzZWxmKV0pXG4gIH1cbiAgdmFyIHBhZCA9IHNlbGYuX2NhY2hlLnNsaWNlKDAsIGNodW5rLmxlbmd0aClcbiAgc2VsZi5fY2FjaGUgPSBzZWxmLl9jYWNoZS5zbGljZShjaHVuay5sZW5ndGgpXG4gIHJldHVybiB4b3IoY2h1bmssIHBhZClcbn1cbiIsImV4cG9ydHMuZW5jcnlwdCA9IGZ1bmN0aW9uIChzZWxmLCBibG9jaykge1xuICByZXR1cm4gc2VsZi5fY2lwaGVyLmVuY3J5cHRCbG9jayhibG9jaylcbn1cbmV4cG9ydHMuZGVjcnlwdCA9IGZ1bmN0aW9uIChzZWxmLCBibG9jaykge1xuICByZXR1cm4gc2VsZi5fY2lwaGVyLmRlY3J5cHRCbG9jayhibG9jaylcbn1cbiIsInZhciB4b3IgPSByZXF1aXJlKCdidWZmZXIteG9yJylcblxuZnVuY3Rpb24gZ2V0QmxvY2sgKHNlbGYpIHtcbiAgc2VsZi5fcHJldiA9IHNlbGYuX2NpcGhlci5lbmNyeXB0QmxvY2soc2VsZi5fcHJldilcbiAgcmV0dXJuIHNlbGYuX3ByZXZcbn1cblxuZXhwb3J0cy5lbmNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGNodW5rKSB7XG4gIHdoaWxlIChzZWxmLl9jYWNoZS5sZW5ndGggPCBjaHVuay5sZW5ndGgpIHtcbiAgICBzZWxmLl9jYWNoZSA9IEJ1ZmZlci5jb25jYXQoW3NlbGYuX2NhY2hlLCBnZXRCbG9jayhzZWxmKV0pXG4gIH1cblxuICB2YXIgcGFkID0gc2VsZi5fY2FjaGUuc2xpY2UoMCwgY2h1bmsubGVuZ3RoKVxuICBzZWxmLl9jYWNoZSA9IHNlbGYuX2NhY2hlLnNsaWNlKGNodW5rLmxlbmd0aClcbiAgcmV0dXJuIHhvcihjaHVuaywgcGFkKVxufVxuIiwidmFyIGFlcyA9IHJlcXVpcmUoJy4vYWVzJylcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG5cbmluaGVyaXRzKFN0cmVhbUNpcGhlciwgVHJhbnNmb3JtKVxubW9kdWxlLmV4cG9ydHMgPSBTdHJlYW1DaXBoZXJcbmZ1bmN0aW9uIFN0cmVhbUNpcGhlciAobW9kZSwga2V5LCBpdiwgZGVjcnlwdCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3RyZWFtQ2lwaGVyKSkge1xuICAgIHJldHVybiBuZXcgU3RyZWFtQ2lwaGVyKG1vZGUsIGtleSwgaXYpXG4gIH1cbiAgVHJhbnNmb3JtLmNhbGwodGhpcylcbiAgdGhpcy5fY2lwaGVyID0gbmV3IGFlcy5BRVMoa2V5KVxuICB0aGlzLl9wcmV2ID0gbmV3IEJ1ZmZlcihpdi5sZW5ndGgpXG4gIHRoaXMuX2NhY2hlID0gbmV3IEJ1ZmZlcignJylcbiAgdGhpcy5fc2VjQ2FjaGUgPSBuZXcgQnVmZmVyKCcnKVxuICB0aGlzLl9kZWNyeXB0ID0gZGVjcnlwdFxuICBpdi5jb3B5KHRoaXMuX3ByZXYpXG4gIHRoaXMuX21vZGUgPSBtb2RlXG59XG5TdHJlYW1DaXBoZXIucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgcmV0dXJuIHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLCBjaHVuaywgdGhpcy5fZGVjcnlwdClcbn1cblN0cmVhbUNpcGhlci5wcm90b3R5cGUuX2ZpbmFsID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9jaXBoZXIuc2NydWIoKVxufVxuIiwidmFyIGVidGsgPSByZXF1aXJlKCdldnBfYnl0ZXN0b2tleScpXG52YXIgYWVzID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1hZXMvYnJvd3NlcicpXG52YXIgREVTID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1kZXMnKVxudmFyIGRlc01vZGVzID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1kZXMvbW9kZXMnKVxudmFyIGFlc01vZGVzID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1hZXMvbW9kZXMnKVxuZnVuY3Rpb24gY3JlYXRlQ2lwaGVyIChzdWl0ZSwgcGFzc3dvcmQpIHtcbiAgdmFyIGtleUxlbiwgaXZMZW5cbiAgc3VpdGUgPSBzdWl0ZS50b0xvd2VyQ2FzZSgpXG4gIGlmIChhZXNNb2Rlc1tzdWl0ZV0pIHtcbiAgICBrZXlMZW4gPSBhZXNNb2Rlc1tzdWl0ZV0ua2V5XG4gICAgaXZMZW4gPSBhZXNNb2Rlc1tzdWl0ZV0uaXZcbiAgfSBlbHNlIGlmIChkZXNNb2Rlc1tzdWl0ZV0pIHtcbiAgICBrZXlMZW4gPSBkZXNNb2Rlc1tzdWl0ZV0ua2V5ICogOFxuICAgIGl2TGVuID0gZGVzTW9kZXNbc3VpdGVdLml2XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBzdWl0ZSB0eXBlJylcbiAgfVxuICB2YXIga2V5cyA9IGVidGsocGFzc3dvcmQsIGZhbHNlLCBrZXlMZW4sIGl2TGVuKVxuICByZXR1cm4gY3JlYXRlQ2lwaGVyaXYoc3VpdGUsIGtleXMua2V5LCBrZXlzLml2KVxufVxuZnVuY3Rpb24gY3JlYXRlRGVjaXBoZXIgKHN1aXRlLCBwYXNzd29yZCkge1xuICB2YXIga2V5TGVuLCBpdkxlblxuICBzdWl0ZSA9IHN1aXRlLnRvTG93ZXJDYXNlKClcbiAgaWYgKGFlc01vZGVzW3N1aXRlXSkge1xuICAgIGtleUxlbiA9IGFlc01vZGVzW3N1aXRlXS5rZXlcbiAgICBpdkxlbiA9IGFlc01vZGVzW3N1aXRlXS5pdlxuICB9IGVsc2UgaWYgKGRlc01vZGVzW3N1aXRlXSkge1xuICAgIGtleUxlbiA9IGRlc01vZGVzW3N1aXRlXS5rZXkgKiA4XG4gICAgaXZMZW4gPSBkZXNNb2Rlc1tzdWl0ZV0uaXZcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1aXRlIHR5cGUnKVxuICB9XG4gIHZhciBrZXlzID0gZWJ0ayhwYXNzd29yZCwgZmFsc2UsIGtleUxlbiwgaXZMZW4pXG4gIHJldHVybiBjcmVhdGVEZWNpcGhlcml2KHN1aXRlLCBrZXlzLmtleSwga2V5cy5pdilcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2lwaGVyaXYgKHN1aXRlLCBrZXksIGl2KSB7XG4gIHN1aXRlID0gc3VpdGUudG9Mb3dlckNhc2UoKVxuICBpZiAoYWVzTW9kZXNbc3VpdGVdKSB7XG4gICAgcmV0dXJuIGFlcy5jcmVhdGVDaXBoZXJpdihzdWl0ZSwga2V5LCBpdilcbiAgfSBlbHNlIGlmIChkZXNNb2Rlc1tzdWl0ZV0pIHtcbiAgICByZXR1cm4gbmV3IERFUyh7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIGl2OiBpdixcbiAgICAgIG1vZGU6IHN1aXRlXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1aXRlIHR5cGUnKVxuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVEZWNpcGhlcml2IChzdWl0ZSwga2V5LCBpdikge1xuICBzdWl0ZSA9IHN1aXRlLnRvTG93ZXJDYXNlKClcbiAgaWYgKGFlc01vZGVzW3N1aXRlXSkge1xuICAgIHJldHVybiBhZXMuY3JlYXRlRGVjaXBoZXJpdihzdWl0ZSwga2V5LCBpdilcbiAgfSBlbHNlIGlmIChkZXNNb2Rlc1tzdWl0ZV0pIHtcbiAgICByZXR1cm4gbmV3IERFUyh7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIGl2OiBpdixcbiAgICAgIG1vZGU6IHN1aXRlLFxuICAgICAgZGVjcnlwdDogdHJ1ZVxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBzdWl0ZSB0eXBlJylcbiAgfVxufVxuZXhwb3J0cy5jcmVhdGVDaXBoZXIgPSBleHBvcnRzLkNpcGhlciA9IGNyZWF0ZUNpcGhlclxuZXhwb3J0cy5jcmVhdGVDaXBoZXJpdiA9IGV4cG9ydHMuQ2lwaGVyaXYgPSBjcmVhdGVDaXBoZXJpdlxuZXhwb3J0cy5jcmVhdGVEZWNpcGhlciA9IGV4cG9ydHMuRGVjaXBoZXIgPSBjcmVhdGVEZWNpcGhlclxuZXhwb3J0cy5jcmVhdGVEZWNpcGhlcml2ID0gZXhwb3J0cy5EZWNpcGhlcml2ID0gY3JlYXRlRGVjaXBoZXJpdlxuZnVuY3Rpb24gZ2V0Q2lwaGVycyAoKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhkZXNNb2RlcykuY29uY2F0KGFlcy5nZXRDaXBoZXJzKCkpXG59XG5leHBvcnRzLmxpc3RDaXBoZXJzID0gZXhwb3J0cy5nZXRDaXBoZXJzID0gZ2V0Q2lwaGVyc1xuIiwidmFyIENpcGhlckJhc2UgPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG52YXIgZGVzID0gcmVxdWlyZSgnZGVzLmpzJylcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcblxudmFyIG1vZGVzID0ge1xuICAnZGVzLWVkZTMtY2JjJzogZGVzLkNCQy5pbnN0YW50aWF0ZShkZXMuRURFKSxcbiAgJ2Rlcy1lZGUzJzogZGVzLkVERSxcbiAgJ2Rlcy1lZGUtY2JjJzogZGVzLkNCQy5pbnN0YW50aWF0ZShkZXMuRURFKSxcbiAgJ2Rlcy1lZGUnOiBkZXMuRURFLFxuICAnZGVzLWNiYyc6IGRlcy5DQkMuaW5zdGFudGlhdGUoZGVzLkRFUyksXG4gICdkZXMtZWNiJzogZGVzLkRFU1xufVxubW9kZXMuZGVzID0gbW9kZXNbJ2Rlcy1jYmMnXVxubW9kZXMuZGVzMyA9IG1vZGVzWydkZXMtZWRlMy1jYmMnXVxubW9kdWxlLmV4cG9ydHMgPSBERVNcbmluaGVyaXRzKERFUywgQ2lwaGVyQmFzZSlcbmZ1bmN0aW9uIERFUyAob3B0cykge1xuICBDaXBoZXJCYXNlLmNhbGwodGhpcylcbiAgdmFyIG1vZGVOYW1lID0gb3B0cy5tb2RlLnRvTG93ZXJDYXNlKClcbiAgdmFyIG1vZGUgPSBtb2Rlc1ttb2RlTmFtZV1cbiAgdmFyIHR5cGVcbiAgaWYgKG9wdHMuZGVjcnlwdCkge1xuICAgIHR5cGUgPSAnZGVjcnlwdCdcbiAgfSBlbHNlIHtcbiAgICB0eXBlID0gJ2VuY3J5cHQnXG4gIH1cbiAgdmFyIGtleSA9IG9wdHMua2V5XG4gIGlmIChtb2RlTmFtZSA9PT0gJ2Rlcy1lZGUnIHx8IG1vZGVOYW1lID09PSAnZGVzLWVkZS1jYmMnKSB7XG4gICAga2V5ID0gQnVmZmVyLmNvbmNhdChba2V5LCBrZXkuc2xpY2UoMCwgOCldKVxuICB9XG4gIHZhciBpdiA9IG9wdHMuaXZcbiAgdGhpcy5fZGVzID0gbW9kZS5jcmVhdGUoe1xuICAgIGtleToga2V5LFxuICAgIGl2OiBpdixcbiAgICB0eXBlOiB0eXBlXG4gIH0pXG59XG5ERVMucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICByZXR1cm4gbmV3IEJ1ZmZlcih0aGlzLl9kZXMudXBkYXRlKGRhdGEpKVxufVxuREVTLnByb3RvdHlwZS5fZmluYWwgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgQnVmZmVyKHRoaXMuX2Rlcy5maW5hbCgpKVxufVxuIiwiZXhwb3J0c1snZGVzLWVjYiddID0ge1xuICBrZXk6IDgsXG4gIGl2OiAwXG59XG5leHBvcnRzWydkZXMtY2JjJ10gPSBleHBvcnRzLmRlcyA9IHtcbiAga2V5OiA4LFxuICBpdjogOFxufVxuZXhwb3J0c1snZGVzLWVkZTMtY2JjJ10gPSBleHBvcnRzLmRlczMgPSB7XG4gIGtleTogMjQsXG4gIGl2OiA4XG59XG5leHBvcnRzWydkZXMtZWRlMyddID0ge1xuICBrZXk6IDI0LFxuICBpdjogMFxufVxuZXhwb3J0c1snZGVzLWVkZS1jYmMnXSA9IHtcbiAga2V5OiAxNixcbiAgaXY6IDhcbn1cbmV4cG9ydHNbJ2Rlcy1lZGUnXSA9IHtcbiAga2V5OiAxNixcbiAgaXY6IDBcbn1cbiIsInZhciBibiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgcmFuZG9tQnl0ZXMgPSByZXF1aXJlKCdyYW5kb21ieXRlcycpO1xubW9kdWxlLmV4cG9ydHMgPSBjcnQ7XG5mdW5jdGlvbiBibGluZChwcml2KSB7XG4gIHZhciByID0gZ2V0cihwcml2KTtcbiAgdmFyIGJsaW5kZXIgPSByLnRvUmVkKGJuLm1vbnQocHJpdi5tb2R1bHVzKSlcbiAgLnJlZFBvdyhuZXcgYm4ocHJpdi5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKTtcbiAgcmV0dXJuIHtcbiAgICBibGluZGVyOiBibGluZGVyLFxuICAgIHVuYmxpbmRlcjpyLmludm0ocHJpdi5tb2R1bHVzKVxuICB9O1xufVxuZnVuY3Rpb24gY3J0KG1zZywgcHJpdikge1xuICB2YXIgYmxpbmRzID0gYmxpbmQocHJpdik7XG4gIHZhciBsZW4gPSBwcml2Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO1xuICB2YXIgbW9kID0gYm4ubW9udChwcml2Lm1vZHVsdXMpO1xuICB2YXIgYmxpbmRlZCA9IG5ldyBibihtc2cpLm11bChibGluZHMuYmxpbmRlcikudW1vZChwcml2Lm1vZHVsdXMpO1xuICB2YXIgYzEgPSBibGluZGVkLnRvUmVkKGJuLm1vbnQocHJpdi5wcmltZTEpKTtcbiAgdmFyIGMyID0gYmxpbmRlZC50b1JlZChibi5tb250KHByaXYucHJpbWUyKSk7XG4gIHZhciBxaW52ID0gcHJpdi5jb2VmZmljaWVudDtcbiAgdmFyIHAgPSBwcml2LnByaW1lMTtcbiAgdmFyIHEgPSBwcml2LnByaW1lMjtcbiAgdmFyIG0xID0gYzEucmVkUG93KHByaXYuZXhwb25lbnQxKTtcbiAgdmFyIG0yID0gYzIucmVkUG93KHByaXYuZXhwb25lbnQyKTtcbiAgbTEgPSBtMS5mcm9tUmVkKCk7XG4gIG0yID0gbTIuZnJvbVJlZCgpO1xuICB2YXIgaCA9IG0xLmlzdWIobTIpLmltdWwocWludikudW1vZChwKTtcbiAgaC5pbXVsKHEpO1xuICBtMi5pYWRkKGgpO1xuICByZXR1cm4gbmV3IEJ1ZmZlcihtMi5pbXVsKGJsaW5kcy51bmJsaW5kZXIpLnVtb2QocHJpdi5tb2R1bHVzKS50b0FycmF5KGZhbHNlLCBsZW4pKTtcbn1cbmNydC5nZXRyID0gZ2V0cjtcbmZ1bmN0aW9uIGdldHIocHJpdikge1xuICB2YXIgbGVuID0gcHJpdi5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtcbiAgdmFyIHIgPSBuZXcgYm4ocmFuZG9tQnl0ZXMobGVuKSk7XG4gIHdoaWxlIChyLmNtcChwcml2Lm1vZHVsdXMpID49ICAwIHx8ICFyLnVtb2QocHJpdi5wcmltZTEpIHx8ICFyLnVtb2QocHJpdi5wcmltZTIpKSB7XG4gICAgciA9IG5ldyBibihyYW5kb21CeXRlcyhsZW4pKTtcbiAgfVxuICByZXR1cm4gcjtcbn1cbiIsIid1c2Ugc3RyaWN0J1xuZXhwb3J0c1snUlNBLVNIQTIyNCddID0gZXhwb3J0cy5zaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiA9IHtcbiAgc2lnbjogJ3JzYScsXG4gIGhhc2g6ICdzaGEyMjQnLFxuICBpZDogbmV3IEJ1ZmZlcignMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMnLCAnaGV4Jylcbn1cbmV4cG9ydHNbJ1JTQS1TSEEyNTYnXSA9IGV4cG9ydHMuc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24gPSB7XG4gIHNpZ246ICdyc2EnLFxuICBoYXNoOiAnc2hhMjU2JyxcbiAgaWQ6IG5ldyBCdWZmZXIoJzMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwJywgJ2hleCcpXG59XG5leHBvcnRzWydSU0EtU0hBMzg0J10gPSBleHBvcnRzLnNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uID0ge1xuICBzaWduOiAncnNhJyxcbiAgaGFzaDogJ3NoYTM4NCcsXG4gIGlkOiBuZXcgQnVmZmVyKCczMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCcsICdoZXgnKVxufVxuZXhwb3J0c1snUlNBLVNIQTUxMiddID0gZXhwb3J0cy5zaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiA9IHtcbiAgc2lnbjogJ3JzYScsXG4gIGhhc2g6ICdzaGE1MTInLFxuICBpZDogbmV3IEJ1ZmZlcignMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAnLCAnaGV4Jylcbn1cbmV4cG9ydHNbJ1JTQS1TSEExJ10gPSB7XG4gIHNpZ246ICdyc2EnLFxuICBoYXNoOiAnc2hhMScsXG4gIGlkOiBuZXcgQnVmZmVyKCczMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTQnLCAnaGV4Jylcbn1cbmV4cG9ydHNbJ2VjZHNhLXdpdGgtU0hBMSddID0ge1xuICBzaWduOiAnZWNkc2EnLFxuICBoYXNoOiAnc2hhMScsXG4gIGlkOiBuZXcgQnVmZmVyKCcnLCAnaGV4Jylcbn1cblxuZXhwb3J0cy5EU0EgPSBleHBvcnRzWydEU0EtU0hBMSddID0gZXhwb3J0c1snRFNBLVNIQSddID0ge1xuICBzaWduOiAnZHNhJyxcbiAgaGFzaDogJ3NoYTEnLFxuICBpZDogbmV3IEJ1ZmZlcignJywgJ2hleCcpXG59XG5leHBvcnRzWydEU0EtU0hBMjI0J10gPSBleHBvcnRzWydEU0EtV0lUSC1TSEEyMjQnXSA9IHtcbiAgc2lnbjogJ2RzYScsXG4gIGhhc2g6ICdzaGEyMjQnLFxuICBpZDogbmV3IEJ1ZmZlcignJywgJ2hleCcpXG59XG5leHBvcnRzWydEU0EtU0hBMjU2J10gPSBleHBvcnRzWydEU0EtV0lUSC1TSEEyNTYnXSA9IHtcbiAgc2lnbjogJ2RzYScsXG4gIGhhc2g6ICdzaGEyNTYnLFxuICBpZDogbmV3IEJ1ZmZlcignJywgJ2hleCcpXG59XG5leHBvcnRzWydEU0EtU0hBMzg0J10gPSBleHBvcnRzWydEU0EtV0lUSC1TSEEzODQnXSA9IHtcbiAgc2lnbjogJ2RzYScsXG4gIGhhc2g6ICdzaGEzODQnLFxuICBpZDogbmV3IEJ1ZmZlcignJywgJ2hleCcpXG59XG5leHBvcnRzWydEU0EtU0hBNTEyJ10gPSBleHBvcnRzWydEU0EtV0lUSC1TSEE1MTInXSA9IHtcbiAgc2lnbjogJ2RzYScsXG4gIGhhc2g6ICdzaGE1MTInLFxuICBpZDogbmV3IEJ1ZmZlcignJywgJ2hleCcpXG59XG5leHBvcnRzWydEU0EtUklQRU1EMTYwJ10gPSB7XG4gIHNpZ246ICdkc2EnLFxuICBoYXNoOiAncm1kMTYwJyxcbiAgaWQ6IG5ldyBCdWZmZXIoJycsICdoZXgnKVxufVxuZXhwb3J0c1snUlNBLVJJUEVNRDE2MCddID0gZXhwb3J0cy5yaXBlbWQxNjBXaXRoUlNBID0ge1xuICBzaWduOiAncnNhJyxcbiAgaGFzaDogJ3JtZDE2MCcsXG4gIGlkOiBuZXcgQnVmZmVyKCczMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQnLCAnaGV4Jylcbn1cbmV4cG9ydHNbJ1JTQS1NRDUnXSA9IGV4cG9ydHMubWQ1V2l0aFJTQUVuY3J5cHRpb24gPSB7XG4gIHNpZ246ICdyc2EnLFxuICBoYXNoOiAnbWQ1JyxcbiAgaWQ6IG5ldyBCdWZmZXIoJzMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCcsICdoZXgnKVxufVxuIiwidmFyIF9hbGdvcyA9IHJlcXVpcmUoJy4vYWxnb3MnKVxudmFyIGNyZWF0ZUhhc2ggPSByZXF1aXJlKCdjcmVhdGUtaGFzaCcpXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vc2lnbicpXG52YXIgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJylcbnZhciB2ZXJpZnkgPSByZXF1aXJlKCcuL3ZlcmlmeScpXG5cbnZhciBhbGdvcyA9IHt9XG5PYmplY3Qua2V5cyhfYWxnb3MpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBhbGdvc1trZXldID0gYWxnb3Nba2V5LnRvTG93ZXJDYXNlKCldID0gX2FsZ29zW2tleV1cbn0pXG5cbmZ1bmN0aW9uIFNpZ24gKGFsZ29yaXRobSkge1xuICBzdHJlYW0uV3JpdGFibGUuY2FsbCh0aGlzKVxuXG4gIHZhciBkYXRhID0gYWxnb3NbYWxnb3JpdGhtXVxuICBpZiAoIWRhdGEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbWVzc2FnZSBkaWdlc3QnKVxuICB9XG5cbiAgdGhpcy5faGFzaFR5cGUgPSBkYXRhLmhhc2hcbiAgdGhpcy5faGFzaCA9IGNyZWF0ZUhhc2goZGF0YS5oYXNoKVxuICB0aGlzLl90YWcgPSBkYXRhLmlkXG4gIHRoaXMuX3NpZ25UeXBlID0gZGF0YS5zaWduXG59XG5pbmhlcml0cyhTaWduLCBzdHJlYW0uV3JpdGFibGUpXG5cblNpZ24ucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIF93cml0ZSAoZGF0YSwgXywgZG9uZSkge1xuICB0aGlzLl9oYXNoLnVwZGF0ZShkYXRhKVxuICBkb25lKClcbn1cblxuU2lnbi5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlIChkYXRhLCBlbmMpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgIGRhdGEgPSBuZXcgQnVmZmVyKGRhdGEsIGVuYylcbiAgfVxuXG4gIHRoaXMuX2hhc2gudXBkYXRlKGRhdGEpXG4gIHJldHVybiB0aGlzXG59XG5cblNpZ24ucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiBzaWduTWV0aG9kIChrZXksIGVuYykge1xuICB0aGlzLmVuZCgpXG4gIHZhciBoYXNoID0gdGhpcy5faGFzaC5kaWdlc3QoKVxuICB2YXIgc2lnID0gc2lnbihCdWZmZXIuY29uY2F0KFt0aGlzLl90YWcsIGhhc2hdKSwga2V5LCB0aGlzLl9oYXNoVHlwZSwgdGhpcy5fc2lnblR5cGUpXG5cbiAgcmV0dXJuIGVuYyA/IHNpZy50b1N0cmluZyhlbmMpIDogc2lnXG59XG5cbmZ1bmN0aW9uIFZlcmlmeSAoYWxnb3JpdGhtKSB7XG4gIHN0cmVhbS5Xcml0YWJsZS5jYWxsKHRoaXMpXG5cbiAgdmFyIGRhdGEgPSBhbGdvc1thbGdvcml0aG1dXG4gIGlmICghZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBtZXNzYWdlIGRpZ2VzdCcpXG4gIH1cblxuICB0aGlzLl9oYXNoID0gY3JlYXRlSGFzaChkYXRhLmhhc2gpXG4gIHRoaXMuX3RhZyA9IGRhdGEuaWRcbiAgdGhpcy5fc2lnblR5cGUgPSBkYXRhLnNpZ25cbn1cbmluaGVyaXRzKFZlcmlmeSwgc3RyZWFtLldyaXRhYmxlKVxuXG5WZXJpZnkucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIF93cml0ZSAoZGF0YSwgXywgZG9uZSkge1xuICB0aGlzLl9oYXNoLnVwZGF0ZShkYXRhKVxuXG4gIGRvbmUoKVxufVxuXG5WZXJpZnkucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSAoZGF0YSwgZW5jKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICBkYXRhID0gbmV3IEJ1ZmZlcihkYXRhLCBlbmMpXG4gIH1cblxuICB0aGlzLl9oYXNoLnVwZGF0ZShkYXRhKVxuICByZXR1cm4gdGhpc1xufVxuXG5WZXJpZnkucHJvdG90eXBlLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeU1ldGhvZCAoa2V5LCBzaWcsIGVuYykge1xuICBpZiAodHlwZW9mIHNpZyA9PT0gJ3N0cmluZycpIHtcbiAgICBzaWcgPSBuZXcgQnVmZmVyKHNpZywgZW5jKVxuICB9XG5cbiAgdGhpcy5lbmQoKVxuICB2YXIgaGFzaCA9IHRoaXMuX2hhc2guZGlnZXN0KClcblxuICByZXR1cm4gdmVyaWZ5KHNpZywgQnVmZmVyLmNvbmNhdChbdGhpcy5fdGFnLCBoYXNoXSksIGtleSwgdGhpcy5fc2lnblR5cGUpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNpZ24gKGFsZ29yaXRobSkge1xuICByZXR1cm4gbmV3IFNpZ24oYWxnb3JpdGhtKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVWZXJpZnkgKGFsZ29yaXRobSkge1xuICByZXR1cm4gbmV3IFZlcmlmeShhbGdvcml0aG0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBTaWduOiBjcmVhdGVTaWduLFxuICBWZXJpZnk6IGNyZWF0ZVZlcmlmeSxcbiAgY3JlYXRlU2lnbjogY3JlYXRlU2lnbixcbiAgY3JlYXRlVmVyaWZ5OiBjcmVhdGVWZXJpZnlcbn1cbiIsIid1c2Ugc3RyaWN0J1xuZXhwb3J0c1snMS4zLjEzMi4wLjEwJ10gPSAnc2VjcDI1NmsxJ1xuXG5leHBvcnRzWycxLjMuMTMyLjAuMzMnXSA9ICdwMjI0J1xuXG5leHBvcnRzWycxLjIuODQwLjEwMDQ1LjMuMS4xJ10gPSAncDE5MidcblxuZXhwb3J0c1snMS4yLjg0MC4xMDA0NS4zLjEuNyddID0gJ3AyNTYnXG5cbmV4cG9ydHNbJzEuMy4xMzIuMC4zNCddID0gJ3AzODQnXG5cbmV4cG9ydHNbJzEuMy4xMzIuMC4zNSddID0gJ3A1MjEnXG4iLCIvLyBtdWNoIG9mIHRoaXMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvc2VsZi1zaWduZWQvYmxvYi9naC1wYWdlcy9saWIvcnNhLmpzXG52YXIgY3JlYXRlSG1hYyA9IHJlcXVpcmUoJ2NyZWF0ZS1obWFjJylcbnZhciBjcnQgPSByZXF1aXJlKCdicm93c2VyaWZ5LXJzYScpXG52YXIgY3VydmVzID0gcmVxdWlyZSgnLi9jdXJ2ZXMnKVxudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnZWxsaXB0aWMnKVxudmFyIHBhcnNlS2V5cyA9IHJlcXVpcmUoJ3BhcnNlLWFzbjEnKVxuXG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpXG52YXIgRUMgPSBlbGxpcHRpYy5lY1xuXG5mdW5jdGlvbiBzaWduIChoYXNoLCBrZXksIGhhc2hUeXBlLCBzaWduVHlwZSkge1xuICB2YXIgcHJpdiA9IHBhcnNlS2V5cyhrZXkpXG4gIGlmIChwcml2LmN1cnZlKSB7XG4gICAgaWYgKHNpZ25UeXBlICE9PSAnZWNkc2EnKSB0aHJvdyBuZXcgRXJyb3IoJ3dyb25nIHByaXZhdGUga2V5IHR5cGUnKVxuXG4gICAgcmV0dXJuIGVjU2lnbihoYXNoLCBwcml2KVxuICB9IGVsc2UgaWYgKHByaXYudHlwZSA9PT0gJ2RzYScpIHtcbiAgICBpZiAoc2lnblR5cGUgIT09ICdkc2EnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dyb25nIHByaXZhdGUga2V5IHR5cGUnKVxuICAgIH1cbiAgICByZXR1cm4gZHNhU2lnbihoYXNoLCBwcml2LCBoYXNoVHlwZSlcbiAgfSBlbHNlIHtcbiAgICBpZiAoc2lnblR5cGUgIT09ICdyc2EnKSB0aHJvdyBuZXcgRXJyb3IoJ3dyb25nIHByaXZhdGUga2V5IHR5cGUnKVxuICB9XG5cbiAgdmFyIGxlbiA9IHByaXYubW9kdWx1cy5ieXRlTGVuZ3RoKClcbiAgdmFyIHBhZCA9IFsgMCwgMSBdXG4gIHdoaWxlIChoYXNoLmxlbmd0aCArIHBhZC5sZW5ndGggKyAxIDwgbGVuKSB7XG4gICAgcGFkLnB1c2goMHhmZilcbiAgfVxuICBwYWQucHVzaCgweDAwKVxuICB2YXIgaSA9IC0xXG4gIHdoaWxlICgrK2kgPCBoYXNoLmxlbmd0aCkge1xuICAgIHBhZC5wdXNoKGhhc2hbaV0pXG4gIH1cblxuICB2YXIgb3V0ID0gY3J0KHBhZCwgcHJpdilcbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiBlY1NpZ24gKGhhc2gsIHByaXYpIHtcbiAgdmFyIGN1cnZlSWQgPSBjdXJ2ZXNbcHJpdi5jdXJ2ZS5qb2luKCcuJyldXG4gIGlmICghY3VydmVJZCkgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGN1cnZlICcgKyBwcml2LmN1cnZlLmpvaW4oJy4nKSlcblxuICB2YXIgY3VydmUgPSBuZXcgRUMoY3VydmVJZClcbiAgdmFyIGtleSA9IGN1cnZlLmdlbktleVBhaXIoKVxuXG4gIGtleS5faW1wb3J0UHJpdmF0ZShwcml2LnByaXZhdGVLZXkpXG4gIHZhciBvdXQgPSBrZXkuc2lnbihoYXNoKVxuXG4gIHJldHVybiBuZXcgQnVmZmVyKG91dC50b0RFUigpKVxufVxuXG5mdW5jdGlvbiBkc2FTaWduIChoYXNoLCBwcml2LCBhbGdvKSB7XG4gIHZhciB4ID0gcHJpdi5wYXJhbXMucHJpdl9rZXlcbiAgdmFyIHAgPSBwcml2LnBhcmFtcy5wXG4gIHZhciBxID0gcHJpdi5wYXJhbXMucVxuICB2YXIgZyA9IHByaXYucGFyYW1zLmdcbiAgdmFyIHIgPSBuZXcgQk4oMClcbiAgdmFyIGtcbiAgdmFyIEggPSBiaXRzMmludChoYXNoLCBxKS5tb2QocSlcbiAgdmFyIHMgPSBmYWxzZVxuICB2YXIga3YgPSBnZXRLZXkoeCwgcSwgaGFzaCwgYWxnbylcbiAgd2hpbGUgKHMgPT09IGZhbHNlKSB7XG4gICAgayA9IG1ha2VLZXkocSwga3YsIGFsZ28pXG4gICAgciA9IG1ha2VSKGcsIGssIHAsIHEpXG4gICAgcyA9IGsuaW52bShxKS5pbXVsKEguYWRkKHgubXVsKHIpKSkubW9kKHEpXG4gICAgaWYgKCFzLmNtcG4oMCkpIHtcbiAgICAgIHMgPSBmYWxzZVxuICAgICAgciA9IG5ldyBCTigwKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdG9ERVIociwgcylcbn1cblxuZnVuY3Rpb24gdG9ERVIgKHIsIHMpIHtcbiAgciA9IHIudG9BcnJheSgpXG4gIHMgPSBzLnRvQXJyYXkoKVxuXG4gIC8vIFBhZCB2YWx1ZXNcbiAgaWYgKHJbMF0gJiAweDgwKSB7XG4gICAgciA9IFsgMCBdLmNvbmNhdChyKVxuICB9XG4gIC8vIFBhZCB2YWx1ZXNcbiAgaWYgKHNbMF0gJiAweDgwKSB7XG4gICAgcyA9IFswXS5jb25jYXQocylcbiAgfVxuXG4gIHZhciB0b3RhbCA9IHIubGVuZ3RoICsgcy5sZW5ndGggKyA0XG4gIHZhciByZXMgPSBbIDB4MzAsIHRvdGFsLCAweDAyLCByLmxlbmd0aCBdXG4gIHJlcyA9IHJlcy5jb25jYXQociwgWyAweDAyLCBzLmxlbmd0aCBdLCBzKVxuICByZXR1cm4gbmV3IEJ1ZmZlcihyZXMpXG59XG5cbmZ1bmN0aW9uIGdldEtleSAoeCwgcSwgaGFzaCwgYWxnbykge1xuICB4ID0gbmV3IEJ1ZmZlcih4LnRvQXJyYXkoKSlcbiAgaWYgKHgubGVuZ3RoIDwgcS5ieXRlTGVuZ3RoKCkpIHtcbiAgICB2YXIgemVyb3MgPSBuZXcgQnVmZmVyKHEuYnl0ZUxlbmd0aCgpIC0geC5sZW5ndGgpXG4gICAgemVyb3MuZmlsbCgwKVxuICAgIHggPSBCdWZmZXIuY29uY2F0KFt6ZXJvcywgeF0pXG4gIH1cbiAgdmFyIGhsZW4gPSBoYXNoLmxlbmd0aFxuICB2YXIgaGJpdHMgPSBiaXRzMm9jdGV0cyhoYXNoLCBxKVxuICB2YXIgdiA9IG5ldyBCdWZmZXIoaGxlbilcbiAgdi5maWxsKDEpXG4gIHZhciBrID0gbmV3IEJ1ZmZlcihobGVuKVxuICBrLmZpbGwoMClcbiAgayA9IGNyZWF0ZUhtYWMoYWxnbywgaylcbiAgICAudXBkYXRlKHYpXG4gICAgLnVwZGF0ZShuZXcgQnVmZmVyKFswXSkpXG4gICAgLnVwZGF0ZSh4KVxuICAgIC51cGRhdGUoaGJpdHMpXG4gICAgLmRpZ2VzdCgpXG4gIHYgPSBjcmVhdGVIbWFjKGFsZ28sIGspXG4gICAgLnVwZGF0ZSh2KVxuICAgIC5kaWdlc3QoKVxuICBrID0gY3JlYXRlSG1hYyhhbGdvLCBrKVxuICAgIC51cGRhdGUodilcbiAgICAudXBkYXRlKG5ldyBCdWZmZXIoWzFdKSlcbiAgICAudXBkYXRlKHgpXG4gICAgLnVwZGF0ZShoYml0cylcbiAgICAuZGlnZXN0KClcbiAgdiA9IGNyZWF0ZUhtYWMoYWxnbywgaylcbiAgICAudXBkYXRlKHYpXG4gICAgLmRpZ2VzdCgpXG4gIHJldHVybiB7XG4gICAgazogayxcbiAgICB2OiB2XG4gIH1cbn1cblxuZnVuY3Rpb24gYml0czJpbnQgKG9iaXRzLCBxKSB7XG4gIHZhciBiaXRzID0gbmV3IEJOKG9iaXRzKVxuICB2YXIgc2hpZnQgPSAob2JpdHMubGVuZ3RoIDw8IDMpIC0gcS5iaXRMZW5ndGgoKVxuICBpZiAoc2hpZnQgPiAwKSB7XG4gICAgYml0cy5pc2hybihzaGlmdClcbiAgfVxuICByZXR1cm4gYml0c1xufVxuXG5mdW5jdGlvbiBiaXRzMm9jdGV0cyAoYml0cywgcSkge1xuICBiaXRzID0gYml0czJpbnQoYml0cywgcSlcbiAgYml0cyA9IGJpdHMubW9kKHEpXG4gIHZhciBvdXQgPSBuZXcgQnVmZmVyKGJpdHMudG9BcnJheSgpKVxuICBpZiAob3V0Lmxlbmd0aCA8IHEuYnl0ZUxlbmd0aCgpKSB7XG4gICAgdmFyIHplcm9zID0gbmV3IEJ1ZmZlcihxLmJ5dGVMZW5ndGgoKSAtIG91dC5sZW5ndGgpXG4gICAgemVyb3MuZmlsbCgwKVxuICAgIG91dCA9IEJ1ZmZlci5jb25jYXQoW3plcm9zLCBvdXRdKVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuZnVuY3Rpb24gbWFrZUtleSAocSwga3YsIGFsZ28pIHtcbiAgdmFyIHQsIGtcblxuICBkbyB7XG4gICAgdCA9IG5ldyBCdWZmZXIoJycpXG5cbiAgICB3aGlsZSAodC5sZW5ndGggKiA4IDwgcS5iaXRMZW5ndGgoKSkge1xuICAgICAga3YudiA9IGNyZWF0ZUhtYWMoYWxnbywga3YuaylcbiAgICAgICAgLnVwZGF0ZShrdi52KVxuICAgICAgICAuZGlnZXN0KClcbiAgICAgIHQgPSBCdWZmZXIuY29uY2F0KFt0LCBrdi52XSlcbiAgICB9XG5cbiAgICBrID0gYml0czJpbnQodCwgcSlcbiAgICBrdi5rID0gY3JlYXRlSG1hYyhhbGdvLCBrdi5rKVxuICAgICAgLnVwZGF0ZShrdi52KVxuICAgICAgLnVwZGF0ZShuZXcgQnVmZmVyKFswXSkpXG4gICAgICAuZGlnZXN0KClcbiAgICBrdi52ID0gY3JlYXRlSG1hYyhhbGdvLCBrdi5rKVxuICAgICAgLnVwZGF0ZShrdi52KVxuICAgICAgLmRpZ2VzdCgpXG4gIH0gd2hpbGUgKGsuY21wKHEpICE9PSAtMSlcblxuICByZXR1cm4ga1xufVxuXG5mdW5jdGlvbiBtYWtlUiAoZywgaywgcCwgcSkge1xuICByZXR1cm4gZy50b1JlZChCTi5tb250KHApKS5yZWRQb3coaykuZnJvbVJlZCgpLm1vZChxKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNpZ25cbm1vZHVsZS5leHBvcnRzLmdldEtleSA9IGdldEtleVxubW9kdWxlLmV4cG9ydHMubWFrZUtleSA9IG1ha2VLZXlcbiIsIi8vIG11Y2ggb2YgdGhpcyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9zZWxmLXNpZ25lZC9ibG9iL2doLXBhZ2VzL2xpYi9yc2EuanNcbnZhciBjdXJ2ZXMgPSByZXF1aXJlKCcuL2N1cnZlcycpXG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCdlbGxpcHRpYycpXG52YXIgcGFyc2VLZXlzID0gcmVxdWlyZSgncGFyc2UtYXNuMScpXG5cbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJylcbnZhciBFQyA9IGVsbGlwdGljLmVjXG5cbmZ1bmN0aW9uIHZlcmlmeSAoc2lnLCBoYXNoLCBrZXksIHNpZ25UeXBlKSB7XG4gIHZhciBwdWIgPSBwYXJzZUtleXMoa2V5KVxuICBpZiAocHViLnR5cGUgPT09ICdlYycpIHtcbiAgICBpZiAoc2lnblR5cGUgIT09ICdlY2RzYScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignd3JvbmcgcHVibGljIGtleSB0eXBlJylcbiAgICB9XG4gICAgcmV0dXJuIGVjVmVyaWZ5KHNpZywgaGFzaCwgcHViKVxuICB9IGVsc2UgaWYgKHB1Yi50eXBlID09PSAnZHNhJykge1xuICAgIGlmIChzaWduVHlwZSAhPT0gJ2RzYScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignd3JvbmcgcHVibGljIGtleSB0eXBlJylcbiAgICB9XG4gICAgcmV0dXJuIGRzYVZlcmlmeShzaWcsIGhhc2gsIHB1YilcbiAgfSBlbHNlIHtcbiAgICBpZiAoc2lnblR5cGUgIT09ICdyc2EnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dyb25nIHB1YmxpYyBrZXkgdHlwZScpXG4gICAgfVxuICB9XG4gIHZhciBsZW4gPSBwdWIubW9kdWx1cy5ieXRlTGVuZ3RoKClcbiAgdmFyIHBhZCA9IFsgMSBdXG4gIHZhciBwYWROdW0gPSAwXG4gIHdoaWxlIChoYXNoLmxlbmd0aCArIHBhZC5sZW5ndGggKyAyIDwgbGVuKSB7XG4gICAgcGFkLnB1c2goMHhmZilcbiAgICBwYWROdW0rK1xuICB9XG4gIHBhZC5wdXNoKDB4MDApXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGhhc2gubGVuZ3RoKSB7XG4gICAgcGFkLnB1c2goaGFzaFtpXSlcbiAgfVxuICBwYWQgPSBuZXcgQnVmZmVyKHBhZClcbiAgdmFyIHJlZCA9IEJOLm1vbnQocHViLm1vZHVsdXMpXG4gIHNpZyA9IG5ldyBCTihzaWcpLnRvUmVkKHJlZClcblxuICBzaWcgPSBzaWcucmVkUG93KG5ldyBCTihwdWIucHVibGljRXhwb25lbnQpKVxuXG4gIHNpZyA9IG5ldyBCdWZmZXIoc2lnLmZyb21SZWQoKS50b0FycmF5KCkpXG4gIHZhciBvdXQgPSAwXG4gIGlmIChwYWROdW0gPCA4KSB7XG4gICAgb3V0ID0gMVxuICB9XG4gIGxlbiA9IE1hdGgubWluKHNpZy5sZW5ndGgsIHBhZC5sZW5ndGgpXG4gIGlmIChzaWcubGVuZ3RoICE9PSBwYWQubGVuZ3RoKSB7XG4gICAgb3V0ID0gMVxuICB9XG5cbiAgaSA9IC0xXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBvdXQgfD0gKHNpZ1tpXSBeIHBhZFtpXSlcbiAgfVxuICByZXR1cm4gb3V0ID09PSAwXG59XG5cbmZ1bmN0aW9uIGVjVmVyaWZ5IChzaWcsIGhhc2gsIHB1Yikge1xuICB2YXIgY3VydmVJZCA9IGN1cnZlc1twdWIuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbignLicpXVxuICBpZiAoIWN1cnZlSWQpIHRocm93IG5ldyBFcnJvcigndW5rbm93biBjdXJ2ZSAnICsgcHViLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oJy4nKSlcblxuICB2YXIgY3VydmUgPSBuZXcgRUMoY3VydmVJZClcbiAgdmFyIHB1YmtleSA9IHB1Yi5kYXRhLnN1YmplY3RQcml2YXRlS2V5LmRhdGFcblxuICByZXR1cm4gY3VydmUudmVyaWZ5KGhhc2gsIHNpZywgcHVia2V5KVxufVxuXG5mdW5jdGlvbiBkc2FWZXJpZnkgKHNpZywgaGFzaCwgcHViKSB7XG4gIHZhciBwID0gcHViLmRhdGEucFxuICB2YXIgcSA9IHB1Yi5kYXRhLnFcbiAgdmFyIGcgPSBwdWIuZGF0YS5nXG4gIHZhciB5ID0gcHViLmRhdGEucHViX2tleVxuICB2YXIgdW5wYWNrZWQgPSBwYXJzZUtleXMuc2lnbmF0dXJlLmRlY29kZShzaWcsICdkZXInKVxuICB2YXIgcyA9IHVucGFja2VkLnNcbiAgdmFyIHIgPSB1bnBhY2tlZC5yXG4gIGNoZWNrVmFsdWUocywgcSlcbiAgY2hlY2tWYWx1ZShyLCBxKVxuICB2YXIgbW9udHAgPSBCTi5tb250KHApXG4gIHZhciB3ID0gcy5pbnZtKHEpXG4gIHZhciB2ID0gZy50b1JlZChtb250cClcbiAgICAucmVkUG93KG5ldyBCTihoYXNoKS5tdWwodykubW9kKHEpKVxuICAgIC5mcm9tUmVkKClcbiAgICAubXVsKFxuICAgICAgeS50b1JlZChtb250cClcbiAgICAgICAgLnJlZFBvdyhyLm11bCh3KS5tb2QocSkpXG4gICAgICAgIC5mcm9tUmVkKClcbiAgKS5tb2QocCkubW9kKHEpXG4gIHJldHVybiAhdi5jbXAocilcbn1cblxuZnVuY3Rpb24gY2hlY2tWYWx1ZSAoYiwgcSkge1xuICBpZiAoYi5jbXBuKDApIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2lnJylcbiAgfVxuICBpZiAoYi5jbXAocSkgPj0gcSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzaWcnKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyaWZ5XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKTtcbnZhciBCdWZmZXIgPSBidWZmZXIuQnVmZmVyO1xudmFyIFNsb3dCdWZmZXIgPSBidWZmZXIuU2xvd0J1ZmZlcjtcbnZhciBNQVhfTEVOID0gYnVmZmVyLmtNYXhMZW5ndGggfHwgMjE0NzQ4MzY0NztcbmV4cG9ydHMuYWxsb2MgPSBmdW5jdGlvbiBhbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIEJ1ZmZlci5hbGxvYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpO1xuICB9XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBub3QgYmUgbnVtYmVyJyk7XG4gIH1cbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemUgbXVzdCBiZSBhIG51bWJlcicpO1xuICB9XG4gIGlmIChzaXplID4gTUFYX0xFTikge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdzaXplIGlzIHRvbyBsYXJnZScpO1xuICB9XG4gIHZhciBlbmMgPSBlbmNvZGluZztcbiAgdmFyIF9maWxsID0gZmlsbDtcbiAgaWYgKF9maWxsID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmMgPSB1bmRlZmluZWQ7XG4gICAgX2ZpbGwgPSAwO1xuICB9XG4gIHZhciBidWYgPSBuZXcgQnVmZmVyKHNpemUpO1xuICBpZiAodHlwZW9mIF9maWxsID09PSAnc3RyaW5nJykge1xuICAgIHZhciBmaWxsQnVmID0gbmV3IEJ1ZmZlcihfZmlsbCwgZW5jKTtcbiAgICB2YXIgZmxlbiA9IGZpbGxCdWYubGVuZ3RoO1xuICAgIHZhciBpID0gLTE7XG4gICAgd2hpbGUgKCsraSA8IHNpemUpIHtcbiAgICAgIGJ1ZltpXSA9IGZpbGxCdWZbaSAlIGZsZW5dO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBidWYuZmlsbChfZmlsbCk7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cbmV4cG9ydHMuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiBhbGxvY1Vuc2FmZShzaXplKSB7XG4gIGlmICh0eXBlb2YgQnVmZmVyLmFsbG9jVW5zYWZlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvY1Vuc2FmZShzaXplKTtcbiAgfVxuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2l6ZSBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gIH1cbiAgaWYgKHNpemUgPiBNQVhfTEVOKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NpemUgaXMgdG9vIGxhcmdlJyk7XG4gIH1cbiAgcmV0dXJuIG5ldyBCdWZmZXIoc2l6ZSk7XG59XG5leHBvcnRzLmZyb20gPSBmdW5jdGlvbiBmcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiBCdWZmZXIuZnJvbSA9PT0gJ2Z1bmN0aW9uJyAmJiAoIWdsb2JhbC5VaW50OEFycmF5IHx8IFVpbnQ4QXJyYXkuZnJvbSAhPT0gQnVmZmVyLmZyb20pKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHZhciBvZmZzZXQgPSBlbmNvZGluZ09yT2Zmc2V0O1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gbmV3IEJ1ZmZlcih2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgb2Zmc2V0ID0gMDtcbiAgICB9XG4gICAgdmFyIGxlbiA9IGxlbmd0aDtcbiAgICBpZiAodHlwZW9mIGxlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxlbiA9IHZhbHVlLmJ5dGVMZW5ndGggLSBvZmZzZXQ7XG4gICAgfVxuICAgIGlmIChvZmZzZXQgPj0gdmFsdWUuYnl0ZUxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ29mZnNldFxcJyBpcyBvdXQgb2YgYm91bmRzJyk7XG4gICAgfVxuICAgIGlmIChsZW4gPiB2YWx1ZS5ieXRlTGVuZ3RoIC0gb2Zmc2V0KSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnbGVuZ3RoXFwnIGlzIG91dCBvZiBib3VuZHMnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIodmFsdWUuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBsZW4pKTtcbiAgfVxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgIHZhciBvdXQgPSBuZXcgQnVmZmVyKHZhbHVlLmxlbmd0aCk7XG4gICAgdmFsdWUuY29weShvdXQsIDAsIDAsIHZhbHVlLmxlbmd0aCk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuICBpZiAodmFsdWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHx8ICdsZW5ndGgnIGluIHZhbHVlKSB7XG4gICAgICByZXR1cm4gbmV3IEJ1ZmZlcih2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZS50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KHZhbHVlLmRhdGEpKSB7XG4gICAgICByZXR1cm4gbmV3IEJ1ZmZlcih2YWx1ZS5kYXRhKTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsICcgKyAnQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4nKTtcbn1cbmV4cG9ydHMuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gYWxsb2NVbnNhZmVTbG93KHNpemUpIHtcbiAgaWYgKHR5cGVvZiBCdWZmZXIuYWxsb2NVbnNhZmVTbG93ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3coc2l6ZSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemUgbXVzdCBiZSBhIG51bWJlcicpO1xuICB9XG4gIGlmIChzaXplID49IE1BWF9MRU4pIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc2l6ZSBpcyB0b28gbGFyZ2UnKTtcbiAgfVxuICByZXR1cm4gbmV3IFNsb3dCdWZmZXIoc2l6ZSk7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHhvciAoYSwgYikge1xuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oYS5sZW5ndGgsIGIubGVuZ3RoKVxuICB2YXIgYnVmZmVyID0gbmV3IEJ1ZmZlcihsZW5ndGgpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGJ1ZmZlcltpXSA9IGFbaV0gXiBiW2ldXG4gIH1cblxuICByZXR1cm4gYnVmZmVyXG59XG4iLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBVc2UgT2JqZWN0IGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBEdWUgdG8gdmFyaW91cyBicm93c2VyIGJ1Z3MsIHNvbWV0aW1lcyB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uIHdpbGwgYmUgdXNlZCBldmVuXG4gKiB3aGVuIHRoZSBicm93c2VyIHN1cHBvcnRzIHR5cGVkIGFycmF5cy5cbiAqXG4gKiBOb3RlOlxuICpcbiAqICAgLSBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YCBpbnN0YW5jZXMsXG4gKiAgICAgU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzguXG4gKlxuICogICAtIENocm9tZSA5LTEwIGlzIG1pc3NpbmcgdGhlIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24uXG4gKlxuICogICAtIElFMTAgaGFzIGEgYnJva2VuIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhcnJheXMgb2ZcbiAqICAgICBpbmNvcnJlY3QgbGVuZ3RoIGluIHNvbWUgc2l0dWF0aW9ucy5cblxuICogV2UgZGV0ZWN0IHRoZXNlIGJ1Z2d5IGJyb3dzZXJzIGFuZCBzZXQgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYCB0byBgZmFsc2VgIHNvIHRoZXlcbiAqIGdldCB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBzbG93ZXIgYnV0IGJlaGF2ZXMgY29ycmVjdGx5LlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUICE9PSB1bmRlZmluZWRcbiAgPyBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVFxuICA6IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuLypcbiAqIEV4cG9ydCBrTWF4TGVuZ3RoIGFmdGVyIHR5cGVkIGFycmF5IHN1cHBvcnQgaXMgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0cy5rTWF4TGVuZ3RoID0ga01heExlbmd0aCgpXG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuX19wcm90b19fID0ge19fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfX1cbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MiAmJiAvLyB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZFxuICAgICAgICB0eXBlb2YgYXJyLnN1YmFycmF5ID09PSAnZnVuY3Rpb24nICYmIC8vIGNocm9tZSA5LTEwIGxhY2sgYHN1YmFycmF5YFxuICAgICAgICBhcnIuc3ViYXJyYXkoMSwgMSkuYnl0ZUxlbmd0aCA9PT0gMCAvLyBpZTEwIGhhcyBicm9rZW4gYHN1YmFycmF5YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24ga01heExlbmd0aCAoKSB7XG4gIHJldHVybiBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVFxuICAgID8gMHg3ZmZmZmZmZlxuICAgIDogMHgzZmZmZmZmZlxufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKHRoYXQsIGxlbmd0aCkge1xuICBpZiAoa01heExlbmd0aCgpIDwgbGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoJylcbiAgfVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICBpZiAodGhhdCA9PT0gbnVsbCkge1xuICAgICAgdGhhdCA9IG5ldyBCdWZmZXIobGVuZ3RoKVxuICAgIH1cbiAgICB0aGF0Lmxlbmd0aCA9IGxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgISh0aGlzIGluc3RhbmNlb2YgQnVmZmVyKSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0lmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUodGhpcywgYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKHRoaXMsIGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuLy8gVE9ETzogTGVnYWN5LCBub3QgbmVlZGVkIGFueW1vcmUuIFJlbW92ZSBpbiBuZXh0IG1ham9yIHZlcnNpb24uXG5CdWZmZXIuX2F1Z21lbnQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGFyci5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gZnJvbSAodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cblxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIHJldHVybiBmcm9tT2JqZWN0KHRoYXQsIHZhbHVlKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKG51bGwsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbmlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICBCdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkucHJvdG90eXBlXG4gIEJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAmJlxuICAgICAgQnVmZmVyW1N5bWJvbC5zcGVjaWVzXSA9PT0gQnVmZmVyKSB7XG4gICAgLy8gRml4IHN1YmFycmF5KCkgaW4gRVMyMDE2LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvOTdcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywge1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAodGhhdCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2MobnVsbCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlICh0aGF0LCBzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7XG4gICAgICB0aGF0W2ldID0gMFxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHRoYXQsIHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJlbmNvZGluZ1wiIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSB0aGF0LndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICB0aGF0ID0gdGhhdC5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlICh0aGF0LCBhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyICh0aGF0LCBhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGFycmF5LmJ5dGVMZW5ndGggLy8gdGhpcyB0aHJvd3MgaWYgYGFycmF5YCBpcyBub3QgYSB2YWxpZCBBcnJheUJ1ZmZlclxuXG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdvZmZzZXRcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ2xlbmd0aFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gYXJyYXlcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgdGhhdCA9IGZyb21BcnJheUxpa2UodGhhdCwgYXJyYXkpXG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAodGhhdCwgb2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuKVxuXG4gICAgaWYgKHRoYXQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhhdFxuICAgIH1cblxuICAgIG9iai5jb3B5KHRoYXQsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gdGhhdFxuICB9XG5cbiAgaWYgKG9iaikge1xuICAgIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBvYmouYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHx8ICdsZW5ndGgnIGluIG9iaikge1xuICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBpc25hbihvYmoubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIDApXG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmopXG4gICAgfVxuXG4gICAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBpc0FycmF5KG9iai5kYXRhKSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpXG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBrTWF4TGVuZ3RoKClgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0ga01heExlbmd0aCgpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIGtNYXhMZW5ndGgoKS50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcilcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIWlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IHN0cmluZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAobGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJzaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoZSBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIGFuZCBgaXMtYnVmZmVyYCAoaW4gU2FmYXJpIDUtNykgdG8gZGV0ZWN0XG4vLyBCdWZmZXIgaW5zdGFuY2VzLlxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCB8IDBcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0ICAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAoaXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJlxuICAgICAgICB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbIHZhbCBdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBkaWdpdHNcbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKHN0ckxlbiAlIDIgIT09IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCB8IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICAvLyBsZWdhY3kgd3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0LCBsZW5ndGgpIC0gcmVtb3ZlIGluIHYwLjEzXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERikgPyAzXG4gICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKSA/IDJcbiAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSB0b0hleChidWZbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1NilcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgICBuZXdCdWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIHZhciBzbGljZUxlbiA9IGVuZCAtIHN0YXJ0XG4gICAgbmV3QnVmID0gbmV3IEJ1ZmZlcihzbGljZUxlbiwgdW5kZWZpbmVkKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpY2VMZW47ICsraSkge1xuICAgICAgbmV3QnVmW2ldID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDE2IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDIpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlICYgKDB4ZmYgPDwgKDggKiAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSkpKSA+Pj5cbiAgICAgIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpICogOFxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDMyIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCA0KTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSA+Pj4gKGxpdHRsZUVuZGlhbiA/IGkgOiAzIC0gaSkgKiA4KSAmIDB4ZmZcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcbiAgdmFyIGlcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSBpZiAobGVuIDwgMTAwMCB8fCAhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBhc2NlbmRpbmcgY29weSBmcm9tIHN0YXJ0XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiB1dGY4VG9CeXRlcyhuZXcgQnVmZmVyKHZhbCwgZW5jb2RpbmcpLnRvU3RyaW5nKCkpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teK1xcLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0cmluZ3RyaW0oc3RyKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBzdHJpbmd0cmltIChzdHIpIHtcbiAgaWYgKHN0ci50cmltKSByZXR1cm4gc3RyLnRyaW0oKVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKVxufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIGlzbmFuICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gdmFsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG4iLCJ2YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnc3RyZWFtJykuVHJhbnNmb3JtXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyJykuU3RyaW5nRGVjb2RlclxubW9kdWxlLmV4cG9ydHMgPSBDaXBoZXJCYXNlXG5pbmhlcml0cyhDaXBoZXJCYXNlLCBUcmFuc2Zvcm0pXG5mdW5jdGlvbiBDaXBoZXJCYXNlIChoYXNoTW9kZSkge1xuICBUcmFuc2Zvcm0uY2FsbCh0aGlzKVxuICB0aGlzLmhhc2hNb2RlID0gdHlwZW9mIGhhc2hNb2RlID09PSAnc3RyaW5nJ1xuICBpZiAodGhpcy5oYXNoTW9kZSkge1xuICAgIHRoaXNbaGFzaE1vZGVdID0gdGhpcy5fZmluYWxPckRpZ2VzdFxuICB9IGVsc2Uge1xuICAgIHRoaXMuZmluYWwgPSB0aGlzLl9maW5hbE9yRGlnZXN0XG4gIH1cbiAgdGhpcy5fZGVjb2RlciA9IG51bGxcbiAgdGhpcy5fZW5jb2RpbmcgPSBudWxsXG59XG5DaXBoZXJCYXNlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSwgaW5wdXRFbmMsIG91dHB1dEVuYykge1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgZGF0YSA9IG5ldyBCdWZmZXIoZGF0YSwgaW5wdXRFbmMpXG4gIH1cbiAgdmFyIG91dERhdGEgPSB0aGlzLl91cGRhdGUoZGF0YSlcbiAgaWYgKHRoaXMuaGFzaE1vZGUpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG4gIGlmIChvdXRwdXRFbmMpIHtcbiAgICBvdXREYXRhID0gdGhpcy5fdG9TdHJpbmcob3V0RGF0YSwgb3V0cHV0RW5jKVxuICB9XG4gIHJldHVybiBvdXREYXRhXG59XG5cbkNpcGhlckJhc2UucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nID0gZnVuY3Rpb24gKCkge31cblxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuZ2V0QXV0aFRhZyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCd0cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlJylcbn1cblxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuc2V0QXV0aFRhZyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCd0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlJylcbn1cblxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuc2V0QUFEID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3RyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlJylcbn1cblxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChkYXRhLCBfLCBuZXh0KSB7XG4gIHZhciBlcnJcbiAgdHJ5IHtcbiAgICBpZiAodGhpcy5oYXNoTW9kZSkge1xuICAgICAgdGhpcy5fdXBkYXRlKGRhdGEpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaCh0aGlzLl91cGRhdGUoZGF0YSkpXG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyID0gZVxuICB9IGZpbmFsbHkge1xuICAgIG5leHQoZXJyKVxuICB9XG59XG5DaXBoZXJCYXNlLnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbiAoZG9uZSkge1xuICB2YXIgZXJyXG4gIHRyeSB7XG4gICAgdGhpcy5wdXNoKHRoaXMuX2ZpbmFsKCkpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnIgPSBlXG4gIH0gZmluYWxseSB7XG4gICAgZG9uZShlcnIpXG4gIH1cbn1cbkNpcGhlckJhc2UucHJvdG90eXBlLl9maW5hbE9yRGlnZXN0ID0gZnVuY3Rpb24gKG91dHB1dEVuYykge1xuICB2YXIgb3V0RGF0YSA9IHRoaXMuX2ZpbmFsKCkgfHwgbmV3IEJ1ZmZlcignJylcbiAgaWYgKG91dHB1dEVuYykge1xuICAgIG91dERhdGEgPSB0aGlzLl90b1N0cmluZyhvdXREYXRhLCBvdXRwdXRFbmMsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG91dERhdGFcbn1cblxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKHZhbHVlLCBlbmMsIGZpbikge1xuICBpZiAoIXRoaXMuX2RlY29kZXIpIHtcbiAgICB0aGlzLl9kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoZW5jKVxuICAgIHRoaXMuX2VuY29kaW5nID0gZW5jXG4gIH1cbiAgaWYgKHRoaXMuX2VuY29kaW5nICE9PSBlbmMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhblxcJ3Qgc3dpdGNoIGVuY29kaW5ncycpXG4gIH1cbiAgdmFyIG91dCA9IHRoaXMuX2RlY29kZXIud3JpdGUodmFsdWUpXG4gIGlmIChmaW4pIHtcbiAgICBvdXQgKz0gdGhpcy5fZGVjb2Rlci5lbmQoKVxuICB9XG4gIHJldHVybiBvdXRcbn1cbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuYXJyYXkuZnJvbScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuQXJyYXkuZnJvbTsiLCJ2YXIgY29yZSAgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJylcbiAgLCAkSlNPTiA9IGNvcmUuSlNPTiB8fCAoY29yZS5KU09OID0ge3N0cmluZ2lmeTogSlNPTi5zdHJpbmdpZnl9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RyaW5naWZ5KGl0KXsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICByZXR1cm4gJEpTT04uc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmd1bWVudHMpO1xufTsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3QuYXNzaWduOyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUnKTtcbnZhciAkT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlKFAsIEQpe1xuICByZXR1cm4gJE9iamVjdC5jcmVhdGUoUCwgRCk7XG59OyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnZhciAkT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyl7XG4gIHJldHVybiAkT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpO1xufTsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgJE9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KXtcbiAgcmV0dXJuICRPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xufTsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LmdldFByb3RvdHlwZU9mOyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Qua2V5czsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LnNldFByb3RvdHlwZU9mOyIsInJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvX2NvcmUnKS5Qcm9taXNlOyIsInJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvX2NvcmUnKS5TZXQ7IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5TeW1ib2w7IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fd2tzLWV4dCcpLmYoJ2l0ZXJhdG9yJyk7IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIGlmKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKXRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpeyAvKiBlbXB0eSAqLyB9OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQsIENvbnN0cnVjdG9yLCBuYW1lLCBmb3JiaWRkZW5GaWVsZCl7XG4gIGlmKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKXtcbiAgICB0aHJvdyBUeXBlRXJyb3IobmFtZSArICc6IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICB9IHJldHVybiBpdDtcbn07IiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoIWlzT2JqZWN0KGl0KSl0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07IiwidmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXRlciwgSVRFUkFUT1Ipe1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvck9mKGl0ZXIsIGZhbHNlLCByZXN1bHQucHVzaCwgcmVzdWx0LCBJVEVSQVRPUik7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0JylcbiAgLCB0b0xlbmd0aCAgPSByZXF1aXJlKCcuL190by1sZW5ndGgnKVxuICAsIHRvSW5kZXggICA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKElTX0lOQ0xVREVTKXtcbiAgcmV0dXJuIGZ1bmN0aW9uKCR0aGlzLCBlbCwgZnJvbUluZGV4KXtcbiAgICB2YXIgTyAgICAgID0gdG9JT2JqZWN0KCR0aGlzKVxuICAgICAgLCBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aClcbiAgICAgICwgaW5kZXggID0gdG9JbmRleChmcm9tSW5kZXgsIGxlbmd0aClcbiAgICAgICwgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIGlmKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKXdoaWxlKGxlbmd0aCA+IGluZGV4KXtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIGlmKHZhbHVlICE9IHZhbHVlKXJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I3RvSW5kZXggaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKylpZihJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKXtcbiAgICAgIGlmKE9baW5kZXhdID09PSBlbClyZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59OyIsIi8vIDAgLT4gQXJyYXkjZm9yRWFjaFxuLy8gMSAtPiBBcnJheSNtYXBcbi8vIDIgLT4gQXJyYXkjZmlsdGVyXG4vLyAzIC0+IEFycmF5I3NvbWVcbi8vIDQgLT4gQXJyYXkjZXZlcnlcbi8vIDUgLT4gQXJyYXkjZmluZFxuLy8gNiAtPiBBcnJheSNmaW5kSW5kZXhcbnZhciBjdHggICAgICA9IHJlcXVpcmUoJy4vX2N0eCcpXG4gICwgSU9iamVjdCAgPSByZXF1aXJlKCcuL19pb2JqZWN0JylcbiAgLCB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKVxuICAsIGFzYyAgICAgID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oVFlQRSwgJGNyZWF0ZSl7XG4gIHZhciBJU19NQVAgICAgICAgID0gVFlQRSA9PSAxXG4gICAgLCBJU19GSUxURVIgICAgID0gVFlQRSA9PSAyXG4gICAgLCBJU19TT01FICAgICAgID0gVFlQRSA9PSAzXG4gICAgLCBJU19FVkVSWSAgICAgID0gVFlQRSA9PSA0XG4gICAgLCBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2XG4gICAgLCBOT19IT0xFUyAgICAgID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVhcbiAgICAsIGNyZWF0ZSAgICAgICAgPSAkY3JlYXRlIHx8IGFzYztcbiAgcmV0dXJuIGZ1bmN0aW9uKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KXtcbiAgICB2YXIgTyAgICAgID0gdG9PYmplY3QoJHRoaXMpXG4gICAgICAsIHNlbGYgICA9IElPYmplY3QoTylcbiAgICAgICwgZiAgICAgID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpXG4gICAgICAsIGxlbmd0aCA9IHRvTGVuZ3RoKHNlbGYubGVuZ3RoKVxuICAgICAgLCBpbmRleCAgPSAwXG4gICAgICAsIHJlc3VsdCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWRcbiAgICAgICwgdmFsLCByZXM7XG4gICAgZm9yKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKylpZihOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKXtcbiAgICAgIHZhbCA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzID0gZih2YWwsIGluZGV4LCBPKTtcbiAgICAgIGlmKFRZUEUpe1xuICAgICAgICBpZihJU19NQVApcmVzdWx0W2luZGV4XSA9IHJlczsgICAgICAgICAgICAvLyBtYXBcbiAgICAgICAgZWxzZSBpZihyZXMpc3dpdGNoKFRZUEUpe1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsOyAgICAgICAgICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgICAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYoSVNfRVZFUlkpcmV0dXJuIGZhbHNlOyAgICAgICAgICAvLyBldmVyeVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogcmVzdWx0O1xuICB9O1xufTsiLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGlzQXJyYXkgID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKVxuICAsIFNQRUNJRVMgID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcmlnaW5hbCl7XG4gIHZhciBDO1xuICBpZihpc0FycmF5KG9yaWdpbmFsKSl7XG4gICAgQyA9IG9yaWdpbmFsLmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKUMgPSB1bmRlZmluZWQ7XG4gICAgaWYoaXNPYmplY3QoQykpe1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZihDID09PSBudWxsKUMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG59OyIsIi8vIDkuNC4yLjMgQXJyYXlTcGVjaWVzQ3JlYXRlKG9yaWdpbmFsQXJyYXksIGxlbmd0aClcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3JpZ2luYWwsIGxlbmd0aCl7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59OyIsIi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJylcbiAgLCBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKVxuICAvLyBFUzMgd3JvbmcgaGVyZVxuICAsIEFSRyA9IGNvZihmdW5jdGlvbigpeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uKGl0LCBrZXkpe1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07IiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTsiLCIndXNlIHN0cmljdCc7XG52YXIgZFAgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mXG4gICwgY3JlYXRlICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJylcbiAgLCByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpXG4gICwgY3R4ICAgICAgICAgPSByZXF1aXJlKCcuL19jdHgnKVxuICAsIGFuSW5zdGFuY2UgID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKVxuICAsIGRlZmluZWQgICAgID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpXG4gICwgZm9yT2YgICAgICAgPSByZXF1aXJlKCcuL19mb3Itb2YnKVxuICAsICRpdGVyRGVmaW5lID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKVxuICAsIHN0ZXAgICAgICAgID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJylcbiAgLCBzZXRTcGVjaWVzICA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJylcbiAgLCBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJylcbiAgLCBmYXN0S2V5ICAgICA9IHJlcXVpcmUoJy4vX21ldGEnKS5mYXN0S2V5XG4gICwgU0laRSAgICAgICAgPSBERVNDUklQVE9SUyA/ICdfcycgOiAnc2l6ZSc7XG5cbnZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uKHRoYXQsIGtleSl7XG4gIC8vIGZhc3QgY2FzZVxuICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSksIGVudHJ5O1xuICBpZihpbmRleCAhPT0gJ0YnKXJldHVybiB0aGF0Ll9pW2luZGV4XTtcbiAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gIGZvcihlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pe1xuICAgIGlmKGVudHJ5LmsgPT0ga2V5KXJldHVybiBlbnRyeTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKXtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24odGhhdCwgaXRlcmFibGUpe1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX2kgPSBjcmVhdGUobnVsbCk7IC8vIGluZGV4XG4gICAgICB0aGF0Ll9mID0gdW5kZWZpbmVkOyAgICAvLyBmaXJzdCBlbnRyeVxuICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDsgICAgLy8gbGFzdCBlbnRyeVxuICAgICAgdGhhdFtTSVpFXSA9IDA7ICAgICAgICAgLy8gc2l6ZVxuICAgICAgaWYoaXRlcmFibGUgIT0gdW5kZWZpbmVkKWZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMS4zLjEgTWFwLnByb3RvdHlwZS5jbGVhcigpXG4gICAgICAvLyAyMy4yLjMuMiBTZXQucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpe1xuICAgICAgICBmb3IodmFyIHRoYXQgPSB0aGlzLCBkYXRhID0gdGhhdC5faSwgZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKXtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZihlbnRyeS5wKWVudHJ5LnAgPSBlbnRyeS5wLm4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaV07XG4gICAgICAgIH1cbiAgICAgICAgdGhhdC5fZiA9IHRoYXQuX2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoYXRbU0laRV0gPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy4zIE1hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjIuMy40IFNldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uKGtleSl7XG4gICAgICAgIHZhciB0aGF0ICA9IHRoaXNcbiAgICAgICAgICAsIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYoZW50cnkpe1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkublxuICAgICAgICAgICAgLCBwcmV2ID0gZW50cnkucDtcbiAgICAgICAgICBkZWxldGUgdGhhdC5faVtlbnRyeS5pXTtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZihwcmV2KXByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYobmV4dCluZXh0LnAgPSBwcmV2O1xuICAgICAgICAgIGlmKHRoYXQuX2YgPT0gZW50cnkpdGhhdC5fZiA9IG5leHQ7XG4gICAgICAgICAgaWYodGhhdC5fbCA9PSBlbnRyeSl0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiwgdGhhdCA9IHVuZGVmaW5lZCAqLyl7XG4gICAgICAgIGFuSW5zdGFuY2UodGhpcywgQywgJ2ZvckVhY2gnKTtcbiAgICAgICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpXG4gICAgICAgICAgLCBlbnRyeTtcbiAgICAgICAgd2hpbGUoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKXtcbiAgICAgICAgICBmKGVudHJ5LnYsIGVudHJ5LmssIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlKGVudHJ5ICYmIGVudHJ5LnIpZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpe1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmKERFU0NSSVBUT1JTKWRQKEMucHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKXtcbiAgICAgICAgcmV0dXJuIGRlZmluZWQodGhpc1tTSVpFXSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24odGhhdCwga2V5LCB2YWx1ZSl7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KVxuICAgICAgLCBwcmV2LCBpbmRleDtcbiAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICBpZihlbnRyeSl7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZighdGhhdC5fZil0aGF0Ll9mID0gZW50cnk7XG4gICAgICBpZihwcmV2KXByZXYubiA9IGVudHJ5O1xuICAgICAgdGhhdFtTSVpFXSsrO1xuICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICBpZihpbmRleCAhPT0gJ0YnKXRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uKEMsIE5BTUUsIElTX01BUCl7XG4gICAgLy8gYWRkIC5rZXlzLCAudmFsdWVzLCAuZW50cmllcywgW0BAaXRlcmF0b3JdXG4gICAgLy8gMjMuMS4zLjQsIDIzLjEuMy44LCAyMy4xLjMuMTEsIDIzLjEuMy4xMiwgMjMuMi4zLjUsIDIzLjIuMy44LCAyMy4yLjMuMTAsIDIzLjIuMy4xMVxuICAgICRpdGVyRGVmaW5lKEMsIE5BTUUsIGZ1bmN0aW9uKGl0ZXJhdGVkLCBraW5kKXtcbiAgICAgIHRoaXMuX3QgPSBpdGVyYXRlZDsgIC8vIHRhcmdldFxuICAgICAgdGhpcy5fayA9IGtpbmQ7ICAgICAgLy8ga2luZFxuICAgICAgdGhpcy5fbCA9IHVuZGVmaW5lZDsgLy8gcHJldmlvdXNcbiAgICB9LCBmdW5jdGlvbigpe1xuICAgICAgdmFyIHRoYXQgID0gdGhpc1xuICAgICAgICAsIGtpbmQgID0gdGhhdC5fa1xuICAgICAgICAsIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUoZW50cnkgJiYgZW50cnkucillbnRyeSA9IGVudHJ5LnA7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSl7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHRoYXQuX3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBzdGVwKDEpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYoa2luZCA9PSAna2V5cycgIClyZXR1cm4gc3RlcCgwLCBlbnRyeS5rKTtcbiAgICAgIGlmKGtpbmQgPT0gJ3ZhbHVlcycpcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnICwgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBhZGQgW0BAc3BlY2llc10sIDIzLjEuMi4yLCAyMy4yLjIuMlxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG4gIH1cbn07IiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJylcbiAgLCBmcm9tICAgID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihOQU1FKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRvSlNPTigpe1xuICAgIGlmKGNsYXNzb2YodGhpcykgIT0gTkFNRSl0aHJvdyBUeXBlRXJyb3IoTkFNRSArIFwiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO1xuICAgIHJldHVybiBmcm9tKHRoaXMpO1xuICB9O1xufTsiLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsICAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsICRleHBvcnQgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBtZXRhICAgICAgICAgICA9IHJlcXVpcmUoJy4vX21ldGEnKVxuICAsIGZhaWxzICAgICAgICAgID0gcmVxdWlyZSgnLi9fZmFpbHMnKVxuICAsIGhpZGUgICAgICAgICAgID0gcmVxdWlyZSgnLi9faGlkZScpXG4gICwgcmVkZWZpbmVBbGwgICAgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKVxuICAsIGZvck9mICAgICAgICAgID0gcmVxdWlyZSgnLi9fZm9yLW9mJylcbiAgLCBhbkluc3RhbmNlICAgICA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJylcbiAgLCBpc09iamVjdCAgICAgICA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpXG4gICwgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpXG4gICwgZFAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mXG4gICwgZWFjaCAgICAgICAgICAgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMClcbiAgLCBERVNDUklQVE9SUyAgICA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oTkFNRSwgd3JhcHBlciwgbWV0aG9kcywgY29tbW9uLCBJU19NQVAsIElTX1dFQUspe1xuICB2YXIgQmFzZSAgPSBnbG9iYWxbTkFNRV1cbiAgICAsIEMgICAgID0gQmFzZVxuICAgICwgQURERVIgPSBJU19NQVAgPyAnc2V0JyA6ICdhZGQnXG4gICAgLCBwcm90byA9IEMgJiYgQy5wcm90b3R5cGVcbiAgICAsIE8gICAgID0ge307XG4gIGlmKCFERVNDUklQVE9SUyB8fCB0eXBlb2YgQyAhPSAnZnVuY3Rpb24nIHx8ICEoSVNfV0VBSyB8fCBwcm90by5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbigpe1xuICAgIG5ldyBDKCkuZW50cmllcygpLm5leHQoKTtcbiAgfSkpKXtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIEMgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICAgIG1ldGEuTkVFRCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24odGFyZ2V0LCBpdGVyYWJsZSl7XG4gICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSwgJ19jJyk7XG4gICAgICB0YXJnZXQuX2MgPSBuZXcgQmFzZTtcbiAgICAgIGlmKGl0ZXJhYmxlICE9IHVuZGVmaW5lZClmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0YXJnZXRbQURERVJdLCB0YXJnZXQpO1xuICAgIH0pO1xuICAgIGVhY2goJ2FkZCxjbGVhcixkZWxldGUsZm9yRWFjaCxnZXQsaGFzLHNldCxrZXlzLHZhbHVlcyxlbnRyaWVzLHRvSlNPTicuc3BsaXQoJywnKSxmdW5jdGlvbihLRVkpe1xuICAgICAgdmFyIElTX0FEREVSID0gS0VZID09ICdhZGQnIHx8IEtFWSA9PSAnc2V0JztcbiAgICAgIGlmKEtFWSBpbiBwcm90byAmJiAhKElTX1dFQUsgJiYgS0VZID09ICdjbGVhcicpKWhpZGUoQy5wcm90b3R5cGUsIEtFWSwgZnVuY3Rpb24oYSwgYil7XG4gICAgICAgIGFuSW5zdGFuY2UodGhpcywgQywgS0VZKTtcbiAgICAgICAgaWYoIUlTX0FEREVSICYmIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpKXJldHVybiBLRVkgPT0gJ2dldCcgPyB1bmRlZmluZWQgOiBmYWxzZTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2NbS0VZXShhID09PSAwID8gMCA6IGEsIGIpO1xuICAgICAgICByZXR1cm4gSVNfQURERVIgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYoJ3NpemUnIGluIHByb3RvKWRQKEMucHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Muc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuXG4gIE9bTkFNRV0gPSBDO1xuICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiwgTyk7XG5cbiAgaWYoIUlTX1dFQUspY29tbW9uLnNldFN0cm9uZyhDLCBOQU1FLCBJU19NQVApO1xuXG4gIHJldHVybiBDO1xufTsiLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0ge3ZlcnNpb246ICcyLjQuMCd9O1xuaWYodHlwZW9mIF9fZSA9PSAnbnVtYmVyJylfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpXG4gICwgY3JlYXRlRGVzYyAgICAgID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iamVjdCwgaW5kZXgsIHZhbHVlKXtcbiAgaWYoaW5kZXggaW4gb2JqZWN0KSRkZWZpbmVQcm9wZXJ0eS5mKG9iamVjdCwgaW5kZXgsIGNyZWF0ZURlc2MoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbaW5kZXhdID0gdmFsdWU7XG59OyIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZm4sIHRoYXQsIGxlbmd0aCl7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmKHRoYXQgPT09IHVuZGVmaW5lZClyZXR1cm4gZm47XG4gIHN3aXRjaChsZW5ndGgpe1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKGEpe1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbihhLCBiKXtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24oYSwgYiwgYyl7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbigvKiAuLi5hcmdzICovKXtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07IiwiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICBpZihpdCA9PSB1bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59OyIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7Z2V0OiBmdW5jdGlvbigpeyByZXR1cm4gNzsgfX0pLmEgIT0gNztcbn0pOyIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpXG4gICwgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudFxuICAvLyBpbiBvbGQgSUUgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCdcbiAgLCBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTsiLCIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTsiLCIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpXG4gICwgZ09QUyAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJylcbiAgLCBwSUUgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHZhciByZXN1bHQgICAgID0gZ2V0S2V5cyhpdClcbiAgICAsIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmKGdldFN5bWJvbHMpe1xuICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdClcbiAgICAgICwgaXNFbnVtICA9IHBJRS5mXG4gICAgICAsIGkgICAgICAgPSAwXG4gICAgICAsIGtleTtcbiAgICB3aGlsZShzeW1ib2xzLmxlbmd0aCA+IGkpaWYoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTsiLCJ2YXIgZ2xvYmFsICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBjb3JlICAgICAgPSByZXF1aXJlKCcuL19jb3JlJylcbiAgLCBjdHggICAgICAgPSByZXF1aXJlKCcuL19jdHgnKVxuICAsIGhpZGUgICAgICA9IHJlcXVpcmUoJy4vX2hpZGUnKVxuICAsIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uKHR5cGUsIG5hbWUsIHNvdXJjZSl7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GXG4gICAgLCBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HXG4gICAgLCBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TXG4gICAgLCBJU19QUk9UTyAgPSB0eXBlICYgJGV4cG9ydC5QXG4gICAgLCBJU19CSU5EICAgPSB0eXBlICYgJGV4cG9ydC5CXG4gICAgLCBJU19XUkFQICAgPSB0eXBlICYgJGV4cG9ydC5XXG4gICAgLCBleHBvcnRzICAgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KVxuICAgICwgZXhwUHJvdG8gID0gZXhwb3J0c1tQUk9UT1RZUEVdXG4gICAgLCB0YXJnZXQgICAgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdXG4gICAgLCBrZXksIG93biwgb3V0O1xuICBpZihJU19HTE9CQUwpc291cmNlID0gbmFtZTtcbiAgZm9yKGtleSBpbiBzb3VyY2Upe1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgaWYob3duICYmIGtleSBpbiBleHBvcnRzKWNvbnRpbnVlO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gb3duID8gdGFyZ2V0W2tleV0gOiBzb3VyY2Vba2V5XTtcbiAgICAvLyBwcmV2ZW50IGdsb2JhbCBwb2xsdXRpb24gZm9yIG5hbWVzcGFjZXNcbiAgICBleHBvcnRzW2tleV0gPSBJU19HTE9CQUwgJiYgdHlwZW9mIHRhcmdldFtrZXldICE9ICdmdW5jdGlvbicgPyBzb3VyY2Vba2V5XVxuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgOiBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbClcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlIHRoZW0gaW4gbGlicmFyeVxuICAgIDogSVNfV1JBUCAmJiB0YXJnZXRba2V5XSA9PSBvdXQgPyAoZnVuY3Rpb24oQyl7XG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uKGEsIGIsIGMpe1xuICAgICAgICBpZih0aGlzIGluc3RhbmNlb2YgQyl7XG4gICAgICAgICAgc3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe1xuICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEM7XG4gICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgQyhhKTtcbiAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDKGEsIGIpO1xuICAgICAgICAgIH0gcmV0dXJuIG5ldyBDKGEsIGIsIGMpO1xuICAgICAgICB9IHJldHVybiBDLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgICAgRltQUk9UT1RZUEVdID0gQ1tQUk9UT1RZUEVdO1xuICAgICAgcmV0dXJuIEY7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgfSkob3V0KSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5tZXRob2RzLiVOQU1FJVxuICAgIGlmKElTX1BST1RPKXtcbiAgICAgIChleHBvcnRzLnZpcnR1YWwgfHwgKGV4cG9ydHMudmlydHVhbCA9IHt9KSlba2V5XSA9IG91dDtcbiAgICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5wcm90b3R5cGUuJU5BTUUlXG4gICAgICBpZih0eXBlICYgJGV4cG9ydC5SICYmIGV4cFByb3RvICYmICFleHBQcm90b1trZXldKWhpZGUoZXhwUHJvdG8sIGtleSwgb3V0KTtcbiAgICB9XG4gIH1cbn07XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgIFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZXhlYyl7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoKGUpe1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59OyIsInZhciBjdHggICAgICAgICA9IHJlcXVpcmUoJy4vX2N0eCcpXG4gICwgY2FsbCAgICAgICAgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKVxuICAsIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpXG4gICwgYW5PYmplY3QgICAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIHRvTGVuZ3RoICAgID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJylcbiAgLCBnZXRJdGVyRm4gICA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJylcbiAgLCBCUkVBSyAgICAgICA9IHt9XG4gICwgUkVUVVJOICAgICAgPSB7fTtcbnZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKXtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24oKXsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKVxuICAgICwgZiAgICAgID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpXG4gICAgLCBpbmRleCAgPSAwXG4gICAgLCBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJyl0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgLy8gZmFzdCBjYXNlIGZvciBhcnJheXMgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yXG4gIGlmKGlzQXJyYXlJdGVyKGl0ZXJGbikpZm9yKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKXtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTilyZXR1cm4gcmVzdWx0O1xuICB9IGVsc2UgZm9yKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7ICl7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTilyZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuZXhwb3J0cy5CUkVBSyAgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOOyIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGYgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYodHlwZW9mIF9fZyA9PSAnbnVtYmVyJylfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWYiLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQsIGtleSl7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTsiLCJ2YXIgZFAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpXG4gICwgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uKG9iamVjdCwga2V5LCB2YWx1ZSl7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24ob2JqZWN0LCBrZXksIHZhbHVlKXtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7IiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbigpe1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywge2dldDogZnVuY3Rpb24oKXsgcmV0dXJuIDc7IH19KS5hICE9IDc7XG59KTsiLCIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZm4sIGFyZ3MsIHRoYXQpe1xuICB2YXIgdW4gPSB0aGF0ID09PSB1bmRlZmluZWQ7XG4gIHN3aXRjaChhcmdzLmxlbmd0aCl7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07IiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07IiwiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyAgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKVxuICAsIElURVJBVE9SICAgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKVxuICAsIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTsiLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKXtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTsiLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcyl7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaChlKXtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmKHJldCAhPT0gdW5kZWZpbmVkKWFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTsiLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJylcbiAgLCBkZXNjcmlwdG9yICAgICA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKVxuICAsIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKVxuICAsIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbigpeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpe1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHtuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTsiLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSAgICAgICAgPSByZXF1aXJlKCcuL19saWJyYXJ5JylcbiAgLCAkZXhwb3J0ICAgICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgcmVkZWZpbmUgICAgICAgPSByZXF1aXJlKCcuL19yZWRlZmluZScpXG4gICwgaGlkZSAgICAgICAgICAgPSByZXF1aXJlKCcuL19oaWRlJylcbiAgLCBoYXMgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgSXRlcmF0b3JzICAgICAgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKVxuICAsICRpdGVyQ3JlYXRlICAgID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKVxuICAsIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKVxuICAsIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpXG4gICwgSVRFUkFUT1IgICAgICAgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKVxuICAsIEJVR0dZICAgICAgICAgID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpIC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgLCBGRl9JVEVSQVRPUiAgICA9ICdAQGl0ZXJhdG9yJ1xuICAsIEtFWVMgICAgICAgICAgID0gJ2tleXMnXG4gICwgVkFMVUVTICAgICAgICAgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbigpeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpe1xuICAkaXRlckNyZWF0ZShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG4gIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbihraW5kKXtcbiAgICBpZighQlVHR1kgJiYga2luZCBpbiBwcm90bylyZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoKGtpbmQpe1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKXsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCl7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gIH07XG4gIHZhciBUQUcgICAgICAgID0gTkFNRSArICcgSXRlcmF0b3InXG4gICAgLCBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVNcbiAgICAsIFZBTFVFU19CVUcgPSBmYWxzZVxuICAgICwgcHJvdG8gICAgICA9IEJhc2UucHJvdG90eXBlXG4gICAgLCAkbmF0aXZlICAgID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdXG4gICAgLCAkZGVmYXVsdCAgID0gJG5hdGl2ZSB8fCBnZXRNZXRob2QoREVGQVVMVClcbiAgICAsICRlbnRyaWVzICAgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkXG4gICAgLCAkYW55TmF0aXZlID0gTkFNRSA9PSAnQXJyYXknID8gcHJvdG8uZW50cmllcyB8fCAkbmF0aXZlIDogJG5hdGl2ZVxuICAgICwgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZigkYW55TmF0aXZlKXtcbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSkpO1xuICAgIGlmKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKXtcbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgLy8gZml4IGZvciBzb21lIG9sZCBlbmdpbmVzXG4gICAgICBpZighTElCUkFSWSAmJiAhaGFzKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUikpaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUyl7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKXsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpe1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gID0gcmV0dXJuVGhpcztcbiAgaWYoREVGQVVMVCl7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogIERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogICAgSVNfU0VUICAgICA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogJGVudHJpZXNcbiAgICB9O1xuICAgIGlmKEZPUkNFRClmb3Ioa2V5IGluIG1ldGhvZHMpe1xuICAgICAgaWYoIShrZXkgaW4gcHJvdG8pKXJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07IiwidmFyIElURVJBVE9SICAgICA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpXG4gICwgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciByaXRlciA9IFs3XVtJVEVSQVRPUl0oKTtcbiAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24oKXsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24oKXsgdGhyb3cgMjsgfSk7XG59IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZXhlYywgc2tpcENsb3Npbmcpe1xuICBpZighc2tpcENsb3NpbmcgJiYgIVNBRkVfQ0xPU0lORylyZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciAgPSBbN11cbiAgICAgICwgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbigpeyByZXR1cm4ge2RvbmU6IHNhZmUgPSB0cnVlfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24oKXsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBzYWZlO1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGRvbmUsIHZhbHVlKXtcbiAgcmV0dXJuIHt2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZX07XG59OyIsIm1vZHVsZS5leHBvcnRzID0ge307IiwidmFyIGdldEtleXMgICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJylcbiAgLCB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iamVjdCwgZWwpe1xuICB2YXIgTyAgICAgID0gdG9JT2JqZWN0KG9iamVjdClcbiAgICAsIGtleXMgICA9IGdldEtleXMoTylcbiAgICAsIGxlbmd0aCA9IGtleXMubGVuZ3RoXG4gICAgLCBpbmRleCAgPSAwXG4gICAgLCBrZXk7XG4gIHdoaWxlKGxlbmd0aCA+IGluZGV4KWlmKE9ba2V5ID0ga2V5c1tpbmRleCsrXV0gPT09IGVsKXJldHVybiBrZXk7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gdHJ1ZTsiLCJ2YXIgTUVUQSAgICAgPSByZXF1aXJlKCcuL191aWQnKSgnbWV0YScpXG4gICwgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGhhcyAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCBzZXREZXNjICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmZcbiAgLCBpZCAgICAgICA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbigpe1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbihpdCl7XG4gIHNldERlc2MoaXQsIE1FVEEsIHt2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH19KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uKGl0LCBjcmVhdGUpe1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmKCFpc09iamVjdChpdCkpcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYoIWhhcyhpdCwgTUVUQSkpe1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYoIWlzRXh0ZW5zaWJsZShpdCkpcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmKCFjcmVhdGUpcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbihpdCwgY3JlYXRlKXtcbiAgaWYoIWhhcyhpdCwgTUVUQSkpe1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYoIWlzRXh0ZW5zaWJsZShpdCkpcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZighY3JlYXRlKXJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24oaXQpe1xuICBpZihGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6ICAgICAgTUVUQSxcbiAgTkVFRDogICAgIGZhbHNlLFxuICBmYXN0S2V5OiAgZmFzdEtleSxcbiAgZ2V0V2VhazogIGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTsiLCJ2YXIgZ2xvYmFsICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0XG4gICwgT2JzZXJ2ZXIgID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXJcbiAgLCBwcm9jZXNzICAgPSBnbG9iYWwucHJvY2Vzc1xuICAsIFByb21pc2UgICA9IGdsb2JhbC5Qcm9taXNlXG4gICwgaXNOb2RlICAgID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCl7XG4gIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24oKXtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZihpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSlwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlKGhlYWQpe1xuICAgICAgZm4gICA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIGlmKGhlYWQpbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYocGFyZW50KXBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYoaXNOb2RlKXtcbiAgICBub3RpZnkgPSBmdW5jdGlvbigpe1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyXG4gIH0gZWxzZSBpZihPYnNlcnZlcil7XG4gICAgdmFyIHRvZ2dsZSA9IHRydWVcbiAgICAgICwgbm9kZSAgID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7Y2hhcmFjdGVyRGF0YTogdHJ1ZX0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uKCl7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZihQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSl7XG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbigpe1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oZm4pe1xuICAgIHZhciB0YXNrID0ge2ZuOiBmbiwgbmV4dDogdW5kZWZpbmVkfTtcbiAgICBpZihsYXN0KWxhc3QubmV4dCA9IHRhc2s7XG4gICAgaWYoIWhlYWQpe1xuICAgICAgaGVhZCA9IHRhc2s7XG4gICAgICBub3RpZnkoKTtcbiAgICB9IGxhc3QgPSB0YXNrO1xuICB9O1xufTsiLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgZ2V0S2V5cyAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpXG4gICwgZ09QUyAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpXG4gICwgcElFICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJylcbiAgLCB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgSU9iamVjdCAgPSByZXF1aXJlKCcuL19pb2JqZWN0JylcbiAgLCAkYXNzaWduICA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHZhciBBID0ge31cbiAgICAsIEIgPSB7fVxuICAgICwgUyA9IFN5bWJvbCgpXG4gICAgLCBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24oayl7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSl7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgICAgID0gdG9PYmplY3QodGFyZ2V0KVxuICAgICwgYUxlbiAgPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBpbmRleCA9IDFcbiAgICAsIGdldFN5bWJvbHMgPSBnT1BTLmZcbiAgICAsIGlzRW51bSAgICAgPSBwSUUuZjtcbiAgd2hpbGUoYUxlbiA+IGluZGV4KXtcbiAgICB2YXIgUyAgICAgID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pXG4gICAgICAsIGtleXMgICA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUylcbiAgICAgICwgbGVuZ3RoID0ga2V5cy5sZW5ndGhcbiAgICAgICwgaiAgICAgID0gMFxuICAgICAgLCBrZXk7XG4gICAgd2hpbGUobGVuZ3RoID4gailpZihpc0VudW0uY2FsbChTLCBrZXkgPSBrZXlzW2orK10pKVRba2V5XSA9IFNba2V5XTtcbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduOyIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ICAgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCBkUHMgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKVxuICAsIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpXG4gICwgSUVfUFJPVE8gICAgPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJylcbiAgLCBFbXB0eSAgICAgICA9IGZ1bmN0aW9uKCl7IC8qIGVtcHR5ICovIH1cbiAgLCBQUk9UT1RZUEUgICA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uKCl7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2lmcmFtZScpXG4gICAgLCBpICAgICAgPSBlbnVtQnVnS2V5cy5sZW5ndGhcbiAgICAsIGx0ICAgICA9ICc8J1xuICAgICwgZ3QgICAgID0gJz4nXG4gICAgLCBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlcXVpcmUoJy4vX2h0bWwnKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zY3JpcHQtdXJsXG4gIC8vIGNyZWF0ZURpY3QgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGh0bWwucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZShpLS0pZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpe1xuICB2YXIgcmVzdWx0O1xuICBpZihPICE9PSBudWxsKXtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5O1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBhbk9iamVjdCAgICAgICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpXG4gICwgdG9QcmltaXRpdmUgICAgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKVxuICAsIGRQICAgICAgICAgICAgID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyl7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZihJRThfRE9NX0RFRklORSl0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuICBpZignZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKU9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07IiwidmFyIGRQICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJylcbiAgLCBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgZ2V0S2V5cyAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcyl7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyAgID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKVxuICAgICwgbGVuZ3RoID0ga2V5cy5sZW5ndGhcbiAgICAsIGkgPSAwXG4gICAgLCBQO1xuICB3aGlsZShsZW5ndGggPiBpKWRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTsiLCJ2YXIgcElFICAgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJylcbiAgLCBjcmVhdGVEZXNjICAgICA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKVxuICAsIHRvSU9iamVjdCAgICAgID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgdG9QcmltaXRpdmUgICAgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKVxuICAsIGhhcyAgICAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJylcbiAgLCBnT1BEICAgICAgICAgICA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApe1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmKElFOF9ET01fREVGSU5FKXRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cbiAgaWYoaGFzKE8sIFApKXJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07IiwiLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIGdPUE4gICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZlxuICAsIHRvU3RyaW5nICA9IHt9LnRvU3RyaW5nO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24oaXQpe1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaChlKXtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpe1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiIsIi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKVxuICAsIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTyl7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07IiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sczsiLCIvLyAxOS4xLjIuOSAvIDE1LjIuMy4yIE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIGhhcyAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCB0b09iamVjdCAgICA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgSUVfUFJPVE8gICAgPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJylcbiAgLCBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uKE8pe1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmKGhhcyhPLCBJRV9QUk9UTykpcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZih0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKXtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59OyIsInZhciBoYXMgICAgICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIHRvSU9iamVjdCAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpXG4gICwgSUVfUFJPVE8gICAgID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iamVjdCwgbmFtZXMpe1xuICB2YXIgTyAgICAgID0gdG9JT2JqZWN0KG9iamVjdClcbiAgICAsIGkgICAgICA9IDBcbiAgICAsIHJlc3VsdCA9IFtdXG4gICAgLCBrZXk7XG4gIGZvcihrZXkgaW4gTylpZihrZXkgIT0gSUVfUFJPVE8paGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZShuYW1lcy5sZW5ndGggPiBpKWlmKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSl7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTsiLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJylcbiAgLCBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pe1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTsiLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTsiLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBjb3JlICAgID0gcmVxdWlyZSgnLi9fY29yZScpXG4gICwgZmFpbHMgICA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKEtFWSwgZXhlYyl7XG4gIHZhciBmbiAgPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV1cbiAgICAsIGV4cCA9IHt9O1xuICBleHBbS0VZXSA9IGV4ZWMoZm4pO1xuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uKCl7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oYml0bWFwLCB2YWx1ZSl7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZSAgOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZSAgICA6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWUgICAgICAgOiB2YWx1ZVxuICB9O1xufTsiLCJ2YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odGFyZ2V0LCBzcmMsIHNhZmUpe1xuICBmb3IodmFyIGtleSBpbiBzcmMpe1xuICAgIGlmKHNhZmUgJiYgdGFyZ2V0W2tleV0pdGFyZ2V0W2tleV0gPSBzcmNba2V5XTtcbiAgICBlbHNlIGhpZGUodGFyZ2V0LCBrZXksIHNyY1trZXldKTtcbiAgfSByZXR1cm4gdGFyZ2V0O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2hpZGUnKTsiLCIvLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgY2hlY2sgPSBmdW5jdGlvbihPLCBwcm90byl7XG4gIGFuT2JqZWN0KE8pO1xuICBpZighaXNPYmplY3QocHJvdG8pICYmIHByb3RvICE9PSBudWxsKXRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uKHRlc3QsIGJ1Z2d5LCBzZXQpe1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0ID0gcmVxdWlyZSgnLi9fY3R4JykoRnVuY3Rpb24uY2FsbCwgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICBzZXQodGVzdCwgW10pO1xuICAgICAgICBidWdneSA9ICEodGVzdCBpbnN0YW5jZW9mIEFycmF5KTtcbiAgICAgIH0gY2F0Y2goZSl7IGJ1Z2d5ID0gdHJ1ZTsgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKXtcbiAgICAgICAgY2hlY2soTywgcHJvdG8pO1xuICAgICAgICBpZihidWdneSlPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG4gICAgICAgIHJldHVybiBPO1xuICAgICAgfTtcbiAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07IiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBjb3JlICAgICAgICA9IHJlcXVpcmUoJy4vX2NvcmUnKVxuICAsIGRQICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJylcbiAgLCBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJylcbiAgLCBTUEVDSUVTICAgICA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oS0VZKXtcbiAgdmFyIEMgPSB0eXBlb2YgY29yZVtLRVldID09ICdmdW5jdGlvbicgPyBjb3JlW0tFWV0gOiBnbG9iYWxbS0VZXTtcbiAgaWYoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSlkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07IiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmZcbiAgLCBoYXMgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCB0YWcsIHN0YXQpe1xuICBpZihpdCAmJiAhaGFzKGl0ID0gc3RhdCA/IGl0IDogaXQucHJvdG90eXBlLCBUQUcpKWRlZihpdCwgVEFHLCB7Y29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnfSk7XG59OyIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpXG4gICwgdWlkICAgID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59OyIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nXG4gICwgc3RvcmUgID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihrZXkpe1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHt9KTtcbn07IiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJylcbiAgLCBTUEVDSUVTICAgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihPLCBEKXtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvciwgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBEIDogYUZ1bmN0aW9uKFMpO1xufTsiLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpXG4gICwgZGVmaW5lZCAgID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuLy8gdHJ1ZSAgLT4gU3RyaW5nI2F0XG4vLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oVE9fU1RSSU5HKXtcbiAgcmV0dXJuIGZ1bmN0aW9uKHRoYXQsIHBvcyl7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSlcbiAgICAgICwgaSA9IHRvSW50ZWdlcihwb3MpXG4gICAgICAsIGwgPSBzLmxlbmd0aFxuICAgICAgLCBhLCBiO1xuICAgIGlmKGkgPCAwIHx8IGkgPj0gbClyZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgYSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZlxuICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcbiAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuICB9O1xufTsiLCJ2YXIgY3R4ICAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBpbnZva2UgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19pbnZva2UnKVxuICAsIGh0bWwgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2h0bWwnKVxuICAsIGNlbCAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKVxuICAsIGdsb2JhbCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgcHJvY2VzcyAgICAgICAgICAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCBzZXRUYXNrICAgICAgICAgICAgPSBnbG9iYWwuc2V0SW1tZWRpYXRlXG4gICwgY2xlYXJUYXNrICAgICAgICAgID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlXG4gICwgTWVzc2FnZUNoYW5uZWwgICAgID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsXG4gICwgY291bnRlciAgICAgICAgICAgID0gMFxuICAsIHF1ZXVlICAgICAgICAgICAgICA9IHt9XG4gICwgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSdcbiAgLCBkZWZlciwgY2hhbm5lbCwgcG9ydDtcbnZhciBydW4gPSBmdW5jdGlvbigpe1xuICB2YXIgaWQgPSArdGhpcztcbiAgaWYocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKXtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnQpe1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZighc2V0VGFzayB8fCAhY2xlYXJUYXNrKXtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbil7XG4gICAgdmFyIGFyZ3MgPSBbXSwgaSA9IDE7XG4gICAgd2hpbGUoYXJndW1lbnRzLmxlbmd0aCA+IGkpYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24oKXtcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCl7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJyl7XG4gICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYoTWVzc2FnZUNoYW5uZWwpe1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWw7XG4gICAgcG9ydCAgICA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGN0eChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZihnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpe1xuICAgIGRlZmVyID0gZnVuY3Rpb24oaWQpe1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKXtcbiAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcbiAgICAgIHNldFRpbWVvdXQoY3R4KHJ1biwgaWQsIDEpLCAwKTtcbiAgICB9O1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiAgIHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07IiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKVxuICAsIG1heCAgICAgICA9IE1hdGgubWF4XG4gICwgbWluICAgICAgID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGluZGV4LCBsZW5ndGgpe1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTsiLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsICA9IE1hdGguY2VpbFxuICAsIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07IiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKVxuICAsIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTsiLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJylcbiAgLCBtaW4gICAgICAgPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTsiLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07IiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgUyl7XG4gIGlmKCFpc09iamVjdChpdCkpcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSlyZXR1cm4gdmFsO1xuICBpZih0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIGlmKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07IiwidmFyIGlkID0gMFxuICAsIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oa2V5KXtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07IiwidmFyIGdsb2JhbCAgICAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBjb3JlICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2NvcmUnKVxuICAsIExJQlJBUlkgICAgICAgID0gcmVxdWlyZSgnLi9fbGlicmFyeScpXG4gICwgd2tzRXh0ICAgICAgICAgPSByZXF1aXJlKCcuL193a3MtZXh0JylcbiAgLCBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG5hbWUpe1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZihuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKWRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHt2YWx1ZTogd2tzRXh0LmYobmFtZSl9KTtcbn07IiwiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7IiwidmFyIHN0b3JlICAgICAgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJylcbiAgLCB1aWQgICAgICAgID0gcmVxdWlyZSgnLi9fdWlkJylcbiAgLCBTeW1ib2wgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sXG4gICwgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihuYW1lKXtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7IiwidmFyIGNsYXNzb2YgICA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKVxuICAsIElURVJBVE9SICA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpXG4gICwgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoaXQgIT0gdW5kZWZpbmVkKXJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCAkZXhwb3J0ICAgICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgdG9PYmplY3QgICAgICAgPSByZXF1aXJlKCcuL190by1vYmplY3QnKVxuICAsIGNhbGwgICAgICAgICAgID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJylcbiAgLCBpc0FycmF5SXRlciAgICA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKVxuICAsIHRvTGVuZ3RoICAgICAgID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJylcbiAgLCBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpXG4gICwgZ2V0SXRlckZuICAgICAgPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uKGl0ZXIpeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlLyosIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKi8pe1xuICAgIHZhciBPICAgICAgID0gdG9PYmplY3QoYXJyYXlMaWtlKVxuICAgICAgLCBDICAgICAgID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheVxuICAgICAgLCBhTGVuICAgID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgLCBtYXBmbiAgID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWRcbiAgICAgICwgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWRcbiAgICAgICwgaW5kZXggICA9IDBcbiAgICAgICwgaXRlckZuICA9IGdldEl0ZXJGbihPKVxuICAgICAgLCBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYobWFwcGluZyltYXBmbiA9IGN0eChtYXBmbiwgYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuICAgIGlmKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKXtcbiAgICAgIGZvcihpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQzsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKXtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICBmb3IocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4Kyspe1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKVxuICAsIHN0ZXAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKVxuICAsIEl0ZXJhdG9ycyAgICAgICAgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKVxuICAsIHRvSU9iamVjdCAgICAgICAgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24oaXRlcmF0ZWQsIGtpbmQpe1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uKCl7XG4gIHZhciBPICAgICA9IHRoaXMuX3RcbiAgICAsIGtpbmQgID0gdGhpcy5fa1xuICAgICwgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKXtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmKGtpbmQgPT0gJ2tleXMnICApcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZihraW5kID09ICd2YWx1ZXMnKXJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTsiLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7YXNzaWduOiByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyl9KTsiLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge2NyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpfSk7IiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0Jywge2RlZmluZVByb3BlcnR5OiByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mfSk7IiwiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCAgICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL190by1pb2JqZWN0JylcbiAgLCAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uKCl7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSl7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pOyIsIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ICAgICAgICA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24oKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KXtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTsiLCIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgJGtleXMgICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2tleXMnLCBmdW5jdGlvbigpe1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCl7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTsiLCIvLyAxOS4xLjMuMTkgT2JqZWN0LnNldFByb3RvdHlwZU9mKE8sIHByb3RvKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge3NldFByb3RvdHlwZU9mOiByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXR9KTsiLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fbGlicmFyeScpXG4gICwgZ2xvYmFsICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBjdHggICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19jdHgnKVxuICAsIGNsYXNzb2YgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKVxuICAsICRleHBvcnQgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgaXNPYmplY3QgICAgICAgICAgID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBhRnVuY3Rpb24gICAgICAgICAgPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJylcbiAgLCBhbkluc3RhbmNlICAgICAgICAgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpXG4gICwgZm9yT2YgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fZm9yLW9mJylcbiAgLCBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJylcbiAgLCB0YXNrICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL190YXNrJykuc2V0XG4gICwgbWljcm90YXNrICAgICAgICAgID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKVxuICAsIFBST01JU0UgICAgICAgICAgICA9ICdQcm9taXNlJ1xuICAsIFR5cGVFcnJvciAgICAgICAgICA9IGdsb2JhbC5UeXBlRXJyb3JcbiAgLCBwcm9jZXNzICAgICAgICAgICAgPSBnbG9iYWwucHJvY2Vzc1xuICAsICRQcm9taXNlICAgICAgICAgICA9IGdsb2JhbFtQUk9NSVNFXVxuICAsIHByb2Nlc3MgICAgICAgICAgICA9IGdsb2JhbC5wcm9jZXNzXG4gICwgaXNOb2RlICAgICAgICAgICAgID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2VzcydcbiAgLCBlbXB0eSAgICAgICAgICAgICAgPSBmdW5jdGlvbigpeyAvKiBlbXB0eSAqLyB9XG4gICwgSW50ZXJuYWwsIEdlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcblxudmFyIFVTRV9OQVRJVkUgPSAhIWZ1bmN0aW9uKCl7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgICAgID0gJFByb21pc2UucmVzb2x2ZSgxKVxuICAgICAgLCBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24oZXhlYyl7IGV4ZWMoZW1wdHksIGVtcHR5KTsgfTtcbiAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKSAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2U7XG4gIH0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIHNhbWVDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uKGEsIGIpe1xuICAvLyB3aXRoIGxpYnJhcnkgd3JhcHBlciBzcGVjaWFsIGNhc2VcbiAgcmV0dXJuIGEgPT09IGIgfHwgYSA9PT0gJFByb21pc2UgJiYgYiA9PT0gV3JhcHBlcjtcbn07XG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uKGl0KXtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbihDKXtcbiAgcmV0dXJuIHNhbWVDb25zdHJ1Y3RvcigkUHJvbWlzZSwgQylcbiAgICA/IG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgIDogbmV3IEdlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG52YXIgUHJvbWlzZUNhcGFiaWxpdHkgPSBHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbihDKXtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24oJCRyZXNvbHZlLCAkJHJlamVjdCl7XG4gICAgaWYocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKXRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCAgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59O1xudmFyIHBlcmZvcm0gPSBmdW5jdGlvbihleGVjKXtcbiAgdHJ5IHtcbiAgICBleGVjKCk7XG4gIH0gY2F0Y2goZSl7XG4gICAgcmV0dXJuIHtlcnJvcjogZX07XG4gIH1cbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24ocHJvbWlzZSwgaXNSZWplY3Qpe1xuICBpZihwcm9taXNlLl9uKXJldHVybjtcbiAgcHJvbWlzZS5fbiA9IHRydWU7XG4gIHZhciBjaGFpbiA9IHByb21pc2UuX2M7XG4gIG1pY3JvdGFzayhmdW5jdGlvbigpe1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3ZcbiAgICAgICwgb2sgICAgPSBwcm9taXNlLl9zID09IDFcbiAgICAgICwgaSAgICAgPSAwO1xuICAgIHZhciBydW4gPSBmdW5jdGlvbihyZWFjdGlvbil7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsXG4gICAgICAgICwgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmVcbiAgICAgICAgLCByZWplY3QgID0gcmVhY3Rpb24ucmVqZWN0XG4gICAgICAgICwgZG9tYWluICA9IHJlYWN0aW9uLmRvbWFpblxuICAgICAgICAsIHJlc3VsdCwgdGhlbjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmKGhhbmRsZXIpe1xuICAgICAgICAgIGlmKCFvayl7XG4gICAgICAgICAgICBpZihwcm9taXNlLl9oID09IDIpb25IYW5kbGVVbmhhbmRsZWQocHJvbWlzZSk7XG4gICAgICAgICAgICBwcm9taXNlLl9oID0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoaGFuZGxlciA9PT0gdHJ1ZSlyZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmKGRvbWFpbilkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpO1xuICAgICAgICAgICAgaWYoZG9tYWluKWRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSl7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZih0aGVuID0gaXNUaGVuYWJsZShyZXN1bHQpKXtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoKGUpe1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZShjaGFpbi5sZW5ndGggPiBpKXJ1bihjaGFpbltpKytdKTsgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICBwcm9taXNlLl9jID0gW107XG4gICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgIGlmKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKW9uVW5oYW5kbGVkKHByb21pc2UpO1xuICB9KTtcbn07XG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbihwcm9taXNlKXtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24oKXtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92XG4gICAgICAsIGFicnVwdCwgaGFuZGxlciwgY29uc29sZTtcbiAgICBpZihpc1VuaGFuZGxlZChwcm9taXNlKSl7XG4gICAgICBhYnJ1cHQgPSBwZXJmb3JtKGZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKGlzTm9kZSl7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZihoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKXtcbiAgICAgICAgICBoYW5kbGVyKHtwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlfSk7XG4gICAgICAgIH0gZWxzZSBpZigoY29uc29sZSA9IGdsb2JhbC5jb25zb2xlKSAmJiBjb25zb2xlLmVycm9yKXtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICB9IHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgaWYoYWJydXB0KXRocm93IGFicnVwdC5lcnJvcjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24ocHJvbWlzZSl7XG4gIGlmKHByb21pc2UuX2ggPT0gMSlyZXR1cm4gZmFsc2U7XG4gIHZhciBjaGFpbiA9IHByb21pc2UuX2EgfHwgcHJvbWlzZS5fY1xuICAgICwgaSAgICAgPSAwXG4gICAgLCByZWFjdGlvbjtcbiAgd2hpbGUoY2hhaW4ubGVuZ3RoID4gaSl7XG4gICAgcmVhY3Rpb24gPSBjaGFpbltpKytdO1xuICAgIGlmKHJlYWN0aW9uLmZhaWwgfHwgIWlzVW5oYW5kbGVkKHJlYWN0aW9uLnByb21pc2UpKXJldHVybiBmYWxzZTtcbiAgfSByZXR1cm4gdHJ1ZTtcbn07XG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbihwcm9taXNlKXtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24oKXtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZihpc05vZGUpe1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGlmKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKXtcbiAgICAgIGhhbmRsZXIoe3Byb21pc2U6IHByb21pc2UsIHJlYXNvbjogcHJvbWlzZS5fdn0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbih2YWx1ZSl7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgaWYocHJvbWlzZS5fZClyZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICBwcm9taXNlLl9zID0gMjtcbiAgaWYoIXByb21pc2UuX2EpcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uKHZhbHVlKXtcbiAgdmFyIHByb21pc2UgPSB0aGlzXG4gICAgLCB0aGVuO1xuICBpZihwcm9taXNlLl9kKXJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICB0cnkge1xuICAgIGlmKHByb21pc2UgPT09IHZhbHVlKXRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIGlmKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSl7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7X3c6IHByb21pc2UsIF9kOiBmYWxzZX07IC8vIHdyYXBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGVuLmNhbGwodmFsdWUsIGN0eCgkcmVzb2x2ZSwgd3JhcHBlciwgMSksIGN0eCgkcmVqZWN0LCB3cmFwcGVyLCAxKSk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaChlKXtcbiAgICAkcmVqZWN0LmNhbGwoe193OiBwcm9taXNlLCBfZDogZmFsc2V9LCBlKTsgLy8gd3JhcFxuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYoIVVTRV9OQVRJVkUpe1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3Ipe1xuICAgIGFuSW5zdGFuY2UodGhpcywgJFByb21pc2UsIFBST01JU0UsICdfaCcpO1xuICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoY3R4KCRyZXNvbHZlLCB0aGlzLCAxKSwgY3R4KCRyZWplY3QsIHRoaXMsIDEpKTtcbiAgICB9IGNhdGNoKGVycil7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcil7XG4gICAgdGhpcy5fYyA9IFtdOyAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnNcbiAgICB0aGlzLl9hID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25zXG4gICAgdGhpcy5fcyA9IDA7ICAgICAgICAgICAgICAvLyA8LSBzdGF0ZVxuICAgIHRoaXMuX2QgPSBmYWxzZTsgICAgICAgICAgLy8gPC0gZG9uZVxuICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gdmFsdWVcbiAgICB0aGlzLl9oID0gMDsgICAgICAgICAgICAgIC8vIDwtIHJlamVjdGlvbiBzdGF0ZSwgMCAtIGRlZmF1bHQsIDEgLSBoYW5kbGVkLCAyIC0gdW5oYW5kbGVkXG4gICAgdGhpcy5fbiA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBub3RpZnlcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJykoJFByb21pc2UucHJvdG90eXBlLCB7XG4gICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKXtcbiAgICAgIHZhciByZWFjdGlvbiAgICA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgICAgID0gdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsICAgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZih0aGlzLl9hKXRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICBpZih0aGlzLl9zKW5vdGlmeSh0aGlzLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIDI1LjQuNS4xIFByb21pc2UucHJvdG90eXBlLmNhdGNoKG9uUmVqZWN0ZWQpXG4gICAgJ2NhdGNoJzogZnVuY3Rpb24ob25SZWplY3RlZCl7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbigpe1xuICAgIHZhciBwcm9taXNlICA9IG5ldyBJbnRlcm5hbDtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgID0gY3R4KCRyZWplY3QsIHByb21pc2UsIDEpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7UHJvbWlzZTogJFByb21pc2V9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocil7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKVxuICAgICAgLCAkJHJlamVjdCAgID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KXtcbiAgICAvLyBpbnN0YW5jZW9mIGluc3RlYWQgb2YgaW50ZXJuYWwgc2xvdCBjaGVjayBiZWNhdXNlIHdlIHNob3VsZCBmaXggaXQgd2l0aG91dCByZXBsYWNlbWVudCBuYXRpdmUgUHJvbWlzZSBjb3JlXG4gICAgaWYoeCBpbnN0YW5jZW9mICRQcm9taXNlICYmIHNhbWVDb25zdHJ1Y3Rvcih4LmNvbnN0cnVjdG9yLCB0aGlzKSlyZXR1cm4geDtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpXG4gICAgICAsICQkcmVzb2x2ZSAgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgJCRyZXNvbHZlKHgpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbihpdGVyKXtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpe1xuICAgIHZhciBDICAgICAgICAgID0gdGhpc1xuICAgICAgLCBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgICwgcmVzb2x2ZSAgICA9IGNhcGFiaWxpdHkucmVzb2x2ZVxuICAgICAgLCByZWplY3QgICAgID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIGFicnVwdCA9IHBlcmZvcm0oZnVuY3Rpb24oKXtcbiAgICAgIHZhciB2YWx1ZXMgICAgPSBbXVxuICAgICAgICAsIGluZGV4ICAgICA9IDBcbiAgICAgICAgLCByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbihwcm9taXNlKXtcbiAgICAgICAgdmFyICRpbmRleCAgICAgICAgPSBpbmRleCsrXG4gICAgICAgICAgLCBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihmdW5jdGlvbih2YWx1ZSl7XG4gICAgICAgICAgaWYoYWxyZWFkeUNhbGxlZClyZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCAgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1skaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYoYWJydXB0KXJlamVjdChhYnJ1cHQuZXJyb3IpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH0sXG4gIC8vIDI1LjQuNC40IFByb21pc2UucmFjZShpdGVyYWJsZSlcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSl7XG4gICAgdmFyIEMgICAgICAgICAgPSB0aGlzXG4gICAgICAsIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgLCByZWplY3QgICAgID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIGFicnVwdCA9IHBlcmZvcm0oZnVuY3Rpb24oKXtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24ocHJvbWlzZSl7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmKGFicnVwdClyZWplY3QoYWJydXB0LmVycm9yKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTsiLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gMjMuMiBTZXQgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoJ1NldCcsIGZ1bmN0aW9uKGdldCl7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKXsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjIuMy4xIFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSl7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodGhpcywgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpOyIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24oaXRlcmF0ZWQpe1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbigpe1xuICB2YXIgTyAgICAgPSB0aGlzLl90XG4gICAgLCBpbmRleCA9IHRoaXMuX2lcbiAgICAsIHBvaW50O1xuICBpZihpbmRleCA+PSBPLmxlbmd0aClyZXR1cm4ge3ZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWV9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4ge3ZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2V9O1xufSk7IiwiJ3VzZSBzdHJpY3QnO1xuLy8gRUNNQVNjcmlwdCA2IHN5bWJvbHMgc2hpbVxudmFyIGdsb2JhbCAgICAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBoYXMgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgREVTQ1JJUFRPUlMgICAgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpXG4gICwgJGV4cG9ydCAgICAgICAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIHJlZGVmaW5lICAgICAgID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKVxuICAsIE1FVEEgICAgICAgICAgID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWVxuICAsICRmYWlscyAgICAgICAgID0gcmVxdWlyZSgnLi9fZmFpbHMnKVxuICAsIHNoYXJlZCAgICAgICAgID0gcmVxdWlyZSgnLi9fc2hhcmVkJylcbiAgLCBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJylcbiAgLCB1aWQgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX3VpZCcpXG4gICwgd2tzICAgICAgICAgICAgPSByZXF1aXJlKCcuL193a3MnKVxuICAsIHdrc0V4dCAgICAgICAgID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpXG4gICwgd2tzRGVmaW5lICAgICAgPSByZXF1aXJlKCcuL193a3MtZGVmaW5lJylcbiAgLCBrZXlPZiAgICAgICAgICA9IHJlcXVpcmUoJy4vX2tleW9mJylcbiAgLCBlbnVtS2V5cyAgICAgICA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpXG4gICwgaXNBcnJheSAgICAgICAgPSByZXF1aXJlKCcuL19pcy1hcnJheScpXG4gICwgYW5PYmplY3QgICAgICAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIHRvSU9iamVjdCAgICAgID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgdG9QcmltaXRpdmUgICAgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKVxuICAsIGNyZWF0ZURlc2MgICAgID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpXG4gICwgX2NyZWF0ZSAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJylcbiAgLCBnT1BORXh0ICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpXG4gICwgJEdPUEQgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpXG4gICwgJERQICAgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsICRrZXlzICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKVxuICAsIGdPUEQgICAgICAgICAgID0gJEdPUEQuZlxuICAsIGRQICAgICAgICAgICAgID0gJERQLmZcbiAgLCBnT1BOICAgICAgICAgICA9IGdPUE5FeHQuZlxuICAsICRTeW1ib2wgICAgICAgID0gZ2xvYmFsLlN5bWJvbFxuICAsICRKU09OICAgICAgICAgID0gZ2xvYmFsLkpTT05cbiAgLCBfc3RyaW5naWZ5ICAgICA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeVxuICAsIFBST1RPVFlQRSAgICAgID0gJ3Byb3RvdHlwZSdcbiAgLCBISURERU4gICAgICAgICA9IHdrcygnX2hpZGRlbicpXG4gICwgVE9fUFJJTUlUSVZFICAgPSB3a3MoJ3RvUHJpbWl0aXZlJylcbiAgLCBpc0VudW0gICAgICAgICA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlXG4gICwgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpXG4gICwgQWxsU3ltYm9scyAgICAgPSBzaGFyZWQoJ3N5bWJvbHMnKVxuICAsIE9QU3ltYm9scyAgICAgID0gc2hhcmVkKCdvcC1zeW1ib2xzJylcbiAgLCBPYmplY3RQcm90byAgICA9IE9iamVjdFtQUk9UT1RZUEVdXG4gICwgVVNFX05BVElWRSAgICAgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nXG4gICwgUU9iamVjdCAgICAgICAgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24oKXsgcmV0dXJuIGRQKHRoaXMsICdhJywge3ZhbHVlOiA3fSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbihpdCwga2V5LCBEKXtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmKHByb3RvRGVzYylkZWxldGUgT2JqZWN0UHJvdG9ba2V5XTtcbiAgZFAoaXQsIGtleSwgRCk7XG4gIGlmKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbih0YWcpe1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKXtcbiAgaWYoaXQgPT09IE9iamVjdFByb3RvKSRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmKGhhcyhBbGxTeW1ib2xzLCBrZXkpKXtcbiAgICBpZighRC5lbnVtZXJhYmxlKXtcbiAgICAgIGlmKCFoYXMoaXQsIEhJRERFTikpZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSlpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHtlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKX0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG4gIH0gcmV0dXJuIGRQKGl0LCBrZXksIEQpO1xufTtcbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoaXQsIFApe1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSlcbiAgICAsIGkgICAgPSAwXG4gICAgLCBsID0ga2V5cy5sZW5ndGhcbiAgICAsIGtleTtcbiAgd2hpbGUobCA+IGkpJGRlZmluZVByb3BlcnR5KGl0LCBrZXkgPSBrZXlzW2krK10sIFBba2V5XSk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpdCwgUCl7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KXtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYodGhpcyA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSl7XG4gIGl0ICA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSlyZXR1cm47XG4gIHZhciBEID0gZ09QRChpdCwga2V5KTtcbiAgaWYoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKUQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpe1xuICB2YXIgbmFtZXMgID0gZ09QTih0b0lPYmplY3QoaXQpKVxuICAgICwgcmVzdWx0ID0gW11cbiAgICAsIGkgICAgICA9IDBcbiAgICAsIGtleTtcbiAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSl7XG4gICAgaWYoIWhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiBrZXkgIT0gSElEREVOICYmIGtleSAhPSBNRVRBKXJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCl7XG4gIHZhciBJU19PUCAgPSBpdCA9PT0gT2JqZWN0UHJvdG9cbiAgICAsIG5hbWVzICA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKVxuICAgICwgcmVzdWx0ID0gW11cbiAgICAsIGkgICAgICA9IDBcbiAgICAsIGtleTtcbiAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSl7XG4gICAgaWYoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKXJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIDE5LjQuMS4xIFN5bWJvbChbZGVzY3JpcHRpb25dKVxuaWYoIVVTRV9OQVRJVkUpe1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCl7XG4gICAgaWYodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbih2YWx1ZSl7XG4gICAgICBpZih0aGlzID09PSBPYmplY3RQcm90bykkc2V0LmNhbGwoT1BTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZihoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKXRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYoREVTQ1JJUFRPUlMgJiYgc2V0dGVyKXNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywge2NvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0fSk7XG4gICAgcmV0dXJuIHdyYXAodGFnKTtcbiAgfTtcbiAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpe1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgICA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mICA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZihERVNDUklQVE9SUyAmJiAhcmVxdWlyZSgnLi9fbGlicmFyeScpKXtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24obmFtZSl7XG4gICAgcmV0dXJuIHdyYXAod2tzKG5hbWUpKTtcbiAgfVxufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7U3ltYm9sOiAkU3ltYm9sfSk7XG5cbmZvcih2YXIgc3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBpID0gMDsgc3ltYm9scy5sZW5ndGggPiBpOyApd2tzKHN5bWJvbHNbaSsrXSk7XG5cbmZvcih2YXIgc3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGkgPSAwOyBzeW1ib2xzLmxlbmd0aCA+IGk7ICl3a3NEZWZpbmUoc3ltYm9sc1tpKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbihrZXkpe1xuICAgIHJldHVybiBoYXMoU3ltYm9sUmVnaXN0cnksIGtleSArPSAnJylcbiAgICAgID8gU3ltYm9sUmVnaXN0cnlba2V5XVxuICAgICAgOiBTeW1ib2xSZWdpc3RyeVtrZXldID0gJFN5bWJvbChrZXkpO1xuICB9LFxuICAvLyAxOS40LjIuNSBTeW1ib2wua2V5Rm9yKHN5bSlcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioa2V5KXtcbiAgICBpZihpc1N5bWJvbChrZXkpKXJldHVybiBrZXlPZihTeW1ib2xSZWdpc3RyeSwga2V5KTtcbiAgICB0aHJvdyBUeXBlRXJyb3Ioa2V5ICsgJyBpcyBub3QgYSBzeW1ib2whJyk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24oKXsgc2V0dGVyID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbigpeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbigpe1xuICB2YXIgUyA9ICRTeW1ib2woKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gIHJldHVybiBfc3RyaW5naWZ5KFtTXSkgIT0gJ1tudWxsXScgfHwgX3N0cmluZ2lmeSh7YTogU30pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCl7XG4gICAgaWYoaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgdmFyIGFyZ3MgPSBbaXRdXG4gICAgICAsIGkgICAgPSAxXG4gICAgICAsIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUoYXJndW1lbnRzLmxlbmd0aCA+IGkpYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYodHlwZW9mIHJlcGxhY2VyID09ICdmdW5jdGlvbicpJHJlcGxhY2VyID0gcmVwbGFjZXI7XG4gICAgaWYoJHJlcGxhY2VyIHx8ICFpc0FycmF5KHJlcGxhY2VyKSlyZXBsYWNlciA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuICAgICAgaWYoJHJlcGxhY2VyKXZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZighaXNTeW1ib2wodmFsdWUpKXJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJncyk7XG4gIH1cbn0pO1xuXG4vLyAxOS40LjMuNCBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdKGhpbnQpXG4kU3ltYm9sW1BST1RPVFlQRV1bVE9fUFJJTUlUSVZFXSB8fCByZXF1aXJlKCcuL19oaWRlJykoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mKTtcbi8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsICdTeW1ib2wnKTtcbi8vIDIwLjIuMS45IE1hdGhbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4vLyAyNC4zLjMgSlNPTltAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7IiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnU2V0Jywge3RvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ1NldCcpfSk7IiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdhc3luY0l0ZXJhdG9yJyk7IiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7IiwicmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnbG9iYWwgICAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBoaWRlICAgICAgICAgID0gcmVxdWlyZSgnLi9faGlkZScpXG4gICwgSXRlcmF0b3JzICAgICA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpXG4gICwgVE9fU1RSSU5HX1RBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5mb3IodmFyIGNvbGxlY3Rpb25zID0gWydOb2RlTGlzdCcsICdET01Ub2tlbkxpc3QnLCAnTWVkaWFMaXN0JywgJ1N0eWxlU2hlZXRMaXN0JywgJ0NTU1J1bGVMaXN0J10sIGkgPSAwOyBpIDwgNTsgaSsrKXtcbiAgdmFyIE5BTUUgICAgICAgPSBjb2xsZWN0aW9uc1tpXVxuICAgICwgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXVxuICAgICwgcHJvdG8gICAgICA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmKHByb3RvICYmICFwcm90b1tUT19TVFJJTkdfVEFHXSloaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgSXRlcmF0b3JzW05BTUVdID0gSXRlcmF0b3JzLkFycmF5O1xufSIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBOT1RFOiBUaGVzZSB0eXBlIGNoZWNraW5nIGZ1bmN0aW9ucyBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBgaW5zdGFuY2VvZmBcbi8vIGJlY2F1c2UgaXQgaXMgZnJhZ2lsZSBhbmQgY2FuIGJlIGVhc2lseSBmYWtlZCB3aXRoIGBPYmplY3QuY3JlYXRlKClgLlxuXG5mdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICBpZiAoQXJyYXkuaXNBcnJheSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFyZyk7XG4gIH1cbiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nKGFyZykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5leHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5O1xuXG5mdW5jdGlvbiBpc0Jvb2xlYW4oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG59XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcblxuZnVuY3Rpb24gaXNOdWxsKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbE9yVW5kZWZpbmVkID0gaXNOdWxsT3JVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG59XG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzU3ltYm9sKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCc7XG59XG5leHBvcnRzLmlzU3ltYm9sID0gaXNTeW1ib2w7XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHJlKSB7XG4gIHJldHVybiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcblxuZnVuY3Rpb24gaXNFcnJvcihlKSB7XG4gIHJldHVybiAob2JqZWN0VG9TdHJpbmcoZSkgPT09ICdbb2JqZWN0IEVycm9yXScgfHwgZSBpbnN0YW5jZW9mIEVycm9yKTtcbn1cbmV4cG9ydHMuaXNFcnJvciA9IGlzRXJyb3I7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNQcmltaXRpdmUoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGwgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3ltYm9sJyB8fCAgLy8gRVM2IHN5bWJvbFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3VuZGVmaW5lZCc7XG59XG5leHBvcnRzLmlzUHJpbWl0aXZlID0gaXNQcmltaXRpdmU7XG5cbmV4cG9ydHMuaXNCdWZmZXIgPSBCdWZmZXIuaXNCdWZmZXI7XG5cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cbiIsInZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJ2VsbGlwdGljJyk7XG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZUVDREgoY3VydmUpIHtcblx0cmV0dXJuIG5ldyBFQ0RIKGN1cnZlKTtcbn07XG5cbnZhciBhbGlhc2VzID0ge1xuXHRzZWNwMjU2azE6IHtcblx0XHRuYW1lOiAnc2VjcDI1NmsxJyxcblx0XHRieXRlTGVuZ3RoOiAzMlxuXHR9LFxuXHRzZWNwMjI0cjE6IHtcblx0XHRuYW1lOiAncDIyNCcsXG5cdFx0Ynl0ZUxlbmd0aDogMjhcblx0fSxcblx0cHJpbWUyNTZ2MToge1xuXHRcdG5hbWU6ICdwMjU2Jyxcblx0XHRieXRlTGVuZ3RoOiAzMlxuXHR9LFxuXHRwcmltZTE5MnYxOiB7XG5cdFx0bmFtZTogJ3AxOTInLFxuXHRcdGJ5dGVMZW5ndGg6IDI0XG5cdH0sXG5cdGVkMjU1MTk6IHtcblx0XHRuYW1lOiAnZWQyNTUxOScsXG5cdFx0Ynl0ZUxlbmd0aDogMzJcblx0fSxcblx0c2VjcDM4NHIxOiB7XG5cdFx0bmFtZTogJ3AzODQnLFxuXHRcdGJ5dGVMZW5ndGg6IDQ4XG5cdH0sXG5cdHNlY3A1MjFyMToge1xuXHRcdG5hbWU6ICdwNTIxJyxcblx0XHRieXRlTGVuZ3RoOiA2NlxuXHR9XG59O1xuXG5hbGlhc2VzLnAyMjQgPSBhbGlhc2VzLnNlY3AyMjRyMTtcbmFsaWFzZXMucDI1NiA9IGFsaWFzZXMuc2VjcDI1NnIxID0gYWxpYXNlcy5wcmltZTI1NnYxO1xuYWxpYXNlcy5wMTkyID0gYWxpYXNlcy5zZWNwMTkycjEgPSBhbGlhc2VzLnByaW1lMTkydjE7XG5hbGlhc2VzLnAzODQgPSBhbGlhc2VzLnNlY3AzODRyMTtcbmFsaWFzZXMucDUyMSA9IGFsaWFzZXMuc2VjcDUyMXIxO1xuXG5mdW5jdGlvbiBFQ0RIKGN1cnZlKSB7XG5cdHRoaXMuY3VydmVUeXBlID0gYWxpYXNlc1tjdXJ2ZV07XG5cdGlmICghdGhpcy5jdXJ2ZVR5cGUgKSB7XG5cdFx0dGhpcy5jdXJ2ZVR5cGUgPSB7XG5cdFx0XHRuYW1lOiBjdXJ2ZVxuXHRcdH07XG5cdH1cblx0dGhpcy5jdXJ2ZSA9IG5ldyBlbGxpcHRpYy5lYyh0aGlzLmN1cnZlVHlwZS5uYW1lKTtcblx0dGhpcy5rZXlzID0gdm9pZCAwO1xufVxuXG5FQ0RILnByb3RvdHlwZS5nZW5lcmF0ZUtleXMgPSBmdW5jdGlvbiAoZW5jLCBmb3JtYXQpIHtcblx0dGhpcy5rZXlzID0gdGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCk7XG5cdHJldHVybiB0aGlzLmdldFB1YmxpY0tleShlbmMsIGZvcm1hdCk7XG59O1xuXG5FQ0RILnByb3RvdHlwZS5jb21wdXRlU2VjcmV0ID0gZnVuY3Rpb24gKG90aGVyLCBpbmVuYywgZW5jKSB7XG5cdGluZW5jID0gaW5lbmMgfHwgJ3V0ZjgnO1xuXHRpZiAoIUJ1ZmZlci5pc0J1ZmZlcihvdGhlcikpIHtcblx0XHRvdGhlciA9IG5ldyBCdWZmZXIob3RoZXIsIGluZW5jKTtcblx0fVxuXHR2YXIgb3RoZXJQdWIgPSB0aGlzLmN1cnZlLmtleUZyb21QdWJsaWMob3RoZXIpLmdldFB1YmxpYygpO1xuXHR2YXIgb3V0ID0gb3RoZXJQdWIubXVsKHRoaXMua2V5cy5nZXRQcml2YXRlKCkpLmdldFgoKTtcblx0cmV0dXJuIGZvcm1hdFJldHVyblZhbHVlKG91dCwgZW5jLCB0aGlzLmN1cnZlVHlwZS5ieXRlTGVuZ3RoKTtcbn07XG5cbkVDREgucHJvdG90eXBlLmdldFB1YmxpY0tleSA9IGZ1bmN0aW9uIChlbmMsIGZvcm1hdCkge1xuXHR2YXIga2V5ID0gdGhpcy5rZXlzLmdldFB1YmxpYyhmb3JtYXQgPT09ICdjb21wcmVzc2VkJywgdHJ1ZSk7XG5cdGlmIChmb3JtYXQgPT09ICdoeWJyaWQnKSB7XG5cdFx0aWYgKGtleVtrZXkubGVuZ3RoIC0gMV0gJSAyKSB7XG5cdFx0XHRrZXlbMF0gPSA3O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRrZXkgWzBdID0gNjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZvcm1hdFJldHVyblZhbHVlKGtleSwgZW5jKTtcbn07XG5cbkVDREgucHJvdG90eXBlLmdldFByaXZhdGVLZXkgPSBmdW5jdGlvbiAoZW5jKSB7XG5cdHJldHVybiBmb3JtYXRSZXR1cm5WYWx1ZSh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpLCBlbmMpO1xufTtcblxuRUNESC5wcm90b3R5cGUuc2V0UHVibGljS2V5ID0gZnVuY3Rpb24gKHB1YiwgZW5jKSB7XG5cdGVuYyA9IGVuYyB8fCAndXRmOCc7XG5cdGlmICghQnVmZmVyLmlzQnVmZmVyKHB1YikpIHtcblx0XHRwdWIgPSBuZXcgQnVmZmVyKHB1YiwgZW5jKTtcblx0fVxuXHR0aGlzLmtleXMuX2ltcG9ydFB1YmxpYyhwdWIpO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbkVDREgucHJvdG90eXBlLnNldFByaXZhdGVLZXkgPSBmdW5jdGlvbiAocHJpdiwgZW5jKSB7XG5cdGVuYyA9IGVuYyB8fCAndXRmOCc7XG5cdGlmICghQnVmZmVyLmlzQnVmZmVyKHByaXYpKSB7XG5cdFx0cHJpdiA9IG5ldyBCdWZmZXIocHJpdiwgZW5jKTtcblx0fVxuXHR2YXIgX3ByaXYgPSBuZXcgQk4ocHJpdik7XG5cdF9wcml2ID0gX3ByaXYudG9TdHJpbmcoMTYpO1xuXHR0aGlzLmtleXMuX2ltcG9ydFByaXZhdGUoX3ByaXYpO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIGZvcm1hdFJldHVyblZhbHVlKGJuLCBlbmMsIGxlbikge1xuXHRpZiAoIUFycmF5LmlzQXJyYXkoYm4pKSB7XG5cdFx0Ym4gPSBibi50b0FycmF5KCk7XG5cdH1cblx0dmFyIGJ1ZiA9IG5ldyBCdWZmZXIoYm4pO1xuXHRpZiAobGVuICYmIGJ1Zi5sZW5ndGggPCBsZW4pIHtcblx0XHR2YXIgemVyb3MgPSBuZXcgQnVmZmVyKGxlbiAtIGJ1Zi5sZW5ndGgpO1xuXHRcdHplcm9zLmZpbGwoMCk7XG5cdFx0YnVmID0gQnVmZmVyLmNvbmNhdChbemVyb3MsIGJ1Zl0pO1xuXHR9XG5cdGlmICghZW5jKSB7XG5cdFx0cmV0dXJuIGJ1Zjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYnVmLnRvU3RyaW5nKGVuYyk7XG5cdH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBtZDUgPSByZXF1aXJlKCcuL21kNScpXG52YXIgcm1kMTYwID0gcmVxdWlyZSgncmlwZW1kMTYwJylcbnZhciBzaGEgPSByZXF1aXJlKCdzaGEuanMnKVxuXG52YXIgQmFzZSA9IHJlcXVpcmUoJ2NpcGhlci1iYXNlJylcblxuZnVuY3Rpb24gSGFzaE5vQ29uc3RydWN0b3IoaGFzaCkge1xuICBCYXNlLmNhbGwodGhpcywgJ2RpZ2VzdCcpXG5cbiAgdGhpcy5faGFzaCA9IGhhc2hcbiAgdGhpcy5idWZmZXJzID0gW11cbn1cblxuaW5oZXJpdHMoSGFzaE5vQ29uc3RydWN0b3IsIEJhc2UpXG5cbkhhc2hOb0NvbnN0cnVjdG9yLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhpcy5idWZmZXJzLnB1c2goZGF0YSlcbn1cblxuSGFzaE5vQ29uc3RydWN0b3IucHJvdG90eXBlLl9maW5hbCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5jb25jYXQodGhpcy5idWZmZXJzKVxuICB2YXIgciA9IHRoaXMuX2hhc2goYnVmKVxuICB0aGlzLmJ1ZmZlcnMgPSBudWxsXG5cbiAgcmV0dXJuIHJcbn1cblxuZnVuY3Rpb24gSGFzaChoYXNoKSB7XG4gIEJhc2UuY2FsbCh0aGlzLCAnZGlnZXN0JylcblxuICB0aGlzLl9oYXNoID0gaGFzaFxufVxuXG5pbmhlcml0cyhIYXNoLCBCYXNlKVxuXG5IYXNoLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhpcy5faGFzaC51cGRhdGUoZGF0YSlcbn1cblxuSGFzaC5wcm90b3R5cGUuX2ZpbmFsID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5faGFzaC5kaWdlc3QoKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZUhhc2ggKGFsZykge1xuICBhbGcgPSBhbGcudG9Mb3dlckNhc2UoKVxuICBpZiAoJ21kNScgPT09IGFsZykgcmV0dXJuIG5ldyBIYXNoTm9Db25zdHJ1Y3RvcihtZDUpXG4gIGlmICgncm1kMTYwJyA9PT0gYWxnIHx8ICdyaXBlbWQxNjAnID09PSBhbGcpIHJldHVybiBuZXcgSGFzaE5vQ29uc3RydWN0b3Iocm1kMTYwKVxuXG4gIHJldHVybiBuZXcgSGFzaChzaGEoYWxnKSlcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpbnRTaXplID0gNDtcbnZhciB6ZXJvQnVmZmVyID0gbmV3IEJ1ZmZlcihpbnRTaXplKTsgemVyb0J1ZmZlci5maWxsKDApO1xudmFyIGNocnN6ID0gODtcblxuZnVuY3Rpb24gdG9BcnJheShidWYsIGJpZ0VuZGlhbikge1xuICBpZiAoKGJ1Zi5sZW5ndGggJSBpbnRTaXplKSAhPT0gMCkge1xuICAgIHZhciBsZW4gPSBidWYubGVuZ3RoICsgKGludFNpemUgLSAoYnVmLmxlbmd0aCAlIGludFNpemUpKTtcbiAgICBidWYgPSBCdWZmZXIuY29uY2F0KFtidWYsIHplcm9CdWZmZXJdLCBsZW4pO1xuICB9XG5cbiAgdmFyIGFyciA9IFtdO1xuICB2YXIgZm4gPSBiaWdFbmRpYW4gPyBidWYucmVhZEludDMyQkUgOiBidWYucmVhZEludDMyTEU7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSArPSBpbnRTaXplKSB7XG4gICAgYXJyLnB1c2goZm4uY2FsbChidWYsIGkpKTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG5mdW5jdGlvbiB0b0J1ZmZlcihhcnIsIHNpemUsIGJpZ0VuZGlhbikge1xuICB2YXIgYnVmID0gbmV3IEJ1ZmZlcihzaXplKTtcbiAgdmFyIGZuID0gYmlnRW5kaWFuID8gYnVmLndyaXRlSW50MzJCRSA6IGJ1Zi53cml0ZUludDMyTEU7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgZm4uY2FsbChidWYsIGFycltpXSwgaSAqIDQsIHRydWUpO1xuICB9XG4gIHJldHVybiBidWY7XG59XG5cbmZ1bmN0aW9uIGhhc2goYnVmLCBmbiwgaGFzaFNpemUsIGJpZ0VuZGlhbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSBidWYgPSBuZXcgQnVmZmVyKGJ1Zik7XG4gIHZhciBhcnIgPSBmbih0b0FycmF5KGJ1ZiwgYmlnRW5kaWFuKSwgYnVmLmxlbmd0aCAqIGNocnN6KTtcbiAgcmV0dXJuIHRvQnVmZmVyKGFyciwgaGFzaFNpemUsIGJpZ0VuZGlhbik7XG59XG5leHBvcnRzLmhhc2ggPSBoYXNoOyIsIid1c2Ugc3RyaWN0Jztcbi8qXG4gKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIE1ENSBNZXNzYWdlXG4gKiBEaWdlc3QgQWxnb3JpdGhtLCBhcyBkZWZpbmVkIGluIFJGQyAxMzIxLlxuICogVmVyc2lvbiAyLjEgQ29weXJpZ2h0IChDKSBQYXVsIEpvaG5zdG9uIDE5OTkgLSAyMDAyLlxuICogT3RoZXIgY29udHJpYnV0b3JzOiBHcmVnIEhvbHQsIEFuZHJldyBLZXBlcnQsIFlkbmFyLCBMb3N0aW5ldFxuICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBMaWNlbnNlXG4gKiBTZWUgaHR0cDovL3BhamhvbWUub3JnLnVrL2NyeXB0L21kNSBmb3IgbW9yZSBpbmZvLlxuICovXG5cbnZhciBoZWxwZXJzID0gcmVxdWlyZSgnLi9oZWxwZXJzJyk7XG5cbi8qXG4gKiBDYWxjdWxhdGUgdGhlIE1ENSBvZiBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzLCBhbmQgYSBiaXQgbGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIGNvcmVfbWQ1KHgsIGxlbilcbntcbiAgLyogYXBwZW5kIHBhZGRpbmcgKi9cbiAgeFtsZW4gPj4gNV0gfD0gMHg4MCA8PCAoKGxlbikgJSAzMik7XG4gIHhbKCgobGVuICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IGxlbjtcblxuICB2YXIgYSA9ICAxNzMyNTg0MTkzO1xuICB2YXIgYiA9IC0yNzE3MzM4Nzk7XG4gIHZhciBjID0gLTE3MzI1ODQxOTQ7XG4gIHZhciBkID0gIDI3MTczMzg3ODtcblxuICBmb3IodmFyIGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkgKz0gMTYpXG4gIHtcbiAgICB2YXIgb2xkYSA9IGE7XG4gICAgdmFyIG9sZGIgPSBiO1xuICAgIHZhciBvbGRjID0gYztcbiAgICB2YXIgb2xkZCA9IGQ7XG5cbiAgICBhID0gbWQ1X2ZmKGEsIGIsIGMsIGQsIHhbaSsgMF0sIDcgLCAtNjgwODc2OTM2KTtcbiAgICBkID0gbWQ1X2ZmKGQsIGEsIGIsIGMsIHhbaSsgMV0sIDEyLCAtMzg5NTY0NTg2KTtcbiAgICBjID0gbWQ1X2ZmKGMsIGQsIGEsIGIsIHhbaSsgMl0sIDE3LCAgNjA2MTA1ODE5KTtcbiAgICBiID0gbWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSsgM10sIDIyLCAtMTA0NDUyNTMzMCk7XG4gICAgYSA9IG1kNV9mZihhLCBiLCBjLCBkLCB4W2krIDRdLCA3ICwgLTE3NjQxODg5Nyk7XG4gICAgZCA9IG1kNV9mZihkLCBhLCBiLCBjLCB4W2krIDVdLCAxMiwgIDEyMDAwODA0MjYpO1xuICAgIGMgPSBtZDVfZmYoYywgZCwgYSwgYiwgeFtpKyA2XSwgMTcsIC0xNDczMjMxMzQxKTtcbiAgICBiID0gbWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSsgN10sIDIyLCAtNDU3MDU5ODMpO1xuICAgIGEgPSBtZDVfZmYoYSwgYiwgYywgZCwgeFtpKyA4XSwgNyAsICAxNzcwMDM1NDE2KTtcbiAgICBkID0gbWQ1X2ZmKGQsIGEsIGIsIGMsIHhbaSsgOV0sIDEyLCAtMTk1ODQxNDQxNyk7XG4gICAgYyA9IG1kNV9mZihjLCBkLCBhLCBiLCB4W2krMTBdLCAxNywgLTQyMDYzKTtcbiAgICBiID0gbWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSsxMV0sIDIyLCAtMTk5MDQwNDE2Mik7XG4gICAgYSA9IG1kNV9mZihhLCBiLCBjLCBkLCB4W2krMTJdLCA3ICwgIDE4MDQ2MDM2ODIpO1xuICAgIGQgPSBtZDVfZmYoZCwgYSwgYiwgYywgeFtpKzEzXSwgMTIsIC00MDM0MTEwMSk7XG4gICAgYyA9IG1kNV9mZihjLCBkLCBhLCBiLCB4W2krMTRdLCAxNywgLTE1MDIwMDIyOTApO1xuICAgIGIgPSBtZDVfZmYoYiwgYywgZCwgYSwgeFtpKzE1XSwgMjIsICAxMjM2NTM1MzI5KTtcblxuICAgIGEgPSBtZDVfZ2coYSwgYiwgYywgZCwgeFtpKyAxXSwgNSAsIC0xNjU3OTY1MTApO1xuICAgIGQgPSBtZDVfZ2coZCwgYSwgYiwgYywgeFtpKyA2XSwgOSAsIC0xMDY5NTAxNjMyKTtcbiAgICBjID0gbWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSsxMV0sIDE0LCAgNjQzNzE3NzEzKTtcbiAgICBiID0gbWQ1X2dnKGIsIGMsIGQsIGEsIHhbaSsgMF0sIDIwLCAtMzczODk3MzAyKTtcbiAgICBhID0gbWQ1X2dnKGEsIGIsIGMsIGQsIHhbaSsgNV0sIDUgLCAtNzAxNTU4NjkxKTtcbiAgICBkID0gbWQ1X2dnKGQsIGEsIGIsIGMsIHhbaSsxMF0sIDkgLCAgMzgwMTYwODMpO1xuICAgIGMgPSBtZDVfZ2coYywgZCwgYSwgYiwgeFtpKzE1XSwgMTQsIC02NjA0NzgzMzUpO1xuICAgIGIgPSBtZDVfZ2coYiwgYywgZCwgYSwgeFtpKyA0XSwgMjAsIC00MDU1Mzc4NDgpO1xuICAgIGEgPSBtZDVfZ2coYSwgYiwgYywgZCwgeFtpKyA5XSwgNSAsICA1Njg0NDY0MzgpO1xuICAgIGQgPSBtZDVfZ2coZCwgYSwgYiwgYywgeFtpKzE0XSwgOSAsIC0xMDE5ODAzNjkwKTtcbiAgICBjID0gbWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSsgM10sIDE0LCAtMTg3MzYzOTYxKTtcbiAgICBiID0gbWQ1X2dnKGIsIGMsIGQsIGEsIHhbaSsgOF0sIDIwLCAgMTE2MzUzMTUwMSk7XG4gICAgYSA9IG1kNV9nZyhhLCBiLCBjLCBkLCB4W2krMTNdLCA1ICwgLTE0NDQ2ODE0NjcpO1xuICAgIGQgPSBtZDVfZ2coZCwgYSwgYiwgYywgeFtpKyAyXSwgOSAsIC01MTQwMzc4NCk7XG4gICAgYyA9IG1kNV9nZyhjLCBkLCBhLCBiLCB4W2krIDddLCAxNCwgIDE3MzUzMjg0NzMpO1xuICAgIGIgPSBtZDVfZ2coYiwgYywgZCwgYSwgeFtpKzEyXSwgMjAsIC0xOTI2NjA3NzM0KTtcblxuICAgIGEgPSBtZDVfaGgoYSwgYiwgYywgZCwgeFtpKyA1XSwgNCAsIC0zNzg1NTgpO1xuICAgIGQgPSBtZDVfaGgoZCwgYSwgYiwgYywgeFtpKyA4XSwgMTEsIC0yMDIyNTc0NDYzKTtcbiAgICBjID0gbWQ1X2hoKGMsIGQsIGEsIGIsIHhbaSsxMV0sIDE2LCAgMTgzOTAzMDU2Mik7XG4gICAgYiA9IG1kNV9oaChiLCBjLCBkLCBhLCB4W2krMTRdLCAyMywgLTM1MzA5NTU2KTtcbiAgICBhID0gbWQ1X2hoKGEsIGIsIGMsIGQsIHhbaSsgMV0sIDQgLCAtMTUzMDk5MjA2MCk7XG4gICAgZCA9IG1kNV9oaChkLCBhLCBiLCBjLCB4W2krIDRdLCAxMSwgIDEyNzI4OTMzNTMpO1xuICAgIGMgPSBtZDVfaGgoYywgZCwgYSwgYiwgeFtpKyA3XSwgMTYsIC0xNTU0OTc2MzIpO1xuICAgIGIgPSBtZDVfaGgoYiwgYywgZCwgYSwgeFtpKzEwXSwgMjMsIC0xMDk0NzMwNjQwKTtcbiAgICBhID0gbWQ1X2hoKGEsIGIsIGMsIGQsIHhbaSsxM10sIDQgLCAgNjgxMjc5MTc0KTtcbiAgICBkID0gbWQ1X2hoKGQsIGEsIGIsIGMsIHhbaSsgMF0sIDExLCAtMzU4NTM3MjIyKTtcbiAgICBjID0gbWQ1X2hoKGMsIGQsIGEsIGIsIHhbaSsgM10sIDE2LCAtNzIyNTIxOTc5KTtcbiAgICBiID0gbWQ1X2hoKGIsIGMsIGQsIGEsIHhbaSsgNl0sIDIzLCAgNzYwMjkxODkpO1xuICAgIGEgPSBtZDVfaGgoYSwgYiwgYywgZCwgeFtpKyA5XSwgNCAsIC02NDAzNjQ0ODcpO1xuICAgIGQgPSBtZDVfaGgoZCwgYSwgYiwgYywgeFtpKzEyXSwgMTEsIC00MjE4MTU4MzUpO1xuICAgIGMgPSBtZDVfaGgoYywgZCwgYSwgYiwgeFtpKzE1XSwgMTYsICA1MzA3NDI1MjApO1xuICAgIGIgPSBtZDVfaGgoYiwgYywgZCwgYSwgeFtpKyAyXSwgMjMsIC05OTUzMzg2NTEpO1xuXG4gICAgYSA9IG1kNV9paShhLCBiLCBjLCBkLCB4W2krIDBdLCA2ICwgLTE5ODYzMDg0NCk7XG4gICAgZCA9IG1kNV9paShkLCBhLCBiLCBjLCB4W2krIDddLCAxMCwgIDExMjY4OTE0MTUpO1xuICAgIGMgPSBtZDVfaWkoYywgZCwgYSwgYiwgeFtpKzE0XSwgMTUsIC0xNDE2MzU0OTA1KTtcbiAgICBiID0gbWQ1X2lpKGIsIGMsIGQsIGEsIHhbaSsgNV0sIDIxLCAtNTc0MzQwNTUpO1xuICAgIGEgPSBtZDVfaWkoYSwgYiwgYywgZCwgeFtpKzEyXSwgNiAsICAxNzAwNDg1NTcxKTtcbiAgICBkID0gbWQ1X2lpKGQsIGEsIGIsIGMsIHhbaSsgM10sIDEwLCAtMTg5NDk4NjYwNik7XG4gICAgYyA9IG1kNV9paShjLCBkLCBhLCBiLCB4W2krMTBdLCAxNSwgLTEwNTE1MjMpO1xuICAgIGIgPSBtZDVfaWkoYiwgYywgZCwgYSwgeFtpKyAxXSwgMjEsIC0yMDU0OTIyNzk5KTtcbiAgICBhID0gbWQ1X2lpKGEsIGIsIGMsIGQsIHhbaSsgOF0sIDYgLCAgMTg3MzMxMzM1OSk7XG4gICAgZCA9IG1kNV9paShkLCBhLCBiLCBjLCB4W2krMTVdLCAxMCwgLTMwNjExNzQ0KTtcbiAgICBjID0gbWQ1X2lpKGMsIGQsIGEsIGIsIHhbaSsgNl0sIDE1LCAtMTU2MDE5ODM4MCk7XG4gICAgYiA9IG1kNV9paShiLCBjLCBkLCBhLCB4W2krMTNdLCAyMSwgIDEzMDkxNTE2NDkpO1xuICAgIGEgPSBtZDVfaWkoYSwgYiwgYywgZCwgeFtpKyA0XSwgNiAsIC0xNDU1MjMwNzApO1xuICAgIGQgPSBtZDVfaWkoZCwgYSwgYiwgYywgeFtpKzExXSwgMTAsIC0xMTIwMjEwMzc5KTtcbiAgICBjID0gbWQ1X2lpKGMsIGQsIGEsIGIsIHhbaSsgMl0sIDE1LCAgNzE4Nzg3MjU5KTtcbiAgICBiID0gbWQ1X2lpKGIsIGMsIGQsIGEsIHhbaSsgOV0sIDIxLCAtMzQzNDg1NTUxKTtcblxuICAgIGEgPSBzYWZlX2FkZChhLCBvbGRhKTtcbiAgICBiID0gc2FmZV9hZGQoYiwgb2xkYik7XG4gICAgYyA9IHNhZmVfYWRkKGMsIG9sZGMpO1xuICAgIGQgPSBzYWZlX2FkZChkLCBvbGRkKTtcbiAgfVxuICByZXR1cm4gQXJyYXkoYSwgYiwgYywgZCk7XG5cbn1cblxuLypcbiAqIFRoZXNlIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIGZvdXIgYmFzaWMgb3BlcmF0aW9ucyB0aGUgYWxnb3JpdGhtIHVzZXMuXG4gKi9cbmZ1bmN0aW9uIG1kNV9jbW4ocSwgYSwgYiwgeCwgcywgdClcbntcbiAgcmV0dXJuIHNhZmVfYWRkKGJpdF9yb2woc2FmZV9hZGQoc2FmZV9hZGQoYSwgcSksIHNhZmVfYWRkKHgsIHQpKSwgcyksYik7XG59XG5mdW5jdGlvbiBtZDVfZmYoYSwgYiwgYywgZCwgeCwgcywgdClcbntcbiAgcmV0dXJuIG1kNV9jbW4oKGIgJiBjKSB8ICgofmIpICYgZCksIGEsIGIsIHgsIHMsIHQpO1xufVxuZnVuY3Rpb24gbWQ1X2dnKGEsIGIsIGMsIGQsIHgsIHMsIHQpXG57XG4gIHJldHVybiBtZDVfY21uKChiICYgZCkgfCAoYyAmICh+ZCkpLCBhLCBiLCB4LCBzLCB0KTtcbn1cbmZ1bmN0aW9uIG1kNV9oaChhLCBiLCBjLCBkLCB4LCBzLCB0KVxue1xuICByZXR1cm4gbWQ1X2NtbihiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpO1xufVxuZnVuY3Rpb24gbWQ1X2lpKGEsIGIsIGMsIGQsIHgsIHMsIHQpXG57XG4gIHJldHVybiBtZDVfY21uKGMgXiAoYiB8ICh+ZCkpLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuLypcbiAqIEFkZCBpbnRlZ2Vycywgd3JhcHBpbmcgYXQgMl4zMi4gVGhpcyB1c2VzIDE2LWJpdCBvcGVyYXRpb25zIGludGVybmFsbHlcbiAqIHRvIHdvcmsgYXJvdW5kIGJ1Z3MgaW4gc29tZSBKUyBpbnRlcnByZXRlcnMuXG4gKi9cbmZ1bmN0aW9uIHNhZmVfYWRkKHgsIHkpXG57XG4gIHZhciBsc3cgPSAoeCAmIDB4RkZGRikgKyAoeSAmIDB4RkZGRik7XG4gIHZhciBtc3cgPSAoeCA+PiAxNikgKyAoeSA+PiAxNikgKyAobHN3ID4+IDE2KTtcbiAgcmV0dXJuIChtc3cgPDwgMTYpIHwgKGxzdyAmIDB4RkZGRik7XG59XG5cbi8qXG4gKiBCaXR3aXNlIHJvdGF0ZSBhIDMyLWJpdCBudW1iZXIgdG8gdGhlIGxlZnQuXG4gKi9cbmZ1bmN0aW9uIGJpdF9yb2wobnVtLCBjbnQpXG57XG4gIHJldHVybiAobnVtIDw8IGNudCkgfCAobnVtID4+PiAoMzIgLSBjbnQpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZDUoYnVmKSB7XG4gIHJldHVybiBoZWxwZXJzLmhhc2goYnVmLCBjb3JlX21kNSwgMTYpO1xufTsiLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlSGFzaCA9IHJlcXVpcmUoJ2NyZWF0ZS1oYXNoL2Jyb3dzZXInKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcblxudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ3N0cmVhbScpLlRyYW5zZm9ybVxuXG52YXIgWkVST1MgPSBuZXcgQnVmZmVyKDEyOClcblpFUk9TLmZpbGwoMClcblxuZnVuY3Rpb24gSG1hYyhhbGcsIGtleSkge1xuICBUcmFuc2Zvcm0uY2FsbCh0aGlzKVxuICBhbGcgPSBhbGcudG9Mb3dlckNhc2UoKVxuICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcbiAgICBrZXkgPSBuZXcgQnVmZmVyKGtleSlcbiAgfVxuXG4gIHZhciBibG9ja3NpemUgPSAoYWxnID09PSAnc2hhNTEyJyB8fCBhbGcgPT09ICdzaGEzODQnKSA/IDEyOCA6IDY0XG5cbiAgdGhpcy5fYWxnID0gYWxnXG4gIHRoaXMuX2tleSA9IGtleVxuXG4gIGlmIChrZXkubGVuZ3RoID4gYmxvY2tzaXplKSB7XG4gICAga2V5ID0gY3JlYXRlSGFzaChhbGcpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpXG5cbiAgfSBlbHNlIGlmIChrZXkubGVuZ3RoIDwgYmxvY2tzaXplKSB7XG4gICAga2V5ID0gQnVmZmVyLmNvbmNhdChba2V5LCBaRVJPU10sIGJsb2Nrc2l6ZSlcbiAgfVxuXG4gIHZhciBpcGFkID0gdGhpcy5faXBhZCA9IG5ldyBCdWZmZXIoYmxvY2tzaXplKVxuICB2YXIgb3BhZCA9IHRoaXMuX29wYWQgPSBuZXcgQnVmZmVyKGJsb2Nrc2l6ZSlcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2Nrc2l6ZTsgaSsrKSB7XG4gICAgaXBhZFtpXSA9IGtleVtpXSBeIDB4MzZcbiAgICBvcGFkW2ldID0ga2V5W2ldIF4gMHg1Q1xuICB9XG5cbiAgdGhpcy5faGFzaCA9IGNyZWF0ZUhhc2goYWxnKS51cGRhdGUoaXBhZClcbn1cblxuaW5oZXJpdHMoSG1hYywgVHJhbnNmb3JtKVxuXG5IbWFjLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jKSB7XG4gIHRoaXMuX2hhc2gudXBkYXRlKGRhdGEsIGVuYylcblxuICByZXR1cm4gdGhpc1xufVxuXG5IbWFjLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGRhdGEsIF8sIG5leHQpIHtcbiAgdGhpcy5faGFzaC51cGRhdGUoZGF0YSlcblxuICBuZXh0KClcbn1cblxuSG1hYy5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24gKG5leHQpIHtcbiAgdGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpXG5cbiAgbmV4dCgpXG59XG5cbkhtYWMucHJvdG90eXBlLmRpZ2VzdCA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgdmFyIGggPSB0aGlzLl9oYXNoLmRpZ2VzdCgpXG5cbiAgcmV0dXJuIGNyZWF0ZUhhc2godGhpcy5fYWxnKS51cGRhdGUodGhpcy5fb3BhZCkudXBkYXRlKGgpLmRpZ2VzdChlbmMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlSG1hYyhhbGcsIGtleSkge1xuICByZXR1cm4gbmV3IEhtYWMoYWxnLCBrZXkpXG59XG4iLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5yYW5kb21CeXRlcyA9IGV4cG9ydHMucm5nID0gZXhwb3J0cy5wc2V1ZG9SYW5kb21CeXRlcyA9IGV4cG9ydHMucHJuZyA9IHJlcXVpcmUoJ3JhbmRvbWJ5dGVzJylcbmV4cG9ydHMuY3JlYXRlSGFzaCA9IGV4cG9ydHMuSGFzaCA9IHJlcXVpcmUoJ2NyZWF0ZS1oYXNoJylcbmV4cG9ydHMuY3JlYXRlSG1hYyA9IGV4cG9ydHMuSG1hYyA9IHJlcXVpcmUoJ2NyZWF0ZS1obWFjJylcblxudmFyIGhhc2hlcyA9IFsnc2hhMScsICdzaGEyMjQnLCAnc2hhMjU2JywgJ3NoYTM4NCcsICdzaGE1MTInLCAnbWQ1JywgJ3JtZDE2MCddLmNvbmNhdChPYmplY3Qua2V5cyhyZXF1aXJlKCdicm93c2VyaWZ5LXNpZ24vYWxnb3MnKSkpXG5leHBvcnRzLmdldEhhc2hlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGhhc2hlc1xufVxuXG52YXIgcCA9IHJlcXVpcmUoJ3Bia2RmMicpXG5leHBvcnRzLnBia2RmMiA9IHAucGJrZGYyXG5leHBvcnRzLnBia2RmMlN5bmMgPSBwLnBia2RmMlN5bmNcblxudmFyIGFlcyA9IHJlcXVpcmUoJ2Jyb3dzZXJpZnktY2lwaGVyJylcbjtbXG4gICdDaXBoZXInLFxuICAnY3JlYXRlQ2lwaGVyJyxcbiAgJ0NpcGhlcml2JyxcbiAgJ2NyZWF0ZUNpcGhlcml2JyxcbiAgJ0RlY2lwaGVyJyxcbiAgJ2NyZWF0ZURlY2lwaGVyJyxcbiAgJ0RlY2lwaGVyaXYnLFxuICAnY3JlYXRlRGVjaXBoZXJpdicsXG4gICdnZXRDaXBoZXJzJyxcbiAgJ2xpc3RDaXBoZXJzJ1xuXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgZXhwb3J0c1trZXldID0gYWVzW2tleV1cbn0pXG5cbnZhciBkaCA9IHJlcXVpcmUoJ2RpZmZpZS1oZWxsbWFuJylcbjtbXG4gICdEaWZmaWVIZWxsbWFuR3JvdXAnLFxuICAnY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwJyxcbiAgJ2dldERpZmZpZUhlbGxtYW4nLFxuICAnY3JlYXRlRGlmZmllSGVsbG1hbicsXG4gICdEaWZmaWVIZWxsbWFuJ1xuXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgZXhwb3J0c1trZXldID0gZGhba2V5XVxufSlcblxudmFyIHNpZ24gPSByZXF1aXJlKCdicm93c2VyaWZ5LXNpZ24nKVxuO1tcbiAgJ2NyZWF0ZVNpZ24nLFxuICAnU2lnbicsXG4gICdjcmVhdGVWZXJpZnknLFxuICAnVmVyaWZ5J1xuXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgZXhwb3J0c1trZXldID0gc2lnbltrZXldXG59KVxuXG5leHBvcnRzLmNyZWF0ZUVDREggPSByZXF1aXJlKCdjcmVhdGUtZWNkaCcpXG5cbnZhciBwdWJsaWNFbmNyeXB0ID0gcmVxdWlyZSgncHVibGljLWVuY3J5cHQnKVxuXG47W1xuICAncHVibGljRW5jcnlwdCcsXG4gICdwcml2YXRlRW5jcnlwdCcsXG4gICdwdWJsaWNEZWNyeXB0JyxcbiAgJ3ByaXZhdGVEZWNyeXB0J1xuXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgZXhwb3J0c1trZXldID0gcHVibGljRW5jcnlwdFtrZXldXG59KVxuXG4vLyB0aGUgbGVhc3QgSSBjYW4gZG8gaXMgbWFrZSBlcnJvciBtZXNzYWdlcyBmb3IgdGhlIHJlc3Qgb2YgdGhlIG5vZGUuanMvY3J5cHRvIGFwaS5cbjtbXG4gICdjcmVhdGVDcmVkZW50aWFscydcbl0uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBleHBvcnRzW25hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihbXG4gICAgICAnc29ycnksICcgKyBuYW1lICsgJyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0JyxcbiAgICAgICd3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cycsXG4gICAgICAnaHR0cHM6Ly9naXRodWIuY29tL2NyeXB0by1icm93c2VyaWZ5L2NyeXB0by1icm93c2VyaWZ5J1xuICAgIF0uam9pbignXFxuJykpXG4gIH1cbn0pXG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMudXRpbHMgPSByZXF1aXJlKCcuL2Rlcy91dGlscycpO1xuZXhwb3J0cy5DaXBoZXIgPSByZXF1aXJlKCcuL2Rlcy9jaXBoZXInKTtcbmV4cG9ydHMuREVTID0gcmVxdWlyZSgnLi9kZXMvZGVzJyk7XG5leHBvcnRzLkNCQyA9IHJlcXVpcmUoJy4vZGVzL2NiYycpO1xuZXhwb3J0cy5FREUgPSByZXF1aXJlKCcuL2Rlcy9lZGUnKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbnZhciBwcm90byA9IHt9O1xuXG5mdW5jdGlvbiBDQkNTdGF0ZShpdikge1xuICBhc3NlcnQuZXF1YWwoaXYubGVuZ3RoLCA4LCAnSW52YWxpZCBJViBsZW5ndGgnKTtcblxuICB0aGlzLml2ID0gbmV3IEFycmF5KDgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXYubGVuZ3RoOyBpKyspXG4gICAgdGhpcy5pdltpXSA9IGl2W2ldO1xufVxuXG5mdW5jdGlvbiBpbnN0YW50aWF0ZShCYXNlKSB7XG4gIGZ1bmN0aW9uIENCQyhvcHRpb25zKSB7XG4gICAgQmFzZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMuX2NiY0luaXQoKTtcbiAgfVxuICBpbmhlcml0cyhDQkMsIEJhc2UpO1xuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvdG8pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBDQkMucHJvdG90eXBlW2tleV0gPSBwcm90b1trZXldO1xuICB9XG5cbiAgQ0JDLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBDQkMob3B0aW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIENCQztcbn1cblxuZXhwb3J0cy5pbnN0YW50aWF0ZSA9IGluc3RhbnRpYXRlO1xuXG5wcm90by5fY2JjSW5pdCA9IGZ1bmN0aW9uIF9jYmNJbml0KCkge1xuICB2YXIgc3RhdGUgPSBuZXcgQ0JDU3RhdGUodGhpcy5vcHRpb25zLml2KTtcbiAgdGhpcy5fY2JjU3RhdGUgPSBzdGF0ZTtcbn07XG5cbnByb3RvLl91cGRhdGUgPSBmdW5jdGlvbiBfdXBkYXRlKGlucCwgaW5PZmYsIG91dCwgb3V0T2ZmKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2NiY1N0YXRlO1xuICB2YXIgc3VwZXJQcm90byA9IHRoaXMuY29uc3RydWN0b3Iuc3VwZXJfLnByb3RvdHlwZTtcblxuICB2YXIgaXYgPSBzdGF0ZS5pdjtcbiAgaWYgKHRoaXMudHlwZSA9PT0gJ2VuY3J5cHQnKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJsb2NrU2l6ZTsgaSsrKVxuICAgICAgaXZbaV0gXj0gaW5wW2luT2ZmICsgaV07XG5cbiAgICBzdXBlclByb3RvLl91cGRhdGUuY2FsbCh0aGlzLCBpdiwgMCwgb3V0LCBvdXRPZmYpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJsb2NrU2l6ZTsgaSsrKVxuICAgICAgaXZbaV0gPSBvdXRbb3V0T2ZmICsgaV07XG4gIH0gZWxzZSB7XG4gICAgc3VwZXJQcm90by5fdXBkYXRlLmNhbGwodGhpcywgaW5wLCBpbk9mZiwgb3V0LCBvdXRPZmYpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJsb2NrU2l6ZTsgaSsrKVxuICAgICAgb3V0W291dE9mZiArIGldIF49IGl2W2ldO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJsb2NrU2l6ZTsgaSsrKVxuICAgICAgaXZbaV0gPSBpbnBbaW5PZmYgKyBpXTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gQ2lwaGVyKG9wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICB0aGlzLnR5cGUgPSB0aGlzLm9wdGlvbnMudHlwZTtcbiAgdGhpcy5ibG9ja1NpemUgPSA4O1xuICB0aGlzLl9pbml0KCk7XG5cbiAgdGhpcy5idWZmZXIgPSBuZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO1xuICB0aGlzLmJ1ZmZlck9mZiA9IDA7XG59XG5tb2R1bGUuZXhwb3J0cyA9IENpcGhlcjtcblxuQ2lwaGVyLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uIF9pbml0KCkge1xuICAvLyBNaWdodCBiZSBvdmVycmlkZWRcbn07XG5cbkNpcGhlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKGRhdGEpIHtcbiAgaWYgKGRhdGEubGVuZ3RoID09PSAwKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodGhpcy50eXBlID09PSAnZGVjcnlwdCcpXG4gICAgcmV0dXJuIHRoaXMuX3VwZGF0ZURlY3J5cHQoZGF0YSk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5fdXBkYXRlRW5jcnlwdChkYXRhKTtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuX2J1ZmZlciA9IGZ1bmN0aW9uIF9idWZmZXIoZGF0YSwgb2ZmKSB7XG4gIC8vIEFwcGVuZCBkYXRhIHRvIGJ1ZmZlclxuICB2YXIgbWluID0gTWF0aC5taW4odGhpcy5idWZmZXIubGVuZ3RoIC0gdGhpcy5idWZmZXJPZmYsIGRhdGEubGVuZ3RoIC0gb2ZmKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaW47IGkrKylcbiAgICB0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZiArIGldID0gZGF0YVtvZmYgKyBpXTtcbiAgdGhpcy5idWZmZXJPZmYgKz0gbWluO1xuXG4gIC8vIFNoaWZ0IG5leHRcbiAgcmV0dXJuIG1pbjtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuX2ZsdXNoQnVmZmVyID0gZnVuY3Rpb24gX2ZsdXNoQnVmZmVyKG91dCwgb2ZmKSB7XG4gIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwgMCwgb3V0LCBvZmYpO1xuICB0aGlzLmJ1ZmZlck9mZiA9IDA7XG4gIHJldHVybiB0aGlzLmJsb2NrU2l6ZTtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuX3VwZGF0ZUVuY3J5cHQgPSBmdW5jdGlvbiBfdXBkYXRlRW5jcnlwdChkYXRhKSB7XG4gIHZhciBpbnB1dE9mZiA9IDA7XG4gIHZhciBvdXRwdXRPZmYgPSAwO1xuXG4gIHZhciBjb3VudCA9ICgodGhpcy5idWZmZXJPZmYgKyBkYXRhLmxlbmd0aCkgLyB0aGlzLmJsb2NrU2l6ZSkgfCAwO1xuICB2YXIgb3V0ID0gbmV3IEFycmF5KGNvdW50ICogdGhpcy5ibG9ja1NpemUpO1xuXG4gIGlmICh0aGlzLmJ1ZmZlck9mZiAhPT0gMCkge1xuICAgIGlucHV0T2ZmICs9IHRoaXMuX2J1ZmZlcihkYXRhLCBpbnB1dE9mZik7XG5cbiAgICBpZiAodGhpcy5idWZmZXJPZmYgPT09IHRoaXMuYnVmZmVyLmxlbmd0aClcbiAgICAgIG91dHB1dE9mZiArPSB0aGlzLl9mbHVzaEJ1ZmZlcihvdXQsIG91dHB1dE9mZik7XG4gIH1cblxuICAvLyBXcml0ZSBibG9ja3NcbiAgdmFyIG1heCA9IGRhdGEubGVuZ3RoIC0gKChkYXRhLmxlbmd0aCAtIGlucHV0T2ZmKSAlIHRoaXMuYmxvY2tTaXplKTtcbiAgZm9yICg7IGlucHV0T2ZmIDwgbWF4OyBpbnB1dE9mZiArPSB0aGlzLmJsb2NrU2l6ZSkge1xuICAgIHRoaXMuX3VwZGF0ZShkYXRhLCBpbnB1dE9mZiwgb3V0LCBvdXRwdXRPZmYpO1xuICAgIG91dHB1dE9mZiArPSB0aGlzLmJsb2NrU2l6ZTtcbiAgfVxuXG4gIC8vIFF1ZXVlIHJlc3RcbiAgZm9yICg7IGlucHV0T2ZmIDwgZGF0YS5sZW5ndGg7IGlucHV0T2ZmKyssIHRoaXMuYnVmZmVyT2ZmKyspXG4gICAgdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmZdID0gZGF0YVtpbnB1dE9mZl07XG5cbiAgcmV0dXJuIG91dDtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuX3VwZGF0ZURlY3J5cHQgPSBmdW5jdGlvbiBfdXBkYXRlRGVjcnlwdChkYXRhKSB7XG4gIHZhciBpbnB1dE9mZiA9IDA7XG4gIHZhciBvdXRwdXRPZmYgPSAwO1xuXG4gIHZhciBjb3VudCA9IE1hdGguY2VpbCgodGhpcy5idWZmZXJPZmYgKyBkYXRhLmxlbmd0aCkgLyB0aGlzLmJsb2NrU2l6ZSkgLSAxO1xuICB2YXIgb3V0ID0gbmV3IEFycmF5KGNvdW50ICogdGhpcy5ibG9ja1NpemUpO1xuXG4gIC8vIFRPRE8oaW5kdXRueSk6IG9wdGltaXplIGl0LCB0aGlzIGlzIGZhciBmcm9tIG9wdGltYWxcbiAgZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSkge1xuICAgIGlucHV0T2ZmICs9IHRoaXMuX2J1ZmZlcihkYXRhLCBpbnB1dE9mZik7XG4gICAgb3V0cHV0T2ZmICs9IHRoaXMuX2ZsdXNoQnVmZmVyKG91dCwgb3V0cHV0T2ZmKTtcbiAgfVxuXG4gIC8vIEJ1ZmZlciByZXN0IG9mIHRoZSBpbnB1dFxuICBpbnB1dE9mZiArPSB0aGlzLl9idWZmZXIoZGF0YSwgaW5wdXRPZmYpO1xuXG4gIHJldHVybiBvdXQ7XG59O1xuXG5DaXBoZXIucHJvdG90eXBlLmZpbmFsID0gZnVuY3Rpb24gZmluYWwoYnVmZmVyKSB7XG4gIHZhciBmaXJzdDtcbiAgaWYgKGJ1ZmZlcilcbiAgICBmaXJzdCA9IHRoaXMudXBkYXRlKGJ1ZmZlcik7XG5cbiAgdmFyIGxhc3Q7XG4gIGlmICh0aGlzLnR5cGUgPT09ICdlbmNyeXB0JylcbiAgICBsYXN0ID0gdGhpcy5fZmluYWxFbmNyeXB0KCk7XG4gIGVsc2VcbiAgICBsYXN0ID0gdGhpcy5fZmluYWxEZWNyeXB0KCk7XG5cbiAgaWYgKGZpcnN0KVxuICAgIHJldHVybiBmaXJzdC5jb25jYXQobGFzdCk7XG4gIGVsc2VcbiAgICByZXR1cm4gbGFzdDtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuX3BhZCA9IGZ1bmN0aW9uIF9wYWQoYnVmZmVyLCBvZmYpIHtcbiAgaWYgKG9mZiA9PT0gMClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgd2hpbGUgKG9mZiA8IGJ1ZmZlci5sZW5ndGgpXG4gICAgYnVmZmVyW29mZisrXSA9IDA7XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5DaXBoZXIucHJvdG90eXBlLl9maW5hbEVuY3J5cHQgPSBmdW5jdGlvbiBfZmluYWxFbmNyeXB0KCkge1xuICBpZiAoIXRoaXMuX3BhZCh0aGlzLmJ1ZmZlciwgdGhpcy5idWZmZXJPZmYpKVxuICAgIHJldHVybiBbXTtcblxuICB2YXIgb3V0ID0gbmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtcbiAgdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLCAwLCBvdXQsIDApO1xuICByZXR1cm4gb3V0O1xufTtcblxuQ2lwaGVyLnByb3RvdHlwZS5fdW5wYWQgPSBmdW5jdGlvbiBfdW5wYWQoYnVmZmVyKSB7XG4gIHJldHVybiBidWZmZXI7XG59O1xuXG5DaXBoZXIucHJvdG90eXBlLl9maW5hbERlY3J5cHQgPSBmdW5jdGlvbiBfZmluYWxEZWNyeXB0KCkge1xuICBhc3NlcnQuZXF1YWwodGhpcy5idWZmZXJPZmYsIHRoaXMuYmxvY2tTaXplLCAnTm90IGVub3VnaCBkYXRhIHRvIGRlY3J5cHQnKTtcbiAgdmFyIG91dCA9IG5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7XG4gIHRoaXMuX2ZsdXNoQnVmZmVyKG91dCwgMCk7XG5cbiAgcmV0dXJuIHRoaXMuX3VucGFkKG91dCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxudmFyIGRlcyA9IHJlcXVpcmUoJy4uL2RlcycpO1xudmFyIHV0aWxzID0gZGVzLnV0aWxzO1xudmFyIENpcGhlciA9IGRlcy5DaXBoZXI7XG5cbmZ1bmN0aW9uIERFU1N0YXRlKCkge1xuICB0aGlzLnRtcCA9IG5ldyBBcnJheSgyKTtcbiAgdGhpcy5rZXlzID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gREVTKG9wdGlvbnMpIHtcbiAgQ2lwaGVyLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdmFyIHN0YXRlID0gbmV3IERFU1N0YXRlKCk7XG4gIHRoaXMuX2Rlc1N0YXRlID0gc3RhdGU7XG5cbiAgdGhpcy5kZXJpdmVLZXlzKHN0YXRlLCBvcHRpb25zLmtleSk7XG59XG5pbmhlcml0cyhERVMsIENpcGhlcik7XG5tb2R1bGUuZXhwb3J0cyA9IERFUztcblxuREVTLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgREVTKG9wdGlvbnMpO1xufTtcblxudmFyIHNoaWZ0VGFibGUgPSBbXG4gIDEsIDEsIDIsIDIsIDIsIDIsIDIsIDIsXG4gIDEsIDIsIDIsIDIsIDIsIDIsIDIsIDFcbl07XG5cbkRFUy5wcm90b3R5cGUuZGVyaXZlS2V5cyA9IGZ1bmN0aW9uIGRlcml2ZUtleXMoc3RhdGUsIGtleSkge1xuICBzdGF0ZS5rZXlzID0gbmV3IEFycmF5KDE2ICogMik7XG5cbiAgYXNzZXJ0LmVxdWFsKGtleS5sZW5ndGgsIHRoaXMuYmxvY2tTaXplLCAnSW52YWxpZCBrZXkgbGVuZ3RoJyk7XG5cbiAgdmFyIGtMID0gdXRpbHMucmVhZFVJbnQzMkJFKGtleSwgMCk7XG4gIHZhciBrUiA9IHV0aWxzLnJlYWRVSW50MzJCRShrZXksIDQpO1xuXG4gIHV0aWxzLnBjMShrTCwga1IsIHN0YXRlLnRtcCwgMCk7XG4gIGtMID0gc3RhdGUudG1wWzBdO1xuICBrUiA9IHN0YXRlLnRtcFsxXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5rZXlzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIHNoaWZ0ID0gc2hpZnRUYWJsZVtpID4+PiAxXTtcbiAgICBrTCA9IHV0aWxzLnIyOHNobChrTCwgc2hpZnQpO1xuICAgIGtSID0gdXRpbHMucjI4c2hsKGtSLCBzaGlmdCk7XG4gICAgdXRpbHMucGMyKGtMLCBrUiwgc3RhdGUua2V5cywgaSk7XG4gIH1cbn07XG5cbkRFUy5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUoaW5wLCBpbk9mZiwgb3V0LCBvdXRPZmYpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fZGVzU3RhdGU7XG5cbiAgdmFyIGwgPSB1dGlscy5yZWFkVUludDMyQkUoaW5wLCBpbk9mZik7XG4gIHZhciByID0gdXRpbHMucmVhZFVJbnQzMkJFKGlucCwgaW5PZmYgKyA0KTtcblxuICAvLyBJbml0aWFsIFBlcm11dGF0aW9uXG4gIHV0aWxzLmlwKGwsIHIsIHN0YXRlLnRtcCwgMCk7XG4gIGwgPSBzdGF0ZS50bXBbMF07XG4gIHIgPSBzdGF0ZS50bXBbMV07XG5cbiAgaWYgKHRoaXMudHlwZSA9PT0gJ2VuY3J5cHQnKVxuICAgIHRoaXMuX2VuY3J5cHQoc3RhdGUsIGwsIHIsIHN0YXRlLnRtcCwgMCk7XG4gIGVsc2VcbiAgICB0aGlzLl9kZWNyeXB0KHN0YXRlLCBsLCByLCBzdGF0ZS50bXAsIDApO1xuXG4gIGwgPSBzdGF0ZS50bXBbMF07XG4gIHIgPSBzdGF0ZS50bXBbMV07XG5cbiAgdXRpbHMud3JpdGVVSW50MzJCRShvdXQsIGwsIG91dE9mZik7XG4gIHV0aWxzLndyaXRlVUludDMyQkUob3V0LCByLCBvdXRPZmYgKyA0KTtcbn07XG5cbkRFUy5wcm90b3R5cGUuX3BhZCA9IGZ1bmN0aW9uIF9wYWQoYnVmZmVyLCBvZmYpIHtcbiAgdmFyIHZhbHVlID0gYnVmZmVyLmxlbmd0aCAtIG9mZjtcbiAgZm9yICh2YXIgaSA9IG9mZjsgaSA8IGJ1ZmZlci5sZW5ndGg7IGkrKylcbiAgICBidWZmZXJbaV0gPSB2YWx1ZTtcblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkRFUy5wcm90b3R5cGUuX3VucGFkID0gZnVuY3Rpb24gX3VucGFkKGJ1ZmZlcikge1xuICB2YXIgcGFkID0gYnVmZmVyW2J1ZmZlci5sZW5ndGggLSAxXTtcbiAgZm9yICh2YXIgaSA9IGJ1ZmZlci5sZW5ndGggLSBwYWQ7IGkgPCBidWZmZXIubGVuZ3RoOyBpKyspXG4gICAgYXNzZXJ0LmVxdWFsKGJ1ZmZlcltpXSwgcGFkKTtcblxuICByZXR1cm4gYnVmZmVyLnNsaWNlKDAsIGJ1ZmZlci5sZW5ndGggLSBwYWQpO1xufTtcblxuREVTLnByb3RvdHlwZS5fZW5jcnlwdCA9IGZ1bmN0aW9uIF9lbmNyeXB0KHN0YXRlLCBsU3RhcnQsIHJTdGFydCwgb3V0LCBvZmYpIHtcbiAgdmFyIGwgPSBsU3RhcnQ7XG4gIHZhciByID0gclN0YXJ0O1xuXG4gIC8vIEFwcGx5IGYoKSB4MTYgdGltZXNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5rZXlzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGtleUwgPSBzdGF0ZS5rZXlzW2ldO1xuICAgIHZhciBrZXlSID0gc3RhdGUua2V5c1tpICsgMV07XG5cbiAgICAvLyBmKHIsIGspXG4gICAgdXRpbHMuZXhwYW5kKHIsIHN0YXRlLnRtcCwgMCk7XG5cbiAgICBrZXlMIF49IHN0YXRlLnRtcFswXTtcbiAgICBrZXlSIF49IHN0YXRlLnRtcFsxXTtcbiAgICB2YXIgcyA9IHV0aWxzLnN1YnN0aXR1dGUoa2V5TCwga2V5Uik7XG4gICAgdmFyIGYgPSB1dGlscy5wZXJtdXRlKHMpO1xuXG4gICAgdmFyIHQgPSByO1xuICAgIHIgPSAobCBeIGYpID4+PiAwO1xuICAgIGwgPSB0O1xuICB9XG5cbiAgLy8gUmV2ZXJzZSBJbml0aWFsIFBlcm11dGF0aW9uXG4gIHV0aWxzLnJpcChyLCBsLCBvdXQsIG9mZik7XG59O1xuXG5ERVMucHJvdG90eXBlLl9kZWNyeXB0ID0gZnVuY3Rpb24gX2RlY3J5cHQoc3RhdGUsIGxTdGFydCwgclN0YXJ0LCBvdXQsIG9mZikge1xuICB2YXIgbCA9IHJTdGFydDtcbiAgdmFyIHIgPSBsU3RhcnQ7XG5cbiAgLy8gQXBwbHkgZigpIHgxNiB0aW1lc1xuICBmb3IgKHZhciBpID0gc3RhdGUua2V5cy5sZW5ndGggLSAyOyBpID49IDA7IGkgLT0gMikge1xuICAgIHZhciBrZXlMID0gc3RhdGUua2V5c1tpXTtcbiAgICB2YXIga2V5UiA9IHN0YXRlLmtleXNbaSArIDFdO1xuXG4gICAgLy8gZihyLCBrKVxuICAgIHV0aWxzLmV4cGFuZChsLCBzdGF0ZS50bXAsIDApO1xuXG4gICAga2V5TCBePSBzdGF0ZS50bXBbMF07XG4gICAga2V5UiBePSBzdGF0ZS50bXBbMV07XG4gICAgdmFyIHMgPSB1dGlscy5zdWJzdGl0dXRlKGtleUwsIGtleVIpO1xuICAgIHZhciBmID0gdXRpbHMucGVybXV0ZShzKTtcblxuICAgIHZhciB0ID0gbDtcbiAgICBsID0gKHIgXiBmKSA+Pj4gMDtcbiAgICByID0gdDtcbiAgfVxuXG4gIC8vIFJldmVyc2UgSW5pdGlhbCBQZXJtdXRhdGlvblxuICB1dGlscy5yaXAobCwgciwgb3V0LCBvZmYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbnZhciBkZXMgPSByZXF1aXJlKCcuLi9kZXMnKTtcbnZhciBDaXBoZXIgPSBkZXMuQ2lwaGVyO1xudmFyIERFUyA9IGRlcy5ERVM7XG5cbmZ1bmN0aW9uIEVERVN0YXRlKHR5cGUsIGtleSkge1xuICBhc3NlcnQuZXF1YWwoa2V5Lmxlbmd0aCwgMjQsICdJbnZhbGlkIGtleSBsZW5ndGgnKTtcblxuICB2YXIgazEgPSBrZXkuc2xpY2UoMCwgOCk7XG4gIHZhciBrMiA9IGtleS5zbGljZSg4LCAxNik7XG4gIHZhciBrMyA9IGtleS5zbGljZSgxNiwgMjQpO1xuXG4gIGlmICh0eXBlID09PSAnZW5jcnlwdCcpIHtcbiAgICB0aGlzLmNpcGhlcnMgPSBbXG4gICAgICBERVMuY3JlYXRlKHsgdHlwZTogJ2VuY3J5cHQnLCBrZXk6IGsxIH0pLFxuICAgICAgREVTLmNyZWF0ZSh7IHR5cGU6ICdkZWNyeXB0Jywga2V5OiBrMiB9KSxcbiAgICAgIERFUy5jcmVhdGUoeyB0eXBlOiAnZW5jcnlwdCcsIGtleTogazMgfSlcbiAgICBdO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuY2lwaGVycyA9IFtcbiAgICAgIERFUy5jcmVhdGUoeyB0eXBlOiAnZGVjcnlwdCcsIGtleTogazMgfSksXG4gICAgICBERVMuY3JlYXRlKHsgdHlwZTogJ2VuY3J5cHQnLCBrZXk6IGsyIH0pLFxuICAgICAgREVTLmNyZWF0ZSh7IHR5cGU6ICdkZWNyeXB0Jywga2V5OiBrMSB9KVxuICAgIF07XG4gIH1cbn1cblxuZnVuY3Rpb24gRURFKG9wdGlvbnMpIHtcbiAgQ2lwaGVyLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdmFyIHN0YXRlID0gbmV3IEVERVN0YXRlKHRoaXMudHlwZSwgdGhpcy5vcHRpb25zLmtleSk7XG4gIHRoaXMuX2VkZVN0YXRlID0gc3RhdGU7XG59XG5pbmhlcml0cyhFREUsIENpcGhlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gRURFO1xuXG5FREUuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBFREUob3B0aW9ucyk7XG59O1xuXG5FREUucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiBfdXBkYXRlKGlucCwgaW5PZmYsIG91dCwgb3V0T2ZmKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2VkZVN0YXRlO1xuXG4gIHN0YXRlLmNpcGhlcnNbMF0uX3VwZGF0ZShpbnAsIGluT2ZmLCBvdXQsIG91dE9mZik7XG4gIHN0YXRlLmNpcGhlcnNbMV0uX3VwZGF0ZShvdXQsIG91dE9mZiwgb3V0LCBvdXRPZmYpO1xuICBzdGF0ZS5jaXBoZXJzWzJdLl91cGRhdGUob3V0LCBvdXRPZmYsIG91dCwgb3V0T2ZmKTtcbn07XG5cbkVERS5wcm90b3R5cGUuX3BhZCA9IERFUy5wcm90b3R5cGUuX3BhZDtcbkVERS5wcm90b3R5cGUuX3VucGFkID0gREVTLnByb3RvdHlwZS5fdW5wYWQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFKGJ5dGVzLCBvZmYpIHtcbiAgdmFyIHJlcyA9ICAoYnl0ZXNbMCArIG9mZl0gPDwgMjQpIHxcbiAgICAgICAgICAgICAoYnl0ZXNbMSArIG9mZl0gPDwgMTYpIHxcbiAgICAgICAgICAgICAoYnl0ZXNbMiArIG9mZl0gPDwgOCkgfFxuICAgICAgICAgICAgIGJ5dGVzWzMgKyBvZmZdO1xuICByZXR1cm4gcmVzID4+PiAwO1xufTtcblxuZXhwb3J0cy53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRShieXRlcywgdmFsdWUsIG9mZikge1xuICBieXRlc1swICsgb2ZmXSA9IHZhbHVlID4+PiAyNDtcbiAgYnl0ZXNbMSArIG9mZl0gPSAodmFsdWUgPj4+IDE2KSAmIDB4ZmY7XG4gIGJ5dGVzWzIgKyBvZmZdID0gKHZhbHVlID4+PiA4KSAmIDB4ZmY7XG4gIGJ5dGVzWzMgKyBvZmZdID0gdmFsdWUgJiAweGZmO1xufTtcblxuZXhwb3J0cy5pcCA9IGZ1bmN0aW9uIGlwKGluTCwgaW5SLCBvdXQsIG9mZikge1xuICB2YXIgb3V0TCA9IDA7XG4gIHZhciBvdXRSID0gMDtcblxuICBmb3IgKHZhciBpID0gNjsgaSA+PSAwOyBpIC09IDIpIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8PSAyNDsgaiArPSA4KSB7XG4gICAgICBvdXRMIDw8PSAxO1xuICAgICAgb3V0TCB8PSAoaW5SID4+PiAoaiArIGkpKSAmIDE7XG4gICAgfVxuICAgIGZvciAodmFyIGogPSAwOyBqIDw9IDI0OyBqICs9IDgpIHtcbiAgICAgIG91dEwgPDw9IDE7XG4gICAgICBvdXRMIHw9IChpbkwgPj4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gNjsgaSA+PSAwOyBpIC09IDIpIHtcbiAgICBmb3IgKHZhciBqID0gMTsgaiA8PSAyNTsgaiArPSA4KSB7XG4gICAgICBvdXRSIDw8PSAxO1xuICAgICAgb3V0UiB8PSAoaW5SID4+PiAoaiArIGkpKSAmIDE7XG4gICAgfVxuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IDI1OyBqICs9IDgpIHtcbiAgICAgIG91dFIgPDw9IDE7XG4gICAgICBvdXRSIHw9IChpbkwgPj4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gIH1cblxuICBvdXRbb2ZmICsgMF0gPSBvdXRMID4+PiAwO1xuICBvdXRbb2ZmICsgMV0gPSBvdXRSID4+PiAwO1xufTtcblxuZXhwb3J0cy5yaXAgPSBmdW5jdGlvbiByaXAoaW5MLCBpblIsIG91dCwgb2ZmKSB7XG4gIHZhciBvdXRMID0gMDtcbiAgdmFyIG91dFIgPSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDI0OyBqID49IDA7IGogLT0gOCkge1xuICAgICAgb3V0TCA8PD0gMTtcbiAgICAgIG91dEwgfD0gKGluUiA+Pj4gKGogKyBpKSkgJiAxO1xuICAgICAgb3V0TCA8PD0gMTtcbiAgICAgIG91dEwgfD0gKGluTCA+Pj4gKGogKyBpKSkgJiAxO1xuICAgIH1cbiAgfVxuICBmb3IgKHZhciBpID0gNDsgaSA8IDg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAyNDsgaiA+PSAwOyBqIC09IDgpIHtcbiAgICAgIG91dFIgPDw9IDE7XG4gICAgICBvdXRSIHw9IChpblIgPj4+IChqICsgaSkpICYgMTtcbiAgICAgIG91dFIgPDw9IDE7XG4gICAgICBvdXRSIHw9IChpbkwgPj4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gIH1cblxuICBvdXRbb2ZmICsgMF0gPSBvdXRMID4+PiAwO1xuICBvdXRbb2ZmICsgMV0gPSBvdXRSID4+PiAwO1xufTtcblxuZXhwb3J0cy5wYzEgPSBmdW5jdGlvbiBwYzEoaW5MLCBpblIsIG91dCwgb2ZmKSB7XG4gIHZhciBvdXRMID0gMDtcbiAgdmFyIG91dFIgPSAwO1xuXG4gIC8vIDcsIDE1LCAyMywgMzEsIDM5LCA0NywgNTUsIDYzXG4gIC8vIDYsIDE0LCAyMiwgMzAsIDM5LCA0NywgNTUsIDYzXG4gIC8vIDUsIDEzLCAyMSwgMjksIDM5LCA0NywgNTUsIDYzXG4gIC8vIDQsIDEyLCAyMCwgMjhcbiAgZm9yICh2YXIgaSA9IDc7IGkgPj0gNTsgaS0tKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPD0gMjQ7IGogKz0gOCkge1xuICAgICAgb3V0TCA8PD0gMTtcbiAgICAgIG91dEwgfD0gKGluUiA+PiAoaiArIGkpKSAmIDE7XG4gICAgfVxuICAgIGZvciAodmFyIGogPSAwOyBqIDw9IDI0OyBqICs9IDgpIHtcbiAgICAgIG91dEwgPDw9IDE7XG4gICAgICBvdXRMIHw9IChpbkwgPj4gKGogKyBpKSkgJiAxO1xuICAgIH1cbiAgfVxuICBmb3IgKHZhciBqID0gMDsgaiA8PSAyNDsgaiArPSA4KSB7XG4gICAgb3V0TCA8PD0gMTtcbiAgICBvdXRMIHw9IChpblIgPj4gKGogKyBpKSkgJiAxO1xuICB9XG5cbiAgLy8gMSwgOSwgMTcsIDI1LCAzMywgNDEsIDQ5LCA1N1xuICAvLyAyLCAxMCwgMTgsIDI2LCAzNCwgNDIsIDUwLCA1OFxuICAvLyAzLCAxMSwgMTksIDI3LCAzNSwgNDMsIDUxLCA1OVxuICAvLyAzNiwgNDQsIDUyLCA2MFxuICBmb3IgKHZhciBpID0gMTsgaSA8PSAzOyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8PSAyNDsgaiArPSA4KSB7XG4gICAgICBvdXRSIDw8PSAxO1xuICAgICAgb3V0UiB8PSAoaW5SID4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPD0gMjQ7IGogKz0gOCkge1xuICAgICAgb3V0UiA8PD0gMTtcbiAgICAgIG91dFIgfD0gKGluTCA+PiAoaiArIGkpKSAmIDE7XG4gICAgfVxuICB9XG4gIGZvciAodmFyIGogPSAwOyBqIDw9IDI0OyBqICs9IDgpIHtcbiAgICBvdXRSIDw8PSAxO1xuICAgIG91dFIgfD0gKGluTCA+PiAoaiArIGkpKSAmIDE7XG4gIH1cblxuICBvdXRbb2ZmICsgMF0gPSBvdXRMID4+PiAwO1xuICBvdXRbb2ZmICsgMV0gPSBvdXRSID4+PiAwO1xufTtcblxuZXhwb3J0cy5yMjhzaGwgPSBmdW5jdGlvbiByMjhzaGwobnVtLCBzaGlmdCkge1xuICByZXR1cm4gKChudW0gPDwgc2hpZnQpICYgMHhmZmZmZmZmKSB8IChudW0gPj4+ICgyOCAtIHNoaWZ0KSk7XG59O1xuXG52YXIgcGMydGFibGUgPSBbXG4gIC8vIGluTCA9PiBvdXRMXG4gIDE0LCAxMSwgMTcsIDQsIDI3LCAyMywgMjUsIDAsXG4gIDEzLCAyMiwgNywgMTgsIDUsIDksIDE2LCAyNCxcbiAgMiwgMjAsIDEyLCAyMSwgMSwgOCwgMTUsIDI2LFxuXG4gIC8vIGluUiA9PiBvdXRSXG4gIDE1LCA0LCAyNSwgMTksIDksIDEsIDI2LCAxNixcbiAgNSwgMTEsIDIzLCA4LCAxMiwgNywgMTcsIDAsXG4gIDIyLCAzLCAxMCwgMTQsIDYsIDIwLCAyNywgMjRcbl07XG5cbmV4cG9ydHMucGMyID0gZnVuY3Rpb24gcGMyKGluTCwgaW5SLCBvdXQsIG9mZikge1xuICB2YXIgb3V0TCA9IDA7XG4gIHZhciBvdXRSID0gMDtcblxuICB2YXIgbGVuID0gcGMydGFibGUubGVuZ3RoID4+PiAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgb3V0TCA8PD0gMTtcbiAgICBvdXRMIHw9IChpbkwgPj4+IHBjMnRhYmxlW2ldKSAmIDB4MTtcbiAgfVxuICBmb3IgKHZhciBpID0gbGVuOyBpIDwgcGMydGFibGUubGVuZ3RoOyBpKyspIHtcbiAgICBvdXRSIDw8PSAxO1xuICAgIG91dFIgfD0gKGluUiA+Pj4gcGMydGFibGVbaV0pICYgMHgxO1xuICB9XG5cbiAgb3V0W29mZiArIDBdID0gb3V0TCA+Pj4gMDtcbiAgb3V0W29mZiArIDFdID0gb3V0UiA+Pj4gMDtcbn07XG5cbmV4cG9ydHMuZXhwYW5kID0gZnVuY3Rpb24gZXhwYW5kKHIsIG91dCwgb2ZmKSB7XG4gIHZhciBvdXRMID0gMDtcbiAgdmFyIG91dFIgPSAwO1xuXG4gIG91dEwgPSAoKHIgJiAxKSA8PCA1KSB8IChyID4+PiAyNyk7XG4gIGZvciAodmFyIGkgPSAyMzsgaSA+PSAxNTsgaSAtPSA0KSB7XG4gICAgb3V0TCA8PD0gNjtcbiAgICBvdXRMIHw9IChyID4+PiBpKSAmIDB4M2Y7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDExOyBpID49IDM7IGkgLT0gNCkge1xuICAgIG91dFIgfD0gKHIgPj4+IGkpICYgMHgzZjtcbiAgICBvdXRSIDw8PSA2O1xuICB9XG4gIG91dFIgfD0gKChyICYgMHgxZikgPDwgMSkgfCAociA+Pj4gMzEpO1xuXG4gIG91dFtvZmYgKyAwXSA9IG91dEwgPj4+IDA7XG4gIG91dFtvZmYgKyAxXSA9IG91dFIgPj4+IDA7XG59O1xuXG52YXIgc1RhYmxlID0gW1xuICAxNCwgMCwgNCwgMTUsIDEzLCA3LCAxLCA0LCAyLCAxNCwgMTUsIDIsIDExLCAxMywgOCwgMSxcbiAgMywgMTAsIDEwLCA2LCA2LCAxMiwgMTIsIDExLCA1LCA5LCA5LCA1LCAwLCAzLCA3LCA4LFxuICA0LCAxNSwgMSwgMTIsIDE0LCA4LCA4LCAyLCAxMywgNCwgNiwgOSwgMiwgMSwgMTEsIDcsXG4gIDE1LCA1LCAxMiwgMTEsIDksIDMsIDcsIDE0LCAzLCAxMCwgMTAsIDAsIDUsIDYsIDAsIDEzLFxuXG4gIDE1LCAzLCAxLCAxMywgOCwgNCwgMTQsIDcsIDYsIDE1LCAxMSwgMiwgMywgOCwgNCwgMTQsXG4gIDksIDEyLCA3LCAwLCAyLCAxLCAxMywgMTAsIDEyLCA2LCAwLCA5LCA1LCAxMSwgMTAsIDUsXG4gIDAsIDEzLCAxNCwgOCwgNywgMTAsIDExLCAxLCAxMCwgMywgNCwgMTUsIDEzLCA0LCAxLCAyLFxuICA1LCAxMSwgOCwgNiwgMTIsIDcsIDYsIDEyLCA5LCAwLCAzLCA1LCAyLCAxNCwgMTUsIDksXG5cbiAgMTAsIDEzLCAwLCA3LCA5LCAwLCAxNCwgOSwgNiwgMywgMywgNCwgMTUsIDYsIDUsIDEwLFxuICAxLCAyLCAxMywgOCwgMTIsIDUsIDcsIDE0LCAxMSwgMTIsIDQsIDExLCAyLCAxNSwgOCwgMSxcbiAgMTMsIDEsIDYsIDEwLCA0LCAxMywgOSwgMCwgOCwgNiwgMTUsIDksIDMsIDgsIDAsIDcsXG4gIDExLCA0LCAxLCAxNSwgMiwgMTQsIDEyLCAzLCA1LCAxMSwgMTAsIDUsIDE0LCAyLCA3LCAxMixcblxuICA3LCAxMywgMTMsIDgsIDE0LCAxMSwgMywgNSwgMCwgNiwgNiwgMTUsIDksIDAsIDEwLCAzLFxuICAxLCA0LCAyLCA3LCA4LCAyLCA1LCAxMiwgMTEsIDEsIDEyLCAxMCwgNCwgMTQsIDE1LCA5LFxuICAxMCwgMywgNiwgMTUsIDksIDAsIDAsIDYsIDEyLCAxMCwgMTEsIDEsIDcsIDEzLCAxMywgOCxcbiAgMTUsIDksIDEsIDQsIDMsIDUsIDE0LCAxMSwgNSwgMTIsIDIsIDcsIDgsIDIsIDQsIDE0LFxuXG4gIDIsIDE0LCAxMiwgMTEsIDQsIDIsIDEsIDEyLCA3LCA0LCAxMCwgNywgMTEsIDEzLCA2LCAxLFxuICA4LCA1LCA1LCAwLCAzLCAxNSwgMTUsIDEwLCAxMywgMywgMCwgOSwgMTQsIDgsIDksIDYsXG4gIDQsIDExLCAyLCA4LCAxLCAxMiwgMTEsIDcsIDEwLCAxLCAxMywgMTQsIDcsIDIsIDgsIDEzLFxuICAxNSwgNiwgOSwgMTUsIDEyLCAwLCA1LCA5LCA2LCAxMCwgMywgNCwgMCwgNSwgMTQsIDMsXG5cbiAgMTIsIDEwLCAxLCAxNSwgMTAsIDQsIDE1LCAyLCA5LCA3LCAyLCAxMiwgNiwgOSwgOCwgNSxcbiAgMCwgNiwgMTMsIDEsIDMsIDEzLCA0LCAxNCwgMTQsIDAsIDcsIDExLCA1LCAzLCAxMSwgOCxcbiAgOSwgNCwgMTQsIDMsIDE1LCAyLCA1LCAxMiwgMiwgOSwgOCwgNSwgMTIsIDE1LCAzLCAxMCxcbiAgNywgMTEsIDAsIDE0LCA0LCAxLCAxMCwgNywgMSwgNiwgMTMsIDAsIDExLCA4LCA2LCAxMyxcblxuICA0LCAxMywgMTEsIDAsIDIsIDExLCAxNCwgNywgMTUsIDQsIDAsIDksIDgsIDEsIDEzLCAxMCxcbiAgMywgMTQsIDEyLCAzLCA5LCA1LCA3LCAxMiwgNSwgMiwgMTAsIDE1LCA2LCA4LCAxLCA2LFxuICAxLCA2LCA0LCAxMSwgMTEsIDEzLCAxMywgOCwgMTIsIDEsIDMsIDQsIDcsIDEwLCAxNCwgNyxcbiAgMTAsIDksIDE1LCA1LCA2LCAwLCA4LCAxNSwgMCwgMTQsIDUsIDIsIDksIDMsIDIsIDEyLFxuXG4gIDEzLCAxLCAyLCAxNSwgOCwgMTMsIDQsIDgsIDYsIDEwLCAxNSwgMywgMTEsIDcsIDEsIDQsXG4gIDEwLCAxMiwgOSwgNSwgMywgNiwgMTQsIDExLCA1LCAwLCAwLCAxNCwgMTIsIDksIDcsIDIsXG4gIDcsIDIsIDExLCAxLCA0LCAxNCwgMSwgNywgOSwgNCwgMTIsIDEwLCAxNCwgOCwgMiwgMTMsXG4gIDAsIDE1LCA2LCAxMiwgMTAsIDksIDEzLCAwLCAxNSwgMywgMywgNSwgNSwgNiwgOCwgMTFcbl07XG5cbmV4cG9ydHMuc3Vic3RpdHV0ZSA9IGZ1bmN0aW9uIHN1YnN0aXR1dGUoaW5MLCBpblIpIHtcbiAgdmFyIG91dCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgdmFyIGIgPSAoaW5MID4+PiAoMTggLSBpICogNikpICYgMHgzZjtcbiAgICB2YXIgc2IgPSBzVGFibGVbaSAqIDB4NDAgKyBiXTtcblxuICAgIG91dCA8PD0gNDtcbiAgICBvdXQgfD0gc2I7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICB2YXIgYiA9IChpblIgPj4+ICgxOCAtIGkgKiA2KSkgJiAweDNmO1xuICAgIHZhciBzYiA9IHNUYWJsZVs0ICogMHg0MCArIGkgKiAweDQwICsgYl07XG5cbiAgICBvdXQgPDw9IDQ7XG4gICAgb3V0IHw9IHNiO1xuICB9XG4gIHJldHVybiBvdXQgPj4+IDA7XG59O1xuXG52YXIgcGVybXV0ZVRhYmxlID0gW1xuICAxNiwgMjUsIDEyLCAxMSwgMywgMjAsIDQsIDE1LCAzMSwgMTcsIDksIDYsIDI3LCAxNCwgMSwgMjIsXG4gIDMwLCAyNCwgOCwgMTgsIDAsIDUsIDI5LCAyMywgMTMsIDE5LCAyLCAyNiwgMTAsIDIxLCAyOCwgN1xuXTtcblxuZXhwb3J0cy5wZXJtdXRlID0gZnVuY3Rpb24gcGVybXV0ZShudW0pIHtcbiAgdmFyIG91dCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGVybXV0ZVRhYmxlLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0IDw8PSAxO1xuICAgIG91dCB8PSAobnVtID4+PiBwZXJtdXRlVGFibGVbaV0pICYgMHgxO1xuICB9XG4gIHJldHVybiBvdXQgPj4+IDA7XG59O1xuXG5leHBvcnRzLnBhZFNwbGl0ID0gZnVuY3Rpb24gcGFkU3BsaXQobnVtLCBzaXplLCBncm91cCkge1xuICB2YXIgc3RyID0gbnVtLnRvU3RyaW5nKDIpO1xuICB3aGlsZSAoc3RyLmxlbmd0aCA8IHNpemUpXG4gICAgc3RyID0gJzAnICsgc3RyO1xuXG4gIHZhciBvdXQgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpICs9IGdyb3VwKVxuICAgIG91dC5wdXNoKHN0ci5zbGljZShpLCBpICsgZ3JvdXApKTtcbiAgcmV0dXJuIG91dC5qb2luKCcgJyk7XG59O1xuIiwidmFyIGdlbmVyYXRlUHJpbWUgPSByZXF1aXJlKCcuL2xpYi9nZW5lcmF0ZVByaW1lJylcbnZhciBwcmltZXMgPSByZXF1aXJlKCcuL2xpYi9wcmltZXMuanNvbicpXG5cbnZhciBESCA9IHJlcXVpcmUoJy4vbGliL2RoJylcblxuZnVuY3Rpb24gZ2V0RGlmZmllSGVsbG1hbiAobW9kKSB7XG4gIHZhciBwcmltZSA9IG5ldyBCdWZmZXIocHJpbWVzW21vZF0ucHJpbWUsICdoZXgnKVxuICB2YXIgZ2VuID0gbmV3IEJ1ZmZlcihwcmltZXNbbW9kXS5nZW4sICdoZXgnKVxuXG4gIHJldHVybiBuZXcgREgocHJpbWUsIGdlbilcbn1cblxudmFyIEVOQ09ESU5HUyA9IHtcbiAgJ2JpbmFyeSc6IHRydWUsICdoZXgnOiB0cnVlLCAnYmFzZTY0JzogdHJ1ZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEaWZmaWVIZWxsbWFuIChwcmltZSwgZW5jLCBnZW5lcmF0b3IsIGdlbmMpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihlbmMpIHx8IEVOQ09ESU5HU1tlbmNdID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY3JlYXRlRGlmZmllSGVsbG1hbihwcmltZSwgJ2JpbmFyeScsIGVuYywgZ2VuZXJhdG9yKVxuICB9XG5cbiAgZW5jID0gZW5jIHx8ICdiaW5hcnknXG4gIGdlbmMgPSBnZW5jIHx8ICdiaW5hcnknXG4gIGdlbmVyYXRvciA9IGdlbmVyYXRvciB8fCBuZXcgQnVmZmVyKFsyXSlcblxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihnZW5lcmF0b3IpKSB7XG4gICAgZ2VuZXJhdG9yID0gbmV3IEJ1ZmZlcihnZW5lcmF0b3IsIGdlbmMpXG4gIH1cblxuICBpZiAodHlwZW9mIHByaW1lID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBuZXcgREgoZ2VuZXJhdGVQcmltZShwcmltZSwgZ2VuZXJhdG9yKSwgZ2VuZXJhdG9yLCB0cnVlKVxuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIocHJpbWUpKSB7XG4gICAgcHJpbWUgPSBuZXcgQnVmZmVyKHByaW1lLCBlbmMpXG4gIH1cblxuICByZXR1cm4gbmV3IERIKHByaW1lLCBnZW5lcmF0b3IsIHRydWUpXG59XG5cbmV4cG9ydHMuRGlmZmllSGVsbG1hbkdyb3VwID0gZXhwb3J0cy5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAgPSBleHBvcnRzLmdldERpZmZpZUhlbGxtYW4gPSBnZXREaWZmaWVIZWxsbWFuXG5leHBvcnRzLmNyZWF0ZURpZmZpZUhlbGxtYW4gPSBleHBvcnRzLkRpZmZpZUhlbGxtYW4gPSBjcmVhdGVEaWZmaWVIZWxsbWFuXG4iLCJ2YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIE1pbGxlclJhYmluID0gcmVxdWlyZSgnbWlsbGVyLXJhYmluJyk7XG52YXIgbWlsbGVyUmFiaW4gPSBuZXcgTWlsbGVyUmFiaW4oKTtcbnZhciBUV0VOVFlGT1VSID0gbmV3IEJOKDI0KTtcbnZhciBFTEVWRU4gPSBuZXcgQk4oMTEpO1xudmFyIFRFTiA9IG5ldyBCTigxMCk7XG52YXIgVEhSRUUgPSBuZXcgQk4oMyk7XG52YXIgU0VWRU4gPSBuZXcgQk4oNyk7XG52YXIgcHJpbWVzID0gcmVxdWlyZSgnLi9nZW5lcmF0ZVByaW1lJyk7XG52YXIgcmFuZG9tQnl0ZXMgPSByZXF1aXJlKCdyYW5kb21ieXRlcycpO1xubW9kdWxlLmV4cG9ydHMgPSBESDtcblxuZnVuY3Rpb24gc2V0UHVibGljS2V5KHB1YiwgZW5jKSB7XG4gIGVuYyA9IGVuYyB8fCAndXRmOCc7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHB1YikpIHtcbiAgICBwdWIgPSBuZXcgQnVmZmVyKHB1YiwgZW5jKTtcbiAgfVxuICB0aGlzLl9wdWIgPSBuZXcgQk4ocHViKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHNldFByaXZhdGVLZXkocHJpdiwgZW5jKSB7XG4gIGVuYyA9IGVuYyB8fCAndXRmOCc7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHByaXYpKSB7XG4gICAgcHJpdiA9IG5ldyBCdWZmZXIocHJpdiwgZW5jKTtcbiAgfVxuICB0aGlzLl9wcml2ID0gbmV3IEJOKHByaXYpO1xuICByZXR1cm4gdGhpcztcbn1cblxudmFyIHByaW1lQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGNoZWNrUHJpbWUocHJpbWUsIGdlbmVyYXRvcikge1xuICB2YXIgZ2VuID0gZ2VuZXJhdG9yLnRvU3RyaW5nKCdoZXgnKTtcbiAgdmFyIGhleCA9IFtnZW4sIHByaW1lLnRvU3RyaW5nKDE2KV0uam9pbignXycpO1xuICBpZiAoaGV4IGluIHByaW1lQ2FjaGUpIHtcbiAgICByZXR1cm4gcHJpbWVDYWNoZVtoZXhdO1xuICB9XG4gIHZhciBlcnJvciA9IDA7XG5cbiAgaWYgKHByaW1lLmlzRXZlbigpIHx8XG4gICAgIXByaW1lcy5zaW1wbGVTaWV2ZSB8fFxuICAgICFwcmltZXMuZmVybWF0VGVzdChwcmltZSkgfHxcbiAgICAhbWlsbGVyUmFiaW4udGVzdChwcmltZSkpIHtcbiAgICAvL25vdCBhIHByaW1lIHNvICsxXG4gICAgZXJyb3IgKz0gMTtcblxuICAgIGlmIChnZW4gPT09ICcwMicgfHwgZ2VuID09PSAnMDUnKSB7XG4gICAgICAvLyB3ZSdkIGJlIGFibGUgdG8gY2hlY2sgdGhlIGdlbmVyYXRvclxuICAgICAgLy8gaXQgd291bGQgZmFpbCBzbyArOFxuICAgICAgZXJyb3IgKz0gODtcbiAgICB9IGVsc2Uge1xuICAgICAgLy93ZSB3b3VsZG4ndCBiZSBhYmxlIHRvIHRlc3QgdGhlIGdlbmVyYXRvclxuICAgICAgLy8gc28gKzRcbiAgICAgIGVycm9yICs9IDQ7XG4gICAgfVxuICAgIHByaW1lQ2FjaGVbaGV4XSA9IGVycm9yO1xuICAgIHJldHVybiBlcnJvcjtcbiAgfVxuICBpZiAoIW1pbGxlclJhYmluLnRlc3QocHJpbWUuc2hybigxKSkpIHtcbiAgICAvL25vdCBhIHNhZmUgcHJpbWVcbiAgICBlcnJvciArPSAyO1xuICB9XG4gIHZhciByZW07XG4gIHN3aXRjaCAoZ2VuKSB7XG4gICAgY2FzZSAnMDInOlxuICAgICAgaWYgKHByaW1lLm1vZChUV0VOVFlGT1VSKS5jbXAoRUxFVkVOKSkge1xuICAgICAgICAvLyB1bnN1aWRhYmxlIGdlbmVyYXRvclxuICAgICAgICBlcnJvciArPSA4O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnMDUnOlxuICAgICAgcmVtID0gcHJpbWUubW9kKFRFTik7XG4gICAgICBpZiAocmVtLmNtcChUSFJFRSkgJiYgcmVtLmNtcChTRVZFTikpIHtcbiAgICAgICAgLy8gcHJpbWUgbW9kIDEwIG5lZWRzIHRvIGVxdWFsIDMgb3IgN1xuICAgICAgICBlcnJvciArPSA4O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGVycm9yICs9IDQ7XG4gIH1cbiAgcHJpbWVDYWNoZVtoZXhdID0gZXJyb3I7XG4gIHJldHVybiBlcnJvcjtcbn1cblxuZnVuY3Rpb24gREgocHJpbWUsIGdlbmVyYXRvciwgbWFsbGVhYmxlKSB7XG4gIHRoaXMuc2V0R2VuZXJhdG9yKGdlbmVyYXRvcik7XG4gIHRoaXMuX19wcmltZSA9IG5ldyBCTihwcmltZSk7XG4gIHRoaXMuX3ByaW1lID0gQk4ubW9udCh0aGlzLl9fcHJpbWUpO1xuICB0aGlzLl9wcmltZUxlbiA9IHByaW1lLmxlbmd0aDtcbiAgdGhpcy5fcHViID0gdW5kZWZpbmVkO1xuICB0aGlzLl9wcml2ID0gdW5kZWZpbmVkO1xuICB0aGlzLl9wcmltZUNvZGUgPSB1bmRlZmluZWQ7XG4gIGlmIChtYWxsZWFibGUpIHtcbiAgICB0aGlzLnNldFB1YmxpY0tleSA9IHNldFB1YmxpY0tleTtcbiAgICB0aGlzLnNldFByaXZhdGVLZXkgPSBzZXRQcml2YXRlS2V5O1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX3ByaW1lQ29kZSA9IDg7XG4gIH1cbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShESC5wcm90b3R5cGUsICd2ZXJpZnlFcnJvcicsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9wcmltZUNvZGUgIT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLl9wcmltZUNvZGUgPSBjaGVja1ByaW1lKHRoaXMuX19wcmltZSwgdGhpcy5fX2dlbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9wcmltZUNvZGU7XG4gIH1cbn0pO1xuREgucHJvdG90eXBlLmdlbmVyYXRlS2V5cyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLl9wcml2KSB7XG4gICAgdGhpcy5fcHJpdiA9IG5ldyBCTihyYW5kb21CeXRlcyh0aGlzLl9wcmltZUxlbikpO1xuICB9XG4gIHRoaXMuX3B1YiA9IHRoaXMuX2dlbi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKTtcbiAgcmV0dXJuIHRoaXMuZ2V0UHVibGljS2V5KCk7XG59O1xuXG5ESC5wcm90b3R5cGUuY29tcHV0ZVNlY3JldCA9IGZ1bmN0aW9uIChvdGhlcikge1xuICBvdGhlciA9IG5ldyBCTihvdGhlcik7XG4gIG90aGVyID0gb3RoZXIudG9SZWQodGhpcy5fcHJpbWUpO1xuICB2YXIgc2VjcmV0ID0gb3RoZXIucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKTtcbiAgdmFyIG91dCA9IG5ldyBCdWZmZXIoc2VjcmV0LnRvQXJyYXkoKSk7XG4gIHZhciBwcmltZSA9IHRoaXMuZ2V0UHJpbWUoKTtcbiAgaWYgKG91dC5sZW5ndGggPCBwcmltZS5sZW5ndGgpIHtcbiAgICB2YXIgZnJvbnQgPSBuZXcgQnVmZmVyKHByaW1lLmxlbmd0aCAtIG91dC5sZW5ndGgpO1xuICAgIGZyb250LmZpbGwoMCk7XG4gICAgb3V0ID0gQnVmZmVyLmNvbmNhdChbZnJvbnQsIG91dF0pO1xuICB9XG4gIHJldHVybiBvdXQ7XG59O1xuXG5ESC5wcm90b3R5cGUuZ2V0UHVibGljS2V5ID0gZnVuY3Rpb24gZ2V0UHVibGljS2V5KGVuYykge1xuICByZXR1cm4gZm9ybWF0UmV0dXJuVmFsdWUodGhpcy5fcHViLCBlbmMpO1xufTtcblxuREgucHJvdG90eXBlLmdldFByaXZhdGVLZXkgPSBmdW5jdGlvbiBnZXRQcml2YXRlS2V5KGVuYykge1xuICByZXR1cm4gZm9ybWF0UmV0dXJuVmFsdWUodGhpcy5fcHJpdiwgZW5jKTtcbn07XG5cbkRILnByb3RvdHlwZS5nZXRQcmltZSA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgcmV0dXJuIGZvcm1hdFJldHVyblZhbHVlKHRoaXMuX19wcmltZSwgZW5jKTtcbn07XG5cbkRILnByb3RvdHlwZS5nZXRHZW5lcmF0b3IgPSBmdW5jdGlvbiAoZW5jKSB7XG4gIHJldHVybiBmb3JtYXRSZXR1cm5WYWx1ZSh0aGlzLl9nZW4sIGVuYyk7XG59O1xuXG5ESC5wcm90b3R5cGUuc2V0R2VuZXJhdG9yID0gZnVuY3Rpb24gKGdlbiwgZW5jKSB7XG4gIGVuYyA9IGVuYyB8fCAndXRmOCc7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGdlbikpIHtcbiAgICBnZW4gPSBuZXcgQnVmZmVyKGdlbiwgZW5jKTtcbiAgfVxuICB0aGlzLl9fZ2VuID0gZ2VuO1xuICB0aGlzLl9nZW4gPSBuZXcgQk4oZ2VuKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBmb3JtYXRSZXR1cm5WYWx1ZShibiwgZW5jKSB7XG4gIHZhciBidWYgPSBuZXcgQnVmZmVyKGJuLnRvQXJyYXkoKSk7XG4gIGlmICghZW5jKSB7XG4gICAgcmV0dXJuIGJ1ZjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYnVmLnRvU3RyaW5nKGVuYyk7XG4gIH1cbn1cbiIsInZhciByYW5kb21CeXRlcyA9IHJlcXVpcmUoJ3JhbmRvbWJ5dGVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZpbmRQcmltZTtcbmZpbmRQcmltZS5zaW1wbGVTaWV2ZSA9IHNpbXBsZVNpZXZlO1xuZmluZFByaW1lLmZlcm1hdFRlc3QgPSBmZXJtYXRUZXN0O1xudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBUV0VOVFlGT1VSID0gbmV3IEJOKDI0KTtcbnZhciBNaWxsZXJSYWJpbiA9IHJlcXVpcmUoJ21pbGxlci1yYWJpbicpO1xudmFyIG1pbGxlclJhYmluID0gbmV3IE1pbGxlclJhYmluKCk7XG52YXIgT05FID0gbmV3IEJOKDEpO1xudmFyIFRXTyA9IG5ldyBCTigyKTtcbnZhciBGSVZFID0gbmV3IEJOKDUpO1xudmFyIFNJWFRFRU4gPSBuZXcgQk4oMTYpO1xudmFyIEVJR0hUID0gbmV3IEJOKDgpO1xudmFyIFRFTiA9IG5ldyBCTigxMCk7XG52YXIgVEhSRUUgPSBuZXcgQk4oMyk7XG52YXIgU0VWRU4gPSBuZXcgQk4oNyk7XG52YXIgRUxFVkVOID0gbmV3IEJOKDExKTtcbnZhciBGT1VSID0gbmV3IEJOKDQpO1xudmFyIFRXRUxWRSA9IG5ldyBCTigxMik7XG52YXIgcHJpbWVzID0gbnVsbDtcblxuZnVuY3Rpb24gX2dldFByaW1lcygpIHtcbiAgaWYgKHByaW1lcyAhPT0gbnVsbClcbiAgICByZXR1cm4gcHJpbWVzO1xuXG4gIHZhciBsaW1pdCA9IDB4MTAwMDAwO1xuICB2YXIgcmVzID0gW107XG4gIHJlc1swXSA9IDI7XG4gIGZvciAodmFyIGkgPSAxLCBrID0gMzsgayA8IGxpbWl0OyBrICs9IDIpIHtcbiAgICB2YXIgc3FydCA9IE1hdGguY2VpbChNYXRoLnNxcnQoaykpO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgaSAmJiByZXNbal0gPD0gc3FydDsgaisrKVxuICAgICAgaWYgKGsgJSByZXNbal0gPT09IDApXG4gICAgICAgIGJyZWFrO1xuXG4gICAgaWYgKGkgIT09IGogJiYgcmVzW2pdIDw9IHNxcnQpXG4gICAgICBjb250aW51ZTtcblxuICAgIHJlc1tpKytdID0gaztcbiAgfVxuICBwcmltZXMgPSByZXM7XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIHNpbXBsZVNpZXZlKHApIHtcbiAgdmFyIHByaW1lcyA9IF9nZXRQcmltZXMoKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByaW1lcy5sZW5ndGg7IGkrKylcbiAgICBpZiAocC5tb2RuKHByaW1lc1tpXSkgPT09IDApIHtcbiAgICAgIGlmIChwLmNtcG4ocHJpbWVzW2ldKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGZlcm1hdFRlc3QocCkge1xuICB2YXIgcmVkID0gQk4ubW9udChwKTtcbiAgcmV0dXJuIFRXTy50b1JlZChyZWQpLnJlZFBvdyhwLnN1Ym4oMSkpLmZyb21SZWQoKS5jbXBuKDEpID09PSAwO1xufVxuXG5mdW5jdGlvbiBmaW5kUHJpbWUoYml0cywgZ2VuKSB7XG4gIGlmIChiaXRzIDwgMTYpIHtcbiAgICAvLyB0aGlzIGlzIHdoYXQgb3BlbnNzbCBkb2VzXG4gICAgaWYgKGdlbiA9PT0gMiB8fCBnZW4gPT09IDUpIHtcbiAgICAgIHJldHVybiBuZXcgQk4oWzB4OGMsIDB4N2JdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBCTihbMHg4YywgMHgyN10pO1xuICAgIH1cbiAgfVxuICBnZW4gPSBuZXcgQk4oZ2VuKTtcblxuICB2YXIgbnVtLCBuMjtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIG51bSA9IG5ldyBCTihyYW5kb21CeXRlcyhNYXRoLmNlaWwoYml0cyAvIDgpKSk7XG4gICAgd2hpbGUgKG51bS5iaXRMZW5ndGgoKSA+IGJpdHMpIHtcbiAgICAgIG51bS5pc2hybigxKTtcbiAgICB9XG4gICAgaWYgKG51bS5pc0V2ZW4oKSkge1xuICAgICAgbnVtLmlhZGQoT05FKTtcbiAgICB9XG4gICAgaWYgKCFudW0udGVzdG4oMSkpIHtcbiAgICAgIG51bS5pYWRkKFRXTyk7XG4gICAgfVxuICAgIGlmICghZ2VuLmNtcChUV08pKSB7XG4gICAgICB3aGlsZSAobnVtLm1vZChUV0VOVFlGT1VSKS5jbXAoRUxFVkVOKSkge1xuICAgICAgICBudW0uaWFkZChGT1VSKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFnZW4uY21wKEZJVkUpKSB7XG4gICAgICB3aGlsZSAobnVtLm1vZChURU4pLmNtcChUSFJFRSkpIHtcbiAgICAgICAgbnVtLmlhZGQoRk9VUik7XG4gICAgICB9XG4gICAgfVxuICAgIG4yID0gbnVtLnNocm4oMSk7XG4gICAgaWYgKHNpbXBsZVNpZXZlKG4yKSAmJiBzaW1wbGVTaWV2ZShudW0pICYmXG4gICAgICBmZXJtYXRUZXN0KG4yKSAmJiBmZXJtYXRUZXN0KG51bSkgJiZcbiAgICAgIG1pbGxlclJhYmluLnRlc3QobjIpICYmIG1pbGxlclJhYmluLnRlc3QobnVtKSkge1xuICAgICAgcmV0dXJuIG51bTtcbiAgICB9XG4gIH1cblxufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICAgIFwibW9kcDFcIjoge1xuICAgICAgICBcImdlblwiOiBcIjAyXCIsXG4gICAgICAgIFwicHJpbWVcIjogXCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjNhMzYyMGZmZmZmZmZmZmZmZmZmZmZcIlxuICAgIH0sXG4gICAgXCJtb2RwMlwiOiB7XG4gICAgICAgIFwiZ2VuXCI6IFwiMDJcIixcbiAgICAgICAgXCJwcmltZVwiOiBcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U2NTM4MWZmZmZmZmZmZmZmZmZmZmZcIlxuICAgIH0sXG4gICAgXCJtb2RwNVwiOiB7XG4gICAgICAgIFwiZ2VuXCI6IFwiMDJcIixcbiAgICAgICAgXCJwcmltZVwiOiBcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMjM3MzI3ZmZmZmZmZmZmZmZmZmZmZlwiXG4gICAgfSxcbiAgICBcIm1vZHAxNFwiOiB7XG4gICAgICAgIFwiZ2VuXCI6IFwiMDJcIixcbiAgICAgICAgXCJwcmltZVwiOiBcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhY2FhNjhmZmZmZmZmZmZmZmZmZmZmXCJcbiAgICB9LFxuICAgIFwibW9kcDE1XCI6IHtcbiAgICAgICAgXCJnZW5cIjogXCIwMlwiLFxuICAgICAgICBcInByaW1lXCI6IFwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkzYWQyY2FmZmZmZmZmZmZmZmZmZmZmXCJcbiAgICB9LFxuICAgIFwibW9kcDE2XCI6IHtcbiAgICAgICAgXCJnZW5cIjogXCIwMlwiLFxuICAgICAgICBcInByaW1lXCI6IFwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDYzMTk5ZmZmZmZmZmZmZmZmZmZmZlwiXG4gICAgfSxcbiAgICBcIm1vZHAxN1wiOiB7XG4gICAgICAgIFwiZ2VuXCI6IFwiMDJcIixcbiAgICAgICAgXCJwcmltZVwiOiBcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkY2M0MDI0ZmZmZmZmZmZmZmZmZmZmZlwiXG4gICAgfSxcbiAgICBcIm1vZHAxOFwiOiB7XG4gICAgICAgIFwiZ2VuXCI6IFwiMDJcIixcbiAgICAgICAgXCJwcmltZVwiOiBcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkYmUxMTU5NzRhMzkyNmYxMmZlZTVlNDM4Nzc3Y2I2YTkzMmRmOGNkOGJlYzRkMDczYjkzMWJhM2JjODMyYjY4ZDlkZDMwMDc0MWZhN2JmOGFmYzQ3ZWQyNTc2ZjY5MzZiYTQyNDY2M2FhYjYzOWM1YWU0ZjU2ODM0MjNiNDc0MmJmMWM5NzgyMzhmMTZjYmUzOWQ2NTJkZTNmZGI4YmVmYzg0OGFkOTIyMjIyZTA0YTQwMzdjMDcxM2ViNTdhODFhMjNmMGM3MzQ3M2ZjNjQ2Y2VhMzA2YjRiY2JjODg2MmY4Mzg1ZGRmYTlkNGI3ZmEyYzA4N2U4Nzk2ODMzMDNlZDViZGQzYTA2MmIzY2Y1YjNhMjc4YTY2ZDJhMTNmODNmNDRmODJkZGYzMTBlZTA3NGFiNmEzNjQ1OTdlODk5YTAyNTVkYzE2NGYzMWNjNTA4NDY4NTFkZjlhYjQ4MTk1ZGVkN2VhMWIxZDUxMGJkN2VlNzRkNzNmYWYzNmJjMzFlY2ZhMjY4MzU5MDQ2ZjRlYjg3OWY5MjQwMDk0MzhiNDgxYzZjZDc4ODlhMDAyZWQ1ZWUzODJiYzkxOTBkYTZmYzAyNmU0Nzk1NThlNDQ3NTY3N2U5YWE5ZTMwNTBlMjc2NTY5NGRmYzgxZjU2ZTg4MGI5NmU3MTYwYzk4MGRkOThlZGQzZGZmZmZmZmZmZmZmZmZmZmZmXCJcbiAgICB9XG59IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZWxsaXB0aWMgPSBleHBvcnRzO1xuXG5lbGxpcHRpYy52ZXJzaW9uID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbmVsbGlwdGljLnV0aWxzID0gcmVxdWlyZSgnLi9lbGxpcHRpYy91dGlscycpO1xuZWxsaXB0aWMucmFuZCA9IHJlcXVpcmUoJ2Jyb3JhbmQnKTtcbmVsbGlwdGljLmN1cnZlID0gcmVxdWlyZSgnLi9lbGxpcHRpYy9jdXJ2ZScpO1xuZWxsaXB0aWMuY3VydmVzID0gcmVxdWlyZSgnLi9lbGxpcHRpYy9jdXJ2ZXMnKTtcblxuLy8gUHJvdG9jb2xzXG5lbGxpcHRpYy5lYyA9IHJlcXVpcmUoJy4vZWxsaXB0aWMvZWMnKTtcbmVsbGlwdGljLmVkZHNhID0gcmVxdWlyZSgnLi9lbGxpcHRpYy9lZGRzYScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciB1dGlscyA9IGVsbGlwdGljLnV0aWxzO1xudmFyIGdldE5BRiA9IHV0aWxzLmdldE5BRjtcbnZhciBnZXRKU0YgPSB1dGlscy5nZXRKU0Y7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBCYXNlQ3VydmUodHlwZSwgY29uZikge1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnAgPSBuZXcgQk4oY29uZi5wLCAxNik7XG5cbiAgLy8gVXNlIE1vbnRnb21lcnksIHdoZW4gdGhlcmUgaXMgbm8gZmFzdCByZWR1Y3Rpb24gZm9yIHRoZSBwcmltZVxuICB0aGlzLnJlZCA9IGNvbmYucHJpbWUgPyBCTi5yZWQoY29uZi5wcmltZSkgOiBCTi5tb250KHRoaXMucCk7XG5cbiAgLy8gVXNlZnVsIGZvciBtYW55IGN1cnZlc1xuICB0aGlzLnplcm8gPSBuZXcgQk4oMCkudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLm9uZSA9IG5ldyBCTigxKS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMudHdvID0gbmV3IEJOKDIpLnRvUmVkKHRoaXMucmVkKTtcblxuICAvLyBDdXJ2ZSBjb25maWd1cmF0aW9uLCBvcHRpb25hbFxuICB0aGlzLm4gPSBjb25mLm4gJiYgbmV3IEJOKGNvbmYubiwgMTYpO1xuICB0aGlzLmcgPSBjb25mLmcgJiYgdGhpcy5wb2ludEZyb21KU09OKGNvbmYuZywgY29uZi5nUmVkKTtcblxuICAvLyBUZW1wb3JhcnkgYXJyYXlzXG4gIHRoaXMuX3duYWZUMSA9IG5ldyBBcnJheSg0KTtcbiAgdGhpcy5fd25hZlQyID0gbmV3IEFycmF5KDQpO1xuICB0aGlzLl93bmFmVDMgPSBuZXcgQXJyYXkoNCk7XG4gIHRoaXMuX3duYWZUNCA9IG5ldyBBcnJheSg0KTtcblxuICAvLyBHZW5lcmFsaXplZCBHcmVnIE1heHdlbGwncyB0cmlja1xuICB2YXIgYWRqdXN0Q291bnQgPSB0aGlzLm4gJiYgdGhpcy5wLmRpdih0aGlzLm4pO1xuICBpZiAoIWFkanVzdENvdW50IHx8IGFkanVzdENvdW50LmNtcG4oMTAwKSA+IDApIHtcbiAgICB0aGlzLnJlZE4gPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX21heHdlbGxUcmljayA9IHRydWU7XG4gICAgdGhpcy5yZWROID0gdGhpcy5uLnRvUmVkKHRoaXMucmVkKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBCYXNlQ3VydmU7XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUucG9pbnQgPSBmdW5jdGlvbiBwb2ludCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZSgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUuX2ZpeGVkTmFmTXVsID0gZnVuY3Rpb24gX2ZpeGVkTmFmTXVsKHAsIGspIHtcbiAgYXNzZXJ0KHAucHJlY29tcHV0ZWQpO1xuICB2YXIgZG91YmxlcyA9IHAuX2dldERvdWJsZXMoKTtcblxuICB2YXIgbmFmID0gZ2V0TkFGKGssIDEpO1xuICB2YXIgSSA9ICgxIDw8IChkb3VibGVzLnN0ZXAgKyAxKSkgLSAoZG91Ymxlcy5zdGVwICUgMiA9PT0gMCA/IDIgOiAxKTtcbiAgSSAvPSAzO1xuXG4gIC8vIFRyYW5zbGF0ZSBpbnRvIG1vcmUgd2luZG93ZWQgZm9ybVxuICB2YXIgcmVwciA9IFtdO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IG5hZi5sZW5ndGg7IGogKz0gZG91Ymxlcy5zdGVwKSB7XG4gICAgdmFyIG5hZlcgPSAwO1xuICAgIGZvciAodmFyIGsgPSBqICsgZG91Ymxlcy5zdGVwIC0gMTsgayA+PSBqOyBrLS0pXG4gICAgICBuYWZXID0gKG5hZlcgPDwgMSkgKyBuYWZba107XG4gICAgcmVwci5wdXNoKG5hZlcpO1xuICB9XG5cbiAgdmFyIGEgPSB0aGlzLmpwb2ludChudWxsLCBudWxsLCBudWxsKTtcbiAgdmFyIGIgPSB0aGlzLmpwb2ludChudWxsLCBudWxsLCBudWxsKTtcbiAgZm9yICh2YXIgaSA9IEk7IGkgPiAwOyBpLS0pIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJlcHIubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBuYWZXID0gcmVwcltqXTtcbiAgICAgIGlmIChuYWZXID09PSBpKVxuICAgICAgICBiID0gYi5taXhlZEFkZChkb3VibGVzLnBvaW50c1tqXSk7XG4gICAgICBlbHNlIGlmIChuYWZXID09PSAtaSlcbiAgICAgICAgYiA9IGIubWl4ZWRBZGQoZG91Ymxlcy5wb2ludHNbal0ubmVnKCkpO1xuICAgIH1cbiAgICBhID0gYS5hZGQoYik7XG4gIH1cbiAgcmV0dXJuIGEudG9QKCk7XG59O1xuXG5CYXNlQ3VydmUucHJvdG90eXBlLl93bmFmTXVsID0gZnVuY3Rpb24gX3duYWZNdWwocCwgaykge1xuICB2YXIgdyA9IDQ7XG5cbiAgLy8gUHJlY29tcHV0ZSB3aW5kb3dcbiAgdmFyIG5hZlBvaW50cyA9IHAuX2dldE5BRlBvaW50cyh3KTtcbiAgdyA9IG5hZlBvaW50cy53bmQ7XG4gIHZhciB3bmQgPSBuYWZQb2ludHMucG9pbnRzO1xuXG4gIC8vIEdldCBOQUYgZm9ybVxuICB2YXIgbmFmID0gZ2V0TkFGKGssIHcpO1xuXG4gIC8vIEFkZCBgdGhpc2AqKE4rMSkgZm9yIGV2ZXJ5IHctTkFGIGluZGV4XG4gIHZhciBhY2MgPSB0aGlzLmpwb2ludChudWxsLCBudWxsLCBudWxsKTtcbiAgZm9yICh2YXIgaSA9IG5hZi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIC8vIENvdW50IHplcm9lc1xuICAgIGZvciAodmFyIGsgPSAwOyBpID49IDAgJiYgbmFmW2ldID09PSAwOyBpLS0pXG4gICAgICBrKys7XG4gICAgaWYgKGkgPj0gMClcbiAgICAgIGsrKztcbiAgICBhY2MgPSBhY2MuZGJscChrKTtcblxuICAgIGlmIChpIDwgMClcbiAgICAgIGJyZWFrO1xuICAgIHZhciB6ID0gbmFmW2ldO1xuICAgIGFzc2VydCh6ICE9PSAwKTtcbiAgICBpZiAocC50eXBlID09PSAnYWZmaW5lJykge1xuICAgICAgLy8gSiArLSBQXG4gICAgICBpZiAoeiA+IDApXG4gICAgICAgIGFjYyA9IGFjYy5taXhlZEFkZCh3bmRbKHogLSAxKSA+PiAxXSk7XG4gICAgICBlbHNlXG4gICAgICAgIGFjYyA9IGFjYy5taXhlZEFkZCh3bmRbKC16IC0gMSkgPj4gMV0ubmVnKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBKICstIEpcbiAgICAgIGlmICh6ID4gMClcbiAgICAgICAgYWNjID0gYWNjLmFkZCh3bmRbKHogLSAxKSA+PiAxXSk7XG4gICAgICBlbHNlXG4gICAgICAgIGFjYyA9IGFjYy5hZGQod25kWygteiAtIDEpID4+IDFdLm5lZygpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHAudHlwZSA9PT0gJ2FmZmluZScgPyBhY2MudG9QKCkgOiBhY2M7XG59O1xuXG5CYXNlQ3VydmUucHJvdG90eXBlLl93bmFmTXVsQWRkID0gZnVuY3Rpb24gX3duYWZNdWxBZGQoZGVmVyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZmZzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYWNvYmlhblJlc3VsdCkge1xuICB2YXIgd25kV2lkdGggPSB0aGlzLl93bmFmVDE7XG4gIHZhciB3bmQgPSB0aGlzLl93bmFmVDI7XG4gIHZhciBuYWYgPSB0aGlzLl93bmFmVDM7XG5cbiAgLy8gRmlsbCBhbGwgYXJyYXlzXG4gIHZhciBtYXggPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIHAgPSBwb2ludHNbaV07XG4gICAgdmFyIG5hZlBvaW50cyA9IHAuX2dldE5BRlBvaW50cyhkZWZXKTtcbiAgICB3bmRXaWR0aFtpXSA9IG5hZlBvaW50cy53bmQ7XG4gICAgd25kW2ldID0gbmFmUG9pbnRzLnBvaW50cztcbiAgfVxuXG4gIC8vIENvbWIgc21hbGwgd2luZG93IE5BRnNcbiAgZm9yICh2YXIgaSA9IGxlbiAtIDE7IGkgPj0gMTsgaSAtPSAyKSB7XG4gICAgdmFyIGEgPSBpIC0gMTtcbiAgICB2YXIgYiA9IGk7XG4gICAgaWYgKHduZFdpZHRoW2FdICE9PSAxIHx8IHduZFdpZHRoW2JdICE9PSAxKSB7XG4gICAgICBuYWZbYV0gPSBnZXROQUYoY29lZmZzW2FdLCB3bmRXaWR0aFthXSk7XG4gICAgICBuYWZbYl0gPSBnZXROQUYoY29lZmZzW2JdLCB3bmRXaWR0aFtiXSk7XG4gICAgICBtYXggPSBNYXRoLm1heChuYWZbYV0ubGVuZ3RoLCBtYXgpO1xuICAgICAgbWF4ID0gTWF0aC5tYXgobmFmW2JdLmxlbmd0aCwgbWF4KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBjb21iID0gW1xuICAgICAgcG9pbnRzW2FdLCAvKiAxICovXG4gICAgICBudWxsLCAvKiAzICovXG4gICAgICBudWxsLCAvKiA1ICovXG4gICAgICBwb2ludHNbYl0gLyogNyAqL1xuICAgIF07XG5cbiAgICAvLyBUcnkgdG8gYXZvaWQgUHJvamVjdGl2ZSBwb2ludHMsIGlmIHBvc3NpYmxlXG4gICAgaWYgKHBvaW50c1thXS55LmNtcChwb2ludHNbYl0ueSkgPT09IDApIHtcbiAgICAgIGNvbWJbMV0gPSBwb2ludHNbYV0uYWRkKHBvaW50c1tiXSk7XG4gICAgICBjb21iWzJdID0gcG9pbnRzW2FdLnRvSigpLm1peGVkQWRkKHBvaW50c1tiXS5uZWcoKSk7XG4gICAgfSBlbHNlIGlmIChwb2ludHNbYV0ueS5jbXAocG9pbnRzW2JdLnkucmVkTmVnKCkpID09PSAwKSB7XG4gICAgICBjb21iWzFdID0gcG9pbnRzW2FdLnRvSigpLm1peGVkQWRkKHBvaW50c1tiXSk7XG4gICAgICBjb21iWzJdID0gcG9pbnRzW2FdLmFkZChwb2ludHNbYl0ubmVnKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21iWzFdID0gcG9pbnRzW2FdLnRvSigpLm1peGVkQWRkKHBvaW50c1tiXSk7XG4gICAgICBjb21iWzJdID0gcG9pbnRzW2FdLnRvSigpLm1peGVkQWRkKHBvaW50c1tiXS5uZWcoKSk7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gW1xuICAgICAgLTMsIC8qIC0xIC0xICovXG4gICAgICAtMSwgLyogLTEgMCAqL1xuICAgICAgLTUsIC8qIC0xIDEgKi9cbiAgICAgIC03LCAvKiAwIC0xICovXG4gICAgICAwLCAvKiAwIDAgKi9cbiAgICAgIDcsIC8qIDAgMSAqL1xuICAgICAgNSwgLyogMSAtMSAqL1xuICAgICAgMSwgLyogMSAwICovXG4gICAgICAzICAvKiAxIDEgKi9cbiAgICBdO1xuXG4gICAgdmFyIGpzZiA9IGdldEpTRihjb2VmZnNbYV0sIGNvZWZmc1tiXSk7XG4gICAgbWF4ID0gTWF0aC5tYXgoanNmWzBdLmxlbmd0aCwgbWF4KTtcbiAgICBuYWZbYV0gPSBuZXcgQXJyYXkobWF4KTtcbiAgICBuYWZbYl0gPSBuZXcgQXJyYXkobWF4KTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1heDsgaisrKSB7XG4gICAgICB2YXIgamEgPSBqc2ZbMF1bal0gfCAwO1xuICAgICAgdmFyIGpiID0ganNmWzFdW2pdIHwgMDtcblxuICAgICAgbmFmW2FdW2pdID0gaW5kZXhbKGphICsgMSkgKiAzICsgKGpiICsgMSldO1xuICAgICAgbmFmW2JdW2pdID0gMDtcbiAgICAgIHduZFthXSA9IGNvbWI7XG4gICAgfVxuICB9XG5cbiAgdmFyIGFjYyA9IHRoaXMuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuICB2YXIgdG1wID0gdGhpcy5fd25hZlQ0O1xuICBmb3IgKHZhciBpID0gbWF4OyBpID49IDA7IGktLSkge1xuICAgIHZhciBrID0gMDtcblxuICAgIHdoaWxlIChpID49IDApIHtcbiAgICAgIHZhciB6ZXJvID0gdHJ1ZTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgdG1wW2pdID0gbmFmW2pdW2ldIHwgMDtcbiAgICAgICAgaWYgKHRtcFtqXSAhPT0gMClcbiAgICAgICAgICB6ZXJvID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIXplcm8pXG4gICAgICAgIGJyZWFrO1xuICAgICAgaysrO1xuICAgICAgaS0tO1xuICAgIH1cbiAgICBpZiAoaSA+PSAwKVxuICAgICAgaysrO1xuICAgIGFjYyA9IGFjYy5kYmxwKGspO1xuICAgIGlmIChpIDwgMClcbiAgICAgIGJyZWFrO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW47IGorKykge1xuICAgICAgdmFyIHogPSB0bXBbal07XG4gICAgICB2YXIgcDtcbiAgICAgIGlmICh6ID09PSAwKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGVsc2UgaWYgKHogPiAwKVxuICAgICAgICBwID0gd25kW2pdWyh6IC0gMSkgPj4gMV07XG4gICAgICBlbHNlIGlmICh6IDwgMClcbiAgICAgICAgcCA9IHduZFtqXVsoLXogLSAxKSA+PiAxXS5uZWcoKTtcblxuICAgICAgaWYgKHAudHlwZSA9PT0gJ2FmZmluZScpXG4gICAgICAgIGFjYyA9IGFjYy5taXhlZEFkZChwKTtcbiAgICAgIGVsc2VcbiAgICAgICAgYWNjID0gYWNjLmFkZChwKTtcbiAgICB9XG4gIH1cbiAgLy8gWmVyb2lmeSByZWZlcmVuY2VzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgd25kW2ldID0gbnVsbDtcblxuICBpZiAoamFjb2JpYW5SZXN1bHQpXG4gICAgcmV0dXJuIGFjYztcbiAgZWxzZVxuICAgIHJldHVybiBhY2MudG9QKCk7XG59O1xuXG5mdW5jdGlvbiBCYXNlUG9pbnQoY3VydmUsIHR5cGUpIHtcbiAgdGhpcy5jdXJ2ZSA9IGN1cnZlO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnByZWNvbXB1dGVkID0gbnVsbDtcbn1cbkJhc2VDdXJ2ZS5CYXNlUG9pbnQgPSBCYXNlUG9pbnQ7XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcSgvKm90aGVyKi8pIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZSgpIHtcbiAgcmV0dXJuIHRoaXMuY3VydmUudmFsaWRhdGUodGhpcyk7XG59O1xuXG5CYXNlQ3VydmUucHJvdG90eXBlLmRlY29kZVBvaW50ID0gZnVuY3Rpb24gZGVjb2RlUG9pbnQoYnl0ZXMsIGVuYykge1xuICBieXRlcyA9IHV0aWxzLnRvQXJyYXkoYnl0ZXMsIGVuYyk7XG5cbiAgdmFyIGxlbiA9IHRoaXMucC5ieXRlTGVuZ3RoKCk7XG5cbiAgLy8gdW5jb21wcmVzc2VkLCBoeWJyaWQtb2RkLCBoeWJyaWQtZXZlblxuICBpZiAoKGJ5dGVzWzBdID09PSAweDA0IHx8IGJ5dGVzWzBdID09PSAweDA2IHx8IGJ5dGVzWzBdID09PSAweDA3KSAmJlxuICAgICAgYnl0ZXMubGVuZ3RoIC0gMSA9PT0gMiAqIGxlbikge1xuICAgIGlmIChieXRlc1swXSA9PT0gMHgwNilcbiAgICAgIGFzc2VydChieXRlc1tieXRlcy5sZW5ndGggLSAxXSAlIDIgPT09IDApO1xuICAgIGVsc2UgaWYgKGJ5dGVzWzBdID09PSAweDA3KVxuICAgICAgYXNzZXJ0KGJ5dGVzW2J5dGVzLmxlbmd0aCAtIDFdICUgMiA9PT0gMSk7XG5cbiAgICB2YXIgcmVzID0gIHRoaXMucG9pbnQoYnl0ZXMuc2xpY2UoMSwgMSArIGxlbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzLnNsaWNlKDEgKyBsZW4sIDEgKyAyICogbGVuKSk7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9IGVsc2UgaWYgKChieXRlc1swXSA9PT0gMHgwMiB8fCBieXRlc1swXSA9PT0gMHgwMykgJiZcbiAgICAgICAgICAgICAgYnl0ZXMubGVuZ3RoIC0gMSA9PT0gbGVuKSB7XG4gICAgcmV0dXJuIHRoaXMucG9pbnRGcm9tWChieXRlcy5zbGljZSgxLCAxICsgbGVuKSwgYnl0ZXNbMF0gPT09IDB4MDMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignVW5rbm93biBwb2ludCBmb3JtYXQnKTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuZW5jb2RlQ29tcHJlc3NlZCA9IGZ1bmN0aW9uIGVuY29kZUNvbXByZXNzZWQoZW5jKSB7XG4gIHJldHVybiB0aGlzLmVuY29kZShlbmMsIHRydWUpO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5fZW5jb2RlID0gZnVuY3Rpb24gX2VuY29kZShjb21wYWN0KSB7XG4gIHZhciBsZW4gPSB0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpO1xuICB2YXIgeCA9IHRoaXMuZ2V0WCgpLnRvQXJyYXkoJ2JlJywgbGVuKTtcblxuICBpZiAoY29tcGFjdClcbiAgICByZXR1cm4gWyB0aGlzLmdldFkoKS5pc0V2ZW4oKSA/IDB4MDIgOiAweDAzIF0uY29uY2F0KHgpO1xuXG4gIHJldHVybiBbIDB4MDQgXS5jb25jYXQoeCwgdGhpcy5nZXRZKCkudG9BcnJheSgnYmUnLCBsZW4pKSA7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShlbmMsIGNvbXBhY3QpIHtcbiAgcmV0dXJuIHV0aWxzLmVuY29kZSh0aGlzLl9lbmNvZGUoY29tcGFjdCksIGVuYyk7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLnByZWNvbXB1dGUgPSBmdW5jdGlvbiBwcmVjb21wdXRlKHBvd2VyKSB7XG4gIGlmICh0aGlzLnByZWNvbXB1dGVkKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIHZhciBwcmVjb21wdXRlZCA9IHtcbiAgICBkb3VibGVzOiBudWxsLFxuICAgIG5hZjogbnVsbCxcbiAgICBiZXRhOiBudWxsXG4gIH07XG4gIHByZWNvbXB1dGVkLm5hZiA9IHRoaXMuX2dldE5BRlBvaW50cyg4KTtcbiAgcHJlY29tcHV0ZWQuZG91YmxlcyA9IHRoaXMuX2dldERvdWJsZXMoNCwgcG93ZXIpO1xuICBwcmVjb21wdXRlZC5iZXRhID0gdGhpcy5fZ2V0QmV0YSgpO1xuICB0aGlzLnByZWNvbXB1dGVkID0gcHJlY29tcHV0ZWQ7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLl9oYXNEb3VibGVzID0gZnVuY3Rpb24gX2hhc0RvdWJsZXMoaykge1xuICBpZiAoIXRoaXMucHJlY29tcHV0ZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBkb3VibGVzID0gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO1xuICBpZiAoIWRvdWJsZXMpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiBkb3VibGVzLnBvaW50cy5sZW5ndGggPj0gTWF0aC5jZWlsKChrLmJpdExlbmd0aCgpICsgMSkgLyBkb3VibGVzLnN0ZXApO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5fZ2V0RG91YmxlcyA9IGZ1bmN0aW9uIF9nZXREb3VibGVzKHN0ZXAsIHBvd2VyKSB7XG4gIGlmICh0aGlzLnByZWNvbXB1dGVkICYmIHRoaXMucHJlY29tcHV0ZWQuZG91YmxlcylcbiAgICByZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO1xuXG4gIHZhciBkb3VibGVzID0gWyB0aGlzIF07XG4gIHZhciBhY2MgPSB0aGlzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvd2VyOyBpICs9IHN0ZXApIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN0ZXA7IGorKylcbiAgICAgIGFjYyA9IGFjYy5kYmwoKTtcbiAgICBkb3VibGVzLnB1c2goYWNjKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHN0ZXA6IHN0ZXAsXG4gICAgcG9pbnRzOiBkb3VibGVzXG4gIH07XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLl9nZXROQUZQb2ludHMgPSBmdW5jdGlvbiBfZ2V0TkFGUG9pbnRzKHduZCkge1xuICBpZiAodGhpcy5wcmVjb21wdXRlZCAmJiB0aGlzLnByZWNvbXB1dGVkLm5hZilcbiAgICByZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7XG5cbiAgdmFyIHJlcyA9IFsgdGhpcyBdO1xuICB2YXIgbWF4ID0gKDEgPDwgd25kKSAtIDE7XG4gIHZhciBkYmwgPSBtYXggPT09IDEgPyBudWxsIDogdGhpcy5kYmwoKTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBtYXg7IGkrKylcbiAgICByZXNbaV0gPSByZXNbaSAtIDFdLmFkZChkYmwpO1xuICByZXR1cm4ge1xuICAgIHduZDogd25kLFxuICAgIHBvaW50czogcmVzXG4gIH07XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLl9nZXRCZXRhID0gZnVuY3Rpb24gX2dldEJldGEoKSB7XG4gIHJldHVybiBudWxsO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5kYmxwID0gZnVuY3Rpb24gZGJscChrKSB7XG4gIHZhciByID0gdGhpcztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrOyBpKyspXG4gICAgciA9IHIuZGJsKCk7XG4gIHJldHVybiByO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGN1cnZlID0gcmVxdWlyZSgnLi4vY3VydmUnKTtcbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbnZhciBCYXNlID0gY3VydmUuYmFzZTtcblxudmFyIGFzc2VydCA9IGVsbGlwdGljLnV0aWxzLmFzc2VydDtcblxuZnVuY3Rpb24gRWR3YXJkc0N1cnZlKGNvbmYpIHtcbiAgLy8gTk9URTogSW1wb3J0YW50IGFzIHdlIGFyZSBjcmVhdGluZyBwb2ludCBpbiBCYXNlLmNhbGwoKVxuICB0aGlzLnR3aXN0ZWQgPSAoY29uZi5hIHwgMCkgIT09IDE7XG4gIHRoaXMubU9uZUEgPSB0aGlzLnR3aXN0ZWQgJiYgKGNvbmYuYSB8IDApID09PSAtMTtcbiAgdGhpcy5leHRlbmRlZCA9IHRoaXMubU9uZUE7XG5cbiAgQmFzZS5jYWxsKHRoaXMsICdlZHdhcmRzJywgY29uZik7XG5cbiAgdGhpcy5hID0gbmV3IEJOKGNvbmYuYSwgMTYpLnVtb2QodGhpcy5yZWQubSk7XG4gIHRoaXMuYSA9IHRoaXMuYS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuYyA9IG5ldyBCTihjb25mLmMsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuYzIgPSB0aGlzLmMucmVkU3FyKCk7XG4gIHRoaXMuZCA9IG5ldyBCTihjb25mLmQsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuZGQgPSB0aGlzLmQucmVkQWRkKHRoaXMuZCk7XG5cbiAgYXNzZXJ0KCF0aGlzLnR3aXN0ZWQgfHwgdGhpcy5jLmZyb21SZWQoKS5jbXBuKDEpID09PSAwKTtcbiAgdGhpcy5vbmVDID0gKGNvbmYuYyB8IDApID09PSAxO1xufVxuaW5oZXJpdHMoRWR3YXJkc0N1cnZlLCBCYXNlKTtcbm1vZHVsZS5leHBvcnRzID0gRWR3YXJkc0N1cnZlO1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLl9tdWxBID0gZnVuY3Rpb24gX211bEEobnVtKSB7XG4gIGlmICh0aGlzLm1PbmVBKVxuICAgIHJldHVybiBudW0ucmVkTmVnKCk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5hLnJlZE11bChudW0pO1xufTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5fbXVsQyA9IGZ1bmN0aW9uIF9tdWxDKG51bSkge1xuICBpZiAodGhpcy5vbmVDKVxuICAgIHJldHVybiBudW07XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5jLnJlZE11bChudW0pO1xufTtcblxuLy8gSnVzdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFNob3J0IGN1cnZlXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLmpwb2ludCA9IGZ1bmN0aW9uIGpwb2ludCh4LCB5LCB6LCB0KSB7XG4gIHJldHVybiB0aGlzLnBvaW50KHgsIHksIHosIHQpO1xufTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5wb2ludEZyb21YID0gZnVuY3Rpb24gcG9pbnRGcm9tWCh4LCBvZGQpIHtcbiAgeCA9IG5ldyBCTih4LCAxNik7XG4gIGlmICgheC5yZWQpXG4gICAgeCA9IHgudG9SZWQodGhpcy5yZWQpO1xuXG4gIHZhciB4MiA9IHgucmVkU3FyKCk7XG4gIHZhciByaHMgPSB0aGlzLmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKHgyKSk7XG4gIHZhciBsaHMgPSB0aGlzLm9uZS5yZWRTdWIodGhpcy5jMi5yZWRNdWwodGhpcy5kKS5yZWRNdWwoeDIpKTtcblxuICB2YXIgeTIgPSByaHMucmVkTXVsKGxocy5yZWRJbnZtKCkpO1xuICB2YXIgeSA9IHkyLnJlZFNxcnQoKTtcbiAgaWYgKHkucmVkU3FyKCkucmVkU3ViKHkyKS5jbXAodGhpcy56ZXJvKSAhPT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcG9pbnQnKTtcblxuICB2YXIgaXNPZGQgPSB5LmZyb21SZWQoKS5pc09kZCgpO1xuICBpZiAob2RkICYmICFpc09kZCB8fCAhb2RkICYmIGlzT2RkKVxuICAgIHkgPSB5LnJlZE5lZygpO1xuXG4gIHJldHVybiB0aGlzLnBvaW50KHgsIHkpO1xufTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5wb2ludEZyb21ZID0gZnVuY3Rpb24gcG9pbnRGcm9tWSh5LCBvZGQpIHtcbiAgeSA9IG5ldyBCTih5LCAxNik7XG4gIGlmICgheS5yZWQpXG4gICAgeSA9IHkudG9SZWQodGhpcy5yZWQpO1xuXG4gIC8vIHheMiA9ICh5XjIgLSAxKSAvIChkIHleMiArIDEpXG4gIHZhciB5MiA9IHkucmVkU3FyKCk7XG4gIHZhciBsaHMgPSB5Mi5yZWRTdWIodGhpcy5vbmUpO1xuICB2YXIgcmhzID0geTIucmVkTXVsKHRoaXMuZCkucmVkQWRkKHRoaXMub25lKTtcbiAgdmFyIHgyID0gbGhzLnJlZE11bChyaHMucmVkSW52bSgpKTtcblxuICBpZiAoeDIuY21wKHRoaXMuemVybykgPT09IDApIHtcbiAgICBpZiAob2RkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBvaW50Jyk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLCB5KTtcbiAgfVxuXG4gIHZhciB4ID0geDIucmVkU3FydCgpO1xuICBpZiAoeC5yZWRTcXIoKS5yZWRTdWIoeDIpLmNtcCh0aGlzLnplcm8pICE9PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwb2ludCcpO1xuXG4gIGlmICh4LmlzT2RkKCkgIT09IG9kZClcbiAgICB4ID0geC5yZWROZWcoKTtcblxuICByZXR1cm4gdGhpcy5wb2ludCh4LCB5KTtcbn07XG5cbkVkd2FyZHNDdXJ2ZS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZShwb2ludCkge1xuICBpZiAocG9pbnQuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0cnVlO1xuXG4gIC8vIEN1cnZlOiBBICogWF4yICsgWV4yID0gQ14yICogKDEgKyBEICogWF4yICogWV4yKVxuICBwb2ludC5ub3JtYWxpemUoKTtcblxuICB2YXIgeDIgPSBwb2ludC54LnJlZFNxcigpO1xuICB2YXIgeTIgPSBwb2ludC55LnJlZFNxcigpO1xuICB2YXIgbGhzID0geDIucmVkTXVsKHRoaXMuYSkucmVkQWRkKHkyKTtcbiAgdmFyIHJocyA9IHRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKHgyKS5yZWRNdWwoeTIpKSk7XG5cbiAgcmV0dXJuIGxocy5jbXAocmhzKSA9PT0gMDtcbn07XG5cbmZ1bmN0aW9uIFBvaW50KGN1cnZlLCB4LCB5LCB6LCB0KSB7XG4gIEJhc2UuQmFzZVBvaW50LmNhbGwodGhpcywgY3VydmUsICdwcm9qZWN0aXZlJyk7XG4gIGlmICh4ID09PSBudWxsICYmIHkgPT09IG51bGwgJiYgeiA9PT0gbnVsbCkge1xuICAgIHRoaXMueCA9IHRoaXMuY3VydmUuemVybztcbiAgICB0aGlzLnkgPSB0aGlzLmN1cnZlLm9uZTtcbiAgICB0aGlzLnogPSB0aGlzLmN1cnZlLm9uZTtcbiAgICB0aGlzLnQgPSB0aGlzLmN1cnZlLnplcm87XG4gICAgdGhpcy56T25lID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnggPSBuZXcgQk4oeCwgMTYpO1xuICAgIHRoaXMueSA9IG5ldyBCTih5LCAxNik7XG4gICAgdGhpcy56ID0geiA/IG5ldyBCTih6LCAxNikgOiB0aGlzLmN1cnZlLm9uZTtcbiAgICB0aGlzLnQgPSB0ICYmIG5ldyBCTih0LCAxNik7XG4gICAgaWYgKCF0aGlzLngucmVkKVxuICAgICAgdGhpcy54ID0gdGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICBpZiAoIXRoaXMueS5yZWQpXG4gICAgICB0aGlzLnkgPSB0aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICAgIGlmICghdGhpcy56LnJlZClcbiAgICAgIHRoaXMueiA9IHRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgaWYgKHRoaXMudCAmJiAhdGhpcy50LnJlZClcbiAgICAgIHRoaXMudCA9IHRoaXMudC50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgdGhpcy56T25lID0gdGhpcy56ID09PSB0aGlzLmN1cnZlLm9uZTtcblxuICAgIC8vIFVzZSBleHRlbmRlZCBjb29yZGluYXRlc1xuICAgIGlmICh0aGlzLmN1cnZlLmV4dGVuZGVkICYmICF0aGlzLnQpIHtcbiAgICAgIHRoaXMudCA9IHRoaXMueC5yZWRNdWwodGhpcy55KTtcbiAgICAgIGlmICghdGhpcy56T25lKVxuICAgICAgICB0aGlzLnQgPSB0aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpO1xuICAgIH1cbiAgfVxufVxuaW5oZXJpdHMoUG9pbnQsIEJhc2UuQmFzZVBvaW50KTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5wb2ludEZyb21KU09OID0gZnVuY3Rpb24gcG9pbnRGcm9tSlNPTihvYmopIHtcbiAgcmV0dXJuIFBvaW50LmZyb21KU09OKHRoaXMsIG9iaik7XG59O1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLnBvaW50ID0gZnVuY3Rpb24gcG9pbnQoeCwgeSwgeiwgdCkge1xuICByZXR1cm4gbmV3IFBvaW50KHRoaXMsIHgsIHksIHosIHQpO1xufTtcblxuUG9pbnQuZnJvbUpTT04gPSBmdW5jdGlvbiBmcm9tSlNPTihjdXJ2ZSwgb2JqKSB7XG4gIHJldHVybiBuZXcgUG9pbnQoY3VydmUsIG9ialswXSwgb2JqWzFdLCBvYmpbMl0pO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuICc8RUMgUG9pbnQgSW5maW5pdHk+JztcbiAgcmV0dXJuICc8RUMgUG9pbnQgeDogJyArIHRoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsIDIpICtcbiAgICAgICcgeTogJyArIHRoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsIDIpICtcbiAgICAgICcgejogJyArIHRoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsIDIpICsgJz4nO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmlzSW5maW5pdHkgPSBmdW5jdGlvbiBpc0luZmluaXR5KCkge1xuICAvLyBYWFggVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCB6ZXJvIGlzIGFsd2F5cyB6ZXJvIGluIHJlZFxuICByZXR1cm4gdGhpcy54LmNtcG4oMCkgPT09IDAgJiZcbiAgICAgICAgIHRoaXMueS5jbXAodGhpcy56KSA9PT0gMDtcbn07XG5cblBvaW50LnByb3RvdHlwZS5fZXh0RGJsID0gZnVuY3Rpb24gX2V4dERibCgpIHtcbiAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXR3aXN0ZWQtZXh0ZW5kZWQtMS5odG1sXG4gIC8vICAgICAjZG91YmxpbmctZGJsLTIwMDgtaHdjZFxuICAvLyA0TSArIDRTXG5cbiAgLy8gQSA9IFgxXjJcbiAgdmFyIGEgPSB0aGlzLngucmVkU3FyKCk7XG4gIC8vIEIgPSBZMV4yXG4gIHZhciBiID0gdGhpcy55LnJlZFNxcigpO1xuICAvLyBDID0gMiAqIFoxXjJcbiAgdmFyIGMgPSB0aGlzLnoucmVkU3FyKCk7XG4gIGMgPSBjLnJlZElBZGQoYyk7XG4gIC8vIEQgPSBhICogQVxuICB2YXIgZCA9IHRoaXMuY3VydmUuX211bEEoYSk7XG4gIC8vIEUgPSAoWDEgKyBZMSleMiAtIEEgLSBCXG4gIHZhciBlID0gdGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLnJlZElTdWIoYSkucmVkSVN1YihiKTtcbiAgLy8gRyA9IEQgKyBCXG4gIHZhciBnID0gZC5yZWRBZGQoYik7XG4gIC8vIEYgPSBHIC0gQ1xuICB2YXIgZiA9IGcucmVkU3ViKGMpO1xuICAvLyBIID0gRCAtIEJcbiAgdmFyIGggPSBkLnJlZFN1YihiKTtcbiAgLy8gWDMgPSBFICogRlxuICB2YXIgbnggPSBlLnJlZE11bChmKTtcbiAgLy8gWTMgPSBHICogSFxuICB2YXIgbnkgPSBnLnJlZE11bChoKTtcbiAgLy8gVDMgPSBFICogSFxuICB2YXIgbnQgPSBlLnJlZE11bChoKTtcbiAgLy8gWjMgPSBGICogR1xuICB2YXIgbnogPSBmLnJlZE11bChnKTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG55LCBueiwgbnQpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLl9wcm9qRGJsID0gZnVuY3Rpb24gX3Byb2pEYmwoKSB7XG4gIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by10d2lzdGVkLXByb2plY3RpdmUuaHRtbFxuICAvLyAgICAgI2RvdWJsaW5nLWRibC0yMDA4LWJiamxwXG4gIC8vICAgICAjZG91YmxpbmctZGJsLTIwMDctYmxcbiAgLy8gYW5kIG90aGVyc1xuICAvLyBHZW5lcmFsbHkgM00gKyA0UyBvciAyTSArIDRTXG5cbiAgLy8gQiA9IChYMSArIFkxKV4yXG4gIHZhciBiID0gdGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpO1xuICAvLyBDID0gWDFeMlxuICB2YXIgYyA9IHRoaXMueC5yZWRTcXIoKTtcbiAgLy8gRCA9IFkxXjJcbiAgdmFyIGQgPSB0aGlzLnkucmVkU3FyKCk7XG5cbiAgdmFyIG54O1xuICB2YXIgbnk7XG4gIHZhciBuejtcbiAgaWYgKHRoaXMuY3VydmUudHdpc3RlZCkge1xuICAgIC8vIEUgPSBhICogQ1xuICAgIHZhciBlID0gdGhpcy5jdXJ2ZS5fbXVsQShjKTtcbiAgICAvLyBGID0gRSArIERcbiAgICB2YXIgZiA9IGUucmVkQWRkKGQpO1xuICAgIGlmICh0aGlzLnpPbmUpIHtcbiAgICAgIC8vIFgzID0gKEIgLSBDIC0gRCkgKiAoRiAtIDIpXG4gICAgICBueCA9IGIucmVkU3ViKGMpLnJlZFN1YihkKS5yZWRNdWwoZi5yZWRTdWIodGhpcy5jdXJ2ZS50d28pKTtcbiAgICAgIC8vIFkzID0gRiAqIChFIC0gRClcbiAgICAgIG55ID0gZi5yZWRNdWwoZS5yZWRTdWIoZCkpO1xuICAgICAgLy8gWjMgPSBGXjIgLSAyICogRlxuICAgICAgbnogPSBmLnJlZFNxcigpLnJlZFN1YihmKS5yZWRTdWIoZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEggPSBaMV4yXG4gICAgICB2YXIgaCA9IHRoaXMuei5yZWRTcXIoKTtcbiAgICAgIC8vIEogPSBGIC0gMiAqIEhcbiAgICAgIHZhciBqID0gZi5yZWRTdWIoaCkucmVkSVN1YihoKTtcbiAgICAgIC8vIFgzID0gKEItQy1EKSpKXG4gICAgICBueCA9IGIucmVkU3ViKGMpLnJlZElTdWIoZCkucmVkTXVsKGopO1xuICAgICAgLy8gWTMgPSBGICogKEUgLSBEKVxuICAgICAgbnkgPSBmLnJlZE11bChlLnJlZFN1YihkKSk7XG4gICAgICAvLyBaMyA9IEYgKiBKXG4gICAgICBueiA9IGYucmVkTXVsKGopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBFID0gQyArIERcbiAgICB2YXIgZSA9IGMucmVkQWRkKGQpO1xuICAgIC8vIEggPSAoYyAqIFoxKV4yXG4gICAgdmFyIGggPSB0aGlzLmN1cnZlLl9tdWxDKHRoaXMuYy5yZWRNdWwodGhpcy56KSkucmVkU3FyKCk7XG4gICAgLy8gSiA9IEUgLSAyICogSFxuICAgIHZhciBqID0gZS5yZWRTdWIoaCkucmVkU3ViKGgpO1xuICAgIC8vIFgzID0gYyAqIChCIC0gRSkgKiBKXG4gICAgbnggPSB0aGlzLmN1cnZlLl9tdWxDKGIucmVkSVN1YihlKSkucmVkTXVsKGopO1xuICAgIC8vIFkzID0gYyAqIEUgKiAoQyAtIEQpXG4gICAgbnkgPSB0aGlzLmN1cnZlLl9tdWxDKGUpLnJlZE11bChjLnJlZElTdWIoZCkpO1xuICAgIC8vIFozID0gRSAqIEpcbiAgICBueiA9IGUucmVkTXVsKGopO1xuICB9XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueSwgbnopO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmRibCA9IGZ1bmN0aW9uIGRibCgpIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIC8vIERvdWJsZSBpbiBleHRlbmRlZCBjb29yZGluYXRlc1xuICBpZiAodGhpcy5jdXJ2ZS5leHRlbmRlZClcbiAgICByZXR1cm4gdGhpcy5fZXh0RGJsKCk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5fcHJvakRibCgpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLl9leHRBZGQgPSBmdW5jdGlvbiBfZXh0QWRkKHApIHtcbiAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXR3aXN0ZWQtZXh0ZW5kZWQtMS5odG1sXG4gIC8vICAgICAjYWRkaXRpb24tYWRkLTIwMDgtaHdjZC0zXG4gIC8vIDhNXG5cbiAgLy8gQSA9IChZMSAtIFgxKSAqIChZMiAtIFgyKVxuICB2YXIgYSA9IHRoaXMueS5yZWRTdWIodGhpcy54KS5yZWRNdWwocC55LnJlZFN1YihwLngpKTtcbiAgLy8gQiA9IChZMSArIFgxKSAqIChZMiArIFgyKVxuICB2YXIgYiA9IHRoaXMueS5yZWRBZGQodGhpcy54KS5yZWRNdWwocC55LnJlZEFkZChwLngpKTtcbiAgLy8gQyA9IFQxICogayAqIFQyXG4gIHZhciBjID0gdGhpcy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwocC50KTtcbiAgLy8gRCA9IFoxICogMiAqIFoyXG4gIHZhciBkID0gdGhpcy56LnJlZE11bChwLnoucmVkQWRkKHAueikpO1xuICAvLyBFID0gQiAtIEFcbiAgdmFyIGUgPSBiLnJlZFN1YihhKTtcbiAgLy8gRiA9IEQgLSBDXG4gIHZhciBmID0gZC5yZWRTdWIoYyk7XG4gIC8vIEcgPSBEICsgQ1xuICB2YXIgZyA9IGQucmVkQWRkKGMpO1xuICAvLyBIID0gQiArIEFcbiAgdmFyIGggPSBiLnJlZEFkZChhKTtcbiAgLy8gWDMgPSBFICogRlxuICB2YXIgbnggPSBlLnJlZE11bChmKTtcbiAgLy8gWTMgPSBHICogSFxuICB2YXIgbnkgPSBnLnJlZE11bChoKTtcbiAgLy8gVDMgPSBFICogSFxuICB2YXIgbnQgPSBlLnJlZE11bChoKTtcbiAgLy8gWjMgPSBGICogR1xuICB2YXIgbnogPSBmLnJlZE11bChnKTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG55LCBueiwgbnQpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLl9wcm9qQWRkID0gZnVuY3Rpb24gX3Byb2pBZGQocCkge1xuICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tdHdpc3RlZC1wcm9qZWN0aXZlLmh0bWxcbiAgLy8gICAgICNhZGRpdGlvbi1hZGQtMjAwOC1iYmpscFxuICAvLyAgICAgI2FkZGl0aW9uLWFkZC0yMDA3LWJsXG4gIC8vIDEwTSArIDFTXG5cbiAgLy8gQSA9IFoxICogWjJcbiAgdmFyIGEgPSB0aGlzLnoucmVkTXVsKHAueik7XG4gIC8vIEIgPSBBXjJcbiAgdmFyIGIgPSBhLnJlZFNxcigpO1xuICAvLyBDID0gWDEgKiBYMlxuICB2YXIgYyA9IHRoaXMueC5yZWRNdWwocC54KTtcbiAgLy8gRCA9IFkxICogWTJcbiAgdmFyIGQgPSB0aGlzLnkucmVkTXVsKHAueSk7XG4gIC8vIEUgPSBkICogQyAqIERcbiAgdmFyIGUgPSB0aGlzLmN1cnZlLmQucmVkTXVsKGMpLnJlZE11bChkKTtcbiAgLy8gRiA9IEIgLSBFXG4gIHZhciBmID0gYi5yZWRTdWIoZSk7XG4gIC8vIEcgPSBCICsgRVxuICB2YXIgZyA9IGIucmVkQWRkKGUpO1xuICAvLyBYMyA9IEEgKiBGICogKChYMSArIFkxKSAqIChYMiArIFkyKSAtIEMgLSBEKVxuICB2YXIgdG1wID0gdGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZE11bChwLngucmVkQWRkKHAueSkpLnJlZElTdWIoYykucmVkSVN1YihkKTtcbiAgdmFyIG54ID0gYS5yZWRNdWwoZikucmVkTXVsKHRtcCk7XG4gIHZhciBueTtcbiAgdmFyIG56O1xuICBpZiAodGhpcy5jdXJ2ZS50d2lzdGVkKSB7XG4gICAgLy8gWTMgPSBBICogRyAqIChEIC0gYSAqIEMpXG4gICAgbnkgPSBhLnJlZE11bChnKS5yZWRNdWwoZC5yZWRTdWIodGhpcy5jdXJ2ZS5fbXVsQShjKSkpO1xuICAgIC8vIFozID0gRiAqIEdcbiAgICBueiA9IGYucmVkTXVsKGcpO1xuICB9IGVsc2Uge1xuICAgIC8vIFkzID0gQSAqIEcgKiAoRCAtIEMpXG4gICAgbnkgPSBhLnJlZE11bChnKS5yZWRNdWwoZC5yZWRTdWIoYykpO1xuICAgIC8vIFozID0gYyAqIEYgKiBHXG4gICAgbnogPSB0aGlzLmN1cnZlLl9tdWxDKGYpLnJlZE11bChnKTtcbiAgfVxuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCwgbnksIG56KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQocCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHA7XG4gIGlmIChwLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gdGhpcztcblxuICBpZiAodGhpcy5jdXJ2ZS5leHRlbmRlZClcbiAgICByZXR1cm4gdGhpcy5fZXh0QWRkKHApO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuX3Byb2pBZGQocCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsKGspIHtcbiAgaWYgKHRoaXMuX2hhc0RvdWJsZXMoaykpXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsIGspO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWwodGhpcywgayk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubXVsQWRkID0gZnVuY3Rpb24gbXVsQWRkKGsxLCBwLCBrMikge1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLCBbIHRoaXMsIHAgXSwgWyBrMSwgazIgXSwgMiwgZmFsc2UpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmptdWxBZGQgPSBmdW5jdGlvbiBqbXVsQWRkKGsxLCBwLCBrMikge1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLCBbIHRoaXMsIHAgXSwgWyBrMSwgazIgXSwgMiwgdHJ1ZSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubm9ybWFsaXplID0gZnVuY3Rpb24gbm9ybWFsaXplKCkge1xuICBpZiAodGhpcy56T25lKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIC8vIE5vcm1hbGl6ZSBjb29yZGluYXRlc1xuICB2YXIgemkgPSB0aGlzLnoucmVkSW52bSgpO1xuICB0aGlzLnggPSB0aGlzLngucmVkTXVsKHppKTtcbiAgdGhpcy55ID0gdGhpcy55LnJlZE11bCh6aSk7XG4gIGlmICh0aGlzLnQpXG4gICAgdGhpcy50ID0gdGhpcy50LnJlZE11bCh6aSk7XG4gIHRoaXMueiA9IHRoaXMuY3VydmUub25lO1xuICB0aGlzLnpPbmUgPSB0cnVlO1xuICByZXR1cm4gdGhpcztcbn07XG5cblBvaW50LnByb3RvdHlwZS5uZWcgPSBmdW5jdGlvbiBuZWcoKSB7XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnosXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudCAmJiB0aGlzLnQucmVkTmVnKCkpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmdldFggPSBmdW5jdGlvbiBnZXRYKCkge1xuICB0aGlzLm5vcm1hbGl6ZSgpO1xuICByZXR1cm4gdGhpcy54LmZyb21SZWQoKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5nZXRZID0gZnVuY3Rpb24gZ2V0WSgpIHtcbiAgdGhpcy5ub3JtYWxpemUoKTtcbiAgcmV0dXJuIHRoaXMueS5mcm9tUmVkKCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcShvdGhlcikge1xuICByZXR1cm4gdGhpcyA9PT0gb3RoZXIgfHxcbiAgICAgICAgIHRoaXMuZ2V0WCgpLmNtcChvdGhlci5nZXRYKCkpID09PSAwICYmXG4gICAgICAgICB0aGlzLmdldFkoKS5jbXAob3RoZXIuZ2V0WSgpKSA9PT0gMDtcbn07XG5cblBvaW50LnByb3RvdHlwZS5lcVhUb1AgPSBmdW5jdGlvbiBlcVhUb1AoeCkge1xuICB2YXIgcnggPSB4LnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwodGhpcy56KTtcbiAgaWYgKHRoaXMueC5jbXAocngpID09PSAwKVxuICAgIHJldHVybiB0cnVlO1xuXG4gIHZhciB4YyA9IHguY2xvbmUoKTtcbiAgdmFyIHQgPSB0aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7XG4gIGZvciAoOzspIHtcbiAgICB4Yy5pYWRkKHRoaXMuY3VydmUubik7XG4gICAgaWYgKHhjLmNtcCh0aGlzLmN1cnZlLnApID49IDApXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICByeC5yZWRJQWRkKHQpO1xuICAgIGlmICh0aGlzLnguY21wKHJ4KSA9PT0gMClcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8vIENvbXBhdGliaWxpdHkgd2l0aCBCYXNlQ3VydmVcblBvaW50LnByb3RvdHlwZS50b1AgPSBQb2ludC5wcm90b3R5cGUubm9ybWFsaXplO1xuUG9pbnQucHJvdG90eXBlLm1peGVkQWRkID0gUG9pbnQucHJvdG90eXBlLmFkZDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGN1cnZlID0gZXhwb3J0cztcblxuY3VydmUuYmFzZSA9IHJlcXVpcmUoJy4vYmFzZScpO1xuY3VydmUuc2hvcnQgPSByZXF1aXJlKCcuL3Nob3J0Jyk7XG5jdXJ2ZS5tb250ID0gcmVxdWlyZSgnLi9tb250Jyk7XG5jdXJ2ZS5lZHdhcmRzID0gcmVxdWlyZSgnLi9lZHdhcmRzJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjdXJ2ZSA9IHJlcXVpcmUoJy4uL2N1cnZlJyk7XG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbnZhciBCYXNlID0gY3VydmUuYmFzZTtcblxudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciB1dGlscyA9IGVsbGlwdGljLnV0aWxzO1xuXG5mdW5jdGlvbiBNb250Q3VydmUoY29uZikge1xuICBCYXNlLmNhbGwodGhpcywgJ21vbnQnLCBjb25mKTtcblxuICB0aGlzLmEgPSBuZXcgQk4oY29uZi5hLCAxNikudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLmIgPSBuZXcgQk4oY29uZi5iLCAxNikudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLmk0ID0gbmV3IEJOKDQpLnRvUmVkKHRoaXMucmVkKS5yZWRJbnZtKCk7XG4gIHRoaXMudHdvID0gbmV3IEJOKDIpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy5hMjQgPSB0aGlzLmk0LnJlZE11bCh0aGlzLmEucmVkQWRkKHRoaXMudHdvKSk7XG59XG5pbmhlcml0cyhNb250Q3VydmUsIEJhc2UpO1xubW9kdWxlLmV4cG9ydHMgPSBNb250Q3VydmU7XG5cbk1vbnRDdXJ2ZS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZShwb2ludCkge1xuICB2YXIgeCA9IHBvaW50Lm5vcm1hbGl6ZSgpLng7XG4gIHZhciB4MiA9IHgucmVkU3FyKCk7XG4gIHZhciByaHMgPSB4Mi5yZWRNdWwoeCkucmVkQWRkKHgyLnJlZE11bCh0aGlzLmEpKS5yZWRBZGQoeCk7XG4gIHZhciB5ID0gcmhzLnJlZFNxcnQoKTtcblxuICByZXR1cm4geS5yZWRTcXIoKS5jbXAocmhzKSA9PT0gMDtcbn07XG5cbmZ1bmN0aW9uIFBvaW50KGN1cnZlLCB4LCB6KSB7XG4gIEJhc2UuQmFzZVBvaW50LmNhbGwodGhpcywgY3VydmUsICdwcm9qZWN0aXZlJyk7XG4gIGlmICh4ID09PSBudWxsICYmIHogPT09IG51bGwpIHtcbiAgICB0aGlzLnggPSB0aGlzLmN1cnZlLm9uZTtcbiAgICB0aGlzLnogPSB0aGlzLmN1cnZlLnplcm87XG4gIH0gZWxzZSB7XG4gICAgdGhpcy54ID0gbmV3IEJOKHgsIDE2KTtcbiAgICB0aGlzLnogPSBuZXcgQk4oeiwgMTYpO1xuICAgIGlmICghdGhpcy54LnJlZClcbiAgICAgIHRoaXMueCA9IHRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgaWYgKCF0aGlzLnoucmVkKVxuICAgICAgdGhpcy56ID0gdGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgfVxufVxuaW5oZXJpdHMoUG9pbnQsIEJhc2UuQmFzZVBvaW50KTtcblxuTW9udEN1cnZlLnByb3RvdHlwZS5kZWNvZGVQb2ludCA9IGZ1bmN0aW9uIGRlY29kZVBvaW50KGJ5dGVzLCBlbmMpIHtcbiAgcmV0dXJuIHRoaXMucG9pbnQodXRpbHMudG9BcnJheShieXRlcywgZW5jKSwgMSk7XG59O1xuXG5Nb250Q3VydmUucHJvdG90eXBlLnBvaW50ID0gZnVuY3Rpb24gcG9pbnQoeCwgeikge1xuICByZXR1cm4gbmV3IFBvaW50KHRoaXMsIHgsIHopO1xufTtcblxuTW9udEN1cnZlLnByb3RvdHlwZS5wb2ludEZyb21KU09OID0gZnVuY3Rpb24gcG9pbnRGcm9tSlNPTihvYmopIHtcbiAgcmV0dXJuIFBvaW50LmZyb21KU09OKHRoaXMsIG9iaik7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUucHJlY29tcHV0ZSA9IGZ1bmN0aW9uIHByZWNvbXB1dGUoKSB7XG4gIC8vIE5vLW9wXG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX2VuY29kZSA9IGZ1bmN0aW9uIF9lbmNvZGUoKSB7XG4gIHJldHVybiB0aGlzLmdldFgoKS50b0FycmF5KCdiZScsIHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkpO1xufTtcblxuUG9pbnQuZnJvbUpTT04gPSBmdW5jdGlvbiBmcm9tSlNPTihjdXJ2ZSwgb2JqKSB7XG4gIHJldHVybiBuZXcgUG9pbnQoY3VydmUsIG9ialswXSwgb2JqWzFdIHx8IGN1cnZlLm9uZSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gJzxFQyBQb2ludCBJbmZpbml0eT4nO1xuICByZXR1cm4gJzxFQyBQb2ludCB4OiAnICsgdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgK1xuICAgICAgJyB6OiAnICsgdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgKyAnPic7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaXNJbmZpbml0eSA9IGZ1bmN0aW9uIGlzSW5maW5pdHkoKSB7XG4gIC8vIFhYWCBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IHplcm8gaXMgYWx3YXlzIHplcm8gaW4gcmVkXG4gIHJldHVybiB0aGlzLnouY21wbigwKSA9PT0gMDtcbn07XG5cblBvaW50LnByb3RvdHlwZS5kYmwgPSBmdW5jdGlvbiBkYmwoKSB7XG4gIC8vIGh0dHA6Ly9oeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tbW9udGdvbS14ei5odG1sI2RvdWJsaW5nLWRibC0xOTg3LW0tM1xuICAvLyAyTSArIDJTICsgNEFcblxuICAvLyBBID0gWDEgKyBaMVxuICB2YXIgYSA9IHRoaXMueC5yZWRBZGQodGhpcy56KTtcbiAgLy8gQUEgPSBBXjJcbiAgdmFyIGFhID0gYS5yZWRTcXIoKTtcbiAgLy8gQiA9IFgxIC0gWjFcbiAgdmFyIGIgPSB0aGlzLngucmVkU3ViKHRoaXMueik7XG4gIC8vIEJCID0gQl4yXG4gIHZhciBiYiA9IGIucmVkU3FyKCk7XG4gIC8vIEMgPSBBQSAtIEJCXG4gIHZhciBjID0gYWEucmVkU3ViKGJiKTtcbiAgLy8gWDMgPSBBQSAqIEJCXG4gIHZhciBueCA9IGFhLnJlZE11bChiYik7XG4gIC8vIFozID0gQyAqIChCQiArIEEyNCAqIEMpXG4gIHZhciBueiA9IGMucmVkTXVsKGJiLnJlZEFkZCh0aGlzLmN1cnZlLmEyNC5yZWRNdWwoYykpKTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG56KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlJyk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZGlmZkFkZCA9IGZ1bmN0aW9uIGRpZmZBZGQocCwgZGlmZikge1xuICAvLyBodHRwOi8vaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLW1vbnRnb20teHouaHRtbCNkaWZmYWRkLWRhZGQtMTk4Ny1tLTNcbiAgLy8gNE0gKyAyUyArIDZBXG5cbiAgLy8gQSA9IFgyICsgWjJcbiAgdmFyIGEgPSB0aGlzLngucmVkQWRkKHRoaXMueik7XG4gIC8vIEIgPSBYMiAtIFoyXG4gIHZhciBiID0gdGhpcy54LnJlZFN1Yih0aGlzLnopO1xuICAvLyBDID0gWDMgKyBaM1xuICB2YXIgYyA9IHAueC5yZWRBZGQocC56KTtcbiAgLy8gRCA9IFgzIC0gWjNcbiAgdmFyIGQgPSBwLngucmVkU3ViKHAueik7XG4gIC8vIERBID0gRCAqIEFcbiAgdmFyIGRhID0gZC5yZWRNdWwoYSk7XG4gIC8vIENCID0gQyAqIEJcbiAgdmFyIGNiID0gYy5yZWRNdWwoYik7XG4gIC8vIFg1ID0gWjEgKiAoREEgKyBDQileMlxuICB2YXIgbnggPSBkaWZmLnoucmVkTXVsKGRhLnJlZEFkZChjYikucmVkU3FyKCkpO1xuICAvLyBaNSA9IFgxICogKERBIC0gQ0IpXjJcbiAgdmFyIG56ID0gZGlmZi54LnJlZE11bChkYS5yZWRJU3ViKGNiKS5yZWRTcXIoKSk7XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueik7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsKGspIHtcbiAgdmFyIHQgPSBrLmNsb25lKCk7XG4gIHZhciBhID0gdGhpczsgLy8gKE4gLyAyKSAqIFEgKyBRXG4gIHZhciBiID0gdGhpcy5jdXJ2ZS5wb2ludChudWxsLCBudWxsKTsgLy8gKE4gLyAyKSAqIFFcbiAgdmFyIGMgPSB0aGlzOyAvLyBRXG5cbiAgZm9yICh2YXIgYml0cyA9IFtdOyB0LmNtcG4oMCkgIT09IDA7IHQuaXVzaHJuKDEpKVxuICAgIGJpdHMucHVzaCh0LmFuZGxuKDEpKTtcblxuICBmb3IgKHZhciBpID0gYml0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChiaXRzW2ldID09PSAwKSB7XG4gICAgICAvLyBOICogUSArIFEgPSAoKE4gLyAyKSAqIFEgKyBRKSkgKyAoTiAvIDIpICogUVxuICAgICAgYSA9IGEuZGlmZkFkZChiLCBjKTtcbiAgICAgIC8vIE4gKiBRID0gMiAqICgoTiAvIDIpICogUSArIFEpKVxuICAgICAgYiA9IGIuZGJsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE4gKiBRID0gKChOIC8gMikgKiBRICsgUSkgKyAoKE4gLyAyKSAqIFEpXG4gICAgICBiID0gYS5kaWZmQWRkKGIsIGMpO1xuICAgICAgLy8gTiAqIFEgKyBRID0gMiAqICgoTiAvIDIpICogUSArIFEpXG4gICAgICBhID0gYS5kYmwoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGI7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubXVsQWRkID0gZnVuY3Rpb24gbXVsQWRkKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZScpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmp1bWxBZGQgPSBmdW5jdGlvbiBqdW1sQWRkKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZScpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmVxID0gZnVuY3Rpb24gZXEob3RoZXIpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0WCgpLmNtcChvdGhlci5nZXRYKCkpID09PSAwO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIG5vcm1hbGl6ZSgpIHtcbiAgdGhpcy54ID0gdGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKTtcbiAgdGhpcy56ID0gdGhpcy5jdXJ2ZS5vbmU7XG4gIHJldHVybiB0aGlzO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmdldFggPSBmdW5jdGlvbiBnZXRYKCkge1xuICAvLyBOb3JtYWxpemUgY29vcmRpbmF0ZXNcbiAgdGhpcy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gdGhpcy54LmZyb21SZWQoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjdXJ2ZSA9IHJlcXVpcmUoJy4uL2N1cnZlJyk7XG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG52YXIgQmFzZSA9IGN1cnZlLmJhc2U7XG5cbnZhciBhc3NlcnQgPSBlbGxpcHRpYy51dGlscy5hc3NlcnQ7XG5cbmZ1bmN0aW9uIFNob3J0Q3VydmUoY29uZikge1xuICBCYXNlLmNhbGwodGhpcywgJ3Nob3J0JywgY29uZik7XG5cbiAgdGhpcy5hID0gbmV3IEJOKGNvbmYuYSwgMTYpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy5iID0gbmV3IEJOKGNvbmYuYiwgMTYpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy50aW52ID0gdGhpcy50d28ucmVkSW52bSgpO1xuXG4gIHRoaXMuemVyb0EgPSB0aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCkgPT09IDA7XG4gIHRoaXMudGhyZWVBID0gdGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSA9PT0gMDtcblxuICAvLyBJZiB0aGUgY3VydmUgaXMgZW5kb21vcnBoaWMsIHByZWNhbGN1bGF0ZSBiZXRhIGFuZCBsYW1iZGFcbiAgdGhpcy5lbmRvID0gdGhpcy5fZ2V0RW5kb21vcnBoaXNtKGNvbmYpO1xuICB0aGlzLl9lbmRvV25hZlQxID0gbmV3IEFycmF5KDQpO1xuICB0aGlzLl9lbmRvV25hZlQyID0gbmV3IEFycmF5KDQpO1xufVxuaW5oZXJpdHMoU2hvcnRDdXJ2ZSwgQmFzZSk7XG5tb2R1bGUuZXhwb3J0cyA9IFNob3J0Q3VydmU7XG5cblNob3J0Q3VydmUucHJvdG90eXBlLl9nZXRFbmRvbW9ycGhpc20gPSBmdW5jdGlvbiBfZ2V0RW5kb21vcnBoaXNtKGNvbmYpIHtcbiAgLy8gTm8gZWZmaWNpZW50IGVuZG9tb3JwaGlzbVxuICBpZiAoIXRoaXMuemVyb0EgfHwgIXRoaXMuZyB8fCAhdGhpcy5uIHx8IHRoaXMucC5tb2RuKDMpICE9PSAxKVxuICAgIHJldHVybjtcblxuICAvLyBDb21wdXRlIGJldGEgYW5kIGxhbWJkYSwgdGhhdCBsYW1iZGEgKiBQID0gKGJldGEgKiBQeDsgUHkpXG4gIHZhciBiZXRhO1xuICB2YXIgbGFtYmRhO1xuICBpZiAoY29uZi5iZXRhKSB7XG4gICAgYmV0YSA9IG5ldyBCTihjb25mLmJldGEsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJldGFzID0gdGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMucCk7XG4gICAgLy8gQ2hvb3NlIHRoZSBzbWFsbGVzdCBiZXRhXG4gICAgYmV0YSA9IGJldGFzWzBdLmNtcChiZXRhc1sxXSkgPCAwID8gYmV0YXNbMF0gOiBiZXRhc1sxXTtcbiAgICBiZXRhID0gYmV0YS50b1JlZCh0aGlzLnJlZCk7XG4gIH1cbiAgaWYgKGNvbmYubGFtYmRhKSB7XG4gICAgbGFtYmRhID0gbmV3IEJOKGNvbmYubGFtYmRhLCAxNik7XG4gIH0gZWxzZSB7XG4gICAgLy8gQ2hvb3NlIHRoZSBsYW1iZGEgdGhhdCBpcyBtYXRjaGluZyBzZWxlY3RlZCBiZXRhXG4gICAgdmFyIGxhbWJkYXMgPSB0aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTtcbiAgICBpZiAodGhpcy5nLm11bChsYW1iZGFzWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoYmV0YSkpID09PSAwKSB7XG4gICAgICBsYW1iZGEgPSBsYW1iZGFzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYW1iZGEgPSBsYW1iZGFzWzFdO1xuICAgICAgYXNzZXJ0KHRoaXMuZy5tdWwobGFtYmRhKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoYmV0YSkpID09PSAwKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgYmFzaXMgdmVjdG9ycywgdXNlZCBmb3IgYmFsYW5jZWQgbGVuZ3RoLXR3byByZXByZXNlbnRhdGlvblxuICB2YXIgYmFzaXM7XG4gIGlmIChjb25mLmJhc2lzKSB7XG4gICAgYmFzaXMgPSBjb25mLmJhc2lzLm1hcChmdW5jdGlvbih2ZWMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGE6IG5ldyBCTih2ZWMuYSwgMTYpLFxuICAgICAgICBiOiBuZXcgQk4odmVjLmIsIDE2KVxuICAgICAgfTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBiYXNpcyA9IHRoaXMuX2dldEVuZG9CYXNpcyhsYW1iZGEpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBiZXRhOiBiZXRhLFxuICAgIGxhbWJkYTogbGFtYmRhLFxuICAgIGJhc2lzOiBiYXNpc1xuICB9O1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUuX2dldEVuZG9Sb290cyA9IGZ1bmN0aW9uIF9nZXRFbmRvUm9vdHMobnVtKSB7XG4gIC8vIEZpbmQgcm9vdHMgb2YgZm9yIHheMiArIHggKyAxIGluIEZcbiAgLy8gUm9vdCA9ICgtMSArLSBTcXJ0KC0zKSkgLyAyXG4gIC8vXG4gIHZhciByZWQgPSBudW0gPT09IHRoaXMucCA/IHRoaXMucmVkIDogQk4ubW9udChudW0pO1xuICB2YXIgdGludiA9IG5ldyBCTigyKS50b1JlZChyZWQpLnJlZEludm0oKTtcbiAgdmFyIG50aW52ID0gdGludi5yZWROZWcoKTtcblxuICB2YXIgcyA9IG5ldyBCTigzKS50b1JlZChyZWQpLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwodGludik7XG5cbiAgdmFyIGwxID0gbnRpbnYucmVkQWRkKHMpLmZyb21SZWQoKTtcbiAgdmFyIGwyID0gbnRpbnYucmVkU3ViKHMpLmZyb21SZWQoKTtcbiAgcmV0dXJuIFsgbDEsIGwyIF07XG59O1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzID0gZnVuY3Rpb24gX2dldEVuZG9CYXNpcyhsYW1iZGEpIHtcbiAgLy8gYXByeFNxcnQgPj0gc3FydCh0aGlzLm4pXG4gIHZhciBhcHJ4U3FydCA9IHRoaXMubi51c2hybihNYXRoLmZsb29yKHRoaXMubi5iaXRMZW5ndGgoKSAvIDIpKTtcblxuICAvLyAzLjc0XG4gIC8vIFJ1biBFR0NELCB1bnRpbCByKEwgKyAxKSA8IGFwcnhTcXJ0XG4gIHZhciB1ID0gbGFtYmRhO1xuICB2YXIgdiA9IHRoaXMubi5jbG9uZSgpO1xuICB2YXIgeDEgPSBuZXcgQk4oMSk7XG4gIHZhciB5MSA9IG5ldyBCTigwKTtcbiAgdmFyIHgyID0gbmV3IEJOKDApO1xuICB2YXIgeTIgPSBuZXcgQk4oMSk7XG5cbiAgLy8gTk9URTogYWxsIHZlY3RvcnMgYXJlIHJvb3RzIG9mOiBhICsgYiAqIGxhbWJkYSA9IDAgKG1vZCBuKVxuICB2YXIgYTA7XG4gIHZhciBiMDtcbiAgLy8gRmlyc3QgdmVjdG9yXG4gIHZhciBhMTtcbiAgdmFyIGIxO1xuICAvLyBTZWNvbmQgdmVjdG9yXG4gIHZhciBhMjtcbiAgdmFyIGIyO1xuXG4gIHZhciBwcmV2UjtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcjtcbiAgdmFyIHg7XG4gIHdoaWxlICh1LmNtcG4oMCkgIT09IDApIHtcbiAgICB2YXIgcSA9IHYuZGl2KHUpO1xuICAgIHIgPSB2LnN1YihxLm11bCh1KSk7XG4gICAgeCA9IHgyLnN1YihxLm11bCh4MSkpO1xuICAgIHZhciB5ID0geTIuc3ViKHEubXVsKHkxKSk7XG5cbiAgICBpZiAoIWExICYmIHIuY21wKGFwcnhTcXJ0KSA8IDApIHtcbiAgICAgIGEwID0gcHJldlIubmVnKCk7XG4gICAgICBiMCA9IHgxO1xuICAgICAgYTEgPSByLm5lZygpO1xuICAgICAgYjEgPSB4O1xuICAgIH0gZWxzZSBpZiAoYTEgJiYgKytpID09PSAyKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcHJldlIgPSByO1xuXG4gICAgdiA9IHU7XG4gICAgdSA9IHI7XG4gICAgeDIgPSB4MTtcbiAgICB4MSA9IHg7XG4gICAgeTIgPSB5MTtcbiAgICB5MSA9IHk7XG4gIH1cbiAgYTIgPSByLm5lZygpO1xuICBiMiA9IHg7XG5cbiAgdmFyIGxlbjEgPSBhMS5zcXIoKS5hZGQoYjEuc3FyKCkpO1xuICB2YXIgbGVuMiA9IGEyLnNxcigpLmFkZChiMi5zcXIoKSk7XG4gIGlmIChsZW4yLmNtcChsZW4xKSA+PSAwKSB7XG4gICAgYTIgPSBhMDtcbiAgICBiMiA9IGIwO1xuICB9XG5cbiAgLy8gTm9ybWFsaXplIHNpZ25zXG4gIGlmIChhMS5uZWdhdGl2ZSkge1xuICAgIGExID0gYTEubmVnKCk7XG4gICAgYjEgPSBiMS5uZWcoKTtcbiAgfVxuICBpZiAoYTIubmVnYXRpdmUpIHtcbiAgICBhMiA9IGEyLm5lZygpO1xuICAgIGIyID0gYjIubmVnKCk7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIHsgYTogYTEsIGI6IGIxIH0sXG4gICAgeyBhOiBhMiwgYjogYjIgfVxuICBdO1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUuX2VuZG9TcGxpdCA9IGZ1bmN0aW9uIF9lbmRvU3BsaXQoaykge1xuICB2YXIgYmFzaXMgPSB0aGlzLmVuZG8uYmFzaXM7XG4gIHZhciB2MSA9IGJhc2lzWzBdO1xuICB2YXIgdjIgPSBiYXNpc1sxXTtcblxuICB2YXIgYzEgPSB2Mi5iLm11bChrKS5kaXZSb3VuZCh0aGlzLm4pO1xuICB2YXIgYzIgPSB2MS5iLm5lZygpLm11bChrKS5kaXZSb3VuZCh0aGlzLm4pO1xuXG4gIHZhciBwMSA9IGMxLm11bCh2MS5hKTtcbiAgdmFyIHAyID0gYzIubXVsKHYyLmEpO1xuICB2YXIgcTEgPSBjMS5tdWwodjEuYik7XG4gIHZhciBxMiA9IGMyLm11bCh2Mi5iKTtcblxuICAvLyBDYWxjdWxhdGUgYW5zd2VyXG4gIHZhciBrMSA9IGsuc3ViKHAxKS5zdWIocDIpO1xuICB2YXIgazIgPSBxMS5hZGQocTIpLm5lZygpO1xuICByZXR1cm4geyBrMTogazEsIGsyOiBrMiB9O1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUucG9pbnRGcm9tWCA9IGZ1bmN0aW9uIHBvaW50RnJvbVgoeCwgb2RkKSB7XG4gIHggPSBuZXcgQk4oeCwgMTYpO1xuICBpZiAoIXgucmVkKVxuICAgIHggPSB4LnRvUmVkKHRoaXMucmVkKTtcblxuICB2YXIgeTIgPSB4LnJlZFNxcigpLnJlZE11bCh4KS5yZWRJQWRkKHgucmVkTXVsKHRoaXMuYSkpLnJlZElBZGQodGhpcy5iKTtcbiAgdmFyIHkgPSB5Mi5yZWRTcXJ0KCk7XG4gIGlmICh5LnJlZFNxcigpLnJlZFN1Yih5MikuY21wKHRoaXMuemVybykgIT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBvaW50Jyk7XG5cbiAgLy8gWFhYIElzIHRoZXJlIGFueSB3YXkgdG8gdGVsbCBpZiB0aGUgbnVtYmVyIGlzIG9kZCB3aXRob3V0IGNvbnZlcnRpbmcgaXRcbiAgLy8gdG8gbm9uLXJlZCBmb3JtP1xuICB2YXIgaXNPZGQgPSB5LmZyb21SZWQoKS5pc09kZCgpO1xuICBpZiAob2RkICYmICFpc09kZCB8fCAhb2RkICYmIGlzT2RkKVxuICAgIHkgPSB5LnJlZE5lZygpO1xuXG4gIHJldHVybiB0aGlzLnBvaW50KHgsIHkpO1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZShwb2ludCkge1xuICBpZiAocG9pbnQuaW5mKVxuICAgIHJldHVybiB0cnVlO1xuXG4gIHZhciB4ID0gcG9pbnQueDtcbiAgdmFyIHkgPSBwb2ludC55O1xuXG4gIHZhciBheCA9IHRoaXMuYS5yZWRNdWwoeCk7XG4gIHZhciByaHMgPSB4LnJlZFNxcigpLnJlZE11bCh4KS5yZWRJQWRkKGF4KS5yZWRJQWRkKHRoaXMuYik7XG4gIHJldHVybiB5LnJlZFNxcigpLnJlZElTdWIocmhzKS5jbXBuKDApID09PSAwO1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkID1cbiAgICBmdW5jdGlvbiBfZW5kb1duYWZNdWxBZGQocG9pbnRzLCBjb2VmZnMsIGphY29iaWFuUmVzdWx0KSB7XG4gIHZhciBucG9pbnRzID0gdGhpcy5fZW5kb1duYWZUMTtcbiAgdmFyIG5jb2VmZnMgPSB0aGlzLl9lbmRvV25hZlQyO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzcGxpdCA9IHRoaXMuX2VuZG9TcGxpdChjb2VmZnNbaV0pO1xuICAgIHZhciBwID0gcG9pbnRzW2ldO1xuICAgIHZhciBiZXRhID0gcC5fZ2V0QmV0YSgpO1xuXG4gICAgaWYgKHNwbGl0LmsxLm5lZ2F0aXZlKSB7XG4gICAgICBzcGxpdC5rMS5pbmVnKCk7XG4gICAgICBwID0gcC5uZWcodHJ1ZSk7XG4gICAgfVxuICAgIGlmIChzcGxpdC5rMi5uZWdhdGl2ZSkge1xuICAgICAgc3BsaXQuazIuaW5lZygpO1xuICAgICAgYmV0YSA9IGJldGEubmVnKHRydWUpO1xuICAgIH1cblxuICAgIG5wb2ludHNbaSAqIDJdID0gcDtcbiAgICBucG9pbnRzW2kgKiAyICsgMV0gPSBiZXRhO1xuICAgIG5jb2VmZnNbaSAqIDJdID0gc3BsaXQuazE7XG4gICAgbmNvZWZmc1tpICogMiArIDFdID0gc3BsaXQuazI7XG4gIH1cbiAgdmFyIHJlcyA9IHRoaXMuX3duYWZNdWxBZGQoMSwgbnBvaW50cywgbmNvZWZmcywgaSAqIDIsIGphY29iaWFuUmVzdWx0KTtcblxuICAvLyBDbGVhbi11cCByZWZlcmVuY2VzIHRvIHBvaW50cyBhbmQgY29lZmZpY2llbnRzXG4gIGZvciAodmFyIGogPSAwOyBqIDwgaSAqIDI7IGorKykge1xuICAgIG5wb2ludHNbal0gPSBudWxsO1xuICAgIG5jb2VmZnNbal0gPSBudWxsO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuXG5mdW5jdGlvbiBQb2ludChjdXJ2ZSwgeCwgeSwgaXNSZWQpIHtcbiAgQmFzZS5CYXNlUG9pbnQuY2FsbCh0aGlzLCBjdXJ2ZSwgJ2FmZmluZScpO1xuICBpZiAoeCA9PT0gbnVsbCAmJiB5ID09PSBudWxsKSB7XG4gICAgdGhpcy54ID0gbnVsbDtcbiAgICB0aGlzLnkgPSBudWxsO1xuICAgIHRoaXMuaW5mID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnggPSBuZXcgQk4oeCwgMTYpO1xuICAgIHRoaXMueSA9IG5ldyBCTih5LCAxNik7XG4gICAgLy8gRm9yY2UgcmVkZ29tZXJ5IHJlcHJlc2VudGF0aW9uIHdoZW4gbG9hZGluZyBmcm9tIEpTT05cbiAgICBpZiAoaXNSZWQpIHtcbiAgICAgIHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgICB0aGlzLnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMueC5yZWQpXG4gICAgICB0aGlzLnggPSB0aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICAgIGlmICghdGhpcy55LnJlZClcbiAgICAgIHRoaXMueSA9IHRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgdGhpcy5pbmYgPSBmYWxzZTtcbiAgfVxufVxuaW5oZXJpdHMoUG9pbnQsIEJhc2UuQmFzZVBvaW50KTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUucG9pbnQgPSBmdW5jdGlvbiBwb2ludCh4LCB5LCBpc1JlZCkge1xuICByZXR1cm4gbmV3IFBvaW50KHRoaXMsIHgsIHksIGlzUmVkKTtcbn07XG5cblNob3J0Q3VydmUucHJvdG90eXBlLnBvaW50RnJvbUpTT04gPSBmdW5jdGlvbiBwb2ludEZyb21KU09OKG9iaiwgcmVkKSB7XG4gIHJldHVybiBQb2ludC5mcm9tSlNPTih0aGlzLCBvYmosIHJlZCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX2dldEJldGEgPSBmdW5jdGlvbiBfZ2V0QmV0YSgpIHtcbiAgaWYgKCF0aGlzLmN1cnZlLmVuZG8pXG4gICAgcmV0dXJuO1xuXG4gIHZhciBwcmUgPSB0aGlzLnByZWNvbXB1dGVkO1xuICBpZiAocHJlICYmIHByZS5iZXRhKVxuICAgIHJldHVybiBwcmUuYmV0YTtcblxuICB2YXIgYmV0YSA9IHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksIHRoaXMueSk7XG4gIGlmIChwcmUpIHtcbiAgICB2YXIgY3VydmUgPSB0aGlzLmN1cnZlO1xuICAgIHZhciBlbmRvTXVsID0gZnVuY3Rpb24ocCkge1xuICAgICAgcmV0dXJuIGN1cnZlLnBvaW50KHAueC5yZWRNdWwoY3VydmUuZW5kby5iZXRhKSwgcC55KTtcbiAgICB9O1xuICAgIHByZS5iZXRhID0gYmV0YTtcbiAgICBiZXRhLnByZWNvbXB1dGVkID0ge1xuICAgICAgYmV0YTogbnVsbCxcbiAgICAgIG5hZjogcHJlLm5hZiAmJiB7XG4gICAgICAgIHduZDogcHJlLm5hZi53bmQsXG4gICAgICAgIHBvaW50czogcHJlLm5hZi5wb2ludHMubWFwKGVuZG9NdWwpXG4gICAgICB9LFxuICAgICAgZG91YmxlczogcHJlLmRvdWJsZXMgJiYge1xuICAgICAgICBzdGVwOiBwcmUuZG91Ymxlcy5zdGVwLFxuICAgICAgICBwb2ludHM6IHByZS5kb3VibGVzLnBvaW50cy5tYXAoZW5kb011bClcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiBiZXRhO1xufTtcblxuUG9pbnQucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgaWYgKCF0aGlzLnByZWNvbXB1dGVkKVxuICAgIHJldHVybiBbIHRoaXMueCwgdGhpcy55IF07XG5cbiAgcmV0dXJuIFsgdGhpcy54LCB0aGlzLnksIHRoaXMucHJlY29tcHV0ZWQgJiYge1xuICAgIGRvdWJsZXM6IHRoaXMucHJlY29tcHV0ZWQuZG91YmxlcyAmJiB7XG4gICAgICBzdGVwOiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxcbiAgICAgIHBvaW50czogdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKVxuICAgIH0sXG4gICAgbmFmOiB0aGlzLnByZWNvbXB1dGVkLm5hZiAmJiB7XG4gICAgICB3bmQ6IHRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxcbiAgICAgIHBvaW50czogdGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpXG4gICAgfVxuICB9IF07XG59O1xuXG5Qb2ludC5mcm9tSlNPTiA9IGZ1bmN0aW9uIGZyb21KU09OKGN1cnZlLCBvYmosIHJlZCkge1xuICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpXG4gICAgb2JqID0gSlNPTi5wYXJzZShvYmopO1xuICB2YXIgcmVzID0gY3VydmUucG9pbnQob2JqWzBdLCBvYmpbMV0sIHJlZCk7XG4gIGlmICghb2JqWzJdKVxuICAgIHJldHVybiByZXM7XG5cbiAgZnVuY3Rpb24gb2JqMnBvaW50KG9iaikge1xuICAgIHJldHVybiBjdXJ2ZS5wb2ludChvYmpbMF0sIG9ialsxXSwgcmVkKTtcbiAgfVxuXG4gIHZhciBwcmUgPSBvYmpbMl07XG4gIHJlcy5wcmVjb21wdXRlZCA9IHtcbiAgICBiZXRhOiBudWxsLFxuICAgIGRvdWJsZXM6IHByZS5kb3VibGVzICYmIHtcbiAgICAgIHN0ZXA6IHByZS5kb3VibGVzLnN0ZXAsXG4gICAgICBwb2ludHM6IFsgcmVzIF0uY29uY2F0KHByZS5kb3VibGVzLnBvaW50cy5tYXAob2JqMnBvaW50KSlcbiAgICB9LFxuICAgIG5hZjogcHJlLm5hZiAmJiB7XG4gICAgICB3bmQ6IHByZS5uYWYud25kLFxuICAgICAgcG9pbnRzOiBbIHJlcyBdLmNvbmNhdChwcmUubmFmLnBvaW50cy5tYXAob2JqMnBvaW50KSlcbiAgICB9XG4gIH07XG4gIHJldHVybiByZXM7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gJzxFQyBQb2ludCBJbmZpbml0eT4nO1xuICByZXR1cm4gJzxFQyBQb2ludCB4OiAnICsgdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgK1xuICAgICAgJyB5OiAnICsgdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgKyAnPic7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaXNJbmZpbml0eSA9IGZ1bmN0aW9uIGlzSW5maW5pdHkoKSB7XG4gIHJldHVybiB0aGlzLmluZjtcbn07XG5cblBvaW50LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQocCkge1xuICAvLyBPICsgUCA9IFBcbiAgaWYgKHRoaXMuaW5mKVxuICAgIHJldHVybiBwO1xuXG4gIC8vIFAgKyBPID0gUFxuICBpZiAocC5pbmYpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gUCArIFAgPSAyUFxuICBpZiAodGhpcy5lcShwKSlcbiAgICByZXR1cm4gdGhpcy5kYmwoKTtcblxuICAvLyBQICsgKC1QKSA9IE9cbiAgaWYgKHRoaXMubmVnKCkuZXEocCkpXG4gICAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCwgbnVsbCk7XG5cbiAgLy8gUCArIFEgPSBPXG4gIGlmICh0aGlzLnguY21wKHAueCkgPT09IDApXG4gICAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCwgbnVsbCk7XG5cbiAgdmFyIGMgPSB0aGlzLnkucmVkU3ViKHAueSk7XG4gIGlmIChjLmNtcG4oMCkgIT09IDApXG4gICAgYyA9IGMucmVkTXVsKHRoaXMueC5yZWRTdWIocC54KS5yZWRJbnZtKCkpO1xuICB2YXIgbnggPSBjLnJlZFNxcigpLnJlZElTdWIodGhpcy54KS5yZWRJU3ViKHAueCk7XG4gIHZhciBueSA9IGMucmVkTXVsKHRoaXMueC5yZWRTdWIobngpKS5yZWRJU3ViKHRoaXMueSk7XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZGJsID0gZnVuY3Rpb24gZGJsKCkge1xuICBpZiAodGhpcy5pbmYpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gMlAgPSBPXG4gIHZhciB5czEgPSB0aGlzLnkucmVkQWRkKHRoaXMueSk7XG4gIGlmICh5czEuY21wbigwKSA9PT0gMClcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLCBudWxsKTtcblxuICB2YXIgYSA9IHRoaXMuY3VydmUuYTtcblxuICB2YXIgeDIgPSB0aGlzLngucmVkU3FyKCk7XG4gIHZhciBkeWludiA9IHlzMS5yZWRJbnZtKCk7XG4gIHZhciBjID0geDIucmVkQWRkKHgyKS5yZWRJQWRkKHgyKS5yZWRJQWRkKGEpLnJlZE11bChkeWludik7XG5cbiAgdmFyIG54ID0gYy5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSk7XG4gIHZhciBueSA9IGMucmVkTXVsKHRoaXMueC5yZWRTdWIobngpKS5yZWRJU3ViKHRoaXMueSk7XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uIGdldFgoKSB7XG4gIHJldHVybiB0aGlzLnguZnJvbVJlZCgpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmdldFkgPSBmdW5jdGlvbiBnZXRZKCkge1xuICByZXR1cm4gdGhpcy55LmZyb21SZWQoKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwoaykge1xuICBrID0gbmV3IEJOKGssIDE2KTtcblxuICBpZiAodGhpcy5faGFzRG91YmxlcyhrKSlcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcywgayk7XG4gIGVsc2UgaWYgKHRoaXMuY3VydmUuZW5kbylcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoWyB0aGlzIF0sIFsgayBdKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsIGspO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm11bEFkZCA9IGZ1bmN0aW9uIG11bEFkZChrMSwgcDIsIGsyKSB7XG4gIHZhciBwb2ludHMgPSBbIHRoaXMsIHAyIF07XG4gIHZhciBjb2VmZnMgPSBbIGsxLCBrMiBdO1xuICBpZiAodGhpcy5jdXJ2ZS5lbmRvKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChwb2ludHMsIGNvZWZmcyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLCBwb2ludHMsIGNvZWZmcywgMik7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuam11bEFkZCA9IGZ1bmN0aW9uIGptdWxBZGQoazEsIHAyLCBrMikge1xuICB2YXIgcG9pbnRzID0gWyB0aGlzLCBwMiBdO1xuICB2YXIgY29lZmZzID0gWyBrMSwgazIgXTtcbiAgaWYgKHRoaXMuY3VydmUuZW5kbylcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQocG9pbnRzLCBjb2VmZnMsIHRydWUpO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSwgcG9pbnRzLCBjb2VmZnMsIDIsIHRydWUpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmVxID0gZnVuY3Rpb24gZXEocCkge1xuICByZXR1cm4gdGhpcyA9PT0gcCB8fFxuICAgICAgICAgdGhpcy5pbmYgPT09IHAuaW5mICYmXG4gICAgICAgICAgICAgKHRoaXMuaW5mIHx8IHRoaXMueC5jbXAocC54KSA9PT0gMCAmJiB0aGlzLnkuY21wKHAueSkgPT09IDApO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uIG5lZyhfcHJlY29tcHV0ZSkge1xuICBpZiAodGhpcy5pbmYpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIHJlcyA9IHRoaXMuY3VydmUucG9pbnQodGhpcy54LCB0aGlzLnkucmVkTmVnKCkpO1xuICBpZiAoX3ByZWNvbXB1dGUgJiYgdGhpcy5wcmVjb21wdXRlZCkge1xuICAgIHZhciBwcmUgPSB0aGlzLnByZWNvbXB1dGVkO1xuICAgIHZhciBuZWdhdGUgPSBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gcC5uZWcoKTtcbiAgICB9O1xuICAgIHJlcy5wcmVjb21wdXRlZCA9IHtcbiAgICAgIG5hZjogcHJlLm5hZiAmJiB7XG4gICAgICAgIHduZDogcHJlLm5hZi53bmQsXG4gICAgICAgIHBvaW50czogcHJlLm5hZi5wb2ludHMubWFwKG5lZ2F0ZSlcbiAgICAgIH0sXG4gICAgICBkb3VibGVzOiBwcmUuZG91YmxlcyAmJiB7XG4gICAgICAgIHN0ZXA6IHByZS5kb3VibGVzLnN0ZXAsXG4gICAgICAgIHBvaW50czogcHJlLmRvdWJsZXMucG9pbnRzLm1hcChuZWdhdGUpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4gcmVzO1xufTtcblxuUG9pbnQucHJvdG90eXBlLnRvSiA9IGZ1bmN0aW9uIHRvSigpIHtcbiAgaWYgKHRoaXMuaW5mKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChudWxsLCBudWxsLCBudWxsKTtcblxuICB2YXIgcmVzID0gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LCB0aGlzLnksIHRoaXMuY3VydmUub25lKTtcbiAgcmV0dXJuIHJlcztcbn07XG5cbmZ1bmN0aW9uIEpQb2ludChjdXJ2ZSwgeCwgeSwgeikge1xuICBCYXNlLkJhc2VQb2ludC5jYWxsKHRoaXMsIGN1cnZlLCAnamFjb2JpYW4nKTtcbiAgaWYgKHggPT09IG51bGwgJiYgeSA9PT0gbnVsbCAmJiB6ID09PSBudWxsKSB7XG4gICAgdGhpcy54ID0gdGhpcy5jdXJ2ZS5vbmU7XG4gICAgdGhpcy55ID0gdGhpcy5jdXJ2ZS5vbmU7XG4gICAgdGhpcy56ID0gbmV3IEJOKDApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMueCA9IG5ldyBCTih4LCAxNik7XG4gICAgdGhpcy55ID0gbmV3IEJOKHksIDE2KTtcbiAgICB0aGlzLnogPSBuZXcgQk4oeiwgMTYpO1xuICB9XG4gIGlmICghdGhpcy54LnJlZClcbiAgICB0aGlzLnggPSB0aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICBpZiAoIXRoaXMueS5yZWQpXG4gICAgdGhpcy55ID0gdGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgaWYgKCF0aGlzLnoucmVkKVxuICAgIHRoaXMueiA9IHRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG5cbiAgdGhpcy56T25lID0gdGhpcy56ID09PSB0aGlzLmN1cnZlLm9uZTtcbn1cbmluaGVyaXRzKEpQb2ludCwgQmFzZS5CYXNlUG9pbnQpO1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5qcG9pbnQgPSBmdW5jdGlvbiBqcG9pbnQoeCwgeSwgeikge1xuICByZXR1cm4gbmV3IEpQb2ludCh0aGlzLCB4LCB5LCB6KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUudG9QID0gZnVuY3Rpb24gdG9QKCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCwgbnVsbCk7XG5cbiAgdmFyIHppbnYgPSB0aGlzLnoucmVkSW52bSgpO1xuICB2YXIgemludjIgPSB6aW52LnJlZFNxcigpO1xuICB2YXIgYXggPSB0aGlzLngucmVkTXVsKHppbnYyKTtcbiAgdmFyIGF5ID0gdGhpcy55LnJlZE11bCh6aW52MikucmVkTXVsKHppbnYpO1xuXG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KGF4LCBheSk7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uIG5lZygpIHtcbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRoaXMueCwgdGhpcy55LnJlZE5lZygpLCB0aGlzLnopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQocCkge1xuICAvLyBPICsgUCA9IFBcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiBwO1xuXG4gIC8vIFAgKyBPID0gUFxuICBpZiAocC5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gMTJNICsgNFMgKyA3QVxuICB2YXIgcHoyID0gcC56LnJlZFNxcigpO1xuICB2YXIgejIgPSB0aGlzLnoucmVkU3FyKCk7XG4gIHZhciB1MSA9IHRoaXMueC5yZWRNdWwocHoyKTtcbiAgdmFyIHUyID0gcC54LnJlZE11bCh6Mik7XG4gIHZhciBzMSA9IHRoaXMueS5yZWRNdWwocHoyLnJlZE11bChwLnopKTtcbiAgdmFyIHMyID0gcC55LnJlZE11bCh6Mi5yZWRNdWwodGhpcy56KSk7XG5cbiAgdmFyIGggPSB1MS5yZWRTdWIodTIpO1xuICB2YXIgciA9IHMxLnJlZFN1YihzMik7XG4gIGlmIChoLmNtcG4oMCkgPT09IDApIHtcbiAgICBpZiAoci5jbXBuKDApICE9PSAwKVxuICAgICAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiB0aGlzLmRibCgpO1xuICB9XG5cbiAgdmFyIGgyID0gaC5yZWRTcXIoKTtcbiAgdmFyIGgzID0gaDIucmVkTXVsKGgpO1xuICB2YXIgdiA9IHUxLnJlZE11bChoMik7XG5cbiAgdmFyIG54ID0gci5yZWRTcXIoKS5yZWRJQWRkKGgzKS5yZWRJU3ViKHYpLnJlZElTdWIodik7XG4gIHZhciBueSA9IHIucmVkTXVsKHYucmVkSVN1YihueCkpLnJlZElTdWIoczEucmVkTXVsKGgzKSk7XG4gIHZhciBueiA9IHRoaXMuei5yZWRNdWwocC56KS5yZWRNdWwoaCk7XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LCBueSwgbnopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5taXhlZEFkZCA9IGZ1bmN0aW9uIG1peGVkQWRkKHApIHtcbiAgLy8gTyArIFAgPSBQXG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gcC50b0ooKTtcblxuICAvLyBQICsgTyA9IFBcbiAgaWYgKHAuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIC8vIDhNICsgM1MgKyA3QVxuICB2YXIgejIgPSB0aGlzLnoucmVkU3FyKCk7XG4gIHZhciB1MSA9IHRoaXMueDtcbiAgdmFyIHUyID0gcC54LnJlZE11bCh6Mik7XG4gIHZhciBzMSA9IHRoaXMueTtcbiAgdmFyIHMyID0gcC55LnJlZE11bCh6MikucmVkTXVsKHRoaXMueik7XG5cbiAgdmFyIGggPSB1MS5yZWRTdWIodTIpO1xuICB2YXIgciA9IHMxLnJlZFN1YihzMik7XG4gIGlmIChoLmNtcG4oMCkgPT09IDApIHtcbiAgICBpZiAoci5jbXBuKDApICE9PSAwKVxuICAgICAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiB0aGlzLmRibCgpO1xuICB9XG5cbiAgdmFyIGgyID0gaC5yZWRTcXIoKTtcbiAgdmFyIGgzID0gaDIucmVkTXVsKGgpO1xuICB2YXIgdiA9IHUxLnJlZE11bChoMik7XG5cbiAgdmFyIG54ID0gci5yZWRTcXIoKS5yZWRJQWRkKGgzKS5yZWRJU3ViKHYpLnJlZElTdWIodik7XG4gIHZhciBueSA9IHIucmVkTXVsKHYucmVkSVN1YihueCkpLnJlZElTdWIoczEucmVkTXVsKGgzKSk7XG4gIHZhciBueiA9IHRoaXMuei5yZWRNdWwoaCk7XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LCBueSwgbnopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5kYmxwID0gZnVuY3Rpb24gZGJscChwb3cpIHtcbiAgaWYgKHBvdyA9PT0gMClcbiAgICByZXR1cm4gdGhpcztcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0aGlzO1xuICBpZiAoIXBvdylcbiAgICByZXR1cm4gdGhpcy5kYmwoKTtcblxuICBpZiAodGhpcy5jdXJ2ZS56ZXJvQSB8fCB0aGlzLmN1cnZlLnRocmVlQSkge1xuICAgIHZhciByID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvdzsgaSsrKVxuICAgICAgciA9IHIuZGJsKCk7XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICAvLyAxTSArIDJTICsgMUEgKyBOICogKDRTICsgNU0gKyA4QSlcbiAgLy8gTiA9IDEgPT4gNk0gKyA2UyArIDlBXG4gIHZhciBhID0gdGhpcy5jdXJ2ZS5hO1xuICB2YXIgdGludiA9IHRoaXMuY3VydmUudGludjtcblxuICB2YXIganggPSB0aGlzLng7XG4gIHZhciBqeSA9IHRoaXMueTtcbiAgdmFyIGp6ID0gdGhpcy56O1xuICB2YXIgano0ID0ganoucmVkU3FyKCkucmVkU3FyKCk7XG5cbiAgLy8gUmV1c2UgcmVzdWx0c1xuICB2YXIganlkID0gankucmVkQWRkKGp5KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb3c7IGkrKykge1xuICAgIHZhciBqeDIgPSBqeC5yZWRTcXIoKTtcbiAgICB2YXIganlkMiA9IGp5ZC5yZWRTcXIoKTtcbiAgICB2YXIganlkNCA9IGp5ZDIucmVkU3FyKCk7XG4gICAgdmFyIGMgPSBqeDIucmVkQWRkKGp4MikucmVkSUFkZChqeDIpLnJlZElBZGQoYS5yZWRNdWwoano0KSk7XG5cbiAgICB2YXIgdDEgPSBqeC5yZWRNdWwoanlkMik7XG4gICAgdmFyIG54ID0gYy5yZWRTcXIoKS5yZWRJU3ViKHQxLnJlZEFkZCh0MSkpO1xuICAgIHZhciB0MiA9IHQxLnJlZElTdWIobngpO1xuICAgIHZhciBkbnkgPSBjLnJlZE11bCh0Mik7XG4gICAgZG55ID0gZG55LnJlZElBZGQoZG55KS5yZWRJU3ViKGp5ZDQpO1xuICAgIHZhciBueiA9IGp5ZC5yZWRNdWwoanopO1xuICAgIGlmIChpICsgMSA8IHBvdylcbiAgICAgIGp6NCA9IGp6NC5yZWRNdWwoanlkNCk7XG5cbiAgICBqeCA9IG54O1xuICAgIGp6ID0gbno7XG4gICAganlkID0gZG55O1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGp4LCBqeWQucmVkTXVsKHRpbnYpLCBqeik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmRibCA9IGZ1bmN0aW9uIGRibCgpIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIGlmICh0aGlzLmN1cnZlLnplcm9BKVxuICAgIHJldHVybiB0aGlzLl96ZXJvRGJsKCk7XG4gIGVsc2UgaWYgKHRoaXMuY3VydmUudGhyZWVBKVxuICAgIHJldHVybiB0aGlzLl90aHJlZURibCgpO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuX2RibCgpO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5femVyb0RibCA9IGZ1bmN0aW9uIF96ZXJvRGJsKCkge1xuICB2YXIgbng7XG4gIHZhciBueTtcbiAgdmFyIG56O1xuICAvLyBaID0gMVxuICBpZiAodGhpcy56T25lKSB7XG4gICAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXNob3J0dy1qYWNvYmlhbi0wLmh0bWxcbiAgICAvLyAgICAgI2RvdWJsaW5nLW1kYmwtMjAwNy1ibFxuICAgIC8vIDFNICsgNVMgKyAxNEFcblxuICAgIC8vIFhYID0gWDFeMlxuICAgIHZhciB4eCA9IHRoaXMueC5yZWRTcXIoKTtcbiAgICAvLyBZWSA9IFkxXjJcbiAgICB2YXIgeXkgPSB0aGlzLnkucmVkU3FyKCk7XG4gICAgLy8gWVlZWSA9IFlZXjJcbiAgICB2YXIgeXl5eSA9IHl5LnJlZFNxcigpO1xuICAgIC8vIFMgPSAyICogKChYMSArIFlZKV4yIC0gWFggLSBZWVlZKVxuICAgIHZhciBzID0gdGhpcy54LnJlZEFkZCh5eSkucmVkU3FyKCkucmVkSVN1Yih4eCkucmVkSVN1Yih5eXl5KTtcbiAgICBzID0gcy5yZWRJQWRkKHMpO1xuICAgIC8vIE0gPSAzICogWFggKyBhOyBhID0gMFxuICAgIHZhciBtID0geHgucmVkQWRkKHh4KS5yZWRJQWRkKHh4KTtcbiAgICAvLyBUID0gTSBeIDIgLSAyKlNcbiAgICB2YXIgdCA9IG0ucmVkU3FyKCkucmVkSVN1YihzKS5yZWRJU3ViKHMpO1xuXG4gICAgLy8gOCAqIFlZWVlcbiAgICB2YXIgeXl5eTggPSB5eXl5LnJlZElBZGQoeXl5eSk7XG4gICAgeXl5eTggPSB5eXl5OC5yZWRJQWRkKHl5eXk4KTtcbiAgICB5eXl5OCA9IHl5eXk4LnJlZElBZGQoeXl5eTgpO1xuXG4gICAgLy8gWDMgPSBUXG4gICAgbnggPSB0O1xuICAgIC8vIFkzID0gTSAqIChTIC0gVCkgLSA4ICogWVlZWVxuICAgIG55ID0gbS5yZWRNdWwocy5yZWRJU3ViKHQpKS5yZWRJU3ViKHl5eXk4KTtcbiAgICAvLyBaMyA9IDIqWTFcbiAgICBueiA9IHRoaXMueS5yZWRBZGQodGhpcy55KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tc2hvcnR3LWphY29iaWFuLTAuaHRtbFxuICAgIC8vICAgICAjZG91YmxpbmctZGJsLTIwMDktbFxuICAgIC8vIDJNICsgNVMgKyAxM0FcblxuICAgIC8vIEEgPSBYMV4yXG4gICAgdmFyIGEgPSB0aGlzLngucmVkU3FyKCk7XG4gICAgLy8gQiA9IFkxXjJcbiAgICB2YXIgYiA9IHRoaXMueS5yZWRTcXIoKTtcbiAgICAvLyBDID0gQl4yXG4gICAgdmFyIGMgPSBiLnJlZFNxcigpO1xuICAgIC8vIEQgPSAyICogKChYMSArIEIpXjIgLSBBIC0gQylcbiAgICB2YXIgZCA9IHRoaXMueC5yZWRBZGQoYikucmVkU3FyKCkucmVkSVN1YihhKS5yZWRJU3ViKGMpO1xuICAgIGQgPSBkLnJlZElBZGQoZCk7XG4gICAgLy8gRSA9IDMgKiBBXG4gICAgdmFyIGUgPSBhLnJlZEFkZChhKS5yZWRJQWRkKGEpO1xuICAgIC8vIEYgPSBFXjJcbiAgICB2YXIgZiA9IGUucmVkU3FyKCk7XG5cbiAgICAvLyA4ICogQ1xuICAgIHZhciBjOCA9IGMucmVkSUFkZChjKTtcbiAgICBjOCA9IGM4LnJlZElBZGQoYzgpO1xuICAgIGM4ID0gYzgucmVkSUFkZChjOCk7XG5cbiAgICAvLyBYMyA9IEYgLSAyICogRFxuICAgIG54ID0gZi5yZWRJU3ViKGQpLnJlZElTdWIoZCk7XG4gICAgLy8gWTMgPSBFICogKEQgLSBYMykgLSA4ICogQ1xuICAgIG55ID0gZS5yZWRNdWwoZC5yZWRJU3ViKG54KSkucmVkSVN1YihjOCk7XG4gICAgLy8gWjMgPSAyICogWTEgKiBaMVxuICAgIG56ID0gdGhpcy55LnJlZE11bCh0aGlzLnopO1xuICAgIG56ID0gbnoucmVkSUFkZChueik7XG4gIH1cblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsIG55LCBueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLl90aHJlZURibCA9IGZ1bmN0aW9uIF90aHJlZURibCgpIHtcbiAgdmFyIG54O1xuICB2YXIgbnk7XG4gIHZhciBuejtcbiAgLy8gWiA9IDFcbiAgaWYgKHRoaXMuek9uZSkge1xuICAgIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1zaG9ydHctamFjb2JpYW4tMy5odG1sXG4gICAgLy8gICAgICNkb3VibGluZy1tZGJsLTIwMDctYmxcbiAgICAvLyAxTSArIDVTICsgMTVBXG5cbiAgICAvLyBYWCA9IFgxXjJcbiAgICB2YXIgeHggPSB0aGlzLngucmVkU3FyKCk7XG4gICAgLy8gWVkgPSBZMV4yXG4gICAgdmFyIHl5ID0gdGhpcy55LnJlZFNxcigpO1xuICAgIC8vIFlZWVkgPSBZWV4yXG4gICAgdmFyIHl5eXkgPSB5eS5yZWRTcXIoKTtcbiAgICAvLyBTID0gMiAqICgoWDEgKyBZWSleMiAtIFhYIC0gWVlZWSlcbiAgICB2YXIgcyA9IHRoaXMueC5yZWRBZGQoeXkpLnJlZFNxcigpLnJlZElTdWIoeHgpLnJlZElTdWIoeXl5eSk7XG4gICAgcyA9IHMucmVkSUFkZChzKTtcbiAgICAvLyBNID0gMyAqIFhYICsgYVxuICAgIHZhciBtID0geHgucmVkQWRkKHh4KS5yZWRJQWRkKHh4KS5yZWRJQWRkKHRoaXMuY3VydmUuYSk7XG4gICAgLy8gVCA9IE1eMiAtIDIgKiBTXG4gICAgdmFyIHQgPSBtLnJlZFNxcigpLnJlZElTdWIocykucmVkSVN1YihzKTtcbiAgICAvLyBYMyA9IFRcbiAgICBueCA9IHQ7XG4gICAgLy8gWTMgPSBNICogKFMgLSBUKSAtIDggKiBZWVlZXG4gICAgdmFyIHl5eXk4ID0geXl5eS5yZWRJQWRkKHl5eXkpO1xuICAgIHl5eXk4ID0geXl5eTgucmVkSUFkZCh5eXl5OCk7XG4gICAgeXl5eTggPSB5eXl5OC5yZWRJQWRkKHl5eXk4KTtcbiAgICBueSA9IG0ucmVkTXVsKHMucmVkSVN1Yih0KSkucmVkSVN1Yih5eXl5OCk7XG4gICAgLy8gWjMgPSAyICogWTFcbiAgICBueiA9IHRoaXMueS5yZWRBZGQodGhpcy55KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tc2hvcnR3LWphY29iaWFuLTMuaHRtbCNkb3VibGluZy1kYmwtMjAwMS1iXG4gICAgLy8gM00gKyA1U1xuXG4gICAgLy8gZGVsdGEgPSBaMV4yXG4gICAgdmFyIGRlbHRhID0gdGhpcy56LnJlZFNxcigpO1xuICAgIC8vIGdhbW1hID0gWTFeMlxuICAgIHZhciBnYW1tYSA9IHRoaXMueS5yZWRTcXIoKTtcbiAgICAvLyBiZXRhID0gWDEgKiBnYW1tYVxuICAgIHZhciBiZXRhID0gdGhpcy54LnJlZE11bChnYW1tYSk7XG4gICAgLy8gYWxwaGEgPSAzICogKFgxIC0gZGVsdGEpICogKFgxICsgZGVsdGEpXG4gICAgdmFyIGFscGhhID0gdGhpcy54LnJlZFN1YihkZWx0YSkucmVkTXVsKHRoaXMueC5yZWRBZGQoZGVsdGEpKTtcbiAgICBhbHBoYSA9IGFscGhhLnJlZEFkZChhbHBoYSkucmVkSUFkZChhbHBoYSk7XG4gICAgLy8gWDMgPSBhbHBoYV4yIC0gOCAqIGJldGFcbiAgICB2YXIgYmV0YTQgPSBiZXRhLnJlZElBZGQoYmV0YSk7XG4gICAgYmV0YTQgPSBiZXRhNC5yZWRJQWRkKGJldGE0KTtcbiAgICB2YXIgYmV0YTggPSBiZXRhNC5yZWRBZGQoYmV0YTQpO1xuICAgIG54ID0gYWxwaGEucmVkU3FyKCkucmVkSVN1YihiZXRhOCk7XG4gICAgLy8gWjMgPSAoWTEgKyBaMSleMiAtIGdhbW1hIC0gZGVsdGFcbiAgICBueiA9IHRoaXMueS5yZWRBZGQodGhpcy56KS5yZWRTcXIoKS5yZWRJU3ViKGdhbW1hKS5yZWRJU3ViKGRlbHRhKTtcbiAgICAvLyBZMyA9IGFscGhhICogKDQgKiBiZXRhIC0gWDMpIC0gOCAqIGdhbW1hXjJcbiAgICB2YXIgZ2dhbW1hOCA9IGdhbW1hLnJlZFNxcigpO1xuICAgIGdnYW1tYTggPSBnZ2FtbWE4LnJlZElBZGQoZ2dhbW1hOCk7XG4gICAgZ2dhbW1hOCA9IGdnYW1tYTgucmVkSUFkZChnZ2FtbWE4KTtcbiAgICBnZ2FtbWE4ID0gZ2dhbW1hOC5yZWRJQWRkKGdnYW1tYTgpO1xuICAgIG55ID0gYWxwaGEucmVkTXVsKGJldGE0LnJlZElTdWIobngpKS5yZWRJU3ViKGdnYW1tYTgpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LCBueSwgbnopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5fZGJsID0gZnVuY3Rpb24gX2RibCgpIHtcbiAgdmFyIGEgPSB0aGlzLmN1cnZlLmE7XG5cbiAgLy8gNE0gKyA2UyArIDEwQVxuICB2YXIganggPSB0aGlzLng7XG4gIHZhciBqeSA9IHRoaXMueTtcbiAgdmFyIGp6ID0gdGhpcy56O1xuICB2YXIgano0ID0ganoucmVkU3FyKCkucmVkU3FyKCk7XG5cbiAgdmFyIGp4MiA9IGp4LnJlZFNxcigpO1xuICB2YXIgankyID0gankucmVkU3FyKCk7XG5cbiAgdmFyIGMgPSBqeDIucmVkQWRkKGp4MikucmVkSUFkZChqeDIpLnJlZElBZGQoYS5yZWRNdWwoano0KSk7XG5cbiAgdmFyIGp4ZDQgPSBqeC5yZWRBZGQoangpO1xuICBqeGQ0ID0ganhkNC5yZWRJQWRkKGp4ZDQpO1xuICB2YXIgdDEgPSBqeGQ0LnJlZE11bChqeTIpO1xuICB2YXIgbnggPSBjLnJlZFNxcigpLnJlZElTdWIodDEucmVkQWRkKHQxKSk7XG4gIHZhciB0MiA9IHQxLnJlZElTdWIobngpO1xuXG4gIHZhciBqeWQ4ID0gankyLnJlZFNxcigpO1xuICBqeWQ4ID0ganlkOC5yZWRJQWRkKGp5ZDgpO1xuICBqeWQ4ID0ganlkOC5yZWRJQWRkKGp5ZDgpO1xuICBqeWQ4ID0ganlkOC5yZWRJQWRkKGp5ZDgpO1xuICB2YXIgbnkgPSBjLnJlZE11bCh0MikucmVkSVN1YihqeWQ4KTtcbiAgdmFyIG56ID0gankucmVkQWRkKGp5KS5yZWRNdWwoanopO1xuXG4gIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChueCwgbnksIG56KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUudHJwbCA9IGZ1bmN0aW9uIHRycGwoKSB7XG4gIGlmICghdGhpcy5jdXJ2ZS56ZXJvQSlcbiAgICByZXR1cm4gdGhpcy5kYmwoKS5hZGQodGhpcyk7XG5cbiAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXNob3J0dy1qYWNvYmlhbi0wLmh0bWwjdHJpcGxpbmctdHBsLTIwMDctYmxcbiAgLy8gNU0gKyAxMFMgKyAuLi5cblxuICAvLyBYWCA9IFgxXjJcbiAgdmFyIHh4ID0gdGhpcy54LnJlZFNxcigpO1xuICAvLyBZWSA9IFkxXjJcbiAgdmFyIHl5ID0gdGhpcy55LnJlZFNxcigpO1xuICAvLyBaWiA9IFoxXjJcbiAgdmFyIHp6ID0gdGhpcy56LnJlZFNxcigpO1xuICAvLyBZWVlZID0gWVleMlxuICB2YXIgeXl5eSA9IHl5LnJlZFNxcigpO1xuICAvLyBNID0gMyAqIFhYICsgYSAqIFpaMjsgYSA9IDBcbiAgdmFyIG0gPSB4eC5yZWRBZGQoeHgpLnJlZElBZGQoeHgpO1xuICAvLyBNTSA9IE1eMlxuICB2YXIgbW0gPSBtLnJlZFNxcigpO1xuICAvLyBFID0gNiAqICgoWDEgKyBZWSleMiAtIFhYIC0gWVlZWSkgLSBNTVxuICB2YXIgZSA9IHRoaXMueC5yZWRBZGQoeXkpLnJlZFNxcigpLnJlZElTdWIoeHgpLnJlZElTdWIoeXl5eSk7XG4gIGUgPSBlLnJlZElBZGQoZSk7XG4gIGUgPSBlLnJlZEFkZChlKS5yZWRJQWRkKGUpO1xuICBlID0gZS5yZWRJU3ViKG1tKTtcbiAgLy8gRUUgPSBFXjJcbiAgdmFyIGVlID0gZS5yZWRTcXIoKTtcbiAgLy8gVCA9IDE2KllZWVlcbiAgdmFyIHQgPSB5eXl5LnJlZElBZGQoeXl5eSk7XG4gIHQgPSB0LnJlZElBZGQodCk7XG4gIHQgPSB0LnJlZElBZGQodCk7XG4gIHQgPSB0LnJlZElBZGQodCk7XG4gIC8vIFUgPSAoTSArIEUpXjIgLSBNTSAtIEVFIC0gVFxuICB2YXIgdSA9IG0ucmVkSUFkZChlKS5yZWRTcXIoKS5yZWRJU3ViKG1tKS5yZWRJU3ViKGVlKS5yZWRJU3ViKHQpO1xuICAvLyBYMyA9IDQgKiAoWDEgKiBFRSAtIDQgKiBZWSAqIFUpXG4gIHZhciB5eXU0ID0geXkucmVkTXVsKHUpO1xuICB5eXU0ID0geXl1NC5yZWRJQWRkKHl5dTQpO1xuICB5eXU0ID0geXl1NC5yZWRJQWRkKHl5dTQpO1xuICB2YXIgbnggPSB0aGlzLngucmVkTXVsKGVlKS5yZWRJU3ViKHl5dTQpO1xuICBueCA9IG54LnJlZElBZGQobngpO1xuICBueCA9IG54LnJlZElBZGQobngpO1xuICAvLyBZMyA9IDggKiBZMSAqIChVICogKFQgLSBVKSAtIEUgKiBFRSlcbiAgdmFyIG55ID0gdGhpcy55LnJlZE11bCh1LnJlZE11bCh0LnJlZElTdWIodSkpLnJlZElTdWIoZS5yZWRNdWwoZWUpKSk7XG4gIG55ID0gbnkucmVkSUFkZChueSk7XG4gIG55ID0gbnkucmVkSUFkZChueSk7XG4gIG55ID0gbnkucmVkSUFkZChueSk7XG4gIC8vIFozID0gKFoxICsgRSleMiAtIFpaIC0gRUVcbiAgdmFyIG56ID0gdGhpcy56LnJlZEFkZChlKS5yZWRTcXIoKS5yZWRJU3ViKHp6KS5yZWRJU3ViKGVlKTtcblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsIG55LCBueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bChrLCBrYmFzZSkge1xuICBrID0gbmV3IEJOKGssIGtiYXNlKTtcblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLCBrKTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcShwKSB7XG4gIGlmIChwLnR5cGUgPT09ICdhZmZpbmUnKVxuICAgIHJldHVybiB0aGlzLmVxKHAudG9KKCkpO1xuXG4gIGlmICh0aGlzID09PSBwKVxuICAgIHJldHVybiB0cnVlO1xuXG4gIC8vIHgxICogejJeMiA9PSB4MiAqIHoxXjJcbiAgdmFyIHoyID0gdGhpcy56LnJlZFNxcigpO1xuICB2YXIgcHoyID0gcC56LnJlZFNxcigpO1xuICBpZiAodGhpcy54LnJlZE11bChwejIpLnJlZElTdWIocC54LnJlZE11bCh6MikpLmNtcG4oMCkgIT09IDApXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIHkxICogejJeMyA9PSB5MiAqIHoxXjNcbiAgdmFyIHozID0gejIucmVkTXVsKHRoaXMueik7XG4gIHZhciBwejMgPSBwejIucmVkTXVsKHAueik7XG4gIHJldHVybiB0aGlzLnkucmVkTXVsKHB6MykucmVkSVN1YihwLnkucmVkTXVsKHozKSkuY21wbigwKSA9PT0gMDtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuZXFYVG9QID0gZnVuY3Rpb24gZXFYVG9QKHgpIHtcbiAgdmFyIHpzID0gdGhpcy56LnJlZFNxcigpO1xuICB2YXIgcnggPSB4LnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoenMpO1xuICBpZiAodGhpcy54LmNtcChyeCkgPT09IDApXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgdmFyIHhjID0geC5jbG9uZSgpO1xuICB2YXIgdCA9IHRoaXMuY3VydmUucmVkTi5yZWRNdWwoenMpO1xuICBmb3IgKDs7KSB7XG4gICAgeGMuaWFkZCh0aGlzLmN1cnZlLm4pO1xuICAgIGlmICh4Yy5jbXAodGhpcy5jdXJ2ZS5wKSA+PSAwKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgcngucmVkSUFkZCh0KTtcbiAgICBpZiAodGhpcy54LmNtcChyeCkgPT09IDApXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuICc8RUMgSlBvaW50IEluZmluaXR5Pic7XG4gIHJldHVybiAnPEVDIEpQb2ludCB4OiAnICsgdGhpcy54LnRvU3RyaW5nKDE2LCAyKSArXG4gICAgICAnIHk6ICcgKyB0aGlzLnkudG9TdHJpbmcoMTYsIDIpICtcbiAgICAgICcgejogJyArIHRoaXMuei50b1N0cmluZygxNiwgMikgKyAnPic7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmlzSW5maW5pdHkgPSBmdW5jdGlvbiBpc0luZmluaXR5KCkge1xuICAvLyBYWFggVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCB6ZXJvIGlzIGFsd2F5cyB6ZXJvIGluIHJlZFxuICByZXR1cm4gdGhpcy56LmNtcG4oMCkgPT09IDA7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3VydmVzID0gZXhwb3J0cztcblxudmFyIGhhc2ggPSByZXF1aXJlKCdoYXNoLmpzJyk7XG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi9lbGxpcHRpYycpO1xuXG52YXIgYXNzZXJ0ID0gZWxsaXB0aWMudXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBQcmVzZXRDdXJ2ZShvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnR5cGUgPT09ICdzaG9ydCcpXG4gICAgdGhpcy5jdXJ2ZSA9IG5ldyBlbGxpcHRpYy5jdXJ2ZS5zaG9ydChvcHRpb25zKTtcbiAgZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSAnZWR3YXJkcycpXG4gICAgdGhpcy5jdXJ2ZSA9IG5ldyBlbGxpcHRpYy5jdXJ2ZS5lZHdhcmRzKG9wdGlvbnMpO1xuICBlbHNlXG4gICAgdGhpcy5jdXJ2ZSA9IG5ldyBlbGxpcHRpYy5jdXJ2ZS5tb250KG9wdGlvbnMpO1xuICB0aGlzLmcgPSB0aGlzLmN1cnZlLmc7XG4gIHRoaXMubiA9IHRoaXMuY3VydmUubjtcbiAgdGhpcy5oYXNoID0gb3B0aW9ucy5oYXNoO1xuXG4gIGFzc2VydCh0aGlzLmcudmFsaWRhdGUoKSwgJ0ludmFsaWQgY3VydmUnKTtcbiAgYXNzZXJ0KHRoaXMuZy5tdWwodGhpcy5uKS5pc0luZmluaXR5KCksICdJbnZhbGlkIGN1cnZlLCBHKk4gIT0gTycpO1xufVxuY3VydmVzLlByZXNldEN1cnZlID0gUHJlc2V0Q3VydmU7XG5cbmZ1bmN0aW9uIGRlZmluZUN1cnZlKG5hbWUsIG9wdGlvbnMpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN1cnZlcywgbmFtZSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgY3VydmUgPSBuZXcgUHJlc2V0Q3VydmUob3B0aW9ucyk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3VydmVzLCBuYW1lLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGN1cnZlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjdXJ2ZTtcbiAgICB9XG4gIH0pO1xufVxuXG5kZWZpbmVDdXJ2ZSgncDE5MicsIHtcbiAgdHlwZTogJ3Nob3J0JyxcbiAgcHJpbWU6ICdwMTkyJyxcbiAgcDogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmJyxcbiAgYTogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZjJyxcbiAgYjogJzY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxJyxcbiAgbjogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDk5ZGVmODM2IDE0NmJjOWIxIGI0ZDIyODMxJyxcbiAgaGFzaDogaGFzaC5zaGEyNTYsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJzE4OGRhODBlIGIwMzA5MGY2IDdjYmYyMGViIDQzYTE4ODAwIGY0ZmYwYWZkIDgyZmYxMDEyJyxcbiAgICAnMDcxOTJiOTUgZmZjOGRhNzggNjMxMDExZWQgNmIyNGNkZDUgNzNmOTc3YTEgMWU3OTQ4MTEnXG4gIF1cbn0pO1xuXG5kZWZpbmVDdXJ2ZSgncDIyNCcsIHtcbiAgdHlwZTogJ3Nob3J0JyxcbiAgcHJpbWU6ICdwMjI0JyxcbiAgcDogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxJyxcbiAgYTogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlJyxcbiAgYjogJ2I0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3MGIzOTQzIDIzNTVmZmI0JyxcbiAgbjogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmYxNmEyIGUwYjhmMDNlIDEzZGQyOTQ1IDVjNWMyYTNkJyxcbiAgaGFzaDogaGFzaC5zaGEyNTYsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJ2I3MGUwY2JkIDZiYjRiZjdmIDMyMTM5MGI5IDRhMDNjMWQzIDU2YzIxMTIyIDM0MzI4MGQ2IDExNWMxZDIxJyxcbiAgICAnYmQzNzYzODggYjVmNzIzZmIgNGMyMmRmZTYgY2Q0Mzc1YTAgNWEwNzQ3NjQgNDRkNTgxOTkgODUwMDdlMzQnXG4gIF1cbn0pO1xuXG5kZWZpbmVDdXJ2ZSgncDI1NicsIHtcbiAgdHlwZTogJ3Nob3J0JyxcbiAgcHJpbWU6IG51bGwsXG4gIHA6ICdmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZicsXG4gIGE6ICdmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYycsXG4gIGI6ICc1YWM2MzVkOCBhYTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYyA2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAyN2QyNjA0YicsXG4gIG46ICdmZmZmZmZmZiAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBiY2U2ZmFhZCBhNzE3OWU4NCBmM2I5Y2FjMiBmYzYzMjU1MScsXG4gIGhhc2g6IGhhc2guc2hhMjU2LFxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICc2YjE3ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0NDBmMiA3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0NSBkODk4YzI5NicsXG4gICAgJzRmZTM0MmUyIGZlMWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2IDJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1J1xuICBdXG59KTtcblxuZGVmaW5lQ3VydmUoJ3AzODQnLCB7XG4gIHR5cGU6ICdzaG9ydCcsXG4gIHByaW1lOiBudWxsLFxuICBwOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgJyArXG4gICAgICdmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZicsXG4gIGE6ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZjJyxcbiAgYjogJ2IzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUzZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmICcgK1xuICAgICAnNTAxMzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWYnLFxuICBuOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgYzc2MzRkODEgJyArXG4gICAgICdmNDM3MmRkZiA1ODFhMGRiMiA0OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3MycsXG4gIGhhc2g6IGhhc2guc2hhMzg0LFxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICdhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEzOCAnICtcbiAgICAnNTUwMmYyNWQgYmY1NTI5NmMgM2E1NDVlMzggNzI3NjBhYjcnLFxuICAgICczNjE3ZGU0YSA5NjI2MmM2ZiA1ZDllOThiZiA5MjkyZGMyOSBmOGY0MWRiZCAyODlhMTQ3YyBlOWRhMzExMyBiNWYwYjhjMCAnICtcbiAgICAnMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWYnXG4gIF1cbn0pO1xuXG5kZWZpbmVDdXJ2ZSgncDUyMScsIHtcbiAgdHlwZTogJ3Nob3J0JyxcbiAgcHJpbWU6IG51bGwsXG4gIHA6ICcwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYnLFxuICBhOiAnMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgJyArXG4gICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjJyxcbiAgYjogJzAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVlIGEyZGE3MjViICcgK1xuICAgICAnOTliMzE1ZjMgYjhiNDg5OTEgOGVmMTA5ZTEgNTYxOTM5NTEgZWM3ZTkzN2IgMTY1MmMwYmQgJyArXG4gICAgICczYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMCcsXG4gIG46ICcwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZhIDUxODY4NzgzIGJmMmY5NjZiIDdmY2MwMTQ4ICcgK1xuICAgICAnZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDknLFxuICBoYXNoOiBoYXNoLnNoYTUxMixcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgJyArXG4gICAgJzA1M2ZiNTIxIGY4MjhhZjYwIDZiNGQzZGJhIGExNGI1ZTc3IGVmZTc1OTI4IGZlMWRjMTI3ICcgK1xuICAgICdhMmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBmOTdlN2UzMSBjMmU1YmQ2NicsXG4gICAgJzAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVjOGE1ZmI0IDJjN2QxYmQ5IDk4ZjU0NDQ5ICcgK1xuICAgICc1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAnICtcbiAgICAnM2ZhZDA3NjEgMzUzYzcwODYgYTI3MmMyNDAgODhiZTk0NzYgOWZkMTY2NTAnXG4gIF1cbn0pO1xuXG5kZWZpbmVDdXJ2ZSgnY3VydmUyNTUxOScsIHtcbiAgdHlwZTogJ21vbnQnLFxuICBwcmltZTogJ3AyNTUxOScsXG4gIHA6ICc3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkJyxcbiAgYTogJzc2ZDA2JyxcbiAgYjogJzEnLFxuICBuOiAnMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCcsXG4gIGhhc2g6IGhhc2guc2hhMjU2LFxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICc5J1xuICBdXG59KTtcblxuZGVmaW5lQ3VydmUoJ2VkMjU1MTknLCB7XG4gIHR5cGU6ICdlZHdhcmRzJyxcbiAgcHJpbWU6ICdwMjU1MTknLFxuICBwOiAnN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCcsXG4gIGE6ICctMScsXG4gIGM6ICcxJyxcbiAgLy8gLTEyMTY2NSAqICgxMjE2NjZeKC0xKSkgKG1vZCBQKVxuICBkOiAnNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhMycsXG4gIG46ICcxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkJyxcbiAgaGFzaDogaGFzaC5zaGEyNTYsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJzIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWEnLFxuXG4gICAgLy8gNC81XG4gICAgJzY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NTgnXG4gIF1cbn0pO1xuXG52YXIgcHJlO1xudHJ5IHtcbiAgcHJlID0gcmVxdWlyZSgnLi9wcmVjb21wdXRlZC9zZWNwMjU2azEnKTtcbn0gY2F0Y2ggKGUpIHtcbiAgcHJlID0gdW5kZWZpbmVkO1xufVxuXG5kZWZpbmVDdXJ2ZSgnc2VjcDI1NmsxJywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogJ2syNTYnLFxuICBwOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYnLFxuICBhOiAnMCcsXG4gIGI6ICc3JyxcbiAgbjogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGJhYWVkY2U2IGFmNDhhMDNiIGJmZDI1ZThjIGQwMzY0MTQxJyxcbiAgaDogJzEnLFxuICBoYXNoOiBoYXNoLnNoYTI1NixcblxuICAvLyBQcmVjb21wdXRlZCBlbmRvbW9ycGhpc21cbiAgYmV0YTogJzdhZTk2YTJiNjU3YzA3MTA2ZTY0NDc5ZWFjMzQzNGU5OWNmMDQ5NzUxMmY1ODk5NWMxMzk2YzI4NzE5NTAxZWUnLFxuICBsYW1iZGE6ICc1MzYzYWQ0Y2MwNWMzMGUwYTUyNjFjMDI4ODEyNjQ1YTEyMmUyMmVhMjA4MTY2NzhkZjAyOTY3YzFiMjNiZDcyJyxcbiAgYmFzaXM6IFtcbiAgICB7XG4gICAgICBhOiAnMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUnLFxuICAgICAgYjogJy1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjMydcbiAgICB9LFxuICAgIHtcbiAgICAgIGE6ICcxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgnLFxuICAgICAgYjogJzMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1J1xuICAgIH1cbiAgXSxcblxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICc3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4JyxcbiAgICAnNDgzYWRhNzcyNmEzYzQ2NTVkYTRmYmZjMGUxMTA4YThmZDE3YjQ0OGE2ODU1NDE5OWM0N2QwOGZmYjEwZDRiOCcsXG4gICAgcHJlXG4gIF1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIEhtYWNEUkJHID0gcmVxdWlyZSgnaG1hYy1kcmJnJyk7XG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xuXG52YXIgS2V5UGFpciA9IHJlcXVpcmUoJy4va2V5Jyk7XG52YXIgU2lnbmF0dXJlID0gcmVxdWlyZSgnLi9zaWduYXR1cmUnKTtcblxuZnVuY3Rpb24gRUMob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRUMpKVxuICAgIHJldHVybiBuZXcgRUMob3B0aW9ucyk7XG5cbiAgLy8gU2hvcnRjdXQgYGVsbGlwdGljLmVjKGN1cnZlLW5hbWUpYFxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgYXNzZXJ0KGVsbGlwdGljLmN1cnZlcy5oYXNPd25Qcm9wZXJ0eShvcHRpb25zKSwgJ1Vua25vd24gY3VydmUgJyArIG9wdGlvbnMpO1xuXG4gICAgb3B0aW9ucyA9IGVsbGlwdGljLmN1cnZlc1tvcHRpb25zXTtcbiAgfVxuXG4gIC8vIFNob3J0Y3V0IGZvciBgZWxsaXB0aWMuZWMoZWxsaXB0aWMuY3VydmVzLmN1cnZlTmFtZSlgXG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgZWxsaXB0aWMuY3VydmVzLlByZXNldEN1cnZlKVxuICAgIG9wdGlvbnMgPSB7IGN1cnZlOiBvcHRpb25zIH07XG5cbiAgdGhpcy5jdXJ2ZSA9IG9wdGlvbnMuY3VydmUuY3VydmU7XG4gIHRoaXMubiA9IHRoaXMuY3VydmUubjtcbiAgdGhpcy5uaCA9IHRoaXMubi51c2hybigxKTtcbiAgdGhpcy5nID0gdGhpcy5jdXJ2ZS5nO1xuXG4gIC8vIFBvaW50IG9uIGN1cnZlXG4gIHRoaXMuZyA9IG9wdGlvbnMuY3VydmUuZztcbiAgdGhpcy5nLnByZWNvbXB1dGUob3B0aW9ucy5jdXJ2ZS5uLmJpdExlbmd0aCgpICsgMSk7XG5cbiAgLy8gSGFzaCBmb3IgZnVuY3Rpb24gZm9yIERSQkdcbiAgdGhpcy5oYXNoID0gb3B0aW9ucy5oYXNoIHx8IG9wdGlvbnMuY3VydmUuaGFzaDtcbn1cbm1vZHVsZS5leHBvcnRzID0gRUM7XG5cbkVDLnByb3RvdHlwZS5rZXlQYWlyID0gZnVuY3Rpb24ga2V5UGFpcihvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgS2V5UGFpcih0aGlzLCBvcHRpb25zKTtcbn07XG5cbkVDLnByb3RvdHlwZS5rZXlGcm9tUHJpdmF0ZSA9IGZ1bmN0aW9uIGtleUZyb21Qcml2YXRlKHByaXYsIGVuYykge1xuICByZXR1cm4gS2V5UGFpci5mcm9tUHJpdmF0ZSh0aGlzLCBwcml2LCBlbmMpO1xufTtcblxuRUMucHJvdG90eXBlLmtleUZyb21QdWJsaWMgPSBmdW5jdGlvbiBrZXlGcm9tUHVibGljKHB1YiwgZW5jKSB7XG4gIHJldHVybiBLZXlQYWlyLmZyb21QdWJsaWModGhpcywgcHViLCBlbmMpO1xufTtcblxuRUMucHJvdG90eXBlLmdlbktleVBhaXIgPSBmdW5jdGlvbiBnZW5LZXlQYWlyKG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKVxuICAgIG9wdGlvbnMgPSB7fTtcblxuICAvLyBJbnN0YW50aWF0ZSBIbWFjX0RSQkdcbiAgdmFyIGRyYmcgPSBuZXcgSG1hY0RSQkcoe1xuICAgIGhhc2g6IHRoaXMuaGFzaCxcbiAgICBwZXJzOiBvcHRpb25zLnBlcnMsXG4gICAgcGVyc0VuYzogb3B0aW9ucy5wZXJzRW5jIHx8ICd1dGY4JyxcbiAgICBlbnRyb3B5OiBvcHRpb25zLmVudHJvcHkgfHwgZWxsaXB0aWMucmFuZCh0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxcbiAgICBlbnRyb3B5RW5jOiBvcHRpb25zLmVudHJvcHkgJiYgb3B0aW9ucy5lbnRyb3B5RW5jIHx8ICd1dGY4JyxcbiAgICBub25jZTogdGhpcy5uLnRvQXJyYXkoKVxuICB9KTtcblxuICB2YXIgYnl0ZXMgPSB0aGlzLm4uYnl0ZUxlbmd0aCgpO1xuICB2YXIgbnMyID0gdGhpcy5uLnN1YihuZXcgQk4oMikpO1xuICBkbyB7XG4gICAgdmFyIHByaXYgPSBuZXcgQk4oZHJiZy5nZW5lcmF0ZShieXRlcykpO1xuICAgIGlmIChwcml2LmNtcChuczIpID4gMClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgcHJpdi5pYWRkbigxKTtcbiAgICByZXR1cm4gdGhpcy5rZXlGcm9tUHJpdmF0ZShwcml2KTtcbiAgfSB3aGlsZSAodHJ1ZSk7XG59O1xuXG5FQy5wcm90b3R5cGUuX3RydW5jYXRlVG9OID0gZnVuY3Rpb24gdHJ1bmNhdGVUb04obXNnLCB0cnVuY09ubHkpIHtcbiAgdmFyIGRlbHRhID0gbXNnLmJ5dGVMZW5ndGgoKSAqIDggLSB0aGlzLm4uYml0TGVuZ3RoKCk7XG4gIGlmIChkZWx0YSA+IDApXG4gICAgbXNnID0gbXNnLnVzaHJuKGRlbHRhKTtcbiAgaWYgKCF0cnVuY09ubHkgJiYgbXNnLmNtcCh0aGlzLm4pID49IDApXG4gICAgcmV0dXJuIG1zZy5zdWIodGhpcy5uKTtcbiAgZWxzZVxuICAgIHJldHVybiBtc2c7XG59O1xuXG5FQy5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uIHNpZ24obXNnLCBrZXksIGVuYywgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIGVuYyA9PT0gJ29iamVjdCcpIHtcbiAgICBvcHRpb25zID0gZW5jO1xuICAgIGVuYyA9IG51bGw7XG4gIH1cbiAgaWYgKCFvcHRpb25zKVxuICAgIG9wdGlvbnMgPSB7fTtcblxuICBrZXkgPSB0aGlzLmtleUZyb21Qcml2YXRlKGtleSwgZW5jKTtcbiAgbXNnID0gdGhpcy5fdHJ1bmNhdGVUb04obmV3IEJOKG1zZywgMTYpKTtcblxuICAvLyBaZXJvLWV4dGVuZCBrZXkgdG8gcHJvdmlkZSBlbm91Z2ggZW50cm9weVxuICB2YXIgYnl0ZXMgPSB0aGlzLm4uYnl0ZUxlbmd0aCgpO1xuICB2YXIgYmtleSA9IGtleS5nZXRQcml2YXRlKCkudG9BcnJheSgnYmUnLCBieXRlcyk7XG5cbiAgLy8gWmVyby1leHRlbmQgbm9uY2UgdG8gaGF2ZSB0aGUgc2FtZSBieXRlIHNpemUgYXMgTlxuICB2YXIgbm9uY2UgPSBtc2cudG9BcnJheSgnYmUnLCBieXRlcyk7XG5cbiAgLy8gSW5zdGFudGlhdGUgSG1hY19EUkJHXG4gIHZhciBkcmJnID0gbmV3IEhtYWNEUkJHKHtcbiAgICBoYXNoOiB0aGlzLmhhc2gsXG4gICAgZW50cm9weTogYmtleSxcbiAgICBub25jZTogbm9uY2UsXG4gICAgcGVyczogb3B0aW9ucy5wZXJzLFxuICAgIHBlcnNFbmM6IG9wdGlvbnMucGVyc0VuYyB8fCAndXRmOCdcbiAgfSk7XG5cbiAgLy8gTnVtYmVyIG9mIGJ5dGVzIHRvIGdlbmVyYXRlXG4gIHZhciBuczEgPSB0aGlzLm4uc3ViKG5ldyBCTigxKSk7XG5cbiAgZm9yICh2YXIgaXRlciA9IDA7IHRydWU7IGl0ZXIrKykge1xuICAgIHZhciBrID0gb3B0aW9ucy5rID9cbiAgICAgICAgb3B0aW9ucy5rKGl0ZXIpIDpcbiAgICAgICAgbmV3IEJOKGRyYmcuZ2VuZXJhdGUodGhpcy5uLmJ5dGVMZW5ndGgoKSkpO1xuICAgIGsgPSB0aGlzLl90cnVuY2F0ZVRvTihrLCB0cnVlKTtcbiAgICBpZiAoay5jbXBuKDEpIDw9IDAgfHwgay5jbXAobnMxKSA+PSAwKVxuICAgICAgY29udGludWU7XG5cbiAgICB2YXIga3AgPSB0aGlzLmcubXVsKGspO1xuICAgIGlmIChrcC5pc0luZmluaXR5KCkpXG4gICAgICBjb250aW51ZTtcblxuICAgIHZhciBrcFggPSBrcC5nZXRYKCk7XG4gICAgdmFyIHIgPSBrcFgudW1vZCh0aGlzLm4pO1xuICAgIGlmIChyLmNtcG4oMCkgPT09IDApXG4gICAgICBjb250aW51ZTtcblxuICAgIHZhciBzID0gay5pbnZtKHRoaXMubikubXVsKHIubXVsKGtleS5nZXRQcml2YXRlKCkpLmlhZGQobXNnKSk7XG4gICAgcyA9IHMudW1vZCh0aGlzLm4pO1xuICAgIGlmIChzLmNtcG4oMCkgPT09IDApXG4gICAgICBjb250aW51ZTtcblxuICAgIHZhciByZWNvdmVyeVBhcmFtID0gKGtwLmdldFkoKS5pc09kZCgpID8gMSA6IDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChrcFguY21wKHIpICE9PSAwID8gMiA6IDApO1xuXG4gICAgLy8gVXNlIGNvbXBsZW1lbnQgb2YgYHNgLCBpZiBpdCBpcyA+IGBuIC8gMmBcbiAgICBpZiAob3B0aW9ucy5jYW5vbmljYWwgJiYgcy5jbXAodGhpcy5uaCkgPiAwKSB7XG4gICAgICBzID0gdGhpcy5uLnN1YihzKTtcbiAgICAgIHJlY292ZXJ5UGFyYW0gXj0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNpZ25hdHVyZSh7IHI6IHIsIHM6IHMsIHJlY292ZXJ5UGFyYW06IHJlY292ZXJ5UGFyYW0gfSk7XG4gIH1cbn07XG5cbkVDLnByb3RvdHlwZS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobXNnLCBzaWduYXR1cmUsIGtleSwgZW5jKSB7XG4gIG1zZyA9IHRoaXMuX3RydW5jYXRlVG9OKG5ldyBCTihtc2csIDE2KSk7XG4gIGtleSA9IHRoaXMua2V5RnJvbVB1YmxpYyhrZXksIGVuYyk7XG4gIHNpZ25hdHVyZSA9IG5ldyBTaWduYXR1cmUoc2lnbmF0dXJlLCAnaGV4Jyk7XG5cbiAgLy8gUGVyZm9ybSBwcmltaXRpdmUgdmFsdWVzIHZhbGlkYXRpb25cbiAgdmFyIHIgPSBzaWduYXR1cmUucjtcbiAgdmFyIHMgPSBzaWduYXR1cmUucztcbiAgaWYgKHIuY21wbigxKSA8IDAgfHwgci5jbXAodGhpcy5uKSA+PSAwKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKHMuY21wbigxKSA8IDAgfHwgcy5jbXAodGhpcy5uKSA+PSAwKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBWYWxpZGF0ZSBzaWduYXR1cmVcbiAgdmFyIHNpbnYgPSBzLmludm0odGhpcy5uKTtcbiAgdmFyIHUxID0gc2ludi5tdWwobXNnKS51bW9kKHRoaXMubik7XG4gIHZhciB1MiA9IHNpbnYubXVsKHIpLnVtb2QodGhpcy5uKTtcblxuICBpZiAoIXRoaXMuY3VydmUuX21heHdlbGxUcmljaykge1xuICAgIHZhciBwID0gdGhpcy5nLm11bEFkZCh1MSwga2V5LmdldFB1YmxpYygpLCB1Mik7XG4gICAgaWYgKHAuaXNJbmZpbml0eSgpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHAuZ2V0WCgpLnVtb2QodGhpcy5uKS5jbXAocikgPT09IDA7XG4gIH1cblxuICAvLyBOT1RFOiBHcmVnIE1heHdlbGwncyB0cmljaywgaW5zcGlyZWQgYnk6XG4gIC8vIGh0dHBzOi8vZ2l0LmlvL3ZhZDNLXG5cbiAgdmFyIHAgPSB0aGlzLmcuam11bEFkZCh1MSwga2V5LmdldFB1YmxpYygpLCB1Mik7XG4gIGlmIChwLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gQ29tcGFyZSBgcC54YCBvZiBKYWNvYmlhbiBwb2ludCB3aXRoIGByYCxcbiAgLy8gdGhpcyB3aWxsIGRvIGBwLnggPT0gciAqIHAuel4yYCBpbnN0ZWFkIG9mIG11bHRpcGx5aW5nIGBwLnhgIGJ5IHRoZVxuICAvLyBpbnZlcnNlIG9mIGBwLnpeMmBcbiAgcmV0dXJuIHAuZXFYVG9QKHIpO1xufTtcblxuRUMucHJvdG90eXBlLnJlY292ZXJQdWJLZXkgPSBmdW5jdGlvbihtc2csIHNpZ25hdHVyZSwgaiwgZW5jKSB7XG4gIGFzc2VydCgoMyAmIGopID09PSBqLCAnVGhlIHJlY292ZXJ5IHBhcmFtIGlzIG1vcmUgdGhhbiB0d28gYml0cycpO1xuICBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKHNpZ25hdHVyZSwgZW5jKTtcblxuICB2YXIgbiA9IHRoaXMubjtcbiAgdmFyIGUgPSBuZXcgQk4obXNnKTtcbiAgdmFyIHIgPSBzaWduYXR1cmUucjtcbiAgdmFyIHMgPSBzaWduYXR1cmUucztcblxuICAvLyBBIHNldCBMU0Igc2lnbmlmaWVzIHRoYXQgdGhlIHktY29vcmRpbmF0ZSBpcyBvZGRcbiAgdmFyIGlzWU9kZCA9IGogJiAxO1xuICB2YXIgaXNTZWNvbmRLZXkgPSBqID4+IDE7XG4gIGlmIChyLmNtcCh0aGlzLmN1cnZlLnAudW1vZCh0aGlzLmN1cnZlLm4pKSA+PSAwICYmIGlzU2Vjb25kS2V5KVxuICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgc2VuY29uZCBrZXkgY2FuZGluYXRlJyk7XG5cbiAgLy8gMS4xLiBMZXQgeCA9IHIgKyBqbi5cbiAgaWYgKGlzU2Vjb25kS2V5KVxuICAgIHIgPSB0aGlzLmN1cnZlLnBvaW50RnJvbVgoci5hZGQodGhpcy5jdXJ2ZS5uKSwgaXNZT2RkKTtcbiAgZWxzZVxuICAgIHIgPSB0aGlzLmN1cnZlLnBvaW50RnJvbVgociwgaXNZT2RkKTtcblxuICB2YXIgckludiA9IHNpZ25hdHVyZS5yLmludm0obik7XG4gIHZhciBzMSA9IG4uc3ViKGUpLm11bChySW52KS51bW9kKG4pO1xuICB2YXIgczIgPSBzLm11bChySW52KS51bW9kKG4pO1xuXG4gIC8vIDEuNi4xIENvbXB1dGUgUSA9IHJeLTEgKHNSIC0gIGVHKVxuICAvLyAgICAgICAgICAgICAgIFEgPSByXi0xIChzUiArIC1lRylcbiAgcmV0dXJuIHRoaXMuZy5tdWxBZGQoczEsIHIsIHMyKTtcbn07XG5cbkVDLnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtID0gZnVuY3Rpb24oZSwgc2lnbmF0dXJlLCBRLCBlbmMpIHtcbiAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShzaWduYXR1cmUsIGVuYyk7XG4gIGlmIChzaWduYXR1cmUucmVjb3ZlcnlQYXJhbSAhPT0gbnVsbClcbiAgICByZXR1cm4gc2lnbmF0dXJlLnJlY292ZXJ5UGFyYW07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICB2YXIgUXByaW1lO1xuICAgIHRyeSB7XG4gICAgICBRcHJpbWUgPSB0aGlzLnJlY292ZXJQdWJLZXkoZSwgc2lnbmF0dXJlLCBpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoUXByaW1lLmVxKFEpKVxuICAgICAgcmV0dXJuIGk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCB2YWxpZCByZWNvdmVyeSBmYWN0b3InKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBLZXlQYWlyKGVjLCBvcHRpb25zKSB7XG4gIHRoaXMuZWMgPSBlYztcbiAgdGhpcy5wcml2ID0gbnVsbDtcbiAgdGhpcy5wdWIgPSBudWxsO1xuXG4gIC8vIEtleVBhaXIoZWMsIHsgcHJpdjogLi4uLCBwdWI6IC4uLiB9KVxuICBpZiAob3B0aW9ucy5wcml2KVxuICAgIHRoaXMuX2ltcG9ydFByaXZhdGUob3B0aW9ucy5wcml2LCBvcHRpb25zLnByaXZFbmMpO1xuICBpZiAob3B0aW9ucy5wdWIpXG4gICAgdGhpcy5faW1wb3J0UHVibGljKG9wdGlvbnMucHViLCBvcHRpb25zLnB1YkVuYyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEtleVBhaXI7XG5cbktleVBhaXIuZnJvbVB1YmxpYyA9IGZ1bmN0aW9uIGZyb21QdWJsaWMoZWMsIHB1YiwgZW5jKSB7XG4gIGlmIChwdWIgaW5zdGFuY2VvZiBLZXlQYWlyKVxuICAgIHJldHVybiBwdWI7XG5cbiAgcmV0dXJuIG5ldyBLZXlQYWlyKGVjLCB7XG4gICAgcHViOiBwdWIsXG4gICAgcHViRW5jOiBlbmNcbiAgfSk7XG59O1xuXG5LZXlQYWlyLmZyb21Qcml2YXRlID0gZnVuY3Rpb24gZnJvbVByaXZhdGUoZWMsIHByaXYsIGVuYykge1xuICBpZiAocHJpdiBpbnN0YW5jZW9mIEtleVBhaXIpXG4gICAgcmV0dXJuIHByaXY7XG5cbiAgcmV0dXJuIG5ldyBLZXlQYWlyKGVjLCB7XG4gICAgcHJpdjogcHJpdixcbiAgICBwcml2RW5jOiBlbmNcbiAgfSk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKCkge1xuICB2YXIgcHViID0gdGhpcy5nZXRQdWJsaWMoKTtcblxuICBpZiAocHViLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4geyByZXN1bHQ6IGZhbHNlLCByZWFzb246ICdJbnZhbGlkIHB1YmxpYyBrZXknIH07XG4gIGlmICghcHViLnZhbGlkYXRlKCkpXG4gICAgcmV0dXJuIHsgcmVzdWx0OiBmYWxzZSwgcmVhc29uOiAnUHVibGljIGtleSBpcyBub3QgYSBwb2ludCcgfTtcbiAgaWYgKCFwdWIubXVsKHRoaXMuZWMuY3VydmUubikuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIHJlYXNvbjogJ1B1YmxpYyBrZXkgKiBOICE9IE8nIH07XG5cbiAgcmV0dXJuIHsgcmVzdWx0OiB0cnVlLCByZWFzb246IG51bGwgfTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLmdldFB1YmxpYyA9IGZ1bmN0aW9uIGdldFB1YmxpYyhjb21wYWN0LCBlbmMpIHtcbiAgLy8gY29tcGFjdCBpcyBvcHRpb25hbCBhcmd1bWVudFxuICBpZiAodHlwZW9mIGNvbXBhY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jID0gY29tcGFjdDtcbiAgICBjb21wYWN0ID0gbnVsbDtcbiAgfVxuXG4gIGlmICghdGhpcy5wdWIpXG4gICAgdGhpcy5wdWIgPSB0aGlzLmVjLmcubXVsKHRoaXMucHJpdik7XG5cbiAgaWYgKCFlbmMpXG4gICAgcmV0dXJuIHRoaXMucHViO1xuXG4gIHJldHVybiB0aGlzLnB1Yi5lbmNvZGUoZW5jLCBjb21wYWN0KTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLmdldFByaXZhdGUgPSBmdW5jdGlvbiBnZXRQcml2YXRlKGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdGhpcy5wcml2LnRvU3RyaW5nKDE2LCAyKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLnByaXY7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZSA9IGZ1bmN0aW9uIF9pbXBvcnRQcml2YXRlKGtleSwgZW5jKSB7XG4gIHRoaXMucHJpdiA9IG5ldyBCTihrZXksIGVuYyB8fCAxNik7XG5cbiAgLy8gRW5zdXJlIHRoYXQgdGhlIHByaXYgd29uJ3QgYmUgYmlnZ2VyIHRoYW4gbiwgb3RoZXJ3aXNlIHdlIG1heSBmYWlsXG4gIC8vIGluIGZpeGVkIG11bHRpcGxpY2F0aW9uIG1ldGhvZFxuICB0aGlzLnByaXYgPSB0aGlzLnByaXYudW1vZCh0aGlzLmVjLmN1cnZlLm4pO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuX2ltcG9ydFB1YmxpYyA9IGZ1bmN0aW9uIF9pbXBvcnRQdWJsaWMoa2V5LCBlbmMpIHtcbiAgaWYgKGtleS54IHx8IGtleS55KSB7XG4gICAgLy8gTW9udGdvbWVyeSBwb2ludHMgb25seSBoYXZlIGFuIGB4YCBjb29yZGluYXRlLlxuICAgIC8vIFdlaWVyc3RyYXNzL0Vkd2FyZHMgcG9pbnRzIG9uIHRoZSBvdGhlciBoYW5kIGhhdmUgYm90aCBgeGAgYW5kXG4gICAgLy8gYHlgIGNvb3JkaW5hdGVzLlxuICAgIGlmICh0aGlzLmVjLmN1cnZlLnR5cGUgPT09ICdtb250Jykge1xuICAgICAgYXNzZXJ0KGtleS54LCAnTmVlZCB4IGNvb3JkaW5hdGUnKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZWMuY3VydmUudHlwZSA9PT0gJ3Nob3J0JyB8fFxuICAgICAgICAgICAgICAgdGhpcy5lYy5jdXJ2ZS50eXBlID09PSAnZWR3YXJkcycpIHtcbiAgICAgIGFzc2VydChrZXkueCAmJiBrZXkueSwgJ05lZWQgYm90aCB4IGFuZCB5IGNvb3JkaW5hdGUnKTtcbiAgICB9XG4gICAgdGhpcy5wdWIgPSB0aGlzLmVjLmN1cnZlLnBvaW50KGtleS54LCBrZXkueSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMucHViID0gdGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChrZXksIGVuYyk7XG59O1xuXG4vLyBFQ0RIXG5LZXlQYWlyLnByb3RvdHlwZS5kZXJpdmUgPSBmdW5jdGlvbiBkZXJpdmUocHViKSB7XG4gIHJldHVybiBwdWIubXVsKHRoaXMucHJpdikuZ2V0WCgpO1xufTtcblxuLy8gRUNEU0FcbktleVBhaXIucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiBzaWduKG1zZywgZW5jLCBvcHRpb25zKSB7XG4gIHJldHVybiB0aGlzLmVjLnNpZ24obXNnLCB0aGlzLCBlbmMsIG9wdGlvbnMpO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1zZywgc2lnbmF0dXJlKSB7XG4gIHJldHVybiB0aGlzLmVjLnZlcmlmeShtc2csIHNpZ25hdHVyZSwgdGhpcyk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgcmV0dXJuICc8S2V5IHByaXY6ICcgKyAodGhpcy5wcml2ICYmIHRoaXMucHJpdi50b1N0cmluZygxNiwgMikpICtcbiAgICAgICAgICcgcHViOiAnICsgKHRoaXMucHViICYmIHRoaXMucHViLmluc3BlY3QoKSkgKyAnID4nO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcblxudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciB1dGlscyA9IGVsbGlwdGljLnV0aWxzO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcblxuZnVuY3Rpb24gU2lnbmF0dXJlKG9wdGlvbnMsIGVuYykge1xuICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIFNpZ25hdHVyZSlcbiAgICByZXR1cm4gb3B0aW9ucztcblxuICBpZiAodGhpcy5faW1wb3J0REVSKG9wdGlvbnMsIGVuYykpXG4gICAgcmV0dXJuO1xuXG4gIGFzc2VydChvcHRpb25zLnIgJiYgb3B0aW9ucy5zLCAnU2lnbmF0dXJlIHdpdGhvdXQgciBvciBzJyk7XG4gIHRoaXMuciA9IG5ldyBCTihvcHRpb25zLnIsIDE2KTtcbiAgdGhpcy5zID0gbmV3IEJOKG9wdGlvbnMucywgMTYpO1xuICBpZiAob3B0aW9ucy5yZWNvdmVyeVBhcmFtID09PSB1bmRlZmluZWQpXG4gICAgdGhpcy5yZWNvdmVyeVBhcmFtID0gbnVsbDtcbiAgZWxzZVxuICAgIHRoaXMucmVjb3ZlcnlQYXJhbSA9IG9wdGlvbnMucmVjb3ZlcnlQYXJhbTtcbn1cbm1vZHVsZS5leHBvcnRzID0gU2lnbmF0dXJlO1xuXG5mdW5jdGlvbiBQb3NpdGlvbigpIHtcbiAgdGhpcy5wbGFjZSA9IDA7XG59XG5cbmZ1bmN0aW9uIGdldExlbmd0aChidWYsIHApIHtcbiAgdmFyIGluaXRpYWwgPSBidWZbcC5wbGFjZSsrXTtcbiAgaWYgKCEoaW5pdGlhbCAmIDB4ODApKSB7XG4gICAgcmV0dXJuIGluaXRpYWw7XG4gIH1cbiAgdmFyIG9jdGV0TGVuID0gaW5pdGlhbCAmIDB4ZjtcbiAgdmFyIHZhbCA9IDA7XG4gIGZvciAodmFyIGkgPSAwLCBvZmYgPSBwLnBsYWNlOyBpIDwgb2N0ZXRMZW47IGkrKywgb2ZmKyspIHtcbiAgICB2YWwgPDw9IDg7XG4gICAgdmFsIHw9IGJ1ZltvZmZdO1xuICB9XG4gIHAucGxhY2UgPSBvZmY7XG4gIHJldHVybiB2YWw7XG59XG5cbmZ1bmN0aW9uIHJtUGFkZGluZyhidWYpIHtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aCAtIDE7XG4gIHdoaWxlICghYnVmW2ldICYmICEoYnVmW2kgKyAxXSAmIDB4ODApICYmIGkgPCBsZW4pIHtcbiAgICBpKys7XG4gIH1cbiAgaWYgKGkgPT09IDApIHtcbiAgICByZXR1cm4gYnVmO1xuICB9XG4gIHJldHVybiBidWYuc2xpY2UoaSk7XG59XG5cblNpZ25hdHVyZS5wcm90b3R5cGUuX2ltcG9ydERFUiA9IGZ1bmN0aW9uIF9pbXBvcnRERVIoZGF0YSwgZW5jKSB7XG4gIGRhdGEgPSB1dGlscy50b0FycmF5KGRhdGEsIGVuYyk7XG4gIHZhciBwID0gbmV3IFBvc2l0aW9uKCk7XG4gIGlmIChkYXRhW3AucGxhY2UrK10gIT09IDB4MzApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxlbiA9IGdldExlbmd0aChkYXRhLCBwKTtcbiAgaWYgKChsZW4gKyBwLnBsYWNlKSAhPT0gZGF0YS5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGRhdGFbcC5wbGFjZSsrXSAhPT0gMHgwMikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcmxlbiA9IGdldExlbmd0aChkYXRhLCBwKTtcbiAgdmFyIHIgPSBkYXRhLnNsaWNlKHAucGxhY2UsIHJsZW4gKyBwLnBsYWNlKTtcbiAgcC5wbGFjZSArPSBybGVuO1xuICBpZiAoZGF0YVtwLnBsYWNlKytdICE9PSAweDAyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBzbGVuID0gZ2V0TGVuZ3RoKGRhdGEsIHApO1xuICBpZiAoZGF0YS5sZW5ndGggIT09IHNsZW4gKyBwLnBsYWNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBzID0gZGF0YS5zbGljZShwLnBsYWNlLCBzbGVuICsgcC5wbGFjZSk7XG4gIGlmIChyWzBdID09PSAwICYmIChyWzFdICYgMHg4MCkpIHtcbiAgICByID0gci5zbGljZSgxKTtcbiAgfVxuICBpZiAoc1swXSA9PT0gMCAmJiAoc1sxXSAmIDB4ODApKSB7XG4gICAgcyA9IHMuc2xpY2UoMSk7XG4gIH1cblxuICB0aGlzLnIgPSBuZXcgQk4ocik7XG4gIHRoaXMucyA9IG5ldyBCTihzKTtcbiAgdGhpcy5yZWNvdmVyeVBhcmFtID0gbnVsbDtcblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdExlbmd0aChhcnIsIGxlbikge1xuICBpZiAobGVuIDwgMHg4MCkge1xuICAgIGFyci5wdXNoKGxlbik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBvY3RldHMgPSAxICsgKE1hdGgubG9nKGxlbikgLyBNYXRoLkxOMiA+Pj4gMyk7XG4gIGFyci5wdXNoKG9jdGV0cyB8IDB4ODApO1xuICB3aGlsZSAoLS1vY3RldHMpIHtcbiAgICBhcnIucHVzaCgobGVuID4+PiAob2N0ZXRzIDw8IDMpKSAmIDB4ZmYpO1xuICB9XG4gIGFyci5wdXNoKGxlbik7XG59XG5cblNpZ25hdHVyZS5wcm90b3R5cGUudG9ERVIgPSBmdW5jdGlvbiB0b0RFUihlbmMpIHtcbiAgdmFyIHIgPSB0aGlzLnIudG9BcnJheSgpO1xuICB2YXIgcyA9IHRoaXMucy50b0FycmF5KCk7XG5cbiAgLy8gUGFkIHZhbHVlc1xuICBpZiAoclswXSAmIDB4ODApXG4gICAgciA9IFsgMCBdLmNvbmNhdChyKTtcbiAgLy8gUGFkIHZhbHVlc1xuICBpZiAoc1swXSAmIDB4ODApXG4gICAgcyA9IFsgMCBdLmNvbmNhdChzKTtcblxuICByID0gcm1QYWRkaW5nKHIpO1xuICBzID0gcm1QYWRkaW5nKHMpO1xuXG4gIHdoaWxlICghc1swXSAmJiAhKHNbMV0gJiAweDgwKSkge1xuICAgIHMgPSBzLnNsaWNlKDEpO1xuICB9XG4gIHZhciBhcnIgPSBbIDB4MDIgXTtcbiAgY29uc3RydWN0TGVuZ3RoKGFyciwgci5sZW5ndGgpO1xuICBhcnIgPSBhcnIuY29uY2F0KHIpO1xuICBhcnIucHVzaCgweDAyKTtcbiAgY29uc3RydWN0TGVuZ3RoKGFyciwgcy5sZW5ndGgpO1xuICB2YXIgYmFja0hhbGYgPSBhcnIuY29uY2F0KHMpO1xuICB2YXIgcmVzID0gWyAweDMwIF07XG4gIGNvbnN0cnVjdExlbmd0aChyZXMsIGJhY2tIYWxmLmxlbmd0aCk7XG4gIHJlcyA9IHJlcy5jb25jYXQoYmFja0hhbGYpO1xuICByZXR1cm4gdXRpbHMuZW5jb2RlKHJlcywgZW5jKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNoID0gcmVxdWlyZSgnaGFzaC5qcycpO1xudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciB1dGlscyA9IGVsbGlwdGljLnV0aWxzO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcbnZhciBwYXJzZUJ5dGVzID0gdXRpbHMucGFyc2VCeXRlcztcbnZhciBLZXlQYWlyID0gcmVxdWlyZSgnLi9rZXknKTtcbnZhciBTaWduYXR1cmUgPSByZXF1aXJlKCcuL3NpZ25hdHVyZScpO1xuXG5mdW5jdGlvbiBFRERTQShjdXJ2ZSkge1xuICBhc3NlcnQoY3VydmUgPT09ICdlZDI1NTE5JywgJ29ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXInKTtcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRUREU0EpKVxuICAgIHJldHVybiBuZXcgRUREU0EoY3VydmUpO1xuXG4gIHZhciBjdXJ2ZSA9IGVsbGlwdGljLmN1cnZlc1tjdXJ2ZV0uY3VydmU7XG4gIHRoaXMuY3VydmUgPSBjdXJ2ZTtcbiAgdGhpcy5nID0gY3VydmUuZztcbiAgdGhpcy5nLnByZWNvbXB1dGUoY3VydmUubi5iaXRMZW5ndGgoKSArIDEpO1xuXG4gIHRoaXMucG9pbnRDbGFzcyA9IGN1cnZlLnBvaW50KCkuY29uc3RydWN0b3I7XG4gIHRoaXMuZW5jb2RpbmdMZW5ndGggPSBNYXRoLmNlaWwoY3VydmUubi5iaXRMZW5ndGgoKSAvIDgpO1xuICB0aGlzLmhhc2ggPSBoYXNoLnNoYTUxMjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBFRERTQTtcblxuLyoqXG4qIEBwYXJhbSB7QXJyYXl8U3RyaW5nfSBtZXNzYWdlIC0gbWVzc2FnZSBieXRlc1xuKiBAcGFyYW0ge0FycmF5fFN0cmluZ3xLZXlQYWlyfSBzZWNyZXQgLSBzZWNyZXQgYnl0ZXMgb3IgYSBrZXlwYWlyXG4qIEByZXR1cm5zIHtTaWduYXR1cmV9IC0gc2lnbmF0dXJlXG4qL1xuRUREU0EucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiBzaWduKG1lc3NhZ2UsIHNlY3JldCkge1xuICBtZXNzYWdlID0gcGFyc2VCeXRlcyhtZXNzYWdlKTtcbiAgdmFyIGtleSA9IHRoaXMua2V5RnJvbVNlY3JldChzZWNyZXQpO1xuICB2YXIgciA9IHRoaXMuaGFzaEludChrZXkubWVzc2FnZVByZWZpeCgpLCBtZXNzYWdlKTtcbiAgdmFyIFIgPSB0aGlzLmcubXVsKHIpO1xuICB2YXIgUmVuY29kZWQgPSB0aGlzLmVuY29kZVBvaW50KFIpO1xuICB2YXIgc18gPSB0aGlzLmhhc2hJbnQoUmVuY29kZWQsIGtleS5wdWJCeXRlcygpLCBtZXNzYWdlKVxuICAgICAgICAgICAgICAgLm11bChrZXkucHJpdigpKTtcbiAgdmFyIFMgPSByLmFkZChzXykudW1vZCh0aGlzLmN1cnZlLm4pO1xuICByZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHsgUjogUiwgUzogUywgUmVuY29kZWQ6IFJlbmNvZGVkIH0pO1xufTtcblxuLyoqXG4qIEBwYXJhbSB7QXJyYXl9IG1lc3NhZ2UgLSBtZXNzYWdlIGJ5dGVzXG4qIEBwYXJhbSB7QXJyYXl8U3RyaW5nfFNpZ25hdHVyZX0gc2lnIC0gc2lnIGJ5dGVzXG4qIEBwYXJhbSB7QXJyYXl8U3RyaW5nfFBvaW50fEtleVBhaXJ9IHB1YiAtIHB1YmxpYyBrZXlcbiogQHJldHVybnMge0Jvb2xlYW59IC0gdHJ1ZSBpZiBwdWJsaWMga2V5IG1hdGNoZXMgc2lnIG9mIG1lc3NhZ2VcbiovXG5FRERTQS5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UsIHNpZywgcHViKSB7XG4gIG1lc3NhZ2UgPSBwYXJzZUJ5dGVzKG1lc3NhZ2UpO1xuICBzaWcgPSB0aGlzLm1ha2VTaWduYXR1cmUoc2lnKTtcbiAgdmFyIGtleSA9IHRoaXMua2V5RnJvbVB1YmxpYyhwdWIpO1xuICB2YXIgaCA9IHRoaXMuaGFzaEludChzaWcuUmVuY29kZWQoKSwga2V5LnB1YkJ5dGVzKCksIG1lc3NhZ2UpO1xuICB2YXIgU0cgPSB0aGlzLmcubXVsKHNpZy5TKCkpO1xuICB2YXIgUnBsdXNBaCA9IHNpZy5SKCkuYWRkKGtleS5wdWIoKS5tdWwoaCkpO1xuICByZXR1cm4gUnBsdXNBaC5lcShTRyk7XG59O1xuXG5FRERTQS5wcm90b3R5cGUuaGFzaEludCA9IGZ1bmN0aW9uIGhhc2hJbnQoKSB7XG4gIHZhciBoYXNoID0gdGhpcy5oYXNoKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgIGhhc2gudXBkYXRlKGFyZ3VtZW50c1tpXSk7XG4gIHJldHVybiB1dGlscy5pbnRGcm9tTEUoaGFzaC5kaWdlc3QoKSkudW1vZCh0aGlzLmN1cnZlLm4pO1xufTtcblxuRUREU0EucHJvdG90eXBlLmtleUZyb21QdWJsaWMgPSBmdW5jdGlvbiBrZXlGcm9tUHVibGljKHB1Yikge1xuICByZXR1cm4gS2V5UGFpci5mcm9tUHVibGljKHRoaXMsIHB1Yik7XG59O1xuXG5FRERTQS5wcm90b3R5cGUua2V5RnJvbVNlY3JldCA9IGZ1bmN0aW9uIGtleUZyb21TZWNyZXQoc2VjcmV0KSB7XG4gIHJldHVybiBLZXlQYWlyLmZyb21TZWNyZXQodGhpcywgc2VjcmV0KTtcbn07XG5cbkVERFNBLnByb3RvdHlwZS5tYWtlU2lnbmF0dXJlID0gZnVuY3Rpb24gbWFrZVNpZ25hdHVyZShzaWcpIHtcbiAgaWYgKHNpZyBpbnN0YW5jZW9mIFNpZ25hdHVyZSlcbiAgICByZXR1cm4gc2lnO1xuICByZXR1cm4gbmV3IFNpZ25hdHVyZSh0aGlzLCBzaWcpO1xufTtcblxuLyoqXG4qICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWpvc2Vmc3Nvbi1lZGRzYS1lZDI1NTE5LTAzI3NlY3Rpb24tNS4yXG4qXG4qIEVERFNBIGRlZmluZXMgbWV0aG9kcyBmb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHBvaW50cyBhbmQgaW50ZWdlcnMuIFRoZXNlIGFyZVxuKiBoZWxwZXIgY29udmVuaWVuY2UgbWV0aG9kcywgdGhhdCBwYXNzIGFsb25nIHRvIHV0aWxpdHkgZnVuY3Rpb25zIGltcGxpZWRcbiogcGFyYW1ldGVycy5cbipcbiovXG5FRERTQS5wcm90b3R5cGUuZW5jb2RlUG9pbnQgPSBmdW5jdGlvbiBlbmNvZGVQb2ludChwb2ludCkge1xuICB2YXIgZW5jID0gcG9pbnQuZ2V0WSgpLnRvQXJyYXkoJ2xlJywgdGhpcy5lbmNvZGluZ0xlbmd0aCk7XG4gIGVuY1t0aGlzLmVuY29kaW5nTGVuZ3RoIC0gMV0gfD0gcG9pbnQuZ2V0WCgpLmlzT2RkKCkgPyAweDgwIDogMDtcbiAgcmV0dXJuIGVuYztcbn07XG5cbkVERFNBLnByb3RvdHlwZS5kZWNvZGVQb2ludCA9IGZ1bmN0aW9uIGRlY29kZVBvaW50KGJ5dGVzKSB7XG4gIGJ5dGVzID0gdXRpbHMucGFyc2VCeXRlcyhieXRlcyk7XG5cbiAgdmFyIGxhc3RJeCA9IGJ5dGVzLmxlbmd0aCAtIDE7XG4gIHZhciBub3JtZWQgPSBieXRlcy5zbGljZSgwLCBsYXN0SXgpLmNvbmNhdChieXRlc1tsYXN0SXhdICYgfjB4ODApO1xuICB2YXIgeElzT2RkID0gKGJ5dGVzW2xhc3RJeF0gJiAweDgwKSAhPT0gMDtcblxuICB2YXIgeSA9IHV0aWxzLmludEZyb21MRShub3JtZWQpO1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKHksIHhJc09kZCk7XG59O1xuXG5FRERTQS5wcm90b3R5cGUuZW5jb2RlSW50ID0gZnVuY3Rpb24gZW5jb2RlSW50KG51bSkge1xuICByZXR1cm4gbnVtLnRvQXJyYXkoJ2xlJywgdGhpcy5lbmNvZGluZ0xlbmd0aCk7XG59O1xuXG5FRERTQS5wcm90b3R5cGUuZGVjb2RlSW50ID0gZnVuY3Rpb24gZGVjb2RlSW50KGJ5dGVzKSB7XG4gIHJldHVybiB1dGlscy5pbnRGcm9tTEUoYnl0ZXMpO1xufTtcblxuRUREU0EucHJvdG90eXBlLmlzUG9pbnQgPSBmdW5jdGlvbiBpc1BvaW50KHZhbCkge1xuICByZXR1cm4gdmFsIGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciB1dGlscyA9IGVsbGlwdGljLnV0aWxzO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcbnZhciBwYXJzZUJ5dGVzID0gdXRpbHMucGFyc2VCeXRlcztcbnZhciBjYWNoZWRQcm9wZXJ0eSA9IHV0aWxzLmNhY2hlZFByb3BlcnR5O1xuXG4vKipcbiogQHBhcmFtIHtFRERTQX0gZWRkc2EgLSBpbnN0YW5jZVxuKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gcHVibGljL3ByaXZhdGUga2V5IHBhcmFtZXRlcnNcbipcbiogQHBhcmFtIHtBcnJheTxCeXRlPn0gW3BhcmFtcy5zZWNyZXRdIC0gc2VjcmV0IHNlZWQgYnl0ZXNcbiogQHBhcmFtIHtQb2ludH0gW3BhcmFtcy5wdWJdIC0gcHVibGljIGtleSBwb2ludCAoYWthIGBBYCBpbiBlZGRzYSB0ZXJtcylcbiogQHBhcmFtIHtBcnJheTxCeXRlPn0gW3BhcmFtcy5wdWJdIC0gcHVibGljIGtleSBwb2ludCBlbmNvZGVkIGFzIGJ5dGVzXG4qXG4qL1xuZnVuY3Rpb24gS2V5UGFpcihlZGRzYSwgcGFyYW1zKSB7XG4gIHRoaXMuZWRkc2EgPSBlZGRzYTtcbiAgdGhpcy5fc2VjcmV0ID0gcGFyc2VCeXRlcyhwYXJhbXMuc2VjcmV0KTtcbiAgaWYgKGVkZHNhLmlzUG9pbnQocGFyYW1zLnB1YikpXG4gICAgdGhpcy5fcHViID0gcGFyYW1zLnB1YjtcbiAgZWxzZVxuICAgIHRoaXMuX3B1YkJ5dGVzID0gcGFyc2VCeXRlcyhwYXJhbXMucHViKTtcbn1cblxuS2V5UGFpci5mcm9tUHVibGljID0gZnVuY3Rpb24gZnJvbVB1YmxpYyhlZGRzYSwgcHViKSB7XG4gIGlmIChwdWIgaW5zdGFuY2VvZiBLZXlQYWlyKVxuICAgIHJldHVybiBwdWI7XG4gIHJldHVybiBuZXcgS2V5UGFpcihlZGRzYSwgeyBwdWI6IHB1YiB9KTtcbn07XG5cbktleVBhaXIuZnJvbVNlY3JldCA9IGZ1bmN0aW9uIGZyb21TZWNyZXQoZWRkc2EsIHNlY3JldCkge1xuICBpZiAoc2VjcmV0IGluc3RhbmNlb2YgS2V5UGFpcilcbiAgICByZXR1cm4gc2VjcmV0O1xuICByZXR1cm4gbmV3IEtleVBhaXIoZWRkc2EsIHsgc2VjcmV0OiBzZWNyZXQgfSk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5zZWNyZXQgPSBmdW5jdGlvbiBzZWNyZXQoKSB7XG4gIHJldHVybiB0aGlzLl9zZWNyZXQ7XG59O1xuXG5jYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCAncHViQnl0ZXMnLCBmdW5jdGlvbiBwdWJCeXRlcygpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5wdWIoKSk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoS2V5UGFpciwgJ3B1YicsIGZ1bmN0aW9uIHB1YigpIHtcbiAgaWYgKHRoaXMuX3B1YkJ5dGVzKVxuICAgIHJldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpO1xufSk7XG5cbmNhY2hlZFByb3BlcnR5KEtleVBhaXIsICdwcml2Qnl0ZXMnLCBmdW5jdGlvbiBwcml2Qnl0ZXMoKSB7XG4gIHZhciBlZGRzYSA9IHRoaXMuZWRkc2E7XG4gIHZhciBoYXNoID0gdGhpcy5oYXNoKCk7XG4gIHZhciBsYXN0SXggPSBlZGRzYS5lbmNvZGluZ0xlbmd0aCAtIDE7XG5cbiAgdmFyIGEgPSBoYXNoLnNsaWNlKDAsIGVkZHNhLmVuY29kaW5nTGVuZ3RoKTtcbiAgYVswXSAmPSAyNDg7XG4gIGFbbGFzdEl4XSAmPSAxMjc7XG4gIGFbbGFzdEl4XSB8PSA2NDtcblxuICByZXR1cm4gYTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCAncHJpdicsIGZ1bmN0aW9uIHByaXYoKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCAnaGFzaCcsIGZ1bmN0aW9uIGhhc2goKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoS2V5UGFpciwgJ21lc3NhZ2VQcmVmaXgnLCBmdW5jdGlvbiBtZXNzYWdlUHJlZml4KCkge1xuICByZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5lZGRzYS5lbmNvZGluZ0xlbmd0aCk7XG59KTtcblxuS2V5UGFpci5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uIHNpZ24obWVzc2FnZSkge1xuICBhc3NlcnQodGhpcy5fc2VjcmV0LCAnS2V5UGFpciBjYW4gb25seSB2ZXJpZnknKTtcbiAgcmV0dXJuIHRoaXMuZWRkc2Euc2lnbihtZXNzYWdlLCB0aGlzKTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlLCBzaWcpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EudmVyaWZ5KG1lc3NhZ2UsIHNpZywgdGhpcyk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5nZXRTZWNyZXQgPSBmdW5jdGlvbiBnZXRTZWNyZXQoZW5jKSB7XG4gIGFzc2VydCh0aGlzLl9zZWNyZXQsICdLZXlQYWlyIGlzIHB1YmxpYyBvbmx5Jyk7XG4gIHJldHVybiB1dGlscy5lbmNvZGUodGhpcy5zZWNyZXQoKSwgZW5jKTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLmdldFB1YmxpYyA9IGZ1bmN0aW9uIGdldFB1YmxpYyhlbmMpIHtcbiAgcmV0dXJuIHV0aWxzLmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksIGVuYyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEtleVBhaXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xudmFyIGNhY2hlZFByb3BlcnR5ID0gdXRpbHMuY2FjaGVkUHJvcGVydHk7XG52YXIgcGFyc2VCeXRlcyA9IHV0aWxzLnBhcnNlQnl0ZXM7XG5cbi8qKlxuKiBAcGFyYW0ge0VERFNBfSBlZGRzYSAtIGVkZHNhIGluc3RhbmNlXG4qIEBwYXJhbSB7QXJyYXk8Qnl0ZXM+fE9iamVjdH0gc2lnIC1cbiogQHBhcmFtIHtBcnJheTxCeXRlcz58UG9pbnR9IFtzaWcuUl0gLSBSIHBvaW50IGFzIFBvaW50IG9yIGJ5dGVzXG4qIEBwYXJhbSB7QXJyYXk8Qnl0ZXM+fGJufSBbc2lnLlNdIC0gUyBzY2FsYXIgYXMgYm4gb3IgYnl0ZXNcbiogQHBhcmFtIHtBcnJheTxCeXRlcz59IFtzaWcuUmVuY29kZWRdIC0gUiBwb2ludCBlbmNvZGVkXG4qIEBwYXJhbSB7QXJyYXk8Qnl0ZXM+fSBbc2lnLlNlbmNvZGVkXSAtIFMgc2NhbGFyIGVuY29kZWRcbiovXG5mdW5jdGlvbiBTaWduYXR1cmUoZWRkc2EsIHNpZykge1xuICB0aGlzLmVkZHNhID0gZWRkc2E7XG5cbiAgaWYgKHR5cGVvZiBzaWcgIT09ICdvYmplY3QnKVxuICAgIHNpZyA9IHBhcnNlQnl0ZXMoc2lnKTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShzaWcpKSB7XG4gICAgc2lnID0ge1xuICAgICAgUjogc2lnLnNsaWNlKDAsIGVkZHNhLmVuY29kaW5nTGVuZ3RoKSxcbiAgICAgIFM6IHNpZy5zbGljZShlZGRzYS5lbmNvZGluZ0xlbmd0aClcbiAgICB9O1xuICB9XG5cbiAgYXNzZXJ0KHNpZy5SICYmIHNpZy5TLCAnU2lnbmF0dXJlIHdpdGhvdXQgUiBvciBTJyk7XG5cbiAgaWYgKGVkZHNhLmlzUG9pbnQoc2lnLlIpKVxuICAgIHRoaXMuX1IgPSBzaWcuUjtcbiAgaWYgKHNpZy5TIGluc3RhbmNlb2YgQk4pXG4gICAgdGhpcy5fUyA9IHNpZy5TO1xuXG4gIHRoaXMuX1JlbmNvZGVkID0gQXJyYXkuaXNBcnJheShzaWcuUikgPyBzaWcuUiA6IHNpZy5SZW5jb2RlZDtcbiAgdGhpcy5fU2VuY29kZWQgPSBBcnJheS5pc0FycmF5KHNpZy5TKSA/IHNpZy5TIDogc2lnLlNlbmNvZGVkO1xufVxuXG5jYWNoZWRQcm9wZXJ0eShTaWduYXR1cmUsICdTJywgZnVuY3Rpb24gUygpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoU2lnbmF0dXJlLCAnUicsIGZ1bmN0aW9uIFIoKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuUmVuY29kZWQoKSk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoU2lnbmF0dXJlLCAnUmVuY29kZWQnLCBmdW5jdGlvbiBSZW5jb2RlZCgpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5SKCkpO1xufSk7XG5cbmNhY2hlZFByb3BlcnR5KFNpZ25hdHVyZSwgJ1NlbmNvZGVkJywgZnVuY3Rpb24gU2VuY29kZWQoKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLmVuY29kZUludCh0aGlzLlMoKSk7XG59KTtcblxuU2lnbmF0dXJlLnByb3RvdHlwZS50b0J5dGVzID0gZnVuY3Rpb24gdG9CeXRlcygpIHtcbiAgcmV0dXJuIHRoaXMuUmVuY29kZWQoKS5jb25jYXQodGhpcy5TZW5jb2RlZCgpKTtcbn07XG5cblNpZ25hdHVyZS5wcm90b3R5cGUudG9IZXggPSBmdW5jdGlvbiB0b0hleCgpIHtcbiAgcmV0dXJuIHV0aWxzLmVuY29kZSh0aGlzLnRvQnl0ZXMoKSwgJ2hleCcpLnRvVXBwZXJDYXNlKCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNpZ25hdHVyZTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBkb3VibGVzOiB7XG4gICAgc3RlcDogNCxcbiAgICBwb2ludHM6IFtcbiAgICAgIFtcbiAgICAgICAgJ2U2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGEnLFxuICAgICAgICAnZjdlMzUwNzM5OWU1OTU5MjlkYjk5ZjM0ZjU3OTM3MTAxMjk2ODkxZTQ0ZDIzZjBiZTFmMzJjY2U2OTYxNjgyMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4JyxcbiAgICAgICAgJzExZjhhODA5ODU1N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdiZWQzMWI2ZWFmZjZlMjZjYWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOScsXG4gICAgICAgICdkMzUwNmUwZDllM2M3OWViYTRlZjk3YTUxZmY3MWY1ZWFjYjU5NTVhZGQyNDM0NWM2ZWZhNmZmZWU5ZmVkNjk1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZmZTUyNmJhZDhmODNmZjQ2NDAnLFxuICAgICAgICAnNGUyNzNhZGZjNzMyMjIxOTUzYjQ0NTM5N2YzMzYzMTQ1YjlhODkwMDgxOTllY2I2MjAwM2M3ZjNiZWU5ZGU5J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGMnLFxuICAgICAgICAnNGFhZDBhNmY2OGQzMDhiNGIzZmJkNzgxM2FiMGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQzNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhJyxcbiAgICAgICAgJzk2ZTg2N2I1NTk1Y2M0OThhOTIxMTM3NDg4ODI0ZDZlMjY2MGEwNjUzNzc5NDk0ODAxZGMwNjlkOWViMzlmNWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYScsXG4gICAgICAgICc1ZDlhOGNhMzk3MGVmMGYyNjllZTdlZGFmMTc4MDg5ZDlhZTRjZGMzYTcxMWY3MTJkZGZkNGZkYWUxZGU4OTk5J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzEwMGY0NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjAnLFxuICAgICAgICAnY2RkOWUxMzE5MmEwMGI3NzJlYzhmMzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYyYmM2NWEwOSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkJyxcbiAgICAgICAgJzlkNzA2MTkyODk0MDQwNWU2YmI2YTQxNzY1OTc1MzVhZjI5MmRkNDE5ZTFjZWQ3OWE0NGYxOGYyOTQ1NmEwMGQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5MDk0Njk2ZCcsXG4gICAgICAgICdlNTdjNmI2Yzk3ZGNlMWJhYjA2ZTRlMTJiZjNlY2Q1Yzk4MWM4OTU3Y2M0MTQ0MmQzMTU1ZGViZjE4MDkwMDg4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjEnLFxuICAgICAgICAnOWJhY2FhMzU0ODE2NDJiYzQxZjQ2M2Y3ZWM5NzgwZTVkZWM3YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwJyxcbiAgICAgICAgJzViYzA4N2QwYmM4MDEwNmQ4OGM5ZWNjYWMyMGQzYzFjMTM5OTk5ODFlMTQ0MzQ2OTlkY2IwOTZiMDIyNzcxYzgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0NycsXG4gICAgICAgICcxMGI3NzcwYjJhM2RhNGIzOTQwMzEwNDIwY2E5NTE0NTc5ZTg4ZTJlNDdmZDY4YjNlYTEwMDQ3ZTg0NjAzNzJhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM4NWVlZDM0YzFjZGZmMjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjInLFxuICAgICAgICAnMjgzYmViYzNlOGVhMjNmNTY3MDFkZTE5ZTllYmY0NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1MydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTcnLFxuICAgICAgICAnN2M4MGM2OGU2MDMwNTliYTY5YjhlMmEzMGU0NWM0ZDQ3ZWE0ZGQyZjVjMjgxMDAyZDg2ODkwNjAzYTg0MjE2MCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkJyxcbiAgICAgICAgJzU2ZTcwNzk3ZTk2NjRlZjViZmIwMTliYzRkZGFmOWI3MjgwNWY2M2VhMjg3M2FmNjI0ZjNhMmU5NmMyOGIyYTAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4MycsXG4gICAgICAgICc3YzQ4MWI5YjViNDNiMmViNjM3NDA0OWJmYTYyYzJlNWU3N2YxN2ZjYzUyOThmNDRjOGUzMDk0Zjc5MDMxM2E2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYScsXG4gICAgICAgICc1M2E1NjI4NTZkY2I2NjQ2ZGM2Yjc0YzVkMWMzNDE4YzZkNGRmZjA4Yzk3Y2QyYmVkNGNiN2Y4OGQ4YzhlNTg5J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZTgnLFxuICAgICAgICAnYmMyZGE4MmI2ZmE1YjU3MWE3ZjA5MDQ5Nzc2YTFlZjdlY2QyOTIyMzgwNTFjMTk4YzFhODRlOTViMmI0YWUxNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlNTAzN2RlMGFmYzFkOGQ0M2Q4MzQ4NDE0YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkJyxcbiAgICAgICAgJzQ1NzE1MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRkYmQ1ZjViMDNlYzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNScsXG4gICAgICAgICc3YTkwODk3NGJjZTE4Y2ZlMTJhMjdiYjJhZDVhNDg4Y2Q3NDg0YTc3ODcxMDQ4NzBiMjcwMzRmOTRlZWUzMWRkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTQnLFxuICAgICAgICAnNGI2ZGFkMGI1YWU0NjI1MDcwMTNhZDA2MjQ1YmExOTBiYjQ4NTBmNWYzNmE3ZWVkZGZmMmMyNzUzNGI0NThmMidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjJyxcbiAgICAgICAgJzE3NzQ5Yzc2NmM5ZDBiMThlMTZmZDA5ZjZkZWY2ODFiNTMwYjk2MTRiZmY3ZGQzM2UwYjM5NDE4MTdkY2FhZTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNicsXG4gICAgICAgICc2ZTA1NjhkYjliMGIxMzI5N2NmNjc0ZGVjY2I2YWY5MzEyNmI1OTZiOTczZjdiNzc3MDFkM2RiN2YyM2NiOTZmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc2ZTY0MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzknLFxuICAgICAgICAnYzkwZGRmOGRlZTRlOTVjZjU3NzA2NmQ3MDY4MWYwZDM1ZTJhMzNkMmI1NmQyMDMyYjRiMTc1MmQxOTAxYWMwMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNmOGY5YThmN2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxJyxcbiAgICAgICAgJzg5M2ZiNTc4OTUxYWQyNTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3ODgwY2ZlOTE3ZTczNWQ5Njk5YTg0YzMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0YicsXG4gICAgICAgICdmZWJmYWEzOGYyYmM3ZWFlNzI4ZWM2MDgxOGMzNDBlYjAzNDI4ZDYzMmJiMDY3ZTE3OTM2M2VkNzVkN2Q5OTFmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2I4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDMnLFxuICAgICAgICAnMjgwNGRmYTQ0ODA1YTFlNGQ3Yzk5Y2M5NzYyODA4YjA5MmNjNTg0ZDk1ZmYzYjUxMTQ4OGU0ZTc0ZWZkZjZlNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkJyxcbiAgICAgICAgJ2VlZDFkZTdmNjM4ZTAwNzcxZTg5NzY4Y2EzY2E5NDQ3MmQxNTVlODBhZjMyMmVhOWZjYjQyOTFiNmFjOWVjNzgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MCcsXG4gICAgICAgICc3MzcwZjkxY2ZiNjdlNGY1MDgxODA5ZmEyNWQ0MGY5YjE3MzVkYmY3YzBhMTFhMTMwYzBkMWEwNDFlMTc3ZWExJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzkwYWQ4NWIzODlkNmI5MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDQnLFxuICAgICAgICAnZTUwN2EzNjIwYTM4MjYxYWZmZGNiZDk0MjcyMjJiODM5YWVmYWJlMTU4Mjg5NGQ5OTFkNGQ0OGNiNmVmMTUwJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2Nzg3MjNlYTMzNTFiN2I0NDRjOWVjNGMwZGEnLFxuICAgICAgICAnNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMyYjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIzY2JmNzk1MDFmZmY4MidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExJyxcbiAgICAgICAgJzFlNjM2MzNhZDBlZjRmMWMxNjYxYTZkMGVhMDJiNzI4NmNjN2U3NGVjOTUxZDFjOTgyMmMzODU3NmZlYjczYmMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZScsXG4gICAgICAgICdlZmE0NzI2N2ZlYTUyMWExYTlkYzM0M2EzNzM2Yzk3NGMyZmFkYWZhODFlMzZjNTRlN2QyYTRjNjY3MDI0MTRiJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDEnLFxuICAgICAgICAnMmE3NThlMzAwZmE3OTg0YjQ3MWIwMDZhMWFhZmJiMThkMGE2YjJjMDQyMGU4M2UyMGU4YTk0MjFjZjJjZmQ1MSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmJyxcbiAgICAgICAgJzY3Yzg3NmQwNmYzZTA2ZGUxZGFkZjE2ZTU2NjFkYjNjNGIzYWU2ZDQ4ZTM1YjJmZjMwYmYwYjYxYTcxYmE0NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkNjhhODBjODI4MGJiODQwNzkzMjM0YWExMThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4JyxcbiAgICAgICAgJ2RiOGJhOWZmZjRiNTg2ZDAwYzRiMWY5MTc3YjBlMjhiNWIwZTdiOGY3ODQ1Mjk1YTI5NGM4NDI2NmIxMzMxMjAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2VhNDA5NTk4MGZjMjhkM2Q1ZCcsXG4gICAgICAgICc2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3Yzg0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTYnLFxuICAgICAgICAnMzVlYzUxMDkyZDg3MjgwNTA5NzRjMjNhMWQ4NWQ0YjVkNTA2Y2RjMjg4NDkwMTkyZWJhYzA2Y2FkMTBkNWQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZCcsXG4gICAgICAgICdkZGI4NGYwZjRhNGRkZDU3NTg0ZjA0NGJmMjYwZTY0MTkwNTMyNmY3NmM2NGM4ZTZiZTdlNWUwM2Q0ZmM1OTlkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTUnLFxuICAgICAgICAnOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYyNjI0NjUxNTJiYzNlZTI0YzY1ZTg5OWJlOTMyMzg1YTJhOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhNTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2JyxcbiAgICAgICAgJzQwYTZiZjIwZTc2NjQwYjJjOTJiOTdhZmU1OGNkODJjNDMyZTEwYTdmNTE0ZDlmM2VlOGJlMTFhZTFiMjhlYzgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThjMzhiYjMwZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MScsXG4gICAgICAgICczNDYyNmQ5YWI1YTViMjJmZjcwOThlMTJmMmZmNTgwMDg3YjM4NDExZmYyNGFjNTYzYjUxM2ZjMWZkOWY0M2FjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzkyODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5MDNhYycsXG4gICAgICAgICdjMjU2MjEwMDNkM2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4M2ZjNTE4MGU5MzViY2QwOTFmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTEnLFxuICAgICAgICAnMWYwMzY0ODQxM2EzOGMwYmUyOWQ0OTZlNTgyY2Y1NjYzZTg3NTFlOTY4NzczMzE1ODJjMjM3YTI0ZWIxZjk2MidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlJyxcbiAgICAgICAgJzQ5M2QxM2ZlZjUyNGJhMTg4YWY0YzRkYzU0ZDA3OTM2YzdiN2VkNmZiOTBlMmNlYjJjOTUxZTAxZjBjMjk5MDcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MScsXG4gICAgICAgICdjNjBmOWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMxODY5MDMxNjZkNjA1YjY4YmFlYzI5M2VjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2VhYTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjMnLFxuICAgICAgICAnYmUzMjc5ZWQ1YmJiYjAzYWM2OWE4MGY4OTg3OWFhNWEwMWE2Yjk2NWYxM2Y3ZTU5ZDQ3YTUzMDViYTVhZDkzZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYwYzlhMTM3NDAxZTIzNjMyZGRhMzRkMjRmJyxcbiAgICAgICAgJzRkOWY5MmU3MTZkMWM3MzUyNmZjOTljY2ZiOGFkMzRjZTg4NmVlZGZhOGQ4ZTRmMTNhN2Y3MTMxZGViYTk0MTQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOScsXG4gICAgICAgICdhZWVmZTkzNzU2YjUzNDBkMmYzYTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMxY2MxMDdjZWZkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmUnLFxuICAgICAgICAnYjMxOGUwZWMzMzU0MDI4YWRkNjY5ODI3ZjlkNGIyODcwYWFhOTcxZDJmN2U1ZWQxZDBiMjk3NDgzZDgzZWZkMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5JyxcbiAgICAgICAgJzZiODRjNjkyMjM5N2ViYTliNzJjZDI4NzIyODFhNjhhNWU2ODMyOTNhNTdhMjEzYjM4Y2Q4ZDdkM2Y0ZjI4MTEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMicsXG4gICAgICAgICc4MTU3ZjU1YTdjOTkzMDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2NTVmYmEwZjFhZDgzNmYxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2E4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTMnLFxuICAgICAgICAnN2Y5NzM1NWI4ZGI4MWMwOWFiZmI3ZjNjNWIyNTE1ODg4YjY3OWEzZTUwZGQ2YmQ2Y2VmN2M3MzExMWY0Y2MwYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAyMmYzODJkZTgzMTk0OTdjJyxcbiAgICAgICAgJ2NjYzlkYzM3YWJmYzljMTY1N2I0MTU1ZjJjNDdmOWU2NjQ2YjNhMWQ4Y2I5ODU0MzgzZGExM2FjMDc5YWZhNzMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYScsXG4gICAgICAgICcyZTdlNTUyODg4YzMzMWRkOGJhMDM4NmE0YjljZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2QyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTEnLFxuICAgICAgICAnZTgyZDg2ZmI2NDQzZmNiNzU2NWFlZTU4YjI5NDgyMjBhNzBmNzUwYWY0ODRjYTUyZDQxNDIxNzRkY2Y4OTQwNSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczJyxcbiAgICAgICAgJ2Q5OWZjZGQ1YmY2OTAyZTJhZTk2ZGQ2NDQ3YzI5OWExODViOTBhMzkxMzNhZWFiMzU4Mjk5ZTVlOWZhZjY1ODknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODQ4MWJkZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OCcsXG4gICAgICAgICczOGVlN2I4Y2JhNTQwNGRkODRhMjViZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3NzkwNTdlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmInLFxuICAgICAgICAnNjliZTE1OTAwNDYxNDU4MGVmN2U0MzM0NTNjY2IwY2E0OGYzMDBhODFkMDk0MmUxM2Y0OTVhOTA3ZjZlY2MyNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJkODNmMzY2JyxcbiAgICAgICAgJ2QzYTgxY2E2ZTc4NWMwNjM4MzkzN2FkZjRiNzk4Y2FhNmU4YTlmYmZhNTQ3YjE2ZDc1OGQ2NjY1ODFmMzNjMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhJyxcbiAgICAgICAgJzQwYTMwNDYzYTMzMDUxOTMzNzhmZWRmMzFmN2NjMGViN2FlNzg0ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwJyxcbiAgICAgICAgJzYyMGVmYWJiYzhlZTI3ODJlMjRlN2MwY2ZiOTVjNWQ3MzViNzgzYmU5Y2YwZjhlOTU1YWYzNGEzMGU2MmI5NDUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4NycsXG4gICAgICAgICc3YTE4OGZhMzUyMGUzMGQ0NjFkYTI1MDEwNDU3MzFjYTk0MTQ2MTk4Mjg4MzM5NTkzN2Y2OGQwMGM2NDRhNTczJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Y3MTBkNzlkOWViOTYyMjk3ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWUnLFxuICAgICAgICAnZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1MzIxMTVjY2FjODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MidcbiAgICAgIF1cbiAgICBdXG4gIH0sXG4gIG5hZjoge1xuICAgIHduZDogNyxcbiAgICBwb2ludHM6IFtcbiAgICAgIFtcbiAgICAgICAgJ2Y5MzA4YTAxOTI1OGMzMTA0OTM0NGY4NWY4OWQ1MjI5YjUzMWM4NDU4MzZmOTliMDg2MDFmMTEzYmNlMDM2ZjknLFxuICAgICAgICAnMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcyZjhiZGU0ZDFhMDcyMDkzNTViNGE3MjUwYTVjNTEyOGU4OGI4NGJkZGM2MTlhYjdjYmE4ZDU2OWIyNDBlZmU0JyxcbiAgICAgICAgJ2Q4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNWNiZGYwNjQ2ZTVkYjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliYycsXG4gICAgICAgICc2YWViY2E0MGJhMjU1OTYwYTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2FjZDQ4NGUyZjBjN2Y2NTMwOWFkMTc4YTlmNTU5YWJkZTA5Nzk2OTc0YzU3ZTcxNGMzNWYxMTBkZmMyN2NjYmUnLFxuICAgICAgICAnY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhhNDM3NWY4ZTBmMDVjYzI2MmFjNjRmOWMzNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NzRhZTdmODU4YTk0MTFlNWVmNDI0NmI3MGM2NWFhYzU2NDk5ODBiZTVjMTc4OTFiYmVjMTc4OTVkYTAwOGNiJyxcbiAgICAgICAgJ2Q5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZjI4NzczYzJkOTc1Mjg4YmM3ZDFkMjA1YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNkZGVlZGRmOGYxOTQwNWFhOCcsXG4gICAgICAgICdhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDc5MjRkNGY3ZDQzZWE5NjVhNDY1YWUzMDk1ZmY0MTEzMWU1OTQ2ZjNjODVmNzllNDRhZGJjZjhlMjdlMDgwZScsXG4gICAgICAgICc1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RlZmRlYTRjZGI2Nzc3NTBhNDIwZmVlODA3ZWFjZjIxZWI5ODk4YWU3OWI5NzY4NzY2ZTRmYWEwNGEyZDRhMzQnLFxuICAgICAgICAnNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3NydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcyYjRlYTBhNzk3YTQ0M2QyOTNlZjVjZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjJyxcbiAgICAgICAgJzg1ZTg5YmMwMzc5NDVkOTNiMzQzMDgzYjVhMWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2EnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzUyYmJmNGE0Y2RkMTI1NjRmOTNmYTMzMmNlMzMzMzAxZDlhZDQwMjcxZjgxMDcxODEzNDBhZWYyNWJlNTlkNScsXG4gICAgICAgICczMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2N2JkM2Q4YmNmODE5OThjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzJmYTIxMDRkNmIzOGQxMWIwMjMwMDEwNTU5ODc5MTI0ZTQyYWI4ZGZlZmY1ZmYyOWRjOWNkYWRkNGVjYWNjM2YnLFxuICAgICAgICAnMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzkyNDgyNzliMDliNGQ2OGRhYjIxYTliMDY2ZWRkYTgzMjYzYzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0NTM3MTQnLFxuICAgICAgICAnNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkYWVkNGYyYmUzYThiZjI3OGU3MDEzMmZiMGJlYjc1MjJmNTcwZTE0NGJmNjE1YzA3ZTk5NmQ0NDNkZWU4NzI5JyxcbiAgICAgICAgJ2E2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYzQ0ZDEyYzcwNjVkODEyZThhY2YyOGQ3Y2JiMTlmOTAxMWVjZDllOWZkZjI4MWIwZTZhM2I1ZTg3ZDIyZTdkYicsXG4gICAgICAgICcyMTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzZhMjQ1YmY2ZGM2OTg1MDRjODlhMjBjZmRlZDYwODUzMTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjQnLFxuICAgICAgICAnZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNjk3ZmZhNmZkOWRlNjI3YzA3N2UzZDJmZTU0MTA4NGNlMTMzMDBiMGJlYzExNDZmOTVhZTU3ZjBkMGJkNmE1JyxcbiAgICAgICAgJ2I5YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAxYjIzOTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNjA1YmRiMDE5OTgxNzE4Yjk4NmQwZjA3ZTgzNGNiMGQ5ZGViODM2MGZmYjdmNjFkZjk4MjM0NWVmMjdhNzQ3OScsXG4gICAgICAgICcyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNjJkMTRkYWI0MTUwYmY0OTc0MDJmZGM0NWEyMTVlMTBkY2IwMWMzNTQ5NTliMTBjZmUzMWM3ZTlkODdmZjMzZCcsXG4gICAgICAgICc4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzgwYzYwYWQwMDQwZjI3ZGFkZTViNGIwNmM0MDhlNTZiMmM1MGU5ZjU2YjliOGI0MjVlNTU1YzJmODYzMDhiNmYnLFxuICAgICAgICAnMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3YTkzNzVhZDYxNjdhZDU0YWE3NGM2MzQ4Y2M1NGQzNDRjYzVkYzk0ODdkODQ3MDQ5ZDVlYWJiMGZhMDNjOGZiJyxcbiAgICAgICAgJ2QwZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkNTI4ZWNkOWI2OTZiNTRjOTA3YTllZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2OGRmNTA0YmI1MWY0NTliYzNmZmM5JyxcbiAgICAgICAgJ2VlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1YzUyMGRiYzA2MzQ2NWI1MjE0MDk5MzMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNDkzNzBhNGI1ZjQzNDEyZWEyNWY1MTRlOGVjZGFkMDUyNjYxMTVlNGE3ZWNiMTM4NzIzMTgwOGY4YjQ1OTYzJyxcbiAgICAgICAgJzc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzdmMjMwOTM2ZWU4OGNiYmQ3M2RmOTMwZDY0NzAyZWY4ODFkODExZTBlMTQ5OGUyZjFjMTNlYjFmYzM0NWQ3NCcsXG4gICAgICAgICc5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2YyZGFjOTkxY2M0Y2U0YjllYTQ0ODg3ZTVjN2MwYmNlNThjODAwNzRhYjlkNGRiYWViMjg1MzFiNzczOWY1MzAnLFxuICAgICAgICAnZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0NjNiM2Q5ZjY2MjYyMWZiMWI0YmU4ZmJiZTI1MjAxMjVhMjE2Y2RmYzlkYWUzZGViY2JhNDg1MGM2OTBkNDViJyxcbiAgICAgICAgJzVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2UnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZjE2ZjgwNDI0NGU0NmUyYTA5MjMyZDRhZmYzYjU5OTc2Yjk4ZmFjMTQzMjhhMmQxYTMyNDk2YjQ5OTk4ZjI0NycsXG4gICAgICAgICdjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2NhZjc1NDI3MmRjODQ1NjNiMDM1MmI3YTE0MzExYWY1NWQyNDUzMTVhY2UyN2M2NTM2OWUxNWY3MTUxZDQxZDEnLFxuICAgICAgICAnY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMyZjkwODMxOGEwNDQ3NidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcyNjAwY2E0YjI4MmNiOTg2Zjg1ZDBmMTcwOTk3OWQ4YjQ0YTA5YzA3Y2I4NmQ3YzEyNDQ5N2JjODZmMDgyMTIwJyxcbiAgICAgICAgJzQxMTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzYzNWNhNzJkN2U4NDMyYzMzOGVjNTNjZDEyMjIwYmMwMWM0ODY4NWUyNGY3ZGM4YzYwMmE3NzQ2OTk4ZTQzNScsXG4gICAgICAgICc5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThhNjZiN2YyYjMzNDc5ZDQ2OGZiYzFhNTA3NDNiZjU2Y2MxOCcsXG4gICAgICAgICc2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTNlNmJkMTA3MWExZTk2YWZmNTc4NTljODJkNTcwZjAzMzA4MDA2NjFkMWM5NTJmOWZlMjY5NDY5MWQ5YjllOCcsXG4gICAgICAgICc1OWM5ZTBiYmEzOTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE4NmI0ODNkMDU2YTAzMzgyNmFlNzNkODhmNzMyOTg1YzRjY2IxZjMyYmEzNWY0YjRjYzQ3ZmRjZjA0YWE2ZWInLFxuICAgICAgICAnM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkZjlkNzBhNmI5ODc2Y2U1NDRjOTg1NjFmNGJlNGY3MjU0NDJlNmQyYjczN2Q5YzkxYTgzMjE3MjRjZTA5NjNmJyxcbiAgICAgICAgJzU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0MTcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNWVkZDVjYzIzYzUxZTg3YTQ5N2NhODE1ZDVkY2UwZjhhYjUyNTU0Zjg0OWVkODk5NWRlNjRjNWYzNGNlNzE0MycsXG4gICAgICAgICdlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzI5MDc5OGMyYjY0NzY4MzBkYTEyZmUwMjI4N2U5ZTc3N2FhM2ZiYTFjMzU1YjE3YTcyMmQzNjJmODQ2MTRmYmEnLFxuICAgICAgICAnZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJmZTM2MDI1NzM2MmRmZGVjZWY0MDUzYjQ1JyxcbiAgICAgICAgJ2Y5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzY2ZGJiMjRkMTM0ZTc0NWNjY2FhMjhjOTliZjI3NDkwNmJiNjZiMjZkY2Y5OGRmOGQyZmVkNTBkODg0MjQ5YScsXG4gICAgICAgICc3NDRiMTE1MmVhY2JlNWUzOGRjYzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzU5ZGJmNDZmOGM5NDc1OWJhMjEyNzdjMzM3ODRmNDE2NDVmN2I0NGY2YzU5NmE1OGNlOTJlNjY2MTkxYWJlM2UnLFxuICAgICAgICAnYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5MWU3NGU5YTRhOGRkNjQ3ZTcxMWE5NWU3M2NiNjJkYzYwMThjZmQ4N2I4JyxcbiAgICAgICAgJ2UxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2QnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzc1NGI0ZmEwZThhY2VkMDZkNDE2N2EyYzU5Y2NhNGNkYTE4NjljMDZlYmFkZmI2NDg4NTUwMDE1YTg4NTIyYycsXG4gICAgICAgICczMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzk0OGRjYWRmNTk5MGUwNDhhYTM4NzRkNDZhYmVmOWQ3MDE4NThmOTVkZTgwNDFkMmE2ODI4Yzk5ZTIyNjI1MTknLFxuICAgICAgICAnZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3MDMyOGE4YTNkN2M3N2FiJyxcbiAgICAgICAgJzEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzUxNDA4NzgzNDk2NGI1NGIxNWIxNjA2NDRkOTE1NDg1YTE2OTc3MjI1Yjg4NDdiYjBkZDA4NTEzN2VjNDdjYScsXG4gICAgICAgICdlZjBhZmJiMjA1NjIwNTQ0OGUxNjUyYzQ4ZTgxMjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2QzY2MzMGFkNmI0ODNlNGJjNzljZTJjOWRkOGJjNTQ5OTNlOTQ3ZWI4ZGY3ODdiNDQyOTQzZDNmN2I1MjdlYWYnLFxuICAgICAgICAnOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0ZWVkZTBhNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNjI0ZDg0NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4YjJiMjk4MjNkYjkxM2Y2NDkzOTc1YmEwZmY0ODQ3NjEwJyxcbiAgICAgICAgJzY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzMzY2U4MGRhOTU1YThhMjY5MDJjOTU2MzNlNjJhOTg1MTkyNDc0YjVhZjIwN2RhNmRmN2I0ZmQ1ZmM2MWNkNCcsXG4gICAgICAgICdmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE1ZDk0NDEyNTQ5NDUwNjRjZjFhMWMzM2JiZDNiNDlmODk2NmM1MDkyMTcxZTY5OWVmMjU4ZGZhYjgxYzA0NWMnLFxuICAgICAgICAnZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhMWQwZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQwNzE3OTQwJyxcbiAgICAgICAgJ2VkZDc3ZjUwYmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTIyZmJlMTVjMGFmOGNjYzU3ODBjMDczNWY4NGRiZTlhNzkwYmFkZWU4MjQ1YzA2YzdjYTM3MzMxY2IzNjk4MCcsXG4gICAgICAgICdhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3YTM4Mjg5MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzExMDkxZGQ5ODYwZThlMjBlZTEzNDczYzExNTVmNWY2OTYzNWUzOTQ3MDRlYWE3NDAwOTQ1MjI0NmNmYTliMycsXG4gICAgICAgICc2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM0YzFmZDA0ZDMwMWJlODliMzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1YTkzNDA3ODE4NjdkNDIzMmVjMmRiZGYnLFxuICAgICAgICAnOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2YyMTllYTVkNmI1NDcwMWMxYzE0ZGU1YjU1N2ViNDJhOGQxM2YzYWJiY2QwOGFmZmNjMmE1ZTZiMDQ5YjhkNjMnLFxuICAgICAgICAnNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkN2I4NzQwZjc0YThmYmFhYjFmNjgzZGI4ZjQ1ZGUyNjU0M2E1NDkwYmNhNjI3MDg3MjM2OTEyNDY5YTBiNDQ4JyxcbiAgICAgICAgJ2ZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2InXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzJkMzFjMjIyZjhmNmYwZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZicsXG4gICAgICAgICc1ZjMwMzJmNTg5MjE1NmUzOWNjZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc0NjFmMzcxOTE0YWIzMjY3MTA0NWExNTVkOTgzMWVhODc5M2Q3N2NkNTk1OTJjNDM0MGY4NmNiYzE4MzQ3YjUnLFxuICAgICAgICAnOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBjOTg2ZWE2YjM5ODQ3YjNjYzA5MmZmNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlZTA3OWFkYjFkZjE4NjAwNzQzNTZhMjVhYTM4MjA2YTZkNzE2YjJjM2U2NzQ1M2QyODc2OThiYWQ3YjJiMmQ2JyxcbiAgICAgICAgJzhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTZlYzkzZTQ0N2VjODNmMDQ2N2IxODMwMmVlNjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJmZDg2MTZiYTlkYTZiNScsXG4gICAgICAgICc1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2VhYTVmOTgwYzI0NWY2ZjAzODk3ODI5MGFmYTcwYjZiZDg4NTU4OTdmOThiNmFhNDg1Yjk2MDY1ZDUzN2JkOTknLFxuICAgICAgICAnZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3OGM5NDA3NTQ0YWMxMzI2OTJlZTE5MTBhMDI0Mzk5NThhZTA0ODc3MTUxMzQyZWE5NmM0YjZiMzVhNDlmNTEnLFxuICAgICAgICAnZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0OTRmNGJlMjE5YTFhNzcwMTZkY2Q4Mzg0MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1JyxcbiAgICAgICAgJzQyMjQyYTk2OTI4M2E1ZjMzOWJhN2YwNzVlMzZiYTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYTU5OGE4MDMwZGE2ZDg2YzZiYzdmMmY1MTQ0ZWE1NDlkMjgyMTFlYTU4ZmFhNzBlYmY0YzFlNjY1YzFmZTliNScsXG4gICAgICAgICcyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAyNmRiZDJkODY0ZTZiJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2M0MTkxNjM2NWFiYjJiNWQwOTE5MmY1ZjJkYmVhZmVjMjA4ZjAyMGYxMjU3MGExODRkYmFkYzNlNTg1OTU5OTcnLFxuICAgICAgICAnNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzg0MWQ2MDYzYTU4NmZhNDc1YTcyNDYwNGRhMDNiYzViOTJhMmUwZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4ODEnLFxuICAgICAgICAnNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzVlOTViYjM5OWE2OTcxZDM3NjAyNjk0N2Y4OWJkZTJmMjgyYjMzODEwOTI4YmU0ZGVkMTEyYWM0ZDcwZTIwZDUnLFxuICAgICAgICAnMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczNmU0NjQxYTUzOTQ4ZmQ0NzZjMzlmOGE5OWZkOTc0ZTVlYzA3NTY0YjUzMTVkOGJmOTk0NzFiY2EwZWYyZjY2JyxcbiAgICAgICAgJ2QyNDI0YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzM2NTgxZWE3YmZiYmIyOTBjMTkxYTJmNTA3YTQxY2Y1NjQzODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2JyxcbiAgICAgICAgJ2VhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFmN2FiMTQxMGNkMWUwZWYzZGNkY2FiZDJmZGEyMjQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGFiODk4MTZkYWRmZDZiNmExZjI2MzRmY2YwMGVjODQwMzc4MTAyNWVkNjg5MGM0ODQ5NzQyNzA2YmQ0M2VkZScsXG4gICAgICAgICc2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzFlMzNmMWE3NDZjOWM1Nzc4MTMzMzQ0ZDkyOTlmY2FhMjBiMDkzOGU4YWNmZjI1NDRiYjQwMjg0YjhjNWZiOTQnLFxuICAgICAgICAnNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzg1YjdjMWRjYjNjZWMxYjdlZTdmMzBkZWQ3OWRkMjBhMGVkMWY0Y2MxOGNiY2ZjZmE0MTAzNjFmZDhmMDhmMzEnLFxuICAgICAgICAnM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcyOWRmOWZiZDhkOWU0NjUwOTI3NWY0YjEyNWQ2ZDQ1ZDdmYmU5YTNiODc4YTdhZjg3MmEyODAwNjYxYWM1ZjUxJyxcbiAgICAgICAgJ2I0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhMGIxY2FlMDZiMGE4NDdhM2ZlYTZlNjcxYWFmOGFkZmRmZTU4Y2EyZjc2ODEwNWM4MDgyYjJlNDQ5ZmNlMjUyJyxcbiAgICAgICAgJ2FlNDM0MTAyZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNGU4Y2VhZmI5YjNlOWExMzZkYzdmZjY3ZTg0MDI5NWI0OTlkZmIzYjIxMzNlNGJhMTEzZjJlNGMwZTEyMWU1JyxcbiAgICAgICAgJ2NmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUwMmI4MjdjZTYyYTMyNjY4M2MnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDI0YTQ0ZTA0N2UxOWI2ZjVhZmI4MWM3Y2EyZjY5MDgwYTUwNzY2ODlhMDEwOTE5ZjQyNzI1YzJiNzg5YTMzYicsXG4gICAgICAgICc2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2VhMDE2MDZhN2E2YzljZGQyNDlmZGZjZmFjYjk5NTg0MDAxZWRkMjhhYmJhYjc3YjUxMDRlOThlOGUzYjM1ZDQnLFxuICAgICAgICAnMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1ZWI5NjY1MTI1MjAwN2Q4YzVlYTMxYmU0YWQxOTZkZThjZTIxMzFmJyxcbiAgICAgICAgJzY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTNhZTE5NzQ1NjZjYTA2Y2M1MTZkNDdlMGZiMTY1YTY3NGEzZGFiY2ZjYTE1ZTcyMmYwZTM0NTBmNDU4ODknLFxuICAgICAgICAnMmFlYWJlN2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1OTFlZTM1NTMxM2Q5OTcyMWNmNjk5M2ZmZWQxZTNlMzAxOTkzZmYzZWQyNTg4MDIwNzVlYThjZWQzOTdlMjQ2JyxcbiAgICAgICAgJ2IwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTEzOTZkNTVmZGE1NGM0OWYxOWFhOTczMThkOGRhNjFmYTg1ODRlNDdiMDg0OTQ1MDc3Y2YwMzI1NWI1Mjk4NCcsXG4gICAgICAgICc5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkzZWE1N2E0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzNjNWQyYTFiYTM5YzVhMTc5MDAwMDczOGM5ZTBjNDBiOGRjZGZkNTQ2ODc1NGI2NDA1NTQwMTU3ZTAxN2FhN2EnLFxuICAgICAgICAnYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1NydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjYzg3MDRiOGE2MGEwZGVmYTNhOTlhNzI5OWYyZTljM2ZiYzM5NWFmYjA0YWMwNzg0MjVlZjhhMTc5M2NjMDMwJyxcbiAgICAgICAgJ2JkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0ZGVmY2NjNTNlZTdlYTIwNDExOWIyODg5YjE5NycsXG4gICAgICAgICc2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2MxNGY4ZjJjY2IyN2Q2ZjEwOWY2ZDA4ZDAzY2M5NmE2OWJhOGMzNGVlYzA3YmJjZjU2NmQ0OGUzM2RhNjU5MycsXG4gICAgICAgICdjMzU5ZDY5MjNiYjM5OGY3ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2E2Y2JjMzA0NmJjNmE0NTBiYWMyNDc4OWZhMTcxMTVhNGM5NzM5ZWQ3NWY4ZjIxY2U0NDFmNzJlMGI5MGU2ZWYnLFxuICAgICAgICAnMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM0N2Q2ZDlhMDJjNDg5MjdlYmZiODZjMTM1OWIxY2FmMTMwYTNjMDI2N2QxMWNlNjM0NGIzOWY5OWQ0M2NjMzgnLFxuICAgICAgICAnNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkYTY1NDVkMjE4MWRiOGQ5ODNmN2RjYjM3NWVmNTg2NmQ0N2M2N2IxYmYzMWM4Y2Y4NTVlZjc0MzdiNzI2NTZhJyxcbiAgICAgICAgJzQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYzQwNzQ3Y2M5ZDAxMmNiMWExM2I4MTQ4MzA5YzZkZTdlYzI1ZDY5NDVkNjU3MTQ2YjlkNTk5NGI4ZmViMTExMScsXG4gICAgICAgICc1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQzNGM4MjAzZWY0MDM3ZjM1MDInLFxuICAgICAgICAnNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczNzc1YWI3MDg5YmM2YWY4MjNhYmEyZTFhZjcwYjIzNmQyNTFjYWRiMGM4Njc0MzI4NzUyMmExYjNiMGRlZGVhJyxcbiAgICAgICAgJ2JlNTJkMTA3YmNmYTA5ZDhiY2I5NzM2YTgyOGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnY2VlMzFjYmY3ZTM0ZWMzNzlkOTRmYjgxNGQzZDc3NWFkOTU0NTk1ZDEzMTRiYTg4NDY5NTllM2U4MmY3NGUyNicsXG4gICAgICAgICc4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2I0ZjllYWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0NjRlZmRkYjU4ZmQ0NWIxZWJlZmNkYzFhMDFkMDhiNDc5ODYnLFxuICAgICAgICAnMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkNDI2M2RmYzNkMmRmOTIzYTAxNzlhNDg5NjZkMzBjZTg0ZTI1MTVhZmMzZGNjYzFiNzc5MDc3OTJlYmNjNjBlJyxcbiAgICAgICAgJzYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNDg0NTc1MjQ4MjBmYTY1YTRmOGQzNWViNjkzMDg1N2MwMDMyYWNjMGE0YTJkZTQyMjIzM2VlZGE4OTc2MTJjNCcsXG4gICAgICAgICcyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RmZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3YzExY2NlZGEnLFxuICAgICAgICAnZWNmYjcwNTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2ZDdlZjZiMTc1NDNmODM3M2M1NzNmNDRlMWYzODk4MzVkODliY2JjNjA2MmNlZDM2YzgyZGY4M2I4ZmFlODU5JyxcbiAgICAgICAgJ2NkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVhOWJjYzUyMWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTc1NjA1ZDU5MTAyYTVhMjY4NDUwMGQzYjk5MWYyZTNmM2M4OGI5MzIyNTU0NzAzNWFmMjVhZjY2ZTA0NTQxZicsXG4gICAgICAgICdmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ViOTg2NjBmNGM0ZGZhYTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJlNjBhYmUzODg0NTdkZDQzZmVmYjFlZDYyMGMnLFxuICAgICAgICAnNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxM2U4N2IwMjdkODUxNGQzNTkzOWYyZTY4OTJiMTk5MjIxNTQ1OTY5NDE4ODgzMzZkYzM1NjNlM2I4ZGJhOTQyJyxcbiAgICAgICAgJ2ZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWUxNjMwMjZlOWZkNmZlMDE3YzM4ZjA2YTViZTZmYzEyNTQyNGIzNzFjZTI3MDhlN2JmNDQ5MTY5MWU1NzY0YScsXG4gICAgICAgICcxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2IyNjhmNWVmOWFkNTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODAnLFxuICAgICAgICAnNWYzMTBkNGIzYzk5YjllYmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmZjA3ZjMxMThhOWRmMDM1ZTlmYWQ4NWViNmM3YmZlNDJiMDJmMDFjYTk5Y2VlYTNiZjdmZmRiYTkzYzQ3NTBkJyxcbiAgICAgICAgJzQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0MjExNGUyZWRkZDQ3NDBkMDk4Y2VkMWYwZDgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGQ4Yjk4NTVjN2MwNTJhMzQxNDZmZDIwZmZiNjU4YmVhNGI5ZjY5ZTBkODI1ZWJlYzE2ZThjM2NlMmI1MjZhMScsXG4gICAgICAgICdjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzUyZGIwYjUzODRkZmJmMDViZmE5ZDQ3MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFlYmE1NDI2MzE4MGRhMzJiNjMnLFxuICAgICAgICAnYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U2MmY5NDkwZDNkNTFkYTYzOTVlZmQyNGU4MDkxOWNjN2QwZjI5YzNmM2ZhNDhjNmZmZjU0M2JlY2JkNDMzNTInLFxuICAgICAgICAnNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3ZjMwZWEyNDc2YjM5OWI0OTU3NTA5Yzg4Zjc3ZDAxOTFhZmEyZmY1Y2I3YjE0ZmQ2ZDhlN2Q2NWFhYWIxMTkzJyxcbiAgICAgICAgJ2NhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNTA5OGZmMWUxZDlmMTRmYjQ2YTIxMGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMCcsXG4gICAgICAgICc5NzMxMTQxZDgxZmM4ZjgwODRkMzdjNmU3NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzJiNzhjN2RlOWVlNTEyYTcyODk1YmU2YjljYmVmYTZlMmYzYzRjY2NlNDQ1Yzk2YjlmMmM4MWUyNzc4YWQ1OCcsXG4gICAgICAgICdlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJhNDk3MjM3Nzk0Yzg3NTNjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2UyY2I3NGZkZGM4ZTlmYmNkMDc2ZWVmMmE3YzcyYjBjZTM3ZDUwZjA4MjY5ZGZjMDc0YjU4MTU1MDU0N2E0ZjcnLFxuICAgICAgICAnZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4NDM4NDQ3NTY2ZDRkN2JlZGFkYzI5OTQ5NmFiMzU3NDI2MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2QxMGFlM2E4JyxcbiAgICAgICAgJ2M0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNDE2MmQ0ODhiODk0MDIwMzliNTg0YzZmYzZjMzA4ODcwNTg3ZDljNDZmNjYwYjg3OGFiNjVjODJjNzExZDY3ZScsXG4gICAgICAgICc2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzNmYWQzZmE4NGNhZjBmMzRmMGY4OWJmZDJkY2Y1NGZjMTc1ZDc2N2FlYzNlNTA2ODRmM2JhNGE0YmY1ZjY4M2QnLFxuICAgICAgICAnY2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzY3NGYyNjAwYTMwMDdhMDA1NjhjMWE3Y2UwNWQwODE2YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmInLFxuICAgICAgICAnMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4MGI3MGRiNTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkMzJmNGRhNTRhZGU3NGFiYjgxYjgxNWFkMWZiM2IyNjNkODJkNmM2OTI3MTRiY2ZmODdkMjliZDVlZTlmMDhmJyxcbiAgICAgICAgJ2Y5NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIzZWVhODcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzBlNGU2NzA0MzUzODU1NTZlNTkzNjU3MTM1ODQ1ZDM2ZmJiNjkzMWY3MmIwOGNiMWVkOTU0ZjFlM2NlM2ZmNicsXG4gICAgICAgICc0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2JlMjA2MjAwM2M1MWNjMzAwNDY4MjkwNDMzMGU0ZGVlN2YzZGNkMTBiMDFlNTgwYmYxOTcxYjA0ZDRjYWQyOTcnLFxuICAgICAgICAnNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc5MzE0NDQyM2FjZTM0NTFlZDI5ZTBmYjlhYzJhZjIxMWNiNmU4NGE2MDFkZjU5OTNjNDE5ODU5ZmZmNWRmMDRhJyxcbiAgICAgICAgJzdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2MnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYjAxNWY4MDQ0ZjVmY2JkY2YyMWNhMjZkNmMzNGZiODE5NzgyOTIwNWM3YjdkMmE3Y2I2NjQxOGMxNTdiMTEyYycsXG4gICAgICAgICdhYjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q1ZTllMWRhNjQ5ZDk3ZDg5ZTQ4NjgxMTdhNDY1YTNhNGY4YTE4ZGU1N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTInLFxuICAgICAgICAnNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1YzIyNDA0ODBkODk1NWU4NTkyZjI3NDQ3YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkM2FlNDEwNDdkZDdjYTA2NWRiZjhlZDc3Yjk5MjQzOTk4MzAwNWNkNzJlMTZkNmY5OTZhNTMxNmQzNjk2NmJiJyxcbiAgICAgICAgJ2JkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNDYzZTI3NjNkODg1Zjk1OGZjNjZjZGQyMjgwMGYwYTQ4NzE5N2QwYTgyZTM3N2I0OWY4MGFmODdjODk3YjA2NScsXG4gICAgICAgICdiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc5ODVmZGZkMTI3YzA1NjdjNmY1M2VjMWJiNjNlYzMxNThlNTk3YzQwYmZlNzQ3YzgzY2RkZmM5MTA2NDE5MTcnLFxuICAgICAgICAnNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NGExYWQ2YjVmNzZlMzlkYjJkZDI0OTQxMGVhYzdmOTllNzRjNTljYjgzZDJkMGVkNWZmMTU0M2RhNzcwM2U5JyxcbiAgICAgICAgJ2NjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzA2ODJhNTA3MDMzNzVmNjAyZDQxNjY2NGJhMTliN2ZjOWJhYjQyYzcyNzQ3NDYzYTcxZDA4OTZiMjJmNmRhMycsXG4gICAgICAgICc1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzllMjE1OGYwZDdjMGQ1ZjI2YzM3OTFlZmVmYTc5NTk3NjU0ZTdhMmIyNDY0ZjUyYjFlZTZjMTM0Nzc2OWVmNTcnLFxuICAgICAgICAnNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5ZTJmYmYyNjI5MDA4MzczJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE3NmUyNjk4OWE0M2M5Y2ZlYmE0MDI5YzIwMjUzOGMyODE3MmU1NjZlM2M0ZmNlNzMyMjg1N2YzYmUzMjdkNjYnLFxuICAgICAgICAnZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NWQ0NmVmZWEzNzcxZTZlNjhhYmI4OWExM2FkNzQ3ZWNmMTg5MjM5M2RmYzRmMWI3MDA0Nzg4YzUwMzc0ZGE4JyxcbiAgICAgICAgJzk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1ZjZkNWYyMzEwZmIwNDUxYzg2OTM0NWI3MzE5ZjY0NTYwNTcyMScsXG4gICAgICAgICc5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzFiMzg5MDNhNDNmN2YxMTRlZDQ1MDBiNGVhYzcwODNmZGVmZWNlMWNmMjljNjM1MjhkNTYzNDQ2Zjk3MmMxODAnLFxuICAgICAgICAnNDAzNmVkYzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOSdcbiAgICAgIF1cbiAgICBdXG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IGV4cG9ydHM7XG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIG1pbkFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBtaW5VdGlscyA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHMnKTtcblxudXRpbHMuYXNzZXJ0ID0gbWluQXNzZXJ0O1xudXRpbHMudG9BcnJheSA9IG1pblV0aWxzLnRvQXJyYXk7XG51dGlscy56ZXJvMiA9IG1pblV0aWxzLnplcm8yO1xudXRpbHMudG9IZXggPSBtaW5VdGlscy50b0hleDtcbnV0aWxzLmVuY29kZSA9IG1pblV0aWxzLmVuY29kZTtcblxuLy8gUmVwcmVzZW50IG51bSBpbiBhIHctTkFGIGZvcm1cbmZ1bmN0aW9uIGdldE5BRihudW0sIHcpIHtcbiAgdmFyIG5hZiA9IFtdO1xuICB2YXIgd3MgPSAxIDw8ICh3ICsgMSk7XG4gIHZhciBrID0gbnVtLmNsb25lKCk7XG4gIHdoaWxlIChrLmNtcG4oMSkgPj0gMCkge1xuICAgIHZhciB6O1xuICAgIGlmIChrLmlzT2RkKCkpIHtcbiAgICAgIHZhciBtb2QgPSBrLmFuZGxuKHdzIC0gMSk7XG4gICAgICBpZiAobW9kID4gKHdzID4+IDEpIC0gMSlcbiAgICAgICAgeiA9ICh3cyA+PiAxKSAtIG1vZDtcbiAgICAgIGVsc2VcbiAgICAgICAgeiA9IG1vZDtcbiAgICAgIGsuaXN1Ym4oeik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHogPSAwO1xuICAgIH1cbiAgICBuYWYucHVzaCh6KTtcblxuICAgIC8vIE9wdGltaXphdGlvbiwgc2hpZnQgYnkgd29yZCBpZiBwb3NzaWJsZVxuICAgIHZhciBzaGlmdCA9IChrLmNtcG4oMCkgIT09IDAgJiYgay5hbmRsbih3cyAtIDEpID09PSAwKSA/ICh3ICsgMSkgOiAxO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgc2hpZnQ7IGkrKylcbiAgICAgIG5hZi5wdXNoKDApO1xuICAgIGsuaXVzaHJuKHNoaWZ0KTtcbiAgfVxuXG4gIHJldHVybiBuYWY7XG59XG51dGlscy5nZXROQUYgPSBnZXROQUY7XG5cbi8vIFJlcHJlc2VudCBrMSwgazIgaW4gYSBKb2ludCBTcGFyc2UgRm9ybVxuZnVuY3Rpb24gZ2V0SlNGKGsxLCBrMikge1xuICB2YXIganNmID0gW1xuICAgIFtdLFxuICAgIFtdXG4gIF07XG5cbiAgazEgPSBrMS5jbG9uZSgpO1xuICBrMiA9IGsyLmNsb25lKCk7XG4gIHZhciBkMSA9IDA7XG4gIHZhciBkMiA9IDA7XG4gIHdoaWxlIChrMS5jbXBuKC1kMSkgPiAwIHx8IGsyLmNtcG4oLWQyKSA+IDApIHtcblxuICAgIC8vIEZpcnN0IHBoYXNlXG4gICAgdmFyIG0xNCA9IChrMS5hbmRsbigzKSArIGQxKSAmIDM7XG4gICAgdmFyIG0yNCA9IChrMi5hbmRsbigzKSArIGQyKSAmIDM7XG4gICAgaWYgKG0xNCA9PT0gMylcbiAgICAgIG0xNCA9IC0xO1xuICAgIGlmIChtMjQgPT09IDMpXG4gICAgICBtMjQgPSAtMTtcbiAgICB2YXIgdTE7XG4gICAgaWYgKChtMTQgJiAxKSA9PT0gMCkge1xuICAgICAgdTEgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbTggPSAoazEuYW5kbG4oNykgKyBkMSkgJiA3O1xuICAgICAgaWYgKChtOCA9PT0gMyB8fCBtOCA9PT0gNSkgJiYgbTI0ID09PSAyKVxuICAgICAgICB1MSA9IC1tMTQ7XG4gICAgICBlbHNlXG4gICAgICAgIHUxID0gbTE0O1xuICAgIH1cbiAgICBqc2ZbMF0ucHVzaCh1MSk7XG5cbiAgICB2YXIgdTI7XG4gICAgaWYgKChtMjQgJiAxKSA9PT0gMCkge1xuICAgICAgdTIgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbTggPSAoazIuYW5kbG4oNykgKyBkMikgJiA3O1xuICAgICAgaWYgKChtOCA9PT0gMyB8fCBtOCA9PT0gNSkgJiYgbTE0ID09PSAyKVxuICAgICAgICB1MiA9IC1tMjQ7XG4gICAgICBlbHNlXG4gICAgICAgIHUyID0gbTI0O1xuICAgIH1cbiAgICBqc2ZbMV0ucHVzaCh1Mik7XG5cbiAgICAvLyBTZWNvbmQgcGhhc2VcbiAgICBpZiAoMiAqIGQxID09PSB1MSArIDEpXG4gICAgICBkMSA9IDEgLSBkMTtcbiAgICBpZiAoMiAqIGQyID09PSB1MiArIDEpXG4gICAgICBkMiA9IDEgLSBkMjtcbiAgICBrMS5pdXNocm4oMSk7XG4gICAgazIuaXVzaHJuKDEpO1xuICB9XG5cbiAgcmV0dXJuIGpzZjtcbn1cbnV0aWxzLmdldEpTRiA9IGdldEpTRjtcblxuZnVuY3Rpb24gY2FjaGVkUHJvcGVydHkob2JqLCBuYW1lLCBjb21wdXRlcikge1xuICB2YXIga2V5ID0gJ18nICsgbmFtZTtcbiAgb2JqLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uIGNhY2hlZFByb3BlcnR5KCkge1xuICAgIHJldHVybiB0aGlzW2tleV0gIT09IHVuZGVmaW5lZCA/IHRoaXNba2V5XSA6XG4gICAgICAgICAgIHRoaXNba2V5XSA9IGNvbXB1dGVyLmNhbGwodGhpcyk7XG4gIH07XG59XG51dGlscy5jYWNoZWRQcm9wZXJ0eSA9IGNhY2hlZFByb3BlcnR5O1xuXG5mdW5jdGlvbiBwYXJzZUJ5dGVzKGJ5dGVzKSB7XG4gIHJldHVybiB0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnID8gdXRpbHMudG9BcnJheShieXRlcywgJ2hleCcpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlcztcbn1cbnV0aWxzLnBhcnNlQnl0ZXMgPSBwYXJzZUJ5dGVzO1xuXG5mdW5jdGlvbiBpbnRGcm9tTEUoYnl0ZXMpIHtcbiAgcmV0dXJuIG5ldyBCTihieXRlcywgJ2hleCcsICdsZScpO1xufVxudXRpbHMuaW50RnJvbUxFID0gaW50RnJvbUxFO1xuXG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiX2FyZ3NcIjogW1xuICAgIFtcbiAgICAgIHtcbiAgICAgICAgXCJyYXdcIjogXCJlbGxpcHRpY0BeNi4wLjBcIixcbiAgICAgICAgXCJzY29wZVwiOiBudWxsLFxuICAgICAgICBcImVzY2FwZWROYW1lXCI6IFwiZWxsaXB0aWNcIixcbiAgICAgICAgXCJuYW1lXCI6IFwiZWxsaXB0aWNcIixcbiAgICAgICAgXCJyYXdTcGVjXCI6IFwiXjYuMC4wXCIsXG4gICAgICAgIFwic3BlY1wiOiBcIj49Ni4wLjAgPDcuMC4wXCIsXG4gICAgICAgIFwidHlwZVwiOiBcInJhbmdlXCJcbiAgICAgIH0sXG4gICAgICBcIi9Vc2Vycy9sdXRvdmljaC9Qcm9qZWN0cy9uZW80ai1qYXZhc2NyaXB0LWRyaXZlci9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1zaWduXCJcbiAgICBdXG4gIF0sXG4gIFwiX2Zyb21cIjogXCJlbGxpcHRpY0A+PTYuMC4wIDw3LjAuMFwiLFxuICBcIl9pZFwiOiBcImVsbGlwdGljQDYuNC4wXCIsXG4gIFwiX2luQ2FjaGVcIjogdHJ1ZSxcbiAgXCJfaW5zdGFsbGFibGVcIjogdHJ1ZSxcbiAgXCJfbG9jYXRpb25cIjogXCIvZWxsaXB0aWNcIixcbiAgXCJfbm9kZVZlcnNpb25cIjogXCI3LjAuMFwiLFxuICBcIl9ucG1PcGVyYXRpb25hbEludGVybmFsXCI6IHtcbiAgICBcImhvc3RcIjogXCJwYWNrYWdlcy0xOC1lYXN0LmludGVybmFsLm5wbWpzLmNvbVwiLFxuICAgIFwidG1wXCI6IFwidG1wL2VsbGlwdGljLTYuNC4wLnRnel8xNDg3Nzk4ODY2NDI4XzAuMzA1MTA2MjAxOTA3NjE5ODNcIlxuICB9LFxuICBcIl9ucG1Vc2VyXCI6IHtcbiAgICBcIm5hbWVcIjogXCJpbmR1dG55XCIsXG4gICAgXCJlbWFpbFwiOiBcImZlZG9yQGluZHV0bnkuY29tXCJcbiAgfSxcbiAgXCJfbnBtVmVyc2lvblwiOiBcIjMuMTAuOFwiLFxuICBcIl9waGFudG9tQ2hpbGRyZW5cIjoge30sXG4gIFwiX3JlcXVlc3RlZFwiOiB7XG4gICAgXCJyYXdcIjogXCJlbGxpcHRpY0BeNi4wLjBcIixcbiAgICBcInNjb3BlXCI6IG51bGwsXG4gICAgXCJlc2NhcGVkTmFtZVwiOiBcImVsbGlwdGljXCIsXG4gICAgXCJuYW1lXCI6IFwiZWxsaXB0aWNcIixcbiAgICBcInJhd1NwZWNcIjogXCJeNi4wLjBcIixcbiAgICBcInNwZWNcIjogXCI+PTYuMC4wIDw3LjAuMFwiLFxuICAgIFwidHlwZVwiOiBcInJhbmdlXCJcbiAgfSxcbiAgXCJfcmVxdWlyZWRCeVwiOiBbXG4gICAgXCIvYnJvd3NlcmlmeS1zaWduXCIsXG4gICAgXCIvY3JlYXRlLWVjZGhcIlxuICBdLFxuICBcIl9yZXNvbHZlZFwiOiBcImh0dHA6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWxsaXB0aWMvLS9lbGxpcHRpYy02LjQuMC50Z3pcIixcbiAgXCJfc2hhc3VtXCI6IFwiY2FjOWFmODc2MmM4NTgzNjE4NzAwM2M4ZGZlMTkzZTVlMmVhZTVkZlwiLFxuICBcIl9zaHJpbmt3cmFwXCI6IG51bGwsXG4gIFwiX3NwZWNcIjogXCJlbGxpcHRpY0BeNi4wLjBcIixcbiAgXCJfd2hlcmVcIjogXCIvVXNlcnMvbHV0b3ZpY2gvUHJvamVjdHMvbmVvNGotamF2YXNjcmlwdC1kcml2ZXIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktc2lnblwiLFxuICBcImF1dGhvclwiOiB7XG4gICAgXCJuYW1lXCI6IFwiRmVkb3IgSW5kdXRueVwiLFxuICAgIFwiZW1haWxcIjogXCJmZWRvckBpbmR1dG55LmNvbVwiXG4gIH0sXG4gIFwiYnVnc1wiOiB7XG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpYy9pc3N1ZXNcIlxuICB9LFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJibi5qc1wiOiBcIl40LjQuMFwiLFxuICAgIFwiYnJvcmFuZFwiOiBcIl4xLjAuMVwiLFxuICAgIFwiaGFzaC5qc1wiOiBcIl4xLjAuMFwiLFxuICAgIFwiaG1hYy1kcmJnXCI6IFwiXjEuMC4wXCIsXG4gICAgXCJpbmhlcml0c1wiOiBcIl4yLjAuMVwiLFxuICAgIFwibWluaW1hbGlzdGljLWFzc2VydFwiOiBcIl4xLjAuMFwiLFxuICAgIFwibWluaW1hbGlzdGljLWNyeXB0by11dGlsc1wiOiBcIl4xLjAuMFwiXG4gIH0sXG4gIFwiZGVzY3JpcHRpb25cIjogXCJFQyBjcnlwdG9ncmFwaHlcIixcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYnJmc1wiOiBcIl4xLjQuM1wiLFxuICAgIFwiY292ZXJhbGxzXCI6IFwiXjIuMTEuM1wiLFxuICAgIFwiZ3J1bnRcIjogXCJeMC40LjVcIixcbiAgICBcImdydW50LWJyb3dzZXJpZnlcIjogXCJeNS4wLjBcIixcbiAgICBcImdydW50LWNsaVwiOiBcIl4xLjIuMFwiLFxuICAgIFwiZ3J1bnQtY29udHJpYi1jb25uZWN0XCI6IFwiXjEuMC4wXCIsXG4gICAgXCJncnVudC1jb250cmliLWNvcHlcIjogXCJeMS4wLjBcIixcbiAgICBcImdydW50LWNvbnRyaWItdWdsaWZ5XCI6IFwiXjEuMC4xXCIsXG4gICAgXCJncnVudC1tb2NoYS1pc3RhbmJ1bFwiOiBcIl4zLjAuMVwiLFxuICAgIFwiZ3J1bnQtc2F1Y2VsYWJzXCI6IFwiXjguNi4yXCIsXG4gICAgXCJpc3RhbmJ1bFwiOiBcIl4wLjQuMlwiLFxuICAgIFwianNjc1wiOiBcIl4yLjkuMFwiLFxuICAgIFwianNoaW50XCI6IFwiXjIuNi4wXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjEuMFwiXG4gIH0sXG4gIFwiZGlyZWN0b3JpZXNcIjoge30sXG4gIFwiZGlzdFwiOiB7XG4gICAgXCJzaGFzdW1cIjogXCJjYWM5YWY4NzYyYzg1ODM2MTg3MDAzYzhkZmUxOTNlNWUyZWFlNWRmXCIsXG4gICAgXCJ0YXJiYWxsXCI6IFwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWxsaXB0aWMvLS9lbGxpcHRpYy02LjQuMC50Z3pcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImxpYlwiXG4gIF0sXG4gIFwiZ2l0SGVhZFwiOiBcIjZiMGQyYjc2Y2FhZTkxNDcxNjQ5YzhlMjFmMGIxZDNiYTBmOTYwOTBcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9pbmR1dG55L2VsbGlwdGljXCIsXG4gIFwia2V5d29yZHNcIjogW1xuICAgIFwiRUNcIixcbiAgICBcIkVsbGlwdGljXCIsXG4gICAgXCJjdXJ2ZVwiLFxuICAgIFwiQ3J5cHRvZ3JhcGh5XCJcbiAgXSxcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwibWFpblwiOiBcImxpYi9lbGxpcHRpYy5qc1wiLFxuICBcIm1haW50YWluZXJzXCI6IFtcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJpbmR1dG55XCIsXG4gICAgICBcImVtYWlsXCI6IFwiZmVkb3JAaW5kdXRueS5jb21cIlxuICAgIH1cbiAgXSxcbiAgXCJuYW1lXCI6IFwiZWxsaXB0aWNcIixcbiAgXCJvcHRpb25hbERlcGVuZGVuY2llc1wiOiB7fSxcbiAgXCJyZWFkbWVcIjogXCJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJnaXQrc3NoOi8vZ2l0QGdpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpYy5naXRcIlxuICB9LFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwianNjc1wiOiBcImpzY3MgYmVuY2htYXJrcy8qLmpzIGxpYi8qLmpzIGxpYi8qKi8qLmpzIGxpYi8qKi8qKi8qLmpzIHRlc3QvaW5kZXguanNcIixcbiAgICBcImpzaGludFwiOiBcImpzY3MgYmVuY2htYXJrcy8qLmpzIGxpYi8qLmpzIGxpYi8qKi8qLmpzIGxpYi8qKi8qKi8qLmpzIHRlc3QvaW5kZXguanNcIixcbiAgICBcImxpbnRcIjogXCJucG0gcnVuIGpzY3MgJiYgbnBtIHJ1biBqc2hpbnRcIixcbiAgICBcInRlc3RcIjogXCJucG0gcnVuIGxpbnQgJiYgbnBtIHJ1biB1bml0XCIsXG4gICAgXCJ1bml0XCI6IFwiaXN0YW5idWwgdGVzdCBfbW9jaGEgLS1yZXBvcnRlcj1zcGVjIHRlc3QvaW5kZXguanNcIixcbiAgICBcInZlcnNpb25cIjogXCJncnVudCBkaXN0ICYmIGdpdCBhZGQgZGlzdC9cIlxuICB9LFxuICBcInZlcnNpb25cIjogXCI2LjQuMFwiXG59XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSB0aGlzLl9ldmVudHMgfHwge307XG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbkV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uKG4pIHtcbiAgaWYgKCFpc051bWJlcihuKSB8fCBuIDwgMCB8fCBpc05hTihuKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIGVyLCBoYW5kbGVyLCBsZW4sIGFyZ3MsIGksIGxpc3RlbmVycztcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmICh0eXBlID09PSAnZXJyb3InKSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHMuZXJyb3IgfHxcbiAgICAgICAgKGlzT2JqZWN0KHRoaXMuX2V2ZW50cy5lcnJvcikgJiYgIXRoaXMuX2V2ZW50cy5lcnJvci5sZW5ndGgpKSB7XG4gICAgICBlciA9IGFyZ3VtZW50c1sxXTtcbiAgICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmNhdWdodCwgdW5zcGVjaWZpZWQgXCJlcnJvclwiIGV2ZW50LiAoJyArIGVyICsgJyknKTtcbiAgICAgICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgaWYgKGlzVW5kZWZpbmVkKGhhbmRsZXIpKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkge1xuICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgLy8gZmFzdCBjYXNlc1xuICAgICAgY2FzZSAxOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gc2xvd2VyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgaGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoaGFuZGxlcikpIHtcbiAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICBsaXN0ZW5lcnMgPSBoYW5kbGVyLnNsaWNlKCk7XG4gICAgbGVuID0gbGlzdGVuZXJzLmxlbmd0aDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgICBsaXN0ZW5lcnNbaV0uYXBwbHkodGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgbTtcblxuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgdGhpcy5fZXZlbnRzID0ge307XG5cbiAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICBpZiAodGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVyKVxuICAgIHRoaXMuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICBpc0Z1bmN0aW9uKGxpc3RlbmVyLmxpc3RlbmVyKSA/XG4gICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICBlbHNlIGlmIChpc09iamVjdCh0aGlzLl9ldmVudHNbdHlwZV0pKVxuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0ucHVzaChsaXN0ZW5lcik7XG4gIGVsc2VcbiAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBbdGhpcy5fZXZlbnRzW3R5cGVdLCBsaXN0ZW5lcl07XG5cbiAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkgJiYgIXRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQpIHtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX21heExpc3RlbmVycykpIHtcbiAgICAgIG0gPSB0aGlzLl9tYXhMaXN0ZW5lcnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgICB9XG5cbiAgICBpZiAobSAmJiBtID4gMCAmJiB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoID4gbSkge1xuICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKCcobm9kZSkgd2FybmluZzogcG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2xlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICdVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdC4nLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoKTtcbiAgICAgIGlmICh0eXBlb2YgY29uc29sZS50cmFjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBub3Qgc3VwcG9ydGVkIGluIElFIDEwXG4gICAgICAgIGNvbnNvbGUudHJhY2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgdmFyIGZpcmVkID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZygpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGcpO1xuXG4gICAgaWYgKCFmaXJlZCkge1xuICAgICAgZmlyZWQgPSB0cnVlO1xuICAgICAgbGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cblxuICBnLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHRoaXMub24odHlwZSwgZyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBlbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWZmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZFxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBsaXN0LCBwb3NpdGlvbiwgbGVuZ3RoLCBpO1xuXG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIGxpc3QgPSB0aGlzLl9ldmVudHNbdHlwZV07XG4gIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICBwb3NpdGlvbiA9IC0xO1xuXG4gIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fFxuICAgICAgKGlzRnVuY3Rpb24obGlzdC5saXN0ZW5lcikgJiYgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7XG4gICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTtcblxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KGxpc3QpKSB7XG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gPiAwOykge1xuICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8XG4gICAgICAgICAgKGxpc3RbaV0ubGlzdGVuZXIgJiYgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7XG4gICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgICBsaXN0Lmxlbmd0aCA9IDA7XG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0LnNwbGljZShwb3NpdGlvbiwgMSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0ZW5lcik7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIga2V5LCBsaXN0ZW5lcnM7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICBpZiAoIXRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgdGhpcy5fZXZlbnRzID0ge307XG4gICAgZWxzZSBpZiAodGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGZvciAoa2V5IGluIHRoaXMuX2V2ZW50cykge1xuICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNGdW5jdGlvbihsaXN0ZW5lcnMpKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICB9IGVsc2UgaWYgKGxpc3RlbmVycykge1xuICAgIC8vIExJRk8gb3JkZXJcbiAgICB3aGlsZSAobGlzdGVuZXJzLmxlbmd0aClcbiAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2xpc3RlbmVycy5sZW5ndGggLSAxXSk7XG4gIH1cbiAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgcmV0O1xuICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIHJldCA9IFtdO1xuICBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoaXMuX2V2ZW50c1t0eXBlXSkpXG4gICAgcmV0ID0gW3RoaXMuX2V2ZW50c1t0eXBlXV07XG4gIGVsc2VcbiAgICByZXQgPSB0aGlzLl9ldmVudHNbdHlwZV0uc2xpY2UoKTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgaWYgKHRoaXMuX2V2ZW50cykge1xuICAgIHZhciBldmxpc3RlbmVyID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKGlzRnVuY3Rpb24oZXZsaXN0ZW5lcikpXG4gICAgICByZXR1cm4gMTtcbiAgICBlbHNlIGlmIChldmxpc3RlbmVyKVxuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICB9XG4gIHJldHVybiAwO1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG4iLCJ2YXIgbWQ1ID0gcmVxdWlyZSgnY3JlYXRlLWhhc2gvbWQ1Jylcbm1vZHVsZS5leHBvcnRzID0gRVZQX0J5dGVzVG9LZXlcbmZ1bmN0aW9uIEVWUF9CeXRlc1RvS2V5IChwYXNzd29yZCwgc2FsdCwga2V5TGVuLCBpdkxlbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihwYXNzd29yZCkpIHtcbiAgICBwYXNzd29yZCA9IG5ldyBCdWZmZXIocGFzc3dvcmQsICdiaW5hcnknKVxuICB9XG4gIGlmIChzYWx0ICYmICFCdWZmZXIuaXNCdWZmZXIoc2FsdCkpIHtcbiAgICBzYWx0ID0gbmV3IEJ1ZmZlcihzYWx0LCAnYmluYXJ5JylcbiAgfVxuICBrZXlMZW4gPSBrZXlMZW4gLyA4XG4gIGl2TGVuID0gaXZMZW4gfHwgMFxuICB2YXIga2kgPSAwXG4gIHZhciBpaSA9IDBcbiAgdmFyIGtleSA9IG5ldyBCdWZmZXIoa2V5TGVuKVxuICB2YXIgaXYgPSBuZXcgQnVmZmVyKGl2TGVuKVxuICB2YXIgYWRkbWQgPSAwXG4gIHZhciBtZF9idWZcbiAgdmFyIGlcbiAgdmFyIGJ1ZnMgPSBbXVxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChhZGRtZCsrID4gMCkge1xuICAgICAgYnVmcy5wdXNoKG1kX2J1ZilcbiAgICB9XG4gICAgYnVmcy5wdXNoKHBhc3N3b3JkKVxuICAgIGlmIChzYWx0KSB7XG4gICAgICBidWZzLnB1c2goc2FsdClcbiAgICB9XG4gICAgbWRfYnVmID0gbWQ1KEJ1ZmZlci5jb25jYXQoYnVmcykpXG4gICAgYnVmcyA9IFtdXG4gICAgaSA9IDBcbiAgICBpZiAoa2V5TGVuID4gMCkge1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKGtleUxlbiA9PT0gMCkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPT09IG1kX2J1Zi5sZW5ndGgpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGtleVtraSsrXSA9IG1kX2J1ZltpXVxuICAgICAgICBrZXlMZW4tLVxuICAgICAgICBpKytcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGl2TGVuID4gMCAmJiBpICE9PSBtZF9idWYubGVuZ3RoKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpZiAoaXZMZW4gPT09IDApIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmIChpID09PSBtZF9idWYubGVuZ3RoKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpdltpaSsrXSA9IG1kX2J1ZltpXVxuICAgICAgICBpdkxlbi0tXG4gICAgICAgIGkrK1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoa2V5TGVuID09PSAwICYmIGl2TGVuID09PSAwKSB7XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuICBmb3IgKGkgPSAwOyBpIDwgbWRfYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgbWRfYnVmW2ldID0gMFxuICB9XG4gIHJldHVybiB7XG4gICAga2V5OiBrZXksXG4gICAgaXY6IGl2XG4gIH1cbn1cbiIsInZhciBoYXNoID0gZXhwb3J0cztcblxuaGFzaC51dGlscyA9IHJlcXVpcmUoJy4vaGFzaC91dGlscycpO1xuaGFzaC5jb21tb24gPSByZXF1aXJlKCcuL2hhc2gvY29tbW9uJyk7XG5oYXNoLnNoYSA9IHJlcXVpcmUoJy4vaGFzaC9zaGEnKTtcbmhhc2gucmlwZW1kID0gcmVxdWlyZSgnLi9oYXNoL3JpcGVtZCcpO1xuaGFzaC5obWFjID0gcmVxdWlyZSgnLi9oYXNoL2htYWMnKTtcblxuLy8gUHJveHkgaGFzaCBmdW5jdGlvbnMgdG8gdGhlIG1haW4gb2JqZWN0XG5oYXNoLnNoYTEgPSBoYXNoLnNoYS5zaGExO1xuaGFzaC5zaGEyNTYgPSBoYXNoLnNoYS5zaGEyNTY7XG5oYXNoLnNoYTIyNCA9IGhhc2guc2hhLnNoYTIyNDtcbmhhc2guc2hhMzg0ID0gaGFzaC5zaGEuc2hhMzg0O1xuaGFzaC5zaGE1MTIgPSBoYXNoLnNoYS5zaGE1MTI7XG5oYXNoLnJpcGVtZDE2MCA9IGhhc2gucmlwZW1kLnJpcGVtZDE2MDtcbiIsInZhciBoYXNoID0gcmVxdWlyZSgnLi4vaGFzaCcpO1xudmFyIHV0aWxzID0gaGFzaC51dGlscztcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG5cbmZ1bmN0aW9uIEJsb2NrSGFzaCgpIHtcbiAgdGhpcy5wZW5kaW5nID0gbnVsbDtcbiAgdGhpcy5wZW5kaW5nVG90YWwgPSAwO1xuICB0aGlzLmJsb2NrU2l6ZSA9IHRoaXMuY29uc3RydWN0b3IuYmxvY2tTaXplO1xuICB0aGlzLm91dFNpemUgPSB0aGlzLmNvbnN0cnVjdG9yLm91dFNpemU7XG4gIHRoaXMuaG1hY1N0cmVuZ3RoID0gdGhpcy5jb25zdHJ1Y3Rvci5obWFjU3RyZW5ndGg7XG4gIHRoaXMucGFkTGVuZ3RoID0gdGhpcy5jb25zdHJ1Y3Rvci5wYWRMZW5ndGggLyA4O1xuICB0aGlzLmVuZGlhbiA9ICdiaWcnO1xuXG4gIHRoaXMuX2RlbHRhOCA9IHRoaXMuYmxvY2tTaXplIC8gODtcbiAgdGhpcy5fZGVsdGEzMiA9IHRoaXMuYmxvY2tTaXplIC8gMzI7XG59XG5leHBvcnRzLkJsb2NrSGFzaCA9IEJsb2NrSGFzaDtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBlbmMpIHtcbiAgLy8gQ29udmVydCBtZXNzYWdlIHRvIGFycmF5LCBwYWQgaXQsIGFuZCBqb2luIGludG8gMzJiaXQgYmxvY2tzXG4gIG1zZyA9IHV0aWxzLnRvQXJyYXkobXNnLCBlbmMpO1xuICBpZiAoIXRoaXMucGVuZGluZylcbiAgICB0aGlzLnBlbmRpbmcgPSBtc2c7XG4gIGVsc2VcbiAgICB0aGlzLnBlbmRpbmcgPSB0aGlzLnBlbmRpbmcuY29uY2F0KG1zZyk7XG4gIHRoaXMucGVuZGluZ1RvdGFsICs9IG1zZy5sZW5ndGg7XG5cbiAgLy8gRW5vdWdoIGRhdGEsIHRyeSB1cGRhdGluZ1xuICBpZiAodGhpcy5wZW5kaW5nLmxlbmd0aCA+PSB0aGlzLl9kZWx0YTgpIHtcbiAgICBtc2cgPSB0aGlzLnBlbmRpbmc7XG5cbiAgICAvLyBQcm9jZXNzIHBlbmRpbmcgZGF0YSBpbiBibG9ja3NcbiAgICB2YXIgciA9IG1zZy5sZW5ndGggJSB0aGlzLl9kZWx0YTg7XG4gICAgdGhpcy5wZW5kaW5nID0gbXNnLnNsaWNlKG1zZy5sZW5ndGggLSByLCBtc2cubGVuZ3RoKTtcbiAgICBpZiAodGhpcy5wZW5kaW5nLmxlbmd0aCA9PT0gMClcbiAgICAgIHRoaXMucGVuZGluZyA9IG51bGw7XG5cbiAgICBtc2cgPSB1dGlscy5qb2luMzIobXNnLCAwLCBtc2cubGVuZ3RoIC0gciwgdGhpcy5lbmRpYW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSB0aGlzLl9kZWx0YTMyKVxuICAgICAgdGhpcy5fdXBkYXRlKG1zZywgaSwgaSArIHRoaXMuX2RlbHRhMzIpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5CbG9ja0hhc2gucHJvdG90eXBlLmRpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpO1xuICBhc3NlcnQodGhpcy5wZW5kaW5nID09PSBudWxsKTtcblxuICByZXR1cm4gdGhpcy5fZGlnZXN0KGVuYyk7XG59O1xuXG5CbG9ja0hhc2gucHJvdG90eXBlLl9wYWQgPSBmdW5jdGlvbiBwYWQoKSB7XG4gIHZhciBsZW4gPSB0aGlzLnBlbmRpbmdUb3RhbDtcbiAgdmFyIGJ5dGVzID0gdGhpcy5fZGVsdGE4O1xuICB2YXIgayA9IGJ5dGVzIC0gKChsZW4gKyB0aGlzLnBhZExlbmd0aCkgJSBieXRlcyk7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkoayArIHRoaXMucGFkTGVuZ3RoKTtcbiAgcmVzWzBdID0gMHg4MDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBrOyBpKyspXG4gICAgcmVzW2ldID0gMDtcblxuICAvLyBBcHBlbmQgbGVuZ3RoXG4gIGxlbiA8PD0gMztcbiAgaWYgKHRoaXMuZW5kaWFuID09PSAnYmlnJykge1xuICAgIGZvciAodmFyIHQgPSA4OyB0IDwgdGhpcy5wYWRMZW5ndGg7IHQrKylcbiAgICAgIHJlc1tpKytdID0gMDtcblxuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAxNikgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gbGVuICYgMHhmZjtcbiAgfSBlbHNlIHtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiA4KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAxNikgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMjQpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG5cbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiIsInZhciBobWFjID0gZXhwb3J0cztcblxudmFyIGhhc2ggPSByZXF1aXJlKCcuLi9oYXNoJyk7XG52YXIgdXRpbHMgPSBoYXNoLnV0aWxzO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcbiAgICBrZXlbaV0gXj0gMHgzNjtcbiAgdGhpcy5pbm5lciA9IG5ldyB0aGlzLkhhc2goKS51cGRhdGUoa2V5KTtcblxuICAvLyAweDM2IF4gMHg1YyA9IDB4NmFcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpKyspXG4gICAga2V5W2ldIF49IDB4NmE7XG4gIHRoaXMub3V0ZXIgPSBuZXcgdGhpcy5IYXNoKCkudXBkYXRlKGtleSk7XG59O1xuXG5IbWFjLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBlbmMpIHtcbiAgdGhpcy5pbm5lci51cGRhdGUobXNnLCBlbmMpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkhtYWMucHJvdG90eXBlLmRpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgdGhpcy5vdXRlci51cGRhdGUodGhpcy5pbm5lci5kaWdlc3QoKSk7XG4gIHJldHVybiB0aGlzLm91dGVyLmRpZ2VzdChlbmMpO1xufTtcbiIsInZhciBoYXNoID0gcmVxdWlyZSgnLi4vaGFzaCcpO1xudmFyIHV0aWxzID0gaGFzaC51dGlscztcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGhhc2guY29tbW9uLkJsb2NrSGFzaDtcblxuZnVuY3Rpb24gUklQRU1EMTYwKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUklQRU1EMTYwKSlcbiAgICByZXR1cm4gbmV3IFJJUEVNRDE2MCgpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuXG4gIHRoaXMuaCA9IFsgMHg2NzQ1MjMwMSwgMHhlZmNkYWI4OSwgMHg5OGJhZGNmZSwgMHgxMDMyNTQ3NiwgMHhjM2QyZTFmMCBdO1xuICB0aGlzLmVuZGlhbiA9ICdsaXR0bGUnO1xufVxudXRpbHMuaW5oZXJpdHMoUklQRU1EMTYwLCBCbG9ja0hhc2gpO1xuZXhwb3J0cy5yaXBlbWQxNjAgPSBSSVBFTUQxNjA7XG5cblJJUEVNRDE2MC5ibG9ja1NpemUgPSA1MTI7XG5SSVBFTUQxNjAub3V0U2l6ZSA9IDE2MDtcblJJUEVNRDE2MC5obWFjU3RyZW5ndGggPSAxOTI7XG5SSVBFTUQxNjAucGFkTGVuZ3RoID0gNjQ7XG5cblJJUEVNRDE2MC5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHZhciBBID0gdGhpcy5oWzBdO1xuICB2YXIgQiA9IHRoaXMuaFsxXTtcbiAgdmFyIEMgPSB0aGlzLmhbMl07XG4gIHZhciBEID0gdGhpcy5oWzNdO1xuICB2YXIgRSA9IHRoaXMuaFs0XTtcbiAgdmFyIEFoID0gQTtcbiAgdmFyIEJoID0gQjtcbiAgdmFyIENoID0gQztcbiAgdmFyIERoID0gRDtcbiAgdmFyIEVoID0gRTtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCA4MDsgaisrKSB7XG4gICAgdmFyIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBLCBmKGosIEIsIEMsIEQpLCBtc2dbcltqXSArIHN0YXJ0XSwgSyhqKSksXG4gICAgICAgIHNbal0pLFxuICAgICAgRSk7XG4gICAgQSA9IEU7XG4gICAgRSA9IEQ7XG4gICAgRCA9IHJvdGwzMihDLCAxMCk7XG4gICAgQyA9IEI7XG4gICAgQiA9IFQ7XG4gICAgVCA9IHN1bTMyKFxuICAgICAgcm90bDMyKFxuICAgICAgICBzdW0zMl80KEFoLCBmKDc5IC0gaiwgQmgsIENoLCBEaCksIG1zZ1tyaFtqXSArIHN0YXJ0XSwgS2goaikpLFxuICAgICAgICBzaFtqXSksXG4gICAgICBFaCk7XG4gICAgQWggPSBFaDtcbiAgICBFaCA9IERoO1xuICAgIERoID0gcm90bDMyKENoLCAxMCk7XG4gICAgQ2ggPSBCaDtcbiAgICBCaCA9IFQ7XG4gIH1cbiAgVCA9IHN1bTMyXzModGhpcy5oWzFdLCBDLCBEaCk7XG4gIHRoaXMuaFsxXSA9IHN1bTMyXzModGhpcy5oWzJdLCBELCBFaCk7XG4gIHRoaXMuaFsyXSA9IHN1bTMyXzModGhpcy5oWzNdLCBFLCBBaCk7XG4gIHRoaXMuaFszXSA9IHN1bTMyXzModGhpcy5oWzRdLCBBLCBCaCk7XG4gIHRoaXMuaFs0XSA9IHN1bTMyXzModGhpcy5oWzBdLCBCLCBDaCk7XG4gIHRoaXMuaFswXSA9IFQ7XG59O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLCAnbGl0dGxlJyk7XG59O1xuXG5mdW5jdGlvbiBmKGosIHgsIHksIHopIHtcbiAgaWYgKGogPD0gMTUpXG4gICAgcmV0dXJuIHggXiB5IF4gejtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gKHggJiB5KSB8ICgofngpICYgeik7XG4gIGVsc2UgaWYgKGogPD0gNDcpXG4gICAgcmV0dXJuICh4IHwgKH55KSkgXiB6O1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAoeCAmIHopIHwgKHkgJiAofnopKTtcbiAgZWxzZVxuICAgIHJldHVybiB4IF4gKHkgfCAofnopKTtcbn1cblxuZnVuY3Rpb24gSyhqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDAwMDAwMDAwO1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVhODI3OTk5O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZlZDllYmExO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDhmMWJiY2RjO1xuICBlbHNlXG4gICAgcmV0dXJuIDB4YTk1M2ZkNGU7XG59XG5cbmZ1bmN0aW9uIEtoKGopIHtcbiAgaWYgKGogPD0gMTUpXG4gICAgcmV0dXJuIDB4NTBhMjhiZTY7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuIDB4NWM0ZGQxMjQ7XG4gIGVsc2UgaWYgKGogPD0gNDcpXG4gICAgcmV0dXJuIDB4NmQ3MDNlZjM7XG4gIGVsc2UgaWYgKGogPD0gNjMpXG4gICAgcmV0dXJuIDB4N2E2ZDc2ZTk7XG4gIGVsc2VcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbn1cblxudmFyIHIgPSBbXG4gIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsXG4gIDcsIDQsIDEzLCAxLCAxMCwgNiwgMTUsIDMsIDEyLCAwLCA5LCA1LCAyLCAxNCwgMTEsIDgsXG4gIDMsIDEwLCAxNCwgNCwgOSwgMTUsIDgsIDEsIDIsIDcsIDAsIDYsIDEzLCAxMSwgNSwgMTIsXG4gIDEsIDksIDExLCAxMCwgMCwgOCwgMTIsIDQsIDEzLCAzLCA3LCAxNSwgMTQsIDUsIDYsIDIsXG4gIDQsIDAsIDUsIDksIDcsIDEyLCAyLCAxMCwgMTQsIDEsIDMsIDgsIDExLCA2LCAxNSwgMTNcbl07XG5cbnZhciByaCA9IFtcbiAgNSwgMTQsIDcsIDAsIDksIDIsIDExLCA0LCAxMywgNiwgMTUsIDgsIDEsIDEwLCAzLCAxMixcbiAgNiwgMTEsIDMsIDcsIDAsIDEzLCA1LCAxMCwgMTQsIDE1LCA4LCAxMiwgNCwgOSwgMSwgMixcbiAgMTUsIDUsIDEsIDMsIDcsIDE0LCA2LCA5LCAxMSwgOCwgMTIsIDIsIDEwLCAwLCA0LCAxMyxcbiAgOCwgNiwgNCwgMSwgMywgMTEsIDE1LCAwLCA1LCAxMiwgMiwgMTMsIDksIDcsIDEwLCAxNCxcbiAgMTIsIDE1LCAxMCwgNCwgMSwgNSwgOCwgNywgNiwgMiwgMTMsIDE0LCAwLCAzLCA5LCAxMVxuXTtcblxudmFyIHMgPSBbXG4gIDExLCAxNCwgMTUsIDEyLCA1LCA4LCA3LCA5LCAxMSwgMTMsIDE0LCAxNSwgNiwgNywgOSwgOCxcbiAgNywgNiwgOCwgMTMsIDExLCA5LCA3LCAxNSwgNywgMTIsIDE1LCA5LCAxMSwgNywgMTMsIDEyLFxuICAxMSwgMTMsIDYsIDcsIDE0LCA5LCAxMywgMTUsIDE0LCA4LCAxMywgNiwgNSwgMTIsIDcsIDUsXG4gIDExLCAxMiwgMTQsIDE1LCAxNCwgMTUsIDksIDgsIDksIDE0LCA1LCA2LCA4LCA2LCA1LCAxMixcbiAgOSwgMTUsIDUsIDExLCA2LCA4LCAxMywgMTIsIDUsIDEyLCAxMywgMTQsIDExLCA4LCA1LCA2XG5dO1xuXG52YXIgc2ggPSBbXG4gIDgsIDksIDksIDExLCAxMywgMTUsIDE1LCA1LCA3LCA3LCA4LCAxMSwgMTQsIDE0LCAxMiwgNixcbiAgOSwgMTMsIDE1LCA3LCAxMiwgOCwgOSwgMTEsIDcsIDcsIDEyLCA3LCA2LCAxNSwgMTMsIDExLFxuICA5LCA3LCAxNSwgMTEsIDgsIDYsIDYsIDE0LCAxMiwgMTMsIDUsIDE0LCAxMywgMTMsIDcsIDUsXG4gIDE1LCA1LCA4LCAxMSwgMTQsIDE0LCA2LCAxNCwgNiwgOSwgMTIsIDksIDEyLCA1LCAxNSwgOCxcbiAgOCwgNSwgMTIsIDksIDEyLCA1LCAxNCwgNiwgOCwgMTMsIDYsIDUsIDE1LCAxMywgMTEsIDExXG5dO1xuIiwidmFyIGhhc2ggPSByZXF1aXJlKCcuLi9oYXNoJyk7XG52YXIgdXRpbHMgPSBoYXNoLnV0aWxzO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcblxudmFyIHJvdHIzMiA9IHV0aWxzLnJvdHIzMjtcbnZhciByb3RsMzIgPSB1dGlscy5yb3RsMzI7XG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcbnZhciBCbG9ja0hhc2ggPSBoYXNoLmNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxudmFyIHNoYTUxMl9LID0gW1xuICAweDQyOGEyZjk4LCAweGQ3MjhhZTIyLCAweDcxMzc0NDkxLCAweDIzZWY2NWNkLFxuICAweGI1YzBmYmNmLCAweGVjNGQzYjJmLCAweGU5YjVkYmE1LCAweDgxODlkYmJjLFxuICAweDM5NTZjMjViLCAweGYzNDhiNTM4LCAweDU5ZjExMWYxLCAweGI2MDVkMDE5LFxuICAweDkyM2Y4MmE0LCAweGFmMTk0ZjliLCAweGFiMWM1ZWQ1LCAweGRhNmQ4MTE4LFxuICAweGQ4MDdhYTk4LCAweGEzMDMwMjQyLCAweDEyODM1YjAxLCAweDQ1NzA2ZmJlLFxuICAweDI0MzE4NWJlLCAweDRlZTRiMjhjLCAweDU1MGM3ZGMzLCAweGQ1ZmZiNGUyLFxuICAweDcyYmU1ZDc0LCAweGYyN2I4OTZmLCAweDgwZGViMWZlLCAweDNiMTY5NmIxLFxuICAweDliZGMwNmE3LCAweDI1YzcxMjM1LCAweGMxOWJmMTc0LCAweGNmNjkyNjk0LFxuICAweGU0OWI2OWMxLCAweDllZjE0YWQyLCAweGVmYmU0Nzg2LCAweDM4NGYyNWUzLFxuICAweDBmYzE5ZGM2LCAweDhiOGNkNWI1LCAweDI0MGNhMWNjLCAweDc3YWM5YzY1LFxuICAweDJkZTkyYzZmLCAweDU5MmIwMjc1LCAweDRhNzQ4NGFhLCAweDZlYTZlNDgzLFxuICAweDVjYjBhOWRjLCAweGJkNDFmYmQ0LCAweDc2Zjk4OGRhLCAweDgzMTE1M2I1LFxuICAweDk4M2U1MTUyLCAweGVlNjZkZmFiLCAweGE4MzFjNjZkLCAweDJkYjQzMjEwLFxuICAweGIwMDMyN2M4LCAweDk4ZmIyMTNmLCAweGJmNTk3ZmM3LCAweGJlZWYwZWU0LFxuICAweGM2ZTAwYmYzLCAweDNkYTg4ZmMyLCAweGQ1YTc5MTQ3LCAweDkzMGFhNzI1LFxuICAweDA2Y2E2MzUxLCAweGUwMDM4MjZmLCAweDE0MjkyOTY3LCAweDBhMGU2ZTcwLFxuICAweDI3YjcwYTg1LCAweDQ2ZDIyZmZjLCAweDJlMWIyMTM4LCAweDVjMjZjOTI2LFxuICAweDRkMmM2ZGZjLCAweDVhYzQyYWVkLCAweDUzMzgwZDEzLCAweDlkOTViM2RmLFxuICAweDY1MGE3MzU0LCAweDhiYWY2M2RlLCAweDc2NmEwYWJiLCAweDNjNzdiMmE4LFxuICAweDgxYzJjOTJlLCAweDQ3ZWRhZWU2LCAweDkyNzIyYzg1LCAweDE0ODIzNTNiLFxuICAweGEyYmZlOGExLCAweDRjZjEwMzY0LCAweGE4MWE2NjRiLCAweGJjNDIzMDAxLFxuICAweGMyNGI4YjcwLCAweGQwZjg5NzkxLCAweGM3NmM1MWEzLCAweDA2NTRiZTMwLFxuICAweGQxOTJlODE5LCAweGQ2ZWY1MjE4LCAweGQ2OTkwNjI0LCAweDU1NjVhOTEwLFxuICAweGY0MGUzNTg1LCAweDU3NzEyMDJhLCAweDEwNmFhMDcwLCAweDMyYmJkMWI4LFxuICAweDE5YTRjMTE2LCAweGI4ZDJkMGM4LCAweDFlMzc2YzA4LCAweDUxNDFhYjUzLFxuICAweDI3NDg3NzRjLCAweGRmOGVlYjk5LCAweDM0YjBiY2I1LCAweGUxOWI0OGE4LFxuICAweDM5MWMwY2IzLCAweGM1Yzk1YTYzLCAweDRlZDhhYTRhLCAweGUzNDE4YWNiLFxuICAweDViOWNjYTRmLCAweDc3NjNlMzczLCAweDY4MmU2ZmYzLCAweGQ2YjJiOGEzLFxuICAweDc0OGY4MmVlLCAweDVkZWZiMmZjLCAweDc4YTU2MzZmLCAweDQzMTcyZjYwLFxuICAweDg0Yzg3ODE0LCAweGExZjBhYjcyLCAweDhjYzcwMjA4LCAweDFhNjQzOWVjLFxuICAweDkwYmVmZmZhLCAweDIzNjMxZTI4LCAweGE0NTA2Y2ViLCAweGRlODJiZGU5LFxuICAweGJlZjlhM2Y3LCAweGIyYzY3OTE1LCAweGM2NzE3OGYyLCAweGUzNzI1MzJiLFxuICAweGNhMjczZWNlLCAweGVhMjY2MTljLCAweGQxODZiOGM3LCAweDIxYzBjMjA3LFxuICAweGVhZGE3ZGQ2LCAweGNkZTBlYjFlLCAweGY1N2Q0ZjdmLCAweGVlNmVkMTc4LFxuICAweDA2ZjA2N2FhLCAweDcyMTc2ZmJhLCAweDBhNjM3ZGM1LCAweGEyYzg5OGE2LFxuICAweDExM2Y5ODA0LCAweGJlZjkwZGFlLCAweDFiNzEwYjM1LCAweDEzMWM0NzFiLFxuICAweDI4ZGI3N2Y1LCAweDIzMDQ3ZDg0LCAweDMyY2FhYjdiLCAweDQwYzcyNDkzLFxuICAweDNjOWViZTBhLCAweDE1YzliZWJjLCAweDQzMWQ2N2M0LCAweDljMTAwZDRjLFxuICAweDRjYzVkNGJlLCAweGNiM2U0MmI2LCAweDU5N2YyOTljLCAweGZjNjU3ZTJhLFxuICAweDVmY2I2ZmFiLCAweDNhZDZmYWVjLCAweDZjNDQxOThjLCAweDRhNDc1ODE3XG5dO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEEyNTYoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyNTYpKVxuICAgIHJldHVybiBuZXcgU0hBMjU2KCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFsgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAgICAgICAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5IF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xuZXhwb3J0cy5zaGEyNTYgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IFcubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgVDEgPSBzdW0zMl81KGgsIHMxXzI1NihlKSwgY2gzMihlLCBmLCBnKSwgdGhpcy5rW2ldLCBXW2ldKTtcbiAgICB2YXIgVDIgPSBzdW0zMihzMF8yNTYoYSksIG1hajMyKGEsIGIsIGMpKTtcbiAgICBoID0gZztcbiAgICBnID0gZjtcbiAgICBmID0gZTtcbiAgICBlID0gc3VtMzIoZCwgVDEpO1xuICAgIGQgPSBjO1xuICAgIGMgPSBiO1xuICAgIGIgPSBhO1xuICAgIGEgPSBzdW0zMihUMSwgVDIpO1xuICB9XG5cbiAgdGhpcy5oWzBdID0gc3VtMzIodGhpcy5oWzBdLCBhKTtcbiAgdGhpcy5oWzFdID0gc3VtMzIodGhpcy5oWzFdLCBiKTtcbiAgdGhpcy5oWzJdID0gc3VtMzIodGhpcy5oWzJdLCBjKTtcbiAgdGhpcy5oWzNdID0gc3VtMzIodGhpcy5oWzNdLCBkKTtcbiAgdGhpcy5oWzRdID0gc3VtMzIodGhpcy5oWzRdLCBlKTtcbiAgdGhpcy5oWzVdID0gc3VtMzIodGhpcy5oWzVdLCBmKTtcbiAgdGhpcy5oWzZdID0gc3VtMzIodGhpcy5oWzZdLCBnKTtcbiAgdGhpcy5oWzddID0gc3VtMzIodGhpcy5oWzddLCBoKTtcbn07XG5cblNIQTI1Ni5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG5cbmZ1bmN0aW9uIFNIQTIyNCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNIQTIyNCkpXG4gICAgcmV0dXJuIG5ldyBTSEEyMjQoKTtcblxuICBTSEEyNTYuY2FsbCh0aGlzKTtcbiAgdGhpcy5oID0gWyAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgICAgICAgICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbmV4cG9ydHMuc2hhMjI0ID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG5mdW5jdGlvbiBTSEE1MTIoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEE1MTIpKVxuICAgIHJldHVybiBuZXcgU0hBNTEyKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFsgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAgICAgICAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgICAgICAgICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgICAgICAgICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAgICAgICAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgICAgICAgICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgICAgICAgICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAgICAgICAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbmV4cG9ydHMuc2hhNTEyID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShjMF9oaSwgYzBfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgICAgICAgICAgICAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgICAgICAgICAgICAgICAgICBjM19oaSwgYzNfbG8pO1xuICAgIFdbaSArIDFdID0gc3VtNjRfNF9sbyhjMF9oaSwgYzBfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjM19oaSwgYzNfbG8pO1xuICB9XG59O1xuXG5TSEE1MTIucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiBfdXBkYXRlKG1zZywgc3RhcnQpIHtcbiAgdGhpcy5fcHJlcGFyZUJsb2NrKG1zZywgc3RhcnQpO1xuXG4gIHZhciBXID0gdGhpcy5XO1xuXG4gIHZhciBhaCA9IHRoaXMuaFswXTtcbiAgdmFyIGFsID0gdGhpcy5oWzFdO1xuICB2YXIgYmggPSB0aGlzLmhbMl07XG4gIHZhciBibCA9IHRoaXMuaFszXTtcbiAgdmFyIGNoID0gdGhpcy5oWzRdO1xuICB2YXIgY2wgPSB0aGlzLmhbNV07XG4gIHZhciBkaCA9IHRoaXMuaFs2XTtcbiAgdmFyIGRsID0gdGhpcy5oWzddO1xuICB2YXIgZWggPSB0aGlzLmhbOF07XG4gIHZhciBlbCA9IHRoaXMuaFs5XTtcbiAgdmFyIGZoID0gdGhpcy5oWzEwXTtcbiAgdmFyIGZsID0gdGhpcy5oWzExXTtcbiAgdmFyIGdoID0gdGhpcy5oWzEyXTtcbiAgdmFyIGdsID0gdGhpcy5oWzEzXTtcbiAgdmFyIGhoID0gdGhpcy5oWzE0XTtcbiAgdmFyIGhsID0gdGhpcy5oWzE1XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IFcubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgYzBfaGkgPSBoaDtcbiAgICB2YXIgYzBfbG8gPSBobDtcbiAgICB2YXIgYzFfaGkgPSBzMV81MTJfaGkoZWgsIGVsKTtcbiAgICB2YXIgYzFfbG8gPSBzMV81MTJfbG8oZWgsIGVsKTtcbiAgICB2YXIgYzJfaGkgPSBjaDY0X2hpKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjMl9sbyA9IGNoNjRfbG8oZWgsIGVsLCBmaCwgZmwsIGdoLCBnbCk7XG4gICAgdmFyIGMzX2hpID0gdGhpcy5rW2ldO1xuICAgIHZhciBjM19sbyA9IHRoaXMua1tpICsgMV07XG4gICAgdmFyIGM0X2hpID0gV1tpXTtcbiAgICB2YXIgYzRfbG8gPSBXW2kgKyAxXTtcblxuICAgIHZhciBUMV9oaSA9IHN1bTY0XzVfaGkoYzBfaGksIGMwX2xvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKGMwX2hpLCBjMF9sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGMzX2hpLCBjM19sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGM0X2hpLCBjNF9sbyk7XG5cbiAgICB2YXIgYzBfaGkgPSBzMF81MTJfaGkoYWgsIGFsKTtcbiAgICB2YXIgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICB2YXIgYzFfaGkgPSBtYWo2NF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsKTtcbiAgICB2YXIgYzFfbG8gPSBtYWo2NF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsKTtcblxuICAgIHZhciBUMl9oaSA9IHN1bTY0X2hpKGMwX2hpLCBjMF9sbywgYzFfaGksIGMxX2xvKTtcbiAgICB2YXIgVDJfbG8gPSBzdW02NF9sbyhjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG5cbiAgICBoaCA9IGdoO1xuICAgIGhsID0gZ2w7XG5cbiAgICBnaCA9IGZoO1xuICAgIGdsID0gZmw7XG5cbiAgICBmaCA9IGVoO1xuICAgIGZsID0gZWw7XG5cbiAgICBlaCA9IHN1bTY0X2hpKGRoLCBkbCwgVDFfaGksIFQxX2xvKTtcbiAgICBlbCA9IHN1bTY0X2xvKGRsLCBkbCwgVDFfaGksIFQxX2xvKTtcblxuICAgIGRoID0gY2g7XG4gICAgZGwgPSBjbDtcblxuICAgIGNoID0gYmg7XG4gICAgY2wgPSBibDtcblxuICAgIGJoID0gYWg7XG4gICAgYmwgPSBhbDtcblxuICAgIGFoID0gc3VtNjRfaGkoVDFfaGksIFQxX2xvLCBUMl9oaSwgVDJfbG8pO1xuICAgIGFsID0gc3VtNjRfbG8oVDFfaGksIFQxX2xvLCBUMl9oaSwgVDJfbG8pO1xuICB9XG5cbiAgc3VtNjQodGhpcy5oLCAwLCBhaCwgYWwpO1xuICBzdW02NCh0aGlzLmgsIDIsIGJoLCBibCk7XG4gIHN1bTY0KHRoaXMuaCwgNCwgY2gsIGNsKTtcbiAgc3VtNjQodGhpcy5oLCA2LCBkaCwgZGwpO1xuICBzdW02NCh0aGlzLmgsIDgsIGVoLCBlbCk7XG4gIHN1bTY0KHRoaXMuaCwgMTAsIGZoLCBmbCk7XG4gIHN1bTY0KHRoaXMuaCwgMTIsIGdoLCBnbCk7XG4gIHN1bTY0KHRoaXMuaCwgMTQsIGhoLCBobCk7XG59O1xuXG5TSEE1MTIucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaCwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLCAnYmlnJyk7XG59O1xuXG5mdW5jdGlvbiBTSEEzODQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEzODQpKVxuICAgIHJldHVybiBuZXcgU0hBMzg0KCk7XG5cbiAgU0hBNTEyLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFsgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAgICAgICAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgICAgICAgICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgICAgICAgICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAgICAgICAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgICAgICAgICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgICAgICAgICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAgICAgICAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5leHBvcnRzLnNoYTM4NCA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG5cbmZ1bmN0aW9uIFNIQTEoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEExKSlcbiAgICByZXR1cm4gbmV3IFNIQTEoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcbiAgdGhpcy5oID0gWyAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgICAgICAgICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbmV4cG9ydHMuc2hhMSA9IFNIQTE7XG5cblNIQTEuYmxvY2tTaXplID0gNTEyO1xuU0hBMS5vdXRTaXplID0gMTYwO1xuU0hBMS5obWFjU3RyZW5ndGggPSA4MDtcblNIQTEucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTEucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiBfdXBkYXRlKG1zZywgc3RhcnQpIHtcbiAgdmFyIFcgPSB0aGlzLlc7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKVxuICAgIFdbaV0gPSBtc2dbc3RhcnQgKyBpXTtcblxuICBmb3IoOyBpIDwgVy5sZW5ndGg7IGkrKylcbiAgICBXW2ldID0gcm90bDMyKFdbaSAtIDNdIF4gV1tpIC0gOF0gXiBXW2kgLSAxNF0gXiBXW2kgLSAxNl0sIDEpO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IFcubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcyA9IH5+KGkgLyAyMCk7XG4gICAgdmFyIHQgPSBzdW0zMl81KHJvdGwzMihhLCA1KSwgZnRfMShzLCBiLCBjLCBkKSwgZSwgV1tpXSwgc2hhMV9LW3NdKTtcbiAgICBlID0gZDtcbiAgICBkID0gYztcbiAgICBjID0gcm90bDMyKGIsIDMwKTtcbiAgICBiID0gYTtcbiAgICBhID0gdDtcbiAgfVxuXG4gIHRoaXMuaFswXSA9IHN1bTMyKHRoaXMuaFswXSwgYSk7XG4gIHRoaXMuaFsxXSA9IHN1bTMyKHRoaXMuaFsxXSwgYik7XG4gIHRoaXMuaFsyXSA9IHN1bTMyKHRoaXMuaFsyXSwgYyk7XG4gIHRoaXMuaFszXSA9IHN1bTMyKHRoaXMuaFszXSwgZCk7XG4gIHRoaXMuaFs0XSA9IHN1bTMyKHRoaXMuaFs0XSwgZSk7XG59O1xuXG5TSEExLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cblxuZnVuY3Rpb24gbWFqMzIoeCwgeSwgeikge1xuICByZXR1cm4gKHggJiB5KSBeICh4ICYgeikgXiAoeSAmIHopO1xufVxuXG5mdW5jdGlvbiBwMzIoeCwgeSwgeikge1xuICByZXR1cm4geCBeIHkgXiB6O1xufVxuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5cbmZ1bmN0aW9uIHMxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNikgXiByb3RyMzIoeCwgMTEpIF4gcm90cjMyKHgsIDI1KTtcbn1cblxuZnVuY3Rpb24gZzBfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA3KSBeIHJvdHIzMih4LCAxOCkgXiAoeCA+Pj4gMyk7XG59XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5cbmZ1bmN0aW9uIGZ0XzEocywgeCwgeSwgeikge1xuICBpZiAocyA9PT0gMClcbiAgICByZXR1cm4gY2gzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDEgfHwgcyA9PT0gMylcbiAgICByZXR1cm4gcDMyKHgsIHksIHopO1xuICBpZiAocyA9PT0gMilcbiAgICByZXR1cm4gbWFqMzIoeCwgeSwgeik7XG59XG5cbmZ1bmN0aW9uIGNoNjRfaGkoeGgsIHhsLCB5aCwgeWwsIHpoLCB6bCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICgofnhoKSAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBjaDY0X2xvKHhoLCB4bCwgeWgsIHlsLCB6aCwgemwpIHtcbiAgdmFyIHIgPSAoeGwgJiB5bCkgXiAoKH54bCkgJiB6bCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gbWFqNjRfaGkoeGgsIHhsLCB5aCwgeWwsIHpoLCB6bCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIiwidmFyIHV0aWxzID0gZXhwb3J0cztcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmZ1bmN0aW9uIHRvQXJyYXkobXNnLCBlbmMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkobXNnKSlcbiAgICByZXR1cm4gbXNnLnNsaWNlKCk7XG4gIGlmICghbXNnKVxuICAgIHJldHVybiBbXTtcbiAgdmFyIHJlcyA9IFtdO1xuICBpZiAodHlwZW9mIG1zZyA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoIWVuYykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGMgPSBtc2cuY2hhckNvZGVBdChpKTtcbiAgICAgICAgdmFyIGhpID0gYyA+PiA4O1xuICAgICAgICB2YXIgbG8gPSBjICYgMHhmZjtcbiAgICAgICAgaWYgKGhpKVxuICAgICAgICAgIHJlcy5wdXNoKGhpLCBsbyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXMucHVzaChsbyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gMilcbiAgICAgICAgcmVzLnB1c2gocGFyc2VJbnQobXNnW2ldICsgbXNnW2kgKyAxXSwgMTYpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgICByZXNbaV0gPSBtc2dbaV0gfCAwO1xuICB9XG4gIHJldHVybiByZXM7XG59XG51dGlscy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxudXRpbHMudG9IZXggPSB0b0hleDtcblxuZnVuY3Rpb24gaHRvbmwodykge1xuICB2YXIgcmVzID0gKHcgPj4+IDI0KSB8XG4gICAgICAgICAgICAoKHcgPj4+IDgpICYgMHhmZjAwKSB8XG4gICAgICAgICAgICAoKHcgPDwgOCkgJiAweGZmMDAwMCkgfFxuICAgICAgICAgICAgKCh3ICYgMHhmZikgPDwgMjQpO1xuICByZXR1cm4gcmVzID4+PiAwO1xufVxudXRpbHMuaHRvbmwgPSBodG9ubDtcblxuZnVuY3Rpb24gdG9IZXgzMihtc2csIGVuZGlhbikge1xuICB2YXIgcmVzID0gJyc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHcgPSBtc2dbaV07XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2xpdHRsZScpXG4gICAgICB3ID0gaHRvbmwodyk7XG4gICAgcmVzICs9IHplcm84KHcudG9TdHJpbmcoMTYpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxudXRpbHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG51dGlscy56ZXJvMiA9IHplcm8yO1xuXG5mdW5jdGlvbiB6ZXJvOCh3b3JkKSB7XG4gIGlmICh3b3JkLmxlbmd0aCA9PT0gNylcbiAgICByZXR1cm4gJzAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDYpXG4gICAgcmV0dXJuICcwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNSlcbiAgICByZXR1cm4gJzAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNClcbiAgICByZXR1cm4gJzAwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDMpXG4gICAgcmV0dXJuICcwMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMilcbiAgICByZXR1cm4gJzAwMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMSlcbiAgICByZXR1cm4gJzAwMDAwMDAnICsgd29yZDtcbiAgZWxzZVxuICAgIHJldHVybiB3b3JkO1xufVxudXRpbHMuemVybzggPSB6ZXJvODtcblxuZnVuY3Rpb24gam9pbjMyKG1zZywgc3RhcnQsIGVuZCwgZW5kaWFuKSB7XG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydDtcbiAgYXNzZXJ0KGxlbiAlIDQgPT09IDApO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGxlbiAvIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IHN0YXJ0OyBpIDwgcmVzLmxlbmd0aDsgaSsrLCBrICs9IDQpIHtcbiAgICB2YXIgdztcbiAgICBpZiAoZW5kaWFuID09PSAnYmlnJylcbiAgICAgIHcgPSAobXNnW2tdIDw8IDI0KSB8IChtc2dbayArIDFdIDw8IDE2KSB8IChtc2dbayArIDJdIDw8IDgpIHwgbXNnW2sgKyAzXTtcbiAgICBlbHNlXG4gICAgICB3ID0gKG1zZ1trICsgM10gPDwgMjQpIHwgKG1zZ1trICsgMl0gPDwgMTYpIHwgKG1zZ1trICsgMV0gPDwgOCkgfCBtc2dba107XG4gICAgcmVzW2ldID0gdyA+Pj4gMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxudXRpbHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxudXRpbHMuc3BsaXQzMiA9IHNwbGl0MzI7XG5cbmZ1bmN0aW9uIHJvdHIzMih3LCBiKSB7XG4gIHJldHVybiAodyA+Pj4gYikgfCAodyA8PCAoMzIgLSBiKSk7XG59XG51dGlscy5yb3RyMzIgPSByb3RyMzI7XG5cbmZ1bmN0aW9uIHJvdGwzMih3LCBiKSB7XG4gIHJldHVybiAodyA8PCBiKSB8ICh3ID4+PiAoMzIgLSBiKSk7XG59XG51dGlscy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG51dGlscy5zdW0zMiA9IHN1bTMyO1xuXG5mdW5jdGlvbiBzdW0zMl8zKGEsIGIsIGMpIHtcbiAgcmV0dXJuIChhICsgYiArIGMpID4+PiAwO1xufVxudXRpbHMuc3VtMzJfMyA9IHN1bTMyXzM7XG5cbmZ1bmN0aW9uIHN1bTMyXzQoYSwgYiwgYywgZCkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQpID4+PiAwO1xufVxudXRpbHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbnV0aWxzLnN1bTMyXzUgPSBzdW0zMl81O1xuXG5mdW5jdGlvbiBhc3NlcnQoY29uZCwgbXNnKSB7XG4gIGlmICghY29uZClcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICdBc3NlcnRpb24gZmFpbGVkJyk7XG59XG51dGlscy5hc3NlcnQgPSBhc3NlcnQ7XG5cbnV0aWxzLmluaGVyaXRzID0gaW5oZXJpdHM7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59O1xuZXhwb3J0cy5zdW02NF9oaSA9IHN1bTY0X2hpO1xuXG5mdW5jdGlvbiBzdW02NF9sbyhhaCwgYWwsIGJoLCBibCkge1xuICB2YXIgbG8gPSBhbCArIGJsO1xuICByZXR1cm4gbG8gPj4+IDA7XG59O1xuZXhwb3J0cy5zdW02NF9sbyA9IHN1bTY0X2xvO1xuXG5mdW5jdGlvbiBzdW02NF80X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCkge1xuICB2YXIgY2FycnkgPSAwO1xuICB2YXIgbG8gPSBhbDtcbiAgbG8gPSAobG8gKyBibCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgYWwgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBjbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgY2wgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBkbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgZGwgPyAxIDogMDtcblxuICB2YXIgaGkgPSBhaCArIGJoICsgY2ggKyBkaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59O1xuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn07XG5leHBvcnRzLnN1bTY0XzRfbG8gPSBzdW02NF80X2xvO1xuXG5mdW5jdGlvbiBzdW02NF81X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBjYXJyeSA9IDA7XG4gIHZhciBsbyA9IGFsO1xuICBsbyA9IChsbyArIGJsKSA+Pj4gMDtcbiAgY2FycnkgKz0gbG8gPCBhbCA/IDEgOiAwO1xuICBsbyA9IChsbyArIGNsKSA+Pj4gMDtcbiAgY2FycnkgKz0gbG8gPCBjbCA/IDEgOiAwO1xuICBsbyA9IChsbyArIGRsKSA+Pj4gMDtcbiAgY2FycnkgKz0gbG8gPCBkbCA/IDEgOiAwO1xuICBsbyA9IChsbyArIGVsKSA+Pj4gMDtcbiAgY2FycnkgKz0gbG8gPCBlbCA/IDEgOiAwO1xuXG4gIHZhciBoaSA9IGFoICsgYmggKyBjaCArIGRoICsgZWggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufTtcbmV4cG9ydHMuc3VtNjRfNV9oaSA9IHN1bTY0XzVfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0XzVfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGwgKyBlbDtcblxuICByZXR1cm4gbG8gPj4+IDA7XG59O1xuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn07XG5leHBvcnRzLnJvdHI2NF9oaSA9IHJvdHI2NF9oaTtcblxuZnVuY3Rpb24gcm90cjY0X2xvKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFoIDw8ICgzMiAtIG51bSkpIHwgKGFsID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn07XG5leHBvcnRzLnJvdHI2NF9sbyA9IHJvdHI2NF9sbztcblxuZnVuY3Rpb24gc2hyNjRfaGkoYWgsIGFsLCBudW0pIHtcbiAgcmV0dXJuIGFoID4+PiBudW07XG59O1xuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59O1xuZXhwb3J0cy5zaHI2NF9sbyA9IHNocjY0X2xvO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzaCA9IHJlcXVpcmUoJ2hhc2guanMnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbmZ1bmN0aW9uIEhtYWNEUkJHKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEhtYWNEUkJHKSlcbiAgICByZXR1cm4gbmV3IEhtYWNEUkJHKG9wdGlvbnMpO1xuICB0aGlzLmhhc2ggPSBvcHRpb25zLmhhc2g7XG4gIHRoaXMucHJlZFJlc2lzdCA9ICEhb3B0aW9ucy5wcmVkUmVzaXN0O1xuXG4gIHRoaXMub3V0TGVuID0gdGhpcy5oYXNoLm91dFNpemU7XG4gIHRoaXMubWluRW50cm9weSA9IG9wdGlvbnMubWluRW50cm9weSB8fCB0aGlzLmhhc2guaG1hY1N0cmVuZ3RoO1xuXG4gIHRoaXMucmVzZWVkID0gbnVsbDtcbiAgdGhpcy5yZXNlZWRJbnRlcnZhbCA9IG51bGw7XG4gIHRoaXMuSyA9IG51bGw7XG4gIHRoaXMuViA9IG51bGw7XG5cbiAgdmFyIGVudHJvcHkgPSB1dGlscy50b0FycmF5KG9wdGlvbnMuZW50cm9weSwgb3B0aW9ucy5lbnRyb3B5RW5jIHx8ICdoZXgnKTtcbiAgdmFyIG5vbmNlID0gdXRpbHMudG9BcnJheShvcHRpb25zLm5vbmNlLCBvcHRpb25zLm5vbmNlRW5jIHx8ICdoZXgnKTtcbiAgdmFyIHBlcnMgPSB1dGlscy50b0FycmF5KG9wdGlvbnMucGVycywgb3B0aW9ucy5wZXJzRW5jIHx8ICdoZXgnKTtcbiAgYXNzZXJ0KGVudHJvcHkubGVuZ3RoID49ICh0aGlzLm1pbkVudHJvcHkgLyA4KSxcbiAgICAgICAgICdOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICcgKyB0aGlzLm1pbkVudHJvcHkgKyAnIGJpdHMnKTtcbiAgdGhpcy5faW5pdChlbnRyb3B5LCBub25jZSwgcGVycyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEhtYWNEUkJHO1xuXG5IbWFjRFJCRy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGVudHJvcHksIG5vbmNlLCBwZXJzKSB7XG4gIHZhciBzZWVkID0gZW50cm9weS5jb25jYXQobm9uY2UpLmNvbmNhdChwZXJzKTtcblxuICB0aGlzLksgPSBuZXcgQXJyYXkodGhpcy5vdXRMZW4gLyA4KTtcbiAgdGhpcy5WID0gbmV3IEFycmF5KHRoaXMub3V0TGVuIC8gOCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5WLmxlbmd0aDsgaSsrKSB7XG4gICAgdGhpcy5LW2ldID0gMHgwMDtcbiAgICB0aGlzLlZbaV0gPSAweDAxO1xuICB9XG5cbiAgdGhpcy5fdXBkYXRlKHNlZWQpO1xuICB0aGlzLnJlc2VlZCA9IDE7XG4gIHRoaXMucmVzZWVkSW50ZXJ2YWwgPSAweDEwMDAwMDAwMDAwMDA7ICAvLyAyXjQ4XG59O1xuXG5IbWFjRFJCRy5wcm90b3R5cGUuX2htYWMgPSBmdW5jdGlvbiBobWFjKCkge1xuICByZXR1cm4gbmV3IGhhc2guaG1hYyh0aGlzLmhhc2gsIHRoaXMuSyk7XG59O1xuXG5IbWFjRFJCRy5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShzZWVkKSB7XG4gIHZhciBrbWFjID0gdGhpcy5faG1hYygpXG4gICAgICAgICAgICAgICAgIC51cGRhdGUodGhpcy5WKVxuICAgICAgICAgICAgICAgICAudXBkYXRlKFsgMHgwMCBdKTtcbiAgaWYgKHNlZWQpXG4gICAga21hYyA9IGttYWMudXBkYXRlKHNlZWQpO1xuICB0aGlzLksgPSBrbWFjLmRpZ2VzdCgpO1xuICB0aGlzLlYgPSB0aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCk7XG4gIGlmICghc2VlZClcbiAgICByZXR1cm47XG5cbiAgdGhpcy5LID0gdGhpcy5faG1hYygpXG4gICAgICAgICAgICAgICAudXBkYXRlKHRoaXMuVilcbiAgICAgICAgICAgICAgIC51cGRhdGUoWyAweDAxIF0pXG4gICAgICAgICAgICAgICAudXBkYXRlKHNlZWQpXG4gICAgICAgICAgICAgICAuZGlnZXN0KCk7XG4gIHRoaXMuViA9IHRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKTtcbn07XG5cbkhtYWNEUkJHLnByb3RvdHlwZS5yZXNlZWQgPSBmdW5jdGlvbiByZXNlZWQoZW50cm9weSwgZW50cm9weUVuYywgYWRkLCBhZGRFbmMpIHtcbiAgLy8gT3B0aW9uYWwgZW50cm9weSBlbmNcbiAgaWYgKHR5cGVvZiBlbnRyb3B5RW5jICE9PSAnc3RyaW5nJykge1xuICAgIGFkZEVuYyA9IGFkZDtcbiAgICBhZGQgPSBlbnRyb3B5RW5jO1xuICAgIGVudHJvcHlFbmMgPSBudWxsO1xuICB9XG5cbiAgZW50cm9weSA9IHV0aWxzLnRvQXJyYXkoZW50cm9weSwgZW50cm9weUVuYyk7XG4gIGFkZCA9IHV0aWxzLnRvQXJyYXkoYWRkLCBhZGRFbmMpO1xuXG4gIGFzc2VydChlbnRyb3B5Lmxlbmd0aCA+PSAodGhpcy5taW5FbnRyb3B5IC8gOCksXG4gICAgICAgICAnTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAnICsgdGhpcy5taW5FbnRyb3B5ICsgJyBiaXRzJyk7XG5cbiAgdGhpcy5fdXBkYXRlKGVudHJvcHkuY29uY2F0KGFkZCB8fCBbXSkpO1xuICB0aGlzLnJlc2VlZCA9IDE7XG59O1xuXG5IbWFjRFJCRy5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiBnZW5lcmF0ZShsZW4sIGVuYywgYWRkLCBhZGRFbmMpIHtcbiAgaWYgKHRoaXMucmVzZWVkID4gdGhpcy5yZXNlZWRJbnRlcnZhbClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc2VlZCBpcyByZXF1aXJlZCcpO1xuXG4gIC8vIE9wdGlvbmFsIGVuY29kaW5nXG4gIGlmICh0eXBlb2YgZW5jICE9PSAnc3RyaW5nJykge1xuICAgIGFkZEVuYyA9IGFkZDtcbiAgICBhZGQgPSBlbmM7XG4gICAgZW5jID0gbnVsbDtcbiAgfVxuXG4gIC8vIE9wdGlvbmFsIGFkZGl0aW9uYWwgZGF0YVxuICBpZiAoYWRkKSB7XG4gICAgYWRkID0gdXRpbHMudG9BcnJheShhZGQsIGFkZEVuYyB8fCAnaGV4Jyk7XG4gICAgdGhpcy5fdXBkYXRlKGFkZCk7XG4gIH1cblxuICB2YXIgdGVtcCA9IFtdO1xuICB3aGlsZSAodGVtcC5sZW5ndGggPCBsZW4pIHtcbiAgICB0aGlzLlYgPSB0aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCk7XG4gICAgdGVtcCA9IHRlbXAuY29uY2F0KHRoaXMuVik7XG4gIH1cblxuICB2YXIgcmVzID0gdGVtcC5zbGljZSgwLCBsZW4pO1xuICB0aGlzLl91cGRhdGUoYWRkKTtcbiAgdGhpcy5yZXNlZWQrKztcbiAgcmV0dXJuIHV0aWxzLmVuY29kZShyZXMsIGVuYyk7XG59O1xuIiwiZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IG0gKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCJcbnZhciBpbmRleE9mID0gW10uaW5kZXhPZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihhcnIsIG9iail7XG4gIGlmIChpbmRleE9mKSByZXR1cm4gYXJyLmluZGV4T2Yob2JqKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoYXJyW2ldID09PSBvYmopIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn07IiwiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICB9XG59XG4iLCIvKiFcbiAqIERldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYSBCdWZmZXJcbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuXG4vLyBUaGUgX2lzQnVmZmVyIGNoZWNrIGlzIGZvciBTYWZhcmkgNS03IHN1cHBvcnQsIGJlY2F1c2UgaXQncyBtaXNzaW5nXG4vLyBPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLiBSZW1vdmUgdGhpcyBldmVudHVhbGx5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIChpc0J1ZmZlcihvYmopIHx8IGlzU2xvd0J1ZmZlcihvYmopIHx8ICEhb2JqLl9pc0J1ZmZlcilcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xuICByZXR1cm4gISFvYmouY29uc3RydWN0b3IgJiYgdHlwZW9mIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIob2JqKVxufVxuXG4vLyBGb3IgTm9kZSB2MC4xMCBzdXBwb3J0LiBSZW1vdmUgdGhpcyBldmVudHVhbGx5LlxuZnVuY3Rpb24gaXNTbG93QnVmZmVyIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmoucmVhZEZsb2F0TEUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zbGljZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0J1ZmZlcihvYmouc2xpY2UoMCwgMCkpXG59XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgdXNlckFnZW50ID0gZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnVzZXJBZ2VudDtcbnZhciBpc1J1bm5pbmdJbklFID0gdXNlckFnZW50ICYmIHVzZXJBZ2VudC5pbmRleE9mKFwiTVNJRSBcIikgPiAtMTtcblxuLy8gTWFrZSBwcm9wZXJ0aWVzIHdyaXRhYmxlIGluIElFLCBhcyBwZXJcbi8vIGh0dHA6Ly93d3cuYWRlcXVhdGVseWdvb2QuY29tL1JlcGxhY2luZy1zZXRUaW1lb3V0LUdsb2JhbGx5Lmh0bWxcbmlmIChpc1J1bm5pbmdJbklFKSB7XG4gICAgZ2xvYmFsLnNldFRpbWVvdXQgPSBnbG9iYWwuc2V0VGltZW91dDtcbiAgICBnbG9iYWwuY2xlYXJUaW1lb3V0ID0gZ2xvYmFsLmNsZWFyVGltZW91dDtcbiAgICBnbG9iYWwuc2V0SW50ZXJ2YWwgPSBnbG9iYWwuc2V0SW50ZXJ2YWw7XG4gICAgZ2xvYmFsLmNsZWFySW50ZXJ2YWwgPSBnbG9iYWwuY2xlYXJJbnRlcnZhbDtcbiAgICBnbG9iYWwuRGF0ZSA9IGdsb2JhbC5EYXRlO1xufVxuXG4vLyBzZXRJbW1lZGlhdGUgaXMgbm90IGEgc3RhbmRhcmQgZnVuY3Rpb25cbi8vIGF2b2lkIGFkZGluZyB0aGUgcHJvcCB0byB0aGUgd2luZG93IG9iamVjdCBpZiBub3QgcHJlc2VudFxuaWYgKGdsb2JhbC5zZXRJbW1lZGlhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgIGdsb2JhbC5zZXRJbW1lZGlhdGUgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xuICAgIGdsb2JhbC5jbGVhckltbWVkaWF0ZSA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbn1cblxuLy8gbm9kZSBleHBlY3RzIHNldFRpbWVvdXQvc2V0SW50ZXJ2YWwgdG8gcmV0dXJuIGEgZm4gb2JqZWN0IHcvIC5yZWYoKS8udW5yZWYoKVxuLy8gYnJvd3NlcnMsIGEgbnVtYmVyLlxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jam9oYW5zZW4vU2lub24uSlMvcHVsbC80MzZcblxudmFyIE5PT1AgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB1bmRlZmluZWQ7IH07XG52YXIgdGltZW91dFJlc3VsdCA9IHNldFRpbWVvdXQoTk9PUCwgMCk7XG52YXIgYWRkVGltZXJSZXR1cm5zT2JqZWN0ID0gdHlwZW9mIHRpbWVvdXRSZXN1bHQgPT09IFwib2JqZWN0XCI7XG52YXIgaHJ0aW1lUHJlc2VudCA9IChnbG9iYWwucHJvY2VzcyAmJiB0eXBlb2YgZ2xvYmFsLnByb2Nlc3MuaHJ0aW1lID09PSBcImZ1bmN0aW9uXCIpO1xuY2xlYXJUaW1lb3V0KHRpbWVvdXRSZXN1bHQpO1xuXG52YXIgTmF0aXZlRGF0ZSA9IERhdGU7XG52YXIgdW5pcXVlVGltZXJJZCA9IDE7XG5cbi8qKlxuICogUGFyc2Ugc3RyaW5ncyBsaWtlIFwiMDE6MTA6MDBcIiAobWVhbmluZyAxIGhvdXIsIDEwIG1pbnV0ZXMsIDAgc2Vjb25kcykgaW50b1xuICogbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gVGhpcyBpcyB1c2VkIHRvIHN1cHBvcnQgaHVtYW4tcmVhZGFibGUgc3RyaW5ncyBwYXNzZWRcbiAqIHRvIGNsb2NrLnRpY2soKVxuICovXG5mdW5jdGlvbiBwYXJzZVRpbWUoc3RyKSB7XG4gICAgaWYgKCFzdHIpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgdmFyIHN0cmluZ3MgPSBzdHIuc3BsaXQoXCI6XCIpO1xuICAgIHZhciBsID0gc3RyaW5ncy5sZW5ndGg7XG4gICAgdmFyIGkgPSBsO1xuICAgIHZhciBtcyA9IDA7XG4gICAgdmFyIHBhcnNlZDtcblxuICAgIGlmIChsID4gMyB8fCAhL14oXFxkXFxkOil7MCwyfVxcZFxcZD8kLy50ZXN0KHN0cikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGljayBvbmx5IHVuZGVyc3RhbmRzIG51bWJlcnMsICdtOnMnIGFuZCAnaDptOnMnLiBFYWNoIHBhcnQgbXVzdCBiZSB0d28gZGlnaXRzXCIpO1xuICAgIH1cblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nc1tpXSwgMTApO1xuXG4gICAgICAgIGlmIChwYXJzZWQgPj0gNjApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdGltZSBcIiArIHN0cik7XG4gICAgICAgIH1cblxuICAgICAgICBtcyArPSBwYXJzZWQgKiBNYXRoLnBvdyg2MCwgKGwgLSBpIC0gMSkpO1xuICAgIH1cblxuICAgIHJldHVybiBtcyAqIDEwMDA7XG59XG5cbi8qKlxuICogRmxvb3IgZnVuY3Rpb24gdGhhdCBhbHNvIHdvcmtzIGZvciBuZWdhdGl2ZSBudW1iZXJzXG4gKi9cbmZ1bmN0aW9uIGZpeGVkRmxvb3Iobikge1xuICAgIHJldHVybiAobiA+PSAwID8gTWF0aC5mbG9vcihuKSA6IE1hdGguY2VpbChuKSk7XG59XG5cbi8qKlxuICogJSBvcGVyYXRvciB0aGF0IGFsc28gd29ya3MgZm9yIG5lZ2F0aXZlIG51bWJlcnNcbiAqL1xuZnVuY3Rpb24gZml4ZWRNb2R1bG8obiwgbSkge1xuICAgIHJldHVybiAoKG4gJSBtKSArIG0pICUgbTtcbn1cblxuLyoqXG4gKiBVc2VkIHRvIGdyb2sgdGhlIGBub3dgIHBhcmFtZXRlciB0byBjcmVhdGVDbG9jay5cbiAqL1xuZnVuY3Rpb24gZ2V0RXBvY2goZXBvY2gpIHtcbiAgICBpZiAoIWVwb2NoKSB7IHJldHVybiAwOyB9XG4gICAgaWYgKHR5cGVvZiBlcG9jaC5nZXRUaW1lID09PSBcImZ1bmN0aW9uXCIpIHsgcmV0dXJuIGVwb2NoLmdldFRpbWUoKTsgfVxuICAgIGlmICh0eXBlb2YgZXBvY2ggPT09IFwibnVtYmVyXCIpIHsgcmV0dXJuIGVwb2NoOyB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm5vdyBzaG91bGQgYmUgbWlsbGlzZWNvbmRzIHNpbmNlIFVOSVggZXBvY2hcIik7XG59XG5cbmZ1bmN0aW9uIGluUmFuZ2UoZnJvbSwgdG8sIHRpbWVyKSB7XG4gICAgcmV0dXJuIHRpbWVyICYmIHRpbWVyLmNhbGxBdCA+PSBmcm9tICYmIHRpbWVyLmNhbGxBdCA8PSB0bztcbn1cblxuZnVuY3Rpb24gbWlycm9yRGF0ZVByb3BlcnRpZXModGFyZ2V0LCBzb3VyY2UpIHtcbiAgICB2YXIgcHJvcDtcbiAgICBmb3IgKHByb3AgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldCBzcGVjaWFsIG5vdyBpbXBsZW1lbnRhdGlvblxuICAgIGlmIChzb3VyY2Uubm93KSB7XG4gICAgICAgIHRhcmdldC5ub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmNsb2NrLm5vdztcbiAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGFyZ2V0Lm5vdztcbiAgICB9XG5cbiAgICAvLyBzZXQgc3BlY2lhbCB0b1NvdXJjZSBpbXBsZW1lbnRhdGlvblxuICAgIGlmIChzb3VyY2UudG9Tb3VyY2UpIHtcbiAgICAgICAgdGFyZ2V0LnRvU291cmNlID0gZnVuY3Rpb24gdG9Tb3VyY2UoKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLnRvU291cmNlKCk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHRhcmdldC50b1NvdXJjZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgc3BlY2lhbCB0b1N0cmluZyBpbXBsZW1lbnRhdGlvblxuICAgIHRhcmdldC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gc291cmNlLnRvU3RyaW5nKCk7XG4gICAgfTtcblxuICAgIHRhcmdldC5wcm90b3R5cGUgPSBzb3VyY2UucHJvdG90eXBlO1xuICAgIHRhcmdldC5wYXJzZSA9IHNvdXJjZS5wYXJzZTtcbiAgICB0YXJnZXQuVVRDID0gc291cmNlLlVUQztcbiAgICB0YXJnZXQucHJvdG90eXBlLnRvVVRDU3RyaW5nID0gc291cmNlLnByb3RvdHlwZS50b1VUQ1N0cmluZztcblxuICAgIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURhdGUoKSB7XG4gICAgZnVuY3Rpb24gQ2xvY2tEYXRlKHllYXIsIG1vbnRoLCBkYXRlLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbXMpIHtcbiAgICAgICAgLy8gRGVmZW5zaXZlIGFuZCB2ZXJib3NlIHRvIGF2b2lkIHBvdGVudGlhbCBoYXJtIGluIHBhc3NpbmdcbiAgICAgICAgLy8gZXhwbGljaXQgdW5kZWZpbmVkIHdoZW4gdXNlciBkb2VzIG5vdCBwYXNzIGFyZ3VtZW50XG4gICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZShDbG9ja0RhdGUuY2xvY2subm93KTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoeWVhcik7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRlKHllYXIsIG1vbnRoKTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoeWVhciwgbW9udGgsIGRhdGUpO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSwgaG91cik7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRlKHllYXIsIG1vbnRoLCBkYXRlLCBob3VyLCBtaW51dGUpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSwgaG91ciwgbWludXRlLCBzZWNvbmQpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoeWVhciwgbW9udGgsIGRhdGUsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWlycm9yRGF0ZVByb3BlcnRpZXMoQ2xvY2tEYXRlLCBOYXRpdmVEYXRlKTtcbn1cblxuZnVuY3Rpb24gYWRkVGltZXIoY2xvY2ssIHRpbWVyKSB7XG4gICAgaWYgKHRpbWVyLmZ1bmMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayBtdXN0IGJlIHByb3ZpZGVkIHRvIHRpbWVyIGNhbGxzXCIpO1xuICAgIH1cblxuICAgIGlmICghY2xvY2sudGltZXJzKSB7XG4gICAgICAgIGNsb2NrLnRpbWVycyA9IHt9O1xuICAgIH1cblxuICAgIHRpbWVyLmlkID0gdW5pcXVlVGltZXJJZCsrO1xuICAgIHRpbWVyLmNyZWF0ZWRBdCA9IGNsb2NrLm5vdztcbiAgICB0aW1lci5jYWxsQXQgPSBjbG9jay5ub3cgKyAocGFyc2VJbnQodGltZXIuZGVsYXkpIHx8IChjbG9jay5kdXJpbmdUaWNrID8gMSA6IDApKTtcblxuICAgIGNsb2NrLnRpbWVyc1t0aW1lci5pZF0gPSB0aW1lcjtcblxuICAgIGlmIChhZGRUaW1lclJldHVybnNPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiB0aW1lci5pZCxcbiAgICAgICAgICAgIHJlZjogTk9PUCxcbiAgICAgICAgICAgIHVucmVmOiBOT09QXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRpbWVyLmlkO1xufVxuXG5cbi8qIGVzbGludCBjb25zaXN0ZW50LXJldHVybjogXCJvZmZcIiAqL1xuZnVuY3Rpb24gY29tcGFyZVRpbWVycyhhLCBiKSB7XG4gICAgLy8gU29ydCBmaXJzdCBieSBhYnNvbHV0ZSB0aW1pbmdcbiAgICBpZiAoYS5jYWxsQXQgPCBiLmNhbGxBdCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmIChhLmNhbGxBdCA+IGIuY2FsbEF0KSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIC8vIFNvcnQgbmV4dCBieSBpbW1lZGlhdGUsIGltbWVkaWF0ZSB0aW1lcnMgdGFrZSBwcmVjZWRlbmNlXG4gICAgaWYgKGEuaW1tZWRpYXRlICYmICFiLmltbWVkaWF0ZSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmICghYS5pbW1lZGlhdGUgJiYgYi5pbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgLy8gU29ydCBuZXh0IGJ5IGNyZWF0aW9uIHRpbWUsIGVhcmxpZXItY3JlYXRlZCB0aW1lcnMgdGFrZSBwcmVjZWRlbmNlXG4gICAgaWYgKGEuY3JlYXRlZEF0IDwgYi5jcmVhdGVkQXQpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBpZiAoYS5jcmVhdGVkQXQgPiBiLmNyZWF0ZWRBdCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICAvLyBTb3J0IG5leHQgYnkgaWQsIGxvd2VyLWlkIHRpbWVycyB0YWtlIHByZWNlZGVuY2VcbiAgICBpZiAoYS5pZCA8IGIuaWQpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBpZiAoYS5pZCA+IGIuaWQpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgLy8gQXMgdGltZXIgaWRzIGFyZSB1bmlxdWUsIG5vIGZhbGxiYWNrIGAwYCBpcyBuZWNlc3Nhcnlcbn1cblxuZnVuY3Rpb24gZmlyc3RUaW1lckluUmFuZ2UoY2xvY2ssIGZyb20sIHRvKSB7XG4gICAgdmFyIHRpbWVycyA9IGNsb2NrLnRpbWVycztcbiAgICB2YXIgdGltZXIgPSBudWxsO1xuICAgIHZhciBpZCwgaXNJblJhbmdlO1xuXG4gICAgZm9yIChpZCBpbiB0aW1lcnMpIHtcbiAgICAgICAgaWYgKHRpbWVycy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgIGlzSW5SYW5nZSA9IGluUmFuZ2UoZnJvbSwgdG8sIHRpbWVyc1tpZF0pO1xuXG4gICAgICAgICAgICBpZiAoaXNJblJhbmdlICYmICghdGltZXIgfHwgY29tcGFyZVRpbWVycyh0aW1lciwgdGltZXJzW2lkXSkgPT09IDEpKSB7XG4gICAgICAgICAgICAgICAgdGltZXIgPSB0aW1lcnNbaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRpbWVyO1xufVxuXG5mdW5jdGlvbiBmaXJzdFRpbWVyKGNsb2NrKSB7XG4gICAgdmFyIHRpbWVycyA9IGNsb2NrLnRpbWVycztcbiAgICB2YXIgdGltZXIgPSBudWxsO1xuICAgIHZhciBpZDtcblxuICAgIGZvciAoaWQgaW4gdGltZXJzKSB7XG4gICAgICAgIGlmICh0aW1lcnMuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgICAgICAgICBpZiAoIXRpbWVyIHx8IGNvbXBhcmVUaW1lcnModGltZXIsIHRpbWVyc1tpZF0pID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGltZXIgPSB0aW1lcnNbaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRpbWVyO1xufVxuXG5mdW5jdGlvbiBsYXN0VGltZXIoY2xvY2spIHtcbiAgICB2YXIgdGltZXJzID0gY2xvY2sudGltZXJzO1xuICAgIHZhciB0aW1lciA9IG51bGw7XG4gICAgdmFyIGlkO1xuXG4gICAgZm9yIChpZCBpbiB0aW1lcnMpIHtcbiAgICAgICAgaWYgKHRpbWVycy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgIGlmICghdGltZXIgfHwgY29tcGFyZVRpbWVycyh0aW1lciwgdGltZXJzW2lkXSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGltZXIgPSB0aW1lcnNbaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRpbWVyO1xufVxuXG5mdW5jdGlvbiBjYWxsVGltZXIoY2xvY2ssIHRpbWVyKSB7XG4gICAgdmFyIGV4Y2VwdGlvbjtcblxuICAgIGlmICh0eXBlb2YgdGltZXIuaW50ZXJ2YWwgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgY2xvY2sudGltZXJzW3RpbWVyLmlkXS5jYWxsQXQgKz0gdGltZXIuaW50ZXJ2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIGNsb2NrLnRpbWVyc1t0aW1lci5pZF07XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lci5mdW5jID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRpbWVyLmZ1bmMuYXBwbHkobnVsbCwgdGltZXIuYXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKiBlc2xpbnQgbm8tZXZhbDogXCJvZmZcIiAqL1xuICAgICAgICAgICAgZXZhbCh0aW1lci5mdW5jKTtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZXhjZXB0aW9uID0gZTtcbiAgICB9XG5cbiAgICBpZiAoIWNsb2NrLnRpbWVyc1t0aW1lci5pZF0pIHtcbiAgICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRpbWVyVHlwZSh0aW1lcikge1xuICAgIGlmICh0aW1lci5pbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuIFwiSW1tZWRpYXRlXCI7XG4gICAgfVxuICAgIGlmICh0aW1lci5pbnRlcnZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBcIkludGVydmFsXCI7XG4gICAgfVxuICAgIHJldHVybiBcIlRpbWVvdXRcIjtcbn1cblxuZnVuY3Rpb24gY2xlYXJUaW1lcihjbG9jaywgdGltZXJJZCwgdHR5cGUpIHtcbiAgICBpZiAoIXRpbWVySWQpIHtcbiAgICAgICAgLy8gbnVsbCBhcHBlYXJzIHRvIGJlIGFsbG93ZWQgaW4gbW9zdCBicm93c2VycywgYW5kIGFwcGVhcnMgdG8gYmVcbiAgICAgICAgLy8gcmVsaWVkIHVwb24gYnkgc29tZSBsaWJyYXJpZXMsIGxpa2UgQm9vdHN0cmFwIGNhcm91c2VsXG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNsb2NrLnRpbWVycykge1xuICAgICAgICBjbG9jay50aW1lcnMgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBpbiBOb2RlLCB0aW1lcklkIGlzIGFuIG9iamVjdCB3aXRoIC5yZWYoKS8udW5yZWYoKSwgYW5kXG4gICAgLy8gaXRzIC5pZCBmaWVsZCBpcyB0aGUgYWN0dWFsIHRpbWVyIGlkLlxuICAgIGlmICh0eXBlb2YgdGltZXJJZCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aW1lcklkID0gdGltZXJJZC5pZDtcbiAgICB9XG5cbiAgICBpZiAoY2xvY2sudGltZXJzLmhhc093blByb3BlcnR5KHRpbWVySWQpKSB7XG4gICAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIElEIG1hdGNoZXMgYSB0aW1lciBvZiB0aGUgY29ycmVjdCB0eXBlXG4gICAgICAgIHZhciB0aW1lciA9IGNsb2NrLnRpbWVyc1t0aW1lcklkXTtcbiAgICAgICAgaWYgKHRpbWVyVHlwZSh0aW1lcikgPT09IHR0eXBlKSB7XG4gICAgICAgICAgICBkZWxldGUgY2xvY2sudGltZXJzW3RpbWVySWRdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNsZWFyIHRpbWVyOiB0aW1lciBjcmVhdGVkIHdpdGggc2V0XCIgKyB0aW1lclR5cGUodGltZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBcIigpIGJ1dCBjbGVhcmVkIHdpdGggY2xlYXJcIiArIHR0eXBlICsgXCIoKVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gdW5pbnN0YWxsKGNsb2NrLCB0YXJnZXQpIHtcbiAgICB2YXIgbWV0aG9kLFxuICAgICAgICBpLFxuICAgICAgICBsO1xuICAgIHZhciBpbnN0YWxsZWRIclRpbWUgPSBcIl9ocnRpbWVcIjtcblxuICAgIGZvciAoaSA9IDAsIGwgPSBjbG9jay5tZXRob2RzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBtZXRob2QgPSBjbG9jay5tZXRob2RzW2ldO1xuICAgICAgICBpZiAobWV0aG9kID09PSBcImhydGltZVwiICYmIHRhcmdldC5wcm9jZXNzKSB7XG4gICAgICAgICAgICB0YXJnZXQucHJvY2Vzcy5ocnRpbWUgPSBjbG9ja1tpbnN0YWxsZWRIclRpbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRhcmdldFttZXRob2RdICYmIHRhcmdldFttZXRob2RdLmhhZE93blByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W21ldGhvZF0gPSBjbG9ja1tcIl9cIiArIG1ldGhvZF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXRbbWV0aG9kXTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChpZ25vcmUpIHsgLyogZXNsaW50IGVtcHR5LWJsb2NrOiBcIm9mZlwiICovIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXZlbnQgbXVsdGlwbGUgZXhlY3V0aW9ucyB3aGljaCB3aWxsIGNvbXBsZXRlbHkgcmVtb3ZlIHRoZXNlIHByb3BzXG4gICAgY2xvY2subWV0aG9kcyA9IFtdO1xufVxuXG5mdW5jdGlvbiBoaWphY2tNZXRob2QodGFyZ2V0LCBtZXRob2QsIGNsb2NrKSB7XG4gICAgdmFyIHByb3A7XG5cbiAgICBjbG9ja1ttZXRob2RdLmhhZE93blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwgbWV0aG9kKTtcbiAgICBjbG9ja1tcIl9cIiArIG1ldGhvZF0gPSB0YXJnZXRbbWV0aG9kXTtcblxuICAgIGlmIChtZXRob2QgPT09IFwiRGF0ZVwiKSB7XG4gICAgICAgIHZhciBkYXRlID0gbWlycm9yRGF0ZVByb3BlcnRpZXMoY2xvY2tbbWV0aG9kXSwgdGFyZ2V0W21ldGhvZF0pO1xuICAgICAgICB0YXJnZXRbbWV0aG9kXSA9IGRhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvY2tbbWV0aG9kXS5hcHBseShjbG9jaywgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBmb3IgKHByb3AgaW4gY2xvY2tbbWV0aG9kXSkge1xuICAgICAgICAgICAgaWYgKGNsb2NrW21ldGhvZF0uaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbbWV0aG9kXVtwcm9wXSA9IGNsb2NrW21ldGhvZF1bcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0YXJnZXRbbWV0aG9kXS5jbG9jayA9IGNsb2NrO1xufVxuXG52YXIgdGltZXJzID0ge1xuICAgIHNldFRpbWVvdXQ6IHNldFRpbWVvdXQsXG4gICAgY2xlYXJUaW1lb3V0OiBjbGVhclRpbWVvdXQsXG4gICAgc2V0SW1tZWRpYXRlOiBnbG9iYWwuc2V0SW1tZWRpYXRlLFxuICAgIGNsZWFySW1tZWRpYXRlOiBnbG9iYWwuY2xlYXJJbW1lZGlhdGUsXG4gICAgc2V0SW50ZXJ2YWw6IHNldEludGVydmFsLFxuICAgIGNsZWFySW50ZXJ2YWw6IGNsZWFySW50ZXJ2YWwsXG4gICAgRGF0ZTogRGF0ZVxufTtcblxuaWYgKGhydGltZVByZXNlbnQpIHtcbiAgICB0aW1lcnMuaHJ0aW1lID0gZ2xvYmFsLnByb2Nlc3MuaHJ0aW1lO1xufVxuXG52YXIga2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICB2YXIga3MgPSBbXTtcbiAgICB2YXIga2V5O1xuXG4gICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAga3MucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGtzO1xufTtcblxuZXhwb3J0cy50aW1lcnMgPSB0aW1lcnM7XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsb2NrKG5vdywgbG9vcExpbWl0KSB7XG4gICAgbG9vcExpbWl0ID0gbG9vcExpbWl0IHx8IDEwMDA7XG5cbiAgICB2YXIgY2xvY2sgPSB7XG4gICAgICAgIG5vdzogZ2V0RXBvY2gobm93KSxcbiAgICAgICAgaHJOb3c6IDAsXG4gICAgICAgIHRpbWVvdXRzOiB7fSxcbiAgICAgICAgRGF0ZTogY3JlYXRlRGF0ZSgpLFxuICAgICAgICBsb29wTGltaXQ6IGxvb3BMaW1pdFxuICAgIH07XG5cbiAgICBjbG9jay5EYXRlLmNsb2NrID0gY2xvY2s7XG5cbiAgICBjbG9jay5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gc2V0VGltZW91dChmdW5jLCB0aW1lb3V0KSB7XG4gICAgICAgIHJldHVybiBhZGRUaW1lcihjbG9jaywge1xuICAgICAgICAgICAgZnVuYzogZnVuYyxcbiAgICAgICAgICAgIGFyZ3M6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksXG4gICAgICAgICAgICBkZWxheTogdGltZW91dFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY2xvY2suY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24gY2xlYXJUaW1lb3V0KHRpbWVySWQpIHtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZXIoY2xvY2ssIHRpbWVySWQsIFwiVGltZW91dFwiKTtcbiAgICB9O1xuXG4gICAgY2xvY2suc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbiBzZXRJbnRlcnZhbChmdW5jLCB0aW1lb3V0KSB7XG4gICAgICAgIHJldHVybiBhZGRUaW1lcihjbG9jaywge1xuICAgICAgICAgICAgZnVuYzogZnVuYyxcbiAgICAgICAgICAgIGFyZ3M6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksXG4gICAgICAgICAgICBkZWxheTogdGltZW91dCxcbiAgICAgICAgICAgIGludGVydmFsOiB0aW1lb3V0XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjbG9jay5jbGVhckludGVydmFsID0gZnVuY3Rpb24gY2xlYXJJbnRlcnZhbCh0aW1lcklkKSB7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVyKGNsb2NrLCB0aW1lcklkLCBcIkludGVydmFsXCIpO1xuICAgIH07XG5cbiAgICBjbG9jay5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZnVuYykge1xuICAgICAgICByZXR1cm4gYWRkVGltZXIoY2xvY2ssIHtcbiAgICAgICAgICAgIGZ1bmM6IGZ1bmMsXG4gICAgICAgICAgICBhcmdzOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxuICAgICAgICAgICAgaW1tZWRpYXRlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjbG9jay5jbGVhckltbWVkaWF0ZSA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKHRpbWVySWQpIHtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZXIoY2xvY2ssIHRpbWVySWQsIFwiSW1tZWRpYXRlXCIpO1xuICAgIH07XG5cbiAgICBjbG9jay50aWNrID0gZnVuY3Rpb24gdGljayhtcykge1xuICAgICAgICBtcyA9IHR5cGVvZiBtcyA9PT0gXCJudW1iZXJcIiA/IG1zIDogcGFyc2VUaW1lKG1zKTtcbiAgICAgICAgdmFyIHRpY2tGcm9tID0gY2xvY2subm93O1xuICAgICAgICB2YXIgdGlja1RvID0gY2xvY2subm93ICsgbXM7XG4gICAgICAgIHZhciBwcmV2aW91cyA9IGNsb2NrLm5vdztcbiAgICAgICAgdmFyIHRpbWVyID0gZmlyc3RUaW1lckluUmFuZ2UoY2xvY2ssIHRpY2tGcm9tLCB0aWNrVG8pO1xuICAgICAgICB2YXIgb2xkTm93LCBmaXJzdEV4Y2VwdGlvbjtcblxuICAgICAgICBjbG9jay5kdXJpbmdUaWNrID0gdHJ1ZTtcblxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVIclRpbWUobmV3Tm93KSB7XG4gICAgICAgICAgICBjbG9jay5ock5vdyArPSAobmV3Tm93IC0gY2xvY2subm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlICh0aW1lciAmJiB0aWNrRnJvbSA8PSB0aWNrVG8pIHtcbiAgICAgICAgICAgIGlmIChjbG9jay50aW1lcnNbdGltZXIuaWRdKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlSHJUaW1lKHRpbWVyLmNhbGxBdCk7XG4gICAgICAgICAgICAgICAgdGlja0Zyb20gPSB0aW1lci5jYWxsQXQ7XG4gICAgICAgICAgICAgICAgY2xvY2subm93ID0gdGltZXIuY2FsbEF0O1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9sZE5vdyA9IGNsb2NrLm5vdztcbiAgICAgICAgICAgICAgICAgICAgY2FsbFRpbWVyKGNsb2NrLCB0aW1lcik7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbXBlbnNhdGUgZm9yIGFueSBzZXRTeXN0ZW1UaW1lKCkgY2FsbCBkdXJpbmcgdGltZXIgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9sZE5vdyAhPT0gY2xvY2subm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aWNrRnJvbSArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aWNrVG8gKz0gY2xvY2subm93IC0gb2xkTm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgKz0gY2xvY2subm93IC0gb2xkTm93O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBmaXJzdEV4Y2VwdGlvbiA9IGZpcnN0RXhjZXB0aW9uIHx8IGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aW1lciA9IGZpcnN0VGltZXJJblJhbmdlKGNsb2NrLCBwcmV2aW91cywgdGlja1RvKTtcbiAgICAgICAgICAgIHByZXZpb3VzID0gdGlja0Zyb207XG4gICAgICAgIH1cblxuICAgICAgICBjbG9jay5kdXJpbmdUaWNrID0gZmFsc2U7XG4gICAgICAgIHVwZGF0ZUhyVGltZSh0aWNrVG8pO1xuICAgICAgICBjbG9jay5ub3cgPSB0aWNrVG87XG5cbiAgICAgICAgaWYgKGZpcnN0RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBmaXJzdEV4Y2VwdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgfTtcblxuICAgIGNsb2NrLm5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICB2YXIgdGltZXIgPSBmaXJzdFRpbWVyKGNsb2NrKTtcbiAgICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICAgICAgcmV0dXJuIGNsb2NrLm5vdztcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb2NrLmR1cmluZ1RpY2sgPSB0cnVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY2xvY2subm93ID0gdGltZXIuY2FsbEF0O1xuICAgICAgICAgICAgY2FsbFRpbWVyKGNsb2NrLCB0aW1lcik7XG4gICAgICAgICAgICByZXR1cm4gY2xvY2subm93O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgY2xvY2suZHVyaW5nVGljayA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNsb2NrLnJ1bkFsbCA9IGZ1bmN0aW9uIHJ1bkFsbCgpIHtcbiAgICAgICAgdmFyIG51bVRpbWVycywgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNsb2NrLmxvb3BMaW1pdDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIWNsb2NrLnRpbWVycykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG51bVRpbWVycyA9IE9iamVjdC5rZXlzKGNsb2NrLnRpbWVycykubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKG51bVRpbWVycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNsb2NrLm5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFib3J0aW5nIGFmdGVyIHJ1bm5pbmcgXCIgKyBjbG9jay5sb29wTGltaXQgKyBcIiB0aW1lcnMsIGFzc3VtaW5nIGFuIGluZmluaXRlIGxvb3AhXCIpO1xuICAgIH07XG5cbiAgICBjbG9jay5ydW5Ub0xhc3QgPSBmdW5jdGlvbiBydW5Ub0xhc3QoKSB7XG4gICAgICAgIHZhciB0aW1lciA9IGxhc3RUaW1lcihjbG9jayk7XG4gICAgICAgIGlmICghdGltZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xvY2sudGljayh0aW1lci5jYWxsQXQpO1xuICAgIH07XG5cbiAgICBjbG9jay5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgICBjbG9jay50aW1lcnMgPSB7fTtcbiAgICB9O1xuXG4gICAgY2xvY2suc2V0U3lzdGVtVGltZSA9IGZ1bmN0aW9uIHNldFN5c3RlbVRpbWUoc3lzdGVtVGltZSkge1xuICAgICAgICAvLyBkZXRlcm1pbmUgdGltZSBkaWZmZXJlbmNlXG4gICAgICAgIHZhciBuZXdOb3cgPSBnZXRFcG9jaChzeXN0ZW1UaW1lKTtcbiAgICAgICAgdmFyIGRpZmZlcmVuY2UgPSBuZXdOb3cgLSBjbG9jay5ub3c7XG4gICAgICAgIHZhciBpZCwgdGltZXI7XG5cbiAgICAgICAgLy8gdXBkYXRlICdzeXN0ZW0gY2xvY2snXG4gICAgICAgIGNsb2NrLm5vdyA9IG5ld05vdztcblxuICAgICAgICAvLyB1cGRhdGUgdGltZXJzIGFuZCBpbnRlcnZhbHMgdG8ga2VlcCB0aGVtIHN0YWJsZVxuICAgICAgICBmb3IgKGlkIGluIGNsb2NrLnRpbWVycykge1xuICAgICAgICAgICAgaWYgKGNsb2NrLnRpbWVycy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IGNsb2NrLnRpbWVyc1tpZF07XG4gICAgICAgICAgICAgICAgdGltZXIuY3JlYXRlZEF0ICs9IGRpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgdGltZXIuY2FsbEF0ICs9IGRpZmZlcmVuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKGhydGltZVByZXNlbnQpIHtcbiAgICAgICAgY2xvY2suaHJ0aW1lID0gZnVuY3Rpb24gKHByZXYpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByZXYpKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9sZFNlY3MgPSAocHJldlswXSArIHByZXZbMV0gLyAxZTkpO1xuICAgICAgICAgICAgICAgIHZhciBuZXdTZWNzID0gKGNsb2NrLmhyTm93IC8gMTAwMCk7XG4gICAgICAgICAgICAgICAgdmFyIGRpZmZlcmVuY2UgPSAobmV3U2VjcyAtIG9sZFNlY3MpO1xuICAgICAgICAgICAgICAgIHZhciBzZWNzID0gZml4ZWRGbG9vcihkaWZmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICB2YXIgbmFub3NlY3MgPSBmaXhlZE1vZHVsbyhkaWZmZXJlbmNlICogMWU5LCAxZTkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIHNlY3MsXG4gICAgICAgICAgICAgICAgICAgIG5hbm9zZWNzXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgZml4ZWRGbG9vcihjbG9jay5ock5vdyAvIDEwMDApLFxuICAgICAgICAgICAgICAgIGZpeGVkTW9kdWxvKGNsb2NrLmhyTm93ICogMWU2LCAxZTkpXG4gICAgICAgICAgICBdO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBjbG9jaztcbn1cbmV4cG9ydHMuY3JlYXRlQ2xvY2sgPSBjcmVhdGVDbG9jaztcblxuZXhwb3J0cy5pbnN0YWxsID0gZnVuY3Rpb24gaW5zdGFsbCh0YXJnZXQsIG5vdywgdG9GYWtlLCBsb29wTGltaXQpIHtcbiAgICB2YXIgaSwgbDtcblxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHRvRmFrZSA9IG5vdztcbiAgICAgICAgbm93ID0gdGFyZ2V0LmdldFRpbWUoKTtcbiAgICAgICAgdGFyZ2V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICB0b0Zha2UgPSBub3c7XG4gICAgICAgIG5vdyA9IHRhcmdldDtcbiAgICAgICAgdGFyZ2V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICB0YXJnZXQgPSBnbG9iYWw7XG4gICAgfVxuXG4gICAgdmFyIGNsb2NrID0gY3JlYXRlQ2xvY2sobm93LCBsb29wTGltaXQpO1xuXG4gICAgY2xvY2sudW5pbnN0YWxsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB1bmluc3RhbGwoY2xvY2ssIHRhcmdldCk7XG4gICAgfTtcblxuICAgIGNsb2NrLm1ldGhvZHMgPSB0b0Zha2UgfHwgW107XG5cbiAgICBpZiAoY2xvY2subWV0aG9kcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY2xvY2subWV0aG9kcyA9IGtleXModGltZXJzKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwLCBsID0gY2xvY2subWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGNsb2NrLm1ldGhvZHNbaV0gPT09IFwiaHJ0aW1lXCIpIHtcbiAgICAgICAgICAgIGlmICh0YXJnZXQucHJvY2VzcyAmJiB0eXBlb2YgdGFyZ2V0LnByb2Nlc3MuaHJ0aW1lID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBoaWphY2tNZXRob2QodGFyZ2V0LnByb2Nlc3MsIGNsb2NrLm1ldGhvZHNbaV0sIGNsb2NrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhpamFja01ldGhvZCh0YXJnZXQsIGNsb2NrLm1ldGhvZHNbaV0sIGNsb2NrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbG9jaztcbn07XG4iLCJ2YXIgYm4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIGJyb3JhbmQgPSByZXF1aXJlKCdicm9yYW5kJyk7XG5cbmZ1bmN0aW9uIE1pbGxlclJhYmluKHJhbmQpIHtcbiAgdGhpcy5yYW5kID0gcmFuZCB8fCBuZXcgYnJvcmFuZC5SYW5kKCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IE1pbGxlclJhYmluO1xuXG5NaWxsZXJSYWJpbi5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocmFuZCkge1xuICByZXR1cm4gbmV3IE1pbGxlclJhYmluKHJhbmQpO1xufTtcblxuTWlsbGVyUmFiaW4ucHJvdG90eXBlLl9yYW5kID0gZnVuY3Rpb24gX3JhbmQobikge1xuICB2YXIgbGVuID0gbi5iaXRMZW5ndGgoKTtcbiAgdmFyIGJ1ZiA9IHRoaXMucmFuZC5nZW5lcmF0ZShNYXRoLmNlaWwobGVuIC8gOCkpO1xuXG4gIC8vIFNldCBsb3cgYml0c1xuICBidWZbMF0gfD0gMztcblxuICAvLyBNYXNrIGhpZ2ggYml0c1xuICB2YXIgbWFzayA9IGxlbiAmIDB4NztcbiAgaWYgKG1hc2sgIT09IDApXG4gICAgYnVmW2J1Zi5sZW5ndGggLSAxXSA+Pj0gNyAtIG1hc2s7XG5cbiAgcmV0dXJuIG5ldyBibihidWYpO1xufVxuXG5NaWxsZXJSYWJpbi5wcm90b3R5cGUudGVzdCA9IGZ1bmN0aW9uIHRlc3QobiwgaywgY2IpIHtcbiAgdmFyIGxlbiA9IG4uYml0TGVuZ3RoKCk7XG4gIHZhciByZWQgPSBibi5tb250KG4pO1xuICB2YXIgcm9uZSA9IG5ldyBibigxKS50b1JlZChyZWQpO1xuXG4gIGlmICghaylcbiAgICBrID0gTWF0aC5tYXgoMSwgKGxlbiAvIDQ4KSB8IDApO1xuXG4gIC8vIEZpbmQgZCBhbmQgcywgKG4gLSAxKSA9ICgyIF4gcykgKiBkO1xuICB2YXIgbjEgPSBuLnN1Ym4oMSk7XG4gIHZhciBuMiA9IG4xLnN1Ym4oMSk7XG4gIGZvciAodmFyIHMgPSAwOyAhbjEudGVzdG4ocyk7IHMrKykge31cbiAgdmFyIGQgPSBuLnNocm4ocyk7XG5cbiAgdmFyIHJuMSA9IG4xLnRvUmVkKHJlZCk7XG5cbiAgdmFyIHByaW1lID0gdHJ1ZTtcbiAgZm9yICg7IGsgPiAwOyBrLS0pIHtcbiAgICB2YXIgYSA9IHRoaXMuX3JhbmQobjIpO1xuICAgIGlmIChjYilcbiAgICAgIGNiKGEpO1xuXG4gICAgdmFyIHggPSBhLnRvUmVkKHJlZCkucmVkUG93KGQpO1xuICAgIGlmICh4LmNtcChyb25lKSA9PT0gMCB8fCB4LmNtcChybjEpID09PSAwKVxuICAgICAgY29udGludWU7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHM7IGkrKykge1xuICAgICAgeCA9IHgucmVkU3FyKCk7XG5cbiAgICAgIGlmICh4LmNtcChyb25lKSA9PT0gMClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKHguY21wKHJuMSkgPT09IDApXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChpID09PSBzKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHByaW1lO1xufTtcblxuTWlsbGVyUmFiaW4ucHJvdG90eXBlLmdldERpdmlzb3IgPSBmdW5jdGlvbiBnZXREaXZpc29yKG4sIGspIHtcbiAgdmFyIGxlbiA9IG4uYml0TGVuZ3RoKCk7XG4gIHZhciByZWQgPSBibi5tb250KG4pO1xuICB2YXIgcm9uZSA9IG5ldyBibigxKS50b1JlZChyZWQpO1xuXG4gIGlmICghaylcbiAgICBrID0gTWF0aC5tYXgoMSwgKGxlbiAvIDQ4KSB8IDApO1xuXG4gIC8vIEZpbmQgZCBhbmQgcywgKG4gLSAxKSA9ICgyIF4gcykgKiBkO1xuICB2YXIgbjEgPSBuLnN1Ym4oMSk7XG4gIHZhciBuMiA9IG4xLnN1Ym4oMSk7XG4gIGZvciAodmFyIHMgPSAwOyAhbjEudGVzdG4ocyk7IHMrKykge31cbiAgdmFyIGQgPSBuLnNocm4ocyk7XG5cbiAgdmFyIHJuMSA9IG4xLnRvUmVkKHJlZCk7XG5cbiAgZm9yICg7IGsgPiAwOyBrLS0pIHtcbiAgICB2YXIgYSA9IHRoaXMuX3JhbmQobjIpO1xuXG4gICAgdmFyIGcgPSBuLmdjZChhKTtcbiAgICBpZiAoZy5jbXBuKDEpICE9PSAwKVxuICAgICAgcmV0dXJuIGc7XG5cbiAgICB2YXIgeCA9IGEudG9SZWQocmVkKS5yZWRQb3coZCk7XG4gICAgaWYgKHguY21wKHJvbmUpID09PSAwIHx8IHguY21wKHJuMSkgPT09IDApXG4gICAgICBjb250aW51ZTtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgczsgaSsrKSB7XG4gICAgICB4ID0geC5yZWRTcXIoKTtcblxuICAgICAgaWYgKHguY21wKHJvbmUpID09PSAwKVxuICAgICAgICByZXR1cm4geC5mcm9tUmVkKCkuc3VibigxKS5nY2Qobik7XG4gICAgICBpZiAoeC5jbXAocm4xKSA9PT0gMClcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGkgPT09IHMpIHtcbiAgICAgIHggPSB4LnJlZFNxcigpO1xuICAgICAgcmV0dXJuIHguZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKG4pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGFzc2VydDtcblxuZnVuY3Rpb24gYXNzZXJ0KHZhbCwgbXNnKSB7XG4gIGlmICghdmFsKVxuICAgIHRocm93IG5ldyBFcnJvcihtc2cgfHwgJ0Fzc2VydGlvbiBmYWlsZWQnKTtcbn1cblxuYXNzZXJ0LmVxdWFsID0gZnVuY3Rpb24gYXNzZXJ0RXF1YWwobCwgciwgbXNnKSB7XG4gIGlmIChsICE9IHIpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAoJ0Fzc2VydGlvbiBmYWlsZWQ6ICcgKyBsICsgJyAhPSAnICsgcikpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gZXhwb3J0cztcblxuZnVuY3Rpb24gdG9BcnJheShtc2csIGVuYykge1xuICBpZiAoQXJyYXkuaXNBcnJheShtc2cpKVxuICAgIHJldHVybiBtc2cuc2xpY2UoKTtcbiAgaWYgKCFtc2cpXG4gICAgcmV0dXJuIFtdO1xuICB2YXIgcmVzID0gW107XG4gIGlmICh0eXBlb2YgbXNnICE9PSAnc3RyaW5nJykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgbXNnID0gbXNnLnJlcGxhY2UoL1teYS16MC05XSsvaWcsICcnKTtcbiAgICBpZiAobXNnLmxlbmd0aCAlIDIgIT09IDApXG4gICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpICs9IDIpXG4gICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYyA9IG1zZy5jaGFyQ29kZUF0KGkpO1xuICAgICAgdmFyIGhpID0gYyA+PiA4O1xuICAgICAgdmFyIGxvID0gYyAmIDB4ZmY7XG4gICAgICBpZiAoaGkpXG4gICAgICAgIHJlcy5wdXNoKGhpLCBsbyk7XG4gICAgICBlbHNlXG4gICAgICAgIHJlcy5wdXNoKGxvKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbnV0aWxzLnRvQXJyYXkgPSB0b0FycmF5O1xuXG5mdW5jdGlvbiB6ZXJvMih3b3JkKSB7XG4gIGlmICh3b3JkLmxlbmd0aCA9PT0gMSlcbiAgICByZXR1cm4gJzAnICsgd29yZDtcbiAgZWxzZVxuICAgIHJldHVybiB3b3JkO1xufVxudXRpbHMuemVybzIgPSB6ZXJvMjtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxudXRpbHMudG9IZXggPSB0b0hleDtcblxudXRpbHMuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKGFyciwgZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB0b0hleChhcnIpO1xuICBlbHNlXG4gICAgcmV0dXJuIGFycjtcbn07XG4iLCJleHBvcnRzLmVuZGlhbm5lc3MgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnTEUnIH07XG5cbmV4cG9ydHMuaG9zdG5hbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiBsb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uLmhvc3RuYW1lXG4gICAgfVxuICAgIGVsc2UgcmV0dXJuICcnO1xufTtcblxuZXhwb3J0cy5sb2FkYXZnID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW10gfTtcblxuZXhwb3J0cy51cHRpbWUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAwIH07XG5cbmV4cG9ydHMuZnJlZW1lbSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gTnVtYmVyLk1BWF9WQUxVRTtcbn07XG5cbmV4cG9ydHMudG90YWxtZW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIE51bWJlci5NQVhfVkFMVUU7XG59O1xuXG5leHBvcnRzLmNwdXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbXSB9O1xuXG5leHBvcnRzLnR5cGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnQnJvd3NlcicgfTtcblxuZXhwb3J0cy5yZWxlYXNlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbmF2aWdhdG9yLmFwcFZlcnNpb247XG4gICAgfVxuICAgIHJldHVybiAnJztcbn07XG5cbmV4cG9ydHMubmV0d29ya0ludGVyZmFjZXNcbj0gZXhwb3J0cy5nZXROZXR3b3JrSW50ZXJmYWNlc1xuPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7fSB9O1xuXG5leHBvcnRzLmFyY2ggPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnamF2YXNjcmlwdCcgfTtcblxuZXhwb3J0cy5wbGF0Zm9ybSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdicm93c2VyJyB9O1xuXG5leHBvcnRzLnRtcGRpciA9IGV4cG9ydHMudG1wRGlyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAnL3RtcCc7XG59O1xuXG5leHBvcnRzLkVPTCA9ICdcXG4nO1xuIiwibW9kdWxlLmV4cG9ydHM9e1wiMi4xNi44NDAuMS4xMDEuMy40LjEuMVwiOiBcImFlcy0xMjgtZWNiXCIsXG5cIjIuMTYuODQwLjEuMTAxLjMuNC4xLjJcIjogXCJhZXMtMTI4LWNiY1wiLFxuXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4zXCI6IFwiYWVzLTEyOC1vZmJcIixcblwiMi4xNi44NDAuMS4xMDEuMy40LjEuNFwiOiBcImFlcy0xMjgtY2ZiXCIsXG5cIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxXCI6IFwiYWVzLTE5Mi1lY2JcIixcblwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjJcIjogXCJhZXMtMTkyLWNiY1wiLFxuXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yM1wiOiBcImFlcy0xOTItb2ZiXCIsXG5cIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0XCI6IFwiYWVzLTE5Mi1jZmJcIixcblwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDFcIjogXCJhZXMtMjU2LWVjYlwiLFxuXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MlwiOiBcImFlcy0yNTYtY2JjXCIsXG5cIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzXCI6IFwiYWVzLTI1Ni1vZmJcIixcblwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDRcIjogXCJhZXMtMjU2LWNmYlwiXG59IiwiLy8gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9zZWxmLXNpZ25lZC9ibG9iL2doLXBhZ2VzL2xpYi9hc24xLmpzXG4vLyBGZWRvciwgeW91IGFyZSBhbWF6aW5nLlxuJ3VzZSBzdHJpY3QnXG5cbnZhciBhc24xID0gcmVxdWlyZSgnYXNuMS5qcycpXG5cbmV4cG9ydHMuY2VydGlmaWNhdGUgPSByZXF1aXJlKCcuL2NlcnRpZmljYXRlJylcblxudmFyIFJTQVByaXZhdGVLZXkgPSBhc24xLmRlZmluZSgnUlNBUHJpdmF0ZUtleScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ3ZlcnNpb24nKS5pbnQoKSxcbiAgICB0aGlzLmtleSgnbW9kdWx1cycpLmludCgpLFxuICAgIHRoaXMua2V5KCdwdWJsaWNFeHBvbmVudCcpLmludCgpLFxuICAgIHRoaXMua2V5KCdwcml2YXRlRXhwb25lbnQnKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncHJpbWUxJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3ByaW1lMicpLmludCgpLFxuICAgIHRoaXMua2V5KCdleHBvbmVudDEnKS5pbnQoKSxcbiAgICB0aGlzLmtleSgnZXhwb25lbnQyJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ2NvZWZmaWNpZW50JykuaW50KClcbiAgKVxufSlcbmV4cG9ydHMuUlNBUHJpdmF0ZUtleSA9IFJTQVByaXZhdGVLZXlcblxudmFyIFJTQVB1YmxpY0tleSA9IGFzbjEuZGVmaW5lKCdSU0FQdWJsaWNLZXknLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCdtb2R1bHVzJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3B1YmxpY0V4cG9uZW50JykuaW50KClcbiAgKVxufSlcbmV4cG9ydHMuUlNBUHVibGljS2V5ID0gUlNBUHVibGljS2V5XG5cbnZhciBQdWJsaWNLZXkgPSBhc24xLmRlZmluZSgnU3ViamVjdFB1YmxpY0tleUluZm8nLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCdhbGdvcml0aG0nKS51c2UoQWxnb3JpdGhtSWRlbnRpZmllciksXG4gICAgdGhpcy5rZXkoJ3N1YmplY3RQdWJsaWNLZXknKS5iaXRzdHIoKVxuICApXG59KVxuZXhwb3J0cy5QdWJsaWNLZXkgPSBQdWJsaWNLZXlcblxudmFyIEFsZ29yaXRobUlkZW50aWZpZXIgPSBhc24xLmRlZmluZSgnQWxnb3JpdGhtSWRlbnRpZmllcicsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ2FsZ29yaXRobScpLm9iamlkKCksXG4gICAgdGhpcy5rZXkoJ25vbmUnKS5udWxsXygpLm9wdGlvbmFsKCksXG4gICAgdGhpcy5rZXkoJ2N1cnZlJykub2JqaWQoKS5vcHRpb25hbCgpLFxuICAgIHRoaXMua2V5KCdwYXJhbXMnKS5zZXEoKS5vYmooXG4gICAgICB0aGlzLmtleSgncCcpLmludCgpLFxuICAgICAgdGhpcy5rZXkoJ3EnKS5pbnQoKSxcbiAgICAgIHRoaXMua2V5KCdnJykuaW50KClcbiAgICApLm9wdGlvbmFsKClcbiAgKVxufSlcblxudmFyIFByaXZhdGVLZXlJbmZvID0gYXNuMS5kZWZpbmUoJ1ByaXZhdGVLZXlJbmZvJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgndmVyc2lvbicpLmludCgpLFxuICAgIHRoaXMua2V5KCdhbGdvcml0aG0nKS51c2UoQWxnb3JpdGhtSWRlbnRpZmllciksXG4gICAgdGhpcy5rZXkoJ3N1YmplY3RQcml2YXRlS2V5Jykub2N0c3RyKClcbiAgKVxufSlcbmV4cG9ydHMuUHJpdmF0ZUtleSA9IFByaXZhdGVLZXlJbmZvXG52YXIgRW5jcnlwdGVkUHJpdmF0ZUtleUluZm8gPSBhc24xLmRlZmluZSgnRW5jcnlwdGVkUHJpdmF0ZUtleUluZm8nLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCdhbGdvcml0aG0nKS5zZXEoKS5vYmooXG4gICAgICB0aGlzLmtleSgnaWQnKS5vYmppZCgpLFxuICAgICAgdGhpcy5rZXkoJ2RlY3J5cHQnKS5zZXEoKS5vYmooXG4gICAgICAgIHRoaXMua2V5KCdrZGUnKS5zZXEoKS5vYmooXG4gICAgICAgICAgdGhpcy5rZXkoJ2lkJykub2JqaWQoKSxcbiAgICAgICAgICB0aGlzLmtleSgna2RlcGFyYW1zJykuc2VxKCkub2JqKFxuICAgICAgICAgICAgdGhpcy5rZXkoJ3NhbHQnKS5vY3RzdHIoKSxcbiAgICAgICAgICAgIHRoaXMua2V5KCdpdGVycycpLmludCgpXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICB0aGlzLmtleSgnY2lwaGVyJykuc2VxKCkub2JqKFxuICAgICAgICAgIHRoaXMua2V5KCdhbGdvJykub2JqaWQoKSxcbiAgICAgICAgICB0aGlzLmtleSgnaXYnKS5vY3RzdHIoKVxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICB0aGlzLmtleSgnc3ViamVjdFByaXZhdGVLZXknKS5vY3RzdHIoKVxuICApXG59KVxuXG5leHBvcnRzLkVuY3J5cHRlZFByaXZhdGVLZXkgPSBFbmNyeXB0ZWRQcml2YXRlS2V5SW5mb1xuXG52YXIgRFNBUHJpdmF0ZUtleSA9IGFzbjEuZGVmaW5lKCdEU0FQcml2YXRlS2V5JywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgndmVyc2lvbicpLmludCgpLFxuICAgIHRoaXMua2V5KCdwJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3EnKS5pbnQoKSxcbiAgICB0aGlzLmtleSgnZycpLmludCgpLFxuICAgIHRoaXMua2V5KCdwdWJfa2V5JykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3ByaXZfa2V5JykuaW50KClcbiAgKVxufSlcbmV4cG9ydHMuRFNBUHJpdmF0ZUtleSA9IERTQVByaXZhdGVLZXlcblxuZXhwb3J0cy5EU0FwYXJhbSA9IGFzbjEuZGVmaW5lKCdEU0FwYXJhbScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5pbnQoKVxufSlcblxudmFyIEVDUHJpdmF0ZUtleSA9IGFzbjEuZGVmaW5lKCdFQ1ByaXZhdGVLZXknLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCd2ZXJzaW9uJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3ByaXZhdGVLZXknKS5vY3RzdHIoKSxcbiAgICB0aGlzLmtleSgncGFyYW1ldGVycycpLm9wdGlvbmFsKCkuZXhwbGljaXQoMCkudXNlKEVDUGFyYW1ldGVycyksXG4gICAgdGhpcy5rZXkoJ3B1YmxpY0tleScpLm9wdGlvbmFsKCkuZXhwbGljaXQoMSkuYml0c3RyKClcbiAgKVxufSlcbmV4cG9ydHMuRUNQcml2YXRlS2V5ID0gRUNQcml2YXRlS2V5XG5cbnZhciBFQ1BhcmFtZXRlcnMgPSBhc24xLmRlZmluZSgnRUNQYXJhbWV0ZXJzJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLmNob2ljZSh7XG4gICAgbmFtZWRDdXJ2ZTogdGhpcy5vYmppZCgpXG4gIH0pXG59KVxuXG5leHBvcnRzLnNpZ25hdHVyZSA9IGFzbjEuZGVmaW5lKCdzaWduYXR1cmUnLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCdyJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3MnKS5pbnQoKVxuICApXG59KVxuIiwiLy8gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vUmFudGFuZW4vbm9kZS1kdGxzL2Jsb2IvMjVhN2RjODYxYmRhMzhjZmVhYzkzYTcyMzUwMGVlYTRmMGFjMmU4Ni9DZXJ0aWZpY2F0ZS5qc1xuLy8gdGhhbmtzIHRvIEBSYW50YW5lblxuXG4ndXNlIHN0cmljdCdcblxudmFyIGFzbiA9IHJlcXVpcmUoJ2FzbjEuanMnKVxuXG52YXIgVGltZSA9IGFzbi5kZWZpbmUoJ1RpbWUnLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuY2hvaWNlKHtcbiAgICB1dGNUaW1lOiB0aGlzLnV0Y3RpbWUoKSxcbiAgICBnZW5lcmFsVGltZTogdGhpcy5nZW50aW1lKClcbiAgfSlcbn0pXG5cbnZhciBBdHRyaWJ1dGVUeXBlVmFsdWUgPSBhc24uZGVmaW5lKCdBdHRyaWJ1dGVUeXBlVmFsdWUnLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCd0eXBlJykub2JqaWQoKSxcbiAgICB0aGlzLmtleSgndmFsdWUnKS5hbnkoKVxuICApXG59KVxuXG52YXIgQWxnb3JpdGhtSWRlbnRpZmllciA9IGFzbi5kZWZpbmUoJ0FsZ29yaXRobUlkZW50aWZpZXInLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCdhbGdvcml0aG0nKS5vYmppZCgpLFxuICAgIHRoaXMua2V5KCdwYXJhbWV0ZXJzJykub3B0aW9uYWwoKVxuICApXG59KVxuXG52YXIgU3ViamVjdFB1YmxpY0tleUluZm8gPSBhc24uZGVmaW5lKCdTdWJqZWN0UHVibGljS2V5SW5mbycsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ2FsZ29yaXRobScpLnVzZShBbGdvcml0aG1JZGVudGlmaWVyKSxcbiAgICB0aGlzLmtleSgnc3ViamVjdFB1YmxpY0tleScpLmJpdHN0cigpXG4gIClcbn0pXG5cbnZhciBSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lID0gYXNuLmRlZmluZSgnUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXRvZihBdHRyaWJ1dGVUeXBlVmFsdWUpXG59KVxuXG52YXIgUkROU2VxdWVuY2UgPSBhc24uZGVmaW5lKCdSRE5TZXF1ZW5jZScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXFvZihSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lKVxufSlcblxudmFyIE5hbWUgPSBhc24uZGVmaW5lKCdOYW1lJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLmNob2ljZSh7XG4gICAgcmRuU2VxdWVuY2U6IHRoaXMudXNlKFJETlNlcXVlbmNlKVxuICB9KVxufSlcblxudmFyIFZhbGlkaXR5ID0gYXNuLmRlZmluZSgnVmFsaWRpdHknLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCdub3RCZWZvcmUnKS51c2UoVGltZSksXG4gICAgdGhpcy5rZXkoJ25vdEFmdGVyJykudXNlKFRpbWUpXG4gIClcbn0pXG5cbnZhciBFeHRlbnNpb24gPSBhc24uZGVmaW5lKCdFeHRlbnNpb24nLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCdleHRuSUQnKS5vYmppZCgpLFxuICAgIHRoaXMua2V5KCdjcml0aWNhbCcpLmJvb2woKS5kZWYoZmFsc2UpLFxuICAgIHRoaXMua2V5KCdleHRuVmFsdWUnKS5vY3RzdHIoKVxuICApXG59KVxuXG52YXIgVEJTQ2VydGlmaWNhdGUgPSBhc24uZGVmaW5lKCdUQlNDZXJ0aWZpY2F0ZScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ3ZlcnNpb24nKS5leHBsaWNpdCgwKS5pbnQoKSxcbiAgICB0aGlzLmtleSgnc2VyaWFsTnVtYmVyJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3NpZ25hdHVyZScpLnVzZShBbGdvcml0aG1JZGVudGlmaWVyKSxcbiAgICB0aGlzLmtleSgnaXNzdWVyJykudXNlKE5hbWUpLFxuICAgIHRoaXMua2V5KCd2YWxpZGl0eScpLnVzZShWYWxpZGl0eSksXG4gICAgdGhpcy5rZXkoJ3N1YmplY3QnKS51c2UoTmFtZSksXG4gICAgdGhpcy5rZXkoJ3N1YmplY3RQdWJsaWNLZXlJbmZvJykudXNlKFN1YmplY3RQdWJsaWNLZXlJbmZvKSxcbiAgICB0aGlzLmtleSgnaXNzdWVyVW5pcXVlSUQnKS5pbXBsaWNpdCgxKS5iaXRzdHIoKS5vcHRpb25hbCgpLFxuICAgIHRoaXMua2V5KCdzdWJqZWN0VW5pcXVlSUQnKS5pbXBsaWNpdCgyKS5iaXRzdHIoKS5vcHRpb25hbCgpLFxuICAgIHRoaXMua2V5KCdleHRlbnNpb25zJykuZXhwbGljaXQoMykuc2Vxb2YoRXh0ZW5zaW9uKS5vcHRpb25hbCgpXG4gIClcbn0pXG5cbnZhciBYNTA5Q2VydGlmaWNhdGUgPSBhc24uZGVmaW5lKCdYNTA5Q2VydGlmaWNhdGUnLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCd0YnNDZXJ0aWZpY2F0ZScpLnVzZShUQlNDZXJ0aWZpY2F0ZSksXG4gICAgdGhpcy5rZXkoJ3NpZ25hdHVyZUFsZ29yaXRobScpLnVzZShBbGdvcml0aG1JZGVudGlmaWVyKSxcbiAgICB0aGlzLmtleSgnc2lnbmF0dXJlVmFsdWUnKS5iaXRzdHIoKVxuICApXG59KVxuXG5tb2R1bGUuZXhwb3J0cyA9IFg1MDlDZXJ0aWZpY2F0ZVxuIiwiLy8gYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hcGF0aWwvcGVtc3RyaXBcbnZhciBmaW5kUHJvYyA9IC9Qcm9jLVR5cGU6IDQsRU5DUllQVEVEXFxuXFxyP0RFSy1JbmZvOiBBRVMtKCg/OjEyOCl8KD86MTkyKXwoPzoyNTYpKS1DQkMsKFswLTlBLUhdKylcXG5cXHI/XFxuXFxyPyhbMC05QS16XFxuXFxyXFwrXFwvXFw9XSspXFxuXFxyPy9tXG52YXIgc3RhcnRSZWdleCA9IC9eLS0tLS1CRUdJTiAoKD86LiogS0VZKXxDRVJUSUZJQ0FURSktLS0tLVxcbi9tXG52YXIgZnVsbFJlZ2V4ID0gL14tLS0tLUJFR0lOICgoPzouKiBLRVkpfENFUlRJRklDQVRFKS0tLS0tXFxuXFxyPyhbMC05QS16XFxuXFxyXFwrXFwvXFw9XSspXFxuXFxyPy0tLS0tRU5EIFxcMS0tLS0tJC9tXG52YXIgZXZwID0gcmVxdWlyZSgnZXZwX2J5dGVzdG9rZXknKVxudmFyIGNpcGhlcnMgPSByZXF1aXJlKCdicm93c2VyaWZ5LWFlcycpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChva2V5LCBwYXNzd29yZCkge1xuICB2YXIga2V5ID0gb2tleS50b1N0cmluZygpXG4gIHZhciBtYXRjaCA9IGtleS5tYXRjaChmaW5kUHJvYylcbiAgdmFyIGRlY3J5cHRlZFxuICBpZiAoIW1hdGNoKSB7XG4gICAgdmFyIG1hdGNoMiA9IGtleS5tYXRjaChmdWxsUmVnZXgpXG4gICAgZGVjcnlwdGVkID0gbmV3IEJ1ZmZlcihtYXRjaDJbMl0ucmVwbGFjZSgvXFxyP1xcbi9nLCAnJyksICdiYXNlNjQnKVxuICB9IGVsc2Uge1xuICAgIHZhciBzdWl0ZSA9ICdhZXMnICsgbWF0Y2hbMV1cbiAgICB2YXIgaXYgPSBuZXcgQnVmZmVyKG1hdGNoWzJdLCAnaGV4JylcbiAgICB2YXIgY2lwaGVyVGV4dCA9IG5ldyBCdWZmZXIobWF0Y2hbM10ucmVwbGFjZSgvXFxyP1xcbi9nLCAnJyksICdiYXNlNjQnKVxuICAgIHZhciBjaXBoZXJLZXkgPSBldnAocGFzc3dvcmQsIGl2LnNsaWNlKDAsIDgpLCBwYXJzZUludChtYXRjaFsxXSwgMTApKS5rZXlcbiAgICB2YXIgb3V0ID0gW11cbiAgICB2YXIgY2lwaGVyID0gY2lwaGVycy5jcmVhdGVEZWNpcGhlcml2KHN1aXRlLCBjaXBoZXJLZXksIGl2KVxuICAgIG91dC5wdXNoKGNpcGhlci51cGRhdGUoY2lwaGVyVGV4dCkpXG4gICAgb3V0LnB1c2goY2lwaGVyLmZpbmFsKCkpXG4gICAgZGVjcnlwdGVkID0gQnVmZmVyLmNvbmNhdChvdXQpXG4gIH1cbiAgdmFyIHRhZyA9IGtleS5tYXRjaChzdGFydFJlZ2V4KVsxXVxuICByZXR1cm4ge1xuICAgIHRhZzogdGFnLFxuICAgIGRhdGE6IGRlY3J5cHRlZFxuICB9XG59XG4iLCJ2YXIgYXNuMSA9IHJlcXVpcmUoJy4vYXNuMScpXG52YXIgYWVzaWQgPSByZXF1aXJlKCcuL2Flc2lkLmpzb24nKVxudmFyIGZpeFByb2MgPSByZXF1aXJlKCcuL2ZpeFByb2MnKVxudmFyIGNpcGhlcnMgPSByZXF1aXJlKCdicm93c2VyaWZ5LWFlcycpXG52YXIgY29tcGF0ID0gcmVxdWlyZSgncGJrZGYyJylcbm1vZHVsZS5leHBvcnRzID0gcGFyc2VLZXlzXG5cbmZ1bmN0aW9uIHBhcnNlS2V5cyAoYnVmZmVyKSB7XG4gIHZhciBwYXNzd29yZFxuICBpZiAodHlwZW9mIGJ1ZmZlciA9PT0gJ29iamVjdCcgJiYgIUJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpKSB7XG4gICAgcGFzc3dvcmQgPSBidWZmZXIucGFzc3BocmFzZVxuICAgIGJ1ZmZlciA9IGJ1ZmZlci5rZXlcbiAgfVxuICBpZiAodHlwZW9mIGJ1ZmZlciA9PT0gJ3N0cmluZycpIHtcbiAgICBidWZmZXIgPSBuZXcgQnVmZmVyKGJ1ZmZlcilcbiAgfVxuXG4gIHZhciBzdHJpcHBlZCA9IGZpeFByb2MoYnVmZmVyLCBwYXNzd29yZClcblxuICB2YXIgdHlwZSA9IHN0cmlwcGVkLnRhZ1xuICB2YXIgZGF0YSA9IHN0cmlwcGVkLmRhdGFcbiAgdmFyIHN1YnR5cGUsIG5kYXRhXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ0NFUlRJRklDQVRFJzpcbiAgICAgIG5kYXRhID0gYXNuMS5jZXJ0aWZpY2F0ZS5kZWNvZGUoZGF0YSwgJ2RlcicpLnRic0NlcnRpZmljYXRlLnN1YmplY3RQdWJsaWNLZXlJbmZvXG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgY2FzZSAnUFVCTElDIEtFWSc6XG4gICAgICBpZiAoIW5kYXRhKSB7XG4gICAgICAgIG5kYXRhID0gYXNuMS5QdWJsaWNLZXkuZGVjb2RlKGRhdGEsICdkZXInKVxuICAgICAgfVxuICAgICAgc3VidHlwZSA9IG5kYXRhLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbignLicpXG4gICAgICBzd2l0Y2ggKHN1YnR5cGUpIHtcbiAgICAgICAgY2FzZSAnMS4yLjg0MC4xMTM1NDkuMS4xLjEnOlxuICAgICAgICAgIHJldHVybiBhc24xLlJTQVB1YmxpY0tleS5kZWNvZGUobmRhdGEuc3ViamVjdFB1YmxpY0tleS5kYXRhLCAnZGVyJylcbiAgICAgICAgY2FzZSAnMS4yLjg0MC4xMDA0NS4yLjEnOlxuICAgICAgICAgIG5kYXRhLnN1YmplY3RQcml2YXRlS2V5ID0gbmRhdGEuc3ViamVjdFB1YmxpY0tleVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnZWMnLFxuICAgICAgICAgICAgZGF0YTogbmRhdGFcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJzEuMi44NDAuMTAwNDAuNC4xJzpcbiAgICAgICAgICBuZGF0YS5hbGdvcml0aG0ucGFyYW1zLnB1Yl9rZXkgPSBhc24xLkRTQXBhcmFtLmRlY29kZShuZGF0YS5zdWJqZWN0UHVibGljS2V5LmRhdGEsICdkZXInKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnZHNhJyxcbiAgICAgICAgICAgIGRhdGE6IG5kYXRhLmFsZ29yaXRobS5wYXJhbXNcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcigndW5rbm93biBrZXkgaWQgJyArIHN1YnR5cGUpXG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24ga2V5IHR5cGUgJyArIHR5cGUpXG4gICAgY2FzZSAnRU5DUllQVEVEIFBSSVZBVEUgS0VZJzpcbiAgICAgIGRhdGEgPSBhc24xLkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKGRhdGEsICdkZXInKVxuICAgICAgZGF0YSA9IGRlY3J5cHQoZGF0YSwgcGFzc3dvcmQpXG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgY2FzZSAnUFJJVkFURSBLRVknOlxuICAgICAgbmRhdGEgPSBhc24xLlByaXZhdGVLZXkuZGVjb2RlKGRhdGEsICdkZXInKVxuICAgICAgc3VidHlwZSA9IG5kYXRhLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbignLicpXG4gICAgICBzd2l0Y2ggKHN1YnR5cGUpIHtcbiAgICAgICAgY2FzZSAnMS4yLjg0MC4xMTM1NDkuMS4xLjEnOlxuICAgICAgICAgIHJldHVybiBhc24xLlJTQVByaXZhdGVLZXkuZGVjb2RlKG5kYXRhLnN1YmplY3RQcml2YXRlS2V5LCAnZGVyJylcbiAgICAgICAgY2FzZSAnMS4yLjg0MC4xMDA0NS4yLjEnOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjdXJ2ZTogbmRhdGEuYWxnb3JpdGhtLmN1cnZlLFxuICAgICAgICAgICAgcHJpdmF0ZUtleTogYXNuMS5FQ1ByaXZhdGVLZXkuZGVjb2RlKG5kYXRhLnN1YmplY3RQcml2YXRlS2V5LCAnZGVyJykucHJpdmF0ZUtleVxuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnMS4yLjg0MC4xMDA0MC40LjEnOlxuICAgICAgICAgIG5kYXRhLmFsZ29yaXRobS5wYXJhbXMucHJpdl9rZXkgPSBhc24xLkRTQXBhcmFtLmRlY29kZShuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleSwgJ2RlcicpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdkc2EnLFxuICAgICAgICAgICAgcGFyYW1zOiBuZGF0YS5hbGdvcml0aG0ucGFyYW1zXG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24ga2V5IGlkICcgKyBzdWJ0eXBlKVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGtleSB0eXBlICcgKyB0eXBlKVxuICAgIGNhc2UgJ1JTQSBQVUJMSUMgS0VZJzpcbiAgICAgIHJldHVybiBhc24xLlJTQVB1YmxpY0tleS5kZWNvZGUoZGF0YSwgJ2RlcicpXG4gICAgY2FzZSAnUlNBIFBSSVZBVEUgS0VZJzpcbiAgICAgIHJldHVybiBhc24xLlJTQVByaXZhdGVLZXkuZGVjb2RlKGRhdGEsICdkZXInKVxuICAgIGNhc2UgJ0RTQSBQUklWQVRFIEtFWSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZHNhJyxcbiAgICAgICAgcGFyYW1zOiBhc24xLkRTQVByaXZhdGVLZXkuZGVjb2RlKGRhdGEsICdkZXInKVxuICAgICAgfVxuICAgIGNhc2UgJ0VDIFBSSVZBVEUgS0VZJzpcbiAgICAgIGRhdGEgPSBhc24xLkVDUHJpdmF0ZUtleS5kZWNvZGUoZGF0YSwgJ2RlcicpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJ2ZTogZGF0YS5wYXJhbWV0ZXJzLnZhbHVlLFxuICAgICAgICBwcml2YXRlS2V5OiBkYXRhLnByaXZhdGVLZXlcbiAgICAgIH1cbiAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24ga2V5IHR5cGUgJyArIHR5cGUpXG4gIH1cbn1cbnBhcnNlS2V5cy5zaWduYXR1cmUgPSBhc24xLnNpZ25hdHVyZVxuZnVuY3Rpb24gZGVjcnlwdCAoZGF0YSwgcGFzc3dvcmQpIHtcbiAgdmFyIHNhbHQgPSBkYXRhLmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuc2FsdFxuICB2YXIgaXRlcnMgPSBwYXJzZUludChkYXRhLmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuaXRlcnMudG9TdHJpbmcoKSwgMTApXG4gIHZhciBhbGdvID0gYWVzaWRbZGF0YS5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuYWxnby5qb2luKCcuJyldXG4gIHZhciBpdiA9IGRhdGEuYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLml2XG4gIHZhciBjaXBoZXJUZXh0ID0gZGF0YS5zdWJqZWN0UHJpdmF0ZUtleVxuICB2YXIga2V5bGVuID0gcGFyc2VJbnQoYWxnby5zcGxpdCgnLScpWzFdLCAxMCkgLyA4XG4gIHZhciBrZXkgPSBjb21wYXQucGJrZGYyU3luYyhwYXNzd29yZCwgc2FsdCwgaXRlcnMsIGtleWxlbilcbiAgdmFyIGNpcGhlciA9IGNpcGhlcnMuY3JlYXRlRGVjaXBoZXJpdihhbGdvLCBrZXksIGl2KVxuICB2YXIgb3V0ID0gW11cbiAgb3V0LnB1c2goY2lwaGVyLnVwZGF0ZShjaXBoZXJUZXh0KSlcbiAgb3V0LnB1c2goY2lwaGVyLmZpbmFsKCkpXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KG91dClcbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwidmFyIGNyZWF0ZUhtYWMgPSByZXF1aXJlKCdjcmVhdGUtaG1hYycpXG52YXIgY2hlY2tQYXJhbWV0ZXJzID0gcmVxdWlyZSgnLi9wcmVjb25kaXRpb24nKVxuXG5leHBvcnRzLnBia2RmMiA9IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCwgaXRlcmF0aW9ucywga2V5bGVuLCBkaWdlc3QsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgZGlnZXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBkaWdlc3RcbiAgICBkaWdlc3QgPSB1bmRlZmluZWRcbiAgfVxuXG4gIGNoZWNrUGFyYW1ldGVycyhpdGVyYXRpb25zLCBrZXlsZW4pXG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFcnJvcignTm8gY2FsbGJhY2sgcHJvdmlkZWQgdG8gcGJrZGYyJylcblxuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBjYWxsYmFjayhudWxsLCBleHBvcnRzLnBia2RmMlN5bmMocGFzc3dvcmQsIHNhbHQsIGl0ZXJhdGlvbnMsIGtleWxlbiwgZGlnZXN0KSlcbiAgfSlcbn1cblxudmFyIGRlZmF1bHRFbmNvZGluZ1xuaWYgKHByb2Nlc3MuYnJvd3Nlcikge1xuICBkZWZhdWx0RW5jb2RpbmcgPSAndXRmLTgnXG59IGVsc2Uge1xuICB2YXIgcFZlcnNpb25NYWpvciA9IHBhcnNlSW50KHByb2Nlc3MudmVyc2lvbi5zcGxpdCgnLicpWzBdLnNsaWNlKDEpLCAxMClcblxuICBkZWZhdWx0RW5jb2RpbmcgPSBwVmVyc2lvbk1ham9yID49IDYgPyAndXRmLTgnIDogJ2JpbmFyeSdcbn1cblxuZXhwb3J0cy5wYmtkZjJTeW5jID0gZnVuY3Rpb24gKHBhc3N3b3JkLCBzYWx0LCBpdGVyYXRpb25zLCBrZXlsZW4sIGRpZ2VzdCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihwYXNzd29yZCkpIHBhc3N3b3JkID0gbmV3IEJ1ZmZlcihwYXNzd29yZCwgZGVmYXVsdEVuY29kaW5nKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihzYWx0KSkgc2FsdCA9IG5ldyBCdWZmZXIoc2FsdCwgZGVmYXVsdEVuY29kaW5nKVxuXG4gIGNoZWNrUGFyYW1ldGVycyhpdGVyYXRpb25zLCBrZXlsZW4pXG5cbiAgZGlnZXN0ID0gZGlnZXN0IHx8ICdzaGExJ1xuXG4gIHZhciBoTGVuXG4gIHZhciBsID0gMVxuICB2YXIgREsgPSBuZXcgQnVmZmVyKGtleWxlbilcbiAgdmFyIGJsb2NrMSA9IG5ldyBCdWZmZXIoc2FsdC5sZW5ndGggKyA0KVxuICBzYWx0LmNvcHkoYmxvY2sxLCAwLCAwLCBzYWx0Lmxlbmd0aClcblxuICB2YXIgclxuICB2YXIgVFxuXG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IGw7IGkrKykge1xuICAgIGJsb2NrMS53cml0ZVVJbnQzMkJFKGksIHNhbHQubGVuZ3RoKVxuICAgIHZhciBVID0gY3JlYXRlSG1hYyhkaWdlc3QsIHBhc3N3b3JkKS51cGRhdGUoYmxvY2sxKS5kaWdlc3QoKVxuXG4gICAgaWYgKCFoTGVuKSB7XG4gICAgICBoTGVuID0gVS5sZW5ndGhcbiAgICAgIFQgPSBuZXcgQnVmZmVyKGhMZW4pXG4gICAgICBsID0gTWF0aC5jZWlsKGtleWxlbiAvIGhMZW4pXG4gICAgICByID0ga2V5bGVuIC0gKGwgLSAxKSAqIGhMZW5cbiAgICB9XG5cbiAgICBVLmNvcHkoVCwgMCwgMCwgaExlbilcblxuICAgIGZvciAodmFyIGogPSAxOyBqIDwgaXRlcmF0aW9uczsgaisrKSB7XG4gICAgICBVID0gY3JlYXRlSG1hYyhkaWdlc3QsIHBhc3N3b3JkKS51cGRhdGUoVSkuZGlnZXN0KClcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgaExlbjsgaysrKSBUW2tdIF49IFVba11cbiAgICB9XG5cbiAgICB2YXIgZGVzdFBvcyA9IChpIC0gMSkgKiBoTGVuXG4gICAgdmFyIGxlbiA9IChpID09PSBsID8gciA6IGhMZW4pXG4gICAgVC5jb3B5KERLLCBkZXN0UG9zLCAwLCBsZW4pXG4gIH1cblxuICByZXR1cm4gREtcbn1cbiIsInZhciBNQVhfQUxMT0MgPSBNYXRoLnBvdygyLCAzMCkgLSAxIC8vIGRlZmF1bHQgaW4gaW9qc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0aW9ucywga2V5bGVuKSB7XG4gIGlmICh0eXBlb2YgaXRlcmF0aW9ucyAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJdGVyYXRpb25zIG5vdCBhIG51bWJlcicpXG4gIH1cblxuICBpZiAoaXRlcmF0aW9ucyA8IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCYWQgaXRlcmF0aW9ucycpXG4gIH1cblxuICBpZiAodHlwZW9mIGtleWxlbiAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLZXkgbGVuZ3RoIG5vdCBhIG51bWJlcicpXG4gIH1cblxuICBpZiAoa2V5bGVuIDwgMCB8fCBrZXlsZW4gPiBNQVhfQUxMT0MgfHwga2V5bGVuICE9PSBrZXlsZW4pIHsgLyogZXNsaW50IG5vLXNlbGYtY29tcGFyZTogMCAqL1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JhZCBrZXkgbGVuZ3RoJylcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAoIXByb2Nlc3MudmVyc2lvbiB8fFxuICAgIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MC4nKSA9PT0gMCB8fFxuICAgIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MS4nKSA9PT0gMCAmJiBwcm9jZXNzLnZlcnNpb24uaW5kZXhPZigndjEuOC4nKSAhPT0gMCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IG5leHRUaWNrO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBwcm9jZXNzLm5leHRUaWNrO1xufVxuXG5mdW5jdGlvbiBuZXh0VGljayhmbiwgYXJnMSwgYXJnMiwgYXJnMykge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJjYWxsYmFja1wiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG4gIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgYXJncywgaTtcbiAgc3dpdGNoIChsZW4pIHtcbiAgY2FzZSAwOlxuICBjYXNlIDE6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZm4pO1xuICBjYXNlIDI6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrT25lKCkge1xuICAgICAgZm4uY2FsbChudWxsLCBhcmcxKTtcbiAgICB9KTtcbiAgY2FzZSAzOlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGlja1R3bygpIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgYXJnMSwgYXJnMik7XG4gICAgfSk7XG4gIGNhc2UgNDpcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2tUaHJlZSgpIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgfSk7XG4gIGRlZmF1bHQ6XG4gICAgYXJncyA9IG5ldyBBcnJheShsZW4gLSAxKTtcbiAgICBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICBhcmdzW2krK10gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGljaygpIHtcbiAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0pO1xuICB9XG59XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiZXhwb3J0cy5wdWJsaWNFbmNyeXB0ID0gcmVxdWlyZSgnLi9wdWJsaWNFbmNyeXB0Jyk7XG5leHBvcnRzLnByaXZhdGVEZWNyeXB0ID0gcmVxdWlyZSgnLi9wcml2YXRlRGVjcnlwdCcpO1xuXG5leHBvcnRzLnByaXZhdGVFbmNyeXB0ID0gZnVuY3Rpb24gcHJpdmF0ZUVuY3J5cHQoa2V5LCBidWYpIHtcbiAgcmV0dXJuIGV4cG9ydHMucHVibGljRW5jcnlwdChrZXksIGJ1ZiwgdHJ1ZSk7XG59O1xuXG5leHBvcnRzLnB1YmxpY0RlY3J5cHQgPSBmdW5jdGlvbiBwdWJsaWNEZWNyeXB0KGtleSwgYnVmKSB7XG4gIHJldHVybiBleHBvcnRzLnByaXZhdGVEZWNyeXB0KGtleSwgYnVmLCB0cnVlKTtcbn07IiwidmFyIGNyZWF0ZUhhc2ggPSByZXF1aXJlKCdjcmVhdGUtaGFzaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2VlZCwgbGVuKSB7XG4gIHZhciB0ID0gbmV3IEJ1ZmZlcignJyk7XG4gIHZhciAgaSA9IDAsIGM7XG4gIHdoaWxlICh0Lmxlbmd0aCA8IGxlbikge1xuICAgIGMgPSBpMm9wcyhpKyspO1xuICAgIHQgPSBCdWZmZXIuY29uY2F0KFt0LCBjcmVhdGVIYXNoKCdzaGExJykudXBkYXRlKHNlZWQpLnVwZGF0ZShjKS5kaWdlc3QoKV0pO1xuICB9XG4gIHJldHVybiB0LnNsaWNlKDAsIGxlbik7XG59O1xuXG5mdW5jdGlvbiBpMm9wcyhjKSB7XG4gIHZhciBvdXQgPSBuZXcgQnVmZmVyKDQpO1xuICBvdXQud3JpdGVVSW50MzJCRShjLDApO1xuICByZXR1cm4gb3V0O1xufSIsInZhciBwYXJzZUtleXMgPSByZXF1aXJlKCdwYXJzZS1hc24xJyk7XG52YXIgbWdmID0gcmVxdWlyZSgnLi9tZ2YnKTtcbnZhciB4b3IgPSByZXF1aXJlKCcuL3hvcicpO1xudmFyIGJuID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBjcnQgPSByZXF1aXJlKCdicm93c2VyaWZ5LXJzYScpO1xudmFyIGNyZWF0ZUhhc2ggPSByZXF1aXJlKCdjcmVhdGUtaGFzaCcpO1xudmFyIHdpdGhQdWJsaWMgPSByZXF1aXJlKCcuL3dpdGhQdWJsaWMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcHJpdmF0ZURlY3J5cHQocHJpdmF0ZV9rZXksIGVuYywgcmV2ZXJzZSkge1xuICB2YXIgcGFkZGluZztcbiAgaWYgKHByaXZhdGVfa2V5LnBhZGRpbmcpIHtcbiAgICBwYWRkaW5nID0gcHJpdmF0ZV9rZXkucGFkZGluZztcbiAgfSBlbHNlIGlmIChyZXZlcnNlKSB7XG4gICAgcGFkZGluZyA9IDE7XG4gIH0gZWxzZSB7XG4gICAgcGFkZGluZyA9IDQ7XG4gIH1cbiAgXG4gIHZhciBrZXkgPSBwYXJzZUtleXMocHJpdmF0ZV9rZXkpO1xuICB2YXIgayA9IGtleS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtcbiAgaWYgKGVuYy5sZW5ndGggPiBrIHx8IG5ldyBibihlbmMpLmNtcChrZXkubW9kdWx1cykgPj0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZGVjcnlwdGlvbiBlcnJvcicpO1xuICB9XG4gIHZhciBtc2c7XG4gIGlmIChyZXZlcnNlKSB7XG4gICAgbXNnID0gd2l0aFB1YmxpYyhuZXcgYm4oZW5jKSwga2V5KTtcbiAgfSBlbHNlIHtcbiAgICBtc2cgPSBjcnQoZW5jLCBrZXkpO1xuICB9XG4gIHZhciB6QnVmZmVyID0gbmV3IEJ1ZmZlcihrIC0gbXNnLmxlbmd0aCk7XG4gIHpCdWZmZXIuZmlsbCgwKTtcbiAgbXNnID0gQnVmZmVyLmNvbmNhdChbekJ1ZmZlciwgbXNnXSwgayk7XG4gIGlmIChwYWRkaW5nID09PSA0KSB7XG4gICAgcmV0dXJuIG9hZXAoa2V5LCBtc2cpO1xuICB9IGVsc2UgaWYgKHBhZGRpbmcgPT09IDEpIHtcbiAgICByZXR1cm4gcGtjczEoa2V5LCBtc2csIHJldmVyc2UpO1xuICB9IGVsc2UgaWYgKHBhZGRpbmcgPT09IDMpIHtcbiAgICByZXR1cm4gbXNnO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBwYWRkaW5nJyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIG9hZXAoa2V5LCBtc2cpe1xuICB2YXIgbiA9IGtleS5tb2R1bHVzO1xuICB2YXIgayA9IGtleS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtcbiAgdmFyIG1MZW4gPSBtc2cubGVuZ3RoO1xuICB2YXIgaUhhc2ggPSBjcmVhdGVIYXNoKCdzaGExJykudXBkYXRlKG5ldyBCdWZmZXIoJycpKS5kaWdlc3QoKTtcbiAgdmFyIGhMZW4gPSBpSGFzaC5sZW5ndGg7XG4gIHZhciBoTGVuMiA9IDIgKiBoTGVuO1xuICBpZiAobXNnWzBdICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkZWNyeXB0aW9uIGVycm9yJyk7XG4gIH1cbiAgdmFyIG1hc2tlZFNlZWQgPSBtc2cuc2xpY2UoMSwgaExlbiArIDEpO1xuICB2YXIgbWFza2VkRGIgPSAgbXNnLnNsaWNlKGhMZW4gKyAxKTtcbiAgdmFyIHNlZWQgPSB4b3IobWFza2VkU2VlZCwgbWdmKG1hc2tlZERiLCBoTGVuKSk7XG4gIHZhciBkYiA9IHhvcihtYXNrZWREYiwgbWdmKHNlZWQsIGsgLSBoTGVuIC0gMSkpO1xuICBpZiAoY29tcGFyZShpSGFzaCwgZGIuc2xpY2UoMCwgaExlbikpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkZWNyeXB0aW9uIGVycm9yJyk7XG4gIH1cbiAgdmFyIGkgPSBoTGVuO1xuICB3aGlsZSAoZGJbaV0gPT09IDApIHtcbiAgICBpKys7XG4gIH1cbiAgaWYgKGRiW2krK10gIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZXJyb3InKTtcbiAgfVxuICByZXR1cm4gZGIuc2xpY2UoaSk7XG59XG5cbmZ1bmN0aW9uIHBrY3MxKGtleSwgbXNnLCByZXZlcnNlKXtcbiAgdmFyIHAxID0gbXNnLnNsaWNlKDAsIDIpO1xuICB2YXIgaSA9IDI7XG4gIHZhciBzdGF0dXMgPSAwO1xuICB3aGlsZSAobXNnW2krK10gIT09IDApIHtcbiAgICBpZiAoaSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgICBzdGF0dXMrKztcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICB2YXIgcHMgPSBtc2cuc2xpY2UoMiwgaSAtIDEpO1xuICB2YXIgcDIgPSBtc2cuc2xpY2UoaSAtIDEsIGkpO1xuXG4gIGlmICgocDEudG9TdHJpbmcoJ2hleCcpICE9PSAnMDAwMicgJiYgIXJldmVyc2UpIHx8IChwMS50b1N0cmluZygnaGV4JykgIT09ICcwMDAxJyAmJiByZXZlcnNlKSl7XG4gICAgc3RhdHVzKys7XG4gIH1cbiAgaWYgKHBzLmxlbmd0aCA8IDgpIHtcbiAgICBzdGF0dXMrKztcbiAgfVxuICBpZiAoc3RhdHVzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkZWNyeXB0aW9uIGVycm9yJyk7XG4gIH1cbiAgcmV0dXJuICBtc2cuc2xpY2UoaSk7XG59XG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpe1xuICBhID0gbmV3IEJ1ZmZlcihhKTtcbiAgYiA9IG5ldyBCdWZmZXIoYik7XG4gIHZhciBkaWYgPSAwO1xuICB2YXIgbGVuID0gYS5sZW5ndGg7XG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICBkaWYrKztcbiAgICBsZW4gPSBNYXRoLm1pbihhLmxlbmd0aCwgYi5sZW5ndGgpO1xuICB9XG4gIHZhciBpID0gLTE7XG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBkaWYgKz0gKGFbaV0gXiBiW2ldKTtcbiAgfVxuICByZXR1cm4gZGlmO1xufSIsInZhciBwYXJzZUtleXMgPSByZXF1aXJlKCdwYXJzZS1hc24xJyk7XG52YXIgcmFuZG9tQnl0ZXMgPSByZXF1aXJlKCdyYW5kb21ieXRlcycpO1xudmFyIGNyZWF0ZUhhc2ggPSByZXF1aXJlKCdjcmVhdGUtaGFzaCcpO1xudmFyIG1nZiA9IHJlcXVpcmUoJy4vbWdmJyk7XG52YXIgeG9yID0gcmVxdWlyZSgnLi94b3InKTtcbnZhciBibiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgd2l0aFB1YmxpYyA9IHJlcXVpcmUoJy4vd2l0aFB1YmxpYycpO1xudmFyIGNydCA9IHJlcXVpcmUoJ2Jyb3dzZXJpZnktcnNhJyk7XG5cbnZhciBjb25zdGFudHMgPSB7XG4gIFJTQV9QS0NTMV9PQUVQX1BBRERJTkc6IDQsXG4gIFJTQV9QS0NTMV9QQURESU46IDEsXG4gIFJTQV9OT19QQURESU5HOiAzXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHB1YmxpY0VuY3J5cHQocHVibGljX2tleSwgbXNnLCByZXZlcnNlKSB7XG4gIHZhciBwYWRkaW5nO1xuICBpZiAocHVibGljX2tleS5wYWRkaW5nKSB7XG4gICAgcGFkZGluZyA9IHB1YmxpY19rZXkucGFkZGluZztcbiAgfSBlbHNlIGlmIChyZXZlcnNlKSB7XG4gICAgcGFkZGluZyA9IDE7XG4gIH0gZWxzZSB7XG4gICAgcGFkZGluZyA9IDQ7XG4gIH1cbiAgdmFyIGtleSA9IHBhcnNlS2V5cyhwdWJsaWNfa2V5KTtcbiAgdmFyIHBhZGRlZE1zZztcbiAgaWYgKHBhZGRpbmcgPT09IDQpIHtcbiAgICBwYWRkZWRNc2cgPSBvYWVwKGtleSwgbXNnKTtcbiAgfSBlbHNlIGlmIChwYWRkaW5nID09PSAxKSB7XG4gICAgcGFkZGVkTXNnID0gcGtjczEoa2V5LCBtc2csIHJldmVyc2UpO1xuICB9IGVsc2UgaWYgKHBhZGRpbmcgPT09IDMpIHtcbiAgICBwYWRkZWRNc2cgPSBuZXcgYm4obXNnKTtcbiAgICBpZiAocGFkZGVkTXNnLmNtcChrZXkubW9kdWx1cykgPj0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkYXRhIHRvbyBsb25nIGZvciBtb2R1bHVzJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBwYWRkaW5nJyk7XG4gIH1cbiAgaWYgKHJldmVyc2UpIHtcbiAgICByZXR1cm4gY3J0KHBhZGRlZE1zZywga2V5KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gd2l0aFB1YmxpYyhwYWRkZWRNc2csIGtleSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIG9hZXAoa2V5LCBtc2cpe1xuICB2YXIgayA9IGtleS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtcbiAgdmFyIG1MZW4gPSBtc2cubGVuZ3RoO1xuICB2YXIgaUhhc2ggPSBjcmVhdGVIYXNoKCdzaGExJykudXBkYXRlKG5ldyBCdWZmZXIoJycpKS5kaWdlc3QoKTtcbiAgdmFyIGhMZW4gPSBpSGFzaC5sZW5ndGg7XG4gIHZhciBoTGVuMiA9IDIgKiBoTGVuO1xuICBpZiAobUxlbiA+IGsgLSBoTGVuMiAtIDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21lc3NhZ2UgdG9vIGxvbmcnKTtcbiAgfVxuICB2YXIgcHMgPSBuZXcgQnVmZmVyKGsgLSBtTGVuIC0gaExlbjIgLSAyKTtcbiAgcHMuZmlsbCgwKTtcbiAgdmFyIGRibGVuID0gayAtIGhMZW4gLSAxO1xuICB2YXIgc2VlZCA9IHJhbmRvbUJ5dGVzKGhMZW4pO1xuICB2YXIgbWFza2VkRGIgPSB4b3IoQnVmZmVyLmNvbmNhdChbaUhhc2gsIHBzLCBuZXcgQnVmZmVyKFsxXSksIG1zZ10sIGRibGVuKSwgbWdmKHNlZWQsIGRibGVuKSk7XG4gIHZhciBtYXNrZWRTZWVkID0geG9yKHNlZWQsIG1nZihtYXNrZWREYiwgaExlbikpO1xuICByZXR1cm4gbmV3IGJuKEJ1ZmZlci5jb25jYXQoW25ldyBCdWZmZXIoWzBdKSwgbWFza2VkU2VlZCwgbWFza2VkRGJdLCBrKSk7XG59XG5mdW5jdGlvbiBwa2NzMShrZXksIG1zZywgcmV2ZXJzZSl7XG4gIHZhciBtTGVuID0gbXNnLmxlbmd0aDtcbiAgdmFyIGsgPSBrZXkubW9kdWx1cy5ieXRlTGVuZ3RoKCk7XG4gIGlmIChtTGVuID4gayAtIDExKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtZXNzYWdlIHRvbyBsb25nJyk7XG4gIH1cbiAgdmFyIHBzO1xuICBpZiAocmV2ZXJzZSkge1xuICAgIHBzID0gbmV3IEJ1ZmZlcihrIC0gbUxlbiAtIDMpO1xuICAgIHBzLmZpbGwoMHhmZik7XG4gIH0gZWxzZSB7XG4gICAgcHMgPSBub25aZXJvKGsgLSBtTGVuIC0gMyk7XG4gIH1cbiAgcmV0dXJuIG5ldyBibihCdWZmZXIuY29uY2F0KFtuZXcgQnVmZmVyKFswLCByZXZlcnNlPzE6Ml0pLCBwcywgbmV3IEJ1ZmZlcihbMF0pLCBtc2ddLCBrKSk7XG59XG5mdW5jdGlvbiBub25aZXJvKGxlbiwgY3J5cHRvKSB7XG4gIHZhciBvdXQgPSBuZXcgQnVmZmVyKGxlbik7XG4gIHZhciBpID0gMDtcbiAgdmFyIGNhY2hlID0gcmFuZG9tQnl0ZXMobGVuKjIpO1xuICB2YXIgY3VyID0gMDtcbiAgdmFyIG51bTtcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICBpZiAoY3VyID09PSBjYWNoZS5sZW5ndGgpIHtcbiAgICAgIGNhY2hlID0gcmFuZG9tQnl0ZXMobGVuKjIpO1xuICAgICAgY3VyID0gMDtcbiAgICB9XG4gICAgbnVtID0gY2FjaGVbY3VyKytdO1xuICAgIGlmIChudW0pIHtcbiAgICAgIG91dFtpKytdID0gbnVtO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufSIsInZhciBibiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG5mdW5jdGlvbiB3aXRoUHVibGljKHBhZGRlZE1zZywga2V5KSB7XG4gIHJldHVybiBuZXcgQnVmZmVyKHBhZGRlZE1zZ1xuICAgIC50b1JlZChibi5tb250KGtleS5tb2R1bHVzKSlcbiAgICAucmVkUG93KG5ldyBibihrZXkucHVibGljRXhwb25lbnQpKVxuICAgIC5mcm9tUmVkKClcbiAgICAudG9BcnJheSgpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3aXRoUHVibGljOyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geG9yKGEsIGIpIHtcbiAgdmFyIGxlbiA9IGEubGVuZ3RoO1xuICB2YXIgaSA9IC0xO1xuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgYVtpXSBePSBiW2ldO1xuICB9XG4gIHJldHVybiBhXG59OyIsIid1c2Ugc3RyaWN0J1xuXG5mdW5jdGlvbiBvbGRCcm93c2VyICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyXFxudXNlIGNocm9tZSwgRmlyZUZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMScpXG59XG5cbnZhciBjcnlwdG8gPSBnbG9iYWwuY3J5cHRvIHx8IGdsb2JhbC5tc0NyeXB0b1xuXG5pZiAoY3J5cHRvICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByYW5kb21CeXRlc1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBvbGRCcm93c2VyXG59XG5cbmZ1bmN0aW9uIHJhbmRvbUJ5dGVzIChzaXplLCBjYikge1xuICAvLyBwaGFudG9tanMgbmVlZHMgdG8gdGhyb3dcbiAgaWYgKHNpemUgPiA2NTUzNikgdGhyb3cgbmV3IEVycm9yKCdyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzJylcbiAgLy8gaW4gY2FzZSBicm93c2VyaWZ5ICBpc24ndCB1c2luZyB0aGUgVWludDhBcnJheSB2ZXJzaW9uXG4gIHZhciByYXdCeXRlcyA9IG5ldyBnbG9iYWwuVWludDhBcnJheShzaXplKVxuXG4gIC8vIFRoaXMgd2lsbCBub3Qgd29yayBpbiBvbGRlciBicm93c2Vycy5cbiAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS93aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlc1xuICBpZiAoc2l6ZSA+IDApIHsgIC8vIGdldFJhbmRvbVZhbHVlcyBmYWlscyBvbiBJRSBpZiBzaXplID09IDBcbiAgICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHJhd0J5dGVzKVxuICB9XG4gIC8vIHBoYW50b21qcyBkb2Vzbid0IGxpa2UgYSBidWZmZXIgYmVpbmcgcGFzc2VkIGhlcmVcbiAgdmFyIGJ5dGVzID0gbmV3IEJ1ZmZlcihyYXdCeXRlcy5idWZmZXIpXG5cbiAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNiKG51bGwsIGJ5dGVzKVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4vbGliL19zdHJlYW1fZHVwbGV4LmpzXCIpXG4iLCIvLyBhIGR1cGxleCBzdHJlYW0gaXMganVzdCBhIHN0cmVhbSB0aGF0IGlzIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLlxuLy8gU2luY2UgSlMgZG9lc24ndCBoYXZlIG11bHRpcGxlIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UsIHRoaXMgY2xhc3Ncbi8vIHByb3RvdHlwYWxseSBpbmhlcml0cyBmcm9tIFJlYWRhYmxlLCBhbmQgdGhlbiBwYXJhc2l0aWNhbGx5IGZyb21cbi8vIFdyaXRhYmxlLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAga2V5cy5wdXNoKGtleSk7XG4gIH1yZXR1cm4ga2V5cztcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxubW9kdWxlLmV4cG9ydHMgPSBEdXBsZXg7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgcHJvY2Vzc05leHRUaWNrID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSByZXF1aXJlKCdjb3JlLXV0aWwtaXMnKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV9yZWFkYWJsZScpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZSgnLi9fc3RyZWFtX3dyaXRhYmxlJyk7XG5cbnV0aWwuaW5oZXJpdHMoRHVwbGV4LCBSZWFkYWJsZSk7XG5cbnZhciBrZXlzID0gb2JqZWN0S2V5cyhXcml0YWJsZS5wcm90b3R5cGUpO1xuZm9yICh2YXIgdiA9IDA7IHYgPCBrZXlzLmxlbmd0aDsgdisrKSB7XG4gIHZhciBtZXRob2QgPSBrZXlzW3ZdO1xuICBpZiAoIUR1cGxleC5wcm90b3R5cGVbbWV0aG9kXSkgRHVwbGV4LnByb3RvdHlwZVttZXRob2RdID0gV3JpdGFibGUucHJvdG90eXBlW21ldGhvZF07XG59XG5cbmZ1bmN0aW9uIER1cGxleChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEdXBsZXgpKSByZXR1cm4gbmV3IER1cGxleChvcHRpb25zKTtcblxuICBSZWFkYWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICBXcml0YWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMucmVhZGFibGUgPT09IGZhbHNlKSB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy53cml0YWJsZSA9PT0gZmFsc2UpIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcblxuICB0aGlzLmFsbG93SGFsZk9wZW4gPSB0cnVlO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmFsbG93SGFsZk9wZW4gPT09IGZhbHNlKSB0aGlzLmFsbG93SGFsZk9wZW4gPSBmYWxzZTtcblxuICB0aGlzLm9uY2UoJ2VuZCcsIG9uZW5kKTtcbn1cblxuLy8gdGhlIG5vLWhhbGYtb3BlbiBlbmZvcmNlclxuZnVuY3Rpb24gb25lbmQoKSB7XG4gIC8vIGlmIHdlIGFsbG93IGhhbGYtb3BlbiBzdGF0ZSwgb3IgaWYgdGhlIHdyaXRhYmxlIHNpZGUgZW5kZWQsXG4gIC8vIHRoZW4gd2UncmUgb2suXG4gIGlmICh0aGlzLmFsbG93SGFsZk9wZW4gfHwgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCkgcmV0dXJuO1xuXG4gIC8vIG5vIG1vcmUgZGF0YSBjYW4gYmUgd3JpdHRlbi5cbiAgLy8gQnV0IGFsbG93IG1vcmUgd3JpdGVzIHRvIGhhcHBlbiBpbiB0aGlzIHRpY2suXG4gIHByb2Nlc3NOZXh0VGljayhvbkVuZE5ULCB0aGlzKTtcbn1cblxuZnVuY3Rpb24gb25FbmROVChzZWxmKSB7XG4gIHNlbGYuZW5kKCk7XG59XG5cbmZ1bmN0aW9uIGZvckVhY2goeHMsIGYpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmKHhzW2ldLCBpKTtcbiAgfVxufSIsIi8vIGEgcGFzc3Rocm91Z2ggc3RyZWFtLlxuLy8gYmFzaWNhbGx5IGp1c3QgdGhlIG1vc3QgbWluaW1hbCBzb3J0IG9mIFRyYW5zZm9ybSBzdHJlYW0uXG4vLyBFdmVyeSB3cml0dGVuIGNodW5rIGdldHMgb3V0cHV0IGFzLWlzLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUGFzc1Rocm91Z2g7XG5cbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL19zdHJlYW1fdHJhbnNmb3JtJyk7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudXRpbC5pbmhlcml0cyhQYXNzVGhyb3VnaCwgVHJhbnNmb3JtKTtcblxuZnVuY3Rpb24gUGFzc1Rocm91Z2gob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFzc1Rocm91Z2gpKSByZXR1cm4gbmV3IFBhc3NUaHJvdWdoKG9wdGlvbnMpO1xuXG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5QYXNzVGhyb3VnaC5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG51bGwsIGNodW5rKTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWRhYmxlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHByb2Nlc3NOZXh0VGljayA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblJlYWRhYmxlLlJlYWRhYmxlU3RhdGUgPSBSZWFkYWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIEVFID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xuXG52YXIgRUVsaXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gKGVtaXR0ZXIsIHR5cGUpIHtcbiAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJzKHR5cGUpLmxlbmd0aDtcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBTdHJlYW07XG4oZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIFN0cmVhbSA9IHJlcXVpcmUoJ3N0JyArICdyZWFtJyk7XG4gIH0gY2F0Y2ggKF8pIHt9IGZpbmFsbHkge1xuICAgIGlmICghU3RyZWFtKSBTdHJlYW0gPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG4gIH1cbn0pKCk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbi8qPHJlcGxhY2VtZW50PiovXG52YXIgYnVmZmVyU2hpbSA9IHJlcXVpcmUoJ2J1ZmZlci1zaGltcycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBkZWJ1Z1V0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgZGVidWcgPSB2b2lkIDA7XG5pZiAoZGVidWdVdGlsICYmIGRlYnVnVXRpbC5kZWJ1Z2xvZykge1xuICBkZWJ1ZyA9IGRlYnVnVXRpbC5kZWJ1Z2xvZygnc3RyZWFtJyk7XG59IGVsc2Uge1xuICBkZWJ1ZyA9IGZ1bmN0aW9uICgpIHt9O1xufVxuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXJMaXN0ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL0J1ZmZlckxpc3QnKTtcbnZhciBTdHJpbmdEZWNvZGVyO1xuXG51dGlsLmluaGVyaXRzKFJlYWRhYmxlLCBTdHJlYW0pO1xuXG5mdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuKSB7XG4gIC8vIFNhZGx5IHRoaXMgaXMgbm90IGNhY2hlYWJsZSBhcyBzb21lIGxpYnJhcmllcyBidW5kbGUgdGhlaXIgb3duXG4gIC8vIGV2ZW50IGVtaXR0ZXIgaW1wbGVtZW50YXRpb24gd2l0aCB0aGVtLlxuICBpZiAodHlwZW9mIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyKGV2ZW50LCBmbik7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBpcyBhIGhhY2sgdG8gbWFrZSBzdXJlIHRoYXQgb3VyIGVycm9yIGhhbmRsZXIgaXMgYXR0YWNoZWQgYmVmb3JlIGFueVxuICAgIC8vIHVzZXJsYW5kIG9uZXMuICBORVZFUiBETyBUSElTLiBUaGlzIGlzIGhlcmUgb25seSBiZWNhdXNlIHRoaXMgY29kZSBuZWVkc1xuICAgIC8vIHRvIGNvbnRpbnVlIHRvIHdvcmsgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBOb2RlLmpzIHRoYXQgZG8gbm90IGluY2x1ZGVcbiAgICAvLyB0aGUgcHJlcGVuZExpc3RlbmVyKCkgbWV0aG9kLiBUaGUgZ29hbCBpcyB0byBldmVudHVhbGx5IHJlbW92ZSB0aGlzIGhhY2suXG4gICAgaWYgKCFlbWl0dGVyLl9ldmVudHMgfHwgIWVtaXR0ZXIuX2V2ZW50c1tldmVudF0pIGVtaXR0ZXIub24oZXZlbnQsIGZuKTtlbHNlIGlmIChpc0FycmF5KGVtaXR0ZXIuX2V2ZW50c1tldmVudF0pKSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdLnVuc2hpZnQoZm4pO2Vsc2UgZW1pdHRlci5fZXZlbnRzW2V2ZW50XSA9IFtmbiwgZW1pdHRlci5fZXZlbnRzW2V2ZW50XV07XG4gIH1cbn1cblxuZnVuY3Rpb24gUmVhZGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcuIFVzZWQgdG8gbWFrZSByZWFkKG4pIGlnbm9yZSBuIGFuZCB0b1xuICAvLyBtYWtlIGFsbCB0aGUgYnVmZmVyIG1lcmdpbmcgYW5kIGxlbmd0aCBjaGVja3MgZ28gYXdheVxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcblxuICBpZiAoc3RyZWFtIGluc3RhbmNlb2YgRHVwbGV4KSB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggaXQgc3RvcHMgY2FsbGluZyBfcmVhZCgpIHRvIGZpbGwgdGhlIGJ1ZmZlclxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIFwiZG9uJ3QgY2FsbCBfcmVhZCBwcmVlbXB0aXZlbHkgZXZlclwiXG4gIHZhciBod20gPSBvcHRpb25zLmhpZ2hXYXRlck1hcms7XG4gIHZhciBkZWZhdWx0SHdtID0gdGhpcy5vYmplY3RNb2RlID8gMTYgOiAxNiAqIDEwMjQ7XG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IGh3bSB8fCBod20gPT09IDAgPyBod20gOiBkZWZhdWx0SHdtO1xuXG4gIC8vIGNhc3QgdG8gaW50cy5cbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gfn50aGlzLmhpZ2hXYXRlck1hcms7XG5cbiAgLy8gQSBsaW5rZWQgbGlzdCBpcyB1c2VkIHRvIHN0b3JlIGRhdGEgY2h1bmtzIGluc3RlYWQgb2YgYW4gYXJyYXkgYmVjYXVzZSB0aGVcbiAgLy8gbGlua2VkIGxpc3QgY2FuIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBiZWdpbm5pbmcgZmFzdGVyIHRoYW5cbiAgLy8gYXJyYXkuc2hpZnQoKVxuICB0aGlzLmJ1ZmZlciA9IG5ldyBCdWZmZXJMaXN0KCk7XG4gIHRoaXMubGVuZ3RoID0gMDtcbiAgdGhpcy5waXBlcyA9IG51bGw7XG4gIHRoaXMucGlwZXNDb3VudCA9IDA7XG4gIHRoaXMuZmxvd2luZyA9IG51bGw7XG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgdGhpcy5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIHRoaXMucmVhZGluZyA9IGZhbHNlO1xuXG4gIC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIG9ud3JpdGUgY2IgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LFxuICAvLyBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlIGFueVxuICAvLyBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSBjYWxsLlxuICB0aGlzLnN5bmMgPSB0cnVlO1xuXG4gIC8vIHdoZW5ldmVyIHdlIHJldHVybiBudWxsLCB0aGVuIHdlIHNldCBhIGZsYWcgdG8gc2F5XG4gIC8vIHRoYXQgd2UncmUgYXdhaXRpbmcgYSAncmVhZGFibGUnIGV2ZW50IGVtaXNzaW9uLlxuICB0aGlzLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB0aGlzLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB0aGlzLnJlYWRhYmxlTGlzdGVuaW5nID0gZmFsc2U7XG4gIHRoaXMucmVzdW1lU2NoZWR1bGVkID0gZmFsc2U7XG5cbiAgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cbiAgdGhpcy5kZWZhdWx0RW5jb2RpbmcgPSBvcHRpb25zLmRlZmF1bHRFbmNvZGluZyB8fCAndXRmOCc7XG5cbiAgLy8gd2hlbiBwaXBpbmcsIHdlIG9ubHkgY2FyZSBhYm91dCAncmVhZGFibGUnIGV2ZW50cyB0aGF0IGhhcHBlblxuICAvLyBhZnRlciByZWFkKClpbmcgYWxsIHRoZSBieXRlcyBhbmQgbm90IGdldHRpbmcgYW55IHB1c2hiYWNrLlxuICB0aGlzLnJhbk91dCA9IGZhbHNlO1xuXG4gIC8vIHRoZSBudW1iZXIgb2Ygd3JpdGVycyB0aGF0IGFyZSBhd2FpdGluZyBhIGRyYWluIGV2ZW50IGluIC5waXBlKClzXG4gIHRoaXMuYXdhaXREcmFpbiA9IDA7XG5cbiAgLy8gaWYgdHJ1ZSwgYSBtYXliZVJlYWRNb3JlIGhhcyBiZWVuIHNjaGVkdWxlZFxuICB0aGlzLnJlYWRpbmdNb3JlID0gZmFsc2U7XG5cbiAgdGhpcy5kZWNvZGVyID0gbnVsbDtcbiAgdGhpcy5lbmNvZGluZyA9IG51bGw7XG4gIGlmIChvcHRpb25zLmVuY29kaW5nKSB7XG4gICAgaWYgKCFTdHJpbmdEZWNvZGVyKSBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgICB0aGlzLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihvcHRpb25zLmVuY29kaW5nKTtcbiAgICB0aGlzLmVuY29kaW5nID0gb3B0aW9ucy5lbmNvZGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBSZWFkYWJsZShvcHRpb25zKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSkgcmV0dXJuIG5ldyBSZWFkYWJsZShvcHRpb25zKTtcblxuICB0aGlzLl9yZWFkYWJsZVN0YXRlID0gbmV3IFJlYWRhYmxlU3RhdGUob3B0aW9ucywgdGhpcyk7XG5cbiAgLy8gbGVnYWN5XG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuXG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLnJlYWQgPT09ICdmdW5jdGlvbicpIHRoaXMuX3JlYWQgPSBvcHRpb25zLnJlYWQ7XG5cbiAgU3RyZWFtLmNhbGwodGhpcyk7XG59XG5cbi8vIE1hbnVhbGx5IHNob3ZlIHNvbWV0aGluZyBpbnRvIHRoZSByZWFkKCkgYnVmZmVyLlxuLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIGhpZ2hXYXRlck1hcmsgaGFzIG5vdCBiZWVuIGhpdCB5ZXQsXG4vLyBzaW1pbGFyIHRvIGhvdyBXcml0YWJsZS53cml0ZSgpIHJldHVybnMgdHJ1ZSBpZiB5b3Ugc2hvdWxkXG4vLyB3cml0ZSgpIHNvbWUgbW9yZS5cblJlYWRhYmxlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuXG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBlbmNvZGluZyB8fCBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7XG4gICAgaWYgKGVuY29kaW5nICE9PSBzdGF0ZS5lbmNvZGluZykge1xuICAgICAgY2h1bmsgPSBidWZmZXJTaGltLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgICAgIGVuY29kaW5nID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgc3RhdGUsIGNodW5rLCBlbmNvZGluZywgZmFsc2UpO1xufTtcblxuLy8gVW5zaGlmdCBzaG91bGQgKmFsd2F5cyogYmUgc29tZXRoaW5nIGRpcmVjdGx5IG91dCBvZiByZWFkKClcblJlYWRhYmxlLnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24gKGNodW5rKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIHN0YXRlLCBjaHVuaywgJycsIHRydWUpO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlLmlzUGF1c2VkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID09PSBmYWxzZTtcbn07XG5cbmZ1bmN0aW9uIHJlYWRhYmxlQWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGVuY29kaW5nLCBhZGRUb0Zyb250KSB7XG4gIHZhciBlciA9IGNodW5rSW52YWxpZChzdGF0ZSwgY2h1bmspO1xuICBpZiAoZXIpIHtcbiAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gIH0gZWxzZSBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKTtcbiAgfSBlbHNlIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rICYmIGNodW5rLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoc3RhdGUuZW5kZWQgJiYgIWFkZFRvRnJvbnQpIHtcbiAgICAgIHZhciBlID0gbmV3IEVycm9yKCdzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRicpO1xuICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZSk7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5lbmRFbWl0dGVkICYmIGFkZFRvRnJvbnQpIHtcbiAgICAgIHZhciBfZSA9IG5ldyBFcnJvcignc3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQnKTtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIF9lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNraXBBZGQ7XG4gICAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhYWRkVG9Gcm9udCAmJiAhZW5jb2RpbmcpIHtcbiAgICAgICAgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcbiAgICAgICAgc2tpcEFkZCA9ICFzdGF0ZS5vYmplY3RNb2RlICYmIGNodW5rLmxlbmd0aCA9PT0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFhZGRUb0Zyb250KSBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG5cbiAgICAgIC8vIERvbid0IGFkZCB0byB0aGUgYnVmZmVyIGlmIHdlJ3ZlIGRlY29kZWQgdG8gYW4gZW1wdHkgc3RyaW5nIGNodW5rIGFuZFxuICAgICAgLy8gd2UncmUgbm90IGluIG9iamVjdCBtb2RlXG4gICAgICBpZiAoIXNraXBBZGQpIHtcbiAgICAgICAgLy8gaWYgd2Ugd2FudCB0aGUgZGF0YSBub3csIGp1c3QgZW1pdCBpdC5cbiAgICAgICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmICFzdGF0ZS5zeW5jKSB7XG4gICAgICAgICAgc3RyZWFtLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgICAgc3RyZWFtLnJlYWQoMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gdXBkYXRlIHRoZSBidWZmZXIgaW5mby5cbiAgICAgICAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgaWYgKGFkZFRvRnJvbnQpIHN0YXRlLmJ1ZmZlci51bnNoaWZ0KGNodW5rKTtlbHNlIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcblxuICAgICAgICAgIGlmIChzdGF0ZS5uZWVkUmVhZGFibGUpIGVtaXRSZWFkYWJsZShzdHJlYW0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCFhZGRUb0Zyb250KSB7XG4gICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIG5lZWRNb3JlRGF0YShzdGF0ZSk7XG59XG5cbi8vIGlmIGl0J3MgcGFzdCB0aGUgaGlnaCB3YXRlciBtYXJrLCB3ZSBjYW4gcHVzaCBpbiBzb21lIG1vcmUuXG4vLyBBbHNvLCBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0LCB3ZSBjYW4gc3RhbmQgc29tZVxuLy8gbW9yZSBieXRlcy4gIFRoaXMgaXMgdG8gd29yayBhcm91bmQgY2FzZXMgd2hlcmUgaHdtPTAsXG4vLyBzdWNoIGFzIHRoZSByZXBsLiAgQWxzbywgaWYgdGhlIHB1c2goKSB0cmlnZ2VyZWQgYVxuLy8gcmVhZGFibGUgZXZlbnQsIGFuZCB0aGUgdXNlciBjYWxsZWQgcmVhZChsYXJnZU51bWJlcikgc3VjaCB0aGF0XG4vLyBuZWVkUmVhZGFibGUgd2FzIHNldCwgdGhlbiB3ZSBvdWdodCB0byBwdXNoIG1vcmUsIHNvIHRoYXQgYW5vdGhlclxuLy8gJ3JlYWRhYmxlJyBldmVudCB3aWxsIGJlIHRyaWdnZXJlZC5cbmZ1bmN0aW9uIG5lZWRNb3JlRGF0YShzdGF0ZSkge1xuICByZXR1cm4gIXN0YXRlLmVuZGVkICYmIChzdGF0ZS5uZWVkUmVhZGFibGUgfHwgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyayB8fCBzdGF0ZS5sZW5ndGggPT09IDApO1xufVxuXG4vLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cblJlYWRhYmxlLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgaWYgKCFTdHJpbmdEZWNvZGVyKSBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoZW5jKTtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA9IGVuYztcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBEb24ndCByYWlzZSB0aGUgaHdtID4gOE1CXG52YXIgTUFYX0hXTSA9IDB4ODAwMDAwO1xuZnVuY3Rpb24gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobikge1xuICBpZiAobiA+PSBNQVhfSFdNKSB7XG4gICAgbiA9IE1BWF9IV007XG4gIH0gZWxzZSB7XG4gICAgLy8gR2V0IHRoZSBuZXh0IGhpZ2hlc3QgcG93ZXIgb2YgMiB0byBwcmV2ZW50IGluY3JlYXNpbmcgaHdtIGV4Y2Vzc2l2ZWx5IGluXG4gICAgLy8gdGlueSBhbW91bnRzXG4gICAgbi0tO1xuICAgIG4gfD0gbiA+Pj4gMTtcbiAgICBuIHw9IG4gPj4+IDI7XG4gICAgbiB8PSBuID4+PiA0O1xuICAgIG4gfD0gbiA+Pj4gODtcbiAgICBuIHw9IG4gPj4+IDE2O1xuICAgIG4rKztcbiAgfVxuICByZXR1cm4gbjtcbn1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKSB7XG4gIGlmIChuIDw9IDAgfHwgc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKSByZXR1cm4gMDtcbiAgaWYgKHN0YXRlLm9iamVjdE1vZGUpIHJldHVybiAxO1xuICBpZiAobiAhPT0gbikge1xuICAgIC8vIE9ubHkgZmxvdyBvbmUgYnVmZmVyIGF0IGEgdGltZVxuICAgIGlmIChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCkgcmV0dXJuIHN0YXRlLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoO2Vsc2UgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbiAgfVxuICAvLyBJZiB3ZSdyZSBhc2tpbmcgZm9yIG1vcmUgdGhhbiB0aGUgY3VycmVudCBod20sIHRoZW4gcmFpc2UgdGhlIGh3bS5cbiAgaWYgKG4gPiBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSBzdGF0ZS5oaWdoV2F0ZXJNYXJrID0gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobik7XG4gIGlmIChuIDw9IHN0YXRlLmxlbmd0aCkgcmV0dXJuIG47XG4gIC8vIERvbid0IGhhdmUgZW5vdWdoXG4gIGlmICghc3RhdGUuZW5kZWQpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIHJldHVybiAwO1xuICB9XG4gIHJldHVybiBzdGF0ZS5sZW5ndGg7XG59XG5cbi8vIHlvdSBjYW4gb3ZlcnJpZGUgZWl0aGVyIHRoaXMgbWV0aG9kLCBvciB0aGUgYXN5bmMgX3JlYWQobikgYmVsb3cuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIGRlYnVnKCdyZWFkJywgbik7XG4gIG4gPSBwYXJzZUludChuLCAxMCk7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBuT3JpZyA9IG47XG5cbiAgaWYgKG4gIT09IDApIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuXG4gIC8vIGlmIHdlJ3JlIGRvaW5nIHJlYWQoMCkgdG8gdHJpZ2dlciBhIHJlYWRhYmxlIGV2ZW50LCBidXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGEgYnVuY2ggb2YgZGF0YSBpbiB0aGUgYnVmZmVyLCB0aGVuIGp1c3QgdHJpZ2dlclxuICAvLyB0aGUgJ3JlYWRhYmxlJyBldmVudCBhbmQgbW92ZSBvbi5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUubmVlZFJlYWRhYmxlICYmIChzdGF0ZS5sZW5ndGggPj0gc3RhdGUuaGlnaFdhdGVyTWFyayB8fCBzdGF0ZS5lbmRlZCkpIHtcbiAgICBkZWJ1ZygncmVhZDogZW1pdFJlYWRhYmxlJywgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZCk7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkgZW5kUmVhZGFibGUodGhpcyk7ZWxzZSBlbWl0UmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBuID0gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSk7XG5cbiAgLy8gaWYgd2UndmUgZW5kZWQsIGFuZCB3ZSdyZSBub3cgY2xlYXIsIHRoZW4gZmluaXNoIGl0IHVwLlxuICBpZiAobiA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkge1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIGVuZFJlYWRhYmxlKHRoaXMpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQWxsIHRoZSBhY3R1YWwgY2h1bmsgZ2VuZXJhdGlvbiBsb2dpYyBuZWVkcyB0byBiZVxuICAvLyAqYmVsb3cqIHRoZSBjYWxsIHRvIF9yZWFkLiAgVGhlIHJlYXNvbiBpcyB0aGF0IGluIGNlcnRhaW5cbiAgLy8gc3ludGhldGljIHN0cmVhbSBjYXNlcywgc3VjaCBhcyBwYXNzdGhyb3VnaCBzdHJlYW1zLCBfcmVhZFxuICAvLyBtYXkgYmUgYSBjb21wbGV0ZWx5IHN5bmNocm9ub3VzIG9wZXJhdGlvbiB3aGljaCBtYXkgY2hhbmdlXG4gIC8vIHRoZSBzdGF0ZSBvZiB0aGUgcmVhZCBidWZmZXIsIHByb3ZpZGluZyBlbm91Z2ggZGF0YSB3aGVuXG4gIC8vIGJlZm9yZSB0aGVyZSB3YXMgKm5vdCogZW5vdWdoLlxuICAvL1xuICAvLyBTbywgdGhlIHN0ZXBzIGFyZTpcbiAgLy8gMS4gRmlndXJlIG91dCB3aGF0IHRoZSBzdGF0ZSBvZiB0aGluZ3Mgd2lsbCBiZSBhZnRlciB3ZSBkb1xuICAvLyBhIHJlYWQgZnJvbSB0aGUgYnVmZmVyLlxuICAvL1xuICAvLyAyLiBJZiB0aGF0IHJlc3VsdGluZyBzdGF0ZSB3aWxsIHRyaWdnZXIgYSBfcmVhZCwgdGhlbiBjYWxsIF9yZWFkLlxuICAvLyBOb3RlIHRoYXQgdGhpcyBtYXkgYmUgYXN5bmNocm9ub3VzLCBvciBzeW5jaHJvbm91cy4gIFllcywgaXQgaXNcbiAgLy8gZGVlcGx5IHVnbHkgdG8gd3JpdGUgQVBJcyB0aGlzIHdheSwgYnV0IHRoYXQgc3RpbGwgZG9lc24ndCBtZWFuXG4gIC8vIHRoYXQgdGhlIFJlYWRhYmxlIGNsYXNzIHNob3VsZCBiZWhhdmUgaW1wcm9wZXJseSwgYXMgc3RyZWFtcyBhcmVcbiAgLy8gZGVzaWduZWQgdG8gYmUgc3luYy9hc3luYyBhZ25vc3RpYy5cbiAgLy8gVGFrZSBub3RlIGlmIHRoZSBfcmVhZCBjYWxsIGlzIHN5bmMgb3IgYXN5bmMgKGllLCBpZiB0aGUgcmVhZCBjYWxsXG4gIC8vIGhhcyByZXR1cm5lZCB5ZXQpLCBzbyB0aGF0IHdlIGtub3cgd2hldGhlciBvciBub3QgaXQncyBzYWZlIHRvIGVtaXRcbiAgLy8gJ3JlYWRhYmxlJyBldGMuXG4gIC8vXG4gIC8vIDMuIEFjdHVhbGx5IHB1bGwgdGhlIHJlcXVlc3RlZCBjaHVua3Mgb3V0IG9mIHRoZSBidWZmZXIgYW5kIHJldHVybi5cblxuICAvLyBpZiB3ZSBuZWVkIGEgcmVhZGFibGUgZXZlbnQsIHRoZW4gd2UgbmVlZCB0byBkbyBzb21lIHJlYWRpbmcuXG4gIHZhciBkb1JlYWQgPSBzdGF0ZS5uZWVkUmVhZGFibGU7XG4gIGRlYnVnKCduZWVkIHJlYWRhYmxlJywgZG9SZWFkKTtcblxuICAvLyBpZiB3ZSBjdXJyZW50bHkgaGF2ZSBsZXNzIHRoYW4gdGhlIGhpZ2hXYXRlck1hcmssIHRoZW4gYWxzbyByZWFkIHNvbWVcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCB8fCBzdGF0ZS5sZW5ndGggLSBuIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRvUmVhZCA9IHRydWU7XG4gICAgZGVidWcoJ2xlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrJywgZG9SZWFkKTtcbiAgfVxuXG4gIC8vIGhvd2V2ZXIsIGlmIHdlJ3ZlIGVuZGVkLCB0aGVuIHRoZXJlJ3Mgbm8gcG9pbnQsIGFuZCBpZiB3ZSdyZSBhbHJlYWR5XG4gIC8vIHJlYWRpbmcsIHRoZW4gaXQncyB1bm5lY2Vzc2FyeS5cbiAgaWYgKHN0YXRlLmVuZGVkIHx8IHN0YXRlLnJlYWRpbmcpIHtcbiAgICBkb1JlYWQgPSBmYWxzZTtcbiAgICBkZWJ1ZygncmVhZGluZyBvciBlbmRlZCcsIGRvUmVhZCk7XG4gIH0gZWxzZSBpZiAoZG9SZWFkKSB7XG4gICAgZGVidWcoJ2RvIHJlYWQnKTtcbiAgICBzdGF0ZS5yZWFkaW5nID0gdHJ1ZTtcbiAgICBzdGF0ZS5zeW5jID0gdHJ1ZTtcbiAgICAvLyBpZiB0aGUgbGVuZ3RoIGlzIGN1cnJlbnRseSB6ZXJvLCB0aGVuIHdlICpuZWVkKiBhIHJlYWRhYmxlIGV2ZW50LlxuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgLy8gY2FsbCBpbnRlcm5hbCByZWFkIG1ldGhvZFxuICAgIHRoaXMuX3JlYWQoc3RhdGUuaGlnaFdhdGVyTWFyayk7XG4gICAgc3RhdGUuc3luYyA9IGZhbHNlO1xuICAgIC8vIElmIF9yZWFkIHB1c2hlZCBkYXRhIHN5bmNocm9ub3VzbHksIHRoZW4gYHJlYWRpbmdgIHdpbGwgYmUgZmFsc2UsXG4gICAgLy8gYW5kIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgaG93IG11Y2ggZGF0YSB3ZSBjYW4gcmV0dXJuIHRvIHRoZSB1c2VyLlxuICAgIGlmICghc3RhdGUucmVhZGluZykgbiA9IGhvd011Y2hUb1JlYWQobk9yaWcsIHN0YXRlKTtcbiAgfVxuXG4gIHZhciByZXQ7XG4gIGlmIChuID4gMCkgcmV0ID0gZnJvbUxpc3Qobiwgc3RhdGUpO2Vsc2UgcmV0ID0gbnVsbDtcblxuICBpZiAocmV0ID09PSBudWxsKSB7XG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBuID0gMDtcbiAgfSBlbHNlIHtcbiAgICBzdGF0ZS5sZW5ndGggLT0gbjtcbiAgfVxuXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAvLyBJZiB3ZSBoYXZlIG5vdGhpbmcgaW4gdGhlIGJ1ZmZlciwgdGhlbiB3ZSB3YW50IHRvIGtub3dcbiAgICAvLyBhcyBzb29uIGFzIHdlICpkbyogZ2V0IHNvbWV0aGluZyBpbnRvIHRoZSBidWZmZXIuXG4gICAgaWYgKCFzdGF0ZS5lbmRlZCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAgIC8vIElmIHdlIHRyaWVkIHRvIHJlYWQoKSBwYXN0IHRoZSBFT0YsIHRoZW4gZW1pdCBlbmQgb24gdGhlIG5leHQgdGljay5cbiAgICBpZiAobk9yaWcgIT09IG4gJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpO1xuICB9XG5cbiAgaWYgKHJldCAhPT0gbnVsbCkgdGhpcy5lbWl0KCdkYXRhJywgcmV0KTtcblxuICByZXR1cm4gcmV0O1xufTtcblxuZnVuY3Rpb24gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuaykge1xuICB2YXIgZXIgPSBudWxsO1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihjaHVuaykgJiYgdHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiBjaHVuayAhPT0gbnVsbCAmJiBjaHVuayAhPT0gdW5kZWZpbmVkICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rJyk7XG4gIH1cbiAgcmV0dXJuIGVyO1xufVxuXG5mdW5jdGlvbiBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmVuZGVkKSByZXR1cm47XG4gIGlmIChzdGF0ZS5kZWNvZGVyKSB7XG4gICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSB7XG4gICAgICBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG4gICAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgfVxuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcblxuICAvLyBlbWl0ICdyZWFkYWJsZScgbm93IHRvIG1ha2Ugc3VyZSBpdCBnZXRzIHBpY2tlZCB1cC5cbiAgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG59XG5cbi8vIERvbid0IGVtaXQgcmVhZGFibGUgcmlnaHQgYXdheSBpbiBzeW5jIG1vZGUsIGJlY2F1c2UgdGhpcyBjYW4gdHJpZ2dlclxuLy8gYW5vdGhlciByZWFkKCkgY2FsbCA9PiBzdGFjayBvdmVyZmxvdy4gIFRoaXMgd2F5LCBpdCBtaWdodCB0cmlnZ2VyXG4vLyBhIG5leHRUaWNrIHJlY3Vyc2lvbiB3YXJuaW5nLCBidXQgdGhhdCdzIG5vdCBzbyBiYWQuXG5mdW5jdGlvbiBlbWl0UmVhZGFibGUoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIGlmICghc3RhdGUuZW1pdHRlZFJlYWRhYmxlKSB7XG4gICAgZGVidWcoJ2VtaXRSZWFkYWJsZScsIHN0YXRlLmZsb3dpbmcpO1xuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgaWYgKHN0YXRlLnN5bmMpIHByb2Nlc3NOZXh0VGljayhlbWl0UmVhZGFibGVfLCBzdHJlYW0pO2Vsc2UgZW1pdFJlYWRhYmxlXyhzdHJlYW0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZV8oc3RyZWFtKSB7XG4gIGRlYnVnKCdlbWl0IHJlYWRhYmxlJyk7XG4gIHN0cmVhbS5lbWl0KCdyZWFkYWJsZScpO1xuICBmbG93KHN0cmVhbSk7XG59XG5cbi8vIGF0IHRoaXMgcG9pbnQsIHRoZSB1c2VyIGhhcyBwcmVzdW1hYmx5IHNlZW4gdGhlICdyZWFkYWJsZScgZXZlbnQsXG4vLyBhbmQgY2FsbGVkIHJlYWQoKSB0byBjb25zdW1lIHNvbWUgZGF0YS4gIHRoYXQgbWF5IGhhdmUgdHJpZ2dlcmVkXG4vLyBpbiB0dXJuIGFub3RoZXIgX3JlYWQobikgY2FsbCwgaW4gd2hpY2ggY2FzZSByZWFkaW5nID0gdHJ1ZSBpZlxuLy8gaXQncyBpbiBwcm9ncmVzcy5cbi8vIEhvd2V2ZXIsIGlmIHdlJ3JlIG5vdCBlbmRlZCwgb3IgcmVhZGluZywgYW5kIHRoZSBsZW5ndGggPCBod20sXG4vLyB0aGVuIGdvIGFoZWFkIGFuZCB0cnkgdG8gcmVhZCBzb21lIG1vcmUgcHJlZW1wdGl2ZWx5LlxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZ01vcmUpIHtcbiAgICBzdGF0ZS5yZWFkaW5nTW9yZSA9IHRydWU7XG4gICAgcHJvY2Vzc05leHRUaWNrKG1heWJlUmVhZE1vcmVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlXyhzdHJlYW0sIHN0YXRlKSB7XG4gIHZhciBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gIHdoaWxlICghc3RhdGUucmVhZGluZyAmJiAhc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUuZW5kZWQgJiYgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRlYnVnKCdtYXliZVJlYWRNb3JlIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICAgIGlmIChsZW4gPT09IHN0YXRlLmxlbmd0aClcbiAgICAgIC8vIGRpZG4ndCBnZXQgYW55IGRhdGEsIHN0b3Agc3Bpbm5pbmcuXG4gICAgICBicmVhaztlbHNlIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgfVxuICBzdGF0ZS5yZWFkaW5nTW9yZSA9IGZhbHNlO1xufVxuXG4vLyBhYnN0cmFjdCBtZXRob2QuICB0byBiZSBvdmVycmlkZGVuIGluIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyBjYWxsIGNiKGVyLCBkYXRhKSB3aGVyZSBkYXRhIGlzIDw9IG4gaW4gbGVuZ3RoLlxuLy8gZm9yIHZpcnR1YWwgKG5vbi1zdHJpbmcsIG5vbi1idWZmZXIpIHN0cmVhbXMsIFwibGVuZ3RoXCIgaXMgc29tZXdoYXRcbi8vIGFyYml0cmFyeSwgYW5kIHBlcmhhcHMgbm90IHZlcnkgbWVhbmluZ2Z1bC5cblJlYWRhYmxlLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ19yZWFkKCkgaXMgbm90IGltcGxlbWVudGVkJykpO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoZGVzdCwgcGlwZU9wdHMpIHtcbiAgdmFyIHNyYyA9IHRoaXM7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgc3dpdGNoIChzdGF0ZS5waXBlc0NvdW50KSB7XG4gICAgY2FzZSAwOlxuICAgICAgc3RhdGUucGlwZXMgPSBkZXN0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgc3RhdGUucGlwZXMgPSBbc3RhdGUucGlwZXMsIGRlc3RdO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN0YXRlLnBpcGVzLnB1c2goZGVzdCk7XG4gICAgICBicmVhaztcbiAgfVxuICBzdGF0ZS5waXBlc0NvdW50ICs9IDE7XG4gIGRlYnVnKCdwaXBlIGNvdW50PSVkIG9wdHM9JWonLCBzdGF0ZS5waXBlc0NvdW50LCBwaXBlT3B0cyk7XG5cbiAgdmFyIGRvRW5kID0gKCFwaXBlT3B0cyB8fCBwaXBlT3B0cy5lbmQgIT09IGZhbHNlKSAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZG91dCAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZGVycjtcblxuICB2YXIgZW5kRm4gPSBkb0VuZCA/IG9uZW5kIDogY2xlYW51cDtcbiAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHByb2Nlc3NOZXh0VGljayhlbmRGbik7ZWxzZSBzcmMub25jZSgnZW5kJywgZW5kRm4pO1xuXG4gIGRlc3Qub24oJ3VucGlwZScsIG9udW5waXBlKTtcbiAgZnVuY3Rpb24gb251bnBpcGUocmVhZGFibGUpIHtcbiAgICBkZWJ1Zygnb251bnBpcGUnKTtcbiAgICBpZiAocmVhZGFibGUgPT09IHNyYykge1xuICAgICAgY2xlYW51cCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgIGRlYnVnKCdvbmVuZCcpO1xuICAgIGRlc3QuZW5kKCk7XG4gIH1cblxuICAvLyB3aGVuIHRoZSBkZXN0IGRyYWlucywgaXQgcmVkdWNlcyB0aGUgYXdhaXREcmFpbiBjb3VudGVyXG4gIC8vIG9uIHRoZSBzb3VyY2UuICBUaGlzIHdvdWxkIGJlIG1vcmUgZWxlZ2FudCB3aXRoIGEgLm9uY2UoKVxuICAvLyBoYW5kbGVyIGluIGZsb3coKSwgYnV0IGFkZGluZyBhbmQgcmVtb3ZpbmcgcmVwZWF0ZWRseSBpc1xuICAvLyB0b28gc2xvdy5cbiAgdmFyIG9uZHJhaW4gPSBwaXBlT25EcmFpbihzcmMpO1xuICBkZXN0Lm9uKCdkcmFpbicsIG9uZHJhaW4pO1xuXG4gIHZhciBjbGVhbmVkVXAgPSBmYWxzZTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBkZWJ1ZygnY2xlYW51cCcpO1xuICAgIC8vIGNsZWFudXAgZXZlbnQgaGFuZGxlcnMgb25jZSB0aGUgcGlwZSBpcyBicm9rZW5cbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcigndW5waXBlJywgb251bnBpcGUpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgY2xlYW51cCk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKTtcblxuICAgIGNsZWFuZWRVcCA9IHRydWU7XG5cbiAgICAvLyBpZiB0aGUgcmVhZGVyIGlzIHdhaXRpbmcgZm9yIGEgZHJhaW4gZXZlbnQgZnJvbSB0aGlzXG4gICAgLy8gc3BlY2lmaWMgd3JpdGVyLCB0aGVuIGl0IHdvdWxkIGNhdXNlIGl0IHRvIG5ldmVyIHN0YXJ0XG4gICAgLy8gZmxvd2luZyBhZ2Fpbi5cbiAgICAvLyBTbywgaWYgdGhpcyBpcyBhd2FpdGluZyBhIGRyYWluLCB0aGVuIHdlIGp1c3QgY2FsbCBpdCBub3cuXG4gICAgLy8gSWYgd2UgZG9uJ3Qga25vdywgdGhlbiBhc3N1bWUgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igb25lLlxuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluICYmICghZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbikpIG9uZHJhaW4oKTtcbiAgfVxuXG4gIC8vIElmIHRoZSB1c2VyIHB1c2hlcyBtb3JlIGRhdGEgd2hpbGUgd2UncmUgd3JpdGluZyB0byBkZXN0IHRoZW4gd2UnbGwgZW5kIHVwXG4gIC8vIGluIG9uZGF0YSBhZ2Fpbi4gSG93ZXZlciwgd2Ugb25seSB3YW50IHRvIGluY3JlYXNlIGF3YWl0RHJhaW4gb25jZSBiZWNhdXNlXG4gIC8vIGRlc3Qgd2lsbCBvbmx5IGVtaXQgb25lICdkcmFpbicgZXZlbnQgZm9yIHRoZSBtdWx0aXBsZSB3cml0ZXMuXG4gIC8vID0+IEludHJvZHVjZSBhIGd1YXJkIG9uIGluY3JlYXNpbmcgYXdhaXREcmFpbi5cbiAgdmFyIGluY3JlYXNlZEF3YWl0RHJhaW4gPSBmYWxzZTtcbiAgc3JjLm9uKCdkYXRhJywgb25kYXRhKTtcbiAgZnVuY3Rpb24gb25kYXRhKGNodW5rKSB7XG4gICAgZGVidWcoJ29uZGF0YScpO1xuICAgIGluY3JlYXNlZEF3YWl0RHJhaW4gPSBmYWxzZTtcbiAgICB2YXIgcmV0ID0gZGVzdC53cml0ZShjaHVuayk7XG4gICAgaWYgKGZhbHNlID09PSByZXQgJiYgIWluY3JlYXNlZEF3YWl0RHJhaW4pIHtcbiAgICAgIC8vIElmIHRoZSB1c2VyIHVucGlwZWQgZHVyaW5nIGBkZXN0LndyaXRlKClgLCBpdCBpcyBwb3NzaWJsZVxuICAgICAgLy8gdG8gZ2V0IHN0dWNrIGluIGEgcGVybWFuZW50bHkgcGF1c2VkIHN0YXRlIGlmIHRoYXQgd3JpdGVcbiAgICAgIC8vIGFsc28gcmV0dXJuZWQgZmFsc2UuXG4gICAgICAvLyA9PiBDaGVjayB3aGV0aGVyIGBkZXN0YCBpcyBzdGlsbCBhIHBpcGluZyBkZXN0aW5hdGlvbi5cbiAgICAgIGlmICgoc3RhdGUucGlwZXNDb3VudCA9PT0gMSAmJiBzdGF0ZS5waXBlcyA9PT0gZGVzdCB8fCBzdGF0ZS5waXBlc0NvdW50ID4gMSAmJiBpbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KSAhPT0gLTEpICYmICFjbGVhbmVkVXApIHtcbiAgICAgICAgZGVidWcoJ2ZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZScsIHNyYy5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKTtcbiAgICAgICAgc3JjLl9yZWFkYWJsZVN0YXRlLmF3YWl0RHJhaW4rKztcbiAgICAgICAgaW5jcmVhc2VkQXdhaXREcmFpbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBzcmMucGF1c2UoKTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgZGVzdCBoYXMgYW4gZXJyb3IsIHRoZW4gc3RvcCBwaXBpbmcgaW50byBpdC5cbiAgLy8gaG93ZXZlciwgZG9uJ3Qgc3VwcHJlc3MgdGhlIHRocm93aW5nIGJlaGF2aW9yIGZvciB0aGlzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgZGVidWcoJ29uZXJyb3InLCBlcik7XG4gICAgdW5waXBlKCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBpZiAoRUVsaXN0ZW5lckNvdW50KGRlc3QsICdlcnJvcicpID09PSAwKSBkZXN0LmVtaXQoJ2Vycm9yJywgZXIpO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIG91ciBlcnJvciBoYW5kbGVyIGlzIGF0dGFjaGVkIGJlZm9yZSB1c2VybGFuZCBvbmVzLlxuICBwcmVwZW5kTGlzdGVuZXIoZGVzdCwgJ2Vycm9yJywgb25lcnJvcik7XG5cbiAgLy8gQm90aCBjbG9zZSBhbmQgZmluaXNoIHNob3VsZCB0cmlnZ2VyIHVucGlwZSwgYnV0IG9ubHkgb25jZS5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdjbG9zZScsIG9uY2xvc2UpO1xuICBmdW5jdGlvbiBvbmZpbmlzaCgpIHtcbiAgICBkZWJ1Zygnb25maW5pc2gnKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnZmluaXNoJywgb25maW5pc2gpO1xuXG4gIGZ1bmN0aW9uIHVucGlwZSgpIHtcbiAgICBkZWJ1ZygndW5waXBlJyk7XG4gICAgc3JjLnVucGlwZShkZXN0KTtcbiAgfVxuXG4gIC8vIHRlbGwgdGhlIGRlc3QgdGhhdCBpdCdzIGJlaW5nIHBpcGVkIHRvXG4gIGRlc3QuZW1pdCgncGlwZScsIHNyYyk7XG5cbiAgLy8gc3RhcnQgdGhlIGZsb3cgaWYgaXQgaGFzbid0IGJlZW4gc3RhcnRlZCBhbHJlYWR5LlxuICBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGlwZSByZXN1bWUnKTtcbiAgICBzcmMucmVzdW1lKCk7XG4gIH1cblxuICByZXR1cm4gZGVzdDtcbn07XG5cbmZ1bmN0aW9uIHBpcGVPbkRyYWluKHNyYykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGF0ZSA9IHNyYy5fcmVhZGFibGVTdGF0ZTtcbiAgICBkZWJ1ZygncGlwZU9uRHJhaW4nLCBzdGF0ZS5hd2FpdERyYWluKTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbikgc3RhdGUuYXdhaXREcmFpbi0tO1xuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluID09PSAwICYmIEVFbGlzdGVuZXJDb3VudChzcmMsICdkYXRhJykpIHtcbiAgICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuICAgICAgZmxvdyhzcmMpO1xuICAgIH1cbiAgfTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLnVucGlwZSA9IGZ1bmN0aW9uIChkZXN0KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgLy8gaWYgd2UncmUgbm90IHBpcGluZyBhbnl3aGVyZSwgdGhlbiBkbyBub3RoaW5nLlxuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMCkgcmV0dXJuIHRoaXM7XG5cbiAgLy8ganVzdCBvbmUgZGVzdGluYXRpb24uICBtb3N0IGNvbW1vbiBjYXNlLlxuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMSkge1xuICAgIC8vIHBhc3NlZCBpbiBvbmUsIGJ1dCBpdCdzIG5vdCB0aGUgcmlnaHQgb25lLlxuICAgIGlmIChkZXN0ICYmIGRlc3QgIT09IHN0YXRlLnBpcGVzKSByZXR1cm4gdGhpcztcblxuICAgIGlmICghZGVzdCkgZGVzdCA9IHN0YXRlLnBpcGVzO1xuXG4gICAgLy8gZ290IGEgbWF0Y2guXG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICBpZiAoZGVzdCkgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHNsb3cgY2FzZS4gbXVsdGlwbGUgcGlwZSBkZXN0aW5hdGlvbnMuXG5cbiAgaWYgKCFkZXN0KSB7XG4gICAgLy8gcmVtb3ZlIGFsbC5cbiAgICB2YXIgZGVzdHMgPSBzdGF0ZS5waXBlcztcbiAgICB2YXIgbGVuID0gc3RhdGUucGlwZXNDb3VudDtcbiAgICBzdGF0ZS5waXBlcyA9IG51bGw7XG4gICAgc3RhdGUucGlwZXNDb3VudCA9IDA7XG4gICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgZGVzdHNbaV0uZW1pdCgndW5waXBlJywgdGhpcyk7XG4gICAgfXJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gdHJ5IHRvIGZpbmQgdGhlIHJpZ2h0IG9uZS5cbiAgdmFyIGluZGV4ID0gaW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdCk7XG4gIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiB0aGlzO1xuXG4gIHN0YXRlLnBpcGVzLnNwbGljZShpbmRleCwgMSk7XG4gIHN0YXRlLnBpcGVzQ291bnQgLT0gMTtcbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHN0YXRlLnBpcGVzID0gc3RhdGUucGlwZXNbMF07XG5cbiAgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIHNldCB1cCBkYXRhIGV2ZW50cyBpZiB0aGV5IGFyZSBhc2tlZCBmb3Jcbi8vIEVuc3VyZSByZWFkYWJsZSBsaXN0ZW5lcnMgZXZlbnR1YWxseSBnZXQgc29tZXRoaW5nXG5SZWFkYWJsZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIHZhciByZXMgPSBTdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwodGhpcywgZXYsIGZuKTtcblxuICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgIC8vIFN0YXJ0IGZsb3dpbmcgb24gbmV4dCB0aWNrIGlmIHN0cmVhbSBpc24ndCBleHBsaWNpdGx5IHBhdXNlZFxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB0aGlzLnJlc3VtZSgpO1xuICB9IGVsc2UgaWYgKGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7XG4gICAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgICAgIGlmICghc3RhdGUucmVhZGluZykge1xuICAgICAgICBwcm9jZXNzTmV4dFRpY2soblJlYWRpbmdOZXh0VGljaywgdGhpcyk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmxlbmd0aCkge1xuICAgICAgICBlbWl0UmVhZGFibGUodGhpcywgc3RhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXM7XG59O1xuUmVhZGFibGUucHJvdG90eXBlLmFkZExpc3RlbmVyID0gUmVhZGFibGUucHJvdG90eXBlLm9uO1xuXG5mdW5jdGlvbiBuUmVhZGluZ05leHRUaWNrKHNlbGYpIHtcbiAgZGVidWcoJ3JlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCcpO1xuICBzZWxmLnJlYWQoMCk7XG59XG5cbi8vIHBhdXNlKCkgYW5kIHJlc3VtZSgpIGFyZSByZW1uYW50cyBvZiB0aGUgbGVnYWN5IHJlYWRhYmxlIHN0cmVhbSBBUElcbi8vIElmIHRoZSB1c2VyIHVzZXMgdGhlbSwgdGhlbiBzd2l0Y2ggaW50byBvbGQgbW9kZS5cblJlYWRhYmxlLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdyZXN1bWUnKTtcbiAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICByZXN1bWUodGhpcywgc3RhdGUpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gcmVzdW1lKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZXN1bWVTY2hlZHVsZWQpIHtcbiAgICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHByb2Nlc3NOZXh0VGljayhyZXN1bWVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXN1bWVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZSByZWFkIDAnKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgfVxuXG4gIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuICBzdGF0ZS5hd2FpdERyYWluID0gMDtcbiAgc3RyZWFtLmVtaXQoJ3Jlc3VtZScpO1xuICBmbG93KHN0cmVhbSk7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5yZWFkaW5nKSBzdHJlYW0ucmVhZCgwKTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1ZygnY2FsbCBwYXVzZSBmbG93aW5nPSVqJywgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKTtcbiAgaWYgKGZhbHNlICE9PSB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGF1c2UnKTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdmbG93Jywgc3RhdGUuZmxvd2luZyk7XG4gIHdoaWxlIChzdGF0ZS5mbG93aW5nICYmIHN0cmVhbS5yZWFkKCkgIT09IG51bGwpIHt9XG59XG5cbi8vIHdyYXAgYW4gb2xkLXN0eWxlIHN0cmVhbSBhcyB0aGUgYXN5bmMgZGF0YSBzb3VyY2UuXG4vLyBUaGlzIGlzICpub3QqIHBhcnQgb2YgdGhlIHJlYWRhYmxlIHN0cmVhbSBpbnRlcmZhY2UuXG4vLyBJdCBpcyBhbiB1Z2x5IHVuZm9ydHVuYXRlIG1lc3Mgb2YgaGlzdG9yeS5cblJlYWRhYmxlLnByb3RvdHlwZS53cmFwID0gZnVuY3Rpb24gKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgcGF1c2VkID0gZmFsc2U7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBlbmQnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSBzZWxmLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIHNlbGYucHVzaChudWxsKTtcbiAgfSk7XG5cbiAgc3RyZWFtLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgZGF0YScpO1xuICAgIGlmIChzdGF0ZS5kZWNvZGVyKSBjaHVuayA9IHN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspO1xuXG4gICAgLy8gZG9uJ3Qgc2tpcCBvdmVyIGZhbHN5IHZhbHVlcyBpbiBvYmplY3RNb2RlXG4gICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgJiYgKGNodW5rID09PSBudWxsIHx8IGNodW5rID09PSB1bmRlZmluZWQpKSByZXR1cm47ZWxzZSBpZiAoIXN0YXRlLm9iamVjdE1vZGUgJiYgKCFjaHVuayB8fCAhY2h1bmsubGVuZ3RoKSkgcmV0dXJuO1xuXG4gICAgdmFyIHJldCA9IHNlbGYucHVzaChjaHVuayk7XG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHByb3h5IGFsbCB0aGUgb3RoZXIgbWV0aG9kcy5cbiAgLy8gaW1wb3J0YW50IHdoZW4gd3JhcHBpbmcgZmlsdGVycyBhbmQgZHVwbGV4ZXMuXG4gIGZvciAodmFyIGkgaW4gc3RyZWFtKSB7XG4gICAgaWYgKHRoaXNbaV0gPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc3RyZWFtW2ldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2ldID0gZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBzdHJlYW1bbWV0aG9kXS5hcHBseShzdHJlYW0sIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICB9KGkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHByb3h5IGNlcnRhaW4gaW1wb3J0YW50IGV2ZW50cy5cbiAgdmFyIGV2ZW50cyA9IFsnZXJyb3InLCAnY2xvc2UnLCAnZGVzdHJveScsICdwYXVzZScsICdyZXN1bWUnXTtcbiAgZm9yRWFjaChldmVudHMsIGZ1bmN0aW9uIChldikge1xuICAgIHN0cmVhbS5vbihldiwgc2VsZi5lbWl0LmJpbmQoc2VsZiwgZXYpKTtcbiAgfSk7XG5cbiAgLy8gd2hlbiB3ZSB0cnkgdG8gY29uc3VtZSBzb21lIG1vcmUgYnl0ZXMsIHNpbXBseSB1bnBhdXNlIHRoZVxuICAvLyB1bmRlcmx5aW5nIHN0cmVhbS5cbiAgc2VsZi5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgX3JlYWQnLCBuKTtcbiAgICBpZiAocGF1c2VkKSB7XG4gICAgICBwYXVzZWQgPSBmYWxzZTtcbiAgICAgIHN0cmVhbS5yZXN1bWUoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHNlbGY7XG59O1xuXG4vLyBleHBvc2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuXG5SZWFkYWJsZS5fZnJvbUxpc3QgPSBmcm9tTGlzdDtcblxuLy8gUGx1Y2sgb2ZmIG4gYnl0ZXMgZnJvbSBhbiBhcnJheSBvZiBidWZmZXJzLlxuLy8gTGVuZ3RoIGlzIHRoZSBjb21iaW5lZCBsZW5ndGhzIG9mIGFsbCB0aGUgYnVmZmVycyBpbiB0aGUgbGlzdC5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gZnJvbUxpc3Qobiwgc3RhdGUpIHtcbiAgLy8gbm90aGluZyBidWZmZXJlZFxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICB2YXIgcmV0O1xuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0ID0gc3RhdGUuYnVmZmVyLnNoaWZ0KCk7ZWxzZSBpZiAoIW4gfHwgbiA+PSBzdGF0ZS5sZW5ndGgpIHtcbiAgICAvLyByZWFkIGl0IGFsbCwgdHJ1bmNhdGUgdGhlIGxpc3RcbiAgICBpZiAoc3RhdGUuZGVjb2RlcikgcmV0ID0gc3RhdGUuYnVmZmVyLmpvaW4oJycpO2Vsc2UgaWYgKHN0YXRlLmJ1ZmZlci5sZW5ndGggPT09IDEpIHJldCA9IHN0YXRlLmJ1ZmZlci5oZWFkLmRhdGE7ZWxzZSByZXQgPSBzdGF0ZS5idWZmZXIuY29uY2F0KHN0YXRlLmxlbmd0aCk7XG4gICAgc3RhdGUuYnVmZmVyLmNsZWFyKCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gcmVhZCBwYXJ0IG9mIGxpc3RcbiAgICByZXQgPSBmcm9tTGlzdFBhcnRpYWwobiwgc3RhdGUuYnVmZmVyLCBzdGF0ZS5kZWNvZGVyKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbi8vIEV4dHJhY3RzIG9ubHkgZW5vdWdoIGJ1ZmZlcmVkIGRhdGEgdG8gc2F0aXNmeSB0aGUgYW1vdW50IHJlcXVlc3RlZC5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gZnJvbUxpc3RQYXJ0aWFsKG4sIGxpc3QsIGhhc1N0cmluZ3MpIHtcbiAgdmFyIHJldDtcbiAgaWYgKG4gPCBsaXN0LmhlYWQuZGF0YS5sZW5ndGgpIHtcbiAgICAvLyBzbGljZSBpcyB0aGUgc2FtZSBmb3IgYnVmZmVycyBhbmQgc3RyaW5nc1xuICAgIHJldCA9IGxpc3QuaGVhZC5kYXRhLnNsaWNlKDAsIG4pO1xuICAgIGxpc3QuaGVhZC5kYXRhID0gbGlzdC5oZWFkLmRhdGEuc2xpY2Uobik7XG4gIH0gZWxzZSBpZiAobiA9PT0gbGlzdC5oZWFkLmRhdGEubGVuZ3RoKSB7XG4gICAgLy8gZmlyc3QgY2h1bmsgaXMgYSBwZXJmZWN0IG1hdGNoXG4gICAgcmV0ID0gbGlzdC5zaGlmdCgpO1xuICB9IGVsc2Uge1xuICAgIC8vIHJlc3VsdCBzcGFucyBtb3JlIHRoYW4gb25lIGJ1ZmZlclxuICAgIHJldCA9IGhhc1N0cmluZ3MgPyBjb3B5RnJvbUJ1ZmZlclN0cmluZyhuLCBsaXN0KSA6IGNvcHlGcm9tQnVmZmVyKG4sIGxpc3QpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbi8vIENvcGllcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgY2hhcmFjdGVycyBmcm9tIHRoZSBsaXN0IG9mIGJ1ZmZlcmVkIGRhdGFcbi8vIGNodW5rcy5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gY29weUZyb21CdWZmZXJTdHJpbmcobiwgbGlzdCkge1xuICB2YXIgcCA9IGxpc3QuaGVhZDtcbiAgdmFyIGMgPSAxO1xuICB2YXIgcmV0ID0gcC5kYXRhO1xuICBuIC09IHJldC5sZW5ndGg7XG4gIHdoaWxlIChwID0gcC5uZXh0KSB7XG4gICAgdmFyIHN0ciA9IHAuZGF0YTtcbiAgICB2YXIgbmIgPSBuID4gc3RyLmxlbmd0aCA/IHN0ci5sZW5ndGggOiBuO1xuICAgIGlmIChuYiA9PT0gc3RyLmxlbmd0aCkgcmV0ICs9IHN0cjtlbHNlIHJldCArPSBzdHIuc2xpY2UoMCwgbik7XG4gICAgbiAtPSBuYjtcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgaWYgKG5iID09PSBzdHIubGVuZ3RoKSB7XG4gICAgICAgICsrYztcbiAgICAgICAgaWYgKHAubmV4dCkgbGlzdC5oZWFkID0gcC5uZXh0O2Vsc2UgbGlzdC5oZWFkID0gbGlzdC50YWlsID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpc3QuaGVhZCA9IHA7XG4gICAgICAgIHAuZGF0YSA9IHN0ci5zbGljZShuYik7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgKytjO1xuICB9XG4gIGxpc3QubGVuZ3RoIC09IGM7XG4gIHJldHVybiByZXQ7XG59XG5cbi8vIENvcGllcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgYnl0ZXMgZnJvbSB0aGUgbGlzdCBvZiBidWZmZXJlZCBkYXRhIGNodW5rcy5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gY29weUZyb21CdWZmZXIobiwgbGlzdCkge1xuICB2YXIgcmV0ID0gYnVmZmVyU2hpbS5hbGxvY1Vuc2FmZShuKTtcbiAgdmFyIHAgPSBsaXN0LmhlYWQ7XG4gIHZhciBjID0gMTtcbiAgcC5kYXRhLmNvcHkocmV0KTtcbiAgbiAtPSBwLmRhdGEubGVuZ3RoO1xuICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgIHZhciBidWYgPSBwLmRhdGE7XG4gICAgdmFyIG5iID0gbiA+IGJ1Zi5sZW5ndGggPyBidWYubGVuZ3RoIDogbjtcbiAgICBidWYuY29weShyZXQsIHJldC5sZW5ndGggLSBuLCAwLCBuYik7XG4gICAgbiAtPSBuYjtcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgaWYgKG5iID09PSBidWYubGVuZ3RoKSB7XG4gICAgICAgICsrYztcbiAgICAgICAgaWYgKHAubmV4dCkgbGlzdC5oZWFkID0gcC5uZXh0O2Vsc2UgbGlzdC5oZWFkID0gbGlzdC50YWlsID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpc3QuaGVhZCA9IHA7XG4gICAgICAgIHAuZGF0YSA9IGJ1Zi5zbGljZShuYik7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgKytjO1xuICB9XG4gIGxpc3QubGVuZ3RoIC09IGM7XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG5cbiAgLy8gSWYgd2UgZ2V0IGhlcmUgYmVmb3JlIGNvbnN1bWluZyBhbGwgdGhlIGJ5dGVzLCB0aGVuIHRoYXQgaXMgYVxuICAvLyBidWcgaW4gbm9kZS4gIFNob3VsZCBuZXZlciBoYXBwZW4uXG4gIGlmIChzdGF0ZS5sZW5ndGggPiAwKSB0aHJvdyBuZXcgRXJyb3IoJ1wiZW5kUmVhZGFibGUoKVwiIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7XG5cbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgIHByb2Nlc3NOZXh0VGljayhlbmRSZWFkYWJsZU5ULCBzdGF0ZSwgc3RyZWFtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZU5UKHN0YXRlLCBzdHJlYW0pIHtcbiAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgZ2V0IG9uZSBsYXN0IHVuc2hpZnQuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICBzdGF0ZS5lbmRFbWl0dGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0ucmVhZGFibGUgPSBmYWxzZTtcbiAgICBzdHJlYW0uZW1pdCgnZW5kJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9yRWFjaCh4cywgZikge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGYoeHNbaV0sIGkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoeHNbaV0gPT09IHgpIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn0iLCIvLyBhIHRyYW5zZm9ybSBzdHJlYW0gaXMgYSByZWFkYWJsZS93cml0YWJsZSBzdHJlYW0gd2hlcmUgeW91IGRvXG4vLyBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YS4gIFNvbWV0aW1lcyBpdCdzIGNhbGxlZCBhIFwiZmlsdGVyXCIsXG4vLyBidXQgdGhhdCdzIG5vdCBhIGdyZWF0IG5hbWUgZm9yIGl0LCBzaW5jZSB0aGF0IGltcGxpZXMgYSB0aGluZyB3aGVyZVxuLy8gc29tZSBiaXRzIHBhc3MgdGhyb3VnaCwgYW5kIG90aGVycyBhcmUgc2ltcGx5IGlnbm9yZWQuICAoVGhhdCB3b3VsZFxuLy8gYmUgYSB2YWxpZCBleGFtcGxlIG9mIGEgdHJhbnNmb3JtLCBvZiBjb3Vyc2UuKVxuLy9cbi8vIFdoaWxlIHRoZSBvdXRwdXQgaXMgY2F1c2FsbHkgcmVsYXRlZCB0byB0aGUgaW5wdXQsIGl0J3Mgbm90IGFcbi8vIG5lY2Vzc2FyaWx5IHN5bW1ldHJpYyBvciBzeW5jaHJvbm91cyB0cmFuc2Zvcm1hdGlvbi4gIEZvciBleGFtcGxlLFxuLy8gYSB6bGliIHN0cmVhbSBtaWdodCB0YWtlIG11bHRpcGxlIHBsYWluLXRleHQgd3JpdGVzKCksIGFuZCB0aGVuXG4vLyBlbWl0IGEgc2luZ2xlIGNvbXByZXNzZWQgY2h1bmsgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuXG4vL1xuLy8gSGVyZSdzIGhvdyB0aGlzIHdvcmtzOlxuLy9cbi8vIFRoZSBUcmFuc2Zvcm0gc3RyZWFtIGhhcyBhbGwgdGhlIGFzcGVjdHMgb2YgdGhlIHJlYWRhYmxlIGFuZCB3cml0YWJsZVxuLy8gc3RyZWFtIGNsYXNzZXMuICBXaGVuIHlvdSB3cml0ZShjaHVuayksIHRoYXQgY2FsbHMgX3dyaXRlKGNodW5rLGNiKVxuLy8gaW50ZXJuYWxseSwgYW5kIHJldHVybnMgZmFsc2UgaWYgdGhlcmUncyBhIGxvdCBvZiBwZW5kaW5nIHdyaXRlc1xuLy8gYnVmZmVyZWQgdXAuICBXaGVuIHlvdSBjYWxsIHJlYWQoKSwgdGhhdCBjYWxscyBfcmVhZChuKSB1bnRpbFxuLy8gdGhlcmUncyBlbm91Z2ggcGVuZGluZyByZWFkYWJsZSBkYXRhIGJ1ZmZlcmVkIHVwLlxuLy9cbi8vIEluIGEgdHJhbnNmb3JtIHN0cmVhbSwgdGhlIHdyaXR0ZW4gZGF0YSBpcyBwbGFjZWQgaW4gYSBidWZmZXIuICBXaGVuXG4vLyBfcmVhZChuKSBpcyBjYWxsZWQsIGl0IHRyYW5zZm9ybXMgdGhlIHF1ZXVlZCB1cCBkYXRhLCBjYWxsaW5nIHRoZVxuLy8gYnVmZmVyZWQgX3dyaXRlIGNiJ3MgYXMgaXQgY29uc3VtZXMgY2h1bmtzLiAgSWYgY29uc3VtaW5nIGEgc2luZ2xlXG4vLyB3cml0dGVuIGNodW5rIHdvdWxkIHJlc3VsdCBpbiBtdWx0aXBsZSBvdXRwdXQgY2h1bmtzLCB0aGVuIHRoZSBmaXJzdFxuLy8gb3V0cHV0dGVkIGJpdCBjYWxscyB0aGUgcmVhZGNiLCBhbmQgc3Vic2VxdWVudCBjaHVua3MganVzdCBnbyBpbnRvXG4vLyB0aGUgcmVhZCBidWZmZXIsIGFuZCB3aWxsIGNhdXNlIGl0IHRvIGVtaXQgJ3JlYWRhYmxlJyBpZiBuZWNlc3NhcnkuXG4vL1xuLy8gVGhpcyB3YXksIGJhY2stcHJlc3N1cmUgaXMgYWN0dWFsbHkgZGV0ZXJtaW5lZCBieSB0aGUgcmVhZGluZyBzaWRlLFxuLy8gc2luY2UgX3JlYWQgaGFzIHRvIGJlIGNhbGxlZCB0byBzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGNodW5rLiAgSG93ZXZlcixcbi8vIGEgcGF0aG9sb2dpY2FsIGluZmxhdGUgdHlwZSBvZiB0cmFuc2Zvcm0gY2FuIGNhdXNlIGV4Y2Vzc2l2ZSBidWZmZXJpbmdcbi8vIGhlcmUuICBGb3IgZXhhbXBsZSwgaW1hZ2luZSBhIHN0cmVhbSB3aGVyZSBldmVyeSBieXRlIG9mIGlucHV0IGlzXG4vLyBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyIGZyb20gMC0yNTUsIGFuZCB0aGVuIHJlc3VsdHMgaW4gdGhhdCBtYW55XG4vLyBieXRlcyBvZiBvdXRwdXQuICBXcml0aW5nIHRoZSA0IGJ5dGVzIHtmZixmZixmZixmZn0gd291bGQgcmVzdWx0IGluXG4vLyAxa2Igb2YgZGF0YSBiZWluZyBvdXRwdXQuICBJbiB0aGlzIGNhc2UsIHlvdSBjb3VsZCB3cml0ZSBhIHZlcnkgc21hbGxcbi8vIGFtb3VudCBvZiBpbnB1dCwgYW5kIGVuZCB1cCB3aXRoIGEgdmVyeSBsYXJnZSBhbW91bnQgb2Ygb3V0cHV0LiAgSW5cbi8vIHN1Y2ggYSBwYXRob2xvZ2ljYWwgaW5mbGF0aW5nIG1lY2hhbmlzbSwgdGhlcmUnZCBiZSBubyB3YXkgdG8gdGVsbFxuLy8gdGhlIHN5c3RlbSB0byBzdG9wIGRvaW5nIHRoZSB0cmFuc2Zvcm0uICBBIHNpbmdsZSA0TUIgd3JpdGUgY291bGRcbi8vIGNhdXNlIHRoZSBzeXN0ZW0gdG8gcnVuIG91dCBvZiBtZW1vcnkuXG4vL1xuLy8gSG93ZXZlciwgZXZlbiBpbiBzdWNoIGEgcGF0aG9sb2dpY2FsIGNhc2UsIG9ubHkgYSBzaW5nbGUgd3JpdHRlbiBjaHVua1xuLy8gd291bGQgYmUgY29uc3VtZWQsIGFuZCB0aGVuIHRoZSByZXN0IHdvdWxkIHdhaXQgKHVuLXRyYW5zZm9ybWVkKSB1bnRpbFxuLy8gdGhlIHJlc3VsdHMgb2YgdGhlIHByZXZpb3VzIHRyYW5zZm9ybWVkIGNodW5rIHdlcmUgY29uc3VtZWQuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cbnZhciBEdXBsZXggPSByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudXRpbC5pbmhlcml0cyhUcmFuc2Zvcm0sIER1cGxleCk7XG5cbmZ1bmN0aW9uIFRyYW5zZm9ybVN0YXRlKHN0cmVhbSkge1xuICB0aGlzLmFmdGVyVHJhbnNmb3JtID0gZnVuY3Rpb24gKGVyLCBkYXRhKSB7XG4gICAgcmV0dXJuIGFmdGVyVHJhbnNmb3JtKHN0cmVhbSwgZXIsIGRhdGEpO1xuICB9O1xuXG4gIHRoaXMubmVlZFRyYW5zZm9ybSA9IGZhbHNlO1xuICB0aGlzLnRyYW5zZm9ybWluZyA9IGZhbHNlO1xuICB0aGlzLndyaXRlY2IgPSBudWxsO1xuICB0aGlzLndyaXRlY2h1bmsgPSBudWxsO1xuICB0aGlzLndyaXRlZW5jb2RpbmcgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBhZnRlclRyYW5zZm9ybShzdHJlYW0sIGVyLCBkYXRhKSB7XG4gIHZhciB0cyA9IHN0cmVhbS5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLnRyYW5zZm9ybWluZyA9IGZhbHNlO1xuXG4gIHZhciBjYiA9IHRzLndyaXRlY2I7XG5cbiAgaWYgKCFjYikgcmV0dXJuIHN0cmVhbS5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignbm8gd3JpdGVjYiBpbiBUcmFuc2Zvcm0gY2xhc3MnKSk7XG5cbiAgdHMud3JpdGVjaHVuayA9IG51bGw7XG4gIHRzLndyaXRlY2IgPSBudWxsO1xuXG4gIGlmIChkYXRhICE9PSBudWxsICYmIGRhdGEgIT09IHVuZGVmaW5lZCkgc3RyZWFtLnB1c2goZGF0YSk7XG5cbiAgY2IoZXIpO1xuXG4gIHZhciBycyA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgcnMucmVhZGluZyA9IGZhbHNlO1xuICBpZiAocnMubmVlZFJlYWRhYmxlIHx8IHJzLmxlbmd0aCA8IHJzLmhpZ2hXYXRlck1hcmspIHtcbiAgICBzdHJlYW0uX3JlYWQocnMuaGlnaFdhdGVyTWFyayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gVHJhbnNmb3JtKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRyYW5zZm9ybSkpIHJldHVybiBuZXcgVHJhbnNmb3JtKG9wdGlvbnMpO1xuXG4gIER1cGxleC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIHRoaXMuX3RyYW5zZm9ybVN0YXRlID0gbmV3IFRyYW5zZm9ybVN0YXRlKHRoaXMpO1xuXG4gIHZhciBzdHJlYW0gPSB0aGlzO1xuXG4gIC8vIHN0YXJ0IG91dCBhc2tpbmcgZm9yIGEgcmVhZGFibGUgZXZlbnQgb25jZSBkYXRhIGlzIHRyYW5zZm9ybWVkLlxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG5cbiAgLy8gd2UgaGF2ZSBpbXBsZW1lbnRlZCB0aGUgX3JlYWQgbWV0aG9kLCBhbmQgZG9uZSB0aGUgb3RoZXIgdGhpbmdzXG4gIC8vIHRoYXQgUmVhZGFibGUgd2FudHMgYmVmb3JlIHRoZSBmaXJzdCBfcmVhZCBjYWxsLCBzbyB1bnNldCB0aGVcbiAgLy8gc3luYyBndWFyZCBmbGFnLlxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmMgPSBmYWxzZTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHRoaXMuX3RyYW5zZm9ybSA9IG9wdGlvbnMudHJhbnNmb3JtO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZsdXNoID09PSAnZnVuY3Rpb24nKSB0aGlzLl9mbHVzaCA9IG9wdGlvbnMuZmx1c2g7XG4gIH1cblxuICAvLyBXaGVuIHRoZSB3cml0YWJsZSBzaWRlIGZpbmlzaGVzLCB0aGVuIGZsdXNoIG91dCBhbnl0aGluZyByZW1haW5pbmcuXG4gIHRoaXMub25jZSgncHJlZmluaXNoJywgZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5fZmx1c2ggPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZsdXNoKGZ1bmN0aW9uIChlciwgZGF0YSkge1xuICAgICAgZG9uZShzdHJlYW0sIGVyLCBkYXRhKTtcbiAgICB9KTtlbHNlIGRvbmUoc3RyZWFtKTtcbiAgfSk7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcpIHtcbiAgdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybSA9IGZhbHNlO1xuICByZXR1cm4gRHVwbGV4LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgY2h1bmssIGVuY29kaW5nKTtcbn07XG5cbi8vIFRoaXMgaXMgdGhlIHBhcnQgd2hlcmUgeW91IGRvIHN0dWZmIVxuLy8gb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBpbiBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gJ2NodW5rJyBpcyBhbiBpbnB1dCBjaHVuay5cbi8vXG4vLyBDYWxsIGBwdXNoKG5ld0NodW5rKWAgdG8gcGFzcyBhbG9uZyB0cmFuc2Zvcm1lZCBvdXRwdXRcbi8vIHRvIHRoZSByZWFkYWJsZSBzaWRlLiAgWW91IG1heSBjYWxsICdwdXNoJyB6ZXJvIG9yIG1vcmUgdGltZXMuXG4vL1xuLy8gQ2FsbCBgY2IoZXJyKWAgd2hlbiB5b3UgYXJlIGRvbmUgd2l0aCB0aGlzIGNodW5rLiAgSWYgeW91IHBhc3Ncbi8vIGFuIGVycm9yLCB0aGVuIHRoYXQnbGwgcHV0IHRoZSBodXJ0IG9uIHRoZSB3aG9sZSBvcGVyYXRpb24uICBJZiB5b3Vcbi8vIG5ldmVyIGNhbGwgY2IoKSwgdGhlbiB5b3UnbGwgbmV2ZXIgZ2V0IGFub3RoZXIgY2h1bmsuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aHJvdyBuZXcgRXJyb3IoJ190cmFuc2Zvcm0oKSBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLndyaXRlY2IgPSBjYjtcbiAgdHMud3JpdGVjaHVuayA9IGNodW5rO1xuICB0cy53cml0ZWVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIGlmICghdHMudHJhbnNmb3JtaW5nKSB7XG4gICAgdmFyIHJzID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgICBpZiAodHMubmVlZFRyYW5zZm9ybSB8fCBycy5uZWVkUmVhZGFibGUgfHwgcnMubGVuZ3RoIDwgcnMuaGlnaFdhdGVyTWFyaykgdGhpcy5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufTtcblxuLy8gRG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgYXJncyBhcmUgaGVyZS5cbi8vIF90cmFuc2Zvcm0gZG9lcyBhbGwgdGhlIHdvcmsuXG4vLyBUaGF0IHdlIGdvdCBoZXJlIG1lYW5zIHRoYXQgdGhlIHJlYWRhYmxlIHNpZGUgd2FudHMgbW9yZSBkYXRhLlxuVHJhbnNmb3JtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuXG4gIGlmICh0cy53cml0ZWNodW5rICE9PSBudWxsICYmIHRzLndyaXRlY2IgJiYgIXRzLnRyYW5zZm9ybWluZykge1xuICAgIHRzLnRyYW5zZm9ybWluZyA9IHRydWU7XG4gICAgdGhpcy5fdHJhbnNmb3JtKHRzLndyaXRlY2h1bmssIHRzLndyaXRlZW5jb2RpbmcsIHRzLmFmdGVyVHJhbnNmb3JtKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBtYXJrIHRoYXQgd2UgbmVlZCBhIHRyYW5zZm9ybSwgc28gdGhhdCBhbnkgZGF0YSB0aGF0IGNvbWVzIGluXG4gICAgLy8gd2lsbCBnZXQgcHJvY2Vzc2VkLCBub3cgdGhhdCB3ZSd2ZSBhc2tlZCBmb3IgaXQuXG4gICAgdHMubmVlZFRyYW5zZm9ybSA9IHRydWU7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGRvbmUoc3RyZWFtLCBlciwgZGF0YSkge1xuICBpZiAoZXIpIHJldHVybiBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG5cbiAgaWYgKGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdW5kZWZpbmVkKSBzdHJlYW0ucHVzaChkYXRhKTtcblxuICAvLyBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gdGhlIHdyaXRlIGJ1ZmZlciwgdGhlbiB0aGF0IG1lYW5zXG4gIC8vIHRoYXQgbm90aGluZyBtb3JlIHdpbGwgZXZlciBiZSBwcm92aWRlZFxuICB2YXIgd3MgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gIHZhciB0cyA9IHN0cmVhbS5fdHJhbnNmb3JtU3RhdGU7XG5cbiAgaWYgKHdzLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCdDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAnKTtcblxuICBpZiAodHMudHJhbnNmb3JtaW5nKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmcnKTtcblxuICByZXR1cm4gc3RyZWFtLnB1c2gobnVsbCk7XG59IiwiLy8gQSBiaXQgc2ltcGxlciB0aGFuIHJlYWRhYmxlIHN0cmVhbXMuXG4vLyBJbXBsZW1lbnQgYW4gYXN5bmMgLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSwgYW5kIGl0J2xsIGhhbmRsZSBhbGxcbi8vIHRoZSBkcmFpbiBldmVudCBlbWlzc2lvbiBhbmQgYnVmZmVyaW5nLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gV3JpdGFibGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgcHJvY2Vzc05leHRUaWNrID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGFzeW5jV3JpdGUgPSAhcHJvY2Vzcy5icm93c2VyICYmIFsndjAuMTAnLCAndjAuOS4nXS5pbmRleE9mKHByb2Nlc3MudmVyc2lvbi5zbGljZSgwLCA1KSkgPiAtMSA/IHNldEltbWVkaWF0ZSA6IHByb2Nlc3NOZXh0VGljaztcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIER1cGxleDtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5Xcml0YWJsZS5Xcml0YWJsZVN0YXRlID0gV3JpdGFibGVTdGF0ZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGludGVybmFsVXRpbCA9IHtcbiAgZGVwcmVjYXRlOiByZXF1aXJlKCd1dGlsLWRlcHJlY2F0ZScpXG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgU3RyZWFtO1xuKGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBTdHJlYW0gPSByZXF1aXJlKCdzdCcgKyAncmVhbScpO1xuICB9IGNhdGNoIChfKSB7fSBmaW5hbGx5IHtcbiAgICBpZiAoIVN0cmVhbSkgU3RyZWFtID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xuICB9XG59KSgpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGJ1ZmZlclNoaW0gPSByZXF1aXJlKCdidWZmZXItc2hpbXMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG51dGlsLmluaGVyaXRzKFdyaXRhYmxlLCBTdHJlYW0pO1xuXG5mdW5jdGlvbiBub3AoKSB7fVxuXG5mdW5jdGlvbiBXcml0ZVJlcShjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHRoaXMuY2h1bmsgPSBjaHVuaztcbiAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nO1xuICB0aGlzLmNhbGxiYWNrID0gY2I7XG4gIHRoaXMubmV4dCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIFdyaXRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoaXMgc3RyZWFtXG4gIC8vIGNvbnRhaW5zIGJ1ZmZlcnMgb3Igb2JqZWN0cy5cbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG5cbiAgaWYgKHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleCkgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5vYmplY3RNb2RlIHx8ICEhb3B0aW9ucy53cml0YWJsZU9iamVjdE1vZGU7XG5cbiAgLy8gdGhlIHBvaW50IGF0IHdoaWNoIHdyaXRlKCkgc3RhcnRzIHJldHVybmluZyBmYWxzZVxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIHRoYXQgd2UgYWx3YXlzIHJldHVybiBmYWxzZSBpZlxuICAvLyB0aGUgZW50aXJlIGJ1ZmZlciBpcyBub3QgZmx1c2hlZCBpbW1lZGlhdGVseSBvbiB3cml0ZSgpXG4gIHZhciBod20gPSBvcHRpb25zLmhpZ2hXYXRlck1hcms7XG4gIHZhciBkZWZhdWx0SHdtID0gdGhpcy5vYmplY3RNb2RlID8gMTYgOiAxNiAqIDEwMjQ7XG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IGh3bSB8fCBod20gPT09IDAgPyBod20gOiBkZWZhdWx0SHdtO1xuXG4gIC8vIGNhc3QgdG8gaW50cy5cbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gfn50aGlzLmhpZ2hXYXRlck1hcms7XG5cbiAgLy8gZHJhaW4gZXZlbnQgZmxhZy5cbiAgdGhpcy5uZWVkRHJhaW4gPSBmYWxzZTtcbiAgLy8gYXQgdGhlIHN0YXJ0IG9mIGNhbGxpbmcgZW5kKClcbiAgdGhpcy5lbmRpbmcgPSBmYWxzZTtcbiAgLy8gd2hlbiBlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCByZXR1cm5lZFxuICB0aGlzLmVuZGVkID0gZmFsc2U7XG4gIC8vIHdoZW4gJ2ZpbmlzaCcgaXMgZW1pdHRlZFxuICB0aGlzLmZpbmlzaGVkID0gZmFsc2U7XG5cbiAgLy8gc2hvdWxkIHdlIGRlY29kZSBzdHJpbmdzIGludG8gYnVmZmVycyBiZWZvcmUgcGFzc2luZyB0byBfd3JpdGU/XG4gIC8vIHRoaXMgaXMgaGVyZSBzbyB0aGF0IHNvbWUgbm9kZS1jb3JlIHN0cmVhbXMgY2FuIG9wdGltaXplIHN0cmluZ1xuICAvLyBoYW5kbGluZyBhdCBhIGxvd2VyIGxldmVsLlxuICB2YXIgbm9EZWNvZGUgPSBvcHRpb25zLmRlY29kZVN0cmluZ3MgPT09IGZhbHNlO1xuICB0aGlzLmRlY29kZVN0cmluZ3MgPSAhbm9EZWNvZGU7XG5cbiAgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cbiAgdGhpcy5kZWZhdWx0RW5jb2RpbmcgPSBvcHRpb25zLmRlZmF1bHRFbmNvZGluZyB8fCAndXRmOCc7XG5cbiAgLy8gbm90IGFuIGFjdHVhbCBidWZmZXIgd2Uga2VlcCB0cmFjayBvZiwgYnV0IGEgbWVhc3VyZW1lbnRcbiAgLy8gb2YgaG93IG11Y2ggd2UncmUgd2FpdGluZyB0byBnZXQgcHVzaGVkIHRvIHNvbWUgdW5kZXJseWluZ1xuICAvLyBzb2NrZXQgb3IgZmlsZS5cbiAgdGhpcy5sZW5ndGggPSAwO1xuXG4gIC8vIGEgZmxhZyB0byBzZWUgd2hlbiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgd3JpdGUuXG4gIHRoaXMud3JpdGluZyA9IGZhbHNlO1xuXG4gIC8vIHdoZW4gdHJ1ZSBhbGwgd3JpdGVzIHdpbGwgYmUgYnVmZmVyZWQgdW50aWwgLnVuY29yaygpIGNhbGxcbiAgdGhpcy5jb3JrZWQgPSAwO1xuXG4gIC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIG9ud3JpdGUgY2IgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LFxuICAvLyBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlIGFueVxuICAvLyBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSBjYWxsLlxuICB0aGlzLnN5bmMgPSB0cnVlO1xuXG4gIC8vIGEgZmxhZyB0byBrbm93IGlmIHdlJ3JlIHByb2Nlc3NpbmcgcHJldmlvdXNseSBidWZmZXJlZCBpdGVtcywgd2hpY2hcbiAgLy8gbWF5IGNhbGwgdGhlIF93cml0ZSgpIGNhbGxiYWNrIGluIHRoZSBzYW1lIHRpY2ssIHNvIHRoYXQgd2UgZG9uJ3RcbiAgLy8gZW5kIHVwIGluIGFuIG92ZXJsYXBwZWQgb253cml0ZSBzaXR1YXRpb24uXG4gIHRoaXMuYnVmZmVyUHJvY2Vzc2luZyA9IGZhbHNlO1xuXG4gIC8vIHRoZSBjYWxsYmFjayB0aGF0J3MgcGFzc2VkIHRvIF93cml0ZShjaHVuayxjYilcbiAgdGhpcy5vbndyaXRlID0gZnVuY3Rpb24gKGVyKSB7XG4gICAgb253cml0ZShzdHJlYW0sIGVyKTtcbiAgfTtcblxuICAvLyB0aGUgY2FsbGJhY2sgdGhhdCB0aGUgdXNlciBzdXBwbGllcyB0byB3cml0ZShjaHVuayxlbmNvZGluZyxjYilcbiAgdGhpcy53cml0ZWNiID0gbnVsbDtcblxuICAvLyB0aGUgYW1vdW50IHRoYXQgaXMgYmVpbmcgd3JpdHRlbiB3aGVuIF93cml0ZSBpcyBjYWxsZWQuXG4gIHRoaXMud3JpdGVsZW4gPSAwO1xuXG4gIHRoaXMuYnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcblxuICAvLyBudW1iZXIgb2YgcGVuZGluZyB1c2VyLXN1cHBsaWVkIHdyaXRlIGNhbGxiYWNrc1xuICAvLyB0aGlzIG11c3QgYmUgMCBiZWZvcmUgJ2ZpbmlzaCcgY2FuIGJlIGVtaXR0ZWRcbiAgdGhpcy5wZW5kaW5nY2IgPSAwO1xuXG4gIC8vIGVtaXQgcHJlZmluaXNoIGlmIHRoZSBvbmx5IHRoaW5nIHdlJ3JlIHdhaXRpbmcgZm9yIGlzIF93cml0ZSBjYnNcbiAgLy8gVGhpcyBpcyByZWxldmFudCBmb3Igc3luY2hyb25vdXMgVHJhbnNmb3JtIHN0cmVhbXNcbiAgdGhpcy5wcmVmaW5pc2hlZCA9IGZhbHNlO1xuXG4gIC8vIFRydWUgaWYgdGhlIGVycm9yIHdhcyBhbHJlYWR5IGVtaXR0ZWQgYW5kIHNob3VsZCBub3QgYmUgdGhyb3duIGFnYWluXG4gIHRoaXMuZXJyb3JFbWl0dGVkID0gZmFsc2U7XG5cbiAgLy8gY291bnQgYnVmZmVyZWQgcmVxdWVzdHNcbiAgdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudCA9IDA7XG5cbiAgLy8gYWxsb2NhdGUgdGhlIGZpcnN0IENvcmtlZFJlcXVlc3QsIHRoZXJlIGlzIGFsd2F5c1xuICAvLyBvbmUgYWxsb2NhdGVkIGFuZCBmcmVlIHRvIHVzZSwgYW5kIHdlIG1haW50YWluIGF0IG1vc3QgdHdvXG4gIHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlID0gbmV3IENvcmtlZFJlcXVlc3QodGhpcyk7XG59XG5cbldyaXRhYmxlU3RhdGUucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uIGdldEJ1ZmZlcigpIHtcbiAgdmFyIGN1cnJlbnQgPSB0aGlzLmJ1ZmZlcmVkUmVxdWVzdDtcbiAgdmFyIG91dCA9IFtdO1xuICB3aGlsZSAoY3VycmVudCkge1xuICAgIG91dC5wdXNoKGN1cnJlbnQpO1xuICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn07XG5cbihmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlU3RhdGUucHJvdG90eXBlLCAnYnVmZmVyJywge1xuICAgICAgZ2V0OiBpbnRlcm5hbFV0aWwuZGVwcmVjYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCk7XG4gICAgICB9LCAnX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgJyArICdpbnN0ZWFkLicpXG4gICAgfSk7XG4gIH0gY2F0Y2ggKF8pIHt9XG59KSgpO1xuXG4vLyBUZXN0IF93cml0YWJsZVN0YXRlIGZvciBpbmhlcml0YW5jZSB0byBhY2NvdW50IGZvciBEdXBsZXggc3RyZWFtcyxcbi8vIHdob3NlIHByb3RvdHlwZSBjaGFpbiBvbmx5IHBvaW50cyB0byBSZWFkYWJsZS5cbnZhciByZWFsSGFzSW5zdGFuY2U7XG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaGFzSW5zdGFuY2UgJiYgdHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdID09PSAnZnVuY3Rpb24nKSB7XG4gIHJlYWxIYXNJbnN0YW5jZSA9IEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUsIFN5bWJvbC5oYXNJbnN0YW5jZSwge1xuICAgIHZhbHVlOiBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICBpZiAocmVhbEhhc0luc3RhbmNlLmNhbGwodGhpcywgb2JqZWN0KSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIHJldHVybiBvYmplY3QgJiYgb2JqZWN0Ll93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgV3JpdGFibGVTdGF0ZTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgcmVhbEhhc0luc3RhbmNlID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiB0aGlzO1xuICB9O1xufVxuXG5mdW5jdGlvbiBXcml0YWJsZShvcHRpb25zKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgLy8gV3JpdGFibGUgY3RvciBpcyBhcHBsaWVkIHRvIER1cGxleGVzLCB0b28uXG4gIC8vIGByZWFsSGFzSW5zdGFuY2VgIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHVzaW5nIHBsYWluIGBpbnN0YW5jZW9mYFxuICAvLyB3b3VsZCByZXR1cm4gZmFsc2UsIGFzIG5vIGBfd3JpdGFibGVTdGF0ZWAgcHJvcGVydHkgaXMgYXR0YWNoZWQuXG5cbiAgLy8gVHJ5aW5nIHRvIHVzZSB0aGUgY3VzdG9tIGBpbnN0YW5jZW9mYCBmb3IgV3JpdGFibGUgaGVyZSB3aWxsIGFsc28gYnJlYWsgdGhlXG4gIC8vIE5vZGUuanMgTGF6eVRyYW5zZm9ybSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaGFzIGEgbm9uLXRyaXZpYWwgZ2V0dGVyIGZvclxuICAvLyBgX3dyaXRhYmxlU3RhdGVgIHRoYXQgd291bGQgbGVhZCB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gIGlmICghcmVhbEhhc0luc3RhbmNlLmNhbGwoV3JpdGFibGUsIHRoaXMpICYmICEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpIHtcbiAgICByZXR1cm4gbmV3IFdyaXRhYmxlKG9wdGlvbnMpO1xuICB9XG5cbiAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG5ldyBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIGxlZ2FjeS5cbiAgdGhpcy53cml0YWJsZSA9IHRydWU7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGUgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRlID0gb3B0aW9ucy53cml0ZTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZXYgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRldiA9IG9wdGlvbnMud3JpdGV2O1xuICB9XG5cbiAgU3RyZWFtLmNhbGwodGhpcyk7XG59XG5cbi8vIE90aGVyd2lzZSBwZW9wbGUgY2FuIHBpcGUgV3JpdGFibGUgc3RyZWFtcywgd2hpY2ggaXMganVzdCB3cm9uZy5cbldyaXRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlJykpO1xufTtcblxuZnVuY3Rpb24gd3JpdGVBZnRlckVuZChzdHJlYW0sIGNiKSB7XG4gIHZhciBlciA9IG5ldyBFcnJvcignd3JpdGUgYWZ0ZXIgZW5kJyk7XG4gIC8vIFRPRE86IGRlZmVyIGVycm9yIGV2ZW50cyBjb25zaXN0ZW50bHkgZXZlcnl3aGVyZSwgbm90IGp1c3QgdGhlIGNiXG4gIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgcHJvY2Vzc05leHRUaWNrKGNiLCBlcik7XG59XG5cbi8vIENoZWNrcyB0aGF0IGEgdXNlci1zdXBwbGllZCBjaHVuayBpcyB2YWxpZCwgZXNwZWNpYWxseSBmb3IgdGhlIHBhcnRpY3VsYXJcbi8vIG1vZGUgdGhlIHN0cmVhbSBpcyBpbi4gQ3VycmVudGx5IHRoaXMgbWVhbnMgdGhhdCBgbnVsbGAgaXMgbmV2ZXIgYWNjZXB0ZWRcbi8vIGFuZCB1bmRlZmluZWQvbm9uLXN0cmluZyB2YWx1ZXMgYXJlIG9ubHkgYWxsb3dlZCBpbiBvYmplY3QgbW9kZS5cbmZ1bmN0aW9uIHZhbGlkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGNiKSB7XG4gIHZhciB2YWxpZCA9IHRydWU7XG4gIHZhciBlciA9IGZhbHNlO1xuXG4gIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIGVyID0gbmV3IFR5cGVFcnJvcignTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0nKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmIGNodW5rICE9PSB1bmRlZmluZWQgJiYgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsnKTtcbiAgfVxuICBpZiAoZXIpIHtcbiAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gICAgcHJvY2Vzc05leHRUaWNrKGNiLCBlcik7XG4gICAgdmFsaWQgPSBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsaWQ7XG59XG5cbldyaXRhYmxlLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIHZhciByZXQgPSBmYWxzZTtcbiAgdmFyIGlzQnVmID0gQnVmZmVyLmlzQnVmZmVyKGNodW5rKTtcblxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICBpZiAoaXNCdWYpIGVuY29kaW5nID0gJ2J1ZmZlcic7ZWxzZSBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcblxuICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSBjYiA9IG5vcDtcblxuICBpZiAoc3RhdGUuZW5kZWQpIHdyaXRlQWZ0ZXJFbmQodGhpcywgY2IpO2Vsc2UgaWYgKGlzQnVmIHx8IHZhbGlkQ2h1bmsodGhpcywgc3RhdGUsIGNodW5rLCBjYikpIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICByZXQgPSB3cml0ZU9yQnVmZmVyKHRoaXMsIHN0YXRlLCBpc0J1ZiwgY2h1bmssIGVuY29kaW5nLCBjYik7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgc3RhdGUuY29ya2VkKys7XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUudW5jb3JrID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuXG4gIGlmIChzdGF0ZS5jb3JrZWQpIHtcbiAgICBzdGF0ZS5jb3JrZWQtLTtcblxuICAgIGlmICghc3RhdGUud3JpdGluZyAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5maW5pc2hlZCAmJiAhc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QpIGNsZWFyQnVmZmVyKHRoaXMsIHN0YXRlKTtcbiAgfVxufTtcblxuV3JpdGFibGUucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZyA9IGZ1bmN0aW9uIHNldERlZmF1bHRFbmNvZGluZyhlbmNvZGluZykge1xuICAvLyBub2RlOjpQYXJzZUVuY29kaW5nKCkgcmVxdWlyZXMgbG93ZXIgY2FzZS5cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIGVuY29kaW5nID0gZW5jb2RpbmcudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCEoWydoZXgnLCAndXRmOCcsICd1dGYtOCcsICdhc2NpaScsICdiaW5hcnknLCAnYmFzZTY0JywgJ3VjczInLCAndWNzLTInLCAndXRmMTZsZScsICd1dGYtMTZsZScsICdyYXcnXS5pbmRleE9mKChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpKSA+IC0xKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKTtcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2RpbmcgPSBlbmNvZGluZztcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBkZWNvZGVDaHVuayhzdGF0ZSwgY2h1bmssIGVuY29kaW5nKSB7XG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiBzdGF0ZS5kZWNvZGVTdHJpbmdzICE9PSBmYWxzZSAmJiB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgY2h1bmsgPSBidWZmZXJTaGltLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgfVxuICByZXR1cm4gY2h1bms7XG59XG5cbi8vIGlmIHdlJ3JlIGFscmVhZHkgd3JpdGluZyBzb21ldGhpbmcsIHRoZW4ganVzdCBwdXQgdGhpc1xuLy8gaW4gdGhlIHF1ZXVlLCBhbmQgd2FpdCBvdXIgdHVybi4gIE90aGVyd2lzZSwgY2FsbCBfd3JpdGVcbi8vIElmIHdlIHJldHVybiBmYWxzZSwgdGhlbiB3ZSBuZWVkIGEgZHJhaW4gZXZlbnQsIHNvIHNldCB0aGF0IGZsYWcuXG5mdW5jdGlvbiB3cml0ZU9yQnVmZmVyKHN0cmVhbSwgc3RhdGUsIGlzQnVmLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGlmICghaXNCdWYpIHtcbiAgICBjaHVuayA9IGRlY29kZUNodW5rKHN0YXRlLCBjaHVuaywgZW5jb2RpbmcpO1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSBlbmNvZGluZyA9ICdidWZmZXInO1xuICB9XG4gIHZhciBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcblxuICBzdGF0ZS5sZW5ndGggKz0gbGVuO1xuXG4gIHZhciByZXQgPSBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICAvLyB3ZSBtdXN0IGVuc3VyZSB0aGF0IHByZXZpb3VzIG5lZWREcmFpbiB3aWxsIG5vdCBiZSByZXNldCB0byBmYWxzZS5cbiAgaWYgKCFyZXQpIHN0YXRlLm5lZWREcmFpbiA9IHRydWU7XG5cbiAgaWYgKHN0YXRlLndyaXRpbmcgfHwgc3RhdGUuY29ya2VkKSB7XG4gICAgdmFyIGxhc3QgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBuZXcgV3JpdGVSZXEoY2h1bmssIGVuY29kaW5nLCBjYik7XG4gICAgaWYgKGxhc3QpIHtcbiAgICAgIGxhc3QubmV4dCA9IHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9IHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7XG4gICAgfVxuICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50ICs9IDE7XG4gIH0gZWxzZSB7XG4gICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgd3JpdGV2LCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgc3RhdGUud3JpdGVsZW4gPSBsZW47XG4gIHN0YXRlLndyaXRlY2IgPSBjYjtcbiAgc3RhdGUud3JpdGluZyA9IHRydWU7XG4gIHN0YXRlLnN5bmMgPSB0cnVlO1xuICBpZiAod3JpdGV2KSBzdHJlYW0uX3dyaXRldihjaHVuaywgc3RhdGUub253cml0ZSk7ZWxzZSBzdHJlYW0uX3dyaXRlKGNodW5rLCBlbmNvZGluZywgc3RhdGUub253cml0ZSk7XG4gIHN0YXRlLnN5bmMgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIHN5bmMsIGVyLCBjYikge1xuICAtLXN0YXRlLnBlbmRpbmdjYjtcbiAgaWYgKHN5bmMpIHByb2Nlc3NOZXh0VGljayhjYiwgZXIpO2Vsc2UgY2IoZXIpO1xuXG4gIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG59XG5cbmZ1bmN0aW9uIG9ud3JpdGVTdGF0ZVVwZGF0ZShzdGF0ZSkge1xuICBzdGF0ZS53cml0aW5nID0gZmFsc2U7XG4gIHN0YXRlLndyaXRlY2IgPSBudWxsO1xuICBzdGF0ZS5sZW5ndGggLT0gc3RhdGUud3JpdGVsZW47XG4gIHN0YXRlLndyaXRlbGVuID0gMDtcbn1cblxuZnVuY3Rpb24gb253cml0ZShzdHJlYW0sIGVyKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHN5bmMgPSBzdGF0ZS5zeW5jO1xuICB2YXIgY2IgPSBzdGF0ZS53cml0ZWNiO1xuXG4gIG9ud3JpdGVTdGF0ZVVwZGF0ZShzdGF0ZSk7XG5cbiAgaWYgKGVyKSBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKTtlbHNlIHtcbiAgICAvLyBDaGVjayBpZiB3ZSdyZSBhY3R1YWxseSByZWFkeSB0byBmaW5pc2gsIGJ1dCBkb24ndCBlbWl0IHlldFxuICAgIHZhciBmaW5pc2hlZCA9IG5lZWRGaW5pc2goc3RhdGUpO1xuXG4gICAgaWYgKCFmaW5pc2hlZCAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkge1xuICAgICAgY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHN5bmMpIHtcbiAgICAgIC8qPHJlcGxhY2VtZW50PiovXG4gICAgICBhc3luY1dyaXRlKGFmdGVyV3JpdGUsIHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgICAvKjwvcmVwbGFjZW1lbnQ+Ki9cbiAgICB9IGVsc2Uge1xuICAgICAgYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYikge1xuICBpZiAoIWZpbmlzaGVkKSBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSk7XG4gIHN0YXRlLnBlbmRpbmdjYi0tO1xuICBjYigpO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbn1cblxuLy8gTXVzdCBmb3JjZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gbmV4dFRpY2ssIHNvIHRoYXQgd2UgZG9uJ3Rcbi8vIGVtaXQgJ2RyYWluJyBiZWZvcmUgdGhlIHdyaXRlKCkgY29uc3VtZXIgZ2V0cyB0aGUgJ2ZhbHNlJyByZXR1cm5cbi8vIHZhbHVlLCBhbmQgaGFzIGEgY2hhbmNlIHRvIGF0dGFjaCBhICdkcmFpbicgbGlzdGVuZXIuXG5mdW5jdGlvbiBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLm5lZWREcmFpbikge1xuICAgIHN0YXRlLm5lZWREcmFpbiA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdkcmFpbicpO1xuICB9XG59XG5cbi8vIGlmIHRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBidWZmZXIgd2FpdGluZywgdGhlbiBwcm9jZXNzIGl0XG5mdW5jdGlvbiBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKSB7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSB0cnVlO1xuICB2YXIgZW50cnkgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3Q7XG5cbiAgaWYgKHN0cmVhbS5fd3JpdGV2ICYmIGVudHJ5ICYmIGVudHJ5Lm5leHQpIHtcbiAgICAvLyBGYXN0IGNhc2UsIHdyaXRlIGV2ZXJ5dGhpbmcgdXNpbmcgX3dyaXRldigpXG4gICAgdmFyIGwgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudDtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KGwpO1xuICAgIHZhciBob2xkZXIgPSBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7XG4gICAgaG9sZGVyLmVudHJ5ID0gZW50cnk7XG5cbiAgICB2YXIgY291bnQgPSAwO1xuICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgYnVmZmVyW2NvdW50XSA9IGVudHJ5O1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgY291bnQgKz0gMTtcbiAgICB9XG5cbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIHRydWUsIHN0YXRlLmxlbmd0aCwgYnVmZmVyLCAnJywgaG9sZGVyLmZpbmlzaCk7XG5cbiAgICAvLyBkb1dyaXRlIGlzIGFsbW9zdCBhbHdheXMgYXN5bmMsIGRlZmVyIHRoZXNlIHRvIHNhdmUgYSBiaXQgb2YgdGltZVxuICAgIC8vIGFzIHRoZSBob3QgcGF0aCBlbmRzIHdpdGggZG9Xcml0ZVxuICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICAgIGlmIChob2xkZXIubmV4dCkge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gaG9sZGVyLm5leHQ7XG4gICAgICBob2xkZXIubmV4dCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZSA9IG5ldyBDb3JrZWRSZXF1ZXN0KHN0YXRlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gU2xvdyBjYXNlLCB3cml0ZSBjaHVua3Mgb25lLWJ5LW9uZVxuICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgdmFyIGNodW5rID0gZW50cnkuY2h1bms7XG4gICAgICB2YXIgZW5jb2RpbmcgPSBlbnRyeS5lbmNvZGluZztcbiAgICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgICAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuXG4gICAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgLy8gaWYgd2UgZGlkbid0IGNhbGwgdGhlIG9ud3JpdGUgaW1tZWRpYXRlbHksIHRoZW5cbiAgICAgIC8vIGl0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0IGRvZXMuXG4gICAgICAvLyBhbHNvLCB0aGF0IG1lYW5zIHRoYXQgdGhlIGNodW5rIGFuZCBjYiBhcmUgY3VycmVudGx5XG4gICAgICAvLyBiZWluZyBwcm9jZXNzZWQsIHNvIG1vdmUgdGhlIGJ1ZmZlciBjb3VudGVyIHBhc3QgdGhlbS5cbiAgICAgIGlmIChzdGF0ZS53cml0aW5nKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbnRyeSA9PT0gbnVsbCkgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gIH1cblxuICBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudCA9IDA7XG4gIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9IGVudHJ5O1xuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7XG59XG5cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihuZXcgRXJyb3IoJ193cml0ZSgpIGlzIG5vdCBpbXBsZW1lbnRlZCcpKTtcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGV2ID0gbnVsbDtcblxuV3JpdGFibGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gY2h1bms7XG4gICAgY2h1bmsgPSBudWxsO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmIChjaHVuayAhPT0gbnVsbCAmJiBjaHVuayAhPT0gdW5kZWZpbmVkKSB0aGlzLndyaXRlKGNodW5rLCBlbmNvZGluZyk7XG5cbiAgLy8gLmVuZCgpIGZ1bGx5IHVuY29ya3NcbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZCA9IDE7XG4gICAgdGhpcy51bmNvcmsoKTtcbiAgfVxuXG4gIC8vIGlnbm9yZSB1bm5lY2Vzc2FyeSBlbmQoKSBjYWxscy5cbiAgaWYgKCFzdGF0ZS5lbmRpbmcgJiYgIXN0YXRlLmZpbmlzaGVkKSBlbmRXcml0YWJsZSh0aGlzLCBzdGF0ZSwgY2IpO1xufTtcblxuZnVuY3Rpb24gbmVlZEZpbmlzaChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUuZW5kaW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPT09IG51bGwgJiYgIXN0YXRlLmZpbmlzaGVkICYmICFzdGF0ZS53cml0aW5nO1xufVxuXG5mdW5jdGlvbiBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnByZWZpbmlzaGVkKSB7XG4gICAgc3RhdGUucHJlZmluaXNoZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5lbWl0KCdwcmVmaW5pc2gnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKSB7XG4gIHZhciBuZWVkID0gbmVlZEZpbmlzaChzdGF0ZSk7XG4gIGlmIChuZWVkKSB7XG4gICAgaWYgKHN0YXRlLnBlbmRpbmdjYiA9PT0gMCkge1xuICAgICAgcHJlZmluaXNoKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgc3RhdGUuZmluaXNoZWQgPSB0cnVlO1xuICAgICAgc3RyZWFtLmVtaXQoJ2ZpbmlzaCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZWVkO1xufVxuXG5mdW5jdGlvbiBlbmRXcml0YWJsZShzdHJlYW0sIHN0YXRlLCBjYikge1xuICBzdGF0ZS5lbmRpbmcgPSB0cnVlO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgaWYgKGNiKSB7XG4gICAgaWYgKHN0YXRlLmZpbmlzaGVkKSBwcm9jZXNzTmV4dFRpY2soY2IpO2Vsc2Ugc3RyZWFtLm9uY2UoJ2ZpbmlzaCcsIGNiKTtcbiAgfVxuICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gIHN0cmVhbS53cml0YWJsZSA9IGZhbHNlO1xufVxuXG4vLyBJdCBzZWVtcyBhIGxpbmtlZCBsaXN0IGJ1dCBpdCBpcyBub3Rcbi8vIHRoZXJlIHdpbGwgYmUgb25seSAyIG9mIHRoZXNlIGZvciBlYWNoIHN0cmVhbVxuZnVuY3Rpb24gQ29ya2VkUmVxdWVzdChzdGF0ZSkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHRoaXMubmV4dCA9IG51bGw7XG4gIHRoaXMuZW50cnkgPSBudWxsO1xuICB0aGlzLmZpbmlzaCA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICB2YXIgZW50cnkgPSBfdGhpcy5lbnRyeTtcbiAgICBfdGhpcy5lbnRyeSA9IG51bGw7XG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICB2YXIgY2IgPSBlbnRyeS5jYWxsYmFjaztcbiAgICAgIHN0YXRlLnBlbmRpbmdjYi0tO1xuICAgICAgY2IoZXJyKTtcbiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICB9XG4gICAgaWYgKHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZSkge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQgPSBfdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gX3RoaXM7XG4gICAgfVxuICB9O1xufSIsIid1c2Ugc3RyaWN0JztcblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbi8qPHJlcGxhY2VtZW50PiovXG52YXIgYnVmZmVyU2hpbSA9IHJlcXVpcmUoJ2J1ZmZlci1zaGltcycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyTGlzdDtcblxuZnVuY3Rpb24gQnVmZmVyTGlzdCgpIHtcbiAgdGhpcy5oZWFkID0gbnVsbDtcbiAgdGhpcy50YWlsID0gbnVsbDtcbiAgdGhpcy5sZW5ndGggPSAwO1xufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKHYpIHtcbiAgdmFyIGVudHJ5ID0geyBkYXRhOiB2LCBuZXh0OiBudWxsIH07XG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHRoaXMudGFpbC5uZXh0ID0gZW50cnk7ZWxzZSB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgdGhpcy50YWlsID0gZW50cnk7XG4gICsrdGhpcy5sZW5ndGg7XG59O1xuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24gKHYpIHtcbiAgdmFyIGVudHJ5ID0geyBkYXRhOiB2LCBuZXh0OiB0aGlzLmhlYWQgfTtcbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgdGhpcy5oZWFkID0gZW50cnk7XG4gICsrdGhpcy5sZW5ndGg7XG59O1xuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIHZhciByZXQgPSB0aGlzLmhlYWQuZGF0YTtcbiAgaWYgKHRoaXMubGVuZ3RoID09PSAxKSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO2Vsc2UgdGhpcy5oZWFkID0gdGhpcy5oZWFkLm5leHQ7XG4gIC0tdGhpcy5sZW5ndGg7XG4gIHJldHVybiByZXQ7XG59O1xuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgdGhpcy5sZW5ndGggPSAwO1xufTtcblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuam9pbiA9IGZ1bmN0aW9uIChzKSB7XG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgdmFyIHJldCA9ICcnICsgcC5kYXRhO1xuICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgIHJldCArPSBzICsgcC5kYXRhO1xuICB9cmV0dXJuIHJldDtcbn07XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLmNvbmNhdCA9IGZ1bmN0aW9uIChuKSB7XG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGJ1ZmZlclNoaW0uYWxsb2MoMCk7XG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHRoaXMuaGVhZC5kYXRhO1xuICB2YXIgcmV0ID0gYnVmZmVyU2hpbS5hbGxvY1Vuc2FmZShuID4+PiAwKTtcbiAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gIHZhciBpID0gMDtcbiAgd2hpbGUgKHApIHtcbiAgICBwLmRhdGEuY29weShyZXQsIGkpO1xuICAgIGkgKz0gcC5kYXRhLmxlbmd0aDtcbiAgICBwID0gcC5uZXh0O1xuICB9XG4gIHJldHVybiByZXQ7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanNcIilcbiIsInZhciBTdHJlYW0gPSAoZnVuY3Rpb24gKCl7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJ3N0JyArICdyZWFtJyk7IC8vIGhhY2sgdG8gZml4IGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBpc3N1ZSB3aGVuIHVzZWQgd2l0aCBicm93c2VyaWZ5XG4gIH0gY2F0Y2goXyl7fVxufSgpKTtcbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fcmVhZGFibGUuanMnKTtcbmV4cG9ydHMuU3RyZWFtID0gU3RyZWFtIHx8IGV4cG9ydHM7XG5leHBvcnRzLlJlYWRhYmxlID0gZXhwb3J0cztcbmV4cG9ydHMuV3JpdGFibGUgPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzJyk7XG5leHBvcnRzLkR1cGxleCA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fZHVwbGV4LmpzJyk7XG5leHBvcnRzLlRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzJyk7XG5leHBvcnRzLlBhc3NUaHJvdWdoID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qcycpO1xuXG5pZiAoIXByb2Nlc3MuYnJvd3NlciAmJiBwcm9jZXNzLmVudi5SRUFEQUJMRV9TVFJFQU0gPT09ICdkaXNhYmxlJyAmJiBTdHJlYW0pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBTdHJlYW07XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qc1wiKVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9saWIvX3N0cmVhbV93cml0YWJsZS5qc1wiKVxuIiwiLypcbkNyeXB0b0pTIHYzLjEuMlxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXG4oYykgMjAwOS0yMDEzIGJ5IEplZmYgTW90dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcbiovXG4vKiogQHByZXNlcnZlXG4oYykgMjAxMiBieSBDw6lkcmljIE1lc25pbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cbi8vIGNvbnN0YW50cyB0YWJsZVxudmFyIHpsID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dXG5cbnZhciB6ciA9IFtcbiAgNSwgMTQsIDcsIDAsIDksIDIsIDExLCA0LCAxMywgNiwgMTUsIDgsIDEsIDEwLCAzLCAxMixcbiAgNiwgMTEsIDMsIDcsIDAsIDEzLCA1LCAxMCwgMTQsIDE1LCA4LCAxMiwgNCwgOSwgMSwgMixcbiAgMTUsIDUsIDEsIDMsIDcsIDE0LCA2LCA5LCAxMSwgOCwgMTIsIDIsIDEwLCAwLCA0LCAxMyxcbiAgOCwgNiwgNCwgMSwgMywgMTEsIDE1LCAwLCA1LCAxMiwgMiwgMTMsIDksIDcsIDEwLCAxNCxcbiAgMTIsIDE1LCAxMCwgNCwgMSwgNSwgOCwgNywgNiwgMiwgMTMsIDE0LCAwLCAzLCA5LCAxMVxuXVxuXG52YXIgc2wgPSBbXG4gIDExLCAxNCwgMTUsIDEyLCA1LCA4LCA3LCA5LCAxMSwgMTMsIDE0LCAxNSwgNiwgNywgOSwgOCxcbiAgNywgNiwgOCwgMTMsIDExLCA5LCA3LCAxNSwgNywgMTIsIDE1LCA5LCAxMSwgNywgMTMsIDEyLFxuICAxMSwgMTMsIDYsIDcsIDE0LCA5LCAxMywgMTUsIDE0LCA4LCAxMywgNiwgNSwgMTIsIDcsIDUsXG4gIDExLCAxMiwgMTQsIDE1LCAxNCwgMTUsIDksIDgsIDksIDE0LCA1LCA2LCA4LCA2LCA1LCAxMixcbiAgOSwgMTUsIDUsIDExLCA2LCA4LCAxMywgMTIsIDUsIDEyLCAxMywgMTQsIDExLCA4LCA1LCA2XG5dXG5cbnZhciBzciA9IFtcbiAgOCwgOSwgOSwgMTEsIDEzLCAxNSwgMTUsIDUsIDcsIDcsIDgsIDExLCAxNCwgMTQsIDEyLCA2LFxuICA5LCAxMywgMTUsIDcsIDEyLCA4LCA5LCAxMSwgNywgNywgMTIsIDcsIDYsIDE1LCAxMywgMTEsXG4gIDksIDcsIDE1LCAxMSwgOCwgNiwgNiwgMTQsIDEyLCAxMywgNSwgMTQsIDEzLCAxMywgNywgNSxcbiAgMTUsIDUsIDgsIDExLCAxNCwgMTQsIDYsIDE0LCA2LCA5LCAxMiwgOSwgMTIsIDUsIDE1LCA4LFxuICA4LCA1LCAxMiwgOSwgMTIsIDUsIDE0LCA2LCA4LCAxMywgNiwgNSwgMTUsIDEzLCAxMSwgMTFcbl1cblxudmFyIGhsID0gWzB4MDAwMDAwMDAsIDB4NUE4Mjc5OTksIDB4NkVEOUVCQTEsIDB4OEYxQkJDREMsIDB4QTk1M0ZENEVdXG52YXIgaHIgPSBbMHg1MEEyOEJFNiwgMHg1QzRERDEyNCwgMHg2RDcwM0VGMywgMHg3QTZENzZFOSwgMHgwMDAwMDAwMF1cblxuZnVuY3Rpb24gYnl0ZXNUb1dvcmRzIChieXRlcykge1xuICB2YXIgd29yZHMgPSBbXVxuICBmb3IgKHZhciBpID0gMCwgYiA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKywgYiArPSA4KSB7XG4gICAgd29yZHNbYiA+Pj4gNV0gfD0gYnl0ZXNbaV0gPDwgKDI0IC0gYiAlIDMyKVxuICB9XG4gIHJldHVybiB3b3Jkc1xufVxuXG5mdW5jdGlvbiB3b3Jkc1RvQnl0ZXMgKHdvcmRzKSB7XG4gIHZhciBieXRlcyA9IFtdXG4gIGZvciAodmFyIGIgPSAwOyBiIDwgd29yZHMubGVuZ3RoICogMzI7IGIgKz0gOCkge1xuICAgIGJ5dGVzLnB1c2goKHdvcmRzW2IgPj4+IDVdID4+PiAoMjQgLSBiICUgMzIpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NCbG9jayAoSCwgTSwgb2Zmc2V0KSB7XG4gIC8vIHN3YXAgZW5kaWFuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIHZhciBvZmZzZXRfaSA9IG9mZnNldCArIGlcbiAgICB2YXIgTV9vZmZzZXRfaSA9IE1bb2Zmc2V0X2ldXG5cbiAgICAvLyBTd2FwXG4gICAgTVtvZmZzZXRfaV0gPSAoXG4gICAgICAoKChNX29mZnNldF9pIDw8IDgpIHwgKE1fb2Zmc2V0X2kgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG4gICAgICAoKChNX29mZnNldF9pIDw8IDI0KSB8IChNX29mZnNldF9pID4+PiA4KSkgJiAweGZmMDBmZjAwKVxuICAgIClcbiAgfVxuXG4gIC8vIFdvcmtpbmcgdmFyaWFibGVzXG4gIHZhciBhbCwgYmwsIGNsLCBkbCwgZWxcbiAgdmFyIGFyLCBiciwgY3IsIGRyLCBlclxuXG4gIGFyID0gYWwgPSBIWzBdXG4gIGJyID0gYmwgPSBIWzFdXG4gIGNyID0gY2wgPSBIWzJdXG4gIGRyID0gZGwgPSBIWzNdXG4gIGVyID0gZWwgPSBIWzRdXG5cbiAgLy8gY29tcHV0YXRpb25cbiAgdmFyIHRcbiAgZm9yIChpID0gMDsgaSA8IDgwOyBpICs9IDEpIHtcbiAgICB0ID0gKGFsICsgTVtvZmZzZXQgKyB6bFtpXV0pIHwgMFxuICAgIGlmIChpIDwgMTYpIHtcbiAgICAgIHQgKz0gZjEoYmwsIGNsLCBkbCkgKyBobFswXVxuICAgIH0gZWxzZSBpZiAoaSA8IDMyKSB7XG4gICAgICB0ICs9IGYyKGJsLCBjbCwgZGwpICsgaGxbMV1cbiAgICB9IGVsc2UgaWYgKGkgPCA0OCkge1xuICAgICAgdCArPSBmMyhibCwgY2wsIGRsKSArIGhsWzJdXG4gICAgfSBlbHNlIGlmIChpIDwgNjQpIHtcbiAgICAgIHQgKz0gZjQoYmwsIGNsLCBkbCkgKyBobFszXVxuICAgIH0gZWxzZSB7Ly8gaWYgKGk8ODApIHtcbiAgICAgIHQgKz0gZjUoYmwsIGNsLCBkbCkgKyBobFs0XVxuICAgIH1cbiAgICB0ID0gdCB8IDBcbiAgICB0ID0gcm90bCh0LCBzbFtpXSlcbiAgICB0ID0gKHQgKyBlbCkgfCAwXG4gICAgYWwgPSBlbFxuICAgIGVsID0gZGxcbiAgICBkbCA9IHJvdGwoY2wsIDEwKVxuICAgIGNsID0gYmxcbiAgICBibCA9IHRcblxuICAgIHQgPSAoYXIgKyBNW29mZnNldCArIHpyW2ldXSkgfCAwXG4gICAgaWYgKGkgPCAxNikge1xuICAgICAgdCArPSBmNShiciwgY3IsIGRyKSArIGhyWzBdXG4gICAgfSBlbHNlIGlmIChpIDwgMzIpIHtcbiAgICAgIHQgKz0gZjQoYnIsIGNyLCBkcikgKyBoclsxXVxuICAgIH0gZWxzZSBpZiAoaSA8IDQ4KSB7XG4gICAgICB0ICs9IGYzKGJyLCBjciwgZHIpICsgaHJbMl1cbiAgICB9IGVsc2UgaWYgKGkgPCA2NCkge1xuICAgICAgdCArPSBmMihiciwgY3IsIGRyKSArIGhyWzNdXG4gICAgfSBlbHNlIHsvLyBpZiAoaTw4MCkge1xuICAgICAgdCArPSBmMShiciwgY3IsIGRyKSArIGhyWzRdXG4gICAgfVxuXG4gICAgdCA9IHQgfCAwXG4gICAgdCA9IHJvdGwodCwgc3JbaV0pXG4gICAgdCA9ICh0ICsgZXIpIHwgMFxuICAgIGFyID0gZXJcbiAgICBlciA9IGRyXG4gICAgZHIgPSByb3RsKGNyLCAxMClcbiAgICBjciA9IGJyXG4gICAgYnIgPSB0XG4gIH1cblxuICAvLyBpbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuICB0ID0gKEhbMV0gKyBjbCArIGRyKSB8IDBcbiAgSFsxXSA9IChIWzJdICsgZGwgKyBlcikgfCAwXG4gIEhbMl0gPSAoSFszXSArIGVsICsgYXIpIHwgMFxuICBIWzNdID0gKEhbNF0gKyBhbCArIGJyKSB8IDBcbiAgSFs0XSA9IChIWzBdICsgYmwgKyBjcikgfCAwXG4gIEhbMF0gPSB0XG59XG5cbmZ1bmN0aW9uIGYxICh4LCB5LCB6KSB7XG4gIHJldHVybiAoKHgpIF4gKHkpIF4gKHopKVxufVxuXG5mdW5jdGlvbiBmMiAoeCwgeSwgeikge1xuICByZXR1cm4gKCgoeCkgJiAoeSkpIHwgKCh+eCkgJiAoeikpKVxufVxuXG5mdW5jdGlvbiBmMyAoeCwgeSwgeikge1xuICByZXR1cm4gKCgoeCkgfCAofih5KSkpIF4gKHopKVxufVxuXG5mdW5jdGlvbiBmNCAoeCwgeSwgeikge1xuICByZXR1cm4gKCgoeCkgJiAoeikpIHwgKCh5KSAmICh+KHopKSkpXG59XG5cbmZ1bmN0aW9uIGY1ICh4LCB5LCB6KSB7XG4gIHJldHVybiAoKHgpIF4gKCh5KSB8ICh+KHopKSkpXG59XG5cbmZ1bmN0aW9uIHJvdGwgKHgsIG4pIHtcbiAgcmV0dXJuICh4IDw8IG4pIHwgKHggPj4+ICgzMiAtIG4pKVxufVxuXG5mdW5jdGlvbiByaXBlbWQxNjAgKG1lc3NhZ2UpIHtcbiAgdmFyIEggPSBbMHg2NzQ1MjMwMSwgMHhFRkNEQUI4OSwgMHg5OEJBRENGRSwgMHgxMDMyNTQ3NiwgMHhDM0QyRTFGMF1cblxuICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgbWVzc2FnZSA9IG5ldyBCdWZmZXIobWVzc2FnZSwgJ3V0ZjgnKVxuICB9XG5cbiAgdmFyIG0gPSBieXRlc1RvV29yZHMobWVzc2FnZSlcblxuICB2YXIgbkJpdHNMZWZ0ID0gbWVzc2FnZS5sZW5ndGggKiA4XG4gIHZhciBuQml0c1RvdGFsID0gbWVzc2FnZS5sZW5ndGggKiA4XG5cbiAgLy8gQWRkIHBhZGRpbmdcbiAgbVtuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpXG4gIG1bKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IChcbiAgICAoKChuQml0c1RvdGFsIDw8IDgpIHwgKG5CaXRzVG90YWwgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG4gICAgKCgobkJpdHNUb3RhbCA8PCAyNCkgfCAobkJpdHNUb3RhbCA+Pj4gOCkpICYgMHhmZjAwZmYwMClcbiAgKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkgKz0gMTYpIHtcbiAgICBwcm9jZXNzQmxvY2soSCwgbSwgaSlcbiAgfVxuXG4gIC8vIHN3YXAgZW5kaWFuXG4gIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICAvLyBzaG9ydGN1dFxuICAgIHZhciBIX2kgPSBIW2ldXG5cbiAgICAvLyBTd2FwXG4gICAgSFtpXSA9ICgoKEhfaSA8PCA4KSB8IChIX2kgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG4gICAgICAoKChIX2kgPDwgMjQpIHwgKEhfaSA+Pj4gOCkpICYgMHhmZjAwZmYwMClcbiAgfVxuXG4gIHZhciBkaWdlc3RieXRlcyA9IHdvcmRzVG9CeXRlcyhIKVxuICByZXR1cm4gbmV3IEJ1ZmZlcihkaWdlc3RieXRlcylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByaXBlbWQxNjBcbiIsIi8vIHByb3RvdHlwZSBjbGFzcyBmb3IgaGFzaCBmdW5jdGlvbnNcbmZ1bmN0aW9uIEhhc2ggKGJsb2NrU2l6ZSwgZmluYWxTaXplKSB7XG4gIHRoaXMuX2Jsb2NrID0gbmV3IEJ1ZmZlcihibG9ja1NpemUpXG4gIHRoaXMuX2ZpbmFsU2l6ZSA9IGZpbmFsU2l6ZVxuICB0aGlzLl9ibG9ja1NpemUgPSBibG9ja1NpemVcbiAgdGhpcy5fbGVuID0gMFxuICB0aGlzLl9zID0gMFxufVxuXG5IYXNoLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmMgPSBlbmMgfHwgJ3V0ZjgnXG4gICAgZGF0YSA9IG5ldyBCdWZmZXIoZGF0YSwgZW5jKVxuICB9XG5cbiAgdmFyIGwgPSB0aGlzLl9sZW4gKz0gZGF0YS5sZW5ndGhcbiAgdmFyIHMgPSB0aGlzLl9zIHx8IDBcbiAgdmFyIGYgPSAwXG4gIHZhciBidWZmZXIgPSB0aGlzLl9ibG9ja1xuXG4gIHdoaWxlIChzIDwgbCkge1xuICAgIHZhciB0ID0gTWF0aC5taW4oZGF0YS5sZW5ndGgsIGYgKyB0aGlzLl9ibG9ja1NpemUgLSAocyAlIHRoaXMuX2Jsb2NrU2l6ZSkpXG4gICAgdmFyIGNoID0gKHQgLSBmKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaDsgaSsrKSB7XG4gICAgICBidWZmZXJbKHMgJSB0aGlzLl9ibG9ja1NpemUpICsgaV0gPSBkYXRhW2kgKyBmXVxuICAgIH1cblxuICAgIHMgKz0gY2hcbiAgICBmICs9IGNoXG5cbiAgICBpZiAoKHMgJSB0aGlzLl9ibG9ja1NpemUpID09PSAwKSB7XG4gICAgICB0aGlzLl91cGRhdGUoYnVmZmVyKVxuICAgIH1cbiAgfVxuICB0aGlzLl9zID0gc1xuXG4gIHJldHVybiB0aGlzXG59XG5cbkhhc2gucHJvdG90eXBlLmRpZ2VzdCA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgLy8gU3VwcG9zZSB0aGUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlIE0sIGluIGJpdHMsIGlzIGxcbiAgdmFyIGwgPSB0aGlzLl9sZW4gKiA4XG5cbiAgLy8gQXBwZW5kIHRoZSBiaXQgMSB0byB0aGUgZW5kIG9mIHRoZSBtZXNzYWdlXG4gIHRoaXMuX2Jsb2NrW3RoaXMuX2xlbiAlIHRoaXMuX2Jsb2NrU2l6ZV0gPSAweDgwXG5cbiAgLy8gYW5kIHRoZW4gayB6ZXJvIGJpdHMsIHdoZXJlIGsgaXMgdGhlIHNtYWxsZXN0IG5vbi1uZWdhdGl2ZSBzb2x1dGlvbiB0byB0aGUgZXF1YXRpb24gKGwgKyAxICsgaykgPT09IGZpbmFsU2l6ZSBtb2QgYmxvY2tTaXplXG4gIHRoaXMuX2Jsb2NrLmZpbGwoMCwgdGhpcy5fbGVuICUgdGhpcy5fYmxvY2tTaXplICsgMSlcblxuICBpZiAobCAlICh0aGlzLl9ibG9ja1NpemUgKiA4KSA+PSB0aGlzLl9maW5hbFNpemUgKiA4KSB7XG4gICAgdGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKVxuICAgIHRoaXMuX2Jsb2NrLmZpbGwoMClcbiAgfVxuXG4gIC8vIHRvIHRoaXMgYXBwZW5kIHRoZSBibG9jayB3aGljaCBpcyBlcXVhbCB0byB0aGUgbnVtYmVyIGwgd3JpdHRlbiBpbiBiaW5hcnlcbiAgLy8gVE9ETzogaGFuZGxlIGNhc2Ugd2hlcmUgbCBpcyA+IE1hdGgucG93KDIsIDI5KVxuICB0aGlzLl9ibG9jay53cml0ZUludDMyQkUobCwgdGhpcy5fYmxvY2tTaXplIC0gNClcblxuICB2YXIgaGFzaCA9IHRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jaykgfHwgdGhpcy5faGFzaCgpXG5cbiAgcmV0dXJuIGVuYyA/IGhhc2gudG9TdHJpbmcoZW5jKSA6IGhhc2hcbn1cblxuSGFzaC5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdfdXBkYXRlIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3MnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2hcbiIsInZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTSEEgKGFsZ29yaXRobSkge1xuICBhbGdvcml0aG0gPSBhbGdvcml0aG0udG9Mb3dlckNhc2UoKVxuXG4gIHZhciBBbGdvcml0aG0gPSBleHBvcnRzW2FsZ29yaXRobV1cbiAgaWYgKCFBbGdvcml0aG0pIHRocm93IG5ldyBFcnJvcihhbGdvcml0aG0gKyAnIGlzIG5vdCBzdXBwb3J0ZWQgKHdlIGFjY2VwdCBwdWxsIHJlcXVlc3RzKScpXG5cbiAgcmV0dXJuIG5ldyBBbGdvcml0aG0oKVxufVxuXG5leHBvcnRzLnNoYSA9IHJlcXVpcmUoJy4vc2hhJylcbmV4cG9ydHMuc2hhMSA9IHJlcXVpcmUoJy4vc2hhMScpXG5leHBvcnRzLnNoYTIyNCA9IHJlcXVpcmUoJy4vc2hhMjI0JylcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEyNTYnKVxuZXhwb3J0cy5zaGEzODQgPSByZXF1aXJlKCcuL3NoYTM4NCcpXG5leHBvcnRzLnNoYTUxMiA9IHJlcXVpcmUoJy4vc2hhNTEyJylcbiIsIi8qXG4gKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNlY3VyZSBIYXNoIEFsZ29yaXRobSwgU0hBLTAsIGFzIGRlZmluZWRcbiAqIGluIEZJUFMgUFVCIDE4MC0xXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzaGExLmpzIG9mIHRoZSBzYW1lIHJlcG9zaXRvcnkuXG4gKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFNIQS0wIGFuZCBTSEEtMSBpcyBqdXN0IGEgYml0d2lzZSByb3RhdGUgbGVmdFxuICogb3BlcmF0aW9uIHdhcyBhZGRlZC5cbiAqL1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgSGFzaCA9IHJlcXVpcmUoJy4vaGFzaCcpXG5cbnZhciBLID0gW1xuICAweDVhODI3OTk5LCAweDZlZDllYmExLCAweDhmMWJiY2RjIHwgMCwgMHhjYTYyYzFkNiB8IDBcbl1cblxudmFyIFcgPSBuZXcgQXJyYXkoODApXG5cbmZ1bmN0aW9uIFNoYSAoKSB7XG4gIHRoaXMuaW5pdCgpXG4gIHRoaXMuX3cgPSBXXG5cbiAgSGFzaC5jYWxsKHRoaXMsIDY0LCA1Nilcbn1cblxuaW5oZXJpdHMoU2hhLCBIYXNoKVxuXG5TaGEucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2EgPSAweDY3NDUyMzAxXG4gIHRoaXMuX2IgPSAweGVmY2RhYjg5XG4gIHRoaXMuX2MgPSAweDk4YmFkY2ZlXG4gIHRoaXMuX2QgPSAweDEwMzI1NDc2XG4gIHRoaXMuX2UgPSAweGMzZDJlMWYwXG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuZnVuY3Rpb24gcm90bDUgKG51bSkge1xuICByZXR1cm4gKG51bSA8PCA1KSB8IChudW0gPj4+IDI3KVxufVxuXG5mdW5jdGlvbiByb3RsMzAgKG51bSkge1xuICByZXR1cm4gKG51bSA8PCAzMCkgfCAobnVtID4+PiAyKVxufVxuXG5mdW5jdGlvbiBmdCAocywgYiwgYywgZCkge1xuICBpZiAocyA9PT0gMCkgcmV0dXJuIChiICYgYykgfCAoKH5iKSAmIGQpXG4gIGlmIChzID09PSAyKSByZXR1cm4gKGIgJiBjKSB8IChiICYgZCkgfCAoYyAmIGQpXG4gIHJldHVybiBiIF4gYyBeIGRcbn1cblxuU2hhLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKE0pIHtcbiAgdmFyIFcgPSB0aGlzLl93XG5cbiAgdmFyIGEgPSB0aGlzLl9hIHwgMFxuICB2YXIgYiA9IHRoaXMuX2IgfCAwXG4gIHZhciBjID0gdGhpcy5fYyB8IDBcbiAgdmFyIGQgPSB0aGlzLl9kIHwgMFxuICB2YXIgZSA9IHRoaXMuX2UgfCAwXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgKytpKSBXW2ldID0gTS5yZWFkSW50MzJCRShpICogNClcbiAgZm9yICg7IGkgPCA4MDsgKytpKSBXW2ldID0gV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XVxuXG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7ICsraikge1xuICAgIHZhciBzID0gfn4oaiAvIDIwKVxuICAgIHZhciB0ID0gKHJvdGw1KGEpICsgZnQocywgYiwgYywgZCkgKyBlICsgV1tqXSArIEtbc10pIHwgMFxuXG4gICAgZSA9IGRcbiAgICBkID0gY1xuICAgIGMgPSByb3RsMzAoYilcbiAgICBiID0gYVxuICAgIGEgPSB0XG4gIH1cblxuICB0aGlzLl9hID0gKGEgKyB0aGlzLl9hKSB8IDBcbiAgdGhpcy5fYiA9IChiICsgdGhpcy5fYikgfCAwXG4gIHRoaXMuX2MgPSAoYyArIHRoaXMuX2MpIHwgMFxuICB0aGlzLl9kID0gKGQgKyB0aGlzLl9kKSB8IDBcbiAgdGhpcy5fZSA9IChlICsgdGhpcy5fZSkgfCAwXG59XG5cblNoYS5wcm90b3R5cGUuX2hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBIID0gbmV3IEJ1ZmZlcigyMClcblxuICBILndyaXRlSW50MzJCRSh0aGlzLl9hIHwgMCwgMClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYiB8IDAsIDQpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2MgfCAwLCA4KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9kIHwgMCwgMTIpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2UgfCAwLCAxNilcblxuICByZXR1cm4gSFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYVxuIiwiLypcbiAqIEEgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2VjdXJlIEhhc2ggQWxnb3JpdGhtLCBTSEEtMSwgYXMgZGVmaW5lZFxuICogaW4gRklQUyBQVUIgMTgwLTFcbiAqIFZlcnNpb24gMi4xYSBDb3B5cmlnaHQgUGF1bCBKb2huc3RvbiAyMDAwIC0gMjAwMi5cbiAqIE90aGVyIGNvbnRyaWJ1dG9yczogR3JlZyBIb2x0LCBBbmRyZXcgS2VwZXJ0LCBZZG5hciwgTG9zdGluZXRcbiAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCU0QgTGljZW5zZVxuICogU2VlIGh0dHA6Ly9wYWpob21lLm9yZy51ay9jcnlwdC9tZDUgZm9yIGRldGFpbHMuXG4gKi9cblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIEhhc2ggPSByZXF1aXJlKCcuL2hhc2gnKVxuXG52YXIgSyA9IFtcbiAgMHg1YTgyNzk5OSwgMHg2ZWQ5ZWJhMSwgMHg4ZjFiYmNkYyB8IDAsIDB4Y2E2MmMxZDYgfCAwXG5dXG5cbnZhciBXID0gbmV3IEFycmF5KDgwKVxuXG5mdW5jdGlvbiBTaGExICgpIHtcbiAgdGhpcy5pbml0KClcbiAgdGhpcy5fdyA9IFdcblxuICBIYXNoLmNhbGwodGhpcywgNjQsIDU2KVxufVxuXG5pbmhlcml0cyhTaGExLCBIYXNoKVxuXG5TaGExLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9hID0gMHg2NzQ1MjMwMVxuICB0aGlzLl9iID0gMHhlZmNkYWI4OVxuICB0aGlzLl9jID0gMHg5OGJhZGNmZVxuICB0aGlzLl9kID0gMHgxMDMyNTQ3NlxuICB0aGlzLl9lID0gMHhjM2QyZTFmMFxuXG4gIHJldHVybiB0aGlzXG59XG5cbmZ1bmN0aW9uIHJvdGwxIChudW0pIHtcbiAgcmV0dXJuIChudW0gPDwgMSkgfCAobnVtID4+PiAzMSlcbn1cblxuZnVuY3Rpb24gcm90bDUgKG51bSkge1xuICByZXR1cm4gKG51bSA8PCA1KSB8IChudW0gPj4+IDI3KVxufVxuXG5mdW5jdGlvbiByb3RsMzAgKG51bSkge1xuICByZXR1cm4gKG51bSA8PCAzMCkgfCAobnVtID4+PiAyKVxufVxuXG5mdW5jdGlvbiBmdCAocywgYiwgYywgZCkge1xuICBpZiAocyA9PT0gMCkgcmV0dXJuIChiICYgYykgfCAoKH5iKSAmIGQpXG4gIGlmIChzID09PSAyKSByZXR1cm4gKGIgJiBjKSB8IChiICYgZCkgfCAoYyAmIGQpXG4gIHJldHVybiBiIF4gYyBeIGRcbn1cblxuU2hhMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChNKSB7XG4gIHZhciBXID0gdGhpcy5fd1xuXG4gIHZhciBhID0gdGhpcy5fYSB8IDBcbiAgdmFyIGIgPSB0aGlzLl9iIHwgMFxuICB2YXIgYyA9IHRoaXMuX2MgfCAwXG4gIHZhciBkID0gdGhpcy5fZCB8IDBcbiAgdmFyIGUgPSB0aGlzLl9lIHwgMFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7ICsraSkgV1tpXSA9IE0ucmVhZEludDMyQkUoaSAqIDQpXG4gIGZvciAoOyBpIDwgODA7ICsraSkgV1tpXSA9IHJvdGwxKFdbaSAtIDNdIF4gV1tpIC0gOF0gXiBXW2kgLSAxNF0gXiBXW2kgLSAxNl0pXG5cbiAgZm9yICh2YXIgaiA9IDA7IGogPCA4MDsgKytqKSB7XG4gICAgdmFyIHMgPSB+fihqIC8gMjApXG4gICAgdmFyIHQgPSAocm90bDUoYSkgKyBmdChzLCBiLCBjLCBkKSArIGUgKyBXW2pdICsgS1tzXSkgfCAwXG5cbiAgICBlID0gZFxuICAgIGQgPSBjXG4gICAgYyA9IHJvdGwzMChiKVxuICAgIGIgPSBhXG4gICAgYSA9IHRcbiAgfVxuXG4gIHRoaXMuX2EgPSAoYSArIHRoaXMuX2EpIHwgMFxuICB0aGlzLl9iID0gKGIgKyB0aGlzLl9iKSB8IDBcbiAgdGhpcy5fYyA9IChjICsgdGhpcy5fYykgfCAwXG4gIHRoaXMuX2QgPSAoZCArIHRoaXMuX2QpIHwgMFxuICB0aGlzLl9lID0gKGUgKyB0aGlzLl9lKSB8IDBcbn1cblxuU2hhMS5wcm90b3R5cGUuX2hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBIID0gbmV3IEJ1ZmZlcigyMClcblxuICBILndyaXRlSW50MzJCRSh0aGlzLl9hIHwgMCwgMClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYiB8IDAsIDQpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2MgfCAwLCA4KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9kIHwgMCwgMTIpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2UgfCAwLCAxNilcblxuICByZXR1cm4gSFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYTFcbiIsIi8qKlxuICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTZWN1cmUgSGFzaCBBbGdvcml0aG0sIFNIQS0yNTYsIGFzIGRlZmluZWRcbiAqIGluIEZJUFMgMTgwLTJcbiAqIFZlcnNpb24gMi4yLWJldGEgQ29weXJpZ2h0IEFuZ2VsIE1hcmluLCBQYXVsIEpvaG5zdG9uIDIwMDAgLSAyMDA5LlxuICogT3RoZXIgY29udHJpYnV0b3JzOiBHcmVnIEhvbHQsIEFuZHJldyBLZXBlcnQsIFlkbmFyLCBMb3N0aW5ldFxuICpcbiAqL1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgU2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEyNTYnKVxudmFyIEhhc2ggPSByZXF1aXJlKCcuL2hhc2gnKVxuXG52YXIgVyA9IG5ldyBBcnJheSg2NClcblxuZnVuY3Rpb24gU2hhMjI0ICgpIHtcbiAgdGhpcy5pbml0KClcblxuICB0aGlzLl93ID0gVyAvLyBuZXcgQXJyYXkoNjQpXG5cbiAgSGFzaC5jYWxsKHRoaXMsIDY0LCA1Nilcbn1cblxuaW5oZXJpdHMoU2hhMjI0LCBTaGEyNTYpXG5cblNoYTIyNC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fYSA9IDB4YzEwNTllZDhcbiAgdGhpcy5fYiA9IDB4MzY3Y2Q1MDdcbiAgdGhpcy5fYyA9IDB4MzA3MGRkMTdcbiAgdGhpcy5fZCA9IDB4ZjcwZTU5MzlcbiAgdGhpcy5fZSA9IDB4ZmZjMDBiMzFcbiAgdGhpcy5fZiA9IDB4Njg1ODE1MTFcbiAgdGhpcy5fZyA9IDB4NjRmOThmYTdcbiAgdGhpcy5faCA9IDB4YmVmYTRmYTRcblxuICByZXR1cm4gdGhpc1xufVxuXG5TaGEyMjQucHJvdG90eXBlLl9oYXNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgSCA9IG5ldyBCdWZmZXIoMjgpXG5cbiAgSC53cml0ZUludDMyQkUodGhpcy5fYSwgMClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYiwgNClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYywgOClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZCwgMTIpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2UsIDE2KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9mLCAyMClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZywgMjQpXG5cbiAgcmV0dXJuIEhcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGEyMjRcbiIsIi8qKlxuICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTZWN1cmUgSGFzaCBBbGdvcml0aG0sIFNIQS0yNTYsIGFzIGRlZmluZWRcbiAqIGluIEZJUFMgMTgwLTJcbiAqIFZlcnNpb24gMi4yLWJldGEgQ29weXJpZ2h0IEFuZ2VsIE1hcmluLCBQYXVsIEpvaG5zdG9uIDIwMDAgLSAyMDA5LlxuICogT3RoZXIgY29udHJpYnV0b3JzOiBHcmVnIEhvbHQsIEFuZHJldyBLZXBlcnQsIFlkbmFyLCBMb3N0aW5ldFxuICpcbiAqL1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgSGFzaCA9IHJlcXVpcmUoJy4vaGFzaCcpXG5cbnZhciBLID0gW1xuICAweDQyOEEyRjk4LCAweDcxMzc0NDkxLCAweEI1QzBGQkNGLCAweEU5QjVEQkE1LFxuICAweDM5NTZDMjVCLCAweDU5RjExMUYxLCAweDkyM0Y4MkE0LCAweEFCMUM1RUQ1LFxuICAweEQ4MDdBQTk4LCAweDEyODM1QjAxLCAweDI0MzE4NUJFLCAweDU1MEM3REMzLFxuICAweDcyQkU1RDc0LCAweDgwREVCMUZFLCAweDlCREMwNkE3LCAweEMxOUJGMTc0LFxuICAweEU0OUI2OUMxLCAweEVGQkU0Nzg2LCAweDBGQzE5REM2LCAweDI0MENBMUNDLFxuICAweDJERTkyQzZGLCAweDRBNzQ4NEFBLCAweDVDQjBBOURDLCAweDc2Rjk4OERBLFxuICAweDk4M0U1MTUyLCAweEE4MzFDNjZELCAweEIwMDMyN0M4LCAweEJGNTk3RkM3LFxuICAweEM2RTAwQkYzLCAweEQ1QTc5MTQ3LCAweDA2Q0E2MzUxLCAweDE0MjkyOTY3LFxuICAweDI3QjcwQTg1LCAweDJFMUIyMTM4LCAweDREMkM2REZDLCAweDUzMzgwRDEzLFxuICAweDY1MEE3MzU0LCAweDc2NkEwQUJCLCAweDgxQzJDOTJFLCAweDkyNzIyQzg1LFxuICAweEEyQkZFOEExLCAweEE4MUE2NjRCLCAweEMyNEI4QjcwLCAweEM3NkM1MUEzLFxuICAweEQxOTJFODE5LCAweEQ2OTkwNjI0LCAweEY0MEUzNTg1LCAweDEwNkFBMDcwLFxuICAweDE5QTRDMTE2LCAweDFFMzc2QzA4LCAweDI3NDg3NzRDLCAweDM0QjBCQ0I1LFxuICAweDM5MUMwQ0IzLCAweDRFRDhBQTRBLCAweDVCOUNDQTRGLCAweDY4MkU2RkYzLFxuICAweDc0OEY4MkVFLCAweDc4QTU2MzZGLCAweDg0Qzg3ODE0LCAweDhDQzcwMjA4LFxuICAweDkwQkVGRkZBLCAweEE0NTA2Q0VCLCAweEJFRjlBM0Y3LCAweEM2NzE3OEYyXG5dXG5cbnZhciBXID0gbmV3IEFycmF5KDY0KVxuXG5mdW5jdGlvbiBTaGEyNTYgKCkge1xuICB0aGlzLmluaXQoKVxuXG4gIHRoaXMuX3cgPSBXIC8vIG5ldyBBcnJheSg2NClcblxuICBIYXNoLmNhbGwodGhpcywgNjQsIDU2KVxufVxuXG5pbmhlcml0cyhTaGEyNTYsIEhhc2gpXG5cblNoYTI1Ni5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fYSA9IDB4NmEwOWU2NjdcbiAgdGhpcy5fYiA9IDB4YmI2N2FlODVcbiAgdGhpcy5fYyA9IDB4M2M2ZWYzNzJcbiAgdGhpcy5fZCA9IDB4YTU0ZmY1M2FcbiAgdGhpcy5fZSA9IDB4NTEwZTUyN2ZcbiAgdGhpcy5fZiA9IDB4OWIwNTY4OGNcbiAgdGhpcy5fZyA9IDB4MWY4M2Q5YWJcbiAgdGhpcy5faCA9IDB4NWJlMGNkMTlcblxuICByZXR1cm4gdGhpc1xufVxuXG5mdW5jdGlvbiBjaCAoeCwgeSwgeikge1xuICByZXR1cm4geiBeICh4ICYgKHkgXiB6KSlcbn1cblxuZnVuY3Rpb24gbWFqICh4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIHwgKHogJiAoeCB8IHkpKVxufVxuXG5mdW5jdGlvbiBzaWdtYTAgKHgpIHtcbiAgcmV0dXJuICh4ID4+PiAyIHwgeCA8PCAzMCkgXiAoeCA+Pj4gMTMgfCB4IDw8IDE5KSBeICh4ID4+PiAyMiB8IHggPDwgMTApXG59XG5cbmZ1bmN0aW9uIHNpZ21hMSAoeCkge1xuICByZXR1cm4gKHggPj4+IDYgfCB4IDw8IDI2KSBeICh4ID4+PiAxMSB8IHggPDwgMjEpIF4gKHggPj4+IDI1IHwgeCA8PCA3KVxufVxuXG5mdW5jdGlvbiBnYW1tYTAgKHgpIHtcbiAgcmV0dXJuICh4ID4+PiA3IHwgeCA8PCAyNSkgXiAoeCA+Pj4gMTggfCB4IDw8IDE0KSBeICh4ID4+PiAzKVxufVxuXG5mdW5jdGlvbiBnYW1tYTEgKHgpIHtcbiAgcmV0dXJuICh4ID4+PiAxNyB8IHggPDwgMTUpIF4gKHggPj4+IDE5IHwgeCA8PCAxMykgXiAoeCA+Pj4gMTApXG59XG5cblNoYTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChNKSB7XG4gIHZhciBXID0gdGhpcy5fd1xuXG4gIHZhciBhID0gdGhpcy5fYSB8IDBcbiAgdmFyIGIgPSB0aGlzLl9iIHwgMFxuICB2YXIgYyA9IHRoaXMuX2MgfCAwXG4gIHZhciBkID0gdGhpcy5fZCB8IDBcbiAgdmFyIGUgPSB0aGlzLl9lIHwgMFxuICB2YXIgZiA9IHRoaXMuX2YgfCAwXG4gIHZhciBnID0gdGhpcy5fZyB8IDBcbiAgdmFyIGggPSB0aGlzLl9oIHwgMFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7ICsraSkgV1tpXSA9IE0ucmVhZEludDMyQkUoaSAqIDQpXG4gIGZvciAoOyBpIDwgNjQ7ICsraSkgV1tpXSA9IChnYW1tYTEoV1tpIC0gMl0pICsgV1tpIC0gN10gKyBnYW1tYTAoV1tpIC0gMTVdKSArIFdbaSAtIDE2XSkgfCAwXG5cbiAgZm9yICh2YXIgaiA9IDA7IGogPCA2NDsgKytqKSB7XG4gICAgdmFyIFQxID0gKGggKyBzaWdtYTEoZSkgKyBjaChlLCBmLCBnKSArIEtbal0gKyBXW2pdKSB8IDBcbiAgICB2YXIgVDIgPSAoc2lnbWEwKGEpICsgbWFqKGEsIGIsIGMpKSB8IDBcblxuICAgIGggPSBnXG4gICAgZyA9IGZcbiAgICBmID0gZVxuICAgIGUgPSAoZCArIFQxKSB8IDBcbiAgICBkID0gY1xuICAgIGMgPSBiXG4gICAgYiA9IGFcbiAgICBhID0gKFQxICsgVDIpIHwgMFxuICB9XG5cbiAgdGhpcy5fYSA9IChhICsgdGhpcy5fYSkgfCAwXG4gIHRoaXMuX2IgPSAoYiArIHRoaXMuX2IpIHwgMFxuICB0aGlzLl9jID0gKGMgKyB0aGlzLl9jKSB8IDBcbiAgdGhpcy5fZCA9IChkICsgdGhpcy5fZCkgfCAwXG4gIHRoaXMuX2UgPSAoZSArIHRoaXMuX2UpIHwgMFxuICB0aGlzLl9mID0gKGYgKyB0aGlzLl9mKSB8IDBcbiAgdGhpcy5fZyA9IChnICsgdGhpcy5fZykgfCAwXG4gIHRoaXMuX2ggPSAoaCArIHRoaXMuX2gpIHwgMFxufVxuXG5TaGEyNTYucHJvdG90eXBlLl9oYXNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgSCA9IG5ldyBCdWZmZXIoMzIpXG5cbiAgSC53cml0ZUludDMyQkUodGhpcy5fYSwgMClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYiwgNClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYywgOClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZCwgMTIpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2UsIDE2KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9mLCAyMClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZywgMjQpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2gsIDI4KVxuXG4gIHJldHVybiBIXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhMjU2XG4iLCJ2YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi9zaGE1MTInKVxudmFyIEhhc2ggPSByZXF1aXJlKCcuL2hhc2gnKVxuXG52YXIgVyA9IG5ldyBBcnJheSgxNjApXG5cbmZ1bmN0aW9uIFNoYTM4NCAoKSB7XG4gIHRoaXMuaW5pdCgpXG4gIHRoaXMuX3cgPSBXXG5cbiAgSGFzaC5jYWxsKHRoaXMsIDEyOCwgMTEyKVxufVxuXG5pbmhlcml0cyhTaGEzODQsIFNIQTUxMilcblxuU2hhMzg0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9haCA9IDB4Y2JiYjlkNWRcbiAgdGhpcy5fYmggPSAweDYyOWEyOTJhXG4gIHRoaXMuX2NoID0gMHg5MTU5MDE1YVxuICB0aGlzLl9kaCA9IDB4MTUyZmVjZDhcbiAgdGhpcy5fZWggPSAweDY3MzMyNjY3XG4gIHRoaXMuX2ZoID0gMHg4ZWI0NGE4N1xuICB0aGlzLl9naCA9IDB4ZGIwYzJlMGRcbiAgdGhpcy5faGggPSAweDQ3YjU0ODFkXG5cbiAgdGhpcy5fYWwgPSAweGMxMDU5ZWQ4XG4gIHRoaXMuX2JsID0gMHgzNjdjZDUwN1xuICB0aGlzLl9jbCA9IDB4MzA3MGRkMTdcbiAgdGhpcy5fZGwgPSAweGY3MGU1OTM5XG4gIHRoaXMuX2VsID0gMHhmZmMwMGIzMVxuICB0aGlzLl9mbCA9IDB4Njg1ODE1MTFcbiAgdGhpcy5fZ2wgPSAweDY0Zjk4ZmE3XG4gIHRoaXMuX2hsID0gMHhiZWZhNGZhNFxuXG4gIHJldHVybiB0aGlzXG59XG5cblNoYTM4NC5wcm90b3R5cGUuX2hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBIID0gbmV3IEJ1ZmZlcig0OClcblxuICBmdW5jdGlvbiB3cml0ZUludDY0QkUgKGgsIGwsIG9mZnNldCkge1xuICAgIEgud3JpdGVJbnQzMkJFKGgsIG9mZnNldClcbiAgICBILndyaXRlSW50MzJCRShsLCBvZmZzZXQgKyA0KVxuICB9XG5cbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2FoLCB0aGlzLl9hbCwgMClcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2JoLCB0aGlzLl9ibCwgOClcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2NoLCB0aGlzLl9jbCwgMTYpXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9kaCwgdGhpcy5fZGwsIDI0KVxuICB3cml0ZUludDY0QkUodGhpcy5fZWgsIHRoaXMuX2VsLCAzMilcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2ZoLCB0aGlzLl9mbCwgNDApXG5cbiAgcmV0dXJuIEhcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGEzODRcbiIsInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBIYXNoID0gcmVxdWlyZSgnLi9oYXNoJylcblxudmFyIEsgPSBbXG4gIDB4NDI4YTJmOTgsIDB4ZDcyOGFlMjIsIDB4NzEzNzQ0OTEsIDB4MjNlZjY1Y2QsXG4gIDB4YjVjMGZiY2YsIDB4ZWM0ZDNiMmYsIDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMsXG4gIDB4Mzk1NmMyNWIsIDB4ZjM0OGI1MzgsIDB4NTlmMTExZjEsIDB4YjYwNWQwMTksXG4gIDB4OTIzZjgyYTQsIDB4YWYxOTRmOWIsIDB4YWIxYzVlZDUsIDB4ZGE2ZDgxMTgsXG4gIDB4ZDgwN2FhOTgsIDB4YTMwMzAyNDIsIDB4MTI4MzViMDEsIDB4NDU3MDZmYmUsXG4gIDB4MjQzMTg1YmUsIDB4NGVlNGIyOGMsIDB4NTUwYzdkYzMsIDB4ZDVmZmI0ZTIsXG4gIDB4NzJiZTVkNzQsIDB4ZjI3Yjg5NmYsIDB4ODBkZWIxZmUsIDB4M2IxNjk2YjEsXG4gIDB4OWJkYzA2YTcsIDB4MjVjNzEyMzUsIDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQsXG4gIDB4ZTQ5YjY5YzEsIDB4OWVmMTRhZDIsIDB4ZWZiZTQ3ODYsIDB4Mzg0ZjI1ZTMsXG4gIDB4MGZjMTlkYzYsIDB4OGI4Y2Q1YjUsIDB4MjQwY2ExY2MsIDB4NzdhYzljNjUsXG4gIDB4MmRlOTJjNmYsIDB4NTkyYjAyNzUsIDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMsXG4gIDB4NWNiMGE5ZGMsIDB4YmQ0MWZiZDQsIDB4NzZmOTg4ZGEsIDB4ODMxMTUzYjUsXG4gIDB4OTgzZTUxNTIsIDB4ZWU2NmRmYWIsIDB4YTgzMWM2NmQsIDB4MmRiNDMyMTAsXG4gIDB4YjAwMzI3YzgsIDB4OThmYjIxM2YsIDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQsXG4gIDB4YzZlMDBiZjMsIDB4M2RhODhmYzIsIDB4ZDVhNzkxNDcsIDB4OTMwYWE3MjUsXG4gIDB4MDZjYTYzNTEsIDB4ZTAwMzgyNmYsIDB4MTQyOTI5NjcsIDB4MGEwZTZlNzAsXG4gIDB4MjdiNzBhODUsIDB4NDZkMjJmZmMsIDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYsXG4gIDB4NGQyYzZkZmMsIDB4NWFjNDJhZWQsIDB4NTMzODBkMTMsIDB4OWQ5NWIzZGYsXG4gIDB4NjUwYTczNTQsIDB4OGJhZjYzZGUsIDB4NzY2YTBhYmIsIDB4M2M3N2IyYTgsXG4gIDB4ODFjMmM5MmUsIDB4NDdlZGFlZTYsIDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IsXG4gIDB4YTJiZmU4YTEsIDB4NGNmMTAzNjQsIDB4YTgxYTY2NGIsIDB4YmM0MjMwMDEsXG4gIDB4YzI0YjhiNzAsIDB4ZDBmODk3OTEsIDB4Yzc2YzUxYTMsIDB4MDY1NGJlMzAsXG4gIDB4ZDE5MmU4MTksIDB4ZDZlZjUyMTgsIDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTAsXG4gIDB4ZjQwZTM1ODUsIDB4NTc3MTIwMmEsIDB4MTA2YWEwNzAsIDB4MzJiYmQxYjgsXG4gIDB4MTlhNGMxMTYsIDB4YjhkMmQwYzgsIDB4MWUzNzZjMDgsIDB4NTE0MWFiNTMsXG4gIDB4Mjc0ODc3NGMsIDB4ZGY4ZWViOTksIDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgsXG4gIDB4MzkxYzBjYjMsIDB4YzVjOTVhNjMsIDB4NGVkOGFhNGEsIDB4ZTM0MThhY2IsXG4gIDB4NWI5Y2NhNGYsIDB4Nzc2M2UzNzMsIDB4NjgyZTZmZjMsIDB4ZDZiMmI4YTMsXG4gIDB4NzQ4ZjgyZWUsIDB4NWRlZmIyZmMsIDB4NzhhNTYzNmYsIDB4NDMxNzJmNjAsXG4gIDB4ODRjODc4MTQsIDB4YTFmMGFiNzIsIDB4OGNjNzAyMDgsIDB4MWE2NDM5ZWMsXG4gIDB4OTBiZWZmZmEsIDB4MjM2MzFlMjgsIDB4YTQ1MDZjZWIsIDB4ZGU4MmJkZTksXG4gIDB4YmVmOWEzZjcsIDB4YjJjNjc5MTUsIDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIsXG4gIDB4Y2EyNzNlY2UsIDB4ZWEyNjYxOWMsIDB4ZDE4NmI4YzcsIDB4MjFjMGMyMDcsXG4gIDB4ZWFkYTdkZDYsIDB4Y2RlMGViMWUsIDB4ZjU3ZDRmN2YsIDB4ZWU2ZWQxNzgsXG4gIDB4MDZmMDY3YWEsIDB4NzIxNzZmYmEsIDB4MGE2MzdkYzUsIDB4YTJjODk4YTYsXG4gIDB4MTEzZjk4MDQsIDB4YmVmOTBkYWUsIDB4MWI3MTBiMzUsIDB4MTMxYzQ3MWIsXG4gIDB4MjhkYjc3ZjUsIDB4MjMwNDdkODQsIDB4MzJjYWFiN2IsIDB4NDBjNzI0OTMsXG4gIDB4M2M5ZWJlMGEsIDB4MTVjOWJlYmMsIDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMsXG4gIDB4NGNjNWQ0YmUsIDB4Y2IzZTQyYjYsIDB4NTk3ZjI5OWMsIDB4ZmM2NTdlMmEsXG4gIDB4NWZjYjZmYWIsIDB4M2FkNmZhZWMsIDB4NmM0NDE5OGMsIDB4NGE0NzU4MTdcbl1cblxudmFyIFcgPSBuZXcgQXJyYXkoMTYwKVxuXG5mdW5jdGlvbiBTaGE1MTIgKCkge1xuICB0aGlzLmluaXQoKVxuICB0aGlzLl93ID0gV1xuXG4gIEhhc2guY2FsbCh0aGlzLCAxMjgsIDExMilcbn1cblxuaW5oZXJpdHMoU2hhNTEyLCBIYXNoKVxuXG5TaGE1MTIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2FoID0gMHg2YTA5ZTY2N1xuICB0aGlzLl9iaCA9IDB4YmI2N2FlODVcbiAgdGhpcy5fY2ggPSAweDNjNmVmMzcyXG4gIHRoaXMuX2RoID0gMHhhNTRmZjUzYVxuICB0aGlzLl9laCA9IDB4NTEwZTUyN2ZcbiAgdGhpcy5fZmggPSAweDliMDU2ODhjXG4gIHRoaXMuX2doID0gMHgxZjgzZDlhYlxuICB0aGlzLl9oaCA9IDB4NWJlMGNkMTlcblxuICB0aGlzLl9hbCA9IDB4ZjNiY2M5MDhcbiAgdGhpcy5fYmwgPSAweDg0Y2FhNzNiXG4gIHRoaXMuX2NsID0gMHhmZTk0ZjgyYlxuICB0aGlzLl9kbCA9IDB4NWYxZDM2ZjFcbiAgdGhpcy5fZWwgPSAweGFkZTY4MmQxXG4gIHRoaXMuX2ZsID0gMHgyYjNlNmMxZlxuICB0aGlzLl9nbCA9IDB4ZmI0MWJkNmJcbiAgdGhpcy5faGwgPSAweDEzN2UyMTc5XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuZnVuY3Rpb24gQ2ggKHgsIHksIHopIHtcbiAgcmV0dXJuIHogXiAoeCAmICh5IF4geikpXG59XG5cbmZ1bmN0aW9uIG1haiAoeCwgeSwgeikge1xuICByZXR1cm4gKHggJiB5KSB8ICh6ICYgKHggfCB5KSlcbn1cblxuZnVuY3Rpb24gc2lnbWEwICh4LCB4bCkge1xuICByZXR1cm4gKHggPj4+IDI4IHwgeGwgPDwgNCkgXiAoeGwgPj4+IDIgfCB4IDw8IDMwKSBeICh4bCA+Pj4gNyB8IHggPDwgMjUpXG59XG5cbmZ1bmN0aW9uIHNpZ21hMSAoeCwgeGwpIHtcbiAgcmV0dXJuICh4ID4+PiAxNCB8IHhsIDw8IDE4KSBeICh4ID4+PiAxOCB8IHhsIDw8IDE0KSBeICh4bCA+Pj4gOSB8IHggPDwgMjMpXG59XG5cbmZ1bmN0aW9uIEdhbW1hMCAoeCwgeGwpIHtcbiAgcmV0dXJuICh4ID4+PiAxIHwgeGwgPDwgMzEpIF4gKHggPj4+IDggfCB4bCA8PCAyNCkgXiAoeCA+Pj4gNylcbn1cblxuZnVuY3Rpb24gR2FtbWEwbCAoeCwgeGwpIHtcbiAgcmV0dXJuICh4ID4+PiAxIHwgeGwgPDwgMzEpIF4gKHggPj4+IDggfCB4bCA8PCAyNCkgXiAoeCA+Pj4gNyB8IHhsIDw8IDI1KVxufVxuXG5mdW5jdGlvbiBHYW1tYTEgKHgsIHhsKSB7XG4gIHJldHVybiAoeCA+Pj4gMTkgfCB4bCA8PCAxMykgXiAoeGwgPj4+IDI5IHwgeCA8PCAzKSBeICh4ID4+PiA2KVxufVxuXG5mdW5jdGlvbiBHYW1tYTFsICh4LCB4bCkge1xuICByZXR1cm4gKHggPj4+IDE5IHwgeGwgPDwgMTMpIF4gKHhsID4+PiAyOSB8IHggPDwgMykgXiAoeCA+Pj4gNiB8IHhsIDw8IDI2KVxufVxuXG5mdW5jdGlvbiBnZXRDYXJyeSAoYSwgYikge1xuICByZXR1cm4gKGEgPj4+IDApIDwgKGIgPj4+IDApID8gMSA6IDBcbn1cblxuU2hhNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKE0pIHtcbiAgdmFyIFcgPSB0aGlzLl93XG5cbiAgdmFyIGFoID0gdGhpcy5fYWggfCAwXG4gIHZhciBiaCA9IHRoaXMuX2JoIHwgMFxuICB2YXIgY2ggPSB0aGlzLl9jaCB8IDBcbiAgdmFyIGRoID0gdGhpcy5fZGggfCAwXG4gIHZhciBlaCA9IHRoaXMuX2VoIHwgMFxuICB2YXIgZmggPSB0aGlzLl9maCB8IDBcbiAgdmFyIGdoID0gdGhpcy5fZ2ggfCAwXG4gIHZhciBoaCA9IHRoaXMuX2hoIHwgMFxuXG4gIHZhciBhbCA9IHRoaXMuX2FsIHwgMFxuICB2YXIgYmwgPSB0aGlzLl9ibCB8IDBcbiAgdmFyIGNsID0gdGhpcy5fY2wgfCAwXG4gIHZhciBkbCA9IHRoaXMuX2RsIHwgMFxuICB2YXIgZWwgPSB0aGlzLl9lbCB8IDBcbiAgdmFyIGZsID0gdGhpcy5fZmwgfCAwXG4gIHZhciBnbCA9IHRoaXMuX2dsIHwgMFxuICB2YXIgaGwgPSB0aGlzLl9obCB8IDBcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDMyOyBpICs9IDIpIHtcbiAgICBXW2ldID0gTS5yZWFkSW50MzJCRShpICogNClcbiAgICBXW2kgKyAxXSA9IE0ucmVhZEludDMyQkUoaSAqIDQgKyA0KVxuICB9XG4gIGZvciAoOyBpIDwgMTYwOyBpICs9IDIpIHtcbiAgICB2YXIgeGggPSBXW2kgLSAxNSAqIDJdXG4gICAgdmFyIHhsID0gV1tpIC0gMTUgKiAyICsgMV1cbiAgICB2YXIgZ2FtbWEwID0gR2FtbWEwKHhoLCB4bClcbiAgICB2YXIgZ2FtbWEwbCA9IEdhbW1hMGwoeGwsIHhoKVxuXG4gICAgeGggPSBXW2kgLSAyICogMl1cbiAgICB4bCA9IFdbaSAtIDIgKiAyICsgMV1cbiAgICB2YXIgZ2FtbWExID0gR2FtbWExKHhoLCB4bClcbiAgICB2YXIgZ2FtbWExbCA9IEdhbW1hMWwoeGwsIHhoKVxuXG4gICAgLy8gV1tpXSA9IGdhbW1hMCArIFdbaSAtIDddICsgZ2FtbWExICsgV1tpIC0gMTZdXG4gICAgdmFyIFdpN2ggPSBXW2kgLSA3ICogMl1cbiAgICB2YXIgV2k3bCA9IFdbaSAtIDcgKiAyICsgMV1cblxuICAgIHZhciBXaTE2aCA9IFdbaSAtIDE2ICogMl1cbiAgICB2YXIgV2kxNmwgPSBXW2kgLSAxNiAqIDIgKyAxXVxuXG4gICAgdmFyIFdpbCA9IChnYW1tYTBsICsgV2k3bCkgfCAwXG4gICAgdmFyIFdpaCA9IChnYW1tYTAgKyBXaTdoICsgZ2V0Q2FycnkoV2lsLCBnYW1tYTBsKSkgfCAwXG4gICAgV2lsID0gKFdpbCArIGdhbW1hMWwpIHwgMFxuICAgIFdpaCA9IChXaWggKyBnYW1tYTEgKyBnZXRDYXJyeShXaWwsIGdhbW1hMWwpKSB8IDBcbiAgICBXaWwgPSAoV2lsICsgV2kxNmwpIHwgMFxuICAgIFdpaCA9IChXaWggKyBXaTE2aCArIGdldENhcnJ5KFdpbCwgV2kxNmwpKSB8IDBcblxuICAgIFdbaV0gPSBXaWhcbiAgICBXW2kgKyAxXSA9IFdpbFxuICB9XG5cbiAgZm9yICh2YXIgaiA9IDA7IGogPCAxNjA7IGogKz0gMikge1xuICAgIFdpaCA9IFdbal1cbiAgICBXaWwgPSBXW2ogKyAxXVxuXG4gICAgdmFyIG1hamggPSBtYWooYWgsIGJoLCBjaClcbiAgICB2YXIgbWFqbCA9IG1haihhbCwgYmwsIGNsKVxuXG4gICAgdmFyIHNpZ21hMGggPSBzaWdtYTAoYWgsIGFsKVxuICAgIHZhciBzaWdtYTBsID0gc2lnbWEwKGFsLCBhaClcbiAgICB2YXIgc2lnbWExaCA9IHNpZ21hMShlaCwgZWwpXG4gICAgdmFyIHNpZ21hMWwgPSBzaWdtYTEoZWwsIGVoKVxuXG4gICAgLy8gdDEgPSBoICsgc2lnbWExICsgY2ggKyBLW2pdICsgV1tqXVxuICAgIHZhciBLaWggPSBLW2pdXG4gICAgdmFyIEtpbCA9IEtbaiArIDFdXG5cbiAgICB2YXIgY2hoID0gQ2goZWgsIGZoLCBnaClcbiAgICB2YXIgY2hsID0gQ2goZWwsIGZsLCBnbClcblxuICAgIHZhciB0MWwgPSAoaGwgKyBzaWdtYTFsKSB8IDBcbiAgICB2YXIgdDFoID0gKGhoICsgc2lnbWExaCArIGdldENhcnJ5KHQxbCwgaGwpKSB8IDBcbiAgICB0MWwgPSAodDFsICsgY2hsKSB8IDBcbiAgICB0MWggPSAodDFoICsgY2hoICsgZ2V0Q2FycnkodDFsLCBjaGwpKSB8IDBcbiAgICB0MWwgPSAodDFsICsgS2lsKSB8IDBcbiAgICB0MWggPSAodDFoICsgS2loICsgZ2V0Q2FycnkodDFsLCBLaWwpKSB8IDBcbiAgICB0MWwgPSAodDFsICsgV2lsKSB8IDBcbiAgICB0MWggPSAodDFoICsgV2loICsgZ2V0Q2FycnkodDFsLCBXaWwpKSB8IDBcblxuICAgIC8vIHQyID0gc2lnbWEwICsgbWFqXG4gICAgdmFyIHQybCA9IChzaWdtYTBsICsgbWFqbCkgfCAwXG4gICAgdmFyIHQyaCA9IChzaWdtYTBoICsgbWFqaCArIGdldENhcnJ5KHQybCwgc2lnbWEwbCkpIHwgMFxuXG4gICAgaGggPSBnaFxuICAgIGhsID0gZ2xcbiAgICBnaCA9IGZoXG4gICAgZ2wgPSBmbFxuICAgIGZoID0gZWhcbiAgICBmbCA9IGVsXG4gICAgZWwgPSAoZGwgKyB0MWwpIHwgMFxuICAgIGVoID0gKGRoICsgdDFoICsgZ2V0Q2FycnkoZWwsIGRsKSkgfCAwXG4gICAgZGggPSBjaFxuICAgIGRsID0gY2xcbiAgICBjaCA9IGJoXG4gICAgY2wgPSBibFxuICAgIGJoID0gYWhcbiAgICBibCA9IGFsXG4gICAgYWwgPSAodDFsICsgdDJsKSB8IDBcbiAgICBhaCA9ICh0MWggKyB0MmggKyBnZXRDYXJyeShhbCwgdDFsKSkgfCAwXG4gIH1cblxuICB0aGlzLl9hbCA9ICh0aGlzLl9hbCArIGFsKSB8IDBcbiAgdGhpcy5fYmwgPSAodGhpcy5fYmwgKyBibCkgfCAwXG4gIHRoaXMuX2NsID0gKHRoaXMuX2NsICsgY2wpIHwgMFxuICB0aGlzLl9kbCA9ICh0aGlzLl9kbCArIGRsKSB8IDBcbiAgdGhpcy5fZWwgPSAodGhpcy5fZWwgKyBlbCkgfCAwXG4gIHRoaXMuX2ZsID0gKHRoaXMuX2ZsICsgZmwpIHwgMFxuICB0aGlzLl9nbCA9ICh0aGlzLl9nbCArIGdsKSB8IDBcbiAgdGhpcy5faGwgPSAodGhpcy5faGwgKyBobCkgfCAwXG5cbiAgdGhpcy5fYWggPSAodGhpcy5fYWggKyBhaCArIGdldENhcnJ5KHRoaXMuX2FsLCBhbCkpIHwgMFxuICB0aGlzLl9iaCA9ICh0aGlzLl9iaCArIGJoICsgZ2V0Q2FycnkodGhpcy5fYmwsIGJsKSkgfCAwXG4gIHRoaXMuX2NoID0gKHRoaXMuX2NoICsgY2ggKyBnZXRDYXJyeSh0aGlzLl9jbCwgY2wpKSB8IDBcbiAgdGhpcy5fZGggPSAodGhpcy5fZGggKyBkaCArIGdldENhcnJ5KHRoaXMuX2RsLCBkbCkpIHwgMFxuICB0aGlzLl9laCA9ICh0aGlzLl9laCArIGVoICsgZ2V0Q2FycnkodGhpcy5fZWwsIGVsKSkgfCAwXG4gIHRoaXMuX2ZoID0gKHRoaXMuX2ZoICsgZmggKyBnZXRDYXJyeSh0aGlzLl9mbCwgZmwpKSB8IDBcbiAgdGhpcy5fZ2ggPSAodGhpcy5fZ2ggKyBnaCArIGdldENhcnJ5KHRoaXMuX2dsLCBnbCkpIHwgMFxuICB0aGlzLl9oaCA9ICh0aGlzLl9oaCArIGhoICsgZ2V0Q2FycnkodGhpcy5faGwsIGhsKSkgfCAwXG59XG5cblNoYTUxMi5wcm90b3R5cGUuX2hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBIID0gbmV3IEJ1ZmZlcig2NClcblxuICBmdW5jdGlvbiB3cml0ZUludDY0QkUgKGgsIGwsIG9mZnNldCkge1xuICAgIEgud3JpdGVJbnQzMkJFKGgsIG9mZnNldClcbiAgICBILndyaXRlSW50MzJCRShsLCBvZmZzZXQgKyA0KVxuICB9XG5cbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2FoLCB0aGlzLl9hbCwgMClcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2JoLCB0aGlzLl9ibCwgOClcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2NoLCB0aGlzLl9jbCwgMTYpXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9kaCwgdGhpcy5fZGwsIDI0KVxuICB3cml0ZUludDY0QkUodGhpcy5fZWgsIHRoaXMuX2VsLCAzMilcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2ZoLCB0aGlzLl9mbCwgNDApXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9naCwgdGhpcy5fZ2wsIDQ4KVxuICB3cml0ZUludDY0QkUodGhpcy5faGgsIHRoaXMuX2hsLCA1NilcblxuICByZXR1cm4gSFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYTUxMlxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbm1vZHVsZS5leHBvcnRzID0gU3RyZWFtO1xuXG52YXIgRUUgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG5pbmhlcml0cyhTdHJlYW0sIEVFKTtcblN0cmVhbS5SZWFkYWJsZSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbS9yZWFkYWJsZS5qcycpO1xuU3RyZWFtLldyaXRhYmxlID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3dyaXRhYmxlLmpzJyk7XG5TdHJlYW0uRHVwbGV4ID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL2R1cGxleC5qcycpO1xuU3RyZWFtLlRyYW5zZm9ybSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbS90cmFuc2Zvcm0uanMnKTtcblN0cmVhbS5QYXNzVGhyb3VnaCA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbS9wYXNzdGhyb3VnaC5qcycpO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjQueFxuU3RyZWFtLlN0cmVhbSA9IFN0cmVhbTtcblxuXG5cbi8vIG9sZC1zdHlsZSBzdHJlYW1zLiAgTm90ZSB0aGF0IHRoZSBwaXBlIG1ldGhvZCAodGhlIG9ubHkgcmVsZXZhbnRcbi8vIHBhcnQgb2YgdGhpcyBjbGFzcykgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgUmVhZGFibGUgY2xhc3MuXG5cbmZ1bmN0aW9uIFN0cmVhbSgpIHtcbiAgRUUuY2FsbCh0aGlzKTtcbn1cblxuU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oZGVzdCwgb3B0aW9ucykge1xuICB2YXIgc291cmNlID0gdGhpcztcblxuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBpZiAoZGVzdC53cml0YWJsZSkge1xuICAgICAgaWYgKGZhbHNlID09PSBkZXN0LndyaXRlKGNodW5rKSAmJiBzb3VyY2UucGF1c2UpIHtcbiAgICAgICAgc291cmNlLnBhdXNlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc291cmNlLm9uKCdkYXRhJywgb25kYXRhKTtcblxuICBmdW5jdGlvbiBvbmRyYWluKCkge1xuICAgIGlmIChzb3VyY2UucmVhZGFibGUgJiYgc291cmNlLnJlc3VtZSkge1xuICAgICAgc291cmNlLnJlc3VtZSgpO1xuICAgIH1cbiAgfVxuXG4gIGRlc3Qub24oJ2RyYWluJywgb25kcmFpbik7XG5cbiAgLy8gSWYgdGhlICdlbmQnIG9wdGlvbiBpcyBub3Qgc3VwcGxpZWQsIGRlc3QuZW5kKCkgd2lsbCBiZSBjYWxsZWQgd2hlblxuICAvLyBzb3VyY2UgZ2V0cyB0aGUgJ2VuZCcgb3IgJ2Nsb3NlJyBldmVudHMuICBPbmx5IGRlc3QuZW5kKCkgb25jZS5cbiAgaWYgKCFkZXN0Ll9pc1N0ZGlvICYmICghb3B0aW9ucyB8fCBvcHRpb25zLmVuZCAhPT0gZmFsc2UpKSB7XG4gICAgc291cmNlLm9uKCdlbmQnLCBvbmVuZCk7XG4gICAgc291cmNlLm9uKCdjbG9zZScsIG9uY2xvc2UpO1xuICB9XG5cbiAgdmFyIGRpZE9uRW5kID0gZmFsc2U7XG4gIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgIGlmIChkaWRPbkVuZCkgcmV0dXJuO1xuICAgIGRpZE9uRW5kID0gdHJ1ZTtcblxuICAgIGRlc3QuZW5kKCk7XG4gIH1cblxuXG4gIGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgaWYgKGRpZE9uRW5kKSByZXR1cm47XG4gICAgZGlkT25FbmQgPSB0cnVlO1xuXG4gICAgaWYgKHR5cGVvZiBkZXN0LmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIGRlc3QuZGVzdHJveSgpO1xuICB9XG5cbiAgLy8gZG9uJ3QgbGVhdmUgZGFuZ2xpbmcgcGlwZXMgd2hlbiB0aGVyZSBhcmUgZXJyb3JzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgY2xlYW51cCgpO1xuICAgIGlmIChFRS5saXN0ZW5lckNvdW50KHRoaXMsICdlcnJvcicpID09PSAwKSB7XG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkIHN0cmVhbSBlcnJvciBpbiBwaXBlLlxuICAgIH1cbiAgfVxuXG4gIHNvdXJjZS5vbignZXJyb3InLCBvbmVycm9yKTtcbiAgZGVzdC5vbignZXJyb3InLCBvbmVycm9yKTtcblxuICAvLyByZW1vdmUgYWxsIHRoZSBldmVudCBsaXN0ZW5lcnMgdGhhdCB3ZXJlIGFkZGVkLlxuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uZGF0YSk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKTtcblxuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcblxuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBjbGVhbnVwKTtcbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgY2xlYW51cCk7XG5cbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIGNsZWFudXApO1xuICB9XG5cbiAgc291cmNlLm9uKCdlbmQnLCBjbGVhbnVwKTtcbiAgc291cmNlLm9uKCdjbG9zZScsIGNsZWFudXApO1xuXG4gIGRlc3Qub24oJ2Nsb3NlJywgY2xlYW51cCk7XG5cbiAgZGVzdC5lbWl0KCdwaXBlJywgc291cmNlKTtcblxuICAvLyBBbGxvdyBmb3IgdW5peC1saWtlIHVzYWdlOiBBLnBpcGUoQikucGlwZShDKVxuICByZXR1cm4gZGVzdDtcbn07XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcblxudmFyIGlzQnVmZmVyRW5jb2RpbmcgPSBCdWZmZXIuaXNFbmNvZGluZ1xuICB8fCBmdW5jdGlvbihlbmNvZGluZykge1xuICAgICAgIHN3aXRjaCAoZW5jb2RpbmcgJiYgZW5jb2RpbmcudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgY2FzZSAnaGV4JzogY2FzZSAndXRmOCc6IGNhc2UgJ3V0Zi04JzogY2FzZSAnYXNjaWknOiBjYXNlICdiaW5hcnknOiBjYXNlICdiYXNlNjQnOiBjYXNlICd1Y3MyJzogY2FzZSAndWNzLTInOiBjYXNlICd1dGYxNmxlJzogY2FzZSAndXRmLTE2bGUnOiBjYXNlICdyYXcnOiByZXR1cm4gdHJ1ZTtcbiAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBmYWxzZTtcbiAgICAgICB9XG4gICAgIH1cblxuXG5mdW5jdGlvbiBhc3NlcnRFbmNvZGluZyhlbmNvZGluZykge1xuICBpZiAoZW5jb2RpbmcgJiYgIWlzQnVmZmVyRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpO1xuICB9XG59XG5cbi8vIFN0cmluZ0RlY29kZXIgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciBlZmZpY2llbnRseSBzcGxpdHRpbmcgYSBzZXJpZXMgb2Zcbi8vIGJ1ZmZlcnMgaW50byBhIHNlcmllcyBvZiBKUyBzdHJpbmdzIHdpdGhvdXQgYnJlYWtpbmcgYXBhcnQgbXVsdGktYnl0ZVxuLy8gY2hhcmFjdGVycy4gQ0VTVS04IGlzIGhhbmRsZWQgYXMgcGFydCBvZiB0aGUgVVRGLTggZW5jb2RpbmcuXG4vL1xuLy8gQFRPRE8gSGFuZGxpbmcgYWxsIGVuY29kaW5ncyBpbnNpZGUgYSBzaW5nbGUgb2JqZWN0IG1ha2VzIGl0IHZlcnkgZGlmZmljdWx0XG4vLyB0byByZWFzb24gYWJvdXQgdGhpcyBjb2RlLCBzbyBpdCBzaG91bGQgYmUgc3BsaXQgdXAgaW4gdGhlIGZ1dHVyZS5cbi8vIEBUT0RPIFRoZXJlIHNob3VsZCBiZSBhIHV0Zjgtc3RyaWN0IGVuY29kaW5nIHRoYXQgcmVqZWN0cyBpbnZhbGlkIFVURi04IGNvZGVcbi8vIHBvaW50cyBhcyB1c2VkIGJ5IENFU1UtOC5cbnZhciBTdHJpbmdEZWNvZGVyID0gZXhwb3J0cy5TdHJpbmdEZWNvZGVyID0gZnVuY3Rpb24oZW5jb2RpbmcpIHtcbiAgdGhpcy5lbmNvZGluZyA9IChlbmNvZGluZyB8fCAndXRmOCcpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXS8sICcnKTtcbiAgYXNzZXJ0RW5jb2RpbmcoZW5jb2RpbmcpO1xuICBzd2l0Y2ggKHRoaXMuZW5jb2RpbmcpIHtcbiAgICBjYXNlICd1dGY4JzpcbiAgICAgIC8vIENFU1UtOCByZXByZXNlbnRzIGVhY2ggb2YgU3Vycm9nYXRlIFBhaXIgYnkgMy1ieXRlc1xuICAgICAgdGhpcy5zdXJyb2dhdGVTaXplID0gMztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgLy8gVVRGLTE2IHJlcHJlc2VudHMgZWFjaCBvZiBTdXJyb2dhdGUgUGFpciBieSAyLWJ5dGVzXG4gICAgICB0aGlzLnN1cnJvZ2F0ZVNpemUgPSAyO1xuICAgICAgdGhpcy5kZXRlY3RJbmNvbXBsZXRlQ2hhciA9IHV0ZjE2RGV0ZWN0SW5jb21wbGV0ZUNoYXI7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgLy8gQmFzZS02NCBzdG9yZXMgMyBieXRlcyBpbiA0IGNoYXJzLCBhbmQgcGFkcyB0aGUgcmVtYWluZGVyLlxuICAgICAgdGhpcy5zdXJyb2dhdGVTaXplID0gMztcbiAgICAgIHRoaXMuZGV0ZWN0SW5jb21wbGV0ZUNoYXIgPSBiYXNlNjREZXRlY3RJbmNvbXBsZXRlQ2hhcjtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aGlzLndyaXRlID0gcGFzc1Rocm91Z2hXcml0ZTtcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEVub3VnaCBzcGFjZSB0byBzdG9yZSBhbGwgYnl0ZXMgb2YgYSBzaW5nbGUgY2hhcmFjdGVyLiBVVEYtOCBuZWVkcyA0XG4gIC8vIGJ5dGVzLCBidXQgQ0VTVS04IG1heSByZXF1aXJlIHVwIHRvIDYgKDMgYnl0ZXMgcGVyIHN1cnJvZ2F0ZSkuXG4gIHRoaXMuY2hhckJ1ZmZlciA9IG5ldyBCdWZmZXIoNik7XG4gIC8vIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBmb3IgdGhlIGN1cnJlbnQgaW5jb21wbGV0ZSBtdWx0aS1ieXRlIGNoYXJhY3Rlci5cbiAgdGhpcy5jaGFyUmVjZWl2ZWQgPSAwO1xuICAvLyBOdW1iZXIgb2YgYnl0ZXMgZXhwZWN0ZWQgZm9yIHRoZSBjdXJyZW50IGluY29tcGxldGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXIuXG4gIHRoaXMuY2hhckxlbmd0aCA9IDA7XG59O1xuXG5cbi8vIHdyaXRlIGRlY29kZXMgdGhlIGdpdmVuIGJ1ZmZlciBhbmQgcmV0dXJucyBpdCBhcyBKUyBzdHJpbmcgdGhhdCBpc1xuLy8gZ3VhcmFudGVlZCB0byBub3QgY29udGFpbiBhbnkgcGFydGlhbCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuIEFueSBwYXJ0aWFsXG4vLyBjaGFyYWN0ZXIgZm91bmQgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGlzIGJ1ZmZlcmVkIHVwLCBhbmQgd2lsbCBiZVxuLy8gcmV0dXJuZWQgd2hlbiBjYWxsaW5nIHdyaXRlIGFnYWluIHdpdGggdGhlIHJlbWFpbmluZyBieXRlcy5cbi8vXG4vLyBOb3RlOiBDb252ZXJ0aW5nIGEgQnVmZmVyIGNvbnRhaW5pbmcgYW4gb3JwaGFuIHN1cnJvZ2F0ZSB0byBhIFN0cmluZ1xuLy8gY3VycmVudGx5IHdvcmtzLCBidXQgY29udmVydGluZyBhIFN0cmluZyB0byBhIEJ1ZmZlciAodmlhIGBuZXcgQnVmZmVyYCwgb3Jcbi8vIEJ1ZmZlciN3cml0ZSkgd2lsbCByZXBsYWNlIGluY29tcGxldGUgc3Vycm9nYXRlcyB3aXRoIHRoZSB1bmljb2RlXG4vLyByZXBsYWNlbWVudCBjaGFyYWN0ZXIuIFNlZSBodHRwczovL2NvZGVyZXZpZXcuY2hyb21pdW0ub3JnLzEyMTE3MzAwOS8gLlxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWZmZXIpIHtcbiAgdmFyIGNoYXJTdHIgPSAnJztcbiAgLy8gaWYgb3VyIGxhc3Qgd3JpdGUgZW5kZWQgd2l0aCBhbiBpbmNvbXBsZXRlIG11bHRpYnl0ZSBjaGFyYWN0ZXJcbiAgd2hpbGUgKHRoaXMuY2hhckxlbmd0aCkge1xuICAgIC8vIGRldGVybWluZSBob3cgbWFueSByZW1haW5pbmcgYnl0ZXMgdGhpcyBidWZmZXIgaGFzIHRvIG9mZmVyIGZvciB0aGlzIGNoYXJcbiAgICB2YXIgYXZhaWxhYmxlID0gKGJ1ZmZlci5sZW5ndGggPj0gdGhpcy5jaGFyTGVuZ3RoIC0gdGhpcy5jaGFyUmVjZWl2ZWQpID9cbiAgICAgICAgdGhpcy5jaGFyTGVuZ3RoIC0gdGhpcy5jaGFyUmVjZWl2ZWQgOlxuICAgICAgICBidWZmZXIubGVuZ3RoO1xuXG4gICAgLy8gYWRkIHRoZSBuZXcgYnl0ZXMgdG8gdGhlIGNoYXIgYnVmZmVyXG4gICAgYnVmZmVyLmNvcHkodGhpcy5jaGFyQnVmZmVyLCB0aGlzLmNoYXJSZWNlaXZlZCwgMCwgYXZhaWxhYmxlKTtcbiAgICB0aGlzLmNoYXJSZWNlaXZlZCArPSBhdmFpbGFibGU7XG5cbiAgICBpZiAodGhpcy5jaGFyUmVjZWl2ZWQgPCB0aGlzLmNoYXJMZW5ndGgpIHtcbiAgICAgIC8vIHN0aWxsIG5vdCBlbm91Z2ggY2hhcnMgaW4gdGhpcyBidWZmZXI/IHdhaXQgZm9yIG1vcmUgLi4uXG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIGJ5dGVzIGJlbG9uZ2luZyB0byB0aGUgY3VycmVudCBjaGFyYWN0ZXIgZnJvbSB0aGUgYnVmZmVyXG4gICAgYnVmZmVyID0gYnVmZmVyLnNsaWNlKGF2YWlsYWJsZSwgYnVmZmVyLmxlbmd0aCk7XG5cbiAgICAvLyBnZXQgdGhlIGNoYXJhY3RlciB0aGF0IHdhcyBzcGxpdFxuICAgIGNoYXJTdHIgPSB0aGlzLmNoYXJCdWZmZXIuc2xpY2UoMCwgdGhpcy5jaGFyTGVuZ3RoKS50b1N0cmluZyh0aGlzLmVuY29kaW5nKTtcblxuICAgIC8vIENFU1UtODogbGVhZCBzdXJyb2dhdGUgKEQ4MDAtREJGRikgaXMgYWxzbyB0aGUgaW5jb21wbGV0ZSBjaGFyYWN0ZXJcbiAgICB2YXIgY2hhckNvZGUgPSBjaGFyU3RyLmNoYXJDb2RlQXQoY2hhclN0ci5sZW5ndGggLSAxKTtcbiAgICBpZiAoY2hhckNvZGUgPj0gMHhEODAwICYmIGNoYXJDb2RlIDw9IDB4REJGRikge1xuICAgICAgdGhpcy5jaGFyTGVuZ3RoICs9IHRoaXMuc3Vycm9nYXRlU2l6ZTtcbiAgICAgIGNoYXJTdHIgPSAnJztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB0aGlzLmNoYXJSZWNlaXZlZCA9IHRoaXMuY2hhckxlbmd0aCA9IDA7XG5cbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gbW9yZSBieXRlcyBpbiB0aGlzIGJ1ZmZlciwganVzdCBlbWl0IG91ciBjaGFyXG4gICAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBjaGFyU3RyO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuXG4gIC8vIGRldGVybWluZSBhbmQgc2V0IGNoYXJMZW5ndGggLyBjaGFyUmVjZWl2ZWRcbiAgdGhpcy5kZXRlY3RJbmNvbXBsZXRlQ2hhcihidWZmZXIpO1xuXG4gIHZhciBlbmQgPSBidWZmZXIubGVuZ3RoO1xuICBpZiAodGhpcy5jaGFyTGVuZ3RoKSB7XG4gICAgLy8gYnVmZmVyIHRoZSBpbmNvbXBsZXRlIGNoYXJhY3RlciBieXRlcyB3ZSBnb3RcbiAgICBidWZmZXIuY29weSh0aGlzLmNoYXJCdWZmZXIsIDAsIGJ1ZmZlci5sZW5ndGggLSB0aGlzLmNoYXJSZWNlaXZlZCwgZW5kKTtcbiAgICBlbmQgLT0gdGhpcy5jaGFyUmVjZWl2ZWQ7XG4gIH1cblxuICBjaGFyU3RyICs9IGJ1ZmZlci50b1N0cmluZyh0aGlzLmVuY29kaW5nLCAwLCBlbmQpO1xuXG4gIHZhciBlbmQgPSBjaGFyU3RyLmxlbmd0aCAtIDE7XG4gIHZhciBjaGFyQ29kZSA9IGNoYXJTdHIuY2hhckNvZGVBdChlbmQpO1xuICAvLyBDRVNVLTg6IGxlYWQgc3Vycm9nYXRlIChEODAwLURCRkYpIGlzIGFsc28gdGhlIGluY29tcGxldGUgY2hhcmFjdGVyXG4gIGlmIChjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGKSB7XG4gICAgdmFyIHNpemUgPSB0aGlzLnN1cnJvZ2F0ZVNpemU7XG4gICAgdGhpcy5jaGFyTGVuZ3RoICs9IHNpemU7XG4gICAgdGhpcy5jaGFyUmVjZWl2ZWQgKz0gc2l6ZTtcbiAgICB0aGlzLmNoYXJCdWZmZXIuY29weSh0aGlzLmNoYXJCdWZmZXIsIHNpemUsIDAsIHNpemUpO1xuICAgIGJ1ZmZlci5jb3B5KHRoaXMuY2hhckJ1ZmZlciwgMCwgMCwgc2l6ZSk7XG4gICAgcmV0dXJuIGNoYXJTdHIuc3Vic3RyaW5nKDAsIGVuZCk7XG4gIH1cblxuICAvLyBvciBqdXN0IGVtaXQgdGhlIGNoYXJTdHJcbiAgcmV0dXJuIGNoYXJTdHI7XG59O1xuXG4vLyBkZXRlY3RJbmNvbXBsZXRlQ2hhciBkZXRlcm1pbmVzIGlmIHRoZXJlIGlzIGFuIGluY29tcGxldGUgVVRGLTggY2hhcmFjdGVyIGF0XG4vLyB0aGUgZW5kIG9mIHRoZSBnaXZlbiBidWZmZXIuIElmIHNvLCBpdCBzZXRzIHRoaXMuY2hhckxlbmd0aCB0byB0aGUgYnl0ZVxuLy8gbGVuZ3RoIHRoYXQgY2hhcmFjdGVyLCBhbmQgc2V0cyB0aGlzLmNoYXJSZWNlaXZlZCB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzXG4vLyB0aGF0IGFyZSBhdmFpbGFibGUgZm9yIHRoaXMgY2hhcmFjdGVyLlxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZGV0ZWN0SW5jb21wbGV0ZUNoYXIgPSBmdW5jdGlvbihidWZmZXIpIHtcbiAgLy8gZGV0ZXJtaW5lIGhvdyBtYW55IGJ5dGVzIHdlIGhhdmUgdG8gY2hlY2sgYXQgdGhlIGVuZCBvZiB0aGlzIGJ1ZmZlclxuICB2YXIgaSA9IChidWZmZXIubGVuZ3RoID49IDMpID8gMyA6IGJ1ZmZlci5sZW5ndGg7XG5cbiAgLy8gRmlndXJlIG91dCBpZiBvbmUgb2YgdGhlIGxhc3QgaSBieXRlcyBvZiBvdXIgYnVmZmVyIGFubm91bmNlcyBhblxuICAvLyBpbmNvbXBsZXRlIGNoYXIuXG4gIGZvciAoOyBpID4gMDsgaS0tKSB7XG4gICAgdmFyIGMgPSBidWZmZXJbYnVmZmVyLmxlbmd0aCAtIGldO1xuXG4gICAgLy8gU2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTgjRGVzY3JpcHRpb25cblxuICAgIC8vIDExMFhYWFhYXG4gICAgaWYgKGkgPT0gMSAmJiBjID4+IDUgPT0gMHgwNikge1xuICAgICAgdGhpcy5jaGFyTGVuZ3RoID0gMjtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIDExMTBYWFhYXG4gICAgaWYgKGkgPD0gMiAmJiBjID4+IDQgPT0gMHgwRSkge1xuICAgICAgdGhpcy5jaGFyTGVuZ3RoID0gMztcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIDExMTEwWFhYXG4gICAgaWYgKGkgPD0gMyAmJiBjID4+IDMgPT0gMHgxRSkge1xuICAgICAgdGhpcy5jaGFyTGVuZ3RoID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICB0aGlzLmNoYXJSZWNlaXZlZCA9IGk7XG59O1xuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbihidWZmZXIpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBpZiAoYnVmZmVyICYmIGJ1ZmZlci5sZW5ndGgpXG4gICAgcmVzID0gdGhpcy53cml0ZShidWZmZXIpO1xuXG4gIGlmICh0aGlzLmNoYXJSZWNlaXZlZCkge1xuICAgIHZhciBjciA9IHRoaXMuY2hhclJlY2VpdmVkO1xuICAgIHZhciBidWYgPSB0aGlzLmNoYXJCdWZmZXI7XG4gICAgdmFyIGVuYyA9IHRoaXMuZW5jb2Rpbmc7XG4gICAgcmVzICs9IGJ1Zi5zbGljZSgwLCBjcikudG9TdHJpbmcoZW5jKTtcbiAgfVxuXG4gIHJldHVybiByZXM7XG59O1xuXG5mdW5jdGlvbiBwYXNzVGhyb3VnaFdyaXRlKGJ1ZmZlcikge1xuICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpO1xufVxuXG5mdW5jdGlvbiB1dGYxNkRldGVjdEluY29tcGxldGVDaGFyKGJ1ZmZlcikge1xuICB0aGlzLmNoYXJSZWNlaXZlZCA9IGJ1ZmZlci5sZW5ndGggJSAyO1xuICB0aGlzLmNoYXJMZW5ndGggPSB0aGlzLmNoYXJSZWNlaXZlZCA/IDIgOiAwO1xufVxuXG5mdW5jdGlvbiBiYXNlNjREZXRlY3RJbmNvbXBsZXRlQ2hhcihidWZmZXIpIHtcbiAgdGhpcy5jaGFyUmVjZWl2ZWQgPSBidWZmZXIubGVuZ3RoICUgMztcbiAgdGhpcy5jaGFyTGVuZ3RoID0gdGhpcy5jaGFyUmVjZWl2ZWQgPyAzIDogMDtcbn1cbiIsIlxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlcHJlY2F0ZTtcblxuLyoqXG4gKiBNYXJrIHRoYXQgYSBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkLlxuICogUmV0dXJucyBhIG1vZGlmaWVkIGZ1bmN0aW9uIHdoaWNoIHdhcm5zIG9uY2UgYnkgZGVmYXVsdC5cbiAqXG4gKiBJZiBgbG9jYWxTdG9yYWdlLm5vRGVwcmVjYXRpb24gPSB0cnVlYCBpcyBzZXQsIHRoZW4gaXQgaXMgYSBuby1vcC5cbiAqXG4gKiBJZiBgbG9jYWxTdG9yYWdlLnRocm93RGVwcmVjYXRpb24gPSB0cnVlYCBpcyBzZXQsIHRoZW4gZGVwcmVjYXRlZCBmdW5jdGlvbnNcbiAqIHdpbGwgdGhyb3cgYW4gRXJyb3Igd2hlbiBpbnZva2VkLlxuICpcbiAqIElmIGBsb2NhbFN0b3JhZ2UudHJhY2VEZXByZWNhdGlvbiA9IHRydWVgIGlzIHNldCwgdGhlbiBkZXByZWNhdGVkIGZ1bmN0aW9uc1xuICogd2lsbCBpbnZva2UgYGNvbnNvbGUudHJhY2UoKWAgaW5zdGVhZCBvZiBgY29uc29sZS5lcnJvcigpYC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIHRoZSBmdW5jdGlvbiB0byBkZXByZWNhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgLSB0aGUgc3RyaW5nIHRvIHByaW50IHRvIHRoZSBjb25zb2xlIHdoZW4gYGZuYCBpcyBpbnZva2VkXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IGEgbmV3IFwiZGVwcmVjYXRlZFwiIHZlcnNpb24gb2YgYGZuYFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBkZXByZWNhdGUgKGZuLCBtc2cpIHtcbiAgaWYgKGNvbmZpZygnbm9EZXByZWNhdGlvbicpKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgIGlmICghd2FybmVkKSB7XG4gICAgICBpZiAoY29uZmlnKCd0aHJvd0RlcHJlY2F0aW9uJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZygndHJhY2VEZXByZWNhdGlvbicpKSB7XG4gICAgICAgIGNvbnNvbGUudHJhY2UobXNnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2Fybihtc2cpO1xuICAgICAgfVxuICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gZGVwcmVjYXRlZDtcbn1cblxuLyoqXG4gKiBDaGVja3MgYGxvY2FsU3RvcmFnZWAgZm9yIGJvb2xlYW4gdmFsdWVzIGZvciB0aGUgZ2l2ZW4gYG5hbWVgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNvbmZpZyAobmFtZSkge1xuICAvLyBhY2Nlc3NpbmcgZ2xvYmFsLmxvY2FsU3RvcmFnZSBjYW4gdHJpZ2dlciBhIERPTUV4Y2VwdGlvbiBpbiBzYW5kYm94ZWQgaWZyYW1lc1xuICB0cnkge1xuICAgIGlmICghZ2xvYmFsLmxvY2FsU3RvcmFnZSkgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB2YWwgPSBnbG9iYWwubG9jYWxTdG9yYWdlW25hbWVdO1xuICBpZiAobnVsbCA9PSB2YWwpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIFN0cmluZyh2YWwpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJztcbn1cbiIsInZhciBpbmRleE9mID0gcmVxdWlyZSgnaW5kZXhvZicpO1xuXG52YXIgT2JqZWN0X2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgaWYgKE9iamVjdC5rZXlzKSByZXR1cm4gT2JqZWN0LmtleXMob2JqKVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHJlcy5wdXNoKGtleSlcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59O1xuXG52YXIgZm9yRWFjaCA9IGZ1bmN0aW9uICh4cywgZm4pIHtcbiAgICBpZiAoeHMuZm9yRWFjaCkgcmV0dXJuIHhzLmZvckVhY2goZm4pXG4gICAgZWxzZSBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZuKHhzW2ldLCBpLCB4cyk7XG4gICAgfVxufTtcblxudmFyIGRlZmluZVByb3AgPSAoZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnXycsIHt9KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgbmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG5hbWUsIHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgICAgb2JqW25hbWVdID0gdmFsdWU7XG4gICAgICAgIH07XG4gICAgfVxufSgpKTtcblxudmFyIGdsb2JhbHMgPSBbJ0FycmF5JywgJ0Jvb2xlYW4nLCAnRGF0ZScsICdFcnJvcicsICdFdmFsRXJyb3InLCAnRnVuY3Rpb24nLFxuJ0luZmluaXR5JywgJ0pTT04nLCAnTWF0aCcsICdOYU4nLCAnTnVtYmVyJywgJ09iamVjdCcsICdSYW5nZUVycm9yJyxcbidSZWZlcmVuY2VFcnJvcicsICdSZWdFeHAnLCAnU3RyaW5nJywgJ1N5bnRheEVycm9yJywgJ1R5cGVFcnJvcicsICdVUklFcnJvcicsXG4nZGVjb2RlVVJJJywgJ2RlY29kZVVSSUNvbXBvbmVudCcsICdlbmNvZGVVUkknLCAnZW5jb2RlVVJJQ29tcG9uZW50JywgJ2VzY2FwZScsXG4nZXZhbCcsICdpc0Zpbml0ZScsICdpc05hTicsICdwYXJzZUZsb2F0JywgJ3BhcnNlSW50JywgJ3VuZGVmaW5lZCcsICd1bmVzY2FwZSddO1xuXG5mdW5jdGlvbiBDb250ZXh0KCkge31cbkNvbnRleHQucHJvdG90eXBlID0ge307XG5cbnZhciBTY3JpcHQgPSBleHBvcnRzLlNjcmlwdCA9IGZ1bmN0aW9uIE5vZGVTY3JpcHQgKGNvZGUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU2NyaXB0KSkgcmV0dXJuIG5ldyBTY3JpcHQoY29kZSk7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbn07XG5cblNjcmlwdC5wcm90b3R5cGUucnVuSW5Db250ZXh0ID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICBpZiAoIShjb250ZXh0IGluc3RhbmNlb2YgQ29udGV4dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm5lZWRzIGEgJ2NvbnRleHQnIGFyZ3VtZW50LlwiKTtcbiAgICB9XG4gICAgXG4gICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgIGlmICghaWZyYW1lLnN0eWxlKSBpZnJhbWUuc3R5bGUgPSB7fTtcbiAgICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gICAgXG4gICAgdmFyIHdpbiA9IGlmcmFtZS5jb250ZW50V2luZG93O1xuICAgIHZhciB3RXZhbCA9IHdpbi5ldmFsLCB3RXhlY1NjcmlwdCA9IHdpbi5leGVjU2NyaXB0O1xuXG4gICAgaWYgKCF3RXZhbCAmJiB3RXhlY1NjcmlwdCkge1xuICAgICAgICAvLyB3aW4uZXZhbCgpIG1hZ2ljYWxseSBhcHBlYXJzIHdoZW4gdGhpcyBpcyBjYWxsZWQgaW4gSUU6XG4gICAgICAgIHdFeGVjU2NyaXB0LmNhbGwod2luLCAnbnVsbCcpO1xuICAgICAgICB3RXZhbCA9IHdpbi5ldmFsO1xuICAgIH1cbiAgICBcbiAgICBmb3JFYWNoKE9iamVjdF9rZXlzKGNvbnRleHQpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHdpbltrZXldID0gY29udGV4dFtrZXldO1xuICAgIH0pO1xuICAgIGZvckVhY2goZ2xvYmFscywgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoY29udGV4dFtrZXldKSB7XG4gICAgICAgICAgICB3aW5ba2V5XSA9IGNvbnRleHRba2V5XTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHZhciB3aW5LZXlzID0gT2JqZWN0X2tleXMod2luKTtcblxuICAgIHZhciByZXMgPSB3RXZhbC5jYWxsKHdpbiwgdGhpcy5jb2RlKTtcbiAgICBcbiAgICBmb3JFYWNoKE9iamVjdF9rZXlzKHdpbiksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgLy8gQXZvaWQgY29weWluZyBjaXJjdWxhciBvYmplY3RzIGxpa2UgYHRvcGAgYW5kIGB3aW5kb3dgIGJ5IG9ubHlcbiAgICAgICAgLy8gdXBkYXRpbmcgZXhpc3RpbmcgY29udGV4dCBwcm9wZXJ0aWVzIG9yIG5ldyBwcm9wZXJ0aWVzIGluIHRoZSBgd2luYFxuICAgICAgICAvLyB0aGF0IHdhcyBvbmx5IGludHJvZHVjZWQgYWZ0ZXIgdGhlIGV2YWwuXG4gICAgICAgIGlmIChrZXkgaW4gY29udGV4dCB8fCBpbmRleE9mKHdpbktleXMsIGtleSkgPT09IC0xKSB7XG4gICAgICAgICAgICBjb250ZXh0W2tleV0gPSB3aW5ba2V5XTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZm9yRWFjaChnbG9iYWxzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiBjb250ZXh0KSkge1xuICAgICAgICAgICAgZGVmaW5lUHJvcChjb250ZXh0LCBrZXksIHdpbltrZXldKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgICBcbiAgICByZXR1cm4gcmVzO1xufTtcblxuU2NyaXB0LnByb3RvdHlwZS5ydW5JblRoaXNDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBldmFsKHRoaXMuY29kZSk7IC8vIG1heWJlLi4uXG59O1xuXG5TY3JpcHQucHJvdG90eXBlLnJ1bkluTmV3Q29udGV4dCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgdmFyIGN0eCA9IFNjcmlwdC5jcmVhdGVDb250ZXh0KGNvbnRleHQpO1xuICAgIHZhciByZXMgPSB0aGlzLnJ1bkluQ29udGV4dChjdHgpO1xuXG4gICAgZm9yRWFjaChPYmplY3Rfa2V5cyhjdHgpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGNvbnRleHRba2V5XSA9IGN0eFtrZXldO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlcztcbn07XG5cbmZvckVhY2goT2JqZWN0X2tleXMoU2NyaXB0LnByb3RvdHlwZSksIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgZXhwb3J0c1tuYW1lXSA9IFNjcmlwdFtuYW1lXSA9IGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICAgIHZhciBzID0gU2NyaXB0KGNvZGUpO1xuICAgICAgICByZXR1cm4gc1tuYW1lXS5hcHBseShzLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgIH07XG59KTtcblxuZXhwb3J0cy5jcmVhdGVTY3JpcHQgPSBmdW5jdGlvbiAoY29kZSkge1xuICAgIHJldHVybiBleHBvcnRzLlNjcmlwdChjb2RlKTtcbn07XG5cbmV4cG9ydHMuY3JlYXRlQ29udGV4dCA9IFNjcmlwdC5jcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICB2YXIgY29weSA9IG5ldyBDb250ZXh0KCk7XG4gICAgaWYodHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvckVhY2goT2JqZWN0X2tleXMoY29udGV4dCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGNvcHlba2V5XSA9IGNvbnRleHRba2V5XTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjb3B5O1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgU2Vzc2lvbiBmcm9tICcuL3Nlc3Npb24nO1xuaW1wb3J0IFBvb2wgZnJvbSAnLi9pbnRlcm5hbC9wb29sJztcbmltcG9ydCB7Y29ubmVjdH0gZnJvbSAnLi9pbnRlcm5hbC9jb25uZWN0b3InO1xuaW1wb3J0IFN0cmVhbU9ic2VydmVyIGZyb20gJy4vaW50ZXJuYWwvc3RyZWFtLW9ic2VydmVyJztcbmltcG9ydCB7bmV3RXJyb3IsIFNFUlZJQ0VfVU5BVkFJTEFCTEV9IGZyb20gJy4vZXJyb3InO1xuaW1wb3J0IHtEaXJlY3RDb25uZWN0aW9uUHJvdmlkZXJ9IGZyb20gJy4vaW50ZXJuYWwvY29ubmVjdGlvbi1wcm92aWRlcnMnO1xuXG5jb25zdCBSRUFEID0gJ1JFQUQnLCBXUklURSA9ICdXUklURSc7XG4vKipcbiAqIEEgZHJpdmVyIG1haW50YWlucyBvbmUgb3IgbW9yZSB7QGxpbmsgU2Vzc2lvbiBzZXNzaW9uc30gd2l0aCBhIHJlbW90ZVxuICogTmVvNGogaW5zdGFuY2UuIFRocm91Z2ggdGhlIHtAbGluayBTZXNzaW9uIHNlc3Npb25zfSB5b3UgY2FuIHNlbmQgc3RhdGVtZW50c1xuICogYW5kIHJldHJpZXZlIHJlc3VsdHMgZnJvbSB0aGUgZGF0YWJhc2UuXG4gKlxuICogRHJpdmVycyBhcmUgcmVhc29uYWJseSBleHBlbnNpdmUgdG8gY3JlYXRlIC0geW91IHNob3VsZCBzdHJpdmUgdG8ga2VlcCBvbmVcbiAqIGRyaXZlciBpbnN0YW5jZSBhcm91bmQgcGVyIE5lbzRqIEluc3RhbmNlIHlvdSBjb25uZWN0IHRvLlxuICpcbiAqIEBhY2Nlc3MgcHVibGljXG4gKi9cbmNsYXNzIERyaXZlciB7XG4gIC8qKlxuICAgKiBZb3Ugc2hvdWxkIG5vdCBiZSBjYWxsaW5nIHRoaXMgZGlyZWN0bHksIGluc3RlYWQgdXNlIHtAbGluayBkcml2ZXJ9LlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlckFnZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0b2tlblxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnXG4gICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IodXJsLCB1c2VyQWdlbnQsIHRva2VuID0ge30sIGNvbmZpZyA9IHt9KSB7XG4gICAgdGhpcy5fdXJsID0gdXJsO1xuICAgIHRoaXMuX3VzZXJBZ2VudCA9IHVzZXJBZ2VudDtcbiAgICB0aGlzLl9vcGVuU2Vzc2lvbnMgPSB7fTtcbiAgICB0aGlzLl9zZXNzaW9uSWRHZW5lcmF0b3IgPSAwO1xuICAgIHRoaXMuX3Rva2VuID0gdG9rZW47XG4gICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuX3Bvb2wgPSBuZXcgUG9vbChcbiAgICAgIHRoaXMuX2NyZWF0ZUNvbm5lY3Rpb24uYmluZCh0aGlzKSxcbiAgICAgIHRoaXMuX2Rlc3Ryb3lDb25uZWN0aW9uLmJpbmQodGhpcyksXG4gICAgICBEcml2ZXIuX3ZhbGlkYXRlQ29ubmVjdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgY29uZmlnLmNvbm5lY3Rpb25Qb29sU2l6ZVxuICAgICk7XG4gICAgdGhpcy5fY29ubmVjdGlvblByb3ZpZGVyID0gdGhpcy5fY3JlYXRlQ29ubmVjdGlvblByb3ZpZGVyKHVybCwgdGhpcy5fcG9vbCwgdGhpcy5fZHJpdmVyT25FcnJvckNhbGxiYWNrLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBjb25uZWN0aW9uIGluc3RhbmNlLlxuICAgKiBAcmV0dXJuIHtDb25uZWN0aW9ufSBuZXcgY29ubmVjdG9yLWFwaSBzZXNzaW9uIGluc3RhbmNlLCBhIGxvdyBsZXZlbCBzZXNzaW9uIEFQSS5cbiAgICogQGFjY2VzcyBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlQ29ubmVjdGlvbih1cmwsIHJlbGVhc2UpIHtcbiAgICBsZXQgc2Vzc2lvbklkID0gdGhpcy5fc2Vzc2lvbklkR2VuZXJhdG9yKys7XG4gICAgbGV0IGNvbm4gPSBjb25uZWN0KHVybCwgdGhpcy5fY29uZmlnKTtcbiAgICBsZXQgc3RyZWFtT2JzZXJ2ZXIgPSBuZXcgX0Nvbm5lY3Rpb25TdHJlYW1PYnNlcnZlcih0aGlzLCBjb25uKTtcbiAgICBjb25uLmluaXRpYWxpemUodGhpcy5fdXNlckFnZW50LCB0aGlzLl90b2tlbiwgc3RyZWFtT2JzZXJ2ZXIpO1xuICAgIGNvbm4uX2lkID0gc2Vzc2lvbklkO1xuICAgIGNvbm4uX3JlbGVhc2UgPSAoKSA9PiByZWxlYXNlKHVybCwgY29ubik7XG5cbiAgICB0aGlzLl9vcGVuU2Vzc2lvbnNbc2Vzc2lvbklkXSA9IGNvbm47XG4gICAgcmV0dXJuIGNvbm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhhdCBhIGNvbm5lY3Rpb24gaXMgdXNhYmxlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGhlIGNvbm5lY3Rpb24gaXMgb3BlblxuICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICoqL1xuICBzdGF0aWMgX3ZhbGlkYXRlQ29ubmVjdGlvbihjb25uKSB7XG4gICAgcmV0dXJuIGNvbm4uaXNPcGVuKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZSBvZiBhIGxpdmUgc2Vzc2lvbiwgY2xvc2luZyBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZXMuXG4gICAqIEByZXR1cm4ge1Nlc3Npb259IG5ldyBzZXNzaW9uLlxuICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICovXG4gIF9kZXN0cm95Q29ubmVjdGlvbihjb25uKSB7XG4gICAgZGVsZXRlIHRoaXMuX29wZW5TZXNzaW9uc1tjb25uLl9pZF07XG4gICAgY29ubi5jbG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjcXVpcmUgYSBzZXNzaW9uIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGRhdGFiYXNlLiBUaGUgZHJpdmVyIG1haW50YWluc1xuICAgKiBhIHBvb2wgb2Ygc2Vzc2lvbnMsIHNvIGNhbGxpbmcgdGhpcyBtZXRob2QgaXMgbm9ybWFsbHkgY2hlYXAgYmVjYXVzZSB5b3VcbiAgICogd2lsbCBiZSBwdWxsaW5nIGEgc2Vzc2lvbiBvdXQgb2YgdGhlIGNvbW1vbiBwb29sLlxuICAgKlxuICAgKiBUaGlzIGNvbWVzIHdpdGggc29tZSByZXNwb25zaWJpbGl0eSAtIG1ha2Ugc3VyZSB5b3UgYWx3YXlzIGNhbGxcbiAgICoge0BsaW5rIFNlc3Npb24jY2xvc2UoKX0gd2hlbiB5b3UgYXJlIGRvbmUgdXNpbmcgYSBzZXNzaW9uLCBhbmQgbGlrZXdpc2UsXG4gICAqIG1ha2Ugc3VyZSB5b3UgZG9uJ3QgY2xvc2UgeW91ciBzZXNzaW9uIGJlZm9yZSB5b3UgYXJlIGRvbmUgdXNpbmcgaXQuIE9uY2VcbiAgICogaXQgaXMgcmV0dXJuZWQgdG8gdGhlIHBvb2wsIHRoZSBzZXNzaW9uIHdpbGwgYmUgcmVzZXQgdG8gYSBjbGVhbiBzdGF0ZSBhbmRcbiAgICogbWFkZSBhdmFpbGFibGUgZm9yIG90aGVycyB0byB1c2UuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbW9kZT1XUklURV0gdGhlIGFjY2VzcyBtb2RlIG9mIHRoaXMgc2Vzc2lvbiwgYWxsb3dlZCB2YWx1ZXMgYXJlIHtAbGluayBSRUFEfSBhbmQge0BsaW5rIFdSSVRFfS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtib29rbWFyaz1udWxsXSB0aGUgaW5pdGlhbCByZWZlcmVuY2UgdG8gc29tZSBwcmV2aW91cyB0cmFuc2FjdGlvbi4gVmFsdWUgaXMgb3B0aW9uYWwgYW5kXG4gICAqIGFic2VuY2UgaW5kaWNhdGVzIHRoYXQgdGhhdCB0aGUgYm9va21hcmsgZG9lcyBub3QgZXhpc3Qgb3IgaXMgdW5rbm93bi5cbiAgICogQHJldHVybiB7U2Vzc2lvbn0gbmV3IHNlc3Npb24uXG4gICAqL1xuICBzZXNzaW9uKG1vZGUsIGJvb2ttYXJrKSB7XG4gICAgY29uc3Qgc2Vzc2lvbk1vZGUgPSBEcml2ZXIuX3ZhbGlkYXRlU2Vzc2lvbk1vZGUobW9kZSk7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVNlc3Npb24oc2Vzc2lvbk1vZGUsIHRoaXMuX2Nvbm5lY3Rpb25Qcm92aWRlciwgYm9va21hcmssIHRoaXMuX2NvbmZpZyk7XG4gIH1cblxuICBzdGF0aWMgX3ZhbGlkYXRlU2Vzc2lvbk1vZGUocmF3TW9kZSkge1xuICAgIGNvbnN0IG1vZGUgPSByYXdNb2RlIHx8IFdSSVRFO1xuICAgIGlmIChtb2RlICE9PSBSRUFEICYmIG1vZGUgIT09IFdSSVRFKSB7XG4gICAgICB0aHJvdyBuZXdFcnJvcignSWxsZWdhbCBzZXNzaW9uIG1vZGUgJyArIG1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gbW9kZTtcbiAgfVxuXG4gIC8vRXh0ZW5zaW9uIHBvaW50XG4gIF9jcmVhdGVDb25uZWN0aW9uUHJvdmlkZXIoYWRkcmVzcywgY29ubmVjdGlvblBvb2wsIGRyaXZlck9uRXJyb3JDYWxsYmFjaykge1xuICAgIHJldHVybiBuZXcgRGlyZWN0Q29ubmVjdGlvblByb3ZpZGVyKGFkZHJlc3MsIGNvbm5lY3Rpb25Qb29sLCBkcml2ZXJPbkVycm9yQ2FsbGJhY2spO1xuICB9XG5cbiAgLy9FeHRlbnNpb24gcG9pbnRcbiAgX2NyZWF0ZVNlc3Npb24obW9kZSwgY29ubmVjdGlvblByb3ZpZGVyLCBib29rbWFyaywgY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBTZXNzaW9uKG1vZGUsIGNvbm5lY3Rpb25Qcm92aWRlciwgYm9va21hcmssIGNvbmZpZyk7XG4gIH1cblxuICBfZHJpdmVyT25FcnJvckNhbGxiYWNrKGVycm9yKSB7XG4gICAgY29uc3QgdXNlckRlZmluZWRPbkVycm9yQ2FsbGJhY2sgPSB0aGlzLm9uRXJyb3I7XG4gICAgaWYgKHVzZXJEZWZpbmVkT25FcnJvckNhbGxiYWNrICYmIGVycm9yLmNvZGUgPT09IFNFUlZJQ0VfVU5BVkFJTEFCTEUpIHtcbiAgICAgIHVzZXJEZWZpbmVkT25FcnJvckNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byB0ZWxsIHRoZSBkcml2ZXIgYWJvdXQgdGhpcyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSBhbGwgb3BlbiBzZXNzaW9ucyBhbmQgb3RoZXIgYXNzb2NpYXRlZCByZXNvdXJjZXMuIFlvdSBzaG91bGRcbiAgICogbWFrZSBzdXJlIHRvIHVzZSB0aGlzIHdoZW4geW91IGFyZSBkb25lIHdpdGggdGhpcyBkcml2ZXIgaW5zdGFuY2UuXG4gICAqIEByZXR1cm4gdW5kZWZpbmVkXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICBmb3IgKGxldCBzZXNzaW9uSWQgaW4gdGhpcy5fb3BlblNlc3Npb25zKSB7XG4gICAgICBpZiAodGhpcy5fb3BlblNlc3Npb25zLmhhc093blByb3BlcnR5KHNlc3Npb25JZCkpIHtcbiAgICAgICAgdGhpcy5fb3BlblNlc3Npb25zW3Nlc3Npb25JZF0uY2xvc2UoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3Bvb2wucHVyZ2VBbGwoKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIEludGVybmFsIHN0cmVhbSBvYnNlcnZlciB1c2VkIGZvciBjb25uZWN0aW9uIHN0YXRlICovXG5jbGFzcyBfQ29ubmVjdGlvblN0cmVhbU9ic2VydmVyIGV4dGVuZHMgU3RyZWFtT2JzZXJ2ZXIge1xuICBjb25zdHJ1Y3Rvcihkcml2ZXIsIGNvbm4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2RyaXZlciA9IGRyaXZlcjtcbiAgICB0aGlzLl9jb25uID0gY29ubjtcbiAgICB0aGlzLl9oYXNGYWlsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIG9uRXJyb3IoZXJyb3IpIHtcbiAgICBpZiAoIXRoaXMuX2hhc0ZhaWxlZCkge1xuICAgICAgc3VwZXIub25FcnJvcihlcnJvcik7XG4gICAgICBpZiAodGhpcy5fZHJpdmVyLm9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5fZHJpdmVyLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgICAgdGhpcy5faGFzRmFpbGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBvbkNvbXBsZXRlZChtZXNzYWdlKSB7XG4gICAgaWYgKHRoaXMuX2RyaXZlci5vbkNvbXBsZXRlZCkge1xuICAgICAgdGhpcy5fZHJpdmVyLm9uQ29tcGxldGVkKG1lc3NhZ2UpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29ubiAmJiBtZXNzYWdlICYmIG1lc3NhZ2Uuc2VydmVyKSB7XG4gICAgICB0aGlzLl9jb25uLnNldFNlcnZlclZlcnNpb24obWVzc2FnZS5zZXJ2ZXIpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuZXhwb3J0IHtEcml2ZXIsIFJFQUQsIFdSSVRFfVxuXG5leHBvcnQgZGVmYXVsdCBEcml2ZXJcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBBIGNvbW1vbiBwbGFjZSBmb3IgY29uc3RydWN0aW5nIGVycm9yIG9iamVjdHMsIHRvIGtlZXAgdGhlbVxuLy8gdW5pZm9ybSBhY3Jvc3MgdGhlIGRyaXZlciBzdXJmYWNlLlxuXG5jb25zdCBTRVJWSUNFX1VOQVZBSUxBQkxFID0gJ1NlcnZpY2VVbmF2YWlsYWJsZSc7XG5jb25zdCBTRVNTSU9OX0VYUElSRUQgPSAnU2Vzc2lvbkV4cGlyZWQnO1xuY29uc3QgUFJPVE9DT0xfRVJST1IgPSAnUHJvdG9jb2xFcnJvcic7XG5cbmZ1bmN0aW9uIG5ld0Vycm9yKG1lc3NhZ2UsIGNvZGU9XCJOL0FcIikge1xuICAvLyBUT0RPOiBJZGVhIGlzIHRoYXQgd2UgY2FuIGNoZWNrIHRoZSBjb2RlIGhlcmUgYW5kIHRocm93IHN1Yi1jbGFzc2VzXG4gIC8vIG9mIE5lbzRqRXJyb3IgYXMgYXBwcm9wcmlhdGVcbiAgcmV0dXJuIG5ldyBOZW80akVycm9yKG1lc3NhZ2UsIGNvZGUpO1xufVxuXG5jbGFzcyBOZW80akVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciggbWVzc2FnZSwgY29kZT1cIk4vQVwiICkge1xuICAgIHN1cGVyKCBtZXNzYWdlICk7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICB9XG59XG5cbmV4cG9ydCB7XG4gIG5ld0Vycm9yLFxuICBOZW80akVycm9yLFxuICBTRVJWSUNFX1VOQVZBSUxBQkxFLFxuICBTRVNTSU9OX0VYUElSRUQsXG4gIFBST1RPQ09MX0VSUk9SXG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLyoqXG4gKiBDbGFzcyBmb3IgTm9kZSBUeXBlLlxuICovIFxuY2xhc3MgTm9kZSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtJbnRlZ2VyfSBpZGVudGl0eSAtIFVuaXF1ZSBpZGVudGl0eVxuICAgKiBAcGFyYW0ge0FycmF5fSBsYWJlbHMgLSBBcnJheSBmb3IgYWxsIGxhYmVsc1xuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyAtIE1hcCB3aXRoIG5vZGUgcHJvcGVydGllc1xuICAgKi9cbiAgY29uc3RydWN0b3IoaWRlbnRpdHksIGxhYmVscywgcHJvcGVydGllcykge1xuICAgIHRoaXMuaWRlbnRpdHkgPSBpZGVudGl0eTtcbiAgICB0aGlzLmxhYmVscyA9IGxhYmVscztcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IHMgPSBcIihcIiArIHRoaXMuaWRlbnRpdHk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxhYmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgcyArPSBcIjpcIiArIHRoaXMubGFiZWxzW2ldO1xuICAgIH1cbiAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcyk7XG4gICAgaWYgKGtleXMubGVuZ3RoID4gMCkge1xuICAgICAgcyArPSBcIiB7XCI7XG4gICAgICBmb3IobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaSA+IDApIHMgKz0gXCIsXCI7XG4gICAgICAgIHMgKz0ga2V5c1tpXSArIFwiOlwiICsgSlNPTi5zdHJpbmdpZnkodGhpcy5wcm9wZXJ0aWVzW2tleXNbaV1dKTtcbiAgICAgIH1cbiAgICAgIHMgKz0gXCJ9XCI7XG4gICAgfVxuICAgIHMgKz0gXCIpXCI7XG4gICAgcmV0dXJuIHM7XG4gIH1cbn1cblxuLyoqXG4gKiBDbGFzcyBmb3IgUmVsYXRpb25zaGlwIFR5cGUuXG4gKi8gXG5jbGFzcyBSZWxhdGlvbnNoaXAge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gaWRlbnRpdHkgLSBVbmlxdWUgaWRlbnRpdHlcbiAgICogQHBhcmFtIHtJbnRlZ2VyfSBzdGFydCAtIElkZW50aXR5IG9mIHN0YXJ0IE5vZGVcbiAgICogQHBhcmFtIHtJbnRlZ2VyfSBlbmQgLSBJZGVudGl0eSBvZiBlbmQgTm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFJlbGF0aW9uc2hpcCB0eXBlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIC0gTWFwIHdpdGggcmVsYXRpb25zaGlwIHByb3BlcnRpZXNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGlkZW50aXR5LCBzdGFydCwgZW5kLCB0eXBlLCBwcm9wZXJ0aWVzKSB7XG4gICAgdGhpcy5pZGVudGl0eSA9IGlkZW50aXR5O1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgcyA9IFwiKFwiICsgdGhpcy5zdGFydCArIFwiKS1bOlwiICsgdGhpcy50eXBlO1xuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICBzICs9IFwiIHtcIjtcbiAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpID4gMCkgcyArPSBcIixcIjtcbiAgICAgICAgcyArPSBrZXlzW2ldICsgXCI6XCIgKyBKU09OLnN0cmluZ2lmeSh0aGlzLnByb3BlcnRpZXNba2V5c1tpXV0pO1xuICAgICAgfVxuICAgICAgcyArPSBcIn1cIjtcbiAgICB9XG4gICAgcyArPSBcIl0tPihcIiArIHRoaXMuZW5kICsgXCIpXCI7XG4gICAgcmV0dXJuIHM7XG4gIH1cbn1cblxuLyoqXG4gKiBDbGFzcyBmb3IgVW5ib3VuZFJlbGF0aW9uc2hpcCBUeXBlLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi8gXG5jbGFzcyBVbmJvdW5kUmVsYXRpb25zaGlwIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IGlkZW50aXR5IC0gVW5pcXVlIGlkZW50aXR5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gUmVsYXRpb25zaGlwIHR5cGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgLSBNYXAgd2l0aCByZWxhdGlvbnNoaXAgcHJvcGVydGllc1xuICAgKi9cbiAgY29uc3RydWN0b3IoaWRlbnRpdHksIHR5cGUsIHByb3BlcnRpZXMpIHtcbiAgICB0aGlzLmlkZW50aXR5ID0gaWRlbnRpdHk7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgcmVsYXRpb25zaGlwXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gc3RhcnQgLSBJZGVudGl0eSBvZiBzdGFydCBub2RlXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gZW5kIC0gSWRlbnRpdHkgb2YgZW5kIG5vZGVcbiAgICogQHJldHVybiB7UmVsYXRpb25zaGlwfSAtIENyZWF0ZWQgcmVsYXRpb25zaGlwXG4gICAqL1xuICBiaW5kKCBzdGFydCwgZW5kICkge1xuICAgIHJldHVybiBuZXcgUmVsYXRpb25zaGlwKFxuICAgICAgdGhpcy5pZGVudGl0eSwgXG4gICAgICBzdGFydCwgXG4gICAgICBlbmQsIFxuICAgICAgdGhpcy50eXBlLCBcbiAgICAgIHRoaXMucHJvcGVydGllcyk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgcyA9IFwiLVs6XCIgKyB0aGlzLnR5cGU7XG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnByb3BlcnRpZXMpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIHMgKz0gXCIge1wiO1xuICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPiAwKSBzICs9IFwiLFwiO1xuICAgICAgICBzICs9IGtleXNbaV0gKyBcIjpcIiArIEpTT04uc3RyaW5naWZ5KHRoaXMucHJvcGVydGllc1trZXlzW2ldXSk7XG4gICAgICB9XG4gICAgICBzICs9IFwifVwiO1xuICAgIH1cbiAgICBzICs9IFwiXS0+XCI7XG4gICAgcmV0dXJuIHM7XG4gIH1cbn1cblxuLyoqXG4gKiBDbGFzcyBmb3IgUGF0aFNlZ21lbnQgVHlwZS5cbiAqLyBcbmNsYXNzIFBhdGhTZWdtZW50IHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge05vZGV9IHN0YXJ0IC0gc3RhcnQgbm9kZVxuICAgKiBAcGFyYW0ge1JlbGF0aW9uc2hpcH0gcmVsIC0gcmVsYXRpb25zaGlwIHRoYXQgY29ubmVjdHMgc3RhcnQgYW5kIGVuZCBub2RlXG4gICAqIEBwYXJhbSB7Tm9kZX0gZW5kIC0gZW5kIG5vZGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKHN0YXJ0LCByZWwsIGVuZCkge1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLnJlbGF0aW9uc2hpcCA9IHJlbDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxufVxuXG4vKipcbiAqIENsYXNzIGZvciBQYXRoIFR5cGUuXG4gKi8gXG5jbGFzcyBQYXRoIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge05vZGV9IHN0YXJ0ICAtIHN0YXJ0IG5vZGVcbiAgICogQHBhcmFtIHtOb2RlfSBlbmQgLSBlbmQgbm9kZVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZWdtZW50cyAtIEFycmF5IG9mIFNlZ21lbnRzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdGFydCwgZW5kLCBzZWdtZW50cykge1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgICB0aGlzLnNlZ21lbnRzID0gc2VnbWVudHM7XG4gICAgdGhpcy5sZW5ndGggPSBzZWdtZW50cy5sZW5ndGg7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgTm9kZSxcbiAgUmVsYXRpb25zaGlwLFxuICBVbmJvdW5kUmVsYXRpb25zaGlwLFxuICBQYXRoLFxuICBQYXRoU2VnbWVudFxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7aW50LCBpc0ludCwgaW5TYWZlUmFuZ2UsIHRvTnVtYmVyLCB0b1N0cmluZ30gZnJvbSAnLi9pbnRlZ2VyJztcbmltcG9ydCB7Tm9kZSwgUmVsYXRpb25zaGlwLCBVbmJvdW5kUmVsYXRpb25zaGlwLCBQYXRoU2VnbWVudCwgUGF0aH0gZnJvbSAnLi9ncmFwaC10eXBlcydcbmltcG9ydCB7TmVvNGpFcnJvciwgU0VSVklDRV9VTkFWQUlMQUJMRSwgU0VTU0lPTl9FWFBJUkVELCBQUk9UT0NPTF9FUlJPUn0gZnJvbSAnLi9lcnJvcic7XG5pbXBvcnQgUmVzdWx0IGZyb20gJy4vcmVzdWx0JztcbmltcG9ydCBSZXN1bHRTdW1tYXJ5IGZyb20gJy4vcmVzdWx0LXN1bW1hcnknO1xuaW1wb3J0IFJlY29yZCBmcm9tICcuL3JlY29yZCc7XG5pbXBvcnQge0RyaXZlciwgUkVBRCwgV1JJVEV9IGZyb20gJy4vZHJpdmVyJztcbmltcG9ydCBSb3V0aW5nRHJpdmVyIGZyb20gJy4vcm91dGluZy1kcml2ZXInO1xuaW1wb3J0IFZFUlNJT04gZnJvbSAnLi4vdmVyc2lvbic7XG5pbXBvcnQge3BhcnNlU2NoZW1lLCBwYXJzZVVybH0gZnJvbSBcIi4vaW50ZXJuYWwvY29ubmVjdG9yXCI7XG5pbXBvcnQge2Fzc2VydFN0cmluZ30gZnJvbSBcIi4vaW50ZXJuYWwvdXRpbFwiO1xuXG5cbmNvbnN0IGF1dGggPXtcbiAgYmFzaWM6ICh1c2VybmFtZSwgcGFzc3dvcmQsIHJlYWxtID0gdW5kZWZpbmVkKSA9PiB7XG4gICAgaWYgKHJlYWxtKSB7XG4gICAgICByZXR1cm4ge3NjaGVtZTogXCJiYXNpY1wiLCBwcmluY2lwYWw6IHVzZXJuYW1lLCBjcmVkZW50aWFsczogcGFzc3dvcmQsIHJlYWxtOiByZWFsbX07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7c2NoZW1lOiBcImJhc2ljXCIsIHByaW5jaXBhbDogdXNlcm5hbWUsIGNyZWRlbnRpYWxzOiBwYXNzd29yZH07XG4gICAgfVxuICB9LFxuICAgIGN1c3RvbTogKHByaW5jaXBhbCwgY3JlZGVudGlhbHMsIHJlYWxtLCBzY2hlbWUsIHBhcmFtZXRlcnMgPSB1bmRlZmluZWQgKSA9PiB7XG4gICAgaWYgKHBhcmFtZXRlcnMpIHtcbiAgICAgIHJldHVybiAge3NjaGVtZTogc2NoZW1lLCBwcmluY2lwYWw6IHByaW5jaXBhbCwgY3JlZGVudGlhbHM6IGNyZWRlbnRpYWxzLCByZWFsbTogcmVhbG0sXG4gICAgICAgIHBhcmFtZXRlcnM6IHBhcmFtZXRlcnN9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAge3NjaGVtZTogc2NoZW1lLCBwcmluY2lwYWw6IHByaW5jaXBhbCwgY3JlZGVudGlhbHM6IGNyZWRlbnRpYWxzLCByZWFsbTogcmVhbG19XG4gICAgfVxuICB9XG59O1xubGV0IFVTRVJfQUdFTlQgPSBcIm5lbzRqLWphdmFzY3JpcHQvXCIgKyBWRVJTSU9OO1xuXG4vKipcbiAqIENvbnN0cnVjdCBhIG5ldyBOZW80aiBEcml2ZXIuIFRoaXMgaXMgeW91ciBtYWluIGVudHJ5IHBvaW50IGZvciB0aGlzXG4gKiBsaWJyYXJ5LlxuICpcbiAqICMjIENvbmZpZ3VyYXRpb25cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIG9wdGlvbmFsbHkgdGFrZXMgYSBjb25maWd1cmF0aW9uIGFyZ3VtZW50LiBBdmFpbGFibGUgY29uZmlndXJhdGlvblxuICogb3B0aW9ucyBhcmUgYXMgZm9sbG93czpcbiAqXG4gKiAgICAge1xuICogICAgICAgLy8gRW5jcnlwdGlvbiBsZXZlbDogRU5DUllQVElPTl9PTiBvciBFTkNSWVBUSU9OX09GRi5cbiAqICAgICAgIGVuY3J5cHRlZDogRU5DUllQVElPTl9PTnxFTkNSWVBUSU9OX09GRlxuICpcbiAqICAgICAgIC8vIFRydXN0IHN0cmF0ZWd5IHRvIHVzZSBpZiBlbmNyeXB0aW9uIGlzIGVuYWJsZWQuIFRoZXJlIGlzIG5vIG1vZGUgdG8gZGlzYWJsZVxuICogICAgICAgLy8gdHJ1c3Qgb3RoZXIgdGhhbiBkaXNhYmxpbmcgZW5jcnlwdGlvbiBhbHRvZ2V0aGVyLiBUaGUgcmVhc29uIGZvclxuICogICAgICAgLy8gdGhpcyBpcyB0aGF0IGlmIHlvdSBkb24ndCBrbm93IHdobyB5b3UgYXJlIHRhbGtpbmcgdG8sIGl0IGlzIGVhc3kgZm9yIGFuXG4gKiAgICAgICAvLyBhdHRhY2tlciB0byBoaWphY2sgeW91ciBlbmNyeXB0ZWQgY29ubmVjdGlvbiwgcmVuZGVyaW5nIGVuY3J5cHRpb24gcG9pbnRsZXNzLlxuICogICAgICAgLy9cbiAqICAgICAgIC8vIFRSVVNUX0FMTF9DRVJUSUZJQ0FURVMgaXMgdGhlIGRlZmF1bHQgY2hvaWNlIGZvciBOb2RlSlMgZGVwbG95bWVudHMuIEl0IG9ubHkgcmVxdWlyZXNcbiAqICAgICAgIC8vIG5ldyBob3N0IHRvIHByb3ZpZGUgYSBjZXJ0aWZpY2F0ZSBhbmQgZG9lcyBubyB2ZXJpZmljYXRpb24gb2YgdGhlIHByb3ZpZGVkIGNlcnRpZmljYXRlLlxuICogICAgICAgLy9cbiAqICAgICAgIC8vIFRSVVNUX09OX0ZJUlNUX1VTRSBpcyBhdmFpbGFibGUgZm9yIG1vZGVybiBOb2RlSlMgZGVwbG95bWVudHMsIGFuZCB3b3Jrc1xuICogICAgICAgLy8gc2ltaWxhcmx5IHRvIGhvdyBgc3NsYCB3b3JrcyAtIHRoZSBmaXJzdCB0aW1lIHdlIGNvbm5lY3QgdG8gYSBuZXcgaG9zdCxcbiAqICAgICAgIC8vIHdlIHJlbWVtYmVyIHRoZSBjZXJ0aWZpY2F0ZSB0aGV5IHVzZS4gSWYgdGhlIGNlcnRpZmljYXRlIGV2ZXIgY2hhbmdlcywgd2VcbiAqICAgICAgIC8vIGFzc3VtZSBpdCBpcyBhbiBhdHRlbXB0IHRvIGhpamFjayB0aGUgY29ubmVjdGlvbiBhbmQgcmVxdWlyZSBtYW51YWwgaW50ZXJ2ZW50aW9uLlxuICogICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGJ5IGRlZmF1bHQsIGNvbm5lY3Rpb25zIFwianVzdCB3b3JrXCIgd2hpbGUgc3RpbGwgZ2l2aW5nIHlvdVxuICogICAgICAgLy8gZ29vZCBlbmNyeXB0ZWQgcHJvdGVjdGlvbi5cbiAqICAgICAgIC8vXG4gKiAgICAgICAvLyBUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFUyBpcyB0aGUgY2xhc3NpYyBhcHByb2FjaCB0byB0cnVzdCB2ZXJpZmljYXRpb24gLVxuICogICAgICAgLy8gd2hlbmV2ZXIgd2UgZXN0YWJsaXNoIGFuIGVuY3J5cHRlZCBjb25uZWN0aW9uLCB3ZSBlbnN1cmUgdGhlIGhvc3QgaXMgdXNpbmdcbiAqICAgICAgIC8vIGFuIGVuY3J5cHRpb24gY2VydGlmaWNhdGUgdGhhdCBpcyBpbiwgb3IgaXMgc2lnbmVkIGJ5LCBhIGNlcnRpZmljYXRlIGxpc3RlZFxuICogICAgICAgLy8gYXMgdHJ1c3RlZC4gSW4gdGhlIHdlYiBidW5kbGUsIHRoaXMgbGlzdCBvZiB0cnVzdGVkIGNlcnRpZmljYXRlcyBpcyBtYWludGFpbmVkXG4gKiAgICAgICAvLyBieSB0aGUgd2ViIGJyb3dzZXIuIEluIE5vZGVKUywgeW91IGNvbmZpZ3VyZSB0aGUgbGlzdCB3aXRoIHRoZSBuZXh0IGNvbmZpZyBvcHRpb24uXG4gKiAgICAgICAvL1xuICogICAgICAgLy8gVFJVU1RfU1lTVEVNX0NBX1NJR05FRF9DRVJUSUZJQ0FURVMgbWVhbmQgdGhhdCB5b3UgdHJ1c3Qgd2hhdGV2ZXIgY2VydGlmaWNhdGVzXG4gKiAgICAgICAvLyBhcmUgaW4gdGhlIGRlZmF1bHQgY2VydGlmaWNhdGUgY2hhaW4gb2YgdGhcbiAqICAgICAgIHRydXN0OiBcIlRSVVNUX0FMTF9DRVJUSUZJQ0FURVNcIiB8IFwiVFJVU1RfT05fRklSU1RfVVNFXCIgfCBcIlRSVVNUX1NJR05FRF9DRVJUSUZJQ0FURVNcIiB8XG4gICogICAgICAgXCJUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFU1wiIHwgXCJUUlVTVF9TWVNURU1fQ0FfU0lHTkVEX0NFUlRJRklDQVRFU1wiLFxuICpcbiAqICAgICAgIC8vIExpc3Qgb2Ygb25lIG9yIG1vcmUgcGF0aHMgdG8gdHJ1c3RlZCBlbmNyeXB0aW9uIGNlcnRpZmljYXRlcy4gVGhpcyBvbmx5XG4gKiAgICAgICAvLyB3b3JrcyBpbiB0aGUgTm9kZUpTIGJ1bmRsZSwgYW5kIG9ubHkgbWF0dGVycyBpZiB5b3UgdXNlIFwiVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVNcIi5cbiAqICAgICAgIC8vIFRoZSBjZXJ0aWZpY2F0ZSBmaWxlcyBzaG91bGQgYmUgaW4gcmVndWxhciBYLjUwOSBQRU0gZm9ybWF0LlxuICogICAgICAgLy8gRm9yIGluc3RhbmNlLCBbJy4vdHJ1c3RlZC5wZW0nXVxuICogICAgICAgdHJ1c3RlZENlcnRpZmljYXRlczogW10sXG4gKlxuICogICAgICAgLy8gUGF0aCB0byBhIGZpbGUgd2hlcmUgdGhlIGRyaXZlciBzYXZlcyBob3N0cyBpdCBoYXMgc2VlbiBpbiB0aGUgcGFzdCwgdGhpcyBpc1xuICogICAgICAgLy8gdmVyeSBzaW1pbGFyIHRvIHRoZSBzc2wgdG9vbCdzIGtub3duX2hvc3RzIGZpbGUuIEVhY2ggdGltZSB3ZSBjb25uZWN0IHRvIGFcbiAqICAgICAgIC8vIG5ldyBob3N0LCBhIGhhc2ggb2YgdGhlaXIgY2VydGlmaWNhdGUgaXMgc3RvcmVkIGFsb25nIHdpdGggdGhlIGRvbWFpbiBuYW1lIGFuZFxuICogICAgICAgLy8gcG9ydCwgYW5kIHRoaXMgaXMgdGhlbiB1c2VkIHRvIHZlcmlmeSB0aGUgaG9zdCBjZXJ0aWZpY2F0ZSBkb2VzIG5vdCBjaGFuZ2UuXG4gKiAgICAgICAvLyBUaGlzIHNldHRpbmcgaGFzIG5vIGVmZmVjdCB1bmxlc3MgVFJVU1RfT05fRklSU1RfVVNFIGlzIGVuYWJsZWQuXG4gKiAgICAgICBrbm93bkhvc3RzOlwifi8ubmVvNGova25vd25faG9zdHNcIixcbiAqXG4gKiAgICAgICAvLyBUaGUgbWF4IG51bWJlciBvZiBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbGxvd2VkIGlkbGUgaW4gdGhlIHBvb2wgYXQgYW55IHRpbWUuXG4gKiAgICAgICAvLyBDb25uZWN0aW9uIHdpbGwgYmUgZGVzdHJveWVkIGlmIHRoaXMgdGhyZXNob2xkIGlzIGV4Y2VlZGVkLlxuICogICAgICAgY29ubmVjdGlvblBvb2xTaXplOiA1MCxcbiAqXG4gKiAgICAgICAvLyBTcGVjaWZ5IHRoZSBtYXhpbXVtIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRyYW5zYWN0aW9ucyBhcmUgYWxsb3dlZCB0byByZXRyeSB2aWFcbiAqICAgICAgIC8vIHtAbGluayBTZXNzaW9uI3JlYWRUcmFuc2FjdGlvbigpfSBhbmQge0BsaW5rIFNlc3Npb24jd3JpdGVUcmFuc2FjdGlvbigpfSBmdW5jdGlvbnMuIFRoZXNlIGZ1bmN0aW9uc1xuICogICAgICAgLy8gd2lsbCByZXRyeSB0aGUgZ2l2ZW4gdW5pdCBvZiB3b3JrIG9uIGBTZXJ2aWNlVW5hdmFpbGFibGVgLCBgU2Vzc2lvbkV4cGlyZWRgIGFuZCB0cmFuc2llbnQgZXJyb3JzIHdpdGhcbiAqICAgICAgIC8vIGV4cG9uZW50aWFsIGJhY2tvZmYgdXNpbmcgaW5pdGlhbCBkZWxheSBvZiAxIHNlY29uZC4gRGVmYXVsdCB2YWx1ZSBpcyAzMDAwMCB3aGljaCBpcyAzMCBzZWNvbmRzLlxuICogICAgICAgbWF4VHJhbnNhY3Rpb25SZXRyeVRpbWU6IDMwMDAwLFxuICogICAgIH1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgZm9yIHRoZSBOZW80aiBkYXRhYmFzZSwgZm9yIGluc3RhbmNlIFwiYm9sdDovL2xvY2FsaG9zdFwiXG4gKiBAcGFyYW0ge01hcDxTdHJpbmcsU3RyaW5nPn0gYXV0aFRva2VuIEF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzLiBTZWUge0BsaW5rIGF1dGh9IGZvciBoZWxwZXJzLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBDb25maWd1cmF0aW9uIG9iamVjdC4gU2VlIHRoZSBjb25maWd1cmF0aW9uIHNlY3Rpb24gYWJvdmUgZm9yIGRldGFpbHMuXG4gKiBAcmV0dXJucyB7RHJpdmVyfVxuICovXG5mdW5jdGlvbiBkcml2ZXIodXJsLCBhdXRoVG9rZW4sIGNvbmZpZyA9IHt9KSB7XG4gIGFzc2VydFN0cmluZyh1cmwsICdCb2x0IFVSTCcpO1xuICBjb25zdCBzY2hlbWUgPSBwYXJzZVNjaGVtZSh1cmwpO1xuICBpZiAoc2NoZW1lID09PSBcImJvbHQrcm91dGluZzovL1wiKSB7XG4gICAgcmV0dXJuIG5ldyBSb3V0aW5nRHJpdmVyKHBhcnNlVXJsKHVybCksIFVTRVJfQUdFTlQsIGF1dGhUb2tlbiwgY29uZmlnKTtcbiAgfSBlbHNlIGlmIChzY2hlbWUgPT09IFwiYm9sdDovL1wiKSB7XG4gICAgcmV0dXJuIG5ldyBEcml2ZXIocGFyc2VVcmwodXJsKSwgVVNFUl9BR0VOVCwgYXV0aFRva2VuLCBjb25maWcpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gc2NoZW1lOiBcIiArIHNjaGVtZSk7XG5cbiAgfVxufVxuXG5cbmNvbnN0IHR5cGVzID17XG4gIE5vZGUsXG4gIFJlbGF0aW9uc2hpcCxcbiAgVW5ib3VuZFJlbGF0aW9uc2hpcCxcbiAgUGF0aFNlZ21lbnQsXG4gIFBhdGgsXG4gIFJlc3VsdCxcbiAgUmVzdWx0U3VtbWFyeSxcbiAgUmVjb3JkXG4gIH07XG5cbmNvbnN0IHNlc3Npb24gPSB7XG4gIFJFQUQsXG4gIFdSSVRFXG59O1xuY29uc3QgZXJyb3IgPSB7XG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEUsXG4gIFNFU1NJT05fRVhQSVJFRCxcbiAgUFJPVE9DT0xfRVJST1Jcbn07XG5jb25zdCBpbnRlZ2VyID0ge1xuICB0b051bWJlcixcbiAgdG9TdHJpbmcsXG4gIGluU2FmZVJhbmdlXG59O1xuXG5jb25zdCBmb3JFeHBvcnQgPSB7XG4gIGRyaXZlcixcbiAgaW50LFxuICBpc0ludCxcbiAgaW50ZWdlcixcbiAgTmVvNGpFcnJvcixcbiAgYXV0aCxcbiAgdHlwZXMsXG4gIHNlc3Npb24sXG4gIGVycm9yXG59O1xuXG5leHBvcnQge1xuICBkcml2ZXIsXG4gIGludCxcbiAgaXNJbnQsXG4gIGludGVnZXIsXG4gIE5lbzRqRXJyb3IsXG4gIGF1dGgsXG4gIHR5cGVzLFxuICBzZXNzaW9uLFxuICBlcnJvclxufVxuZXhwb3J0IGRlZmF1bHQgZm9yRXhwb3J0XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gNjQtYml0IEludGVnZXIgbGlicmFyeSwgb3JpZ2luYWxseSBmcm9tIExvbmcuanMgYnkgZGNvZGVJT1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rjb2RlSU8vTG9uZy5qc1xuLy8gTGljZW5zZSBBcGFjaGUgMlxuXG5pbXBvcnQge25ld0Vycm9yfSBmcm9tIFwiLi9lcnJvclwiO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSA2NCBiaXQgdHdvJ3MtY29tcGxlbWVudCBpbnRlZ2VyLCBnaXZlbiBpdHMgbG93IGFuZCBoaWdoIDMyIGJpdCB2YWx1ZXMgYXMgKnNpZ25lZCogaW50ZWdlcnMuXG4gKiAgU2VlIHRoZSBmcm9tKiBmdW5jdGlvbnMgYmVsb3cgZm9yIG1vcmUgY29udmVuaWVudCB3YXlzIG9mIGNvbnN0cnVjdGluZyBJbnRlZ2Vycy5cbiAqIEBhY2Nlc3MgcHVibGljXG4gKiBAZXhwb3J0cyBJbnRlZ2VyXG4gKiBAY2xhc3MgQSBJbnRlZ2VyIGNsYXNzIGZvciByZXByZXNlbnRpbmcgYSA2NCBiaXQgdHdvJ3MtY29tcGxlbWVudCBpbnRlZ2VyIHZhbHVlLlxuICogQHBhcmFtIHtudW1iZXJ9IGxvdyBUaGUgbG93IChzaWduZWQpIDMyIGJpdHMgb2YgdGhlIGxvbmdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoaWdoIFRoZSBoaWdoIChzaWduZWQpIDMyIGJpdHMgb2YgdGhlIGxvbmdcbiAqIEBjb25zdHJ1Y3RvclxuICpcbiAqIEBkZXByZWNhdGVkIFRoaXMgY2xhc3Mgd2lsbCBiZSByZW1vdmVkIG9yIG1hZGUgaW50ZXJuYWwgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGUgZHJpdmVyLlxuICovXG5jbGFzcyBJbnRlZ2VyIHtcbiAgY29uc3RydWN0b3IobG93LCBoaWdoKSB7XG4gICAgLyoqXG4gICAgICogVGhlIGxvdyAzMiBiaXRzIGFzIGEgc2lnbmVkIHZhbHVlLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuICAgIHRoaXMubG93ID0gbG93fDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGlnaCAzMiBiaXRzIGFzIGEgc2lnbmVkIHZhbHVlLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuICAgIHRoaXMuaGlnaCA9IGhpZ2h8MDtcbiAgfVxuXG4gIC8vIFRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhbiBJbnRlZ2VyIGlzIHRoZSB0d28gZ2l2ZW4gc2lnbmVkLCAzMi1iaXQgdmFsdWVzLlxuICAvLyBXZSB1c2UgMzItYml0IHBpZWNlcyBiZWNhdXNlIHRoZXNlIGFyZSB0aGUgc2l6ZSBvZiBpbnRlZ2VycyBvbiB3aGljaFxuICAvLyBKYXZhc2NyaXB0IHBlcmZvcm1zIGJpdC1vcGVyYXRpb25zLiAgRm9yIG9wZXJhdGlvbnMgbGlrZSBhZGRpdGlvbiBhbmRcbiAgLy8gbXVsdGlwbGljYXRpb24sIHdlIHNwbGl0IGVhY2ggbnVtYmVyIGludG8gMTYgYml0IHBpZWNlcywgd2hpY2ggY2FuIGVhc2lseSBiZVxuICAvLyBtdWx0aXBsaWVkIHdpdGhpbiBKYXZhc2NyaXB0J3MgZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50YXRpb24gd2l0aG91dCBvdmVyZmxvd1xuICAvLyBvciBjaGFuZ2UgaW4gc2lnbi5cbiAgLy9cbiAgLy8gSW4gdGhlIGFsZ29yaXRobXMgYmVsb3csIHdlIGZyZXF1ZW50bHkgcmVkdWNlIHRoZSBuZWdhdGl2ZSBjYXNlIHRvIHRoZVxuICAvLyBwb3NpdGl2ZSBjYXNlIGJ5IG5lZ2F0aW5nIHRoZSBpbnB1dChzKSBhbmQgdGhlbiBwb3N0LXByb2Nlc3NpbmcgdGhlIHJlc3VsdC5cbiAgLy8gTm90ZSB0aGF0IHdlIG11c3QgQUxXQVlTIGNoZWNrIHNwZWNpYWxseSB3aGV0aGVyIHRob3NlIHZhbHVlcyBhcmUgTUlOX1ZBTFVFXG4gIC8vICgtMl42MykgYmVjYXVzZSAtTUlOX1ZBTFVFID09IE1JTl9WQUxVRSAoc2luY2UgMl42MyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXNcbiAgLy8gYSBwb3NpdGl2ZSBudW1iZXIsIGl0IG92ZXJmbG93cyBiYWNrIGludG8gYSBuZWdhdGl2ZSkuICBOb3QgaGFuZGxpbmcgdGhpc1xuICAvLyBjYXNlIHdvdWxkIG9mdGVuIHJlc3VsdCBpbiBpbmZpbml0ZSByZWN1cnNpb24uXG4gIC8vXG4gIC8vIENvbW1vbiBjb25zdGFudCB2YWx1ZXMgWkVSTywgT05FLCBORUdfT05FLCBldGMuIGFyZSBkZWZpbmVkIGJlbG93IHRoZSBmcm9tKlxuICAvLyBtZXRob2RzIG9uIHdoaWNoIHRoZXkgZGVwZW5kLlxuXG5cbiAgaW5TYWZlUmFuZ2UoKSB7cmV0dXJuIHRoaXMuZ3JlYXRlclRoYW5PckVxdWFsKEludGVnZXIuTUlOX1NBRkVfVkFMVUUpICYmIHRoaXMubGVzc1RoYW5PckVxdWFsKEludGVnZXIuTUFYX1NBRkVfVkFMVUUpfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIEludGVnZXIgdG8gYW4gZXhhY3QgamF2YXNjcmlwdCBOdW1iZXIsIGFzc3VtaW5nIGl0IGlzIGEgMzIgYml0IGludGVnZXIuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEBleHBvc2VcbiAgICovXG4gIHRvSW50KCkgeyByZXR1cm4gdGhpcy5sb3c7IH07XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBJbnRlZ2VyIHRvIGEgdGhlIG5lYXJlc3QgZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50YXRpb24gb2YgdGhpcyB2YWx1ZSAoZG91YmxlLCA1MyBiaXQgbWFudGlzc2EpLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAZXhwb3NlXG4gICAqL1xuICB0b051bWJlcigpeyByZXR1cm4gdGhpcy5oaWdoICogVFdPX1BXUl8zMl9EQkwgKyAodGhpcy5sb3cgPj4+IDApOyB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBJbnRlZ2VyIHRvIGEgc3RyaW5nIHdyaXR0ZW4gaW4gdGhlIHNwZWNpZmllZCByYWRpeC5cbiAgICogQHBhcmFtIHtudW1iZXI9fSByYWRpeCBSYWRpeCAoMi0zNiksIGRlZmF1bHRzIHRvIDEwXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBvdmVycmlkZVxuICAgKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBJZiBgcmFkaXhgIGlzIG91dCBvZiByYW5nZVxuICAgKiBAZXhwb3NlXG4gICAqL1xuICB0b1N0cmluZyhyYWRpeCkge1xuICAgIHJhZGl4ID0gcmFkaXggfHwgMTA7XG4gICAgaWYgKHJhZGl4IDwgMiB8fCAzNiA8IHJhZGl4KVxuICAgICAgdGhyb3cgUmFuZ2VFcnJvcigncmFkaXggb3V0IG9mIHJhbmdlOiAnICsgcmFkaXgpO1xuICAgIGlmICh0aGlzLmlzWmVybygpKVxuICAgICAgcmV0dXJuICcwJztcbiAgICB2YXIgcmVtO1xuICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkge1xuICAgICAgaWYgKHRoaXMuZXF1YWxzKEludGVnZXIuTUlOX1ZBTFVFKSkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGNoYW5nZSB0aGUgSW50ZWdlciB2YWx1ZSBiZWZvcmUgaXQgY2FuIGJlIG5lZ2F0ZWQsIHNvIHdlIHJlbW92ZVxuICAgICAgICAvLyB0aGUgYm90dG9tLW1vc3QgZGlnaXQgaW4gdGhpcyBiYXNlIGFuZCB0aGVuIHJlY3Vyc2UgdG8gZG8gdGhlIHJlc3QuXG4gICAgICAgIHZhciByYWRpeEludGVnZXIgPSBJbnRlZ2VyLmZyb21OdW1iZXIocmFkaXgpO1xuICAgICAgICB2YXIgZGl2ID0gdGhpcy5kaXYocmFkaXhJbnRlZ2VyKTtcbiAgICAgICAgcmVtID0gZGl2Lm11bHRpcGx5KHJhZGl4SW50ZWdlcikuc3VidHJhY3QodGhpcyk7XG4gICAgICAgIHJldHVybiBkaXYudG9TdHJpbmcocmFkaXgpICsgcmVtLnRvSW50KCkudG9TdHJpbmcocmFkaXgpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIHJldHVybiAnLScgKyB0aGlzLm5lZ2F0ZSgpLnRvU3RyaW5nKHJhZGl4KTtcbiAgICB9XG5cbiAgICAvLyBEbyBzZXZlcmFsICg2KSBkaWdpdHMgZWFjaCB0aW1lIHRocm91Z2ggdGhlIGxvb3AsIHNvIGFzIHRvXG4gICAgLy8gbWluaW1pemUgdGhlIGNhbGxzIHRvIHRoZSB2ZXJ5IGV4cGVuc2l2ZSBlbXVsYXRlZCBkaXYuXG4gICAgdmFyIHJhZGl4VG9Qb3dlciA9IEludGVnZXIuZnJvbU51bWJlcihNYXRoLnBvdyhyYWRpeCwgNikgKTtcbiAgICByZW0gPSB0aGlzO1xuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdmFyIHJlbURpdiA9IHJlbS5kaXYocmFkaXhUb1Bvd2VyKSxcbiAgICAgICAgICBpbnR2YWwgPSByZW0uc3VidHJhY3QocmVtRGl2Lm11bHRpcGx5KHJhZGl4VG9Qb3dlcikpLnRvSW50KCkgPj4+IDAsXG4gICAgICAgICAgZGlnaXRzID0gaW50dmFsLnRvU3RyaW5nKHJhZGl4KTtcbiAgICAgIHJlbSA9IHJlbURpdjtcbiAgICAgIGlmIChyZW0uaXNaZXJvKCkpXG4gICAgICAgIHJldHVybiBkaWdpdHMgKyByZXN1bHQ7XG4gICAgICBlbHNlIHtcbiAgICAgICAgd2hpbGUgKGRpZ2l0cy5sZW5ndGggPCA2KVxuICAgICAgICAgIGRpZ2l0cyA9ICcwJyArIGRpZ2l0cztcbiAgICAgICAgcmVzdWx0ID0gJycgKyBkaWdpdHMgKyByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGhpZ2ggMzIgYml0cyBhcyBhIHNpZ25lZCBpbnRlZ2VyLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBTaWduZWQgaGlnaCBiaXRzXG4gICAqIEBleHBvc2VcbiAgICovXG4gIGdldEhpZ2hCaXRzKCkgeyByZXR1cm4gdGhpcy5oaWdoOyB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxvdyAzMiBiaXRzIGFzIGEgc2lnbmVkIGludGVnZXIuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFNpZ25lZCBsb3cgYml0c1xuICAgKiBAZXhwb3NlXG4gICAqL1xuICBnZXRMb3dCaXRzKCkgeyByZXR1cm4gdGhpcy5sb3c7IH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIHRvIHJlcHJlc2VudCB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBJbnRlZ2VyLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAZXhwb3NlXG4gICAqL1xuICBnZXROdW1CaXRzQWJzKCkge1xuICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSlcbiAgICAgIHJldHVybiB0aGlzLmVxdWFscyhJbnRlZ2VyLk1JTl9WQUxVRSkgPyA2NCA6IHRoaXMubmVnYXRlKCkuZ2V0TnVtQml0c0FicygpO1xuICAgIHZhciB2YWwgPSB0aGlzLmhpZ2ggIT0gMCA/IHRoaXMuaGlnaCA6IHRoaXMubG93O1xuICAgIGZvciAodmFyIGJpdCA9IDMxOyBiaXQgPiAwOyBiaXQtLSlcbiAgICAgIGlmICgodmFsICYgKDEgPDwgYml0KSkgIT0gMClcbiAgICAgICAgYnJlYWs7XG4gICAgcmV0dXJuIHRoaXMuaGlnaCAhPSAwID8gYml0ICsgMzMgOiBiaXQgKyAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlc3RzIGlmIHRoaXMgSW50ZWdlcidzIHZhbHVlIGVxdWFscyB6ZXJvLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQGV4cG9zZVxuICAgKi9cbiAgaXNaZXJvKCkge1xuICAgIHJldHVybiB0aGlzLmhpZ2ggPT09IDAgJiYgdGhpcy5sb3cgPT09IDA7XG4gIH1cblxuICAvKipcbiAgICogVGVzdHMgaWYgdGhpcyBJbnRlZ2VyJ3MgdmFsdWUgaXMgbmVnYXRpdmUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKiBAZXhwb3NlXG4gICAqL1xuICBpc05lZ2F0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLmhpZ2ggPCAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlc3RzIGlmIHRoaXMgSW50ZWdlcidzIHZhbHVlIGlzIHBvc2l0aXZlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQGV4cG9zZVxuICAgKi9cbiAgaXNQb3NpdGl2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5oaWdoID49IDA7XG4gIH1cblxuICAvKipcbiAgICogVGVzdHMgaWYgdGhpcyBJbnRlZ2VyJ3MgdmFsdWUgaXMgb2RkLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQGV4cG9zZVxuICAgKi9cbiAgaXNPZGQoKSB7IHJldHVybiAodGhpcy5sb3cgJiAxKSA9PT0gMTsgfVxuXG4gIC8qKlxuICAgKiBUZXN0cyBpZiB0aGlzIEludGVnZXIncyB2YWx1ZSBpcyBldmVuLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQGV4cG9zZVxuICAgKi9cbiAgaXNFdmVuKCkgeyByZXR1cm4gKHRoaXMubG93ICYgMSkgPT09IDA7IH07XG5cbiAgLyoqXG4gICAqIFRlc3RzIGlmIHRoaXMgSW50ZWdlcidzIHZhbHVlIGVxdWFscyB0aGUgc3BlY2lmaWVkJ3MuXG4gICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBleHBvc2VcbiAgICovXG4gIGVxdWFscyhvdGhlcikge1xuICAgIGlmICghSW50ZWdlci5pc0ludGVnZXIob3RoZXIpKVxuICAgICAgb3RoZXIgPSBJbnRlZ2VyLmZyb21WYWx1ZShvdGhlcik7XG4gICAgcmV0dXJuIHRoaXMuaGlnaCA9PT0gb3RoZXIuaGlnaCAmJiB0aGlzLmxvdyA9PT0gb3RoZXIubG93O1xuICB9XG5cbiAgLyoqXG4gICAqIFRlc3RzIGlmIHRoaXMgSW50ZWdlcidzIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgc3BlY2lmaWVkJ3MuXG4gICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBleHBvc2VcbiAgICovXG4gIG5vdEVxdWFscyhvdGhlcikgeyAhdGhpcy5lcXVhbHMoLyogdmFsaWRhdGVzICovIG90aGVyKTsgfVxuXG4gIC8qKlxuICAgKiBUZXN0cyBpZiB0aGlzIEludGVnZXIncyB2YWx1ZSBpcyBsZXNzIHRoYW4gdGhlIHNwZWNpZmllZCdzLlxuICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKiBAZXhwb3NlXG4gICAqL1xuICBsZXNzVGhhbihvdGhlcikgeyByZXR1cm4gdGhpcy5jb21wYXJlKC8qIHZhbGlkYXRlcyAqLyBvdGhlcikgPCAwOyB9XG5cbiAgLyoqXG4gICAqIFRlc3RzIGlmIHRoaXMgSW50ZWdlcidzIHZhbHVlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0aGUgc3BlY2lmaWVkJ3MuXG4gICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBleHBvc2VcbiAgICovXG4gIGxlc3NUaGFuT3JFcXVhbChvdGhlcikgeyByZXR1cm4gdGhpcy5jb21wYXJlKC8qIHZhbGlkYXRlcyAqLyBvdGhlcikgPD0gMDsgfVxuXG4gIC8qKlxuICAgKiBUZXN0cyBpZiB0aGlzIEludGVnZXIncyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhlIHNwZWNpZmllZCdzLlxuICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKiBAZXhwb3NlXG4gICAqL1xuICBncmVhdGVyVGhhbihvdGhlcikgeyByZXR1cm4gdGhpcy5jb21wYXJlKC8qIHZhbGlkYXRlcyAqLyBvdGhlcikgPiAwOyB9XG5cbiAgLyoqXG4gICAqIFRlc3RzIGlmIHRoaXMgSW50ZWdlcidzIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0aGUgc3BlY2lmaWVkJ3MuXG4gICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBleHBvc2VcbiAgICovXG4gIGdyZWF0ZXJUaGFuT3JFcXVhbChvdGhlcikgeyByZXR1cm4gdGhpcy5jb21wYXJlKC8qIHZhbGlkYXRlcyAqLyBvdGhlcikgPj0gMDsgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlcyB0aGlzIEludGVnZXIncyB2YWx1ZSB3aXRoIHRoZSBzcGVjaWZpZWQncy5cbiAgICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIHRoZXkgYXJlIHRoZSBzYW1lLCAxIGlmIHRoZSB0aGlzIGlzIGdyZWF0ZXIgYW5kIC0xXG4gICAqICBpZiB0aGUgZ2l2ZW4gb25lIGlzIGdyZWF0ZXJcbiAgICogQGV4cG9zZVxuICAgKi9cbiAgY29tcGFyZShvdGhlcikge1xuICAgIGlmICghSW50ZWdlci5pc0ludGVnZXIob3RoZXIpKVxuICAgICAgb3RoZXIgPSBJbnRlZ2VyLmZyb21WYWx1ZShvdGhlcik7XG4gICAgaWYgKHRoaXMuZXF1YWxzKG90aGVyKSlcbiAgICAgIHJldHVybiAwO1xuICAgIHZhciB0aGlzTmVnID0gdGhpcy5pc05lZ2F0aXZlKCksXG4gICAgICBvdGhlck5lZyA9IG90aGVyLmlzTmVnYXRpdmUoKTtcbiAgICBpZiAodGhpc05lZyAmJiAhb3RoZXJOZWcpXG4gICAgICByZXR1cm4gLTE7XG4gICAgaWYgKCF0aGlzTmVnICYmIG90aGVyTmVnKVxuICAgICAgcmV0dXJuIDE7XG4gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgc2lnbiBiaXRzIGFyZSB0aGUgc2FtZVxuICAgIHJldHVybiB0aGlzLnN1YnRyYWN0KG90aGVyKS5pc05lZ2F0aXZlKCkgPyAtMSA6IDE7XG4gIH1cblxuICAvKipcbiAgICogTmVnYXRlcyB0aGlzIEludGVnZXIncyB2YWx1ZS5cbiAgICogQHJldHVybnMgeyFJbnRlZ2VyfSBOZWdhdGVkIEludGVnZXJcbiAgICogQGV4cG9zZVxuICAgKi9cbiAgbmVnYXRlKCkge1xuICAgIGlmICh0aGlzLmVxdWFscyhJbnRlZ2VyLk1JTl9WQUxVRSkpXG4gICAgICByZXR1cm4gSW50ZWdlci5NSU5fVkFMVUU7XG4gICAgcmV0dXJuIHRoaXMubm90KCkuYWRkKEludGVnZXIuT05FKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdW0gb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBJbnRlZ2VyLlxuICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IGFkZGVuZCBBZGRlbmRcbiAgICogQHJldHVybnMgeyFJbnRlZ2VyfSBTdW1cbiAgICogQGV4cG9zZVxuICAgKi9cbiAgYWRkKGFkZGVuZCkge1xuICAgIGlmICghSW50ZWdlci5pc0ludGVnZXIoYWRkZW5kKSlcbiAgICAgIGFkZGVuZCA9IEludGVnZXIuZnJvbVZhbHVlKGFkZGVuZCk7XG5cbiAgICAvLyBEaXZpZGUgZWFjaCBudW1iZXIgaW50byA0IGNodW5rcyBvZiAxNiBiaXRzLCBhbmQgdGhlbiBzdW0gdGhlIGNodW5rcy5cblxuICAgIHZhciBhNDggPSB0aGlzLmhpZ2ggPj4+IDE2O1xuICAgIHZhciBhMzIgPSB0aGlzLmhpZ2ggJiAweEZGRkY7XG4gICAgdmFyIGExNiA9IHRoaXMubG93ID4+PiAxNjtcbiAgICB2YXIgYTAwID0gdGhpcy5sb3cgJiAweEZGRkY7XG5cbiAgICB2YXIgYjQ4ID0gYWRkZW5kLmhpZ2ggPj4+IDE2O1xuICAgIHZhciBiMzIgPSBhZGRlbmQuaGlnaCAmIDB4RkZGRjtcbiAgICB2YXIgYjE2ID0gYWRkZW5kLmxvdyA+Pj4gMTY7XG4gICAgdmFyIGIwMCA9IGFkZGVuZC5sb3cgJiAweEZGRkY7XG5cbiAgICB2YXIgYzQ4ID0gMCwgYzMyID0gMCwgYzE2ID0gMCwgYzAwID0gMDtcbiAgICBjMDAgKz0gYTAwICsgYjAwO1xuICAgIGMxNiArPSBjMDAgPj4+IDE2O1xuICAgIGMwMCAmPSAweEZGRkY7XG4gICAgYzE2ICs9IGExNiArIGIxNjtcbiAgICBjMzIgKz0gYzE2ID4+PiAxNjtcbiAgICBjMTYgJj0gMHhGRkZGO1xuICAgIGMzMiArPSBhMzIgKyBiMzI7XG4gICAgYzQ4ICs9IGMzMiA+Pj4gMTY7XG4gICAgYzMyICY9IDB4RkZGRjtcbiAgICBjNDggKz0gYTQ4ICsgYjQ4O1xuICAgIGM0OCAmPSAweEZGRkY7XG4gICAgcmV0dXJuIEludGVnZXIuZnJvbUJpdHMoKGMxNiA8PCAxNikgfCBjMDAsIChjNDggPDwgMTYpIHwgYzMyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIG9mIHRoaXMgYW5kIHRoZSBzcGVjaWZpZWQgSW50ZWdlci5cbiAgICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfSBzdWJ0cmFoZW5kIFN1YnRyYWhlbmRcbiAgICogQHJldHVybnMgeyFJbnRlZ2VyfSBEaWZmZXJlbmNlXG4gICAqIEBleHBvc2VcbiAgICovXG4gIHN1YnRyYWN0KHN1YnRyYWhlbmQpIHtcbiAgICBpZiAoIUludGVnZXIuaXNJbnRlZ2VyKHN1YnRyYWhlbmQpKVxuICAgICAgc3VidHJhaGVuZCA9IEludGVnZXIuZnJvbVZhbHVlKHN1YnRyYWhlbmQpO1xuICAgIHJldHVybiB0aGlzLmFkZChzdWJ0cmFoZW5kLm5lZ2F0ZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIHRoaXMgYW5kIHRoZSBzcGVjaWZpZWQgSW50ZWdlci5cbiAgICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfSBtdWx0aXBsaWVyIE11bHRpcGxpZXJcbiAgICogQHJldHVybnMgeyFJbnRlZ2VyfSBQcm9kdWN0XG4gICAqIEBleHBvc2VcbiAgICovXG4gIG11bHRpcGx5KG11bHRpcGxpZXIpIHtcbiAgICBpZiAodGhpcy5pc1plcm8oKSlcbiAgICAgIHJldHVybiBJbnRlZ2VyLlpFUk87XG4gICAgaWYgKCFJbnRlZ2VyLmlzSW50ZWdlcihtdWx0aXBsaWVyKSlcbiAgICAgIG11bHRpcGxpZXIgPSBJbnRlZ2VyLmZyb21WYWx1ZShtdWx0aXBsaWVyKTtcbiAgICBpZiAobXVsdGlwbGllci5pc1plcm8oKSlcbiAgICAgIHJldHVybiBJbnRlZ2VyLlpFUk87XG4gICAgaWYgKHRoaXMuZXF1YWxzKEludGVnZXIuTUlOX1ZBTFVFKSlcbiAgICAgIHJldHVybiBtdWx0aXBsaWVyLmlzT2RkKCkgPyBJbnRlZ2VyLk1JTl9WQUxVRSA6IEludGVnZXIuWkVSTztcbiAgICBpZiAobXVsdGlwbGllci5lcXVhbHMoSW50ZWdlci5NSU5fVkFMVUUpKVxuICAgICAgcmV0dXJuIHRoaXMuaXNPZGQoKSA/IEludGVnZXIuTUlOX1ZBTFVFIDogSW50ZWdlci5aRVJPO1xuXG4gICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSB7XG4gICAgICBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpXG4gICAgICAgIHJldHVybiB0aGlzLm5lZ2F0ZSgpLm11bHRpcGx5KG11bHRpcGxpZXIubmVnYXRlKCkpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gdGhpcy5uZWdhdGUoKS5tdWx0aXBseShtdWx0aXBsaWVyKS5uZWdhdGUoKTtcbiAgICB9IGVsc2UgaWYgKG11bHRpcGxpZXIuaXNOZWdhdGl2ZSgpKVxuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbHkobXVsdGlwbGllci5uZWdhdGUoKSkubmVnYXRlKCk7XG5cbiAgICAvLyBJZiBib3RoIGxvbmdzIGFyZSBzbWFsbCwgdXNlIGZsb2F0IG11bHRpcGxpY2F0aW9uXG4gICAgaWYgKHRoaXMubGVzc1RoYW4oVFdPX1BXUl8yNCkgJiYgbXVsdGlwbGllci5sZXNzVGhhbihUV09fUFdSXzI0KSlcbiAgICAgIHJldHVybiBJbnRlZ2VyLmZyb21OdW1iZXIodGhpcy50b051bWJlcigpICogbXVsdGlwbGllci50b051bWJlcigpKTtcblxuICAgIC8vIERpdmlkZSBlYWNoIGxvbmcgaW50byA0IGNodW5rcyBvZiAxNiBiaXRzLCBhbmQgdGhlbiBhZGQgdXAgNHg0IHByb2R1Y3RzLlxuICAgIC8vIFdlIGNhbiBza2lwIHByb2R1Y3RzIHRoYXQgd291bGQgb3ZlcmZsb3cuXG5cbiAgICB2YXIgYTQ4ID0gdGhpcy5oaWdoID4+PiAxNjtcbiAgICB2YXIgYTMyID0gdGhpcy5oaWdoICYgMHhGRkZGO1xuICAgIHZhciBhMTYgPSB0aGlzLmxvdyA+Pj4gMTY7XG4gICAgdmFyIGEwMCA9IHRoaXMubG93ICYgMHhGRkZGO1xuXG4gICAgdmFyIGI0OCA9IG11bHRpcGxpZXIuaGlnaCA+Pj4gMTY7XG4gICAgdmFyIGIzMiA9IG11bHRpcGxpZXIuaGlnaCAmIDB4RkZGRjtcbiAgICB2YXIgYjE2ID0gbXVsdGlwbGllci5sb3cgPj4+IDE2O1xuICAgIHZhciBiMDAgPSBtdWx0aXBsaWVyLmxvdyAmIDB4RkZGRjtcblxuICAgIHZhciBjNDggPSAwLCBjMzIgPSAwLCBjMTYgPSAwLCBjMDAgPSAwO1xuICAgIGMwMCArPSBhMDAgKiBiMDA7XG4gICAgYzE2ICs9IGMwMCA+Pj4gMTY7XG4gICAgYzAwICY9IDB4RkZGRjtcbiAgICBjMTYgKz0gYTE2ICogYjAwO1xuICAgIGMzMiArPSBjMTYgPj4+IDE2O1xuICAgIGMxNiAmPSAweEZGRkY7XG4gICAgYzE2ICs9IGEwMCAqIGIxNjtcbiAgICBjMzIgKz0gYzE2ID4+PiAxNjtcbiAgICBjMTYgJj0gMHhGRkZGO1xuICAgIGMzMiArPSBhMzIgKiBiMDA7XG4gICAgYzQ4ICs9IGMzMiA+Pj4gMTY7XG4gICAgYzMyICY9IDB4RkZGRjtcbiAgICBjMzIgKz0gYTE2ICogYjE2O1xuICAgIGM0OCArPSBjMzIgPj4+IDE2O1xuICAgIGMzMiAmPSAweEZGRkY7XG4gICAgYzMyICs9IGEwMCAqIGIzMjtcbiAgICBjNDggKz0gYzMyID4+PiAxNjtcbiAgICBjMzIgJj0gMHhGRkZGO1xuICAgIGM0OCArPSBhNDggKiBiMDAgKyBhMzIgKiBiMTYgKyBhMTYgKiBiMzIgKyBhMDAgKiBiNDg7XG4gICAgYzQ4ICY9IDB4RkZGRjtcbiAgICByZXR1cm4gSW50ZWdlci5mcm9tQml0cygoYzE2IDw8IDE2KSB8IGMwMCwgKGM0OCA8PCAxNikgfCBjMzIpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoaXMgSW50ZWdlciBkaXZpZGVkIGJ5IHRoZSBzcGVjaWZpZWQuXG4gICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gZGl2aXNvciBEaXZpc29yXG4gICAqIEByZXR1cm5zIHshSW50ZWdlcn0gUXVvdGllbnRcbiAgICogQGV4cG9zZVxuICAgKi9cbiAgZGl2KGRpdmlzb3IpIHtcbiAgICBpZiAoIUludGVnZXIuaXNJbnRlZ2VyKGRpdmlzb3IpKVxuICAgICAgICBkaXZpc29yID0gSW50ZWdlci5mcm9tVmFsdWUoZGl2aXNvcik7XG4gICAgaWYgKGRpdmlzb3IuaXNaZXJvKCkpXG4gICAgICAgIHRocm93IG5ld0Vycm9yKCdkaXZpc2lvbiBieSB6ZXJvJyk7XG4gICAgaWYgKHRoaXMuaXNaZXJvKCkpXG4gICAgICAgIHJldHVybiBJbnRlZ2VyLlpFUk87XG4gICAgdmFyIGFwcHJveCwgcmVtLCByZXM7XG4gICAgaWYgKHRoaXMuZXF1YWxzKEludGVnZXIuTUlOX1ZBTFVFKSkge1xuICAgICAgaWYgKGRpdmlzb3IuZXF1YWxzKEludGVnZXIuT05FKSB8fCBkaXZpc29yLmVxdWFscyhJbnRlZ2VyLk5FR19PTkUpKVxuICAgICAgICByZXR1cm4gSW50ZWdlci5NSU5fVkFMVUU7ICAvLyByZWNhbGwgdGhhdCAtTUlOX1ZBTFVFID09IE1JTl9WQUxVRVxuICAgICAgZWxzZSBpZiAoZGl2aXNvci5lcXVhbHMoSW50ZWdlci5NSU5fVkFMVUUpKVxuICAgICAgICByZXR1cm4gSW50ZWdlci5PTkU7XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSB8b3RoZXJ8ID49IDIsIHNvIHx0aGlzL290aGVyfCA8IHxNSU5fVkFMVUV8LlxuICAgICAgICB2YXIgaGFsZlRoaXMgPSB0aGlzLnNoaWZ0UmlnaHQoMSk7XG4gICAgICAgIGFwcHJveCA9IGhhbGZUaGlzLmRpdihkaXZpc29yKS5zaGlmdExlZnQoMSk7XG4gICAgICAgIGlmIChhcHByb3guZXF1YWxzKEludGVnZXIuWkVSTykpIHtcbiAgICAgICAgICByZXR1cm4gZGl2aXNvci5pc05lZ2F0aXZlKCkgPyBJbnRlZ2VyLk9ORSA6IEludGVnZXIuTkVHX09ORTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZW0gPSB0aGlzLnN1YnRyYWN0KGRpdmlzb3IubXVsdGlwbHkoYXBwcm94KSk7XG4gICAgICAgICAgcmVzID0gYXBwcm94LmFkZChyZW0uZGl2KGRpdmlzb3IpKTtcbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaXZpc29yLmVxdWFscyhJbnRlZ2VyLk1JTl9WQUxVRSkpXG4gICAgICByZXR1cm4gSW50ZWdlci5aRVJPO1xuICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkge1xuICAgICAgaWYgKGRpdmlzb3IuaXNOZWdhdGl2ZSgpKVxuICAgICAgICByZXR1cm4gdGhpcy5uZWdhdGUoKS5kaXYoZGl2aXNvci5uZWdhdGUoKSk7XG4gICAgICByZXR1cm4gdGhpcy5uZWdhdGUoKS5kaXYoZGl2aXNvcikubmVnYXRlKCk7XG4gICAgfSBlbHNlIGlmIChkaXZpc29yLmlzTmVnYXRpdmUoKSlcbiAgICAgIHJldHVybiB0aGlzLmRpdihkaXZpc29yLm5lZ2F0ZSgpKS5uZWdhdGUoKTtcblxuICAgIC8vIFJlcGVhdCB0aGUgZm9sbG93aW5nIHVudGlsIHRoZSByZW1haW5kZXIgaXMgbGVzcyB0aGFuIG90aGVyOiAgZmluZCBhXG4gICAgLy8gZmxvYXRpbmctcG9pbnQgdGhhdCBhcHByb3hpbWF0ZXMgcmVtYWluZGVyIC8gb3RoZXIgKmZyb20gYmVsb3cqLCBhZGQgdGhpc1xuICAgIC8vIGludG8gdGhlIHJlc3VsdCwgYW5kIHN1YnRyYWN0IGl0IGZyb20gdGhlIHJlbWFpbmRlci4gIEl0IGlzIGNyaXRpY2FsIHRoYXRcbiAgICAvLyB0aGUgYXBwcm94aW1hdGUgdmFsdWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSByZWFsIHZhbHVlIHNvIHRoYXQgdGhlXG4gICAgLy8gcmVtYWluZGVyIG5ldmVyIGJlY29tZXMgbmVnYXRpdmUuXG4gICAgcmVzID0gSW50ZWdlci5aRVJPO1xuICAgIHJlbSA9IHRoaXM7XG4gICAgd2hpbGUgKHJlbS5ncmVhdGVyVGhhbk9yRXF1YWwoZGl2aXNvcikpIHtcbiAgICAgIC8vIEFwcHJveGltYXRlIHRoZSByZXN1bHQgb2YgZGl2aXNpb24uIFRoaXMgbWF5IGJlIGEgbGl0dGxlIGdyZWF0ZXIgb3JcbiAgICAgIC8vIHNtYWxsZXIgdGhhbiB0aGUgYWN0dWFsIHZhbHVlLlxuICAgICAgYXBwcm94ID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihyZW0udG9OdW1iZXIoKSAvIGRpdmlzb3IudG9OdW1iZXIoKSkpO1xuXG4gICAgICAvLyBXZSB3aWxsIHR3ZWFrIHRoZSBhcHByb3hpbWF0ZSByZXN1bHQgYnkgY2hhbmdpbmcgaXQgaW4gdGhlIDQ4LXRoIGRpZ2l0IG9yXG4gICAgICAvLyB0aGUgc21hbGxlc3Qgbm9uLWZyYWN0aW9uYWwgZGlnaXQsIHdoaWNoZXZlciBpcyBsYXJnZXIuXG4gICAgICB2YXIgbG9nMiA9IE1hdGguY2VpbChNYXRoLmxvZyhhcHByb3gpIC8gTWF0aC5MTjIpLFxuICAgICAgICAgIGRlbHRhID0gKGxvZzIgPD0gNDgpID8gMSA6IE1hdGgucG93KDIsIGxvZzIgLSA0OCksXG5cbiAgICAgIC8vIERlY3JlYXNlIHRoZSBhcHByb3hpbWF0aW9uIHVudGlsIGl0IGlzIHNtYWxsZXIgdGhhbiB0aGUgcmVtYWluZGVyLiAgTm90ZVxuICAgICAgLy8gdGhhdCBpZiBpdCBpcyB0b28gbGFyZ2UsIHRoZSBwcm9kdWN0IG92ZXJmbG93cyBhbmQgaXMgbmVnYXRpdmUuXG4gICAgICBhcHByb3hSZXMgPSBJbnRlZ2VyLmZyb21OdW1iZXIoYXBwcm94KSxcbiAgICAgIGFwcHJveFJlbSA9IGFwcHJveFJlcy5tdWx0aXBseShkaXZpc29yKTtcbiAgICAgIHdoaWxlIChhcHByb3hSZW0uaXNOZWdhdGl2ZSgpIHx8IGFwcHJveFJlbS5ncmVhdGVyVGhhbihyZW0pKSB7XG4gICAgICAgIGFwcHJveCAtPSBkZWx0YTtcbiAgICAgICAgYXBwcm94UmVzID0gSW50ZWdlci5mcm9tTnVtYmVyKGFwcHJveCk7XG4gICAgICAgIGFwcHJveFJlbSA9IGFwcHJveFJlcy5tdWx0aXBseShkaXZpc29yKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2Uga25vdyB0aGUgYW5zd2VyIGNhbid0IGJlIHplcm8uLi4gYW5kIGFjdHVhbGx5LCB6ZXJvIHdvdWxkIGNhdXNlXG4gICAgICAvLyBpbmZpbml0ZSByZWN1cnNpb24gc2luY2Ugd2Ugd291bGQgbWFrZSBubyBwcm9ncmVzcy5cbiAgICAgIGlmIChhcHByb3hSZXMuaXNaZXJvKCkpXG4gICAgICAgIGFwcHJveFJlcyA9IEludGVnZXIuT05FO1xuXG4gICAgICByZXMgPSByZXMuYWRkKGFwcHJveFJlcyk7XG4gICAgICByZW0gPSByZW0uc3VidHJhY3QoYXBwcm94UmVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoaXMgSW50ZWdlciBtb2R1bG8gdGhlIHNwZWNpZmllZC5cbiAgICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfSBkaXZpc29yIERpdmlzb3JcbiAgICogQHJldHVybnMgeyFJbnRlZ2VyfSBSZW1haW5kZXJcbiAgICogQGV4cG9zZVxuICAgKi9cbiAgbW9kdWxvKGRpdmlzb3IpIHtcbiAgICBpZiAoIUludGVnZXIuaXNJbnRlZ2VyKGRpdmlzb3IpKVxuICAgICAgZGl2aXNvciA9IEludGVnZXIuZnJvbVZhbHVlKGRpdmlzb3IpO1xuICAgIHJldHVybiB0aGlzLnN1YnRyYWN0KHRoaXMuZGl2KGRpdmlzb3IpLm11bHRpcGx5KGRpdmlzb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBiaXR3aXNlIE5PVCBvZiB0aGlzIEludGVnZXIuXG4gICAqIEByZXR1cm5zIHshSW50ZWdlcn1cbiAgICogQGV4cG9zZVxuICAgKi9cbiAgbm90KCkge1xuICAgIHJldHVybiBJbnRlZ2VyLmZyb21CaXRzKH50aGlzLmxvdywgfnRoaXMuaGlnaCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYml0d2lzZSBBTkQgb2YgdGhpcyBJbnRlZ2VyIGFuZCB0aGUgc3BlY2lmaWVkLlxuICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIEludGVnZXJcbiAgICogQHJldHVybnMgeyFJbnRlZ2VyfVxuICAgKiBAZXhwb3NlXG4gICAqL1xuICBhbmQob3RoZXIpIHtcbiAgICBpZiAoIUludGVnZXIuaXNJbnRlZ2VyKG90aGVyKSlcbiAgICAgIG90aGVyID0gSW50ZWdlci5mcm9tVmFsdWUob3RoZXIpO1xuICAgIHJldHVybiBJbnRlZ2VyLmZyb21CaXRzKHRoaXMubG93ICYgb3RoZXIubG93LCB0aGlzLmhpZ2ggJiBvdGhlci5oaWdoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBiaXR3aXNlIE9SIG9mIHRoaXMgSW50ZWdlciBhbmQgdGhlIHNwZWNpZmllZC5cbiAgICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciBJbnRlZ2VyXG4gICAqIEByZXR1cm5zIHshSW50ZWdlcn1cbiAgICogQGV4cG9zZVxuICAgKi9cbiAgb3Iob3RoZXIpIHtcbiAgICBpZiAoIUludGVnZXIuaXNJbnRlZ2VyKG90aGVyKSlcbiAgICAgIG90aGVyID0gSW50ZWdlci5mcm9tVmFsdWUob3RoZXIpO1xuICAgIHJldHVybiBJbnRlZ2VyLmZyb21CaXRzKHRoaXMubG93IHwgb3RoZXIubG93LCB0aGlzLmhpZ2ggfCBvdGhlci5oaWdoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBiaXR3aXNlIFhPUiBvZiB0aGlzIEludGVnZXIgYW5kIHRoZSBnaXZlbiBvbmUuXG4gICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgSW50ZWdlclxuICAgKiBAcmV0dXJucyB7IUludGVnZXJ9XG4gICAqIEBleHBvc2VcbiAgICovXG4gIHhvcihvdGhlcikge1xuICAgIGlmICghSW50ZWdlci5pc0ludGVnZXIob3RoZXIpKVxuICAgICAgb3RoZXIgPSBJbnRlZ2VyLmZyb21WYWx1ZShvdGhlcik7XG4gICAgcmV0dXJuIEludGVnZXIuZnJvbUJpdHModGhpcy5sb3cgXiBvdGhlci5sb3csIHRoaXMuaGlnaCBeIG90aGVyLmhpZ2gpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhpcyBJbnRlZ2VyIHdpdGggYml0cyBzaGlmdGVkIHRvIHRoZSBsZWZ0IGJ5IHRoZSBnaXZlbiBhbW91bnQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfCFJbnRlZ2VyfSBudW1CaXRzIE51bWJlciBvZiBiaXRzXG4gICAqIEByZXR1cm5zIHshSW50ZWdlcn0gU2hpZnRlZCBJbnRlZ2VyXG4gICAqIEBleHBvc2VcbiAgICovXG4gIHNoaWZ0TGVmdChudW1CaXRzKSB7XG4gICAgaWYgKEludGVnZXIuaXNJbnRlZ2VyKG51bUJpdHMpKVxuICAgICAgbnVtQml0cyA9IG51bUJpdHMudG9JbnQoKTtcbiAgICBpZiAoKG51bUJpdHMgJj0gNjMpID09PSAwKVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgZWxzZSBpZiAobnVtQml0cyA8IDMyKVxuICAgICAgcmV0dXJuIEludGVnZXIuZnJvbUJpdHModGhpcy5sb3cgPDwgbnVtQml0cywgKHRoaXMuaGlnaCA8PCBudW1CaXRzKSB8ICh0aGlzLmxvdyA+Pj4gKDMyIC0gbnVtQml0cykpKTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gSW50ZWdlci5mcm9tQml0cygwLCB0aGlzLmxvdyA8PCAobnVtQml0cyAtIDMyKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGlzIEludGVnZXIgd2l0aCBiaXRzIGFyaXRobWV0aWNhbGx5IHNoaWZ0ZWQgdG8gdGhlIHJpZ2h0IGJ5IHRoZSBnaXZlbiBhbW91bnQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfCFJbnRlZ2VyfSBudW1CaXRzIE51bWJlciBvZiBiaXRzXG4gICAqIEByZXR1cm5zIHshSW50ZWdlcn0gU2hpZnRlZCBJbnRlZ2VyXG4gICAqIEBleHBvc2VcbiAgICovXG4gIHNoaWZ0UmlnaHQobnVtQml0cykge1xuICAgIGlmIChJbnRlZ2VyLmlzSW50ZWdlcihudW1CaXRzKSlcbiAgICAgIG51bUJpdHMgPSBudW1CaXRzLnRvSW50KCk7XG4gICAgaWYgKChudW1CaXRzICY9IDYzKSA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIGVsc2UgaWYgKG51bUJpdHMgPCAzMilcbiAgICAgIHJldHVybiBJbnRlZ2VyLmZyb21CaXRzKCh0aGlzLmxvdyA+Pj4gbnVtQml0cykgfCAodGhpcy5oaWdoIDw8ICgzMiAtIG51bUJpdHMpKSwgdGhpcy5oaWdoID4+IG51bUJpdHMpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBJbnRlZ2VyLmZyb21CaXRzKHRoaXMuaGlnaCA+PiAobnVtQml0cyAtIDMyKSwgdGhpcy5oaWdoID49IDAgPyAwIDogLTEpO1xuICB9XG59XG5cbi8qKlxuICogQW4gaW5kaWNhdG9yIHVzZWQgdG8gcmVsaWFibHkgZGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIEludGVnZXIgb3Igbm90LlxuICogQHR5cGUge2Jvb2xlYW59XG4gKiBAY29uc3RcbiAqIEBleHBvc2VcbiAqIEBwcml2YXRlXG4gKi9cbkludGVnZXIuX19pc0ludGVnZXJfXztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEludGVnZXIucHJvdG90eXBlLCBcIl9faXNJbnRlZ2VyX19cIiwge1xuICAgIHZhbHVlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2Vcbn0pO1xuXG4vKipcbiAqIFRlc3RzIGlmIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGlzIGEgSW50ZWdlci5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBvYmogT2JqZWN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBleHBvc2VcbiAqL1xuSW50ZWdlci5pc0ludGVnZXIgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gKG9iaiAmJiBvYmpbXCJfX2lzSW50ZWdlcl9fXCJdKSA9PT0gdHJ1ZTtcbn07XG5cblxuXG4vKipcbiAqIEEgY2FjaGUgb2YgdGhlIEludGVnZXIgcmVwcmVzZW50YXRpb25zIG9mIHNtYWxsIGludGVnZXIgdmFsdWVzLlxuICogQHR5cGUgeyFPYmplY3R9XG4gKiBAaW5uZXJcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBJTlRfQ0FDSEUgPSB7fTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIGdpdmVuIDMyIGJpdCBpbnRlZ2VyIHZhbHVlLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVGhlIDMyIGJpdCBpbnRlZ2VyIGluIHF1ZXN0aW9uXG4gKiBAcmV0dXJucyB7IUludGVnZXJ9IFRoZSBjb3JyZXNwb25kaW5nIEludGVnZXIgdmFsdWVcbiAqIEBleHBvc2VcbiAqL1xuSW50ZWdlci5mcm9tSW50ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgb2JqLCBjYWNoZWRPYmo7XG4gICAgdmFsdWUgPSB2YWx1ZSB8IDA7XG4gICAgaWYgKC0xMjggPD0gdmFsdWUgJiYgdmFsdWUgPCAxMjgpIHtcbiAgICAgICAgY2FjaGVkT2JqID0gSU5UX0NBQ0hFW3ZhbHVlXTtcbiAgICAgICAgaWYgKGNhY2hlZE9iailcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRPYmo7XG4gICAgfVxuICAgIG9iaiA9IG5ldyBJbnRlZ2VyKHZhbHVlLCB2YWx1ZSA8IDAgPyAtMSA6IDAsIGZhbHNlKTtcbiAgICBpZiAoLTEyOCA8PSB2YWx1ZSAmJiB2YWx1ZSA8IDEyOClcbiAgICAgICAgSU5UX0NBQ0hFW3ZhbHVlXSA9IG9iajtcbiAgICByZXR1cm4gb2JqO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIGdpdmVuIHZhbHVlLCBwcm92aWRlZCB0aGF0IGl0IGlzIGEgZmluaXRlIG51bWJlci4gT3RoZXJ3aXNlLCB6ZXJvIGlzIHJldHVybmVkLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVGhlIG51bWJlciBpbiBxdWVzdGlvblxuICogQHJldHVybnMgeyFJbnRlZ2VyfSBUaGUgY29ycmVzcG9uZGluZyBJbnRlZ2VyIHZhbHVlXG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuZnJvbU51bWJlciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaWYgKGlzTmFOKHZhbHVlKSB8fCAhaXNGaW5pdGUodmFsdWUpKVxuICAgICAgICByZXR1cm4gSW50ZWdlci5aRVJPO1xuICAgIGlmICh2YWx1ZSA8PSAtVFdPX1BXUl82M19EQkwpXG4gICAgICAgIHJldHVybiBJbnRlZ2VyLk1JTl9WQUxVRTtcbiAgICBpZiAodmFsdWUgKyAxID49IFRXT19QV1JfNjNfREJMKVxuICAgICAgICByZXR1cm4gSW50ZWdlci5NQVhfVkFMVUU7XG4gICAgaWYgKHZhbHVlIDwgMClcbiAgICAgICAgcmV0dXJuIEludGVnZXIuZnJvbU51bWJlcigtdmFsdWUpLm5lZ2F0ZSgpO1xuICAgIHJldHVybiBuZXcgSW50ZWdlcigodmFsdWUgJSBUV09fUFdSXzMyX0RCTCkgfCAwLCAodmFsdWUgLyBUV09fUFdSXzMyX0RCTCkgfCAwICk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgNjQgYml0IGludGVnZXIgdGhhdCBjb21lcyBieSBjb25jYXRlbmF0aW5nIHRoZSBnaXZlbiBsb3cgYW5kIGhpZ2ggYml0cy4gRWFjaCBpc1xuICogIGFzc3VtZWQgdG8gdXNlIDMyIGJpdHMuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb3dCaXRzIFRoZSBsb3cgMzIgYml0c1xuICogQHBhcmFtIHtudW1iZXJ9IGhpZ2hCaXRzIFRoZSBoaWdoIDMyIGJpdHNcbiAqIEByZXR1cm5zIHshSW50ZWdlcn0gVGhlIGNvcnJlc3BvbmRpbmcgSW50ZWdlciB2YWx1ZVxuICogQGV4cG9zZVxuICovXG5JbnRlZ2VyLmZyb21CaXRzID0gZnVuY3Rpb24obG93Qml0cywgaGlnaEJpdHMpIHtcbiAgICByZXR1cm4gbmV3IEludGVnZXIobG93Qml0cywgaGlnaEJpdHMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgSW50ZWdlciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gc3RyaW5nLCB3cml0dGVuIHVzaW5nIHRoZSBzcGVjaWZpZWQgcmFkaXguXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgVGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIEludGVnZXJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gcmFkaXggVGhlIHJhZGl4IGluIHdoaWNoIHRoZSB0ZXh0IGlzIHdyaXR0ZW4gKDItMzYpLCBkZWZhdWx0cyB0byAxMFxuICogQHJldHVybnMgeyFJbnRlZ2VyfSBUaGUgY29ycmVzcG9uZGluZyBJbnRlZ2VyIHZhbHVlXG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuZnJvbVN0cmluZyA9IGZ1bmN0aW9uKHN0ciwgcmFkaXgpIHtcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMClcbiAgICAgICAgdGhyb3cgbmV3RXJyb3IoJ251bWJlciBmb3JtYXQgZXJyb3I6IGVtcHR5IHN0cmluZycpO1xuICAgIGlmIChzdHIgPT09IFwiTmFOXCIgfHwgc3RyID09PSBcIkluZmluaXR5XCIgfHwgc3RyID09PSBcIitJbmZpbml0eVwiIHx8IHN0ciA9PT0gXCItSW5maW5pdHlcIilcbiAgICAgICAgcmV0dXJuIEludGVnZXIuWkVSTztcbiAgICByYWRpeCA9IHJhZGl4IHx8IDEwO1xuICAgIGlmIChyYWRpeCA8IDIgfHwgMzYgPCByYWRpeClcbiAgICAgICAgdGhyb3cgbmV3RXJyb3IoJ3JhZGl4IG91dCBvZiByYW5nZTogJyArIHJhZGl4KTtcblxuICAgIHZhciBwO1xuICAgIGlmICgocCA9IHN0ci5pbmRleE9mKCctJykpID4gMClcbiAgICAgICAgdGhyb3cgbmV3RXJyb3IoJ251bWJlciBmb3JtYXQgZXJyb3I6IGludGVyaW9yIFwiLVwiIGNoYXJhY3RlcjogJyArIHN0cik7XG4gICAgZWxzZSBpZiAocCA9PT0gMClcbiAgICAgICAgcmV0dXJuIEludGVnZXIuZnJvbVN0cmluZyhzdHIuc3Vic3RyaW5nKDEpLCByYWRpeCkubmVnYXRlKCk7XG5cbiAgICAvLyBEbyBzZXZlcmFsICg4KSBkaWdpdHMgZWFjaCB0aW1lIHRocm91Z2ggdGhlIGxvb3AsIHNvIGFzIHRvXG4gICAgLy8gbWluaW1pemUgdGhlIGNhbGxzIHRvIHRoZSB2ZXJ5IGV4cGVuc2l2ZSBlbXVsYXRlZCBkaXYuXG4gICAgdmFyIHJhZGl4VG9Qb3dlciA9IEludGVnZXIuZnJvbU51bWJlcihNYXRoLnBvdyhyYWRpeCwgOCkpO1xuXG4gICAgdmFyIHJlc3VsdCA9IEludGVnZXIuWkVSTztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkgKz0gOCkge1xuICAgICAgICB2YXIgc2l6ZSA9IE1hdGgubWluKDgsIHN0ci5sZW5ndGggLSBpKTtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFyc2VJbnQoc3RyLnN1YnN0cmluZyhpLCBpICsgc2l6ZSksIHJhZGl4KTtcbiAgICAgICAgaWYgKHNpemUgPCA4KSB7XG4gICAgICAgICAgICB2YXIgcG93ZXIgPSBJbnRlZ2VyLmZyb21OdW1iZXIoTWF0aC5wb3cocmFkaXgsIHNpemUpKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5tdWx0aXBseShwb3dlcikuYWRkKEludGVnZXIuZnJvbU51bWJlcih2YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lm11bHRpcGx5KHJhZGl4VG9Qb3dlcik7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuYWRkKEludGVnZXIuZnJvbU51bWJlcih2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgdmFsdWUgdG8gYSBJbnRlZ2VyLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd8IXtsb3c6IG51bWJlciwgaGlnaDogbnVtYmVyfX0gdmFsIFZhbHVlXG4gKiBAcmV0dXJucyB7IUludGVnZXJ9XG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuZnJvbVZhbHVlID0gZnVuY3Rpb24odmFsKSB7XG4gICAgaWYgKHZhbCAvKiBpcyBjb21wYXRpYmxlICovIGluc3RhbmNlb2YgSW50ZWdlcilcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpXG4gICAgICAgIHJldHVybiBJbnRlZ2VyLmZyb21OdW1iZXIodmFsKTtcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpXG4gICAgICAgIHJldHVybiBJbnRlZ2VyLmZyb21TdHJpbmcodmFsKTtcbiAgICAvLyBUaHJvd3MgZm9yIG5vbi1vYmplY3RzLCBjb252ZXJ0cyBub24taW5zdGFuY2VvZiBJbnRlZ2VyOlxuICAgIHJldHVybiBuZXcgSW50ZWdlcih2YWwubG93LCB2YWwuaGlnaCk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgdmFsdWUgdG8gYSBudW1iZXIuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ3whe2xvdzogbnVtYmVyLCBoaWdoOiBudW1iZXJ9fSB2YWwgVmFsdWVcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIudG9OdW1iZXIgPSBmdW5jdGlvbih2YWwpIHtcbiByZXR1cm4gSW50ZWdlci5mcm9tVmFsdWUodmFsKS50b051bWJlcigpO1xufTtcblxuLyoqXG4qIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgdmFsdWUgdG8gYSBzdHJpbmcuXG4qIEBhY2Nlc3MgcHJpdmF0ZVxuKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd8IXtsb3c6IG51bWJlciwgaGlnaDogbnVtYmVyfX0gdmFsIFZhbHVlXG4qIEBwYXJhbSB7bnVtYmVyfSByYWRpeCBvcHRpb25hbCByYWRpeCBmb3Igc3RyaW5nIGNvbnZlcnNpb24sIGRlZmF1bHRzIHRvIDEwXG4qIEByZXR1cm5zIHtTdHJpbmd9XG4qIEBleHBvc2VcbiovXG5JbnRlZ2VyLnRvU3RyaW5nID0gZnVuY3Rpb24odmFsLCByYWRpeCkge1xuICByZXR1cm4gSW50ZWdlci5mcm9tVmFsdWUodmFsKS50b1N0cmluZyhyYWRpeClcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBpbiB0aGUgc2FmZSByYW5nZSBpbiBvcmRlciB0byBiZSBjb252ZXJ0ZWQgdG8gYSBuYXRpdmUgbnVtYmVyXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ3whe2xvdzogbnVtYmVyLCBoaWdoOiBudW1iZXJ9fSB2YWwgVmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWRpeCBvcHRpb25hbCByYWRpeCBmb3Igc3RyaW5nIGNvbnZlcnNpb24sIGRlZmF1bHRzIHRvIDEwXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBleHBvc2VcbiAqL1xuSW50ZWdlci5pblNhZmVSYW5nZSA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gSW50ZWdlci5mcm9tVmFsdWUodmFsKS5pblNhZmVSYW5nZSgpO1xufTtcblxuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGNvbnN0XG4gKiBAaW5uZXJcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBUV09fUFdSXzE2X0RCTCA9IDEgPDwgMTY7XG5cbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqIEBjb25zdFxuICogQGlubmVyXG4gKiBAcHJpdmF0ZVxuICovXG52YXIgVFdPX1BXUl8yNF9EQkwgPSAxIDw8IDI0O1xuXG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAY29uc3RcbiAqIEBpbm5lclxuICogQHByaXZhdGVcbiAqL1xudmFyIFRXT19QV1JfMzJfREJMID0gVFdPX1BXUl8xNl9EQkwgKiBUV09fUFdSXzE2X0RCTDtcblxuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGNvbnN0XG4gKiBAaW5uZXJcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBUV09fUFdSXzY0X0RCTCA9IFRXT19QV1JfMzJfREJMICogVFdPX1BXUl8zMl9EQkw7XG5cbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqIEBjb25zdFxuICogQGlubmVyXG4gKiBAcHJpdmF0ZVxuICovXG52YXIgVFdPX1BXUl82M19EQkwgPSBUV09fUFdSXzY0X0RCTCAvIDI7XG5cbi8qKlxuICogQHR5cGUgeyFJbnRlZ2VyfVxuICogQGNvbnN0XG4gKiBAaW5uZXJcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBUV09fUFdSXzI0ID0gSW50ZWdlci5mcm9tSW50KFRXT19QV1JfMjRfREJMKTtcblxuLyoqXG4gKiBTaWduZWQgemVyby5cbiAqIEB0eXBlIHshSW50ZWdlcn1cbiAqIEBleHBvc2VcbiAqL1xuSW50ZWdlci5aRVJPID0gSW50ZWdlci5mcm9tSW50KDApO1xuXG4vKipcbiAqIFNpZ25lZCBvbmUuXG4gKiBAdHlwZSB7IUludGVnZXJ9XG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuT05FID0gSW50ZWdlci5mcm9tSW50KDEpO1xuXG4vKipcbiAqIFNpZ25lZCBuZWdhdGl2ZSBvbmUuXG4gKiBAdHlwZSB7IUludGVnZXJ9XG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuTkVHX09ORSA9IEludGVnZXIuZnJvbUludCgtMSk7XG5cbi8qKlxuICogTWF4aW11bSBzaWduZWQgdmFsdWUuXG4gKiBAdHlwZSB7IUludGVnZXJ9XG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuTUFYX1ZBTFVFID0gSW50ZWdlci5mcm9tQml0cygweEZGRkZGRkZGfDAsIDB4N0ZGRkZGRkZ8MCwgZmFsc2UpO1xuXG4vKipcbiAqIE1pbmltdW0gc2lnbmVkIHZhbHVlLlxuICogQHR5cGUgeyFJbnRlZ2VyfVxuICogQGV4cG9zZVxuICovXG5JbnRlZ2VyLk1JTl9WQUxVRSA9IEludGVnZXIuZnJvbUJpdHMoMCwgMHg4MDAwMDAwMHwwLCBmYWxzZSk7XG5cbi8qKlxuICogTWluaW11bSBzYWZlIHZhbHVlLlxuICogQHR5cGUgeyFJbnRlZ2VyfVxuICogQGV4cG9zZVxuICovXG5JbnRlZ2VyLk1JTl9TQUZFX1ZBTFVFID0gSW50ZWdlci5mcm9tQml0cygweDF8MCwgMHhGRkZGRkZGRkZGRTAwMDAwfDApO1xuXG4vKipcbiogTWF4aW11bSBzYWZlIHZhbHVlLlxuKiBAdHlwZSB7IUludGVnZXJ9XG4qIEBleHBvc2VcbiovXG5JbnRlZ2VyLk1BWF9TQUZFX1ZBTFVFID0gSW50ZWdlci5mcm9tQml0cygweEZGRkZGRkZGfDAsMHgxRkZGRkZ8MCk7XG5cbi8qKlxuICogQ2FzdCB2YWx1ZSB0byBJbnRlZ2VyIHR5cGUuXG4gKiBAYWNjZXNzIHB1YmxpY1xuICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gdXNlLlxuICogQHJldHVybiB7SW50ZWdlcn0gLSBBbiBvYmplY3Qgb2YgdHlwZSBJbnRlZ2VyLlxuICovXG5sZXQgaW50ID0gSW50ZWdlci5mcm9tVmFsdWU7XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB2YXJpYWJsZSBpcyBvZiBJbnRlZ2VyIHR5cGUuXG4gKiBAYWNjZXNzIHB1YmxpY1xuICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgLSBUaGUgdmFyaWFibGUgdG8gY2hlY2suXG4gKiBAcmV0dXJuIHtCb29sZWFufSAtIElzIGl0IG9mIHRoZSBJbnRlZ2VyIHR5cGU/XG4gKi9cbmxldCBpc0ludCA9IEludGVnZXIuaXNJbnRlZ2VyO1xuXG4vKipcbiAqIENoZWNrIGlmIGEgdmFyaWFibGUgY2FuIGJlIHNhZmVseSBjb252ZXJ0ZWQgdG8gYSBudW1iZXJcbiAqIEBhY2Nlc3MgcHVibGljXG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZSAtIFRoZSB2YXJpYWJsZSB0byBjaGVja1xuICogQHJldHVybiB7Qm9vbGVhbn0gLSB0cnVlIGlmIGl0IGlzIHNhZmUgdG8gY2FsbCB0b051bWJlciBvbiB2YXJpYWJsZSBvdGhlcndpc2UgZmFsc2VcbiAqL1xubGV0IGluU2FmZVJhbmdlID0gSW50ZWdlci5pblNhZmVSYW5nZTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHZhcmlhYmxlIHRvIGEgbnVtYmVyXG4gKiBAYWNjZXNzIHB1YmxpY1xuICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgLSBUaGUgdmFyaWFibGUgdG8gY29udmVydFxuICogQHJldHVybiB7bnVtYmVyfSAtIHRoZSB2YXJpYWJsZSBhcyBhIG51bWJlclxuICovXG5sZXQgdG9OdW1iZXIgPSBJbnRlZ2VyLnRvTnVtYmVyO1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBpbnRlZ2VyIHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gKiBAYWNjZXNzIHB1YmxpY1xuICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgLSBUaGUgdmFyaWFibGUgdG8gY29udmVydFxuICogQHBhcmFtIHtudW1iZXJ9IHJhZGl4IC0gcmFkaXggdG8gdXNlIGluIHN0cmluZyBjb252ZXJzaW9uLCBkZWZhdWx0cyB0byAxMFxuICogQHJldHVybiB7U3RyaW5nfSAtIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVnZXJcbiAqL1xubGV0IHRvU3RyaW5nID0gSW50ZWdlci50b1N0cmluZztcblxuZXhwb3J0IHtcbiAgICBpbnQsXG4gICAgaXNJbnQsXG4gICAgaW5TYWZlUmFuZ2UsXG4gICAgdG9OdW1iZXIsXG4gICAgdG9TdHJpbmdcbn1cblxuZXhwb3J0IGRlZmF1bHQgSW50ZWdlclxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4gXG4vKiogVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGNvbW1vbiBBUEkgZm9yIGRlYWxpbmcgd2l0aCBiaW5hcnkgZGF0YSB0aGF0XG4gICogd29ya3MgZm9yIGJvdGggYnJvd3NlcnMgKHZpYSBBcnJheUJ1ZmZlci9EYXRhVmlldykgYW5kIGZvciBOb2RlSlNcbiAgKih2aWEgQnVmZmVyIEFQSSkuXG4gICovXG5cbmxldCBfbm9kZSA9IHJlcXVpcmUoXCJidWZmZXJcIik7XG4vKipcbiAgKiBDb21tb24gYmFzZSB3aXRoIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIG1vc3QgYnVmZmVyIG1ldGhvZHMuXG4gICogQnVmZmVycyBhcmUgc3RhdGVmdWwgLSB0aGV5IHRyYWNrIGEgY3VycmVudCBcInBvc2l0aW9uXCIsIHRoaXMgaGVscHMgZ3JlYXRseVxuICAqIHdoZW4gcmVhZGluZyBhbmQgd3JpdGluZyBmcm9tIHRoZW0gaW5jcmVtZW50YWxseS4gWW91IGNhbiBhbHNvIGlnbm9yZSB0aGVcbiAgKiBzdGF0ZWZ1bCByZWFkL3dyaXRlIG1ldGhvZHMuXG4gICogcmVhZFhYWCBhbmQgd3JpdGVYWFgtbWV0aG9kcyBtb3ZlIHRoZSBpbm5lciBwb3NpdGlvbiBvZiB0aGUgYnVmZmVyLlxuICAqIHB1dFhYWCBhbmQgZ2V0WFhYLW1ldGhvZHMgZG8gbm90LlxuICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAqL1xuY2xhc3MgQmFzZUJ1ZmZlclxue1xuICAvKipcbiAgICogQ3JlYXRlIGEgaW5zdGFuY2Ugd2l0aCB0aGUgaW5qZWN0ZWQgc2l6ZS5cbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gc2l6ZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKHNpemUpIHtcbiAgICB0aGlzLnBvc2l0aW9uID0gMDtcbiAgICB0aGlzLmxlbmd0aCA9IHNpemU7XG4gICAgLy8gQ2FsbGluZyB0aGVzZSBvdXQgLSB0aGlzIGlzIHRoZSByZXF1aXJlZCBcbiAgICAvLyBtZXRob2RzIGEgc3ViY2xhc3MgbmVlZHMgdG8gaW1wbGVtZW50XG4gICAgbGV0IGdldFVJbnQ4ID0gbnVsbDtcbiAgICBsZXQgZ2V0SW50OCA9IG51bGw7XG4gICAgbGV0IGdldEZsb2F0NjQgPSBudWxsO1xuICAgIGxldCBnZXRTbGljZSA9IG51bGw7XG4gICAgbGV0IHB1dEZsb2F0NjQgPSBudWxsO1xuICAgIGxldCBwdXRVSW50OCA9IG51bGw7XG4gICAgbGV0IHB1dEludDggPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwXG4gICAqL1xuICBnZXRJbnQxNiAocCkge1xuICAgIHJldHVybiB0aGlzLmdldEludDgocCkgICAgICA8PCA4XG4gICAgICAgICB8IHRoaXMuZ2V0VUludDgocCArIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwXG4gICAqL1xuICBnZXRVSW50MTYgKHApIHtcbiAgICByZXR1cm4gdGhpcy5nZXRVSW50OChwKSAgICAgPDwgOFxuICAgICAgICAgfCB0aGlzLmdldFVJbnQ4KHAgKyAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gcFxuICAgKi9cbiAgZ2V0SW50MzIgKHApIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJbnQ4KHApICAgICA8PCAyNFxuICAgICAgICAgfCB0aGlzLmdldFVJbnQ4KHAgKyAxKSA8PCAxNlxuICAgICAgICAgfCB0aGlzLmdldFVJbnQ4KHAgKyAyKSA8PCA4XG4gICAgICAgICB8IHRoaXMuZ2V0VUludDgocCArIDMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwXG4gICAqL1xuICBnZXRVSW50MzIgKHApIHtcbiAgICByZXR1cm4gdGhpcy5nZXRVSW50OChwKSAgICAgPDwgMjRcbiAgICAgICAgIHwgdGhpcy5nZXRVSW50OChwICsgMSkgPDwgMTZcbiAgICAgICAgIHwgdGhpcy5nZXRVSW50OChwICsgMikgPDwgOFxuICAgICAgICAgfCB0aGlzLmdldFVJbnQ4KHAgKyAzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gcFxuICAgKi9cbiAgZ2V0SW50NjQgKHApIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJbnQ4KHApICAgICAgPDwgNTZcbiAgICAgICAgIHwgdGhpcy5nZXRVSW50OChwICsgMSkgPDwgNDhcbiAgICAgICAgIHwgdGhpcy5nZXRVSW50OChwICsgMikgPDwgNDBcbiAgICAgICAgIHwgdGhpcy5nZXRVSW50OChwICsgMykgPDwgMzJcbiAgICAgICAgIHwgdGhpcy5nZXRVSW50OChwICsgNCkgPDwgMjRcbiAgICAgICAgIHwgdGhpcy5nZXRVSW50OChwICsgNSkgPDwgMTZcbiAgICAgICAgIHwgdGhpcy5nZXRVSW50OChwICsgNikgPDwgOFxuICAgICAgICAgfCB0aGlzLmdldFVJbnQ4KHAgKyA3KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBzbGljZSBvZiB0aGlzIGJ1ZmZlci4gVGhpcyBtZXRob2QgZG9lcyBub3QgY29weSBhbnkgZGF0YSxcbiAgICogYnV0IHNpbXBseSBwcm92aWRlcyBhIHNsaWNlIHZpZXcgb2YgdGhpcyBidWZmZXJcbiAgICogQHBhcmFtIHN0YXJ0XG4gICAqIEBwYXJhbSBsZW5ndGhcbiAgICovXG4gIGdldFNsaWNlICggc3RhcnQsIGxlbmd0aCApIHtcbiAgICByZXR1cm4gbmV3IFNsaWNlQnVmZmVyKCBzdGFydCwgbGVuZ3RoLCB0aGlzICk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHBcbiAgICogQHBhcmFtIHZhbFxuICAgKi9cbiAgcHV0SW50MTYgKCBwLCB2YWwgKSB7XG4gICAgdGhpcy5wdXRJbnQ4KCAgcCwgICAgIHZhbCA+PiA4ICk7XG4gICAgdGhpcy5wdXRVSW50OCggcCArIDEsIHZhbCAgICAgICYgMHhGRiApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwXG4gICAqIEBwYXJhbSB2YWxcbiAgICovXG4gIHB1dFVJbnQxNiAoIHAsIHZhbCApIHtcbiAgICB0aGlzLnB1dFVJbnQ4KCBwLCAgICAgdmFsID4+IDggJiAweEZGICk7XG4gICAgdGhpcy5wdXRVSW50OCggcCArIDEsIHZhbCAgICAgICYgMHhGRiApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwXG4gICAqIEBwYXJhbSB2YWxcbiAgICovXG4gIHB1dEludDMyICggcCwgdmFsICkge1xuICAgIHRoaXMucHV0SW50OCggIHAsICAgICB2YWwgPj4gMjQgKTtcbiAgICB0aGlzLnB1dFVJbnQ4KCBwICsgMSwgdmFsID4+IDE2ICYgMHhGRiApO1xuICAgIHRoaXMucHV0VUludDgoIHAgKyAyLCB2YWwgPj4gOCAgJiAweEZGICk7XG4gICAgdGhpcy5wdXRVSW50OCggcCArIDMsIHZhbCAgICAgICAmIDB4RkYgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gcFxuICAgKiBAcGFyYW0gdmFsXG4gICAqL1xuICBwdXRVSW50MzIgKCBwLCB2YWwgKSB7XG4gICAgdGhpcy5wdXRVSW50OCggcCwgICAgIHZhbCA+PiAyNCAmIDB4RkYgKTtcbiAgICB0aGlzLnB1dFVJbnQ4KCBwICsgMSwgdmFsID4+IDE2ICYgMHhGRiApO1xuICAgIHRoaXMucHV0VUludDgoIHAgKyAyLCB2YWwgPj4gOCAgJiAweEZGICk7XG4gICAgdGhpcy5wdXRVSW50OCggcCArIDMsIHZhbCAgICAgICAmIDB4RkYgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gcFxuICAgKiBAcGFyYW0gdmFsXG4gICAqL1xuICBwdXRJbnQ2NCAoIHAsIHZhbCApIHtcbiAgICB0aGlzLnB1dEludDgoICBwLCB2YWwgPj4gNDggKTtcbiAgICB0aGlzLnB1dFVJbnQ4KCBwICsgMSwgdmFsID4+IDQyICYgMHhGRiApO1xuICAgIHRoaXMucHV0VUludDgoIHAgKyAyLCB2YWwgPj4gMzYgJiAweEZGICk7XG4gICAgdGhpcy5wdXRVSW50OCggcCArIDMsIHZhbCA+PiAzMCAmIDB4RkYgKTtcbiAgICB0aGlzLnB1dFVJbnQ4KCBwICsgNCwgdmFsID4+IDI0ICYgMHhGRiApO1xuICAgIHRoaXMucHV0VUludDgoIHAgKyA1LCB2YWwgPj4gMTYgJiAweEZGICk7XG4gICAgdGhpcy5wdXRVSW50OCggcCArIDYsIHZhbCA+PiA4ICAmIDB4RkYgKTtcbiAgICB0aGlzLnB1dFVJbnQ4KCBwICsgNywgdmFsICAgICAgICYgMHhGRiApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwb3NpdGlvblxuICAgKiBAcGFyYW0gb3RoZXJcbiAgICovXG4gIHB1dEJ5dGVzICggcG9zaXRpb24sIG90aGVyICkge1xuICAgIGZvciAobGV0IGkgPSAwLCBlbmQ9b3RoZXIucmVtYWluaW5nKCk7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgdGhpcy5wdXRVSW50OCggcG9zaXRpb24gKyBpLCBvdGhlci5yZWFkVUludDgoKSApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkIGZyb20gc3RhdGUgcG9zaXRpb24uXG4gICAqL1xuICByZWFkVUludDggKCkge1xuICAgIHJldHVybiB0aGlzLmdldFVJbnQ4KCB0aGlzLl91cGRhdGVQb3MoMSkgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkIGZyb20gc3RhdGUgcG9zaXRpb24uXG4gICAqL1xuICByZWFkSW50OCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW50OCggdGhpcy5fdXBkYXRlUG9zKDEpICk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZCBmcm9tIHN0YXRlIHBvc2l0aW9uLlxuICAgKi9cbiAgcmVhZFVJbnQxNiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VUludDE2KCB0aGlzLl91cGRhdGVQb3MoMikgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkIGZyb20gc3RhdGUgcG9zaXRpb24uXG4gICAqL1xuICByZWFkVUludDMyICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRVSW50MzIoIHRoaXMuX3VwZGF0ZVBvcyg0KSApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgZnJvbSBzdGF0ZSBwb3NpdGlvbi5cbiAgICovXG4gIHJlYWRJbnQxNiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW50MTYoIHRoaXMuX3VwZGF0ZVBvcygyKSApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgZnJvbSBzdGF0ZSBwb3NpdGlvbi5cbiAgICovXG4gIHJlYWRJbnQzMiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW50MzIoIHRoaXMuX3VwZGF0ZVBvcyg0KSApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgZnJvbSBzdGF0ZSBwb3NpdGlvbi5cbiAgICovXG4gIHJlYWRJbnQ2NCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW50MzIoIHRoaXMuX3VwZGF0ZVBvcyg4KSApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgZnJvbSBzdGF0ZSBwb3NpdGlvbi5cbiAgICovXG4gIHJlYWRGbG9hdDY0ICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGbG9hdDY0KCB0aGlzLl91cGRhdGVQb3MoOCkgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSB0byBzdGF0ZSBwb3NpdGlvbi5cbiAgICogQHBhcmFtIHZhbFxuICAgKi9cbiAgd3JpdGVVSW50OCAoIHZhbCApIHtcbiAgICB0aGlzLnB1dFVJbnQ4KCB0aGlzLl91cGRhdGVQb3MoMSksIHZhbCk7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgdG8gc3RhdGUgcG9zaXRpb24uXG4gICAqIEBwYXJhbSB2YWxcbiAgICovXG4gIHdyaXRlSW50OCAoIHZhbCApIHtcbiAgICB0aGlzLnB1dEludDgoIHRoaXMuX3VwZGF0ZVBvcygxKSwgdmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSB0byBzdGF0ZSBwb3NpdGlvbi5cbiAgICogQHBhcmFtIHZhbFxuICAgKi9cbiAgd3JpdGVJbnQxNiAoIHZhbCApIHtcbiAgICB0aGlzLnB1dEludDE2KCB0aGlzLl91cGRhdGVQb3MoMiksIHZhbCk7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgdG8gc3RhdGUgcG9zaXRpb24uXG4gICAqIEBwYXJhbSB2YWxcbiAgICovXG4gIHdyaXRlSW50MzIgKCB2YWwgKSB7XG4gICAgdGhpcy5wdXRJbnQzMiggdGhpcy5fdXBkYXRlUG9zKDQpLCB2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRvIHN0YXRlIHBvc2l0aW9uLlxuICAgKiBAcGFyYW0gdmFsXG4gICAqL1xuICB3cml0ZVVJbnQzMiAoIHZhbCApIHtcbiAgICB0aGlzLnB1dFVJbnQzMiggdGhpcy5fdXBkYXRlUG9zKDQpLCB2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRvIHN0YXRlIHBvc2l0aW9uLlxuICAgKiBAcGFyYW0gdmFsXG4gICAqL1xuICB3cml0ZUludDY0ICggdmFsICkge1xuICAgIHRoaXMucHV0SW50NjQoIHRoaXMuX3VwZGF0ZVBvcyg4KSwgdmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSB0byBzdGF0ZSBwb3NpdGlvbi5cbiAgICogQHBhcmFtIHZhbFxuICAgKi9cbiAgd3JpdGVGbG9hdDY0ICggdmFsICkge1xuICAgIHRoaXMucHV0RmxvYXQ2NCggdGhpcy5fdXBkYXRlUG9zKDgpLCB2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRvIHN0YXRlIHBvc2l0aW9uLlxuICAgKiBAcGFyYW0gdmFsXG4gICAqL1xuICB3cml0ZUJ5dGVzICggdmFsICkge1xuICAgIHRoaXMucHV0Qnl0ZXMoIHRoaXMuX3VwZGF0ZVBvcyh2YWwucmVtYWluaW5nKCkpLCB2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHNsaWNlIG9mIHRoaXMgYnVmZmVyLiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBjb3B5IGFueSBkYXRhLFxuICAgKiBidXQgc2ltcGx5IHByb3ZpZGVzIGEgc2xpY2UgdmlldyBvZiB0aGlzIGJ1ZmZlclxuICAgKiBAcGFyYW0gbGVuZ3RoXG4gICAqL1xuICByZWFkU2xpY2UgKCBsZW5ndGggKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2xpY2UoIHRoaXMuX3VwZGF0ZVBvcyggbGVuZ3RoICksIGxlbmd0aCApO1xuICB9XG5cbiAgX3VwZGF0ZVBvcyAoIGxlbmd0aCApIHtcbiAgICBsZXQgcCA9IHRoaXMucG9zaXRpb247XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJlbWFuaW5nXG4gICAqL1xuICByZW1haW5pbmcgKCkge1xuICAgIHJldHVybiB0aGlzLmxlbmd0aCAtIHRoaXMucG9zaXRpb247XG4gIH1cblxuICAvKipcbiAgICogSGFzIHJlbWFuaW5nXG4gICAqL1xuICBoYXNSZW1haW5pbmcgKCkge1xuICAgIHJldHVybiB0aGlzLnJlbWFpbmluZygpID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBwb3NpdGlvbiBzdGF0ZVxuICAgKi9cbiAgcmVzZXQgKCkge1xuICAgIHRoaXMucG9zaXRpb24gPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYnVmZmVyIGFuZCBpdCdzIHN0YXRlLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IEJ1ZmZlciBhcyBhIHN0cmluZ1xuICAgKi9cbiAgdG9TdHJpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyBcIiggcG9zaXRpb249XCIrdGhpcy5wb3NpdGlvbitcIiApXFxuICBcIiArIHRoaXMudG9IZXgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGJ1ZmZlci5cbiAgICogQHJldHVybiB7c3RyaW5nfSBCdWZmZXIgYXMgYSBzdHJpbmdcbiAgICovXG4gIHRvSGV4ICgpIHtcbiAgICAvLyBUT0RPIHNvbWV0aGluZyBsaWtlIFN0cmluZ0J1aWxkZXI/XG4gICAgbGV0IG91dCA9IFwiXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgaGV4Qnl0ZSA9IHRoaXMuZ2V0VUludDgoaSkudG9TdHJpbmcoMTYpO1xuICAgICAgaWYoIGhleEJ5dGUubGVuZ3RoID09IDEgKSB7XG4gICAgICAgIGhleEJ5dGUgPSBcIjBcIiArIGhleEJ5dGU7XG4gICAgICB9XG4gICAgICBvdXQgKz0gaGV4Qnl0ZSArIFwiIFwiXG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cbn1cblxuLyoqXG4gKiBCYXNpYyBidWZmZXIgaW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgd29yayBpbiBtb3N0IGFueSBtb2Rlcm4gSlMgZW52LlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cbmNsYXNzIEhlYXBCdWZmZXIgZXh0ZW5kcyBCYXNlQnVmZmVyIHtcbiAgY29uc3RydWN0b3IgKGFyZykge1xuICAgIGxldCBidWZmZXIgPSBhcmcgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IGFyZyA6IG5ldyBBcnJheUJ1ZmZlcihhcmcpXG4gICAgc3VwZXIoYnVmZmVyLmJ5dGVMZW5ndGggKTtcbiAgICB0aGlzLl9idWZmZXIgPSBidWZmZXI7XG4gICAgdGhpcy5fdmlldyA9IG5ldyBEYXRhVmlldyggdGhpcy5fYnVmZmVyICk7XG4gIH1cblxuICBwdXRVSW50OCAoIHBvc2l0aW9uLCB2YWwgKSB7XG4gICAgdGhpcy5fdmlldy5zZXRVaW50OChwb3NpdGlvbiwgdmFsKTtcbiAgfVxuXG4gIGdldFVJbnQ4ICggcG9zaXRpb24gKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXcuZ2V0VWludDgocG9zaXRpb24pO1xuICB9XG5cbiAgcHV0SW50OCAoIHBvc2l0aW9uLCB2YWwgKSB7XG4gICAgdGhpcy5fdmlldy5zZXRJbnQ4KHBvc2l0aW9uLCB2YWwpO1xuICB9XG5cbiAgZ2V0SW50OCAoIHBvc2l0aW9uICkge1xuICAgIHJldHVybiB0aGlzLl92aWV3LmdldEludDgocG9zaXRpb24pO1xuICB9XG5cbiAgZ2V0RmxvYXQ2NCAoIHBvc2l0aW9uICkge1xuICAgIHJldHVybiB0aGlzLl92aWV3LmdldEZsb2F0NjQocG9zaXRpb24pO1xuICB9XG5cbiAgcHV0RmxvYXQ2NCAoIHBvc2l0aW9uLCB2YWwgKSB7XG4gICAgdGhpcy5fdmlldy5zZXRGbG9hdDY0KCBwb3NpdGlvbiwgdmFsICk7XG4gIH1cblxuICBnZXRTbGljZSAoIHN0YXJ0LCBsZW5ndGggKSB7XG4gICAgaWYoIHRoaXMuX2J1ZmZlci5zbGljZSApIHtcbiAgICAgIHJldHVybiBuZXcgSGVhcEJ1ZmZlciggdGhpcy5fYnVmZmVyLnNsaWNlKCBzdGFydCwgc3RhcnQgKyBsZW5ndGggKSApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lIHBsYXRmb3JtcyAoZWcuIHBoYW50b21qcykgZG9uJ3Qgc3VwcG9ydCBzbGljZSwgc28gZmFsbCBiYWNrIHRvIGEgY29weVxuICAgICAgLy8gV2UgZG8gdGhpcyByYXRoZXIgdGhhbiByZXR1cm4gYSBTbGljZUJ1ZmZlciwgYmVjYXVzZSBzbGljZUJ1ZmZlciBjYW5ub3RcbiAgICAgIC8vIGJlIHBhc3NlZCB0byBuYXRpdmUgbmV0d29yayB3cml0ZSBvcHMgZXRjIC0gd2UgbmVlZCBBcnJheUJ1ZmZlciBmb3IgdGhhdFxuICAgICAgbGV0IGNvcHkgPSBuZXcgSGVhcEJ1ZmZlcihsZW5ndGgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBjb3B5LnB1dFVJbnQ4KCBpLCB0aGlzLmdldFVJbnQ4KCBpICsgc3RhcnQgKSApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFxuICAgKiBTcGVjaWZpYyB0byBIZWFwQnVmZmVyLCB0aGlzIGdldHMgYSBEYXRhVmlldyBmcm9tIHRoZVxuICAgKiBjdXJyZW50IHBvc2l0aW9uIGFuZCBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aC4gXG4gICAqL1xuICByZWFkVmlldyAoIGxlbmd0aCApIHtcbiAgICByZXR1cm4gbmV3IERhdGFWaWV3KCB0aGlzLl9idWZmZXIsIHRoaXMuX3VwZGF0ZVBvcyhsZW5ndGgpLCBsZW5ndGggKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB2aWV3IGFzIHNsaWNlIG9mIGFub3RoZXIgYnVmZmVyLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cbmNsYXNzIFNsaWNlQnVmZmVyIGV4dGVuZHMgQmFzZUJ1ZmZlciB7XG4gIGNvbnN0cnVjdG9yKCBzdGFydCwgbGVuZ3RoLCBpbm5lciApIHtcbiAgICBzdXBlcihsZW5ndGgpO1xuICAgIHRoaXMuX3N0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5faW5uZXIgPSBpbm5lcjtcbiAgfVxuXG4gIHB1dFVJbnQ4ICggcG9zaXRpb24sIHZhbCApIHtcbiAgICB0aGlzLl9pbm5lci5wdXRVSW50OCggdGhpcy5fc3RhcnQgKyBwb3NpdGlvbiwgdmFsICk7XG4gIH1cblxuICBnZXRVSW50OCAoIHBvc2l0aW9uICkge1xuICAgIHJldHVybiB0aGlzLl9pbm5lci5nZXRVSW50OCggdGhpcy5fc3RhcnQgKyBwb3NpdGlvbiApO1xuICB9XG5cbiAgcHV0SW50OCAoIHBvc2l0aW9uLCB2YWwgKSB7XG4gICAgdGhpcy5faW5uZXIucHV0SW50OCggdGhpcy5fc3RhcnQgKyBwb3NpdGlvbiwgdmFsICk7XG4gIH1cblxuICBwdXRGbG9hdDY0ICggcG9zaXRpb24sIHZhbCApIHtcbiAgICB0aGlzLl9pbm5lci5wdXRGbG9hdDY0KCB0aGlzLl9zdGFydCArIHBvc2l0aW9uLCB2YWwgKTtcbiAgfVxuXG4gIGdldEludDggKCBwb3NpdGlvbiApIHtcbiAgICByZXR1cm4gdGhpcy5faW5uZXIuZ2V0SW50OCggdGhpcy5fc3RhcnQgKyBwb3NpdGlvbiApO1xuICB9XG5cbiAgZ2V0RmxvYXQ2NCAocG9zaXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5faW5uZXIuZ2V0RmxvYXQ2NCggdGhpcy5fc3RhcnQgKyBwb3NpdGlvbiApO1xuICB9XG59XG5cbi8qKlxuICogQnVmZmVyIHRoYXQgY29tYmluZXMgbXVsdGlwbGUgYnVmZmVycywgZXhwb3NpbmcgdGhlbSBhcyBvbmUgc2luZ2xlIGJ1ZmZlci5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovXG5jbGFzcyBDb21iaW5lZEJ1ZmZlciBleHRlbmRzIEJhc2VCdWZmZXIge1xuICBjb25zdHJ1Y3RvciAoYnVmZmVycykge1xuICAgIGxldCBsZW5ndGggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmZmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgbGVuZ3RoICs9IGJ1ZmZlcnNbaV0ubGVuZ3RoO1xuICAgIH1cbiAgICBzdXBlciggbGVuZ3RoICk7XG4gICAgdGhpcy5fYnVmZmVycyA9IGJ1ZmZlcnM7XG4gIH1cblxuICBnZXRVSW50OCAoIHBvc2l0aW9uICkge1xuICAgIC8vIFN1cmVseSB0aGVyZSdzIGEgZmFzdGVyIHdheSB0byBkbyB0aGlzLi4gc29tZSBzb3J0IG9mIGxvb2t1cCB0YWJsZSB0aGluZz9cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBidWZmZXIgPSB0aGlzLl9idWZmZXJzW2ldO1xuICAgICAgLy8gSWYgdGhlIHBvc2l0aW9uIGlzIG5vdCBpbiB0aGUgY3VycmVudCBidWZmZXIsIHNraXAgdGhlIGN1cnJlbnQgYnVmZmVyXG4gICAgICBpZiggcG9zaXRpb24gPj0gYnVmZmVyLmxlbmd0aCApIHtcbiAgICAgICAgcG9zaXRpb24gLT0gYnVmZmVyLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBidWZmZXIuZ2V0VUludDgocG9zaXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEludDggKCBwb3NpdGlvbiApIHtcbiAgICAvLyBTdXJlbHkgdGhlcmUncyBhIGZhc3RlciB3YXkgdG8gZG8gdGhpcy4uIHNvbWUgc29ydCBvZiBsb29rdXAgdGFibGUgdGhpbmc/XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgYnVmZmVyID0gdGhpcy5fYnVmZmVyc1tpXTtcbiAgICAgIC8vIElmIHRoZSBwb3NpdGlvbiBpcyBub3QgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLCBza2lwIHRoZSBjdXJyZW50IGJ1ZmZlclxuICAgICAgaWYoIHBvc2l0aW9uID49IGJ1ZmZlci5sZW5ndGggKSB7XG4gICAgICAgIHBvc2l0aW9uIC09IGJ1ZmZlci5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYnVmZmVyLmdldEludDgocG9zaXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEZsb2F0NjQgKCBwb3NpdGlvbiApIHtcbiAgICAvLyBBdCBzb21lIHBvaW50LCBhIG1vcmUgZWZmaWNpZW50IGltcGwuIEZvciBub3csIHdlIGNvcHkgdGhlIDggYnl0ZXNcbiAgICAvLyB3ZSB3YW50IHRvIHJlYWQgYW5kIGRlcGVuZCBvbiB0aGUgcGxhdGZvcm0gaW1wbCBvZiBJRUVFIDc1NC5cbiAgICBsZXQgYiA9IGFsbG9jKDgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7IGIucHV0VUludDgoaSwgdGhpcy5nZXRVSW50OCggcG9zaXRpb24gKyBpICkpOyB9O1xuICAgIHJldHVybiBiLmdldEZsb2F0NjQoMCk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWZmZXIgdXNlZCBpbiBhIE5vZGUuanMgZW52aXJvbm1lbnRcbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovXG5jbGFzcyBOb2RlQnVmZmVyIGV4dGVuZHMgQmFzZUJ1ZmZlciB7XG4gIGNvbnN0cnVjdG9yKGFyZykge1xuICAgIGxldCBidWZmZXIgPSBhcmcgaW5zdGFuY2VvZiBfbm9kZS5CdWZmZXIgPyBhcmcgOiBuZXcgX25vZGUuQnVmZmVyKGFyZyk7XG4gICAgc3VwZXIoYnVmZmVyLmxlbmd0aCk7XG4gICAgdGhpcy5fYnVmZmVyID0gYnVmZmVyO1xuICB9XG5cbiAgZ2V0VUludDggKHBvc2l0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5yZWFkVUludDgoIHBvc2l0aW9uICk7XG4gIH1cblxuICBnZXRJbnQ4IChwb3NpdGlvbikge1xuICAgIHJldHVybiB0aGlzLl9idWZmZXIucmVhZEludDgoIHBvc2l0aW9uICk7XG4gIH1cblxuICBnZXRGbG9hdDY0IChwb3NpdGlvbikge1xuICAgIHJldHVybiB0aGlzLl9idWZmZXIucmVhZERvdWJsZUJFKHBvc2l0aW9uKTtcbiAgfVxuXG4gIHB1dFVJbnQ4IChwb3NpdGlvbiwgdmFsKSB7XG4gICAgdGhpcy5fYnVmZmVyLndyaXRlVUludDgoIHZhbCwgcG9zaXRpb24gKTtcbiAgfVxuXG4gIHB1dEludDggKHBvc2l0aW9uLCB2YWwpIHtcbiAgICB0aGlzLl9idWZmZXIud3JpdGVJbnQ4KCB2YWwsIHBvc2l0aW9uICk7XG4gIH1cblxuICBwdXRGbG9hdDY0ICggcG9zaXRpb24sIHZhbCApIHtcbiAgICB0aGlzLl9idWZmZXIud3JpdGVEb3VibGVCRSggdmFsLCBwb3NpdGlvbiApO1xuICB9XG5cbiAgcHV0Qnl0ZXMgKCBwb3NpdGlvbiwgdmFsICkge1xuICAgIGlmKCB2YWwgaW5zdGFuY2VvZiBOb2RlQnVmZmVyICkge1xuICAgICAgbGV0IGJ5dGVzVG9Db3B5ID0gTWF0aC5taW4oIHZhbC5sZW5ndGggLSB2YWwucG9zaXRpb24sIHRoaXMubGVuZ3RoIC0gcG9zaXRpb24gKTtcbiAgICAgIHZhbC5fYnVmZmVyLmNvcHkoXG4gICAgICAgIHRoaXMuX2J1ZmZlcixcbiAgICAgICAgcG9zaXRpb24sXG4gICAgICAgIHZhbC5wb3NpdGlvbixcbiAgICAgICAgdmFsLnBvc2l0aW9uICsgYnl0ZXNUb0NvcHkgKTtcbiAgICAgIHZhbC5wb3NpdGlvbiArPSBieXRlc1RvQ29weTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VwZXIucHV0Qnl0ZXMocG9zaXRpb24sIHZhbCk7XG4gICAgfVxuICB9O1xuXG4gIGdldFNsaWNlICggc3RhcnQsIGxlbmd0aCApIHtcbiAgICByZXR1cm4gbmV3IE5vZGVCdWZmZXIoIHRoaXMuX2J1ZmZlci5zbGljZSggc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoICkgKTtcbiAgfVxufVxuXG4vLyBVc2UgSGVhcEJ1ZmZlciBieSBkZWZhdWx0LCB1bmxlc3MgQnVmZmVyIEFQSSBpcyBhdmFpbGFibGUsIHNlZSBiZWxvd1xubGV0IF9EZWZhdWx0QnVmZmVyID0gSGVhcEJ1ZmZlcjtcbnRyeSB7XG4gIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgd2UncmUgbm90IHJ1bm5pbmcgb24gTm9kZUpTIG9yIGVxdWl2YWxlbnRcbiAgcmVxdWlyZS5yZXNvbHZlKFwiYnVmZmVyXCIpO1xuICBfRGVmYXVsdEJ1ZmZlciA9IE5vZGVCdWZmZXI7XG59IGNhdGNoKGUpIHt9XG5cbi8qKlxuICogQWxsb2NhdGUgYSBuZXcgYnVmZmVyIHVzaW5nIHdoYXRldmVyIG1lY2hhbmlzbSBpcyBtb3N0IHNlbnNpYmxlIGZvciB0aGVcbiAqIGN1cnJlbnQgcGxhdGZvcm1cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICogQHBhcmFtIHtJbnRlZ2VyfSBzaXplXG4gKiBAcmV0dXJuIG5ldyBidWZmZXJcbiAqL1xuZnVuY3Rpb24gYWxsb2MgKHNpemUpIHtcbiAgcmV0dXJuIG5ldyBfRGVmYXVsdEJ1ZmZlcihzaXplKTtcbn1cblxuZXhwb3J0IHtcbiAgQmFzZUJ1ZmZlcixcbiAgSGVhcEJ1ZmZlcixcbiAgU2xpY2VCdWZmZXIsXG4gIENvbWJpbmVkQnVmZmVyLFxuICBOb2RlQnVmZmVyLFxuICBhbGxvY1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tYmluZWRCdWZmZXJ9IGZyb20gJy4vYnVmJztcbmNvbnN0IG9ic2VydmVyID0ge1xuICBpbnN0YW5jZTogbnVsbCxcbiAgdXBkYXRlSW5zdGFuY2U6IChpbnN0YW5jZSkgPT4ge1xuICAgIG9ic2VydmVyLmluc3RhbmNlID0gaW5zdGFuY2VcbiAgfVxufTtcblxuY2xhc3MgRHVtbXlDaGFubmVsIHtcbiAgY29uc3RydWN0b3Iob3B0cykge1xuICAgIHRoaXMud3JpdHRlbiA9IFtdO1xuICB9XG4gIGlzRW5jcnlwdGVkKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB3cml0ZSggYnVmICkge1xuICAgIHRoaXMud3JpdHRlbi5wdXNoKGJ1Zik7XG4gICAgb2JzZXJ2ZXIudXBkYXRlSW5zdGFuY2UodGhpcyk7XG4gIH1cbiAgdG9IZXgoKSB7XG4gICAgdmFyIG91dCA9IFwiXCI7XG4gICAgZm9yKCB2YXIgaT0wOyBpPHRoaXMud3JpdHRlbi5sZW5ndGg7IGkrKyApIHtcbiAgICAgIG91dCArPSB0aGlzLndyaXR0ZW5baV0udG9IZXgoKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuICB0b0J1ZmZlciAoKSB7XG4gICAgcmV0dXJuIG5ldyBDb21iaW5lZEJ1ZmZlciggdGhpcy53cml0dGVuICk7XG4gIH1cbn1cblxuY29uc3QgY2hhbm5lbCA9IER1bW15Q2hhbm5lbDtcblxuZXhwb3J0IHsgY2hhbm5lbCwgb2JzZXJ2ZXIgfVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgbmV0IGZyb20gXCJuZXRcIjtcbmltcG9ydCB0bHMgZnJvbSBcInRsc1wiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7RU9MfSBmcm9tIFwib3NcIjtcbmltcG9ydCB7Tm9kZUJ1ZmZlcn0gZnJvbSBcIi4vYnVmXCI7XG5pbXBvcnQge0VOQ1JZUFRJT05fT0ZGLCBpc0VtcHR5T2JqZWN0T3JOdWxsfSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQge25ld0Vycm9yLCBTRVNTSU9OX0VYUElSRUR9IGZyb20gXCIuLy4uL2Vycm9yXCI7XG5cbmxldCBfQ09OTkVDVElPTl9JREdFTiA9IDA7XG5cbmZ1bmN0aW9uIHVzZXJIb21lKCkge1xuICAvLyBGb3Igc29tZSByZWFzb24sIEJyb3dzZXJpZnkgY2hva2VzIG9uIHNoaW1taW5nIGBwcm9jZXNzYC4gVGhpcyBjb2RlXG4gIC8vIHdpbGwgbmV2ZXIgZ2V0IGV4ZWN1dGVkIG9uIHRoZSBicm93c2VyIGFueXdheSwgdG8ganVzdCBoYWNrIGFyb3VuZCBpdFxuICBsZXQgZ2V0T3V0T2ZIZXJlQnJvd3NlcmlmeVlvdXJlRHJ1bmsgPSByZXF1aXJlO1xuICBsZXQgcHJvY2VzcyA9IGdldE91dE9mSGVyZUJyb3dzZXJpZnlZb3VyZURydW5rKCdwcm9jZXNzJyk7XG5cbiAgcmV0dXJuIHByb2Nlc3MuZW52Wyhwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpID8gJ1VTRVJQUk9GSUxFJyA6ICdIT01FJ107XG59XG5cbmZ1bmN0aW9uIG1rRnVsbFBhdGgocGF0aFRvQ3JlYXRlKSB7XG4gIHRyeSB7XG4gICAgZnMubWtkaXJTeW5jKCBwYXRoVG9DcmVhdGUgKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmKGUuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIC8vIENyZWF0ZSBwYXJlbnQgZGlyXG4gICAgICBta0Z1bGxQYXRoKHBhdGguZGlybmFtZSggcGF0aFRvQ3JlYXRlICkpO1xuICAgICAgLy8gQW5kIG5vdyB0cnkgYWdhaW5cbiAgICAgIG1rRnVsbFBhdGgoIHBhdGhUb0NyZWF0ZSApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZS5jb2RlID09PSAnRUVYSVNUJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxvYWRGaW5nZXJwcmludCggc2VydmVySWQsIGtub3duSG9zdHNQYXRoLCBjYiApIHtcbiAgdHJ5IHtcbiAgICBmcy5hY2Nlc3NTeW5jKCBrbm93bkhvc3RzUGF0aCApO1xuICB9IGNhdGNoKGUpIHtcbiAgICByZXR1cm4gY2IobnVsbClcbiAgfVxuICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgcmVxdWlyZSgncmVhZGxpbmUnKS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBmcy5jcmVhdGVSZWFkU3RyZWFtKGtub3duSG9zdHNQYXRoKVxuICB9KS5vbignbGluZScsIChsaW5lKSAgPT4ge1xuICAgIGlmKCAhZm91bmQgJiYgbGluZS5zdGFydHNXaXRoKCBzZXJ2ZXJJZCApKSB7XG4gICAgICBmb3VuZCA9IHRydWU7XG4gICAgICBjYiggbGluZS5zcGxpdChcIiBcIilbMV0gKTtcbiAgICB9XG4gIH0pLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICBpZighZm91bmQpIHtcbiAgICAgIGNiKG51bGwpO1xuICAgIH1cbiAgfSk7XG59XG5cbmNvbnN0IF9sb2NrRmluZ2VycHJpbnRGcm9tQXBwZW5kaW5nID0ge307XG5mdW5jdGlvbiBzdG9yZUZpbmdlcnByaW50KCBzZXJ2ZXJJZCwga25vd25Ib3N0c1BhdGgsIGZpbmdlcnByaW50LCBjYiApIHtcbiAgLy8gd2UgY2hlY2sgaWYgdGhlIHNlcnZlcklkIGhhcyBiZWVuIGFwcGVuZGVkXG4gIGlmKCEhX2xvY2tGaW5nZXJwcmludEZyb21BcHBlbmRpbmdbc2VydmVySWRdKXtcbiAgICAvLyBpZiBpdCBoYXMsIHdlIGlnbm9yZSBpdFxuICAgIHJldHVybiBjYihudWxsKTtcbiAgfVxuXG4gIC8vIHdlIG1ha2UgdGhlIGxpbmUgYXMgYXBwZW5kZWRcbiAgLy8gKCAxIGlzIG1vcmUgZWZmaWNpZW50IHRvIHN0b3JlIHRoYW4gdHJ1ZSBiZWNhdXNlIHRydWUgaXMgYW4gb2RkYmFsbCApXG4gIF9sb2NrRmluZ2VycHJpbnRGcm9tQXBwZW5kaW5nW3NlcnZlcklkXSA9IDE7XG5cbiAgLy8gSWYgZmlsZSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgZnVsbCBwYXRoIHRvIGl0XG4gIHRyeSB7XG4gICAgZnMuYWNjZXNzU3luYyhrbm93bkhvc3RzUGF0aCk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICBta0Z1bGxQYXRoKHBhdGguZGlybmFtZShrbm93bkhvc3RzUGF0aCkpO1xuICB9XG5cbiAgZnMuYXBwZW5kRmlsZShrbm93bkhvc3RzUGF0aCwgc2VydmVySWQgKyBcIiBcIiArIGZpbmdlcnByaW50ICsgRU9MLCBcInV0ZjhcIiwgKGVycikgPT4ge1xuICAgIGRlbGV0ZSBfbG9ja0ZpbmdlcnByaW50RnJvbUFwcGVuZGluZ1tzZXJ2ZXJJZF07XG4gICAgaWYgKGVycikge1xuICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNiKGVycik7XG4gIH0pO1xufVxuXG5jb25zdCBUcnVzdFN0cmF0ZWd5ID0ge1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgU2luY2UgdmVyc2lvbiAxLjAuIFdpbGwgYmUgZGVsZXRlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiB7QGxpbmsgI1RSVVNUX0NVU1RPTV9DQV9TSUdORURfQ0VSVElGSUNBVEVTfS5cbiAgICovXG4gIFRSVVNUX1NJR05FRF9DRVJUSUZJQ0FURVM6IGZ1bmN0aW9uKCBvcHRzLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSApIHtcbiAgICBjb25zb2xlLmxvZyhcImBUUlVTVF9TSUdORURfQ0VSVElGSUNBVEVTYCBoYXMgYmVlbiBkZXByZWNhdGVkIGFzIG9wdGlvbiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgXCIgK1xuICAgICAgXCJ0aGUgZHJpdmVyLiBQbGVhc2UgdXNlIGBUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFU2AgaW5zdGVhZC5cIik7XG4gICAgcmV0dXJuIFRydXN0U3RyYXRlZ3kuVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVMob3B0cywgb25TdWNjZXNzLCBvbkZhaWx1cmUpO1xuICB9LFxuICBUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFUyA6IGZ1bmN0aW9uKCBvcHRzLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSApIHtcbiAgICBpZiggIW9wdHMudHJ1c3RlZENlcnRpZmljYXRlcyB8fCBvcHRzLnRydXN0ZWRDZXJ0aWZpY2F0ZXMubGVuZ3RoID09IDAgKSB7XG4gICAgICBvbkZhaWx1cmUobmV3RXJyb3IoXCJZb3UgYXJlIHVzaW5nIFRSVVNUX0NVU1RPTV9DQV9TSUdORURfQ0VSVElGSUNBVEVTIGFzIHRoZSBtZXRob2QgXCIgK1xuICAgICAgICBcInRvIHZlcmlmeSB0cnVzdCBmb3IgZW5jcnlwdGVkICBjb25uZWN0aW9ucywgYnV0IGhhdmUgbm90IGNvbmZpZ3VyZWQgYW55IFwiICtcbiAgICAgICAgXCJ0cnVzdGVkQ2VydGlmaWNhdGVzLiBZb3UgIG11c3Qgc3BlY2lmeSB0aGUgcGF0aCB0byBhdCBsZWFzdCBvbmUgdHJ1c3RlZCBcIiArXG4gICAgICAgIFwiWC41MDkgY2VydGlmaWNhdGUgZm9yIHRoaXMgdG8gd29yay4gVHdvIG90aGVyIGFsdGVybmF0aXZlcyBpcyB0byB1c2UgXCIgK1xuICAgICAgICBcIlRSVVNUX0FMTF9DRVJUSUZJQ0FURVMgb3IgdG8gZGlzYWJsZSBlbmNyeXB0aW9uIGJ5IHNldHRpbmcgZW5jcnlwdGVkPVxcXCJcIiArIEVOQ1JZUFRJT05fT0ZGICsgXCJcXFwiXCIgK1xuICAgICAgICBcImluIHlvdXIgZHJpdmVyIGNvbmZpZ3VyYXRpb24uXCIpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgdGxzT3B0cyA9IHtcbiAgICAgIGNhOiBvcHRzLnRydXN0ZWRDZXJ0aWZpY2F0ZXMubWFwKChmKSA9PiBmcy5yZWFkRmlsZVN5bmMoZikpLFxuICAgICAgLy8gQmVjYXVzZSB3ZSBtYW51YWxseSBjaGVjayBmb3IgdGhpcyBpbiB0aGUgY29ubmVjdCBjYWxsYmFjaywgdG8gZ2l2ZVxuICAgICAgLy8gYSBtb3JlIGhlbHBmdWwgZXJyb3IgdG8gdGhlIHVzZXJcbiAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcbiAgICB9O1xuXG4gICAgbGV0IHNvY2tldCA9IHRscy5jb25uZWN0KG9wdHMucG9ydCwgb3B0cy5ob3N0LCB0bHNPcHRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXNvY2tldC5hdXRob3JpemVkKSB7XG4gICAgICAgIG9uRmFpbHVyZShuZXdFcnJvcihcIlNlcnZlciBjZXJ0aWZpY2F0ZSBpcyBub3QgdHJ1c3RlZC4gSWYgeW91IHRydXN0IHRoZSBkYXRhYmFzZSB5b3UgYXJlIGNvbm5lY3RpbmcgdG8sIGFkZFwiICtcbiAgICAgICAgICBcIiB0aGUgc2lnbmluZyBjZXJ0aWZpY2F0ZSwgb3IgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSwgdG8gdGhlIGxpc3Qgb2YgY2VydGlmaWNhdGVzIHRydXN0ZWQgYnkgdGhpcyBkcml2ZXJcIiArXG4gICAgICAgICAgXCIgdXNpbmcgYG5lbzRqLnYxLmRyaXZlciguLiwgeyB0cnVzdGVkQ2VydGlmaWNhdGVzOlsncGF0aC90by9jZXJ0aWZpY2F0ZS5jcnQnXX0pLiBUaGlzIFwiICtcbiAgICAgICAgICBcIiBpcyBhIHNlY3VyaXR5IG1lYXN1cmUgdG8gcHJvdGVjdCBhZ2FpbnN0IG1hbi1pbi10aGUtbWlkZGxlIGF0dGFja3MuIElmIHlvdSBhcmUganVzdCB0cnlpbmcgXCIgK1xuICAgICAgICAgIFwiIE5lbzRqIG91dCBhbmQgYXJlIG5vdCBjb25jZXJuZWQgYWJvdXQgZW5jcnlwdGlvbiwgc2ltcGx5IGRpc2FibGUgaXQgdXNpbmcgYGVuY3J5cHRlZD1cXFwiXCIgKyBFTkNSWVBUSU9OX09GRiArIFwiXFxcImBcIiArXG4gICAgICAgICAgXCIgaW4gdGhlIGRyaXZlciBvcHRpb25zLiBTb2NrZXQgcmVzcG9uZGVkIHdpdGg6IFwiICsgc29ja2V0LmF1dGhvcml6YXRpb25FcnJvcikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25TdWNjZXNzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgc29ja2V0Lm9uKCdlcnJvcicsIG9uRmFpbHVyZSk7XG4gICAgcmV0dXJuIHNvY2tldDtcbiAgfSxcbiAgVFJVU1RfU1lTVEVNX0NBX1NJR05FRF9DRVJUSUZJQ0FURVMgOiBmdW5jdGlvbiggb3B0cywgb25TdWNjZXNzLCBvbkZhaWx1cmUgKSB7XG5cbiAgICBsZXQgdGxzT3B0cyA9IHtcbiAgICAgIC8vIEJlY2F1c2Ugd2UgbWFudWFsbHkgY2hlY2sgZm9yIHRoaXMgaW4gdGhlIGNvbm5lY3QgY2FsbGJhY2ssIHRvIGdpdmVcbiAgICAgIC8vIGEgbW9yZSBoZWxwZnVsIGVycm9yIHRvIHRoZSB1c2VyXG4gICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlXG4gICAgfTtcbiAgICBsZXQgc29ja2V0ID0gdGxzLmNvbm5lY3Qob3B0cy5wb3J0LCBvcHRzLmhvc3QsIHRsc09wdHMsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghc29ja2V0LmF1dGhvcml6ZWQpIHtcbiAgICAgICAgb25GYWlsdXJlKG5ld0Vycm9yKFwiU2VydmVyIGNlcnRpZmljYXRlIGlzIG5vdCB0cnVzdGVkLiBJZiB5b3UgdHJ1c3QgdGhlIGRhdGFiYXNlIHlvdSBhcmUgY29ubmVjdGluZyB0bywgdXNlIFwiICtcbiAgICAgICAgICBcIlRSVVNUX0NVU1RPTV9DQV9TSUdORURfQ0VSVElGSUNBVEVTIGFuZCBhZGRcIiArXG4gICAgICAgICAgXCIgdGhlIHNpZ25pbmcgY2VydGlmaWNhdGUsIG9yIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUsIHRvIHRoZSBsaXN0IG9mIGNlcnRpZmljYXRlcyB0cnVzdGVkIGJ5IHRoaXMgZHJpdmVyXCIgK1xuICAgICAgICAgIFwiIHVzaW5nIGBuZW80ai52MS5kcml2ZXIoLi4sIHsgdHJ1c3RlZENlcnRpZmljYXRlczpbJ3BhdGgvdG8vY2VydGlmaWNhdGUuY3J0J119KS4gVGhpcyBcIiArXG4gICAgICAgICAgXCIgaXMgYSBzZWN1cml0eSBtZWFzdXJlIHRvIHByb3RlY3QgYWdhaW5zdCBtYW4taW4tdGhlLW1pZGRsZSBhdHRhY2tzLiBJZiB5b3UgYXJlIGp1c3QgdHJ5aW5nIFwiICtcbiAgICAgICAgICBcIiBOZW80aiBvdXQgYW5kIGFyZSBub3QgY29uY2VybmVkIGFib3V0IGVuY3J5cHRpb24sIHNpbXBseSBkaXNhYmxlIGl0IHVzaW5nIGBlbmNyeXB0ZWQ9XFxcIlwiICsgRU5DUllQVElPTl9PRkYgKyBcIlxcXCJgXCIgK1xuICAgICAgICAgIFwiIGluIHRoZSBkcml2ZXIgb3B0aW9ucy4gU29ja2V0IHJlc3BvbmRlZCB3aXRoOiBcIiArIHNvY2tldC5hdXRob3JpemF0aW9uRXJyb3IpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uU3VjY2VzcygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHNvY2tldC5vbignZXJyb3InLCBvbkZhaWx1cmUpO1xuICAgIHJldHVybiBzb2NrZXQ7XG4gIH0sXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBpbiAxLjEgaW4gZmF2b3VyIG9mIHtAbGluayAjVFJVU1RfQUxMX0NFUlRJRklDQVRFU30uIFdpbGwgYmUgZGVsZXRlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLlxuICAgKi9cbiAgVFJVU1RfT05fRklSU1RfVVNFIDogZnVuY3Rpb24oIG9wdHMsIG9uU3VjY2Vzcywgb25GYWlsdXJlICkge1xuICAgICAgY29uc29sZS5sb2coXCJgVFJVU1RfT05fRklSU1RfVVNFYCBoYXMgYmVlbiBkZXByZWNhdGVkIGFzIG9wdGlvbiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgXCIgK1xuICAgICAgICAgIFwidGhlIGRyaXZlci4gUGxlYXNlIHVzZSBgVFJVU1RfQUxMX0NFUlRJRklDQVRFU2AgaW5zdGVhZC5cIik7XG5cbiAgICBsZXQgdGxzT3B0cyA9IHtcbiAgICAgIC8vIEJlY2F1c2Ugd2UgbWFudWFsbHkgdmVyaWZ5IHRoZSBjZXJ0aWZpY2F0ZSBhZ2FpbnN0IGtub3duX2hvc3RzXG4gICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlXG4gICAgfTtcblxuICAgIGxldCBzb2NrZXQgPSB0bHMuY29ubmVjdChvcHRzLnBvcnQsIG9wdHMuaG9zdCwgdGxzT3B0cywgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHNlcnZlckNlcnQgPSBzb2NrZXQuZ2V0UGVlckNlcnRpZmljYXRlKC8qcmF3PSovdHJ1ZSk7XG5cbiAgICAgIGlmKCAhc2VydmVyQ2VydC5yYXcgKSB7XG4gICAgICAgIC8vIElmIGByYXdgIGlzIG5vdCBhdmFpbGFibGUsIHdlJ3JlIG9uIGFuIG9sZCB2ZXJzaW9uIG9mIE5vZGVKUywgYW5kXG4gICAgICAgIC8vIHRoZSByYXcgY2VydCBjYW5ub3QgYmUgYWNjZXNzZWQgKG9yLCBhdCBsZWFzdCBJIGNvdWxkbid0IGZpbmQgYSB3YXkgdG8pXG4gICAgICAgIC8vIHRoZXJlZm9yZSwgd2UgY2FuJ3QgZ2VuZXJhdGUgYSBTSEE1MTIgZmluZ2VycHJpbnQsIG1lYW5pbmcgd2UgY2FuJ3RcbiAgICAgICAgLy8gZG8gVE9GVSwgYW5kIHRoZSBzYWZlIGFwcHJvYWNoIGlzIHRvIGZhaWwuXG4gICAgICAgIG9uRmFpbHVyZShuZXdFcnJvcihcIllvdSBhcmUgdXNpbmcgYSB2ZXJzaW9uIG9mIE5vZGVKUyB0aGF0IGRvZXMgbm90IFwiICtcbiAgICAgICAgICBcInN1cHBvcnQgdHJ1c3Qtb24tZmlyc3QgdXNlIGVuY3J5cHRpb24uIFlvdSBjYW4gZWl0aGVyIHVwZ3JhZGUgTm9kZUpTIHRvIFwiICtcbiAgICAgICAgICBcImEgbmV3ZXIgdmVyc2lvbiwgdXNlIGB0cnVzdDpUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFU2AgaW4geW91ciBkcml2ZXIgXCIgK1xuICAgICAgICAgIFwiY29uZmlnIGluc3RlYWQsIG9yIGRpc2FibGUgZW5jcnlwdGlvbiB1c2luZyBgZW5jcnlwdGVkOlxcXCJcIiArIEVOQ1JZUFRJT05fT0ZGKyBcIlxcXCJgLlwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlcnZlckZpbmdlcnByaW50ID0gcmVxdWlyZSgnY3J5cHRvJykuY3JlYXRlSGFzaCgnc2hhNTEyJykudXBkYXRlKHNlcnZlckNlcnQucmF3KS5kaWdlc3QoXCJoZXhcIik7XG4gICAgICBsZXQga25vd25Ib3N0c1BhdGggPSBvcHRzLmtub3duSG9zdHMgfHwgcGF0aC5qb2luKHVzZXJIb21lKCksIFwiLm5lbzRqXCIsIFwia25vd25faG9zdHNcIik7XG4gICAgICBsZXQgc2VydmVySWQgPSBvcHRzLmhvc3QgKyBcIjpcIiArIG9wdHMucG9ydDtcblxuICAgICAgbG9hZEZpbmdlcnByaW50KHNlcnZlcklkLCBrbm93bkhvc3RzUGF0aCwgKGtub3duRmluZ2VycHJpbnQpID0+IHtcbiAgICAgICAgaWYoIGtub3duRmluZ2VycHJpbnQgPT09IHNlcnZlckZpbmdlcnByaW50ICkge1xuICAgICAgICAgIG9uU3VjY2VzcygpO1xuICAgICAgICB9IGVsc2UgaWYoIGtub3duRmluZ2VycHJpbnQgPT0gbnVsbCApIHtcbiAgICAgICAgICBzdG9yZUZpbmdlcnByaW50KCBzZXJ2ZXJJZCwga25vd25Ib3N0c1BhdGgsIHNlcnZlckZpbmdlcnByaW50LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvbkZhaWx1cmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvblN1Y2Nlc3MoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbkZhaWx1cmUobmV3RXJyb3IoXCJEYXRhYmFzZSBlbmNyeXB0aW9uIGNlcnRpZmljYXRlIGhhcyBjaGFuZ2VkLCBhbmQgbm8gbG9uZ2VyIFwiICtcbiAgICAgICAgICAgIFwibWF0Y2hlcyB0aGUgY2VydGlmaWNhdGUgc3RvcmVkIGZvciBcIiArIHNlcnZlcklkICsgXCIgaW4gYFwiICsga25vd25Ib3N0c1BhdGggK1xuICAgICAgICAgICAgXCJgLiBBcyBhIHNlY3VyaXR5IHByZWNhdXRpb24sIHRoaXMgZHJpdmVyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgdHJ1c3QgdGhlIG5ldyBcIiArXG4gICAgICAgICAgICBcImNlcnRpZmljYXRlLCBiZWNhdXNlIGRvaW5nIHNvIHdvdWxkIGFsbG93IGFuIGF0dGFja2VyIHRvIHByZXRlbmQgdG8gYmUgdGhlIE5lbzRqIFwiICtcbiAgICAgICAgICAgIFwiaW5zdGFuY2Ugd2Ugd2FudCB0byBjb25uZWN0IHRvLiBUaGUgY2VydGlmaWNhdGUgcHJvdmlkZWQgYnkgdGhlIHNlcnZlciBsb29rcyBsaWtlOiBcIiArXG4gICAgICAgICAgICBzZXJ2ZXJDZXJ0ICsgXCIuIElmIHlvdSB0cnVzdCB0aGF0IHRoaXMgY2VydGlmaWNhdGUgaXMgdmFsaWQsIHNpbXBseSByZW1vdmUgdGhlIGxpbmUgXCIgK1xuICAgICAgICAgICAgXCJzdGFydGluZyB3aXRoIFwiICsgc2VydmVySWQgKyBcIiBpbiBgXCIgKyBrbm93bkhvc3RzUGF0aCArIFwiYCwgYW5kIHRoZSBkcml2ZXIgd2lsbCBcIiArXG4gICAgICAgICAgICBcInVwZGF0ZSB0aGUgZmlsZSB3aXRoIHRoZSBuZXcgY2VydGlmaWNhdGUuIFlvdSBjYW4gY29uZmlndXJlIHdoaWNoIGZpbGUgdGhlIGRyaXZlciBcIiArXG4gICAgICAgICAgICBcInNob3VsZCB1c2UgdG8gc3RvcmUgdGhpcyBpbmZvcm1hdGlvbiBieSBzZXR0aW5nIGBrbm93bkhvc3RzYCB0byBhbm90aGVyIHBhdGggaW4gXCIgK1xuICAgICAgICAgICAgXCJ5b3VyIGRyaXZlciBjb25maWd1cmF0aW9uIC0gYW5kIHlvdSBjYW4gZGlzYWJsZSBlbmNyeXB0aW9uIHRoZXJlIGFzIHdlbGwgdXNpbmcgXCIgK1xuICAgICAgICAgICAgXCJgZW5jcnlwdGVkOlxcXCJcIiArIEVOQ1JZUFRJT05fT0ZGICsgXCJcXFwiYC5cIikpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHNvY2tldC5vbignZXJyb3InLCBvbkZhaWx1cmUpO1xuICAgIHJldHVybiBzb2NrZXQ7XG4gIH0sXG5cbiAgVFJVU1RfQUxMX0NFUlRJRklDQVRFUzogZnVuY3Rpb24gKG9wdHMsIG9uU3VjY2Vzcywgb25GYWlsdXJlKSB7XG4gICAgY29uc3QgdGxzT3B0cyA9IHtcbiAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcbiAgICB9O1xuICAgIGNvbnN0IHNvY2tldCA9IHRscy5jb25uZWN0KG9wdHMucG9ydCwgb3B0cy5ob3N0LCB0bHNPcHRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjZXJ0aWZpY2F0ZSA9IHNvY2tldC5nZXRQZWVyQ2VydGlmaWNhdGUoKTtcbiAgICAgIGlmIChpc0VtcHR5T2JqZWN0T3JOdWxsKGNlcnRpZmljYXRlKSkge1xuICAgICAgICBvbkZhaWx1cmUobmV3RXJyb3IoXCJTZWN1cmUgY29ubmVjdGlvbiB3YXMgc3VjY2Vzc2Z1bCBidXQgc2VydmVyIGRpZCBub3QgcmV0dXJuIGFueSB2YWxpZCBcIiArXG4gICAgICAgICAgICBcImNlcnRpZmljYXRlcy4gU3VjaCBjb25uZWN0aW9uIGNhbiBub3QgYmUgdHJ1c3RlZC4gSWYgeW91IGFyZSBqdXN0IHRyeWluZyBcIiArXG4gICAgICAgICAgICBcIiBOZW80aiBvdXQgYW5kIGFyZSBub3QgY29uY2VybmVkIGFib3V0IGVuY3J5cHRpb24sIHNpbXBseSBkaXNhYmxlIGl0IHVzaW5nIFwiICtcbiAgICAgICAgICAgIFwiYGVuY3J5cHRlZD1cXFwiXCIgKyBFTkNSWVBUSU9OX09GRiArIFwiXFxcImAgaW4gdGhlIGRyaXZlciBvcHRpb25zLiBcIiArXG4gICAgICAgICAgICBcIlNvY2tldCByZXNwb25kZWQgd2l0aDogXCIgKyBzb2NrZXQuYXV0aG9yaXphdGlvbkVycm9yKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvblN1Y2Nlc3MoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBzb2NrZXQub24oJ2Vycm9yJywgb25GYWlsdXJlKTtcbiAgICByZXR1cm4gc29ja2V0O1xuICB9XG59O1xuXG5mdW5jdGlvbiBjb25uZWN0KCBvcHRzLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZT0oKCk9Pm51bGwpICkge1xuICAvL3N0aWxsIGFsbG93IGJvb2xlYW4gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIGlmIChvcHRzLmVuY3J5cHRlZCA9PT0gZmFsc2UgfHwgb3B0cy5lbmNyeXB0ZWQgPT09IEVOQ1JZUFRJT05fT0ZGKSB7XG4gICAgdmFyIGNvbm4gPSBuZXQuY29ubmVjdChvcHRzLnBvcnQsIG9wdHMuaG9zdCwgb25TdWNjZXNzKTtcbiAgICBjb25uLm9uKCdlcnJvcicsIG9uRmFpbHVyZSk7XG4gICAgcmV0dXJuIGNvbm47XG4gIH0gZWxzZSBpZiggVHJ1c3RTdHJhdGVneVtvcHRzLnRydXN0XSkge1xuICAgIHJldHVybiBUcnVzdFN0cmF0ZWd5W29wdHMudHJ1c3RdKG9wdHMsIG9uU3VjY2Vzcywgb25GYWlsdXJlKTtcbiAgfSBlbHNlIHtcbiAgICBvbkZhaWx1cmUobmV3RXJyb3IoXCJVbmtub3duIHRydXN0IHN0cmF0ZWd5OiBcIiArIG9wdHMudHJ1c3QgKyBcIi4gUGxlYXNlIHVzZSBlaXRoZXIgXCIgK1xuICAgICAgXCJ0cnVzdDonVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVMnIG9yIHRydXN0OidUUlVTVF9BTExfQ0VSVElGSUNBVEVTJyBpbiB5b3VyIGRyaXZlciBcIiArXG4gICAgICBcImNvbmZpZ3VyYXRpb24uIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gZGlzYWJsZSBlbmNyeXB0aW9uIGJ5IHNldHRpbmcgXCIgK1xuICAgICAgXCJgZW5jcnlwdGVkOlxcXCJcIiArIEVOQ1JZUFRJT05fT0ZGICsgXCJcXFwiYC4gVGhlcmUgaXMgbm8gbWVjaGFuaXNtIHRvIHVzZSBlbmNyeXB0aW9uIHdpdGhvdXQgdHJ1c3QgdmVyaWZpY2F0aW9uLCBcIiArXG4gICAgICBcImJlY2F1c2UgdGhpcyBpbmN1cnMgdGhlIG92ZXJoZWFkIG9mIGVuY3J5cHRpb24gd2l0aG91dCBpbXByb3Zpbmcgc2VjdXJpdHkuIElmIFwiICtcbiAgICAgIFwidGhlIGRyaXZlciBkb2VzIG5vdCB2ZXJpZnkgdGhhdCB0aGUgcGVlciBpdCBpcyBjb25uZWN0ZWQgdG8gaXMgcmVhbGx5IE5lbzRqLCBpdCBcIiArXG4gICAgICBcImlzIHZlcnkgZWFzeSBmb3IgYW4gYXR0YWNrZXIgdG8gYnlwYXNzIHRoZSBlbmNyeXB0aW9uIGJ5IHByZXRlbmRpbmcgdG8gYmUgTmVvNGouXCIpKTtcbiAgfVxufVxuXG4vKipcbiAqIEluIGEgTm9kZS5qcyBlbnZpcm9ubWVudCB0aGUgJ25ldCcgbW9kdWxlIGlzIHVzZWRcbiAqIGFzIHRyYW5zcG9ydC5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovXG5jbGFzcyBOb2RlQ2hhbm5lbCB7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBuZXcgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBPcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5ob3N0IC0gVGhlIGhvc3QsIGluY2x1ZGluZyBwcm90b2NvbCB0byBjb25uZWN0IHRvLlxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IG9wdHMucG9ydCAtIFRoZSBwb3J0IHRvIHVzZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgbGV0IHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5pZCA9IF9DT05ORUNUSU9OX0lER0VOKys7XG4gICAgdGhpcy5hdmFpbGFibGUgPSB0cnVlO1xuICAgIHRoaXMuX3BlbmRpbmcgPSBbXTtcbiAgICB0aGlzLl9vcGVuID0gdHJ1ZTtcbiAgICB0aGlzLl9lcnJvciA9IG51bGw7XG4gICAgdGhpcy5faGFuZGxlQ29ubmVjdGlvbkVycm9yID0gdGhpcy5faGFuZGxlQ29ubmVjdGlvbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5faGFuZGxlQ29ubmVjdGlvblRlcm1pbmF0ZWQgPSB0aGlzLl9oYW5kbGVDb25uZWN0aW9uVGVybWluYXRlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5fZW5jcnlwdGVkID0gb3B0cy5lbmNyeXB0ZWQ7XG4gICAgdGhpcy5fY29ubiA9IGNvbm5lY3Qob3B0cywgKCkgPT4ge1xuICAgICAgaWYoIXNlbGYuX29wZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZWxmLl9jb25uLm9uKCdkYXRhJywgKCBidWZmZXIgKSA9PiB7XG4gICAgICAgIGlmKCBzZWxmLm9ubWVzc2FnZSApIHtcbiAgICAgICAgICBzZWxmLm9ubWVzc2FnZSggbmV3IE5vZGVCdWZmZXIoIGJ1ZmZlciApICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzZWxmLl9jb25uLm9uKCdlcnJvcicsIHNlbGYuX2hhbmRsZUNvbm5lY3Rpb25FcnJvcik7XG4gICAgICBzZWxmLl9jb25uLm9uKCdlbmQnLCBzZWxmLl9oYW5kbGVDb25uZWN0aW9uVGVybWluYXRlZCk7XG5cbiAgICAgIC8vIERyYWluIGFsbCBwZW5kaW5nIG1lc3NhZ2VzXG4gICAgICBsZXQgcGVuZGluZyA9IHNlbGYuX3BlbmRpbmc7XG4gICAgICBzZWxmLl9wZW5kaW5nID0gbnVsbDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGVuZGluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzZWxmLndyaXRlKCBwZW5kaW5nW2ldICk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5faGFuZGxlQ29ubmVjdGlvbkVycm9yKTtcbiAgfVxuXG4gIF9oYW5kbGVDb25uZWN0aW9uRXJyb3IoIGVyciApIHtcbiAgICBsZXQgbXNnID0gZXJyLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBjb25uZWN0IHRvIHNlcnZlcic7XG4gICAgdGhpcy5fZXJyb3IgPSBuZXdFcnJvcihtc2csIFNFU1NJT05fRVhQSVJFRCk7XG4gICAgaWYoIHRoaXMub25lcnJvciApIHtcbiAgICAgIHRoaXMub25lcnJvcih0aGlzLl9lcnJvcik7XG4gICAgfVxuICB9XG5cbiAgX2hhbmRsZUNvbm5lY3Rpb25UZXJtaW5hdGVkKCkge1xuICAgICAgdGhpcy5fZXJyb3IgPSBuZXdFcnJvcignQ29ubmVjdGlvbiB3YXMgY2xvc2VkIGJ5IHNlcnZlcicsIFNFU1NJT05fRVhQSVJFRCk7XG4gICAgICBpZiggdGhpcy5vbmVycm9yICkge1xuICAgICAgICB0aGlzLm9uZXJyb3IodGhpcy5fZXJyb3IpO1xuICAgICAgfVxuICB9XG5cbiAgaXNFbmNyeXB0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VuY3J5cHRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSB0aGUgcGFzc2VkIGluIGJ1ZmZlciB0byBjb25uZWN0aW9uXG4gICAqIEBwYXJhbSB7Tm9kZUJ1ZmZlcn0gYnVmZmVyIC0gQnVmZmVyIHRvIHdyaXRlXG4gICAqL1xuICB3cml0ZSAoIGJ1ZmZlciApIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBhIHBlbmRpbmcgcXVldWUsIHB1c2ggdGhpcyBvbiB0aGF0IHF1ZXVlLiBUaGlzIG1lYW5zXG4gICAgLy8gd2UgYXJlIG5vdCB5ZXQgY29ubmVjdGVkLCBzbyB3ZSBxdWV1ZSB0aGluZ3MgbG9jYWxseS5cbiAgICBpZiggdGhpcy5fcGVuZGluZyAhPT0gbnVsbCApIHtcbiAgICAgIHRoaXMuX3BlbmRpbmcucHVzaCggYnVmZmVyICk7XG4gICAgfSBlbHNlIGlmKCBidWZmZXIgaW5zdGFuY2VvZiBOb2RlQnVmZmVyICkge1xuICAgICAgLy8gY29uc29sZS5sb2coIFwiW0Nvbm4jXCIrdGhpcy5pZCtcIl0gU0VORDogXCIsIGJ1ZmZlci50b1N0cmluZygpICk7XG4gICAgICB0aGlzLl9jb25uLndyaXRlKCBidWZmZXIuX2J1ZmZlciApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXdFcnJvciggXCJEb24ndCBrbm93IGhvdyB0byB3cml0ZTogXCIgKyBidWZmZXIgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgdGhlIGNvbm5lY3Rpb25cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2IgLSBGdW5jdGlvbiB0byBjYWxsIG9uIGNsb3NlLlxuICAgKi9cbiAgY2xvc2UoY2IgPSAoKCkgPT4gbnVsbCkpIHtcbiAgICB0aGlzLl9vcGVuID0gZmFsc2U7XG4gICAgaWYoIHRoaXMuX2Nvbm4gKSB7XG4gICAgICB0aGlzLl9jb25uLmVuZCgpO1xuICAgICAgdGhpcy5fY29ubi5yZW1vdmVMaXN0ZW5lcignZW5kJywgdGhpcy5faGFuZGxlQ29ubmVjdGlvblRlcm1pbmF0ZWQpO1xuICAgICAgdGhpcy5fY29ubi5vbignZW5kJywgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYigpO1xuICAgIH1cbiAgfVxufVxubGV0IF9ub2RlQ2hhbm5lbE1vZHVsZSA9IHtjaGFubmVsOiBOb2RlQ2hhbm5lbCwgYXZhaWxhYmxlOiB0cnVlfTtcblxudHJ5IHtcbiAgLy8gT25seSBkZWZpbmUgdGhpcyBtb2R1bGUgaWYgJ25ldCcgaXMgYXZhaWxhYmxlXG4gIHJlcXVpcmUucmVzb2x2ZShcIm5ldFwiKTtcbn0gY2F0Y2goZSkge1xuICBfbm9kZUNoYW5uZWxNb2R1bGUgPSB7IGF2YWlsYWJsZSA6IGZhbHNlIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IF9ub2RlQ2hhbm5lbE1vZHVsZVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7SGVhcEJ1ZmZlcn0gZnJvbSAnLi9idWYnO1xuaW1wb3J0IHtuZXdFcnJvcn0gZnJvbSAnLi8uLi9lcnJvcic7XG5pbXBvcnQge0VOQ1JZUFRJT05fT04sIEVOQ1JZUFRJT05fT0ZGfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBXZWJTb2NrZXRDaGFubmVsIHRvIGJlIHVzZWQgaW4gd2ViIGJyb3dzZXJzLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cbmNsYXNzIFdlYlNvY2tldENoYW5uZWwge1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgbmV3IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyBvYmplY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuaG9zdCAtIFRoZSBob3N0LCBpbmNsdWRpbmcgcHJvdG9jb2wgdG8gY29ubmVjdCB0by5cbiAgICogQHBhcmFtIHtJbnRlZ2VyfSBvcHRzLnBvcnQgLSBUaGUgcG9ydCB0byB1c2UuXG4gICAqL1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuXG4gICAgdGhpcy5fb3BlbiA9IHRydWU7XG4gICAgdGhpcy5fcGVuZGluZyA9IFtdO1xuICAgIHRoaXMuX2Vycm9yID0gbnVsbDtcbiAgICB0aGlzLl9oYW5kbGVDb25uZWN0aW9uRXJyb3IgPSB0aGlzLl9oYW5kbGVDb25uZWN0aW9uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuX2VuY3J5cHRlZCA9IG9wdHMuZW5jcnlwdGVkO1xuXG4gICAgbGV0IHNjaGVtZSA9IFwid3NcIjtcbiAgICAvL0FsbG93IGJvb2xlYW4gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgaWYoIG9wdHMuZW5jcnlwdGVkID09PSB0cnVlIHx8IG9wdHMuZW5jcnlwdGVkID09PSBFTkNSWVBUSU9OX09OKSB7XG4gICAgICBpZigoIW9wdHMudHJ1c3QpIHx8IG9wdHMudHJ1c3QgPT09IFwiVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVNcIiApIHtcbiAgICAgICAgc2NoZW1lID0gXCJ3c3NcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2Vycm9yID0gbmV3RXJyb3IoXCJUaGUgYnJvd3NlciB2ZXJzaW9uIG9mIHRoaXMgZHJpdmVyIG9ubHkgc3VwcG9ydHMgb25lIHRydXN0IFwiICtcbiAgICAgICAgICBcInN0cmF0ZWd5LCAnVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVMnLiBcIitvcHRzLnRydXN0K1wiIGlzIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSBcIiArXG4gICAgICAgICAgXCJlaXRoZXIgdXNlIFRSVVNUX0NVU1RPTV9DQV9TSUdORURfQ0VSVElGSUNBVEVTIG9yIGRpc2FibGUgZW5jcnlwdGlvbiBieSBzZXR0aW5nIFwiICtcbiAgICAgICAgICBcImBlbmNyeXB0ZWQ6XFxcIlwiICsgRU5DUllQVElPTl9PRkYgKyBcIlxcXCJgIGluIHRoZSBkcml2ZXIgY29uZmlndXJhdGlvbi5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fdXJsID0gc2NoZW1lICsgXCI6Ly9cIiArIG9wdHMuaG9zdCArIFwiOlwiICsgb3B0cy5wb3J0O1xuICAgIHRoaXMuX3dzID0gbmV3IFdlYlNvY2tldCh0aGlzLl91cmwpO1xuICAgIHRoaXMuX3dzLmJpbmFyeVR5cGUgPSBcImFycmF5YnVmZmVyXCI7XG5cbiAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgLy9BbGwgY29ubmVjdGlvbiBlcnJvcnMgYXJlIG5vdCBzZW50IHRvIHRoZSBlcnJvciBoYW5kbGVyXG4gICAgLy93ZSBtdXN0IGFsc28gY2hlY2sgZm9yIGRpcnR5IGNsb3NlIGNhbGxzXG4gICAgdGhpcy5fd3Mub25jbG9zZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKCFlLndhc0NsZWFuKSB7XG4gICAgICAgICAgc2VsZi5faGFuZGxlQ29ubmVjdGlvbkVycm9yKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX3dzLm9ub3BlbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgLy8gRHJhaW4gYWxsIHBlbmRpbmcgbWVzc2FnZXNcbiAgICAgIGxldCBwZW5kaW5nID0gc2VsZi5fcGVuZGluZztcbiAgICAgIHNlbGYuX3BlbmRpbmcgPSBudWxsO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwZW5kaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHNlbGYud3JpdGUoIHBlbmRpbmdbaV0gKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX3dzLm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xuICAgICAgaWYoIHNlbGYub25tZXNzYWdlICkge1xuICAgICAgICB2YXIgYiA9IG5ldyBIZWFwQnVmZmVyKCBldmVudC5kYXRhICk7XG4gICAgICAgIHNlbGYub25tZXNzYWdlKCBiICk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuX3dzLm9uZXJyb3IgPSB0aGlzLl9oYW5kbGVDb25uZWN0aW9uRXJyb3I7XG4gIH1cblxuICBfaGFuZGxlQ29ubmVjdGlvbkVycm9yKCkge1xuICAgIC8vIG9uZXJyb3IgdHJpZ2dlcnMgb24gd2Vic29ja2V0IGNsb3NlIGFzIHdlbGwuLiBkb24ndCBnZXQgbWUgc3RhcnRlZC5cbiAgICBpZiggdGhpcy5fb3BlbiApIHtcbiAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjU3Nzk4MzEvaG93LXRvLWNhdGNoLXdlYnNvY2tldC1jb25uZWN0aW9uLXRvLXdzLXh4eG5uLWZhaWxlZC1jb25uZWN0aW9uLWNsb3NlZC1iZVxuICAgICAgdGhpcy5fZXJyb3IgPSBuZXdFcnJvciggXCJXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsdXJlLiBEdWUgdG8gc2VjdXJpdHkgXCIgK1xuICAgICAgICBcImNvbnN0cmFpbnRzIGluIHlvdXIgd2ViIGJyb3dzZXIsIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlIGlzIG5vdCBhdmFpbGFibGUgXCIgK1xuICAgICAgICBcInRvIHRoaXMgTmVvNGogRHJpdmVyLiBQbGVhc2UgdXNlIHlvdXIgYnJvd3NlcnMgZGV2ZWxvcG1lbnQgY29uc29sZSB0byBkZXRlcm1pbmUgXCIgK1xuICAgICAgICBcInRoZSByb290IGNhdXNlIG9mIHRoZSBmYWlsdXJlLiBDb21tb24gcmVhc29ucyBpbmNsdWRlIHRoZSBkYXRhYmFzZSBiZWluZyBcIiArXG4gICAgICAgIFwidW5hdmFpbGFibGUsIHVzaW5nIHRoZSB3cm9uZyBjb25uZWN0aW9uIFVSTCBvciB0ZW1wb3JhcnkgbmV0d29yayBwcm9ibGVtcy4gXCIgK1xuICAgICAgICBcIklmIHlvdSBoYXZlIGVuYWJsZWQgZW5jcnlwdGlvbiwgZW5zdXJlIHlvdXIgYnJvd3NlciBpcyBjb25maWd1cmVkIHRvIHRydXN0IHRoZSBcIiArXG4gICAgICAgIFwiY2VydGlmaWNhdGUgTmVvNGogaXMgY29uZmlndXJlZCB0byB1c2UuIFdlYlNvY2tldCBgcmVhZHlTdGF0ZWAgaXM6IFwiICsgdGhpcy5fd3MucmVhZHlTdGF0ZSApO1xuICAgICAgaWYgKHRoaXMub25lcnJvcikge1xuICAgICAgICB0aGlzLm9uZXJyb3IodGhpcy5fZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzRW5jcnlwdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9lbmNyeXB0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgdGhlIHBhc3NlZCBpbiBidWZmZXIgdG8gY29ubmVjdGlvblxuICAgKiBAcGFyYW0ge0hlYXBCdWZmZXJ9IGJ1ZmZlciAtIEJ1ZmZlciB0byB3cml0ZVxuICAgKi9cbiAgd3JpdGUgKCBidWZmZXIgKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgYSBwZW5kaW5nIHF1ZXVlLCBwdXNoIHRoaXMgb24gdGhhdCBxdWV1ZS4gVGhpcyBtZWFuc1xuICAgIC8vIHdlIGFyZSBub3QgeWV0IGNvbm5lY3RlZCwgc28gd2UgcXVldWUgdGhpbmdzIGxvY2FsbHkuXG4gICAgaWYoIHRoaXMuX3BlbmRpbmcgIT09IG51bGwgKSB7XG4gICAgICB0aGlzLl9wZW5kaW5nLnB1c2goIGJ1ZmZlciApO1xuICAgIH0gZWxzZSBpZiggYnVmZmVyIGluc3RhbmNlb2YgSGVhcEJ1ZmZlciApIHtcbiAgICAgIHRoaXMuX3dzLnNlbmQoIGJ1ZmZlci5fYnVmZmVyICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ld0Vycm9yKCBcIkRvbid0IGtub3cgaG93IHRvIHNlbmQgYnVmZmVyOiBcIiArIGJ1ZmZlciApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSB0aGUgY29ubmVjdGlvblxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYiAtIEZ1bmN0aW9uIHRvIGNhbGwgb24gY2xvc2UuXG4gICAqL1xuICBjbG9zZSAoIGNiID0gKCAoKSA9PiBudWxsICkpIHtcbiAgICB0aGlzLl9vcGVuID0gZmFsc2U7XG4gICAgdGhpcy5fd3MuY2xvc2UoKTtcbiAgICB0aGlzLl93cy5vbmNsb3NlID0gY2I7XG4gIH1cbn1cblxubGV0IGF2YWlsYWJsZSA9IHR5cGVvZiBXZWJTb2NrZXQgIT09ICd1bmRlZmluZWQnO1xubGV0IF93ZWJzb2NrZXRDaGFubmVsTW9kdWxlID0ge2NoYW5uZWw6IFdlYlNvY2tldENoYW5uZWwsIGF2YWlsYWJsZTogYXZhaWxhYmxlfTtcblxuZXhwb3J0IGRlZmF1bHQgX3dlYnNvY2tldENoYW5uZWxNb2R1bGVcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge2FsbG9jLCBCYXNlQnVmZmVyLCBDb21iaW5lZEJ1ZmZlcn0gZnJvbSAnLi9idWYnO1xuXG5sZXRcbiAgX0NIVU5LX0hFQURFUl9TSVpFID0gMixcbiAgX01FU1NBR0VfQk9VTkRBUlkgPSAweDAwLFxuICBfREVGQVVMVF9CVUZGRVJfU0laRSA9IDE0MDA7IC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjYxMzczNC9tYXhpbXVtLXBhY2tldC1zaXplLWZvci1hLXRjcC1jb25uZWN0aW9uXG5cbi8qKlxuICogTG9va3MgbGlrZSBhIHdyaXRhYmxlIGJ1ZmZlciwgY2h1bmtzIG91dHB1dCB0cmFuc3BhcmVudGx5IGludG8gYSBjaGFubmVsIGJlbG93LlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cbmNsYXNzIENodW5rZXIgZXh0ZW5kcyBCYXNlQnVmZmVyIHtcbiAgY29uc3RydWN0b3IoY2hhbm5lbCwgYnVmZmVyU2l6ZSkge1xuICAgIHN1cGVyKDApO1xuICAgIHRoaXMuX2J1ZmZlclNpemUgPSBidWZmZXJTaXplIHx8IF9ERUZBVUxUX0JVRkZFUl9TSVpFO1xuICAgIHRoaXMuX2NoID0gY2hhbm5lbDtcbiAgICB0aGlzLl9idWZmZXIgPSBhbGxvYyh0aGlzLl9idWZmZXJTaXplKTtcbiAgICB0aGlzLl9jdXJyZW50Q2h1bmtTdGFydCA9IDA7XG4gICAgdGhpcy5fY2h1bmtPcGVuID0gZmFsc2U7XG4gIH1cblxuICBwdXRVSW50OChwb3NpdGlvbiwgdmFsKSB7XG4gICAgdGhpcy5fZW5zdXJlKDEpO1xuICAgIHRoaXMuX2J1ZmZlci53cml0ZVVJbnQ4KHZhbCk7XG4gIH1cblxuICBwdXRJbnQ4KHBvc2l0aW9uLCB2YWwpIHtcbiAgICB0aGlzLl9lbnN1cmUoMSk7XG4gICAgdGhpcy5fYnVmZmVyLndyaXRlSW50OCh2YWwpO1xuICB9XG5cbiAgcHV0RmxvYXQ2NChwb3NpdGlvbiwgdmFsKSB7XG4gICAgdGhpcy5fZW5zdXJlKDgpO1xuICAgIHRoaXMuX2J1ZmZlci53cml0ZUZsb2F0NjQodmFsKTtcbiAgfVxuXG4gIHB1dEJ5dGVzKHBvc2l0aW9uLCBkYXRhKSB7XG4gICAgLy8gVE9ETzogSWYgZGF0YSBpcyBsYXJnZXIgdGhhbiBvdXIgY2h1bmsgc2l6ZSBvciBzbywgd2UncmUgdmVyeSBsaWtlbHkgYmV0dGVyIG9mZiBqdXN0IHBhc3NpbmcgdGhpcyBidWZmZXIgb25cbiAgICAvLyByYXRoZXIgdGhhbiBkb2luZyB0aGUgY29weSBoZXJlIFRPRE86ICpob3dldmVyKiBub3RlIHRoYXQgd2UgbmVlZCBzb21lIHdheSB0byBmaW5kIG91dCB3aGVuIHRoZSBkYXRhIGhhcyBiZWVuXG4gICAgLy8gd3JpdHRlbiAoYW5kIHRodXMgdGhlIGJ1ZmZlciBjYW4gYmUgcmUtdXNlZCkgaWYgd2UgdGFrZSB0aGF0IGFwcHJvYWNoXG4gICAgd2hpbGUgKGRhdGEucmVtYWluaW5nKCkgPiAwKSB7XG4gICAgICAvLyBFbnN1cmUgdGhlcmUgaXMgYW4gb3BlbiBjaHVuaywgYW5kIHRoYXQgaXQgaGFzIGF0IGxlYXN0IG9uZSBieXRlIG9mIHNwYWNlIGxlZnRcbiAgICAgIHRoaXMuX2Vuc3VyZSgxKTtcbiAgICAgIGlmICh0aGlzLl9idWZmZXIucmVtYWluaW5nKCkgPiBkYXRhLnJlbWFpbmluZygpKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci53cml0ZUJ5dGVzKGRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyLndyaXRlQnl0ZXMoZGF0YS5yZWFkU2xpY2UodGhpcy5fYnVmZmVyLnJlbWFpbmluZygpKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZmx1c2goKSB7XG4gICAgaWYgKHRoaXMuX2J1ZmZlci5wb3NpdGlvbiA+IDApIHtcbiAgICAgIHRoaXMuX2Nsb3NlQ2h1bmtJZk9wZW4oKTtcblxuICAgICAgLy8gTG9jYWwgY29weSBhbmQgY2xlYXIgdGhlIGJ1ZmZlciBmaWVsZC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGJ1ZmZlciBpcyBub3QgcmUtcmVsZWFzZWQgaWYgdGhlIGZsdXNoIGNhbGwgZmFpbHNcbiAgICAgIGxldCBvdXQgPSB0aGlzLl9idWZmZXI7XG4gICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXG4gICAgICB0aGlzLl9jaC53cml0ZShvdXQuZ2V0U2xpY2UoMCwgb3V0LnBvc2l0aW9uKSk7XG5cbiAgICAgIC8vIEFsbG9jIGEgbmV3IG91dHB1dCBidWZmZXIuIFdlIGFzc3VtZSB3ZSdyZSB1c2luZyBOb2RlSlMncyBidWZmZXIgcG9vbGluZyB1bmRlciB0aGUgaG9vZCBoZXJlIVxuICAgICAgdGhpcy5fYnVmZmVyID0gYWxsb2ModGhpcy5fYnVmZmVyU2l6ZSk7XG4gICAgICB0aGlzLl9jaHVua09wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQm9sdCBtZXNzYWdlcyBhcmUgZW5jb2RlZCBpbiBvbmUgb3IgbW9yZSBjaHVua3MsIGFuZCB0aGUgYm91bmRhcnkgYmV0d2VlbiB0d28gbWVzc2FnZXNcbiAgICogaXMgZW5jb2RlZCBhcyBhIDAtbGVuZ3RoIGNodW5rLCBgMDAgMDBgLiBUaGlzIGluc2VydHMgc3VjaCBhIG1lc3NhZ2UgYm91bmRhcnksIGNsb3NpbmdcbiAgICogYW55IGN1cnJlbnRseSBvcGVuIGNodW5rIGFzIG5lZWRlZFxuICAgKi9cbiAgbWVzc2FnZUJvdW5kYXJ5KCkge1xuXG4gICAgdGhpcy5fY2xvc2VDaHVua0lmT3BlbigpO1xuXG4gICAgaWYgKHRoaXMuX2J1ZmZlci5yZW1haW5pbmcoKSA8IF9DSFVOS19IRUFERVJfU0laRSkge1xuICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICAgIC8vIFdyaXRlIG1lc3NhZ2UgYm91bmRhcnlcbiAgICB0aGlzLl9idWZmZXIud3JpdGVJbnQxNihfTUVTU0FHRV9CT1VOREFSWSk7XG4gIH1cblxuICAvKiogRW5zdXJlIGF0IGxlYXN0IHRoZSBnaXZlbiBzaXplIGlzIGF2YWlsYWJsZSBmb3Igd3JpdGluZyAqL1xuICBfZW5zdXJlKHNpemUpIHtcbiAgICBsZXQgdG9Xcml0ZVNpemUgPSB0aGlzLl9jaHVua09wZW4gPyBzaXplIDogc2l6ZSArIF9DSFVOS19IRUFERVJfU0laRTtcbiAgICBpZiAodGhpcy5fYnVmZmVyLnJlbWFpbmluZygpIDwgdG9Xcml0ZVNpemUpIHtcbiAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2NodW5rT3Blbikge1xuICAgICAgdGhpcy5fY3VycmVudENodW5rU3RhcnQgPSB0aGlzLl9idWZmZXIucG9zaXRpb247XG4gICAgICB0aGlzLl9idWZmZXIucG9zaXRpb24gPSB0aGlzLl9idWZmZXIucG9zaXRpb24gKyBfQ0hVTktfSEVBREVSX1NJWkU7XG4gICAgICB0aGlzLl9jaHVua09wZW4gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIF9jbG9zZUNodW5rSWZPcGVuKCkge1xuICAgIGlmICh0aGlzLl9jaHVua09wZW4pIHtcbiAgICAgIGxldCBjaHVua1NpemUgPSB0aGlzLl9idWZmZXIucG9zaXRpb24gLSAodGhpcy5fY3VycmVudENodW5rU3RhcnQgKyBfQ0hVTktfSEVBREVSX1NJWkUpO1xuICAgICAgdGhpcy5fYnVmZmVyLnB1dFVJbnQxNih0aGlzLl9jdXJyZW50Q2h1bmtTdGFydCwgY2h1bmtTaXplKTtcbiAgICAgIHRoaXMuX2NodW5rT3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5cbi8qKlxuICogQ29tYmluZXMgY2h1bmtzIHVudGlsIGEgY29tcGxldGUgbWVzc2FnZSBpcyBnYXRoZXJlZCB1cCwgYW5kIHRoZW4gZm9yd2FyZHMgdGhhdFxuICogbWVzc2FnZSB0byBhbiAnb25tZXNzYWdlJyBsaXN0ZW5lci5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovXG5jbGFzcyBEZWNodW5rZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9jdXJyZW50TWVzc2FnZSA9IFtdO1xuICAgIHRoaXMuX3BhcnRpYWxDaHVua0hlYWRlciA9IDA7XG4gICAgdGhpcy5fc3RhdGUgPSB0aGlzLkFXQUlUSU5HX0NIVU5LO1xuICB9XG5cbiAgQVdBSVRJTkdfQ0hVTksoYnVmKSB7XG4gICAgaWYgKGJ1Zi5yZW1haW5pbmcoKSA+PSAyKSB7XG4gICAgICAvLyBXaG9sZSBoZWFkZXIgYXZhaWxhYmxlLCByZWFkIHRoYXRcbiAgICAgIHJldHVybiB0aGlzLl9vbkhlYWRlcihidWYucmVhZFVJbnQxNigpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT25seSBvbmUgYnl0ZSBhdmFpbGFibGUsIHJlYWQgdGhhdCBhbmQgd2FpdCBmb3IgdGhlIHNlY29uZCBieXRlXG4gICAgICB0aGlzLl9wYXJ0aWFsQ2h1bmtIZWFkZXIgPSBidWYucmVhZFVJbnQ4KCkgPDwgODtcbiAgICAgIHJldHVybiB0aGlzLklOX0hFQURFUjtcbiAgICB9XG4gIH1cblxuICBJTl9IRUFERVIoYnVmKSB7XG4gICAgLy8gRmlyc3QgaGVhZGVyIGJ5dGUgcmVhZCwgbm93IHdlIHJlYWQgdGhlIG5leHQgb25lXG4gICAgcmV0dXJuIHRoaXMuX29uSGVhZGVyKCh0aGlzLl9wYXJ0aWFsQ2h1bmtIZWFkZXIgfCBidWYucmVhZFVJbnQ4KCkpICYgMHhGRkZGKTtcbiAgfVxuXG4gIElOX0NIVU5LKGJ1Zikge1xuICAgIGlmICh0aGlzLl9jaHVua1NpemUgPD0gYnVmLnJlbWFpbmluZygpKSB7XG4gICAgICAvLyBDdXJyZW50IHBhY2tldCBpcyBsYXJnZXIgdGhhbiBjdXJyZW50IGNodW5rLCBvciBzYW1lIHNpemU6XG4gICAgICB0aGlzLl9jdXJyZW50TWVzc2FnZS5wdXNoKGJ1Zi5yZWFkU2xpY2UodGhpcy5fY2h1bmtTaXplKSk7XG4gICAgICByZXR1cm4gdGhpcy5BV0FJVElOR19DSFVOSztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3VycmVudCBwYWNrZXQgaXMgc21hbGxlciB0aGFuIHRoZSBjaHVuayB3ZSdyZSByZWFkaW5nLCBzcGxpdCB0aGUgY3VycmVudCBjaHVuayBpdHNlbGYgdXBcbiAgICAgIHRoaXMuX2NodW5rU2l6ZSAtPSBidWYucmVtYWluaW5nKCk7XG4gICAgICB0aGlzLl9jdXJyZW50TWVzc2FnZS5wdXNoKGJ1Zi5yZWFkU2xpY2UoYnVmLnJlbWFpbmluZygpKSk7XG4gICAgICByZXR1cm4gdGhpcy5JTl9DSFVOSztcbiAgICB9XG4gIH1cblxuICBDTE9TRUQoYnVmKSB7XG4gICAgLy8gbm8tb3BcbiAgfVxuXG4gIC8qKiBDYWxsZWQgd2hlbiBhIGNvbXBsZXRlIGNodW5rIGhlYWRlciBoYXMgYmVlbiByZWNpZXZlZCAqL1xuICBfb25IZWFkZXIoaGVhZGVyKSB7XG4gICAgaWYgKGhlYWRlciA9PSAwKSB7XG4gICAgICAvLyBNZXNzYWdlIGJvdW5kYXJ5XG4gICAgICBsZXQgbWVzc2FnZTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50TWVzc2FnZS5sZW5ndGggPT0gMSkge1xuICAgICAgICBtZXNzYWdlID0gdGhpcy5fY3VycmVudE1lc3NhZ2VbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXNzYWdlID0gbmV3IENvbWJpbmVkQnVmZmVyKCB0aGlzLl9jdXJyZW50TWVzc2FnZSApO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudE1lc3NhZ2UgPSBbXTtcbiAgICAgIHRoaXMub25tZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIHRoaXMuQVdBSVRJTkdfQ0hVTks7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NodW5rU2l6ZSA9IGhlYWRlcjtcbiAgICAgIHJldHVybiB0aGlzLklOX0NIVU5LO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlKGJ1Zikge1xuICAgIHdoaWxlIChidWYuaGFzUmVtYWluaW5nKCkpIHtcbiAgICAgIHRoaXMuX3N0YXRlID0gdGhpcy5fc3RhdGUoYnVmKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgQ2h1bmtlcixcbiAgRGVjaHVua2VyXG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtuZXdFcnJvcn0gZnJvbSAnLi4vZXJyb3InO1xuXG4vKipcbiAqIFV0aWxpdHkgdG8gbGF6aWx5IGluaXRpYWxpemUgY29ubmVjdGlvbnMgYW5kIHJldHVybiB0aGVtIGJhY2sgdG8gdGhlIHBvb2wgd2hlbiB1bnVzZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbm5lY3Rpb25Ib2xkZXIge1xuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGUgLSB0aGUgYWNjZXNzIG1vZGUgZm9yIG5ldyBjb25uZWN0aW9uIGhvbGRlci5cbiAgICogQHBhcmFtIHtDb25uZWN0aW9uUHJvdmlkZXJ9IGNvbm5lY3Rpb25Qcm92aWRlciAtIHRoZSBjb25uZWN0aW9uIHByb3ZpZGVyIHRvIGFjcXVpcmUgY29ubmVjdGlvbnMgZnJvbS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG1vZGUsIGNvbm5lY3Rpb25Qcm92aWRlcikge1xuICAgIHRoaXMuX21vZGUgPSBtb2RlO1xuICAgIHRoaXMuX2Nvbm5lY3Rpb25Qcm92aWRlciA9IGNvbm5lY3Rpb25Qcm92aWRlcjtcbiAgICB0aGlzLl9yZWZlcmVuY2VDb3VudCA9IDA7XG4gICAgdGhpcy5fY29ubmVjdGlvblByb21pc2UgPSBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSB0aGlzIGhvbGRlciBpbml0aWFsaXplIG5ldyBjb25uZWN0aW9uIGlmIG5vbmUgZXhpc3RzIGFscmVhZHkuXG4gICAqIEByZXR1cm4ge3VuZGVmaW5lZH1cbiAgICovXG4gIGluaXRpYWxpemVDb25uZWN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9yZWZlcmVuY2VDb3VudCA9PT0gMCkge1xuICAgICAgdGhpcy5fY29ubmVjdGlvblByb21pc2UgPSB0aGlzLl9jb25uZWN0aW9uUHJvdmlkZXIuYWNxdWlyZUNvbm5lY3Rpb24odGhpcy5fbW9kZSk7XG4gICAgfVxuICAgIHRoaXMuX3JlZmVyZW5jZUNvdW50Kys7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gcHJvbWlzZS5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDb25uZWN0aW9uPn0gcHJvbWlzZSByZXNvbHZlZCB3aXRoIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24uXG4gICAqL1xuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uUHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZnkgdGhpcyBob2xkZXIgdGhhdCBzaW5nbGUgcGFydHkgZG9lcyBub3QgcmVxdWlyZSBjdXJyZW50IGNvbm5lY3Rpb24gYW55IG1vcmUuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q29ubmVjdGlvbj59IHByb21pc2UgcmVzb2x2ZWQgd2l0aCB0aGUgY3VycmVudCBjb25uZWN0aW9uLlxuICAgKi9cbiAgcmVsZWFzZUNvbm5lY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX3JlZmVyZW5jZUNvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblByb21pc2U7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVmZXJlbmNlQ291bnQtLTtcbiAgICBpZiAodGhpcy5fcmVmZXJlbmNlQ291bnQgPT09IDApIHtcbiAgICAgIC8vIHJlbGVhc2UgYSBjb25uZWN0aW9uIHdpdGhvdXQgbXV0aW5nIEFDS19GQUlMVVJFLCB0aGlzIGlzIHRoZSBsYXN0IGFjdGlvbiBvbiB0aGlzIGNvbm5lY3Rpb25cbiAgICAgIHJldHVybiB0aGlzLl9yZWxlYXNlQ29ubmVjdGlvbih0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGlzIGhvbGRlciBhbmQgcmVsZWFzZXMgY3VycmVudCBjb25uZWN0aW9uIChpZiBhbnkpIGRlc3BpdGUgYW55IGV4aXN0aW5nIHVzZXJzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENvbm5lY3Rpb24+fSBwcm9taXNlIHJlc29sdmVkIHdoZW4gY3VycmVudCBjb25uZWN0aW9uIGlzIHJlbGVhc2VkIHRvIHRoZSBwb29sLlxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgaWYgKHRoaXMuX3JlZmVyZW5jZUNvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblByb21pc2U7XG4gICAgfVxuICAgIHRoaXMuX3JlZmVyZW5jZUNvdW50ID0gMDtcbiAgICAvLyByZWxlYXNlIGEgY29ubmVjdGlvbiBhbmQgbXV0ZSBBQ0tfRkFJTFVSRSwgdGhpcyBtaWdodCBiZSBjYWxsZWQgY29uY3VycmVudGx5IHdpdGggb3RoZXJcbiAgICAvLyBvcGVyYXRpb25zIGFuZCB0aHVzIHNob3VsZCBpZ25vcmUgZmFpbHVyZSBoYW5kbGluZ1xuICAgIHJldHVybiB0aGlzLl9yZWxlYXNlQ29ubmVjdGlvbihmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBjdXJyZW50IHBvb2xlZCBjb25uZWN0aW9uIGluc3RhbmNlIHRvIHRoZSBjb25uZWN0aW9uIHBvb2wuXG4gICAqIFdlIGRvbid0IHBvb2wgU2Vzc2lvbiBpbnN0YW5jZXMsIHRvIGF2b2lkIHVzZXJzIHVzaW5nIHRoZSBTZXNzaW9uIGFmdGVyIHRoZXkndmUgY2FsbGVkIGNsb3NlLlxuICAgKiBUaGUgYFNlc3Npb25gIG9iamVjdCBpcyBqdXN0IGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBDb25uZWN0aW9uIGFueXdheSwgc28gaXQgbWFrZXMgbGl0dGxlIGRpZmZlcmVuY2UuXG4gICAqIEByZXR1cm4ge1Byb21pc2V9IC0gcHJvbWlzZSByZXNvbHZlZCB0aGVuIGNvbm5lY3Rpb24gaXMgcmV0dXJuZWQgdG8gdGhlIHBvb2wuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVsZWFzZUNvbm5lY3Rpb24oc3luYykge1xuICAgIHRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlID0gdGhpcy5fY29ubmVjdGlvblByb21pc2UudGhlbihjb25uZWN0aW9uID0+IHtcbiAgICAgIGlmIChjb25uZWN0aW9uKSB7XG4gICAgICAgIGlmKHN5bmMpIHtcbiAgICAgICAgICBjb25uZWN0aW9uLnJlc2V0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29ubmVjdGlvbi5yZXNldEFzeW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29ubmVjdGlvbi5zeW5jKCk7XG4gICAgICAgIGNvbm5lY3Rpb24uX3JlbGVhc2UoKTtcbiAgICAgIH1cbiAgICB9KS5jYXRjaChpZ25vcmVkRXJyb3IgPT4ge1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlO1xuICB9XG59XG5cbmNsYXNzIEVtcHR5Q29ubmVjdGlvbkhvbGRlciBleHRlbmRzIENvbm5lY3Rpb25Ib2xkZXIge1xuXG4gIGluaXRpYWxpemVDb25uZWN0aW9uKCkge1xuICAgIC8vIG5vdGhpbmcgdG8gaW5pdGlhbGl6ZVxuICB9XG5cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3RXJyb3IoJ1RoaXMgY29ubmVjdGlvbiBob2xkZXIgZG9lcyBub3Qgc2VydmUgY29ubmVjdGlvbnMnKSk7XG4gIH1cblxuICByZWxlYXNlQ29ubmVjdGlvbigpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25uZWN0aW9uIGhvbGRlciB0aGF0IGRvZXMgbm90IG1hbmFnZSBhbnkgY29ubmVjdGlvbnMuXG4gKiBAdHlwZSB7Q29ubmVjdGlvbkhvbGRlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IEVNUFRZX0NPTk5FQ1RJT05fSE9MREVSID0gbmV3IEVtcHR5Q29ubmVjdGlvbkhvbGRlcigpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7bmV3RXJyb3IsIFNFUlZJQ0VfVU5BVkFJTEFCTEUsIFNFU1NJT05fRVhQSVJFRH0gZnJvbSAnLi4vZXJyb3InO1xuaW1wb3J0IHtSRUFELCBXUklURX0gZnJvbSAnLi4vZHJpdmVyJztcbmltcG9ydCBTZXNzaW9uIGZyb20gJy4uL3Nlc3Npb24nO1xuaW1wb3J0IFJvdW5kUm9iaW5BcnJheSBmcm9tICcuL3JvdW5kLXJvYmluLWFycmF5JztcbmltcG9ydCBSb3V0aW5nVGFibGUgZnJvbSAnLi9yb3V0aW5nLXRhYmxlJztcbmltcG9ydCBSZWRpc2NvdmVyeSBmcm9tICcuL3JlZGlzY292ZXJ5JztcbmltcG9ydCBoYXNGZWF0dXJlIGZyb20gJy4vZmVhdHVyZXMnO1xuaW1wb3J0IHtEbnNIb3N0TmFtZVJlc29sdmVyLCBEdW1teUhvc3ROYW1lUmVzb2x2ZXJ9IGZyb20gJy4vaG9zdC1uYW1lLXJlc29sdmVycyc7XG5cbmNsYXNzIENvbm5lY3Rpb25Qcm92aWRlciB7XG5cbiAgYWNxdWlyZUNvbm5lY3Rpb24obW9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQWJzdHJhY3QgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIF93aXRoQWRkaXRpb25hbE9uRXJyb3JDYWxsYmFjayhjb25uZWN0aW9uUHJvbWlzZSwgZHJpdmVyT25FcnJvckNhbGxiYWNrKSB7XG4gICAgLy8gaW5zdGFsbCBlcnJvciBoYW5kbGVyIGZyb20gdGhlIGRyaXZlciBvbiB0aGUgY29ubmVjdGlvbiBwcm9taXNlOyB0aGlzIGNhbGxiYWNrIGlzIGluc3RhbGxlZCBzZXBhcmF0ZWx5XG4gICAgLy8gc28gdGhhdCBpdCBkb2VzIG5vdCBoYW5kbGUgZXJyb3JzLCBpbnN0ZWFkIGl0IGlzIGp1c3QgYW4gYWRkaXRpb25hbCBlcnJvciByZXBvcnRpbmcgZmFjaWxpdHkuXG4gICAgY29ubmVjdGlvblByb21pc2UuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZHJpdmVyT25FcnJvckNhbGxiYWNrKGVycm9yKTtcbiAgICB9KTtcbiAgICAvLyByZXR1cm4gdGhlIG9yaWdpbmFsIGNvbm5lY3Rpb24gcHJvbWlzZVxuICAgIHJldHVybiBjb25uZWN0aW9uUHJvbWlzZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGlyZWN0Q29ubmVjdGlvblByb3ZpZGVyIGV4dGVuZHMgQ29ubmVjdGlvblByb3ZpZGVyIHtcblxuICBjb25zdHJ1Y3RvcihhZGRyZXNzLCBjb25uZWN0aW9uUG9vbCwgZHJpdmVyT25FcnJvckNhbGxiYWNrKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9hZGRyZXNzID0gYWRkcmVzcztcbiAgICB0aGlzLl9jb25uZWN0aW9uUG9vbCA9IGNvbm5lY3Rpb25Qb29sO1xuICAgIHRoaXMuX2RyaXZlck9uRXJyb3JDYWxsYmFjayA9IGRyaXZlck9uRXJyb3JDYWxsYmFjaztcbiAgfVxuXG4gIGFjcXVpcmVDb25uZWN0aW9uKG1vZGUpIHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvblBvb2wuYWNxdWlyZSh0aGlzLl9hZGRyZXNzKTtcbiAgICBjb25zdCBjb25uZWN0aW9uUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25uZWN0aW9uKTtcbiAgICByZXR1cm4gdGhpcy5fd2l0aEFkZGl0aW9uYWxPbkVycm9yQ2FsbGJhY2soY29ubmVjdGlvblByb21pc2UsIHRoaXMuX2RyaXZlck9uRXJyb3JDYWxsYmFjayk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExvYWRCYWxhbmNlciBleHRlbmRzIENvbm5lY3Rpb25Qcm92aWRlciB7XG5cbiAgY29uc3RydWN0b3IoYWRkcmVzcywgY29ubmVjdGlvblBvb2wsIGRyaXZlck9uRXJyb3JDYWxsYmFjaykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fc2VlZFJvdXRlciA9IGFkZHJlc3M7XG4gICAgdGhpcy5fcm91dGluZ1RhYmxlID0gbmV3IFJvdXRpbmdUYWJsZShuZXcgUm91bmRSb2JpbkFycmF5KFt0aGlzLl9zZWVkUm91dGVyXSkpO1xuICAgIHRoaXMuX3JlZGlzY292ZXJ5ID0gbmV3IFJlZGlzY292ZXJ5KCk7XG4gICAgdGhpcy5fY29ubmVjdGlvblBvb2wgPSBjb25uZWN0aW9uUG9vbDtcbiAgICB0aGlzLl9kcml2ZXJPbkVycm9yQ2FsbGJhY2sgPSBkcml2ZXJPbkVycm9yQ2FsbGJhY2s7XG4gICAgdGhpcy5faG9zdE5hbWVSZXNvbHZlciA9IExvYWRCYWxhbmNlci5fY3JlYXRlSG9zdE5hbWVSZXNvbHZlcigpO1xuICB9XG5cbiAgYWNxdWlyZUNvbm5lY3Rpb24obW9kZSkge1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm9taXNlID0gdGhpcy5fZnJlc2hSb3V0aW5nVGFibGUoKS50aGVuKHJvdXRpbmdUYWJsZSA9PiB7XG4gICAgICBpZiAobW9kZSA9PT0gUkVBRCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWNxdWlyZUNvbm5lY3Rpb25Ub1NlcnZlcihyb3V0aW5nVGFibGUucmVhZGVycywgJ3JlYWQnKTtcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gV1JJVEUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjcXVpcmVDb25uZWN0aW9uVG9TZXJ2ZXIocm91dGluZ1RhYmxlLndyaXRlcnMsICd3cml0ZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3RXJyb3IoJ0lsbGVnYWwgbW9kZSAnICsgbW9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX3dpdGhBZGRpdGlvbmFsT25FcnJvckNhbGxiYWNrKGNvbm5lY3Rpb25Qcm9taXNlLCB0aGlzLl9kcml2ZXJPbkVycm9yQ2FsbGJhY2spO1xuICB9XG5cbiAgZm9yZ2V0KGFkZHJlc3MpIHtcbiAgICB0aGlzLl9yb3V0aW5nVGFibGUuZm9yZ2V0KGFkZHJlc3MpO1xuICAgIHRoaXMuX2Nvbm5lY3Rpb25Qb29sLnB1cmdlKGFkZHJlc3MpO1xuICB9XG5cbiAgZm9yZ2V0V3JpdGVyKGFkZHJlc3MpIHtcbiAgICB0aGlzLl9yb3V0aW5nVGFibGUuZm9yZ2V0V3JpdGVyKGFkZHJlc3MpO1xuICB9XG5cbiAgX2FjcXVpcmVDb25uZWN0aW9uVG9TZXJ2ZXIoc2VydmVyc1JvdW5kUm9iaW5BcnJheSwgc2VydmVyTmFtZSkge1xuICAgIGNvbnN0IGFkZHJlc3MgPSBzZXJ2ZXJzUm91bmRSb2JpbkFycmF5Lm5leHQoKTtcbiAgICBpZiAoIWFkZHJlc3MpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXdFcnJvcignTm8gJyArIHNlcnZlck5hbWUgKyAnIHNlcnZlcnMgYXZhaWxhYmxlJywgU0VTU0lPTl9FWFBJUkVEKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uUG9vbC5hY3F1aXJlKGFkZHJlc3MpO1xuICB9XG5cbiAgX2ZyZXNoUm91dGluZ1RhYmxlKCkge1xuICAgIGNvbnN0IGN1cnJlbnRSb3V0aW5nVGFibGUgPSB0aGlzLl9yb3V0aW5nVGFibGU7XG5cbiAgICBpZiAoIWN1cnJlbnRSb3V0aW5nVGFibGUuaXNTdGFsZSgpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGN1cnJlbnRSb3V0aW5nVGFibGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVmcmVzaFJvdXRpbmdUYWJsZShjdXJyZW50Um91dGluZ1RhYmxlKTtcbiAgfVxuXG4gIF9yZWZyZXNoUm91dGluZ1RhYmxlKGN1cnJlbnRSb3V0aW5nVGFibGUpIHtcbiAgICBjb25zdCBrbm93blJvdXRlcnMgPSBjdXJyZW50Um91dGluZ1RhYmxlLnJvdXRlcnMudG9BcnJheSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2ZldGNoTmV3Um91dGluZ1RhYmxlKGtub3duUm91dGVycywgY3VycmVudFJvdXRpbmdUYWJsZSkudGhlbihuZXdSb3V0aW5nVGFibGUgPT4ge1xuICAgICAgaWYgKExvYWRCYWxhbmNlci5faXNWYWxpZFJvdXRpbmdUYWJsZShuZXdSb3V0aW5nVGFibGUpKSB7XG4gICAgICAgIC8vIG9uZSBvZiB0aGUga25vd24gcm91dGVycyByZXR1cm5lZCBhIHZhbGlkIHJvdXRpbmcgdGFibGUgLSB1c2UgaXRcbiAgICAgICAgcmV0dXJuIG5ld1JvdXRpbmdUYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFuZXdSb3V0aW5nVGFibGUpIHtcbiAgICAgICAgLy8gcmV0dXJuZWQgcm91dGluZyB0YWJsZSB3YXMgdW5kZWZpbmVkLCB0aGlzIG1lYW5zIGEgY29ubmVjdGlvbiBlcnJvciBoYXBwZW5lZCBhbmQgdGhlIGxhc3Qga25vd25cbiAgICAgICAgLy8gcm91dGVyIGRpZCBub3QgcmV0dXJuIGEgdmFsaWQgcm91dGluZyB0YWJsZSwgc28gd2UgbmVlZCB0byBmb3JnZXQgaXRcbiAgICAgICAgY29uc3QgbGFzdFJvdXRlckluZGV4ID0ga25vd25Sb3V0ZXJzLmxlbmd0aCAtIDE7XG4gICAgICAgIExvYWRCYWxhbmNlci5fZm9yZ2V0Um91dGVyKGN1cnJlbnRSb3V0aW5nVGFibGUsIGtub3duUm91dGVycywgbGFzdFJvdXRlckluZGV4KTtcbiAgICAgIH1cblxuICAgICAgLy8gbm9uZSBvZiB0aGUga25vd24gcm91dGVycyByZXR1cm5lZCBhIHZhbGlkIHJvdXRpbmcgdGFibGUgLSB0cnkgdG8gdXNlIHNlZWQgcm91dGVyIGFkZHJlc3MgZm9yIHJlZGlzY292ZXJ5XG4gICAgICByZXR1cm4gdGhpcy5fZmV0Y2hOZXdSb3V0aW5nVGFibGVVc2luZ1NlZWRSb3V0ZXJBZGRyZXNzKGtub3duUm91dGVycywgdGhpcy5fc2VlZFJvdXRlcik7XG4gICAgfSkudGhlbihuZXdSb3V0aW5nVGFibGUgPT4ge1xuICAgICAgaWYgKExvYWRCYWxhbmNlci5faXNWYWxpZFJvdXRpbmdUYWJsZShuZXdSb3V0aW5nVGFibGUpKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVJvdXRpbmdUYWJsZShuZXdSb3V0aW5nVGFibGUpO1xuICAgICAgICByZXR1cm4gbmV3Um91dGluZ1RhYmxlO1xuICAgICAgfVxuXG4gICAgICAvLyBub25lIG9mIHRoZSBleGlzdGluZyByb3V0ZXJzIHJldHVybmVkIHZhbGlkIHJvdXRpbmcgdGFibGUsIHRocm93IGV4Y2VwdGlvblxuICAgICAgdGhyb3cgbmV3RXJyb3IoJ0NvdWxkIG5vdCBwZXJmb3JtIGRpc2NvdmVyeS4gTm8gcm91dGluZyBzZXJ2ZXJzIGF2YWlsYWJsZS4nLCBTRVJWSUNFX1VOQVZBSUxBQkxFKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9mZXRjaE5ld1JvdXRpbmdUYWJsZVVzaW5nU2VlZFJvdXRlckFkZHJlc3Moa25vd25Sb3V0ZXJzLCBzZWVkUm91dGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hvc3ROYW1lUmVzb2x2ZXIucmVzb2x2ZShzZWVkUm91dGVyKS50aGVuKHJlc29sdmVkUm91dGVyQWRkcmVzc2VzID0+IHtcbiAgICAgIC8vIGZpbHRlciBvdXQgYWxsIGFkZHJlc3NlcyB0aGF0IHdlJ3ZlIGFscmVhZHkgdHJpZWRcbiAgICAgIGNvbnN0IG5ld0FkZHJlc3NlcyA9IHJlc29sdmVkUm91dGVyQWRkcmVzc2VzLmZpbHRlcihhZGRyZXNzID0+IGtub3duUm91dGVycy5pbmRleE9mKGFkZHJlc3MpIDwgMCk7XG4gICAgICByZXR1cm4gdGhpcy5fZmV0Y2hOZXdSb3V0aW5nVGFibGUobmV3QWRkcmVzc2VzLCBudWxsKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9mZXRjaE5ld1JvdXRpbmdUYWJsZShyb3V0ZXJBZGRyZXNzZXMsIHJvdXRpbmdUYWJsZSkge1xuICAgIHJldHVybiByb3V0ZXJBZGRyZXNzZXMucmVkdWNlKChyZWZyZXNoZWRUYWJsZVByb21pc2UsIGN1cnJlbnRSb3V0ZXIsIGN1cnJlbnRJbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHJlZnJlc2hlZFRhYmxlUHJvbWlzZS50aGVuKG5ld1JvdXRpbmdUYWJsZSA9PiB7XG4gICAgICAgIGlmIChuZXdSb3V0aW5nVGFibGUpIHtcbiAgICAgICAgICBpZiAoIW5ld1JvdXRpbmdUYWJsZS53cml0ZXJzLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgLy8gdmFsaWQgcm91dGluZyB0YWJsZSB3YXMgZmV0Y2hlZCAtIGp1c3QgcmV0dXJuIGl0LCB0cnkgbmV4dCByb3V0ZXIgb3RoZXJ3aXNlXG4gICAgICAgICAgICByZXR1cm4gbmV3Um91dGluZ1RhYmxlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyByZXR1cm5lZCByb3V0aW5nIHRhYmxlIHdhcyB1bmRlZmluZWQsIHRoaXMgbWVhbnMgYSBjb25uZWN0aW9uIGVycm9yIGhhcHBlbmVkIGFuZCB3ZSBuZWVkIHRvIGZvcmdldCB0aGVcbiAgICAgICAgICAvLyBwcmV2aW91cyByb3V0ZXIgYW5kIHRyeSB0aGUgbmV4dCBvbmVcbiAgICAgICAgICBjb25zdCBwcmV2aW91c1JvdXRlckluZGV4ID0gY3VycmVudEluZGV4IC0gMTtcbiAgICAgICAgICBMb2FkQmFsYW5jZXIuX2ZvcmdldFJvdXRlcihyb3V0aW5nVGFibGUsIHJvdXRlckFkZHJlc3NlcywgcHJldmlvdXNSb3V0ZXJJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0cnkgbmV4dCByb3V0ZXJcbiAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuX2NyZWF0ZVNlc3Npb25Gb3JSZWRpc2NvdmVyeShjdXJyZW50Um91dGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlzY292ZXJ5Lmxvb2t1cFJvdXRpbmdUYWJsZU9uUm91dGVyKHNlc3Npb24sIGN1cnJlbnRSb3V0ZXIpO1xuICAgICAgfSk7XG4gICAgfSwgUHJvbWlzZS5yZXNvbHZlKG51bGwpKTtcbiAgfVxuXG4gIF9jcmVhdGVTZXNzaW9uRm9yUmVkaXNjb3Zlcnkocm91dGVyQWRkcmVzcykge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uUG9vbC5hY3F1aXJlKHJvdXRlckFkZHJlc3MpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm92aWRlciA9IG5ldyBTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIoY29ubmVjdGlvblByb21pc2UpO1xuICAgIHJldHVybiBuZXcgU2Vzc2lvbihSRUFELCBjb25uZWN0aW9uUHJvdmlkZXIpO1xuICB9XG5cbiAgX3VwZGF0ZVJvdXRpbmdUYWJsZShuZXdSb3V0aW5nVGFibGUpIHtcbiAgICBjb25zdCBjdXJyZW50Um91dGluZ1RhYmxlID0gdGhpcy5fcm91dGluZ1RhYmxlO1xuXG4gICAgLy8gY2xvc2Ugb2xkIGNvbm5lY3Rpb25zIHRvIHNlcnZlcnMgbm90IHByZXNlbnQgaW4gdGhlIG5ldyByb3V0aW5nIHRhYmxlXG4gICAgY29uc3Qgc3RhbGVTZXJ2ZXJzID0gY3VycmVudFJvdXRpbmdUYWJsZS5zZXJ2ZXJzRGlmZihuZXdSb3V0aW5nVGFibGUpO1xuICAgIHN0YWxlU2VydmVycy5mb3JFYWNoKHNlcnZlciA9PiB0aGlzLl9jb25uZWN0aW9uUG9vbC5wdXJnZShzZXJ2ZXIpKTtcblxuICAgIC8vIG1ha2UgdGhpcyBkcml2ZXIgaW5zdGFuY2UgYXdhcmUgb2YgdGhlIG5ldyB0YWJsZVxuICAgIHRoaXMuX3JvdXRpbmdUYWJsZSA9IG5ld1JvdXRpbmdUYWJsZTtcbiAgfVxuXG4gIHN0YXRpYyBfaXNWYWxpZFJvdXRpbmdUYWJsZShyb3V0aW5nVGFibGUpIHtcbiAgICByZXR1cm4gcm91dGluZ1RhYmxlICYmICFyb3V0aW5nVGFibGUud3JpdGVycy5pc0VtcHR5KCk7XG4gIH1cblxuICBzdGF0aWMgX2ZvcmdldFJvdXRlcihyb3V0aW5nVGFibGUsIHJvdXRlcnNBcnJheSwgcm91dGVySW5kZXgpIHtcbiAgICBjb25zdCBhZGRyZXNzID0gcm91dGVyc0FycmF5W3JvdXRlckluZGV4XTtcbiAgICBpZiAocm91dGluZ1RhYmxlICYmIGFkZHJlc3MpIHtcbiAgICAgIHJvdXRpbmdUYWJsZS5mb3JnZXRSb3V0ZXIoYWRkcmVzcyk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIF9jcmVhdGVIb3N0TmFtZVJlc29sdmVyKCkge1xuICAgIGlmIChoYXNGZWF0dXJlKCdkbnNfbG9va3VwJykpIHtcbiAgICAgIHJldHVybiBuZXcgRG5zSG9zdE5hbWVSZXNvbHZlcigpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IER1bW15SG9zdE5hbWVSZXNvbHZlcigpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIgZXh0ZW5kcyBDb25uZWN0aW9uUHJvdmlkZXIge1xuXG4gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb25Qcm9taXNlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9jb25uZWN0aW9uUHJvbWlzZSA9IGNvbm5lY3Rpb25Qcm9taXNlO1xuICB9XG5cbiAgYWNxdWlyZUNvbm5lY3Rpb24obW9kZSkge1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm9taXNlID0gdGhpcy5fY29ubmVjdGlvblByb21pc2U7XG4gICAgdGhpcy5fY29ubmVjdGlvblByb21pc2UgPSBudWxsO1xuICAgIHJldHVybiBjb25uZWN0aW9uUHJvbWlzZTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgV2ViU29ja2V0Q2hhbm5lbCBmcm9tICcuL2NoLXdlYnNvY2tldCc7XG5pbXBvcnQgTm9kZUNoYW5uZWwgZnJvbSAnLi9jaC1ub2RlJztcbmltcG9ydCB7Q2h1bmtlciwgRGVjaHVua2VyfSBmcm9tICcuL2NodW5raW5nJztcbmltcG9ydCBoYXNGZWF0dXJlIGZyb20gJy4vZmVhdHVyZXMnO1xuaW1wb3J0IHtQYWNrZXIsIFVucGFja2VyfSBmcm9tICcuL3BhY2tzdHJlYW0nO1xuaW1wb3J0IHthbGxvY30gZnJvbSAnLi9idWYnO1xuaW1wb3J0IHtOb2RlLCBQYXRoLCBQYXRoU2VnbWVudCwgUmVsYXRpb25zaGlwLCBVbmJvdW5kUmVsYXRpb25zaGlwfSBmcm9tICcuLi9ncmFwaC10eXBlcyc7XG5pbXBvcnQge25ld0Vycm9yfSBmcm9tICcuLy4uL2Vycm9yJztcblxubGV0IENoYW5uZWw7XG5pZiggTm9kZUNoYW5uZWwuYXZhaWxhYmxlICkge1xuICBDaGFubmVsID0gTm9kZUNoYW5uZWwuY2hhbm5lbDtcbn1cbmVsc2UgaWYoIFdlYlNvY2tldENoYW5uZWwuYXZhaWxhYmxlICkge1xuICAgIENoYW5uZWwgPSBXZWJTb2NrZXRDaGFubmVsLmNoYW5uZWw7XG59XG5lbHNlIHtcbiAgICB0aHJvdyBuZXdFcnJvcihcIkZhdGFsOiBObyBjb21wYXRpYmxlIHRyYW5zcG9ydCBhdmFpbGFibGUuIE5lZWQgdG8gcnVuIG9uIGEgcGxhdGZvcm0gd2l0aCB0aGUgV2ViU29ja2V0IEFQSS5cIik7XG59XG5cblxubGV0XG4vLyBTaWduYXR1cmUgYnl0ZXMgZm9yIGVhY2ggbWVzc2FnZSB0eXBlXG5JTklUID0gMHgwMSwgICAgICAgICAgICAvLyAwMDAwIDAwMDEgLy8gSU5JVCA8dXNlcl9hZ2VudD5cbkFDS19GQUlMVVJFID0gMHgwRSwgICAgIC8vIDAwMDAgMTExMCAvLyBBQ0tfRkFJTFVSRVxuUkVTRVQgPSAweDBGLCAgICAgICAgICAgLy8gMDAwMCAxMTExIC8vIFJFU0VUXG5SVU4gPSAweDEwLCAgICAgICAgICAgICAvLyAwMDAxIDAwMDAgLy8gUlVOIDxzdGF0ZW1lbnQ+IDxwYXJhbWV0ZXJzPlxuRElTQ0FSRF9BTEwgPSAweDJGLCAgICAgLy8gMDAxMCAxMTExIC8vIERJU0NBUkQgKlxuUFVMTF9BTEwgPSAweDNGLCAgICAgICAgLy8gMDAxMSAxMTExIC8vIFBVTEwgKlxuU1VDQ0VTUyA9IDB4NzAsICAgICAgICAgLy8gMDExMSAwMDAwIC8vIFNVQ0NFU1MgPG1ldGFkYXRhPlxuUkVDT1JEID0gMHg3MSwgICAgICAgICAgLy8gMDExMSAwMDAxIC8vIFJFQ09SRCA8dmFsdWU+XG5JR05PUkVEID0gMHg3RSwgICAgICAgICAvLyAwMTExIDExMTAgLy8gSUdOT1JFRCA8bWV0YWRhdGE+XG5GQUlMVVJFID0gMHg3RiwgICAgICAgICAvLyAwMTExIDExMTEgLy8gRkFJTFVSRSA8bWV0YWRhdGE+XG5cbi8vIFNpZ25hdHVyZSBieXRlcyBmb3IgaGlnaGVyLWxldmVsIGdyYXBoIG9iamVjdHNcbk5PREUgPSAweDRFLFxuUkVMQVRJT05TSElQID0gMHg1MixcblVOQk9VTkRfUkVMQVRJT05TSElQID0gMHg3MixcblBBVEggPSAweDUwLFxuLy9zZW50IGJlZm9yZSB2ZXJzaW9uIG5lZ290aWF0aW9uXG5NQUdJQ19QUkVBTUJMRSA9IDB4NjA2MEIwMTcsXG5ERUJVRyA9IGZhbHNlO1xuXG5sZXQgVVJMUkVHRVggPSBuZXcgUmVnRXhwKFtcbiAgXCIoW14vXSsvLyk/XCIsICAgICAgICAgIC8vIHNjaGVtZVxuICBcIigoW146Lz8jXSopXCIsICAgICAgLy8gaG9zdG5hbWVcbiAgXCIoPzo6KFswLTldKykpPylcIiwgIC8vIHBvcnQgKG9wdGlvbmFsKVxuICBcIi4qXCJdLmpvaW4oXCJcIikpOyAgICAgLy8gZXZlcnl0aGluZyBlbHNlXG5cbmZ1bmN0aW9uIHBhcnNlU2NoZW1lKCB1cmwgKSB7XG4gIGxldCBzY2hlbWUgPSB1cmwubWF0Y2goVVJMUkVHRVgpWzFdIHx8ICcnO1xuICByZXR1cm4gc2NoZW1lLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVXJsKHVybCkge1xuICByZXR1cm4gdXJsLm1hdGNoKCBVUkxSRUdFWCApWzJdO1xufVxuXG5mdW5jdGlvbiBwYXJzZUhvc3QoIHVybCApIHtcbiAgcmV0dXJuIHVybC5tYXRjaCggVVJMUkVHRVggKVszXTtcbn1cblxuZnVuY3Rpb24gcGFyc2VQb3J0KCB1cmwgKSB7XG4gIHJldHVybiB1cmwubWF0Y2goIFVSTFJFR0VYIClbNF07XG59XG5cbi8qKlxuICogVmVyeSBydWRpbWVudGFyeSBsb2cgaGFuZGxpbmcsIHNob3VsZCBwcm9iYWJseSBiZSByZXBsYWNlZCBieSBzb21ldGhpbmcgcHJvcGVyIGF0IHNvbWUgcG9pbnQuXG4gKiBAcGFyYW0gYWN0b3IgdGhlIHBhcnQgdGhhdCBzZW50IHRoZSBtZXNzYWdlLCAnUycgZm9yIHNlcnZlciBhbmQgJ0MnIGZvciBjbGllbnRcbiAqIEBwYXJhbSBtc2cgdGhlIGJvbHQgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBsb2coYWN0b3IsIG1zZykge1xuICBpZiAoREVCVUcpIHtcbiAgICBmb3IodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtc2cgKz0gXCIgXCIgKyBKU09OLnN0cmluZ2lmeShhcmd1bWVudHNbaV0pO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhhY3RvciArIFwiOlwiICsgbXNnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBOT19PUCgpe31cblxubGV0IE5PX09QX09CU0VSVkVSID0ge1xuICBvbk5leHQgOiBOT19PUCxcbiAgb25Db21wbGV0ZWQgOiBOT19PUCxcbiAgb25FcnJvciA6IE5PX09QXG59O1xuXG4vKiogTWFwcyBmcm9tIHBhY2tzdHJlYW0gc3RydWN0dXJlcyB0byBOZW80aiBkb21haW4gb2JqZWN0cyAqL1xubGV0IF9tYXBwZXJzID0ge1xuICBub2RlIDogKCB1bnBhY2tlciwgYnVmICkgPT4ge1xuICAgIHJldHVybiBuZXcgTm9kZShcbiAgICAgIHVucGFja2VyLnVucGFjayhidWYpLCAvLyBJZGVudGl0eVxuICAgICAgdW5wYWNrZXIudW5wYWNrKGJ1ZiksIC8vIExhYmVsc1xuICAgICAgdW5wYWNrZXIudW5wYWNrKGJ1ZikgIC8vIFByb3BlcnRpZXNcbiAgICApO1xuICB9LFxuICByZWwgOiAoIHVucGFja2VyLCBidWYgKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBSZWxhdGlvbnNoaXAoXG4gICAgICB1bnBhY2tlci51bnBhY2soYnVmKSwgIC8vIElkZW50aXR5XG4gICAgICB1bnBhY2tlci51bnBhY2soYnVmKSwgIC8vIFN0YXJ0IE5vZGUgSWRlbnRpdHlcbiAgICAgIHVucGFja2VyLnVucGFjayhidWYpLCAgLy8gRW5kIE5vZGUgSWRlbnRpdHlcbiAgICAgIHVucGFja2VyLnVucGFjayhidWYpLCAgLy8gVHlwZVxuICAgICAgdW5wYWNrZXIudW5wYWNrKGJ1ZikgLy8gUHJvcGVydGllc1xuICAgICk7XG4gIH0sXG4gIHVuYm91bmRSZWwgOiAoIHVucGFja2VyLCBidWYgKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBVbmJvdW5kUmVsYXRpb25zaGlwKFxuICAgICAgdW5wYWNrZXIudW5wYWNrKGJ1ZiksICAvLyBJZGVudGl0eVxuICAgICAgdW5wYWNrZXIudW5wYWNrKGJ1ZiksICAvLyBUeXBlXG4gICAgICB1bnBhY2tlci51bnBhY2soYnVmKSAvLyBQcm9wZXJ0aWVzXG4gICAgKTtcbiAgfSxcbiAgcGF0aCA6ICggdW5wYWNrZXIsIGJ1ZiApID0+IHtcbiAgICBsZXQgbm9kZXMgPSB1bnBhY2tlci51bnBhY2soYnVmKSxcbiAgICAgICAgcmVscyA9IHVucGFja2VyLnVucGFjayhidWYpLFxuICAgICAgICBzZXF1ZW5jZSA9IHVucGFja2VyLnVucGFjayhidWYpO1xuICAgIGxldCBwcmV2Tm9kZSA9IG5vZGVzWzBdLFxuICAgICAgICBzZWdtZW50cyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXF1ZW5jZS5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBsZXQgcmVsSW5kZXggPSBzZXF1ZW5jZVtpXSxcbiAgICAgICAgICAgIG5leHROb2RlID0gbm9kZXNbc2VxdWVuY2VbaSArIDFdXSxcbiAgICAgICAgICAgIHJlbDtcbiAgICAgICAgaWYgKHJlbEluZGV4ID4gMCkge1xuICAgICAgICAgICAgcmVsID0gcmVsc1tyZWxJbmRleCAtIDFdO1xuICAgICAgICAgICAgaWYoIHJlbCBpbnN0YW5jZW9mIFVuYm91bmRSZWxhdGlvbnNoaXAgKSB7XG4gICAgICAgICAgICAgIC8vIFRvIGF2b2lkIGR1cGxpY2F0aW9uLCByZWxhdGlvbnNoaXBzIGluIGEgcGF0aCBkbyBub3QgY29udGFpblxuICAgICAgICAgICAgICAvLyBpbmZvcm1hdGlvbiBhYm91dCB0aGVpciBzdGFydCBhbmQgZW5kIG5vZGVzLCB0aGF0J3MgaW5zdGVhZFxuICAgICAgICAgICAgICAvLyBpbmZlcnJlZCBmcm9tIHRoZSBwYXRoIHNlcXVlbmNlLiBUaGlzIGlzIHVzIGluZmVycmluZyAoYW5kLFxuICAgICAgICAgICAgICAvLyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyByZW1lbWJlcmluZykgdGhlIHN0YXJ0L2VuZCBvZiBhIHJlbC5cbiAgICAgICAgICAgICAgcmVsc1tyZWxJbmRleCAtIDFdID0gcmVsID0gcmVsLmJpbmQocHJldk5vZGUuaWRlbnRpdHksIG5leHROb2RlLmlkZW50aXR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbCA9IHJlbHNbLXJlbEluZGV4IC0gMV07XG4gICAgICAgICAgICBpZiggcmVsIGluc3RhbmNlb2YgVW5ib3VuZFJlbGF0aW9uc2hpcCApIHtcbiAgICAgICAgICAgICAgLy8gU2VlIGFib3ZlXG4gICAgICAgICAgICAgIHJlbHNbLXJlbEluZGV4IC0gMV0gPSByZWwgPSByZWwuYmluZChuZXh0Tm9kZS5pZGVudGl0eSwgcHJldk5vZGUuaWRlbnRpdHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIERvbmUgaHlkcmF0aW5nIG9uZSBwYXRoIHNlZ21lbnQuXG4gICAgICAgIHNlZ21lbnRzLnB1c2goIG5ldyBQYXRoU2VnbWVudCggcHJldk5vZGUsIHJlbCwgbmV4dE5vZGUgKSApO1xuICAgICAgICBwcmV2Tm9kZSA9IG5leHROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFBhdGgobm9kZXNbMF0sIG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdLCAgc2VnbWVudHMgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBBIGNvbm5lY3Rpb24gbWFuYWdlcyBzZW5kaW5nIGFuZCByZWNpZXZpbmcgbWVzc2FnZXMgb3ZlciBhIGNoYW5uZWwuIEFcbiAqIGNvbm5lY3RvciBpcyB2ZXJ5IGNsb3NlbHkgdGllZCB0byB0aGUgQm9sdCBwcm90b2NvbCwgaXQgaW1wbGVtZW50cyB0aGVcbiAqIHNhbWUgbWVzc2FnZSBzdHJ1Y3R1cmUgd2l0aCB2ZXJ5IGxpdHRsZSBmcmlsbHMuIFRoaXMgbWVhbnMgQ29ubmVjdG9ycyBhcmVcbiAqIG5hdHVyYWxseSB0aWVkIHRvIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wsIGFuZCB3ZSBleHBlY3RcbiAqIGFub3RoZXIgbGF5ZXIgd2lsbCBiZSBuZWVkZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSB2ZXJzaW9ucy5cbiAqXG4gKiBUaGUgY29ubmVjdG9yIHRyaWVzIHRvIGJhdGNoIG91dGJvdW5kIG1lc3NhZ2VzIGJ5IHJlcXVpcmluZyBpdHMgdXNlcnNcbiAqIHRvIGNhbGwgJ3N5bmMnIHdoZW4gbWVzc2FnZXMgbmVlZCB0byBiZSBzZW50LCBhbmQgaXQgcm91dGVzIHJlc3BvbnNlXG4gKiBtZXNzYWdlcyBiYWNrIHRvIHRoZSBvcmlnaW5hdG9ycyBvZiB0aGUgcmVxdWVzdHMgdGhhdCBjcmVhdGVkIHRob3NlXG4gKiByZXNwb25zZSBtZXNzYWdlcy5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovXG5jbGFzcyBDb25uZWN0aW9uIHtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSBjaGFubmVsIC0gY2hhbm5lbCB3aXRoIGEgJ3dyaXRlJyBmdW5jdGlvbiBhbmQgYSAnb25tZXNzYWdlJ1xuICAgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrIHByb3BlcnR5XG4gICAqIEBwYXJhbSB1cmwgLSB1cmwgdG8gY29ubmVjdCB0b1xuICAgKi9cbiAgY29uc3RydWN0b3IgKGNoYW5uZWwsIHVybCkge1xuICAgIC8qKlxuICAgICAqIEFuIG9yZGVyZWQgcXVldWUgb2Ygb2JzZXJ2ZXJzLCBlYWNoIGV4Y2hhbmdlIHJlc3BvbnNlICh6ZXJvIG9yIG1vcmVcbiAgICAgKiBSRUNPUkQgbWVzc2FnZXMgZm9sbG93ZWQgYnkgYSBTVUNDRVNTIG1lc3NhZ2UpIHdlIHJlY2lldmUgd2lsbCBiZSByb3V0ZWRcbiAgICAgKiB0byB0aGUgbmV4dCBwZW5kaW5nIG9ic2VydmVyLlxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuICAgIHRoaXMuc2VydmVyID0ge2FkZHJlc3M6IHVybH07XG4gICAgdGhpcy5fcGVuZGluZ09ic2VydmVycyA9IFtdO1xuICAgIHRoaXMuX2N1cnJlbnRPYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9jaCA9IGNoYW5uZWw7XG4gICAgdGhpcy5fZGVjaHVua2VyID0gbmV3IERlY2h1bmtlcigpO1xuICAgIHRoaXMuX2NodW5rZXIgPSBuZXcgQ2h1bmtlciggY2hhbm5lbCApO1xuICAgIHRoaXMuX3BhY2tlciA9IG5ldyBQYWNrZXIoIHRoaXMuX2NodW5rZXIgKTtcbiAgICB0aGlzLl91bnBhY2tlciA9IG5ldyBVbnBhY2tlcigpO1xuXG4gICAgdGhpcy5faXNIYW5kbGluZ0ZhaWx1cmUgPSBmYWxzZTtcbiAgICB0aGlzLl9jdXJyZW50RmFpbHVyZSA9IG51bGw7XG5cbiAgICAvLyBTZXQgdG8gdHJ1ZSBvbiBmYXRhbCBlcnJvcnMsIHRvIGdldCB0aGlzIG91dCBvZiBzZXNzaW9uIHBvb2wuXG4gICAgdGhpcy5faXNCcm9rZW4gPSBmYWxzZTtcblxuICAgIC8vIEZvciBkZXNlcmlhbGl6YXRpb24sIGV4cGxhaW4gdG8gdGhlIHVucGFja2VyIGhvdyB0byB1bnBhY2sgbm9kZXMsIHJlbHMsIHBhdGhzO1xuICAgIHRoaXMuX3VucGFja2VyLnN0cnVjdE1hcHBlcnNbTk9ERV0gPSBfbWFwcGVycy5ub2RlO1xuICAgIHRoaXMuX3VucGFja2VyLnN0cnVjdE1hcHBlcnNbUkVMQVRJT05TSElQXSA9IF9tYXBwZXJzLnJlbDtcbiAgICB0aGlzLl91bnBhY2tlci5zdHJ1Y3RNYXBwZXJzW1VOQk9VTkRfUkVMQVRJT05TSElQXSA9IF9tYXBwZXJzLnVuYm91bmRSZWw7XG4gICAgdGhpcy5fdW5wYWNrZXIuc3RydWN0TWFwcGVyc1tQQVRIXSA9IF9tYXBwZXJzLnBhdGg7XG5cbiAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgLy8gVE9ETzogVXNpbmcgYG9ubWVzc2FnZWAgYW5kIGBvbmVycm9yYCBjYW1lIGZyb20gdGhlIFdlYlNvY2tldCBBUEksXG4gICAgLy8gaXQgcmVhZHMgcG9vcmx5IGFuZCBoYXMgc2V2ZXJhbCBhbm5veWluZyBkcmF3YmFja3MuIFN3YXAgdG8gaGF2aW5nXG4gICAgLy8gQ2hhbm5lbCBleHRlbmQgRXZlbnRFbWl0dGVyIGluc3RlYWQsIHRoZW4gd2UgY2FuIHVzZSBgb24oJ2RhdGEnLC4uKWBcbiAgICB0aGlzLl9jaC5vbm1lc3NhZ2UgPSAoYnVmKSA9PiB7XG4gICAgICBsZXQgcHJvcG9zZWQgPSBidWYucmVhZEludDMyKCk7XG4gICAgICBpZiggcHJvcG9zZWQgPT0gMSApIHtcbiAgICAgICAgLy8gT2ssIHByb3RvY29sIHJ1bm5pbmcuIFNpbXBseSBmb3J3YXJkIGFsbCBtZXNzYWdlcyBwYXN0XG4gICAgICAgIC8vIHRoaXMgdG8gdGhlIGRlY2h1bmtlclxuICAgICAgICBzZWxmLl9jaC5vbm1lc3NhZ2UgPSAoYnVmKSA9PiB7XG4gICAgICAgICAgc2VsZi5fZGVjaHVua2VyLndyaXRlKGJ1Zik7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYoIGJ1Zi5oYXNSZW1haW5pbmcoKSApIHtcbiAgICAgICAgICBzZWxmLl9kZWNodW5rZXIud3JpdGUoYnVmLnJlYWRTbGljZSggYnVmLnJlbWFpbmluZygpICkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHByb3Bvc2VkID09IDEyMTM0ODYxNjApIHsvL3NlcnZlciByZXNwb25kZWQgMTIxMzQ4NjE2MCA9PSAweDQ4NTQ1NDUwID09IFwiSFRUUFwiXG4gICAgICAgIHNlbGYuX2hhbmRsZUZhdGFsRXJyb3IobmV3RXJyb3IoXCJTZXJ2ZXIgcmVzcG9uZGVkIEhUVFAuIE1ha2Ugc3VyZSB5b3UgYXJlIG5vdCB0cnlpbmcgdG8gY29ubmVjdCB0byB0aGUgaHR0cCBlbmRwb2ludCBcIiArXG4gICAgICAgICAgXCIoSFRUUCBkZWZhdWx0cyB0byBwb3J0IDc0NzQgd2hlcmVhcyBCT0xUIGRlZmF1bHRzIHRvIHBvcnQgNzY4NylcIikpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHNlbGYuX2hhbmRsZUZhdGFsRXJyb3IobmV3RXJyb3IoXCJVbmtub3duIEJvbHQgcHJvdG9jb2wgdmVyc2lvbjogXCIgKyBwcm9wb3NlZCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBMaXN0ZW4gdG8gY29ubmVjdGlvbiBlcnJvcnMuIEltcG9ydGFudCBub3RlIHRob3VnaDtcbiAgICAvLyBJbiBzb21lIGNhc2VzIHdlIHdpbGwgZ2V0IGEgY2hhbm5lbCB0aGF0IGlzIGFscmVhZHkgYnJva2VuIChmb3IgaW5zdGFuY2UsXG4gICAgLy8gaWYgdGhlIHVzZXIgcGFzc2VzIGludmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb25zKS4gSW4gdGhpcyBjYXNlLCBvbmVycm9yXG4gICAgLy8gd2lsbCBoYXZlIFwiYWxyZWFkeSB0cmlnZ2VyZWRcIiBiZWZvcmUgd2UgYWRkIG91dCBsaXN0ZW5lciBoZXJlLiBTbyB0aGUgbGluZVxuICAgIC8vIGJlbG93IGFsc28gY2hlY2tzIHRoYXQgdGhlIGNoYW5uZWwgaXMgbm90IGFscmVhZHkgZmFpbGVkLiBUaGlzIGNvdWxkIGJlIG5pY2VseVxuICAgIC8vIGVuY2Fwc3VsYXRlZCBpbnRvIENoYW5uZWwgaWYgd2UgdXNlZCBgb24oJ2Vycm9yJywgLi4pYCByYXRoZXIgdGhhbiBgb25lcnJvcj0uLmBcbiAgICAvLyBhcyBvdXRsaW5lZCBpbiB0aGUgY29tbWVudCBhYm91dCBgb25tZXNzYWdlYCBmdXJ0aGVyIHVwIGluIHRoaXMgZmlsZS5cbiAgICB0aGlzLl9jaC5vbmVycm9yID0gdGhpcy5faGFuZGxlRmF0YWxFcnJvci5iaW5kKHRoaXMpO1xuICAgIGlmKCB0aGlzLl9jaC5fZXJyb3IgKSB7XG4gICAgICB0aGlzLl9oYW5kbGVGYXRhbEVycm9yKHRoaXMuX2NoLl9lcnJvcik7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVjaHVua2VyLm9ubWVzc2FnZSA9IChidWYpID0+IHtcbiAgICAgIHNlbGYuX2hhbmRsZU1lc3NhZ2UoIHNlbGYuX3VucGFja2VyLnVucGFjayggYnVmICkgKTtcbiAgICB9O1xuXG4gICAgbGV0IGhhbmRzaGFrZSA9IGFsbG9jKCA1ICogNCApO1xuICAgIC8vbWFnaWMgcHJlYW1ibGVcbiAgICBoYW5kc2hha2Uud3JpdGVJbnQzMiggTUFHSUNfUFJFQU1CTEUgKTtcbiAgICAvL3Byb3Bvc2VkIHZlcnNpb25zXG4gICAgaGFuZHNoYWtlLndyaXRlSW50MzIoIDEgKTtcbiAgICBoYW5kc2hha2Uud3JpdGVJbnQzMiggMCApO1xuICAgIGhhbmRzaGFrZS53cml0ZUludDMyKCAwICk7XG4gICAgaGFuZHNoYWtlLndyaXRlSW50MzIoIDAgKTtcbiAgICBoYW5kc2hha2UucmVzZXQoKTtcbiAgICB0aGlzLl9jaC53cml0ZSggaGFuZHNoYWtlICk7XG4gIH1cblxuICAvKipcbiAgICogXCJGYXRhbFwiIG1lYW5zIHRoZSBjb25uZWN0aW9uIGlzIGRlYWQuIE9ubHkgY2FsbCB0aGlzIGlmIHNvbWV0aGluZ1xuICAgKiBoYXBwZW5zIHRoYXQgY2Fubm90IGJlIHJlY292ZXJlZCBmcm9tLiBUaGlzIHdpbGwgbGVhZCB0byBhbGwgc3Vic2NyaWJlcnNcbiAgICogZmFpbGluZywgYW5kIHRoZSBjb25uZWN0aW9uIGdldHRpbmcgZWplY3RlZCBmcm9tIHRoZSBzZXNzaW9uIHBvb2wuXG4gICAqXG4gICAqIEBwYXJhbSBlcnIgYW4gZXJyb3Igb2JqZWN0LCBmb3J3YXJkZWQgdG8gYWxsIGN1cnJlbnQgYW5kIGZ1dHVyZSBzdWJzY3JpYmVyc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hhbmRsZUZhdGFsRXJyb3IoIGVyciApIHtcbiAgICB0aGlzLl9pc0Jyb2tlbiA9IHRydWU7XG4gICAgdGhpcy5fZXJyb3IgPSBlcnI7XG4gICAgaWYoIHRoaXMuX2N1cnJlbnRPYnNlcnZlciAmJiB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIub25FcnJvciApIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRPYnNlcnZlci5vbkVycm9yKGVycik7XG4gICAgfVxuICAgIHdoaWxlKCB0aGlzLl9wZW5kaW5nT2JzZXJ2ZXJzLmxlbmd0aCA+IDAgKSB7XG4gICAgICBsZXQgb2JzZXJ2ZXIgPSB0aGlzLl9wZW5kaW5nT2JzZXJ2ZXJzLnNoaWZ0KCk7XG4gICAgICBpZiggb2JzZXJ2ZXIgJiYgb2JzZXJ2ZXIub25FcnJvciApIHtcbiAgICAgICAgb2JzZXJ2ZXIub25FcnJvcihlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9oYW5kbGVNZXNzYWdlKCBtc2cgKSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IG1zZy5maWVsZHNbMF07XG5cbiAgICBzd2l0Y2goIG1zZy5zaWduYXR1cmUgKSB7XG4gICAgICBjYXNlIFJFQ09SRDpcbiAgICAgICAgbG9nKFwiU1wiLCBcIlJFQ09SRFwiLCBtc2cpO1xuICAgICAgICB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIub25OZXh0KCBwYXlsb2FkICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTVUNDRVNTOlxuICAgICAgICBsb2coXCJTXCIsIFwiU1VDQ0VTU1wiLCBtc2cpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRPYnNlcnZlci5vbkNvbXBsZXRlZCggcGF5bG9hZCApO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRPYnNlcnZlciA9IHRoaXMuX3BlbmRpbmdPYnNlcnZlcnMuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRkFJTFVSRTpcbiAgICAgICAgbG9nKFwiU1wiLCBcIkZBSUxVUkVcIiwgbXNnKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50RmFpbHVyZSA9IG5ld0Vycm9yKHBheWxvYWQubWVzc2FnZSwgcGF5bG9hZC5jb2RlKTtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIub25FcnJvciggdGhpcy5fY3VycmVudEZhaWx1cmUgKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIgPSB0aGlzLl9wZW5kaW5nT2JzZXJ2ZXJzLnNoaWZ0KCk7XG4gICAgICAgICAgLy8gVGhpbmdzIGFyZSBub3cgYnJva2VuLiBQZW5kaW5nIG9ic2VydmVycyB3aWxsIGdldCBGQUlMVVJFIG1lc3NhZ2VzIHJvdXRlZCB1bnRpbFxuICAgICAgICAgIC8vIFdlIGFyZSBkb25lIGhhbmRsaW5nIHRoaXMgZmFpbHVyZS5cbiAgICAgICAgICBpZiggIXRoaXMuX2lzSGFuZGxpbmdGYWlsdXJlICkge1xuICAgICAgICAgICAgdGhpcy5faXNIYW5kbGluZ0ZhaWx1cmUgPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBpc0hhbmRsaW5nRmFpbHVyZSB3YXMgZmFsc2UsIG1lYW5pbmcgdGhpcyBpcyB0aGUgZmlyc3QgZmFpbHVyZSBtZXNzYWdlXG4gICAgICAgICAgICAvLyB3ZSBzZWUgZnJvbSB0aGlzIGZhaWx1cmUuIFdlIG1heSBzZWUgc2V2ZXJhbCBvdGhlcnMsIG9uZSBmb3IgZWFjaCBtZXNzYWdlXG4gICAgICAgICAgICAvLyB3ZSBoYWQgXCJvcHRpbWlzdGljYWxseVwiIGFscmVhZHkgc2VudCBhZnRlciB3aGF0ZXZlciBpdCB3YXMgdGhhdCBmYWlsZWQuXG4gICAgICAgICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gYW5kIG5lZWQgdG8gQUNLIHRoZSBmaXJzdCBvbmUsIHdoaWNoIGlzIHdoeSB3ZSBhcmUgdHJhY2tpbmdcbiAgICAgICAgICAgIC8vIHRoaXMgX2lzSGFuZGxpbmdGYWlsdXJlIHRoaW5nLlxuICAgICAgICAgICAgdGhpcy5fYWNrRmFpbHVyZSh7XG4gICAgICAgICAgICAgIG9uTmV4dDogTk9fT1AsXG4gICAgICAgICAgICAgIG9uRXJyb3I6IE5PX09QLFxuICAgICAgICAgICAgICBvbkNvbXBsZXRlZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzSGFuZGxpbmdGYWlsdXJlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEZhaWx1cmUgPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElHTk9SRUQ6XG4gICAgICAgIGxvZyhcIlNcIiwgXCJJR05PUkVEXCIsIG1zZyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRGYWlsdXJlICYmIHRoaXMuX2N1cnJlbnRPYnNlcnZlci5vbkVycm9yKVxuICAgICAgICAgICAgdGhpcy5fY3VycmVudE9ic2VydmVyLm9uRXJyb3IodGhpcy5fY3VycmVudEZhaWx1cmUpO1xuICAgICAgICAgIGVsc2UgaWYodGhpcy5fY3VycmVudE9ic2VydmVyLm9uRXJyb3IpXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIub25FcnJvcihwYXlsb2FkKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIgPSB0aGlzLl9wZW5kaW5nT2JzZXJ2ZXJzLnNoaWZ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLl9oYW5kbGVGYXRhbEVycm9yKG5ld0Vycm9yKFwiVW5rbm93biBCb2x0IHByb3RvY29sIG1lc3NhZ2U6IFwiICsgbXNnKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFF1ZXVlIGFuIElOSVQtbWVzc2FnZSB0byBiZSBzZW50IHRvIHRoZSBkYXRhYmFzZSAqL1xuICBpbml0aWFsaXplKCBjbGllbnROYW1lLCB0b2tlbiwgb2JzZXJ2ZXIgKSB7XG4gICAgbG9nKFwiQ1wiLCBcIklOSVRcIiwgY2xpZW50TmFtZSwgdG9rZW4pO1xuICAgIHRoaXMuX3F1ZXVlT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuICAgIHRoaXMuX3BhY2tlci5wYWNrU3RydWN0KCBJTklULCBbdGhpcy5fcGFja2FibGUoY2xpZW50TmFtZSksIHRoaXMuX3BhY2thYmxlKHRva2VuKV0sXG4gICAgICAoZXJyKSA9PiB0aGlzLl9oYW5kbGVGYXRhbEVycm9yKGVycikgKTtcbiAgICB0aGlzLl9jaHVua2VyLm1lc3NhZ2VCb3VuZGFyeSgpO1xuICAgIHRoaXMuc3luYygpO1xuICB9XG5cbiAgLyoqIFF1ZXVlIGEgUlVOLW1lc3NhZ2UgdG8gYmUgc2VudCB0byB0aGUgZGF0YWJhc2UgKi9cbiAgcnVuKCBzdGF0ZW1lbnQsIHBhcmFtcywgb2JzZXJ2ZXIgKSB7XG4gICAgbG9nKFwiQ1wiLCBcIlJVTlwiLCBzdGF0ZW1lbnQsIHBhcmFtcyk7XG4gICAgdGhpcy5fcXVldWVPYnNlcnZlcihvYnNlcnZlcik7XG4gICAgdGhpcy5fcGFja2VyLnBhY2tTdHJ1Y3QoIFJVTiwgW3RoaXMuX3BhY2thYmxlKHN0YXRlbWVudCksIHRoaXMuX3BhY2thYmxlKHBhcmFtcyldLFxuICAgICAgKGVycikgPT4gdGhpcy5faGFuZGxlRmF0YWxFcnJvcihlcnIpICApO1xuICAgIHRoaXMuX2NodW5rZXIubWVzc2FnZUJvdW5kYXJ5KCk7XG4gIH1cblxuICAvKiogUXVldWUgYSBQVUxMX0FMTC1tZXNzYWdlIHRvIGJlIHNlbnQgdG8gdGhlIGRhdGFiYXNlICovXG4gIHB1bGxBbGwoIG9ic2VydmVyICkge1xuICAgIGxvZyhcIkNcIiwgXCJQVUxMX0FMTFwiKTtcbiAgICB0aGlzLl9xdWV1ZU9ic2VydmVyKG9ic2VydmVyKTtcbiAgICB0aGlzLl9wYWNrZXIucGFja1N0cnVjdCggUFVMTF9BTEwsIFtdLCAoZXJyKSA9PiB0aGlzLl9oYW5kbGVGYXRhbEVycm9yKGVycikgKTtcbiAgICB0aGlzLl9jaHVua2VyLm1lc3NhZ2VCb3VuZGFyeSgpO1xuICB9XG5cbiAgLyoqIFF1ZXVlIGEgRElTQ0FSRF9BTEwtbWVzc2FnZSB0byBiZSBzZW50IHRvIHRoZSBkYXRhYmFzZSAqL1xuICBkaXNjYXJkQWxsKCBvYnNlcnZlciApIHtcbiAgICBsb2coXCJDXCIsIFwiRElTQ0FSRF9BTExcIik7XG4gICAgdGhpcy5fcXVldWVPYnNlcnZlcihvYnNlcnZlcik7XG4gICAgdGhpcy5fcGFja2VyLnBhY2tTdHJ1Y3QoIERJU0NBUkRfQUxMLCBbXSwgKGVycikgPT4gdGhpcy5faGFuZGxlRmF0YWxFcnJvcihlcnIpICk7XG4gICAgdGhpcy5fY2h1bmtlci5tZXNzYWdlQm91bmRhcnkoKTtcbiAgfVxuXG4gIC8qKiBRdWV1ZSBhIFJFU0VULW1lc3NhZ2UgdG8gYmUgc2VudCB0byB0aGUgZGF0YWJhc2UuIE11dGVzIGZhaWx1cmUgaGFuZGxpbmcuICovXG4gIHJlc2V0QXN5bmMoIG9ic2VydmVyICkge1xuICAgIGxvZyhcIkNcIiwgXCJSRVNFVF9BU1lOQ1wiKTtcbiAgICB0aGlzLl9pc0hhbmRsaW5nRmFpbHVyZSA9IHRydWU7XG4gICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgIGxldCB3cmFwcGVkT2JzID0ge1xuICAgICAgb25OZXh0OiBvYnNlcnZlciA/IG9ic2VydmVyLm9uTmV4dCA6IE5PX09QLFxuICAgICAgb25FcnJvcjogb2JzZXJ2ZXIgPyBvYnNlcnZlci5vbkVycm9yIDogTk9fT1AsXG4gICAgICBvbkNvbXBsZXRlZDogKCkgPT4ge1xuICAgICAgICBzZWxmLl9pc0hhbmRsaW5nRmFpbHVyZSA9IGZhbHNlO1xuICAgICAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgICBvYnNlcnZlci5vbkNvbXBsZXRlZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZU9ic2VydmVyKHdyYXBwZWRPYnMpO1xuICAgIHRoaXMuX3BhY2tlci5wYWNrU3RydWN0KCBSRVNFVCwgW10sIChlcnIpID0+IHRoaXMuX2hhbmRsZUZhdGFsRXJyb3IoZXJyKSApO1xuICAgIHRoaXMuX2NodW5rZXIubWVzc2FnZUJvdW5kYXJ5KCk7XG4gIH1cblxuICAvKiogUXVldWUgYSBSRVNFVC1tZXNzYWdlIHRvIGJlIHNlbnQgdG8gdGhlIGRhdGFiYXNlICovXG4gIHJlc2V0KG9ic2VydmVyKSB7XG4gICAgbG9nKCdDJywgJ1JFU0VUJyk7XG4gICAgdGhpcy5fcXVldWVPYnNlcnZlcihvYnNlcnZlcik7XG4gICAgdGhpcy5fcGFja2VyLnBhY2tTdHJ1Y3QoUkVTRVQsIFtdLCAoZXJyKSA9PiB0aGlzLl9oYW5kbGVGYXRhbEVycm9yKGVycikpO1xuICAgIHRoaXMuX2NodW5rZXIubWVzc2FnZUJvdW5kYXJ5KCk7XG4gIH1cblxuICAvKiogUXVldWUgYSBBQ0tfRkFJTFVSRS1tZXNzYWdlIHRvIGJlIHNlbnQgdG8gdGhlIGRhdGFiYXNlICovXG4gIF9hY2tGYWlsdXJlKCBvYnNlcnZlciApIHtcbiAgICBsb2coXCJDXCIsIFwiQUNLX0ZBSUxVUkVcIik7XG4gICAgdGhpcy5fcXVldWVPYnNlcnZlcihvYnNlcnZlcik7XG4gICAgdGhpcy5fcGFja2VyLnBhY2tTdHJ1Y3QoIEFDS19GQUlMVVJFLCBbXSwgKGVycikgPT4gdGhpcy5faGFuZGxlRmF0YWxFcnJvcihlcnIpICk7XG4gICAgdGhpcy5fY2h1bmtlci5tZXNzYWdlQm91bmRhcnkoKTtcbiAgfVxuXG4gIF9xdWV1ZU9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYoIHRoaXMuX2lzQnJva2VuICkge1xuICAgICAgaWYoIG9ic2VydmVyICYmIG9ic2VydmVyLm9uRXJyb3IgKSB7XG4gICAgICAgIG9ic2VydmVyLm9uRXJyb3IodGhpcy5fZXJyb3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBvYnNlcnZlciA9IG9ic2VydmVyIHx8IE5PX09QX09CU0VSVkVSO1xuICAgIG9ic2VydmVyLm9uQ29tcGxldGVkID0gb2JzZXJ2ZXIub25Db21wbGV0ZWQgfHwgTk9fT1A7XG4gICAgb2JzZXJ2ZXIub25FcnJvciA9IG9ic2VydmVyLm9uRXJyb3IgfHwgTk9fT1A7XG4gICAgb2JzZXJ2ZXIub25OZXh0ID0gb2JzZXJ2ZXIub25OZXh0IHx8IE5PX09QO1xuICAgIGlmKCB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIgPT09IHVuZGVmaW5lZCApIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRPYnNlcnZlciA9IG9ic2VydmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wZW5kaW5nT2JzZXJ2ZXJzLnB1c2goIG9ic2VydmVyICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN5bmNocm9uaXplIC0gZmx1c2ggYWxsIHF1ZXVlZCBvdXRnb2luZyBtZXNzYWdlcyBhbmQgcm91dGUgdGhlaXIgcmVzcG9uc2VzXG4gICAqIHRvIHRoZWlyIHJlc3BlY3RpdmUgaGFuZGxlcnMuXG4gICAqL1xuICBzeW5jKCkge1xuICAgIHRoaXMuX2NodW5rZXIuZmx1c2goKTtcbiAgfVxuXG4gIC8qKiBDaGVjayBpZiB0aGlzIGNvbm5lY3Rpb24gaXMgaW4gd29ya2luZyBjb25kaXRpb24gKi9cbiAgaXNPcGVuKCkge1xuICAgIHJldHVybiAhdGhpcy5faXNCcm9rZW4gJiYgdGhpcy5fY2guX29wZW47XG4gIH1cblxuICBpc0VuY3J5cHRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2guaXNFbmNyeXB0ZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIGNsb3NlIG9uIHRoZSBjaGFubmVsLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYiAtIEZ1bmN0aW9uIHRvIGNhbGwgb24gY2xvc2UuXG4gICAqL1xuICBjbG9zZShjYikge1xuICAgIHRoaXMuX2NoLmNsb3NlKGNiKTtcbiAgfVxuXG4gIF9wYWNrYWJsZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3BhY2tlci5wYWNrYWJsZSh2YWx1ZSwgKGVycikgPT4gdGhpcy5faGFuZGxlRmF0YWxFcnJvcihlcnIpKTtcbiAgfVxuXG4gIHNldFNlcnZlclZlcnNpb24odmVyc2lvbikge1xuICAgIHRoaXMuc2VydmVyLnZlcnNpb24gPSB2ZXJzaW9uO1xuICB9XG59XG5cbi8qKlxuICogQ3JldGUgbmV3IGNvbm5lY3Rpb24gdG8gdGhlIHByb3ZpZGVkIHVybC5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHVybCAtICduZW80aictcHJlZml4ZWQgVVJMIHRvIE5lbzRqIEJvbHQgZW5kcG9pbnRcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWdcbiAqIEByZXR1cm4ge0Nvbm5lY3Rpb259IC0gTmV3IGNvbm5lY3Rpb25cbiAqL1xuZnVuY3Rpb24gY29ubmVjdCggdXJsLCBjb25maWcgPSB7fSkge1xuICBsZXQgQ2ggPSBjb25maWcuY2hhbm5lbCB8fCBDaGFubmVsO1xuICBjb25zdCBob3N0ID0gcGFyc2VIb3N0KHVybCk7XG4gIGNvbnN0IHBvcnQgPSBwYXJzZVBvcnQodXJsKSB8fCA3Njg3O1xuICBjb25zdCBjb21wbGV0ZVVybCA9IGhvc3QgKyAnOicgKyBwb3J0O1xuXG4gIHJldHVybiBuZXcgQ29ubmVjdGlvbiggbmV3IENoKHtcbiAgICBob3N0OiBwYXJzZUhvc3QodXJsKSxcbiAgICBwb3J0OiBwYXJzZVBvcnQodXJsKSB8fCA3Njg3LFxuICAgIC8vIERlZmF1bHQgdG8gdXNpbmcgZW5jcnlwdGlvbiBpZiB0cnVzdC1vbi1maXJzdC11c2UgaXMgYXZhaWxhYmxlXG4gICAgZW5jcnlwdGVkIDogKGNvbmZpZy5lbmNyeXB0ZWQgPT0gbnVsbCkgPyAgaGFzRmVhdHVyZShcInRydXN0X2FsbF9jZXJ0aWZpY2F0ZXNcIikgOiBjb25maWcuZW5jcnlwdGVkLFxuICAgIC8vIERlZmF1bHQgdG8gdXNpbmcgVFJVU1RfQUxMX0NFUlRJRklDQVRFUyBpZiBpdCBpcyBhdmFpbGFibGVcbiAgICB0cnVzdCA6IGNvbmZpZy50cnVzdCB8fCAoaGFzRmVhdHVyZShcInRydXN0X2FsbF9jZXJ0aWZpY2F0ZXNcIikgPyBcIlRSVVNUX0FMTF9DRVJUSUZJQ0FURVNcIiA6IFwiVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVNcIiksXG4gICAgdHJ1c3RlZENlcnRpZmljYXRlcyA6IGNvbmZpZy50cnVzdGVkQ2VydGlmaWNhdGVzIHx8IFtdLFxuICAgIGtub3duSG9zdHMgOiBjb25maWcua25vd25Ib3N0c1xuICB9KSwgY29tcGxldGVVcmwpO1xufVxuXG5leHBvcnQge1xuICAgIGNvbm5lY3QsXG4gICAgcGFyc2VTY2hlbWUsXG4gICAgcGFyc2VVcmwsXG4gICAgcGFyc2VIb3N0LFxuICAgIHBhcnNlUG9ydCxcbiAgICBDb25uZWN0aW9uXG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gQ2VudHJhbCBwbGFjZSB0byBkZXRlY3QgZmVhdHVyZSBzdXBwb3J0IGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybSxcbi8vIGV4cGFuZCBhcyBuZWVkZWQuXG5cbmNvbnN0IEZFQVRVUkVTID0ge1xuICB0cnVzdF9vbl9maXJzdF91c2UgOiAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRoaXMgaXMgaW5zYW5lLiBXZSBhcmUgdmVyaWZ5aW5nIHRoYXQgd2UgaGF2ZSBhIHZlcnNpb24gb2YgZ2V0UGVlckNlcnRpZmljYXRlXG4gICAgICAvLyB0aGF0IHN1cHBvcnRzIHJlYWRpbmcgdGhlIHdob2xlIGNlcnRpZmljYXRlLCBlZyB0aGlzIGNvbW1pdDpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9jb21taXQvMzQ1YzQwYjZcbiAgICAgIGNvbnN0IGdldFBlZXJDZXJ0aWZpY2F0ZUZ1bmN0aW9uID0gcmVxdWlyZSgndGxzJykuVExTU29ja2V0LnByb3RvdHlwZS5nZXRQZWVyQ2VydGlmaWNhdGU7XG4gICAgICBjb25zdCBudW1iZXJPZlBhcmFtZXRlcnMgPSBnZXRQZWVyQ2VydGlmaWNhdGVGdW5jdGlvbi5sZW5ndGg7XG4gICAgICByZXR1cm4gbnVtYmVyT2ZQYXJhbWV0ZXJzID49IDE7XG4gICAgfSBjYXRjaCggZSApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIHRydXN0X2FsbF9jZXJ0aWZpY2F0ZXM6ICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZ2V0UGVlckNlcnRpZmljYXRlRnVuY3Rpb24gPSByZXF1aXJlKCd0bHMnKS5UTFNTb2NrZXQucHJvdG90eXBlLmdldFBlZXJDZXJ0aWZpY2F0ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIGRuc19sb29rdXA6ICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbG9va3VwRnVuY3Rpb24gPSByZXF1aXJlKCdkbnMnKS5sb29rdXA7XG4gICAgICBpZiAobG9va3VwRnVuY3Rpb24gJiYgdHlwZW9mIGxvb2t1cEZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGhhc0ZlYXR1cmUoIG5hbWUgKSB7XG4gIHJldHVybiBGRUFUVVJFU1tuYW1lXSAmJiBGRUFUVVJFU1tuYW1lXSgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNGZWF0dXJlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBSb3VuZFJvYmluQXJyYXkgZnJvbSAnLi9yb3VuZC1yb2Jpbi1hcnJheSc7XG5pbXBvcnQge25ld0Vycm9yLCBQUk9UT0NPTF9FUlJPUiwgU0VSVklDRV9VTkFWQUlMQUJMRX0gZnJvbSAnLi4vZXJyb3InO1xuaW1wb3J0IEludGVnZXIsIHtpbnR9IGZyb20gJy4uL2ludGVnZXInO1xuXG5jb25zdCBQUk9DRURVUkVfQ0FMTCA9ICdDQUxMIGRibXMuY2x1c3Rlci5yb3V0aW5nLmdldFNlcnZlcnMnO1xuY29uc3QgUFJPQ0VEVVJFX05PVF9GT1VORF9DT0RFID0gJ05lby5DbGllbnRFcnJvci5Qcm9jZWR1cmUuUHJvY2VkdXJlTm90Rm91bmQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHZXRTZXJ2ZXJzVXRpbCB7XG5cbiAgY2FsbEdldFNlcnZlcnMoc2Vzc2lvbiwgcm91dGVyQWRkcmVzcykge1xuICAgIHJldHVybiBzZXNzaW9uLnJ1bihQUk9DRURVUkVfQ0FMTCkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgc2Vzc2lvbi5jbG9zZSgpO1xuICAgICAgcmV0dXJuIHJlc3VsdC5yZWNvcmRzO1xuICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGlmIChlcnJvci5jb2RlID09PSBQUk9DRURVUkVfTk9UX0ZPVU5EX0NPREUpIHtcbiAgICAgICAgLy8gdGhyb3cgd2hlbiBnZXRTZXJ2ZXJzIHByb2NlZHVyZSBub3QgZm91bmQgYmVjYXVzZSB0aGlzIGlzIGNsZWFybHkgYSBjb25maWd1cmF0aW9uIGlzc3VlXG4gICAgICAgIHRocm93IG5ld0Vycm9yKCdTZXJ2ZXIgJyArIHJvdXRlckFkZHJlc3MgKyAnIGNvdWxkIG5vdCBwZXJmb3JtIHJvdXRpbmcuICcgK1xuICAgICAgICAgICdNYWtlIHN1cmUgeW91IGFyZSBjb25uZWN0aW5nIHRvIGEgY2F1c2FsIGNsdXN0ZXInLCBTRVJWSUNFX1VOQVZBSUxBQkxFKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBub3RoaW5nIHdoZW4gZmFpbGVkIHRvIGNvbm5lY3QgYmVjYXVzZSBjb2RlIGhpZ2hlciBpbiB0aGUgY2FsbHN0YWNrIGlzIHN0aWxsIGFibGUgdG8gcmV0cnkgd2l0aCBhXG4gICAgICAvLyBkaWZmZXJlbnQgc2Vzc2lvbiB0b3dhcmRzIGEgZGlmZmVyZW50IHJvdXRlclxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG4gIH1cblxuICBwYXJzZVR0bChyZWNvcmQsIHJvdXRlckFkZHJlc3MpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgbm93ID0gaW50KERhdGUubm93KCkpO1xuICAgICAgY29uc3QgZXhwaXJlcyA9IHJlY29yZC5nZXQoJ3R0bCcpLm11bHRpcGx5KDEwMDApLmFkZChub3cpO1xuICAgICAgLy8gaWYgdGhlIHNlcnZlciB1c2VzIGEgcmVhbGx5IGJpZyBleHBpcmUgdGltZSBsaWtlIExvbmcuTUFYX1ZBTFVFIHRoaXMgbWF5IGhhdmUgb3ZlcmZsb3dlZFxuICAgICAgaWYgKGV4cGlyZXMubGVzc1RoYW4obm93KSkge1xuICAgICAgICByZXR1cm4gSW50ZWdlci5NQVhfVkFMVUU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXhwaXJlcztcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3RXJyb3IoXG4gICAgICAgICdVbmFibGUgdG8gcGFyc2UgVFRMIGVudHJ5IGZyb20gcm91dGVyICcgKyByb3V0ZXJBZGRyZXNzICsgJyBmcm9tIHJlY29yZDpcXG4nICsgSlNPTi5zdHJpbmdpZnkocmVjb3JkKSxcbiAgICAgICAgUFJPVE9DT0xfRVJST1IpO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlU2VydmVycyhyZWNvcmQsIHJvdXRlckFkZHJlc3MpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2VydmVycyA9IHJlY29yZC5nZXQoJ3NlcnZlcnMnKTtcblxuICAgICAgY29uc3Qgcm91dGVycyA9IG5ldyBSb3VuZFJvYmluQXJyYXkoKTtcbiAgICAgIGNvbnN0IHJlYWRlcnMgPSBuZXcgUm91bmRSb2JpbkFycmF5KCk7XG4gICAgICBjb25zdCB3cml0ZXJzID0gbmV3IFJvdW5kUm9iaW5BcnJheSgpO1xuXG4gICAgICBzZXJ2ZXJzLmZvckVhY2goc2VydmVyID0+IHtcbiAgICAgICAgY29uc3Qgcm9sZSA9IHNlcnZlclsncm9sZSddO1xuICAgICAgICBjb25zdCBhZGRyZXNzZXMgPSBzZXJ2ZXJbJ2FkZHJlc3NlcyddO1xuXG4gICAgICAgIGlmIChyb2xlID09PSAnUk9VVEUnKSB7XG4gICAgICAgICAgcm91dGVycy5wdXNoQWxsKGFkZHJlc3Nlcyk7XG4gICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ1dSSVRFJykge1xuICAgICAgICAgIHdyaXRlcnMucHVzaEFsbChhZGRyZXNzZXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdSRUFEJykge1xuICAgICAgICAgIHJlYWRlcnMucHVzaEFsbChhZGRyZXNzZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ld0Vycm9yKCdVbmtub3duIHNlcnZlciByb2xlIFwiJyArIHJvbGUgKyAnXCInLCBQUk9UT0NPTF9FUlJPUik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICByb3V0ZXJzOiByb3V0ZXJzLFxuICAgICAgICByZWFkZXJzOiByZWFkZXJzLFxuICAgICAgICB3cml0ZXJzOiB3cml0ZXJzXG4gICAgICB9XG4gICAgfSBjYXRjaCAoaWdub3JlKSB7XG4gICAgICB0aHJvdyBuZXdFcnJvcihcbiAgICAgICAgJ1VuYWJsZSB0byBwYXJzZSBzZXJ2ZXJzIGVudHJ5IGZyb20gcm91dGVyICcgKyByb3V0ZXJBZGRyZXNzICsgJyBmcm9tIHJlY29yZDpcXG4nICsgSlNPTi5zdHJpbmdpZnkocmVjb3JkKSxcbiAgICAgICAgUFJPVE9DT0xfRVJST1IpO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7cGFyc2VIb3N0LCBwYXJzZVBvcnR9IGZyb20gJy4vY29ubmVjdG9yJztcblxuY2xhc3MgSG9zdE5hbWVSZXNvbHZlciB7XG5cbiAgcmVzb2x2ZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fic3RyYWN0IGZ1bmN0aW9uJyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIER1bW15SG9zdE5hbWVSZXNvbHZlciBleHRlbmRzIEhvc3ROYW1lUmVzb2x2ZXIge1xuXG4gIHJlc29sdmUoc2VlZFJvdXRlcikge1xuICAgIHJldHVybiByZXNvbHZlVG9JdHNlbGYoc2VlZFJvdXRlcik7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERuc0hvc3ROYW1lUmVzb2x2ZXIgZXh0ZW5kcyBIb3N0TmFtZVJlc29sdmVyIHtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2RucyA9IHJlcXVpcmUoJ2RucycpO1xuICB9XG5cbiAgcmVzb2x2ZShzZWVkUm91dGVyKSB7XG4gICAgY29uc3Qgc2VlZFJvdXRlckhvc3QgPSBwYXJzZUhvc3Qoc2VlZFJvdXRlcik7XG4gICAgY29uc3Qgc2VlZFJvdXRlclBvcnQgPSBwYXJzZVBvcnQoc2VlZFJvdXRlcik7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuX2Rucy5sb29rdXAoc2VlZFJvdXRlckhvc3QsIHthbGw6IHRydWV9LCAoZXJyb3IsIGFkZHJlc3NlcykgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXNvbHZlKHJlc29sdmVUb0l0c2VsZihzZWVkUm91dGVyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgYWRkcmVzc2VzV2l0aFBvcnRzID0gYWRkcmVzc2VzLm1hcChhZGRyZXNzID0+IGFkZHJlc3NXaXRoUG9ydChhZGRyZXNzLCBzZWVkUm91dGVyUG9ydCkpO1xuICAgICAgICAgIHJlc29sdmUoYWRkcmVzc2VzV2l0aFBvcnRzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVRvSXRzZWxmKGFkZHJlc3MpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbYWRkcmVzc10pO1xufVxuXG5mdW5jdGlvbiBhZGRyZXNzV2l0aFBvcnQoYWRkcmVzc09iamVjdCwgcG9ydCkge1xuICBjb25zdCBhZGRyZXNzID0gYWRkcmVzc09iamVjdC5hZGRyZXNzO1xuICBpZiAocG9ydCkge1xuICAgIHJldHVybiBhZGRyZXNzICsgJzonICsgcG9ydDtcbiAgfVxuICByZXR1cm4gYWRkcmVzcztcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHV0ZjggZnJvbSBcIi4vdXRmOFwiO1xuaW1wb3J0IEludGVnZXIsIHtpbnQsIGlzSW50fSBmcm9tIFwiLi4vaW50ZWdlclwiO1xuaW1wb3J0IHtuZXdFcnJvcn0gZnJvbSBcIi4vLi4vZXJyb3JcIjtcblxuY29uc3QgVElOWV9TVFJJTkcgPSAweDgwO1xuY29uc3QgVElOWV9MSVNUID0gMHg5MDtcbmNvbnN0IFRJTllfTUFQID0gMHhBMDtcbmNvbnN0IFRJTllfU1RSVUNUID0gMHhCMDtcbmNvbnN0IE5VTEwgPSAweEMwO1xuY29uc3QgRkxPQVRfNjQgPSAweEMxO1xuY29uc3QgRkFMU0UgPSAweEMyO1xuY29uc3QgVFJVRSA9IDB4QzM7XG5jb25zdCBJTlRfOCA9IDB4Qzg7XG5jb25zdCBJTlRfMTYgPSAweEM5O1xuY29uc3QgSU5UXzMyID0gMHhDQTtcbmNvbnN0IElOVF82NCA9IDB4Q0I7XG5jb25zdCBTVFJJTkdfOCA9IDB4RDA7XG5jb25zdCBTVFJJTkdfMTYgPSAweEQxO1xuY29uc3QgU1RSSU5HXzMyID0gMHhEMjtcbmNvbnN0IExJU1RfOCA9IDB4RDQ7XG5jb25zdCBMSVNUXzE2ID0gMHhENTtcbmNvbnN0IExJU1RfMzIgPSAweEQ2O1xuY29uc3QgTUFQXzggPSAweEQ4O1xuY29uc3QgTUFQXzE2ID0gMHhEOTtcbmNvbnN0IE1BUF8zMiA9IDB4REE7XG5jb25zdCBTVFJVQ1RfOCA9IDB4REM7XG5jb25zdCBTVFJVQ1RfMTYgPSAweEREO1xuXG4vKipcbiAgKiBBIFN0cnVjdHVyZSBoYXZlIGEgc2lnbmF0dXJlIGFuZCBmaWVsZHMuXG4gICogQGFjY2VzcyBwcml2YXRlXG4gICovXG5jbGFzcyBTdHJ1Y3R1cmUge1xuICAvKipcbiAgICogQ3JlYXRlIG5ldyBpbnN0YW5jZVxuICAgKi9cbiAgY29uc3RydWN0b3IoIHNpZ25hdHVyZSwgZmllbGRzICkge1xuICAgIHRoaXMuc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuICAgIHRoaXMuZmllbGRzID0gZmllbGRzO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IGZpZWxkU3RyID0gXCJcIjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZihpID4gMCkgeyBmaWVsZFN0cis9XCIsIFwiIH1cbiAgICAgIGZpZWxkU3RyICs9IHRoaXMuZmllbGRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gXCJTdHJ1Y3R1cmUoXCIgKyB0aGlzLnNpZ25hdHVyZSArIFwiLCBbXCIgKyB0aGlzLmZpZWxkcyArIFwiXSlcIlxuICB9XG59XG5cbi8qKlxuICAqIENsYXNzIHRvIHBhY2tcbiAgKiBAYWNjZXNzIHByaXZhdGVcbiAgKi9cbmNsYXNzIFBhY2tlciB7XG4gIGNvbnN0cnVjdG9yIChjaGFubmVsKSB7XG4gICAgdGhpcy5fY2ggPSBjaGFubmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBwYWNrYWJsZSBmdW5jdGlvbiBvdXQgb2YgdGhlIHByb3ZpZGVkIHZhbHVlXG4gICAqIEBwYXJhbSB4IHRoZSB2YWx1ZSB0byBwYWNrXG4gICAqIEBwYXJhbSBvbkVycm9yIGNhbGxiYWNrIGZvciB0aGUgY2FzZSB3aGVuIHZhbHVlIGNhbm5vdCBiZSBwYWNrZWRcbiAgICogQHJldHVybnMgRnVuY3Rpb25cbiAgICovXG4gIHBhY2thYmxlICh4LCBvbkVycm9yKSB7XG4gICAgaWYgKHggPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAoKSA9PiB0aGlzLl9jaC53cml0ZVVJbnQ4KCBOVUxMICk7XG4gICAgfSBlbHNlIGlmICh4ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gKCkgPT4gdGhpcy5fY2gud3JpdGVVSW50OCggVFJVRSApO1xuICAgIH0gZWxzZSBpZiAoeCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiAoKSA9PiB0aGlzLl9jaC53cml0ZVVJbnQ4KCBGQUxTRSApO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mKHgpID09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiAoKSA9PiB0aGlzLnBhY2tGbG9hdCh4KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZih4KSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gKCkgPT4gdGhpcy5wYWNrU3RyaW5nKHgsIG9uRXJyb3IpO1xuICAgIH0gZWxzZSBpZiAoaXNJbnQoeCkpIHtcbiAgICAgIHJldHVybiAoKSA9PiB0aGlzLnBhY2tJbnRlZ2VyKCB4ICk7XG4gICAgfSBlbHNlIGlmICh4IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHRoaXMucGFja0xpc3RIZWFkZXIoeC5sZW5ndGgsIG9uRXJyb3IpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0aGlzLnBhY2thYmxlKHhbaV0gPT09IHVuZGVmaW5lZCA/IG51bGwgOiB4W2ldLCBvbkVycm9yKSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh4IGluc3RhbmNlb2YgU3RydWN0dXJlKSB7XG4gICAgICB2YXIgcGFja2FibGVGaWVsZHMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeC5maWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcGFja2FibGVGaWVsZHNbaV0gPSB0aGlzLnBhY2thYmxlKHguZmllbGRzW2ldLCBvbkVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoKSA9PiB0aGlzLnBhY2tTdHJ1Y3QoIHguc2lnbmF0dXJlLCBwYWNrYWJsZUZpZWxkcyApO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mKHgpID09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoeCk7XG5cbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHhba2V5c1tpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYWNrTWFwSGVhZGVyKGNvdW50LCBvbkVycm9yKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGV0IGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKHhba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnBhY2tTdHJpbmcoa2V5KTtcbiAgICAgICAgICAgIHRoaXMucGFja2FibGUoeFtrZXldLCBvbkVycm9yKSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgb25FcnJvcihuZXdFcnJvcihcIkNhbm5vdCBwYWNrIHRoaXMgdmFsdWU6IFwiICsgeCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICgpID0+IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFja3MgYSBzdHJ1Y3RcbiAgICogQHBhcmFtIHNpZ25hdHVyZSB0aGUgc2lnbmF0dXJlIG9mIHRoZSBzdHJ1Y3RcbiAgICogQHBhcmFtIHBhY2thYmxlRmllbGRzIHRoZSBmaWVsZHMgb2YgdGhlIHN0cnVjdCwgbWFrZSBzdXJlIHlvdSBjYWxsIGBwYWNrYWJsZSBvbiBhbGwgZmllbGRzYFxuICAgKi9cbiAgcGFja1N0cnVjdCAoIHNpZ25hdHVyZSwgcGFja2FibGVGaWVsZHMsIG9uRXJyb3IpIHtcbiAgICBwYWNrYWJsZUZpZWxkcyA9IHBhY2thYmxlRmllbGRzIHx8IFtdO1xuICAgIHRoaXMucGFja1N0cnVjdEhlYWRlcihwYWNrYWJsZUZpZWxkcy5sZW5ndGgsIHNpZ25hdHVyZSwgb25FcnJvcik7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IHBhY2thYmxlRmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWNrYWJsZUZpZWxkc1tpXSgpO1xuICAgIH1cbiAgfVxuICBwYWNrSW50ZWdlciAoeCkge1xuICAgIHZhciBoaWdoID0geC5oaWdoLFxuICAgICAgICBsb3cgID0geC5sb3c7XG5cbiAgICBpZiAoeC5ncmVhdGVyVGhhbk9yRXF1YWwoLTB4MTApICYmIHgubGVzc1RoYW4oMHg4MCkpIHtcbiAgICAgIHRoaXMuX2NoLndyaXRlSW50OChsb3cpO1xuICAgIH1cbiAgICBlbHNlIGlmICh4LmdyZWF0ZXJUaGFuT3JFcXVhbCgtMHg4MCkgJiYgeC5sZXNzVGhhbigtMHgxMCkpIHtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoSU5UXzgpO1xuICAgICAgdGhpcy5fY2gud3JpdGVJbnQ4KGxvdyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHguZ3JlYXRlclRoYW5PckVxdWFsKC0weDgwMDApICYmIHgubGVzc1RoYW4oMHg4MDAwKSkge1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChJTlRfMTYpO1xuICAgICAgdGhpcy5fY2gud3JpdGVJbnQxNihsb3cpO1xuICAgIH1cbiAgICBlbHNlIGlmICh4LmdyZWF0ZXJUaGFuT3JFcXVhbCgtMHg4MDAwMDAwMCkgJiYgeC5sZXNzVGhhbigweDgwMDAwMDAwKSkge1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChJTlRfMzIpO1xuICAgICAgdGhpcy5fY2gud3JpdGVJbnQzMihsb3cpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoSU5UXzY0KTtcbiAgICAgIHRoaXMuX2NoLndyaXRlSW50MzIoaGlnaCk7XG4gICAgICB0aGlzLl9jaC53cml0ZUludDMyKGxvdyk7XG4gICAgfVxuICB9XG4gIHBhY2tGbG9hdCh4KSB7XG4gICAgdGhpcy5fY2gud3JpdGVVSW50OChGTE9BVF82NCk7XG4gICAgdGhpcy5fY2gud3JpdGVGbG9hdDY0KHgpO1xuICB9XG5cbiAgcGFja1N0cmluZyAoeCwgb25FcnJvcikge1xuICAgIGxldCBieXRlcyA9IHV0ZjguZW5jb2RlKHgpO1xuICAgIGxldCBzaXplID0gYnl0ZXMubGVuZ3RoO1xuICAgIGlmIChzaXplIDwgMHgxMCkge1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChUSU5ZX1NUUklORyB8IHNpemUpO1xuICAgICAgdGhpcy5fY2gud3JpdGVCeXRlcyhieXRlcyk7XG4gICAgfSBlbHNlIGlmIChzaXplIDwgMHgxMDApIHtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoU1RSSU5HXzgpXG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpemUpO1xuICAgICAgdGhpcy5fY2gud3JpdGVCeXRlcyhieXRlcyk7XG4gICAgfSBlbHNlIGlmIChzaXplIDwgMHgxMDAwMCkge1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChTVFJJTkdfMTYpO1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplLzI1Nj4+MCk7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpemUlMjU2KTtcbiAgICAgIHRoaXMuX2NoLndyaXRlQnl0ZXMoYnl0ZXMpO1xuICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDB4MTAwMDAwMDAwKSB7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KFNUUklOR18zMik7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KChzaXplLzE2Nzc3MjE2Pj4wKSUyNTYpO1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OCgoc2l6ZS82NTUzNj4+MCklMjU2KTtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoKHNpemUvMjU2Pj4wKSUyNTYpO1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplJTI1Nik7XG4gICAgICB0aGlzLl9jaC53cml0ZUJ5dGVzKGJ5dGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25FcnJvcihuZXdFcnJvcihcIlVURi04IHN0cmluZ3Mgb2Ygc2l6ZSBcIiArIHNpemUgKyBcIiBhcmUgbm90IHN1cHBvcnRlZFwiKSk7XG4gICAgfVxuICB9XG5cbiAgcGFja0xpc3RIZWFkZXIgKHNpemUsIG9uRXJyb3IpIHtcbiAgICBpZiAoc2l6ZSA8IDB4MTApIHtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoVElOWV9MSVNUIHwgc2l6ZSk7XG4gICAgfSBlbHNlIGlmIChzaXplIDwgMHgxMDApIHtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoTElTVF84KVxuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplKTtcbiAgICB9IGVsc2UgaWYgKHNpemUgPCAweDEwMDAwKSB7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KExJU1RfMTYpO1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OCgoc2l6ZS8yNTY+PjApJTI1Nik7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpemUlMjU2KTtcbiAgICB9IGVsc2UgaWYgKHNpemUgPCAweDEwMDAwMDAwMCkge1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChMSVNUXzMyKTtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoKHNpemUvMTY3NzcyMTY+PjApJTI1Nik7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KChzaXplLzY1NTM2Pj4wKSUyNTYpO1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OCgoc2l6ZS8yNTY+PjApJTI1Nik7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpemUlMjU2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25FcnJvcihuZXdFcnJvcihcIkxpc3RzIG9mIHNpemUgXCIgKyBzaXplICsgXCIgYXJlIG5vdCBzdXBwb3J0ZWRcIikpO1xuICAgIH1cbiAgfVxuXG4gIHBhY2tNYXBIZWFkZXIgKHNpemUsIG9uRXJyb3IpIHtcbiAgICBpZiAoc2l6ZSA8IDB4MTApIHtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoVElOWV9NQVAgfCBzaXplKTtcbiAgICB9IGVsc2UgaWYgKHNpemUgPCAweDEwMCkge1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChNQVBfOCk7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpemUpO1xuICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDB4MTAwMDApIHtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoTUFQXzE2KTtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoc2l6ZS8yNTY+PjApO1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplJTI1Nik7XG4gICAgfSBlbHNlIGlmIChzaXplIDwgMHgxMDAwMDAwMDApIHtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoTUFQXzMyKTtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoKHNpemUvMTY3NzcyMTY+PjApJTI1Nik7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KChzaXplLzY1NTM2Pj4wKSUyNTYpO1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OCgoc2l6ZS8yNTY+PjApJTI1Nik7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpemUlMjU2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25FcnJvcihuZXdFcnJvcihcIk1hcHMgb2Ygc2l6ZSBcIiArIHNpemUgKyBcIiBhcmUgbm90IHN1cHBvcnRlZFwiKSk7XG4gICAgfVxuICB9XG5cbiAgcGFja1N0cnVjdEhlYWRlciAoc2l6ZSwgc2lnbmF0dXJlLCBvbkVycm9yKSB7XG4gICAgaWYgKHNpemUgPCAweDEwKSB7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KFRJTllfU1RSVUNUIHwgc2l6ZSk7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpZ25hdHVyZSk7XG4gICAgfSBlbHNlIGlmIChzaXplIDwgMHgxMDApIHtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoU1RSVUNUXzgpO1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplKTtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoc2lnbmF0dXJlKTtcbiAgICB9IGVsc2UgaWYgKHNpemUgPCAweDEwMDAwKSB7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KFNUUlVDVF8xNik7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpemUvMjU2Pj4wKTtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoc2l6ZSUyNTYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbkVycm9yKG5ld0Vycm9yKFwiU3RydWN0dXJlcyBvZiBzaXplIFwiICsgc2l6ZSArIFwiIGFyZSBub3Qgc3VwcG9ydGVkXCIpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gICogQ2xhc3MgdG8gdW5wYWNrXG4gICogQGFjY2VzcyBwcml2YXRlXG4gICovXG5jbGFzcyBVbnBhY2tlciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICAvLyBIaWdoZXIgbGV2ZWwgbGF5ZXJzIGNhbiBzcGVjaWZ5IGhvdyB0byBtYXAgc3RydWN0cyB0byBoaWdoZXItbGV2ZWwgb2JqZWN0cy5cbiAgICAvLyBJZiB3ZSByZWNpZXZlIGEgc3RydWN0IHRoYXQgaGFzIGEgc2lnbmF0dXJlIHRoYXQgZG9lcyBub3QgaGF2ZSBhIG1hcHBlcixcbiAgICAvLyB3ZSBzaW1wbHkgcmV0dXJuIGEgU3RydWN0dXJlIG9iamVjdC5cbiAgICB0aGlzLnN0cnVjdE1hcHBlcnMgPSB7fTtcbiAgfVxuXG4gIHVucGFja0xpc3QgKHNpemUsIGJ1ZmZlcikge1xuICAgIGxldCB2YWx1ZSA9IFtdO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIHZhbHVlLnB1c2goIHRoaXMudW5wYWNrKCBidWZmZXIgKSApO1xuICAgIH0gXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgdW5wYWNrTWFwIChzaXplLCBidWZmZXIpIHtcbiAgICBsZXQgdmFsdWUgPSB7fTtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICBsZXQga2V5ID0gdGhpcy51bnBhY2soYnVmZmVyKTtcbiAgICAgIHZhbHVlW2tleV0gPSB0aGlzLnVucGFjayhidWZmZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICB1bnBhY2tTdHJ1Y3QgKHNpemUsIGJ1ZmZlcikge1xuICAgIGxldCBzaWduYXR1cmUgPSBidWZmZXIucmVhZFVJbnQ4KCk7XG4gICAgbGV0IG1hcHBlciA9IHRoaXMuc3RydWN0TWFwcGVyc1tzaWduYXR1cmVdO1xuICAgIGlmKCBtYXBwZXIgKSB7XG4gICAgICByZXR1cm4gbWFwcGVyKCB0aGlzLCBidWZmZXIgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHZhbHVlID0gbmV3IFN0cnVjdHVyZShzaWduYXR1cmUsIFtdKTtcbiAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgdmFsdWUuZmllbGRzLnB1c2godGhpcy51bnBhY2soYnVmZmVyKSk7XG4gICAgICB9IFxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHVucGFjayAoIGJ1ZmZlciApIHtcbiAgICBsZXQgbWFya2VyID0gYnVmZmVyLnJlYWRVSW50OCgpO1xuICAgIGlmIChtYXJrZXIgPT0gTlVMTCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gVFJVRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gRkFMU0UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKG1hcmtlciA9PSBGTE9BVF82NCkge1xuICAgICAgcmV0dXJuIGJ1ZmZlci5yZWFkRmxvYXQ2NCgpO1xuICAgIH0gZWxzZSBpZiAobWFya2VyID49IDAgJiYgbWFya2VyIDwgMTI4KSB7XG4gICAgICByZXR1cm4gaW50KG1hcmtlcik7XG4gICAgfSBlbHNlIGlmIChtYXJrZXIgPj0gMjQwICYmIG1hcmtlciA8IDI1Nikge1xuICAgICAgcmV0dXJuIGludChtYXJrZXIgLSAyNTYpO1xuICAgIH0gZWxzZSBpZiAobWFya2VyID09IElOVF84KSB7XG4gICAgICByZXR1cm4gaW50KGJ1ZmZlci5yZWFkSW50OCgpKTtcbiAgICB9IGVsc2UgaWYgKG1hcmtlciA9PSBJTlRfMTYpIHtcbiAgICAgIHJldHVybiBpbnQoYnVmZmVyLnJlYWRJbnQxNigpKTtcbiAgICB9IGVsc2UgaWYgKG1hcmtlciA9PSBJTlRfMzIpIHtcbiAgICAgIGxldCBiID0gYnVmZmVyLnJlYWRJbnQzMigpO1xuICAgICAgcmV0dXJuIGludChiKTtcbiAgICB9IGVsc2UgaWYgKG1hcmtlciA9PSBJTlRfNjQpIHtcbiAgICAgIGxldCBoaWdoID0gYnVmZmVyLnJlYWRJbnQzMigpO1xuICAgICAgbGV0IGxvdyAgPSBidWZmZXIucmVhZEludDMyKCk7XG4gICAgICByZXR1cm4gbmV3IEludGVnZXIoIGxvdywgaGlnaCApO1xuICAgIH0gZWxzZSBpZiAobWFya2VyID09IFNUUklOR184KSB7XG4gICAgICByZXR1cm4gdXRmOC5kZWNvZGUoIGJ1ZmZlciwgYnVmZmVyLnJlYWRVSW50OCgpKTtcbiAgICB9IGVsc2UgaWYgKG1hcmtlciA9PSBTVFJJTkdfMTYpIHtcbiAgICAgIHJldHVybiB1dGY4LmRlY29kZSggYnVmZmVyLCBidWZmZXIucmVhZFVJbnQxNigpICk7XG4gICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gU1RSSU5HXzMyKSB7XG4gICAgICByZXR1cm4gdXRmOC5kZWNvZGUoIGJ1ZmZlciwgYnVmZmVyLnJlYWRVSW50MzIoKSApO1xuICAgIH0gZWxzZSBpZiAobWFya2VyID09IExJU1RfOCkge1xuICAgICAgcmV0dXJuIHRoaXMudW5wYWNrTGlzdChidWZmZXIucmVhZFVJbnQ4KCksIGJ1ZmZlcik7XG4gICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gTElTVF8xNikge1xuICAgICAgcmV0dXJuIHRoaXMudW5wYWNrTGlzdChidWZmZXIucmVhZFVJbnQxNigpLCBidWZmZXIpO1xuICAgIH0gZWxzZSBpZiAobWFya2VyID09IExJU1RfMzIpIHtcbiAgICAgIHJldHVybiB0aGlzLnVucGFja0xpc3QoYnVmZmVyLnJlYWRVSW50MzIoKSwgYnVmZmVyKTtcbiAgICB9IGVsc2UgaWYgKG1hcmtlciA9PSBNQVBfOCkge1xuICAgICAgcmV0dXJuIHRoaXMudW5wYWNrTWFwKGJ1ZmZlci5yZWFkVUludDgoKSwgYnVmZmVyKTtcbiAgICB9IGVsc2UgaWYgKG1hcmtlciA9PSBNQVBfMTYpIHtcbiAgICAgIHJldHVybiB0aGlzLnVucGFja01hcChidWZmZXIucmVhZFVJbnQxNigpLCBidWZmZXIpO1xuICAgIH0gZWxzZSBpZiAobWFya2VyID09IE1BUF8zMikge1xuICAgICAgcmV0dXJuIHRoaXMudW5wYWNrTWFwKGJ1ZmZlci5yZWFkVUludDMyKCksIGJ1ZmZlcik7XG4gICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gU1RSVUNUXzgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVucGFja1N0cnVjdChidWZmZXIucmVhZFVJbnQ4KCksIGJ1ZmZlcik7XG4gICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gU1RSVUNUXzE2KSB7XG4gICAgICByZXR1cm4gdGhpcy51bnBhY2tTdHJ1Y3QoYnVmZmVyLnJlYWRVSW50MTYoKSwgYnVmZmVyKTtcbiAgICB9XG4gICAgbGV0IG1hcmtlckhpZ2ggPSBtYXJrZXIgJiAweEYwO1xuICAgIGxldCBtYXJrZXJMb3cgPSBtYXJrZXIgJiAweDBGO1xuICAgIGlmIChtYXJrZXJIaWdoID09IDB4ODApIHtcbiAgICAgIHJldHVybiB1dGY4LmRlY29kZSggYnVmZmVyLCBtYXJrZXJMb3cgKTtcbiAgICB9IGVsc2UgaWYgKG1hcmtlckhpZ2ggPT0gMHg5MCkge1xuICAgICAgcmV0dXJuIHRoaXMudW5wYWNrTGlzdChtYXJrZXJMb3csIGJ1ZmZlcik7XG4gICAgfSBlbHNlIGlmIChtYXJrZXJIaWdoID09IDB4QTApIHtcbiAgICAgIHJldHVybiB0aGlzLnVucGFja01hcChtYXJrZXJMb3csIGJ1ZmZlcik7XG4gICAgfSBlbHNlIGlmIChtYXJrZXJIaWdoID09IDB4QjApIHtcbiAgICAgIHJldHVybiB0aGlzLnVucGFja1N0cnVjdChtYXJrZXJMb3csIGJ1ZmZlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ld0Vycm9yKFwiVW5rbm93biBwYWNrZWQgdmFsdWUgd2l0aCBtYXJrZXIgXCIgKyBtYXJrZXIudG9TdHJpbmcoMTYpKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgUGFja2VyLFxuICBVbnBhY2tlcixcbiAgU3RydWN0dXJlXG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuY2xhc3MgUG9vbCB7XG4gIC8qKlxuICAgKiBAcGFyYW0gY3JlYXRlICBhbiBhbGxvY2F0aW9uIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyByZXNvdXJjZS4gSXQncyBnaXZlblxuICAgKiAgICAgICAgICAgICAgICBhIHNpbmdsZSBhcmd1bWVudCwgYSBmdW5jdGlvbiB0aGF0IHdpbGwgcmV0dXJuIHRoZSByZXNvdXJjZSB0b1xuICAgKiAgICAgICAgICAgICAgICB0aGUgcG9vbCBpZiBpbnZva2VkLCB3aGljaCBpcyBtZWFudCB0byBiZSBjYWxsZWQgb24gLmRpc3Bvc2VcbiAgICogICAgICAgICAgICAgICAgb3IgLmNsb3NlIG9yIHdoYXRldmVyIG1lY2hhbmlzbSB0aGUgcmVzb3VyY2UgdXNlcyB0byBmaW5hbGl6ZS5cbiAgICogQHBhcmFtIGRlc3Ryb3kgY2FsbGVkIHdpdGggdGhlIHJlc291cmNlIHdoZW4gaXQgaXMgZXZpY3RlZCBmcm9tIHRoaXMgcG9vbFxuICAgKiBAcGFyYW0gdmFsaWRhdGUgY2FsbGVkIGF0IHZhcmlvdXMgdGltZXMgKGxpa2Ugd2hlbiBhbiBpbnN0YW5jZSBpcyBhY3F1aXJlZCBhbmRcbiAgICogICAgICAgICAgICAgICAgIHdoZW4gaXQgaXMgcmV0dXJuZWQpLiBJZiB0aGlzIHJldHVybnMgZmFsc2UsIHRoZSByZXNvdXJjZSB3aWxsXG4gICAqICAgICAgICAgICAgICAgICBiZSBldmljdGVkXG4gICAqIEBwYXJhbSBtYXhJZGxlIHRoZSBtYXggbnVtYmVyIG9mIHJlc291cmNlcyB0aGF0IGFyZSBhbGxvd2VkIGlkbGUgaW4gdGhlIHBvb2wgYXRcbiAgICogICAgICAgICAgICAgICAgYW55IHRpbWUuIElmIHRoaXMgdGhyZXNob2xkIGlzIGV4Y2VlZGVkLCByZXNvdXJjZXMgd2lsbCBiZSBldmljdGVkLlxuICAgKi9cbiAgY29uc3RydWN0b3IoY3JlYXRlLCBkZXN0cm95PSgoKT0+dHJ1ZSksIHZhbGlkYXRlPSgoKT0+dHJ1ZSksIG1heElkbGU9NTApIHtcbiAgICB0aGlzLl9jcmVhdGUgPSBjcmVhdGU7XG4gICAgdGhpcy5fZGVzdHJveSA9IGRlc3Ryb3k7XG4gICAgdGhpcy5fdmFsaWRhdGUgPSB2YWxpZGF0ZTtcbiAgICB0aGlzLl9tYXhJZGxlID0gbWF4SWRsZTtcbiAgICB0aGlzLl9wb29scyA9IHt9O1xuICAgIHRoaXMuX3JlbGVhc2UgPSB0aGlzLl9yZWxlYXNlLmJpbmQodGhpcyk7XG4gIH1cblxuICBhY3F1aXJlKGtleSkge1xuICAgIGxldCByZXNvdXJjZTtcbiAgICBsZXQgcG9vbCA9IHRoaXMuX3Bvb2xzW2tleV07XG4gICAgaWYgKCFwb29sKSB7XG4gICAgICBwb29sID0gW107XG4gICAgICB0aGlzLl9wb29sc1trZXldID0gcG9vbDtcbiAgICB9XG4gICAgd2hpbGUgKHBvb2wubGVuZ3RoKSB7XG4gICAgICByZXNvdXJjZSA9IHBvb2wucG9wKCk7XG5cbiAgICAgIGlmICh0aGlzLl92YWxpZGF0ZShyZXNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc291cmNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveShyZXNvdXJjZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZShrZXksIHRoaXMuX3JlbGVhc2UpO1xuICB9XG5cbiAgcHVyZ2Uoa2V5KSB7XG4gICAgbGV0IHJlc291cmNlO1xuICAgIGxldCBwb29sID0gdGhpcy5fcG9vbHNba2V5XSB8fCBbXTtcbiAgICB3aGlsZSAocG9vbC5sZW5ndGgpIHtcbiAgICAgIHJlc291cmNlID0gcG9vbC5wb3AoKTtcbiAgICAgIHRoaXMuX2Rlc3Ryb3kocmVzb3VyY2UpXG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLl9wb29sc1trZXldXG4gIH1cblxuICBwdXJnZUFsbCgpIHtcbiAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5fcG9vbHMua2V5cykge1xuICAgICAgaWYgKHRoaXMuX3Bvb2xzLmhhc093blByb3BlcnR5a2V5KSB7XG4gICAgICAgIHRoaXMucHVyZ2Uoa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoa2V5KSB7XG4gICAgcmV0dXJuIChrZXkgaW4gdGhpcy5fcG9vbHMpO1xuICB9XG5cbiAgX3JlbGVhc2Uoa2V5LCByZXNvdXJjZSkge1xuICAgIGxldCBwb29sID0gdGhpcy5fcG9vbHNba2V5XTtcbiAgICBpZiAoIXBvb2wpIHtcbiAgICAgIC8va2V5IGhhcyBiZWVuIHB1cmdlZCwgZG9uJ3QgcHV0IGl0IGJhY2tcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYoIHBvb2wubGVuZ3RoID49IHRoaXMuX21heElkbGUgfHwgIXRoaXMuX3ZhbGlkYXRlKHJlc291cmNlKSApIHtcbiAgICAgIHRoaXMuX2Rlc3Ryb3kocmVzb3VyY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb29sLnB1c2gocmVzb3VyY2UpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQb29sXG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgR2V0U2VydmVyc1V0aWwgZnJvbSBcIi4vZ2V0LXNlcnZlcnMtdXRpbFwiO1xuaW1wb3J0IFJvdXRpbmdUYWJsZSBmcm9tIFwiLi9yb3V0aW5nLXRhYmxlXCI7XG5pbXBvcnQge25ld0Vycm9yLCBQUk9UT0NPTF9FUlJPUn0gZnJvbSBcIi4uL2Vycm9yXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZGlzY292ZXJ5IHtcblxuICBjb25zdHJ1Y3RvcihnZXRTZXJ2ZXJzVXRpbCkge1xuICAgIHRoaXMuX2dldFNlcnZlcnNVdGlsID0gZ2V0U2VydmVyc1V0aWwgfHwgbmV3IEdldFNlcnZlcnNVdGlsKCk7XG4gIH1cblxuICBsb29rdXBSb3V0aW5nVGFibGVPblJvdXRlcihzZXNzaW9uLCByb3V0ZXJBZGRyZXNzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFNlcnZlcnNVdGlsLmNhbGxHZXRTZXJ2ZXJzKHNlc3Npb24sIHJvdXRlckFkZHJlc3MpLnRoZW4ocmVjb3JkcyA9PiB7XG4gICAgICBpZiAocmVjb3JkcyA9PT0gbnVsbCkge1xuICAgICAgICAvLyBjb25uZWN0aW9uIGVycm9yIGhhcHBlbmVkLCB1bmFibGUgdG8gcmV0cmlldmUgcm91dGluZyB0YWJsZSBmcm9tIHRoaXMgcm91dGVyLCBuZXh0IG9uZSBzaG91bGQgYmUgcXVlcmllZFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ld0Vycm9yKCdJbGxlZ2FsIHJlc3BvbnNlIGZyb20gcm91dGVyIFwiJyArIHJvdXRlckFkZHJlc3MgKyAnXCIuICcgK1xuICAgICAgICAgICdSZWNlaXZlZCAnICsgcmVjb3Jkcy5sZW5ndGggKyAnIHJlY29yZHMgYnV0IGV4cGVjdGVkIG9ubHkgb25lLlxcbicgKyBKU09OLnN0cmluZ2lmeShyZWNvcmRzKSxcbiAgICAgICAgICBQUk9UT0NPTF9FUlJPUik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZHNbMF07XG5cbiAgICAgIGNvbnN0IGV4cGlyYXRpb25UaW1lID0gdGhpcy5fZ2V0U2VydmVyc1V0aWwucGFyc2VUdGwocmVjb3JkLCByb3V0ZXJBZGRyZXNzKTtcbiAgICAgIGNvbnN0IHtyb3V0ZXJzLCByZWFkZXJzLCB3cml0ZXJzfSA9IHRoaXMuX2dldFNlcnZlcnNVdGlsLnBhcnNlU2VydmVycyhyZWNvcmQsIHJvdXRlckFkZHJlc3MpO1xuXG4gICAgICBSZWRpc2NvdmVyeS5fYXNzZXJ0Tm9uRW1wdHkocm91dGVycywgJ3JvdXRlcnMnLCByb3V0ZXJBZGRyZXNzKTtcbiAgICAgIFJlZGlzY292ZXJ5Ll9hc3NlcnROb25FbXB0eShyZWFkZXJzLCAncmVhZGVycycsIHJvdXRlckFkZHJlc3MpO1xuICAgICAgLy8gY2FzZSB3aXRoIG5vIHdyaXRlcnMgaXMgcHJvY2Vzc2VkIGhpZ2hlciBpbiB0aGUgcHJvbWlzZSBjaGFpbiBiZWNhdXNlIG9ubHkgUm91dGluZ0RyaXZlciBrbm93c1xuICAgICAgLy8gaG93IHRvIGRlYWwgd2l0aCBzdWNoIHRhYmxlIGFuZCBob3cgdG8gdHJlYXQgcm91dGVyIHRoYXQgcmV0dXJuZWQgc3VjaCB0YWJsZVxuXG4gICAgICByZXR1cm4gbmV3IFJvdXRpbmdUYWJsZShyb3V0ZXJzLCByZWFkZXJzLCB3cml0ZXJzLCBleHBpcmF0aW9uVGltZSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgX2Fzc2VydE5vbkVtcHR5KHNlcnZlcnNSb3VuZFJvYmluQXJyYXksIHNlcnZlcnNOYW1lLCByb3V0ZXJBZGRyZXNzKSB7XG4gICAgaWYgKHNlcnZlcnNSb3VuZFJvYmluQXJyYXkuaXNFbXB0eSgpKSB7XG4gICAgICB0aHJvdyBuZXdFcnJvcignUmVjZWl2ZWQgbm8gJyArIHNlcnZlcnNOYW1lICsgJyBmcm9tIHJvdXRlciAnICsgcm91dGVyQWRkcmVzcywgUFJPVE9DT0xfRVJST1IpO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qKlxuICogQW4gYXJyYXkgdGhhdCBsZXRzIHlvdSBob3AgdGhyb3VnaCB0aGUgZWxlbWVudHMgZW5kbGVzc2x5LlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb3VuZFJvYmluQXJyYXkge1xuXG4gIGNvbnN0cnVjdG9yKGl0ZW1zKSB7XG4gICAgdGhpcy5faXRlbXMgPSBpdGVtcyB8fCBbXTtcbiAgICB0aGlzLl9vZmZzZXQgPSAwO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX29mZnNldCAlIHRoaXMuc2l6ZSgpO1xuICAgIHRoaXMuX29mZnNldCsrO1xuICAgIHJldHVybiB0aGlzLl9pdGVtc1tpbmRleF07XG4gIH1cblxuICBwdXNoQWxsKGVsZW1zKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGVsZW1zKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQgYnV0IGdvdDogJyArIGVsZW1zKTtcbiAgICB9XG5cbiAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLl9pdGVtcywgZWxlbXMpO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXMubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXMubGVuZ3RoO1xuICB9XG5cbiAgdG9BcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cblxuICByZW1vdmUoaXRlbSkge1xuICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5faXRlbXMuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudCAhPT0gaXRlbSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtpbnR9IGZyb20gXCIuLi9pbnRlZ2VyXCI7XG5pbXBvcnQgUm91bmRSb2JpbkFycmF5IGZyb20gXCIuL3JvdW5kLXJvYmluLWFycmF5XCI7XG5cbmNvbnN0IE1JTl9ST1VURVJTID0gMTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm91dGluZ1RhYmxlIHtcblxuICBjb25zdHJ1Y3Rvcihyb3V0ZXJzLCByZWFkZXJzLCB3cml0ZXJzLCBleHBpcmF0aW9uVGltZSkge1xuICAgIHRoaXMucm91dGVycyA9IHJvdXRlcnMgfHwgbmV3IFJvdW5kUm9iaW5BcnJheSgpO1xuICAgIHRoaXMucmVhZGVycyA9IHJlYWRlcnMgfHwgbmV3IFJvdW5kUm9iaW5BcnJheSgpO1xuICAgIHRoaXMud3JpdGVycyA9IHdyaXRlcnMgfHwgbmV3IFJvdW5kUm9iaW5BcnJheSgpO1xuICAgIHRoaXMuZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZSB8fCBpbnQoMCk7XG4gIH1cblxuICBmb3JnZXQoYWRkcmVzcykge1xuICAgIC8vIERvbid0IHJlbW92ZSBpdCBmcm9tIHRoZSBzZXQgb2Ygcm91dGVycywgc2luY2UgdGhhdCBtaWdodCBtZWFuIHdlIGxvc2Ugb3VyIGFiaWxpdHkgdG8gcmUtZGlzY292ZXIsXG4gICAgLy8ganVzdCByZW1vdmUgaXQgZnJvbSB0aGUgc2V0IG9mIHJlYWRlcnMgYW5kIHdyaXRlcnMsIHNvIHRoYXQgd2UgZG9uJ3QgdXNlIGl0IGZvciBhY3R1YWwgd29yayB3aXRob3V0XG4gICAgLy8gcGVyZm9ybWluZyBkaXNjb3ZlcnkgZmlyc3QuXG4gICAgdGhpcy5yZWFkZXJzLnJlbW92ZShhZGRyZXNzKTtcbiAgICB0aGlzLndyaXRlcnMucmVtb3ZlKGFkZHJlc3MpO1xuICB9XG5cbiAgZm9yZ2V0Um91dGVyKGFkZHJlc3MpIHtcbiAgICB0aGlzLnJvdXRlcnMucmVtb3ZlKGFkZHJlc3MpO1xuICB9XG5cbiAgZm9yZ2V0V3JpdGVyKGFkZHJlc3MpIHtcbiAgICB0aGlzLndyaXRlcnMucmVtb3ZlKGFkZHJlc3MpO1xuICB9XG5cbiAgc2VydmVyc0RpZmYob3RoZXJSb3V0aW5nVGFibGUpIHtcbiAgICBjb25zdCBvbGRTZXJ2ZXJzID0gbmV3IFNldCh0aGlzLl9hbGxTZXJ2ZXJzKCkpO1xuICAgIGNvbnN0IG5ld1NlcnZlcnMgPSBvdGhlclJvdXRpbmdUYWJsZS5fYWxsU2VydmVycygpO1xuICAgIG5ld1NlcnZlcnMuZm9yRWFjaChuZXdTZXJ2ZXIgPT4gb2xkU2VydmVycy5kZWxldGUobmV3U2VydmVyKSk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20ob2xkU2VydmVycyk7XG4gIH1cblxuICBpc1N0YWxlKCkge1xuICAgIHJldHVybiB0aGlzLmV4cGlyYXRpb25UaW1lLmxlc3NUaGFuKERhdGUubm93KCkpIHx8XG4gICAgICB0aGlzLnJvdXRlcnMuc2l6ZSgpIDw9IE1JTl9ST1VURVJTIHx8XG4gICAgICB0aGlzLnJlYWRlcnMuaXNFbXB0eSgpIHx8XG4gICAgICB0aGlzLndyaXRlcnMuaXNFbXB0eSgpO1xuICB9XG5cbiAgX2FsbFNlcnZlcnMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnJvdXRlcnMudG9BcnJheSgpLCAuLi50aGlzLnJlYWRlcnMudG9BcnJheSgpLCAuLi50aGlzLndyaXRlcnMudG9BcnJheSgpXTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBSZWNvcmQgZnJvbSBcIi4uL3JlY29yZFwiO1xuXG4vKipcbiAqIEhhbmRsZXMgYSBSVU4vUFVMTF9BTEwsIG9yIFJVTi9ESVNDQVJEX0FMTCByZXF1ZXN0cywgbWFwcyB0aGUgcmVzcG9uc2VzXG4gKiBpbiBhIHdheSB0aGF0IGEgdXNlci1wcm92aWRlZCBvYnNlcnZlciBjYW4gc2VlIHRoZXNlIGFzIGEgY2xlYW4gU3RyZWFtXG4gKiBvZiByZWNvcmRzLlxuICogVGhpcyBjbGFzcyB3aWxsIHF1ZXVlIHVwIGluY29taW5nIG1lc3NhZ2VzIHVudGlsIGEgdXNlci1wcm92aWRlZCBvYnNlcnZlclxuICogZm9yIHRoZSBpbmNvbWluZyBzdHJlYW0gaXMgcmVnaXN0ZXJlZC4gVGh1cywgd2Uga2VlcCBmaWVsZHMgYXJvdW5kXG4gKiBmb3IgdHJhY2tpbmcgaGVhZC9yZWNvcmRzL3RhaWwuIFRoZXNlIGFyZSBvbmx5IHVzZWQgaWYgdGhlcmUgaXMgbm9cbiAqIG9ic2VydmVyIHJlZ2lzdGVyZWQuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqL1xuY2xhc3MgU3RyZWFtT2JzZXJ2ZXIge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSBlcnJvclRyYW5zZm9ybWVyIG9wdGlvbmFsIGNhbGxiYWNrIHRvIGJlIHVzZWQgZm9yIGFkZGluZyBhZGRpdGlvbmFsIGxvZ2ljIG9uIGVycm9yXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlcnJvclRyYW5zZm9ybWVyID0gKGVycikgPT4ge3JldHVybiBlcnJ9KSB7XG4gICAgdGhpcy5fZmllbGRLZXlzID0gbnVsbDtcbiAgICB0aGlzLl9maWVsZExvb2t1cCA9IG51bGw7XG4gICAgdGhpcy5fcXVldWVkUmVjb3JkcyA9IFtdO1xuICAgIHRoaXMuX3RhaWwgPSBudWxsO1xuICAgIHRoaXMuX2Vycm9yID0gbnVsbDtcbiAgICB0aGlzLl9oYXNGYWlsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9lcnJvclRyYW5zZm9ybWVyID0gZXJyb3JUcmFuc2Zvcm1lcjtcbiAgICB0aGlzLl9vYnNlcnZlciA9IG51bGw7XG4gICAgdGhpcy5fY29ubiA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCBiZSBjYWxsZWQgb24gZXZlcnkgcmVjb3JkIHRoYXQgY29tZXMgaW4gYW5kIHRyYW5zZm9ybSBhIHJhdyByZWNvcmRcbiAgICogdG8gYSBPYmplY3QuIElmIHVzZXItcHJvdmlkZWQgb2JzZXJ2ZXIgaXMgcHJlc2VudCwgcGFzcyB0cmFuc2Zvcm1lZCByZWNvcmRcbiAgICogdG8gaXQncyBvbk5leHQgbWV0aG9kLCBvdGhlcndpc2UsIHB1c2ggdG8gcmVjb3JkIHF1ZS5cbiAgICogQHBhcmFtIHtBcnJheX0gcmF3UmVjb3JkIC0gQW4gYXJyYXkgd2l0aCB0aGUgcmF3IHJlY29yZFxuICAgKi9cbiAgb25OZXh0KHJhd1JlY29yZCkge1xuICAgIGxldCByZWNvcmQgPSBuZXcgUmVjb3JkKHRoaXMuX2ZpZWxkS2V5cywgcmF3UmVjb3JkLCB0aGlzLl9maWVsZExvb2t1cCk7XG4gICAgaWYoIHRoaXMuX29ic2VydmVyICkge1xuICAgICAgdGhpcy5fb2JzZXJ2ZXIub25OZXh0KCByZWNvcmQgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVldWVkUmVjb3Jkcy5wdXNoKCByZWNvcmQgKTtcbiAgICB9XG4gIH1cblxuICBvbkNvbXBsZXRlZChtZXRhKSB7XG4gICAgaWYoIHRoaXMuX2ZpZWxkS2V5cyA9PT0gbnVsbCApIHtcbiAgICAgIC8vIFN0cmVhbSBoZWFkZXIsIGJ1aWxkIGEgbmFtZS0+aW5kZXggZmllbGQgbG9va3VwIHRhYmxlXG4gICAgICAvLyB0byBiZSB1c2VkIGJ5IHJlY29yZHMuIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHRvIG1ha2UgaXRcbiAgICAgIC8vIGZhc3RlciB0byBsb29rIHVwIGZpZWxkcyBpbiBhIHJlY29yZCBieSBuYW1lLCByYXRoZXIgdGhhbiBieSBpbmRleC5cbiAgICAgIC8vIFNpbmNlIHRoZSByZWNvcmRzIHdlIGdldCBiYWNrIHZpYSBCb2x0IGFyZSBqdXN0IGFycmF5cyBvZiB2YWx1ZXMuXG4gICAgICB0aGlzLl9maWVsZEtleXMgPSBbXTtcbiAgICAgIHRoaXMuX2ZpZWxkTG9va3VwID0ge307XG4gICAgICBpZiggbWV0YS5maWVsZHMgJiYgbWV0YS5maWVsZHMubGVuZ3RoID4gMCApIHtcbiAgICAgICAgdGhpcy5fZmllbGRLZXlzID0gbWV0YS5maWVsZHM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWV0YS5maWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0aGlzLl9maWVsZExvb2t1cFttZXRhLmZpZWxkc1tpXV0gPSBpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVuZCBvZiBzdHJlYW1cbiAgICAgIGlmKCB0aGlzLl9vYnNlcnZlciApIHtcbiAgICAgICAgdGhpcy5fb2JzZXJ2ZXIub25Db21wbGV0ZWQoIG1ldGEgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3RhaWwgPSBtZXRhO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlc29sdmVDb25uZWN0aW9uKGNvbm4pIHtcbiAgICB0aGlzLl9jb25uID0gY29ubjtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIGJlIGNhbGxlZCBvbiBlcnJvcnMuXG4gICAqIElmIHVzZXItcHJvdmlkZWQgb2JzZXJ2ZXIgaXMgcHJlc2VudCwgcGFzcyB0aGUgZXJyb3JcbiAgICogdG8gaXQncyBvbkVycm9yIG1ldGhvZCwgb3RoZXJ3aXNlIHNldCBpbnN0YW5jZSB2YXJpYWJsZSBfZXJyb3IuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlcnJvciAtIEFuIGVycm9yIG9iamVjdFxuICAgKi9cbiAgb25FcnJvcihlcnJvcikge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVkRXJyb3IgPSB0aGlzLl9lcnJvclRyYW5zZm9ybWVyKGVycm9yLCB0aGlzLl9jb25uKTtcbiAgICBpZih0aGlzLl9oYXNGYWlsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faGFzRmFpbGVkID0gdHJ1ZTtcbiAgICBpZiggdGhpcy5fb2JzZXJ2ZXIgKSB7XG4gICAgICBpZiggdGhpcy5fb2JzZXJ2ZXIub25FcnJvciApIHtcbiAgICAgICAgdGhpcy5fb2JzZXJ2ZXIub25FcnJvciggdHJhbnNmb3JtZWRFcnJvciApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coIHRyYW5zZm9ybWVkRXJyb3IgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZXJyb3IgPSB0cmFuc2Zvcm1lZEVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gZXZlbnRzIHdpdGggcHJvdmlkZWQgb2JzZXJ2ZXIuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYnNlcnZlciAtIE9ic2VydmVyIG9iamVjdFxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHJlY29yZDogT2JqZWN0KX0gb2JzZXJ2ZXIub25OZXh0IC0gSGFuZGxlIHJlY29yZHMsIG9uZSBieSBvbmUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWV0YWRhdGE6IE9iamVjdCl9IG9ic2VydmVyLm9uQ29tcGxldGUgLSBIYW5kbGUgc3RyZWFtIHRhaWwsIHRoZSBtZXRhZGF0YS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihlcnJvcjogT2JqZWN0KX0gb2JzZXJ2ZXIub25FcnJvciAtIEhhbmRsZSBlcnJvcnMuXG4gICAqL1xuICBzdWJzY3JpYmUoIG9ic2VydmVyICkge1xuICAgIGlmKCB0aGlzLl9lcnJvciApIHtcbiAgICAgIG9ic2VydmVyLm9uRXJyb3IodGhpcy5fZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiggdGhpcy5fcXVldWVkUmVjb3Jkcy5sZW5ndGggPiAwICkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9xdWV1ZWRSZWNvcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG9ic2VydmVyLm9uTmV4dCggdGhpcy5fcXVldWVkUmVjb3Jkc1tpXSApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiggdGhpcy5fdGFpbCApIHtcbiAgICAgIG9ic2VydmVyLm9uQ29tcGxldGVkKCB0aGlzLl90YWlsICk7XG4gICAgfVxuICAgIHRoaXMuX29ic2VydmVyID0gb2JzZXJ2ZXI7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RyZWFtT2JzZXJ2ZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtuZXdFcnJvciwgU0VSVklDRV9VTkFWQUlMQUJMRSwgU0VTU0lPTl9FWFBJUkVEfSBmcm9tICcuLi9lcnJvcic7XG5cbmNvbnN0IERFRkFVTFRfTUFYX1JFVFJZX1RJTUVfTVMgPSAzMCAqIDEwMDA7IC8vIDMwIHNlY29uZHNcbmNvbnN0IERFRkFVTFRfSU5JVElBTF9SRVRSWV9ERUxBWV9NUyA9IDEwMDA7IC8vIDEgc2Vjb25kc1xuY29uc3QgREVGQVVMVF9SRVRSWV9ERUxBWV9NVUxUSVBMSUVSID0gMi4wO1xuY29uc3QgREVGQVVMVF9SRVRSWV9ERUxBWV9KSVRURVJfRkFDVE9SID0gMC4yO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUcmFuc2FjdGlvbkV4ZWN1dG9yIHtcblxuICBjb25zdHJ1Y3RvcihtYXhSZXRyeVRpbWVNcywgaW5pdGlhbFJldHJ5RGVsYXlNcywgbXVsdGlwbGllciwgaml0dGVyRmFjdG9yKSB7XG4gICAgdGhpcy5fbWF4UmV0cnlUaW1lTXMgPSBfdmFsdWVPckRlZmF1bHQobWF4UmV0cnlUaW1lTXMsIERFRkFVTFRfTUFYX1JFVFJZX1RJTUVfTVMpO1xuICAgIHRoaXMuX2luaXRpYWxSZXRyeURlbGF5TXMgPSBfdmFsdWVPckRlZmF1bHQoaW5pdGlhbFJldHJ5RGVsYXlNcywgREVGQVVMVF9JTklUSUFMX1JFVFJZX0RFTEFZX01TKTtcbiAgICB0aGlzLl9tdWx0aXBsaWVyID0gX3ZhbHVlT3JEZWZhdWx0KG11bHRpcGxpZXIsIERFRkFVTFRfUkVUUllfREVMQVlfTVVMVElQTElFUik7XG4gICAgdGhpcy5faml0dGVyRmFjdG9yID0gX3ZhbHVlT3JEZWZhdWx0KGppdHRlckZhY3RvciwgREVGQVVMVF9SRVRSWV9ERUxBWV9KSVRURVJfRkFDVE9SKTtcblxuICAgIHRoaXMuX2luRmxpZ2h0VGltZW91dElkcyA9IFtdO1xuXG4gICAgdGhpcy5fdmVyaWZ5QWZ0ZXJDb25zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIGV4ZWN1dGUodHJhbnNhY3Rpb25DcmVhdG9yLCB0cmFuc2FjdGlvbldvcmspIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fZXhlY3V0ZVRyYW5zYWN0aW9uSW5zaWRlUHJvbWlzZSh0cmFuc2FjdGlvbkNyZWF0b3IsIHRyYW5zYWN0aW9uV29yaywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBjb25zdCByZXRyeVN0YXJ0VGltZU1zID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IHJldHJ5RGVsYXlNcyA9IHRoaXMuX2luaXRpYWxSZXRyeURlbGF5TXM7XG4gICAgICByZXR1cm4gdGhpcy5fcmV0cnlUcmFuc2FjdGlvblByb21pc2UodHJhbnNhY3Rpb25DcmVhdG9yLCB0cmFuc2FjdGlvbldvcmssIGVycm9yLCByZXRyeVN0YXJ0VGltZU1zLCByZXRyeURlbGF5TXMpO1xuICAgIH0pO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgLy8gY2FuY2VsIGFsbCBleGlzdGluZyB0aW1lb3V0cyB0byBwcmV2ZW50IGZ1cnRoZXIgcmV0cmllc1xuICAgIHRoaXMuX2luRmxpZ2h0VGltZW91dElkcy5mb3JFYWNoKHRpbWVvdXRJZCA9PiBjbGVhclRpbWVvdXQodGltZW91dElkKSk7XG4gICAgdGhpcy5faW5GbGlnaHRUaW1lb3V0SWRzID0gW107XG4gIH1cblxuICBfcmV0cnlUcmFuc2FjdGlvblByb21pc2UodHJhbnNhY3Rpb25DcmVhdG9yLCB0cmFuc2FjdGlvbldvcmssIGVycm9yLCByZXRyeVN0YXJ0VGltZSwgcmV0cnlEZWxheU1zKSB7XG4gICAgY29uc3QgZWxhcHNlZFRpbWVNcyA9IERhdGUubm93KCkgLSByZXRyeVN0YXJ0VGltZTtcblxuICAgIGlmIChlbGFwc2VkVGltZU1zID4gdGhpcy5fbWF4UmV0cnlUaW1lTXMgfHwgIVRyYW5zYWN0aW9uRXhlY3V0b3IuX2NhblJldHJ5T24oZXJyb3IpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBuZXh0UmV0cnlUaW1lID0gdGhpcy5fY29tcHV0ZURlbGF5V2l0aEppdHRlcihyZXRyeURlbGF5TXMpO1xuICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vIGZpbHRlciBvdXQgdGhpcyB0aW1lb3V0SWQgd2hlbiB0aW1lIGhhcyBjb21lIGFuZCBmdW5jdGlvbiBpcyBiZWluZyBleGVjdXRlZFxuICAgICAgICB0aGlzLl9pbkZsaWdodFRpbWVvdXRJZHMgPSB0aGlzLl9pbkZsaWdodFRpbWVvdXRJZHMuZmlsdGVyKGlkID0+IGlkICE9PSB0aW1lb3V0SWQpO1xuICAgICAgICB0aGlzLl9leGVjdXRlVHJhbnNhY3Rpb25JbnNpZGVQcm9taXNlKHRyYW5zYWN0aW9uQ3JlYXRvciwgdHJhbnNhY3Rpb25Xb3JrLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSwgbmV4dFJldHJ5VGltZSk7XG4gICAgICAvLyBhZGQgbmV3bHkgY3JlYXRlZCB0aW1lb3V0SWQgdG8gdGhlIGxpc3Qgb2YgYWxsIGluLWZsaWdodCB0aW1lb3V0c1xuICAgICAgdGhpcy5faW5GbGlnaHRUaW1lb3V0SWRzLnB1c2godGltZW91dElkKTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBjb25zdCBuZXh0UmV0cnlEZWxheU1zID0gcmV0cnlEZWxheU1zICogdGhpcy5fbXVsdGlwbGllcjtcbiAgICAgIHJldHVybiB0aGlzLl9yZXRyeVRyYW5zYWN0aW9uUHJvbWlzZSh0cmFuc2FjdGlvbkNyZWF0b3IsIHRyYW5zYWN0aW9uV29yaywgZXJyb3IsIHJldHJ5U3RhcnRUaW1lLCBuZXh0UmV0cnlEZWxheU1zKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9leGVjdXRlVHJhbnNhY3Rpb25JbnNpZGVQcm9taXNlKHRyYW5zYWN0aW9uQ3JlYXRvciwgdHJhbnNhY3Rpb25Xb3JrLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHggPSB0cmFuc2FjdGlvbkNyZWF0b3IoKTtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uV29ya1Jlc3VsdCA9IHRyYW5zYWN0aW9uV29yayh0eCk7XG5cbiAgICAgIC8vIHVzZXIgZGVmaW5lZCBjYWxsYmFjayBpcyBzdXBwb3NlZCB0byByZXR1cm4gYSBwcm9taXNlLCBidXQgaXQgbWlnaHQgbm90OyBzbyB0byBwcm90ZWN0IGFnYWluc3QgYW5cbiAgICAgIC8vIGluY29ycmVjdCBBUEkgdXNhZ2Ugd2Ugd3JhcCB0aGUgcmV0dXJuZWQgdmFsdWUgd2l0aCBhIHJlc29sdmVkIHByb21pc2U7IHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxuICAgICAgLy8gdmFsaWRhdGlvbiBzdGVwIHdpdGhvdXQgdHlwZSBjaGVja3NcbiAgICAgIGNvbnN0IHJlc3VsdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodHJhbnNhY3Rpb25Xb3JrUmVzdWx0KTtcblxuICAgICAgcmVzdWx0UHJvbWlzZS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIGlmICh0eC5pc09wZW4oKSkge1xuICAgICAgICAgIC8vIHRyYW5zYWN0aW9uIHdvcmsgcmV0dXJuZWQgcmVzb2x2ZWQgcHJvbWlzZSBhbmQgdHJhbnNhY3Rpb24gaGFzIG5vdCBiZWVuIGNvbW1pdHRlZC9yb2xsZWQgYmFja1xuICAgICAgICAgIC8vIHRyeSB0byBjb21taXQgdGhlIHRyYW5zYWN0aW9uXG4gICAgICAgICAgdHguY29tbWl0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAvLyB0cmFuc2FjdGlvbiB3YXMgY29tbWl0dGVkLCByZXR1cm4gcmVzdWx0IHRvIHRoZSB1c2VyXG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb24gZmFpbGVkIHRvIGNvbW1pdCwgcHJvcGFnYXRlIHRoZSBmYWlsdXJlXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRyYW5zYWN0aW9uIHdvcmsgcmV0dXJuZWQgcmVzb2x2ZWQgcHJvbWlzZSBhbmQgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeSBjb21taXR0ZWQvcm9sbGVkIGJhY2tcbiAgICAgICAgICAvLyByZXR1cm4gdGhlIHJlc3VsdCByZXR1cm5lZCBieSBnaXZlbiB0cmFuc2FjdGlvbiB3b3JrXG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIC8vIHRyYW5zYWN0aW9uIHdvcmsgcmV0dXJuZWQgcmVqZWN0ZWQgcHJvbWlzZSwgcHJvcGFnYXRlIHRoZSBmYWlsdXJlXG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9KTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIF9jb21wdXRlRGVsYXlXaXRoSml0dGVyKGRlbGF5TXMpIHtcbiAgICBjb25zdCBqaXR0ZXIgPSAoZGVsYXlNcyAqIHRoaXMuX2ppdHRlckZhY3Rvcik7XG4gICAgY29uc3QgbWluID0gZGVsYXlNcyAtIGppdHRlcjtcbiAgICBjb25zdCBtYXggPSBkZWxheU1zICsgaml0dGVyO1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikgKyBtaW47XG4gIH1cblxuICBzdGF0aWMgX2NhblJldHJ5T24oZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgJiYgZXJyb3IuY29kZSAmJlxuICAgICAgKGVycm9yLmNvZGUgPT09IFNFUlZJQ0VfVU5BVkFJTEFCTEUgfHxcbiAgICAgIGVycm9yLmNvZGUgPT09IFNFU1NJT05fRVhQSVJFRCB8fFxuICAgICAgdGhpcy5faXNUcmFuc2llbnRFcnJvcihlcnJvcikpO1xuICB9XG5cbiAgc3RhdGljIF9pc1RyYW5zaWVudEVycm9yKGVycm9yKSB7XG4gICAgLy8gUmV0cmllcyBzaG91bGQgbm90IGhhcHBlbiB3aGVuIHRyYW5zYWN0aW9uIHdhcyBleHBsaWNpdGx5IHRlcm1pbmF0ZWQgYnkgdGhlIHVzZXIuXG4gICAgLy8gVGVybWluYXRpb24gb2YgdHJhbnNhY3Rpb24gbWlnaHQgcmVzdWx0IGluIHR3byBkaWZmZXJlbnQgZXJyb3IgY29kZXMgZGVwZW5kaW5nIG9uIHdoZXJlIGl0IHdhc1xuICAgIC8vIHRlcm1pbmF0ZWQuIFRoZXNlIGFyZSByZWFsbHkgY2xpZW50IGVycm9ycyBidXQgY2xhc3NpZmljYXRpb24gb24gdGhlIHNlcnZlciBpcyBub3QgZW50aXJlbHkgY29ycmVjdCBhbmRcbiAgICAvLyB0aGV5IGFyZSBjbGFzc2lmaWVkIGFzIHRyYW5zaWVudC5cbiAgICBcbiAgICBjb25zdCBjb2RlID0gZXJyb3IuY29kZTtcbiAgICBpZiAoY29kZS5pbmRleE9mKCdUcmFuc2llbnRFcnJvcicpID49IDApIHtcbiAgICAgIGlmIChjb2RlID09PSAnTmVvLlRyYW5zaWVudEVycm9yLlRyYW5zYWN0aW9uLlRlcm1pbmF0ZWQnIHx8IGNvZGUgPT09ICdOZW8uVHJhbnNpZW50RXJyb3IuVHJhbnNhY3Rpb24uTG9ja0NsaWVudFN0b3BwZWQnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBfdmVyaWZ5QWZ0ZXJDb25zdHJ1Y3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX21heFJldHJ5VGltZU1zIDwgMCkge1xuICAgICAgdGhyb3cgbmV3RXJyb3IoJ01heCByZXRyeSB0aW1lIHNob3VsZCBiZSA+PSAwOiAnICsgdGhpcy5fbWF4UmV0cnlUaW1lTXMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5faW5pdGlhbFJldHJ5RGVsYXlNcyA8IDApIHtcbiAgICAgIHRocm93IG5ld0Vycm9yKCdJbml0aWFsIHJldHJ5IGRlbGF5IHNob3VsZCA+PSAwOiAnICsgdGhpcy5faW5pdGlhbFJldHJ5RGVsYXlNcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9tdWx0aXBsaWVyIDwgMS4wKSB7XG4gICAgICB0aHJvdyBuZXdFcnJvcignTXVsdGlwbGllciBzaG91bGQgYmUgPj0gMS4wOiAnICsgdGhpcy5fbXVsdGlwbGllcik7XG4gICAgfVxuICAgIGlmICh0aGlzLl9qaXR0ZXJGYWN0b3IgPCAwIHx8IHRoaXMuX2ppdHRlckZhY3RvciA+IDEpIHtcbiAgICAgIHRocm93IG5ld0Vycm9yKCdKaXR0ZXIgZmFjdG9yIHNob3VsZCBiZSBpbiBbMC4wLCAxLjBdOiAnICsgdGhpcy5faml0dGVyRmFjdG9yKTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIF92YWx1ZU9yRGVmYXVsdCh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZGVmYXVsdFZhbHVlO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjcm9zcy1wbGF0Zm9ybSBVVEYtOCBlbmNvZGVyIGFuZCBkZWNvZGVyIHRoYXQgd29ya3Ncbi8vIHdpdGggdGhlIEJ1ZmZlciBBUEkgZGVmaW5lZCBpbiBidWYuanNcblxuaW1wb3J0IHthbGxvYywgTm9kZUJ1ZmZlciwgSGVhcEJ1ZmZlciwgQ29tYmluZWRCdWZmZXJ9IGZyb20gXCIuL2J1ZlwiO1xuaW1wb3J0IHtTdHJpbmdEZWNvZGVyfSBmcm9tICdzdHJpbmdfZGVjb2Rlcic7XG5pbXBvcnQge25ld0Vycm9yfSBmcm9tICcuLy4uL2Vycm9yJztcbmxldCBwbGF0Zm9ybU9iaiA9IHt9O1xuXG5cbnRyeSB7XG4gIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaXMgJ2J1ZmZlcicgaXMgbm90IGF2YWlsYWJsZVxuICByZXF1aXJlLnJlc29sdmUoXCJidWZmZXJcIik7XG4gIGxldCBkZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoJ3V0ZjgnKTtcbiAgbGV0IG5vZGUgPSByZXF1aXJlKFwiYnVmZmVyXCIpO1xuXG4gIHBsYXRmb3JtT2JqID0ge1xuICAgIFwiZW5jb2RlXCI6IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHJldHVybiBuZXcgTm9kZUJ1ZmZlcihuZXcgbm9kZS5CdWZmZXIoc3RyLCBcIlVURi04XCIpKTtcbiAgICB9LFxuICAgIFwiZGVjb2RlXCI6IGZ1bmN0aW9uIChidWZmZXIsIGxlbmd0aCkge1xuICAgICAgaWYgKGJ1ZmZlciBpbnN0YW5jZW9mIE5vZGVCdWZmZXIpIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gYnVmZmVyLnBvc2l0aW9uLFxuICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgbGVuZ3RoO1xuICAgICAgICBidWZmZXIucG9zaXRpb24gPSBNYXRoLm1pbihlbmQsIGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gYnVmZmVyLl9idWZmZXIudG9TdHJpbmcoJ3V0ZjgnLCBzdGFydCwgZW5kKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGJ1ZmZlciBpbnN0YW5jZW9mIENvbWJpbmVkQnVmZmVyKSB7XG4gICAgICAgIGxldCBvdXQgPSBzdHJlYW1EZWNvZGVDb21iaW5lZEJ1ZmZlcihidWZmZXIsIGxlbmd0aCxcbiAgICAgICAgICAocGFydEJ1ZmZlcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRlY29kZXIud3JpdGUocGFydEJ1ZmZlci5fYnVmZmVyKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkZWNvZGVyLmVuZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXdFcnJvcihcIkRvbid0IGtub3cgaG93IHRvIGRlY29kZSBzdHJpbmdzIGZyb20gYFwiICsgYnVmZmVyICsgXCJgLlwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufSBjYXRjaCAoZSkge1xuXG4gIC8vIE5vdCBvbiBOb2RlSlMsIGFkZCBzaGltIGZvciBXZWJBUEkgVGV4dEVuY29kZXIvVGV4dERlY29kZXJcbiAgdmFyIHRleHRFbmNvZGluZyA9IHJlcXVpcmUoJy4uLy4uL2V4dGVybmFsL3RleHQtZW5jb2RpbmcvaW5kZXgnKTtcbiAgbGV0IGVuY29kZXIgPSBuZXcgdGV4dEVuY29kaW5nLlRleHRFbmNvZGVyKFwidXRmLThcIik7XG4gIGxldCBkZWNvZGVyID0gbmV3IHRleHRFbmNvZGluZy5UZXh0RGVjb2RlcihcInV0Zi04XCIpO1xuXG4gIHBsYXRmb3JtT2JqID0ge1xuICAgIFwiZW5jb2RlXCI6IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHJldHVybiBuZXcgSGVhcEJ1ZmZlcihlbmNvZGVyLmVuY29kZShzdHIpLmJ1ZmZlcik7XG4gICAgfSxcbiAgICBcImRlY29kZVwiOiBmdW5jdGlvbiAoYnVmZmVyLCBsZW5ndGgpIHtcbiAgICAgIGlmIChidWZmZXIgaW5zdGFuY2VvZiBIZWFwQnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVyLmRlY29kZShidWZmZXIucmVhZFZpZXcoTWF0aC5taW4obGVuZ3RoLCBidWZmZXIubGVuZ3RoIC0gYnVmZmVyLnBvc2l0aW9uKSkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIERlY29kaW5nIGNvbWJpbmVkIGJ1ZmZlciBpcyBjb21wbGljYXRlZC4gRm9yIHNpbXBsaWNpdHksIGZvciBub3csIFxuICAgICAgICAvLyB3ZSBzaW1wbHkgY29weSB0aGUgY29tYmluZWQgYnVmZmVyIGludG8gYSByZWd1bGFyIGJ1ZmZlciBhbmQgZGVjb2RlIHRoYXQuXG4gICAgICAgIHZhciB0bXBCdWYgPSBhbGxvYyhsZW5ndGgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdG1wQnVmLndyaXRlVUludDgoYnVmZmVyLnJlYWRVSW50OCgpKTtcbiAgICAgICAgfVxuICAgICAgICB0bXBCdWYucmVzZXQoKTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKHRtcEJ1Zi5yZWFkVmlldyhsZW5ndGgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubGV0IHN0cmVhbURlY29kZUNvbWJpbmVkQnVmZmVyID0gKGNvbWJpbmVkQnVmZmVycywgbGVuZ3RoLCBkZWNvZGVGbiwgZW5kRm4pID0+IHtcbiAgbGV0IHJlbWFpbmluZ0J5dGVzVG9SZWFkID0gbGVuZ3RoO1xuICBsZXQgcG9zaXRpb24gPSBjb21iaW5lZEJ1ZmZlcnMucG9zaXRpb247XG4gIGNvbWJpbmVkQnVmZmVycy5fdXBkYXRlUG9zKE1hdGgubWluKGxlbmd0aCwgY29tYmluZWRCdWZmZXJzLmxlbmd0aCAtIHBvc2l0aW9uKSk7XG4gIC8vIFJlZHVjZSBDb21iaW5lZEJ1ZmZlcnMgdG8gYSBkZWNvZGVkIHN0cmluZ1xuICBsZXQgb3V0ID0gY29tYmluZWRCdWZmZXJzLl9idWZmZXJzLnJlZHVjZShmdW5jdGlvbiAobGFzdCwgcGFydEJ1ZmZlcikge1xuICAgIGlmIChyZW1haW5pbmdCeXRlc1RvUmVhZCA8PSAwKSB7XG4gICAgICByZXR1cm4gbGFzdDtcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID49IHBhcnRCdWZmZXIubGVuZ3RoKSB7XG4gICAgICBwb3NpdGlvbiAtPSBwYXJ0QnVmZmVyLmxlbmd0aDtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgcGFydEJ1ZmZlci5fdXBkYXRlUG9zKHBvc2l0aW9uIC0gcGFydEJ1ZmZlci5wb3NpdGlvbik7XG4gICAgICBsZXQgYnl0ZXNUb1JlYWQgPSBNYXRoLm1pbihwYXJ0QnVmZmVyLmxlbmd0aCAtIHBvc2l0aW9uLCByZW1haW5pbmdCeXRlc1RvUmVhZCk7XG4gICAgICBsZXQgbGFzdFNsaWNlID0gcGFydEJ1ZmZlci5yZWFkU2xpY2UoYnl0ZXNUb1JlYWQpO1xuICAgICAgcGFydEJ1ZmZlci5fdXBkYXRlUG9zKGJ5dGVzVG9SZWFkKTtcbiAgICAgIHJlbWFpbmluZ0J5dGVzVG9SZWFkID0gTWF0aC5tYXgocmVtYWluaW5nQnl0ZXNUb1JlYWQgLSBsYXN0U2xpY2UubGVuZ3RoLCAwKTtcbiAgICAgIHBvc2l0aW9uID0gMDtcbiAgICAgIHJldHVybiBsYXN0ICsgZGVjb2RlRm4obGFzdFNsaWNlKTtcbiAgICB9XG4gIH0sICcnKTtcbiAgcmV0dXJuIG91dCArIGVuZEZuKCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybU9iajtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5jb25zdCBFTkNSWVBUSU9OX09OID0gXCJFTkNSWVBUSU9OX09OXCI7XG5jb25zdCBFTkNSWVBUSU9OX09GRiA9IFwiRU5DUllQVElPTl9PRkZcIjtcblxuZnVuY3Rpb24gaXNFbXB0eU9iamVjdE9yTnVsbChvYmopIHtcbiAgaWYgKGlzTnVsbChvYmopKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoIWlzT2JqZWN0KG9iaikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGxldCBwcm9wIGluIG9iaikge1xuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNOdWxsKG9iaikge1xuICByZXR1cm4gb2JqID09PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiBvYmo7XG4gIHJldHVybiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IHR5cGUgPT09ICdvYmplY3QnICYmIEJvb2xlYW4ob2JqKTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0U3RyaW5nKG9iaiwgb2JqTmFtZSkge1xuICBpZiAoIWlzU3RyaW5nKG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKG9iak5hbWUgKyAnIGV4cGVjdGVkIHRvIGJlIHN0cmluZyBidXQgd2FzOiAnICsgSlNPTi5zdHJpbmdpZnkob2JqKSk7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gaXNTdHJpbmcoc3RyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3RyKSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG59XG5cbmV4cG9ydCB7XG4gIGlzRW1wdHlPYmplY3RPck51bGwsXG4gIGFzc2VydFN0cmluZyxcbiAgRU5DUllQVElPTl9PTixcbiAgRU5DUllQVElPTl9PRkZcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge25ld0Vycm9yfSBmcm9tIFwiLi9lcnJvclwiO1xuXG5mdW5jdGlvbiBnZW5lcmF0ZUZpZWxkTG9va3VwKCBrZXlzICkge1xuICBsZXQgbG9va3VwID0ge307XG4gIGtleXMuZm9yRWFjaCggKG5hbWUsIGlkeCkgPT4geyBsb29rdXBbbmFtZV0gPSBpZHg7IH0pO1xuICByZXR1cm4gbG9va3VwO1xufVxuXG4vKipcbiAqIFJlY29yZHMgbWFrZSB1cCB0aGUgY29udGVudHMgb2YgdGhlIHtAbGluayBSZXN1bHR9LCBhbmQgaXMgaG93IHlvdSBhY2Nlc3NcbiAqIHRoZSBvdXRwdXQgb2YgYSBzdGF0ZW1lbnQuIEEgc2ltcGxlIHN0YXRlbWVudCBtaWdodCB5aWVsZCBhIHJlc3VsdCBzdHJlYW1cbiAqIHdpdGggYSBzaW5nbGUgcmVjb3JkLCBmb3IgaW5zdGFuY2U6XG4gKlxuICogICAgIE1BVENIICh1OlVzZXIpIFJFVFVSTiB1Lm5hbWUsIHUuYWdlXG4gKlxuICogVGhpcyByZXR1cm5zIGEgc3RyZWFtIG9mIHJlY29yZHMgd2l0aCB0d28gZmllbGRzLCBuYW1lZCBgdS5uYW1lYCBhbmQgYHUuYWdlYCxcbiAqIGVhY2ggcmVjb3JkIHJlcHJlc2VudHMgb25lIHVzZXIgZm91bmQgYnkgdGhlIHN0YXRlbWVudCBhYm92ZS4gWW91IGNhbiBhY2Nlc3NcbiAqIHRoZSB2YWx1ZXMgb2YgZWFjaCBmaWVsZCBlaXRoZXIgYnkgbmFtZTpcbiAqXG4gKiAgICAgcmVjb3JkLmdldChcInUubmFtZVwiKVxuICpcbiAqIE9yIGJ5IGl0J3MgcG9zaXRpb246XG4gKlxuICogICAgIHJlY29yZC5nZXQoMClcbiAqXG4gKiBAYWNjZXNzIHB1YmxpY1xuICovXG5jbGFzcyBSZWNvcmQge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IHJlY29yZCBvYmplY3QuXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGtleXMgQW4gYXJyYXkgb2YgZmllbGQga2V5cywgaW4gdGhlIG9yZGVyIHRoZSBmaWVsZHMgYXBwZWFyXG4gICAqICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSByZWNvcmRcbiAgICogQHBhcmFtIHtPYmplY3R9IGZpZWxkcyBBbiBhcnJheSBvZiBmaWVsZCB2YWx1ZXNcbiAgICogQHBhcmFtIHtPYmplY3R9IGZpZWxkTG9va3VwIEFuIG9iamVjdCBvZiBmaWVsZE5hbWUgLT4gdmFsdWUgaW5kZXgsIHVzZWQgdG8gbWFwXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIG5hbWVzIHRvIHZhbHVlcy4gSWYgdGhpcyBpcyBudWxsLCBvbmUgd2lsbCBiZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihrZXlzLCBmaWVsZHMsIGZpZWxkTG9va3VwPW51bGwgKSB7XG4gICAgdGhpcy5rZXlzID0ga2V5cztcbiAgICB0aGlzLmxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHRoaXMuX2ZpZWxkcyA9IGZpZWxkcztcbiAgICB0aGlzLl9maWVsZExvb2t1cCA9IGZpZWxkTG9va3VwIHx8IGdlbmVyYXRlRmllbGRMb29rdXAoIGtleXMgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gdGhlIGdpdmVuIGZ1bmN0aW9uIGZvciBlYWNoIGZpZWxkIGluIHRoaXMgcmVjb3JkLiBUaGUgZnVuY3Rpb25cbiAgICogd2lsbCBnZXQgdGhyZWUgYXJndW1lbnRzIC0gdGhlIHZhbHVlLCB0aGUga2V5IGFuZCB0aGlzIHJlY29yZCwgaW4gdGhhdFxuICAgKiBvcmRlci5cbiAgICpcbiAgICogQHBhcmFtIHZpc2l0b3JcbiAgICovXG4gIGZvckVhY2goIHZpc2l0b3IgKSB7XG4gICAgZm9yKGxldCBpPTA7aTx0aGlzLmtleXMubGVuZ3RoO2krKykge1xuICAgICAgdmlzaXRvciggdGhpcy5fZmllbGRzW2ldLCB0aGlzLmtleXNbaV0sIHRoaXMgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGFuIG9iamVjdCBvdXQgb2YgdGhlIGN1cnJlbnQgUmVjb3JkXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuICB0b09iamVjdCgpIHtcbiAgICBjb25zdCBvYmplY3QgPSB7fTtcbiAgICB0aGlzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIG9iamVjdFtrZXldID0gdmFsdWVcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgdmFsdWUgZnJvbSB0aGlzIHJlY29yZCwgZWl0aGVyIGJ5IGluZGV4IG9yIGJ5IGZpZWxkIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8TnVtYmVyfSBrZXkgRmllbGQga2V5LCBvciB0aGUgaW5kZXggb2YgdGhlIGZpZWxkLlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGdldCgga2V5ICkge1xuICAgIGxldCBpbmRleDtcbiAgICBpZiggISh0eXBlb2Yga2V5ID09PSBcIm51bWJlclwiKSApIHtcbiAgICAgIGluZGV4ID0gdGhpcy5fZmllbGRMb29rdXBba2V5XTtcbiAgICAgIGlmKCBpbmRleCA9PT0gdW5kZWZpbmVkICkge1xuICAgICAgICB0aHJvdyBuZXdFcnJvcihcIlRoaXMgcmVjb3JkIGhhcyBubyBmaWVsZCB3aXRoIGtleSAnXCIra2V5K1wiJywgYXZhaWxhYmxlIGtleSBhcmU6IFtcIiArIHRoaXMua2V5cyArIFwiXS5cIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4ID0ga2V5O1xuICAgIH1cblxuICAgIGlmKCBpbmRleCA+IHRoaXMuX2ZpZWxkcy5sZW5ndGggLSAxIHx8IGluZGV4IDwgMCApIHtcbiAgICAgIHRocm93IG5ld0Vycm9yKFwiVGhpcyByZWNvcmQgaGFzIG5vIGZpZWxkIHdpdGggaW5kZXggJ1wiK2luZGV4K1wiJy4gUmVtZW1iZXIgdGhhdCBpbmRleGVzIHN0YXJ0IGF0IGAwYCwgXCIgK1xuICAgICAgICBcImFuZCBtYWtlIHN1cmUgeW91ciBzdGF0ZW1lbnQgcmV0dXJucyByZWNvcmRzIGluIHRoZSBzaGFwZSB5b3UgbWVhbnQgaXQgdG8uXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9maWVsZHNbaW5kZXhdO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdmFsdWUgZnJvbSB0aGlzIHJlY29yZCwgZWl0aGVyIGJ5IGluZGV4IG9yIGJ5IGZpZWxkIGtleSwgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xOdW1iZXJ9IGtleSBGaWVsZCBrZXksIG9yIHRoZSBpbmRleCBvZiB0aGUgZmllbGQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaGFzKCBrZXkgKSB7XG4gICAgLy8gaWYga2V5IGlzIGEgbnVtYmVyLCB3ZSBjaGVjayBpZiBpdCBpcyBpbiB0aGUgX2ZpZWxkcyBhcnJheVxuICAgIGlmKCB0eXBlb2Yga2V5ID09PSBcIm51bWJlclwiICkge1xuICAgICAgcmV0dXJuICgga2V5ID49IDAgJiYga2V5IDwgdGhpcy5fZmllbGRzLmxlbmd0aCApO1xuICAgIH1cblxuICAgIC8vIGlmIGl0J3Mgbm90IGEgbnVtYmVyLCB3ZSBjaGVjayBfZmllbGRMb29rdXAgZGljdGlvbmFyeSBkaXJlY3RseVxuICAgIHJldHVybiB0aGlzLl9maWVsZExvb2t1cFtrZXldICE9PSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVjb3JkXG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtpbnQsIGlzSW50fSBmcm9tICcuL2ludGVnZXInO1xuXG4vKipcbiAgKiBBIFJlc3VsdFN1bW1hcnkgaW5zdGFuY2UgY29udGFpbnMgc3RydWN0dXJlZCBtZXRhZGF0YSBmb3IgYSB7UmVzdWx0fS5cbiAgKiBAYWNjZXNzIHB1YmxpY1xuICAqL1xuY2xhc3MgUmVzdWx0U3VtbWFyeSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlbWVudCAtIFRoZSBzdGF0ZW1lbnQgdGhpcyBzdW1tYXJ5IGlzIGZvclxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1ldGVycyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBzdGF0ZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG1ldGFkYXRhIC0gU3RhdGVtZW50IG1ldGFkYXRhXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdGF0ZW1lbnQsIHBhcmFtZXRlcnMsIG1ldGFkYXRhKSB7XG4gICAgdGhpcy5zdGF0ZW1lbnQgPSB7dGV4dDogc3RhdGVtZW50LCBwYXJhbWV0ZXJzfTtcbiAgICB0aGlzLnN0YXRlbWVudFR5cGUgPSBtZXRhZGF0YS50eXBlO1xuICAgIGxldCBjb3VudGVycyA9IG5ldyBTdGF0ZW1lbnRTdGF0aXN0aWNzKG1ldGFkYXRhLnN0YXRzIHx8IHt9KTtcbiAgICB0aGlzLmNvdW50ZXJzID0gY291bnRlcnM7XG4gICAgLy9mb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHJlbW92ZSBpbiBmdXR1cmUgdmVyc2lvblxuICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcyA9IGNvdW50ZXJzO1xuICAgIHRoaXMucGxhbiA9IG1ldGFkYXRhLnBsYW4gfHwgbWV0YWRhdGEucHJvZmlsZSA/IG5ldyBQbGFuKG1ldGFkYXRhLnBsYW4gfHwgbWV0YWRhdGEucHJvZmlsZSkgOiBmYWxzZTtcbiAgICB0aGlzLnByb2ZpbGUgPSBtZXRhZGF0YS5wcm9maWxlID8gbmV3IFByb2ZpbGVkUGxhbihtZXRhZGF0YS5wcm9maWxlKSA6IGZhbHNlO1xuICAgIHRoaXMubm90aWZpY2F0aW9ucyA9IHRoaXMuX2J1aWxkTm90aWZpY2F0aW9ucyhtZXRhZGF0YS5ub3RpZmljYXRpb25zKTtcbiAgICB0aGlzLnNlcnZlciA9IG5ldyBTZXJ2ZXJJbmZvKG1ldGFkYXRhLnNlcnZlcik7XG4gICAgdGhpcy5yZXN1bHRDb25zdW1lZEFmdGVyID0gbWV0YWRhdGEucmVzdWx0X2NvbnN1bWVkX2FmdGVyO1xuICAgIHRoaXMucmVzdWx0QXZhaWxhYmxlQWZ0ZXIgPSBtZXRhZGF0YS5yZXN1bHRfYXZhaWxhYmxlX2FmdGVyO1xuICB9XG4gIF9idWlsZE5vdGlmaWNhdGlvbnMobm90aWZpY2F0aW9ucykge1xuICAgIGlmKCFub3RpZmljYXRpb25zKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiBub3RpZmljYXRpb25zLm1hcChmdW5jdGlvbihuKSB7IHJldHVybiBuZXcgTm90aWZpY2F0aW9uKG4pIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSByZXN1bHQgc3VtbWFyeSBoYXMgYSBwbGFuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBoYXNQbGFuKCkge1xuICAgIHJldHVybiB0aGlzLnBsYW4gaW5zdGFuY2VvZiBQbGFuXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHJlc3VsdCBzdW1tYXJ5IGhhcyBhIHByb2ZpbGVcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc1Byb2ZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvZmlsZSBpbnN0YW5jZW9mIFByb2ZpbGVkUGxhblxuICB9XG59XG5cbi8qKlxuICAqIENsYXNzIGZvciBleGVjdXRpb24gcGxhbiByZWNlaXZlZCBieSBwcmVwZW5kaW5nIEN5cGhlciB3aXRoIEVYUExBSU4uXG4gICogQGFjY2VzcyBwdWJsaWNcbiAgKi9cbmNsYXNzIFBsYW4ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgUGxhbiBpbnN0YW5jZVxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtPYmplY3R9IHBsYW4gLSBPYmplY3Qgd2l0aCBwbGFuIGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yKHBsYW4pIHtcbiAgICB0aGlzLm9wZXJhdG9yVHlwZSA9IHBsYW4ub3BlcmF0b3JUeXBlO1xuICAgIHRoaXMuaWRlbnRpZmllcnMgPSBwbGFuLmlkZW50aWZpZXJzO1xuICAgIHRoaXMuYXJndW1lbnRzID0gcGxhbi5hcmdzO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBwbGFuLmNoaWxkcmVuID8gcGxhbi5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiBuZXcgUGxhbihjaGlsZCkpIDogW107XG4gIH1cbn1cblxuLyoqXG4gICogQ2xhc3MgZm9yIGV4ZWN1dGlvbiBwbGFuIHJlY2VpdmVkIGJ5IHByZXBlbmRpbmcgQ3lwaGVyIHdpdGggUFJPRklMRS5cbiAgKiBAYWNjZXNzIHB1YmxpY1xuICAqL1xuY2xhc3MgUHJvZmlsZWRQbGFuIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIFByb2ZpbGVkUGxhbiBpbnN0YW5jZVxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb2ZpbGUgLSBPYmplY3Qgd2l0aCBwcm9maWxlIGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb2ZpbGUpIHtcbiAgICB0aGlzLm9wZXJhdG9yVHlwZSA9IHByb2ZpbGUub3BlcmF0b3JUeXBlO1xuICAgIHRoaXMuaWRlbnRpZmllcnMgPSBwcm9maWxlLmlkZW50aWZpZXJzO1xuICAgIHRoaXMuYXJndW1lbnRzID0gcHJvZmlsZS5hcmdzO1xuICAgIHRoaXMuZGJIaXRzID0gcHJvZmlsZS5hcmdzLkRiSGl0cy50b0ludCgpO1xuICAgIHRoaXMucm93cyA9IHByb2ZpbGUuYXJncy5Sb3dzLnRvSW50KCk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IHByb2ZpbGUuY2hpbGRyZW4gPyBwcm9maWxlLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IG5ldyBQcm9maWxlZFBsYW4oY2hpbGQpKSA6IFtdO1xuICB9XG59XG5cbi8qKlxuICAqIEdldCBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbiBmb3IgYSB7UmVzdWx0fS5cbiAgKiBAYWNjZXNzIHB1YmxpY1xuICAqL1xuY2xhc3MgU3RhdGVtZW50U3RhdGlzdGljcyB7XG4gIC8qKlxuICAgKiBTdHJ1Y3R1cml6ZSB0aGUgc3RhdGlzdGljc1xuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRpc3RpY3MgLSBSZXN1bHQgc3RhdGlzdGljc1xuICAgKi9cbiAgY29uc3RydWN0b3Ioc3RhdGlzdGljcykge1xuICAgIHRoaXMuX3N0YXRzID0ge1xuICAgICAgbm9kZXNDcmVhdGVkOiAwLFxuICAgICAgbm9kZXNEZWxldGVkOiAwLFxuICAgICAgcmVsYXRpb25zaGlwc0NyZWF0ZWQ6IDAsXG4gICAgICByZWxhdGlvbnNoaXBzRGVsZXRlZDogMCxcbiAgICAgIHByb3BlcnRpZXNTZXQ6IDAsXG4gICAgICBsYWJlbHNBZGRlZDogMCxcbiAgICAgIGxhYmVsc1JlbW92ZWQ6IDAsXG4gICAgICBpbmRleGVzQWRkZWQ6IDAsXG4gICAgICBpbmRleGVzUmVtb3ZlZDogMCxcbiAgICAgIGNvbnN0cmFpbnRzQWRkZWQ6IDAsXG4gICAgICBjb25zdHJhaW50c1JlbW92ZWQ6IDBcbiAgICB9O1xuICAgIE9iamVjdC5rZXlzKHN0YXRpc3RpY3MpLmZvckVhY2goKGluZGV4KSA9PiB7XG4gICAgICAvL1RvIGNhbWVsQ2FzZVxuICAgICAgdGhpcy5fc3RhdHNbaW5kZXgucmVwbGFjZSgvKFxcLVxcdykvZywgKG0pID0+IG1bMV0udG9VcHBlckNhc2UoKSldID1cbiAgICAgICAgaXNJbnQoc3RhdGlzdGljc1tpbmRleF0pID8gc3RhdGlzdGljc1tpbmRleF0udG9JbnQoKSA6IHN0YXRpc3RpY3NbaW5kZXhdO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpZCB0aGUgZGF0YWJhc2UgZ2V0IHVwZGF0ZWQ/XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBjb250YWluc1VwZGF0ZXMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3N0YXRzKS5yZWR1Y2UoKGxhc3QsIGN1cnJlbnQpID0+IHtcbiAgICAgIHJldHVybiBsYXN0ICsgdGhpcy5fc3RhdHNbY3VycmVudF07XG4gICAgfSwgMCkgPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2Ygbm9kZXMgY3JlYXRlZC5cbiAgICovXG4gIG5vZGVzQ3JlYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHMubm9kZXNDcmVhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2Ygbm9kZXMgZGVsZXRlZC5cbiAgICovXG4gIG5vZGVzRGVsZXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHMubm9kZXNEZWxldGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2YgcmVsYXRpb25zaGlwcyBjcmVhdGVkLlxuICAgKi9cbiAgcmVsYXRpb25zaGlwc0NyZWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRzLnJlbGF0aW9uc2hpcHNDcmVhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2Ygbm9kZXMgZGVsZXRlZC5cbiAgICovXG4gIHJlbGF0aW9uc2hpcHNEZWxldGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0cy5yZWxhdGlvbnNoaXBzRGVsZXRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IC0gTnVtYmVyIG9mIHByb3BlcnRpZXMgc2V0LlxuICAgKi9cbiAgcHJvcGVydGllc1NldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHMucHJvcGVydGllc1NldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IC0gTnVtYmVyIG9mIGxhYmVscyBhZGRlZC5cbiAgICovXG4gIGxhYmVsc0FkZGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0cy5sYWJlbHNBZGRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IC0gTnVtYmVyIG9mIGxhYmVscyByZW1vdmVkLlxuICAgKi9cbiAgbGFiZWxzUmVtb3ZlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHMubGFiZWxzUmVtb3ZlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IC0gTnVtYmVyIG9mIGluZGV4ZXMgYWRkZWQuXG4gICAqL1xuICBpbmRleGVzQWRkZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRzLmluZGV4ZXNBZGRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IC0gTnVtYmVyIG9mIGluZGV4ZXMgcmVtb3ZlZC5cbiAgICovXG4gIGluZGV4ZXNSZW1vdmVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0cy5pbmRleGVzUmVtb3ZlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IC0gTnVtYmVyIG9mIGNvbnRyYWludHMgYWRkZWQuXG4gICAqL1xuICBjb25zdHJhaW50c0FkZGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0cy5jb25zdHJhaW50c0FkZGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2YgY29udHJhaW50cyByZW1vdmVkLlxuICAgKi9cbiAgY29uc3RyYWludHNSZW1vdmVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0cy5jb25zdHJhaW50c1JlbW92ZWQ7XG4gIH1cbn1cblxuLyoqXG4gICogQ2xhc3MgZm9yIEN5cGhlciBub3RpZmljYXRpb25zXG4gICogQGFjY2VzcyBwdWJsaWNcbiAgKi9cbmNsYXNzIE5vdGlmaWNhdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBOb3RpZmljYXRpb24gaW5zdGFuY2VcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBub3RpZmljYXRpb24gLSBPYmplY3Qgd2l0aCBub3RpZmljYXRpb24gZGF0YVxuICAgKi9cbiAgY29uc3RydWN0b3Iobm90aWZpY2F0aW9uKSB7XG4gICAgdGhpcy5jb2RlID0gbm90aWZpY2F0aW9uLmNvZGU7XG4gICAgdGhpcy50aXRsZSA9IG5vdGlmaWNhdGlvbi50aXRsZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gbm90aWZpY2F0aW9uLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMuc2V2ZXJpdHkgPSBub3RpZmljYXRpb24uc2V2ZXJpdHk7XG4gICAgdGhpcy5wb3NpdGlvbiA9IE5vdGlmaWNhdGlvbi5fY29uc3RydWN0UG9zaXRpb24obm90aWZpY2F0aW9uLnBvc2l0aW9uKTtcbiAgfVxuXG4gIHN0YXRpYyBfY29uc3RydWN0UG9zaXRpb24ocG9zKSB7XG4gICAgaWYoIXBvcykge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgb2Zmc2V0OiBwb3Mub2Zmc2V0LnRvSW50KCksXG4gICAgICBsaW5lOiBwb3MubGluZS50b0ludCgpLFxuICAgICAgY29sdW1uOiBwb3MuY29sdW1uLnRvSW50KClcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gICogQ2xhc3MgZm9yIGV4cG9zaW5nIHNlcnZlciBpbmZvIGZyb20gYSByZXN1bHQuXG4gICogQGFjY2VzcyBwdWJsaWNcbiAgKi9cbmNsYXNzIFNlcnZlckluZm8ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgU2VydmVySW5mbyBpbnN0YW5jZVxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtPYmplY3R9IHNlcnZlck1ldGEgLSBPYmplY3Qgd2l0aCBzZXJ2ZXJNZXRhIGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNlcnZlck1ldGEpIHtcbiAgICBpZiAoc2VydmVyTWV0YSkge1xuICAgICAgdGhpcy5hZGRyZXNzID0gc2VydmVyTWV0YS5hZGRyZXNzO1xuICAgICAgdGhpcy52ZXJzaW9uID0gc2VydmVyTWV0YS52ZXJzaW9uO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBzdGF0ZW1lbnRUeXBlID0ge1xuICBSRUFEX09OTFk6ICdyJyxcbiAgUkVBRF9XUklURTogJ3J3JyxcbiAgV1JJVEVfT05MWTogJ3cnLFxuICBTQ0hFTUFfV1JJVEU6ICdzJ1xufTtcblxuZXhwb3J0IHtcbiAgc3RhdGVtZW50VHlwZVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXN1bHRTdW1tYXJ5XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IFJlc3VsdFN1bW1hcnkgZnJvbSAnLi9yZXN1bHQtc3VtbWFyeSc7XG5pbXBvcnQge0VNUFRZX0NPTk5FQ1RJT05fSE9MREVSfSBmcm9tICcuL2ludGVybmFsL2Nvbm5lY3Rpb24taG9sZGVyJztcblxuLyoqXG4gICogQSBzdHJlYW0gb2Yge0BsaW5rIFJlY29yZH0gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgYSBzdGF0ZW1lbnQuXG4gICogQGFjY2VzcyBwdWJsaWNcbiAgKi9cbmNsYXNzIFJlc3VsdCB7XG4gIC8qKlxuICAgKiBJbmplY3QgdGhlIG9ic2VydmVyIHRvIGJlIHVzZWQuXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICogQHBhcmFtIHtTdHJlYW1PYnNlcnZlcn0gc3RyZWFtT2JzZXJ2ZXJcbiAgICogQHBhcmFtIHttaXhlZH0gc3RhdGVtZW50IC0gQ3lwaGVyIHN0YXRlbWVudCB0byBleGVjdXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbWV0ZXJzIC0gTWFwIHdpdGggcGFyYW1ldGVycyB0byB1c2UgaW4gc3RhdGVtZW50XG4gICAqIEBwYXJhbSBtZXRhU3VwcGxpZXIgZnVuY3Rpb24sIHdoZW4gY2FsbGVkIHByb3ZpZGVzIG1ldGFkYXRhXG4gICAqIEBwYXJhbSB7Q29ubmVjdGlvbkhvbGRlcn0gY29ubmVjdGlvbkhvbGRlciAtIHRvIGJlIG5vdGlmaWVkIHdoZW4gcmVzdWx0IGlzIGVpdGhlciBmdWxseSBjb25zdW1lZCBvciBlcnJvciBoYXBwZW5lZC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHN0cmVhbU9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMsIG1ldGFTdXBwbGllciwgY29ubmVjdGlvbkhvbGRlcikge1xuICAgIHRoaXMuX3N0cmVhbU9ic2VydmVyID0gc3RyZWFtT2JzZXJ2ZXI7XG4gICAgdGhpcy5fcCA9IG51bGw7XG4gICAgdGhpcy5fc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICAgIHRoaXMuX3BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzIHx8IHt9O1xuICAgIHRoaXMuX21ldGFTdXBwbGllciA9IG1ldGFTdXBwbGllciB8fCBmdW5jdGlvbigpe3JldHVybiB7fTt9O1xuICAgIHRoaXMuX2Nvbm5lY3Rpb25Ib2xkZXIgPSBjb25uZWN0aW9uSG9sZGVyIHx8IEVNUFRZX0NPTk5FQ1RJT05fSE9MREVSO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbmQgcmV0dXJuIG5ldyBQcm9taXNlXG4gICAqIEByZXR1cm4ge1Byb21pc2V9IG5ldyBQcm9taXNlLlxuICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVQcm9taXNlKCkge1xuICAgIGlmKHRoaXMuX3ApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuX3AgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgcmVjb3JkcyA9IFtdO1xuICAgICAgbGV0IG9ic2VydmVyID0ge1xuICAgICAgICBvbk5leHQ6IChyZWNvcmQpID0+IHsgcmVjb3Jkcy5wdXNoKHJlY29yZCk7IH0sXG4gICAgICAgIG9uQ29tcGxldGVkOiAoc3VtbWFyeSkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoe3JlY29yZHM6IHJlY29yZHMsIHN1bW1hcnk6IHN1bW1hcnl9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogKGVycm9yKSA9PiB7IHJlamVjdChlcnJvcik7IH1cbiAgICAgIH07XG4gICAgICBzZWxmLnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2FpdHMgZm9yIGFsbCByZXN1bHRzIGFuZCBjYWxscyB0aGUgcGFzc2VkIGluIGZ1bmN0aW9uIHdpdGggdGhlIHJlc3VsdHMuXG4gICAqIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoIHRoZSB7QGxpbmsgI3N1YnNjcmliZX0gZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24ocmVzdWx0OiB7cmVjb3JkczpBcnJheTxSZWNvcmQ+fSl9IG9uRnVsZmlsbGVkIC0gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gZmluaXNoZWQuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oZXJyb3I6IHttZXNzYWdlOnN0cmluZywgY29kZTpzdHJpbmd9KX0gb25SZWplY3RlZCAtIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB1cG9uIGVycm9ycy5cbiAgICogQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZS5cbiAgICovXG4gIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICB0aGlzLl9jcmVhdGVQcm9taXNlKCk7XG4gICAgcmV0dXJuIHRoaXMuX3AudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2F0Y2ggZXJyb3JzIHdoZW4gdXNpbmcgcHJvbWlzZXMuXG4gICAqIENhbm5vdCBiZSB1c2VkIHdpdGggdGhlIHN1YnNjcmliZSBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihlcnJvcjoge21lc3NhZ2U6c3RyaW5nLCBjb2RlOnN0cmluZ30pfSBvblJlamVjdGVkIC0gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHVwb24gZXJyb3JzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlLlxuICAgKi9cbiAgY2F0Y2gob25SZWplY3RlZCkge1xuICAgIHRoaXMuX2NyZWF0ZVByb21pc2UoKTtcbiAgICByZXR1cm4gdGhpcy5fcC5jYXRjaChvblJlamVjdGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdHJlYW0gcmVjb3JkcyB0byBvYnNlcnZlciBhcyB0aGV5IGNvbWUgaW4sIHRoaXMgaXMgYSBtb3JlIGVmZmljaWVudCBtZXRob2RcbiAgICogb2YgaGFuZGxpbmcgdGhlIHJlc3VsdHMsIGFuZCBhbGxvd3MgeW91IHRvIGhhbmRsZSBhcmJpdHJhcmlseSBsYXJnZSByZXN1bHRzLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JzZXJ2ZXIgLSBPYnNlcnZlciBvYmplY3RcbiAgICogQHBhcmFtIHtmdW5jdGlvbihyZWNvcmQ6IFJlY29yZCl9IG9ic2VydmVyLm9uTmV4dCAtIEhhbmRsZSByZWNvcmRzLCBvbmUgYnkgb25lLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1ldGFkYXRhOiBPYmplY3QpfSBvYnNlcnZlci5vbkNvbXBsZXRlZCAtIEhhbmRsZSBzdHJlYW0gdGFpbCwgdGhlIG1ldGFkYXRhLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGVycm9yOiB7bWVzc2FnZTpzdHJpbmcsIGNvZGU6c3RyaW5nfSl9IG9ic2VydmVyLm9uRXJyb3IgLSBIYW5kbGUgZXJyb3JzLlxuICAgKiBAcmV0dXJuXG4gICAqL1xuICBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICBjb25zdCBvbkNvbXBsZXRlZE9yaWdpbmFsID0gb2JzZXJ2ZXIub25Db21wbGV0ZWQ7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3Qgb25Db21wbGV0ZWRXcmFwcGVyID0gKG1ldGFkYXRhKSA9PiB7XG5cbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxNZXRhID0gc2VsZi5fbWV0YVN1cHBsaWVyKCk7XG4gICAgICBmb3IobGV0IGtleSBpbiBhZGRpdGlvbmFsTWV0YSkge1xuICAgICAgICBpZiAoYWRkaXRpb25hbE1ldGEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIG1ldGFkYXRhW2tleV0gPSBhZGRpdGlvbmFsTWV0YVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBzdW0gPSBuZXcgUmVzdWx0U3VtbWFyeSh0aGlzLl9zdGF0ZW1lbnQsIHRoaXMuX3BhcmFtZXRlcnMsIG1ldGFkYXRhKTtcblxuICAgICAgLy8gbm90aWZ5IGNvbm5lY3Rpb24gaG9sZGVyIHRoYXQgdGhlIHVzZWQgY29ubmVjdGlvbiBpcyBub3QgbmVlZGVkIGFueSBtb3JlIGJlY2F1c2UgcmVzdWx0IGhhc1xuICAgICAgLy8gYmVlbiBmdWxseSBjb25zdW1lZDsgY2FsbCB0aGUgb3JpZ2luYWwgb25Db21wbGV0ZWQgY2FsbGJhY2sgYWZ0ZXIgdGhhdFxuICAgICAgc2VsZi5fY29ubmVjdGlvbkhvbGRlci5yZWxlYXNlQ29ubmVjdGlvbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICBvbkNvbXBsZXRlZE9yaWdpbmFsLmNhbGwob2JzZXJ2ZXIsIHN1bSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIG9ic2VydmVyLm9uQ29tcGxldGVkID0gb25Db21wbGV0ZWRXcmFwcGVyO1xuXG4gICAgY29uc3Qgb25FcnJvck9yaWdpbmFsID0gb2JzZXJ2ZXIub25FcnJvciB8fCAoZXJyb3IgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJVbmNhdWdodCBlcnJvciB3aGVuIHByb2Nlc3NpbmcgcmVzdWx0OiBcIiArIGVycm9yKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG9uRXJyb3JXcmFwcGVyID0gZXJyb3IgPT4ge1xuICAgICAgLy8gbm90aWZ5IGNvbm5lY3Rpb24gaG9sZGVyIHRoYXQgdGhlIHVzZWQgY29ubmVjdGlvbiBpcyBub3QgbmVlZGVkIGFueSBtb3JlIGJlY2F1c2UgZXJyb3IgaGFwcGVuZWRcbiAgICAgIC8vIGFuZCByZXN1bHQgY2FuJ3QgYmVlIGNvbnN1bWVkIGFueSBmdXJ0aGVyOyBjYWxsIHRoZSBvcmlnaW5hbCBvbkVycm9yIGNhbGxiYWNrIGFmdGVyIHRoYXRcbiAgICAgIHNlbGYuX2Nvbm5lY3Rpb25Ib2xkZXIucmVsZWFzZUNvbm5lY3Rpb24oKS50aGVuKCgpID0+IHtcbiAgICAgICAgb25FcnJvck9yaWdpbmFsLmNhbGwob2JzZXJ2ZXIsIGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgb2JzZXJ2ZXIub25FcnJvciA9IG9uRXJyb3JXcmFwcGVyO1xuXG4gICAgdGhpcy5fc3RyZWFtT2JzZXJ2ZXIuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXN1bHRcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgU2Vzc2lvbiBmcm9tICcuL3Nlc3Npb24nO1xuaW1wb3J0IHtEcml2ZXJ9IGZyb20gJy4vZHJpdmVyJztcbmltcG9ydCB7bmV3RXJyb3IsIFNFUlZJQ0VfVU5BVkFJTEFCTEUsIFNFU1NJT05fRVhQSVJFRH0gZnJvbSAnLi9lcnJvcic7XG5pbXBvcnQge0xvYWRCYWxhbmNlcn0gZnJvbSAnLi9pbnRlcm5hbC9jb25uZWN0aW9uLXByb3ZpZGVycyc7XG5cbi8qKlxuICogQSBkcml2ZXIgdGhhdCBzdXBwb3J0cyByb3V0aW5nIGluIGEgY29yZS1lZGdlIGNsdXN0ZXIuXG4gKi9cbmNsYXNzIFJvdXRpbmdEcml2ZXIgZXh0ZW5kcyBEcml2ZXIge1xuXG4gIGNvbnN0cnVjdG9yKHVybCwgdXNlckFnZW50LCB0b2tlbiA9IHt9LCBjb25maWcgPSB7fSkge1xuICAgIHN1cGVyKHVybCwgdXNlckFnZW50LCB0b2tlbiwgUm91dGluZ0RyaXZlci5fdmFsaWRhdGVDb25maWcoY29uZmlnKSk7XG4gIH1cblxuICBfY3JlYXRlQ29ubmVjdGlvblByb3ZpZGVyKGFkZHJlc3MsIGNvbm5lY3Rpb25Qb29sLCBkcml2ZXJPbkVycm9yQ2FsbGJhY2spIHtcbiAgICByZXR1cm4gbmV3IExvYWRCYWxhbmNlcihhZGRyZXNzLCBjb25uZWN0aW9uUG9vbCwgZHJpdmVyT25FcnJvckNhbGxiYWNrKTtcbiAgfVxuXG4gIF9jcmVhdGVTZXNzaW9uKG1vZGUsIGNvbm5lY3Rpb25Qcm92aWRlciwgYm9va21hcmssIGNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUm91dGluZ1Nlc3Npb24obW9kZSwgY29ubmVjdGlvblByb3ZpZGVyLCBib29rbWFyaywgY29uZmlnLCAoZXJyb3IsIGNvbm4pID0+IHtcbiAgICAgIGlmIChlcnJvci5jb2RlID09PSBTRVJWSUNFX1VOQVZBSUxBQkxFIHx8IGVycm9yLmNvZGUgPT09IFNFU1NJT05fRVhQSVJFRCkge1xuICAgICAgICAvLyBjb25uZWN0aW9uIGlzIHVuZGVmaW5lZCBpZiBlcnJvciBoYXBwZW5lZCBiZWZvcmUgY29ubmVjdGlvbiB3YXMgYWNxdWlyZWRcbiAgICAgICAgaWYgKGNvbm4pIHtcbiAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uUHJvdmlkZXIuZm9yZ2V0KGNvbm4udXJsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yLmNvZGUgPT09ICdOZW8uQ2xpZW50RXJyb3IuQ2x1c3Rlci5Ob3RBTGVhZGVyJykge1xuICAgICAgICBsZXQgdXJsID0gJ1VOS05PV04nO1xuICAgICAgICAvLyBjb25uZWN0aW9uIGlzIHVuZGVmaW5lZCBpZiBlcnJvciBoYXBwZW5lZCBiZWZvcmUgY29ubmVjdGlvbiB3YXMgYWNxdWlyZWRcbiAgICAgICAgaWYgKGNvbm4pIHtcbiAgICAgICAgICB1cmwgPSBjb25uLnVybDtcbiAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uUHJvdmlkZXIuZm9yZ2V0V3JpdGVyKGNvbm4udXJsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3RXJyb3IoJ05vIGxvbmdlciBwb3NzaWJsZSB0byB3cml0ZSB0byBzZXJ2ZXIgYXQgJyArIHVybCwgU0VTU0lPTl9FWFBJUkVEKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBfdmFsaWRhdGVDb25maWcoY29uZmlnKSB7XG4gICAgaWYoY29uZmlnLnRydXN0ID09PSAnVFJVU1RfT05fRklSU1RfVVNFJykge1xuICAgICAgdGhyb3cgbmV3RXJyb3IoJ1RoZSBjaG9zZW4gdHJ1c3QgbW9kZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGEgcm91dGluZyBkcml2ZXInKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxufVxuXG5jbGFzcyBSb3V0aW5nU2Vzc2lvbiBleHRlbmRzIFNlc3Npb24ge1xuICBjb25zdHJ1Y3Rvcihtb2RlLCBjb25uZWN0aW9uUHJvdmlkZXIsIGJvb2ttYXJrLCBjb25maWcsIG9uRmFpbGVkQ29ubmVjdGlvbikge1xuICAgIHN1cGVyKG1vZGUsIGNvbm5lY3Rpb25Qcm92aWRlciwgYm9va21hcmssIGNvbmZpZyk7XG4gICAgdGhpcy5fb25GYWlsZWRDb25uZWN0aW9uID0gb25GYWlsZWRDb25uZWN0aW9uO1xuICB9XG5cbiAgX29uUnVuRmFpbHVyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fb25GYWlsZWRDb25uZWN0aW9uO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRpbmdEcml2ZXJcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IFN0cmVhbU9ic2VydmVyIGZyb20gJy4vaW50ZXJuYWwvc3RyZWFtLW9ic2VydmVyJztcbmltcG9ydCBSZXN1bHQgZnJvbSAnLi9yZXN1bHQnO1xuaW1wb3J0IFRyYW5zYWN0aW9uIGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHtuZXdFcnJvcn0gZnJvbSAnLi9lcnJvcic7XG5pbXBvcnQge2Fzc2VydFN0cmluZ30gZnJvbSAnLi9pbnRlcm5hbC91dGlsJztcbmltcG9ydCBDb25uZWN0aW9uSG9sZGVyIGZyb20gJy4vaW50ZXJuYWwvY29ubmVjdGlvbi1ob2xkZXInO1xuaW1wb3J0IERyaXZlciwge1JFQUQsIFdSSVRFfSBmcm9tICcuL2RyaXZlcic7XG5pbXBvcnQgVHJhbnNhY3Rpb25FeGVjdXRvciBmcm9tICcuL2ludGVybmFsL3RyYW5zYWN0aW9uLWV4ZWN1dG9yJztcblxuLyoqXG4gICogQSBTZXNzaW9uIGluc3RhbmNlIGlzIHVzZWQgZm9yIGhhbmRsaW5nIHRoZSBjb25uZWN0aW9uIGFuZFxuICAqIHNlbmRpbmcgc3RhdGVtZW50cyB0aHJvdWdoIHRoZSBjb25uZWN0aW9uLlxuICAqIEBhY2Nlc3MgcHVibGljXG4gICovXG5cbmNsYXNzIFNlc3Npb24ge1xuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGUgdGhlIGRlZmF1bHQgYWNjZXNzIG1vZGUgZm9yIHRoaXMgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHtDb25uZWN0aW9uUHJvdmlkZXJ9IGNvbm5lY3Rpb25Qcm92aWRlciAtIHRoZSBjb25uZWN0aW9uIHByb3ZpZGVyIHRvIGFjcXVpcmUgY29ubmVjdGlvbnMgZnJvbS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtib29rbWFyaz11bmRlZmluZWRdIC0gdGhlIGluaXRpYWwgYm9va21hcmsgZm9yIHRoaXMgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtjb25maWc9e31dIC0gdGhpcyBkcml2ZXIgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG1vZGUsIGNvbm5lY3Rpb25Qcm92aWRlciwgYm9va21hcmssIGNvbmZpZykge1xuICAgIHRoaXMuX21vZGUgPSBtb2RlO1xuICAgIHRoaXMuX3JlYWRDb25uZWN0aW9uSG9sZGVyID0gbmV3IENvbm5lY3Rpb25Ib2xkZXIoUkVBRCwgY29ubmVjdGlvblByb3ZpZGVyKTtcbiAgICB0aGlzLl93cml0ZUNvbm5lY3Rpb25Ib2xkZXIgPSBuZXcgQ29ubmVjdGlvbkhvbGRlcihXUklURSwgY29ubmVjdGlvblByb3ZpZGVyKTtcbiAgICB0aGlzLl9vcGVuID0gdHJ1ZTtcbiAgICB0aGlzLl9oYXNUeCA9IGZhbHNlO1xuICAgIHRoaXMuX2xhc3RCb29rbWFyayA9IGJvb2ttYXJrO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uRXhlY3V0b3IgPSBfY3JlYXRlVHJhbnNhY3Rpb25FeGVjdXRvcihjb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBDeXBoZXIgc3RhdGVtZW50XG4gICAqIENvdWxkIGJlIGNhbGxlZCB3aXRoIGEgc3RhdGVtZW50IG9iamVjdCBpLmUuOiB7c3RhdGVtZW50OiBcIk1BVENIIC4uLlwiLCBwYXJhbWV0ZXJzOiB7cGFyYW06IDF9fVxuICAgKiBvciB3aXRoIHRoZSBzdGF0ZW1lbnQgYW5kIHBhcmFtZXRlcnMgYXMgc2VwYXJhdGUgYXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge21peGVkfSBzdGF0ZW1lbnQgLSBDeXBoZXIgc3RhdGVtZW50IHRvIGV4ZWN1dGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtZXRlcnMgLSBNYXAgd2l0aCBwYXJhbWV0ZXJzIHRvIHVzZSBpbiBzdGF0ZW1lbnRcbiAgICogQHJldHVybiB7UmVzdWx0fSAtIE5ldyBSZXN1bHRcbiAgICovXG4gIHJ1bihzdGF0ZW1lbnQsIHBhcmFtZXRlcnMgPSB7fSkge1xuICAgIGlmKHR5cGVvZiBzdGF0ZW1lbnQgPT09ICdvYmplY3QnICYmIHN0YXRlbWVudC50ZXh0KSB7XG4gICAgICBwYXJhbWV0ZXJzID0gc3RhdGVtZW50LnBhcmFtZXRlcnMgfHwge307XG4gICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnQudGV4dDtcbiAgICB9XG4gICAgYXNzZXJ0U3RyaW5nKHN0YXRlbWVudCwgXCJDeXBoZXIgc3RhdGVtZW50XCIpO1xuXG4gICAgY29uc3Qgc3RyZWFtT2JzZXJ2ZXIgPSBuZXcgX1J1bk9ic2VydmVyKHRoaXMuX29uUnVuRmFpbHVyZSgpKTtcbiAgICBjb25zdCBjb25uZWN0aW9uSG9sZGVyID0gdGhpcy5fY29ubmVjdGlvbkhvbGRlcldpdGhNb2RlKHRoaXMuX21vZGUpO1xuICAgIGlmICghdGhpcy5faGFzVHgpIHtcbiAgICAgIGNvbm5lY3Rpb25Ib2xkZXIuaW5pdGlhbGl6ZUNvbm5lY3Rpb24oKTtcbiAgICAgIGNvbm5lY3Rpb25Ib2xkZXIuZ2V0Q29ubmVjdGlvbigpLnRoZW4oY29ubmVjdGlvbiA9PiB7XG4gICAgICAgIHN0cmVhbU9ic2VydmVyLnJlc29sdmVDb25uZWN0aW9uKGNvbm5lY3Rpb24pO1xuICAgICAgICBjb25uZWN0aW9uLnJ1bihzdGF0ZW1lbnQsIHBhcmFtZXRlcnMsIHN0cmVhbU9ic2VydmVyKTtcbiAgICAgICAgY29ubmVjdGlvbi5wdWxsQWxsKHN0cmVhbU9ic2VydmVyKTtcbiAgICAgICAgY29ubmVjdGlvbi5zeW5jKCk7XG4gICAgICB9KS5jYXRjaChlcnJvciA9PiBzdHJlYW1PYnNlcnZlci5vbkVycm9yKGVycm9yKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbU9ic2VydmVyLm9uRXJyb3IobmV3RXJyb3IoXCJTdGF0ZW1lbnRzIGNhbm5vdCBiZSBydW4gZGlyZWN0bHkgb24gYSBcIlxuICAgICAgICsgXCJzZXNzaW9uIHdpdGggYW4gb3BlbiB0cmFuc2FjdGlvbjsgZWl0aGVyIHJ1biBmcm9tIHdpdGhpbiB0aGUgXCJcbiAgICAgICArIFwidHJhbnNhY3Rpb24gb3IgdXNlIGEgZGlmZmVyZW50IHNlc3Npb24uXCIpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQoIHN0cmVhbU9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMsICgpID0+IHN0cmVhbU9ic2VydmVyLm1ldGEoKSwgY29ubmVjdGlvbkhvbGRlciApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJlZ2luIGEgbmV3IHRyYW5zYWN0aW9uIGluIHRoaXMgc2Vzc2lvbi4gQSBzZXNzaW9uIGNhbiBoYXZlIGF0IG1vc3Qgb25lIHRyYW5zYWN0aW9uIHJ1bm5pbmcgYXQgYSB0aW1lLCBpZiB5b3VcbiAgICogd2FudCB0byBydW4gbXVsdGlwbGUgY29uY3VycmVudCB0cmFuc2FjdGlvbnMsIHlvdSBzaG91bGQgdXNlIG11bHRpcGxlIGNvbmN1cnJlbnQgc2Vzc2lvbnMuXG4gICAqXG4gICAqIFdoaWxlIGEgdHJhbnNhY3Rpb24gaXMgb3BlbiB0aGUgc2Vzc2lvbiBjYW5ub3QgYmUgdXNlZCB0byBydW4gc3RhdGVtZW50cyBvdXRzaWRlIHRoZSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJvb2ttYXJrIC0gYSByZWZlcmVuY2UgdG8gYSBwcmV2aW91cyB0cmFuc2FjdGlvbi4gREVQUkVDQVRFRDogVGhpcyBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBpblxuICAgKiBmYXZvdXIgb2Yge0BsaW5rIERyaXZlciNzZXNzaW9uKHN0cmluZyl9IHRoYXQgYWNjZXB0cyBhbiBpbml0aWFsIGJvb2ttYXJrLiBTZXNzaW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIG5lc3RlZFxuICAgKiB0cmFuc2FjdGlvbnMgYXJlIGNoYWluZWQgd2l0aCBib29rbWFya3MgdG8gZ3VhcmFudGVlIGNhdXNhbCBjb25zaXN0ZW5jeS5cbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9ufSAtIE5ldyBUcmFuc2FjdGlvblxuICAgKi9cbiAgYmVnaW5UcmFuc2FjdGlvbihib29rbWFyaykge1xuICAgIHJldHVybiB0aGlzLl9iZWdpblRyYW5zYWN0aW9uKHRoaXMuX21vZGUsIGJvb2ttYXJrKTtcbiAgfVxuXG4gIF9iZWdpblRyYW5zYWN0aW9uKGFjY2Vzc01vZGUsIGJvb2ttYXJrKSB7XG4gICAgaWYgKGJvb2ttYXJrKSB7XG4gICAgICBhc3NlcnRTdHJpbmcoYm9va21hcmssICdCb29rbWFyaycpO1xuICAgICAgdGhpcy5fdXBkYXRlQm9va21hcmsoYm9va21hcmspO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oYXNUeCkge1xuICAgICAgdGhyb3cgbmV3RXJyb3IoJ1lvdSBjYW5ub3QgYmVnaW4gYSB0cmFuc2FjdGlvbiBvbiBhIHNlc3Npb24gd2l0aCBhbiBvcGVuIHRyYW5zYWN0aW9uOyAnICtcbiAgICAgICAgJ2VpdGhlciBydW4gZnJvbSB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uIG9yIHVzZSBhIGRpZmZlcmVudCBzZXNzaW9uLicpO1xuICAgIH1cblxuICAgIGNvbnN0IG1vZGUgPSBEcml2ZXIuX3ZhbGlkYXRlU2Vzc2lvbk1vZGUoYWNjZXNzTW9kZSk7XG4gICAgY29uc3QgY29ubmVjdGlvbkhvbGRlciA9IHRoaXMuX2Nvbm5lY3Rpb25Ib2xkZXJXaXRoTW9kZShtb2RlKTtcbiAgICBjb25uZWN0aW9uSG9sZGVyLmluaXRpYWxpemVDb25uZWN0aW9uKCk7XG4gICAgdGhpcy5faGFzVHggPSB0cnVlO1xuXG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbihjb25uZWN0aW9uSG9sZGVyLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2hhc1R4ID0gZmFsc2U7XG4gICAgICB9LFxuICAgICAgdGhpcy5fb25SdW5GYWlsdXJlKCksIHRoaXMuX2xhc3RCb29rbWFyaywgdGhpcy5fdXBkYXRlQm9va21hcmsuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBib29rbWFyayByZWNlaXZlZCBmb2xsb3dpbmcgdGhlIGxhc3QgY29tcGxldGVkIHtAbGluayBUcmFuc2FjdGlvbn0uXG4gICAqXG4gICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gYSBwcmV2aW91cyB0cmFuc2FjJ3Rpb25cbiAgICovXG4gIGxhc3RCb29rbWFyaygpIHtcbiAgICByZXR1cm4gdGhpcy5fbGFzdEJvb2ttYXJrO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgZ2l2ZW4gdW5pdCBvZiB3b3JrIGluIGEge0BsaW5rIERyaXZlciNSRUFEfSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogVHJhbnNhY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGNvbW1pdHRlZCB1bmxlc3MgdGhlIGdpdmVuIGZ1bmN0aW9uIHRocm93cyBvciByZXR1cm5zIGEgcmVqZWN0ZWQgcHJvbWlzZS5cbiAgICogU29tZSBmYWlsdXJlcyBvZiB0aGUgZ2l2ZW4gZnVuY3Rpb24gb3IgdGhlIGNvbW1pdCBpdHNlbGYgd2lsbCBiZSByZXRyaWVkIHdpdGggZXhwb25lbnRpYWwgYmFja29mZiB3aXRoIGluaXRpYWxcbiAgICogZGVsYXkgb2YgMSBzZWNvbmQgYW5kIG1heGltdW0gcmV0cnkgdGltZSBvZiAzMCBzZWNvbmRzLiBNYXhpbXVtIHJldHJ5IHRpbWUgaXMgY29uZmlndXJhYmxlIHZpYSBkcml2ZXIgY29uZmlnJ3NcbiAgICogPGNvZGU+bWF4VHJhbnNhY3Rpb25SZXRyeVRpbWU8L2NvZGU+IHByb3BlcnR5IGluIG1pbGxpc2Vjb25kcy5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbih0eDogVHJhbnNhY3Rpb24pOiBQcm9taXNlfSB0cmFuc2FjdGlvbldvcmsgLSBjYWxsYmFjayB0aGF0IGV4ZWN1dGVzIG9wZXJhdGlvbnMgYWdhaW5zdFxuICAgKiBhIGdpdmVuIHtAbGluayBUcmFuc2FjdGlvbn0uXG4gICAqIEByZXR1cm4ge1Byb21pc2V9IHJlc29sdmVkIHByb21pc2UgYXMgcmV0dXJuZWQgYnkgdGhlIGdpdmVuIGZ1bmN0aW9uIG9yIHJlamVjdGVkIHByb21pc2Ugd2hlbiBnaXZlblxuICAgKiBmdW5jdGlvbiBvciBjb21taXQgZmFpbHMuXG4gICAqL1xuICByZWFkVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25Xb3JrKSB7XG4gICAgcmV0dXJuIHRoaXMuX3J1blRyYW5zYWN0aW9uKFJFQUQsIHRyYW5zYWN0aW9uV29yayk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBnaXZlbiB1bml0IG9mIHdvcmsgaW4gYSB7QGxpbmsgRHJpdmVyI1dSSVRFfSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogVHJhbnNhY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGNvbW1pdHRlZCB1bmxlc3MgdGhlIGdpdmVuIGZ1bmN0aW9uIHRocm93cyBvciByZXR1cm5zIGEgcmVqZWN0ZWQgcHJvbWlzZS5cbiAgICogU29tZSBmYWlsdXJlcyBvZiB0aGUgZ2l2ZW4gZnVuY3Rpb24gb3IgdGhlIGNvbW1pdCBpdHNlbGYgd2lsbCBiZSByZXRyaWVkIHdpdGggZXhwb25lbnRpYWwgYmFja29mZiB3aXRoIGluaXRpYWxcbiAgICogZGVsYXkgb2YgMSBzZWNvbmQgYW5kIG1heGltdW0gcmV0cnkgdGltZSBvZiAzMCBzZWNvbmRzLiBNYXhpbXVtIHJldHJ5IHRpbWUgaXMgY29uZmlndXJhYmxlIHZpYSBkcml2ZXIgY29uZmlnJ3NcbiAgICogPGNvZGU+bWF4VHJhbnNhY3Rpb25SZXRyeVRpbWU8L2NvZGU+IHByb3BlcnR5IGluIG1pbGxpc2Vjb25kcy5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbih0eDogVHJhbnNhY3Rpb24pOiBQcm9taXNlfSB0cmFuc2FjdGlvbldvcmsgLSBjYWxsYmFjayB0aGF0IGV4ZWN1dGVzIG9wZXJhdGlvbnMgYWdhaW5zdFxuICAgKiBhIGdpdmVuIHtAbGluayBUcmFuc2FjdGlvbn0uXG4gICAqIEByZXR1cm4ge1Byb21pc2V9IHJlc29sdmVkIHByb21pc2UgYXMgcmV0dXJuZWQgYnkgdGhlIGdpdmVuIGZ1bmN0aW9uIG9yIHJlamVjdGVkIHByb21pc2Ugd2hlbiBnaXZlblxuICAgKiBmdW5jdGlvbiBvciBjb21taXQgZmFpbHMuXG4gICAqL1xuICB3cml0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uV29yaykge1xuICAgIHJldHVybiB0aGlzLl9ydW5UcmFuc2FjdGlvbihXUklURSwgdHJhbnNhY3Rpb25Xb3JrKTtcbiAgfVxuXG4gIF9ydW5UcmFuc2FjdGlvbihhY2Nlc3NNb2RlLCB0cmFuc2FjdGlvbldvcmspIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb25FeGVjdXRvci5leGVjdXRlKFxuICAgICAgKCkgPT4gdGhpcy5fYmVnaW5UcmFuc2FjdGlvbihhY2Nlc3NNb2RlLCB0aGlzLmxhc3RCb29rbWFyaygpKSxcbiAgICAgIHRyYW5zYWN0aW9uV29ya1xuICAgICk7XG4gIH1cblxuICBfdXBkYXRlQm9va21hcmsobmV3Qm9va21hcmspIHtcbiAgICBpZiAobmV3Qm9va21hcmspIHtcbiAgICAgIHRoaXMuX2xhc3RCb29rbWFyayA9IG5ld0Jvb2ttYXJrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSB0aGlzIHNlc3Npb24uXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHNlc3Npb24gaGFzIGJlZW4gY2xvc2VkXG4gICAqIEByZXR1cm5cbiAgICovXG4gIGNsb3NlKGNhbGxiYWNrID0gKCgpID0+IG51bGwpKSB7XG4gICAgaWYgKHRoaXMuX29wZW4pIHtcbiAgICAgIHRoaXMuX29wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuX3RyYW5zYWN0aW9uRXhlY3V0b3IuY2xvc2UoKTtcbiAgICAgIHRoaXMuX3JlYWRDb25uZWN0aW9uSG9sZGVyLmNsb3NlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX3dyaXRlQ29ubmVjdGlvbkhvbGRlci5jbG9zZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLy9DYW4gYmUgb3ZlcnJpZGRlbiB0byBhZGQgZXJyb3IgY2FsbGJhY2sgb24gUlVOXG4gIF9vblJ1bkZhaWx1cmUoKSB7XG4gICAgcmV0dXJuIChlcnIpID0+IHtyZXR1cm4gZXJyfTtcbiAgfVxuXG4gIF9jb25uZWN0aW9uSG9sZGVyV2l0aE1vZGUobW9kZSkge1xuICAgIGlmIChtb2RlID09PSBSRUFEKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZENvbm5lY3Rpb25Ib2xkZXI7XG4gICAgfSBlbHNlIGlmIChtb2RlID09PSBXUklURSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRlQ29ubmVjdGlvbkhvbGRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3RXJyb3IoJ1Vua25vd24gYWNjZXNzIG1vZGU6ICcgKyBtb2RlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIEludGVybmFsIHN0cmVhbSBvYnNlcnZlciB1c2VkIGZvciB0cmFuc2FjdGlvbmFsIHJlc3VsdHMqL1xuY2xhc3MgX1J1bk9ic2VydmVyIGV4dGVuZHMgU3RyZWFtT2JzZXJ2ZXIge1xuICBjb25zdHJ1Y3RvcihvbkVycm9yKSB7XG4gICAgc3VwZXIob25FcnJvcik7XG4gICAgdGhpcy5fbWV0YSA9IHt9O1xuICB9XG5cbiAgb25Db21wbGV0ZWQobWV0YSkge1xuICAgIHN1cGVyLm9uQ29tcGxldGVkKG1ldGEpO1xuICAgIGZvcih2YXIga2V5IGluIG1ldGEpe1xuICAgICAgaWYobWV0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKXtcbiAgICAgICAgdGhpcy5fbWV0YVtrZXldPW1ldGFba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtZXRhKCkge1xuICAgIGNvbnN0IHNlcnZlck1ldGEgPSB7c2VydmVyOiB0aGlzLl9jb25uLnNlcnZlcn07XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX21ldGEsIHNlcnZlck1ldGEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVUcmFuc2FjdGlvbkV4ZWN1dG9yKGNvbmZpZykge1xuICBjb25zdCBtYXhSZXRyeVRpbWVNcyA9IChjb25maWcgJiYgY29uZmlnLm1heFRyYW5zYWN0aW9uUmV0cnlUaW1lKSA/IGNvbmZpZy5tYXhUcmFuc2FjdGlvblJldHJ5VGltZSA6IG51bGw7XG4gIHJldHVybiBuZXcgVHJhbnNhY3Rpb25FeGVjdXRvcihtYXhSZXRyeVRpbWVNcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlc3Npb247XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCBTdHJlYW1PYnNlcnZlciBmcm9tICcuL2ludGVybmFsL3N0cmVhbS1vYnNlcnZlcic7XG5pbXBvcnQgUmVzdWx0IGZyb20gJy4vcmVzdWx0JztcbmltcG9ydCB7YXNzZXJ0U3RyaW5nfSBmcm9tICcuL2ludGVybmFsL3V0aWwnO1xuaW1wb3J0IHtFTVBUWV9DT05ORUNUSU9OX0hPTERFUn0gZnJvbSAnLi9pbnRlcm5hbC9jb25uZWN0aW9uLWhvbGRlcic7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHRyYW5zYWN0aW9uIGluIHRoZSBOZW80aiBkYXRhYmFzZS5cbiAqXG4gKiBAYWNjZXNzIHB1YmxpY1xuICovXG5jbGFzcyBUcmFuc2FjdGlvbiB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtDb25uZWN0aW9uSG9sZGVyfSBjb25uZWN0aW9uSG9sZGVyIC0gdGhlIGNvbm5lY3Rpb24gaG9sZGVyIHRvIGdldCBjb25uZWN0aW9uIGZyb20uXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gb25DbG9zZSAtIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay5cbiAgICogQHBhcmFtIGVycm9yVHJhbnNmb3JtZXIgY2FsbGJhY2sgdXNlIHRvIHRyYW5zZm9ybSBlcnJvclxuICAgKiBAcGFyYW0gYm9va21hcmsgb3B0aW9uYWwgYm9va21hcmtcbiAgICogQHBhcmFtIG9uQm9va21hcmsgY2FsbGJhY2sgaW52b2tlZCB3aGVuIG5ldyBib29rbWFyayBpcyBwcm9kdWNlZFxuICAgKi9cbiAgY29uc3RydWN0b3IoY29ubmVjdGlvbkhvbGRlciwgb25DbG9zZSwgZXJyb3JUcmFuc2Zvcm1lciwgYm9va21hcmssIG9uQm9va21hcmspIHtcbiAgICB0aGlzLl9jb25uZWN0aW9uSG9sZGVyID0gY29ubmVjdGlvbkhvbGRlcjtcbiAgICBsZXQgc3RyZWFtT2JzZXJ2ZXIgPSBuZXcgX1RyYW5zYWN0aW9uU3RyZWFtT2JzZXJ2ZXIodGhpcyk7XG4gICAgbGV0IHBhcmFtcyA9IHt9O1xuICAgIGlmIChib29rbWFyaykge1xuICAgICAgcGFyYW1zID0ge2Jvb2ttYXJrOiBib29rbWFya307XG4gICAgfVxuXG4gICAgdGhpcy5fY29ubmVjdGlvbkhvbGRlci5nZXRDb25uZWN0aW9uKCkudGhlbihjb25uID0+IHtcbiAgICAgIHN0cmVhbU9ic2VydmVyLnJlc29sdmVDb25uZWN0aW9uKGNvbm4pO1xuICAgICAgY29ubi5ydW4oJ0JFR0lOJywgcGFyYW1zLCBzdHJlYW1PYnNlcnZlcik7XG4gICAgICBjb25uLnB1bGxBbGwoc3RyZWFtT2JzZXJ2ZXIpO1xuICAgIH0pLmNhdGNoKGVycm9yID0+IHN0cmVhbU9ic2VydmVyLm9uRXJyb3IoZXJyb3IpKTtcblxuICAgIHRoaXMuX3N0YXRlID0gX3N0YXRlcy5BQ1RJVkU7XG4gICAgdGhpcy5fb25DbG9zZSA9IG9uQ2xvc2U7XG4gICAgdGhpcy5fZXJyb3JUcmFuc2Zvcm1lciA9IGVycm9yVHJhbnNmb3JtZXI7XG4gICAgdGhpcy5fb25Cb29rbWFyayA9IG9uQm9va21hcmsgfHwgKCgpID0+IHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gQ3lwaGVyIHN0YXRlbWVudFxuICAgKiBDb3VsZCBiZSBjYWxsZWQgd2l0aCBhIHN0YXRlbWVudCBvYmplY3QgaS5lLjoge3N0YXRlbWVudDogXCJNQVRDSCAuLi5cIiwgcGFyYW1ldGVyczoge3BhcmFtOiAxfX1cbiAgICogb3Igd2l0aCB0aGUgc3RhdGVtZW50IGFuZCBwYXJhbWV0ZXJzIGFzIHNlcGFyYXRlIGFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHttaXhlZH0gc3RhdGVtZW50IC0gQ3lwaGVyIHN0YXRlbWVudCB0byBleGVjdXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbWV0ZXJzIC0gTWFwIHdpdGggcGFyYW1ldGVycyB0byB1c2UgaW4gc3RhdGVtZW50XG4gICAqIEByZXR1cm4ge1Jlc3VsdH0gTmV3IFJlc3VsdFxuICAgKi9cbiAgcnVuKHN0YXRlbWVudCwgcGFyYW1ldGVycykge1xuICAgIGlmKHR5cGVvZiBzdGF0ZW1lbnQgPT09ICdvYmplY3QnICYmIHN0YXRlbWVudC50ZXh0KSB7XG4gICAgICBwYXJhbWV0ZXJzID0gc3RhdGVtZW50LnBhcmFtZXRlcnMgfHwge307XG4gICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnQudGV4dDtcbiAgICB9XG4gICAgYXNzZXJ0U3RyaW5nKHN0YXRlbWVudCwgXCJDeXBoZXIgc3RhdGVtZW50XCIpO1xuXG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlLnJ1bih0aGlzLl9jb25uZWN0aW9uSG9sZGVyLCAgbmV3IF9UcmFuc2FjdGlvblN0cmVhbU9ic2VydmVyKHRoaXMpLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbW1pdHMgdGhlIHRyYW5zYWN0aW9uIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuXG4gICAqXG4gICAqIEFmdGVyIGNvbW1pdHRpbmcgdGhlIHRyYW5zYWN0aW9uIGNhbiBubyBsb25nZXIgYmUgdXNlZC5cbiAgICpcbiAgICogQHJldHVybnMge1Jlc3VsdH0gTmV3IFJlc3VsdFxuICAgKi9cbiAgY29tbWl0KCkge1xuICAgIGxldCBjb21taXR0ZWQgPSB0aGlzLl9zdGF0ZS5jb21taXQodGhpcy5fY29ubmVjdGlvbkhvbGRlciwgbmV3IF9UcmFuc2FjdGlvblN0cmVhbU9ic2VydmVyKHRoaXMpKTtcbiAgICB0aGlzLl9zdGF0ZSA9IGNvbW1pdHRlZC5zdGF0ZTtcbiAgICAvL2NsZWFuIHVwXG4gICAgdGhpcy5fb25DbG9zZSgpO1xuICAgIHJldHVybiBjb21taXR0ZWQucmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJvbGxiYWNrcyB0aGUgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEFmdGVyIHJvbGxpbmcgYmFjaywgdGhlIHRyYW5zYWN0aW9uIGNhbiBubyBsb25nZXIgYmUgdXNlZC5cbiAgICpcbiAgICogQHJldHVybnMge1Jlc3VsdH0gTmV3IFJlc3VsdFxuICAgKi9cbiAgcm9sbGJhY2soKSB7XG4gICAgbGV0IGNvbW1pdHRlZCA9IHRoaXMuX3N0YXRlLnJvbGxiYWNrKHRoaXMuX2Nvbm5lY3Rpb25Ib2xkZXIsIG5ldyBfVHJhbnNhY3Rpb25TdHJlYW1PYnNlcnZlcih0aGlzKSk7XG4gICAgdGhpcy5fc3RhdGUgPSBjb21taXR0ZWQuc3RhdGU7XG4gICAgLy9jbGVhbiB1cFxuICAgIHRoaXMuX29uQ2xvc2UoKTtcbiAgICByZXR1cm4gY29tbWl0dGVkLnJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGlzIHRyYW5zYWN0aW9uIGlzIGFjdGl2ZSwgd2hpY2ggbWVhbnMgY29tbWl0IGFuZCByb2xsYmFjayBkaWQgbm90IGhhcHBlbi5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gd2hlbiBub3QgY29tbWl0dGVkIGFuZCBub3Qgcm9sbGVkIGJhY2ssIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuXG4gICAqL1xuICBpc09wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlID09IF9zdGF0ZXMuQUNUSVZFO1xuICB9XG5cbiAgX29uRXJyb3IoKSB7XG4gICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIC8vIGF0dGVtcHQgdG8gcm9sbGJhY2ssIHVzZWZ1bCB3aGVuIFRyYW5zYWN0aW9uI3J1bigpIGZhaWxlZFxuICAgICAgcmV0dXJuIHRoaXMucm9sbGJhY2soKS5jYXRjaChpZ25vcmVkRXJyb3IgPT4ge1xuICAgICAgICAvLyBpZ25vcmUgYWxsIGVycm9ycyBiZWNhdXNlIGl0IGlzIGJlc3QgZWZmb3J0IGFuZCB0cmFuc2FjdGlvbiBtaWdodCBhbHJlYWR5IGJlIHJvbGxlZCBiYWNrXG4gICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gYWZ0ZXIgcm9sbGJhY2sgYXR0ZW1wdCBjaGFuZ2UgdGhpcyB0cmFuc2FjdGlvbidzIHN0YXRlIHRvIEZBSUxFRFxuICAgICAgICB0aGlzLl9zdGF0ZSA9IF9zdGF0ZXMuRkFJTEVEO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVycm9yIGhhcHBlbmVkIGluIGluLWFjdGl2ZSB0cmFuc2FjdGlvbiwganVzdCB0byB0aGUgY2xlYW51cCBhbmQgY2hhbmdlIHN0YXRlIHRvIEZBSUxFRFxuICAgICAgdGhpcy5fc3RhdGUgPSBfc3RhdGVzLkZBSUxFRDtcbiAgICAgIHRoaXMuX29uQ2xvc2UoKTtcbiAgICAgIC8vIG5vIGFzeW5jIGFjdGlvbnMgbmVlZGVkIC0gcmV0dXJuIHJlc29sdmVkIHByb21pc2VcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIEludGVybmFsIHN0cmVhbSBvYnNlcnZlciB1c2VkIGZvciB0cmFuc2FjdGlvbmFsIHJlc3VsdHMqL1xuY2xhc3MgX1RyYW5zYWN0aW9uU3RyZWFtT2JzZXJ2ZXIgZXh0ZW5kcyBTdHJlYW1PYnNlcnZlciB7XG4gIGNvbnN0cnVjdG9yKHR4KSB7XG4gICAgc3VwZXIodHguX2Vycm9yVHJhbnNmb3JtZXIgfHwgKChlcnIpID0+IHtyZXR1cm4gZXJyfSkpO1xuICAgIHRoaXMuX3R4ID0gdHg7XG4gICAgLy90aGlzIGlzIHRvIHRvIGF2b2lkIG11bHRpcGxlIGNhbGxzIHRvIG9uRXJyb3IgY2F1c2VkIGJ5IElHTk9SRURcbiAgICB0aGlzLl9oYXNGYWlsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIG9uRXJyb3IoZXJyb3IpIHtcbiAgICBpZiAoIXRoaXMuX2hhc0ZhaWxlZCkge1xuICAgICAgdGhpcy5fdHguX29uRXJyb3IoKS50aGVuKCgpID0+IHtcbiAgICAgICAgc3VwZXIub25FcnJvcihlcnJvcik7XG4gICAgICAgIHRoaXMuX2hhc0ZhaWxlZCA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbkNvbXBsZXRlZChtZXRhKSB7XG4gICAgc3VwZXIub25Db21wbGV0ZWQobWV0YSk7XG4gICAgY29uc3QgYm9va21hcmsgPSBtZXRhLmJvb2ttYXJrO1xuICAgIHRoaXMuX3R4Ll9vbkJvb2ttYXJrKGJvb2ttYXJrKTtcbiAgfVxuXG4gIHNlcnZlck1ldGEoKSB7XG4gICAgY29uc3Qgc2VydmVyTWV0YSA9IHtzZXJ2ZXI6IHRoaXMuX2Nvbm4uc2VydmVyfTtcbiAgICByZXR1cm4gc2VydmVyTWV0YTtcbiAgfVxufVxuXG4vKiogaW50ZXJuYWwgc3RhdGUgbWFjaGluZSBvZiB0aGUgdHJhbnNhY3Rpb24qL1xubGV0IF9zdGF0ZXMgPSB7XG4gIC8vVGhlIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcgd2l0aCBubyBleHBsaWNpdCBzdWNjZXNzIG9yIGZhaWx1cmUgbWFya2VkXG4gIEFDVElWRToge1xuICAgIGNvbW1pdDogKGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyKSA9PiB7XG4gICAgICByZXR1cm4ge3Jlc3VsdDogX3J1blB1bGxBbGwoXCJDT01NSVRcIiwgY29ubmVjdGlvbkhvbGRlciwgb2JzZXJ2ZXIpLFxuICAgICAgICBzdGF0ZTogX3N0YXRlcy5TVUNDRUVERUR9XG4gICAgfSxcbiAgICByb2xsYmFjazogKGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyKSA9PiB7XG4gICAgICByZXR1cm4ge3Jlc3VsdDogX3J1blB1bGxBbGwoXCJST0xMQkFDS1wiLCBjb25uZWN0aW9uSG9sZGVyLCBvYnNlcnZlciksIHN0YXRlOiBfc3RhdGVzLlJPTExFRF9CQUNLfTtcbiAgICB9LFxuICAgIHJ1bjogKGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMpID0+IHtcbiAgICAgIGNvbm5lY3Rpb25Ib2xkZXIuZ2V0Q29ubmVjdGlvbigpLnRoZW4oY29ubiA9PiB7XG4gICAgICAgIG9ic2VydmVyLnJlc29sdmVDb25uZWN0aW9uKGNvbm4pO1xuICAgICAgICBjb25uLnJ1bihzdGF0ZW1lbnQsIHBhcmFtZXRlcnMgfHwge30sIG9ic2VydmVyKTtcbiAgICAgICAgY29ubi5wdWxsQWxsKG9ic2VydmVyKTtcbiAgICAgICAgY29ubi5zeW5jKCk7XG4gICAgICB9KS5jYXRjaChlcnJvciA9PiBvYnNlcnZlci5vbkVycm9yKGVycm9yKSk7XG5cbiAgICAgIHJldHVybiBuZXdSdW5SZXN1bHQob2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycywgKCkgPT4gb2JzZXJ2ZXIuc2VydmVyTWV0YSgpKTtcbiAgICB9XG4gIH0sXG5cbiAgLy9BbiBlcnJvciBoYXMgb2NjdXJyZWQsIHRyYW5zYWN0aW9uIGNhbiBubyBsb25nZXIgYmUgdXNlZCBhbmQgbm8gbW9yZSBtZXNzYWdlcyB3aWxsXG4gIC8vIGJlIHNlbnQgZm9yIHRoaXMgdHJhbnNhY3Rpb24uXG4gIEZBSUxFRDoge1xuICAgIGNvbW1pdDogKGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyKSA9PiB7XG4gICAgICBvYnNlcnZlci5vbkVycm9yKHtcbiAgICAgICAgZXJyb3I6IFwiQ2Fubm90IGNvbW1pdCBzdGF0ZW1lbnRzIGluIHRoaXMgdHJhbnNhY3Rpb24sIGJlY2F1c2UgcHJldmlvdXMgc3RhdGVtZW50cyBpbiB0aGUgXCIgK1xuICAgICAgICBcInRyYW5zYWN0aW9uIGhhcyBmYWlsZWQgYW5kIHRoZSB0cmFuc2FjdGlvbiBoYXMgYmVlbiByb2xsZWQgYmFjay4gUGxlYXNlIHN0YXJ0IGEgbmV3XCIgK1xuICAgICAgICBcIiB0cmFuc2FjdGlvbiB0byBydW4gYW5vdGhlciBzdGF0ZW1lbnQuXCJcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtyZXN1bHQ6IG5ld0R1bW15UmVzdWx0KG9ic2VydmVyLCBcIkNPTU1JVFwiLCB7fSksIHN0YXRlOiBfc3RhdGVzLkZBSUxFRH07XG4gICAgfSxcbiAgICByb2xsYmFjazogKGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyKSA9PiB7XG4gICAgICBvYnNlcnZlci5vbkVycm9yKHtlcnJvcjpcbiAgICAgIFwiQ2Fubm90IHJvbGxiYWNrIHRyYW5zYWN0aW9uLCBiZWNhdXNlIHByZXZpb3VzIHN0YXRlbWVudHMgaW4gdGhlIFwiICtcbiAgICAgIFwidHJhbnNhY3Rpb24gaGFzIGZhaWxlZCBhbmQgdGhlIHRyYW5zYWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcm9sbGVkIGJhY2suXCJ9KTtcbiAgICAgIHJldHVybiB7cmVzdWx0OiBuZXdEdW1teVJlc3VsdChvYnNlcnZlciwgXCJST0xMQkFDS1wiLCB7fSksIHN0YXRlOiBfc3RhdGVzLkZBSUxFRH07XG4gICAgfSxcbiAgICBydW46IChjb25uZWN0aW9uSG9sZGVyLCBvYnNlcnZlciwgc3RhdGVtZW50LCBwYXJhbWV0ZXJzKSA9PiB7XG4gICAgICBvYnNlcnZlci5vbkVycm9yKHtlcnJvcjpcbiAgICAgIFwiQ2Fubm90IHJ1biBzdGF0ZW1lbnQsIGJlY2F1c2UgcHJldmlvdXMgc3RhdGVtZW50cyBpbiB0aGUgXCIgK1xuICAgICAgXCJ0cmFuc2FjdGlvbiBoYXMgZmFpbGVkIGFuZCB0aGUgdHJhbnNhY3Rpb24gaGFzIGFscmVhZHkgYmVlbiByb2xsZWQgYmFjay5cIn0pO1xuICAgICAgcmV0dXJuIG5ld0R1bW15UmVzdWx0KG9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMpO1xuICAgIH1cbiAgfSxcblxuICAvL1RoaXMgdHJhbnNhY3Rpb24gaGFzIHN1Y2Nlc3NmdWxseSBjb21taXR0ZWRcbiAgU1VDQ0VFREVEOiB7XG4gICAgY29tbWl0OiAoY29ubmVjdGlvbkhvbGRlciwgb2JzZXJ2ZXIpID0+IHtcbiAgICAgIG9ic2VydmVyLm9uRXJyb3Ioe1xuICAgICAgICBlcnJvcjogXCJDYW5ub3QgY29tbWl0IHN0YXRlbWVudHMgaW4gdGhpcyB0cmFuc2FjdGlvbiwgYmVjYXVzZSBjb21taXQgaGFzIGFscmVhZHkgYmVlbiBzdWNjZXNzZnVsbHkgY2FsbGVkIG9uIHRoZSB0cmFuc2FjdGlvbiBhbmQgdHJhbnNhY3Rpb24gaGFzIGJlZW4gY2xvc2VkLiBQbGVhc2Ugc3RhcnQgYSBuZXdcIiArXG4gICAgICAgIFwiIHRyYW5zYWN0aW9uIHRvIHJ1biBhbm90aGVyIHN0YXRlbWVudC5cIlxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge3Jlc3VsdDogbmV3RHVtbXlSZXN1bHQob2JzZXJ2ZXIsIFwiQ09NTUlUXCIsIHt9KSwgc3RhdGU6IF9zdGF0ZXMuU1VDQ0VFREVEfTtcbiAgICB9LFxuICAgIHJvbGxiYWNrOiAoY29ubmVjdGlvbkhvbGRlciwgb2JzZXJ2ZXIpID0+IHtcbiAgICAgIG9ic2VydmVyLm9uRXJyb3Ioe2Vycm9yOlxuICAgICAgICBcIkNhbm5vdCByb2xsYmFjayB0cmFuc2FjdGlvbiwgYmVjYXVzZSB0cmFuc2FjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHN1Y2Nlc3NmdWxseSBjbG9zZWQuXCJ9KTtcbiAgICAgIHJldHVybiB7cmVzdWx0OiBuZXdEdW1teVJlc3VsdChvYnNlcnZlciwgXCJST0xMQkFDS1wiLCB7fSksIHN0YXRlOiBfc3RhdGVzLlNVQ0NFRURFRH07XG4gICAgfSxcbiAgICBydW46IChjb25uZWN0aW9uSG9sZGVyLCBvYnNlcnZlciwgc3RhdGVtZW50LCBwYXJhbWV0ZXJzKSA9PiB7XG4gICAgICBvYnNlcnZlci5vbkVycm9yKHtlcnJvcjpcbiAgICAgIFwiQ2Fubm90IHJ1biBzdGF0ZW1lbnQsIGJlY2F1c2UgdHJhbnNhY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBzdWNjZXNzZnVsbHkgY2xvc2VkLlwifSk7XG4gICAgICByZXR1cm4gbmV3RHVtbXlSZXN1bHQob2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycyk7XG4gICAgfVxuICB9LFxuXG4gIC8vVGhpcyB0cmFuc2FjdGlvbiBoYXMgYmVlbiByb2xsZWQgYmFja1xuICBST0xMRURfQkFDSzoge1xuICAgIGNvbW1pdDogKGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyKSA9PiB7XG4gICAgICBvYnNlcnZlci5vbkVycm9yKHtcbiAgICAgICAgZXJyb3I6IFwiQ2Fubm90IGNvbW1pdCB0aGlzIHRyYW5zYWN0aW9uLCBiZWNhdXNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gcm9sbGVkIGJhY2suXCJcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtyZXN1bHQ6IG5ld0R1bW15UmVzdWx0KG9ic2VydmVyLCBcIkNPTU1JVFwiLCB7fSksIHN0YXRlOiBfc3RhdGVzLlJPTExFRF9CQUNLfTtcbiAgICB9LFxuICAgIHJvbGxiYWNrOiAoY29ubmVjdGlvbkhvbGRlciwgb2JzZXJ2ZXIpID0+IHtcbiAgICAgIG9ic2VydmVyLm9uRXJyb3Ioe2Vycm9yOlxuICAgICAgICBcIkNhbm5vdCByb2xsYmFjayB0cmFuc2FjdGlvbiwgYmVjYXVzZSB0cmFuc2FjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJvbGxlZCBiYWNrLlwifSk7XG4gICAgICByZXR1cm4ge3Jlc3VsdDogbmV3RHVtbXlSZXN1bHQob2JzZXJ2ZXIsIFwiUk9MTEJBQ0tcIiwge30pLCBzdGF0ZTogX3N0YXRlcy5ST0xMRURfQkFDS307XG4gICAgfSxcbiAgICBydW46IChjb25uZWN0aW9uSG9sZGVyLCBvYnNlcnZlciwgc3RhdGVtZW50LCBwYXJhbWV0ZXJzKSA9PiB7XG4gICAgICBvYnNlcnZlci5vbkVycm9yKHtlcnJvcjpcbiAgICAgICAgXCJDYW5ub3QgcnVuIHN0YXRlbWVudCwgYmVjYXVzZSB0cmFuc2FjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJvbGxlZCBiYWNrLlwifSk7XG4gICAgICByZXR1cm4gbmV3RHVtbXlSZXN1bHQob2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycyk7XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBfcnVuUHVsbEFsbChtc2csIGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyKSB7XG4gIGNvbm5lY3Rpb25Ib2xkZXIuZ2V0Q29ubmVjdGlvbigpLnRoZW4oXG4gICAgY29ubiA9PiB7XG4gICAgICBvYnNlcnZlci5yZXNvbHZlQ29ubmVjdGlvbihjb25uKTtcbiAgICAgIGNvbm4ucnVuKG1zZywge30sIG9ic2VydmVyKTtcbiAgICAgIGNvbm4ucHVsbEFsbChvYnNlcnZlcik7XG4gICAgICBjb25uLnN5bmMoKTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiBvYnNlcnZlci5vbkVycm9yKGVycm9yKSk7XG5cbiAgLy8gZm9yIGNvbW1pdCAmIHJvbGxiYWNrIHdlIG5lZWQgcmVzdWx0IHRoYXQgdXNlcyByZWFsIGNvbm5lY3Rpb24gaG9sZGVyIGFuZCBub3RpZmllcyBpdCB3aGVuXG4gIC8vIGNvbm5lY3Rpb24gaXMgbm90IG5lZWRlZCBhbmQgY2FuIGJlIHNhZmVseSByZWxlYXNlZCB0byB0aGUgcG9vbFxuICByZXR1cm4gbmV3IFJlc3VsdChvYnNlcnZlciwgbXNnLCB7fSwgZW1wdHlNZXRhZGF0YVN1cHBsaWVyLCBjb25uZWN0aW9uSG9sZGVyKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIFJlc3VsdH0gd2l0aCBlbXB0eSBjb25uZWN0aW9uIGhvbGRlci5cbiAqIFNob3VsZCBiZSB1c2VkIGFzIGEgcmVzdWx0IGZvciBydW5uaW5nIGN5cGhlciBzdGF0ZW1lbnRzLiBUaGV5IGNhbiByZXN1bHQgaW4gbWV0YWRhdGEgYnV0IHNob3VsZCBub3RcbiAqIGluZmx1ZW5jZSByZWFsIGNvbm5lY3Rpb24gaG9sZGVyIHRvIHJlbGVhc2UgY29ubmVjdGlvbnMgYmVjYXVzZSBzaW5nbGUgdHJhbnNhY3Rpb24gY2FuIGhhdmVcbiAqIHtAbGluayBUcmFuc2FjdGlvbiNydW59IGNhbGxlZCBtdWx0aXBsZSB0aW1lcy5cbiAqIEBwYXJhbSB7U3RyZWFtT2JzZXJ2ZXJ9IG9ic2VydmVyIC0gYW4gb2JzZXJ2ZXIgZm9yIHRoZSBjcmVhdGVkIHJlc3VsdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZW1lbnQgLSB0aGUgY3lwaGVyIHN0YXRlbWVudCB0aGF0IHByb2R1Y2VkIHRoZSByZXN1bHQuXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1ldGVycyAtIHRoZSBwYXJhbWV0ZXJzIGZvciBjeXBoZXIgc3RhdGVtZW50IHRoYXQgcHJvZHVjZWQgdGhlIHJlc3VsdC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IG1ldGFkYXRhU3VwcGxpZXIgLSB0aGUgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgbWV0YWRhdGEgb2JqZWN0LlxuICogQHJldHVybiB7UmVzdWx0fSBuZXcgcmVzdWx0LlxuICovXG5mdW5jdGlvbiBuZXdSdW5SZXN1bHQob2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycywgbWV0YWRhdGFTdXBwbGllcikge1xuICByZXR1cm4gbmV3IFJlc3VsdChvYnNlcnZlciwgc3RhdGVtZW50LCBwYXJhbWV0ZXJzLCBtZXRhZGF0YVN1cHBsaWVyLCBFTVBUWV9DT05ORUNUSU9OX0hPTERFUik7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBSZXN1bHR9IHdpdGhvdXQgbWV0YWRhdGEgc3VwcGxpZXIgYW5kIHdpdGggZW1wdHkgY29ubmVjdGlvbiBob2xkZXIuXG4gKiBGb3IgY2FzZXMgd2hlbiByZXN1bHQgcmVwcmVzZW50cyBhbiBpbnRlcm1lZGlhdGUgb3IgZmFpbGVkIGFjdGlvbiwgZG9lcyBub3QgcmVxdWlyZSBhbnkgbWV0YWRhdGEgYW5kIGRvZXMgbm90XG4gKiBuZWVkIHRvIGluZmx1ZW5jZSByZWFsIGNvbm5lY3Rpb24gaG9sZGVyIHRvIHJlbGVhc2UgY29ubmVjdGlvbnMuXG4gKiBAcGFyYW0ge1N0cmVhbU9ic2VydmVyfSBvYnNlcnZlciAtIGFuIG9ic2VydmVyIGZvciB0aGUgY3JlYXRlZCByZXN1bHQuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVtZW50IC0gdGhlIGN5cGhlciBzdGF0ZW1lbnQgdGhhdCBwcm9kdWNlZCB0aGUgcmVzdWx0LlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnMgLSB0aGUgcGFyYW1ldGVycyBmb3IgY3lwaGVyIHN0YXRlbWVudCB0aGF0IHByb2R1Y2VkIHRoZSByZXN1bHQuXG4gKiBAcmV0dXJuIHtSZXN1bHR9IG5ldyByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIG5ld0R1bW15UmVzdWx0KG9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMpIHtcbiAgcmV0dXJuIG5ldyBSZXN1bHQob2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycywgZW1wdHlNZXRhZGF0YVN1cHBsaWVyLCBFTVBUWV9DT05ORUNUSU9OX0hPTERFUik7XG59XG5cbmZ1bmN0aW9uIGVtcHR5TWV0YWRhdGFTdXBwbGllcigpIHtcbiAgcmV0dXJuIHt9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBUcmFuc2FjdGlvbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBETyBOT1QgQ0hBTkdFIFRIRSBWRVJTSU9OIEJFTE9XIEhFUkVcbi8vIFRoaXMgaXMgc2V0IGJ5IHRoZSBidWlsZCBzeXN0ZW0gYXQgcmVsZWFzZSB0aW1lLCB1c2luZ1xuLy8gICBndWxwIHNldCAtLXZlcnNpb24gPHJlbGVhc2V2ZXJzaW9uPlxuLy9cbi8vIFRoaXMgaXMgc2V0IHVwIHRoaXMgd2F5IHRvIGtlZXAgdGhlIHZlcnNpb24gaW4gdGhlIGNvZGUgaW5cbi8vIHN5bmMgd2l0aCB0aGUgbnBtIHBhY2thZ2UgdmVyc2lvbiwgYW5kIHRvIGFsbG93IHRoZSBidWlsZFxuLy8gc3lzdGVtIHRvIGNvbnRyb2wgdmVyc2lvbiBuYW1lcyBhdCBwYWNrYWdpbmcgdGltZS5cbmV4cG9ydCBkZWZhdWx0IFwiMC4wLjAtZGV2XCI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxudmFyIGFsbG9jID0gcmVxdWlyZSgnLi4vLi4vbGliL3YxL2ludGVybmFsL2J1ZicpLmFsbG9jO1xudmFyIENvbWJpbmVkQnVmZmVyID0gcmVxdWlyZSgnLi4vLi4vbGliL3YxL2ludGVybmFsL2J1ZicpLkNvbWJpbmVkQnVmZmVyO1xudmFyIHV0ZjggPSByZXF1aXJlKCcuLi8uLi9saWIvdjEvaW50ZXJuYWwvdXRmOCcpLmRlZmF1bHQ7XG52YXIgVW5wYWNrZXIgPSByZXF1aXJlKFwiLi4vLi4vbGliL3YxL2ludGVybmFsL3BhY2tzdHJlYW0uanNcIikuVW5wYWNrZXI7XG5cbmRlc2NyaWJlKCdidWZmZXJzJywgZnVuY3Rpb24oKSB7XG4gIGl0KCdzaG91bGQgaGF2ZSBoZWxwZnVsIHRvU3RyaW5nJywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgYiA9IGFsbG9jKDQpO1xuICAgIGIud3JpdGVJbnQ4KDEpO1xuICAgIGIud3JpdGVJbnQ4KDgpO1xuICAgIGIud3JpdGVJbnQ4KDE1KTtcbiAgICBiLndyaXRlSW50OCgxMjcpO1xuXG4gICAgLy8gV2hlblxuICAgIHZhciBzdHIgPSBiLnRvU3RyaW5nKCk7XG4gICAgdmFyIGhleCA9IGIudG9IZXgoKTtcblxuICAgIC8vIFRoZW5cbiAgICBleHBlY3QoIHN0ciApLnRvQ29udGFpbihcIiggcG9zaXRpb249NCApXFxuICAwMSAwOCAwZiA3ZlwiKTtcbiAgICBleHBlY3QoaGV4KS50b0JlKFwiMDEgMDggMGYgN2YgXCIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlYWQgYW5kIHdyaXRlIDgtYml0IHVuc2lnbmVkIGludGVnZXJzJywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgYiA9IGFsbG9jKDEpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgIHZhciBuID0gTWF0aC5wb3coMiwgaSk7XG5cbiAgICAgIC8vIFdoZW5cbiAgICAgIGIucHV0VUludDgoIDAsIG4gKTtcblxuICAgICAgLy8gVGhlblxuICAgICAgZXhwZWN0KCBiLmdldFVJbnQ4KDApICkudG9CZSggbiApO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWFkIGFuZCB3cml0ZSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlcnMnLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciBiID0gYWxsb2MoMik7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE1OyBpKyspIHtcbiAgICAgIHZhciBuID0gTWF0aC5wb3coMiwgaSk7XG5cbiAgICAgIC8vIFdoZW5cbiAgICAgIGIucHV0VUludDE2KCAwLCBuICk7XG5cbiAgICAgIC8vIFRoZW5cbiAgICAgIGV4cGVjdCggYi5nZXRVSW50MTYoMCkgKS50b0JlKCBuICk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlYWQgYW5kIHdyaXRlIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VycycsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIGIgPSBhbGxvYyg0KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzA7IGkrKykge1xuICAgICAgdmFyIG4gPSBNYXRoLnBvdygyLCBpKTtcblxuICAgICAgLy8gV2hlblxuICAgICAgYi5wdXRVSW50MzIoIDAsIG4gKTtcblxuICAgICAgLy8gVGhlblxuICAgICAgZXhwZWN0KCBiLmdldFVJbnQzMigwKSApLnRvQmUoIG4gKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVhZCBhbmQgd3JpdGUgOC1iaXQgc2lnbmVkIGludGVnZXJzJywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgYiA9IGFsbG9jKDEpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcbiAgICAgIHZhciBuID0gTWF0aC5wb3coMiwgaSk7XG5cbiAgICAgIC8vIFdoZW5cbiAgICAgIGIucHV0SW50OCggMCwgbiApO1xuXG4gICAgICAvLyBUaGVuXG4gICAgICBleHBlY3QoIGIuZ2V0SW50OCgwKSApLnRvQmUoIG4gKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVhZCBhbmQgd3JpdGUgMTYtYml0IHNpZ25lZCBpbnRlZ2VycycsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIGIgPSBhbGxvYygyKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTQ7IGkrKykge1xuICAgICAgdmFyIG4gPSBNYXRoLnBvdygyLCBpKTtcblxuICAgICAgLy8gV2hlblxuICAgICAgYi5wdXRJbnQxNiggMCwgbiApO1xuXG4gICAgICAvLyBUaGVuXG4gICAgICBleHBlY3QoIGIuZ2V0SW50MTYoMCkgKS50b0JlKCBuICk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlYWQgYW5kIHdyaXRlIDMyLWJpdCBzaWduZWQgaW50ZWdlcnMnLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciBiID0gYWxsb2MoNCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDMwOyBpKyspIHtcbiAgICAgIHZhciBuID0gTWF0aC5wb3coMiwgaSk7XG5cbiAgICAgIC8vIFdoZW5cbiAgICAgIGIucHV0SW50MzIoIDAsIG4gKTtcblxuICAgICAgLy8gVGhlblxuICAgICAgZXhwZWN0KCBiLmdldEludDMyKDApICkudG9CZSggbiApO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBlbmNvZGUgbGlzdCBjb3JyZWN0bHknLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciBiID0gYWxsb2MoNSk7XG4gICAgYi53cml0ZVVJbnQ4KDB4OTAgfCAweDIpO1xuICAgIGIgPSB3cml0ZVN0cmluZyhiLCAnYScpO1xuICAgIGIgPSB3cml0ZVN0cmluZyhiLCAnYicpO1xuICAgIC8vIFdoZW5cbiAgICB2YXIgaGV4ID0gYi50b0hleCgpO1xuICAgIC8vIFRoZW5cbiAgICBleHBlY3QoaGV4KS50b0JlKFwiOTIgODEgNjEgODEgNjIgXCIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGRlY29kZSBsaXN0IGNvcnJlY3RseScsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIGIgPSBhbGxvYyg1KTtcbiAgICBiLndyaXRlVUludDgoMHg5Mik7XG4gICAgYi53cml0ZVVJbnQ4KDB4ODEpO1xuICAgIGIud3JpdGVVSW50OCgweDYxKTtcbiAgICBiLndyaXRlVUludDgoMHg4MSk7XG4gICAgYi53cml0ZVVJbnQ4KDB4NjIpO1xuICAgIGIucmVzZXQoKTtcblxuICAgIC8vIFdoZW5cbiAgICB2YXIgZGF0YSA9IG5ldyBVbnBhY2tlcigpLnVucGFjayggYiApO1xuXG4gICAgLy8gVGhlblxuICAgIGV4cGVjdChkYXRhWzBdKS50b0JlKCdhJyk7XG4gICAgZXhwZWN0KGRhdGFbMV0pLnRvQmUoJ2InKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0NvbWJpbmVkQnVmZmVyJywgZnVuY3Rpb24oKSB7XG4gIGl0KCdzaG91bGQgcmVhZCBpbnQ4JywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgYjEgPSBhbGxvYygxKTtcbiAgICB2YXIgYjIgPSBhbGxvYygxKTtcbiAgICBiMS5wdXRJbnQ4KDAsIDEpO1xuICAgIGIyLnB1dEludDgoMCwgMik7XG5cbiAgICB2YXIgYiA9IG5ldyBDb21iaW5lZEJ1ZmZlcihbYjEsYjJdKTtcbiAgICBcbiAgICAvLyBXaGVuXG4gICAgdmFyIGZpcnN0ID0gYi5yZWFkSW50OCgpO1xuICAgIHZhciBzZWNvbmQgPSBiLnJlYWRJbnQ4KCk7XG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KGZpcnN0KS50b0JlKDEpO1xuICAgIGV4cGVjdChzZWNvbmQpLnRvQmUoMik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVhZCBkaXZpZGVkIGZsb2F0NjQnLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciBpbm5lciA9IGFsbG9jKDgpO1xuICAgIGlubmVyLnB1dEZsb2F0NjQoMCwgMC4xKTtcblxuICAgIHZhciBiID0gbmV3IENvbWJpbmVkQnVmZmVyKFtpbm5lci5yZWFkU2xpY2UoNCksaW5uZXIucmVhZFNsaWNlKDQpXSk7XG4gICAgXG4gICAgLy8gV2hlblxuICAgIHZhciByZWFkID0gYi5yZWFkRmxvYXQ2NCgpO1xuXG4gICAgLy8gVGhlblxuICAgIGV4cGVjdChyZWFkKS50b0JlKDAuMSk7XG4gIH0pO1xufSk7XG5cbmZ1bmN0aW9uIHdyaXRlU3RyaW5nKGIsIHN0cikge1xuICB2YXIgYnl0ZXMgPSB1dGY4LmVuY29kZShzdHIpO1xuICB2YXIgc2l6ZSA9IGJ5dGVzLmxlbmd0aDtcbiAgYi53cml0ZVVJbnQ4KDB4ODAgfCBzaXplKTtcbiAgYi53cml0ZUJ5dGVzKGJ5dGVzKTtcbiAgcmV0dXJuIGI7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxudmFyIENodW5rZXIgPSByZXF1aXJlKCcuLi8uLi9saWIvdjEvaW50ZXJuYWwvY2h1bmtpbmcnKS5DaHVua2VyO1xudmFyIERlY2h1bmtlciA9IHJlcXVpcmUoJy4uLy4uL2xpYi92MS9pbnRlcm5hbC9jaHVua2luZycpLkRlY2h1bmtlcjtcbnZhciBhbGxvYyA9IHJlcXVpcmUoJy4uLy4uL2xpYi92MS9pbnRlcm5hbC9idWYnKS5hbGxvYztcbnZhciBDb21iaW5lZEJ1ZmZlciA9IHJlcXVpcmUoJy4uLy4uL2xpYi92MS9pbnRlcm5hbC9idWYnKS5Db21iaW5lZEJ1ZmZlcjtcbnZhciBEdW1teUNoYW5uZWwgPSByZXF1aXJlKCcuLi8uLi9saWIvdjEvaW50ZXJuYWwvY2gtZHVtbXkuanMnKS5jaGFubmVsO1xuXG5kZXNjcmliZSgnQ2h1bmtlcicsIGZ1bmN0aW9uKCkge1xuICBpdCgnc2hvdWxkIGNodW5rIHNpbXBsZSBkYXRhJywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgY2ggPSBuZXcgRHVtbXlDaGFubmVsKCk7XG4gICAgdmFyIGNodW5rZXIgPSBuZXcgQ2h1bmtlcihjaCk7XG5cbiAgICAvLyBXaGVuXG4gICAgY2h1bmtlci53cml0ZUludDMyKDEpO1xuICAgIGNodW5rZXIud3JpdGVJbnQzMigyKTtcbiAgICBjaHVua2VyLmZsdXNoKCk7XG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KCBjaC50b0hleCgpICkudG9CZShcIjAwIDA4IDAwIDAwIDAwIDAxIDAwIDAwIDAwIDAyIFwiKTtcbiAgfSk7XG4gIGl0KCdzaG91bGQgY2h1bmsgYmxvYnMgbGFyZ2VyIHRoYW4gdGhlIG91dHB1dCBidWZmZXInLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciBjaCA9IG5ldyBEdW1teUNoYW5uZWwoKTtcbiAgICB2YXIgY2h1bmtlciA9IG5ldyBDaHVua2VyKGNoLCA0KTtcblxuICAgIC8vIFdoZW5cbiAgICBjaHVua2VyLndyaXRlQnl0ZXMoYnl0ZXMoIDEsMiwzLDQsNSw2ICkpO1xuICAgIGNodW5rZXIuZmx1c2goKTtcblxuICAgIC8vIFRoZW5cbiAgICBleHBlY3QoIGNoLnRvSGV4KCkgKS50b0JlKFwiMDAgMDIgMDEgMDIgMDAgMDIgMDMgMDQgMDAgMDIgMDUgMDYgXCIpO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCBpbmNsdWRlIG1lc3NhZ2UgYm91bmRhcmllcycsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIGNoID0gbmV3IER1bW15Q2hhbm5lbCgpO1xuICAgIHZhciBjaHVua2VyID0gbmV3IENodW5rZXIoY2gpO1xuXG4gICAgLy8gV2hlblxuICAgIGNodW5rZXIud3JpdGVJbnQzMigxKTtcbiAgICBjaHVua2VyLm1lc3NhZ2VCb3VuZGFyeSgpO1xuICAgIGNodW5rZXIud3JpdGVJbnQzMigyKTtcbiAgICBjaHVua2VyLmZsdXNoKCk7XG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KCBjaC50b0hleCgpICkudG9CZShcIjAwIDA0IDAwIDAwIDAwIDAxIDAwIDAwIDAwIDA0IDAwIDAwIDAwIDAyIFwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0RlY2h1bmtlcicsIGZ1bmN0aW9uKCkge1xuICBpdCgnc2hvdWxkIHVuY2h1bmsgYSBzaW1wbGUgbWVzc2FnZScsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIG1lc3NhZ2VzID0gW107XG4gICAgdmFyIGRlY2h1bmtlciA9IG5ldyBEZWNodW5rZXIoKTtcbiAgICB2YXIgY2h1bmtlciA9IG5ldyBDaHVua2VyKGRlY2h1bmtlcik7XG4gICAgZGVjaHVua2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGJ1ZmZlcikgeyBtZXNzYWdlcy5wdXNoKGJ1ZmZlcik7IH07XG5cbiAgICAvLyBXaGVuXG4gICAgY2h1bmtlci53cml0ZUludDE2KDEpO1xuICAgIGNodW5rZXIud3JpdGVJbnQxNigyKTtcbiAgICBjaHVua2VyLmZsdXNoKCk7XG4gICAgY2h1bmtlci53cml0ZUludDE2KDMpO1xuICAgIGNodW5rZXIubWVzc2FnZUJvdW5kYXJ5KCk7XG4gICAgY2h1bmtlci5mbHVzaCgpO1xuXG4gICAgLy8gVGhlblxuICAgIGV4cGVjdCggbWVzc2FnZXMubGVuZ3RoICkudG9CZSggMSApO1xuICAgIGV4cGVjdCggbWVzc2FnZXNbMF0udG9IZXgoKSApLnRvQmUoIFwiMDAgMDEgMDAgMDIgMDAgMDMgXCIgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYW5kbGUgbWVzc2FnZSBzcGxpdCBhdCBhbnkgcG9pbnQnLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciBjaCA9IG5ldyBEdW1teUNoYW5uZWwoKTtcbiAgICB2YXIgY2h1bmtlciA9IG5ldyBDaHVua2VyKGNoKTtcblxuICAgIC8vIEFuZCBnaXZlbiB0aGUgZm9sbG93aW5nIG1lc3NhZ2VcbiAgICBjaHVua2VyLndyaXRlSW50OCgxKTtcbiAgICBjaHVua2VyLndyaXRlSW50MTYoMik7XG4gICAgY2h1bmtlci53cml0ZUludDMyKDMpO1xuICAgIGNodW5rZXIud3JpdGVVSW50OCg0KTtcbiAgICBjaHVua2VyLndyaXRlVUludDMyKDUpO1xuICAgIGNodW5rZXIubWVzc2FnZUJvdW5kYXJ5KCk7XG4gICAgY2h1bmtlci5mbHVzaCgpO1xuXG4gICAgdmFyIGNodW5rZWQgPSBjaC50b0J1ZmZlcigpO1xuXG4gICAgLy8gV2hlbiBJIHRyeSBzcGxpdHRpbmcgdGhpcyBjaHVua2VkIGRhdGEgYXQgZXZlcnkgcG9zc2libGUgcG9zaXRpb25cbiAgICAvLyBpbnRvIHR3byBzZXBhcmF0ZSBidWZmZXJzLCBhbmQgc2VuZCB0aG9zZSB0byB0aGUgZGVjaHVua2VyXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBjaHVua2VkLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2xpY2UxID0gY2h1bmtlZC5nZXRTbGljZSggMCwgaSApO1xuICAgICAgdmFyIHNsaWNlMiA9IGNodW5rZWQuZ2V0U2xpY2UoIGksIGNodW5rZWQubGVuZ3RoIC0gaSApO1xuXG4gICAgICAvLyBEZWNodW5rIHRoZSBzbGljZXNcbiAgICAgIHZhciBtZXNzYWdlcyA9IFtdO1xuICAgICAgdmFyIGRlY2h1bmtlciA9IG5ldyBEZWNodW5rZXIoKTtcbiAgICAgIGRlY2h1bmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihidWZmZXIpIHsgbWVzc2FnZXMucHVzaChidWZmZXIpOyB9O1xuICAgICAgZGVjaHVua2VyLndyaXRlKCBzbGljZTEgKTtcbiAgICAgIGRlY2h1bmtlci53cml0ZSggc2xpY2UyICk7XG5cbiAgICAgIC8vIFRoZW4sIHRoZSBvdXRwdXQgc2hvdWxkIGJlIGNvcnJlY3RcbiAgICAgIGV4cGVjdCggbWVzc2FnZXMubGVuZ3RoICkudG9CZSggMSApO1xuICAgICAgZXhwZWN0KCBtZXNzYWdlc1swXS50b0hleCgpICkudG9CZSggXCIwMSAwMCAwMiAwMCAwMCAwMCAwMyAwNCAwMCAwMCAwMCAwNSBcIiApO1xuICAgIH07XG4gIH0pO1xufSk7XG5cbmZ1bmN0aW9uIGJ5dGVzKCkge1xuICB2YXIgYiA9IGFsbG9jKCBhcmd1bWVudHMubGVuZ3RoICk7XG4gIGZvciggdmFyIGk9MDsgaTxhcmd1bWVudHMubGVuZ3RoOyBpKysgKSB7XG4gICAgYi53cml0ZVVJbnQ4KCBhcmd1bWVudHNbaV0gKTtcbiAgfVxuICBiLnBvc2l0aW9uID0gMDtcbiAgcmV0dXJuIGI7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IENvbm5lY3Rpb25Ib2xkZXIsIHtFTVBUWV9DT05ORUNUSU9OX0hPTERFUn0gZnJvbSAnLi4vLi4vc3JjL3YxL2ludGVybmFsL2Nvbm5lY3Rpb24taG9sZGVyJztcbmltcG9ydCB7U2luZ2xlQ29ubmVjdGlvblByb3ZpZGVyfSBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZXJuYWwvY29ubmVjdGlvbi1wcm92aWRlcnMnO1xuaW1wb3J0IHtSRUFEfSBmcm9tICcuLi8uLi9zcmMvdjEvZHJpdmVyJztcbmltcG9ydCBGYWtlQ29ubmVjdGlvbiBmcm9tICcuL2Zha2UtY29ubmVjdGlvbic7XG5cbmRlc2NyaWJlKCdFbXB0eUNvbm5lY3Rpb25Ib2xkZXInLCAoKSA9PiB7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gcmVqZWN0ZWQgcHJvbWlzZSBpbnN0ZWFkIG9mIGNvbm5lY3Rpb24nLCBkb25lID0+IHtcbiAgICBFTVBUWV9DT05ORUNUSU9OX0hPTERFUi5nZXRDb25uZWN0aW9uKCkuY2F0Y2goKCkgPT4ge1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiByZXNvbHZlZCBwcm9taXNlIG9uIHJlbGVhc2UnLCBkb25lID0+IHtcbiAgICBFTVBUWV9DT05ORUNUSU9OX0hPTERFUi5yZWxlYXNlQ29ubmVjdGlvbigpLnRoZW4oKCkgPT4ge1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiByZXNvbHZlZCBwcm9taXNlIG9uIGNsb3NlJywgZG9uZSA9PiB7XG4gICAgRU1QVFlfQ09OTkVDVElPTl9IT0xERVIuY2xvc2UoKS50aGVuKCgpID0+IHtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbn0pO1xuXG5kZXNjcmliZSgnQ29ubmVjdGlvbkhvbGRlcicsICgpID0+IHtcblxuICBpdCgnc2hvdWxkIGFjcXVpcmUgbmV3IGNvbm5lY3Rpb24gZHVyaW5nIGluaXRpYWxpemF0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm92aWRlciA9IG5ldyBSZWNvcmRpbmdDb25uZWN0aW9uUHJvdmlkZXIoW25ldyBGYWtlQ29ubmVjdGlvbigpXSk7XG4gICAgY29uc3QgY29ubmVjdGlvbkhvbGRlciA9IG5ldyBDb25uZWN0aW9uSG9sZGVyKFJFQUQsIGNvbm5lY3Rpb25Qcm92aWRlcik7XG5cbiAgICBjb25uZWN0aW9uSG9sZGVyLmluaXRpYWxpemVDb25uZWN0aW9uKCk7XG5cbiAgICBleHBlY3QoY29ubmVjdGlvblByb3ZpZGVyLmFjcXVpcmVDb25uZWN0aW9uSW52b2tlZCkudG9CZSgxKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gYWNxdWlyZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIGNvbm5lY3Rpb24nLCBkb25lID0+IHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gbmV3IEZha2VDb25uZWN0aW9uKCk7XG4gICAgY29uc3QgY29ubmVjdGlvblByb3ZpZGVyID0gbmV3U2luZ2xlQ29ubmVjdGlvblByb3ZpZGVyKGNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Ib2xkZXIgPSBuZXcgQ29ubmVjdGlvbkhvbGRlcihSRUFELCBjb25uZWN0aW9uUHJvdmlkZXIpO1xuXG4gICAgY29ubmVjdGlvbkhvbGRlci5pbml0aWFsaXplQ29ubmVjdGlvbigpO1xuXG4gICAgY29ubmVjdGlvbkhvbGRlci5nZXRDb25uZWN0aW9uKCkudGhlbihjb25uZWN0aW9uID0+IHtcbiAgICAgIGV4cGVjdChjb25uZWN0aW9uKS50b0JlKGNvbm5lY3Rpb24pO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlbGVhc2UgY29ubmVjdGlvbiB3aXRoIHNpbmdsZSB1c2VyJywgZG9uZSA9PiB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IG5ldyBGYWtlQ29ubmVjdGlvbigpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm92aWRlciA9IG5ld1NpbmdsZUNvbm5lY3Rpb25Qcm92aWRlcihjb25uZWN0aW9uKTtcbiAgICBjb25zdCBjb25uZWN0aW9uSG9sZGVyID0gbmV3IENvbm5lY3Rpb25Ib2xkZXIoUkVBRCwgY29ubmVjdGlvblByb3ZpZGVyKTtcblxuICAgIGNvbm5lY3Rpb25Ib2xkZXIuaW5pdGlhbGl6ZUNvbm5lY3Rpb24oKTtcblxuICAgIGNvbm5lY3Rpb25Ib2xkZXIucmVsZWFzZUNvbm5lY3Rpb24oKS50aGVuKCgpID0+IHtcbiAgICAgIGV4cGVjdChjb25uZWN0aW9uLmlzUmVsZWFzZWRPbmNlKCkpLnRvQmVUcnV0aHkoKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgcmVsZWFzZSBjb25uZWN0aW9uIHdpdGggbXVsdGlwbGUgdXNlcnMnLCBkb25lID0+IHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gbmV3IEZha2VDb25uZWN0aW9uKCk7XG4gICAgY29uc3QgY29ubmVjdGlvblByb3ZpZGVyID0gbmV3U2luZ2xlQ29ubmVjdGlvblByb3ZpZGVyKGNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Ib2xkZXIgPSBuZXcgQ29ubmVjdGlvbkhvbGRlcihSRUFELCBjb25uZWN0aW9uUHJvdmlkZXIpO1xuXG4gICAgY29ubmVjdGlvbkhvbGRlci5pbml0aWFsaXplQ29ubmVjdGlvbigpO1xuICAgIGNvbm5lY3Rpb25Ib2xkZXIuaW5pdGlhbGl6ZUNvbm5lY3Rpb24oKTtcbiAgICBjb25uZWN0aW9uSG9sZGVyLmluaXRpYWxpemVDb25uZWN0aW9uKCk7XG5cbiAgICBjb25uZWN0aW9uSG9sZGVyLnJlbGVhc2VDb25uZWN0aW9uKCkudGhlbigoKSA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbi5pc05ldmVyUmVsZWFzZWQoKSkudG9CZVRydXRoeSgpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlbGVhc2UgY29ubmVjdGlvbiB3aXRoIG11bHRpcGxlIHVzZXJzIHdoZW4gYWxsIHVzZXJzIHJlbGVhc2UnLCBkb25lID0+IHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gbmV3IEZha2VDb25uZWN0aW9uKCk7XG4gICAgY29uc3QgY29ubmVjdGlvblByb3ZpZGVyID0gbmV3U2luZ2xlQ29ubmVjdGlvblByb3ZpZGVyKGNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Ib2xkZXIgPSBuZXcgQ29ubmVjdGlvbkhvbGRlcihSRUFELCBjb25uZWN0aW9uUHJvdmlkZXIpO1xuXG4gICAgY29ubmVjdGlvbkhvbGRlci5pbml0aWFsaXplQ29ubmVjdGlvbigpO1xuICAgIGNvbm5lY3Rpb25Ib2xkZXIuaW5pdGlhbGl6ZUNvbm5lY3Rpb24oKTtcbiAgICBjb25uZWN0aW9uSG9sZGVyLmluaXRpYWxpemVDb25uZWN0aW9uKCk7XG5cbiAgICBjb25uZWN0aW9uSG9sZGVyLnJlbGVhc2VDb25uZWN0aW9uKCkudGhlbigoKSA9PiB7XG4gICAgICBjb25uZWN0aW9uSG9sZGVyLnJlbGVhc2VDb25uZWN0aW9uKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbm5lY3Rpb25Ib2xkZXIucmVsZWFzZUNvbm5lY3Rpb24oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICBleHBlY3QoY29ubmVjdGlvbi5pc1JlbGVhc2VkT25jZSgpKS50b0JlVHJ1dGh5KCk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGRvIG5vdGhpbmcgd2hlbiBjbG9zZWQgYW5kIG5vdCBpbml0aWFsaXplZCcsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuZXcgRmFrZUNvbm5lY3Rpb24oKTtcbiAgICBjb25zdCBjb25uZWN0aW9uUHJvdmlkZXIgPSBuZXdTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIoY29ubmVjdGlvbik7XG4gICAgY29uc3QgY29ubmVjdGlvbkhvbGRlciA9IG5ldyBDb25uZWN0aW9uSG9sZGVyKFJFQUQsIGNvbm5lY3Rpb25Qcm92aWRlcik7XG5cbiAgICBjb25uZWN0aW9uSG9sZGVyLmNsb3NlKCkudGhlbigoKSA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbi5pc05ldmVyUmVsZWFzZWQoKSkudG9CZVRydXRoeSgpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNsb3NlIGV2ZW4gd2hlbiB1c2VycyBleGlzdCcsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuZXcgRmFrZUNvbm5lY3Rpb24oKTtcbiAgICBjb25zdCBjb25uZWN0aW9uUHJvdmlkZXIgPSBuZXdTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIoY29ubmVjdGlvbik7XG4gICAgY29uc3QgY29ubmVjdGlvbkhvbGRlciA9IG5ldyBDb25uZWN0aW9uSG9sZGVyKFJFQUQsIGNvbm5lY3Rpb25Qcm92aWRlcik7XG5cbiAgICBjb25uZWN0aW9uSG9sZGVyLmluaXRpYWxpemVDb25uZWN0aW9uKCk7XG4gICAgY29ubmVjdGlvbkhvbGRlci5pbml0aWFsaXplQ29ubmVjdGlvbigpO1xuXG4gICAgY29ubmVjdGlvbkhvbGRlci5jbG9zZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uaXNSZWxlYXNlZE9uY2VPblNlc3Npb25DbG9zZSgpKS50b0JlVHJ1dGh5KCk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSBuZXcgY29ubmVjdGlvbiBhZnRlciByZWxlYXNpbmcgY3VycmVudCBvbmUnLCBkb25lID0+IHtcbiAgICBjb25zdCBjb25uZWN0aW9uMSA9IG5ldyBGYWtlQ29ubmVjdGlvbigpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb24yID0gbmV3IEZha2VDb25uZWN0aW9uKCk7XG4gICAgY29uc3QgY29ubmVjdGlvblByb3ZpZGVyID0gbmV3IFJlY29yZGluZ0Nvbm5lY3Rpb25Qcm92aWRlcihbY29ubmVjdGlvbjEsIGNvbm5lY3Rpb24yXSk7XG4gICAgY29uc3QgY29ubmVjdGlvbkhvbGRlciA9IG5ldyBDb25uZWN0aW9uSG9sZGVyKFJFQUQsIGNvbm5lY3Rpb25Qcm92aWRlcik7XG5cbiAgICBjb25uZWN0aW9uSG9sZGVyLmluaXRpYWxpemVDb25uZWN0aW9uKCk7XG5cbiAgICBjb25uZWN0aW9uSG9sZGVyLnJlbGVhc2VDb25uZWN0aW9uKCkudGhlbigoKSA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbjEuaXNSZWxlYXNlZE9uY2UoKSkudG9CZVRydXRoeSgpO1xuXG4gICAgICBjb25uZWN0aW9uSG9sZGVyLmluaXRpYWxpemVDb25uZWN0aW9uKCk7XG4gICAgICBjb25uZWN0aW9uSG9sZGVyLnJlbGVhc2VDb25uZWN0aW9uKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGV4cGVjdChjb25uZWN0aW9uMi5pc1JlbGVhc2VkT25jZSgpKS50b0JlVHJ1dGh5KCk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGluaXRpYWxpemUgbmV3IGNvbm5lY3Rpb24gYWZ0ZXIgYmVpbmcgY2xvc2VkJywgZG9uZSA9PiB7XG4gICAgY29uc3QgY29ubmVjdGlvbjEgPSBuZXcgRmFrZUNvbm5lY3Rpb24oKTtcbiAgICBjb25zdCBjb25uZWN0aW9uMiA9IG5ldyBGYWtlQ29ubmVjdGlvbigpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm92aWRlciA9IG5ldyBSZWNvcmRpbmdDb25uZWN0aW9uUHJvdmlkZXIoW2Nvbm5lY3Rpb24xLCBjb25uZWN0aW9uMl0pO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Ib2xkZXIgPSBuZXcgQ29ubmVjdGlvbkhvbGRlcihSRUFELCBjb25uZWN0aW9uUHJvdmlkZXIpO1xuXG4gICAgY29ubmVjdGlvbkhvbGRlci5pbml0aWFsaXplQ29ubmVjdGlvbigpO1xuXG4gICAgY29ubmVjdGlvbkhvbGRlci5jbG9zZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24xLmlzUmVsZWFzZWRPbmNlT25TZXNzaW9uQ2xvc2UoKSkudG9CZVRydXRoeSgpO1xuXG4gICAgICBjb25uZWN0aW9uSG9sZGVyLmluaXRpYWxpemVDb25uZWN0aW9uKCk7XG4gICAgICBjb25uZWN0aW9uSG9sZGVyLmNsb3NlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGV4cGVjdChjb25uZWN0aW9uMi5pc1JlbGVhc2VkT25jZU9uU2Vzc2lvbkNsb3NlKCkpLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmNsYXNzIFJlY29yZGluZ0Nvbm5lY3Rpb25Qcm92aWRlciBleHRlbmRzIFNpbmdsZUNvbm5lY3Rpb25Qcm92aWRlciB7XG5cbiAgY29uc3RydWN0b3IoY29ubmVjdGlvbnMpIHtcbiAgICBzdXBlcihQcm9taXNlLnJlc29sdmUoKSk7XG4gICAgdGhpcy5jb25uZWN0aW9uUHJvbWlzZXMgPSBjb25uZWN0aW9ucy5tYXAoY29ubiA9PiBQcm9taXNlLnJlc29sdmUoY29ubikpO1xuICAgIHRoaXMuYWNxdWlyZUNvbm5lY3Rpb25JbnZva2VkID0gMDtcbiAgfVxuXG4gIGFjcXVpcmVDb25uZWN0aW9uKG1vZGUpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uUHJvbWlzZXNbdGhpcy5hY3F1aXJlQ29ubmVjdGlvbkludm9rZWQrK107XG4gIH1cbn1cblxuZnVuY3Rpb24gbmV3U2luZ2xlQ29ubmVjdGlvblByb3ZpZGVyKGNvbm5lY3Rpb24pIHtcbiAgcmV0dXJuIG5ldyBTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIoUHJvbWlzZS5yZXNvbHZlKGNvbm5lY3Rpb24pKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge1JFQUQsIFdSSVRFfSBmcm9tICcuLi8uLi9zcmMvdjEvZHJpdmVyJztcbmltcG9ydCBJbnRlZ2VyLCB7aW50fSBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZWdlcic7XG5pbXBvcnQge1NFUlZJQ0VfVU5BVkFJTEFCTEV9IGZyb20gJy4uLy4uL3NyYy92MS9lcnJvcic7XG5pbXBvcnQgUm91dGluZ1RhYmxlIGZyb20gJy4uLy4uL3NyYy92MS9pbnRlcm5hbC9yb3V0aW5nLXRhYmxlJztcbmltcG9ydCBSb3VuZFJvYmluQXJyYXkgZnJvbSAnLi4vLi4vc3JjL3YxL2ludGVybmFsL3JvdW5kLXJvYmluLWFycmF5JztcbmltcG9ydCB7RGlyZWN0Q29ubmVjdGlvblByb3ZpZGVyLCBMb2FkQmFsYW5jZXJ9IGZyb20gJy4uLy4uL3NyYy92MS9pbnRlcm5hbC9jb25uZWN0aW9uLXByb3ZpZGVycyc7XG5pbXBvcnQgUG9vbCBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZXJuYWwvcG9vbCc7XG5cbmNvbnN0IE5PX09QX0RSSVZFUl9DQUxMQkFDSyA9ICgpID0+IHtcbn07XG5cbmRlc2NyaWJlKCdEaXJlY3RDb25uZWN0aW9uUHJvdmlkZXInLCAoKSA9PiB7XG5cbiAgaXQoJ2FjcXVpcmVzIGNvbm5lY3Rpb24gZnJvbSB0aGUgcG9vbCcsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHBvb2wgPSBuZXdQb29sKCk7XG4gICAgY29uc3QgY29ubmVjdGlvblByb3ZpZGVyID0gbmV3RGlyZWN0Q29ubmVjdGlvblByb3ZpZGVyKCdsb2NhbGhvc3Q6MTIzJywgcG9vbCk7XG5cbiAgICBjb25uZWN0aW9uUHJvdmlkZXIuYWNxdWlyZUNvbm5lY3Rpb24oUkVBRCkudGhlbihjb25uZWN0aW9uID0+IHtcbiAgICAgIGV4cGVjdChjb25uZWN0aW9uKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uYWRkcmVzcykudG9FcXVhbCgnbG9jYWxob3N0OjEyMycpO1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24ucmVsZWFzZSkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChwb29sLmhhcygnbG9jYWxob3N0OjEyMycpKS50b0JlVHJ1dGh5KCk7XG5cbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbn0pO1xuXG5kZXNjcmliZSgnTG9hZEJhbGFuY2VyJywgKCkgPT4ge1xuXG4gIGl0KCdjYW4gZm9yZ2V0IGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyKFxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMicsICdzZXJ2ZXItNCddXG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5mb3JnZXQoJ3NlcnZlci0yJyk7XG5cbiAgICBleHBlY3RSb3V0aW5nVGFibGUobG9hZEJhbGFuY2VyLFxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMyddLFxuICAgICAgWydzZXJ2ZXItNCddXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2NhbiBub3QgZm9yZ2V0IHVua25vd24gYWRkcmVzcycsICgpID0+IHtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXIoXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0zJywgJ3NlcnZlci00J10sXG4gICAgICBbJ3NlcnZlci01JywgJ3NlcnZlci02J11cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmZvcmdldCgnc2VydmVyLTQyJyk7XG5cbiAgICBleHBlY3RSb3V0aW5nVGFibGUobG9hZEJhbGFuY2VyLFxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItNCddLFxuICAgICAgWydzZXJ2ZXItNScsICdzZXJ2ZXItNiddXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3B1cmdlcyBjb25uZWN0aW9ucyB3aGVuIGFkZHJlc3MgaXMgZm9yZ290dGVuJywgKCkgPT4ge1xuICAgIGNvbnN0IHBvb2wgPSBuZXdQb29sKCk7XG5cbiAgICBwb29sLmFjcXVpcmUoJ3NlcnZlci0xJyk7XG4gICAgcG9vbC5hY3F1aXJlKCdzZXJ2ZXItMycpO1xuICAgIHBvb2wuYWNxdWlyZSgnc2VydmVyLTUnKTtcbiAgICBleHBlY3RQb29sVG9Db250YWluKHBvb2wsIFsnc2VydmVyLTEnLCAnc2VydmVyLTMnLCAnc2VydmVyLTUnXSk7XG5cbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXIoXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0zJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0yJywgJ3NlcnZlci00J10sXG4gICAgICBwb29sXG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5mb3JnZXQoJ3NlcnZlci0xJyk7XG4gICAgbG9hZEJhbGFuY2VyLmZvcmdldCgnc2VydmVyLTUnKTtcblxuICAgIGV4cGVjdFBvb2xUb0NvbnRhaW4ocG9vbCwgWydzZXJ2ZXItMyddKTtcbiAgICBleHBlY3RQb29sVG9Ob3RDb250YWluKHBvb2wsIFsnc2VydmVyLTEnLCAnc2VydmVyLTUnXSk7XG4gIH0pO1xuXG4gIGl0KCdjYW4gZm9yZ2V0IHdyaXRlciBhZGRyZXNzJywgKCkgPT4ge1xuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcihcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTMnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTInLCAnc2VydmVyLTQnXVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuZm9yZ2V0V3JpdGVyKCdzZXJ2ZXItMicpO1xuXG4gICAgZXhwZWN0Um91dGluZ1RhYmxlKGxvYWRCYWxhbmNlcixcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTMnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTQnXVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdjYW4gbm90IGZvcmdldCB1bmtub3duIHdyaXRlciBhZGRyZXNzJywgKCkgPT4ge1xuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcihcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTMnLCAnc2VydmVyLTQnXSxcbiAgICAgIFsnc2VydmVyLTUnLCAnc2VydmVyLTYnXVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuZm9yZ2V0V3JpdGVyKCdzZXJ2ZXItNDInKTtcblxuICAgIGV4cGVjdFJvdXRpbmdUYWJsZShsb2FkQmFsYW5jZXIsXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0zJywgJ3NlcnZlci00J10sXG4gICAgICBbJ3NlcnZlci01JywgJ3NlcnZlci02J11cbiAgICApO1xuICB9KTtcblxuICBpdCgnaW5pdGlhbGl6ZXMgcm91dGluZyB0YWJsZSB3aXRoIHRoZSBnaXZlbiByb3V0ZXInLCAoKSA9PiB7XG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3IExvYWRCYWxhbmNlcignc2VydmVyLUFCQycsIG5ld1Bvb2woKSwgTk9fT1BfRFJJVkVSX0NBTExCQUNLKTtcblxuICAgIGV4cGVjdFJvdXRpbmdUYWJsZShsb2FkQmFsYW5jZXIsXG4gICAgICBbJ3NlcnZlci1BQkMnXSxcbiAgICAgIFtdLFxuICAgICAgW11cbiAgICApO1xuICB9KTtcblxuICBpdCgnYWNxdWlyZXMgcmVhZCBjb25uZWN0aW9uIHdpdGggdXAtdG8tZGF0ZSByb3V0aW5nIHRhYmxlJywgZG9uZSA9PiB7XG4gICAgY29uc3QgcG9vbCA9IG5ld1Bvb2woKTtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXIoXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0zJywgJ3NlcnZlci00J10sXG4gICAgICBbJ3NlcnZlci01JywgJ3NlcnZlci02J10sXG4gICAgICBwb29sXG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihSRUFEKS50aGVuKGNvbm5lY3Rpb24gPT4ge1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLTMnKTtcbiAgICAgIGV4cGVjdChwb29sLmhhcygnc2VydmVyLTMnKSkudG9CZVRydXRoeSgpO1xuXG4gICAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oUkVBRCkudGhlbihjb25uZWN0aW9uID0+IHtcbiAgICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLTQnKTtcbiAgICAgICAgZXhwZWN0KHBvb2wuaGFzKCdzZXJ2ZXItNCcpKS50b0JlVHJ1dGh5KCk7XG5cbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdhY3F1aXJlcyB3cml0ZSBjb25uZWN0aW9uIHdpdGggdXAtdG8tZGF0ZSByb3V0aW5nIHRhYmxlJywgZG9uZSA9PiB7XG4gICAgY29uc3QgcG9vbCA9IG5ld1Bvb2woKTtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXIoXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0zJywgJ3NlcnZlci00J10sXG4gICAgICBbJ3NlcnZlci01JywgJ3NlcnZlci02J10sXG4gICAgICBwb29sXG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihXUklURSkudGhlbihjb25uZWN0aW9uID0+IHtcbiAgICAgIGV4cGVjdChjb25uZWN0aW9uLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci01Jyk7XG4gICAgICBleHBlY3QocG9vbC5oYXMoJ3NlcnZlci01JykpLnRvQmVUcnV0aHkoKTtcblxuICAgICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS50aGVuKGNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBleHBlY3QoY29ubmVjdGlvbi5hZGRyZXNzKS50b0VxdWFsKCdzZXJ2ZXItNicpO1xuICAgICAgICBleHBlY3QocG9vbC5oYXMoJ3NlcnZlci02JykpLnRvQmVUcnV0aHkoKTtcblxuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Rocm93cyBmb3IgaWxsZWdhbCBhY2Nlc3MgbW9kZScsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcihcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTMnLCAnc2VydmVyLTQnXSxcbiAgICAgIFsnc2VydmVyLTUnLCAnc2VydmVyLTYnXVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oJ1dST05HJykuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZXhwZWN0KGVycm9yLm1lc3NhZ2UpLnRvRXF1YWwoJ0lsbGVnYWwgbW9kZSBXUk9ORycpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgncmVmcmVzaGVzIHN0YWxlIHJvdXRpbmcgdGFibGUgdG8gZ2V0IHJlYWQgY29ubmVjdGlvbicsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHBvb2wgPSBuZXdQb29sKCk7XG4gICAgY29uc3QgdXBkYXRlZFJvdXRpbmdUYWJsZSA9IG5ld1JvdXRpbmdUYWJsZShcbiAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgIFsnc2VydmVyLUMnLCAnc2VydmVyLUQnXSxcbiAgICAgIFsnc2VydmVyLUUnLCAnc2VydmVyLUYnXVxuICAgICk7XG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyKFxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItNCddLFxuICAgICAgWydzZXJ2ZXItNScsICdzZXJ2ZXItNiddLFxuICAgICAgcG9vbCxcbiAgICAgIGludCgwKSwgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgICB7J3NlcnZlci0xJzogdXBkYXRlZFJvdXRpbmdUYWJsZX1cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFJFQUQpLnRoZW4oY29ubmVjdGlvbiA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbi5hZGRyZXNzKS50b0VxdWFsKCdzZXJ2ZXItQycpO1xuICAgICAgZXhwZWN0KHBvb2wuaGFzKCdzZXJ2ZXItQycpKS50b0JlVHJ1dGh5KCk7XG5cbiAgICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihSRUFEKS50aGVuKGNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBleHBlY3QoY29ubmVjdGlvbi5hZGRyZXNzKS50b0VxdWFsKCdzZXJ2ZXItRCcpO1xuICAgICAgICBleHBlY3QocG9vbC5oYXMoJ3NlcnZlci1EJykpLnRvQmVUcnV0aHkoKTtcblxuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3JlZnJlc2hlcyBzdGFsZSByb3V0aW5nIHRhYmxlIHRvIGdldCB3cml0ZSBjb25uZWN0aW9uJywgZG9uZSA9PiB7XG4gICAgY29uc3QgcG9vbCA9IG5ld1Bvb2woKTtcbiAgICBjb25zdCB1cGRhdGVkUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgWydzZXJ2ZXItQycsICdzZXJ2ZXItRCddLFxuICAgICAgWydzZXJ2ZXItRScsICdzZXJ2ZXItRiddXG4gICAgKTtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXIoXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0zJywgJ3NlcnZlci00J10sXG4gICAgICBbJ3NlcnZlci01JywgJ3NlcnZlci02J10sXG4gICAgICBwb29sLFxuICAgICAgaW50KDApLCAvLyBleHBpcmVkIHJvdXRpbmcgdGFibGVcbiAgICAgIHsnc2VydmVyLTEnOiB1cGRhdGVkUm91dGluZ1RhYmxlfVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oV1JJVEUpLnRoZW4oY29ubmVjdGlvbiA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbi5hZGRyZXNzKS50b0VxdWFsKCdzZXJ2ZXItRScpO1xuICAgICAgZXhwZWN0KHBvb2wuaGFzKCdzZXJ2ZXItRScpKS50b0JlVHJ1dGh5KCk7XG5cbiAgICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihXUklURSkudGhlbihjb25uZWN0aW9uID0+IHtcbiAgICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUYnKTtcbiAgICAgICAgZXhwZWN0KHBvb2wuaGFzKCdzZXJ2ZXItRicpKS50b0JlVHJ1dGh5KCk7XG5cbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdyZWZyZXNoZXMgc3RhbGUgcm91dGluZyB0YWJsZSB0byBnZXQgcmVhZCBjb25uZWN0aW9uIHdoZW4gb25lIHJvdXRlciBmYWlscycsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHBvb2wgPSBuZXdQb29sKCk7XG4gICAgY29uc3QgdXBkYXRlZFJvdXRpbmdUYWJsZSA9IG5ld1JvdXRpbmdUYWJsZShcbiAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgIFsnc2VydmVyLUMnLCAnc2VydmVyLUQnXSxcbiAgICAgIFsnc2VydmVyLUUnLCAnc2VydmVyLUYnXVxuICAgICk7XG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyKFxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItNCddLFxuICAgICAgWydzZXJ2ZXItNScsICdzZXJ2ZXItNiddLFxuICAgICAgcG9vbCxcbiAgICAgIGludCgwKSwgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgICB7XG4gICAgICAgICdzZXJ2ZXItMSc6IG51bGwsIC8vIHJldHVybnMgbm8gcm91dGluZyB0YWJsZVxuICAgICAgICAnc2VydmVyLTInOiB1cGRhdGVkUm91dGluZ1RhYmxlLFxuICAgICAgfVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oUkVBRCkudGhlbihjb25uZWN0aW9uID0+IHtcbiAgICAgIGV4cGVjdChjb25uZWN0aW9uLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1DJyk7XG4gICAgICBleHBlY3QocG9vbC5oYXMoJ3NlcnZlci1DJykpLnRvQmVUcnV0aHkoKTtcblxuICAgICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFJFQUQpLnRoZW4oY29ubmVjdGlvbiA9PiB7XG4gICAgICAgIGV4cGVjdChjb25uZWN0aW9uLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1EJyk7XG4gICAgICAgIGV4cGVjdChwb29sLmhhcygnc2VydmVyLUQnKSkudG9CZVRydXRoeSgpO1xuXG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgncmVmcmVzaGVzIHN0YWxlIHJvdXRpbmcgdGFibGUgdG8gZ2V0IHdyaXRlIGNvbm5lY3Rpb24nLCBkb25lID0+IHtcbiAgICBjb25zdCBwb29sID0gbmV3UG9vbCgpO1xuICAgIGNvbnN0IHVwZGF0ZWRSb3V0aW5nVGFibGUgPSBuZXdSb3V0aW5nVGFibGUoXG4gICAgICBbJ3NlcnZlci1BJywgJ3NlcnZlci1CJ10sXG4gICAgICBbJ3NlcnZlci1DJywgJ3NlcnZlci1EJ10sXG4gICAgICBbJ3NlcnZlci1FJywgJ3NlcnZlci1GJ11cbiAgICApO1xuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcihcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTMnLCAnc2VydmVyLTQnXSxcbiAgICAgIFsnc2VydmVyLTUnLCAnc2VydmVyLTYnXSxcbiAgICAgIHBvb2wsXG4gICAgICBpbnQoMCksIC8vIGV4cGlyZWQgcm91dGluZyB0YWJsZVxuICAgICAge1xuICAgICAgICAnc2VydmVyLTEnOiBudWxsLCAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgICAgJ3NlcnZlci0yJzogdXBkYXRlZFJvdXRpbmdUYWJsZSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS50aGVuKGNvbm5lY3Rpb24gPT4ge1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUUnKTtcbiAgICAgIGV4cGVjdChwb29sLmhhcygnc2VydmVyLUUnKSkudG9CZVRydXRoeSgpO1xuXG4gICAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oV1JJVEUpLnRoZW4oY29ubmVjdGlvbiA9PiB7XG4gICAgICAgIGV4cGVjdChjb25uZWN0aW9uLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1GJyk7XG4gICAgICAgIGV4cGVjdChwb29sLmhhcygnc2VydmVyLUYnKSkudG9CZVRydXRoeSgpO1xuXG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgncmVmcmVzaGVzIHN0YWxlIHJvdXRpbmcgdGFibGUgdG8gZ2V0IHJlYWQgY29ubmVjdGlvbiB3aGVuIG9uZSByb3V0ZXIgcmV0dXJucyBpbGxlZ2FsIHJlc3BvbnNlJywgZG9uZSA9PiB7XG4gICAgY29uc3QgcG9vbCA9IG5ld1Bvb2woKTtcbiAgICBjb25zdCBuZXdJbGxlZ2FsUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgWydzZXJ2ZXItQycsICdzZXJ2ZXItRCddLFxuICAgICAgW10gLy8gbm8gd3JpdGVycyAtIHRhYmxlIGlzIGlsbGVnYWwgYW5kIHNob3VsZCBiZSBza2lwcGVkXG4gICAgKTtcbiAgICBjb25zdCBuZXdMZWdhbFJvdXRpbmdUYWJsZSA9IG5ld1JvdXRpbmdUYWJsZShcbiAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgIFsnc2VydmVyLUMnLCAnc2VydmVyLUQnXSxcbiAgICAgIFsnc2VydmVyLUUnLCAnc2VydmVyLUYnXVxuICAgICk7XG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyKFxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItNCddLFxuICAgICAgWydzZXJ2ZXItNScsICdzZXJ2ZXItNiddLFxuICAgICAgcG9vbCxcbiAgICAgIGludCgwKSwgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgICB7XG4gICAgICAgICdzZXJ2ZXItMSc6IG5ld0lsbGVnYWxSb3V0aW5nVGFibGUsXG4gICAgICAgICdzZXJ2ZXItMic6IG5ld0xlZ2FsUm91dGluZ1RhYmxlLFxuICAgICAgfVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oUkVBRCkudGhlbihjb25uZWN0aW9uID0+IHtcbiAgICAgIGV4cGVjdChjb25uZWN0aW9uLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1DJyk7XG4gICAgICBleHBlY3QocG9vbC5oYXMoJ3NlcnZlci1DJykpLnRvQmVUcnV0aHkoKTtcblxuICAgICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFJFQUQpLnRoZW4oY29ubmVjdGlvbiA9PiB7XG4gICAgICAgIGV4cGVjdChjb25uZWN0aW9uLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1EJyk7XG4gICAgICAgIGV4cGVjdChwb29sLmhhcygnc2VydmVyLUQnKSkudG9CZVRydXRoeSgpO1xuXG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgncmVmcmVzaGVzIHN0YWxlIHJvdXRpbmcgdGFibGUgdG8gZ2V0IHdyaXRlIGNvbm5lY3Rpb24gd2hlbiBvbmUgcm91dGVyIHJldHVybnMgaWxsZWdhbCByZXNwb25zZScsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHBvb2wgPSBuZXdQb29sKCk7XG4gICAgY29uc3QgbmV3SWxsZWdhbFJvdXRpbmdUYWJsZSA9IG5ld1JvdXRpbmdUYWJsZShcbiAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgIFsnc2VydmVyLUMnLCAnc2VydmVyLUQnXSxcbiAgICAgIFtdIC8vIG5vIHdyaXRlcnMgLSB0YWJsZSBpcyBpbGxlZ2FsIGFuZCBzaG91bGQgYmUgc2tpcHBlZFxuICAgICk7XG4gICAgY29uc3QgbmV3TGVnYWxSb3V0aW5nVGFibGUgPSBuZXdSb3V0aW5nVGFibGUoXG4gICAgICBbJ3NlcnZlci1BJywgJ3NlcnZlci1CJ10sXG4gICAgICBbJ3NlcnZlci1DJywgJ3NlcnZlci1EJ10sXG4gICAgICBbJ3NlcnZlci1FJywgJ3NlcnZlci1GJ11cbiAgICApO1xuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcihcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTMnLCAnc2VydmVyLTQnXSxcbiAgICAgIFsnc2VydmVyLTUnLCAnc2VydmVyLTYnXSxcbiAgICAgIHBvb2wsXG4gICAgICBpbnQoMCksIC8vIGV4cGlyZWQgcm91dGluZyB0YWJsZVxuICAgICAge1xuICAgICAgICAnc2VydmVyLTEnOiBuZXdJbGxlZ2FsUm91dGluZ1RhYmxlLFxuICAgICAgICAnc2VydmVyLTInOiBuZXdMZWdhbFJvdXRpbmdUYWJsZSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS50aGVuKGNvbm5lY3Rpb24gPT4ge1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUUnKTtcbiAgICAgIGV4cGVjdChwb29sLmhhcygnc2VydmVyLUUnKSkudG9CZVRydXRoeSgpO1xuXG4gICAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oV1JJVEUpLnRoZW4oY29ubmVjdGlvbiA9PiB7XG4gICAgICAgIGV4cGVjdChjb25uZWN0aW9uLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1GJyk7XG4gICAgICAgIGV4cGVjdChwb29sLmhhcygnc2VydmVyLUYnKSkudG9CZVRydXRoeSgpO1xuXG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgndGhyb3dzIHdoZW4gYWxsIHJvdXRlcnMgcmV0dXJuIG5vdGhpbmcgd2hpbGUgZ2V0dGluZyByZWFkIGNvbm5lY3Rpb24nLCBkb25lID0+IHtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXIoXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0zJywgJ3NlcnZlci00J10sXG4gICAgICBbJ3NlcnZlci01JywgJ3NlcnZlci02J10sXG4gICAgICBuZXdQb29sKCksXG4gICAgICBpbnQoMCksIC8vIGV4cGlyZWQgcm91dGluZyB0YWJsZVxuICAgICAge1xuICAgICAgICAnc2VydmVyLTEnOiBudWxsLCAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgICAgJ3NlcnZlci0yJzogbnVsbCAgLy8gcmV0dXJucyBubyByb3V0aW5nIHRhYmxlXG4gICAgICB9XG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihSRUFEKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9FcXVhbChTRVJWSUNFX1VOQVZBSUxBQkxFKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Rocm93cyB3aGVuIGFsbCByb3V0ZXJzIHJldHVybiBub3RoaW5nIHdoaWxlIGdldHRpbmcgd3JpdGUgY29ubmVjdGlvbicsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcihcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTMnLCAnc2VydmVyLTQnXSxcbiAgICAgIFsnc2VydmVyLTUnLCAnc2VydmVyLTYnXSxcbiAgICAgIG5ld1Bvb2woKSxcbiAgICAgIGludCgwKSwgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgICB7XG4gICAgICAgICdzZXJ2ZXItMSc6IG51bGwsIC8vIHJldHVybnMgbm8gcm91dGluZyB0YWJsZVxuICAgICAgICAnc2VydmVyLTInOiBudWxsICAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9FcXVhbChTRVJWSUNFX1VOQVZBSUxBQkxFKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Rocm93cyB3aGVuIGFsbCByb3V0ZXJzIHJldHVybiBpbGxlZ2FsIHJvdXRpbmcgdGFibGVzIHdoaWxlIGdldHRpbmcgcmVhZCBjb25uZWN0aW9uJywgZG9uZSA9PiB7XG4gICAgY29uc3QgbmV3SWxsZWdhbFJvdXRpbmdUYWJsZSA9IG5ld1JvdXRpbmdUYWJsZShcbiAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgIFsnc2VydmVyLUMnLCAnc2VydmVyLUQnXSxcbiAgICAgIFtdIC8vIG5vIHdyaXRlcnMgLSB0YWJsZSBpcyBpbGxlZ2FsIGFuZCBzaG91bGQgYmUgc2tpcHBlZFxuICAgICk7XG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyKFxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItNCddLFxuICAgICAgWydzZXJ2ZXItNScsICdzZXJ2ZXItNiddLFxuICAgICAgbmV3UG9vbCgpLFxuICAgICAgaW50KDApLCAvLyBleHBpcmVkIHJvdXRpbmcgdGFibGVcbiAgICAgIHtcbiAgICAgICAgJ3NlcnZlci0xJzogbmV3SWxsZWdhbFJvdXRpbmdUYWJsZSxcbiAgICAgICAgJ3NlcnZlci0yJzogbmV3SWxsZWdhbFJvdXRpbmdUYWJsZVxuICAgICAgfVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oUkVBRCkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvRXF1YWwoU0VSVklDRV9VTkFWQUlMQUJMRSk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCd0aHJvd3Mgd2hlbiBhbGwgcm91dGVycyByZXR1cm4gaWxsZWdhbCByb3V0aW5nIHRhYmxlcyB3aGlsZSBnZXR0aW5nIHdyaXRlIGNvbm5lY3Rpb24nLCBkb25lID0+IHtcbiAgICBjb25zdCBuZXdJbGxlZ2FsUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgWydzZXJ2ZXItQycsICdzZXJ2ZXItRCddLFxuICAgICAgW10gLy8gbm8gd3JpdGVycyAtIHRhYmxlIGlzIGlsbGVnYWwgYW5kIHNob3VsZCBiZSBza2lwcGVkXG4gICAgKTtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXIoXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0zJywgJ3NlcnZlci00J10sXG4gICAgICBbJ3NlcnZlci01JywgJ3NlcnZlci02J10sXG4gICAgICBuZXdQb29sKCksXG4gICAgICBpbnQoMCksIC8vIGV4cGlyZWQgcm91dGluZyB0YWJsZVxuICAgICAge1xuICAgICAgICAnc2VydmVyLTEnOiBuZXdJbGxlZ2FsUm91dGluZ1RhYmxlLFxuICAgICAgICAnc2VydmVyLTInOiBuZXdJbGxlZ2FsUm91dGluZ1RhYmxlXG4gICAgICB9XG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihXUklURSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvRXF1YWwoU0VSVklDRV9VTkFWQUlMQUJMRSk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCd0aHJvd3Mgd2hlbiBzdGFsZSByb3V0aW5nIHRhYmxlIHdpdGhvdXQgcm91dGVycyB3aGlsZSBnZXR0aW5nIHJlYWQgY29ubmVjdGlvbicsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcihcbiAgICAgIFtdLCAvLyBubyByb3V0ZXJzXG4gICAgICBbJ3NlcnZlci0zJywgJ3NlcnZlci00J10sXG4gICAgICBbJ3NlcnZlci01JywgJ3NlcnZlci02J10sXG4gICAgICBuZXdQb29sKCksXG4gICAgICBpbnQoMCkgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihSRUFEKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9FcXVhbChTRVJWSUNFX1VOQVZBSUxBQkxFKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Rocm93cyB3aGVuIHN0YWxlIHJvdXRpbmcgdGFibGUgd2l0aG91dCByb3V0ZXJzIHdoaWxlIGdldHRpbmcgd3JpdGUgY29ubmVjdGlvbicsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcihcbiAgICAgIFtdLCAvLyBubyByb3V0ZXJzXG4gICAgICBbJ3NlcnZlci0zJywgJ3NlcnZlci00J10sXG4gICAgICBbJ3NlcnZlci01JywgJ3NlcnZlci02J10sXG4gICAgICBuZXdQb29sKCksXG4gICAgICBpbnQoMCkgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihXUklURSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvRXF1YWwoU0VSVklDRV9VTkFWQUlMQUJMRSk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCd1cGRhdGVzIHJvdXRpbmcgdGFibGUgYWZ0ZXIgcmVmcmVzaCcsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHBvb2wgPSBuZXdQb29sKCk7XG4gICAgY29uc3QgdXBkYXRlZFJvdXRpbmdUYWJsZSA9IG5ld1JvdXRpbmdUYWJsZShcbiAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgIFsnc2VydmVyLUMnLCAnc2VydmVyLUQnXSxcbiAgICAgIFsnc2VydmVyLUUnLCAnc2VydmVyLUYnXVxuICAgICk7XG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyKFxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItNCddLFxuICAgICAgWydzZXJ2ZXItNScsICdzZXJ2ZXItNiddLFxuICAgICAgcG9vbCxcbiAgICAgIGludCgwKSwgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgICB7XG4gICAgICAgICdzZXJ2ZXItMSc6IHVwZGF0ZWRSb3V0aW5nVGFibGVcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFJFQUQpLnRoZW4oKCkgPT4ge1xuICAgICAgZXhwZWN0Um91dGluZ1RhYmxlKGxvYWRCYWxhbmNlcixcbiAgICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgICBbJ3NlcnZlci1DJywgJ3NlcnZlci1EJ10sXG4gICAgICAgIFsnc2VydmVyLUUnLCAnc2VydmVyLUYnXVxuICAgICAgKTtcbiAgICAgIGV4cGVjdFBvb2xUb05vdENvbnRhaW4ocG9vbCwgWydzZXJ2ZXItMScsICdzZXJ2ZXItMicsICdzZXJ2ZXItMycsICdzZXJ2ZXItNCcsICdzZXJ2ZXItNScsICdzZXJ2ZXItNiddKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ2ZvcmdldHMgYWxsIHJvdXRlcnMgd2hlbiB0aGV5IGZhaWwgd2hpbGUgYWNxdWlyaW5nIHJlYWQgY29ubmVjdGlvbicsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcihcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInLCAnc2VydmVyLTMnXSxcbiAgICAgIFsnc2VydmVyLTQnLCAnc2VydmVyLTUnXSxcbiAgICAgIFsnc2VydmVyLTYnLCAnc2VydmVyLTcnXSxcbiAgICAgIG5ld1Bvb2woKSxcbiAgICAgIGludCgwKSAvLyBleHBpcmVkIHJvdXRpbmcgdGFibGVcbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFJFQUQpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGV4cGVjdChlcnJvci5jb2RlKS50b0VxdWFsKFNFUlZJQ0VfVU5BVkFJTEFCTEUpO1xuICAgICAgZXhwZWN0Um91dGluZ1RhYmxlKGxvYWRCYWxhbmNlcixcbiAgICAgICAgW10sXG4gICAgICAgIFsnc2VydmVyLTQnLCAnc2VydmVyLTUnXSxcbiAgICAgICAgWydzZXJ2ZXItNicsICdzZXJ2ZXItNyddXG4gICAgICApO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnZm9yZ2V0cyBhbGwgcm91dGVycyB3aGVuIHRoZXkgZmFpbCB3aGlsZSBhY3F1aXJpbmcgd3JpdGUgY29ubmVjdGlvbicsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcihcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInLCAnc2VydmVyLTMnXSxcbiAgICAgIFsnc2VydmVyLTQnLCAnc2VydmVyLTUnXSxcbiAgICAgIFsnc2VydmVyLTYnLCAnc2VydmVyLTcnXSxcbiAgICAgIG5ld1Bvb2woKSxcbiAgICAgIGludCgwKSAvLyBleHBpcmVkIHJvdXRpbmcgdGFibGVcbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9FcXVhbChTRVJWSUNFX1VOQVZBSUxBQkxFKTtcbiAgICAgIGV4cGVjdFJvdXRpbmdUYWJsZShsb2FkQmFsYW5jZXIsXG4gICAgICAgIFtdLFxuICAgICAgICBbJ3NlcnZlci00JywgJ3NlcnZlci01J10sXG4gICAgICAgIFsnc2VydmVyLTYnLCAnc2VydmVyLTcnXVxuICAgICAgKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3VzZXMgc2VlZCByb3V0ZXIgYWRkcmVzcyB3aGVuIGFsbCBleGlzdGluZyByb3V0ZXJzIGZhaWxlZCcsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGlsbGVnYWxSb3V0aW5nVGFibGUgPSBuZXdSb3V0aW5nVGFibGUoXG4gICAgICBbJ3NlcnZlci1BJywgJ3NlcnZlci1CJ10sXG4gICAgICBbJ3NlcnZlci1DJywgJ3NlcnZlci1EJ10sXG4gICAgICBbXSAvLyBubyB3cml0ZXJzIC0gdGFibGUgaXMgaWxsZWdhbCBhbmQgc2hvdWxkIGJlIHNraXBwZWRcbiAgICApO1xuICAgIGNvbnN0IHVwZGF0ZWRSb3V0aW5nVGFibGUgPSBuZXdSb3V0aW5nVGFibGUoXG4gICAgICBbJ3NlcnZlci1BJywgJ3NlcnZlci1CJywgJ3NlcnZlci1DJ10sXG4gICAgICBbJ3NlcnZlci1EJywgJ3NlcnZlci1FJ10sXG4gICAgICBbJ3NlcnZlci1GJywgJ3NlcnZlci1HJ11cbiAgICApO1xuXG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyV2l0aFNlZWRSb3V0ZXIoXG4gICAgICAnc2VydmVyLTAnLCBbJ3NlcnZlci0wJ10sIC8vIHNlZWQgcm91dGVyIGFkZHJlc3MgcmVzb2x2ZXMganVzdCB0byBpdHNlbGZcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInLCAnc2VydmVyLTMnXSxcbiAgICAgIFsnc2VydmVyLTQnLCAnc2VydmVyLTUnXSxcbiAgICAgIFsnc2VydmVyLTYnLCAnc2VydmVyLTcnXSxcbiAgICAgIGludCgwKSwgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgICB7XG4gICAgICAgICdzZXJ2ZXItMSc6IG51bGwsIC8vIHJldHVybnMgbm8gcm91dGluZyB0YWJsZVxuICAgICAgICAnc2VydmVyLTInOiBpbGxlZ2FsUm91dGluZ1RhYmxlLFxuICAgICAgICAnc2VydmVyLTMnOiBudWxsLCAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgICAgJ3NlcnZlci0wJzogdXBkYXRlZFJvdXRpbmdUYWJsZVxuICAgICAgfVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oUkVBRCkudGhlbihjb25uZWN0aW9uMSA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbjEuYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUQnKTtcblxuICAgICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS50aGVuKGNvbm5lY3Rpb24yID0+IHtcbiAgICAgICAgZXhwZWN0KGNvbm5lY3Rpb24yLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1GJyk7XG5cbiAgICAgICAgZXhwZWN0Um91dGluZ1RhYmxlKGxvYWRCYWxhbmNlcixcbiAgICAgICAgICBbJ3NlcnZlci1BJywgJ3NlcnZlci1CJywgJ3NlcnZlci1DJ10sXG4gICAgICAgICAgWydzZXJ2ZXItRCcsICdzZXJ2ZXItRSddLFxuICAgICAgICAgIFsnc2VydmVyLUYnLCAnc2VydmVyLUcnXVxuICAgICAgICApO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3VzZXMgcmVzb2x2ZWQgc2VlZCByb3V0ZXIgYWRkcmVzcyB3aGVuIGFsbCBleGlzdGluZyByb3V0ZXJzIGZhaWxlZCcsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGlsbGVnYWxSb3V0aW5nVGFibGUgPSBuZXdSb3V0aW5nVGFibGUoXG4gICAgICBbJ3NlcnZlci1BJ10sXG4gICAgICBbJ3NlcnZlci1CJ10sXG4gICAgICBbXSAvLyBubyB3cml0ZXJzIC0gdGFibGUgaXMgaWxsZWdhbCBhbmQgc2hvdWxkIGJlIHNraXBwZWRcbiAgICApO1xuICAgIGNvbnN0IHVwZGF0ZWRSb3V0aW5nVGFibGUgPSBuZXdSb3V0aW5nVGFibGUoXG4gICAgICBbJ3NlcnZlci1BJywgJ3NlcnZlci1CJ10sXG4gICAgICBbJ3NlcnZlci1DJywgJ3NlcnZlci1EJ10sXG4gICAgICBbJ3NlcnZlci1FJywgJ3NlcnZlci1GJ11cbiAgICApO1xuXG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyV2l0aFNlZWRSb3V0ZXIoXG4gICAgICAnc2VydmVyLTAnLCBbJ3NlcnZlci0wMSddLCAvLyBzZWVkIHJvdXRlciBhZGRyZXNzIHJlc29sdmVzIHRvIGEgZGlmZmVyZW50IG9uZVxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMicsICdzZXJ2ZXItMyddLFxuICAgICAgWydzZXJ2ZXItNCcsICdzZXJ2ZXItNSddLFxuICAgICAgWydzZXJ2ZXItNicsICdzZXJ2ZXItNyddLFxuICAgICAgaW50KDApLCAvLyBleHBpcmVkIHJvdXRpbmcgdGFibGVcbiAgICAgIHtcbiAgICAgICAgJ3NlcnZlci0xJzogaWxsZWdhbFJvdXRpbmdUYWJsZSxcbiAgICAgICAgJ3NlcnZlci0yJzogaWxsZWdhbFJvdXRpbmdUYWJsZSxcbiAgICAgICAgJ3NlcnZlci0zJzogbnVsbCwgLy8gcmV0dXJucyBubyByb3V0aW5nIHRhYmxlXG4gICAgICAgICdzZXJ2ZXItMDEnOiB1cGRhdGVkUm91dGluZ1RhYmxlXG4gICAgICB9XG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihXUklURSkudGhlbihjb25uZWN0aW9uMSA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbjEuYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUUnKTtcblxuICAgICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFJFQUQpLnRoZW4oY29ubmVjdGlvbjIgPT4ge1xuICAgICAgICBleHBlY3QoY29ubmVjdGlvbjIuYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUMnKTtcblxuICAgICAgICBleHBlY3RSb3V0aW5nVGFibGUobG9hZEJhbGFuY2VyLFxuICAgICAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgICAgICBbJ3NlcnZlci1DJywgJ3NlcnZlci1EJ10sXG4gICAgICAgICAgWydzZXJ2ZXItRScsICdzZXJ2ZXItRiddXG4gICAgICAgICk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgndXNlcyByZXNvbHZlZCBzZWVkIHJvdXRlciBhZGRyZXNzIHRoYXQgcmV0dXJucyBjb3JyZWN0IHJvdXRpbmcgdGFibGUgd2hlbiBhbGwgZXhpc3Rpbmcgcm91dGVycyBmYWlsZWQnLCBkb25lID0+IHtcbiAgICBjb25zdCBpbGxlZ2FsUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgWydzZXJ2ZXItQycsICdzZXJ2ZXItRCddLFxuICAgICAgW10gLy8gbm8gd3JpdGVycyAtIHRhYmxlIGlzIGlsbGVnYWwgYW5kIHNob3VsZCBiZSBza2lwcGVkXG4gICAgKTtcbiAgICBjb25zdCB1cGRhdGVkUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgWydzZXJ2ZXItQyddLFxuICAgICAgWydzZXJ2ZXItRCcsICdzZXJ2ZXItRSddXG4gICAgKTtcblxuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcldpdGhTZWVkUm91dGVyKFxuICAgICAgJ3NlcnZlci0wJywgWydzZXJ2ZXItMDEnLCAnc2VydmVyLTAyJywgJ3NlcnZlci0wMyddLCAvLyBzZWVkIHJvdXRlciBhZGRyZXNzIHJlc29sdmVzIHRvIDMgZGlmZmVyZW50IGFkZHJlc3Nlc1xuICAgICAgWydzZXJ2ZXItMSddLFxuICAgICAgWydzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMyddLFxuICAgICAgaW50KDApLCAvLyBleHBpcmVkIHJvdXRpbmcgdGFibGVcbiAgICAgIHtcbiAgICAgICAgJ3NlcnZlci0xJzogaWxsZWdhbFJvdXRpbmdUYWJsZSxcbiAgICAgICAgJ3NlcnZlci0wMSc6IG51bGwsIC8vIHJldHVybnMgbm8gcm91dGluZyB0YWJsZVxuICAgICAgICAnc2VydmVyLTAyJzogaWxsZWdhbFJvdXRpbmdUYWJsZSxcbiAgICAgICAgJ3NlcnZlci0wMyc6IHVwZGF0ZWRSb3V0aW5nVGFibGVcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS50aGVuKGNvbm5lY3Rpb24xID0+IHtcbiAgICAgIGV4cGVjdChjb25uZWN0aW9uMS5hZGRyZXNzKS50b0VxdWFsKCdzZXJ2ZXItRCcpO1xuXG4gICAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oV1JJVEUpLnRoZW4oY29ubmVjdGlvbjIgPT4ge1xuICAgICAgICBleHBlY3QoY29ubmVjdGlvbjIuYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUUnKTtcblxuICAgICAgICBleHBlY3RSb3V0aW5nVGFibGUobG9hZEJhbGFuY2VyLFxuICAgICAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgICAgICBbJ3NlcnZlci1DJ10sXG4gICAgICAgICAgWydzZXJ2ZXItRCcsICdzZXJ2ZXItRSddXG4gICAgICAgICk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnZmFpbHMgd2hlbiBleGlzdGluZyByb3V0ZXJzIGZhaWwgYW5kIHNlZWQgcm91dGVyIHJldHVybnMgYW4gaW52YWxpZCByb3V0aW5nIHRhYmxlJywgZG9uZSA9PiB7XG4gICAgY29uc3QgZW1wdHlJbGxlZ2FsUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFtdLCBbXSwgW10pO1xuXG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyV2l0aFNlZWRSb3V0ZXIoXG4gICAgICAnc2VydmVyLTAnLCBbJ3NlcnZlci0wJ10sIC8vIHNlZWQgcm91dGVyIGFkZHJlc3MgcmVzb2x2ZXMganVzdCB0byBpdHNlbGZcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInLCAnc2VydmVyLTMnXSxcbiAgICAgIFsnc2VydmVyLTQnLCAnc2VydmVyLTUnXSxcbiAgICAgIFsnc2VydmVyLTYnXSxcbiAgICAgIGludCgwKSwgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgICB7XG4gICAgICAgICdzZXJ2ZXItMSc6IGVtcHR5SWxsZWdhbFJvdXRpbmdUYWJsZSxcbiAgICAgICAgJ3NlcnZlci0yJzogbnVsbCwgLy8gcmV0dXJucyBubyByb3V0aW5nIHRhYmxlXG4gICAgICAgICdzZXJ2ZXItMyc6IG51bGwsIC8vIHJldHVybnMgbm8gcm91dGluZyB0YWJsZVxuICAgICAgICAnc2VydmVyLTAnOiBlbXB0eUlsbGVnYWxSb3V0aW5nVGFibGVcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFJFQUQpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGV4cGVjdChlcnJvci5jb2RlKS50b0VxdWFsKFNFUlZJQ0VfVU5BVkFJTEFCTEUpO1xuXG4gICAgICBleHBlY3RSb3V0aW5nVGFibGUobG9hZEJhbGFuY2VyLFxuICAgICAgICBbJ3NlcnZlci0xJ10sIC8vIG9ubHkgc2VydmVyLTEgaXMgaW4gdGhlIHRhYmxlLCBpdCByZXR1cm5lZCBhIHJvdXRpbmcgdGFibGUgd2hpY2ggdHVybmVkIG91dCB0byBiZSBpbnZhbGlkXG4gICAgICAgIFsnc2VydmVyLTQnLCAnc2VydmVyLTUnXSxcbiAgICAgICAgWydzZXJ2ZXItNiddLFxuICAgICAgKTtcblxuICAgICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGV4cGVjdChlcnJvci5jb2RlKS50b0VxdWFsKFNFUlZJQ0VfVU5BVkFJTEFCTEUpO1xuXG4gICAgICAgIGV4cGVjdFJvdXRpbmdUYWJsZShsb2FkQmFsYW5jZXIsXG4gICAgICAgICAgWydzZXJ2ZXItMSddLCAvLyBvbmx5IHNlcnZlci0xIGlzIGluIHRoZSB0YWJsZSwgaXQgcmV0dXJuZWQgYSByb3V0aW5nIHRhYmxlIHdoaWNoIHR1cm5lZCBvdXQgdG8gYmUgaW52YWxpZFxuICAgICAgICAgIFsnc2VydmVyLTQnLCAnc2VydmVyLTUnXSxcbiAgICAgICAgICBbJ3NlcnZlci02J10sXG4gICAgICAgICk7XG5cbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdmYWlscyB3aGVuIGV4aXN0aW5nIHJvdXRlcnMgZmFpbCBhbmQgcmVzb2x2ZWQgc2VlZCByb3V0ZXIgcmV0dXJucyBhbiBpbnZhbGlkIHJvdXRpbmcgdGFibGUnLCBkb25lID0+IHtcbiAgICBjb25zdCBpbGxlZ2FsUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgWydzZXJ2ZXItQycsICdzZXJ2ZXItRCddLFxuICAgICAgW10gLy8gbm8gd3JpdGVycyAtIHRhYmxlIGlzIGlsbGVnYWwgYW5kIHNob3VsZCBiZSBza2lwcGVkXG4gICAgKTtcblxuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcldpdGhTZWVkUm91dGVyKFxuICAgICAgJ3NlcnZlci0wJywgWydzZXJ2ZXItMDEnXSwgLy8gc2VlZCByb3V0ZXIgYWRkcmVzcyByZXNvbHZlcyB0byBhIGRpZmZlcmVudCBvbmVcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTMnXSxcbiAgICAgIFsnc2VydmVyLTQnXSxcbiAgICAgIGludCgwKSwgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgICB7XG4gICAgICAgICdzZXJ2ZXItMSc6IG51bGwsIC8vIHJldHVybnMgbm8gcm91dGluZyB0YWJsZVxuICAgICAgICAnc2VydmVyLTInOiBpbGxlZ2FsUm91dGluZ1RhYmxlLFxuICAgICAgICAnc2VydmVyLTAxJzogbnVsbCAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9FcXVhbChTRVJWSUNFX1VOQVZBSUxBQkxFKTtcblxuICAgICAgZXhwZWN0Um91dGluZ1RhYmxlKGxvYWRCYWxhbmNlcixcbiAgICAgICAgWydzZXJ2ZXItMiddLCAvLyBvbmx5IHNlcnZlci0yIGlzIGluIHRoZSB0YWJsZSwgaXQgcmV0dXJuZWQgYSByb3V0aW5nIHRhYmxlIHdoaWNoIHR1cm5lZCBvdXQgdG8gYmUgaW52YWxpZFxuICAgICAgICBbJ3NlcnZlci0zJ10sXG4gICAgICAgIFsnc2VydmVyLTQnXSxcbiAgICAgICk7XG5cbiAgICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihSRUFEKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGV4cGVjdChlcnJvci5jb2RlKS50b0VxdWFsKFNFUlZJQ0VfVU5BVkFJTEFCTEUpO1xuXG4gICAgICAgIGV4cGVjdFJvdXRpbmdUYWJsZShsb2FkQmFsYW5jZXIsXG4gICAgICAgICAgWydzZXJ2ZXItMiddLCAvLyBvbmx5IHNlcnZlci0yIGlzIGluIHRoZSB0YWJsZSwgaXQgcmV0dXJuZWQgYSByb3V0aW5nIHRhYmxlIHdoaWNoIHR1cm5lZCBvdXQgdG8gYmUgaW52YWxpZFxuICAgICAgICAgIFsnc2VydmVyLTMnXSxcbiAgICAgICAgICBbJ3NlcnZlci00J10sXG4gICAgICAgICk7XG5cbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdmYWlscyB3aGVuIGV4aXN0aW5nIHJvdXRlcnMgZmFpbCBhbmQgYWxsIHJlc29sdmVkIHNlZWQgcm91dGVycyByZXR1cm4gYW4gaW52YWxpZCByb3V0aW5nIHRhYmxlJywgZG9uZSA9PiB7XG4gICAgY29uc3QgaWxsZWdhbFJvdXRpbmdUYWJsZSA9IG5ld1JvdXRpbmdUYWJsZShcbiAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgIFsnc2VydmVyLUMnLCAnc2VydmVyLUQnXSxcbiAgICAgIFtdIC8vIG5vIHdyaXRlcnMgLSB0YWJsZSBpcyBpbGxlZ2FsIGFuZCBzaG91bGQgYmUgc2tpcHBlZFxuICAgICk7XG5cbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXJXaXRoU2VlZFJvdXRlcihcbiAgICAgICdzZXJ2ZXItMCcsIFsnc2VydmVyLTAyJywgJ3NlcnZlci0wMSddLCAvLyBzZWVkIHJvdXRlciBhZGRyZXNzIHJlc29sdmVzIHRvIDIgZGlmZmVyZW50IGFkZHJlc3Nlc1xuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMicsICdzZXJ2ZXItMyddLFxuICAgICAgWydzZXJ2ZXItNCddLFxuICAgICAgWydzZXJ2ZXItNSddLFxuICAgICAgaW50KDApLCAvLyBleHBpcmVkIHJvdXRpbmcgdGFibGVcbiAgICAgIHtcbiAgICAgICAgJ3NlcnZlci0xJzogbnVsbCwgLy8gcmV0dXJucyBubyByb3V0aW5nIHRhYmxlXG4gICAgICAgICdzZXJ2ZXItMic6IG51bGwsIC8vIHJldHVybnMgbm8gcm91dGluZyB0YWJsZVxuICAgICAgICAnc2VydmVyLTMnOiBudWxsLCAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgICAgJ3NlcnZlci0wMSc6IGlsbGVnYWxSb3V0aW5nVGFibGUsXG4gICAgICAgICdzZXJ2ZXItMDInOiBudWxsIC8vIHJldHVybnMgbm8gcm91dGluZyB0YWJsZVxuICAgICAgfVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oUkVBRCkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvRXF1YWwoU0VSVklDRV9VTkFWQUlMQUJMRSk7XG5cbiAgICAgIGV4cGVjdFJvdXRpbmdUYWJsZShsb2FkQmFsYW5jZXIsXG4gICAgICAgIFtdLCAvLyBhbGwga25vd24gc2VlZCBzZXJ2ZXJzIGZhaWxlZCB0byByZXR1cm4gcm91dGluZyB0YWJsZXMgYW5kIHdlcmUgZm9yZ290dGVuXG4gICAgICAgIFsnc2VydmVyLTQnXSxcbiAgICAgICAgWydzZXJ2ZXItNSddLFxuICAgICAgKTtcblxuICAgICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGV4cGVjdChlcnJvci5jb2RlKS50b0VxdWFsKFNFUlZJQ0VfVU5BVkFJTEFCTEUpO1xuXG4gICAgICAgIGV4cGVjdFJvdXRpbmdUYWJsZShsb2FkQmFsYW5jZXIsXG4gICAgICAgICAgW10sIC8vIGFsbCBrbm93biBzZWVkIHNlcnZlcnMgZmFpbGVkIHRvIHJldHVybiByb3V0aW5nIHRhYmxlcyBhbmQgd2VyZSBmb3Jnb3R0ZW5cbiAgICAgICAgICBbJ3NlcnZlci00J10sXG4gICAgICAgICAgWydzZXJ2ZXItNSddLFxuICAgICAgICApO1xuXG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgndXNlcyBzZWVkIHJvdXRlciB3aGVuIG5vIGV4aXN0aW5nIHJvdXRlcnMnLCBkb25lID0+IHtcbiAgICBjb25zdCB1cGRhdGVkUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgWydzZXJ2ZXItQyddLFxuICAgICAgWydzZXJ2ZXItRCddXG4gICAgKTtcblxuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcldpdGhTZWVkUm91dGVyKFxuICAgICAgJ3NlcnZlci0wJywgWydzZXJ2ZXItMCddLCAvLyBzZWVkIHJvdXRlciBhZGRyZXNzIHJlc29sdmVzIGp1c3QgdG8gaXRzZWxmXG4gICAgICBbXSwgLy8gbm8gcm91dGVycyBpbiB0aGUga25vd24gcm91dGluZyB0YWJsZVxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMyddLFxuICAgICAgSW50ZWdlci5NQVhfVkFMVUUsIC8vIG5vdCBleHBpcmVkXG4gICAgICB7XG4gICAgICAgICdzZXJ2ZXItMCc6IHVwZGF0ZWRSb3V0aW5nVGFibGVcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS50aGVuKGNvbm5lY3Rpb24xID0+IHtcbiAgICAgIGV4cGVjdChjb25uZWN0aW9uMS5hZGRyZXNzKS50b0VxdWFsKCdzZXJ2ZXItRCcpO1xuXG4gICAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oUkVBRCkudGhlbihjb25uZWN0aW9uMiA9PiB7XG4gICAgICAgIGV4cGVjdChjb25uZWN0aW9uMi5hZGRyZXNzKS50b0VxdWFsKCdzZXJ2ZXItQycpO1xuXG4gICAgICAgIGV4cGVjdFJvdXRpbmdUYWJsZShsb2FkQmFsYW5jZXIsXG4gICAgICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgICAgIFsnc2VydmVyLUMnXSxcbiAgICAgICAgICBbJ3NlcnZlci1EJ11cbiAgICAgICAgKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCd1c2VzIHJlc29sdmVkIHNlZWQgcm91dGVyIHdoZW4gbm8gZXhpc3Rpbmcgcm91dGVycycsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZWRSb3V0aW5nVGFibGUgPSBuZXdSb3V0aW5nVGFibGUoXG4gICAgICBbJ3NlcnZlci1BJywgJ3NlcnZlci1CJ10sXG4gICAgICBbJ3NlcnZlci1DJywgJ3NlcnZlci1EJ10sXG4gICAgICBbJ3NlcnZlci1GJywgJ3NlcnZlci1FJ11cbiAgICApO1xuXG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyV2l0aFNlZWRSb3V0ZXIoXG4gICAgICAnc2VydmVyLTAnLCBbJ3NlcnZlci0wMSddLCAvLyBzZWVkIHJvdXRlciBhZGRyZXNzIHJlc29sdmVzIHRvIGEgZGlmZmVyZW50IG9uZVxuICAgICAgW10sIC8vIG5vIHJvdXRlcnMgaW4gdGhlIGtub3duIHJvdXRpbmcgdGFibGVcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTMnLCAnc2VydmVyLTQnXSxcbiAgICAgIEludGVnZXIuTUFYX1ZBTFVFLCAvLyBub3QgZXhwaXJlZFxuICAgICAge1xuICAgICAgICAnc2VydmVyLTAxJzogdXBkYXRlZFJvdXRpbmdUYWJsZVxuICAgICAgfVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oUkVBRCkudGhlbihjb25uZWN0aW9uMSA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbjEuYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUMnKTtcblxuICAgICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS50aGVuKGNvbm5lY3Rpb24yID0+IHtcbiAgICAgICAgZXhwZWN0KGNvbm5lY3Rpb24yLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1GJyk7XG5cbiAgICAgICAgZXhwZWN0Um91dGluZ1RhYmxlKGxvYWRCYWxhbmNlcixcbiAgICAgICAgICBbJ3NlcnZlci1BJywgJ3NlcnZlci1CJ10sXG4gICAgICAgICAgWydzZXJ2ZXItQycsICdzZXJ2ZXItRCddLFxuICAgICAgICAgIFsnc2VydmVyLUYnLCAnc2VydmVyLUUnXVxuICAgICAgICApO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3VzZXMgcmVzb2x2ZWQgc2VlZCByb3V0ZXIgdGhhdCByZXR1cm5zIGNvcnJlY3Qgcm91dGluZyB0YWJsZSB3aGVuIG5vIGV4aXN0aW5nIHJvdXRlcnMgZXhpc3QnLCBkb25lID0+IHtcbiAgICBjb25zdCBpbGxlZ2FsUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQSddLFxuICAgICAgWydzZXJ2ZXItQiddLFxuICAgICAgW10gLy8gbm8gd3JpdGVycyAtIHRhYmxlIGlzIGlsbGVnYWwgYW5kIHNob3VsZCBiZSBza2lwcGVkXG4gICAgKTtcbiAgICBjb25zdCB1cGRhdGVkUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQicsICdzZXJ2ZXItQyddLFxuICAgICAgWydzZXJ2ZXItRCcsICdzZXJ2ZXItRSddLFxuICAgICAgWydzZXJ2ZXItRiddXG4gICAgKTtcblxuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcldpdGhTZWVkUm91dGVyKFxuICAgICAgJ3NlcnZlci0wJywgWydzZXJ2ZXItMDInLCAnc2VydmVyLTAxJywgJ3NlcnZlci0wMyddLCAvLyBzZWVkIHJvdXRlciBhZGRyZXNzIHJlc29sdmVzIHRvIDMgZGlmZmVyZW50IGFkZHJlc3Nlc1xuICAgICAgW10sIC8vIG5vIHJvdXRlcnMgaW4gdGhlIGtub3duIHJvdXRpbmcgdGFibGVcbiAgICAgIFsnc2VydmVyLTEnXSxcbiAgICAgIFsnc2VydmVyLTInLCAnc2VydmVyLTMnXSxcbiAgICAgIEludGVnZXIuTUFYX1ZBTFVFLCAvLyBub3QgZXhwaXJlZFxuICAgICAge1xuICAgICAgICAnc2VydmVyLTAxJzogbnVsbCxcbiAgICAgICAgJ3NlcnZlci0wMic6IGlsbGVnYWxSb3V0aW5nVGFibGUsXG4gICAgICAgICdzZXJ2ZXItMDMnOiB1cGRhdGVkUm91dGluZ1RhYmxlXG4gICAgICB9XG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihXUklURSkudGhlbihjb25uZWN0aW9uMSA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbjEuYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUYnKTtcblxuICAgICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFJFQUQpLnRoZW4oY29ubmVjdGlvbjIgPT4ge1xuICAgICAgICBleHBlY3QoY29ubmVjdGlvbjIuYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUQnKTtcblxuICAgICAgICBleHBlY3RSb3V0aW5nVGFibGUobG9hZEJhbGFuY2VyLFxuICAgICAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInLCAnc2VydmVyLUMnXSxcbiAgICAgICAgICBbJ3NlcnZlci1EJywgJ3NlcnZlci1FJ10sXG4gICAgICAgICAgWydzZXJ2ZXItRiddXG4gICAgICAgICk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnaWdub3JlcyBhbHJlYWR5IHByb2JlZCByb3V0ZXJzIGFmdGVyIHNlZWQgcm91dGVyIHJlc29sdXRpb24nLCBkb25lID0+IHtcbiAgICBjb25zdCBpbGxlZ2FsUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQSddLFxuICAgICAgWydzZXJ2ZXItQiddLFxuICAgICAgW10gLy8gbm8gd3JpdGVycyAtIHRhYmxlIGlzIGlsbGVnYWwgYW5kIHNob3VsZCBiZSBza2lwcGVkXG4gICAgKTtcbiAgICBjb25zdCB1cGRhdGVkUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgWydzZXJ2ZXItQycsICdzZXJ2ZXItRCddLFxuICAgICAgWydzZXJ2ZXItRScsICdzZXJ2ZXItRiddXG4gICAgKTtcblxuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcldpdGhTZWVkUm91dGVyKFxuICAgICAgJ3NlcnZlci0wJywgWydzZXJ2ZXItMScsICdzZXJ2ZXItMDEnLCAnc2VydmVyLTInLCAnc2VydmVyLTAyJ10sIC8vIHNlZWQgcm91dGVyIGFkZHJlc3MgcmVzb2x2ZXMgdG8gNCBkaWZmZXJlbnQgYWRkcmVzc2VzXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0zJywgJ3NlcnZlci00J10sXG4gICAgICBbJ3NlcnZlci01JywgJ3NlcnZlci02J10sXG4gICAgICBpbnQoMCksIC8vIGV4cGlyZWQgcm91dGluZyB0YWJsZVxuICAgICAge1xuICAgICAgICAnc2VydmVyLTEnOiBudWxsLFxuICAgICAgICAnc2VydmVyLTAxJzogbnVsbCxcbiAgICAgICAgJ3NlcnZlci0yJzogaWxsZWdhbFJvdXRpbmdUYWJsZSxcbiAgICAgICAgJ3NlcnZlci0wMic6IHVwZGF0ZWRSb3V0aW5nVGFibGVcbiAgICAgIH1cbiAgICApO1xuICAgIGNvbnN0IHVzZWRSb3V0ZXJBcnJheXMgPSBbXTtcbiAgICBzZXR1cExvYWRCYWxhbmNlclRvUmVtZW1iZXJSb3V0ZXJzKGxvYWRCYWxhbmNlciwgdXNlZFJvdXRlckFycmF5cyk7XG5cbiAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oUkVBRCkudGhlbihjb25uZWN0aW9uMSA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbjEuYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUMnKTtcblxuICAgICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS50aGVuKGNvbm5lY3Rpb24yID0+IHtcbiAgICAgICAgZXhwZWN0KGNvbm5lY3Rpb24yLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1FJyk7XG5cbiAgICAgICAgLy8gdHdvIHNldHMgb2Ygcm91dGVycyBwcm9iZWQ6XG4gICAgICAgIC8vIDEpIGV4aXN0aW5nIHJvdXRlcnMgJ3NlcnZlci0xJyAmICdzZXJ2ZXItMidcbiAgICAgICAgLy8gMikgcmVzb2x2ZWQgcm91dGVycyAnc2VydmVyLTAxJyAmICdzZXJ2ZXItMDInXG4gICAgICAgIGV4cGVjdCh1c2VkUm91dGVyQXJyYXlzLmxlbmd0aCkudG9FcXVhbCgyKTtcbiAgICAgICAgZXhwZWN0KHVzZWRSb3V0ZXJBcnJheXNbMF0pLnRvRXF1YWwoWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddKTtcbiAgICAgICAgZXhwZWN0KHVzZWRSb3V0ZXJBcnJheXNbMV0pLnRvRXF1YWwoWydzZXJ2ZXItMDEnLCAnc2VydmVyLTAyJ10pO1xuXG4gICAgICAgIGV4cGVjdFJvdXRpbmdUYWJsZShsb2FkQmFsYW5jZXIsXG4gICAgICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgICAgIFsnc2VydmVyLUMnLCAnc2VydmVyLUQnXSxcbiAgICAgICAgICBbJ3NlcnZlci1FJywgJ3NlcnZlci1GJ11cbiAgICAgICAgKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG59KTtcblxuZnVuY3Rpb24gbmV3RGlyZWN0Q29ubmVjdGlvblByb3ZpZGVyKGFkZHJlc3MsIHBvb2wpIHtcbiAgcmV0dXJuIG5ldyBEaXJlY3RDb25uZWN0aW9uUHJvdmlkZXIoYWRkcmVzcywgcG9vbCwgTk9fT1BfRFJJVkVSX0NBTExCQUNLKTtcbn1cblxuZnVuY3Rpb24gbmV3TG9hZEJhbGFuY2VyKHJvdXRlcnMsIHJlYWRlcnMsIHdyaXRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgcG9vbCA9IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJhdGlvblRpbWUgPSBJbnRlZ2VyLk1BWF9WQUxVRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJUb1JvdXRpbmdUYWJsZSA9IHt9KSB7XG4gIGNvbnN0IHNlZWRSb3V0ZXIgPSAnc2VydmVyLW5vbi1leGlzdGluZy1zZWVkLXJvdXRlcic7XG4gIHJldHVybiBuZXdMb2FkQmFsYW5jZXJXaXRoU2VlZFJvdXRlcihzZWVkUm91dGVyLCBbc2VlZFJvdXRlcl0sIHJvdXRlcnMsIHJlYWRlcnMsIHdyaXRlcnMsIGV4cGlyYXRpb25UaW1lLFxuICAgIHJvdXRlclRvUm91dGluZ1RhYmxlLCBwb29sKTtcbn1cblxuZnVuY3Rpb24gbmV3TG9hZEJhbGFuY2VyV2l0aFNlZWRSb3V0ZXIoc2VlZFJvdXRlciwgc2VlZFJvdXRlclJlc29sdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVycywgcmVhZGVycywgd3JpdGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25UaW1lID0gSW50ZWdlci5NQVhfVkFMVUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJUb1JvdXRpbmdUYWJsZSA9IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvblBvb2wgPSBudWxsKSB7XG4gIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ldyBMb2FkQmFsYW5jZXIoc2VlZFJvdXRlciwgY29ubmVjdGlvblBvb2wgfHwgbmV3UG9vbCgpLCBOT19PUF9EUklWRVJfQ0FMTEJBQ0spO1xuICBsb2FkQmFsYW5jZXIuX3JvdXRpbmdUYWJsZSA9IG5ldyBSb3V0aW5nVGFibGUoXG4gICAgbmV3IFJvdW5kUm9iaW5BcnJheShyb3V0ZXJzKSxcbiAgICBuZXcgUm91bmRSb2JpbkFycmF5KHJlYWRlcnMpLFxuICAgIG5ldyBSb3VuZFJvYmluQXJyYXkod3JpdGVycyksXG4gICAgZXhwaXJhdGlvblRpbWVcbiAgKTtcbiAgbG9hZEJhbGFuY2VyLl9yZWRpc2NvdmVyeSA9IG5ldyBGYWtlUmVkaXNjb3Zlcnkocm91dGVyVG9Sb3V0aW5nVGFibGUpO1xuICBsb2FkQmFsYW5jZXIuX2hvc3ROYW1lUmVzb2x2ZXIgPSBuZXcgRmFrZURuc1Jlc29sdmVyKHNlZWRSb3V0ZXJSZXNvbHZlZCk7XG4gIHJldHVybiBsb2FkQmFsYW5jZXI7XG59XG5cbmZ1bmN0aW9uIG5ld1JvdXRpbmdUYWJsZShyb3V0ZXJzLCByZWFkZXJzLCB3cml0ZXJzLCBleHBpcmF0aW9uVGltZSA9IEludGVnZXIuTUFYX1ZBTFVFKSB7XG4gIHJldHVybiBuZXcgUm91dGluZ1RhYmxlKFxuICAgIG5ldyBSb3VuZFJvYmluQXJyYXkocm91dGVycyksXG4gICAgbmV3IFJvdW5kUm9iaW5BcnJheShyZWFkZXJzKSxcbiAgICBuZXcgUm91bmRSb2JpbkFycmF5KHdyaXRlcnMpLFxuICAgIGV4cGlyYXRpb25UaW1lXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNldHVwTG9hZEJhbGFuY2VyVG9SZW1lbWJlclJvdXRlcnMobG9hZEJhbGFuY2VyLCByb3V0ZXJzQXJyYXkpIHtcbiAgY29uc3Qgb3JpZ2luYWxGZXRjaCA9IGxvYWRCYWxhbmNlci5fZmV0Y2hOZXdSb3V0aW5nVGFibGUuYmluZChsb2FkQmFsYW5jZXIpO1xuICBjb25zdCByZW1lbWJlcmluZ0ZldGNoID0gKHJvdXRlckFkZHJlc3Nlcywgcm91dGluZ1RhYmxlKSA9PiB7XG4gICAgcm91dGVyc0FycmF5LnB1c2gocm91dGVyQWRkcmVzc2VzKTtcbiAgICByZXR1cm4gb3JpZ2luYWxGZXRjaChyb3V0ZXJBZGRyZXNzZXMsIHJvdXRpbmdUYWJsZSk7XG4gIH07XG4gIGxvYWRCYWxhbmNlci5fZmV0Y2hOZXdSb3V0aW5nVGFibGUgPSByZW1lbWJlcmluZ0ZldGNoO1xufVxuXG5mdW5jdGlvbiBuZXdQb29sKCkge1xuICByZXR1cm4gbmV3IFBvb2woRmFrZUNvbm5lY3Rpb24uY3JlYXRlKTtcbn1cblxuZnVuY3Rpb24gZXhwZWN0Um91dGluZ1RhYmxlKGxvYWRCYWxhbmNlciwgcm91dGVycywgcmVhZGVycywgd3JpdGVycykge1xuICBleHBlY3QobG9hZEJhbGFuY2VyLl9yb3V0aW5nVGFibGUucm91dGVycy50b0FycmF5KCkpLnRvRXF1YWwocm91dGVycyk7XG4gIGV4cGVjdChsb2FkQmFsYW5jZXIuX3JvdXRpbmdUYWJsZS5yZWFkZXJzLnRvQXJyYXkoKSkudG9FcXVhbChyZWFkZXJzKTtcbiAgZXhwZWN0KGxvYWRCYWxhbmNlci5fcm91dGluZ1RhYmxlLndyaXRlcnMudG9BcnJheSgpKS50b0VxdWFsKHdyaXRlcnMpO1xufVxuXG5mdW5jdGlvbiBleHBlY3RQb29sVG9Db250YWluKHBvb2wsIGFkZHJlc3Nlcykge1xuICBhZGRyZXNzZXMuZm9yRWFjaChhZGRyZXNzID0+IHtcbiAgICBleHBlY3QocG9vbC5oYXMoYWRkcmVzcykpLnRvQmVUcnV0aHkoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4cGVjdFBvb2xUb05vdENvbnRhaW4ocG9vbCwgYWRkcmVzc2VzKSB7XG4gIGFkZHJlc3Nlcy5mb3JFYWNoKGFkZHJlc3MgPT4ge1xuICAgIGV4cGVjdChwb29sLmhhcyhhZGRyZXNzKSkudG9CZUZhbHN5KCk7XG4gIH0pO1xufVxuXG5jbGFzcyBGYWtlQ29ubmVjdGlvbiB7XG5cbiAgY29uc3RydWN0b3IoYWRkcmVzcywgcmVsZWFzZSkge1xuICAgIHRoaXMuYWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgdGhpcy5yZWxlYXNlID0gcmVsZWFzZTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGUoYWRkcmVzcywgcmVsZWFzZSkge1xuICAgIHJldHVybiBuZXcgRmFrZUNvbm5lY3Rpb24oYWRkcmVzcywgcmVsZWFzZSk7XG4gIH1cbn1cblxuY2xhc3MgRmFrZVJlZGlzY292ZXJ5IHtcblxuICBjb25zdHJ1Y3Rvcihyb3V0ZXJUb1JvdXRpbmdUYWJsZSkge1xuICAgIHRoaXMuX3JvdXRlclRvUm91dGluZ1RhYmxlID0gcm91dGVyVG9Sb3V0aW5nVGFibGU7XG4gIH1cblxuICBsb29rdXBSb3V0aW5nVGFibGVPblJvdXRlcihpZ25vcmVkLCByb3V0ZXIpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91dGVyVG9Sb3V0aW5nVGFibGVbcm91dGVyXTtcbiAgfVxufVxuXG5jbGFzcyBGYWtlRG5zUmVzb2x2ZXIge1xuXG4gIGNvbnN0cnVjdG9yKGFkZHJlc3Nlcykge1xuICAgIHRoaXMuX2FkZHJlc3NlcyA9IGFkZHJlc3NlcztcbiAgfVxuXG4gIHJlc29sdmUoc2VlZFJvdXRlcikge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYWRkcmVzc2VzID8gdGhpcy5fYWRkcmVzc2VzIDogW3NlZWRSb3V0ZXJdKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCAqIGFzIER1bW15Q2hhbm5lbCBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZXJuYWwvY2gtZHVtbXknO1xuaW1wb3J0IHtjb25uZWN0LCBDb25uZWN0aW9ufSBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZXJuYWwvY29ubmVjdG9yJztcbmltcG9ydCB7UGFja2VyfSBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZXJuYWwvcGFja3N0cmVhbSc7XG5pbXBvcnQge0NodW5rZXJ9IGZyb20gJy4uLy4uL3NyYy92MS9pbnRlcm5hbC9jaHVua2luZyc7XG5pbXBvcnQge2FsbG9jfSBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZXJuYWwvYnVmJztcbmltcG9ydCB7TmVvNGpFcnJvcn0gZnJvbSAnLi4vLi4vc3JjL3YxL2Vycm9yJztcblxuZGVzY3JpYmUoJ2Nvbm5lY3RvcicsICgpID0+IHtcblxuICBpdCgnc2hvdWxkIHJlYWQvd3JpdGUgYmFzaWMgbWVzc2FnZXMnLCBkb25lID0+IHtcbiAgICAvLyBHaXZlblxuICAgIGNvbnN0IGNvbm4gPSBjb25uZWN0KFwiYm9sdDovL2xvY2FsaG9zdFwiKTtcblxuICAgIC8vIFdoZW5cbiAgICBjb25uLmluaXRpYWxpemUoXCJteWRyaXZlci8wLjAuMFwiLCB7c2NoZW1lOiBcImJhc2ljXCIsIHByaW5jaXBhbDogXCJuZW80alwiLCBjcmVkZW50aWFsczogXCJuZW80alwifSwge1xuICAgICAgb25Db21wbGV0ZWQ6IG1zZyA9PiB7XG4gICAgICAgIGV4cGVjdChtc2cpLm5vdC50b0JlTnVsbCgpO1xuICAgICAgICBjb25uLmNsb3NlKCk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sXG4gICAgICBvbkVycm9yOiBjb25zb2xlLmxvZ1xuICAgIH0pO1xuICAgIGNvbm4uc3luYygpO1xuXG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0cmlldmUgc3RyZWFtJywgZG9uZSA9PiB7XG4gICAgLy8gR2l2ZW5cbiAgICBjb25zdCBjb25uID0gY29ubmVjdChcImJvbHQ6Ly9sb2NhbGhvc3RcIik7XG5cbiAgICAvLyBXaGVuXG4gICAgY29uc3QgcmVjb3JkcyA9IFtdO1xuICAgIGNvbm4uaW5pdGlhbGl6ZShcIm15ZHJpdmVyLzAuMC4wXCIsIHtzY2hlbWU6IFwiYmFzaWNcIiwgcHJpbmNpcGFsOiBcIm5lbzRqXCIsIGNyZWRlbnRpYWxzOiBcIm5lbzRqXCJ9KTtcbiAgICBjb25uLnJ1bihcIlJFVFVSTiAxLjBcIiwge30pO1xuICAgIGNvbm4ucHVsbEFsbCh7XG4gICAgICBvbk5leHQ6IHJlY29yZCA9PiB7XG4gICAgICAgIHJlY29yZHMucHVzaChyZWNvcmQpO1xuICAgICAgfSxcbiAgICAgIG9uQ29tcGxldGVkOiAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZWNvcmRzWzBdWzBdKS50b0JlKDEpO1xuICAgICAgICBjb25uLmNsb3NlKCk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25uLnN5bmMoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB1c2UgRHVtbXlDaGFubmVsIHRvIHJlYWQgd2hhdCBnZXRzIHdyaXR0ZW4nLCBkb25lID0+IHtcbiAgICAvLyBHaXZlblxuICAgIGNvbnN0IG9ic2VydmVyID0gRHVtbXlDaGFubmVsLm9ic2VydmVyO1xuICAgIGNvbnN0IGNvbm4gPSBjb25uZWN0KFwiYm9sdDovL2xvY2FsaG9zdFwiLCB7Y2hhbm5lbDogRHVtbXlDaGFubmVsLmNoYW5uZWx9KTtcblxuICAgIC8vIFdoZW5cbiAgICBjb25uLmluaXRpYWxpemUoXCJteWRyaXZlci8wLjAuMFwiLCB7c2NoZW1lOiBcImJhc2ljXCIsIHByaW5jaXBhbDogXCJuZW80alwiLCBjcmVkZW50aWFsczogXCJuZW80alwifSk7XG4gICAgY29ubi5ydW4oXCJSRVRVUk4gMVwiLCB7fSk7XG4gICAgY29ubi5zeW5jKCk7XG4gICAgZXhwZWN0KG9ic2VydmVyLmluc3RhbmNlLnRvSGV4KCkpLnRvQmUoJzYwIDYwIGIwIDE3IDAwIDAwIDAwIDAxIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDQxIGIyIDAxIDhlIDZkIDc5IDY0IDcyIDY5IDc2IDY1IDcyIDJmIDMwIDJlIDMwIDJlIDMwIGEzIDg2IDczIDYzIDY4IDY1IDZkIDY1IDg1IDYyIDYxIDczIDY5IDYzIDg5IDcwIDcyIDY5IDZlIDYzIDY5IDcwIDYxIDZjIDg1IDZlIDY1IDZmIDM0IDZhIDhiIDYzIDcyIDY1IDY0IDY1IDZlIDc0IDY5IDYxIDZjIDczIDg1IDZlIDY1IDZmIDM0IDZhIDAwIDAwIDAwIDBjIGIyIDEwIDg4IDUyIDQ1IDU0IDU1IDUyIDRlIDIwIDMxIGEwIDAwIDAwICcpO1xuICAgIGRvbmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwcm92aWRlIGVycm9yIG1lc3NhZ2Ugd2hlbiBjb25uZWN0aW5nIHRvIGh0dHAtcG9ydCcsIGRvbmUgPT4ge1xuICAgIC8vIEdpdmVuXG4gICAgY29uc3QgY29ubiA9IGNvbm5lY3QoXCJib2x0Oi8vbG9jYWxob3N0Ojc0NzRcIiwge2VuY3J5cHRlZDogZmFsc2V9KTtcblxuICAgIC8vIFdoZW5cbiAgICBjb25uLmluaXRpYWxpemUoXCJteWRyaXZlci8wLjAuMFwiLCB7c2NoZW1lOiBcImJhc2ljXCIsIHByaW5jaXBhbDogXCJuZW80alwiLCBjcmVkZW50aWFsczogXCJuZW80alwifSwge1xuICAgICAgb25Db21wbGV0ZWQ6IG1zZyA9PiB7XG4gICAgICB9LFxuICAgICAgb25FcnJvcjogZXJyID0+IHtcbiAgICAgICAgLy9vbmx5IG5vZGUgZ2V0cyB0aGUgcHJldHR5IGVycm9yIG1lc3NhZ2VcbiAgICAgICAgaWYgKHJlcXVpcmUoJy4uLy4uL2xpYi92MS9pbnRlcm5hbC9jaC1ub2RlLmpzJykuYXZhaWxhYmxlKSB7XG4gICAgICAgICAgZXhwZWN0KGVyci5tZXNzYWdlKS50b0JlKFwiU2VydmVyIHJlc3BvbmRlZCBIVFRQLiBNYWtlIHN1cmUgeW91IGFyZSBub3QgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gdGhlIGh0dHAgZW5kcG9pbnQgXCIgK1xuICAgICAgICAgICAgXCIoSFRUUCBkZWZhdWx0cyB0byBwb3J0IDc0NzQgd2hlcmVhcyBCT0xUIGRlZmF1bHRzIHRvIHBvcnQgNzY4NylcIik7XG4gICAgICAgIH1cbiAgICAgICAgZG9uZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbm4uc3luYygpO1xuXG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY29udmVydCBmYWlsdXJlIG1lc3NhZ2VzIHRvIGVycm9ycycsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGNoYW5uZWwgPSBuZXcgRHVtbXlDaGFubmVsLmNoYW5uZWw7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKGNoYW5uZWwsICdib2x0Oi8vbG9jYWxob3N0Jyk7XG5cbiAgICBjb25zdCBlcnJvckNvZGUgPSAnTmVvLkNsaWVudEVycm9yLlNjaGVtYS5Db25zdHJhaW50VmFsaWRhdGlvbkZhaWxlZCc7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gJ05vZGUgMCBhbHJlYWR5IGV4aXN0cyB3aXRoIGxhYmVsIFVzZXIgYW5kIHByb3BlcnR5IFwiZW1haWxcIj1bam9obkBkb2UuY29tXSc7XG5cbiAgICBjb25uZWN0aW9uLl9xdWV1ZU9ic2VydmVyKHtcbiAgICAgIG9uRXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgZXhwZWN0TmVvNGpFcnJvcihlcnJvciwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjaGFubmVsLm9ubWVzc2FnZShwYWNrZWRIYW5kc2hha2VNZXNzYWdlKCkpO1xuICAgIGNoYW5uZWwub25tZXNzYWdlKHBhY2tlZEZhaWx1cmVNZXNzYWdlKGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHBhY2tlZEhhbmRzaGFrZU1lc3NhZ2UoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYWxsb2MoNCk7XG4gICAgcmVzdWx0LnB1dEludDMyKDAsIDEpO1xuICAgIHJlc3VsdC5yZXNldCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBwYWNrZWRGYWlsdXJlTWVzc2FnZShjb2RlLCBtZXNzYWdlKSB7XG4gICAgY29uc3QgY2hhbm5lbCA9IG5ldyBEdW1teUNoYW5uZWwuY2hhbm5lbDtcbiAgICBjb25zdCBjaHVua2VyID0gbmV3IENodW5rZXIoY2hhbm5lbCk7XG4gICAgY29uc3QgcGFja2VyID0gbmV3IFBhY2tlcihjaHVua2VyKTtcbiAgICBwYWNrZXIucGFja1N0cnVjdCgweDdGLCBbcGFja2VyLnBhY2thYmxlKHtjb2RlOiBjb2RlLCBtZXNzYWdlOiBtZXNzYWdlfSldKTtcbiAgICBjaHVua2VyLm1lc3NhZ2VCb3VuZGFyeSgpO1xuICAgIGNodW5rZXIuZmx1c2goKTtcbiAgICBjb25zdCBkYXRhID0gY2hhbm5lbC50b0J1ZmZlcigpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGFsbG9jKGRhdGEubGVuZ3RoKTtcbiAgICByZXN1bHQucHV0Qnl0ZXMoMCwgZGF0YSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cGVjdE5lbzRqRXJyb3IoZXJyb3IsIGV4cGVjdGVkQ29kZSwgZXhwZWN0ZWRNZXNzYWdlKSB7XG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pLnRvVGhyb3cobmV3IE5lbzRqRXJyb3IoZXhwZWN0ZWRNZXNzYWdlLCBleHBlY3RlZENvZGUpKTtcbiAgfVxuXG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgbGlrZSBhIG1vY2sgb2Yge0BsaW5rIENvbm5lY3Rpb259IHRoYXQgdHJhY2tzIGludm9jYXRpb25zIGNvdW50LlxuICogSXQgdHJpZXMgdG8gbWFpbnRhaW4gc2FtZSBcImludGVyZmFjZVwiIGFzIHtAbGluayBDb25uZWN0aW9ufS5cbiAqIEl0IGNvdWxkIGJlIHJlcGxhY2VkIHdpdGggYSBwcm9wZXIgbW9jayBieSBhIGxpYnJhcnkgbGlrZSB0ZXN0ZG91YmxlLlxuICogQXQgdGhlIHRpbWUgb2Ygd3JpdGluZyBzdWNoIGxpYnJhcmllcyByZXF1aXJlIHtAbGluayBQcm94eX0gc3VwcG9ydCBidXQgYnJvd3NlciB0ZXN0cyBleGVjdXRlIGluXG4gKiBQaGFudG9tSlMgd2hpY2ggZG9lcyBub3Qgc3VwcG9ydCBwcm94aWVzLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGYWtlQ29ubmVjdGlvbiB7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5yZXNldEludm9rZWQgPSAwO1xuICAgIHRoaXMucmVzZXRBc3luY0ludm9rZWQgPSAwO1xuICAgIHRoaXMuc3luY0ludm9rZWQgPSAwO1xuICAgIHRoaXMucmVsZWFzZUludm9rZWQgPSAwO1xuICB9XG5cbiAgcnVuKCkge1xuICB9XG5cbiAgZGlzY2FyZEFsbCgpIHtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMucmVzZXRJbnZva2VkKys7XG4gIH1cblxuICByZXNldEFzeW5jKCkge1xuICAgIHRoaXMucmVzZXRBc3luY0ludm9rZWQrKztcbiAgfVxuXG4gIHN5bmMoKSB7XG4gICAgdGhpcy5zeW5jSW52b2tlZCsrO1xuICB9XG5cbiAgX3JlbGVhc2UoKSB7XG4gICAgdGhpcy5yZWxlYXNlSW52b2tlZCsrO1xuICB9XG5cbiAgaXNSZWxlYXNlZE9uY2VPblNlc3Npb25DbG9zZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlbGVhc2VkT25TZXNzaW9uQ2xvc2VUaW1lcygxKTtcbiAgfVxuXG4gIGlzUmVsZWFzZWRPblNlc3Npb25DbG9zZVRpbWVzKHRpbWVzKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzZXRBc3luY0ludm9rZWQgPT09IHRpbWVzICYmXG4gICAgICB0aGlzLnJlc2V0SW52b2tlZCA9PT0gMCAmJlxuICAgICAgdGhpcy5zeW5jSW52b2tlZCA9PT0gdGltZXMgJiZcbiAgICAgIHRoaXMucmVsZWFzZUludm9rZWQgPT09IHRpbWVzO1xuICB9XG5cbiAgaXNOZXZlclJlbGVhc2VkKCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVsZWFzZWRUaW1lcygwKTtcbiAgfVxuXG4gIGlzUmVsZWFzZWRPbmNlKCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVsZWFzZWRUaW1lcygxKTtcbiAgfVxuXG4gIGlzUmVsZWFzZWRUaW1lcyh0aW1lcykge1xuICAgIHJldHVybiB0aGlzLnJlc2V0QXN5bmNJbnZva2VkID09PSAwICYmXG4gICAgICB0aGlzLnJlc2V0SW52b2tlZCA9PT0gdGltZXMgJiZcbiAgICAgIHRoaXMuc3luY0ludm9rZWQgPT09IHRpbWVzICYmXG4gICAgICB0aGlzLnJlbGVhc2VJbnZva2VkID09PSB0aW1lcztcbiAgfVxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgR2V0U2VydmVyc1V0aWwgZnJvbSBcIi4uLy4uL3NyYy92MS9pbnRlcm5hbC9nZXQtc2VydmVycy11dGlsXCI7XG5pbXBvcnQgUmVjb3JkIGZyb20gXCIuLi8uLi9zcmMvdjEvcmVjb3JkXCI7XG5pbXBvcnQgSW50ZWdlciwge2ludH0gZnJvbSBcIi4uLy4uL3NyYy92MS9pbnRlZ2VyXCI7XG5pbXBvcnQge25ld0Vycm9yLCBQUk9UT0NPTF9FUlJPUiwgU0VSVklDRV9VTkFWQUlMQUJMRSwgU0VTU0lPTl9FWFBJUkVEfSBmcm9tIFwiLi4vLi4vc3JjL3YxL2Vycm9yXCI7XG5pbXBvcnQgbG9sZXggZnJvbSBcImxvbGV4XCI7XG5cbmNvbnN0IFJPVVRFUl9BRERSRVNTID0gJ2JvbHQrcm91dGluZzovL3Rlc3Qucm91dGVyLmNvbSc7XG5cbmRlc2NyaWJlKCdnZXQtc2VydmVycy11dGlsJywgKCkgPT4ge1xuXG4gIGxldCBjbG9jaztcblxuICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgIGNsb2NrID0gbG9sZXguaW5zdGFsbCgpO1xuICB9KTtcblxuICBhZnRlckFsbCgoKSA9PiB7XG4gICAgY2xvY2sudW5pbnN0YWxsKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIHJldHJpZXZlZCByZWNvcmRzIHdoZW4gcXVlcnkgc3VjY2VlZHMnLCBkb25lID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gRmFrZVNlc3Npb24uc3VjY2Vzc2Z1bCh7cmVjb3JkczogWydmb28nLCAnYmFyJywgJ2JheiddfSk7XG5cbiAgICBjYWxsR2V0U2VydmVycyhzZXNzaW9uKS50aGVuKHJlY29yZHMgPT4ge1xuICAgICAgZXhwZWN0KHJlY29yZHMpLnRvRXF1YWwoWydmb28nLCAnYmFyJywgJ2JheiddKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KS5jYXRjaChjb25zb2xlLmxvZyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY2xvc2Ugc2Vzc2lvbiB3aGVuIHF1ZXJ5IHN1Y2NlZWRzJywgZG9uZSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IEZha2VTZXNzaW9uLnN1Y2Nlc3NmdWwoe3JlY29yZHM6IFsnZm9vJywgJ2JhcicsICdiYXonXX0pO1xuXG4gICAgY2FsbEdldFNlcnZlcnMoc2Vzc2lvbikudGhlbigoKSA9PiB7XG4gICAgICBleHBlY3Qoc2Vzc2lvbi5pc0Nsb3NlZCgpKS50b0JlVHJ1dGh5KCk7XG4gICAgICBkb25lKCk7XG4gICAgfSkuY2F0Y2goY29uc29sZS5sb2cpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBjbG9zZSBzZXNzaW9uIHdoZW4gcXVlcnkgZmFpbHMnLCBkb25lID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gRmFrZVNlc3Npb24uZmFpbGVkKG5ld0Vycm9yKCdPaCBubyEnLCBTRVNTSU9OX0VYUElSRUQpKTtcblxuICAgIGNhbGxHZXRTZXJ2ZXJzKHNlc3Npb24pLnRoZW4oKCkgPT4ge1xuICAgICAgZXhwZWN0KHNlc3Npb24uaXNDbG9zZWQoKSkudG9CZUZhbHN5KCk7XG4gICAgICBkb25lKCk7XG4gICAgfSkuY2F0Y2goY29uc29sZS5sb2cpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiBudWxsIG9uIGNvbm5lY3Rpb24gZXJyb3InLCBkb25lID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gRmFrZVNlc3Npb24uZmFpbGVkKG5ld0Vycm9yKCdPaCBubyEnLCBTRVNTSU9OX0VYUElSRUQpKTtcblxuICAgIGNhbGxHZXRTZXJ2ZXJzKHNlc3Npb24pLnRoZW4ocmVjb3JkcyA9PiB7XG4gICAgICBleHBlY3QocmVjb3JkcykudG9CZU51bGwoKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KS5jYXRjaChjb25zb2xlLmxvZyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCB3aGVuIHByb2NlZHVyZSBub3QgZm91bmQnLCBkb25lID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gRmFrZVNlc3Npb24uZmFpbGVkKG5ld0Vycm9yKCdPaCBubyEnLCAnTmVvLkNsaWVudEVycm9yLlByb2NlZHVyZS5Qcm9jZWR1cmVOb3RGb3VuZCcpKTtcblxuICAgIGNhbGxHZXRTZXJ2ZXJzKHNlc3Npb24pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGV4cGVjdChlcnJvci5jb2RlKS50b0JlKFNFUlZJQ0VfVU5BVkFJTEFCTEUpO1xuICAgICAgZXhwZWN0KGVycm9yLm1lc3NhZ2UpLnRvQmUoJ1NlcnZlciAnICsgUk9VVEVSX0FERFJFU1MgKyAnIGNvdWxkIG5vdCBwZXJmb3JtIHJvdXRpbmcuICcgK1xuICAgICAgICAnTWFrZSBzdXJlIHlvdSBhcmUgY29ubmVjdGluZyB0byBhIGNhdXNhbCBjbHVzdGVyJyk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFyc2UgdmFsaWQgdHRsJywgKCkgPT4ge1xuICAgIHRlc3RWYWxpZFR0bFBhcnNpbmcoMTAwLCA1KTtcbiAgICB0ZXN0VmFsaWRUdGxQYXJzaW5nKERhdGUubm93KCksIDM2MDApOyAvLyAxIGhvdXJcbiAgICB0ZXN0VmFsaWRUdGxQYXJzaW5nKERhdGUubm93KCksIDg2NDAwKTsgLy8gMjQgaG91cnNcbiAgICB0ZXN0VmFsaWRUdGxQYXJzaW5nKERhdGUubm93KCksIDM2Mjg4MDApOyAvLyA0MiBkYXlzXG4gICAgdGVzdFZhbGlkVHRsUGFyc2luZygwLCAxKTtcbiAgICB0ZXN0VmFsaWRUdGxQYXJzaW5nKDUwLCAwKTtcbiAgICB0ZXN0VmFsaWRUdGxQYXJzaW5nKERhdGUubm93KCksIDApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBvdmVyZmxvdyBwYXJzaW5nIGh1Z2UgdHRsJywgKCkgPT4ge1xuICAgIGNvbnN0IHJlY29yZCA9IG5ld1JlY29yZCh7dHRsOiBJbnRlZ2VyLk1BWF9WQUxVRX0pO1xuICAgIGNsb2NrLnNldFN5c3RlbVRpbWUoNDIpO1xuXG4gICAgY29uc3QgZXhwaXJhdGlvblRpbWUgPSBwYXJzZVR0bChyZWNvcmQpO1xuXG4gICAgZXhwZWN0KGV4cGlyYXRpb25UaW1lKS50b0JlKEludGVnZXIuTUFYX1ZBTFVFKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gdmFsaWQgdmFsdWUgcGFyc2luZyBuZWdhdGl2ZSB0dGwnLCAoKSA9PiB7XG4gICAgY29uc3QgcmVjb3JkID0gbmV3UmVjb3JkKHt0dGw6IGludCgtNDIpfSk7XG4gICAgY2xvY2suc2V0U3lzdGVtVGltZSg0Mik7XG5cbiAgICBjb25zdCBleHBpcmF0aW9uVGltZSA9IHBhcnNlVHRsKHJlY29yZCk7XG5cbiAgICBleHBlY3QoZXhwaXJhdGlvblRpbWUpLnRvQmUoSW50ZWdlci5NQVhfVkFMVUUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IHdoZW4gcmVjb3JkIGRvZXMgbm90IGhhdmUgYSB0dGwgZW50cnknLCBkb25lID0+IHtcbiAgICBjb25zdCByZWNvcmQgPSBuZXcgUmVjb3JkKFtcIm5vdFR0bFwiLCBcInNlcnZlcnNcIl0sIFtdKTtcbiAgICBleHBlY3RQcm90b2NvbEVycm9yKCgpID0+IHBhcnNlVHRsKHJlY29yZCksIGRvbmUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhcnNlIHNlcnZlcnMnLCAoKSA9PiB7XG4gICAgdGVzdFZhbGlkU2VydmVyc1BhcnNpbmcoW10sIFtdLCBbXSk7XG5cbiAgICB0ZXN0VmFsaWRTZXJ2ZXJzUGFyc2luZyhbJ3JvdXRlcjEnXSwgW10sIFtdKTtcbiAgICB0ZXN0VmFsaWRTZXJ2ZXJzUGFyc2luZyhbXSwgWydyZWFkZXIxJ10sIFtdKTtcbiAgICB0ZXN0VmFsaWRTZXJ2ZXJzUGFyc2luZyhbXSwgW10sIFsnd3JpdGVyMSddKTtcblxuICAgIHRlc3RWYWxpZFNlcnZlcnNQYXJzaW5nKFsncm91dGVyMSddLCBbJ3JlYWRlcjEnXSwgW10pO1xuICAgIHRlc3RWYWxpZFNlcnZlcnNQYXJzaW5nKFsncm91dGVyMSddLCBbJ3JlYWRlcjEnXSwgWyd3cml0ZXIxJ10pO1xuICAgIHRlc3RWYWxpZFNlcnZlcnNQYXJzaW5nKFtdLCBbJ3JlYWRlcjEnXSwgWyd3cml0ZXIxJ10pO1xuXG4gICAgdGVzdFZhbGlkU2VydmVyc1BhcnNpbmcoWydyb3V0ZXIxJ10sIFsncmVhZGVyMSddLCBbJ3dyaXRlcjEnXSk7XG4gICAgdGVzdFZhbGlkU2VydmVyc1BhcnNpbmcoWydyb3V0ZXIxJywgJ3JvdXRlcjInXSwgWydyZWFkZXIxJywgJ3JlYWRlcjInXSwgWyd3cml0ZXIxJ10pO1xuICAgIHRlc3RWYWxpZFNlcnZlcnNQYXJzaW5nKFsncm91dGVyMScsICdyb3V0ZXIyJ10sIFsncmVhZGVyMScsICdyZWFkZXIyJ10sIFsnd3JpdGVyMScsICd3cml0ZXIyJ10pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgdG8gcGFyc2Ugc2VydmVycyBlbnRyeSB3aGVuIHJlY29yZCBkb2VzIG5vdCBoYXZlIHNlcnZlcnMnLCBkb25lID0+IHtcbiAgICBjb25zdCByZWNvcmQgPSBuZXcgUmVjb3JkKFsndHRsJywgJ25vdFNlcnZlcnMnXSwgW2ludCg0MiksIFt7XCJyb2xlXCI6IFwiUkVBRFwiLCBcImFkZHJlc3Nlc1wiOiBbJzEnLCAnMicsICczJ119XV0pO1xuICAgIGV4cGVjdFByb3RvY29sRXJyb3IoKCkgPT4gcGFyc2VTZXJ2ZXJzKHJlY29yZCksIGRvbmUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgdG8gcGFyc2Ugc2VydmVycyBlbnRyeSB3aXRob3V0IHJvbGUnLCBkb25lID0+IHtcbiAgICBjb25zdCByZWNvcmQgPSBuZXcgUmVjb3JkKFsndHRsJywgJ3NlcnZlcnMnXSwgW2ludCg0MiksIFt7XCJub3RSb2xlXCI6IFwiUkVBRFwiLCBcImFkZHJlc3Nlc1wiOiBbJzEnLCAnMicsICczJ119XV0pO1xuICAgIGV4cGVjdFByb3RvY29sRXJyb3IoKCkgPT4gcGFyc2VTZXJ2ZXJzKHJlY29yZCksIGRvbmUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgdG8gcGFyc2Ugc2VydmVycyBlbnRyeSB3aXRoIGlsbGVnYWwgcm9sZScsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHJlY29yZCA9IG5ldyBSZWNvcmQoWyd0dGwnLCAnc2VydmVycyddLCBbaW50KDQyKSwgW3tcInJvbGVcIjogXCJBUkJJVEVSXCIsIFwiYWRkcmVzc2VzXCI6IFsnMScsICcyJywgJzMnXX1dXSk7XG4gICAgZXhwZWN0UHJvdG9jb2xFcnJvcigoKSA9PiBwYXJzZVNlcnZlcnMocmVjb3JkKSwgZG9uZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCB0byBwYXJzZSBzZXJ2ZXJzIGVudHJ5IHdpdGgganVzdCB0dGwnLCBkb25lID0+IHtcbiAgICBjb25zdCByZWNvcmQgPSBuZXcgUmVjb3JkKFsndHRsJywgJ3NlcnZlcnMnXSwgW2ludCg0MiksIFt7XCJyb2xlXCI6IFwiUkVBRFwifV1dKTtcbiAgICBleHBlY3RQcm90b2NvbEVycm9yKCgpID0+IHBhcnNlU2VydmVycyhyZWNvcmQpLCBkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIHBhcnNlIHNlcnZlcnMgZW50cnkgd2l0aG91dCBhZGRyZXNzZXMnLCBkb25lID0+IHtcbiAgICBjb25zdCByZWNvcmQgPSBuZXcgUmVjb3JkKFsndHRsJywgJ3NlcnZlcnMnXSwgW2ludCg0MiksIFt7XCJyb2xlXCI6IFwiV1JJVEVcIiwgXCJub3RBZGRyZXNzZXNcIjogWycxJywgJzInLCAnMyddfV1dKTtcbiAgICBleHBlY3RQcm90b2NvbEVycm9yKCgpID0+IHBhcnNlU2VydmVycyhyZWNvcmQpLCBkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIHBhcnNlIHNlcnZlcnMgZW50cnkgd2l0aCBzdHJpbmcgYWRkcmVzc2VzJywgZG9uZSA9PiB7XG4gICAgY29uc3QgcmVjb3JkID0gbmV3IFJlY29yZChbJ3R0bCcsICdzZXJ2ZXJzJ10sIFtpbnQoNDIpLCBbe1wicm9sZVwiOiBcIldSSVRFXCIsIFwiYWRkcmVzc2VzXCI6ICcnfV1dKTtcbiAgICBleHBlY3RQcm90b2NvbEVycm9yKCgpID0+IHBhcnNlU2VydmVycyhyZWNvcmQpLCBkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIHBhcnNlIHNlcnZlcnMgZW50cnkgd2l0aCBudWxsIGFkZHJlc3NlcycsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHJlY29yZCA9IG5ldyBSZWNvcmQoWyd0dGwnLCAnc2VydmVycyddLCBbaW50KDQyKSwgW3tcInJvbGVcIjogXCJXUklURVwiLCBcImFkZHJlc3Nlc1wiOiBudWxsfV1dKTtcbiAgICBleHBlY3RQcm90b2NvbEVycm9yKCgpID0+IHBhcnNlU2VydmVycyhyZWNvcmQpLCBkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIHBhcnNlIHNlcnZlcnMgZW50cnkgd2l0aCBpbnRlZ2VyIGFkZHJlc3NlcycsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHJlY29yZCA9IG5ldyBSZWNvcmQoWyd0dGwnLCAnc2VydmVycyddLCBbaW50KDQyKSwgW3tcInJvbGVcIjogXCJXUklURVwiLCBcImFkZHJlc3Nlc1wiOiAxMjM0NX1dXSk7XG4gICAgZXhwZWN0UHJvdG9jb2xFcnJvcigoKSA9PiBwYXJzZVNlcnZlcnMocmVjb3JkKSwgZG9uZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCB0byBwYXJzZSBzZXJ2ZXJzIGVudHJ5IHdpdGggb2JqZWN0IGFkZHJlc3NlcycsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHJlY29yZCA9IG5ldyBSZWNvcmQoWyd0dGwnLCAnc2VydmVycyddLCBbaW50KDQyKSwgW3tcInJvbGVcIjogXCJXUklURVwiLCBcImFkZHJlc3Nlc1wiOiB7a2V5OiBbJ2xvY2FsaG9zdCddfX1dXSk7XG4gICAgZXhwZWN0UHJvdG9jb2xFcnJvcigoKSA9PiBwYXJzZVNlcnZlcnMocmVjb3JkKSwgZG9uZSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHRlc3RWYWxpZFR0bFBhcnNpbmcoY3VycmVudFRpbWUsIHR0bFNlY29uZHMpIHtcbiAgICBjb25zdCByZWNvcmQgPSBuZXdSZWNvcmQoe3R0bDogaW50KHR0bFNlY29uZHMpfSk7XG4gICAgY2xvY2suc2V0U3lzdGVtVGltZShjdXJyZW50VGltZSk7XG5cbiAgICBjb25zdCBleHBpcmF0aW9uVGltZSA9IHBhcnNlVHRsKHJlY29yZCkudG9OdW1iZXIoKTtcblxuICAgIGV4cGVjdChleHBpcmF0aW9uVGltZSkudG9FcXVhbChjdXJyZW50VGltZSArIHR0bFNlY29uZHMgKiAxMDAwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRlc3RWYWxpZFNlcnZlcnNQYXJzaW5nKHJvdXRlckFkZHJlc3NlcywgcmVhZGVyQWRkcmVzc2VzLCB3cml0ZXJBZGRyZXNzZXMpIHtcbiAgICBjb25zdCByZWNvcmQgPSBuZXdSZWNvcmQoe3JvdXRlcnM6IHJvdXRlckFkZHJlc3NlcywgcmVhZGVyczogcmVhZGVyQWRkcmVzc2VzLCB3cml0ZXJzOiB3cml0ZXJBZGRyZXNzZXN9KTtcblxuICAgIGNvbnN0IHtyb3V0ZXJzLCByZWFkZXJzLCB3cml0ZXJzfSA9IHBhcnNlU2VydmVycyhyZWNvcmQpO1xuXG4gICAgZXhwZWN0KHJvdXRlcnMudG9BcnJheSgpKS50b0VxdWFsKHJvdXRlckFkZHJlc3Nlcyk7XG4gICAgZXhwZWN0KHJlYWRlcnMudG9BcnJheSgpKS50b0VxdWFsKHJlYWRlckFkZHJlc3Nlcyk7XG4gICAgZXhwZWN0KHdyaXRlcnMudG9BcnJheSgpKS50b0VxdWFsKHdyaXRlckFkZHJlc3Nlcyk7XG4gIH1cblxuICBmdW5jdGlvbiBjYWxsR2V0U2VydmVycyhzZXNzaW9uKSB7XG4gICAgY29uc3QgdXRpbCA9IG5ldyBHZXRTZXJ2ZXJzVXRpbCgpO1xuICAgIHJldHVybiB1dGlsLmNhbGxHZXRTZXJ2ZXJzKHNlc3Npb24sIFJPVVRFUl9BRERSRVNTKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlVHRsKHJlY29yZCkge1xuICAgIGNvbnN0IHV0aWwgPSBuZXcgR2V0U2VydmVyc1V0aWwoKTtcbiAgICByZXR1cm4gdXRpbC5wYXJzZVR0bChyZWNvcmQsIFJPVVRFUl9BRERSRVNTKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU2VydmVycyhyZWNvcmQpIHtcbiAgICBjb25zdCB1dGlsID0gbmV3IEdldFNlcnZlcnNVdGlsKCk7XG4gICAgcmV0dXJuIHV0aWwucGFyc2VTZXJ2ZXJzKHJlY29yZCwgUk9VVEVSX0FERFJFU1MpO1xuICB9XG5cbiAgZnVuY3Rpb24gbmV3UmVjb3JkKHt0dGwgPSBpbnQoNDIpLCByb3V0ZXJzID0gW10sIHJlYWRlcnMgPSBbXSwgd3JpdGVycyA9IFtdfSkge1xuICAgIGNvbnN0IHJvdXRlcnNGaWVsZCA9IHtcbiAgICAgIFwicm9sZVwiOiBcIlJPVVRFXCIsXG4gICAgICBcImFkZHJlc3Nlc1wiOiByb3V0ZXJzXG4gICAgfTtcbiAgICBjb25zdCByZWFkZXJzRmllbGQgPSB7XG4gICAgICBcInJvbGVcIjogXCJSRUFEXCIsXG4gICAgICBcImFkZHJlc3Nlc1wiOiByZWFkZXJzXG4gICAgfTtcbiAgICBjb25zdCB3cml0ZXJzRmllbGQgPSB7XG4gICAgICBcInJvbGVcIjogXCJXUklURVwiLFxuICAgICAgXCJhZGRyZXNzZXNcIjogd3JpdGVyc1xuICAgIH07XG4gICAgcmV0dXJuIG5ldyBSZWNvcmQoW1widHRsXCIsIFwic2VydmVyc1wiXSwgW3R0bCwgW3JvdXRlcnNGaWVsZCwgcmVhZGVyc0ZpZWxkLCB3cml0ZXJzRmllbGRdXSk7XG4gIH1cblxuICBmdW5jdGlvbiBleHBlY3RQcm90b2NvbEVycm9yKGFjdGlvbiwgZG9uZSkge1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXNvbHZlKGFjdGlvbigpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcHJvbWlzZS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9CZShQUk9UT0NPTF9FUlJPUik7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH1cblxuICBjbGFzcyBGYWtlU2Vzc2lvbiB7XG5cbiAgICBjb25zdHJ1Y3RvcihydW5SZXNwb25zZSkge1xuICAgICAgdGhpcy5fcnVuUmVzcG9uc2UgPSBydW5SZXNwb25zZTtcbiAgICAgIHRoaXMuX2Nsb3NlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHN0YXRpYyBzdWNjZXNzZnVsKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIG5ldyBGYWtlU2Vzc2lvbihQcm9taXNlLnJlc29sdmUocmVzdWx0KSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGZhaWxlZChlcnJvcikge1xuICAgICAgcmV0dXJuIG5ldyBGYWtlU2Vzc2lvbihQcm9taXNlLnJlamVjdChlcnJvcikpO1xuICAgIH1cblxuICAgIHJ1bigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9ydW5SZXNwb25zZTtcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgIHRoaXMuX2Nsb3NlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaXNDbG9zZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2xvc2VkO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtEbnNIb3N0TmFtZVJlc29sdmVyLCBEdW1teUhvc3ROYW1lUmVzb2x2ZXJ9IGZyb20gJy4uLy4uL3NyYy92MS9pbnRlcm5hbC9ob3N0LW5hbWUtcmVzb2x2ZXJzJztcbmltcG9ydCBoYXNGZWF0dXJlIGZyb20gJy4uLy4uL3NyYy92MS9pbnRlcm5hbC9mZWF0dXJlcyc7XG5pbXBvcnQge3BhcnNlSG9zdCwgcGFyc2VQb3J0LCBwYXJzZVNjaGVtZX0gZnJvbSAnLi4vLi4vc3JjL3YxL2ludGVybmFsL2Nvbm5lY3Rvcic7XG5cbmRlc2NyaWJlKCdEdW1teUhvc3ROYW1lUmVzb2x2ZXInLCAoKSA9PiB7XG5cbiAgaXQoJ3Nob3VsZCByZXNvbHZlIGdpdmVuIGFkZHJlc3MgdG8gaXRzZWxmJywgZG9uZSA9PiB7XG4gICAgY29uc3Qgc2VlZFJvdXRlciA9ICdsb2NhbGhvc3QnO1xuICAgIGNvbnN0IHJlc29sdmVyID0gbmV3IER1bW15SG9zdE5hbWVSZXNvbHZlcigpO1xuXG4gICAgcmVzb2x2ZXIucmVzb2x2ZShzZWVkUm91dGVyKS50aGVuKGFkZHJlc3NlcyA9PiB7XG4gICAgICBleHBlY3QoYWRkcmVzc2VzLmxlbmd0aCkudG9FcXVhbCgxKTtcbiAgICAgIGV4cGVjdChhZGRyZXNzZXNbMF0pLnRvRXF1YWwoc2VlZFJvdXRlcik7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVzb2x2ZSBnaXZlbiBhZGRyZXNzIHdpdGggcG9ydCB0byBpdHNlbGYnLCBkb25lID0+IHtcbiAgICBjb25zdCBzZWVkUm91dGVyID0gJ2xvY2FsaG9zdDo3NDc0JztcbiAgICBjb25zdCByZXNvbHZlciA9IG5ldyBEdW1teUhvc3ROYW1lUmVzb2x2ZXIoKTtcblxuICAgIHJlc29sdmVyLnJlc29sdmUoc2VlZFJvdXRlcikudGhlbihhZGRyZXNzZXMgPT4ge1xuICAgICAgZXhwZWN0KGFkZHJlc3Nlcy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgICBleHBlY3QoYWRkcmVzc2VzWzBdKS50b0VxdWFsKHNlZWRSb3V0ZXIpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxufSk7XG5cbmRlc2NyaWJlKCdEbnNIb3N0TmFtZVJlc29sdmVyJywgKCkgPT4ge1xuXG4gIGlmIChoYXNGZWF0dXJlKCdkbnNfbG9va3VwJykpIHtcblxuICAgIGxldCBvcmlnaW5hbFRpbWVvdXQ7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIC8vIGl0IHNvbWV0aW1lcyB0YWtlcyBjb3VwbGUgc2Vjb25kcyB0byBwZXJmb3JtIGRucyBsb29rdXAsIGluY3JlYXNlIHRoZSBhc3luYyB0ZXN0IHRpbWVvdXRcbiAgICAgIG9yaWdpbmFsVGltZW91dCA9IGphc21pbmUuREVGQVVMVF9USU1FT1VUX0lOVEVSVkFMO1xuICAgICAgamFzbWluZS5ERUZBVUxUX1RJTUVPVVRfSU5URVJWQUwgPSAyMDAwMDtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICBqYXNtaW5lLkRFRkFVTFRfVElNRU9VVF9JTlRFUlZBTCA9IG9yaWdpbmFsVGltZW91dDtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVzb2x2ZSBhZGRyZXNzJywgZG9uZSA9PiB7XG4gICAgICBjb25zdCBzZWVkUm91dGVyID0gJ25lbzRqLmNvbSc7XG4gICAgICBjb25zdCByZXNvbHZlciA9IG5ldyBEbnNIb3N0TmFtZVJlc29sdmVyKCk7XG5cbiAgICAgIHJlc29sdmVyLnJlc29sdmUoc2VlZFJvdXRlcikudGhlbihhZGRyZXNzZXMgPT4ge1xuICAgICAgICBleHBlY3QoYWRkcmVzc2VzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuXG4gICAgICAgIGFkZHJlc3Nlcy5mb3JFYWNoKGFkZHJlc3MgPT4ge1xuICAgICAgICAgIGV4cGVjdFRvQmVEZWZpbmVkKGFkZHJlc3MpO1xuICAgICAgICAgIGV4cGVjdChwYXJzZVNjaGVtZShhZGRyZXNzKSkudG9FcXVhbCgnJyk7XG4gICAgICAgICAgZXhwZWN0VG9CZURlZmluZWQocGFyc2VIb3N0KGFkZHJlc3MpKTtcbiAgICAgICAgICBleHBlY3QocGFyc2VQb3J0KGFkZHJlc3MpKS5ub3QudG9CZURlZmluZWQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlc29sdmUgYWRkcmVzcyB3aXRoIHBvcnQnLCBkb25lID0+IHtcbiAgICAgIGNvbnN0IHNlZWRSb3V0ZXIgPSAnbmVvNGouY29tOjc0NzQnO1xuICAgICAgY29uc3QgcmVzb2x2ZXIgPSBuZXcgRG5zSG9zdE5hbWVSZXNvbHZlcigpO1xuXG4gICAgICByZXNvbHZlci5yZXNvbHZlKHNlZWRSb3V0ZXIpLnRoZW4oYWRkcmVzc2VzID0+IHtcbiAgICAgICAgZXhwZWN0KGFkZHJlc3Nlcy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcblxuICAgICAgICBhZGRyZXNzZXMuZm9yRWFjaChhZGRyZXNzID0+IHtcbiAgICAgICAgICBleHBlY3RUb0JlRGVmaW5lZChhZGRyZXNzKTtcbiAgICAgICAgICBleHBlY3QocGFyc2VTY2hlbWUoYWRkcmVzcykpLnRvRXF1YWwoJycpO1xuICAgICAgICAgIGV4cGVjdFRvQmVEZWZpbmVkKHBhcnNlSG9zdChhZGRyZXNzKSk7XG4gICAgICAgICAgZXhwZWN0KHBhcnNlUG9ydChhZGRyZXNzKSkudG9FcXVhbCgnNzQ3NCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVzb2x2ZSB1bnJlc29sdmFibGUgYWRkcmVzcyB0byBpdHNlbGYnLCBkb25lID0+IHtcbiAgICAgIGNvbnN0IHNlZWRSb3V0ZXIgPSAnMTI3LjAuMC4xJzsgLy8gSVAgY2FuJ3QgYmUgcmVzb2x2ZWRcbiAgICAgIGNvbnN0IHJlc29sdmVyID0gbmV3IERuc0hvc3ROYW1lUmVzb2x2ZXIoKTtcblxuICAgICAgcmVzb2x2ZXIucmVzb2x2ZShzZWVkUm91dGVyKS50aGVuKGFkZHJlc3NlcyA9PiB7XG4gICAgICAgIGV4cGVjdChhZGRyZXNzZXMubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgICAgICBleHBlY3QoYWRkcmVzc2VzWzBdKS50b0VxdWFsKHNlZWRSb3V0ZXIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVzb2x2ZSB1bnJlc29sdmFibGUgYWRkcmVzcyB3aXRoIHBvcnQgdG8gaXRzZWxmJywgZG9uZSA9PiB7XG4gICAgICBjb25zdCBzZWVkUm91dGVyID0gJzEyNy4wLjAuMTo3NDc0JzsgLy8gSVAgY2FuJ3QgYmUgcmVzb2x2ZWRcbiAgICAgIGNvbnN0IHJlc29sdmVyID0gbmV3IERuc0hvc3ROYW1lUmVzb2x2ZXIoKTtcblxuICAgICAgcmVzb2x2ZXIucmVzb2x2ZShzZWVkUm91dGVyKS50aGVuKGFkZHJlc3NlcyA9PiB7XG4gICAgICAgIGV4cGVjdChhZGRyZXNzZXMubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgICAgICBleHBlY3QoYWRkcmVzc2VzWzBdKS50b0VxdWFsKHNlZWRSb3V0ZXIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICB9XG59KTtcblxuZnVuY3Rpb24gZXhwZWN0VG9CZURlZmluZWQodmFsdWUpIHtcbiAgZXhwZWN0KHZhbHVlKS50b0JlRGVmaW5lZCgpO1xuICBleHBlY3QodmFsdWUpLm5vdC50b0JlTnVsbCgpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4gXG52YXIgYWxsb2MgPSByZXF1aXJlKCcuLi8uLi9saWIvdjEvaW50ZXJuYWwvYnVmJykuYWxsb2MsXG4gICAgcGFja3N0cmVhbSA9IHJlcXVpcmUoXCIuLi8uLi9saWIvdjEvaW50ZXJuYWwvcGFja3N0cmVhbVwiKSxcbiAgICBJbnRlZ2VyID0gcmVxdWlyZShcIi4uLy4uL2xpYi92MS9pbnRlZ2VyXCIpLmRlZmF1bHQsXG4gICAgUGFja2VyID0gcGFja3N0cmVhbS5QYWNrZXIsXG4gICAgVW5wYWNrZXIgPSBwYWNrc3RyZWFtLlVucGFja2VyLFxuICAgIFN0cnVjdHVyZSA9IHBhY2tzdHJlYW0uU3RydWN0dXJlO1xuXG5kZXNjcmliZSgncGFja3N0cmVhbScsIGZ1bmN0aW9uKCkge1xuXG5cbiAgaXQoJ3Nob3VsZCBwYWNrIGludGVnZXJzJywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgLy8gdGVzdCBzbWFsbCBudW1iZXJzXG4gICAgZm9yKG4gPSAtOTk5OyBuIDw9IDk5OTsgbiArPSAxKSB7XG4gICAgICBpID0gSW50ZWdlci5mcm9tTnVtYmVyKG4pO1xuICAgICAgZXhwZWN0KCBwYWNrQW5kVW5wYWNrKCBpICkudG9TdHJpbmcoKSApLnRvQmUoIGkudG9TdHJpbmcoKSApO1xuICAgIH1cbiAgICAvLyBwb3NpdGl2ZSBudW1iZXJzXG4gICAgZm9yKG4gPSAxNjsgbiA8PSAxNiA7IG4gKz0gMSkge1xuICAgICAgaSA9IEludGVnZXIuZnJvbU51bWJlcihNYXRoLnBvdygyLCBuKSk7XG4gICAgICBleHBlY3QoIHBhY2tBbmRVbnBhY2soIGkgKS50b1N0cmluZygpICkudG9CZSggaS50b1N0cmluZygpICk7XG4gICAgfVxuICAgIC8vIG5lZ2F0aXZlIG51bWJlcnNcbiAgICBmb3IobiA9IDA7IG4gPD0gNjMgOyBuICs9IDEpIHtcbiAgICAgIGkgPSBJbnRlZ2VyLmZyb21OdW1iZXIoLU1hdGgucG93KDIsIG4pKTtcbiAgICAgIGV4cGVjdCggcGFja0FuZFVucGFjayggaSApLnRvU3RyaW5nKCkgKS50b0JlKCBpLnRvU3RyaW5nKCkgKTtcbiAgICB9XG4gIH0pO1xuICBpdCgnc2hvdWxkIHBhY2sgc3RyaW5ncycsIGZ1bmN0aW9uKCkge1xuICAgIGV4cGVjdCggcGFja0FuZFVucGFjayggXCJcIiApICkudG9CZSggXCJcIiApO1xuICAgIGV4cGVjdCggcGFja0FuZFVucGFjayggXCJhYmNkZWZnMTIzNTY3XCIgKSApLnRvQmUoIFwiYWJjZGVmZzEyMzU2N1wiICk7XG4gICAgdmFyIHN0ciA9IEFycmF5KDY1NTM2ICsgMSkuam9pbignYScpOyAvLyAyIF4gMTYgKyAxXG4gICAgZXhwZWN0KCBwYWNrQW5kVW5wYWNrKHN0ciwgc3RyLmxlbmd0aCArIDgpKS50b0JlKHN0cik7XG4gIH0pO1xuICBpdCgnc2hvdWxkIHBhY2sgc3RydWN0dXJlcycsIGZ1bmN0aW9uKCkge1xuICAgIGV4cGVjdCggcGFja0FuZFVucGFjayggbmV3IFN0cnVjdHVyZSgxLCBbXCJIZWxsbywgd29ybGQhISFcIl0gKSApLmZpZWxkc1swXSApICBcbiAgICAgLnRvQmUoIFwiSGVsbG8sIHdvcmxkISEhXCIgKTtcbiAgfSk7XG4gIGl0KCdzaG91bGQgcGFjayBsaXN0cycsIGZ1bmN0aW9uKCkge1xuICAgdmFyIGxpc3QgPSBbJ2EnLCAnYiddO1xuICAgdmFyIHJvdW5kdHJpcHBlZCA9IHBhY2tBbmRVbnBhY2soIGxpc3QgKTtcbiAgIGV4cGVjdCggcm91bmR0cmlwcGVkWzBdICkudG9CZSggbGlzdFswXSApO1xuICAgZXhwZWN0KCByb3VuZHRyaXBwZWRbMV0gKS50b0JlKCBsaXN0WzFdICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFjayBsb25nIGxpc3RzJywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxpc3RMZW5ndGggPSAyNTY7XG4gICAgdmFyIGxpc3QgPSBbXTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgaSsrKSB7XG4gICAgICBsaXN0LnB1c2gobnVsbClcbiAgICB9XG4gICAgdmFyIHJvdW5kdHJpcHBlZCA9IHBhY2tBbmRVbnBhY2soIGxpc3QsIDE0MDAgKTtcbiAgICBleHBlY3QoIHJvdW5kdHJpcHBlZFswXSApLnRvQmUoIGxpc3RbMF0gKTtcbiAgICBleHBlY3QoIHJvdW5kdHJpcHBlZFsxXSApLnRvQmUoIGxpc3RbMV0gKTtcbiAgfSk7XG59KTtcblxuZnVuY3Rpb24gcGFja0FuZFVucGFjayggdmFsLCBidWZmZXJTaXplICkge1xuICBidWZmZXJTaXplID0gYnVmZmVyU2l6ZSB8fCAxMjg7XG4gIHZhciBidWZmZXIgPSBhbGxvYyhidWZmZXJTaXplKTtcbiAgbmV3IFBhY2tlciggYnVmZmVyICkucGFja2FibGUoIHZhbCApKCk7XG4gIGJ1ZmZlci5yZXNldCgpO1xuICByZXR1cm4gbmV3IFVucGFja2VyKCkudW5wYWNrKCBidWZmZXIgKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG52YXIgUG9vbCA9IHJlcXVpcmUoJy4uLy4uL2xpYi92MS9pbnRlcm5hbC9wb29sJykuZGVmYXVsdDtcblxuZGVzY3JpYmUoJ1Bvb2wnLCBmdW5jdGlvbigpIHtcbiAgaXQoJ2FsbG9jYXRlcyBpZiBwb29sIGlzIGVtcHR5JywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgY291bnRlciA9IDA7XG4gICAgdmFyIGtleSA9IFwiYm9sdDovL2xvY2FsaG9zdDo3Njg3XCI7XG4gICAgdmFyIHBvb2wgPSBuZXcgUG9vbCggZnVuY3Rpb24gKHVybCwgcmVsZWFzZSkgeyByZXR1cm4gbmV3IFJlc291cmNlKHVybCwgY291bnRlcisrLCByZWxlYXNlKSB9ICk7XG5cbiAgICAvLyBXaGVuXG4gICAgdmFyIHIwID0gcG9vbC5hY3F1aXJlKGtleSk7XG4gICAgdmFyIHIxID0gcG9vbC5hY3F1aXJlKGtleSk7XG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KCByMC5pZCApLnRvQmUoIDAgKTtcbiAgICBleHBlY3QoIHIxLmlkICkudG9CZSggMSApO1xuICB9KTtcblxuICBpdCgncG9vbHMgaWYgcmVzb3VyY2VzIGFyZSByZXR1cm5lZCcsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuIGEgcG9vbCB0aGF0IGFsbG9jYXRlc1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICB2YXIga2V5ID0gXCJib2x0Oi8vbG9jYWxob3N0Ojc2ODdcIjtcbiAgICB2YXIgcG9vbCA9IG5ldyBQb29sKCBmdW5jdGlvbiAodXJsLCByZWxlYXNlKSB7IHJldHVybiBuZXcgUmVzb3VyY2UodXJsLCBjb3VudGVyKyssIHJlbGVhc2UpIH0gKTtcblxuICAgIC8vIFdoZW5cbiAgICB2YXIgcjAgPSBwb29sLmFjcXVpcmUoa2V5KTtcbiAgICByMC5jbG9zZSgpO1xuICAgIHZhciByMSA9IHBvb2wuYWNxdWlyZShrZXkpO1xuXG4gICAgLy8gVGhlblxuICAgIGV4cGVjdCggcjAuaWQgKS50b0JlKCAwICk7XG4gICAgZXhwZWN0KCByMS5pZCApLnRvQmUoIDAgKTtcbiAgfSk7XG5cbiAgaXQoJ2hhbmRsZXMgbXVsdGlwbGUga2V5cycsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuIGEgcG9vbCB0aGF0IGFsbG9jYXRlc1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICB2YXIga2V5MSA9IFwiYm9sdDovL2xvY2FsaG9zdDo3Njg3XCI7XG4gICAgdmFyIGtleTIgPSBcImJvbHQ6Ly9sb2NhbGhvc3Q6NzY4OFwiO1xuICAgIHZhciBwb29sID0gbmV3IFBvb2woIGZ1bmN0aW9uICh1cmwsIHJlbGVhc2UpIHsgcmV0dXJuIG5ldyBSZXNvdXJjZSh1cmwsIGNvdW50ZXIrKywgcmVsZWFzZSkgfSApO1xuXG4gICAgLy8gV2hlblxuICAgIHZhciByMCA9IHBvb2wuYWNxdWlyZShrZXkxKTtcbiAgICB2YXIgcjEgPSBwb29sLmFjcXVpcmUoa2V5Mik7XG4gICAgcjAuY2xvc2UoKTtcbiAgICB2YXIgcjIgPSBwb29sLmFjcXVpcmUoa2V5MSk7XG4gICAgdmFyIHIzID0gcG9vbC5hY3F1aXJlKGtleTIpO1xuXG4gICAgLy8gVGhlblxuICAgIGV4cGVjdCggcjAuaWQgKS50b0JlKCAwICk7XG4gICAgZXhwZWN0KCByMS5pZCApLnRvQmUoIDEgKTtcbiAgICBleHBlY3QoIHIyLmlkICkudG9CZSggMCApO1xuICAgIGV4cGVjdCggcjMuaWQgKS50b0JlKCAyICk7XG4gIH0pO1xuXG4gIGl0KCdmcmVlcyBpZiBwb29sIHJlYWNoZXMgbWF4IHNpemUnLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlbiBhIHBvb2wgdGhhdCB0cmFja3MgZGVzdHJveWVkIHJlc291cmNlc1xuICAgIHZhciBjb3VudGVyID0gMCxcbiAgICAgICAgZGVzdHJveWVkID0gW107XG4gICAgdmFyIGtleSA9IFwiYm9sdDovL2xvY2FsaG9zdDo3Njg3XCI7XG4gICAgdmFyIHBvb2wgPSBuZXcgUG9vbChcbiAgICAgIGZ1bmN0aW9uICh1cmwsIHJlbGVhc2UpIHsgcmV0dXJuIG5ldyBSZXNvdXJjZSh1cmwsIGNvdW50ZXIrKywgcmVsZWFzZSkgfSxcbiAgICAgIGZ1bmN0aW9uIChyZXNvdXJjZSkgeyBkZXN0cm95ZWQucHVzaChyZXNvdXJjZSk7IH0sXG4gICAgICBmdW5jdGlvbiAocmVzb3VyY2UpIHsgcmV0dXJuIHRydWU7IH0sXG4gICAgICAyIC8vIG1heElkbGVcbiAgICApO1xuXG4gICAgLy8gV2hlblxuICAgIHZhciByMCA9IHBvb2wuYWNxdWlyZShrZXkpO1xuICAgIHZhciByMSA9IHBvb2wuYWNxdWlyZShrZXkpO1xuICAgIHZhciByMiA9IHBvb2wuYWNxdWlyZShrZXkpO1xuICAgIHIwLmNsb3NlKCk7XG4gICAgcjEuY2xvc2UoKTtcbiAgICByMi5jbG9zZSgpO1xuXG4gICAgLy8gVGhlblxuICAgIGV4cGVjdCggZGVzdHJveWVkLmxlbmd0aCApLnRvQmUoIDEgKTtcbiAgICBleHBlY3QoIGRlc3Ryb3llZFswXS5pZCApLnRvQmUoIHIyLmlkICk7XG4gIH0pO1xuXG4gIGl0KCdmcmVlcyBpZiB2YWxpZGF0ZSByZXR1cm5zIGZhbHNlJywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW4gYSBwb29sIHRoYXQgYWxsb2NhdGVzXG4gICAgdmFyIGNvdW50ZXIgPSAwLFxuICAgICAgZGVzdHJveWVkID0gW107XG4gICAgdmFyIGtleSA9IFwiYm9sdDovL2xvY2FsaG9zdDo3Njg3XCI7XG4gICAgdmFyIHBvb2wgPSBuZXcgUG9vbChcbiAgICAgIGZ1bmN0aW9uICh1cmwsIHJlbGVhc2UpIHsgcmV0dXJuIG5ldyBSZXNvdXJjZSh1cmwsIGNvdW50ZXIrKywgcmVsZWFzZSkgfSxcbiAgICAgIGZ1bmN0aW9uIChyZXNvdXJjZSkgeyBkZXN0cm95ZWQucHVzaChyZXNvdXJjZSk7IH0sXG4gICAgICBmdW5jdGlvbiAocmVzb3VyY2UpIHsgcmV0dXJuIGZhbHNlOyB9LFxuICAgICAgMTAwMCAvLyBtYXhJZGxlXG4gICAgKTtcblxuICAgIC8vIFdoZW5cbiAgICB2YXIgcjAgPSBwb29sLmFjcXVpcmUoa2V5KTtcbiAgICB2YXIgcjEgPSBwb29sLmFjcXVpcmUoa2V5KTtcbiAgICByMC5jbG9zZSgpO1xuICAgIHIxLmNsb3NlKCk7XG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KCBkZXN0cm95ZWQubGVuZ3RoICkudG9CZSggMiApO1xuICAgIGV4cGVjdCggZGVzdHJveWVkWzBdLmlkICkudG9CZSggcjAuaWQgKTtcbiAgICBleHBlY3QoIGRlc3Ryb3llZFsxXS5pZCApLnRvQmUoIHIxLmlkICk7XG4gIH0pO1xuXG5cbiAgaXQoJ3B1cmdlcyBrZXlzJywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW4gYSBwb29sIHRoYXQgYWxsb2NhdGVzXG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIHZhciBrZXkxID0gXCJib2x0Oi8vbG9jYWxob3N0Ojc2ODdcIjtcbiAgICB2YXIga2V5MiA9IFwiYm9sdDovL2xvY2FsaG9zdDo3Njg4XCI7XG4gICAgdmFyIHBvb2wgPSBuZXcgUG9vbCggZnVuY3Rpb24gKHVybCwgcmVsZWFzZSkgeyByZXR1cm4gbmV3IFJlc291cmNlKHVybCwgY291bnRlcisrLCByZWxlYXNlKSB9LFxuICAgICAgZnVuY3Rpb24gKHJlcykge3Jlcy5kZXN0cm95ZWQgPSB0cnVlOyByZXR1cm4gdHJ1ZX1cbiAgICApO1xuXG4gICAgLy8gV2hlblxuICAgIHZhciByMCA9IHBvb2wuYWNxdWlyZShrZXkxKTtcbiAgICB2YXIgcjEgPSBwb29sLmFjcXVpcmUoa2V5Mik7XG4gICAgcjAuY2xvc2UoKTtcbiAgICByMS5jbG9zZSgpO1xuICAgIGV4cGVjdChwb29sLmhhcyhrZXkxKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QocG9vbC5oYXMoa2V5MikpLnRvQmUodHJ1ZSk7XG4gICAgcG9vbC5wdXJnZShrZXkxKTtcbiAgICBleHBlY3QocG9vbC5oYXMoa2V5MSkpLnRvQmUoZmFsc2UpO1xuICAgIGV4cGVjdChwb29sLmhhcyhrZXkyKSkudG9CZSh0cnVlKTtcblxuICAgIHZhciByMiA9IHBvb2wuYWNxdWlyZShrZXkxKTtcbiAgICB2YXIgcjMgPSBwb29sLmFjcXVpcmUoa2V5Mik7XG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KCByMC5pZCApLnRvQmUoIDAgKTtcbiAgICBleHBlY3QoIHIwLmRlc3Ryb3llZCApLnRvQmUoIHRydWUgKTtcbiAgICBleHBlY3QoIHIxLmlkICkudG9CZSggMSApO1xuICAgIGV4cGVjdCggcjIuaWQgKS50b0JlKCAyICk7XG4gICAgZXhwZWN0KCByMy5pZCApLnRvQmUoIDEgKTtcbiAgfSk7XG59KTtcblxuZnVuY3Rpb24gUmVzb3VyY2UoIGtleSwgaWQsIHJlbGVhc2UpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLmlkID0gaWQ7XG4gIHRoaXMuY2xvc2UgPSBmdW5jdGlvbigpIHsgcmVsZWFzZShrZXksIHNlbGYpOyB9O1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBSZWRpc2NvdmVyeSBmcm9tIFwiLi4vLi4vc3JjL3YxL2ludGVybmFsL3JlZGlzY292ZXJ5XCI7XG5pbXBvcnQgR2V0U2VydmVyc1V0aWwgZnJvbSBcIi4uLy4uL3NyYy92MS9pbnRlcm5hbC9nZXQtc2VydmVycy11dGlsXCI7XG5pbXBvcnQge25ld0Vycm9yLCBQUk9UT0NPTF9FUlJPUn0gZnJvbSBcIi4uLy4uL3NyYy92MS9lcnJvclwiO1xuaW1wb3J0IFJlY29yZCBmcm9tIFwiLi4vLi4vc3JjL3YxL3JlY29yZFwiO1xuaW1wb3J0IHtpbnR9IGZyb20gXCIuLi8uLi9zcmMvdjEvaW50ZWdlclwiO1xuaW1wb3J0IFJvdW5kUm9iaW5BcnJheSBmcm9tIFwiLi4vLi4vc3JjL3YxL2ludGVybmFsL3JvdW5kLXJvYmluLWFycmF5XCI7XG5pbXBvcnQgUm91dGluZ1RhYmxlIGZyb20gXCIuLi8uLi9zcmMvdjEvaW50ZXJuYWwvcm91dGluZy10YWJsZVwiO1xuXG5jb25zdCBST1VURVJfQUREUkVTUyA9ICdib2x0K3JvdXRpbmc6Ly90ZXN0LnJvdXRlci5jb20nO1xuXG5kZXNjcmliZSgncmVkaXNjb3ZlcnknLCAoKSA9PiB7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIGNvbm5lY3Rpb24gZXJyb3IgaGFwcGVucycsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHV0aWwgPSBuZXcgRmFrZUdldFNlcnZlcnNVdGlsKHtcbiAgICAgIGNhbGxHZXRTZXJ2ZXJzOiAoKSA9PiBudWxsLFxuICAgIH0pO1xuXG4gICAgbG9va3VwUm91dGluZ1RhYmxlT25Sb3V0ZXIodXRpbCkudGhlbihyb3V0aW5nVGFibGUgPT4ge1xuICAgICAgZXhwZWN0KHJvdXRpbmdUYWJsZSkudG9CZU51bGwoKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIG5vIHJlY29yZHMgYXJlIHJldHVybmVkJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdXRpbCA9IG5ldyBGYWtlR2V0U2VydmVyc1V0aWwoe1xuICAgICAgY2FsbEdldFNlcnZlcnM6ICgpID0+IFtdLFxuICAgIH0pO1xuXG4gICAgbG9va3VwUm91dGluZ1RhYmxlT25Sb3V0ZXIodXRpbCkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZXhwZWN0UHJvdG9jb2xFcnJvcihlcnJvciwgJ0lsbGVnYWwgcmVzcG9uc2UgZnJvbSByb3V0ZXInKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIG11bHRpcGxlIHJlY29yZHMgYXJlIHJldHVybmVkJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdXRpbCA9IG5ldyBGYWtlR2V0U2VydmVyc1V0aWwoe1xuICAgICAgY2FsbEdldFNlcnZlcnM6ICgpID0+IFtuZXcgUmVjb3JkKFsnYSddLCBbJ2FhYSddKSwgbmV3IFJlY29yZChbJ2InXSwgWydiYmInXSldXG4gICAgfSk7XG5cbiAgICBsb29rdXBSb3V0aW5nVGFibGVPblJvdXRlcih1dGlsKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3RQcm90b2NvbEVycm9yKGVycm9yLCAnSWxsZWdhbCByZXNwb25zZSBmcm9tIHJvdXRlcicpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IHdoZW4gdHRsIHBhcnNpbmcgdGhyb3dzJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdXRpbCA9IG5ldyBGYWtlR2V0U2VydmVyc1V0aWwoe1xuICAgICAgY2FsbEdldFNlcnZlcnM6ICgpID0+IFtuZXcgUmVjb3JkKFsnYSddLCBbJ2FhYSddKV0sXG4gICAgICBwYXJzZVR0bDogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXdFcnJvcignVW5hYmxlIHRvIHBhcnNlIFRUTCcsIFBST1RPQ09MX0VSUk9SKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxvb2t1cFJvdXRpbmdUYWJsZU9uUm91dGVyKHV0aWwpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGV4cGVjdFByb3RvY29sRXJyb3IoZXJyb3IsICdVbmFibGUgdG8gcGFyc2UgVFRMJyk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBzZXJ2ZXJzIHBhcnNpbmcgdGhyb3dzJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdXRpbCA9IG5ldyBGYWtlR2V0U2VydmVyc1V0aWwoe1xuICAgICAgY2FsbEdldFNlcnZlcnM6ICgpID0+IFtuZXcgUmVjb3JkKFsnYSddLCBbJ2FhYSddKV0sXG4gICAgICBwYXJzZVR0bDogKCkgPT4gaW50KDQyKSxcbiAgICAgIHBhcnNlU2VydmVyczogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXdFcnJvcignVW5hYmxlIHRvIHBhcnNlIHNlcnZlcnMnLCBQUk9UT0NPTF9FUlJPUik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsb29rdXBSb3V0aW5nVGFibGVPblJvdXRlcih1dGlsKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3RQcm90b2NvbEVycm9yKGVycm9yLCAnVW5hYmxlIHRvIHBhcnNlIHNlcnZlcnMnKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIG5vIHJvdXRlcnMnLCBkb25lID0+IHtcbiAgICBjb25zdCB1dGlsID0gbmV3IEZha2VHZXRTZXJ2ZXJzVXRpbCh7XG4gICAgICBjYWxsR2V0U2VydmVyczogKCkgPT4gW25ldyBSZWNvcmQoWydhJ10sIFsnYWFhJ10pXSxcbiAgICAgIHBhcnNlVHRsOiAoKSA9PiBpbnQoNDIpLFxuICAgICAgcGFyc2VTZXJ2ZXJzOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcm91dGVyczogbmV3IFJvdW5kUm9iaW5BcnJheSgpLFxuICAgICAgICAgIHJlYWRlcnM6IG5ldyBSb3VuZFJvYmluQXJyYXkoWydyZWFkZXIxJ10pLFxuICAgICAgICAgIHdyaXRlcnM6IG5ldyBSb3VuZFJvYmluQXJyYXkoWyd3cml0ZXIxJ10pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsb29rdXBSb3V0aW5nVGFibGVPblJvdXRlcih1dGlsKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3RQcm90b2NvbEVycm9yKGVycm9yLCAnUmVjZWl2ZWQgbm8gcm91dGVycycpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IHdoZW4gbm8gcmVhZGVycycsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHV0aWwgPSBuZXcgRmFrZUdldFNlcnZlcnNVdGlsKHtcbiAgICAgIGNhbGxHZXRTZXJ2ZXJzOiAoKSA9PiBbbmV3IFJlY29yZChbJ2EnXSwgWydhYWEnXSldLFxuICAgICAgcGFyc2VUdGw6ICgpID0+IGludCg0MiksXG4gICAgICBwYXJzZVNlcnZlcnM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByb3V0ZXJzOiBuZXcgUm91bmRSb2JpbkFycmF5KFsncm91dGVyMSddKSxcbiAgICAgICAgICByZWFkZXJzOiBuZXcgUm91bmRSb2JpbkFycmF5KCksXG4gICAgICAgICAgd3JpdGVyczogbmV3IFJvdW5kUm9iaW5BcnJheShbJ3dyaXRlcjEnXSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxvb2t1cFJvdXRpbmdUYWJsZU9uUm91dGVyKHV0aWwpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGV4cGVjdFByb3RvY29sRXJyb3IoZXJyb3IsICdSZWNlaXZlZCBubyByZWFkZXJzJyk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIHJvdXRpbmcgdGFibGUgd2hlbiBubyB3cml0ZXJzJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdXRpbCA9IG5ldyBGYWtlR2V0U2VydmVyc1V0aWwoe1xuICAgICAgY2FsbEdldFNlcnZlcnM6ICgpID0+IFtuZXcgUmVjb3JkKFsnYSddLCBbJ2FhYSddKV0sXG4gICAgICBwYXJzZVR0bDogKCkgPT4gaW50KDQyKSxcbiAgICAgIHBhcnNlU2VydmVyczogKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJvdXRlcnM6IG5ldyBSb3VuZFJvYmluQXJyYXkoWydyb3V0ZXIxJ10pLFxuICAgICAgICAgIHJlYWRlcnM6IG5ldyBSb3VuZFJvYmluQXJyYXkoWydyZWFkZXIxJ10pLFxuICAgICAgICAgIHdyaXRlcnM6IG5ldyBSb3VuZFJvYmluQXJyYXkoKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbG9va3VwUm91dGluZ1RhYmxlT25Sb3V0ZXIodXRpbCkudGhlbihyb3V0aW5nVGFibGUgPT4ge1xuICAgICAgZXhwZWN0KHJvdXRpbmdUYWJsZSkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChyb3V0aW5nVGFibGUpLm5vdC50b0JlTnVsbCgpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiB2YWxpZCByb3V0aW5nIHRhYmxlIHdpdGggMSByb3V0ZXIsIDEgcmVhZGVyIGFuZCAxIHdyaXRlcicsIGRvbmUgPT4ge1xuICAgIHRlc3RWYWxpZFJvdXRpbmdUYWJsZShbJ3JvdXRlcjEnXSwgWydyZWFkZXIxJ10sIFsnd3JpdGVyMSddLCBpbnQoNDIpLCBkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gdmFsaWQgcm91dGluZyB0YWJsZSB3aXRoIDIgcm91dGVycywgMiByZWFkZXJzIGFuZCAyIHdyaXRlcnMnLCBkb25lID0+IHtcbiAgICB0ZXN0VmFsaWRSb3V0aW5nVGFibGUoWydyb3V0ZXIxJywgJ3JvdXRlcjInXSwgWydyZWFkZXIxJywgJ3JlYWRlcjInXSwgWyd3cml0ZXIxJywgJ3dyaXRlcjInXSwgaW50KERhdGUubm93KCkpLCBkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gdmFsaWQgcm91dGluZyB0YWJsZSB3aXRoIDEgcm91dGVyLCAzIHJlYWRlcnMgYW5kIDEgd3JpdGVyJywgZG9uZSA9PiB7XG4gICAgdGVzdFZhbGlkUm91dGluZ1RhYmxlKFsncm91dGVyMSddLCBbJ3JlYWRlcjEnLCAncmVhZGVyMicsICdyZWFkZXIzJ10sIFsnd3JpdGVyMSddLCBpbnQoMTIzNDUpLCBkb25lKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gdGVzdFZhbGlkUm91dGluZ1RhYmxlKHJvdXRlckFkZHJlc3NlcywgcmVhZGVyQWRkcmVzc2VzLCB3cml0ZXJBZGRyZXNzZXMsIGV4cGlyZXMsIGRvbmUpIHtcbiAgICBjb25zdCB1dGlsID0gbmV3IEZha2VHZXRTZXJ2ZXJzVXRpbCh7XG4gICAgICBjYWxsR2V0U2VydmVyczogKCkgPT4gW25ldyBSZWNvcmQoWydhJ10sIFsnYWFhJ10pXSxcbiAgICAgIHBhcnNlVHRsOiAoKSA9PiBleHBpcmVzLFxuICAgICAgcGFyc2VTZXJ2ZXJzOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcm91dGVyczogbmV3IFJvdW5kUm9iaW5BcnJheShyb3V0ZXJBZGRyZXNzZXMpLFxuICAgICAgICAgIHJlYWRlcnM6IG5ldyBSb3VuZFJvYmluQXJyYXkocmVhZGVyQWRkcmVzc2VzKSxcbiAgICAgICAgICB3cml0ZXJzOiBuZXcgUm91bmRSb2JpbkFycmF5KHdyaXRlckFkZHJlc3NlcylcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxvb2t1cFJvdXRpbmdUYWJsZU9uUm91dGVyKHV0aWwpLnRoZW4ocm91dGluZ1RhYmxlID0+IHtcbiAgICAgIGV4cGVjdChyb3V0aW5nVGFibGUpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3Qocm91dGluZ1RhYmxlKS5ub3QudG9CZU51bGwoKTtcblxuICAgICAgZXhwZWN0KHJvdXRpbmdUYWJsZS5leHBpcmF0aW9uVGltZSkudG9FcXVhbChleHBpcmVzKTtcblxuICAgICAgY29uc3QgYWxsU2VydmVycyA9IHJvdXRpbmdUYWJsZS5zZXJ2ZXJzRGlmZihuZXcgUm91dGluZ1RhYmxlKCkpLnNvcnQoKTtcbiAgICAgIGNvbnN0IGFsbEV4cGVjdGVkU2VydmVycyA9IFsuLi5yb3V0ZXJBZGRyZXNzZXMsIC4uLnJlYWRlckFkZHJlc3NlcywgLi4ud3JpdGVyQWRkcmVzc2VzXS5zb3J0KCk7XG4gICAgICBleHBlY3QoYWxsU2VydmVycykudG9FcXVhbChhbGxFeHBlY3RlZFNlcnZlcnMpO1xuXG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBsb29rdXBSb3V0aW5nVGFibGVPblJvdXRlcihnZXRTZXJ2ZXJzVXRpbCkge1xuICAgIGNvbnN0IHJlZGlzY292ZXJ5ID0gbmV3IFJlZGlzY292ZXJ5KGdldFNlcnZlcnNVdGlsKTtcbiAgICByZXR1cm4gcmVkaXNjb3ZlcnkubG9va3VwUm91dGluZ1RhYmxlT25Sb3V0ZXIobnVsbCwgUk9VVEVSX0FERFJFU1MpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXhwZWN0UHJvdG9jb2xFcnJvcihlcnJvciwgbWVzc2FnZVByZWZpeCkge1xuICAgIGV4cGVjdChlcnJvci5jb2RlKS50b0VxdWFsKFBST1RPQ09MX0VSUk9SKTtcbiAgICBleHBlY3QoZXJyb3IubWVzc2FnZS5pbmRleE9mKG1lc3NhZ2VQcmVmaXgpKS50b0VxdWFsKDApO1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkTm90QmVDYWxsZWQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTaG91bGQgbm90IGJlIGNhbGxlZCcpO1xuICB9XG5cbiAgY2xhc3MgRmFrZUdldFNlcnZlcnNVdGlsIGV4dGVuZHMgR2V0U2VydmVyc1V0aWwge1xuXG4gICAgY29uc3RydWN0b3Ioe2NhbGxHZXRTZXJ2ZXJzID0gc2hvdWxkTm90QmVDYWxsZWQsIHBhcnNlVHRsID0gc2hvdWxkTm90QmVDYWxsZWQsIHBhcnNlU2VydmVycyA9IHNob3VsZE5vdEJlQ2FsbGVkfSkge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXMuX2NhbGxHZXRTZXJ2ZXJzID0gY2FsbEdldFNlcnZlcnM7XG4gICAgICB0aGlzLl9wYXJzZVR0bCA9IHBhcnNlVHRsO1xuICAgICAgdGhpcy5fcGFyc2VTZXJ2ZXJzID0gcGFyc2VTZXJ2ZXJzO1xuICAgIH1cblxuICAgIGNhbGxHZXRTZXJ2ZXJzKHNlc3Npb24sIHJvdXRlckFkZHJlc3MpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9jYWxsR2V0U2VydmVycygpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBwYXJzZVR0bChyZWNvcmQsIHJvdXRlckFkZHJlc3MpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wYXJzZVR0bCgpO1xuICAgIH1cblxuICAgIHBhcnNlU2VydmVycyhyZWNvcmQsIHJvdXRlckFkZHJlc3MpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wYXJzZVNlcnZlcnMoKTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgUm91bmRSb2JpbkFycmF5IGZyb20gXCIuLi8uLi9saWIvdjEvaW50ZXJuYWwvcm91bmQtcm9iaW4tYXJyYXlcIjtcblxuZGVzY3JpYmUoJ3JvdW5kLXJvYmluLWFycmF5JywgKCkgPT4ge1xuXG4gIGl0KCdzaG91bGQgYmVoYXZlIGNvcnJlY3RseSB3aGVuIGVtcHR5JywgKCkgPT4ge1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IFJvdW5kUm9iaW5BcnJheSgpO1xuXG4gICAgZXhwZWN0KGFycmF5LmlzRW1wdHkoKSkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChhcnJheS5zaXplKCkpLnRvRXF1YWwoMCk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9CZU51bGwoKTtcbiAgICBleHBlY3QoYXJyYXkudG9BcnJheSgpKS50b0VxdWFsKFtdKTtcblxuICAgIGFycmF5LnJlbW92ZSgxKTtcblxuICAgIGV4cGVjdChhcnJheS5pc0VtcHR5KCkpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QoYXJyYXkuc2l6ZSgpKS50b0VxdWFsKDApO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvQmVOdWxsKCk7XG4gICAgZXhwZWN0KGFycmF5LnRvQXJyYXkoKSkudG9FcXVhbChbXSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYmVoYXZlIGNvcnJlY3RseSB3aGVuIGNvbnRhaW5zIHNpbmdsZSBlbGVtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IFJvdW5kUm9iaW5BcnJheShbNV0pO1xuXG4gICAgZXhwZWN0KGFycmF5LmlzRW1wdHkoKSkudG9CZUZhbHN5KCk7XG4gICAgZXhwZWN0KGFycmF5LnNpemUoKSkudG9FcXVhbCgxKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDUpO1xuICAgIGV4cGVjdChhcnJheS50b0FycmF5KCkpLnRvRXF1YWwoWzVdKTtcblxuICAgIGFycmF5LnJlbW92ZSgxKTtcblxuICAgIGV4cGVjdChhcnJheS5pc0VtcHR5KCkpLnRvQmVGYWxzeSgpO1xuICAgIGV4cGVjdChhcnJheS5zaXplKCkpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCg1KTtcbiAgICBleHBlY3QoYXJyYXkudG9BcnJheSgpKS50b0VxdWFsKFs1XSk7XG5cbiAgICBhcnJheS5yZW1vdmUoNSk7XG5cbiAgICBleHBlY3QoYXJyYXkuaXNFbXB0eSgpKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KGFycmF5LnNpemUoKSkudG9FcXVhbCgwKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0JlTnVsbCgpO1xuICAgIGV4cGVjdChhcnJheS50b0FycmF5KCkpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHB1c2ggaXRlbXMnLCAoKSA9PiB7XG4gICAgY29uc3QgYXJyYXkxID0gbmV3IFJvdW5kUm9iaW5BcnJheSgpO1xuICAgIGFycmF5MS5wdXNoQWxsKFsxXSk7XG4gICAgZXhwZWN0KGFycmF5MS50b0FycmF5KCkpLnRvRXF1YWwoWzFdKTtcblxuICAgIGNvbnN0IGFycmF5MiA9IG5ldyBSb3VuZFJvYmluQXJyYXkoW10pO1xuICAgIGFycmF5Mi5wdXNoQWxsKFsxLCAyLCAzXSk7XG4gICAgZXhwZWN0KGFycmF5Mi50b0FycmF5KCkpLnRvRXF1YWwoWzEsIDIsIDNdKTtcblxuICAgIGNvbnN0IGFycmF5MyA9IG5ldyBSb3VuZFJvYmluQXJyYXkoWzEsIDIsIDNdKTtcbiAgICBhcnJheTMucHVzaEFsbChbNCwgNV0pO1xuICAgIGV4cGVjdChhcnJheTMudG9BcnJheSgpKS50b0VxdWFsKFsxLCAyLCAzLCA0LCA1XSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcHVzaCBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICBjb25zdCBlbXB0eUFycmF5ID0gbmV3IFJvdW5kUm9iaW5BcnJheSgpO1xuICAgIGVtcHR5QXJyYXkucHVzaEFsbChbXSk7XG4gICAgZXhwZWN0KGVtcHR5QXJyYXkuaXNFbXB0eSgpKS50b0JlVHJ1dGh5KCk7XG5cbiAgICBjb25zdCBub25FbXB0eUFycmF5ID0gbmV3IFJvdW5kUm9iaW5BcnJheShbMSwgMiwgM10pO1xuICAgIG5vbkVtcHR5QXJyYXkucHVzaEFsbChbXSk7XG4gICAgZXhwZWN0KG5vbkVtcHR5QXJyYXkudG9BcnJheSgpKS50b0VxdWFsKFsxLCAyLCAzXSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB0cnlpbmcgdG8gcHVzaCBpbGxlZ2FsIGl0ZW1zJywgKCkgPT4ge1xuICAgIGNvbnN0IGVtcHR5QXJyYXkgPSBuZXcgUm91bmRSb2JpbkFycmF5KCk7XG4gICAgY29uc3Qgbm9uRW1wdHlBcnJheSA9IG5ldyBSb3VuZFJvYmluQXJyYXkoWzEsIDIsIDNdKTtcblxuICAgIGV4cGVjdCgoKSA9PiBlbXB0eUFycmF5LnB1c2hBbGwodW5kZWZpbmVkKSkudG9UaHJvdygpO1xuICAgIGV4cGVjdCgoKSA9PiBub25FbXB0eUFycmF5LnB1c2hBbGwodW5kZWZpbmVkKSkudG9UaHJvdygpO1xuXG4gICAgZXhwZWN0KCgpID0+IGVtcHR5QXJyYXkucHVzaEFsbChudWxsKSkudG9UaHJvdygpO1xuICAgIGV4cGVjdCgoKSA9PiBub25FbXB0eUFycmF5LnB1c2hBbGwobnVsbCkpLnRvVGhyb3coKTtcblxuICAgIGV4cGVjdCgoKSA9PiBlbXB0eUFycmF5LnB1c2hBbGwoe30pKS50b1Rocm93KCk7XG4gICAgZXhwZWN0KCgpID0+IG5vbkVtcHR5QXJyYXkucHVzaEFsbCh7fSkpLnRvVGhyb3coKTtcblxuICAgIGV4cGVjdCgoKSA9PiBlbXB0eUFycmF5LnB1c2hBbGwoe2E6IDEsIGI6IDJ9KSkudG9UaHJvdygpO1xuICAgIGV4cGVjdCgoKSA9PiBub25FbXB0eUFycmF5LnB1c2hBbGwoe2E6IDEsIGI6IDJ9KSkudG9UaHJvdygpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHN0ZXAgdGhyb3VnaCBhcnJheScsICgpID0+IHtcbiAgICBjb25zdCBhcnJheSA9IG5ldyBSb3VuZFJvYmluQXJyYXkoWzEsIDIsIDMsIDQsIDVdKTtcblxuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgyKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoNCk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCg1KTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDEpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc3RlcCB0aHJvdWdoIHNpbmdsZSBlbGVtZW50IGFycmF5JywgKCkgPT4ge1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IFJvdW5kUm9iaW5BcnJheShbNV0pO1xuXG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCg1KTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDUpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoNSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGFuZGxlIGRlbGV0aW5nIGl0ZW0gYmVmb3JlIGN1cnJlbnQgJywgKCkgPT4ge1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IFJvdW5kUm9iaW5BcnJheShbMSwgMiwgMywgNCwgNV0pO1xuXG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgxKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDIpO1xuICAgIGFycmF5LnJlbW92ZSgyKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDQpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoNSk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgxKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoNCk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCg1KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYW5kbGUgZGVsZXRpbmcgaXRlbSBvbiBjdXJyZW50ICcsICgpID0+IHtcbiAgICBjb25zdCBhcnJheSA9IG5ldyBSb3VuZFJvYmluQXJyYXkoWzEsIDIsIDMsIDQsIDVdKTtcblxuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgyKTtcbiAgICBhcnJheS5yZW1vdmUoMyk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCg0KTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDUpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgyKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDQpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoNSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGFuZGxlIGRlbGV0aW5nIGl0ZW0gYWZ0ZXIgY3VycmVudCAnLCAoKSA9PiB7XG4gICAgY29uc3QgYXJyYXkgPSBuZXcgUm91bmRSb2JpbkFycmF5KFsxLCAyLCAzLCA0LCA1XSk7XG5cbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDEpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMik7XG4gICAgYXJyYXkucmVtb3ZlKDQpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMyk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCg1KTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDEpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMik7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgzKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYW5kbGUgZGVsZXRpbmcgbGFzdCBpdGVtICcsICgpID0+IHtcbiAgICBjb25zdCBhcnJheSA9IG5ldyBSb3VuZFJvYmluQXJyYXkoWzEsIDIsIDMsIDQsIDVdKTtcblxuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgyKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoNCk7XG4gICAgYXJyYXkucmVtb3ZlKDUpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgyKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoNCk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgxKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYW5kbGUgZGVsZXRpbmcgZmlyc3QgaXRlbSAnLCAoKSA9PiB7XG4gICAgY29uc3QgYXJyYXkgPSBuZXcgUm91bmRSb2JpbkFycmF5KFsxLCAyLCAzLCA0LCA1XSk7XG4gICAgYXJyYXkucmVtb3ZlKDEpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMik7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgzKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDQpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoNSk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgyKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoNCk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCg1KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYW5kbGUgZGVsZXRpbmcgbXVsdGlwbGUgaXRlbXMgJywgKCkgPT4ge1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IFJvdW5kUm9iaW5BcnJheShbMSwgMiwgMywgMSwgMV0pO1xuICAgIGFycmF5LnJlbW92ZSgxKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDIpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMyk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgyKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDMpO1xuICB9KTtcblxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCBSb3V0aW5nVGFibGUgZnJvbSBcIi4uLy4uL3NyYy92MS9pbnRlcm5hbC9yb3V0aW5nLXRhYmxlXCI7XG5pbXBvcnQgUm91bmRSb2JpbkFycmF5IGZyb20gXCIuLi8uLi9zcmMvdjEvaW50ZXJuYWwvcm91bmQtcm9iaW4tYXJyYXlcIjtcbmltcG9ydCB7aW50fSBmcm9tIFwiLi4vLi4vc3JjL3YxL2ludGVnZXJcIjtcblxuZGVzY3JpYmUoJ3JvdXRpbmctdGFibGUnLCAoKSA9PiB7XG5cbiAgaXQoJ3Nob3VsZCBub3QgYmUgc3RhbGUgd2hlbiBoYXMgcm91dGVycywgcmVhZGVycywgd3JpdGVycyBhbmQgZnV0dXJlIGV4cGlyYXRpb24gZGF0ZScsICgpID0+IHtcbiAgICBjb25zdCB0YWJsZSA9IGNyZWF0ZVRhYmxlKFsxLCAyXSwgWzMsIDRdLCBbNSwgNl0sIG5vdEV4cGlyZWQoKSk7XG4gICAgZXhwZWN0KHRhYmxlLmlzU3RhbGUoKSkudG9CZUZhbHN5KCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYmUgc3RhbGUgd2hlbiBleHBpcmF0aW9uIGRhdGUgaW4gdGhlIHBhc3QnLCAoKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFsxLCAyXSwgWzEsIDJdLCBleHBpcmVkKCkpO1xuICAgIGV4cGVjdCh0YWJsZS5pc1N0YWxlKCkpLnRvQmVUcnV0aHkoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBiZSBzdGFsZSB3aGVuIGhhcyBzaW5nbGUgcm91dGVyJywgKCkgPT4ge1xuICAgIGNvbnN0IHRhYmxlID0gY3JlYXRlVGFibGUoWzFdLCBbMiwgM10sIFs0LCA1XSwgbm90RXhwaXJlZCgpKTtcbiAgICBleHBlY3QodGFibGUuaXNTdGFsZSgpKS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYmUgc3RhbGUgd2hlbiBubyByZWFkZXJzJywgKCkgPT4ge1xuICAgIGNvbnN0IHRhYmxlID0gY3JlYXRlVGFibGUoWzEsIDJdLCBbXSwgWzMsIDRdLCBub3RFeHBpcmVkKCkpO1xuICAgIGV4cGVjdCh0YWJsZS5pc1N0YWxlKCkpLnRvQmVUcnV0aHkoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBiZSBzdGFsZSB3aGVuIG5vIHdyaXRlcnMnLCAoKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFszLCA0XSwgW10sIG5vdEV4cGlyZWQoKSk7XG4gICAgZXhwZWN0KHRhYmxlLmlzU3RhbGUoKSkudG9CZVRydXRoeSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBiZSBzdGFsZSB3aXRoIHNpbmdsZSByZWFkZXInLCAoKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFszXSwgWzQsIDVdLCBub3RFeHBpcmVkKCkpO1xuICAgIGV4cGVjdCh0YWJsZS5pc1N0YWxlKCkpLnRvQmVGYWxzeSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBiZSBzdGFsZSB3aXRoIHNpbmdsZSB3cml0ZXInLCAoKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFszLCA0XSwgWzVdLCBub3RFeHBpcmVkKCkpO1xuICAgIGV4cGVjdCh0YWJsZS5pc1N0YWxlKCkpLnRvQmVGYWxzeSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZvcmdldCByZWFkZXIsIHdyaXRlciBidXQgbm90IHJvdXRlcicsICgpID0+IHtcbiAgICBjb25zdCB0YWJsZSA9IGNyZWF0ZVRhYmxlKFsxLCAyXSwgWzEsIDJdLCBbMSwgMl0sIG5vdEV4cGlyZWQoKSk7XG5cbiAgICB0YWJsZS5mb3JnZXQoMSk7XG5cbiAgICBleHBlY3QodGFibGUucm91dGVycy50b0FycmF5KCkpLnRvRXF1YWwoWzEsIDJdKTtcbiAgICBleHBlY3QodGFibGUucmVhZGVycy50b0FycmF5KCkpLnRvRXF1YWwoWzJdKTtcbiAgICBleHBlY3QodGFibGUud3JpdGVycy50b0FycmF5KCkpLnRvRXF1YWwoWzJdKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmb3JnZXQgc2luZ2xlIHJlYWRlcicsICgpID0+IHtcbiAgICBjb25zdCB0YWJsZSA9IGNyZWF0ZVRhYmxlKFsxLCAyXSwgWzQyXSwgWzEsIDIsIDNdLCBub3RFeHBpcmVkKCkpO1xuXG4gICAgdGFibGUuZm9yZ2V0KDQyKTtcblxuICAgIGV4cGVjdCh0YWJsZS5yb3V0ZXJzLnRvQXJyYXkoKSkudG9FcXVhbChbMSwgMl0pO1xuICAgIGV4cGVjdCh0YWJsZS5yZWFkZXJzLnRvQXJyYXkoKSkudG9FcXVhbChbXSk7XG4gICAgZXhwZWN0KHRhYmxlLndyaXRlcnMudG9BcnJheSgpKS50b0VxdWFsKFsxLCAyLCAzXSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZm9yZ2V0IHNpbmdsZSB3cml0ZXInLCAoKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFszLCA0LCA1XSwgWzQyXSwgbm90RXhwaXJlZCgpKTtcblxuICAgIHRhYmxlLmZvcmdldCg0Mik7XG5cbiAgICBleHBlY3QodGFibGUucm91dGVycy50b0FycmF5KCkpLnRvRXF1YWwoWzEsIDJdKTtcbiAgICBleHBlY3QodGFibGUucmVhZGVycy50b0FycmF5KCkpLnRvRXF1YWwoWzMsIDQsIDVdKTtcbiAgICBleHBlY3QodGFibGUud3JpdGVycy50b0FycmF5KCkpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZvcmdldCByb3V0ZXInLCAoKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFsxLCAzXSwgWzQsIDFdLCBub3RFeHBpcmVkKCkpO1xuXG4gICAgdGFibGUuZm9yZ2V0Um91dGVyKDEpO1xuXG4gICAgZXhwZWN0KHRhYmxlLnJvdXRlcnMudG9BcnJheSgpKS50b0VxdWFsKFsyXSk7XG4gICAgZXhwZWN0KHRhYmxlLnJlYWRlcnMudG9BcnJheSgpKS50b0VxdWFsKFsxLCAzXSk7XG4gICAgZXhwZWN0KHRhYmxlLndyaXRlcnMudG9BcnJheSgpKS50b0VxdWFsKFs0LCAxXSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZm9yZ2V0IHdyaXRlcicsICgpID0+IHtcbiAgICBjb25zdCB0YWJsZSA9IGNyZWF0ZVRhYmxlKFsxLCAyLCAzXSwgWzIsIDEsIDVdLCBbNSwgMV0sIG5vdEV4cGlyZWQoKSk7XG5cbiAgICB0YWJsZS5mb3JnZXRXcml0ZXIoMSk7XG5cbiAgICBleHBlY3QodGFibGUucm91dGVycy50b0FycmF5KCkpLnRvRXF1YWwoWzEsIDIsIDNdKTtcbiAgICBleHBlY3QodGFibGUucmVhZGVycy50b0FycmF5KCkpLnRvRXF1YWwoWzIsIDEsIDVdKTtcbiAgICBleHBlY3QodGFibGUud3JpdGVycy50b0FycmF5KCkpLnRvRXF1YWwoWzVdKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gYWxsIHNlcnZlcnMgaW4gZGlmZiB3aGVuIG90aGVyIHRhYmxlIGlzIGVtcHR5JywgKCkgPT4ge1xuICAgIGNvbnN0IG9sZFRhYmxlID0gY3JlYXRlVGFibGUoWzEsIDJdLCBbMywgNF0sIFs1LCA2XSwgbm90RXhwaXJlZCgpKTtcbiAgICBjb25zdCBuZXdUYWJsZSA9IGNyZWF0ZVRhYmxlKFtdLCBbXSwgW10sIG5vdEV4cGlyZWQoKSk7XG5cbiAgICBjb25zdCBzZXJ2ZXJzID0gb2xkVGFibGUuc2VydmVyc0RpZmYobmV3VGFibGUpO1xuXG4gICAgZXhwZWN0KHNlcnZlcnMpLnRvRXF1YWwoWzEsIDIsIDMsIDQsIDUsIDZdKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBubyBzZXJ2ZXJzIGluIGRpZmYgd2hlbiB0aGlzIHRhYmxlIGlzIGVtcHR5JywgKCkgPT4ge1xuICAgIGNvbnN0IG9sZFRhYmxlID0gY3JlYXRlVGFibGUoW10sIFtdLCBbXSwgbm90RXhwaXJlZCgpKTtcbiAgICBjb25zdCBuZXdUYWJsZSA9IGNyZWF0ZVRhYmxlKFsxLCAyXSwgWzMsIDRdLCBbNSwgNl0sIG5vdEV4cGlyZWQoKSk7XG5cbiAgICBjb25zdCBzZXJ2ZXJzID0gb2xkVGFibGUuc2VydmVyc0RpZmYobmV3VGFibGUpO1xuXG4gICAgZXhwZWN0KHNlcnZlcnMpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGluY2x1ZGUgZGlmZmVyZW50IHJvdXRlcnMgaW4gc2VydmVycyBkaWZmJywgKCkgPT4ge1xuICAgIGNvbnN0IG9sZFRhYmxlID0gY3JlYXRlVGFibGUoWzEsIDcsIDIsIDQyXSwgWzMsIDRdLCBbNSwgNl0sIG5vdEV4cGlyZWQoKSk7XG4gICAgY29uc3QgbmV3VGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFszLCA0XSwgWzUsIDZdLCBub3RFeHBpcmVkKCkpO1xuXG4gICAgY29uc3Qgc2VydmVycyA9IG9sZFRhYmxlLnNlcnZlcnNEaWZmKG5ld1RhYmxlKTtcblxuICAgIGV4cGVjdChzZXJ2ZXJzKS50b0VxdWFsKFs3LCA0Ml0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGluY2x1ZGUgZGlmZmVyZW50IHJlYWRlcnMgaW4gc2VydmVycyBkaWZmJywgKCkgPT4ge1xuICAgIGNvbnN0IG9sZFRhYmxlID0gY3JlYXRlVGFibGUoWzEsIDJdLCBbMywgNywgNCwgNDJdLCBbNSwgNl0sIG5vdEV4cGlyZWQoKSk7XG4gICAgY29uc3QgbmV3VGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFszLCA0XSwgWzUsIDZdLCBub3RFeHBpcmVkKCkpO1xuXG4gICAgY29uc3Qgc2VydmVycyA9IG9sZFRhYmxlLnNlcnZlcnNEaWZmKG5ld1RhYmxlKTtcblxuICAgIGV4cGVjdChzZXJ2ZXJzKS50b0VxdWFsKFs3LCA0Ml0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGluY2x1ZGUgZGlmZmVyZW50IHdyaXRlcnMgaW4gc2VydmVycyBkaWZmJywgKCkgPT4ge1xuICAgIGNvbnN0IG9sZFRhYmxlID0gY3JlYXRlVGFibGUoWzEsIDJdLCBbMywgNF0sIFs1LCA3LCA2LCA0Ml0sIG5vdEV4cGlyZWQoKSk7XG4gICAgY29uc3QgbmV3VGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFszLCA0XSwgWzUsIDZdLCBub3RFeHBpcmVkKCkpO1xuXG4gICAgY29uc3Qgc2VydmVycyA9IG9sZFRhYmxlLnNlcnZlcnNEaWZmKG5ld1RhYmxlKTtcblxuICAgIGV4cGVjdChzZXJ2ZXJzKS50b0VxdWFsKFs3LCA0Ml0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGluY2x1ZGUgZGlmZmVyZW50IHNlcnZlcnMgaW4gZGlmZicsICgpID0+IHtcbiAgICBjb25zdCBvbGRUYWJsZSA9IGNyZWF0ZVRhYmxlKFsxLCAyLCAxMV0sIFsyMiwgMywgMzMsIDRdLCBbNSwgNDQsIDZdLCBub3RFeHBpcmVkKCkpO1xuICAgIGNvbnN0IG5ld1RhYmxlID0gY3JlYXRlVGFibGUoWzFdLCBbMiwgMywgNCwgNl0sIFs1XSwgbm90RXhwaXJlZCgpKTtcblxuICAgIGNvbnN0IHNlcnZlcnMgPSBvbGRUYWJsZS5zZXJ2ZXJzRGlmZihuZXdUYWJsZSk7XG5cbiAgICBleHBlY3Qoc2VydmVycykudG9FcXVhbChbMTEsIDIyLCAzMywgNDRdKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gZXhwaXJlZCgpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKSAtIDM2MDA7IC8vIGV4cGlyZWQgYW4gaG91ciBhZ29cbiAgfVxuXG4gIGZ1bmN0aW9uIG5vdEV4cGlyZWQoKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCkgKyAzNjAwOyAvLyB3aWxsIGV4cGlyZSBpbiBhbiBob3VyXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVUYWJsZShyb3V0ZXJzLCByZWFkZXJzLCB3cml0ZXJzLCBleHBpcmF0aW9uVGltZSkge1xuICAgIGNvbnN0IHJvdXRlcnNBcnJheSA9IG5ldyBSb3VuZFJvYmluQXJyYXkocm91dGVycyk7XG4gICAgY29uc3QgcmVhZGVyc0FycmF5ID0gbmV3IFJvdW5kUm9iaW5BcnJheShyZWFkZXJzKTtcbiAgICBjb25zdCB3cml0ZXJzQXJyYXkgPSBuZXcgUm91bmRSb2JpbkFycmF5KHdyaXRlcnMpO1xuICAgIGNvbnN0IGV4cGlyYXRpb24gPSBpbnQoZXhwaXJhdGlvblRpbWUpO1xuICAgIHJldHVybiBuZXcgUm91dGluZ1RhYmxlKHJvdXRlcnNBcnJheSwgcmVhZGVyc0FycmF5LCB3cml0ZXJzQXJyYXksIGV4cGlyYXRpb24pO1xuICB9XG5cbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBTdHJlYW1PYnNlcnZlciBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZXJuYWwvc3RyZWFtLW9ic2VydmVyJztcbmltcG9ydCBGYWtlQ29ubmVjdGlvbiBmcm9tICcuL2Zha2UtY29ubmVjdGlvbic7XG5cbmNvbnN0IE5PX09QID0gKCkgPT4ge1xufTtcblxuZGVzY3JpYmUoJ1N0cmVhbU9ic2VydmVyJywgKCkgPT4ge1xuXG4gIGl0KCdyZW1lbWJlcnMgcmVzb2x2ZWQgY29ubmVjdGlvbicsICgpID0+IHtcbiAgICBjb25zdCBzdHJlYW1PYnNlcnZlciA9IG5ld1N0cmVhbU9ic2VydmVyKCk7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IG5ldyBGYWtlQ29ubmVjdGlvbigpO1xuXG4gICAgc3RyZWFtT2JzZXJ2ZXIucmVzb2x2ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7XG5cbiAgICBleHBlY3Qoc3RyZWFtT2JzZXJ2ZXIuX2Nvbm4pLnRvQmUoY29ubmVjdGlvbik7XG4gIH0pO1xuXG4gIGl0KCdyZW1lbWJlcnMgc3Vic2NyaWJlcicsICgpID0+IHtcbiAgICBjb25zdCBzdHJlYW1PYnNlcnZlciA9IG5ld1N0cmVhbU9ic2VydmVyKCk7XG4gICAgY29uc3Qgc3Vic2NyaWJlciA9IG5ld09ic2VydmVyKCk7XG5cbiAgICBzdHJlYW1PYnNlcnZlci5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG5cbiAgICBleHBlY3Qoc3RyZWFtT2JzZXJ2ZXIuX29ic2VydmVyKS50b0JlKHN1YnNjcmliZXIpO1xuICB9KTtcblxuICBpdCgncGFzc2VzIHJlY2VpdmVkIHJlY29yZHMgdG8gdGhlIHN1YnNjcmliZXInLCAoKSA9PiB7XG4gICAgY29uc3Qgc3RyZWFtT2JzZXJ2ZXIgPSBuZXdTdHJlYW1PYnNlcnZlcigpO1xuICAgIGNvbnN0IHJlY2VpdmVkUmVjb3JkcyA9IFtdO1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3T2JzZXJ2ZXIocmVjb3JkID0+IHtcbiAgICAgIHJlY2VpdmVkUmVjb3Jkcy5wdXNoKHJlY29yZCk7XG4gICAgfSk7XG5cbiAgICBzdHJlYW1PYnNlcnZlci5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuICAgIHN0cmVhbU9ic2VydmVyLm9uQ29tcGxldGVkKHtmaWVsZHM6IFsnQScsICdCJywgJ0MnXX0pO1xuXG4gICAgc3RyZWFtT2JzZXJ2ZXIub25OZXh0KFsxLCAyLCAzXSk7XG4gICAgc3RyZWFtT2JzZXJ2ZXIub25OZXh0KFsxMSwgMjIsIDMzXSk7XG4gICAgc3RyZWFtT2JzZXJ2ZXIub25OZXh0KFsxMTEsIDIyMiwgMzMzXSk7XG5cbiAgICBleHBlY3QocmVjZWl2ZWRSZWNvcmRzLmxlbmd0aCkudG9FcXVhbCgzKTtcbiAgICBleHBlY3QocmVjZWl2ZWRSZWNvcmRzWzBdLnRvT2JqZWN0KCkpLnRvRXF1YWwoeydBJzogMSwgJ0InOiAyLCAnQyc6IDN9KTtcbiAgICBleHBlY3QocmVjZWl2ZWRSZWNvcmRzWzFdLnRvT2JqZWN0KCkpLnRvRXF1YWwoeydBJzogMTEsICdCJzogMjIsICdDJzogMzN9KTtcbiAgICBleHBlY3QocmVjZWl2ZWRSZWNvcmRzWzJdLnRvT2JqZWN0KCkpLnRvRXF1YWwoeydBJzogMTExLCAnQic6IDIyMiwgJ0MnOiAzMzN9KTtcbiAgfSk7XG5cbiAgaXQoJ3F1ZXVlcyByZWNlaXZlZCByZWNvcmQgd2hlbiBubyBzdWJzY3JpYmVyJywgKCkgPT4ge1xuICAgIGNvbnN0IHN0cmVhbU9ic2VydmVyID0gbmV3U3RyZWFtT2JzZXJ2ZXIoKTtcblxuICAgIHN0cmVhbU9ic2VydmVyLm9uQ29tcGxldGVkKHtmaWVsZHM6IFsnQScsICdCJywgJ0MnXX0pO1xuXG4gICAgc3RyZWFtT2JzZXJ2ZXIub25OZXh0KFsxMTExLCAyMjIyLCAzMzMzXSk7XG4gICAgc3RyZWFtT2JzZXJ2ZXIub25OZXh0KFsxMTEsIDIyMiwgMzMzXSk7XG4gICAgc3RyZWFtT2JzZXJ2ZXIub25OZXh0KFsxMSwgMjIsIDMzXSk7XG4gICAgc3RyZWFtT2JzZXJ2ZXIub25OZXh0KFsxLCAyLCAzXSk7XG5cbiAgICBjb25zdCBxdWV1ZWRSZWNvcmRzID0gc3RyZWFtT2JzZXJ2ZXIuX3F1ZXVlZFJlY29yZHM7XG5cbiAgICBleHBlY3QocXVldWVkUmVjb3Jkcy5sZW5ndGgpLnRvRXF1YWwoNCk7XG4gICAgZXhwZWN0KHF1ZXVlZFJlY29yZHNbMF0udG9PYmplY3QoKSkudG9FcXVhbCh7J0EnOiAxMTExLCAnQic6IDIyMjIsICdDJzogMzMzM30pO1xuICAgIGV4cGVjdChxdWV1ZWRSZWNvcmRzWzFdLnRvT2JqZWN0KCkpLnRvRXF1YWwoeydBJzogMTExLCAnQic6IDIyMiwgJ0MnOiAzMzN9KTtcbiAgICBleHBlY3QocXVldWVkUmVjb3Jkc1syXS50b09iamVjdCgpKS50b0VxdWFsKHsnQSc6IDExLCAnQic6IDIyLCAnQyc6IDMzfSk7XG4gICAgZXhwZWN0KHF1ZXVlZFJlY29yZHNbM10udG9PYmplY3QoKSkudG9FcXVhbCh7J0EnOiAxLCAnQic6IDIsICdDJzogM30pO1xuICB9KTtcblxuICBpdCgncGFzc2VzIHJlY2VpdmVkIGVycm9yIHRoZSBzdWJzY3JpYmVyJywgKCkgPT4ge1xuICAgIGNvbnN0IHN0cmVhbU9ic2VydmVyID0gbmV3U3RyZWFtT2JzZXJ2ZXIoKTtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignSW52YWxpZCBDeXBoZXIgc3RhdGVtZW50Jyk7XG5cbiAgICBsZXQgcmVjZWl2ZWRFcnJvciA9IG51bGw7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXdPYnNlcnZlcihOT19PUCwgZXJyb3IgPT4ge1xuICAgICAgcmVjZWl2ZWRFcnJvciA9IGVycm9yO1xuICAgIH0pO1xuXG4gICAgc3RyZWFtT2JzZXJ2ZXIuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICBzdHJlYW1PYnNlcnZlci5vbkVycm9yKGVycm9yKTtcblxuICAgIGV4cGVjdChyZWNlaXZlZEVycm9yKS50b0JlKGVycm9yKTtcbiAgfSk7XG5cbiAgaXQoJ3Bhc3NlcyBleGlzdGluZyBlcnJvciB0byBhIG5ldyBzdWJzY3JpYmVyJywgKCkgPT4ge1xuICAgIGNvbnN0IHN0cmVhbU9ic2VydmVyID0gbmV3U3RyZWFtT2JzZXJ2ZXIoKTtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignSW52YWxpZCBDeXBoZXIgc3RhdGVtZW50Jyk7XG5cbiAgICBzdHJlYW1PYnNlcnZlci5vbkVycm9yKGVycm9yKTtcblxuICAgIHN0cmVhbU9ic2VydmVyLnN1YnNjcmliZShuZXdPYnNlcnZlcihOT19PUCwgcmVjZWl2ZWRFcnJvciA9PiB7XG4gICAgICBleHBlY3QocmVjZWl2ZWRFcnJvcikudG9CZShlcnJvcik7XG4gICAgfSkpO1xuICB9KTtcblxuICBpdCgncGFzc2VzIHF1ZXVlZCByZWNvcmRzIHRvIGEgbmV3IHN1YnNjcmliZXInLCAoKSA9PiB7XG4gICAgY29uc3Qgc3RyZWFtT2JzZXJ2ZXIgPSBuZXdTdHJlYW1PYnNlcnZlcigpO1xuXG4gICAgc3RyZWFtT2JzZXJ2ZXIub25Db21wbGV0ZWQoe2ZpZWxkczogWydBJywgJ0InLCAnQyddfSk7XG5cbiAgICBzdHJlYW1PYnNlcnZlci5vbk5leHQoWzEsIDIsIDNdKTtcbiAgICBzdHJlYW1PYnNlcnZlci5vbk5leHQoWzExLCAyMiwgMzNdKTtcbiAgICBzdHJlYW1PYnNlcnZlci5vbk5leHQoWzExMSwgMjIyLCAzMzNdKTtcblxuICAgIGNvbnN0IHJlY2VpdmVkUmVjb3JkcyA9IFtdO1xuICAgIHN0cmVhbU9ic2VydmVyLnN1YnNjcmliZShuZXdPYnNlcnZlcihyZWNvcmQgPT4ge1xuICAgICAgcmVjZWl2ZWRSZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgICB9KSk7XG5cbiAgICBleHBlY3QocmVjZWl2ZWRSZWNvcmRzLmxlbmd0aCkudG9FcXVhbCgzKTtcbiAgICBleHBlY3QocmVjZWl2ZWRSZWNvcmRzWzBdLnRvT2JqZWN0KCkpLnRvRXF1YWwoeydBJzogMSwgJ0InOiAyLCAnQyc6IDN9KTtcbiAgICBleHBlY3QocmVjZWl2ZWRSZWNvcmRzWzFdLnRvT2JqZWN0KCkpLnRvRXF1YWwoeydBJzogMTEsICdCJzogMjIsICdDJzogMzN9KTtcbiAgICBleHBlY3QocmVjZWl2ZWRSZWNvcmRzWzJdLnRvT2JqZWN0KCkpLnRvRXF1YWwoeydBJzogMTExLCAnQic6IDIyMiwgJ0MnOiAzMzN9KTtcbiAgfSk7XG5cbiAgaXQoJ3Bhc3NlcyBleGlzdGluZyBtZXRhZGF0YSB0byBhIG5ldyBzdWJzY3JpYmVyJywgKCkgPT4ge1xuICAgIGNvbnN0IHN0cmVhbU9ic2VydmVyID0gbmV3U3RyZWFtT2JzZXJ2ZXIoKTtcblxuICAgIHN0cmVhbU9ic2VydmVyLm9uQ29tcGxldGVkKHtmaWVsZHM6IFsnRm9vJywgJ0JhcicsICdCYXonLCAnUXV4J119KTtcbiAgICBzdHJlYW1PYnNlcnZlci5vbkNvbXBsZXRlZCh7bWV0YURhdGFGaWVsZDE6ICd2YWx1ZTEnLCBtZXRhRGF0YUZpZWxkMjogJ3ZhbHVlMid9KTtcblxuICAgIGxldCByZWNlaXZlZE1ldGFEYXRhID0gbnVsbDtcbiAgICBzdHJlYW1PYnNlcnZlci5zdWJzY3JpYmUobmV3T2JzZXJ2ZXIoTk9fT1AsIE5PX09QLCBtZXRhRGF0YSA9PiB7XG4gICAgICByZWNlaXZlZE1ldGFEYXRhID0gbWV0YURhdGE7XG4gICAgfSkpO1xuXG4gICAgZXhwZWN0KHJlY2VpdmVkTWV0YURhdGEpLnRvRXF1YWwoe21ldGFEYXRhRmllbGQxOiAndmFsdWUxJywgbWV0YURhdGFGaWVsZDI6ICd2YWx1ZTInfSk7XG4gIH0pO1xuXG59KTtcblxuZnVuY3Rpb24gbmV3U3RyZWFtT2JzZXJ2ZXIoKSB7XG4gIHJldHVybiBuZXcgU3RyZWFtT2JzZXJ2ZXIoKTtcbn1cblxuZnVuY3Rpb24gbmV3T2JzZXJ2ZXIob25OZXh0ID0gTk9fT1AsIG9uRXJyb3IgPSBOT19PUCwgb25Db21wbGV0ZWQgPSBOT19PUCkge1xuICByZXR1cm4ge1xuICAgIG9uTmV4dDogb25OZXh0LFxuICAgIG9uRXJyb3I6IG9uRXJyb3IsXG4gICAgb25Db21wbGV0ZWQ6IG9uQ29tcGxldGVkXG4gIH07XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNsYXNzIFNldFRpbWVvdXRNb2NrIHtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9jbGVhclN0YXRlKCk7XG4gIH1cblxuICBpbnN0YWxsKCkge1xuICAgIHRoaXMuX29yaWdpbmFsU2V0VGltZW91dCA9IGdsb2JhbC5zZXRUaW1lb3V0O1xuICAgIGdsb2JhbC5zZXRUaW1lb3V0ID0gKGNvZGUsIGRlbGF5KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX3BhdXNlZCkge1xuICAgICAgICBjb2RlKCk7XG4gICAgICAgIHRoaXMuaW52b2NhdGlvbkRlbGF5cy5wdXNoKGRlbGF5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl90aW1lb3V0SWRDb3VudGVyKys7XG4gICAgfTtcblxuICAgIHRoaXMuX29yaWdpbmFsQ2xlYXJUaW1lb3V0ID0gZ2xvYmFsLmNsZWFyVGltZW91dDtcbiAgICBnbG9iYWwuY2xlYXJUaW1lb3V0ID0gaWQgPT4ge1xuICAgICAgdGhpcy5jbGVhcmVkVGltZW91dHMucHVzaChpZCk7XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcGF1c2UoKSB7XG4gICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcbiAgfVxuXG4gIHVuaW5zdGFsbCgpIHtcbiAgICBnbG9iYWwuc2V0VGltZW91dCA9IHRoaXMuX29yaWdpbmFsU2V0VGltZW91dDtcbiAgICBnbG9iYWwuY2xlYXJUaW1lb3V0ID0gdGhpcy5fb3JpZ2luYWxDbGVhclRpbWVvdXQ7XG4gICAgdGhpcy5fY2xlYXJTdGF0ZSgpO1xuICB9XG5cbiAgc2V0VGltZW91dE9yaWdpbmFsKGNvZGUsIGRlbGF5KSB7XG4gICAgcmV0dXJuIHRoaXMuX29yaWdpbmFsU2V0VGltZW91dC5jYWxsKG51bGwsIGNvZGUsIGRlbGF5KTtcbiAgfVxuXG4gIF9jbGVhclN0YXRlKCkge1xuICAgIHRoaXMuX29yaWdpbmFsU2V0VGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5fb3JpZ2luYWxDbGVhclRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3RpbWVvdXRJZENvdW50ZXIgPSAwO1xuXG4gICAgdGhpcy5pbnZvY2F0aW9uRGVsYXlzID0gW107XG4gICAgdGhpcy5jbGVhcmVkVGltZW91dHMgPSBbXTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgc2V0VGltZW91dE1vY2sgPSBuZXcgU2V0VGltZW91dE1vY2soKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGhpamFja05leHREYXRlTm93Q2FsbChuZXdWYWx1ZSkge1xuICBjb25zdCBvcmlnaW5hbERhdGUgPSBnbG9iYWwuRGF0ZTtcbiAgZ2xvYmFsLkRhdGUgPSBuZXcgRmFrZURhdGUob3JpZ2luYWxEYXRlLCBuZXdWYWx1ZSk7XG59XG5cbmNsYXNzIEZha2VEYXRlIHtcblxuICBjb25zdHJ1Y3RvcihvcmlnaW5hbERhdGUsIG5leHROb3dWYWx1ZSkge1xuICAgIHRoaXMuX29yaWdpbmFsRGF0ZSA9IG9yaWdpbmFsRGF0ZTtcbiAgICB0aGlzLl9uZXh0Tm93VmFsdWUgPSBuZXh0Tm93VmFsdWU7XG4gIH1cblxuICBub3coKSB7XG4gICAgZ2xvYmFsLkRhdGUgPSB0aGlzLl9vcmlnaW5hbERhdGU7XG4gICAgcmV0dXJuIHRoaXMuX25leHROb3dWYWx1ZTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgTm9kZUNoYW5uZWwgPSByZXF1aXJlKCcuLi8uLi9saWIvdjEvaW50ZXJuYWwvY2gtbm9kZS5qcycpLmRlZmF1bHQ7XG52YXIgbmVvNGogPSByZXF1aXJlKFwiLi4vLi4vbGliL3YxXCIpO1xudmFyIGZzID0gcmVxdWlyZShcImZzXCIpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgaGFzRmVhdHVyZSA9IHJlcXVpcmUoXCIuLi8uLi9saWIvdjEvaW50ZXJuYWwvZmVhdHVyZXNcIikuZGVmYXVsdDtcblxuZGVzY3JpYmUoJ3RydXN0LXNpZ25lZC1jZXJ0aWZpY2F0ZXMnLCBmdW5jdGlvbigpIHtcblxuICB2YXIgZHJpdmVyO1xuICB2YXIgbG9nO1xuICBiZWZvcmVFYWNoKGZ1bmN0aW9uKCkge1xuICAgIGxvZyA9IG11dGVDb25zb2xlTG9nKCk7XG4gIH0pO1xuICBpdCgnc2hvdWxkIHJlamVjdCB1bmtub3duIGNlcnRpZmljYXRlcycsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAvLyBBc3N1bWluZyB3ZSBvbmx5IHJ1biB0aGlzIHRlc3Qgb24gTm9kZUpTXG4gICAgaWYoICFOb2RlQ2hhbm5lbC5hdmFpbGFibGUgKSB7XG4gICAgICBkb25lKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2l2ZW5cbiAgICBkcml2ZXIgPSBuZW80ai5kcml2ZXIoXCJib2x0Oi8vbG9jYWxob3N0XCIsIG5lbzRqLmF1dGguYmFzaWMoXCJuZW80alwiLCBcIm5lbzRqXCIpLCB7XG4gICAgICBlbmNyeXB0ZWQ6IFwiRU5DUllQVElPTl9PTlwiLFxuICAgICAgdHJ1c3Q6IFwiVFJVU1RfU0lHTkVEX0NFUlRJRklDQVRFU1wiLFxuICAgICAgdHJ1c3RlZENlcnRpZmljYXRlczogW1widGVzdC9yZXNvdXJjZXMvcmFuZG9tLmNlcnRpZmljYXRlXCJdXG4gICAgfSk7XG5cbiAgICAvLyBXaGVuXG4gICAgZHJpdmVyLnNlc3Npb24oKS5ydW4oIFwiUkVUVVJOIDFcIikuY2F0Y2goIGZ1bmN0aW9uKGVycikge1xuICAgICAgZXhwZWN0KCBlcnIubWVzc2FnZSApLnRvQ29udGFpbiggXCJTZXJ2ZXIgY2VydGlmaWNhdGUgaXMgbm90IHRydXN0ZWRcIiApO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFjY2VwdCBrbm93biBjZXJ0aWZpY2F0ZXMnLCBmdW5jdGlvbihkb25lKSB7XG4gICAgLy8gQXNzdW1pbmcgd2Ugb25seSBydW4gdGhpcyB0ZXN0IG9uIE5vZGVKUyB3aXRoIFRPRlUgc3VwcG9ydFxuICAgIGlmKCAhTm9kZUNoYW5uZWwuYXZhaWxhYmxlICkge1xuICAgICAgZG9uZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdpdmVuXG4gICAgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdDovL2xvY2FsaG9zdFwiLCBuZW80ai5hdXRoLmJhc2ljKFwibmVvNGpcIiwgXCJuZW80alwiKSwge1xuICAgICAgZW5jcnlwdGVkOiBcIkVOQ1JZUFRJT05fT05cIixcbiAgICAgIHRydXN0OiBcIlRSVVNUX1NJR05FRF9DRVJUSUZJQ0FURVNcIixcbiAgICAgIHRydXN0ZWRDZXJ0aWZpY2F0ZXM6IFtcImJ1aWxkL25lbzRqL2NlcnRpZmljYXRlcy9uZW80ai5jZXJ0XCJdXG4gICAgfSk7XG5cbiAgICAvLyBXaGVuXG4gICAgZHJpdmVyLnNlc3Npb24oKS5ydW4oIFwiUkVUVVJOIDFcIikudGhlbiggZG9uZSApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGhhbmRsZSBtdWx0aXBsZSBjZXJ0aWZpY2F0ZXMnLCBmdW5jdGlvbihkb25lKSB7XG4gICAgLy8gQXNzdW1pbmcgd2Ugb25seSBydW4gdGhpcyB0ZXN0IG9uIE5vZGVKUyB3aXRoIFRPRlUgc3VwcG9ydFxuICAgIGlmKCAhTm9kZUNoYW5uZWwuYXZhaWxhYmxlICkge1xuICAgICAgZG9uZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdpdmVuXG4gICAgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdDovL2xvY2FsaG9zdFwiLCBuZW80ai5hdXRoLmJhc2ljKFwibmVvNGpcIiwgXCJuZW80alwiKSwge1xuICAgICAgZW5jcnlwdGVkOiB0cnVlLFxuICAgICAgdHJ1c3Q6IFwiVFJVU1RfU0lHTkVEX0NFUlRJRklDQVRFU1wiLFxuICAgICAgdHJ1c3RlZENlcnRpZmljYXRlczogW1wiYnVpbGQvbmVvNGovY2VydGlmaWNhdGVzL25lbzRqLmNlcnRcIiwgXCJidWlsZC9uZW80ai9jZXJ0aWZpY2F0ZXMvbmVvNGouY2VydFwiXVxuICAgIH0pO1xuXG4gICAgLy8gV2hlblxuICAgIGRyaXZlci5zZXNzaW9uKCkucnVuKCBcIlJFVFVSTiAxXCIpLnRoZW4oIGRvbmUgKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uKCl7XG4gICAgaWYoIGRyaXZlciApIHtcbiAgICAgIGRyaXZlci5jbG9zZSgpO1xuICAgIH1cbiAgICB1bk11dGVDb25zb2xlTG9nKGxvZyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCd0cnVzdC1hbGwtY2VydGlmaWNhdGVzJywgZnVuY3Rpb24gKCkge1xuXG4gIHZhciBkcml2ZXI7XG4gIGl0KCdzaG91bGQgd29yayB3aXRoIGRlZmF1bHQgY2VydGlmaWNhdGUnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgIC8vIEFzc3VtaW5nIHdlIG9ubHkgcnVuIHRoaXMgdGVzdCBvbiBOb2RlSlMgd2l0aCBUQUMgc3VwcG9ydFxuICAgIGlmICghaGFzRmVhdHVyZShcInRydXN0X2FsbF9jZXJ0aWZpY2F0ZXNcIikpIHtcbiAgICAgIGRvbmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHaXZlblxuICAgIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RcIiwgbmVvNGouYXV0aC5iYXNpYyhcIm5lbzRqXCIsIFwibmVvNGpcIiksIHtcbiAgICAgIGVuY3J5cHRlZDogXCJFTkNSWVBUSU9OX09OXCIsXG4gICAgICB0cnVzdDogXCJUUlVTVF9BTExfQ0VSVElGSUNBVEVTXCJcbiAgICB9KTtcblxuICAgIC8vIFdoZW5cbiAgICBkcml2ZXIuc2Vzc2lvbigpLnJ1bihcIlJFVFVSTiAxXCIpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzWzBdLmdldCgwKS50b051bWJlcigpKS50b0JlKDEpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIGlmIChkcml2ZXIpIHtcbiAgICAgIGRyaXZlci5jbG9zZSgpO1xuICAgIH1cbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3RydXN0LWN1c3RvbS1jYS1zaWduZWQtY2VydGlmaWNhdGVzJywgZnVuY3Rpb24oKSB7XG5cbiAgdmFyIGRyaXZlcjtcbiAgaXQoJ3Nob3VsZCByZWplY3QgdW5rbm93biBjZXJ0aWZpY2F0ZXMnLCBmdW5jdGlvbihkb25lKSB7XG4gICAgLy8gQXNzdW1pbmcgd2Ugb25seSBydW4gdGhpcyB0ZXN0IG9uIE5vZGVKU1xuICAgIGlmKCAhTm9kZUNoYW5uZWwuYXZhaWxhYmxlICkge1xuICAgICAgZG9uZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdpdmVuXG4gICAgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdDovL2xvY2FsaG9zdFwiLCBuZW80ai5hdXRoLmJhc2ljKFwibmVvNGpcIiwgXCJuZW80alwiKSwge1xuICAgICAgZW5jcnlwdGVkOiB0cnVlLFxuICAgICAgdHJ1c3Q6IFwiVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVNcIixcbiAgICAgIHRydXN0ZWRDZXJ0aWZpY2F0ZXM6IFtcInRlc3QvcmVzb3VyY2VzL3JhbmRvbS5jZXJ0aWZpY2F0ZVwiXVxuICAgIH0pO1xuXG4gICAgLy8gV2hlblxuICAgIGRyaXZlci5zZXNzaW9uKCkucnVuKCBcIlJFVFVSTiAxXCIpLmNhdGNoKCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIGV4cGVjdCggZXJyLm1lc3NhZ2UgKS50b0NvbnRhaW4oIFwiU2VydmVyIGNlcnRpZmljYXRlIGlzIG5vdCB0cnVzdGVkXCIgKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhY2NlcHQga25vd24gY2VydGlmaWNhdGVzJywgZnVuY3Rpb24oZG9uZSkge1xuICAgIC8vIEFzc3VtaW5nIHdlIG9ubHkgcnVuIHRoaXMgdGVzdCBvbiBOb2RlSlMgd2l0aCBUT0ZVIHN1cHBvcnRcbiAgICBpZiggIU5vZGVDaGFubmVsLmF2YWlsYWJsZSApIHtcbiAgICAgIGRvbmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHaXZlblxuICAgIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RcIiwgbmVvNGouYXV0aC5iYXNpYyhcIm5lbzRqXCIsIFwibmVvNGpcIiksIHtcbiAgICAgIGVuY3J5cHRlZDogdHJ1ZSxcbiAgICAgIHRydXN0OiBcIlRSVVNUX0NVU1RPTV9DQV9TSUdORURfQ0VSVElGSUNBVEVTXCIsXG4gICAgICB0cnVzdGVkQ2VydGlmaWNhdGVzOiBbXCJidWlsZC9uZW80ai9jZXJ0aWZpY2F0ZXMvbmVvNGouY2VydFwiXVxuICAgIH0pO1xuXG4gICAgLy8gV2hlblxuICAgIGRyaXZlci5zZXNzaW9uKCkucnVuKCBcIlJFVFVSTiAxXCIpLnRoZW4oIGRvbmUgKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uKCl7XG4gICAgaWYoIGRyaXZlciApIHtcbiAgICAgIGRyaXZlci5jbG9zZSgpO1xuICAgIH1cbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3RydXN0LXN5c3RlbS1jYS1zaWduZWQtY2VydGlmaWNhdGVzJywgZnVuY3Rpb24oKSB7XG5cbiAgdmFyIGRyaXZlcjtcblxuICBpdCgnc2hvdWxkIHJlamVjdCB1bmtub3duIGNlcnRpZmljYXRlcycsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAvLyBBc3N1bWluZyB3ZSBvbmx5IHJ1biB0aGlzIHRlc3Qgb24gTm9kZUpTXG4gICAgaWYoICFOb2RlQ2hhbm5lbC5hdmFpbGFibGUgKSB7XG4gICAgICBkb25lKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2l2ZW5cbiAgICBkcml2ZXIgPSBuZW80ai5kcml2ZXIoXCJib2x0Oi8vbG9jYWxob3N0XCIsIG5lbzRqLmF1dGguYmFzaWMoXCJuZW80alwiLCBcIm5lbzRqXCIpLCB7XG4gICAgICBlbmNyeXB0ZWQ6IHRydWUsXG4gICAgICB0cnVzdDogXCJUUlVTVF9TWVNURU1fQ0FfU0lHTkVEX0NFUlRJRklDQVRFU1wiXG4gICAgfSk7XG5cbiAgICAvLyBXaGVuXG4gICAgZHJpdmVyLnNlc3Npb24oKS5ydW4oIFwiUkVUVVJOIDFcIikuY2F0Y2goIGZ1bmN0aW9uKGVycikge1xuICAgICAgZXhwZWN0KCBlcnIubWVzc2FnZSApLnRvQ29udGFpbiggXCJTZXJ2ZXIgY2VydGlmaWNhdGUgaXMgbm90IHRydXN0ZWRcIiApO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgndHJ1c3Qtb24tZmlyc3QtdXNlJywgZnVuY3Rpb24oKSB7XG5cbiAgdmFyIGRyaXZlcjtcbiAgdmFyIGxvZztcbiAgYmVmb3JlRWFjaChmdW5jdGlvbigpIHtcbiAgICBsb2cgPSBtdXRlQ29uc29sZUxvZygpO1xuICB9KTtcbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uKCl7XG4gICAgdW5NdXRlQ29uc29sZUxvZyhsb2cpO1xuICAgIGlmKCBkcml2ZXIgKSB7XG4gICAgICBkcml2ZXIuY2xvc2UoKTtcbiAgICB9XG4gIH0pO1xuICBpdChcInNob3VsZCBjcmVhdGUga25vd25faG9zdHMgZmlsZSBpbmNsdWRpbmcgZnVsbCBwYXRoIGlmIGl0IGRvZXNuJ3QgZXhpc3RcIiwgZnVuY3Rpb24oZG9uZSkge1xuICAgIC8vIEFzc3VtaW5nIHdlIG9ubHkgcnVuIHRoaXMgdGVzdCBvbiBOb2RlSlMgd2l0aCBUT0ZVIHN1cHBvcnRcbiAgICBpZiggIWhhc0ZlYXR1cmUoXCJ0cnVzdF9vbl9maXJzdF91c2VcIikgKSB7XG4gICAgICBkb25lKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2l2ZW5cbiAgICAvLyBOb24gZXhpc3RpbmcgZGlyZWN0b3J5XG4gICAgdmFyIGtub3duSG9zdHNEaXIgPSBwYXRoLmpvaW4oXCJidWlsZFwiLCBcImhvc3RzXCIpO1xuICAgIHZhciBrbm93bkhvc3RzUGF0aCA9IHBhdGguam9pbihrbm93bkhvc3RzRGlyLCBcImtub3duX2hvc3RzXCIpO1xuICAgIHRyeSB7XG4gICAgICBmcy51bmxpbmtTeW5jKGtub3duSG9zdHNQYXRoKTtcbiAgICB9IGNhdGNoIChfKSB7IH1cbiAgICB0cnkge1xuICAgICAgZnMucm1kaXJTeW5jKGtub3duSG9zdHNEaXIpO1xuICAgIH0gY2F0Y2ggKF8pIHsgfVxuXG4gICAgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdDovL2xvY2FsaG9zdFwiLCBuZW80ai5hdXRoLmJhc2ljKFwibmVvNGpcIiwgXCJuZW80alwiKSwge1xuICAgICAgZW5jcnlwdGVkOiB0cnVlLFxuICAgICAgdHJ1c3Q6IFwiVFJVU1RfT05fRklSU1RfVVNFXCIsXG4gICAgICBrbm93bkhvc3RzOiBrbm93bkhvc3RzUGF0aFxuICAgIH0pO1xuXG4gICAgLy8gV2hlblxuICAgIGRyaXZlci5zZXNzaW9uKCkucnVuKCBcIlJFVFVSTiAxXCIpLnRoZW4oIGZ1bmN0aW9uKCkge1xuICAgICAgLy8gVGhlbiB3ZSBnZXQgdG8gaGVyZS5cbiAgICAgIC8vIEFuZCB0aGVuIHRoZSBrbm93bl9ob3N0cyBmaWxlIHNob3VsZCBoYXZlIGJlZW4gY3JlYXRlZFxuICAgICAgZXhwZWN0KCBmdW5jdGlvbigpIHsgZnMuYWNjZXNzU3luYyhrbm93bkhvc3RzUGF0aCkgfSkubm90LnRvVGhyb3coKVxuICAgICAgZG9uZSgpO1xuICAgIH0pLmNhdGNoKCBmdW5jdGlvbigpe1xuICAgICAgLy8gSnVzdCBoZXJlIHRvIGdyYWNlZnVsbHkgZXhpdCB0ZXN0IG9uIGZhaWx1cmUgc28gd2UgZG9uJ3QgZ2V0IHRpbWVvdXRzXG4gICAgICAvLyB3aGVuIGRvbmUoKSBpc24ndCBjYWxsZWQuXG4gICAgICBleHBlY3QoICd0aGlzJyApLnRvQmUoICd0byBuZXZlciBoYXBwZW4nICk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IHRocm93IGFuIGVycm9yIGlmIHRoZSBob3N0IGZpbGUgY29udGFpbnMgdHdvIGhvc3QgZHVwbGljYXRlcycsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gQXNzdW1pbmcgd2Ugb25seSBydW4gdGhpcyB0ZXN0IG9uIE5vZGVKUyB3aXRoIFRPRlUgc3VwcG9ydFxuICAgIGlmKCAhaGFzRmVhdHVyZShcInRydXN0X29uX2ZpcnN0X3VzZVwiKSApIHtcbiAgICAgIGRvbmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHaXZlblxuICAgIHZhciBrbm93bkhvc3RzUGF0aCA9IFwiYnVpbGQva25vd25faG9zdHNcIjtcbiAgICBpZiggZnMuZXhpc3RzU3luYyhrbm93bkhvc3RzUGF0aCkgKSB7XG4gICAgICBmcy51bmxpbmtTeW5jKGtub3duSG9zdHNQYXRoKTtcbiAgICB9XG5cbiAgICBkcml2ZXIgPSBuZW80ai5kcml2ZXIoXCJib2x0Oi8vbG9jYWxob3N0XCIsIG5lbzRqLmF1dGguYmFzaWMoXCJuZW80alwiLCBcIm5lbzRqXCIpLCB7XG4gICAgICBlbmNyeXB0ZWQ6IHRydWUsXG4gICAgICB0cnVzdDogXCJUUlVTVF9PTl9GSVJTVF9VU0VcIixcbiAgICAgIGtub3duSG9zdHM6IGtub3duSG9zdHNQYXRoXG4gICAgfSk7XG5cbiAgICAvLyBjcmVhdGUgc2Vzc2lvbiBhbmQgdHJhbnNhY3Rpb24gdG8gZm9yY2UgY3JlYXRpb24gb2YgbmV3IGNvbm5lY3Rpb24gYW5kIHdyaXRpbmcgaW50byB0aGUga25vd25Ib3N0IGZpbGVcbiAgICBjb25zdCBzZXNzaW9uID0gZHJpdmVyLnNlc3Npb24oKTtcbiAgICBleHBlY3Qoc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCkpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAvLyBkdXBsaWNhdGUgdGhlIHNhbWUgc2VydmVySWQgdHdpY2VcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHRleHQgPSBmcy5yZWFkRmlsZVN5bmMoa25vd25Ib3N0c1BhdGgsICd1dGY4Jyk7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGtub3duSG9zdHNQYXRoLCB0ZXh0ICsgdGV4dCk7XG4gICAgfSwgMTAwMCk7XG5cbiAgICAvLyBXaGVuXG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIGRyaXZlci5zZXNzaW9uKCkucnVuKFwiUkVUVVJOIHRydWUgQVMgYVwiKS50aGVuKCBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgIC8vIFRoZW4gd2UgZ2V0IHRvIGhlcmUuXG4gICAgICAgIGV4cGVjdCggZGF0YS5yZWNvcmRzWzBdLmdldCgnYScpICkudG9CZSggdHJ1ZSApO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9LCAyMDAwKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhY2NlcHQgcHJldmlvdXNseSB1bi1zZWVuIGhvc3RzJywgZnVuY3Rpb24oZG9uZSkge1xuICAgIC8vIEFzc3VtaW5nIHdlIG9ubHkgcnVuIHRoaXMgdGVzdCBvbiBOb2RlSlMgd2l0aCBUT0ZVIHN1cHBvcnRcbiAgICBpZiggIWhhc0ZlYXR1cmUoXCJ0cnVzdF9vbl9maXJzdF91c2VcIikgKSB7XG4gICAgICBkb25lKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2l2ZW5cbiAgICB2YXIga25vd25Ib3N0c1BhdGggPSBcImJ1aWxkL2tub3duX2hvc3RzXCI7XG4gICAgaWYoIGZzLmV4aXN0c1N5bmMoa25vd25Ib3N0c1BhdGgpICkge1xuICAgICAgZnMudW5saW5rU3luYyhrbm93bkhvc3RzUGF0aCk7XG4gICAgfVxuXG4gICAgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdDovL2xvY2FsaG9zdFwiLCBuZW80ai5hdXRoLmJhc2ljKFwibmVvNGpcIiwgXCJuZW80alwiKSwge1xuICAgICAgZW5jcnlwdGVkOiBcIkVOQ1JZUFRJT05fT05cIixcbiAgICAgIHRydXN0OiBcIlRSVVNUX09OX0ZJUlNUX1VTRVwiLFxuICAgICAga25vd25Ib3N0czoga25vd25Ib3N0c1BhdGhcbiAgICB9KTtcblxuICAgIC8vIFdoZW5cbiAgICBkcml2ZXIuc2Vzc2lvbigpLnJ1biggXCJSRVRVUk4gMVwiKS50aGVuKCBmdW5jdGlvbigpIHtcbiAgICAgIC8vIFRoZW4gd2UgZ2V0IHRvIGhlcmUuXG4gICAgICAvLyBBbmQgdGhlbiB0aGUga25vd25faG9zdHMgZmlsZSBzaG91bGQgaGF2ZSBjb3JyZWN0IGNvbnRlbnRzXG4gICAgICBleHBlY3QoIGZzLnJlYWRGaWxlU3luYyhrbm93bkhvc3RzUGF0aCwgJ3V0ZjgnKSApLnRvQ29udGFpbiggXCJsb2NhbGhvc3Q6NzY4N1wiICk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IGR1cGxpY2F0ZSBmaW5nZXJwcmludCBlbnRyaWVzJywgZnVuY3Rpb24oZG9uZSkge1xuICAgIC8vIEFzc3VtaW5nIHdlIG9ubHkgcnVuIHRoaXMgdGVzdCBvbiBOb2RlSlMgd2l0aCBUT0ZVIHN1cHBvcnRcbiAgICBpZiggIWhhc0ZlYXR1cmUoXCJ0cnVzdF9vbl9maXJzdF91c2VcIikgKSB7XG4gICAgICBkb25lKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2l2ZW5cbiAgICB2YXIga25vd25Ib3N0c1BhdGggPSBcImJ1aWxkL2tub3duX2hvc3RzXCI7XG4gICAgaWYoIGZzLmV4aXN0c1N5bmMoa25vd25Ib3N0c1BhdGgpICkge1xuICAgICAgZnMudW5saW5rU3luYyhrbm93bkhvc3RzUGF0aCk7XG4gICAgfVxuICAgIGZzLndyaXRlRmlsZVN5bmMoa25vd25Ib3N0c1BhdGgsICcnKTtcblxuICAgIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RcIiwgbmVvNGouYXV0aC5iYXNpYyhcIm5lbzRqXCIsIFwibmVvNGpcIiksIHtcbiAgICAgIGVuY3J5cHRlZDogdHJ1ZSxcbiAgICAgIHRydXN0OiBcIlRSVVNUX09OX0ZJUlNUX1VTRVwiLFxuICAgICAga25vd25Ib3N0czoga25vd25Ib3N0c1BhdGhcbiAgICB9KTtcblxuICAgIC8vIFdoZW5cbiAgICBkcml2ZXIuc2Vzc2lvbigpO1xuICAgIGRyaXZlci5zZXNzaW9uKCk7XG5cbiAgICAvLyBUaGVuXG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBsaW5lcyA9IHt9O1xuICAgICAgZnMucmVhZEZpbGVTeW5jKGtub3duSG9zdHNQYXRoLCAndXRmOCcpXG4gICAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICEhIChsaW5lLnRyaW0oKSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICBpZiAoIWxpbmVzW2xpbmVdKSB7XG4gICAgICAgICAgICAgIGxpbmVzW2xpbmVdID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmVzW2xpbmVdKys7XG4gICAgICAgICAgfSk7XG5cbiAgICAgIHZhciBkdXBsaWNhdGVkTGluZXMgPSBPYmplY3RcbiAgICAgICAgICAua2V5cyhsaW5lcylcbiAgICAgICAgICAubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiBsaW5lc1tsaW5lXTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24oY291bnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3VudCA+IDE7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAubGVuZ3RoO1xuXG4gICAgICBleHBlY3QoIGR1cGxpY2F0ZWRMaW5lcyApLnRvQmUoIDAgKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9LCAxMDAwKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaG91bGQgZ2l2ZSBoZWxwZnVsIGVycm9yIGlmIGRhdGFiYXNlIGNlcnQgZG9lcyBub3QgbWF0Y2ggc3RvcmVkIGNlcnRpZmljYXRlJywgZnVuY3Rpb24oZG9uZSkge1xuICAgIC8vIEFzc3VtaW5nIHdlIG9ubHkgcnVuIHRoaXMgdGVzdCBvbiBOb2RlSlMgd2l0aCBUT0ZVIHN1cHBvcnRcbiAgICBpZiggIWhhc0ZlYXR1cmUoXCJ0cnVzdF9vbl9maXJzdF91c2VcIikgKSB7XG4gICAgICBkb25lKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2l2ZW5cbiAgICB2YXIga25vd25Ib3N0c1BhdGggPSBcInRlc3QvcmVzb3VyY2VzL3JhbmRvbV9rbm93bl9ob3N0c1wiO1xuXG4gICAgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdDovL2xvY2FsaG9zdFwiLCBuZW80ai5hdXRoLmJhc2ljKFwibmVvNGpcIiwgXCJuZW80alwiKSwge1xuICAgICAgZW5jcnlwdGVkOiBcIkVOQ1JZUFRJT05fT05cIixcbiAgICAgIHRydXN0OiBcIlRSVVNUX09OX0ZJUlNUX1VTRVwiLFxuICAgICAga25vd25Ib3N0czoga25vd25Ib3N0c1BhdGhcbiAgICB9KTtcblxuICAgIC8vIFdoZW5cbiAgICBkcml2ZXIuc2Vzc2lvbigpLnJ1biggXCJSRVRVUk4gMVwiKS5jYXRjaCggZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgIGV4cGVjdChlcnJvci5tZXNzYWdlKS50b0NvbnRhaW4oXCJEYXRhYmFzZSBlbmNyeXB0aW9uIGNlcnRpZmljYXRlIGhhcyBjaGFuZ2VkLCBcIiArXG4gICAgICAgIFwiYW5kIG5vIGxvbmdlciBtYXRjaGVzIHRoZSBjZXJ0aWZpY2F0ZSBzdG9yZWQgZm9yIGxvY2FsaG9zdDo3Njg3XCIpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24oKXtcbiAgICBpZiggZHJpdmVyICkge1xuICAgICAgZHJpdmVyLmNsb3NlKCk7XG4gICAgfVxuICB9KTtcbn0pO1xuXG4vLyBUbyBtdXRlIGRlcHJlY2F0aW9uIG1lc3NhZ2UgaW4gdGVzdCBvdXRwdXRcbmZ1bmN0aW9uIG11dGVDb25zb2xlTG9nKCkge1xuICBjb25zdCBvcmlnaW5hbExvZyA9IGNvbnNvbGUubG9nO1xuICBjb25zb2xlLmxvZyA9ICgpID0+IHt9O1xuICByZXR1cm4gb3JpZ2luYWxMb2c7XG59XG5cbmZ1bmN0aW9uIHVuTXV0ZUNvbnNvbGVMb2cob3JpZ2luYWxMb2cpIHtcbiAgY29uc29sZS5sb2cgPSBvcmlnaW5hbExvZztcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgVHJhbnNhY3Rpb25FeGVjdXRvciBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZXJuYWwvdHJhbnNhY3Rpb24tZXhlY3V0b3InO1xuaW1wb3J0IHtuZXdFcnJvciwgU0VSVklDRV9VTkFWQUlMQUJMRSwgU0VTU0lPTl9FWFBJUkVEfSBmcm9tICcuLi8uLi9zcmMvdjEvZXJyb3InO1xuaW1wb3J0IHtoaWphY2tOZXh0RGF0ZU5vd0NhbGwsIHNldFRpbWVvdXRNb2NrfSBmcm9tICcuL3RpbWVycy11dGlsJztcblxuY29uc3QgVFJBTlNJRU5UX0VSUk9SXzEgPSAnTmVvLlRyYW5zaWVudEVycm9yLlRyYW5zYWN0aW9uLkRlYWRsb2NrRGV0ZWN0ZWQnO1xuY29uc3QgVFJBTlNJRU5UX0VSUk9SXzIgPSAnTmVvLlRyYW5zaWVudEVycm9yLk5ldHdvcmsuQ29tbXVuaWNhdGlvbkVycm9yJztcbmNvbnN0IFVOS05PV05fRVJST1IgPSAnTmVvLkRhdGFiYXNlRXJyb3IuR2VuZXJhbC5Vbmtub3duRXJyb3InO1xuY29uc3QgVFhfVEVSTUlOQVRFRF9FUlJPUiA9ICdOZW8uVHJhbnNpZW50RXJyb3IuVHJhbnNhY3Rpb24uVGVybWluYXRlZCc7XG5jb25zdCBMT0NLU19URVJNSU5BVEVEX0VSUk9SID0gJ05lby5UcmFuc2llbnRFcnJvci5UcmFuc2FjdGlvbi5Mb2NrQ2xpZW50U3RvcHBlZCc7XG5jb25zdCBPT01fRVJST1IgPSAnTmVvLkRhdGFiYXNlRXJyb3IuR2VuZXJhbC5PdXRPZk1lbW9yeUVycm9yJztcblxuZGVzY3JpYmUoJ1RyYW5zYWN0aW9uRXhlY3V0b3InLCAoKSA9PiB7XG5cbiAgbGV0IGZha2VTZXRUaW1lb3V0O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGZha2VTZXRUaW1lb3V0ID0gc2V0VGltZW91dE1vY2suaW5zdGFsbCgpO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGZha2VTZXRUaW1lb3V0LnVuaW5zdGFsbCgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHJ5IHdoZW4gdHJhbnNhY3Rpb24gd29yayByZXR1cm5zIHByb21pc2UgcmVqZWN0ZWQgd2l0aCBTRVJWSUNFX1VOQVZBSUxBQkxFJywgZG9uZSA9PiB7XG4gICAgdGVzdFJldHJ5V2hlblRyYW5zYWN0aW9uV29ya1JldHVybnNSZWplY3RlZFByb21pc2UoW1NFUlZJQ0VfVU5BVkFJTEFCTEVdLCBkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXRyeSB3aGVuIHRyYW5zYWN0aW9uIHdvcmsgcmV0dXJucyBwcm9taXNlIHJlamVjdGVkIHdpdGggU0VTU0lPTl9FWFBJUkVEJywgZG9uZSA9PiB7XG4gICAgdGVzdFJldHJ5V2hlblRyYW5zYWN0aW9uV29ya1JldHVybnNSZWplY3RlZFByb21pc2UoW1NFU1NJT05fRVhQSVJFRF0sIGRvbmUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHJ5IHdoZW4gdHJhbnNhY3Rpb24gd29yayByZXR1cm5zIHByb21pc2UgcmVqZWN0ZWQgd2l0aCBkZWFkbG9jayBlcnJvcicsIGRvbmUgPT4ge1xuICAgIHRlc3RSZXRyeVdoZW5UcmFuc2FjdGlvbldvcmtSZXR1cm5zUmVqZWN0ZWRQcm9taXNlKFtUUkFOU0lFTlRfRVJST1JfMV0sIGRvbmUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHJ5IHdoZW4gdHJhbnNhY3Rpb24gd29yayByZXR1cm5zIHByb21pc2UgcmVqZWN0ZWQgd2l0aCBjb21tdW5pY2F0aW9uIGVycm9yJywgZG9uZSA9PiB7XG4gICAgdGVzdFJldHJ5V2hlblRyYW5zYWN0aW9uV29ya1JldHVybnNSZWplY3RlZFByb21pc2UoW1RSQU5TSUVOVF9FUlJPUl8yXSwgZG9uZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IHJldHJ5IHdoZW4gdHJhbnNhY3Rpb24gd29yayByZXR1cm5zIHByb21pc2UgcmVqZWN0ZWQgd2l0aCBPT00gZXJyb3InLCBkb25lID0+IHtcbiAgICB0ZXN0Tm9SZXRyeU9uVW5rbm93bkVycm9yKFtPT01fRVJST1JdLCAxLCBkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgcmV0cnkgd2hlbiB0cmFuc2FjdGlvbiB3b3JrIHJldHVybnMgcHJvbWlzZSByZWplY3RlZCB3aXRoIHVua25vd24gZXJyb3InLCBkb25lID0+IHtcbiAgICB0ZXN0Tm9SZXRyeU9uVW5rbm93bkVycm9yKFtVTktOT1dOX0VSUk9SXSwgMSwgZG9uZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IHJldHJ5IHdoZW4gdHJhbnNhY3Rpb24gd29yayByZXR1cm5zIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0cmFuc2FjdGlvbiB0ZXJtaW5hdGlvbiBlcnJvcicsIGRvbmUgPT4ge1xuICAgIHRlc3ROb1JldHJ5T25Vbmtub3duRXJyb3IoW1RYX1RFUk1JTkFURURfRVJST1JdLCAxLCBkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgcmV0cnkgd2hlbiB0cmFuc2FjdGlvbiB3b3JrIHJldHVybnMgcHJvbWlzZSByZWplY3RlZCB3aXRoIGxvY2tzIHRlcm1pbmF0aW9uIGVycm9yJywgZG9uZSA9PiB7XG4gICAgdGVzdE5vUmV0cnlPblVua25vd25FcnJvcihbTE9DS1NfVEVSTUlOQVRFRF9FUlJPUl0sIDEsIGRvbmUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHN0b3AgcmV0cnlpbmcgd2hlbiB0aW1lIGV4cGlyZXMnLCBkb25lID0+IHtcbiAgICBjb25zdCBleGVjdXRvciA9IG5ldyBUcmFuc2FjdGlvbkV4ZWN1dG9yKCk7XG4gICAgbGV0IHdvcmtJbnZvY2F0aW9uQ291bnRlciA9IDA7XG4gICAgY29uc3QgcmVhbFdvcmsgPSB0cmFuc2FjdGlvbldvcmsoW1NFUlZJQ0VfVU5BVkFJTEFCTEUsIFNFU1NJT05fRVhQSVJFRCwgVFJBTlNJRU5UX0VSUk9SXzEsIFRSQU5TSUVOVF9FUlJPUl8yXSwgNDIpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gZXhlY3V0b3IuZXhlY3V0ZSh0cmFuc2FjdGlvbkNyZWF0b3IoKSwgdHggPT4ge1xuICAgICAgZXhwZWN0KHR4KS50b0JlRGVmaW5lZCgpO1xuICAgICAgd29ya0ludm9jYXRpb25Db3VudGVyKys7XG4gICAgICBpZiAod29ya0ludm9jYXRpb25Db3VudGVyID09PSAzKSB7XG4gICAgICAgIGhpamFja05leHREYXRlTm93Q2FsbChEYXRlLm5vdygpICsgMzAwMDEpOyAvLyBtb3ZlIG5leHQgYERhdGUubm93KClgIGNhbGwgZm9yd2FyZCBieSAzMCBzZWNvbmRzXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVhbFdvcmsoKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdC5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3Qod29ya0ludm9jYXRpb25Db3VudGVyKS50b0VxdWFsKDMpO1xuICAgICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvRXF1YWwoVFJBTlNJRU5UX0VSUk9SXzEpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHJ5IHdoZW4gZ2l2ZW4gdHJhbnNhY3Rpb24gY3JlYXRvciB0aHJvd3Mgb25jZScsIGRvbmUgPT4ge1xuICAgIHRlc3RSZXRyeVdoZW5UcmFuc2FjdGlvbkNyZWF0b3JGYWlscyhcbiAgICAgIFtTRVJWSUNFX1VOQVZBSUxBQkxFXSxcbiAgICAgIGRvbmVcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHJ5IHdoZW4gZ2l2ZW4gdHJhbnNhY3Rpb24gY3JlYXRvciB0aHJvd3MgbWFueSB0aW1lcycsIGRvbmUgPT4ge1xuICAgIHRlc3RSZXRyeVdoZW5UcmFuc2FjdGlvbkNyZWF0b3JGYWlscyhcbiAgICAgIFtTRVJWSUNFX1VOQVZBSUxBQkxFLCBTRVNTSU9OX0VYUElSRUQsIFRSQU5TSUVOVF9FUlJPUl8yLCBTRVNTSU9OX0VYUElSRUQsIFNFUlZJQ0VfVU5BVkFJTEFCTEUsIFRSQU5TSUVOVF9FUlJPUl8xXSxcbiAgICAgIGRvbmVcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHJ5IHdoZW4gZ2l2ZW4gdHJhbnNhY3Rpb24gd29yayB0aHJvd3Mgb25jZScsIGRvbmUgPT4ge1xuICAgIHRlc3RSZXRyeVdoZW5UcmFuc2FjdGlvbldvcmtUaHJvd3MoW1NFUlZJQ0VfVU5BVkFJTEFCTEVdLCBkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXRyeSB3aGVuIGdpdmVuIHRyYW5zYWN0aW9uIHdvcmsgdGhyb3dzIG1hbnkgdGltZXMnLCBkb25lID0+IHtcbiAgICB0ZXN0UmV0cnlXaGVuVHJhbnNhY3Rpb25Xb3JrVGhyb3dzKFxuICAgICAgW1NFUlZJQ0VfVU5BVkFJTEFCTEUsIFRSQU5TSUVOVF9FUlJPUl8yLCBUUkFOU0lFTlRfRVJST1JfMiwgU0VTU0lPTl9FWFBJUkVEXSxcbiAgICAgIGRvbmVcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHJ5IHdoZW4gZ2l2ZW4gdHJhbnNhY3Rpb24gd29yayByZXR1cm5zIHJlamVjdGVkIHByb21pc2UgbWFueSB0aW1lcycsIGRvbmUgPT4ge1xuICAgIHRlc3RSZXRyeVdoZW5UcmFuc2FjdGlvbldvcmtSZXR1cm5zUmVqZWN0ZWRQcm9taXNlKFxuICAgICAgW1NFUlZJQ0VfVU5BVkFJTEFCTEUsIFNFUlZJQ0VfVU5BVkFJTEFCTEUsIFRSQU5TSUVOVF9FUlJPUl8yLCBTRVNTSU9OX0VYUElSRUQsIFRSQU5TSUVOVF9FUlJPUl8xLCBTRVNTSU9OX0VYUElSRURdLFxuICAgICAgZG9uZVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0cnkgd2hlbiB0cmFuc2FjdGlvbiBjb21taXQgcmV0dXJucyByZWplY3RlZCBwcm9taXNlIG9uY2UnLCBkb25lID0+IHtcbiAgICB0ZXN0UmV0cnlXaGVuVHJhbnNhY3Rpb25Db21taXRSZXR1cm5zUmVqZWN0ZWRQcm9taXNlKFtUUkFOU0lFTlRfRVJST1JfMV0sIGRvbmUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHJ5IHdoZW4gdHJhbnNhY3Rpb24gY29tbWl0IHJldHVybnMgcmVqZWN0ZWQgcHJvbWlzZSBtdWx0aXBsZSB0aW1lcycsIGRvbmUgPT4ge1xuICAgIHRlc3RSZXRyeVdoZW5UcmFuc2FjdGlvbkNvbW1pdFJldHVybnNSZWplY3RlZFByb21pc2UoXG4gICAgICBbVFJBTlNJRU5UX0VSUk9SXzEsIFRSQU5TSUVOVF9FUlJPUl8xLCBTRVNTSU9OX0VYUElSRUQsIFNFUlZJQ0VfVU5BVkFJTEFCTEUsIFRSQU5TSUVOVF9FUlJPUl8yXSxcbiAgICAgIGRvbmVcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHJ5IHVudGlsIGRhdGFiYXNlIGVycm9yIGhhcHBlbnMnLCBkb25lID0+IHtcbiAgICB0ZXN0Tm9SZXRyeU9uVW5rbm93bkVycm9yKFxuICAgICAgW1NFUlZJQ0VfVU5BVkFJTEFCTEUsIFNFUlZJQ0VfVU5BVkFJTEFCTEUsIFRSQU5TSUVOVF9FUlJPUl8yLCBTRVNTSU9OX0VYUElSRUQsIFVOS05PV05fRVJST1IsIFNFU1NJT05fRVhQSVJFRF0sXG4gICAgICA1LFxuICAgICAgZG9uZVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY2FuY2VsIGluLWZsaWdodCB0aW1lb3V0cyB3aGVuIGNsb3NlZCcsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGV4ZWN1dG9yID0gbmV3IFRyYW5zYWN0aW9uRXhlY3V0b3IoKTtcbiAgICAvLyBkbyBub3QgZXhlY3V0ZSBzZXRUaW1lb3V0IGNhbGxiYWNrc1xuICAgIGZha2VTZXRUaW1lb3V0LnBhdXNlKCk7XG5cbiAgICBleGVjdXRvci5leGVjdXRlKHRyYW5zYWN0aW9uQ3JlYXRvcihbU0VSVklDRV9VTkFWQUlMQUJMRV0pLCAoKSA9PiBQcm9taXNlLnJlc29sdmUoNDIpKTtcbiAgICBleGVjdXRvci5leGVjdXRlKHRyYW5zYWN0aW9uQ3JlYXRvcihbVFJBTlNJRU5UX0VSUk9SXzFdKSwgKCkgPT4gUHJvbWlzZS5yZXNvbHZlKDQyNDIpKTtcbiAgICBleGVjdXRvci5leGVjdXRlKHRyYW5zYWN0aW9uQ3JlYXRvcihbU0VTU0lPTl9FWFBJUkVEXSksICgpID0+IFByb21pc2UucmVzb2x2ZSg0MjQyNDIpKTtcblxuICAgIGZha2VTZXRUaW1lb3V0LnNldFRpbWVvdXRPcmlnaW5hbCgoKSA9PiB7XG4gICAgICBleGVjdXRvci5jbG9zZSgpO1xuICAgICAgZXhwZWN0KGZha2VTZXRUaW1lb3V0LmNsZWFyZWRUaW1lb3V0cy5sZW5ndGgpLnRvRXF1YWwoMyk7XG4gICAgICBkb25lKCk7XG4gICAgfSwgMTAwMCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYWxsb3cgemVybyBtYXggcmV0cnkgdGltZScsICgpID0+IHtcbiAgICBjb25zdCBleGVjdXRvciA9IG5ldyBUcmFuc2FjdGlvbkV4ZWN1dG9yKDApO1xuICAgIGV4cGVjdChleGVjdXRvci5fbWF4UmV0cnlUaW1lTXMpLnRvRXF1YWwoMCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYWxsb3cgemVybyBpbml0aWFsIGRlbGF5JywgKCkgPT4ge1xuICAgIGNvbnN0IGV4ZWN1dG9yID0gbmV3IFRyYW5zYWN0aW9uRXhlY3V0b3IoNDIsIDApO1xuICAgIGV4cGVjdChleGVjdXRvci5faW5pdGlhbFJldHJ5RGVsYXlNcykudG9FcXVhbCgwKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBkaXNhbGxvdyB6ZXJvIG11bHRpcGxpZXInLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IG5ldyBUcmFuc2FjdGlvbkV4ZWN1dG9yKDQyLCA0MiwgMCkpLnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhbGxvdyB6ZXJvIGppdHRlciBmYWN0b3InLCAoKSA9PiB7XG4gICAgY29uc3QgZXhlY3V0b3IgPSBuZXcgVHJhbnNhY3Rpb25FeGVjdXRvcig0MiwgNDIsIDQyLCAwKTtcbiAgICBleHBlY3QoZXhlY3V0b3IuX2ppdHRlckZhY3RvcikudG9FcXVhbCgwKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gdGVzdFJldHJ5V2hlblRyYW5zYWN0aW9uQ3JlYXRvckZhaWxzKGVycm9yQ29kZXMsIGRvbmUpIHtcbiAgICBjb25zdCBleGVjdXRvciA9IG5ldyBUcmFuc2FjdGlvbkV4ZWN1dG9yKCk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb25DcmVhdG9yID0gdGhyb3dpbmdUcmFuc2FjdGlvbkNyZWF0b3IoZXJyb3JDb2RlcywgbmV3IEZha2VUcmFuc2FjdGlvbigpKTtcbiAgICBsZXQgd29ya0ludm9jYXRpb25Db3VudGVyID0gMDtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGV4ZWN1dG9yLmV4ZWN1dGUodHJhbnNhY3Rpb25DcmVhdG9yLCB0eCA9PiB7XG4gICAgICBleHBlY3QodHgpLnRvQmVEZWZpbmVkKCk7XG4gICAgICB3b3JrSW52b2NhdGlvbkNvdW50ZXIrKztcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoNDIpO1xuICAgIH0pO1xuXG4gICAgcmVzdWx0LnRoZW4odmFsdWUgPT4ge1xuICAgICAgZXhwZWN0KHdvcmtJbnZvY2F0aW9uQ291bnRlcikudG9FcXVhbCgxKTtcbiAgICAgIGV4cGVjdCh2YWx1ZSkudG9FcXVhbCg0Mik7XG4gICAgICB2ZXJpZnlSZXRyeURlbGF5cyhmYWtlU2V0VGltZW91dCwgZXJyb3JDb2Rlcy5sZW5ndGgpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdGVzdFJldHJ5V2hlblRyYW5zYWN0aW9uV29ya1JldHVybnNSZWplY3RlZFByb21pc2UoZXJyb3JDb2RlcywgZG9uZSkge1xuICAgIGNvbnN0IGV4ZWN1dG9yID0gbmV3IFRyYW5zYWN0aW9uRXhlY3V0b3IoKTtcbiAgICBsZXQgd29ya0ludm9jYXRpb25Db3VudGVyID0gMDtcbiAgICBjb25zdCByZWFsV29yayA9IHRyYW5zYWN0aW9uV29yayhlcnJvckNvZGVzLCA0Mik7XG5cbiAgICBjb25zdCByZXN1bHQgPSBleGVjdXRvci5leGVjdXRlKHRyYW5zYWN0aW9uQ3JlYXRvcigpLCB0eCA9PiB7XG4gICAgICBleHBlY3QodHgpLnRvQmVEZWZpbmVkKCk7XG4gICAgICB3b3JrSW52b2NhdGlvbkNvdW50ZXIrKztcbiAgICAgIHJldHVybiByZWFsV29yaygpO1xuICAgIH0pO1xuXG4gICAgcmVzdWx0LnRoZW4odmFsdWUgPT4ge1xuICAgICAgLy8gd29yayBzaG91bGQgaGF2ZSBmYWlsZWQgJ2ZhaWx1cmVzLmxlbmd0aCcgdGltZXMgYW5kIHN1Y2NlZWRlZCAxIHRpbWVcbiAgICAgIGV4cGVjdCh3b3JrSW52b2NhdGlvbkNvdW50ZXIpLnRvRXF1YWwoZXJyb3JDb2Rlcy5sZW5ndGggKyAxKTtcbiAgICAgIGV4cGVjdCh2YWx1ZSkudG9FcXVhbCg0Mik7XG4gICAgICB2ZXJpZnlSZXRyeURlbGF5cyhmYWtlU2V0VGltZW91dCwgZXJyb3JDb2Rlcy5sZW5ndGgpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdGVzdFJldHJ5V2hlblRyYW5zYWN0aW9uQ29tbWl0UmV0dXJuc1JlamVjdGVkUHJvbWlzZShlcnJvckNvZGVzLCBkb25lKSB7XG4gICAgY29uc3QgZXhlY3V0b3IgPSBuZXcgVHJhbnNhY3Rpb25FeGVjdXRvcigpO1xuICAgIGxldCB3b3JrSW52b2NhdGlvbkNvdW50ZXIgPSAwO1xuICAgIGNvbnN0IHJlYWxXb3JrID0gKCkgPT4gUHJvbWlzZS5yZXNvbHZlKDQyNDIpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gZXhlY3V0b3IuZXhlY3V0ZSh0cmFuc2FjdGlvbkNyZWF0b3IoZXJyb3JDb2RlcyksIHR4ID0+IHtcbiAgICAgIGV4cGVjdCh0eCkudG9CZURlZmluZWQoKTtcbiAgICAgIHdvcmtJbnZvY2F0aW9uQ291bnRlcisrO1xuICAgICAgcmV0dXJuIHJlYWxXb3JrKCk7XG4gICAgfSk7XG5cbiAgICByZXN1bHQudGhlbih2YWx1ZSA9PiB7XG4gICAgICAvLyB3b3JrIHNob3VsZCBoYXZlIGZhaWxlZCAnZmFpbHVyZXMubGVuZ3RoJyB0aW1lcyBhbmQgc3VjY2VlZGVkIDEgdGltZVxuICAgICAgZXhwZWN0KHdvcmtJbnZvY2F0aW9uQ291bnRlcikudG9FcXVhbChlcnJvckNvZGVzLmxlbmd0aCArIDEpO1xuICAgICAgZXhwZWN0KHZhbHVlKS50b0VxdWFsKDQyNDIpO1xuICAgICAgdmVyaWZ5UmV0cnlEZWxheXMoZmFrZVNldFRpbWVvdXQsIGVycm9yQ29kZXMubGVuZ3RoKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRlc3RSZXRyeVdoZW5UcmFuc2FjdGlvbldvcmtUaHJvd3MoZXJyb3JDb2RlcywgZG9uZSkge1xuICAgIGNvbnN0IGV4ZWN1dG9yID0gbmV3IFRyYW5zYWN0aW9uRXhlY3V0b3IoKTtcbiAgICBsZXQgd29ya0ludm9jYXRpb25Db3VudGVyID0gMDtcbiAgICBjb25zdCByZWFsV29yayA9IHRocm93aW5nVHJhbnNhY3Rpb25Xb3JrKGVycm9yQ29kZXMsIDQyKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGV4ZWN1dG9yLmV4ZWN1dGUodHJhbnNhY3Rpb25DcmVhdG9yKCksIHR4ID0+IHtcbiAgICAgIGV4cGVjdCh0eCkudG9CZURlZmluZWQoKTtcbiAgICAgIHdvcmtJbnZvY2F0aW9uQ291bnRlcisrO1xuICAgICAgcmV0dXJuIHJlYWxXb3JrKCk7XG4gICAgfSk7XG5cbiAgICByZXN1bHQudGhlbih2YWx1ZSA9PiB7XG4gICAgICAvLyB3b3JrIHNob3VsZCBoYXZlIGZhaWxlZCAnZmFpbHVyZXMubGVuZ3RoJyB0aW1lcyBhbmQgc3VjY2VlZGVkIDEgdGltZVxuICAgICAgZXhwZWN0KHdvcmtJbnZvY2F0aW9uQ291bnRlcikudG9FcXVhbChlcnJvckNvZGVzLmxlbmd0aCArIDEpO1xuICAgICAgZXhwZWN0KHZhbHVlKS50b0VxdWFsKDQyKTtcbiAgICAgIHZlcmlmeVJldHJ5RGVsYXlzKGZha2VTZXRUaW1lb3V0LCBlcnJvckNvZGVzLmxlbmd0aCk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB0ZXN0Tm9SZXRyeU9uVW5rbm93bkVycm9yKGVycm9yQ29kZXMsIGV4cGVjdGVkV29ya0ludm9jYXRpb25Db3VudCwgZG9uZSkge1xuICAgIGNvbnN0IGV4ZWN1dG9yID0gbmV3IFRyYW5zYWN0aW9uRXhlY3V0b3IoKTtcbiAgICBsZXQgd29ya0ludm9jYXRpb25Db3VudGVyID0gMDtcbiAgICBjb25zdCByZWFsV29yayA9IHRyYW5zYWN0aW9uV29yayhlcnJvckNvZGVzLCA0Mik7XG5cbiAgICBjb25zdCByZXN1bHQgPSBleGVjdXRvci5leGVjdXRlKHRyYW5zYWN0aW9uQ3JlYXRvcigpLCB0eCA9PiB7XG4gICAgICBleHBlY3QodHgpLnRvQmVEZWZpbmVkKCk7XG4gICAgICB3b3JrSW52b2NhdGlvbkNvdW50ZXIrKztcbiAgICAgIHJldHVybiByZWFsV29yaygpO1xuICAgIH0pO1xuXG4gICAgcmVzdWx0LmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGV4cGVjdCh3b3JrSW52b2NhdGlvbkNvdW50ZXIpLnRvRXF1YWwoZXhwZWN0ZWRXb3JrSW52b2NhdGlvbkNvdW50KTtcbiAgICAgIGlmIChlcnJvckNvZGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9FcXVhbChlcnJvckNvZGVzWzBdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cGVjdChlcnJvci5jb2RlKS50b0VxdWFsKGVycm9yQ29kZXNbZXhwZWN0ZWRXb3JrSW52b2NhdGlvbkNvdW50IC0gMV0pO1xuICAgICAgfVxuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9XG5cbn0pO1xuXG5mdW5jdGlvbiB0cmFuc2FjdGlvbkNyZWF0b3IoY29tbWl0RXJyb3JDb2Rlcykge1xuICBjb25zdCByZW1haW5pbmdFcnJvckNvZGVzID0gKGNvbW1pdEVycm9yQ29kZXMgfHwgW10pLnNsaWNlKCkucmV2ZXJzZSgpO1xuICByZXR1cm4gKCkgPT4gbmV3IEZha2VUcmFuc2FjdGlvbihyZW1haW5pbmdFcnJvckNvZGVzLnBvcCgpKTtcbn1cblxuZnVuY3Rpb24gdGhyb3dpbmdUcmFuc2FjdGlvbkNyZWF0b3IoZXJyb3JDb2RlcywgcmVzdWx0KSB7XG4gIGNvbnN0IHJlbWFpbmluZ0Vycm9yQ29kZXMgPSBlcnJvckNvZGVzLnNsaWNlKCkucmV2ZXJzZSgpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmIChyZW1haW5pbmdFcnJvckNvZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgZXJyb3JDb2RlID0gcmVtYWluaW5nRXJyb3JDb2Rlcy5wb3AoKTtcbiAgICB0aHJvdyBlcnJvcihlcnJvckNvZGUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0aHJvd2luZ1RyYW5zYWN0aW9uV29yayhlcnJvckNvZGVzLCByZXN1bHQpIHtcbiAgY29uc3QgcmVtYWluaW5nRXJyb3JDb2RlcyA9IGVycm9yQ29kZXMuc2xpY2UoKS5yZXZlcnNlKCk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKHJlbWFpbmluZ0Vycm9yQ29kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XG4gICAgfVxuICAgIGNvbnN0IGVycm9yQ29kZSA9IHJlbWFpbmluZ0Vycm9yQ29kZXMucG9wKCk7XG4gICAgdGhyb3cgZXJyb3IoZXJyb3JDb2RlKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdHJhbnNhY3Rpb25Xb3JrKGVycm9yQ29kZXMsIHJlc3VsdCkge1xuICBjb25zdCByZW1haW5pbmdFcnJvckNvZGVzID0gZXJyb3JDb2Rlcy5zbGljZSgpLnJldmVyc2UoKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAocmVtYWluaW5nRXJyb3JDb2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0KTtcbiAgICB9XG4gICAgY29uc3QgZXJyb3JDb2RlID0gcmVtYWluaW5nRXJyb3JDb2Rlcy5wb3AoKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IoZXJyb3JDb2RlKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGVycm9yKGNvZGUpIHtcbiAgcmV0dXJuIG5ld0Vycm9yKCcnLCBjb2RlKTtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5UmV0cnlEZWxheXMoZmFrZVNldFRpbWVvdXQsIGV4cGVjdGVkSW52b2NhdGlvbkNvdW50KSB7XG4gIGNvbnN0IGRlbGF5cyA9IGZha2VTZXRUaW1lb3V0Lmludm9jYXRpb25EZWxheXM7XG4gIGV4cGVjdChkZWxheXMubGVuZ3RoKS50b0VxdWFsKGV4cGVjdGVkSW52b2NhdGlvbkNvdW50KTtcbiAgZGVsYXlzLmZvckVhY2goKGRlbGF5LCBpbmRleCkgPT4ge1xuICAgIC8vIGRlbGF5cyBtYWtlIGEgZ2VvbWV0cmljIHByb2dyZXNzaW9uIHdpdGggZmlzdCBlbGVtZW50IDEwMDAgYW5kIG11bHRpcGxpZXIgMi4wXG4gICAgLy8gc28gZXhwZWN0ZWQgZGVsYXkgY2FuIGJlIGNhbGN1bGF0ZWQgYXMgbi10aCBlbGVtZW50OiBgZmlyc3RFbGVtZW50ICogcG93KG11bHRpcGxpZXIsIG4gLSAxKWBcbiAgICBjb25zdCBleHBlY3RlZERlbGF5V2l0aG91dEppdHRlciA9IDEwMDAgKiBNYXRoLnBvdygyLjAsIGluZGV4KTtcbiAgICBjb25zdCBqaXR0ZXIgPSBleHBlY3RlZERlbGF5V2l0aG91dEppdHRlciAqIDAuMjtcbiAgICBjb25zdCBtaW4gPSBleHBlY3RlZERlbGF5V2l0aG91dEppdHRlciAtIGppdHRlcjtcbiAgICBjb25zdCBtYXggPSBleHBlY3RlZERlbGF5V2l0aG91dEppdHRlciArIGppdHRlcjtcblxuICAgIGV4cGVjdChkZWxheSA+PSBtaW4pLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QoZGVsYXkgPD0gbWF4KS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xufVxuXG5jbGFzcyBGYWtlVHJhbnNhY3Rpb24ge1xuXG4gIGNvbnN0cnVjdG9yKGNvbW1pdEVycm9yQ29kZSkge1xuICAgIHRoaXMuX2NvbW1pdEVycm9yQ29kZSA9IGNvbW1pdEVycm9yQ29kZTtcbiAgfVxuXG4gIGlzT3BlbigpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbW1pdCgpIHtcbiAgICBpZiAodGhpcy5fY29tbWl0RXJyb3JDb2RlKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IodGhpcy5fY29tbWl0RXJyb3JDb2RlKSk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4gXG52YXIgdXRmOCA9IHJlcXVpcmUoJy4uLy4uL2xpYi92MS9pbnRlcm5hbC91dGY4JykuZGVmYXVsdDtcbnZhciBidWZmZXJzID0gcmVxdWlyZSgnLi4vLi4vbGliL3YxL2ludGVybmFsL2J1ZicpO1xuXG5kZXNjcmliZSgndXRmOCcsIGZ1bmN0aW9uKCkge1xuICBpdCgnc2hvdWxkIGhhdmUgYSBuaWNlIGNsZWFuIGJ1ZmZlciBwb3NpdGlvbiBhZnRlciBzZXJpYWxpemluZycsIGZ1bmN0aW9uKCkge1xuICAgIC8vIFdoZW5cbiAgICB2YXIgYnVmZmVyID0gdXRmOC5lbmNvZGUoXCJoZWxsbywgd29ybGQhXCIpO1xuXG4gICAgLy8gVGhlblxuICAgIGV4cGVjdCggYnVmZmVyLnBvc2l0aW9uICkudG9CZSggMCApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlc3BlY3QgcG9zaXRpb24gb2Ygc2luZ2xlIGJ1ZmZlcicsIGZ1bmN0aW9uKCkge1xuICAgIC8vIFdoZW5cbiAgICB2YXIgYnVmZmVyID0gdXRmOC5lbmNvZGUoXCJoZWxsbywgd29ybGQhXCIpO1xuICAgIGJ1ZmZlci5yZWFkSW50OCgpO1xuICAgIHZhciBkZWNvZGVkID0gdXRmOC5kZWNvZGUoYnVmZmVyLCBidWZmZXIubGVuZ3RoIC0gMSk7XG4gICAgLy8gVGhlblxuICAgIGV4cGVjdCggZGVjb2RlZCApLnRvQmUoIFwiZWxsbywgd29ybGQhXCIgKTtcbiAgICBleHBlY3QoYnVmZmVyLnBvc2l0aW9uKS50b0VxdWFsKDEzKVxuICB9KTtcblxuXG4gIGl0KCdzaG91bGQgYmUgYWJsZSB0byBkZWNvZGUgc3Vic3RyaW5nJywgZnVuY3Rpb24oKSB7XG4gICAgLy8gV2hlblxuICAgIHZhciBidWZmZXIgPSB1dGY4LmVuY29kZShcImhlbGxvLCB3b3JsZCFcIik7XG4gICAgYnVmZmVyLnJlYWRJbnQ4KCk7XG4gICAgdmFyIGRlY29kZWQgPSB1dGY4LmRlY29kZShidWZmZXIsIDMpO1xuICAgIC8vIFRoZW5cbiAgICBleHBlY3QoIGRlY29kZWQgKS50b0JlKCBcImVsbFwiICk7XG4gICAgZXhwZWN0KGJ1ZmZlci5wb3NpdGlvbikudG9FcXVhbCg0KVxuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlYWQvd3JpdGUgdXRmOCcsIGZ1bmN0aW9uKCkge1xuICAgIGV4cGVjdCggcGFja0FuZFVucGFjayggXCJcIiApICkudG9CZSggXCJcIiApO1xuICAgIGV4cGVjdCggcGFja0FuZFVucGFjayggXCLDpcOkw7YxMjNcIiApICkudG9CZSggXCLDpcOkw7YxMjNcIiAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBkZWNvZGUgdXRmOCBmcm9tIGEgY29tcGxldGUgY29tYmluZWQgYnVmZmVyJywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgbXNnID0gXCJhc8OlZnF3ZXJcIjtcbiAgICB2YXIgYnVmID0gdXRmOC5lbmNvZGUobXNnKTtcbiAgICB2YXIgYnVmYSA9IGJ1Zi5yZWFkU2xpY2UoMyk7XG4gICAgdmFyIGJ1ZmIgPSBidWYucmVhZFNsaWNlKDMpO1xuICAgIHZhciBidWZjID0gYnVmLnJlYWRTbGljZSgzKTtcbiAgICB2YXIgY29tYmluZWQgPSBuZXcgYnVmZmVycy5Db21iaW5lZEJ1ZmZlciggW2J1ZmEsIGJ1ZmIsIGJ1ZmNdICk7XG5cbiAgICAvLyBXaGVuXG4gICAgdmFyIGRlY29kZWQgPSB1dGY4LmRlY29kZShjb21iaW5lZCwgY29tYmluZWQubGVuZ3RoKTtcblxuICAgIC8vIFRoZW5cbiAgICBleHBlY3QoZGVjb2RlZCkudG9CZShtc2cpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGRlY29kZSB1dGY4IGZyb20gcGFydCBvZiBhIGNvbWJpbmVkIGJ1ZmZlcicsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIG1zZyA9IFwiYXPDpWZxXCI7XG4gICAgdmFyIGV4cGVjdE1zZyA9IG1zZy5zdWJzdHJpbmcoMCwgbXNnLmxlbmd0aC0xKTtcbiAgICB2YXIgYnVmID0gdXRmOC5lbmNvZGUobXNnKTtcbiAgICB2YXIgYnVmYSA9IGJ1Zi5yZWFkU2xpY2UoMyk7XG4gICAgdmFyIGJ1ZmIgPSBidWYucmVhZFNsaWNlKDMpO1xuICAgIHZhciB1bnJlbGF0ZWREYXRhID0gYnVmZmVycy5hbGxvYygzKTtcbiAgICB2YXIgY29tYmluZWQgPSBuZXcgYnVmZmVycy5Db21iaW5lZEJ1ZmZlciggW2J1ZmEsIGJ1ZmIsIHVucmVsYXRlZERhdGFdICk7XG5cbiAgICAvLyBXaGVuIFxuICAgIC8vIFdlIHJlYWQgYWxsIGJ1dCB0aGUgdW5yZWxhdGVkRGF0YSBhbmQgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIGJ1ZmJcbiAgICB2YXIgZGVjb2RlZCA9IHV0ZjguZGVjb2RlKGNvbWJpbmVkLCBjb21iaW5lZC5sZW5ndGggLSAxIC0gdW5yZWxhdGVkRGF0YS5sZW5ndGggKTtcblxuICAgIC8vIFRoZW5cbiAgICBleHBlY3QoZGVjb2RlZCkudG9CZShleHBlY3RNc2cpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlc3BlY3QgdGhlIHBvc2l0aW9uIGluIHRoZSBjb21iaW5lZCBidWZmZXInLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciBtc2cgPSBcImFiY2RlZmdoXCI7XG4gICAgdmFyIGJ1ZiA9IHV0ZjguZW5jb2RlKG1zZyk7XG4gICAgdmFyIGJ1ZmEgPSBidWYucmVhZFNsaWNlKDQpO1xuICAgIHZhciBidWZiID0gYnVmLnJlYWRTbGljZSg0KTtcbiAgICB2YXIgY29tYmluZWQgPSBuZXcgYnVmZmVycy5Db21iaW5lZEJ1ZmZlciggW2J1ZmEsIGJ1ZmJdICk7XG4gICAgLy9tb3ZlIHBvc2l0aW9uIGZvcndhcmRcbiAgICBjb21iaW5lZC5yZWFkSW50OCgpO1xuICAgIGNvbWJpbmVkLnJlYWRJbnQ4KCk7XG5cbiAgICAvLyBXaGVuXG4gICAgdmFyIGRlY29kZWQgPSB1dGY4LmRlY29kZShjb21iaW5lZCwgY29tYmluZWQubGVuZ3RoIC0gMik7XG5cblxuICAgIC8vIFRoZW5cbiAgICBleHBlY3QoZGVjb2RlZCkudG9FcXVhbChcImNkZWZnaFwiKTtcbiAgICBleHBlY3QoY29tYmluZWQucG9zaXRpb24pLnRvQmUoOClcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBiZSBhYmxlIHRvIGRlY29kZSBhIHN1YnN0cmluZyBpbiBhIGNvbWJpbmVkIGJ1ZmZlciBhY3Jvc3MgYnVmZmVycycsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIG1zZyA9IFwiYWJjZGVmZ2hpamtsXCI7XG4gICAgdmFyIGJ1ZiA9IHV0ZjguZW5jb2RlKG1zZyk7XG4gICAgdmFyIGJ1ZmEgPSBidWYucmVhZFNsaWNlKDQpO1xuICAgIHZhciBidWZiID0gYnVmLnJlYWRTbGljZSg0KTtcbiAgICB2YXIgYnVmYyA9IGJ1Zi5yZWFkU2xpY2UoNCk7XG4gICAgdmFyIGNvbWJpbmVkID0gbmV3IGJ1ZmZlcnMuQ29tYmluZWRCdWZmZXIoIFtidWZhLCBidWZiLCBidWZjXSApO1xuICAgIC8vbW92ZSBwb3NpdGlvbiBmb3J3YXJkXG4gICAgY29tYmluZWQucmVhZEludDgoKTtcbiAgICBjb21iaW5lZC5yZWFkSW50OCgpO1xuICAgIGNvbWJpbmVkLnJlYWRJbnQ4KCk7XG4gICAgY29tYmluZWQucmVhZEludDgoKTtcbiAgICBjb21iaW5lZC5yZWFkSW50OCgpO1xuXG4gICAgLy8gV2hlblxuICAgIHZhciBkZWNvZGVkID0gdXRmOC5kZWNvZGUoY29tYmluZWQsIDQpO1xuXG4gICAgLy8gVGhlblxuICAgIGV4cGVjdChkZWNvZGVkKS50b0JlKFwiZmdoaVwiKTtcbiAgICBleHBlY3QoY29tYmluZWQucG9zaXRpb24pLnRvQmUoOSlcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBiZSBhYmxlIHRvIGRlY29kZSBhIHN1YnN0cmluZyBpbiBhIGNvbWJpbmVkIHdpdGhpbiBidWZmZXInLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciBtc2cgPSBcImFiY2RlZmdoaWprbFwiO1xuICAgIHZhciBidWYgPSB1dGY4LmVuY29kZShtc2cpO1xuICAgIHZhciBidWZhID0gYnVmLnJlYWRTbGljZSg0KTtcbiAgICB2YXIgYnVmYiA9IGJ1Zi5yZWFkU2xpY2UoNCk7XG4gICAgdmFyIGJ1ZmMgPSBidWYucmVhZFNsaWNlKDQpO1xuICAgIHZhciBjb21iaW5lZCA9IG5ldyBidWZmZXJzLkNvbWJpbmVkQnVmZmVyKCBbYnVmYSwgYnVmYiwgYnVmY10gKTtcbiAgICAvL21vdmUgcG9zaXRpb24gZm9yd2FyZFxuICAgIGNvbWJpbmVkLnJlYWRJbnQ4KCk7XG4gICAgY29tYmluZWQucmVhZEludDgoKTtcbiAgICBjb21iaW5lZC5yZWFkSW50OCgpO1xuICAgIGNvbWJpbmVkLnJlYWRJbnQ4KCk7XG4gICAgY29tYmluZWQucmVhZEludDgoKTtcblxuICAgIC8vIFdoZW5cbiAgICB2YXIgZGVjb2RlZCA9IHV0ZjguZGVjb2RlKGNvbWJpbmVkLCAyKTtcblxuICAgIC8vIFRoZW5cbiAgICBleHBlY3QoZGVjb2RlZCkudG9CZShcImZnXCIpO1xuICAgIGV4cGVjdChjb21iaW5lZC5wb3NpdGlvbikudG9CZSg3KVxuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiBwYWNrQW5kVW5wYWNrKCBzdHIgKSB7XG4gIHZhciBidWZmZXIgPSB1dGY4LmVuY29kZSggc3RyICk7XG4gIHJldHVybiB1dGY4LmRlY29kZSggYnVmZmVyLCBidWZmZXIubGVuZ3RoICk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uLy4uL2xpYi92MS9pbnRlcm5hbC91dGlsLmpzJyk7XG5cbmRlc2NyaWJlKCd1dGlsJywgKCkgPT4ge1xuXG4gIGl0KCdzaG91bGQgY2hlY2sgZW1wdHkgb2JqZWN0cycsICgpID0+IHtcbiAgICBleHBlY3QodXRpbC5pc0VtcHR5T2JqZWN0T3JOdWxsKG51bGwpKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KHV0aWwuaXNFbXB0eU9iamVjdE9yTnVsbCh7fSkpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QodXRpbC5pc0VtcHR5T2JqZWN0T3JOdWxsKFtdKSkudG9CZVRydXRoeSgpO1xuXG4gICAgY29uc3QgZnVuYyA9ICgpID0+IHtcbiAgICAgIHJldHVybiA0MjtcbiAgICB9O1xuICAgIGV4cGVjdCh1dGlsLmlzRW1wdHlPYmplY3RPck51bGwoZnVuYykpLnRvQmVUcnV0aHkoKTtcbiAgICBmdW5jLmZvbyA9ICdiYXInO1xuICAgIGV4cGVjdCh1dGlsLmlzRW1wdHlPYmplY3RPck51bGwoZnVuYykpLnRvQmVGYWxzeSgpO1xuXG4gICAgZXhwZWN0KHV0aWwuaXNFbXB0eU9iamVjdE9yTnVsbCgpKS50b0JlRmFsc3koKTtcbiAgICBleHBlY3QodXRpbC5pc0VtcHR5T2JqZWN0T3JOdWxsKHVuZGVmaW5lZCkpLnRvQmVGYWxzeSgpO1xuICAgIGV4cGVjdCh1dGlsLmlzRW1wdHlPYmplY3RPck51bGwoMCkpLnRvQmVGYWxzeSgpO1xuICAgIGV4cGVjdCh1dGlsLmlzRW1wdHlPYmplY3RPck51bGwoJycpKS50b0JlRmFsc3koKTtcbiAgICBleHBlY3QodXRpbC5pc0VtcHR5T2JqZWN0T3JOdWxsKCdhYmMnKSkudG9CZUZhbHN5KCk7XG4gICAgZXhwZWN0KHV0aWwuaXNFbXB0eU9iamVjdE9yTnVsbCh7Zm9vOiAnYmFyJ30pKS50b0JlRmFsc3koKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjaGVjayBzdHJpbmdzJywgKCkgPT4ge1xuICAgIHZlcmlmeVZhbGlkU3RyaW5nKCcnKTtcbiAgICB2ZXJpZnlWYWxpZFN0cmluZyhuZXcgU3RyaW5nKCdmb28nKSk7XG4gICAgdmVyaWZ5VmFsaWRTdHJpbmcoU3RyaW5nKCdmb28nKSk7XG4gICAgdmVyaWZ5VmFsaWRTdHJpbmcoXCJoaSFcIik7XG5cbiAgICB2ZXJpZnlJbnZhbGlkU3RyaW5nKHt9KTtcbiAgICB2ZXJpZnlJbnZhbGlkU3RyaW5nKHtmb286IDF9KTtcbiAgICB2ZXJpZnlJbnZhbGlkU3RyaW5nKFtdKTtcbiAgICB2ZXJpZnlJbnZhbGlkU3RyaW5nKFsnMSddKTtcbiAgICB2ZXJpZnlJbnZhbGlkU3RyaW5nKFsxLCAnMiddKTtcbiAgICB2ZXJpZnlJbnZhbGlkU3RyaW5nKGNvbnNvbGUubG9nKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gdmVyaWZ5VmFsaWRTdHJpbmcoc3RyKSB7XG4gICAgZXhwZWN0KHV0aWwuYXNzZXJ0U3RyaW5nKHN0ciwgJ1Rlc3Qgc3RyaW5nJykpLnRvQmUoc3RyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZlcmlmeUludmFsaWRTdHJpbmcoc3RyKSB7XG4gICAgZXhwZWN0KCgpID0+IHV0aWwuYXNzZXJ0U3RyaW5nKHN0ciwgJ1Rlc3Qgc3RyaW5nJykpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuICB9XG5cbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBuZW80aiA9IHJlcXVpcmUoXCIuLi8uLi9saWIvdjFcIik7XG5cbmRlc2NyaWJlKCdkcml2ZXInLCBmdW5jdGlvbigpIHtcbiAgdmFyIGRyaXZlcjtcbiAgYmVmb3JlRWFjaChmdW5jdGlvbigpIHtcbiAgICBkcml2ZXIgPSBudWxsO1xuICB9KVxuICBhZnRlckVhY2goZnVuY3Rpb24oKSB7XG4gICAgaWYoZHJpdmVyKSB7XG4gICAgICBkcml2ZXIuY2xvc2UoKTtcbiAgICB9XG4gIH0pXG4gIGl0KCdzaG91bGQgZXhwb3NlIHNlc3Npb25zJywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW5cbiAgICBkcml2ZXIgPSBuZW80ai5kcml2ZXIoXCJib2x0Oi8vbG9jYWxob3N0XCIsIG5lbzRqLmF1dGguYmFzaWMoXCJuZW80alwiLCBcIm5lbzRqXCIpKTtcblxuICAgIC8vIFdoZW5cbiAgICB2YXIgc2Vzc2lvbiA9IGRyaXZlci5zZXNzaW9uKCk7XG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KCBzZXNzaW9uICkubm90LnRvQmVOdWxsKCk7XG4gICAgZHJpdmVyLmNsb3NlKCk7XG4gIH0pO1xuXG4gIHhpdCgnc2hvdWxkIGhhbmRsZSBjb25uZWN0aW9uIGVycm9ycycsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAvLyBHaXZlblxuICAgIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RlXCIsIG5lbzRqLmF1dGguYmFzaWMoXCJuZW80alwiLCBcIm5lbzRqXCIpKTtcblxuICAgIC8vIEV4cGVjdFxuICAgIGRyaXZlci5vbkVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgLy90aGUgZXJyb3IgbWVzc2FnZSBpcyBkaWZmZXJlbnQgd2hldGhlciBpbiBicm93c2VyIG9yIG5vZGVcbiAgICAgIGV4cGVjdChlcnIubWVzc2FnZSkubm90LnRvQmVOdWxsKCk7XG4gICAgICBkb25lKCk7XG4gICAgfTtcblxuICAgIC8vIFdoZW5cbiAgICBzdGFydE5ld1RyYW5zYWN0aW9uKGRyaXZlcik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGFuZGxlIHdyb25nIHNjaGVtZScsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gbmVvNGouZHJpdmVyKFwidGFuazovL2xvY2FsaG9zdFwiLCBuZW80ai5hdXRoLmJhc2ljKFwibmVvNGpcIiwgXCJuZW80alwiKSkpXG4gICAgICAudG9UaHJvdyhuZXcgRXJyb3IoXCJVbmtub3duIHNjaGVtZTogdGFuazovL1wiKSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGFuZGxlIFVSTCBwYXJhbWV0ZXIgc3RyaW5nJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBuZW80ai5kcml2ZXIoe3VyaTogJ2JvbHQ6Ly9sb2NhbGhvc3QnfSkpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuXG4gICAgZXhwZWN0KCgpID0+IG5lbzRqLmRyaXZlcihbJ2JvbHQ6bG9jYWxob3N0J10pKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcblxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBkcml2ZXIgPSBuZW80ai5kcml2ZXIoU3RyaW5nKCdib2x0Oi8vbG9jYWxob3N0JywgbmVvNGouYXV0aC5iYXNpYyhcIm5lbzRqXCIsIFwibmVvNGpcIikpKTtcbiAgICAgIHJldHVybiBkcml2ZXIuc2Vzc2lvbigpO1xuICAgIH0pLnRvQmVEZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCBlYXJseSBvbiB3cm9uZyBjcmVkZW50aWFscycsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAvLyBHaXZlblxuICAgIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RcIiwgbmVvNGouYXV0aC5iYXNpYyhcIm5lbzRqXCIsIFwid2hvIHdvdWxkIHVzZSBzdWNoIGEgcGFzc3dvcmRcIikpO1xuXG4gICAgLy8gRXhwZWN0XG4gICAgZHJpdmVyLm9uRXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAvL3RoZSBlcnJvciBtZXNzYWdlIGlzIGRpZmZlcmVudCB3aGV0aGVyIGluIGJyb3dzZXIgb3Igbm9kZVxuICAgICAgZXhwZWN0KGVyci5jb2RlKS50b0VxdWFsKCdOZW8uQ2xpZW50RXJyb3IuU2VjdXJpdHkuVW5hdXRob3JpemVkJyk7XG4gICAgICBkb25lKCk7XG4gICAgfTtcblxuICAgIC8vIFdoZW5cbiAgICBzdGFydE5ld1RyYW5zYWN0aW9uKGRyaXZlcik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaW5kaWNhdGUgc3VjY2VzcyBlYXJseSBvbiBjb3JyZWN0IGNyZWRlbnRpYWxzJywgZnVuY3Rpb24oZG9uZSkge1xuICAgIC8vIEdpdmVuXG4gICAgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdDovL2xvY2FsaG9zdFwiLCBuZW80ai5hdXRoLmJhc2ljKFwibmVvNGpcIiwgXCJuZW80alwiKSk7XG5cbiAgICAvLyBFeHBlY3RcbiAgICBkcml2ZXIub25Db21wbGV0ZWQgPSBmdW5jdGlvbiAobWV0YSkge1xuICAgICAgZG9uZSgpO1xuICAgIH07XG5cbiAgICAvLyBXaGVuXG4gICAgc3RhcnROZXdUcmFuc2FjdGlvbihkcml2ZXIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHBhc3MgYSByZWFsbSB3aXRoIGJhc2ljIGF1dGggdG9rZW5zJywgZnVuY3Rpb24oZG9uZSkge1xuICAgIC8vIEdpdmVuXG4gICAgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdDovL2xvY2FsaG9zdFwiLCBuZW80ai5hdXRoLmJhc2ljKFwibmVvNGpcIiwgXCJuZW80alwiLCBcIm5hdGl2ZVwiKSk7XG5cbiAgICAvLyBFeHBlY3RcbiAgICBkcml2ZXIub25Db21wbGV0ZWQgPSBmdW5jdGlvbiAobWV0YSkge1xuICAgICAgZG9uZSgpO1xuICAgIH07XG5cbiAgICAvLyBXaGVuXG4gICAgc3RhcnROZXdUcmFuc2FjdGlvbihkcml2ZXIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGNyZWF0ZSBjdXN0b20gYXV0aCB0b2tlbnMnLCBmdW5jdGlvbihkb25lKSB7XG4gICAgLy8gR2l2ZW5cbiAgICBkcml2ZXIgPSBuZW80ai5kcml2ZXIoXCJib2x0Oi8vbG9jYWxob3N0XCIsIG5lbzRqLmF1dGguY3VzdG9tKFwibmVvNGpcIiwgXCJuZW80alwiLCBcIm5hdGl2ZVwiLCBcImJhc2ljXCIpKTtcblxuICAgIC8vIEV4cGVjdFxuICAgIGRyaXZlci5vbkNvbXBsZXRlZCA9IGZ1bmN0aW9uIChtZXRhKSB7XG4gICAgICBkb25lKCk7XG4gICAgfTtcblxuICAgIC8vIFdoZW5cbiAgICBzdGFydE5ld1RyYW5zYWN0aW9uKGRyaXZlcik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYmUgcG9zc2libGUgdG8gY3JlYXRlIGN1c3RvbSBhdXRoIHRva2VucyB3aXRoIGFkZGl0aW9uYWwgcGFyYW1ldGVycycsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAvLyBHaXZlblxuICAgIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RcIiwgbmVvNGouYXV0aC5jdXN0b20oXCJuZW80alwiLCBcIm5lbzRqXCIsIFwibmF0aXZlXCIsIFwiYmFzaWNcIiwge3NlY3JldDogNDJ9KSk7XG5cbiAgICAvLyBFeHBlY3RcbiAgICBkcml2ZXIub25Db21wbGV0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBkb25lKCk7XG4gICAgfTtcblxuICAgIC8vIFdoZW5cbiAgICBzdGFydE5ld1RyYW5zYWN0aW9uKGRyaXZlcik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCBuaWNlbHkgd2hlbiBjb25uZWN0aW5nIHdpdGggcm91dGluZyB0byBzdGFuZGFsb25lIHNlcnZlcicsIGRvbmUgPT4ge1xuICAgIC8vIEdpdmVuXG4gICAgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdCtyb3V0aW5nOi8vbG9jYWxob3N0XCIsIG5lbzRqLmF1dGguYmFzaWMoXCJuZW80alwiLCBcIm5lbzRqXCIpKTtcblxuICAgIC8vIEV4cGVjdFxuICAgIGRyaXZlci5vbkVycm9yID0gZXJyb3IgPT4ge1xuICAgICAgZXhwZWN0KGVycm9yLm1lc3NhZ2UpLnRvRXF1YWwoJ1NlcnZlciBsb2NhbGhvc3QgY291bGQgbm90IHBlcmZvcm0gcm91dGluZy4gTWFrZSBzdXJlIHlvdSBhcmUgY29ubmVjdGluZyB0byBhIGNhdXNhbCBjbHVzdGVyJyk7XG4gICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9FcXVhbChuZW80ai5lcnJvci5TRVJWSUNFX1VOQVZBSUxBQkxFKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9O1xuXG4gICAgLy8gV2hlblxuICAgIHN0YXJ0TmV3VHJhbnNhY3Rpb24oZHJpdmVyKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYXZlIGNvcnJlY3QgdXNlciBhZ2VudCcsICgpID0+IHtcbiAgICBjb25zdCBkaXJlY3REcml2ZXIgPSBuZW80ai5kcml2ZXIoXCJib2x0Oi8vbG9jYWxob3N0XCIpO1xuICAgIGV4cGVjdChkaXJlY3REcml2ZXIuX3VzZXJBZ2VudCkudG9CZShcIm5lbzRqLWphdmFzY3JpcHQvMC4wLjAtZGV2XCIpO1xuICAgIGRpcmVjdERyaXZlci5jbG9zZSgpO1xuXG4gICAgY29uc3Qgcm91dGluZ0RyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQrcm91dGluZzovL2xvY2FsaG9zdFwiKTtcbiAgICBleHBlY3Qocm91dGluZ0RyaXZlci5fdXNlckFnZW50KS50b0JlKFwibmVvNGotamF2YXNjcmlwdC8wLjAuMC1kZXZcIik7XG4gICAgcm91dGluZ0RyaXZlci5jbG9zZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBUUlVTVF9PTl9GSVJTVF9VU0UgaXMgdXNlZCB3aXRoIHJvdXRpbmcnLCAoKSA9PiB7XG4gICAgY29uc3QgY3JlYXRlUm91dGluZ0RyaXZlcldpdGhUT0ZVID0gKCkgPT4ge1xuICAgICAgZHJpdmVyID0gbmVvNGouZHJpdmVyKCdib2x0K3JvdXRpbmc6Ly9sb2NhbGhvc3QnLCBuZW80ai5hdXRoLmJhc2ljKCduZW80aicsICduZW80aicpLCB7XG4gICAgICAgIGVuY3J5cHRlZDogXCJFTkNSWVBUSU9OX09OXCIsXG4gICAgICAgICAgdHJ1c3Q6ICdUUlVTVF9PTl9GSVJTVF9VU0UnXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZXhwZWN0KGNyZWF0ZVJvdXRpbmdEcml2ZXJXaXRoVE9GVSkudG9UaHJvdygpO1xuICB9KTtcblxuICB2YXIgZXhwb3NlZFR5cGVzID0gW1xuICAgICdOb2RlJyxcbiAgICAnUGF0aCcsXG4gICAgJ1BhdGhTZWdtZW50JyxcbiAgICAnUmVjb3JkJyxcbiAgICAnUmVsYXRpb25zaGlwJyxcbiAgICAnUmVzdWx0JyxcbiAgICAnUmVzdWx0U3VtbWFyeScsXG4gICAgJ1VuYm91bmRSZWxhdGlvbnNoaXAnLFxuICBdO1xuXG4gIGV4cG9zZWRUeXBlcy5mb3JFYWNoKHR5cGUgPT4ge1xuICAgIGl0KGBzaG91bGQgZXhwb3NlIHR5cGUgJHt0eXBlfWAsIGZ1bmN0aW9uKCkge1xuICAgICAgZXhwZWN0KHVuZGVmaW5lZCA9PT0gbmVvNGoudHlwZXNbdHlwZV0pLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogU3RhcnRzIG5ldyB0cmFuc2FjdGlvbiB0byBmb3JjZSBuZXcgbmV0d29yayBjb25uZWN0aW9uLlxuICAgKiBAcGFyYW0ge0RyaXZlcn0gZHJpdmVyIC0gdGhlIGRyaXZlciB0byB1c2UuXG4gICAqL1xuICBmdW5jdGlvbiBzdGFydE5ld1RyYW5zYWN0aW9uKGRyaXZlcikge1xuICAgIGNvbnN0IHNlc3Npb24gPSBkcml2ZXIuc2Vzc2lvbigpO1xuICAgIGV4cGVjdChzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKSkudG9CZURlZmluZWQoKTtcbiAgfVxuXG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG52YXIgdjEgPSByZXF1aXJlKCcuLi8uLi9saWIvdjEnKTtcbnZhciBpbnQgPSB2MS5pbnQ7XG52YXIgaW50ZWdlciA9IHYxLmludGVnZXI7XG5cbmRlc2NyaWJlKCdQb29sJywgZnVuY3Rpb24oKSB7XG4gIGl0KCdleHBvc2VzIGluU2FmZVJhbmdlIGZ1bmN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGV4cGVjdChpbnRlZ2VyLmluU2FmZVJhbmdlKGludChcIjkwMDcxOTkyNTQ3NDA5OTFcIikpKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KGludGVnZXIuaW5TYWZlUmFuZ2UoaW50KFwiOTAwNzE5OTI1NDc0MDk5MlwiKSkpLnRvQmVGYWxzeSgpO1xuICAgIGV4cGVjdChpbnRlZ2VyLmluU2FmZVJhbmdlKGludChcIi05MDA3MTk5MjU0NzQwOTkxXCIpKSkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChpbnRlZ2VyLmluU2FmZVJhbmdlKGludChcIi05MDA3MTk5MjU0NzQwOTkyXCIpKSkudG9CZUZhbHN5KCk7XG4gIH0pO1xuXG4gIGl0KCdleHBvc2VzIHRvTnVtYmVyIGZ1bmN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGV4cGVjdChpbnRlZ2VyLnRvTnVtYmVyKGludChcIjkwMDcxOTkyNTQ3NDA5OTFcIikpKS50b0VxdWFsKDkwMDcxOTkyNTQ3NDA5OTEpO1xuICAgIGV4cGVjdChpbnRlZ2VyLnRvTnVtYmVyKGludChcIi05MDA3MTk5MjU0NzQwOTkxXCIpKSkudG9FcXVhbCgtOTAwNzE5OTI1NDc0MDk5MSk7XG4gIH0pO1xuXG4gIGl0KCdleHBvc2VzIHRvU3RyaW5nIGZ1bmN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGV4cGVjdChpbnRlZ2VyLnRvU3RyaW5nKGludChcIjkwMDcxOTkyNTQ3NDA5OTFcIikpKS50b0VxdWFsKFwiOTAwNzE5OTI1NDc0MDk5MVwiKTtcbiAgICBleHBlY3QoaW50ZWdlci50b1N0cmluZyhpbnQoXCI5MDA3MTk5MjU0NzQwOTkyXCIpKSkudG9FcXVhbChcIjkwMDcxOTkyNTQ3NDA5OTJcIik7XG4gICAgZXhwZWN0KGludGVnZXIudG9TdHJpbmcoaW50KFwiLTkwMDcxOTkyNTQ3NDA5OTFcIikpKS50b0VxdWFsKFwiLTkwMDcxOTkyNTQ3NDA5OTFcIik7XG4gICAgZXhwZWN0KGludGVnZXIudG9TdHJpbmcoaW50KFwiLTkwMDcxOTkyNTQ3NDA5OTJcIikpKS50b0VxdWFsKFwiLTkwMDcxOTkyNTQ3NDA5OTJcIik7XG4gIH0pO1xufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgb3MgPSByZXF1aXJlKCdvcycpO1xudmFyIE5vZGVDaGFubmVsID0gcmVxdWlyZSgnLi4vLi4vbGliL3YxL2ludGVybmFsL2NoLW5vZGUnKS5kZWZhdWx0O1xuXG5kZXNjcmliZSgnUGFja2FnZScsIGZ1bmN0aW9uKCkge1xuICB2YXIgZHJpdmVyR2xvYmFsID0ge2Nsb3NlOiBmdW5jdGlvbigpIHt9fTtcbiAgYWZ0ZXJBbGwoZnVuY3Rpb24oKSB7XG4gICAgZHJpdmVyR2xvYmFsLmNsb3NlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgd29yaycsIGZ1bmN0aW9uKGRvbmUpe1xuICAgIHZhciBuZW80alJlcTtcbiAgICAvLyBBc3N1bWluZyB3ZSBvbmx5IHJ1biB0aGlzIHRlc3Qgb24gTm9kZUpTXG4gICAgaWYoICFOb2RlQ2hhbm5lbC5hdmFpbGFibGUgKSB7XG4gICAgICBkb25lKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIG5lbzRqUmVxID0gcmVxdWlyZShwYXRoLmpvaW4ob3MudG1wZGlyKCksICdzYW5kYm94JywgJ25vZGVfbW9kdWxlcycsICduZW80ai1kcml2ZXInLCAnbGliJykpO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgZG9uZS5mYWlsKCdDb3VsZCBub3QgbG9hZCBzYW5kYm94IHBhY2thZ2UnKVxuICAgIH1cblxuICAgIGRyaXZlckdsb2JhbCA9IG5lbzRqUmVxLnYxLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RcIiwgbmVvNGpSZXEudjEuYXV0aC5iYXNpYyhcIm5lbzRqXCIsIFwibmVvNGpcIikpO1xuICAgIHZhciBzZXNzaW9uID0gZHJpdmVyR2xvYmFsLnNlc3Npb24oKTtcbiAgICBzZXNzaW9uLnJ1bignUkVUVVJOIDEgQVMgYW5zd2VyJykudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkcy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgICBleHBlY3QocmVzdWx0LnJlY29yZHNbMF0uZ2V0KCdhbnN3ZXInKS50b051bWJlcigpKS50b0JlKDEpO1xuICAgICAgc2Vzc2lvbi5jbG9zZSgpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgZG9uZS5mYWlsKFwiRXJyb3IgaW4gdGVzdFwiKVxuICAgIH0pXG4gIH0pXG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG52YXIgUmVjb3JkID0gcmVxdWlyZShcIi4uLy4uL2xpYi92MS9yZWNvcmRcIikuZGVmYXVsdDtcbnZhciBOZW80akVycm9yID0gcmVxdWlyZShcIi4uLy4uL2xpYi92MS9lcnJvclwiKS5OZW80akVycm9yO1xuXG5cbmRlc2NyaWJlKCdSZWNvcmQnLCBmdW5jdGlvbigpIHtcbiAgaXQoJ3Nob3VsZCBhbGxvdyBnZXR0aW5nIGZpZWxkcyBieSBuYW1lJywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgcmVjb3JkID0gbmV3IFJlY29yZCggW1wibmFtZVwiXSwgW1wiQm9iXCJdICk7XG5cbiAgICAvLyBXaGVuICYgVGhlblxuICAgIGV4cGVjdChyZWNvcmQuZ2V0KFwibmFtZVwiKSkudG9FcXVhbChcIkJvYlwiKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhbGxvdyBjaGVja2luZyBpZiBmaWVsZHMgZXhpc3QnLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciByZWNvcmQgPSBuZXcgUmVjb3JkKCBbXCJuYW1lXCJdLCBbXCJCb2JcIl0gKTtcblxuICAgIC8vIFdoZW4gJiBUaGVuXG4gICAgZXhwZWN0KHJlY29yZC5oYXMoXCJuYW1lXCIpKS50b0VxdWFsKHRydWUpO1xuICAgIGV4cGVjdChyZWNvcmQuaGFzKFwiaW52YWxpZCBrZXlcIikpLnRvRXF1YWwoZmFsc2UpO1xuICAgIGV4cGVjdChyZWNvcmQuaGFzKDApKS50b0VxdWFsKHRydWUpO1xuICAgIGV4cGVjdChyZWNvcmQuaGFzKDEpKS50b0VxdWFsKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0cmFuc2Zvcm0gUmVjb3JkIGludG8gT2JqZWN0JywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgcmVjb3JkID0gbmV3IFJlY29yZCggW1wibmFtZVwiLCBcImFnZVwiLCBcIm5lc3RlZFwiXSwgW1wiQm9iXCIsIDIwLjUsIHt0ZXN0OiB0cnVlfV0gKTtcblxuICAgIC8vIFdoZW5cbiAgICB2YXIgb2JqID0gcmVjb3JkLnRvT2JqZWN0KCk7XG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KG9iai5uYW1lKS50b0VxdWFsKFwiQm9iXCIpO1xuICAgIGV4cGVjdChvYmouYWdlKS50b0VxdWFsKDIwLjUpO1xuICAgIGV4cGVjdChvYmoubmVzdGVkLnRlc3QpLnRvRXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZ2l2ZSBoZWxwZnVsIGVycm9yIG9uIG5vIHN1Y2gga2V5JywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgcmVjb3JkID0gbmV3IFJlY29yZCggW1wibmFtZVwiXSwgW1wiQm9iXCJdICk7XG5cbiAgICAvLyBXaGVuICYgVGhlblxuICAgIGV4cGVjdCggZnVuY3Rpb24oKSB7IHJlY29yZC5nZXQoXCJhZ2VcIikgfSkudG9UaHJvdyhuZXcgTmVvNGpFcnJvcihcbiAgICAgIFwiVGhpcyByZWNvcmQgaGFzIG5vIGZpZWxkIHdpdGgga2V5ICdhZ2UnLCBhdmFpbGFibGUga2V5IGFyZTogW25hbWVdLlwiKSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYWxsb3cgZ2V0dGluZyBmaWVsZHMgYnkgaW5kZXgnLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciByZWNvcmQgPSBuZXcgUmVjb3JkKCBbXCJuYW1lXCJdLCBbXCJCb2JcIl0gKTtcblxuICAgIC8vIFdoZW4gJiBUaGVuXG4gICAgZXhwZWN0KHJlY29yZC5nZXQoMCkpLnRvRXF1YWwoXCJCb2JcIik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZ2l2ZSBoZWxwZnVsIGVycm9yIG9uIG5vIHN1Y2ggaW5kZXgnLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciByZWNvcmQgPSBuZXcgUmVjb3JkKCBbXCJuYW1lXCJdLCBbXCJCb2JcIl0gKTtcblxuICAgIC8vIFdoZW4gJiBUaGVuXG4gICAgZXhwZWN0KCBmdW5jdGlvbigpIHsgcmVjb3JkLmdldCgxKSB9KS50b1Rocm93KG5ldyBOZW80akVycm9yKFxuICAgICAgXCJUaGlzIHJlY29yZCBoYXMgbm8gZmllbGQgd2l0aCBpbmRleCAnMScuIFJlbWVtYmVyIHRoYXQgaW5kZXhlcyBzdGFydCBhdCBgMGAsIFwiICtcbiAgICAgIFwiYW5kIG1ha2Ugc3VyZSB5b3VyIHN0YXRlbWVudCByZXR1cm5zIHJlY29yZHMgaW4gdGhlIHNoYXBlIHlvdSBtZWFudCBpdCB0by5cIikpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGhhdmUgbGVuZ3RoJywgZnVuY3Rpb24oKSB7XG4gICAgLy8gV2hlbiAmIFRoZW5cbiAgICBleHBlY3QoIG5ldyBSZWNvcmQoIFtdLCBbXSkubGVuZ3RoICkudG9CZSgwKTtcbiAgICBleHBlY3QoIG5ldyBSZWNvcmQoIFtcIm5hbWVcIl0sIFtcIkJvYlwiXSkubGVuZ3RoICkudG9CZSgxKTtcbiAgICBleHBlY3QoIG5ldyBSZWNvcmQoIFtcIm5hbWVcIiwgXCJhZ2VcIl0sIFtcIkJvYlwiLCA0NV0pLmxlbmd0aCApLnRvQmUoMik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYWxsb3cgZm9yRWFjaCB0aHJvdWdoIHRoZSByZWNvcmQnLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciByZWNvcmQgPSBuZXcgUmVjb3JkKCBbXCJuYW1lXCIsIFwiYWdlXCJdLCBbXCJCb2JcIiwgNDVdICk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgLy8gV2hlblxuICAgIHJlY29yZC5mb3JFYWNoKCBmdW5jdGlvbiggdmFsdWUsIGtleSwgcmVjb3JkICkge1xuICAgICAgcmVzdWx0LnB1c2goIFt2YWx1ZSwga2V5LCByZWNvcmRdICk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbW1wiQm9iXCIsIFwibmFtZVwiLCByZWNvcmRdLCBbNDUsIFwiYWdlXCIsIHJlY29yZF1dKTtcbiAgfSk7XG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG52YXIgbmVvNGogPSByZXF1aXJlKFwiLi4vLi4vbGliL3YxXCIpO1xuXG5kZXNjcmliZSgncmVzdWx0IHN0cmVhbScsIGZ1bmN0aW9uKCkge1xuXG4gIHZhciBkcml2ZXIsIHNlc3Npb247XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbihkb25lKSB7XG4gICAgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdDovL2xvY2FsaG9zdFwiLCBuZW80ai5hdXRoLmJhc2ljKFwibmVvNGpcIiwgXCJuZW80alwiKSk7XG4gICAgc2Vzc2lvbiA9IGRyaXZlci5zZXNzaW9uKCk7XG5cbiAgICBzZXNzaW9uLnJ1bihcIk1BVENIIChuKSBERVRBQ0ggREVMRVRFIG5cIikudGhlbihkb25lKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uKCkge1xuICAgIGRyaXZlci5jbG9zZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFsbG93IGNoYWluaW5nIGB0aGVuYCwgcmV0dXJuaW5nIGEgbmV3IHRoaW5nIGluIGVhY2gnLCBmdW5jdGlvbihkb25lKSB7XG4gICAgLy8gV2hlbiAmIFRoZW5cbiAgICBzZXNzaW9uLnJ1biggXCJSRVRVUk4gMVwiKVxuICAgICAgLnRoZW4oIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gXCJmaXJzdFwiO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgZXhwZWN0KGFyZykudG9CZSggXCJmaXJzdFwiICk7XG4gICAgICAgIHJldHVybiBcInNlY29uZFwiO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgZXhwZWN0KGFyZykudG9CZSggXCJzZWNvbmRcIiApO1xuICAgICAgfSlcbiAgICAgIC50aGVuKGRvbmUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFsbG93IGNhdGNoaW5nIGV4Y2VwdGlvbiB0aHJvd24gaW4gYHRoZW5gJywgZnVuY3Rpb24oZG9uZSkge1xuICAgIC8vIFdoZW4gJiBUaGVuXG4gICAgc2Vzc2lvbi5ydW4oIFwiUkVUVVJOIDFcIilcbiAgICAgIC50aGVuKCBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXdheSB3aXRoIHlvdSFcIik7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgZXhwZWN0KGVyci5tZXNzYWdlKS50b0JlKCBcIkF3YXkgd2l0aCB5b3UhXCIgKTtcbiAgICAgICAgZG9uZSgpXG4gICAgICB9KTtcbiAgfSk7XG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgbmVvNGogZnJvbSAnLi4vLi4vc3JjL3YxJztcbmltcG9ydCB7c3RhdGVtZW50VHlwZX0gZnJvbSAnLi4vLi4vc3JjL3YxL3Jlc3VsdC1zdW1tYXJ5JztcbmltcG9ydCBTZXNzaW9uIGZyb20gJy4uLy4uL3NyYy92MS9zZXNzaW9uJztcbmltcG9ydCB7UkVBRH0gZnJvbSAnLi4vLi4vc3JjL3YxL2RyaXZlcic7XG5pbXBvcnQge1NpbmdsZUNvbm5lY3Rpb25Qcm92aWRlcn0gZnJvbSAnLi4vLi4vc3JjL3YxL2ludGVybmFsL2Nvbm5lY3Rpb24tcHJvdmlkZXJzJztcbmltcG9ydCBGYWtlQ29ubmVjdGlvbiBmcm9tICcuLi9pbnRlcm5hbC9mYWtlLWNvbm5lY3Rpb24nO1xuXG5kZXNjcmliZSgnc2Vzc2lvbicsICgpID0+IHtcblxuICBsZXQgZHJpdmVyO1xuICBsZXQgc2Vzc2lvbjtcbiAgbGV0IHNlcnZlck1ldGFkYXRhO1xuICBsZXQgb3JpZ2luYWxUaW1lb3V0O1xuXG4gIGJlZm9yZUVhY2goZG9uZSA9PiB7XG4gICAgZHJpdmVyID0gbmVvNGouZHJpdmVyKCdib2x0Oi8vbG9jYWxob3N0JywgbmVvNGouYXV0aC5iYXNpYygnbmVvNGonLCAnbmVvNGonKSk7XG4gICAgZHJpdmVyLm9uQ29tcGxldGVkID0gbWV0YSA9PiB7XG4gICAgICBzZXJ2ZXJNZXRhZGF0YSA9IG1ldGFbJ3NlcnZlciddO1xuICAgIH07XG4gICAgc2Vzc2lvbiA9IGRyaXZlci5zZXNzaW9uKCk7XG4gICAgb3JpZ2luYWxUaW1lb3V0ID0gamFzbWluZS5ERUZBVUxUX1RJTUVPVVRfSU5URVJWQUw7XG4gICAgamFzbWluZS5ERUZBVUxUX1RJTUVPVVRfSU5URVJWQUwgPSAxMDAwMDtcblxuICAgIHNlc3Npb24ucnVuKCdNQVRDSCAobikgREVUQUNIIERFTEVURSBuJykudGhlbihkb25lKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBqYXNtaW5lLkRFRkFVTFRfVElNRU9VVF9JTlRFUlZBTCA9IG9yaWdpbmFsVGltZW91dDtcbiAgICBkcml2ZXIuY2xvc2UoKTtcbiAgfSk7XG5cbiAgaXQoJ2Nsb3NlIHNob3VsZCBpbnZva2UgY2FsbGJhY2sgJywgZG9uZSA9PiB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IG5ldyBGYWtlQ29ubmVjdGlvbigpO1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXdTZXNzaW9uV2l0aENvbm5lY3Rpb24oY29ubmVjdGlvbik7XG5cbiAgICBzZXNzaW9uLmNsb3NlKGRvbmUpO1xuICB9KTtcblxuICBpdCgnY2xvc2Ugc2hvdWxkIGludm9rZSBjYWxsYmFjayBldmVuIHdoZW4gYWxyZWFkeSBjbG9zZWQgJywgZG9uZSA9PiB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IG5ldyBGYWtlQ29ubmVjdGlvbigpO1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXdTZXNzaW9uV2l0aENvbm5lY3Rpb24oY29ubmVjdGlvbik7XG5cbiAgICBzZXNzaW9uLmNsb3NlKCgpID0+IHtcbiAgICAgIHNlc3Npb24uY2xvc2UoKCkgPT4ge1xuICAgICAgICBzZXNzaW9uLmNsb3NlKCgpID0+IHtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdjbG9zZSBzaG91bGQgYmUgaWRlbXBvdGVudCAnLCBkb25lID0+IHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gbmV3IEZha2VDb25uZWN0aW9uKCk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ld1Nlc3Npb25XaXRoQ29ubmVjdGlvbihjb25uZWN0aW9uKTtcblxuICAgIHNlc3Npb24uY2xvc2UoKCkgPT4ge1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uaXNSZWxlYXNlZE9uY2VPblNlc3Npb25DbG9zZSgpKS50b0JlVHJ1dGh5KCk7XG5cbiAgICAgIHNlc3Npb24uY2xvc2UoKCkgPT4ge1xuICAgICAgICBleHBlY3QoY29ubmVjdGlvbi5pc1JlbGVhc2VkT25jZU9uU2Vzc2lvbkNsb3NlKCkpLnRvQmVUcnV0aHkoKTtcblxuICAgICAgICBzZXNzaW9uLmNsb3NlKCgpID0+IHtcbiAgICAgICAgICBleHBlY3QoY29ubmVjdGlvbi5pc1JlbGVhc2VkT25jZU9uU2Vzc2lvbkNsb3NlKCkpLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY2xvc2UgdHJhbnNhY3Rpb24gZXhlY3V0b3InLCBkb25lID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3U2Vzc2lvbldpdGhDb25uZWN0aW9uKG5ldyBGYWtlQ29ubmVjdGlvbigpKTtcblxuICAgIGxldCBjbG9zZUNhbGxlZFRpbWVzID0gMDtcbiAgICBjb25zdCB0cmFuc2FjdGlvbkV4ZWN1dG9yID0gc2Vzc2lvbi5fdHJhbnNhY3Rpb25FeGVjdXRvcjtcbiAgICBjb25zdCBvcmlnaW5hbENsb3NlID0gdHJhbnNhY3Rpb25FeGVjdXRvci5jbG9zZTtcbiAgICB0cmFuc2FjdGlvbkV4ZWN1dG9yLmNsb3NlID0gKCkgPT4ge1xuICAgICAgY2xvc2VDYWxsZWRUaW1lcysrO1xuICAgICAgb3JpZ2luYWxDbG9zZS5jYWxsKHRyYW5zYWN0aW9uRXhlY3V0b3IpO1xuICAgIH07XG5cbiAgICBzZXNzaW9uLmNsb3NlKCgpID0+IHtcbiAgICAgIGV4cGVjdChjbG9zZUNhbGxlZFRpbWVzKS50b0VxdWFsKDEpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGNsb3NlIGRyaXZlciBhZnRlciBjbG9zaW5nIHNlc3Npb24gd2l0aCBmYWlsZWQgdHggJywgZG9uZSA9PiB7XG4gICAgY29uc3QgZHJpdmVyID0gbmVvNGouZHJpdmVyKCdib2x0Oi8vbG9jYWxob3N0JywgbmVvNGouYXV0aC5iYXNpYygnbmVvNGonLCAnbmVvNGonKSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGRyaXZlci5zZXNzaW9uKCk7XG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eC5ydW4oJ0lOVkFMSUQgUVVFUlknKS5jYXRjaCgoKSA9PiB7XG4gICAgICB0eC5yb2xsYmFjaygpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgc2Vzc2lvbi5jbG9zZSgoKSA9PiB7XG4gICAgICAgICAgZHJpdmVyLmNsb3NlKCk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGV4cG9zZSBiYXNpYyBydW4vc3Vic2NyaWJlICcsIGRvbmUgPT4ge1xuICAgIC8vIEdpdmVuXG5cbiAgICAvLyBXaGVuICYgVGhlblxuICAgIGNvbnN0IHJlY29yZHMgPSBbXTtcbiAgICBzZXNzaW9uLnJ1bihcIlJFVFVSTiAxLjAgQVMgYVwiKS5zdWJzY3JpYmUoe1xuICAgICAgb25OZXh0OiByZWNvcmQgPT4ge1xuICAgICAgICByZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgICAgIH0sXG4gICAgICBvbkNvbXBsZXRlZDogKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVjb3Jkcy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgICAgIGV4cGVjdChyZWNvcmRzWzBdLmdldCgnYScpKS50b0JlKDEpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQga2VlcCBjb250ZXh0IGluIHN1YnNjcmliZSBtZXRob2RzICcsIGRvbmUgPT4ge1xuICAgIC8vIEdpdmVuXG4gICAgZnVuY3Rpb24gTXlPYnNlcnZlcigpIHtcbiAgICAgIHRoaXMubG9jYWwgPSAnaGVsbG8nO1xuICAgICAgY29uc3QgcHJpdmF0ZUxvY2FsID0gJ2hlbGxvJztcbiAgICAgIHRoaXMub25OZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QocHJpdmF0ZUxvY2FsKS50b0JlKCdoZWxsbycpO1xuICAgICAgICBleHBlY3QodGhpcy5sb2NhbCkudG9CZSgnaGVsbG8nKTtcbiAgICAgIH07XG4gICAgICB0aGlzLm9uQ29tcGxldGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QocHJpdmF0ZUxvY2FsKS50b0JlKCdoZWxsbycpO1xuICAgICAgICBleHBlY3QodGhpcy5sb2NhbCkudG9CZSgnaGVsbG8nKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBXaGVuICYgVGhlblxuICAgIHNlc3Npb24ucnVuKCdSRVRVUk4gMS4wIEFTIGEnKS5zdWJzY3JpYmUobmV3IE15T2JzZXJ2ZXIoKSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY2FsbCBvYnNlcnZlcnMgb25FcnJvciBvbiBlcnJvciAnLCBkb25lID0+IHtcblxuICAgIC8vIFdoZW4gJiBUaGVuXG4gICAgc2Vzc2lvbi5ydW4oJ1JFVFVSTiAxIEFTJykuc3Vic2NyaWJlKHtcbiAgICAgIG9uRXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvRXF1YWwoJ05lby5DbGllbnRFcnJvci5TdGF0ZW1lbnQuU3ludGF4RXJyb3InKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFjY2VwdCBhIHN0YXRlbWVudCBvYmplY3QgJywgZG9uZSA9PiB7XG4gICAgLy8gR2l2ZW5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB7dGV4dDogJ1JFVFVSTiAxID0ge3BhcmFtfSBBUyBhJywgcGFyYW1ldGVyczoge3BhcmFtOiAxfX07XG5cbiAgICAvLyBXaGVuICYgVGhlblxuICAgIGNvbnN0IHJlY29yZHMgPSBbXTtcbiAgICBzZXNzaW9uLnJ1bihzdGF0ZW1lbnQpLnN1YnNjcmliZSh7XG4gICAgICBvbk5leHQ6IHJlY29yZCA9PiB7XG4gICAgICAgIHJlY29yZHMucHVzaChyZWNvcmQpO1xuICAgICAgfSxcbiAgICAgIG9uQ29tcGxldGVkOiAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZWNvcmRzLmxlbmd0aCkudG9CZSgxKTtcbiAgICAgICAgZXhwZWN0KHJlY29yZHNbMF0uZ2V0KCdhJykpLnRvQmUodHJ1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBleHBvc2UgcnVuL3RoZW4vdGhlbi90aGVuICcsIGRvbmUgPT4ge1xuICAgIC8vIFdoZW4gJiBUaGVuXG4gICAgc2Vzc2lvbi5ydW4oXCJSRVRVUk4gMS4wIEFTIGFcIilcbiAgICAgIC50aGVuKFxuICAgICAgICByZXN1bHQgPT4ge1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkcy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzWzBdLmdldCgnYScpKS50b0JlKDEpO1xuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfVxuICAgICAgKS50aGVuKFxuICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzLmxlbmd0aCkudG9CZSgxKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzWzBdLmdldCgnYScpKS50b0JlKDEpO1xuICAgICAgfVxuICAgICkudGhlbihkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBleHBvc2UgYmFzaWMgcnVuL2NhdGNoICcsIGRvbmUgPT4ge1xuICAgIC8vIFdoZW4gJiBUaGVuXG4gICAgc2Vzc2lvbi5ydW4oJ1JFVFVSTiAxIEFTJykuY2F0Y2goXG4gICAgICBlcnJvciA9PiB7XG4gICAgICAgIGV4cGVjdChlcnJvci5jb2RlKS50b0VxdWFsKCdOZW8uQ2xpZW50RXJyb3IuU3RhdGVtZW50LlN5bnRheEVycm9yJyk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH1cbiAgICApXG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXhwb3NlIHN1bW1hcml6ZSBtZXRob2QgZm9yIGJhc2ljIG1ldGFkYXRhICcsIGRvbmUgPT4ge1xuICAgIC8vIEdpdmVuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gJ0NSRUFURSAobjpMYWJlbCB7cHJvcDp7cHJvcH19KSBSRVRVUk4gbic7XG4gICAgY29uc3QgcGFyYW1zID0ge3Byb3A6ICdzdHJpbmcnfTtcbiAgICAvLyBXaGVuICYgVGhlblxuICAgIHNlc3Npb24ucnVuKHN0YXRlbWVudCwgcGFyYW1zKVxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3Qgc3VtID0gcmVzdWx0LnN1bW1hcnk7XG4gICAgICAgIGV4cGVjdChzdW0uc3RhdGVtZW50LnRleHQpLnRvQmUoc3RhdGVtZW50KTtcbiAgICAgICAgZXhwZWN0KHN1bS5zdGF0ZW1lbnQucGFyYW1ldGVycykudG9CZShwYXJhbXMpO1xuICAgICAgICBleHBlY3Qoc3VtLmNvdW50ZXJzLmNvbnRhaW5zVXBkYXRlcygpKS50b0JlKHRydWUpO1xuICAgICAgICBleHBlY3Qoc3VtLmNvdW50ZXJzLm5vZGVzQ3JlYXRlZCgpKS50b0JlKDEpO1xuICAgICAgICBleHBlY3Qoc3VtLnN0YXRlbWVudFR5cGUpLnRvQmUoc3RhdGVtZW50VHlwZS5SRUFEX1dSSVRFKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXhwb3NlIHNlcnZlciBpbmZvIG9uIHN1Y2Nlc3NmdWwgcXVlcnknLCBkb25lID0+IHtcbiAgICBpZiAoIXNlcnZlcklzMzFPckxhdGVyKGRvbmUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2l2ZW5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSAnUkVUVVJOIDEnO1xuXG4gICAgLy8gV2hlbiAmIFRoZW5cbiAgICBzZXNzaW9uLnJ1bihzdGF0ZW1lbnQpXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICBjb25zdCBzdW0gPSByZXN1bHQuc3VtbWFyeTtcbiAgICAgICAgZXhwZWN0KHN1bS5zZXJ2ZXIpLnRvQmVEZWZpbmVkKCk7XG4gICAgICAgIGV4cGVjdChzdW0uc2VydmVyLmFkZHJlc3MpLnRvRXF1YWwoJ2xvY2FsaG9zdDo3Njg3Jyk7XG4gICAgICAgIGV4cGVjdChzdW0uc2VydmVyLnZlcnNpb24pLnRvQmVEZWZpbmVkKCk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGV4cG9zZSBleGVjdXRpb24gdGltZSBpbmZvcm1hdGlvbiB3aGVuIHVzaW5nIDMuMSBhbmQgb253YXJkcycsIGRvbmUgPT4ge1xuICAgIGlmICghc2VydmVySXMzMU9yTGF0ZXIoZG9uZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHaXZlblxuICAgIGNvbnN0IHN0YXRlbWVudCA9ICdVTldJTkQgcmFuZ2UoMSwxMDAwMCkgQVMgbiBSRVRVUk4gbiBBUyBudW1iZXInO1xuICAgIC8vIFdoZW4gJiBUaGVuXG5cbiAgICBzZXNzaW9uLnJ1bihzdGF0ZW1lbnQpXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICBjb25zdCBzdW0gPSByZXN1bHQuc3VtbWFyeTtcbiAgICAgICAgZXhwZWN0KHN1bS5yZXN1bHRBdmFpbGFibGVBZnRlci50b0ludCgpKS5ub3QudG9CZUxlc3NUaGFuKDApO1xuICAgICAgICBleHBlY3Qoc3VtLnJlc3VsdENvbnN1bWVkQWZ0ZXIudG9JbnQoKSkubm90LnRvQmVMZXNzVGhhbigwKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXhwb3NlIGVtcHR5IHBhcmFtZXRlciBtYXAgb24gY2FsbCB3aXRoIG5vIHBhcmFtZXRlcnMnLCBkb25lID0+IHtcbiAgICAvLyBHaXZlblxuICAgIGNvbnN0IHN0YXRlbWVudCA9ICdDUkVBVEUgKG46TGFiZWwge3Byb3A6XFwnc3RyaW5nXFwnfSkgUkVUVVJOIG4nO1xuICAgIC8vIFdoZW4gJiBUaGVuXG4gICAgc2Vzc2lvbi5ydW4oc3RhdGVtZW50KVxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3Qgc3VtID0gcmVzdWx0LnN1bW1hcnk7XG4gICAgICAgIGV4cGVjdChzdW0uc3RhdGVtZW50LnBhcmFtZXRlcnMpLnRvRXF1YWwoe30pO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBleHBvc2UgcGxhbiAnLCBkb25lID0+IHtcbiAgICAvLyBHaXZlblxuICAgIGNvbnN0IHN0YXRlbWVudCA9ICdFWFBMQUlOIENSRUFURSAobjpMYWJlbCB7cHJvcDp7cHJvcH19KSBSRVRVUk4gbic7XG4gICAgY29uc3QgcGFyYW1zID0ge3Byb3A6ICdzdHJpbmcnfTtcbiAgICAvLyBXaGVuICYgVGhlblxuICAgIHNlc3Npb25cbiAgICAgIC5ydW4oc3RhdGVtZW50LCBwYXJhbXMpXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICBjb25zdCBzdW0gPSByZXN1bHQuc3VtbWFyeTtcbiAgICAgICAgZXhwZWN0KHN1bS5oYXNQbGFuKCkpLnRvQmUodHJ1ZSk7XG4gICAgICAgIGV4cGVjdChzdW0uaGFzUHJvZmlsZSgpKS50b0JlKGZhbHNlKTtcbiAgICAgICAgZXhwZWN0KHN1bS5wbGFuLm9wZXJhdG9yVHlwZSkudG9CZSgnUHJvZHVjZVJlc3VsdHMnKTtcbiAgICAgICAgZXhwZWN0KHN1bS5wbGFuLmFyZ3VtZW50cy5ydW50aW1lKS50b0JlKCdJTlRFUlBSRVRFRCcpO1xuICAgICAgICBleHBlY3Qoc3VtLnBsYW4uaWRlbnRpZmllcnNbMF0pLnRvQmUoJ24nKTtcbiAgICAgICAgZXhwZWN0KHN1bS5wbGFuLmNoaWxkcmVuWzBdLm9wZXJhdG9yVHlwZSkudG9CZSgnQ3JlYXRlTm9kZScpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBleHBvc2UgcHJvZmlsZSAnLCBkb25lID0+IHtcbiAgICAvLyBHaXZlblxuICAgIGNvbnN0IHN0YXRlbWVudCA9ICdQUk9GSUxFIE1BVENIIChuOkxhYmVsIHtwcm9wOntwcm9wfX0pIFJFVFVSTiBuJztcbiAgICBjb25zdCBwYXJhbXMgPSB7cHJvcDogJ3N0cmluZyd9O1xuICAgIC8vIFdoZW4gJiBUaGVuXG4gICAgc2Vzc2lvblxuICAgICAgLnJ1bihzdGF0ZW1lbnQsIHBhcmFtcylcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIGNvbnN0IHN1bSA9IHJlc3VsdC5zdW1tYXJ5O1xuICAgICAgICBleHBlY3Qoc3VtLmhhc1BsYW4oKSkudG9CZSh0cnVlKTsgLy9XaGVuIHRoZXJlJ3MgYSBwcm9maWxlLCB0aGVyZSdzIGEgcGxhblxuICAgICAgICBleHBlY3Qoc3VtLmhhc1Byb2ZpbGUoKSkudG9CZSh0cnVlKTtcbiAgICAgICAgZXhwZWN0KHN1bS5wcm9maWxlLm9wZXJhdG9yVHlwZSkudG9CZSgnUHJvZHVjZVJlc3VsdHMnKTtcbiAgICAgICAgZXhwZWN0KHN1bS5wcm9maWxlLmFyZ3VtZW50cy5ydW50aW1lKS50b0JlKCdJTlRFUlBSRVRFRCcpO1xuICAgICAgICBleHBlY3Qoc3VtLnByb2ZpbGUuaWRlbnRpZmllcnNbMF0pLnRvQmUoJ24nKTtcbiAgICAgICAgZXhwZWN0KHN1bS5wcm9maWxlLmNoaWxkcmVuWzBdLm9wZXJhdG9yVHlwZSkudG9CZSgnRmlsdGVyJyk7XG4gICAgICAgIGV4cGVjdChzdW0ucHJvZmlsZS5yb3dzKS50b0JlKDApO1xuICAgICAgICAvL2V4cGVjdChzdW0ucHJvZmlsZS5kYkhpdHMpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXhwb3NlIGN5cGhlciBub3RpZmljYXRpb25zICcsIGRvbmUgPT4ge1xuICAgIC8vIEdpdmVuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gJ0VYUExBSU4gTUFUQ0ggKG4pLCAobSkgUkVUVVJOIG4sIG0nO1xuICAgIC8vIFdoZW4gJiBUaGVuXG4gICAgc2Vzc2lvblxuICAgICAgLnJ1bihzdGF0ZW1lbnQpXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICBjb25zdCBzdW0gPSByZXN1bHQuc3VtbWFyeTtcbiAgICAgICAgZXhwZWN0KHN1bS5ub3RpZmljYXRpb25zLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgICAgICBleHBlY3Qoc3VtLm5vdGlmaWNhdGlvbnNbMF0uY29kZSkudG9CZShcIk5lby5DbGllbnROb3RpZmljYXRpb24uU3RhdGVtZW50LkNhcnRlc2lhblByb2R1Y3RXYXJuaW5nXCIpO1xuICAgICAgICBleHBlY3Qoc3VtLm5vdGlmaWNhdGlvbnNbMF0udGl0bGUpLnRvQmUoXCJUaGlzIHF1ZXJ5IGJ1aWxkcyBhIGNhcnRlc2lhbiBwcm9kdWN0IGJldHdlZW4gZGlzY29ubmVjdGVkIHBhdHRlcm5zLlwiKTtcbiAgICAgICAgZXhwZWN0KHN1bS5ub3RpZmljYXRpb25zWzBdLnBvc2l0aW9uLmNvbHVtbikudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gdXNpbmcgdGhlIHNlc3Npb24gd2hlbiBoYXZpbmcgYW4gb3BlbiB0cmFuc2FjdGlvbicsIGRvbmUgPT4ge1xuXG4gICAgLy8gV2hlblxuICAgIHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuXG4gICAgLy9UaGVuXG4gICAgc2Vzc2lvbi5ydW4oXCJSRVRVUk4gNDJcIilcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGV4cGVjdChlcnJvci5tZXNzYWdlKS50b0JlKFwiU3RhdGVtZW50cyBjYW5ub3QgYmUgcnVuIGRpcmVjdGx5IG9uIGEgXCJcbiAgICAgICAgICArIFwic2Vzc2lvbiB3aXRoIGFuIG9wZW4gdHJhbnNhY3Rpb247IGVpdGhlciBydW4gZnJvbSB3aXRoaW4gdGhlIFwiXG4gICAgICAgICAgKyBcInRyYW5zYWN0aW9uIG9yIHVzZSBhIGRpZmZlcmVudCBzZXNzaW9uLlwiKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSlcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gb3BlbmluZyBtdWx0aXBsZSB0cmFuc2FjdGlvbnMnLCAoKSA9PiB7XG5cbiAgICAvLyBXaGVuXG4gICAgc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbikudG9UaHJvdygpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiBsb3RzIG9mIGRhdGEnLCBkb25lID0+IHtcbiAgICBzZXNzaW9uLnJ1bihcIlVOV0lORCByYW5nZSgxLDEwMDAwKSBBUyB4IENSRUFURSAoOkFUVFJBQ1RJT04ge3Byb3A6ICdwcm9wJ30pXCIpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHNlc3Npb24ucnVuKFwiTUFUQ0ggKG4pIFJFVFVSTiBuXCIpXG4gICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb25OZXh0OiByZWNvcmQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSByZWNvcmQuZ2V0KCduJyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5vZGUubGFiZWxzWzBdKS50b0VxdWFsKFwiQVRUUkFDVElPTlwiKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qobm9kZS5wcm9wZXJ0aWVzLnByb3ApLnRvRXF1YWwoXCJwcm9wXCIpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvbkNvbXBsZXRlZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlc3Npb24uY2xvc2UoKTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb25FcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcblxuICAgICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYmUgYWJsZSB0byBjbG9zZSBhIGxvbmcgcnVubmluZyBxdWVyeSAnLCBkb25lID0+IHtcbiAgICAvL2dpdmVuIGEgbG9uZyBydW5uaW5nIHF1ZXJ5XG4gICAgc2Vzc2lvbi5ydW4oJ3Vud2luZCByYW5nZSgxLDEwMDAwMDApIGFzIHggY3JlYXRlIChuIHtwcm9wOnh9KSBkZWxldGUgbicpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIC8vIGxvbmcgcnVubmluZyBxdWVyeSBzaG91bGQgZmFpbFxuICAgICAgZXhwZWN0KGVycm9yKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgICAvLyBhbmQgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHN0YXJ0IGFub3RoZXIgc2Vzc2lvbiBhbmQgcnVuIGEgcXVlcnlcbiAgICAgIGNvbnN0IGFub3RoZXJTZXNzaW9uID0gZHJpdmVyLnNlc3Npb24oKTtcbiAgICAgIGFub3RoZXJTZXNzaW9uLnJ1bignUkVUVVJOIDEuMCBhcyBhJykudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0LnJlY29yZHMubGVuZ3RoKS50b0JlKDEpO1xuICAgICAgICBleHBlY3QocmVzdWx0LnJlY29yZHNbMF0uZ2V0KCdhJykpLnRvQmUoMSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ1F1ZXJ5IGZhaWxlZCBhZnRlciBhIGxvbmcgcnVubmluZyBxdWVyeSB3YXMgdGVybWluYXRlZCcsIGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gd2FpdCBzb21lIHRpbWUgdGhhbiBjbG9zZSB0aGUgc2Vzc2lvbiB3aXRoIGEgbG9uZyBydW5uaW5nIHF1ZXJ5XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXNzaW9uLmNsb3NlKCk7XG4gICAgfSwgMTAwMCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCBuaWNlbHkgb24gdW5wYWNrYWJsZSB2YWx1ZXMgJywgZG9uZSA9PiB7XG4gICAgLy8gR2l2ZW5cbiAgICBjb25zdCB1bnBhY2thYmxlID0gKCkgPT4ge1xuICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gJ1JFVFVSTiB7cGFyYW19JztcbiAgICBjb25zdCBwYXJhbXMgPSB7cGFyYW06IHVucGFja2FibGV9O1xuICAgIC8vIFdoZW4gJiBUaGVuXG4gICAgc2Vzc2lvblxuICAgICAgLnJ1bihzdGF0ZW1lbnQsIHBhcmFtcylcbiAgICAgIC5jYXRjaChpZ25vcmUgPT4ge1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KVxuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgbmljZWx5IGZvciBpbGxlZ2FsIHN0YXRlbWVudCcsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gc2Vzc2lvbi5ydW4oKSkudG9UaHJvd0Vycm9yKFR5cGVFcnJvcik7XG4gICAgZXhwZWN0KCgpID0+IHNlc3Npb24ucnVuKG51bGwpKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgICBleHBlY3QoKCkgPT4gc2Vzc2lvbi5ydW4oe30pKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgICBleHBlY3QoKCkgPT4gc2Vzc2lvbi5ydW4oNDIpKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgICBleHBlY3QoKCkgPT4gc2Vzc2lvbi5ydW4oW10pKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgICBleHBlY3QoKCkgPT4gc2Vzc2lvbi5ydW4oWydDUkVBVEUgKCknXSkpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuXG4gICAgZXhwZWN0KCgpID0+IHNlc3Npb24ucnVuKHtzdGF0ZW1lbnQ6ICdDUkVBVEUgKCknfSkpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuICAgIGV4cGVjdCgoKSA9PiBzZXNzaW9uLnJ1bih7Y3lwaGVyOiAnQ1JFQVRFICgpJ30pKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIG5pY2VseSBmb3IgaWxsZWdhbCBib29rbWFyaycsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKHt9KSkudG9UaHJvd0Vycm9yKFR5cGVFcnJvcik7XG4gICAgZXhwZWN0KCgpID0+IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbig0MikpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuICAgIGV4cGVjdCgoKSA9PiBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oW10pKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgICBleHBlY3QoKCkgPT4gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKFsnYm9va21hcmsnXSkpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFsbG93IGNyZWF0aW9uIG9mIGEgJyArIG5lbzRqLnNlc3Npb24uUkVBRCArICcgc2Vzc2lvbicsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHJlYWRTZXNzaW9uID0gZHJpdmVyLnNlc3Npb24obmVvNGouc2Vzc2lvbi5SRUFEKTtcbiAgICByZWFkU2Vzc2lvbi5ydW4oJ1JFVFVSTiAxJykudGhlbigoKSA9PiB7XG4gICAgICByZWFkU2Vzc2lvbi5jbG9zZSgpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFsbG93IGNyZWF0aW9uIG9mIGEgJyArIG5lbzRqLnNlc3Npb24uV1JJVEUgKyAnIHNlc3Npb24nLCBkb25lID0+IHtcbiAgICBjb25zdCB3cml0ZVNlc3Npb24gPSBkcml2ZXIuc2Vzc2lvbihuZW80ai5zZXNzaW9uLldSSVRFKTtcbiAgICB3cml0ZVNlc3Npb24ucnVuKCdDUkVBVEUgKCknKS50aGVuKCgpID0+IHtcbiAgICAgIHdyaXRlU2Vzc2lvbi5jbG9zZSgpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgZm9yIGlsbGVnYWwgc2Vzc2lvbiBtb2RlJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBkcml2ZXIuc2Vzc2lvbignSUxMRUdBTF9NT0RFJykpLnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWxlYXNlIGNvbm5lY3Rpb24gdG8gdGhlIHBvb2wgYWZ0ZXIgcnVuJywgZG9uZSA9PiB7XG4gICAgd2l0aFF1ZXJ5SW5UbXBTZXNzaW9uKGRyaXZlciwgKCkgPT4ge1xuICAgICAgY29uc3QgaWRsZUNvbm5lY3Rpb25zQmVmb3JlID0gaWRsZUNvbm5lY3Rpb25Db3VudChkcml2ZXIpO1xuXG4gICAgICBzZXNzaW9uLnJ1bignUkVUVVJOIDEnKS50aGVuKCgpID0+IHtcbiAgICAgICAgY29uc3QgaWRsZUNvbm5lY3Rpb25zQWZ0ZXIgPSBpZGxlQ29ubmVjdGlvbkNvdW50KGRyaXZlcik7XG4gICAgICAgIGV4cGVjdChpZGxlQ29ubmVjdGlvbnNCZWZvcmUpLnRvRXF1YWwoaWRsZUNvbm5lY3Rpb25zQWZ0ZXIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWxlYXNlIGNvbm5lY3Rpb24gdG8gdGhlIHBvb2wgYWZ0ZXIgcnVuIGZhaWx1cmUnLCBkb25lID0+IHtcbiAgICB3aXRoUXVlcnlJblRtcFNlc3Npb24oZHJpdmVyLCAoKSA9PiB7XG4gICAgICBjb25zdCBpZGxlQ29ubmVjdGlvbnNCZWZvcmUgPSBpZGxlQ29ubmVjdGlvbkNvdW50KGRyaXZlcik7XG5cbiAgICAgIHNlc3Npb24ucnVuKCdSRVRVUk4gMTAgLyAwJykuY2F0Y2goKCkgPT4ge1xuICAgICAgICBjb25zdCBpZGxlQ29ubmVjdGlvbnNBZnRlciA9IGlkbGVDb25uZWN0aW9uQ291bnQoZHJpdmVyKTtcbiAgICAgICAgZXhwZWN0KGlkbGVDb25uZWN0aW9uc0JlZm9yZSkudG9FcXVhbChpZGxlQ29ubmVjdGlvbnNBZnRlcik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlbGVhc2UgY29ubmVjdGlvbiB0byB0aGUgcG9vbCB3aGVuIHJlc3VsdCBpcyBjb25zdW1lZCcsIGRvbmUgPT4ge1xuICAgIHdpdGhRdWVyeUluVG1wU2Vzc2lvbihkcml2ZXIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlkbGVDb25uZWN0aW9uc0JlZm9yZSA9IGlkbGVDb25uZWN0aW9uQ291bnQoZHJpdmVyKTtcblxuICAgICAgc2Vzc2lvbi5ydW4oJ1VOV0lORCByYW5nZSgwLCAxMCkgQVMgeCBSRVRVUk4geCArIDEnKS5zdWJzY3JpYmUoe1xuICAgICAgICBvbk5leHQ6ICgpID0+IHtcbiAgICAgICAgICAvLyBvbmUgbGVzcyBpZGxlIGNvbm5lY3Rpb24sIG9uZSBjb25uZWN0aW9uIGlzIHVzZWQgZm9yIHRoZSBjdXJyZW50IHF1ZXJ5XG4gICAgICAgICAgZXhwZWN0KGlkbGVDb25uZWN0aW9uQ291bnQoZHJpdmVyKSkudG9CZShpZGxlQ29ubmVjdGlvbnNCZWZvcmUgLSAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Db21wbGV0ZWQ6ICgpID0+IHtcbiAgICAgICAgICBleHBlY3QoaWRsZUNvbm5lY3Rpb25Db3VudChkcml2ZXIpKS50b0JlKGlkbGVDb25uZWN0aW9uc0JlZm9yZSk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWxlYXNlIGNvbm5lY3Rpb24gdG8gdGhlIHBvb2wgd2hlbiByZXN1bHQgZmFpbHMnLCBkb25lID0+IHtcbiAgICB3aXRoUXVlcnlJblRtcFNlc3Npb24oZHJpdmVyLCAoKSA9PiB7XG4gICAgICBjb25zdCBpZGxlQ29ubmVjdGlvbnNCZWZvcmUgPSBpZGxlQ29ubmVjdGlvbkNvdW50KGRyaXZlcik7XG5cbiAgICAgIHNlc3Npb24ucnVuKCdVTldJTkQgcmFuZ2UoMTAsIDAsIC0xKSBBUyB4IFJFVFVSTiAxMCAvIHgnKS5zdWJzY3JpYmUoe1xuICAgICAgICBvbk5leHQ6ICgpID0+IHtcbiAgICAgICAgICAvLyBvbmUgbGVzcyBpZGxlIGNvbm5lY3Rpb24sIG9uZSBjb25uZWN0aW9uIGlzIHVzZWQgZm9yIHRoZSBjdXJyZW50IHF1ZXJ5XG4gICAgICAgICAgZXhwZWN0KGlkbGVDb25uZWN0aW9uQ291bnQoZHJpdmVyKSkudG9CZShpZGxlQ29ubmVjdGlvbnNCZWZvcmUgLSAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogaWdub3JlZEVycm9yID0+IHtcbiAgICAgICAgICBleHBlY3QoaWRsZUNvbm5lY3Rpb25Db3VudChkcml2ZXIpKS50b0JlKGlkbGVDb25uZWN0aW9uc0JlZm9yZSk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9LFxuICAgICAgICBvbkNvbXBsZXRlZDogKCkgPT4ge1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWxlYXNlIGNvbm5lY3Rpb24gdG8gdGhlIHBvb2wgd2hlbiB0cmFuc2FjdGlvbiBjb21taXRzJywgZG9uZSA9PiB7XG4gICAgd2l0aFF1ZXJ5SW5UbXBTZXNzaW9uKGRyaXZlciwgKCkgPT4ge1xuICAgICAgY29uc3QgaWRsZUNvbm5lY3Rpb25zQmVmb3JlID0gaWRsZUNvbm5lY3Rpb25Db3VudChkcml2ZXIpO1xuXG4gICAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgICAgdHgucnVuKCdVTldJTkQgcmFuZ2UoMCwgMTApIEFTIHggUkVUVVJOIHggKyAxJykuc3Vic2NyaWJlKHtcbiAgICAgICAgb25OZXh0OiAoKSA9PiB7XG4gICAgICAgICAgLy8gb25lIGxlc3MgaWRsZSBjb25uZWN0aW9uLCBvbmUgY29ubmVjdGlvbiBpcyB1c2VkIGZvciB0aGUgY3VycmVudCB0cmFuc2FjdGlvblxuICAgICAgICAgIGV4cGVjdChpZGxlQ29ubmVjdGlvbkNvdW50KGRyaXZlcikpLnRvQmUoaWRsZUNvbm5lY3Rpb25zQmVmb3JlIC0gMSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ29tcGxldGVkOiAoKSA9PiB7XG4gICAgICAgICAgLy8gb25lIGxlc3MgaWRsZSBjb25uZWN0aW9uLCBvbmUgY29ubmVjdGlvbiBpcyB1c2VkIGZvciB0aGUgY3VycmVudCB0cmFuc2FjdGlvblxuICAgICAgICAgIGV4cGVjdChpZGxlQ29ubmVjdGlvbkNvdW50KGRyaXZlcikpLnRvQmUoaWRsZUNvbm5lY3Rpb25zQmVmb3JlIC0gMSk7XG4gICAgICAgICAgdHguY29tbWl0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBleHBlY3QoaWRsZUNvbm5lY3Rpb25Db3VudChkcml2ZXIpKS50b0JlKGlkbGVDb25uZWN0aW9uc0JlZm9yZSk7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlbGVhc2UgY29ubmVjdGlvbiB0byB0aGUgcG9vbCB3aGVuIHRyYW5zYWN0aW9uIHJvbGxzIGJhY2snLCBkb25lID0+IHtcbiAgICB3aXRoUXVlcnlJblRtcFNlc3Npb24oZHJpdmVyLCAoKSA9PiB7XG4gICAgICBjb25zdCBpZGxlQ29ubmVjdGlvbnNCZWZvcmUgPSBpZGxlQ29ubmVjdGlvbkNvdW50KGRyaXZlcik7XG5cbiAgICAgIGNvbnN0IHR4ID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgICB0eC5ydW4oJ1VOV0lORCByYW5nZSgwLCAxMCkgQVMgeCBSRVRVUk4geCArIDEnKS5zdWJzY3JpYmUoe1xuICAgICAgICBvbk5leHQ6ICgpID0+IHtcbiAgICAgICAgICAvLyBvbmUgbGVzcyBpZGxlIGNvbm5lY3Rpb24sIG9uZSBjb25uZWN0aW9uIGlzIHVzZWQgZm9yIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uXG4gICAgICAgICAgZXhwZWN0KGlkbGVDb25uZWN0aW9uQ291bnQoZHJpdmVyKSkudG9CZShpZGxlQ29ubmVjdGlvbnNCZWZvcmUgLSAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Db21wbGV0ZWQ6ICgpID0+IHtcbiAgICAgICAgICAvLyBvbmUgbGVzcyBpZGxlIGNvbm5lY3Rpb24sIG9uZSBjb25uZWN0aW9uIGlzIHVzZWQgZm9yIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uXG4gICAgICAgICAgZXhwZWN0KGlkbGVDb25uZWN0aW9uQ291bnQoZHJpdmVyKSkudG9CZShpZGxlQ29ubmVjdGlvbnNCZWZvcmUgLSAxKTtcbiAgICAgICAgICB0eC5yb2xsYmFjaygpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZXhwZWN0KGlkbGVDb25uZWN0aW9uQ291bnQoZHJpdmVyKSkudG9CZShpZGxlQ29ubmVjdGlvbnNCZWZvcmUpO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB1cGRhdGUgbGFzdCBib29rbWFyayBhZnRlciBldmVyeSByZWFkIHR4IGNvbW1pdCcsIGRvbmUgPT4ge1xuICAgIGlmICghc2VydmVySXMzMU9yTGF0ZXIoZG9uZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBib29rbWFya0JlZm9yZSA9IHNlc3Npb24ubGFzdEJvb2ttYXJrKCk7XG5cbiAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgIHR4LnJ1bignUkVUVVJOIDQyIGFzIGFuc3dlcicpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGNvbnN0IHJlY29yZHMgPSByZXN1bHQucmVjb3JkcztcbiAgICAgIGV4cGVjdChyZWNvcmRzLmxlbmd0aCkudG9FcXVhbCgxKTtcbiAgICAgIGV4cGVjdChyZWNvcmRzWzBdLmdldCgnYW5zd2VyJykudG9OdW1iZXIoKSkudG9FcXVhbCg0Mik7XG5cbiAgICAgIHR4LmNvbW1pdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBjb25zdCBib29rbWFya0FmdGVyID0gc2Vzc2lvbi5sYXN0Qm9va21hcmsoKTtcbiAgICAgICAgZXhwZWN0KGJvb2ttYXJrQWZ0ZXIpLnRvQmVEZWZpbmVkKCk7XG4gICAgICAgIGV4cGVjdChib29rbWFya0FmdGVyKS5ub3QudG9CZU51bGwoKTtcbiAgICAgICAgZXhwZWN0KGJvb2ttYXJrQWZ0ZXIpLm5vdC50b0VxdWFsKGJvb2ttYXJrQmVmb3JlKTtcblxuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB1cGRhdGUgbGFzdCBib29rbWFyayBhZnRlciBldmVyeSB3cml0ZSB0eCBjb21taXQnLCBkb25lID0+IHtcbiAgICBpZiAoIXNlcnZlcklzMzFPckxhdGVyKGRvbmUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYm9va21hcmtCZWZvcmUgPSBzZXNzaW9uLmxhc3RCb29rbWFyaygpO1xuXG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eC5ydW4oJ0NSRUFURSAoKScpLnRoZW4oKCkgPT4ge1xuICAgICAgdHguY29tbWl0KCkudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJvb2ttYXJrQWZ0ZXIgPSBzZXNzaW9uLmxhc3RCb29rbWFyaygpO1xuICAgICAgICBleHBlY3QoYm9va21hcmtBZnRlcikudG9CZURlZmluZWQoKTtcbiAgICAgICAgZXhwZWN0KGJvb2ttYXJrQWZ0ZXIpLm5vdC50b0JlTnVsbCgpO1xuICAgICAgICBleHBlY3QoYm9va21hcmtBZnRlcikubm90LnRvRXF1YWwoYm9va21hcmtCZWZvcmUpO1xuXG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBsb3NlIGxhc3QgYm9va21hcmsgYWZ0ZXIgcnVuJywgZG9uZSA9PiB7XG4gICAgaWYgKCFzZXJ2ZXJJczMxT3JMYXRlcihkb25lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHR4ID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgdHgucnVuKCdDUkVBVEUgKCknKS50aGVuKCgpID0+IHtcbiAgICAgIHR4LmNvbW1pdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBjb25zdCBib29rbWFya0JlZm9yZSA9IHNlc3Npb24ubGFzdEJvb2ttYXJrKCk7XG4gICAgICAgIGV4cGVjdChib29rbWFya0JlZm9yZSkudG9CZURlZmluZWQoKTtcbiAgICAgICAgZXhwZWN0KGJvb2ttYXJrQmVmb3JlKS5ub3QudG9CZU51bGwoKTtcblxuICAgICAgICBzZXNzaW9uLnJ1bignQ1JFQVRFICgpJykudGhlbigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYm9va21hcmtBZnRlciA9IHNlc3Npb24ubGFzdEJvb2ttYXJrKCk7XG4gICAgICAgICAgZXhwZWN0KGJvb2ttYXJrQWZ0ZXIpLnRvRXF1YWwoYm9va21hcmtCZWZvcmUpO1xuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjb21taXQgcmVhZCB0cmFuc2FjdGlvbicsIGRvbmUgPT4ge1xuICAgIGlmICghc2VydmVySXMzMU9yTGF0ZXIoZG9uZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBib29rbWFya0JlZm9yZSA9IHNlc3Npb24ubGFzdEJvb2ttYXJrKCk7XG4gICAgY29uc3QgcmVzdWx0UHJvbWlzZSA9IHNlc3Npb24ucmVhZFRyYW5zYWN0aW9uKHR4ID0+IHR4LnJ1bignUkVUVVJOIDQyIEFTIGFuc3dlcicpKTtcblxuICAgIHJlc3VsdFByb21pc2UudGhlbihyZXN1bHQgPT4ge1xuICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzLmxlbmd0aCkudG9FcXVhbCgxKTtcbiAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkc1swXS5nZXQoJ2Fuc3dlcicpLnRvTnVtYmVyKCkpLnRvRXF1YWwoNDIpO1xuXG4gICAgICBjb25zdCBib29rbWFya0FmdGVyID0gc2Vzc2lvbi5sYXN0Qm9va21hcmsoKTtcbiAgICAgIHZlcmlmeUJvb2ttYXJrKGJvb2ttYXJrQWZ0ZXIpO1xuICAgICAgZXhwZWN0KGJvb2ttYXJrQWZ0ZXIpLm5vdC50b0VxdWFsKGJvb2ttYXJrQmVmb3JlKTtcblxuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNvbW1pdCB3cml0ZSB0cmFuc2FjdGlvbicsIGRvbmUgPT4ge1xuICAgIGlmICghc2VydmVySXMzMU9yTGF0ZXIoZG9uZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBib29rbWFya0JlZm9yZSA9IHNlc3Npb24ubGFzdEJvb2ttYXJrKCk7XG4gICAgY29uc3QgcmVzdWx0UHJvbWlzZSA9IHNlc3Npb24ud3JpdGVUcmFuc2FjdGlvbih0eCA9PiB0eC5ydW4oJ0NSRUFURSAobjpOb2RlIHtpZDogNDJ9KSBSRVRVUk4gbi5pZCBBUyBhbnN3ZXInKSk7XG5cbiAgICByZXN1bHRQcm9taXNlLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkcy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgICBleHBlY3QocmVzdWx0LnJlY29yZHNbMF0uZ2V0KCdhbnN3ZXInKS50b051bWJlcigpKS50b0VxdWFsKDQyKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuc3VtbWFyeS5jb3VudGVycy5ub2Rlc0NyZWF0ZWQoKSkudG9FcXVhbCgxKTtcblxuICAgICAgY29uc3QgYm9va21hcmtBZnRlciA9IHNlc3Npb24ubGFzdEJvb2ttYXJrKCk7XG4gICAgICB2ZXJpZnlCb29rbWFyayhib29rbWFya0FmdGVyKTtcbiAgICAgIGV4cGVjdChib29rbWFya0FmdGVyKS5ub3QudG9FcXVhbChib29rbWFya0JlZm9yZSk7XG5cbiAgICAgIGNvdW50Tm9kZXMoJ05vZGUnLCAnaWQnLCA0MikudGhlbihjb3VudCA9PiB7XG4gICAgICAgIGV4cGVjdChjb3VudCkudG9FcXVhbCgxKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IGNvbW1pdCBhbHJlYWR5IGNvbW1pdHRlZCByZWFkIHRyYW5zYWN0aW9uJywgZG9uZSA9PiB7XG4gICAgaWYgKCFzZXJ2ZXJJczMxT3JMYXRlcihkb25lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdFByb21pc2UgPSBzZXNzaW9uLnJlYWRUcmFuc2FjdGlvbih0eCA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0eC5ydW4oJ1JFVFVSTiA0MiBBUyBhbnN3ZXInKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgdHguY29tbWl0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKHtyZXN1bHQ6IHJlc3VsdCwgYm9va21hcms6IHNlc3Npb24ubGFzdEJvb2ttYXJrKCl9KTtcbiAgICAgICAgICB9KS5jYXRjaChlcnJvciA9PiByZWplY3QoZXJyb3IpKTtcbiAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4gcmVqZWN0KGVycm9yKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJlc3VsdFByb21pc2UudGhlbihvdXRjb21lID0+IHtcbiAgICAgIGNvbnN0IGJvb2ttYXJrID0gb3V0Y29tZS5ib29rbWFyaztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG91dGNvbWUucmVzdWx0O1xuXG4gICAgICB2ZXJpZnlCb29rbWFyayhib29rbWFyayk7XG4gICAgICBleHBlY3Qoc2Vzc2lvbi5sYXN0Qm9va21hcmsoKSkudG9FcXVhbChib29rbWFyayk7IC8vIGV4cGVjdCBib29rbWFyayB0byBub3QgY2hhbmdlXG5cbiAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkcy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgICBleHBlY3QocmVzdWx0LnJlY29yZHNbMF0uZ2V0KCdhbnN3ZXInKS50b051bWJlcigpKS50b0VxdWFsKDQyKTtcblxuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBjb21taXQgYWxyZWFkeSBjb21taXR0ZWQgd3JpdGUgdHJhbnNhY3Rpb24nLCBkb25lID0+IHtcbiAgICBpZiAoIXNlcnZlcklzMzFPckxhdGVyKGRvbmUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0UHJvbWlzZSA9IHNlc3Npb24ucmVhZFRyYW5zYWN0aW9uKHR4ID0+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHR4LnJ1bignQ1JFQVRFIChuOk5vZGUge2lkOiA0Mn0pIFJFVFVSTiBuLmlkIEFTIGFuc3dlcicpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICB0eC5jb21taXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoe3Jlc3VsdDogcmVzdWx0LCBib29rbWFyazogc2Vzc2lvbi5sYXN0Qm9va21hcmsoKX0pO1xuICAgICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHJlamVjdChlcnJvcikpO1xuICAgICAgICB9KS5jYXRjaChlcnJvciA9PiByZWplY3QoZXJyb3IpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmVzdWx0UHJvbWlzZS50aGVuKG91dGNvbWUgPT4ge1xuICAgICAgY29uc3QgYm9va21hcmsgPSBvdXRjb21lLmJvb2ttYXJrO1xuICAgICAgY29uc3QgcmVzdWx0ID0gb3V0Y29tZS5yZXN1bHQ7XG5cbiAgICAgIHZlcmlmeUJvb2ttYXJrKGJvb2ttYXJrKTtcbiAgICAgIGV4cGVjdChzZXNzaW9uLmxhc3RCb29rbWFyaygpKS50b0VxdWFsKGJvb2ttYXJrKTsgLy8gZXhwZWN0IGJvb2ttYXJrIHRvIG5vdCBjaGFuZ2VcblxuICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzLmxlbmd0aCkudG9FcXVhbCgxKTtcbiAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkc1swXS5nZXQoJ2Fuc3dlcicpLnRvTnVtYmVyKCkpLnRvRXF1YWwoNDIpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5zdW1tYXJ5LmNvdW50ZXJzLm5vZGVzQ3JlYXRlZCgpKS50b0VxdWFsKDEpO1xuXG4gICAgICBjb3VudE5vZGVzKCdOb2RlJywgJ2lkJywgNDIpLnRoZW4oY291bnQgPT4ge1xuICAgICAgICBleHBlY3QoY291bnQpLnRvRXF1YWwoMSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBjb21taXQgcm9sbGVkIGJhY2sgcmVhZCB0cmFuc2FjdGlvbicsIGRvbmUgPT4ge1xuICAgIGlmICghc2VydmVySXMzMU9yTGF0ZXIoZG9uZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBib29rbWFya0JlZm9yZSA9IHNlc3Npb24ubGFzdEJvb2ttYXJrKCk7XG4gICAgY29uc3QgcmVzdWx0UHJvbWlzZSA9IHNlc3Npb24ucmVhZFRyYW5zYWN0aW9uKHR4ID0+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHR4LnJ1bignUkVUVVJOIDQyIEFTIGFuc3dlcicpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICB0eC5yb2xsYmFjaygpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHJlamVjdChlcnJvcikpO1xuICAgICAgICB9KS5jYXRjaChlcnJvciA9PiByZWplY3QoZXJyb3IpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmVzdWx0UHJvbWlzZS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBleHBlY3QocmVzdWx0LnJlY29yZHMubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzWzBdLmdldCgnYW5zd2VyJykudG9OdW1iZXIoKSkudG9FcXVhbCg0Mik7XG4gICAgICBleHBlY3Qoc2Vzc2lvbi5sYXN0Qm9va21hcmsoKSkudG9CZShib29rbWFya0JlZm9yZSk7IC8vIGV4cGVjdCBib29rbWFyayB0byBub3QgY2hhbmdlXG5cbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgY29tbWl0IHJvbGxlZCBiYWNrIHdyaXRlIHRyYW5zYWN0aW9uJywgZG9uZSA9PiB7XG4gICAgaWYgKCFzZXJ2ZXJJczMxT3JMYXRlcihkb25lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJvb2ttYXJrQmVmb3JlID0gc2Vzc2lvbi5sYXN0Qm9va21hcmsoKTtcbiAgICBjb25zdCByZXN1bHRQcm9taXNlID0gc2Vzc2lvbi5yZWFkVHJhbnNhY3Rpb24odHggPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdHgucnVuKCdDUkVBVEUgKG46Tm9kZSB7aWQ6IDQyfSkgUkVUVVJOIG4uaWQgQVMgYW5zd2VyJykudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgIHR4LnJvbGxiYWNrKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4gcmVqZWN0KGVycm9yKSk7XG4gICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHJlamVjdChlcnJvcikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXN1bHRQcm9taXNlLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkcy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgICBleHBlY3QocmVzdWx0LnJlY29yZHNbMF0uZ2V0KCdhbnN3ZXInKS50b051bWJlcigpKS50b0VxdWFsKDQyKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuc3VtbWFyeS5jb3VudGVycy5ub2Rlc0NyZWF0ZWQoKSkudG9FcXVhbCgxKTtcbiAgICAgIGV4cGVjdChzZXNzaW9uLmxhc3RCb29rbWFyaygpKS50b0JlKGJvb2ttYXJrQmVmb3JlKTsgLy8gZXhwZWN0IGJvb2ttYXJrIHRvIG5vdCBjaGFuZ2VcblxuICAgICAgY291bnROb2RlcygnTm9kZScsICdpZCcsIDQyKS50aGVuKGNvdW50ID0+IHtcbiAgICAgICAgZXhwZWN0KGNvdW50KS50b0VxdWFsKDApO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBpbnRlcnJ1cHQgcXVlcnkgd2FpdGluZyBvbiBhIGxvY2sgd2hlbiBjbG9zZWQnLCBkb25lID0+IHtcbiAgICBpZiAoIXNlcnZlcklzMzFPckxhdGVyKGRvbmUpKSB7XG4gICAgICAvLyBsb2NrcyBhcmUgdHJhbnNhY3Rpb24gdGVybWluYXRpb24gYXdhcmUgYnkgZGVmYXVsdCBvbmx5IGluIDMuMStcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXNzaW9uLnJ1bignQ1JFQVRFICgpJykudGhlbigoKSA9PiB7XG4gICAgICBzZXNzaW9uLmNsb3NlKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbjEgPSBkcml2ZXIuc2Vzc2lvbigpO1xuICAgICAgICBjb25zdCBzZXNzaW9uMiA9IGRyaXZlci5zZXNzaW9uKCk7XG4gICAgICAgIGNvbnN0IHR4MSA9IHNlc3Npb24xLmJlZ2luVHJhbnNhY3Rpb24oKTtcblxuICAgICAgICB0eDEucnVuKCdNQVRDSCAobikgU0VUIG4uaWQgPSAxIFJFVFVSTiA0MiBBUyBhbnN3ZXInKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgLy8gbm9kZSBpcyBub3cgbG9ja2VkIGJ5IHR4MVxuICAgICAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkcy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzWzBdLmdldCgwKS50b051bWJlcigpKS50b0VxdWFsKDQyKTtcblxuICAgICAgICAgIC8vIHRoaXMgcXVlcnkgc2hvdWxkIGdldCBzdHVjayB3YWl0aW5nIGZvciB0aGUgbG9ja1xuICAgICAgICAgIHNlc3Npb24yLnJ1bignTUFUQ0ggKG4pIFNFVCBuLmlkID0gMiBSRVRVUk4gNDIgQVMgYW5zd2VyJykuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgZXhwZWN0VHJhbnNhY3Rpb25UZXJtaW5hdGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdHgxLmNvbW1pdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICByZWFkQWxsTm9kZUlkcygpLnRoZW4oaWRzID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaWRzKS50b0VxdWFsKFsxXSk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAvLyBjbG9zZSBzZXNzaW9uIGFmdGVyIGEgd2hpbGVcbiAgICAgICAgICAgIHNlc3Npb24yLmNsb3NlKCk7XG4gICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaW50ZXJydXB0IHRyYW5zYWN0aW9uIHdhaXRpbmcgb24gYSBsb2NrIHdoZW4gY2xvc2VkJywgZG9uZSA9PiB7XG4gICAgaWYgKCFzZXJ2ZXJJczMxT3JMYXRlcihkb25lKSkge1xuICAgICAgLy8gbG9ja3MgYXJlIHRyYW5zYWN0aW9uIHRlcm1pbmF0aW9uIGF3YXJlIGJ5IGRlZmF1bHQgb25seSBpbiAzLjErXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2Vzc2lvbi5ydW4oJ0NSRUFURSAoKScpLnRoZW4oKCkgPT4ge1xuICAgICAgc2Vzc2lvbi5jbG9zZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlc3Npb24xID0gZHJpdmVyLnNlc3Npb24oKTtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbjIgPSBkcml2ZXIuc2Vzc2lvbigpO1xuICAgICAgICBjb25zdCB0eDEgPSBzZXNzaW9uMS5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgICAgIGNvbnN0IHR4MiA9IHNlc3Npb24yLmJlZ2luVHJhbnNhY3Rpb24oKTtcblxuICAgICAgICB0eDEucnVuKCdNQVRDSCAobikgU0VUIG4uaWQgPSAxIFJFVFVSTiA0MiBBUyBhbnN3ZXInKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgLy8gbm9kZSBpcyBub3cgbG9ja2VkIGJ5IHR4MVxuICAgICAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkcy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzWzBdLmdldCgwKS50b051bWJlcigpKS50b0VxdWFsKDQyKTtcblxuICAgICAgICAgIC8vIHRoaXMgcXVlcnkgc2hvdWxkIGdldCBzdHVjayB3YWl0aW5nIGZvciB0aGUgbG9ja1xuICAgICAgICAgIHR4Mi5ydW4oJ01BVENIIChuKSBTRVQgbi5pZCA9IDIgUkVUVVJOIDQyIEFTIGFuc3dlcicpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgIGV4cGVjdFRyYW5zYWN0aW9uVGVybWluYXRlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHR4MS5jb21taXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgcmVhZEFsbE5vZGVJZHMoKS50aGVuKGlkcyA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlkcykudG9FcXVhbChbMV0pO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gY2xvc2Ugc2Vzc2lvbiBhZnRlciBhIHdoaWxlXG4gICAgICAgICAgICBzZXNzaW9uMi5jbG9zZSgpO1xuICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGludGVycnVwdCB0cmFuc2FjdGlvbiBmdW5jdGlvbiB3YWl0aW5nIG9uIGEgbG9jayB3aGVuIGNsb3NlZCcsIGRvbmUgPT4ge1xuICAgIGlmICghc2VydmVySXMzMU9yTGF0ZXIoZG9uZSkpIHtcbiAgICAgIC8vIGxvY2tzIGFyZSB0cmFuc2FjdGlvbiB0ZXJtaW5hdGlvbiBhd2FyZSBieSBkZWZhdWx0IG9ubHkgaW4gMy4xK1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlc3Npb24ucnVuKCdDUkVBVEUgKCknKS50aGVuKCgpID0+IHtcbiAgICAgIHNlc3Npb24uY2xvc2UoKCkgPT4ge1xuICAgICAgICBjb25zdCBzZXNzaW9uMSA9IGRyaXZlci5zZXNzaW9uKCk7XG4gICAgICAgIGNvbnN0IHNlc3Npb24yID0gZHJpdmVyLnNlc3Npb24oKTtcbiAgICAgICAgY29uc3QgdHgxID0gc2Vzc2lvbjEuYmVnaW5UcmFuc2FjdGlvbigpO1xuXG4gICAgICAgIHR4MS5ydW4oJ01BVENIIChuKSBTRVQgbi5pZCA9IDEgUkVUVVJOIDQyIEFTIGFuc3dlcicpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAvLyBub2RlIGlzIG5vdyBsb2NrZWQgYnkgdHgxXG4gICAgICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzLmxlbmd0aCkudG9FcXVhbCgxKTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0LnJlY29yZHNbMF0uZ2V0KDApLnRvTnVtYmVyKCkpLnRvRXF1YWwoNDIpO1xuXG4gICAgICAgICAgc2Vzc2lvbjIud3JpdGVUcmFuc2FjdGlvbih0eDIgPT4ge1xuICAgICAgICAgICAgLy8gdGhpcyBxdWVyeSBzaG91bGQgZ2V0IHN0dWNrIHdhaXRpbmcgZm9yIHRoZSBsb2NrXG4gICAgICAgICAgICByZXR1cm4gdHgyLnJ1bignTUFUQ0ggKG4pIFNFVCBuLmlkID0gMiBSRVRVUk4gNDIgQVMgYW5zd2VyJykuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgICBleHBlY3RUcmFuc2FjdGlvblRlcm1pbmF0ZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgIHR4MS5jb21taXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZWFkQWxsTm9kZUlkcygpLnRoZW4oaWRzID0+IHtcbiAgICAgICAgICAgICAgICAgIGV4cGVjdChpZHMpLnRvRXF1YWwoWzFdKTtcbiAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gY2xvc2Ugc2Vzc2lvbiBhZnRlciBhIHdoaWxlXG4gICAgICAgICAgICBzZXNzaW9uMi5jbG9zZSgpO1xuICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBmdW5jdGlvbiBzZXJ2ZXJJczMxT3JMYXRlcihkb25lKSB7XG4gICAgLy8gbGF6eSB3YXkgb2YgY2hlY2tpbmcgdGhlIHZlcnNpb24gbnVtYmVyXG4gICAgLy8gaWYgc2VydmVyIGhhcyBiZWVuIHNldCB3ZSBrbm93IGl0IGlzIGF0IGxlYXN0IDMuMVxuICAgIGlmICghc2VydmVyTWV0YWRhdGEpIHtcbiAgICAgIGRvbmUoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBjb3VudE5vZGVzKGxhYmVsLCBwcm9wZXJ0eUtleSwgcHJvcGVydHlWYWx1ZSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXNzaW9uLnJ1bihgTUFUQ0ggKG46ICR7bGFiZWx9IHske3Byb3BlcnR5S2V5fTogJHtwcm9wZXJ0eVZhbHVlfX0pIFJFVFVSTiBjb3VudChuKSBBUyBjb3VudGApLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgcmVzb2x2ZShyZXN1bHQucmVjb3Jkc1swXS5nZXQoJ2NvdW50JykudG9OdW1iZXIoKSk7XG4gICAgICB9KS5jYXRjaChlcnJvciA9PiByZWplY3QoZXJyb3IpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdpdGhRdWVyeUluVG1wU2Vzc2lvbihkcml2ZXIsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgdG1wU2Vzc2lvbiA9IGRyaXZlci5zZXNzaW9uKCk7XG4gICAgcmV0dXJuIHRtcFNlc3Npb24ucnVuKCdSRVRVUk4gMScpLnRoZW4oKCkgPT4ge1xuICAgICAgdG1wU2Vzc2lvbi5jbG9zZShjYWxsYmFjayk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBuZXdTZXNzaW9uV2l0aENvbm5lY3Rpb24oY29ubmVjdGlvbikge1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm92aWRlciA9IG5ldyBTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIoUHJvbWlzZS5yZXNvbHZlKGNvbm5lY3Rpb24pKTtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oUkVBRCwgY29ubmVjdGlvblByb3ZpZGVyKTtcbiAgICBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTsgLy8gZm9yY2Ugc2Vzc2lvbiB0byBhY3F1aXJlIG5ldyBjb25uZWN0aW9uXG4gICAgcmV0dXJuIHNlc3Npb247XG4gIH1cblxuICBmdW5jdGlvbiBpZGxlQ29ubmVjdGlvbkNvdW50KGRyaXZlcikge1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm92aWRlciA9IGRyaXZlci5fY29ubmVjdGlvblByb3ZpZGVyO1xuICAgIGNvbnN0IGFkZHJlc3MgPSBjb25uZWN0aW9uUHJvdmlkZXIuX2FkZHJlc3M7XG4gICAgY29uc3QgY29ubmVjdGlvblBvb2wgPSBjb25uZWN0aW9uUHJvdmlkZXIuX2Nvbm5lY3Rpb25Qb29sO1xuICAgIGNvbnN0IGlkbGVDb25uZWN0aW9ucyA9IGNvbm5lY3Rpb25Qb29sLl9wb29sc1thZGRyZXNzXTtcbiAgICByZXR1cm4gaWRsZUNvbm5lY3Rpb25zLmxlbmd0aDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZlcmlmeUJvb2ttYXJrKGJvb2ttYXJrKSB7XG4gICAgZXhwZWN0KGJvb2ttYXJrKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChib29rbWFyaykubm90LnRvQmVOdWxsKCk7XG4gIH1cblxuICBmdW5jdGlvbiBleHBlY3RUcmFuc2FjdGlvblRlcm1pbmF0ZWRFcnJvcihlcnJvcikge1xuICAgIGV4cGVjdChlcnJvci5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigndHJhbnNhY3Rpb24gdGVybWluYXRlZCcpID49IDApLnRvQmVUcnV0aHkoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRBbGxOb2RlSWRzKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gZHJpdmVyLnNlc3Npb24oKTtcbiAgICAgIHNlc3Npb24ucnVuKCdNQVRDSCAobikgUkVUVVJOIG4uaWQnKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIGNvbnN0IGlkcyA9IHJlc3VsdC5yZWNvcmRzLm1hcChyZWNvcmQgPT4gcmVjb3JkLmdldCgwKS50b051bWJlcigpKTtcbiAgICAgICAgc2Vzc2lvbi5jbG9zZSgpO1xuICAgICAgICByZXNvbHZlKGlkcyk7XG4gICAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCBuZW80aiBmcm9tICcuLi8uLi9saWIvdjEnO1xuXG5kZXNjcmliZSgndHJhbnNhY3Rpb24nLCAoKSA9PiB7XG5cbiAgbGV0IGRyaXZlcjtcbiAgbGV0IHNlc3Npb247XG4gIGxldCBzZXJ2ZXI7XG4gIGxldCBvcmlnaW5hbFRpbWVvdXQ7XG5cbiAgYmVmb3JlRWFjaChkb25lID0+IHtcbiAgICAvLyBtYWtlIGphc21pbmUgdGltZW91dCBoaWdoIGVub3VnaCB0byB0ZXN0IHVucmVhY2hhYmxlIGJvb2ttYXJrc1xuICAgIG9yaWdpbmFsVGltZW91dCA9IGphc21pbmUuREVGQVVMVF9USU1FT1VUX0lOVEVSVkFMO1xuICAgIGphc21pbmUuREVGQVVMVF9USU1FT1VUX0lOVEVSVkFMID0gNjAwMDA7XG5cbiAgICBkcml2ZXIgPSBuZW80ai5kcml2ZXIoXCJib2x0Oi8vbG9jYWxob3N0XCIsIG5lbzRqLmF1dGguYmFzaWMoXCJuZW80alwiLCBcIm5lbzRqXCIpKTtcbiAgICBkcml2ZXIub25Db21wbGV0ZWQgPSBtZXRhID0+IHtcbiAgICAgIHNlcnZlciA9IG1ldGFbJ3NlcnZlciddO1xuICAgIH07XG4gICAgc2Vzc2lvbiA9IGRyaXZlci5zZXNzaW9uKCk7XG5cbiAgICBzZXNzaW9uLnJ1bihcIk1BVENIIChuKSBERVRBQ0ggREVMRVRFIG5cIikudGhlbihkb25lKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBqYXNtaW5lLkRFRkFVTFRfVElNRU9VVF9JTlRFUlZBTCA9IG9yaWdpbmFsVGltZW91dDtcbiAgICBkcml2ZXIuY2xvc2UoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjb21taXQgc2ltcGxlIGNhc2UnLCBkb25lID0+IHtcbiAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgIHR4LnJ1bihcIkNSRUFURSAoOlRYTm9kZTEpXCIpLnRoZW4oKCkgPT4ge1xuICAgICAgdHgucnVuKFwiQ1JFQVRFICg6VFhOb2RlMilcIikudGhlbigoKSA9PiB7XG4gICAgICAgIHR4LmNvbW1pdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHNlc3Npb24ucnVuKFwiTUFUQ0ggKHQxOlRYTm9kZTEpLCAodDI6VFhOb2RlMikgUkVUVVJOIGNvdW50KHQxKSwgY291bnQodDIpXCIpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkcy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0LnJlY29yZHNbMF0uZ2V0KCdjb3VudCh0MSknKS50b0ludCgpKS50b0JlKDEpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzWzBdLmdldCgnY291bnQodDIpJykudG9JbnQoKSkudG9CZSgxKTtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICB9KS5jYXRjaChjb25zb2xlLmxvZyk7XG4gICAgICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgICB9KS5jYXRjaChjb25zb2xlLmxvZyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGFuZGxlIGludGVyYWN0aXZlIHNlc3Npb24nLCBkb25lID0+IHtcbiAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgIHR4LnJ1bihcIlJFVFVSTiAnZm9vJyBBUyByZXNcIikudGhlbihyZXN1bHQgPT4ge1xuICAgICAgdHgucnVuKFwiQ1JFQVRFICh7bmFtZToge3BhcmFtfX0pXCIsIHtwYXJhbTogcmVzdWx0LnJlY29yZHNbMF0uZ2V0KCdyZXMnKX0pLnRoZW4oKCkgPT4ge1xuICAgICAgICB0eC5jb21taXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICBzZXNzaW9uLnJ1bihcIk1BVENIIChhIHtuYW1lOidmb28nfSkgUkVUVVJOIGNvdW50KGEpXCIpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkcy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0LnJlY29yZHNbMF0uZ2V0KCdjb3VudChhKScpLnRvSW50KCkpLnRvQmUoMSk7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgICB9KS5jYXRjaChjb25zb2xlLmxvZyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGFuZGxlIGZhaWx1cmVzIHdpdGggc3Vic2NyaWJlJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eC5ydW4oJ1RISVMgSVMgTk9UIENZUEhFUicpXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9FcXVhbCgnTmVvLkNsaWVudEVycm9yLlN0YXRlbWVudC5TeW50YXhFcnJvcicpO1xuICAgICAgICBkcml2ZXIuY2xvc2UoKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGFuZGxlIGZhaWx1cmVzIHdpdGggY2F0Y2gnLCBkb25lID0+IHtcbiAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgIHR4LnJ1bignVEhJUyBJUyBOT1QgQ1lQSEVSJylcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBvbkVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvRXF1YWwoJ05lby5DbGllbnRFcnJvci5TdGF0ZW1lbnQuU3ludGF4RXJyb3InKTtcbiAgICAgICAgICBkcml2ZXIuY2xvc2UoKTtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGhhbmRsZSBmYWlsdXJlcyBvbiBjb21taXQnLCBkb25lID0+IHtcbiAgICAvLyBXaGVuXG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eC5ydW4oXCJDUkVBVEUgKDpUWE5vZGUxKVwiKS50aGVuKCgpID0+IHtcbiAgICAgIHR4LnJ1bihcIlRISVMgSVMgTk9UIENZUEhFUlwiKS5jYXRjaChzdGF0ZW1lbnRFcnJvciA9PiB7XG4gICAgICAgIGV4cGVjdFN5bnRheEVycm9yKHN0YXRlbWVudEVycm9yKTtcblxuICAgICAgICB0eC5ydW4oXCJDUkVBVEUgKDpUWE5vZGUyKVwiKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgdHguY29tbWl0KCkuY2F0Y2goY29tbWl0RXJyb3IgPT4ge1xuICAgICAgICAgICAgZXhwZWN0KGNvbW1pdEVycm9yLmVycm9yKS50b0JlRGVmaW5lZCgpO1xuICAgICAgICAgICAgZHJpdmVyLmNsb3NlKCk7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goY29uc29sZS5sb2cpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBjb21taXR0aW5nIG9uIGEgZmFpbGVkIHF1ZXJ5JywgZG9uZSA9PiB7XG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eC5ydW4oXCJDUkVBVEUgKDpUWE5vZGUxKVwiKS50aGVuKCgpID0+IHtcbiAgICAgIHR4LnJ1bihcIlRISVMgSVMgTk9UIENZUEhFUlwiKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHR4LmNvbW1pdCgpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICBleHBlY3QoZXJyb3IuZXJyb3IpLnRvQmVEZWZpbmVkKCk7XG4gICAgICAgICAgZHJpdmVyLmNsb3NlKCk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYW5kbGUgd2hlbiBjb21taXR0aW5nIHdoZW4gYW5vdGhlciBzdGF0ZW1lbnQgZmFpbHMnLCBkb25lID0+IHtcbiAgICAvLyBXaGVuXG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eC5ydW4oXCJDUkVBVEUgKDpUWE5vZGUxKVwiKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0eC5jb21taXQoKVxuICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICBleHBlY3QoZXJyb3IpLnRvQmVEZWZpbmVkKCk7XG4gICAgICAgICAgICBkcml2ZXIuY2xvc2UoKTtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIHR4LnJ1bihcIlRISVMgSVMgTk9UIENZUEhFUlwiKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYW5kbGUgcm9sbGJhY2tzJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eC5ydW4oXCJDUkVBVEUgKDpUWE5vZGUxKVwiKS50aGVuKCgpID0+IHtcbiAgICAgIHR4LnJ1bihcIkNSRUFURSAoOlRYTm9kZTIpXCIpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0eC5yb2xsYmFjaygpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHNlc3Npb24ucnVuKFwiTUFUQ0ggKHQxOlRYTm9kZTEpLCAodDI6VFhOb2RlMikgUkVUVVJOIGNvdW50KHQxKSwgY291bnQodDIpXCIpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkcy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0LnJlY29yZHNbMF0uZ2V0KCdjb3VudCh0MSknKS50b0ludCgpKS50b0JlKDApO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzWzBdLmdldCgnY291bnQodDIpJykudG9JbnQoKSkudG9CZSgwKTtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICB9KS5jYXRjaChjb25zb2xlLmxvZyk7XG4gICAgICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgICB9KS5jYXRjaChjb25zb2xlLmxvZyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCB3aGVuIGNvbW1pdHRpbmcgb24gYSByb2xsZWQgYmFjayBxdWVyeScsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHR4ID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgdHgucnVuKFwiQ1JFQVRFICg6VFhOb2RlMSlcIikudGhlbigoKSA9PiB7XG4gICAgICB0eC5yb2xsYmFjaygpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0eC5jb21taXQoKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgZXhwZWN0KGVycm9yLmVycm9yKS50b0JlRGVmaW5lZCgpO1xuICAgICAgICAgIGRyaXZlci5jbG9zZSgpO1xuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KS5jYXRjaChjb25zb2xlLmxvZyk7XG4gICAgfSkuY2F0Y2goY29uc29sZS5sb2cpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBydW5uaW5nIG9uIGEgcm9sbGVkIGJhY2sgdHJhbnNhY3Rpb24nLCBkb25lID0+IHtcbiAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgIHR4LnJ1bihcIkNSRUFURSAoOlRYTm9kZTEpXCIpLnRoZW4oKCkgPT4ge1xuICAgICAgdHgucm9sbGJhY2soKS50aGVuKCgpID0+IHtcbiAgICAgICAgdHgucnVuKFwiUkVUVVJOIDQyXCIpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICBleHBlY3QoZXJyb3IuZXJyb3IpLnRvQmVEZWZpbmVkKCk7XG4gICAgICAgICAgZHJpdmVyLmNsb3NlKCk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgICB9KS5jYXRjaChjb25zb2xlLmxvZyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCB3aGVuIHJ1bm5pbmcgd2hlbiBhIHByZXZpb3VzIHN0YXRlbWVudCBmYWlsZWQnLCBkb25lID0+IHtcbiAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgIHR4LnJ1bihcIlRISVMgSVMgTk9UIENZUEhFUlwiKVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgdHgucnVuKFwiUkVUVVJOIDQyXCIpXG4gICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChlcnJvci5lcnJvcikudG9CZURlZmluZWQoKTtcbiAgICAgICAgICAgIGRyaXZlci5jbG9zZSgpO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgdHgucm9sbGJhY2soKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gdHJ5aW5nIHRvIHJvbGwgYmFjayBhIHJvbGxlZCBiYWNrIHRyYW5zYWN0aW9uJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eC5ydW4oXCJDUkVBVEUgKDpUWE5vZGUxKVwiKS50aGVuKCgpID0+IHtcbiAgICAgIHR4LnJvbGxiYWNrKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHR4LnJvbGxiYWNrKCkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIGV4cGVjdChlcnJvci5lcnJvcikudG9CZURlZmluZWQoKTtcbiAgICAgICAgICBkcml2ZXIuY2xvc2UoKTtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSkuY2F0Y2goY29uc29sZS5sb2cpO1xuICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwcm92aWRlIGJvb2ttYXJrIG9uIGNvbW1pdCcsIGRvbmUgPT4ge1xuICAgIGlmIChuZW80alZlcnNpb25PbGRlclRoYW4zMShkb25lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHR4ID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgZXhwZWN0KHNlc3Npb24ubGFzdEJvb2ttYXJrKCkpLm5vdC50b0JlRGVmaW5lZCgpO1xuICAgIHR4LnJ1bihcIkNSRUFURSAoOlRYTm9kZTEpXCIpLnRoZW4oKCkgPT4ge1xuICAgICAgdHgucnVuKFwiQ1JFQVRFICg6VFhOb2RlMilcIikudGhlbigoKSA9PiB7XG4gICAgICAgIHR4LmNvbW1pdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGV4cGVjdFZhbGlkTGFzdEJvb2ttYXJrKHNlc3Npb24pO1xuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KS5jYXRjaChjb25zb2xlLmxvZyk7XG4gICAgfSkuY2F0Y2goY29uc29sZS5sb2cpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGhhdmUgYm9va21hcmsgd2hlbiB0eCBpcyByb2xsZWQgYmFjaycsIGRvbmUgPT4ge1xuICAgIGlmIChuZW80alZlcnNpb25PbGRlclRoYW4zMShkb25lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV4cGVjdChzZXNzaW9uLmxhc3RCb29rbWFyaygpKS5ub3QudG9CZURlZmluZWQoKTtcbiAgICBjb25zdCB0eDEgPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcblxuICAgIHR4MS5ydW4oJ0NSRUFURSAoKScpLnRoZW4oKCkgPT4ge1xuICAgICAgdHgxLmNvbW1pdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBleHBlY3RWYWxpZExhc3RCb29rbWFyayhzZXNzaW9uKTtcbiAgICAgICAgY29uc3QgYm9va21hcmtCZWZvcmUgPSBzZXNzaW9uLmxhc3RCb29rbWFyaygpO1xuXG4gICAgICAgIGNvbnN0IHR4MiA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgICAgICB0eDIucnVuKCdDUkVBVEUgKCknKS50aGVuKCgpID0+IHtcbiAgICAgICAgICB0eDIucm9sbGJhY2soKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGV4cGVjdFZhbGlkTGFzdEJvb2ttYXJrKHNlc3Npb24pO1xuICAgICAgICAgICAgY29uc3QgYm9va21hcmtBZnRlciA9IHNlc3Npb24ubGFzdEJvb2ttYXJrKCk7XG4gICAgICAgICAgICBleHBlY3QoYm9va21hcmtBZnRlcikudG9FcXVhbChib29rbWFya0JlZm9yZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHR4MyA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgICAgICAgICAgdHgzLnJ1bignQ1JFQVRFICgpJykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHR4My5jb21taXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3RWYWxpZExhc3RCb29rbWFyayhzZXNzaW9uKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGF2ZSBubyBib29rbWFyayB3aGVuIHR4IGZhaWxzJywgZG9uZSA9PiB7XG4gICAgaWYgKG5lbzRqVmVyc2lvbk9sZGVyVGhhbjMxKGRvbmUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXhwZWN0KHNlc3Npb24ubGFzdEJvb2ttYXJrKCkpLm5vdC50b0JlRGVmaW5lZCgpO1xuICAgIGNvbnN0IHR4MSA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuXG4gICAgdHgxLnJ1bignQ1JFQVRFICgpJykudGhlbigoKSA9PiB7XG4gICAgICB0eDEuY29tbWl0KCkudGhlbigoKSA9PiB7XG4gICAgICAgIGV4cGVjdFZhbGlkTGFzdEJvb2ttYXJrKHNlc3Npb24pO1xuICAgICAgICBjb25zdCBib29rbWFya0JlZm9yZSA9IHNlc3Npb24ubGFzdEJvb2ttYXJrKCk7XG5cbiAgICAgICAgY29uc3QgdHgyID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG5cbiAgICAgICAgdHgyLnJ1bignUkVUVVJOJykuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIGV4cGVjdFN5bnRheEVycm9yKGVycm9yKTtcbiAgICAgICAgICBjb25zdCBib29rbWFya0FmdGVyID0gc2Vzc2lvbi5sYXN0Qm9va21hcmsoKTtcbiAgICAgICAgICBleHBlY3QoYm9va21hcmtBZnRlcikudG9FcXVhbChib29rbWFya0JlZm9yZSk7XG5cbiAgICAgICAgICBjb25zdCB0eDMgPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICAgICAgICB0eDMucnVuKCdDUkVBVEUgKCknKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHR4My5jb21taXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgZXhwZWN0VmFsaWRMYXN0Qm9va21hcmsoc2Vzc2lvbik7XG4gICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgZm9yIGludmFsaWQgYm9va21hcmsnLCBkb25lID0+IHtcbiAgICBpZiAobmVvNGpWZXJzaW9uT2xkZXJUaGFuMzEoZG9uZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnZhbGlkQm9va21hcmsgPSAnaGksIHRoaXMgaXMgYW4gaW52YWxpZCBib29rbWFyayc7XG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oaW52YWxpZEJvb2ttYXJrKTtcbiAgICB0eC5ydW4oJ1JFVFVSTiAxJykuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvQmUoJ05lby5DbGllbnRFcnJvci5UcmFuc2FjdGlvbi5JbnZhbGlkQm9va21hcmsnKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIHJ1biBxdWVyeSBmb3IgdW5yZWFjaGFibGUgYm9va21hcmsnLCBkb25lID0+IHtcbiAgICBpZiAobmVvNGpWZXJzaW9uT2xkZXJUaGFuMzEoZG9uZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0eDEgPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eDEucnVuKCdDUkVBVEUgKCknKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBleHBlY3QocmVzdWx0LnN1bW1hcnkuY291bnRlcnMubm9kZXNDcmVhdGVkKCkpLnRvQmUoMSk7XG5cbiAgICAgIHR4MS5jb21taXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgZXhwZWN0VmFsaWRMYXN0Qm9va21hcmsoc2Vzc2lvbik7XG5cbiAgICAgICAgY29uc3QgdW5yZWFjaGFibGVCb29rbWFyayA9IHNlc3Npb24ubGFzdEJvb2ttYXJrKCkgKyBcIjBcIjtcbiAgICAgICAgY29uc3QgdHgyID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKHVucmVhY2hhYmxlQm9va21hcmspO1xuICAgICAgICB0eDIucnVuKCdDUkVBVEUgKCknKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgY29uc3QgZXhwZWN0ZWRQcmVmaXggPSBtZXNzYWdlLmluZGV4T2YoJ0RhdGFiYXNlIG5vdCB1cCB0byB0aGUgcmVxdWVzdGVkIHZlcnNpb24nKSA9PT0gMDtcbiAgICAgICAgICBleHBlY3QoZXhwZWN0ZWRQcmVmaXgpLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSkuY2F0Y2goY29uc29sZS5sb2cpO1xuICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByb2xsYmFjayB3aGVuIHZlcnkgZmlyc3QgcnVuIGZhaWxzJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdHgxID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgdHgxLnJ1bignUkVUVVJOIGZvbycpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGV4cGVjdFN5bnRheEVycm9yKGVycm9yKTtcblxuICAgICAgY29uc3QgdHgyID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgICB0eDIucnVuKCdSRVRVUk4gMScpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzWzBdLmdldCgwKS50b051bWJlcigpKS50b0VxdWFsKDEpO1xuICAgICAgICB0eDIuY29tbWl0KCkudGhlbihkb25lKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJvbGxiYWNrIHdoZW4gc29tZSBydW4gZmFpbHMnLCBkb25lID0+IHtcbiAgICBjb25zdCB0eDEgPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eDEucnVuKCdDUkVBVEUgKDpQZXJzb24pJykudGhlbigoKSA9PiB7XG4gICAgICB0eDEucnVuKCdSRVRVUk4gZm9vJykuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBleHBlY3RTeW50YXhFcnJvcihlcnJvcik7XG5cbiAgICAgICAgY29uc3QgdHgyID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgICAgIHR4Mi5ydW4oJ01BVENIIChuOlBlcnNvbikgUkVUVVJOIGNvdW50KG4pJykudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkc1swXS5nZXQoMCkudG9OdW1iZXIoKSkudG9FcXVhbCgwKTtcbiAgICAgICAgICB0eDIuY29tbWl0KCkudGhlbihkb25lKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIGNvbW1pdCB0cmFuc2FjdGlvbiB0aGF0IGhhZCBydW4gZmFpbHVyZXMnLCBkb25lID0+IHtcbiAgICBjb25zdCB0eDEgPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eDEucnVuKCdDUkVBVEUgKDpQZXJzb24pJykudGhlbigoKSA9PiB7XG4gICAgICB0eDEucnVuKCdSRVRVUk4gZm9vJykuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBleHBlY3RTeW50YXhFcnJvcihlcnJvcik7XG4gICAgICAgIHR4MS5jb21taXQoKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3I7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBlcnJvck1lc3NhZ2UuaW5kZXhPZignQ2Fubm90IGNvbW1pdCBzdGF0ZW1lbnRzIGluIHRoaXMgdHJhbnNhY3Rpb24nKTtcbiAgICAgICAgICBleHBlY3QoaW5kZXgpLm5vdC50b0JlTGVzc1RoYW4oMCk7XG5cbiAgICAgICAgICBjb25zdCB0eDIgPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICAgICAgICB0eDIucnVuKCdNQVRDSCAobjpQZXJzb24pIFJFVFVSTiBjb3VudChuKScpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkc1swXS5nZXQoMCkudG9OdW1iZXIoKSkudG9FcXVhbCgwKTtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBleHBvc2Ugc2VydmVyIGluZm8gb24gc3VjY2Vzc2Z1bCBxdWVyeScsIGRvbmUgPT4ge1xuICAgIGlmIChuZW80alZlcnNpb25PbGRlclRoYW4zMShkb25lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRlbWVudCA9ICdSRVRVUk4gMSc7XG5cbiAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgIHR4LnJ1bihzdGF0ZW1lbnQpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGNvbnN0IHN1bSA9IHJlc3VsdC5zdW1tYXJ5O1xuICAgICAgZXhwZWN0KHN1bS5zZXJ2ZXIpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3Qoc3VtLnNlcnZlci5hZGRyZXNzKS50b0VxdWFsKCdsb2NhbGhvc3Q6NzY4NycpO1xuICAgICAgZXhwZWN0KHN1bS5zZXJ2ZXIudmVyc2lvbikudG9CZURlZmluZWQoKTtcbiAgICAgIHR4LmNvbW1pdCgpLnRoZW4oZG9uZSk7XG4gICAgfSkuY2F0Y2goY29uc29sZS5sb2cpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGV4cG9zZSBzZXJ2ZXIgaW5mbyBvbiBzdWNjZXNzZnVsIHF1ZXJ5IHVzaW5nIG9ic2VydmVyJywgZG9uZSA9PiB7XG4gICAgaWYgKG5lbzRqVmVyc2lvbk9sZGVyVGhhbjMxKGRvbmUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2l2ZW5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSAnUkVUVVJOIDEnO1xuXG4gICAgLy8gV2hlbiAmIFRoZW5cbiAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgIHR4LnJ1bihzdGF0ZW1lbnQpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgb25OZXh0OiByZWNvcmQgPT4ge1xuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ29tcGxldGVkOiBzdW1tYXJ5ID0+IHtcbiAgICAgICAgICBjb25zdCBzZXJ2ZXIgPSBzdW1tYXJ5LnNlcnZlcjtcblxuICAgICAgICAgIGV4cGVjdChzZXJ2ZXIpLnRvQmVEZWZpbmVkKCk7XG4gICAgICAgICAgZXhwZWN0KHNlcnZlci5hZGRyZXNzKS50b0VxdWFsKCdsb2NhbGhvc3Q6NzY4NycpO1xuICAgICAgICAgIGV4cGVjdChzZXJ2ZXIudmVyc2lvbikudG9CZURlZmluZWQoKTtcblxuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCBuaWNlbHkgZm9yIGlsbGVnYWwgc3RhdGVtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IHR4ID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG5cbiAgICBleHBlY3QoKCkgPT4gdHgucnVuKCkpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuICAgIGV4cGVjdCgoKSA9PiB0eC5ydW4obnVsbCkpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuICAgIGV4cGVjdCgoKSA9PiB0eC5ydW4oe30pKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgICBleHBlY3QoKCkgPT4gdHgucnVuKDQyKSkudG9UaHJvd0Vycm9yKFR5cGVFcnJvcik7XG4gICAgZXhwZWN0KCgpID0+IHR4LnJ1bihbXSkpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuICAgIGV4cGVjdCgoKSA9PiB0eC5ydW4oWydDUkVBVEUgKCknXSkpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuXG4gICAgZXhwZWN0KCgpID0+IHR4LnJ1bih7c3RhdGVtZW50OiAnQ1JFQVRFICgpJ30pKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgICBleHBlY3QoKCkgPT4gdHgucnVuKHtjeXBoZXI6ICdDUkVBVEUgKCknfSkpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFjY2VwdCBhIHN0YXRlbWVudCBvYmplY3QgJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB7dGV4dDogXCJSRVRVUk4gMSBBUyBhXCJ9O1xuXG4gICAgdHgucnVuKHN0YXRlbWVudCkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzLmxlbmd0aCkudG9CZSgxKTtcbiAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkc1swXS5nZXQoJ2EnKS50b0ludCgpKS50b0JlKDEpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBiZSBvcGVuIHdoZW4gbmVpdGhlciBjb21taXR0ZWQgbm9yIHJvbGxlZCBiYWNrJywgKCkgPT4ge1xuICAgIGNvbnN0IHR4ID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgZXhwZWN0KHR4LmlzT3BlbigpKS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IGJlIG9wZW4gYWZ0ZXIgY29tbWl0JywgZG9uZSA9PiB7XG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcblxuICAgIHR4LnJ1bignQ1JFQVRFICgpJykudGhlbigoKSA9PiB7XG4gICAgICB0eC5jb21taXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgZXhwZWN0KHR4LmlzT3BlbigpKS50b0JlRmFsc3koKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IGJlIG9wZW4gYWZ0ZXIgcm9sbGJhY2snLCBkb25lID0+IHtcbiAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuXG4gICAgdHgucnVuKCdDUkVBVEUgKCknKS50aGVuKCgpID0+IHtcbiAgICAgIHR4LnJvbGxiYWNrKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGV4cGVjdCh0eC5pc09wZW4oKSkudG9CZUZhbHN5KCk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBiZSBvcGVuIGFmdGVyIHJ1biBlcnJvcicsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHR4ID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG5cbiAgICB0eC5ydW4oJ1JFVFVSTicpLmNhdGNoKCgpID0+IHtcbiAgICAgIGV4cGVjdCh0eC5pc09wZW4oKSkudG9CZUZhbHN5KCk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGV4cGVjdFN5bnRheEVycm9yKGVycm9yKSB7XG4gICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvQmUoJ05lby5DbGllbnRFcnJvci5TdGF0ZW1lbnQuU3ludGF4RXJyb3InKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cGVjdFZhbGlkTGFzdEJvb2ttYXJrKHNlc3Npb24pIHtcbiAgICBleHBlY3Qoc2Vzc2lvbi5sYXN0Qm9va21hcmsoKSkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3Qoc2Vzc2lvbi5sYXN0Qm9va21hcmsoKSkubm90LnRvQmVOdWxsKCk7XG4gIH1cblxuICBmdW5jdGlvbiBuZW80alZlcnNpb25PbGRlclRoYW4zMShkb25lKSB7XG4gICAgLy9sYXp5IHdheSBvZiBjaGVja2luZyB0aGUgdmVyc2lvbiBudW1iZXJcbiAgICAvL2lmIHNlcnZlciBoYXMgYmVlbiBzZXQgd2Uga25vdyBpdCBpcyBhdCBsZWFzdFxuICAgIC8vMy4xICh0b2RvIGFjdHVhbGx5IHBhcnNlIHRoZSB2ZXJzaW9uIHN0cmluZylcbiAgICBpZiAoIXNlcnZlcikge1xuICAgICAgZG9uZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxudmFyIG5lbzRqID0gcmVxdWlyZShcIi4uLy4uL2xpYi92MVwiKTtcblxuZGVzY3JpYmUoJ2Zsb2F0aW5nIHBvaW50IHZhbHVlcycsIGZ1bmN0aW9uKCkge1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgZmxvYXQgMS4wICcsIHRlc3RWYWwoIDEgKSApO1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgZmxvYXQgMC4wICcsIHRlc3RWYWwoIDAuMCApICk7XG4gIGl0KCdzaG91bGQgc3VwcG9ydCBwcmV0dHkgYmlnIGZsb2F0ICcsIHRlc3RWYWwoIDMuNDAyODIzNWUrMzggKSApOyAvLyBNYXggMzItYml0XG4gIGl0KCdzaG91bGQgc3VwcG9ydCByZWFsbHkgYmlnIGZsb2F0ICcsIHRlc3RWYWwoIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4ICkgKTsgLy8gTWF4IDY0LWJpdFxuICBpdCgnc2hvdWxkIHN1cHBvcnQgcHJldHR5IHNtYWxsIGZsb2F0ICcsIHRlc3RWYWwoIDEuNGUtNDUgKSApOyAvLyBNaW4gMzItYml0XG4gIGl0KCdzaG91bGQgc3VwcG9ydCByZWFsbHkgc21hbGwgZmxvYXQgJywgdGVzdFZhbCggNC45ZS0zMjQgKSApOyAvLyBNaW4gNjQtYml0XG59KTtcblxuZGVzY3JpYmUoJ2ludGVnZXIgdmFsdWVzJywgZnVuY3Rpb24oKSB7XG4gIGl0KCdzaG91bGQgc3VwcG9ydCBpbnRlZ2VyIDEgJywgdGVzdFZhbCggbmVvNGouaW50KDEpICkgKTtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IGludGVnZXIgMCAnLCB0ZXN0VmFsKCBuZW80ai5pbnQoMCkgKSApO1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgaW50ZWdlciAtMSAnLCB0ZXN0VmFsKCBuZW80ai5pbnQoLTEpICkgKTtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IGludGVnZXIgbGFyZ2VyIHRoYW4gSlMgTnVtYmVycyBjYW4gbW9kZWwnLCB0ZXN0VmFsKCBuZW80ai5pbnQoXCIweDdmZmZmZmZmZmZmZmZmZmZcIikgKSApO1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgaW50ZWdlciBzbWFsbGVyIHRoYW4gSlMgTnVtYmVycyBjYW4gbW9kZWwnLCB0ZXN0VmFsKCBuZW80ai5pbnQoXCIweDgwMDAwMDAwMDAwMDAwMDBcIikgKSApO1xufSk7XG5cbmRlc2NyaWJlKCdib29sZWFuIHZhbHVlcycsIGZ1bmN0aW9uKCkge1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgdHJ1ZSAnLCAgdGVzdFZhbCggdHJ1ZSApICk7XG4gIGl0KCdzaG91bGQgc3VwcG9ydCBmYWxzZSAnLCB0ZXN0VmFsKCBmYWxzZSApICk7XG59KTtcblxuZGVzY3JpYmUoJ3N0cmluZyB2YWx1ZXMnLCBmdW5jdGlvbigpIHtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IGVtcHR5IHN0cmluZyAnLCAgIHRlc3RWYWwoIFwiXCIgKSApO1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgc2ltcGxlIHN0cmluZyAnLCAgdGVzdFZhbCggXCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwiICkgKTtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IGF3ZXNvbWUgc3RyaW5nICcsIHRlc3RWYWwoIFwiQWxsIG1ha3Qgw6V0IFRlbmdpbCwgdsOlciBiZWZyaWFyZS5cIiApICk7XG59KTtcblxuZGVzY3JpYmUoJ2xpc3QgdmFsdWVzJywgZnVuY3Rpb24oKSB7XG4gIGl0KCdzaG91bGQgc3VwcG9ydCBlbXB0eSBsaXN0cyAnLCAgIHRlc3RWYWwoIFtdICkgKTtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IHNwYXJzZSBsaXN0cyAnLCAgIHRlc3RWYWwoIFsgdW5kZWZpbmVkLCA0IF0sIFsgbnVsbCwgNCBdICkgKTtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IGZsb2F0IGxpc3RzICcsICAgdGVzdFZhbCggWyAxLDIsMyBdICkgKTtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IGJvb2xlYW4gbGlzdHMgJywgdGVzdFZhbCggWyB0cnVlLCBmYWxzZSBdICkgKTtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IHN0cmluZyBsaXN0cyAnLCAgdGVzdFZhbCggWyBcIlwiLCBcImhlbGxvIVwiIF0gKSApO1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgbGlzdCBsaXN0cyAnLCAgICB0ZXN0VmFsKCBbIFtdLCBbMSwyLDNdIF0gKSApO1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgbWFwIGxpc3RzICcsICAgICB0ZXN0VmFsKCBbIHt9LCB7YToxMn0gXSApICk7XG59KTtcblxuZGVzY3JpYmUoJ21hcCB2YWx1ZXMnLCBmdW5jdGlvbigpIHtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IGVtcHR5IG1hcHMgJywgdGVzdFZhbCgge30gKSApO1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgYmFzaWMgbWFwcyAnLCB0ZXN0VmFsKCB7YToxLCBiOnt9LCBjOltdLCBkOntlOjF9fSApICk7XG4gIGl0KCdzaG91bGQgc3VwcG9ydCBzcGFyc2UgbWFwcyAnLCB0ZXN0VmFsKCB7Zm9vOiB1bmRlZmluZWQsIGJhcjogbnVsbH0sIHtiYXI6IG51bGx9ICkgKTtcbn0pO1xuXG5kZXNjcmliZSgnbm9kZSB2YWx1ZXMnLCBmdW5jdGlvbigpIHtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IHJldHVybmluZyBub2RlcyAnLCBmdW5jdGlvbihkb25lKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdDovL2xvY2FsaG9zdFwiLCBuZW80ai5hdXRoLmJhc2ljKFwibmVvNGpcIiwgXCJuZW80alwiKSk7XG4gICAgdmFyIHNlc3Npb24gPSBkcml2ZXIuc2Vzc2lvbigpO1xuXG4gICAgLy8gV2hlblxuICAgIHNlc3Npb24ucnVuKFwiQ1JFQVRFIChuOlVzZXIge25hbWU6J0xpc2EnfSkgUkVUVVJOIG4sIGlkKG4pXCIpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgIHZhciBub2RlID0gcmVzdWx0LnJlY29yZHNbMF0uZ2V0KCduJyk7XG5cbiAgICAgICAgZXhwZWN0KCBub2RlLnByb3BlcnRpZXMgKS50b0VxdWFsKCB7IG5hbWU6XCJMaXNhXCIgfSApO1xuICAgICAgICBleHBlY3QoIG5vZGUubGFiZWxzICkudG9FcXVhbCggW1wiVXNlclwiXSApO1xuICAgICAgICAvLyBleHBlY3QoIG5vZGUuaWRlbnRpdHkgKS50b0VxdWFsKCByc1swXVsnaWQobiknXSApOyAvLyBUT0RPXG4gICAgICAgIGRyaXZlci5jbG9zZSgpO1xuICAgICAgICBkb25lKCk7XG5cbiAgICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgncmVsYXRpb25zaGlwIHZhbHVlcycsIGZ1bmN0aW9uKCkge1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgcmV0dXJuaW5nIHJlbGF0aW9uc2hpcHMnLCBmdW5jdGlvbihkb25lKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdDovL2xvY2FsaG9zdFwiLCBuZW80ai5hdXRoLmJhc2ljKFwibmVvNGpcIiwgXCJuZW80alwiKSk7XG4gICAgdmFyIHNlc3Npb24gPSBkcml2ZXIuc2Vzc2lvbigpO1xuXG4gICAgLy8gV2hlblxuICAgIHNlc3Npb24ucnVuKFwiQ1JFQVRFICgpLVtyOlVzZXIge25hbWU6J0xpc2EnfV0tPigpIFJFVFVSTiByLCBpZChyKVwiKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICB2YXIgcmVsID0gcmVzdWx0LnJlY29yZHNbMF0uZ2V0KCdyJyk7XG5cbiAgICAgICAgZXhwZWN0KCByZWwucHJvcGVydGllcyApLnRvRXF1YWwoIHsgbmFtZTpcIkxpc2FcIiB9ICk7XG4gICAgICAgIGV4cGVjdCggcmVsLnR5cGUgKS50b0VxdWFsKCBcIlVzZXJcIiApO1xuICAgICAgICAvLyBleHBlY3QoIHJlbC5pZGVudGl0eSApLnRvRXF1YWwoIHJzWzBdWydpZChyKSddICk7IC8vIFRPRE9cbiAgICAgICAgZHJpdmVyLmNsb3NlKCk7XG4gICAgICAgIGRvbmUoKTtcblxuICAgICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdwYXRoIHZhbHVlcycsIGZ1bmN0aW9uKCkge1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgcmV0dXJuaW5nIHBhdGhzJywgZnVuY3Rpb24oZG9uZSkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RcIiwgbmVvNGouYXV0aC5iYXNpYyhcIm5lbzRqXCIsIFwibmVvNGpcIikpO1xuICAgIHZhciBzZXNzaW9uID0gZHJpdmVyLnNlc3Npb24oKTtcblxuICAgIC8vIFdoZW5cbiAgICBzZXNzaW9uLnJ1bihcIkNSRUFURSBwPSg6VXNlciB7IG5hbWU6J0xpc2EnIH0pPC1bcjpLTk9XUyB7c2luY2U6MTIzNC4wfV0tKCkgUkVUVVJOIHBcIilcbiAgICAgIC50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICB2YXIgcGF0aCA9IHJlc3VsdC5yZWNvcmRzWzBdLmdldCgncCcpO1xuXG4gICAgICAgIGV4cGVjdCggcGF0aC5zdGFydC5wcm9wZXJ0aWVzICkudG9FcXVhbCggeyBuYW1lOlwiTGlzYVwiIH0gKTtcbiAgICAgICAgZXhwZWN0KCBwYXRoLmVuZC5wcm9wZXJ0aWVzICkudG9FcXVhbCggeyB9ICk7XG5cbiAgICAgICAgLy8gQWNjZXNzaW5nIHBhdGggc2VnbWVudHNcbiAgICAgICAgZXhwZWN0KCBwYXRoLmxlbmd0aCApLnRvRXF1YWwoIDEgKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHNlZ21lbnQgPSBwYXRoLnNlZ21lbnRzW2ldO1xuICAgICAgICAgIC8vIFRoZSBkaXJlY3Rpb24gb2YgdGhlIHBhdGggc2VnbWVudCBnb2VzIGZyb20gbGlzYSB0byB0aGUgYmxhbmsgbm9kZVxuICAgICAgICAgIGV4cGVjdCggc2VnbWVudC5zdGFydC5wcm9wZXJ0aWVzICkudG9FcXVhbCggeyBuYW1lOlwiTGlzYVwiIH0gKTtcbiAgICAgICAgICBleHBlY3QoIHNlZ21lbnQuZW5kLnByb3BlcnRpZXMgKS50b0VxdWFsKCB7IH0gKTtcbiAgICAgICAgICAvLyBXaGljaCBpcyB0aGUgaW52ZXJzZSBvZiB0aGUgcmVsYXRpb25zaGlwIGl0c2VsZiFcbiAgICAgICAgICBleHBlY3QoIHNlZ21lbnQucmVsYXRpb25zaGlwLnByb3BlcnRpZXMgKS50b0VxdWFsKCB7IHNpbmNlOiAxMjM0IH0gKTtcbiAgICAgICAgfVxuICAgICAgICBkcml2ZXIuY2xvc2UoKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7IGNvbnNvbGUubG9nKGVycik7IH0pO1xuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiB0ZXN0VmFsKCB2YWwsIGV4cGVjdGVkICkge1xuICByZXR1cm4gZnVuY3Rpb24oIGRvbmUgKSB7XG4gICAgdmFyIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RcIiwgbmVvNGouYXV0aC5iYXNpYyhcIm5lbzRqXCIsIFwibmVvNGpcIikpO1xuICAgIHZhciBzZXNzaW9uID0gZHJpdmVyLnNlc3Npb24oKTtcblxuICAgIHNlc3Npb24ucnVuKFwiUkVUVVJOIHt2YWx9IGFzIHZcIiwge3ZhbDogdmFsfSlcbiAgICAgIC50aGVuKCBmdW5jdGlvbiggcmVzdWx0ICkge1xuICAgICAgICBleHBlY3QoIHJlc3VsdC5yZWNvcmRzWzBdLmdldCgndicpICkudG9FcXVhbCggZXhwZWN0ZWQgfHwgdmFsICk7XG4gICAgICAgIGRyaXZlci5jbG9zZSgpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpIHsgY29uc29sZS5sb2coZXJyKTsgfSk7XG4gIH1cbn1cbiJdfQ== +},{"../../lib/v1":7,"../internal/shared-neo4j":404}]},{},[389,390,391,392,393,394,396,397,398,399,400,401,402,403,405,407,408,409,410,411,412,413,414,415,416,417,418,419]) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvZXh0ZXJuYWwvdGV4dC1lbmNvZGluZy9pbmRleC5qcyIsImxpYi9leHRlcm5hbC90ZXh0LWVuY29kaW5nL2xpYi9lbmNvZGluZy1pbmRleGVzLmpzIiwibGliL2V4dGVybmFsL3RleHQtZW5jb2RpbmcvbGliL2VuY29kaW5nLmpzIiwibGliL3YxL2RyaXZlci5qcyIsImxpYi92MS9lcnJvci5qcyIsImxpYi92MS9ncmFwaC10eXBlcy5qcyIsImxpYi92MS9pbmRleC5qcyIsImxpYi92MS9pbnRlZ2VyLmpzIiwibGliL3YxL2ludGVybmFsL2J1Zi5qcyIsImxpYi92MS9pbnRlcm5hbC9jaC1jb25maWcuanMiLCJsaWIvdjEvaW50ZXJuYWwvY2gtZHVtbXkuanMiLCJsaWIvdjEvaW50ZXJuYWwvY2gtbm9kZS5qcyIsImxpYi92MS9pbnRlcm5hbC9jaC13ZWJzb2NrZXQuanMiLCJsaWIvdjEvaW50ZXJuYWwvY2h1bmtpbmcuanMiLCJsaWIvdjEvaW50ZXJuYWwvY29ubmVjdGlvbi1ob2xkZXIuanMiLCJsaWIvdjEvaW50ZXJuYWwvY29ubmVjdGlvbi1wcm92aWRlcnMuanMiLCJsaWIvdjEvaW50ZXJuYWwvY29ubmVjdG9yLmpzIiwibGliL3YxL2ludGVybmFsL2ZlYXR1cmVzLmpzIiwibGliL3YxL2ludGVybmFsL2hvc3QtbmFtZS1yZXNvbHZlcnMuanMiLCJsaWIvdjEvaW50ZXJuYWwvcGFja3N0cmVhbS5qcyIsImxpYi92MS9pbnRlcm5hbC9wb29sLmpzIiwibGliL3YxL2ludGVybmFsL3JlZGlzY292ZXJ5LmpzIiwibGliL3YxL2ludGVybmFsL3JvdW5kLXJvYmluLWFycmF5LmpzIiwibGliL3YxL2ludGVybmFsL3JvdXRpbmctdGFibGUuanMiLCJsaWIvdjEvaW50ZXJuYWwvcm91dGluZy11dGlsLmpzIiwibGliL3YxL2ludGVybmFsL3NlcnZlci12ZXJzaW9uLmpzIiwibGliL3YxL2ludGVybmFsL3N0cmVhbS1vYnNlcnZlci5qcyIsImxpYi92MS9pbnRlcm5hbC90cmFuc2FjdGlvbi1leGVjdXRvci5qcyIsImxpYi92MS9pbnRlcm5hbC91dGY4LmpzIiwibGliL3YxL2ludGVybmFsL3V0aWwuanMiLCJsaWIvdjEvcmVjb3JkLmpzIiwibGliL3YxL3Jlc3VsdC1zdW1tYXJ5LmpzIiwibGliL3YxL3Jlc3VsdC5qcyIsImxpYi92MS9yb3V0aW5nLWRyaXZlci5qcyIsImxpYi92MS9zZXNzaW9uLmpzIiwibGliL3YxL3RyYW5zYWN0aW9uLmpzIiwibGliL3ZlcnNpb24uanMiLCJub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2FwaS5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2Jhc2UvYnVmZmVyLmpzIiwibm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYmFzZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2Jhc2Uvbm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2Jhc2UvcmVwb3J0ZXIuanMiLCJub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9jb25zdGFudHMvZGVyLmpzIiwibm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvY29uc3RhbnRzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvZGVjb2RlcnMvZGVyLmpzIiwibm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvZGVjb2RlcnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9kZWNvZGVycy9wZW0uanMiLCJub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9lbmNvZGVycy9kZXIuanMiLCJub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9lbmNvZGVycy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2VuY29kZXJzL3BlbS5qcyIsIm5vZGVfbW9kdWxlcy9hc3NlcnQvYXNzZXJ0LmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9hcnJheS9mcm9tLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9qc29uL3N0cmluZ2lmeS5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2Fzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2NyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvc2V0LmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9zeW1ib2wuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZ2V0LmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIm5vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYm4uanMvbGliL2JuLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3JhbmQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3Nlci1yZXNvbHZlL2VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL2Flcy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9hdXRoQ2lwaGVyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvZGVjcnlwdGVyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL2VuY3J5cHRlci5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9naGFzaC5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy9jYmMuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY2ZiLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2NmYjEuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY2ZiOC5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy9jdHIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvZWNiLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL29mYi5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9zdHJlYW1DaXBoZXIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1jaXBoZXIvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWRlcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWRlcy9tb2Rlcy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXJzYS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vYWxnb3MuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1zaWduL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1zaWduL2N1cnZlcy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vdmVyaWZ5LmpzIiwibm9kZV9tb2R1bGVzL2J1ZmZlci1zaGltcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9idWZmZXIteG9yL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaXBoZXItYmFzZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb25zdGFudHMtYnJvd3NlcmlmeS9jb25zdGFudHMuanNvbiIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vYXJyYXkvZnJvbS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vanNvbi9zdHJpbmdpZnkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9hc3NpZ24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9jcmVhdGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3Qva2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2UuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3NldC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9zeW1ib2wvaXRlcmF0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LW1ldGhvZHMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jbGFzc29mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2xsZWN0aW9uLXRvLWpzb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvbGxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY3R4LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZWZpbmVkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19leHBvcnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mb3Itb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2dsb2JhbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGFzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19odG1sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW52b2tlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZXRlY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19rZXlvZi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbGlicmFyeS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbWV0YS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdwby5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qtc2FwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19yZWRlZmluZS1hbGwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtcHJvdG8uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC1zcGVjaWVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zdHJpbmctYXQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Rhc2suanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWluZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbnRlZ2VyLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1leHQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5LmZyb20uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zZXQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zZXQudG8tanNvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtdXRpbC1pcy9saWIvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9jcmVhdGUtZWNkaC9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2NyZWF0ZS1oYXNoL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvY3JlYXRlLWhhc2gvaGVscGVycy5qcyIsIm5vZGVfbW9kdWxlcy9jcmVhdGUtaGFzaC9tZDUuanMiLCJub2RlX21vZHVsZXMvY3JlYXRlLWhtYWMvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tYnJvd3NlcmlmeS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kZXMuanMvbGliL2Rlcy5qcyIsIm5vZGVfbW9kdWxlcy9kZXMuanMvbGliL2Rlcy9jYmMuanMiLCJub2RlX21vZHVsZXMvZGVzLmpzL2xpYi9kZXMvY2lwaGVyLmpzIiwibm9kZV9tb2R1bGVzL2Rlcy5qcy9saWIvZGVzL2Rlcy5qcyIsIm5vZGVfbW9kdWxlcy9kZXMuanMvbGliL2Rlcy9lZGUuanMiLCJub2RlX21vZHVsZXMvZGVzLmpzL2xpYi9kZXMvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvZGlmZmllLWhlbGxtYW4vYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9kaWZmaWUtaGVsbG1hbi9saWIvZGguanMiLCJub2RlX21vZHVsZXMvZGlmZmllLWhlbGxtYW4vbGliL2dlbmVyYXRlUHJpbWUuanMiLCJub2RlX21vZHVsZXMvZGlmZmllLWhlbGxtYW4vbGliL3ByaW1lcy5qc29uIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvY3VydmUvYmFzZS5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvY3VydmUvZWR3YXJkcy5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvY3VydmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlL21vbnQuanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlL3Nob3J0LmpzIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9jdXJ2ZXMuanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9lYy9rZXkuanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VjL3NpZ25hdHVyZS5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvZWRkc2EvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VkZHNhL2tleS5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvZWRkc2Evc2lnbmF0dXJlLmpzIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9wcmVjb21wdXRlZC9zZWNwMjU2azEuanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL3BhY2thZ2UuanNvbiIsIm5vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIiwibm9kZV9tb2R1bGVzL2V2cF9ieXRlc3Rva2V5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9jb3B5LXN5bmMvY29weS1maWxlLXN5bmMuanMiLCJub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2NvcHktc3luYy9jb3B5LXN5bmMuanMiLCJub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2NvcHktc3luYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS9jb3B5LmpzIiwibm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9jb3B5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9jb3B5L25jcC5qcyIsIm5vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW1wdHkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9maWxlLmpzIiwibm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9saW5rLmpzIiwibm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvc3ltbGluay1wYXRocy5qcyIsIm5vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL3N5bWxpbmstdHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL3N5bWxpbmsuanMiLCJub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL2pzb25maWxlLmpzIiwibm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL291dHB1dC1qc29uLXN5bmMuanMiLCJub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2pzb24vb3V0cHV0LWpzb24uanMiLCJub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbWtkaXJzL21rZGlycy1zeW5jLmpzIiwibm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9ta2RpcnMvbWtkaXJzLmpzIiwibm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9ta2RpcnMvd2luMzIuanMiLCJub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21vdmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL291dHB1dC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvcmVtb3ZlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9yZW1vdmUvcmltcmFmLmpzIiwibm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi91dGlsL2Fzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvdXRpbC91dGltZXMuanMiLCJub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3dhbGstc3luYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvd2Fsay9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9mcy5qcyIsIm5vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9ncmFjZWZ1bC1mcy5qcyIsIm5vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9sZWdhY3ktc3RyZWFtcy5qcyIsIm5vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9wb2x5ZmlsbHMuanMiLCJub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC5qcyIsIm5vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL2NvbW1vbi5qcyIsIm5vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL2htYWMuanMiLCJub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9yaXBlbWQuanMiLCJub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEuanMiLCJub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcyIsIm5vZGVfbW9kdWxlcy9obWFjLWRyYmcvbGliL2htYWMtZHJiZy5qcyIsIm5vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2luZGV4b2YvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9pcy1idWZmZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qc29uZmlsZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9rbGF3L3NyYy9hc3NpZ24uanMiLCJub2RlX21vZHVsZXMva2xhdy9zcmMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbG9sZXgvc3JjL2xvbGV4LXNyYy5qcyIsIm5vZGVfbW9kdWxlcy9taWxsZXItcmFiaW4vbGliL21yLmpzIiwibm9kZV9tb2R1bGVzL21pbmltYWxpc3RpYy1hc3NlcnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWNyeXB0by11dGlscy9saWIvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvb3MtYnJvd3NlcmlmeS9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlLWFzbjEvYWVzaWQuanNvbiIsIm5vZGVfbW9kdWxlcy9wYXJzZS1hc24xL2FzbjEuanMiLCJub2RlX21vZHVsZXMvcGFyc2UtYXNuMS9jZXJ0aWZpY2F0ZS5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZS1hc24xL2ZpeFByb2MuanMiLCJub2RlX21vZHVsZXMvcGFyc2UtYXNuMS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcGJrZGYyL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcGJrZGYyL3ByZWNvbmRpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzLW5leHRpY2stYXJncy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcHVibGljLWVuY3J5cHQvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9wdWJsaWMtZW5jcnlwdC9tZ2YuanMiLCJub2RlX21vZHVsZXMvcHVibGljLWVuY3J5cHQvcHJpdmF0ZURlY3J5cHQuanMiLCJub2RlX21vZHVsZXMvcHVibGljLWVuY3J5cHQvcHVibGljRW5jcnlwdC5qcyIsIm5vZGVfbW9kdWxlcy9wdWJsaWMtZW5jcnlwdC93aXRoUHVibGljLmpzIiwibm9kZV9tb2R1bGVzL3B1YmxpYy1lbmNyeXB0L3hvci5qcyIsIm5vZGVfbW9kdWxlcy9yYW5kb21ieXRlcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9kdXBsZXguanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0LmpzIiwibm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9wYXNzdGhyb3VnaC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUuanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL3RyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vd3JpdGFibGUuanMiLCJub2RlX21vZHVsZXMvcmlwZW1kMTYwL2xpYi9yaXBlbWQxNjAuanMiLCJub2RlX21vZHVsZXMvc2hhLmpzL2hhc2guanMiLCJub2RlX21vZHVsZXMvc2hhLmpzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NoYS5qcy9zaGEuanMiLCJub2RlX21vZHVsZXMvc2hhLmpzL3NoYTEuanMiLCJub2RlX21vZHVsZXMvc2hhLmpzL3NoYTIyNC5qcyIsIm5vZGVfbW9kdWxlcy9zaGEuanMvc2hhMjU2LmpzIiwibm9kZV9tb2R1bGVzL3NoYS5qcy9zaGEzODQuanMiLCJub2RlX21vZHVsZXMvc2hhLmpzL3NoYTUxMi5qcyIsIm5vZGVfbW9kdWxlcy9zdHJlYW0tYnJvd3NlcmlmeS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zdHJpbmdfZGVjb2Rlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy91dGlsLWRlcHJlY2F0ZS9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3V0aWwvc3VwcG9ydC9pc0J1ZmZlckJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvdXRpbC91dGlsLmpzIiwibm9kZV9tb2R1bGVzL3ZtLWJyb3dzZXJpZnkvaW5kZXguanMiLCJzcmMvdjEvZHJpdmVyLmpzIiwic3JjL3YxL2Vycm9yLmpzIiwic3JjL3YxL2dyYXBoLXR5cGVzLmpzIiwic3JjL3YxL2luZGV4LmpzIiwic3JjL3YxL2ludGVnZXIuanMiLCJzcmMvdjEvaW50ZXJuYWwvYnVmLmpzIiwic3JjL3YxL2ludGVybmFsL2NoLWNvbmZpZy5qcyIsInNyYy92MS9pbnRlcm5hbC9jaC1kdW1teS5qcyIsInNyYy92MS9pbnRlcm5hbC9jaC1ub2RlLmpzIiwic3JjL3YxL2ludGVybmFsL2NoLXdlYnNvY2tldC5qcyIsInNyYy92MS9pbnRlcm5hbC9jaHVua2luZy5qcyIsInNyYy92MS9pbnRlcm5hbC9jb25uZWN0aW9uLWhvbGRlci5qcyIsInNyYy92MS9pbnRlcm5hbC9jb25uZWN0aW9uLXByb3ZpZGVycy5qcyIsInNyYy92MS9pbnRlcm5hbC9jb25uZWN0b3IuanMiLCJzcmMvdjEvaW50ZXJuYWwvZmVhdHVyZXMuanMiLCJzcmMvdjEvaW50ZXJuYWwvaG9zdC1uYW1lLXJlc29sdmVycy5qcyIsInNyYy92MS9pbnRlcm5hbC9wYWNrc3RyZWFtLmpzIiwic3JjL3YxL2ludGVybmFsL3Bvb2wuanMiLCJzcmMvdjEvaW50ZXJuYWwvcmVkaXNjb3ZlcnkuanMiLCJzcmMvdjEvaW50ZXJuYWwvcm91bmQtcm9iaW4tYXJyYXkuanMiLCJzcmMvdjEvaW50ZXJuYWwvcm91dGluZy10YWJsZS5qcyIsInNyYy92MS9pbnRlcm5hbC9yb3V0aW5nLXV0aWwuanMiLCJzcmMvdjEvaW50ZXJuYWwvc2VydmVyLXZlcnNpb24uanMiLCJzcmMvdjEvaW50ZXJuYWwvc3RyZWFtLW9ic2VydmVyLmpzIiwic3JjL3YxL2ludGVybmFsL3RyYW5zYWN0aW9uLWV4ZWN1dG9yLmpzIiwic3JjL3YxL2ludGVybmFsL3V0ZjguanMiLCJzcmMvdjEvaW50ZXJuYWwvdXRpbC5qcyIsInNyYy92MS9yZWNvcmQuanMiLCJzcmMvdjEvcmVzdWx0LXN1bW1hcnkuanMiLCJzcmMvdjEvcmVzdWx0LmpzIiwic3JjL3YxL3JvdXRpbmctZHJpdmVyLmpzIiwic3JjL3YxL3Nlc3Npb24uanMiLCJzcmMvdjEvdHJhbnNhY3Rpb24uanMiLCJzcmMvdmVyc2lvbi5qcyIsInRlc3QvaW50ZXJuYWwvYnVmLnRlc3QuanMiLCJ0ZXN0L2ludGVybmFsL2NoLWNvbmZpZy50ZXN0LmpzIiwidGVzdC9pbnRlcm5hbC9jaHVua2luZy50ZXN0LmpzIiwidGVzdC9pbnRlcm5hbC9jb25uZWN0aW9uLWhvbGRlci50ZXN0LmpzIiwidGVzdC9pbnRlcm5hbC9jb25uZWN0aW9uLXByb3ZpZGVycy50ZXN0LmpzIiwidGVzdC9pbnRlcm5hbC9jb25uZWN0b3IudGVzdC5qcyIsInRlc3QvaW50ZXJuYWwvZmFrZS1jb25uZWN0aW9uLmpzIiwidGVzdC9pbnRlcm5hbC9ob3N0LW5hbWUtcmVzb2x2ZXJzLnRlc3QuanMiLCJ0ZXN0L2ludGVybmFsL3BhY2tzdHJlYW0udGVzdC5qcyIsInRlc3QvaW50ZXJuYWwvcG9vbC50ZXN0LmpzIiwidGVzdC9pbnRlcm5hbC9yZWRpc2NvdmVyeS50ZXN0LmpzIiwidGVzdC9pbnRlcm5hbC9yb3VuZC1yb2Jpbi1hcnJheS50ZXN0LmpzIiwidGVzdC9pbnRlcm5hbC9yb3V0aW5nLXRhYmxlLnRlc3QuanMiLCJ0ZXN0L2ludGVybmFsL3JvdXRpbmctdXRpbC50ZXN0LmpzIiwidGVzdC9pbnRlcm5hbC9zZXJ2ZXItdmVyc2lvbi50ZXN0LmpzIiwidGVzdC9pbnRlcm5hbC9zaGFyZWQtbmVvNGouanMiLCJ0ZXN0L2ludGVybmFsL3N0cmVhbS1vYnNlcnZlci50ZXN0LmpzIiwidGVzdC9pbnRlcm5hbC90aW1lcnMtdXRpbC5qcyIsInRlc3QvaW50ZXJuYWwvdGxzLnRlc3QuanMiLCJ0ZXN0L2ludGVybmFsL3RyYW5zYWN0aW9uLWV4ZWN1dG9yLnRlc3QuanMiLCJ0ZXN0L2ludGVybmFsL3V0ZjgudGVzdC5qcyIsInRlc3QvaW50ZXJuYWwvdXRpbC50ZXN0LmpzIiwidGVzdC92MS9hdXRoLnRlc3QuanMiLCJ0ZXN0L3YxL2RyaXZlci50ZXN0LmpzIiwidGVzdC92MS9pbnRlZ2VyLnRlc3QuanMiLCJ0ZXN0L3YxL3BhY2thZ2UudGVzdC5qcyIsInRlc3QvdjEvcmVjb3JkLnRlc3QuanMiLCJ0ZXN0L3YxL3Jlc3VsdC50ZXN0LmpzIiwidGVzdC92MS9zZXNzaW9uLnRlc3QuanMiLCJ0ZXN0L3YxL3RyYW5zYWN0aW9uLnRlc3QuanMiLCJ0ZXN0L3YxL3R5cGVzLnRlc3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMW5CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcFVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMxZUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuMkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRUE7OztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2pMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDakdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDMUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN6RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDdkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDekxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM3dkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqTkE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBOztBQ0RBO0FBQ0E7O0FDREE7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTs7QUNBQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7O0FDRkE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7Ozs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU9BO0FBQ0E7QUFDQTtBQUNBOztBQ0hBOztBQ0FBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDM0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMxSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNwREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2hRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2WEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1d0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM5U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDeERBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN4T0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzdTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3RRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3RIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNySUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNocEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMxR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDM0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzNHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzlGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcENBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzU2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDckxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN0aUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBOzs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaEJBO0FBQ0E7O0FDREE7QUFDQTs7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDbE5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3BEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25RQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDMWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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U0FBUyxNQUFNLE1BQU4sQ0FBYSxrQkFBYixFQUFpQyxZQUFZLFNBQTdDLENBQWI7QUFDQSxRQUFJLFVBQVUsT0FBTyxPQUFQLEVBQWQ7O0FBRUEsWUFBUSxHQUFSLENBQVksbUJBQVosRUFBaUMsRUFBQyxLQUFLLEdBQU4sRUFBakMsRUFDRyxJQURILENBQ1MsVUFBVSxNQUFWLEVBQW1CO0FBQ3hCLGFBQVEsT0FBTyxPQUFQLENBQWUsQ0FBZixFQUFrQixHQUFsQixDQUFzQixHQUF0QixDQUFSLEVBQXFDLE9BQXJDLENBQThDLFlBQVksR0FBMUQ7QUFDQSxhQUFPLEtBQVA7QUFDQTtBQUNELEtBTEgsRUFLSyxLQUxMLENBS1csVUFBUyxHQUFULEVBQWM7QUFBRSxjQUFRLEdBQVIsQ0FBWSxHQUFaO0FBQW1CLEtBTDlDO0FBTUQsR0FWRDtBQVdEIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIi8vIFRoaXMgaXMgZnJlZSBhbmQgdW5lbmN1bWJlcmVkIHNvZnR3YXJlIHJlbGVhc2VkIGludG8gdGhlIHB1YmxpYyBkb21haW4uXG4vLyBTZWUgTElDRU5TRS5tZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxudmFyIGVuY29kaW5nID0gcmVxdWlyZShcIi4vbGliL2VuY29kaW5nLmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgVGV4dEVuY29kZXI6IGVuY29kaW5nLlRleHRFbmNvZGVyLFxuICBUZXh0RGVjb2RlcjogZW5jb2RpbmcuVGV4dERlY29kZXIsXG59O1xuIiwiKGZ1bmN0aW9uKGdsb2JhbCkge1xuICAndXNlIHN0cmljdCc7XG4gIGdsb2JhbFtcImVuY29kaW5nLWluZGV4ZXNcIl0gPSB7XG4gIFwiYmlnNVwiOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNzM5MiwxOTUwNiwxNzkyMywxNzgzMCwxNzc4NCwxNjAzNTksMTk4MzEsMTc4NDMsMTYyOTkzLDE5NjgyLDE2MzAxMywxNTI1MywxODIzMCwxODI0NCwxOTUyNywxOTUyMCwxNDgxNTksMTQ0OTE5LDE2MDU5NCwxNTkzNzEsMTU5OTU0LDE5NTQzLDE3Mjg4MSwxODI1NSwxNzg4MiwxOTU4OSwxNjI5MjQsMTk3MTksMTkxMDgsMTgwODEsMTU4NDk5LDI5MjIxLDE1NDE5NiwxMzc4MjcsMTQ2OTUwLDE0NzI5NywyNjE4OSwyMjI2NyxudWxsLDMyMTQ5LDIyODEzLDE2Njg0MSwxNTg2MCwzODcwOCwxNjI3OTksMjM1MTUsMTM4NTkwLDIzMjA0LDEzODYxLDE3MTY5NiwyMzI0OSwyMzQ3OSwyMzgwNCwyNjQ3OCwzNDE5NSwxNzAzMDksMjk3OTMsMjk4NTMsMTQ0NTMsMTM4NTc5LDE0NTA1NCwxNTU2ODEsMTYxMDgsMTUzODIyLDE1MDkzLDMxNDg0LDQwODU1LDE0NzgwOSwxNjYxNTcsMTQzODUwLDEzMzc3MCwxNDM5NjYsMTcxNjIsMzM5MjQsNDA4NTQsMzc5MzUsMTg3MzYsMzQzMjMsMjI2NzgsMzg3MzAsMzc0MDAsMzExODQsMzEyODIsMjYyMDgsMjcxNzcsMzQ5NzMsMjk3NzIsMzE2ODUsMjY0OTgsMzEyNzYsMjEwNzEsMzY5MzQsMTM1NDIsMjk2MzYsMTU1MDY1LDI5ODk0LDQwOTAzLDIyNDUxLDE4NzM1LDIxNTgwLDE2Njg5LDE0NTAzOCwyMjU1MiwzMTM0NiwxNjI2NjEsMzU3MjcsMTgwOTQsMTU5MzY4LDE2NzY5LDE1NTAzMywzMTY2MiwxNDA0NzYsNDA5MDQsMTQwNDgxLDE0MDQ4OSwxNDA0OTIsNDA5MDUsMzQwNTIsMTQ0ODI3LDE2NTY0LDQwOTA2LDE3NjMzLDE3NTYxNSwyNTI4MSwyODc4Miw0MDkwNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEyNzM2LDEyNzM3LDEyNzM4LDEyNzM5LDEyNzQwLDEzMTM0MCwxMjc0MSwxMzEyODEsMTMxMjc3LDEyNzQyLDEyNzQzLDEzMTI3NSwxMzkyNDAsMTI3NDQsMTMxMjc0LDEyNzQ1LDEyNzQ2LDEyNzQ3LDEyNzQ4LDEzMTM0MiwxMjc0OSwxMjc1MCwyNTYsMTkzLDQ2MSwxOTIsMjc0LDIwMSwyODIsMjAwLDMzMiwyMTEsNDY1LDIxMCxudWxsLDc4NzAsbnVsbCw3ODcyLDIwMiwyNTcsMjI1LDQ2MiwyMjQsNTkzLDI3NSwyMzMsMjgzLDIzMiwyOTksMjM3LDQ2NCwyMzYsMzMzLDI0Myw0NjYsMjQyLDM2MywyNTAsNDY4LDI0OSw0NzAsNDcyLDQ3NCw0NzYsMjUyLG51bGwsNzg3MSxudWxsLDc4NzMsMjM0LDYwOSw5MTc4LDkxNzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTcyOTY5LDEzNTQ5MyxudWxsLDI1ODY2LG51bGwsbnVsbCwyMDAyOSwyODM4MSw0MDI3MCwzNzM0MyxudWxsLG51bGwsMTYxNTg5LDI1NzQ1LDIwMjUwLDIwMjY0LDIwMzkyLDIwODIyLDIwODUyLDIwODkyLDIwOTY0LDIxMTUzLDIxMTYwLDIxMzA3LDIxMzI2LDIxNDU3LDIxNDY0LDIyMjQyLDIyNzY4LDIyNzg4LDIyNzkxLDIyODM0LDIyODM2LDIzMzk4LDIzNDU0LDIzNDU1LDIzNzA2LDI0MTk4LDI0NjM1LDI1OTkzLDI2NjIyLDI2NjI4LDI2NzI1LDI3OTgyLDI4ODYwLDMwMDA1LDMyNDIwLDMyNDI4LDMyNDQyLDMyNDU1LDMyNDYzLDMyNDc5LDMyNTE4LDMyNTY3LDMzNDAyLDMzNDg3LDMzNjQ3LDM1MjcwLDM1Nzc0LDM1ODEwLDM2NzEwLDM2NzExLDM2NzE4LDI5NzEzLDMxOTk2LDMyMjA1LDI2OTUwLDMxNDMzLDIxMDMxLG51bGwsbnVsbCxudWxsLG51bGwsMzcyNjAsMzA5MDQsMzcyMTQsMzI5NTYsbnVsbCwzNjEwNywzMzAxNCwxMzM2MDcsbnVsbCxudWxsLDMyOTI3LDQwNjQ3LDE5NjYxLDQwMzkzLDQwNDYwLDE5NTE4LDE3MTUxMCwxNTk3NTgsNDA0NTgsMTcyMzM5LDEzNzYxLG51bGwsMjgzMTQsMzMzNDIsMjk5NzcsbnVsbCwxODcwNSwzOTUzMiwzOTU2Nyw0MDg1NywzMTExMSwxNjQ5NzIsMTM4Njk4LDEzMjU2MCwxNDIwNTQsMjAwMDQsMjAwOTcsMjAwOTYsMjAxMDMsMjAxNTksMjAyMDMsMjAyNzksMTMzODgsMjA0MTMsMTU5NDQsMjA0ODMsMjA2MTYsMTM0MzcsMTM0NTksMTM0NzcsMjA4NzAsMjI3ODksMjA5NTUsMjA5ODgsMjA5OTcsMjAxMDUsMjExMTMsMjExMzYsMjEyODcsMTM3NjcsMjE0MTcsMTM2NDksMjE0MjQsMTM2NTEsMjE0NDIsMjE1MzksMTM2NzcsMTM2ODIsMTM5NTMsMjE2NTEsMjE2NjcsMjE2ODQsMjE2ODksMjE3MTIsMjE3NDMsMjE3ODQsMjE3OTUsMjE4MDAsMTM3MjAsMjE4MjMsMTM3MzMsMTM3NTksMjE5NzUsMTM3NjUsMTYzMjA0LDIxNzk3LG51bGwsMTM0MjEwLDEzNDQyMSwxNTE4NTEsMjE5MDQsMTQyNTM0LDE0ODI4LDEzMTkwNSwzNjQyMiwxNTA5NjgsMTY5MTg5LDE2NDY3LDE2NDAzMCwzMDU4NiwxNDIzOTIsMTQ5MDAsMTgzODksMTY0MTg5LDE1ODE5NCwxNTEwMTgsMjU4MjEsMTM0NTI0LDEzNTA5MiwxMzQzNTcsMTM1NDEyLDI1NzQxLDM2NDc4LDEzNDgwNiwxMzQxNTUsMTM1MDEyLDE0MjUwNSwxNjQ0MzgsMTQ4NjkxLG51bGwsMTM0NDcwLDE3MDU3MywxNjQwNzMsMTg0MjAsMTUxMjA3LDE0MjUzMCwzOTYwMiwxNDk1MSwxNjk0NjAsMTYzNjUsMTM1NzQsMTUyMjYzLDE2OTk0MCwxNjE5OTIsMTQyNjYwLDQwMzAyLDM4OTMzLG51bGwsMTczNjksMTU1ODEzLDI1NzgwLDIxNzMxLDE0MjY2OCwxNDIyODIsMTM1Mjg3LDE0ODQzLDEzNTI3OSwxNTc0MDIsMTU3NDYyLDE2MjIwOCwyNTgzNCwxNTE2MzQsMTM0MjExLDM2NDU2LDEzOTY4MSwxNjY3MzIsMTMyOTEzLG51bGwsMTg0NDMsMTMxNDk3LDE2Mzc4LDIyNjQzLDE0MjczMyxudWxsLDE0ODkzNiwxMzIzNDgsMTU1Nzk5LDEzNDk4OCwxMzQ1NTAsMjE4ODEsMTY1NzEsMTczMzgsbnVsbCwxOTEyNCwxNDE5MjYsMTM1MzI1LDMzMTk0LDM5MTU3LDEzNDU1NiwyNTQ2NSwxNDg0NiwxNDExNzMsMzYyODgsMjIxNzcsMjU3MjQsMTU5MzksbnVsbCwxNzM1NjksMTM0NjY1LDE0MjAzMSwxNDI1MzcsbnVsbCwxMzUzNjgsMTQ1ODU4LDE0NzM4LDE0ODU0LDE2NDUwNywxMzY4OCwxNTUyMDksMTM5NDYzLDIyMDk4LDEzNDk2MSwxNDI1MTQsMTY5NzYwLDEzNTAwLDI3NzA5LDE1MTA5OSxudWxsLG51bGwsMTYxMTQwLDE0Mjk4NywxMzk3ODQsMTczNjU5LDE2NzExNywxMzQ3NzgsMTM0MTk2LDE1NzcyNCwzMjY1OSwxMzUzNzUsMTQxMzE1LDE0MTYyNSwxMzgxOSwxNTIwMzUsMTM0Nzk2LDEzNTA1MywxMzQ4MjYsMTYyNzUsMTM0OTYwLDEzNDQ3MSwxMzU1MDMsMTM0NzMyLG51bGwsMTM0ODI3LDEzNDA1NywxMzQ0NzIsMTM1MzYwLDEzNTQ4NSwxNjM3NywxNDA5NTAsMjU2NTAsMTM1MDg1LDE0NDM3MiwxNjEzMzcsMTQyMjg2LDEzNDUyNiwxMzQ1MjcsMTQyNDE3LDE0MjQyMSwxNDg3MiwxMzQ4MDgsMTM1MzY3LDEzNDk1OCwxNzM2MTgsMTU4NTQ0LDE2NzEyMiwxNjczMjEsMTY3MTE0LDM4MzE0LDIxNzA4LDMzNDc2LDIxOTQ1LG51bGwsMTcxNzE1LDM5OTc0LDM5NjA2LDE2MTYzMCwxNDI4MzAsMjg5OTIsMzMxMzMsMzMwMDQsMjM1ODAsMTU3MDQyLDMzMDc2LDE0MjMxLDIxMzQzLDE2NDAyOSwzNzMwMiwxMzQ5MDYsMTM0NjcxLDEzNDc3NSwxMzQ5MDcsMTM3ODksMTUxMDE5LDEzODMzLDEzNDM1OCwyMjE5MSwxNDEyMzcsMTM1MzY5LDEzNDY3MiwxMzQ3NzYsMTM1Mjg4LDEzNTQ5NiwxNjQzNTksMTM2Mjc3LDEzNDc3NywxNTExMjAsMTQyNzU2LDIzMTI0LDEzNTE5NywxMzUxOTgsMTM1NDEzLDEzNTQxNCwyMjQyOCwxMzQ2NzMsMTYxNDI4LDE2NDU1NywxMzUwOTMsMTM0Nzc5LDE1MTkzNCwxNDA4MywxMzUwOTQsMTM1NTUyLDE1MjI4MCwxNzI3MzMsMTQ5OTc4LDEzNzI3NCwxNDc4MzEsMTY0NDc2LDIyNjgxLDIxMDk2LDEzODUwLDE1MzQwNSwzMTY2NiwyMzQwMCwxODQzMiwxOTI0NCw0MDc0MywxODkxOSwzOTk2NywzOTgyMSwxNTQ0ODQsMTQzNjc3LDIyMDExLDEzODEwLDIyMTUzLDIwMDA4LDIyNzg2LDEzODE3NywxOTQ2ODAsMzg3MzcsMTMxMjA2LDIwMDU5LDIwMTU1LDEzNjMwLDIzNTg3LDI0NDAxLDI0NTE2LDE0NTg2LDI1MTY0LDI1OTA5LDI3NTE0LDI3NzAxLDI3NzA2LDI4NzgwLDI5MjI3LDIwMDEyLDI5MzU3LDE0OTczNywzMjU5NCwzMTAzNSwzMTk5MywzMjU5NSwxNTYyNjYsMTM1MDUsbnVsbCwxNTY0OTEsMzI3NzAsMzI4OTYsMTU3MjAyLDE1ODAzMywyMTM0MSwzNDkxNiwzNTI2NSwxNjE5NzAsMzU3NDQsMzYxMjUsMzgwMjEsMzgyNjQsMzgyNzEsMzgzNzYsMTY3NDM5LDM4ODg2LDM5MDI5LDM5MTE4LDM5MTM0LDM5MjY3LDE3MDAwMCw0MDA2MCw0MDQ3OSw0MDY0NCwyNzUwMyw2Mzc1MSwyMDAyMywxMzEyMDcsMzg0MjksMjUxNDMsMzgwNTAsbnVsbCwyMDUzOSwyODE1OCwxNzExMjMsNDA4NzAsMTU4MTcsMzQ5NTksMTQ3NzkwLDI4NzkxLDIzNzk3LDE5MjMyLDE1MjAxMywxMzY1NywxNTQ5MjgsMjQ4NjYsMTY2NDUwLDM2Nzc1LDM3MzY2LDI5MDczLDI2MzkzLDI5NjI2LDE0NDAwMSwxNzIyOTUsMTU0OTksMTM3NjAwLDE5MjE2LDMwOTQ4LDI5Njk4LDIwOTEwLDE2NTY0NywxNjM5MywyNzIzNSwxNzI3MzAsMTY5MzEsMzQzMTksMTMzNzQzLDMxMjc0LDE3MDMxMSwxNjY2MzQsMzg3NDEsMjg3NDksMjEyODQsMTM5MzkwLDM3ODc2LDMwNDI1LDE2NjM3MSw0MDg3MSwzMDY4NSwyMDEzMSwyMDQ2NCwyMDY2OCwyMDAxNSwyMDI0Nyw0MDg3MiwyMTU1NiwzMjEzOSwyMjY3NCwyMjczNiwxMzg2NzgsMjQyMTAsMjQyMTcsMjQ1MTQsMTQxMDc0LDI1OTk1LDE0NDM3NywyNjkwNSwyNzIwMywxNDY1MzEsMjc5MDMsbnVsbCwyOTE4NCwxNDg3NDEsMjk1ODAsMTYwOTEsMTUwMDM1LDIzMzE3LDI5ODgxLDM1NzE1LDE1NDc4OCwxNTMyMzcsMzEzNzksMzE3MjQsMzE5MzksMzIzNjQsMzM1MjgsMzQxOTksNDA4NzMsMzQ5NjAsNDA4NzQsMzY1MzcsNDA4NzUsMzY4MTUsMzQxNDMsMzkzOTIsMzc0MDksNDA4NzYsMTY3MzUzLDEzNjI1NSwxNjQ5NywxNzA1OCwyMzA2NixudWxsLG51bGwsbnVsbCwzOTAxNiwyNjQ3NSwxNzAxNCwyMjMzMyxudWxsLDM0MjYyLDE0OTg4MywzMzQ3MSwxNjAwMTMsMTk1ODUsMTU5MDkyLDIzOTMxLDE1ODQ4NSwxNTk2NzgsNDA4NzcsNDA4NzgsMjM0NDYsNDA4NzksMjYzNDMsMzIzNDcsMjgyNDcsMzExNzgsMTU3NTIsMTc2MDMsMTQzOTU4LDE0MTIwNiwxNzMwNiwxNzcxOCxudWxsLDIzNzY1LDE0NjIwMiwzNTU3NywyMzY3MiwxNTYzNCwxNDQ3MjEsMjM5MjgsNDA4ODIsMjkwMTUsMTc3NTIsMTQ3NjkyLDEzODc4NywxOTU3NSwxNDcxMiwxMzM4NiwxMzE0OTIsMTU4Nzg1LDM1NTMyLDIwNDA0LDEzMTY0MSwyMjk3NSwzMzEzMiwzODk5OCwxNzAyMzQsMjQzNzksMTM0MDQ3LG51bGwsMTM5NzEzLDE2NjI1MywxNjY0MiwxODEwNywxNjgwNTcsMTYxMzUsNDA4ODMsMTcyNDY5LDE2NjMyLDE0Mjk0LDE4MTY3LDE1ODc5MCwxNjc2NCwxNjU1NTQsMTYwNzY3LDE3NzczLDE0NTQ4LDE1MjczMCwxNzc2MSwxNzY5MSwxOTg0OSwxOTU3OSwxOTgzMCwxNzg5OCwxNjMyOCwxNTAyODcsMTM5MjEsMTc2MzAsMTc1OTcsMTY4NzcsMjM4NzAsMjM4ODAsMjM4OTQsMTU4NjgsMTQzNTEsMjM5NzIsMjM5OTMsMTQzNjgsMTQzOTIsMjQxMzAsMjQyNTMsMjQzNTcsMjQ0NTEsMTQ2MDAsMTQ2MTIsMTQ2NTUsMTQ2NjksMjQ3OTEsMjQ4OTMsMjM3ODEsMTQ3MjksMjUwMTUsMjUwMTcsMjUwMzksMTQ3NzYsMjUxMzIsMjUyMzIsMjUzMTcsMjUzNjgsMTQ4NDAsMjIxOTMsMTQ4NTEsMjU1NzAsMjU1OTUsMjU2MDcsMjU2OTAsMTQ5MjMsMjU3OTIsMjM4MjksMjIwNDksNDA4NjMsMTQ5OTksMjU5OTAsMTUwMzcsMjYxMTEsMjYxOTUsMTUwOTAsMjYyNTgsMTUxMzgsMjYzOTAsMTUxNzAsMjY1MzIsMjY2MjQsMTUxOTIsMjY2OTgsMjY3NTYsMTUyMTgsMTUyMTcsMTUyMjcsMjY4ODksMjY5NDcsMjkyNzYsMjY5ODAsMjcwMzksMjcwMTMsMTUyOTIsMjcwOTQsMTUzMjUsMjcyMzcsMjcyNTIsMjcyNDksMjcyNjYsMTUzNDAsMjcyODksMTUzNDYsMjczMDcsMjczMTcsMjczNDgsMjczODIsMjc1MjEsMjc1ODUsMjc2MjYsMjc3NjUsMjc4MTgsMTU1NjMsMjc5MDYsMjc5MTAsMjc5NDIsMjgwMzMsMTU1OTksMjgwNjgsMjgwODEsMjgxODEsMjgxODQsMjgyMDEsMjgyOTQsMTY2MzM2LDI4MzQ3LDI4Mzg2LDI4Mzc4LDQwODMxLDI4MzkyLDI4MzkzLDI4NDUyLDI4NDY4LDE1Njg2LDE0NzI2NSwyODU0NSwyODYwNiwxNTcyMiwxNTczMywyOTExMSwyMzcwNSwxNTc1NCwyODcxNiwxNTc2MSwyODc1MiwyODc1NiwyODc4MywyODc5OSwyODgwOSwxMzE4NzcsMTczNDUsMTM4MDksMTM0ODcyLDE0NzE1OSwyMjQ2MiwxNTk0NDMsMjg5OTAsMTUzNTY4LDEzOTAyLDI3MDQyLDE2Njg4OSwyMzQxMiwzMTMwNSwxNTM4MjUsMTY5MTc3LDMxMzMzLDMxMzU3LDE1NDAyOCwzMTQxOSwzMTQwOCwzMTQyNiwzMTQyNywyOTEzNywxNTY4MTMsMTY4NDIsMzE0NTAsMzE0NTMsMzE0NjYsMTY4NzksMjE2ODIsMTU0NjI1LDMxNDk5LDMxNTczLDMxNTI5LDE1MjMzNCwxNTQ4NzgsMzE2NTAsMzE1OTksMzM2OTIsMTU0NTQ4LDE1ODg0NywzMTY5NiwzMzgyNSwzMTYzNCwzMTY3MiwxNTQ5MTIsMTU3ODksMTU0NzI1LDMzOTM4LDMxNzM4LDMxNzUwLDMxNzk3LDE1NDgxNywzMTgxMiwzMTg3NSwxNDk2MzQsMzE5MTAsMjYyMzcsMTQ4ODU2LDMxOTQ1LDMxOTQzLDMxOTc0LDMxODYwLDMxOTg3LDMxOTg5LDMxOTUwLDMyMzU5LDE3NjkzLDE1OTMwMCwzMjA5MywxNTk0NDYsMjk4MzcsMzIxMzcsMzIxNzEsMjg5ODEsMzIxNzksMzIyMTAsMTQ3NTQzLDE1NTY4OSwzMjIyOCwxNTYzNSwzMjI0NSwxMzcyMDksMzIyMjksMTY0NzE3LDMyMjg1LDE1NTkzNywxNTU5OTQsMzIzNjYsMzI0MDIsMTcxOTUsMzc5OTYsMzIyOTUsMzI1NzYsMzI1NzcsMzI1ODMsMzEwMzAsMTU2MzY4LDM5MzkzLDMyNjYzLDE1NjQ5NywzMjY3NSwxMzY4MDEsMTMxMTc2LDE3NzU2LDE0NTI1NCwxNzY2NywxNjQ2NjYsMzI3NjIsMTU2ODA5LDMyNzczLDMyNzc2LDMyNzk3LDMyODA4LDMyODE1LDE3MjE2NywxNTg5MTUsMzI4MjcsMzI4MjgsMzI4NjUsMTQxMDc2LDE4ODI1LDE1NzIyMiwxNDY5MTUsMTU3NDE2LDI2NDA1LDMyOTM1LDE2NjQ3MiwzMzAzMSwzMzA1MCwyMjcwNCwxNDEwNDYsMjc3NzUsMTU2ODI0LDE1MTQ4MCwyNTgzMSwxMzYzMzAsMzMzMDQsMTM3MzEwLDI3MjE5LDE1MDExNywxNTAxNjUsMTc1MzAsMzMzMjEsMTMzOTAxLDE1ODI5MCwxNDY4MTQsMjA0NzMsMTM2NDQ1LDM0MDE4LDMzNjM0LDE1ODQ3NCwxNDk5MjcsMTQ0Njg4LDEzNzA3NSwxNDY5MzYsMzM0NTAsMjY5MDcsMTk0OTY0LDE2ODU5LDM0MTIzLDMzNDg4LDMzNTYyLDEzNDY3OCwxMzcxNDAsMTQwMTcsMTQzNzQxLDE0NDczMCwzMzQwMywzMzUwNiwzMzU2MCwxNDcwODMsMTU5MTM5LDE1ODQ2OSwxNTg2MTUsMTQ0ODQ2LDE1ODA3LDMzNTY1LDIxOTk2LDMzNjY5LDE3Njc1LDE1OTE0MSwzMzcwOCwzMzcyOSwzMzc0NywxMzQzOCwxNTk0NDQsMjcyMjMsMzQxMzgsMTM0NjIsMTU5Mjk4LDE0MzA4NywzMzg4MCwxNTQ1OTYsMzM5MDUsMTU4MjcsMTc2MzYsMjczMDMsMzM4NjYsMTQ2NjEzLDMxMDY0LDMzOTYwLDE1ODYxNCwxNTkzNTEsMTU5Mjk5LDM0MDE0LDMzODA3LDMzNjgxLDE3NTY4LDMzOTM5LDM0MDIwLDE1NDc2OSwxNjk2MCwxNTQ4MTYsMTc3MzEsMzQxMDAsMjMyODIsMTU5Mzg1LDE3NzAzLDM0MTYzLDE3Njg2LDI2NTU5LDM0MzI2LDE2NTQxMywxNjU0MzUsMzQyNDEsMTU5ODgwLDM0MzA2LDEzNjU3OCwxNTk5NDksMTk0OTk0LDE3NzcwLDM0MzQ0LDEzODk2LDEzNzM3OCwyMTQ5NSwxNjA2NjYsMzQ0MzAsMzQ2NzMsMTcyMjgwLDM0Nzk4LDE0MjM3NSwzNDczNywzNDc3OCwzNDgzMSwyMjExMywzNDQxMiwyNjcxMCwxNzkzNSwzNDg4NSwzNDg4NiwxNjEyNDgsMTQ2ODczLDE2MTI1MiwzNDkxMCwzNDk3MiwxODAxMSwzNDk5NiwzNDk5NywyNTUzNywzNTAxMywzMDU4MywxNjE1NTEsMzUyMDcsMzUyMTAsMzUyMzgsMzUyNDEsMzUyMzksMzUyNjAsMTY2NDM3LDM1MzAzLDE2MjA4NCwxNjI0OTMsMzU0ODQsMzA2MTEsMzczNzQsMzU0NzIsMTYyMzkzLDMxNDY1LDE2MjYxOCwxNDczNDMsMTgxOTUsMTYyNjE2LDI5MDUyLDM1NTk2LDM1NjE1LDE1MjYyNCwxNTI5MzMsMzU2NDcsMzU2NjAsMzU2NjEsMzU0OTcsMTUwMTM4LDM1NzI4LDM1NzM5LDM1NTAzLDEzNjkyNywxNzk0MSwzNDg5NSwzNTk5NSwxNjMxNTYsMTYzMjE1LDE5NTAyOCwxNDExNywxNjMxNTUsMzYwNTQsMTYzMjI0LDE2MzI2MSwzNjExNCwzNjA5OSwxMzc0ODgsMzYwNTksMjg3NjQsMzYxMTMsMTUwNzI5LDE2MDgwLDM2MjE1LDM2MjY1LDE2Mzg0MiwxMzUxODgsMTQ5ODk4LDE1MjI4LDE2NDI4NCwxNjAwMTIsMzE0NjMsMzY1MjUsMzY1MzQsMzY1NDcsMzc1ODgsMzY2MzMsMzY2NTMsMTY0NzA5LDE2NDg4MiwzNjc3MywzNzYzNSwxNzI3MDMsMTMzNzEyLDM2Nzg3LDE4NzMwLDE2NjM2NiwxNjUxODEsMTQ2ODc1LDI0MzEyLDE0Mzk3MCwzNjg1NywxNzIwNTIsMTY1NTY0LDE2NTEyMSwxNDAwNjksMTQ3MjAsMTU5NDQ3LDM2OTE5LDE2NTE4MCwxNjI0OTQsMzY5NjEsMTY1MjI4LDE2NTM4NywzNzAzMiwxNjU2NTEsMzcwNjAsMTY1NjA2LDM3MDM4LDM3MTE3LDM3MjIzLDE1MDg4LDM3Mjg5LDM3MzE2LDMxOTE2LDE2NjE5NSwxMzg4ODksMzczOTAsMjc4MDcsMzc0NDEsMzc0NzQsMTUzMDE3LDM3NTYxLDE2NjU5OCwxNDY1ODcsMTY2NjY4LDE1MzA1MSwxMzQ0NDksMzc2NzYsMzc3MzksMTY2NjI1LDE2Njg5MSwyODgxNSwyMzIzNSwxNjY2MjYsMTY2NjI5LDE4Nzg5LDM3NDQ0LDE2Njg5MiwxNjY5NjksMTY2OTExLDM3NzQ3LDM3OTc5LDM2NTQwLDM4Mjc3LDM4MzEwLDM3OTI2LDM4MzA0LDI4NjYyLDE3MDgxLDE0MDkyMiwxNjU1OTIsMTM1ODA0LDE0Njk5MCwxODkxMSwyNzY3NiwzODUyMywzODU1MCwxNjc0OCwzODU2MywxNTk0NDUsMjUwNTAsMzg1ODIsMzA5NjUsMTY2NjI0LDM4NTg5LDIxNDUyLDE4ODQ5LDE1ODkwNCwxMzE3MDAsMTU2Njg4LDE2ODExMSwxNjgxNjUsMTUwMjI1LDEzNzQ5MywxNDQxMzgsMzg3MDUsMzQzNzAsMzg3MTAsMTg5NTksMTc3MjUsMTc3OTcsMTUwMjQ5LDI4Nzg5LDIzMzYxLDM4NjgzLDM4NzQ4LDE2ODQwNSwzODc0MywyMzM3MCwxNjg0MjcsMzg3NTEsMzc5MjUsMjA2ODgsMTQzNTQzLDE0MzU0OCwzODc5MywzODgxNSwzODgzMywzODg0NiwzODg0OCwzODg2NiwzODg4MCwxNTI2ODQsMzg4OTQsMjk3MjQsMTY5MDExLDM4OTExLDM4OTAxLDE2ODk4OSwxNjIxNzAsMTkxNTMsMzg5NjQsMzg5NjMsMzg5ODcsMzkwMTQsMTUxMTgsMTYwMTE3LDE1Njk3LDEzMjY1NiwxNDc4MDQsMTUzMzUwLDM5MTE0LDM5MDk1LDM5MTEyLDM5MTExLDE5MTk5LDE1OTAxNSwxMzY5MTUsMjE5MzYsMzkxMzcsMzkxNDIsMzkxNDgsMzc3NTIsMzkyMjUsMTUwMDU3LDE5MzE0LDE3MDA3MSwxNzAyNDUsMzk0MTMsMzk0MzYsMzk0ODMsMzk0NDAsMzk1MTIsMTUzMzgxLDE0MDIwLDE2ODExMywxNzA5NjUsMzk2NDgsMzk2NTAsMTcwNzU3LDM5NjY4LDE5NDcwLDM5NzAwLDM5NzI1LDE2NTM3NiwyMDUzMiwzOTczMiwxNTgxMjAsMTQ1MzEsMTQzNDg1LDM5NzYwLDM5NzQ0LDE3MTMyNiwyMzEwOSwxMzczMTUsMzk4MjIsMTQ4MDQzLDM5OTM4LDM5OTM1LDM5OTQ4LDE3MTYyNCw0MDQwNCwxNzE5NTksMTcyNDM0LDE3MjQ1OSwxNzIyNTcsMTcyMzIzLDE3MjUxMSw0MDMxOCw0MDMyMywxNzIzNDAsNDA0NjIsMjY3NjAsNDAzODgsMTM5NjExLDE3MjQzNSwxNzI1NzYsMTM3NTMxLDE3MjU5NSw0MDI0OSwxNzIyMTcsMTcyNzI0LDQwNTkyLDQwNTk3LDQwNjA2LDQwNjEwLDE5NzY0LDQwNjE4LDQwNjIzLDE0ODMyNCw0MDY0MSwxNTIwMCwxNDgyMSwxNTY0NSwyMDI3NCwxNDI3MCwxNjY5NTUsNDA3MDYsNDA3MTIsMTkzNTAsMzc5MjQsMTU5MTM4LDQwNzI3LDQwNzI2LDQwNzYxLDIyMTc1LDIyMTU0LDQwNzczLDM5MzUyLDE2ODA3NSwzODg5OCwzMzkxOSw0MDgwMiw0MDgwOSwzMTQ1Miw0MDg0NiwyOTIwNiwxOTM5MCwxNDk4NzcsMTQ5OTQ3LDI5MDQ3LDE1MDAwOCwxNDgyOTYsMTUwMDk3LDI5NTk4LDE2Njg3NCwxMzc0NjYsMzExMzUsMTY2MjcwLDE2NzQ3OCwzNzczNywzNzg3NSwxNjY0NjgsMzc2MTIsMzc3NjEsMzc4MzUsMTY2MjUyLDE0ODY2NSwyOTIwNywxNjEwNywzMDU3OCwzMTI5OSwyODg4MCwxNDg1OTUsMTQ4NDcyLDI5MDU0LDEzNzE5OSwyODgzNSwxMzc0MDYsMTQ0NzkzLDE2MDcxLDEzNzM0OSwxNTI2MjMsMTM3MjA4LDE0MTE0LDEzNjk1NSwxMzcyNzMsMTQwNDksMTM3MDc2LDEzNzQyNSwxNTU0NjcsMTQxMTUsMTM2ODk2LDIyMzYzLDE1MDA1MywxMzYxOTAsMTM1ODQ4LDEzNjEzNCwxMzYzNzQsMzQwNTEsMTQ1MDYyLDM0MDUxLDMzODc3LDE0OTkwOCwxNjAxMDEsMTQ2OTkzLDE1MjkyNCwxNDcxOTUsMTU5ODI2LDE3NjUyLDE0NTEzNCwxNzAzOTcsMTU5NTI2LDI2NjE3LDE0MTMxLDE1MzgxLDE1ODQ3LDIyNjM2LDEzNzUwNiwyNjY0MCwxNjQ3MSwxNDUyMTUsMTQ3NjgxLDE0NzU5NSwxNDc3MjcsMTU4NzUzLDIxNzA3LDIyMTc0LDE1NzM2MSwyMjE2MiwxMzUxMzUsMTM0MDU2LDEzNDY2OSwzNzgzMCwxNjY2NzUsMzc3ODgsMjAyMTYsMjA3NzksMTQzNjEsMTQ4NTM0LDIwMTU2LDEzMjE5NywxMzE5NjcsMjAyOTksMjAzNjIsMTUzMTY5LDIzMTQ0LDEzMTQ5OSwxMzIwNDMsMTQ3NDUsMTMxODUwLDEzMjExNiwxMzM2NSwyMDI2NSwxMzE3NzYsMTY3NjAzLDEzMTcwMSwzNTU0NiwxMzE1OTYsMjAxMjAsMjA2ODUsMjA3NDksMjAzODYsMjAyMjcsMTUwMDMwLDE0NzA4MiwyMDI5MCwyMDUyNiwyMDU4OCwyMDYwOSwyMDQyOCwyMDQ1MywyMDU2OCwyMDczMiwyMDgyNSwyMDgyNywyMDgyOSwyMDgzMCwyODI3OCwxNDQ3ODksMTQ3MDAxLDE0NzEzNSwyODAxOCwxMzczNDgsMTQ3MDgxLDIwOTA0LDIwOTMxLDEzMjU3NiwxNzYyOSwxMzIyNTksMTMyMjQyLDEzMjI0MSwzNjIxOCwxNjY1NTYsMTMyODc4LDIxMDgxLDIxMTU2LDEzMzIzNSwyMTIxNywzNzc0MiwxODA0MiwyOTA2OCwxNDgzNjQsMTM0MTc2LDE0OTkzMiwxMzUzOTYsMjcwODksMTM0Njg1LDI5ODE3LDE2MDk0LDI5ODQ5LDI5NzE2LDI5NzgyLDI5NTkyLDE5MzQyLDE1MDIwNCwxNDc1OTcsMjE0NTYsMTM3MDAsMjkxOTksMTQ3NjU3LDIxOTQwLDEzMTkwOSwyMTcwOSwxMzQwODYsMjIzMDEsMzc0NjksMzg2NDQsMzc3MzQsMjI0OTMsMjI0MTMsMjIzOTksMTM4ODYsMjI3MzEsMjMxOTMsMTY2NDcwLDEzNjk1NCwxMzcwNzEsMTM2OTc2LDIzMDg0LDIyOTY4LDM3NTE5LDIzMTY2LDIzMjQ3LDIzMDU4LDE1MzkyNiwxMzc3MTUsMTM3MzEzLDE0ODExNywxNDA2OSwyNzkwOSwyOTc2MywyMzA3MywxNTUyNjcsMjMxNjksMTY2ODcxLDEzMjExNSwzNzg1NiwyOTgzNiwxMzU5MzksMjg5MzMsMTg4MDIsMzc4OTYsMTY2Mzk1LDM3ODIxLDE0MjQwLDIzNTgyLDIzNzEwLDI0MTU4LDI0MTM2LDEzNzYyMiwxMzc1OTYsMTQ2MTU4LDI0MjY5LDIzMzc1LDEzNzQ3NSwxMzc0NzYsMTQwODEsMTM3Mzc2LDE0MDQ1LDEzNjk1OCwxNDAzNSwzMzA2NiwxNjY0NzEsMTM4NjgyLDE0NDQ5OCwxNjYzMTIsMjQzMzIsMjQzMzQsMTM3NTExLDEzNzEzMSwyMzE0NywxMzcwMTksMjMzNjQsMzQzMjQsMTYxMjc3LDM0OTEyLDI0NzAyLDE0MTQwOCwxNDA4NDMsMjQ1MzksMTYwNTYsMTQwNzE5LDE0MDczNCwxNjgwNzIsMTU5NjAzLDI1MDI0LDEzMTEzNCwxMzExNDIsMTQwODI3LDI0OTg1LDI0OTg0LDI0NjkzLDE0MjQ5MSwxNDI1OTksMTQ5MjA0LDE2ODI2OSwyNTcxMywxNDkwOTMsMTQyMTg2LDE0ODg5LDE0MjExNCwxNDQ0NjQsMTcwMjE4LDE0Mjk2OCwyNTM5OSwxNzMxNDcsMjU3ODIsMjUzOTMsMjU1NTMsMTQ5OTg3LDE0MjY5NSwyNTI1MiwxNDI0OTcsMjU2NTksMjU5NjMsMjY5OTQsMTUzNDgsMTQzNTAyLDE0NDA0NSwxNDk4OTcsMTQ0MDQzLDIxNzczLDE0NDA5NiwxMzc0MzMsMTY5MDIzLDI2MzE4LDE0NDAwOSwxNDM3OTUsMTUwNzIsMTY3ODQsMTUyOTY0LDE2NjY5MCwxNTI5NzUsMTM2OTU2LDE1MjkyMywxNTI2MTMsMzA5NTgsMTQzNjE5LDEzNzI1OCwxNDM5MjQsMTM0MTIsMTQzODg3LDE0Mzc0NiwxNDgxNjksMjYyNTQsMTU5MDEyLDI2MjE5LDE5MzQ3LDI2MTYwLDE2MTkwNCwxMzg3MzEsMjYyMTEsMTQ0MDgyLDE0NDA5NywyNjE0MiwxNTM3MTQsMTQ1NDUsMTQ1NDY2LDE0NTM0MCwxNTI1NywxNDUzMTQsMTQ0MzgyLDI5OTA0LDE1MjU0LDI2NTExLDE0OTAzNCwyNjgwNiwyNjY1NCwxNTMwMCwyNzMyNiwxNDQzNSwxNDUzNjUsMTQ4NjE1LDI3MTg3LDI3MjE4LDI3MzM3LDI3Mzk3LDEzNzQ5MCwyNTg3MywyNjc3NiwyNzIxMiwxNTMxOSwyNzI1OCwyNzQ3OSwxNDczOTIsMTQ2NTg2LDM3NzkyLDM3NjE4LDE2Njg5MCwxNjY2MDMsMzc1MTMsMTYzODcwLDE2NjM2NCwzNzk5MSwyODA2OSwyODQyNywxNDk5OTYsMjgwMDcsMTQ3MzI3LDE1NzU5LDI4MTY0LDE0NzUxNiwyMzEwMSwyODE3MCwyMjU5OSwyNzk0MCwzMDc4NiwyODk4NywxNDgyNTAsMTQ4MDg2LDI4OTEzLDI5MjY0LDI5MzE5LDI5MzMyLDE0OTM5MSwxNDkyODUsMjA4NTcsMTUwMTgwLDEzMjU4NywyOTgxOCwxNDcxOTIsMTQ0OTkxLDE1MDA5MCwxNDk3ODMsMTU1NjE3LDE2MTM0LDE2MDQ5LDE1MDIzOSwxNjY5NDcsMTQ3MjUzLDI0NzQzLDE2MTE1LDI5OTAwLDI5NzU2LDM3NzY3LDI5NzUxLDE3NTY3LDE1OTIxMCwxNzc0NSwzMDA4MywxNjIyNywxNTA3NDUsMTUwNzkwLDE2MjE2LDMwMDM3LDMwMzIzLDE3MzUxMCwxNTEyOSwyOTgwMCwxNjY2MDQsMTQ5OTMxLDE0OTkwMiwxNTA5OSwxNTgyMSwxNTAwOTQsMTYxMjcsMTQ5OTU3LDE0OTc0NywzNzM3MCwyMjMyMiwzNzY5OCwxNjY2MjcsMTM3MzE2LDIwNzAzLDE1MjA5NywxNTIwMzksMzA1ODQsMTQzOTIyLDMwNDc4LDMwNDc5LDMwNTg3LDE0OTE0MywxNDUyODEsMTQ5NDIsMTQ5NzQ0LDI5NzUyLDI5ODUxLDE2MDYzLDE1MDIwMiwxNTAyMTUsMTY1ODQsMTUwMTY2LDE1NjA3OCwzNzYzOSwxNTI5NjEsMzA3NTAsMzA4NjEsMzA4NTYsMzA5MzAsMjk2NDgsMzEwNjUsMTYxNjAxLDE1MzMxNSwxNjY1NCwzMTEzMSwzMzk0MiwzMTE0MSwyNzE4MSwxNDcxOTQsMzEyOTAsMzEyMjAsMTY3NTAsMTM2OTM0LDE2NjkwLDM3NDI5LDMxMjE3LDEzNDQ3NiwxNDk5MDAsMTMxNzM3LDE0Njg3NCwxMzcwNzAsMTM3MTksMjE4NjcsMTM2ODAsMTM5OTQsMTMxNTQwLDEzNDE1NywzMTQ1OCwyMzEyOSwxNDEwNDUsMTU0Mjg3LDE1NDI2OCwyMzA1MywxMzE2NzUsMzA5NjAsMjMwODIsMTU0NTY2LDMxNDg2LDE2ODg5LDMxODM3LDMxODUzLDE2OTEzLDE1NDU0NywxNTUzMjQsMTU1MzAyLDMxOTQ5LDE1MDAwOSwxMzcxMzYsMzE4ODYsMzE4NjgsMzE5MTgsMjczMTQsMzIyMjAsMzIyNjMsMzIyMTEsMzI1OTAsMTU2MjU3LDE1NTk5NiwxNjI2MzIsMzIxNTEsMTU1MjY2LDE3MDAyLDE1ODU4MSwxMzMzOTgsMjY1ODIsMTMxMTUwLDE0NDg0NywyMjQ2OCwxNTY2OTAsMTU2NjY0LDE0OTg1OCwzMjczMywzMTUyNywxMzMxNjQsMTU0MzQ1LDE1NDk0NywzMTUwMCwxNTUxNTAsMzkzOTgsMzQzNzMsMzk1MjMsMjcxNjQsMTQ0NDQ3LDE0ODE4LDE1MDAwNywxNTcxMDEsMzk0NTUsMTU3MDg4LDMzOTIwLDE2MDAzOSwxNTg5MjksMTc2NDIsMzMwNzksMTc0MTAsMzI5NjYsMzMwMzMsMzMwOTAsMTU3NjIwLDM5MTA3LDE1ODI3NCwzMzM3OCwzMzM4MSwxNTgyODksMzM4NzUsMTU5MTQzLDM0MzIwLDE2MDI4MywyMzE3NCwxNjc2NywxMzcyODAsMjMzMzksMTM3Mzc3LDIzMjY4LDEzNzQzMiwzNDQ2NCwxOTUwMDQsMTQ2ODMxLDM0ODYxLDE2MDgwMiwyMzA0MiwzNDkyNiwyMDI5MywzNDk1MSwzNTAwNywzNTA0NiwzNTE3MywzNTE0OSwxNTMyMTksMzUxNTYsMTYxNjY5LDE2MTY2OCwxNjY5MDEsMTY2ODczLDE2NjgxMiwxNjYzOTMsMTYwNDUsMzM5NTUsMTgxNjUsMTgxMjcsMTQzMjIsMzUzODksMzUzNTYsMTY5MDMyLDI0Mzk3LDM3NDE5LDE0ODEwMCwyNjA2OCwyODk2OSwyODg2OCwxMzcyODUsNDAzMDEsMzU5OTksMzYwNzMsMTYzMjkyLDIyOTM4LDMwNjU5LDIzMDI0LDE3MjYyLDE0MDM2LDM2Mzk0LDM2NTE5LDE1MDUzNywzNjY1NiwzNjY4MiwxNzE0MCwyNzczNiwyODYwMywxNDAwNjUsMTg1ODcsMjg1MzcsMjgyOTksMTM3MTc4LDM5OTEzLDE0MDA1LDE0OTgwNywzNzA1MSwzNzAxNSwyMTg3MywxODY5NCwzNzMwNywzNzg5MiwxNjY0NzUsMTY0ODIsMTY2NjUyLDM3OTI3LDE2Njk0MSwxNjY5NzEsMzQwMjEsMzUzNzEsMzgyOTcsMzgzMTEsMzgyOTUsMzgyOTQsMTY3MjIwLDI5NzY1LDE2MDY2LDE0OTc1OSwxNTAwODIsMTQ4NDU4LDE2MTAzLDE0MzkwOSwzODU0MywxNjc2NTUsMTY3NTI2LDE2NzUyNSwxNjA3NiwxNDk5OTcsMTUwMTM2LDE0NzQzOCwyOTcxNCwyOTgwMywxNjEyNCwzODcyMSwxNjgxMTIsMjY2OTUsMTg5NzMsMTY4MDgzLDE1MzU2NywzODc0OSwzNzczNiwxNjYyODEsMTY2OTUwLDE2NjcwMywxNTY2MDYsMzc1NjIsMjMzMTMsMzU2ODksMTg3NDgsMjk2ODksMTQ3OTk1LDM4ODExLDM4NzY5LDM5MjI0LDEzNDk1MCwyNDAwMSwxNjY4NTMsMTUwMTk0LDM4OTQzLDE2OTE3OCwzNzYyMiwxNjk0MzEsMzczNDksMTc2MDAsMTY2NzM2LDE1MDExOSwxNjY3NTYsMzkxMzIsMTY2NDY5LDE2MTI4LDM3NDE4LDE4NzI1LDMzODEyLDM5MjI3LDM5MjQ1LDE2MjU2NiwxNTg2OSwzOTMyMywxOTMxMSwzOTMzOCwzOTUxNiwxNjY3NTcsMTUzODAwLDI3Mjc5LDM5NDU3LDIzMjk0LDM5NDcxLDE3MDIyNSwxOTM0NCwxNzAzMTIsMzkzNTYsMTkzODksMTkzNTEsMzc3NTcsMjI2NDIsMTM1OTM4LDIyNTYyLDE0OTk0NCwxMzY0MjQsMzA3ODgsMTQxMDg3LDE0Njg3MiwyNjgyMSwxNTc0MSwzNzk3NiwxNDYzMSwyNDkxMiwxNDExODUsMTQxNjc1LDI0ODM5LDQwMDE1LDQwMDE5LDQwMDU5LDM5OTg5LDM5OTUyLDM5ODA3LDM5ODg3LDE3MTU2NSwzOTgzOSwxNzI1MzMsMTcyMjg2LDQwMjI1LDE5NjMwLDE0NzcxNiw0MDQ3MiwxOTYzMiw0MDIwNCwxNzI0NjgsMTcyMjY5LDE3MjI3NSwxNzAyODcsNDAzNTcsMzM5ODEsMTU5MjUwLDE1OTcxMSwxNTg1OTQsMzQzMDAsMTc3MTUsMTU5MTQwLDE1OTM2NCwxNTkyMTYsMzM4MjQsMzQyODYsMTU5MjMyLDE0NTM2NywxNTU3NDgsMzEyMDIsMTQ0Nzk2LDE0NDk2MCwxODczMywxNDk5ODIsMTU3MTQsMzc4NTEsMzc1NjYsMzc3MDQsMTMxNzc1LDMwOTA1LDM3NDk1LDM3OTY1LDIwNDUyLDEzMzc2LDM2OTY0LDE1MjkyNSwzMDc4MSwzMDgwNCwzMDkwMiwzMDc5NSwxMzcwNDcsMTQzODE3LDE0OTgyNSwxMzk3OCwyMDMzOCwyODYzNCwyODYzMywyODcwMiwyODcwMiwyMTUyNCwxNDc4OTMsMjI0NTksMjI3NzEsMjI0MTAsNDAyMTQsMjI0ODcsMjg5ODAsMTM0ODcsMTQ3ODg0LDI5MTYzLDE1ODc4NCwxNTE0NDcsMjMzMzYsMTM3MTQxLDE2NjQ3MywyNDg0NCwyMzI0NiwyMzA1MSwxNzA4NCwxNDg2MTYsMTQxMjQsMTkzMjMsMTY2Mzk2LDM3ODE5LDM3ODE2LDEzNzQzMCwxMzQ5NDEsMzM5MDYsMTU4OTEyLDEzNjIxMSwxNDgyMTgsMTQyMzc0LDE0ODQxNywyMjkzMiwxNDY4NzEsMTU3NTA1LDMyMTY4LDE1NTk5NSwxNTU4MTIsMTQ5OTQ1LDE0OTg5OSwxNjYzOTQsMzc2MDUsMjk2NjYsMTYxMDUsMjk4NzYsMTY2NzU1LDEzNzM3NSwxNjA5NywxNTAxOTUsMjczNTIsMjk2ODMsMjk2OTEsMTYwODYsMTUwMDc4LDE1MDE2NCwxMzcxNzcsMTUwMTE4LDEzMjAwNywxMzYyMjgsMTQ5OTg5LDI5NzY4LDE0OTc4MiwyODgzNywxNDk4NzgsMzc1MDgsMjk2NzAsMzc3MjcsMTMyMzUwLDM3NjgxLDE2NjYwNiwxNjY0MjIsMzc3NjYsMTY2ODg3LDE1MzA0NSwxODc0MSwxNjY1MzAsMjkwMzUsMTQ5ODI3LDEzNDM5OSwyMjE4MCwxMzI2MzQsMTM0MTIzLDEzNDMyOCwyMTc2MiwzMTE3MiwxMzcyMTAsMzIyNTQsMTM2ODk4LDE1MDA5NiwxMzcyOTgsMTc3MTAsMzc4ODksMTQwOTAsMTY2NTkyLDE0OTkzMywyMjk2MCwxMzc0MDcsMTM3MzQ3LDE2MDkwMCwyMzIwMSwxNDA1MCwxNDY3NzksMTQwMDAsMzc0NzEsMjMxNjEsMTY2NTI5LDEzNzMxNCwzNzc0OCwxNTU2NSwxMzM4MTIsMTkwOTQsMTQ3MzAsMjA3MjQsMTU3MjEsMTU2OTIsMTM2MDkyLDI5MDQ1LDE3MTQ3LDE2NDM3NiwyODE3NSwxNjgxNjQsMTc2NDMsMjc5OTEsMTYzNDA3LDI4Nzc1LDI3ODIzLDE1NTc0LDE0NzQzNywxNDY5ODksMjgxNjIsMjg0MjgsMTU3MjcsMTMyMDg1LDMwMDMzLDE0MDEyLDEzNTEyLDE4MDQ4LDE2MDkwLDE4NTQ1LDIyOTgwLDM3NDg2LDE4NzUwLDM2NjczLDE2Njk0MCwxNTg2NTYsMjI1NDYsMjI0NzIsMTQwMzgsMTM2Mjc0LDI4OTI2LDE0ODMyMiwxNTAxMjksMTQzMzMxLDEzNTg1NiwxNDAyMjEsMjY4MDksMjY5ODMsMTM2MDg4LDE0NDYxMywxNjI4MDQsMTQ1MTE5LDE2NjUzMSwxNDUzNjYsMTQ0Mzc4LDE1MDY4NywyNzE2MiwxNDUwNjksMTU4OTAzLDMzODU0LDE3NjMxLDE3NjE0LDE1OTAxNCwxNTkwNTcsMTU4ODUwLDE1OTcxMCwyODQzOSwxNjAwMDksMzM1OTcsMTM3MDE4LDMzNzczLDE1ODg0OCwxNTk4MjcsMTM3MTc5LDIyOTIxLDIzMTcwLDEzNzEzOSwyMzEzNywyMzE1MywxMzc0NzcsMTQ3OTY0LDE0MTI1LDIzMDIzLDEzNzAyMCwxNDAyMywyOTA3MCwzNzc3NiwyNjI2NiwxNDgxMzMsMjMxNTAsMjMwODMsMTQ4MTE1LDI3MTc5LDE0NzE5MywxNjE1OTAsMTQ4NTcxLDE0ODE3MCwyODk1NywxNDgwNTcsMTY2MzY5LDIwNDAwLDE1OTAxNiwyMzc0NiwxNDg2ODYsMTYzNDA1LDE0ODQxMywyNzE0OCwxNDgwNTQsMTM1OTQwLDI4ODM4LDI4OTc5LDE0ODQ1NywxNTc4MSwyNzg3MSwxOTQ1OTcsMTUwMDk1LDMyMzU3LDIzMDE5LDIzODU1LDE1ODU5LDI0NDEyLDE1MDEwOSwxMzcxODMsMzIxNjQsMzM4MzAsMjE2MzcsMTQ2MTcwLDE0NDEyOCwxMzE2MDQsMjIzOTgsMTMzMzMzLDEzMjYzMywxNjM1NywxMzkxNjYsMTcyNzI2LDI4Njc1LDE2ODI4MywyMzkyMCwyOTU4MywzMTk1NSwxNjY0ODksMTY4OTkyLDIwNDI0LDMyNzQzLDI5Mzg5LDI5NDU2LDE2MjU0OCwyOTQ5NiwyOTQ5NywxNTMzMzQsMjk1MDUsMjk1MTIsMTYwNDEsMTYyNTg0LDM2OTcyLDI5MTczLDE0OTc0NiwyOTY2NSwzMzI3MCwxNjA3NCwzMDQ3NiwxNjA4MSwyNzgxMCwyMjI2OSwyOTcyMSwyOTcyNiwyOTcyNywxNjA5OCwxNjExMiwxNjExNiwxNjEyMiwyOTkwNywxNjE0MiwxNjIxMSwzMDAxOCwzMDA2MSwzMDA2NiwzMDA5MywxNjI1MiwzMDE1MiwzMDE3MiwxNjMyMCwzMDI4NSwxNjM0MywzMDMyNCwxNjM0OCwzMDMzMCwxNTEzODgsMjkwNjQsMjIwNTEsMzUyMDAsMjI2MzMsMTY0MTMsMzA1MzEsMTY0NDEsMjY0NjUsMTY0NTMsMTM3ODcsMzA2MTYsMTY0OTAsMTY0OTUsMjM2NDYsMzA2NTQsMzA2NjcsMjI3NzAsMzA3NDQsMjg4NTcsMzA3NDgsMTY1NTIsMzA3NzcsMzA3OTEsMzA4MDEsMzA4MjIsMzM4NjQsMTUyODg1LDMxMDI3LDI2NjI3LDMxMDI2LDE2NjQzLDE2NjQ5LDMxMTIxLDMxMTI5LDM2Nzk1LDMxMjM4LDM2Nzk2LDE2NzQzLDMxMzc3LDE2ODE4LDMxNDIwLDMzNDAxLDE2ODM2LDMxNDM5LDMxNDUxLDE2ODQ3LDIwMDAxLDMxNTg2LDMxNTk2LDMxNjExLDMxNzYyLDMxNzcxLDE2OTkyLDE3MDE4LDMxODY3LDMxOTAwLDE3MDM2LDMxOTI4LDE3MDQ0LDMxOTgxLDM2NzU1LDI4ODY0LDEzNDM1MSwzMjIwNywzMjIxMiwzMjIwOCwzMjI1MywzMjY4NiwzMjY5MiwyOTM0MywxNzMwMywzMjgwMCwzMjgwNSwzMTU0NSwzMjgxNCwzMjgxNywzMjg1MiwxNTgyMCwyMjQ1MiwyODgzMiwzMjk1MSwzMzAwMSwxNzM4OSwzMzAzNiwyOTQ4MiwzMzAzOCwzMzA0MiwzMDA0OCwzMzA0NCwxNzQwOSwxNTE2MSwzMzExMCwzMzExMywzMzExNCwxNzQyNywyMjU4NiwzMzE0OCwzMzE1NiwxNzQ0NSwzMzE3MSwxNzQ1MywzMzE4OSwyMjUxMSwzMzIxNywzMzI1MiwzMzM2NCwxNzU1MSwzMzQ0NiwzMzM5OCwzMzQ4MiwzMzQ5NiwzMzUzNSwxNzU4NCwzMzYyMywzODUwNSwyNzAxOCwzMzc5NywyODkxNywzMzg5MiwyNDgwMywzMzkyOCwxNzY2OCwzMzk4MiwzNDAxNywzNDA0MCwzNDA2NCwzNDEwNCwzNDEzMCwxNzcyMywzNDE1OSwzNDE2MCwzNDI3MiwxNzc4MywzNDQxOCwzNDQ1MCwzNDQ4MiwzNDU0MywzODQ2OSwzNDY5OSwxNzkyNiwxNzk0MywzNDk5MCwzNTA3MSwzNTEwOCwzNTE0MywzNTIxNywxNjIxNTEsMzUzNjksMzUzODQsMzU0NzYsMzU1MDgsMzU5MjEsMzYwNTIsMzYwODIsMzYxMjQsMTgzMjgsMjI2MjMsMzYyOTEsMTg0MTMsMjAyMDYsMzY0MTAsMjE5NzYsMjIzNTYsMzY0NjUsMjIwMDUsMzY1MjgsMTg0ODcsMzY1NTgsMzY1NzgsMzY1ODAsMzY1ODksMzY1OTQsMzY3OTEsMzY4MDEsMzY4MTAsMzY4MTIsMzY5MTUsMzkzNjQsMTg2MDUsMzkxMzYsMzczOTUsMTg3MTgsMzc0MTYsMzc0NjQsMzc0ODMsMzc1NTMsMzc1NTAsMzc1NjcsMzc2MDMsMzc2MTEsMzc2MTksMzc2MjAsMzc2MjksMzc2OTksMzc3NjQsMzc4MDUsMTg3NTcsMTg3NjksNDA2MzksMzc5MTEsMjEyNDksMzc5MTcsMzc5MzMsMzc5NTAsMTg3OTQsMzc5NzIsMzgwMDksMzgxODksMzgzMDYsMTg4NTUsMzgzODgsMzg0NTEsMTg5MTcsMjY1MjgsMTg5ODAsMzg3MjAsMTg5OTcsMzg4MzQsMzg4NTAsMjIxMDAsMTkxNzIsMjQ4MDgsMzkwOTcsMTkyMjUsMzkxNTMsMjI1OTYsMzkxODIsMzkxOTMsMjA5MTYsMzkxOTYsMzkyMjMsMzkyMzQsMzkyNjEsMzkyNjYsMTkzMTIsMzkzNjUsMTkzNTcsMzk0ODQsMzk2OTUsMzEzNjMsMzk3ODUsMzk4MDksMzk5MDEsMzk5MjEsMzk5MjQsMTk1NjUsMzk5NjgsMTQxOTEsMTM4MTc4LDQwMjY1LDM5OTk0LDQwNzAyLDIyMDk2LDQwMzM5LDQwMzgxLDQwMzg0LDQwNDQ0LDM4MTM0LDM2NzkwLDQwNTcxLDQwNjIwLDQwNjI1LDQwNjM3LDQwNjQ2LDM4MTA4LDQwNjc0LDQwNjg5LDQwNjk2LDMxNDMyLDQwNzcyLDEzMTIyMCwxMzE3NjcsMTMyMDAwLDI2OTA2LDM4MDgzLDIyOTU2LDEzMjMxMSwyMjU5MiwzODA4MSwxNDI2NSwxMzI1NjUsMTMyNjI5LDEzMjcyNiwxMzY4OTAsMjIzNTksMjkwNDMsMTMzODI2LDEzMzgzNywxMzQwNzksMjE2MTAsMTk0NjE5LDEzNDA5MSwyMTY2MiwxMzQxMzksMTM0MjAzLDEzNDIyNywxMzQyNDUsMTM0MjY4LDI0ODA3LDEzNDI4NSwyMjEzOCwxMzQzMjUsMTM0MzY1LDEzNDM4MSwxMzQ1MTEsMTM0NTc4LDEzNDYwMCwyNjk2NSwzOTk4MywzNDcyNSwxMzQ2NjAsMTM0NjcwLDEzNDg3MSwxMzUwNTYsMTM0OTU3LDEzNDc3MSwyMzU4NCwxMzUxMDAsMjQwNzUsMTM1MjYwLDEzNTI0NywxMzUyODYsMjYzOTgsMTM1MjkxLDEzNTMwNCwxMzUzMTgsMTM4OTUsMTM1MzU5LDEzNTM3OSwxMzU0NzEsMTM1NDgzLDIxMzQ4LDMzOTY1LDEzNTkwNywxMzYwNTMsMTM1OTkwLDM1NzEzLDEzNjU2NywxMzY3MjksMTM3MTU1LDEzNzE1OSwyMDA4OCwyODg1OSwxMzcyNjEsMTM3NTc4LDEzNzc3MywxMzc3OTcsMTM4MjgyLDEzODM1MiwxMzg0MTIsMTM4OTUyLDI1MjgzLDEzODk2NSwxMzkwMjksMjkwODAsMjY3MDksMTM5MzMzLDI3MTEzLDE0MDI0LDEzOTkwMCwxNDAyNDcsMTQwMjgyLDE0MTA5OCwxNDE0MjUsMTQxNjQ3LDMzNTMzLDE0MTY3MSwxNDE3MTUsMTQyMDM3LDM1MjM3LDE0MjA1NiwzNjc2OCwxNDIwOTQsMzg4NDAsMTQyMTQzLDM4OTgzLDM5NjEzLDE0MjQxMixudWxsLDE0MjQ3MiwxNDI1MTksMTU0NjAwLDE0MjYwMCwxNDI2MTAsMTQyNzc1LDE0Mjc0MSwxNDI5MTQsMTQzMjIwLDE0MzMwOCwxNDM0MTEsMTQzNDYyLDE0NDE1OSwxNDQzNTAsMjQ0OTcsMjYxODQsMjYzMDMsMTYyNDI1LDE0NDc0MywxNDQ4ODMsMjkxODUsMTQ5OTQ2LDMwNjc5LDE0NDkyMiwxNDUxNzQsMzIzOTEsMTMxOTEwLDIyNzA5LDI2MzgyLDI2OTA0LDE0NjA4NywxNjEzNjcsMTU1NjE4LDE0Njk2MSwxNDcxMjksMTYxMjc4LDEzOTQxOCwxODY0MCwxOTEyOCwxNDc3MzcsMTY2NTU0LDE0ODIwNiwxNDgyMzcsMTQ3NTE1LDE0ODI3NiwxNDgzNzQsMTUwMDg1LDEzMjU1NCwyMDk0NiwxMzI2MjUsMjI5NDMsMTM4OTIwLDE1Mjk0LDE0NjY4NywxNDg0ODQsMTQ4Njk0LDIyNDA4LDE0OTEwOCwxNDc0NywxNDkyOTUsMTY1MzUyLDE3MDQ0MSwxNDE3OCwxMzk3MTUsMzU2NzgsMTY2NzM0LDM5MzgyLDE0OTUyMiwxNDk3NTUsMTUwMDM3LDI5MTkzLDE1MDIwOCwxMzQyNjQsMjI4ODUsMTUxMjA1LDE1MTQzMCwxMzI5ODUsMzY1NzAsMTUxNTk2LDIxMTM1LDIyMzM1LDI5MDQxLDE1MjIxNywxNTI2MDEsMTQ3Mjc0LDE1MDE4MywyMTk0OCwxNTI2NDYsMTUyNjg2LDE1ODU0NiwzNzMzMiwxMzQyNywxNTI4OTUsMTYxMzMwLDE1MjkyNiwxODIwMCwxNTI5MzAsMTUyOTM0LDE1MzU0MywxNDk4MjMsMTUzNjkzLDIwNTgyLDEzNTYzLDE0NDMzMiwyNDc5OCwxNTM4NTksMTgzMDAsMTY2MjE2LDE1NDI4NiwxNTQ1MDUsMTU0NjMwLDEzODY0MCwyMjQzMywyOTAwOSwyODU5OCwxNTU5MDYsMTYyODM0LDM2OTUwLDE1NjA4MiwxNTE0NTAsMzU2ODIsMTU2Njc0LDE1Njc0NiwyMzg5OSwxNTg3MTEsMzY2NjIsMTU2ODA0LDEzNzUwMCwzNTU2MiwxNTAwMDYsMTU2ODA4LDE0NzQzOSwxNTY5NDYsMTkzOTIsMTU3MTE5LDE1NzM2NSwxNDEwODMsMzc5ODksMTUzNTY5LDI0OTgxLDIzMDc5LDE5NDc2NSwyMDQxMSwyMjIwMSwxNDg3NjksMTU3NDM2LDIwMDc0LDE0OTgxMiwzODQ4NiwyODA0NywxNTg5MDksMTM4NDgsMzUxOTEsMTU3NTkzLDE1NzgwNiwxNTY2ODksMTU3NzkwLDI5MTUxLDE1Nzg5NSwzMTU1NCwxNjgxMjgsMTMzNjQ5LDE1Nzk5MCwzNzEyNCwxNTgwMDksMzEzMDEsNDA0MzIsMTU4MjAyLDM5NDYyLDE1ODI1MywxMzkxOSwxNTY3NzcsMTMxMTA1LDMxMTA3LDE1ODI2MCwxNTg1NTUsMjM4NTIsMTQ0NjY1LDMzNzQzLDE1ODYyMSwxODEyOCwxNTg4ODQsMzAwMTEsMzQ5MTcsMTU5MTUwLDIyNzEwLDE0MTA4LDE0MDY4NSwxNTk4MTksMTYwMjA1LDE1NDQ0LDE2MDM4NCwxNjAzODksMzc1MDUsMTM5NjQyLDE2MDM5NSwzNzY4MCwxNjA0ODYsMTQ5OTY4LDI3NzA1LDM4MDQ3LDE2MDg0OCwxMzQ5MDQsMzQ4NTUsMzUwNjEsMTQxNjA2LDE2NDk3OSwxMzcxMzcsMjgzNDQsMTUwMDU4LDEzNzI0OCwxNDc1NiwxNDAwOSwyMzU2OCwzMTIwMywxNzcyNywyNjI5NCwxNzExODEsMTcwMTQ4LDM1MTM5LDE2MTc0MCwxNjE4ODAsMjIyMzAsMTY2MDcsMTM2NzE0LDE0NzUzLDE0NTE5OSwxNjQwNzIsMTM2MTMzLDI5MTAxLDMzNjM4LDE2MjI2OSwxNjgzNjAsMjMxNDMsMTk2MzksMTU5OTE5LDE2NjMxNSwxNjIzMDEsMTYyMzE0LDE2MjU3MSwxNjMxNzQsMTQ3ODM0LDMxNTU1LDMxMTAyLDE2Mzg0OSwyODU5NywxNzI3NjcsMjcxMzksMTY0NjMyLDIxNDEwLDE1OTIzOSwzNzgyMywyNjY3OCwzODc0OSwxNjQyMDcsMTYzODc1LDE1ODEzMywxMzYxNzMsMTQzOTE5LDE2MzkxMiwyMzk0MSwxNjY5NjAsMTYzOTcxLDIyMjkzLDM4OTQ3LDE2NjIxNywyMzk3OSwxNDk4OTYsMjYwNDYsMjcwOTMsMjE0NTgsMTUwMTgxLDE0NzMyOSwxNTM3NywyNjQyMiwxNjM5ODQsMTY0MDg0LDE2NDE0MiwxMzkxNjksMTY0MTc1LDE2NDIzMywxNjQyNzEsMTY0Mzc4LDE2NDYxNCwxNjQ2NTUsMTY0NzQ2LDEzNzcwLDE2NDk2OCwxNjU1NDYsMTg2ODIsMjU1NzQsMTY2MjMwLDMwNzI4LDM3NDYxLDE2NjMyOCwxNzM5NCwxNjYzNzUsMTczNzUsMTY2Mzc2LDE2NjcyNiwxNjY4NjgsMjMwMzIsMTY2OTIxLDM2NjE5LDE2Nzg3NywxNjgxNzIsMzE1NjksMTY4MjA4LDE2ODI1MiwxNTg2MywxNjgyODYsMTUwMjE4LDM2ODE2LDI5MzI3LDIyMTU1LDE2OTE5MSwxNjk0NDksMTY5MzkyLDE2OTQwMCwxNjk3NzgsMTcwMTkzLDE3MDMxMywxNzAzNDYsMTcwNDM1LDE3MDUzNiwxNzA3NjYsMTcxMzU0LDE3MTQxOSwzMjQxNSwxNzE3NjgsMTcxODExLDE5NjIwLDM4MjE1LDE3MjY5MSwyOTA5MCwxNzI3OTksMTk4NTcsMzY4ODIsMTczNTE1LDE5ODY4LDEzNDMwMCwzNjc5OCwyMTk1MywzNjc5NCwxNDA0NjQsMzY3OTMsMTUwMTYzLDE3NjczLDMyMzgzLDI4NTAyLDI3MzEzLDIwMjAyLDEzNTQwLDE2NjcwMCwxNjE5NDksMTQxMzgsMzY0ODAsMTM3MjA1LDE2Mzg3NiwxNjY3NjQsMTY2ODA5LDE2MjM2NiwxNTczNTksMTU4NTEsMTYxMzY1LDE0NjYxNSwxNTMxNDEsMTUzOTQyLDIwMTIyLDE1NTI2NSwxNTYyNDgsMjIyMDcsMTM0NzY1LDM2MzY2LDIzNDA1LDE0NzA4MCwxNTA2ODYsMjU1NjYsMjUyOTYsMTM3MjA2LDEzNzMzOSwyNTkwNCwyMjA2MSwxNTQ2OTgsMjE1MzAsMTUyMzM3LDE1ODE0LDE3MTQxNiwxOTU4MSwyMjA1MCwyMjA0NiwzMjU4NSwxNTUzNTIsMjI5MDEsMTQ2NzUyLDM0NjcyLDE5OTk2LDEzNTE0NiwxMzQ0NzMsMTQ1MDgyLDMzMDQ3LDQwMjg2LDM2MTIwLDMwMjY3LDQwMDA1LDMwMjg2LDMwNjQ5LDM3NzAxLDIxNTU0LDMzMDk2LDMzNTI3LDIyMDUzLDMzMDc0LDMzODE2LDMyOTU3LDIxOTk0LDMxMDc0LDIyMDgzLDIxNTI2LDEzNDgxMywxMzc3NCwyMjAyMSwyMjAwMSwyNjM1MywxNjQ1NzgsMTM4NjksMzAwMDQsMjIwMDAsMjE5NDYsMjE2NTUsMjE4NzQsMTM0MjA5LDEzNDI5NCwyNDI3MiwxNTE4ODAsMTM0Nzc0LDE0MjQzNCwxMzQ4MTgsNDA2MTksMzIwOTAsMjE5ODIsMTM1Mjg1LDI1MjQ1LDM4NzY1LDIxNjUyLDM2MDQ1LDI5MTc0LDM3MjM4LDI1NTk2LDI1NTI5LDI1NTk4LDIxODY1LDE0MjE0Nyw0MDA1MCwxNDMwMjcsMjA4OTAsMTM1MzUsMTM0NTY3LDIwOTAzLDIxNTgxLDIxNzkwLDIxNzc5LDMwMzEwLDM2Mzk3LDE1NzgzNCwzMDEyOSwzMjk1MCwzNDgyMCwzNDY5NCwzNTAxNSwzMzIwNiwzMzgyMCwxMzUzNjEsMTc2NDQsMjk0NDQsMTQ5MjU0LDIzNDQwLDMzNTQ3LDE1Nzg0MywyMjEzOSwxNDEwNDQsMTYzMTE5LDE0Nzg3NSwxNjMxODcsMTU5NDQwLDE2MDQzOCwzNzIzMiwxMzU2NDEsMzczODQsMTQ2Njg0LDE3MzczNywxMzQ4MjgsMTM0OTA1LDI5Mjg2LDEzODQwMiwxODI1NCwxNTE0OTAsMTYzODMzLDEzNTE0NywxNjYzNCw0MDAyOSwyNTg4NywxNDI3NTIsMTg2NzUsMTQ5NDcyLDE3MTM4OCwxMzUxNDgsMTM0NjY2LDI0Njc0LDE2MTE4NywxMzUxNDksbnVsbCwxNTU3MjAsMTM1NTU5LDI5MDkxLDMyMzk4LDQwMjcyLDE5OTk0LDE5OTcyLDEzNjg3LDIzMzA5LDI3ODI2LDIxMzUxLDEzOTk2LDE0ODEyLDIxMzczLDEzOTg5LDE0OTAxNiwyMjY4MiwxNTAzODIsMzMzMjUsMjE1NzksMjI0NDIsMTU0MjYxLDEzMzQ5NyxudWxsLDE0OTMwLDE0MDM4OSwyOTU1NiwxNzE2OTIsMTk3MjEsMzk5MTcsMTQ2Njg2LDE3MTgyNCwxOTU0NywxNTE0NjUsMTY5Mzc0LDE3MTk5OCwzMzg4NCwxNDY4NzAsMTYwNDM0LDE1NzYxOSwxNDUxODQsMjUzOTAsMzIwMzcsMTQ3MTkxLDE0Njk4OCwxNDg5MCwzNjg3MiwyMTE5NiwxNTk4OCwxMzk0NiwxNzg5NywxMzIyMzgsMzAyNzIsMjMyODAsMTM0ODM4LDMwODQyLDE2MzYzMCwyMjY5NSwxNjU3NSwyMjE0MCwzOTgxOSwyMzkyNCwzMDI5MiwxNzMxMDgsNDA1ODEsMTk2ODEsMzAyMDEsMTQzMzEsMjQ4NTcsMTQzNTc4LDE0ODQ2NixudWxsLDIyMTA5LDEzNTg0OSwyMjQzOSwxNDk4NTksMTcxNTI2LDIxMDQ0LDE1OTkxOCwxMzc0MSwyNzcyMiw0MDMxNiwzMTgzMCwzOTczNywyMjQ5NCwxMzcwNjgsMjM2MzUsMjU4MTEsMTY5MTY4LDE1NjQ2OSwxNjAxMDAsMzQ0NzcsMTM0NDQwLDE1OTAxMCwxNTAyNDIsMTM0NTEzLG51bGwsMjA5OTAsMTM5MDIzLDIzOTUwLDM4NjU5LDEzODcwNSw0MDU3NywzNjk0MCwzMTUxOSwzOTY4MiwyMzc2MSwzMTY1MSwyNTE5MiwyNTM5NywzOTY3OSwzMTY5NSwzOTcyMiwzMTg3MCwzOTcyNiwzMTgxMCwzMTg3OCwzOTk1NywzMTc0MCwzOTY4OSw0MDcyNywzOTk2MywxNDk4MjIsNDA3OTQsMjE4NzUsMjM0OTEsMjA0NzcsNDA2MDAsMjA0NjYsMjEwODgsMTU4NzgsMjEyMDEsMjIzNzUsMjA1NjYsMjI5NjcsMjQwODIsMzg4NTYsNDAzNjMsMzY3MDAsMjE2MDksMzg4MzYsMzkyMzIsMzg4NDIsMjEyOTIsMjQ4ODAsMjY5MjQsMjE0NjYsMzk5NDYsNDAxOTQsMTk1MTUsMzg0NjUsMjcwMDgsMjA2NDYsMzAwMjIsMTM3MDY5LDM5Mzg2LDIxMTA3LG51bGwsMzcyMDksMzg1MjksMzcyMTIsbnVsbCwzNzIwMSwxNjc1NzUsMjU0NzEsMTU5MDExLDI3MzM4LDIyMDMzLDM3MjYyLDMwMDc0LDI1MjIxLDEzMjA5MiwyOTUxOSwzMTg1NiwxNTQ2NTcsMTQ2Njg1LG51bGwsMTQ5Nzg1LDMwNDIyLDM5ODM3LDIwMDEwLDEzNDM1NiwzMzcyNiwzNDg4MixudWxsLDIzNjI2LDI3MDcyLDIwNzE3LDIyMzk0LDIxMDIzLDI0MDUzLDIwMTc0LDI3Njk3LDEzMTU3MCwyMDI4MSwyMTY2MCwyMTcyMiwyMTE0NiwzNjIyNiwxMzgyMiwyNDMzMiwxMzgxMSxudWxsLDI3NDc0LDM3MjQ0LDQwODY5LDM5ODMxLDM4OTU4LDM5MDkyLDM5NjEwLDQwNjE2LDQwNTgwLDI5MDUwLDMxNTA4LG51bGwsMjc2NDIsMzQ4NDAsMzI2MzIsbnVsbCwyMjA0OCwxNzM2NDIsMzY0NzEsNDA3ODcsbnVsbCwzNjMwOCwzNjQzMSw0MDQ3NiwzNjM1MywyNTIxOCwxNjQ3MzMsMzYzOTIsMzY0NjksMzE0NDMsMTUwMTM1LDMxMjk0LDMwOTM2LDI3ODgyLDM1NDMxLDMwMjE1LDE2NjQ5MCw0MDc0MiwyNzg1NCwzNDc3NCwzMDE0NywxNzI3MjIsMzA4MDMsMTk0NjI0LDM2MTA4LDI5NDEwLDI5NTUzLDM1NjI5LDI5NDQyLDI5OTM3LDM2MDc1LDE1MDIwMywzNDM1MSwyNDUwNiwzNDk3NiwxNzU5MSxudWxsLDEzNzI3NSwxNTkyMzcsbnVsbCwzNTQ1NCwxNDA1NzEsbnVsbCwyNDgyOSwzMDMxMSwzOTYzOSw0MDI2MCwzNzc0MiwzOTgyMywzNDgwNSxudWxsLDM0ODMxLDM2MDg3LDI5NDg0LDM4Njg5LDM5ODU2LDEzNzgyLDI5MzYyLDE5NDYzLDMxODI1LDM5MjQyLDE1NTk5MywyNDkyMSwxOTQ2MCw0MDU5OCwyNDk1NyxudWxsLDIyMzY3LDI0OTQzLDI1MjU0LDI1MTQ1LDI1Mjk0LDE0OTQwLDI1MDU4LDIxNDE4LDE0NDM3MywyNTQ0NCwyNjYyNiwxMzc3OCwyMzg5NSwxNjY4NTAsMzY4MjYsMTY3NDgxLG51bGwsMjA2OTcsMTM4NTY2LDMwOTgyLDIxMjk4LDM4NDU2LDEzNDk3MSwxNjQ4NSxudWxsLDMwNzE4LG51bGwsMzE5MzgsMTU1NDE4LDMxOTYyLDMxMjc3LDMyODcwLDMyODY3LDMyMDc3LDI5OTU3LDI5OTM4LDM1MjIwLDMzMzA2LDI2MzgwLDMyODY2LDE2MDkwMiwzMjg1OSwyOTkzNiwzMzAyNywzMDUwMCwzNTIwOSwxNTc2NDQsMzAwMzUsMTU5NDQxLDM0NzI5LDM0NzY2LDMzMjI0LDM0NzAwLDM1NDAxLDM2MDEzLDM1NjUxLDMwNTA3LDI5OTQ0LDM0MDEwLDEzODc3LDI3MDU4LDM2MjYyLG51bGwsMzUyNDEsMjk4MDAsMjgwODksMzQ3NTMsMTQ3NDczLDI5OTI3LDE1ODM1LDI5MDQ2LDI0NzQwLDI0OTg4LDE1NTY5LDI5MDI2LDI0Njk1LG51bGwsMzI2MjUsMTY2NzAxLDI5MjY0LDI0ODA5LDE5MzI2LDIxMDI0LDE1Mzg0LDE0NjYzMSwxNTUzNTEsMTYxMzY2LDE1Mjg4MSwxMzc1NDAsMTM1OTM0LDE3MDI0MywxNTkxOTYsMTU5OTE3LDIzNzQ1LDE1NjA3NywxNjY0MTUsMTQ1MDE1LDEzMTMxMCwxNTc3NjYsMTUxMzEwLDE3NzYyLDIzMzI3LDE1NjQ5Miw0MDc4NCw0MDYxNCwxNTYyNjcsMTIyODgsNjUyOTIsMTIyODksMTIyOTAsNjUyOTQsODIzMSw2NTMwNyw2NTMwNiw2NTMxMSw2NTI4MSw2NTA3Miw4MjMwLDgyMjksNjUxMDQsNjUxMDUsNjUxMDYsMTgzLDY1MTA4LDY1MTA5LDY1MTEwLDY1MTExLDY1MzcyLDgyMTEsNjUwNzMsODIxMiw2NTA3NSw5NTg4LDY1MDc2LDY1MTAzLDY1Mjg4LDY1Mjg5LDY1MDc3LDY1MDc4LDY1MzcxLDY1MzczLDY1MDc5LDY1MDgwLDEyMzA4LDEyMzA5LDY1MDgxLDY1MDgyLDEyMzA0LDEyMzA1LDY1MDgzLDY1MDg0LDEyMjk4LDEyMjk5LDY1MDg1LDY1MDg2LDEyMjk2LDEyMjk3LDY1MDg3LDY1MDg4LDEyMzAwLDEyMzAxLDY1MDg5LDY1MDkwLDEyMzAyLDEyMzAzLDY1MDkxLDY1MDkyLDY1MTEzLDY1MTE0LDY1MTE1LDY1MTE2LDY1MTE3LDY1MTE4LDgyMTYsODIxNyw4MjIwLDgyMjEsMTIzMTcsMTIzMTgsODI0NSw4MjQyLDY1MjgzLDY1Mjg2LDY1MjkwLDgyNTEsMTY3LDEyMjkxLDk2NzUsOTY3OSw5NjUxLDk2NTAsOTY3OCw5NzM0LDk3MzMsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjYxLDk2NjAsMTI5NjMsODQ1MywxNzUsNjU1MDcsNjUzNDMsNzE3LDY1MDk3LDY1MDk4LDY1MTAxLDY1MTAyLDY1MDk5LDY1MTAwLDY1MTE5LDY1MTIwLDY1MTIxLDY1MjkxLDY1MjkzLDIxNSwyNDcsMTc3LDg3MzAsNjUzMDgsNjUzMTAsNjUzMDksODgwNiw4ODA3LDg4MDAsODczNCw4Nzg2LDg4MDEsNjUxMjIsNjUxMjMsNjUxMjQsNjUxMjUsNjUxMjYsNjUzNzQsODc0NSw4NzQ2LDg4NjksODczNiw4NzM1LDg4OTUsMTMyNjYsMTMyNjUsODc0Nyw4NzUwLDg3NTcsODc1Niw5NzkyLDk3OTQsODg1Myw4ODU3LDg1OTMsODU5NSw4NTkyLDg1OTQsODU5OCw4NTk5LDg2MDEsODYwMCw4NzQxLDg3MzksNjUyOTUsNjUzNDAsODcyNSw2NTEyOCw2NTI4NCw2NTUwOSwxMjMwNiw2NTUwNCw2NTUwNSw2NTI4NSw2NTMxMiw4NDUxLDg0NTcsNjUxMjksNjUxMzAsNjUxMzEsMTMyNjksMTMyMTIsMTMyMTMsMTMyMTQsMTMyNjIsMTMyMTcsMTMxOTgsMTMxOTksMTMyNTIsMTc2LDIwODI1LDIwODI3LDIwODMwLDIwODI5LDIwODMzLDIwODM1LDIxOTkxLDI5OTI5LDMxOTUwLDk2MDEsOTYwMiw5NjAzLDk2MDQsOTYwNSw5NjA2LDk2MDcsOTYwOCw5NjE1LDk2MTQsOTYxMyw5NjEyLDk2MTEsOTYxMCw5NjA5LDk1MzIsOTUyNCw5NTE2LDk1MDgsOTUwMCw5NjIwLDk0NzIsOTQ3NCw5NjIxLDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTU4MSw5NTgyLDk1ODQsOTU4Myw5NTUyLDk1NjYsOTU3OCw5NTY5LDk2OTgsOTY5OSw5NzAxLDk3MDAsOTU4NSw5NTg2LDk1ODcsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1MywxMjMyMSwxMjMyMiwxMjMyMywxMjMyNCwxMjMyNSwxMjMyNiwxMjMyNywxMjMyOCwxMjMyOSwyMTMxMywyMTMxNiwyMTMxNyw2NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSwxMjU0OSwxMjU1MCwxMjU1MSwxMjU1MiwxMjU1MywxMjU1NCwxMjU1NSwxMjU1NiwxMjU1NywxMjU1OCwxMjU1OSwxMjU2MCwxMjU2MSwxMjU2MiwxMjU2MywxMjU2NCwxMjU2NSwxMjU2NiwxMjU2NywxMjU2OCwxMjU2OSwxMjU3MCwxMjU3MSwxMjU3MiwxMjU3MywxMjU3NCwxMjU3NSwxMjU3NiwxMjU3NywxMjU3OCwxMjU3OSwxMjU4MCwxMjU4MSwxMjU4MiwxMjU4MywxMjU4NCwxMjU4NSw3MjksNzEzLDcxNCw3MTEsNzE1LDkyMTYsOTIxNyw5MjE4LDkyMTksOTIyMCw5MjIxLDkyMjIsOTIyMyw5MjI0LDkyMjUsOTIyNiw5MjI3LDkyMjgsOTIyOSw5MjMwLDkyMzEsOTIzMiw5MjMzLDkyMzQsOTIzNSw5MjM2LDkyMzcsOTIzOCw5MjM5LDkyNDAsOTI0MSw5MjQyLDkyNDMsOTI0NCw5MjQ1LDkyNDYsOTI0Nyw5MjQ5LDgzNjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE5OTY4LDIwMDU3LDE5OTY5LDE5OTcxLDIwMDM1LDIwMDYxLDIwMTAyLDIwMTA4LDIwMTU0LDIwNzk5LDIwODM3LDIwODQzLDIwOTYwLDIwOTkyLDIwOTkzLDIxMTQ3LDIxMjY5LDIxMzEzLDIxMzQwLDIxNDQ4LDE5OTc3LDE5OTc5LDE5OTc2LDE5OTc4LDIwMDExLDIwMDI0LDIwOTYxLDIwMDM3LDIwMDQwLDIwMDYzLDIwMDYyLDIwMTEwLDIwMTI5LDIwODAwLDIwOTk1LDIxMjQyLDIxMzE1LDIxNDQ5LDIxNDc1LDIyMzAzLDIyNzYzLDIyODA1LDIyODIzLDIyODk5LDIzMzc2LDIzMzc3LDIzMzc5LDIzNTQ0LDIzNTY3LDIzNTg2LDIzNjA4LDIzNjY1LDI0MDI5LDI0MDM3LDI0MDQ5LDI0MDUwLDI0MDUxLDI0MDYyLDI0MTc4LDI0MzE4LDI0MzMxLDI0MzM5LDI1MTY1LDE5OTg1LDE5OTg0LDE5OTgxLDIwMDEzLDIwMDE2LDIwMDI1LDIwMDQzLDIzNjA5LDIwMTA0LDIwMTEzLDIwMTE3LDIwMTE0LDIwMTE2LDIwMTMwLDIwMTYxLDIwMTYwLDIwMTYzLDIwMTY2LDIwMTY3LDIwMTczLDIwMTcwLDIwMTcxLDIwMTY0LDIwODAzLDIwODAxLDIwODM5LDIwODQ1LDIwODQ2LDIwODQ0LDIwODg3LDIwOTgyLDIwOTk4LDIwOTk5LDIxMDAwLDIxMjQzLDIxMjQ2LDIxMjQ3LDIxMjcwLDIxMzA1LDIxMzIwLDIxMzE5LDIxMzE3LDIxMzQyLDIxMzgwLDIxNDUxLDIxNDUwLDIxNDUzLDIyNzY0LDIyODI1LDIyODI3LDIyODI2LDIyODI5LDIzMzgwLDIzNTY5LDIzNTg4LDIzNjEwLDIzNjYzLDI0MDUyLDI0MTg3LDI0MzE5LDI0MzQwLDI0MzQxLDI0NTE1LDI1MDk2LDI1MTQyLDI1MTYzLDI1MTY2LDI1OTAzLDI1OTkxLDI2MDA3LDI2MDIwLDI2MDQxLDI2MDg1LDI2MzUyLDI2Mzc2LDI2NDA4LDI3NDI0LDI3NDkwLDI3NTEzLDI3NTk1LDI3NjA0LDI3NjExLDI3NjYzLDI3NzAwLDI4Nzc5LDI5MjI2LDI5MjM4LDI5MjQzLDI5MjU1LDI5MjczLDI5Mjc1LDI5MzU2LDI5NTc5LDE5OTkzLDE5OTkwLDE5OTg5LDE5OTg4LDE5OTkyLDIwMDI3LDIwMDQ1LDIwMDQ3LDIwMDQ2LDIwMTk3LDIwMTg0LDIwMTgwLDIwMTgxLDIwMTgyLDIwMTgzLDIwMTk1LDIwMTk2LDIwMTg1LDIwMTkwLDIwODA1LDIwODA0LDIwODczLDIwODc0LDIwOTA4LDIwOTg1LDIwOTg2LDIwOTg0LDIxMDAyLDIxMTUyLDIxMTUxLDIxMjUzLDIxMjU0LDIxMjcxLDIxMjc3LDIwMTkxLDIxMzIyLDIxMzIxLDIxMzQ1LDIxMzQ0LDIxMzU5LDIxMzU4LDIxNDM1LDIxNDg3LDIxNDc2LDIxNDkxLDIxNDg0LDIxNDg2LDIxNDgxLDIxNDgwLDIxNTAwLDIxNDk2LDIxNDkzLDIxNDgzLDIxNDc4LDIxNDgyLDIxNDkwLDIxNDg5LDIxNDg4LDIxNDc3LDIxNDg1LDIxNDk5LDIyMjM1LDIyMjM0LDIyODA2LDIyODMwLDIyODMzLDIyOTAwLDIyOTAyLDIzMzgxLDIzNDI3LDIzNjEyLDI0MDQwLDI0MDM5LDI0MDM4LDI0MDY2LDI0MDY3LDI0MTc5LDI0MTg4LDI0MzIxLDI0MzQ0LDI0MzQzLDI0NTE3LDI1MDk4LDI1MTcxLDI1MTcyLDI1MTcwLDI1MTY5LDI2MDIxLDI2MDg2LDI2NDE0LDI2NDEyLDI2NDEwLDI2NDExLDI2NDEzLDI3NDkxLDI3NTk3LDI3NjY1LDI3NjY0LDI3NzA0LDI3NzEzLDI3NzEyLDI3NzEwLDI5MzU5LDI5NTcyLDI5NTc3LDI5OTE2LDI5OTI2LDI5OTc2LDI5OTgzLDI5OTkyLDI5OTkzLDMwMDAwLDMwMDAxLDMwMDAyLDMwMDAzLDMwMDkxLDMwMzMzLDMwMzgyLDMwMzk5LDMwNDQ2LDMwNjgzLDMwNjkwLDMwNzA3LDMxMDM0LDMxMTY2LDMxMzQ4LDMxNDM1LDE5OTk4LDE5OTk5LDIwMDUwLDIwMDUxLDIwMDczLDIwMTIxLDIwMTMyLDIwMTM0LDIwMTMzLDIwMjIzLDIwMjMzLDIwMjQ5LDIwMjM0LDIwMjQ1LDIwMjM3LDIwMjQwLDIwMjQxLDIwMjM5LDIwMjEwLDIwMjE0LDIwMjE5LDIwMjA4LDIwMjExLDIwMjIxLDIwMjI1LDIwMjM1LDIwODA5LDIwODA3LDIwODA2LDIwODA4LDIwODQwLDIwODQ5LDIwODc3LDIwOTEyLDIxMDE1LDIxMDA5LDIxMDEwLDIxMDA2LDIxMDE0LDIxMTU1LDIxMjU2LDIxMjgxLDIxMjgwLDIxMzYwLDIxMzYxLDIxNTEzLDIxNTE5LDIxNTE2LDIxNTE0LDIxNTIwLDIxNTA1LDIxNTE1LDIxNTA4LDIxNTIxLDIxNTE3LDIxNTEyLDIxNTA3LDIxNTE4LDIxNTEwLDIxNTIyLDIyMjQwLDIyMjM4LDIyMjM3LDIyMzIzLDIyMzIwLDIyMzEyLDIyMzE3LDIyMzE2LDIyMzE5LDIyMzEzLDIyODA5LDIyODEwLDIyODM5LDIyODQwLDIyOTE2LDIyOTA0LDIyOTE1LDIyOTA5LDIyOTA1LDIyOTE0LDIyOTEzLDIzMzgzLDIzMzg0LDIzNDMxLDIzNDMyLDIzNDI5LDIzNDMzLDIzNTQ2LDIzNTc0LDIzNjczLDI0MDMwLDI0MDcwLDI0MTgyLDI0MTgwLDI0MzM1LDI0MzQ3LDI0NTM3LDI0NTM0LDI1MTAyLDI1MTAwLDI1MTAxLDI1MTA0LDI1MTg3LDI1MTc5LDI1MTc2LDI1OTEwLDI2MDg5LDI2MDg4LDI2MDkyLDI2MDkzLDI2MzU0LDI2MzU1LDI2Mzc3LDI2NDI5LDI2NDIwLDI2NDE3LDI2NDIxLDI3NDI1LDI3NDkyLDI3NTE1LDI3NjcwLDI3NzQxLDI3NzM1LDI3NzM3LDI3NzQzLDI3NzQ0LDI3NzI4LDI3NzMzLDI3NzQ1LDI3NzM5LDI3NzI1LDI3NzI2LDI4Nzg0LDI5Mjc5LDI5Mjc3LDMwMzM0LDMxNDgxLDMxODU5LDMxOTkyLDMyNTY2LDMyNjUwLDMyNzAxLDMyNzY5LDMyNzcxLDMyNzgwLDMyNzg2LDMyODE5LDMyODk1LDMyOTA1LDMyOTA3LDMyOTA4LDMzMjUxLDMzMjU4LDMzMjY3LDMzMjc2LDMzMjkyLDMzMzA3LDMzMzExLDMzMzkwLDMzMzk0LDMzNDA2LDM0NDExLDM0ODgwLDM0ODkyLDM0OTE1LDM1MTk5LDM4NDMzLDIwMDE4LDIwMTM2LDIwMzAxLDIwMzAzLDIwMjk1LDIwMzExLDIwMzE4LDIwMjc2LDIwMzE1LDIwMzA5LDIwMjcyLDIwMzA0LDIwMzA1LDIwMjg1LDIwMjgyLDIwMjgwLDIwMjkxLDIwMzA4LDIwMjg0LDIwMjk0LDIwMzIzLDIwMzE2LDIwMzIwLDIwMjcxLDIwMzAyLDIwMjc4LDIwMzEzLDIwMzE3LDIwMjk2LDIwMzE0LDIwODEyLDIwODExLDIwODEzLDIwODUzLDIwOTE4LDIwOTE5LDIxMDI5LDIxMDI4LDIxMDMzLDIxMDM0LDIxMDMyLDIxMTYzLDIxMTYxLDIxMTYyLDIxMTY0LDIxMjgzLDIxMzYzLDIxMzY1LDIxNTMzLDIxNTQ5LDIxNTM0LDIxNTY2LDIxNTQyLDIxNTgyLDIxNTQzLDIxNTc0LDIxNTcxLDIxNTU1LDIxNTc2LDIxNTcwLDIxNTMxLDIxNTQ1LDIxNTc4LDIxNTYxLDIxNTYzLDIxNTYwLDIxNTUwLDIxNTU3LDIxNTU4LDIxNTM2LDIxNTY0LDIxNTY4LDIxNTUzLDIxNTQ3LDIxNTM1LDIxNTQ4LDIyMjUwLDIyMjU2LDIyMjQ0LDIyMjUxLDIyMzQ2LDIyMzUzLDIyMzM2LDIyMzQ5LDIyMzQzLDIyMzUwLDIyMzM0LDIyMzUyLDIyMzUxLDIyMzMxLDIyNzY3LDIyODQ2LDIyOTQxLDIyOTMwLDIyOTUyLDIyOTQyLDIyOTQ3LDIyOTM3LDIyOTM0LDIyOTI1LDIyOTQ4LDIyOTMxLDIyOTIyLDIyOTQ5LDIzMzg5LDIzMzg4LDIzMzg2LDIzMzg3LDIzNDM2LDIzNDM1LDIzNDM5LDIzNTk2LDIzNjE2LDIzNjE3LDIzNjE1LDIzNjE0LDIzNjk2LDIzNjk3LDIzNzAwLDIzNjkyLDI0MDQzLDI0MDc2LDI0MjA3LDI0MTk5LDI0MjAyLDI0MzExLDI0MzI0LDI0MzUxLDI0NDIwLDI0NDE4LDI0NDM5LDI0NDQxLDI0NTM2LDI0NTI0LDI0NTM1LDI0NTI1LDI0NTYxLDI0NTU1LDI0NTY4LDI0NTU0LDI1MTA2LDI1MTA1LDI1MjIwLDI1MjM5LDI1MjM4LDI1MjE2LDI1MjA2LDI1MjI1LDI1MTk3LDI1MjI2LDI1MjEyLDI1MjE0LDI1MjA5LDI1MjAzLDI1MjM0LDI1MTk5LDI1MjQwLDI1MTk4LDI1MjM3LDI1MjM1LDI1MjMzLDI1MjIyLDI1OTEzLDI1OTE1LDI1OTEyLDI2MDk3LDI2MzU2LDI2NDYzLDI2NDQ2LDI2NDQ3LDI2NDQ4LDI2NDQ5LDI2NDYwLDI2NDU0LDI2NDYyLDI2NDQxLDI2NDM4LDI2NDY0LDI2NDUxLDI2NDU1LDI3NDkzLDI3NTk5LDI3NzE0LDI3NzQyLDI3ODAxLDI3Nzc3LDI3Nzg0LDI3Nzg1LDI3NzgxLDI3ODAzLDI3NzU0LDI3NzcwLDI3NzkyLDI3NzYwLDI3Nzg4LDI3NzUyLDI3Nzk4LDI3Nzk0LDI3NzczLDI3Nzc5LDI3NzYyLDI3Nzc0LDI3NzY0LDI3NzgyLDI3NzY2LDI3Nzg5LDI3Nzk2LDI3ODAwLDI3Nzc4LDI4NzkwLDI4Nzk2LDI4Nzk3LDI4NzkyLDI5MjgyLDI5MjgxLDI5MjgwLDI5MzgwLDI5Mzc4LDI5NTkwLDI5OTk2LDI5OTk1LDMwMDA3LDMwMDA4LDMwMzM4LDMwNDQ3LDMwNjkxLDMxMTY5LDMxMTY4LDMxMTY3LDMxMzUwLDMxOTk1LDMyNTk3LDMyOTE4LDMyOTE1LDMyOTI1LDMyOTIwLDMyOTIzLDMyOTIyLDMyOTQ2LDMzMzkxLDMzNDI2LDMzNDE5LDMzNDIxLDM1MjExLDM1MjgyLDM1MzI4LDM1ODk1LDM1OTEwLDM1OTI1LDM1OTk3LDM2MTk2LDM2MjA4LDM2Mjc1LDM2NTIzLDM2NTU0LDM2NzYzLDM2Nzg0LDM2ODAyLDM2ODA2LDM2ODA1LDM2ODA0LDI0MDMzLDM3MDA5LDM3MDI2LDM3MDM0LDM3MDMwLDM3MDI3LDM3MTkzLDM3MzE4LDM3MzI0LDM4NDUwLDM4NDQ2LDM4NDQ5LDM4NDQyLDM4NDQ0LDIwMDA2LDIwMDU0LDIwMDgzLDIwMTA3LDIwMTIzLDIwMTI2LDIwMTM5LDIwMTQwLDIwMzM1LDIwMzgxLDIwMzY1LDIwMzM5LDIwMzUxLDIwMzMyLDIwMzc5LDIwMzYzLDIwMzU4LDIwMzU1LDIwMzM2LDIwMzQxLDIwMzYwLDIwMzI5LDIwMzQ3LDIwMzc0LDIwMzUwLDIwMzY3LDIwMzY5LDIwMzQ2LDIwODIwLDIwODE4LDIwODIxLDIwODQxLDIwODU1LDIwODU0LDIwODU2LDIwOTI1LDIwOTg5LDIxMDUxLDIxMDQ4LDIxMDQ3LDIxMDUwLDIxMDQwLDIxMDM4LDIxMDQ2LDIxMDU3LDIxMTgyLDIxMTc5LDIxMzMwLDIxMzMyLDIxMzMxLDIxMzI5LDIxMzUwLDIxMzY3LDIxMzY4LDIxMzY5LDIxNDYyLDIxNDYwLDIxNDYzLDIxNjE5LDIxNjIxLDIxNjU0LDIxNjI0LDIxNjUzLDIxNjMyLDIxNjI3LDIxNjIzLDIxNjM2LDIxNjUwLDIxNjM4LDIxNjI4LDIxNjQ4LDIxNjE3LDIxNjIyLDIxNjQ0LDIxNjU4LDIxNjAyLDIxNjA4LDIxNjQzLDIxNjI5LDIxNjQ2LDIyMjY2LDIyNDAzLDIyMzkxLDIyMzc4LDIyMzc3LDIyMzY5LDIyMzc0LDIyMzcyLDIyMzk2LDIyODEyLDIyODU3LDIyODU1LDIyODU2LDIyODUyLDIyODY4LDIyOTc0LDIyOTcxLDIyOTk2LDIyOTY5LDIyOTU4LDIyOTkzLDIyOTgyLDIyOTkyLDIyOTg5LDIyOTg3LDIyOTk1LDIyOTg2LDIyOTU5LDIyOTYzLDIyOTk0LDIyOTgxLDIzMzkxLDIzMzk2LDIzMzk1LDIzNDQ3LDIzNDUwLDIzNDQ4LDIzNDUyLDIzNDQ5LDIzNDUxLDIzNTc4LDIzNjI0LDIzNjIxLDIzNjIyLDIzNzM1LDIzNzEzLDIzNzM2LDIzNzIxLDIzNzIzLDIzNzI5LDIzNzMxLDI0MDg4LDI0MDkwLDI0MDg2LDI0MDg1LDI0MDkxLDI0MDgxLDI0MTg0LDI0MjE4LDI0MjE1LDI0MjIwLDI0MjEzLDI0MjE0LDI0MzEwLDI0MzU4LDI0MzU5LDI0MzYxLDI0NDQ4LDI0NDQ5LDI0NDQ3LDI0NDQ0LDI0NTQxLDI0NTQ0LDI0NTczLDI0NTY1LDI0NTc1LDI0NTkxLDI0NTk2LDI0NjIzLDI0NjI5LDI0NTk4LDI0NjE4LDI0NTk3LDI0NjA5LDI0NjE1LDI0NjE3LDI0NjE5LDI0NjAzLDI1MTEwLDI1MTA5LDI1MTUxLDI1MTUwLDI1MTUyLDI1MjE1LDI1Mjg5LDI1MjkyLDI1Mjg0LDI1Mjc5LDI1MjgyLDI1MjczLDI1Mjk4LDI1MzA3LDI1MjU5LDI1Mjk5LDI1MzAwLDI1MjkxLDI1Mjg4LDI1MjU2LDI1Mjc3LDI1Mjc2LDI1Mjk2LDI1MzA1LDI1Mjg3LDI1MjkzLDI1MjY5LDI1MzA2LDI1MjY1LDI1MzA0LDI1MzAyLDI1MzAzLDI1Mjg2LDI1MjYwLDI1Mjk0LDI1OTE4LDI2MDIzLDI2MDQ0LDI2MTA2LDI2MTMyLDI2MTMxLDI2MTI0LDI2MTE4LDI2MTE0LDI2MTI2LDI2MTEyLDI2MTI3LDI2MTMzLDI2MTIyLDI2MTE5LDI2MzgxLDI2Mzc5LDI2NDc3LDI2NTA3LDI2NTE3LDI2NDgxLDI2NTI0LDI2NDgzLDI2NDg3LDI2NTAzLDI2NTI1LDI2NTE5LDI2NDc5LDI2NDgwLDI2NDk1LDI2NTA1LDI2NDk0LDI2NTEyLDI2NDg1LDI2NTIyLDI2NTE1LDI2NDkyLDI2NDc0LDI2NDgyLDI3NDI3LDI3NDk0LDI3NDk1LDI3NTE5LDI3NjY3LDI3Njc1LDI3ODc1LDI3ODgwLDI3ODkxLDI3ODI1LDI3ODUyLDI3ODc3LDI3ODI3LDI3ODM3LDI3ODM4LDI3ODM2LDI3ODc0LDI3ODE5LDI3ODYxLDI3ODU5LDI3ODMyLDI3ODQ0LDI3ODMzLDI3ODQxLDI3ODIyLDI3ODYzLDI3ODQ1LDI3ODg5LDI3ODM5LDI3ODM1LDI3ODczLDI3ODY3LDI3ODUwLDI3ODIwLDI3ODg3LDI3ODY4LDI3ODYyLDI3ODcyLDI4ODIxLDI4ODE0LDI4ODE4LDI4ODEwLDI4ODI1LDI5MjI4LDI5MjI5LDI5MjQwLDI5MjU2LDI5Mjg3LDI5Mjg5LDI5Mzc2LDI5MzkwLDI5NDAxLDI5Mzk5LDI5MzkyLDI5NjA5LDI5NjA4LDI5NTk5LDI5NjExLDI5NjA1LDMwMDEzLDMwMTA5LDMwMTA1LDMwMTA2LDMwMzQwLDMwNDAyLDMwNDUwLDMwNDUyLDMwNjkzLDMwNzE3LDMxMDM4LDMxMDQwLDMxMDQxLDMxMTc3LDMxMTc2LDMxMzU0LDMxMzUzLDMxNDgyLDMxOTk4LDMyNTk2LDMyNjUyLDMyNjUxLDMyNzczLDMyOTU0LDMyOTMzLDMyOTMwLDMyOTQ1LDMyOTI5LDMyOTM5LDMyOTM3LDMyOTQ4LDMyOTM4LDMyOTQzLDMzMjUzLDMzMjc4LDMzMjkzLDMzNDU5LDMzNDM3LDMzNDMzLDMzNDUzLDMzNDY5LDMzNDM5LDMzNDY1LDMzNDU3LDMzNDUyLDMzNDQ1LDMzNDU1LDMzNDY0LDMzNDQzLDMzNDU2LDMzNDcwLDMzNDYzLDM0MzgyLDM0NDE3LDIxMDIxLDM0OTIwLDM2NTU1LDM2ODE0LDM2ODIwLDM2ODE3LDM3MDQ1LDM3MDQ4LDM3MDQxLDM3MDQ2LDM3MzE5LDM3MzI5LDM4MjYzLDM4MjcyLDM4NDI4LDM4NDY0LDM4NDYzLDM4NDU5LDM4NDY4LDM4NDY2LDM4NTg1LDM4NjMyLDM4NzM4LDM4NzUwLDIwMTI3LDIwMTQxLDIwMTQyLDIwNDQ5LDIwNDA1LDIwMzk5LDIwNDE1LDIwNDQ4LDIwNDMzLDIwNDMxLDIwNDQ1LDIwNDE5LDIwNDA2LDIwNDQwLDIwNDQ3LDIwNDI2LDIwNDM5LDIwMzk4LDIwNDMyLDIwNDIwLDIwNDE4LDIwNDQyLDIwNDMwLDIwNDQ2LDIwNDA3LDIwODIzLDIwODgyLDIwODgxLDIwODk2LDIxMDcwLDIxMDU5LDIxMDY2LDIxMDY5LDIxMDY4LDIxMDY3LDIxMDYzLDIxMTkxLDIxMTkzLDIxMTg3LDIxMTg1LDIxMjYxLDIxMzM1LDIxMzcxLDIxNDAyLDIxNDY3LDIxNjc2LDIxNjk2LDIxNjcyLDIxNzEwLDIxNzA1LDIxNjg4LDIxNjcwLDIxNjgzLDIxNzAzLDIxNjk4LDIxNjkzLDIxNjc0LDIxNjk3LDIxNzAwLDIxNzA0LDIxNjc5LDIxNjc1LDIxNjgxLDIxNjkxLDIxNjczLDIxNjcxLDIxNjk1LDIyMjcxLDIyNDAyLDIyNDExLDIyNDMyLDIyNDM1LDIyNDM0LDIyNDc4LDIyNDQ2LDIyNDE5LDIyODY5LDIyODY1LDIyODYzLDIyODYyLDIyODY0LDIzMDA0LDIzMDAwLDIzMDM5LDIzMDExLDIzMDE2LDIzMDQzLDIzMDEzLDIzMDE4LDIzMDAyLDIzMDE0LDIzMDQxLDIzMDM1LDIzNDAxLDIzNDU5LDIzNDYyLDIzNDYwLDIzNDU4LDIzNDYxLDIzNTUzLDIzNjMwLDIzNjMxLDIzNjI5LDIzNjI3LDIzNzY5LDIzNzYyLDI0MDU1LDI0MDkzLDI0MTAxLDI0MDk1LDI0MTg5LDI0MjI0LDI0MjMwLDI0MzE0LDI0MzI4LDI0MzY1LDI0NDIxLDI0NDU2LDI0NDUzLDI0NDU4LDI0NDU5LDI0NDU1LDI0NDYwLDI0NDU3LDI0NTk0LDI0NjA1LDI0NjA4LDI0NjEzLDI0NTkwLDI0NjE2LDI0NjUzLDI0Njg4LDI0NjgwLDI0Njc0LDI0NjQ2LDI0NjQzLDI0Njg0LDI0NjgzLDI0NjgyLDI0Njc2LDI1MTUzLDI1MzA4LDI1MzY2LDI1MzUzLDI1MzQwLDI1MzI1LDI1MzQ1LDI1MzI2LDI1MzQxLDI1MzUxLDI1MzI5LDI1MzM1LDI1MzI3LDI1MzI0LDI1MzQyLDI1MzMyLDI1MzYxLDI1MzQ2LDI1OTE5LDI1OTI1LDI2MDI3LDI2MDQ1LDI2MDgyLDI2MTQ5LDI2MTU3LDI2MTQ0LDI2MTUxLDI2MTU5LDI2MTQzLDI2MTUyLDI2MTYxLDI2MTQ4LDI2MzU5LDI2NjIzLDI2NTc5LDI2NjA5LDI2NTgwLDI2NTc2LDI2NjA0LDI2NTUwLDI2NTQzLDI2NjEzLDI2NjAxLDI2NjA3LDI2NTY0LDI2NTc3LDI2NTQ4LDI2NTg2LDI2NTk3LDI2NTUyLDI2NTc1LDI2NTkwLDI2NjExLDI2NTQ0LDI2NTg1LDI2NTk0LDI2NTg5LDI2NTc4LDI3NDk4LDI3NTIzLDI3NTI2LDI3NTczLDI3NjAyLDI3NjA3LDI3Njc5LDI3ODQ5LDI3OTE1LDI3OTU0LDI3OTQ2LDI3OTY5LDI3OTQxLDI3OTE2LDI3OTUzLDI3OTM0LDI3OTI3LDI3OTYzLDI3OTY1LDI3OTY2LDI3OTU4LDI3OTMxLDI3ODkzLDI3OTYxLDI3OTQzLDI3OTYwLDI3OTQ1LDI3OTUwLDI3OTU3LDI3OTE4LDI3OTQ3LDI4ODQzLDI4ODU4LDI4ODUxLDI4ODQ0LDI4ODQ3LDI4ODQ1LDI4ODU2LDI4ODQ2LDI4ODM2LDI5MjMyLDI5Mjk4LDI5Mjk1LDI5MzAwLDI5NDE3LDI5NDA4LDI5NDA5LDI5NjIzLDI5NjQyLDI5NjI3LDI5NjE4LDI5NjQ1LDI5NjMyLDI5NjE5LDI5OTc4LDI5OTk3LDMwMDMxLDMwMDI4LDMwMDMwLDMwMDI3LDMwMTIzLDMwMTE2LDMwMTE3LDMwMTE0LDMwMTE1LDMwMzI4LDMwMzQyLDMwMzQzLDMwMzQ0LDMwNDA4LDMwNDA2LDMwNDAzLDMwNDA1LDMwNDY1LDMwNDU3LDMwNDU2LDMwNDczLDMwNDc1LDMwNDYyLDMwNDYwLDMwNDcxLDMwNjg0LDMwNzIyLDMwNzQwLDMwNzMyLDMwNzMzLDMxMDQ2LDMxMDQ5LDMxMDQ4LDMxMDQ3LDMxMTYxLDMxMTYyLDMxMTg1LDMxMTg2LDMxMTc5LDMxMzU5LDMxMzYxLDMxNDg3LDMxNDg1LDMxODY5LDMyMDAyLDMyMDA1LDMyMDAwLDMyMDA5LDMyMDA3LDMyMDA0LDMyMDA2LDMyNTY4LDMyNjU0LDMyNzAzLDMyNzcyLDMyNzg0LDMyNzgxLDMyNzg1LDMyODIyLDMyOTgyLDMyOTk3LDMyOTg2LDMyOTYzLDMyOTY0LDMyOTcyLDMyOTkzLDMyOTg3LDMyOTc0LDMyOTkwLDMyOTk2LDMyOTg5LDMzMjY4LDMzMzE0LDMzNTExLDMzNTM5LDMzNTQxLDMzNTA3LDMzNDk5LDMzNTEwLDMzNTQwLDMzNTA5LDMzNTM4LDMzNTQ1LDMzNDkwLDMzNDk1LDMzNTIxLDMzNTM3LDMzNTAwLDMzNDkyLDMzNDg5LDMzNTAyLDMzNDkxLDMzNTAzLDMzNTE5LDMzNTQyLDM0Mzg0LDM0NDI1LDM0NDI3LDM0NDI2LDM0ODkzLDM0OTIzLDM1MjAxLDM1Mjg0LDM1MzM2LDM1MzMwLDM1MzMxLDM1OTk4LDM2MDAwLDM2MjEyLDM2MjExLDM2Mjc2LDM2NTU3LDM2NTU2LDM2ODQ4LDM2ODM4LDM2ODM0LDM2ODQyLDM2ODM3LDM2ODQ1LDM2ODQzLDM2ODM2LDM2ODQwLDM3MDY2LDM3MDcwLDM3MDU3LDM3MDU5LDM3MTk1LDM3MTk0LDM3MzI1LDM4Mjc0LDM4NDgwLDM4NDc1LDM4NDc2LDM4NDc3LDM4NzU0LDM4NzYxLDM4ODU5LDM4ODkzLDM4ODk5LDM4OTEzLDM5MDgwLDM5MTMxLDM5MTM1LDM5MzE4LDM5MzIxLDIwMDU2LDIwMTQ3LDIwNDkyLDIwNDkzLDIwNTE1LDIwNDYzLDIwNTE4LDIwNTE3LDIwNDcyLDIwNTIxLDIwNTAyLDIwNDg2LDIwNTQwLDIwNTExLDIwNTA2LDIwNDk4LDIwNDk3LDIwNDc0LDIwNDgwLDIwNTAwLDIwNTIwLDIwNDY1LDIwNTEzLDIwNDkxLDIwNTA1LDIwNTA0LDIwNDY3LDIwNDYyLDIwNTI1LDIwNTIyLDIwNDc4LDIwNTIzLDIwNDg5LDIwODYwLDIwOTAwLDIwOTAxLDIwODk4LDIwOTQxLDIwOTQwLDIwOTM0LDIwOTM5LDIxMDc4LDIxMDg0LDIxMDc2LDIxMDgzLDIxMDg1LDIxMjkwLDIxMzc1LDIxNDA3LDIxNDA1LDIxNDcxLDIxNzM2LDIxNzc2LDIxNzYxLDIxODE1LDIxNzU2LDIxNzMzLDIxNzQ2LDIxNzY2LDIxNzU0LDIxNzgwLDIxNzM3LDIxNzQxLDIxNzI5LDIxNzY5LDIxNzQyLDIxNzM4LDIxNzM0LDIxNzk5LDIxNzY3LDIxNzU3LDIxNzc1LDIyMjc1LDIyMjc2LDIyNDY2LDIyNDg0LDIyNDc1LDIyNDY3LDIyNTM3LDIyNzk5LDIyODcxLDIyODcyLDIyODc0LDIzMDU3LDIzMDY0LDIzMDY4LDIzMDcxLDIzMDY3LDIzMDU5LDIzMDIwLDIzMDcyLDIzMDc1LDIzMDgxLDIzMDc3LDIzMDUyLDIzMDQ5LDIzNDAzLDIzNjQwLDIzNDcyLDIzNDc1LDIzNDc4LDIzNDc2LDIzNDcwLDIzNDc3LDIzNDgxLDIzNDgwLDIzNTU2LDIzNjMzLDIzNjM3LDIzNjMyLDIzNzg5LDIzODA1LDIzODAzLDIzNzg2LDIzNzg0LDIzNzkyLDIzNzk4LDIzODA5LDIzNzk2LDI0MDQ2LDI0MTA5LDI0MTA3LDI0MjM1LDI0MjM3LDI0MjMxLDI0MzY5LDI0NDY2LDI0NDY1LDI0NDY0LDI0NjY1LDI0Njc1LDI0Njc3LDI0NjU2LDI0NjYxLDI0Njg1LDI0NjgxLDI0Njg3LDI0NzA4LDI0NzM1LDI0NzMwLDI0NzE3LDI0NzI0LDI0NzE2LDI0NzA5LDI0NzI2LDI1MTU5LDI1MzMxLDI1MzUyLDI1MzQzLDI1NDIyLDI1NDA2LDI1MzkxLDI1NDI5LDI1NDEwLDI1NDE0LDI1NDIzLDI1NDE3LDI1NDAyLDI1NDI0LDI1NDA1LDI1Mzg2LDI1Mzg3LDI1Mzg0LDI1NDIxLDI1NDIwLDI1OTI4LDI1OTI5LDI2MDA5LDI2MDQ5LDI2MDUzLDI2MTc4LDI2MTg1LDI2MTkxLDI2MTc5LDI2MTk0LDI2MTg4LDI2MTgxLDI2MTc3LDI2MzYwLDI2Mzg4LDI2Mzg5LDI2MzkxLDI2NjU3LDI2NjgwLDI2Njk2LDI2Njk0LDI2NzA3LDI2NjgxLDI2NjkwLDI2NzA4LDI2NjY1LDI2ODAzLDI2NjQ3LDI2NzAwLDI2NzA1LDI2Njg1LDI2NjEyLDI2NzA0LDI2Njg4LDI2Njg0LDI2NjkxLDI2NjY2LDI2NjkzLDI2NjQzLDI2NjQ4LDI2Njg5LDI3NTMwLDI3NTI5LDI3NTc1LDI3NjgzLDI3Njg3LDI3Njg4LDI3Njg2LDI3Njg0LDI3ODg4LDI4MDEwLDI4MDUzLDI4MDQwLDI4MDM5LDI4MDA2LDI4MDI0LDI4MDIzLDI3OTkzLDI4MDUxLDI4MDEyLDI4MDQxLDI4MDE0LDI3OTk0LDI4MDIwLDI4MDA5LDI4MDQ0LDI4MDQyLDI4MDI1LDI4MDM3LDI4MDA1LDI4MDUyLDI4ODc0LDI4ODg4LDI4OTAwLDI4ODg5LDI4ODcyLDI4ODc5LDI5MjQxLDI5MzA1LDI5NDM2LDI5NDMzLDI5NDM3LDI5NDMyLDI5NDMxLDI5NTc0LDI5Njc3LDI5NzA1LDI5Njc4LDI5NjY0LDI5Njc0LDI5NjYyLDMwMDM2LDMwMDQ1LDMwMDQ0LDMwMDQyLDMwMDQxLDMwMTQyLDMwMTQ5LDMwMTUxLDMwMTMwLDMwMTMxLDMwMTQxLDMwMTQwLDMwMTM3LDMwMTQ2LDMwMTM2LDMwMzQ3LDMwMzg0LDMwNDEwLDMwNDEzLDMwNDE0LDMwNTA1LDMwNDk1LDMwNDk2LDMwNTA0LDMwNjk3LDMwNzY4LDMwNzU5LDMwNzc2LDMwNzQ5LDMwNzcyLDMwNzc1LDMwNzU3LDMwNzY1LDMwNzUyLDMwNzUxLDMwNzcwLDMxMDYxLDMxMDU2LDMxMDcyLDMxMDcxLDMxMDYyLDMxMDcwLDMxMDY5LDMxMDYzLDMxMDY2LDMxMjA0LDMxMjAzLDMxMjA3LDMxMTk5LDMxMjA2LDMxMjA5LDMxMTkyLDMxMzY0LDMxMzY4LDMxNDQ5LDMxNDk0LDMxNTA1LDMxODgxLDMyMDMzLDMyMDIzLDMyMDExLDMyMDEwLDMyMDMyLDMyMDM0LDMyMDIwLDMyMDE2LDMyMDIxLDMyMDI2LDMyMDI4LDMyMDEzLDMyMDI1LDMyMDI3LDMyNTcwLDMyNjA3LDMyNjYwLDMyNzA5LDMyNzA1LDMyNzc0LDMyNzkyLDMyNzg5LDMyNzkzLDMyNzkxLDMyODI5LDMyODMxLDMzMDA5LDMzMDI2LDMzMDA4LDMzMDI5LDMzMDA1LDMzMDEyLDMzMDMwLDMzMDE2LDMzMDExLDMzMDMyLDMzMDIxLDMzMDM0LDMzMDIwLDMzMDA3LDMzMjYxLDMzMjYwLDMzMjgwLDMzMjk2LDMzMzIyLDMzMzIzLDMzMzIwLDMzMzI0LDMzNDY3LDMzNTc5LDMzNjE4LDMzNjIwLDMzNjEwLDMzNTkyLDMzNjE2LDMzNjA5LDMzNTg5LDMzNTg4LDMzNjE1LDMzNTg2LDMzNTkzLDMzNTkwLDMzNTU5LDMzNjAwLDMzNTg1LDMzNTc2LDMzNjAzLDM0Mzg4LDM0NDQyLDM0NDc0LDM0NDUxLDM0NDY4LDM0NDczLDM0NDQ0LDM0NDY3LDM0NDYwLDM0OTI4LDM0OTM1LDM0OTQ1LDM0OTQ2LDM0OTQxLDM0OTM3LDM1MzUyLDM1MzQ0LDM1MzQyLDM1MzQwLDM1MzQ5LDM1MzM4LDM1MzUxLDM1MzQ3LDM1MzUwLDM1MzQzLDM1MzQ1LDM1OTEyLDM1OTYyLDM1OTYxLDM2MDAxLDM2MDAyLDM2MjE1LDM2NTI0LDM2NTYyLDM2NTY0LDM2NTU5LDM2Nzg1LDM2ODY1LDM2ODcwLDM2ODU1LDM2ODY0LDM2ODU4LDM2ODUyLDM2ODY3LDM2ODYxLDM2ODY5LDM2ODU2LDM3MDEzLDM3MDg5LDM3MDg1LDM3MDkwLDM3MjAyLDM3MTk3LDM3MTk2LDM3MzM2LDM3MzQxLDM3MzM1LDM3MzQwLDM3MzM3LDM4Mjc1LDM4NDk4LDM4NDk5LDM4NDk3LDM4NDkxLDM4NDkzLDM4NTAwLDM4NDg4LDM4NDk0LDM4NTg3LDM5MTM4LDM5MzQwLDM5NTkyLDM5NjQwLDM5NzE3LDM5NzMwLDM5NzQwLDIwMDk0LDIwNjAyLDIwNjA1LDIwNTcyLDIwNTUxLDIwNTQ3LDIwNTU2LDIwNTcwLDIwNTUzLDIwNTgxLDIwNTk4LDIwNTU4LDIwNTY1LDIwNTk3LDIwNTk2LDIwNTk5LDIwNTU5LDIwNDk1LDIwNTkxLDIwNTg5LDIwODI4LDIwODg1LDIwOTc2LDIxMDk4LDIxMTAzLDIxMjAyLDIxMjA5LDIxMjA4LDIxMjA1LDIxMjY0LDIxMjYzLDIxMjczLDIxMzExLDIxMzEyLDIxMzEwLDIxNDQzLDI2MzY0LDIxODMwLDIxODY2LDIxODYyLDIxODI4LDIxODU0LDIxODU3LDIxODI3LDIxODM0LDIxODA5LDIxODQ2LDIxODM5LDIxODQ1LDIxODA3LDIxODYwLDIxODE2LDIxODA2LDIxODUyLDIxODA0LDIxODU5LDIxODExLDIxODI1LDIxODQ3LDIyMjgwLDIyMjgzLDIyMjgxLDIyNDk1LDIyNTMzLDIyNTM4LDIyNTM0LDIyNDk2LDIyNTAwLDIyNTIyLDIyNTMwLDIyNTgxLDIyNTE5LDIyNTIxLDIyODE2LDIyODgyLDIzMDk0LDIzMTA1LDIzMTEzLDIzMTQyLDIzMTQ2LDIzMTA0LDIzMTAwLDIzMTM4LDIzMTMwLDIzMTEwLDIzMTE0LDIzNDA4LDIzNDk1LDIzNDkzLDIzNDkyLDIzNDkwLDIzNDg3LDIzNDk0LDIzNTYxLDIzNTYwLDIzNTU5LDIzNjQ4LDIzNjQ0LDIzNjQ1LDIzODE1LDIzODE0LDIzODIyLDIzODM1LDIzODMwLDIzODQyLDIzODI1LDIzODQ5LDIzODI4LDIzODMzLDIzODQ0LDIzODQ3LDIzODMxLDI0MDM0LDI0MTIwLDI0MTE4LDI0MTE1LDI0MTE5LDI0MjQ3LDI0MjQ4LDI0MjQ2LDI0MjQ1LDI0MjU0LDI0MzczLDI0Mzc1LDI0NDA3LDI0NDI4LDI0NDI1LDI0NDI3LDI0NDcxLDI0NDczLDI0NDc4LDI0NDcyLDI0NDgxLDI0NDgwLDI0NDc2LDI0NzAzLDI0NzM5LDI0NzEzLDI0NzM2LDI0NzQ0LDI0Nzc5LDI0NzU2LDI0ODA2LDI0NzY1LDI0NzczLDI0NzYzLDI0NzU3LDI0Nzk2LDI0NzY0LDI0NzkyLDI0Nzg5LDI0Nzc0LDI0Nzk5LDI0NzYwLDI0Nzk0LDI0Nzc1LDI1MTE0LDI1MTE1LDI1MTYwLDI1NTA0LDI1NTExLDI1NDU4LDI1NDk0LDI1NTA2LDI1NTA5LDI1NDYzLDI1NDQ3LDI1NDk2LDI1NTE0LDI1NDU3LDI1NTEzLDI1NDgxLDI1NDc1LDI1NDk5LDI1NDUxLDI1NTEyLDI1NDc2LDI1NDgwLDI1NDk3LDI1NTA1LDI1NTE2LDI1NDkwLDI1NDg3LDI1NDcyLDI1NDY3LDI1NDQ5LDI1NDQ4LDI1NDY2LDI1OTQ5LDI1OTQyLDI1OTM3LDI1OTQ1LDI1OTQzLDIxODU1LDI1OTM1LDI1OTQ0LDI1OTQxLDI1OTQwLDI2MDEyLDI2MDExLDI2MDI4LDI2MDYzLDI2MDU5LDI2MDYwLDI2MDYyLDI2MjA1LDI2MjAyLDI2MjEyLDI2MjE2LDI2MjE0LDI2MjA2LDI2MzYxLDIxMjA3LDI2Mzk1LDI2NzUzLDI2Nzk5LDI2Nzg2LDI2NzcxLDI2ODA1LDI2NzUxLDI2NzQyLDI2ODAxLDI2NzkxLDI2Nzc1LDI2ODAwLDI2NzU1LDI2ODIwLDI2Nzk3LDI2NzU4LDI2NzU3LDI2NzcyLDI2NzgxLDI2NzkyLDI2NzgzLDI2Nzg1LDI2NzU0LDI3NDQyLDI3NTc4LDI3NjI3LDI3NjI4LDI3NjkxLDI4MDQ2LDI4MDkyLDI4MTQ3LDI4MTIxLDI4MDgyLDI4MTI5LDI4MTA4LDI4MTMyLDI4MTU1LDI4MTU0LDI4MTY1LDI4MTAzLDI4MTA3LDI4MDc5LDI4MTEzLDI4MDc4LDI4MTI2LDI4MTUzLDI4MDg4LDI4MTUxLDI4MTQ5LDI4MTAxLDI4MTE0LDI4MTg2LDI4MDg1LDI4MTIyLDI4MTM5LDI4MTIwLDI4MTM4LDI4MTQ1LDI4MTQyLDI4MTM2LDI4MTAyLDI4MTAwLDI4MDc0LDI4MTQwLDI4MDk1LDI4MTM0LDI4OTIxLDI4OTM3LDI4OTM4LDI4OTI1LDI4OTExLDI5MjQ1LDI5MzA5LDI5MzEzLDI5NDY4LDI5NDY3LDI5NDYyLDI5NDU5LDI5NDY1LDI5NTc1LDI5NzAxLDI5NzA2LDI5Njk5LDI5NzAyLDI5Njk0LDI5NzA5LDI5OTIwLDI5OTQyLDI5OTQzLDI5OTgwLDI5OTg2LDMwMDUzLDMwMDU0LDMwMDUwLDMwMDY0LDMwMDk1LDMwMTY0LDMwMTY1LDMwMTMzLDMwMTU0LDMwMTU3LDMwMzUwLDMwNDIwLDMwNDE4LDMwNDI3LDMwNTE5LDMwNTI2LDMwNTI0LDMwNTE4LDMwNTIwLDMwNTIyLDMwODI3LDMwNzg3LDMwNzk4LDMxMDc3LDMxMDgwLDMxMDg1LDMxMjI3LDMxMzc4LDMxMzgxLDMxNTIwLDMxNTI4LDMxNTE1LDMxNTMyLDMxNTI2LDMxNTEzLDMxNTE4LDMxNTM0LDMxODkwLDMxODk1LDMxODkzLDMyMDcwLDMyMDY3LDMyMTEzLDMyMDQ2LDMyMDU3LDMyMDYwLDMyMDY0LDMyMDQ4LDMyMDUxLDMyMDY4LDMyMDQ3LDMyMDY2LDMyMDUwLDMyMDQ5LDMyNTczLDMyNjcwLDMyNjY2LDMyNzE2LDMyNzE4LDMyNzIyLDMyNzk2LDMyODQyLDMyODM4LDMzMDcxLDMzMDQ2LDMzMDU5LDMzMDY3LDMzMDY1LDMzMDcyLDMzMDYwLDMzMjgyLDMzMzMzLDMzMzM1LDMzMzM0LDMzMzM3LDMzNjc4LDMzNjk0LDMzNjg4LDMzNjU2LDMzNjk4LDMzNjg2LDMzNzI1LDMzNzA3LDMzNjgyLDMzNjc0LDMzNjgzLDMzNjczLDMzNjk2LDMzNjU1LDMzNjU5LDMzNjYwLDMzNjcwLDMzNzAzLDM0Mzg5LDI0NDI2LDM0NTAzLDM0NDk2LDM0NDg2LDM0NTAwLDM0NDg1LDM0NTAyLDM0NTA3LDM0NDgxLDM0NDc5LDM0NTA1LDM0ODk5LDM0OTc0LDM0OTUyLDM0OTg3LDM0OTYyLDM0OTY2LDM0OTU3LDM0OTU1LDM1MjE5LDM1MjE1LDM1MzcwLDM1MzU3LDM1MzYzLDM1MzY1LDM1Mzc3LDM1MzczLDM1MzU5LDM1MzU1LDM1MzYyLDM1OTEzLDM1OTMwLDM2MDA5LDM2MDEyLDM2MDExLDM2MDA4LDM2MDEwLDM2MDA3LDM2MTk5LDM2MTk4LDM2Mjg2LDM2MjgyLDM2NTcxLDM2NTc1LDM2ODg5LDM2ODc3LDM2ODkwLDM2ODg3LDM2ODk5LDM2ODk1LDM2ODkzLDM2ODgwLDM2ODg1LDM2ODk0LDM2ODk2LDM2ODc5LDM2ODk4LDM2ODg2LDM2ODkxLDM2ODg0LDM3MDk2LDM3MTAxLDM3MTE3LDM3MjA3LDM3MzI2LDM3MzY1LDM3MzUwLDM3MzQ3LDM3MzUxLDM3MzU3LDM3MzUzLDM4MjgxLDM4NTA2LDM4NTE3LDM4NTE1LDM4NTIwLDM4NTEyLDM4NTE2LDM4NTE4LDM4NTE5LDM4NTA4LDM4NTkyLDM4NjM0LDM4NjMzLDMxNDU2LDMxNDU1LDM4OTE0LDM4OTE1LDM5NzcwLDQwMTY1LDQwNTY1LDQwNTc1LDQwNjEzLDQwNjM1LDIwNjQyLDIwNjIxLDIwNjEzLDIwNjMzLDIwNjI1LDIwNjA4LDIwNjMwLDIwNjMyLDIwNjM0LDI2MzY4LDIwOTc3LDIxMTA2LDIxMTA4LDIxMTA5LDIxMDk3LDIxMjE0LDIxMjEzLDIxMjExLDIxMzM4LDIxNDEzLDIxODgzLDIxODg4LDIxOTI3LDIxODg0LDIxODk4LDIxOTE3LDIxOTEyLDIxODkwLDIxOTE2LDIxOTMwLDIxOTA4LDIxODk1LDIxODk5LDIxODkxLDIxOTM5LDIxOTM0LDIxOTE5LDIxODIyLDIxOTM4LDIxOTE0LDIxOTQ3LDIxOTMyLDIxOTM3LDIxODg2LDIxODk3LDIxOTMxLDIxOTEzLDIyMjg1LDIyNTc1LDIyNTcwLDIyNTgwLDIyNTY0LDIyNTc2LDIyNTc3LDIyNTYxLDIyNTU3LDIyNTYwLDIyNzc3LDIyNzc4LDIyODgwLDIzMTU5LDIzMTk0LDIzMTY3LDIzMTg2LDIzMTk1LDIzMjA3LDIzNDExLDIzNDA5LDIzNTA2LDIzNTAwLDIzNTA3LDIzNTA0LDIzNTYyLDIzNTYzLDIzNjAxLDIzODg0LDIzODg4LDIzODYwLDIzODc5LDI0MDYxLDI0MTMzLDI0MTI1LDI0MTI4LDI0MTMxLDI0MTkwLDI0MjY2LDI0MjU3LDI0MjU4LDI0MjYwLDI0MzgwLDI0NDI5LDI0NDg5LDI0NDkwLDI0NDg4LDI0Nzg1LDI0ODAxLDI0NzU0LDI0NzU4LDI0ODAwLDI0ODYwLDI0ODY3LDI0ODI2LDI0ODUzLDI0ODE2LDI0ODI3LDI0ODIwLDI0OTM2LDI0ODE3LDI0ODQ2LDI0ODIyLDI0ODQxLDI0ODMyLDI0ODUwLDI1MTE5LDI1MTYxLDI1NTA3LDI1NDg0LDI1NTUxLDI1NTM2LDI1NTc3LDI1NTQ1LDI1NTQyLDI1NTQ5LDI1NTU0LDI1NTcxLDI1NTUyLDI1NTY5LDI1NTU4LDI1NTgxLDI1NTgyLDI1NDYyLDI1NTg4LDI1NTc4LDI1NTYzLDI1NjgyLDI1NTYyLDI1NTkzLDI1OTUwLDI1OTU4LDI1OTU0LDI1OTU1LDI2MDAxLDI2MDAwLDI2MDMxLDI2MjIyLDI2MjI0LDI2MjI4LDI2MjMwLDI2MjIzLDI2MjU3LDI2MjM0LDI2MjM4LDI2MjMxLDI2MzY2LDI2MzY3LDI2Mzk5LDI2Mzk3LDI2ODc0LDI2ODM3LDI2ODQ4LDI2ODQwLDI2ODM5LDI2ODg1LDI2ODQ3LDI2ODY5LDI2ODYyLDI2ODU1LDI2ODczLDI2ODM0LDI2ODY2LDI2ODUxLDI2ODI3LDI2ODI5LDI2ODkzLDI2ODk4LDI2ODk0LDI2ODI1LDI2ODQyLDI2OTkwLDI2ODc1LDI3NDU0LDI3NDUwLDI3NDUzLDI3NTQ0LDI3NTQyLDI3NTgwLDI3NjMxLDI3Njk0LDI3Njk1LDI3NjkyLDI4MjA3LDI4MjE2LDI4MjQ0LDI4MTkzLDI4MjEwLDI4MjYzLDI4MjM0LDI4MTkyLDI4MTk3LDI4MTk1LDI4MTg3LDI4MjUxLDI4MjQ4LDI4MTk2LDI4MjQ2LDI4MjcwLDI4MjA1LDI4MTk4LDI4MjcxLDI4MjEyLDI4MjM3LDI4MjE4LDI4MjA0LDI4MjI3LDI4MTg5LDI4MjIyLDI4MzYzLDI4Mjk3LDI4MTg1LDI4MjM4LDI4MjU5LDI4MjI4LDI4Mjc0LDI4MjY1LDI4MjU1LDI4OTUzLDI4OTU0LDI4OTY2LDI4OTc2LDI4OTYxLDI4OTgyLDI5MDM4LDI4OTU2LDI5MjYwLDI5MzE2LDI5MzEyLDI5NDk0LDI5NDc3LDI5NDkyLDI5NDgxLDI5NzU0LDI5NzM4LDI5NzQ3LDI5NzMwLDI5NzMzLDI5NzQ5LDI5NzUwLDI5NzQ4LDI5NzQzLDI5NzIzLDI5NzM0LDI5NzM2LDI5OTg5LDI5OTkwLDMwMDU5LDMwMDU4LDMwMTc4LDMwMTcxLDMwMTc5LDMwMTY5LDMwMTY4LDMwMTc0LDMwMTc2LDMwMzMxLDMwMzMyLDMwMzU4LDMwMzU1LDMwMzg4LDMwNDI4LDMwNTQzLDMwNzAxLDMwODEzLDMwODI4LDMwODMxLDMxMjQ1LDMxMjQwLDMxMjQzLDMxMjM3LDMxMjMyLDMxMzg0LDMxMzgzLDMxMzgyLDMxNDYxLDMxNDU5LDMxNTYxLDMxNTc0LDMxNTU4LDMxNTY4LDMxNTcwLDMxNTcyLDMxNTY1LDMxNTYzLDMxNTY3LDMxNTY5LDMxOTAzLDMxOTA5LDMyMDk0LDMyMDgwLDMyMTA0LDMyMDg1LDMyMDQzLDMyMTEwLDMyMTE0LDMyMDk3LDMyMTAyLDMyMDk4LDMyMTEyLDMyMTE1LDIxODkyLDMyNzI0LDMyNzI1LDMyNzc5LDMyODUwLDMyOTAxLDMzMTA5LDMzMTA4LDMzMDk5LDMzMTA1LDMzMTAyLDMzMDgxLDMzMDk0LDMzMDg2LDMzMTAwLDMzMTA3LDMzMTQwLDMzMjk4LDMzMzA4LDMzNzY5LDMzNzk1LDMzNzg0LDMzODA1LDMzNzYwLDMzNzMzLDMzODAzLDMzNzI5LDMzNzc1LDMzNzc3LDMzNzgwLDMzODc5LDMzODAyLDMzNzc2LDMzODA0LDMzNzQwLDMzNzg5LDMzNzc4LDMzNzM4LDMzODQ4LDMzODA2LDMzNzk2LDMzNzU2LDMzNzk5LDMzNzQ4LDMzNzU5LDM0Mzk1LDM0NTI3LDM0NTIxLDM0NTQxLDM0NTE2LDM0NTIzLDM0NTMyLDM0NTEyLDM0NTI2LDM0OTAzLDM1MDA5LDM1MDEwLDM0OTkzLDM1MjAzLDM1MjIyLDM1Mzg3LDM1NDI0LDM1NDEzLDM1NDIyLDM1Mzg4LDM1MzkzLDM1NDEyLDM1NDE5LDM1NDA4LDM1Mzk4LDM1MzgwLDM1Mzg2LDM1MzgyLDM1NDE0LDM1OTM3LDM1OTcwLDM2MDE1LDM2MDI4LDM2MDE5LDM2MDI5LDM2MDMzLDM2MDI3LDM2MDMyLDM2MDIwLDM2MDIzLDM2MDIyLDM2MDMxLDM2MDI0LDM2MjM0LDM2MjI5LDM2MjI1LDM2MzAyLDM2MzE3LDM2Mjk5LDM2MzE0LDM2MzA1LDM2MzAwLDM2MzE1LDM2Mjk0LDM2NjAzLDM2NjAwLDM2NjA0LDM2NzY0LDM2OTEwLDM2OTE3LDM2OTEzLDM2OTIwLDM2OTE0LDM2OTE4LDM3MTIyLDM3MTA5LDM3MTI5LDM3MTE4LDM3MjE5LDM3MjIxLDM3MzI3LDM3Mzk2LDM3Mzk3LDM3NDExLDM3Mzg1LDM3NDA2LDM3Mzg5LDM3MzkyLDM3MzgzLDM3MzkzLDM4MjkyLDM4Mjg3LDM4MjgzLDM4Mjg5LDM4MjkxLDM4MjkwLDM4Mjg2LDM4NTM4LDM4NTQyLDM4NTM5LDM4NTI1LDM4NTMzLDM4NTM0LDM4NTQxLDM4NTE0LDM4NTMyLDM4NTkzLDM4NTk3LDM4NTk2LDM4NTk4LDM4NTk5LDM4NjM5LDM4NjQyLDM4ODYwLDM4OTE3LDM4OTE4LDM4OTIwLDM5MTQzLDM5MTQ2LDM5MTUxLDM5MTQ1LDM5MTU0LDM5MTQ5LDM5MzQyLDM5MzQxLDQwNjQzLDQwNjUzLDQwNjU3LDIwMDk4LDIwNjUzLDIwNjYxLDIwNjU4LDIwNjU5LDIwNjc3LDIwNjcwLDIwNjUyLDIwNjYzLDIwNjY3LDIwNjU1LDIwNjc5LDIxMTE5LDIxMTExLDIxMTE3LDIxMjE1LDIxMjIyLDIxMjIwLDIxMjE4LDIxMjE5LDIxMjk1LDIxOTgzLDIxOTkyLDIxOTcxLDIxOTkwLDIxOTY2LDIxOTgwLDIxOTU5LDIxOTY5LDIxOTg3LDIxOTg4LDIxOTk5LDIxOTc4LDIxOTg1LDIxOTU3LDIxOTU4LDIxOTg5LDIxOTYxLDIyMjkwLDIyMjkxLDIyNjIyLDIyNjA5LDIyNjE2LDIyNjE1LDIyNjE4LDIyNjEyLDIyNjM1LDIyNjA0LDIyNjM3LDIyNjAyLDIyNjI2LDIyNjEwLDIyNjAzLDIyODg3LDIzMjMzLDIzMjQxLDIzMjQ0LDIzMjMwLDIzMjI5LDIzMjI4LDIzMjE5LDIzMjM0LDIzMjE4LDIzOTEzLDIzOTE5LDI0MTQwLDI0MTg1LDI0MjY1LDI0MjY0LDI0MzM4LDI0NDA5LDI0NDkyLDI0NDk0LDI0ODU4LDI0ODQ3LDI0OTA0LDI0ODYzLDI0ODE5LDI0ODU5LDI0ODI1LDI0ODMzLDI0ODQwLDI0OTEwLDI0OTA4LDI0OTAwLDI0OTA5LDI0ODk0LDI0ODg0LDI0ODcxLDI0ODQ1LDI0ODM4LDI0ODg3LDI1MTIxLDI1MTIyLDI1NjE5LDI1NjYyLDI1NjMwLDI1NjQyLDI1NjQ1LDI1NjYxLDI1NjQ0LDI1NjE1LDI1NjI4LDI1NjIwLDI1NjEzLDI1NjU0LDI1NjIyLDI1NjIzLDI1NjA2LDI1OTY0LDI2MDE1LDI2MDMyLDI2MjYzLDI2MjQ5LDI2MjQ3LDI2MjQ4LDI2MjYyLDI2MjQ0LDI2MjY0LDI2MjUzLDI2MzcxLDI3MDI4LDI2OTg5LDI2OTcwLDI2OTk5LDI2OTc2LDI2OTY0LDI2OTk3LDI2OTI4LDI3MDEwLDI2OTU0LDI2OTg0LDI2OTg3LDI2OTc0LDI2OTYzLDI3MDAxLDI3MDE0LDI2OTczLDI2OTc5LDI2OTcxLDI3NDYzLDI3NTA2LDI3NTg0LDI3NTgzLDI3NjAzLDI3NjQ1LDI4MzIyLDI4MzM1LDI4MzcxLDI4MzQyLDI4MzU0LDI4MzA0LDI4MzE3LDI4MzU5LDI4MzU3LDI4MzI1LDI4MzEyLDI4MzQ4LDI4MzQ2LDI4MzMxLDI4MzY5LDI4MzEwLDI4MzE2LDI4MzU2LDI4MzcyLDI4MzMwLDI4MzI3LDI4MzQwLDI5MDA2LDI5MDE3LDI5MDMzLDI5MDI4LDI5MDAxLDI5MDMxLDI5MDIwLDI5MDM2LDI5MDMwLDI5MDA0LDI5MDI5LDI5MDIyLDI4OTk4LDI5MDMyLDI5MDE0LDI5MjQyLDI5MjY2LDI5NDk1LDI5NTA5LDI5NTAzLDI5NTAyLDI5ODA3LDI5Nzg2LDI5NzgxLDI5NzkxLDI5NzkwLDI5NzYxLDI5NzU5LDI5Nzg1LDI5Nzg3LDI5Nzg4LDMwMDcwLDMwMDcyLDMwMjA4LDMwMTkyLDMwMjA5LDMwMTk0LDMwMTkzLDMwMjAyLDMwMjA3LDMwMTk2LDMwMTk1LDMwNDMwLDMwNDMxLDMwNTU1LDMwNTcxLDMwNTY2LDMwNTU4LDMwNTYzLDMwNTg1LDMwNTcwLDMwNTcyLDMwNTU2LDMwNTY1LDMwNTY4LDMwNTYyLDMwNzAyLDMwODYyLDMwODk2LDMwODcxLDMwODcyLDMwODYwLDMwODU3LDMwODQ0LDMwODY1LDMwODY3LDMwODQ3LDMxMDk4LDMxMTAzLDMxMTA1LDMzODM2LDMxMTY1LDMxMjYwLDMxMjU4LDMxMjY0LDMxMjUyLDMxMjYzLDMxMjYyLDMxMzkxLDMxMzkyLDMxNjA3LDMxNjgwLDMxNTg0LDMxNTk4LDMxNTkxLDMxOTIxLDMxOTIzLDMxOTI1LDMyMTQ3LDMyMTIxLDMyMTQ1LDMyMTI5LDMyMTQzLDMyMDkxLDMyNjIyLDMyNjE3LDMyNjE4LDMyNjI2LDMyNjgxLDMyNjgwLDMyNjc2LDMyODU0LDMyODU2LDMyOTAyLDMyOTAwLDMzMTM3LDMzMTM2LDMzMTQ0LDMzMTI1LDMzMTM0LDMzMTM5LDMzMTMxLDMzMTQ1LDMzMTQ2LDMzMTI2LDMzMjg1LDMzMzUxLDMzOTIyLDMzOTExLDMzODUzLDMzODQxLDMzOTA5LDMzODk0LDMzODk5LDMzODY1LDMzOTAwLDMzODgzLDMzODUyLDMzODQ1LDMzODg5LDMzODkxLDMzODk3LDMzOTAxLDMzODYyLDM0Mzk4LDM0Mzk2LDM0Mzk5LDM0NTUzLDM0NTc5LDM0NTY4LDM0NTY3LDM0NTYwLDM0NTU4LDM0NTU1LDM0NTYyLDM0NTYzLDM0NTY2LDM0NTcwLDM0OTA1LDM1MDM5LDM1MDI4LDM1MDMzLDM1MDM2LDM1MDMyLDM1MDM3LDM1MDQxLDM1MDE4LDM1MDI5LDM1MDI2LDM1MjI4LDM1Mjk5LDM1NDM1LDM1NDQyLDM1NDQzLDM1NDMwLDM1NDMzLDM1NDQwLDM1NDYzLDM1NDUyLDM1NDI3LDM1NDg4LDM1NDQxLDM1NDYxLDM1NDM3LDM1NDI2LDM1NDM4LDM1NDM2LDM1NDQ5LDM1NDUxLDM1MzkwLDM1NDMyLDM1OTM4LDM1OTc4LDM1OTc3LDM2MDQyLDM2MDM5LDM2MDQwLDM2MDM2LDM2MDE4LDM2MDM1LDM2MDM0LDM2MDM3LDM2MzIxLDM2MzE5LDM2MzI4LDM2MzM1LDM2MzM5LDM2MzQ2LDM2MzMwLDM2MzI0LDM2MzI2LDM2NTMwLDM2NjExLDM2NjE3LDM2NjA2LDM2NjE4LDM2NzY3LDM2Nzg2LDM2OTM5LDM2OTM4LDM2OTQ3LDM2OTMwLDM2OTQ4LDM2OTI0LDM2OTQ5LDM2OTQ0LDM2OTM1LDM2OTQzLDM2OTQyLDM2OTQxLDM2OTQ1LDM2OTI2LDM2OTI5LDM3MTM4LDM3MTQzLDM3MjI4LDM3MjI2LDM3MjI1LDM3MzIxLDM3NDMxLDM3NDYzLDM3NDMyLDM3NDM3LDM3NDQwLDM3NDM4LDM3NDY3LDM3NDUxLDM3NDc2LDM3NDU3LDM3NDI4LDM3NDQ5LDM3NDUzLDM3NDQ1LDM3NDMzLDM3NDM5LDM3NDY2LDM4Mjk2LDM4NTUyLDM4NTQ4LDM4NTQ5LDM4NjA1LDM4NjAzLDM4NjAxLDM4NjAyLDM4NjQ3LDM4NjUxLDM4NjQ5LDM4NjQ2LDM4NzQyLDM4NzcyLDM4Nzc0LDM4OTI4LDM4OTI5LDM4OTMxLDM4OTIyLDM4OTMwLDM4OTI0LDM5MTY0LDM5MTU2LDM5MTY1LDM5MTY2LDM5MzQ3LDM5MzQ1LDM5MzQ4LDM5NjQ5LDQwMTY5LDQwNTc4LDQwNzE4LDQwNzIzLDQwNzM2LDIwNzExLDIwNzE4LDIwNzA5LDIwNjk0LDIwNzE3LDIwNjk4LDIwNjkzLDIwNjg3LDIwNjg5LDIwNzIxLDIwNjg2LDIwNzEzLDIwODM0LDIwOTc5LDIxMTIzLDIxMTIyLDIxMjk3LDIxNDIxLDIyMDE0LDIyMDE2LDIyMDQzLDIyMDM5LDIyMDEzLDIyMDM2LDIyMDIyLDIyMDI1LDIyMDI5LDIyMDMwLDIyMDA3LDIyMDM4LDIyMDQ3LDIyMDI0LDIyMDMyLDIyMDA2LDIyMjk2LDIyMjk0LDIyNjQ1LDIyNjU0LDIyNjU5LDIyNjc1LDIyNjY2LDIyNjQ5LDIyNjYxLDIyNjUzLDIyNzgxLDIyODIxLDIyODE4LDIyODIwLDIyODkwLDIyODg5LDIzMjY1LDIzMjcwLDIzMjczLDIzMjU1LDIzMjU0LDIzMjU2LDIzMjY3LDIzNDEzLDIzNTE4LDIzNTI3LDIzNTIxLDIzNTI1LDIzNTI2LDIzNTI4LDIzNTIyLDIzNTI0LDIzNTE5LDIzNTY1LDIzNjUwLDIzOTQwLDIzOTQzLDI0MTU1LDI0MTYzLDI0MTQ5LDI0MTUxLDI0MTQ4LDI0Mjc1LDI0Mjc4LDI0MzMwLDI0MzkwLDI0NDMyLDI0NTA1LDI0OTAzLDI0ODk1LDI0OTA3LDI0OTUxLDI0OTMwLDI0OTMxLDI0OTI3LDI0OTIyLDI0OTIwLDI0OTQ5LDI1MTMwLDI1NzM1LDI1Njg4LDI1Njg0LDI1NzY0LDI1NzIwLDI1Njk1LDI1NzIyLDI1NjgxLDI1NzAzLDI1NjUyLDI1NzA5LDI1NzIzLDI1OTcwLDI2MDE3LDI2MDcxLDI2MDcwLDI2Mjc0LDI2MjgwLDI2MjY5LDI3MDM2LDI3MDQ4LDI3MDI5LDI3MDczLDI3MDU0LDI3MDkxLDI3MDgzLDI3MDM1LDI3MDYzLDI3MDY3LDI3MDUxLDI3MDYwLDI3MDg4LDI3MDg1LDI3MDUzLDI3MDg0LDI3MDQ2LDI3MDc1LDI3MDQzLDI3NDY1LDI3NDY4LDI3Njk5LDI4NDY3LDI4NDM2LDI4NDE0LDI4NDM1LDI4NDA0LDI4NDU3LDI4NDc4LDI4NDQ4LDI4NDYwLDI4NDMxLDI4NDE4LDI4NDUwLDI4NDE1LDI4Mzk5LDI4NDIyLDI4NDY1LDI4NDcyLDI4NDY2LDI4NDUxLDI4NDM3LDI4NDU5LDI4NDYzLDI4NTUyLDI4NDU4LDI4Mzk2LDI4NDE3LDI4NDAyLDI4MzY0LDI4NDA3LDI5MDc2LDI5MDgxLDI5MDUzLDI5MDY2LDI5MDYwLDI5MDc0LDI5MjQ2LDI5MzMwLDI5MzM0LDI5NTA4LDI5NTIwLDI5Nzk2LDI5Nzk1LDI5ODAyLDI5ODA4LDI5ODA1LDI5OTU2LDMwMDk3LDMwMjQ3LDMwMjIxLDMwMjE5LDMwMjE3LDMwMjI3LDMwNDMzLDMwNDM1LDMwNTk2LDMwNTg5LDMwNTkxLDMwNTYxLDMwOTEzLDMwODc5LDMwODg3LDMwODk5LDMwODg5LDMwODgzLDMxMTE4LDMxMTE5LDMxMTE3LDMxMjc4LDMxMjgxLDMxNDAyLDMxNDAxLDMxNDY5LDMxNDcxLDMxNjQ5LDMxNjM3LDMxNjI3LDMxNjA1LDMxNjM5LDMxNjQ1LDMxNjM2LDMxNjMxLDMxNjcyLDMxNjIzLDMxNjIwLDMxOTI5LDMxOTMzLDMxOTM0LDMyMTg3LDMyMTc2LDMyMTU2LDMyMTg5LDMyMTkwLDMyMTYwLDMyMjAyLDMyMTgwLDMyMTc4LDMyMTc3LDMyMTg2LDMyMTYyLDMyMTkxLDMyMTgxLDMyMTg0LDMyMTczLDMyMjEwLDMyMTk5LDMyMTcyLDMyNjI0LDMyNzM2LDMyNzM3LDMyNzM1LDMyODYyLDMyODU4LDMyOTAzLDMzMTA0LDMzMTUyLDMzMTY3LDMzMTYwLDMzMTYyLDMzMTUxLDMzMTU0LDMzMjU1LDMzMjc0LDMzMjg3LDMzMzAwLDMzMzEwLDMzMzU1LDMzOTkzLDMzOTgzLDMzOTkwLDMzOTg4LDMzOTQ1LDMzOTUwLDMzOTcwLDMzOTQ4LDMzOTk1LDMzOTc2LDMzOTg0LDM0MDAzLDMzOTM2LDMzOTgwLDM0MDAxLDMzOTk0LDM0NjIzLDM0NTg4LDM0NjE5LDM0NTk0LDM0NTk3LDM0NjEyLDM0NTg0LDM0NjQ1LDM0NjE1LDM0NjAxLDM1MDU5LDM1MDc0LDM1MDYwLDM1MDY1LDM1MDY0LDM1MDY5LDM1MDQ4LDM1MDk4LDM1MDU1LDM1NDk0LDM1NDY4LDM1NDg2LDM1NDkxLDM1NDY5LDM1NDg5LDM1NDc1LDM1NDkyLDM1NDk4LDM1NDkzLDM1NDk2LDM1NDgwLDM1NDczLDM1NDgyLDM1NDk1LDM1OTQ2LDM1OTgxLDM1OTgwLDM2MDUxLDM2MDQ5LDM2MDUwLDM2MjAzLDM2MjQ5LDM2MjQ1LDM2MzQ4LDM2NjI4LDM2NjI2LDM2NjI5LDM2NjI3LDM2NzcxLDM2OTYwLDM2OTUyLDM2OTU2LDM2OTYzLDM2OTUzLDM2OTU4LDM2OTYyLDM2OTU3LDM2OTU1LDM3MTQ1LDM3MTQ0LDM3MTUwLDM3MjM3LDM3MjQwLDM3MjM5LDM3MjM2LDM3NDk2LDM3NTA0LDM3NTA5LDM3NTI4LDM3NTI2LDM3NDk5LDM3NTIzLDM3NTMyLDM3NTQ0LDM3NTAwLDM3NTIxLDM4MzA1LDM4MzEyLDM4MzEzLDM4MzA3LDM4MzA5LDM4MzA4LDM4NTUzLDM4NTU2LDM4NTU1LDM4NjA0LDM4NjEwLDM4NjU2LDM4NzgwLDM4Nzg5LDM4OTAyLDM4OTM1LDM4OTM2LDM5MDg3LDM5MDg5LDM5MTcxLDM5MTczLDM5MTgwLDM5MTc3LDM5MzYxLDM5NTk5LDM5NjAwLDM5NjU0LDM5NzQ1LDM5NzQ2LDQwMTgwLDQwMTgyLDQwMTc5LDQwNjM2LDQwNzYzLDQwNzc4LDIwNzQwLDIwNzM2LDIwNzMxLDIwNzI1LDIwNzI5LDIwNzM4LDIwNzQ0LDIwNzQ1LDIwNzQxLDIwOTU2LDIxMTI3LDIxMTI4LDIxMTI5LDIxMTMzLDIxMTMwLDIxMjMyLDIxNDI2LDIyMDYyLDIyMDc1LDIyMDczLDIyMDY2LDIyMDc5LDIyMDY4LDIyMDU3LDIyMDk5LDIyMDk0LDIyMTAzLDIyMTMyLDIyMDcwLDIyMDYzLDIyMDY0LDIyNjU2LDIyNjg3LDIyNjg2LDIyNzA3LDIyNjg0LDIyNzAyLDIyNjk3LDIyNjk0LDIyODkzLDIzMzA1LDIzMjkxLDIzMzA3LDIzMjg1LDIzMzA4LDIzMzA0LDIzNTM0LDIzNTMyLDIzNTI5LDIzNTMxLDIzNjUyLDIzNjUzLDIzOTY1LDIzOTU2LDI0MTYyLDI0MTU5LDI0MTYxLDI0MjkwLDI0MjgyLDI0Mjg3LDI0Mjg1LDI0MjkxLDI0Mjg4LDI0MzkyLDI0NDMzLDI0NTAzLDI0NTAxLDI0OTUwLDI0OTM1LDI0OTQyLDI0OTI1LDI0OTE3LDI0OTYyLDI0OTU2LDI0OTQ0LDI0OTM5LDI0OTU4LDI0OTk5LDI0OTc2LDI1MDAzLDI0OTc0LDI1MDA0LDI0OTg2LDI0OTk2LDI0OTgwLDI1MDA2LDI1MTM0LDI1NzA1LDI1NzExLDI1NzIxLDI1NzU4LDI1Nzc4LDI1NzM2LDI1NzQ0LDI1Nzc2LDI1NzY1LDI1NzQ3LDI1NzQ5LDI1NzY5LDI1NzQ2LDI1Nzc0LDI1NzczLDI1NzcxLDI1NzU0LDI1NzcyLDI1NzUzLDI1NzYyLDI1Nzc5LDI1OTczLDI1OTc1LDI1OTc2LDI2Mjg2LDI2MjgzLDI2MjkyLDI2Mjg5LDI3MTcxLDI3MTY3LDI3MTEyLDI3MTM3LDI3MTY2LDI3MTYxLDI3MTMzLDI3MTY5LDI3MTU1LDI3MTQ2LDI3MTIzLDI3MTM4LDI3MTQxLDI3MTE3LDI3MTUzLDI3NDcyLDI3NDcwLDI3NTU2LDI3NTg5LDI3NTkwLDI4NDc5LDI4NTQwLDI4NTQ4LDI4NDk3LDI4NTE4LDI4NTAwLDI4NTUwLDI4NTI1LDI4NTA3LDI4NTM2LDI4NTI2LDI4NTU4LDI4NTM4LDI4NTI4LDI4NTE2LDI4NTY3LDI4NTA0LDI4MzczLDI4NTI3LDI4NTEyLDI4NTExLDI5MDg3LDI5MTAwLDI5MTA1LDI5MDk2LDI5MjcwLDI5MzM5LDI5NTE4LDI5NTI3LDI5ODAxLDI5ODM1LDI5ODI3LDI5ODIyLDI5ODI0LDMwMDc5LDMwMjQwLDMwMjQ5LDMwMjM5LDMwMjQ0LDMwMjQ2LDMwMjQxLDMwMjQyLDMwMzYyLDMwMzk0LDMwNDM2LDMwNjA2LDMwNTk5LDMwNjA0LDMwNjA5LDMwNjAzLDMwOTIzLDMwOTE3LDMwOTA2LDMwOTIyLDMwOTEwLDMwOTMzLDMwOTA4LDMwOTI4LDMxMjk1LDMxMjkyLDMxMjk2LDMxMjkzLDMxMjg3LDMxMjkxLDMxNDA3LDMxNDA2LDMxNjYxLDMxNjY1LDMxNjg0LDMxNjY4LDMxNjg2LDMxNjg3LDMxNjgxLDMxNjQ4LDMxNjkyLDMxOTQ2LDMyMjI0LDMyMjQ0LDMyMjM5LDMyMjUxLDMyMjE2LDMyMjM2LDMyMjIxLDMyMjMyLDMyMjI3LDMyMjE4LDMyMjIyLDMyMjMzLDMyMTU4LDMyMjE3LDMyMjQyLDMyMjQ5LDMyNjI5LDMyNjMxLDMyNjg3LDMyNzQ1LDMyODA2LDMzMTc5LDMzMTgwLDMzMTgxLDMzMTg0LDMzMTc4LDMzMTc2LDM0MDcxLDM0MTA5LDM0MDc0LDM0MDMwLDM0MDkyLDM0MDkzLDM0MDY3LDM0MDY1LDM0MDgzLDM0MDgxLDM0MDY4LDM0MDI4LDM0MDg1LDM0MDQ3LDM0MDU0LDM0NjkwLDM0Njc2LDM0Njc4LDM0NjU2LDM0NjYyLDM0NjgwLDM0NjY0LDM0NjQ5LDM0NjQ3LDM0NjM2LDM0NjQzLDM0OTA3LDM0OTA5LDM1MDg4LDM1MDc5LDM1MDkwLDM1MDkxLDM1MDkzLDM1MDgyLDM1NTE2LDM1NTM4LDM1NTI3LDM1NTI0LDM1NDc3LDM1NTMxLDM1NTc2LDM1NTA2LDM1NTI5LDM1NTIyLDM1NTE5LDM1NTA0LDM1NTQyLDM1NTMzLDM1NTEwLDM1NTEzLDM1NTQ3LDM1OTE2LDM1OTE4LDM1OTQ4LDM2MDY0LDM2MDYyLDM2MDcwLDM2MDY4LDM2MDc2LDM2MDc3LDM2MDY2LDM2MDY3LDM2MDYwLDM2MDc0LDM2MDY1LDM2MjA1LDM2MjU1LDM2MjU5LDM2Mzk1LDM2MzY4LDM2MzgxLDM2Mzg2LDM2MzY3LDM2MzkzLDM2MzgzLDM2Mzg1LDM2MzgyLDM2NTM4LDM2NjM3LDM2NjM1LDM2NjM5LDM2NjQ5LDM2NjQ2LDM2NjUwLDM2NjM2LDM2NjM4LDM2NjQ1LDM2OTY5LDM2OTc0LDM2OTY4LDM2OTczLDM2OTgzLDM3MTY4LDM3MTY1LDM3MTU5LDM3MTY5LDM3MjU1LDM3MjU3LDM3MjU5LDM3MjUxLDM3NTczLDM3NTYzLDM3NTU5LDM3NjEwLDM3NTQ4LDM3NjA0LDM3NTY5LDM3NTU1LDM3NTY0LDM3NTg2LDM3NTc1LDM3NjE2LDM3NTU0LDM4MzE3LDM4MzIxLDM4NjYwLDM4NjYyLDM4NjYzLDM4NjY1LDM4NzUyLDM4Nzk3LDM4Nzk1LDM4Nzk5LDM4OTQ1LDM4OTU1LDM4OTQwLDM5MDkxLDM5MTc4LDM5MTg3LDM5MTg2LDM5MTkyLDM5Mzg5LDM5Mzc2LDM5MzkxLDM5Mzg3LDM5Mzc3LDM5MzgxLDM5Mzc4LDM5Mzg1LDM5NjA3LDM5NjYyLDM5NjYzLDM5NzE5LDM5NzQ5LDM5NzQ4LDM5Nzk5LDM5NzkxLDQwMTk4LDQwMjAxLDQwMTk1LDQwNjE3LDQwNjM4LDQwNjU0LDIyNjk2LDQwNzg2LDIwNzU0LDIwNzYwLDIwNzU2LDIwNzUyLDIwNzU3LDIwODY0LDIwOTA2LDIwOTU3LDIxMTM3LDIxMTM5LDIxMjM1LDIyMTA1LDIyMTIzLDIyMTM3LDIyMTIxLDIyMTE2LDIyMTM2LDIyMTIyLDIyMTIwLDIyMTE3LDIyMTI5LDIyMTI3LDIyMTI0LDIyMTE0LDIyMTM0LDIyNzIxLDIyNzE4LDIyNzI3LDIyNzI1LDIyODk0LDIzMzI1LDIzMzQ4LDIzNDE2LDIzNTM2LDIzNTY2LDI0Mzk0LDI1MDEwLDI0OTc3LDI1MDAxLDI0OTcwLDI1MDM3LDI1MDE0LDI1MDIyLDI1MDM0LDI1MDMyLDI1MTM2LDI1Nzk3LDI1NzkzLDI1ODAzLDI1Nzg3LDI1Nzg4LDI1ODE4LDI1Nzk2LDI1Nzk5LDI1Nzk0LDI1ODA1LDI1NzkxLDI1ODEwLDI1ODEyLDI1NzkwLDI1OTcyLDI2MzEwLDI2MzEzLDI2Mjk3LDI2MzA4LDI2MzExLDI2Mjk2LDI3MTk3LDI3MTkyLDI3MTk0LDI3MjI1LDI3MjQzLDI3MjI0LDI3MTkzLDI3MjA0LDI3MjM0LDI3MjMzLDI3MjExLDI3MjA3LDI3MTg5LDI3MjMxLDI3MjA4LDI3NDgxLDI3NTExLDI3NjUzLDI4NjEwLDI4NTkzLDI4NTc3LDI4NjExLDI4NTgwLDI4NjA5LDI4NTgzLDI4NTk1LDI4NjA4LDI4NjAxLDI4NTk4LDI4NTgyLDI4NTc2LDI4NTk2LDI5MTE4LDI5MTI5LDI5MTM2LDI5MTM4LDI5MTI4LDI5MTQxLDI5MTEzLDI5MTM0LDI5MTQ1LDI5MTQ4LDI5MTIzLDI5MTI0LDI5NTQ0LDI5ODUyLDI5ODU5LDI5ODQ4LDI5ODU1LDI5ODU0LDI5OTIyLDI5OTY0LDI5OTY1LDMwMjYwLDMwMjY0LDMwMjY2LDMwNDM5LDMwNDM3LDMwNjI0LDMwNjIyLDMwNjIzLDMwNjI5LDMwOTUyLDMwOTM4LDMwOTU2LDMwOTUxLDMxMTQyLDMxMzA5LDMxMzEwLDMxMzAyLDMxMzA4LDMxMzA3LDMxNDE4LDMxNzA1LDMxNzYxLDMxNjg5LDMxNzE2LDMxNzA3LDMxNzEzLDMxNzIxLDMxNzE4LDMxOTU3LDMxOTU4LDMyMjY2LDMyMjczLDMyMjY0LDMyMjgzLDMyMjkxLDMyMjg2LDMyMjg1LDMyMjY1LDMyMjcyLDMyNjMzLDMyNjkwLDMyNzUyLDMyNzUzLDMyNzUwLDMyODA4LDMzMjAzLDMzMTkzLDMzMTkyLDMzMjc1LDMzMjg4LDMzMzY4LDMzMzY5LDM0MTIyLDM0MTM3LDM0MTIwLDM0MTUyLDM0MTUzLDM0MTE1LDM0MTIxLDM0MTU3LDM0MTU0LDM0MTQyLDM0NjkxLDM0NzE5LDM0NzE4LDM0NzIyLDM0NzAxLDM0OTEzLDM1MTE0LDM1MTIyLDM1MTA5LDM1MTE1LDM1MTA1LDM1MjQyLDM1MjM4LDM1NTU4LDM1NTc4LDM1NTYzLDM1NTY5LDM1NTg0LDM1NTQ4LDM1NTU5LDM1NTY2LDM1NTgyLDM1NTg1LDM1NTg2LDM1NTc1LDM1NTY1LDM1NTcxLDM1NTc0LDM1NTgwLDM1OTQ3LDM1OTQ5LDM1OTg3LDM2MDg0LDM2NDIwLDM2NDAxLDM2NDA0LDM2NDE4LDM2NDA5LDM2NDA1LDM2NjY3LDM2NjU1LDM2NjY0LDM2NjU5LDM2Nzc2LDM2Nzc0LDM2OTgxLDM2OTgwLDM2OTg0LDM2OTc4LDM2OTg4LDM2OTg2LDM3MTcyLDM3MjY2LDM3NjY0LDM3Njg2LDM3NjI0LDM3NjgzLDM3Njc5LDM3NjY2LDM3NjI4LDM3Njc1LDM3NjM2LDM3NjU4LDM3NjQ4LDM3NjcwLDM3NjY1LDM3NjUzLDM3Njc4LDM3NjU3LDM4MzMxLDM4NTY3LDM4NTY4LDM4NTcwLDM4NjEzLDM4NjcwLDM4NjczLDM4Njc4LDM4NjY5LDM4Njc1LDM4NjcxLDM4NzQ3LDM4NzQ4LDM4NzU4LDM4ODA4LDM4OTYwLDM4OTY4LDM4OTcxLDM4OTY3LDM4OTU3LDM4OTY5LDM4OTQ4LDM5MTg0LDM5MjA4LDM5MTk4LDM5MTk1LDM5MjAxLDM5MTk0LDM5NDA1LDM5Mzk0LDM5NDA5LDM5NjA4LDM5NjEyLDM5Njc1LDM5NjYxLDM5NzIwLDM5ODI1LDQwMjEzLDQwMjI3LDQwMjMwLDQwMjMyLDQwMjEwLDQwMjE5LDQwNjY0LDQwNjYwLDQwODQ1LDQwODYwLDIwNzc4LDIwNzY3LDIwNzY5LDIwNzg2LDIxMjM3LDIyMTU4LDIyMTQ0LDIyMTYwLDIyMTQ5LDIyMTUxLDIyMTU5LDIyNzQxLDIyNzM5LDIyNzM3LDIyNzM0LDIzMzQ0LDIzMzM4LDIzMzMyLDIzNDE4LDIzNjA3LDIzNjU2LDIzOTk2LDIzOTk0LDIzOTk3LDIzOTkyLDI0MTcxLDI0Mzk2LDI0NTA5LDI1MDMzLDI1MDI2LDI1MDMxLDI1MDYyLDI1MDM1LDI1MTM4LDI1MTQwLDI1ODA2LDI1ODAyLDI1ODE2LDI1ODI0LDI1ODQwLDI1ODMwLDI1ODM2LDI1ODQxLDI1ODI2LDI1ODM3LDI1OTg2LDI1OTg3LDI2MzI5LDI2MzI2LDI3MjY0LDI3Mjg0LDI3MjY4LDI3Mjk4LDI3MjkyLDI3MzU1LDI3Mjk5LDI3MjYyLDI3Mjg3LDI3MjgwLDI3Mjk2LDI3NDg0LDI3NTY2LDI3NjEwLDI3NjU2LDI4NjMyLDI4NjU3LDI4NjM5LDI4NjQwLDI4NjM1LDI4NjQ0LDI4NjUxLDI4NjU1LDI4NTQ0LDI4NjUyLDI4NjQxLDI4NjQ5LDI4NjI5LDI4NjU0LDI4NjU2LDI5MTU5LDI5MTUxLDI5MTY2LDI5MTU4LDI5MTU3LDI5MTY1LDI5MTY0LDI5MTcyLDI5MTUyLDI5MjM3LDI5MjU0LDI5NTUyLDI5NTU0LDI5ODY1LDI5ODcyLDI5ODYyLDI5ODY0LDMwMjc4LDMwMjc0LDMwMjg0LDMwNDQyLDMwNjQzLDMwNjM0LDMwNjQwLDMwNjM2LDMwNjMxLDMwNjM3LDMwNzAzLDMwOTY3LDMwOTcwLDMwOTY0LDMwOTU5LDMwOTc3LDMxMTQzLDMxMTQ2LDMxMzE5LDMxNDIzLDMxNzUxLDMxNzU3LDMxNzQyLDMxNzM1LDMxNzU2LDMxNzEyLDMxOTY4LDMxOTY0LDMxOTY2LDMxOTcwLDMxOTY3LDMxOTYxLDMxOTY1LDMyMzAyLDMyMzE4LDMyMzI2LDMyMzExLDMyMzA2LDMyMzIzLDMyMjk5LDMyMzE3LDMyMzA1LDMyMzI1LDMyMzIxLDMyMzA4LDMyMzEzLDMyMzI4LDMyMzA5LDMyMzE5LDMyMzAzLDMyNTgwLDMyNzU1LDMyNzY0LDMyODgxLDMyODgyLDMyODgwLDMyODc5LDMyODgzLDMzMjIyLDMzMjE5LDMzMjEwLDMzMjE4LDMzMjE2LDMzMjE1LDMzMjEzLDMzMjI1LDMzMjE0LDMzMjU2LDMzMjg5LDMzMzkzLDM0MjE4LDM0MTgwLDM0MTc0LDM0MjA0LDM0MTkzLDM0MTk2LDM0MjIzLDM0MjAzLDM0MTgzLDM0MjE2LDM0MTg2LDM0NDA3LDM0NzUyLDM0NzY5LDM0NzM5LDM0NzcwLDM0NzU4LDM0NzMxLDM0NzQ3LDM0NzQ2LDM0NzYwLDM0NzYzLDM1MTMxLDM1MTI2LDM1MTQwLDM1MTI4LDM1MTMzLDM1MjQ0LDM1NTk4LDM1NjA3LDM1NjA5LDM1NjExLDM1NTk0LDM1NjE2LDM1NjEzLDM1NTg4LDM1NjAwLDM1OTA1LDM1OTAzLDM1OTU1LDM2MDkwLDM2MDkzLDM2MDkyLDM2MDg4LDM2MDkxLDM2MjY0LDM2NDI1LDM2NDI3LDM2NDI0LDM2NDI2LDM2Njc2LDM2NjcwLDM2Njc0LDM2Njc3LDM2NjcxLDM2OTkxLDM2OTg5LDM2OTk2LDM2OTkzLDM2OTk0LDM2OTkyLDM3MTc3LDM3MjgzLDM3Mjc4LDM3Mjc2LDM3NzA5LDM3NzYyLDM3NjcyLDM3NzQ5LDM3NzA2LDM3NzMzLDM3NzA3LDM3NjU2LDM3NzU4LDM3NzQwLDM3NzIzLDM3NzQ0LDM3NzIyLDM3NzE2LDM4MzQ2LDM4MzQ3LDM4MzQ4LDM4MzQ0LDM4MzQyLDM4NTc3LDM4NTg0LDM4NjE0LDM4Njg0LDM4Njg2LDM4ODE2LDM4ODY3LDM4OTgyLDM5MDk0LDM5MjIxLDM5NDI1LDM5NDIzLDM5ODU0LDM5ODUxLDM5ODUwLDM5ODUzLDQwMjUxLDQwMjU1LDQwNTg3LDQwNjU1LDQwNjcwLDQwNjY4LDQwNjY5LDQwNjY3LDQwNzY2LDQwNzc5LDIxNDc0LDIyMTY1LDIyMTkwLDIyNzQ1LDIyNzQ0LDIzMzUyLDI0NDEzLDI1MDU5LDI1MTM5LDI1ODQ0LDI1ODQyLDI1ODU0LDI1ODYyLDI1ODUwLDI1ODUxLDI1ODQ3LDI2MDM5LDI2MzMyLDI2NDA2LDI3MzE1LDI3MzA4LDI3MzMxLDI3MzIzLDI3MzIwLDI3MzMwLDI3MzEwLDI3MzExLDI3NDg3LDI3NTEyLDI3NTY3LDI4NjgxLDI4NjgzLDI4NjcwLDI4Njc4LDI4NjY2LDI4Njg5LDI4Njg3LDI5MTc5LDI5MTgwLDI5MTgyLDI5MTc2LDI5NTU5LDI5NTU3LDI5ODYzLDI5ODg3LDI5OTczLDMwMjk0LDMwMjk2LDMwMjkwLDMwNjUzLDMwNjU1LDMwNjUxLDMwNjUyLDMwOTkwLDMxMTUwLDMxMzI5LDMxMzMwLDMxMzI4LDMxNDI4LDMxNDI5LDMxNzg3LDMxNzgzLDMxNzg2LDMxNzc0LDMxNzc5LDMxNzc3LDMxOTc1LDMyMzQwLDMyMzQxLDMyMzUwLDMyMzQ2LDMyMzUzLDMyMzM4LDMyMzQ1LDMyNTg0LDMyNzYxLDMyNzYzLDMyODg3LDMyODg2LDMzMjI5LDMzMjMxLDMzMjkwLDM0MjU1LDM0MjE3LDM0MjUzLDM0MjU2LDM0MjQ5LDM0MjI0LDM0MjM0LDM0MjMzLDM0MjE0LDM0Nzk5LDM0Nzk2LDM0ODAyLDM0Nzg0LDM1MjA2LDM1MjUwLDM1MzE2LDM1NjI0LDM1NjQxLDM1NjI4LDM1NjI3LDM1OTIwLDM2MTAxLDM2NDQxLDM2NDUxLDM2NDU0LDM2NDUyLDM2NDQ3LDM2NDM3LDM2NTQ0LDM2NjgxLDM2Njg1LDM2OTk5LDM2OTk1LDM3MDAwLDM3MjkxLDM3MjkyLDM3MzI4LDM3NzgwLDM3NzcwLDM3NzgyLDM3Nzk0LDM3ODExLDM3ODA2LDM3ODA0LDM3ODA4LDM3Nzg0LDM3Nzg2LDM3NzgzLDM4MzU2LDM4MzU4LDM4MzUyLDM4MzU3LDM4NjI2LDM4NjIwLDM4NjE3LDM4NjE5LDM4NjIyLDM4NjkyLDM4ODE5LDM4ODIyLDM4ODI5LDM4OTA1LDM4OTg5LDM4OTkxLDM4OTg4LDM4OTkwLDM4OTk1LDM5MDk4LDM5MjMwLDM5MjMxLDM5MjI5LDM5MjE0LDM5MzMzLDM5NDM4LDM5NjE3LDM5NjgzLDM5Njg2LDM5NzU5LDM5NzU4LDM5NzU3LDM5ODgyLDM5ODgxLDM5OTMzLDM5ODgwLDM5ODcyLDQwMjczLDQwMjg1LDQwMjg4LDQwNjcyLDQwNzI1LDQwNzQ4LDIwNzg3LDIyMTgxLDIyNzUwLDIyNzUxLDIyNzU0LDIzNTQxLDQwODQ4LDI0MzAwLDI1MDc0LDI1MDc5LDI1MDc4LDI1MDc3LDI1ODU2LDI1ODcxLDI2MzM2LDI2MzMzLDI3MzY1LDI3MzU3LDI3MzU0LDI3MzQ3LDI4Njk5LDI4NzAzLDI4NzEyLDI4Njk4LDI4NzAxLDI4NjkzLDI4Njk2LDI5MTkwLDI5MTk3LDI5MjcyLDI5MzQ2LDI5NTYwLDI5NTYyLDI5ODg1LDI5ODk4LDI5OTIzLDMwMDg3LDMwMDg2LDMwMzAzLDMwMzA1LDMwNjYzLDMxMDAxLDMxMTUzLDMxMzM5LDMxMzM3LDMxODA2LDMxODA3LDMxODAwLDMxODA1LDMxNzk5LDMxODA4LDMyMzYzLDMyMzY1LDMyMzc3LDMyMzYxLDMyMzYyLDMyNjQ1LDMyMzcxLDMyNjk0LDMyNjk3LDMyNjk2LDMzMjQwLDM0MjgxLDM0MjY5LDM0MjgyLDM0MjYxLDM0Mjc2LDM0Mjc3LDM0Mjk1LDM0ODExLDM0ODIxLDM0ODI5LDM0ODA5LDM0ODE0LDM1MTY4LDM1MTY3LDM1MTU4LDM1MTY2LDM1NjQ5LDM1Njc2LDM1NjcyLDM1NjU3LDM1Njc0LDM1NjYyLDM1NjYzLDM1NjU0LDM1NjczLDM2MTA0LDM2MTA2LDM2NDc2LDM2NDY2LDM2NDg3LDM2NDcwLDM2NDYwLDM2NDc0LDM2NDY4LDM2NjkyLDM2Njg2LDM2NzgxLDM3MDAyLDM3MDAzLDM3Mjk3LDM3Mjk0LDM3ODU3LDM3ODQxLDM3ODU1LDM3ODI3LDM3ODMyLDM3ODUyLDM3ODUzLDM3ODQ2LDM3ODU4LDM3ODM3LDM3ODQ4LDM3ODYwLDM3ODQ3LDM3ODY0LDM4MzY0LDM4NTgwLDM4NjI3LDM4Njk4LDM4Njk1LDM4NzUzLDM4ODc2LDM4OTA3LDM5MDA2LDM5MDAwLDM5MDAzLDM5MTAwLDM5MjM3LDM5MjQxLDM5NDQ2LDM5NDQ5LDM5NjkzLDM5OTEyLDM5OTExLDM5ODk0LDM5ODk5LDQwMzI5LDQwMjg5LDQwMzA2LDQwMjk4LDQwMzAwLDQwNTk0LDQwNTk5LDQwNTk1LDQwNjI4LDIxMjQwLDIyMTg0LDIyMTk5LDIyMTk4LDIyMTk2LDIyMjA0LDIyNzU2LDIzMzYwLDIzMzYzLDIzNDIxLDIzNTQyLDI0MDA5LDI1MDgwLDI1MDgyLDI1ODgwLDI1ODc2LDI1ODgxLDI2MzQyLDI2NDA3LDI3MzcyLDI4NzM0LDI4NzIwLDI4NzIyLDI5MjAwLDI5NTYzLDI5OTAzLDMwMzA2LDMwMzA5LDMxMDE0LDMxMDE4LDMxMDIwLDMxMDE5LDMxNDMxLDMxNDc4LDMxODIwLDMxODExLDMxODIxLDMxOTgzLDMxOTg0LDM2NzgyLDMyMzgxLDMyMzgwLDMyMzg2LDMyNTg4LDMyNzY4LDMzMjQyLDMzMzgyLDM0Mjk5LDM0Mjk3LDM0MzIxLDM0Mjk4LDM0MzEwLDM0MzE1LDM0MzExLDM0MzE0LDM0ODM2LDM0ODM3LDM1MTcyLDM1MjU4LDM1MzIwLDM1Njk2LDM1NjkyLDM1Njg2LDM1Njk1LDM1Njc5LDM1NjkxLDM2MTExLDM2MTA5LDM2NDg5LDM2NDgxLDM2NDg1LDM2NDgyLDM3MzAwLDM3MzIzLDM3OTEyLDM3ODkxLDM3ODg1LDM4MzY5LDM4NzA0LDM5MTA4LDM5MjUwLDM5MjQ5LDM5MzM2LDM5NDY3LDM5NDcyLDM5NDc5LDM5NDc3LDM5OTU1LDM5OTQ5LDQwNTY5LDQwNjI5LDQwNjgwLDQwNzUxLDQwNzk5LDQwODAzLDQwODAxLDIwNzkxLDIwNzkyLDIyMjA5LDIyMjA4LDIyMjEwLDIyODA0LDIzNjYwLDI0MDEzLDI1MDg0LDI1MDg2LDI1ODg1LDI1ODg0LDI2MDA1LDI2MzQ1LDI3Mzg3LDI3Mzk2LDI3Mzg2LDI3NTcwLDI4NzQ4LDI5MjExLDI5MzUxLDI5OTEwLDI5OTA4LDMwMzEzLDMwNjc1LDMxODI0LDMyMzk5LDMyMzk2LDMyNzAwLDM0MzI3LDM0MzQ5LDM0MzMwLDM0ODUxLDM0ODUwLDM0ODQ5LDM0ODQ3LDM1MTc4LDM1MTgwLDM1MjYxLDM1NzAwLDM1NzAzLDM1NzA5LDM2MTE1LDM2NDkwLDM2NDkzLDM2NDkxLDM2NzAzLDM2NzgzLDM3MzA2LDM3OTM0LDM3OTM5LDM3OTQxLDM3OTQ2LDM3OTQ0LDM3OTM4LDM3OTMxLDM4MzcwLDM4NzEyLDM4NzEzLDM4NzA2LDM4OTExLDM5MDE1LDM5MDEzLDM5MjU1LDM5NDkzLDM5NDkxLDM5NDg4LDM5NDg2LDM5NjMxLDM5NzY0LDM5NzYxLDM5OTgxLDM5OTczLDQwMzY3LDQwMzcyLDQwMzg2LDQwMzc2LDQwNjA1LDQwNjg3LDQwNzI5LDQwNzk2LDQwODA2LDQwODA3LDIwNzk2LDIwNzk1LDIyMjE2LDIyMjE4LDIyMjE3LDIzNDIzLDI0MDIwLDI0MDE4LDI0Mzk4LDI1MDg3LDI1ODkyLDI3NDAyLDI3NDg5LDI4NzUzLDI4NzYwLDI5NTY4LDI5OTI0LDMwMDkwLDMwMzE4LDMwMzE2LDMxMTU1LDMxODQwLDMxODM5LDMyODk0LDMyODkzLDMzMjQ3LDM1MTg2LDM1MTgzLDM1MzI0LDM1NzEyLDM2MTE4LDM2MTE5LDM2NDk3LDM2NDk5LDM2NzA1LDM3MTkyLDM3OTU2LDM3OTY5LDM3OTcwLDM4NzE3LDM4NzE4LDM4ODUxLDM4ODQ5LDM5MDE5LDM5MjUzLDM5NTA5LDM5NTAxLDM5NjM0LDM5NzA2LDQwMDA5LDM5OTg1LDM5OTk4LDM5OTk1LDQwNDAzLDQwNDA3LDQwNzU2LDQwODEyLDQwODEwLDQwODUyLDIyMjIwLDI0MDIyLDI1MDg4LDI1ODkxLDI1ODk5LDI1ODk4LDI2MzQ4LDI3NDA4LDI5OTE0LDMxNDM0LDMxODQ0LDMxODQzLDMxODQ1LDMyNDAzLDMyNDA2LDMyNDA0LDMzMjUwLDM0MzYwLDM0MzY3LDM0ODY1LDM1NzIyLDM3MDA4LDM3MDA3LDM3OTg3LDM3OTg0LDM3OTg4LDM4NzYwLDM5MDIzLDM5MjYwLDM5NTE0LDM5NTE1LDM5NTExLDM5NjM1LDM5NjM2LDM5NjMzLDQwMDIwLDQwMDIzLDQwMDIyLDQwNDIxLDQwNjA3LDQwNjkyLDIyMjI1LDIyNzYxLDI1OTAwLDI4NzY2LDMwMzIxLDMwMzIyLDMwNjc5LDMyNTkyLDMyNjQ4LDM0ODcwLDM0ODczLDM0OTE0LDM1NzMxLDM1NzMwLDM1NzM0LDMzMzk5LDM2MTIzLDM3MzEyLDM3OTk0LDM4NzIyLDM4NzI4LDM4NzI0LDM4ODU0LDM5MDI0LDM5NTE5LDM5NzE0LDM5NzY4LDQwMDMxLDQwNDQxLDQwNDQyLDQwNTcyLDQwNTczLDQwNzExLDQwODIzLDQwODE4LDI0MzA3LDI3NDE0LDI4NzcxLDMxODUyLDMxODU0LDM0ODc1LDM1MjY0LDM2NTEzLDM3MzEzLDM4MDAyLDM4MDAwLDM5MDI1LDM5MjYyLDM5NjM4LDM5NzE1LDQwNjUyLDI4NzcyLDMwNjgyLDM1NzM4LDM4MDA3LDM4ODU3LDM5NTIyLDM5NTI1LDMyNDEyLDM1NzQwLDM2NTIyLDM3MzE3LDM4MDEzLDM4MDE0LDM4MDEyLDQwMDU1LDQwMDU2LDQwNjk1LDM1OTI0LDM4MDE1LDQwNDc0LDI5MjI0LDM5NTMwLDM5NzI5LDQwNDc1LDQwNDc4LDMxODU4LDkzMTIsOTMxMyw5MzE0LDkzMTUsOTMxNiw5MzE3LDkzMTgsOTMxOSw5MzIwLDkzMjEsOTMzMiw5MzMzLDkzMzQsOTMzNSw5MzM2LDkzMzcsOTMzOCw5MzM5LDkzNDAsOTM0MSw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LDIwMDIyLDIwMDMxLDIwMTAxLDIwMTI4LDIwODY2LDIwODg2LDIwOTA3LDIxMjQxLDIxMzA0LDIxMzUzLDIxNDMwLDIyNzk0LDIzNDI0LDI0MDI3LDEyMDgzLDI0MTkxLDI0MzA4LDI0NDAwLDI0NDE3LDI1OTA4LDI2MDgwLDMwMDk4LDMwMzI2LDM2Nzg5LDM4NTgyLDE2OCw3MTAsMTI1NDEsMTI1NDIsMTI0NDUsMTI0NDYsMTIyOTEsMjAxODksMTIyOTMsMTIyOTQsMTIyOTUsMTI1NDAsNjUzMzksNjUzNDEsMTAwNDUsMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsODY3OSw4NjMyLDg2MzMsMTI3NTEsMTMxMjc2LDIwMDU4LDEzMTIxMCwyMDk5NCwxNzU1Myw0MDg4MCwyMDg3Miw0MDg4MSwxNjEyODcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTUwNiw2NTUwOCw2NTI4Nyw2NTI4MiwxMjg0OSw4NDcwLDg0ODEsMTI0NDMsMTI0NDQsMTE5MDQsMTE5MDgsMTE5MTAsMTE5MTEsMTE5MTIsMTE5MTQsMTE5MTYsMTE5MTcsMTE5MjUsMTE5MzIsMTE5MzMsMTE5NDEsMTE5NDMsMTE5NDYsMTE5NDgsMTE5NTAsMTE5NTgsMTE5NjQsMTE5NjYsMTE5NzQsMTE5NzgsMTE5ODAsMTE5ODEsMTE5ODMsMTE5OTAsMTE5OTEsMTE5OTgsMTIwMDMsbnVsbCxudWxsLG51bGwsNjQzLDU5Miw2MDMsNTk2LDYyOSwzMzksMjQ4LDMzMSw2NTAsNjE4LDIwMDM0LDIwMDYwLDIwOTgxLDIxMjc0LDIxMzc4LDE5OTc1LDE5OTgwLDIwMDM5LDIwMTA5LDIyMjMxLDY0MDEyLDIzNjYyLDI0NDM1LDE5OTgzLDIwODcxLDE5OTgyLDIwMDE0LDIwMTE1LDIwMTYyLDIwMTY5LDIwMTY4LDIwODg4LDIxMjQ0LDIxMzU2LDIxNDMzLDIyMzA0LDIyNzg3LDIyODI4LDIzNTY4LDI0MDYzLDI2MDgxLDI3NTcxLDI3NTk2LDI3NjY4LDI5MjQ3LDIwMDE3LDIwMDI4LDIwMjAwLDIwMTg4LDIwMjAxLDIwMTkzLDIwMTg5LDIwMTg2LDIxMDA0LDIxMjc2LDIxMzI0LDIyMzA2LDIyMzA3LDIyODA3LDIyODMxLDIzNDI1LDIzNDI4LDIzNTcwLDIzNjExLDIzNjY4LDIzNjY3LDI0MDY4LDI0MTkyLDI0MTk0LDI0NTIxLDI1MDk3LDI1MTY4LDI3NjY5LDI3NzAyLDI3NzE1LDI3NzExLDI3NzA3LDI5MzU4LDI5MzYwLDI5NTc4LDMxMTYwLDMyOTA2LDM4NDMwLDIwMjM4LDIwMjQ4LDIwMjY4LDIwMjEzLDIwMjQ0LDIwMjA5LDIwMjI0LDIwMjE1LDIwMjMyLDIwMjUzLDIwMjI2LDIwMjI5LDIwMjU4LDIwMjQzLDIwMjI4LDIwMjEyLDIwMjQyLDIwOTEzLDIxMDExLDIxMDAxLDIxMDA4LDIxMTU4LDIxMjgyLDIxMjc5LDIxMzI1LDIxMzg2LDIxNTExLDIyMjQxLDIyMjM5LDIyMzE4LDIyMzE0LDIyMzI0LDIyODQ0LDIyOTEyLDIyOTA4LDIyOTE3LDIyOTA3LDIyOTEwLDIyOTAzLDIyOTExLDIzMzgyLDIzNTczLDIzNTg5LDIzNjc2LDIzNjc0LDIzNjc1LDIzNjc4LDI0MDMxLDI0MTgxLDI0MTk2LDI0MzIyLDI0MzQ2LDI0NDM2LDI0NTMzLDI0NTMyLDI0NTI3LDI1MTgwLDI1MTgyLDI1MTg4LDI1MTg1LDI1MTkwLDI1MTg2LDI1MTc3LDI1MTg0LDI1MTc4LDI1MTg5LDI2MDk1LDI2MDk0LDI2NDMwLDI2NDI1LDI2NDI0LDI2NDI3LDI2NDI2LDI2NDMxLDI2NDI4LDI2NDE5LDI3NjcyLDI3NzE4LDI3NzMwLDI3NzQwLDI3NzI3LDI3NzIyLDI3NzMyLDI3NzIzLDI3NzI0LDI4Nzg1LDI5Mjc4LDI5MzY0LDI5MzY1LDI5NTgyLDI5OTk0LDMwMzM1LDMxMzQ5LDMyNTkzLDMzNDAwLDMzNDA0LDMzNDA4LDMzNDA1LDMzNDA3LDM0MzgxLDM1MTk4LDM3MDE3LDM3MDE1LDM3MDE2LDM3MDE5LDM3MDEyLDM4NDM0LDM4NDM2LDM4NDMyLDM4NDM1LDIwMzEwLDIwMjgzLDIwMzIyLDIwMjk3LDIwMzA3LDIwMzI0LDIwMjg2LDIwMzI3LDIwMzA2LDIwMzE5LDIwMjg5LDIwMzEyLDIwMjY5LDIwMjc1LDIwMjg3LDIwMzIxLDIwODc5LDIwOTIxLDIxMDIwLDIxMDIyLDIxMDI1LDIxMTY1LDIxMTY2LDIxMjU3LDIxMzQ3LDIxMzYyLDIxMzkwLDIxMzkxLDIxNTUyLDIxNTU5LDIxNTQ2LDIxNTg4LDIxNTczLDIxNTI5LDIxNTMyLDIxNTQxLDIxNTI4LDIxNTY1LDIxNTgzLDIxNTY5LDIxNTQ0LDIxNTQwLDIxNTc1LDIyMjU0LDIyMjQ3LDIyMjQ1LDIyMzM3LDIyMzQxLDIyMzQ4LDIyMzQ1LDIyMzQ3LDIyMzU0LDIyNzkwLDIyODQ4LDIyOTUwLDIyOTM2LDIyOTQ0LDIyOTM1LDIyOTI2LDIyOTQ2LDIyOTI4LDIyOTI3LDIyOTUxLDIyOTQ1LDIzNDM4LDIzNDQyLDIzNTkyLDIzNTk0LDIzNjkzLDIzNjk1LDIzNjg4LDIzNjkxLDIzNjg5LDIzNjk4LDIzNjkwLDIzNjg2LDIzNjk5LDIzNzAxLDI0MDMyLDI0MDc0LDI0MDc4LDI0MjAzLDI0MjAxLDI0MjA0LDI0MjAwLDI0MjA1LDI0MzI1LDI0MzQ5LDI0NDQwLDI0NDM4LDI0NTMwLDI0NTI5LDI0NTI4LDI0NTU3LDI0NTUyLDI0NTU4LDI0NTYzLDI0NTQ1LDI0NTQ4LDI0NTQ3LDI0NTcwLDI0NTU5LDI0NTY3LDI0NTcxLDI0NTc2LDI0NTY0LDI1MTQ2LDI1MjE5LDI1MjI4LDI1MjMwLDI1MjMxLDI1MjM2LDI1MjIzLDI1MjAxLDI1MjExLDI1MjEwLDI1MjAwLDI1MjE3LDI1MjI0LDI1MjA3LDI1MjEzLDI1MjAyLDI1MjA0LDI1OTExLDI2MDk2LDI2MTAwLDI2MDk5LDI2MDk4LDI2MTAxLDI2NDM3LDI2NDM5LDI2NDU3LDI2NDUzLDI2NDQ0LDI2NDQwLDI2NDYxLDI2NDQ1LDI2NDU4LDI2NDQzLDI3NjAwLDI3NjczLDI3Njc0LDI3NzY4LDI3NzUxLDI3NzU1LDI3NzgwLDI3Nzg3LDI3NzkxLDI3NzYxLDI3NzU5LDI3NzUzLDI3ODAyLDI3NzU3LDI3NzgzLDI3Nzk3LDI3ODA0LDI3NzUwLDI3NzYzLDI3NzQ5LDI3NzcxLDI3NzkwLDI4Nzg4LDI4Nzk0LDI5MjgzLDI5Mzc1LDI5MzczLDI5Mzc5LDI5MzgyLDI5Mzc3LDI5MzcwLDI5MzgxLDI5NTg5LDI5NTkxLDI5NTg3LDI5NTg4LDI5NTg2LDMwMDEwLDMwMDA5LDMwMTAwLDMwMTAxLDMwMzM3LDMxMDM3LDMyODIwLDMyOTE3LDMyOTIxLDMyOTEyLDMyOTE0LDMyOTI0LDMzNDI0LDMzNDIzLDMzNDEzLDMzNDIyLDMzNDI1LDMzNDI3LDMzNDE4LDMzNDExLDMzNDEyLDM1OTYwLDM2ODA5LDM2Nzk5LDM3MDIzLDM3MDI1LDM3MDI5LDM3MDIyLDM3MDMxLDM3MDI0LDM4NDQ4LDM4NDQwLDM4NDQ3LDM4NDQ1LDIwMDE5LDIwMzc2LDIwMzQ4LDIwMzU3LDIwMzQ5LDIwMzUyLDIwMzU5LDIwMzQyLDIwMzQwLDIwMzYxLDIwMzU2LDIwMzQzLDIwMzAwLDIwMzc1LDIwMzMwLDIwMzc4LDIwMzQ1LDIwMzUzLDIwMzQ0LDIwMzY4LDIwMzgwLDIwMzcyLDIwMzgyLDIwMzcwLDIwMzU0LDIwMzczLDIwMzMxLDIwMzM0LDIwODk0LDIwOTI0LDIwOTI2LDIxMDQ1LDIxMDQyLDIxMDQzLDIxMDYyLDIxMDQxLDIxMTgwLDIxMjU4LDIxMjU5LDIxMzA4LDIxMzk0LDIxMzk2LDIxNjM5LDIxNjMxLDIxNjMzLDIxNjQ5LDIxNjM0LDIxNjQwLDIxNjExLDIxNjI2LDIxNjMwLDIxNjA1LDIxNjEyLDIxNjIwLDIxNjA2LDIxNjQ1LDIxNjE1LDIxNjAxLDIxNjAwLDIxNjU2LDIxNjAzLDIxNjA3LDIxNjA0LDIyMjYzLDIyMjY1LDIyMzgzLDIyMzg2LDIyMzgxLDIyMzc5LDIyMzg1LDIyMzg0LDIyMzkwLDIyNDAwLDIyMzg5LDIyMzk1LDIyMzg3LDIyMzg4LDIyMzcwLDIyMzc2LDIyMzk3LDIyNzk2LDIyODUzLDIyOTY1LDIyOTcwLDIyOTkxLDIyOTkwLDIyOTYyLDIyOTg4LDIyOTc3LDIyOTY2LDIyOTcyLDIyOTc5LDIyOTk4LDIyOTYxLDIyOTczLDIyOTc2LDIyOTg0LDIyOTY0LDIyOTgzLDIzMzk0LDIzMzk3LDIzNDQzLDIzNDQ1LDIzNjIwLDIzNjIzLDIzNzI2LDIzNzE2LDIzNzEyLDIzNzMzLDIzNzI3LDIzNzIwLDIzNzI0LDIzNzExLDIzNzE1LDIzNzI1LDIzNzE0LDIzNzIyLDIzNzE5LDIzNzA5LDIzNzE3LDIzNzM0LDIzNzI4LDIzNzE4LDI0MDg3LDI0MDg0LDI0MDg5LDI0MzYwLDI0MzU0LDI0MzU1LDI0MzU2LDI0NDA0LDI0NDUwLDI0NDQ2LDI0NDQ1LDI0NTQyLDI0NTQ5LDI0NjIxLDI0NjE0LDI0NjAxLDI0NjI2LDI0NTg3LDI0NjI4LDI0NTg2LDI0NTk5LDI0NjI3LDI0NjAyLDI0NjA2LDI0NjIwLDI0NjEwLDI0NTg5LDI0NTkyLDI0NjIyLDI0NTk1LDI0NTkzLDI0NTg4LDI0NTg1LDI0NjA0LDI1MTA4LDI1MTQ5LDI1MjYxLDI1MjY4LDI1Mjk3LDI1Mjc4LDI1MjU4LDI1MjcwLDI1MjkwLDI1MjYyLDI1MjY3LDI1MjYzLDI1Mjc1LDI1MjU3LDI1MjY0LDI1MjcyLDI1OTE3LDI2MDI0LDI2MDQzLDI2MTIxLDI2MTA4LDI2MTE2LDI2MTMwLDI2MTIwLDI2MTA3LDI2MTE1LDI2MTIzLDI2MTI1LDI2MTE3LDI2MTA5LDI2MTI5LDI2MTI4LDI2MzU4LDI2Mzc4LDI2NTAxLDI2NDc2LDI2NTEwLDI2NTE0LDI2NDg2LDI2NDkxLDI2NTIwLDI2NTAyLDI2NTAwLDI2NDg0LDI2NTA5LDI2NTA4LDI2NDkwLDI2NTI3LDI2NTEzLDI2NTIxLDI2NDk5LDI2NDkzLDI2NDk3LDI2NDg4LDI2NDg5LDI2NTE2LDI3NDI5LDI3NTIwLDI3NTE4LDI3NjE0LDI3Njc3LDI3Nzk1LDI3ODg0LDI3ODgzLDI3ODg2LDI3ODY1LDI3ODMwLDI3ODYwLDI3ODIxLDI3ODc5LDI3ODMxLDI3ODU2LDI3ODQyLDI3ODM0LDI3ODQzLDI3ODQ2LDI3ODg1LDI3ODkwLDI3ODU4LDI3ODY5LDI3ODI4LDI3Nzg2LDI3ODA1LDI3Nzc2LDI3ODcwLDI3ODQwLDI3OTUyLDI3ODUzLDI3ODQ3LDI3ODI0LDI3ODk3LDI3ODU1LDI3ODgxLDI3ODU3LDI4ODIwLDI4ODI0LDI4ODA1LDI4ODE5LDI4ODA2LDI4ODA0LDI4ODE3LDI4ODIyLDI4ODAyLDI4ODI2LDI4ODAzLDI5MjkwLDI5Mzk4LDI5Mzg3LDI5NDAwLDI5Mzg1LDI5NDA0LDI5Mzk0LDI5Mzk2LDI5NDAyLDI5Mzg4LDI5MzkzLDI5NjA0LDI5NjAxLDI5NjEzLDI5NjA2LDI5NjAyLDI5NjAwLDI5NjEyLDI5NTk3LDI5OTE3LDI5OTI4LDMwMDE1LDMwMDE2LDMwMDE0LDMwMDkyLDMwMTA0LDMwMzgzLDMwNDUxLDMwNDQ5LDMwNDQ4LDMwNDUzLDMwNzEyLDMwNzE2LDMwNzEzLDMwNzE1LDMwNzE0LDMwNzExLDMxMDQyLDMxMDM5LDMxMTczLDMxMzUyLDMxMzU1LDMxNDgzLDMxODYxLDMxOTk3LDMyODIxLDMyOTExLDMyOTQyLDMyOTMxLDMyOTUyLDMyOTQ5LDMyOTQxLDMzMzEyLDMzNDQwLDMzNDcyLDMzNDUxLDMzNDM0LDMzNDMyLDMzNDM1LDMzNDYxLDMzNDQ3LDMzNDU0LDMzNDY4LDMzNDM4LDMzNDY2LDMzNDYwLDMzNDQ4LDMzNDQxLDMzNDQ5LDMzNDc0LDMzNDQ0LDMzNDc1LDMzNDYyLDMzNDQyLDM0NDE2LDM0NDE1LDM0NDEzLDM0NDE0LDM1OTI2LDM2ODE4LDM2ODExLDM2ODE5LDM2ODEzLDM2ODIyLDM2ODIxLDM2ODIzLDM3MDQyLDM3MDQ0LDM3MDM5LDM3MDQzLDM3MDQwLDM4NDU3LDM4NDYxLDM4NDYwLDM4NDU4LDM4NDY3LDIwNDI5LDIwNDIxLDIwNDM1LDIwNDAyLDIwNDI1LDIwNDI3LDIwNDE3LDIwNDM2LDIwNDQ0LDIwNDQxLDIwNDExLDIwNDAzLDIwNDQzLDIwNDIzLDIwNDM4LDIwNDEwLDIwNDE2LDIwNDA5LDIwNDYwLDIxMDYwLDIxMDY1LDIxMTg0LDIxMTg2LDIxMzA5LDIxMzcyLDIxMzk5LDIxMzk4LDIxNDAxLDIxNDAwLDIxNjkwLDIxNjY1LDIxNjc3LDIxNjY5LDIxNzExLDIxNjk5LDMzNTQ5LDIxNjg3LDIxNjc4LDIxNzE4LDIxNjg2LDIxNzAxLDIxNzAyLDIxNjY0LDIxNjE2LDIxNjkyLDIxNjY2LDIxNjk0LDIxNjE4LDIxNzI2LDIxNjgwLDIyNDUzLDIyNDMwLDIyNDMxLDIyNDM2LDIyNDEyLDIyNDIzLDIyNDI5LDIyNDI3LDIyNDIwLDIyNDI0LDIyNDE1LDIyNDI1LDIyNDM3LDIyNDI2LDIyNDIxLDIyNzcyLDIyNzk3LDIyODY3LDIzMDA5LDIzMDA2LDIzMDIyLDIzMDQwLDIzMDI1LDIzMDA1LDIzMDM0LDIzMDM3LDIzMDM2LDIzMDMwLDIzMDEyLDIzMDI2LDIzMDMxLDIzMDAzLDIzMDE3LDIzMDI3LDIzMDI5LDIzMDA4LDIzMDM4LDIzMDI4LDIzMDIxLDIzNDY0LDIzNjI4LDIzNzYwLDIzNzY4LDIzNzU2LDIzNzY3LDIzNzU1LDIzNzcxLDIzNzc0LDIzNzcwLDIzNzUzLDIzNzUxLDIzNzU0LDIzNzY2LDIzNzYzLDIzNzY0LDIzNzU5LDIzNzUyLDIzNzUwLDIzNzU4LDIzNzc1LDIzODAwLDI0MDU3LDI0MDk3LDI0MDk4LDI0MDk5LDI0MDk2LDI0MTAwLDI0MjQwLDI0MjI4LDI0MjI2LDI0MjE5LDI0MjI3LDI0MjI5LDI0MzI3LDI0MzY2LDI0NDA2LDI0NDU0LDI0NjMxLDI0NjMzLDI0NjYwLDI0NjkwLDI0NjcwLDI0NjQ1LDI0NjU5LDI0NjQ3LDI0NjQ5LDI0NjY3LDI0NjUyLDI0NjQwLDI0NjQyLDI0NjcxLDI0NjEyLDI0NjQ0LDI0NjY0LDI0Njc4LDI0Njg2LDI1MTU0LDI1MTU1LDI1Mjk1LDI1MzU3LDI1MzU1LDI1MzMzLDI1MzU4LDI1MzQ3LDI1MzIzLDI1MzM3LDI1MzU5LDI1MzU2LDI1MzM2LDI1MzM0LDI1MzQ0LDI1MzYzLDI1MzY0LDI1MzM4LDI1MzY1LDI1MzM5LDI1MzI4LDI1OTIxLDI1OTIzLDI2MDI2LDI2MDQ3LDI2MTY2LDI2MTQ1LDI2MTYyLDI2MTY1LDI2MTQwLDI2MTUwLDI2MTQ2LDI2MTYzLDI2MTU1LDI2MTcwLDI2MTQxLDI2MTY0LDI2MTY5LDI2MTU4LDI2MzgzLDI2Mzg0LDI2NTYxLDI2NjEwLDI2NTY4LDI2NTU0LDI2NTg4LDI2NTU1LDI2NjE2LDI2NTg0LDI2NTYwLDI2NTUxLDI2NTY1LDI2NjAzLDI2NTk2LDI2NTkxLDI2NTQ5LDI2NTczLDI2NTQ3LDI2NjE1LDI2NjE0LDI2NjA2LDI2NTk1LDI2NTYyLDI2NTUzLDI2NTc0LDI2NTk5LDI2NjA4LDI2NTQ2LDI2NjIwLDI2NTY2LDI2NjA1LDI2NTcyLDI2NTQyLDI2NTk4LDI2NTg3LDI2NjE4LDI2NTY5LDI2NTcwLDI2NTYzLDI2NjAyLDI2NTcxLDI3NDMyLDI3NTIyLDI3NTI0LDI3NTc0LDI3NjA2LDI3NjA4LDI3NjE2LDI3NjgwLDI3NjgxLDI3OTQ0LDI3OTU2LDI3OTQ5LDI3OTM1LDI3OTY0LDI3OTY3LDI3OTIyLDI3OTE0LDI3ODY2LDI3OTU1LDI3OTA4LDI3OTI5LDI3OTYyLDI3OTMwLDI3OTIxLDI3OTA0LDI3OTMzLDI3OTcwLDI3OTA1LDI3OTI4LDI3OTU5LDI3OTA3LDI3OTE5LDI3OTY4LDI3OTExLDI3OTM2LDI3OTQ4LDI3OTEyLDI3OTM4LDI3OTEzLDI3OTIwLDI4ODU1LDI4ODMxLDI4ODYyLDI4ODQ5LDI4ODQ4LDI4ODMzLDI4ODUyLDI4ODUzLDI4ODQxLDI5MjQ5LDI5MjU3LDI5MjU4LDI5MjkyLDI5Mjk2LDI5Mjk5LDI5Mjk0LDI5Mzg2LDI5NDEyLDI5NDE2LDI5NDE5LDI5NDA3LDI5NDE4LDI5NDE0LDI5NDExLDI5NTczLDI5NjQ0LDI5NjM0LDI5NjQwLDI5NjM3LDI5NjI1LDI5NjIyLDI5NjIxLDI5NjIwLDI5Njc1LDI5NjMxLDI5NjM5LDI5NjMwLDI5NjM1LDI5NjM4LDI5NjI0LDI5NjQzLDI5OTMyLDI5OTM0LDI5OTk4LDMwMDIzLDMwMDI0LDMwMTE5LDMwMTIyLDMwMzI5LDMwNDA0LDMwNDcyLDMwNDY3LDMwNDY4LDMwNDY5LDMwNDc0LDMwNDU1LDMwNDU5LDMwNDU4LDMwNjk1LDMwNjk2LDMwNzI2LDMwNzM3LDMwNzM4LDMwNzI1LDMwNzM2LDMwNzM1LDMwNzM0LDMwNzI5LDMwNzIzLDMwNzM5LDMxMDUwLDMxMDUyLDMxMDUxLDMxMDQ1LDMxMDQ0LDMxMTg5LDMxMTgxLDMxMTgzLDMxMTkwLDMxMTgyLDMxMzYwLDMxMzU4LDMxNDQxLDMxNDg4LDMxNDg5LDMxODY2LDMxODY0LDMxODY1LDMxODcxLDMxODcyLDMxODczLDMyMDAzLDMyMDA4LDMyMDAxLDMyNjAwLDMyNjU3LDMyNjUzLDMyNzAyLDMyNzc1LDMyNzgyLDMyNzgzLDMyNzg4LDMyODIzLDMyOTg0LDMyOTY3LDMyOTkyLDMyOTc3LDMyOTY4LDMyOTYyLDMyOTc2LDMyOTY1LDMyOTk1LDMyOTg1LDMyOTg4LDMyOTcwLDMyOTgxLDMyOTY5LDMyOTc1LDMyOTgzLDMyOTk4LDMyOTczLDMzMjc5LDMzMzEzLDMzNDI4LDMzNDk3LDMzNTM0LDMzNTI5LDMzNTQzLDMzNTEyLDMzNTM2LDMzNDkzLDMzNTk0LDMzNTE1LDMzNDk0LDMzNTI0LDMzNTE2LDMzNTA1LDMzNTIyLDMzNTI1LDMzNTQ4LDMzNTMxLDMzNTI2LDMzNTIwLDMzNTE0LDMzNTA4LDMzNTA0LDMzNTMwLDMzNTIzLDMzNTE3LDM0NDIzLDM0NDIwLDM0NDI4LDM0NDE5LDM0ODgxLDM0ODk0LDM0OTE5LDM0OTIyLDM0OTIxLDM1MjgzLDM1MzMyLDM1MzM1LDM2MjEwLDM2ODM1LDM2ODMzLDM2ODQ2LDM2ODMyLDM3MTA1LDM3MDUzLDM3MDU1LDM3MDc3LDM3MDYxLDM3MDU0LDM3MDYzLDM3MDY3LDM3MDY0LDM3MzMyLDM3MzMxLDM4NDg0LDM4NDc5LDM4NDgxLDM4NDgzLDM4NDc0LDM4NDc4LDIwNTEwLDIwNDg1LDIwNDg3LDIwNDk5LDIwNTE0LDIwNTI4LDIwNTA3LDIwNDY5LDIwNDY4LDIwNTMxLDIwNTM1LDIwNTI0LDIwNDcwLDIwNDcxLDIwNTAzLDIwNTA4LDIwNTEyLDIwNTE5LDIwNTMzLDIwNTI3LDIwNTI5LDIwNDk0LDIwODI2LDIwODg0LDIwODgzLDIwOTM4LDIwOTMyLDIwOTMzLDIwOTM2LDIwOTQyLDIxMDg5LDIxMDgyLDIxMDc0LDIxMDg2LDIxMDg3LDIxMDc3LDIxMDkwLDIxMTk3LDIxMjYyLDIxNDA2LDIxNzk4LDIxNzMwLDIxNzgzLDIxNzc4LDIxNzM1LDIxNzQ3LDIxNzMyLDIxNzg2LDIxNzU5LDIxNzY0LDIxNzY4LDIxNzM5LDIxNzc3LDIxNzY1LDIxNzQ1LDIxNzcwLDIxNzU1LDIxNzUxLDIxNzUyLDIxNzI4LDIxNzc0LDIxNzYzLDIxNzcxLDIyMjczLDIyMjc0LDIyNDc2LDIyNTc4LDIyNDg1LDIyNDgyLDIyNDU4LDIyNDcwLDIyNDYxLDIyNDYwLDIyNDU2LDIyNDU0LDIyNDYzLDIyNDcxLDIyNDgwLDIyNDU3LDIyNDY1LDIyNzk4LDIyODU4LDIzMDY1LDIzMDYyLDIzMDg1LDIzMDg2LDIzMDYxLDIzMDU1LDIzMDYzLDIzMDUwLDIzMDcwLDIzMDkxLDIzNDA0LDIzNDYzLDIzNDY5LDIzNDY4LDIzNTU1LDIzNjM4LDIzNjM2LDIzNzg4LDIzODA3LDIzNzkwLDIzNzkzLDIzNzk5LDIzODA4LDIzODAxLDI0MTA1LDI0MTA0LDI0MjMyLDI0MjM4LDI0MjM0LDI0MjM2LDI0MzcxLDI0MzY4LDI0NDIzLDI0NjY5LDI0NjY2LDI0Njc5LDI0NjQxLDI0NzM4LDI0NzEyLDI0NzA0LDI0NzIyLDI0NzA1LDI0NzMzLDI0NzA3LDI0NzI1LDI0NzMxLDI0NzI3LDI0NzExLDI0NzMyLDI0NzE4LDI1MTEzLDI1MTU4LDI1MzMwLDI1MzYwLDI1NDMwLDI1Mzg4LDI1NDEyLDI1NDEzLDI1Mzk4LDI1NDExLDI1NTcyLDI1NDAxLDI1NDE5LDI1NDE4LDI1NDA0LDI1Mzg1LDI1NDA5LDI1Mzk2LDI1NDMyLDI1NDI4LDI1NDMzLDI1Mzg5LDI1NDE1LDI1Mzk1LDI1NDM0LDI1NDI1LDI1NDAwLDI1NDMxLDI1NDA4LDI1NDE2LDI1OTMwLDI1OTI2LDI2MDU0LDI2MDUxLDI2MDUyLDI2MDUwLDI2MTg2LDI2MjA3LDI2MTgzLDI2MTkzLDI2Mzg2LDI2Mzg3LDI2NjU1LDI2NjUwLDI2Njk3LDI2Njc0LDI2Njc1LDI2NjgzLDI2Njk5LDI2NzAzLDI2NjQ2LDI2NjczLDI2NjUyLDI2Njc3LDI2NjY3LDI2NjY5LDI2NjcxLDI2NzAyLDI2NjkyLDI2Njc2LDI2NjUzLDI2NjQyLDI2NjQ0LDI2NjYyLDI2NjY0LDI2NjcwLDI2NzAxLDI2NjgyLDI2NjYxLDI2NjU2LDI3NDM2LDI3NDM5LDI3NDM3LDI3NDQxLDI3NDQ0LDI3NTAxLDMyODk4LDI3NTI4LDI3NjIyLDI3NjIwLDI3NjI0LDI3NjE5LDI3NjE4LDI3NjIzLDI3Njg1LDI4MDI2LDI4MDAzLDI4MDA0LDI4MDIyLDI3OTE3LDI4MDAxLDI4MDUwLDI3OTkyLDI4MDAyLDI4MDEzLDI4MDE1LDI4MDQ5LDI4MDQ1LDI4MTQzLDI4MDMxLDI4MDM4LDI3OTk4LDI4MDA3LDI4MDAwLDI4MDU1LDI4MDE2LDI4MDI4LDI3OTk5LDI4MDM0LDI4MDU2LDI3OTUxLDI4MDA4LDI4MDQzLDI4MDMwLDI4MDMyLDI4MDM2LDI3OTI2LDI4MDM1LDI4MDI3LDI4MDI5LDI4MDIxLDI4MDQ4LDI4ODkyLDI4ODgzLDI4ODgxLDI4ODkzLDI4ODc1LDMyNTY5LDI4ODk4LDI4ODg3LDI4ODgyLDI4ODk0LDI4ODk2LDI4ODg0LDI4ODc3LDI4ODY5LDI4ODcwLDI4ODcxLDI4ODkwLDI4ODc4LDI4ODk3LDI5MjUwLDI5MzA0LDI5MzAzLDI5MzAyLDI5NDQwLDI5NDM0LDI5NDI4LDI5NDM4LDI5NDMwLDI5NDI3LDI5NDM1LDI5NDQxLDI5NjUxLDI5NjU3LDI5NjY5LDI5NjU0LDI5NjI4LDI5NjcxLDI5NjY3LDI5NjczLDI5NjYwLDI5NjUwLDI5NjU5LDI5NjUyLDI5NjYxLDI5NjU4LDI5NjU1LDI5NjU2LDI5NjcyLDI5OTE4LDI5OTE5LDI5OTQwLDI5OTQxLDI5OTg1LDMwMDQzLDMwMDQ3LDMwMTI4LDMwMTQ1LDMwMTM5LDMwMTQ4LDMwMTQ0LDMwMTQzLDMwMTM0LDMwMTM4LDMwMzQ2LDMwNDA5LDMwNDkzLDMwNDkxLDMwNDgwLDMwNDgzLDMwNDgyLDMwNDk5LDMwNDgxLDMwNDg1LDMwNDg5LDMwNDkwLDMwNDk4LDMwNTAzLDMwNzU1LDMwNzY0LDMwNzU0LDMwNzczLDMwNzY3LDMwNzYwLDMwNzY2LDMwNzYzLDMwNzUzLDMwNzYxLDMwNzcxLDMwNzYyLDMwNzY5LDMxMDYwLDMxMDY3LDMxMDU1LDMxMDY4LDMxMDU5LDMxMDU4LDMxMDU3LDMxMjExLDMxMjEyLDMxMjAwLDMxMjE0LDMxMjEzLDMxMjEwLDMxMTk2LDMxMTk4LDMxMTk3LDMxMzY2LDMxMzY5LDMxMzY1LDMxMzcxLDMxMzcyLDMxMzcwLDMxMzY3LDMxNDQ4LDMxNTA0LDMxNDkyLDMxNTA3LDMxNDkzLDMxNTAzLDMxNDk2LDMxNDk4LDMxNTAyLDMxNDk3LDMxNTA2LDMxODc2LDMxODg5LDMxODgyLDMxODg0LDMxODgwLDMxODg1LDMxODc3LDMyMDMwLDMyMDI5LDMyMDE3LDMyMDE0LDMyMDI0LDMyMDIyLDMyMDE5LDMyMDMxLDMyMDE4LDMyMDE1LDMyMDEyLDMyNjA0LDMyNjA5LDMyNjA2LDMyNjA4LDMyNjA1LDMyNjAzLDMyNjYyLDMyNjU4LDMyNzA3LDMyNzA2LDMyNzA0LDMyNzkwLDMyODMwLDMyODI1LDMzMDE4LDMzMDEwLDMzMDE3LDMzMDEzLDMzMDI1LDMzMDE5LDMzMDI0LDMzMjgxLDMzMzI3LDMzMzE3LDMzNTg3LDMzNTgxLDMzNjA0LDMzNTYxLDMzNjE3LDMzNTczLDMzNjIyLDMzNTk5LDMzNjAxLDMzNTc0LDMzNTY0LDMzNTcwLDMzNjAyLDMzNjE0LDMzNTYzLDMzNTc4LDMzNTQ0LDMzNTk2LDMzNjEzLDMzNTU4LDMzNTcyLDMzNTY4LDMzNTkxLDMzNTgzLDMzNTc3LDMzNjA3LDMzNjA1LDMzNjEyLDMzNjE5LDMzNTY2LDMzNTgwLDMzNjExLDMzNTc1LDMzNjA4LDM0Mzg3LDM0Mzg2LDM0NDY2LDM0NDcyLDM0NDU0LDM0NDQ1LDM0NDQ5LDM0NDYyLDM0NDM5LDM0NDU1LDM0NDM4LDM0NDQzLDM0NDU4LDM0NDM3LDM0NDY5LDM0NDU3LDM0NDY1LDM0NDcxLDM0NDUzLDM0NDU2LDM0NDQ2LDM0NDYxLDM0NDQ4LDM0NDUyLDM0ODgzLDM0ODg0LDM0OTI1LDM0OTMzLDM0OTM0LDM0OTMwLDM0OTQ0LDM0OTI5LDM0OTQzLDM0OTI3LDM0OTQ3LDM0OTQyLDM0OTMyLDM0OTQwLDM1MzQ2LDM1OTExLDM1OTI3LDM1OTYzLDM2MDA0LDM2MDAzLDM2MjE0LDM2MjE2LDM2Mjc3LDM2Mjc5LDM2Mjc4LDM2NTYxLDM2NTYzLDM2ODYyLDM2ODUzLDM2ODY2LDM2ODYzLDM2ODU5LDM2ODY4LDM2ODYwLDM2ODU0LDM3MDc4LDM3MDg4LDM3MDgxLDM3MDgyLDM3MDkxLDM3MDg3LDM3MDkzLDM3MDgwLDM3MDgzLDM3MDc5LDM3MDg0LDM3MDkyLDM3MjAwLDM3MTk4LDM3MTk5LDM3MzMzLDM3MzQ2LDM3MzM4LDM4NDkyLDM4NDk1LDM4NTg4LDM5MTM5LDM5NjQ3LDM5NzI3LDIwMDk1LDIwNTkyLDIwNTg2LDIwNTc3LDIwNTc0LDIwNTc2LDIwNTYzLDIwNTU1LDIwNTczLDIwNTk0LDIwNTUyLDIwNTU3LDIwNTQ1LDIwNTcxLDIwNTU0LDIwNTc4LDIwNTAxLDIwNTQ5LDIwNTc1LDIwNTg1LDIwNTg3LDIwNTc5LDIwNTgwLDIwNTUwLDIwNTQ0LDIwNTkwLDIwNTk1LDIwNTY3LDIwNTYxLDIwOTQ0LDIxMDk5LDIxMTAxLDIxMTAwLDIxMTAyLDIxMjA2LDIxMjAzLDIxMjkzLDIxNDA0LDIxODc3LDIxODc4LDIxODIwLDIxODM3LDIxODQwLDIxODEyLDIxODAyLDIxODQxLDIxODU4LDIxODE0LDIxODEzLDIxODA4LDIxODQyLDIxODI5LDIxNzcyLDIxODEwLDIxODYxLDIxODM4LDIxODE3LDIxODMyLDIxODA1LDIxODE5LDIxODI0LDIxODM1LDIyMjgyLDIyMjc5LDIyNTIzLDIyNTQ4LDIyNDk4LDIyNTE4LDIyNDkyLDIyNTE2LDIyNTI4LDIyNTA5LDIyNTI1LDIyNTM2LDIyNTIwLDIyNTM5LDIyNTE1LDIyNDc5LDIyNTM1LDIyNTEwLDIyNDk5LDIyNTE0LDIyNTAxLDIyNTA4LDIyNDk3LDIyNTQyLDIyNTI0LDIyNTQ0LDIyNTAzLDIyNTI5LDIyNTQwLDIyNTEzLDIyNTA1LDIyNTEyLDIyNTQxLDIyNTMyLDIyODc2LDIzMTM2LDIzMTI4LDIzMTI1LDIzMTQzLDIzMTM0LDIzMDk2LDIzMDkzLDIzMTQ5LDIzMTIwLDIzMTM1LDIzMTQxLDIzMTQ4LDIzMTIzLDIzMTQwLDIzMTI3LDIzMTA3LDIzMTMzLDIzMTIyLDIzMTA4LDIzMTMxLDIzMTEyLDIzMTgyLDIzMTAyLDIzMTE3LDIzMDk3LDIzMTE2LDIzMTUyLDIzMTQ1LDIzMTExLDIzMTIxLDIzMTI2LDIzMTA2LDIzMTMyLDIzNDEwLDIzNDA2LDIzNDg5LDIzNDg4LDIzNjQxLDIzODM4LDIzODE5LDIzODM3LDIzODM0LDIzODQwLDIzODIwLDIzODQ4LDIzODIxLDIzODQ2LDIzODQ1LDIzODIzLDIzODU2LDIzODI2LDIzODQzLDIzODM5LDIzODU0LDI0MTI2LDI0MTE2LDI0MjQxLDI0MjQ0LDI0MjQ5LDI0MjQyLDI0MjQzLDI0Mzc0LDI0Mzc2LDI0NDc1LDI0NDcwLDI0NDc5LDI0NzE0LDI0NzIwLDI0NzEwLDI0NzY2LDI0NzUyLDI0NzYyLDI0Nzg3LDI0Nzg4LDI0NzgzLDI0ODA0LDI0NzkzLDI0Nzk3LDI0Nzc2LDI0NzUzLDI0Nzk1LDI0NzU5LDI0Nzc4LDI0NzY3LDI0NzcxLDI0NzgxLDI0NzY4LDI1Mzk0LDI1NDQ1LDI1NDgyLDI1NDc0LDI1NDY5LDI1NTMzLDI1NTAyLDI1NTE3LDI1NTAxLDI1NDk1LDI1NTE1LDI1NDg2LDI1NDU1LDI1NDc5LDI1NDg4LDI1NDU0LDI1NTE5LDI1NDYxLDI1NTAwLDI1NDUzLDI1NTE4LDI1NDY4LDI1NTA4LDI1NDAzLDI1NTAzLDI1NDY0LDI1NDc3LDI1NDczLDI1NDg5LDI1NDg1LDI1NDU2LDI1OTM5LDI2MDYxLDI2MjEzLDI2MjA5LDI2MjAzLDI2MjAxLDI2MjA0LDI2MjEwLDI2MzkyLDI2NzQ1LDI2NzU5LDI2NzY4LDI2NzgwLDI2NzMzLDI2NzM0LDI2Nzk4LDI2Nzk1LDI2OTY2LDI2NzM1LDI2Nzg3LDI2Nzk2LDI2NzkzLDI2NzQxLDI2NzQwLDI2ODAyLDI2NzY3LDI2NzQzLDI2NzcwLDI2NzQ4LDI2NzMxLDI2NzM4LDI2Nzk0LDI2NzUyLDI2NzM3LDI2NzUwLDI2Nzc5LDI2Nzc0LDI2NzYzLDI2Nzg0LDI2NzYxLDI2Nzg4LDI2NzQ0LDI2NzQ3LDI2NzY5LDI2NzY0LDI2NzYyLDI2NzQ5LDI3NDQ2LDI3NDQzLDI3NDQ3LDI3NDQ4LDI3NTM3LDI3NTM1LDI3NTMzLDI3NTM0LDI3NTMyLDI3NjkwLDI4MDk2LDI4MDc1LDI4MDg0LDI4MDgzLDI4Mjc2LDI4MDc2LDI4MTM3LDI4MTMwLDI4MDg3LDI4MTUwLDI4MTE2LDI4MTYwLDI4MTA0LDI4MTI4LDI4MTI3LDI4MTE4LDI4MDk0LDI4MTMzLDI4MTI0LDI4MTI1LDI4MTIzLDI4MTQ4LDI4MTA2LDI4MDkzLDI4MTQxLDI4MTQ0LDI4MDkwLDI4MTE3LDI4MDk4LDI4MTExLDI4MTA1LDI4MTEyLDI4MTQ2LDI4MTE1LDI4MTU3LDI4MTE5LDI4MTA5LDI4MTMxLDI4MDkxLDI4OTIyLDI4OTQxLDI4OTE5LDI4OTUxLDI4OTE2LDI4OTQwLDI4OTEyLDI4OTMyLDI4OTE1LDI4OTQ0LDI4OTI0LDI4OTI3LDI4OTM0LDI4OTQ3LDI4OTI4LDI4OTIwLDI4OTE4LDI4OTM5LDI4OTMwLDI4OTQyLDI5MzEwLDI5MzA3LDI5MzA4LDI5MzExLDI5NDY5LDI5NDYzLDI5NDQ3LDI5NDU3LDI5NDY0LDI5NDUwLDI5NDQ4LDI5NDM5LDI5NDU1LDI5NDcwLDI5NTc2LDI5Njg2LDI5Njg4LDI5Njg1LDI5NzAwLDI5Njk3LDI5NjkzLDI5NzAzLDI5Njk2LDI5NjkwLDI5NjkyLDI5Njk1LDI5NzA4LDI5NzA3LDI5Njg0LDI5NzA0LDMwMDUyLDMwMDUxLDMwMTU4LDMwMTYyLDMwMTU5LDMwMTU1LDMwMTU2LDMwMTYxLDMwMTYwLDMwMzUxLDMwMzQ1LDMwNDE5LDMwNTIxLDMwNTExLDMwNTA5LDMwNTEzLDMwNTE0LDMwNTE2LDMwNTE1LDMwNTI1LDMwNTAxLDMwNTIzLDMwNTE3LDMwNzkyLDMwODAyLDMwNzkzLDMwNzk3LDMwNzk0LDMwNzk2LDMwNzU4LDMwNzg5LDMwODAwLDMxMDc2LDMxMDc5LDMxMDgxLDMxMDgyLDMxMDc1LDMxMDgzLDMxMDczLDMxMTYzLDMxMjI2LDMxMjI0LDMxMjIyLDMxMjIzLDMxMzc1LDMxMzgwLDMxMzc2LDMxNTQxLDMxNTU5LDMxNTQwLDMxNTI1LDMxNTM2LDMxNTIyLDMxNTI0LDMxNTM5LDMxNTEyLDMxNTMwLDMxNTE3LDMxNTM3LDMxNTMxLDMxNTMzLDMxNTM1LDMxNTM4LDMxNTQ0LDMxNTE0LDMxNTIzLDMxODkyLDMxODk2LDMxODk0LDMxOTA3LDMyMDUzLDMyMDYxLDMyMDU2LDMyMDU0LDMyMDU4LDMyMDY5LDMyMDQ0LDMyMDQxLDMyMDY1LDMyMDcxLDMyMDYyLDMyMDYzLDMyMDc0LDMyMDU5LDMyMDQwLDMyNjExLDMyNjYxLDMyNjY4LDMyNjY5LDMyNjY3LDMyNzE0LDMyNzE1LDMyNzE3LDMyNzIwLDMyNzIxLDMyNzExLDMyNzE5LDMyNzEzLDMyNzk5LDMyNzk4LDMyNzk1LDMyODM5LDMyODM1LDMyODQwLDMzMDQ4LDMzMDYxLDMzMDQ5LDMzMDUxLDMzMDY5LDMzMDU1LDMzMDY4LDMzMDU0LDMzMDU3LDMzMDQ1LDMzMDYzLDMzMDUzLDMzMDU4LDMzMjk3LDMzMzM2LDMzMzMxLDMzMzM4LDMzMzMyLDMzMzMwLDMzMzk2LDMzNjgwLDMzNjk5LDMzNzA0LDMzNjc3LDMzNjU4LDMzNjUxLDMzNzAwLDMzNjUyLDMzNjc5LDMzNjY1LDMzNjg1LDMzNjg5LDMzNjUzLDMzNjg0LDMzNzA1LDMzNjYxLDMzNjY3LDMzNjc2LDMzNjkzLDMzNjkxLDMzNzA2LDMzNjc1LDMzNjYyLDMzNzAxLDMzNzExLDMzNjcyLDMzNjg3LDMzNzEyLDMzNjYzLDMzNzAyLDMzNjcxLDMzNzEwLDMzNjU0LDMzNjkwLDM0MzkzLDM0MzkwLDM0NDk1LDM0NDg3LDM0NDk4LDM0NDk3LDM0NTAxLDM0NDkwLDM0NDgwLDM0NTA0LDM0NDg5LDM0NDgzLDM0NDg4LDM0NTA4LDM0NDg0LDM0NDkxLDM0NDkyLDM0NDk5LDM0NDkzLDM0NDk0LDM0ODk4LDM0OTUzLDM0OTY1LDM0OTg0LDM0OTc4LDM0OTg2LDM0OTcwLDM0OTYxLDM0OTc3LDM0OTc1LDM0OTY4LDM0OTgzLDM0OTY5LDM0OTcxLDM0OTY3LDM0OTgwLDM0OTg4LDM0OTU2LDM0OTYzLDM0OTU4LDM1MjAyLDM1Mjg2LDM1Mjg5LDM1Mjg1LDM1Mzc2LDM1MzY3LDM1MzcyLDM1MzU4LDM1ODk3LDM1ODk5LDM1OTMyLDM1OTMzLDM1OTY1LDM2MDA1LDM2MjIxLDM2MjE5LDM2MjE3LDM2Mjg0LDM2MjkwLDM2MjgxLDM2Mjg3LDM2Mjg5LDM2NTY4LDM2NTc0LDM2NTczLDM2NTcyLDM2NTY3LDM2NTc2LDM2NTc3LDM2OTAwLDM2ODc1LDM2ODgxLDM2ODkyLDM2ODc2LDM2ODk3LDM3MTAzLDM3MDk4LDM3MTA0LDM3MTA4LDM3MTA2LDM3MTA3LDM3MDc2LDM3MDk5LDM3MTAwLDM3MDk3LDM3MjA2LDM3MjA4LDM3MjEwLDM3MjAzLDM3MjA1LDM3MzU2LDM3MzY0LDM3MzYxLDM3MzYzLDM3MzY4LDM3MzQ4LDM3MzY5LDM3MzU0LDM3MzU1LDM3MzY3LDM3MzUyLDM3MzU4LDM4MjY2LDM4Mjc4LDM4MjgwLDM4NTI0LDM4NTA5LDM4NTA3LDM4NTEzLDM4NTExLDM4NTkxLDM4NzYyLDM4OTE2LDM5MTQxLDM5MzE5LDIwNjM1LDIwNjI5LDIwNjI4LDIwNjM4LDIwNjE5LDIwNjQzLDIwNjExLDIwNjIwLDIwNjIyLDIwNjM3LDIwNTg0LDIwNjM2LDIwNjI2LDIwNjEwLDIwNjE1LDIwODMxLDIwOTQ4LDIxMjY2LDIxMjY1LDIxNDEyLDIxNDE1LDIxOTA1LDIxOTI4LDIxOTI1LDIxOTMzLDIxODc5LDIyMDg1LDIxOTIyLDIxOTA3LDIxODk2LDIxOTAzLDIxOTQxLDIxODg5LDIxOTIzLDIxOTA2LDIxOTI0LDIxODg1LDIxOTAwLDIxOTI2LDIxODg3LDIxOTA5LDIxOTIxLDIxOTAyLDIyMjg0LDIyNTY5LDIyNTgzLDIyNTUzLDIyNTU4LDIyNTY3LDIyNTYzLDIyNTY4LDIyNTE3LDIyNjAwLDIyNTY1LDIyNTU2LDIyNTU1LDIyNTc5LDIyNTkxLDIyNTgyLDIyNTc0LDIyNTg1LDIyNTg0LDIyNTczLDIyNTcyLDIyNTg3LDIyODgxLDIzMjE1LDIzMTg4LDIzMTk5LDIzMTYyLDIzMjAyLDIzMTk4LDIzMTYwLDIzMjA2LDIzMTY0LDIzMjA1LDIzMjEyLDIzMTg5LDIzMjE0LDIzMDk1LDIzMTcyLDIzMTc4LDIzMTkxLDIzMTcxLDIzMTc5LDIzMjA5LDIzMTYzLDIzMTY1LDIzMTgwLDIzMTk2LDIzMTgzLDIzMTg3LDIzMTk3LDIzNTMwLDIzNTAxLDIzNDk5LDIzNTA4LDIzNTA1LDIzNDk4LDIzNTAyLDIzNTY0LDIzNjAwLDIzODYzLDIzODc1LDIzOTE1LDIzODczLDIzODgzLDIzODcxLDIzODYxLDIzODg5LDIzODg2LDIzODkzLDIzODU5LDIzODY2LDIzODkwLDIzODY5LDIzODU3LDIzODk3LDIzODc0LDIzODY1LDIzODgxLDIzODY0LDIzODY4LDIzODU4LDIzODYyLDIzODcyLDIzODc3LDI0MTMyLDI0MTI5LDI0NDA4LDI0NDg2LDI0NDg1LDI0NDkxLDI0Nzc3LDI0NzYxLDI0NzgwLDI0ODAyLDI0NzgyLDI0NzcyLDI0ODUyLDI0ODE4LDI0ODQyLDI0ODU0LDI0ODM3LDI0ODIxLDI0ODUxLDI0ODI0LDI0ODI4LDI0ODMwLDI0NzY5LDI0ODM1LDI0ODU2LDI0ODYxLDI0ODQ4LDI0ODMxLDI0ODM2LDI0ODQzLDI1MTYyLDI1NDkyLDI1NTIxLDI1NTIwLDI1NTUwLDI1NTczLDI1NTc2LDI1NTgzLDI1NTM5LDI1NzU3LDI1NTg3LDI1NTQ2LDI1NTY4LDI1NTkwLDI1NTU3LDI1NTg2LDI1NTg5LDI1Njk3LDI1NTY3LDI1NTM0LDI1NTY1LDI1NTY0LDI1NTQwLDI1NTYwLDI1NTU1LDI1NTM4LDI1NTQzLDI1NTQ4LDI1NTQ3LDI1NTQ0LDI1NTg0LDI1NTU5LDI1NTYxLDI1OTA2LDI1OTU5LDI1OTYyLDI1OTU2LDI1OTQ4LDI1OTYwLDI1OTU3LDI1OTk2LDI2MDEzLDI2MDE0LDI2MDMwLDI2MDY0LDI2MDY2LDI2MjM2LDI2MjIwLDI2MjM1LDI2MjQwLDI2MjI1LDI2MjMzLDI2MjE4LDI2MjI2LDI2MzY5LDI2ODkyLDI2ODM1LDI2ODg0LDI2ODQ0LDI2OTIyLDI2ODYwLDI2ODU4LDI2ODY1LDI2ODk1LDI2ODM4LDI2ODcxLDI2ODU5LDI2ODUyLDI2ODcwLDI2ODk5LDI2ODk2LDI2ODY3LDI2ODQ5LDI2ODg3LDI2ODI4LDI2ODg4LDI2OTkyLDI2ODA0LDI2ODk3LDI2ODYzLDI2ODIyLDI2OTAwLDI2ODcyLDI2ODMyLDI2ODc3LDI2ODc2LDI2ODU2LDI2ODkxLDI2ODkwLDI2OTAzLDI2ODMwLDI2ODI0LDI2ODQ1LDI2ODQ2LDI2ODU0LDI2ODY4LDI2ODMzLDI2ODg2LDI2ODM2LDI2ODU3LDI2OTAxLDI2OTE3LDI2ODIzLDI3NDQ5LDI3NDUxLDI3NDU1LDI3NDUyLDI3NTQwLDI3NTQzLDI3NTQ1LDI3NTQxLDI3NTgxLDI3NjMyLDI3NjM0LDI3NjM1LDI3Njk2LDI4MTU2LDI4MjMwLDI4MjMxLDI4MTkxLDI4MjMzLDI4Mjk2LDI4MjIwLDI4MjIxLDI4MjI5LDI4MjU4LDI4MjAzLDI4MjIzLDI4MjI1LDI4MjUzLDI4Mjc1LDI4MTg4LDI4MjExLDI4MjM1LDI4MjI0LDI4MjQxLDI4MjE5LDI4MTYzLDI4MjA2LDI4MjU0LDI4MjY0LDI4MjUyLDI4MjU3LDI4MjA5LDI4MjAwLDI4MjU2LDI4MjczLDI4MjY3LDI4MjE3LDI4MTk0LDI4MjA4LDI4MjQzLDI4MjYxLDI4MTk5LDI4MjgwLDI4MjYwLDI4Mjc5LDI4MjQ1LDI4MjgxLDI4MjQyLDI4MjYyLDI4MjEzLDI4MjE0LDI4MjUwLDI4OTYwLDI4OTU4LDI4OTc1LDI4OTIzLDI4OTc0LDI4OTc3LDI4OTYzLDI4OTY1LDI4OTYyLDI4OTc4LDI4OTU5LDI4OTY4LDI4OTg2LDI4OTU1LDI5MjU5LDI5Mjc0LDI5MzIwLDI5MzIxLDI5MzE4LDI5MzE3LDI5MzIzLDI5NDU4LDI5NDUxLDI5NDg4LDI5NDc0LDI5NDg5LDI5NDkxLDI5NDc5LDI5NDkwLDI5NDg1LDI5NDc4LDI5NDc1LDI5NDkzLDI5NDUyLDI5NzQyLDI5NzQwLDI5NzQ0LDI5NzM5LDI5NzE4LDI5NzIyLDI5NzI5LDI5NzQxLDI5NzQ1LDI5NzMyLDI5NzMxLDI5NzI1LDI5NzM3LDI5NzI4LDI5NzQ2LDI5OTQ3LDI5OTk5LDMwMDYzLDMwMDYwLDMwMTgzLDMwMTcwLDMwMTc3LDMwMTgyLDMwMTczLDMwMTc1LDMwMTgwLDMwMTY3LDMwMzU3LDMwMzU0LDMwNDI2LDMwNTM0LDMwNTM1LDMwNTMyLDMwNTQxLDMwNTMzLDMwNTM4LDMwNTQyLDMwNTM5LDMwNTQwLDMwNjg2LDMwNzAwLDMwODE2LDMwODIwLDMwODIxLDMwODEyLDMwODI5LDMwODMzLDMwODI2LDMwODMwLDMwODMyLDMwODI1LDMwODI0LDMwODE0LDMwODE4LDMxMDkyLDMxMDkxLDMxMDkwLDMxMDg4LDMxMjM0LDMxMjQyLDMxMjM1LDMxMjQ0LDMxMjM2LDMxMzg1LDMxNDYyLDMxNDYwLDMxNTYyLDMxNTQ3LDMxNTU2LDMxNTYwLDMxNTY0LDMxNTY2LDMxNTUyLDMxNTc2LDMxNTU3LDMxOTA2LDMxOTAyLDMxOTEyLDMxOTA1LDMyMDg4LDMyMTExLDMyMDk5LDMyMDgzLDMyMDg2LDMyMTAzLDMyMTA2LDMyMDc5LDMyMTA5LDMyMDkyLDMyMTA3LDMyMDgyLDMyMDg0LDMyMTA1LDMyMDgxLDMyMDk1LDMyMDc4LDMyNTc0LDMyNTc1LDMyNjEzLDMyNjE0LDMyNjc0LDMyNjcyLDMyNjczLDMyNzI3LDMyODQ5LDMyODQ3LDMyODQ4LDMzMDIyLDMyOTgwLDMzMDkxLDMzMDk4LDMzMTA2LDMzMTAzLDMzMDk1LDMzMDg1LDMzMTAxLDMzMDgyLDMzMjU0LDMzMjYyLDMzMjcxLDMzMjcyLDMzMjczLDMzMjg0LDMzMzQwLDMzMzQxLDMzMzQzLDMzMzk3LDMzNTk1LDMzNzQzLDMzNzg1LDMzODI3LDMzNzI4LDMzNzY4LDMzODEwLDMzNzY3LDMzNzY0LDMzNzg4LDMzNzgyLDMzODA4LDMzNzM0LDMzNzM2LDMzNzcxLDMzNzYzLDMzNzI3LDMzNzkzLDMzNzU3LDMzNzY1LDMzNzUyLDMzNzkxLDMzNzYxLDMzNzM5LDMzNzQyLDMzNzUwLDMzNzgxLDMzNzM3LDMzODAxLDMzODA3LDMzNzU4LDMzODA5LDMzNzk4LDMzNzMwLDMzNzc5LDMzNzQ5LDMzNzg2LDMzNzM1LDMzNzQ1LDMzNzcwLDMzODExLDMzNzMxLDMzNzcyLDMzNzc0LDMzNzMyLDMzNzg3LDMzNzUxLDMzNzYyLDMzODE5LDMzNzU1LDMzNzkwLDM0NTIwLDM0NTMwLDM0NTM0LDM0NTE1LDM0NTMxLDM0NTIyLDM0NTM4LDM0NTI1LDM0NTM5LDM0NTI0LDM0NTQwLDM0NTM3LDM0NTE5LDM0NTM2LDM0NTEzLDM0ODg4LDM0OTAyLDM0OTAxLDM1MDAyLDM1MDMxLDM1MDAxLDM1MDAwLDM1MDA4LDM1MDA2LDM0OTk4LDM1MDA0LDM0OTk5LDM1MDA1LDM0OTk0LDM1MDczLDM1MDE3LDM1MjIxLDM1MjI0LDM1MjIzLDM1MjkzLDM1MjkwLDM1MjkxLDM1NDA2LDM1NDA1LDM1Mzg1LDM1NDE3LDM1MzkyLDM1NDE1LDM1NDE2LDM1Mzk2LDM1Mzk3LDM1NDEwLDM1NDAwLDM1NDA5LDM1NDAyLDM1NDA0LDM1NDA3LDM1OTM1LDM1OTY5LDM1OTY4LDM2MDI2LDM2MDMwLDM2MDE2LDM2MDI1LDM2MDIxLDM2MjI4LDM2MjI0LDM2MjMzLDM2MzEyLDM2MzA3LDM2MzAxLDM2Mjk1LDM2MzEwLDM2MzE2LDM2MzAzLDM2MzA5LDM2MzEzLDM2Mjk2LDM2MzExLDM2MjkzLDM2NTkxLDM2NTk5LDM2NjAyLDM2NjAxLDM2NTgyLDM2NTkwLDM2NTgxLDM2NTk3LDM2NTgzLDM2NTg0LDM2NTk4LDM2NTg3LDM2NTkzLDM2NTg4LDM2NTk2LDM2NTg1LDM2OTA5LDM2OTE2LDM2OTExLDM3MTI2LDM3MTY0LDM3MTI0LDM3MTE5LDM3MTE2LDM3MTI4LDM3MTEzLDM3MTE1LDM3MTIxLDM3MTIwLDM3MTI3LDM3MTI1LDM3MTIzLDM3MjE3LDM3MjIwLDM3MjE1LDM3MjE4LDM3MjE2LDM3Mzc3LDM3Mzg2LDM3NDEzLDM3Mzc5LDM3NDAyLDM3NDE0LDM3MzkxLDM3Mzg4LDM3Mzc2LDM3Mzk0LDM3Mzc1LDM3MzczLDM3MzgyLDM3MzgwLDM3NDE1LDM3Mzc4LDM3NDA0LDM3NDEyLDM3NDAxLDM3Mzk5LDM3MzgxLDM3Mzk4LDM4MjY3LDM4Mjg1LDM4Mjg0LDM4Mjg4LDM4NTM1LDM4NTI2LDM4NTM2LDM4NTM3LDM4NTMxLDM4NTI4LDM4NTk0LDM4NjAwLDM4NTk1LDM4NjQxLDM4NjQwLDM4NzY0LDM4NzY4LDM4NzY2LDM4OTE5LDM5MDgxLDM5MTQ3LDQwMTY2LDQwNjk3LDIwMDk5LDIwMTAwLDIwMTUwLDIwNjY5LDIwNjcxLDIwNjc4LDIwNjU0LDIwNjc2LDIwNjgyLDIwNjYwLDIwNjgwLDIwNjc0LDIwNjU2LDIwNjczLDIwNjY2LDIwNjU3LDIwNjgzLDIwNjgxLDIwNjYyLDIwNjY0LDIwOTUxLDIxMTE0LDIxMTEyLDIxMTE1LDIxMTE2LDIxOTU1LDIxOTc5LDIxOTY0LDIxOTY4LDIxOTYzLDIxOTYyLDIxOTgxLDIxOTUyLDIxOTcyLDIxOTU2LDIxOTkzLDIxOTUxLDIxOTcwLDIxOTAxLDIxOTY3LDIxOTczLDIxOTg2LDIxOTc0LDIxOTYwLDIyMDAyLDIxOTY1LDIxOTc3LDIxOTU0LDIyMjkyLDIyNjExLDIyNjMyLDIyNjI4LDIyNjA3LDIyNjA1LDIyNjAxLDIyNjM5LDIyNjEzLDIyNjA2LDIyNjIxLDIyNjE3LDIyNjI5LDIyNjE5LDIyNTg5LDIyNjI3LDIyNjQxLDIyNzgwLDIzMjM5LDIzMjM2LDIzMjQzLDIzMjI2LDIzMjI0LDIzMjE3LDIzMjIxLDIzMjE2LDIzMjMxLDIzMjQwLDIzMjI3LDIzMjM4LDIzMjIzLDIzMjMyLDIzMjQyLDIzMjIwLDIzMjIyLDIzMjQ1LDIzMjI1LDIzMTg0LDIzNTEwLDIzNTEyLDIzNTEzLDIzNTgzLDIzNjAzLDIzOTIxLDIzOTA3LDIzODgyLDIzOTA5LDIzOTIyLDIzOTE2LDIzOTAyLDIzOTEyLDIzOTExLDIzOTA2LDI0MDQ4LDI0MTQzLDI0MTQyLDI0MTM4LDI0MTQxLDI0MTM5LDI0MjYxLDI0MjY4LDI0MjYyLDI0MjY3LDI0MjYzLDI0Mzg0LDI0NDk1LDI0NDkzLDI0ODIzLDI0OTA1LDI0OTA2LDI0ODc1LDI0OTAxLDI0ODg2LDI0ODgyLDI0ODc4LDI0OTAyLDI0ODc5LDI0OTExLDI0ODczLDI0ODk2LDI1MTIwLDM3MjI0LDI1MTIzLDI1MTI1LDI1MTI0LDI1NTQxLDI1NTg1LDI1NTc5LDI1NjE2LDI1NjE4LDI1NjA5LDI1NjMyLDI1NjM2LDI1NjUxLDI1NjY3LDI1NjMxLDI1NjIxLDI1NjI0LDI1NjU3LDI1NjU1LDI1NjM0LDI1NjM1LDI1NjEyLDI1NjM4LDI1NjQ4LDI1NjQwLDI1NjY1LDI1NjUzLDI1NjQ3LDI1NjEwLDI1NjI2LDI1NjY0LDI1NjM3LDI1NjM5LDI1NjExLDI1NTc1LDI1NjI3LDI1NjQ2LDI1NjMzLDI1NjE0LDI1OTY3LDI2MDAyLDI2MDY3LDI2MjQ2LDI2MjUyLDI2MjYxLDI2MjU2LDI2MjUxLDI2MjUwLDI2MjY1LDI2MjYwLDI2MjMyLDI2NDAwLDI2OTgyLDI2OTc1LDI2OTM2LDI2OTU4LDI2OTc4LDI2OTkzLDI2OTQzLDI2OTQ5LDI2OTg2LDI2OTM3LDI2OTQ2LDI2OTY3LDI2OTY5LDI3MDAyLDI2OTUyLDI2OTUzLDI2OTMzLDI2OTg4LDI2OTMxLDI2OTQxLDI2OTgxLDI2ODY0LDI3MDAwLDI2OTMyLDI2OTg1LDI2OTQ0LDI2OTkxLDI2OTQ4LDI2OTk4LDI2OTY4LDI2OTQ1LDI2OTk2LDI2OTU2LDI2OTM5LDI2OTU1LDI2OTM1LDI2OTcyLDI2OTU5LDI2OTYxLDI2OTMwLDI2OTYyLDI2OTI3LDI3MDAzLDI2OTQwLDI3NDYyLDI3NDYxLDI3NDU5LDI3NDU4LDI3NDY0LDI3NDU3LDI3NTQ3LDY0MDEzLDI3NjQzLDI3NjQ0LDI3NjQxLDI3NjM5LDI3NjQwLDI4MzE1LDI4Mzc0LDI4MzYwLDI4MzAzLDI4MzUyLDI4MzE5LDI4MzA3LDI4MzA4LDI4MzIwLDI4MzM3LDI4MzQ1LDI4MzU4LDI4MzcwLDI4MzQ5LDI4MzUzLDI4MzE4LDI4MzYxLDI4MzQzLDI4MzM2LDI4MzY1LDI4MzI2LDI4MzY3LDI4MzM4LDI4MzUwLDI4MzU1LDI4MzgwLDI4Mzc2LDI4MzEzLDI4MzA2LDI4MzAyLDI4MzAxLDI4MzI0LDI4MzIxLDI4MzUxLDI4MzM5LDI4MzY4LDI4MzYyLDI4MzExLDI4MzM0LDI4MzIzLDI4OTk5LDI5MDEyLDI5MDEwLDI5MDI3LDI5MDI0LDI4OTkzLDI5MDIxLDI5MDI2LDI5MDQyLDI5MDQ4LDI5MDM0LDI5MDI1LDI4OTk0LDI5MDE2LDI4OTk1LDI5MDAzLDI5MDQwLDI5MDIzLDI5MDA4LDI5MDExLDI4OTk2LDI5MDA1LDI5MDE4LDI5MjYzLDI5MzI1LDI5MzI0LDI5MzI5LDI5MzI4LDI5MzI2LDI5NTAwLDI5NTA2LDI5NDk5LDI5NDk4LDI5NTA0LDI5NTE0LDI5NTEzLDI5NzY0LDI5NzcwLDI5NzcxLDI5Nzc4LDI5Nzc3LDI5NzgzLDI5NzYwLDI5Nzc1LDI5Nzc2LDI5Nzc0LDI5NzYyLDI5NzY2LDI5NzczLDI5NzgwLDI5OTIxLDI5OTUxLDI5OTUwLDI5OTQ5LDI5OTgxLDMwMDczLDMwMDcxLDI3MDExLDMwMTkxLDMwMjIzLDMwMjExLDMwMTk5LDMwMjA2LDMwMjA0LDMwMjAxLDMwMjAwLDMwMjI0LDMwMjAzLDMwMTk4LDMwMTg5LDMwMTk3LDMwMjA1LDMwMzYxLDMwMzg5LDMwNDI5LDMwNTQ5LDMwNTU5LDMwNTYwLDMwNTQ2LDMwNTUwLDMwNTU0LDMwNTY5LDMwNTY3LDMwNTQ4LDMwNTUzLDMwNTczLDMwNjg4LDMwODU1LDMwODc0LDMwODY4LDMwODYzLDMwODUyLDMwODY5LDMwODUzLDMwODU0LDMwODgxLDMwODUxLDMwODQxLDMwODczLDMwODQ4LDMwODcwLDMwODQzLDMxMTAwLDMxMTA2LDMxMTAxLDMxMDk3LDMxMjQ5LDMxMjU2LDMxMjU3LDMxMjUwLDMxMjU1LDMxMjUzLDMxMjY2LDMxMjUxLDMxMjU5LDMxMjQ4LDMxMzk1LDMxMzk0LDMxMzkwLDMxNDY3LDMxNTkwLDMxNTg4LDMxNTk3LDMxNjA0LDMxNTkzLDMxNjAyLDMxNTg5LDMxNjAzLDMxNjAxLDMxNjAwLDMxNTg1LDMxNjA4LDMxNjA2LDMxNTg3LDMxOTIyLDMxOTI0LDMxOTE5LDMyMTM2LDMyMTM0LDMyMTI4LDMyMTQxLDMyMTI3LDMyMTMzLDMyMTIyLDMyMTQyLDMyMTIzLDMyMTMxLDMyMTI0LDMyMTQwLDMyMTQ4LDMyMTMyLDMyMTI1LDMyMTQ2LDMyNjIxLDMyNjE5LDMyNjE1LDMyNjE2LDMyNjIwLDMyNjc4LDMyNjc3LDMyNjc5LDMyNzMxLDMyNzMyLDMyODAxLDMzMTI0LDMzMTIwLDMzMTQzLDMzMTE2LDMzMTI5LDMzMTE1LDMzMTIyLDMzMTM4LDI2NDAxLDMzMTE4LDMzMTQyLDMzMTI3LDMzMTM1LDMzMDkyLDMzMTIxLDMzMzA5LDMzMzUzLDMzMzQ4LDMzMzQ0LDMzMzQ2LDMzMzQ5LDM0MDMzLDMzODU1LDMzODc4LDMzOTEwLDMzOTEzLDMzOTM1LDMzOTMzLDMzODkzLDMzODczLDMzODU2LDMzOTI2LDMzODk1LDMzODQwLDMzODY5LDMzOTE3LDMzODgyLDMzODgxLDMzOTA4LDMzOTA3LDMzODg1LDM0MDU1LDMzODg2LDMzODQ3LDMzODUwLDMzODQ0LDMzOTE0LDMzODU5LDMzOTEyLDMzODQyLDMzODYxLDMzODMzLDMzNzUzLDMzODY3LDMzODM5LDMzODU4LDMzODM3LDMzODg3LDMzOTA0LDMzODQ5LDMzODcwLDMzODY4LDMzODc0LDMzOTAzLDMzOTg5LDMzOTM0LDMzODUxLDMzODYzLDMzODQ2LDMzODQzLDMzODk2LDMzOTE4LDMzODYwLDMzODM1LDMzODg4LDMzODc2LDMzOTAyLDMzODcyLDM0NTcxLDM0NTY0LDM0NTUxLDM0NTcyLDM0NTU0LDM0NTE4LDM0NTQ5LDM0NjM3LDM0NTUyLDM0NTc0LDM0NTY5LDM0NTYxLDM0NTUwLDM0NTczLDM0NTY1LDM1MDMwLDM1MDE5LDM1MDIxLDM1MDIyLDM1MDM4LDM1MDM1LDM1MDM0LDM1MDIwLDM1MDI0LDM1MjA1LDM1MjI3LDM1Mjk1LDM1MzAxLDM1MzAwLDM1Mjk3LDM1Mjk2LDM1Mjk4LDM1MjkyLDM1MzAyLDM1NDQ2LDM1NDYyLDM1NDU1LDM1NDI1LDM1MzkxLDM1NDQ3LDM1NDU4LDM1NDYwLDM1NDQ1LDM1NDU5LDM1NDU3LDM1NDQ0LDM1NDUwLDM1OTAwLDM1OTE1LDM1OTE0LDM1OTQxLDM1OTQwLDM1OTQyLDM1OTc0LDM1OTcyLDM1OTczLDM2MDQ0LDM2MjAwLDM2MjAxLDM2MjQxLDM2MjM2LDM2MjM4LDM2MjM5LDM2MjM3LDM2MjQzLDM2MjQ0LDM2MjQwLDM2MjQyLDM2MzM2LDM2MzIwLDM2MzMyLDM2MzM3LDM2MzM0LDM2MzA0LDM2MzI5LDM2MzIzLDM2MzIyLDM2MzI3LDM2MzM4LDM2MzMxLDM2MzQwLDM2NjE0LDM2NjA3LDM2NjA5LDM2NjA4LDM2NjEzLDM2NjE1LDM2NjE2LDM2NjEwLDM2NjE5LDM2OTQ2LDM2OTI3LDM2OTMyLDM2OTM3LDM2OTI1LDM3MTM2LDM3MTMzLDM3MTM1LDM3MTM3LDM3MTQyLDM3MTQwLDM3MTMxLDM3MTM0LDM3MjMwLDM3MjMxLDM3NDQ4LDM3NDU4LDM3NDI0LDM3NDM0LDM3NDc4LDM3NDI3LDM3NDc3LDM3NDcwLDM3NTA3LDM3NDIyLDM3NDUwLDM3NDQ2LDM3NDg1LDM3NDg0LDM3NDU1LDM3NDcyLDM3NDc5LDM3NDg3LDM3NDMwLDM3NDczLDM3NDg4LDM3NDI1LDM3NDYwLDM3NDc1LDM3NDU2LDM3NDkwLDM3NDU0LDM3NDU5LDM3NDUyLDM3NDYyLDM3NDI2LDM4MzAzLDM4MzAwLDM4MzAyLDM4Mjk5LDM4NTQ2LDM4NTQ3LDM4NTQ1LDM4NTUxLDM4NjA2LDM4NjUwLDM4NjUzLDM4NjQ4LDM4NjQ1LDM4NzcxLDM4Nzc1LDM4Nzc2LDM4NzcwLDM4OTI3LDM4OTI1LDM4OTI2LDM5MDg0LDM5MTU4LDM5MTYxLDM5MzQzLDM5MzQ2LDM5MzQ0LDM5MzQ5LDM5NTk3LDM5NTk1LDM5NzcxLDQwMTcwLDQwMTczLDQwMTY3LDQwNTc2LDQwNzAxLDIwNzEwLDIwNjkyLDIwNjk1LDIwNzEyLDIwNzIzLDIwNjk5LDIwNzE0LDIwNzAxLDIwNzA4LDIwNjkxLDIwNzE2LDIwNzIwLDIwNzE5LDIwNzA3LDIwNzA0LDIwOTUyLDIxMTIwLDIxMTIxLDIxMjI1LDIxMjI3LDIxMjk2LDIxNDIwLDIyMDU1LDIyMDM3LDIyMDI4LDIyMDM0LDIyMDEyLDIyMDMxLDIyMDQ0LDIyMDE3LDIyMDM1LDIyMDE4LDIyMDEwLDIyMDQ1LDIyMDIwLDIyMDE1LDIyMDA5LDIyNjY1LDIyNjUyLDIyNjcyLDIyNjgwLDIyNjYyLDIyNjU3LDIyNjU1LDIyNjQ0LDIyNjY3LDIyNjUwLDIyNjYzLDIyNjczLDIyNjcwLDIyNjQ2LDIyNjU4LDIyNjY0LDIyNjUxLDIyNjc2LDIyNjcxLDIyNzgyLDIyODkxLDIzMjYwLDIzMjc4LDIzMjY5LDIzMjUzLDIzMjc0LDIzMjU4LDIzMjc3LDIzMjc1LDIzMjgzLDIzMjY2LDIzMjY0LDIzMjU5LDIzMjc2LDIzMjYyLDIzMjYxLDIzMjU3LDIzMjcyLDIzMjYzLDIzNDE1LDIzNTIwLDIzNTIzLDIzNjUxLDIzOTM4LDIzOTM2LDIzOTMzLDIzOTQyLDIzOTMwLDIzOTM3LDIzOTI3LDIzOTQ2LDIzOTQ1LDIzOTQ0LDIzOTM0LDIzOTMyLDIzOTQ5LDIzOTI5LDIzOTM1LDI0MTUyLDI0MTUzLDI0MTQ3LDI0MjgwLDI0MjczLDI0Mjc5LDI0MjcwLDI0Mjg0LDI0Mjc3LDI0MjgxLDI0Mjc0LDI0Mjc2LDI0Mzg4LDI0Mzg3LDI0NDMxLDI0NTAyLDI0ODc2LDI0ODcyLDI0ODk3LDI0OTI2LDI0OTQ1LDI0OTQ3LDI0OTE0LDI0OTE1LDI0OTQ2LDI0OTQwLDI0OTYwLDI0OTQ4LDI0OTE2LDI0OTU0LDI0OTIzLDI0OTMzLDI0ODkxLDI0OTM4LDI0OTI5LDI0OTE4LDI1MTI5LDI1MTI3LDI1MTMxLDI1NjQzLDI1Njc3LDI1NjkxLDI1NjkzLDI1NzE2LDI1NzE4LDI1NzE0LDI1NzE1LDI1NzI1LDI1NzE3LDI1NzAyLDI1NzY2LDI1Njc4LDI1NzMwLDI1Njk0LDI1NjkyLDI1Njc1LDI1NjgzLDI1Njk2LDI1NjgwLDI1NzI3LDI1NjYzLDI1NzA4LDI1NzA3LDI1Njg5LDI1NzAxLDI1NzE5LDI1OTcxLDI2MDE2LDI2MjczLDI2MjcyLDI2MjcxLDI2MzczLDI2MzcyLDI2NDAyLDI3MDU3LDI3MDYyLDI3MDgxLDI3MDQwLDI3MDg2LDI3MDMwLDI3MDU2LDI3MDUyLDI3MDY4LDI3MDI1LDI3MDMzLDI3MDIyLDI3MDQ3LDI3MDIxLDI3MDQ5LDI3MDcwLDI3MDU1LDI3MDcxLDI3MDc2LDI3MDY5LDI3MDQ0LDI3MDkyLDI3MDY1LDI3MDgyLDI3MDM0LDI3MDg3LDI3MDU5LDI3MDI3LDI3MDUwLDI3MDQxLDI3MDM4LDI3MDk3LDI3MDMxLDI3MDI0LDI3MDc0LDI3MDYxLDI3MDQ1LDI3MDc4LDI3NDY2LDI3NDY5LDI3NDY3LDI3NTUwLDI3NTUxLDI3NTUyLDI3NTg3LDI3NTg4LDI3NjQ2LDI4MzY2LDI4NDA1LDI4NDAxLDI4NDE5LDI4NDUzLDI4NDA4LDI4NDcxLDI4NDExLDI4NDYyLDI4NDI1LDI4NDk0LDI4NDQxLDI4NDQyLDI4NDU1LDI4NDQwLDI4NDc1LDI4NDM0LDI4Mzk3LDI4NDI2LDI4NDcwLDI4NTMxLDI4NDA5LDI4Mzk4LDI4NDYxLDI4NDgwLDI4NDY0LDI4NDc2LDI4NDY5LDI4Mzk1LDI4NDIzLDI4NDMwLDI4NDgzLDI4NDIxLDI4NDEzLDI4NDA2LDI4NDczLDI4NDQ0LDI4NDEyLDI4NDc0LDI4NDQ3LDI4NDI5LDI4NDQ2LDI4NDI0LDI4NDQ5LDI5MDYzLDI5MDcyLDI5MDY1LDI5MDU2LDI5MDYxLDI5MDU4LDI5MDcxLDI5MDUxLDI5MDYyLDI5MDU3LDI5MDc5LDI5MjUyLDI5MjY3LDI5MzM1LDI5MzMzLDI5MzMxLDI5NTA3LDI5NTE3LDI5NTIxLDI5NTE2LDI5Nzk0LDI5ODExLDI5ODA5LDI5ODEzLDI5ODEwLDI5Nzk5LDI5ODA2LDI5OTUyLDI5OTU0LDI5OTU1LDMwMDc3LDMwMDk2LDMwMjMwLDMwMjE2LDMwMjIwLDMwMjI5LDMwMjI1LDMwMjE4LDMwMjI4LDMwMzkyLDMwNTkzLDMwNTg4LDMwNTk3LDMwNTk0LDMwNTc0LDMwNTkyLDMwNTc1LDMwNTkwLDMwNTk1LDMwODk4LDMwODkwLDMwOTAwLDMwODkzLDMwODg4LDMwODQ2LDMwODkxLDMwODc4LDMwODg1LDMwODgwLDMwODkyLDMwODgyLDMwODg0LDMxMTI4LDMxMTE0LDMxMTE1LDMxMTI2LDMxMTI1LDMxMTI0LDMxMTIzLDMxMTI3LDMxMTEyLDMxMTIyLDMxMTIwLDMxMjc1LDMxMzA2LDMxMjgwLDMxMjc5LDMxMjcyLDMxMjcwLDMxNDAwLDMxNDAzLDMxNDA0LDMxNDcwLDMxNjI0LDMxNjQ0LDMxNjI2LDMxNjMzLDMxNjMyLDMxNjM4LDMxNjI5LDMxNjI4LDMxNjQzLDMxNjMwLDMxNjIxLDMxNjQwLDIxMTI0LDMxNjQxLDMxNjUyLDMxNjE4LDMxOTMxLDMxOTM1LDMxOTMyLDMxOTMwLDMyMTY3LDMyMTgzLDMyMTk0LDMyMTYzLDMyMTcwLDMyMTkzLDMyMTkyLDMyMTk3LDMyMTU3LDMyMjA2LDMyMTk2LDMyMTk4LDMyMjAzLDMyMjA0LDMyMTc1LDMyMTg1LDMyMTUwLDMyMTg4LDMyMTU5LDMyMTY2LDMyMTc0LDMyMTY5LDMyMTYxLDMyMjAxLDMyNjI3LDMyNzM4LDMyNzM5LDMyNzQxLDMyNzM0LDMyODA0LDMyODYxLDMyODYwLDMzMTYxLDMzMTU4LDMzMTU1LDMzMTU5LDMzMTY1LDMzMTY0LDMzMTYzLDMzMzAxLDMzOTQzLDMzOTU2LDMzOTUzLDMzOTUxLDMzOTc4LDMzOTk4LDMzOTg2LDMzOTY0LDMzOTY2LDMzOTYzLDMzOTc3LDMzOTcyLDMzOTg1LDMzOTk3LDMzOTYyLDMzOTQ2LDMzOTY5LDM0MDAwLDMzOTQ5LDMzOTU5LDMzOTc5LDMzOTU0LDMzOTQwLDMzOTkxLDMzOTk2LDMzOTQ3LDMzOTYxLDMzOTY3LDMzOTYwLDM0MDA2LDMzOTQ0LDMzOTc0LDMzOTk5LDMzOTUyLDM0MDA3LDM0MDA0LDM0MDAyLDM0MDExLDMzOTY4LDMzOTM3LDM0NDAxLDM0NjExLDM0NTk1LDM0NjAwLDM0NjY3LDM0NjI0LDM0NjA2LDM0NTkwLDM0NTkzLDM0NTg1LDM0NTg3LDM0NjI3LDM0NjA0LDM0NjI1LDM0NjIyLDM0NjMwLDM0NTkyLDM0NjEwLDM0NjAyLDM0NjA1LDM0NjIwLDM0NTc4LDM0NjE4LDM0NjA5LDM0NjEzLDM0NjI2LDM0NTk4LDM0NTk5LDM0NjE2LDM0NTk2LDM0NTg2LDM0NjA4LDM0NTc3LDM1MDYzLDM1MDQ3LDM1MDU3LDM1MDU4LDM1MDY2LDM1MDcwLDM1MDU0LDM1MDY4LDM1MDYyLDM1MDY3LDM1MDU2LDM1MDUyLDM1MDUxLDM1MjI5LDM1MjMzLDM1MjMxLDM1MjMwLDM1MzA1LDM1MzA3LDM1MzA0LDM1NDk5LDM1NDgxLDM1NDY3LDM1NDc0LDM1NDcxLDM1NDc4LDM1OTAxLDM1OTQ0LDM1OTQ1LDM2MDUzLDM2MDQ3LDM2MDU1LDM2MjQ2LDM2MzYxLDM2MzU0LDM2MzUxLDM2MzY1LDM2MzQ5LDM2MzYyLDM2MzU1LDM2MzU5LDM2MzU4LDM2MzU3LDM2MzUwLDM2MzUyLDM2MzU2LDM2NjI0LDM2NjI1LDM2NjIyLDM2NjIxLDM3MTU1LDM3MTQ4LDM3MTUyLDM3MTU0LDM3MTUxLDM3MTQ5LDM3MTQ2LDM3MTU2LDM3MTUzLDM3MTQ3LDM3MjQyLDM3MjM0LDM3MjQxLDM3MjM1LDM3NTQxLDM3NTQwLDM3NDk0LDM3NTMxLDM3NDk4LDM3NTM2LDM3NTI0LDM3NTQ2LDM3NTE3LDM3NTQyLDM3NTMwLDM3NTQ3LDM3NDk3LDM3NTI3LDM3NTAzLDM3NTM5LDM3NjE0LDM3NTE4LDM3NTA2LDM3NTI1LDM3NTM4LDM3NTAxLDM3NTEyLDM3NTM3LDM3NTE0LDM3NTEwLDM3NTE2LDM3NTI5LDM3NTQzLDM3NTAyLDM3NTExLDM3NTQ1LDM3NTMzLDM3NTE1LDM3NDIxLDM4NTU4LDM4NTYxLDM4NjU1LDM4NzQ0LDM4NzgxLDM4Nzc4LDM4NzgyLDM4Nzg3LDM4Nzg0LDM4Nzg2LDM4Nzc5LDM4Nzg4LDM4Nzg1LDM4NzgzLDM4ODYyLDM4ODYxLDM4OTM0LDM5MDg1LDM5MDg2LDM5MTcwLDM5MTY4LDM5MTc1LDM5MzI1LDM5MzI0LDM5MzYzLDM5MzUzLDM5MzU1LDM5MzU0LDM5MzYyLDM5MzU3LDM5MzY3LDM5NjAxLDM5NjUxLDM5NjU1LDM5NzQyLDM5NzQzLDM5Nzc2LDM5Nzc3LDM5Nzc1LDQwMTc3LDQwMTc4LDQwMTgxLDQwNjE1LDIwNzM1LDIwNzM5LDIwNzg0LDIwNzI4LDIwNzQyLDIwNzQzLDIwNzI2LDIwNzM0LDIwNzQ3LDIwNzQ4LDIwNzMzLDIwNzQ2LDIxMTMxLDIxMTMyLDIxMjMzLDIxMjMxLDIyMDg4LDIyMDgyLDIyMDkyLDIyMDY5LDIyMDgxLDIyMDkwLDIyMDg5LDIyMDg2LDIyMTA0LDIyMTA2LDIyMDgwLDIyMDY3LDIyMDc3LDIyMDYwLDIyMDc4LDIyMDcyLDIyMDU4LDIyMDc0LDIyMjk4LDIyNjk5LDIyNjg1LDIyNzA1LDIyNjg4LDIyNjkxLDIyNzAzLDIyNzAwLDIyNjkzLDIyNjg5LDIyNzgzLDIzMjk1LDIzMjg0LDIzMjkzLDIzMjg3LDIzMjg2LDIzMjk5LDIzMjg4LDIzMjk4LDIzMjg5LDIzMjk3LDIzMzAzLDIzMzAxLDIzMzExLDIzNjU1LDIzOTYxLDIzOTU5LDIzOTY3LDIzOTU0LDIzOTcwLDIzOTU1LDIzOTU3LDIzOTY4LDIzOTY0LDIzOTY5LDIzOTYyLDIzOTY2LDI0MTY5LDI0MTU3LDI0MTYwLDI0MTU2LDMyMjQzLDI0MjgzLDI0Mjg2LDI0Mjg5LDI0MzkzLDI0NDk4LDI0OTcxLDI0OTYzLDI0OTUzLDI1MDA5LDI1MDA4LDI0OTk0LDI0OTY5LDI0OTg3LDI0OTc5LDI1MDA3LDI1MDA1LDI0OTkxLDI0OTc4LDI1MDAyLDI0OTkzLDI0OTczLDI0OTM0LDI1MDExLDI1MTMzLDI1NzEwLDI1NzEyLDI1NzUwLDI1NzYwLDI1NzMzLDI1NzUxLDI1NzU2LDI1NzQzLDI1NzM5LDI1NzM4LDI1NzQwLDI1NzYzLDI1NzU5LDI1NzA0LDI1Nzc3LDI1NzUyLDI1OTc0LDI1OTc4LDI1OTc3LDI1OTc5LDI2MDM0LDI2MDM1LDI2MjkzLDI2Mjg4LDI2MjgxLDI2MjkwLDI2Mjk1LDI2MjgyLDI2Mjg3LDI3MTM2LDI3MTQyLDI3MTU5LDI3MTA5LDI3MTI4LDI3MTU3LDI3MTIxLDI3MTA4LDI3MTY4LDI3MTM1LDI3MTE2LDI3MTA2LDI3MTYzLDI3MTY1LDI3MTM0LDI3MTc1LDI3MTIyLDI3MTE4LDI3MTU2LDI3MTI3LDI3MTExLDI3MjAwLDI3MTQ0LDI3MTEwLDI3MTMxLDI3MTQ5LDI3MTMyLDI3MTE1LDI3MTQ1LDI3MTQwLDI3MTYwLDI3MTczLDI3MTUxLDI3MTI2LDI3MTc0LDI3MTQzLDI3MTI0LDI3MTU4LDI3NDczLDI3NTU3LDI3NTU1LDI3NTU0LDI3NTU4LDI3NjQ5LDI3NjQ4LDI3NjQ3LDI3NjUwLDI4NDgxLDI4NDU0LDI4NTQyLDI4NTUxLDI4NjE0LDI4NTYyLDI4NTU3LDI4NTUzLDI4NTU2LDI4NTE0LDI4NDk1LDI4NTQ5LDI4NTA2LDI4NTY2LDI4NTM0LDI4NTI0LDI4NTQ2LDI4NTAxLDI4NTMwLDI4NDk4LDI4NDk2LDI4NTAzLDI4NTY0LDI4NTYzLDI4NTA5LDI4NDE2LDI4NTEzLDI4NTIzLDI4NTQxLDI4NTE5LDI4NTYwLDI4NDk5LDI4NTU1LDI4NTIxLDI4NTQzLDI4NTY1LDI4NTE1LDI4NTM1LDI4NTIyLDI4NTM5LDI5MTA2LDI5MTAzLDI5MDgzLDI5MTA0LDI5MDg4LDI5MDgyLDI5MDk3LDI5MTA5LDI5MDg1LDI5MDkzLDI5MDg2LDI5MDkyLDI5MDg5LDI5MDk4LDI5MDg0LDI5MDk1LDI5MTA3LDI5MzM2LDI5MzM4LDI5NTI4LDI5NTIyLDI5NTM0LDI5NTM1LDI5NTM2LDI5NTMzLDI5NTMxLDI5NTM3LDI5NTMwLDI5NTI5LDI5NTM4LDI5ODMxLDI5ODMzLDI5ODM0LDI5ODMwLDI5ODI1LDI5ODIxLDI5ODI5LDI5ODMyLDI5ODIwLDI5ODE3LDI5OTYwLDI5OTU5LDMwMDc4LDMwMjQ1LDMwMjM4LDMwMjMzLDMwMjM3LDMwMjM2LDMwMjQzLDMwMjM0LDMwMjQ4LDMwMjM1LDMwMzY0LDMwMzY1LDMwMzY2LDMwMzYzLDMwNjA1LDMwNjA3LDMwNjAxLDMwNjAwLDMwOTI1LDMwOTA3LDMwOTI3LDMwOTI0LDMwOTI5LDMwOTI2LDMwOTMyLDMwOTIwLDMwOTE1LDMwOTE2LDMwOTIxLDMxMTMwLDMxMTM3LDMxMTM2LDMxMTMyLDMxMTM4LDMxMTMxLDI3NTEwLDMxMjg5LDMxNDEwLDMxNDEyLDMxNDExLDMxNjcxLDMxNjkxLDMxNjc4LDMxNjYwLDMxNjk0LDMxNjYzLDMxNjczLDMxNjkwLDMxNjY5LDMxOTQxLDMxOTQ0LDMxOTQ4LDMxOTQ3LDMyMjQ3LDMyMjE5LDMyMjM0LDMyMjMxLDMyMjE1LDMyMjI1LDMyMjU5LDMyMjUwLDMyMjMwLDMyMjQ2LDMyMjQxLDMyMjQwLDMyMjM4LDMyMjIzLDMyNjMwLDMyNjg0LDMyNjg4LDMyNjg1LDMyNzQ5LDMyNzQ3LDMyNzQ2LDMyNzQ4LDMyNzQyLDMyNzQ0LDMyODY4LDMyODcxLDMzMTg3LDMzMTgzLDMzMTgyLDMzMTczLDMzMTg2LDMzMTc3LDMzMTc1LDMzMzAyLDMzMzU5LDMzMzYzLDMzMzYyLDMzMzYwLDMzMzU4LDMzMzYxLDM0MDg0LDM0MTA3LDM0MDYzLDM0MDQ4LDM0MDg5LDM0MDYyLDM0MDU3LDM0MDYxLDM0MDc5LDM0MDU4LDM0MDg3LDM0MDc2LDM0MDQzLDM0MDkxLDM0MDQyLDM0MDU2LDM0MDYwLDM0MDM2LDM0MDkwLDM0MDM0LDM0MDY5LDM0MDM5LDM0MDI3LDM0MDM1LDM0MDQ0LDM0MDY2LDM0MDI2LDM0MDI1LDM0MDcwLDM0MDQ2LDM0MDg4LDM0MDc3LDM0MDk0LDM0MDUwLDM0MDQ1LDM0MDc4LDM0MDM4LDM0MDk3LDM0MDg2LDM0MDIzLDM0MDI0LDM0MDMyLDM0MDMxLDM0MDQxLDM0MDcyLDM0MDgwLDM0MDk2LDM0MDU5LDM0MDczLDM0MDk1LDM0NDAyLDM0NjQ2LDM0NjU5LDM0NjYwLDM0Njc5LDM0Nzg1LDM0Njc1LDM0NjQ4LDM0NjQ0LDM0NjUxLDM0NjQyLDM0NjU3LDM0NjUwLDM0NjQxLDM0NjU0LDM0NjY5LDM0NjY2LDM0NjQwLDM0NjM4LDM0NjU1LDM0NjUzLDM0NjcxLDM0NjY4LDM0NjgyLDM0NjcwLDM0NjUyLDM0NjYxLDM0NjM5LDM0NjgzLDM0Njc3LDM0NjU4LDM0NjYzLDM0NjY1LDM0OTA2LDM1MDc3LDM1MDg0LDM1MDkyLDM1MDgzLDM1MDk1LDM1MDk2LDM1MDk3LDM1MDc4LDM1MDk0LDM1MDg5LDM1MDg2LDM1MDgxLDM1MjM0LDM1MjM2LDM1MjM1LDM1MzA5LDM1MzEyLDM1MzA4LDM1NTM1LDM1NTI2LDM1NTEyLDM1NTM5LDM1NTM3LDM1NTQwLDM1NTQxLDM1NTE1LDM1NTQzLDM1NTE4LDM1NTIwLDM1NTI1LDM1NTQ0LDM1NTIzLDM1NTE0LDM1NTE3LDM1NTQ1LDM1OTAyLDM1OTE3LDM1OTgzLDM2MDY5LDM2MDYzLDM2MDU3LDM2MDcyLDM2MDU4LDM2MDYxLDM2MDcxLDM2MjU2LDM2MjUyLDM2MjU3LDM2MjUxLDM2Mzg0LDM2Mzg3LDM2Mzg5LDM2Mzg4LDM2Mzk4LDM2MzczLDM2Mzc5LDM2Mzc0LDM2MzY5LDM2Mzc3LDM2MzkwLDM2MzkxLDM2MzcyLDM2MzcwLDM2Mzc2LDM2MzcxLDM2MzgwLDM2Mzc1LDM2Mzc4LDM2NjUyLDM2NjQ0LDM2NjMyLDM2NjM0LDM2NjQwLDM2NjQzLDM2NjMwLDM2NjMxLDM2OTc5LDM2OTc2LDM2OTc1LDM2OTY3LDM2OTcxLDM3MTY3LDM3MTYzLDM3MTYxLDM3MTYyLDM3MTcwLDM3MTU4LDM3MTY2LDM3MjUzLDM3MjU0LDM3MjU4LDM3MjQ5LDM3MjUwLDM3MjUyLDM3MjQ4LDM3NTg0LDM3NTcxLDM3NTcyLDM3NTY4LDM3NTkzLDM3NTU4LDM3NTgzLDM3NjE3LDM3NTk5LDM3NTkyLDM3NjA5LDM3NTkxLDM3NTk3LDM3NTgwLDM3NjE1LDM3NTcwLDM3NjA4LDM3NTc4LDM3NTc2LDM3NTgyLDM3NjA2LDM3NTgxLDM3NTg5LDM3NTc3LDM3NjAwLDM3NTk4LDM3NjA3LDM3NTg1LDM3NTg3LDM3NTU3LDM3NjAxLDM3NTc0LDM3NTU2LDM4MjY4LDM4MzE2LDM4MzE1LDM4MzE4LDM4MzIwLDM4NTY0LDM4NTYyLDM4NjExLDM4NjYxLDM4NjY0LDM4NjU4LDM4NzQ2LDM4Nzk0LDM4Nzk4LDM4NzkyLDM4ODY0LDM4ODYzLDM4OTQyLDM4OTQxLDM4OTUwLDM4OTUzLDM4OTUyLDM4OTQ0LDM4OTM5LDM4OTUxLDM5MDkwLDM5MTc2LDM5MTYyLDM5MTg1LDM5MTg4LDM5MTkwLDM5MTkxLDM5MTg5LDM5Mzg4LDM5MzczLDM5Mzc1LDM5Mzc5LDM5MzgwLDM5Mzc0LDM5MzY5LDM5MzgyLDM5Mzg0LDM5MzcxLDM5MzgzLDM5MzcyLDM5NjAzLDM5NjYwLDM5NjU5LDM5NjY3LDM5NjY2LDM5NjY1LDM5NzUwLDM5NzQ3LDM5NzgzLDM5Nzk2LDM5NzkzLDM5NzgyLDM5Nzk4LDM5Nzk3LDM5NzkyLDM5Nzg0LDM5NzgwLDM5Nzg4LDQwMTg4LDQwMTg2LDQwMTg5LDQwMTkxLDQwMTgzLDQwMTk5LDQwMTkyLDQwMTg1LDQwMTg3LDQwMjAwLDQwMTk3LDQwMTk2LDQwNTc5LDQwNjU5LDQwNzE5LDQwNzIwLDIwNzY0LDIwNzU1LDIwNzU5LDIwNzYyLDIwNzUzLDIwOTU4LDIxMzAwLDIxNDczLDIyMTI4LDIyMTEyLDIyMTI2LDIyMTMxLDIyMTE4LDIyMTE1LDIyMTI1LDIyMTMwLDIyMTEwLDIyMTM1LDIyMzAwLDIyMjk5LDIyNzI4LDIyNzE3LDIyNzI5LDIyNzE5LDIyNzE0LDIyNzIyLDIyNzE2LDIyNzI2LDIzMzE5LDIzMzIxLDIzMzIzLDIzMzI5LDIzMzE2LDIzMzE1LDIzMzEyLDIzMzE4LDIzMzM2LDIzMzIyLDIzMzI4LDIzMzI2LDIzNTM1LDIzOTgwLDIzOTg1LDIzOTc3LDIzOTc1LDIzOTg5LDIzOTg0LDIzOTgyLDIzOTc4LDIzOTc2LDIzOTg2LDIzOTgxLDIzOTgzLDIzOTg4LDI0MTY3LDI0MTY4LDI0MTY2LDI0MTc1LDI0Mjk3LDI0Mjk1LDI0Mjk0LDI0Mjk2LDI0MjkzLDI0Mzk1LDI0NTA4LDI0OTg5LDI1MDAwLDI0OTgyLDI1MDI5LDI1MDEyLDI1MDMwLDI1MDI1LDI1MDM2LDI1MDE4LDI1MDIzLDI1MDE2LDI0OTcyLDI1ODE1LDI1ODE0LDI1ODA4LDI1ODA3LDI1ODAxLDI1Nzg5LDI1NzM3LDI1Nzk1LDI1ODE5LDI1ODQzLDI1ODE3LDI1OTA3LDI1OTgzLDI1OTgwLDI2MDE4LDI2MzEyLDI2MzAyLDI2MzA0LDI2MzE0LDI2MzE1LDI2MzE5LDI2MzAxLDI2Mjk5LDI2Mjk4LDI2MzE2LDI2NDAzLDI3MTg4LDI3MjM4LDI3MjA5LDI3MjM5LDI3MTg2LDI3MjQwLDI3MTk4LDI3MjI5LDI3MjQ1LDI3MjU0LDI3MjI3LDI3MjE3LDI3MTc2LDI3MjI2LDI3MTk1LDI3MTk5LDI3MjAxLDI3MjQyLDI3MjM2LDI3MjE2LDI3MjE1LDI3MjIwLDI3MjQ3LDI3MjQxLDI3MjMyLDI3MTk2LDI3MjMwLDI3MjIyLDI3MjIxLDI3MjEzLDI3MjE0LDI3MjA2LDI3NDc3LDI3NDc2LDI3NDc4LDI3NTU5LDI3NTYyLDI3NTYzLDI3NTkyLDI3NTkxLDI3NjUyLDI3NjUxLDI3NjU0LDI4NTg5LDI4NjE5LDI4NTc5LDI4NjE1LDI4NjA0LDI4NjIyLDI4NjE2LDI4NTEwLDI4NjEyLDI4NjA1LDI4NTc0LDI4NjE4LDI4NTg0LDI4Njc2LDI4NTgxLDI4NTkwLDI4NjAyLDI4NTg4LDI4NTg2LDI4NjIzLDI4NjA3LDI4NjAwLDI4NTc4LDI4NjE3LDI4NTg3LDI4NjIxLDI4NTkxLDI4NTk0LDI4NTkyLDI5MTI1LDI5MTIyLDI5MTE5LDI5MTEyLDI5MTQyLDI5MTIwLDI5MTIxLDI5MTMxLDI5MTQwLDI5MTMwLDI5MTI3LDI5MTM1LDI5MTE3LDI5MTQ0LDI5MTE2LDI5MTI2LDI5MTQ2LDI5MTQ3LDI5MzQxLDI5MzQyLDI5NTQ1LDI5NTQyLDI5NTQzLDI5NTQ4LDI5NTQxLDI5NTQ3LDI5NTQ2LDI5ODIzLDI5ODUwLDI5ODU2LDI5ODQ0LDI5ODQyLDI5ODQ1LDI5ODU3LDI5OTYzLDMwMDgwLDMwMjU1LDMwMjUzLDMwMjU3LDMwMjY5LDMwMjU5LDMwMjY4LDMwMjYxLDMwMjU4LDMwMjU2LDMwMzk1LDMwNDM4LDMwNjE4LDMwNjIxLDMwNjI1LDMwNjIwLDMwNjE5LDMwNjI2LDMwNjI3LDMwNjEzLDMwNjE3LDMwNjE1LDMwOTQxLDMwOTUzLDMwOTQ5LDMwOTU0LDMwOTQyLDMwOTQ3LDMwOTM5LDMwOTQ1LDMwOTQ2LDMwOTU3LDMwOTQzLDMwOTQ0LDMxMTQwLDMxMzAwLDMxMzA0LDMxMzAzLDMxNDE0LDMxNDE2LDMxNDEzLDMxNDA5LDMxNDE1LDMxNzEwLDMxNzE1LDMxNzE5LDMxNzA5LDMxNzAxLDMxNzE3LDMxNzA2LDMxNzIwLDMxNzM3LDMxNzAwLDMxNzIyLDMxNzE0LDMxNzA4LDMxNzIzLDMxNzA0LDMxNzExLDMxOTU0LDMxOTU2LDMxOTU5LDMxOTUyLDMxOTUzLDMyMjc0LDMyMjg5LDMyMjc5LDMyMjY4LDMyMjg3LDMyMjg4LDMyMjc1LDMyMjcwLDMyMjg0LDMyMjc3LDMyMjgyLDMyMjkwLDMyMjY3LDMyMjcxLDMyMjc4LDMyMjY5LDMyMjc2LDMyMjkzLDMyMjkyLDMyNTc5LDMyNjM1LDMyNjM2LDMyNjM0LDMyNjg5LDMyNzUxLDMyODEwLDMyODA5LDMyODc2LDMzMjAxLDMzMTkwLDMzMTk4LDMzMjA5LDMzMjA1LDMzMTk1LDMzMjAwLDMzMTk2LDMzMjA0LDMzMjAyLDMzMjA3LDMzMTkxLDMzMjY2LDMzMzY1LDMzMzY2LDMzMzY3LDM0MTM0LDM0MTE3LDM0MTU1LDM0MTI1LDM0MTMxLDM0MTQ1LDM0MTM2LDM0MTEyLDM0MTE4LDM0MTQ4LDM0MTEzLDM0MTQ2LDM0MTE2LDM0MTI5LDM0MTE5LDM0MTQ3LDM0MTEwLDM0MTM5LDM0MTYxLDM0MTI2LDM0MTU4LDM0MTY1LDM0MTMzLDM0MTUxLDM0MTQ0LDM0MTg4LDM0MTUwLDM0MTQxLDM0MTMyLDM0MTQ5LDM0MTU2LDM0NDAzLDM0NDA1LDM0NDA0LDM0NzE1LDM0NzAzLDM0NzExLDM0NzA3LDM0NzA2LDM0Njk2LDM0Njg5LDM0NzEwLDM0NzEyLDM0NjgxLDM0Njk1LDM0NzIzLDM0NjkzLDM0NzA0LDM0NzA1LDM0NzE3LDM0NjkyLDM0NzA4LDM0NzE2LDM0NzE0LDM0Njk3LDM1MTAyLDM1MTEwLDM1MTIwLDM1MTE3LDM1MTE4LDM1MTExLDM1MTIxLDM1MTA2LDM1MTEzLDM1MTA3LDM1MTE5LDM1MTE2LDM1MTAzLDM1MzEzLDM1NTUyLDM1NTU0LDM1NTcwLDM1NTcyLDM1NTczLDM1NTQ5LDM1NjA0LDM1NTU2LDM1NTUxLDM1NTY4LDM1NTI4LDM1NTUwLDM1NTUzLDM1NTYwLDM1NTgzLDM1NTY3LDM1NTc5LDM1OTg1LDM1OTg2LDM1OTg0LDM2MDg1LDM2MDc4LDM2MDgxLDM2MDgwLDM2MDgzLDM2MjA0LDM2MjA2LDM2MjYxLDM2MjYzLDM2NDAzLDM2NDE0LDM2NDA4LDM2NDE2LDM2NDIxLDM2NDA2LDM2NDEyLDM2NDEzLDM2NDE3LDM2NDAwLDM2NDE1LDM2NTQxLDM2NjYyLDM2NjU0LDM2NjYxLDM2NjU4LDM2NjY1LDM2NjYzLDM2NjYwLDM2OTgyLDM2OTg1LDM2OTg3LDM2OTk4LDM3MTE0LDM3MTcxLDM3MTczLDM3MTc0LDM3MjY3LDM3MjY0LDM3MjY1LDM3MjYxLDM3MjYzLDM3NjcxLDM3NjYyLDM3NjQwLDM3NjYzLDM3NjM4LDM3NjQ3LDM3NzU0LDM3Njg4LDM3NjkyLDM3NjU5LDM3NjY3LDM3NjUwLDM3NjMzLDM3NzAyLDM3Njc3LDM3NjQ2LDM3NjQ1LDM3NTc5LDM3NjYxLDM3NjI2LDM3NjY5LDM3NjUxLDM3NjI1LDM3NjIzLDM3Njg0LDM3NjM0LDM3NjY4LDM3NjMxLDM3NjczLDM3Njg5LDM3Njg1LDM3Njc0LDM3NjUyLDM3NjQ0LDM3NjQzLDM3NjMwLDM3NjQxLDM3NjMyLDM3NjI3LDM3NjU0LDM4MzMyLDM4MzQ5LDM4MzM0LDM4MzI5LDM4MzMwLDM4MzI2LDM4MzM1LDM4MzI1LDM4MzMzLDM4NTY5LDM4NjEyLDM4NjY3LDM4Njc0LDM4NjcyLDM4ODA5LDM4ODA3LDM4ODA0LDM4ODk2LDM4OTA0LDM4OTY1LDM4OTU5LDM4OTYyLDM5MjA0LDM5MTk5LDM5MjA3LDM5MjA5LDM5MzI2LDM5NDA2LDM5NDA0LDM5Mzk3LDM5Mzk2LDM5NDA4LDM5Mzk1LDM5NDAyLDM5NDAxLDM5Mzk5LDM5NjA5LDM5NjE1LDM5NjA0LDM5NjExLDM5NjcwLDM5Njc0LDM5NjczLDM5NjcxLDM5NzMxLDM5ODA4LDM5ODEzLDM5ODE1LDM5ODA0LDM5ODA2LDM5ODAzLDM5ODEwLDM5ODI3LDM5ODI2LDM5ODI0LDM5ODAyLDM5ODI5LDM5ODA1LDM5ODE2LDQwMjI5LDQwMjE1LDQwMjI0LDQwMjIyLDQwMjEyLDQwMjMzLDQwMjIxLDQwMjE2LDQwMjI2LDQwMjA4LDQwMjE3LDQwMjIzLDQwNTg0LDQwNTgyLDQwNTgzLDQwNjIyLDQwNjIxLDQwNjYxLDQwNjYyLDQwNjk4LDQwNzIyLDQwNzY1LDIwNzc0LDIwNzczLDIwNzcwLDIwNzcyLDIwNzY4LDIwNzc3LDIxMjM2LDIyMTYzLDIyMTU2LDIyMTU3LDIyMTUwLDIyMTQ4LDIyMTQ3LDIyMTQyLDIyMTQ2LDIyMTQzLDIyMTQ1LDIyNzQyLDIyNzQwLDIyNzM1LDIyNzM4LDIzMzQxLDIzMzMzLDIzMzQ2LDIzMzMxLDIzMzQwLDIzMzM1LDIzMzM0LDIzMzQzLDIzMzQyLDIzNDE5LDIzNTM3LDIzNTM4LDIzOTkxLDI0MTcyLDI0MTcwLDI0NTEwLDI0NTA3LDI1MDI3LDI1MDEzLDI1MDIwLDI1MDYzLDI1MDU2LDI1MDYxLDI1MDYwLDI1MDY0LDI1MDU0LDI1ODM5LDI1ODMzLDI1ODI3LDI1ODM1LDI1ODI4LDI1ODMyLDI1OTg1LDI1OTg0LDI2MDM4LDI2MDc0LDI2MzIyLDI3Mjc3LDI3Mjg2LDI3MjY1LDI3MzAxLDI3MjczLDI3Mjk1LDI3MjkxLDI3Mjk3LDI3Mjk0LDI3MjcxLDI3MjgzLDI3Mjc4LDI3Mjg1LDI3MjY3LDI3MzA0LDI3MzAwLDI3MjgxLDI3MjYzLDI3MzAyLDI3MjkwLDI3MjY5LDI3Mjc2LDI3MjgyLDI3NDgzLDI3NTY1LDI3NjU3LDI4NjIwLDI4NTg1LDI4NjYwLDI4NjI4LDI4NjQzLDI4NjM2LDI4NjUzLDI4NjQ3LDI4NjQ2LDI4NjM4LDI4NjU4LDI4NjM3LDI4NjQyLDI4NjQ4LDI5MTUzLDI5MTY5LDI5MTYwLDI5MTcwLDI5MTU2LDI5MTY4LDI5MTU0LDI5NTU1LDI5NTUwLDI5NTUxLDI5ODQ3LDI5ODc0LDI5ODY3LDI5ODQwLDI5ODY2LDI5ODY5LDI5ODczLDI5ODYxLDI5ODcxLDI5OTY4LDI5OTY5LDI5OTcwLDI5OTY3LDMwMDg0LDMwMjc1LDMwMjgwLDMwMjgxLDMwMjc5LDMwMzcyLDMwNDQxLDMwNjQ1LDMwNjM1LDMwNjQyLDMwNjQ3LDMwNjQ2LDMwNjQ0LDMwNjQxLDMwNjMyLDMwNzA0LDMwOTYzLDMwOTczLDMwOTc4LDMwOTcxLDMwOTcyLDMwOTYyLDMwOTgxLDMwOTY5LDMwOTc0LDMwOTgwLDMxMTQ3LDMxMTQ0LDMxMzI0LDMxMzIzLDMxMzE4LDMxMzIwLDMxMzE2LDMxMzIyLDMxNDIyLDMxNDI0LDMxNDI1LDMxNzQ5LDMxNzU5LDMxNzMwLDMxNzQ0LDMxNzQzLDMxNzM5LDMxNzU4LDMxNzMyLDMxNzU1LDMxNzMxLDMxNzQ2LDMxNzUzLDMxNzQ3LDMxNzQ1LDMxNzM2LDMxNzQxLDMxNzUwLDMxNzI4LDMxNzI5LDMxNzYwLDMxNzU0LDMxOTc2LDMyMzAxLDMyMzE2LDMyMzIyLDMyMzA3LDM4OTg0LDMyMzEyLDMyMjk4LDMyMzI5LDMyMzIwLDMyMzI3LDMyMjk3LDMyMzMyLDMyMzA0LDMyMzE1LDMyMzEwLDMyMzI0LDMyMzE0LDMyNTgxLDMyNjM5LDMyNjM4LDMyNjM3LDMyNzU2LDMyNzU0LDMyODEyLDMzMjExLDMzMjIwLDMzMjI4LDMzMjI2LDMzMjIxLDMzMjIzLDMzMjEyLDMzMjU3LDMzMzcxLDMzMzcwLDMzMzcyLDM0MTc5LDM0MTc2LDM0MTkxLDM0MjE1LDM0MTk3LDM0MjA4LDM0MTg3LDM0MjExLDM0MTcxLDM0MjEyLDM0MjAyLDM0MjA2LDM0MTY3LDM0MTcyLDM0MTg1LDM0MjA5LDM0MTcwLDM0MTY4LDM0MTM1LDM0MTkwLDM0MTk4LDM0MTgyLDM0MTg5LDM0MjAxLDM0MjA1LDM0MTc3LDM0MjEwLDM0MTc4LDM0MTg0LDM0MTgxLDM0MTY5LDM0MTY2LDM0MjAwLDM0MTkyLDM0MjA3LDM0NDA4LDM0NzUwLDM0NzMwLDM0NzMzLDM0NzU3LDM0NzM2LDM0NzMyLDM0NzQ1LDM0NzQxLDM0NzQ4LDM0NzM0LDM0NzYxLDM0NzU1LDM0NzU0LDM0NzY0LDM0NzQzLDM0NzM1LDM0NzU2LDM0NzYyLDM0NzQwLDM0NzQyLDM0NzUxLDM0NzQ0LDM0NzQ5LDM0NzgyLDM0NzM4LDM1MTI1LDM1MTIzLDM1MTMyLDM1MTM0LDM1MTM3LDM1MTU0LDM1MTI3LDM1MTM4LDM1MjQ1LDM1MjQ3LDM1MjQ2LDM1MzE0LDM1MzE1LDM1NjE0LDM1NjA4LDM1NjA2LDM1NjAxLDM1NTg5LDM1NTk1LDM1NjE4LDM1NTk5LDM1NjAyLDM1NjA1LDM1NTkxLDM1NTk3LDM1NTkyLDM1NTkwLDM1NjEyLDM1NjAzLDM1NjEwLDM1OTE5LDM1OTUyLDM1OTU0LDM1OTUzLDM1OTUxLDM1OTg5LDM1OTg4LDM2MDg5LDM2MjA3LDM2NDMwLDM2NDI5LDM2NDM1LDM2NDMyLDM2NDI4LDM2NDIzLDM2Njc1LDM2NjcyLDM2OTk3LDM2OTkwLDM3MTc2LDM3Mjc0LDM3MjgyLDM3Mjc1LDM3MjczLDM3Mjc5LDM3MjgxLDM3Mjc3LDM3MjgwLDM3NzkzLDM3NzYzLDM3ODA3LDM3NzMyLDM3NzE4LDM3NzAzLDM3NzU2LDM3NzIwLDM3NzI0LDM3NzUwLDM3NzA1LDM3NzEyLDM3NzEzLDM3NzI4LDM3NzQxLDM3Nzc1LDM3NzA4LDM3NzM4LDM3NzUzLDM3NzE5LDM3NzE3LDM3NzE0LDM3NzExLDM3NzQ1LDM3NzUxLDM3NzU1LDM3NzI5LDM3NzI2LDM3NzMxLDM3NzM1LDM3NzYwLDM3NzEwLDM3NzIxLDM4MzQzLDM4MzM2LDM4MzQ1LDM4MzM5LDM4MzQxLDM4MzI3LDM4NTc0LDM4NTc2LDM4NTcyLDM4Njg4LDM4Njg3LDM4NjgwLDM4Njg1LDM4NjgxLDM4ODEwLDM4ODE3LDM4ODEyLDM4ODE0LDM4ODEzLDM4ODY5LDM4ODY4LDM4ODk3LDM4OTc3LDM4OTgwLDM4OTg2LDM4OTg1LDM4OTgxLDM4OTc5LDM5MjA1LDM5MjExLDM5MjEyLDM5MjEwLDM5MjE5LDM5MjE4LDM5MjE1LDM5MjEzLDM5MjE3LDM5MjE2LDM5MzIwLDM5MzMxLDM5MzI5LDM5NDI2LDM5NDE4LDM5NDEyLDM5NDE1LDM5NDE3LDM5NDE2LDM5NDE0LDM5NDE5LDM5NDIxLDM5NDIyLDM5NDIwLDM5NDI3LDM5NjE0LDM5Njc4LDM5Njc3LDM5NjgxLDM5Njc2LDM5NzUyLDM5ODM0LDM5ODQ4LDM5ODM4LDM5ODM1LDM5ODQ2LDM5ODQxLDM5ODQ1LDM5ODQ0LDM5ODE0LDM5ODQyLDM5ODQwLDM5ODU1LDQwMjQzLDQwMjU3LDQwMjk1LDQwMjQ2LDQwMjM4LDQwMjM5LDQwMjQxLDQwMjQ4LDQwMjQwLDQwMjYxLDQwMjU4LDQwMjU5LDQwMjU0LDQwMjQ3LDQwMjU2LDQwMjUzLDMyNzU3LDQwMjM3LDQwNTg2LDQwNTg1LDQwNTg5LDQwNjI0LDQwNjQ4LDQwNjY2LDQwNjk5LDQwNzAzLDQwNzQwLDQwNzM5LDQwNzM4LDQwNzg4LDQwODY0LDIwNzg1LDIwNzgxLDIwNzgyLDIyMTY4LDIyMTcyLDIyMTY3LDIyMTcwLDIyMTczLDIyMTY5LDIyODk2LDIzMzU2LDIzNjU3LDIzNjU4LDI0MDAwLDI0MTczLDI0MTc0LDI1MDQ4LDI1MDU1LDI1MDY5LDI1MDcwLDI1MDczLDI1MDY2LDI1MDcyLDI1MDY3LDI1MDQ2LDI1MDY1LDI1ODU1LDI1ODYwLDI1ODUzLDI1ODQ4LDI1ODU3LDI1ODU5LDI1ODUyLDI2MDA0LDI2MDc1LDI2MzMwLDI2MzMxLDI2MzI4LDI3MzMzLDI3MzIxLDI3MzI1LDI3MzYxLDI3MzM0LDI3MzIyLDI3MzE4LDI3MzE5LDI3MzM1LDI3MzE2LDI3MzA5LDI3NDg2LDI3NTkzLDI3NjU5LDI4Njc5LDI4Njg0LDI4Njg1LDI4NjczLDI4Njc3LDI4NjkyLDI4Njg2LDI4NjcxLDI4NjcyLDI4NjY3LDI4NzEwLDI4NjY4LDI4NjYzLDI4NjgyLDI5MTg1LDI5MTgzLDI5MTc3LDI5MTg3LDI5MTgxLDI5NTU4LDI5ODgwLDI5ODg4LDI5ODc3LDI5ODg5LDI5ODg2LDI5ODc4LDI5ODgzLDI5ODkwLDI5OTcyLDI5OTcxLDMwMzAwLDMwMzA4LDMwMjk3LDMwMjg4LDMwMjkxLDMwMjk1LDMwMjk4LDMwMzc0LDMwMzk3LDMwNDQ0LDMwNjU4LDMwNjUwLDMwOTc1LDMwOTg4LDMwOTk1LDMwOTk2LDMwOTg1LDMwOTkyLDMwOTk0LDMwOTkzLDMxMTQ5LDMxMTQ4LDMxMzI3LDMxNzcyLDMxNzg1LDMxNzY5LDMxNzc2LDMxNzc1LDMxNzg5LDMxNzczLDMxNzgyLDMxNzg0LDMxNzc4LDMxNzgxLDMxNzkyLDMyMzQ4LDMyMzM2LDMyMzQyLDMyMzU1LDMyMzQ0LDMyMzU0LDMyMzUxLDMyMzM3LDMyMzUyLDMyMzQzLDMyMzM5LDMyNjkzLDMyNjkxLDMyNzU5LDMyNzYwLDMyODg1LDMzMjMzLDMzMjM0LDMzMjMyLDMzMzc1LDMzMzc0LDM0MjI4LDM0MjQ2LDM0MjQwLDM0MjQzLDM0MjQyLDM0MjI3LDM0MjI5LDM0MjM3LDM0MjQ3LDM0MjQ0LDM0MjM5LDM0MjUxLDM0MjU0LDM0MjQ4LDM0MjQ1LDM0MjI1LDM0MjMwLDM0MjU4LDM0MzQwLDM0MjMyLDM0MjMxLDM0MjM4LDM0NDA5LDM0NzkxLDM0NzkwLDM0Nzg2LDM0Nzc5LDM0Nzk1LDM0Nzk0LDM0Nzg5LDM0NzgzLDM0ODAzLDM0Nzg4LDM0NzcyLDM0NzgwLDM0NzcxLDM0Nzk3LDM0Nzc2LDM0Nzg3LDM0NzI0LDM0Nzc1LDM0Nzc3LDM0ODE3LDM0ODA0LDM0NzkyLDM0NzgxLDM1MTU1LDM1MTQ3LDM1MTUxLDM1MTQ4LDM1MTQyLDM1MTUyLDM1MTUzLDM1MTQ1LDM1NjI2LDM1NjIzLDM1NjE5LDM1NjM1LDM1NjMyLDM1NjM3LDM1NjU1LDM1NjMxLDM1NjQ0LDM1NjQ2LDM1NjMzLDM1NjIxLDM1NjM5LDM1NjIyLDM1NjM4LDM1NjMwLDM1NjIwLDM1NjQzLDM1NjQ1LDM1NjQyLDM1OTA2LDM1OTU3LDM1OTkzLDM1OTkyLDM1OTkxLDM2MDk0LDM2MTAwLDM2MDk4LDM2MDk2LDM2NDQ0LDM2NDUwLDM2NDQ4LDM2NDM5LDM2NDM4LDM2NDQ2LDM2NDUzLDM2NDU1LDM2NDQzLDM2NDQyLDM2NDQ5LDM2NDQ1LDM2NDU3LDM2NDM2LDM2Njc4LDM2Njc5LDM2NjgwLDM2NjgzLDM3MTYwLDM3MTc4LDM3MTc5LDM3MTgyLDM3Mjg4LDM3Mjg1LDM3Mjg3LDM3Mjk1LDM3MjkwLDM3ODEzLDM3NzcyLDM3Nzc4LDM3ODE1LDM3Nzg3LDM3Nzg5LDM3NzY5LDM3Nzk5LDM3Nzc0LDM3ODAyLDM3NzkwLDM3Nzk4LDM3NzgxLDM3NzY4LDM3Nzg1LDM3NzkxLDM3NzczLDM3ODA5LDM3Nzc3LDM3ODEwLDM3Nzk2LDM3ODAwLDM3ODEyLDM3Nzk1LDM3Nzk3LDM4MzU0LDM4MzU1LDM4MzUzLDM4NTc5LDM4NjE1LDM4NjE4LDI0MDAyLDM4NjIzLDM4NjE2LDM4NjIxLDM4NjkxLDM4NjkwLDM4NjkzLDM4ODI4LDM4ODMwLDM4ODI0LDM4ODI3LDM4ODIwLDM4ODI2LDM4ODE4LDM4ODIxLDM4ODcxLDM4ODczLDM4ODcwLDM4ODcyLDM4OTA2LDM4OTkyLDM4OTkzLDM4OTk0LDM5MDk2LDM5MjMzLDM5MjI4LDM5MjI2LDM5NDM5LDM5NDM1LDM5NDMzLDM5NDM3LDM5NDI4LDM5NDQxLDM5NDM0LDM5NDI5LDM5NDMxLDM5NDMwLDM5NjE2LDM5NjQ0LDM5Njg4LDM5Njg0LDM5Njg1LDM5NzIxLDM5NzMzLDM5NzU0LDM5NzU2LDM5NzU1LDM5ODc5LDM5ODc4LDM5ODc1LDM5ODcxLDM5ODczLDM5ODYxLDM5ODY0LDM5ODkxLDM5ODYyLDM5ODc2LDM5ODY1LDM5ODY5LDQwMjg0LDQwMjc1LDQwMjcxLDQwMjY2LDQwMjgzLDQwMjY3LDQwMjgxLDQwMjc4LDQwMjY4LDQwMjc5LDQwMjc0LDQwMjc2LDQwMjg3LDQwMjgwLDQwMjgyLDQwNTkwLDQwNTg4LDQwNjcxLDQwNzA1LDQwNzA0LDQwNzI2LDQwNzQxLDQwNzQ3LDQwNzQ2LDQwNzQ1LDQwNzQ0LDQwNzgwLDQwNzg5LDIwNzg4LDIwNzg5LDIxMTQyLDIxMjM5LDIxNDI4LDIyMTg3LDIyMTg5LDIyMTgyLDIyMTgzLDIyMTg2LDIyMTg4LDIyNzQ2LDIyNzQ5LDIyNzQ3LDIyODAyLDIzMzU3LDIzMzU4LDIzMzU5LDI0MDAzLDI0MTc2LDI0NTExLDI1MDgzLDI1ODYzLDI1ODcyLDI1ODY5LDI1ODY1LDI1ODY4LDI1ODcwLDI1OTg4LDI2MDc4LDI2MDc3LDI2MzM0LDI3MzY3LDI3MzYwLDI3MzQwLDI3MzQ1LDI3MzUzLDI3MzM5LDI3MzU5LDI3MzU2LDI3MzQ0LDI3MzcxLDI3MzQzLDI3MzQxLDI3MzU4LDI3NDg4LDI3NTY4LDI3NjYwLDI4Njk3LDI4NzExLDI4NzA0LDI4Njk0LDI4NzE1LDI4NzA1LDI4NzA2LDI4NzA3LDI4NzEzLDI4Njk1LDI4NzA4LDI4NzAwLDI4NzE0LDI5MTk2LDI5MTk0LDI5MTkxLDI5MTg2LDI5MTg5LDI5MzQ5LDI5MzUwLDI5MzQ4LDI5MzQ3LDI5MzQ1LDI5ODk5LDI5ODkzLDI5ODc5LDI5ODkxLDI5OTc0LDMwMzA0LDMwNjY1LDMwNjY2LDMwNjYwLDMwNzA1LDMxMDA1LDMxMDAzLDMxMDA5LDMxMDA0LDMwOTk5LDMxMDA2LDMxMTUyLDMxMzM1LDMxMzM2LDMxNzk1LDMxODA0LDMxODAxLDMxNzg4LDMxODAzLDMxOTgwLDMxOTc4LDMyMzc0LDMyMzczLDMyMzc2LDMyMzY4LDMyMzc1LDMyMzY3LDMyMzc4LDMyMzcwLDMyMzcyLDMyMzYwLDMyNTg3LDMyNTg2LDMyNjQzLDMyNjQ2LDMyNjk1LDMyNzY1LDMyNzY2LDMyODg4LDMzMjM5LDMzMjM3LDMzMzgwLDMzMzc3LDMzMzc5LDM0MjgzLDM0Mjg5LDM0Mjg1LDM0MjY1LDM0MjczLDM0MjgwLDM0MjY2LDM0MjYzLDM0Mjg0LDM0MjkwLDM0Mjk2LDM0MjY0LDM0MjcxLDM0Mjc1LDM0MjY4LDM0MjU3LDM0Mjg4LDM0Mjc4LDM0Mjg3LDM0MjcwLDM0Mjc0LDM0ODE2LDM0ODEwLDM0ODE5LDM0ODA2LDM0ODA3LDM0ODI1LDM0ODI4LDM0ODI3LDM0ODIyLDM0ODEyLDM0ODI0LDM0ODE1LDM0ODI2LDM0ODE4LDM1MTcwLDM1MTYyLDM1MTYzLDM1MTU5LDM1MTY5LDM1MTY0LDM1MTYwLDM1MTY1LDM1MTYxLDM1MjA4LDM1MjU1LDM1MjU0LDM1MzE4LDM1NjY0LDM1NjU2LDM1NjU4LDM1NjQ4LDM1NjY3LDM1NjcwLDM1NjY4LDM1NjU5LDM1NjY5LDM1NjY1LDM1NjUwLDM1NjY2LDM1NjcxLDM1OTA3LDM1OTU5LDM1OTU4LDM1OTk0LDM2MTAyLDM2MTAzLDM2MTA1LDM2MjY4LDM2MjY2LDM2MjY5LDM2MjY3LDM2NDYxLDM2NDcyLDM2NDY3LDM2NDU4LDM2NDYzLDM2NDc1LDM2NTQ2LDM2NjkwLDM2Njg5LDM2Njg3LDM2Njg4LDM2NjkxLDM2Nzg4LDM3MTg0LDM3MTgzLDM3Mjk2LDM3MjkzLDM3ODU0LDM3ODMxLDM3ODM5LDM3ODI2LDM3ODUwLDM3ODQwLDM3ODgxLDM3ODY4LDM3ODM2LDM3ODQ5LDM3ODAxLDM3ODYyLDM3ODM0LDM3ODQ0LDM3ODcwLDM3ODU5LDM3ODQ1LDM3ODI4LDM3ODM4LDM3ODI0LDM3ODQyLDM3ODYzLDM4MjY5LDM4MzYyLDM4MzYzLDM4NjI1LDM4Njk3LDM4Njk5LDM4NzAwLDM4Njk2LDM4Njk0LDM4ODM1LDM4ODM5LDM4ODM4LDM4ODc3LDM4ODc4LDM4ODc5LDM5MDA0LDM5MDAxLDM5MDA1LDM4OTk5LDM5MTAzLDM5MTAxLDM5MDk5LDM5MTAyLDM5MjQwLDM5MjM5LDM5MjM1LDM5MzM0LDM5MzM1LDM5NDUwLDM5NDQ1LDM5NDYxLDM5NDUzLDM5NDYwLDM5NDUxLDM5NDU4LDM5NDU2LDM5NDYzLDM5NDU5LDM5NDU0LDM5NDUyLDM5NDQ0LDM5NjE4LDM5NjkxLDM5NjkwLDM5Njk0LDM5NjkyLDM5NzM1LDM5OTE0LDM5OTE1LDM5OTA0LDM5OTAyLDM5OTA4LDM5OTEwLDM5OTA2LDM5OTIwLDM5ODkyLDM5ODk1LDM5OTE2LDM5OTAwLDM5ODk3LDM5OTA5LDM5ODkzLDM5OTA1LDM5ODk4LDQwMzExLDQwMzIxLDQwMzMwLDQwMzI0LDQwMzI4LDQwMzA1LDQwMzIwLDQwMzEyLDQwMzI2LDQwMzMxLDQwMzMyLDQwMzE3LDQwMjk5LDQwMzA4LDQwMzA5LDQwMzA0LDQwMjk3LDQwMzI1LDQwMzA3LDQwMzE1LDQwMzIyLDQwMzAzLDQwMzEzLDQwMzE5LDQwMzI3LDQwMjk2LDQwNTk2LDQwNTkzLDQwNjQwLDQwNzAwLDQwNzQ5LDQwNzY4LDQwNzY5LDQwNzgxLDQwNzkwLDQwNzkxLDQwNzkyLDIxMzAzLDIyMTk0LDIyMTk3LDIyMTk1LDIyNzU1LDIzMzY1LDI0MDA2LDI0MDA3LDI0MzAyLDI0MzAzLDI0NTEyLDI0NTEzLDI1MDgxLDI1ODc5LDI1ODc4LDI1ODc3LDI1ODc1LDI2MDc5LDI2MzQ0LDI2MzM5LDI2MzQwLDI3Mzc5LDI3Mzc2LDI3MzcwLDI3MzY4LDI3Mzg1LDI3Mzc3LDI3Mzc0LDI3Mzc1LDI4NzMyLDI4NzI1LDI4NzE5LDI4NzI3LDI4NzI0LDI4NzIxLDI4NzM4LDI4NzI4LDI4NzM1LDI4NzMwLDI4NzI5LDI4NzM2LDI4NzMxLDI4NzIzLDI4NzM3LDI5MjAzLDI5MjA0LDI5MzUyLDI5NTY1LDI5NTY0LDI5ODgyLDMwMzc5LDMwMzc4LDMwMzk4LDMwNDQ1LDMwNjY4LDMwNjcwLDMwNjcxLDMwNjY5LDMwNzA2LDMxMDEzLDMxMDExLDMxMDE1LDMxMDE2LDMxMDEyLDMxMDE3LDMxMTU0LDMxMzQyLDMxMzQwLDMxMzQxLDMxNDc5LDMxODE3LDMxODE2LDMxODE4LDMxODE1LDMxODEzLDMxOTgyLDMyMzc5LDMyMzgyLDMyMzg1LDMyMzg0LDMyNjk4LDMyNzY3LDMyODg5LDMzMjQzLDMzMjQxLDMzMjkxLDMzMzg0LDMzMzg1LDM0MzM4LDM0MzAzLDM0MzA1LDM0MzAyLDM0MzMxLDM0MzA0LDM0Mjk0LDM0MzA4LDM0MzEzLDM0MzA5LDM0MzE2LDM0MzAxLDM0ODQxLDM0ODMyLDM0ODMzLDM0ODM5LDM0ODM1LDM0ODM4LDM1MTcxLDM1MTc0LDM1MjU3LDM1MzE5LDM1NjgwLDM1NjkwLDM1Njc3LDM1Njg4LDM1NjgzLDM1Njg1LDM1Njg3LDM1NjkzLDM2MjcwLDM2NDg2LDM2NDg4LDM2NDg0LDM2Njk3LDM2Njk0LDM2Njk1LDM2NjkzLDM2Njk2LDM2Njk4LDM3MDA1LDM3MTg3LDM3MTg1LDM3MzAzLDM3MzAxLDM3Mjk4LDM3Mjk5LDM3ODk5LDM3OTA3LDM3ODgzLDM3OTIwLDM3OTAzLDM3OTA4LDM3ODg2LDM3OTA5LDM3OTA0LDM3OTI4LDM3OTEzLDM3OTAxLDM3ODc3LDM3ODg4LDM3ODc5LDM3ODk1LDM3OTAyLDM3OTEwLDM3OTA2LDM3ODgyLDM3ODk3LDM3ODgwLDM3ODk4LDM3ODg3LDM3ODg0LDM3OTAwLDM3ODc4LDM3OTA1LDM3ODk0LDM4MzY2LDM4MzY4LDM4MzY3LDM4NzAyLDM4NzAzLDM4ODQxLDM4ODQzLDM4OTA5LDM4OTEwLDM5MDA4LDM5MDEwLDM5MDExLDM5MDA3LDM5MTA1LDM5MTA2LDM5MjQ4LDM5MjQ2LDM5MjU3LDM5MjQ0LDM5MjQzLDM5MjUxLDM5NDc0LDM5NDc2LDM5NDczLDM5NDY4LDM5NDY2LDM5NDc4LDM5NDY1LDM5NDcwLDM5NDgwLDM5NDY5LDM5NjIzLDM5NjI2LDM5NjIyLDM5Njk2LDM5Njk4LDM5Njk3LDM5OTQ3LDM5OTQ0LDM5OTI3LDM5OTQxLDM5OTU0LDM5OTI4LDQwMDAwLDM5OTQzLDM5OTUwLDM5OTQyLDM5OTU5LDM5OTU2LDM5OTQ1LDQwMzUxLDQwMzQ1LDQwMzU2LDQwMzQ5LDQwMzM4LDQwMzQ0LDQwMzM2LDQwMzQ3LDQwMzUyLDQwMzQwLDQwMzQ4LDQwMzYyLDQwMzQzLDQwMzUzLDQwMzQ2LDQwMzU0LDQwMzYwLDQwMzUwLDQwMzU1LDQwMzgzLDQwMzYxLDQwMzQyLDQwMzU4LDQwMzU5LDQwNjAxLDQwNjAzLDQwNjAyLDQwNjc3LDQwNjc2LDQwNjc5LDQwNjc4LDQwNzUyLDQwNzUwLDQwNzk1LDQwODAwLDQwNzk4LDQwNzk3LDQwNzkzLDQwODQ5LDIwNzk0LDIwNzkzLDIxMTQ0LDIxMTQzLDIyMjExLDIyMjA1LDIyMjA2LDIzMzY4LDIzMzY3LDI0MDExLDI0MDE1LDI0MzA1LDI1MDg1LDI1ODgzLDI3Mzk0LDI3Mzg4LDI3Mzk1LDI3Mzg0LDI3MzkyLDI4NzM5LDI4NzQwLDI4NzQ2LDI4NzQ0LDI4NzQ1LDI4NzQxLDI4NzQyLDI5MjEzLDI5MjEwLDI5MjA5LDI5NTY2LDI5OTc1LDMwMzE0LDMwNjcyLDMxMDIxLDMxMDI1LDMxMDIzLDMxODI4LDMxODI3LDMxOTg2LDMyMzk0LDMyMzkxLDMyMzkyLDMyMzk1LDMyMzkwLDMyMzk3LDMyNTg5LDMyNjk5LDMyODE2LDMzMjQ1LDM0MzI4LDM0MzQ2LDM0MzQyLDM0MzM1LDM0MzM5LDM0MzMyLDM0MzI5LDM0MzQzLDM0MzUwLDM0MzM3LDM0MzM2LDM0MzQ1LDM0MzM0LDM0MzQxLDM0ODU3LDM0ODQ1LDM0ODQzLDM0ODQ4LDM0ODUyLDM0ODQ0LDM0ODU5LDM0ODkwLDM1MTgxLDM1MTc3LDM1MTgyLDM1MTc5LDM1MzIyLDM1NzA1LDM1NzA0LDM1NjUzLDM1NzA2LDM1NzA3LDM2MTEyLDM2MTE2LDM2MjcxLDM2NDk0LDM2NDkyLDM2NzAyLDM2Njk5LDM2NzAxLDM3MTkwLDM3MTg4LDM3MTg5LDM3MzA1LDM3OTUxLDM3OTQ3LDM3OTQyLDM3OTI5LDM3OTQ5LDM3OTQ4LDM3OTM2LDM3OTQ1LDM3OTMwLDM3OTQzLDM3OTMyLDM3OTUyLDM3OTM3LDM4MzczLDM4MzcyLDM4MzcxLDM4NzA5LDM4NzE0LDM4ODQ3LDM4ODgxLDM5MDEyLDM5MTEzLDM5MTEwLDM5MTA0LDM5MjU2LDM5MjU0LDM5NDgxLDM5NDg1LDM5NDk0LDM5NDkyLDM5NDkwLDM5NDg5LDM5NDgyLDM5NDg3LDM5NjI5LDM5NzAxLDM5NzAzLDM5NzA0LDM5NzAyLDM5NzM4LDM5NzYyLDM5OTc5LDM5OTY1LDM5OTY0LDM5OTgwLDM5OTcxLDM5OTc2LDM5OTc3LDM5OTcyLDM5OTY5LDQwMzc1LDQwMzc0LDQwMzgwLDQwMzg1LDQwMzkxLDQwMzk0LDQwMzk5LDQwMzgyLDQwMzg5LDQwMzg3LDQwMzc5LDQwMzczLDQwMzk4LDQwMzc3LDQwMzc4LDQwMzY0LDQwMzkyLDQwMzY5LDQwMzY1LDQwMzk2LDQwMzcxLDQwMzk3LDQwMzcwLDQwNTcwLDQwNjA0LDQwNjgzLDQwNjg2LDQwNjg1LDQwNzMxLDQwNzI4LDQwNzMwLDQwNzUzLDQwNzgyLDQwODA1LDQwODA0LDQwODUwLDIwMTUzLDIyMjE0LDIyMjEzLDIyMjE5LDIyODk3LDIzMzcxLDIzMzcyLDI0MDIxLDI0MDE3LDI0MzA2LDI1ODg5LDI1ODg4LDI1ODk0LDI1ODkwLDI3NDAzLDI3NDAwLDI3NDAxLDI3NjYxLDI4NzU3LDI4NzU4LDI4NzU5LDI4NzU0LDI5MjE0LDI5MjE1LDI5MzUzLDI5NTY3LDI5OTEyLDI5OTA5LDI5OTEzLDI5OTExLDMwMzE3LDMwMzgxLDMxMDI5LDMxMTU2LDMxMzQ0LDMxMzQ1LDMxODMxLDMxODM2LDMxODMzLDMxODM1LDMxODM0LDMxOTg4LDMxOTg1LDMyNDAxLDMyNTkxLDMyNjQ3LDMzMjQ2LDMzMzg3LDM0MzU2LDM0MzU3LDM0MzU1LDM0MzQ4LDM0MzU0LDM0MzU4LDM0ODYwLDM0ODU2LDM0ODU0LDM0ODU4LDM0ODUzLDM1MTg1LDM1MjYzLDM1MjYyLDM1MzIzLDM1NzEwLDM1NzE2LDM1NzE0LDM1NzE4LDM1NzE3LDM1NzExLDM2MTE3LDM2NTAxLDM2NTAwLDM2NTA2LDM2NDk4LDM2NDk2LDM2NTAyLDM2NTAzLDM2NzA0LDM2NzA2LDM3MTkxLDM3OTY0LDM3OTY4LDM3OTYyLDM3OTYzLDM3OTY3LDM3OTU5LDM3OTU3LDM3OTYwLDM3OTYxLDM3OTU4LDM4NzE5LDM4ODgzLDM5MDE4LDM5MDE3LDM5MTE1LDM5MjUyLDM5MjU5LDM5NTAyLDM5NTA3LDM5NTA4LDM5NTAwLDM5NTAzLDM5NDk2LDM5NDk4LDM5NDk3LDM5NTA2LDM5NTA0LDM5NjMyLDM5NzA1LDM5NzIzLDM5NzM5LDM5NzY2LDM5NzY1LDQwMDA2LDQwMDA4LDM5OTk5LDQwMDA0LDM5OTkzLDM5OTg3LDQwMDAxLDM5OTk2LDM5OTkxLDM5OTg4LDM5OTg2LDM5OTk3LDM5OTkwLDQwNDExLDQwNDAyLDQwNDE0LDQwNDEwLDQwMzk1LDQwNDAwLDQwNDEyLDQwNDAxLDQwNDE1LDQwNDI1LDQwNDA5LDQwNDA4LDQwNDA2LDQwNDM3LDQwNDA1LDQwNDEzLDQwNjMwLDQwNjg4LDQwNzU3LDQwNzU1LDQwNzU0LDQwNzcwLDQwODExLDQwODUzLDQwODY2LDIwNzk3LDIxMTQ1LDIyNzYwLDIyNzU5LDIyODk4LDIzMzczLDI0MDI0LDM0ODYzLDI0Mzk5LDI1MDg5LDI1MDkxLDI1MDkyLDI1ODk3LDI1ODkzLDI2MDA2LDI2MzQ3LDI3NDA5LDI3NDEwLDI3NDA3LDI3NTk0LDI4NzYzLDI4NzYyLDI5MjE4LDI5NTcwLDI5NTY5LDI5NTcxLDMwMzIwLDMwNjc2LDMxODQ3LDMxODQ2LDMyNDA1LDMzMzg4LDM0MzYyLDM0MzY4LDM0MzYxLDM0MzY0LDM0MzUzLDM0MzYzLDM0MzY2LDM0ODY0LDM0ODY2LDM0ODYyLDM0ODY3LDM1MTkwLDM1MTg4LDM1MTg3LDM1MzI2LDM1NzI0LDM1NzI2LDM1NzIzLDM1NzIwLDM1OTA5LDM2MTIxLDM2NTA0LDM2NzA4LDM2NzA3LDM3MzA4LDM3OTg2LDM3OTczLDM3OTgxLDM3OTc1LDM3OTgyLDM4ODUyLDM4ODUzLDM4OTEyLDM5NTEwLDM5NTEzLDM5NzEwLDM5NzExLDM5NzEyLDQwMDE4LDQwMDI0LDQwMDE2LDQwMDEwLDQwMDEzLDQwMDExLDQwMDIxLDQwMDI1LDQwMDEyLDQwMDE0LDQwNDQzLDQwNDM5LDQwNDMxLDQwNDE5LDQwNDI3LDQwNDQwLDQwNDIwLDQwNDM4LDQwNDE3LDQwNDMwLDQwNDIyLDQwNDM0LDQwNDMyLDQwNDE4LDQwNDI4LDQwNDM2LDQwNDM1LDQwNDI0LDQwNDI5LDQwNjQyLDQwNjU2LDQwNjkwLDQwNjkxLDQwNzEwLDQwNzMyLDQwNzYwLDQwNzU5LDQwNzU4LDQwNzcxLDQwNzgzLDQwODE3LDQwODE2LDQwODE0LDQwODE1LDIyMjI3LDIyMjIxLDIzMzc0LDIzNjYxLDI1OTAxLDI2MzQ5LDI2MzUwLDI3NDExLDI4NzY3LDI4NzY5LDI4NzY1LDI4NzY4LDI5MjE5LDI5OTE1LDI5OTI1LDMwNjc3LDMxMDMyLDMxMTU5LDMxMTU4LDMxODUwLDMyNDA3LDMyNjQ5LDMzMzg5LDM0MzcxLDM0ODcyLDM0ODcxLDM0ODY5LDM0ODkxLDM1NzMyLDM1NzMzLDM2NTEwLDM2NTExLDM2NTEyLDM2NTA5LDM3MzEwLDM3MzA5LDM3MzE0LDM3OTk1LDM3OTkyLDM3OTkzLDM4NjI5LDM4NzI2LDM4NzIzLDM4NzI3LDM4ODU1LDM4ODg1LDM5NTE4LDM5NjM3LDM5NzY5LDQwMDM1LDQwMDM5LDQwMDM4LDQwMDM0LDQwMDMwLDQwMDMyLDQwNDUwLDQwNDQ2LDQwNDU1LDQwNDUxLDQwNDU0LDQwNDUzLDQwNDQ4LDQwNDQ5LDQwNDU3LDQwNDQ3LDQwNDQ1LDQwNDUyLDQwNjA4LDQwNzM0LDQwNzc0LDQwODIwLDQwODIxLDQwODIyLDIyMjI4LDI1OTAyLDI2MDQwLDI3NDE2LDI3NDE3LDI3NDE1LDI3NDE4LDI4NzcwLDI5MjIyLDI5MzU0LDMwNjgwLDMwNjgxLDMxMDMzLDMxODQ5LDMxODUxLDMxOTkwLDMyNDEwLDMyNDA4LDMyNDExLDMyNDA5LDMzMjQ4LDMzMjQ5LDM0Mzc0LDM0Mzc1LDM0Mzc2LDM1MTkzLDM1MTk0LDM1MTk2LDM1MTk1LDM1MzI3LDM1NzM2LDM1NzM3LDM2NTE3LDM2NTE2LDM2NTE1LDM3OTk4LDM3OTk3LDM3OTk5LDM4MDAxLDM4MDAzLDM4NzI5LDM5MDI2LDM5MjYzLDQwMDQwLDQwMDQ2LDQwMDQ1LDQwNDU5LDQwNDYxLDQwNDY0LDQwNDYzLDQwNDY2LDQwNDY1LDQwNjA5LDQwNjkzLDQwNzEzLDQwNzc1LDQwODI0LDQwODI3LDQwODI2LDQwODI1LDIyMzAyLDI4Nzc0LDMxODU1LDM0ODc2LDM2Mjc0LDM2NTE4LDM3MzE1LDM4MDA0LDM4MDA4LDM4MDA2LDM4MDA1LDM5NTIwLDQwMDUyLDQwMDUxLDQwMDQ5LDQwMDUzLDQwNDY4LDQwNDY3LDQwNjk0LDQwNzE0LDQwODY4LDI4Nzc2LDI4NzczLDMxOTkxLDM0NDEwLDM0ODc4LDM0ODc3LDM0ODc5LDM1NzQyLDM1OTk2LDM2NTIxLDM2NTUzLDM4NzMxLDM5MDI3LDM5MDI4LDM5MTE2LDM5MjY1LDM5MzM5LDM5NTI0LDM5NTI2LDM5NTI3LDM5NzE2LDQwNDY5LDQwNDcxLDQwNzc2LDI1MDk1LDI3NDIyLDI5MjIzLDM0MzgwLDM2NTIwLDM4MDE4LDM4MDE2LDM4MDE3LDM5NTI5LDM5NTI4LDM5NzI2LDQwNDczLDI5MjI1LDM0Mzc5LDM1NzQzLDM4MDE5LDQwMDU3LDQwNjMxLDMwMzI1LDM5NTMxLDQwMDU4LDQwNDc3LDI4Nzc3LDI4Nzc4LDQwNjEyLDQwODMwLDQwNzc3LDQwODU2LDMwODQ5LDM3NTYxLDM1MDIzLDIyNzE1LDI0NjU4LDMxOTExLDIzMjkwLDk1NTYsOTU3NCw5NTU5LDk1NjgsOTU4MCw5NTcxLDk1NjIsOTU3Nyw5NTY1LDk1NTQsOTU3Miw5NTU3LDk1NjYsOTU3OCw5NTY5LDk1NjAsOTU3NSw5NTYzLDk1NTUsOTU3Myw5NTU4LDk1NjcsOTU3OSw5NTcwLDk1NjEsOTU3Niw5NTY0LDk1NTMsOTU1Miw5NTgxLDk1ODIsOTU4NCw5NTgzLDY1NTE3LDEzMjQyMywzNzU5NSwxMzI1NzUsMTQ3Mzk3LDM0MTI0LDE3MDc3LDI5Njc5LDIwOTE3LDEzODk3LDE0OTgyNiwxNjYzNzIsMzc3MDAsMTM3NjkxLDMzNTE4LDE0NjYzMiwzMDc4MCwyNjQzNiwyNTMxMSwxNDk4MTEsMTY2MzE0LDEzMTc0NCwxNTg2NDMsMTM1OTQxLDIwMzk1LDE0MDUyNSwyMDQ4OCwxNTkwMTcsMTYyNDM2LDE0NDg5NiwxNTAxOTMsMTQwNTYzLDIwNTIxLDEzMTk2NiwyNDQ4NCwxMzE5NjgsMTMxOTExLDI4Mzc5LDEzMjEyNywyMDYwNSwyMDczNywxMzQzNCwyMDc1MCwzOTAyMCwxNDE0NywzMzgxNCwxNDk5MjQsMTMyMjMxLDIwODMyLDE0NDMwOCwyMDg0MiwxMzQxNDMsMTM5NTE2LDEzMTgxMywxNDA1OTIsMTMyNDk0LDE0MzkyMywxMzc2MDMsMjM0MjYsMzQ2ODUsMTMyNTMxLDE0NjU4NSwyMDkxNCwyMDkyMCw0MDI0NCwyMDkzNywyMDk0MywyMDk0NSwxNTU4MCwyMDk0NywxNTAxODIsMjA5MTUsMjA5NjIsMjEzMTQsMjA5NzMsMzM3NDEsMjY5NDIsMTQ1MTk3LDI0NDQzLDIxMDAzLDIxMDMwLDIxMDUyLDIxMTczLDIxMDc5LDIxMTQwLDIxMTc3LDIxMTg5LDMxNzY1LDM0MTE0LDIxMjE2LDM0MzE3LDE1ODQ4MywyMTI1MywxNjY2MjIsMjE4MzMsMjgzNzcsMTQ3MzI4LDEzMzQ2MCwxNDc0MzYsMjEyOTksMjEzMTYsMTM0MTE0LDI3ODUxLDEzNjk5OCwyNjY1MSwyOTY1MywyNDY1MCwxNjA0MiwxNDU0MCwxMzY5MzYsMjkxNDksMTc1NzAsMjEzNTcsMjEzNjQsMTY1NTQ3LDIxMzc0LDIxMzc1LDEzNjU5OCwxMzY3MjMsMzA2OTQsMjEzOTUsMTY2NTU1LDIxNDA4LDIxNDE5LDIxNDIyLDI5NjA3LDE1MzQ1OCwxNjIxNywyOTU5NiwyMTQ0MSwyMTQ0NSwyNzcyMSwyMDA0MSwyMjUyNiwyMTQ2NSwxNTAxOSwxMzQwMzEsMjE0NzIsMTQ3NDM1LDE0Mjc1NSwyMTQ5NCwxMzQyNjMsMjE1MjMsMjg3OTMsMjE4MDMsMjYxOTksMjc5OTUsMjE2MTMsMTU4NTQ3LDEzNDUxNiwyMTg1MywyMTY0NywyMTY2OCwxODM0MiwxMzY5NzMsMTM0ODc3LDE1Nzk2LDEzNDQ3NywxNjYzMzIsMTQwOTUyLDIxODMxLDE5NjkzLDIxNTUxLDI5NzE5LDIxODk0LDIxOTI5LDIyMDIxLDEzNzQzMSwxNDc1MTQsMTc3NDYsMTQ4NTMzLDI2MjkxLDEzNTM0OCwyMjA3MSwyNjMxNywxNDQwMTAsMjYyNzYsMjYyODUsMjIwOTMsMjIwOTUsMzA5NjEsMjIyNTcsMzg3OTEsMjE1MDIsMjIyNzIsMjIyNTUsMjIyNTMsMTY2NzU4LDEzODU5LDEzNTc1OSwyMjM0MiwxNDc4NzcsMjc3NTgsMjg4MTEsMjIzMzgsMTQwMDEsMTU4ODQ2LDIyNTAyLDEzNjIxNCwyMjUzMSwxMzYyNzYsMTQ4MzIzLDIyNTY2LDE1MDUxNywyMjYyMCwyMjY5OCwxMzY2NSwyMjc1MiwyMjc0OCwxMzU3NDAsMjI3NzksMjM1NTEsMjIzMzksMTcyMzY4LDE0ODA4OCwzNzg0MywxMzcyOSwyMjgxNSwyNjc5MCwxNDAxOSwyODI0OSwxMzY3NjYsMjMwNzYsMjE4NDMsMTM2ODUwLDM0MDUzLDIyOTg1LDEzNDQ3OCwxNTg4NDksMTU5MDE4LDEzNzE4MCwyMzAwMSwxMzcyMTEsMTM3MTM4LDE1OTE0MiwyODAxNywxMzcyNTYsMTM2OTE3LDIzMDMzLDE1OTMwMSwyMzIxMSwyMzEzOSwxNDA1NCwxNDk5MjksMjMxNTksMTQwODgsMjMxOTAsMjk3OTcsMjMyNTEsMTU5NjQ5LDE0MDYyOCwxNTc0OSwxMzc0ODksMTQxMzAsMTM2ODg4LDI0MTk1LDIxMjAwLDIzNDE0LDI1OTkyLDIzNDIwLDE2MjMxOCwxNjM4OCwxODUyNSwxMzE1ODgsMjM1MDksMjQ5MjgsMTM3NzgwLDE1NDA2MCwxMzI1MTcsMjM1MzksMjM0NTMsMTk3MjgsMjM1NTcsMTM4MDUyLDIzNTcxLDI5NjQ2LDIzNTcyLDEzODQwNSwxNTg1MDQsMjM2MjUsMTg2NTMsMjM2ODUsMjM3ODUsMjM3OTEsMjM5NDcsMTM4NzQ1LDEzODgwNywyMzgyNCwyMzgzMiwyMzg3OCwxMzg5MTYsMjM3MzgsMjQwMjMsMzM1MzIsMTQzODEsMTQ5NzYxLDEzOTMzNywxMzk2MzUsMzM0MTUsMTQzOTAsMTUyOTgsMjQxMTAsMjcyNzQsMjQxODEsMjQxODYsMTQ4NjY4LDEzNDM1NSwyMTQxNCwyMDE1MSwyNDI3MiwyMTQxNiwxMzcwNzMsMjQwNzMsMjQzMDgsMTY0OTk0LDI0MzEzLDI0MzE1LDE0NDk2LDI0MzE2LDI2Njg2LDM3OTE1LDI0MzMzLDEzMTUyMSwxOTQ3MDgsMTUwNzAsMTg2MDYsMTM1OTk0LDI0Mzc4LDE1NzgzMiwxNDAyNDAsMjQ0MDgsMTQwNDAxLDI0NDE5LDM4ODQ1LDE1OTM0MiwyNDQzNCwzNzY5NiwxNjY0NTQsMjQ0ODcsMjM5OTAsMTU3MTEsMTUyMTQ0LDEzOTExNCwxNTk5OTIsMTQwOTA0LDM3MzM0LDEzMTc0MiwxNjY0NDEsMjQ2MjUsMjYyNDUsMTM3MzM1LDE0NjkxLDE1ODE1LDEzODgxLDIyNDE2LDE0MTIzNiwzMTA4OSwxNTkzNiwyNDczNCwyNDc0MCwyNDc1NSwxNDk4OTAsMTQ5OTAzLDE2MjM4NywyOTg2MCwyMDcwNSwyMzIwMCwyNDkzMiwzMzgyOCwyNDg5OCwxOTQ3MjYsMTU5NDQyLDI0OTYxLDIwOTgwLDEzMjY5NCwyNDk2NywyMzQ2NiwxNDczODMsMTQxNDA3LDI1MDQzLDE2NjgxMywxNzAzMzMsMjUwNDAsMTQ2NDIsMTQxNjk2LDE0MTUwNSwyNDYxMSwyNDkyNCwyNTg4NiwyNTQ4MywxMzEzNTIsMjUyODUsMTM3MDcyLDI1MzAxLDE0Mjg2MSwyNTQ1MiwxNDk5ODMsMTQ4NzEsMjU2NTYsMjU1OTIsMTM2MDc4LDEzNzIxMiwyNTc0NCwyODU1NCwxNDI5MDIsMzg5MzIsMTQ3NTk2LDE1MzM3MywyNTgyNSwyNTgyOSwzODAxMSwxNDk1MCwyNTY1OCwxNDkzNSwyNTkzMywyODQzOCwxNTAwNTYsMTUwMDUxLDI1OTg5LDI1OTY1LDI1OTUxLDE0MzQ4NiwyNjAzNywxNDk4MjQsMTkyNTUsMjYwNjUsMTY2MDAsMTM3MjU3LDI2MDgwLDI2MDgzLDI0NTQzLDE0NDM4NCwyNjEzNiwxNDM4NjMsMTQzODY0LDI2MTgwLDE0Mzc4MCwxNDM3ODEsMjYxODcsMTM0NzczLDI2MjE1LDE1MjAzOCwyNjIyNywyNjIyOCwxMzg4MTMsMTQzOTIxLDE2NTM2NCwxNDM4MTYsMTUyMzM5LDMwNjYxLDE0MTU1OSwzOTMzMiwyNjM3MCwxNDgzODAsMTUwMDQ5LDE1MTQ3LDI3MTMwLDE0NTM0NiwyNjQ2MiwyNjQ3MSwyNjQ2NiwxNDc5MTcsMTY4MTczLDI2NTgzLDE3NjQxLDI2NjU4LDI4MjQwLDM3NDM2LDI2NjI1LDE0NDM1OCwxNTkxMzYsMjY3MTcsMTQ0NDk1LDI3MTA1LDI3MTQ3LDE2NjYyMywyNjk5NSwyNjgxOSwxNDQ4NDUsMjY4ODEsMjY4ODAsMTU2NjYsMTQ4NDksMTQ0OTU2LDE1MjMyLDI2NTQwLDI2OTc3LDE2NjQ3NCwxNzE0OCwyNjkzNCwyNzAzMiwxNTI2NSwxMzIwNDEsMzM2MzUsMjA2MjQsMjcxMjksMTQ0OTg1LDEzOTU2MiwyNzIwNSwxNDUxNTUsMjcyOTMsMTUzNDcsMjY1NDUsMjczMzYsMTY4MzQ4LDE1MzczLDI3NDIxLDEzMzQxMSwyNDc5OCwyNzQ0NSwyNzUwOCwxNDEyNjEsMjgzNDEsMTQ2MTM5LDEzMjAyMSwxMzc1NjAsMTQxNDQsMjE1MzcsMTQ2MjY2LDI3NjE3LDE0NzE5NiwyNzYxMiwyNzcwMywxNDA0MjcsMTQ5NzQ1LDE1ODU0NSwyNzczOCwzMzMxOCwyNzc2OSwxNDY4NzYsMTc2MDUsMTQ2ODc3LDE0Nzg3NiwxNDk3NzIsMTQ5NzYwLDE0NjYzMywxNDA1MywxNTU5NSwxMzQ0NTAsMzk4MTEsMTQzODY1LDE0MDQzMywzMjY1NSwyNjY3OSwxNTkwMTMsMTU5MTM3LDE1OTIxMSwyODA1NCwyNzk5NiwyODI4NCwyODQyMCwxNDk4ODcsMTQ3NTg5LDE1OTM0NiwzNDA5OSwxNTk2MDQsMjA5MzUsMjc4MDQsMjgxODksMzM4MzgsMTY2Njg5LDI4MjA3LDE0Njk5MSwyOTc3OSwxNDczMzAsMzExODAsMjgyMzksMjMxODUsMTQzNDM1LDI4NjY0LDE0MDkzLDI4NTczLDE0Njk5MiwyODQxMCwxMzYzNDMsMTQ3NTE3LDE3NzQ5LDM3ODcyLDI4NDg0LDI4NTA4LDE1Njk0LDI4NTMyLDE2ODMwNCwxNTY3NSwyODU3NSwxNDc3ODAsMjg2MjcsMTQ3NjAxLDE0Nzc5NywxNDc1MTMsMTQ3NDQwLDE0NzM4MCwxNDc3NzUsMjA5NTksMTQ3Nzk4LDE0Nzc5OSwxNDc3NzYsMTU2MTI1LDI4NzQ3LDI4Nzk4LDI4ODM5LDI4ODAxLDI4ODc2LDI4ODg1LDI4ODg2LDI4ODk1LDE2NjQ0LDE1ODQ4LDI5MTA4LDI5MDc4LDE0ODA4NywyODk3MSwyODk5NywyMzE3NiwyOTAwMiwyOTAzOCwyMzcwOCwxNDgzMjUsMjkwMDcsMzc3MzAsMTQ4MTYxLDI4OTcyLDE0ODU3MCwxNTAwNTUsMTUwMDUwLDI5MTE0LDE2Njg4OCwyODg2MSwyOTE5OCwzNzk1NCwyOTIwNSwyMjgwMSwzNzk1NSwyOTIyMCwzNzY5NywxNTMwOTMsMjkyMzAsMjkyNDgsMTQ5ODc2LDI2ODEzLDI5MjY5LDI5MjcxLDE1OTU3LDE0MzQyOCwyNjYzNywyODQ3NywyOTMxNCwyOTQ4MiwyOTQ4MywxNDk1MzksMTY1OTMxLDE4NjY5LDE2NTg5MiwyOTQ4MCwyOTQ4NiwyOTY0NywyOTYxMCwxMzQyMDIsMTU4MjU0LDI5NjQxLDI5NzY5LDE0NzkzOCwxMzY5MzUsMTUwMDUyLDI2MTQ3LDE0MDIxLDE0OTk0MywxNDk5MDEsMTUwMDExLDI5Njg3LDI5NzE3LDI2ODgzLDE1MDA1NCwyOTc1MywxMzI1NDcsMTYwODcsMjk3ODgsMTQxNDg1LDI5NzkyLDE2NzYwMiwyOTc2NywyOTY2OCwyOTgxNCwzMzcyMSwyOTgwNCwxNDEyOCwyOTgxMiwzNzg3MywyNzE4MCwyOTgyNiwxODc3MSwxNTAxNTYsMTQ3ODA3LDE1MDEzNywxNjY3OTksMjMzNjYsMTY2OTE1LDEzNzM3NCwyOTg5NiwxMzc2MDgsMjk5NjYsMjk5MjksMjk5ODIsMTY3NjQxLDEzNzgwMywyMzUxMSwxNjc1OTYsMzc3NjUsMzAwMjksMzAwMjYsMzAwNTUsMzAwNjIsMTUxNDI2LDE2MTMyLDE1MDgwMywzMDA5NCwyOTc4OSwzMDExMCwzMDEzMiwzMDIxMCwzMDI1MiwzMDI4OSwzMDI4NywzMDMxOSwzMDMyNiwxNTY2NjEsMzAzNTIsMzMyNjMsMTQzMjgsMTU3OTY5LDE1Nzk2NiwzMDM2OSwzMDM3MywzMDM5MSwzMDQxMiwxNTk2NDcsMzM4OTAsMTUxNzA5LDE1MTkzMywxMzg3ODAsMzA0OTQsMzA1MDIsMzA1MjgsMjU3NzUsMTUyMDk2LDMwNTUyLDE0NDA0NCwzMDYzOSwxNjYyNDQsMTY2MjQ4LDEzNjg5NywzMDcwOCwzMDcyOSwxMzYwNTQsMTUwMDM0LDI2ODI2LDMwODk1LDMwOTE5LDMwOTMxLDM4NTY1LDMxMDIyLDE1MzA1NiwzMDkzNSwzMTAyOCwzMDg5NywxNjEyOTIsMzY3OTIsMzQ5NDgsMTY2Njk5LDE1NTc3OSwxNDA4MjgsMzExMTAsMzUwNzIsMjY4ODIsMzExMDQsMTUzNjg3LDMxMTMzLDE2MjYxNywzMTAzNiwzMTE0NSwyODIwMiwxNjAwMzgsMTYwNDAsMzExNzQsMTY4MjA1LDMxMTg4XSxcbiAgXCJldWMta3JcIjpbNDQwMzQsNDQwMzUsNDQwMzcsNDQwMzgsNDQwNDMsNDQwNDQsNDQwNDUsNDQwNDYsNDQwNDcsNDQwNTYsNDQwNjIsNDQwNjMsNDQwNjUsNDQwNjYsNDQwNjcsNDQwNjksNDQwNzAsNDQwNzEsNDQwNzIsNDQwNzMsNDQwNzQsNDQwNzUsNDQwNzgsNDQwODIsNDQwODMsNDQwODQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQwODUsNDQwODYsNDQwODcsNDQwOTAsNDQwOTEsNDQwOTMsNDQwOTQsNDQwOTUsNDQwOTcsNDQwOTgsNDQwOTksNDQxMDAsNDQxMDEsNDQxMDIsNDQxMDMsNDQxMDQsNDQxMDUsNDQxMDYsNDQxMDgsNDQxMTAsNDQxMTEsNDQxMTIsNDQxMTMsNDQxMTQsNDQxMTUsNDQxMTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQxMTgsNDQxMTksNDQxMjEsNDQxMjIsNDQxMjMsNDQxMjUsNDQxMjYsNDQxMjcsNDQxMjgsNDQxMjksNDQxMzAsNDQxMzEsNDQxMzIsNDQxMzMsNDQxMzQsNDQxMzUsNDQxMzYsNDQxMzcsNDQxMzgsNDQxMzksNDQxNDAsNDQxNDEsNDQxNDIsNDQxNDMsNDQxNDYsNDQxNDcsNDQxNDksNDQxNTAsNDQxNTMsNDQxNTUsNDQxNTYsNDQxNTcsNDQxNTgsNDQxNTksNDQxNjIsNDQxNjcsNDQxNjgsNDQxNzMsNDQxNzQsNDQxNzUsNDQxNzcsNDQxNzgsNDQxNzksNDQxODEsNDQxODIsNDQxODMsNDQxODQsNDQxODUsNDQxODYsNDQxODcsNDQxOTAsNDQxOTQsNDQxOTUsNDQxOTYsNDQxOTcsNDQxOTgsNDQxOTksNDQyMDMsNDQyMDUsNDQyMDYsNDQyMDksNDQyMTAsNDQyMTEsNDQyMTIsNDQyMTMsNDQyMTQsNDQyMTUsNDQyMTgsNDQyMjIsNDQyMjMsNDQyMjQsNDQyMjYsNDQyMjcsNDQyMjksNDQyMzAsNDQyMzEsNDQyMzMsNDQyMzQsNDQyMzUsNDQyMzcsNDQyMzgsNDQyMzksNDQyNDAsNDQyNDEsNDQyNDIsNDQyNDMsNDQyNDQsNDQyNDYsNDQyNDgsNDQyNDksNDQyNTAsNDQyNTEsNDQyNTIsNDQyNTMsNDQyNTQsNDQyNTUsNDQyNTgsNDQyNTksNDQyNjEsNDQyNjIsNDQyNjUsNDQyNjcsNDQyNjksNDQyNzAsNDQyNzQsNDQyNzYsNDQyNzksNDQyODAsNDQyODEsNDQyODIsNDQyODMsNDQyODYsNDQyODcsNDQyODksNDQyOTAsNDQyOTEsNDQyOTMsNDQyOTUsNDQyOTYsNDQyOTcsNDQyOTgsNDQyOTksNDQzMDIsNDQzMDQsNDQzMDYsNDQzMDcsNDQzMDgsNDQzMDksNDQzMTAsNDQzMTEsNDQzMTMsNDQzMTQsNDQzMTUsNDQzMTcsNDQzMTgsNDQzMTksNDQzMjEsNDQzMjIsNDQzMjMsNDQzMjQsNDQzMjUsNDQzMjYsNDQzMjcsNDQzMjgsNDQzMzAsNDQzMzEsNDQzMzQsNDQzMzUsNDQzMzYsNDQzMzcsNDQzMzgsNDQzMzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQzNDIsNDQzNDMsNDQzNDUsNDQzNDYsNDQzNDcsNDQzNDksNDQzNTAsNDQzNTEsNDQzNTIsNDQzNTMsNDQzNTQsNDQzNTUsNDQzNTgsNDQzNjAsNDQzNjIsNDQzNjMsNDQzNjQsNDQzNjUsNDQzNjYsNDQzNjcsNDQzNjksNDQzNzAsNDQzNzEsNDQzNzMsNDQzNzQsNDQzNzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQzNzcsNDQzNzgsNDQzNzksNDQzODAsNDQzODEsNDQzODIsNDQzODMsNDQzODQsNDQzODYsNDQzODgsNDQzODksNDQzOTAsNDQzOTEsNDQzOTIsNDQzOTMsNDQzOTQsNDQzOTUsNDQzOTgsNDQzOTksNDQ0MDEsNDQ0MDIsNDQ0MDcsNDQ0MDgsNDQ0MDksNDQ0MTAsNDQ0MTQsNDQ0MTYsNDQ0MTksNDQ0MjAsNDQ0MjEsNDQ0MjIsNDQ0MjMsNDQ0MjYsNDQ0MjcsNDQ0MjksNDQ0MzAsNDQ0MzEsNDQ0MzMsNDQ0MzQsNDQ0MzUsNDQ0MzYsNDQ0MzcsNDQ0MzgsNDQ0MzksNDQ0NDAsNDQ0NDEsNDQ0NDIsNDQ0NDMsNDQ0NDYsNDQ0NDcsNDQ0NDgsNDQ0NDksNDQ0NTAsNDQ0NTEsNDQ0NTMsNDQ0NTQsNDQ0NTUsNDQ0NTYsNDQ0NTcsNDQ0NTgsNDQ0NTksNDQ0NjAsNDQ0NjEsNDQ0NjIsNDQ0NjMsNDQ0NjQsNDQ0NjUsNDQ0NjYsNDQ0NjcsNDQ0NjgsNDQ0NjksNDQ0NzAsNDQ0NzIsNDQ0NzMsNDQ0NzQsNDQ0NzUsNDQ0NzYsNDQ0NzcsNDQ0NzgsNDQ0NzksNDQ0ODIsNDQ0ODMsNDQ0ODUsNDQ0ODYsNDQ0ODcsNDQ0ODksNDQ0OTAsNDQ0OTEsNDQ0OTIsNDQ0OTMsNDQ0OTQsNDQ0OTUsNDQ0OTgsNDQ1MDAsNDQ1MDEsNDQ1MDIsNDQ1MDMsNDQ1MDQsNDQ1MDUsNDQ1MDYsNDQ1MDcsNDQ1MDksNDQ1MTAsNDQ1MTEsNDQ1MTMsNDQ1MTQsNDQ1MTUsNDQ1MTcsNDQ1MTgsNDQ1MTksNDQ1MjAsNDQ1MjEsNDQ1MjIsNDQ1MjMsNDQ1MjQsNDQ1MjUsNDQ1MjYsNDQ1MjcsNDQ1MjgsNDQ1MjksNDQ1MzAsNDQ1MzEsNDQ1MzIsNDQ1MzMsNDQ1MzQsNDQ1MzUsNDQ1MzgsNDQ1MzksNDQ1NDEsNDQ1NDIsNDQ1NDYsNDQ1NDcsNDQ1NDgsNDQ1NDksNDQ1NTAsNDQ1NTEsNDQ1NTQsNDQ1NTYsNDQ1NTgsNDQ1NTksNDQ1NjAsNDQ1NjEsNDQ1NjIsNDQ1NjMsNDQ1NjUsNDQ1NjYsNDQ1NjcsNDQ1NjgsNDQ1NjksNDQ1NzAsNDQ1NzEsNDQ1NzIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ1NzMsNDQ1NzQsNDQ1NzUsNDQ1NzYsNDQ1NzcsNDQ1NzgsNDQ1NzksNDQ1ODAsNDQ1ODEsNDQ1ODIsNDQ1ODMsNDQ1ODQsNDQ1ODUsNDQ1ODYsNDQ1ODcsNDQ1ODgsNDQ1ODksNDQ1OTAsNDQ1OTEsNDQ1OTQsNDQ1OTUsNDQ1OTcsNDQ1OTgsNDQ2MDEsNDQ2MDMsNDQ2MDQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ2MDUsNDQ2MDYsNDQ2MDcsNDQ2MTAsNDQ2MTIsNDQ2MTUsNDQ2MTYsNDQ2MTcsNDQ2MTksNDQ2MjMsNDQ2MjUsNDQ2MjYsNDQ2MjcsNDQ2MjksNDQ2MzEsNDQ2MzIsNDQ2MzMsNDQ2MzQsNDQ2MzUsNDQ2MzgsNDQ2NDIsNDQ2NDMsNDQ2NDQsNDQ2NDYsNDQ2NDcsNDQ2NTAsNDQ2NTEsNDQ2NTMsNDQ2NTQsNDQ2NTUsNDQ2NTcsNDQ2NTgsNDQ2NTksNDQ2NjAsNDQ2NjEsNDQ2NjIsNDQ2NjMsNDQ2NjYsNDQ2NzAsNDQ2NzEsNDQ2NzIsNDQ2NzMsNDQ2NzQsNDQ2NzUsNDQ2NzgsNDQ2NzksNDQ2ODAsNDQ2ODEsNDQ2ODIsNDQ2ODMsNDQ2ODUsNDQ2ODYsNDQ2ODcsNDQ2ODgsNDQ2ODksNDQ2OTAsNDQ2OTEsNDQ2OTIsNDQ2OTMsNDQ2OTQsNDQ2OTUsNDQ2OTYsNDQ2OTcsNDQ2OTgsNDQ2OTksNDQ3MDAsNDQ3MDEsNDQ3MDIsNDQ3MDMsNDQ3MDQsNDQ3MDUsNDQ3MDYsNDQ3MDcsNDQ3MDgsNDQ3MDksNDQ3MTAsNDQ3MTEsNDQ3MTIsNDQ3MTMsNDQ3MTQsNDQ3MTUsNDQ3MTYsNDQ3MTcsNDQ3MTgsNDQ3MTksNDQ3MjAsNDQ3MjEsNDQ3MjIsNDQ3MjMsNDQ3MjQsNDQ3MjUsNDQ3MjYsNDQ3MjcsNDQ3MjgsNDQ3MjksNDQ3MzAsNDQ3MzEsNDQ3MzUsNDQ3MzcsNDQ3MzgsNDQ3MzksNDQ3NDEsNDQ3NDIsNDQ3NDMsNDQ3NDQsNDQ3NDUsNDQ3NDYsNDQ3NDcsNDQ3NTAsNDQ3NTQsNDQ3NTUsNDQ3NTYsNDQ3NTcsNDQ3NTgsNDQ3NTksNDQ3NjIsNDQ3NjMsNDQ3NjUsNDQ3NjYsNDQ3NjcsNDQ3NjgsNDQ3NjksNDQ3NzAsNDQ3NzEsNDQ3NzIsNDQ3NzMsNDQ3NzQsNDQ3NzUsNDQ3NzcsNDQ3NzgsNDQ3ODAsNDQ3ODIsNDQ3ODMsNDQ3ODQsNDQ3ODUsNDQ3ODYsNDQ3ODcsNDQ3ODksNDQ3OTAsNDQ3OTEsNDQ3OTMsNDQ3OTQsNDQ3OTUsNDQ3OTcsNDQ3OTgsNDQ3OTksNDQ4MDAsNDQ4MDEsNDQ4MDIsNDQ4MDMsNDQ4MDQsNDQ4MDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ4MDYsNDQ4MDksNDQ4MTAsNDQ4MTEsNDQ4MTIsNDQ4MTQsNDQ4MTUsNDQ4MTcsNDQ4MTgsNDQ4MTksNDQ4MjAsNDQ4MjEsNDQ4MjIsNDQ4MjMsNDQ4MjQsNDQ4MjUsNDQ4MjYsNDQ4MjcsNDQ4MjgsNDQ4MjksNDQ4MzAsNDQ4MzEsNDQ4MzIsNDQ4MzMsNDQ4MzQsNDQ4MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ4MzYsNDQ4MzcsNDQ4MzgsNDQ4MzksNDQ4NDAsNDQ4NDEsNDQ4NDIsNDQ4NDMsNDQ4NDYsNDQ4NDcsNDQ4NDksNDQ4NTEsNDQ4NTMsNDQ4NTQsNDQ4NTUsNDQ4NTYsNDQ4NTcsNDQ4NTgsNDQ4NTksNDQ4NjIsNDQ4NjQsNDQ4NjgsNDQ4NjksNDQ4NzAsNDQ4NzEsNDQ4NzQsNDQ4NzUsNDQ4NzYsNDQ4NzcsNDQ4NzgsNDQ4NzksNDQ4ODEsNDQ4ODIsNDQ4ODMsNDQ4ODQsNDQ4ODUsNDQ4ODYsNDQ4ODcsNDQ4ODgsNDQ4ODksNDQ4OTAsNDQ4OTEsNDQ4OTQsNDQ4OTUsNDQ4OTYsNDQ4OTcsNDQ4OTgsNDQ4OTksNDQ5MDIsNDQ5MDMsNDQ5MDQsNDQ5MDUsNDQ5MDYsNDQ5MDcsNDQ5MDgsNDQ5MDksNDQ5MTAsNDQ5MTEsNDQ5MTIsNDQ5MTMsNDQ5MTQsNDQ5MTUsNDQ5MTYsNDQ5MTcsNDQ5MTgsNDQ5MTksNDQ5MjAsNDQ5MjIsNDQ5MjMsNDQ5MjQsNDQ5MjUsNDQ5MjYsNDQ5MjcsNDQ5MjksNDQ5MzAsNDQ5MzEsNDQ5MzMsNDQ5MzQsNDQ5MzUsNDQ5MzcsNDQ5MzgsNDQ5MzksNDQ5NDAsNDQ5NDEsNDQ5NDIsNDQ5NDMsNDQ5NDYsNDQ5NDcsNDQ5NDgsNDQ5NTAsNDQ5NTEsNDQ5NTIsNDQ5NTMsNDQ5NTQsNDQ5NTUsNDQ5NTcsNDQ5NTgsNDQ5NTksNDQ5NjAsNDQ5NjEsNDQ5NjIsNDQ5NjMsNDQ5NjQsNDQ5NjUsNDQ5NjYsNDQ5NjcsNDQ5NjgsNDQ5NjksNDQ5NzAsNDQ5NzEsNDQ5NzIsNDQ5NzMsNDQ5NzQsNDQ5NzUsNDQ5NzYsNDQ5NzcsNDQ5NzgsNDQ5NzksNDQ5ODAsNDQ5ODEsNDQ5ODIsNDQ5ODMsNDQ5ODYsNDQ5ODcsNDQ5ODksNDQ5OTAsNDQ5OTEsNDQ5OTMsNDQ5OTQsNDQ5OTUsNDQ5OTYsNDQ5OTcsNDQ5OTgsNDUwMDIsNDUwMDQsNDUwMDcsNDUwMDgsNDUwMDksNDUwMTAsNDUwMTEsNDUwMTMsNDUwMTQsNDUwMTUsNDUwMTYsNDUwMTcsNDUwMTgsNDUwMTksNDUwMjEsNDUwMjIsNDUwMjMsNDUwMjQsNDUwMjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDUwMjYsNDUwMjcsNDUwMjgsNDUwMjksNDUwMzAsNDUwMzEsNDUwMzQsNDUwMzUsNDUwMzYsNDUwMzcsNDUwMzgsNDUwMzksNDUwNDIsNDUwNDMsNDUwNDUsNDUwNDYsNDUwNDcsNDUwNDksNDUwNTAsNDUwNTEsNDUwNTIsNDUwNTMsNDUwNTQsNDUwNTUsNDUwNTgsNDUwNTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDUwNjEsNDUwNjIsNDUwNjMsNDUwNjQsNDUwNjUsNDUwNjYsNDUwNjcsNDUwNjksNDUwNzAsNDUwNzEsNDUwNzMsNDUwNzQsNDUwNzUsNDUwNzcsNDUwNzgsNDUwNzksNDUwODAsNDUwODEsNDUwODIsNDUwODMsNDUwODYsNDUwODcsNDUwODgsNDUwODksNDUwOTAsNDUwOTEsNDUwOTIsNDUwOTMsNDUwOTQsNDUwOTUsNDUwOTcsNDUwOTgsNDUwOTksNDUxMDAsNDUxMDEsNDUxMDIsNDUxMDMsNDUxMDQsNDUxMDUsNDUxMDYsNDUxMDcsNDUxMDgsNDUxMDksNDUxMTAsNDUxMTEsNDUxMTIsNDUxMTMsNDUxMTQsNDUxMTUsNDUxMTYsNDUxMTcsNDUxMTgsNDUxMTksNDUxMjAsNDUxMjEsNDUxMjIsNDUxMjMsNDUxMjYsNDUxMjcsNDUxMjksNDUxMzEsNDUxMzMsNDUxMzUsNDUxMzYsNDUxMzcsNDUxMzgsNDUxNDIsNDUxNDQsNDUxNDYsNDUxNDcsNDUxNDgsNDUxNTAsNDUxNTEsNDUxNTIsNDUxNTMsNDUxNTQsNDUxNTUsNDUxNTYsNDUxNTcsNDUxNTgsNDUxNTksNDUxNjAsNDUxNjEsNDUxNjIsNDUxNjMsNDUxNjQsNDUxNjUsNDUxNjYsNDUxNjcsNDUxNjgsNDUxNjksNDUxNzAsNDUxNzEsNDUxNzIsNDUxNzMsNDUxNzQsNDUxNzUsNDUxNzYsNDUxNzcsNDUxNzgsNDUxNzksNDUxODIsNDUxODMsNDUxODUsNDUxODYsNDUxODcsNDUxODksNDUxOTAsNDUxOTEsNDUxOTIsNDUxOTMsNDUxOTQsNDUxOTUsNDUxOTgsNDUyMDAsNDUyMDIsNDUyMDMsNDUyMDQsNDUyMDUsNDUyMDYsNDUyMDcsNDUyMTEsNDUyMTMsNDUyMTQsNDUyMTksNDUyMjAsNDUyMjEsNDUyMjIsNDUyMjMsNDUyMjYsNDUyMzIsNDUyMzQsNDUyMzgsNDUyMzksNDUyNDEsNDUyNDIsNDUyNDMsNDUyNDUsNDUyNDYsNDUyNDcsNDUyNDgsNDUyNDksNDUyNTAsNDUyNTEsNDUyNTQsNDUyNTgsNDUyNTksNDUyNjAsNDUyNjEsNDUyNjIsNDUyNjMsNDUyNjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDUyNjcsNDUyNjksNDUyNzAsNDUyNzEsNDUyNzMsNDUyNzQsNDUyNzUsNDUyNzYsNDUyNzcsNDUyNzgsNDUyNzksNDUyODEsNDUyODIsNDUyODMsNDUyODQsNDUyODYsNDUyODcsNDUyODgsNDUyODksNDUyOTAsNDUyOTEsNDUyOTIsNDUyOTMsNDUyOTQsNDUyOTUsNDUyOTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDUyOTcsNDUyOTgsNDUyOTksNDUzMDAsNDUzMDEsNDUzMDIsNDUzMDMsNDUzMDQsNDUzMDUsNDUzMDYsNDUzMDcsNDUzMDgsNDUzMDksNDUzMTAsNDUzMTEsNDUzMTIsNDUzMTMsNDUzMTQsNDUzMTUsNDUzMTYsNDUzMTcsNDUzMTgsNDUzMTksNDUzMjIsNDUzMjUsNDUzMjYsNDUzMjcsNDUzMjksNDUzMzIsNDUzMzMsNDUzMzQsNDUzMzUsNDUzMzgsNDUzNDIsNDUzNDMsNDUzNDQsNDUzNDUsNDUzNDYsNDUzNTAsNDUzNTEsNDUzNTMsNDUzNTQsNDUzNTUsNDUzNTcsNDUzNTgsNDUzNTksNDUzNjAsNDUzNjEsNDUzNjIsNDUzNjMsNDUzNjYsNDUzNzAsNDUzNzEsNDUzNzIsNDUzNzMsNDUzNzQsNDUzNzUsNDUzNzgsNDUzNzksNDUzODEsNDUzODIsNDUzODMsNDUzODUsNDUzODYsNDUzODcsNDUzODgsNDUzODksNDUzOTAsNDUzOTEsNDUzOTQsNDUzOTUsNDUzOTgsNDUzOTksNDU0MDEsNDU0MDIsNDU0MDMsNDU0MDUsNDU0MDYsNDU0MDcsNDU0MDksNDU0MTAsNDU0MTEsNDU0MTIsNDU0MTMsNDU0MTQsNDU0MTUsNDU0MTYsNDU0MTcsNDU0MTgsNDU0MTksNDU0MjAsNDU0MjEsNDU0MjIsNDU0MjMsNDU0MjQsNDU0MjUsNDU0MjYsNDU0MjcsNDU0MjgsNDU0MjksNDU0MzAsNDU0MzEsNDU0MzQsNDU0MzUsNDU0MzcsNDU0MzgsNDU0MzksNDU0NDEsNDU0NDMsNDU0NDQsNDU0NDUsNDU0NDYsNDU0NDcsNDU0NTAsNDU0NTIsNDU0NTQsNDU0NTUsNDU0NTYsNDU0NTcsNDU0NjEsNDU0NjIsNDU0NjMsNDU0NjUsNDU0NjYsNDU0NjcsNDU0NjksNDU0NzAsNDU0NzEsNDU0NzIsNDU0NzMsNDU0NzQsNDU0NzUsNDU0NzYsNDU0NzcsNDU0NzgsNDU0NzksNDU0ODEsNDU0ODIsNDU0ODMsNDU0ODQsNDU0ODUsNDU0ODYsNDU0ODcsNDU0ODgsNDU0ODksNDU0OTAsNDU0OTEsNDU0OTIsNDU0OTMsNDU0OTQsNDU0OTUsNDU0OTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU0OTcsNDU0OTgsNDU0OTksNDU1MDAsNDU1MDEsNDU1MDIsNDU1MDMsNDU1MDQsNDU1MDUsNDU1MDYsNDU1MDcsNDU1MDgsNDU1MDksNDU1MTAsNDU1MTEsNDU1MTIsNDU1MTMsNDU1MTQsNDU1MTUsNDU1MTcsNDU1MTgsNDU1MTksNDU1MjEsNDU1MjIsNDU1MjMsNDU1MjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU1MjYsNDU1MjcsNDU1MjgsNDU1MjksNDU1MzAsNDU1MzEsNDU1MzQsNDU1MzYsNDU1MzcsNDU1MzgsNDU1MzksNDU1NDAsNDU1NDEsNDU1NDIsNDU1NDMsNDU1NDYsNDU1NDcsNDU1NDksNDU1NTAsNDU1NTEsNDU1NTMsNDU1NTQsNDU1NTUsNDU1NTYsNDU1NTcsNDU1NTgsNDU1NTksNDU1NjAsNDU1NjIsNDU1NjQsNDU1NjYsNDU1NjcsNDU1NjgsNDU1NjksNDU1NzAsNDU1NzEsNDU1NzQsNDU1NzUsNDU1NzcsNDU1NzgsNDU1ODEsNDU1ODIsNDU1ODMsNDU1ODQsNDU1ODUsNDU1ODYsNDU1ODcsNDU1OTAsNDU1OTIsNDU1OTQsNDU1OTUsNDU1OTYsNDU1OTcsNDU1OTgsNDU1OTksNDU2MDEsNDU2MDIsNDU2MDMsNDU2MDQsNDU2MDUsNDU2MDYsNDU2MDcsNDU2MDgsNDU2MDksNDU2MTAsNDU2MTEsNDU2MTIsNDU2MTMsNDU2MTQsNDU2MTUsNDU2MTYsNDU2MTcsNDU2MTgsNDU2MTksNDU2MjEsNDU2MjIsNDU2MjMsNDU2MjQsNDU2MjUsNDU2MjYsNDU2MjcsNDU2MjksNDU2MzAsNDU2MzEsNDU2MzIsNDU2MzMsNDU2MzQsNDU2MzUsNDU2MzYsNDU2MzcsNDU2MzgsNDU2MzksNDU2NDAsNDU2NDEsNDU2NDIsNDU2NDMsNDU2NDQsNDU2NDUsNDU2NDYsNDU2NDcsNDU2NDgsNDU2NDksNDU2NTAsNDU2NTEsNDU2NTIsNDU2NTMsNDU2NTQsNDU2NTUsNDU2NTcsNDU2NTgsNDU2NTksNDU2NjEsNDU2NjIsNDU2NjMsNDU2NjUsNDU2NjYsNDU2NjcsNDU2NjgsNDU2NjksNDU2NzAsNDU2NzEsNDU2NzQsNDU2NzUsNDU2NzYsNDU2NzcsNDU2NzgsNDU2NzksNDU2ODAsNDU2ODEsNDU2ODIsNDU2ODMsNDU2ODYsNDU2ODcsNDU2ODgsNDU2ODksNDU2OTAsNDU2OTEsNDU2OTMsNDU2OTQsNDU2OTUsNDU2OTYsNDU2OTcsNDU2OTgsNDU2OTksNDU3MDIsNDU3MDMsNDU3MDQsNDU3MDYsNDU3MDcsNDU3MDgsNDU3MDksNDU3MTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU3MTEsNDU3MTQsNDU3MTUsNDU3MTcsNDU3MTgsNDU3MTksNDU3MjMsNDU3MjQsNDU3MjUsNDU3MjYsNDU3MjcsNDU3MzAsNDU3MzIsNDU3MzUsNDU3MzYsNDU3MzcsNDU3MzksNDU3NDEsNDU3NDIsNDU3NDMsNDU3NDUsNDU3NDYsNDU3NDcsNDU3NDksNDU3NTAsNDU3NTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU3NTIsNDU3NTMsNDU3NTQsNDU3NTUsNDU3NTYsNDU3NTcsNDU3NTgsNDU3NTksNDU3NjAsNDU3NjEsNDU3NjIsNDU3NjMsNDU3NjQsNDU3NjUsNDU3NjYsNDU3NjcsNDU3NzAsNDU3NzEsNDU3NzMsNDU3NzQsNDU3NzUsNDU3NzcsNDU3NzksNDU3ODAsNDU3ODEsNDU3ODIsNDU3ODMsNDU3ODYsNDU3ODgsNDU3OTAsNDU3OTEsNDU3OTIsNDU3OTMsNDU3OTUsNDU3OTksNDU4MDEsNDU4MDIsNDU4MDgsNDU4MDksNDU4MTAsNDU4MTQsNDU4MjAsNDU4MjEsNDU4MjIsNDU4MjYsNDU4MjcsNDU4MjksNDU4MzAsNDU4MzEsNDU4MzMsNDU4MzQsNDU4MzUsNDU4MzYsNDU4MzcsNDU4MzgsNDU4MzksNDU4NDIsNDU4NDYsNDU4NDcsNDU4NDgsNDU4NDksNDU4NTAsNDU4NTEsNDU4NTMsNDU4NTQsNDU4NTUsNDU4NTYsNDU4NTcsNDU4NTgsNDU4NTksNDU4NjAsNDU4NjEsNDU4NjIsNDU4NjMsNDU4NjQsNDU4NjUsNDU4NjYsNDU4NjcsNDU4NjgsNDU4NjksNDU4NzAsNDU4NzEsNDU4NzIsNDU4NzMsNDU4NzQsNDU4NzUsNDU4NzYsNDU4NzcsNDU4NzgsNDU4NzksNDU4ODAsNDU4ODEsNDU4ODIsNDU4ODMsNDU4ODQsNDU4ODUsNDU4ODYsNDU4ODcsNDU4ODgsNDU4ODksNDU4OTAsNDU4OTEsNDU4OTIsNDU4OTMsNDU4OTQsNDU4OTUsNDU4OTYsNDU4OTcsNDU4OTgsNDU4OTksNDU5MDAsNDU5MDEsNDU5MDIsNDU5MDMsNDU5MDQsNDU5MDUsNDU5MDYsNDU5MDcsNDU5MTEsNDU5MTMsNDU5MTQsNDU5MTcsNDU5MjAsNDU5MjEsNDU5MjIsNDU5MjMsNDU5MjYsNDU5MjgsNDU5MzAsNDU5MzIsNDU5MzMsNDU5MzUsNDU5MzgsNDU5MzksNDU5NDEsNDU5NDIsNDU5NDMsNDU5NDUsNDU5NDYsNDU5NDcsNDU5NDgsNDU5NDksNDU5NTAsNDU5NTEsNDU5NTQsNDU5NTgsNDU5NTksNDU5NjAsNDU5NjEsNDU5NjIsNDU5NjMsNDU5NjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU5NjYsNDU5NjcsNDU5NjksNDU5NzAsNDU5NzEsNDU5NzMsNDU5NzQsNDU5NzUsNDU5NzYsNDU5NzcsNDU5NzgsNDU5NzksNDU5ODAsNDU5ODEsNDU5ODIsNDU5ODMsNDU5ODYsNDU5ODcsNDU5ODgsNDU5ODksNDU5OTAsNDU5OTEsNDU5OTMsNDU5OTQsNDU5OTUsNDU5OTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU5OTgsNDU5OTksNDYwMDAsNDYwMDEsNDYwMDIsNDYwMDMsNDYwMDQsNDYwMDUsNDYwMDYsNDYwMDcsNDYwMDgsNDYwMDksNDYwMTAsNDYwMTEsNDYwMTIsNDYwMTMsNDYwMTQsNDYwMTUsNDYwMTYsNDYwMTcsNDYwMTgsNDYwMTksNDYwMjIsNDYwMjMsNDYwMjUsNDYwMjYsNDYwMjksNDYwMzEsNDYwMzMsNDYwMzQsNDYwMzUsNDYwMzgsNDYwNDAsNDYwNDIsNDYwNDQsNDYwNDYsNDYwNDcsNDYwNDksNDYwNTAsNDYwNTEsNDYwNTMsNDYwNTQsNDYwNTUsNDYwNTcsNDYwNTgsNDYwNTksNDYwNjAsNDYwNjEsNDYwNjIsNDYwNjMsNDYwNjQsNDYwNjUsNDYwNjYsNDYwNjcsNDYwNjgsNDYwNjksNDYwNzAsNDYwNzEsNDYwNzIsNDYwNzMsNDYwNzQsNDYwNzUsNDYwNzcsNDYwNzgsNDYwNzksNDYwODAsNDYwODEsNDYwODIsNDYwODMsNDYwODQsNDYwODUsNDYwODYsNDYwODcsNDYwODgsNDYwODksNDYwOTAsNDYwOTEsNDYwOTIsNDYwOTMsNDYwOTQsNDYwOTUsNDYwOTcsNDYwOTgsNDYwOTksNDYxMDAsNDYxMDEsNDYxMDIsNDYxMDMsNDYxMDUsNDYxMDYsNDYxMDcsNDYxMDksNDYxMTAsNDYxMTEsNDYxMTMsNDYxMTQsNDYxMTUsNDYxMTYsNDYxMTcsNDYxMTgsNDYxMTksNDYxMjIsNDYxMjQsNDYxMjUsNDYxMjYsNDYxMjcsNDYxMjgsNDYxMjksNDYxMzAsNDYxMzEsNDYxMzMsNDYxMzQsNDYxMzUsNDYxMzYsNDYxMzcsNDYxMzgsNDYxMzksNDYxNDAsNDYxNDEsNDYxNDIsNDYxNDMsNDYxNDQsNDYxNDUsNDYxNDYsNDYxNDcsNDYxNDgsNDYxNDksNDYxNTAsNDYxNTEsNDYxNTIsNDYxNTMsNDYxNTQsNDYxNTUsNDYxNTYsNDYxNTcsNDYxNTgsNDYxNTksNDYxNjIsNDYxNjMsNDYxNjUsNDYxNjYsNDYxNjcsNDYxNjksNDYxNzAsNDYxNzEsNDYxNzIsNDYxNzMsNDYxNzQsNDYxNzUsNDYxNzgsNDYxODAsNDYxODIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDYxODMsNDYxODQsNDYxODUsNDYxODYsNDYxODcsNDYxODksNDYxOTAsNDYxOTEsNDYxOTIsNDYxOTMsNDYxOTQsNDYxOTUsNDYxOTYsNDYxOTcsNDYxOTgsNDYxOTksNDYyMDAsNDYyMDEsNDYyMDIsNDYyMDMsNDYyMDQsNDYyMDUsNDYyMDYsNDYyMDcsNDYyMDksNDYyMTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDYyMTEsNDYyMTIsNDYyMTMsNDYyMTQsNDYyMTUsNDYyMTcsNDYyMTgsNDYyMTksNDYyMjAsNDYyMjEsNDYyMjIsNDYyMjMsNDYyMjQsNDYyMjUsNDYyMjYsNDYyMjcsNDYyMjgsNDYyMjksNDYyMzAsNDYyMzEsNDYyMzIsNDYyMzMsNDYyMzQsNDYyMzUsNDYyMzYsNDYyMzgsNDYyMzksNDYyNDAsNDYyNDEsNDYyNDIsNDYyNDMsNDYyNDUsNDYyNDYsNDYyNDcsNDYyNDksNDYyNTAsNDYyNTEsNDYyNTMsNDYyNTQsNDYyNTUsNDYyNTYsNDYyNTcsNDYyNTgsNDYyNTksNDYyNjAsNDYyNjIsNDYyNjQsNDYyNjYsNDYyNjcsNDYyNjgsNDYyNjksNDYyNzAsNDYyNzEsNDYyNzMsNDYyNzQsNDYyNzUsNDYyNzcsNDYyNzgsNDYyNzksNDYyODEsNDYyODIsNDYyODMsNDYyODQsNDYyODUsNDYyODYsNDYyODcsNDYyODksNDYyOTAsNDYyOTEsNDYyOTIsNDYyOTQsNDYyOTUsNDYyOTYsNDYyOTcsNDYyOTgsNDYyOTksNDYzMDIsNDYzMDMsNDYzMDUsNDYzMDYsNDYzMDksNDYzMTEsNDYzMTIsNDYzMTMsNDYzMTQsNDYzMTUsNDYzMTgsNDYzMjAsNDYzMjIsNDYzMjMsNDYzMjQsNDYzMjUsNDYzMjYsNDYzMjcsNDYzMjksNDYzMzAsNDYzMzEsNDYzMzIsNDYzMzMsNDYzMzQsNDYzMzUsNDYzMzYsNDYzMzcsNDYzMzgsNDYzMzksNDYzNDAsNDYzNDEsNDYzNDIsNDYzNDMsNDYzNDQsNDYzNDUsNDYzNDYsNDYzNDcsNDYzNDgsNDYzNDksNDYzNTAsNDYzNTEsNDYzNTIsNDYzNTMsNDYzNTQsNDYzNTUsNDYzNTgsNDYzNTksNDYzNjEsNDYzNjIsNDYzNjUsNDYzNjYsNDYzNjcsNDYzNjgsNDYzNjksNDYzNzAsNDYzNzEsNDYzNzQsNDYzNzksNDYzODAsNDYzODEsNDYzODIsNDYzODMsNDYzODYsNDYzODcsNDYzODksNDYzOTAsNDYzOTEsNDYzOTMsNDYzOTQsNDYzOTUsNDYzOTYsNDYzOTcsNDYzOTgsNDYzOTksNDY0MDIsNDY0MDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY0MDcsNDY0MDgsNDY0MDksNDY0MTAsNDY0MTQsNDY0MTUsNDY0MTcsNDY0MTgsNDY0MTksNDY0MjEsNDY0MjIsNDY0MjMsNDY0MjQsNDY0MjUsNDY0MjYsNDY0MjcsNDY0MzAsNDY0MzQsNDY0MzUsNDY0MzYsNDY0MzcsNDY0MzgsNDY0MzksNDY0NDAsNDY0NDEsNDY0NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY0NDMsNDY0NDQsNDY0NDUsNDY0NDYsNDY0NDcsNDY0NDgsNDY0NDksNDY0NTAsNDY0NTEsNDY0NTIsNDY0NTMsNDY0NTQsNDY0NTUsNDY0NTYsNDY0NTcsNDY0NTgsNDY0NTksNDY0NjAsNDY0NjEsNDY0NjIsNDY0NjMsNDY0NjQsNDY0NjUsNDY0NjYsNDY0NjcsNDY0NjgsNDY0NjksNDY0NzAsNDY0NzEsNDY0NzIsNDY0NzMsNDY0NzQsNDY0NzUsNDY0NzYsNDY0NzcsNDY0NzgsNDY0NzksNDY0ODAsNDY0ODEsNDY0ODIsNDY0ODMsNDY0ODQsNDY0ODUsNDY0ODYsNDY0ODcsNDY0ODgsNDY0ODksNDY0OTAsNDY0OTEsNDY0OTIsNDY0OTMsNDY0OTQsNDY0OTUsNDY0OTgsNDY0OTksNDY1MDEsNDY1MDIsNDY1MDMsNDY1MDUsNDY1MDgsNDY1MDksNDY1MTAsNDY1MTEsNDY1MTQsNDY1MTgsNDY1MTksNDY1MjAsNDY1MjEsNDY1MjIsNDY1MjYsNDY1MjcsNDY1MjksNDY1MzAsNDY1MzEsNDY1MzMsNDY1MzQsNDY1MzUsNDY1MzYsNDY1MzcsNDY1MzgsNDY1MzksNDY1NDIsNDY1NDYsNDY1NDcsNDY1NDgsNDY1NDksNDY1NTAsNDY1NTEsNDY1NTMsNDY1NTQsNDY1NTUsNDY1NTYsNDY1NTcsNDY1NTgsNDY1NTksNDY1NjAsNDY1NjEsNDY1NjIsNDY1NjMsNDY1NjQsNDY1NjUsNDY1NjYsNDY1NjcsNDY1NjgsNDY1NjksNDY1NzAsNDY1NzEsNDY1NzMsNDY1NzQsNDY1NzUsNDY1NzYsNDY1NzcsNDY1NzgsNDY1NzksNDY1ODAsNDY1ODEsNDY1ODIsNDY1ODMsNDY1ODQsNDY1ODUsNDY1ODYsNDY1ODcsNDY1ODgsNDY1ODksNDY1OTAsNDY1OTEsNDY1OTIsNDY1OTMsNDY1OTQsNDY1OTUsNDY1OTYsNDY1OTcsNDY1OTgsNDY1OTksNDY2MDAsNDY2MDEsNDY2MDIsNDY2MDMsNDY2MDQsNDY2MDUsNDY2MDYsNDY2MDcsNDY2MTAsNDY2MTEsNDY2MTMsNDY2MTQsNDY2MTUsNDY2MTcsNDY2MTgsNDY2MTksNDY2MjAsNDY2MjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY2MjIsNDY2MjMsNDY2MjQsNDY2MjUsNDY2MjYsNDY2MjcsNDY2MjgsNDY2MzAsNDY2MzEsNDY2MzIsNDY2MzMsNDY2MzQsNDY2MzUsNDY2MzcsNDY2MzgsNDY2MzksNDY2NDAsNDY2NDEsNDY2NDIsNDY2NDMsNDY2NDUsNDY2NDYsNDY2NDcsNDY2NDgsNDY2NDksNDY2NTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY2NTEsNDY2NTIsNDY2NTMsNDY2NTQsNDY2NTUsNDY2NTYsNDY2NTcsNDY2NTgsNDY2NTksNDY2NjAsNDY2NjEsNDY2NjIsNDY2NjMsNDY2NjUsNDY2NjYsNDY2NjcsNDY2NjgsNDY2NjksNDY2NzAsNDY2NzEsNDY2NzIsNDY2NzMsNDY2NzQsNDY2NzUsNDY2NzYsNDY2NzcsNDY2NzgsNDY2NzksNDY2ODAsNDY2ODEsNDY2ODIsNDY2ODMsNDY2ODQsNDY2ODUsNDY2ODYsNDY2ODcsNDY2ODgsNDY2ODksNDY2OTAsNDY2OTEsNDY2OTMsNDY2OTQsNDY2OTUsNDY2OTcsNDY2OTgsNDY2OTksNDY3MDAsNDY3MDEsNDY3MDIsNDY3MDMsNDY3MDQsNDY3MDUsNDY3MDYsNDY3MDcsNDY3MDgsNDY3MDksNDY3MTAsNDY3MTEsNDY3MTIsNDY3MTMsNDY3MTQsNDY3MTUsNDY3MTYsNDY3MTcsNDY3MTgsNDY3MTksNDY3MjAsNDY3MjEsNDY3MjIsNDY3MjMsNDY3MjQsNDY3MjUsNDY3MjYsNDY3MjcsNDY3MjgsNDY3MjksNDY3MzAsNDY3MzEsNDY3MzIsNDY3MzMsNDY3MzQsNDY3MzUsNDY3MzYsNDY3MzcsNDY3MzgsNDY3MzksNDY3NDAsNDY3NDEsNDY3NDIsNDY3NDMsNDY3NDQsNDY3NDUsNDY3NDYsNDY3NDcsNDY3NTAsNDY3NTEsNDY3NTMsNDY3NTQsNDY3NTUsNDY3NTcsNDY3NTgsNDY3NTksNDY3NjAsNDY3NjEsNDY3NjIsNDY3NjUsNDY3NjYsNDY3NjcsNDY3NjgsNDY3NzAsNDY3NzEsNDY3NzIsNDY3NzMsNDY3NzQsNDY3NzUsNDY3NzYsNDY3NzcsNDY3NzgsNDY3NzksNDY3ODAsNDY3ODEsNDY3ODIsNDY3ODMsNDY3ODQsNDY3ODUsNDY3ODYsNDY3ODcsNDY3ODgsNDY3ODksNDY3OTAsNDY3OTEsNDY3OTIsNDY3OTMsNDY3OTQsNDY3OTUsNDY3OTYsNDY3OTcsNDY3OTgsNDY3OTksNDY4MDAsNDY4MDEsNDY4MDIsNDY4MDMsNDY4MDUsNDY4MDYsNDY4MDcsNDY4MDgsNDY4MDksNDY4MTAsNDY4MTEsNDY4MTIsNDY4MTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY4MTQsNDY4MTUsNDY4MTYsNDY4MTcsNDY4MTgsNDY4MTksNDY4MjAsNDY4MjEsNDY4MjIsNDY4MjMsNDY4MjQsNDY4MjUsNDY4MjYsNDY4MjcsNDY4MjgsNDY4MjksNDY4MzAsNDY4MzEsNDY4MzMsNDY4MzQsNDY4MzUsNDY4MzcsNDY4MzgsNDY4MzksNDY4NDEsNDY4NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY4NDMsNDY4NDQsNDY4NDUsNDY4NDYsNDY4NDcsNDY4NTAsNDY4NTEsNDY4NTIsNDY4NTQsNDY4NTUsNDY4NTYsNDY4NTcsNDY4NTgsNDY4NTksNDY4NjAsNDY4NjEsNDY4NjIsNDY4NjMsNDY4NjQsNDY4NjUsNDY4NjYsNDY4NjcsNDY4NjgsNDY4NjksNDY4NzAsNDY4NzEsNDY4NzIsNDY4NzMsNDY4NzQsNDY4NzUsNDY4NzYsNDY4NzcsNDY4NzgsNDY4NzksNDY4ODAsNDY4ODEsNDY4ODIsNDY4ODMsNDY4ODQsNDY4ODUsNDY4ODYsNDY4ODcsNDY4OTAsNDY4OTEsNDY4OTMsNDY4OTQsNDY4OTcsNDY4OTgsNDY4OTksNDY5MDAsNDY5MDEsNDY5MDIsNDY5MDMsNDY5MDYsNDY5MDgsNDY5MDksNDY5MTAsNDY5MTEsNDY5MTIsNDY5MTMsNDY5MTQsNDY5MTUsNDY5MTcsNDY5MTgsNDY5MTksNDY5MjEsNDY5MjIsNDY5MjMsNDY5MjUsNDY5MjYsNDY5MjcsNDY5MjgsNDY5MjksNDY5MzAsNDY5MzEsNDY5MzQsNDY5MzUsNDY5MzYsNDY5MzcsNDY5MzgsNDY5MzksNDY5NDAsNDY5NDEsNDY5NDIsNDY5NDMsNDY5NDUsNDY5NDYsNDY5NDcsNDY5NDksNDY5NTAsNDY5NTEsNDY5NTMsNDY5NTQsNDY5NTUsNDY5NTYsNDY5NTcsNDY5NTgsNDY5NTksNDY5NjIsNDY5NjQsNDY5NjYsNDY5NjcsNDY5NjgsNDY5NjksNDY5NzAsNDY5NzEsNDY5NzQsNDY5NzUsNDY5NzcsNDY5NzgsNDY5NzksNDY5ODEsNDY5ODIsNDY5ODMsNDY5ODQsNDY5ODUsNDY5ODYsNDY5ODcsNDY5OTAsNDY5OTUsNDY5OTYsNDY5OTcsNDcwMDIsNDcwMDMsNDcwMDUsNDcwMDYsNDcwMDcsNDcwMDksNDcwMTAsNDcwMTEsNDcwMTIsNDcwMTMsNDcwMTQsNDcwMTUsNDcwMTgsNDcwMjIsNDcwMjMsNDcwMjQsNDcwMjUsNDcwMjYsNDcwMjcsNDcwMzAsNDcwMzEsNDcwMzMsNDcwMzQsNDcwMzUsNDcwMzYsNDcwMzcsNDcwMzgsNDcwMzksNDcwNDAsNDcwNDEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcwNDIsNDcwNDMsNDcwNDQsNDcwNDUsNDcwNDYsNDcwNDgsNDcwNTAsNDcwNTEsNDcwNTIsNDcwNTMsNDcwNTQsNDcwNTUsNDcwNTYsNDcwNTcsNDcwNTgsNDcwNTksNDcwNjAsNDcwNjEsNDcwNjIsNDcwNjMsNDcwNjQsNDcwNjUsNDcwNjYsNDcwNjcsNDcwNjgsNDcwNjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcwNzAsNDcwNzEsNDcwNzIsNDcwNzMsNDcwNzQsNDcwNzUsNDcwNzYsNDcwNzcsNDcwNzgsNDcwNzksNDcwODAsNDcwODEsNDcwODIsNDcwODMsNDcwODYsNDcwODcsNDcwODksNDcwOTAsNDcwOTEsNDcwOTMsNDcwOTQsNDcwOTUsNDcwOTYsNDcwOTcsNDcwOTgsNDcwOTksNDcxMDIsNDcxMDYsNDcxMDcsNDcxMDgsNDcxMDksNDcxMTAsNDcxMTQsNDcxMTUsNDcxMTcsNDcxMTgsNDcxMTksNDcxMjEsNDcxMjIsNDcxMjMsNDcxMjQsNDcxMjUsNDcxMjYsNDcxMjcsNDcxMzAsNDcxMzIsNDcxMzQsNDcxMzUsNDcxMzYsNDcxMzcsNDcxMzgsNDcxMzksNDcxNDIsNDcxNDMsNDcxNDUsNDcxNDYsNDcxNDcsNDcxNDksNDcxNTAsNDcxNTEsNDcxNTIsNDcxNTMsNDcxNTQsNDcxNTUsNDcxNTgsNDcxNjIsNDcxNjMsNDcxNjQsNDcxNjUsNDcxNjYsNDcxNjcsNDcxNjksNDcxNzAsNDcxNzEsNDcxNzMsNDcxNzQsNDcxNzUsNDcxNzYsNDcxNzcsNDcxNzgsNDcxNzksNDcxODAsNDcxODEsNDcxODIsNDcxODMsNDcxODQsNDcxODYsNDcxODgsNDcxODksNDcxOTAsNDcxOTEsNDcxOTIsNDcxOTMsNDcxOTQsNDcxOTUsNDcxOTgsNDcxOTksNDcyMDEsNDcyMDIsNDcyMDMsNDcyMDUsNDcyMDYsNDcyMDcsNDcyMDgsNDcyMDksNDcyMTAsNDcyMTEsNDcyMTQsNDcyMTYsNDcyMTgsNDcyMTksNDcyMjAsNDcyMjEsNDcyMjIsNDcyMjMsNDcyMjUsNDcyMjYsNDcyMjcsNDcyMjksNDcyMzAsNDcyMzEsNDcyMzIsNDcyMzMsNDcyMzQsNDcyMzUsNDcyMzYsNDcyMzcsNDcyMzgsNDcyMzksNDcyNDAsNDcyNDEsNDcyNDIsNDcyNDMsNDcyNDQsNDcyNDYsNDcyNDcsNDcyNDgsNDcyNDksNDcyNTAsNDcyNTEsNDcyNTIsNDcyNTMsNDcyNTQsNDcyNTUsNDcyNTYsNDcyNTcsNDcyNTgsNDcyNTksNDcyNjAsNDcyNjEsNDcyNjIsNDcyNjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcyNjQsNDcyNjUsNDcyNjYsNDcyNjcsNDcyNjgsNDcyNjksNDcyNzAsNDcyNzEsNDcyNzMsNDcyNzQsNDcyNzUsNDcyNzYsNDcyNzcsNDcyNzgsNDcyNzksNDcyODEsNDcyODIsNDcyODMsNDcyODUsNDcyODYsNDcyODcsNDcyODksNDcyOTAsNDcyOTEsNDcyOTIsNDcyOTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcyOTQsNDcyOTUsNDcyOTgsNDczMDAsNDczMDIsNDczMDMsNDczMDQsNDczMDUsNDczMDYsNDczMDcsNDczMDksNDczMTAsNDczMTEsNDczMTMsNDczMTQsNDczMTUsNDczMTcsNDczMTgsNDczMTksNDczMjAsNDczMjEsNDczMjIsNDczMjMsNDczMjQsNDczMjYsNDczMjgsNDczMzAsNDczMzEsNDczMzIsNDczMzMsNDczMzQsNDczMzUsNDczMzgsNDczMzksNDczNDEsNDczNDIsNDczNDMsNDczNDUsNDczNDYsNDczNDcsNDczNDgsNDczNDksNDczNTAsNDczNTEsNDczNTQsNDczNTYsNDczNTgsNDczNTksNDczNjAsNDczNjEsNDczNjIsNDczNjMsNDczNjUsNDczNjYsNDczNjcsNDczNjgsNDczNjksNDczNzAsNDczNzEsNDczNzIsNDczNzMsNDczNzQsNDczNzUsNDczNzYsNDczNzcsNDczNzgsNDczNzksNDczODAsNDczODEsNDczODIsNDczODMsNDczODUsNDczODYsNDczODcsNDczODgsNDczODksNDczOTAsNDczOTEsNDczOTMsNDczOTQsNDczOTUsNDczOTYsNDczOTcsNDczOTgsNDczOTksNDc0MDAsNDc0MDEsNDc0MDIsNDc0MDMsNDc0MDQsNDc0MDUsNDc0MDYsNDc0MDcsNDc0MDgsNDc0MDksNDc0MTAsNDc0MTEsNDc0MTIsNDc0MTMsNDc0MTQsNDc0MTUsNDc0MTYsNDc0MTcsNDc0MTgsNDc0MTksNDc0MjIsNDc0MjMsNDc0MjUsNDc0MjYsNDc0MjcsNDc0MjksNDc0MzAsNDc0MzEsNDc0MzIsNDc0MzMsNDc0MzQsNDc0MzUsNDc0MzcsNDc0MzgsNDc0NDAsNDc0NDIsNDc0NDMsNDc0NDQsNDc0NDUsNDc0NDYsNDc0NDcsNDc0NTAsNDc0NTEsNDc0NTMsNDc0NTQsNDc0NTUsNDc0NTcsNDc0NTgsNDc0NTksNDc0NjAsNDc0NjEsNDc0NjIsNDc0NjMsNDc0NjYsNDc0NjgsNDc0NzAsNDc0NzEsNDc0NzIsNDc0NzMsNDc0NzQsNDc0NzUsNDc0NzgsNDc0NzksNDc0ODEsNDc0ODIsNDc0ODMsNDc0ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc0ODYsNDc0ODcsNDc0ODgsNDc0ODksNDc0OTAsNDc0OTEsNDc0OTQsNDc0OTYsNDc0OTksNDc1MDAsNDc1MDMsNDc1MDQsNDc1MDUsNDc1MDYsNDc1MDcsNDc1MDgsNDc1MDksNDc1MTAsNDc1MTEsNDc1MTIsNDc1MTMsNDc1MTQsNDc1MTUsNDc1MTYsNDc1MTcsNDc1MTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc1MTksNDc1MjAsNDc1MjEsNDc1MjIsNDc1MjMsNDc1MjQsNDc1MjUsNDc1MjYsNDc1MjcsNDc1MjgsNDc1MjksNDc1MzAsNDc1MzEsNDc1MzQsNDc1MzUsNDc1MzcsNDc1MzgsNDc1MzksNDc1NDEsNDc1NDIsNDc1NDMsNDc1NDQsNDc1NDUsNDc1NDYsNDc1NDcsNDc1NTAsNDc1NTIsNDc1NTQsNDc1NTUsNDc1NTYsNDc1NTcsNDc1NTgsNDc1NTksNDc1NjIsNDc1NjMsNDc1NjUsNDc1NzEsNDc1NzIsNDc1NzMsNDc1NzQsNDc1NzUsNDc1NzgsNDc1ODAsNDc1ODMsNDc1ODQsNDc1ODYsNDc1OTAsNDc1OTEsNDc1OTMsNDc1OTQsNDc1OTUsNDc1OTcsNDc1OTgsNDc1OTksNDc2MDAsNDc2MDEsNDc2MDIsNDc2MDMsNDc2MDYsNDc2MTEsNDc2MTIsNDc2MTMsNDc2MTQsNDc2MTUsNDc2MTgsNDc2MTksNDc2MjAsNDc2MjEsNDc2MjIsNDc2MjMsNDc2MjUsNDc2MjYsNDc2MjcsNDc2MjgsNDc2MjksNDc2MzAsNDc2MzEsNDc2MzIsNDc2MzMsNDc2MzQsNDc2MzUsNDc2MzYsNDc2MzgsNDc2MzksNDc2NDAsNDc2NDEsNDc2NDIsNDc2NDMsNDc2NDQsNDc2NDUsNDc2NDYsNDc2NDcsNDc2NDgsNDc2NDksNDc2NTAsNDc2NTEsNDc2NTIsNDc2NTMsNDc2NTQsNDc2NTUsNDc2NTYsNDc2NTcsNDc2NTgsNDc2NTksNDc2NjAsNDc2NjEsNDc2NjIsNDc2NjMsNDc2NjQsNDc2NjUsNDc2NjYsNDc2NjcsNDc2NjgsNDc2NjksNDc2NzAsNDc2NzEsNDc2NzQsNDc2NzUsNDc2NzcsNDc2NzgsNDc2NzksNDc2ODEsNDc2ODMsNDc2ODQsNDc2ODUsNDc2ODYsNDc2ODcsNDc2OTAsNDc2OTIsNDc2OTUsNDc2OTYsNDc2OTcsNDc2OTgsNDc3MDIsNDc3MDMsNDc3MDUsNDc3MDYsNDc3MDcsNDc3MDksNDc3MTAsNDc3MTEsNDc3MTIsNDc3MTMsNDc3MTQsNDc3MTUsNDc3MTgsNDc3MjIsNDc3MjMsNDc3MjQsNDc3MjUsNDc3MjYsNDc3MjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc3MzAsNDc3MzEsNDc3MzMsNDc3MzQsNDc3MzUsNDc3MzcsNDc3MzgsNDc3MzksNDc3NDAsNDc3NDEsNDc3NDIsNDc3NDMsNDc3NDQsNDc3NDUsNDc3NDYsNDc3NTAsNDc3NTIsNDc3NTMsNDc3NTQsNDc3NTUsNDc3NTcsNDc3NTgsNDc3NTksNDc3NjAsNDc3NjEsNDc3NjIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc3NjMsNDc3NjQsNDc3NjUsNDc3NjYsNDc3NjcsNDc3NjgsNDc3NjksNDc3NzAsNDc3NzEsNDc3NzIsNDc3NzMsNDc3NzQsNDc3NzUsNDc3NzYsNDc3NzcsNDc3NzgsNDc3NzksNDc3ODAsNDc3ODEsNDc3ODIsNDc3ODMsNDc3ODYsNDc3ODksNDc3OTAsNDc3OTEsNDc3OTMsNDc3OTUsNDc3OTYsNDc3OTcsNDc3OTgsNDc3OTksNDc4MDIsNDc4MDQsNDc4MDYsNDc4MDcsNDc4MDgsNDc4MDksNDc4MTAsNDc4MTEsNDc4MTMsNDc4MTQsNDc4MTUsNDc4MTcsNDc4MTgsNDc4MTksNDc4MjAsNDc4MjEsNDc4MjIsNDc4MjMsNDc4MjQsNDc4MjUsNDc4MjYsNDc4MjcsNDc4MjgsNDc4MjksNDc4MzAsNDc4MzEsNDc4MzQsNDc4MzUsNDc4MzYsNDc4MzcsNDc4MzgsNDc4MzksNDc4NDAsNDc4NDEsNDc4NDIsNDc4NDMsNDc4NDQsNDc4NDUsNDc4NDYsNDc4NDcsNDc4NDgsNDc4NDksNDc4NTAsNDc4NTEsNDc4NTIsNDc4NTMsNDc4NTQsNDc4NTUsNDc4NTYsNDc4NTcsNDc4NTgsNDc4NTksNDc4NjAsNDc4NjEsNDc4NjIsNDc4NjMsNDc4NjQsNDc4NjUsNDc4NjYsNDc4NjcsNDc4NjksNDc4NzAsNDc4NzEsNDc4NzMsNDc4NzQsNDc4NzUsNDc4NzcsNDc4NzgsNDc4NzksNDc4ODAsNDc4ODEsNDc4ODIsNDc4ODMsNDc4ODQsNDc4ODYsNDc4ODgsNDc4OTAsNDc4OTEsNDc4OTIsNDc4OTMsNDc4OTQsNDc4OTUsNDc4OTcsNDc4OTgsNDc4OTksNDc5MDEsNDc5MDIsNDc5MDMsNDc5MDUsNDc5MDYsNDc5MDcsNDc5MDgsNDc5MDksNDc5MTAsNDc5MTEsNDc5MTIsNDc5MTQsNDc5MTYsNDc5MTcsNDc5MTgsNDc5MTksNDc5MjAsNDc5MjEsNDc5MjIsNDc5MjMsNDc5MjcsNDc5MjksNDc5MzAsNDc5MzUsNDc5MzYsNDc5MzcsNDc5MzgsNDc5MzksNDc5NDIsNDc5NDQsNDc5NDYsNDc5NDcsNDc5NDgsNDc5NTAsNDc5NTMsNDc5NTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc5NTUsNDc5NTcsNDc5NTgsNDc5NTksNDc5NjEsNDc5NjIsNDc5NjMsNDc5NjQsNDc5NjUsNDc5NjYsNDc5NjcsNDc5NjgsNDc5NzAsNDc5NzIsNDc5NzMsNDc5NzQsNDc5NzUsNDc5NzYsNDc5NzcsNDc5NzgsNDc5NzksNDc5ODEsNDc5ODIsNDc5ODMsNDc5ODQsNDc5ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc5ODYsNDc5ODcsNDc5ODgsNDc5ODksNDc5OTAsNDc5OTEsNDc5OTIsNDc5OTMsNDc5OTQsNDc5OTUsNDc5OTYsNDc5OTcsNDc5OTgsNDc5OTksNDgwMDAsNDgwMDEsNDgwMDIsNDgwMDMsNDgwMDQsNDgwMDUsNDgwMDYsNDgwMDcsNDgwMDksNDgwMTAsNDgwMTEsNDgwMTMsNDgwMTQsNDgwMTUsNDgwMTcsNDgwMTgsNDgwMTksNDgwMjAsNDgwMjEsNDgwMjIsNDgwMjMsNDgwMjQsNDgwMjUsNDgwMjYsNDgwMjcsNDgwMjgsNDgwMjksNDgwMzAsNDgwMzEsNDgwMzIsNDgwMzMsNDgwMzQsNDgwMzUsNDgwMzcsNDgwMzgsNDgwMzksNDgwNDEsNDgwNDIsNDgwNDMsNDgwNDUsNDgwNDYsNDgwNDcsNDgwNDgsNDgwNDksNDgwNTAsNDgwNTEsNDgwNTMsNDgwNTQsNDgwNTYsNDgwNTcsNDgwNTgsNDgwNTksNDgwNjAsNDgwNjEsNDgwNjIsNDgwNjMsNDgwNjUsNDgwNjYsNDgwNjcsNDgwNjksNDgwNzAsNDgwNzEsNDgwNzMsNDgwNzQsNDgwNzUsNDgwNzYsNDgwNzcsNDgwNzgsNDgwNzksNDgwODEsNDgwODIsNDgwODQsNDgwODUsNDgwODYsNDgwODcsNDgwODgsNDgwODksNDgwOTAsNDgwOTEsNDgwOTIsNDgwOTMsNDgwOTQsNDgwOTUsNDgwOTYsNDgwOTcsNDgwOTgsNDgwOTksNDgxMDAsNDgxMDEsNDgxMDIsNDgxMDMsNDgxMDQsNDgxMDUsNDgxMDYsNDgxMDcsNDgxMDgsNDgxMDksNDgxMTAsNDgxMTEsNDgxMTIsNDgxMTMsNDgxMTQsNDgxMTUsNDgxMTYsNDgxMTcsNDgxMTgsNDgxMTksNDgxMjIsNDgxMjMsNDgxMjUsNDgxMjYsNDgxMjksNDgxMzEsNDgxMzIsNDgxMzMsNDgxMzQsNDgxMzUsNDgxMzgsNDgxNDIsNDgxNDQsNDgxNDYsNDgxNDcsNDgxNTMsNDgxNTQsNDgxNjAsNDgxNjEsNDgxNjIsNDgxNjMsNDgxNjYsNDgxNjgsNDgxNzAsNDgxNzEsNDgxNzIsNDgxNzQsNDgxNzUsNDgxNzgsNDgxNzksNDgxODEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDgxODIsNDgxODMsNDgxODUsNDgxODYsNDgxODcsNDgxODgsNDgxODksNDgxOTAsNDgxOTEsNDgxOTQsNDgxOTgsNDgxOTksNDgyMDAsNDgyMDIsNDgyMDMsNDgyMDYsNDgyMDcsNDgyMDksNDgyMTAsNDgyMTEsNDgyMTIsNDgyMTMsNDgyMTQsNDgyMTUsNDgyMTYsNDgyMTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDgyMTgsNDgyMTksNDgyMjAsNDgyMjIsNDgyMjMsNDgyMjQsNDgyMjUsNDgyMjYsNDgyMjcsNDgyMjgsNDgyMjksNDgyMzAsNDgyMzEsNDgyMzIsNDgyMzMsNDgyMzQsNDgyMzUsNDgyMzYsNDgyMzcsNDgyMzgsNDgyMzksNDgyNDAsNDgyNDEsNDgyNDIsNDgyNDMsNDgyNDQsNDgyNDUsNDgyNDYsNDgyNDcsNDgyNDgsNDgyNDksNDgyNTAsNDgyNTEsNDgyNTIsNDgyNTMsNDgyNTQsNDgyNTUsNDgyNTYsNDgyNTcsNDgyNTgsNDgyNTksNDgyNjIsNDgyNjMsNDgyNjUsNDgyNjYsNDgyNjksNDgyNzEsNDgyNzIsNDgyNzMsNDgyNzQsNDgyNzUsNDgyNzgsNDgyODAsNDgyODMsNDgyODQsNDgyODUsNDgyODYsNDgyODcsNDgyOTAsNDgyOTEsNDgyOTMsNDgyOTQsNDgyOTcsNDgyOTgsNDgyOTksNDgzMDAsNDgzMDEsNDgzMDIsNDgzMDMsNDgzMDYsNDgzMTAsNDgzMTEsNDgzMTIsNDgzMTMsNDgzMTQsNDgzMTUsNDgzMTgsNDgzMTksNDgzMjEsNDgzMjIsNDgzMjMsNDgzMjUsNDgzMjYsNDgzMjcsNDgzMjgsNDgzMjksNDgzMzAsNDgzMzEsNDgzMzIsNDgzMzQsNDgzMzgsNDgzMzksNDgzNDAsNDgzNDIsNDgzNDMsNDgzNDUsNDgzNDYsNDgzNDcsNDgzNDksNDgzNTAsNDgzNTEsNDgzNTIsNDgzNTMsNDgzNTQsNDgzNTUsNDgzNTYsNDgzNTcsNDgzNTgsNDgzNTksNDgzNjAsNDgzNjEsNDgzNjIsNDgzNjMsNDgzNjQsNDgzNjUsNDgzNjYsNDgzNjcsNDgzNjgsNDgzNjksNDgzNzAsNDgzNzEsNDgzNzUsNDgzNzcsNDgzNzgsNDgzNzksNDgzODEsNDgzODIsNDgzODMsNDgzODQsNDgzODUsNDgzODYsNDgzODcsNDgzOTAsNDgzOTIsNDgzOTQsNDgzOTUsNDgzOTYsNDgzOTcsNDgzOTgsNDgzOTksNDg0MDEsNDg0MDIsNDg0MDMsNDg0MDUsNDg0MDYsNDg0MDcsNDg0MDgsNDg0MDksNDg0MTAsNDg0MTEsNDg0MTIsNDg0MTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg0MTQsNDg0MTUsNDg0MTYsNDg0MTcsNDg0MTgsNDg0MTksNDg0MjEsNDg0MjIsNDg0MjMsNDg0MjQsNDg0MjUsNDg0MjYsNDg0MjcsNDg0MjksNDg0MzAsNDg0MzEsNDg0MzIsNDg0MzMsNDg0MzQsNDg0MzUsNDg0MzYsNDg0MzcsNDg0MzgsNDg0MzksNDg0NDAsNDg0NDEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg0NDIsNDg0NDMsNDg0NDQsNDg0NDUsNDg0NDYsNDg0NDcsNDg0NDksNDg0NTAsNDg0NTEsNDg0NTIsNDg0NTMsNDg0NTQsNDg0NTUsNDg0NTgsNDg0NTksNDg0NjEsNDg0NjIsNDg0NjMsNDg0NjUsNDg0NjYsNDg0NjcsNDg0NjgsNDg0NjksNDg0NzAsNDg0NzEsNDg0NzQsNDg0NzUsNDg0NzYsNDg0NzcsNDg0NzgsNDg0NzksNDg0ODAsNDg0ODEsNDg0ODIsNDg0ODMsNDg0ODUsNDg0ODYsNDg0ODcsNDg0ODksNDg0OTAsNDg0OTEsNDg0OTIsNDg0OTMsNDg0OTQsNDg0OTUsNDg0OTYsNDg0OTcsNDg0OTgsNDg0OTksNDg1MDAsNDg1MDEsNDg1MDIsNDg1MDMsNDg1MDQsNDg1MDUsNDg1MDYsNDg1MDcsNDg1MDgsNDg1MDksNDg1MTAsNDg1MTEsNDg1MTQsNDg1MTUsNDg1MTcsNDg1MTgsNDg1MjMsNDg1MjQsNDg1MjUsNDg1MjYsNDg1MjcsNDg1MzAsNDg1MzIsNDg1MzQsNDg1MzUsNDg1MzYsNDg1MzksNDg1NDEsNDg1NDIsNDg1NDMsNDg1NDQsNDg1NDUsNDg1NDYsNDg1NDcsNDg1NDksNDg1NTAsNDg1NTEsNDg1NTIsNDg1NTMsNDg1NTQsNDg1NTUsNDg1NTYsNDg1NTcsNDg1NTgsNDg1NTksNDg1NjEsNDg1NjIsNDg1NjMsNDg1NjQsNDg1NjUsNDg1NjYsNDg1NjcsNDg1NjksNDg1NzAsNDg1NzEsNDg1NzIsNDg1NzMsNDg1NzQsNDg1NzUsNDg1NzYsNDg1NzcsNDg1NzgsNDg1NzksNDg1ODAsNDg1ODEsNDg1ODIsNDg1ODMsNDg1ODQsNDg1ODUsNDg1ODYsNDg1ODcsNDg1ODgsNDg1ODksNDg1OTAsNDg1OTEsNDg1OTIsNDg1OTMsNDg1OTQsNDg1OTUsNDg1OTgsNDg1OTksNDg2MDEsNDg2MDIsNDg2MDMsNDg2MDUsNDg2MDYsNDg2MDcsNDg2MDgsNDg2MDksNDg2MTAsNDg2MTEsNDg2MTIsNDg2MTMsNDg2MTQsNDg2MTUsNDg2MTYsNDg2MTgsNDg2MTksNDg2MjAsNDg2MjEsNDg2MjIsNDg2MjMsNDg2MjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg2MjYsNDg2MjcsNDg2MjksNDg2MzAsNDg2MzEsNDg2MzMsNDg2MzQsNDg2MzUsNDg2MzYsNDg2MzcsNDg2MzgsNDg2MzksNDg2NDEsNDg2NDIsNDg2NDQsNDg2NDYsNDg2NDcsNDg2NDgsNDg2NDksNDg2NTAsNDg2NTEsNDg2NTQsNDg2NTUsNDg2NTcsNDg2NTgsNDg2NTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg2NjEsNDg2NjIsNDg2NjMsNDg2NjQsNDg2NjUsNDg2NjYsNDg2NjcsNDg2NzAsNDg2NzIsNDg2NzMsNDg2NzQsNDg2NzUsNDg2NzYsNDg2NzcsNDg2NzgsNDg2NzksNDg2ODAsNDg2ODEsNDg2ODIsNDg2ODMsNDg2ODQsNDg2ODUsNDg2ODYsNDg2ODcsNDg2ODgsNDg2ODksNDg2OTAsNDg2OTEsNDg2OTIsNDg2OTMsNDg2OTQsNDg2OTUsNDg2OTYsNDg2OTcsNDg2OTgsNDg2OTksNDg3MDAsNDg3MDEsNDg3MDIsNDg3MDMsNDg3MDQsNDg3MDUsNDg3MDYsNDg3MDcsNDg3MTAsNDg3MTEsNDg3MTMsNDg3MTQsNDg3MTUsNDg3MTcsNDg3MTksNDg3MjAsNDg3MjEsNDg3MjIsNDg3MjMsNDg3MjYsNDg3MjgsNDg3MzIsNDg3MzMsNDg3MzQsNDg3MzUsNDg3MzgsNDg3MzksNDg3NDEsNDg3NDIsNDg3NDMsNDg3NDUsNDg3NDcsNDg3NDgsNDg3NDksNDg3NTAsNDg3NTEsNDg3NTQsNDg3NTgsNDg3NTksNDg3NjAsNDg3NjEsNDg3NjIsNDg3NjYsNDg3NjcsNDg3NjksNDg3NzAsNDg3NzEsNDg3NzMsNDg3NzQsNDg3NzUsNDg3NzYsNDg3NzcsNDg3NzgsNDg3NzksNDg3ODIsNDg3ODYsNDg3ODcsNDg3ODgsNDg3ODksNDg3OTAsNDg3OTEsNDg3OTQsNDg3OTUsNDg3OTYsNDg3OTcsNDg3OTgsNDg3OTksNDg4MDAsNDg4MDEsNDg4MDIsNDg4MDMsNDg4MDQsNDg4MDUsNDg4MDYsNDg4MDcsNDg4MDksNDg4MTAsNDg4MTEsNDg4MTIsNDg4MTMsNDg4MTQsNDg4MTUsNDg4MTYsNDg4MTcsNDg4MTgsNDg4MTksNDg4MjAsNDg4MjEsNDg4MjIsNDg4MjMsNDg4MjQsNDg4MjUsNDg4MjYsNDg4MjcsNDg4MjgsNDg4MjksNDg4MzAsNDg4MzEsNDg4MzIsNDg4MzMsNDg4MzQsNDg4MzUsNDg4MzYsNDg4MzcsNDg4MzgsNDg4MzksNDg4NDAsNDg4NDEsNDg4NDIsNDg4NDMsNDg4NDQsNDg4NDUsNDg4NDYsNDg4NDcsNDg4NTAsNDg4NTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg4NTMsNDg4NTQsNDg4NTcsNDg4NTgsNDg4NTksNDg4NjAsNDg4NjEsNDg4NjIsNDg4NjMsNDg4NjUsNDg4NjYsNDg4NzAsNDg4NzEsNDg4NzIsNDg4NzMsNDg4NzQsNDg4NzUsNDg4NzcsNDg4NzgsNDg4NzksNDg4ODAsNDg4ODEsNDg4ODIsNDg4ODMsNDg4ODQsNDg4ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg4ODYsNDg4ODcsNDg4ODgsNDg4ODksNDg4OTAsNDg4OTEsNDg4OTIsNDg4OTMsNDg4OTQsNDg4OTUsNDg4OTYsNDg4OTgsNDg4OTksNDg5MDAsNDg5MDEsNDg5MDIsNDg5MDMsNDg5MDYsNDg5MDcsNDg5MDgsNDg5MDksNDg5MTAsNDg5MTEsNDg5MTIsNDg5MTMsNDg5MTQsNDg5MTUsNDg5MTYsNDg5MTcsNDg5MTgsNDg5MTksNDg5MjIsNDg5MjYsNDg5MjcsNDg5MjgsNDg5MjksNDg5MzAsNDg5MzEsNDg5MzIsNDg5MzMsNDg5MzQsNDg5MzUsNDg5MzYsNDg5MzcsNDg5MzgsNDg5MzksNDg5NDAsNDg5NDEsNDg5NDIsNDg5NDMsNDg5NDQsNDg5NDUsNDg5NDYsNDg5NDcsNDg5NDgsNDg5NDksNDg5NTAsNDg5NTEsNDg5NTIsNDg5NTMsNDg5NTQsNDg5NTUsNDg5NTYsNDg5NTcsNDg5NTgsNDg5NTksNDg5NjIsNDg5NjMsNDg5NjUsNDg5NjYsNDg5NjcsNDg5NjksNDg5NzAsNDg5NzEsNDg5NzIsNDg5NzMsNDg5NzQsNDg5NzUsNDg5NzgsNDg5NzksNDg5ODAsNDg5ODIsNDg5ODMsNDg5ODQsNDg5ODUsNDg5ODYsNDg5ODcsNDg5ODgsNDg5ODksNDg5OTAsNDg5OTEsNDg5OTIsNDg5OTMsNDg5OTQsNDg5OTUsNDg5OTYsNDg5OTcsNDg5OTgsNDg5OTksNDkwMDAsNDkwMDEsNDkwMDIsNDkwMDMsNDkwMDQsNDkwMDUsNDkwMDYsNDkwMDcsNDkwMDgsNDkwMDksNDkwMTAsNDkwMTEsNDkwMTIsNDkwMTMsNDkwMTQsNDkwMTUsNDkwMTYsNDkwMTcsNDkwMTgsNDkwMTksNDkwMjAsNDkwMjEsNDkwMjIsNDkwMjMsNDkwMjQsNDkwMjUsNDkwMjYsNDkwMjcsNDkwMjgsNDkwMjksNDkwMzAsNDkwMzEsNDkwMzIsNDkwMzMsNDkwMzQsNDkwMzUsNDkwMzYsNDkwMzcsNDkwMzgsNDkwMzksNDkwNDAsNDkwNDEsNDkwNDIsNDkwNDMsNDkwNDUsNDkwNDYsNDkwNDcsNDkwNDgsNDkwNDksNDkwNTAsNDkwNTEsNDkwNTIsNDkwNTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDkwNTQsNDkwNTUsNDkwNTYsNDkwNTcsNDkwNTgsNDkwNTksNDkwNjAsNDkwNjEsNDkwNjIsNDkwNjMsNDkwNjQsNDkwNjUsNDkwNjYsNDkwNjcsNDkwNjgsNDkwNjksNDkwNzAsNDkwNzEsNDkwNzMsNDkwNzQsNDkwNzUsNDkwNzYsNDkwNzcsNDkwNzgsNDkwNzksNDkwODAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDkwODEsNDkwODIsNDkwODMsNDkwODQsNDkwODUsNDkwODYsNDkwODcsNDkwODgsNDkwODksNDkwOTAsNDkwOTEsNDkwOTIsNDkwOTQsNDkwOTUsNDkwOTYsNDkwOTcsNDkwOTgsNDkwOTksNDkxMDIsNDkxMDMsNDkxMDUsNDkxMDYsNDkxMDcsNDkxMDksNDkxMTAsNDkxMTEsNDkxMTIsNDkxMTMsNDkxMTQsNDkxMTUsNDkxMTcsNDkxMTgsNDkxMjAsNDkxMjIsNDkxMjMsNDkxMjQsNDkxMjUsNDkxMjYsNDkxMjcsNDkxMjgsNDkxMjksNDkxMzAsNDkxMzEsNDkxMzIsNDkxMzMsNDkxMzQsNDkxMzUsNDkxMzYsNDkxMzcsNDkxMzgsNDkxMzksNDkxNDAsNDkxNDEsNDkxNDIsNDkxNDMsNDkxNDQsNDkxNDUsNDkxNDYsNDkxNDcsNDkxNDgsNDkxNDksNDkxNTAsNDkxNTEsNDkxNTIsNDkxNTMsNDkxNTQsNDkxNTUsNDkxNTYsNDkxNTcsNDkxNTgsNDkxNTksNDkxNjAsNDkxNjEsNDkxNjIsNDkxNjMsNDkxNjQsNDkxNjUsNDkxNjYsNDkxNjcsNDkxNjgsNDkxNjksNDkxNzAsNDkxNzEsNDkxNzIsNDkxNzMsNDkxNzQsNDkxNzUsNDkxNzYsNDkxNzcsNDkxNzgsNDkxNzksNDkxODAsNDkxODEsNDkxODIsNDkxODMsNDkxODQsNDkxODUsNDkxODYsNDkxODcsNDkxODgsNDkxODksNDkxOTAsNDkxOTEsNDkxOTIsNDkxOTMsNDkxOTQsNDkxOTUsNDkxOTYsNDkxOTcsNDkxOTgsNDkxOTksNDkyMDAsNDkyMDEsNDkyMDIsNDkyMDMsNDkyMDQsNDkyMDUsNDkyMDYsNDkyMDcsNDkyMDgsNDkyMDksNDkyMTAsNDkyMTEsNDkyMTMsNDkyMTQsNDkyMTUsNDkyMTYsNDkyMTcsNDkyMTgsNDkyMTksNDkyMjAsNDkyMjEsNDkyMjIsNDkyMjMsNDkyMjQsNDkyMjUsNDkyMjYsNDkyMjcsNDkyMjgsNDkyMjksNDkyMzAsNDkyMzEsNDkyMzIsNDkyMzQsNDkyMzUsNDkyMzYsNDkyMzcsNDkyMzgsNDkyMzksNDkyNDEsNDkyNDIsNDkyNDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDkyNDUsNDkyNDYsNDkyNDcsNDkyNDksNDkyNTAsNDkyNTEsNDkyNTIsNDkyNTMsNDkyNTQsNDkyNTUsNDkyNTgsNDkyNTksNDkyNjAsNDkyNjEsNDkyNjIsNDkyNjMsNDkyNjQsNDkyNjUsNDkyNjYsNDkyNjcsNDkyNjgsNDkyNjksNDkyNzAsNDkyNzEsNDkyNzIsNDkyNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDkyNzQsNDkyNzUsNDkyNzYsNDkyNzcsNDkyNzgsNDkyNzksNDkyODAsNDkyODEsNDkyODIsNDkyODMsNDkyODQsNDkyODUsNDkyODYsNDkyODcsNDkyODgsNDkyODksNDkyOTAsNDkyOTEsNDkyOTIsNDkyOTMsNDkyOTQsNDkyOTUsNDkyOTgsNDkyOTksNDkzMDEsNDkzMDIsNDkzMDMsNDkzMDUsNDkzMDYsNDkzMDcsNDkzMDgsNDkzMDksNDkzMTAsNDkzMTEsNDkzMTQsNDkzMTYsNDkzMTgsNDkzMTksNDkzMjAsNDkzMjEsNDkzMjIsNDkzMjMsNDkzMjYsNDkzMjksNDkzMzAsNDkzMzUsNDkzMzYsNDkzMzcsNDkzMzgsNDkzMzksNDkzNDIsNDkzNDYsNDkzNDcsNDkzNDgsNDkzNTAsNDkzNTEsNDkzNTQsNDkzNTUsNDkzNTcsNDkzNTgsNDkzNTksNDkzNjEsNDkzNjIsNDkzNjMsNDkzNjQsNDkzNjUsNDkzNjYsNDkzNjcsNDkzNzAsNDkzNzQsNDkzNzUsNDkzNzYsNDkzNzcsNDkzNzgsNDkzNzksNDkzODIsNDkzODMsNDkzODUsNDkzODYsNDkzODcsNDkzODksNDkzOTAsNDkzOTEsNDkzOTIsNDkzOTMsNDkzOTQsNDkzOTUsNDkzOTgsNDk0MDAsNDk0MDIsNDk0MDMsNDk0MDQsNDk0MDUsNDk0MDYsNDk0MDcsNDk0MDksNDk0MTAsNDk0MTEsNDk0MTMsNDk0MTQsNDk0MTUsNDk0MTcsNDk0MTgsNDk0MTksNDk0MjAsNDk0MjEsNDk0MjIsNDk0MjMsNDk0MjUsNDk0MjYsNDk0MjcsNDk0MjgsNDk0MzAsNDk0MzEsNDk0MzIsNDk0MzMsNDk0MzQsNDk0MzUsNDk0NDEsNDk0NDIsNDk0NDUsNDk0NDgsNDk0NDksNDk0NTAsNDk0NTEsNDk0NTQsNDk0NTgsNDk0NTksNDk0NjAsNDk0NjEsNDk0NjMsNDk0NjYsNDk0NjcsNDk0NjksNDk0NzAsNDk0NzEsNDk0NzMsNDk0NzQsNDk0NzUsNDk0NzYsNDk0NzcsNDk0NzgsNDk0NzksNDk0ODIsNDk0ODYsNDk0ODcsNDk0ODgsNDk0ODksNDk0OTAsNDk0OTEsNDk0OTQsNDk0OTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk0OTcsNDk0OTgsNDk0OTksNDk1MDEsNDk1MDIsNDk1MDMsNDk1MDQsNDk1MDUsNDk1MDYsNDk1MDcsNDk1MTAsNDk1MTQsNDk1MTUsNDk1MTYsNDk1MTcsNDk1MTgsNDk1MTksNDk1MjEsNDk1MjIsNDk1MjMsNDk1MjUsNDk1MjYsNDk1MjcsNDk1MjksNDk1MzAsNDk1MzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk1MzIsNDk1MzMsNDk1MzQsNDk1MzUsNDk1MzYsNDk1MzcsNDk1MzgsNDk1MzksNDk1NDAsNDk1NDIsNDk1NDMsNDk1NDQsNDk1NDUsNDk1NDYsNDk1NDcsNDk1NTEsNDk1NTMsNDk1NTQsNDk1NTUsNDk1NTcsNDk1NTksNDk1NjAsNDk1NjEsNDk1NjIsNDk1NjMsNDk1NjYsNDk1NjgsNDk1NzAsNDk1NzEsNDk1NzIsNDk1NzQsNDk1NzUsNDk1NzgsNDk1NzksNDk1ODEsNDk1ODIsNDk1ODMsNDk1ODUsNDk1ODYsNDk1ODcsNDk1ODgsNDk1ODksNDk1OTAsNDk1OTEsNDk1OTIsNDk1OTMsNDk1OTQsNDk1OTUsNDk1OTYsNDk1OTgsNDk1OTksNDk2MDAsNDk2MDEsNDk2MDIsNDk2MDMsNDk2MDUsNDk2MDYsNDk2MDcsNDk2MDksNDk2MTAsNDk2MTEsNDk2MTMsNDk2MTQsNDk2MTUsNDk2MTYsNDk2MTcsNDk2MTgsNDk2MTksNDk2MjEsNDk2MjIsNDk2MjUsNDk2MjYsNDk2MjcsNDk2MjgsNDk2MjksNDk2MzAsNDk2MzEsNDk2MzMsNDk2MzQsNDk2MzUsNDk2MzcsNDk2MzgsNDk2MzksNDk2NDEsNDk2NDIsNDk2NDMsNDk2NDQsNDk2NDUsNDk2NDYsNDk2NDcsNDk2NTAsNDk2NTIsNDk2NTMsNDk2NTQsNDk2NTUsNDk2NTYsNDk2NTcsNDk2NTgsNDk2NTksNDk2NjIsNDk2NjMsNDk2NjUsNDk2NjYsNDk2NjcsNDk2NjksNDk2NzAsNDk2NzEsNDk2NzIsNDk2NzMsNDk2NzQsNDk2NzUsNDk2NzgsNDk2ODAsNDk2ODIsNDk2ODMsNDk2ODQsNDk2ODUsNDk2ODYsNDk2ODcsNDk2OTAsNDk2OTEsNDk2OTMsNDk2OTQsNDk2OTcsNDk2OTgsNDk2OTksNDk3MDAsNDk3MDEsNDk3MDIsNDk3MDMsNDk3MDYsNDk3MDgsNDk3MTAsNDk3MTIsNDk3MTUsNDk3MTcsNDk3MTgsNDk3MTksNDk3MjAsNDk3MjEsNDk3MjIsNDk3MjMsNDk3MjQsNDk3MjUsNDk3MjYsNDk3MjcsNDk3MjgsNDk3MjksNDk3MzAsNDk3MzEsNDk3MzIsNDk3MzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk3MzQsNDk3MzUsNDk3MzcsNDk3MzgsNDk3MzksNDk3NDAsNDk3NDEsNDk3NDIsNDk3NDMsNDk3NDYsNDk3NDcsNDk3NDksNDk3NTAsNDk3NTEsNDk3NTMsNDk3NTQsNDk3NTUsNDk3NTYsNDk3NTcsNDk3NTgsNDk3NTksNDk3NjEsNDk3NjIsNDk3NjMsNDk3NjQsNDk3NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk3NjcsNDk3NjgsNDk3NjksNDk3NzAsNDk3NzEsNDk3NzQsNDk3NzUsNDk3NzcsNDk3NzgsNDk3NzksNDk3ODEsNDk3ODIsNDk3ODMsNDk3ODQsNDk3ODUsNDk3ODYsNDk3ODcsNDk3OTAsNDk3OTIsNDk3OTQsNDk3OTUsNDk3OTYsNDk3OTcsNDk3OTgsNDk3OTksNDk4MDIsNDk4MDMsNDk4MDQsNDk4MDUsNDk4MDYsNDk4MDcsNDk4MDksNDk4MTAsNDk4MTEsNDk4MTIsNDk4MTMsNDk4MTQsNDk4MTUsNDk4MTcsNDk4MTgsNDk4MjAsNDk4MjIsNDk4MjMsNDk4MjQsNDk4MjUsNDk4MjYsNDk4MjcsNDk4MzAsNDk4MzEsNDk4MzMsNDk4MzQsNDk4MzUsNDk4MzgsNDk4MzksNDk4NDAsNDk4NDEsNDk4NDIsNDk4NDMsNDk4NDYsNDk4NDgsNDk4NTAsNDk4NTEsNDk4NTIsNDk4NTMsNDk4NTQsNDk4NTUsNDk4NTYsNDk4NTcsNDk4NTgsNDk4NTksNDk4NjAsNDk4NjEsNDk4NjIsNDk4NjMsNDk4NjQsNDk4NjUsNDk4NjYsNDk4NjcsNDk4NjgsNDk4NjksNDk4NzAsNDk4NzEsNDk4NzIsNDk4NzMsNDk4NzQsNDk4NzUsNDk4NzYsNDk4NzcsNDk4NzgsNDk4NzksNDk4ODAsNDk4ODEsNDk4ODIsNDk4ODMsNDk4ODYsNDk4ODcsNDk4ODksNDk4OTAsNDk4OTMsNDk4OTQsNDk4OTUsNDk4OTYsNDk4OTcsNDk4OTgsNDk5MDIsNDk5MDQsNDk5MDYsNDk5MDcsNDk5MDgsNDk5MDksNDk5MTEsNDk5MTQsNDk5MTcsNDk5MTgsNDk5MTksNDk5MjEsNDk5MjIsNDk5MjMsNDk5MjQsNDk5MjUsNDk5MjYsNDk5MjcsNDk5MzAsNDk5MzEsNDk5MzQsNDk5MzUsNDk5MzYsNDk5MzcsNDk5MzgsNDk5NDIsNDk5NDMsNDk5NDUsNDk5NDYsNDk5NDcsNDk5NDksNDk5NTAsNDk5NTEsNDk5NTIsNDk5NTMsNDk5NTQsNDk5NTUsNDk5NTgsNDk5NTksNDk5NjIsNDk5NjMsNDk5NjQsNDk5NjUsNDk5NjYsNDk5NjcsNDk5NjgsNDk5NjksNDk5NzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk5NzEsNDk5NzIsNDk5NzMsNDk5NzQsNDk5NzUsNDk5NzYsNDk5NzcsNDk5NzgsNDk5NzksNDk5ODAsNDk5ODEsNDk5ODIsNDk5ODMsNDk5ODQsNDk5ODUsNDk5ODYsNDk5ODcsNDk5ODgsNDk5OTAsNDk5OTEsNDk5OTIsNDk5OTMsNDk5OTQsNDk5OTUsNDk5OTYsNDk5OTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk5OTgsNDk5OTksNTAwMDAsNTAwMDEsNTAwMDIsNTAwMDMsNTAwMDQsNTAwMDUsNTAwMDYsNTAwMDcsNTAwMDgsNTAwMDksNTAwMTAsNTAwMTEsNTAwMTIsNTAwMTMsNTAwMTQsNTAwMTUsNTAwMTYsNTAwMTcsNTAwMTgsNTAwMTksNTAwMjAsNTAwMjEsNTAwMjIsNTAwMjMsNTAwMjYsNTAwMjcsNTAwMjksNTAwMzAsNTAwMzEsNTAwMzMsNTAwMzUsNTAwMzYsNTAwMzcsNTAwMzgsNTAwMzksNTAwNDIsNTAwNDMsNTAwNDYsNTAwNDcsNTAwNDgsNTAwNDksNTAwNTAsNTAwNTEsNTAwNTMsNTAwNTQsNTAwNTUsNTAwNTcsNTAwNTgsNTAwNTksNTAwNjEsNTAwNjIsNTAwNjMsNTAwNjQsNTAwNjUsNTAwNjYsNTAwNjcsNTAwNjgsNTAwNjksNTAwNzAsNTAwNzEsNTAwNzIsNTAwNzMsNTAwNzQsNTAwNzUsNTAwNzYsNTAwNzcsNTAwNzgsNTAwNzksNTAwODAsNTAwODEsNTAwODIsNTAwODMsNTAwODQsNTAwODUsNTAwODYsNTAwODcsNTAwODgsNTAwODksNTAwOTAsNTAwOTEsNTAwOTIsNTAwOTMsNTAwOTQsNTAwOTUsNTAwOTYsNTAwOTcsNTAwOTgsNTAwOTksNTAxMDAsNTAxMDEsNTAxMDIsNTAxMDMsNTAxMDQsNTAxMDUsNTAxMDYsNTAxMDcsNTAxMDgsNTAxMDksNTAxMTAsNTAxMTEsNTAxMTMsNTAxMTQsNTAxMTUsNTAxMTYsNTAxMTcsNTAxMTgsNTAxMTksNTAxMjAsNTAxMjEsNTAxMjIsNTAxMjMsNTAxMjQsNTAxMjUsNTAxMjYsNTAxMjcsNTAxMjgsNTAxMjksNTAxMzAsNTAxMzEsNTAxMzIsNTAxMzMsNTAxMzQsNTAxMzUsNTAxMzgsNTAxMzksNTAxNDEsNTAxNDIsNTAxNDUsNTAxNDcsNTAxNDgsNTAxNDksNTAxNTAsNTAxNTEsNTAxNTQsNTAxNTUsNTAxNTYsNTAxNTgsNTAxNTksNTAxNjAsNTAxNjEsNTAxNjIsNTAxNjMsNTAxNjYsNTAxNjcsNTAxNjksNTAxNzAsNTAxNzEsNTAxNzIsNTAxNzMsNTAxNzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTAxNzUsNTAxNzYsNTAxNzcsNTAxNzgsNTAxNzksNTAxODAsNTAxODEsNTAxODIsNTAxODMsNTAxODUsNTAxODYsNTAxODcsNTAxODgsNTAxODksNTAxOTAsNTAxOTEsNTAxOTMsNTAxOTQsNTAxOTUsNTAxOTYsNTAxOTcsNTAxOTgsNTAxOTksNTAyMDAsNTAyMDEsNTAyMDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTAyMDMsNTAyMDQsNTAyMDUsNTAyMDYsNTAyMDcsNTAyMDgsNTAyMDksNTAyMTAsNTAyMTEsNTAyMTMsNTAyMTQsNTAyMTUsNTAyMTYsNTAyMTcsNTAyMTgsNTAyMTksNTAyMjEsNTAyMjIsNTAyMjMsNTAyMjUsNTAyMjYsNTAyMjcsNTAyMjksNTAyMzAsNTAyMzEsNTAyMzIsNTAyMzMsNTAyMzQsNTAyMzUsNTAyMzgsNTAyMzksNTAyNDAsNTAyNDEsNTAyNDIsNTAyNDMsNTAyNDQsNTAyNDUsNTAyNDYsNTAyNDcsNTAyNDksNTAyNTAsNTAyNTEsNTAyNTIsNTAyNTMsNTAyNTQsNTAyNTUsNTAyNTYsNTAyNTcsNTAyNTgsNTAyNTksNTAyNjAsNTAyNjEsNTAyNjIsNTAyNjMsNTAyNjQsNTAyNjUsNTAyNjYsNTAyNjcsNTAyNjgsNTAyNjksNTAyNzAsNTAyNzEsNTAyNzIsNTAyNzMsNTAyNzQsNTAyNzUsNTAyNzgsNTAyNzksNTAyODEsNTAyODIsNTAyODMsNTAyODUsNTAyODYsNTAyODcsNTAyODgsNTAyODksNTAyOTAsNTAyOTEsNTAyOTQsNTAyOTUsNTAyOTYsNTAyOTgsNTAyOTksNTAzMDAsNTAzMDEsNTAzMDIsNTAzMDMsNTAzMDUsNTAzMDYsNTAzMDcsNTAzMDgsNTAzMDksNTAzMTAsNTAzMTEsNTAzMTIsNTAzMTMsNTAzMTQsNTAzMTUsNTAzMTYsNTAzMTcsNTAzMTgsNTAzMTksNTAzMjAsNTAzMjEsNTAzMjIsNTAzMjMsNTAzMjUsNTAzMjYsNTAzMjcsNTAzMjgsNTAzMjksNTAzMzAsNTAzMzEsNTAzMzMsNTAzMzQsNTAzMzUsNTAzMzYsNTAzMzcsNTAzMzgsNTAzMzksNTAzNDAsNTAzNDEsNTAzNDIsNTAzNDMsNTAzNDQsNTAzNDUsNTAzNDYsNTAzNDcsNTAzNDgsNTAzNDksNTAzNTAsNTAzNTEsNTAzNTIsNTAzNTMsNTAzNTQsNTAzNTUsNTAzNTYsNTAzNTcsNTAzNTgsNTAzNTksNTAzNjEsNTAzNjIsNTAzNjMsNTAzNjUsNTAzNjYsNTAzNjcsNTAzNjgsNTAzNjksNTAzNzAsNTAzNzEsNTAzNzIsNTAzNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTAzNzQsNTAzNzUsNTAzNzYsNTAzNzcsNTAzNzgsNTAzNzksNTAzODAsNTAzODEsNTAzODIsNTAzODMsNTAzODQsNTAzODUsNTAzODYsNTAzODcsNTAzODgsNTAzODksNTAzOTAsNTAzOTEsNTAzOTIsNTAzOTMsNTAzOTQsNTAzOTUsNTAzOTYsNTAzOTcsNTAzOTgsNTAzOTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA0MDAsNTA0MDEsNTA0MDIsNTA0MDMsNTA0MDQsNTA0MDUsNTA0MDYsNTA0MDcsNTA0MDgsNTA0MTAsNTA0MTEsNTA0MTIsNTA0MTMsNTA0MTQsNTA0MTUsNTA0MTgsNTA0MTksNTA0MjEsNTA0MjIsNTA0MjMsNTA0MjUsNTA0MjcsNTA0MjgsNTA0MjksNTA0MzAsNTA0MzQsNTA0MzUsNTA0MzYsNTA0MzcsNTA0MzgsNTA0MzksNTA0NDAsNTA0NDEsNTA0NDIsNTA0NDMsNTA0NDUsNTA0NDYsNTA0NDcsNTA0NDksNTA0NTAsNTA0NTEsNTA0NTMsNTA0NTQsNTA0NTUsNTA0NTYsNTA0NTcsNTA0NTgsNTA0NTksNTA0NjEsNTA0NjIsNTA0NjMsNTA0NjQsNTA0NjUsNTA0NjYsNTA0NjcsNTA0NjgsNTA0NjksNTA0NzAsNTA0NzEsNTA0NzQsNTA0NzUsNTA0NzcsNTA0NzgsNTA0NzksNTA0ODEsNTA0ODIsNTA0ODMsNTA0ODQsNTA0ODUsNTA0ODYsNTA0ODcsNTA0OTAsNTA0OTIsNTA0OTQsNTA0OTUsNTA0OTYsNTA0OTcsNTA0OTgsNTA0OTksNTA1MDIsNTA1MDMsNTA1MDcsNTA1MTEsNTA1MTIsNTA1MTMsNTA1MTQsNTA1MTgsNTA1MjIsNTA1MjMsNTA1MjQsNTA1MjcsNTA1MzAsNTA1MzEsNTA1MzMsNTA1MzQsNTA1MzUsNTA1MzcsNTA1MzgsNTA1MzksNTA1NDAsNTA1NDEsNTA1NDIsNTA1NDMsNTA1NDYsNTA1NTAsNTA1NTEsNTA1NTIsNTA1NTMsNTA1NTQsNTA1NTUsNTA1NTgsNTA1NTksNTA1NjEsNTA1NjIsNTA1NjMsNTA1NjUsNTA1NjYsNTA1NjgsNTA1NjksNTA1NzAsNTA1NzEsNTA1NzQsNTA1NzYsNTA1NzgsNTA1NzksNTA1ODAsNTA1ODIsNTA1ODUsNTA1ODYsNTA1ODcsNTA1ODksNTA1OTAsNTA1OTEsNTA1OTMsNTA1OTQsNTA1OTUsNTA1OTYsNTA1OTcsNTA1OTgsNTA1OTksNTA2MDAsNTA2MDIsNTA2MDMsNTA2MDQsNTA2MDUsNTA2MDYsNTA2MDcsNTA2MDgsNTA2MDksNTA2MTAsNTA2MTEsNTA2MTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA2MTUsNTA2MTgsNTA2MjMsNTA2MjQsNTA2MjUsNTA2MjYsNTA2MjcsNTA2MzUsNTA2MzcsNTA2MzksNTA2NDIsNTA2NDMsNTA2NDUsNTA2NDYsNTA2NDcsNTA2NDksNTA2NTAsNTA2NTEsNTA2NTIsNTA2NTMsNTA2NTQsNTA2NTUsNTA2NTgsNTA2NjAsNTA2NjIsNTA2NjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA2NjQsNTA2NjUsNTA2NjYsNTA2NjcsNTA2NzEsNTA2NzMsNTA2NzQsNTA2NzUsNTA2NzcsNTA2ODAsNTA2ODEsNTA2ODIsNTA2ODMsNTA2OTAsNTA2OTEsNTA2OTIsNTA2OTcsNTA2OTgsNTA2OTksNTA3MDEsNTA3MDIsNTA3MDMsNTA3MDUsNTA3MDYsNTA3MDcsNTA3MDgsNTA3MDksNTA3MTAsNTA3MTEsNTA3MTQsNTA3MTcsNTA3MTgsNTA3MTksNTA3MjAsNTA3MjEsNTA3MjIsNTA3MjMsNTA3MjYsNTA3MjcsNTA3MjksNTA3MzAsNTA3MzEsNTA3MzUsNTA3MzcsNTA3MzgsNTA3NDIsNTA3NDQsNTA3NDYsNTA3NDgsNTA3NDksNTA3NTAsNTA3NTEsNTA3NTQsNTA3NTUsNTA3NTcsNTA3NTgsNTA3NTksNTA3NjEsNTA3NjIsNTA3NjMsNTA3NjQsNTA3NjUsNTA3NjYsNTA3NjcsNTA3NzAsNTA3NzQsNTA3NzUsNTA3NzYsNTA3NzcsNTA3NzgsNTA3NzksNTA3ODIsNTA3ODMsNTA3ODUsNTA3ODYsNTA3ODcsNTA3ODgsNTA3ODksNTA3OTAsNTA3OTEsNTA3OTIsNTA3OTMsNTA3OTQsNTA3OTUsNTA3OTcsNTA3OTgsNTA4MDAsNTA4MDIsNTA4MDMsNTA4MDQsNTA4MDUsNTA4MDYsNTA4MDcsNTA4MTAsNTA4MTEsNTA4MTMsNTA4MTQsNTA4MTUsNTA4MTcsNTA4MTgsNTA4MTksNTA4MjAsNTA4MjEsNTA4MjIsNTA4MjMsNTA4MjYsNTA4MjgsNTA4MzAsNTA4MzEsNTA4MzIsNTA4MzMsNTA4MzQsNTA4MzUsNTA4MzgsNTA4MzksNTA4NDEsNTA4NDIsNTA4NDMsNTA4NDUsNTA4NDYsNTA4NDcsNTA4NDgsNTA4NDksNTA4NTAsNTA4NTEsNTA4NTQsNTA4NTYsNTA4NTgsNTA4NTksNTA4NjAsNTA4NjEsNTA4NjIsNTA4NjMsNTA4NjYsNTA4NjcsNTA4NjksNTA4NzAsNTA4NzEsNTA4NzUsNTA4NzYsNTA4NzcsNTA4NzgsNTA4NzksNTA4ODIsNTA4ODQsNTA4ODYsNTA4ODcsNTA4ODgsNTA4ODksNTA4OTAsNTA4OTEsNTA4OTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA4OTUsNTA4OTcsNTA4OTgsNTA4OTksNTA5MDEsNTA5MDIsNTA5MDMsNTA5MDQsNTA5MDUsNTA5MDYsNTA5MDcsNTA5MTAsNTA5MTEsNTA5MTQsNTA5MTUsNTA5MTYsNTA5MTcsNTA5MTgsNTA5MTksNTA5MjIsNTA5MjMsNTA5MjUsNTA5MjYsNTA5MjcsNTA5MjksNTA5MzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA5MzEsNTA5MzIsNTA5MzMsNTA5MzQsNTA5MzUsNTA5MzgsNTA5MzksNTA5NDAsNTA5NDIsNTA5NDMsNTA5NDQsNTA5NDUsNTA5NDYsNTA5NDcsNTA5NTAsNTA5NTEsNTA5NTMsNTA5NTQsNTA5NTUsNTA5NTcsNTA5NTgsNTA5NTksNTA5NjAsNTA5NjEsNTA5NjIsNTA5NjMsNTA5NjYsNTA5NjgsNTA5NzAsNTA5NzEsNTA5NzIsNTA5NzMsNTA5NzQsNTA5NzUsNTA5NzgsNTA5NzksNTA5ODEsNTA5ODIsNTA5ODMsNTA5ODUsNTA5ODYsNTA5ODcsNTA5ODgsNTA5ODksNTA5OTAsNTA5OTEsNTA5OTQsNTA5OTYsNTA5OTgsNTEwMDAsNTEwMDEsNTEwMDIsNTEwMDMsNTEwMDYsNTEwMDcsNTEwMDksNTEwMTAsNTEwMTEsNTEwMTMsNTEwMTQsNTEwMTUsNTEwMTYsNTEwMTcsNTEwMTksNTEwMjIsNTEwMjQsNTEwMzMsNTEwMzQsNTEwMzUsNTEwMzcsNTEwMzgsNTEwMzksNTEwNDEsNTEwNDIsNTEwNDMsNTEwNDQsNTEwNDUsNTEwNDYsNTEwNDcsNTEwNDksNTEwNTAsNTEwNTIsNTEwNTMsNTEwNTQsNTEwNTUsNTEwNTYsNTEwNTcsNTEwNTgsNTEwNTksNTEwNjIsNTEwNjMsNTEwNjUsNTEwNjYsNTEwNjcsNTEwNzEsNTEwNzIsNTEwNzMsNTEwNzQsNTEwNzgsNTEwODMsNTEwODQsNTEwODUsNTEwODcsNTEwOTAsNTEwOTEsNTEwOTMsNTEwOTcsNTEwOTksNTExMDAsNTExMDEsNTExMDIsNTExMDMsNTExMDYsNTExMTEsNTExMTIsNTExMTMsNTExMTQsNTExMTUsNTExMTgsNTExMTksNTExMjEsNTExMjIsNTExMjMsNTExMjUsNTExMjYsNTExMjcsNTExMjgsNTExMjksNTExMzAsNTExMzEsNTExMzQsNTExMzgsNTExMzksNTExNDAsNTExNDEsNTExNDIsNTExNDMsNTExNDYsNTExNDcsNTExNDksNTExNTEsNTExNTMsNTExNTQsNTExNTUsNTExNTYsNTExNTcsNTExNTgsNTExNTksNTExNjEsNTExNjIsNTExNjMsNTExNjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTExNjYsNTExNjcsNTExNjgsNTExNjksNTExNzAsNTExNzEsNTExNzMsNTExNzQsNTExNzUsNTExNzcsNTExNzgsNTExNzksNTExODEsNTExODIsNTExODMsNTExODQsNTExODUsNTExODYsNTExODcsNTExODgsNTExODksNTExOTAsNTExOTEsNTExOTIsNTExOTMsNTExOTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTExOTUsNTExOTYsNTExOTcsNTExOTgsNTExOTksNTEyMDIsNTEyMDMsNTEyMDUsNTEyMDYsNTEyMDcsNTEyMDksNTEyMTEsNTEyMTIsNTEyMTMsNTEyMTQsNTEyMTUsNTEyMTgsNTEyMjAsNTEyMjMsNTEyMjQsNTEyMjUsNTEyMjYsNTEyMjcsNTEyMzAsNTEyMzEsNTEyMzMsNTEyMzQsNTEyMzUsNTEyMzcsNTEyMzgsNTEyMzksNTEyNDAsNTEyNDEsNTEyNDIsNTEyNDMsNTEyNDYsNTEyNDgsNTEyNTAsNTEyNTEsNTEyNTIsNTEyNTMsNTEyNTQsNTEyNTUsNTEyNTcsNTEyNTgsNTEyNTksNTEyNjEsNTEyNjIsNTEyNjMsNTEyNjUsNTEyNjYsNTEyNjcsNTEyNjgsNTEyNjksNTEyNzAsNTEyNzEsNTEyNzQsNTEyNzUsNTEyNzgsNTEyNzksNTEyODAsNTEyODEsNTEyODIsNTEyODMsNTEyODUsNTEyODYsNTEyODcsNTEyODgsNTEyODksNTEyOTAsNTEyOTEsNTEyOTIsNTEyOTMsNTEyOTQsNTEyOTUsNTEyOTYsNTEyOTcsNTEyOTgsNTEyOTksNTEzMDAsNTEzMDEsNTEzMDIsNTEzMDMsNTEzMDQsNTEzMDUsNTEzMDYsNTEzMDcsNTEzMDgsNTEzMDksNTEzMTAsNTEzMTEsNTEzMTQsNTEzMTUsNTEzMTcsNTEzMTgsNTEzMTksNTEzMjEsNTEzMjMsNTEzMjQsNTEzMjUsNTEzMjYsNTEzMjcsNTEzMzAsNTEzMzIsNTEzMzYsNTEzMzcsNTEzMzgsNTEzNDIsNTEzNDMsNTEzNDQsNTEzNDUsNTEzNDYsNTEzNDcsNTEzNDksNTEzNTAsNTEzNTEsNTEzNTIsNTEzNTMsNTEzNTQsNTEzNTUsNTEzNTYsNTEzNTgsNTEzNjAsNTEzNjIsNTEzNjMsNTEzNjQsNTEzNjUsNTEzNjYsNTEzNjcsNTEzNjksNTEzNzAsNTEzNzEsNTEzNzIsNTEzNzMsNTEzNzQsNTEzNzUsNTEzNzYsNTEzNzcsNTEzNzgsNTEzNzksNTEzODAsNTEzODEsNTEzODIsNTEzODMsNTEzODQsNTEzODUsNTEzODYsNTEzODcsNTEzOTAsNTEzOTEsNTEzOTIsNTEzOTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTEzOTQsNTEzOTUsNTEzOTcsNTEzOTgsNTEzOTksNTE0MDEsNTE0MDIsNTE0MDMsNTE0MDUsNTE0MDYsNTE0MDcsNTE0MDgsNTE0MDksNTE0MTAsNTE0MTEsNTE0MTQsNTE0MTYsNTE0MTgsNTE0MTksNTE0MjAsNTE0MjEsNTE0MjIsNTE0MjMsNTE0MjYsNTE0MjcsNTE0MjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE0MzAsNTE0MzEsNTE0MzIsNTE0MzMsNTE0MzQsNTE0MzUsNTE0MzYsNTE0MzcsNTE0MzgsNTE0MzksNTE0NDAsNTE0NDEsNTE0NDIsNTE0NDMsNTE0NDQsNTE0NDYsNTE0NDcsNTE0NDgsNTE0NDksNTE0NTAsNTE0NTEsNTE0NTQsNTE0NTUsNTE0NTcsNTE0NTgsNTE0NTksNTE0NjMsNTE0NjQsNTE0NjUsNTE0NjYsNTE0NjcsNTE0NzAsMTIyODgsMTIyODksMTIyOTAsMTgzLDgyMjksODIzMCwxNjgsMTIyOTEsMTczLDgyMTMsODc0MSw2NTM0MCw4NzY0LDgyMTYsODIxNyw4MjIwLDgyMjEsMTIzMDgsMTIzMDksMTIyOTYsMTIyOTcsMTIyOTgsMTIyOTksMTIzMDAsMTIzMDEsMTIzMDIsMTIzMDMsMTIzMDQsMTIzMDUsMTc3LDIxNSwyNDcsODgwMCw4ODA0LDg4MDUsODczNCw4NzU2LDE3Niw4MjQyLDgyNDMsODQ1MSw4NDkxLDY1NTA0LDY1NTA1LDY1NTA5LDk3OTQsOTc5Miw4NzM2LDg4NjksODk3OCw4NzA2LDg3MTEsODgwMSw4Nzg2LDE2Nyw4MjUxLDk3MzQsOTczMyw5Njc1LDk2NzksOTY3OCw5NjcxLDk2NzAsOTYzMyw5NjMyLDk2NTEsOTY1MCw5NjYxLDk2NjAsODU5NCw4NTkyLDg1OTMsODU5NSw4NTk2LDEyMzA3LDg4MTAsODgxMSw4NzMwLDg3NjUsODczMyw4NzU3LDg3NDcsODc0OCw4NzEyLDg3MTUsODgzOCw4ODM5LDg4MzQsODgzNSw4NzQ2LDg3NDUsODc0Myw4NzQ0LDY1NTA2LDUxNDcyLDUxNDc0LDUxNDc1LDUxNDc2LDUxNDc3LDUxNDc4LDUxNDc5LDUxNDgxLDUxNDgyLDUxNDgzLDUxNDg0LDUxNDg1LDUxNDg2LDUxNDg3LDUxNDg4LDUxNDg5LDUxNDkwLDUxNDkxLDUxNDkyLDUxNDkzLDUxNDk0LDUxNDk1LDUxNDk2LDUxNDk3LDUxNDk4LDUxNDk5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNTAxLDUxNTAyLDUxNTAzLDUxNTA0LDUxNTA1LDUxNTA2LDUxNTA3LDUxNTA5LDUxNTEwLDUxNTExLDUxNTEyLDUxNTEzLDUxNTE0LDUxNTE1LDUxNTE2LDUxNTE3LDUxNTE4LDUxNTE5LDUxNTIwLDUxNTIxLDUxNTIyLDUxNTIzLDUxNTI0LDUxNTI1LDUxNTI2LDUxNTI3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNTI4LDUxNTI5LDUxNTMwLDUxNTMxLDUxNTMyLDUxNTMzLDUxNTM0LDUxNTM1LDUxNTM4LDUxNTM5LDUxNTQxLDUxNTQyLDUxNTQzLDUxNTQ1LDUxNTQ2LDUxNTQ3LDUxNTQ4LDUxNTQ5LDUxNTUwLDUxNTUxLDUxNTU0LDUxNTU2LDUxNTU3LDUxNTU4LDUxNTU5LDUxNTYwLDUxNTYxLDUxNTYyLDUxNTYzLDUxNTY1LDUxNTY2LDUxNTY3LDg2NTgsODY2MCw4NzA0LDg3MDcsMTgwLDY1Mzc0LDcxMSw3MjgsNzMzLDczMCw3MjksMTg0LDczMSwxNjEsMTkxLDcyMCw4NzUwLDg3MjEsODcxOSwxNjQsODQ1Nyw4MjQwLDk2NjUsOTY2NCw5NjU1LDk2NTQsOTgyOCw5ODI0LDk4MjUsOTgyOSw5ODMxLDk4MjcsODg1Nyw5NjcyLDk2MzUsOTY4MCw5NjgxLDk2MTgsOTYzNiw5NjM3LDk2NDAsOTYzOSw5NjM4LDk2NDEsOTgzMiw5NzQzLDk3NDIsOTc1Niw5NzU4LDE4Miw4MjI0LDgyMjUsODU5Nyw4NTk5LDg2MDEsODU5OCw4NjAwLDk4MzcsOTgzMyw5ODM0LDk4MzYsMTI5MjcsMTI4MjgsODQ3MCwxMzI1NSw4NDgyLDEzMjUwLDEzMjcyLDg0ODEsODM2NCwxNzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNTY5LDUxNTcwLDUxNTcxLDUxNTczLDUxNTc0LDUxNTc1LDUxNTc2LDUxNTc3LDUxNTc4LDUxNTc5LDUxNTgxLDUxNTgyLDUxNTgzLDUxNTg0LDUxNTg1LDUxNTg2LDUxNTg3LDUxNTg4LDUxNTg5LDUxNTkwLDUxNTkxLDUxNTk0LDUxNTk1LDUxNTk3LDUxNTk4LDUxNTk5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNjAxLDUxNjAyLDUxNjAzLDUxNjA0LDUxNjA1LDUxNjA2LDUxNjA3LDUxNjEwLDUxNjEyLDUxNjE0LDUxNjE1LDUxNjE2LDUxNjE3LDUxNjE4LDUxNjE5LDUxNjIwLDUxNjIxLDUxNjIyLDUxNjIzLDUxNjI0LDUxNjI1LDUxNjI2LDUxNjI3LDUxNjI4LDUxNjI5LDUxNjMwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNjMxLDUxNjMyLDUxNjMzLDUxNjM0LDUxNjM1LDUxNjM2LDUxNjM3LDUxNjM4LDUxNjM5LDUxNjQwLDUxNjQxLDUxNjQyLDUxNjQzLDUxNjQ0LDUxNjQ1LDUxNjQ2LDUxNjQ3LDUxNjUwLDUxNjUxLDUxNjUzLDUxNjU0LDUxNjU3LDUxNjU5LDUxNjYwLDUxNjYxLDUxNjYyLDUxNjYzLDUxNjY2LDUxNjY4LDUxNjcxLDUxNjcyLDUxNjc1LDY1MjgxLDY1MjgyLDY1MjgzLDY1Mjg0LDY1Mjg1LDY1Mjg2LDY1Mjg3LDY1Mjg4LDY1Mjg5LDY1MjkwLDY1MjkxLDY1MjkyLDY1MjkzLDY1Mjk0LDY1Mjk1LDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LDY1MzA2LDY1MzA3LDY1MzA4LDY1MzA5LDY1MzEwLDY1MzExLDY1MzEyLDY1MzEzLDY1MzE0LDY1MzE1LDY1MzE2LDY1MzE3LDY1MzE4LDY1MzE5LDY1MzIwLDY1MzIxLDY1MzIyLDY1MzIzLDY1MzI0LDY1MzI1LDY1MzI2LDY1MzI3LDY1MzI4LDY1MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LDY1MzM5LDY1NTEwLDY1MzQxLDY1MzQyLDY1MzQzLDY1MzQ0LDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1MzQ4LDY1MzQ5LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1MzU0LDY1MzU1LDY1MzU2LDY1MzU3LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5LDY1MzcwLDY1MzcxLDY1MzcyLDY1MzczLDY1NTA3LDUxNjc4LDUxNjc5LDUxNjgxLDUxNjgzLDUxNjg1LDUxNjg2LDUxNjg4LDUxNjg5LDUxNjkwLDUxNjkxLDUxNjk0LDUxNjk4LDUxNjk5LDUxNzAwLDUxNzAxLDUxNzAyLDUxNzAzLDUxNzA2LDUxNzA3LDUxNzA5LDUxNzEwLDUxNzExLDUxNzEzLDUxNzE0LDUxNzE1LDUxNzE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNzE3LDUxNzE4LDUxNzE5LDUxNzIyLDUxNzI2LDUxNzI3LDUxNzI4LDUxNzI5LDUxNzMwLDUxNzMxLDUxNzMzLDUxNzM0LDUxNzM1LDUxNzM3LDUxNzM4LDUxNzM5LDUxNzQwLDUxNzQxLDUxNzQyLDUxNzQzLDUxNzQ0LDUxNzQ1LDUxNzQ2LDUxNzQ3LDUxNzQ4LDUxNzQ5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNzUwLDUxNzUxLDUxNzUyLDUxNzU0LDUxNzU1LDUxNzU2LDUxNzU3LDUxNzU4LDUxNzU5LDUxNzYwLDUxNzYxLDUxNzYyLDUxNzYzLDUxNzY0LDUxNzY1LDUxNzY2LDUxNzY3LDUxNzY4LDUxNzY5LDUxNzcwLDUxNzcxLDUxNzcyLDUxNzczLDUxNzc0LDUxNzc1LDUxNzc2LDUxNzc3LDUxNzc4LDUxNzc5LDUxNzgwLDUxNzgxLDUxNzgyLDEyNTkzLDEyNTk0LDEyNTk1LDEyNTk2LDEyNTk3LDEyNTk4LDEyNTk5LDEyNjAwLDEyNjAxLDEyNjAyLDEyNjAzLDEyNjA0LDEyNjA1LDEyNjA2LDEyNjA3LDEyNjA4LDEyNjA5LDEyNjEwLDEyNjExLDEyNjEyLDEyNjEzLDEyNjE0LDEyNjE1LDEyNjE2LDEyNjE3LDEyNjE4LDEyNjE5LDEyNjIwLDEyNjIxLDEyNjIyLDEyNjIzLDEyNjI0LDEyNjI1LDEyNjI2LDEyNjI3LDEyNjI4LDEyNjI5LDEyNjMwLDEyNjMxLDEyNjMyLDEyNjMzLDEyNjM0LDEyNjM1LDEyNjM2LDEyNjM3LDEyNjM4LDEyNjM5LDEyNjQwLDEyNjQxLDEyNjQyLDEyNjQzLDEyNjQ0LDEyNjQ1LDEyNjQ2LDEyNjQ3LDEyNjQ4LDEyNjQ5LDEyNjUwLDEyNjUxLDEyNjUyLDEyNjUzLDEyNjU0LDEyNjU1LDEyNjU2LDEyNjU3LDEyNjU4LDEyNjU5LDEyNjYwLDEyNjYxLDEyNjYyLDEyNjYzLDEyNjY0LDEyNjY1LDEyNjY2LDEyNjY3LDEyNjY4LDEyNjY5LDEyNjcwLDEyNjcxLDEyNjcyLDEyNjczLDEyNjc0LDEyNjc1LDEyNjc2LDEyNjc3LDEyNjc4LDEyNjc5LDEyNjgwLDEyNjgxLDEyNjgyLDEyNjgzLDEyNjg0LDEyNjg1LDEyNjg2LDUxNzgzLDUxNzg0LDUxNzg1LDUxNzg2LDUxNzg3LDUxNzkwLDUxNzkxLDUxNzkzLDUxNzk0LDUxNzk1LDUxNzk3LDUxNzk4LDUxNzk5LDUxODAwLDUxODAxLDUxODAyLDUxODAzLDUxODA2LDUxODEwLDUxODExLDUxODEyLDUxODEzLDUxODE0LDUxODE1LDUxODE3LDUxODE4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxODE5LDUxODIwLDUxODIxLDUxODIyLDUxODIzLDUxODI0LDUxODI1LDUxODI2LDUxODI3LDUxODI4LDUxODI5LDUxODMwLDUxODMxLDUxODMyLDUxODMzLDUxODM0LDUxODM1LDUxODM2LDUxODM4LDUxODM5LDUxODQwLDUxODQxLDUxODQyLDUxODQzLDUxODQ1LDUxODQ2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxODQ3LDUxODQ4LDUxODQ5LDUxODUwLDUxODUxLDUxODUyLDUxODUzLDUxODU0LDUxODU1LDUxODU2LDUxODU3LDUxODU4LDUxODU5LDUxODYwLDUxODYxLDUxODYyLDUxODYzLDUxODY1LDUxODY2LDUxODY3LDUxODY4LDUxODY5LDUxODcwLDUxODcxLDUxODcyLDUxODczLDUxODc0LDUxODc1LDUxODc2LDUxODc3LDUxODc4LDUxODc5LDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE4ODAsNTE4ODEsNTE4ODIsNTE4ODMsNTE4ODQsNTE4ODUsNTE4ODYsNTE4ODcsNTE4ODgsNTE4ODksNTE4OTAsNTE4OTEsNTE4OTIsNTE4OTMsNTE4OTQsNTE4OTUsNTE4OTYsNTE4OTcsNTE4OTgsNTE4OTksNTE5MDIsNTE5MDMsNTE5MDUsNTE5MDYsNTE5MDcsNTE5MDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE5MTAsNTE5MTEsNTE5MTIsNTE5MTMsNTE5MTQsNTE5MTUsNTE5MTgsNTE5MjAsNTE5MjIsNTE5MjQsNTE5MjUsNTE5MjYsNTE5MjcsNTE5MzAsNTE5MzEsNTE5MzIsNTE5MzMsNTE5MzQsNTE5MzUsNTE5MzcsNTE5MzgsNTE5MzksNTE5NDAsNTE5NDEsNTE5NDIsNTE5NDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE5NDQsNTE5NDUsNTE5NDYsNTE5NDcsNTE5NDksNTE5NTAsNTE5NTEsNTE5NTIsNTE5NTMsNTE5NTQsNTE5NTUsNTE5NTcsNTE5NTgsNTE5NTksNTE5NjAsNTE5NjEsNTE5NjIsNTE5NjMsNTE5NjQsNTE5NjUsNTE5NjYsNTE5NjcsNTE5NjgsNTE5NjksNTE5NzAsNTE5NzEsNTE5NzIsNTE5NzMsNTE5NzQsNTE5NzUsNTE5NzcsNTE5NzgsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDk2LDk0OTIsOTUwMCw5NTE2LDk1MDgsOTUyNCw5NTMyLDk0NzMsOTQ3NSw5NDg3LDk0OTEsOTQ5OSw5NDk1LDk1MDcsOTUyMyw5NTE1LDk1MzEsOTU0Nyw5NTA0LDk1MTksOTUxMiw5NTI3LDk1MzUsOTUwMSw5NTIwLDk1MDksOTUyOCw5NTM4LDk0OTAsOTQ4OSw5NDk4LDk0OTcsOTQ5NCw5NDkzLDk0ODYsOTQ4NSw5NTAyLDk1MDMsOTUwNSw5NTA2LDk1MTAsOTUxMSw5NTEzLDk1MTQsOTUxNyw5NTE4LDk1MjEsOTUyMiw5NTI1LDk1MjYsOTUyOSw5NTMwLDk1MzMsOTUzNCw5NTM2LDk1MzcsOTUzOSw5NTQwLDk1NDEsOTU0Miw5NTQzLDk1NDQsOTU0NSw5NTQ2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTk3OSw1MTk4MCw1MTk4MSw1MTk4Miw1MTk4Myw1MTk4NSw1MTk4Niw1MTk4Nyw1MTk4OSw1MTk5MCw1MTk5MSw1MTk5Myw1MTk5NCw1MTk5NSw1MTk5Niw1MTk5Nyw1MTk5OCw1MTk5OSw1MjAwMiw1MjAwMyw1MjAwNCw1MjAwNSw1MjAwNiw1MjAwNyw1MjAwOCw1MjAwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjAxMCw1MjAxMSw1MjAxMiw1MjAxMyw1MjAxNCw1MjAxNSw1MjAxNiw1MjAxNyw1MjAxOCw1MjAxOSw1MjAyMCw1MjAyMSw1MjAyMiw1MjAyMyw1MjAyNCw1MjAyNSw1MjAyNiw1MjAyNyw1MjAyOCw1MjAyOSw1MjAzMCw1MjAzMSw1MjAzMiw1MjAzNCw1MjAzNSw1MjAzNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjAzNyw1MjAzOCw1MjAzOSw1MjA0Miw1MjA0Myw1MjA0NSw1MjA0Niw1MjA0Nyw1MjA0OSw1MjA1MCw1MjA1MSw1MjA1Miw1MjA1Myw1MjA1NCw1MjA1NSw1MjA1OCw1MjA1OSw1MjA2MCw1MjA2Miw1MjA2Myw1MjA2NCw1MjA2NSw1MjA2Niw1MjA2Nyw1MjA2OSw1MjA3MCw1MjA3MSw1MjA3Miw1MjA3Myw1MjA3NCw1MjA3NSw1MjA3NiwxMzIwNSwxMzIwNiwxMzIwNyw4NDY3LDEzMjA4LDEzMjUyLDEzMjE5LDEzMjIwLDEzMjIxLDEzMjIyLDEzMjA5LDEzMjEwLDEzMjExLDEzMjEyLDEzMjEzLDEzMjE0LDEzMjE1LDEzMjE2LDEzMjE3LDEzMjE4LDEzMjU4LDEzMTk3LDEzMTk4LDEzMTk5LDEzMjYzLDEzMTkyLDEzMTkzLDEzMjU2LDEzMjIzLDEzMjI0LDEzMjMyLDEzMjMzLDEzMjM0LDEzMjM1LDEzMjM2LDEzMjM3LDEzMjM4LDEzMjM5LDEzMjQwLDEzMjQxLDEzMTg0LDEzMTg1LDEzMTg2LDEzMTg3LDEzMTg4LDEzMjQyLDEzMjQzLDEzMjQ0LDEzMjQ1LDEzMjQ2LDEzMjQ3LDEzMjAwLDEzMjAxLDEzMjAyLDEzMjAzLDEzMjA0LDg0ODYsMTMyNDgsMTMyNDksMTMxOTQsMTMxOTUsMTMxOTYsMTMyNzAsMTMyNTMsMTMyMjksMTMyMzAsMTMyMzEsMTMyNzUsMTMyMjUsMTMyMjYsMTMyMjcsMTMyMjgsMTMyNzcsMTMyNjQsMTMyNjcsMTMyNTEsMTMyNTcsMTMyNzYsMTMyNTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIwNzcsNTIwNzgsNTIwNzksNTIwODAsNTIwODEsNTIwODIsNTIwODMsNTIwODQsNTIwODUsNTIwODYsNTIwODcsNTIwOTAsNTIwOTEsNTIwOTIsNTIwOTMsNTIwOTQsNTIwOTUsNTIwOTYsNTIwOTcsNTIwOTgsNTIwOTksNTIxMDAsNTIxMDEsNTIxMDIsNTIxMDMsNTIxMDQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIxMDUsNTIxMDYsNTIxMDcsNTIxMDgsNTIxMDksNTIxMTAsNTIxMTEsNTIxMTIsNTIxMTMsNTIxMTQsNTIxMTUsNTIxMTYsNTIxMTcsNTIxMTgsNTIxMTksNTIxMjAsNTIxMjEsNTIxMjIsNTIxMjMsNTIxMjUsNTIxMjYsNTIxMjcsNTIxMjgsNTIxMjksNTIxMzAsNTIxMzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIxMzIsNTIxMzMsNTIxMzQsNTIxMzUsNTIxMzYsNTIxMzcsNTIxMzgsNTIxMzksNTIxNDAsNTIxNDEsNTIxNDIsNTIxNDMsNTIxNDQsNTIxNDUsNTIxNDYsNTIxNDcsNTIxNDgsNTIxNDksNTIxNTAsNTIxNTEsNTIxNTMsNTIxNTQsNTIxNTUsNTIxNTYsNTIxNTcsNTIxNTgsNTIxNTksNTIxNjAsNTIxNjEsNTIxNjIsNTIxNjMsNTIxNjQsMTk4LDIwOCwxNzAsMjk0LG51bGwsMzA2LG51bGwsMzE5LDMyMSwyMTYsMzM4LDE4NiwyMjIsMzU4LDMzMCxudWxsLDEyODk2LDEyODk3LDEyODk4LDEyODk5LDEyOTAwLDEyOTAxLDEyOTAyLDEyOTAzLDEyOTA0LDEyOTA1LDEyOTA2LDEyOTA3LDEyOTA4LDEyOTA5LDEyOTEwLDEyOTExLDEyOTEyLDEyOTEzLDEyOTE0LDEyOTE1LDEyOTE2LDEyOTE3LDEyOTE4LDEyOTE5LDEyOTIwLDEyOTIxLDEyOTIyLDEyOTIzLDk0MjQsOTQyNSw5NDI2LDk0MjcsOTQyOCw5NDI5LDk0MzAsOTQzMSw5NDMyLDk0MzMsOTQzNCw5NDM1LDk0MzYsOTQzNyw5NDM4LDk0MzksOTQ0MCw5NDQxLDk0NDIsOTQ0Myw5NDQ0LDk0NDUsOTQ0Niw5NDQ3LDk0NDgsOTQ0OSw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDkzMjIsOTMyMyw5MzI0LDkzMjUsOTMyNiwxODksODUzMSw4NTMyLDE4OCwxOTAsODUzOSw4NTQwLDg1NDEsODU0Miw1MjE2NSw1MjE2Niw1MjE2Nyw1MjE2OCw1MjE2OSw1MjE3MCw1MjE3MSw1MjE3Miw1MjE3Myw1MjE3NCw1MjE3NSw1MjE3Niw1MjE3Nyw1MjE3OCw1MjE3OSw1MjE4MSw1MjE4Miw1MjE4Myw1MjE4NCw1MjE4NSw1MjE4Niw1MjE4Nyw1MjE4OCw1MjE4OSw1MjE5MCw1MjE5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjE5Miw1MjE5Myw1MjE5NCw1MjE5NSw1MjE5Nyw1MjE5OCw1MjIwMCw1MjIwMiw1MjIwMyw1MjIwNCw1MjIwNSw1MjIwNiw1MjIwNyw1MjIwOCw1MjIwOSw1MjIxMCw1MjIxMSw1MjIxMiw1MjIxMyw1MjIxNCw1MjIxNSw1MjIxNiw1MjIxNyw1MjIxOCw1MjIxOSw1MjIyMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjIyMSw1MjIyMiw1MjIyMyw1MjIyNCw1MjIyNSw1MjIyNiw1MjIyNyw1MjIyOCw1MjIyOSw1MjIzMCw1MjIzMSw1MjIzMiw1MjIzMyw1MjIzNCw1MjIzNSw1MjIzOCw1MjIzOSw1MjI0MSw1MjI0Miw1MjI0Myw1MjI0NSw1MjI0Niw1MjI0Nyw1MjI0OCw1MjI0OSw1MjI1MCw1MjI1MSw1MjI1NCw1MjI1NSw1MjI1Niw1MjI1OSw1MjI2MCwyMzAsMjczLDI0MCwyOTUsMzA1LDMwNywzMTIsMzIwLDMyMiwyNDgsMzM5LDIyMywyNTQsMzU5LDMzMSwzMjksMTI4MDAsMTI4MDEsMTI4MDIsMTI4MDMsMTI4MDQsMTI4MDUsMTI4MDYsMTI4MDcsMTI4MDgsMTI4MDksMTI4MTAsMTI4MTEsMTI4MTIsMTI4MTMsMTI4MTQsMTI4MTUsMTI4MTYsMTI4MTcsMTI4MTgsMTI4MTksMTI4MjAsMTI4MjEsMTI4MjIsMTI4MjMsMTI4MjQsMTI4MjUsMTI4MjYsMTI4MjcsOTM3Miw5MzczLDkzNzQsOTM3NSw5Mzc2LDkzNzcsOTM3OCw5Mzc5LDkzODAsOTM4MSw5MzgyLDkzODMsOTM4NCw5Mzg1LDkzODYsOTM4Nyw5Mzg4LDkzODksOTM5MCw5MzkxLDkzOTIsOTM5Myw5Mzk0LDkzOTUsOTM5Niw5Mzk3LDkzMzIsOTMzMyw5MzM0LDkzMzUsOTMzNiw5MzM3LDkzMzgsOTMzOSw5MzQwLDkzNDEsOTM0Miw5MzQzLDkzNDQsOTM0NSw5MzQ2LDE4NSwxNzgsMTc5LDgzMDgsODMxOSw4MzIxLDgzMjIsODMyMyw4MzI0LDUyMjYxLDUyMjYyLDUyMjY2LDUyMjY3LDUyMjY5LDUyMjcxLDUyMjczLDUyMjc0LDUyMjc1LDUyMjc2LDUyMjc3LDUyMjc4LDUyMjc5LDUyMjgyLDUyMjg3LDUyMjg4LDUyMjg5LDUyMjkwLDUyMjkxLDUyMjk0LDUyMjk1LDUyMjk3LDUyMjk4LDUyMjk5LDUyMzAxLDUyMzAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMzAzLDUyMzA0LDUyMzA1LDUyMzA2LDUyMzA3LDUyMzEwLDUyMzE0LDUyMzE1LDUyMzE2LDUyMzE3LDUyMzE4LDUyMzE5LDUyMzIxLDUyMzIyLDUyMzIzLDUyMzI1LDUyMzI3LDUyMzI5LDUyMzMwLDUyMzMxLDUyMzMyLDUyMzMzLDUyMzM0LDUyMzM1LDUyMzM3LDUyMzM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMzM5LDUyMzQwLDUyMzQyLDUyMzQzLDUyMzQ0LDUyMzQ1LDUyMzQ2LDUyMzQ3LDUyMzQ4LDUyMzQ5LDUyMzUwLDUyMzUxLDUyMzUyLDUyMzUzLDUyMzU0LDUyMzU1LDUyMzU2LDUyMzU3LDUyMzU4LDUyMzU5LDUyMzYwLDUyMzYxLDUyMzYyLDUyMzYzLDUyMzY0LDUyMzY1LDUyMzY2LDUyMzY3LDUyMzY4LDUyMzY5LDUyMzcwLDUyMzcxLDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjM3Miw1MjM3Myw1MjM3NCw1MjM3NSw1MjM3OCw1MjM3OSw1MjM4MSw1MjM4Miw1MjM4Myw1MjM4NSw1MjM4Niw1MjM4Nyw1MjM4OCw1MjM4OSw1MjM5MCw1MjM5MSw1MjM5NCw1MjM5OCw1MjM5OSw1MjQwMCw1MjQwMSw1MjQwMiw1MjQwMyw1MjQwNiw1MjQwNyw1MjQwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjQxMCw1MjQxMSw1MjQxMyw1MjQxNCw1MjQxNSw1MjQxNiw1MjQxNyw1MjQxOCw1MjQxOSw1MjQyMiw1MjQyNCw1MjQyNiw1MjQyNyw1MjQyOCw1MjQyOSw1MjQzMCw1MjQzMSw1MjQzMyw1MjQzNCw1MjQzNSw1MjQzNyw1MjQzOCw1MjQzOSw1MjQ0MCw1MjQ0MSw1MjQ0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjQ0Myw1MjQ0NCw1MjQ0NSw1MjQ0Niw1MjQ0Nyw1MjQ0OCw1MjQ0OSw1MjQ1MCw1MjQ1MSw1MjQ1Myw1MjQ1NCw1MjQ1NSw1MjQ1Niw1MjQ1Nyw1MjQ1OCw1MjQ1OSw1MjQ2MSw1MjQ2Miw1MjQ2Myw1MjQ2NSw1MjQ2Niw1MjQ2Nyw1MjQ2OCw1MjQ2OSw1MjQ3MCw1MjQ3MSw1MjQ3Miw1MjQ3Myw1MjQ3NCw1MjQ3NSw1MjQ3Niw1MjQ3NywxMjQ0OSwxMjQ1MCwxMjQ1MSwxMjQ1MiwxMjQ1MywxMjQ1NCwxMjQ1NSwxMjQ1NiwxMjQ1NywxMjQ1OCwxMjQ1OSwxMjQ2MCwxMjQ2MSwxMjQ2MiwxMjQ2MywxMjQ2NCwxMjQ2NSwxMjQ2NiwxMjQ2NywxMjQ2OCwxMjQ2OSwxMjQ3MCwxMjQ3MSwxMjQ3MiwxMjQ3MywxMjQ3NCwxMjQ3NSwxMjQ3NiwxMjQ3NywxMjQ3OCwxMjQ3OSwxMjQ4MCwxMjQ4MSwxMjQ4MiwxMjQ4MywxMjQ4NCwxMjQ4NSwxMjQ4NiwxMjQ4NywxMjQ4OCwxMjQ4OSwxMjQ5MCwxMjQ5MSwxMjQ5MiwxMjQ5MywxMjQ5NCwxMjQ5NSwxMjQ5NiwxMjQ5NywxMjQ5OCwxMjQ5OSwxMjUwMCwxMjUwMSwxMjUwMiwxMjUwMywxMjUwNCwxMjUwNSwxMjUwNiwxMjUwNywxMjUwOCwxMjUwOSwxMjUxMCwxMjUxMSwxMjUxMiwxMjUxMywxMjUxNCwxMjUxNSwxMjUxNiwxMjUxNywxMjUxOCwxMjUxOSwxMjUyMCwxMjUyMSwxMjUyMiwxMjUyMywxMjUyNCwxMjUyNSwxMjUyNiwxMjUyNywxMjUyOCwxMjUyOSwxMjUzMCwxMjUzMSwxMjUzMiwxMjUzMywxMjUzNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI0NzgsNTI0NzksNTI0ODAsNTI0ODIsNTI0ODMsNTI0ODQsNTI0ODUsNTI0ODYsNTI0ODcsNTI0OTAsNTI0OTEsNTI0OTMsNTI0OTQsNTI0OTUsNTI0OTcsNTI0OTgsNTI0OTksNTI1MDAsNTI1MDEsNTI1MDIsNTI1MDMsNTI1MDYsNTI1MDgsNTI1MTAsNTI1MTEsNTI1MTIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI1MTMsNTI1MTQsNTI1MTUsNTI1MTcsNTI1MTgsNTI1MTksNTI1MjEsNTI1MjIsNTI1MjMsNTI1MjUsNTI1MjYsNTI1MjcsNTI1MjgsNTI1MjksNTI1MzAsNTI1MzEsNTI1MzIsNTI1MzMsNTI1MzQsNTI1MzUsNTI1MzYsNTI1MzgsNTI1MzksNTI1NDAsNTI1NDEsNTI1NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI1NDMsNTI1NDQsNTI1NDUsNTI1NDYsNTI1NDcsNTI1NDgsNTI1NDksNTI1NTAsNTI1NTEsNTI1NTIsNTI1NTMsNTI1NTQsNTI1NTUsNTI1NTYsNTI1NTcsNTI1NTgsNTI1NTksNTI1NjAsNTI1NjEsNTI1NjIsNTI1NjMsNTI1NjQsNTI1NjUsNTI1NjYsNTI1NjcsNTI1NjgsNTI1NjksNTI1NzAsNTI1NzEsNTI1NzMsNTI1NzQsNTI1NzUsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjU3Nyw1MjU3OCw1MjU3OSw1MjU4MSw1MjU4Miw1MjU4Myw1MjU4NCw1MjU4NSw1MjU4Niw1MjU4Nyw1MjU5MCw1MjU5Miw1MjU5NCw1MjU5NSw1MjU5Niw1MjU5Nyw1MjU5OCw1MjU5OSw1MjYwMSw1MjYwMiw1MjYwMyw1MjYwNCw1MjYwNSw1MjYwNiw1MjYwNyw1MjYwOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjYwOSw1MjYxMCw1MjYxMSw1MjYxMiw1MjYxMyw1MjYxNCw1MjYxNSw1MjYxNyw1MjYxOCw1MjYxOSw1MjYyMCw1MjYyMSw1MjYyMiw1MjYyMyw1MjYyNCw1MjYyNSw1MjYyNiw1MjYyNyw1MjYzMCw1MjYzMSw1MjYzMyw1MjYzNCw1MjYzNSw1MjYzNyw1MjYzOCw1MjYzOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjY0MCw1MjY0MSw1MjY0Miw1MjY0Myw1MjY0Niw1MjY0OCw1MjY1MCw1MjY1MSw1MjY1Miw1MjY1Myw1MjY1NCw1MjY1NSw1MjY1Nyw1MjY1OCw1MjY1OSw1MjY2MCw1MjY2MSw1MjY2Miw1MjY2Myw1MjY2NCw1MjY2NSw1MjY2Niw1MjY2Nyw1MjY2OCw1MjY2OSw1MjY3MCw1MjY3MSw1MjY3Miw1MjY3Myw1MjY3NCw1MjY3NSw1MjY3NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNjc4LDUyNjc5LDUyNjgwLDUyNjgxLDUyNjgyLDUyNjgzLDUyNjg1LDUyNjg2LDUyNjg3LDUyNjg5LDUyNjkwLDUyNjkxLDUyNjkyLDUyNjkzLDUyNjk0LDUyNjk1LDUyNjk2LDUyNjk3LDUyNjk4LDUyNjk5LDUyNzAwLDUyNzAxLDUyNzAyLDUyNzAzLDUyNzA0LDUyNzA1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNzA2LDUyNzA3LDUyNzA4LDUyNzA5LDUyNzEwLDUyNzExLDUyNzEzLDUyNzE0LDUyNzE1LDUyNzE3LDUyNzE4LDUyNzE5LDUyNzIxLDUyNzIyLDUyNzIzLDUyNzI0LDUyNzI1LDUyNzI2LDUyNzI3LDUyNzMwLDUyNzMyLDUyNzM0LDUyNzM1LDUyNzM2LDUyNzM3LDUyNzM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNzM5LDUyNzQxLDUyNzQyLDUyNzQzLDUyNzQ1LDUyNzQ2LDUyNzQ3LDUyNzQ5LDUyNzUwLDUyNzUxLDUyNzUyLDUyNzUzLDUyNzU0LDUyNzU1LDUyNzU3LDUyNzU4LDUyNzU5LDUyNzYwLDUyNzYyLDUyNzYzLDUyNzY0LDUyNzY1LDUyNzY2LDUyNzY3LDUyNzcwLDUyNzcxLDUyNzczLDUyNzc0LDUyNzc1LDUyNzc3LDUyNzc4LDUyNzc5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI3ODAsNTI3ODEsNTI3ODIsNTI3ODMsNTI3ODYsNTI3ODgsNTI3OTAsNTI3OTEsNTI3OTIsNTI3OTMsNTI3OTQsNTI3OTUsNTI3OTYsNTI3OTcsNTI3OTgsNTI3OTksNTI4MDAsNTI4MDEsNTI4MDIsNTI4MDMsNTI4MDQsNTI4MDUsNTI4MDYsNTI4MDcsNTI4MDgsNTI4MDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI4MTAsNTI4MTEsNTI4MTIsNTI4MTMsNTI4MTQsNTI4MTUsNTI4MTYsNTI4MTcsNTI4MTgsNTI4MTksNTI4MjAsNTI4MjEsNTI4MjIsNTI4MjMsNTI4MjYsNTI4MjcsNTI4MjksNTI4MzAsNTI4MzQsNTI4MzUsNTI4MzYsNTI4MzcsNTI4MzgsNTI4MzksNTI4NDIsNTI4NDQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI4NDYsNTI4NDcsNTI4NDgsNTI4NDksNTI4NTAsNTI4NTEsNTI4NTQsNTI4NTUsNTI4NTcsNTI4NTgsNTI4NTksNTI4NjEsNTI4NjIsNTI4NjMsNTI4NjQsNTI4NjUsNTI4NjYsNTI4NjcsNTI4NzAsNTI4NzIsNTI4NzQsNTI4NzUsNTI4NzYsNTI4NzcsNTI4NzgsNTI4NzksNTI4ODIsNTI4ODMsNTI4ODUsNTI4ODYsNTI4ODcsNTI4ODksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mjg5MCw1Mjg5MSw1Mjg5Miw1Mjg5Myw1Mjg5NCw1Mjg5NSw1Mjg5OCw1MjkwMiw1MjkwMyw1MjkwNCw1MjkwNSw1MjkwNiw1MjkwNyw1MjkxMCw1MjkxMSw1MjkxMiw1MjkxMyw1MjkxNCw1MjkxNSw1MjkxNiw1MjkxNyw1MjkxOCw1MjkxOSw1MjkyMCw1MjkyMSw1MjkyMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjkyMyw1MjkyNCw1MjkyNSw1MjkyNiw1MjkyNyw1MjkyOCw1MjkzMCw1MjkzMSw1MjkzMiw1MjkzMyw1MjkzNCw1MjkzNSw1MjkzNiw1MjkzNyw1MjkzOCw1MjkzOSw1Mjk0MCw1Mjk0MSw1Mjk0Miw1Mjk0Myw1Mjk0NCw1Mjk0NSw1Mjk0Niw1Mjk0Nyw1Mjk0OCw1Mjk0OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mjk1MCw1Mjk1MSw1Mjk1Miw1Mjk1Myw1Mjk1NCw1Mjk1NSw1Mjk1Niw1Mjk1Nyw1Mjk1OCw1Mjk1OSw1Mjk2MCw1Mjk2MSw1Mjk2Miw1Mjk2Myw1Mjk2Niw1Mjk2Nyw1Mjk2OSw1Mjk3MCw1Mjk3Myw1Mjk3NCw1Mjk3NSw1Mjk3Niw1Mjk3Nyw1Mjk3OCw1Mjk3OSw1Mjk4Miw1Mjk4Niw1Mjk4Nyw1Mjk4OCw1Mjk4OSw1Mjk5MCw1Mjk5MSw0NDAzMiw0NDAzMyw0NDAzNiw0NDAzOSw0NDA0MCw0NDA0MSw0NDA0Miw0NDA0OCw0NDA0OSw0NDA1MCw0NDA1MSw0NDA1Miw0NDA1Myw0NDA1NCw0NDA1NSw0NDA1Nyw0NDA1OCw0NDA1OSw0NDA2MCw0NDA2MSw0NDA2NCw0NDA2OCw0NDA3Niw0NDA3Nyw0NDA3OSw0NDA4MCw0NDA4MSw0NDA4OCw0NDA4OSw0NDA5Miw0NDA5Niw0NDEwNyw0NDEwOSw0NDExNiw0NDEyMCw0NDEyNCw0NDE0NCw0NDE0NSw0NDE0OCw0NDE1MSw0NDE1Miw0NDE1NCw0NDE2MCw0NDE2MSw0NDE2Myw0NDE2NCw0NDE2NSw0NDE2Niw0NDE2OSw0NDE3MCw0NDE3MSw0NDE3Miw0NDE3Niw0NDE4MCw0NDE4OCw0NDE4OSw0NDE5MSw0NDE5Miw0NDE5Myw0NDIwMCw0NDIwMSw0NDIwMiw0NDIwNCw0NDIwNyw0NDIwOCw0NDIxNiw0NDIxNyw0NDIxOSw0NDIyMCw0NDIyMSw0NDIyNSw0NDIyOCw0NDIzMiw0NDIzNiw0NDI0NSw0NDI0Nyw0NDI1Niw0NDI1Nyw0NDI2MCw0NDI2Myw0NDI2NCw0NDI2Niw0NDI2OCw0NDI3MSw0NDI3Miw0NDI3Myw0NDI3NSw0NDI3Nyw0NDI3OCw0NDI4NCw0NDI4NSw0NDI4OCw0NDI5Miw0NDI5NCw1Mjk5NCw1Mjk5NSw1Mjk5Nyw1Mjk5OCw1Mjk5OSw1MzAwMSw1MzAwMiw1MzAwMyw1MzAwNCw1MzAwNSw1MzAwNiw1MzAwNyw1MzAxMCw1MzAxMiw1MzAxNCw1MzAxNSw1MzAxNiw1MzAxNyw1MzAxOCw1MzAxOSw1MzAyMSw1MzAyMiw1MzAyMyw1MzAyNSw1MzAyNiw1MzAyNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzAyOSw1MzAzMCw1MzAzMSw1MzAzMiw1MzAzMyw1MzAzNCw1MzAzNSw1MzAzOCw1MzA0Miw1MzA0Myw1MzA0NCw1MzA0NSw1MzA0Niw1MzA0Nyw1MzA0OSw1MzA1MCw1MzA1MSw1MzA1Miw1MzA1Myw1MzA1NCw1MzA1NSw1MzA1Niw1MzA1Nyw1MzA1OCw1MzA1OSw1MzA2MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzA2MSw1MzA2Miw1MzA2Myw1MzA2NCw1MzA2NSw1MzA2Niw1MzA2Nyw1MzA2OCw1MzA2OSw1MzA3MCw1MzA3MSw1MzA3Miw1MzA3Myw1MzA3NCw1MzA3NSw1MzA3OCw1MzA3OSw1MzA4MSw1MzA4Miw1MzA4Myw1MzA4NSw1MzA4Niw1MzA4Nyw1MzA4OCw1MzA4OSw1MzA5MCw1MzA5MSw1MzA5NCw1MzA5Niw1MzA5OCw1MzA5OSw1MzEwMCw0NDMwMCw0NDMwMSw0NDMwMyw0NDMwNSw0NDMxMiw0NDMxNiw0NDMyMCw0NDMyOSw0NDMzMiw0NDMzMyw0NDM0MCw0NDM0MSw0NDM0NCw0NDM0OCw0NDM1Niw0NDM1Nyw0NDM1OSw0NDM2MSw0NDM2OCw0NDM3Miw0NDM3Niw0NDM4NSw0NDM4Nyw0NDM5Niw0NDM5Nyw0NDQwMCw0NDQwMyw0NDQwNCw0NDQwNSw0NDQwNiw0NDQxMSw0NDQxMiw0NDQxMyw0NDQxNSw0NDQxNyw0NDQxOCw0NDQyNCw0NDQyNSw0NDQyOCw0NDQzMiw0NDQ0NCw0NDQ0NSw0NDQ1Miw0NDQ3MSw0NDQ4MCw0NDQ4MSw0NDQ4NCw0NDQ4OCw0NDQ5Niw0NDQ5Nyw0NDQ5OSw0NDUwOCw0NDUxMiw0NDUxNiw0NDUzNiw0NDUzNyw0NDU0MCw0NDU0Myw0NDU0NCw0NDU0NSw0NDU1Miw0NDU1Myw0NDU1NSw0NDU1Nyw0NDU2NCw0NDU5Miw0NDU5Myw0NDU5Niw0NDU5OSw0NDYwMCw0NDYwMiw0NDYwOCw0NDYwOSw0NDYxMSw0NDYxMyw0NDYxNCw0NDYxOCw0NDYyMCw0NDYyMSw0NDYyMiw0NDYyNCw0NDYyOCw0NDYzMCw0NDYzNiw0NDYzNyw0NDYzOSw0NDY0MCw0NDY0MSw0NDY0NSw0NDY0OCw0NDY0OSw0NDY1Miw0NDY1Niw0NDY2NCw1MzEwMSw1MzEwMiw1MzEwMyw1MzEwNiw1MzEwNyw1MzEwOSw1MzExMCw1MzExMSw1MzExMyw1MzExNCw1MzExNSw1MzExNiw1MzExNyw1MzExOCw1MzExOSw1MzEyMSw1MzEyMiw1MzEyMyw1MzEyNCw1MzEyNiw1MzEyNyw1MzEyOCw1MzEyOSw1MzEzMCw1MzEzMSw1MzEzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzEzNCw1MzEzNSw1MzEzNiw1MzEzNyw1MzEzOCw1MzEzOSw1MzE0MCw1MzE0MSw1MzE0Miw1MzE0Myw1MzE0NCw1MzE0NSw1MzE0Niw1MzE0Nyw1MzE0OCw1MzE0OSw1MzE1MCw1MzE1MSw1MzE1Miw1MzE1NCw1MzE1NSw1MzE1Niw1MzE1Nyw1MzE1OCw1MzE1OSw1MzE2MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzE2Miw1MzE2Myw1MzE2NCw1MzE2NSw1MzE2Niw1MzE2Nyw1MzE2OSw1MzE3MCw1MzE3MSw1MzE3Miw1MzE3Myw1MzE3NCw1MzE3NSw1MzE3Niw1MzE3Nyw1MzE3OCw1MzE3OSw1MzE4MCw1MzE4MSw1MzE4Miw1MzE4Myw1MzE4NCw1MzE4NSw1MzE4Niw1MzE4Nyw1MzE4OSw1MzE5MCw1MzE5MSw1MzE5Miw1MzE5Myw1MzE5NCw1MzE5NSw0NDY2NSw0NDY2Nyw0NDY2OCw0NDY2OSw0NDY3Niw0NDY3Nyw0NDY4NCw0NDczMiw0NDczMyw0NDczNCw0NDczNiw0NDc0MCw0NDc0OCw0NDc0OSw0NDc1MSw0NDc1Miw0NDc1Myw0NDc2MCw0NDc2MSw0NDc2NCw0NDc3Niw0NDc3OSw0NDc4MSw0NDc4OCw0NDc5Miw0NDc5Niw0NDgwNyw0NDgwOCw0NDgxMyw0NDgxNiw0NDg0NCw0NDg0NSw0NDg0OCw0NDg1MCw0NDg1Miw0NDg2MCw0NDg2MSw0NDg2Myw0NDg2NSw0NDg2Niw0NDg2Nyw0NDg3Miw0NDg3Myw0NDg4MCw0NDg5Miw0NDg5Myw0NDkwMCw0NDkwMSw0NDkyMSw0NDkyOCw0NDkzMiw0NDkzNiw0NDk0NCw0NDk0NSw0NDk0OSw0NDk1Niw0NDk4NCw0NDk4NSw0NDk4OCw0NDk5Miw0NDk5OSw0NTAwMCw0NTAwMSw0NTAwMyw0NTAwNSw0NTAwNiw0NTAxMiw0NTAyMCw0NTAzMiw0NTAzMyw0NTA0MCw0NTA0MSw0NTA0NCw0NTA0OCw0NTA1Niw0NTA1Nyw0NTA2MCw0NTA2OCw0NTA3Miw0NTA3Niw0NTA4NCw0NTA4NSw0NTA5Niw0NTEyNCw0NTEyNSw0NTEyOCw0NTEzMCw0NTEzMiw0NTEzNCw0NTEzOSw0NTE0MCw0NTE0MSw0NTE0Myw0NTE0NSw1MzE5Niw1MzE5Nyw1MzE5OCw1MzE5OSw1MzIwMCw1MzIwMSw1MzIwMiw1MzIwMyw1MzIwNCw1MzIwNSw1MzIwNiw1MzIwNyw1MzIwOCw1MzIwOSw1MzIxMCw1MzIxMSw1MzIxMiw1MzIxMyw1MzIxNCw1MzIxNSw1MzIxOCw1MzIxOSw1MzIyMSw1MzIyMiw1MzIyMyw1MzIyNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzIyNiw1MzIyNyw1MzIyOCw1MzIyOSw1MzIzMCw1MzIzMSw1MzIzNCw1MzIzNiw1MzIzOCw1MzIzOSw1MzI0MCw1MzI0MSw1MzI0Miw1MzI0Myw1MzI0NSw1MzI0Niw1MzI0Nyw1MzI0OSw1MzI1MCw1MzI1MSw1MzI1Myw1MzI1NCw1MzI1NSw1MzI1Niw1MzI1Nyw1MzI1OCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzI1OSw1MzI2MCw1MzI2MSw1MzI2Miw1MzI2Myw1MzI2NCw1MzI2Niw1MzI2Nyw1MzI2OCw1MzI2OSw1MzI3MCw1MzI3MSw1MzI3Myw1MzI3NCw1MzI3NSw1MzI3Niw1MzI3Nyw1MzI3OCw1MzI3OSw1MzI4MCw1MzI4MSw1MzI4Miw1MzI4Myw1MzI4NCw1MzI4NSw1MzI4Niw1MzI4Nyw1MzI4OCw1MzI4OSw1MzI5MCw1MzI5MSw1MzI5Miw0NTE0OSw0NTE4MCw0NTE4MSw0NTE4NCw0NTE4OCw0NTE5Niw0NTE5Nyw0NTE5OSw0NTIwMSw0NTIwOCw0NTIwOSw0NTIxMCw0NTIxMiw0NTIxNSw0NTIxNiw0NTIxNyw0NTIxOCw0NTIyNCw0NTIyNSw0NTIyNyw0NTIyOCw0NTIyOSw0NTIzMCw0NTIzMSw0NTIzMyw0NTIzNSw0NTIzNiw0NTIzNyw0NTI0MCw0NTI0NCw0NTI1Miw0NTI1Myw0NTI1NSw0NTI1Niw0NTI1Nyw0NTI2NCw0NTI2NSw0NTI2OCw0NTI3Miw0NTI4MCw0NTI4NSw0NTMyMCw0NTMyMSw0NTMyMyw0NTMyNCw0NTMyOCw0NTMzMCw0NTMzMSw0NTMzNiw0NTMzNyw0NTMzOSw0NTM0MCw0NTM0MSw0NTM0Nyw0NTM0OCw0NTM0OSw0NTM1Miw0NTM1Niw0NTM2NCw0NTM2NSw0NTM2Nyw0NTM2OCw0NTM2OSw0NTM3Niw0NTM3Nyw0NTM4MCw0NTM4NCw0NTM5Miw0NTM5Myw0NTM5Niw0NTM5Nyw0NTQwMCw0NTQwNCw0NTQwOCw0NTQzMiw0NTQzMyw0NTQzNiw0NTQ0MCw0NTQ0Miw0NTQ0OCw0NTQ0OSw0NTQ1MSw0NTQ1Myw0NTQ1OCw0NTQ1OSw0NTQ2MCw0NTQ2NCw0NTQ2OCw0NTQ4MCw0NTUxNiw0NTUyMCw0NTUyNCw0NTUzMiw0NTUzMyw1MzI5NCw1MzI5NSw1MzI5Niw1MzI5Nyw1MzI5OCw1MzI5OSw1MzMwMiw1MzMwMyw1MzMwNSw1MzMwNiw1MzMwNyw1MzMwOSw1MzMxMCw1MzMxMSw1MzMxMiw1MzMxMyw1MzMxNCw1MzMxNSw1MzMxOCw1MzMyMCw1MzMyMiw1MzMyMyw1MzMyNCw1MzMyNSw1MzMyNiw1MzMyNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzMyOSw1MzMzMCw1MzMzMSw1MzMzMyw1MzMzNCw1MzMzNSw1MzMzNyw1MzMzOCw1MzMzOSw1MzM0MCw1MzM0MSw1MzM0Miw1MzM0Myw1MzM0NSw1MzM0Niw1MzM0Nyw1MzM0OCw1MzM0OSw1MzM1MCw1MzM1MSw1MzM1Miw1MzM1Myw1MzM1NCw1MzM1NSw1MzM1OCw1MzM1OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzM2MSw1MzM2Miw1MzM2Myw1MzM2NSw1MzM2Niw1MzM2Nyw1MzM2OCw1MzM2OSw1MzM3MCw1MzM3MSw1MzM3NCw1MzM3NSw1MzM3Niw1MzM3OCw1MzM3OSw1MzM4MCw1MzM4MSw1MzM4Miw1MzM4Myw1MzM4NCw1MzM4NSw1MzM4Niw1MzM4Nyw1MzM4OCw1MzM4OSw1MzM5MCw1MzM5MSw1MzM5Miw1MzM5Myw1MzM5NCw1MzM5NSw1MzM5Niw0NTUzNSw0NTU0NCw0NTU0NSw0NTU0OCw0NTU1Miw0NTU2MSw0NTU2Myw0NTU2NSw0NTU3Miw0NTU3Myw0NTU3Niw0NTU3OSw0NTU4MCw0NTU4OCw0NTU4OSw0NTU5MSw0NTU5Myw0NTYwMCw0NTYyMCw0NTYyOCw0NTY1Niw0NTY2MCw0NTY2NCw0NTY3Miw0NTY3Myw0NTY4NCw0NTY4NSw0NTY5Miw0NTcwMCw0NTcwMSw0NTcwNSw0NTcxMiw0NTcxMyw0NTcxNiw0NTcyMCw0NTcyMSw0NTcyMiw0NTcyOCw0NTcyOSw0NTczMSw0NTczMyw0NTczNCw0NTczOCw0NTc0MCw0NTc0NCw0NTc0OCw0NTc2OCw0NTc2OSw0NTc3Miw0NTc3Niw0NTc3OCw0NTc4NCw0NTc4NSw0NTc4Nyw0NTc4OSw0NTc5NCw0NTc5Niw0NTc5Nyw0NTc5OCw0NTgwMCw0NTgwMyw0NTgwNCw0NTgwNSw0NTgwNiw0NTgwNyw0NTgxMSw0NTgxMiw0NTgxMyw0NTgxNSw0NTgxNiw0NTgxNyw0NTgxOCw0NTgxOSw0NTgyMyw0NTgyNCw0NTgyNSw0NTgyOCw0NTgzMiw0NTg0MCw0NTg0MSw0NTg0Myw0NTg0NCw0NTg0NSw0NTg1Miw0NTkwOCw0NTkwOSw0NTkxMCw0NTkxMiw0NTkxNSw0NTkxNiw0NTkxOCw0NTkxOSw0NTkyNCw0NTkyNSw1MzM5Nyw1MzM5OCw1MzM5OSw1MzQwMCw1MzQwMSw1MzQwMiw1MzQwMyw1MzQwNCw1MzQwNSw1MzQwNiw1MzQwNyw1MzQwOCw1MzQwOSw1MzQxMCw1MzQxMSw1MzQxNCw1MzQxNSw1MzQxNyw1MzQxOCw1MzQxOSw1MzQyMSw1MzQyMiw1MzQyMyw1MzQyNCw1MzQyNSw1MzQyNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzQyNyw1MzQzMCw1MzQzMiw1MzQzNCw1MzQzNSw1MzQzNiw1MzQzNyw1MzQzOCw1MzQzOSw1MzQ0Miw1MzQ0Myw1MzQ0NSw1MzQ0Niw1MzQ0Nyw1MzQ1MCw1MzQ1MSw1MzQ1Miw1MzQ1Myw1MzQ1NCw1MzQ1NSw1MzQ1OCw1MzQ2Miw1MzQ2Myw1MzQ2NCw1MzQ2NSw1MzQ2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzQ2Nyw1MzQ3MCw1MzQ3MSw1MzQ3Myw1MzQ3NCw1MzQ3NSw1MzQ3Nyw1MzQ3OCw1MzQ3OSw1MzQ4MCw1MzQ4MSw1MzQ4Miw1MzQ4Myw1MzQ4Niw1MzQ5MCw1MzQ5MSw1MzQ5Miw1MzQ5Myw1MzQ5NCw1MzQ5NSw1MzQ5Nyw1MzQ5OCw1MzQ5OSw1MzUwMCw1MzUwMSw1MzUwMiw1MzUwMyw1MzUwNCw1MzUwNSw1MzUwNiw1MzUwNyw1MzUwOCw0NTkyNyw0NTkyOSw0NTkzMSw0NTkzNCw0NTkzNiw0NTkzNyw0NTk0MCw0NTk0NCw0NTk1Miw0NTk1Myw0NTk1NSw0NTk1Niw0NTk1Nyw0NTk2NCw0NTk2OCw0NTk3Miw0NTk4NCw0NTk4NSw0NTk5Miw0NTk5Niw0NjAyMCw0NjAyMSw0NjAyNCw0NjAyNyw0NjAyOCw0NjAzMCw0NjAzMiw0NjAzNiw0NjAzNyw0NjAzOSw0NjA0MSw0NjA0Myw0NjA0NSw0NjA0OCw0NjA1Miw0NjA1Niw0NjA3Niw0NjA5Niw0NjEwNCw0NjEwOCw0NjExMiw0NjEyMCw0NjEyMSw0NjEyMyw0NjEzMiw0NjE2MCw0NjE2MSw0NjE2NCw0NjE2OCw0NjE3Niw0NjE3Nyw0NjE3OSw0NjE4MSw0NjE4OCw0NjIwOCw0NjIxNiw0NjIzNyw0NjI0NCw0NjI0OCw0NjI1Miw0NjI2MSw0NjI2Myw0NjI2NSw0NjI3Miw0NjI3Niw0NjI4MCw0NjI4OCw0NjI5Myw0NjMwMCw0NjMwMSw0NjMwNCw0NjMwNyw0NjMwOCw0NjMxMCw0NjMxNiw0NjMxNyw0NjMxOSw0NjMyMSw0NjMyOCw0NjM1Niw0NjM1Nyw0NjM2MCw0NjM2Myw0NjM2NCw0NjM3Miw0NjM3Myw0NjM3NSw0NjM3Niw0NjM3Nyw0NjM3OCw0NjM4NCw0NjM4NSw0NjM4OCw0NjM5Miw1MzUwOSw1MzUxMCw1MzUxMSw1MzUxMiw1MzUxMyw1MzUxNCw1MzUxNSw1MzUxNiw1MzUxOCw1MzUxOSw1MzUyMCw1MzUyMSw1MzUyMiw1MzUyMyw1MzUyNCw1MzUyNSw1MzUyNiw1MzUyNyw1MzUyOCw1MzUyOSw1MzUzMCw1MzUzMSw1MzUzMiw1MzUzMyw1MzUzNCw1MzUzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzUzNiw1MzUzNyw1MzUzOCw1MzUzOSw1MzU0MCw1MzU0MSw1MzU0Miw1MzU0Myw1MzU0NCw1MzU0NSw1MzU0Niw1MzU0Nyw1MzU0OCw1MzU0OSw1MzU1MCw1MzU1MSw1MzU1NCw1MzU1NSw1MzU1Nyw1MzU1OCw1MzU1OSw1MzU2MSw1MzU2Myw1MzU2NCw1MzU2NSw1MzU2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzU2Nyw1MzU3MCw1MzU3NCw1MzU3NSw1MzU3Niw1MzU3Nyw1MzU3OCw1MzU3OSw1MzU4Miw1MzU4Myw1MzU4NSw1MzU4Niw1MzU4Nyw1MzU4OSw1MzU5MCw1MzU5MSw1MzU5Miw1MzU5Myw1MzU5NCw1MzU5NSw1MzU5OCw1MzYwMCw1MzYwMiw1MzYwMyw1MzYwNCw1MzYwNSw1MzYwNiw1MzYwNyw1MzYwOSw1MzYxMCw1MzYxMSw1MzYxMyw0NjQwMCw0NjQwMSw0NjQwMyw0NjQwNCw0NjQwNSw0NjQxMSw0NjQxMiw0NjQxMyw0NjQxNiw0NjQyMCw0NjQyOCw0NjQyOSw0NjQzMSw0NjQzMiw0NjQzMyw0NjQ5Niw0NjQ5Nyw0NjUwMCw0NjUwNCw0NjUwNiw0NjUwNyw0NjUxMiw0NjUxMyw0NjUxNSw0NjUxNiw0NjUxNyw0NjUyMyw0NjUyNCw0NjUyNSw0NjUyOCw0NjUzMiw0NjU0MCw0NjU0MSw0NjU0Myw0NjU0NCw0NjU0NSw0NjU1Miw0NjU3Miw0NjYwOCw0NjYwOSw0NjYxMiw0NjYxNiw0NjYyOSw0NjYzNiw0NjY0NCw0NjY2NCw0NjY5Miw0NjY5Niw0Njc0OCw0Njc0OSw0Njc1Miw0Njc1Niw0Njc2Myw0Njc2NCw0Njc2OSw0NjgwNCw0NjgzMiw0NjgzNiw0Njg0MCw0Njg0OCw0Njg0OSw0Njg1Myw0Njg4OCw0Njg4OSw0Njg5Miw0Njg5NSw0Njg5Niw0NjkwNCw0NjkwNSw0NjkwNyw0NjkxNiw0NjkyMCw0NjkyNCw0NjkzMiw0NjkzMyw0Njk0NCw0Njk0OCw0Njk1Miw0Njk2MCw0Njk2MSw0Njk2Myw0Njk2NSw0Njk3Miw0Njk3Myw0Njk3Niw0Njk4MCw0Njk4OCw0Njk4OSw0Njk5MSw0Njk5Miw0Njk5Myw0Njk5NCw0Njk5OCw0Njk5OSw1MzYxNCw1MzYxNSw1MzYxNiw1MzYxNyw1MzYxOCw1MzYxOSw1MzYyMCw1MzYyMSw1MzYyMiw1MzYyMyw1MzYyNCw1MzYyNSw1MzYyNiw1MzYyNyw1MzYyOSw1MzYzMCw1MzYzMSw1MzYzMiw1MzYzMyw1MzYzNCw1MzYzNSw1MzYzNyw1MzYzOCw1MzYzOSw1MzY0MSw1MzY0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzY0Myw1MzY0NCw1MzY0NSw1MzY0Niw1MzY0Nyw1MzY0OCw1MzY0OSw1MzY1MCw1MzY1MSw1MzY1Miw1MzY1Myw1MzY1NCw1MzY1NSw1MzY1Niw1MzY1Nyw1MzY1OCw1MzY1OSw1MzY2MCw1MzY2MSw1MzY2Miw1MzY2Myw1MzY2Niw1MzY2Nyw1MzY2OSw1MzY3MCw1MzY3MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzY3Myw1MzY3NCw1MzY3NSw1MzY3Niw1MzY3Nyw1MzY3OCw1MzY3OSw1MzY4Miw1MzY4NCw1MzY4Niw1MzY4Nyw1MzY4OCw1MzY4OSw1MzY5MSw1MzY5Myw1MzY5NCw1MzY5NSw1MzY5Nyw1MzY5OCw1MzY5OSw1MzcwMCw1MzcwMSw1MzcwMiw1MzcwMyw1MzcwNCw1MzcwNSw1MzcwNiw1MzcwNyw1MzcwOCw1MzcwOSw1MzcxMCw1MzcxMSw0NzAwMCw0NzAwMSw0NzAwNCw0NzAwOCw0NzAxNiw0NzAxNyw0NzAxOSw0NzAyMCw0NzAyMSw0NzAyOCw0NzAyOSw0NzAzMiw0NzA0Nyw0NzA0OSw0NzA4NCw0NzA4NSw0NzA4OCw0NzA5Miw0NzEwMCw0NzEwMSw0NzEwMyw0NzEwNCw0NzEwNSw0NzExMSw0NzExMiw0NzExMyw0NzExNiw0NzEyMCw0NzEyOCw0NzEyOSw0NzEzMSw0NzEzMyw0NzE0MCw0NzE0MSw0NzE0NCw0NzE0OCw0NzE1Niw0NzE1Nyw0NzE1OSw0NzE2MCw0NzE2MSw0NzE2OCw0NzE3Miw0NzE4NSw0NzE4Nyw0NzE5Niw0NzE5Nyw0NzIwMCw0NzIwNCw0NzIxMiw0NzIxMyw0NzIxNSw0NzIxNyw0NzIyNCw0NzIyOCw0NzI0NSw0NzI3Miw0NzI4MCw0NzI4NCw0NzI4OCw0NzI5Niw0NzI5Nyw0NzI5OSw0NzMwMSw0NzMwOCw0NzMxMiw0NzMxNiw0NzMyNSw0NzMyNyw0NzMyOSw0NzMzNiw0NzMzNyw0NzM0MCw0NzM0NCw0NzM1Miw0NzM1Myw0NzM1NSw0NzM1Nyw0NzM2NCw0NzM4NCw0NzM5Miw0NzQyMCw0NzQyMSw0NzQyNCw0NzQyOCw0NzQzNiw0NzQzOSw0NzQ0MSw0NzQ0OCw0NzQ0OSw0NzQ1Miw0NzQ1Niw0NzQ2NCw0NzQ2NSw1MzcxMiw1MzcxMyw1MzcxNCw1MzcxNSw1MzcxNiw1MzcxNyw1MzcxOCw1MzcxOSw1MzcyMSw1MzcyMiw1MzcyMyw1MzcyNCw1MzcyNSw1MzcyNiw1MzcyNyw1MzcyOCw1MzcyOSw1MzczMCw1MzczMSw1MzczMiw1MzczMyw1MzczNCw1MzczNSw1MzczNiw1MzczNyw1MzczOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzczOSw1Mzc0MCw1Mzc0MSw1Mzc0Miw1Mzc0Myw1Mzc0NCw1Mzc0NSw1Mzc0Niw1Mzc0Nyw1Mzc0OSw1Mzc1MCw1Mzc1MSw1Mzc1Myw1Mzc1NCw1Mzc1NSw1Mzc1Niw1Mzc1Nyw1Mzc1OCw1Mzc1OSw1Mzc2MCw1Mzc2MSw1Mzc2Miw1Mzc2Myw1Mzc2NCw1Mzc2NSw1Mzc2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzc2OCw1Mzc3MCw1Mzc3MSw1Mzc3Miw1Mzc3Myw1Mzc3NCw1Mzc3NSw1Mzc3Nyw1Mzc3OCw1Mzc3OSw1Mzc4MCw1Mzc4MSw1Mzc4Miw1Mzc4Myw1Mzc4NCw1Mzc4NSw1Mzc4Niw1Mzc4Nyw1Mzc4OCw1Mzc4OSw1Mzc5MCw1Mzc5MSw1Mzc5Miw1Mzc5Myw1Mzc5NCw1Mzc5NSw1Mzc5Niw1Mzc5Nyw1Mzc5OCw1Mzc5OSw1MzgwMCw1MzgwMSw0NzQ2Nyw0NzQ2OSw0NzQ3Niw0NzQ3Nyw0NzQ4MCw0NzQ4NCw0NzQ5Miw0NzQ5Myw0NzQ5NSw0NzQ5Nyw0NzQ5OCw0NzUwMSw0NzUwMiw0NzUzMiw0NzUzMyw0NzUzNiw0NzU0MCw0NzU0OCw0NzU0OSw0NzU1MSw0NzU1Myw0NzU2MCw0NzU2MSw0NzU2NCw0NzU2Niw0NzU2Nyw0NzU2OCw0NzU2OSw0NzU3MCw0NzU3Niw0NzU3Nyw0NzU3OSw0NzU4MSw0NzU4Miw0NzU4NSw0NzU4Nyw0NzU4OCw0NzU4OSw0NzU5Miw0NzU5Niw0NzYwNCw0NzYwNSw0NzYwNyw0NzYwOCw0NzYwOSw0NzYxMCw0NzYxNiw0NzYxNyw0NzYyNCw0NzYzNyw0NzY3Miw0NzY3Myw0NzY3Niw0NzY4MCw0NzY4Miw0NzY4OCw0NzY4OSw0NzY5MSw0NzY5Myw0NzY5NCw0NzY5OSw0NzcwMCw0NzcwMSw0NzcwNCw0NzcwOCw0NzcxNiw0NzcxNyw0NzcxOSw0NzcyMCw0NzcyMSw0NzcyOCw0NzcyOSw0NzczMiw0NzczNiw0Nzc0Nyw0Nzc0OCw0Nzc0OSw0Nzc1MSw0Nzc1Niw0Nzc4NCw0Nzc4NSw0Nzc4Nyw0Nzc4OCw0Nzc5Miw0Nzc5NCw0NzgwMCw0NzgwMSw0NzgwMyw0NzgwNSw0NzgxMiw0NzgxNiw0NzgzMiw0NzgzMyw0Nzg2OCw1MzgwMiw1MzgwMyw1MzgwNiw1MzgwNyw1MzgwOSw1MzgxMCw1MzgxMSw1MzgxMyw1MzgxNCw1MzgxNSw1MzgxNiw1MzgxNyw1MzgxOCw1MzgxOSw1MzgyMiw1MzgyNCw1MzgyNiw1MzgyNyw1MzgyOCw1MzgyOSw1MzgzMCw1MzgzMSw1MzgzMyw1MzgzNCw1MzgzNSw1MzgzNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzgzNyw1MzgzOCw1MzgzOSw1Mzg0MCw1Mzg0MSw1Mzg0Miw1Mzg0Myw1Mzg0NCw1Mzg0NSw1Mzg0Niw1Mzg0Nyw1Mzg0OCw1Mzg0OSw1Mzg1MCw1Mzg1MSw1Mzg1Myw1Mzg1NCw1Mzg1NSw1Mzg1Niw1Mzg1Nyw1Mzg1OCw1Mzg1OSw1Mzg2MSw1Mzg2Miw1Mzg2Myw1Mzg2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzg2NSw1Mzg2Niw1Mzg2Nyw1Mzg2OCw1Mzg2OSw1Mzg3MCw1Mzg3MSw1Mzg3Miw1Mzg3Myw1Mzg3NCw1Mzg3NSw1Mzg3Niw1Mzg3Nyw1Mzg3OCw1Mzg3OSw1Mzg4MCw1Mzg4MSw1Mzg4Miw1Mzg4Myw1Mzg4NCw1Mzg4NSw1Mzg4Niw1Mzg4Nyw1Mzg5MCw1Mzg5MSw1Mzg5Myw1Mzg5NCw1Mzg5NSw1Mzg5Nyw1Mzg5OCw1Mzg5OSw1MzkwMCw0Nzg3Miw0Nzg3Niw0Nzg4NSw0Nzg4Nyw0Nzg4OSw0Nzg5Niw0NzkwMCw0NzkwNCw0NzkxMyw0NzkxNSw0NzkyNCw0NzkyNSw0NzkyNiw0NzkyOCw0NzkzMSw0NzkzMiw0NzkzMyw0NzkzNCw0Nzk0MCw0Nzk0MSw0Nzk0Myw0Nzk0NSw0Nzk0OSw0Nzk1MSw0Nzk1Miw0Nzk1Niw0Nzk2MCw0Nzk2OSw0Nzk3MSw0Nzk4MCw0ODAwOCw0ODAxMiw0ODAxNiw0ODAzNiw0ODA0MCw0ODA0NCw0ODA1Miw0ODA1NSw0ODA2NCw0ODA2OCw0ODA3Miw0ODA4MCw0ODA4Myw0ODEyMCw0ODEyMSw0ODEyNCw0ODEyNyw0ODEyOCw0ODEzMCw0ODEzNiw0ODEzNyw0ODEzOSw0ODE0MCw0ODE0MSw0ODE0Myw0ODE0NSw0ODE0OCw0ODE0OSw0ODE1MCw0ODE1MSw0ODE1Miw0ODE1NSw0ODE1Niw0ODE1Nyw0ODE1OCw0ODE1OSw0ODE2NCw0ODE2NSw0ODE2Nyw0ODE2OSw0ODE3Myw0ODE3Niw0ODE3Nyw0ODE4MCw0ODE4NCw0ODE5Miw0ODE5Myw0ODE5NSw0ODE5Niw0ODE5Nyw0ODIwMSw0ODIwNCw0ODIwNSw0ODIwOCw0ODIyMSw0ODI2MCw0ODI2MSw0ODI2NCw0ODI2Nyw0ODI2OCw0ODI3MCw0ODI3Niw0ODI3Nyw0ODI3OSw1MzkwMSw1MzkwMiw1MzkwMyw1MzkwNiw1MzkwNyw1MzkwOCw1MzkxMCw1MzkxMSw1MzkxMiw1MzkxMyw1MzkxNCw1MzkxNSw1MzkxNyw1MzkxOCw1MzkxOSw1MzkyMSw1MzkyMiw1MzkyMyw1MzkyNSw1MzkyNiw1MzkyNyw1MzkyOCw1MzkyOSw1MzkzMCw1MzkzMSw1MzkzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzkzNCw1MzkzNSw1MzkzNiw1MzkzOCw1MzkzOSw1Mzk0MCw1Mzk0MSw1Mzk0Miw1Mzk0Myw1Mzk0Niw1Mzk0Nyw1Mzk0OSw1Mzk1MCw1Mzk1Myw1Mzk1NSw1Mzk1Niw1Mzk1Nyw1Mzk1OCw1Mzk1OSw1Mzk2Miw1Mzk2NCw1Mzk2NSw1Mzk2Niw1Mzk2Nyw1Mzk2OCw1Mzk2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzk3MCw1Mzk3MSw1Mzk3Myw1Mzk3NCw1Mzk3NSw1Mzk3Nyw1Mzk3OCw1Mzk3OSw1Mzk4MSw1Mzk4Miw1Mzk4Myw1Mzk4NCw1Mzk4NSw1Mzk4Niw1Mzk4Nyw1Mzk5MCw1Mzk5MSw1Mzk5Miw1Mzk5Myw1Mzk5NCw1Mzk5NSw1Mzk5Niw1Mzk5Nyw1Mzk5OCw1Mzk5OSw1NDAwMiw1NDAwMyw1NDAwNSw1NDAwNiw1NDAwNyw1NDAwOSw1NDAxMCw0ODI4MSw0ODI4Miw0ODI4OCw0ODI4OSw0ODI5Miw0ODI5NSw0ODI5Niw0ODMwNCw0ODMwNSw0ODMwNyw0ODMwOCw0ODMwOSw0ODMxNiw0ODMxNyw0ODMyMCw0ODMyNCw0ODMzMyw0ODMzNSw0ODMzNiw0ODMzNyw0ODM0MSw0ODM0NCw0ODM0OCw0ODM3Miw0ODM3Myw0ODM3NCw0ODM3Niw0ODM4MCw0ODM4OCw0ODM4OSw0ODM5MSw0ODM5Myw0ODQwMCw0ODQwNCw0ODQyMCw0ODQyOCw0ODQ0OCw0ODQ1Niw0ODQ1Nyw0ODQ2MCw0ODQ2NCw0ODQ3Miw0ODQ3Myw0ODQ4NCw0ODQ4OCw0ODUxMiw0ODUxMyw0ODUxNiw0ODUxOSw0ODUyMCw0ODUyMSw0ODUyMiw0ODUyOCw0ODUyOSw0ODUzMSw0ODUzMyw0ODUzNyw0ODUzOCw0ODU0MCw0ODU0OCw0ODU2MCw0ODU2OCw0ODU5Niw0ODU5Nyw0ODYwMCw0ODYwNCw0ODYxNyw0ODYyNCw0ODYyOCw0ODYzMiw0ODY0MCw0ODY0Myw0ODY0NSw0ODY1Miw0ODY1Myw0ODY1Niw0ODY2MCw0ODY2OCw0ODY2OSw0ODY3MSw0ODcwOCw0ODcwOSw0ODcxMiw0ODcxNiw0ODcxOCw0ODcyNCw0ODcyNSw0ODcyNyw0ODcyOSw0ODczMCw0ODczMSw0ODczNiw0ODczNyw0ODc0MCw1NDAxMSw1NDAxMiw1NDAxMyw1NDAxNCw1NDAxNSw1NDAxOCw1NDAyMCw1NDAyMiw1NDAyMyw1NDAyNCw1NDAyNSw1NDAyNiw1NDAyNyw1NDAzMSw1NDAzMyw1NDAzNCw1NDAzNSw1NDAzNyw1NDAzOSw1NDA0MCw1NDA0MSw1NDA0Miw1NDA0Myw1NDA0Niw1NDA1MCw1NDA1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDA1Miw1NDA1NCw1NDA1NSw1NDA1OCw1NDA1OSw1NDA2MSw1NDA2Miw1NDA2Myw1NDA2NSw1NDA2Niw1NDA2Nyw1NDA2OCw1NDA2OSw1NDA3MCw1NDA3MSw1NDA3NCw1NDA3OCw1NDA3OSw1NDA4MCw1NDA4MSw1NDA4Miw1NDA4Myw1NDA4Niw1NDA4Nyw1NDA4OCw1NDA4OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDA5MCw1NDA5MSw1NDA5Miw1NDA5Myw1NDA5NCw1NDA5NSw1NDA5Niw1NDA5Nyw1NDA5OCw1NDA5OSw1NDEwMCw1NDEwMSw1NDEwMiw1NDEwMyw1NDEwNCw1NDEwNSw1NDEwNiw1NDEwNyw1NDEwOCw1NDEwOSw1NDExMCw1NDExMSw1NDExMiw1NDExMyw1NDExNCw1NDExNSw1NDExNiw1NDExNyw1NDExOCw1NDExOSw1NDEyMCw1NDEyMSw0ODc0NCw0ODc0Niw0ODc1Miw0ODc1Myw0ODc1NSw0ODc1Niw0ODc1Nyw0ODc2Myw0ODc2NCw0ODc2NSw0ODc2OCw0ODc3Miw0ODc4MCw0ODc4MSw0ODc4Myw0ODc4NCw0ODc4NSw0ODc5Miw0ODc5Myw0ODgwOCw0ODg0OCw0ODg0OSw0ODg1Miw0ODg1NSw0ODg1Niw0ODg2NCw0ODg2Nyw0ODg2OCw0ODg2OSw0ODg3Niw0ODg5Nyw0ODkwNCw0ODkwNSw0ODkyMCw0ODkyMSw0ODkyMyw0ODkyNCw0ODkyNSw0ODk2MCw0ODk2MSw0ODk2NCw0ODk2OCw0ODk3Niw0ODk3Nyw0ODk4MSw0OTA0NCw0OTA3Miw0OTA5Myw0OTEwMCw0OTEwMSw0OTEwNCw0OTEwOCw0OTExNiw0OTExOSw0OTEyMSw0OTIxMiw0OTIzMyw0OTI0MCw0OTI0NCw0OTI0OCw0OTI1Niw0OTI1Nyw0OTI5Niw0OTI5Nyw0OTMwMCw0OTMwNCw0OTMxMiw0OTMxMyw0OTMxNSw0OTMxNyw0OTMyNCw0OTMyNSw0OTMyNyw0OTMyOCw0OTMzMSw0OTMzMiw0OTMzMyw0OTMzNCw0OTM0MCw0OTM0MSw0OTM0Myw0OTM0NCw0OTM0NSw0OTM0OSw0OTM1Miw0OTM1Myw0OTM1Niw0OTM2MCw0OTM2OCw0OTM2OSw0OTM3MSw0OTM3Miw0OTM3Myw0OTM4MCw1NDEyMiw1NDEyMyw1NDEyNCw1NDEyNSw1NDEyNiw1NDEyNyw1NDEyOCw1NDEyOSw1NDEzMCw1NDEzMSw1NDEzMiw1NDEzMyw1NDEzNCw1NDEzNSw1NDEzNiw1NDEzNyw1NDEzOCw1NDEzOSw1NDE0Miw1NDE0Myw1NDE0NSw1NDE0Niw1NDE0Nyw1NDE0OSw1NDE1MCw1NDE1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDE1Miw1NDE1Myw1NDE1NCw1NDE1NSw1NDE1OCw1NDE2Miw1NDE2Myw1NDE2NCw1NDE2NSw1NDE2Niw1NDE2Nyw1NDE3MCw1NDE3MSw1NDE3Myw1NDE3NCw1NDE3NSw1NDE3Nyw1NDE3OCw1NDE3OSw1NDE4MCw1NDE4MSw1NDE4Miw1NDE4Myw1NDE4Niw1NDE4OCw1NDE5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDE5MSw1NDE5Miw1NDE5Myw1NDE5NCw1NDE5NSw1NDE5Nyw1NDE5OCw1NDE5OSw1NDIwMSw1NDIwMiw1NDIwMyw1NDIwNSw1NDIwNiw1NDIwNyw1NDIwOCw1NDIwOSw1NDIxMCw1NDIxMSw1NDIxNCw1NDIxNSw1NDIxOCw1NDIxOSw1NDIyMCw1NDIyMSw1NDIyMiw1NDIyMyw1NDIyNSw1NDIyNiw1NDIyNyw1NDIyOCw1NDIyOSw1NDIzMCw0OTM4MSw0OTM4NCw0OTM4OCw0OTM5Niw0OTM5Nyw0OTM5OSw0OTQwMSw0OTQwOCw0OTQxMiw0OTQxNiw0OTQyNCw0OTQyOSw0OTQzNiw0OTQzNyw0OTQzOCw0OTQzOSw0OTQ0MCw0OTQ0Myw0OTQ0NCw0OTQ0Niw0OTQ0Nyw0OTQ1Miw0OTQ1Myw0OTQ1NSw0OTQ1Niw0OTQ1Nyw0OTQ2Miw0OTQ2NCw0OTQ2NSw0OTQ2OCw0OTQ3Miw0OTQ4MCw0OTQ4MSw0OTQ4Myw0OTQ4NCw0OTQ4NSw0OTQ5Miw0OTQ5Myw0OTQ5Niw0OTUwMCw0OTUwOCw0OTUwOSw0OTUxMSw0OTUxMiw0OTUxMyw0OTUyMCw0OTUyNCw0OTUyOCw0OTU0MSw0OTU0OCw0OTU0OSw0OTU1MCw0OTU1Miw0OTU1Niw0OTU1OCw0OTU2NCw0OTU2NSw0OTU2Nyw0OTU2OSw0OTU3Myw0OTU3Niw0OTU3Nyw0OTU4MCw0OTU4NCw0OTU5Nyw0OTYwNCw0OTYwOCw0OTYxMiw0OTYyMCw0OTYyMyw0OTYyNCw0OTYzMiw0OTYzNiw0OTY0MCw0OTY0OCw0OTY0OSw0OTY1MSw0OTY2MCw0OTY2MSw0OTY2NCw0OTY2OCw0OTY3Niw0OTY3Nyw0OTY3OSw0OTY4MSw0OTY4OCw0OTY4OSw0OTY5Miw0OTY5NSw0OTY5Niw0OTcwNCw0OTcwNSw0OTcwNyw0OTcwOSw1NDIzMSw1NDIzMyw1NDIzNCw1NDIzNSw1NDIzNiw1NDIzNyw1NDIzOCw1NDIzOSw1NDI0MCw1NDI0Miw1NDI0NCw1NDI0NSw1NDI0Niw1NDI0Nyw1NDI0OCw1NDI0OSw1NDI1MCw1NDI1MSw1NDI1NCw1NDI1NSw1NDI1Nyw1NDI1OCw1NDI1OSw1NDI2MSw1NDI2Miw1NDI2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDI2NCw1NDI2NSw1NDI2Niw1NDI2Nyw1NDI3MCw1NDI3Miw1NDI3NCw1NDI3NSw1NDI3Niw1NDI3Nyw1NDI3OCw1NDI3OSw1NDI4MSw1NDI4Miw1NDI4Myw1NDI4NCw1NDI4NSw1NDI4Niw1NDI4Nyw1NDI4OCw1NDI4OSw1NDI5MCw1NDI5MSw1NDI5Miw1NDI5Myw1NDI5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDI5NSw1NDI5Niw1NDI5Nyw1NDI5OCw1NDI5OSw1NDMwMCw1NDMwMiw1NDMwMyw1NDMwNCw1NDMwNSw1NDMwNiw1NDMwNyw1NDMwOCw1NDMwOSw1NDMxMCw1NDMxMSw1NDMxMiw1NDMxMyw1NDMxNCw1NDMxNSw1NDMxNiw1NDMxNyw1NDMxOCw1NDMxOSw1NDMyMCw1NDMyMSw1NDMyMiw1NDMyMyw1NDMyNCw1NDMyNSw1NDMyNiw1NDMyNyw0OTcxMSw0OTcxMyw0OTcxNCw0OTcxNiw0OTczNiw0OTc0NCw0OTc0NSw0OTc0OCw0OTc1Miw0OTc2MCw0OTc2NSw0OTc3Miw0OTc3Myw0OTc3Niw0OTc4MCw0OTc4OCw0OTc4OSw0OTc5MSw0OTc5Myw0OTgwMCw0OTgwMSw0OTgwOCw0OTgxNiw0OTgxOSw0OTgyMSw0OTgyOCw0OTgyOSw0OTgzMiw0OTgzNiw0OTgzNyw0OTg0NCw0OTg0NSw0OTg0Nyw0OTg0OSw0OTg4NCw0OTg4NSw0OTg4OCw0OTg5MSw0OTg5Miw0OTg5OSw0OTkwMCw0OTkwMSw0OTkwMyw0OTkwNSw0OTkxMCw0OTkxMiw0OTkxMyw0OTkxNSw0OTkxNiw0OTkyMCw0OTkyOCw0OTkyOSw0OTkzMiw0OTkzMyw0OTkzOSw0OTk0MCw0OTk0MSw0OTk0NCw0OTk0OCw0OTk1Niw0OTk1Nyw0OTk2MCw0OTk2MSw0OTk4OSw1MDAyNCw1MDAyNSw1MDAyOCw1MDAzMiw1MDAzNCw1MDA0MCw1MDA0MSw1MDA0NCw1MDA0NSw1MDA1Miw1MDA1Niw1MDA2MCw1MDExMiw1MDEzNiw1MDEzNyw1MDE0MCw1MDE0Myw1MDE0NCw1MDE0Niw1MDE1Miw1MDE1Myw1MDE1Nyw1MDE2NCw1MDE2NSw1MDE2OCw1MDE4NCw1MDE5Miw1MDIxMiw1MDIyMCw1MDIyNCw1NDMyOCw1NDMyOSw1NDMzMCw1NDMzMSw1NDMzMiw1NDMzMyw1NDMzNCw1NDMzNSw1NDMzNyw1NDMzOCw1NDMzOSw1NDM0MSw1NDM0Miw1NDM0Myw1NDM0NCw1NDM0NSw1NDM0Niw1NDM0Nyw1NDM0OCw1NDM0OSw1NDM1MCw1NDM1MSw1NDM1Miw1NDM1Myw1NDM1NCw1NDM1NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDM1Niw1NDM1Nyw1NDM1OCw1NDM1OSw1NDM2MCw1NDM2MSw1NDM2Miw1NDM2Myw1NDM2NSw1NDM2Niw1NDM2Nyw1NDM2OSw1NDM3MCw1NDM3MSw1NDM3Myw1NDM3NCw1NDM3NSw1NDM3Niw1NDM3Nyw1NDM3OCw1NDM3OSw1NDM4MCw1NDM4Miw1NDM4NCw1NDM4NSw1NDM4NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDM4Nyw1NDM4OCw1NDM4OSw1NDM5MCw1NDM5MSw1NDM5NCw1NDM5NSw1NDM5Nyw1NDM5OCw1NDQwMSw1NDQwMyw1NDQwNCw1NDQwNSw1NDQwNiw1NDQwNyw1NDQxMCw1NDQxMiw1NDQxNCw1NDQxNSw1NDQxNiw1NDQxNyw1NDQxOCw1NDQxOSw1NDQyMSw1NDQyMiw1NDQyMyw1NDQyNCw1NDQyNSw1NDQyNiw1NDQyNyw1NDQyOCw1NDQyOSw1MDIyOCw1MDIzNiw1MDIzNyw1MDI0OCw1MDI3Niw1MDI3Nyw1MDI4MCw1MDI4NCw1MDI5Miw1MDI5Myw1MDI5Nyw1MDMwNCw1MDMyNCw1MDMzMiw1MDM2MCw1MDM2NCw1MDQwOSw1MDQxNiw1MDQxNyw1MDQyMCw1MDQyNCw1MDQyNiw1MDQzMSw1MDQzMiw1MDQzMyw1MDQ0NCw1MDQ0OCw1MDQ1Miw1MDQ2MCw1MDQ3Miw1MDQ3Myw1MDQ3Niw1MDQ4MCw1MDQ4OCw1MDQ4OSw1MDQ5MSw1MDQ5Myw1MDUwMCw1MDUwMSw1MDUwNCw1MDUwNSw1MDUwNiw1MDUwOCw1MDUwOSw1MDUxMCw1MDUxNSw1MDUxNiw1MDUxNyw1MDUxOSw1MDUyMCw1MDUyMSw1MDUyNSw1MDUyNiw1MDUyOCw1MDUyOSw1MDUzMiw1MDUzNiw1MDU0NCw1MDU0NSw1MDU0Nyw1MDU0OCw1MDU0OSw1MDU1Niw1MDU1Nyw1MDU2MCw1MDU2NCw1MDU2Nyw1MDU3Miw1MDU3Myw1MDU3NSw1MDU3Nyw1MDU4MSw1MDU4Myw1MDU4NCw1MDU4OCw1MDU5Miw1MDYwMSw1MDYxMiw1MDYxMyw1MDYxNiw1MDYxNyw1MDYxOSw1MDYyMCw1MDYyMSw1MDYyMiw1MDYyOCw1MDYyOSw1MDYzMCw1MDYzMSw1MDYzMiw1MDYzMyw1MDYzNCw1MDYzNiw1MDYzOCw1NDQzMCw1NDQzMSw1NDQzMiw1NDQzMyw1NDQzNCw1NDQzNSw1NDQzNiw1NDQzNyw1NDQzOCw1NDQzOSw1NDQ0MCw1NDQ0Miw1NDQ0Myw1NDQ0NCw1NDQ0NSw1NDQ0Niw1NDQ0Nyw1NDQ0OCw1NDQ0OSw1NDQ1MCw1NDQ1MSw1NDQ1Miw1NDQ1Myw1NDQ1NCw1NDQ1NSw1NDQ1NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDQ1Nyw1NDQ1OCw1NDQ1OSw1NDQ2MCw1NDQ2MSw1NDQ2Miw1NDQ2Myw1NDQ2NCw1NDQ2NSw1NDQ2Niw1NDQ2Nyw1NDQ2OCw1NDQ2OSw1NDQ3MCw1NDQ3MSw1NDQ3Miw1NDQ3Myw1NDQ3NCw1NDQ3NSw1NDQ3Nyw1NDQ3OCw1NDQ3OSw1NDQ4MSw1NDQ4Miw1NDQ4Myw1NDQ4NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDQ4Niw1NDQ4Nyw1NDQ4OCw1NDQ4OSw1NDQ5MCw1NDQ5MSw1NDQ5Myw1NDQ5NCw1NDQ5Niw1NDQ5Nyw1NDQ5OCw1NDQ5OSw1NDUwMCw1NDUwMSw1NDUwMiw1NDUwMyw1NDUwNSw1NDUwNiw1NDUwNyw1NDUwOSw1NDUxMCw1NDUxMSw1NDUxMyw1NDUxNCw1NDUxNSw1NDUxNiw1NDUxNyw1NDUxOCw1NDUxOSw1NDUyMSw1NDUyMiw1NDUyNCw1MDY0MCw1MDY0MSw1MDY0NCw1MDY0OCw1MDY1Niw1MDY1Nyw1MDY1OSw1MDY2MSw1MDY2OCw1MDY2OSw1MDY3MCw1MDY3Miw1MDY3Niw1MDY3OCw1MDY3OSw1MDY4NCw1MDY4NSw1MDY4Niw1MDY4Nyw1MDY4OCw1MDY4OSw1MDY5Myw1MDY5NCw1MDY5NSw1MDY5Niw1MDcwMCw1MDcwNCw1MDcxMiw1MDcxMyw1MDcxNSw1MDcxNiw1MDcyNCw1MDcyNSw1MDcyOCw1MDczMiw1MDczMyw1MDczNCw1MDczNiw1MDczOSw1MDc0MCw1MDc0MSw1MDc0Myw1MDc0NSw1MDc0Nyw1MDc1Miw1MDc1Myw1MDc1Niw1MDc2MCw1MDc2OCw1MDc2OSw1MDc3MSw1MDc3Miw1MDc3Myw1MDc4MCw1MDc4MSw1MDc4NCw1MDc5Niw1MDc5OSw1MDgwMSw1MDgwOCw1MDgwOSw1MDgxMiw1MDgxNiw1MDgyNCw1MDgyNSw1MDgyNyw1MDgyOSw1MDgzNiw1MDgzNyw1MDg0MCw1MDg0NCw1MDg1Miw1MDg1Myw1MDg1NSw1MDg1Nyw1MDg2NCw1MDg2NSw1MDg2OCw1MDg3Miw1MDg3Myw1MDg3NCw1MDg4MCw1MDg4MSw1MDg4Myw1MDg4NSw1MDg5Miw1MDg5Myw1MDg5Niw1MDkwMCw1MDkwOCw1MDkwOSw1MDkxMiw1MDkxMyw1MDkyMCw1NDUyNiw1NDUyNyw1NDUyOCw1NDUyOSw1NDUzMCw1NDUzMSw1NDUzMyw1NDUzNCw1NDUzNSw1NDUzNyw1NDUzOCw1NDUzOSw1NDU0MSw1NDU0Miw1NDU0Myw1NDU0NCw1NDU0NSw1NDU0Niw1NDU0Nyw1NDU1MCw1NDU1Miw1NDU1Myw1NDU1NCw1NDU1NSw1NDU1Niw1NDU1NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDU1OCw1NDU1OSw1NDU2MCw1NDU2MSw1NDU2Miw1NDU2Myw1NDU2NCw1NDU2NSw1NDU2Niw1NDU2Nyw1NDU2OCw1NDU2OSw1NDU3MCw1NDU3MSw1NDU3Miw1NDU3Myw1NDU3NCw1NDU3NSw1NDU3Niw1NDU3Nyw1NDU3OCw1NDU3OSw1NDU4MCw1NDU4MSw1NDU4Miw1NDU4MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDU4NCw1NDU4NSw1NDU4Niw1NDU4Nyw1NDU5MCw1NDU5MSw1NDU5Myw1NDU5NCw1NDU5NSw1NDU5Nyw1NDU5OCw1NDU5OSw1NDYwMCw1NDYwMSw1NDYwMiw1NDYwMyw1NDYwNiw1NDYwOCw1NDYxMCw1NDYxMSw1NDYxMiw1NDYxMyw1NDYxNCw1NDYxNSw1NDYxOCw1NDYxOSw1NDYyMSw1NDYyMiw1NDYyMyw1NDYyNSw1NDYyNiw1NDYyNyw1MDkyMSw1MDkyNCw1MDkyOCw1MDkzNiw1MDkzNyw1MDk0MSw1MDk0OCw1MDk0OSw1MDk1Miw1MDk1Niw1MDk2NCw1MDk2NSw1MDk2Nyw1MDk2OSw1MDk3Niw1MDk3Nyw1MDk4MCw1MDk4NCw1MDk5Miw1MDk5Myw1MDk5NSw1MDk5Nyw1MDk5OSw1MTAwNCw1MTAwNSw1MTAwOCw1MTAxMiw1MTAxOCw1MTAyMCw1MTAyMSw1MTAyMyw1MTAyNSw1MTAyNiw1MTAyNyw1MTAyOCw1MTAyOSw1MTAzMCw1MTAzMSw1MTAzMiw1MTAzNiw1MTA0MCw1MTA0OCw1MTA1MSw1MTA2MCw1MTA2MSw1MTA2NCw1MTA2OCw1MTA2OSw1MTA3MCw1MTA3NSw1MTA3Niw1MTA3Nyw1MTA3OSw1MTA4MCw1MTA4MSw1MTA4Miw1MTA4Niw1MTA4OCw1MTA4OSw1MTA5Miw1MTA5NCw1MTA5NSw1MTA5Niw1MTA5OCw1MTEwNCw1MTEwNSw1MTEwNyw1MTEwOCw1MTEwOSw1MTExMCw1MTExNiw1MTExNyw1MTEyMCw1MTEyNCw1MTEzMiw1MTEzMyw1MTEzNSw1MTEzNiw1MTEzNyw1MTE0NCw1MTE0NSw1MTE0OCw1MTE1MCw1MTE1Miw1MTE2MCw1MTE2NSw1MTE3Miw1MTE3Niw1MTE4MCw1MTIwMCw1MTIwMSw1MTIwNCw1MTIwOCw1MTIxMCw1NDYyOCw1NDYzMCw1NDYzMSw1NDYzNCw1NDYzNiw1NDYzOCw1NDYzOSw1NDY0MCw1NDY0MSw1NDY0Miw1NDY0Myw1NDY0Niw1NDY0Nyw1NDY0OSw1NDY1MCw1NDY1MSw1NDY1Myw1NDY1NCw1NDY1NSw1NDY1Niw1NDY1Nyw1NDY1OCw1NDY1OSw1NDY2Miw1NDY2Niw1NDY2NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDY2OCw1NDY2OSw1NDY3MCw1NDY3MSw1NDY3Myw1NDY3NCw1NDY3NSw1NDY3Niw1NDY3Nyw1NDY3OCw1NDY3OSw1NDY4MCw1NDY4MSw1NDY4Miw1NDY4Myw1NDY4NCw1NDY4NSw1NDY4Niw1NDY4Nyw1NDY4OCw1NDY4OSw1NDY5MCw1NDY5MSw1NDY5Miw1NDY5NCw1NDY5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDY5Niw1NDY5Nyw1NDY5OCw1NDY5OSw1NDcwMCw1NDcwMSw1NDcwMiw1NDcwMyw1NDcwNCw1NDcwNSw1NDcwNiw1NDcwNyw1NDcwOCw1NDcwOSw1NDcxMCw1NDcxMSw1NDcxMiw1NDcxMyw1NDcxNCw1NDcxNSw1NDcxNiw1NDcxNyw1NDcxOCw1NDcxOSw1NDcyMCw1NDcyMSw1NDcyMiw1NDcyMyw1NDcyNCw1NDcyNSw1NDcyNiw1NDcyNyw1MTIxNiw1MTIxNyw1MTIxOSw1MTIyMSw1MTIyMiw1MTIyOCw1MTIyOSw1MTIzMiw1MTIzNiw1MTI0NCw1MTI0NSw1MTI0Nyw1MTI0OSw1MTI1Niw1MTI2MCw1MTI2NCw1MTI3Miw1MTI3Myw1MTI3Niw1MTI3Nyw1MTI4NCw1MTMxMiw1MTMxMyw1MTMxNiw1MTMyMCw1MTMyMiw1MTMyOCw1MTMyOSw1MTMzMSw1MTMzMyw1MTMzNCw1MTMzNSw1MTMzOSw1MTM0MCw1MTM0MSw1MTM0OCw1MTM1Nyw1MTM1OSw1MTM2MSw1MTM2OCw1MTM4OCw1MTM4OSw1MTM5Niw1MTQwMCw1MTQwNCw1MTQxMiw1MTQxMyw1MTQxNSw1MTQxNyw1MTQyNCw1MTQyNSw1MTQyOCw1MTQ0NSw1MTQ1Miw1MTQ1Myw1MTQ1Niw1MTQ2MCw1MTQ2MSw1MTQ2Miw1MTQ2OCw1MTQ2OSw1MTQ3MSw1MTQ3Myw1MTQ4MCw1MTUwMCw1MTUwOCw1MTUzNiw1MTUzNyw1MTU0MCw1MTU0NCw1MTU1Miw1MTU1Myw1MTU1NSw1MTU2NCw1MTU2OCw1MTU3Miw1MTU4MCw1MTU5Miw1MTU5Myw1MTU5Niw1MTYwMCw1MTYwOCw1MTYwOSw1MTYxMSw1MTYxMyw1MTY0OCw1MTY0OSw1MTY1Miw1MTY1NSw1MTY1Niw1MTY1OCw1MTY2NCw1MTY2NSw1MTY2Nyw1NDczMCw1NDczMSw1NDczMyw1NDczNCw1NDczNSw1NDczNyw1NDczOSw1NDc0MCw1NDc0MSw1NDc0Miw1NDc0Myw1NDc0Niw1NDc0OCw1NDc1MCw1NDc1MSw1NDc1Miw1NDc1Myw1NDc1NCw1NDc1NSw1NDc1OCw1NDc1OSw1NDc2MSw1NDc2Miw1NDc2Myw1NDc2NSw1NDc2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDc2Nyw1NDc2OCw1NDc2OSw1NDc3MCw1NDc3MSw1NDc3NCw1NDc3Niw1NDc3OCw1NDc3OSw1NDc4MCw1NDc4MSw1NDc4Miw1NDc4Myw1NDc4Niw1NDc4Nyw1NDc4OSw1NDc5MCw1NDc5MSw1NDc5Myw1NDc5NCw1NDc5NSw1NDc5Niw1NDc5Nyw1NDc5OCw1NDc5OSw1NDgwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDgwNiw1NDgwNyw1NDgwOCw1NDgwOSw1NDgxMCw1NDgxMSw1NDgxMyw1NDgxNCw1NDgxNSw1NDgxNyw1NDgxOCw1NDgxOSw1NDgyMSw1NDgyMiw1NDgyMyw1NDgyNCw1NDgyNSw1NDgyNiw1NDgyNyw1NDgyOCw1NDgzMCw1NDgzMSw1NDgzMiw1NDgzMyw1NDgzNCw1NDgzNSw1NDgzNiw1NDgzNyw1NDgzOCw1NDgzOSw1NDg0Miw1NDg0Myw1MTY2OSw1MTY3MCw1MTY3Myw1MTY3NCw1MTY3Niw1MTY3Nyw1MTY4MCw1MTY4Miw1MTY4NCw1MTY4Nyw1MTY5Miw1MTY5Myw1MTY5NSw1MTY5Niw1MTY5Nyw1MTcwNCw1MTcwNSw1MTcwOCw1MTcxMiw1MTcyMCw1MTcyMSw1MTcyMyw1MTcyNCw1MTcyNSw1MTczMiw1MTczNiw1MTc1Myw1MTc4OCw1MTc4OSw1MTc5Miw1MTc5Niw1MTgwNCw1MTgwNSw1MTgwNyw1MTgwOCw1MTgwOSw1MTgxNiw1MTgzNyw1MTg0NCw1MTg2NCw1MTkwMCw1MTkwMSw1MTkwNCw1MTkwOCw1MTkxNiw1MTkxNyw1MTkxOSw1MTkyMSw1MTkyMyw1MTkyOCw1MTkyOSw1MTkzNiw1MTk0OCw1MTk1Niw1MTk3Niw1MTk4NCw1MTk4OCw1MTk5Miw1MjAwMCw1MjAwMSw1MjAzMyw1MjA0MCw1MjA0MSw1MjA0NCw1MjA0OCw1MjA1Niw1MjA1Nyw1MjA2MSw1MjA2OCw1MjA4OCw1MjA4OSw1MjEyNCw1MjE1Miw1MjE4MCw1MjE5Niw1MjE5OSw1MjIwMSw1MjIzNiw1MjIzNyw1MjI0MCw1MjI0NCw1MjI1Miw1MjI1Myw1MjI1Nyw1MjI1OCw1MjI2Myw1MjI2NCw1MjI2NSw1MjI2OCw1MjI3MCw1MjI3Miw1MjI4MCw1MjI4MSw1MjI4Myw1NDg0NSw1NDg0Niw1NDg0Nyw1NDg0OSw1NDg1MCw1NDg1MSw1NDg1Miw1NDg1NCw1NDg1NSw1NDg1OCw1NDg2MCw1NDg2Miw1NDg2Myw1NDg2NCw1NDg2Niw1NDg2Nyw1NDg3MCw1NDg3MSw1NDg3Myw1NDg3NCw1NDg3NSw1NDg3Nyw1NDg3OCw1NDg3OSw1NDg4MCw1NDg4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDg4Miw1NDg4Myw1NDg4NCw1NDg4NSw1NDg4Niw1NDg4OCw1NDg5MCw1NDg5MSw1NDg5Miw1NDg5Myw1NDg5NCw1NDg5NSw1NDg5OCw1NDg5OSw1NDkwMSw1NDkwMiw1NDkwMyw1NDkwNCw1NDkwNSw1NDkwNiw1NDkwNyw1NDkwOCw1NDkwOSw1NDkxMCw1NDkxMSw1NDkxMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDkxMyw1NDkxNCw1NDkxNiw1NDkxOCw1NDkxOSw1NDkyMCw1NDkyMSw1NDkyMiw1NDkyMyw1NDkyNiw1NDkyNyw1NDkyOSw1NDkzMCw1NDkzMSw1NDkzMyw1NDkzNCw1NDkzNSw1NDkzNiw1NDkzNyw1NDkzOCw1NDkzOSw1NDk0MCw1NDk0Miw1NDk0NCw1NDk0Niw1NDk0Nyw1NDk0OCw1NDk0OSw1NDk1MCw1NDk1MSw1NDk1Myw1NDk1NCw1MjI4NCw1MjI4NSw1MjI4Niw1MjI5Miw1MjI5Myw1MjI5Niw1MjMwMCw1MjMwOCw1MjMwOSw1MjMxMSw1MjMxMiw1MjMxMyw1MjMyMCw1MjMyNCw1MjMyNiw1MjMyOCw1MjMzNiw1MjM0MSw1MjM3Niw1MjM3Nyw1MjM4MCw1MjM4NCw1MjM5Miw1MjM5Myw1MjM5NSw1MjM5Niw1MjM5Nyw1MjQwNCw1MjQwNSw1MjQwOCw1MjQxMiw1MjQyMCw1MjQyMSw1MjQyMyw1MjQyNSw1MjQzMiw1MjQzNiw1MjQ1Miw1MjQ2MCw1MjQ2NCw1MjQ4MSw1MjQ4OCw1MjQ4OSw1MjQ5Miw1MjQ5Niw1MjUwNCw1MjUwNSw1MjUwNyw1MjUwOSw1MjUxNiw1MjUyMCw1MjUyNCw1MjUzNyw1MjU3Miw1MjU3Niw1MjU4MCw1MjU4OCw1MjU4OSw1MjU5MSw1MjU5Myw1MjYwMCw1MjYxNiw1MjYyOCw1MjYyOSw1MjYzMiw1MjYzNiw1MjY0NCw1MjY0NSw1MjY0Nyw1MjY0OSw1MjY1Niw1MjY3Niw1MjY4NCw1MjY4OCw1MjcxMiw1MjcxNiw1MjcyMCw1MjcyOCw1MjcyOSw1MjczMSw1MjczMyw1Mjc0MCw1Mjc0NCw1Mjc0OCw1Mjc1Niw1Mjc2MSw1Mjc2OCw1Mjc2OSw1Mjc3Miw1Mjc3Niw1Mjc4NCw1Mjc4NSw1Mjc4Nyw1Mjc4OSw1NDk1NSw1NDk1Nyw1NDk1OCw1NDk1OSw1NDk2MSw1NDk2Miw1NDk2Myw1NDk2NCw1NDk2NSw1NDk2Niw1NDk2Nyw1NDk2OCw1NDk3MCw1NDk3Miw1NDk3Myw1NDk3NCw1NDk3NSw1NDk3Niw1NDk3Nyw1NDk3OCw1NDk3OSw1NDk4Miw1NDk4Myw1NDk4NSw1NDk4Niw1NDk4NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDk4OSw1NDk5MCw1NDk5MSw1NDk5Miw1NDk5NCw1NDk5NSw1NDk5Nyw1NDk5OCw1NTAwMCw1NTAwMiw1NTAwMyw1NTAwNCw1NTAwNSw1NTAwNiw1NTAwNyw1NTAwOSw1NTAxMCw1NTAxMSw1NTAxMyw1NTAxNCw1NTAxNSw1NTAxNyw1NTAxOCw1NTAxOSw1NTAyMCw1NTAyMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NTAyMiw1NTAyMyw1NTAyNSw1NTAyNiw1NTAyNyw1NTAyOCw1NTAzMCw1NTAzMSw1NTAzMiw1NTAzMyw1NTAzNCw1NTAzNSw1NTAzOCw1NTAzOSw1NTA0MSw1NTA0Miw1NTA0Myw1NTA0NSw1NTA0Niw1NTA0Nyw1NTA0OCw1NTA0OSw1NTA1MCw1NTA1MSw1NTA1Miw1NTA1Myw1NTA1NCw1NTA1NSw1NTA1Niw1NTA1OCw1NTA1OSw1NTA2MCw1MjgyNCw1MjgyNSw1MjgyOCw1MjgzMSw1MjgzMiw1MjgzMyw1Mjg0MCw1Mjg0MSw1Mjg0Myw1Mjg0NSw1Mjg1Miw1Mjg1Myw1Mjg1Niw1Mjg2MCw1Mjg2OCw1Mjg2OSw1Mjg3MSw1Mjg3Myw1Mjg4MCw1Mjg4MSw1Mjg4NCw1Mjg4OCw1Mjg5Niw1Mjg5Nyw1Mjg5OSw1MjkwMCw1MjkwMSw1MjkwOCw1MjkwOSw1MjkyOSw1Mjk2NCw1Mjk2NSw1Mjk2OCw1Mjk3MSw1Mjk3Miw1Mjk4MCw1Mjk4MSw1Mjk4Myw1Mjk4NCw1Mjk4NSw1Mjk5Miw1Mjk5Myw1Mjk5Niw1MzAwMCw1MzAwOCw1MzAwOSw1MzAxMSw1MzAxMyw1MzAyMCw1MzAyNCw1MzAyOCw1MzAzNiw1MzAzNyw1MzAzOSw1MzA0MCw1MzA0MSw1MzA0OCw1MzA3Niw1MzA3Nyw1MzA4MCw1MzA4NCw1MzA5Miw1MzA5Myw1MzA5NSw1MzA5Nyw1MzEwNCw1MzEwNSw1MzEwOCw1MzExMiw1MzEyMCw1MzEyNSw1MzEzMiw1MzE1Myw1MzE2MCw1MzE2OCw1MzE4OCw1MzIxNiw1MzIxNyw1MzIyMCw1MzIyNCw1MzIzMiw1MzIzMyw1MzIzNSw1MzIzNyw1MzI0NCw1MzI0OCw1MzI1Miw1MzI2NSw1MzI3Miw1MzI5Myw1MzMwMCw1MzMwMSw1MzMwNCw1MzMwOCw1NTA2MSw1NTA2Miw1NTA2Myw1NTA2Niw1NTA2Nyw1NTA2OSw1NTA3MCw1NTA3MSw1NTA3Myw1NTA3NCw1NTA3NSw1NTA3Niw1NTA3Nyw1NTA3OCw1NTA3OSw1NTA4Miw1NTA4NCw1NTA4Niw1NTA4Nyw1NTA4OCw1NTA4OSw1NTA5MCw1NTA5MSw1NTA5NCw1NTA5NSw1NTA5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NTA5OCw1NTA5OSw1NTEwMSw1NTEwMiw1NTEwMyw1NTEwNCw1NTEwNSw1NTEwNiw1NTEwNyw1NTEwOSw1NTExMCw1NTExMiw1NTExNCw1NTExNSw1NTExNiw1NTExNyw1NTExOCw1NTExOSw1NTEyMiw1NTEyMyw1NTEyNSw1NTEzMCw1NTEzMSw1NTEzMiw1NTEzMyw1NTEzNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NTEzNSw1NTEzOCw1NTE0MCw1NTE0Miw1NTE0Myw1NTE0NCw1NTE0Niw1NTE0Nyw1NTE0OSw1NTE1MCw1NTE1MSw1NTE1Myw1NTE1NCw1NTE1NSw1NTE1Nyw1NTE1OCw1NTE1OSw1NTE2MCw1NTE2MSw1NTE2Miw1NTE2Myw1NTE2Niw1NTE2Nyw1NTE2OCw1NTE3MCw1NTE3MSw1NTE3Miw1NTE3Myw1NTE3NCw1NTE3NSw1NTE3OCw1NTE3OSw1MzMxNiw1MzMxNyw1MzMxOSw1MzMyMSw1MzMyOCw1MzMzMiw1MzMzNiw1MzM0NCw1MzM1Niw1MzM1Nyw1MzM2MCw1MzM2NCw1MzM3Miw1MzM3Myw1MzM3Nyw1MzQxMiw1MzQxMyw1MzQxNiw1MzQyMCw1MzQyOCw1MzQyOSw1MzQzMSw1MzQzMyw1MzQ0MCw1MzQ0MSw1MzQ0NCw1MzQ0OCw1MzQ0OSw1MzQ1Niw1MzQ1Nyw1MzQ1OSw1MzQ2MCw1MzQ2MSw1MzQ2OCw1MzQ2OSw1MzQ3Miw1MzQ3Niw1MzQ4NCw1MzQ4NSw1MzQ4Nyw1MzQ4OCw1MzQ4OSw1MzQ5Niw1MzUxNyw1MzU1Miw1MzU1Myw1MzU1Niw1MzU2MCw1MzU2Miw1MzU2OCw1MzU2OSw1MzU3MSw1MzU3Miw1MzU3Myw1MzU4MCw1MzU4MSw1MzU4NCw1MzU4OCw1MzU5Niw1MzU5Nyw1MzU5OSw1MzYwMSw1MzYwOCw1MzYxMiw1MzYyOCw1MzYzNiw1MzY0MCw1MzY2NCw1MzY2NSw1MzY2OCw1MzY3Miw1MzY4MCw1MzY4MSw1MzY4Myw1MzY4NSw1MzY5MCw1MzY5Miw1MzY5Niw1MzcyMCw1Mzc0OCw1Mzc1Miw1Mzc2Nyw1Mzc2OSw1Mzc3Niw1MzgwNCw1MzgwNSw1MzgwOCw1MzgxMiw1MzgyMCw1MzgyMSw1MzgyMyw1MzgyNSw1MzgzMiw1Mzg1Miw1NTE4MSw1NTE4Miw1NTE4Myw1NTE4NSw1NTE4Niw1NTE4Nyw1NTE4OCw1NTE4OSw1NTE5MCw1NTE5MSw1NTE5NCw1NTE5Niw1NTE5OCw1NTE5OSw1NTIwMCw1NTIwMSw1NTIwMiw1NTIwMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzg2MCw1Mzg4OCw1Mzg4OSw1Mzg5Miw1Mzg5Niw1MzkwNCw1MzkwNSw1MzkwOSw1MzkxNiw1MzkyMCw1MzkyNCw1MzkzMiw1MzkzNyw1Mzk0NCw1Mzk0NSw1Mzk0OCw1Mzk1MSw1Mzk1Miw1Mzk1NCw1Mzk2MCw1Mzk2MSw1Mzk2Myw1Mzk3Miw1Mzk3Niw1Mzk4MCw1Mzk4OCw1Mzk4OSw1NDAwMCw1NDAwMSw1NDAwNCw1NDAwOCw1NDAxNiw1NDAxNyw1NDAxOSw1NDAyMSw1NDAyOCw1NDAyOSw1NDAzMCw1NDAzMiw1NDAzNiw1NDAzOCw1NDA0NCw1NDA0NSw1NDA0Nyw1NDA0OCw1NDA0OSw1NDA1Myw1NDA1Niw1NDA1Nyw1NDA2MCw1NDA2NCw1NDA3Miw1NDA3Myw1NDA3NSw1NDA3Niw1NDA3Nyw1NDA4NCw1NDA4NSw1NDE0MCw1NDE0MSw1NDE0NCw1NDE0OCw1NDE1Niw1NDE1Nyw1NDE1OSw1NDE2MCw1NDE2MSw1NDE2OCw1NDE2OSw1NDE3Miw1NDE3Niw1NDE4NCw1NDE4NSw1NDE4Nyw1NDE4OSw1NDE5Niw1NDIwMCw1NDIwNCw1NDIxMiw1NDIxMyw1NDIxNiw1NDIxNyw1NDIyNCw1NDIzMiw1NDI0MSw1NDI0Myw1NDI1Miw1NDI1Myw1NDI1Niw1NDI2MCw1NDI2OCw1NDI2OSw1NDI3MSw1NDI3MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDI4MCw1NDMwMSw1NDMzNiw1NDM0MCw1NDM2NCw1NDM2OCw1NDM3Miw1NDM4MSw1NDM4Myw1NDM5Miw1NDM5Myw1NDM5Niw1NDM5OSw1NDQwMCw1NDQwMiw1NDQwOCw1NDQwOSw1NDQxMSw1NDQxMyw1NDQyMCw1NDQ0MSw1NDQ3Niw1NDQ4MCw1NDQ4NCw1NDQ5Miw1NDQ5NSw1NDUwNCw1NDUwOCw1NDUxMiw1NDUyMCw1NDUyMyw1NDUyNSw1NDUzMiw1NDUzNiw1NDU0MCw1NDU0OCw1NDU0OSw1NDU1MSw1NDU4OCw1NDU4OSw1NDU5Miw1NDU5Niw1NDYwNCw1NDYwNSw1NDYwNyw1NDYwOSw1NDYxNiw1NDYxNyw1NDYyMCw1NDYyNCw1NDYyOSw1NDYzMiw1NDYzMyw1NDYzNSw1NDYzNyw1NDY0NCw1NDY0NSw1NDY0OCw1NDY1Miw1NDY2MCw1NDY2MSw1NDY2Myw1NDY2NCw1NDY2NSw1NDY3Miw1NDY5Myw1NDcyOCw1NDcyOSw1NDczMiw1NDczNiw1NDczOCw1NDc0NCw1NDc0NSw1NDc0Nyw1NDc0OSw1NDc1Niw1NDc1Nyw1NDc2MCw1NDc2NCw1NDc3Miw1NDc3Myw1NDc3NSw1NDc3Nyw1NDc4NCw1NDc4NSw1NDc4OCw1NDc5Miw1NDgwMCw1NDgwMSw1NDgwMyw1NDgwNCw1NDgwNSw1NDgxMiw1NDgxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDgyMCw1NDgyOSw1NDg0MCw1NDg0MSw1NDg0NCw1NDg0OCw1NDg1Myw1NDg1Niw1NDg1Nyw1NDg1OSw1NDg2MSw1NDg2NSw1NDg2OCw1NDg2OSw1NDg3Miw1NDg3Niw1NDg4Nyw1NDg4OSw1NDg5Niw1NDg5Nyw1NDkwMCw1NDkxNSw1NDkxNyw1NDkyNCw1NDkyNSw1NDkyOCw1NDkzMiw1NDk0MSw1NDk0Myw1NDk0NSw1NDk1Miw1NDk1Niw1NDk2MCw1NDk2OSw1NDk3MSw1NDk4MCw1NDk4MSw1NDk4NCw1NDk4OCw1NDk5Myw1NDk5Niw1NDk5OSw1NTAwMSw1NTAwOCw1NTAxMiw1NTAxNiw1NTAyNCw1NTAyOSw1NTAzNiw1NTAzNyw1NTA0MCw1NTA0NCw1NTA1Nyw1NTA2NCw1NTA2NSw1NTA2OCw1NTA3Miw1NTA4MCw1NTA4MSw1NTA4Myw1NTA4NSw1NTA5Miw1NTA5Myw1NTA5Niw1NTEwMCw1NTEwOCw1NTExMSw1NTExMyw1NTEyMCw1NTEyMSw1NTEyNCw1NTEyNiw1NTEyNyw1NTEyOCw1NTEyOSw1NTEzNiw1NTEzNyw1NTEzOSw1NTE0MSw1NTE0NSw1NTE0OCw1NTE1Miw1NTE1Niw1NTE2NCw1NTE2NSw1NTE2OSw1NTE3Niw1NTE3Nyw1NTE4MCw1NTE4NCw1NTE5Miw1NTE5Myw1NTE5NSw1NTE5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwMjg1LDIwMzM5LDIwNTUxLDIwNzI5LDIxMTUyLDIxNDg3LDIxNjIxLDIxNzMzLDIyMDI1LDIzMjMzLDIzNDc4LDI2MjQ3LDI2NTUwLDI2NTUxLDI2NjA3LDI3NDY4LDI5NjM0LDMwMTQ2LDMxMjkyLDMzNDk5LDMzNTQwLDM0OTAzLDM0OTUyLDM1MzgyLDM2MDQwLDM2MzAzLDM2NjAzLDM2ODM4LDM5MzgxLDIxMDUxLDIxMzY0LDIxNTA4LDI0NjgyLDI0OTMyLDI3NTgwLDI5NjQ3LDMzMDUwLDM1MjU4LDM1MjgyLDM4MzA3LDIwMzU1LDIxMDAyLDIyNzE4LDIyOTA0LDIzMDE0LDI0MTc4LDI0MTg1LDI1MDMxLDI1NTM2LDI2NDM4LDI2NjA0LDI2NzUxLDI4NTY3LDMwMjg2LDMwNDc1LDMwOTY1LDMxMjQwLDMxNDg3LDMxNzc3LDMyOTI1LDMzMzkwLDMzMzkzLDM1NTYzLDM4MjkxLDIwMDc1LDIxOTE3LDI2MzU5LDI4MjEyLDMwODgzLDMxNDY5LDMzODgzLDM1MDg4LDM0NjM4LDM4ODI0LDIxMjA4LDIyMzUwLDIyNTcwLDIzODg0LDI0ODYzLDI1MDIyLDI1MTIxLDI1OTU0LDI2NTc3LDI3MjA0LDI4MTg3LDI5OTc2LDMwMTMxLDMwNDM1LDMwNjQwLDMyMDU4LDM3MDM5LDM3OTY5LDM3OTcwLDQwODUzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxMjgzLDIzNzI0LDMwMDAyLDMyOTg3LDM3NDQwLDM4Mjk2LDIxMDgzLDIyNTM2LDIzMDA0LDIzNzEzLDIzODMxLDI0MjQ3LDI0Mzc4LDI0Mzk0LDI0OTUxLDI3NzQzLDMwMDc0LDMwMDg2LDMxOTY4LDMyMTE1LDMyMTc3LDMyNjUyLDMzMTA4LDMzMzEzLDM0MTkzLDM1MTM3LDM1NjExLDM3NjI4LDM4NDc3LDQwMDA3LDIwMTcxLDIwMjE1LDIwNDkxLDIwOTc3LDIyNjA3LDI0ODg3LDI0ODk0LDI0OTM2LDI1OTEzLDI3MTE0LDI4NDMzLDMwMTE3LDMwMzQyLDMwNDIyLDMxNjIzLDMzNDQ1LDMzOTk1LDYzNzQ0LDM3Nzk5LDM4MjgzLDIxODg4LDIzNDU4LDIyMzUzLDYzNzQ1LDMxOTIzLDMyNjk3LDM3MzAxLDIwNTIwLDIxNDM1LDIzNjIxLDI0MDQwLDI1Mjk4LDI1NDU0LDI1ODE4LDI1ODMxLDI4MTkyLDI4ODQ0LDMxMDY3LDM2MzE3LDM2MzgyLDYzNzQ2LDM2OTg5LDM3NDQ1LDM3NjI0LDIwMDk0LDIwMjE0LDIwNTgxLDI0MDYyLDI0MzE0LDI0ODM4LDI2OTY3LDMzMTM3LDM0Mzg4LDM2NDIzLDM3NzQ5LDM5NDY3LDIwMDYyLDIwNjI1LDI2NDgwLDI2Njg4LDIwNzQ1LDIxMTMzLDIxMTM4LDI3Mjk4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMwNjUyLDM3MzkyLDQwNjYwLDIxMTYzLDI0NjIzLDM2ODUwLDIwNTUyLDI1MDAxLDI1NTgxLDI1ODAyLDI2Njg0LDI3MjY4LDI4NjA4LDMzMTYwLDM1MjMzLDM4NTQ4LDIyNTMzLDI5MzA5LDI5MzU2LDI5OTU2LDMyMTIxLDMyMzY1LDMyOTM3LDM1MjExLDM1NzAwLDM2OTYzLDQwMjczLDI1MjI1LDI3NzcwLDI4NTAwLDMyMDgwLDMyNTcwLDM1MzYzLDIwODYwLDI0OTA2LDMxNjQ1LDM1NjA5LDM3NDYzLDM3NzcyLDIwMTQwLDIwNDM1LDIwNTEwLDIwNjcwLDIwNzQyLDIxMTg1LDIxMTk3LDIxMzc1LDIyMzg0LDIyNjU5LDI0MjE4LDI0NDY1LDI0OTUwLDI1MDA0LDI1ODA2LDI1OTY0LDI2MjIzLDI2Mjk5LDI2MzU2LDI2Nzc1LDI4MDM5LDI4ODA1LDI4OTEzLDI5ODU1LDI5ODYxLDI5ODk4LDMwMTY5LDMwODI4LDMwOTU2LDMxNDU1LDMxNDc4LDMyMDY5LDMyMTQ3LDMyNzg5LDMyODMxLDMzMDUxLDMzNjg2LDM1Njg2LDM2NjI5LDM2ODg1LDM3ODU3LDM4OTE1LDM4OTY4LDM5NTE0LDM5OTEyLDIwNDE4LDIxODQzLDIyNTg2LDIyODY1LDIzMzk1LDIzNjIyLDI0NzYwLDI1MTA2LDI2NjkwLDI2ODAwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2ODU2LDI4MzMwLDMwMDI4LDMwMzI4LDMwOTI2LDMxMjkzLDMxOTk1LDMyMzYzLDMyMzgwLDM1MzM2LDM1NDg5LDM1OTAzLDM4NTQyLDQwMzg4LDIxNDc2LDIxNDgxLDIxNTc4LDIxNjE3LDIyMjY2LDIyOTkzLDIzMzk2LDIzNjExLDI0MjM1LDI1MzM1LDI1OTExLDI1OTI1LDI1OTcwLDI2MjcyLDI2NTQzLDI3MDczLDI3ODM3LDMwMjA0LDMwMzUyLDMwNTkwLDMxMjk1LDMyNjYwLDMyNzcxLDMyOTI5LDMzMTY3LDMzNTEwLDMzNTMzLDMzNzc2LDM0MjQxLDM0ODY1LDM0OTk2LDM1NDkzLDYzNzQ3LDM2NzY0LDM3Njc4LDM4NTk5LDM5MDE1LDM5NjQwLDQwNzIzLDIxNzQxLDI2MDExLDI2MzU0LDI2NzY3LDMxMjk2LDM1ODk1LDQwMjg4LDIyMjU2LDIyMzcyLDIzODI1LDI2MTE4LDI2ODAxLDI2ODI5LDI4NDE0LDI5NzM2LDM0OTc0LDM5OTA4LDI3NzUyLDYzNzQ4LDM5NTkyLDIwMzc5LDIwODQ0LDIwODQ5LDIxMTUxLDIzMzgwLDI0MDM3LDI0NjU2LDI0Njg1LDI1MzI5LDI1NTExLDI1OTE1LDI5NjU3LDMxMzU0LDM0NDY3LDM2MDAyLDM4Nzk5LDIwMDE4LDIzNTIxLDI1MDk2LDI2NTI0LDI5OTE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxMTg1LDMzNzQ3LDM1NDYzLDM1NTA2LDM2MzI4LDM2OTQyLDM3NzA3LDM4OTgyLDI0Mjc1LDI3MTEyLDM0MzAzLDM3MTAxLDYzNzQ5LDIwODk2LDIzNDQ4LDIzNTMyLDI0OTMxLDI2ODc0LDI3NDU0LDI4NzQ4LDI5NzQzLDI5OTEyLDMxNjQ5LDMyNTkyLDMzNzMzLDM1MjY0LDM2MDExLDM4MzY0LDM5MjA4LDIxMDM4LDI0NjY5LDI1MzI0LDM2ODY2LDIwMzYyLDIwODA5LDIxMjgxLDIyNzQ1LDI0MjkxLDI2MzM2LDI3OTYwLDI4ODI2LDI5Mzc4LDI5NjU0LDMxNTY4LDMzMDA5LDM3OTc5LDIxMzUwLDI1NDk5LDMyNjE5LDIwMDU0LDIwNjA4LDIyNjAyLDIyNzUwLDI0NjE4LDI0ODcxLDI1Mjk2LDI3MDg4LDM5NzQ1LDIzNDM5LDMyMDI0LDMyOTQ1LDM2NzAzLDIwMTMyLDIwNjg5LDIxNjc2LDIxOTMyLDIzMzA4LDIzOTY4LDI0MDM5LDI1ODk4LDI1OTM0LDI2NjU3LDI3MjExLDI5NDA5LDMwMzUwLDMwNzAzLDMyMDk0LDMyNzYxLDMzMTg0LDM0MTI2LDM0NTI3LDM2NjExLDM2Njg2LDM3MDY2LDM5MTcxLDM5NTA5LDM5ODUxLDE5OTkyLDIwMDM3LDIwMDYxLDIwMTY3LDIwNDY1LDIwODU1LDIxMjQ2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxMzEyLDIxNDc1LDIxNDc3LDIxNjQ2LDIyMDM2LDIyMzg5LDIyNDM0LDIzNDk1LDIzOTQzLDI0MjcyLDI1MDg0LDI1MzA0LDI1OTM3LDI2NTUyLDI2NjAxLDI3MDgzLDI3NDcyLDI3NTkwLDI3NjI4LDI3NzE0LDI4MzE3LDI4NzkyLDI5Mzk5LDI5NTkwLDI5Njk5LDMwNjU1LDMwNjk3LDMxMzUwLDMyMTI3LDMyNzc3LDMzMjc2LDMzMjg1LDMzMjkwLDMzNTAzLDM0OTE0LDM1NjM1LDM2MDkyLDM2NTQ0LDM2ODgxLDM3MDQxLDM3NDc2LDM3NTU4LDM5Mzc4LDM5NDkzLDQwMTY5LDQwNDA3LDQwODYwLDIyMjgzLDIzNjE2LDMzNzM4LDM4ODE2LDM4ODI3LDQwNjI4LDIxNTMxLDMxMzg0LDMyNjc2LDM1MDMzLDM2NTU3LDM3MDg5LDIyNTI4LDIzNjI0LDI1NDk2LDMxMzkxLDIzNDcwLDI0MzM5LDMxMzUzLDMxNDA2LDMzNDIyLDM2NTI0LDIwNTE4LDIxMDQ4LDIxMjQwLDIxMzY3LDIyMjgwLDI1MzMxLDI1NDU4LDI3NDAyLDI4MDk5LDMwNTE5LDIxNDEzLDI5NTI3LDM0MTUyLDM2NDcwLDM4MzU3LDI2NDI2LDI3MzMxLDI4NTI4LDM1NDM3LDM2NTU2LDM5MjQzLDYzNzUwLDI2MjMxLDI3NTEyLDM2MDIwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM5NzQwLDYzNzUxLDIxNDgzLDIyMzE3LDIyODYyLDI1NTQyLDI3MTMxLDI5Njc0LDMwNzg5LDMxNDE4LDMxNDI5LDMxOTk4LDMzOTA5LDM1MjE1LDM2MjExLDM2OTE3LDM4MzEyLDIxMjQzLDIyMzQzLDMwMDIzLDMxNTg0LDMzNzQwLDM3NDA2LDYzNzUyLDI3MjI0LDIwODExLDIxMDY3LDIxMTI3LDI1MTE5LDI2ODQwLDI2OTk3LDM4NTUzLDIwNjc3LDIxMTU2LDIxMjIwLDI1MDI3LDI2MDIwLDI2NjgxLDI3MTM1LDI5ODIyLDMxNTYzLDMzNDY1LDMzNzcxLDM1MjUwLDM1NjQxLDM2ODE3LDM5MjQxLDYzNzUzLDIwMTcwLDIyOTM1LDI1ODEwLDI2MTI5LDI3Mjc4LDI5NzQ4LDMxMTA1LDMxMTY1LDMzNDQ5LDM0OTQyLDM0OTQzLDM1MTY3LDYzNzU0LDM3NjcwLDIwMjM1LDIxNDUwLDI0NjEzLDI1MjAxLDI3NzYyLDMyMDI2LDMyMTAyLDIwMTIwLDIwODM0LDMwNjg0LDMyOTQzLDIwMjI1LDIwMjM4LDIwODU0LDIwODY0LDIxOTgwLDIyMTIwLDIyMzMxLDIyNTIyLDIyNTI0LDIyODA0LDIyODU1LDIyOTMxLDIzNDkyLDIzNjk2LDIzODIyLDI0MDQ5LDI0MTkwLDI0NTI0LDI1MjE2LDI2MDcxLDI2MDgzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2Mzk4LDI2Mzk5LDI2NDYyLDI2ODI3LDI2ODIwLDI3MjMxLDI3NDUwLDI3NjgzLDI3NzczLDI3Nzc4LDI4MTAzLDI5NTkyLDI5NzM0LDI5NzM4LDI5ODI2LDI5ODU5LDMwMDcyLDMwMDc5LDMwODQ5LDMwOTU5LDMxMDQxLDMxMDQ3LDMxMDQ4LDMxMDk4LDMxNjM3LDMyMDAwLDMyMTg2LDMyNjQ4LDMyNzc0LDMyODEzLDMyOTA4LDM1MzUyLDM1NjYzLDM1OTEyLDM2MjE1LDM3NjY1LDM3NjY4LDM5MTM4LDM5MjQ5LDM5NDM4LDM5NDM5LDM5NTI1LDQwNTk0LDMyMjAyLDIwMzQyLDIxNTEzLDI1MzI2LDI2NzA4LDM3MzI5LDIxOTMxLDIwNzk0LDYzNzU1LDYzNzU2LDIzMDY4LDI1MDYyLDYzNzU3LDI1Mjk1LDI1MzQzLDYzNzU4LDYzNzU5LDYzNzYwLDYzNzYxLDYzNzYyLDYzNzYzLDM3MDI3LDYzNzY0LDYzNzY1LDYzNzY2LDYzNzY3LDYzNzY4LDM1NTgyLDYzNzY5LDYzNzcwLDYzNzcxLDYzNzcyLDI2MjYyLDYzNzczLDI5MDE0LDYzNzc0LDYzNzc1LDM4NjI3LDYzNzc2LDI1NDIzLDI1NDY2LDIxMzM1LDYzNzc3LDI2NTExLDI2OTc2LDI4Mjc1LDYzNzc4LDMwMDA3LDYzNzc5LDYzNzgwLDYzNzgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMyMDEzLDYzNzgyLDYzNzgzLDM0OTMwLDIyMjE4LDIzMDY0LDYzNzg0LDYzNzg1LDYzNzg2LDYzNzg3LDYzNzg4LDIwMDM1LDYzNzg5LDIwODM5LDIyODU2LDI2NjA4LDMyNzg0LDYzNzkwLDIyODk5LDI0MTgwLDI1NzU0LDMxMTc4LDI0NTY1LDI0Njg0LDI1Mjg4LDI1NDY3LDIzNTI3LDIzNTExLDIxMTYyLDYzNzkxLDIyOTAwLDI0MzYxLDI0NTk0LDYzNzkyLDYzNzkzLDYzNzk0LDI5Nzg1LDYzNzk1LDYzNzk2LDYzNzk3LDYzNzk4LDYzNzk5LDYzODAwLDM5Mzc3LDYzODAxLDYzODAyLDYzODAzLDYzODA0LDYzODA1LDYzODA2LDYzODA3LDYzODA4LDYzODA5LDYzODEwLDYzODExLDI4NjExLDYzODEyLDYzODEzLDMzMjE1LDM2Nzg2LDI0ODE3LDYzODE0LDYzODE1LDMzMTI2LDYzODE2LDYzODE3LDIzNjE1LDYzODE4LDYzODE5LDYzODIwLDYzODIxLDYzODIyLDYzODIzLDYzODI0LDYzODI1LDIzMjczLDM1MzY1LDI2NDkxLDMyMDE2LDYzODI2LDYzODI3LDYzODI4LDYzODI5LDYzODMwLDYzODMxLDMzMDIxLDYzODMyLDYzODMzLDIzNjEyLDI3ODc3LDIxMzExLDI4MzQ2LDIyODEwLDMzNTkwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwMDI1LDIwMTUwLDIwMjk0LDIxOTM0LDIyMjk2LDIyNzI3LDI0NDA2LDI2MDM5LDI2MDg2LDI3MjY0LDI3NTczLDI4MjM3LDMwNzAxLDMxNDcxLDMxNzc0LDMyMjIyLDM0NTA3LDM0OTYyLDM3MTcwLDM3NzIzLDI1Nzg3LDI4NjA2LDI5NTYyLDMwMTM2LDM2OTQ4LDIxODQ2LDIyMzQ5LDI1MDE4LDI1ODEyLDI2MzExLDI4MTI5LDI4MjUxLDI4NTI1LDI4NjAxLDMwMTkyLDMyODM1LDMzMjEzLDM0MTEzLDM1MjAzLDM1NTI3LDM1Njc0LDM3NjYzLDI3Nzk1LDMwMDM1LDMxNTcyLDM2MzY3LDM2OTU3LDIxNzc2LDIyNTMwLDIyNjE2LDI0MTYyLDI1MDk1LDI1NzU4LDI2ODQ4LDMwMDcwLDMxOTU4LDM0NzM5LDQwNjgwLDIwMTk1LDIyNDA4LDIyMzgyLDIyODIzLDIzNTY1LDIzNzI5LDI0MTE4LDI0NDUzLDI1MTQwLDI1ODI1LDI5NjE5LDMzMjc0LDM0OTU1LDM2MDI0LDM4NTM4LDQwNjY3LDIzNDI5LDI0NTAzLDI0NzU1LDIwNDk4LDIwOTkyLDIxMDQwLDIyMjk0LDIyNTgxLDIyNjE1LDIzNTY2LDIzNjQ4LDIzNzk4LDIzOTQ3LDI0MjMwLDI0NDY2LDI0NzY0LDI1MzYxLDI1NDgxLDI1NjIzLDI2NjkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2ODczLDI3MzMwLDI4MTIwLDI4MTkzLDI4MzcyLDI4NjQ0LDI5MTgyLDMwNDI4LDMwNTg1LDMxMTUzLDMxMjkxLDMzNzk2LDM1MjQxLDM2MDc3LDM2MzM5LDM2NDI0LDM2ODY3LDM2ODg0LDM2OTQ3LDM3MTE3LDM3NzA5LDM4NTE4LDM4ODc2LDI3NjAyLDI4Njc4LDI5MjcyLDI5MzQ2LDI5NTQ0LDMwNTYzLDMxMTY3LDMxNzE2LDMyNDExLDM1NzEyLDIyNjk3LDI0Nzc1LDI1OTU4LDI2MTA5LDI2MzAyLDI3Nzg4LDI4OTU4LDI5MTI5LDM1OTMwLDM4OTMxLDIwMDc3LDMxMzYxLDIwMTg5LDIwOTA4LDIwOTQxLDIxMjA1LDIxNTE2LDI0OTk5LDI2NDgxLDI2NzA0LDI2ODQ3LDI3OTM0LDI4NTQwLDMwMTQwLDMwNjQzLDMxNDYxLDMzMDEyLDMzODkxLDM3NTA5LDIwODI4LDI2MDA3LDI2NDYwLDI2NTE1LDMwMTY4LDMxNDMxLDMzNjUxLDYzODM0LDM1OTEwLDM2ODg3LDM4OTU3LDIzNjYzLDMzMjE2LDMzNDM0LDM2OTI5LDM2OTc1LDM3Mzg5LDI0NDcxLDIzOTY1LDI3MjI1LDI5MTI4LDMwMzMxLDMxNTYxLDM0Mjc2LDM1NTg4LDM3MTU5LDM5NDcyLDIxODk1LDI1MDc4LDYzODM1LDMwMzEzLDMyNjQ1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM0MzY3LDM0NzQ2LDM1MDY0LDM3MDA3LDYzODM2LDI3OTMxLDI4ODg5LDI5NjYyLDMyMDk3LDMzODUzLDYzODM3LDM3MjI2LDM5NDA5LDYzODM4LDIwMDk4LDIxMzY1LDI3Mzk2LDI3NDEwLDI4NzM0LDI5MjExLDM0MzQ5LDQwNDc4LDIxMDY4LDM2NzcxLDIzODg4LDI1ODI5LDI1OTAwLDI3NDE0LDI4NjUxLDMxODExLDMyNDEyLDM0MjUzLDM1MTcyLDM1MjYxLDI1Mjg5LDMzMjQwLDM0ODQ3LDI0MjY2LDI2MzkxLDI4MDEwLDI5NDM2LDI5NzAxLDI5ODA3LDM0NjkwLDM3MDg2LDIwMzU4LDIzODIxLDI0NDgwLDMzODAyLDIwOTE5LDI1NTA0LDMwMDUzLDIwMTQyLDIwNDg2LDIwODQxLDIwOTM3LDI2NzUzLDI3MTUzLDMxOTE4LDMxOTIxLDMxOTc1LDMzMzkxLDM1NTM4LDM2NjM1LDM3MzI3LDIwNDA2LDIwNzkxLDIxMjM3LDIxNTcwLDI0MzAwLDI0OTQyLDI1MTUwLDI2MDUzLDI3MzU0LDI4NjcwLDMxMDE4LDM0MjY4LDM0ODUxLDM4MzE3LDM5NTIyLDM5NTMwLDQwNTk5LDQwNjU0LDIxMTQ3LDI2MzEwLDI3NTExLDI4NzAxLDMxMDE5LDM2NzA2LDM4NzIyLDI0OTc2LDI1MDg4LDI1ODkxLDI4NDUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI5MDAxLDI5ODMzLDMyMjQ0LDMyODc5LDM0MDMwLDM2NjQ2LDM2ODk5LDM3NzA2LDIwOTI1LDIxMDE1LDIxMTU1LDI3OTE2LDI4ODcyLDM1MDEwLDI0MjY1LDI1OTg2LDI3NTY2LDI4NjEwLDMxODA2LDI5NTU3LDIwMTk2LDIwMjc4LDIyMjY1LDYzODM5LDIzNzM4LDIzOTk0LDI0NjA0LDI5NjE4LDMxNTMzLDMyNjY2LDMyNzE4LDMyODM4LDM2ODk0LDM3NDI4LDM4NjQ2LDM4NzI4LDM4OTM2LDQwODAxLDIwMzYzLDI4NTgzLDMxMTUwLDM3MzAwLDM4NTgzLDIxMjE0LDYzODQwLDI1NzM2LDI1Nzk2LDI3MzQ3LDI4NTEwLDI4Njk2LDI5MjAwLDMwNDM5LDMyNzY5LDM0MzEwLDM0Mzk2LDM2MzM1LDM2NjEzLDM4NzA2LDM5NzkxLDQwNDQyLDQwNTY1LDMwODYwLDMxMTAzLDMyMTYwLDMzNzM3LDM3NjM2LDQwNTc1LDQwNTk1LDM1NTQyLDIyNzUxLDI0MzI0LDI2NDA3LDI4NzExLDI5OTAzLDMxODQwLDMyODk0LDIwNzY5LDI4NzEyLDI5MjgyLDMwOTIyLDM2MDM0LDM2MDU4LDM2MDg0LDM4NjQ3LDIwMTAyLDIwNjk4LDIzNTM0LDI0Mjc4LDI2MDA5LDI5MTM0LDMwMjc0LDMwNjM3LDMyODQyLDM0MDQ0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2OTg4LDM5NzE5LDQwODQ1LDIyNzQ0LDIzMTA1LDIzNjUwLDI3MTU1LDI4MTIyLDI4NDMxLDMwMjY3LDMyMDQ3LDMyMzExLDM0MDc4LDM1MTI4LDM3ODYwLDM4NDc1LDIxMTI5LDI2MDY2LDI2NjExLDI3MDYwLDI3OTY5LDI4MzE2LDI4Njg3LDI5NzA1LDI5NzkyLDMwMDQxLDMwMjQ0LDMwODI3LDM1NjI4LDM5MDA2LDIwODQ1LDI1MTM0LDM4NTIwLDIwMzc0LDIwNTIzLDIzODMzLDI4MTM4LDMyMTg0LDM2NjUwLDI0NDU5LDI0OTAwLDI2NjQ3LDYzODQxLDM4NTM0LDIxMjAyLDMyOTA3LDIwOTU2LDIwOTQwLDI2OTc0LDMxMjYwLDMyMTkwLDMzNzc3LDM4NTE3LDIwNDQyLDIxMDMzLDIxNDAwLDIxNTE5LDIxNzc0LDIzNjUzLDI0NzQzLDI2NDQ2LDI2NzkyLDI4MDEyLDI5MzEzLDI5NDMyLDI5NzAyLDI5ODI3LDYzODQyLDMwMTc4LDMxODUyLDMyNjMzLDMyNjk2LDMzNjczLDM1MDIzLDM1MDQxLDM3MzI0LDM3MzI4LDM4NjI2LDM5ODgxLDIxNTMzLDI4NTQyLDI5MTM2LDI5ODQ4LDM0Mjk4LDM2NTIyLDM4NTYzLDQwMDIzLDQwNjA3LDI2NTE5LDI4MTA3LDI5NzQ3LDMzMjU2LDM4Njc4LDMwNzY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxNDM1LDMxNTIwLDMxODkwLDI1NzA1LDI5ODAyLDMwMTk0LDMwOTA4LDMwOTUyLDM5MzQwLDM5NzY0LDQwNjM1LDIzNTE4LDI0MTQ5LDI4NDQ4LDMzMTgwLDMzNzA3LDM3MDAwLDE5OTc1LDIxMzI1LDIzMDgxLDI0MDE4LDI0Mzk4LDI0OTMwLDI1NDA1LDI2MjE3LDI2MzY0LDI4NDE1LDI4NDU5LDI4NzcxLDMwNjIyLDMzODM2LDM0MDY3LDM0ODc1LDM2NjI3LDM5MjM3LDM5OTk1LDIxNzg4LDI1MjczLDI2NDExLDI3ODE5LDMzNTQ1LDM1MTc4LDM4Nzc4LDIwMTI5LDIyOTE2LDI0NTM2LDI0NTM3LDI2Mzk1LDMyMTc4LDMyNTk2LDMzNDI2LDMzNTc5LDMzNzI1LDM2NjM4LDM3MDE3LDIyNDc1LDIyOTY5LDIzMTg2LDIzNTA0LDI2MTUxLDI2NTIyLDI2NzU3LDI3NTk5LDI5MDI4LDMyNjI5LDM2MDIzLDM2MDY3LDM2OTkzLDM5NzQ5LDMzMDMyLDM1OTc4LDM4NDc2LDM5NDg4LDQwNjEzLDIzMzkxLDI3NjY3LDI5NDY3LDMwNDUwLDMwNDMxLDMzODA0LDIwOTA2LDM1MjE5LDIwODEzLDIwODg1LDIxMTkzLDI2ODI1LDI3Nzk2LDMwNDY4LDMwNDk2LDMyMTkxLDMyMjM2LDM4NzU0LDQwNjI5LDI4MzU3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM0MDY1LDIwOTAxLDIxNTE3LDIxNjI5LDI2MTI2LDI2MjY5LDI2OTE5LDI4MzE5LDMwMzk5LDMwNjA5LDMzNTU5LDMzOTg2LDM0NzE5LDM3MjI1LDM3NTI4LDQwMTgwLDM0OTQ2LDIwMzk4LDIwODgyLDIxMjE1LDIyOTgyLDI0MTI1LDI0OTE3LDI1NzIwLDI1NzIxLDI2Mjg2LDI2NTc2LDI3MTY5LDI3NTk3LDI3NjExLDI5Mjc5LDI5MjgxLDI5NzYxLDMwNTIwLDMwNjgzLDMyNzkxLDMzNDY4LDMzNTQxLDM1NTg0LDM1NjI0LDM1OTgwLDI2NDA4LDI3NzkyLDI5Mjg3LDMwNDQ2LDMwNTY2LDMxMzAyLDQwMzYxLDI3NTE5LDI3Nzk0LDIyODE4LDI2NDA2LDMzOTQ1LDIxMzU5LDIyNjc1LDIyOTM3LDI0Mjg3LDI1NTUxLDI2MTY0LDI2NDgzLDI4MjE4LDI5NDgzLDMxNDQ3LDMzNDk1LDM3NjcyLDIxMjA5LDI0MDQzLDI1MDA2LDI1MDM1LDI1MDk4LDI1Mjg3LDI1NzcxLDI2MDgwLDI2OTY5LDI3NDk0LDI3NTk1LDI4OTYxLDI5Njg3LDMwMDQ1LDMyMzI2LDMzMzEwLDMzNTM4LDM0MTU0LDM1NDkxLDM2MDMxLDM4Njk1LDQwMjg5LDIyNjk2LDQwNjY0LDIwNDk3LDIxMDA2LDIxNTYzLDIxODM5LDI1OTkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI3NzY2LDMyMDEwLDMyMDExLDMyODYyLDM0NDQyLDM4MjcyLDM4NjM5LDIxMjQ3LDI3Nzk3LDI5Mjg5LDIxNjE5LDIzMTk0LDIzNjE0LDIzODgzLDI0Mzk2LDI0NDk0LDI2NDEwLDI2ODA2LDI2OTc5LDI4MjIwLDI4MjI4LDMwNDczLDMxODU5LDMyNjU0LDM0MTgzLDM1NTk4LDM2ODU1LDM4NzUzLDQwNjkyLDIzNzM1LDI0NzU4LDI0ODQ1LDI1MDAzLDI1OTM1LDI2MTA3LDI2MTA4LDI3NjY1LDI3ODg3LDI5NTk5LDI5NjQxLDMyMjI1LDM4MjkyLDIzNDk0LDM0NTg4LDM1NjAwLDIxMDg1LDIxMzM4LDI1MjkzLDI1NjE1LDI1Nzc4LDI2NDIwLDI3MTkyLDI3ODUwLDI5NjMyLDI5ODU0LDMxNjM2LDMxODkzLDMyMjgzLDMzMTYyLDMzMzM0LDM0MTgwLDM2ODQzLDM4NjQ5LDM5MzYxLDIwMjc2LDIxMzIyLDIxNDUzLDIxNDY3LDI1MjkyLDI1NjQ0LDI1ODU2LDI2MDAxLDI3MDc1LDI3ODg2LDI4NTA0LDI5Njc3LDMwMDM2LDMwMjQyLDMwNDM2LDMwNDYwLDMwOTI4LDMwOTcxLDMxMDIwLDMyMDcwLDMzMzI0LDM0Nzg0LDM2ODIwLDM4OTMwLDM5MTUxLDIxMTg3LDI1MzAwLDI1NzY1LDI4MTk2LDI4NDk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMwMzMyLDM2Mjk5LDM3Mjk3LDM3NDc0LDM5NjYyLDM5NzQ3LDIwNTE1LDIwNjIxLDIyMzQ2LDIyOTUyLDIzNTkyLDI0MTM1LDI0NDM5LDI1MTUxLDI1OTE4LDI2MDQxLDI2MDQ5LDI2MTIxLDI2NTA3LDI3MDM2LDI4MzU0LDMwOTE3LDMyMDMzLDMyOTM4LDMzMTUyLDMzMzIzLDMzNDU5LDMzOTUzLDM0NDQ0LDM1MzcwLDM1NjA3LDM3MDMwLDM4NDUwLDQwODQ4LDIwNDkzLDIwNDY3LDYzODQzLDIyNTIxLDI0NDcyLDI1MzA4LDI1NDkwLDI2NDc5LDI4MjI3LDI4OTUzLDMwNDAzLDMyOTcyLDMyOTg2LDM1MDYwLDM1MDYxLDM1MDk3LDM2MDY0LDM2NjQ5LDM3MTk3LDM4NTA2LDIwMjcxLDIwMzM2LDI0MDkxLDI2NTc1LDI2NjU4LDMwMzMzLDMwMzM0LDM5NzQ4LDI0MTYxLDI3MTQ2LDI5MDMzLDI5MTQwLDMwMDU4LDYzODQ0LDMyMzIxLDM0MTE1LDM0MjgxLDM5MTMyLDIwMjQwLDMxNTY3LDMyNjI0LDM4MzA5LDIwOTYxLDI0MDcwLDI2ODA1LDI3NzEwLDI3NzI2LDI3ODY3LDI5MzU5LDMxNjg0LDMzNTM5LDI3ODYxLDI5NzU0LDIwNzMxLDIxMTI4LDIyNzIxLDI1ODE2LDI3Mjg3LDI5ODYzLDMwMjk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMwODg3LDM0MzI3LDM4MzcwLDM4NzEzLDYzODQ1LDIxMzQyLDI0MzIxLDM1NzIyLDM2Nzc2LDM2NzgzLDM3MDAyLDIxMDI5LDMwNjI5LDQwMDA5LDQwNzEyLDE5OTkzLDIwNDgyLDIwODUzLDIzNjQzLDI0MTgzLDI2MTQyLDI2MTcwLDI2NTY0LDI2ODIxLDI4ODUxLDI5OTUzLDMwMTQ5LDMxMTc3LDMxNDUzLDM2NjQ3LDM5MjAwLDM5NDMyLDIwNDQ1LDIyNTYxLDIyNTc3LDIzNTQyLDI2MjIyLDI3NDkzLDI3OTIxLDI4MjgyLDI4NTQxLDI5NjY4LDI5OTk1LDMzNzY5LDM1MDM2LDM1MDkxLDM1Njc2LDM2NjI4LDIwMjM5LDIwNjkzLDIxMjY0LDIxMzQwLDIzNDQzLDI0NDg5LDI2MzgxLDMxMTE5LDMzMTQ1LDMzNTgzLDM0MDY4LDM1MDc5LDM1MjA2LDM2NjY1LDM2NjY3LDM5MzMzLDM5OTU0LDI2NDEyLDIwMDg2LDIwNDcyLDIyODU3LDIzNTUzLDIzNzkxLDIzNzkyLDI1NDQ3LDI2ODM0LDI4OTI1LDI5MDkwLDI5NzM5LDMyMjk5LDM0MDI4LDM0NTYyLDM2ODk4LDM3NTg2LDQwMTc5LDE5OTgxLDIwMTg0LDIwNDYzLDIwNjEzLDIxMDc4LDIxMTAzLDIxNTQyLDIxNjQ4LDIyNDk2LDIyODI3LDIzMTQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIzMzg2LDIzNDEzLDIzNTAwLDI0MjIwLDYzODQ2LDI1MjA2LDI1OTc1LDI2MDIzLDI4MDE0LDI4MzI1LDI5MjM4LDMxNTI2LDMxODA3LDMyNTY2LDMzMTA0LDMzMTA1LDMzMTc4LDMzMzQ0LDMzNDMzLDMzNzA1LDM1MzMxLDM2MDAwLDM2MDcwLDM2MDkxLDM2MjEyLDM2MjgyLDM3MDk2LDM3MzQwLDM4NDI4LDM4NDY4LDM5Mzg1LDQwMTY3LDIxMjcxLDIwOTk4LDIxNTQ1LDIyMTMyLDIyNzA3LDIyODY4LDIyODk0LDI0NTc1LDI0OTk2LDI1MTk4LDI2MTI4LDI3Nzc0LDI4OTU0LDMwNDA2LDMxODgxLDMxOTY2LDMyMDI3LDMzNDUyLDM2MDMzLDM4NjQwLDYzODQ3LDIwMzE1LDI0MzQzLDI0NDQ3LDI1MjgyLDIzODQ5LDI2Mzc5LDI2ODQyLDMwODQ0LDMyMzIzLDQwMzAwLDE5OTg5LDIwNjMzLDIxMjY5LDIxMjkwLDIxMzI5LDIyOTE1LDIzMTM4LDI0MTk5LDI0NzU0LDI0OTcwLDI1MTYxLDI1MjA5LDI2MDAwLDI2NTAzLDI3MDQ3LDI3NjA0LDI3NjA2LDI3NjA3LDI3NjA4LDI3ODMyLDYzODQ4LDI5NzQ5LDMwMjAyLDMwNzM4LDMwODY1LDMxMTg5LDMxMTkyLDMxODc1LDMyMjAzLDMyNzM3LDMyOTMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMzMDg2LDMzMjE4LDMzNzc4LDM0NTg2LDM1MDQ4LDM1NTEzLDM1NjkyLDM2MDI3LDM3MTQ1LDM4NzUwLDM5MTMxLDQwNzYzLDIyMTg4LDIzMzM4LDI0NDI4LDI1OTk2LDI3MzE1LDI3NTY3LDI3OTk2LDI4NjU3LDI4NjkzLDI5Mjc3LDI5NjEzLDM2MDA3LDM2MDUxLDM4OTcxLDI0OTc3LDI3NzAzLDMyODU2LDM5NDI1LDIwMDQ1LDIwMTA3LDIwMTIzLDIwMTgxLDIwMjgyLDIwMjg0LDIwMzUxLDIwNDQ3LDIwNzM1LDIxNDkwLDIxNDk2LDIxNzY2LDIxOTg3LDIyMjM1LDIyNzYzLDIyODgyLDIzMDU3LDIzNTMxLDIzNTQ2LDIzNTU2LDI0MDUxLDI0MTA3LDI0NDczLDI0NjA1LDI1NDQ4LDI2MDEyLDI2MDMxLDI2NjE0LDI2NjE5LDI2Nzk3LDI3NTE1LDI3ODAxLDI3ODYzLDI4MTk1LDI4NjgxLDI5NTA5LDMwNzIyLDMxMDM4LDMxMDQwLDMxMDcyLDMxMTY5LDMxNzIxLDMyMDIzLDMyMTE0LDMyOTAyLDMzMjkzLDMzNjc4LDM0MDAxLDM0NTAzLDM1MDM5LDM1NDA4LDM1NDIyLDM1NjEzLDM2MDYwLDM2MTk4LDM2NzgxLDM3MDM0LDM5MTY0LDM5MzkxLDQwNjA1LDIxMDY2LDYzODQ5LDI2Mzg4LDYzODUwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwNjMyLDIxMDM0LDIzNjY1LDI1OTU1LDI3NzMzLDI5NjQyLDI5OTg3LDMwMTA5LDMxNjM5LDMzOTQ4LDM3MjQwLDM4NzA0LDIwMDg3LDI1NzQ2LDI3NTc4LDI5MDIyLDM0MjE3LDE5OTc3LDYzODUxLDI2NDQxLDI2ODYyLDI4MTgzLDMzNDM5LDM0MDcyLDM0OTIzLDI1NTkxLDI4NTQ1LDM3Mzk0LDM5MDg3LDE5OTc4LDIwNjYzLDIwNjg3LDIwNzY3LDIxODMwLDIxOTMwLDIyMDM5LDIzMzYwLDIzNTc3LDIzNzc2LDI0MTIwLDI0MjAyLDI0MjI0LDI0MjU4LDI0ODE5LDI2NzA1LDI3MjMzLDI4MjQ4LDI5MjQ1LDI5MjQ4LDI5Mzc2LDMwNDU2LDMxMDc3LDMxNjY1LDMyNzI0LDM1MDU5LDM1MzE2LDM1NDQzLDM1OTM3LDM2MDYyLDM4Njg0LDIyNjIyLDI5ODg1LDM2MDkzLDIxOTU5LDYzODUyLDMxMzI5LDMyMDM0LDMzMzk0LDI5Mjk4LDI5OTgzLDI5OTg5LDYzODUzLDMxNTEzLDIyNjYxLDIyNzc5LDIzOTk2LDI0MjA3LDI0MjQ2LDI0NDY0LDI0NjYxLDI1MjM0LDI1NDcxLDI1OTMzLDI2MjU3LDI2MzI5LDI2MzYwLDI2NjQ2LDI2ODY2LDI5MzEyLDI5NzkwLDMxNTk4LDMyMTEwLDMyMjE0LDMyNjI2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMyOTk3LDMzMjk4LDM0MjIzLDM1MTk5LDM1NDc1LDM2ODkzLDM3NjA0LDQwNjUzLDQwNzM2LDIyODA1LDIyODkzLDI0MTA5LDI0Nzk2LDI2MTMyLDI2MjI3LDI2NTEyLDI3NzI4LDI4MTAxLDI4NTExLDMwNzA3LDMwODg5LDMzOTkwLDM3MzIzLDM3Njc1LDIwMTg1LDIwNjgyLDIwODA4LDIxODkyLDIzMzA3LDIzNDU5LDI1MTU5LDI1OTgyLDI2MDU5LDI4MjEwLDI5MDUzLDI5Njk3LDI5NzY0LDI5ODMxLDI5ODg3LDMwMzE2LDMxMTQ2LDMyMjE4LDMyMzQxLDMyNjgwLDMzMTQ2LDMzMjAzLDMzMzM3LDM0MzMwLDM0Nzk2LDM1NDQ1LDM2MzIzLDM2OTg0LDM3NTIxLDM3OTI1LDM5MjQ1LDM5ODU0LDIxMzUyLDIzNjMzLDI2OTY0LDI3ODQ0LDI3OTQ1LDI4MjAzLDMzMjkyLDM0MjAzLDM1MTMxLDM1MzczLDM1NDk4LDM4NjM0LDQwODA3LDIxMDg5LDI2Mjk3LDI3NTcwLDMyNDA2LDM0ODE0LDM2MTA5LDM4Mjc1LDM4NDkzLDI1ODg1LDI4MDQxLDI5MTY2LDYzODU0LDIyNDc4LDIyOTk1LDIzNDY4LDI0NjE1LDI0ODI2LDI1MTA0LDI2MTQzLDI2MjA3LDI5NDgxLDI5Njg5LDMwNDI3LDMwNDY1LDMxNTk2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMyODU0LDMyODgyLDMzMTI1LDM1NDg4LDM3MjY2LDE5OTkwLDIxMjE4LDI3NTA2LDI3OTI3LDMxMjM3LDMxNTQ1LDMyMDQ4LDYzODU1LDM2MDE2LDIxNDg0LDIyMDYzLDIyNjA5LDIzNDc3LDIzNTY3LDIzNTY5LDI0MDM0LDI1MTUyLDI1NDc1LDI1NjIwLDI2MTU3LDI2ODAzLDI3ODM2LDI4MDQwLDI4MzM1LDI4NzAzLDI4ODM2LDI5MTM4LDI5OTkwLDMwMDk1LDMwMDk0LDMwMjMzLDMxNTA1LDMxNzEyLDMxNzg3LDMyMDMyLDMyMDU3LDM0MDkyLDM0MTU3LDM0MzExLDM1MzgwLDM2ODc3LDM2OTYxLDM3MDQ1LDM3NTU5LDM4OTAyLDM5NDc5LDIwNDM5LDIzNjYwLDI2NDYzLDI4MDQ5LDMxOTAzLDMyMzk2LDM1NjA2LDM2MTE4LDM2ODk1LDIzNDAzLDI0MDYxLDI1NjEzLDMzOTg0LDM2OTU2LDM5MTM3LDI5NTc1LDIzNDM1LDI0NzMwLDI2NDk0LDI4MTI2LDM1MzU5LDM1NDk0LDM2ODY1LDM4OTI0LDIxMDQ3LDYzODU2LDI4NzUzLDMwODYyLDM3NzgyLDM0OTI4LDM3MzM1LDIwNDYyLDIxNDYzLDIyMDEzLDIyMjM0LDIyNDAyLDIyNzgxLDIzMjM0LDIzNDMyLDIzNzIzLDIzNzQ0LDI0MTAxLDI0ODMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI1MTAxLDI1MTYzLDI1NDgwLDI1NjI4LDI1OTEwLDI1OTc2LDI3MTkzLDI3NTMwLDI3NzAwLDI3OTI5LDI4NDY1LDI5MTU5LDI5NDE3LDI5NTYwLDI5NzAzLDI5ODc0LDMwMjQ2LDMwNTYxLDMxMTY4LDMxMzE5LDMxNDY2LDMxOTI5LDMyMTQzLDMyMTcyLDMyMzUzLDMyNjcwLDMzMDY1LDMzNTg1LDMzOTM2LDM0MDEwLDM0MjgyLDM0OTY2LDM1NTA0LDM1NzI4LDM2NjY0LDM2OTMwLDM2OTk1LDM3MjI4LDM3NTI2LDM3NTYxLDM4NTM5LDM4NTY3LDM4NTY4LDM4NjE0LDM4NjU2LDM4OTIwLDM5MzE4LDM5NjM1LDM5NzA2LDIxNDYwLDIyNjU0LDIyODA5LDIzNDA4LDIzNDg3LDI4MTEzLDI4NTA2LDI5MDg3LDI5NzI5LDI5ODgxLDMyOTAxLDMzNzg5LDI0MDMzLDI0NDU1LDI0NDkwLDI0NjQyLDI2MDkyLDI2NjQyLDI2OTkxLDI3MjE5LDI3NTI5LDI3OTU3LDI4MTQ3LDI5NjY3LDMwNDYyLDMwNjM2LDMxNTY1LDMyMDIwLDMzMDU5LDMzMzA4LDMzNjAwLDM0MDM2LDM0MTQ3LDM1NDI2LDM1NTI0LDM3MjU1LDM3NjYyLDM4OTE4LDM5MzQ4LDI1MTAwLDM0ODk5LDM2ODQ4LDM3NDc3LDIzODE1LDIzODQ3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIzOTEzLDI5NzkxLDMzMTgxLDM0NjY0LDI4NjI5LDI1MzQyLDMyNzIyLDM1MTI2LDM1MTg2LDE5OTk4LDIwMDU2LDIwNzExLDIxMjEzLDIxMzE5LDI1MjE1LDI2MTE5LDMyMzYxLDM0ODIxLDM4NDk0LDIwMzY1LDIxMjczLDIyMDcwLDIyOTg3LDIzMjA0LDIzNjA4LDIzNjMwLDIzNjI5LDI0MDY2LDI0MzM3LDI0NjQzLDI2MDQ1LDI2MTU5LDI2MTc4LDI2NTU4LDI2NjEyLDI5NDY4LDMwNjkwLDMxMDM0LDMyNzA5LDMzOTQwLDMzOTk3LDM1MjIyLDM1NDMwLDM1NDMzLDM1NTUzLDM1OTI1LDM1OTYyLDIyNTE2LDIzNTA4LDI0MzM1LDI0Njg3LDI1MzI1LDI2ODkzLDI3NTQyLDI4MjUyLDI5MDYwLDMxNjk4LDM0NjQ1LDM1NjcyLDM2NjA2LDM5MTM1LDM5MTY2LDIwMjgwLDIwMzUzLDIwNDQ5LDIxNjI3LDIzMDcyLDIzNDgwLDI0ODkyLDI2MDMyLDI2MjE2LDI5MTgwLDMwMDAzLDMxMDcwLDMyMDUxLDMzMTAyLDMzMjUxLDMzNjg4LDM0MjE4LDM0MjU0LDM0NTYzLDM1MzM4LDM2NTIzLDM2NzYzLDYzODU3LDM2ODA1LDIyODMzLDIzNDYwLDIzNTI2LDI0NzEzLDIzNTI5LDIzNTYzLDI0NTE1LDI3Nzc3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzODU4LDI4MTQ1LDI4NjgzLDI5OTc4LDMzNDU1LDM1NTc0LDIwMTYwLDIxMzEzLDYzODU5LDM4NjE3LDI3NjYzLDIwMTI2LDIwNDIwLDIwODE4LDIxODU0LDIzMDc3LDIzNzg0LDI1MTA1LDI5MjczLDMzNDY5LDMzNzA2LDM0NTU4LDM0OTA1LDM1MzU3LDM4NDYzLDM4NTk3LDM5MTg3LDQwMjAxLDQwMjg1LDIyNTM4LDIzNzMxLDIzOTk3LDI0MTMyLDI0ODAxLDI0ODUzLDI1NTY5LDI3MTM4LDI4MTk3LDM3MTIyLDM3NzE2LDM4OTkwLDM5OTUyLDQwODIzLDIzNDMzLDIzNzM2LDI1MzUzLDI2MTkxLDI2Njk2LDMwNTI0LDM4NTkzLDM4Nzk3LDM4OTk2LDM5ODM5LDI2MDE3LDM1NTg1LDM2NTU1LDM4MzMyLDIxODEzLDIzNzIxLDI0MDIyLDI0MjQ1LDI2MjYzLDMwMjg0LDMzNzgwLDM4MzQzLDIyNzM5LDI1Mjc2LDI5MzkwLDQwMjMyLDIwMjA4LDIyODMwLDI0NTkxLDI2MTcxLDI3NTIzLDMxMjA3LDQwMjMwLDIxMzk1LDIxNjk2LDIyNDY3LDIzODMwLDI0ODU5LDI2MzI2LDI4MDc5LDMwODYxLDMzNDA2LDM4NTUyLDM4NzI0LDIxMzgwLDI1MjEyLDI1NDk0LDI4MDgyLDMyMjY2LDMzMDk5LDM4OTg5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI3Mzg3LDMyNTg4LDQwMzY3LDQwNDc0LDIwMDYzLDIwNTM5LDIwOTE4LDIyODEyLDI0ODI1LDI1NTkwLDI2OTI4LDI5MjQyLDMyODIyLDYzODYwLDM3MzI2LDI0MzY5LDYzODYxLDYzODYyLDMyMDA0LDMzNTA5LDMzOTAzLDMzOTc5LDM0Mjc3LDM2NDkzLDYzODYzLDIwMzM1LDYzODY0LDYzODY1LDIyNzU2LDIzMzYzLDI0NjY1LDI1NTYyLDI1ODgwLDI1OTY1LDI2MjY0LDYzODY2LDI2OTU0LDI3MTcxLDI3OTE1LDI4NjczLDI5MDM2LDMwMTYyLDMwMjIxLDMxMTU1LDMxMzQ0LDYzODY3LDMyNjUwLDYzODY4LDM1MTQwLDYzODY5LDM1NzMxLDM3MzEyLDM4NTI1LDYzODcwLDM5MTc4LDIyMjc2LDI0NDgxLDI2MDQ0LDI4NDE3LDMwMjA4LDMxMTQyLDM1NDg2LDM5MzQxLDM5NzcwLDQwODEyLDIwNzQwLDI1MDE0LDI1MjMzLDI3Mjc3LDMzMjIyLDIwNTQ3LDIyNTc2LDI0NDIyLDI4OTM3LDM1MzI4LDM1NTc4LDIzNDIwLDM0MzI2LDIwNDc0LDIwNzk2LDIyMTk2LDIyODUyLDI1NTEzLDI4MTUzLDIzOTc4LDI2OTg5LDIwODcwLDIwMTA0LDIwMzEzLDYzODcxLDYzODcyLDYzODczLDIyOTE0LDYzODc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzODc1LDI3NDg3LDI3NzQxLDYzODc2LDI5ODc3LDMwOTk4LDYzODc3LDMzMjg3LDMzMzQ5LDMzNTkzLDM2NjcxLDM2NzAxLDYzODc4LDM5MTkyLDYzODc5LDYzODgwLDYzODgxLDIwMTM0LDYzODgyLDIyNDk1LDI0NDQxLDI2MTMxLDYzODgzLDYzODg0LDMwMTIzLDMyMzc3LDM1Njk1LDYzODg1LDM2ODcwLDM5NTE1LDIyMTgxLDIyNTY3LDIzMDMyLDIzMDcxLDIzNDc2LDYzODg2LDI0MzEwLDYzODg3LDYzODg4LDI1NDI0LDI1NDAzLDYzODg5LDI2OTQxLDI3NzgzLDI3ODM5LDI4MDQ2LDI4MDUxLDI4MTQ5LDI4NDM2LDYzODkwLDI4ODk1LDI4OTgyLDI5MDE3LDYzODkxLDI5MTIzLDI5MTQxLDYzODkyLDMwNzk5LDMwODMxLDYzODkzLDMxNjA1LDMyMjI3LDYzODk0LDMyMzAzLDYzODk1LDM0ODkzLDM2NTc1LDYzODk2LDYzODk3LDYzODk4LDM3NDY3LDYzODk5LDQwMTgyLDYzOTAwLDYzOTAxLDYzOTAyLDI0NzA5LDI4MDM3LDYzOTAzLDI5MTA1LDYzOTA0LDYzOTA1LDM4MzIxLDIxNDIxLDYzOTA2LDYzOTA3LDYzOTA4LDI2NTc5LDYzOTA5LDI4ODE0LDI4OTc2LDI5NzQ0LDMzMzk4LDMzNDkwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzOTEwLDM4MzMxLDM5NjUzLDQwNTczLDI2MzA4LDYzOTExLDI5MTIxLDMzODY1LDYzOTEyLDYzOTEzLDIyNjAzLDYzOTE0LDYzOTE1LDIzOTkyLDI0NDMzLDYzOTE2LDI2MTQ0LDI2MjU0LDI3MDAxLDI3MDU0LDI3NzA0LDI3ODkxLDI4MjE0LDI4NDgxLDI4NjM0LDI4Njk5LDI4NzE5LDI5MDA4LDI5MTUxLDI5NTUyLDYzOTE3LDI5Nzg3LDYzOTE4LDI5OTA4LDMwNDA4LDMxMzEwLDMyNDAzLDYzOTE5LDYzOTIwLDMzNTIxLDM1NDI0LDM2ODE0LDYzOTIxLDM3NzA0LDYzOTIyLDM4NjgxLDYzOTIzLDYzOTI0LDIwMDM0LDIwNTIyLDYzOTI1LDIxMDAwLDIxNDczLDI2MzU1LDI3NzU3LDI4NjE4LDI5NDUwLDMwNTkxLDMxMzMwLDMzNDU0LDM0MjY5LDM0MzA2LDYzOTI2LDM1MDI4LDM1NDI3LDM1NzA5LDM1OTQ3LDYzOTI3LDM3NTU1LDYzOTI4LDM4Njc1LDM4OTI4LDIwMTE2LDIwMjM3LDIwNDI1LDIwNjU4LDIxMzIwLDIxNTY2LDIxNTU1LDIxOTc4LDIyNjI2LDIyNzE0LDIyODg3LDIzMDY3LDIzNTI0LDI0NzM1LDYzOTI5LDI1MDM0LDI1OTQyLDI2MTExLDI2MjEyLDI2NzkxLDI3NzM4LDI4NTk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI4ODc5LDI5MTAwLDI5NTIyLDMxNjEzLDM0NTY4LDM1NDkyLDM5OTg2LDQwNzExLDIzNjI3LDI3Nzc5LDI5NTA4LDI5NTc3LDM3NDM0LDI4MzMxLDI5Nzk3LDMwMjM5LDMxMzM3LDMyMjc3LDM0MzE0LDIwODAwLDIyNzI1LDI1NzkzLDI5OTM0LDI5OTczLDMwMzIwLDMyNzA1LDM3MDEzLDM4NjA1LDM5MjUyLDI4MTk4LDI5OTI2LDMxNDAxLDMxNDAyLDMzMjUzLDM0NTIxLDM0NjgwLDM1MzU1LDIzMTEzLDIzNDM2LDIzNDUxLDI2Nzg1LDI2ODgwLDI4MDAzLDI5NjA5LDI5NzE1LDI5NzQwLDMwODcxLDMyMjMzLDMyNzQ3LDMzMDQ4LDMzMTA5LDMzNjk0LDM1OTE2LDM4NDQ2LDM4OTI5LDI2MzUyLDI0NDQ4LDI2MTA2LDI2NTA1LDI3NzU0LDI5NTc5LDIwNTI1LDIzMDQzLDI3NDk4LDMwNzAyLDIyODA2LDIzOTE2LDI0MDEzLDI5NDc3LDMwMDMxLDYzOTMwLDYzOTMxLDIwNzA5LDIwOTg1LDIyNTc1LDIyODI5LDIyOTM0LDIzMDAyLDIzNTI1LDYzOTMyLDYzOTMzLDIzOTcwLDI1MzAzLDI1NjIyLDI1NzQ3LDI1ODU0LDYzOTM0LDI2MzMyLDYzOTM1LDI3MjA4LDYzOTM2LDI5MTgzLDI5Nzk2LDYzOTM3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxMzY4LDMxNDA3LDMyMzI3LDMyMzUwLDMyNzY4LDMzMTM2LDYzOTM4LDM0Nzk5LDM1MjAxLDM1NjE2LDM2OTUzLDYzOTM5LDM2OTkyLDM5MjUwLDI0OTU4LDI3NDQyLDI4MDIwLDMyMjg3LDM1MTA5LDM2Nzg1LDIwNDMzLDIwNjUzLDIwODg3LDIxMTkxLDIyNDcxLDIyNjY1LDIzNDgxLDI0MjQ4LDI0ODk4LDI3MDI5LDI4MDQ0LDI4MjYzLDI4MzQyLDI5MDc2LDI5Nzk0LDI5OTkyLDI5OTk2LDMyODgzLDMzNTkyLDMzOTkzLDM2MzYyLDM3NzgwLDM3ODU0LDYzOTQwLDIwMTEwLDIwMzA1LDIwNTk4LDIwNzc4LDIxNDQ4LDIxNDUxLDIxNDkxLDIzNDMxLDIzNTA3LDIzNTg4LDI0ODU4LDI0OTYyLDI2MTAwLDI5Mjc1LDI5NTkxLDI5NzYwLDMwNDAyLDMxMDU2LDMxMTIxLDMxMTYxLDMyMDA2LDMyNzAxLDMzNDE5LDM0MjYxLDM0Mzk4LDM2ODAyLDM2OTM1LDM3MTA5LDM3MzU0LDM4NTMzLDM4NjMyLDM4NjMzLDIxMjA2LDI0NDIzLDI2MDkzLDI2MTYxLDI2NjcxLDI5MDIwLDMxMjg2LDM3MDU3LDM4OTIyLDIwMTEzLDYzOTQxLDI3MjE4LDI3NTUwLDI4NTYwLDI5MDY1LDMyNzkyLDMzNDY0LDM0MTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2OTM5LDM4NTQ5LDM4NjQyLDM4OTA3LDM0MDc0LDM5NzI5LDIwMTEyLDI5MDY2LDM4NTk2LDIwODAzLDIxNDA3LDIxNzI5LDIyMjkxLDIyMjkwLDIyNDM1LDIzMTk1LDIzMjM2LDIzNDkxLDI0NjE2LDI0ODk1LDI1NTg4LDI3NzgxLDI3OTYxLDI4Mjc0LDI4MzA0LDI5MjMyLDI5NTAzLDI5NzgzLDMzNDg5LDM0OTQ1LDM2Njc3LDM2OTYwLDYzOTQyLDM4NDk4LDM5MDAwLDQwMjE5LDI2Mzc2LDM2MjM0LDM3NDcwLDIwMzAxLDIwNTUzLDIwNzAyLDIxMzYxLDIyMjg1LDIyOTk2LDIzMDQxLDIzNTYxLDI0OTQ0LDI2MjU2LDI4MjA1LDI5MjM0LDI5NzcxLDMyMjM5LDMyOTYzLDMzODA2LDMzODk0LDM0MTExLDM0NjU1LDM0OTA3LDM1MDk2LDM1NTg2LDM2OTQ5LDM4ODU5LDM5NzU5LDIwMDgzLDIwMzY5LDIwNzU0LDIwODQyLDYzOTQzLDIxODA3LDIxOTI5LDIzNDE4LDIzNDYxLDI0MTg4LDI0MTg5LDI0MjU0LDI0NzM2LDI0Nzk5LDI0ODQwLDI0ODQxLDI1NTQwLDI1OTEyLDI2Mzc3LDYzOTQ0LDI2NTgwLDI2NTg2LDYzOTQ1LDI2OTc3LDI2OTc4LDI3ODMzLDI3OTQzLDYzOTQ2LDI4MjE2LDYzOTQ3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI4NjQxLDI5NDk0LDI5NDk1LDYzOTQ4LDI5Nzg4LDMwMDAxLDYzOTQ5LDMwMjkwLDYzOTUwLDYzOTUxLDMyMTczLDMzMjc4LDMzODQ4LDM1MDI5LDM1NDgwLDM1NTQ3LDM1NTY1LDM2NDAwLDM2NDE4LDM2OTM4LDM2OTI2LDM2OTg2LDM3MTkzLDM3MzIxLDM3NzQyLDYzOTUyLDYzOTUzLDIyNTM3LDYzOTU0LDI3NjAzLDMyOTA1LDMyOTQ2LDYzOTU1LDYzOTU2LDIwODAxLDIyODkxLDIzNjA5LDYzOTU3LDYzOTU4LDI4NTE2LDI5NjA3LDMyOTk2LDM2MTAzLDYzOTU5LDM3Mzk5LDM4Mjg3LDYzOTYwLDYzOTYxLDYzOTYyLDYzOTYzLDMyODk1LDI1MTAyLDI4NzAwLDMyMTA0LDM0NzAxLDYzOTY0LDIyNDMyLDI0NjgxLDI0OTAzLDI3NTc1LDM1NTE4LDM3NTA0LDM4NTc3LDIwMDU3LDIxNTM1LDI4MTM5LDM0MDkzLDM4NTEyLDM4ODk5LDM5MTUwLDI1NTU4LDI3ODc1LDM3MDA5LDIwOTU3LDI1MDMzLDMzMjEwLDQwNDQxLDIwMzgxLDIwNTA2LDIwNzM2LDIzNDUyLDI0ODQ3LDI1MDg3LDI1ODM2LDI2ODg1LDI3NTg5LDMwMDk3LDMwNjkxLDMyNjgxLDMzMzgwLDM0MTkxLDM0ODExLDM0OTE1LDM1NTE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM1Njk2LDM3MjkxLDIwMTA4LDIwMTk3LDIwMjM0LDYzOTY1LDYzOTY2LDIyODM5LDIzMDE2LDYzOTY3LDI0MDUwLDI0MzQ3LDI0NDExLDI0NjA5LDYzOTY4LDYzOTY5LDYzOTcwLDYzOTcxLDI5MjQ2LDI5NjY5LDYzOTcyLDMwMDY0LDMwMTU3LDYzOTczLDMxMjI3LDYzOTc0LDMyNzgwLDMyODE5LDMyOTAwLDMzNTA1LDMzNjE3LDYzOTc1LDYzOTc2LDM2MDI5LDM2MDE5LDM2OTk5LDYzOTc3LDYzOTc4LDM5MTU2LDM5MTgwLDYzOTc5LDYzOTgwLDI4NzI3LDMwNDEwLDMyNzE0LDMyNzE2LDMyNzY0LDM1NjEwLDIwMTU0LDIwMTYxLDIwOTk1LDIxMzYwLDYzOTgxLDIxNjkzLDIyMjQwLDIzMDM1LDIzNDkzLDI0MzQxLDI0NTI1LDI4MjcwLDYzOTgyLDYzOTgzLDMyMTA2LDMzNTg5LDYzOTg0LDM0NDUxLDM1NDY5LDYzOTg1LDM4NzY1LDM4Nzc1LDYzOTg2LDYzOTg3LDE5OTY4LDIwMzE0LDIwMzUwLDIyNzc3LDI2MDg1LDI4MzIyLDM2OTIwLDM3ODA4LDM5MzUzLDIwMjE5LDIyNzY0LDIyOTIyLDIzMDAxLDI0NjQxLDYzOTg4LDYzOTg5LDMxMjUyLDYzOTkwLDMzNjE1LDM2MDM1LDIwODM3LDIxMzE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzOTkxLDYzOTkyLDYzOTkzLDIwMTczLDIxMDk3LDIzMzgxLDMzNDcxLDIwMTgwLDIxMDUwLDIxNjcyLDIyOTg1LDIzMDM5LDIzMzc2LDIzMzgzLDIzMzg4LDI0Njc1LDI0OTA0LDI4MzYzLDI4ODI1LDI5MDM4LDI5NTc0LDI5OTQzLDMwMTMzLDMwOTEzLDMyMDQzLDMyNzczLDMzMjU4LDMzNTc2LDM0MDcxLDM0MjQ5LDM1NTY2LDM2MDM5LDM4NjA0LDIwMzE2LDIxMjQyLDIyMjA0LDI2MDI3LDI2MTUyLDI4Nzk2LDI4ODU2LDI5MjM3LDMyMTg5LDMzNDIxLDM3MTk2LDM4NTkyLDQwMzA2LDIzNDA5LDI2ODU1LDI3NTQ0LDI4NTM4LDMwNDMwLDIzNjk3LDI2MjgzLDI4NTA3LDMxNjY4LDMxNzg2LDM0ODcwLDM4NjIwLDE5OTc2LDIwMTgzLDIxMjgwLDIyNTgwLDIyNzE1LDIyNzY3LDIyODkyLDIzNTU5LDI0MTE1LDI0MTk2LDI0MzczLDI1NDg0LDI2MjkwLDI2NDU0LDI3MTY3LDI3Mjk5LDI3NDA0LDI4NDc5LDI5MjU0LDYzOTk0LDI5NTIwLDI5ODM1LDMxNDU2LDMxOTExLDMzMTQ0LDMzMjQ3LDMzMjU1LDMzNjc0LDMzOTAwLDM0MDgzLDM0MTk2LDM0MjU1LDM1MDM3LDM2MTE1LDM3MjkyLDM4MjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM4NTU2LDIwODc3LDIxNzA1LDIyMzEyLDIzNDcyLDI1MTY1LDI2NDQ4LDI2Njg1LDI2NzcxLDI4MjIxLDI4MzcxLDI4Nzk3LDMyMjg5LDM1MDA5LDM2MDAxLDM2NjE3LDQwNzc5LDQwNzgyLDI5MjI5LDMxNjMxLDM1NTMzLDM3NjU4LDIwMjk1LDIwMzAyLDIwNzg2LDIxNjMyLDIyOTkyLDI0MjEzLDI1MjY5LDI2NDg1LDI2OTkwLDI3MTU5LDI3ODIyLDI4MTg2LDI5NDAxLDI5NDgyLDMwMTQxLDMxNjcyLDMyMDUzLDMzNTExLDMzNzg1LDMzODc5LDM0Mjk1LDM1NDE5LDM2MDE1LDM2NDg3LDM2ODg5LDM3MDQ4LDM4NjA2LDQwNzk5LDIxMjE5LDIxNTE0LDIzMjY1LDIzNDkwLDI1Njg4LDI1OTczLDI4NDA0LDI5MzgwLDYzOTk1LDMwMzQwLDMxMzA5LDMxNTE1LDMxODIxLDMyMzE4LDMyNzM1LDMzNjU5LDM1NjI3LDM2MDQyLDM2MTk2LDM2MzIxLDM2NDQ3LDM2ODQyLDM2ODU3LDM2OTY5LDM3ODQxLDIwMjkxLDIwMzQ2LDIwNjU5LDIwODQwLDIwODU2LDIxMDY5LDIxMDk4LDIyNjI1LDIyNjUyLDIyODgwLDIzNTYwLDIzNjM3LDI0MjgzLDI0NzMxLDI1MTM2LDI2NjQzLDI3NTgzLDI3NjU2LDI4NTkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI5MDA2LDI5NzI4LDMwMDAwLDMwMDA4LDMwMDMzLDMwMzIyLDMxNTY0LDMxNjI3LDMxNjYxLDMxNjg2LDMyMzk5LDM1NDM4LDM2NjcwLDM2NjgxLDM3NDM5LDM3NTIzLDM3NjY2LDM3OTMxLDM4NjUxLDM5MDAyLDM5MDE5LDM5MTk4LDIwOTk5LDI1MTMwLDI1MjQwLDI3OTkzLDMwMzA4LDMxNDM0LDMxNjgwLDMyMTE4LDIxMzQ0LDIzNzQyLDI0MjE1LDI4NDcyLDI4ODU3LDMxODk2LDM4NjczLDM5ODIyLDQwNjcwLDI1NTA5LDI1NzIyLDM0Njc4LDE5OTY5LDIwMTE3LDIwMTQxLDIwNTcyLDIwNTk3LDIxNTc2LDIyOTc5LDIzNDUwLDI0MTI4LDI0MjM3LDI0MzExLDI0NDQ5LDI0NzczLDI1NDAyLDI1OTE5LDI1OTcyLDI2MDYwLDI2MjMwLDI2MjMyLDI2NjIyLDI2OTg0LDI3MjczLDI3NDkxLDI3NzEyLDI4MDk2LDI4MTM2LDI4MTkxLDI4MjU0LDI4NzAyLDI4ODMzLDI5NTgyLDI5NjkzLDMwMDEwLDMwNTU1LDMwODU1LDMxMTE4LDMxMjQzLDMxMzU3LDMxOTM0LDMyMTQyLDMzMzUxLDM1MzMwLDM1NTYyLDM1OTk4LDM3MTY1LDM3MTk0LDM3MzM2LDM3NDc4LDM3NTgwLDM3NjY0LDM4NjYyLDM4NzQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM4NzQ4LDM4OTE0LDQwNzE4LDIxMDQ2LDIxMTM3LDIxODg0LDIyNTY0LDI0MDkzLDI0MzUxLDI0NzE2LDI1NTUyLDI2Nzk5LDI4NjM5LDMxMDg1LDMxNTMyLDMzMjI5LDM0MjM0LDM1MDY5LDM1NTc2LDM2NDIwLDM3MjYxLDM4NTAwLDM4NTU1LDM4NzE3LDM4OTg4LDQwNzc4LDIwNDMwLDIwODA2LDIwOTM5LDIxMTYxLDIyMDY2LDI0MzQwLDI0NDI3LDI1NTE0LDI1ODA1LDI2MDg5LDI2MTc3LDI2MzYyLDI2MzYxLDI2Mzk3LDI2NzgxLDI2ODM5LDI3MTMzLDI4NDM3LDI4NTI2LDI5MDMxLDI5MTU3LDI5MjI2LDI5ODY2LDMwNTIyLDMxMDYyLDMxMDY2LDMxMTk5LDMxMjY0LDMxMzgxLDMxODk1LDMxOTY3LDMyMDY4LDMyMzY4LDMyOTAzLDM0Mjk5LDM0NDY4LDM1NDEyLDM1NTE5LDM2MjQ5LDM2NDgxLDM2ODk2LDM2OTczLDM3MzQ3LDM4NDU5LDM4NjEzLDQwMTY1LDI2MDYzLDMxNzUxLDM2Mjc1LDM3ODI3LDIzMzg0LDIzNTYyLDIxMzMwLDI1MzA1LDI5NDY5LDIwNTE5LDIzNDQ3LDI0NDc4LDI0NzUyLDI0OTM5LDI2ODM3LDI4MTIxLDI5NzQyLDMxMjc4LDMyMDY2LDMyMTU2LDMyMzA1LDMzMTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2Mzk0LDM2NDA1LDM3NzU4LDM3OTEyLDIwMzA0LDIyMzUyLDI0MDM4LDI0MjMxLDI1Mzg3LDMyNjE4LDIwMDI3LDIwMzAzLDIwMzY3LDIwNTcwLDIzMDA1LDMyOTY0LDIxNjEwLDIxNjA4LDIyMDE0LDIyODYzLDIzNDQ5LDI0MDMwLDI0MjgyLDI2MjA1LDI2NDE3LDI2NjA5LDI2NjY2LDI3ODgwLDI3OTU0LDI4MjM0LDI4NTU3LDI4ODU1LDI5NjY0LDMwMDg3LDMxODIwLDMyMDAyLDMyMDQ0LDMyMTYyLDMzMzExLDM0NTIzLDM1Mzg3LDM1NDYxLDM2MjA4LDM2NDkwLDM2NjU5LDM2OTEzLDM3MTk4LDM3MjAyLDM3OTU2LDM5Mzc2LDMxNDgxLDMxOTA5LDIwNDI2LDIwNzM3LDIwOTM0LDIyNDcyLDIzNTM1LDIzODAzLDI2MjAxLDI3MTk3LDI3OTk0LDI4MzEwLDI4NjUyLDI4OTQwLDMwMDYzLDMxNDU5LDM0ODUwLDM2ODk3LDM2OTgxLDM4NjAzLDM5NDIzLDMzNTM3LDIwMDEzLDIwMjEwLDM0ODg2LDM3MzI1LDIxMzczLDI3MzU1LDI2OTg3LDI3NzEzLDMzOTE0LDIyNjg2LDI0OTc0LDI2MzY2LDI1MzI3LDI4ODkzLDI5OTY5LDMwMTUxLDMyMzM4LDMzOTc2LDM1NjU3LDM2MTA0LDIwMDQzLDIxNDgyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxNjc1LDIyMzIwLDIyMzM2LDI0NTM1LDI1MzQ1LDI1MzUxLDI1NzExLDI1OTAzLDI2MDg4LDI2MjM0LDI2NTI1LDI2NTQ3LDI3NDkwLDI3NzQ0LDI3ODAyLDI4NDYwLDMwNjkzLDMwNzU3LDMxMDQ5LDMxMDYzLDMyMDI1LDMyOTMwLDMzMDI2LDMzMjY3LDMzNDM3LDMzNDYzLDM0NTg0LDM1NDY4LDYzOTk2LDM2MTAwLDM2Mjg2LDM2OTc4LDMwNDUyLDMxMjU3LDMxMjg3LDMyMzQwLDMyODg3LDIxNzY3LDIxOTcyLDIyNjQ1LDI1MzkxLDI1NjM0LDI2MTg1LDI2MTg3LDI2NzMzLDI3MDM1LDI3NTI0LDI3OTQxLDI4MzM3LDI5NjQ1LDI5ODAwLDI5ODU3LDMwMDQzLDMwMTM3LDMwNDMzLDMwNDk0LDMwNjAzLDMxMjA2LDMyMjY1LDMyMjg1LDMzMjc1LDM0MDk1LDM0OTY3LDM1Mzg2LDM2MDQ5LDM2NTg3LDM2Nzg0LDM2OTE0LDM3ODA1LDM4NDk5LDM4NTE1LDM4NjYzLDIwMzU2LDIxNDg5LDIzMDE4LDIzMjQxLDI0MDg5LDI2NzAyLDI5ODk0LDMwMTQyLDMxMjA5LDMxMzc4LDMzMTg3LDM0NTQxLDM2MDc0LDM2MzAwLDM2ODQ1LDI2MDE1LDI2Mzg5LDYzOTk3LDIyNTE5LDI4NTAzLDMyMjIxLDM2NjU1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM3ODc4LDM4NTk4LDI0NTAxLDI1MDc0LDI4NTQ4LDE5OTg4LDIwMzc2LDIwNTExLDIxNDQ5LDIxOTgzLDIzOTE5LDI0MDQ2LDI3NDI1LDI3NDkyLDMwOTIzLDMxNjQyLDYzOTk4LDM2NDI1LDM2NTU0LDM2OTc0LDI1NDE3LDI1NjYyLDMwNTI4LDMxMzY0LDM3Njc5LDM4MDE1LDQwODEwLDI1Nzc2LDI4NTkxLDI5MTU4LDI5ODY0LDI5OTE0LDMxNDI4LDMxNzYyLDMyMzg2LDMxOTIyLDMyNDA4LDM1NzM4LDM2MTA2LDM4MDEzLDM5MTg0LDM5MjQ0LDIxMDQ5LDIzNTE5LDI1ODMwLDI2NDEzLDMyMDQ2LDIwNzE3LDIxNDQzLDIyNjQ5LDI0OTIwLDI0OTIxLDI1MDgyLDI2MDI4LDMxNDQ5LDM1NzMwLDM1NzM0LDIwNDg5LDIwNTEzLDIxMTA5LDIxODA5LDIzMTAwLDI0Mjg4LDI0NDMyLDI0ODg0LDI1OTUwLDI2MTI0LDI2MTY2LDI2Mjc0LDI3MDg1LDI4MzU2LDI4NDY2LDI5NDYyLDMwMjQxLDMxMzc5LDMzMDgxLDMzMzY5LDMzNzUwLDMzOTgwLDIwNjYxLDIyNTEyLDIzNDg4LDIzNTI4LDI0NDI1LDI1NTA1LDMwNzU4LDMyMTgxLDMzNzU2LDM0MDgxLDM3MzE5LDM3MzY1LDIwODc0LDI2NjEzLDMxNTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2MDEyLDIwOTMyLDIyOTcxLDI0NzY1LDM0Mzg5LDIwNTA4LDYzOTk5LDIxMDc2LDIzNjEwLDI0OTU3LDI1MTE0LDI1Mjk5LDI1ODQyLDI2MDIxLDI4MzY0LDMwMjQwLDMzMDM0LDM2NDQ4LDM4NDk1LDM4NTg3LDIwMTkxLDIxMzE1LDIxOTEyLDIyODI1LDI0MDI5LDI1Nzk3LDI3ODQ5LDI4MTU0LDI5NTg4LDMxMzU5LDMzMzA3LDM0MjE0LDM2MDY4LDM2MzY4LDM2OTgzLDM3MzUxLDM4MzY5LDM4NDMzLDM4ODU0LDIwOTg0LDIxNzQ2LDIxODk0LDI0NTA1LDI1NzY0LDI4NTUyLDMyMTgwLDM2NjM5LDM2Njg1LDM3OTQxLDIwNjgxLDIzNTc0LDI3ODM4LDI4MTU1LDI5OTc5LDMwNjUxLDMxODA1LDMxODQ0LDM1NDQ5LDM1NTIyLDIyNTU4LDIyOTc0LDI0MDg2LDI1NDYzLDI5MjY2LDMwMDkwLDMwNTcxLDM1NTQ4LDM2MDI4LDM2NjI2LDI0MzA3LDI2MjI4LDI4MTUyLDMyODkzLDMzNzI5LDM1NTMxLDM4NzM3LDM5ODk0LDY0MDAwLDIxMDU5LDI2MzY3LDI4MDUzLDI4Mzk5LDMyMjI0LDM1NTU4LDM2OTEwLDM2OTU4LDM5NjM2LDIxMDIxLDIxMTE5LDIxNzM2LDI0OTgwLDI1MjIwLDI1MzA3LDI2Nzg2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2ODk4LDI2OTcwLDI3MTg5LDI4ODE4LDI4OTY2LDMwODEzLDMwOTc3LDMwOTkwLDMxMTg2LDMxMjQ1LDMyOTE4LDMzNDAwLDMzNDkzLDMzNjA5LDM0MTIxLDM1OTcwLDM2MjI5LDM3MjE4LDM3MjU5LDM3Mjk0LDIwNDE5LDIyMjI1LDI5MTY1LDMwNjc5LDM0NTYwLDM1MzIwLDIzNTQ0LDI0NTM0LDI2NDQ5LDM3MDMyLDIxNDc0LDIyNjE4LDIzNTQxLDI0NzQwLDI0OTYxLDI1Njk2LDMyMzE3LDMyODgwLDM0MDg1LDM3NTA3LDI1Nzc0LDIwNjUyLDIzODI4LDI2MzY4LDIyNjg0LDI1Mjc3LDI1NTEyLDI2ODk0LDI3MDAwLDI3MTY2LDI4MjY3LDMwMzk0LDMxMTc5LDMzNDY3LDMzODMzLDM1NTM1LDM2MjY0LDM2ODYxLDM3MTM4LDM3MTk1LDM3Mjc2LDM3NjQ4LDM3NjU2LDM3Nzg2LDM4NjE5LDM5NDc4LDM5OTQ5LDE5OTg1LDMwMDQ0LDMxMDY5LDMxNDgyLDMxNTY5LDMxNjg5LDMyMzAyLDMzOTg4LDM2NDQxLDM2NDY4LDM2NjAwLDM2ODgwLDI2MTQ5LDI2OTQzLDI5NzYzLDIwOTg2LDI2NDE0LDQwNjY4LDIwODA1LDI0NTQ0LDI3Nzk4LDM0ODAyLDM0OTA5LDM0OTM1LDI0NzU2LDMzMjA1LDMzNzk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2MTAxLDIxNDYyLDIxNTYxLDIyMDY4LDIzMDk0LDIzNjAxLDI4ODEwLDMyNzM2LDMyODU4LDMzMDMwLDMzMjYxLDM2MjU5LDM3MjU3LDM5NTE5LDQwNDM0LDIwNTk2LDIwMTY0LDIxNDA4LDI0ODI3LDI4MjA0LDIzNjUyLDIwMzYwLDIwNTE2LDIxOTg4LDIzNzY5LDI0MTU5LDI0Njc3LDI2NzcyLDI3ODM1LDI4MTAwLDI5MTE4LDMwMTY0LDMwMTk2LDMwMzA1LDMxMjU4LDMxMzA1LDMyMTk5LDMyMjUxLDMyNjIyLDMzMjY4LDM0NDczLDM2NjM2LDM4NjAxLDM5MzQ3LDQwNzg2LDIxMDYzLDIxMTg5LDM5MTQ5LDM1MjQyLDE5OTcxLDI2NTc4LDI4NDIyLDIwNDA1LDIzNTIyLDI2NTE3LDI3Nzg0LDI4MDI0LDI5NzIzLDMwNzU5LDM3MzQxLDM3NzU2LDM0NzU2LDMxMjA0LDMxMjgxLDI0NTU1LDIwMTgyLDIxNjY4LDIxODIyLDIyNzAyLDIyOTQ5LDI0ODE2LDI1MTcxLDI1MzAyLDI2NDIyLDI2OTY1LDMzMzMzLDM4NDY0LDM5MzQ1LDM5Mzg5LDIwNTI0LDIxMzMxLDIxODI4LDIyMzk2LDY0MDAxLDI1MTc2LDY0MDAyLDI1ODI2LDI2MjE5LDI2NTg5LDI4NjA5LDI4NjU1LDI5NzMwLDI5NzUyLDM1MzUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM3OTQ0LDIxNTg1LDIyMDIyLDIyMzc0LDI0MzkyLDI0OTg2LDI3NDcwLDI4NzYwLDI4ODQ1LDMyMTg3LDM1NDc3LDIyODkwLDMzMDY3LDI1NTA2LDMwNDcyLDMyODI5LDM2MDEwLDIyNjEyLDI1NjQ1LDI3MDY3LDIzNDQ1LDI0MDgxLDI4MjcxLDY0MDAzLDM0MTUzLDIwODEyLDIxNDg4LDIyODI2LDI0NjA4LDI0OTA3LDI3NTI2LDI3NzYwLDI3ODg4LDMxNTE4LDMyOTc0LDMzNDkyLDM2Mjk0LDM3MDQwLDM5MDg5LDY0MDA0LDI1Nzk5LDI4NTgwLDI1NzQ1LDI1ODYwLDIwODE0LDIxNTIwLDIyMzAzLDM1MzQyLDI0OTI3LDI2NzQyLDY0MDA1LDMwMTcxLDMxNTcwLDMyMTEzLDM2ODkwLDIyNTM0LDI3MDg0LDMzMTUxLDM1MTE0LDM2ODY0LDM4OTY5LDIwNjAwLDIyODcxLDIyOTU2LDI1MjM3LDM2ODc5LDM5NzIyLDI0OTI1LDI5MzA1LDM4MzU4LDIyMzY5LDIzMTEwLDI0MDUyLDI1MjI2LDI1NzczLDI1ODUwLDI2NDg3LDI3ODc0LDI3OTY2LDI5MjI4LDI5NzUwLDMwNzcyLDMyNjMxLDMzNDUzLDM2MzE1LDM4OTM1LDIxMDI4LDIyMzM4LDI2NDk1LDI5MjU2LDI5OTIzLDM2MDA5LDM2Nzc0LDM3MzkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM4NDQyLDIwODQzLDIxNDg1LDI1NDIwLDIwMzI5LDIxNzY0LDI0NzI2LDI1OTQzLDI3ODAzLDI4MDMxLDI5MjYwLDI5NDM3LDMxMjU1LDM1MjA3LDM1OTk3LDI0NDI5LDI4NTU4LDI4OTIxLDMzMTkyLDI0ODQ2LDIwNDE1LDIwNTU5LDI1MTUzLDI5MjU1LDMxNjg3LDMyMjMyLDMyNzQ1LDM2OTQxLDM4ODI5LDM5NDQ5LDM2MDIyLDIyMzc4LDI0MTc5LDI2NTQ0LDMzODA1LDM1NDEzLDIxNTM2LDIzMzE4LDI0MTYzLDI0MjkwLDI0MzMwLDI1OTg3LDMyOTU0LDM0MTA5LDM4MjgxLDM4NDkxLDIwMjk2LDIxMjUzLDIxMjYxLDIxMjYzLDIxNjM4LDIxNzU0LDIyMjc1LDI0MDY3LDI0NTk4LDI1MjQzLDI1MjY1LDI1NDI5LDY0MDA2LDI3ODczLDI4MDA2LDMwMTI5LDMwNzcwLDMyOTkwLDMzMDcxLDMzNTAyLDMzODg5LDMzOTcwLDM0OTU3LDM1MDkwLDM2ODc1LDM3NjEwLDM5MTY1LDM5ODI1LDI0MTMzLDI2MjkyLDI2MzMzLDI4Njg5LDI5MTkwLDY0MDA3LDIwNDY5LDIxMTE3LDI0NDI2LDI0OTE1LDI2NDUxLDI3MTYxLDI4NDE4LDI5OTIyLDMxMDgwLDM0OTIwLDM1OTYxLDM5MTExLDM5MTA4LDM5NDkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxNjk3LDMxMjYzLDI2OTYzLDM1NTc1LDM1OTE0LDM5MDgwLDM5MzQyLDI0NDQ0LDI1MjU5LDMwMTMwLDMwMzgyLDM0OTg3LDM2OTkxLDM4NDY2LDIxMzA1LDI0MzgwLDI0NTE3LDI3ODUyLDI5NjQ0LDMwMDUwLDMwMDkxLDMxNTU4LDMzNTM0LDM5MzI1LDIwMDQ3LDM2OTI0LDE5OTc5LDIwMzA5LDIxNDE0LDIyNzk5LDI0MjY0LDI2MTYwLDI3ODI3LDI5NzgxLDMzNjU1LDM0NjYyLDM2MDMyLDM2OTQ0LDM4Njg2LDM5OTU3LDIyNzM3LDIzNDE2LDM0Mzg0LDM1NjA0LDQwMzcyLDIzNTA2LDI0NjgwLDI0NzE3LDI2MDk3LDI3NzM1LDI4NDUwLDI4NTc5LDI4Njk4LDMyNTk3LDMyNzUyLDM4Mjg5LDM4MjkwLDM4NDgwLDM4ODY3LDIxMTA2LDM2Njc2LDIwOTg5LDIxNTQ3LDIxNjg4LDIxODU5LDIxODk4LDI3MzIzLDI4MDg1LDMyMjE2LDMzMzgyLDM3NTMyLDM4NTE5LDQwNTY5LDIxNTEyLDIxNzA0LDMwNDE4LDM0NTMyLDM4MzA4LDM4MzU2LDM4NDkyLDIwMTMwLDIwMjMzLDIzMDIyLDIzMjcwLDI0MDU1LDI0NjU4LDI1MjM5LDI2NDc3LDI2Njg5LDI3NzgyLDI4MjA3LDMyNTY4LDMyOTIzLDMzMzIyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY0MDA4LDY0MDA5LDM4OTE3LDIwMTMzLDIwNTY1LDIxNjgzLDIyNDE5LDIyODc0LDIzNDAxLDIzNDc1LDI1MDMyLDI2OTk5LDI4MDIzLDI4NzA3LDM0ODA5LDM1Mjk5LDM1NDQyLDM1NTU5LDM2OTk0LDM5NDA1LDM5NjA4LDIxMTgyLDI2NjgwLDIwNTAyLDI0MTg0LDI2NDQ3LDMzNjA3LDM0ODkyLDIwMTM5LDIxNTIxLDIyMTkwLDI5NjcwLDM3MTQxLDM4OTExLDM5MTc3LDM5MjU1LDM5MzIxLDIyMDk5LDIyNjg3LDM0Mzk1LDM1Mzc3LDI1MDEwLDI3MzgyLDI5NTYzLDM2NTYyLDI3NDYzLDM4NTcwLDM5NTExLDIyODY5LDI5MTg0LDM2MjAzLDM4NzYxLDIwNDM2LDIzNzk2LDI0MzU4LDI1MDgwLDI2MjAzLDI3ODgzLDI4ODQzLDI5NTcyLDI5NjI1LDI5Njk0LDMwNTA1LDMwNTQxLDMyMDY3LDMyMDk4LDMyMjkxLDMzMzM1LDM0ODk4LDY0MDEwLDM2MDY2LDM3NDQ5LDM5MDIzLDIzMzc3LDMxMzQ4LDM0ODgwLDM4OTEzLDIzMjQ0LDIwNDQ4LDIxMzMyLDIyODQ2LDIzODA1LDI1NDA2LDI4MDI1LDI5NDMzLDMzMDI5LDMzMDMxLDMzNjk4LDM3NTgzLDM4OTYwLDIwMTM2LDIwODA0LDIxMDA5LDIyNDExLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI0NDE4LDI3ODQyLDI4MzY2LDI4Njc3LDI4NzUyLDI4ODQ3LDI5MDc0LDI5NjczLDI5ODAxLDMzNjEwLDM0NzIyLDM0OTEzLDM2ODcyLDM3MDI2LDM3Nzk1LDM5MzM2LDIwODQ2LDI0NDA3LDI0ODAwLDI0OTM1LDI2MjkxLDM0MTM3LDM2NDI2LDM3Mjk1LDM4Nzk1LDIwMDQ2LDIwMTE0LDIxNjI4LDIyNzQxLDIyNzc4LDIyOTA5LDIzNzMzLDI0MzU5LDI1MTQyLDI1MTYwLDI2MTIyLDI2MjE1LDI3NjI3LDI4MDA5LDI4MTExLDI4MjQ2LDI4NDA4LDI4NTY0LDI4NjQwLDI4NjQ5LDI4NzY1LDI5MzkyLDI5NzMzLDI5Nzg2LDI5OTIwLDMwMzU1LDMxMDY4LDMxOTQ2LDMyMjg2LDMyOTkzLDMzNDQ2LDMzODk5LDMzOTgzLDM0MzgyLDM0Mzk5LDM0Njc2LDM1NzAzLDM1OTQ2LDM3ODA0LDM4OTEyLDM5MDEzLDI0Nzg1LDI1MTEwLDM3MjM5LDIzMTMwLDI2MTI3LDI4MTUxLDI4MjIyLDI5NzU5LDM5NzQ2LDI0NTczLDI0Nzk0LDMxNTAzLDIxNzAwLDI0MzQ0LDI3NzQyLDI3ODU5LDI3OTQ2LDI4ODg4LDMyMDA1LDM0NDI1LDM1MzQwLDQwMjUxLDIxMjcwLDIxNjQ0LDIzMzAxLDI3MTk0LDI4Nzc5LDMwMDY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxMTE3LDMxMTY2LDMzNDU3LDMzNzc1LDM1NDQxLDM1NjQ5LDM2MDA4LDM4NzcyLDY0MDExLDI1ODQ0LDI1ODk5LDMwOTA2LDMwOTA3LDMxMzM5LDIwMDI0LDIxOTE0LDIyODY0LDIzNDYyLDI0MTg3LDI0NzM5LDI1NTYzLDI3NDg5LDI2MjEzLDI2NzA3LDI4MTg1LDI5MDI5LDI5ODcyLDMyMDA4LDM2OTk2LDM5NTI5LDM5OTczLDI3OTYzLDI4MzY5LDI5NTAyLDM1OTA1LDM4MzQ2LDIwOTc2LDI0MTQwLDI0NDg4LDI0NjUzLDI0ODIyLDI0ODgwLDI0OTA4LDI2MTc5LDI2MTgwLDI3MDQ1LDI3ODQxLDI4MjU1LDI4MzYxLDI4NTE0LDI5MDA0LDI5ODUyLDMwMzQzLDMxNjgxLDMxNzgzLDMzNjE4LDM0NjQ3LDM2OTQ1LDM4NTQxLDQwNjQzLDIxMjk1LDIyMjM4LDI0MzE1LDI0NDU4LDI0Njc0LDI0NzI0LDI1MDc5LDI2MjE0LDI2MzcxLDI3MjkyLDI4MTQyLDI4NTkwLDI4Nzg0LDI5NTQ2LDMyMzYyLDMzMjE0LDMzNTg4LDM0NTE2LDM1NDk2LDM2MDM2LDIxMTIzLDI5NTU0LDIzNDQ2LDI3MjQzLDM3ODkyLDIxNzQyLDIyMTUwLDIzMzg5LDI1OTI4LDI1OTg5LDI2MzEzLDI2NzgzLDI4MDQ1LDI4MTAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI5MjQzLDMyOTQ4LDM3MjM3LDM5NTAxLDIwMzk5LDIwNTA1LDIxNDAyLDIxNTE4LDIxNTY0LDIxODk3LDIxOTU3LDI0MTI3LDI0NDYwLDI2NDI5LDI5MDMwLDI5NjYxLDM2ODY5LDIxMjExLDIxMjM1LDIyNjI4LDIyNzM0LDI4OTMyLDI5MDcxLDI5MTc5LDM0MjI0LDM1MzQ3LDI2MjQ4LDM0MjE2LDIxOTI3LDI2MjQ0LDI5MDAyLDMzODQxLDIxMzIxLDIxOTEzLDI3NTg1LDI0NDA5LDI0NTA5LDI1NTgyLDI2MjQ5LDI4OTk5LDM1NTY5LDM2NjM3LDQwNjM4LDIwMjQxLDI1NjU4LDI4ODc1LDMwMDU0LDM0NDA3LDI0Njc2LDM1NjYyLDQwNDQwLDIwODA3LDIwOTgyLDIxMjU2LDI3OTU4LDMzMDE2LDQwNjU3LDI2MTMzLDI3NDI3LDI4ODI0LDMwMTY1LDIxNTA3LDIzNjczLDMyMDA3LDM1MzUwLDI3NDI0LDI3NDUzLDI3NDYyLDIxNTYwLDI0Njg4LDI3OTY1LDMyNzI1LDMzMjg4LDIwNjk0LDIwOTU4LDIxOTE2LDIyMTIzLDIyMjIxLDIzMDIwLDIzMzA1LDI0MDc2LDI0OTg1LDI0OTg0LDI1MTM3LDI2MjA2LDI2MzQyLDI5MDgxLDI5MTEzLDI5MTE0LDI5MzUxLDMxMTQzLDMxMjMyLDMyNjkwLDM1NDQwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFxuICBcImdiMTgwMzBcIjpbMTk5NzAsMTk5NzIsMTk5NzMsMTk5NzQsMTk5ODMsMTk5ODYsMTk5OTEsMTk5OTksMjAwMDAsMjAwMDEsMjAwMDMsMjAwMDYsMjAwMDksMjAwMTQsMjAwMTUsMjAwMTcsMjAwMTksMjAwMjEsMjAwMjMsMjAwMjgsMjAwMzIsMjAwMzMsMjAwMzQsMjAwMzYsMjAwMzgsMjAwNDIsMjAwNDksMjAwNTMsMjAwNTUsMjAwNTgsMjAwNTksMjAwNjYsMjAwNjcsMjAwNjgsMjAwNjksMjAwNzEsMjAwNzIsMjAwNzQsMjAwNzUsMjAwNzYsMjAwNzcsMjAwNzgsMjAwNzksMjAwODIsMjAwODQsMjAwODUsMjAwODYsMjAwODcsMjAwODgsMjAwODksMjAwOTAsMjAwOTEsMjAwOTIsMjAwOTMsMjAwOTUsMjAwOTYsMjAwOTcsMjAwOTgsMjAwOTksMjAxMDAsMjAxMDEsMjAxMDMsMjAxMDYsMjAxMTIsMjAxMTgsMjAxMTksMjAxMjEsMjAxMjQsMjAxMjUsMjAxMjYsMjAxMzEsMjAxMzgsMjAxNDMsMjAxNDQsMjAxNDUsMjAxNDgsMjAxNTAsMjAxNTEsMjAxNTIsMjAxNTMsMjAxNTYsMjAxNTcsMjAxNTgsMjAxNjgsMjAxNzIsMjAxNzUsMjAxNzYsMjAxNzgsMjAxODYsMjAxODcsMjAxODgsMjAxOTIsMjAxOTQsMjAxOTgsMjAxOTksMjAyMDEsMjAyMDUsMjAyMDYsMjAyMDcsMjAyMDksMjAyMTIsMjAyMTYsMjAyMTcsMjAyMTgsMjAyMjAsMjAyMjIsMjAyMjQsMjAyMjYsMjAyMjcsMjAyMjgsMjAyMjksMjAyMzAsMjAyMzEsMjAyMzIsMjAyMzUsMjAyMzYsMjAyNDIsMjAyNDMsMjAyNDQsMjAyNDUsMjAyNDYsMjAyNTIsMjAyNTMsMjAyNTcsMjAyNTksMjAyNjQsMjAyNjUsMjAyNjgsMjAyNjksMjAyNzAsMjAyNzMsMjAyNzUsMjAyNzcsMjAyNzksMjAyODEsMjAyODMsMjAyODYsMjAyODcsMjAyODgsMjAyODksMjAyOTAsMjAyOTIsMjAyOTMsMjAyOTUsMjAyOTYsMjAyOTcsMjAyOTgsMjAyOTksMjAzMDAsMjAzMDYsMjAzMDgsMjAzMTAsMjAzMjEsMjAzMjIsMjAzMjYsMjAzMjgsMjAzMzAsMjAzMzEsMjAzMzMsMjAzMzQsMjAzMzcsMjAzMzgsMjAzNDEsMjAzNDMsMjAzNDQsMjAzNDUsMjAzNDYsMjAzNDksMjAzNTIsMjAzNTMsMjAzNTQsMjAzNTcsMjAzNTgsMjAzNTksMjAzNjIsMjAzNjQsMjAzNjYsMjAzNjgsMjAzNzAsMjAzNzEsMjAzNzMsMjAzNzQsMjAzNzYsMjAzNzcsMjAzNzgsMjAzODAsMjAzODIsMjAzODMsMjAzODUsMjAzODYsMjAzODgsMjAzOTUsMjAzOTcsMjA0MDAsMjA0MDEsMjA0MDIsMjA0MDMsMjA0MDQsMjA0MDYsMjA0MDcsMjA0MDgsMjA0MDksMjA0MTAsMjA0MTEsMjA0MTIsMjA0MTMsMjA0MTQsMjA0MTYsMjA0MTcsMjA0MTgsMjA0MjIsMjA0MjMsMjA0MjQsMjA0MjUsMjA0MjcsMjA0MjgsMjA0MjksMjA0MzQsMjA0MzUsMjA0MzYsMjA0MzcsMjA0MzgsMjA0NDEsMjA0NDMsMjA0NDgsMjA0NTAsMjA0NTIsMjA0NTMsMjA0NTUsMjA0NTksMjA0NjAsMjA0NjQsMjA0NjYsMjA0NjgsMjA0NjksMjA0NzAsMjA0NzEsMjA0NzMsMjA0NzUsMjA0NzYsMjA0NzcsMjA0NzksMjA0ODAsMjA0ODEsMjA0ODIsMjA0ODMsMjA0ODQsMjA0ODUsMjA0ODYsMjA0ODcsMjA0ODgsMjA0ODksMjA0OTAsMjA0OTEsMjA0OTQsMjA0OTYsMjA0OTcsMjA0OTksMjA1MDEsMjA1MDIsMjA1MDMsMjA1MDcsMjA1MDksMjA1MTAsMjA1MTIsMjA1MTQsMjA1MTUsMjA1MTYsMjA1MTksMjA1MjMsMjA1MjcsMjA1MjgsMjA1MjksMjA1MzAsMjA1MzEsMjA1MzIsMjA1MzMsMjA1MzQsMjA1MzUsMjA1MzYsMjA1MzcsMjA1MzksMjA1NDEsMjA1NDMsMjA1NDQsMjA1NDUsMjA1NDYsMjA1NDgsMjA1NDksMjA1NTAsMjA1NTMsMjA1NTQsMjA1NTUsMjA1NTcsMjA1NjAsMjA1NjEsMjA1NjIsMjA1NjMsMjA1NjQsMjA1NjYsMjA1NjcsMjA1NjgsMjA1NjksMjA1NzEsMjA1NzMsMjA1NzQsMjA1NzUsMjA1NzYsMjA1NzcsMjA1NzgsMjA1NzksMjA1ODAsMjA1ODIsMjA1ODMsMjA1ODQsMjA1ODUsMjA1ODYsMjA1ODcsMjA1ODksMjA1OTAsMjA1OTEsMjA1OTIsMjA1OTMsMjA1OTQsMjA1OTUsMjA1OTYsMjA1OTcsMjA2MDAsMjA2MDEsMjA2MDIsMjA2MDQsMjA2MDUsMjA2MDksMjA2MTAsMjA2MTEsMjA2MTIsMjA2MTQsMjA2MTUsMjA2MTcsMjA2MTgsMjA2MTksMjA2MjAsMjA2MjIsMjA2MjMsMjA2MjQsMjA2MjUsMjA2MjYsMjA2MjcsMjA2MjgsMjA2MjksMjA2MzAsMjA2MzEsMjA2MzIsMjA2MzMsMjA2MzQsMjA2MzUsMjA2MzYsMjA2MzcsMjA2MzgsMjA2MzksMjA2NDAsMjA2NDEsMjA2NDIsMjA2NDQsMjA2NDYsMjA2NTAsMjA2NTEsMjA2NTMsMjA2NTQsMjA2NTUsMjA2NTYsMjA2NTcsMjA2NTksMjA2NjAsMjA2NjEsMjA2NjIsMjA2NjMsMjA2NjQsMjA2NjUsMjA2NjgsMjA2NjksMjA2NzAsMjA2NzEsMjA2NzIsMjA2NzMsMjA2NzQsMjA2NzUsMjA2NzYsMjA2NzcsMjA2NzgsMjA2NzksMjA2ODAsMjA2ODEsMjA2ODIsMjA2ODMsMjA2ODQsMjA2ODUsMjA2ODYsMjA2ODgsMjA2ODksMjA2OTAsMjA2OTEsMjA2OTIsMjA2OTMsMjA2OTUsMjA2OTYsMjA2OTcsMjA2OTksMjA3MDAsMjA3MDEsMjA3MDIsMjA3MDMsMjA3MDQsMjA3MDUsMjA3MDYsMjA3MDcsMjA3MDgsMjA3MDksMjA3MTIsMjA3MTMsMjA3MTQsMjA3MTUsMjA3MTksMjA3MjAsMjA3MjEsMjA3MjIsMjA3MjQsMjA3MjYsMjA3MjcsMjA3MjgsMjA3MjksMjA3MzAsMjA3MzIsMjA3MzMsMjA3MzQsMjA3MzUsMjA3MzYsMjA3MzcsMjA3MzgsMjA3MzksMjA3NDAsMjA3NDEsMjA3NDQsMjA3NDUsMjA3NDYsMjA3NDgsMjA3NDksMjA3NTAsMjA3NTEsMjA3NTIsMjA3NTMsMjA3NTUsMjA3NTYsMjA3NTcsMjA3NTgsMjA3NTksMjA3NjAsMjA3NjEsMjA3NjIsMjA3NjMsMjA3NjQsMjA3NjUsMjA3NjYsMjA3NjcsMjA3NjgsMjA3NzAsMjA3NzEsMjA3NzIsMjA3NzMsMjA3NzQsMjA3NzUsMjA3NzYsMjA3NzcsMjA3NzgsMjA3NzksMjA3ODAsMjA3ODEsMjA3ODIsMjA3ODMsMjA3ODQsMjA3ODUsMjA3ODYsMjA3ODcsMjA3ODgsMjA3ODksMjA3OTAsMjA3OTEsMjA3OTIsMjA3OTMsMjA3OTQsMjA3OTUsMjA3OTYsMjA3OTcsMjA3OTgsMjA4MDIsMjA4MDcsMjA4MTAsMjA4MTIsMjA4MTQsMjA4MTUsMjA4MTYsMjA4MTgsMjA4MTksMjA4MjMsMjA4MjQsMjA4MjUsMjA4MjcsMjA4MjksMjA4MzAsMjA4MzEsMjA4MzIsMjA4MzMsMjA4MzUsMjA4MzYsMjA4MzgsMjA4MzksMjA4NDEsMjA4NDIsMjA4NDcsMjA4NTAsMjA4NTgsMjA4NjIsMjA4NjMsMjA4NjcsMjA4NjgsMjA4NzAsMjA4NzEsMjA4NzQsMjA4NzUsMjA4NzgsMjA4NzksMjA4ODAsMjA4ODEsMjA4ODMsMjA4ODQsMjA4ODgsMjA4OTAsMjA4OTMsMjA4OTQsMjA4OTUsMjA4OTcsMjA4OTksMjA5MDIsMjA5MDMsMjA5MDQsMjA5MDUsMjA5MDYsMjA5MDksMjA5MTAsMjA5MTYsMjA5MjAsMjA5MjEsMjA5MjIsMjA5MjYsMjA5MjcsMjA5MjksMjA5MzAsMjA5MzEsMjA5MzMsMjA5MzYsMjA5MzgsMjA5NDEsMjA5NDIsMjA5NDQsMjA5NDYsMjA5NDcsMjA5NDgsMjA5NDksMjA5NTAsMjA5NTEsMjA5NTIsMjA5NTMsMjA5NTQsMjA5NTYsMjA5NTgsMjA5NTksMjA5NjIsMjA5NjMsMjA5NjUsMjA5NjYsMjA5NjcsMjA5NjgsMjA5NjksMjA5NzAsMjA5NzIsMjA5NzQsMjA5NzcsMjA5NzgsMjA5ODAsMjA5ODMsMjA5OTAsMjA5OTYsMjA5OTcsMjEwMDEsMjEwMDMsMjEwMDQsMjEwMDcsMjEwMDgsMjEwMTEsMjEwMTIsMjEwMTMsMjEwMjAsMjEwMjIsMjEwMjMsMjEwMjUsMjEwMjYsMjEwMjcsMjEwMjksMjEwMzAsMjEwMzEsMjEwMzQsMjEwMzYsMjEwMzksMjEwNDEsMjEwNDIsMjEwNDQsMjEwNDUsMjEwNTIsMjEwNTQsMjEwNjAsMjEwNjEsMjEwNjIsMjEwNjMsMjEwNjQsMjEwNjUsMjEwNjcsMjEwNzAsMjEwNzEsMjEwNzQsMjEwNzUsMjEwNzcsMjEwNzksMjEwODAsMjEwODEsMjEwODIsMjEwODMsMjEwODUsMjEwODcsMjEwODgsMjEwOTAsMjEwOTEsMjEwOTIsMjEwOTQsMjEwOTYsMjEwOTksMjExMDAsMjExMDEsMjExMDIsMjExMDQsMjExMDUsMjExMDcsMjExMDgsMjExMDksMjExMTAsMjExMTEsMjExMTIsMjExMTMsMjExMTQsMjExMTUsMjExMTYsMjExMTgsMjExMjAsMjExMjMsMjExMjQsMjExMjUsMjExMjYsMjExMjcsMjExMjksMjExMzAsMjExMzEsMjExMzIsMjExMzMsMjExMzQsMjExMzUsMjExMzcsMjExMzgsMjExNDAsMjExNDEsMjExNDIsMjExNDMsMjExNDQsMjExNDUsMjExNDYsMjExNDgsMjExNTYsMjExNTcsMjExNTgsMjExNTksMjExNjYsMjExNjcsMjExNjgsMjExNzIsMjExNzMsMjExNzQsMjExNzUsMjExNzYsMjExNzcsMjExNzgsMjExNzksMjExODAsMjExODEsMjExODQsMjExODUsMjExODYsMjExODgsMjExODksMjExOTAsMjExOTIsMjExOTQsMjExOTYsMjExOTcsMjExOTgsMjExOTksMjEyMDEsMjEyMDMsMjEyMDQsMjEyMDUsMjEyMDcsMjEyMDksMjEyMTAsMjEyMTEsMjEyMTIsMjEyMTMsMjEyMTQsMjEyMTYsMjEyMTcsMjEyMTgsMjEyMTksMjEyMjEsMjEyMjIsMjEyMjMsMjEyMjQsMjEyMjUsMjEyMjYsMjEyMjcsMjEyMjgsMjEyMjksMjEyMzAsMjEyMzEsMjEyMzMsMjEyMzQsMjEyMzUsMjEyMzYsMjEyMzcsMjEyMzgsMjEyMzksMjEyNDAsMjEyNDMsMjEyNDQsMjEyNDUsMjEyNDksMjEyNTAsMjEyNTEsMjEyNTIsMjEyNTUsMjEyNTcsMjEyNTgsMjEyNTksMjEyNjAsMjEyNjIsMjEyNjUsMjEyNjYsMjEyNjcsMjEyNjgsMjEyNzIsMjEyNzUsMjEyNzYsMjEyNzgsMjEyNzksMjEyODIsMjEyODQsMjEyODUsMjEyODcsMjEyODgsMjEyODksMjEyOTEsMjEyOTIsMjEyOTMsMjEyOTUsMjEyOTYsMjEyOTcsMjEyOTgsMjEyOTksMjEzMDAsMjEzMDEsMjEzMDIsMjEzMDMsMjEzMDQsMjEzMDgsMjEzMDksMjEzMTIsMjEzMTQsMjEzMTYsMjEzMTgsMjEzMjMsMjEzMjQsMjEzMjUsMjEzMjgsMjEzMzIsMjEzMzYsMjEzMzcsMjEzMzksMjEzNDEsMjEzNDksMjEzNTIsMjEzNTQsMjEzNTYsMjEzNTcsMjEzNjIsMjEzNjYsMjEzNjksMjEzNzEsMjEzNzIsMjEzNzMsMjEzNzQsMjEzNzYsMjEzNzcsMjEzNzksMjEzODMsMjEzODQsMjEzODYsMjEzOTAsMjEzOTEsMjEzOTIsMjEzOTMsMjEzOTQsMjEzOTUsMjEzOTYsMjEzOTgsMjEzOTksMjE0MDEsMjE0MDMsMjE0MDQsMjE0MDYsMjE0MDgsMjE0MDksMjE0MTIsMjE0MTUsMjE0MTgsMjE0MTksMjE0MjAsMjE0MjEsMjE0MjMsMjE0MjQsMjE0MjUsMjE0MjYsMjE0MjcsMjE0MjgsMjE0MjksMjE0MzEsMjE0MzIsMjE0MzMsMjE0MzQsMjE0MzYsMjE0MzcsMjE0MzgsMjE0NDAsMjE0NDMsMjE0NDQsMjE0NDUsMjE0NDYsMjE0NDcsMjE0NTQsMjE0NTUsMjE0NTYsMjE0NTgsMjE0NTksMjE0NjEsMjE0NjYsMjE0NjgsMjE0NjksMjE0NzAsMjE0NzMsMjE0NzQsMjE0NzksMjE0OTIsMjE0OTgsMjE1MDIsMjE1MDMsMjE1MDQsMjE1MDYsMjE1MDksMjE1MTEsMjE1MTUsMjE1MjQsMjE1MjgsMjE1MjksMjE1MzAsMjE1MzIsMjE1MzgsMjE1NDAsMjE1NDEsMjE1NDYsMjE1NTIsMjE1NTUsMjE1NTgsMjE1NTksMjE1NjIsMjE1NjUsMjE1NjcsMjE1NjksMjE1NzAsMjE1NzIsMjE1NzMsMjE1NzUsMjE1NzcsMjE1ODAsMjE1ODEsMjE1ODIsMjE1ODMsMjE1ODUsMjE1OTQsMjE1OTcsMjE1OTgsMjE1OTksMjE2MDAsMjE2MDEsMjE2MDMsMjE2MDUsMjE2MDcsMjE2MDksMjE2MTAsMjE2MTEsMjE2MTIsMjE2MTMsMjE2MTQsMjE2MTUsMjE2MTYsMjE2MjAsMjE2MjUsMjE2MjYsMjE2MzAsMjE2MzEsMjE2MzMsMjE2MzUsMjE2MzcsMjE2MzksMjE2NDAsMjE2NDEsMjE2NDIsMjE2NDUsMjE2NDksMjE2NTEsMjE2NTUsMjE2NTYsMjE2NjAsMjE2NjIsMjE2NjMsMjE2NjQsMjE2NjUsMjE2NjYsMjE2NjksMjE2NzgsMjE2ODAsMjE2ODIsMjE2ODUsMjE2ODYsMjE2ODcsMjE2ODksMjE2OTAsMjE2OTIsMjE2OTQsMjE2OTksMjE3MDEsMjE3MDYsMjE3MDcsMjE3MTgsMjE3MjAsMjE3MjMsMjE3MjgsMjE3MjksMjE3MzAsMjE3MzEsMjE3MzIsMjE3MzksMjE3NDAsMjE3NDMsMjE3NDQsMjE3NDUsMjE3NDgsMjE3NDksMjE3NTAsMjE3NTEsMjE3NTIsMjE3NTMsMjE3NTUsMjE3NTgsMjE3NjAsMjE3NjIsMjE3NjMsMjE3NjQsMjE3NjUsMjE3NjgsMjE3NzAsMjE3NzEsMjE3NzIsMjE3NzMsMjE3NzQsMjE3NzgsMjE3NzksMjE3ODEsMjE3ODIsMjE3ODMsMjE3ODQsMjE3ODUsMjE3ODYsMjE3ODgsMjE3ODksMjE3OTAsMjE3OTEsMjE3OTMsMjE3OTcsMjE3OTgsMjE4MDAsMjE4MDEsMjE4MDMsMjE4MDUsMjE4MTAsMjE4MTIsMjE4MTMsMjE4MTQsMjE4MTYsMjE4MTcsMjE4MTgsMjE4MTksMjE4MjEsMjE4MjQsMjE4MjYsMjE4MjksMjE4MzEsMjE4MzIsMjE4MzUsMjE4MzYsMjE4MzcsMjE4MzgsMjE4MzksMjE4NDEsMjE4NDIsMjE4NDMsMjE4NDQsMjE4NDcsMjE4NDgsMjE4NDksMjE4NTAsMjE4NTEsMjE4NTMsMjE4NTQsMjE4NTUsMjE4NTYsMjE4NTgsMjE4NTksMjE4NjQsMjE4NjUsMjE4NjcsMjE4NzEsMjE4NzIsMjE4NzMsMjE4NzQsMjE4NzUsMjE4NzYsMjE4ODEsMjE4ODIsMjE4ODUsMjE4ODcsMjE4OTMsMjE4OTQsMjE5MDAsMjE5MDEsMjE5MDIsMjE5MDQsMjE5MDYsMjE5MDcsMjE5MDksMjE5MTAsMjE5MTEsMjE5MTQsMjE5MTUsMjE5MTgsMjE5MjAsMjE5MjEsMjE5MjIsMjE5MjMsMjE5MjQsMjE5MjUsMjE5MjYsMjE5MjgsMjE5MjksMjE5MzAsMjE5MzEsMjE5MzIsMjE5MzMsMjE5MzQsMjE5MzUsMjE5MzYsMjE5MzgsMjE5NDAsMjE5NDIsMjE5NDQsMjE5NDYsMjE5NDgsMjE5NTEsMjE5NTIsMjE5NTMsMjE5NTQsMjE5NTUsMjE5NTgsMjE5NTksMjE5NjAsMjE5NjIsMjE5NjMsMjE5NjYsMjE5NjcsMjE5NjgsMjE5NzMsMjE5NzUsMjE5NzYsMjE5NzcsMjE5NzgsMjE5NzksMjE5ODIsMjE5ODQsMjE5ODYsMjE5OTEsMjE5OTMsMjE5OTcsMjE5OTgsMjIwMDAsMjIwMDEsMjIwMDQsMjIwMDYsMjIwMDgsMjIwMDksMjIwMTAsMjIwMTEsMjIwMTIsMjIwMTUsMjIwMTgsMjIwMTksMjIwMjAsMjIwMjEsMjIwMjIsMjIwMjMsMjIwMjYsMjIwMjcsMjIwMjksMjIwMzIsMjIwMzMsMjIwMzQsMjIwMzUsMjIwMzYsMjIwMzcsMjIwMzgsMjIwMzksMjIwNDEsMjIwNDIsMjIwNDQsMjIwNDUsMjIwNDgsMjIwNDksMjIwNTAsMjIwNTMsMjIwNTQsMjIwNTYsMjIwNTcsMjIwNTgsMjIwNTksMjIwNjIsMjIwNjMsMjIwNjQsMjIwNjcsMjIwNjksMjIwNzEsMjIwNzIsMjIwNzQsMjIwNzYsMjIwNzcsMjIwNzgsMjIwODAsMjIwODEsMjIwODIsMjIwODMsMjIwODQsMjIwODUsMjIwODYsMjIwODcsMjIwODgsMjIwODksMjIwOTAsMjIwOTEsMjIwOTUsMjIwOTYsMjIwOTcsMjIwOTgsMjIwOTksMjIxMDEsMjIxMDIsMjIxMDYsMjIxMDcsMjIxMDksMjIxMTAsMjIxMTEsMjIxMTIsMjIxMTMsMjIxMTUsMjIxMTcsMjIxMTgsMjIxMTksMjIxMjUsMjIxMjYsMjIxMjcsMjIxMjgsMjIxMzAsMjIxMzEsMjIxMzIsMjIxMzMsMjIxMzUsMjIxMzYsMjIxMzcsMjIxMzgsMjIxNDEsMjIxNDIsMjIxNDMsMjIxNDQsMjIxNDUsMjIxNDYsMjIxNDcsMjIxNDgsMjIxNTEsMjIxNTIsMjIxNTMsMjIxNTQsMjIxNTUsMjIxNTYsMjIxNTcsMjIxNjAsMjIxNjEsMjIxNjIsMjIxNjQsMjIxNjUsMjIxNjYsMjIxNjcsMjIxNjgsMjIxNjksMjIxNzAsMjIxNzEsMjIxNzIsMjIxNzMsMjIxNzQsMjIxNzUsMjIxNzYsMjIxNzcsMjIxNzgsMjIxODAsMjIxODEsMjIxODIsMjIxODMsMjIxODQsMjIxODUsMjIxODYsMjIxODcsMjIxODgsMjIxODksMjIxOTAsMjIxOTIsMjIxOTMsMjIxOTQsMjIxOTUsMjIxOTYsMjIxOTcsMjIxOTgsMjIyMDAsMjIyMDEsMjIyMDIsMjIyMDMsMjIyMDUsMjIyMDYsMjIyMDcsMjIyMDgsMjIyMDksMjIyMTAsMjIyMTEsMjIyMTIsMjIyMTMsMjIyMTQsMjIyMTUsMjIyMTYsMjIyMTcsMjIyMTksMjIyMjAsMjIyMjEsMjIyMjIsMjIyMjMsMjIyMjQsMjIyMjUsMjIyMjYsMjIyMjcsMjIyMjksMjIyMzAsMjIyMzIsMjIyMzMsMjIyMzYsMjIyNDMsMjIyNDUsMjIyNDYsMjIyNDcsMjIyNDgsMjIyNDksMjIyNTAsMjIyNTIsMjIyNTQsMjIyNTUsMjIyNTgsMjIyNTksMjIyNjIsMjIyNjMsMjIyNjQsMjIyNjcsMjIyNjgsMjIyNzIsMjIyNzMsMjIyNzQsMjIyNzcsMjIyNzksMjIyODMsMjIyODQsMjIyODUsMjIyODYsMjIyODcsMjIyODgsMjIyODksMjIyOTAsMjIyOTEsMjIyOTIsMjIyOTMsMjIyOTQsMjIyOTUsMjIyOTYsMjIyOTcsMjIyOTgsMjIyOTksMjIzMDEsMjIzMDIsMjIzMDQsMjIzMDUsMjIzMDYsMjIzMDgsMjIzMDksMjIzMTAsMjIzMTEsMjIzMTUsMjIzMjEsMjIzMjIsMjIzMjQsMjIzMjUsMjIzMjYsMjIzMjcsMjIzMjgsMjIzMzIsMjIzMzMsMjIzMzUsMjIzMzcsMjIzMzksMjIzNDAsMjIzNDEsMjIzNDIsMjIzNDQsMjIzNDUsMjIzNDcsMjIzNTQsMjIzNTUsMjIzNTYsMjIzNTcsMjIzNTgsMjIzNjAsMjIzNjEsMjIzNzAsMjIzNzEsMjIzNzMsMjIzNzUsMjIzODAsMjIzODIsMjIzODQsMjIzODUsMjIzODYsMjIzODgsMjIzODksMjIzOTIsMjIzOTMsMjIzOTQsMjIzOTcsMjIzOTgsMjIzOTksMjI0MDAsMjI0MDEsMjI0MDcsMjI0MDgsMjI0MDksMjI0MTAsMjI0MTMsMjI0MTQsMjI0MTUsMjI0MTYsMjI0MTcsMjI0MjAsMjI0MjEsMjI0MjIsMjI0MjMsMjI0MjQsMjI0MjUsMjI0MjYsMjI0MjgsMjI0MjksMjI0MzAsMjI0MzEsMjI0MzcsMjI0NDAsMjI0NDIsMjI0NDQsMjI0NDcsMjI0NDgsMjI0NDksMjI0NTEsMjI0NTMsMjI0NTQsMjI0NTUsMjI0NTcsMjI0NTgsMjI0NTksMjI0NjAsMjI0NjEsMjI0NjIsMjI0NjMsMjI0NjQsMjI0NjUsMjI0NjgsMjI0NjksMjI0NzAsMjI0NzEsMjI0NzIsMjI0NzMsMjI0NzQsMjI0NzYsMjI0NzcsMjI0ODAsMjI0ODEsMjI0ODMsMjI0ODYsMjI0ODcsMjI0OTEsMjI0OTIsMjI0OTQsMjI0OTcsMjI0OTgsMjI0OTksMjI1MDEsMjI1MDIsMjI1MDMsMjI1MDQsMjI1MDUsMjI1MDYsMjI1MDcsMjI1MDgsMjI1MTAsMjI1MTIsMjI1MTMsMjI1MTQsMjI1MTUsMjI1MTcsMjI1MTgsMjI1MTksMjI1MjMsMjI1MjQsMjI1MjYsMjI1MjcsMjI1MjksMjI1MzEsMjI1MzIsMjI1MzMsMjI1MzYsMjI1MzcsMjI1MzgsMjI1NDAsMjI1NDIsMjI1NDMsMjI1NDQsMjI1NDYsMjI1NDcsMjI1NDgsMjI1NTAsMjI1NTEsMjI1NTIsMjI1NTQsMjI1NTUsMjI1NTYsMjI1NTcsMjI1NTksMjI1NjIsMjI1NjMsMjI1NjUsMjI1NjYsMjI1NjcsMjI1NjgsMjI1NjksMjI1NzEsMjI1NzIsMjI1NzMsMjI1NzQsMjI1NzUsMjI1NzcsMjI1NzgsMjI1NzksMjI1ODAsMjI1ODIsMjI1ODMsMjI1ODQsMjI1ODUsMjI1ODYsMjI1ODcsMjI1ODgsMjI1ODksMjI1OTAsMjI1OTEsMjI1OTIsMjI1OTMsMjI1OTQsMjI1OTUsMjI1OTcsMjI1OTgsMjI1OTksMjI2MDAsMjI2MDEsMjI2MDIsMjI2MDMsMjI2MDYsMjI2MDcsMjI2MDgsMjI2MTAsMjI2MTEsMjI2MTMsMjI2MTQsMjI2MTUsMjI2MTcsMjI2MTgsMjI2MTksMjI2MjAsMjI2MjEsMjI2MjMsMjI2MjQsMjI2MjUsMjI2MjYsMjI2MjcsMjI2MjgsMjI2MzAsMjI2MzEsMjI2MzIsMjI2MzMsMjI2MzQsMjI2MzcsMjI2MzgsMjI2MzksMjI2NDAsMjI2NDEsMjI2NDIsMjI2NDMsMjI2NDQsMjI2NDUsMjI2NDYsMjI2NDcsMjI2NDgsMjI2NDksMjI2NTAsMjI2NTEsMjI2NTIsMjI2NTMsMjI2NTUsMjI2NTgsMjI2NjAsMjI2NjIsMjI2NjMsMjI2NjQsMjI2NjYsMjI2NjcsMjI2NjgsMjI2NjksMjI2NzAsMjI2NzEsMjI2NzIsMjI2NzMsMjI2NzYsMjI2NzcsMjI2NzgsMjI2NzksMjI2ODAsMjI2ODMsMjI2ODQsMjI2ODUsMjI2ODgsMjI2ODksMjI2OTAsMjI2OTEsMjI2OTIsMjI2OTMsMjI2OTQsMjI2OTUsMjI2OTgsMjI2OTksMjI3MDAsMjI3MDEsMjI3MDIsMjI3MDMsMjI3MDQsMjI3MDUsMjI3MDYsMjI3MDcsMjI3MDgsMjI3MDksMjI3MTAsMjI3MTEsMjI3MTIsMjI3MTMsMjI3MTQsMjI3MTUsMjI3MTcsMjI3MTgsMjI3MTksMjI3MjAsMjI3MjIsMjI3MjMsMjI3MjQsMjI3MjYsMjI3MjcsMjI3MjgsMjI3MjksMjI3MzAsMjI3MzEsMjI3MzIsMjI3MzMsMjI3MzQsMjI3MzUsMjI3MzYsMjI3MzgsMjI3MzksMjI3NDAsMjI3NDIsMjI3NDMsMjI3NDQsMjI3NDUsMjI3NDYsMjI3NDcsMjI3NDgsMjI3NDksMjI3NTAsMjI3NTEsMjI3NTIsMjI3NTMsMjI3NTQsMjI3NTUsMjI3NTcsMjI3NTgsMjI3NTksMjI3NjAsMjI3NjEsMjI3NjIsMjI3NjUsMjI3NjcsMjI3NjksMjI3NzAsMjI3NzIsMjI3NzMsMjI3NzUsMjI3NzYsMjI3NzgsMjI3NzksMjI3ODAsMjI3ODEsMjI3ODIsMjI3ODMsMjI3ODQsMjI3ODUsMjI3ODcsMjI3ODksMjI3OTAsMjI3OTIsMjI3OTMsMjI3OTQsMjI3OTUsMjI3OTYsMjI3OTgsMjI4MDAsMjI4MDEsMjI4MDIsMjI4MDMsMjI4MDcsMjI4MDgsMjI4MTEsMjI4MTMsMjI4MTQsMjI4MTYsMjI4MTcsMjI4MTgsMjI4MTksMjI4MjIsMjI4MjQsMjI4MjgsMjI4MzIsMjI4MzQsMjI4MzUsMjI4MzcsMjI4MzgsMjI4NDMsMjI4NDUsMjI4NDYsMjI4NDcsMjI4NDgsMjI4NTEsMjI4NTMsMjI4NTQsMjI4NTgsMjI4NjAsMjI4NjEsMjI4NjQsMjI4NjYsMjI4NjcsMjI4NzMsMjI4NzUsMjI4NzYsMjI4NzcsMjI4NzgsMjI4NzksMjI4ODEsMjI4ODMsMjI4ODQsMjI4ODYsMjI4ODcsMjI4ODgsMjI4ODksMjI4OTAsMjI4OTEsMjI4OTIsMjI4OTMsMjI4OTQsMjI4OTUsMjI4OTYsMjI4OTcsMjI4OTgsMjI5MDEsMjI5MDMsMjI5MDYsMjI5MDcsMjI5MDgsMjI5MTAsMjI5MTEsMjI5MTIsMjI5MTcsMjI5MjEsMjI5MjMsMjI5MjQsMjI5MjYsMjI5MjcsMjI5MjgsMjI5MjksMjI5MzIsMjI5MzMsMjI5MzYsMjI5MzgsMjI5MzksMjI5NDAsMjI5NDEsMjI5NDMsMjI5NDQsMjI5NDUsMjI5NDYsMjI5NTAsMjI5NTEsMjI5NTYsMjI5NTcsMjI5NjAsMjI5NjEsMjI5NjMsMjI5NjQsMjI5NjUsMjI5NjYsMjI5NjcsMjI5NjgsMjI5NzAsMjI5NzIsMjI5NzMsMjI5NzUsMjI5NzYsMjI5NzcsMjI5NzgsMjI5NzksMjI5ODAsMjI5ODEsMjI5ODMsMjI5ODQsMjI5ODUsMjI5ODgsMjI5ODksMjI5OTAsMjI5OTEsMjI5OTcsMjI5OTgsMjMwMDEsMjMwMDMsMjMwMDYsMjMwMDcsMjMwMDgsMjMwMDksMjMwMTAsMjMwMTIsMjMwMTQsMjMwMTUsMjMwMTcsMjMwMTgsMjMwMTksMjMwMjEsMjMwMjIsMjMwMjMsMjMwMjQsMjMwMjUsMjMwMjYsMjMwMjcsMjMwMjgsMjMwMjksMjMwMzAsMjMwMzEsMjMwMzIsMjMwMzQsMjMwMzYsMjMwMzcsMjMwMzgsMjMwNDAsMjMwNDIsMjMwNTAsMjMwNTEsMjMwNTMsMjMwNTQsMjMwNTUsMjMwNTYsMjMwNTgsMjMwNjAsMjMwNjEsMjMwNjIsMjMwNjMsMjMwNjUsMjMwNjYsMjMwNjcsMjMwNjksMjMwNzAsMjMwNzMsMjMwNzQsMjMwNzYsMjMwNzgsMjMwNzksMjMwODAsMjMwODIsMjMwODMsMjMwODQsMjMwODUsMjMwODYsMjMwODcsMjMwODgsMjMwOTEsMjMwOTMsMjMwOTUsMjMwOTYsMjMwOTcsMjMwOTgsMjMwOTksMjMxMDEsMjMxMDIsMjMxMDMsMjMxMDUsMjMxMDYsMjMxMDcsMjMxMDgsMjMxMDksMjMxMTEsMjMxMTIsMjMxMTUsMjMxMTYsMjMxMTcsMjMxMTgsMjMxMTksMjMxMjAsMjMxMjEsMjMxMjIsMjMxMjMsMjMxMjQsMjMxMjYsMjMxMjcsMjMxMjgsMjMxMjksMjMxMzEsMjMxMzIsMjMxMzMsMjMxMzQsMjMxMzUsMjMxMzYsMjMxMzcsMjMxMzksMjMxNDAsMjMxNDEsMjMxNDIsMjMxNDQsMjMxNDUsMjMxNDcsMjMxNDgsMjMxNDksMjMxNTAsMjMxNTEsMjMxNTIsMjMxNTMsMjMxNTQsMjMxNTUsMjMxNjAsMjMxNjEsMjMxNjMsMjMxNjQsMjMxNjUsMjMxNjYsMjMxNjgsMjMxNjksMjMxNzAsMjMxNzEsMjMxNzIsMjMxNzMsMjMxNzQsMjMxNzUsMjMxNzYsMjMxNzcsMjMxNzgsMjMxNzksMjMxODAsMjMxODEsMjMxODIsMjMxODMsMjMxODQsMjMxODUsMjMxODcsMjMxODgsMjMxODksMjMxOTAsMjMxOTEsMjMxOTIsMjMxOTMsMjMxOTYsMjMxOTcsMjMxOTgsMjMxOTksMjMyMDAsMjMyMDEsMjMyMDIsMjMyMDMsMjMyMDQsMjMyMDUsMjMyMDYsMjMyMDcsMjMyMDgsMjMyMDksMjMyMTEsMjMyMTIsMjMyMTMsMjMyMTQsMjMyMTUsMjMyMTYsMjMyMTcsMjMyMjAsMjMyMjIsMjMyMjMsMjMyMjUsMjMyMjYsMjMyMjcsMjMyMjgsMjMyMjksMjMyMzEsMjMyMzIsMjMyMzUsMjMyMzYsMjMyMzcsMjMyMzgsMjMyMzksMjMyNDAsMjMyNDIsMjMyNDMsMjMyNDUsMjMyNDYsMjMyNDcsMjMyNDgsMjMyNDksMjMyNTEsMjMyNTMsMjMyNTUsMjMyNTcsMjMyNTgsMjMyNTksMjMyNjEsMjMyNjIsMjMyNjMsMjMyNjYsMjMyNjgsMjMyNjksMjMyNzEsMjMyNzIsMjMyNzQsMjMyNzYsMjMyNzcsMjMyNzgsMjMyNzksMjMyODAsMjMyODIsMjMyODMsMjMyODQsMjMyODUsMjMyODYsMjMyODcsMjMyODgsMjMyODksMjMyOTAsMjMyOTEsMjMyOTIsMjMyOTMsMjMyOTQsMjMyOTUsMjMyOTYsMjMyOTcsMjMyOTgsMjMyOTksMjMzMDAsMjMzMDEsMjMzMDIsMjMzMDMsMjMzMDQsMjMzMDYsMjMzMDcsMjMzMDgsMjMzMDksMjMzMTAsMjMzMTEsMjMzMTIsMjMzMTMsMjMzMTQsMjMzMTUsMjMzMTYsMjMzMTcsMjMzMjAsMjMzMjEsMjMzMjIsMjMzMjMsMjMzMjQsMjMzMjUsMjMzMjYsMjMzMjcsMjMzMjgsMjMzMjksMjMzMzAsMjMzMzEsMjMzMzIsMjMzMzMsMjMzMzQsMjMzMzUsMjMzMzYsMjMzMzcsMjMzMzgsMjMzMzksMjMzNDAsMjMzNDEsMjMzNDIsMjMzNDMsMjMzNDQsMjMzNDUsMjMzNDcsMjMzNDksMjMzNTAsMjMzNTIsMjMzNTMsMjMzNTQsMjMzNTUsMjMzNTYsMjMzNTcsMjMzNTgsMjMzNTksMjMzNjEsMjMzNjIsMjMzNjMsMjMzNjQsMjMzNjUsMjMzNjYsMjMzNjcsMjMzNjgsMjMzNjksMjMzNzAsMjMzNzEsMjMzNzIsMjMzNzMsMjMzNzQsMjMzNzUsMjMzNzgsMjMzODIsMjMzOTAsMjMzOTIsMjMzOTMsMjMzOTksMjM0MDAsMjM0MDMsMjM0MDUsMjM0MDYsMjM0MDcsMjM0MTAsMjM0MTIsMjM0MTQsMjM0MTUsMjM0MTYsMjM0MTcsMjM0MTksMjM0MjAsMjM0MjIsMjM0MjMsMjM0MjYsMjM0MzAsMjM0MzQsMjM0MzcsMjM0MzgsMjM0NDAsMjM0NDEsMjM0NDIsMjM0NDQsMjM0NDYsMjM0NTUsMjM0NjMsMjM0NjQsMjM0NjUsMjM0NjgsMjM0NjksMjM0NzAsMjM0NzEsMjM0NzMsMjM0NzQsMjM0NzksMjM0ODIsMjM0ODMsMjM0ODQsMjM0ODgsMjM0ODksMjM0OTEsMjM0OTYsMjM0OTcsMjM0OTgsMjM0OTksMjM1MDEsMjM1MDIsMjM1MDMsMjM1MDUsMjM1MDgsMjM1MDksMjM1MTAsMjM1MTEsMjM1MTIsMjM1MTMsMjM1MTQsMjM1MTUsMjM1MTYsMjM1MjAsMjM1MjIsMjM1MjMsMjM1MjYsMjM1MjcsMjM1MjksMjM1MzAsMjM1MzEsMjM1MzIsMjM1MzMsMjM1MzUsMjM1MzcsMjM1MzgsMjM1MzksMjM1NDAsMjM1NDEsMjM1NDIsMjM1NDMsMjM1NDksMjM1NTAsMjM1NTIsMjM1NTQsMjM1NTUsMjM1NTcsMjM1NTksMjM1NjAsMjM1NjMsMjM1NjQsMjM1NjUsMjM1NjYsMjM1NjgsMjM1NzAsMjM1NzEsMjM1NzUsMjM1NzcsMjM1NzksMjM1ODIsMjM1ODMsMjM1ODQsMjM1ODUsMjM1ODcsMjM1OTAsMjM1OTIsMjM1OTMsMjM1OTQsMjM1OTUsMjM1OTcsMjM1OTgsMjM1OTksMjM2MDAsMjM2MDIsMjM2MDMsMjM2MDUsMjM2MDYsMjM2MDcsMjM2MTksMjM2MjAsMjM2MjIsMjM2MjMsMjM2MjgsMjM2MjksMjM2MzQsMjM2MzUsMjM2MzYsMjM2MzgsMjM2MzksMjM2NDAsMjM2NDIsMjM2NDMsMjM2NDQsMjM2NDUsMjM2NDcsMjM2NTAsMjM2NTIsMjM2NTUsMjM2NTYsMjM2NTcsMjM2NTgsMjM2NTksMjM2NjAsMjM2NjEsMjM2NjQsMjM2NjYsMjM2NjcsMjM2NjgsMjM2NjksMjM2NzAsMjM2NzEsMjM2NzIsMjM2NzUsMjM2NzYsMjM2NzcsMjM2NzgsMjM2ODAsMjM2ODMsMjM2ODQsMjM2ODUsMjM2ODYsMjM2ODcsMjM2ODksMjM2OTAsMjM2OTEsMjM2OTQsMjM2OTUsMjM2OTgsMjM2OTksMjM3MDEsMjM3MDksMjM3MTAsMjM3MTEsMjM3MTIsMjM3MTMsMjM3MTYsMjM3MTcsMjM3MTgsMjM3MTksMjM3MjAsMjM3MjIsMjM3MjYsMjM3MjcsMjM3MjgsMjM3MzAsMjM3MzIsMjM3MzQsMjM3MzcsMjM3MzgsMjM3MzksMjM3NDAsMjM3NDIsMjM3NDQsMjM3NDYsMjM3NDcsMjM3NDksMjM3NTAsMjM3NTEsMjM3NTIsMjM3NTMsMjM3NTQsMjM3NTYsMjM3NTcsMjM3NTgsMjM3NTksMjM3NjAsMjM3NjEsMjM3NjMsMjM3NjQsMjM3NjUsMjM3NjYsMjM3NjcsMjM3NjgsMjM3NzAsMjM3NzEsMjM3NzIsMjM3NzMsMjM3NzQsMjM3NzUsMjM3NzYsMjM3NzgsMjM3NzksMjM3ODMsMjM3ODUsMjM3ODcsMjM3ODgsMjM3OTAsMjM3OTEsMjM3OTMsMjM3OTQsMjM3OTUsMjM3OTYsMjM3OTcsMjM3OTgsMjM3OTksMjM4MDAsMjM4MDEsMjM4MDIsMjM4MDQsMjM4MDUsMjM4MDYsMjM4MDcsMjM4MDgsMjM4MDksMjM4MTIsMjM4MTMsMjM4MTYsMjM4MTcsMjM4MTgsMjM4MTksMjM4MjAsMjM4MjEsMjM4MjMsMjM4MjQsMjM4MjUsMjM4MjYsMjM4MjcsMjM4MjksMjM4MzEsMjM4MzIsMjM4MzMsMjM4MzQsMjM4MzYsMjM4MzcsMjM4MzksMjM4NDAsMjM4NDEsMjM4NDIsMjM4NDMsMjM4NDUsMjM4NDgsMjM4NTAsMjM4NTEsMjM4NTIsMjM4NTUsMjM4NTYsMjM4NTcsMjM4NTgsMjM4NTksMjM4NjEsMjM4NjIsMjM4NjMsMjM4NjQsMjM4NjUsMjM4NjYsMjM4NjcsMjM4NjgsMjM4NzEsMjM4NzIsMjM4NzMsMjM4NzQsMjM4NzUsMjM4NzYsMjM4NzcsMjM4NzgsMjM4ODAsMjM4ODEsMjM4ODUsMjM4ODYsMjM4ODcsMjM4ODgsMjM4ODksMjM4OTAsMjM4OTEsMjM4OTIsMjM4OTMsMjM4OTQsMjM4OTUsMjM4OTcsMjM4OTgsMjM5MDAsMjM5MDIsMjM5MDMsMjM5MDQsMjM5MDUsMjM5MDYsMjM5MDcsMjM5MDgsMjM5MDksMjM5MTAsMjM5MTEsMjM5MTIsMjM5MTQsMjM5MTcsMjM5MTgsMjM5MjAsMjM5MjEsMjM5MjIsMjM5MjMsMjM5MjUsMjM5MjYsMjM5MjcsMjM5MjgsMjM5MjksMjM5MzAsMjM5MzEsMjM5MzIsMjM5MzMsMjM5MzQsMjM5MzUsMjM5MzYsMjM5MzcsMjM5MzksMjM5NDAsMjM5NDEsMjM5NDIsMjM5NDMsMjM5NDQsMjM5NDUsMjM5NDYsMjM5NDcsMjM5NDgsMjM5NDksMjM5NTAsMjM5NTEsMjM5NTIsMjM5NTMsMjM5NTQsMjM5NTUsMjM5NTYsMjM5NTcsMjM5NTgsMjM5NTksMjM5NjAsMjM5NjIsMjM5NjMsMjM5NjQsMjM5NjYsMjM5NjcsMjM5NjgsMjM5NjksMjM5NzAsMjM5NzEsMjM5NzIsMjM5NzMsMjM5NzQsMjM5NzUsMjM5NzYsMjM5NzcsMjM5NzgsMjM5NzksMjM5ODAsMjM5ODEsMjM5ODIsMjM5ODMsMjM5ODQsMjM5ODUsMjM5ODYsMjM5ODcsMjM5ODgsMjM5ODksMjM5OTAsMjM5OTIsMjM5OTMsMjM5OTQsMjM5OTUsMjM5OTYsMjM5OTcsMjM5OTgsMjM5OTksMjQwMDAsMjQwMDEsMjQwMDIsMjQwMDMsMjQwMDQsMjQwMDYsMjQwMDcsMjQwMDgsMjQwMDksMjQwMTAsMjQwMTEsMjQwMTIsMjQwMTQsMjQwMTUsMjQwMTYsMjQwMTcsMjQwMTgsMjQwMTksMjQwMjAsMjQwMjEsMjQwMjIsMjQwMjMsMjQwMjQsMjQwMjUsMjQwMjYsMjQwMjgsMjQwMzEsMjQwMzIsMjQwMzUsMjQwMzYsMjQwNDIsMjQwNDQsMjQwNDUsMjQwNDgsMjQwNTMsMjQwNTQsMjQwNTYsMjQwNTcsMjQwNTgsMjQwNTksMjQwNjAsMjQwNjMsMjQwNjQsMjQwNjgsMjQwNzEsMjQwNzMsMjQwNzQsMjQwNzUsMjQwNzcsMjQwNzgsMjQwODIsMjQwODMsMjQwODcsMjQwOTQsMjQwOTUsMjQwOTYsMjQwOTcsMjQwOTgsMjQwOTksMjQxMDAsMjQxMDEsMjQxMDQsMjQxMDUsMjQxMDYsMjQxMDcsMjQxMDgsMjQxMTEsMjQxMTIsMjQxMTQsMjQxMTUsMjQxMTYsMjQxMTcsMjQxMTgsMjQxMjEsMjQxMjIsMjQxMjYsMjQxMjcsMjQxMjgsMjQxMjksMjQxMzEsMjQxMzQsMjQxMzUsMjQxMzYsMjQxMzcsMjQxMzgsMjQxMzksMjQxNDEsMjQxNDIsMjQxNDMsMjQxNDQsMjQxNDUsMjQxNDYsMjQxNDcsMjQxNTAsMjQxNTEsMjQxNTIsMjQxNTMsMjQxNTQsMjQxNTYsMjQxNTcsMjQxNTksMjQxNjAsMjQxNjMsMjQxNjQsMjQxNjUsMjQxNjYsMjQxNjcsMjQxNjgsMjQxNjksMjQxNzAsMjQxNzEsMjQxNzIsMjQxNzMsMjQxNzQsMjQxNzUsMjQxNzYsMjQxNzcsMjQxODEsMjQxODMsMjQxODUsMjQxOTAsMjQxOTMsMjQxOTQsMjQxOTUsMjQxOTcsMjQyMDAsMjQyMDEsMjQyMDQsMjQyMDUsMjQyMDYsMjQyMTAsMjQyMTYsMjQyMTksMjQyMjEsMjQyMjUsMjQyMjYsMjQyMjcsMjQyMjgsMjQyMzIsMjQyMzMsMjQyMzQsMjQyMzUsMjQyMzYsMjQyMzgsMjQyMzksMjQyNDAsMjQyNDEsMjQyNDIsMjQyNDQsMjQyNTAsMjQyNTEsMjQyNTIsMjQyNTMsMjQyNTUsMjQyNTYsMjQyNTcsMjQyNTgsMjQyNTksMjQyNjAsMjQyNjEsMjQyNjIsMjQyNjMsMjQyNjQsMjQyNjcsMjQyNjgsMjQyNjksMjQyNzAsMjQyNzEsMjQyNzIsMjQyNzYsMjQyNzcsMjQyNzksMjQyODAsMjQyODEsMjQyODIsMjQyODQsMjQyODUsMjQyODYsMjQyODcsMjQyODgsMjQyODksMjQyOTAsMjQyOTEsMjQyOTIsMjQyOTMsMjQyOTQsMjQyOTUsMjQyOTcsMjQyOTksMjQzMDAsMjQzMDEsMjQzMDIsMjQzMDMsMjQzMDQsMjQzMDUsMjQzMDYsMjQzMDcsMjQzMDksMjQzMTIsMjQzMTMsMjQzMTUsMjQzMTYsMjQzMTcsMjQzMjUsMjQzMjYsMjQzMjcsMjQzMjksMjQzMzIsMjQzMzMsMjQzMzQsMjQzMzYsMjQzMzgsMjQzNDAsMjQzNDIsMjQzNDUsMjQzNDYsMjQzNDgsMjQzNDksMjQzNTAsMjQzNTMsMjQzNTQsMjQzNTUsMjQzNTYsMjQzNjAsMjQzNjMsMjQzNjQsMjQzNjYsMjQzNjgsMjQzNzAsMjQzNzEsMjQzNzIsMjQzNzMsMjQzNzQsMjQzNzUsMjQzNzYsMjQzNzksMjQzODEsMjQzODIsMjQzODMsMjQzODUsMjQzODYsMjQzODcsMjQzODgsMjQzODksMjQzOTAsMjQzOTEsMjQzOTIsMjQzOTMsMjQzOTQsMjQzOTUsMjQzOTYsMjQzOTcsMjQzOTgsMjQzOTksMjQ0MDEsMjQ0MDQsMjQ0MDksMjQ0MTAsMjQ0MTEsMjQ0MTIsMjQ0MTQsMjQ0MTUsMjQ0MTYsMjQ0MTksMjQ0MjEsMjQ0MjMsMjQ0MjQsMjQ0MjcsMjQ0MzAsMjQ0MzEsMjQ0MzQsMjQ0MzYsMjQ0MzcsMjQ0MzgsMjQ0NDAsMjQ0NDIsMjQ0NDUsMjQ0NDYsMjQ0NDcsMjQ0NTEsMjQ0NTQsMjQ0NjEsMjQ0NjIsMjQ0NjMsMjQ0NjUsMjQ0NjcsMjQ0NjgsMjQ0NzAsMjQ0NzQsMjQ0NzUsMjQ0NzcsMjQ0NzgsMjQ0NzksMjQ0ODAsMjQ0ODIsMjQ0ODMsMjQ0ODQsMjQ0ODUsMjQ0ODYsMjQ0ODcsMjQ0ODksMjQ0OTEsMjQ0OTIsMjQ0OTUsMjQ0OTYsMjQ0OTcsMjQ0OTgsMjQ0OTksMjQ1MDAsMjQ1MDIsMjQ1MDQsMjQ1MDUsMjQ1MDYsMjQ1MDcsMjQ1MTAsMjQ1MTEsMjQ1MTIsMjQ1MTMsMjQ1MTQsMjQ1MTksMjQ1MjAsMjQ1MjIsMjQ1MjMsMjQ1MjYsMjQ1MzEsMjQ1MzIsMjQ1MzMsMjQ1MzgsMjQ1MzksMjQ1NDAsMjQ1NDIsMjQ1NDMsMjQ1NDYsMjQ1NDcsMjQ1NDksMjQ1NTAsMjQ1NTIsMjQ1NTMsMjQ1NTYsMjQ1NTksMjQ1NjAsMjQ1NjIsMjQ1NjMsMjQ1NjQsMjQ1NjYsMjQ1NjcsMjQ1NjksMjQ1NzAsMjQ1NzIsMjQ1ODMsMjQ1ODQsMjQ1ODUsMjQ1ODcsMjQ1ODgsMjQ1OTIsMjQ1OTMsMjQ1OTUsMjQ1OTksMjQ2MDAsMjQ2MDIsMjQ2MDYsMjQ2MDcsMjQ2MTAsMjQ2MTEsMjQ2MTIsMjQ2MjAsMjQ2MjEsMjQ2MjIsMjQ2MjQsMjQ2MjUsMjQ2MjYsMjQ2MjcsMjQ2MjgsMjQ2MzAsMjQ2MzEsMjQ2MzIsMjQ2MzMsMjQ2MzQsMjQ2MzcsMjQ2MzgsMjQ2NDAsMjQ2NDQsMjQ2NDUsMjQ2NDYsMjQ2NDcsMjQ2NDgsMjQ2NDksMjQ2NTAsMjQ2NTIsMjQ2NTQsMjQ2NTUsMjQ2NTcsMjQ2NTksMjQ2NjAsMjQ2NjIsMjQ2NjMsMjQ2NjQsMjQ2NjcsMjQ2NjgsMjQ2NzAsMjQ2NzEsMjQ2NzIsMjQ2NzMsMjQ2NzcsMjQ2NzgsMjQ2ODYsMjQ2ODksMjQ2OTAsMjQ2OTIsMjQ2OTMsMjQ2OTUsMjQ3MDIsMjQ3MDQsMjQ3MDUsMjQ3MDYsMjQ3MDksMjQ3MTAsMjQ3MTEsMjQ3MTIsMjQ3MTQsMjQ3MTUsMjQ3MTgsMjQ3MTksMjQ3MjAsMjQ3MjEsMjQ3MjMsMjQ3MjUsMjQ3MjcsMjQ3MjgsMjQ3MjksMjQ3MzIsMjQ3MzQsMjQ3MzcsMjQ3MzgsMjQ3NDAsMjQ3NDEsMjQ3NDMsMjQ3NDUsMjQ3NDYsMjQ3NTAsMjQ3NTIsMjQ3NTUsMjQ3NTcsMjQ3NTgsMjQ3NTksMjQ3NjEsMjQ3NjIsMjQ3NjUsMjQ3NjYsMjQ3NjcsMjQ3NjgsMjQ3NjksMjQ3NzAsMjQ3NzEsMjQ3NzIsMjQ3NzUsMjQ3NzYsMjQ3NzcsMjQ3ODAsMjQ3ODEsMjQ3ODIsMjQ3ODMsMjQ3ODQsMjQ3ODYsMjQ3ODcsMjQ3ODgsMjQ3OTAsMjQ3OTEsMjQ3OTMsMjQ3OTUsMjQ3OTgsMjQ4MDEsMjQ4MDIsMjQ4MDMsMjQ4MDQsMjQ4MDUsMjQ4MTAsMjQ4MTcsMjQ4MTgsMjQ4MjEsMjQ4MjMsMjQ4MjQsMjQ4MjcsMjQ4MjgsMjQ4MjksMjQ4MzAsMjQ4MzEsMjQ4MzQsMjQ4MzUsMjQ4MzYsMjQ4MzcsMjQ4MzksMjQ4NDIsMjQ4NDMsMjQ4NDQsMjQ4NDgsMjQ4NDksMjQ4NTAsMjQ4NTEsMjQ4NTIsMjQ4NTQsMjQ4NTUsMjQ4NTYsMjQ4NTcsMjQ4NTksMjQ4NjAsMjQ4NjEsMjQ4NjIsMjQ4NjUsMjQ4NjYsMjQ4NjksMjQ4NzIsMjQ4NzMsMjQ4NzQsMjQ4NzYsMjQ4NzcsMjQ4NzgsMjQ4NzksMjQ4ODAsMjQ4ODEsMjQ4ODIsMjQ4ODMsMjQ4ODQsMjQ4ODUsMjQ4ODYsMjQ4ODcsMjQ4ODgsMjQ4ODksMjQ4OTAsMjQ4OTEsMjQ4OTIsMjQ4OTMsMjQ4OTQsMjQ4OTYsMjQ4OTcsMjQ4OTgsMjQ4OTksMjQ5MDAsMjQ5MDEsMjQ5MDIsMjQ5MDMsMjQ5MDUsMjQ5MDcsMjQ5MDksMjQ5MTEsMjQ5MTIsMjQ5MTQsMjQ5MTUsMjQ5MTYsMjQ5MTgsMjQ5MTksMjQ5MjAsMjQ5MjEsMjQ5MjIsMjQ5MjMsMjQ5MjQsMjQ5MjYsMjQ5MjcsMjQ5MjgsMjQ5MjksMjQ5MzEsMjQ5MzIsMjQ5MzMsMjQ5MzQsMjQ5MzcsMjQ5MzgsMjQ5MzksMjQ5NDAsMjQ5NDEsMjQ5NDIsMjQ5NDMsMjQ5NDUsMjQ5NDYsMjQ5NDcsMjQ5NDgsMjQ5NTAsMjQ5NTIsMjQ5NTMsMjQ5NTQsMjQ5NTUsMjQ5NTYsMjQ5NTcsMjQ5NTgsMjQ5NTksMjQ5NjAsMjQ5NjEsMjQ5NjIsMjQ5NjMsMjQ5NjQsMjQ5NjUsMjQ5NjYsMjQ5NjcsMjQ5NjgsMjQ5NjksMjQ5NzAsMjQ5NzIsMjQ5NzMsMjQ5NzUsMjQ5NzYsMjQ5NzcsMjQ5NzgsMjQ5NzksMjQ5ODEsMjQ5ODIsMjQ5ODMsMjQ5ODQsMjQ5ODUsMjQ5ODYsMjQ5ODcsMjQ5ODgsMjQ5OTAsMjQ5OTEsMjQ5OTIsMjQ5OTMsMjQ5OTQsMjQ5OTUsMjQ5OTYsMjQ5OTcsMjQ5OTgsMjUwMDIsMjUwMDMsMjUwMDUsMjUwMDYsMjUwMDcsMjUwMDgsMjUwMDksMjUwMTAsMjUwMTEsMjUwMTIsMjUwMTMsMjUwMTQsMjUwMTYsMjUwMTcsMjUwMTgsMjUwMTksMjUwMjAsMjUwMjEsMjUwMjMsMjUwMjQsMjUwMjUsMjUwMjcsMjUwMjgsMjUwMjksMjUwMzAsMjUwMzEsMjUwMzMsMjUwMzYsMjUwMzcsMjUwMzgsMjUwMzksMjUwNDAsMjUwNDMsMjUwNDUsMjUwNDYsMjUwNDcsMjUwNDgsMjUwNDksMjUwNTAsMjUwNTEsMjUwNTIsMjUwNTMsMjUwNTQsMjUwNTUsMjUwNTYsMjUwNTcsMjUwNTgsMjUwNTksMjUwNjAsMjUwNjEsMjUwNjMsMjUwNjQsMjUwNjUsMjUwNjYsMjUwNjcsMjUwNjgsMjUwNjksMjUwNzAsMjUwNzEsMjUwNzIsMjUwNzMsMjUwNzQsMjUwNzUsMjUwNzYsMjUwNzgsMjUwNzksMjUwODAsMjUwODEsMjUwODIsMjUwODMsMjUwODQsMjUwODUsMjUwODYsMjUwODgsMjUwODksMjUwOTAsMjUwOTEsMjUwOTIsMjUwOTMsMjUwOTUsMjUwOTcsMjUxMDcsMjUxMDgsMjUxMTMsMjUxMTYsMjUxMTcsMjUxMTgsMjUxMjAsMjUxMjMsMjUxMjYsMjUxMjcsMjUxMjgsMjUxMjksMjUxMzEsMjUxMzMsMjUxMzUsMjUxMzYsMjUxMzcsMjUxMzgsMjUxNDEsMjUxNDIsMjUxNDQsMjUxNDUsMjUxNDYsMjUxNDcsMjUxNDgsMjUxNTQsMjUxNTYsMjUxNTcsMjUxNTgsMjUxNjIsMjUxNjcsMjUxNjgsMjUxNzMsMjUxNzQsMjUxNzUsMjUxNzcsMjUxNzgsMjUxODAsMjUxODEsMjUxODIsMjUxODMsMjUxODQsMjUxODUsMjUxODYsMjUxODgsMjUxODksMjUxOTIsMjUyMDEsMjUyMDIsMjUyMDQsMjUyMDUsMjUyMDcsMjUyMDgsMjUyMTAsMjUyMTEsMjUyMTMsMjUyMTcsMjUyMTgsMjUyMTksMjUyMjEsMjUyMjIsMjUyMjMsMjUyMjQsMjUyMjcsMjUyMjgsMjUyMjksMjUyMzAsMjUyMzEsMjUyMzIsMjUyMzYsMjUyNDEsMjUyNDQsMjUyNDUsMjUyNDYsMjUyNTEsMjUyNTQsMjUyNTUsMjUyNTcsMjUyNTgsMjUyNjEsMjUyNjIsMjUyNjMsMjUyNjQsMjUyNjYsMjUyNjcsMjUyNjgsMjUyNzAsMjUyNzEsMjUyNzIsMjUyNzQsMjUyNzgsMjUyODAsMjUyODEsMjUyODMsMjUyOTEsMjUyOTUsMjUyOTcsMjUzMDEsMjUzMDksMjUzMTAsMjUzMTIsMjUzMTMsMjUzMTYsMjUzMjIsMjUzMjMsMjUzMjgsMjUzMzAsMjUzMzMsMjUzMzYsMjUzMzcsMjUzMzgsMjUzMzksMjUzNDQsMjUzNDcsMjUzNDgsMjUzNDksMjUzNTAsMjUzNTQsMjUzNTUsMjUzNTYsMjUzNTcsMjUzNTksMjUzNjAsMjUzNjIsMjUzNjMsMjUzNjQsMjUzNjUsMjUzNjcsMjUzNjgsMjUzNjksMjUzNzIsMjUzODIsMjUzODMsMjUzODUsMjUzODgsMjUzODksMjUzOTAsMjUzOTIsMjUzOTMsMjUzOTUsMjUzOTYsMjUzOTcsMjUzOTgsMjUzOTksMjU0MDAsMjU0MDMsMjU0MDQsMjU0MDYsMjU0MDcsMjU0MDgsMjU0MDksMjU0MTIsMjU0MTUsMjU0MTYsMjU0MTgsMjU0MjUsMjU0MjYsMjU0MjcsMjU0MjgsMjU0MzAsMjU0MzEsMjU0MzIsMjU0MzMsMjU0MzQsMjU0MzUsMjU0MzYsMjU0MzcsMjU0NDAsMjU0NDQsMjU0NDUsMjU0NDYsMjU0NDgsMjU0NTAsMjU0NTEsMjU0NTIsMjU0NTUsMjU0NTYsMjU0NTgsMjU0NTksMjU0NjAsMjU0NjEsMjU0NjQsMjU0NjUsMjU0NjgsMjU0NjksMjU0NzAsMjU0NzEsMjU0NzMsMjU0NzUsMjU0NzYsMjU0NzcsMjU0NzgsMjU0ODMsMjU0ODUsMjU0ODksMjU0OTEsMjU0OTIsMjU0OTMsMjU0OTUsMjU0OTcsMjU0OTgsMjU0OTksMjU1MDAsMjU1MDEsMjU1MDIsMjU1MDMsMjU1MDUsMjU1MDgsMjU1MTAsMjU1MTUsMjU1MTksMjU1MjEsMjU1MjIsMjU1MjUsMjU1MjYsMjU1MjksMjU1MzEsMjU1MzMsMjU1MzUsMjU1MzYsMjU1MzcsMjU1MzgsMjU1MzksMjU1NDEsMjU1NDMsMjU1NDQsMjU1NDYsMjU1NDcsMjU1NDgsMjU1NTMsMjU1NTUsMjU1NTYsMjU1NTcsMjU1NTksMjU1NjAsMjU1NjEsMjU1NjIsMjU1NjMsMjU1NjQsMjU1NjUsMjU1NjcsMjU1NzAsMjU1NzIsMjU1NzMsMjU1NzQsMjU1NzUsMjU1NzYsMjU1NzksMjU1ODAsMjU1ODIsMjU1ODMsMjU1ODQsMjU1ODUsMjU1ODcsMjU1ODksMjU1OTEsMjU1OTMsMjU1OTQsMjU1OTUsMjU1OTYsMjU1OTgsMjU2MDMsMjU2MDQsMjU2MDYsMjU2MDcsMjU2MDgsMjU2MDksMjU2MTAsMjU2MTMsMjU2MTQsMjU2MTcsMjU2MTgsMjU2MjEsMjU2MjIsMjU2MjMsMjU2MjQsMjU2MjUsMjU2MjYsMjU2MjksMjU2MzEsMjU2MzQsMjU2MzUsMjU2MzYsMjU2MzcsMjU2MzksMjU2NDAsMjU2NDEsMjU2NDMsMjU2NDYsMjU2NDcsMjU2NDgsMjU2NDksMjU2NTAsMjU2NTEsMjU2NTMsMjU2NTQsMjU2NTUsMjU2NTYsMjU2NTcsMjU2NTksMjU2NjAsMjU2NjIsMjU2NjQsMjU2NjYsMjU2NjcsMjU2NzMsMjU2NzUsMjU2NzYsMjU2NzcsMjU2NzgsMjU2NzksMjU2ODAsMjU2ODEsMjU2ODMsMjU2ODUsMjU2ODYsMjU2ODcsMjU2ODksMjU2OTAsMjU2OTEsMjU2OTIsMjU2OTMsMjU2OTUsMjU2OTYsMjU2OTcsMjU2OTgsMjU2OTksMjU3MDAsMjU3MDEsMjU3MDIsMjU3MDQsMjU3MDYsMjU3MDcsMjU3MDgsMjU3MTAsMjU3MTEsMjU3MTIsMjU3MTMsMjU3MTQsMjU3MTUsMjU3MTYsMjU3MTcsMjU3MTgsMjU3MTksMjU3MjMsMjU3MjQsMjU3MjUsMjU3MjYsMjU3MjcsMjU3MjgsMjU3MjksMjU3MzEsMjU3MzQsMjU3MzYsMjU3MzcsMjU3MzgsMjU3MzksMjU3NDAsMjU3NDEsMjU3NDIsMjU3NDMsMjU3NDQsMjU3NDcsMjU3NDgsMjU3NTEsMjU3NTIsMjU3NTQsMjU3NTUsMjU3NTYsMjU3NTcsMjU3NTksMjU3NjAsMjU3NjEsMjU3NjIsMjU3NjMsMjU3NjUsMjU3NjYsMjU3NjcsMjU3NjgsMjU3NzAsMjU3NzEsMjU3NzUsMjU3NzcsMjU3NzgsMjU3NzksMjU3ODAsMjU3ODIsMjU3ODUsMjU3ODcsMjU3ODksMjU3OTAsMjU3OTEsMjU3OTMsMjU3OTUsMjU3OTYsMjU3OTgsMjU3OTksMjU4MDAsMjU4MDEsMjU4MDIsMjU4MDMsMjU4MDQsMjU4MDcsMjU4MDksMjU4MTEsMjU4MTIsMjU4MTMsMjU4MTQsMjU4MTcsMjU4MTgsMjU4MTksMjU4MjAsMjU4MjEsMjU4MjMsMjU4MjQsMjU4MjUsMjU4MjcsMjU4MjksMjU4MzEsMjU4MzIsMjU4MzMsMjU4MzQsMjU4MzUsMjU4MzYsMjU4MzcsMjU4MzgsMjU4MzksMjU4NDAsMjU4NDEsMjU4NDIsMjU4NDMsMjU4NDQsMjU4NDUsMjU4NDYsMjU4NDcsMjU4NDgsMjU4NDksMjU4NTAsMjU4NTEsMjU4NTIsMjU4NTMsMjU4NTQsMjU4NTUsMjU4NTcsMjU4NTgsMjU4NTksMjU4NjAsMjU4NjEsMjU4NjIsMjU4NjMsMjU4NjQsMjU4NjYsMjU4NjcsMjU4NjgsMjU4NjksMjU4NzAsMjU4NzEsMjU4NzIsMjU4NzMsMjU4NzUsMjU4NzYsMjU4NzcsMjU4NzgsMjU4NzksMjU4ODEsMjU4ODIsMjU4ODMsMjU4ODQsMjU4ODUsMjU4ODYsMjU4ODcsMjU4ODgsMjU4ODksMjU4OTAsMjU4OTEsMjU4OTIsMjU4OTQsMjU4OTUsMjU4OTYsMjU4OTcsMjU4OTgsMjU5MDAsMjU5MDEsMjU5MDQsMjU5MDUsMjU5MDYsMjU5MDcsMjU5MTEsMjU5MTQsMjU5MTYsMjU5MTcsMjU5MjAsMjU5MjEsMjU5MjIsMjU5MjMsMjU5MjQsMjU5MjYsMjU5MjcsMjU5MzAsMjU5MzEsMjU5MzMsMjU5MzQsMjU5MzYsMjU5MzgsMjU5MzksMjU5NDAsMjU5NDMsMjU5NDQsMjU5NDYsMjU5NDgsMjU5NTEsMjU5NTIsMjU5NTMsMjU5NTYsMjU5NTcsMjU5NTksMjU5NjAsMjU5NjEsMjU5NjIsMjU5NjUsMjU5NjYsMjU5NjcsMjU5NjksMjU5NzEsMjU5NzMsMjU5NzQsMjU5NzYsMjU5NzcsMjU5NzgsMjU5NzksMjU5ODAsMjU5ODEsMjU5ODIsMjU5ODMsMjU5ODQsMjU5ODUsMjU5ODYsMjU5ODcsMjU5ODgsMjU5ODksMjU5OTAsMjU5OTIsMjU5OTMsMjU5OTQsMjU5OTcsMjU5OTgsMjU5OTksMjYwMDIsMjYwMDQsMjYwMDUsMjYwMDYsMjYwMDgsMjYwMTAsMjYwMTMsMjYwMTQsMjYwMTYsMjYwMTgsMjYwMTksMjYwMjIsMjYwMjQsMjYwMjYsMjYwMjgsMjYwMzAsMjYwMzMsMjYwMzQsMjYwMzUsMjYwMzYsMjYwMzcsMjYwMzgsMjYwMzksMjYwNDAsMjYwNDIsMjYwNDMsMjYwNDYsMjYwNDcsMjYwNDgsMjYwNTAsMjYwNTUsMjYwNTYsMjYwNTcsMjYwNTgsMjYwNjEsMjYwNjQsMjYwNjUsMjYwNjcsMjYwNjgsMjYwNjksMjYwNzIsMjYwNzMsMjYwNzQsMjYwNzUsMjYwNzYsMjYwNzcsMjYwNzgsMjYwNzksMjYwODEsMjYwODMsMjYwODQsMjYwOTAsMjYwOTEsMjYwOTgsMjYwOTksMjYxMDAsMjYxMDEsMjYxMDQsMjYxMDUsMjYxMDcsMjYxMDgsMjYxMDksMjYxMTAsMjYxMTEsMjYxMTMsMjYxMTYsMjYxMTcsMjYxMTksMjYxMjAsMjYxMjEsMjYxMjMsMjYxMjUsMjYxMjgsMjYxMjksMjYxMzAsMjYxMzQsMjYxMzUsMjYxMzYsMjYxMzgsMjYxMzksMjYxNDAsMjYxNDIsMjYxNDUsMjYxNDYsMjYxNDcsMjYxNDgsMjYxNTAsMjYxNTMsMjYxNTQsMjYxNTUsMjYxNTYsMjYxNTgsMjYxNjAsMjYxNjIsMjYxNjMsMjYxNjcsMjYxNjgsMjYxNjksMjYxNzAsMjYxNzEsMjYxNzMsMjYxNzUsMjYxNzYsMjYxNzgsMjYxODAsMjYxODEsMjYxODIsMjYxODMsMjYxODQsMjYxODUsMjYxODYsMjYxODksMjYxOTAsMjYxOTIsMjYxOTMsMjYyMDAsMjYyMDEsMjYyMDMsMjYyMDQsMjYyMDUsMjYyMDYsMjYyMDgsMjYyMTAsMjYyMTEsMjYyMTMsMjYyMTUsMjYyMTcsMjYyMTgsMjYyMTksMjYyMjAsMjYyMjEsMjYyMjUsMjYyMjYsMjYyMjcsMjYyMjksMjYyMzIsMjYyMzMsMjYyMzUsMjYyMzYsMjYyMzcsMjYyMzksMjYyNDAsMjYyNDEsMjYyNDMsMjYyNDUsMjYyNDYsMjYyNDgsMjYyNDksMjYyNTAsMjYyNTEsMjYyNTMsMjYyNTQsMjYyNTUsMjYyNTYsMjYyNTgsMjYyNTksMjYyNjAsMjYyNjEsMjYyNjQsMjYyNjUsMjYyNjYsMjYyNjcsMjYyNjgsMjYyNzAsMjYyNzEsMjYyNzIsMjYyNzMsMjYyNzQsMjYyNzUsMjYyNzYsMjYyNzcsMjYyNzgsMjYyODEsMjYyODIsMjYyODMsMjYyODQsMjYyODUsMjYyODcsMjYyODgsMjYyODksMjYyOTAsMjYyOTEsMjYyOTMsMjYyOTQsMjYyOTUsMjYyOTYsMjYyOTgsMjYyOTksMjYzMDAsMjYzMDEsMjYzMDMsMjYzMDQsMjYzMDUsMjYzMDYsMjYzMDcsMjYzMDgsMjYzMDksMjYzMTAsMjYzMTEsMjYzMTIsMjYzMTMsMjYzMTQsMjYzMTUsMjYzMTYsMjYzMTcsMjYzMTgsMjYzMTksMjYzMjAsMjYzMjEsMjYzMjIsMjYzMjMsMjYzMjQsMjYzMjUsMjYzMjYsMjYzMjcsMjYzMjgsMjYzMzAsMjYzMzQsMjYzMzUsMjYzMzYsMjYzMzcsMjYzMzgsMjYzMzksMjYzNDAsMjYzNDEsMjYzNDMsMjYzNDQsMjYzNDYsMjYzNDcsMjYzNDgsMjYzNDksMjYzNTAsMjYzNTEsMjYzNTMsMjYzNTcsMjYzNTgsMjYzNjAsMjYzNjIsMjYzNjMsMjYzNjUsMjYzNjksMjYzNzAsMjYzNzEsMjYzNzIsMjYzNzMsMjYzNzQsMjYzNzUsMjYzODAsMjYzODIsMjYzODMsMjYzODUsMjYzODYsMjYzODcsMjYzOTAsMjYzOTIsMjYzOTMsMjYzOTQsMjYzOTYsMjYzOTgsMjY0MDAsMjY0MDEsMjY0MDIsMjY0MDMsMjY0MDQsMjY0MDUsMjY0MDcsMjY0MDksMjY0MTQsMjY0MTYsMjY0MTgsMjY0MTksMjY0MjIsMjY0MjMsMjY0MjQsMjY0MjUsMjY0MjcsMjY0MjgsMjY0MzAsMjY0MzEsMjY0MzMsMjY0MzYsMjY0MzcsMjY0MzksMjY0NDIsMjY0NDMsMjY0NDUsMjY0NTAsMjY0NTIsMjY0NTMsMjY0NTUsMjY0NTYsMjY0NTcsMjY0NTgsMjY0NTksMjY0NjEsMjY0NjYsMjY0NjcsMjY0NjgsMjY0NzAsMjY0NzEsMjY0NzUsMjY0NzYsMjY0NzgsMjY0ODEsMjY0ODQsMjY0ODYsMjY0ODgsMjY0ODksMjY0OTAsMjY0OTEsMjY0OTMsMjY0OTYsMjY0OTgsMjY0OTksMjY1MDEsMjY1MDIsMjY1MDQsMjY1MDYsMjY1MDgsMjY1MDksMjY1MTAsMjY1MTEsMjY1MTMsMjY1MTQsMjY1MTUsMjY1MTYsMjY1MTgsMjY1MjEsMjY1MjMsMjY1MjcsMjY1MjgsMjY1MjksMjY1MzIsMjY1MzQsMjY1MzcsMjY1NDAsMjY1NDIsMjY1NDUsMjY1NDYsMjY1NDgsMjY1NTMsMjY1NTQsMjY1NTUsMjY1NTYsMjY1NTcsMjY1NTgsMjY1NTksMjY1NjAsMjY1NjIsMjY1NjUsMjY1NjYsMjY1NjcsMjY1NjgsMjY1NjksMjY1NzAsMjY1NzEsMjY1NzIsMjY1NzMsMjY1NzQsMjY1ODEsMjY1ODIsMjY1ODMsMjY1ODcsMjY1OTEsMjY1OTMsMjY1OTUsMjY1OTYsMjY1OTgsMjY1OTksMjY2MDAsMjY2MDIsMjY2MDMsMjY2MDUsMjY2MDYsMjY2MTAsMjY2MTMsMjY2MTQsMjY2MTUsMjY2MTYsMjY2MTcsMjY2MTgsMjY2MTksMjY2MjAsMjY2MjIsMjY2MjUsMjY2MjYsMjY2MjcsMjY2MjgsMjY2MzAsMjY2MzcsMjY2NDAsMjY2NDIsMjY2NDQsMjY2NDUsMjY2NDgsMjY2NDksMjY2NTAsMjY2NTEsMjY2NTIsMjY2NTQsMjY2NTUsMjY2NTYsMjY2NTgsMjY2NTksMjY2NjAsMjY2NjEsMjY2NjIsMjY2NjMsMjY2NjQsMjY2NjcsMjY2NjgsMjY2NjksMjY2NzAsMjY2NzEsMjY2NzIsMjY2NzMsMjY2NzYsMjY2NzcsMjY2NzgsMjY2ODIsMjY2ODMsMjY2ODcsMjY2OTUsMjY2OTksMjY3MDEsMjY3MDMsMjY3MDYsMjY3MTAsMjY3MTEsMjY3MTIsMjY3MTMsMjY3MTQsMjY3MTUsMjY3MTYsMjY3MTcsMjY3MTgsMjY3MTksMjY3MzAsMjY3MzIsMjY3MzMsMjY3MzQsMjY3MzUsMjY3MzYsMjY3MzcsMjY3MzgsMjY3MzksMjY3NDEsMjY3NDQsMjY3NDUsMjY3NDYsMjY3NDcsMjY3NDgsMjY3NDksMjY3NTAsMjY3NTEsMjY3NTIsMjY3NTQsMjY3NTYsMjY3NTksMjY3NjAsMjY3NjEsMjY3NjIsMjY3NjMsMjY3NjQsMjY3NjUsMjY3NjYsMjY3NjgsMjY3NjksMjY3NzAsMjY3NzIsMjY3NzMsMjY3NzQsMjY3NzYsMjY3NzcsMjY3NzgsMjY3NzksMjY3ODAsMjY3ODEsMjY3ODIsMjY3ODMsMjY3ODQsMjY3ODUsMjY3ODcsMjY3ODgsMjY3ODksMjY3OTMsMjY3OTQsMjY3OTUsMjY3OTYsMjY3OTgsMjY4MDEsMjY4MDIsMjY4MDQsMjY4MDYsMjY4MDcsMjY4MDgsMjY4MDksMjY4MTAsMjY4MTEsMjY4MTIsMjY4MTMsMjY4MTQsMjY4MTUsMjY4MTcsMjY4MTksMjY4MjAsMjY4MjEsMjY4MjIsMjY4MjMsMjY4MjQsMjY4MjYsMjY4MjgsMjY4MzAsMjY4MzEsMjY4MzIsMjY4MzMsMjY4MzUsMjY4MzYsMjY4MzgsMjY4MzksMjY4NDEsMjY4NDMsMjY4NDQsMjY4NDUsMjY4NDYsMjY4NDcsMjY4NDksMjY4NTAsMjY4NTIsMjY4NTMsMjY4NTQsMjY4NTUsMjY4NTYsMjY4NTcsMjY4NTgsMjY4NTksMjY4NjAsMjY4NjEsMjY4NjMsMjY4NjYsMjY4NjcsMjY4NjgsMjY4NzAsMjY4NzEsMjY4NzIsMjY4NzUsMjY4NzcsMjY4NzgsMjY4NzksMjY4ODAsMjY4ODIsMjY4ODMsMjY4ODQsMjY4ODYsMjY4ODcsMjY4ODgsMjY4ODksMjY4OTAsMjY4OTIsMjY4OTUsMjY4OTcsMjY4OTksMjY5MDAsMjY5MDEsMjY5MDIsMjY5MDMsMjY5MDQsMjY5MDUsMjY5MDYsMjY5MDcsMjY5MDgsMjY5MDksMjY5MTAsMjY5MTMsMjY5MTQsMjY5MTUsMjY5MTcsMjY5MTgsMjY5MTksMjY5MjAsMjY5MjEsMjY5MjIsMjY5MjMsMjY5MjQsMjY5MjYsMjY5MjcsMjY5MjksMjY5MzAsMjY5MzEsMjY5MzMsMjY5MzQsMjY5MzUsMjY5MzYsMjY5MzgsMjY5MzksMjY5NDAsMjY5NDIsMjY5NDQsMjY5NDUsMjY5NDcsMjY5NDgsMjY5NDksMjY5NTAsMjY5NTEsMjY5NTIsMjY5NTMsMjY5NTQsMjY5NTUsMjY5NTYsMjY5NTcsMjY5NTgsMjY5NTksMjY5NjAsMjY5NjEsMjY5NjIsMjY5NjMsMjY5NjUsMjY5NjYsMjY5NjgsMjY5NjksMjY5NzEsMjY5NzIsMjY5NzUsMjY5NzcsMjY5NzgsMjY5ODAsMjY5ODEsMjY5ODMsMjY5ODQsMjY5ODUsMjY5ODYsMjY5ODgsMjY5ODksMjY5OTEsMjY5OTIsMjY5OTQsMjY5OTUsMjY5OTYsMjY5OTcsMjY5OTgsMjcwMDIsMjcwMDMsMjcwMDUsMjcwMDYsMjcwMDcsMjcwMDksMjcwMTEsMjcwMTMsMjcwMTgsMjcwMTksMjcwMjAsMjcwMjIsMjcwMjMsMjcwMjQsMjcwMjUsMjcwMjYsMjcwMjcsMjcwMzAsMjcwMzEsMjcwMzMsMjcwMzQsMjcwMzcsMjcwMzgsMjcwMzksMjcwNDAsMjcwNDEsMjcwNDIsMjcwNDMsMjcwNDQsMjcwNDUsMjcwNDYsMjcwNDksMjcwNTAsMjcwNTIsMjcwNTQsMjcwNTUsMjcwNTYsMjcwNTgsMjcwNTksMjcwNjEsMjcwNjIsMjcwNjQsMjcwNjUsMjcwNjYsMjcwNjgsMjcwNjksMjcwNzAsMjcwNzEsMjcwNzIsMjcwNzQsMjcwNzUsMjcwNzYsMjcwNzcsMjcwNzgsMjcwNzksMjcwODAsMjcwODEsMjcwODMsMjcwODUsMjcwODcsMjcwODksMjcwOTAsMjcwOTEsMjcwOTMsMjcwOTQsMjcwOTUsMjcwOTYsMjcwOTcsMjcwOTgsMjcxMDAsMjcxMDEsMjcxMDIsMjcxMDUsMjcxMDYsMjcxMDcsMjcxMDgsMjcxMDksMjcxMTAsMjcxMTEsMjcxMTIsMjcxMTMsMjcxMTQsMjcxMTUsMjcxMTYsMjcxMTgsMjcxMTksMjcxMjAsMjcxMjEsMjcxMjMsMjcxMjQsMjcxMjUsMjcxMjYsMjcxMjcsMjcxMjgsMjcxMjksMjcxMzAsMjcxMzEsMjcxMzIsMjcxMzQsMjcxMzYsMjcxMzcsMjcxMzgsMjcxMzksMjcxNDAsMjcxNDEsMjcxNDIsMjcxNDMsMjcxNDQsMjcxNDUsMjcxNDcsMjcxNDgsMjcxNDksMjcxNTAsMjcxNTEsMjcxNTIsMjcxNTMsMjcxNTQsMjcxNTUsMjcxNTYsMjcxNTcsMjcxNTgsMjcxNjEsMjcxNjIsMjcxNjMsMjcxNjQsMjcxNjUsMjcxNjYsMjcxNjgsMjcxNzAsMjcxNzEsMjcxNzIsMjcxNzMsMjcxNzQsMjcxNzUsMjcxNzcsMjcxNzksMjcxODAsMjcxODEsMjcxODIsMjcxODQsMjcxODYsMjcxODcsMjcxODgsMjcxOTAsMjcxOTEsMjcxOTIsMjcxOTMsMjcxOTQsMjcxOTUsMjcxOTYsMjcxOTksMjcyMDAsMjcyMDEsMjcyMDIsMjcyMDMsMjcyMDUsMjcyMDYsMjcyMDgsMjcyMDksMjcyMTAsMjcyMTEsMjcyMTIsMjcyMTMsMjcyMTQsMjcyMTUsMjcyMTcsMjcyMTgsMjcyMTksMjcyMjAsMjcyMjEsMjcyMjIsMjcyMjMsMjcyMjYsMjcyMjgsMjcyMjksMjcyMzAsMjcyMzEsMjcyMzIsMjcyMzQsMjcyMzUsMjcyMzYsMjcyMzgsMjcyMzksMjcyNDAsMjcyNDEsMjcyNDIsMjcyNDMsMjcyNDQsMjcyNDUsMjcyNDYsMjcyNDcsMjcyNDgsMjcyNTAsMjcyNTEsMjcyNTIsMjcyNTMsMjcyNTQsMjcyNTUsMjcyNTYsMjcyNTgsMjcyNTksMjcyNjEsMjcyNjIsMjcyNjMsMjcyNjUsMjcyNjYsMjcyNjcsMjcyNjksMjcyNzAsMjcyNzEsMjcyNzIsMjcyNzMsMjcyNzQsMjcyNzUsMjcyNzYsMjcyNzcsMjcyNzksMjcyODIsMjcyODMsMjcyODQsMjcyODUsMjcyODYsMjcyODgsMjcyODksMjcyOTAsMjcyOTEsMjcyOTIsMjcyOTMsMjcyOTQsMjcyOTUsMjcyOTcsMjcyOTgsMjcyOTksMjczMDAsMjczMDEsMjczMDIsMjczMDMsMjczMDQsMjczMDYsMjczMDksMjczMTAsMjczMTEsMjczMTIsMjczMTMsMjczMTQsMjczMTUsMjczMTYsMjczMTcsMjczMTgsMjczMTksMjczMjAsMjczMjEsMjczMjIsMjczMjMsMjczMjQsMjczMjUsMjczMjYsMjczMjcsMjczMjgsMjczMjksMjczMzAsMjczMzEsMjczMzIsMjczMzMsMjczMzQsMjczMzUsMjczMzYsMjczMzcsMjczMzgsMjczMzksMjczNDAsMjczNDEsMjczNDIsMjczNDMsMjczNDQsMjczNDUsMjczNDYsMjczNDcsMjczNDgsMjczNDksMjczNTAsMjczNTEsMjczNTIsMjczNTMsMjczNTQsMjczNTUsMjczNTYsMjczNTcsMjczNTgsMjczNTksMjczNjAsMjczNjEsMjczNjIsMjczNjMsMjczNjQsMjczNjUsMjczNjYsMjczNjcsMjczNjgsMjczNjksMjczNzAsMjczNzEsMjczNzIsMjczNzMsMjczNzQsMjczNzUsMjczNzYsMjczNzcsMjczNzgsMjczNzksMjczODAsMjczODEsMjczODIsMjczODMsMjczODQsMjczODUsMjczODYsMjczODcsMjczODgsMjczODksMjczOTAsMjczOTEsMjczOTIsMjczOTMsMjczOTQsMjczOTUsMjczOTYsMjczOTcsMjczOTgsMjczOTksMjc0MDAsMjc0MDEsMjc0MDIsMjc0MDMsMjc0MDQsMjc0MDUsMjc0MDYsMjc0MDcsMjc0MDgsMjc0MDksMjc0MTAsMjc0MTEsMjc0MTIsMjc0MTMsMjc0MTQsMjc0MTUsMjc0MTYsMjc0MTcsMjc0MTgsMjc0MTksMjc0MjAsMjc0MjEsMjc0MjIsMjc0MjMsMjc0MjksMjc0MzAsMjc0MzIsMjc0MzMsMjc0MzQsMjc0MzUsMjc0MzYsMjc0MzcsMjc0MzgsMjc0MzksMjc0NDAsMjc0NDEsMjc0NDMsMjc0NDQsMjc0NDUsMjc0NDYsMjc0NDgsMjc0NTEsMjc0NTIsMjc0NTMsMjc0NTUsMjc0NTYsMjc0NTcsMjc0NTgsMjc0NjAsMjc0NjEsMjc0NjQsMjc0NjYsMjc0NjcsMjc0NjksMjc0NzAsMjc0NzEsMjc0NzIsMjc0NzMsMjc0NzQsMjc0NzUsMjc0NzYsMjc0NzcsMjc0NzgsMjc0NzksMjc0ODAsMjc0ODIsMjc0ODMsMjc0ODQsMjc0ODUsMjc0ODYsMjc0ODcsMjc0ODgsMjc0ODksMjc0OTYsMjc0OTcsMjc0OTksMjc1MDAsMjc1MDEsMjc1MDIsMjc1MDMsMjc1MDQsMjc1MDUsMjc1MDYsMjc1MDcsMjc1MDgsMjc1MDksMjc1MTAsMjc1MTEsMjc1MTIsMjc1MTQsMjc1MTcsMjc1MTgsMjc1MTksMjc1MjAsMjc1MjUsMjc1MjgsMjc1MzIsMjc1MzQsMjc1MzUsMjc1MzYsMjc1MzcsMjc1NDAsMjc1NDEsMjc1NDMsMjc1NDQsMjc1NDUsMjc1NDgsMjc1NDksMjc1NTAsMjc1NTEsMjc1NTIsMjc1NTQsMjc1NTUsMjc1NTYsMjc1NTcsMjc1NTgsMjc1NTksMjc1NjAsMjc1NjEsMjc1NjMsMjc1NjQsMjc1NjUsMjc1NjYsMjc1NjcsMjc1NjgsMjc1NjksMjc1NzAsMjc1NzQsMjc1NzYsMjc1NzcsMjc1NzgsMjc1NzksMjc1ODAsMjc1ODEsMjc1ODIsMjc1ODQsMjc1ODcsMjc1ODgsMjc1OTAsMjc1OTEsMjc1OTIsMjc1OTMsMjc1OTQsMjc1OTYsMjc1OTgsMjc2MDAsMjc2MDEsMjc2MDgsMjc2MTAsMjc2MTIsMjc2MTMsMjc2MTQsMjc2MTUsMjc2MTYsMjc2MTgsMjc2MTksMjc2MjAsMjc2MjEsMjc2MjIsMjc2MjMsMjc2MjQsMjc2MjUsMjc2MjgsMjc2MjksMjc2MzAsMjc2MzIsMjc2MzMsMjc2MzQsMjc2MzYsMjc2MzgsMjc2MzksMjc2NDAsMjc2NDIsMjc2NDMsMjc2NDQsMjc2NDYsMjc2NDcsMjc2NDgsMjc2NDksMjc2NTAsMjc2NTEsMjc2NTIsMjc2NTYsMjc2NTcsMjc2NTgsMjc2NTksMjc2NjAsMjc2NjIsMjc2NjYsMjc2NzEsMjc2NzYsMjc2NzcsMjc2NzgsMjc2ODAsMjc2ODMsMjc2ODUsMjc2OTEsMjc2OTIsMjc2OTMsMjc2OTcsMjc2OTksMjc3MDIsMjc3MDMsMjc3MDUsMjc3MDYsMjc3MDcsMjc3MDgsMjc3MTAsMjc3MTEsMjc3MTUsMjc3MTYsMjc3MTcsMjc3MjAsMjc3MjMsMjc3MjQsMjc3MjUsMjc3MjYsMjc3MjcsMjc3MjksMjc3MzAsMjc3MzEsMjc3MzQsMjc3MzYsMjc3MzcsMjc3MzgsMjc3NDYsMjc3NDcsMjc3NDksMjc3NTAsMjc3NTEsMjc3NTUsMjc3NTYsMjc3NTcsMjc3NTgsMjc3NTksMjc3NjEsMjc3NjMsMjc3NjUsMjc3NjcsMjc3NjgsMjc3NzAsMjc3NzEsMjc3NzIsMjc3NzUsMjc3NzYsMjc3ODAsMjc3ODMsMjc3ODYsMjc3ODcsMjc3ODksMjc3OTAsMjc3OTMsMjc3OTQsMjc3OTcsMjc3OTgsMjc3OTksMjc4MDAsMjc4MDIsMjc4MDQsMjc4MDUsMjc4MDYsMjc4MDgsMjc4MTAsMjc4MTYsMjc4MjAsMjc4MjMsMjc4MjQsMjc4MjgsMjc4MjksMjc4MzAsMjc4MzEsMjc4MzQsMjc4NDAsMjc4NDEsMjc4NDIsMjc4NDMsMjc4NDYsMjc4NDcsMjc4NDgsMjc4NTEsMjc4NTMsMjc4NTQsMjc4NTUsMjc4NTcsMjc4NTgsMjc4NjQsMjc4NjUsMjc4NjYsMjc4NjgsMjc4NjksMjc4NzEsMjc4NzYsMjc4NzgsMjc4NzksMjc4ODEsMjc4ODQsMjc4ODUsMjc4OTAsMjc4OTIsMjc4OTcsMjc5MDMsMjc5MDQsMjc5MDYsMjc5MDcsMjc5MDksMjc5MTAsMjc5MTIsMjc5MTMsMjc5MTQsMjc5MTcsMjc5MTksMjc5MjAsMjc5MjEsMjc5MjMsMjc5MjQsMjc5MjUsMjc5MjYsMjc5MjgsMjc5MzIsMjc5MzMsMjc5MzUsMjc5MzYsMjc5MzcsMjc5MzgsMjc5MzksMjc5NDAsMjc5NDIsMjc5NDQsMjc5NDUsMjc5NDgsMjc5NDksMjc5NTEsMjc5NTIsMjc5NTYsMjc5NTgsMjc5NTksMjc5NjAsMjc5NjIsMjc5NjcsMjc5NjgsMjc5NzAsMjc5NzIsMjc5NzcsMjc5ODAsMjc5ODQsMjc5ODksMjc5OTAsMjc5OTEsMjc5OTIsMjc5OTUsMjc5OTcsMjc5OTksMjgwMDEsMjgwMDIsMjgwMDQsMjgwMDUsMjgwMDcsMjgwMDgsMjgwMTEsMjgwMTIsMjgwMTMsMjgwMTYsMjgwMTcsMjgwMTgsMjgwMTksMjgwMjEsMjgwMjIsMjgwMjUsMjgwMjYsMjgwMjcsMjgwMjksMjgwMzAsMjgwMzEsMjgwMzIsMjgwMzMsMjgwMzUsMjgwMzYsMjgwMzgsMjgwMzksMjgwNDIsMjgwNDMsMjgwNDUsMjgwNDcsMjgwNDgsMjgwNTAsMjgwNTQsMjgwNTUsMjgwNTYsMjgwNTcsMjgwNTgsMjgwNjAsMjgwNjYsMjgwNjksMjgwNzYsMjgwNzcsMjgwODAsMjgwODEsMjgwODMsMjgwODQsMjgwODYsMjgwODcsMjgwODksMjgwOTAsMjgwOTEsMjgwOTIsMjgwOTMsMjgwOTQsMjgwOTcsMjgwOTgsMjgwOTksMjgxMDQsMjgxMDUsMjgxMDYsMjgxMDksMjgxMTAsMjgxMTEsMjgxMTIsMjgxMTQsMjgxMTUsMjgxMTYsMjgxMTcsMjgxMTksMjgxMjIsMjgxMjMsMjgxMjQsMjgxMjcsMjgxMzAsMjgxMzEsMjgxMzMsMjgxMzUsMjgxMzYsMjgxMzcsMjgxMzgsMjgxNDEsMjgxNDMsMjgxNDQsMjgxNDYsMjgxNDgsMjgxNDksMjgxNTAsMjgxNTIsMjgxNTQsMjgxNTcsMjgxNTgsMjgxNTksMjgxNjAsMjgxNjEsMjgxNjIsMjgxNjMsMjgxNjQsMjgxNjYsMjgxNjcsMjgxNjgsMjgxNjksMjgxNzEsMjgxNzUsMjgxNzgsMjgxNzksMjgxODEsMjgxODQsMjgxODUsMjgxODcsMjgxODgsMjgxOTAsMjgxOTEsMjgxOTQsMjgxOTgsMjgxOTksMjgyMDAsMjgyMDIsMjgyMDQsMjgyMDYsMjgyMDgsMjgyMDksMjgyMTEsMjgyMTMsMjgyMTQsMjgyMTUsMjgyMTcsMjgyMTksMjgyMjAsMjgyMjEsMjgyMjIsMjgyMjMsMjgyMjQsMjgyMjUsMjgyMjYsMjgyMjksMjgyMzAsMjgyMzEsMjgyMzIsMjgyMzMsMjgyMzQsMjgyMzUsMjgyMzYsMjgyMzksMjgyNDAsMjgyNDEsMjgyNDIsMjgyNDUsMjgyNDcsMjgyNDksMjgyNTAsMjgyNTIsMjgyNTMsMjgyNTQsMjgyNTYsMjgyNTcsMjgyNTgsMjgyNTksMjgyNjAsMjgyNjEsMjgyNjIsMjgyNjMsMjgyNjQsMjgyNjUsMjgyNjYsMjgyNjgsMjgyNjksMjgyNzEsMjgyNzIsMjgyNzMsMjgyNzQsMjgyNzUsMjgyNzYsMjgyNzcsMjgyNzgsMjgyNzksMjgyODAsMjgyODEsMjgyODIsMjgyODMsMjgyODQsMjgyODUsMjgyODgsMjgyODksMjgyOTAsMjgyOTIsMjgyOTUsMjgyOTYsMjgyOTgsMjgyOTksMjgzMDAsMjgzMDEsMjgzMDIsMjgzMDUsMjgzMDYsMjgzMDcsMjgzMDgsMjgzMDksMjgzMTAsMjgzMTEsMjgzMTMsMjgzMTQsMjgzMTUsMjgzMTcsMjgzMTgsMjgzMjAsMjgzMjEsMjgzMjMsMjgzMjQsMjgzMjYsMjgzMjgsMjgzMjksMjgzMzEsMjgzMzIsMjgzMzMsMjgzMzQsMjgzMzYsMjgzMzksMjgzNDEsMjgzNDQsMjgzNDUsMjgzNDgsMjgzNTAsMjgzNTEsMjgzNTIsMjgzNTUsMjgzNTYsMjgzNTcsMjgzNTgsMjgzNjAsMjgzNjEsMjgzNjIsMjgzNjQsMjgzNjUsMjgzNjYsMjgzNjgsMjgzNzAsMjgzNzQsMjgzNzYsMjgzNzcsMjgzNzksMjgzODAsMjgzODEsMjgzODcsMjgzOTEsMjgzOTQsMjgzOTUsMjgzOTYsMjgzOTcsMjgzOTgsMjgzOTksMjg0MDAsMjg0MDEsMjg0MDIsMjg0MDMsMjg0MDUsMjg0MDYsMjg0MDcsMjg0MDgsMjg0MTAsMjg0MTEsMjg0MTIsMjg0MTMsMjg0MTQsMjg0MTUsMjg0MTYsMjg0MTcsMjg0MTksMjg0MjAsMjg0MjEsMjg0MjMsMjg0MjQsMjg0MjYsMjg0MjcsMjg0MjgsMjg0MjksMjg0MzAsMjg0MzIsMjg0MzMsMjg0MzQsMjg0MzgsMjg0MzksMjg0NDAsMjg0NDEsMjg0NDIsMjg0NDMsMjg0NDQsMjg0NDUsMjg0NDYsMjg0NDcsMjg0NDksMjg0NTAsMjg0NTEsMjg0NTMsMjg0NTQsMjg0NTUsMjg0NTYsMjg0NjAsMjg0NjIsMjg0NjQsMjg0NjYsMjg0NjgsMjg0NjksMjg0NzEsMjg0NzIsMjg0NzMsMjg0NzQsMjg0NzUsMjg0NzYsMjg0NzcsMjg0NzksMjg0ODAsMjg0ODEsMjg0ODIsMjg0ODMsMjg0ODQsMjg0ODUsMjg0ODgsMjg0ODksMjg0OTAsMjg0OTIsMjg0OTQsMjg0OTUsMjg0OTYsMjg0OTcsMjg0OTgsMjg0OTksMjg1MDAsMjg1MDEsMjg1MDIsMjg1MDMsMjg1MDUsMjg1MDYsMjg1MDcsMjg1MDksMjg1MTEsMjg1MTIsMjg1MTMsMjg1MTUsMjg1MTYsMjg1MTcsMjg1MTksMjg1MjAsMjg1MjEsMjg1MjIsMjg1MjMsMjg1MjQsMjg1MjcsMjg1MjgsMjg1MjksMjg1MzEsMjg1MzMsMjg1MzQsMjg1MzUsMjg1MzcsMjg1MzksMjg1NDEsMjg1NDIsMjg1NDMsMjg1NDQsMjg1NDUsMjg1NDYsMjg1NDcsMjg1NDksMjg1NTAsMjg1NTEsMjg1NTQsMjg1NTUsMjg1NTksMjg1NjAsMjg1NjEsMjg1NjIsMjg1NjMsMjg1NjQsMjg1NjUsMjg1NjYsMjg1NjcsMjg1NjgsMjg1NjksMjg1NzAsMjg1NzEsMjg1NzMsMjg1NzQsMjg1NzUsMjg1NzYsMjg1NzgsMjg1NzksMjg1ODAsMjg1ODEsMjg1ODIsMjg1ODQsMjg1ODUsMjg1ODYsMjg1ODcsMjg1ODgsMjg1ODksMjg1OTAsMjg1OTEsMjg1OTIsMjg1OTMsMjg1OTQsMjg1OTYsMjg1OTcsMjg1OTksMjg2MDAsMjg2MDIsMjg2MDMsMjg2MDQsMjg2MDUsMjg2MDYsMjg2MDcsMjg2MDksMjg2MTEsMjg2MTIsMjg2MTMsMjg2MTQsMjg2MTUsMjg2MTYsMjg2MTgsMjg2MTksMjg2MjAsMjg2MjEsMjg2MjIsMjg2MjMsMjg2MjQsMjg2MjcsMjg2MjgsMjg2MjksMjg2MzAsMjg2MzEsMjg2MzIsMjg2MzMsMjg2MzQsMjg2MzUsMjg2MzYsMjg2MzcsMjg2MzksMjg2NDIsMjg2NDMsMjg2NDQsMjg2NDUsMjg2NDYsMjg2NDcsMjg2NDgsMjg2NDksMjg2NTAsMjg2NTEsMjg2NTIsMjg2NTMsMjg2NTYsMjg2NTcsMjg2NTgsMjg2NTksMjg2NjAsMjg2NjEsMjg2NjIsMjg2NjMsMjg2NjQsMjg2NjUsMjg2NjYsMjg2NjcsMjg2NjgsMjg2NjksMjg2NzAsMjg2NzEsMjg2NzIsMjg2NzMsMjg2NzQsMjg2NzUsMjg2NzYsMjg2NzcsMjg2NzgsMjg2NzksMjg2ODAsMjg2ODEsMjg2ODIsMjg2ODMsMjg2ODQsMjg2ODUsMjg2ODYsMjg2ODcsMjg2ODgsMjg2OTAsMjg2OTEsMjg2OTIsMjg2OTMsMjg2OTQsMjg2OTUsMjg2OTYsMjg2OTcsMjg3MDAsMjg3MDEsMjg3MDIsMjg3MDMsMjg3MDQsMjg3MDUsMjg3MDYsMjg3MDgsMjg3MDksMjg3MTAsMjg3MTEsMjg3MTIsMjg3MTMsMjg3MTQsMjg3MTUsMjg3MTYsMjg3MTcsMjg3MTgsMjg3MTksMjg3MjAsMjg3MjEsMjg3MjIsMjg3MjMsMjg3MjQsMjg3MjYsMjg3MjcsMjg3MjgsMjg3MzAsMjg3MzEsMjg3MzIsMjg3MzMsMjg3MzQsMjg3MzUsMjg3MzYsMjg3MzcsMjg3MzgsMjg3MzksMjg3NDAsMjg3NDEsMjg3NDIsMjg3NDMsMjg3NDQsMjg3NDUsMjg3NDYsMjg3NDcsMjg3NDksMjg3NTAsMjg3NTIsMjg3NTMsMjg3NTQsMjg3NTUsMjg3NTYsMjg3NTcsMjg3NTgsMjg3NTksMjg3NjAsMjg3NjEsMjg3NjIsMjg3NjMsMjg3NjQsMjg3NjUsMjg3NjcsMjg3NjgsMjg3NjksMjg3NzAsMjg3NzEsMjg3NzIsMjg3NzMsMjg3NzQsMjg3NzUsMjg3NzYsMjg3NzcsMjg3NzgsMjg3ODIsMjg3ODUsMjg3ODYsMjg3ODcsMjg3ODgsMjg3OTEsMjg3OTMsMjg3OTQsMjg3OTUsMjg3OTcsMjg4MDEsMjg4MDIsMjg4MDMsMjg4MDQsMjg4MDYsMjg4MDcsMjg4MDgsMjg4MTEsMjg4MTIsMjg4MTMsMjg4MTUsMjg4MTYsMjg4MTcsMjg4MTksMjg4MjMsMjg4MjQsMjg4MjYsMjg4MjcsMjg4MzAsMjg4MzEsMjg4MzIsMjg4MzMsMjg4MzQsMjg4MzUsMjg4MzYsMjg4MzcsMjg4MzgsMjg4MzksMjg4NDAsMjg4NDEsMjg4NDIsMjg4NDgsMjg4NTAsMjg4NTIsMjg4NTMsMjg4NTQsMjg4NTgsMjg4NjIsMjg4NjMsMjg4NjgsMjg4NjksMjg4NzAsMjg4NzEsMjg4NzMsMjg4NzUsMjg4NzYsMjg4NzcsMjg4NzgsMjg4NzksMjg4ODAsMjg4ODEsMjg4ODIsMjg4ODMsMjg4ODQsMjg4ODUsMjg4ODYsMjg4ODcsMjg4OTAsMjg4OTIsMjg4OTMsMjg4OTQsMjg4OTYsMjg4OTcsMjg4OTgsMjg4OTksMjg5MDEsMjg5MDYsMjg5MTAsMjg5MTIsMjg5MTMsMjg5MTQsMjg5MTUsMjg5MTYsMjg5MTcsMjg5MTgsMjg5MjAsMjg5MjIsMjg5MjMsMjg5MjQsMjg5MjYsMjg5MjcsMjg5MjgsMjg5MjksMjg5MzAsMjg5MzEsMjg5MzIsMjg5MzMsMjg5MzQsMjg5MzUsMjg5MzYsMjg5MzksMjg5NDAsMjg5NDEsMjg5NDIsMjg5NDMsMjg5NDUsMjg5NDYsMjg5NDgsMjg5NTEsMjg5NTUsMjg5NTYsMjg5NTcsMjg5NTgsMjg5NTksMjg5NjAsMjg5NjEsMjg5NjIsMjg5NjMsMjg5NjQsMjg5NjUsMjg5NjcsMjg5NjgsMjg5NjksMjg5NzAsMjg5NzEsMjg5NzIsMjg5NzMsMjg5NzQsMjg5NzgsMjg5NzksMjg5ODAsMjg5ODEsMjg5ODMsMjg5ODQsMjg5ODUsMjg5ODYsMjg5ODcsMjg5ODgsMjg5ODksMjg5OTAsMjg5OTEsMjg5OTIsMjg5OTMsMjg5OTQsMjg5OTUsMjg5OTYsMjg5OTgsMjg5OTksMjkwMDAsMjkwMDEsMjkwMDMsMjkwMDUsMjkwMDcsMjkwMDgsMjkwMDksMjkwMTAsMjkwMTEsMjkwMTIsMjkwMTMsMjkwMTQsMjkwMTUsMjkwMTYsMjkwMTcsMjkwMTgsMjkwMTksMjkwMjEsMjkwMjMsMjkwMjQsMjkwMjUsMjkwMjYsMjkwMjcsMjkwMjksMjkwMzMsMjkwMzQsMjkwMzUsMjkwMzYsMjkwMzcsMjkwMzksMjkwNDAsMjkwNDEsMjkwNDQsMjkwNDUsMjkwNDYsMjkwNDcsMjkwNDksMjkwNTEsMjkwNTIsMjkwNTQsMjkwNTUsMjkwNTYsMjkwNTcsMjkwNTgsMjkwNTksMjkwNjEsMjkwNjIsMjkwNjMsMjkwNjQsMjkwNjUsMjkwNjcsMjkwNjgsMjkwNjksMjkwNzAsMjkwNzIsMjkwNzMsMjkwNzQsMjkwNzUsMjkwNzcsMjkwNzgsMjkwNzksMjkwODIsMjkwODMsMjkwODQsMjkwODUsMjkwODYsMjkwODksMjkwOTAsMjkwOTEsMjkwOTIsMjkwOTMsMjkwOTQsMjkwOTUsMjkwOTcsMjkwOTgsMjkwOTksMjkxMDEsMjkxMDIsMjkxMDMsMjkxMDQsMjkxMDUsMjkxMDYsMjkxMDgsMjkxMTAsMjkxMTEsMjkxMTIsMjkxMTQsMjkxMTUsMjkxMTYsMjkxMTcsMjkxMTgsMjkxMTksMjkxMjAsMjkxMjEsMjkxMjIsMjkxMjQsMjkxMjUsMjkxMjYsMjkxMjcsMjkxMjgsMjkxMjksMjkxMzAsMjkxMzEsMjkxMzIsMjkxMzMsMjkxMzUsMjkxMzYsMjkxMzcsMjkxMzgsMjkxMzksMjkxNDIsMjkxNDMsMjkxNDQsMjkxNDUsMjkxNDYsMjkxNDcsMjkxNDgsMjkxNDksMjkxNTAsMjkxNTEsMjkxNTMsMjkxNTQsMjkxNTUsMjkxNTYsMjkxNTgsMjkxNjAsMjkxNjEsMjkxNjIsMjkxNjMsMjkxNjQsMjkxNjUsMjkxNjcsMjkxNjgsMjkxNjksMjkxNzAsMjkxNzEsMjkxNzIsMjkxNzMsMjkxNzQsMjkxNzUsMjkxNzYsMjkxNzgsMjkxNzksMjkxODAsMjkxODEsMjkxODIsMjkxODMsMjkxODQsMjkxODUsMjkxODYsMjkxODcsMjkxODgsMjkxODksMjkxOTEsMjkxOTIsMjkxOTMsMjkxOTQsMjkxOTUsMjkxOTYsMjkxOTcsMjkxOTgsMjkxOTksMjkyMDAsMjkyMDEsMjkyMDIsMjkyMDMsMjkyMDQsMjkyMDUsMjkyMDYsMjkyMDcsMjkyMDgsMjkyMDksMjkyMTAsMjkyMTEsMjkyMTIsMjkyMTQsMjkyMTUsMjkyMTYsMjkyMTcsMjkyMTgsMjkyMTksMjkyMjAsMjkyMjEsMjkyMjIsMjkyMjMsMjkyMjUsMjkyMjcsMjkyMjksMjkyMzAsMjkyMzEsMjkyMzQsMjkyMzUsMjkyMzYsMjkyNDIsMjkyNDQsMjkyNDYsMjkyNDgsMjkyNDksMjkyNTAsMjkyNTEsMjkyNTIsMjkyNTMsMjkyNTQsMjkyNTcsMjkyNTgsMjkyNTksMjkyNjIsMjkyNjMsMjkyNjQsMjkyNjUsMjkyNjcsMjkyNjgsMjkyNjksMjkyNzEsMjkyNzIsMjkyNzQsMjkyNzYsMjkyNzgsMjkyODAsMjkyODMsMjkyODQsMjkyODUsMjkyODgsMjkyOTAsMjkyOTEsMjkyOTIsMjkyOTMsMjkyOTYsMjkyOTcsMjkyOTksMjkzMDAsMjkzMDIsMjkzMDMsMjkzMDQsMjkzMDcsMjkzMDgsMjkzMDksMjkzMTQsMjkzMTUsMjkzMTcsMjkzMTgsMjkzMTksMjkzMjAsMjkzMjEsMjkzMjQsMjkzMjYsMjkzMjgsMjkzMjksMjkzMzEsMjkzMzIsMjkzMzMsMjkzMzQsMjkzMzUsMjkzMzYsMjkzMzcsMjkzMzgsMjkzMzksMjkzNDAsMjkzNDEsMjkzNDIsMjkzNDQsMjkzNDUsMjkzNDYsMjkzNDcsMjkzNDgsMjkzNDksMjkzNTAsMjkzNTEsMjkzNTIsMjkzNTMsMjkzNTQsMjkzNTUsMjkzNTgsMjkzNjEsMjkzNjIsMjkzNjMsMjkzNjUsMjkzNzAsMjkzNzEsMjkzNzIsMjkzNzMsMjkzNzQsMjkzNzUsMjkzNzYsMjkzODEsMjkzODIsMjkzODMsMjkzODUsMjkzODYsMjkzODcsMjkzODgsMjkzOTEsMjkzOTMsMjkzOTUsMjkzOTYsMjkzOTcsMjkzOTgsMjk0MDAsMjk0MDIsMjk0MDMsNTg1NjYsNTg1NjcsNTg1NjgsNTg1NjksNTg1NzAsNTg1NzEsNTg1NzIsNTg1NzMsNTg1NzQsNTg1NzUsNTg1NzYsNTg1NzcsNTg1NzgsNTg1NzksNTg1ODAsNTg1ODEsNTg1ODIsNTg1ODMsNTg1ODQsNTg1ODUsNTg1ODYsNTg1ODcsNTg1ODgsNTg1ODksNTg1OTAsNTg1OTEsNTg1OTIsNTg1OTMsNTg1OTQsNTg1OTUsNTg1OTYsNTg1OTcsNTg1OTgsNTg1OTksNTg2MDAsNTg2MDEsNTg2MDIsNTg2MDMsNTg2MDQsNTg2MDUsNTg2MDYsNTg2MDcsNTg2MDgsNTg2MDksNTg2MTAsNTg2MTEsNTg2MTIsNTg2MTMsNTg2MTQsNTg2MTUsNTg2MTYsNTg2MTcsNTg2MTgsNTg2MTksNTg2MjAsNTg2MjEsNTg2MjIsNTg2MjMsNTg2MjQsNTg2MjUsNTg2MjYsNTg2MjcsNTg2MjgsNTg2MjksNTg2MzAsNTg2MzEsNTg2MzIsNTg2MzMsNTg2MzQsNTg2MzUsNTg2MzYsNTg2MzcsNTg2MzgsNTg2MzksNTg2NDAsNTg2NDEsNTg2NDIsNTg2NDMsNTg2NDQsNTg2NDUsNTg2NDYsNTg2NDcsNTg2NDgsNTg2NDksNTg2NTAsNTg2NTEsNTg2NTIsNTg2NTMsNTg2NTQsNTg2NTUsNTg2NTYsNTg2NTcsNTg2NTgsNTg2NTksNTg2NjAsNTg2NjEsMTIyODgsMTIyODksMTIyOTAsMTgzLDcxMyw3MTEsMTY4LDEyMjkxLDEyMjkzLDgyMTIsNjUzNzQsODIxNCw4MjMwLDgyMTYsODIxNyw4MjIwLDgyMjEsMTIzMDgsMTIzMDksMTIyOTYsMTIyOTcsMTIyOTgsMTIyOTksMTIzMDAsMTIzMDEsMTIzMDIsMTIzMDMsMTIzMTAsMTIzMTEsMTIzMDQsMTIzMDUsMTc3LDIxNSwyNDcsODc1OCw4NzQzLDg3NDQsODcyMSw4NzE5LDg3NDYsODc0NSw4NzEyLDg3NTksODczMCw4ODY5LDg3NDEsODczNiw4OTc4LDg4NTcsODc0Nyw4NzUwLDg4MDEsODc4MCw4Nzc2LDg3NjUsODczMyw4ODAwLDg4MTQsODgxNSw4ODA0LDg4MDUsODczNCw4NzU3LDg3NTYsOTc5NCw5NzkyLDE3Niw4MjQyLDgyNDMsODQ1MSw2NTI4NCwxNjQsNjU1MDQsNjU1MDUsODI0MCwxNjcsODQ3MCw5NzM0LDk3MzMsOTY3NSw5Njc5LDk2NzgsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjUxLDk2NTAsODI1MSw4NTk0LDg1OTIsODU5Myw4NTk1LDEyMzA3LDU4NjYyLDU4NjYzLDU4NjY0LDU4NjY1LDU4NjY2LDU4NjY3LDU4NjY4LDU4NjY5LDU4NjcwLDU4NjcxLDU4NjcyLDU4NjczLDU4Njc0LDU4Njc1LDU4Njc2LDU4Njc3LDU4Njc4LDU4Njc5LDU4NjgwLDU4NjgxLDU4NjgyLDU4NjgzLDU4Njg0LDU4Njg1LDU4Njg2LDU4Njg3LDU4Njg4LDU4Njg5LDU4NjkwLDU4NjkxLDU4NjkyLDU4NjkzLDU4Njk0LDU4Njk1LDU4Njk2LDU4Njk3LDU4Njk4LDU4Njk5LDU4NzAwLDU4NzAxLDU4NzAyLDU4NzAzLDU4NzA0LDU4NzA1LDU4NzA2LDU4NzA3LDU4NzA4LDU4NzA5LDU4NzEwLDU4NzExLDU4NzEyLDU4NzEzLDU4NzE0LDU4NzE1LDU4NzE2LDU4NzE3LDU4NzE4LDU4NzE5LDU4NzIwLDU4NzIxLDU4NzIyLDU4NzIzLDU4NzI0LDU4NzI1LDU4NzI2LDU4NzI3LDU4NzI4LDU4NzI5LDU4NzMwLDU4NzMxLDU4NzMyLDU4NzMzLDU4NzM0LDU4NzM1LDU4NzM2LDU4NzM3LDU4NzM4LDU4NzM5LDU4NzQwLDU4NzQxLDU4NzQyLDU4NzQzLDU4NzQ0LDU4NzQ1LDU4NzQ2LDU4NzQ3LDU4NzQ4LDU4NzQ5LDU4NzUwLDU4NzUxLDU4NzUyLDU4NzUzLDU4NzU0LDU4NzU1LDU4NzU2LDU4NzU3LDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksNTkyMzgsNTkyMzksNTkyNDAsNTkyNDEsNTkyNDIsNTkyNDMsOTM1Miw5MzUzLDkzNTQsOTM1NSw5MzU2LDkzNTcsOTM1OCw5MzU5LDkzNjAsOTM2MSw5MzYyLDkzNjMsOTM2NCw5MzY1LDkzNjYsOTM2Nyw5MzY4LDkzNjksOTM3MCw5MzcxLDkzMzIsOTMzMyw5MzM0LDkzMzUsOTMzNiw5MzM3LDkzMzgsOTMzOSw5MzQwLDkzNDEsOTM0Miw5MzQzLDkzNDQsOTM0NSw5MzQ2LDkzNDcsOTM0OCw5MzQ5LDkzNTAsOTM1MSw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDgzNjQsNTkyNDUsMTI4MzIsMTI4MzMsMTI4MzQsMTI4MzUsMTI4MzYsMTI4MzcsMTI4MzgsMTI4MzksMTI4NDAsMTI4NDEsNTkyNDYsNTkyNDcsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1Myw4NTU0LDg1NTUsNTkyNDgsNTkyNDksNTg3NTgsNTg3NTksNTg3NjAsNTg3NjEsNTg3NjIsNTg3NjMsNTg3NjQsNTg3NjUsNTg3NjYsNTg3NjcsNTg3NjgsNTg3NjksNTg3NzAsNTg3NzEsNTg3NzIsNTg3NzMsNTg3NzQsNTg3NzUsNTg3NzYsNTg3NzcsNTg3NzgsNTg3NzksNTg3ODAsNTg3ODEsNTg3ODIsNTg3ODMsNTg3ODQsNTg3ODUsNTg3ODYsNTg3ODcsNTg3ODgsNTg3ODksNTg3OTAsNTg3OTEsNTg3OTIsNTg3OTMsNTg3OTQsNTg3OTUsNTg3OTYsNTg3OTcsNTg3OTgsNTg3OTksNTg4MDAsNTg4MDEsNTg4MDIsNTg4MDMsNTg4MDQsNTg4MDUsNTg4MDYsNTg4MDcsNTg4MDgsNTg4MDksNTg4MTAsNTg4MTEsNTg4MTIsNTg4MTMsNTg4MTQsNTg4MTUsNTg4MTYsNTg4MTcsNTg4MTgsNTg4MTksNTg4MjAsNTg4MjEsNTg4MjIsNTg4MjMsNTg4MjQsNTg4MjUsNTg4MjYsNTg4MjcsNTg4MjgsNTg4MjksNTg4MzAsNTg4MzEsNTg4MzIsNTg4MzMsNTg4MzQsNTg4MzUsNTg4MzYsNTg4MzcsNTg4MzgsNTg4MzksNTg4NDAsNTg4NDEsNTg4NDIsNTg4NDMsNTg4NDQsNTg4NDUsNTg4NDYsNTg4NDcsNTg4NDgsNTg4NDksNTg4NTAsNTg4NTEsNTg4NTIsMTIyODgsNjUyODEsNjUyODIsNjUyODMsNjU1MDksNjUyODUsNjUyODYsNjUyODcsNjUyODgsNjUyODksNjUyOTAsNjUyOTEsNjUyOTIsNjUyOTMsNjUyOTQsNjUyOTUsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsNjUzMDYsNjUzMDcsNjUzMDgsNjUzMDksNjUzMTAsNjUzMTEsNjUzMTIsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsNjUzMzksNjUzNDAsNjUzNDEsNjUzNDIsNjUzNDMsNjUzNDQsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsNjUzNzEsNjUzNzIsNjUzNzMsNjU1MDcsNTg4NTQsNTg4NTUsNTg4NTYsNTg4NTcsNTg4NTgsNTg4NTksNTg4NjAsNTg4NjEsNTg4NjIsNTg4NjMsNTg4NjQsNTg4NjUsNTg4NjYsNTg4NjcsNTg4NjgsNTg4NjksNTg4NzAsNTg4NzEsNTg4NzIsNTg4NzMsNTg4NzQsNTg4NzUsNTg4NzYsNTg4NzcsNTg4NzgsNTg4NzksNTg4ODAsNTg4ODEsNTg4ODIsNTg4ODMsNTg4ODQsNTg4ODUsNTg4ODYsNTg4ODcsNTg4ODgsNTg4ODksNTg4OTAsNTg4OTEsNTg4OTIsNTg4OTMsNTg4OTQsNTg4OTUsNTg4OTYsNTg4OTcsNTg4OTgsNTg4OTksNTg5MDAsNTg5MDEsNTg5MDIsNTg5MDMsNTg5MDQsNTg5MDUsNTg5MDYsNTg5MDcsNTg5MDgsNTg5MDksNTg5MTAsNTg5MTEsNTg5MTIsNTg5MTMsNTg5MTQsNTg5MTUsNTg5MTYsNTg5MTcsNTg5MTgsNTg5MTksNTg5MjAsNTg5MjEsNTg5MjIsNTg5MjMsNTg5MjQsNTg5MjUsNTg5MjYsNTg5MjcsNTg5MjgsNTg5MjksNTg5MzAsNTg5MzEsNTg5MzIsNTg5MzMsNTg5MzQsNTg5MzUsNTg5MzYsNTg5MzcsNTg5MzgsNTg5MzksNTg5NDAsNTg5NDEsNTg5NDIsNTg5NDMsNTg5NDQsNTg5NDUsNTg5NDYsNTg5NDcsNTg5NDgsNTg5NDksMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsNTkyNTAsNTkyNTEsNTkyNTIsNTkyNTMsNTkyNTQsNTkyNTUsNTkyNTYsNTkyNTcsNTkyNTgsNTkyNTksNTkyNjAsNTg5NTAsNTg5NTEsNTg5NTIsNTg5NTMsNTg5NTQsNTg5NTUsNTg5NTYsNTg5NTcsNTg5NTgsNTg5NTksNTg5NjAsNTg5NjEsNTg5NjIsNTg5NjMsNTg5NjQsNTg5NjUsNTg5NjYsNTg5NjcsNTg5NjgsNTg5NjksNTg5NzAsNTg5NzEsNTg5NzIsNTg5NzMsNTg5NzQsNTg5NzUsNTg5NzYsNTg5NzcsNTg5NzgsNTg5NzksNTg5ODAsNTg5ODEsNTg5ODIsNTg5ODMsNTg5ODQsNTg5ODUsNTg5ODYsNTg5ODcsNTg5ODgsNTg5ODksNTg5OTAsNTg5OTEsNTg5OTIsNTg5OTMsNTg5OTQsNTg5OTUsNTg5OTYsNTg5OTcsNTg5OTgsNTg5OTksNTkwMDAsNTkwMDEsNTkwMDIsNTkwMDMsNTkwMDQsNTkwMDUsNTkwMDYsNTkwMDcsNTkwMDgsNTkwMDksNTkwMTAsNTkwMTEsNTkwMTIsNTkwMTMsNTkwMTQsNTkwMTUsNTkwMTYsNTkwMTcsNTkwMTgsNTkwMTksNTkwMjAsNTkwMjEsNTkwMjIsNTkwMjMsNTkwMjQsNTkwMjUsNTkwMjYsNTkwMjcsNTkwMjgsNTkwMjksNTkwMzAsNTkwMzEsNTkwMzIsNTkwMzMsNTkwMzQsNTkwMzUsNTkwMzYsNTkwMzcsNTkwMzgsNTkwMzksNTkwNDAsNTkwNDEsNTkwNDIsNTkwNDMsNTkwNDQsNTkwNDUsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsNTkyNjEsNTkyNjIsNTkyNjMsNTkyNjQsNTkyNjUsNTkyNjYsNTkyNjcsNTkyNjgsNTkwNDYsNTkwNDcsNTkwNDgsNTkwNDksNTkwNTAsNTkwNTEsNTkwNTIsNTkwNTMsNTkwNTQsNTkwNTUsNTkwNTYsNTkwNTcsNTkwNTgsNTkwNTksNTkwNjAsNTkwNjEsNTkwNjIsNTkwNjMsNTkwNjQsNTkwNjUsNTkwNjYsNTkwNjcsNTkwNjgsNTkwNjksNTkwNzAsNTkwNzEsNTkwNzIsNTkwNzMsNTkwNzQsNTkwNzUsNTkwNzYsNTkwNzcsNTkwNzgsNTkwNzksNTkwODAsNTkwODEsNTkwODIsNTkwODMsNTkwODQsNTkwODUsNTkwODYsNTkwODcsNTkwODgsNTkwODksNTkwOTAsNTkwOTEsNTkwOTIsNTkwOTMsNTkwOTQsNTkwOTUsNTkwOTYsNTkwOTcsNTkwOTgsNTkwOTksNTkxMDAsNTkxMDEsNTkxMDIsNTkxMDMsNTkxMDQsNTkxMDUsNTkxMDYsNTkxMDcsNTkxMDgsNTkxMDksNTkxMTAsNTkxMTEsNTkxMTIsNTkxMTMsNTkxMTQsNTkxMTUsNTkxMTYsNTkxMTcsNTkxMTgsNTkxMTksNTkxMjAsNTkxMjEsNTkxMjIsNTkxMjMsNTkxMjQsNTkxMjUsNTkxMjYsNTkxMjcsNTkxMjgsNTkxMjksNTkxMzAsNTkxMzEsNTkxMzIsNTkxMzMsNTkxMzQsNTkxMzUsNTkxMzYsNTkxMzcsNTkxMzgsNTkxMzksNTkxNDAsNTkxNDEsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsNTkyNjksNTkyNzAsNTkyNzEsNTkyNzIsNTkyNzMsNTkyNzQsNTkyNzUsNTkyNzYsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksNTkyNzcsNTkyNzgsNTkyNzksNTkyODAsNTkyODEsNTkyODIsNTkyODMsNjUwNzcsNjUwNzgsNjUwODEsNjUwODIsNjUwODcsNjUwODgsNjUwODUsNjUwODYsNjUwODksNjUwOTAsNjUwOTEsNjUwOTIsNTkyODQsNTkyODUsNjUwODMsNjUwODQsNjUwNzksNjUwODAsNjUwNzMsNTkyODYsNjUwNzUsNjUwNzYsNTkyODcsNTkyODgsNTkyODksNTkyOTAsNTkyOTEsNTkyOTIsNTkyOTMsNTkyOTQsNTkyOTUsNTkxNDIsNTkxNDMsNTkxNDQsNTkxNDUsNTkxNDYsNTkxNDcsNTkxNDgsNTkxNDksNTkxNTAsNTkxNTEsNTkxNTIsNTkxNTMsNTkxNTQsNTkxNTUsNTkxNTYsNTkxNTcsNTkxNTgsNTkxNTksNTkxNjAsNTkxNjEsNTkxNjIsNTkxNjMsNTkxNjQsNTkxNjUsNTkxNjYsNTkxNjcsNTkxNjgsNTkxNjksNTkxNzAsNTkxNzEsNTkxNzIsNTkxNzMsNTkxNzQsNTkxNzUsNTkxNzYsNTkxNzcsNTkxNzgsNTkxNzksNTkxODAsNTkxODEsNTkxODIsNTkxODMsNTkxODQsNTkxODUsNTkxODYsNTkxODcsNTkxODgsNTkxODksNTkxOTAsNTkxOTEsNTkxOTIsNTkxOTMsNTkxOTQsNTkxOTUsNTkxOTYsNTkxOTcsNTkxOTgsNTkxOTksNTkyMDAsNTkyMDEsNTkyMDIsNTkyMDMsNTkyMDQsNTkyMDUsNTkyMDYsNTkyMDcsNTkyMDgsNTkyMDksNTkyMTAsNTkyMTEsNTkyMTIsNTkyMTMsNTkyMTQsNTkyMTUsNTkyMTYsNTkyMTcsNTkyMTgsNTkyMTksNTkyMjAsNTkyMjEsNTkyMjIsNTkyMjMsNTkyMjQsNTkyMjUsNTkyMjYsNTkyMjcsNTkyMjgsNTkyMjksNTkyMzAsNTkyMzEsNTkyMzIsNTkyMzMsNTkyMzQsNTkyMzUsNTkyMzYsNTkyMzcsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsNTkyOTYsNTkyOTcsNTkyOTgsNTkyOTksNTkzMDAsNTkzMDEsNTkzMDIsNTkzMDMsNTkzMDQsNTkzMDUsNTkzMDYsNTkzMDcsNTkzMDgsNTkzMDksNTkzMTAsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsNTkzMTEsNTkzMTIsNTkzMTMsNTkzMTQsNTkzMTUsNTkzMTYsNTkzMTcsNTkzMTgsNTkzMTksNTkzMjAsNTkzMjEsNTkzMjIsNTkzMjMsNzE0LDcxNSw3MjksODIxMSw4MjEzLDgyMjksODI0NSw4NDUzLDg0NTcsODU5OCw4NTk5LDg2MDAsODYwMSw4NzI1LDg3MzUsODczOSw4Nzg2LDg4MDYsODgwNyw4ODk1LDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NTgxLDk1ODIsOTU4Myw5NTg0LDk1ODUsOTU4Niw5NTg3LDk2MDEsOTYwMiw5NjAzLDk2MDQsOTYwNSw5NjA2LDk2MDcsOTYwOCw5NjA5LDk2MTAsOTYxMSw5NjEyLDk2MTMsOTYxNCw5NjE1LDk2MTksOTYyMCw5NjIxLDk2NjAsOTY2MSw5Njk4LDk2OTksOTcwMCw5NzAxLDk3MzcsODg1MywxMjMwNiwxMjMxNywxMjMxOCw1OTMyNCw1OTMyNSw1OTMyNiw1OTMyNyw1OTMyOCw1OTMyOSw1OTMzMCw1OTMzMSw1OTMzMiw1OTMzMyw1OTMzNCwyNTcsMjI1LDQ2MiwyMjQsMjc1LDIzMywyODMsMjMyLDI5OSwyMzcsNDY0LDIzNiwzMzMsMjQzLDQ2NiwyNDIsMzYzLDI1MCw0NjgsMjQ5LDQ3MCw0NzIsNDc0LDQ3NiwyNTIsMjM0LDU5Myw1OTMzNSwzMjQsMzI4LDUwNSw2MDksNTkzMzcsNTkzMzgsNTkzMzksNTkzNDAsMTI1NDksMTI1NTAsMTI1NTEsMTI1NTIsMTI1NTMsMTI1NTQsMTI1NTUsMTI1NTYsMTI1NTcsMTI1NTgsMTI1NTksMTI1NjAsMTI1NjEsMTI1NjIsMTI1NjMsMTI1NjQsMTI1NjUsMTI1NjYsMTI1NjcsMTI1NjgsMTI1NjksMTI1NzAsMTI1NzEsMTI1NzIsMTI1NzMsMTI1NzQsMTI1NzUsMTI1NzYsMTI1NzcsMTI1NzgsMTI1NzksMTI1ODAsMTI1ODEsMTI1ODIsMTI1ODMsMTI1ODQsMTI1ODUsNTkzNDEsNTkzNDIsNTkzNDMsNTkzNDQsNTkzNDUsNTkzNDYsNTkzNDcsNTkzNDgsNTkzNDksNTkzNTAsNTkzNTEsNTkzNTIsNTkzNTMsNTkzNTQsNTkzNTUsNTkzNTYsNTkzNTcsNTkzNTgsNTkzNTksNTkzNjAsNTkzNjEsMTIzMjEsMTIzMjIsMTIzMjMsMTIzMjQsMTIzMjUsMTIzMjYsMTIzMjcsMTIzMjgsMTIzMjksMTI5NjMsMTMxOTgsMTMxOTksMTMyMTIsMTMyMTMsMTMyMTQsMTMyMTcsMTMyNTIsMTMyNjIsMTMyNjUsMTMyNjYsMTMyNjksNjUwNzIsNjU1MDYsNjU1MDgsNTkzNjIsODQ4MSwxMjg0OSw1OTM2Myw4MjA4LDU5MzY0LDU5MzY1LDU5MzY2LDEyNTQwLDEyNDQzLDEyNDQ0LDEyNTQxLDEyNTQyLDEyMjk0LDEyNDQ1LDEyNDQ2LDY1MDk3LDY1MDk4LDY1MDk5LDY1MTAwLDY1MTAxLDY1MTAyLDY1MTAzLDY1MTA0LDY1MTA1LDY1MTA2LDY1MTA4LDY1MTA5LDY1MTEwLDY1MTExLDY1MTEzLDY1MTE0LDY1MTE1LDY1MTE2LDY1MTE3LDY1MTE4LDY1MTE5LDY1MTIwLDY1MTIxLDY1MTIyLDY1MTIzLDY1MTI0LDY1MTI1LDY1MTI2LDY1MTI4LDY1MTI5LDY1MTMwLDY1MTMxLDEyMzUwLDEyMjcyLDEyMjczLDEyMjc0LDEyMjc1LDEyMjc2LDEyMjc3LDEyMjc4LDEyMjc5LDEyMjgwLDEyMjgxLDEyMjgyLDEyMjgzLDEyMjk1LDU5MzgwLDU5MzgxLDU5MzgyLDU5MzgzLDU5Mzg0LDU5Mzg1LDU5Mzg2LDU5Mzg3LDU5Mzg4LDU5Mzg5LDU5MzkwLDU5MzkxLDU5MzkyLDk0NzIsOTQ3Myw5NDc0LDk0NzUsOTQ3Niw5NDc3LDk0NzgsOTQ3OSw5NDgwLDk0ODEsOTQ4Miw5NDgzLDk0ODQsOTQ4NSw5NDg2LDk0ODcsOTQ4OCw5NDg5LDk0OTAsOTQ5MSw5NDkyLDk0OTMsOTQ5NCw5NDk1LDk0OTYsOTQ5Nyw5NDk4LDk0OTksOTUwMCw5NTAxLDk1MDIsOTUwMyw5NTA0LDk1MDUsOTUwNiw5NTA3LDk1MDgsOTUwOSw5NTEwLDk1MTEsOTUxMiw5NTEzLDk1MTQsOTUxNSw5NTE2LDk1MTcsOTUxOCw5NTE5LDk1MjAsOTUyMSw5NTIyLDk1MjMsOTUyNCw5NTI1LDk1MjYsOTUyNyw5NTI4LDk1MjksOTUzMCw5NTMxLDk1MzIsOTUzMyw5NTM0LDk1MzUsOTUzNiw5NTM3LDk1MzgsOTUzOSw5NTQwLDk1NDEsOTU0Miw5NTQzLDk1NDQsOTU0NSw5NTQ2LDk1NDcsNTkzOTMsNTkzOTQsNTkzOTUsNTkzOTYsNTkzOTcsNTkzOTgsNTkzOTksNTk0MDAsNTk0MDEsNTk0MDIsNTk0MDMsNTk0MDQsNTk0MDUsNTk0MDYsNTk0MDcsMjk0MDQsMjk0MDUsMjk0MDcsMjk0MTAsMjk0MTEsMjk0MTIsMjk0MTMsMjk0MTQsMjk0MTUsMjk0MTgsMjk0MTksMjk0MjksMjk0MzAsMjk0MzMsMjk0MzcsMjk0MzgsMjk0MzksMjk0NDAsMjk0NDIsMjk0NDQsMjk0NDUsMjk0NDYsMjk0NDcsMjk0NDgsMjk0NDksMjk0NTEsMjk0NTIsMjk0NTMsMjk0NTUsMjk0NTYsMjk0NTcsMjk0NTgsMjk0NjAsMjk0NjQsMjk0NjUsMjk0NjYsMjk0NzEsMjk0NzIsMjk0NzUsMjk0NzYsMjk0NzgsMjk0NzksMjk0ODAsMjk0ODUsMjk0ODcsMjk0ODgsMjk0OTAsMjk0OTEsMjk0OTMsMjk0OTQsMjk0OTgsMjk0OTksMjk1MDAsMjk1MDEsMjk1MDQsMjk1MDUsMjk1MDYsMjk1MDcsMjk1MDgsMjk1MDksMjk1MTAsMjk1MTEsMjk1MTIsMjk1MTMsMjk1MTQsMjk1MTUsMjk1MTYsMjk1MTgsMjk1MTksMjk1MjEsMjk1MjMsMjk1MjQsMjk1MjUsMjk1MjYsMjk1MjgsMjk1MjksMjk1MzAsMjk1MzEsMjk1MzIsMjk1MzMsMjk1MzQsMjk1MzUsMjk1MzcsMjk1MzgsMjk1MzksMjk1NDAsMjk1NDEsMjk1NDIsMjk1NDMsMjk1NDQsMjk1NDUsMjk1NDYsMjk1NDcsMjk1NTAsMjk1NTIsMjk1NTMsNTczNDQsNTczNDUsNTczNDYsNTczNDcsNTczNDgsNTczNDksNTczNTAsNTczNTEsNTczNTIsNTczNTMsNTczNTQsNTczNTUsNTczNTYsNTczNTcsNTczNTgsNTczNTksNTczNjAsNTczNjEsNTczNjIsNTczNjMsNTczNjQsNTczNjUsNTczNjYsNTczNjcsNTczNjgsNTczNjksNTczNzAsNTczNzEsNTczNzIsNTczNzMsNTczNzQsNTczNzUsNTczNzYsNTczNzcsNTczNzgsNTczNzksNTczODAsNTczODEsNTczODIsNTczODMsNTczODQsNTczODUsNTczODYsNTczODcsNTczODgsNTczODksNTczOTAsNTczOTEsNTczOTIsNTczOTMsNTczOTQsNTczOTUsNTczOTYsNTczOTcsNTczOTgsNTczOTksNTc0MDAsNTc0MDEsNTc0MDIsNTc0MDMsNTc0MDQsNTc0MDUsNTc0MDYsNTc0MDcsNTc0MDgsNTc0MDksNTc0MTAsNTc0MTEsNTc0MTIsNTc0MTMsNTc0MTQsNTc0MTUsNTc0MTYsNTc0MTcsNTc0MTgsNTc0MTksNTc0MjAsNTc0MjEsNTc0MjIsNTc0MjMsNTc0MjQsNTc0MjUsNTc0MjYsNTc0MjcsNTc0MjgsNTc0MjksNTc0MzAsNTc0MzEsNTc0MzIsNTc0MzMsNTc0MzQsNTc0MzUsNTc0MzYsNTc0MzcsMjk1NTQsMjk1NTUsMjk1NTYsMjk1NTcsMjk1NTgsMjk1NTksMjk1NjAsMjk1NjEsMjk1NjIsMjk1NjMsMjk1NjQsMjk1NjUsMjk1NjcsMjk1NjgsMjk1NjksMjk1NzAsMjk1NzEsMjk1NzMsMjk1NzQsMjk1NzYsMjk1NzgsMjk1ODAsMjk1ODEsMjk1ODMsMjk1ODQsMjk1ODYsMjk1ODcsMjk1ODgsMjk1ODksMjk1OTEsMjk1OTIsMjk1OTMsMjk1OTQsMjk1OTYsMjk1OTcsMjk1OTgsMjk2MDAsMjk2MDEsMjk2MDMsMjk2MDQsMjk2MDUsMjk2MDYsMjk2MDcsMjk2MDgsMjk2MTAsMjk2MTIsMjk2MTMsMjk2MTcsMjk2MjAsMjk2MjEsMjk2MjIsMjk2MjQsMjk2MjUsMjk2MjgsMjk2MjksMjk2MzAsMjk2MzEsMjk2MzMsMjk2MzUsMjk2MzYsMjk2MzcsMjk2MzgsMjk2MzksMjk2NDMsMjk2NDQsMjk2NDYsMjk2NTAsMjk2NTEsMjk2NTIsMjk2NTMsMjk2NTQsMjk2NTUsMjk2NTYsMjk2NTgsMjk2NTksMjk2NjAsMjk2NjEsMjk2NjMsMjk2NjUsMjk2NjYsMjk2NjcsMjk2NjgsMjk2NzAsMjk2NzIsMjk2NzQsMjk2NzUsMjk2NzYsMjk2NzgsMjk2NzksMjk2ODAsMjk2ODEsMjk2ODMsMjk2ODQsMjk2ODUsMjk2ODYsMjk2ODcsNTc0MzgsNTc0MzksNTc0NDAsNTc0NDEsNTc0NDIsNTc0NDMsNTc0NDQsNTc0NDUsNTc0NDYsNTc0NDcsNTc0NDgsNTc0NDksNTc0NTAsNTc0NTEsNTc0NTIsNTc0NTMsNTc0NTQsNTc0NTUsNTc0NTYsNTc0NTcsNTc0NTgsNTc0NTksNTc0NjAsNTc0NjEsNTc0NjIsNTc0NjMsNTc0NjQsNTc0NjUsNTc0NjYsNTc0NjcsNTc0NjgsNTc0NjksNTc0NzAsNTc0NzEsNTc0NzIsNTc0NzMsNTc0NzQsNTc0NzUsNTc0NzYsNTc0NzcsNTc0NzgsNTc0NzksNTc0ODAsNTc0ODEsNTc0ODIsNTc0ODMsNTc0ODQsNTc0ODUsNTc0ODYsNTc0ODcsNTc0ODgsNTc0ODksNTc0OTAsNTc0OTEsNTc0OTIsNTc0OTMsNTc0OTQsNTc0OTUsNTc0OTYsNTc0OTcsNTc0OTgsNTc0OTksNTc1MDAsNTc1MDEsNTc1MDIsNTc1MDMsNTc1MDQsNTc1MDUsNTc1MDYsNTc1MDcsNTc1MDgsNTc1MDksNTc1MTAsNTc1MTEsNTc1MTIsNTc1MTMsNTc1MTQsNTc1MTUsNTc1MTYsNTc1MTcsNTc1MTgsNTc1MTksNTc1MjAsNTc1MjEsNTc1MjIsNTc1MjMsNTc1MjQsNTc1MjUsNTc1MjYsNTc1MjcsNTc1MjgsNTc1MjksNTc1MzAsNTc1MzEsMjk2ODgsMjk2ODksMjk2OTAsMjk2OTEsMjk2OTIsMjk2OTMsMjk2OTQsMjk2OTUsMjk2OTYsMjk2OTcsMjk2OTgsMjk3MDAsMjk3MDMsMjk3MDQsMjk3MDcsMjk3MDgsMjk3MDksMjk3MTAsMjk3MTMsMjk3MTQsMjk3MTUsMjk3MTYsMjk3MTcsMjk3MTgsMjk3MTksMjk3MjAsMjk3MjEsMjk3MjQsMjk3MjUsMjk3MjYsMjk3MjcsMjk3MjgsMjk3MjksMjk3MzEsMjk3MzIsMjk3MzUsMjk3MzcsMjk3MzksMjk3NDEsMjk3NDMsMjk3NDUsMjk3NDYsMjk3NTEsMjk3NTIsMjk3NTMsMjk3NTQsMjk3NTUsMjk3NTcsMjk3NTgsMjk3NTksMjk3NjAsMjk3NjIsMjk3NjMsMjk3NjQsMjk3NjUsMjk3NjYsMjk3NjcsMjk3NjgsMjk3NjksMjk3NzAsMjk3NzEsMjk3NzIsMjk3NzMsMjk3NzQsMjk3NzUsMjk3NzYsMjk3NzcsMjk3NzgsMjk3NzksMjk3ODAsMjk3ODIsMjk3ODQsMjk3ODksMjk3OTIsMjk3OTMsMjk3OTQsMjk3OTUsMjk3OTYsMjk3OTcsMjk3OTgsMjk3OTksMjk4MDAsMjk4MDEsMjk4MDIsMjk4MDMsMjk4MDQsMjk4MDYsMjk4MDcsMjk4MDksMjk4MTAsMjk4MTEsMjk4MTIsMjk4MTMsMjk4MTYsMjk4MTcsMjk4MTgsNTc1MzIsNTc1MzMsNTc1MzQsNTc1MzUsNTc1MzYsNTc1MzcsNTc1MzgsNTc1MzksNTc1NDAsNTc1NDEsNTc1NDIsNTc1NDMsNTc1NDQsNTc1NDUsNTc1NDYsNTc1NDcsNTc1NDgsNTc1NDksNTc1NTAsNTc1NTEsNTc1NTIsNTc1NTMsNTc1NTQsNTc1NTUsNTc1NTYsNTc1NTcsNTc1NTgsNTc1NTksNTc1NjAsNTc1NjEsNTc1NjIsNTc1NjMsNTc1NjQsNTc1NjUsNTc1NjYsNTc1NjcsNTc1NjgsNTc1NjksNTc1NzAsNTc1NzEsNTc1NzIsNTc1NzMsNTc1NzQsNTc1NzUsNTc1NzYsNTc1NzcsNTc1NzgsNTc1NzksNTc1ODAsNTc1ODEsNTc1ODIsNTc1ODMsNTc1ODQsNTc1ODUsNTc1ODYsNTc1ODcsNTc1ODgsNTc1ODksNTc1OTAsNTc1OTEsNTc1OTIsNTc1OTMsNTc1OTQsNTc1OTUsNTc1OTYsNTc1OTcsNTc1OTgsNTc1OTksNTc2MDAsNTc2MDEsNTc2MDIsNTc2MDMsNTc2MDQsNTc2MDUsNTc2MDYsNTc2MDcsNTc2MDgsNTc2MDksNTc2MTAsNTc2MTEsNTc2MTIsNTc2MTMsNTc2MTQsNTc2MTUsNTc2MTYsNTc2MTcsNTc2MTgsNTc2MTksNTc2MjAsNTc2MjEsNTc2MjIsNTc2MjMsNTc2MjQsNTc2MjUsMjk4MTksMjk4MjAsMjk4MjEsMjk4MjMsMjk4MjYsMjk4MjgsMjk4MjksMjk4MzAsMjk4MzIsMjk4MzMsMjk4MzQsMjk4MzYsMjk4MzcsMjk4MzksMjk4NDEsMjk4NDIsMjk4NDMsMjk4NDQsMjk4NDUsMjk4NDYsMjk4NDcsMjk4NDgsMjk4NDksMjk4NTAsMjk4NTEsMjk4NTMsMjk4NTUsMjk4NTYsMjk4NTcsMjk4NTgsMjk4NTksMjk4NjAsMjk4NjEsMjk4NjIsMjk4NjYsMjk4NjcsMjk4NjgsMjk4NjksMjk4NzAsMjk4NzEsMjk4NzIsMjk4NzMsMjk4NzQsMjk4NzUsMjk4NzYsMjk4NzcsMjk4NzgsMjk4NzksMjk4ODAsMjk4ODEsMjk4ODMsMjk4ODQsMjk4ODUsMjk4ODYsMjk4ODcsMjk4ODgsMjk4ODksMjk4OTAsMjk4OTEsMjk4OTIsMjk4OTMsMjk4OTQsMjk4OTUsMjk4OTYsMjk4OTcsMjk4OTgsMjk4OTksMjk5MDAsMjk5MDEsMjk5MDIsMjk5MDMsMjk5MDQsMjk5MDUsMjk5MDcsMjk5MDgsMjk5MDksMjk5MTAsMjk5MTEsMjk5MTIsMjk5MTMsMjk5MTQsMjk5MTUsMjk5MTcsMjk5MTksMjk5MjEsMjk5MjUsMjk5MjcsMjk5MjgsMjk5MjksMjk5MzAsMjk5MzEsMjk5MzIsMjk5MzMsMjk5MzYsMjk5MzcsMjk5MzgsNTc2MjYsNTc2MjcsNTc2MjgsNTc2MjksNTc2MzAsNTc2MzEsNTc2MzIsNTc2MzMsNTc2MzQsNTc2MzUsNTc2MzYsNTc2MzcsNTc2MzgsNTc2MzksNTc2NDAsNTc2NDEsNTc2NDIsNTc2NDMsNTc2NDQsNTc2NDUsNTc2NDYsNTc2NDcsNTc2NDgsNTc2NDksNTc2NTAsNTc2NTEsNTc2NTIsNTc2NTMsNTc2NTQsNTc2NTUsNTc2NTYsNTc2NTcsNTc2NTgsNTc2NTksNTc2NjAsNTc2NjEsNTc2NjIsNTc2NjMsNTc2NjQsNTc2NjUsNTc2NjYsNTc2NjcsNTc2NjgsNTc2NjksNTc2NzAsNTc2NzEsNTc2NzIsNTc2NzMsNTc2NzQsNTc2NzUsNTc2NzYsNTc2NzcsNTc2NzgsNTc2NzksNTc2ODAsNTc2ODEsNTc2ODIsNTc2ODMsNTc2ODQsNTc2ODUsNTc2ODYsNTc2ODcsNTc2ODgsNTc2ODksNTc2OTAsNTc2OTEsNTc2OTIsNTc2OTMsNTc2OTQsNTc2OTUsNTc2OTYsNTc2OTcsNTc2OTgsNTc2OTksNTc3MDAsNTc3MDEsNTc3MDIsNTc3MDMsNTc3MDQsNTc3MDUsNTc3MDYsNTc3MDcsNTc3MDgsNTc3MDksNTc3MTAsNTc3MTEsNTc3MTIsNTc3MTMsNTc3MTQsNTc3MTUsNTc3MTYsNTc3MTcsNTc3MTgsNTc3MTksMjk5MzksMjk5NDEsMjk5NDQsMjk5NDUsMjk5NDYsMjk5NDcsMjk5NDgsMjk5NDksMjk5NTAsMjk5NTIsMjk5NTMsMjk5NTQsMjk5NTUsMjk5NTcsMjk5NTgsMjk5NTksMjk5NjAsMjk5NjEsMjk5NjIsMjk5NjMsMjk5NjQsMjk5NjYsMjk5NjgsMjk5NzAsMjk5NzIsMjk5NzMsMjk5NzQsMjk5NzUsMjk5NzksMjk5ODEsMjk5ODIsMjk5ODQsMjk5ODUsMjk5ODYsMjk5ODcsMjk5ODgsMjk5OTAsMjk5OTEsMjk5OTQsMjk5OTgsMzAwMDQsMzAwMDYsMzAwMDksMzAwMTIsMzAwMTMsMzAwMTUsMzAwMTcsMzAwMTgsMzAwMTksMzAwMjAsMzAwMjIsMzAwMjMsMzAwMjUsMzAwMjYsMzAwMjksMzAwMzIsMzAwMzMsMzAwMzQsMzAwMzUsMzAwMzcsMzAwMzgsMzAwMzksMzAwNDAsMzAwNDUsMzAwNDYsMzAwNDcsMzAwNDgsMzAwNDksMzAwNTAsMzAwNTEsMzAwNTIsMzAwNTUsMzAwNTYsMzAwNTcsMzAwNTksMzAwNjAsMzAwNjEsMzAwNjIsMzAwNjMsMzAwNjQsMzAwNjUsMzAwNjcsMzAwNjksMzAwNzAsMzAwNzEsMzAwNzQsMzAwNzUsMzAwNzYsMzAwNzcsMzAwNzgsMzAwODAsMzAwODEsMzAwODIsMzAwODQsMzAwODUsMzAwODcsNTc3MjAsNTc3MjEsNTc3MjIsNTc3MjMsNTc3MjQsNTc3MjUsNTc3MjYsNTc3MjcsNTc3MjgsNTc3MjksNTc3MzAsNTc3MzEsNTc3MzIsNTc3MzMsNTc3MzQsNTc3MzUsNTc3MzYsNTc3MzcsNTc3MzgsNTc3MzksNTc3NDAsNTc3NDEsNTc3NDIsNTc3NDMsNTc3NDQsNTc3NDUsNTc3NDYsNTc3NDcsNTc3NDgsNTc3NDksNTc3NTAsNTc3NTEsNTc3NTIsNTc3NTMsNTc3NTQsNTc3NTUsNTc3NTYsNTc3NTcsNTc3NTgsNTc3NTksNTc3NjAsNTc3NjEsNTc3NjIsNTc3NjMsNTc3NjQsNTc3NjUsNTc3NjYsNTc3NjcsNTc3NjgsNTc3NjksNTc3NzAsNTc3NzEsNTc3NzIsNTc3NzMsNTc3NzQsNTc3NzUsNTc3NzYsNTc3NzcsNTc3NzgsNTc3NzksNTc3ODAsNTc3ODEsNTc3ODIsNTc3ODMsNTc3ODQsNTc3ODUsNTc3ODYsNTc3ODcsNTc3ODgsNTc3ODksNTc3OTAsNTc3OTEsNTc3OTIsNTc3OTMsNTc3OTQsNTc3OTUsNTc3OTYsNTc3OTcsNTc3OTgsNTc3OTksNTc4MDAsNTc4MDEsNTc4MDIsNTc4MDMsNTc4MDQsNTc4MDUsNTc4MDYsNTc4MDcsNTc4MDgsNTc4MDksNTc4MTAsNTc4MTEsNTc4MTIsNTc4MTMsMzAwODgsMzAwODksMzAwOTAsMzAwOTIsMzAwOTMsMzAwOTQsMzAwOTYsMzAwOTksMzAxMDEsMzAxMDQsMzAxMDcsMzAxMDgsMzAxMTAsMzAxMTQsMzAxMTgsMzAxMTksMzAxMjAsMzAxMjEsMzAxMjIsMzAxMjUsMzAxMzQsMzAxMzUsMzAxMzgsMzAxMzksMzAxNDMsMzAxNDQsMzAxNDUsMzAxNTAsMzAxNTUsMzAxNTYsMzAxNTgsMzAxNTksMzAxNjAsMzAxNjEsMzAxNjMsMzAxNjcsMzAxNjksMzAxNzAsMzAxNzIsMzAxNzMsMzAxNzUsMzAxNzYsMzAxNzcsMzAxODEsMzAxODUsMzAxODgsMzAxODksMzAxOTAsMzAxOTEsMzAxOTQsMzAxOTUsMzAxOTcsMzAxOTgsMzAxOTksMzAyMDAsMzAyMDIsMzAyMDMsMzAyMDUsMzAyMDYsMzAyMTAsMzAyMTIsMzAyMTQsMzAyMTUsMzAyMTYsMzAyMTcsMzAyMTksMzAyMjEsMzAyMjIsMzAyMjMsMzAyMjUsMzAyMjYsMzAyMjcsMzAyMjgsMzAyMzAsMzAyMzQsMzAyMzYsMzAyMzcsMzAyMzgsMzAyNDEsMzAyNDMsMzAyNDcsMzAyNDgsMzAyNTIsMzAyNTQsMzAyNTUsMzAyNTcsMzAyNTgsMzAyNjIsMzAyNjMsMzAyNjUsMzAyNjYsMzAyNjcsMzAyNjksMzAyNzMsMzAyNzQsMzAyNzYsNTc4MTQsNTc4MTUsNTc4MTYsNTc4MTcsNTc4MTgsNTc4MTksNTc4MjAsNTc4MjEsNTc4MjIsNTc4MjMsNTc4MjQsNTc4MjUsNTc4MjYsNTc4MjcsNTc4MjgsNTc4MjksNTc4MzAsNTc4MzEsNTc4MzIsNTc4MzMsNTc4MzQsNTc4MzUsNTc4MzYsNTc4MzcsNTc4MzgsNTc4MzksNTc4NDAsNTc4NDEsNTc4NDIsNTc4NDMsNTc4NDQsNTc4NDUsNTc4NDYsNTc4NDcsNTc4NDgsNTc4NDksNTc4NTAsNTc4NTEsNTc4NTIsNTc4NTMsNTc4NTQsNTc4NTUsNTc4NTYsNTc4NTcsNTc4NTgsNTc4NTksNTc4NjAsNTc4NjEsNTc4NjIsNTc4NjMsNTc4NjQsNTc4NjUsNTc4NjYsNTc4NjcsNTc4NjgsNTc4NjksNTc4NzAsNTc4NzEsNTc4NzIsNTc4NzMsNTc4NzQsNTc4NzUsNTc4NzYsNTc4NzcsNTc4NzgsNTc4NzksNTc4ODAsNTc4ODEsNTc4ODIsNTc4ODMsNTc4ODQsNTc4ODUsNTc4ODYsNTc4ODcsNTc4ODgsNTc4ODksNTc4OTAsNTc4OTEsNTc4OTIsNTc4OTMsNTc4OTQsNTc4OTUsNTc4OTYsNTc4OTcsNTc4OTgsNTc4OTksNTc5MDAsNTc5MDEsNTc5MDIsNTc5MDMsNTc5MDQsNTc5MDUsNTc5MDYsNTc5MDcsMzAyNzcsMzAyNzgsMzAyNzksMzAyODAsMzAyODEsMzAyODIsMzAyODMsMzAyODYsMzAyODcsMzAyODgsMzAyODksMzAyOTAsMzAyOTEsMzAyOTMsMzAyOTUsMzAyOTYsMzAyOTcsMzAyOTgsMzAyOTksMzAzMDEsMzAzMDMsMzAzMDQsMzAzMDUsMzAzMDYsMzAzMDgsMzAzMDksMzAzMTAsMzAzMTEsMzAzMTIsMzAzMTMsMzAzMTQsMzAzMTYsMzAzMTcsMzAzMTgsMzAzMjAsMzAzMjEsMzAzMjIsMzAzMjMsMzAzMjQsMzAzMjUsMzAzMjYsMzAzMjcsMzAzMjksMzAzMzAsMzAzMzIsMzAzMzUsMzAzMzYsMzAzMzcsMzAzMzksMzAzNDEsMzAzNDUsMzAzNDYsMzAzNDgsMzAzNDksMzAzNTEsMzAzNTIsMzAzNTQsMzAzNTYsMzAzNTcsMzAzNTksMzAzNjAsMzAzNjIsMzAzNjMsMzAzNjQsMzAzNjUsMzAzNjYsMzAzNjcsMzAzNjgsMzAzNjksMzAzNzAsMzAzNzEsMzAzNzMsMzAzNzQsMzAzNzUsMzAzNzYsMzAzNzcsMzAzNzgsMzAzNzksMzAzODAsMzAzODEsMzAzODMsMzAzODQsMzAzODcsMzAzODksMzAzOTAsMzAzOTEsMzAzOTIsMzAzOTMsMzAzOTQsMzAzOTUsMzAzOTYsMzAzOTcsMzAzOTgsMzA0MDAsMzA0MDEsMzA0MDMsMjE4MzQsMzg0NjMsMjI0NjcsMjUzODQsMjE3MTAsMjE3NjksMjE2OTYsMzAzNTMsMzAyODQsMzQxMDgsMzA3MDIsMzM0MDYsMzA4NjEsMjkyMzMsMzg1NTIsMzg3OTcsMjc2ODgsMjM0MzMsMjA0NzQsMjUzNTMsMjYyNjMsMjM3MzYsMzMwMTgsMjY2OTYsMzI5NDIsMjYxMTQsMzA0MTQsMjA5ODUsMjU5NDIsMjkxMDAsMzI3NTMsMzQ5NDgsMjA2NTgsMjI4ODUsMjUwMzQsMjg1OTUsMzM0NTMsMjU0MjAsMjUxNzAsMjE0ODUsMjE1NDMsMzE0OTQsMjA4NDMsMzAxMTYsMjQwNTIsMjUzMDAsMzYyOTksMzg3NzQsMjUyMjYsMzI3OTMsMjIzNjUsMzg3MTIsMzI2MTAsMjkyNDAsMzAzMzMsMjY1NzUsMzAzMzQsMjU2NzAsMjAzMzYsMzYxMzMsMjUzMDgsMzEyNTUsMjYwMDEsMjk2NzcsMjU2NDQsMjUyMDMsMzMzMjQsMzkwNDEsMjY0OTUsMjkyNTYsMjUxOTgsMjUyOTIsMjAyNzYsMjk5MjMsMjEzMjIsMjExNTAsMzI0NTgsMzcwMzAsMjQxMTAsMjY3NTgsMjcwMzYsMzMxNTIsMzI0NjUsMjY4MzQsMzA5MTcsMzQ0NDQsMzgyMjUsMjA2MjEsMzU4NzYsMzM1MDIsMzI5OTAsMjEyNTMsMzUwOTAsMjEwOTMsMzA0MDQsMzA0MDcsMzA0MDksMzA0MTEsMzA0MTIsMzA0MTksMzA0MjEsMzA0MjUsMzA0MjYsMzA0MjgsMzA0MjksMzA0MzAsMzA0MzIsMzA0MzMsMzA0MzQsMzA0MzUsMzA0MzYsMzA0MzgsMzA0MzksMzA0NDAsMzA0NDEsMzA0NDIsMzA0NDMsMzA0NDQsMzA0NDUsMzA0NDgsMzA0NTEsMzA0NTMsMzA0NTQsMzA0NTUsMzA0NTgsMzA0NTksMzA0NjEsMzA0NjMsMzA0NjQsMzA0NjYsMzA0NjcsMzA0NjksMzA0NzAsMzA0NzQsMzA0NzYsMzA0NzgsMzA0NzksMzA0ODAsMzA0ODEsMzA0ODIsMzA0ODMsMzA0ODQsMzA0ODUsMzA0ODYsMzA0ODcsMzA0ODgsMzA0OTEsMzA0OTIsMzA0OTMsMzA0OTQsMzA0OTcsMzA0OTksMzA1MDAsMzA1MDEsMzA1MDMsMzA1MDYsMzA1MDcsMzA1MDgsMzA1MTAsMzA1MTIsMzA1MTMsMzA1MTQsMzA1MTUsMzA1MTYsMzA1MjEsMzA1MjMsMzA1MjUsMzA1MjYsMzA1MjcsMzA1MzAsMzA1MzIsMzA1MzMsMzA1MzQsMzA1MzYsMzA1MzcsMzA1MzgsMzA1MzksMzA1NDAsMzA1NDEsMzA1NDIsMzA1NDMsMzA1NDYsMzA1NDcsMzA1NDgsMzA1NDksMzA1NTAsMzA1NTEsMzA1NTIsMzA1NTMsMzA1NTYsMzQxODAsMzg2NDksMjA0NDUsMjI1NjEsMzkyODEsMjM0NTMsMjUyNjUsMjUyNTMsMjYyOTIsMzU5NjEsNDAwNzcsMjkxOTAsMjY0NzksMzA4NjUsMjQ3NTQsMjEzMjksMjEyNzEsMzY3NDQsMzI5NzIsMzYxMjUsMzgwNDksMjA0OTMsMjkzODQsMjI3OTEsMjQ4MTEsMjg5NTMsMzQ5ODcsMjI4NjgsMzM1MTksMjY0MTIsMzE1MjgsMjM4NDksMzI1MDMsMjk5OTcsMjc4OTMsMzY0NTQsMzY4NTYsMzY5MjQsNDA3NjMsMjc2MDQsMzcxNDUsMzE1MDgsMjQ0NDQsMzA4ODcsMzQwMDYsMzQxMDksMjc2MDUsMjc2MDksMjc2MDYsMjQwNjUsMjQxOTksMzAyMDEsMzgzODEsMjU5NDksMjQzMzAsMjQ1MTcsMzY3NjcsMjI3MjEsMzMyMTgsMzY5OTEsMzg0OTEsMzg4MjksMzY3OTMsMzI1MzQsMzYxNDAsMjUxNTMsMjA0MTUsMjE0NjQsMjEzNDIsMzY3NzYsMzY3NzcsMzY3NzksMzY5NDEsMjY2MzEsMjQ0MjYsMzMxNzYsMzQ5MjAsNDAxNTAsMjQ5NzEsMjEwMzUsMzAyNTAsMjQ0MjgsMjU5OTYsMjg2MjYsMjgzOTIsMjM0ODYsMjU2NzIsMjA4NTMsMjA5MTIsMjY1NjQsMTk5OTMsMzExNzcsMzkyOTIsMjg4NTEsMzA1NTcsMzA1NTgsMzA1NTksMzA1NjAsMzA1NjQsMzA1NjcsMzA1NjksMzA1NzAsMzA1NzMsMzA1NzQsMzA1NzUsMzA1NzYsMzA1NzcsMzA1NzgsMzA1NzksMzA1ODAsMzA1ODEsMzA1ODIsMzA1ODMsMzA1ODQsMzA1ODYsMzA1ODcsMzA1ODgsMzA1OTMsMzA1OTQsMzA1OTUsMzA1OTgsMzA1OTksMzA2MDAsMzA2MDEsMzA2MDIsMzA2MDMsMzA2MDcsMzA2MDgsMzA2MTEsMzA2MTIsMzA2MTMsMzA2MTQsMzA2MTUsMzA2MTYsMzA2MTcsMzA2MTgsMzA2MTksMzA2MjAsMzA2MjEsMzA2MjIsMzA2MjUsMzA2MjcsMzA2MjgsMzA2MzAsMzA2MzIsMzA2MzUsMzA2MzcsMzA2MzgsMzA2MzksMzA2NDEsMzA2NDIsMzA2NDQsMzA2NDYsMzA2NDcsMzA2NDgsMzA2NDksMzA2NTAsMzA2NTIsMzA2NTQsMzA2NTYsMzA2NTcsMzA2NTgsMzA2NTksMzA2NjAsMzA2NjEsMzA2NjIsMzA2NjMsMzA2NjQsMzA2NjUsMzA2NjYsMzA2NjcsMzA2NjgsMzA2NzAsMzA2NzEsMzA2NzIsMzA2NzMsMzA2NzQsMzA2NzUsMzA2NzYsMzA2NzcsMzA2NzgsMzA2ODAsMzA2ODEsMzA2ODIsMzA2ODUsMzA2ODYsMzA2ODcsMzA2ODgsMzA2ODksMzA2OTIsMzAxNDksMjQxODIsMjk2MjcsMzM3NjAsMjU3NzMsMjUzMjAsMzgwNjksMjc4NzQsMjEzMzgsMjExODcsMjU2MTUsMzgwODIsMzE2MzYsMjAyNzEsMjQwOTEsMzMzMzQsMzMwNDYsMzMxNjIsMjgxOTYsMjc4NTAsMzk1MzksMjU0MjksMjEzNDAsMjE3NTQsMzQ5MTcsMjI0OTYsMTk5ODEsMjQwNjcsMjc0OTMsMzE4MDcsMzcwOTYsMjQ1OTgsMjU4MzAsMjk0NjgsMzUwMDksMjY0NDgsMjUxNjUsMzYxMzAsMzA1NzIsMzYzOTMsMzczMTksMjQ0MjUsMzM3NTYsMzQwODEsMzkxODQsMjE0NDIsMzQ0NTMsMjc1MzEsMjQ4MTMsMjQ4MDgsMjg3OTksMzM0ODUsMzMzMjksMjAxNzksMjc4MTUsMzQyNTUsMjU4MDUsMzE5NjEsMjcxMzMsMjYzNjEsMzM2MDksMjEzOTcsMzE1NzQsMjAzOTEsMjA4NzYsMjc5NzksMjM2MTgsMzY0NjEsMjU1NTQsMjE0NDksMzM1ODAsMzM1OTAsMjY1OTcsMzA5MDAsMjU2NjEsMjM1MTksMjM3MDAsMjQwNDYsMzU4MTUsMjUyODYsMjY2MTIsMzU5NjIsMjU2MDAsMjU1MzAsMzQ2MzMsMzkzMDcsMzU4NjMsMzI1NDQsMzgxMzAsMjAxMzUsMzg0MTYsMzkwNzYsMjYxMjQsMjk0NjIsMzA2OTQsMzA2OTYsMzA2OTgsMzA3MDMsMzA3MDQsMzA3MDUsMzA3MDYsMzA3MDgsMzA3MDksMzA3MTEsMzA3MTMsMzA3MTQsMzA3MTUsMzA3MTYsMzA3MjMsMzA3MjQsMzA3MjUsMzA3MjYsMzA3MjcsMzA3MjgsMzA3MzAsMzA3MzEsMzA3MzQsMzA3MzUsMzA3MzYsMzA3MzksMzA3NDEsMzA3NDUsMzA3NDcsMzA3NTAsMzA3NTIsMzA3NTMsMzA3NTQsMzA3NTYsMzA3NjAsMzA3NjIsMzA3NjMsMzA3NjYsMzA3NjcsMzA3NjksMzA3NzAsMzA3NzEsMzA3NzMsMzA3NzQsMzA3ODEsMzA3ODMsMzA3ODUsMzA3ODYsMzA3ODcsMzA3ODgsMzA3OTAsMzA3OTIsMzA3OTMsMzA3OTQsMzA3OTUsMzA3OTcsMzA3OTksMzA4MDEsMzA4MDMsMzA4MDQsMzA4MDgsMzA4MDksMzA4MTAsMzA4MTEsMzA4MTIsMzA4MTQsMzA4MTUsMzA4MTYsMzA4MTcsMzA4MTgsMzA4MTksMzA4MjAsMzA4MjEsMzA4MjIsMzA4MjMsMzA4MjQsMzA4MjUsMzA4MzEsMzA4MzIsMzA4MzMsMzA4MzQsMzA4MzUsMzA4MzYsMzA4MzcsMzA4MzgsMzA4NDAsMzA4NDEsMzA4NDIsMzA4NDMsMzA4NDUsMzA4NDYsMzA4NDcsMzA4NDgsMzA4NDksMzA4NTAsMzA4NTEsMjIzMzAsMjM1ODEsMjQxMjAsMzgyNzEsMjA2MDcsMzI5MjgsMjEzNzgsMjU5NTAsMzAwMjEsMjE4MDksMjA1MTMsMzYyMjksMjUyMjAsMzgwNDYsMjYzOTcsMjIwNjYsMjg1MjYsMjQwMzQsMjE1NTcsMjg4MTgsMzY3MTAsMjUxOTksMjU3NjQsMjU1MDcsMjQ0NDMsMjg1NTIsMzcxMDgsMzMyNTEsMzY3ODQsMjM1NzYsMjYyMTYsMjQ1NjEsMjc3ODUsMzg0NzIsMzYyMjUsMzQ5MjQsMjU3NDUsMzEyMTYsMjI0NzgsMjcyMjUsMjUxMDQsMjE1NzYsMjAwNTYsMzEyNDMsMjQ4MDksMjg1NDgsMzU4MDIsMjUyMTUsMzY4OTQsMzk1NjMsMzEyMDQsMjE1MDcsMzAxOTYsMjUzNDUsMjEyNzMsMjc3NDQsMzY4MzEsMjQzNDcsMzk1MzYsMzI4MjcsNDA4MzEsMjAzNjAsMjM2MTAsMzYxOTYsMzI3MDksMjYwMjEsMjg4NjEsMjA4MDUsMjA5MTQsMzQ0MTEsMjM4MTUsMjM0NTYsMjUyNzcsMzcyMjgsMzAwNjgsMzYzNjQsMzEyNjQsMjQ4MzMsMzE2MDksMjAxNjcsMzI1MDQsMzA1OTcsMTk5ODUsMzMyNjEsMjEwMjEsMjA5ODYsMjcyNDksMjE0MTYsMzY0ODcsMzgxNDgsMzg2MDcsMjgzNTMsMzg1MDAsMjY5NzAsMzA4NTIsMzA4NTMsMzA4NTQsMzA4NTYsMzA4NTgsMzA4NTksMzA4NjMsMzA4NjQsMzA4NjYsMzA4NjgsMzA4NjksMzA4NzAsMzA4NzMsMzA4NzcsMzA4NzgsMzA4ODAsMzA4ODIsMzA4ODQsMzA4ODYsMzA4ODgsMzA4ODksMzA4OTAsMzA4OTEsMzA4OTIsMzA4OTMsMzA4OTQsMzA4OTUsMzA5MDEsMzA5MDIsMzA5MDMsMzA5MDQsMzA5MDYsMzA5MDcsMzA5MDgsMzA5MDksMzA5MTEsMzA5MTIsMzA5MTQsMzA5MTUsMzA5MTYsMzA5MTgsMzA5MTksMzA5MjAsMzA5MjQsMzA5MjUsMzA5MjYsMzA5MjcsMzA5MjksMzA5MzAsMzA5MzEsMzA5MzQsMzA5MzUsMzA5MzYsMzA5MzgsMzA5MzksMzA5NDAsMzA5NDEsMzA5NDIsMzA5NDMsMzA5NDQsMzA5NDUsMzA5NDYsMzA5NDcsMzA5NDgsMzA5NDksMzA5NTAsMzA5NTEsMzA5NTMsMzA5NTQsMzA5NTUsMzA5NTcsMzA5NTgsMzA5NTksMzA5NjAsMzA5NjEsMzA5NjMsMzA5NjUsMzA5NjYsMzA5NjgsMzA5NjksMzA5NzEsMzA5NzIsMzA5NzMsMzA5NzQsMzA5NzUsMzA5NzYsMzA5NzgsMzA5NzksMzA5ODAsMzA5ODIsMzA5ODMsMzA5ODQsMzA5ODUsMzA5ODYsMzA5ODcsMzA5ODgsMzA3ODQsMjA2NDgsMzA2NzksMjU2MTYsMzUzMDIsMjI3ODgsMjU1NzEsMjQwMjksMzEzNTksMjY5NDEsMjAyNTYsMzMzMzcsMjE5MTIsMjAwMTgsMzAxMjYsMzEzODMsMjQxNjIsMjQyMDIsMzgzODMsMjEwMTksMjE1NjEsMjg4MTAsMjU0NjIsMzgxODAsMjI0MDIsMjYxNDksMjY5NDMsMzcyNTUsMjE3NjcsMjgxNDcsMzI0MzEsMzQ4NTAsMjUxMzksMzI0OTYsMzAxMzMsMzM1NzYsMzA5MTMsMzg2MDQsMzY3NjYsMjQ5MDQsMjk5NDMsMzU3ODksMjc0OTIsMjEwNTAsMzYxNzYsMjc0MjUsMzI4NzQsMzM5MDUsMjIyNTcsMjEyNTQsMjAxNzQsMTk5OTUsMjA5NDUsMzE4OTUsMzcyNTksMzE3NTEsMjA0MTksMzY0NzksMzE3MTMsMzEzODgsMjU3MDMsMjM4MjgsMjA2NTIsMzMwMzAsMzAyMDksMzE5MjksMjgxNDAsMzI3MzYsMjY0NDksMjMzODQsMjM1NDQsMzA5MjMsMjU3NzQsMjU2MTksMjU1MTQsMjUzODcsMzgxNjksMjU2NDUsMzY3OTgsMzE1NzIsMzAyNDksMjUxNzEsMjI4MjMsMjE1NzQsMjc1MTMsMjA2NDMsMjUxNDAsMjQxMDIsMjc1MjYsMjAxOTUsMzYxNTEsMzQ5NTUsMjQ0NTMsMzY5MTAsMzA5ODksMzA5OTAsMzA5OTEsMzA5OTIsMzA5OTMsMzA5OTQsMzA5OTYsMzA5OTcsMzA5OTgsMzA5OTksMzEwMDAsMzEwMDEsMzEwMDIsMzEwMDMsMzEwMDQsMzEwMDUsMzEwMDcsMzEwMDgsMzEwMDksMzEwMTAsMzEwMTEsMzEwMTMsMzEwMTQsMzEwMTUsMzEwMTYsMzEwMTcsMzEwMTgsMzEwMTksMzEwMjAsMzEwMjEsMzEwMjIsMzEwMjMsMzEwMjQsMzEwMjUsMzEwMjYsMzEwMjcsMzEwMjksMzEwMzAsMzEwMzEsMzEwMzIsMzEwMzMsMzEwMzcsMzEwMzksMzEwNDIsMzEwNDMsMzEwNDQsMzEwNDUsMzEwNDcsMzEwNTAsMzEwNTEsMzEwNTIsMzEwNTMsMzEwNTQsMzEwNTUsMzEwNTYsMzEwNTcsMzEwNTgsMzEwNjAsMzEwNjEsMzEwNjQsMzEwNjUsMzEwNzMsMzEwNzUsMzEwNzYsMzEwNzgsMzEwODEsMzEwODIsMzEwODMsMzEwODQsMzEwODYsMzEwODgsMzEwODksMzEwOTAsMzEwOTEsMzEwOTIsMzEwOTMsMzEwOTQsMzEwOTcsMzEwOTksMzExMDAsMzExMDEsMzExMDIsMzExMDMsMzExMDYsMzExMDcsMzExMTAsMzExMTEsMzExMTIsMzExMTMsMzExMTUsMzExMTYsMzExMTcsMzExMTgsMzExMjAsMzExMjEsMzExMjIsMjQ2MDgsMzI4MjksMjUyODUsMjAwMjUsMjEzMzMsMzcxMTIsMjU1MjgsMzI5NjYsMjYwODYsMjc2OTQsMjAyOTQsMjQ4MTQsMjgxMjksMzU4MDYsMjQzNzcsMzQ1MDcsMjQ0MDMsMjUzNzcsMjA4MjYsMzM2MzMsMjY3MjMsMjA5OTIsMjU0NDMsMzY0MjQsMjA0OTgsMjM3MDcsMzEwOTUsMjM1NDgsMjEwNDAsMzEyOTEsMjQ3NjQsMzY5NDcsMzA0MjMsMjQ1MDMsMjQ0NzEsMzAzNDAsMzY0NjAsMjg3ODMsMzAzMzEsMzE1NjEsMzA2MzQsMjA5NzksMzcwMTEsMjI1NjQsMjAzMDIsMjg0MDQsMzY4NDIsMjU5MzIsMzE1MTUsMjkzODAsMjgwNjgsMzI3MzUsMjMyNjUsMjUyNjksMjQyMTMsMjIzMjAsMzM5MjIsMzE1MzIsMjQwOTMsMjQzNTEsMzY4ODIsMzI1MzIsMzkwNzIsMjU0NzQsMjgzNTksMzA4NzIsMjg4NTcsMjA4NTYsMzg3NDcsMjI0NDMsMzAwMDUsMjAyOTEsMzAwMDgsMjQyMTUsMjQ4MDYsMjI4ODAsMjgwOTYsMjc1ODMsMzA4NTcsMjE1MDAsMzg2MTMsMjA5MzksMjA5OTMsMjU0ODEsMjE1MTQsMzgwMzUsMzU4NDMsMzYzMDAsMjkyNDEsMzA4NzksMzQ2NzgsMzY4NDUsMzU4NTMsMjE0NzIsMzExMjMsMzExMjQsMzExMjUsMzExMjYsMzExMjcsMzExMjgsMzExMjksMzExMzEsMzExMzIsMzExMzMsMzExMzQsMzExMzUsMzExMzYsMzExMzcsMzExMzgsMzExMzksMzExNDAsMzExNDEsMzExNDIsMzExNDQsMzExNDUsMzExNDYsMzExNDcsMzExNDgsMzExNDksMzExNTAsMzExNTEsMzExNTIsMzExNTMsMzExNTQsMzExNTYsMzExNTcsMzExNTgsMzExNTksMzExNjAsMzExNjQsMzExNjcsMzExNzAsMzExNzIsMzExNzMsMzExNzUsMzExNzYsMzExNzgsMzExODAsMzExODIsMzExODMsMzExODQsMzExODcsMzExODgsMzExOTAsMzExOTEsMzExOTMsMzExOTQsMzExOTUsMzExOTYsMzExOTcsMzExOTgsMzEyMDAsMzEyMDEsMzEyMDIsMzEyMDUsMzEyMDgsMzEyMTAsMzEyMTIsMzEyMTQsMzEyMTcsMzEyMTgsMzEyMTksMzEyMjAsMzEyMjEsMzEyMjIsMzEyMjMsMzEyMjUsMzEyMjYsMzEyMjgsMzEyMzAsMzEyMzEsMzEyMzMsMzEyMzYsMzEyMzcsMzEyMzksMzEyNDAsMzEyNDEsMzEyNDIsMzEyNDQsMzEyNDcsMzEyNDgsMzEyNDksMzEyNTAsMzEyNTEsMzEyNTMsMzEyNTQsMzEyNTYsMzEyNTcsMzEyNTksMzEyNjAsMTk5NjksMzA0NDcsMjE0ODYsMzgwMjUsMzkwMzAsNDA3MTgsMzgxODksMjM0NTAsMzU3NDYsMjAwMDIsMTk5OTYsMjA5MDgsMzM4OTEsMjUwMjYsMjExNjAsMjY2MzUsMjAzNzUsMjQ2ODMsMjA5MjMsMjc5MzQsMjA4MjgsMjUyMzgsMjYwMDcsMzg0OTcsMzU5MTAsMzY4ODcsMzAxNjgsMzcxMTcsMzA1NjMsMjc2MDIsMjkzMjIsMjk0MjAsMzU4MzUsMjI1ODEsMzA1ODUsMzYxNzIsMjY0NjAsMzgyMDgsMzI5MjIsMjQyMzAsMjgxOTMsMjI5MzAsMzE0NzEsMzA3MDEsMzgyMDMsMjc1NzMsMjYwMjksMzI1MjYsMjI1MzQsMjA4MTcsMzg0MzEsMjM1NDUsMjI2OTcsMjE1NDQsMzY0NjYsMjU5NTgsMzkwMzksMjIyNDQsMzgwNDUsMzA0NjIsMzY5MjksMjU0NzksMjE3MDIsMjI4MTAsMjI4NDIsMjI0MjcsMzY1MzAsMjY0MjEsMzYzNDYsMzMzMzMsMjEwNTcsMjQ4MTYsMjI1NDksMzQ1NTgsMjM3ODQsNDA1MTcsMjA0MjAsMzkwNjksMzU3NjksMjMwNzcsMjQ2OTQsMjEzODAsMjUyMTIsMzY5NDMsMzcxMjIsMzkyOTUsMjQ2ODEsMzI3ODAsMjA3OTksMzI4MTksMjM1NzIsMzkyODUsMjc5NTMsMjAxMDgsMzEyNjEsMzEyNjMsMzEyNjUsMzEyNjYsMzEyNjgsMzEyNjksMzEyNzAsMzEyNzEsMzEyNzIsMzEyNzMsMzEyNzQsMzEyNzUsMzEyNzYsMzEyNzcsMzEyNzgsMzEyNzksMzEyODAsMzEyODEsMzEyODIsMzEyODQsMzEyODUsMzEyODYsMzEyODgsMzEyOTAsMzEyOTQsMzEyOTYsMzEyOTcsMzEyOTgsMzEyOTksMzEzMDAsMzEzMDEsMzEzMDMsMzEzMDQsMzEzMDUsMzEzMDYsMzEzMDcsMzEzMDgsMzEzMDksMzEzMTAsMzEzMTEsMzEzMTIsMzEzMTQsMzEzMTUsMzEzMTYsMzEzMTcsMzEzMTgsMzEzMjAsMzEzMjEsMzEzMjIsMzEzMjMsMzEzMjQsMzEzMjUsMzEzMjYsMzEzMjcsMzEzMjgsMzEzMjksMzEzMzAsMzEzMzEsMzEzMzIsMzEzMzMsMzEzMzQsMzEzMzUsMzEzMzYsMzEzMzcsMzEzMzgsMzEzMzksMzEzNDAsMzEzNDEsMzEzNDIsMzEzNDMsMzEzNDUsMzEzNDYsMzEzNDcsMzEzNDksMzEzNTUsMzEzNTYsMzEzNTcsMzEzNTgsMzEzNjIsMzEzNjUsMzEzNjcsMzEzNjksMzEzNzAsMzEzNzEsMzEzNzIsMzEzNzQsMzEzNzUsMzEzNzYsMzEzNzksMzEzODAsMzEzODUsMzEzODYsMzEzODcsMzEzOTAsMzEzOTMsMzEzOTQsMzYxNDQsMjE0NTcsMzI2MDIsMzE1NjcsMjAyNDAsMjAwNDcsMzg0MDAsMjc4NjEsMjk2NDgsMzQyODEsMjQwNzAsMzAwNTgsMzI3NjMsMjcxNDYsMzA3MTgsMzgwMzQsMzIzMjEsMjA5NjEsMjg5MDIsMjE0NTMsMzY4MjAsMzM1MzksMzYxMzcsMjkzNTksMzkyNzcsMjc4NjcsMjIzNDYsMzM0NTksMjYwNDEsMzI5MzgsMjUxNTEsMzg0NTAsMjI5NTIsMjAyMjMsMzU3NzUsMzI0NDIsMjU5MTgsMzM3NzgsMzg3NTAsMjE4NTcsMzkxMzQsMzI5MzMsMjEyOTAsMzU4MzcsMjE1MzYsMzI5NTQsMjQyMjMsMjc4MzIsMzYxNTMsMzM0NTIsMzcyMTAsMjE1NDUsMjc2NzUsMjA5OTgsMzI0MzksMjIzNjcsMjg5NTQsMjc3NzQsMzE4ODEsMjI4NTksMjAyMjEsMjQ1NzUsMjQ4NjgsMzE5MTQsMjAwMTYsMjM1NTMsMjY1MzksMzQ1NjIsMjM3OTIsMzgxNTUsMzkxMTgsMzAxMjcsMjg5MjUsMzY4OTgsMjA5MTEsMzI1NDEsMzU3NzMsMjI4NTcsMjA5NjQsMjAzMTUsMjE1NDIsMjI4MjcsMjU5NzUsMzI5MzIsMjM0MTMsMjUyMDYsMjUyODIsMzY3NTIsMjQxMzMsMjc2NzksMzE1MjYsMjAyMzksMjA0NDAsMjYzODEsMzEzOTUsMzEzOTYsMzEzOTksMzE0MDEsMzE0MDIsMzE0MDMsMzE0MDYsMzE0MDcsMzE0MDgsMzE0MDksMzE0MTAsMzE0MTIsMzE0MTMsMzE0MTQsMzE0MTUsMzE0MTYsMzE0MTcsMzE0MTgsMzE0MTksMzE0MjAsMzE0MjEsMzE0MjIsMzE0MjQsMzE0MjUsMzE0MjYsMzE0MjcsMzE0MjgsMzE0MjksMzE0MzAsMzE0MzEsMzE0MzIsMzE0MzMsMzE0MzQsMzE0MzYsMzE0MzcsMzE0MzgsMzE0MzksMzE0NDAsMzE0NDEsMzE0NDIsMzE0NDMsMzE0NDQsMzE0NDUsMzE0NDcsMzE0NDgsMzE0NTAsMzE0NTEsMzE0NTIsMzE0NTMsMzE0NTcsMzE0NTgsMzE0NjAsMzE0NjMsMzE0NjQsMzE0NjUsMzE0NjYsMzE0NjcsMzE0NjgsMzE0NzAsMzE0NzIsMzE0NzMsMzE0NzQsMzE0NzUsMzE0NzYsMzE0NzcsMzE0NzgsMzE0NzksMzE0ODAsMzE0ODMsMzE0ODQsMzE0ODYsMzE0ODgsMzE0ODksMzE0OTAsMzE0OTMsMzE0OTUsMzE0OTcsMzE1MDAsMzE1MDEsMzE1MDIsMzE1MDQsMzE1MDYsMzE1MDcsMzE1MTAsMzE1MTEsMzE1MTIsMzE1MTQsMzE1MTYsMzE1MTcsMzE1MTksMzE1MjEsMzE1MjIsMzE1MjMsMzE1MjcsMzE1MjksMzE1MzMsMjgwMTQsMjgwNzQsMzExMTksMzQ5OTMsMjQzNDMsMjk5OTUsMjUyNDIsMzY3NDEsMjA0NjMsMzczNDAsMjYwMjMsMzMwNzEsMzMxMDUsMjQyMjAsMzMxMDQsMzYyMTIsMjExMDMsMzUyMDYsMzYxNzEsMjI3OTcsMjA2MTMsMjAxODQsMzg0MjgsMjkyMzgsMzMxNDUsMzYxMjcsMjM1MDAsMzU3NDcsMzg0NjgsMjI5MTksMzI1MzgsMjE2NDgsMjIxMzQsMjIwMzAsMzU4MTMsMjU5MTMsMjcwMTAsMzgwNDEsMzA0MjIsMjgyOTcsMjQxNzgsMjk5NzYsMjY0MzgsMjY1NzcsMzE0ODcsMzI5MjUsMzYyMTQsMjQ4NjMsMzExNzQsMjU5NTQsMzYxOTUsMjA4NzIsMjEwMTgsMzgwNTAsMzI1NjgsMzI5MjMsMzI0MzQsMjM3MDMsMjgyMDcsMjY0NjQsMzE3MDUsMzAzNDcsMzk2NDAsMzMxNjcsMzI2NjAsMzE5NTcsMjU2MzAsMzgyMjQsMzEyOTUsMjE1NzgsMjE3MzMsMjc0NjgsMjU2MDEsMjUwOTYsNDA1MDksMzMwMTEsMzAxMDUsMjExMDYsMzg3NjEsMzM4ODMsMjY2ODQsMzQ1MzIsMzg0MDEsMzg1NDgsMzgxMjQsMjAwMTAsMjE1MDgsMzI0NzMsMjY2ODEsMzYzMTksMzI3ODksMjYzNTYsMjQyMTgsMzI2OTcsMzE1MzUsMzE1MzYsMzE1MzgsMzE1NDAsMzE1NDEsMzE1NDIsMzE1NDMsMzE1NDUsMzE1NDcsMzE1NDksMzE1NTEsMzE1NTIsMzE1NTMsMzE1NTQsMzE1NTUsMzE1NTYsMzE1NTgsMzE1NjAsMzE1NjIsMzE1NjUsMzE1NjYsMzE1NzEsMzE1NzMsMzE1NzUsMzE1NzcsMzE1ODAsMzE1ODIsMzE1ODMsMzE1ODUsMzE1ODcsMzE1ODgsMzE1ODksMzE1OTAsMzE1OTEsMzE1OTIsMzE1OTMsMzE1OTQsMzE1OTUsMzE1OTYsMzE1OTcsMzE1OTksMzE2MDAsMzE2MDMsMzE2MDQsMzE2MDYsMzE2MDgsMzE2MTAsMzE2MTIsMzE2MTMsMzE2MTUsMzE2MTcsMzE2MTgsMzE2MTksMzE2MjAsMzE2MjIsMzE2MjMsMzE2MjQsMzE2MjUsMzE2MjYsMzE2MjcsMzE2MjgsMzE2MzAsMzE2MzEsMzE2MzMsMzE2MzQsMzE2MzUsMzE2MzgsMzE2NDAsMzE2NDEsMzE2NDIsMzE2NDMsMzE2NDYsMzE2NDcsMzE2NDgsMzE2NTEsMzE2NTIsMzE2NTMsMzE2NjIsMzE2NjMsMzE2NjQsMzE2NjYsMzE2NjcsMzE2NjksMzE2NzAsMzE2NzEsMzE2NzMsMzE2NzQsMzE2NzUsMzE2NzYsMzE2NzcsMzE2NzgsMzE2NzksMzE2ODAsMzE2ODIsMzE2ODMsMzE2ODQsMjI0NjYsMzI4MzEsMjY3NzUsMjQwMzcsMjU5MTUsMjExNTEsMjQ2ODUsNDA4NTgsMjAzNzksMzY1MjQsMjA4NDQsMjM0NjcsMjQzMzksMjQwNDEsMjc3NDIsMjUzMjksMzYxMjksMjA4NDksMzgwNTcsMjEyNDYsMjc4MDcsMzM1MDMsMjkzOTksMjI0MzQsMjY1MDAsMzYxNDEsMjI4MTUsMzY3NjQsMzM3MzUsMjE2NTMsMzE2MjksMjAyNzIsMjc4MzcsMjMzOTYsMjI5OTMsNDA3MjMsMjE0NzYsMzQ1MDYsMzk1OTIsMzU4OTUsMzI5MjksMjU5MjUsMzkwMzgsMjIyNjYsMzg1OTksMjEwMzgsMjk5MTYsMjEwNzIsMjM1MjEsMjUzNDYsMzUwNzQsMjAwNTQsMjUyOTYsMjQ2MTgsMjY4NzQsMjA4NTEsMjM0NDgsMjA4OTYsMzUyNjYsMzE2NDksMzkzMDIsMzI1OTIsMjQ4MTUsMjg3NDgsMzYxNDMsMjA4MDksMjQxOTEsMzY4OTEsMjk4MDgsMzUyNjgsMjIzMTcsMzA3ODksMjQ0MDIsNDA4NjMsMzgzOTQsMzY3MTIsMzk3NDAsMzU4MDksMzAzMjgsMjY2OTAsMjY1ODgsMzYzMzAsMzYxNDksMjEwNTMsMzY3NDYsMjgzNzgsMjY4MjksMzgxNDksMzcxMDEsMjIyNjksMjY1MjQsMzUwNjUsMzY4MDcsMjE3MDQsMzE2ODUsMzE2ODgsMzE2ODksMzE2OTAsMzE2OTEsMzE2OTMsMzE2OTQsMzE2OTUsMzE2OTYsMzE2OTgsMzE3MDAsMzE3MDEsMzE3MDIsMzE3MDMsMzE3MDQsMzE3MDcsMzE3MDgsMzE3MTAsMzE3MTEsMzE3MTIsMzE3MTQsMzE3MTUsMzE3MTYsMzE3MTksMzE3MjAsMzE3MjEsMzE3MjMsMzE3MjQsMzE3MjUsMzE3MjcsMzE3MjgsMzE3MzAsMzE3MzEsMzE3MzIsMzE3MzMsMzE3MzQsMzE3MzYsMzE3MzcsMzE3MzgsMzE3MzksMzE3NDEsMzE3NDMsMzE3NDQsMzE3NDUsMzE3NDYsMzE3NDcsMzE3NDgsMzE3NDksMzE3NTAsMzE3NTIsMzE3NTMsMzE3NTQsMzE3NTcsMzE3NTgsMzE3NjAsMzE3NjEsMzE3NjIsMzE3NjMsMzE3NjQsMzE3NjUsMzE3NjcsMzE3NjgsMzE3NjksMzE3NzAsMzE3NzEsMzE3NzIsMzE3NzMsMzE3NzQsMzE3NzYsMzE3NzcsMzE3NzgsMzE3NzksMzE3ODAsMzE3ODEsMzE3ODQsMzE3ODUsMzE3ODcsMzE3ODgsMzE3ODksMzE3OTAsMzE3OTEsMzE3OTIsMzE3OTMsMzE3OTQsMzE3OTUsMzE3OTYsMzE3OTcsMzE3OTgsMzE3OTksMzE4MDEsMzE4MDIsMzE4MDMsMzE4MDQsMzE4MDUsMzE4MDYsMzE4MTAsMzk2MDgsMjM0MDEsMjgwMjMsMjc2ODYsMjAxMzMsMjM0NzUsMzk1NTksMzcyMTksMjUwMDAsMzcwMzksMzg4ODksMjE1NDcsMjgwODUsMjM1MDYsMjA5ODksMjE4OTgsMzI1OTcsMzI3NTIsMjU3ODgsMjU0MjEsMjYwOTcsMjUwMjIsMjQ3MTcsMjg5MzgsMjc3MzUsMjc3MjEsMjI4MzEsMjY0NzcsMzMzMjIsMjI3NDEsMjIxNTgsMzU5NDYsMjc2MjcsMzcwODUsMjI5MDksMzI3OTEsMjE0OTUsMjgwMDksMjE2MjEsMjE5MTcsMzM2NTUsMzM3NDMsMjY2ODAsMzExNjYsMjE2NDQsMjAzMDksMjE1MTIsMzA0MTgsMzU5NzcsMzg0MDIsMjc4MjcsMjgwODgsMzYyMDMsMzUwODgsNDA1NDgsMzYxNTQsMjIwNzksNDA2NTcsMzAxNjUsMjQ0NTYsMjk0MDgsMjQ2ODAsMjE3NTYsMjAxMzYsMjcxNzgsMzQ5MTMsMjQ2NTgsMzY3MjAsMjE3MDAsMjg4ODgsMzQ0MjUsNDA1MTEsMjc5NDYsMjM0MzksMjQzNDQsMzI0MTgsMjE4OTcsMjAzOTksMjk0OTIsMjE1NjQsMjE0MDIsMjA1MDUsMjE1MTgsMjE2MjgsMjAwNDYsMjQ1NzMsMjk3ODYsMjI3NzQsMzM4OTksMzI5OTMsMzQ2NzYsMjkzOTIsMzE5NDYsMjgyNDYsMzE4MTEsMzE4MTIsMzE4MTMsMzE4MTQsMzE4MTUsMzE4MTYsMzE4MTcsMzE4MTgsMzE4MTksMzE4MjAsMzE4MjIsMzE4MjMsMzE4MjQsMzE4MjUsMzE4MjYsMzE4MjcsMzE4MjgsMzE4MjksMzE4MzAsMzE4MzEsMzE4MzIsMzE4MzMsMzE4MzQsMzE4MzUsMzE4MzYsMzE4MzcsMzE4MzgsMzE4MzksMzE4NDAsMzE4NDEsMzE4NDIsMzE4NDMsMzE4NDQsMzE4NDUsMzE4NDYsMzE4NDcsMzE4NDgsMzE4NDksMzE4NTAsMzE4NTEsMzE4NTIsMzE4NTMsMzE4NTQsMzE4NTUsMzE4NTYsMzE4NTcsMzE4NTgsMzE4NjEsMzE4NjIsMzE4NjMsMzE4NjQsMzE4NjUsMzE4NjYsMzE4NzAsMzE4NzEsMzE4NzIsMzE4NzMsMzE4NzQsMzE4NzUsMzE4NzYsMzE4NzcsMzE4NzgsMzE4NzksMzE4ODAsMzE4ODIsMzE4ODMsMzE4ODQsMzE4ODUsMzE4ODYsMzE4ODcsMzE4ODgsMzE4OTEsMzE4OTIsMzE4OTQsMzE4OTcsMzE4OTgsMzE4OTksMzE5MDQsMzE5MDUsMzE5MDcsMzE5MTAsMzE5MTEsMzE5MTIsMzE5MTMsMzE5MTUsMzE5MTYsMzE5MTcsMzE5MTksMzE5MjAsMzE5MjQsMzE5MjUsMzE5MjYsMzE5MjcsMzE5MjgsMzE5MzAsMzE5MzEsMjQzNTksMzQzODIsMjE4MDQsMjUyNTIsMjAxMTQsMjc4MTgsMjUxNDMsMzM0NTcsMjE3MTksMjEzMjYsMjk1MDIsMjgzNjksMzAwMTEsMjEwMTAsMjEyNzAsMzU4MDUsMjcwODgsMjQ0NTgsMjQ1NzYsMjgxNDIsMjIzNTEsMjc0MjYsMjk2MTUsMjY3MDcsMzY4MjQsMzI1MzEsMjU0NDIsMjQ3MzksMjE3OTYsMzAxODYsMzU5MzgsMjg5NDksMjgwNjcsMjM0NjIsMjQxODcsMzM2MTgsMjQ5MDgsNDA2NDQsMzA5NzAsMzQ2NDcsMzE3ODMsMzAzNDMsMjA5NzYsMjQ4MjIsMjkwMDQsMjYxNzksMjQxNDAsMjQ2NTMsMzU4NTQsMjg3ODQsMjUzODEsMzY3NDUsMjQ1MDksMjQ2NzQsMzQ1MTYsMjIyMzgsMjc1ODUsMjQ3MjQsMjQ5MzUsMjEzMjEsMjQ4MDAsMjYyMTQsMzYxNTksMzEyMjksMjAyNTAsMjg5MDUsMjc3MTksMzU3NjMsMzU4MjYsMzI0NzIsMzM2MzYsMjYxMjcsMjMxMzAsMzk3NDYsMjc5ODUsMjgxNTEsMzU5MDUsMjc5NjMsMjAyNDksMjg3NzksMzM3MTksMjUxMTAsMjQ3ODUsMzg2NjksMzYxMzUsMzEwOTYsMjA5ODcsMjIzMzQsMjI1MjIsMjY0MjYsMzAwNzIsMzEyOTMsMzEyMTUsMzE2MzcsMzE5MzUsMzE5MzYsMzE5MzgsMzE5MzksMzE5NDAsMzE5NDIsMzE5NDUsMzE5NDcsMzE5NTAsMzE5NTEsMzE5NTIsMzE5NTMsMzE5NTQsMzE5NTUsMzE5NTYsMzE5NjAsMzE5NjIsMzE5NjMsMzE5NjUsMzE5NjYsMzE5NjksMzE5NzAsMzE5NzEsMzE5NzIsMzE5NzMsMzE5NzQsMzE5NzUsMzE5NzcsMzE5NzgsMzE5NzksMzE5ODAsMzE5ODEsMzE5ODIsMzE5ODQsMzE5ODUsMzE5ODYsMzE5ODcsMzE5ODgsMzE5ODksMzE5OTAsMzE5OTEsMzE5OTMsMzE5OTQsMzE5OTYsMzE5OTcsMzE5OTgsMzE5OTksMzIwMDAsMzIwMDEsMzIwMDIsMzIwMDMsMzIwMDQsMzIwMDUsMzIwMDYsMzIwMDcsMzIwMDgsMzIwMDksMzIwMTEsMzIwMTIsMzIwMTMsMzIwMTQsMzIwMTUsMzIwMTYsMzIwMTcsMzIwMTgsMzIwMTksMzIwMjAsMzIwMjEsMzIwMjIsMzIwMjMsMzIwMjQsMzIwMjUsMzIwMjYsMzIwMjcsMzIwMjgsMzIwMjksMzIwMzAsMzIwMzEsMzIwMzMsMzIwMzUsMzIwMzYsMzIwMzcsMzIwMzgsMzIwNDAsMzIwNDEsMzIwNDIsMzIwNDQsMzIwNDUsMzIwNDYsMzIwNDgsMzIwNDksMzIwNTAsMzIwNTEsMzIwNTIsMzIwNTMsMzIwNTQsMzI5MDgsMzkyNjksMzY4NTcsMjg2MDgsMzU3NDksNDA0ODEsMjMwMjAsMzI0ODksMzI1MjEsMjE1MTMsMjY0OTcsMjY4NDAsMzY3NTMsMzE4MjEsMzg1OTgsMjE0NTAsMjQ2MTMsMzAxNDIsMjc3NjIsMjEzNjMsMjMyNDEsMzI0MjMsMjUzODAsMjA5NjAsMzMwMzQsMjQwNDksMzQwMTUsMjUyMTYsMjA4NjQsMjMzOTUsMjAyMzgsMzEwODUsMjEwNTgsMjQ3NjAsMjc5ODIsMjM0OTIsMjM0OTAsMzU3NDUsMzU3NjAsMjYwODIsMjQ1MjQsMzg0NjksMjI5MzEsMzI0ODcsMzI0MjYsMjIwMjUsMjY1NTEsMjI4NDEsMjAzMzksMjM0NzgsMjExNTIsMzM2MjYsMzkwNTAsMzYxNTgsMzAwMDIsMzgwNzgsMjA1NTEsMzEyOTIsMjAyMTUsMjY1NTAsMzk1NTAsMjMyMzMsMjc1MTYsMzA0MTcsMjIzNjIsMjM1NzQsMzE1NDYsMzgzODgsMjkwMDYsMjA4NjAsMzI5MzcsMzMzOTIsMjI5MDQsMzI1MTYsMzM1NzUsMjY4MTYsMjY2MDQsMzA4OTcsMzA4MzksMjUzMTUsMjU0NDEsMzE2MTYsMjA0NjEsMjEwOTgsMjA5NDMsMzM2MTYsMjcwOTksMzc0OTIsMzYzNDEsMzYxNDUsMzUyNjUsMzgxOTAsMzE2NjEsMjAyMTQsMzIwNTUsMzIwNTYsMzIwNTcsMzIwNTgsMzIwNTksMzIwNjAsMzIwNjEsMzIwNjIsMzIwNjMsMzIwNjQsMzIwNjUsMzIwNjYsMzIwNjcsMzIwNjgsMzIwNjksMzIwNzAsMzIwNzEsMzIwNzIsMzIwNzMsMzIwNzQsMzIwNzUsMzIwNzYsMzIwNzcsMzIwNzgsMzIwNzksMzIwODAsMzIwODEsMzIwODIsMzIwODMsMzIwODQsMzIwODUsMzIwODYsMzIwODcsMzIwODgsMzIwODksMzIwOTAsMzIwOTEsMzIwOTIsMzIwOTMsMzIwOTQsMzIwOTUsMzIwOTYsMzIwOTcsMzIwOTgsMzIwOTksMzIxMDAsMzIxMDEsMzIxMDIsMzIxMDMsMzIxMDQsMzIxMDUsMzIxMDYsMzIxMDcsMzIxMDgsMzIxMDksMzIxMTEsMzIxMTIsMzIxMTMsMzIxMTQsMzIxMTUsMzIxMTYsMzIxMTcsMzIxMTgsMzIxMjAsMzIxMjEsMzIxMjIsMzIxMjMsMzIxMjQsMzIxMjUsMzIxMjYsMzIxMjcsMzIxMjgsMzIxMjksMzIxMzAsMzIxMzEsMzIxMzIsMzIxMzMsMzIxMzQsMzIxMzUsMzIxMzYsMzIxMzcsMzIxMzgsMzIxMzksMzIxNDAsMzIxNDEsMzIxNDIsMzIxNDMsMzIxNDQsMzIxNDUsMzIxNDYsMzIxNDcsMzIxNDgsMzIxNDksMzIxNTAsMzIxNTEsMzIxNTIsMjA1ODEsMzMzMjgsMjEwNzMsMzkyNzksMjgxNzYsMjgyOTMsMjgwNzEsMjQzMTQsMjA3MjUsMjMwMDQsMjM1NTgsMjc5NzQsMjc3NDMsMzAwODYsMzM5MzEsMjY3MjgsMjI4NzAsMzU3NjIsMjEyODAsMzcyMzMsMzg0NzcsMzQxMjEsMjY4OTgsMzA5NzcsMjg5NjYsMzMwMTQsMjAxMzIsMzcwNjYsMjc5NzUsMzk1NTYsMjMwNDcsMjIyMDQsMjU2MDUsMzgxMjgsMzA2OTksMjAzODksMzMwNTAsMjk0MDksMzUyODIsMzkyOTAsMzI1NjQsMzI0NzgsMjExMTksMjU5NDUsMzcyMzcsMzY3MzUsMzY3MzksMjE0ODMsMzEzODIsMjU1ODEsMjU1MDksMzAzNDIsMzEyMjQsMzQ5MDMsMzg0NTQsMjUxMzAsMjExNjMsMzM0MTAsMjY3MDgsMjY0ODAsMjU0NjMsMzA1NzEsMzE0NjksMjc5MDUsMzI0NjcsMzUyOTksMjI5OTIsMjUxMDYsMzQyNDksMzM0NDUsMzAwMjgsMjA1MTEsMjAxNzEsMzAxMTcsMzU4MTksMjM2MjYsMjQwNjIsMzE1NjMsMjYwMjAsMzczMjksMjAxNzAsMjc5NDEsMzUxNjcsMzIwMzksMzgxODIsMjAxNjUsMzU4ODAsMzY4MjcsMzg3NzEsMjYxODcsMzExMDUsMzY4MTcsMjg5MDgsMjgwMjQsMzIxNTMsMzIxNTQsMzIxNTUsMzIxNTYsMzIxNTcsMzIxNTgsMzIxNTksMzIxNjAsMzIxNjEsMzIxNjIsMzIxNjMsMzIxNjQsMzIxNjUsMzIxNjcsMzIxNjgsMzIxNjksMzIxNzAsMzIxNzEsMzIxNzIsMzIxNzMsMzIxNzUsMzIxNzYsMzIxNzcsMzIxNzgsMzIxNzksMzIxODAsMzIxODEsMzIxODIsMzIxODMsMzIxODQsMzIxODUsMzIxODYsMzIxODcsMzIxODgsMzIxODksMzIxOTAsMzIxOTEsMzIxOTIsMzIxOTMsMzIxOTQsMzIxOTUsMzIxOTYsMzIxOTcsMzIxOTgsMzIxOTksMzIyMDAsMzIyMDEsMzIyMDIsMzIyMDMsMzIyMDQsMzIyMDUsMzIyMDYsMzIyMDcsMzIyMDgsMzIyMDksMzIyMTAsMzIyMTEsMzIyMTIsMzIyMTMsMzIyMTQsMzIyMTUsMzIyMTYsMzIyMTcsMzIyMTgsMzIyMTksMzIyMjAsMzIyMjEsMzIyMjIsMzIyMjMsMzIyMjQsMzIyMjUsMzIyMjYsMzIyMjcsMzIyMjgsMzIyMjksMzIyMzAsMzIyMzEsMzIyMzIsMzIyMzMsMzIyMzQsMzIyMzUsMzIyMzYsMzIyMzcsMzIyMzgsMzIyMzksMzIyNDAsMzIyNDEsMzIyNDIsMzIyNDMsMzIyNDQsMzIyNDUsMzIyNDYsMzIyNDcsMzIyNDgsMzIyNDksMzIyNTAsMjM2MTMsMjExNzAsMzM2MDYsMjA4MzQsMzM1NTAsMzA1NTUsMjYyMzAsNDAxMjAsMjAxNDAsMjQ3NzgsMzE5MzQsMzE5MjMsMzI0NjMsMjAxMTcsMzU2ODYsMjYyMjMsMzkwNDgsMzg3NDUsMjI2NTksMjU5NjQsMzgyMzYsMjQ0NTIsMzAxNTMsMzg3NDIsMzE0NTUsMzE0NTQsMjA5MjgsMjg4NDcsMzEzODQsMjU1NzgsMzEzNTAsMzI0MTYsMjk1OTAsMzg4OTMsMjAwMzcsMjg3OTIsMjAwNjEsMzcyMDIsMjE0MTcsMjU5MzcsMjYwODcsMzMyNzYsMzMyODUsMjE2NDYsMjM2MDEsMzAxMDYsMzg4MTYsMjUzMDQsMjk0MDEsMzAxNDEsMjM2MjEsMzk1NDUsMzM3MzgsMjM2MTYsMjE2MzIsMzA2OTcsMjAwMzAsMjc4MjIsMzI4NTgsMjUyOTgsMjU0NTQsMjQwNDAsMjA4NTUsMzYzMTcsMzYzODIsMzgxOTEsMjA0NjUsMjE0NzcsMjQ4MDcsMjg4NDQsMjEwOTUsMjU0MjQsNDA1MTUsMjMwNzEsMjA1MTgsMzA1MTksMjEzNjcsMzI0ODIsMjU3MzMsMjU4OTksMjUyMjUsMjU0OTYsMjA1MDAsMjkyMzcsMzUyNzMsMjA5MTUsMzU3NzYsMzI0NzcsMjIzNDMsMzM3NDAsMzgwNTUsMjA4OTEsMjE1MzEsMjM4MDMsMzIyNTEsMzIyNTIsMzIyNTMsMzIyNTQsMzIyNTUsMzIyNTYsMzIyNTcsMzIyNTgsMzIyNTksMzIyNjAsMzIyNjEsMzIyNjIsMzIyNjMsMzIyNjQsMzIyNjUsMzIyNjYsMzIyNjcsMzIyNjgsMzIyNjksMzIyNzAsMzIyNzEsMzIyNzIsMzIyNzMsMzIyNzQsMzIyNzUsMzIyNzYsMzIyNzcsMzIyNzgsMzIyNzksMzIyODAsMzIyODEsMzIyODIsMzIyODMsMzIyODQsMzIyODUsMzIyODYsMzIyODcsMzIyODgsMzIyODksMzIyOTAsMzIyOTEsMzIyOTIsMzIyOTMsMzIyOTQsMzIyOTUsMzIyOTYsMzIyOTcsMzIyOTgsMzIyOTksMzIzMDAsMzIzMDEsMzIzMDIsMzIzMDMsMzIzMDQsMzIzMDUsMzIzMDYsMzIzMDcsMzIzMDgsMzIzMDksMzIzMTAsMzIzMTEsMzIzMTIsMzIzMTMsMzIzMTQsMzIzMTYsMzIzMTcsMzIzMTgsMzIzMTksMzIzMjAsMzIzMjIsMzIzMjMsMzIzMjQsMzIzMjUsMzIzMjYsMzIzMjgsMzIzMjksMzIzMzAsMzIzMzEsMzIzMzIsMzIzMzMsMzIzMzQsMzIzMzUsMzIzMzYsMzIzMzcsMzIzMzgsMzIzMzksMzIzNDAsMzIzNDEsMzIzNDIsMzIzNDMsMzIzNDQsMzIzNDUsMzIzNDYsMzIzNDcsMzIzNDgsMzIzNDksMjA0MjYsMzE0NTksMjc5OTQsMzcwODksMzk1NjcsMjE4ODgsMjE2NTQsMjEzNDUsMjE2NzksMjQzMjAsMjU1NzcsMjY5OTksMjA5NzUsMjQ5MzYsMjEwMDIsMjI1NzAsMjEyMDgsMjIzNTAsMzA3MzMsMzA0NzUsMjQyNDcsMjQ5NTEsMzE5NjgsMjUxNzksMjUyMzksMjAxMzAsMjg4MjEsMzI3NzEsMjUzMzUsMjg5MDAsMzg3NTIsMjIzOTEsMzM0OTksMjY2MDcsMjY4NjksMzA5MzMsMzkwNjMsMzExODUsMjI3NzEsMjE2ODMsMjE0ODcsMjgyMTIsMjA4MTEsMjEwNTEsMjM0NTgsMzU4MzgsMzI5NDMsMjE4MjcsMjI0MzgsMjQ2OTEsMjIzNTMsMjE1NDksMzEzNTQsMjQ2NTYsMjMzODAsMjU1MTEsMjUyNDgsMjE0NzUsMjUxODcsMjM0OTUsMjY1NDMsMjE3NDEsMzEzOTEsMzM1MTAsMzcyMzksMjQyMTEsMzUwNDQsMjI4NDAsMjI0NDYsMjUzNTgsMzYzMjgsMzMwMDcsMjIzNTksMzE2MDcsMjAzOTMsMjQ1NTUsMjM0ODUsMjc0NTQsMjEyODEsMzE1NjgsMjkzNzgsMjY2OTQsMzA3MTksMzA1MTgsMjYxMDMsMjA5MTcsMjAxMTEsMzA0MjAsMjM3NDMsMzEzOTcsMzM5MDksMjI4NjIsMzk3NDUsMjA2MDgsMzIzNTAsMzIzNTEsMzIzNTIsMzIzNTMsMzIzNTQsMzIzNTUsMzIzNTYsMzIzNTcsMzIzNTgsMzIzNTksMzIzNjAsMzIzNjEsMzIzNjIsMzIzNjMsMzIzNjQsMzIzNjUsMzIzNjYsMzIzNjcsMzIzNjgsMzIzNjksMzIzNzAsMzIzNzEsMzIzNzIsMzIzNzMsMzIzNzQsMzIzNzUsMzIzNzYsMzIzNzcsMzIzNzgsMzIzNzksMzIzODAsMzIzODEsMzIzODIsMzIzODMsMzIzODQsMzIzODUsMzIzODcsMzIzODgsMzIzODksMzIzOTAsMzIzOTEsMzIzOTIsMzIzOTMsMzIzOTQsMzIzOTUsMzIzOTYsMzIzOTcsMzIzOTgsMzIzOTksMzI0MDAsMzI0MDEsMzI0MDIsMzI0MDMsMzI0MDQsMzI0MDUsMzI0MDYsMzI0MDcsMzI0MDgsMzI0MDksMzI0MTAsMzI0MTIsMzI0MTMsMzI0MTQsMzI0MzAsMzI0MzYsMzI0NDMsMzI0NDQsMzI0NzAsMzI0ODQsMzI0OTIsMzI1MDUsMzI1MjIsMzI1MjgsMzI1NDIsMzI1NjcsMzI1NjksMzI1NzEsMzI1NzIsMzI1NzMsMzI1NzQsMzI1NzUsMzI1NzYsMzI1NzcsMzI1NzksMzI1ODIsMzI1ODMsMzI1ODQsMzI1ODUsMzI1ODYsMzI1ODcsMzI1ODgsMzI1ODksMzI1OTAsMzI1OTEsMzI1OTQsMzI1OTUsMzkzMDQsMjQ4NzEsMjgyOTEsMjIzNzIsMjYxMTgsMjU0MTQsMjIyNTYsMjUzMjQsMjUxOTMsMjQyNzUsMzg0MjAsMjI0MDMsMjUyODksMjE4OTUsMzQ1OTMsMzMwOTgsMzY3NzEsMjE4NjIsMzM3MTMsMjY0NjksMzYxODIsMzQwMTMsMjMxNDYsMjY2MzksMjUzMTgsMzE3MjYsMzg0MTcsMjA4NDgsMjg1NzIsMzU4ODgsMjU1OTcsMzUyNzIsMjUwNDIsMzI1MTgsMjg4NjYsMjgzODksMjk3MDEsMjcwMjgsMjk0MzYsMjQyNjYsMzcwNzAsMjYzOTEsMjgwMTAsMjU0MzgsMjExNzEsMjkyODIsMzI3NjksMjAzMzIsMjMwMTMsMzcyMjYsMjg4ODksMjgwNjEsMjEyMDIsMjAwNDgsMzg2NDcsMzgyNTMsMzQxNzQsMzA5MjIsMzIwNDcsMjA3NjksMjI0MTgsMjU3OTQsMzI5MDcsMzE4NjcsMjc4ODIsMjY4NjUsMjY5NzQsMjA5MTksMjE0MDAsMjY3OTIsMjkzMTMsNDA2NTQsMzE3MjksMjk0MzIsMzExNjMsMjg0MzUsMjk3MDIsMjY0NDYsMzczMjQsNDAxMDAsMzEwMzYsMzM2NzMsMzM2MjAsMjE1MTksMjY2NDcsMjAwMjksMjEzODUsMjExNjksMzA3ODIsMjEzODIsMjEwMzMsMjA2MTYsMjAzNjMsMjA0MzIsMzI1OTgsMzI2MDEsMzI2MDMsMzI2MDQsMzI2MDUsMzI2MDYsMzI2MDgsMzI2MTEsMzI2MTIsMzI2MTMsMzI2MTQsMzI2MTUsMzI2MTksMzI2MjAsMzI2MjEsMzI2MjMsMzI2MjQsMzI2MjcsMzI2MjksMzI2MzAsMzI2MzEsMzI2MzIsMzI2MzQsMzI2MzUsMzI2MzYsMzI2MzcsMzI2MzksMzI2NDAsMzI2NDIsMzI2NDMsMzI2NDQsMzI2NDUsMzI2NDYsMzI2NDcsMzI2NDgsMzI2NDksMzI2NTEsMzI2NTMsMzI2NTUsMzI2NTYsMzI2NTcsMzI2NTgsMzI2NTksMzI2NjEsMzI2NjIsMzI2NjMsMzI2NjQsMzI2NjUsMzI2NjcsMzI2NjgsMzI2NzIsMzI2NzQsMzI2NzUsMzI2NzcsMzI2NzgsMzI2ODAsMzI2ODEsMzI2ODIsMzI2ODMsMzI2ODQsMzI2ODUsMzI2ODYsMzI2ODksMzI2OTEsMzI2OTIsMzI2OTMsMzI2OTQsMzI2OTUsMzI2OTgsMzI2OTksMzI3MDIsMzI3MDQsMzI3MDYsMzI3MDcsMzI3MDgsMzI3MTAsMzI3MTEsMzI3MTIsMzI3MTMsMzI3MTUsMzI3MTcsMzI3MTksMzI3MjAsMzI3MjEsMzI3MjIsMzI3MjMsMzI3MjYsMzI3MjcsMzI3MjksMzI3MzAsMzI3MzEsMzI3MzIsMzI3MzMsMzI3MzQsMzI3MzgsMzI3MzksMzAxNzgsMzE0MzUsMzE4OTAsMjc4MTMsMzg1ODIsMjExNDcsMjk4MjcsMjE3MzcsMjA0NTcsMzI4NTIsMzM3MTQsMzY4MzAsMzgyNTYsMjQyNjUsMjQ2MDQsMjgwNjMsMjQwODgsMjU5NDcsMzMwODAsMzgxNDIsMjQ2NTEsMjg4NjAsMzI0NTEsMzE5MTgsMjA5MzcsMjY3NTMsMzE5MjEsMzMzOTEsMjAwMDQsMzY3NDIsMzczMjcsMjYyMzgsMjAxNDIsMzU4NDUsMjU3NjksMzI4NDIsMjA2OTgsMzAxMDMsMjkxMzQsMjM1MjUsMzY3OTcsMjg1MTgsMjAxMDIsMjU3MzAsMzgyNDMsMjQyNzgsMjYwMDksMjEwMTUsMzUwMTAsMjg4NzIsMjExNTUsMjk0NTQsMjk3NDcsMjY1MTksMzA5NjcsMzg2NzgsMjAwMjAsMzcwNTEsNDAxNTgsMjgxMDcsMjA5NTUsMzYxNjEsMjE1MzMsMjUyOTQsMjk2MTgsMzM3NzcsMzg2NDYsNDA4MzYsMzgwODMsMjAyNzgsMzI2NjYsMjA5NDAsMjg3ODksMzg1MTcsMjM3MjUsMzkwNDYsMjE0NzgsMjAxOTYsMjgzMTYsMjk3MDUsMjcwNjAsMzA4MjcsMzkzMTEsMzAwNDEsMjEwMTYsMzAyNDQsMjc5NjksMjY2MTEsMjA4NDUsNDA4NTcsMzI4NDMsMjE2NTcsMzE1NDgsMzE0MjMsMzI3NDAsMzI3NDMsMzI3NDQsMzI3NDYsMzI3NDcsMzI3NDgsMzI3NDksMzI3NTEsMzI3NTQsMzI3NTYsMzI3NTcsMzI3NTgsMzI3NTksMzI3NjAsMzI3NjEsMzI3NjIsMzI3NjUsMzI3NjYsMzI3NjcsMzI3NzAsMzI3NzUsMzI3NzYsMzI3NzcsMzI3NzgsMzI3ODIsMzI3ODMsMzI3ODUsMzI3ODcsMzI3OTQsMzI3OTUsMzI3OTcsMzI3OTgsMzI3OTksMzI4MDEsMzI4MDMsMzI4MDQsMzI4MTEsMzI4MTIsMzI4MTMsMzI4MTQsMzI4MTUsMzI4MTYsMzI4MTgsMzI4MjAsMzI4MjUsMzI4MjYsMzI4MjgsMzI4MzAsMzI4MzIsMzI4MzMsMzI4MzYsMzI4MzcsMzI4MzksMzI4NDAsMzI4NDEsMzI4NDYsMzI4NDcsMzI4NDgsMzI4NDksMzI4NTEsMzI4NTMsMzI4NTQsMzI4NTUsMzI4NTcsMzI4NTksMzI4NjAsMzI4NjEsMzI4NjIsMzI4NjMsMzI4NjQsMzI4NjUsMzI4NjYsMzI4NjcsMzI4NjgsMzI4NjksMzI4NzAsMzI4NzEsMzI4NzIsMzI4NzUsMzI4NzYsMzI4NzcsMzI4NzgsMzI4NzksMzI4ODAsMzI4ODIsMzI4ODMsMzI4ODQsMzI4ODUsMzI4ODYsMzI4ODcsMzI4ODgsMzI4ODksMzI4OTAsMzI4OTEsMzI4OTIsMzI4OTMsMzg1MzQsMjI0MDQsMjUzMTQsMzg0NzEsMjcwMDQsMjMwNDQsMjU2MDIsMzE2OTksMjg0MzEsMzg0NzUsMzM0NDYsMjEzNDYsMzkwNDUsMjQyMDgsMjg4MDksMjU1MjMsMjEzNDgsMzQzODMsNDAwNjUsNDA1OTUsMzA4NjAsMzg3MDYsMzYzMzUsMzYxNjIsNDA1NzUsMjg1MTAsMzExMDgsMjQ0MDUsMzg0NzAsMjUxMzQsMzk1NDAsMjE1MjUsMzgxMDksMjAzODcsMjYwNTMsMjM2NTMsMjM2NDksMzI1MzMsMzQzODUsMjc2OTUsMjQ0NTksMjk1NzUsMjgzODgsMzI1MTEsMjM3ODIsMjUzNzEsMjM0MDIsMjgzOTAsMjEzNjUsMjAwODEsMjU1MDQsMzAwNTMsMjUyNDksMzY3MTgsMjAyNjIsMjAxNzcsMjc4MTQsMzI0MzgsMzU3NzAsMzM4MjEsMzQ3NDYsMzI1OTksMzY5MjMsMzgxNzksMzE2NTcsMzk1ODUsMzUwNjQsMzM4NTMsMjc5MzEsMzk1NTgsMzI0NzYsMjI5MjAsNDA2MzUsMjk1OTUsMzA3MjEsMzQ0MzQsMzk1MzIsMzk1NTQsMjIwNDMsMjE1MjcsMjI0NzUsMjAwODAsNDA2MTQsMjEzMzQsMzY4MDgsMzMwMzMsMzA2MTAsMzkzMTQsMzQ1NDIsMjgzODUsMzQwNjcsMjYzNjQsMjQ5MzAsMjg0NTksMzI4OTQsMzI4OTcsMzI4OTgsMzI5MDEsMzI5MDQsMzI5MDYsMzI5MDksMzI5MTAsMzI5MTEsMzI5MTIsMzI5MTMsMzI5MTQsMzI5MTYsMzI5MTcsMzI5MTksMzI5MjEsMzI5MjYsMzI5MzEsMzI5MzQsMzI5MzUsMzI5MzYsMzI5NDAsMzI5NDQsMzI5NDcsMzI5NDksMzI5NTAsMzI5NTIsMzI5NTMsMzI5NTUsMzI5NjUsMzI5NjcsMzI5NjgsMzI5NjksMzI5NzAsMzI5NzEsMzI5NzUsMzI5NzYsMzI5NzcsMzI5NzgsMzI5NzksMzI5ODAsMzI5ODEsMzI5ODQsMzI5OTEsMzI5OTIsMzI5OTQsMzI5OTUsMzI5OTgsMzMwMDYsMzMwMTMsMzMwMTUsMzMwMTcsMzMwMTksMzMwMjIsMzMwMjMsMzMwMjQsMzMwMjUsMzMwMjcsMzMwMjgsMzMwMjksMzMwMzEsMzMwMzIsMzMwMzUsMzMwMzYsMzMwNDUsMzMwNDcsMzMwNDksMzMwNTEsMzMwNTIsMzMwNTMsMzMwNTUsMzMwNTYsMzMwNTcsMzMwNTgsMzMwNTksMzMwNjAsMzMwNjEsMzMwNjIsMzMwNjMsMzMwNjQsMzMwNjUsMzMwNjYsMzMwNjcsMzMwNjksMzMwNzAsMzMwNzIsMzMwNzUsMzMwNzYsMzMwNzcsMzMwNzksMzMwODEsMzMwODIsMzMwODMsMzMwODQsMzMwODUsMzMwODcsMzU4ODEsMzM0MjYsMzM1NzksMzA0NTAsMjc2NjcsMjQ1MzcsMzM3MjUsMjk0ODMsMzM1NDEsMzgxNzAsMjc2MTEsMzA2ODMsMzgwODYsMjEzNTksMzM1MzgsMjA4ODIsMjQxMjUsMzU5ODAsMzYxNTIsMjAwNDAsMjk2MTEsMjY1MjIsMjY3NTcsMzcyMzgsMzg2NjUsMjkwMjgsMjc4MDksMzA0NzMsMjMxODYsMzgyMDksMjc1OTksMzI2NTQsMjYxNTEsMjM1MDQsMjI5NjksMjMxOTQsMzgzNzYsMzgzOTEsMjAyMDQsMzM4MDQsMzM5NDUsMjczMDgsMzA0MzEsMzgxOTIsMjk0NjcsMjY3OTAsMjMzOTEsMzA1MTEsMzcyNzQsMzg3NTMsMzE5NjQsMzY4NTUsMzU4NjgsMjQzNTcsMzE4NTksMzExOTIsMzUyNjksMjc4NTIsMzQ1ODgsMjM0OTQsMjQxMzAsMjY4MjUsMzA0OTYsMzI1MDEsMjA4ODUsMjA4MTMsMjExOTMsMjMwODEsMzI1MTcsMzg3NTQsMzM0OTUsMjU1NTEsMzA1OTYsMzQyNTYsMzExODYsMjgyMTgsMjQyMTcsMjI5MzcsMzQwNjUsMjg3ODEsMjc2NjUsMjUyNzksMzAzOTksMjU5MzUsMjQ3NTEsMzgzOTcsMjYxMjYsMzQ3MTksNDA0ODMsMzgxMjUsMjE1MTcsMjE2MjksMzU4ODQsMjU3MjAsMzMwODgsMzMwODksMzMwOTAsMzMwOTEsMzMwOTIsMzMwOTMsMzMwOTUsMzMwOTcsMzMxMDEsMzMxMDIsMzMxMDMsMzMxMDYsMzMxMTAsMzMxMTEsMzMxMTIsMzMxMTUsMzMxMTYsMzMxMTcsMzMxMTgsMzMxMTksMzMxMjEsMzMxMjIsMzMxMjMsMzMxMjQsMzMxMjYsMzMxMjgsMzMxMzAsMzMxMzEsMzMxMzIsMzMxMzUsMzMxMzgsMzMxMzksMzMxNDEsMzMxNDIsMzMxNDMsMzMxNDQsMzMxNTMsMzMxNTUsMzMxNTYsMzMxNTcsMzMxNTgsMzMxNTksMzMxNjEsMzMxNjMsMzMxNjQsMzMxNjUsMzMxNjYsMzMxNjgsMzMxNzAsMzMxNzEsMzMxNzIsMzMxNzMsMzMxNzQsMzMxNzUsMzMxNzcsMzMxNzgsMzMxODIsMzMxODMsMzMxODQsMzMxODUsMzMxODYsMzMxODgsMzMxODksMzMxOTEsMzMxOTMsMzMxOTUsMzMxOTYsMzMxOTcsMzMxOTgsMzMxOTksMzMyMDAsMzMyMDEsMzMyMDIsMzMyMDQsMzMyMDUsMzMyMDYsMzMyMDcsMzMyMDgsMzMyMDksMzMyMTIsMzMyMTMsMzMyMTQsMzMyMTUsMzMyMjAsMzMyMjEsMzMyMjMsMzMyMjQsMzMyMjUsMzMyMjcsMzMyMjksMzMyMzAsMzMyMzEsMzMyMzIsMzMyMzMsMzMyMzQsMzMyMzUsMjU3MjEsMzQzMjEsMjcxNjksMzMxODAsMzA5NTIsMjU3MDUsMzk3NjQsMjUyNzMsMjY0MTEsMzM3MDcsMjI2OTYsNDA2NjQsMjc4MTksMjg0NDgsMjM1MTgsMzg0NzYsMzU4NTEsMjkyNzksMjY1NzYsMjUyODcsMjkyODEsMjAxMzcsMjI5ODIsMjc1OTcsMjI2NzUsMjYyODYsMjQxNDksMjEyMTUsMjQ5MTcsMjY0MDgsMzA0NDYsMzA1NjYsMjkyODcsMzEzMDIsMjUzNDMsMjE3MzgsMjE1ODQsMzgwNDgsMzcwMjcsMjMwNjgsMzI0MzUsMjc2NzAsMjAwMzUsMjI5MDIsMzI3ODQsMjI4NTYsMjEzMzUsMzAwMDcsMzg1OTAsMjIyMTgsMjUzNzYsMzMwNDEsMjQ3MDAsMzgzOTMsMjgxMTgsMjE2MDIsMzkyOTcsMjA4NjksMjMyNzMsMzMwMjEsMjI5NTgsMzg2NzUsMjA1MjIsMjc4NzcsMjM2MTIsMjUzMTEsMjAzMjAsMjEzMTEsMzMxNDcsMzY4NzAsMjgzNDYsMzQwOTEsMjUyODgsMjQxODAsMzA5MTAsMjU3ODEsMjU0NjcsMjQ1NjUsMjMwNjQsMzcyNDcsNDA0NzksMjM2MTUsMjU0MjMsMzI4MzQsMjM0MjEsMjE4NzAsMzgyMTgsMzgyMjEsMjgwMzcsMjQ3NDQsMjY1OTIsMjk0MDYsMjA5NTcsMjM0MjUsMzMyMzYsMzMyMzcsMzMyMzgsMzMyMzksMzMyNDAsMzMyNDEsMzMyNDIsMzMyNDMsMzMyNDQsMzMyNDUsMzMyNDYsMzMyNDcsMzMyNDgsMzMyNDksMzMyNTAsMzMyNTIsMzMyNTMsMzMyNTQsMzMyNTYsMzMyNTcsMzMyNTksMzMyNjIsMzMyNjMsMzMyNjQsMzMyNjUsMzMyNjYsMzMyNjksMzMyNzAsMzMyNzEsMzMyNzIsMzMyNzMsMzMyNzQsMzMyNzcsMzMyNzksMzMyODMsMzMyODcsMzMyODgsMzMyODksMzMyOTAsMzMyOTEsMzMyOTQsMzMyOTUsMzMyOTcsMzMyOTksMzMzMDEsMzMzMDIsMzMzMDMsMzMzMDQsMzMzMDUsMzMzMDYsMzMzMDksMzMzMTIsMzMzMTYsMzMzMTcsMzMzMTgsMzMzMTksMzMzMjEsMzMzMjYsMzMzMzAsMzMzMzgsMzMzNDAsMzMzNDEsMzMzNDMsMzMzNDQsMzMzNDUsMzMzNDYsMzMzNDcsMzMzNDksMzMzNTAsMzMzNTIsMzMzNTQsMzMzNTYsMzMzNTcsMzMzNTgsMzMzNjAsMzMzNjEsMzMzNjIsMzMzNjMsMzMzNjQsMzMzNjUsMzMzNjYsMzMzNjcsMzMzNjksMzMzNzEsMzMzNzIsMzMzNzMsMzMzNzQsMzMzNzYsMzMzNzcsMzMzNzgsMzMzNzksMzMzODAsMzMzODEsMzMzODIsMzMzODMsMzMzODUsMjUzMTksMjc4NzAsMjkyNzUsMjUxOTcsMzgwNjIsMzI0NDUsMzMwNDMsMjc5ODcsMjA4OTIsMjQzMjQsMjI5MDAsMjExNjIsMjQ1OTQsMjI4OTksMjYyNjIsMzQzODQsMzAxMTEsMjUzODYsMjUwNjIsMzE5ODMsMzU4MzQsMjE3MzQsMjc0MzEsNDA0ODUsMjc1NzIsMzQyNjEsMjE1ODksMjA1OTgsMjc4MTIsMjE4NjYsMzYyNzYsMjkyMjgsMjQwODUsMjQ1OTcsMjk3NTAsMjUyOTMsMjU0OTAsMjkyNjAsMjQ0NzIsMjgyMjcsMjc5NjYsMjU4NTYsMjg1MDQsMzA0MjQsMzA5MjgsMzA0NjAsMzAwMzYsMjEwMjgsMjE0NjcsMjAwNTEsMjQyMjIsMjYwNDksMzI4MTAsMzI5ODIsMjUyNDMsMjE2MzgsMjEwMzIsMjg4NDYsMzQ5NTcsMzYzMDUsMjc4NzMsMjE2MjQsMzI5ODYsMjI1MjEsMzUwNjAsMzYxODAsMzg1MDYsMzcxOTcsMjAzMjksMjc4MDMsMjE5NDMsMzA0MDYsMzA3NjgsMjUyNTYsMjg5MjEsMjg1NTgsMjQ0MjksMzQwMjgsMjY4NDIsMzA4NDQsMzE3MzUsMzMxOTIsMjYzNzksNDA1MjcsMjU0NDcsMzA4OTYsMjIzODMsMzA3MzgsMzg3MTMsMjUyMDksMjUyNTksMjExMjgsMjk3NDksMjc2MDcsMzMzODYsMzMzODcsMzMzODgsMzMzODksMzMzOTMsMzMzOTcsMzMzOTgsMzMzOTksMzM0MDAsMzM0MDMsMzM0MDQsMzM0MDgsMzM0MDksMzM0MTEsMzM0MTMsMzM0MTQsMzM0MTUsMzM0MTcsMzM0MjAsMzM0MjQsMzM0MjcsMzM0MjgsMzM0MjksMzM0MzAsMzM0MzQsMzM0MzUsMzM0MzgsMzM0NDAsMzM0NDIsMzM0NDMsMzM0NDcsMzM0NTgsMzM0NjEsMzM0NjIsMzM0NjYsMzM0NjcsMzM0NjgsMzM0NzEsMzM0NzIsMzM0NzQsMzM0NzUsMzM0NzcsMzM0NzgsMzM0ODEsMzM0ODgsMzM0OTQsMzM0OTcsMzM0OTgsMzM1MDEsMzM1MDYsMzM1MTEsMzM1MTIsMzM1MTMsMzM1MTQsMzM1MTYsMzM1MTcsMzM1MTgsMzM1MjAsMzM1MjIsMzM1MjMsMzM1MjUsMzM1MjYsMzM1MjgsMzM1MzAsMzM1MzIsMzM1MzMsMzM1MzQsMzM1MzUsMzM1MzYsMzM1NDYsMzM1NDcsMzM1NDksMzM1NTIsMzM1NTQsMzM1NTUsMzM1NTgsMzM1NjAsMzM1NjEsMzM1NjUsMzM1NjYsMzM1NjcsMzM1NjgsMzM1NjksMzM1NzAsMzM1NzEsMzM1NzIsMzM1NzMsMzM1NzQsMzM1NzcsMzM1NzgsMzM1ODIsMzM1ODQsMzM1ODYsMzM1OTEsMzM1OTUsMzM1OTcsMjE4NjAsMzMwODYsMzAxMzAsMzAzODIsMjEzMDUsMzAxNzQsMjA3MzEsMjM2MTcsMzU2OTIsMzE2ODcsMjA1NTksMjkyNTUsMzk1NzUsMzkxMjgsMjg0MTgsMjk5MjIsMzEwODAsMjU3MzUsMzA2MjksMjUzNDAsMzkwNTcsMzYxMzksMjE2OTcsMzI4NTYsMjAwNTAsMjIzNzgsMzM1MjksMzM4MDUsMjQxNzksMjA5NzMsMjk5NDIsMzU3ODAsMjM2MzEsMjIzNjksMjc5MDAsMzkwNDcsMjMxMTAsMzA3NzIsMzk3NDgsMzY4NDMsMzE4OTMsMjEwNzgsMjUxNjksMzgxMzgsMjAxNjYsMzM2NzAsMzM4ODksMzM3NjksMzM5NzAsMjI0ODQsMjY0MjAsMjIyNzUsMjYyMjIsMjgwMDYsMzU4ODksMjYzMzMsMjg2ODksMjYzOTksMjc0NTAsMjY2NDYsMjUxMTQsMjI5NzEsMTk5NzEsMjA5MzIsMjg0MjIsMjY1NzgsMjc3OTEsMjA4NTQsMjY4MjcsMjI4NTUsMjc0OTUsMzAwNTQsMjM4MjIsMzMwNDAsNDA3ODQsMjYwNzEsMzEwNDgsMzEwNDEsMzk1NjksMzYyMTUsMjM2ODIsMjAwNjIsMjAyMjUsMjE1NTEsMjI4NjUsMzA3MzIsMjIxMjAsMjc2NjgsMzY4MDQsMjQzMjMsMjc3NzMsMjc4NzUsMzU3NTUsMjU0ODgsMzM1OTgsMzM1OTksMzM2MDEsMzM2MDIsMzM2MDQsMzM2MDUsMzM2MDgsMzM2MTAsMzM2MTEsMzM2MTIsMzM2MTMsMzM2MTQsMzM2MTksMzM2MjEsMzM2MjIsMzM2MjMsMzM2MjQsMzM2MjUsMzM2MjksMzM2MzQsMzM2NDgsMzM2NDksMzM2NTAsMzM2NTEsMzM2NTIsMzM2NTMsMzM2NTQsMzM2NTcsMzM2NTgsMzM2NjIsMzM2NjMsMzM2NjQsMzM2NjUsMzM2NjYsMzM2NjcsMzM2NjgsMzM2NzEsMzM2NzIsMzM2NzQsMzM2NzUsMzM2NzYsMzM2NzcsMzM2NzksMzM2ODAsMzM2ODEsMzM2ODQsMzM2ODUsMzM2ODYsMzM2ODcsMzM2ODksMzM2OTAsMzM2OTMsMzM2OTUsMzM2OTcsMzM2OTgsMzM2OTksMzM3MDAsMzM3MDEsMzM3MDIsMzM3MDMsMzM3MDgsMzM3MDksMzM3MTAsMzM3MTEsMzM3MTcsMzM3MjMsMzM3MjYsMzM3MjcsMzM3MzAsMzM3MzEsMzM3MzIsMzM3MzQsMzM3MzYsMzM3MzcsMzM3MzksMzM3NDEsMzM3NDIsMzM3NDQsMzM3NDUsMzM3NDYsMzM3NDcsMzM3NDksMzM3NTEsMzM3NTMsMzM3NTQsMzM3NTUsMzM3NTgsMzM3NjIsMzM3NjMsMzM3NjQsMzM3NjYsMzM3NjcsMzM3NjgsMzM3NzEsMzM3NzIsMzM3NzMsMjQ2ODgsMjc5NjUsMjkzMDEsMjUxOTAsMzgwMzAsMzgwODUsMjEzMTUsMzY4MDEsMzE2MTQsMjAxOTEsMzU4NzgsMjAwOTQsNDA2NjAsMzgwNjUsMzgwNjcsMjEwNjksMjg1MDgsMzY5NjMsMjc5NzMsMzU4OTIsMjI1NDUsMjM4ODQsMjc0MjQsMjc0NjUsMjY1MzgsMjE1OTUsMzMxMDgsMzI2NTIsMjI2ODEsMzQxMDMsMjQzNzgsMjUyNTAsMjcyMDcsMzgyMDEsMjU5NzAsMjQ3MDgsMjY3MjUsMzA2MzEsMjAwNTIsMjAzOTIsMjQwMzksMzg4MDgsMjU3NzIsMzI3MjgsMjM3ODksMjA0MzEsMzEzNzMsMjA5OTksMzM1NDAsMTk5ODgsMjQ2MjMsMzEzNjMsMzgwNTQsMjA0MDUsMjAxNDYsMzEyMDYsMjk3NDgsMjEyMjAsMzM0NjUsMjU4MTAsMzExNjUsMjM1MTcsMjc3NzcsMzg3MzgsMzY3MzEsMjc2ODIsMjA1NDIsMjEzNzUsMjgxNjUsMjU4MDYsMjYyMjgsMjc2OTYsMjQ3NzMsMzkwMzEsMzU4MzEsMjQxOTgsMjk3NTYsMzEzNTEsMzExNzksMTk5OTIsMzcwNDEsMjk2OTksMjc3MTQsMjIyMzQsMzcxOTUsMjc4NDUsMzYyMzUsMjEzMDYsMzQ1MDIsMjYzNTQsMzY1MjcsMjM2MjQsMzk1MzcsMjgxOTIsMzM3NzQsMzM3NzUsMzM3NzksMzM3ODAsMzM3ODEsMzM3ODIsMzM3ODMsMzM3ODYsMzM3ODcsMzM3ODgsMzM3OTAsMzM3OTEsMzM3OTIsMzM3OTQsMzM3OTcsMzM3OTksMzM4MDAsMzM4MDEsMzM4MDIsMzM4MDgsMzM4MTAsMzM4MTEsMzM4MTIsMzM4MTMsMzM4MTQsMzM4MTUsMzM4MTcsMzM4MTgsMzM4MTksMzM4MjIsMzM4MjMsMzM4MjQsMzM4MjUsMzM4MjYsMzM4MjcsMzM4MzMsMzM4MzQsMzM4MzUsMzM4MzYsMzM4MzcsMzM4MzgsMzM4MzksMzM4NDAsMzM4NDIsMzM4NDMsMzM4NDQsMzM4NDUsMzM4NDYsMzM4NDcsMzM4NDksMzM4NTAsMzM4NTEsMzM4NTQsMzM4NTUsMzM4NTYsMzM4NTcsMzM4NTgsMzM4NTksMzM4NjAsMzM4NjEsMzM4NjMsMzM4NjQsMzM4NjUsMzM4NjYsMzM4NjcsMzM4NjgsMzM4NjksMzM4NzAsMzM4NzEsMzM4NzIsMzM4NzQsMzM4NzUsMzM4NzYsMzM4NzcsMzM4NzgsMzM4ODAsMzM4ODUsMzM4ODYsMzM4ODcsMzM4ODgsMzM4OTAsMzM4OTIsMzM4OTMsMzM4OTQsMzM4OTUsMzM4OTYsMzM4OTgsMzM5MDIsMzM5MDMsMzM5MDQsMzM5MDYsMzM5MDgsMzM5MTEsMzM5MTMsMzM5MTUsMzM5MTYsMjE0NjIsMjMwOTQsNDA4NDMsMzYyNTksMjE0MzUsMjIyODAsMzkwNzksMjY0MzUsMzcyNzUsMjc4NDksMjA4NDAsMzAxNTQsMjUzMzEsMjkzNTYsMjEwNDgsMjExNDksMzI1NzAsMjg4MjAsMzAyNjQsMjEzNjQsNDA1MjIsMjcwNjMsMzA4MzAsMzg1OTIsMzUwMzMsMzI2NzYsMjg5ODIsMjkxMjMsMjA4NzMsMjY1NzksMjk5MjQsMjI3NTYsMjU4ODAsMjIxOTksMzU3NTMsMzkyODYsMjUyMDAsMzI0NjksMjQ4MjUsMjg5MDksMjI3NjQsMjAxNjEsMjAxNTQsMjQ1MjUsMzg4ODcsMjAyMTksMzU3NDgsMjA5OTUsMjI5MjIsMzI0MjcsMjUxNzIsMjAxNzMsMjYwODUsMjUxMDIsMzM1OTIsMzM5OTMsMzM2MzUsMzQ3MDEsMjkwNzYsMjgzNDIsMjM0ODEsMzI0NjYsMjA4ODcsMjU1NDUsMjY1ODAsMzI5MDUsMzM1OTMsMzQ4MzcsMjA3NTQsMjM0MTgsMjI5MTQsMzY3ODUsMjAwODMsMjc3NDEsMjA4MzcsMzUxMDksMzY3MTksMzg0NDYsMzQxMjIsMjk3OTAsMzgxNjAsMzgzODQsMjgwNzAsMzM1MDksMjQzNjksMjU3NDYsMjc5MjIsMzM4MzIsMzMxMzQsNDAxMzEsMjI2MjIsMzYxODcsMTk5NzcsMjE0NDEsMzM5MTcsMzM5MTgsMzM5MTksMzM5MjAsMzM5MjEsMzM5MjMsMzM5MjQsMzM5MjUsMzM5MjYsMzM5MzAsMzM5MzMsMzM5MzUsMzM5MzYsMzM5MzcsMzM5MzgsMzM5MzksMzM5NDAsMzM5NDEsMzM5NDIsMzM5NDQsMzM5NDYsMzM5NDcsMzM5NDksMzM5NTAsMzM5NTEsMzM5NTIsMzM5NTQsMzM5NTUsMzM5NTYsMzM5NTcsMzM5NTgsMzM5NTksMzM5NjAsMzM5NjEsMzM5NjIsMzM5NjMsMzM5NjQsMzM5NjUsMzM5NjYsMzM5NjgsMzM5NjksMzM5NzEsMzM5NzMsMzM5NzQsMzM5NzUsMzM5NzksMzM5ODAsMzM5ODIsMzM5ODQsMzM5ODYsMzM5ODcsMzM5ODksMzM5OTAsMzM5OTEsMzM5OTIsMzM5OTUsMzM5OTYsMzM5OTgsMzM5OTksMzQwMDIsMzQwMDQsMzQwMDUsMzQwMDcsMzQwMDgsMzQwMDksMzQwMTAsMzQwMTEsMzQwMTIsMzQwMTQsMzQwMTcsMzQwMTgsMzQwMjAsMzQwMjMsMzQwMjQsMzQwMjUsMzQwMjYsMzQwMjcsMzQwMjksMzQwMzAsMzQwMzEsMzQwMzMsMzQwMzQsMzQwMzUsMzQwMzYsMzQwMzcsMzQwMzgsMzQwMzksMzQwNDAsMzQwNDEsMzQwNDIsMzQwNDMsMzQwNDUsMzQwNDYsMzQwNDgsMzQwNDksMzQwNTAsMjAyNTQsMjU5NTUsMjY3MDUsMjE5NzEsMjAwMDcsMjU2MjAsMzk1NzgsMjUxOTUsMjMyMzQsMjk3OTEsMzMzOTQsMjgwNzMsMjY4NjIsMjA3MTEsMzM2NzgsMzA3MjIsMjY0MzIsMjEwNDksMjc4MDEsMzI0MzMsMjA2NjcsMjE4NjEsMjkwMjIsMzE1NzksMjYxOTQsMjk2NDIsMzM1MTUsMjY0NDEsMjM2NjUsMjEwMjQsMjkwNTMsMzQ5MjMsMzgzNzgsMzg0ODUsMjU3OTcsMzYxOTMsMzMyMDMsMjE4OTIsMjc3MzMsMjUxNTksMzI1NTgsMjI2NzQsMjAyNjAsMjE4MzAsMzYxNzUsMjYxODgsMTk5NzgsMjM1NzgsMzUwNTksMjY3ODYsMjU0MjIsMzEyNDUsMjg5MDMsMzM0MjEsMjEyNDIsMzg5MDIsMjM1NjksMjE3MzYsMzcwNDUsMzI0NjEsMjI4ODIsMzYxNzAsMzQ1MDMsMzMyOTIsMzMyOTMsMzYxOTgsMjU2NjgsMjM1NTYsMjQ5MTMsMjgwNDEsMzEwMzgsMzU3NzQsMzA3NzUsMzAwMDMsMjE2MjcsMjAyODAsMzY1MjMsMjgxNDUsMjMwNzIsMzI0NTMsMzEwNzAsMjc3ODQsMjM0NTcsMjMxNTgsMjk5NzgsMzI5NTgsMjQ5MTAsMjgxODMsMjI3NjgsMjk5ODMsMjk5ODksMjkyOTgsMjEzMTksMzI0OTksMzQwNTEsMzQwNTIsMzQwNTMsMzQwNTQsMzQwNTUsMzQwNTYsMzQwNTcsMzQwNTgsMzQwNTksMzQwNjEsMzQwNjIsMzQwNjMsMzQwNjQsMzQwNjYsMzQwNjgsMzQwNjksMzQwNzAsMzQwNzIsMzQwNzMsMzQwNzUsMzQwNzYsMzQwNzcsMzQwNzgsMzQwODAsMzQwODIsMzQwODMsMzQwODQsMzQwODUsMzQwODYsMzQwODcsMzQwODgsMzQwODksMzQwOTAsMzQwOTMsMzQwOTQsMzQwOTUsMzQwOTYsMzQwOTcsMzQwOTgsMzQwOTksMzQxMDAsMzQxMDEsMzQxMDIsMzQxMTAsMzQxMTEsMzQxMTIsMzQxMTMsMzQxMTQsMzQxMTYsMzQxMTcsMzQxMTgsMzQxMTksMzQxMjMsMzQxMjQsMzQxMjUsMzQxMjYsMzQxMjcsMzQxMjgsMzQxMjksMzQxMzAsMzQxMzEsMzQxMzIsMzQxMzMsMzQxMzUsMzQxMzYsMzQxMzgsMzQxMzksMzQxNDAsMzQxNDEsMzQxNDMsMzQxNDQsMzQxNDUsMzQxNDYsMzQxNDcsMzQxNDksMzQxNTAsMzQxNTEsMzQxNTMsMzQxNTQsMzQxNTUsMzQxNTYsMzQxNTcsMzQxNTgsMzQxNTksMzQxNjAsMzQxNjEsMzQxNjMsMzQxNjUsMzQxNjYsMzQxNjcsMzQxNjgsMzQxNzIsMzQxNzMsMzQxNzUsMzQxNzYsMzQxNzcsMzA0NjUsMzA0MjcsMjEwOTcsMzI5ODgsMjIzMDcsMjQwNzIsMjI4MzMsMjk0MjIsMjYwNDUsMjgyODcsMzU3OTksMjM2MDgsMzQ0MTcsMjEzMTMsMzA3MDcsMjUzNDIsMjYxMDIsMjAxNjAsMzkxMzUsMzQ0MzIsMjM0NTQsMzU3ODIsMjE0OTAsMzA2OTAsMjAzNTEsMjM2MzAsMzk1NDIsMjI5ODcsMjQzMzUsMzEwMzQsMjI3NjMsMTk5OTAsMjY2MjMsMjAxMDcsMjUzMjUsMzU0NzUsMzY4OTMsMjExODMsMjYxNTksMjE5ODAsMjIxMjQsMzY4NjYsMjAxODEsMjAzNjUsMzczMjIsMzkyODAsMjc2NjMsMjQwNjYsMjQ2NDMsMjM0NjAsMzUyNzAsMzU3OTcsMjU5MTAsMjUxNjMsMzkzMTgsMjM0MzIsMjM1NTEsMjU0ODAsMjE4MDYsMjE0NjMsMzAyNDYsMjA4NjEsMzQwOTIsMjY1MzAsMjY4MDMsMjc1MzAsMjUyMzQsMzY3NTUsMjE0NjAsMzMyOTgsMjgxMTMsMzAwOTUsMjAwNzAsMzYxNzQsMjM0MDgsMjkwODcsMzQyMjMsMjYyNTcsMjYzMjksMzI2MjYsMzQ1NjAsNDA2NTMsNDA3MzYsMjM2NDYsMjY0MTUsMzY4NDgsMjY2NDEsMjY0NjMsMjUxMDEsMzE0NDYsMjI2NjEsMjQyNDYsMjU5NjgsMjg0NjUsMzQxNzgsMzQxNzksMzQxODIsMzQxODQsMzQxODUsMzQxODYsMzQxODcsMzQxODgsMzQxODksMzQxOTAsMzQxOTIsMzQxOTMsMzQxOTQsMzQxOTUsMzQxOTYsMzQxOTcsMzQxOTgsMzQxOTksMzQyMDAsMzQyMDEsMzQyMDIsMzQyMDUsMzQyMDYsMzQyMDcsMzQyMDgsMzQyMDksMzQyMTAsMzQyMTEsMzQyMTMsMzQyMTQsMzQyMTUsMzQyMTcsMzQyMTksMzQyMjAsMzQyMjEsMzQyMjUsMzQyMjYsMzQyMjcsMzQyMjgsMzQyMjksMzQyMzAsMzQyMzIsMzQyMzQsMzQyMzUsMzQyMzYsMzQyMzcsMzQyMzgsMzQyMzksMzQyNDAsMzQyNDIsMzQyNDMsMzQyNDQsMzQyNDUsMzQyNDYsMzQyNDcsMzQyNDgsMzQyNTAsMzQyNTEsMzQyNTIsMzQyNTMsMzQyNTQsMzQyNTcsMzQyNTgsMzQyNjAsMzQyNjIsMzQyNjMsMzQyNjQsMzQyNjUsMzQyNjYsMzQyNjcsMzQyNjksMzQyNzAsMzQyNzEsMzQyNzIsMzQyNzMsMzQyNzQsMzQyNzUsMzQyNzcsMzQyNzgsMzQyNzksMzQyODAsMzQyODIsMzQyODMsMzQyODQsMzQyODUsMzQyODYsMzQyODcsMzQyODgsMzQyODksMzQyOTAsMzQyOTEsMzQyOTIsMzQyOTMsMzQyOTQsMzQyOTUsMzQyOTYsMjQ2NjEsMjEwNDcsMzI3ODEsMjU2ODQsMzQ5MjgsMjk5OTMsMjQwNjksMjY2NDMsMjUzMzIsMzg2ODQsMjE0NTIsMjkyNDUsMzU4NDEsMjc3MDAsMzA1NjEsMzEyNDYsMjE1NTAsMzA2MzYsMzkwMzQsMzMzMDgsMzU4MjgsMzA4MDUsMjYzODgsMjg4NjUsMjYwMzEsMjU3NDksMjIwNzAsMjQ2MDUsMzExNjksMjE0OTYsMTk5OTcsMjc1MTUsMzI5MDIsMjM1NDYsMjE5ODcsMjIyMzUsMjAyODIsMjAyODQsMzkyODIsMjQwNTEsMjY0OTQsMzI4MjQsMjQ1NzgsMzkwNDIsMzY4NjUsMjM0MzUsMzU3NzIsMzU4MjksMjU2MjgsMzMzNjgsMjU4MjIsMjIwMTMsMzM0ODcsMzcyMjEsMjA0MzksMzIwMzIsMzY4OTUsMzE5MDMsMjA3MjMsMjI2MDksMjgzMzUsMjM0ODcsMzU3ODUsMzI4OTksMzcyNDAsMzM5NDgsMzE2MzksMzQ0MjksMzg1MzksMzg1NDMsMzI0ODUsMzk2MzUsMzA4NjIsMjM2ODEsMzEzMTksMzY5MzAsMzg1NjcsMzEwNzEsMjMzODUsMjU0MzksMzE0OTksMzQwMDEsMjY3OTcsMjE3NjYsMzI1NTMsMjk3MTIsMzIwMzQsMzgxNDUsMjUxNTIsMjI2MDQsMjAxODIsMjM0MjcsMjI5MDUsMjI2MTIsMzQyOTcsMzQyOTgsMzQzMDAsMzQzMDEsMzQzMDIsMzQzMDQsMzQzMDUsMzQzMDYsMzQzMDcsMzQzMDgsMzQzMTAsMzQzMTEsMzQzMTIsMzQzMTMsMzQzMTQsMzQzMTUsMzQzMTYsMzQzMTcsMzQzMTgsMzQzMTksMzQzMjAsMzQzMjIsMzQzMjMsMzQzMjQsMzQzMjUsMzQzMjcsMzQzMjgsMzQzMjksMzQzMzAsMzQzMzEsMzQzMzIsMzQzMzMsMzQzMzQsMzQzMzUsMzQzMzYsMzQzMzcsMzQzMzgsMzQzMzksMzQzNDAsMzQzNDEsMzQzNDIsMzQzNDQsMzQzNDYsMzQzNDcsMzQzNDgsMzQzNDksMzQzNTAsMzQzNTEsMzQzNTIsMzQzNTMsMzQzNTQsMzQzNTUsMzQzNTYsMzQzNTcsMzQzNTgsMzQzNTksMzQzNjEsMzQzNjIsMzQzNjMsMzQzNjUsMzQzNjYsMzQzNjcsMzQzNjgsMzQzNjksMzQzNzAsMzQzNzEsMzQzNzIsMzQzNzMsMzQzNzQsMzQzNzUsMzQzNzYsMzQzNzcsMzQzNzgsMzQzNzksMzQzODAsMzQzODYsMzQzODcsMzQzODksMzQzOTAsMzQzOTEsMzQzOTIsMzQzOTMsMzQzOTUsMzQzOTYsMzQzOTcsMzQzOTksMzQ0MDAsMzQ0MDEsMzQ0MDMsMzQ0MDQsMzQ0MDUsMzQ0MDYsMzQ0MDcsMzQ0MDgsMzQ0MDksMzQ0MTAsMjk1NDksMjUzNzQsMzY0MjcsMzYzNjcsMzI5NzQsMzM0OTIsMjUyNjAsMjE0ODgsMjc4ODgsMzcyMTQsMjI4MjYsMjQ1NzcsMjc3NjAsMjIzNDksMjU2NzQsMzYxMzgsMzAyNTEsMjgzOTMsMjIzNjMsMjcyNjQsMzAxOTIsMjg1MjUsMzU4ODUsMzU4NDgsMjIzNzQsMjc2MzEsMzQ5NjIsMzA4OTksMjU1MDYsMjE0OTcsMjg4NDUsMjc3NDgsMjI2MTYsMjU2NDIsMjI1MzAsMjY4NDgsMzMxNzksMjE3NzYsMzE5NTgsMjA1MDQsMzY1MzgsMjgxMDgsMzYyNTUsMjg5MDcsMjU0ODcsMjgwNTksMjgzNzIsMzI0ODYsMzM3OTYsMjY2OTEsMzY4NjcsMjgxMjAsMzg1MTgsMzU3NTIsMjI4NzEsMjkzMDUsMzQyNzYsMzMxNTAsMzAxNDAsMzU0NjYsMjY3OTksMjEwNzYsMzYzODYsMzgxNjEsMjU1NTIsMzkwNjQsMzY0MjAsMjE4ODQsMjAzMDcsMjYzNjcsMjIxNTksMjQ3ODksMjgwNTMsMjEwNTksMjM2MjUsMjI4MjUsMjgxNTUsMjI2MzUsMzAwMDAsMjk5ODAsMjQ2ODQsMzMzMDAsMzMwOTQsMjUzNjEsMjY0NjUsMzY4MzQsMzA1MjIsMzYzMzksMzYxNDgsMzgwODEsMjQwODYsMjEzODEsMjE1NDgsMjg4NjcsMzQ0MTMsMzQ0MTUsMzQ0MTYsMzQ0MTgsMzQ0MTksMzQ0MjAsMzQ0MjEsMzQ0MjIsMzQ0MjMsMzQ0MjQsMzQ0MzUsMzQ0MzYsMzQ0MzcsMzQ0MzgsMzQ0MzksMzQ0NDAsMzQ0NDEsMzQ0NDYsMzQ0NDcsMzQ0NDgsMzQ0NDksMzQ0NTAsMzQ0NTIsMzQ0NTQsMzQ0NTUsMzQ0NTYsMzQ0NTcsMzQ0NTgsMzQ0NTksMzQ0NjIsMzQ0NjMsMzQ0NjQsMzQ0NjUsMzQ0NjYsMzQ0NjksMzQ0NzAsMzQ0NzUsMzQ0NzcsMzQ0NzgsMzQ0ODIsMzQ0ODMsMzQ0ODcsMzQ0ODgsMzQ0ODksMzQ0OTEsMzQ0OTIsMzQ0OTMsMzQ0OTQsMzQ0OTUsMzQ0OTcsMzQ0OTgsMzQ0OTksMzQ1MDEsMzQ1MDQsMzQ1MDgsMzQ1MDksMzQ1MTQsMzQ1MTUsMzQ1MTcsMzQ1MTgsMzQ1MTksMzQ1MjIsMzQ1MjQsMzQ1MjUsMzQ1MjgsMzQ1MjksMzQ1MzAsMzQ1MzEsMzQ1MzMsMzQ1MzQsMzQ1MzUsMzQ1MzYsMzQ1MzgsMzQ1MzksMzQ1NDAsMzQ1NDMsMzQ1NDksMzQ1NTAsMzQ1NTEsMzQ1NTQsMzQ1NTUsMzQ1NTYsMzQ1NTcsMzQ1NTksMzQ1NjEsMzQ1NjQsMzQ1NjUsMzQ1NjYsMzQ1NzEsMzQ1NzIsMzQ1NzQsMzQ1NzUsMzQ1NzYsMzQ1NzcsMzQ1ODAsMzQ1ODIsMjc3MTIsMjQzMTEsMjA1NzIsMjAxNDEsMjQyMzcsMjU0MDIsMzMzNTEsMzY4OTAsMjY3MDQsMzcyMzAsMzA2NDMsMjE1MTYsMzgxMDgsMjQ0MjAsMzE0NjEsMjY3NDIsMjU0MTMsMzE1NzAsMzI0NzksMzAxNzEsMjA1OTksMjUyMzcsMjI4MzYsMzY4NzksMjA5ODQsMzExNzEsMzEzNjEsMjIyNzAsMjQ0NjYsMzY4ODQsMjgwMzQsMjM2NDgsMjIzMDMsMjE1MjAsMjA4MjAsMjgyMzcsMjIyNDIsMjU1MTIsMzkwNTksMzMxNTEsMzQ1ODEsMzUxMTQsMzY4NjQsMjE1MzQsMjM2NjMsMzMyMTYsMjUzMDIsMjUxNzYsMzMwNzMsNDA1MDEsMzg0NjQsMzk1MzQsMzk1NDgsMjY5MjUsMjI5NDksMjUyOTksMjE4MjIsMjUzNjYsMjE3MDMsMzQ1MjEsMjc5NjQsMjMwNDMsMjk5MjYsMzQ5NzIsMjc0OTgsMjI4MDYsMzU5MTYsMjQzNjcsMjgyODYsMjk2MDksMzkwMzcsMjAwMjQsMjg5MTksMjM0MzYsMzA4NzEsMjU0MDUsMjYyMDIsMzAzNTgsMjQ3NzksMjM0NTEsMjMxMTMsMTk5NzUsMzMxMDksMjc3NTQsMjk1NzksMjAxMjksMjY1MDUsMzI1OTMsMjQ0NDgsMjYxMDYsMjYzOTUsMjQ1MzYsMjI5MTYsMjMwNDEsMzQ1ODUsMzQ1ODcsMzQ1ODksMzQ1OTEsMzQ1OTIsMzQ1OTYsMzQ1OTgsMzQ1OTksMzQ2MDAsMzQ2MDIsMzQ2MDMsMzQ2MDQsMzQ2MDUsMzQ2MDcsMzQ2MDgsMzQ2MTAsMzQ2MTEsMzQ2MTMsMzQ2MTQsMzQ2MTYsMzQ2MTcsMzQ2MTgsMzQ2MjAsMzQ2MjEsMzQ2MjQsMzQ2MjUsMzQ2MjYsMzQ2MjcsMzQ2MjgsMzQ2MjksMzQ2MzAsMzQ2MzQsMzQ2MzUsMzQ2MzcsMzQ2MzksMzQ2NDAsMzQ2NDEsMzQ2NDIsMzQ2NDQsMzQ2NDUsMzQ2NDYsMzQ2NDgsMzQ2NTAsMzQ2NTEsMzQ2NTIsMzQ2NTMsMzQ2NTQsMzQ2NTUsMzQ2NTcsMzQ2NTgsMzQ2NjIsMzQ2NjMsMzQ2NjQsMzQ2NjUsMzQ2NjYsMzQ2NjcsMzQ2NjgsMzQ2NjksMzQ2NzEsMzQ2NzMsMzQ2NzQsMzQ2NzUsMzQ2NzcsMzQ2NzksMzQ2ODAsMzQ2ODEsMzQ2ODIsMzQ2ODcsMzQ2ODgsMzQ2ODksMzQ2OTIsMzQ2OTQsMzQ2OTUsMzQ2OTcsMzQ2OTgsMzQ3MDAsMzQ3MDIsMzQ3MDMsMzQ3MDQsMzQ3MDUsMzQ3MDYsMzQ3MDgsMzQ3MDksMzQ3MTAsMzQ3MTIsMzQ3MTMsMzQ3MTQsMzQ3MTUsMzQ3MTYsMzQ3MTcsMzQ3MTgsMzQ3MjAsMzQ3MjEsMzQ3MjIsMzQ3MjMsMzQ3MjQsMjQwMTMsMjQ0OTQsMjEzNjEsMzg4ODYsMzY4MjksMjY2OTMsMjIyNjAsMjE4MDcsMjQ3OTksMjAwMjYsMjg0OTMsMzI1MDAsMzM0NzksMzM4MDYsMjI5OTYsMjAyNTUsMjAyNjYsMjM2MTQsMzI0MjgsMjY0MTAsMzQwNzQsMjE2MTksMzAwMzEsMzI5NjMsMjE4OTAsMzk3NTksMjAzMDEsMjgyMDUsMzU4NTksMjM1NjEsMjQ5NDQsMjEzNTUsMzAyMzksMjgyMDEsMzQ0NDIsMjU5OTEsMzgzOTUsMzI0NDEsMjE1NjMsMzEyODMsMzIwMTAsMzgzODIsMjE5ODUsMzI3MDUsMjk5MzQsMjUzNzMsMzQ1ODMsMjgwNjUsMzEzODksMjUxMDUsMjYwMTcsMjEzNTEsMjU1NjksMjc3NzksMjQwNDMsMjE1OTYsMzgwNTYsMjAwNDQsMjc3NDUsMzU4MjAsMjM2MjcsMjYwODAsMzM0MzYsMjY3OTEsMjE1NjYsMjE1NTYsMjc1OTUsMjc0OTQsMjAxMTYsMjU0MTAsMjEzMjAsMzMzMTAsMjAyMzcsMjAzOTgsMjIzNjYsMjUwOTgsMzg2NTQsMjYyMTIsMjkyODksMjEyNDcsMjExNTMsMjQ3MzUsMzU4MjMsMjYxMzIsMjkwODEsMjY1MTIsMzUxOTksMzA4MDIsMzA3MTcsMjYyMjQsMjIwNzUsMjE1NjAsMzgxNzcsMjkzMDYsMzQ3MjUsMzQ3MjYsMzQ3MjcsMzQ3MjksMzQ3MzAsMzQ3MzQsMzQ3MzYsMzQ3MzcsMzQ3MzgsMzQ3NDAsMzQ3NDIsMzQ3NDMsMzQ3NDQsMzQ3NDUsMzQ3NDcsMzQ3NDgsMzQ3NTAsMzQ3NTEsMzQ3NTMsMzQ3NTQsMzQ3NTUsMzQ3NTYsMzQ3NTcsMzQ3NTksMzQ3NjAsMzQ3NjEsMzQ3NjQsMzQ3NjUsMzQ3NjYsMzQ3NjcsMzQ3NjgsMzQ3NzIsMzQ3NzMsMzQ3NzQsMzQ3NzUsMzQ3NzYsMzQ3NzcsMzQ3NzgsMzQ3ODAsMzQ3ODEsMzQ3ODIsMzQ3ODMsMzQ3ODUsMzQ3ODYsMzQ3ODcsMzQ3ODgsMzQ3OTAsMzQ3OTEsMzQ3OTIsMzQ3OTMsMzQ3OTUsMzQ3OTYsMzQ3OTcsMzQ3OTksMzQ4MDAsMzQ4MDEsMzQ4MDIsMzQ4MDMsMzQ4MDQsMzQ4MDUsMzQ4MDYsMzQ4MDcsMzQ4MDgsMzQ4MTAsMzQ4MTEsMzQ4MTIsMzQ4MTMsMzQ4MTUsMzQ4MTYsMzQ4MTcsMzQ4MTgsMzQ4MjAsMzQ4MjEsMzQ4MjIsMzQ4MjMsMzQ4MjQsMzQ4MjUsMzQ4MjcsMzQ4MjgsMzQ4MjksMzQ4MzAsMzQ4MzEsMzQ4MzIsMzQ4MzMsMzQ4MzQsMzQ4MzYsMzQ4MzksMzQ4NDAsMzQ4NDEsMzQ4NDIsMzQ4NDQsMzQ4NDUsMzQ4NDYsMzQ4NDcsMzQ4NDgsMzQ4NTEsMzEyMzIsMjQ2ODcsMjQwNzYsMjQ3MTMsMzMxODEsMjI4MDUsMjQ3OTYsMjkwNjAsMjg5MTEsMjgzMzAsMjc3MjgsMjkzMTIsMjcyNjgsMzQ5ODksMjQxMDksMjAwNjQsMjMyMTksMjE5MTYsMzgxMTUsMjc5MjcsMzE5OTUsMzg1NTMsMjUxMDMsMzI0NTQsMzA2MDYsMzQ0MzAsMjEyODMsMzg2ODYsMzY3NTgsMjYyNDcsMjM3NzcsMjAzODQsMjk0MjEsMTk5NzksMjE0MTQsMjI3OTksMjE1MjMsMjU0NzIsMzgxODQsMjA4MDgsMjAxODUsNDAwOTIsMzI0MjAsMjE2ODgsMzYxMzIsMzQ5MDAsMzMzMzUsMzgzODYsMjgwNDYsMjQzNTgsMjMyNDQsMjYxNzQsMzg1MDUsMjk2MTYsMjk0ODYsMjE0MzksMzMxNDYsMzkzMDEsMzI2NzMsMjM0NjYsMzg1MTksMzg0ODAsMzI0NDcsMzA0NTYsMjE0MTAsMzgyNjIsMzkzMjEsMzE2NjUsMzUxNDAsMjgyNDgsMjAwNjUsMzI3MjQsMzEwNzcsMzU4MTQsMjQ4MTksMjE3MDksMjAxMzksMzkwMzMsMjQwNTUsMjcyMzMsMjA2ODcsMjE1MjEsMzU5MzcsMzM4MzEsMzA4MTMsMzg2NjAsMjEwNjYsMjE3NDIsMjIxNzksMzgxNDQsMjgwNDAsMjM0NzcsMjgxMDIsMjYxOTUsMzQ4NTIsMzQ4NTMsMzQ4NTQsMzQ4NTUsMzQ4NTYsMzQ4NTcsMzQ4NTgsMzQ4NTksMzQ4NjAsMzQ4NjEsMzQ4NjIsMzQ4NjMsMzQ4NjQsMzQ4NjUsMzQ4NjcsMzQ4NjgsMzQ4NjksMzQ4NzAsMzQ4NzEsMzQ4NzIsMzQ4NzQsMzQ4NzUsMzQ4NzcsMzQ4NzgsMzQ4NzksMzQ4ODEsMzQ4ODIsMzQ4ODMsMzQ4ODYsMzQ4ODcsMzQ4ODgsMzQ4ODksMzQ4OTAsMzQ4OTEsMzQ4OTQsMzQ4OTUsMzQ4OTYsMzQ4OTcsMzQ4OTgsMzQ4OTksMzQ5MDEsMzQ5MDIsMzQ5MDQsMzQ5MDYsMzQ5MDcsMzQ5MDgsMzQ5MDksMzQ5MTAsMzQ5MTEsMzQ5MTIsMzQ5MTgsMzQ5MTksMzQ5MjIsMzQ5MjUsMzQ5MjcsMzQ5MjksMzQ5MzEsMzQ5MzIsMzQ5MzMsMzQ5MzQsMzQ5MzYsMzQ5MzcsMzQ5MzgsMzQ5MzksMzQ5NDAsMzQ5NDQsMzQ5NDcsMzQ5NTAsMzQ5NTEsMzQ5NTMsMzQ5NTQsMzQ5NTYsMzQ5NTgsMzQ5NTksMzQ5NjAsMzQ5NjEsMzQ5NjMsMzQ5NjQsMzQ5NjUsMzQ5NjcsMzQ5NjgsMzQ5NjksMzQ5NzAsMzQ5NzEsMzQ5NzMsMzQ5NzQsMzQ5NzUsMzQ5NzYsMzQ5NzcsMzQ5NzksMzQ5ODEsMzQ5ODIsMzQ5ODMsMzQ5ODQsMzQ5ODUsMzQ5ODYsMjM1NjcsMjMzODksMjY2NTcsMzI5MTgsMjE4ODAsMzE1MDUsMjU5MjgsMjY5NjQsMjAxMjMsMjc0NjMsMzQ2MzgsMzg3OTUsMjEzMjcsMjUzNzUsMjU2NTgsMzcwMzQsMjYwMTIsMzI5NjEsMzU4NTYsMjA4ODksMjY4MDAsMjEzNjgsMzQ4MDksMjUwMzIsMjc4NDQsMjc4OTksMzU4NzQsMjM2MzMsMzQyMTgsMzM0NTUsMzgxNTYsMjc0MjcsMzY3NjMsMjYwMzIsMjQ1NzEsMjQ1MTUsMjA0NDksMzQ4ODUsMjYxNDMsMzMxMjUsMjk0ODEsMjQ4MjYsMjA4NTIsMjEwMDksMjI0MTEsMjQ0MTgsMzcwMjYsMzQ4OTIsMzcyNjYsMjQxODQsMjY0NDcsMjQ2MTUsMjI5OTUsMjA4MDQsMjA5ODIsMzMwMTYsMjEyNTYsMjc3NjksMzg1OTYsMjkwNjYsMjAyNDEsMjA0NjIsMzI2NzAsMjY0MjksMjE5NTcsMzgxNTIsMzExNjgsMzQ5NjYsMzI0ODMsMjI2ODcsMjUxMDAsMzg2NTYsMzQzOTQsMjIwNDAsMzkwMzUsMjQ0NjQsMzU3NjgsMzM5ODgsMzcyMDcsMjE0NjUsMjYwOTMsMjQyMDcsMzAwNDQsMjQ2NzYsMzIxMTAsMjMxNjcsMzI0OTAsMzI0OTMsMzY3MTMsMjE5MjcsMjM0NTksMjQ3NDgsMjYwNTksMjk1NzIsMzQ5ODgsMzQ5OTAsMzQ5OTEsMzQ5OTIsMzQ5OTQsMzQ5OTUsMzQ5OTYsMzQ5OTcsMzQ5OTgsMzUwMDAsMzUwMDEsMzUwMDIsMzUwMDMsMzUwMDUsMzUwMDYsMzUwMDcsMzUwMDgsMzUwMTEsMzUwMTIsMzUwMTUsMzUwMTYsMzUwMTgsMzUwMTksMzUwMjAsMzUwMjEsMzUwMjMsMzUwMjQsMzUwMjUsMzUwMjcsMzUwMzAsMzUwMzEsMzUwMzQsMzUwMzUsMzUwMzYsMzUwMzcsMzUwMzgsMzUwNDAsMzUwNDEsMzUwNDYsMzUwNDcsMzUwNDksMzUwNTAsMzUwNTEsMzUwNTIsMzUwNTMsMzUwNTQsMzUwNTUsMzUwNTgsMzUwNjEsMzUwNjIsMzUwNjMsMzUwNjYsMzUwNjcsMzUwNjksMzUwNzEsMzUwNzIsMzUwNzMsMzUwNzUsMzUwNzYsMzUwNzcsMzUwNzgsMzUwNzksMzUwODAsMzUwODEsMzUwODMsMzUwODQsMzUwODUsMzUwODYsMzUwODcsMzUwODksMzUwOTIsMzUwOTMsMzUwOTQsMzUwOTUsMzUwOTYsMzUxMDAsMzUxMDEsMzUxMDIsMzUxMDMsMzUxMDQsMzUxMDYsMzUxMDcsMzUxMDgsMzUxMTAsMzUxMTEsMzUxMTIsMzUxMTMsMzUxMTYsMzUxMTcsMzUxMTgsMzUxMTksMzUxMjEsMzUxMjIsMzUxMjMsMzUxMjUsMzUxMjcsMzY4NzMsMzAzMDcsMzA1MDUsMzI0NzQsMzg3NzIsMzQyMDMsMjMzOTgsMzEzNDgsMzg2MzQsMzQ4ODAsMjExOTUsMjkwNzEsMjQ0OTAsMjYwOTIsMzU4MTAsMjM1NDcsMzk1MzUsMjQwMzMsMjc1MjksMjc3MzksMzU3NTcsMzU3NTksMzY4NzQsMzY4MDUsMjEzODcsMjUyNzYsNDA0ODYsNDA0OTMsMjE1NjgsMjAwMTEsMzM0NjksMjkyNzMsMzQ0NjAsMjM4MzAsMzQ5MDUsMjgwNzksMzg1OTcsMjE3MTMsMjAxMjIsMzU3NjYsMjg5MzcsMjE2OTMsMzg0MDksMjg4OTUsMjgxNTMsMzA0MTYsMjAwMDUsMzA3NDAsMzQ1NzgsMjM3MjEsMjQzMTAsMzUzMjgsMzkwNjgsMzg0MTQsMjg4MTQsMjc4MzksMjI4NTIsMjU1MTMsMzA1MjQsMzQ4OTMsMjg0MzYsMzMzOTUsMjI1NzYsMjkxNDEsMjEzODgsMzA3NDYsMzg1OTMsMjE3NjEsMjQ0MjIsMjg5NzYsMjM0NzYsMzU4NjYsMzk1NjQsMjc1MjMsMjI4MzAsNDA0OTUsMzEyMDcsMjY0NzIsMjUxOTYsMjAzMzUsMzAxMTMsMzI2NTAsMjc5MTUsMzg0NTEsMjc2ODcsMjAyMDgsMzAxNjIsMjA4NTksMjY2NzksMjg0NzgsMzY5OTIsMzMxMzYsMjI5MzQsMjk4MTQsMzUxMjgsMzUxMjksMzUxMzAsMzUxMzEsMzUxMzIsMzUxMzMsMzUxMzQsMzUxMzUsMzUxMzYsMzUxMzgsMzUxMzksMzUxNDEsMzUxNDIsMzUxNDMsMzUxNDQsMzUxNDUsMzUxNDYsMzUxNDcsMzUxNDgsMzUxNDksMzUxNTAsMzUxNTEsMzUxNTIsMzUxNTMsMzUxNTQsMzUxNTUsMzUxNTYsMzUxNTcsMzUxNTgsMzUxNTksMzUxNjAsMzUxNjEsMzUxNjIsMzUxNjMsMzUxNjQsMzUxNjUsMzUxNjgsMzUxNjksMzUxNzAsMzUxNzEsMzUxNzIsMzUxNzMsMzUxNzUsMzUxNzYsMzUxNzcsMzUxNzgsMzUxNzksMzUxODAsMzUxODEsMzUxODIsMzUxODMsMzUxODQsMzUxODUsMzUxODYsMzUxODcsMzUxODgsMzUxODksMzUxOTAsMzUxOTEsMzUxOTIsMzUxOTMsMzUxOTQsMzUxOTYsMzUxOTcsMzUxOTgsMzUyMDAsMzUyMDIsMzUyMDQsMzUyMDUsMzUyMDcsMzUyMDgsMzUyMDksMzUyMTAsMzUyMTEsMzUyMTIsMzUyMTMsMzUyMTQsMzUyMTUsMzUyMTYsMzUyMTcsMzUyMTgsMzUyMTksMzUyMjAsMzUyMjEsMzUyMjIsMzUyMjMsMzUyMjQsMzUyMjUsMzUyMjYsMzUyMjcsMzUyMjgsMzUyMjksMzUyMzAsMzUyMzEsMzUyMzIsMzUyMzMsMjU2NzEsMjM1OTEsMzY5NjUsMzEzNzcsMzU4NzUsMjMwMDIsMjE2NzYsMzMyODAsMzM2NDcsMzUyMDEsMzI3NjgsMjY5MjgsMjIwOTQsMzI4MjIsMjkyMzksMzczMjYsMjA5MTgsMjAwNjMsMzkwMjksMjU0OTQsMTk5OTQsMjE0OTQsMjYzNTUsMzMwOTksMjI4MTIsMjgwODIsMTk5NjgsMjI3NzcsMjEzMDcsMjU1NTgsMzgxMjksMjAzODEsMjAyMzQsMzQ5MTUsMzkwNTYsMjI4MzksMzY5NTEsMzEyMjcsMjAyMDIsMzMwMDgsMzAwOTcsMjc3NzgsMjM0NTIsMjMwMTYsMjQ0MTMsMjY4ODUsMzQ0MzMsMjA1MDYsMjQwNTAsMjAwNTcsMzA2OTEsMjAxOTcsMzM0MDIsMjUyMzMsMjYxMzEsMzcwMDksMjM2NzMsMjAxNTksMjQ0NDEsMzMyMjIsMzY5MjAsMzI5MDAsMzAxMjMsMjAxMzQsMzUwMjgsMjQ4NDcsMjc1ODksMjQ1MTgsMjAwNDEsMzA0MTAsMjgzMjIsMzU4MTEsMzU3NTgsMzU4NTAsMzU3OTMsMjQzMjIsMzI3NjQsMzI3MTYsMzI0NjIsMzM1ODksMzM2NDMsMjIyNDAsMjc1NzUsMzg4OTksMzg0NTIsMjMwMzUsMjE1MzUsMzgxMzQsMjgxMzksMjM0OTMsMzkyNzgsMjM2MDksMjQzNDEsMzg1NDQsMzUyMzQsMzUyMzUsMzUyMzYsMzUyMzcsMzUyMzgsMzUyMzksMzUyNDAsMzUyNDEsMzUyNDIsMzUyNDMsMzUyNDQsMzUyNDUsMzUyNDYsMzUyNDcsMzUyNDgsMzUyNDksMzUyNTAsMzUyNTEsMzUyNTIsMzUyNTMsMzUyNTQsMzUyNTUsMzUyNTYsMzUyNTcsMzUyNTgsMzUyNTksMzUyNjAsMzUyNjEsMzUyNjIsMzUyNjMsMzUyNjQsMzUyNjcsMzUyNzcsMzUyODMsMzUyODQsMzUyODUsMzUyODcsMzUyODgsMzUyODksMzUyOTEsMzUyOTMsMzUyOTUsMzUyOTYsMzUyOTcsMzUyOTgsMzUzMDAsMzUzMDMsMzUzMDQsMzUzMDUsMzUzMDYsMzUzMDgsMzUzMDksMzUzMTAsMzUzMTIsMzUzMTMsMzUzMTQsMzUzMTYsMzUzMTcsMzUzMTgsMzUzMTksMzUzMjAsMzUzMjEsMzUzMjIsMzUzMjMsMzUzMjQsMzUzMjUsMzUzMjYsMzUzMjcsMzUzMjksMzUzMzAsMzUzMzEsMzUzMzIsMzUzMzMsMzUzMzQsMzUzMzYsMzUzMzcsMzUzMzgsMzUzMzksMzUzNDAsMzUzNDEsMzUzNDIsMzUzNDMsMzUzNDQsMzUzNDUsMzUzNDYsMzUzNDcsMzUzNDgsMzUzNDksMzUzNTAsMzUzNTEsMzUzNTIsMzUzNTMsMzUzNTQsMzUzNTUsMzUzNTYsMzUzNTcsMjEzNjAsMzM1MjEsMjcxODUsMjMxNTYsNDA1NjAsMjQyMTIsMzI1NTIsMzM3MjEsMzM4MjgsMzM4MjksMzM2MzksMzQ2MzEsMzY4MTQsMzYxOTQsMzA0MDgsMjQ0MzMsMzkwNjIsMzA4MjgsMjYxNDQsMjE3MjcsMjUzMTcsMjAzMjMsMzMyMTksMzAxNTIsMjQyNDgsMzg2MDUsMzYzNjIsMzQ1NTMsMjE2NDcsMjc4OTEsMjgwNDQsMjc3MDQsMjQ3MDMsMjExOTEsMjk5OTIsMjQxODksMjAyNDgsMjQ3MzYsMjQ1NTEsMjM1ODgsMzAwMDEsMzcwMzgsMzgwODAsMjkzNjksMjc4MzMsMjgyMTYsMzcxOTMsMjYzNzcsMjE0NTEsMjE0OTEsMjAzMDUsMzczMjEsMzU4MjUsMjE0NDgsMjQxODgsMzY4MDIsMjgxMzIsMjAxMTAsMzA0MDIsMjcwMTQsMzQzOTgsMjQ4NTgsMzMyODYsMjAzMTMsMjA0NDYsMzY5MjYsNDAwNjAsMjQ4NDEsMjgxODksMjgxODAsMzg1MzMsMjAxMDQsMjMwODksMzg2MzIsMTk5ODIsMjM2NzksMzExNjEsMjM0MzEsMzU4MjEsMzI3MDEsMjk1NzcsMjI0OTUsMzM0MTksMzcwNTcsMjE1MDUsMzY5MzUsMjE5NDcsMjM3ODYsMjQ0ODEsMjQ4NDAsMjc0NDIsMjk0MjUsMzI5NDYsMzU0NjUsMzUzNTgsMzUzNTksMzUzNjAsMzUzNjEsMzUzNjIsMzUzNjMsMzUzNjQsMzUzNjUsMzUzNjYsMzUzNjcsMzUzNjgsMzUzNjksMzUzNzAsMzUzNzEsMzUzNzIsMzUzNzMsMzUzNzQsMzUzNzUsMzUzNzYsMzUzNzcsMzUzNzgsMzUzNzksMzUzODAsMzUzODEsMzUzODIsMzUzODMsMzUzODQsMzUzODUsMzUzODYsMzUzODcsMzUzODgsMzUzODksMzUzOTEsMzUzOTIsMzUzOTMsMzUzOTQsMzUzOTUsMzUzOTYsMzUzOTcsMzUzOTgsMzUzOTksMzU0MDEsMzU0MDIsMzU0MDMsMzU0MDQsMzU0MDUsMzU0MDYsMzU0MDcsMzU0MDgsMzU0MDksMzU0MTAsMzU0MTEsMzU0MTIsMzU0MTMsMzU0MTQsMzU0MTUsMzU0MTYsMzU0MTcsMzU0MTgsMzU0MTksMzU0MjAsMzU0MjEsMzU0MjIsMzU0MjMsMzU0MjQsMzU0MjUsMzU0MjYsMzU0MjcsMzU0MjgsMzU0MjksMzU0MzAsMzU0MzEsMzU0MzIsMzU0MzMsMzU0MzQsMzU0MzUsMzU0MzYsMzU0MzcsMzU0MzgsMzU0MzksMzU0NDAsMzU0NDEsMzU0NDIsMzU0NDMsMzU0NDQsMzU0NDUsMzU0NDYsMzU0NDcsMzU0NDgsMzU0NTAsMzU0NTEsMzU0NTIsMzU0NTMsMzU0NTQsMzU0NTUsMzU0NTYsMjgwMjAsMjM1MDcsMzUwMjksMzkwNDQsMzU5NDcsMzk1MzMsNDA0OTksMjgxNzAsMjA5MDAsMjA4MDMsMjI0MzUsMzQ5NDUsMjE0MDcsMjU1ODgsMzY3NTcsMjIyNTMsMjE1OTIsMjIyNzgsMjk1MDMsMjgzMDQsMzI1MzYsMzY4MjgsMzM0ODksMjQ4OTUsMjQ2MTYsMzg0OTgsMjYzNTIsMzI0MjIsMzYyMzQsMzYyOTEsMzgwNTMsMjM3MzEsMzE5MDgsMjYzNzYsMjQ3NDIsMzg0MDUsMzI3OTIsMjAxMTMsMzcwOTUsMjEyNDgsMzg1MDQsMjA4MDEsMzY4MTYsMzQxNjQsMzcyMTMsMjYxOTcsMzg5MDEsMjMzODEsMjEyNzcsMzA3NzYsMjY0MzQsMjY2ODUsMjE3MDUsMjg3OTgsMjM0NzIsMzY3MzMsMjA4NzcsMjIzMTIsMjE2ODEsMjU4NzQsMjYyNDIsMzYxOTAsMzYxNjMsMzMwMzksMzM5MDAsMzY5NzMsMzE5NjcsMjA5OTEsMzQyOTksMjY1MzEsMjYwODksMjg1NzcsMzQ0NjgsMzY0ODEsMjIxMjIsMzY4OTYsMzAzMzgsMjg3OTAsMjkxNTcsMzYxMzEsMjUzMjEsMjEwMTcsMjc5MDEsMzYxNTYsMjQ1OTAsMjI2ODYsMjQ5NzQsMjYzNjYsMzYxOTIsMjUxNjYsMjE5MzksMjgxOTUsMjY0MTMsMzY3MTEsMzU0NTcsMzU0NTgsMzU0NTksMzU0NjAsMzU0NjEsMzU0NjIsMzU0NjMsMzU0NjQsMzU0NjcsMzU0NjgsMzU0NjksMzU0NzAsMzU0NzEsMzU0NzIsMzU0NzMsMzU0NzQsMzU0NzYsMzU0NzcsMzU0NzgsMzU0NzksMzU0ODAsMzU0ODEsMzU0ODIsMzU0ODMsMzU0ODQsMzU0ODUsMzU0ODYsMzU0ODcsMzU0ODgsMzU0ODksMzU0OTAsMzU0OTEsMzU0OTIsMzU0OTMsMzU0OTQsMzU0OTUsMzU0OTYsMzU0OTcsMzU0OTgsMzU0OTksMzU1MDAsMzU1MDEsMzU1MDIsMzU1MDMsMzU1MDQsMzU1MDUsMzU1MDYsMzU1MDcsMzU1MDgsMzU1MDksMzU1MTAsMzU1MTEsMzU1MTIsMzU1MTMsMzU1MTQsMzU1MTUsMzU1MTYsMzU1MTcsMzU1MTgsMzU1MTksMzU1MjAsMzU1MjEsMzU1MjIsMzU1MjMsMzU1MjQsMzU1MjUsMzU1MjYsMzU1MjcsMzU1MjgsMzU1MjksMzU1MzAsMzU1MzEsMzU1MzIsMzU1MzMsMzU1MzQsMzU1MzUsMzU1MzYsMzU1MzcsMzU1MzgsMzU1MzksMzU1NDAsMzU1NDEsMzU1NDIsMzU1NDMsMzU1NDQsMzU1NDUsMzU1NDYsMzU1NDcsMzU1NDgsMzU1NDksMzU1NTAsMzU1NTEsMzU1NTIsMzU1NTMsMzU1NTQsMzU1NTUsMzgxMTMsMzgzOTIsMzA1MDQsMjY2MjksMjcwNDgsMjE2NDMsMjAwNDUsMjg4NTYsMzU3ODQsMjU2ODgsMjU5OTUsMjM0MjksMzEzNjQsMjA1MzgsMjM1MjgsMzA2NTEsMjc2MTcsMzU0NDksMzE4OTYsMjc4MzgsMzA0MTUsMjYwMjUsMzY3NTksMjM4NTMsMjM2MzcsMzQzNjAsMjY2MzIsMjEzNDQsMjUxMTIsMzE0NDksMjgyNTEsMzI1MDksMjcxNjcsMzE0NTYsMjQ0MzIsMjg0NjcsMjQzNTIsMjU0ODQsMjgwNzIsMjY0NTQsMTk5NzYsMjQwODAsMzYxMzQsMjAxODMsMzI5NjAsMzAyNjAsMzg1NTYsMjUzMDcsMjYxNTcsMjUyMTQsMjc4MzYsMzYyMTMsMjkwMzEsMzI2MTcsMjA4MDYsMzI5MDMsMjE0ODQsMzY5NzQsMjUyNDAsMjE3NDYsMzQ1NDQsMzY3NjEsMzI3NzMsMzgxNjcsMzQwNzEsMzY4MjUsMjc5OTMsMjk2NDUsMjYwMTUsMzA0OTUsMjk5NTYsMzA3NTksMzMyNzUsMzYxMjYsMzgwMjQsMjAzOTAsMjY1MTcsMzAxMzcsMzU3ODYsMzg2NjMsMjUzOTEsMzgyMTUsMzg0NTMsMzM5NzYsMjUzNzksMzA1MjksMjQ0NDksMjk0MjQsMjAxMDUsMjQ1OTYsMjU5NzIsMjUzMjcsMjc0OTEsMjU5MTksMzU1NTYsMzU1NTcsMzU1NTgsMzU1NTksMzU1NjAsMzU1NjEsMzU1NjIsMzU1NjMsMzU1NjQsMzU1NjUsMzU1NjYsMzU1NjcsMzU1NjgsMzU1NjksMzU1NzAsMzU1NzEsMzU1NzIsMzU1NzMsMzU1NzQsMzU1NzUsMzU1NzYsMzU1NzcsMzU1NzgsMzU1NzksMzU1ODAsMzU1ODEsMzU1ODIsMzU1ODMsMzU1ODQsMzU1ODUsMzU1ODYsMzU1ODcsMzU1ODgsMzU1ODksMzU1OTAsMzU1OTIsMzU1OTMsMzU1OTQsMzU1OTUsMzU1OTYsMzU1OTcsMzU1OTgsMzU1OTksMzU2MDAsMzU2MDEsMzU2MDIsMzU2MDMsMzU2MDQsMzU2MDUsMzU2MDYsMzU2MDcsMzU2MDgsMzU2MDksMzU2MTAsMzU2MTEsMzU2MTIsMzU2MTMsMzU2MTQsMzU2MTUsMzU2MTYsMzU2MTcsMzU2MTgsMzU2MTksMzU2MjAsMzU2MjEsMzU2MjMsMzU2MjQsMzU2MjUsMzU2MjYsMzU2MjcsMzU2MjgsMzU2MjksMzU2MzAsMzU2MzEsMzU2MzIsMzU2MzMsMzU2MzQsMzU2MzUsMzU2MzYsMzU2MzcsMzU2MzgsMzU2MzksMzU2NDAsMzU2NDEsMzU2NDIsMzU2NDMsMzU2NDQsMzU2NDUsMzU2NDYsMzU2NDcsMzU2NDgsMzU2NDksMzU2NTAsMzU2NTEsMzU2NTIsMzU2NTMsMjQxMDMsMzAxNTEsMzcwNzMsMzU3NzcsMzM0MzcsMjY1MjUsMjU5MDMsMjE1NTMsMzQ1ODQsMzA2OTMsMzI5MzAsMzMwMjYsMjc3MTMsMjAwNDMsMzI0NTUsMzI4NDQsMzA0NTIsMjY4OTMsMjc1NDIsMjUxOTEsMjA1NDAsMjAzNTYsMjIzMzYsMjUzNTEsMjc0OTAsMzYyODYsMjE0ODIsMjYwODgsMzI0NDAsMjQ1MzUsMjUzNzAsMjU1MjcsMzMyNjcsMzMyNjgsMzI2MjIsMjQwOTIsMjM3NjksMjEwNDYsMjYyMzQsMzEyMDksMzEyNTgsMzYxMzYsMjg4MjUsMzAxNjQsMjgzODIsMjc4MzUsMzEzNzgsMjAwMTMsMzA0MDUsMjQ1NDQsMzgwNDcsMzQ5MzUsMzI0NTYsMzExODEsMzI5NTksMzczMjUsMjAyMTAsMjAyNDcsMzMzMTEsMjE2MDgsMjQwMzAsMjc5NTQsMzU3ODgsMzE5MDksMzY3MjQsMzI5MjAsMjQwOTAsMjE2NTAsMzAzODUsMjM0NDksMjYxNzIsMzk1ODgsMjk2NjQsMjY2NjYsMzQ1MjMsMjY0MTcsMjk0ODIsMzU4MzIsMzU4MDMsMzY4ODAsMzE0ODEsMjg4OTEsMjkwMzgsMjUyODQsMzA2MzMsMjIwNjUsMjAwMjcsMzM4NzksMjY2MDksMjExNjEsMzQ0OTYsMzYxNDIsMzgxMzYsMzE1NjksMzU2NTQsMzU2NTUsMzU2NTYsMzU2NTcsMzU2NTgsMzU2NTksMzU2NjAsMzU2NjEsMzU2NjIsMzU2NjMsMzU2NjQsMzU2NjUsMzU2NjYsMzU2NjcsMzU2NjgsMzU2NjksMzU2NzAsMzU2NzEsMzU2NzIsMzU2NzMsMzU2NzQsMzU2NzUsMzU2NzYsMzU2NzcsMzU2NzgsMzU2NzksMzU2ODAsMzU2ODEsMzU2ODIsMzU2ODMsMzU2ODQsMzU2ODUsMzU2ODcsMzU2ODgsMzU2ODksMzU2OTAsMzU2OTEsMzU2OTMsMzU2OTQsMzU2OTUsMzU2OTYsMzU2OTcsMzU2OTgsMzU2OTksMzU3MDAsMzU3MDEsMzU3MDIsMzU3MDMsMzU3MDQsMzU3MDUsMzU3MDYsMzU3MDcsMzU3MDgsMzU3MDksMzU3MTAsMzU3MTEsMzU3MTIsMzU3MTMsMzU3MTQsMzU3MTUsMzU3MTYsMzU3MTcsMzU3MTgsMzU3MTksMzU3MjAsMzU3MjEsMzU3MjIsMzU3MjMsMzU3MjQsMzU3MjUsMzU3MjYsMzU3MjcsMzU3MjgsMzU3MjksMzU3MzAsMzU3MzEsMzU3MzIsMzU3MzMsMzU3MzQsMzU3MzUsMzU3MzYsMzU3MzcsMzU3MzgsMzU3MzksMzU3NDAsMzU3NDEsMzU3NDIsMzU3NDMsMzU3NTYsMzU3NjEsMzU3NzEsMzU3ODMsMzU3OTIsMzU4MTgsMzU4NDksMzU4NzAsMjAzMDMsMjc4ODAsMzEwNjksMzk1NDcsMjUyMzUsMjkyMjYsMjUzNDEsMTk5ODcsMzA3NDIsMzY3MTYsMjU3NzYsMzYxODYsMzE2ODYsMjY3MjksMjQxOTYsMzUwMTMsMjI5MTgsMjU3NTgsMjI3NjYsMjkzNjYsMjY4OTQsMzgxODEsMzY4NjEsMzYxODQsMjIzNjgsMzI1MTIsMzU4NDYsMjA5MzQsMjU0MTcsMjUzMDUsMjEzMzEsMjY3MDAsMjk3MzAsMzM1MzcsMzcxOTYsMjE4MjgsMzA1MjgsMjg3OTYsMjc5NzgsMjA4NTcsMjE2NzIsMzYxNjQsMjMwMzksMjgzNjMsMjgxMDAsMjMzODgsMzIwNDMsMjAxODAsMzE4NjksMjgzNzEsMjMzNzYsMzMyNTgsMjgxNzMsMjMzODMsMzk2ODMsMjY4MzcsMzYzOTQsMjM0NDcsMzI1MDgsMjQ2MzUsMzI0MzcsMzcwNDksMzYyMDgsMjI4NjMsMjU1NDksMzExOTksMzYyNzUsMjEzMzAsMjYwNjMsMzEwNjIsMzU3ODEsMzg0NTksMzI0NTIsMzgwNzUsMzIzODYsMjIwNjgsMzcyNTcsMjYzNjgsMzI2MTgsMjM1NjIsMzY5ODEsMjYxNTIsMjQwMzgsMjAzMDQsMjY1OTAsMjA1NzAsMjAzMTYsMjIzNTIsMjQyMzEsNTk0MDgsNTk0MDksNTk0MTAsNTk0MTEsNTk0MTIsMzU4OTYsMzU4OTcsMzU4OTgsMzU4OTksMzU5MDAsMzU5MDEsMzU5MDIsMzU5MDMsMzU5MDQsMzU5MDYsMzU5MDcsMzU5MDgsMzU5MDksMzU5MTIsMzU5MTQsMzU5MTUsMzU5MTcsMzU5MTgsMzU5MTksMzU5MjAsMzU5MjEsMzU5MjIsMzU5MjMsMzU5MjQsMzU5MjYsMzU5MjcsMzU5MjgsMzU5MjksMzU5MzEsMzU5MzIsMzU5MzMsMzU5MzQsMzU5MzUsMzU5MzYsMzU5MzksMzU5NDAsMzU5NDEsMzU5NDIsMzU5NDMsMzU5NDQsMzU5NDUsMzU5NDgsMzU5NDksMzU5NTAsMzU5NTEsMzU5NTIsMzU5NTMsMzU5NTQsMzU5NTYsMzU5NTcsMzU5NTgsMzU5NTksMzU5NjMsMzU5NjQsMzU5NjUsMzU5NjYsMzU5NjcsMzU5NjgsMzU5NjksMzU5NzEsMzU5NzIsMzU5NzQsMzU5NzUsMzU5NzYsMzU5NzksMzU5ODEsMzU5ODIsMzU5ODMsMzU5ODQsMzU5ODUsMzU5ODYsMzU5ODcsMzU5ODksMzU5OTAsMzU5OTEsMzU5OTMsMzU5OTQsMzU5OTUsMzU5OTYsMzU5OTcsMzU5OTgsMzU5OTksMzYwMDAsMzYwMDEsMzYwMDIsMzYwMDMsMzYwMDQsMzYwMDUsMzYwMDYsMzYwMDcsMzYwMDgsMzYwMDksMzYwMTAsMzYwMTEsMzYwMTIsMzYwMTMsMjAxMDksMTk5ODAsMjA4MDAsMTk5ODQsMjQzMTksMjEzMTcsMTk5ODksMjAxMjAsMTk5OTgsMzk3MzAsMjM0MDQsMjIxMjEsMjAwMDgsMzExNjIsMjAwMzEsMjEyNjksMjAwMzksMjI4MjksMjkyNDMsMjEzNTgsMjc2NjQsMjIyMzksMzI5OTYsMzkzMTksMjc2MDMsMzA1OTAsNDA3MjcsMjAwMjIsMjAxMjcsNDA3MjAsMjAwNjAsMjAwNzMsMjAxMTUsMzM0MTYsMjMzODcsMjE4NjgsMjIwMzEsMjAxNjQsMjEzODksMjE0MDUsMjE0MTEsMjE0MTMsMjE0MjIsMzg3NTcsMzYxODksMjEyNzQsMjE0OTMsMjEyODYsMjEyOTQsMjEzMTAsMzYxODgsMjEzNTAsMjEzNDcsMjA5OTQsMjEwMDAsMjEwMDYsMjEwMzcsMjEwNDMsMjEwNTUsMjEwNTYsMjEwNjgsMjEwODYsMjEwODksMjEwODQsMzM5NjcsMjExMTcsMjExMjIsMjExMjEsMjExMzYsMjExMzksMjA4NjYsMzI1OTYsMjAxNTUsMjAxNjMsMjAxNjksMjAxNjIsMjAyMDAsMjAxOTMsMjAyMDMsMjAxOTAsMjAyNTEsMjAyMTEsMjAyNTgsMjAzMjQsMjAyMTMsMjAyNjEsMjAyNjMsMjAyMzMsMjAyNjcsMjAzMTgsMjAzMjcsMjU5MTIsMjAzMTQsMjAzMTcsMzYwMTQsMzYwMTUsMzYwMTYsMzYwMTcsMzYwMTgsMzYwMTksMzYwMjAsMzYwMjEsMzYwMjIsMzYwMjMsMzYwMjQsMzYwMjUsMzYwMjYsMzYwMjcsMzYwMjgsMzYwMjksMzYwMzAsMzYwMzEsMzYwMzIsMzYwMzMsMzYwMzQsMzYwMzUsMzYwMzYsMzYwMzcsMzYwMzgsMzYwMzksMzYwNDAsMzYwNDEsMzYwNDIsMzYwNDMsMzYwNDQsMzYwNDUsMzYwNDYsMzYwNDcsMzYwNDgsMzYwNDksMzYwNTAsMzYwNTEsMzYwNTIsMzYwNTMsMzYwNTQsMzYwNTUsMzYwNTYsMzYwNTcsMzYwNTgsMzYwNTksMzYwNjAsMzYwNjEsMzYwNjIsMzYwNjMsMzYwNjQsMzYwNjUsMzYwNjYsMzYwNjcsMzYwNjgsMzYwNjksMzYwNzAsMzYwNzEsMzYwNzIsMzYwNzMsMzYwNzQsMzYwNzUsMzYwNzYsMzYwNzcsMzYwNzgsMzYwNzksMzYwODAsMzYwODEsMzYwODIsMzYwODMsMzYwODQsMzYwODUsMzYwODYsMzYwODcsMzYwODgsMzYwODksMzYwOTAsMzYwOTEsMzYwOTIsMzYwOTMsMzYwOTQsMzYwOTUsMzYwOTYsMzYwOTcsMzYwOTgsMzYwOTksMzYxMDAsMzYxMDEsMzYxMDIsMzYxMDMsMzYxMDQsMzYxMDUsMzYxMDYsMzYxMDcsMzYxMDgsMzYxMDksMjAzMTksMjAzMTEsMjAyNzQsMjAyODUsMjAzNDIsMjAzNDAsMjAzNjksMjAzNjEsMjAzNTUsMjAzNjcsMjAzNTAsMjAzNDcsMjAzOTQsMjAzNDgsMjAzOTYsMjAzNzIsMjA0NTQsMjA0NTYsMjA0NTgsMjA0MjEsMjA0NDIsMjA0NTEsMjA0NDQsMjA0MzMsMjA0NDcsMjA0NzIsMjA1MjEsMjA1NTYsMjA0NjcsMjA1MjQsMjA0OTUsMjA1MjYsMjA1MjUsMjA0NzgsMjA1MDgsMjA0OTIsMjA1MTcsMjA1MjAsMjA2MDYsMjA1NDcsMjA1NjUsMjA1NTIsMjA1NTgsMjA1ODgsMjA2MDMsMjA2NDUsMjA2NDcsMjA2NDksMjA2NjYsMjA2OTQsMjA3NDIsMjA3MTcsMjA3MTYsMjA3MTAsMjA3MTgsMjA3NDMsMjA3NDcsMjAxODksMjc3MDksMjAzMTIsMjAzMjUsMjA0MzAsNDA4NjQsMjc3MTgsMzE4NjAsMjA4NDYsMjQwNjEsNDA2NDksMzkzMjAsMjA4NjUsMjI4MDQsMjEyNDEsMjEyNjEsMzUzMzUsMjEyNjQsMjA5NzEsMjI4MDksMjA4MjEsMjAxMjgsMjA4MjIsMjAxNDcsMzQ5MjYsMzQ5ODAsMjAxNDksMzMwNDQsMzUwMjYsMzExMDQsMjMzNDgsMzQ4MTksMzI2OTYsMjA5MDcsMjA5MTMsMjA5MjUsMjA5MjQsMzYxMTAsMzYxMTEsMzYxMTIsMzYxMTMsMzYxMTQsMzYxMTUsMzYxMTYsMzYxMTcsMzYxMTgsMzYxMTksMzYxMjAsMzYxMjEsMzYxMjIsMzYxMjMsMzYxMjQsMzYxMjgsMzYxNzcsMzYxNzgsMzYxODMsMzYxOTEsMzYxOTcsMzYyMDAsMzYyMDEsMzYyMDIsMzYyMDQsMzYyMDYsMzYyMDcsMzYyMDksMzYyMTAsMzYyMTYsMzYyMTcsMzYyMTgsMzYyMTksMzYyMjAsMzYyMjEsMzYyMjIsMzYyMjMsMzYyMjQsMzYyMjYsMzYyMjcsMzYyMzAsMzYyMzEsMzYyMzIsMzYyMzMsMzYyMzYsMzYyMzcsMzYyMzgsMzYyMzksMzYyNDAsMzYyNDIsMzYyNDMsMzYyNDUsMzYyNDYsMzYyNDcsMzYyNDgsMzYyNDksMzYyNTAsMzYyNTEsMzYyNTIsMzYyNTMsMzYyNTQsMzYyNTYsMzYyNTcsMzYyNTgsMzYyNjAsMzYyNjEsMzYyNjIsMzYyNjMsMzYyNjQsMzYyNjUsMzYyNjYsMzYyNjcsMzYyNjgsMzYyNjksMzYyNzAsMzYyNzEsMzYyNzIsMzYyNzQsMzYyNzgsMzYyNzksMzYyODEsMzYyODMsMzYyODUsMzYyODgsMzYyODksMzYyOTAsMzYyOTMsMzYyOTUsMzYyOTYsMzYyOTcsMzYyOTgsMzYzMDEsMzYzMDQsMzYzMDYsMzYzMDcsMzYzMDgsMjA5MzUsMjA4ODYsMjA4OTgsMjA5MDEsMzU3NDQsMzU3NTAsMzU3NTEsMzU3NTQsMzU3NjQsMzU3NjUsMzU3NjcsMzU3NzgsMzU3NzksMzU3ODcsMzU3OTEsMzU3OTAsMzU3OTQsMzU3OTUsMzU3OTYsMzU3OTgsMzU4MDAsMzU4MDEsMzU4MDQsMzU4MDcsMzU4MDgsMzU4MTIsMzU4MTYsMzU4MTcsMzU4MjIsMzU4MjQsMzU4MjcsMzU4MzAsMzU4MzMsMzU4MzYsMzU4MzksMzU4NDAsMzU4NDIsMzU4NDQsMzU4NDcsMzU4NTIsMzU4NTUsMzU4NTcsMzU4NTgsMzU4NjAsMzU4NjEsMzU4NjIsMzU4NjUsMzU4NjcsMzU4NjQsMzU4NjksMzU4NzEsMzU4NzIsMzU4NzMsMzU4NzcsMzU4NzksMzU4ODIsMzU4ODMsMzU4ODYsMzU4ODcsMzU4OTAsMzU4OTEsMzU4OTMsMzU4OTQsMjEzNTMsMjEzNzAsMzg0MjksMzg0MzQsMzg0MzMsMzg0NDksMzg0NDIsMzg0NjEsMzg0NjAsMzg0NjYsMzg0NzMsMzg0ODQsMzg0OTUsMzg1MDMsMzg1MDgsMzg1MTQsMzg1MTYsMzg1MzYsMzg1NDEsMzg1NTEsMzg1NzYsMzcwMTUsMzcwMTksMzcwMjEsMzcwMTcsMzcwMzYsMzcwMjUsMzcwNDQsMzcwNDMsMzcwNDYsMzcwNTAsMzYzMDksMzYzMTIsMzYzMTMsMzYzMTYsMzYzMjAsMzYzMjEsMzYzMjIsMzYzMjUsMzYzMjYsMzYzMjcsMzYzMjksMzYzMzMsMzYzMzQsMzYzMzYsMzYzMzcsMzYzMzgsMzYzNDAsMzYzNDIsMzYzNDgsMzYzNTAsMzYzNTEsMzYzNTIsMzYzNTMsMzYzNTQsMzYzNTUsMzYzNTYsMzYzNTgsMzYzNTksMzYzNjAsMzYzNjMsMzYzNjUsMzYzNjYsMzYzNjgsMzYzNjksMzYzNzAsMzYzNzEsMzYzNzMsMzYzNzQsMzYzNzUsMzYzNzYsMzYzNzcsMzYzNzgsMzYzNzksMzYzODAsMzYzODQsMzYzODUsMzYzODgsMzYzODksMzYzOTAsMzYzOTEsMzYzOTIsMzYzOTUsMzYzOTcsMzY0MDAsMzY0MDIsMzY0MDMsMzY0MDQsMzY0MDYsMzY0MDcsMzY0MDgsMzY0MTEsMzY0MTIsMzY0MTQsMzY0MTUsMzY0MTksMzY0MjEsMzY0MjIsMzY0MjgsMzY0MjksMzY0MzAsMzY0MzEsMzY0MzIsMzY0MzUsMzY0MzYsMzY0MzcsMzY0MzgsMzY0MzksMzY0NDAsMzY0NDIsMzY0NDMsMzY0NDQsMzY0NDUsMzY0NDYsMzY0NDcsMzY0NDgsMzY0NDksMzY0NTAsMzY0NTEsMzY0NTIsMzY0NTMsMzY0NTUsMzY0NTYsMzY0NTgsMzY0NTksMzY0NjIsMzY0NjUsMzcwNDgsMzcwNDAsMzcwNzEsMzcwNjEsMzcwNTQsMzcwNzIsMzcwNjAsMzcwNjMsMzcwNzUsMzcwOTQsMzcwOTAsMzcwODQsMzcwNzksMzcwODMsMzcwOTksMzcxMDMsMzcxMTgsMzcxMjQsMzcxNTQsMzcxNTAsMzcxNTUsMzcxNjksMzcxNjcsMzcxNzcsMzcxODcsMzcxOTAsMjEwMDUsMjI4NTAsMjExNTQsMjExNjQsMjExNjUsMjExODIsMjE3NTksMjEyMDAsMjEyMDYsMjEyMzIsMjE0NzEsMjkxNjYsMzA2NjksMjQzMDgsMjA5ODEsMjA5ODgsMzk3MjcsMjE0MzAsMjQzMjEsMzAwNDIsMjQwNDcsMjIzNDgsMjI0NDEsMjI0MzMsMjI2NTQsMjI3MTYsMjI3MjUsMjI3MzcsMjIzMTMsMjIzMTYsMjIzMTQsMjIzMjMsMjIzMjksMjIzMTgsMjIzMTksMjIzNjQsMjIzMzEsMjIzMzgsMjIzNzcsMjI0MDUsMjIzNzksMjI0MDYsMjIzOTYsMjIzOTUsMjIzNzYsMjIzODEsMjIzOTAsMjIzODcsMjI0NDUsMjI0MzYsMjI0MTIsMjI0NTAsMjI0NzksMjI0MzksMjI0NTIsMjI0MTksMjI0MzIsMjI0ODUsMjI0ODgsMjI0OTAsMjI0ODksMjI0ODIsMjI0NTYsMjI1MTYsMjI1MTEsMjI1MjAsMjI1MDAsMjI0OTMsMzY0NjcsMzY0NjksMzY0NzEsMzY0NzIsMzY0NzMsMzY0NzQsMzY0NzUsMzY0NzcsMzY0NzgsMzY0ODAsMzY0ODIsMzY0ODMsMzY0ODQsMzY0ODYsMzY0ODgsMzY0ODksMzY0OTAsMzY0OTEsMzY0OTIsMzY0OTMsMzY0OTQsMzY0OTcsMzY0OTgsMzY0OTksMzY1MDEsMzY1MDIsMzY1MDMsMzY1MDQsMzY1MDUsMzY1MDYsMzY1MDcsMzY1MDksMzY1MTEsMzY1MTIsMzY1MTMsMzY1MTQsMzY1MTUsMzY1MTYsMzY1MTcsMzY1MTgsMzY1MTksMzY1MjAsMzY1MjEsMzY1MjIsMzY1MjUsMzY1MjYsMzY1MjgsMzY1MjksMzY1MzEsMzY1MzIsMzY1MzMsMzY1MzQsMzY1MzUsMzY1MzYsMzY1MzcsMzY1MzksMzY1NDAsMzY1NDEsMzY1NDIsMzY1NDMsMzY1NDQsMzY1NDUsMzY1NDYsMzY1NDcsMzY1NDgsMzY1NDksMzY1NTAsMzY1NTEsMzY1NTIsMzY1NTMsMzY1NTQsMzY1NTUsMzY1NTYsMzY1NTcsMzY1NTksMzY1NjAsMzY1NjEsMzY1NjIsMzY1NjMsMzY1NjQsMzY1NjUsMzY1NjYsMzY1NjcsMzY1NjgsMzY1NjksMzY1NzAsMzY1NzEsMzY1NzIsMzY1NzMsMzY1NzQsMzY1NzUsMzY1NzYsMzY1NzcsMzY1NzgsMzY1NzksMzY1ODAsMjI1MzksMjI1NDEsMjI1MjUsMjI1MDksMjI1MjgsMjI1NTgsMjI1NTMsMjI1OTYsMjI1NjAsMjI2MjksMjI2MzYsMjI2NTcsMjI2NjUsMjI2ODIsMjI2NTYsMzkzMzYsNDA3MjksMjUwODcsMzM0MDEsMzM0MDUsMzM0MDcsMzM0MjMsMzM0MTgsMzM0NDgsMzM0MTIsMzM0MjIsMzM0MjUsMzM0MzEsMzM0MzMsMzM0NTEsMzM0NjQsMzM0NzAsMzM0NTYsMzM0ODAsMzM0ODIsMzM1MDcsMzM0MzIsMzM0NjMsMzM0NTQsMzM0ODMsMzM0ODQsMzM0NzMsMzM0NDksMzM0NjAsMzM0NDEsMzM0NTAsMzM0MzksMzM0NzYsMzM0ODYsMzM0NDQsMzM1MDUsMzM1NDUsMzM1MjcsMzM1MDgsMzM1NTEsMzM1NDMsMzM1MDAsMzM1MjQsMzM0OTAsMzM0OTYsMzM1NDgsMzM1MzEsMzM0OTEsMzM1NTMsMzM1NjIsMzM1NDIsMzM1NTYsMzM1NTcsMzM1MDQsMzM0OTMsMzM1NjQsMzM2MTcsMzM2MjcsMzM2MjgsMzM1NDQsMzM2ODIsMzM1OTYsMzM1ODgsMzM1ODUsMzM2OTEsMzM2MzAsMzM1ODMsMzM2MTUsMzM2MDcsMzM2MDMsMzM2MzEsMzM2MDAsMzM1NTksMzM2MzIsMzM1ODEsMzM1OTQsMzM1ODcsMzM2MzgsMzM2MzcsMzY1ODEsMzY1ODIsMzY1ODMsMzY1ODQsMzY1ODUsMzY1ODYsMzY1ODcsMzY1ODgsMzY1ODksMzY1OTAsMzY1OTEsMzY1OTIsMzY1OTMsMzY1OTQsMzY1OTUsMzY1OTYsMzY1OTcsMzY1OTgsMzY1OTksMzY2MDAsMzY2MDEsMzY2MDIsMzY2MDMsMzY2MDQsMzY2MDUsMzY2MDYsMzY2MDcsMzY2MDgsMzY2MDksMzY2MTAsMzY2MTEsMzY2MTIsMzY2MTMsMzY2MTQsMzY2MTUsMzY2MTYsMzY2MTcsMzY2MTgsMzY2MTksMzY2MjAsMzY2MjEsMzY2MjIsMzY2MjMsMzY2MjQsMzY2MjUsMzY2MjYsMzY2MjcsMzY2MjgsMzY2MjksMzY2MzAsMzY2MzEsMzY2MzIsMzY2MzMsMzY2MzQsMzY2MzUsMzY2MzYsMzY2MzcsMzY2MzgsMzY2MzksMzY2NDAsMzY2NDEsMzY2NDIsMzY2NDMsMzY2NDQsMzY2NDUsMzY2NDYsMzY2NDcsMzY2NDgsMzY2NDksMzY2NTAsMzY2NTEsMzY2NTIsMzY2NTMsMzY2NTQsMzY2NTUsMzY2NTYsMzY2NTcsMzY2NTgsMzY2NTksMzY2NjAsMzY2NjEsMzY2NjIsMzY2NjMsMzY2NjQsMzY2NjUsMzY2NjYsMzY2NjcsMzY2NjgsMzY2NjksMzY2NzAsMzY2NzEsMzY2NzIsMzY2NzMsMzY2NzQsMzY2NzUsMzY2NzYsMzM2NDAsMzM1NjMsMzM2NDEsMzM2NDQsMzM2NDIsMzM2NDUsMzM2NDYsMzM3MTIsMzM2NTYsMzM3MTUsMzM3MTYsMzM2OTYsMzM3MDYsMzM2ODMsMzM2OTIsMzM2NjksMzM2NjAsMzM3MTgsMzM3MDUsMzM2NjEsMzM3MjAsMzM2NTksMzM2ODgsMzM2OTQsMzM3MDQsMzM3MjIsMzM3MjQsMzM3MjksMzM3OTMsMzM3NjUsMzM3NTIsMjI1MzUsMzM4MTYsMzM4MDMsMzM3NTcsMzM3ODksMzM3NTAsMzM4MjAsMzM4NDgsMzM4MDksMzM3OTgsMzM3NDgsMzM3NTksMzM4MDcsMzM3OTUsMzM3ODQsMzM3ODUsMzM3NzAsMzM3MzMsMzM3MjgsMzM4MzAsMzM3NzYsMzM3NjEsMzM4ODQsMzM4NzMsMzM4ODIsMzM4ODEsMzM5MDcsMzM5MjcsMzM5MjgsMzM5MTQsMzM5MjksMzM5MTIsMzM4NTIsMzM4NjIsMzM4OTcsMzM5MTAsMzM5MzIsMzM5MzQsMzM4NDEsMzM5MDEsMzM5ODUsMzM5OTcsMzQwMDAsMzQwMjIsMzM5ODEsMzQwMDMsMzM5OTQsMzM5ODMsMzM5NzgsMzQwMTYsMzM5NTMsMzM5NzcsMzM5NzIsMzM5NDMsMzQwMjEsMzQwMTksMzQwNjAsMjk5NjUsMzQxMDQsMzQwMzIsMzQxMDUsMzQwNzksMzQxMDYsMzY2NzcsMzY2NzgsMzY2NzksMzY2ODAsMzY2ODEsMzY2ODIsMzY2ODMsMzY2ODQsMzY2ODUsMzY2ODYsMzY2ODcsMzY2ODgsMzY2ODksMzY2OTAsMzY2OTEsMzY2OTIsMzY2OTMsMzY2OTQsMzY2OTUsMzY2OTYsMzY2OTcsMzY2OTgsMzY2OTksMzY3MDAsMzY3MDEsMzY3MDIsMzY3MDMsMzY3MDQsMzY3MDUsMzY3MDYsMzY3MDcsMzY3MDgsMzY3MDksMzY3MTQsMzY3MzYsMzY3NDgsMzY3NTQsMzY3NjUsMzY3NjgsMzY3NjksMzY3NzAsMzY3NzIsMzY3NzMsMzY3NzQsMzY3NzUsMzY3NzgsMzY3ODAsMzY3ODEsMzY3ODIsMzY3ODMsMzY3ODYsMzY3ODcsMzY3ODgsMzY3ODksMzY3OTEsMzY3OTIsMzY3OTQsMzY3OTUsMzY3OTYsMzY3OTksMzY4MDAsMzY4MDMsMzY4MDYsMzY4MDksMzY4MTAsMzY4MTEsMzY4MTIsMzY4MTMsMzY4MTUsMzY4MTgsMzY4MjIsMzY4MjMsMzY4MjYsMzY4MzIsMzY4MzMsMzY4MzUsMzY4MzksMzY4NDQsMzY4NDcsMzY4NDksMzY4NTAsMzY4NTIsMzY4NTMsMzY4NTQsMzY4NTgsMzY4NTksMzY4NjAsMzY4NjIsMzY4NjMsMzY4NzEsMzY4NzIsMzY4NzYsMzY4NzgsMzY4ODMsMzY4ODUsMzY4ODgsMzQxMzQsMzQxMDcsMzQwNDcsMzQwNDQsMzQxMzcsMzQxMjAsMzQxNTIsMzQxNDgsMzQxNDIsMzQxNzAsMzA2MjYsMzQxMTUsMzQxNjIsMzQxNzEsMzQyMTIsMzQyMTYsMzQxODMsMzQxOTEsMzQxNjksMzQyMjIsMzQyMDQsMzQxODEsMzQyMzMsMzQyMzEsMzQyMjQsMzQyNTksMzQyNDEsMzQyNjgsMzQzMDMsMzQzNDMsMzQzMDksMzQzNDUsMzQzMjYsMzQzNjQsMjQzMTgsMjQzMjgsMjI4NDQsMjI4NDksMzI4MjMsMjI4NjksMjI4NzQsMjI4NzIsMjEyNjMsMjM1ODYsMjM1ODksMjM1OTYsMjM2MDQsMjUxNjQsMjUxOTQsMjUyNDcsMjUyNzUsMjUyOTAsMjUzMDYsMjUzMDMsMjUzMjYsMjUzNzgsMjUzMzQsMjU0MDEsMjU0MTksMjU0MTEsMjU1MTcsMjU1OTAsMjU0NTcsMjU0NjYsMjU0ODYsMjU1MjQsMjU0NTMsMjU1MTYsMjU0ODIsMjU0NDksMjU1MTgsMjU1MzIsMjU1ODYsMjU1OTIsMjU1NjgsMjU1OTksMjU1NDAsMjU1NjYsMjU1NTAsMjU2ODIsMjU1NDIsMjU1MzQsMjU2NjksMjU2NjUsMjU2MTEsMjU2MjcsMjU2MzIsMjU2MTIsMjU2MzgsMjU2MzMsMjU2OTQsMjU3MzIsMjU3MDksMjU3NTAsMzY4ODksMzY4OTIsMzY4OTksMzY5MDAsMzY5MDEsMzY5MDMsMzY5MDQsMzY5MDUsMzY5MDYsMzY5MDcsMzY5MDgsMzY5MTIsMzY5MTMsMzY5MTQsMzY5MTUsMzY5MTYsMzY5MTksMzY5MjEsMzY5MjIsMzY5MjUsMzY5MjcsMzY5MjgsMzY5MzEsMzY5MzMsMzY5MzQsMzY5MzYsMzY5MzcsMzY5MzgsMzY5MzksMzY5NDAsMzY5NDIsMzY5NDgsMzY5NDksMzY5NTAsMzY5NTMsMzY5NTQsMzY5NTYsMzY5NTcsMzY5NTgsMzY5NTksMzY5NjAsMzY5NjEsMzY5NjQsMzY5NjYsMzY5NjcsMzY5NjksMzY5NzAsMzY5NzEsMzY5NzIsMzY5NzUsMzY5NzYsMzY5NzcsMzY5NzgsMzY5NzksMzY5ODIsMzY5ODMsMzY5ODQsMzY5ODUsMzY5ODYsMzY5ODcsMzY5ODgsMzY5OTAsMzY5OTMsMzY5OTYsMzY5OTcsMzY5OTgsMzY5OTksMzcwMDEsMzcwMDIsMzcwMDQsMzcwMDUsMzcwMDYsMzcwMDcsMzcwMDgsMzcwMTAsMzcwMTIsMzcwMTQsMzcwMTYsMzcwMTgsMzcwMjAsMzcwMjIsMzcwMjMsMzcwMjQsMzcwMjgsMzcwMjksMzcwMzEsMzcwMzIsMzcwMzMsMzcwMzUsMzcwMzcsMzcwNDIsMzcwNDcsMzcwNTIsMzcwNTMsMzcwNTUsMzcwNTYsMjU3MjIsMjU3ODMsMjU3ODQsMjU3NTMsMjU3ODYsMjU3OTIsMjU4MDgsMjU4MTUsMjU4MjgsMjU4MjYsMjU4NjUsMjU4OTMsMjU5MDIsMjQzMzEsMjQ1MzAsMjk5NzcsMjQzMzcsMjEzNDMsMjE0ODksMjE1MDEsMjE0ODEsMjE0ODAsMjE0OTksMjE1MjIsMjE1MjYsMjE1MTAsMjE1NzksMjE1ODYsMjE1ODcsMjE1ODgsMjE1OTAsMjE1NzEsMjE1MzcsMjE1OTEsMjE1OTMsMjE1MzksMjE1NTQsMjE2MzQsMjE2NTIsMjE2MjMsMjE2MTcsMjE2MDQsMjE2NTgsMjE2NTksMjE2MzYsMjE2MjIsMjE2MDYsMjE2NjEsMjE3MTIsMjE2NzcsMjE2OTgsMjE2ODQsMjE3MTQsMjE2NzEsMjE2NzAsMjE3MTUsMjE3MTYsMjE2MTgsMjE2NjcsMjE3MTcsMjE2OTEsMjE2OTUsMjE3MDgsMjE3MjEsMjE3MjIsMjE3MjQsMjE2NzMsMjE2NzQsMjE2NjgsMjE3MjUsMjE3MTEsMjE3MjYsMjE3ODcsMjE3MzUsMjE3OTIsMjE3NTcsMjE3ODAsMjE3NDcsMjE3OTQsMjE3OTUsMjE3NzUsMjE3NzcsMjE3OTksMjE4MDIsMjE4NjMsMjE5MDMsMjE5NDEsMjE4MzMsMjE4NjksMjE4MjUsMjE4NDUsMjE4MjMsMjE4NDAsMjE4MjAsMzcwNTgsMzcwNTksMzcwNjIsMzcwNjQsMzcwNjUsMzcwNjcsMzcwNjgsMzcwNjksMzcwNzQsMzcwNzYsMzcwNzcsMzcwNzgsMzcwODAsMzcwODEsMzcwODIsMzcwODYsMzcwODcsMzcwODgsMzcwOTEsMzcwOTIsMzcwOTMsMzcwOTcsMzcwOTgsMzcxMDAsMzcxMDIsMzcxMDQsMzcxMDUsMzcxMDYsMzcxMDcsMzcxMDksMzcxMTAsMzcxMTEsMzcxMTMsMzcxMTQsMzcxMTUsMzcxMTYsMzcxMTksMzcxMjAsMzcxMjEsMzcxMjMsMzcxMjUsMzcxMjYsMzcxMjcsMzcxMjgsMzcxMjksMzcxMzAsMzcxMzEsMzcxMzIsMzcxMzMsMzcxMzQsMzcxMzUsMzcxMzYsMzcxMzcsMzcxMzgsMzcxMzksMzcxNDAsMzcxNDEsMzcxNDIsMzcxNDMsMzcxNDQsMzcxNDYsMzcxNDcsMzcxNDgsMzcxNDksMzcxNTEsMzcxNTIsMzcxNTMsMzcxNTYsMzcxNTcsMzcxNTgsMzcxNTksMzcxNjAsMzcxNjEsMzcxNjIsMzcxNjMsMzcxNjQsMzcxNjUsMzcxNjYsMzcxNjgsMzcxNzAsMzcxNzEsMzcxNzIsMzcxNzMsMzcxNzQsMzcxNzUsMzcxNzYsMzcxNzgsMzcxNzksMzcxODAsMzcxODEsMzcxODIsMzcxODMsMzcxODQsMzcxODUsMzcxODYsMzcxODgsMjE4MTUsMjE4NDYsMjE4NzcsMjE4NzgsMjE4NzksMjE4MTEsMjE4MDgsMjE4NTIsMjE4OTksMjE5NzAsMjE4OTEsMjE5MzcsMjE5NDUsMjE4OTYsMjE4ODksMjE5MTksMjE4ODYsMjE5NzQsMjE5MDUsMjE4ODMsMjE5ODMsMjE5NDksMjE5NTAsMjE5MDgsMjE5MTMsMjE5OTQsMjIwMDcsMjE5NjEsMjIwNDcsMjE5NjksMjE5OTUsMjE5OTYsMjE5NzIsMjE5OTAsMjE5ODEsMjE5NTYsMjE5OTksMjE5ODksMjIwMDIsMjIwMDMsMjE5NjQsMjE5NjUsMjE5OTIsMjIwMDUsMjE5ODgsMzY3NTYsMjIwNDYsMjIwMjQsMjIwMjgsMjIwMTcsMjIwNTIsMjIwNTEsMjIwMTQsMjIwMTYsMjIwNTUsMjIwNjEsMjIxMDQsMjIwNzMsMjIxMDMsMjIwNjAsMjIwOTMsMjIxMTQsMjIxMDUsMjIxMDgsMjIwOTIsMjIxMDAsMjIxNTAsMjIxMTYsMjIxMjksMjIxMjMsMjIxMzksMjIxNDAsMjIxNDksMjIxNjMsMjIxOTEsMjIyMjgsMjIyMzEsMjIyMzcsMjIyNDEsMjIyNjEsMjIyNTEsMjIyNjUsMjIyNzEsMjIyNzYsMjIyODIsMjIyODEsMjIzMDAsMjQwNzksMjQwODksMjQwODQsMjQwODEsMjQxMTMsMjQxMjMsMjQxMjQsMzcxODksMzcxOTEsMzcxOTIsMzcyMDEsMzcyMDMsMzcyMDQsMzcyMDUsMzcyMDYsMzcyMDgsMzcyMDksMzcyMTEsMzcyMTIsMzcyMTUsMzcyMTYsMzcyMjIsMzcyMjMsMzcyMjQsMzcyMjcsMzcyMjksMzcyMzUsMzcyNDIsMzcyNDMsMzcyNDQsMzcyNDgsMzcyNDksMzcyNTAsMzcyNTEsMzcyNTIsMzcyNTQsMzcyNTYsMzcyNTgsMzcyNjIsMzcyNjMsMzcyNjcsMzcyNjgsMzcyNjksMzcyNzAsMzcyNzEsMzcyNzIsMzcyNzMsMzcyNzYsMzcyNzcsMzcyNzgsMzcyNzksMzcyODAsMzcyODEsMzcyODQsMzcyODUsMzcyODYsMzcyODcsMzcyODgsMzcyODksMzcyOTEsMzcyOTIsMzcyOTYsMzcyOTcsMzcyOTgsMzcyOTksMzczMDIsMzczMDMsMzczMDQsMzczMDUsMzczMDcsMzczMDgsMzczMDksMzczMTAsMzczMTEsMzczMTIsMzczMTMsMzczMTQsMzczMTUsMzczMTYsMzczMTcsMzczMTgsMzczMjAsMzczMjMsMzczMjgsMzczMzAsMzczMzEsMzczMzIsMzczMzMsMzczMzQsMzczMzUsMzczMzYsMzczMzcsMzczMzgsMzczMzksMzczNDEsMzczNDIsMzczNDMsMzczNDQsMzczNDUsMzczNDYsMzczNDcsMzczNDgsMzczNDksMjQxMTksMjQxMzIsMjQxNDgsMjQxNTUsMjQxNTgsMjQxNjEsMjM2OTIsMjM2NzQsMjM2OTMsMjM2OTYsMjM3MDIsMjM2ODgsMjM3MDQsMjM3MDUsMjM2OTcsMjM3MDYsMjM3MDgsMjM3MzMsMjM3MTQsMjM3NDEsMjM3MjQsMjM3MjMsMjM3MjksMjM3MTUsMjM3NDUsMjM3MzUsMjM3NDgsMjM3NjIsMjM3ODAsMjM3NTUsMjM3ODEsMjM4MTAsMjM4MTEsMjM4NDcsMjM4NDYsMjM4NTQsMjM4NDQsMjM4MzgsMjM4MTQsMjM4MzUsMjM4OTYsMjM4NzAsMjM4NjAsMjM4NjksMjM5MTYsMjM4OTksMjM5MTksMjM5MDEsMjM5MTUsMjM4ODMsMjM4ODIsMjM5MTMsMjM5MjQsMjM5MzgsMjM5NjEsMjM5NjUsMzU5NTUsMjM5OTEsMjQwMDUsMjQ0MzUsMjQ0MzksMjQ0NTAsMjQ0NTUsMjQ0NTcsMjQ0NjAsMjQ0NjksMjQ0NzMsMjQ0NzYsMjQ0ODgsMjQ0OTMsMjQ1MDEsMjQ1MDgsMzQ5MTQsMjQ0MTcsMjkzNTcsMjkzNjAsMjkzNjQsMjkzNjcsMjkzNjgsMjkzNzksMjkzNzcsMjkzOTAsMjkzODksMjkzOTQsMjk0MTYsMjk0MjMsMjk0MTcsMjk0MjYsMjk0MjgsMjk0MzEsMjk0NDEsMjk0MjcsMjk0NDMsMjk0MzQsMzczNTAsMzczNTEsMzczNTIsMzczNTMsMzczNTQsMzczNTUsMzczNTYsMzczNTcsMzczNTgsMzczNTksMzczNjAsMzczNjEsMzczNjIsMzczNjMsMzczNjQsMzczNjUsMzczNjYsMzczNjcsMzczNjgsMzczNjksMzczNzAsMzczNzEsMzczNzIsMzczNzMsMzczNzQsMzczNzUsMzczNzYsMzczNzcsMzczNzgsMzczNzksMzczODAsMzczODEsMzczODIsMzczODMsMzczODQsMzczODUsMzczODYsMzczODcsMzczODgsMzczODksMzczOTAsMzczOTEsMzczOTIsMzczOTMsMzczOTQsMzczOTUsMzczOTYsMzczOTcsMzczOTgsMzczOTksMzc0MDAsMzc0MDEsMzc0MDIsMzc0MDMsMzc0MDQsMzc0MDUsMzc0MDYsMzc0MDcsMzc0MDgsMzc0MDksMzc0MTAsMzc0MTEsMzc0MTIsMzc0MTMsMzc0MTQsMzc0MTUsMzc0MTYsMzc0MTcsMzc0MTgsMzc0MTksMzc0MjAsMzc0MjEsMzc0MjIsMzc0MjMsMzc0MjQsMzc0MjUsMzc0MjYsMzc0MjcsMzc0MjgsMzc0MjksMzc0MzAsMzc0MzEsMzc0MzIsMzc0MzMsMzc0MzQsMzc0MzUsMzc0MzYsMzc0MzcsMzc0MzgsMzc0MzksMzc0NDAsMzc0NDEsMzc0NDIsMzc0NDMsMzc0NDQsMzc0NDUsMjk0MzUsMjk0NjMsMjk0NTksMjk0NzMsMjk0NTAsMjk0NzAsMjk0NjksMjk0NjEsMjk0NzQsMjk0OTcsMjk0NzcsMjk0ODQsMjk0OTYsMjk0ODksMjk1MjAsMjk1MTcsMjk1MjcsMjk1MzYsMjk1NDgsMjk1NTEsMjk1NjYsMzMzMDcsMjI4MjEsMzkxNDMsMjI4MjAsMjI3ODYsMzkyNjcsMzkyNzEsMzkyNzIsMzkyNzMsMzkyNzQsMzkyNzUsMzkyNzYsMzkyODQsMzkyODcsMzkyOTMsMzkyOTYsMzkzMDAsMzkzMDMsMzkzMDYsMzkzMDksMzkzMTIsMzkzMTMsMzkzMTUsMzkzMTYsMzkzMTcsMjQxOTIsMjQyMDksMjQyMDMsMjQyMTQsMjQyMjksMjQyMjQsMjQyNDksMjQyNDUsMjQyNTQsMjQyNDMsMzYxNzksMjQyNzQsMjQyNzMsMjQyODMsMjQyOTYsMjQyOTgsMzMyMTAsMjQ1MTYsMjQ1MjEsMjQ1MzQsMjQ1MjcsMjQ1NzksMjQ1NTgsMjQ1ODAsMjQ1NDUsMjQ1NDgsMjQ1NzQsMjQ1ODEsMjQ1ODIsMjQ1NTQsMjQ1NTcsMjQ1NjgsMjQ2MDEsMjQ2MjksMjQ2MTQsMjQ2MDMsMjQ1OTEsMjQ1ODksMjQ2MTcsMjQ2MTksMjQ1ODYsMjQ2MzksMjQ2MDksMjQ2OTYsMjQ2OTcsMjQ2OTksMjQ2OTgsMjQ2NDIsMzc0NDYsMzc0NDcsMzc0NDgsMzc0NDksMzc0NTAsMzc0NTEsMzc0NTIsMzc0NTMsMzc0NTQsMzc0NTUsMzc0NTYsMzc0NTcsMzc0NTgsMzc0NTksMzc0NjAsMzc0NjEsMzc0NjIsMzc0NjMsMzc0NjQsMzc0NjUsMzc0NjYsMzc0NjcsMzc0NjgsMzc0NjksMzc0NzAsMzc0NzEsMzc0NzIsMzc0NzMsMzc0NzQsMzc0NzUsMzc0NzYsMzc0NzcsMzc0NzgsMzc0NzksMzc0ODAsMzc0ODEsMzc0ODIsMzc0ODMsMzc0ODQsMzc0ODUsMzc0ODYsMzc0ODcsMzc0ODgsMzc0ODksMzc0OTAsMzc0OTEsMzc0OTMsMzc0OTQsMzc0OTUsMzc0OTYsMzc0OTcsMzc0OTgsMzc0OTksMzc1MDAsMzc1MDEsMzc1MDIsMzc1MDMsMzc1MDQsMzc1MDUsMzc1MDYsMzc1MDcsMzc1MDgsMzc1MDksMzc1MTAsMzc1MTEsMzc1MTIsMzc1MTMsMzc1MTQsMzc1MTUsMzc1MTYsMzc1MTcsMzc1MTksMzc1MjAsMzc1MjEsMzc1MjIsMzc1MjMsMzc1MjQsMzc1MjUsMzc1MjYsMzc1MjcsMzc1MjgsMzc1MjksMzc1MzAsMzc1MzEsMzc1MzIsMzc1MzMsMzc1MzQsMzc1MzUsMzc1MzYsMzc1MzcsMzc1MzgsMzc1MzksMzc1NDAsMzc1NDEsMzc1NDIsMzc1NDMsMjQ2ODIsMjQ3MDEsMjQ3MjYsMjQ3MzAsMjQ3NDksMjQ3MzMsMjQ3MDcsMjQ3MjIsMjQ3MTYsMjQ3MzEsMjQ4MTIsMjQ3NjMsMjQ3NTMsMjQ3OTcsMjQ3OTIsMjQ3NzQsMjQ3OTQsMjQ3NTYsMjQ4NjQsMjQ4NzAsMjQ4NTMsMjQ4NjcsMjQ4MjAsMjQ4MzIsMjQ4NDYsMjQ4NzUsMjQ5MDYsMjQ5NDksMjUwMDQsMjQ5ODAsMjQ5OTksMjUwMTUsMjUwNDQsMjUwNzcsMjQ1NDEsMzg1NzksMzgzNzcsMzgzNzksMzgzODUsMzgzODcsMzgzODksMzgzOTAsMzgzOTYsMzgzOTgsMzg0MDMsMzg0MDQsMzg0MDYsMzg0MDgsMzg0MTAsMzg0MTEsMzg0MTIsMzg0MTMsMzg0MTUsMzg0MTgsMzg0MjEsMzg0MjIsMzg0MjMsMzg0MjUsMzg0MjYsMjAwMTIsMjkyNDcsMjUxMDksMjc3MDEsMjc3MzIsMjc3NDAsMjc3MjIsMjc4MTEsMjc3ODEsMjc3OTIsMjc3OTYsMjc3ODgsMjc3NTIsMjc3NTMsMjc3NjQsMjc3NjYsMjc3ODIsMjc4MTcsMjc4NTYsMjc4NjAsMjc4MjEsMjc4OTUsMjc4OTYsMjc4ODksMjc4NjMsMjc4MjYsMjc4NzIsMjc4NjIsMjc4OTgsMjc4ODMsMjc4ODYsMjc4MjUsMjc4NTksMjc4ODcsMjc5MDIsMzc1NDQsMzc1NDUsMzc1NDYsMzc1NDcsMzc1NDgsMzc1NDksMzc1NTEsMzc1NTIsMzc1NTMsMzc1NTQsMzc1NTUsMzc1NTYsMzc1NTcsMzc1NTgsMzc1NTksMzc1NjAsMzc1NjEsMzc1NjIsMzc1NjMsMzc1NjQsMzc1NjUsMzc1NjYsMzc1NjcsMzc1NjgsMzc1NjksMzc1NzAsMzc1NzEsMzc1NzIsMzc1NzMsMzc1NzQsMzc1NzUsMzc1NzcsMzc1NzgsMzc1NzksMzc1ODAsMzc1ODEsMzc1ODIsMzc1ODMsMzc1ODQsMzc1ODUsMzc1ODYsMzc1ODcsMzc1ODgsMzc1ODksMzc1OTAsMzc1OTEsMzc1OTIsMzc1OTMsMzc1OTQsMzc1OTUsMzc1OTYsMzc1OTcsMzc1OTgsMzc1OTksMzc2MDAsMzc2MDEsMzc2MDIsMzc2MDMsMzc2MDQsMzc2MDUsMzc2MDYsMzc2MDcsMzc2MDgsMzc2MDksMzc2MTAsMzc2MTEsMzc2MTIsMzc2MTMsMzc2MTQsMzc2MTUsMzc2MTYsMzc2MTcsMzc2MTgsMzc2MTksMzc2MjAsMzc2MjEsMzc2MjIsMzc2MjMsMzc2MjQsMzc2MjUsMzc2MjYsMzc2MjcsMzc2MjgsMzc2MjksMzc2MzAsMzc2MzEsMzc2MzIsMzc2MzMsMzc2MzQsMzc2MzUsMzc2MzYsMzc2MzcsMzc2MzgsMzc2MzksMzc2NDAsMzc2NDEsMjc5NjEsMjc5NDMsMjc5MTYsMjc5NzEsMjc5NzYsMjc5MTEsMjc5MDgsMjc5MjksMjc5MTgsMjc5NDcsMjc5ODEsMjc5NTAsMjc5NTcsMjc5MzAsMjc5ODMsMjc5ODYsMjc5ODgsMjc5NTUsMjgwNDksMjgwMTUsMjgwNjIsMjgwNjQsMjc5OTgsMjgwNTEsMjgwNTIsMjc5OTYsMjgwMDAsMjgwMjgsMjgwMDMsMjgxODYsMjgxMDMsMjgxMDEsMjgxMjYsMjgxNzQsMjgwOTUsMjgxMjgsMjgxNzcsMjgxMzQsMjgxMjUsMjgxMjEsMjgxODIsMjgwNzUsMjgxNzIsMjgwNzgsMjgyMDMsMjgyNzAsMjgyMzgsMjgyNjcsMjgzMzgsMjgyNTUsMjgyOTQsMjgyNDMsMjgyNDQsMjgyMTAsMjgxOTcsMjgyMjgsMjgzODMsMjgzMzcsMjgzMTIsMjgzODQsMjg0NjEsMjgzODYsMjgzMjUsMjgzMjcsMjgzNDksMjgzNDcsMjgzNDMsMjgzNzUsMjgzNDAsMjgzNjcsMjgzMDMsMjgzNTQsMjgzMTksMjg1MTQsMjg0ODYsMjg0ODcsMjg0NTIsMjg0MzcsMjg0MDksMjg0NjMsMjg0NzAsMjg0OTEsMjg1MzIsMjg0NTgsMjg0MjUsMjg0NTcsMjg1NTMsMjg1NTcsMjg1NTYsMjg1MzYsMjg1MzAsMjg1NDAsMjg1MzgsMjg2MjUsMzc2NDIsMzc2NDMsMzc2NDQsMzc2NDUsMzc2NDYsMzc2NDcsMzc2NDgsMzc2NDksMzc2NTAsMzc2NTEsMzc2NTIsMzc2NTMsMzc2NTQsMzc2NTUsMzc2NTYsMzc2NTcsMzc2NTgsMzc2NTksMzc2NjAsMzc2NjEsMzc2NjIsMzc2NjMsMzc2NjQsMzc2NjUsMzc2NjYsMzc2NjcsMzc2NjgsMzc2NjksMzc2NzAsMzc2NzEsMzc2NzIsMzc2NzMsMzc2NzQsMzc2NzUsMzc2NzYsMzc2NzcsMzc2NzgsMzc2NzksMzc2ODAsMzc2ODEsMzc2ODIsMzc2ODMsMzc2ODQsMzc2ODUsMzc2ODYsMzc2ODcsMzc2ODgsMzc2ODksMzc2OTAsMzc2OTEsMzc2OTIsMzc2OTMsMzc2OTUsMzc2OTYsMzc2OTcsMzc2OTgsMzc2OTksMzc3MDAsMzc3MDEsMzc3MDIsMzc3MDMsMzc3MDQsMzc3MDUsMzc3MDYsMzc3MDcsMzc3MDgsMzc3MDksMzc3MTAsMzc3MTEsMzc3MTIsMzc3MTMsMzc3MTQsMzc3MTUsMzc3MTYsMzc3MTcsMzc3MTgsMzc3MTksMzc3MjAsMzc3MjEsMzc3MjIsMzc3MjMsMzc3MjQsMzc3MjUsMzc3MjYsMzc3MjcsMzc3MjgsMzc3MjksMzc3MzAsMzc3MzEsMzc3MzIsMzc3MzMsMzc3MzQsMzc3MzUsMzc3MzYsMzc3MzcsMzc3MzksMjg2MTcsMjg1ODMsMjg2MDEsMjg1OTgsMjg2MTAsMjg2NDEsMjg2NTQsMjg2MzgsMjg2NDAsMjg2NTUsMjg2OTgsMjg3MDcsMjg2OTksMjg3MjksMjg3MjUsMjg3NTEsMjg3NjYsMjM0MjQsMjM0MjgsMjM0NDUsMjM0NDMsMjM0NjEsMjM0ODAsMjk5OTksMzk1ODIsMjU2NTIsMjM1MjQsMjM1MzQsMzUxMjAsMjM1MzYsMzY0MjMsMzU1OTEsMzY3OTAsMzY4MTksMzY4MjEsMzY4MzcsMzY4NDYsMzY4MzYsMzY4NDEsMzY4MzgsMzY4NTEsMzY4NDAsMzY4NjksMzY4NjgsMzY4NzUsMzY5MDIsMzY4ODEsMzY4NzcsMzY4ODYsMzY4OTcsMzY5MTcsMzY5MTgsMzY5MDksMzY5MTEsMzY5MzIsMzY5NDUsMzY5NDYsMzY5NDQsMzY5NjgsMzY5NTIsMzY5NjIsMzY5NTUsMjYyOTcsMzY5ODAsMzY5ODksMzY5OTQsMzcwMDAsMzY5OTUsMzcwMDMsMjQ0MDAsMjQ0MDcsMjQ0MDYsMjQ0MDgsMjM2MTEsMjE2NzUsMjM2MzIsMjM2NDEsMjM0MDksMjM2NTEsMjM2NTQsMzI3MDAsMjQzNjIsMjQzNjEsMjQzNjUsMzMzOTYsMjQzODAsMzk3MzksMjM2NjIsMjI5MTMsMjI5MTUsMjI5MjUsMjI5NTMsMjI5NTQsMjI5NDcsMzc3NDAsMzc3NDEsMzc3NDIsMzc3NDMsMzc3NDQsMzc3NDUsMzc3NDYsMzc3NDcsMzc3NDgsMzc3NDksMzc3NTAsMzc3NTEsMzc3NTIsMzc3NTMsMzc3NTQsMzc3NTUsMzc3NTYsMzc3NTcsMzc3NTgsMzc3NTksMzc3NjAsMzc3NjEsMzc3NjIsMzc3NjMsMzc3NjQsMzc3NjUsMzc3NjYsMzc3NjcsMzc3NjgsMzc3NjksMzc3NzAsMzc3NzEsMzc3NzIsMzc3NzMsMzc3NzQsMzc3NzYsMzc3NzcsMzc3NzgsMzc3NzksMzc3ODAsMzc3ODEsMzc3ODIsMzc3ODMsMzc3ODQsMzc3ODUsMzc3ODYsMzc3ODcsMzc3ODgsMzc3ODksMzc3OTAsMzc3OTEsMzc3OTIsMzc3OTMsMzc3OTQsMzc3OTUsMzc3OTYsMzc3OTcsMzc3OTgsMzc3OTksMzc4MDAsMzc4MDEsMzc4MDIsMzc4MDMsMzc4MDQsMzc4MDUsMzc4MDYsMzc4MDcsMzc4MDgsMzc4MDksMzc4MTAsMzc4MTEsMzc4MTIsMzc4MTMsMzc4MTQsMzc4MTUsMzc4MTYsMzc4MTcsMzc4MTgsMzc4MTksMzc4MjAsMzc4MjEsMzc4MjIsMzc4MjMsMzc4MjQsMzc4MjUsMzc4MjYsMzc4MjcsMzc4MjgsMzc4MjksMzc4MzAsMzc4MzEsMzc4MzIsMzc4MzMsMzc4MzUsMzc4MzYsMzc4MzcsMjI5MzUsMjI5ODYsMjI5NTUsMjI5NDIsMjI5NDgsMjI5OTQsMjI5NjIsMjI5NTksMjI5OTksMjI5NzQsMjMwNDUsMjMwNDYsMjMwMDUsMjMwNDgsMjMwMTEsMjMwMDAsMjMwMzMsMjMwNTIsMjMwNDksMjMwOTAsMjMwOTIsMjMwNTcsMjMwNzUsMjMwNTksMjMxMDQsMjMxNDMsMjMxMTQsMjMxMjUsMjMxMDAsMjMxMzgsMjMxNTcsMzMwMDQsMjMyMTAsMjMxOTUsMjMxNTksMjMxNjIsMjMyMzAsMjMyNzUsMjMyMTgsMjMyNTAsMjMyNTIsMjMyMjQsMjMyNjQsMjMyNjcsMjMyODEsMjMyNTQsMjMyNzAsMjMyNTYsMjMyNjAsMjMzMDUsMjMzMTksMjMzMTgsMjMzNDYsMjMzNTEsMjMzNjAsMjM1NzMsMjM1ODAsMjMzODYsMjMzOTcsMjM0MTEsMjMzNzcsMjMzNzksMjMzOTQsMzk1NDEsMzk1NDMsMzk1NDQsMzk1NDYsMzk1NTEsMzk1NDksMzk1NTIsMzk1NTMsMzk1NTcsMzk1NjAsMzk1NjIsMzk1NjgsMzk1NzAsMzk1NzEsMzk1NzQsMzk1NzYsMzk1NzksMzk1ODAsMzk1ODEsMzk1ODMsMzk1ODQsMzk1ODYsMzk1ODcsMzk1ODksMzk1OTEsMzI0MTUsMzI0MTcsMzI0MTksMzI0MjEsMzI0MjQsMzI0MjUsMzc4MzgsMzc4MzksMzc4NDAsMzc4NDEsMzc4NDIsMzc4NDMsMzc4NDQsMzc4NDUsMzc4NDcsMzc4NDgsMzc4NDksMzc4NTAsMzc4NTEsMzc4NTIsMzc4NTMsMzc4NTQsMzc4NTUsMzc4NTYsMzc4NTcsMzc4NTgsMzc4NTksMzc4NjAsMzc4NjEsMzc4NjIsMzc4NjMsMzc4NjQsMzc4NjUsMzc4NjYsMzc4NjcsMzc4NjgsMzc4NjksMzc4NzAsMzc4NzEsMzc4NzIsMzc4NzMsMzc4NzQsMzc4NzUsMzc4NzYsMzc4NzcsMzc4NzgsMzc4NzksMzc4ODAsMzc4ODEsMzc4ODIsMzc4ODMsMzc4ODQsMzc4ODUsMzc4ODYsMzc4ODcsMzc4ODgsMzc4ODksMzc4OTAsMzc4OTEsMzc4OTIsMzc4OTMsMzc4OTQsMzc4OTUsMzc4OTYsMzc4OTcsMzc4OTgsMzc4OTksMzc5MDAsMzc5MDEsMzc5MDIsMzc5MDMsMzc5MDQsMzc5MDUsMzc5MDYsMzc5MDcsMzc5MDgsMzc5MDksMzc5MTAsMzc5MTEsMzc5MTIsMzc5MTMsMzc5MTQsMzc5MTUsMzc5MTYsMzc5MTcsMzc5MTgsMzc5MTksMzc5MjAsMzc5MjEsMzc5MjIsMzc5MjMsMzc5MjQsMzc5MjUsMzc5MjYsMzc5MjcsMzc5MjgsMzc5MjksMzc5MzAsMzc5MzEsMzc5MzIsMzc5MzMsMzc5MzQsMzI0MjksMzI0MzIsMzI0NDYsMzI0NDgsMzI0NDksMzI0NTAsMzI0NTcsMzI0NTksMzI0NjAsMzI0NjQsMzI0NjgsMzI0NzEsMzI0NzUsMzI0ODAsMzI0ODEsMzI0ODgsMzI0OTEsMzI0OTQsMzI0OTUsMzI0OTcsMzI0OTgsMzI1MjUsMzI1MDIsMzI1MDYsMzI1MDcsMzI1MTAsMzI1MTMsMzI1MTQsMzI1MTUsMzI1MTksMzI1MjAsMzI1MjMsMzI1MjQsMzI1MjcsMzI1MjksMzI1MzAsMzI1MzUsMzI1MzcsMzI1NDAsMzI1MzksMzI1NDMsMzI1NDUsMzI1NDYsMzI1NDcsMzI1NDgsMzI1NDksMzI1NTAsMzI1NTEsMzI1NTQsMzI1NTUsMzI1NTYsMzI1NTcsMzI1NTksMzI1NjAsMzI1NjEsMzI1NjIsMzI1NjMsMzI1NjUsMjQxODYsMzAwNzksMjQwMjcsMzAwMTQsMzcwMTMsMjk1ODIsMjk1ODUsMjk2MTQsMjk2MDIsMjk1OTksMjk2NDcsMjk2MzQsMjk2NDksMjk2MjMsMjk2MTksMjk2MzIsMjk2NDEsMjk2NDAsMjk2NjksMjk2NTcsMzkwMzYsMjk3MDYsMjk2NzMsMjk2NzEsMjk2NjIsMjk2MjYsMjk2ODIsMjk3MTEsMjk3MzgsMjk3ODcsMjk3MzQsMjk3MzMsMjk3MzYsMjk3NDQsMjk3NDIsMjk3NDAsMzc5MzUsMzc5MzYsMzc5MzcsMzc5MzgsMzc5MzksMzc5NDAsMzc5NDEsMzc5NDIsMzc5NDMsMzc5NDQsMzc5NDUsMzc5NDYsMzc5NDcsMzc5NDgsMzc5NDksMzc5NTEsMzc5NTIsMzc5NTMsMzc5NTQsMzc5NTUsMzc5NTYsMzc5NTcsMzc5NTgsMzc5NTksMzc5NjAsMzc5NjEsMzc5NjIsMzc5NjMsMzc5NjQsMzc5NjUsMzc5NjYsMzc5NjcsMzc5NjgsMzc5NjksMzc5NzAsMzc5NzEsMzc5NzIsMzc5NzMsMzc5NzQsMzc5NzUsMzc5NzYsMzc5NzcsMzc5NzgsMzc5NzksMzc5ODAsMzc5ODEsMzc5ODIsMzc5ODMsMzc5ODQsMzc5ODUsMzc5ODYsMzc5ODcsMzc5ODgsMzc5ODksMzc5OTAsMzc5OTEsMzc5OTIsMzc5OTMsMzc5OTQsMzc5OTYsMzc5OTcsMzc5OTgsMzc5OTksMzgwMDAsMzgwMDEsMzgwMDIsMzgwMDMsMzgwMDQsMzgwMDUsMzgwMDYsMzgwMDcsMzgwMDgsMzgwMDksMzgwMTAsMzgwMTEsMzgwMTIsMzgwMTMsMzgwMTQsMzgwMTUsMzgwMTYsMzgwMTcsMzgwMTgsMzgwMTksMzgwMjAsMzgwMzMsMzgwMzgsMzgwNDAsMzgwODcsMzgwOTUsMzgwOTksMzgxMDAsMzgxMDYsMzgxMTgsMzgxMzksMzgxNzIsMzgxNzYsMjk3MjMsMjk3MjIsMjk3NjEsMjk3ODgsMjk3ODMsMjk3ODEsMjk3ODUsMjk4MTUsMjk4MDUsMjk4MjIsMjk4NTIsMjk4MzgsMjk4MjQsMjk4MjUsMjk4MzEsMjk4MzUsMjk4NTQsMjk4NjQsMjk4NjUsMjk4NDAsMjk4NjMsMjk5MDYsMjk4ODIsMzg4OTAsMzg4OTEsMzg4OTIsMjY0NDQsMjY0NTEsMjY0NjIsMjY0NDAsMjY0NzMsMjY1MzMsMjY1MDMsMjY0NzQsMjY0ODMsMjY1MjAsMjY1MzUsMjY0ODUsMjY1MzYsMjY1MjYsMjY1NDEsMjY1MDcsMjY0ODcsMjY0OTIsMjY2MDgsMjY2MzMsMjY1ODQsMjY2MzQsMjY2MDEsMjY1NDQsMjY2MzYsMjY1ODUsMjY1NDksMjY1ODYsMjY1NDcsMjY1ODksMjY2MjQsMjY1NjMsMjY1NTIsMjY1OTQsMjY2MzgsMjY1NjEsMjY2MjEsMjY2NzQsMjY2NzUsMjY3MjAsMjY3MjEsMjY3MDIsMjY3MjIsMjY2OTIsMjY3MjQsMjY3NTUsMjY2NTMsMjY3MDksMjY3MjYsMjY2ODksMjY3MjcsMjY2ODgsMjY2ODYsMjY2OTgsMjY2OTcsMjY2NjUsMjY4MDUsMjY3NjcsMjY3NDAsMjY3NDMsMjY3NzEsMjY3MzEsMjY4MTgsMjY5OTAsMjY4NzYsMjY5MTEsMjY5MTIsMjY4NzMsMzgxODMsMzgxOTUsMzgyMDUsMzgyMTEsMzgyMTYsMzgyMTksMzgyMjksMzgyMzQsMzgyNDAsMzgyNTQsMzgyNjAsMzgyNjEsMzgyNjMsMzgyNjQsMzgyNjUsMzgyNjYsMzgyNjcsMzgyNjgsMzgyNjksMzgyNzAsMzgyNzIsMzgyNzMsMzgyNzQsMzgyNzUsMzgyNzYsMzgyNzcsMzgyNzgsMzgyNzksMzgyODAsMzgyODEsMzgyODIsMzgyODMsMzgyODQsMzgyODUsMzgyODYsMzgyODcsMzgyODgsMzgyODksMzgyOTAsMzgyOTEsMzgyOTIsMzgyOTMsMzgyOTQsMzgyOTUsMzgyOTYsMzgyOTcsMzgyOTgsMzgyOTksMzgzMDAsMzgzMDEsMzgzMDIsMzgzMDMsMzgzMDQsMzgzMDUsMzgzMDYsMzgzMDcsMzgzMDgsMzgzMDksMzgzMTAsMzgzMTEsMzgzMTIsMzgzMTMsMzgzMTQsMzgzMTUsMzgzMTYsMzgzMTcsMzgzMTgsMzgzMTksMzgzMjAsMzgzMjEsMzgzMjIsMzgzMjMsMzgzMjQsMzgzMjUsMzgzMjYsMzgzMjcsMzgzMjgsMzgzMjksMzgzMzAsMzgzMzEsMzgzMzIsMzgzMzMsMzgzMzQsMzgzMzUsMzgzMzYsMzgzMzcsMzgzMzgsMzgzMzksMzgzNDAsMzgzNDEsMzgzNDIsMzgzNDMsMzgzNDQsMzgzNDUsMzgzNDYsMzgzNDcsMjY5MTYsMjY4NjQsMjY4OTEsMjY4ODEsMjY5NjcsMjY4NTEsMjY4OTYsMjY5OTMsMjY5MzcsMjY5NzYsMjY5NDYsMjY5NzMsMjcwMTIsMjY5ODcsMjcwMDgsMjcwMzIsMjcwMDAsMjY5MzIsMjcwODQsMjcwMTUsMjcwMTYsMjcwODYsMjcwMTcsMjY5ODIsMjY5NzksMjcwMDEsMjcwMzUsMjcwNDcsMjcwNjcsMjcwNTEsMjcwNTMsMjcwOTIsMjcwNTcsMjcwNzMsMjcwODIsMjcxMDMsMjcwMjksMjcxMDQsMjcwMjEsMjcxMzUsMjcxODMsMjcxMTcsMjcxNTksMjcxNjAsMjcyMzcsMjcxMjIsMjcyMDQsMjcxOTgsMjcyOTYsMjcyMTYsMjcyMjcsMjcxODksMjcyNzgsMjcyNTcsMjcxOTcsMjcxNzYsMjcyMjQsMjcyNjAsMjcyODEsMjcyODAsMjczMDUsMjcyODcsMjczMDcsMjk0OTUsMjk1MjIsMjc1MjEsMjc1MjIsMjc1MjcsMjc1MjQsMjc1MzgsMjc1MzksMjc1MzMsMjc1NDYsMjc1NDcsMjc1NTMsMjc1NjIsMzY3MTUsMzY3MTcsMzY3MjEsMzY3MjIsMzY3MjMsMzY3MjUsMzY3MjYsMzY3MjgsMzY3MjcsMzY3MjksMzY3MzAsMzY3MzIsMzY3MzQsMzY3MzcsMzY3MzgsMzY3NDAsMzY3NDMsMzY3NDcsMzgzNDgsMzgzNDksMzgzNTAsMzgzNTEsMzgzNTIsMzgzNTMsMzgzNTQsMzgzNTUsMzgzNTYsMzgzNTcsMzgzNTgsMzgzNTksMzgzNjAsMzgzNjEsMzgzNjIsMzgzNjMsMzgzNjQsMzgzNjUsMzgzNjYsMzgzNjcsMzgzNjgsMzgzNjksMzgzNzAsMzgzNzEsMzgzNzIsMzgzNzMsMzgzNzQsMzgzNzUsMzgzODAsMzgzOTksMzg0MDcsMzg0MTksMzg0MjQsMzg0MjcsMzg0MzAsMzg0MzIsMzg0MzUsMzg0MzYsMzg0MzcsMzg0MzgsMzg0MzksMzg0NDAsMzg0NDEsMzg0NDMsMzg0NDQsMzg0NDUsMzg0NDcsMzg0NDgsMzg0NTUsMzg0NTYsMzg0NTcsMzg0NTgsMzg0NjIsMzg0NjUsMzg0NjcsMzg0NzQsMzg0NzgsMzg0NzksMzg0ODEsMzg0ODIsMzg0ODMsMzg0ODYsMzg0ODcsMzg0ODgsMzg0ODksMzg0OTAsMzg0OTIsMzg0OTMsMzg0OTQsMzg0OTYsMzg0OTksMzg1MDEsMzg1MDIsMzg1MDcsMzg1MDksMzg1MTAsMzg1MTEsMzg1MTIsMzg1MTMsMzg1MTUsMzg1MjAsMzg1MjEsMzg1MjIsMzg1MjMsMzg1MjQsMzg1MjUsMzg1MjYsMzg1MjcsMzg1MjgsMzg1MjksMzg1MzAsMzg1MzEsMzg1MzIsMzg1MzUsMzg1MzcsMzg1MzgsMzY3NDksMzY3NTAsMzY3NTEsMzY3NjAsMzY3NjIsMzY1NTgsMjUwOTksMjUxMTEsMjUxMTUsMjUxMTksMjUxMjIsMjUxMjEsMjUxMjUsMjUxMjQsMjUxMzIsMzMyNTUsMjk5MzUsMjk5NDAsMjk5NTEsMjk5NjcsMjk5NjksMjk5NzEsMjU5MDgsMjYwOTQsMjYwOTUsMjYwOTYsMjYxMjIsMjYxMzcsMjY0ODIsMjYxMTUsMjYxMzMsMjYxMTIsMjg4MDUsMjYzNTksMjYxNDEsMjYxNjQsMjYxNjEsMjYxNjYsMjYxNjUsMzI3NzQsMjYyMDcsMjYxOTYsMjYxNzcsMjYxOTEsMjYxOTgsMjYyMDksMjYxOTksMjYyMzEsMjYyNDQsMjYyNTIsMjYyNzksMjYyNjksMjYzMDIsMjYzMzEsMjYzMzIsMjYzNDIsMjYzNDUsMzYxNDYsMzYxNDcsMzYxNTAsMzYxNTUsMzYxNTcsMzYxNjAsMzYxNjUsMzYxNjYsMzYxNjgsMzYxNjksMzYxNjcsMzYxNzMsMzYxODEsMzYxODUsMzUyNzEsMzUyNzQsMzUyNzUsMzUyNzYsMzUyNzgsMzUyNzksMzUyODAsMzUyODEsMjkyOTQsMjkzNDMsMjkyNzcsMjkyODYsMjkyOTUsMjkzMTAsMjkzMTEsMjkzMTYsMjkzMjMsMjkzMjUsMjkzMjcsMjkzMzAsMjUzNTIsMjUzOTQsMjU1MjAsMzg1NDAsMzg1NDIsMzg1NDUsMzg1NDYsMzg1NDcsMzg1NDksMzg1NTAsMzg1NTQsMzg1NTUsMzg1NTcsMzg1NTgsMzg1NTksMzg1NjAsMzg1NjEsMzg1NjIsMzg1NjMsMzg1NjQsMzg1NjUsMzg1NjYsMzg1NjgsMzg1NjksMzg1NzAsMzg1NzEsMzg1NzIsMzg1NzMsMzg1NzQsMzg1NzUsMzg1NzcsMzg1NzgsMzg1ODAsMzg1ODEsMzg1ODMsMzg1ODQsMzg1ODYsMzg1ODcsMzg1OTEsMzg1OTQsMzg1OTUsMzg2MDAsMzg2MDIsMzg2MDMsMzg2MDgsMzg2MDksMzg2MTEsMzg2MTIsMzg2MTQsMzg2MTUsMzg2MTYsMzg2MTcsMzg2MTgsMzg2MTksMzg2MjAsMzg2MjEsMzg2MjIsMzg2MjMsMzg2MjUsMzg2MjYsMzg2MjcsMzg2MjgsMzg2MjksMzg2MzAsMzg2MzEsMzg2MzUsMzg2MzYsMzg2MzcsMzg2MzgsMzg2NDAsMzg2NDEsMzg2NDIsMzg2NDQsMzg2NDUsMzg2NDgsMzg2NTAsMzg2NTEsMzg2NTIsMzg2NTMsMzg2NTUsMzg2NTgsMzg2NTksMzg2NjEsMzg2NjYsMzg2NjcsMzg2NjgsMzg2NzIsMzg2NzMsMzg2NzQsMzg2NzYsMzg2NzcsMzg2NzksMzg2ODAsMzg2ODEsMzg2ODIsMzg2ODMsMzg2ODUsMzg2ODcsMzg2ODgsMjU2NjMsMjU4MTYsMzI3NzIsMjc2MjYsMjc2MzUsMjc2NDUsMjc2MzcsMjc2NDEsMjc2NTMsMjc2NTUsMjc2NTQsMjc2NjEsMjc2NjksMjc2NzIsMjc2NzMsMjc2NzQsMjc2ODEsMjc2ODksMjc2ODQsMjc2OTAsMjc2OTgsMjU5MDksMjU5NDEsMjU5NjMsMjkyNjEsMjkyNjYsMjkyNzAsMjkyMzIsMzQ0MDIsMjEwMTQsMzI5MjcsMzI5MjQsMzI5MTUsMzI5NTYsMjYzNzgsMzI5NTcsMzI5NDUsMzI5MzksMzI5NDEsMzI5NDgsMzI5NTEsMzI5OTksMzMwMDAsMzMwMDEsMzMwMDIsMzI5ODcsMzI5NjIsMzI5NjQsMzI5ODUsMzI5NzMsMzI5ODMsMjYzODQsMzI5ODksMzMwMDMsMzMwMDksMzMwMTIsMzMwMDUsMzMwMzcsMzMwMzgsMzMwMTAsMzMwMjAsMjYzODksMzMwNDIsMzU5MzAsMzMwNzgsMzMwNTQsMzMwNjgsMzMwNDgsMzMwNzQsMzMwOTYsMzMxMDAsMzMxMDcsMzMxNDAsMzMxMTMsMzMxMTQsMzMxMzcsMzMxMjAsMzMxMjksMzMxNDgsMzMxNDksMzMxMzMsMzMxMjcsMjI2MDUsMjMyMjEsMzMxNjAsMzMxNTQsMzMxNjksMjgzNzMsMzMxODcsMzMxOTQsMzMyMjgsMjY0MDYsMzMyMjYsMzMyMTEsMzg2ODksMzg2OTAsMzg2OTEsMzg2OTIsMzg2OTMsMzg2OTQsMzg2OTUsMzg2OTYsMzg2OTcsMzg2OTksMzg3MDAsMzg3MDIsMzg3MDMsMzg3MDUsMzg3MDcsMzg3MDgsMzg3MDksMzg3MTAsMzg3MTEsMzg3MTQsMzg3MTUsMzg3MTYsMzg3MTcsMzg3MTksMzg3MjAsMzg3MjEsMzg3MjIsMzg3MjMsMzg3MjQsMzg3MjUsMzg3MjYsMzg3MjcsMzg3MjgsMzg3MjksMzg3MzAsMzg3MzEsMzg3MzIsMzg3MzMsMzg3MzQsMzg3MzUsMzg3MzYsMzg3MzcsMzg3NDAsMzg3NDEsMzg3NDMsMzg3NDQsMzg3NDYsMzg3NDgsMzg3NDksMzg3NTEsMzg3NTUsMzg3NTYsMzg3NTgsMzg3NTksMzg3NjAsMzg3NjIsMzg3NjMsMzg3NjQsMzg3NjUsMzg3NjYsMzg3NjcsMzg3NjgsMzg3NjksMzg3NzAsMzg3NzMsMzg3NzUsMzg3NzYsMzg3NzcsMzg3NzgsMzg3NzksMzg3ODEsMzg3ODIsMzg3ODMsMzg3ODQsMzg3ODUsMzg3ODYsMzg3ODcsMzg3ODgsMzg3OTAsMzg3OTEsMzg3OTIsMzg3OTMsMzg3OTQsMzg3OTYsMzg3OTgsMzg3OTksMzg4MDAsMzg4MDMsMzg4MDUsMzg4MDYsMzg4MDcsMzg4MDksMzg4MTAsMzg4MTEsMzg4MTIsMzg4MTMsMzMyMTcsMzMxOTAsMjc0MjgsMjc0NDcsMjc0NDksMjc0NTksMjc0NjIsMjc0ODEsMzkxMjEsMzkxMjIsMzkxMjMsMzkxMjUsMzkxMjksMzkxMzAsMjc1NzEsMjQzODQsMjc1ODYsMzUzMTUsMjYwMDAsNDA3ODUsMjYwMDMsMjYwNDQsMjYwNTQsMjYwNTIsMjYwNTEsMjYwNjAsMjYwNjIsMjYwNjYsMjYwNzAsMjg4MDAsMjg4MjgsMjg4MjIsMjg4MjksMjg4NTksMjg4NjQsMjg4NTUsMjg4NDMsMjg4NDksMjg5MDQsMjg4NzQsMjg5NDQsMjg5NDcsMjg5NTAsMjg5NzUsMjg5NzcsMjkwNDMsMjkwMjAsMjkwMzIsMjg5OTcsMjkwNDIsMjkwMDIsMjkwNDgsMjkwNTAsMjkwODAsMjkxMDcsMjkxMDksMjkwOTYsMjkwODgsMjkxNTIsMjkxNDAsMjkxNTksMjkxNzcsMjkyMTMsMjkyMjQsMjg3ODAsMjg5NTIsMjkwMzAsMjkxMTMsMjUxNTAsMjUxNDksMjUxNTUsMjUxNjAsMjUxNjEsMzEwMzUsMzEwNDAsMzEwNDYsMzEwNDksMzEwNjcsMzEwNjgsMzEwNTksMzEwNjYsMzEwNzQsMzEwNjMsMzEwNzIsMzEwODcsMzEwNzksMzEwOTgsMzExMDksMzExMTQsMzExMzAsMzExNDMsMzExNTUsMjQ1MjksMjQ1MjgsMzg4MTQsMzg4MTUsMzg4MTcsMzg4MTgsMzg4MjAsMzg4MjEsMzg4MjIsMzg4MjMsMzg4MjQsMzg4MjUsMzg4MjYsMzg4MjgsMzg4MzAsMzg4MzIsMzg4MzMsMzg4MzUsMzg4MzcsMzg4MzgsMzg4MzksMzg4NDAsMzg4NDEsMzg4NDIsMzg4NDMsMzg4NDQsMzg4NDUsMzg4NDYsMzg4NDcsMzg4NDgsMzg4NDksMzg4NTAsMzg4NTEsMzg4NTIsMzg4NTMsMzg4NTQsMzg4NTUsMzg4NTYsMzg4NTcsMzg4NTgsMzg4NTksMzg4NjAsMzg4NjEsMzg4NjIsMzg4NjMsMzg4NjQsMzg4NjUsMzg4NjYsMzg4NjcsMzg4NjgsMzg4NjksMzg4NzAsMzg4NzEsMzg4NzIsMzg4NzMsMzg4NzQsMzg4NzUsMzg4NzYsMzg4NzcsMzg4NzgsMzg4NzksMzg4ODAsMzg4ODEsMzg4ODIsMzg4ODMsMzg4ODQsMzg4ODUsMzg4ODgsMzg4OTQsMzg4OTUsMzg4OTYsMzg4OTcsMzg4OTgsMzg5MDAsMzg5MDMsMzg5MDQsMzg5MDUsMzg5MDYsMzg5MDcsMzg5MDgsMzg5MDksMzg5MTAsMzg5MTEsMzg5MTIsMzg5MTMsMzg5MTQsMzg5MTUsMzg5MTYsMzg5MTcsMzg5MTgsMzg5MTksMzg5MjAsMzg5MjEsMzg5MjIsMzg5MjMsMzg5MjQsMzg5MjUsMzg5MjYsMjQ2MzYsMjQ2NjksMjQ2NjYsMjQ2NzksMjQ2NDEsMjQ2NjUsMjQ2NzUsMjQ3NDcsMjQ4MzgsMjQ4NDUsMjQ5MjUsMjUwMDEsMjQ5ODksMjUwMzUsMjUwNDEsMjUwOTQsMzI4OTYsMzI4OTUsMjc3OTUsMjc4OTQsMjgxNTYsMzA3MTAsMzA3MTIsMzA3MjAsMzA3MjksMzA3NDMsMzA3NDQsMzA3MzcsMjYwMjcsMzA3NjUsMzA3NDgsMzA3NDksMzA3NzcsMzA3NzgsMzA3NzksMzA3NTEsMzA3ODAsMzA3NTcsMzA3NjQsMzA3NTUsMzA3NjEsMzA3OTgsMzA4MjksMzA4MDYsMzA4MDcsMzA3NTgsMzA4MDAsMzA3OTEsMzA3OTYsMzA4MjYsMzA4NzUsMzA4NjcsMzA4NzQsMzA4NTUsMzA4NzYsMzA4ODEsMzA4ODMsMzA4OTgsMzA5MDUsMzA4ODUsMzA5MzIsMzA5MzcsMzA5MjEsMzA5NTYsMzA5NjIsMzA5ODEsMzA5NjQsMzA5OTUsMzEwMTIsMzEwMDYsMzEwMjgsNDA4NTksNDA2OTcsNDA2OTksNDA3MDAsMzA0NDksMzA0NjgsMzA0NzcsMzA0NTcsMzA0NzEsMzA0NzIsMzA0OTAsMzA0OTgsMzA0ODksMzA1MDksMzA1MDIsMzA1MTcsMzA1MjAsMzA1NDQsMzA1NDUsMzA1MzUsMzA1MzEsMzA1NTQsMzA1NjgsMzg5MjcsMzg5MjgsMzg5MjksMzg5MzAsMzg5MzEsMzg5MzIsMzg5MzMsMzg5MzQsMzg5MzUsMzg5MzYsMzg5MzcsMzg5MzgsMzg5MzksMzg5NDAsMzg5NDEsMzg5NDIsMzg5NDMsMzg5NDQsMzg5NDUsMzg5NDYsMzg5NDcsMzg5NDgsMzg5NDksMzg5NTAsMzg5NTEsMzg5NTIsMzg5NTMsMzg5NTQsMzg5NTUsMzg5NTYsMzg5NTcsMzg5NTgsMzg5NTksMzg5NjAsMzg5NjEsMzg5NjIsMzg5NjMsMzg5NjQsMzg5NjUsMzg5NjYsMzg5NjcsMzg5NjgsMzg5NjksMzg5NzAsMzg5NzEsMzg5NzIsMzg5NzMsMzg5NzQsMzg5NzUsMzg5NzYsMzg5NzcsMzg5NzgsMzg5NzksMzg5ODAsMzg5ODEsMzg5ODIsMzg5ODMsMzg5ODQsMzg5ODUsMzg5ODYsMzg5ODcsMzg5ODgsMzg5ODksMzg5OTAsMzg5OTEsMzg5OTIsMzg5OTMsMzg5OTQsMzg5OTUsMzg5OTYsMzg5OTcsMzg5OTgsMzg5OTksMzkwMDAsMzkwMDEsMzkwMDIsMzkwMDMsMzkwMDQsMzkwMDUsMzkwMDYsMzkwMDcsMzkwMDgsMzkwMDksMzkwMTAsMzkwMTEsMzkwMTIsMzkwMTMsMzkwMTQsMzkwMTUsMzkwMTYsMzkwMTcsMzkwMTgsMzkwMTksMzkwMjAsMzkwMjEsMzkwMjIsMzA1NjIsMzA1NjUsMzA1OTEsMzA2MDUsMzA1ODksMzA1OTIsMzA2MDQsMzA2MDksMzA2MjMsMzA2MjQsMzA2NDAsMzA2NDUsMzA2NTMsMzAwMTAsMzAwMTYsMzAwMzAsMzAwMjcsMzAwMjQsMzAwNDMsMzAwNjYsMzAwNzMsMzAwODMsMzI2MDAsMzI2MDksMzI2MDcsMzU0MDAsMzI2MTYsMzI2MjgsMzI2MjUsMzI2MzMsMzI2NDEsMzI2MzgsMzA0MTMsMzA0MzcsMzQ4NjYsMzgwMjEsMzgwMjIsMzgwMjMsMzgwMjcsMzgwMjYsMzgwMjgsMzgwMjksMzgwMzEsMzgwMzIsMzgwMzYsMzgwMzksMzgwMzcsMzgwNDIsMzgwNDMsMzgwNDQsMzgwNTEsMzgwNTIsMzgwNTksMzgwNTgsMzgwNjEsMzgwNjAsMzgwNjMsMzgwNjQsMzgwNjYsMzgwNjgsMzgwNzAsMzgwNzEsMzgwNzIsMzgwNzMsMzgwNzQsMzgwNzYsMzgwNzcsMzgwNzksMzgwODQsMzgwODgsMzgwODksMzgwOTAsMzgwOTEsMzgwOTIsMzgwOTMsMzgwOTQsMzgwOTYsMzgwOTcsMzgwOTgsMzgxMDEsMzgxMDIsMzgxMDMsMzgxMDUsMzgxMDQsMzgxMDcsMzgxMTAsMzgxMTEsMzgxMTIsMzgxMTQsMzgxMTYsMzgxMTcsMzgxMTksMzgxMjAsMzgxMjIsMzkwMjMsMzkwMjQsMzkwMjUsMzkwMjYsMzkwMjcsMzkwMjgsMzkwNTEsMzkwNTQsMzkwNTgsMzkwNjEsMzkwNjUsMzkwNzUsMzkwODAsMzkwODEsMzkwODIsMzkwODMsMzkwODQsMzkwODUsMzkwODYsMzkwODcsMzkwODgsMzkwODksMzkwOTAsMzkwOTEsMzkwOTIsMzkwOTMsMzkwOTQsMzkwOTUsMzkwOTYsMzkwOTcsMzkwOTgsMzkwOTksMzkxMDAsMzkxMDEsMzkxMDIsMzkxMDMsMzkxMDQsMzkxMDUsMzkxMDYsMzkxMDcsMzkxMDgsMzkxMDksMzkxMTAsMzkxMTEsMzkxMTIsMzkxMTMsMzkxMTQsMzkxMTUsMzkxMTYsMzkxMTcsMzkxMTksMzkxMjAsMzkxMjQsMzkxMjYsMzkxMjcsMzkxMzEsMzkxMzIsMzkxMzMsMzkxMzYsMzkxMzcsMzkxMzgsMzkxMzksMzkxNDAsMzkxNDEsMzkxNDIsMzkxNDUsMzkxNDYsMzkxNDcsMzkxNDgsMzkxNDksMzkxNTAsMzkxNTEsMzkxNTIsMzkxNTMsMzkxNTQsMzkxNTUsMzkxNTYsMzkxNTcsMzkxNTgsMzkxNTksMzkxNjAsMzkxNjEsMzkxNjIsMzkxNjMsMzkxNjQsMzkxNjUsMzkxNjYsMzkxNjcsMzkxNjgsMzkxNjksMzkxNzAsMzkxNzEsMzkxNzIsMzkxNzMsMzkxNzQsMzkxNzUsMzgxMjEsMzgxMjMsMzgxMjYsMzgxMjcsMzgxMzEsMzgxMzIsMzgxMzMsMzgxMzUsMzgxMzcsMzgxNDAsMzgxNDEsMzgxNDMsMzgxNDcsMzgxNDYsMzgxNTAsMzgxNTEsMzgxNTMsMzgxNTQsMzgxNTcsMzgxNTgsMzgxNTksMzgxNjIsMzgxNjMsMzgxNjQsMzgxNjUsMzgxNjYsMzgxNjgsMzgxNzEsMzgxNzMsMzgxNzQsMzgxNzUsMzgxNzgsMzgxODYsMzgxODcsMzgxODUsMzgxODgsMzgxOTMsMzgxOTQsMzgxOTYsMzgxOTgsMzgxOTksMzgyMDAsMzgyMDQsMzgyMDYsMzgyMDcsMzgyMTAsMzgxOTcsMzgyMTIsMzgyMTMsMzgyMTQsMzgyMTcsMzgyMjAsMzgyMjIsMzgyMjMsMzgyMjYsMzgyMjcsMzgyMjgsMzgyMzAsMzgyMzEsMzgyMzIsMzgyMzMsMzgyMzUsMzgyMzgsMzgyMzksMzgyMzcsMzgyNDEsMzgyNDIsMzgyNDQsMzgyNDUsMzgyNDYsMzgyNDcsMzgyNDgsMzgyNDksMzgyNTAsMzgyNTEsMzgyNTIsMzgyNTUsMzgyNTcsMzgyNTgsMzgyNTksMzgyMDIsMzA2OTUsMzA3MDAsMzg2MDEsMzExODksMzEyMTMsMzEyMDMsMzEyMTEsMzEyMzgsMjM4NzksMzEyMzUsMzEyMzQsMzEyNjIsMzEyNTIsMzkxNzYsMzkxNzcsMzkxNzgsMzkxNzksMzkxODAsMzkxODIsMzkxODMsMzkxODUsMzkxODYsMzkxODcsMzkxODgsMzkxODksMzkxOTAsMzkxOTEsMzkxOTIsMzkxOTMsMzkxOTQsMzkxOTUsMzkxOTYsMzkxOTcsMzkxOTgsMzkxOTksMzkyMDAsMzkyMDEsMzkyMDIsMzkyMDMsMzkyMDQsMzkyMDUsMzkyMDYsMzkyMDcsMzkyMDgsMzkyMDksMzkyMTAsMzkyMTEsMzkyMTIsMzkyMTMsMzkyMTUsMzkyMTYsMzkyMTcsMzkyMTgsMzkyMTksMzkyMjAsMzkyMjEsMzkyMjIsMzkyMjMsMzkyMjQsMzkyMjUsMzkyMjYsMzkyMjcsMzkyMjgsMzkyMjksMzkyMzAsMzkyMzEsMzkyMzIsMzkyMzMsMzkyMzQsMzkyMzUsMzkyMzYsMzkyMzcsMzkyMzgsMzkyMzksMzkyNDAsMzkyNDEsMzkyNDIsMzkyNDMsMzkyNDQsMzkyNDUsMzkyNDYsMzkyNDcsMzkyNDgsMzkyNDksMzkyNTAsMzkyNTEsMzkyNTQsMzkyNTUsMzkyNTYsMzkyNTcsMzkyNTgsMzkyNTksMzkyNjAsMzkyNjEsMzkyNjIsMzkyNjMsMzkyNjQsMzkyNjUsMzkyNjYsMzkyNjgsMzkyNzAsMzkyODMsMzkyODgsMzkyODksMzkyOTEsMzkyOTQsMzkyOTgsMzkyOTksMzkzMDUsMzEyODksMzEyODcsMzEzMTMsNDA2NTUsMzkzMzMsMzEzNDQsMzAzNDQsMzAzNTAsMzAzNTUsMzAzNjEsMzAzNzIsMjk5MTgsMjk5MjAsMjk5OTYsNDA0ODAsNDA0ODIsNDA0ODgsNDA0ODksNDA0OTAsNDA0OTEsNDA0OTIsNDA0OTgsNDA0OTcsNDA1MDIsNDA1MDQsNDA1MDMsNDA1MDUsNDA1MDYsNDA1MTAsNDA1MTMsNDA1MTQsNDA1MTYsNDA1MTgsNDA1MTksNDA1MjAsNDA1MjEsNDA1MjMsNDA1MjQsNDA1MjYsNDA1MjksNDA1MzMsNDA1MzUsNDA1MzgsNDA1MzksNDA1NDAsNDA1NDIsNDA1NDcsNDA1NTAsNDA1NTEsNDA1NTIsNDA1NTMsNDA1NTQsNDA1NTUsNDA1NTYsNDA1NjEsNDA1NTcsNDA1NjMsMzAwOTgsMzAxMDAsMzAxMDIsMzAxMTIsMzAxMDksMzAxMjQsMzAxMTUsMzAxMzEsMzAxMzIsMzAxMzYsMzAxNDgsMzAxMjksMzAxMjgsMzAxNDcsMzAxNDYsMzAxNjYsMzAxNTcsMzAxNzksMzAxODQsMzAxODIsMzAxODAsMzAxODcsMzAxODMsMzAyMTEsMzAxOTMsMzAyMDQsMzAyMDcsMzAyMjQsMzAyMDgsMzAyMTMsMzAyMjAsMzAyMzEsMzAyMTgsMzAyNDUsMzAyMzIsMzAyMjksMzAyMzMsMzkzMDgsMzkzMTAsMzkzMjIsMzkzMjMsMzkzMjQsMzkzMjUsMzkzMjYsMzkzMjcsMzkzMjgsMzkzMjksMzkzMzAsMzkzMzEsMzkzMzIsMzkzMzQsMzkzMzUsMzkzMzcsMzkzMzgsMzkzMzksMzkzNDAsMzkzNDEsMzkzNDIsMzkzNDMsMzkzNDQsMzkzNDUsMzkzNDYsMzkzNDcsMzkzNDgsMzkzNDksMzkzNTAsMzkzNTEsMzkzNTIsMzkzNTMsMzkzNTQsMzkzNTUsMzkzNTYsMzkzNTcsMzkzNTgsMzkzNTksMzkzNjAsMzkzNjEsMzkzNjIsMzkzNjMsMzkzNjQsMzkzNjUsMzkzNjYsMzkzNjcsMzkzNjgsMzkzNjksMzkzNzAsMzkzNzEsMzkzNzIsMzkzNzMsMzkzNzQsMzkzNzUsMzkzNzYsMzkzNzcsMzkzNzgsMzkzNzksMzkzODAsMzkzODEsMzkzODIsMzkzODMsMzkzODQsMzkzODUsMzkzODYsMzkzODcsMzkzODgsMzkzODksMzkzOTAsMzkzOTEsMzkzOTIsMzkzOTMsMzkzOTQsMzkzOTUsMzkzOTYsMzkzOTcsMzkzOTgsMzkzOTksMzk0MDAsMzk0MDEsMzk0MDIsMzk0MDMsMzk0MDQsMzk0MDUsMzk0MDYsMzk0MDcsMzk0MDgsMzk0MDksMzk0MTAsMzk0MTEsMzk0MTIsMzk0MTMsMzk0MTQsMzk0MTUsMzk0MTYsMzk0MTcsMzAyMzUsMzAyNjgsMzAyNDIsMzAyNDAsMzAyNzIsMzAyNTMsMzAyNTYsMzAyNzEsMzAyNjEsMzAyNzUsMzAyNzAsMzAyNTksMzAyODUsMzAzMDIsMzAyOTIsMzAzMDAsMzAyOTQsMzAzMTUsMzAzMTksMzI3MTQsMzE0NjIsMzEzNTIsMzEzNTMsMzEzNjAsMzEzNjYsMzEzNjgsMzEzODEsMzEzOTgsMzEzOTIsMzE0MDQsMzE0MDAsMzE0MDUsMzE0MTEsMzQ5MTYsMzQ5MjEsMzQ5MzAsMzQ5NDEsMzQ5NDMsMzQ5NDYsMzQ5NzgsMzUwMTQsMzQ5OTksMzUwMDQsMzUwMTcsMzUwNDIsMzUwMjIsMzUwNDMsMzUwNDUsMzUwNTcsMzUwOTgsMzUwNjgsMzUwNDgsMzUwNzAsMzUwNTYsMzUxMDUsMzUwOTcsMzUwOTEsMzUwOTksMzUwODIsMzUxMjQsMzUxMTUsMzUxMjYsMzUxMzcsMzUxNzQsMzUxOTUsMzAwOTEsMzI5OTcsMzAzODYsMzAzODgsMzA2ODQsMzI3ODYsMzI3ODgsMzI3OTAsMzI3OTYsMzI4MDAsMzI4MDIsMzI4MDUsMzI4MDYsMzI4MDcsMzI4MDksMzI4MDgsMzI4MTcsMzI3NzksMzI4MjEsMzI4MzUsMzI4MzgsMzI4NDUsMzI4NTAsMzI4NzMsMzI4ODEsMzUyMDMsMzkwMzIsMzkwNDAsMzkwNDMsMzk0MTgsMzk0MTksMzk0MjAsMzk0MjEsMzk0MjIsMzk0MjMsMzk0MjQsMzk0MjUsMzk0MjYsMzk0MjcsMzk0MjgsMzk0MjksMzk0MzAsMzk0MzEsMzk0MzIsMzk0MzMsMzk0MzQsMzk0MzUsMzk0MzYsMzk0MzcsMzk0MzgsMzk0MzksMzk0NDAsMzk0NDEsMzk0NDIsMzk0NDMsMzk0NDQsMzk0NDUsMzk0NDYsMzk0NDcsMzk0NDgsMzk0NDksMzk0NTAsMzk0NTEsMzk0NTIsMzk0NTMsMzk0NTQsMzk0NTUsMzk0NTYsMzk0NTcsMzk0NTgsMzk0NTksMzk0NjAsMzk0NjEsMzk0NjIsMzk0NjMsMzk0NjQsMzk0NjUsMzk0NjYsMzk0NjcsMzk0NjgsMzk0NjksMzk0NzAsMzk0NzEsMzk0NzIsMzk0NzMsMzk0NzQsMzk0NzUsMzk0NzYsMzk0NzcsMzk0NzgsMzk0NzksMzk0ODAsMzk0ODEsMzk0ODIsMzk0ODMsMzk0ODQsMzk0ODUsMzk0ODYsMzk0ODcsMzk0ODgsMzk0ODksMzk0OTAsMzk0OTEsMzk0OTIsMzk0OTMsMzk0OTQsMzk0OTUsMzk0OTYsMzk0OTcsMzk0OTgsMzk0OTksMzk1MDAsMzk1MDEsMzk1MDIsMzk1MDMsMzk1MDQsMzk1MDUsMzk1MDYsMzk1MDcsMzk1MDgsMzk1MDksMzk1MTAsMzk1MTEsMzk1MTIsMzk1MTMsMzkwNDksMzkwNTIsMzkwNTMsMzkwNTUsMzkwNjAsMzkwNjYsMzkwNjcsMzkwNzAsMzkwNzEsMzkwNzMsMzkwNzQsMzkwNzcsMzkwNzgsMzQzODEsMzQzODgsMzQ0MTIsMzQ0MTQsMzQ0MzEsMzQ0MjYsMzQ0MjgsMzQ0MjcsMzQ0NzIsMzQ0NDUsMzQ0NDMsMzQ0NzYsMzQ0NjEsMzQ0NzEsMzQ0NjcsMzQ0NzQsMzQ0NTEsMzQ0NzMsMzQ0ODYsMzQ1MDAsMzQ0ODUsMzQ1MTAsMzQ0ODAsMzQ0OTAsMzQ0ODEsMzQ0NzksMzQ1MDUsMzQ1MTEsMzQ0ODQsMzQ1MzcsMzQ1NDUsMzQ1NDYsMzQ1NDEsMzQ1NDcsMzQ1MTIsMzQ1NzksMzQ1MjYsMzQ1NDgsMzQ1MjcsMzQ1MjAsMzQ1MTMsMzQ1NjMsMzQ1NjcsMzQ1NTIsMzQ1NjgsMzQ1NzAsMzQ1NzMsMzQ1NjksMzQ1OTUsMzQ2MTksMzQ1OTAsMzQ1OTcsMzQ2MDYsMzQ1ODYsMzQ2MjIsMzQ2MzIsMzQ2MTIsMzQ2MDksMzQ2MDEsMzQ2MTUsMzQ2MjMsMzQ2OTAsMzQ1OTQsMzQ2ODUsMzQ2ODYsMzQ2ODMsMzQ2NTYsMzQ2NzIsMzQ2MzYsMzQ2NzAsMzQ2OTksMzQ2NDMsMzQ2NTksMzQ2ODQsMzQ2NjAsMzQ2NDksMzQ2NjEsMzQ3MDcsMzQ3MzUsMzQ3MjgsMzQ3NzAsMzk1MTQsMzk1MTUsMzk1MTYsMzk1MTcsMzk1MTgsMzk1MTksMzk1MjAsMzk1MjEsMzk1MjIsMzk1MjMsMzk1MjQsMzk1MjUsMzk1MjYsMzk1MjcsMzk1MjgsMzk1MjksMzk1MzAsMzk1MzEsMzk1MzgsMzk1NTUsMzk1NjEsMzk1NjUsMzk1NjYsMzk1NzIsMzk1NzMsMzk1NzcsMzk1OTAsMzk1OTMsMzk1OTQsMzk1OTUsMzk1OTYsMzk1OTcsMzk1OTgsMzk1OTksMzk2MDIsMzk2MDMsMzk2MDQsMzk2MDUsMzk2MDksMzk2MTEsMzk2MTMsMzk2MTQsMzk2MTUsMzk2MTksMzk2MjAsMzk2MjIsMzk2MjMsMzk2MjQsMzk2MjUsMzk2MjYsMzk2MjksMzk2MzAsMzk2MzEsMzk2MzIsMzk2MzQsMzk2MzYsMzk2MzcsMzk2MzgsMzk2MzksMzk2NDEsMzk2NDIsMzk2NDMsMzk2NDQsMzk2NDUsMzk2NDYsMzk2NDgsMzk2NTAsMzk2NTEsMzk2NTIsMzk2NTMsMzk2NTUsMzk2NTYsMzk2NTcsMzk2NTgsMzk2NjAsMzk2NjIsMzk2NjQsMzk2NjUsMzk2NjYsMzk2NjcsMzk2NjgsMzk2NjksMzk2NzAsMzk2NzEsMzk2NzIsMzk2NzQsMzk2NzYsMzk2NzcsMzk2NzgsMzk2NzksMzk2ODAsMzk2ODEsMzk2ODIsMzk2ODQsMzk2ODUsMzk2ODYsMzQ3NTgsMzQ2OTYsMzQ2OTMsMzQ3MzMsMzQ3MTEsMzQ2OTEsMzQ3MzEsMzQ3ODksMzQ3MzIsMzQ3NDEsMzQ3MzksMzQ3NjMsMzQ3NzEsMzQ3NDksMzQ3NjksMzQ3NTIsMzQ3NjIsMzQ3NzksMzQ3OTQsMzQ3ODQsMzQ3OTgsMzQ4MzgsMzQ4MzUsMzQ4MTQsMzQ4MjYsMzQ4NDMsMzQ4NDksMzQ4NzMsMzQ4NzYsMzI1NjYsMzI1NzgsMzI1ODAsMzI1ODEsMzMyOTYsMzE0ODIsMzE0ODUsMzE0OTYsMzE0OTEsMzE0OTIsMzE1MDksMzE0OTgsMzE1MzEsMzE1MDMsMzE1NTksMzE1NDQsMzE1MzAsMzE1MTMsMzE1MzQsMzE1MzcsMzE1MjAsMzE1MjUsMzE1MjQsMzE1MzksMzE1NTAsMzE1MTgsMzE1NzYsMzE1NzgsMzE1NTcsMzE2MDUsMzE1NjQsMzE1ODEsMzE1ODQsMzE1OTgsMzE2MTEsMzE1ODYsMzE2MDIsMzE2MDEsMzE2MzIsMzE2NTQsMzE2NTUsMzE2NzIsMzE2NjAsMzE2NDUsMzE2NTYsMzE2MjEsMzE2NTgsMzE2NDQsMzE2NTAsMzE2NTksMzE2NjgsMzE2OTcsMzE2ODEsMzE2OTIsMzE3MDksMzE3MDYsMzE3MTcsMzE3MTgsMzE3MjIsMzE3NTYsMzE3NDIsMzE3NDAsMzE3NTksMzE3NjYsMzE3NTUsMzk2ODcsMzk2ODksMzk2OTAsMzk2OTEsMzk2OTIsMzk2OTMsMzk2OTQsMzk2OTYsMzk2OTcsMzk2OTgsMzk3MDAsMzk3MDEsMzk3MDIsMzk3MDMsMzk3MDQsMzk3MDUsMzk3MDYsMzk3MDcsMzk3MDgsMzk3MDksMzk3MTAsMzk3MTIsMzk3MTMsMzk3MTQsMzk3MTYsMzk3MTcsMzk3MTgsMzk3MTksMzk3MjAsMzk3MjEsMzk3MjIsMzk3MjMsMzk3MjQsMzk3MjUsMzk3MjYsMzk3MjgsMzk3MjksMzk3MzEsMzk3MzIsMzk3MzMsMzk3MzQsMzk3MzUsMzk3MzYsMzk3MzcsMzk3MzgsMzk3NDEsMzk3NDIsMzk3NDMsMzk3NDQsMzk3NTAsMzk3NTQsMzk3NTUsMzk3NTYsMzk3NTgsMzk3NjAsMzk3NjIsMzk3NjMsMzk3NjUsMzk3NjYsMzk3NjcsMzk3NjgsMzk3NjksMzk3NzAsMzk3NzEsMzk3NzIsMzk3NzMsMzk3NzQsMzk3NzUsMzk3NzYsMzk3NzcsMzk3NzgsMzk3NzksMzk3ODAsMzk3ODEsMzk3ODIsMzk3ODMsMzk3ODQsMzk3ODUsMzk3ODYsMzk3ODcsMzk3ODgsMzk3ODksMzk3OTAsMzk3OTEsMzk3OTIsMzk3OTMsMzk3OTQsMzk3OTUsMzk3OTYsMzk3OTcsMzk3OTgsMzk3OTksMzk4MDAsMzk4MDEsMzk4MDIsMzk4MDMsMzE3NzUsMzE3ODYsMzE3ODIsMzE4MDAsMzE4MDksMzE4MDgsMzMyNzgsMzMyODEsMzMyODIsMzMyODQsMzMyNjAsMzQ4ODQsMzMzMTMsMzMzMTQsMzMzMTUsMzMzMjUsMzMzMjcsMzMzMjAsMzMzMjMsMzMzMzYsMzMzMzksMzMzMzEsMzMzMzIsMzMzNDIsMzMzNDgsMzMzNTMsMzMzNTUsMzMzNTksMzMzNzAsMzMzNzUsMzMzODQsMzQ5NDIsMzQ5NDksMzQ5NTIsMzUwMzIsMzUwMzksMzUxNjYsMzI2NjksMzI2NzEsMzI2NzksMzI2ODcsMzI2ODgsMzI2OTAsMzE4NjgsMjU5MjksMzE4ODksMzE5MDEsMzE5MDAsMzE5MDIsMzE5MDYsMzE5MjIsMzE5MzIsMzE5MzMsMzE5MzcsMzE5NDMsMzE5NDgsMzE5NDksMzE5NDQsMzE5NDEsMzE5NTksMzE5NzYsMzMzOTAsMjYyODAsMzI3MDMsMzI3MTgsMzI3MjUsMzI3NDEsMzI3MzcsMzI3NDIsMzI3NDUsMzI3NTAsMzI3NTUsMzE5OTIsMzIxMTksMzIxNjYsMzIxNzQsMzIzMjcsMzI0MTEsNDA2MzIsNDA2MjgsMzYyMTEsMzYyMjgsMzYyNDQsMzYyNDEsMzYyNzMsMzYxOTksMzYyMDUsMzU5MTEsMzU5MTMsMzcxOTQsMzcyMDAsMzcxOTgsMzcxOTksMzcyMjAsMzk4MDQsMzk4MDUsMzk4MDYsMzk4MDcsMzk4MDgsMzk4MDksMzk4MTAsMzk4MTEsMzk4MTIsMzk4MTMsMzk4MTQsMzk4MTUsMzk4MTYsMzk4MTcsMzk4MTgsMzk4MTksMzk4MjAsMzk4MjEsMzk4MjIsMzk4MjMsMzk4MjQsMzk4MjUsMzk4MjYsMzk4MjcsMzk4MjgsMzk4MjksMzk4MzAsMzk4MzEsMzk4MzIsMzk4MzMsMzk4MzQsMzk4MzUsMzk4MzYsMzk4MzcsMzk4MzgsMzk4MzksMzk4NDAsMzk4NDEsMzk4NDIsMzk4NDMsMzk4NDQsMzk4NDUsMzk4NDYsMzk4NDcsMzk4NDgsMzk4NDksMzk4NTAsMzk4NTEsMzk4NTIsMzk4NTMsMzk4NTQsMzk4NTUsMzk4NTYsMzk4NTcsMzk4NTgsMzk4NTksMzk4NjAsMzk4NjEsMzk4NjIsMzk4NjMsMzk4NjQsMzk4NjUsMzk4NjYsMzk4NjcsMzk4NjgsMzk4NjksMzk4NzAsMzk4NzEsMzk4NzIsMzk4NzMsMzk4NzQsMzk4NzUsMzk4NzYsMzk4NzcsMzk4NzgsMzk4NzksMzk4ODAsMzk4ODEsMzk4ODIsMzk4ODMsMzk4ODQsMzk4ODUsMzk4ODYsMzk4ODcsMzk4ODgsMzk4ODksMzk4OTAsMzk4OTEsMzk4OTIsMzk4OTMsMzk4OTQsMzk4OTUsMzk4OTYsMzk4OTcsMzk4OTgsMzk4OTksMzcyMTgsMzcyMTcsMzcyMzIsMzcyMjUsMzcyMzEsMzcyNDUsMzcyNDYsMzcyMzQsMzcyMzYsMzcyNDEsMzcyNjAsMzcyNTMsMzcyNjQsMzcyNjEsMzcyNjUsMzcyODIsMzcyODMsMzcyOTAsMzcyOTMsMzcyOTQsMzcyOTUsMzczMDEsMzczMDAsMzczMDYsMzU5MjUsNDA1NzQsMzYyODAsMzYzMzEsMzYzNTcsMzY0NDEsMzY0NTcsMzYyNzcsMzYyODcsMzYyODQsMzYyODIsMzYyOTIsMzYzMTAsMzYzMTEsMzYzMTQsMzYzMTgsMzYzMDIsMzYzMDMsMzYzMTUsMzYyOTQsMzYzMzIsMzYzNDMsMzYzNDQsMzYzMjMsMzYzNDUsMzYzNDcsMzYzMjQsMzYzNjEsMzYzNDksMzYzNzIsMzYzODEsMzYzODMsMzYzOTYsMzYzOTgsMzYzODcsMzYzOTksMzY0MTAsMzY0MTYsMzY0MDksMzY0MDUsMzY0MTMsMzY0MDEsMzY0MjUsMzY0MTcsMzY0MTgsMzY0MzMsMzY0MzQsMzY0MjYsMzY0NjQsMzY0NzAsMzY0NzYsMzY0NjMsMzY0NjgsMzY0ODUsMzY0OTUsMzY1MDAsMzY0OTYsMzY1MDgsMzY1MTAsMzU5NjAsMzU5NzAsMzU5NzgsMzU5NzMsMzU5OTIsMzU5ODgsMjYwMTEsMzUyODYsMzUyOTQsMzUyOTAsMzUyOTIsMzk5MDAsMzk5MDEsMzk5MDIsMzk5MDMsMzk5MDQsMzk5MDUsMzk5MDYsMzk5MDcsMzk5MDgsMzk5MDksMzk5MTAsMzk5MTEsMzk5MTIsMzk5MTMsMzk5MTQsMzk5MTUsMzk5MTYsMzk5MTcsMzk5MTgsMzk5MTksMzk5MjAsMzk5MjEsMzk5MjIsMzk5MjMsMzk5MjQsMzk5MjUsMzk5MjYsMzk5MjcsMzk5MjgsMzk5MjksMzk5MzAsMzk5MzEsMzk5MzIsMzk5MzMsMzk5MzQsMzk5MzUsMzk5MzYsMzk5MzcsMzk5MzgsMzk5MzksMzk5NDAsMzk5NDEsMzk5NDIsMzk5NDMsMzk5NDQsMzk5NDUsMzk5NDYsMzk5NDcsMzk5NDgsMzk5NDksMzk5NTAsMzk5NTEsMzk5NTIsMzk5NTMsMzk5NTQsMzk5NTUsMzk5NTYsMzk5NTcsMzk5NTgsMzk5NTksMzk5NjAsMzk5NjEsMzk5NjIsMzk5NjMsMzk5NjQsMzk5NjUsMzk5NjYsMzk5NjcsMzk5NjgsMzk5NjksMzk5NzAsMzk5NzEsMzk5NzIsMzk5NzMsMzk5NzQsMzk5NzUsMzk5NzYsMzk5NzcsMzk5NzgsMzk5NzksMzk5ODAsMzk5ODEsMzk5ODIsMzk5ODMsMzk5ODQsMzk5ODUsMzk5ODYsMzk5ODcsMzk5ODgsMzk5ODksMzk5OTAsMzk5OTEsMzk5OTIsMzk5OTMsMzk5OTQsMzk5OTUsMzUzMDEsMzUzMDcsMzUzMTEsMzUzOTAsMzU2MjIsMzg3MzksMzg2MzMsMzg2NDMsMzg2MzksMzg2NjIsMzg2NTcsMzg2NjQsMzg2NzEsMzg2NzAsMzg2OTgsMzg3MDEsMzg3MDQsMzg3MTgsNDA4MzIsNDA4MzUsNDA4MzcsNDA4MzgsNDA4MzksNDA4NDAsNDA4NDEsNDA4NDIsNDA4NDQsNDA3MDIsNDA3MTUsNDA3MTcsMzg1ODUsMzg1ODgsMzg1ODksMzg2MDYsMzg2MTAsMzA2NTUsMzg2MjQsMzc1MTgsMzc1NTAsMzc1NzYsMzc2OTQsMzc3MzgsMzc4MzQsMzc3NzUsMzc5NTAsMzc5OTUsNDAwNjMsNDAwNjYsNDAwNjksNDAwNzAsNDAwNzEsNDAwNzIsMzEyNjcsNDAwNzUsNDAwNzgsNDAwODAsNDAwODEsNDAwODIsNDAwODQsNDAwODUsNDAwOTAsNDAwOTEsNDAwOTQsNDAwOTUsNDAwOTYsNDAwOTcsNDAwOTgsNDAwOTksNDAxMDEsNDAxMDIsNDAxMDMsNDAxMDQsNDAxMDUsNDAxMDcsNDAxMDksNDAxMTAsNDAxMTIsNDAxMTMsNDAxMTQsNDAxMTUsNDAxMTYsNDAxMTcsNDAxMTgsNDAxMTksNDAxMjIsNDAxMjMsNDAxMjQsNDAxMjUsNDAxMzIsNDAxMzMsNDAxMzQsNDAxMzUsNDAxMzgsNDAxMzksMzk5OTYsMzk5OTcsMzk5OTgsMzk5OTksNDAwMDAsNDAwMDEsNDAwMDIsNDAwMDMsNDAwMDQsNDAwMDUsNDAwMDYsNDAwMDcsNDAwMDgsNDAwMDksNDAwMTAsNDAwMTEsNDAwMTIsNDAwMTMsNDAwMTQsNDAwMTUsNDAwMTYsNDAwMTcsNDAwMTgsNDAwMTksNDAwMjAsNDAwMjEsNDAwMjIsNDAwMjMsNDAwMjQsNDAwMjUsNDAwMjYsNDAwMjcsNDAwMjgsNDAwMjksNDAwMzAsNDAwMzEsNDAwMzIsNDAwMzMsNDAwMzQsNDAwMzUsNDAwMzYsNDAwMzcsNDAwMzgsNDAwMzksNDAwNDAsNDAwNDEsNDAwNDIsNDAwNDMsNDAwNDQsNDAwNDUsNDAwNDYsNDAwNDcsNDAwNDgsNDAwNDksNDAwNTAsNDAwNTEsNDAwNTIsNDAwNTMsNDAwNTQsNDAwNTUsNDAwNTYsNDAwNTcsNDAwNTgsNDAwNTksNDAwNjEsNDAwNjIsNDAwNjQsNDAwNjcsNDAwNjgsNDAwNzMsNDAwNzQsNDAwNzYsNDAwNzksNDAwODMsNDAwODYsNDAwODcsNDAwODgsNDAwODksNDAwOTMsNDAxMDYsNDAxMDgsNDAxMTEsNDAxMjEsNDAxMjYsNDAxMjcsNDAxMjgsNDAxMjksNDAxMzAsNDAxMzYsNDAxMzcsNDAxNDUsNDAxNDYsNDAxNTQsNDAxNTUsNDAxNjAsNDAxNjEsNDAxNDAsNDAxNDEsNDAxNDIsNDAxNDMsNDAxNDQsNDAxNDcsNDAxNDgsNDAxNDksNDAxNTEsNDAxNTIsNDAxNTMsNDAxNTYsNDAxNTcsNDAxNTksNDAxNjIsMzg3ODAsMzg3ODksMzg4MDEsMzg4MDIsMzg4MDQsMzg4MzEsMzg4MjcsMzg4MTksMzg4MzQsMzg4MzYsMzk2MDEsMzk2MDAsMzk2MDcsNDA1MzYsMzk2MDYsMzk2MTAsMzk2MTIsMzk2MTcsMzk2MTYsMzk2MjEsMzk2MTgsMzk2MjcsMzk2MjgsMzk2MzMsMzk3NDksMzk3NDcsMzk3NTEsMzk3NTMsMzk3NTIsMzk3NTcsMzk3NjEsMzkxNDQsMzkxODEsMzkyMTQsMzkyNTMsMzkyNTIsMzk2NDcsMzk2NDksMzk2NTQsMzk2NjMsMzk2NTksMzk2NzUsMzk2NjEsMzk2NzMsMzk2ODgsMzk2OTUsMzk2OTksMzk3MTEsMzk3MTUsNDA2MzcsNDA2MzgsMzIzMTUsNDA1NzgsNDA1ODMsNDA1ODQsNDA1ODcsNDA1OTQsMzc4NDYsNDA2MDUsNDA2MDcsNDA2NjcsNDA2NjgsNDA2NjksNDA2NzIsNDA2NzEsNDA2NzQsNDA2ODEsNDA2NzksNDA2NzcsNDA2ODIsNDA2ODcsNDA3MzgsNDA3NDgsNDA3NTEsNDA3NjEsNDA3NTksNDA3NjUsNDA3NjYsNDA3NzIsNDAxNjMsNDAxNjQsNDAxNjUsNDAxNjYsNDAxNjcsNDAxNjgsNDAxNjksNDAxNzAsNDAxNzEsNDAxNzIsNDAxNzMsNDAxNzQsNDAxNzUsNDAxNzYsNDAxNzcsNDAxNzgsNDAxNzksNDAxODAsNDAxODEsNDAxODIsNDAxODMsNDAxODQsNDAxODUsNDAxODYsNDAxODcsNDAxODgsNDAxODksNDAxOTAsNDAxOTEsNDAxOTIsNDAxOTMsNDAxOTQsNDAxOTUsNDAxOTYsNDAxOTcsNDAxOTgsNDAxOTksNDAyMDAsNDAyMDEsNDAyMDIsNDAyMDMsNDAyMDQsNDAyMDUsNDAyMDYsNDAyMDcsNDAyMDgsNDAyMDksNDAyMTAsNDAyMTEsNDAyMTIsNDAyMTMsNDAyMTQsNDAyMTUsNDAyMTYsNDAyMTcsNDAyMTgsNDAyMTksNDAyMjAsNDAyMjEsNDAyMjIsNDAyMjMsNDAyMjQsNDAyMjUsNDAyMjYsNDAyMjcsNDAyMjgsNDAyMjksNDAyMzAsNDAyMzEsNDAyMzIsNDAyMzMsNDAyMzQsNDAyMzUsNDAyMzYsNDAyMzcsNDAyMzgsNDAyMzksNDAyNDAsNDAyNDEsNDAyNDIsNDAyNDMsNDAyNDQsNDAyNDUsNDAyNDYsNDAyNDcsNDAyNDgsNDAyNDksNDAyNTAsNDAyNTEsNDAyNTIsNDAyNTMsNDAyNTQsNDAyNTUsNDAyNTYsNDAyNTcsNDAyNTgsNTc5MDgsNTc5MDksNTc5MTAsNTc5MTEsNTc5MTIsNTc5MTMsNTc5MTQsNTc5MTUsNTc5MTYsNTc5MTcsNTc5MTgsNTc5MTksNTc5MjAsNTc5MjEsNTc5MjIsNTc5MjMsNTc5MjQsNTc5MjUsNTc5MjYsNTc5MjcsNTc5MjgsNTc5MjksNTc5MzAsNTc5MzEsNTc5MzIsNTc5MzMsNTc5MzQsNTc5MzUsNTc5MzYsNTc5MzcsNTc5MzgsNTc5MzksNTc5NDAsNTc5NDEsNTc5NDIsNTc5NDMsNTc5NDQsNTc5NDUsNTc5NDYsNTc5NDcsNTc5NDgsNTc5NDksNTc5NTAsNTc5NTEsNTc5NTIsNTc5NTMsNTc5NTQsNTc5NTUsNTc5NTYsNTc5NTcsNTc5NTgsNTc5NTksNTc5NjAsNTc5NjEsNTc5NjIsNTc5NjMsNTc5NjQsNTc5NjUsNTc5NjYsNTc5NjcsNTc5NjgsNTc5NjksNTc5NzAsNTc5NzEsNTc5NzIsNTc5NzMsNTc5NzQsNTc5NzUsNTc5NzYsNTc5NzcsNTc5NzgsNTc5NzksNTc5ODAsNTc5ODEsNTc5ODIsNTc5ODMsNTc5ODQsNTc5ODUsNTc5ODYsNTc5ODcsNTc5ODgsNTc5ODksNTc5OTAsNTc5OTEsNTc5OTIsNTc5OTMsNTc5OTQsNTc5OTUsNTc5OTYsNTc5OTcsNTc5OTgsNTc5OTksNTgwMDAsNTgwMDEsNDAyNTksNDAyNjAsNDAyNjEsNDAyNjIsNDAyNjMsNDAyNjQsNDAyNjUsNDAyNjYsNDAyNjcsNDAyNjgsNDAyNjksNDAyNzAsNDAyNzEsNDAyNzIsNDAyNzMsNDAyNzQsNDAyNzUsNDAyNzYsNDAyNzcsNDAyNzgsNDAyNzksNDAyODAsNDAyODEsNDAyODIsNDAyODMsNDAyODQsNDAyODUsNDAyODYsNDAyODcsNDAyODgsNDAyODksNDAyOTAsNDAyOTEsNDAyOTIsNDAyOTMsNDAyOTQsNDAyOTUsNDAyOTYsNDAyOTcsNDAyOTgsNDAyOTksNDAzMDAsNDAzMDEsNDAzMDIsNDAzMDMsNDAzMDQsNDAzMDUsNDAzMDYsNDAzMDcsNDAzMDgsNDAzMDksNDAzMTAsNDAzMTEsNDAzMTIsNDAzMTMsNDAzMTQsNDAzMTUsNDAzMTYsNDAzMTcsNDAzMTgsNDAzMTksNDAzMjAsNDAzMjEsNDAzMjIsNDAzMjMsNDAzMjQsNDAzMjUsNDAzMjYsNDAzMjcsNDAzMjgsNDAzMjksNDAzMzAsNDAzMzEsNDAzMzIsNDAzMzMsNDAzMzQsNDAzMzUsNDAzMzYsNDAzMzcsNDAzMzgsNDAzMzksNDAzNDAsNDAzNDEsNDAzNDIsNDAzNDMsNDAzNDQsNDAzNDUsNDAzNDYsNDAzNDcsNDAzNDgsNDAzNDksNDAzNTAsNDAzNTEsNDAzNTIsNDAzNTMsNDAzNTQsNTgwMDIsNTgwMDMsNTgwMDQsNTgwMDUsNTgwMDYsNTgwMDcsNTgwMDgsNTgwMDksNTgwMTAsNTgwMTEsNTgwMTIsNTgwMTMsNTgwMTQsNTgwMTUsNTgwMTYsNTgwMTcsNTgwMTgsNTgwMTksNTgwMjAsNTgwMjEsNTgwMjIsNTgwMjMsNTgwMjQsNTgwMjUsNTgwMjYsNTgwMjcsNTgwMjgsNTgwMjksNTgwMzAsNTgwMzEsNTgwMzIsNTgwMzMsNTgwMzQsNTgwMzUsNTgwMzYsNTgwMzcsNTgwMzgsNTgwMzksNTgwNDAsNTgwNDEsNTgwNDIsNTgwNDMsNTgwNDQsNTgwNDUsNTgwNDYsNTgwNDcsNTgwNDgsNTgwNDksNTgwNTAsNTgwNTEsNTgwNTIsNTgwNTMsNTgwNTQsNTgwNTUsNTgwNTYsNTgwNTcsNTgwNTgsNTgwNTksNTgwNjAsNTgwNjEsNTgwNjIsNTgwNjMsNTgwNjQsNTgwNjUsNTgwNjYsNTgwNjcsNTgwNjgsNTgwNjksNTgwNzAsNTgwNzEsNTgwNzIsNTgwNzMsNTgwNzQsNTgwNzUsNTgwNzYsNTgwNzcsNTgwNzgsNTgwNzksNTgwODAsNTgwODEsNTgwODIsNTgwODMsNTgwODQsNTgwODUsNTgwODYsNTgwODcsNTgwODgsNTgwODksNTgwOTAsNTgwOTEsNTgwOTIsNTgwOTMsNTgwOTQsNTgwOTUsNDAzNTUsNDAzNTYsNDAzNTcsNDAzNTgsNDAzNTksNDAzNjAsNDAzNjEsNDAzNjIsNDAzNjMsNDAzNjQsNDAzNjUsNDAzNjYsNDAzNjcsNDAzNjgsNDAzNjksNDAzNzAsNDAzNzEsNDAzNzIsNDAzNzMsNDAzNzQsNDAzNzUsNDAzNzYsNDAzNzcsNDAzNzgsNDAzNzksNDAzODAsNDAzODEsNDAzODIsNDAzODMsNDAzODQsNDAzODUsNDAzODYsNDAzODcsNDAzODgsNDAzODksNDAzOTAsNDAzOTEsNDAzOTIsNDAzOTMsNDAzOTQsNDAzOTUsNDAzOTYsNDAzOTcsNDAzOTgsNDAzOTksNDA0MDAsNDA0MDEsNDA0MDIsNDA0MDMsNDA0MDQsNDA0MDUsNDA0MDYsNDA0MDcsNDA0MDgsNDA0MDksNDA0MTAsNDA0MTEsNDA0MTIsNDA0MTMsNDA0MTQsNDA0MTUsNDA0MTYsNDA0MTcsNDA0MTgsNDA0MTksNDA0MjAsNDA0MjEsNDA0MjIsNDA0MjMsNDA0MjQsNDA0MjUsNDA0MjYsNDA0MjcsNDA0MjgsNDA0MjksNDA0MzAsNDA0MzEsNDA0MzIsNDA0MzMsNDA0MzQsNDA0MzUsNDA0MzYsNDA0MzcsNDA0MzgsNDA0MzksNDA0NDAsNDA0NDEsNDA0NDIsNDA0NDMsNDA0NDQsNDA0NDUsNDA0NDYsNDA0NDcsNDA0NDgsNDA0NDksNDA0NTAsNTgwOTYsNTgwOTcsNTgwOTgsNTgwOTksNTgxMDAsNTgxMDEsNTgxMDIsNTgxMDMsNTgxMDQsNTgxMDUsNTgxMDYsNTgxMDcsNTgxMDgsNTgxMDksNTgxMTAsNTgxMTEsNTgxMTIsNTgxMTMsNTgxMTQsNTgxMTUsNTgxMTYsNTgxMTcsNTgxMTgsNTgxMTksNTgxMjAsNTgxMjEsNTgxMjIsNTgxMjMsNTgxMjQsNTgxMjUsNTgxMjYsNTgxMjcsNTgxMjgsNTgxMjksNTgxMzAsNTgxMzEsNTgxMzIsNTgxMzMsNTgxMzQsNTgxMzUsNTgxMzYsNTgxMzcsNTgxMzgsNTgxMzksNTgxNDAsNTgxNDEsNTgxNDIsNTgxNDMsNTgxNDQsNTgxNDUsNTgxNDYsNTgxNDcsNTgxNDgsNTgxNDksNTgxNTAsNTgxNTEsNTgxNTIsNTgxNTMsNTgxNTQsNTgxNTUsNTgxNTYsNTgxNTcsNTgxNTgsNTgxNTksNTgxNjAsNTgxNjEsNTgxNjIsNTgxNjMsNTgxNjQsNTgxNjUsNTgxNjYsNTgxNjcsNTgxNjgsNTgxNjksNTgxNzAsNTgxNzEsNTgxNzIsNTgxNzMsNTgxNzQsNTgxNzUsNTgxNzYsNTgxNzcsNTgxNzgsNTgxNzksNTgxODAsNTgxODEsNTgxODIsNTgxODMsNTgxODQsNTgxODUsNTgxODYsNTgxODcsNTgxODgsNTgxODksNDA0NTEsNDA0NTIsNDA0NTMsNDA0NTQsNDA0NTUsNDA0NTYsNDA0NTcsNDA0NTgsNDA0NTksNDA0NjAsNDA0NjEsNDA0NjIsNDA0NjMsNDA0NjQsNDA0NjUsNDA0NjYsNDA0NjcsNDA0NjgsNDA0NjksNDA0NzAsNDA0NzEsNDA0NzIsNDA0NzMsNDA0NzQsNDA0NzUsNDA0NzYsNDA0NzcsNDA0NzgsNDA0ODQsNDA0ODcsNDA0OTQsNDA0OTYsNDA1MDAsNDA1MDcsNDA1MDgsNDA1MTIsNDA1MjUsNDA1MjgsNDA1MzAsNDA1MzEsNDA1MzIsNDA1MzQsNDA1MzcsNDA1NDEsNDA1NDMsNDA1NDQsNDA1NDUsNDA1NDYsNDA1NDksNDA1NTgsNDA1NTksNDA1NjIsNDA1NjQsNDA1NjUsNDA1NjYsNDA1NjcsNDA1NjgsNDA1NjksNDA1NzAsNDA1NzEsNDA1NzIsNDA1NzMsNDA1NzYsNDA1NzcsNDA1NzksNDA1ODAsNDA1ODEsNDA1ODIsNDA1ODUsNDA1ODYsNDA1ODgsNDA1ODksNDA1OTAsNDA1OTEsNDA1OTIsNDA1OTMsNDA1OTYsNDA1OTcsNDA1OTgsNDA1OTksNDA2MDAsNDA2MDEsNDA2MDIsNDA2MDMsNDA2MDQsNDA2MDYsNDA2MDgsNDA2MDksNDA2MTAsNDA2MTEsNDA2MTIsNDA2MTMsNDA2MTUsNDA2MTYsNDA2MTcsNDA2MTgsNTgxOTAsNTgxOTEsNTgxOTIsNTgxOTMsNTgxOTQsNTgxOTUsNTgxOTYsNTgxOTcsNTgxOTgsNTgxOTksNTgyMDAsNTgyMDEsNTgyMDIsNTgyMDMsNTgyMDQsNTgyMDUsNTgyMDYsNTgyMDcsNTgyMDgsNTgyMDksNTgyMTAsNTgyMTEsNTgyMTIsNTgyMTMsNTgyMTQsNTgyMTUsNTgyMTYsNTgyMTcsNTgyMTgsNTgyMTksNTgyMjAsNTgyMjEsNTgyMjIsNTgyMjMsNTgyMjQsNTgyMjUsNTgyMjYsNTgyMjcsNTgyMjgsNTgyMjksNTgyMzAsNTgyMzEsNTgyMzIsNTgyMzMsNTgyMzQsNTgyMzUsNTgyMzYsNTgyMzcsNTgyMzgsNTgyMzksNTgyNDAsNTgyNDEsNTgyNDIsNTgyNDMsNTgyNDQsNTgyNDUsNTgyNDYsNTgyNDcsNTgyNDgsNTgyNDksNTgyNTAsNTgyNTEsNTgyNTIsNTgyNTMsNTgyNTQsNTgyNTUsNTgyNTYsNTgyNTcsNTgyNTgsNTgyNTksNTgyNjAsNTgyNjEsNTgyNjIsNTgyNjMsNTgyNjQsNTgyNjUsNTgyNjYsNTgyNjcsNTgyNjgsNTgyNjksNTgyNzAsNTgyNzEsNTgyNzIsNTgyNzMsNTgyNzQsNTgyNzUsNTgyNzYsNTgyNzcsNTgyNzgsNTgyNzksNTgyODAsNTgyODEsNTgyODIsNTgyODMsNDA2MTksNDA2MjAsNDA2MjEsNDA2MjIsNDA2MjMsNDA2MjQsNDA2MjUsNDA2MjYsNDA2MjcsNDA2MjksNDA2MzAsNDA2MzEsNDA2MzMsNDA2MzQsNDA2MzYsNDA2MzksNDA2NDAsNDA2NDEsNDA2NDIsNDA2NDMsNDA2NDUsNDA2NDYsNDA2NDcsNDA2NDgsNDA2NTAsNDA2NTEsNDA2NTIsNDA2NTYsNDA2NTgsNDA2NTksNDA2NjEsNDA2NjIsNDA2NjMsNDA2NjUsNDA2NjYsNDA2NzAsNDA2NzMsNDA2NzUsNDA2NzYsNDA2NzgsNDA2ODAsNDA2ODMsNDA2ODQsNDA2ODUsNDA2ODYsNDA2ODgsNDA2ODksNDA2OTAsNDA2OTEsNDA2OTIsNDA2OTMsNDA2OTQsNDA2OTUsNDA2OTYsNDA2OTgsNDA3MDEsNDA3MDMsNDA3MDQsNDA3MDUsNDA3MDYsNDA3MDcsNDA3MDgsNDA3MDksNDA3MTAsNDA3MTEsNDA3MTIsNDA3MTMsNDA3MTQsNDA3MTYsNDA3MTksNDA3MjEsNDA3MjIsNDA3MjQsNDA3MjUsNDA3MjYsNDA3MjgsNDA3MzAsNDA3MzEsNDA3MzIsNDA3MzMsNDA3MzQsNDA3MzUsNDA3MzcsNDA3MzksNDA3NDAsNDA3NDEsNDA3NDIsNDA3NDMsNDA3NDQsNDA3NDUsNDA3NDYsNDA3NDcsNDA3NDksNDA3NTAsNDA3NTIsNDA3NTMsNTgyODQsNTgyODUsNTgyODYsNTgyODcsNTgyODgsNTgyODksNTgyOTAsNTgyOTEsNTgyOTIsNTgyOTMsNTgyOTQsNTgyOTUsNTgyOTYsNTgyOTcsNTgyOTgsNTgyOTksNTgzMDAsNTgzMDEsNTgzMDIsNTgzMDMsNTgzMDQsNTgzMDUsNTgzMDYsNTgzMDcsNTgzMDgsNTgzMDksNTgzMTAsNTgzMTEsNTgzMTIsNTgzMTMsNTgzMTQsNTgzMTUsNTgzMTYsNTgzMTcsNTgzMTgsNTgzMTksNTgzMjAsNTgzMjEsNTgzMjIsNTgzMjMsNTgzMjQsNTgzMjUsNTgzMjYsNTgzMjcsNTgzMjgsNTgzMjksNTgzMzAsNTgzMzEsNTgzMzIsNTgzMzMsNTgzMzQsNTgzMzUsNTgzMzYsNTgzMzcsNTgzMzgsNTgzMzksNTgzNDAsNTgzNDEsNTgzNDIsNTgzNDMsNTgzNDQsNTgzNDUsNTgzNDYsNTgzNDcsNTgzNDgsNTgzNDksNTgzNTAsNTgzNTEsNTgzNTIsNTgzNTMsNTgzNTQsNTgzNTUsNTgzNTYsNTgzNTcsNTgzNTgsNTgzNTksNTgzNjAsNTgzNjEsNTgzNjIsNTgzNjMsNTgzNjQsNTgzNjUsNTgzNjYsNTgzNjcsNTgzNjgsNTgzNjksNTgzNzAsNTgzNzEsNTgzNzIsNTgzNzMsNTgzNzQsNTgzNzUsNTgzNzYsNTgzNzcsNDA3NTQsNDA3NTUsNDA3NTYsNDA3NTcsNDA3NTgsNDA3NjAsNDA3NjIsNDA3NjQsNDA3NjcsNDA3NjgsNDA3NjksNDA3NzAsNDA3NzEsNDA3NzMsNDA3NzQsNDA3NzUsNDA3NzYsNDA3NzcsNDA3NzgsNDA3NzksNDA3ODAsNDA3ODEsNDA3ODIsNDA3ODMsNDA3ODYsNDA3ODcsNDA3ODgsNDA3ODksNDA3OTAsNDA3OTEsNDA3OTIsNDA3OTMsNDA3OTQsNDA3OTUsNDA3OTYsNDA3OTcsNDA3OTgsNDA3OTksNDA4MDAsNDA4MDEsNDA4MDIsNDA4MDMsNDA4MDQsNDA4MDUsNDA4MDYsNDA4MDcsNDA4MDgsNDA4MDksNDA4MTAsNDA4MTEsNDA4MTIsNDA4MTMsNDA4MTQsNDA4MTUsNDA4MTYsNDA4MTcsNDA4MTgsNDA4MTksNDA4MjAsNDA4MjEsNDA4MjIsNDA4MjMsNDA4MjQsNDA4MjUsNDA4MjYsNDA4MjcsNDA4MjgsNDA4MjksNDA4MzAsNDA4MzMsNDA4MzQsNDA4NDUsNDA4NDYsNDA4NDcsNDA4NDgsNDA4NDksNDA4NTAsNDA4NTEsNDA4NTIsNDA4NTMsNDA4NTQsNDA4NTUsNDA4NTYsNDA4NjAsNDA4NjEsNDA4NjIsNDA4NjUsNDA4NjYsNDA4NjcsNDA4NjgsNDA4NjksNjM3ODgsNjM4NjUsNjM4OTMsNjM5NzUsNjM5ODUsNTgzNzgsNTgzNzksNTgzODAsNTgzODEsNTgzODIsNTgzODMsNTgzODQsNTgzODUsNTgzODYsNTgzODcsNTgzODgsNTgzODksNTgzOTAsNTgzOTEsNTgzOTIsNTgzOTMsNTgzOTQsNTgzOTUsNTgzOTYsNTgzOTcsNTgzOTgsNTgzOTksNTg0MDAsNTg0MDEsNTg0MDIsNTg0MDMsNTg0MDQsNTg0MDUsNTg0MDYsNTg0MDcsNTg0MDgsNTg0MDksNTg0MTAsNTg0MTEsNTg0MTIsNTg0MTMsNTg0MTQsNTg0MTUsNTg0MTYsNTg0MTcsNTg0MTgsNTg0MTksNTg0MjAsNTg0MjEsNTg0MjIsNTg0MjMsNTg0MjQsNTg0MjUsNTg0MjYsNTg0MjcsNTg0MjgsNTg0MjksNTg0MzAsNTg0MzEsNTg0MzIsNTg0MzMsNTg0MzQsNTg0MzUsNTg0MzYsNTg0MzcsNTg0MzgsNTg0MzksNTg0NDAsNTg0NDEsNTg0NDIsNTg0NDMsNTg0NDQsNTg0NDUsNTg0NDYsNTg0NDcsNTg0NDgsNTg0NDksNTg0NTAsNTg0NTEsNTg0NTIsNTg0NTMsNTg0NTQsNTg0NTUsNTg0NTYsNTg0NTcsNTg0NTgsNTg0NTksNTg0NjAsNTg0NjEsNTg0NjIsNTg0NjMsNTg0NjQsNTg0NjUsNTg0NjYsNTg0NjcsNTg0NjgsNTg0NjksNTg0NzAsNTg0NzEsNjQwMTIsNjQwMTMsNjQwMTQsNjQwMTUsNjQwMTcsNjQwMTksNjQwMjAsNjQwMjQsNjQwMzEsNjQwMzIsNjQwMzMsNjQwMzUsNjQwMzYsNjQwMzksNjQwNDAsNjQwNDEsMTE5MDUsNTk0MTQsNTk0MTUsNTk0MTYsMTE5MDgsMTM0MjcsMTMzODMsMTE5MTIsMTE5MTUsNTk0MjIsMTM3MjYsMTM4NTAsMTM4MzgsMTE5MTYsMTE5MjcsMTQ3MDIsMTQ2MTYsNTk0MzAsMTQ3OTksMTQ4MTUsMTQ5NjMsMTQ4MDAsNTk0MzUsNTk0MzYsMTUxODIsMTU0NzAsMTU1ODQsMTE5NDMsNTk0NDEsNTk0NDIsMTE5NDYsMTY0NzAsMTY3MzUsMTE5NTAsMTcyMDcsMTE5NTUsMTE5NTgsMTE5NTksNTk0NTEsMTczMjksMTczMjQsMTE5NjMsMTczNzMsMTc2MjIsMTgwMTcsMTc5OTYsNTk0NTksMTgyMTEsMTgyMTcsMTgzMDAsMTgzMTcsMTE5NzgsMTg3NTksMTg4MTAsMTg4MTMsMTg4MTgsMTg4MTksMTg4MjEsMTg4MjIsMTg4NDcsMTg4NDMsMTg4NzEsMTg4NzAsNTk0NzYsNTk0NzcsMTk2MTksMTk2MTUsMTk2MTYsMTk2MTcsMTk1NzUsMTk2MTgsMTk3MzEsMTk3MzIsMTk3MzMsMTk3MzQsMTk3MzUsMTk3MzYsMTk3MzcsMTk4ODYsNTk0OTIsNTg0NzIsNTg0NzMsNTg0NzQsNTg0NzUsNTg0NzYsNTg0NzcsNTg0NzgsNTg0NzksNTg0ODAsNTg0ODEsNTg0ODIsNTg0ODMsNTg0ODQsNTg0ODUsNTg0ODYsNTg0ODcsNTg0ODgsNTg0ODksNTg0OTAsNTg0OTEsNTg0OTIsNTg0OTMsNTg0OTQsNTg0OTUsNTg0OTYsNTg0OTcsNTg0OTgsNTg0OTksNTg1MDAsNTg1MDEsNTg1MDIsNTg1MDMsNTg1MDQsNTg1MDUsNTg1MDYsNTg1MDcsNTg1MDgsNTg1MDksNTg1MTAsNTg1MTEsNTg1MTIsNTg1MTMsNTg1MTQsNTg1MTUsNTg1MTYsNTg1MTcsNTg1MTgsNTg1MTksNTg1MjAsNTg1MjEsNTg1MjIsNTg1MjMsNTg1MjQsNTg1MjUsNTg1MjYsNTg1MjcsNTg1MjgsNTg1MjksNTg1MzAsNTg1MzEsNTg1MzIsNTg1MzMsNTg1MzQsNTg1MzUsNTg1MzYsNTg1MzcsNTg1MzgsNTg1MzksNTg1NDAsNTg1NDEsNTg1NDIsNTg1NDMsNTg1NDQsNTg1NDUsNTg1NDYsNTg1NDcsNTg1NDgsNTg1NDksNTg1NTAsNTg1NTEsNTg1NTIsNTg1NTMsNTg1NTQsNTg1NTUsNTg1NTYsNTg1NTcsNTg1NTgsNTg1NTksNTg1NjAsNTg1NjEsNTg1NjIsNTg1NjMsNTg1NjQsNTg1NjVdLFxuICBcImdiMTgwMzAtcmFuZ2VzXCI6W1swLDEyOF0sWzM2LDE2NV0sWzM4LDE2OV0sWzQ1LDE3OF0sWzUwLDE4NF0sWzgxLDIxNl0sWzg5LDIyNl0sWzk1LDIzNV0sWzk2LDIzOF0sWzEwMCwyNDRdLFsxMDMsMjQ4XSxbMTA0LDI1MV0sWzEwNSwyNTNdLFsxMDksMjU4XSxbMTI2LDI3Nl0sWzEzMywyODRdLFsxNDgsMzAwXSxbMTcyLDMyNV0sWzE3NSwzMjldLFsxNzksMzM0XSxbMjA4LDM2NF0sWzMwNiw0NjNdLFszMDcsNDY1XSxbMzA4LDQ2N10sWzMwOSw0NjldLFszMTAsNDcxXSxbMzExLDQ3M10sWzMxMiw0NzVdLFszMTMsNDc3XSxbMzQxLDUwNl0sWzQyOCw1OTRdLFs0NDMsNjEwXSxbNTQ0LDcxMl0sWzU0NSw3MTZdLFs1NTgsNzMwXSxbNzQxLDkzMF0sWzc0Miw5MzhdLFs3NDksOTYyXSxbNzUwLDk3MF0sWzgwNSwxMDI2XSxbODE5LDExMDRdLFs4MjAsMTEwNl0sWzc5MjIsODIwOV0sWzc5MjQsODIxNV0sWzc5MjUsODIxOF0sWzc5MjcsODIyMl0sWzc5MzQsODIzMV0sWzc5NDMsODI0MV0sWzc5NDQsODI0NF0sWzc5NDUsODI0Nl0sWzc5NTAsODI1Ml0sWzgwNjIsODM2NV0sWzgxNDgsODQ1Ml0sWzgxNDksODQ1NF0sWzgxNTIsODQ1OF0sWzgxNjQsODQ3MV0sWzgxNzQsODQ4Ml0sWzgyMzYsODU1Nl0sWzgyNDAsODU3MF0sWzgyNjIsODU5Nl0sWzgyNjQsODYwMl0sWzgzNzQsODcxM10sWzgzODAsODcyMF0sWzgzODEsODcyMl0sWzgzODQsODcyNl0sWzgzODgsODczMV0sWzgzOTAsODczN10sWzgzOTIsODc0MF0sWzgzOTMsODc0Ml0sWzgzOTQsODc0OF0sWzgzOTYsODc1MV0sWzg0MDEsODc2MF0sWzg0MDYsODc2Nl0sWzg0MTYsODc3N10sWzg0MTksODc4MV0sWzg0MjQsODc4N10sWzg0MzcsODgwMl0sWzg0MzksODgwOF0sWzg0NDUsODgxNl0sWzg0ODIsODg1NF0sWzg0ODUsODg1OF0sWzg0OTYsODg3MF0sWzg1MjEsODg5Nl0sWzg2MDMsODk3OV0sWzg5MzYsOTMyMl0sWzg5NDYsOTM3Ml0sWzkwNDYsOTU0OF0sWzkwNTAsOTU4OF0sWzkwNjMsOTYxNl0sWzkwNjYsOTYyMl0sWzkwNzYsOTYzNF0sWzkwOTIsOTY1Ml0sWzkxMDAsOTY2Ml0sWzkxMDgsOTY3Ml0sWzkxMTEsOTY3Nl0sWzkxMTMsOTY4MF0sWzkxMzEsOTcwMl0sWzkxNjIsOTczNV0sWzkxNjQsOTczOF0sWzkyMTgsOTc5M10sWzkyMTksOTc5NV0sWzExMzI5LDExOTA2XSxbMTEzMzEsMTE5MDldLFsxMTMzNCwxMTkxM10sWzExMzM2LDExOTE3XSxbMTEzNDYsMTE5MjhdLFsxMTM2MSwxMTk0NF0sWzExMzYzLDExOTQ3XSxbMTEzNjYsMTE5NTFdLFsxMTM3MCwxMTk1Nl0sWzExMzcyLDExOTYwXSxbMTEzNzUsMTE5NjRdLFsxMTM4OSwxMTk3OV0sWzExNjgyLDEyMjg0XSxbMTE2ODYsMTIyOTJdLFsxMTY4NywxMjMxMl0sWzExNjkyLDEyMzE5XSxbMTE2OTQsMTIzMzBdLFsxMTcxNCwxMjM1MV0sWzExNzE2LDEyNDM2XSxbMTE3MjMsMTI0NDddLFsxMTcyNSwxMjUzNV0sWzExNzMwLDEyNTQzXSxbMTE3MzYsMTI1ODZdLFsxMTk4MiwxMjg0Ml0sWzExOTg5LDEyODUwXSxbMTIxMDIsMTI5NjRdLFsxMjMzNiwxMzIwMF0sWzEyMzQ4LDEzMjE1XSxbMTIzNTAsMTMyMThdLFsxMjM4NCwxMzI1M10sWzEyMzkzLDEzMjYzXSxbMTIzOTUsMTMyNjddLFsxMjM5NywxMzI3MF0sWzEyNTEwLDEzMzg0XSxbMTI1NTMsMTM0MjhdLFsxMjg1MSwxMzcyN10sWzEyOTYyLDEzODM5XSxbMTI5NzMsMTM4NTFdLFsxMzczOCwxNDYxN10sWzEzODIzLDE0NzAzXSxbMTM5MTksMTQ4MDFdLFsxMzkzMywxNDgxNl0sWzE0MDgwLDE0OTY0XSxbMTQyOTgsMTUxODNdLFsxNDU4NSwxNTQ3MV0sWzE0Njk4LDE1NTg1XSxbMTU1ODMsMTY0NzFdLFsxNTg0NywxNjczNl0sWzE2MzE4LDE3MjA4XSxbMTY0MzQsMTczMjVdLFsxNjQzOCwxNzMzMF0sWzE2NDgxLDE3Mzc0XSxbMTY3MjksMTc2MjNdLFsxNzEwMiwxNzk5N10sWzE3MTIyLDE4MDE4XSxbMTczMTUsMTgyMTJdLFsxNzMyMCwxODIxOF0sWzE3NDAyLDE4MzAxXSxbMTc0MTgsMTgzMThdLFsxNzg1OSwxODc2MF0sWzE3OTA5LDE4ODExXSxbMTc5MTEsMTg4MTRdLFsxNzkxNSwxODgyMF0sWzE3OTE2LDE4ODIzXSxbMTc5MzYsMTg4NDRdLFsxNzkzOSwxODg0OF0sWzE3OTYxLDE4ODcyXSxbMTg2NjQsMTk1NzZdLFsxODcwMywxOTYyMF0sWzE4ODE0LDE5NzM4XSxbMTg5NjIsMTk4ODddLFsxOTA0Myw0MDg3MF0sWzMzNDY5LDU5MjQ0XSxbMzM0NzAsNTkzMzZdLFszMzQ3MSw1OTM2N10sWzMzNDg0LDU5NDEzXSxbMzM0ODUsNTk0MTddLFszMzQ5MCw1OTQyM10sWzMzNDk3LDU5NDMxXSxbMzM1MDEsNTk0MzddLFszMzUwNSw1OTQ0M10sWzMzNTEzLDU5NDUyXSxbMzM1MjAsNTk0NjBdLFszMzUzNiw1OTQ3OF0sWzMzNTUwLDU5NDkzXSxbMzc4NDUsNjM3ODldLFszNzkyMSw2Mzg2Nl0sWzM3OTQ4LDYzODk0XSxbMzgwMjksNjM5NzZdLFszODAzOCw2Mzk4Nl0sWzM4MDY0LDY0MDE2XSxbMzgwNjUsNjQwMThdLFszODA2Niw2NDAyMV0sWzM4MDY5LDY0MDI1XSxbMzgwNzUsNjQwMzRdLFszODA3Niw2NDAzN10sWzM4MDc4LDY0MDQyXSxbMzkxMDgsNjUwNzRdLFszOTEwOSw2NTA5M10sWzM5MTEzLDY1MTA3XSxbMzkxMTQsNjUxMTJdLFszOTExNSw2NTEyN10sWzM5MTE2LDY1MTMyXSxbMzkyNjUsNjUzNzVdLFszOTM5NCw2NTUxMF0sWzE4OTAwMCw2NTUzNl1dLFxuICBcImppczAyMDhcIjpbMTIyODgsMTIyODksMTIyOTAsNjUyOTIsNjUyOTQsMTI1MzksNjUzMDYsNjUzMDcsNjUzMTEsNjUyODEsMTI0NDMsMTI0NDQsMTgwLDY1MzQ0LDE2OCw2NTM0Miw2NTUwNyw2NTM0MywxMjU0MSwxMjU0MiwxMjQ0NSwxMjQ0NiwxMjI5MSwyMDE4OSwxMjI5MywxMjI5NCwxMjI5NSwxMjU0MCw4MjEzLDgyMDgsNjUyOTUsNjUzNDAsNjUzNzQsODc0MSw2NTM3Miw4MjMwLDgyMjksODIxNiw4MjE3LDgyMjAsODIyMSw2NTI4OCw2NTI4OSwxMjMwOCwxMjMwOSw2NTMzOSw2NTM0MSw2NTM3MSw2NTM3MywxMjI5NiwxMjI5NywxMjI5OCwxMjI5OSwxMjMwMCwxMjMwMSwxMjMwMiwxMjMwMywxMjMwNCwxMjMwNSw2NTI5MSw2NTI5MywxNzcsMjE1LDI0Nyw2NTMwOSw4ODAwLDY1MzA4LDY1MzEwLDg4MDYsODgwNyw4NzM0LDg3NTYsOTc5NCw5NzkyLDE3Niw4MjQyLDgyNDMsODQ1MSw2NTUwOSw2NTI4NCw2NTUwNCw2NTUwNSw2NTI4NSw2NTI4Myw2NTI4Niw2NTI5MCw2NTMxMiwxNjcsOTczNCw5NzMzLDk2NzUsOTY3OSw5Njc4LDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY1MSw5NjUwLDk2NjEsOTY2MCw4MjUxLDEyMzA2LDg1OTQsODU5Miw4NTkzLDg1OTUsMTIzMDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg3MTIsODcxNSw4ODM4LDg4MzksODgzNCw4ODM1LDg3NDYsODc0NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODc0Myw4NzQ0LDY1NTA2LDg2NTgsODY2MCw4NzA0LDg3MDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg3MzYsODg2OSw4OTc4LDg3MDYsODcxMSw4ODAxLDg3ODYsODgxMCw4ODExLDg3MzAsODc2NSw4NzMzLDg3NTcsODc0Nyw4NzQ4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODQ5MSw4MjQwLDk4MzksOTgzNyw5ODM0LDgyMjQsODIyNSwxODIsbnVsbCxudWxsLG51bGwsbnVsbCw5NzExLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsbnVsbCxudWxsLG51bGwsbnVsbCwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwxMjM2MCwxMjM2MSwxMjM2MiwxMjM2MywxMjM2NCwxMjM2NSwxMjM2NiwxMjM2NywxMjM2OCwxMjM2OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3MywxMjM3NCwxMjM3NSwxMjM3NiwxMjM3NywxMjM3OCwxMjM3OSwxMjM4MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4OCwxMjM4OSwxMjM5MCwxMjM5MSwxMjM5MiwxMjM5MywxMjM5NCwxMjM5NSwxMjM5NiwxMjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQwMSwxMjQwMiwxMjQwMywxMjQwNCwxMjQwNSwxMjQwNiwxMjQwNywxMjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwxMjQxNSwxMjQxNiwxMjQxNywxMjQxOCwxMjQxOSwxMjQyMCwxMjQyMSwxMjQyMiwxMjQyMywxMjQyNCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwxMjQzMCwxMjQzMSwxMjQzMiwxMjQzMywxMjQzNCwxMjQzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTYsOTQ5Miw5NTAwLDk1MTYsOTUwOCw5NTI0LDk1MzIsOTQ3Myw5NDc1LDk0ODcsOTQ5MSw5NDk5LDk0OTUsOTUwNyw5NTIzLDk1MTUsOTUzMSw5NTQ3LDk1MDQsOTUxOSw5NTEyLDk1MjcsOTUzNSw5NTAxLDk1MjAsOTUwOSw5NTI4LDk1MzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkzMjAsOTMyMSw5MzIyLDkzMjMsOTMyNCw5MzI1LDkzMjYsOTMyNyw5MzI4LDkzMjksOTMzMCw5MzMxLDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsbnVsbCwxMzEyOSwxMzA3NiwxMzA5MCwxMzEzMywxMzA4MCwxMzA5NSwxMzA1OSwxMzExMCwxMzEzNywxMzE0MywxMzA2OSwxMzA5NCwxMzA5MSwxMzA5OSwxMzEzMCwxMzExNSwxMzIxMiwxMzIxMywxMzIxNCwxMzE5OCwxMzE5OSwxMzI1MiwxMzIxNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTMxNzksMTIzMTcsMTIzMTksODQ3MCwxMzI2MSw4NDgxLDEyOTY0LDEyOTY1LDEyOTY2LDEyOTY3LDEyOTY4LDEyODQ5LDEyODUwLDEyODU3LDEzMTgyLDEzMTgxLDEzMTgwLDg3ODYsODgwMSw4NzQ3LDg3NTAsODcyMSw4NzMwLDg4NjksODczNiw4NzM1LDg4OTUsODc1Nyw4NzQ1LDg3NDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDEyNCwyMTc4MiwyMzA0MywzODQ2MywyMTY5NiwyNDg1OSwyNTM4NCwyMzAzMCwzNjg5OCwzMzkwOSwzMzU2NCwzMTMxMiwyNDc0NiwyNTU2OSwyODE5NywyNjA5MywzMzg5NCwzMzQ0NiwzOTkyNSwyNjc3MSwyMjMxMSwyNjAxNywyNTIwMSwyMzQ1MSwyMjk5MiwzNDQyNywzOTE1NiwzMjA5OCwzMjE5MCwzOTgyMiwyNTExMCwzMTkwMywzNDk5OSwyMzQzMywyNDI0NSwyNTM1MywyNjI2MywyNjY5NiwzODM0MywzODc5NywyNjQ0NywyMDE5NywyMDIzNCwyMDMwMSwyMDM4MSwyMDU1MywyMjI1OCwyMjgzOSwyMjk5NiwyMzA0MSwyMzU2MSwyNDc5OSwyNDg0NywyNDk0NCwyNjEzMSwyNjg4NSwyODg1OCwzMDAzMSwzMDA2NCwzMTIyNywzMjE3MywzMjIzOSwzMjk2MywzMzgwNiwzNDkxNSwzNTU4NiwzNjk0OSwzNjk4NiwyMTMwNywyMDExNywyMDEzMywyMjQ5NSwzMjk0NiwzNzA1NywzMDk1OSwxOTk2OCwyMjc2OSwyODMyMiwzNjkyMCwzMTI4MiwzMzU3NiwzMzQxOSwzOTk4MywyMDgwMSwyMTM2MCwyMTY5MywyMTcyOSwyMjI0MCwyMzAzNSwyNDM0MSwzOTE1NCwyODEzOSwzMjk5NiwzNDA5MywzODQ5OCwzODUxMiwzODU2MCwzODkwNywyMTUxNSwyMTQ5MSwyMzQzMSwyODg3OSwzMjcwMSwzNjgwMiwzODYzMiwyMTM1OSw0MDI4NCwzMTQxOCwxOTk4NSwzMDg2NywzMzI3NiwyODE5OCwyMjA0MCwyMTc2NCwyNzQyMSwzNDA3NCwzOTk5NSwyMzAxMywyMTQxNywyODAwNiwyOTkxNiwzODI4NywyMjA4MiwyMDExMywzNjkzOSwzODY0MiwzMzYxNSwzOTE4MCwyMTQ3MywyMTk0MiwyMzM0NCwyNDQzMywyNjE0NCwyNjM1NSwyNjYyOCwyNzcwNCwyNzg5MSwyNzk0NSwyOTc4NywzMDQwOCwzMTMxMCwzODk2NCwzMzUyMSwzNDkwNywzNTQyNCwzNzYxMywyODA4MiwzMDEyMywzMDQxMCwzOTM2NSwyNDc0MiwzNTU4NSwzNjIzNCwzODMyMiwyNzAyMiwyMTQyMSwyMDg3MCwyMjI5MCwyMjU3NiwyMjg1MiwyMzQ3NiwyNDMxMCwyNDYxNiwyNTUxMywyNTU4OCwyNzgzOSwyODQzNiwyODgxNCwyODk0OCwyOTAxNywyOTE0MSwyOTUwMywzMjI1NywzMzM5OCwzMzQ4OSwzNDE5OSwzNjk2MCwzNzQ2Nyw0MDIxOSwyMjYzMywyNjA0NCwyNzczOCwyOTk4OSwyMDk4NSwyMjgzMCwyMjg4NSwyNDQ0OCwyNDU0MCwyNTI3NiwyNjEwNiwyNzE3OCwyNzQzMSwyNzU3MiwyOTU3OSwzMjcwNSwzNTE1OCw0MDIzNiw0MDIwNiw0MDY0NCwyMzcxMywyNzc5OCwzMzY1OSwyMDc0MCwyMzYyNywyNTAxNCwzMzIyMiwyNjc0MiwyOTI4MSwyMDA1NywyMDQ3NCwyMTM2OCwyNDY4MSwyODIwMSwzMTMxMSwzODg5OSwxOTk3OSwyMTI3MCwyMDIwNiwyMDMwOSwyMDI4NSwyMDM4NSwyMDMzOSwyMTE1MiwyMTQ4NywyMjAyNSwyMjc5OSwyMzIzMywyMzQ3OCwyMzUyMSwzMTE4NSwyNjI0NywyNjUyNCwyNjU1MCwyNzQ2OCwyNzgyNywyODc3OSwyOTYzNCwzMTExNywzMTE2NiwzMTI5MiwzMTYyMywzMzQ1NywzMzQ5OSwzMzU0MCwzMzY1NSwzMzc3NSwzMzc0NywzNDY2MiwzNTUwNiwyMjA1NywzNjAwOCwzNjgzOCwzNjk0MiwzODY4NiwzNDQ0MiwyMDQyMCwyMzc4NCwyNTEwNSwyOTI3MywzMDAxMSwzMzI1MywzMzQ2OSwzNDU1OCwzNjAzMiwzODU5NywzOTE4NywzOTM4MSwyMDE3MSwyMDI1MCwzNTI5OSwyMjIzOCwyMjYwMiwyMjczMCwyNDMxNSwyNDU1NSwyNDYxOCwyNDcyNCwyNDY3NCwyNTA0MCwyNTEwNiwyNTI5NiwyNTkxMywzOTc0NSwyNjIxNCwyNjgwMCwyODAyMywyODc4NCwzMDAyOCwzMDM0MiwzMjExNywzMzQ0NSwzNDgwOSwzODI4MywzODU0MiwzNTk5NywyMDk3NywyMTE4MiwyMjgwNiwyMTY4MywyMzQ3NSwyMzgzMCwyNDkzNiwyNzAxMCwyODA3OSwzMDg2MSwzMzk5NSwzNDkwMywzNTQ0MiwzNzc5OSwzOTYwOCwyODAxMiwzOTMzNiwzNDUyMSwyMjQzNSwyNjYyMywzNDUxMCwzNzM5MCwyMTEyMywyMjE1MSwyMTUwOCwyNDI3NSwyNTMxMywyNTc4NSwyNjY4NCwyNjY4MCwyNzU3OSwyOTU1NCwzMDkwNiwzMTMzOSwzNTIyNiwzNTI4MiwzNjIwMywzNjYxMSwzNzEwMSwzODMwNywzODU0OCwzODc2MSwyMzM5OCwyMzczMSwyNzAwNSwzODk4OSwzODk5MCwyNTQ5OSwzMTUyMCwyNzE3OSwyNzI2MywyNjgwNiwzOTk0OSwyODUxMSwyMTEwNiwyMTkxNywyNDY4OCwyNTMyNCwyNzk2MywyODE2NywyODM2OSwzMzg4MywzNTA4OCwzNjY3NiwxOTk4OCwzOTk5MywyMTQ5NCwyNjkwNywyNzE5NCwzODc4OCwyNjY2NiwyMDgyOCwzMTQyNywzMzk3MCwzNzM0MCwzNzc3MiwyMjEwNyw0MDIzMiwyNjY1OCwzMzU0MSwzMzg0MSwzMTkwOSwyMTAwMCwzMzQ3NywyOTkyNiwyMDA5NCwyMDM1NSwyMDg5NiwyMzUwNiwyMTAwMiwyMTIwOCwyMTIyMywyNDA1OSwyMTkxNCwyMjU3MCwyMzAxNCwyMzQzNiwyMzQ0OCwyMzUxNSwyNDE3OCwyNDE4NSwyNDczOSwyNDg2MywyNDkzMSwyNTAyMiwyNTU2MywyNTk1NCwyNjU3NywyNjcwNywyNjg3NCwyNzQ1NCwyNzQ3NSwyNzczNSwyODQ1MCwyODU2NywyODQ4NSwyOTg3MiwyOTk3NiwzMDQzNSwzMDQ3NSwzMTQ4NywzMTY0OSwzMTc3NywzMjIzMywzMjU2NiwzMjc1MiwzMjkyNSwzMzM4MiwzMzY5NCwzNTI1MSwzNTUzMiwzNjAxMSwzNjk5NiwzNzk2OSwzODI5MSwzODI4OSwzODMwNiwzODUwMSwzODg2NywzOTIwOCwzMzMwNCwyMDAyNCwyMTU0NywyMzczNiwyNDAxMiwyOTYwOSwzMDI4NCwzMDUyNCwyMzcyMSwzMjc0NywzNjEwNywzODU5MywzODkyOSwzODk5NiwzOTAwMCwyMDIyNSwyMDIzOCwyMTM2MSwyMTkxNiwyMjEyMCwyMjUyMiwyMjg1NSwyMzMwNSwyMzQ5MiwyMzY5NiwyNDA3NiwyNDE5MCwyNDUyNCwyNTU4MiwyNjQyNiwyNjA3MSwyNjA4MiwyNjM5OSwyNjgyNywyNjgyMCwyNzIzMSwyNDExMiwyNzU4OSwyNzY3MSwyNzc3MywzMDA3OSwzMTA0OCwyMzM5NSwzMTIzMiwzMjAwMCwyNDUwOSwzNTIxNSwzNTM1MiwzNjAyMCwzNjIxNSwzNjU1NiwzNjYzNywzOTEzOCwzOTQzOCwzOTc0MCwyMDA5NiwyMDYwNSwyMDczNiwyMjkzMSwyMzQ1MiwyNTEzNSwyNTIxNiwyNTgzNiwyNzQ1MCwyOTM0NCwzMDA5NywzMTA0NywzMjY4MSwzNDgxMSwzNTUxNiwzNTY5NiwyNTUxNiwzMzczOCwzODgxNiwyMTUxMywyMTUwNywyMTkzMSwyNjcwOCwyNzIyNCwzNTQ0MCwzMDc1OSwyNjQ4NSw0MDY1MywyMTM2NCwyMzQ1OCwzMzA1MCwzNDM4NCwzNjg3MCwxOTk5MiwyMDAzNywyMDE2NywyMDI0MSwyMTQ1MCwyMTU2MCwyMzQ3MCwyNDMzOSwyNDYxMywyNTkzNywyNjQyOSwyNzcxNCwyNzc2MiwyNzg3NSwyODc5MiwyOTY5OSwzMTM1MCwzMTQwNiwzMTQ5NiwzMjAyNiwzMTk5OCwzMjEwMiwyNjA4NywyOTI3NSwyMTQzNSwyMzYyMSwyNDA0MCwyNTI5OCwyNTMxMiwyNTM2OSwyODE5MiwzNDM5NCwzNTM3NywzNjMxNywzNzYyNCwyODQxNywzMTE0MiwzOTc3MCwyMDEzNiwyMDEzOSwyMDE0MCwyMDM3OSwyMDM4NCwyMDY4OSwyMDgwNywzMTQ3OCwyMDg0OSwyMDk4MiwyMTMzMiwyMTI4MSwyMTM3NSwyMTQ4MywyMTkzMiwyMjY1OSwyMzc3NywyNDM3NSwyNDM5NCwyNDYyMywyNDY1NiwyNDY4NSwyNTM3NSwyNTk0NSwyNzIxMSwyNzg0MSwyOTM3OCwyOTQyMSwzMDcwMywzMzAxNiwzMzAyOSwzMzI4OCwzNDEyNiwzNzExMSwzNzg1NywzODkxMSwzOTI1NSwzOTUxNCwyMDIwOCwyMDk1NywyMzU5NywyNjI0MSwyNjk4OSwyMzYxNiwyNjM1NCwyNjk5NywyOTU3NywyNjcwNCwzMTg3MywyMDY3NywyMTIyMCwyMjM0MywyNDA2MiwzNzY3MCwyNjAyMCwyNzQyNywyNzQ1MywyOTc0OCwzMTEwNSwzMTE2NSwzMTU2MywzMjIwMiwzMzQ2NSwzMzc0MCwzNDk0MywzNTE2NywzNTY0MSwzNjgxNywzNzMyOSwyMTUzNSwzNzUwNCwyMDA2MSwyMDUzNCwyMTQ3NywyMTMwNiwyOTM5OSwyOTU5MCwzMDY5NywzMzUxMCwzNjUyNywzOTM2NiwzOTM2OCwzOTM3OCwyMDg1NSwyNDg1OCwzNDM5OCwyMTkzNiwzMTM1NCwyMDU5OCwyMzUwNywzNjkzNSwzODUzMywyMDAxOCwyNzM1NSwzNzM1MSwyMzYzMywyMzYyNCwyNTQ5NiwzMTM5MSwyNzc5NSwzODc3MiwzNjcwNSwzMTQwMiwyOTA2NiwzODUzNiwzMTg3NCwyNjY0NywzMjM2OCwyNjcwNSwzNzc0MCwyMTIzNCwyMTUzMSwzNDIxOSwzNTM0NywzMjY3NiwzNjU1NywzNzA4OSwyMTM1MCwzNDk1MiwzMTA0MSwyMDQxOCwyMDY3MCwyMTAwOSwyMDgwNCwyMTg0MywyMjMxNywyOTY3NCwyMjQxMSwyMjg2NSwyNDQxOCwyNDQ1MiwyNDY5MywyNDk1MCwyNDkzNSwyNTAwMSwyNTUyMiwyNTY1OCwyNTk2NCwyNjIyMywyNjY5MCwyODE3OSwzMDA1NCwzMTI5MywzMTk5NSwzMjA3NiwzMjE1MywzMjMzMSwzMjYxOSwzMzU1MCwzMzYxMCwzNDUwOSwzNTMzNiwzNTQyNywzNTY4NiwzNjYwNSwzODkzOCw0MDMzNSwzMzQ2NCwzNjgxNCwzOTkxMiwyMTEyNywyNTExOSwyNTczMSwyODYwOCwzODU1MywyNjY4OSwyMDYyNSwyNzQyNCwyNzc3MCwyODUwMCwzMTM0OCwzMjA4MCwzNDg4MCwzNTM2MywyNjM3NiwyMDIxNCwyMDUzNywyMDUxOCwyMDU4MSwyMDg2MCwyMTA0OCwyMTA5MSwyMTkyNywyMjI4NywyMjUzMywyMzI0NCwyNDMxNCwyNTAxMCwyNTA4MCwyNTMzMSwyNTQ1OCwyNjkwOCwyNzE3NywyOTMwOSwyOTM1NiwyOTQ4NiwzMDc0MCwzMDgzMSwzMjEyMSwzMDQ3NiwzMjkzNywzNTIxMSwzNTYwOSwzNjA2NiwzNjU2MiwzNjk2MywzNzc0OSwzODUyMiwzODk5NywzOTQ0Myw0MDU2OCwyMDgwMywyMTQwNywyMTQyNywyNDE4NywyNDM1OCwyODE4NywyODMwNCwyOTU3MiwyOTY5NCwzMjA2NywzMzMzNSwzNTMyOCwzNTU3OCwzODQ4MCwyMDA0NiwyMDQ5MSwyMTQ3NiwyMTYyOCwyMjI2NiwyMjk5MywyMzM5NiwyNDA0OSwyNDIzNSwyNDM1OSwyNTE0NCwyNTkyNSwyNjU0MywyODI0NiwyOTM5MiwzMTk0NiwzNDk5NiwzMjkyOSwzMjk5MywzMzc3NiwzNDM4MiwzNTQ2MywzNjMyOCwzNzQzMSwzODU5OSwzOTAxNSw0MDcyMywyMDExNiwyMDExNCwyMDIzNywyMTMyMCwyMTU3NywyMTU2NiwyMzA4NywyNDQ2MCwyNDQ4MSwyNDczNSwyNjc5MSwyNzI3OCwyOTc4NiwzMDg0OSwzNTQ4NiwzNTQ5MiwzNTcwMywzNzI2NCwyMDA2MiwzOTg4MSwyMDEzMiwyMDM0OCwyMDM5OSwyMDUwNSwyMDUwMiwyMDgwOSwyMDg0NCwyMTE1MSwyMTE3NywyMTI0NiwyMTQwMiwyMTQ3NSwyMTUyMSwyMTUxOCwyMTg5NywyMjM1MywyMjQzNCwyMjkwOSwyMzM4MCwyMzM4OSwyMzQzOSwyNDAzNywyNDAzOSwyNDA1NSwyNDE4NCwyNDE5NSwyNDIxOCwyNDI0NywyNDM0NCwyNDY1OCwyNDkwOCwyNTIzOSwyNTMwNCwyNTUxMSwyNTkxNSwyNjExNCwyNjE3OSwyNjM1NiwyNjQ3NywyNjY1NywyNjc3NSwyNzA4MywyNzc0MywyNzk0NiwyODAwOSwyODIwNywyODMxNywzMDAwMiwzMDM0MywzMDgyOCwzMTI5NSwzMTk2OCwzMjAwNSwzMjAyNCwzMjA5NCwzMjE3NywzMjc4OSwzMjc3MSwzMjk0MywzMjk0NSwzMzEwOCwzMzE2NywzMzMyMiwzMzYxOCwzNDg5MiwzNDkxMywzNTYxMSwzNjAwMiwzNjA5MiwzNzA2NiwzNzIzNywzNzQ4OSwzMDc4MywzNzYyOCwzODMwOCwzODQ3NywzODkxNywzOTMyMSwzOTY0MCw0MDI1MSwyMTA4MywyMTE2MywyMTQ5NSwyMTUxMiwyMjc0MSwyNTMzNSwyODY0MCwzNTk0NiwzNjcwMyw0MDYzMywyMDgxMSwyMTA1MSwyMTU3OCwyMjI2OSwzMTI5NiwzNzIzOSw0MDI4OCw0MDY1OCwyOTUwOCwyODQyNSwzMzEzNiwyOTk2OSwyNDU3MywyNDc5NCwzOTU5MiwyOTQwMywzNjc5NiwyNzQ5MiwzODkxNSwyMDE3MCwyMjI1NiwyMjM3MiwyMjcxOCwyMzEzMCwyNDY4MCwyNTAzMSwyNjEyNywyNjExOCwyNjY4MSwyNjgwMSwyODE1MSwzMDE2NSwzMjA1OCwzMzM5MCwzOTc0NiwyMDEyMywyMDMwNCwyMTQ0OSwyMTc2NiwyMzkxOSwyNDAzOCwyNDA0NiwyNjYxOSwyNzgwMSwyOTgxMSwzMDcyMiwzNTQwOCwzNzc4MiwzNTAzOSwyMjM1MiwyNDIzMSwyNTM4NywyMDY2MSwyMDY1MiwyMDg3NywyNjM2OCwyMTcwNSwyMjYyMiwyMjk3MSwyMzQ3MiwyNDQyNSwyNTE2NSwyNTUwNSwyNjY4NSwyNzUwNywyODE2OCwyODc5NywzNzMxOSwyOTMxMiwzMDc0MSwzMDc1OCwzMTA4NSwyNTk5OCwzMjA0OCwzMzc1NiwzNTAwOSwzNjYxNywzODU1NSwyMTA5MiwyMjMxMiwyNjQ0OCwzMjYxOCwzNjAwMSwyMDkxNiwyMjMzOCwzODQ0MiwyMjU4NiwyNzAxOCwzMjk0OCwyMTY4MiwyMzgyMiwyMjUyNCwzMDg2OSw0MDQ0MiwyMDMxNiwyMTA2NiwyMTY0MywyNTY2MiwyNjE1MiwyNjM4OCwyNjYxMywzMTM2NCwzMTU3NCwzMjAzNCwzNzY3OSwyNjcxNiwzOTg1MywzMTU0NSwyMTI3MywyMDg3NCwyMTA0NywyMzUxOSwyNTMzNCwyNTc3NCwyNTgzMCwyNjQxMywyNzU3OCwzNDIxNywzODYwOSwzMDM1MiwzOTg5NCwyNTQyMCwzNzYzOCwzOTg1MSwzMDM5OSwyNjE5NCwxOTk3NywyMDYzMiwyMTQ0MiwyMzY2NSwyNDgwOCwyNTc0NiwyNTk1NSwyNjcxOSwyOTE1OCwyOTY0MiwyOTk4NywzMTYzOSwzMjM4NiwzNDQ1MywzNTcxNSwzNjA1OSwzNzI0MCwzOTE4NCwyNjAyOCwyNjI4MywyNzUzMSwyMDE4MSwyMDE4MCwyMDI4MiwyMDM1MSwyMTA1MCwyMTQ5NiwyMTQ5MCwyMTk4NywyMjIzNSwyMjc2MywyMjk4NywyMjk4NSwyMzAzOSwyMzM3NiwyMzYyOSwyNDA2NiwyNDEwNywyNDUzNSwyNDYwNSwyNTM1MSwyNTkwMywyMzM4OCwyNjAzMSwyNjA0NSwyNjA4OCwyNjUyNSwyNzQ5MCwyNzUxNSwyNzY2MywyOTUwOSwzMTA0OSwzMTE2OSwzMTk5MiwzMjAyNSwzMjA0MywzMjkzMCwzMzAyNiwzMzI2NywzNTIyMiwzNTQyMiwzNTQzMywzNTQzMCwzNTQ2OCwzNTU2NiwzNjAzOSwzNjA2MCwzODYwNCwzOTE2NCwyNzUwMywyMDEwNywyMDI4NCwyMDM2NSwyMDgxNiwyMzM4MywyMzU0NiwyNDkwNCwyNTM0NSwyNjE3OCwyNzQyNSwyODM2MywyNzgzNSwyOTI0NiwyOTg4NSwzMDE2NCwzMDkxMywzMTAzNCwzMjc4MCwzMjgxOSwzMzI1OCwzMzk0MCwzNjc2NiwyNzcyOCw0MDU3NSwyNDMzNSwzNTY3Miw0MDIzNSwzMTQ4MiwzNjYwMCwyMzQzNywzODYzNSwxOTk3MSwyMTQ4OSwyMjUxOSwyMjgzMywyMzI0MSwyMzQ2MCwyNDcxMywyODI4NywyODQyMiwzMDE0MiwzNjA3NCwyMzQ1NSwzNDA0OCwzMTcxMiwyMDU5NCwyNjYxMiwzMzQzNywyMzY0OSwzNDEyMiwzMjI4NiwzMzI5NCwyMDg4OSwyMzU1NiwyNTQ0OCwzNjE5OCwyNjAxMiwyOTAzOCwzMTAzOCwzMjAyMywzMjc3MywzNTYxMywzNjU1NCwzNjk3NCwzNDUwMywzNzAzNCwyMDUxMSwyMTI0MiwyMzYxMCwyNjQ1MSwyODc5NiwyOTIzNywzNzE5NiwzNzMyMCwzNzY3NSwzMzUwOSwyMzQ5MCwyNDM2OSwyNDgyNSwyMDAyNywyMTQ2MiwyMzQzMiwyNTE2MywyNjQxNywyNzUzMCwyOTQxNywyOTY2NCwzMTI3OCwzMzEzMSwzNjI1OSwzNzIwMiwzOTMxOCwyMDc1NCwyMTQ2MywyMTYxMCwyMzU1MSwyNTQ4MCwyNzE5MywzMjE3MiwzODY1NiwyMjIzNCwyMTQ1NCwyMTYwOCwyMzQ0NywyMzYwMSwyNDAzMCwyMDQ2MiwyNDgzMywyNTM0MiwyNzk1NCwzMTE2OCwzMTE3OSwzMjA2NiwzMjMzMywzMjcyMiwzMzI2MSwzMzMxMSwzMzkzNiwzNDg4NiwzNTE4NiwzNTcyOCwzNjQ2OCwzNjY1NSwzNjkxMywzNzE5NSwzNzIyOCwzODU5OCwzNzI3NiwyMDE2MCwyMDMwMywyMDgwNSwyMTMxMywyNDQ2NywyNTEwMiwyNjU4MCwyNzcxMywyODE3MSwyOTUzOSwzMjI5NCwzNzMyNSwzNzUwNywyMTQ2MCwyMjgwOSwyMzQ4NywyODExMywzMTA2OSwzMjMwMiwzMTg5OSwyMjY1NCwyOTA4NywyMDk4NiwzNDg5OSwzNjg0OCwyMDQyNiwyMzgwMywyNjE0OSwzMDYzNiwzMTQ1OSwzMzMwOCwzOTQyMywyMDkzNCwyNDQ5MCwyNjA5MiwyNjk5MSwyNzUyOSwyODE0NywyODMxMCwyODUxNiwzMDQ2MiwzMjAyMCwyNDAzMywzNjk4MSwzNzI1NSwzODkxOCwyMDk2NiwyMTAyMSwyNTE1MiwyNjI1NywyNjMyOSwyODE4NiwyNDI0NiwzMjIxMCwzMjYyNiwyNjM2MCwzNDIyMywzNDI5NSwzNTU3NiwyMTE2MSwyMTQ2NSwyMjg5OSwyNDIwNywyNDQ2NCwyNDY2MSwzNzYwNCwzODUwMCwyMDY2MywyMDc2NywyMTIxMywyMTI4MCwyMTMxOSwyMTQ4NCwyMTczNiwyMTgzMCwyMTgwOSwyMjAzOSwyMjg4OCwyMjk3NCwyMzEwMCwyMzQ3NywyMzU1OCwyMzU2NywyMzU2OSwyMzU3OCwyNDE5NiwyNDIwMiwyNDI4OCwyNDQzMiwyNTIxNSwyNTIyMCwyNTMwNywyNTQ4NCwyNTQ2MywyNjExOSwyNjEyNCwyNjE1NywyNjIzMCwyNjQ5NCwyNjc4NiwyNzE2NywyNzE4OSwyNzgzNiwyODA0MCwyODE2OSwyODI0OCwyODk4OCwyODk2NiwyOTAzMSwzMDE1MSwzMDQ2NSwzMDgxMywzMDk3NywzMTA3NywzMTIxNiwzMTQ1NiwzMTUwNSwzMTkxMSwzMjA1NywzMjkxOCwzMzc1MCwzMzkzMSwzNDEyMSwzNDkwOSwzNTA1OSwzNTM1OSwzNTM4OCwzNTQxMiwzNTQ0MywzNTkzNywzNjA2MiwzNzI4NCwzNzQ3OCwzNzc1OCwzNzkxMiwzODU1NiwzODgwOCwxOTk3OCwxOTk3NiwxOTk5OCwyMDA1NSwyMDg4NywyMTEwNCwyMjQ3OCwyMjU4MCwyMjczMiwyMzMzMCwyNDEyMCwyNDc3MywyNTg1NCwyNjQ2NSwyNjQ1NCwyNzk3MiwyOTM2NiwzMDA2NywzMTMzMSwzMzk3NiwzNTY5OCwzNzMwNCwzNzY2NCwyMjA2NSwyMjUxNiwzOTE2NiwyNTMyNSwyNjg5MywyNzU0MiwyOTE2NSwzMjM0MCwzMjg4NywzMzM5NCwzNTMwMiwzOTEzNSwzNDY0NSwzNjc4NSwyMzYxMSwyMDI4MCwyMDQ0OSwyMDQwNSwyMTc2NywyMzA3MiwyMzUxNywyMzUyOSwyNDUxNSwyNDkxMCwyNTM5MSwyNjAzMiwyNjE4NywyNjg2MiwyNzAzNSwyODAyNCwyODE0NSwzMDAwMywzMDEzNywzMDQ5NSwzMTA3MCwzMTIwNiwzMjA1MSwzMzI1MSwzMzQ1NSwzNDIxOCwzNTI0MiwzNTM4NiwzNjUyMywzNjc2MywzNjkxNCwzNzM0MSwzODY2MywyMDE1NCwyMDE2MSwyMDk5NSwyMjY0NSwyMjc2NCwyMzU2MywyOTk3OCwyMzYxMywzMzEwMiwzNTMzOCwzNjgwNSwzODQ5OSwzODc2NSwzMTUyNSwzNTUzNSwzODkyMCwzNzIxOCwyMjI1OSwyMTQxNiwzNjg4NywyMTU2MSwyMjQwMiwyNDEwMSwyNTUxMiwyNzcwMCwyODgxMCwzMDU2MSwzMTg4MywzMjczNiwzNDkyOCwzNjkzMCwzNzIwNCwzNzY0OCwzNzY1NiwzODU0MywyOTc5MCwzOTYyMCwyMzgxNSwyMzkxMywyNTk2OCwyNjUzMCwzNjI2NCwzODYxOSwyNTQ1NCwyNjQ0MSwyNjkwNSwzMzczMywzODkzNSwzODU5MiwzNTA3MCwyODU0OCwyNTcyMiwyMzU0NCwxOTk5MCwyODcxNiwzMDA0NSwyNjE1OSwyMDkzMiwyMTA0NiwyMTIxOCwyMjk5NSwyNDQ0OSwyNDYxNSwyNTEwNCwyNTkxOSwyNTk3MiwyNjE0MywyNjIyOCwyNjg2NiwyNjY0NiwyNzQ5MSwyODE2NSwyOTI5OCwyOTk4MywzMDQyNywzMTkzNCwzMjg1NCwyMjc2OCwzNTA2OSwzNTE5OSwzNTQ4OCwzNTQ3NSwzNTUzMSwzNjg5MywzNzI2NiwzODczOCwzODc0NSwyNTk5MywzMTI0NiwzMzAzMCwzODU4NywyNDEwOSwyNDc5NiwyNTExNCwyNjAyMSwyNjEzMiwyNjUxMiwzMDcwNywzMTMwOSwzMTgyMSwzMjMxOCwzMzAzNCwzNjAxMiwzNjE5NiwzNjMyMSwzNjQ0NywzMDg4OSwyMDk5OSwyNTMwNSwyNTUwOSwyNTY2NiwyNTI0MCwzNTM3MywzMTM2MywzMTY4MCwzNTUwMCwzODYzNCwzMjExOCwzMzI5MiwzNDYzMywyMDE4NSwyMDgwOCwyMTMxNSwyMTM0NCwyMzQ1OSwyMzU1NCwyMzU3NCwyNDAyOSwyNTEyNiwyNTE1OSwyNTc3NiwyNjY0MywyNjY3NiwyNzg0OSwyNzk3MywyNzkyNywyNjU3OSwyODUwOCwyOTAwNiwyOTA1MywyNjA1OSwzMTM1OSwzMTY2MSwzMjIxOCwzMjMzMCwzMjY4MCwzMzE0NiwzMzMwNywzMzMzNywzNDIxNCwzNTQzOCwzNjA0NiwzNjM0MSwzNjk4NCwzNjk4MywzNzU0OSwzNzUyMSwzODI3NSwzOTg1NCwyMTA2OSwyMTg5MiwyODQ3MiwyODk4MiwyMDg0MCwzMTEwOSwzMjM0MSwzMzIwMywzMTk1MCwyMjA5MiwyMjYwOSwyMzcyMCwyNTUxNCwyNjM2NiwyNjM2NSwyNjk3MCwyOTQwMSwzMDA5NSwzMDA5NCwzMDk5MCwzMTA2MiwzMTE5OSwzMTg5NSwzMjAzMiwzMjA2OCwzNDMxMSwzNTM4MCwzODQ1OSwzNjk2MSw0MDczNiwyMDcxMSwyMTEwOSwyMTQ1MiwyMTQ3NCwyMDQ4OSwyMTkzMCwyMjc2NiwyMjg2MywyOTI0NSwyMzQzNSwyMzY1MiwyMTI3NywyNDgwMywyNDgxOSwyNTQzNiwyNTQ3NSwyNTQwNywyNTUzMSwyNTgwNSwyNjA4OSwyNjM2MSwyNDAzNSwyNzA4NSwyNzEzMywyODQzNywyOTE1NywyMDEwNSwzMDE4NSwzMDQ1NiwzMTM3OSwzMTk2NywzMjIwNywzMjE1NiwzMjg2NSwzMzYwOSwzMzYyNCwzMzkwMCwzMzk4MCwzNDI5OSwzNTAxMywzNjIwOCwzNjg2NSwzNjk3MywzNzc4MywzODY4NCwzOTQ0MiwyMDY4NywyMjY3OSwyNDk3NCwzMzIzNSwzNDEwMSwzNjEwNCwzNjg5NiwyMDQxOSwyMDU5NiwyMTA2MywyMTM2MywyNDY4NywyNTQxNywyNjQ2MywyODIwNCwzNjI3NSwzNjg5NSwyMDQzOSwyMzY0NiwzNjA0MiwyNjA2MywzMjE1NCwyMTMzMCwzNDk2NiwyMDg1NCwyNTUzOSwyMzM4NCwyMzQwMywyMzU2MiwyNTYxMywyNjQ0OSwzNjk1NiwyMDE4MiwyMjgxMCwyMjgyNiwyNzc2MCwzNTQwOSwyMTgyMiwyMjU0OSwyMjk0OSwyNDgxNiwyNTE3MSwyNjU2MSwzMzMzMywyNjk2NSwzODQ2NCwzOTM2NCwzOTQ2NCwyMDMwNywyMjUzNCwyMzU1MCwzMjc4NCwyMzcyOSwyNDExMSwyNDQ1MywyNDYwOCwyNDkwNywyNTE0MCwyNjM2NywyNzg4OCwyODM4MiwzMjk3NCwzMzE1MSwzMzQ5MiwzNDk1NSwzNjAyNCwzNjg2NCwzNjkxMCwzODUzOCw0MDY2NywzOTg5OSwyMDE5NSwyMTQ4OCwyMjgyMywzMTUzMiwzNzI2MSwzODk4OCw0MDQ0MSwyODM4MSwyODcxMSwyMTMzMSwyMTgyOCwyMzQyOSwyNTE3NiwyNTI0NiwyNTI5OSwyNzgxMCwyODY1NSwyOTczMCwzNTM1MSwzNzk0NCwyODYwOSwzNTU4MiwzMzU5MiwyMDk2NywzNDU1MiwyMTQ4MiwyMTQ4MSwyMDI5NCwzNjk0OCwzNjc4NCwyMjg5MCwzMzA3MywyNDA2MSwzMTQ2NiwzNjc5OSwyNjg0MiwzNTg5NSwyOTQzMiw0MDAwOCwyNzE5NywzNTUwNCwyMDAyNSwyMTMzNiwyMjAyMiwyMjM3NCwyNTI4NSwyNTUwNiwyNjA4NiwyNzQ3MCwyODEyOSwyODI1MSwyODg0NSwzMDcwMSwzMTQ3MSwzMTY1OCwzMjE4NywzMjgyOSwzMjk2NiwzNDUwNywzNTQ3NywzNzcyMywyMjI0MywyMjcyNywyNDM4MiwyNjAyOSwyNjI2MiwyNzI2NCwyNzU3MywzMDAwNywzNTUyNywyMDUxNiwzMDY5MywyMjMyMCwyNDM0NywyNDY3NywyNjIzNCwyNzc0NCwzMDE5NiwzMTI1OCwzMjYyMiwzMzI2OCwzNDU4NCwzNjkzMywzOTM0NywzMTY4OSwzMDA0NCwzMTQ4MSwzMTU2OSwzMzk4OCwzNjg4MCwzMTIwOSwzMTM3OCwzMzU5MCwyMzI2NSwzMDUyOCwyMDAxMywyMDIxMCwyMzQ0OSwyNDU0NCwyNTI3NywyNjE3MiwyNjYwOSwyNzg4MCwzNDQxMSwzNDkzNSwzNTM4NywzNzE5OCwzNzYxOSwzOTM3NiwyNzE1OSwyODcxMCwyOTQ4MiwzMzUxMSwzMzg3OSwzNjAxNSwxOTk2OSwyMDgwNiwyMDkzOSwyMTg5OSwyMzU0MSwyNDA4NiwyNDExNSwyNDE5MywyNDM0MCwyNDM3MywyNDQyNywyNDUwMCwyNTA3NCwyNTM2MSwyNjI3NCwyNjM5NywyODUyNiwyOTI2NiwzMDAxMCwzMDUyMiwzMjg4NCwzMzA4MSwzMzE0NCwzNDY3OCwzNTUxOSwzNTU0OCwzNjIyOSwzNjMzOSwzNzUzMCwzODI2MywzODkxNCw0MDE2NSwyMTE4OSwyNTQzMSwzMDQ1MiwyNjM4OSwyNzc4NCwyOTY0NSwzNjAzNSwzNzgwNiwzODUxNSwyNzk0MSwyMjY4NCwyNjg5NCwyNzA4NCwzNjg2MSwzNzc4NiwzMDE3MSwzNjg5MCwyMjYxOCwyNjYyNiwyNTUyNCwyNzEzMSwyMDI5MSwyODQ2MCwyNjU4NCwzNjc5NSwzNDA4NiwzMjE4MCwzNzcxNiwyNjk0MywyODUyOCwyMjM3OCwyMjc3NSwyMzM0MCwzMjA0NCwyOTIyNiwyMTUxNCwzNzM0Nyw0MDM3MiwyMDE0MSwyMDMwMiwyMDU3MiwyMDU5NywyMTA1OSwzNTk5OCwyMTU3NiwyMjU2NCwyMzQ1MCwyNDA5MywyNDIxMywyNDIzNywyNDMxMSwyNDM1MSwyNDcxNiwyNTI2OSwyNTQwMiwyNTU1MiwyNjc5OSwyNzcxMiwzMDg1NSwzMTExOCwzMTI0MywzMjIyNCwzMzM1MSwzNTMzMCwzNTU1OCwzNjQyMCwzNjg4MywzNzA0OCwzNzE2NSwzNzMzNiw0MDcxOCwyNzg3NywyNTY4OCwyNTgyNiwyNTk3MywyODQwNCwzMDM0MCwzMTUxNSwzNjk2OSwzNzg0MSwyODM0NiwyMTc0NiwyNDUwNSwyNTc2NCwzNjY4NSwzNjg0NSwzNzQ0NCwyMDg1NiwyMjYzNSwyMjgyNSwyMzYzNywyNDIxNSwyODE1NSwzMjM5OSwyOTk4MCwzNjAyOCwzNjU3OCwzOTAwMywyODg1NywyMDI1MywyNzU4MywyODU5MywzMDAwMCwzODY1MSwyMDgxNCwyMTUyMCwyMjU4MSwyMjYxNSwyMjk1NiwyMzY0OCwyNDQ2NiwyNjAwNywyNjQ2MCwyODE5MywzMDMzMSwzMzc1OSwzNjA3NywzNjg4NCwzNzExNywzNzcwOSwzMDc1NywzMDc3OCwyMTE2MiwyNDIzMCwyMjMwMywyMjkwMCwyNDU5NCwyMDQ5OCwyMDgyNiwyMDkwOCwyMDk0MSwyMDk5MiwyMTc3NiwyMjYxMiwyMjYxNiwyMjg3MSwyMzQ0NSwyMzc5OCwyMzk0NywyNDc2NCwyNTIzNywyNTY0NSwyNjQ4MSwyNjY5MSwyNjgxMiwyNjg0NywzMDQyMywyODEyMCwyODI3MSwyODA1OSwyODc4MywyOTEyOCwyNDQwMywzMDE2OCwzMTA5NSwzMTU2MSwzMTU3MiwzMTU3MCwzMTk1OCwzMjExMywyMTA0MCwzMzg5MSwzNDE1MywzNDI3NiwzNTM0MiwzNTU4OCwzNTkxMCwzNjM2NywzNjg2NywzNjg3OSwzNzkxMywzODUxOCwzODk1NywzOTQ3MiwzODM2MCwyMDY4NSwyMTIwNSwyMTUxNiwyMjUzMCwyMzU2NiwyNDk5OSwyNTc1OCwyNzkzNCwzMDY0MywzMTQ2MSwzMzAxMiwzMzc5NiwzNjk0NywzNzUwOSwyMzc3Niw0MDE5OSwyMTMxMSwyNDQ3MSwyNDQ5OSwyODA2MCwyOTMwNSwzMDU2MywzMTE2NywzMTcxNiwyNzYwMiwyOTQyMCwzNTUwMSwyNjYyNywyNzIzMywyMDk4NCwzMTM2MSwyNjkzMiwyMzYyNiw0MDE4MiwzMzUxNSwyMzQ5MywzNzE5MywyODcwMiwyMjEzNiwyMzY2MywyNDc3NSwyNTk1OCwyNzc4OCwzNTkzMCwzNjkyOSwzODkzMSwyMTU4NSwyNjMxMSwzNzM4OSwyMjg1NiwzNzAyNywyMDg2OSwyMDA0NSwyMDk3MCwzNDIwMSwzNTU5OCwyODc2MCwyNTQ2NiwzNzcwNywyNjk3OCwzOTM0OCwzMjI2MCwzMDA3MSwyMTMzNSwyNjk3NiwzNjU3NSwzODYyNywyNzc0MSwyMDEwOCwyMzYxMiwyNDMzNiwzNjg0MSwyMTI1MCwzNjA0OSwzMjkwNSwzNDQyNSwyNDMxOSwyNjA4NSwyMDA4MywyMDgzNywyMjkxNCwyMzYxNSwzODg5NCwyMDIxOSwyMjkyMiwyNDUyNSwzNTQ2OSwyODY0MSwzMTE1MiwzMTA3NCwyMzUyNywzMzkwNSwyOTQ4MywyOTEwNSwyNDE4MCwyNDU2NSwyNTQ2NywyNTc1NCwyOTEyMywzMTg5NiwyMDAzNSwyNDMxNiwyMDA0MywyMjQ5MiwyMjE3OCwyNDc0NSwyODYxMSwzMjAxMywzMzAyMSwzMzA3NSwzMzIxNSwzNjc4NiwzNTIyMywzNDQ2OCwyNDA1MiwyNTIyNiwyNTc3MywzNTIwNywyNjQ4NywyNzg3NCwyNzk2NiwyOTc1MCwzMDc3MiwyMzExMCwzMjYyOSwzMzQ1MywzOTM0MCwyMDQ2NywyNDI1OSwyNTMwOSwyNTQ5MCwyNTk0MywyNjQ3OSwzMDQwMywyOTI2MCwzMjk3MiwzMjk1NCwzNjY0OSwzNzE5NywyMDQ5MywyMjUyMSwyMzE4NiwyNjc1NywyNjk5NSwyOTAyOCwyOTQzNywzNjAyMywyMjc3MCwzNjA2NCwzODUwNiwzNjg4OSwzNDY4NywzMTIwNCwzMDY5NSwzMzgzMywyMDI3MSwyMTA5MywyMTMzOCwyNTI5MywyNjU3NSwyNzg1MCwzMDMzMywzMTYzNiwzMTg5MywzMzMzNCwzNDE4MCwzNjg0MywyNjMzMywyODQ0OCwyOTE5MCwzMjI4MywzMzcwNywzOTM2MSw0MDYxNCwyMDk4OSwzMTY2NSwzMDgzNCwzMTY3MiwzMjkwMywzMTU2MCwyNzM2OCwyNDE2MSwzMjkwOCwzMDAzMywzMDA0OCwyMDg0MywzNzQ3NCwyODMwMCwzMDMzMCwzNzI3MSwzOTY1OCwyMDI0MCwzMjYyNCwyNTI0NCwzMTU2NywzODMwOSw0MDE2OSwyMjEzOCwyMjYxNywzNDUzMiwzODU4OCwyMDI3NiwyMTAyOCwyMTMyMiwyMTQ1MywyMTQ2NywyNDA3MCwyNTY0NCwyNjAwMSwyNjQ5NSwyNzcxMCwyNzcyNiwyOTI1NiwyOTM1OSwyOTY3NywzMDAzNiwzMjMyMSwzMzMyNCwzNDI4MSwzNjAwOSwzMTY4NCwzNzMxOCwyOTAzMywzODkzMCwzOTE1MSwyNTQwNSwyNjIxNywzMDA1OCwzMDQzNiwzMDkyOCwzNDExNSwzNDU0MiwyMTI5MCwyMTMyOSwyMTU0MiwyMjkxNSwyNDE5OSwyNDQ0NCwyNDc1NCwyNTE2MSwyNTIwOSwyNTI1OSwyNjAwMCwyNzYwNCwyNzg1MiwzMDEzMCwzMDM4MiwzMDg2NSwzMTE5MiwzMjIwMywzMjYzMSwzMjkzMywzNDk4NywzNTUxMywzNjAyNywzNjk5MSwzODc1MCwzOTEzMSwyNzE0NywzMTgwMCwyMDYzMywyMzYxNCwyNDQ5NCwyNjUwMywyNzYwOCwyOTc0OSwzMDQ3MywzMjY1NCw0MDc2MywyNjU3MCwzMTI1NSwyMTMwNSwzMDA5MSwzOTY2MSwyNDQyMiwzMzE4MSwzMzc3NywzMjkyMCwyNDM4MCwyNDUxNywzMDA1MCwzMTU1OCwzNjkyNCwyNjcyNywyMzAxOSwyMzE5NSwzMjAxNiwzMDMzNCwzNTYyOCwyMDQ2OSwyNDQyNiwyNzE2MSwyNzcwMywyODQxOCwyOTkyMiwzMTA4MCwzNDkyMCwzNTQxMywzNTk2MSwyNDI4NywyNTU1MSwzMDE0OSwzMTE4NiwzMzQ5NSwzNzY3MiwzNzYxOCwzMzk0OCwzNDU0MSwzOTk4MSwyMTY5NywyNDQyOCwyNTk5NiwyNzk5NiwyODY5MywzNjAwNywzNjA1MSwzODk3MSwyNTkzNSwyOTk0MiwxOTk4MSwyMDE4NCwyMjQ5NiwyMjgyNywyMzE0MiwyMzUwMCwyMDkwNCwyNDA2NywyNDIyMCwyNDU5OCwyNTIwNiwyNTk3NSwyNjAyMywyNjIyMiwyODAxNCwyOTIzOCwzMTUyNiwzMzEwNCwzMzE3OCwzMzQzMywzNTY3NiwzNjAwMCwzNjA3MCwzNjIxMiwzODQyOCwzODQ2OCwyMDM5OCwyNTc3MSwyNzQ5NCwzMzMxMCwzMzg4OSwzNDE1NCwzNzA5NiwyMzU1MywyNjk2MywzOTA4MCwzMzkxNCwzNDEzNSwyMDIzOSwyMTEwMywyNDQ4OSwyNDEzMywyNjM4MSwzMTExOSwzMzE0NSwzNTA3OSwzNTIwNiwyODE0OSwyNDM0MywyNTE3MywyNzgzMiwyMDE3NSwyOTI4OSwzOTgyNiwyMDk5OCwyMTU2MywyMjEzMiwyMjcwNywyNDk5NiwyNTE5OCwyODk1NCwyMjg5NCwzMTg4MSwzMTk2NiwzMjAyNywzODY0MCwyNTk5MSwzMjg2MiwxOTk5MywyMDM0MSwyMDg1MywyMjU5MiwyNDE2MywyNDE3OSwyNDMzMCwyNjU2NCwyMDAwNiwzNDEwOSwzODI4MSwzODQ5MSwzMTg1OSwzODkxMywyMDczMSwyMjcyMSwzMDI5NCwzMDg4NywyMTAyOSwzMDYyOSwzNDA2NSwzMTYyMiwyMDU1OSwyMjc5MywyOTI1NSwzMTY4NywzMjIzMiwzNjc5NCwzNjgyMCwzNjk0MSwyMDQxNSwyMTE5MywyMzA4MSwyNDMyMSwzODgyOSwyMDQ0NSwzMzMwMywzNzYxMCwyMjI3NSwyNTQyOSwyNzQ5NywyOTk5NSwzNTAzNiwzNjYyOCwzMTI5OCwyMTIxNSwyMjY3NSwyNDkxNywyNTA5OCwyNjI4NiwyNzU5NywzMTgwNywzMzc2OSwyMDUxNSwyMDQ3MiwyMTI1MywyMTU3NCwyMjU3NywyMjg1NywyMzQ1MywyMzc5MiwyMzc5MSwyMzg0OSwyNDIxNCwyNTI2NSwyNTQ0NywyNTkxOCwyNjA0MSwyNjM3OSwyNzg2MSwyNzg3MywyODkyMSwzMDc3MCwzMjI5OSwzMjk5MCwzMzQ1OSwzMzgwNCwzNDAyOCwzNDU2MiwzNTA5MCwzNTM3MCwzNTkxNCwzNzAzMCwzNzU4NiwzOTE2NSw0MDE3OSw0MDMwMCwyMDA0NywyMDEyOSwyMDYyMSwyMTA3OCwyMjM0NiwyMjk1MiwyNDEyNSwyNDUzNiwyNDUzNywyNTE1MSwyNjI5MiwyNjM5NSwyNjU3NiwyNjgzNCwyMDg4MiwzMjAzMywzMjkzOCwzMzE5MiwzNTU4NCwzNTk4MCwzNjAzMSwzNzUwMiwzODQ1MCwyMTUzNiwzODk1NiwyMTI3MSwyMDY5MywyMTM0MCwyMjY5NiwyNTc3OCwyNjQyMCwyOTI4NywzMDU2NiwzMTMwMiwzNzM1MCwyMTE4NywyNzgwOSwyNzUyNiwyMjUyOCwyNDE0MCwyMjg2OCwyNjQxMiwzMjc2MywyMDk2MSwzMDQwNiwyNTcwNSwzMDk1MiwzOTc2NCw0MDYzNSwyMjQ3NSwyMjk2OSwyNjE1MSwyNjUyMiwyNzU5OCwyMTczNywyNzA5NywyNDE0OSwzMzE4MCwyNjUxNywzOTg1MCwyNjYyMiw0MDAxOCwyNjcxNywyMDEzNCwyMDQ1MSwyMTQ0OCwyNTI3MywyNjQxMSwyNzgxOSwzNjgwNCwyMDM5NywzMjM2NSw0MDYzOSwxOTk3NSwyNDkzMCwyODI4OCwyODQ1OSwzNDA2NywyMTYxOSwyNjQxMCwzOTc0OSwyNDA1MSwzMTYzNywyMzcyNCwyMzQ5NCwzNDU4OCwyODIzNCwzNDAwMSwzMTI1MiwzMzAzMiwyMjkzNywzMTg4NSwyNzY2NSwzMDQ5NiwyMTIwOSwyMjgxOCwyODk2MSwyOTI3OSwzMDY4MywzODY5NSw0MDI4OSwyNjg5MSwyMzE2NywyMzA2NCwyMDkwMSwyMTUxNywyMTYyOSwyNjEyNiwzMDQzMSwzNjg1NSwzNzUyOCw0MDE4MCwyMzAxOCwyOTI3NywyODM1NywyMDgxMywyNjgyNSwzMjE5MSwzMjIzNiwzODc1NCw0MDYzNCwyNTcyMCwyNzE2OSwzMzUzOCwyMjkxNiwyMzM5MSwyNzYxMSwyOTQ2NywzMDQ1MCwzMjE3OCwzMjc5MSwzMzk0NSwyMDc4NiwyNjQwOCw0MDY2NSwzMDQ0NiwyNjQ2NiwyMTI0NywzOTE3MywyMzU4OCwyNTE0NywzMTg3MCwzNjAxNiwyMTgzOSwyNDc1OCwzMjAxMSwzODI3MiwyMTI0OSwyMDA2MywyMDkxOCwyMjgxMiwyOTI0MiwzMjgyMiwzNzMyNiwyNDM1NywzMDY5MCwyMTM4MCwyNDQ0MSwzMjAwNCwzNDIyMCwzNTM3OSwzNjQ5MywzODc0MiwyNjYxMSwzNDIyMiwzNzk3MSwyNDg0MSwyNDg0MCwyNzgzMywzMDI5MCwzNTU2NSwzNjY2NCwyMTgwNywyMDMwNSwyMDc3OCwyMTE5MSwyMTQ1MSwyMzQ2MSwyNDE4OSwyNDczNiwyNDk2MiwyNTU1OCwyNjM3NywyNjU4NiwyODI2MywyODA0NCwyOTQ5NCwyOTQ5NSwzMDAwMSwzMTA1NiwzNTAyOSwzNTQ4MCwzNjkzOCwzNzAwOSwzNzEwOSwzODU5NiwzNDcwMSwyMjgwNSwyMDEwNCwyMDMxMywxOTk4MiwzNTQ2NSwzNjY3MSwzODkyOCwyMDY1MywyNDE4OCwyMjkzNCwyMzQ4MSwyNDI0OCwyNTU2MiwyNTU5NCwyNTc5MywyNjMzMiwyNjk1NCwyNzA5NiwyNzkxNSwyODM0MiwyOTA3NiwyOTk5MiwzMTQwNywzMjY1MCwzMjc2OCwzMzg2NSwzMzk5MywzNTIwMSwzNTYxNywzNjM2MiwzNjk2NSwzODUyNSwzOTE3OCwyNDk1OCwyNTIzMywyNzQ0MiwyNzc3OSwyODAyMCwzMjcxNiwzMjc2NCwyODA5NiwzMjY0NSwzNDc0NiwzNTA2NCwyNjQ2OSwzMzcxMywzODk3MiwzODY0NywyNzkzMSwzMjA5NywzMzg1MywzNzIyNiwyMDA4MSwyMTM2NSwyMzg4OCwyNzM5NiwyODY1MSwzNDI1MywzNDM0OSwzNTIzOSwyMTAzMywyMTUxOSwyMzY1MywyNjQ0NiwyNjc5MiwyOTcwMiwyOTgyNywzMDE3OCwzNTAyMywzNTA0MSwzNzMyNCwzODYyNiwzODUyMCwyNDQ1OSwyOTU3NSwzMTQzNSwzMzg3MCwyNTUwNCwzMDA1MywyMTEyOSwyNzk2OSwyODMxNiwyOTcwNSwzMDA0MSwzMDgyNywzMTg5MCwzODUzNCwzMTQ1Miw0MDg0NSwyMDQwNiwyNDk0MiwyNjA1MywzNDM5NiwyMDEwMiwyMDE0MiwyMDY5OCwyMDAwMSwyMDk0MCwyMzUzNCwyNjAwOSwyNjc1MywyODA5MiwyOTQ3MSwzMDI3NCwzMDYzNywzMTI2MCwzMTk3NSwzMzM5MSwzNTUzOCwzNjk4OCwzNzMyNywzODUxNywzODkzNiwyMTE0NywzMjIwOSwyMDUyMywyMTQwMCwyNjUxOSwyODEwNywyOTEzNiwyOTc0NywzMzI1NiwzNjY1MCwzODU2Myw0MDAyMyw0MDYwNywyOTc5MiwyMjU5MywyODA1NywzMjA0NywzOTAwNiwyMDE5NiwyMDI3OCwyMDM2MywyMDkxOSwyMTE2OSwyMzk5NCwyNDYwNCwyOTYxOCwzMTAzNiwzMzQ5MSwzNzQyOCwzODU4MywzODY0NiwzODY2Niw0MDU5OSw0MDgwMiwyNjI3OCwyNzUwOCwyMTAxNSwyMTE1NSwyODg3MiwzNTAxMCwyNDI2NSwyNDY1MSwyNDk3NiwyODQ1MSwyOTAwMSwzMTgwNiwzMjI0NCwzMjg3OSwzNDAzMCwzNjg5OSwzNzY3NiwyMTU3MCwzOTc5MSwyNzM0NywyODgwOSwzNjAzNCwzNjMzNSwzODcwNiwyMTE3MiwyMzEwNSwyNDI2NiwyNDMyNCwyNjM5MSwyNzAwNCwyNzAyOCwyODAxMCwyODQzMSwyOTI4MiwyOTQzNiwzMTcyNSwzMjc2OSwzMjg5NCwzNDYzNSwzNzA3MCwyMDg0NSw0MDU5NSwzMTEwOCwzMjkwNywzNzY4MiwzNTU0MiwyMDUyNSwyMTY0NCwzNTQ0MSwyNzQ5OCwzNjAzNiwzMzAzMSwyNDc4NSwyNjUyOCw0MDQzNCwyMDEyMSwyMDEyMCwzOTk1MiwzNTQzNSwzNDI0MSwzNDE1MiwyNjg4MCwyODI4NiwzMDg3MSwzMzEwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI0MzMyLDE5OTg0LDE5OTg5LDIwMDEwLDIwMDE3LDIwMDIyLDIwMDI4LDIwMDMxLDIwMDM0LDIwMDU0LDIwMDU2LDIwMDk4LDIwMTAxLDM1OTQ3LDIwMTA2LDMzMjk4LDI0MzMzLDIwMTEwLDIwMTI2LDIwMTI3LDIwMTI4LDIwMTMwLDIwMTQ0LDIwMTQ3LDIwMTUwLDIwMTc0LDIwMTczLDIwMTY0LDIwMTY2LDIwMTYyLDIwMTgzLDIwMTkwLDIwMjA1LDIwMTkxLDIwMjE1LDIwMjMzLDIwMzE0LDIwMjcyLDIwMzE1LDIwMzE3LDIwMzExLDIwMjk1LDIwMzQyLDIwMzYwLDIwMzY3LDIwMzc2LDIwMzQ3LDIwMzI5LDIwMzM2LDIwMzY5LDIwMzM1LDIwMzU4LDIwMzc0LDIwNzYwLDIwNDM2LDIwNDQ3LDIwNDMwLDIwNDQwLDIwNDQzLDIwNDMzLDIwNDQyLDIwNDMyLDIwNDUyLDIwNDUzLDIwNTA2LDIwNTIwLDIwNTAwLDIwNTIyLDIwNTE3LDIwNDg1LDIwMjUyLDIwNDcwLDIwNTEzLDIwNTIxLDIwNTI0LDIwNDc4LDIwNDYzLDIwNDk3LDIwNDg2LDIwNTQ3LDIwNTUxLDI2MzcxLDIwNTY1LDIwNTYwLDIwNTUyLDIwNTcwLDIwNTY2LDIwNTg4LDIwNjAwLDIwNjA4LDIwNjM0LDIwNjEzLDIwNjYwLDIwNjU4LDIwNjgxLDIwNjgyLDIwNjU5LDIwNjc0LDIwNjk0LDIwNzAyLDIwNzA5LDIwNzE3LDIwNzA3LDIwNzE4LDIwNzI5LDIwNzI1LDIwNzQ1LDIwNzM3LDIwNzM4LDIwNzU4LDIwNzU3LDIwNzU2LDIwNzYyLDIwNzY5LDIwNzk0LDIwNzkxLDIwNzk2LDIwNzk1LDIwNzk5LDIwODAwLDIwODE4LDIwODEyLDIwODIwLDIwODM0LDMxNDgwLDIwODQxLDIwODQyLDIwODQ2LDIwODY0LDIwODY2LDIyMjMyLDIwODc2LDIwODczLDIwODc5LDIwODgxLDIwODgzLDIwODg1LDIwODg2LDIwOTAwLDIwOTAyLDIwODk4LDIwOTA1LDIwOTA2LDIwOTA3LDIwOTE1LDIwOTEzLDIwOTE0LDIwOTEyLDIwOTE3LDIwOTI1LDIwOTMzLDIwOTM3LDIwOTU1LDIwOTYwLDM0Mzg5LDIwOTY5LDIwOTczLDIwOTc2LDIwOTgxLDIwOTkwLDIwOTk2LDIxMDAzLDIxMDEyLDIxMDA2LDIxMDMxLDIxMDM0LDIxMDM4LDIxMDQzLDIxMDQ5LDIxMDcxLDIxMDYwLDIxMDY3LDIxMDY4LDIxMDg2LDIxMDc2LDIxMDk4LDIxMTA4LDIxMDk3LDIxMTA3LDIxMTE5LDIxMTE3LDIxMTMzLDIxMTQwLDIxMTM4LDIxMTA1LDIxMTI4LDIxMTM3LDM2Nzc2LDM2Nzc1LDIxMTY0LDIxMTY1LDIxMTgwLDIxMTczLDIxMTg1LDIxMTk3LDIxMjA3LDIxMjE0LDIxMjE5LDIxMjIyLDM5MTQ5LDIxMjE2LDIxMjM1LDIxMjM3LDIxMjQwLDIxMjQxLDIxMjU0LDIxMjU2LDMwMDA4LDIxMjYxLDIxMjY0LDIxMjYzLDIxMjY5LDIxMjc0LDIxMjgzLDIxMjk1LDIxMjk3LDIxMjk5LDIxMzA0LDIxMzEyLDIxMzE4LDIxMzE3LDE5OTkxLDIxMzIxLDIxMzI1LDIwOTUwLDIxMzQyLDIxMzUzLDIxMzU4LDIyODA4LDIxMzcxLDIxMzY3LDIxMzc4LDIxMzk4LDIxNDA4LDIxNDE0LDIxNDEzLDIxNDIyLDIxNDI0LDIxNDMwLDIxNDQzLDMxNzYyLDM4NjE3LDIxNDcxLDI2MzY0LDI5MTY2LDIxNDg2LDIxNDgwLDIxNDg1LDIxNDk4LDIxNTA1LDIxNTY1LDIxNTY4LDIxNTQ4LDIxNTQ5LDIxNTY0LDIxNTUwLDIxNTU4LDIxNTQ1LDIxNTMzLDIxNTgyLDIxNjQ3LDIxNjIxLDIxNjQ2LDIxNTk5LDIxNjE3LDIxNjIzLDIxNjE2LDIxNjUwLDIxNjI3LDIxNjMyLDIxNjIyLDIxNjM2LDIxNjQ4LDIxNjM4LDIxNzAzLDIxNjY2LDIxNjg4LDIxNjY5LDIxNjc2LDIxNzAwLDIxNzA0LDIxNjcyLDIxNjc1LDIxNjk4LDIxNjY4LDIxNjk0LDIxNjkyLDIxNzIwLDIxNzMzLDIxNzM0LDIxNzc1LDIxNzgwLDIxNzU3LDIxNzQyLDIxNzQxLDIxNzU0LDIxNzMwLDIxODE3LDIxODI0LDIxODU5LDIxODM2LDIxODA2LDIxODUyLDIxODI5LDIxODQ2LDIxODQ3LDIxODE2LDIxODExLDIxODUzLDIxOTEzLDIxODg4LDIxNjc5LDIxODk4LDIxOTE5LDIxODgzLDIxODg2LDIxOTEyLDIxOTE4LDIxOTM0LDIxODg0LDIxODkxLDIxOTI5LDIxODk1LDIxOTI4LDIxOTc4LDIxOTU3LDIxOTgzLDIxOTU2LDIxOTgwLDIxOTg4LDIxOTcyLDIyMDM2LDIyMDA3LDIyMDM4LDIyMDE0LDIyMDEzLDIyMDQzLDIyMDA5LDIyMDk0LDIyMDk2LDI5MTUxLDIyMDY4LDIyMDcwLDIyMDY2LDIyMDcyLDIyMTIzLDIyMTE2LDIyMDYzLDIyMTI0LDIyMTIyLDIyMTUwLDIyMTQ0LDIyMTU0LDIyMTc2LDIyMTY0LDIyMTU5LDIyMTgxLDIyMTkwLDIyMTk4LDIyMTk2LDIyMjEwLDIyMjA0LDIyMjA5LDIyMjExLDIyMjA4LDIyMjE2LDIyMjIyLDIyMjI1LDIyMjI3LDIyMjMxLDIyMjU0LDIyMjY1LDIyMjcyLDIyMjcxLDIyMjc2LDIyMjgxLDIyMjgwLDIyMjgzLDIyMjg1LDIyMjkxLDIyMjk2LDIyMjk0LDIxOTU5LDIyMzAwLDIyMzEwLDIyMzI3LDIyMzI4LDIyMzUwLDIyMzMxLDIyMzM2LDIyMzUxLDIyMzc3LDIyNDY0LDIyNDA4LDIyMzY5LDIyMzk5LDIyNDA5LDIyNDE5LDIyNDMyLDIyNDUxLDIyNDM2LDIyNDQyLDIyNDQ4LDIyNDY3LDIyNDcwLDIyNDg0LDIyNDgyLDIyNDgzLDIyNTM4LDIyNDg2LDIyNDk5LDIyNTM5LDIyNTUzLDIyNTU3LDIyNjQyLDIyNTYxLDIyNjI2LDIyNjAzLDIyNjQwLDI3NTg0LDIyNjEwLDIyNTg5LDIyNjQ5LDIyNjYxLDIyNzEzLDIyNjg3LDIyNjk5LDIyNzE0LDIyNzUwLDIyNzE1LDIyNzEyLDIyNzAyLDIyNzI1LDIyNzM5LDIyNzM3LDIyNzQzLDIyNzQ1LDIyNzQ0LDIyNzU3LDIyNzQ4LDIyNzU2LDIyNzUxLDIyNzY3LDIyNzc4LDIyNzc3LDIyNzc5LDIyNzgwLDIyNzgxLDIyNzg2LDIyNzk0LDIyODAwLDIyODExLDI2NzkwLDIyODIxLDIyODI4LDIyODI5LDIyODM0LDIyODQwLDIyODQ2LDMxNDQyLDIyODY5LDIyODY0LDIyODYyLDIyODc0LDIyODcyLDIyODgyLDIyODgwLDIyODg3LDIyODkyLDIyODg5LDIyOTA0LDIyOTEzLDIyOTQxLDIwMzE4LDIwMzk1LDIyOTQ3LDIyOTYyLDIyOTgyLDIzMDE2LDIzMDA0LDIyOTI1LDIzMDAxLDIzMDAyLDIzMDc3LDIzMDcxLDIzMDU3LDIzMDY4LDIzMDQ5LDIzMDY2LDIzMTA0LDIzMTQ4LDIzMTEzLDIzMDkzLDIzMDk0LDIzMTM4LDIzMTQ2LDIzMTk0LDIzMjI4LDIzMjMwLDIzMjQzLDIzMjM0LDIzMjI5LDIzMjY3LDIzMjU1LDIzMjcwLDIzMjczLDIzMjU0LDIzMjkwLDIzMjkxLDIzMzA4LDIzMzA3LDIzMzE4LDIzMzQ2LDIzMjQ4LDIzMzM4LDIzMzUwLDIzMzU4LDIzMzYzLDIzMzY1LDIzMzYwLDIzMzc3LDIzMzgxLDIzMzg2LDIzMzg3LDIzMzk3LDIzNDAxLDIzNDA4LDIzNDExLDIzNDEzLDIzNDE2LDI1OTkyLDIzNDE4LDIzNDI0LDIzNDI3LDIzNDYyLDIzNDgwLDIzNDkxLDIzNDk1LDIzNDk3LDIzNTA4LDIzNTA0LDIzNTI0LDIzNTI2LDIzNTIyLDIzNTE4LDIzNTI1LDIzNTMxLDIzNTM2LDIzNTQyLDIzNTM5LDIzNTU3LDIzNTU5LDIzNTYwLDIzNTY1LDIzNTcxLDIzNTg0LDIzNTg2LDIzNTkyLDIzNjA4LDIzNjA5LDIzNjE3LDIzNjIyLDIzNjMwLDIzNjM1LDIzNjMyLDIzNjMxLDIzNDA5LDIzNjYwLDIzNjYyLDIwMDY2LDIzNjcwLDIzNjczLDIzNjkyLDIzNjk3LDIzNzAwLDIyOTM5LDIzNzIzLDIzNzM5LDIzNzM0LDIzNzQwLDIzNzM1LDIzNzQ5LDIzNzQyLDIzNzUxLDIzNzY5LDIzNzg1LDIzODA1LDIzODAyLDIzNzg5LDIzOTQ4LDIzNzg2LDIzODE5LDIzODI5LDIzODMxLDIzOTAwLDIzODM5LDIzODM1LDIzODI1LDIzODI4LDIzODQyLDIzODM0LDIzODMzLDIzODMyLDIzODg0LDIzODkwLDIzODg2LDIzODgzLDIzOTE2LDIzOTIzLDIzOTI2LDIzOTQzLDIzOTQwLDIzOTM4LDIzOTcwLDIzOTY1LDIzOTgwLDIzOTgyLDIzOTk3LDIzOTUyLDIzOTkxLDIzOTk2LDI0MDA5LDI0MDEzLDI0MDE5LDI0MDE4LDI0MDIyLDI0MDI3LDI0MDQzLDI0MDUwLDI0MDUzLDI0MDc1LDI0MDkwLDI0MDg5LDI0MDgxLDI0MDkxLDI0MTE4LDI0MTE5LDI0MTMyLDI0MTMxLDI0MTI4LDI0MTQyLDI0MTUxLDI0MTQ4LDI0MTU5LDI0MTYyLDI0MTY0LDI0MTM1LDI0MTgxLDI0MTgyLDI0MTg2LDQwNjM2LDI0MTkxLDI0MjI0LDI0MjU3LDI0MjU4LDI0MjY0LDI0MjcyLDI0MjcxLDI0Mjc4LDI0MjkxLDI0Mjg1LDI0MjgyLDI0MjgzLDI0MjkwLDI0Mjg5LDI0Mjk2LDI0Mjk3LDI0MzAwLDI0MzA1LDI0MzA3LDI0MzA0LDI0MzA4LDI0MzEyLDI0MzE4LDI0MzIzLDI0MzI5LDI0NDEzLDI0NDEyLDI0MzMxLDI0MzM3LDI0MzQyLDI0MzYxLDI0MzY1LDI0Mzc2LDI0Mzg1LDI0MzkyLDI0Mzk2LDI0Mzk4LDI0MzY3LDI0NDAxLDI0NDA2LDI0NDA3LDI0NDA5LDI0NDE3LDI0NDI5LDI0NDM1LDI0NDM5LDI0NDUxLDI0NDUwLDI0NDQ3LDI0NDU4LDI0NDU2LDI0NDY1LDI0NDU1LDI0NDc4LDI0NDczLDI0NDcyLDI0NDgwLDI0NDg4LDI0NDkzLDI0NTA4LDI0NTM0LDI0NTcxLDI0NTQ4LDI0NTY4LDI0NTYxLDI0NTQxLDI0NzU1LDI0NTc1LDI0NjA5LDI0NjcyLDI0NjAxLDI0NTkyLDI0NjE3LDI0NTkwLDI0NjI1LDI0NjAzLDI0NTk3LDI0NjE5LDI0NjE0LDI0NTkxLDI0NjM0LDI0NjY2LDI0NjQxLDI0NjgyLDI0Njk1LDI0NjcxLDI0NjUwLDI0NjQ2LDI0NjUzLDI0Njc1LDI0NjQzLDI0Njc2LDI0NjQyLDI0Njg0LDI0NjgzLDI0NjY1LDI0NzA1LDI0NzE3LDI0ODA3LDI0NzA3LDI0NzMwLDI0NzA4LDI0NzMxLDI0NzI2LDI0NzI3LDI0NzIyLDI0NzQzLDI0NzE1LDI0ODAxLDI0NzYwLDI0ODAwLDI0Nzg3LDI0NzU2LDI0NTYwLDI0NzY1LDI0Nzc0LDI0NzU3LDI0NzkyLDI0OTA5LDI0ODUzLDI0ODM4LDI0ODIyLDI0ODIzLDI0ODMyLDI0ODIwLDI0ODI2LDI0ODM1LDI0ODY1LDI0ODI3LDI0ODE3LDI0ODQ1LDI0ODQ2LDI0OTAzLDI0ODk0LDI0ODcyLDI0ODcxLDI0OTA2LDI0ODk1LDI0ODkyLDI0ODc2LDI0ODg0LDI0ODkzLDI0ODk4LDI0OTAwLDI0OTQ3LDI0OTUxLDI0OTIwLDI0OTIxLDI0OTIyLDI0OTM5LDI0OTQ4LDI0OTQzLDI0OTMzLDI0OTQ1LDI0OTI3LDI0OTI1LDI0OTE1LDI0OTQ5LDI0OTg1LDI0OTgyLDI0OTY3LDI1MDA0LDI0OTgwLDI0OTg2LDI0OTcwLDI0OTc3LDI1MDAzLDI1MDA2LDI1MDM2LDI1MDM0LDI1MDMzLDI1MDc5LDI1MDMyLDI1MDI3LDI1MDMwLDI1MDE4LDI1MDM1LDMyNjMzLDI1MDM3LDI1MDYyLDI1MDU5LDI1MDc4LDI1MDgyLDI1MDc2LDI1MDg3LDI1MDg1LDI1MDg0LDI1MDg2LDI1MDg4LDI1MDk2LDI1MDk3LDI1MTAxLDI1MTAwLDI1MTA4LDI1MTE1LDI1MTE4LDI1MTIxLDI1MTMwLDI1MTM0LDI1MTM2LDI1MTM4LDI1MTM5LDI1MTUzLDI1MTY2LDI1MTgyLDI1MTg3LDI1MTc5LDI1MTg0LDI1MTkyLDI1MjEyLDI1MjE4LDI1MjI1LDI1MjE0LDI1MjM0LDI1MjM1LDI1MjM4LDI1MzAwLDI1MjE5LDI1MjM2LDI1MzAzLDI1Mjk3LDI1Mjc1LDI1Mjk1LDI1MzQzLDI1Mjg2LDI1ODEyLDI1Mjg4LDI1MzA4LDI1MjkyLDI1MjkwLDI1MjgyLDI1Mjg3LDI1MjQzLDI1Mjg5LDI1MzU2LDI1MzI2LDI1MzI5LDI1MzgzLDI1MzQ2LDI1MzUyLDI1MzI3LDI1MzMzLDI1NDI0LDI1NDA2LDI1NDIxLDI1NjI4LDI1NDIzLDI1NDk0LDI1NDg2LDI1NDcyLDI1NTE1LDI1NDYyLDI1NTA3LDI1NDg3LDI1NDgxLDI1NTAzLDI1NTI1LDI1NDUxLDI1NDQ5LDI1NTM0LDI1NTc3LDI1NTM2LDI1NTQyLDI1NTcxLDI1NTQ1LDI1NTU0LDI1NTkwLDI1NTQwLDI1NjIyLDI1NjUyLDI1NjA2LDI1NjE5LDI1NjM4LDI1NjU0LDI1ODg1LDI1NjIzLDI1NjQwLDI1NjE1LDI1NzAzLDI1NzExLDI1NzE4LDI1Njc4LDI1ODk4LDI1NzQ5LDI1NzQ3LDI1NzY1LDI1NzY5LDI1NzM2LDI1Nzg4LDI1ODE4LDI1ODEwLDI1Nzk3LDI1Nzk5LDI1Nzg3LDI1ODE2LDI1Nzk0LDI1ODQxLDI1ODMxLDMzMjg5LDI1ODI0LDI1ODI1LDI1MjYwLDI1ODI3LDI1ODM5LDI1OTAwLDI1ODQ2LDI1ODQ0LDI1ODQyLDI1ODUwLDI1ODU2LDI1ODUzLDI1ODgwLDI1ODg0LDI1ODYxLDI1ODkyLDI1ODkxLDI1ODk5LDI1OTA4LDI1OTA5LDI1OTExLDI1OTEwLDI1OTEyLDMwMDI3LDI1OTI4LDI1OTQyLDI1OTQxLDI1OTMzLDI1OTQ0LDI1OTUwLDI1OTQ5LDI1OTcwLDI1OTc2LDI1OTg2LDI1OTg3LDM1NzIyLDI2MDExLDI2MDE1LDI2MDI3LDI2MDM5LDI2MDUxLDI2MDU0LDI2MDQ5LDI2MDUyLDI2MDYwLDI2MDY2LDI2MDc1LDI2MDczLDI2MDgwLDI2MDgxLDI2MDk3LDI2NDgyLDI2MTIyLDI2MTE1LDI2MTA3LDI2NDgzLDI2MTY1LDI2MTY2LDI2MTY0LDI2MTQwLDI2MTkxLDI2MTgwLDI2MTg1LDI2MTc3LDI2MjA2LDI2MjA1LDI2MjEyLDI2MjE1LDI2MjE2LDI2MjA3LDI2MjEwLDI2MjI0LDI2MjQzLDI2MjQ4LDI2MjU0LDI2MjQ5LDI2MjQ0LDI2MjY0LDI2MjY5LDI2MzA1LDI2Mjk3LDI2MzEzLDI2MzAyLDI2MzAwLDI2MzA4LDI2Mjk2LDI2MzI2LDI2MzMwLDI2MzM2LDI2MTc1LDI2MzQyLDI2MzQ1LDI2MzUyLDI2MzU3LDI2MzU5LDI2MzgzLDI2MzkwLDI2Mzk4LDI2NDA2LDI2NDA3LDM4NzEyLDI2NDE0LDI2NDMxLDI2NDIyLDI2NDMzLDI2NDI0LDI2NDIzLDI2NDM4LDI2NDYyLDI2NDY0LDI2NDU3LDI2NDY3LDI2NDY4LDI2NTA1LDI2NDgwLDI2NTM3LDI2NDkyLDI2NDc0LDI2NTA4LDI2NTA3LDI2NTM0LDI2NTI5LDI2NTAxLDI2NTUxLDI2NjA3LDI2NTQ4LDI2NjA0LDI2NTQ3LDI2NjAxLDI2NTUyLDI2NTk2LDI2NTkwLDI2NTg5LDI2NTk0LDI2NjA2LDI2NTUzLDI2NTc0LDI2NTY2LDI2NTk5LDI3MjkyLDI2NjU0LDI2Njk0LDI2NjY1LDI2Njg4LDI2NzAxLDI2Njc0LDI2NzAyLDI2ODAzLDI2NjY3LDI2NzEzLDI2NzIzLDI2NzQzLDI2NzUxLDI2NzgzLDI2NzY3LDI2Nzk3LDI2NzcyLDI2NzgxLDI2Nzc5LDI2NzU1LDI3MzEwLDI2ODA5LDI2NzQwLDI2ODA1LDI2Nzg0LDI2ODEwLDI2ODk1LDI2NzY1LDI2NzUwLDI2ODgxLDI2ODI2LDI2ODg4LDI2ODQwLDI2OTE0LDI2OTE4LDI2ODQ5LDI2ODkyLDI2ODI5LDI2ODM2LDI2ODU1LDI2ODM3LDI2OTM0LDI2ODk4LDI2ODg0LDI2ODM5LDI2ODUxLDI2OTE3LDI2ODczLDI2ODQ4LDI2ODYzLDI2OTIwLDI2OTIyLDI2OTA2LDI2OTE1LDI2OTEzLDI2ODIyLDI3MDAxLDI2OTk5LDI2OTcyLDI3MDAwLDI2OTg3LDI2OTY0LDI3MDA2LDI2OTkwLDI2OTM3LDI2OTk2LDI2OTQxLDI2OTY5LDI2OTI4LDI2OTc3LDI2OTc0LDI2OTczLDI3MDA5LDI2OTg2LDI3MDU4LDI3MDU0LDI3MDg4LDI3MDcxLDI3MDczLDI3MDkxLDI3MDcwLDI3MDg2LDIzNTI4LDI3MDgyLDI3MTAxLDI3MDY3LDI3MDc1LDI3MDQ3LDI3MTgyLDI3MDI1LDI3MDQwLDI3MDM2LDI3MDI5LDI3MDYwLDI3MTAyLDI3MTEyLDI3MTM4LDI3MTYzLDI3MTM1LDI3NDAyLDI3MTI5LDI3MTIyLDI3MTExLDI3MTQxLDI3MDU3LDI3MTY2LDI3MTE3LDI3MTU2LDI3MTE1LDI3MTQ2LDI3MTU0LDI3MzI5LDI3MTcxLDI3MTU1LDI3MjA0LDI3MTQ4LDI3MjUwLDI3MTkwLDI3MjU2LDI3MjA3LDI3MjM0LDI3MjI1LDI3MjM4LDI3MjA4LDI3MTkyLDI3MTcwLDI3MjgwLDI3Mjc3LDI3Mjk2LDI3MjY4LDI3Mjk4LDI3Mjk5LDI3Mjg3LDM0MzI3LDI3MzIzLDI3MzMxLDI3MzMwLDI3MzIwLDI3MzE1LDI3MzA4LDI3MzU4LDI3MzQ1LDI3MzU5LDI3MzA2LDI3MzU0LDI3MzcwLDI3Mzg3LDI3Mzk3LDM0MzI2LDI3Mzg2LDI3NDEwLDI3NDE0LDM5NzI5LDI3NDIzLDI3NDQ4LDI3NDQ3LDMwNDI4LDI3NDQ5LDM5MTUwLDI3NDYzLDI3NDU5LDI3NDY1LDI3NDcyLDI3NDgxLDI3NDc2LDI3NDgzLDI3NDg3LDI3NDg5LDI3NTEyLDI3NTEzLDI3NTE5LDI3NTIwLDI3NTI0LDI3NTIzLDI3NTMzLDI3NTQ0LDI3NTQxLDI3NTUwLDI3NTU2LDI3NTYyLDI3NTYzLDI3NTY3LDI3NTcwLDI3NTY5LDI3NTcxLDI3NTc1LDI3NTgwLDI3NTkwLDI3NTk1LDI3NjAzLDI3NjE1LDI3NjI4LDI3NjI3LDI3NjM1LDI3NjMxLDQwNjM4LDI3NjU2LDI3NjY3LDI3NjY4LDI3Njc1LDI3Njg0LDI3NjgzLDI3NzQyLDI3NzMzLDI3NzQ2LDI3NzU0LDI3Nzc4LDI3Nzg5LDI3ODAyLDI3Nzc3LDI3ODAzLDI3Nzc0LDI3NzUyLDI3NzYzLDI3Nzk0LDI3NzkyLDI3ODQ0LDI3ODg5LDI3ODU5LDI3ODM3LDI3ODYzLDI3ODQ1LDI3ODY5LDI3ODIyLDI3ODI1LDI3ODM4LDI3ODM0LDI3ODY3LDI3ODg3LDI3ODY1LDI3ODgyLDI3OTM1LDM0ODkzLDI3OTU4LDI3OTQ3LDI3OTY1LDI3OTYwLDI3OTI5LDI3OTU3LDI3OTU1LDI3OTIyLDI3OTE2LDI4MDAzLDI4MDUxLDI4MDA0LDI3OTk0LDI4MDI1LDI3OTkzLDI4MDQ2LDI4MDUzLDI4NjQ0LDI4MDM3LDI4MTUzLDI4MTgxLDI4MTcwLDI4MDg1LDI4MTAzLDI4MTM0LDI4MDg4LDI4MTAyLDI4MTQwLDI4MTI2LDI4MTA4LDI4MTM2LDI4MTE0LDI4MTAxLDI4MTU0LDI4MTIxLDI4MTMyLDI4MTE3LDI4MTM4LDI4MTQyLDI4MjA1LDI4MjcwLDI4MjA2LDI4MTg1LDI4Mjc0LDI4MjU1LDI4MjIyLDI4MTk1LDI4MjY3LDI4MjAzLDI4Mjc4LDI4MjM3LDI4MTkxLDI4MjI3LDI4MjE4LDI4MjM4LDI4MTk2LDI4NDE1LDI4MTg5LDI4MjE2LDI4MjkwLDI4MzMwLDI4MzEyLDI4MzYxLDI4MzQzLDI4MzcxLDI4MzQ5LDI4MzM1LDI4MzU2LDI4MzM4LDI4MzcyLDI4MzczLDI4MzAzLDI4MzI1LDI4MzU0LDI4MzE5LDI4NDgxLDI4NDMzLDI4NzQ4LDI4Mzk2LDI4NDA4LDI4NDE0LDI4NDc5LDI4NDAyLDI4NDY1LDI4Mzk5LDI4NDY2LDI4MzY0LDI4NDc4LDI4NDM1LDI4NDA3LDI4NTUwLDI4NTM4LDI4NTM2LDI4NTQ1LDI4NTQ0LDI4NTI3LDI4NTA3LDI4NjU5LDI4NTI1LDI4NTQ2LDI4NTQwLDI4NTA0LDI4NTU4LDI4NTYxLDI4NjEwLDI4NTE4LDI4NTk1LDI4NTc5LDI4NTc3LDI4NTgwLDI4NjAxLDI4NjE0LDI4NTg2LDI4NjM5LDI4NjI5LDI4NjUyLDI4NjI4LDI4NjMyLDI4NjU3LDI4NjU0LDI4NjM1LDI4NjgxLDI4NjgzLDI4NjY2LDI4Njg5LDI4NjczLDI4Njg3LDI4NjcwLDI4Njk5LDI4Njk4LDI4NTMyLDI4NzAxLDI4Njk2LDI4NzAzLDI4NzIwLDI4NzM0LDI4NzIyLDI4NzUzLDI4NzcxLDI4ODI1LDI4ODE4LDI4ODQ3LDI4OTEzLDI4ODQ0LDI4ODU2LDI4ODUxLDI4ODQ2LDI4ODk1LDI4ODc1LDI4ODkzLDI4ODg5LDI4OTM3LDI4OTI1LDI4OTU2LDI4OTUzLDI5MDI5LDI5MDEzLDI5MDY0LDI5MDMwLDI5MDI2LDI5MDA0LDI5MDE0LDI5MDM2LDI5MDcxLDI5MTc5LDI5MDYwLDI5MDc3LDI5MDk2LDI5MTAwLDI5MTQzLDI5MTEzLDI5MTE4LDI5MTM4LDI5MTI5LDI5MTQwLDI5MTM0LDI5MTUyLDI5MTY0LDI5MTU5LDI5MTczLDI5MTgwLDI5MTc3LDI5MTgzLDI5MTk3LDI5MjAwLDI5MjExLDI5MjI0LDI5MjI5LDI5MjI4LDI5MjMyLDI5MjM0LDI5MjQzLDI5MjQ0LDI5MjQ3LDI5MjQ4LDI5MjU0LDI5MjU5LDI5MjcyLDI5MzAwLDI5MzEwLDI5MzE0LDI5MzEzLDI5MzE5LDI5MzMwLDI5MzM0LDI5MzQ2LDI5MzUxLDI5MzY5LDI5MzYyLDI5Mzc5LDI5MzgyLDI5MzgwLDI5MzkwLDI5Mzk0LDI5NDEwLDI5NDA4LDI5NDA5LDI5NDMzLDI5NDMxLDIwNDk1LDI5NDYzLDI5NDUwLDI5NDY4LDI5NDYyLDI5NDY5LDI5NDkyLDI5NDg3LDI5NDgxLDI5NDc3LDI5NTAyLDI5NTE4LDI5NTE5LDQwNjY0LDI5NTI3LDI5NTQ2LDI5NTQ0LDI5NTUyLDI5NTYwLDI5NTU3LDI5NTYzLDI5NTYyLDI5NjQwLDI5NjE5LDI5NjQ2LDI5NjI3LDI5NjMyLDI5NjY5LDI5Njc4LDI5NjYyLDI5ODU4LDI5NzAxLDI5ODA3LDI5NzMzLDI5Njg4LDI5NzQ2LDI5NzU0LDI5NzgxLDI5NzU5LDI5NzkxLDI5Nzg1LDI5NzYxLDI5Nzg4LDI5ODAxLDI5ODA4LDI5Nzk1LDI5ODAyLDI5ODE0LDI5ODIyLDI5ODM1LDI5ODU0LDI5ODYzLDI5ODk4LDI5OTAzLDI5OTA4LDI5NjgxLDI5OTIwLDI5OTIzLDI5OTI3LDI5OTI5LDI5OTM0LDI5OTM4LDI5OTM2LDI5OTM3LDI5OTQ0LDI5OTQzLDI5OTU2LDI5OTU1LDI5OTU3LDI5OTY0LDI5OTY2LDI5OTY1LDI5OTczLDI5OTcxLDI5OTgyLDI5OTkwLDI5OTk2LDMwMDEyLDMwMDIwLDMwMDI5LDMwMDI2LDMwMDI1LDMwMDQzLDMwMDIyLDMwMDQyLDMwMDU3LDMwMDUyLDMwMDU1LDMwMDU5LDMwMDYxLDMwMDcyLDMwMDcwLDMwMDg2LDMwMDg3LDMwMDY4LDMwMDkwLDMwMDg5LDMwMDgyLDMwMTAwLDMwMTA2LDMwMTA5LDMwMTE3LDMwMTE1LDMwMTQ2LDMwMTMxLDMwMTQ3LDMwMTMzLDMwMTQxLDMwMTM2LDMwMTQwLDMwMTI5LDMwMTU3LDMwMTU0LDMwMTYyLDMwMTY5LDMwMTc5LDMwMTc0LDMwMjA2LDMwMjA3LDMwMjA0LDMwMjA5LDMwMTkyLDMwMjAyLDMwMTk0LDMwMTk1LDMwMjE5LDMwMjIxLDMwMjE3LDMwMjM5LDMwMjQ3LDMwMjQwLDMwMjQxLDMwMjQyLDMwMjQ0LDMwMjYwLDMwMjU2LDMwMjY3LDMwMjc5LDMwMjgwLDMwMjc4LDMwMzAwLDMwMjk2LDMwMzA1LDMwMzA2LDMwMzEyLDMwMzEzLDMwMzE0LDMwMzExLDMwMzE2LDMwMzIwLDMwMzIyLDMwMzI2LDMwMzI4LDMwMzMyLDMwMzM2LDMwMzM5LDMwMzQ0LDMwMzQ3LDMwMzUwLDMwMzU4LDMwMzU1LDMwMzYxLDMwMzYyLDMwMzg0LDMwMzg4LDMwMzkyLDMwMzkzLDMwMzk0LDMwNDAyLDMwNDEzLDMwNDIyLDMwNDE4LDMwNDMwLDMwNDMzLDMwNDM3LDMwNDM5LDMwNDQyLDM0MzUxLDMwNDU5LDMwNDcyLDMwNDcxLDMwNDY4LDMwNTA1LDMwNTAwLDMwNDk0LDMwNTAxLDMwNTAyLDMwNDkxLDMwNTE5LDMwNTIwLDMwNTM1LDMwNTU0LDMwNTY4LDMwNTcxLDMwNTU1LDMwNTY1LDMwNTkxLDMwNTkwLDMwNTg1LDMwNjA2LDMwNjAzLDMwNjA5LDMwNjI0LDMwNjIyLDMwNjQwLDMwNjQ2LDMwNjQ5LDMwNjU1LDMwNjUyLDMwNjUzLDMwNjUxLDMwNjYzLDMwNjY5LDMwNjc5LDMwNjgyLDMwNjg0LDMwNjkxLDMwNzAyLDMwNzE2LDMwNzMyLDMwNzM4LDMxMDE0LDMwNzUyLDMxMDE4LDMwNzg5LDMwODYyLDMwODM2LDMwODU0LDMwODQ0LDMwODc0LDMwODYwLDMwODgzLDMwOTAxLDMwODkwLDMwODk1LDMwOTI5LDMwOTE4LDMwOTIzLDMwOTMyLDMwOTEwLDMwOTA4LDMwOTE3LDMwOTIyLDMwOTU2LDMwOTUxLDMwOTM4LDMwOTczLDMwOTY0LDMwOTgzLDMwOTk0LDMwOTkzLDMxMDAxLDMxMDIwLDMxMDE5LDMxMDQwLDMxMDcyLDMxMDYzLDMxMDcxLDMxMDY2LDMxMDYxLDMxMDU5LDMxMDk4LDMxMTAzLDMxMTE0LDMxMTMzLDMxMTQzLDQwNzc5LDMxMTQ2LDMxMTUwLDMxMTU1LDMxMTYxLDMxMTYyLDMxMTc3LDMxMTg5LDMxMjA3LDMxMjEyLDMxMjAxLDMxMjAzLDMxMjQwLDMxMjQ1LDMxMjU2LDMxMjU3LDMxMjY0LDMxMjYzLDMxMTA0LDMxMjgxLDMxMjkxLDMxMjk0LDMxMjg3LDMxMjk5LDMxMzE5LDMxMzA1LDMxMzI5LDMxMzMwLDMxMzM3LDQwODYxLDMxMzQ0LDMxMzUzLDMxMzU3LDMxMzY4LDMxMzgzLDMxMzgxLDMxMzg0LDMxMzgyLDMxNDAxLDMxNDMyLDMxNDA4LDMxNDE0LDMxNDI5LDMxNDI4LDMxNDIzLDM2OTk1LDMxNDMxLDMxNDM0LDMxNDM3LDMxNDM5LDMxNDQ1LDMxNDQzLDMxNDQ5LDMxNDUwLDMxNDUzLDMxNDU3LDMxNDU4LDMxNDYyLDMxNDY5LDMxNDcyLDMxNDkwLDMxNTAzLDMxNDk4LDMxNDk0LDMxNTM5LDMxNTEyLDMxNTEzLDMxNTE4LDMxNTQxLDMxNTI4LDMxNTQyLDMxNTY4LDMxNjEwLDMxNDkyLDMxNTY1LDMxNDk5LDMxNTY0LDMxNTU3LDMxNjA1LDMxNTg5LDMxNjA0LDMxNTkxLDMxNjAwLDMxNjAxLDMxNTk2LDMxNTk4LDMxNjQ1LDMxNjQwLDMxNjQ3LDMxNjI5LDMxNjQ0LDMxNjQyLDMxNjI3LDMxNjM0LDMxNjMxLDMxNTgxLDMxNjQxLDMxNjkxLDMxNjgxLDMxNjkyLDMxNjk1LDMxNjY4LDMxNjg2LDMxNzA5LDMxNzIxLDMxNzYxLDMxNzY0LDMxNzE4LDMxNzE3LDMxODQwLDMxNzQ0LDMxNzUxLDMxNzYzLDMxNzMxLDMxNzM1LDMxNzY3LDMxNzU3LDMxNzM0LDMxNzc5LDMxNzgzLDMxNzg2LDMxNzc1LDMxNzk5LDMxNzg3LDMxODA1LDMxODIwLDMxODExLDMxODI4LDMxODIzLDMxODA4LDMxODI0LDMxODMyLDMxODM5LDMxODQ0LDMxODMwLDMxODQ1LDMxODUyLDMxODYxLDMxODc1LDMxODg4LDMxOTA4LDMxOTE3LDMxOTA2LDMxOTE1LDMxOTA1LDMxOTEyLDMxOTIzLDMxOTIyLDMxOTIxLDMxOTE4LDMxOTI5LDMxOTMzLDMxOTM2LDMxOTQxLDMxOTM4LDMxOTYwLDMxOTU0LDMxOTY0LDMxOTcwLDM5NzM5LDMxOTgzLDMxOTg2LDMxOTg4LDMxOTkwLDMxOTk0LDMyMDA2LDMyMDAyLDMyMDI4LDMyMDIxLDMyMDEwLDMyMDY5LDMyMDc1LDMyMDQ2LDMyMDUwLDMyMDYzLDMyMDUzLDMyMDcwLDMyMTE1LDMyMDg2LDMyMDc4LDMyMTE0LDMyMTA0LDMyMTEwLDMyMDc5LDMyMDk5LDMyMTQ3LDMyMTM3LDMyMDkxLDMyMTQzLDMyMTI1LDMyMTU1LDMyMTg2LDMyMTc0LDMyMTYzLDMyMTgxLDMyMTk5LDMyMTg5LDMyMTcxLDMyMzE3LDMyMTYyLDMyMTc1LDMyMjIwLDMyMTg0LDMyMTU5LDMyMTc2LDMyMjE2LDMyMjIxLDMyMjI4LDMyMjIyLDMyMjUxLDMyMjQyLDMyMjI1LDMyMjYxLDMyMjY2LDMyMjkxLDMyMjg5LDMyMjc0LDMyMzA1LDMyMjg3LDMyMjY1LDMyMjY3LDMyMjkwLDMyMzI2LDMyMzU4LDMyMzE1LDMyMzA5LDMyMzEzLDMyMzIzLDMyMzExLDMyMzA2LDMyMzE0LDMyMzU5LDMyMzQ5LDMyMzQyLDMyMzUwLDMyMzQ1LDMyMzQ2LDMyMzc3LDMyMzYyLDMyMzYxLDMyMzgwLDMyMzc5LDMyMzg3LDMyMjEzLDMyMzgxLDM2NzgyLDMyMzgzLDMyMzkyLDMyMzkzLDMyMzk2LDMyNDAyLDMyNDAwLDMyNDAzLDMyNDA0LDMyNDA2LDMyMzk4LDMyNDExLDMyNDEyLDMyNTY4LDMyNTcwLDMyNTgxLDMyNTg4LDMyNTg5LDMyNTkwLDMyNTkyLDMyNTkzLDMyNTk3LDMyNTk2LDMyNjAwLDMyNjA3LDMyNjA4LDMyNjE2LDMyNjE3LDMyNjE1LDMyNjMyLDMyNjQyLDMyNjQ2LDMyNjQzLDMyNjQ4LDMyNjQ3LDMyNjUyLDMyNjYwLDMyNjcwLDMyNjY5LDMyNjY2LDMyNjc1LDMyNjg3LDMyNjkwLDMyNjk3LDMyNjg2LDMyNjk0LDMyNjk2LDM1Njk3LDMyNzA5LDMyNzEwLDMyNzE0LDMyNzI1LDMyNzI0LDMyNzM3LDMyNzQyLDMyNzQ1LDMyNzU1LDMyNzYxLDM5MTMyLDMyNzc0LDMyNzcyLDMyNzc5LDMyNzg2LDMyNzkyLDMyNzkzLDMyNzk2LDMyODAxLDMyODA4LDMyODMxLDMyODI3LDMyODQyLDMyODM4LDMyODUwLDMyODU2LDMyODU4LDMyODYzLDMyODY2LDMyODcyLDMyODgzLDMyODgyLDMyODgwLDMyODg2LDMyODg5LDMyODkzLDMyODk1LDMyOTAwLDMyOTAyLDMyOTAxLDMyOTIzLDMyOTE1LDMyOTIyLDMyOTQxLDIwODgwLDMyOTQwLDMyOTg3LDMyOTk3LDMyOTg1LDMyOTg5LDMyOTY0LDMyOTg2LDMyOTgyLDMzMDMzLDMzMDA3LDMzMDA5LDMzMDUxLDMzMDY1LDMzMDU5LDMzMDcxLDMzMDk5LDM4NTM5LDMzMDk0LDMzMDg2LDMzMTA3LDMzMTA1LDMzMDIwLDMzMTM3LDMzMTM0LDMzMTI1LDMzMTI2LDMzMTQwLDMzMTU1LDMzMTYwLDMzMTYyLDMzMTUyLDMzMTU0LDMzMTg0LDMzMTczLDMzMTg4LDMzMTg3LDMzMTE5LDMzMTcxLDMzMTkzLDMzMjAwLDMzMjA1LDMzMjE0LDMzMjA4LDMzMjEzLDMzMjE2LDMzMjE4LDMzMjEwLDMzMjI1LDMzMjI5LDMzMjMzLDMzMjQxLDMzMjQwLDMzMjI0LDMzMjQyLDMzMjQ3LDMzMjQ4LDMzMjU1LDMzMjc0LDMzMjc1LDMzMjc4LDMzMjgxLDMzMjgyLDMzMjg1LDMzMjg3LDMzMjkwLDMzMjkzLDMzMjk2LDMzMzAyLDMzMzIxLDMzMzIzLDMzMzM2LDMzMzMxLDMzMzQ0LDMzMzY5LDMzMzY4LDMzMzczLDMzMzcwLDMzMzc1LDMzMzgwLDMzMzc4LDMzMzg0LDMzMzg2LDMzMzg3LDMzMzI2LDMzMzkzLDMzMzk5LDMzNDAwLDMzNDA2LDMzNDIxLDMzNDI2LDMzNDUxLDMzNDM5LDMzNDY3LDMzNDUyLDMzNTA1LDMzNTA3LDMzNTAzLDMzNDkwLDMzNTI0LDMzNTIzLDMzNTMwLDMzNjgzLDMzNTM5LDMzNTMxLDMzNTI5LDMzNTAyLDMzNTQyLDMzNTAwLDMzNTQ1LDMzNDk3LDMzNTg5LDMzNTg4LDMzNTU4LDMzNTg2LDMzNTg1LDMzNjAwLDMzNTkzLDMzNjE2LDMzNjA1LDMzNTgzLDMzNTc5LDMzNTU5LDMzNTYwLDMzNjY5LDMzNjkwLDMzNzA2LDMzNjk1LDMzNjk4LDMzNjg2LDMzNTcxLDMzNjc4LDMzNjcxLDMzNjc0LDMzNjYwLDMzNzE3LDMzNjUxLDMzNjUzLDMzNjk2LDMzNjczLDMzNzA0LDMzNzgwLDMzODExLDMzNzcxLDMzNzQyLDMzNzg5LDMzNzk1LDMzNzUyLDMzODAzLDMzNzI5LDMzNzgzLDMzNzk5LDMzNzYwLDMzNzc4LDMzODA1LDMzODI2LDMzODI0LDMzNzI1LDMzODQ4LDM0MDU0LDMzNzg3LDMzOTAxLDMzODM0LDMzODUyLDM0MTM4LDMzOTI0LDMzOTExLDMzODk5LDMzOTY1LDMzOTAyLDMzOTIyLDMzODk3LDMzODYyLDMzODM2LDMzOTAzLDMzOTEzLDMzODQ1LDMzOTk0LDMzODkwLDMzOTc3LDMzOTgzLDMzOTUxLDM0MDA5LDMzOTk3LDMzOTc5LDM0MDEwLDM0MDAwLDMzOTg1LDMzOTkwLDM0MDA2LDMzOTUzLDM0MDgxLDM0MDQ3LDM0MDM2LDM0MDcxLDM0MDcyLDM0MDkyLDM0MDc5LDM0MDY5LDM0MDY4LDM0MDQ0LDM0MTEyLDM0MTQ3LDM0MTM2LDM0MTIwLDM0MTEzLDM0MzA2LDM0MTIzLDM0MTMzLDM0MTc2LDM0MjEyLDM0MTg0LDM0MTkzLDM0MTg2LDM0MjE2LDM0MTU3LDM0MTk2LDM0MjAzLDM0MjgyLDM0MTgzLDM0MjA0LDM0MTY3LDM0MTc0LDM0MTkyLDM0MjQ5LDM0MjM0LDM0MjU1LDM0MjMzLDM0MjU2LDM0MjYxLDM0MjY5LDM0Mjc3LDM0MjY4LDM0Mjk3LDM0MzE0LDM0MzIzLDM0MzE1LDM0MzAyLDM0Mjk4LDM0MzEwLDM0MzM4LDM0MzMwLDM0MzUyLDM0MzY3LDM0MzgxLDIwMDUzLDM0Mzg4LDM0Mzk5LDM0NDA3LDM0NDE3LDM0NDUxLDM0NDY3LDM0NDczLDM0NDc0LDM0NDQzLDM0NDQ0LDM0NDg2LDM0NDc5LDM0NTAwLDM0NTAyLDM0NDgwLDM0NTA1LDM0ODUxLDM0NDc1LDM0NTE2LDM0NTI2LDM0NTM3LDM0NTQwLDM0NTI3LDM0NTIzLDM0NTQzLDM0NTc4LDM0NTY2LDM0NTY4LDM0NTYwLDM0NTYzLDM0NTU1LDM0NTc3LDM0NTY5LDM0NTczLDM0NTUzLDM0NTcwLDM0NjEyLDM0NjIzLDM0NjE1LDM0NjE5LDM0NTk3LDM0NjAxLDM0NTg2LDM0NjU2LDM0NjU1LDM0NjgwLDM0NjM2LDM0NjM4LDM0Njc2LDM0NjQ3LDM0NjY0LDM0NjcwLDM0NjQ5LDM0NjQzLDM0NjU5LDM0NjY2LDM0ODIxLDM0NzIyLDM0NzE5LDM0NjkwLDM0NzM1LDM0NzYzLDM0NzQ5LDM0NzUyLDM0NzY4LDM4NjE0LDM0NzMxLDM0NzU2LDM0NzM5LDM0NzU5LDM0NzU4LDM0NzQ3LDM0Nzk5LDM0ODAyLDM0Nzg0LDM0ODMxLDM0ODI5LDM0ODE0LDM0ODA2LDM0ODA3LDM0ODMwLDM0NzcwLDM0ODMzLDM0ODM4LDM0ODM3LDM0ODUwLDM0ODQ5LDM0ODY1LDM0ODcwLDM0ODczLDM0ODU1LDM0ODc1LDM0ODg0LDM0ODgyLDM0ODk4LDM0OTA1LDM0OTEwLDM0OTE0LDM0OTIzLDM0OTQ1LDM0OTQyLDM0OTc0LDM0OTMzLDM0OTQxLDM0OTk3LDM0OTMwLDM0OTQ2LDM0OTY3LDM0OTYyLDM0OTkwLDM0OTY5LDM0OTc4LDM0OTU3LDM0OTgwLDM0OTkyLDM1MDA3LDM0OTkzLDM1MDExLDM1MDEyLDM1MDI4LDM1MDMyLDM1MDMzLDM1MDM3LDM1MDY1LDM1MDc0LDM1MDY4LDM1MDYwLDM1MDQ4LDM1MDU4LDM1MDc2LDM1MDg0LDM1MDgyLDM1MDkxLDM1MTM5LDM1MTAyLDM1MTA5LDM1MTE0LDM1MTE1LDM1MTM3LDM1MTQwLDM1MTMxLDM1MTI2LDM1MTI4LDM1MTQ4LDM1MTAxLDM1MTY4LDM1MTY2LDM1MTc0LDM1MTcyLDM1MTgxLDM1MTc4LDM1MTgzLDM1MTg4LDM1MTkxLDM1MTk4LDM1MjAzLDM1MjA4LDM1MjEwLDM1MjE5LDM1MjI0LDM1MjMzLDM1MjQxLDM1MjM4LDM1MjQ0LDM1MjQ3LDM1MjUwLDM1MjU4LDM1MjYxLDM1MjYzLDM1MjY0LDM1MjkwLDM1MjkyLDM1MjkzLDM1MzAzLDM1MzE2LDM1MzIwLDM1MzMxLDM1MzUwLDM1MzQ0LDM1MzQwLDM1MzU1LDM1MzU3LDM1MzY1LDM1MzgyLDM1MzkzLDM1NDE5LDM1NDEwLDM1Mzk4LDM1NDAwLDM1NDUyLDM1NDM3LDM1NDM2LDM1NDI2LDM1NDYxLDM1NDU4LDM1NDYwLDM1NDk2LDM1NDg5LDM1NDczLDM1NDkzLDM1NDk0LDM1NDgyLDM1NDkxLDM1NTI0LDM1NTMzLDM1NTIyLDM1NTQ2LDM1NTYzLDM1NTcxLDM1NTU5LDM1NTU2LDM1NTY5LDM1NjA0LDM1NTUyLDM1NTU0LDM1NTc1LDM1NTUwLDM1NTQ3LDM1NTk2LDM1NTkxLDM1NjEwLDM1NTUzLDM1NjA2LDM1NjAwLDM1NjA3LDM1NjE2LDM1NjM1LDM4ODI3LDM1NjIyLDM1NjI3LDM1NjQ2LDM1NjI0LDM1NjQ5LDM1NjYwLDM1NjYzLDM1NjYyLDM1NjU3LDM1NjcwLDM1Njc1LDM1Njc0LDM1NjkxLDM1Njc5LDM1NjkyLDM1Njk1LDM1NzAwLDM1NzA5LDM1NzEyLDM1NzI0LDM1NzI2LDM1NzMwLDM1NzMxLDM1NzM0LDM1NzM3LDM1NzM4LDM1ODk4LDM1OTA1LDM1OTAzLDM1OTEyLDM1OTE2LDM1OTE4LDM1OTIwLDM1OTI1LDM1OTM4LDM1OTQ4LDM1OTYwLDM1OTYyLDM1OTcwLDM1OTc3LDM1OTczLDM1OTc4LDM1OTgxLDM1OTgyLDM1OTg4LDM1OTY0LDM1OTkyLDI1MTE3LDM2MDEzLDM2MDEwLDM2MDI5LDM2MDE4LDM2MDE5LDM2MDE0LDM2MDIyLDM2MDQwLDM2MDMzLDM2MDY4LDM2MDY3LDM2MDU4LDM2MDkzLDM2MDkwLDM2MDkxLDM2MTAwLDM2MTAxLDM2MTA2LDM2MTAzLDM2MTExLDM2MTA5LDM2MTEyLDQwNzgyLDM2MTE1LDM2MDQ1LDM2MTE2LDM2MTE4LDM2MTk5LDM2MjA1LDM2MjA5LDM2MjExLDM2MjI1LDM2MjQ5LDM2MjkwLDM2Mjg2LDM2MjgyLDM2MzAzLDM2MzE0LDM2MzEwLDM2MzAwLDM2MzE1LDM2Mjk5LDM2MzMwLDM2MzMxLDM2MzE5LDM2MzIzLDM2MzQ4LDM2MzYwLDM2MzYxLDM2MzUxLDM2MzgxLDM2MzgyLDM2MzY4LDM2MzgzLDM2NDE4LDM2NDA1LDM2NDAwLDM2NDA0LDM2NDI2LDM2NDIzLDM2NDI1LDM2NDI4LDM2NDMyLDM2NDI0LDM2NDQxLDM2NDUyLDM2NDQ4LDM2Mzk0LDM2NDUxLDM2NDM3LDM2NDcwLDM2NDY2LDM2NDc2LDM2NDgxLDM2NDg3LDM2NDg1LDM2NDg0LDM2NDkxLDM2NDkwLDM2NDk5LDM2NDk3LDM2NTAwLDM2NTA1LDM2NTIyLDM2NTEzLDM2NTI0LDM2NTI4LDM2NTUwLDM2NTI5LDM2NTQyLDM2NTQ5LDM2NTUyLDM2NTU1LDM2NTcxLDM2NTc5LDM2NjA0LDM2NjAzLDM2NTg3LDM2NjA2LDM2NjE4LDM2NjEzLDM2NjI5LDM2NjI2LDM2NjMzLDM2NjI3LDM2NjM2LDM2NjM5LDM2NjM1LDM2NjIwLDM2NjQ2LDM2NjU5LDM2NjY3LDM2NjY1LDM2Njc3LDM2Njc0LDM2NjcwLDM2Njg0LDM2NjgxLDM2Njc4LDM2Njg2LDM2Njk1LDM2NzAwLDM2NzA2LDM2NzA3LDM2NzA4LDM2NzY0LDM2NzY3LDM2NzcxLDM2NzgxLDM2NzgzLDM2NzkxLDM2ODI2LDM2ODM3LDM2ODM0LDM2ODQyLDM2ODQ3LDM2OTk5LDM2ODUyLDM2ODY5LDM2ODU3LDM2ODU4LDM2ODgxLDM2ODg1LDM2ODk3LDM2ODc3LDM2ODk0LDM2ODg2LDM2ODc1LDM2OTAzLDM2OTE4LDM2OTE3LDM2OTIxLDM2ODU2LDM2OTQzLDM2OTQ0LDM2OTQ1LDM2OTQ2LDM2ODc4LDM2OTM3LDM2OTI2LDM2OTUwLDM2OTUyLDM2OTU4LDM2OTY4LDM2OTc1LDM2OTgyLDM4NTY4LDM2OTc4LDM2OTk0LDM2OTg5LDM2OTkzLDM2OTkyLDM3MDAyLDM3MDAxLDM3MDA3LDM3MDMyLDM3MDM5LDM3MDQxLDM3MDQ1LDM3MDkwLDM3MDkyLDI1MTYwLDM3MDgzLDM3MTIyLDM3MTM4LDM3MTQ1LDM3MTcwLDM3MTY4LDM3MTk0LDM3MjA2LDM3MjA4LDM3MjE5LDM3MjIxLDM3MjI1LDM3MjM1LDM3MjM0LDM3MjU5LDM3MjU3LDM3MjUwLDM3MjgyLDM3MjkxLDM3Mjk1LDM3MjkwLDM3MzAxLDM3MzAwLDM3MzA2LDM3MzEyLDM3MzEzLDM3MzIxLDM3MzIzLDM3MzI4LDM3MzM0LDM3MzQzLDM3MzQ1LDM3MzM5LDM3MzcyLDM3MzY1LDM3MzY2LDM3NDA2LDM3Mzc1LDM3Mzk2LDM3NDIwLDM3Mzk3LDM3MzkzLDM3NDcwLDM3NDYzLDM3NDQ1LDM3NDQ5LDM3NDc2LDM3NDQ4LDM3NTI1LDM3NDM5LDM3NDUxLDM3NDU2LDM3NTMyLDM3NTI2LDM3NTIzLDM3NTMxLDM3NDY2LDM3NTgzLDM3NTYxLDM3NTU5LDM3NjA5LDM3NjQ3LDM3NjI2LDM3NzAwLDM3Njc4LDM3NjU3LDM3NjY2LDM3NjU4LDM3NjY3LDM3NjkwLDM3Njg1LDM3NjkxLDM3NzI0LDM3NzI4LDM3NzU2LDM3NzQyLDM3NzE4LDM3ODA4LDM3ODA0LDM3ODA1LDM3NzgwLDM3ODE3LDM3ODQ2LDM3ODQ3LDM3ODY0LDM3ODYxLDM3ODQ4LDM3ODI3LDM3ODUzLDM3ODQwLDM3ODMyLDM3ODYwLDM3OTE0LDM3OTA4LDM3OTA3LDM3ODkxLDM3ODk1LDM3OTA0LDM3OTQyLDM3OTMxLDM3OTQxLDM3OTIxLDM3OTQ2LDM3OTUzLDM3OTcwLDM3OTU2LDM3OTc5LDM3OTg0LDM3OTg2LDM3OTgyLDM3OTk0LDM3NDE3LDM4MDAwLDM4MDA1LDM4MDA3LDM4MDEzLDM3OTc4LDM4MDEyLDM4MDE0LDM4MDE3LDM4MDE1LDM4Mjc0LDM4Mjc5LDM4MjgyLDM4MjkyLDM4Mjk0LDM4Mjk2LDM4Mjk3LDM4MzA0LDM4MzEyLDM4MzExLDM4MzE3LDM4MzMyLDM4MzMxLDM4MzI5LDM4MzM0LDM4MzQ2LDI4NjYyLDM4MzM5LDM4MzQ5LDM4MzQ4LDM4MzU3LDM4MzU2LDM4MzU4LDM4MzY0LDM4MzY5LDM4MzczLDM4MzcwLDM4NDMzLDM4NDQwLDM4NDQ2LDM4NDQ3LDM4NDY2LDM4NDc2LDM4NDc5LDM4NDc1LDM4NTE5LDM4NDkyLDM4NDk0LDM4NDkzLDM4NDk1LDM4NTAyLDM4NTE0LDM4NTA4LDM4NTQxLDM4NTUyLDM4NTQ5LDM4NTUxLDM4NTcwLDM4NTY3LDM4NTc3LDM4NTc4LDM4NTc2LDM4NTgwLDM4NTgyLDM4NTg0LDM4NTg1LDM4NjA2LDM4NjAzLDM4NjAxLDM4NjA1LDM1MTQ5LDM4NjIwLDM4NjY5LDM4NjEzLDM4NjQ5LDM4NjYwLDM4NjYyLDM4NjY0LDM4Njc1LDM4NjcwLDM4NjczLDM4NjcxLDM4Njc4LDM4NjgxLDM4NjkyLDM4Njk4LDM4NzA0LDM4NzEzLDM4NzE3LDM4NzE4LDM4NzI0LDM4NzI2LDM4NzI4LDM4NzIyLDM4NzI5LDM4NzQ4LDM4NzUyLDM4NzU2LDM4NzU4LDM4NzYwLDIxMjAyLDM4NzYzLDM4NzY5LDM4Nzc3LDM4Nzg5LDM4NzgwLDM4Nzg1LDM4Nzc4LDM4NzkwLDM4Nzk1LDM4Nzk5LDM4ODAwLDM4ODEyLDM4ODI0LDM4ODIyLDM4ODE5LDM4ODM1LDM4ODM2LDM4ODUxLDM4ODU0LDM4ODU2LDM4ODU5LDM4ODc2LDM4ODkzLDQwNzgzLDM4ODk4LDMxNDU1LDM4OTAyLDM4OTAxLDM4OTI3LDM4OTI0LDM4OTY4LDM4OTQ4LDM4OTQ1LDM4OTY3LDM4OTczLDM4OTgyLDM4OTkxLDM4OTg3LDM5MDE5LDM5MDIzLDM5MDI0LDM5MDI1LDM5MDI4LDM5MDI3LDM5MDgyLDM5MDg3LDM5MDg5LDM5MDk0LDM5MTA4LDM5MTA3LDM5MTEwLDM5MTQ1LDM5MTQ3LDM5MTcxLDM5MTc3LDM5MTg2LDM5MTg4LDM5MTkyLDM5MjAxLDM5MTk3LDM5MTk4LDM5MjA0LDM5MjAwLDM5MjEyLDM5MjE0LDM5MjI5LDM5MjMwLDM5MjM0LDM5MjQxLDM5MjM3LDM5MjQ4LDM5MjQzLDM5MjQ5LDM5MjUwLDM5MjQ0LDM5MjUzLDM5MzE5LDM5MzIwLDM5MzMzLDM5MzQxLDM5MzQyLDM5MzU2LDM5MzkxLDM5Mzg3LDM5Mzg5LDM5Mzg0LDM5Mzc3LDM5NDA1LDM5NDA2LDM5NDA5LDM5NDEwLDM5NDE5LDM5NDE2LDM5NDI1LDM5NDM5LDM5NDI5LDM5Mzk0LDM5NDQ5LDM5NDY3LDM5NDc5LDM5NDkzLDM5NDkwLDM5NDg4LDM5NDkxLDM5NDg2LDM5NTA5LDM5NTAxLDM5NTE1LDM5NTExLDM5NTE5LDM5NTIyLDM5NTI1LDM5NTI0LDM5NTI5LDM5NTMxLDM5NTMwLDM5NTk3LDM5NjAwLDM5NjEyLDM5NjE2LDM5NjMxLDM5NjMzLDM5NjM1LDM5NjM2LDM5NjQ2LDM5NjQ3LDM5NjUwLDM5NjUxLDM5NjU0LDM5NjYzLDM5NjU5LDM5NjYyLDM5NjY4LDM5NjY1LDM5NjcxLDM5Njc1LDM5Njg2LDM5NzA0LDM5NzA2LDM5NzExLDM5NzE0LDM5NzE1LDM5NzE3LDM5NzE5LDM5NzIwLDM5NzIxLDM5NzIyLDM5NzI2LDM5NzI3LDM5NzMwLDM5NzQ4LDM5NzQ3LDM5NzU5LDM5NzU3LDM5NzU4LDM5NzYxLDM5NzY4LDM5Nzk2LDM5ODI3LDM5ODExLDM5ODI1LDM5ODMwLDM5ODMxLDM5ODM5LDM5ODQwLDM5ODQ4LDM5ODYwLDM5ODcyLDM5ODgyLDM5ODY1LDM5ODc4LDM5ODg3LDM5ODg5LDM5ODkwLDM5OTA3LDM5OTA2LDM5OTA4LDM5ODkyLDM5OTA1LDM5OTk0LDM5OTIyLDM5OTIxLDM5OTIwLDM5OTU3LDM5OTU2LDM5OTQ1LDM5OTU1LDM5OTQ4LDM5OTQyLDM5OTQ0LDM5OTU0LDM5OTQ2LDM5OTQwLDM5OTgyLDM5OTYzLDM5OTczLDM5OTcyLDM5OTY5LDM5OTg0LDQwMDA3LDM5OTg2LDQwMDA2LDM5OTk4LDQwMDI2LDQwMDMyLDQwMDM5LDQwMDU0LDQwMDU2LDQwMTY3LDQwMTcyLDQwMTc2LDQwMjAxLDQwMjAwLDQwMTcxLDQwMTk1LDQwMTk4LDQwMjM0LDQwMjMwLDQwMzY3LDQwMjI3LDQwMjIzLDQwMjYwLDQwMjEzLDQwMjEwLDQwMjU3LDQwMjU1LDQwMjU0LDQwMjYyLDQwMjY0LDQwMjg1LDQwMjg2LDQwMjkyLDQwMjczLDQwMjcyLDQwMjgxLDQwMzA2LDQwMzI5LDQwMzI3LDQwMzYzLDQwMzAzLDQwMzE0LDQwMzQ2LDQwMzU2LDQwMzYxLDQwMzcwLDQwMzg4LDQwMzg1LDQwMzc5LDQwMzc2LDQwMzc4LDQwMzkwLDQwMzk5LDQwMzg2LDQwNDA5LDQwNDAzLDQwNDQwLDQwNDIyLDQwNDI5LDQwNDMxLDQwNDQ1LDQwNDc0LDQwNDc1LDQwNDc4LDQwNTY1LDQwNTY5LDQwNTczLDQwNTc3LDQwNTg0LDQwNTg3LDQwNTg4LDQwNTk0LDQwNTk3LDQwNTkzLDQwNjA1LDQwNjEzLDQwNjE3LDQwNjMyLDQwNjE4LDQwNjIxLDM4NzUzLDQwNjUyLDQwNjU0LDQwNjU1LDQwNjU2LDQwNjYwLDQwNjY4LDQwNjcwLDQwNjY5LDQwNjcyLDQwNjc3LDQwNjgwLDQwNjg3LDQwNjkyLDQwNjk0LDQwNjk1LDQwNjk3LDQwNjk5LDQwNzAwLDQwNzAxLDQwNzExLDQwNzEyLDMwMzkxLDQwNzI1LDQwNzM3LDQwNzQ4LDQwNzY2LDQwNzc4LDQwNzg2LDQwNzg4LDQwODAzLDQwNzk5LDQwODAwLDQwODAxLDQwODA2LDQwODA3LDQwODEyLDQwODEwLDQwODIzLDQwODE4LDQwODIyLDQwODUzLDQwODYwLDQwODY0LDIyNTc1LDI3MDc5LDM2OTUzLDI5Nzk2LDIwOTU2LDI5MDgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjM5NCwzNTEwMCwzNzcwNCwzNzUxMiwzNDAxMiwyMDQyNSwyODg1OSwyNjE2MSwyNjgyNCwzNzYyNSwyNjM2MywyNDM4OSwyMDAwOCwyMDE5MywyMDIyMCwyMDIyNCwyMDIyNywyMDI4MSwyMDMxMCwyMDM3MCwyMDM2MiwyMDM3OCwyMDM3MiwyMDQyOSwyMDU0NCwyMDUxNCwyMDQ3OSwyMDUxMCwyMDU1MCwyMDU5MiwyMDU0NiwyMDYyOCwyMDcyNCwyMDY5NiwyMDgxMCwyMDgzNiwyMDg5MywyMDkyNiwyMDk3MiwyMTAxMywyMTE0OCwyMTE1OCwyMTE4NCwyMTIxMSwyMTI0OCwyMTI1NSwyMTI4NCwyMTM2MiwyMTM5NSwyMTQyNiwyMTQ2OSw2NDAxNCwyMTY2MCwyMTY0MiwyMTY3MywyMTc1OSwyMTg5NCwyMjM2MSwyMjM3MywyMjQ0NCwyMjQ3MiwyMjQ3MSw2NDAxNSw2NDAxNiwyMjY4NiwyMjcwNiwyMjc5NSwyMjg2NywyMjg3NSwyMjg3NywyMjg4MywyMjk0OCwyMjk3MCwyMzM4MiwyMzQ4OCwyOTk5OSwyMzUxMiwyMzUzMiwyMzU4MiwyMzcxOCwyMzczOCwyMzc5NywyMzg0NywyMzg5MSw2NDAxNywyMzg3NCwyMzkxNywyMzk5MiwyMzk5MywyNDAxNiwyNDM1MywyNDM3MiwyNDQyMywyNDUwMywyNDU0MiwyNDY2OSwyNDcwOSwyNDcxNCwyNDc5OCwyNDc4OSwyNDg2NCwyNDgxOCwyNDg0OSwyNDg4NywyNDg4MCwyNDk4NCwyNTEwNywyNTI1NCwyNTU4OSwyNTY5NiwyNTc1NywyNTgwNiwyNTkzNCwyNjExMiwyNjEzMywyNjE3MSwyNjEyMSwyNjE1OCwyNjE0MiwyNjE0OCwyNjIxMywyNjE5OSwyNjIwMSw2NDAxOCwyNjIyNywyNjI2NSwyNjI3MiwyNjI5MCwyNjMwMywyNjM2MiwyNjM4Miw2Mzc4NSwyNjQ3MCwyNjU1NSwyNjcwNiwyNjU2MCwyNjYyNSwyNjY5MiwyNjgzMSw2NDAxOSwyNjk4NCw2NDAyMCwyNzAzMiwyNzEwNiwyNzE4NCwyNzI0MywyNzIwNiwyNzI1MSwyNzI2MiwyNzM2MiwyNzM2NCwyNzYwNiwyNzcxMSwyNzc0MCwyNzc4MiwyNzc1OSwyNzg2NiwyNzkwOCwyODAzOSwyODAxNSwyODA1NCwyODA3NiwyODExMSwyODE1MiwyODE0NiwyODE1NiwyODIxNywyODI1MiwyODE5OSwyODIyMCwyODM1MSwyODU1MiwyODU5NywyODY2MSwyODY3NywyODY3OSwyODcxMiwyODgwNSwyODg0MywyODk0MywyODkzMiwyOTAyMCwyODk5OCwyODk5OSw2NDAyMSwyOTEyMSwyOTE4MiwyOTM2MSwyOTM3NCwyOTQ3Niw2NDAyMiwyOTU1OSwyOTYyOSwyOTY0MSwyOTY1NCwyOTY2NywyOTY1MCwyOTcwMywyOTY4NSwyOTczNCwyOTczOCwyOTczNywyOTc0MiwyOTc5NCwyOTgzMywyOTg1NSwyOTk1MywzMDA2MywzMDMzOCwzMDM2NCwzMDM2NiwzMDM2MywzMDM3NCw2NDAyMywzMDUzNCwyMTE2NywzMDc1MywzMDc5OCwzMDgyMCwzMDg0MiwzMTAyNCw2NDAyNCw2NDAyNSw2NDAyNiwzMTEyNCw2NDAyNywzMTEzMSwzMTQ0MSwzMTQ2Myw2NDAyOCwzMTQ2NywzMTY0Niw2NDAyOSwzMjA3MiwzMjA5MiwzMjE4MywzMjE2MCwzMjIxNCwzMjMzOCwzMjU4MywzMjY3Myw2NDAzMCwzMzUzNywzMzYzNCwzMzY2MywzMzczNSwzMzc4MiwzMzg2NCwzMzk3MiwzNDEzMSwzNDEzNywzNDE1NSw2NDAzMSwzNDIyNCw2NDAzMiw2NDAzMywzNDgyMywzNTA2MSwzNTM0NiwzNTM4MywzNTQ0OSwzNTQ5NSwzNTUxOCwzNTU1MSw2NDAzNCwzNTU3NCwzNTY2NywzNTcxMSwzNjA4MCwzNjA4NCwzNjExNCwzNjIxNCw2NDAzNSwzNjU1OSw2NDAzNiw2NDAzNywzNjk2NywzNzA4Niw2NDAzOCwzNzE0MSwzNzE1OSwzNzMzOCwzNzMzNSwzNzM0MiwzNzM1NywzNzM1OCwzNzM0OCwzNzM0OSwzNzM4MiwzNzM5MiwzNzM4NiwzNzQzNCwzNzQ0MCwzNzQzNiwzNzQ1NCwzNzQ2NSwzNzQ1NywzNzQzMywzNzQ3OSwzNzU0MywzNzQ5NSwzNzQ5NiwzNzYwNywzNzU5MSwzNzU5MywzNzU4NCw2NDAzOSwzNzU4OSwzNzYwMCwzNzU4NywzNzY2OSwzNzY2NSwzNzYyNyw2NDA0MCwzNzY2MiwzNzYzMSwzNzY2MSwzNzYzNCwzNzc0NCwzNzcxOSwzNzc5NiwzNzgzMCwzNzg1NCwzNzg4MCwzNzkzNywzNzk1NywzNzk2MCwzODI5MCw2Mzk2NCw2NDA0MSwzODU1NywzODU3NSwzODcwNywzODcxNSwzODcyMywzODczMywzODczNSwzODczNywzODc0MSwzODk5OSwzOTAxMyw2NDA0Miw2NDA0MywzOTIwNyw2NDA0NCwzOTMyNiwzOTUwMiwzOTY0MSwzOTY0NCwzOTc5NywzOTc5NCwzOTgyMywzOTg1NywzOTg2NywzOTkzNiw0MDMwNCw0MDI5OSw2NDA0NSw0MDQ3Myw0MDY1NyxudWxsLG51bGwsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSw2NTUwNiw2NTUwOCw2NTI4Nyw2NTI4MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1Myw2NTUwNiw2NTUwOCw2NTI4Nyw2NTI4MiwxMjg0OSw4NDcwLDg0ODEsODc1NywzMjM5NCwzNTEwMCwzNzcwNCwzNzUxMiwzNDAxMiwyMDQyNSwyODg1OSwyNjE2MSwyNjgyNCwzNzYyNSwyNjM2MywyNDM4OSwyMDAwOCwyMDE5MywyMDIyMCwyMDIyNCwyMDIyNywyMDI4MSwyMDMxMCwyMDM3MCwyMDM2MiwyMDM3OCwyMDM3MiwyMDQyOSwyMDU0NCwyMDUxNCwyMDQ3OSwyMDUxMCwyMDU1MCwyMDU5MiwyMDU0NiwyMDYyOCwyMDcyNCwyMDY5NiwyMDgxMCwyMDgzNiwyMDg5MywyMDkyNiwyMDk3MiwyMTAxMywyMTE0OCwyMTE1OCwyMTE4NCwyMTIxMSwyMTI0OCwyMTI1NSwyMTI4NCwyMTM2MiwyMTM5NSwyMTQyNiwyMTQ2OSw2NDAxNCwyMTY2MCwyMTY0MiwyMTY3MywyMTc1OSwyMTg5NCwyMjM2MSwyMjM3MywyMjQ0NCwyMjQ3MiwyMjQ3MSw2NDAxNSw2NDAxNiwyMjY4NiwyMjcwNiwyMjc5NSwyMjg2NywyMjg3NSwyMjg3NywyMjg4MywyMjk0OCwyMjk3MCwyMzM4MiwyMzQ4OCwyOTk5OSwyMzUxMiwyMzUzMiwyMzU4MiwyMzcxOCwyMzczOCwyMzc5NywyMzg0NywyMzg5MSw2NDAxNywyMzg3NCwyMzkxNywyMzk5MiwyMzk5MywyNDAxNiwyNDM1MywyNDM3MiwyNDQyMywyNDUwMywyNDU0MiwyNDY2OSwyNDcwOSwyNDcxNCwyNDc5OCwyNDc4OSwyNDg2NCwyNDgxOCwyNDg0OSwyNDg4NywyNDg4MCwyNDk4NCwyNTEwNywyNTI1NCwyNTU4OSwyNTY5NiwyNTc1NywyNTgwNiwyNTkzNCwyNjExMiwyNjEzMywyNjE3MSwyNjEyMSwyNjE1OCwyNjE0MiwyNjE0OCwyNjIxMywyNjE5OSwyNjIwMSw2NDAxOCwyNjIyNywyNjI2NSwyNjI3MiwyNjI5MCwyNjMwMywyNjM2MiwyNjM4Miw2Mzc4NSwyNjQ3MCwyNjU1NSwyNjcwNiwyNjU2MCwyNjYyNSwyNjY5MiwyNjgzMSw2NDAxOSwyNjk4NCw2NDAyMCwyNzAzMiwyNzEwNiwyNzE4NCwyNzI0MywyNzIwNiwyNzI1MSwyNzI2MiwyNzM2MiwyNzM2NCwyNzYwNiwyNzcxMSwyNzc0MCwyNzc4MiwyNzc1OSwyNzg2NiwyNzkwOCwyODAzOSwyODAxNSwyODA1NCwyODA3NiwyODExMSwyODE1MiwyODE0NiwyODE1NiwyODIxNywyODI1MiwyODE5OSwyODIyMCwyODM1MSwyODU1MiwyODU5NywyODY2MSwyODY3NywyODY3OSwyODcxMiwyODgwNSwyODg0MywyODk0MywyODkzMiwyOTAyMCwyODk5OCwyODk5OSw2NDAyMSwyOTEyMSwyOTE4MiwyOTM2MSwyOTM3NCwyOTQ3Niw2NDAyMiwyOTU1OSwyOTYyOSwyOTY0MSwyOTY1NCwyOTY2NywyOTY1MCwyOTcwMywyOTY4NSwyOTczNCwyOTczOCwyOTczNywyOTc0MiwyOTc5NCwyOTgzMywyOTg1NSwyOTk1MywzMDA2MywzMDMzOCwzMDM2NCwzMDM2NiwzMDM2MywzMDM3NCw2NDAyMywzMDUzNCwyMTE2NywzMDc1MywzMDc5OCwzMDgyMCwzMDg0MiwzMTAyNCw2NDAyNCw2NDAyNSw2NDAyNiwzMTEyNCw2NDAyNywzMTEzMSwzMTQ0MSwzMTQ2Myw2NDAyOCwzMTQ2NywzMTY0Niw2NDAyOSwzMjA3MiwzMjA5MiwzMjE4MywzMjE2MCwzMjIxNCwzMjMzOCwzMjU4MywzMjY3Myw2NDAzMCwzMzUzNywzMzYzNCwzMzY2MywzMzczNSwzMzc4MiwzMzg2NCwzMzk3MiwzNDEzMSwzNDEzNywzNDE1NSw2NDAzMSwzNDIyNCw2NDAzMiw2NDAzMywzNDgyMywzNTA2MSwzNTM0NiwzNTM4MywzNTQ0OSwzNTQ5NSwzNTUxOCwzNTU1MSw2NDAzNCwzNTU3NCwzNTY2NywzNTcxMSwzNjA4MCwzNjA4NCwzNjExNCwzNjIxNCw2NDAzNSwzNjU1OSw2NDAzNiw2NDAzNywzNjk2NywzNzA4Niw2NDAzOCwzNzE0MSwzNzE1OSwzNzMzOCwzNzMzNSwzNzM0MiwzNzM1NywzNzM1OCwzNzM0OCwzNzM0OSwzNzM4MiwzNzM5MiwzNzM4NiwzNzQzNCwzNzQ0MCwzNzQzNiwzNzQ1NCwzNzQ2NSwzNzQ1NywzNzQzMywzNzQ3OSwzNzU0MywzNzQ5NSwzNzQ5NiwzNzYwNywzNzU5MSwzNzU5MywzNzU4NCw2NDAzOSwzNzU4OSwzNzYwMCwzNzU4NywzNzY2OSwzNzY2NSwzNzYyNyw2NDA0MCwzNzY2MiwzNzYzMSwzNzY2MSwzNzYzNCwzNzc0NCwzNzcxOSwzNzc5NiwzNzgzMCwzNzg1NCwzNzg4MCwzNzkzNywzNzk1NywzNzk2MCwzODI5MCw2Mzk2NCw2NDA0MSwzODU1NywzODU3NSwzODcwNywzODcxNSwzODcyMywzODczMywzODczNSwzODczNywzODc0MSwzODk5OSwzOTAxMyw2NDA0Miw2NDA0MywzOTIwNyw2NDA0NCwzOTMyNiwzOTUwMiwzOTY0MSwzOTY0NCwzOTc5NywzOTc5NCwzOTgyMywzOTg1NywzOTg2NywzOTkzNiw0MDMwNCw0MDI5OSw2NDA0NSw0MDQ3Myw0MDY1NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFxuICBcImppczAyMTJcIjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNzI4LDcxMSwxODQsNzI5LDczMywxNzUsNzMxLDczMCw2NTM3NCw5MDAsOTAxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNjEsMTY2LDE5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTg2LDE3MCwxNjksMTc0LDg0ODIsMTY0LDg0NzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDkwMiw5MDQsOTA1LDkwNiw5MzgsbnVsbCw5MDgsbnVsbCw5MTAsOTM5LG51bGwsOTExLG51bGwsbnVsbCxudWxsLG51bGwsOTQwLDk0MSw5NDIsOTQzLDk3MCw5MTIsOTcyLDk2Miw5NzMsOTcxLDk0NCw5NzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM4LDEwMzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE4LDExMTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTgsMjcyLG51bGwsMjk0LG51bGwsMzA2LG51bGwsMzIxLDMxOSxudWxsLDMzMCwyMTYsMzM4LG51bGwsMzU4LDIyMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIzMCwyNzMsMjQwLDI5NSwzMDUsMzA3LDMxMiwzMjIsMzIwLDMyOSwzMzEsMjQ4LDMzOSwyMjMsMzU5LDI1NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE5MywxOTIsMTk2LDE5NCwyNTgsNDYxLDI1NiwyNjAsMTk3LDE5NSwyNjIsMjY0LDI2OCwxOTksMjY2LDI3MCwyMDEsMjAwLDIwMywyMDIsMjgyLDI3OCwyNzQsMjgwLG51bGwsMjg0LDI4NiwyOTAsMjg4LDI5MiwyMDUsMjA0LDIwNywyMDYsNDYzLDMwNCwyOTgsMzAyLDI5NiwzMDgsMzEwLDMxMywzMTcsMzE1LDMyMywzMjcsMzI1LDIwOSwyMTEsMjEwLDIxNCwyMTIsNDY1LDMzNiwzMzIsMjEzLDM0MCwzNDQsMzQyLDM0NiwzNDgsMzUyLDM1MCwzNTYsMzU0LDIxOCwyMTcsMjIwLDIxOSwzNjQsNDY3LDM2OCwzNjIsMzcwLDM2NiwzNjAsNDcxLDQ3NSw0NzMsNDY5LDM3MiwyMjEsMzc2LDM3NCwzNzcsMzgxLDM3OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIyNSwyMjQsMjI4LDIyNiwyNTksNDYyLDI1NywyNjEsMjI5LDIyNywyNjMsMjY1LDI2OSwyMzEsMjY3LDI3MSwyMzMsMjMyLDIzNSwyMzQsMjgzLDI3OSwyNzUsMjgxLDUwMSwyODUsMjg3LG51bGwsMjg5LDI5MywyMzcsMjM2LDIzOSwyMzgsNDY0LG51bGwsMjk5LDMwMywyOTcsMzA5LDMxMSwzMTQsMzE4LDMxNiwzMjQsMzI4LDMyNiwyNDEsMjQzLDI0MiwyNDYsMjQ0LDQ2NiwzMzcsMzMzLDI0NSwzNDEsMzQ1LDM0MywzNDcsMzQ5LDM1MywzNTEsMzU3LDM1NSwyNTAsMjQ5LDI1MiwyNTEsMzY1LDQ2OCwzNjksMzYzLDM3MSwzNjcsMzYxLDQ3Miw0NzYsNDc0LDQ3MCwzNzMsMjUzLDI1NSwzNzUsMzc4LDM4MiwzODAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE5OTcwLDE5OTcyLDE5OTczLDE5OTgwLDE5OTg2LDE5OTk5LDIwMDAzLDIwMDA0LDIwMDA4LDIwMDExLDIwMDE0LDIwMDE1LDIwMDE2LDIwMDIxLDIwMDMyLDIwMDMzLDIwMDM2LDIwMDM5LDIwMDQ5LDIwMDU4LDIwMDYwLDIwMDY3LDIwMDcyLDIwMDczLDIwMDg0LDIwMDg1LDIwMDg5LDIwMDk1LDIwMTA5LDIwMTE4LDIwMTE5LDIwMTI1LDIwMTQzLDIwMTUzLDIwMTYzLDIwMTc2LDIwMTg2LDIwMTg3LDIwMTkyLDIwMTkzLDIwMTk0LDIwMjAwLDIwMjA3LDIwMjA5LDIwMjExLDIwMjEzLDIwMjIxLDIwMjIyLDIwMjIzLDIwMjI0LDIwMjI2LDIwMjI3LDIwMjMyLDIwMjM1LDIwMjM2LDIwMjQyLDIwMjQ1LDIwMjQ2LDIwMjQ3LDIwMjQ5LDIwMjcwLDIwMjczLDIwMzIwLDIwMjc1LDIwMjc3LDIwMjc5LDIwMjgxLDIwMjgzLDIwMjg2LDIwMjg4LDIwMjkwLDIwMjk2LDIwMjk3LDIwMjk5LDIwMzAwLDIwMzA2LDIwMzA4LDIwMzEwLDIwMzEyLDIwMzE5LDIwMzIzLDIwMzMwLDIwMzMyLDIwMzM0LDIwMzM3LDIwMzQzLDIwMzQ0LDIwMzQ1LDIwMzQ2LDIwMzQ5LDIwMzUwLDIwMzUzLDIwMzU0LDIwMzU2LDIwMzU3LDIwMzYxLDIwMzYyLDIwMzY0LDIwMzY2LDIwMzY4LDIwMzcwLDIwMzcxLDIwMzcyLDIwMzc1LDIwMzc3LDIwMzc4LDIwMzgyLDIwMzgzLDIwNDAyLDIwNDA3LDIwNDA5LDIwNDExLDIwNDEyLDIwNDEzLDIwNDE0LDIwNDE2LDIwNDE3LDIwNDIxLDIwNDIyLDIwNDI0LDIwNDI1LDIwNDI3LDIwNDI4LDIwNDI5LDIwNDMxLDIwNDM0LDIwNDQ0LDIwNDQ4LDIwNDUwLDIwNDY0LDIwNDY2LDIwNDc2LDIwNDc3LDIwNDc5LDIwNDgwLDIwNDgxLDIwNDg0LDIwNDg3LDIwNDkwLDIwNDkyLDIwNDk0LDIwNDk2LDIwNDk5LDIwNTAzLDIwNTA0LDIwNTA3LDIwNTA4LDIwNTA5LDIwNTEwLDIwNTE0LDIwNTE5LDIwNTI2LDIwNTI4LDIwNTMwLDIwNTMxLDIwNTMzLDIwNTQ0LDIwNTQ1LDIwNTQ2LDIwNTQ5LDIwNTUwLDIwNTU0LDIwNTU2LDIwNTU4LDIwNTYxLDIwNTYyLDIwNTYzLDIwNTY3LDIwNTY5LDIwNTc1LDIwNTc2LDIwNTc4LDIwNTc5LDIwNTgyLDIwNTgzLDIwNTg2LDIwNTg5LDIwNTkyLDIwNTkzLDIwNTM5LDIwNjA5LDIwNjExLDIwNjEyLDIwNjE0LDIwNjE4LDIwNjIyLDIwNjIzLDIwNjI0LDIwNjI2LDIwNjI3LDIwNjI4LDIwNjMwLDIwNjM1LDIwNjM2LDIwNjM4LDIwNjM5LDIwNjQwLDIwNjQxLDIwNjQyLDIwNjUwLDIwNjU1LDIwNjU2LDIwNjY1LDIwNjY2LDIwNjY5LDIwNjcyLDIwNjc1LDIwNjc2LDIwNjc5LDIwNjg0LDIwNjg2LDIwNjg4LDIwNjkxLDIwNjkyLDIwNjk2LDIwNzAwLDIwNzAxLDIwNzAzLDIwNzA2LDIwNzA4LDIwNzEwLDIwNzEyLDIwNzEzLDIwNzE5LDIwNzIxLDIwNzI2LDIwNzMwLDIwNzM0LDIwNzM5LDIwNzQyLDIwNzQzLDIwNzQ0LDIwNzQ3LDIwNzQ4LDIwNzQ5LDIwNzUwLDIwNzIyLDIwNzUyLDIwNzU5LDIwNzYxLDIwNzYzLDIwNzY0LDIwNzY1LDIwNzY2LDIwNzcxLDIwNzc1LDIwNzc2LDIwNzgwLDIwNzgxLDIwNzgzLDIwNzg1LDIwNzg3LDIwNzg4LDIwNzg5LDIwNzkyLDIwNzkzLDIwODAyLDIwODEwLDIwODE1LDIwODE5LDIwODIxLDIwODIzLDIwODI0LDIwODMxLDIwODM2LDIwODM4LDIwODYyLDIwODY3LDIwODY4LDIwODc1LDIwODc4LDIwODg4LDIwODkzLDIwODk3LDIwODk5LDIwOTA5LDIwOTIwLDIwOTIyLDIwOTI0LDIwOTI2LDIwOTI3LDIwOTMwLDIwOTM2LDIwOTQzLDIwOTQ1LDIwOTQ2LDIwOTQ3LDIwOTQ5LDIwOTUyLDIwOTU4LDIwOTYyLDIwOTY1LDIwOTc0LDIwOTc4LDIwOTc5LDIwOTgwLDIwOTgzLDIwOTkzLDIwOTk0LDIwOTk3LDIxMDEwLDIxMDExLDIxMDEzLDIxMDE0LDIxMDE2LDIxMDI2LDIxMDMyLDIxMDQxLDIxMDQyLDIxMDQ1LDIxMDUyLDIxMDYxLDIxMDY1LDIxMDc3LDIxMDc5LDIxMDgwLDIxMDgyLDIxMDg0LDIxMDg3LDIxMDg4LDIxMDg5LDIxMDk0LDIxMTAyLDIxMTExLDIxMTEyLDIxMTEzLDIxMTIwLDIxMTIyLDIxMTI1LDIxMTMwLDIxMTMyLDIxMTM5LDIxMTQxLDIxMTQyLDIxMTQzLDIxMTQ0LDIxMTQ2LDIxMTQ4LDIxMTU2LDIxMTU3LDIxMTU4LDIxMTU5LDIxMTY3LDIxMTY4LDIxMTc0LDIxMTc1LDIxMTc2LDIxMTc4LDIxMTc5LDIxMTgxLDIxMTg0LDIxMTg4LDIxMTkwLDIxMTkyLDIxMTk2LDIxMTk5LDIxMjAxLDIxMjA0LDIxMjA2LDIxMjExLDIxMjEyLDIxMjE3LDIxMjIxLDIxMjI0LDIxMjI1LDIxMjI2LDIxMjI4LDIxMjMyLDIxMjMzLDIxMjM2LDIxMjM4LDIxMjM5LDIxMjQ4LDIxMjUxLDIxMjU4LDIxMjU5LDIxMjYwLDIxMjY1LDIxMjY3LDIxMjcyLDIxMjc1LDIxMjc2LDIxMjc4LDIxMjc5LDIxMjg1LDIxMjg3LDIxMjg4LDIxMjg5LDIxMjkxLDIxMjkyLDIxMjkzLDIxMjk2LDIxMjk4LDIxMzAxLDIxMzA4LDIxMzA5LDIxMzEwLDIxMzE0LDIxMzI0LDIxMzIzLDIxMzM3LDIxMzM5LDIxMzQ1LDIxMzQ3LDIxMzQ5LDIxMzU2LDIxMzU3LDIxMzYyLDIxMzY5LDIxMzc0LDIxMzc5LDIxMzgzLDIxMzg0LDIxMzkwLDIxMzk1LDIxMzk2LDIxNDAxLDIxNDA1LDIxNDA5LDIxNDEyLDIxNDE4LDIxNDE5LDIxNDIzLDIxNDI2LDIxNDI4LDIxNDI5LDIxNDMxLDIxNDMyLDIxNDM0LDIxNDM3LDIxNDQwLDIxNDQ1LDIxNDU1LDIxNDU4LDIxNDU5LDIxNDYxLDIxNDY2LDIxNDY5LDIxNDcwLDIxNDcyLDIxNDc4LDIxNDc5LDIxNDkzLDIxNTA2LDIxNTIzLDIxNTMwLDIxNTM3LDIxNTQzLDIxNTQ0LDIxNTQ2LDIxNTUxLDIxNTUzLDIxNTU2LDIxNTU3LDIxNTcxLDIxNTcyLDIxNTc1LDIxNTgxLDIxNTgzLDIxNTk4LDIxNjAyLDIxNjA0LDIxNjA2LDIxNjA3LDIxNjA5LDIxNjExLDIxNjEzLDIxNjE0LDIxNjIwLDIxNjMxLDIxNjMzLDIxNjM1LDIxNjM3LDIxNjQwLDIxNjQxLDIxNjQ1LDIxNjQ5LDIxNjUzLDIxNjU0LDIxNjYwLDIxNjYzLDIxNjY1LDIxNjcwLDIxNjcxLDIxNjczLDIxNjc0LDIxNjc3LDIxNjc4LDIxNjgxLDIxNjg3LDIxNjg5LDIxNjkwLDIxNjkxLDIxNjk1LDIxNzAyLDIxNzA2LDIxNzA5LDIxNzEwLDIxNzI4LDIxNzM4LDIxNzQwLDIxNzQzLDIxNzUwLDIxNzU2LDIxNzU4LDIxNzU5LDIxNzYwLDIxNzYxLDIxNzY1LDIxNzY4LDIxNzY5LDIxNzcyLDIxNzczLDIxNzc0LDIxNzgxLDIxODAyLDIxODAzLDIxODEwLDIxODEzLDIxODE0LDIxODE5LDIxODIwLDIxODIxLDIxODI1LDIxODMxLDIxODMzLDIxODM0LDIxODM3LDIxODQwLDIxODQxLDIxODQ4LDIxODUwLDIxODUxLDIxODU0LDIxODU2LDIxODU3LDIxODYwLDIxODYyLDIxODg3LDIxODg5LDIxODkwLDIxODk0LDIxODk2LDIxOTAyLDIxOTAzLDIxOTA1LDIxOTA2LDIxOTA3LDIxOTA4LDIxOTExLDIxOTIzLDIxOTI0LDIxOTMzLDIxOTM4LDIxOTUxLDIxOTUzLDIxOTU1LDIxOTU4LDIxOTYxLDIxOTYzLDIxOTY0LDIxOTY2LDIxOTY5LDIxOTcwLDIxOTcxLDIxOTc1LDIxOTc2LDIxOTc5LDIxOTgyLDIxOTg2LDIxOTkzLDIyMDA2LDIyMDE1LDIyMDIxLDIyMDI0LDIyMDI2LDIyMDI5LDIyMDMwLDIyMDMxLDIyMDMyLDIyMDMzLDIyMDM0LDIyMDQxLDIyMDYwLDIyMDY0LDIyMDY3LDIyMDY5LDIyMDcxLDIyMDczLDIyMDc1LDIyMDc2LDIyMDc3LDIyMDc5LDIyMDgwLDIyMDgxLDIyMDgzLDIyMDg0LDIyMDg2LDIyMDg5LDIyMDkxLDIyMDkzLDIyMDk1LDIyMTAwLDIyMTEwLDIyMTEyLDIyMTEzLDIyMTE0LDIyMTE1LDIyMTE4LDIyMTIxLDIyMTI1LDIyMTI3LDIyMTI5LDIyMTMwLDIyMTMzLDIyMTQ4LDIyMTQ5LDIyMTUyLDIyMTU1LDIyMTU2LDIyMTY1LDIyMTY5LDIyMTcwLDIyMTczLDIyMTc0LDIyMTc1LDIyMTgyLDIyMTgzLDIyMTg0LDIyMTg1LDIyMTg3LDIyMTg4LDIyMTg5LDIyMTkzLDIyMTk1LDIyMTk5LDIyMjA2LDIyMjEzLDIyMjE3LDIyMjE4LDIyMjE5LDIyMjIzLDIyMjI0LDIyMjIwLDIyMjIxLDIyMjMzLDIyMjM2LDIyMjM3LDIyMjM5LDIyMjQxLDIyMjQ0LDIyMjQ1LDIyMjQ2LDIyMjQ3LDIyMjQ4LDIyMjU3LDIyMjUxLDIyMjUzLDIyMjYyLDIyMjYzLDIyMjczLDIyMjc0LDIyMjc5LDIyMjgyLDIyMjg0LDIyMjg5LDIyMjkzLDIyMjk4LDIyMjk5LDIyMzAxLDIyMzA0LDIyMzA2LDIyMzA3LDIyMzA4LDIyMzA5LDIyMzEzLDIyMzE0LDIyMzE2LDIyMzE4LDIyMzE5LDIyMzIzLDIyMzI0LDIyMzMzLDIyMzM0LDIyMzM1LDIyMzQxLDIyMzQyLDIyMzQ4LDIyMzQ5LDIyMzU0LDIyMzcwLDIyMzczLDIyMzc1LDIyMzc2LDIyMzc5LDIyMzgxLDIyMzgyLDIyMzgzLDIyMzg0LDIyMzg1LDIyMzg3LDIyMzg4LDIyMzg5LDIyMzkxLDIyMzkzLDIyMzk0LDIyMzk1LDIyMzk2LDIyMzk4LDIyNDAxLDIyNDAzLDIyNDEyLDIyNDIwLDIyNDIzLDIyNDI1LDIyNDI2LDIyNDI4LDIyNDI5LDIyNDMwLDIyNDMxLDIyNDMzLDIyNDIxLDIyNDM5LDIyNDQwLDIyNDQxLDIyNDQ0LDIyNDU2LDIyNDYxLDIyNDcxLDIyNDcyLDIyNDc2LDIyNDc5LDIyNDg1LDIyNDkzLDIyNDk0LDIyNTAwLDIyNTAyLDIyNTAzLDIyNTA1LDIyNTA5LDIyNTEyLDIyNTE3LDIyNTE4LDIyNTIwLDIyNTI1LDIyNTI2LDIyNTI3LDIyNTMxLDIyNTMyLDIyNTM2LDIyNTM3LDIyNDk3LDIyNTQwLDIyNTQxLDIyNTU1LDIyNTU4LDIyNTU5LDIyNTYwLDIyNTY2LDIyNTY3LDIyNTczLDIyNTc4LDIyNTg1LDIyNTkxLDIyNjAxLDIyNjA0LDIyNjA1LDIyNjA3LDIyNjA4LDIyNjEzLDIyNjIzLDIyNjI1LDIyNjI4LDIyNjMxLDIyNjMyLDIyNjQ4LDIyNjUyLDIyNjU1LDIyNjU2LDIyNjU3LDIyNjYzLDIyNjY0LDIyNjY1LDIyNjY2LDIyNjY4LDIyNjY5LDIyNjcxLDIyNjcyLDIyNjc2LDIyNjc4LDIyNjg1LDIyNjg4LDIyNjg5LDIyNjkwLDIyNjk0LDIyNjk3LDIyNzA1LDIyNzA2LDIyNzI0LDIyNzE2LDIyNzIyLDIyNzI4LDIyNzMzLDIyNzM0LDIyNzM2LDIyNzM4LDIyNzQwLDIyNzQyLDIyNzQ2LDIyNzQ5LDIyNzUzLDIyNzU0LDIyNzYxLDIyNzcxLDIyNzg5LDIyNzkwLDIyNzk1LDIyNzk2LDIyODAyLDIyODAzLDIyODA0LDM0MzY5LDIyODEzLDIyODE3LDIyODE5LDIyODIwLDIyODI0LDIyODMxLDIyODMyLDIyODM1LDIyODM3LDIyODM4LDIyODQ3LDIyODUxLDIyODU0LDIyODY2LDIyODY3LDIyODczLDIyODc1LDIyODc3LDIyODc4LDIyODc5LDIyODgxLDIyODgzLDIyODkxLDIyODkzLDIyODk1LDIyODk4LDIyOTAxLDIyOTAyLDIyOTA1LDIyOTA3LDIyOTA4LDIyOTIzLDIyOTI0LDIyOTI2LDIyOTMwLDIyOTMzLDIyOTM1LDIyOTQzLDIyOTQ4LDIyOTUxLDIyOTU3LDIyOTU4LDIyOTU5LDIyOTYwLDIyOTYzLDIyOTY3LDIyOTcwLDIyOTcyLDIyOTc3LDIyOTc5LDIyOTgwLDIyOTg0LDIyOTg2LDIyOTg5LDIyOTk0LDIzMDA1LDIzMDA2LDIzMDA3LDIzMDExLDIzMDEyLDIzMDE1LDIzMDIyLDIzMDIzLDIzMDI1LDIzMDI2LDIzMDI4LDIzMDMxLDIzMDQwLDIzMDQ0LDIzMDUyLDIzMDUzLDIzMDU0LDIzMDU4LDIzMDU5LDIzMDcwLDIzMDc1LDIzMDc2LDIzMDc5LDIzMDgwLDIzMDgyLDIzMDg1LDIzMDg4LDIzMTA4LDIzMTA5LDIzMTExLDIzMTEyLDIzMTE2LDIzMTIwLDIzMTI1LDIzMTM0LDIzMTM5LDIzMTQxLDIzMTQzLDIzMTQ5LDIzMTU5LDIzMTYyLDIzMTYzLDIzMTY2LDIzMTc5LDIzMTg0LDIzMTg3LDIzMTkwLDIzMTkzLDIzMTk2LDIzMTk4LDIzMTk5LDIzMjAwLDIzMjAyLDIzMjA3LDIzMjEyLDIzMjE3LDIzMjE4LDIzMjE5LDIzMjIxLDIzMjI0LDIzMjI2LDIzMjI3LDIzMjMxLDIzMjM2LDIzMjM4LDIzMjQwLDIzMjQ3LDIzMjU4LDIzMjYwLDIzMjY0LDIzMjY5LDIzMjc0LDIzMjc4LDIzMjg1LDIzMjg2LDIzMjkzLDIzMjk2LDIzMjk3LDIzMzA0LDIzMzE5LDIzMzQ4LDIzMzIxLDIzMzIzLDIzMzI1LDIzMzI5LDIzMzMzLDIzMzQxLDIzMzUyLDIzMzYxLDIzMzcxLDIzMzcyLDIzMzc4LDIzMzgyLDIzMzkwLDIzNDAwLDIzNDA2LDIzNDA3LDIzNDIwLDIzNDIxLDIzNDIyLDIzNDIzLDIzNDI1LDIzNDI4LDIzNDMwLDIzNDM0LDIzNDM4LDIzNDQwLDIzNDQxLDIzNDQzLDIzNDQ0LDIzNDQ2LDIzNDY0LDIzNDY1LDIzNDY4LDIzNDY5LDIzNDcxLDIzNDczLDIzNDc0LDIzNDc5LDIzNDgyLDIzNDg0LDIzNDg4LDIzNDg5LDIzNTAxLDIzNTAzLDIzNTEwLDIzNTExLDIzNTEyLDIzNTEzLDIzNTE0LDIzNTIwLDIzNTM1LDIzNTM3LDIzNTQwLDIzNTQ5LDIzNTY0LDIzNTc1LDIzNTgyLDIzNTgzLDIzNTg3LDIzNTkwLDIzNTkzLDIzNTk1LDIzNTk2LDIzNTk4LDIzNjAwLDIzNjAyLDIzNjA1LDIzNjA2LDIzNjQxLDIzNjQyLDIzNjQ0LDIzNjUwLDIzNjUxLDIzNjU1LDIzNjU2LDIzNjU3LDIzNjYxLDIzNjY0LDIzNjY4LDIzNjY5LDIzNjc0LDIzNjc1LDIzNjc2LDIzNjc3LDIzNjg3LDIzNjg4LDIzNjkwLDIzNjk1LDIzNjk4LDIzNzA5LDIzNzExLDIzNzEyLDIzNzE0LDIzNzE1LDIzNzE4LDIzNzIyLDIzNzMwLDIzNzMyLDIzNzMzLDIzNzM4LDIzNzUzLDIzNzU1LDIzNzYyLDIzNzczLDIzNzY3LDIzNzkwLDIzNzkzLDIzNzk0LDIzNzk2LDIzODA5LDIzODE0LDIzODIxLDIzODI2LDIzODUxLDIzODQzLDIzODQ0LDIzODQ2LDIzODQ3LDIzODU3LDIzODYwLDIzODY1LDIzODY5LDIzODcxLDIzODc0LDIzODc1LDIzODc4LDIzODgwLDIzODkzLDIzODg5LDIzODk3LDIzODgyLDIzOTAzLDIzOTA0LDIzOTA1LDIzOTA2LDIzOTA4LDIzOTE0LDIzOTE3LDIzOTIwLDIzOTI5LDIzOTMwLDIzOTM0LDIzOTM1LDIzOTM3LDIzOTM5LDIzOTQ0LDIzOTQ2LDIzOTU0LDIzOTU1LDIzOTU2LDIzOTU3LDIzOTYxLDIzOTYzLDIzOTY3LDIzOTY4LDIzOTc1LDIzOTc5LDIzOTg0LDIzOTg4LDIzOTkyLDIzOTkzLDI0MDAzLDI0MDA3LDI0MDExLDI0MDE2LDI0MDE0LDI0MDI0LDI0MDI1LDI0MDMyLDI0MDM2LDI0MDQxLDI0MDU2LDI0MDU3LDI0MDY0LDI0MDcxLDI0MDc3LDI0MDgyLDI0MDg0LDI0MDg1LDI0MDg4LDI0MDk1LDI0MDk2LDI0MTEwLDI0MTA0LDI0MTE0LDI0MTE3LDI0MTI2LDI0MTM5LDI0MTQ0LDI0MTM3LDI0MTQ1LDI0MTUwLDI0MTUyLDI0MTU1LDI0MTU2LDI0MTU4LDI0MTY4LDI0MTcwLDI0MTcxLDI0MTcyLDI0MTczLDI0MTc0LDI0MTc2LDI0MTkyLDI0MjAzLDI0MjA2LDI0MjI2LDI0MjI4LDI0MjI5LDI0MjMyLDI0MjM0LDI0MjM2LDI0MjQxLDI0MjQzLDI0MjUzLDI0MjU0LDI0MjU1LDI0MjYyLDI0MjY4LDI0MjY3LDI0MjcwLDI0MjczLDI0Mjc0LDI0Mjc2LDI0Mjc3LDI0Mjg0LDI0Mjg2LDI0MjkzLDI0Mjk5LDI0MzIyLDI0MzI2LDI0MzI3LDI0MzI4LDI0MzM0LDI0MzQ1LDI0MzQ4LDI0MzQ5LDI0MzUzLDI0MzU0LDI0MzU1LDI0MzU2LDI0MzYwLDI0MzYzLDI0MzY0LDI0MzY2LDI0MzY4LDI0MzcyLDI0Mzc0LDI0Mzc5LDI0MzgxLDI0MzgzLDI0Mzg0LDI0Mzg4LDI0Mzg5LDI0MzkxLDI0Mzk3LDI0NDAwLDI0NDA0LDI0NDA4LDI0NDExLDI0NDE2LDI0NDE5LDI0NDIwLDI0NDIzLDI0NDMxLDI0NDM0LDI0NDM2LDI0NDM3LDI0NDQwLDI0NDQyLDI0NDQ1LDI0NDQ2LDI0NDU3LDI0NDYxLDI0NDYzLDI0NDcwLDI0NDc2LDI0NDc3LDI0NDgyLDI0NDg3LDI0NDkxLDI0NDg0LDI0NDkyLDI0NDk1LDI0NDk2LDI0NDk3LDI0NTA0LDI0NTE2LDI0NTE5LDI0NTIwLDI0NTIxLDI0NTIzLDI0NTI4LDI0NTI5LDI0NTMwLDI0NTMxLDI0NTMyLDI0NTQyLDI0NTQ1LDI0NTQ2LDI0NTUyLDI0NTUzLDI0NTU0LDI0NTU2LDI0NTU3LDI0NTU4LDI0NTU5LDI0NTYyLDI0NTYzLDI0NTY2LDI0NTcwLDI0NTcyLDI0NTgzLDI0NTg2LDI0NTg5LDI0NTk1LDI0NTk2LDI0NTk5LDI0NjAwLDI0NjAyLDI0NjA3LDI0NjEyLDI0NjIxLDI0NjI3LDI0NjI5LDI0NjQwLDI0NjQ3LDI0NjQ4LDI0NjQ5LDI0NjUyLDI0NjU3LDI0NjYwLDI0NjYyLDI0NjYzLDI0NjY5LDI0NjczLDI0Njc5LDI0Njg5LDI0NzAyLDI0NzAzLDI0NzA2LDI0NzEwLDI0NzEyLDI0NzE0LDI0NzE4LDI0NzIxLDI0NzIzLDI0NzI1LDI0NzI4LDI0NzMzLDI0NzM0LDI0NzM4LDI0NzQwLDI0NzQxLDI0NzQ0LDI0NzUyLDI0NzUzLDI0NzU5LDI0NzYzLDI0NzY2LDI0NzcwLDI0NzcyLDI0Nzc2LDI0Nzc3LDI0Nzc4LDI0Nzc5LDI0NzgyLDI0NzgzLDI0Nzg4LDI0Nzg5LDI0NzkzLDI0Nzk1LDI0Nzk3LDI0Nzk4LDI0ODAyLDI0ODA1LDI0ODE4LDI0ODIxLDI0ODI0LDI0ODI4LDI0ODI5LDI0ODM0LDI0ODM5LDI0ODQyLDI0ODQ0LDI0ODQ4LDI0ODQ5LDI0ODUwLDI0ODUxLDI0ODUyLDI0ODU0LDI0ODU1LDI0ODU3LDI0ODYwLDI0ODYyLDI0ODY2LDI0ODc0LDI0ODc1LDI0ODgwLDI0ODgxLDI0ODg1LDI0ODg2LDI0ODg3LDI0ODg5LDI0ODk3LDI0OTAxLDI0OTAyLDI0OTA1LDI0OTI2LDI0OTI4LDI0OTQwLDI0OTQ2LDI0OTUyLDI0OTU1LDI0OTU2LDI0OTU5LDI0OTYwLDI0OTYxLDI0OTYzLDI0OTY0LDI0OTcxLDI0OTczLDI0OTc4LDI0OTc5LDI0OTgzLDI0OTg0LDI0OTg4LDI0OTg5LDI0OTkxLDI0OTkyLDI0OTk3LDI1MDAwLDI1MDAyLDI1MDA1LDI1MDE2LDI1MDE3LDI1MDIwLDI1MDI0LDI1MDI1LDI1MDI2LDI1MDM4LDI1MDM5LDI1MDQ1LDI1MDUyLDI1MDUzLDI1MDU0LDI1MDU1LDI1MDU3LDI1MDU4LDI1MDYzLDI1MDY1LDI1MDYxLDI1MDY4LDI1MDY5LDI1MDcxLDI1MDg5LDI1MDkxLDI1MDkyLDI1MDk1LDI1MTA3LDI1MTA5LDI1MTE2LDI1MTIwLDI1MTIyLDI1MTIzLDI1MTI3LDI1MTI5LDI1MTMxLDI1MTQ1LDI1MTQ5LDI1MTU0LDI1MTU1LDI1MTU2LDI1MTU4LDI1MTY0LDI1MTY4LDI1MTY5LDI1MTcwLDI1MTcyLDI1MTc0LDI1MTc4LDI1MTgwLDI1MTg4LDI1MTk3LDI1MTk5LDI1MjAzLDI1MjEwLDI1MjEzLDI1MjI5LDI1MjMwLDI1MjMxLDI1MjMyLDI1MjU0LDI1MjU2LDI1MjY3LDI1MjcwLDI1MjcxLDI1Mjc0LDI1Mjc4LDI1Mjc5LDI1Mjg0LDI1Mjk0LDI1MzAxLDI1MzAyLDI1MzA2LDI1MzIyLDI1MzMwLDI1MzMyLDI1MzQwLDI1MzQxLDI1MzQ3LDI1MzQ4LDI1MzU0LDI1MzU1LDI1MzU3LDI1MzYwLDI1MzYzLDI1MzY2LDI1MzY4LDI1Mzg1LDI1Mzg2LDI1Mzg5LDI1Mzk3LDI1Mzk4LDI1NDAxLDI1NDA0LDI1NDA5LDI1NDEwLDI1NDExLDI1NDEyLDI1NDE0LDI1NDE4LDI1NDE5LDI1NDIyLDI1NDI2LDI1NDI3LDI1NDI4LDI1NDMyLDI1NDM1LDI1NDQ1LDI1NDQ2LDI1NDUyLDI1NDUzLDI1NDU3LDI1NDYwLDI1NDYxLDI1NDY0LDI1NDY4LDI1NDY5LDI1NDcxLDI1NDc0LDI1NDc2LDI1NDc5LDI1NDgyLDI1NDg4LDI1NDkyLDI1NDkzLDI1NDk3LDI1NDk4LDI1NTAyLDI1NTA4LDI1NTEwLDI1NTE3LDI1NTE4LDI1NTE5LDI1NTMzLDI1NTM3LDI1NTQxLDI1NTQ0LDI1NTUwLDI1NTUzLDI1NTU1LDI1NTU2LDI1NTU3LDI1NTY0LDI1NTY4LDI1NTczLDI1NTc4LDI1NTgwLDI1NTg2LDI1NTg3LDI1NTg5LDI1NTkyLDI1NTkzLDI1NjA5LDI1NjEwLDI1NjE2LDI1NjE4LDI1NjIwLDI1NjI0LDI1NjMwLDI1NjMyLDI1NjM0LDI1NjM2LDI1NjM3LDI1NjQxLDI1NjQyLDI1NjQ3LDI1NjQ4LDI1NjUzLDI1NjYxLDI1NjYzLDI1Njc1LDI1Njc5LDI1NjgxLDI1NjgyLDI1NjgzLDI1Njg0LDI1NjkwLDI1NjkxLDI1NjkyLDI1NjkzLDI1Njk1LDI1Njk2LDI1Njk3LDI1Njk5LDI1NzA5LDI1NzE1LDI1NzE2LDI1NzIzLDI1NzI1LDI1NzMzLDI1NzM1LDI1NzQzLDI1NzQ0LDI1NzQ1LDI1NzUyLDI1NzUzLDI1NzU1LDI1NzU3LDI1NzU5LDI1NzYxLDI1NzYzLDI1NzY2LDI1NzY4LDI1NzcyLDI1Nzc5LDI1Nzg5LDI1NzkwLDI1NzkxLDI1Nzk2LDI1ODAxLDI1ODAyLDI1ODAzLDI1ODA0LDI1ODA2LDI1ODA4LDI1ODA5LDI1ODEzLDI1ODE1LDI1ODI4LDI1ODI5LDI1ODMzLDI1ODM0LDI1ODM3LDI1ODQwLDI1ODQ1LDI1ODQ3LDI1ODUxLDI1ODU1LDI1ODU3LDI1ODYwLDI1ODY0LDI1ODY1LDI1ODY2LDI1ODcxLDI1ODc1LDI1ODc2LDI1ODc4LDI1ODgxLDI1ODgzLDI1ODg2LDI1ODg3LDI1ODkwLDI1ODk0LDI1ODk3LDI1OTAyLDI1OTA1LDI1OTE0LDI1OTE2LDI1OTE3LDI1OTIzLDI1OTI3LDI1OTI5LDI1OTM2LDI1OTM4LDI1OTQwLDI1OTUxLDI1OTUyLDI1OTU5LDI1OTYzLDI1OTc4LDI1OTgxLDI1OTg1LDI1OTg5LDI1OTk0LDI2MDAyLDI2MDA1LDI2MDA4LDI2MDEzLDI2MDE2LDI2MDE5LDI2MDIyLDI2MDMwLDI2MDM0LDI2MDM1LDI2MDM2LDI2MDQ3LDI2MDUwLDI2MDU2LDI2MDU3LDI2MDYyLDI2MDY0LDI2MDY4LDI2MDcwLDI2MDcyLDI2MDc5LDI2MDk2LDI2MDk4LDI2MTAwLDI2MTAxLDI2MTA1LDI2MTEwLDI2MTExLDI2MTEyLDI2MTE2LDI2MTIwLDI2MTIxLDI2MTI1LDI2MTI5LDI2MTMwLDI2MTMzLDI2MTM0LDI2MTQxLDI2MTQyLDI2MTQ1LDI2MTQ2LDI2MTQ3LDI2MTQ4LDI2MTUwLDI2MTUzLDI2MTU0LDI2MTU1LDI2MTU2LDI2MTU4LDI2MTYwLDI2MTYxLDI2MTYzLDI2MTY5LDI2MTY3LDI2MTc2LDI2MTgxLDI2MTgyLDI2MTg2LDI2MTg4LDI2MTkzLDI2MTkwLDI2MTk5LDI2MjAwLDI2MjAxLDI2MjAzLDI2MjA0LDI2MjA4LDI2MjA5LDI2MzYzLDI2MjE4LDI2MjE5LDI2MjIwLDI2MjM4LDI2MjI3LDI2MjI5LDI2MjM5LDI2MjMxLDI2MjMyLDI2MjMzLDI2MjM1LDI2MjQwLDI2MjM2LDI2MjUxLDI2MjUyLDI2MjUzLDI2MjU2LDI2MjU4LDI2MjY1LDI2MjY2LDI2MjY3LDI2MjY4LDI2MjcxLDI2MjcyLDI2Mjc2LDI2Mjg1LDI2Mjg5LDI2MjkwLDI2MjkzLDI2Mjk5LDI2MzAzLDI2MzA0LDI2MzA2LDI2MzA3LDI2MzEyLDI2MzE2LDI2MzE4LDI2MzE5LDI2MzI0LDI2MzMxLDI2MzM1LDI2MzQ0LDI2MzQ3LDI2MzQ4LDI2MzUwLDI2MzYyLDI2MzczLDI2Mzc1LDI2MzgyLDI2Mzg3LDI2MzkzLDI2Mzk2LDI2NDAwLDI2NDAyLDI2NDE5LDI2NDMwLDI2NDM3LDI2NDM5LDI2NDQwLDI2NDQ0LDI2NDUyLDI2NDUzLDI2NDYxLDI2NDcwLDI2NDc2LDI2NDc4LDI2NDg0LDI2NDg2LDI2NDkxLDI2NDk3LDI2NTAwLDI2NTEwLDI2NTExLDI2NTEzLDI2NTE1LDI2NTE4LDI2NTIwLDI2NTIxLDI2NTIzLDI2NTQ0LDI2NTQ1LDI2NTQ2LDI2NTQ5LDI2NTU1LDI2NTU2LDI2NTU3LDI2NjE3LDI2NTYwLDI2NTYyLDI2NTYzLDI2NTY1LDI2NTY4LDI2NTY5LDI2NTc4LDI2NTgzLDI2NTg1LDI2NTg4LDI2NTkzLDI2NTk4LDI2NjA4LDI2NjEwLDI2NjE0LDI2NjE1LDI2NzA2LDI2NjQ0LDI2NjQ5LDI2NjUzLDI2NjU1LDI2NjY0LDI2NjYzLDI2NjY4LDI2NjY5LDI2NjcxLDI2NjcyLDI2NjczLDI2Njc1LDI2NjgzLDI2Njg3LDI2NjkyLDI2NjkzLDI2Njk4LDI2NzAwLDI2NzA5LDI2NzExLDI2NzEyLDI2NzE1LDI2NzMxLDI2NzM0LDI2NzM1LDI2NzM2LDI2NzM3LDI2NzM4LDI2NzQxLDI2NzQ1LDI2NzQ2LDI2NzQ3LDI2NzQ4LDI2NzU0LDI2NzU2LDI2NzU4LDI2NzYwLDI2Nzc0LDI2Nzc2LDI2Nzc4LDI2NzgwLDI2Nzg1LDI2Nzg3LDI2Nzg5LDI2NzkzLDI2Nzk0LDI2Nzk4LDI2ODAyLDI2ODExLDI2ODIxLDI2ODI0LDI2ODI4LDI2ODMxLDI2ODMyLDI2ODMzLDI2ODM1LDI2ODM4LDI2ODQxLDI2ODQ0LDI2ODQ1LDI2ODUzLDI2ODU2LDI2ODU4LDI2ODU5LDI2ODYwLDI2ODYxLDI2ODY0LDI2ODY1LDI2ODY5LDI2ODcwLDI2ODc1LDI2ODc2LDI2ODc3LDI2ODg2LDI2ODg5LDI2ODkwLDI2ODk2LDI2ODk3LDI2ODk5LDI2OTAyLDI2OTAzLDI2OTI5LDI2OTMxLDI2OTMzLDI2OTM2LDI2OTM5LDI2OTQ2LDI2OTQ5LDI2OTUzLDI2OTU4LDI2OTY3LDI2OTcxLDI2OTc5LDI2OTgwLDI2OTgxLDI2OTgyLDI2OTg0LDI2OTg1LDI2OTg4LDI2OTkyLDI2OTkzLDI2OTk0LDI3MDAyLDI3MDAzLDI3MDA3LDI3MDA4LDI3MDIxLDI3MDI2LDI3MDMwLDI3MDMyLDI3MDQxLDI3MDQ1LDI3MDQ2LDI3MDQ4LDI3MDUxLDI3MDUzLDI3MDU1LDI3MDYzLDI3MDY0LDI3MDY2LDI3MDY4LDI3MDc3LDI3MDgwLDI3MDg5LDI3MDk0LDI3MDk1LDI3MTA2LDI3MTA5LDI3MTE4LDI3MTE5LDI3MTIxLDI3MTIzLDI3MTI1LDI3MTM0LDI3MTM2LDI3MTM3LDI3MTM5LDI3MTUxLDI3MTUzLDI3MTU3LDI3MTYyLDI3MTY1LDI3MTY4LDI3MTcyLDI3MTc2LDI3MTg0LDI3MTg2LDI3MTg4LDI3MTkxLDI3MTk1LDI3MTk4LDI3MTk5LDI3MjA1LDI3MjA2LDI3MjA5LDI3MjEwLDI3MjE0LDI3MjE2LDI3MjE3LDI3MjE4LDI3MjIxLDI3MjIyLDI3MjI3LDI3MjM2LDI3MjM5LDI3MjQyLDI3MjQ5LDI3MjUxLDI3MjYyLDI3MjY1LDI3MjY3LDI3MjcwLDI3MjcxLDI3MjczLDI3Mjc1LDI3MjgxLDI3MjkxLDI3MjkzLDI3Mjk0LDI3Mjk1LDI3MzAxLDI3MzA3LDI3MzExLDI3MzEyLDI3MzEzLDI3MzE2LDI3MzI1LDI3MzI2LDI3MzI3LDI3MzM0LDI3MzM3LDI3MzM2LDI3MzQwLDI3MzQ0LDI3MzQ4LDI3MzQ5LDI3MzUwLDI3MzU2LDI3MzU3LDI3MzY0LDI3MzY3LDI3MzcyLDI3Mzc2LDI3Mzc3LDI3Mzc4LDI3Mzg4LDI3Mzg5LDI3Mzk0LDI3Mzk1LDI3Mzk4LDI3Mzk5LDI3NDAxLDI3NDA3LDI3NDA4LDI3NDA5LDI3NDE1LDI3NDE5LDI3NDIyLDI3NDI4LDI3NDMyLDI3NDM1LDI3NDM2LDI3NDM5LDI3NDQ1LDI3NDQ2LDI3NDUxLDI3NDU1LDI3NDYyLDI3NDY2LDI3NDY5LDI3NDc0LDI3NDc4LDI3NDgwLDI3NDg1LDI3NDg4LDI3NDk1LDI3NDk5LDI3NTAyLDI3NTA0LDI3NTA5LDI3NTE3LDI3NTE4LDI3NTIyLDI3NTI1LDI3NTQzLDI3NTQ3LDI3NTUxLDI3NTUyLDI3NTU0LDI3NTU1LDI3NTYwLDI3NTYxLDI3NTY0LDI3NTY1LDI3NTY2LDI3NTY4LDI3NTc2LDI3NTc3LDI3NTgxLDI3NTgyLDI3NTg3LDI3NTg4LDI3NTkzLDI3NTk2LDI3NjA2LDI3NjEwLDI3NjE3LDI3NjE5LDI3NjIyLDI3NjIzLDI3NjMwLDI3NjMzLDI3NjM5LDI3NjQxLDI3NjQ3LDI3NjUwLDI3NjUyLDI3NjUzLDI3NjU3LDI3NjYxLDI3NjYyLDI3NjY0LDI3NjY2LDI3NjczLDI3Njc5LDI3Njg2LDI3Njg3LDI3Njg4LDI3NjkyLDI3Njk0LDI3Njk5LDI3NzAxLDI3NzAyLDI3NzA2LDI3NzA3LDI3NzExLDI3NzIyLDI3NzIzLDI3NzI1LDI3NzI3LDI3NzMwLDI3NzMyLDI3NzM3LDI3NzM5LDI3NzQwLDI3NzU1LDI3NzU3LDI3NzU5LDI3NzY0LDI3NzY2LDI3NzY4LDI3NzY5LDI3NzcxLDI3NzgxLDI3NzgyLDI3NzgzLDI3Nzg1LDI3Nzk2LDI3Nzk3LDI3Nzk5LDI3ODAwLDI3ODA0LDI3ODA3LDI3ODI0LDI3ODI2LDI3ODI4LDI3ODQyLDI3ODQ2LDI3ODUzLDI3ODU1LDI3ODU2LDI3ODU3LDI3ODU4LDI3ODYwLDI3ODYyLDI3ODY2LDI3ODY4LDI3ODcyLDI3ODc5LDI3ODgxLDI3ODgzLDI3ODg0LDI3ODg2LDI3ODkwLDI3ODkyLDI3OTA4LDI3OTExLDI3OTE0LDI3OTE4LDI3OTE5LDI3OTIxLDI3OTIzLDI3OTMwLDI3OTQyLDI3OTQzLDI3OTQ0LDI3NzUxLDI3OTUwLDI3OTUxLDI3OTUzLDI3OTYxLDI3OTY0LDI3OTY3LDI3OTkxLDI3OTk4LDI3OTk5LDI4MDAxLDI4MDA1LDI4MDA3LDI4MDE1LDI4MDE2LDI4MDI4LDI4MDM0LDI4MDM5LDI4MDQ5LDI4MDUwLDI4MDUyLDI4MDU0LDI4MDU1LDI4MDU2LDI4MDc0LDI4MDc2LDI4MDg0LDI4MDg3LDI4MDg5LDI4MDkzLDI4MDk1LDI4MTAwLDI4MTA0LDI4MTA2LDI4MTEwLDI4MTExLDI4MTE4LDI4MTIzLDI4MTI1LDI4MTI3LDI4MTI4LDI4MTMwLDI4MTMzLDI4MTM3LDI4MTQzLDI4MTQ0LDI4MTQ4LDI4MTUwLDI4MTU2LDI4MTYwLDI4MTY0LDI4MTkwLDI4MTk0LDI4MTk5LDI4MjEwLDI4MjE0LDI4MjE3LDI4MjE5LDI4MjIwLDI4MjI4LDI4MjI5LDI4MjMyLDI4MjMzLDI4MjM1LDI4MjM5LDI4MjQxLDI4MjQyLDI4MjQzLDI4MjQ0LDI4MjQ3LDI4MjUyLDI4MjUzLDI4MjU0LDI4MjU4LDI4MjU5LDI4MjY0LDI4Mjc1LDI4MjgzLDI4Mjg1LDI4MzAxLDI4MzA3LDI4MzEzLDI4MzIwLDI4MzI3LDI4MzMzLDI4MzM0LDI4MzM3LDI4MzM5LDI4MzQ3LDI4MzUxLDI4MzUyLDI4MzUzLDI4MzU1LDI4MzU5LDI4MzYwLDI4MzYyLDI4MzY1LDI4MzY2LDI4MzY3LDI4Mzk1LDI4Mzk3LDI4Mzk4LDI4NDA5LDI4NDExLDI4NDEzLDI4NDIwLDI4NDI0LDI4NDI2LDI4NDI4LDI4NDI5LDI4NDM4LDI4NDQwLDI4NDQyLDI4NDQzLDI4NDU0LDI4NDU3LDI4NDU4LDI4NDYzLDI4NDY0LDI4NDY3LDI4NDcwLDI4NDc1LDI4NDc2LDI4NDYxLDI4NDk1LDI4NDk3LDI4NDk4LDI4NDk5LDI4NTAzLDI4NTA1LDI4NTA2LDI4NTA5LDI4NTEwLDI4NTEzLDI4NTE0LDI4NTIwLDI4NTI0LDI4NTQxLDI4NTQyLDI4NTQ3LDI4NTUxLDI4NTUyLDI4NTU1LDI4NTU2LDI4NTU3LDI4NTYwLDI4NTYyLDI4NTYzLDI4NTY0LDI4NTY2LDI4NTcwLDI4NTc1LDI4NTc2LDI4NTgxLDI4NTgyLDI4NTgzLDI4NTg0LDI4NTkwLDI4NTkxLDI4NTkyLDI4NTk3LDI4NTk4LDI4NjA0LDI4NjEzLDI4NjE1LDI4NjE2LDI4NjE4LDI4NjM0LDI4NjM4LDI4NjQ4LDI4NjQ5LDI4NjU2LDI4NjYxLDI4NjY1LDI4NjY4LDI4NjY5LDI4NjcyLDI4Njc3LDI4Njc4LDI4Njc5LDI4Njg1LDI4Njk1LDI4NzA0LDI4NzA3LDI4NzE5LDI4NzI0LDI4NzI3LDI4NzI5LDI4NzMyLDI4NzM5LDI4NzQwLDI4NzQ0LDI4NzQ1LDI4NzQ2LDI4NzQ3LDI4NzU2LDI4NzU3LDI4NzY1LDI4NzY2LDI4NzUwLDI4NzcyLDI4NzczLDI4NzgwLDI4NzgyLDI4Nzg5LDI4NzkwLDI4Nzk4LDI4ODAxLDI4ODA1LDI4ODA2LDI4ODIwLDI4ODIxLDI4ODIyLDI4ODIzLDI4ODI0LDI4ODI3LDI4ODM2LDI4ODQzLDI4ODQ4LDI4ODQ5LDI4ODUyLDI4ODU1LDI4ODc0LDI4ODgxLDI4ODgzLDI4ODg0LDI4ODg1LDI4ODg2LDI4ODg4LDI4ODkyLDI4OTAwLDI4OTIyLDI4OTMxLDI4OTMyLDI4OTMzLDI4OTM0LDI4OTM1LDI4OTM5LDI4OTQwLDI4OTQzLDI4OTU4LDI4OTYwLDI4OTcxLDI4OTczLDI4OTc1LDI4OTc2LDI4OTc3LDI4OTg0LDI4OTkzLDI4OTk3LDI4OTk4LDI4OTk5LDI5MDAyLDI5MDAzLDI5MDA4LDI5MDEwLDI5MDE1LDI5MDE4LDI5MDIwLDI5MDIyLDI5MDI0LDI5MDMyLDI5MDQ5LDI5MDU2LDI5MDYxLDI5MDYzLDI5MDY4LDI5MDc0LDI5MDgyLDI5MDgzLDI5MDg4LDI5MDkwLDI5MTAzLDI5MTA0LDI5MTA2LDI5MTA3LDI5MTE0LDI5MTE5LDI5MTIwLDI5MTIxLDI5MTI0LDI5MTMxLDI5MTMyLDI5MTM5LDI5MTQyLDI5MTQ1LDI5MTQ2LDI5MTQ4LDI5MTc2LDI5MTgyLDI5MTg0LDI5MTkxLDI5MTkyLDI5MTkzLDI5MjAzLDI5MjA3LDI5MjEwLDI5MjEzLDI5MjE1LDI5MjIwLDI5MjI3LDI5MjMxLDI5MjM2LDI5MjQwLDI5MjQxLDI5MjQ5LDI5MjUwLDI5MjUxLDI5MjUzLDI5MjYyLDI5MjYzLDI5MjY0LDI5MjY3LDI5MjY5LDI5MjcwLDI5Mjc0LDI5Mjc2LDI5Mjc4LDI5MjgwLDI5MjgzLDI5Mjg4LDI5MjkxLDI5Mjk0LDI5Mjk1LDI5Mjk3LDI5MzAzLDI5MzA0LDI5MzA3LDI5MzA4LDI5MzExLDI5MzE2LDI5MzIxLDI5MzI1LDI5MzI2LDI5MzMxLDI5MzM5LDI5MzUyLDI5MzU3LDI5MzU4LDI5MzYxLDI5MzY0LDI5Mzc0LDI5Mzc3LDI5MzgzLDI5Mzg1LDI5Mzg4LDI5Mzk3LDI5Mzk4LDI5NDAwLDI5NDA3LDI5NDEzLDI5NDI3LDI5NDI4LDI5NDM0LDI5NDM1LDI5NDM4LDI5NDQyLDI5NDQ0LDI5NDQ1LDI5NDQ3LDI5NDUxLDI5NDUzLDI5NDU4LDI5NDU5LDI5NDY0LDI5NDY1LDI5NDcwLDI5NDc0LDI5NDc2LDI5NDc5LDI5NDgwLDI5NDg0LDI5NDg5LDI5NDkwLDI5NDkzLDI5NDk4LDI5NDk5LDI5NTAxLDI5NTA3LDI5NTE3LDI5NTIwLDI5NTIyLDI5NTI2LDI5NTI4LDI5NTMzLDI5NTM0LDI5NTM1LDI5NTM2LDI5NTQyLDI5NTQzLDI5NTQ1LDI5NTQ3LDI5NTQ4LDI5NTUwLDI5NTUxLDI5NTUzLDI5NTU5LDI5NTYxLDI5NTY0LDI5NTY4LDI5NTY5LDI5NTcxLDI5NTczLDI5NTc0LDI5NTgyLDI5NTg0LDI5NTg3LDI5NTg5LDI5NTkxLDI5NTkyLDI5NTk2LDI5NTk4LDI5NTk5LDI5NjAwLDI5NjAyLDI5NjA1LDI5NjA2LDI5NjEwLDI5NjExLDI5NjEzLDI5NjIxLDI5NjIzLDI5NjI1LDI5NjI4LDI5NjI5LDI5NjMxLDI5NjM3LDI5NjM4LDI5NjQxLDI5NjQzLDI5NjQ0LDI5NjQ3LDI5NjUwLDI5NjUxLDI5NjU0LDI5NjU3LDI5NjYxLDI5NjY1LDI5NjY3LDI5NjcwLDI5NjcxLDI5NjczLDI5Njg0LDI5Njg1LDI5Njg3LDI5Njg5LDI5NjkwLDI5NjkxLDI5NjkzLDI5Njk1LDI5Njk2LDI5Njk3LDI5NzAwLDI5NzAzLDI5NzA2LDI5NzEzLDI5NzIyLDI5NzIzLDI5NzMyLDI5NzM0LDI5NzM2LDI5NzM3LDI5NzM4LDI5NzM5LDI5NzQwLDI5NzQxLDI5NzQyLDI5NzQzLDI5NzQ0LDI5NzQ1LDI5NzUzLDI5NzYwLDI5NzYzLDI5NzY0LDI5NzY2LDI5NzY3LDI5NzcxLDI5NzczLDI5Nzc3LDI5Nzc4LDI5NzgzLDI5Nzg5LDI5Nzk0LDI5Nzk4LDI5Nzk5LDI5ODAwLDI5ODAzLDI5ODA1LDI5ODA2LDI5ODA5LDI5ODEwLDI5ODI0LDI5ODI1LDI5ODI5LDI5ODMwLDI5ODMxLDI5ODMzLDI5ODM5LDI5ODQwLDI5ODQxLDI5ODQyLDI5ODQ4LDI5ODQ5LDI5ODUwLDI5ODUyLDI5ODU1LDI5ODU2LDI5ODU3LDI5ODU5LDI5ODYyLDI5ODY0LDI5ODY1LDI5ODY2LDI5ODY3LDI5ODcwLDI5ODcxLDI5ODczLDI5ODc0LDI5ODc3LDI5ODgxLDI5ODgzLDI5ODg3LDI5ODk2LDI5ODk3LDI5OTAwLDI5OTA0LDI5OTA3LDI5OTEyLDI5OTE0LDI5OTE1LDI5OTE4LDI5OTE5LDI5OTI0LDI5OTI4LDI5OTMwLDI5OTMxLDI5OTM1LDI5OTQwLDI5OTQ2LDI5OTQ3LDI5OTQ4LDI5OTUxLDI5OTU4LDI5OTcwLDI5OTc0LDI5OTc1LDI5OTg0LDI5OTg1LDI5OTg4LDI5OTkxLDI5OTkzLDI5OTk0LDI5OTk5LDMwMDA2LDMwMDA5LDMwMDEzLDMwMDE0LDMwMDE1LDMwMDE2LDMwMDE5LDMwMDIzLDMwMDI0LDMwMDMwLDMwMDMyLDMwMDM0LDMwMDM5LDMwMDQ2LDMwMDQ3LDMwMDQ5LDMwMDYzLDMwMDY1LDMwMDczLDMwMDc0LDMwMDc1LDMwMDc2LDMwMDc3LDMwMDc4LDMwMDgxLDMwMDg1LDMwMDk2LDMwMDk4LDMwMDk5LDMwMTAxLDMwMTA1LDMwMTA4LDMwMTE0LDMwMTE2LDMwMTMyLDMwMTM4LDMwMTQzLDMwMTQ0LDMwMTQ1LDMwMTQ4LDMwMTUwLDMwMTU2LDMwMTU4LDMwMTU5LDMwMTY3LDMwMTcyLDMwMTc1LDMwMTc2LDMwMTc3LDMwMTgwLDMwMTgzLDMwMTg4LDMwMTkwLDMwMTkxLDMwMTkzLDMwMjAxLDMwMjA4LDMwMjEwLDMwMjExLDMwMjEyLDMwMjE1LDMwMjE2LDMwMjE4LDMwMjIwLDMwMjIzLDMwMjI2LDMwMjI3LDMwMjI5LDMwMjMwLDMwMjMzLDMwMjM1LDMwMjM2LDMwMjM3LDMwMjM4LDMwMjQzLDMwMjQ1LDMwMjQ2LDMwMjQ5LDMwMjUzLDMwMjU4LDMwMjU5LDMwMjYxLDMwMjY0LDMwMjY1LDMwMjY2LDMwMjY4LDMwMjgyLDMwMjcyLDMwMjczLDMwMjc1LDMwMjc2LDMwMjc3LDMwMjgxLDMwMjgzLDMwMjkzLDMwMjk3LDMwMzAzLDMwMzA4LDMwMzA5LDMwMzE3LDMwMzE4LDMwMzE5LDMwMzIxLDMwMzI0LDMwMzM3LDMwMzQxLDMwMzQ4LDMwMzQ5LDMwMzU3LDMwMzYzLDMwMzY0LDMwMzY1LDMwMzY3LDMwMzY4LDMwMzcwLDMwMzcxLDMwMzcyLDMwMzczLDMwMzc0LDMwMzc1LDMwMzc2LDMwMzc4LDMwMzgxLDMwMzk3LDMwNDAxLDMwNDA1LDMwNDA5LDMwNDExLDMwNDEyLDMwNDE0LDMwNDIwLDMwNDI1LDMwNDMyLDMwNDM4LDMwNDQwLDMwNDQ0LDMwNDQ4LDMwNDQ5LDMwNDU0LDMwNDU3LDMwNDYwLDMwNDY0LDMwNDcwLDMwNDc0LDMwNDc4LDMwNDgyLDMwNDg0LDMwNDg1LDMwNDg3LDMwNDg5LDMwNDkwLDMwNDkyLDMwNDk4LDMwNTA0LDMwNTA5LDMwNTEwLDMwNTExLDMwNTE2LDMwNTE3LDMwNTE4LDMwNTIxLDMwNTI1LDMwNTI2LDMwNTMwLDMwNTMzLDMwNTM0LDMwNTM4LDMwNTQxLDMwNTQyLDMwNTQzLDMwNTQ2LDMwNTUwLDMwNTUxLDMwNTU2LDMwNTU4LDMwNTU5LDMwNTYwLDMwNTYyLDMwNTY0LDMwNTY3LDMwNTcwLDMwNTcyLDMwNTc2LDMwNTc4LDMwNTc5LDMwNTgwLDMwNTg2LDMwNTg5LDMwNTkyLDMwNTk2LDMwNjA0LDMwNjA1LDMwNjEyLDMwNjEzLDMwNjE0LDMwNjE4LDMwNjIzLDMwNjI2LDMwNjMxLDMwNjM0LDMwNjM4LDMwNjM5LDMwNjQxLDMwNjQ1LDMwNjU0LDMwNjU5LDMwNjY1LDMwNjczLDMwNjc0LDMwNjc3LDMwNjgxLDMwNjg2LDMwNjg3LDMwNjg4LDMwNjkyLDMwNjk0LDMwNjk4LDMwNzAwLDMwNzA0LDMwNzA1LDMwNzA4LDMwNzEyLDMwNzE1LDMwNzI1LDMwNzI2LDMwNzI5LDMwNzMzLDMwNzM0LDMwNzM3LDMwNzQ5LDMwNzUzLDMwNzU0LDMwNzU1LDMwNzY1LDMwNzY2LDMwNzY4LDMwNzczLDMwNzc1LDMwNzg3LDMwNzg4LDMwNzkxLDMwNzkyLDMwNzk2LDMwNzk4LDMwODAyLDMwODEyLDMwODE0LDMwODE2LDMwODE3LDMwODE5LDMwODIwLDMwODI0LDMwODI2LDMwODMwLDMwODQyLDMwODQ2LDMwODU4LDMwODYzLDMwODY4LDMwODcyLDMwODgxLDMwODc3LDMwODc4LDMwODc5LDMwODg0LDMwODg4LDMwODkyLDMwODkzLDMwODk2LDMwODk3LDMwODk4LDMwODk5LDMwOTA3LDMwOTA5LDMwOTExLDMwOTE5LDMwOTIwLDMwOTIxLDMwOTI0LDMwOTI2LDMwOTMwLDMwOTMxLDMwOTMzLDMwOTM0LDMwOTQ4LDMwOTM5LDMwOTQzLDMwOTQ0LDMwOTQ1LDMwOTUwLDMwOTU0LDMwOTYyLDMwOTYzLDMwOTc2LDMwOTY2LDMwOTY3LDMwOTcwLDMwOTcxLDMwOTc1LDMwOTgyLDMwOTg4LDMwOTkyLDMxMDAyLDMxMDA0LDMxMDA2LDMxMDA3LDMxMDA4LDMxMDEzLDMxMDE1LDMxMDE3LDMxMDIxLDMxMDI1LDMxMDI4LDMxMDI5LDMxMDM1LDMxMDM3LDMxMDM5LDMxMDQ0LDMxMDQ1LDMxMDQ2LDMxMDUwLDMxMDUxLDMxMDU1LDMxMDU3LDMxMDYwLDMxMDY0LDMxMDY3LDMxMDY4LDMxMDc5LDMxMDgxLDMxMDgzLDMxMDkwLDMxMDk3LDMxMDk5LDMxMTAwLDMxMTAyLDMxMTE1LDMxMTE2LDMxMTIxLDMxMTIzLDMxMTI0LDMxMTI1LDMxMTI2LDMxMTI4LDMxMTMxLDMxMTMyLDMxMTM3LDMxMTQ0LDMxMTQ1LDMxMTQ3LDMxMTUxLDMxMTUzLDMxMTU2LDMxMTYwLDMxMTYzLDMxMTcwLDMxMTcyLDMxMTc1LDMxMTc2LDMxMTc4LDMxMTgzLDMxMTg4LDMxMTkwLDMxMTk0LDMxMTk3LDMxMTk4LDMxMjAwLDMxMjAyLDMxMjA1LDMxMjEwLDMxMjExLDMxMjEzLDMxMjE3LDMxMjI0LDMxMjI4LDMxMjM0LDMxMjM1LDMxMjM5LDMxMjQxLDMxMjQyLDMxMjQ0LDMxMjQ5LDMxMjUzLDMxMjU5LDMxMjYyLDMxMjY1LDMxMjcxLDMxMjc1LDMxMjc3LDMxMjc5LDMxMjgwLDMxMjg0LDMxMjg1LDMxMjg4LDMxMjg5LDMxMjkwLDMxMzAwLDMxMzAxLDMxMzAzLDMxMzA0LDMxMzA4LDMxMzE3LDMxMzE4LDMxMzIxLDMxMzI0LDMxMzI1LDMxMzI3LDMxMzI4LDMxMzMzLDMxMzM1LDMxMzM4LDMxMzQxLDMxMzQ5LDMxMzUyLDMxMzU4LDMxMzYwLDMxMzYyLDMxMzY1LDMxMzY2LDMxMzcwLDMxMzcxLDMxMzc2LDMxMzc3LDMxMzgwLDMxMzkwLDMxMzkyLDMxMzk1LDMxNDA0LDMxNDExLDMxNDEzLDMxNDE3LDMxNDE5LDMxNDIwLDMxNDMwLDMxNDMzLDMxNDM2LDMxNDM4LDMxNDQxLDMxNDUxLDMxNDY0LDMxNDY1LDMxNDY3LDMxNDY4LDMxNDczLDMxNDc2LDMxNDgzLDMxNDg1LDMxNDg2LDMxNDk1LDMxNTA4LDMxNTE5LDMxNTIzLDMxNTI3LDMxNTI5LDMxNTMwLDMxNTMxLDMxNTMzLDMxNTM0LDMxNTM1LDMxNTM2LDMxNTM3LDMxNTQwLDMxNTQ5LDMxNTUxLDMxNTUyLDMxNTUzLDMxNTU5LDMxNTY2LDMxNTczLDMxNTg0LDMxNTg4LDMxNTkwLDMxNTkzLDMxNTk0LDMxNTk3LDMxNTk5LDMxNjAyLDMxNjAzLDMxNjA3LDMxNjIwLDMxNjI1LDMxNjMwLDMxNjMyLDMxNjMzLDMxNjM4LDMxNjQzLDMxNjQ2LDMxNjQ4LDMxNjUzLDMxNjYwLDMxNjYzLDMxNjY0LDMxNjY2LDMxNjY5LDMxNjcwLDMxNjc0LDMxNjc1LDMxNjc2LDMxNjc3LDMxNjgyLDMxNjg1LDMxNjg4LDMxNjkwLDMxNzAwLDMxNzAyLDMxNzAzLDMxNzA1LDMxNzA2LDMxNzA3LDMxNzIwLDMxNzIyLDMxNzMwLDMxNzMyLDMxNzMzLDMxNzM2LDMxNzM3LDMxNzM4LDMxNzQwLDMxNzQyLDMxNzQ1LDMxNzQ2LDMxNzQ3LDMxNzQ4LDMxNzUwLDMxNzUzLDMxNzU1LDMxNzU2LDMxNzU4LDMxNzU5LDMxNzY5LDMxNzcxLDMxNzc2LDMxNzgxLDMxNzgyLDMxNzg0LDMxNzg4LDMxNzkzLDMxNzk1LDMxNzk2LDMxNzk4LDMxODAxLDMxODAyLDMxODE0LDMxODE4LDMxODI5LDMxODI1LDMxODI2LDMxODI3LDMxODMzLDMxODM0LDMxODM1LDMxODM2LDMxODM3LDMxODM4LDMxODQxLDMxODQzLDMxODQ3LDMxODQ5LDMxODUzLDMxODU0LDMxODU2LDMxODU4LDMxODY1LDMxODY4LDMxODY5LDMxODc4LDMxODc5LDMxODg3LDMxODkyLDMxOTAyLDMxOTA0LDMxOTEwLDMxOTIwLDMxOTI2LDMxOTI3LDMxOTMwLDMxOTMxLDMxOTMyLDMxOTM1LDMxOTQwLDMxOTQzLDMxOTQ0LDMxOTQ1LDMxOTQ5LDMxOTUxLDMxOTU1LDMxOTU2LDMxOTU3LDMxOTU5LDMxOTYxLDMxOTYyLDMxOTY1LDMxOTc0LDMxOTc3LDMxOTc5LDMxOTg5LDMyMDAzLDMyMDA3LDMyMDA4LDMyMDA5LDMyMDE1LDMyMDE3LDMyMDE4LDMyMDE5LDMyMDIyLDMyMDI5LDMyMDMwLDMyMDM1LDMyMDM4LDMyMDQyLDMyMDQ1LDMyMDQ5LDMyMDYwLDMyMDYxLDMyMDYyLDMyMDY0LDMyMDY1LDMyMDcxLDMyMDcyLDMyMDc3LDMyMDgxLDMyMDgzLDMyMDg3LDMyMDg5LDMyMDkwLDMyMDkyLDMyMDkzLDMyMTAxLDMyMTAzLDMyMTA2LDMyMTEyLDMyMTIwLDMyMTIyLDMyMTIzLDMyMTI3LDMyMTI5LDMyMTMwLDMyMTMxLDMyMTMzLDMyMTM0LDMyMTM2LDMyMTM5LDMyMTQwLDMyMTQxLDMyMTQ1LDMyMTUwLDMyMTUxLDMyMTU3LDMyMTU4LDMyMTY2LDMyMTY3LDMyMTcwLDMyMTc5LDMyMTgyLDMyMTgzLDMyMTg1LDMyMTk0LDMyMTk1LDMyMTk2LDMyMTk3LDMyMTk4LDMyMjA0LDMyMjA1LDMyMjA2LDMyMjE1LDMyMjE3LDMyMjU2LDMyMjI2LDMyMjI5LDMyMjMwLDMyMjM0LDMyMjM1LDMyMjM3LDMyMjQxLDMyMjQ1LDMyMjQ2LDMyMjQ5LDMyMjUwLDMyMjY0LDMyMjcyLDMyMjczLDMyMjc3LDMyMjc5LDMyMjg0LDMyMjg1LDMyMjg4LDMyMjk1LDMyMjk2LDMyMzAwLDMyMzAxLDMyMzAzLDMyMzA3LDMyMzEwLDMyMzE5LDMyMzI0LDMyMzI1LDMyMzI3LDMyMzM0LDMyMzM2LDMyMzM4LDMyMzQ0LDMyMzUxLDMyMzUzLDMyMzU0LDMyMzU3LDMyMzYzLDMyMzY2LDMyMzY3LDMyMzcxLDMyMzc2LDMyMzgyLDMyMzg1LDMyMzkwLDMyMzkxLDMyMzk0LDMyMzk3LDMyNDAxLDMyNDA1LDMyNDA4LDMyNDEwLDMyNDEzLDMyNDE0LDMyNTcyLDMyNTcxLDMyNTczLDMyNTc0LDMyNTc1LDMyNTc5LDMyNTgwLDMyNTgzLDMyNTkxLDMyNTk0LDMyNTk1LDMyNjAzLDMyNjA0LDMyNjA1LDMyNjA5LDMyNjExLDMyNjEyLDMyNjEzLDMyNjE0LDMyNjIxLDMyNjI1LDMyNjM3LDMyNjM4LDMyNjM5LDMyNjQwLDMyNjUxLDMyNjUzLDMyNjU1LDMyNjU2LDMyNjU3LDMyNjYyLDMyNjYzLDMyNjY4LDMyNjczLDMyNjc0LDMyNjc4LDMyNjgyLDMyNjg1LDMyNjkyLDMyNzAwLDMyNzAzLDMyNzA0LDMyNzA3LDMyNzEyLDMyNzE4LDMyNzE5LDMyNzMxLDMyNzM1LDMyNzM5LDMyNzQxLDMyNzQ0LDMyNzQ4LDMyNzUwLDMyNzUxLDMyNzU0LDMyNzYyLDMyNzY1LDMyNzY2LDMyNzY3LDMyNzc1LDMyNzc2LDMyNzc4LDMyNzgxLDMyNzgyLDMyNzgzLDMyNzg1LDMyNzg3LDMyNzg4LDMyNzkwLDMyNzk3LDMyNzk4LDMyNzk5LDMyODAwLDMyODA0LDMyODA2LDMyODEyLDMyODE0LDMyODE2LDMyODIwLDMyODIxLDMyODIzLDMyODI1LDMyODI2LDMyODI4LDMyODMwLDMyODMyLDMyODM2LDMyODY0LDMyODY4LDMyODcwLDMyODc3LDMyODgxLDMyODg1LDMyODk3LDMyOTA0LDMyOTEwLDMyOTI0LDMyOTI2LDMyOTM0LDMyOTM1LDMyOTM5LDMyOTUyLDMyOTUzLDMyOTY4LDMyOTczLDMyOTc1LDMyOTc4LDMyOTgwLDMyOTgxLDMyOTgzLDMyOTg0LDMyOTkyLDMzMDA1LDMzMDA2LDMzMDA4LDMzMDEwLDMzMDExLDMzMDE0LDMzMDE3LDMzMDE4LDMzMDIyLDMzMDI3LDMzMDM1LDMzMDQ2LDMzMDQ3LDMzMDQ4LDMzMDUyLDMzMDU0LDMzMDU2LDMzMDYwLDMzMDYzLDMzMDY4LDMzMDcyLDMzMDc3LDMzMDgyLDMzMDg0LDMzMDkzLDMzMDk1LDMzMDk4LDMzMTAwLDMzMTA2LDMzMTExLDMzMTIwLDMzMTIxLDMzMTI3LDMzMTI4LDMzMTI5LDMzMTMzLDMzMTM1LDMzMTQzLDMzMTUzLDMzMTY4LDMzMTU2LDMzMTU3LDMzMTU4LDMzMTYzLDMzMTY2LDMzMTc0LDMzMTc2LDMzMTc5LDMzMTgyLDMzMTg2LDMzMTk4LDMzMjAyLDMzMjA0LDMzMjExLDMzMjI3LDMzMjE5LDMzMjIxLDMzMjI2LDMzMjMwLDMzMjMxLDMzMjM3LDMzMjM5LDMzMjQzLDMzMjQ1LDMzMjQ2LDMzMjQ5LDMzMjUyLDMzMjU5LDMzMjYwLDMzMjY0LDMzMjY1LDMzMjY2LDMzMjY5LDMzMjcwLDMzMjcyLDMzMjczLDMzMjc3LDMzMjc5LDMzMjgwLDMzMjgzLDMzMjk1LDMzMjk5LDMzMzAwLDMzMzA1LDMzMzA2LDMzMzA5LDMzMzEzLDMzMzE0LDMzMzIwLDMzMzMwLDMzMzMyLDMzMzM4LDMzMzQ3LDMzMzQ4LDMzMzQ5LDMzMzUwLDMzMzU1LDMzMzU4LDMzMzU5LDMzMzYxLDMzMzY2LDMzMzcyLDMzMzc2LDMzMzc5LDMzMzgzLDMzMzg5LDMzMzk2LDMzNDAzLDMzNDA1LDMzNDA3LDMzNDA4LDMzNDA5LDMzNDExLDMzNDEyLDMzNDE1LDMzNDE3LDMzNDE4LDMzNDIyLDMzNDI1LDMzNDI4LDMzNDMwLDMzNDMyLDMzNDM0LDMzNDM1LDMzNDQwLDMzNDQxLDMzNDQzLDMzNDQ0LDMzNDQ3LDMzNDQ4LDMzNDQ5LDMzNDUwLDMzNDU0LDMzNDU2LDMzNDU4LDMzNDYwLDMzNDYzLDMzNDY2LDMzNDY4LDMzNDcwLDMzNDcxLDMzNDc4LDMzNDg4LDMzNDkzLDMzNDk4LDMzNTA0LDMzNTA2LDMzNTA4LDMzNTEyLDMzNTE0LDMzNTE3LDMzNTE5LDMzNTI2LDMzNTI3LDMzNTMzLDMzNTM0LDMzNTM2LDMzNTM3LDMzNTQzLDMzNTQ0LDMzNTQ2LDMzNTQ3LDMzNjIwLDMzNTYzLDMzNTY1LDMzNTY2LDMzNTY3LDMzNTY5LDMzNTcwLDMzNTgwLDMzNTgxLDMzNTgyLDMzNTg0LDMzNTg3LDMzNTkxLDMzNTk0LDMzNTk2LDMzNTk3LDMzNjAyLDMzNjAzLDMzNjA0LDMzNjA3LDMzNjEzLDMzNjE0LDMzNjE3LDMzNjIxLDMzNjIyLDMzNjIzLDMzNjQ4LDMzNjU2LDMzNjYxLDMzNjYzLDMzNjY0LDMzNjY2LDMzNjY4LDMzNjcwLDMzNjc3LDMzNjgyLDMzNjg0LDMzNjg1LDMzNjg4LDMzNjg5LDMzNjkxLDMzNjkyLDMzNjkzLDMzNzAyLDMzNzAzLDMzNzA1LDMzNzA4LDMzNzI2LDMzNzI3LDMzNzI4LDMzNzM1LDMzNzM3LDMzNzQzLDMzNzQ0LDMzNzQ1LDMzNzQ4LDMzNzU3LDMzNjE5LDMzNzY4LDMzNzcwLDMzNzgyLDMzNzg0LDMzNzg1LDMzNzg4LDMzNzkzLDMzNzk4LDMzODAyLDMzODA3LDMzODA5LDMzODEzLDMzODE3LDMzNzA5LDMzODM5LDMzODQ5LDMzODYxLDMzODYzLDMzODY0LDMzODY2LDMzODY5LDMzODcxLDMzODczLDMzODc0LDMzODc4LDMzODgwLDMzODgxLDMzODgyLDMzODg0LDMzODg4LDMzODkyLDMzODkzLDMzODk1LDMzODk4LDMzOTA0LDMzOTA3LDMzOTA4LDMzOTEwLDMzOTEyLDMzOTE2LDMzOTE3LDMzOTIxLDMzOTI1LDMzOTM4LDMzOTM5LDMzOTQxLDMzOTUwLDMzOTU4LDMzOTYwLDMzOTYxLDMzOTYyLDMzOTY3LDMzOTY5LDMzOTcyLDMzOTc4LDMzOTgxLDMzOTgyLDMzOTg0LDMzOTg2LDMzOTkxLDMzOTkyLDMzOTk2LDMzOTk5LDM0MDAzLDM0MDEyLDM0MDIzLDM0MDI2LDM0MDMxLDM0MDMyLDM0MDMzLDM0MDM0LDM0MDM5LDM0MDk4LDM0MDQyLDM0MDQzLDM0MDQ1LDM0MDUwLDM0MDUxLDM0MDU1LDM0MDYwLDM0MDYyLDM0MDY0LDM0MDc2LDM0MDc4LDM0MDgyLDM0MDgzLDM0MDg0LDM0MDg1LDM0MDg3LDM0MDkwLDM0MDkxLDM0MDk1LDM0MDk5LDM0MTAwLDM0MTAyLDM0MTExLDM0MTE4LDM0MTI3LDM0MTI4LDM0MTI5LDM0MTMwLDM0MTMxLDM0MTM0LDM0MTM3LDM0MTQwLDM0MTQxLDM0MTQyLDM0MTQzLDM0MTQ0LDM0MTQ1LDM0MTQ2LDM0MTQ4LDM0MTU1LDM0MTU5LDM0MTY5LDM0MTcwLDM0MTcxLDM0MTczLDM0MTc1LDM0MTc3LDM0MTgxLDM0MTgyLDM0MTg1LDM0MTg3LDM0MTg4LDM0MTkxLDM0MTk1LDM0MjAwLDM0MjA1LDM0MjA3LDM0MjA4LDM0MjEwLDM0MjEzLDM0MjE1LDM0MjI4LDM0MjMwLDM0MjMxLDM0MjMyLDM0MjM2LDM0MjM3LDM0MjM4LDM0MjM5LDM0MjQyLDM0MjQ3LDM0MjUwLDM0MjUxLDM0MjU0LDM0MjIxLDM0MjY0LDM0MjY2LDM0MjcxLDM0MjcyLDM0Mjc4LDM0MjgwLDM0Mjg1LDM0MjkxLDM0Mjk0LDM0MzAwLDM0MzAzLDM0MzA0LDM0MzA4LDM0MzA5LDM0MzE3LDM0MzE4LDM0MzIwLDM0MzIxLDM0MzIyLDM0MzI4LDM0MzI5LDM0MzMxLDM0MzM0LDM0MzM3LDM0MzQzLDM0MzQ1LDM0MzU4LDM0MzYwLDM0MzYyLDM0MzY0LDM0MzY1LDM0MzY4LDM0MzcwLDM0Mzc0LDM0Mzg2LDM0Mzg3LDM0MzkwLDM0MzkxLDM0MzkyLDM0MzkzLDM0Mzk3LDM0NDAwLDM0NDAxLDM0NDAyLDM0NDAzLDM0NDA0LDM0NDA5LDM0NDEyLDM0NDE1LDM0NDIxLDM0NDIyLDM0NDIzLDM0NDI2LDM0NDQ1LDM0NDQ5LDM0NDU0LDM0NDU2LDM0NDU4LDM0NDYwLDM0NDY1LDM0NDcwLDM0NDcxLDM0NDcyLDM0NDc3LDM0NDgxLDM0NDgzLDM0NDg0LDM0NDg1LDM0NDg3LDM0NDg4LDM0NDg5LDM0NDk1LDM0NDk2LDM0NDk3LDM0NDk5LDM0NTAxLDM0NTEzLDM0NTE0LDM0NTE3LDM0NTE5LDM0NTIyLDM0NTI0LDM0NTI4LDM0NTMxLDM0NTMzLDM0NTM1LDM0NDQwLDM0NTU0LDM0NTU2LDM0NTU3LDM0NTY0LDM0NTY1LDM0NTY3LDM0NTcxLDM0NTc0LDM0NTc1LDM0NTc2LDM0NTc5LDM0NTgwLDM0NTg1LDM0NTkwLDM0NTkxLDM0NTkzLDM0NTk1LDM0NjAwLDM0NjA2LDM0NjA3LDM0NjA5LDM0NjEwLDM0NjE3LDM0NjE4LDM0NjIwLDM0NjIxLDM0NjIyLDM0NjI0LDM0NjI3LDM0NjI5LDM0NjM3LDM0NjQ4LDM0NjUzLDM0NjU3LDM0NjYwLDM0NjYxLDM0NjcxLDM0NjczLDM0Njc0LDM0NjgzLDM0NjkxLDM0NjkyLDM0NjkzLDM0Njk0LDM0Njk1LDM0Njk2LDM0Njk3LDM0Njk5LDM0NzAwLDM0NzA0LDM0NzA3LDM0NzA5LDM0NzExLDM0NzEyLDM0NzEzLDM0NzE4LDM0NzIwLDM0NzIzLDM0NzI3LDM0NzMyLDM0NzMzLDM0NzM0LDM0NzM3LDM0NzQxLDM0NzUwLDM0NzUxLDM0NzUzLDM0NzYwLDM0NzYxLDM0NzYyLDM0NzY2LDM0NzczLDM0Nzc0LDM0Nzc3LDM0Nzc4LDM0NzgwLDM0NzgzLDM0Nzg2LDM0Nzg3LDM0Nzg4LDM0Nzk0LDM0Nzk1LDM0Nzk3LDM0ODAxLDM0ODAzLDM0ODA4LDM0ODEwLDM0ODE1LDM0ODE3LDM0ODE5LDM0ODIyLDM0ODI1LDM0ODI2LDM0ODI3LDM0ODMyLDM0ODQxLDM0ODM0LDM0ODM1LDM0ODM2LDM0ODQwLDM0ODQyLDM0ODQzLDM0ODQ0LDM0ODQ2LDM0ODQ3LDM0ODU2LDM0ODYxLDM0ODYyLDM0ODY0LDM0ODY2LDM0ODY5LDM0ODc0LDM0ODc2LDM0ODgxLDM0ODgzLDM0ODg1LDM0ODg4LDM0ODg5LDM0ODkwLDM0ODkxLDM0ODk0LDM0ODk3LDM0OTAxLDM0OTAyLDM0OTA0LDM0OTA2LDM0OTA4LDM0OTExLDM0OTEyLDM0OTE2LDM0OTIxLDM0OTI5LDM0OTM3LDM0OTM5LDM0OTQ0LDM0OTY4LDM0OTcwLDM0OTcxLDM0OTcyLDM0OTc1LDM0OTc2LDM0OTg0LDM0OTg2LDM1MDAyLDM1MDA1LDM1MDA2LDM1MDA4LDM1MDE4LDM1MDE5LDM1MDIwLDM1MDIxLDM1MDIyLDM1MDI1LDM1MDI2LDM1MDI3LDM1MDM1LDM1MDM4LDM1MDQ3LDM1MDU1LDM1MDU2LDM1MDU3LDM1MDYxLDM1MDYzLDM1MDczLDM1MDc4LDM1MDg1LDM1MDg2LDM1MDg3LDM1MDkzLDM1MDk0LDM1MDk2LDM1MDk3LDM1MDk4LDM1MTAwLDM1MTA0LDM1MTEwLDM1MTExLDM1MTEyLDM1MTIwLDM1MTIxLDM1MTIyLDM1MTI1LDM1MTI5LDM1MTMwLDM1MTM0LDM1MTM2LDM1MTM4LDM1MTQxLDM1MTQyLDM1MTQ1LDM1MTUxLDM1MTU0LDM1MTU5LDM1MTYyLDM1MTYzLDM1MTY0LDM1MTY5LDM1MTcwLDM1MTcxLDM1MTc5LDM1MTgyLDM1MTg0LDM1MTg3LDM1MTg5LDM1MTk0LDM1MTk1LDM1MTk2LDM1MTk3LDM1MjA5LDM1MjEzLDM1MjE2LDM1MjIwLDM1MjIxLDM1MjI3LDM1MjI4LDM1MjMxLDM1MjMyLDM1MjM3LDM1MjQ4LDM1MjUyLDM1MjUzLDM1MjU0LDM1MjU1LDM1MjYwLDM1Mjg0LDM1Mjg1LDM1Mjg2LDM1Mjg3LDM1Mjg4LDM1MzAxLDM1MzA1LDM1MzA3LDM1MzA5LDM1MzEzLDM1MzE1LDM1MzE4LDM1MzIxLDM1MzI1LDM1MzI3LDM1MzMyLDM1MzMzLDM1MzM1LDM1MzQzLDM1MzQ1LDM1MzQ2LDM1MzQ4LDM1MzQ5LDM1MzU4LDM1MzYwLDM1MzYyLDM1MzY0LDM1MzY2LDM1MzcxLDM1MzcyLDM1Mzc1LDM1MzgxLDM1MzgzLDM1Mzg5LDM1MzkwLDM1MzkyLDM1Mzk1LDM1Mzk3LDM1Mzk5LDM1NDAxLDM1NDA1LDM1NDA2LDM1NDExLDM1NDE0LDM1NDE1LDM1NDE2LDM1NDIwLDM1NDIxLDM1NDI1LDM1NDI5LDM1NDMxLDM1NDQ1LDM1NDQ2LDM1NDQ3LDM1NDQ5LDM1NDUwLDM1NDUxLDM1NDU0LDM1NDU1LDM1NDU2LDM1NDU5LDM1NDYyLDM1NDY3LDM1NDcxLDM1NDcyLDM1NDc0LDM1NDc4LDM1NDc5LDM1NDgxLDM1NDg3LDM1NDk1LDM1NDk3LDM1NTAyLDM1NTAzLDM1NTA3LDM1NTEwLDM1NTExLDM1NTE1LDM1NTE4LDM1NTIzLDM1NTI2LDM1NTI4LDM1NTI5LDM1NTMwLDM1NTM3LDM1NTM5LDM1NTQwLDM1NTQxLDM1NTQzLDM1NTQ5LDM1NTUxLDM1NTY0LDM1NTY4LDM1NTcyLDM1NTczLDM1NTc0LDM1NTgwLDM1NTgzLDM1NTg5LDM1NTkwLDM1NTk1LDM1NjAxLDM1NjEyLDM1NjE0LDM1NjE1LDM1NTk0LDM1NjI5LDM1NjMyLDM1NjM5LDM1NjQ0LDM1NjUwLDM1NjUxLDM1NjUyLDM1NjUzLDM1NjU0LDM1NjU2LDM1NjY2LDM1NjY3LDM1NjY4LDM1NjczLDM1NjYxLDM1Njc4LDM1NjgzLDM1NjkzLDM1NzAyLDM1NzA0LDM1NzA1LDM1NzA4LDM1NzEwLDM1NzEzLDM1NzE2LDM1NzE3LDM1NzIzLDM1NzI1LDM1NzI3LDM1NzMyLDM1NzMzLDM1NzQwLDM1NzQyLDM1NzQzLDM1ODk2LDM1ODk3LDM1OTAxLDM1OTAyLDM1OTA5LDM1OTExLDM1OTEzLDM1OTE1LDM1OTE5LDM1OTIxLDM1OTIzLDM1OTI0LDM1OTI3LDM1OTI4LDM1OTMxLDM1OTMzLDM1OTI5LDM1OTM5LDM1OTQwLDM1OTQyLDM1OTQ0LDM1OTQ1LDM1OTQ5LDM1OTU1LDM1OTU3LDM1OTU4LDM1OTYzLDM1OTY2LDM1OTc0LDM1OTc1LDM1OTc5LDM1OTg0LDM1OTg2LDM1OTg3LDM1OTkzLDM1OTk1LDM1OTk2LDM2MDA0LDM2MDI1LDM2MDI2LDM2MDM3LDM2MDM4LDM2MDQxLDM2MDQzLDM2MDQ3LDM2MDU0LDM2MDUzLDM2MDU3LDM2MDYxLDM2MDY1LDM2MDcyLDM2MDc2LDM2MDc5LDM2MDgwLDM2MDgyLDM2MDg1LDM2MDg3LDM2MDg4LDM2MDk0LDM2MDk1LDM2MDk3LDM2MDk5LDM2MTA1LDM2MTE0LDM2MTE5LDM2MTIzLDM2MTk3LDM2MjAxLDM2MjA0LDM2MjA2LDM2MjIzLDM2MjI2LDM2MjI4LDM2MjMyLDM2MjM3LDM2MjQwLDM2MjQxLDM2MjQ1LDM2MjU0LDM2MjU1LDM2MjU2LDM2MjYyLDM2MjY3LDM2MjY4LDM2MjcxLDM2Mjc0LDM2Mjc3LDM2Mjc5LDM2MjgxLDM2MjgzLDM2Mjg4LDM2MjkzLDM2Mjk0LDM2Mjk1LDM2Mjk2LDM2Mjk4LDM2MzAyLDM2MzA1LDM2MzA4LDM2MzA5LDM2MzExLDM2MzEzLDM2MzI0LDM2MzI1LDM2MzI3LDM2MzMyLDM2MzM2LDM2Mjg0LDM2MzM3LDM2MzM4LDM2MzQwLDM2MzQ5LDM2MzUzLDM2MzU2LDM2MzU3LDM2MzU4LDM2MzYzLDM2MzY5LDM2MzcyLDM2Mzc0LDM2Mzg0LDM2Mzg1LDM2Mzg2LDM2Mzg3LDM2MzkwLDM2MzkxLDM2NDAxLDM2NDAzLDM2NDA2LDM2NDA3LDM2NDA4LDM2NDA5LDM2NDEzLDM2NDE2LDM2NDE3LDM2NDI3LDM2NDI5LDM2NDMwLDM2NDMxLDM2NDM2LDM2NDQzLDM2NDQ0LDM2NDQ1LDM2NDQ2LDM2NDQ5LDM2NDUwLDM2NDU3LDM2NDYwLDM2NDYxLDM2NDYzLDM2NDY0LDM2NDY1LDM2NDczLDM2NDc0LDM2NDc1LDM2NDgyLDM2NDgzLDM2NDg5LDM2NDk2LDM2NDk4LDM2NTAxLDM2NTA2LDM2NTA3LDM2NTA5LDM2NTEwLDM2NTE0LDM2NTE5LDM2NTIxLDM2NTI1LDM2NTI2LDM2NTMxLDM2NTMzLDM2NTM4LDM2NTM5LDM2NTQ0LDM2NTQ1LDM2NTQ3LDM2NTQ4LDM2NTUxLDM2NTU5LDM2NTYxLDM2NTY0LDM2NTcyLDM2NTg0LDM2NTkwLDM2NTkyLDM2NTkzLDM2NTk5LDM2NjAxLDM2NjAyLDM2NTg5LDM2NjA4LDM2NjEwLDM2NjE1LDM2NjE2LDM2NjIzLDM2NjI0LDM2NjMwLDM2NjMxLDM2NjMyLDM2NjM4LDM2NjQwLDM2NjQxLDM2NjQzLDM2NjQ1LDM2NjQ3LDM2NjQ4LDM2NjUyLDM2NjUzLDM2NjU0LDM2NjYwLDM2NjYxLDM2NjYyLDM2NjYzLDM2NjY2LDM2NjcyLDM2NjczLDM2Njc1LDM2Njc5LDM2Njg3LDM2Njg5LDM2NjkwLDM2NjkxLDM2NjkyLDM2NjkzLDM2Njk2LDM2NzAxLDM2NzAyLDM2NzA5LDM2NzY1LDM2NzY4LDM2NzY5LDM2NzcyLDM2NzczLDM2Nzc0LDM2Nzg5LDM2NzkwLDM2NzkyLDM2Nzk4LDM2ODAwLDM2ODAxLDM2ODA2LDM2ODEwLDM2ODExLDM2ODEzLDM2ODE2LDM2ODE4LDM2ODE5LDM2ODIxLDM2ODMyLDM2ODM1LDM2ODM2LDM2ODQwLDM2ODQ2LDM2ODQ5LDM2ODUzLDM2ODU0LDM2ODU5LDM2ODYyLDM2ODY2LDM2ODY4LDM2ODcyLDM2ODc2LDM2ODg4LDM2ODkxLDM2OTA0LDM2OTA1LDM2OTExLDM2OTA2LDM2OTA4LDM2OTA5LDM2OTE1LDM2OTE2LDM2OTE5LDM2OTI3LDM2OTMxLDM2OTMyLDM2OTQwLDM2OTU1LDM2OTU3LDM2OTYyLDM2OTY2LDM2OTY3LDM2OTcyLDM2OTc2LDM2OTgwLDM2OTg1LDM2OTk3LDM3MDAwLDM3MDAzLDM3MDA0LDM3MDA2LDM3MDA4LDM3MDEzLDM3MDE1LDM3MDE2LDM3MDE3LDM3MDE5LDM3MDI0LDM3MDI1LDM3MDI2LDM3MDI5LDM3MDQwLDM3MDQyLDM3MDQzLDM3MDQ0LDM3MDQ2LDM3MDUzLDM3MDY4LDM3MDU0LDM3MDU5LDM3MDYwLDM3MDYxLDM3MDYzLDM3MDY0LDM3MDc3LDM3MDc5LDM3MDgwLDM3MDgxLDM3MDg0LDM3MDg1LDM3MDg3LDM3MDkzLDM3MDc0LDM3MTEwLDM3MDk5LDM3MTAzLDM3MTA0LDM3MTA4LDM3MTE4LDM3MTE5LDM3MTIwLDM3MTI0LDM3MTI1LDM3MTI2LDM3MTI4LDM3MTMzLDM3MTM2LDM3MTQwLDM3MTQyLDM3MTQzLDM3MTQ0LDM3MTQ2LDM3MTQ4LDM3MTUwLDM3MTUyLDM3MTU3LDM3MTU0LDM3MTU1LDM3MTU5LDM3MTYxLDM3MTY2LDM3MTY3LDM3MTY5LDM3MTcyLDM3MTc0LDM3MTc1LDM3MTc3LDM3MTc4LDM3MTgwLDM3MTgxLDM3MTg3LDM3MTkxLDM3MTkyLDM3MTk5LDM3MjAzLDM3MjA3LDM3MjA5LDM3MjEwLDM3MjExLDM3MjE3LDM3MjIwLDM3MjIzLDM3MjI5LDM3MjM2LDM3MjQxLDM3MjQyLDM3MjQzLDM3MjQ5LDM3MjUxLDM3MjUzLDM3MjU0LDM3MjU4LDM3MjYyLDM3MjY1LDM3MjY3LDM3MjY4LDM3MjY5LDM3MjcyLDM3Mjc4LDM3MjgxLDM3Mjg2LDM3Mjg4LDM3MjkyLDM3MjkzLDM3Mjk0LDM3Mjk2LDM3Mjk3LDM3Mjk4LDM3Mjk5LDM3MzAyLDM3MzA3LDM3MzA4LDM3MzA5LDM3MzExLDM3MzE0LDM3MzE1LDM3MzE3LDM3MzMxLDM3MzMyLDM3MzM1LDM3MzM3LDM3MzM4LDM3MzQyLDM3MzQ4LDM3MzQ5LDM3MzUzLDM3MzU0LDM3MzU2LDM3MzU3LDM3MzU4LDM3MzU5LDM3MzYwLDM3MzYxLDM3MzY3LDM3MzY5LDM3MzcxLDM3MzczLDM3Mzc2LDM3Mzc3LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg1LDM3Mzg2LDM3Mzg4LDM3MzkyLDM3Mzk0LDM3Mzk1LDM3Mzk4LDM3NDAwLDM3NDA0LDM3NDA1LDM3NDExLDM3NDEyLDM3NDEzLDM3NDE0LDM3NDE2LDM3NDIyLDM3NDIzLDM3NDI0LDM3NDI3LDM3NDI5LDM3NDMwLDM3NDMyLDM3NDMzLDM3NDM0LDM3NDM2LDM3NDM4LDM3NDQwLDM3NDQyLDM3NDQzLDM3NDQ2LDM3NDQ3LDM3NDUwLDM3NDUzLDM3NDU0LDM3NDU1LDM3NDU3LDM3NDY0LDM3NDY1LDM3NDY4LDM3NDY5LDM3NDcyLDM3NDczLDM3NDc3LDM3NDc5LDM3NDgwLDM3NDgxLDM3NDg2LDM3NDg3LDM3NDg4LDM3NDkzLDM3NDk0LDM3NDk1LDM3NDk2LDM3NDk3LDM3NDk5LDM3NTAwLDM3NTAxLDM3NTAzLDM3NTEyLDM3NTEzLDM3NTE0LDM3NTE3LDM3NTE4LDM3NTIyLDM3NTI3LDM3NTI5LDM3NTM1LDM3NTM2LDM3NTQwLDM3NTQxLDM3NTQzLDM3NTQ0LDM3NTQ3LDM3NTUxLDM3NTU0LDM3NTU4LDM3NTYwLDM3NTYyLDM3NTYzLDM3NTY0LDM3NTY1LDM3NTY3LDM3NTY4LDM3NTY5LDM3NTcwLDM3NTcxLDM3NTczLDM3NTc0LDM3NTc1LDM3NTc2LDM3NTc5LDM3NTgwLDM3NTgxLDM3NTgyLDM3NTg0LDM3NTg3LDM3NTg5LDM3NTkxLDM3NTkyLDM3NTkzLDM3NTk2LDM3NTk3LDM3NTk5LDM3NjAwLDM3NjAxLDM3NjAzLDM3NjA1LDM3NjA3LDM3NjA4LDM3NjEyLDM3NjE0LDM3NjE2LDM3NjI1LDM3NjI3LDM3NjMxLDM3NjMyLDM3NjM0LDM3NjQwLDM3NjQ1LDM3NjQ5LDM3NjUyLDM3NjUzLDM3NjYwLDM3NjYxLDM3NjYyLDM3NjYzLDM3NjY1LDM3NjY4LDM3NjY5LDM3NjcxLDM3NjczLDM3Njc0LDM3NjgzLDM3Njg0LDM3Njg2LDM3Njg3LDM3NzAzLDM3NzA0LDM3NzA1LDM3NzEyLDM3NzEzLDM3NzE0LDM3NzE3LDM3NzE5LDM3NzIwLDM3NzIyLDM3NzI2LDM3NzMyLDM3NzMzLDM3NzM1LDM3NzM3LDM3NzM4LDM3NzQxLDM3NzQzLDM3NzQ0LDM3NzQ1LDM3NzQ3LDM3NzQ4LDM3NzUwLDM3NzU0LDM3NzU3LDM3NzU5LDM3NzYwLDM3NzYxLDM3NzYyLDM3NzY4LDM3NzcwLDM3NzcxLDM3NzczLDM3Nzc1LDM3Nzc4LDM3NzgxLDM3Nzg0LDM3Nzg3LDM3NzkwLDM3NzkzLDM3Nzk1LDM3Nzk2LDM3Nzk4LDM3ODAwLDM3ODAzLDM3ODEyLDM3ODEzLDM3ODE0LDM3ODE4LDM3ODAxLDM3ODI1LDM3ODI4LDM3ODI5LDM3ODMwLDM3ODMxLDM3ODMzLDM3ODM0LDM3ODM1LDM3ODM2LDM3ODM3LDM3ODQzLDM3ODQ5LDM3ODUyLDM3ODU0LDM3ODU1LDM3ODU4LDM3ODYyLDM3ODYzLDM3ODgxLDM3ODc5LDM3ODgwLDM3ODgyLDM3ODgzLDM3ODg1LDM3ODg5LDM3ODkwLDM3ODkyLDM3ODk2LDM3ODk3LDM3OTAxLDM3OTAyLDM3OTAzLDM3OTA5LDM3OTEwLDM3OTExLDM3OTE5LDM3OTM0LDM3OTM1LDM3OTM3LDM3OTM4LDM3OTM5LDM3OTQwLDM3OTQ3LDM3OTUxLDM3OTQ5LDM3OTU1LDM3OTU3LDM3OTYwLDM3OTYyLDM3OTY0LDM3OTczLDM3OTc3LDM3OTgwLDM3OTgzLDM3OTg1LDM3OTg3LDM3OTkyLDM3OTk1LDM3OTk3LDM3OTk4LDM3OTk5LDM4MDAxLDM4MDAyLDM4MDIwLDM4MDE5LDM4MjY0LDM4MjY1LDM4MjcwLDM4Mjc2LDM4MjgwLDM4Mjg0LDM4Mjg1LDM4Mjg2LDM4MzAxLDM4MzAyLDM4MzAzLDM4MzA1LDM4MzEwLDM4MzEzLDM4MzE1LDM4MzE2LDM4MzI0LDM4MzI2LDM4MzMwLDM4MzMzLDM4MzM1LDM4MzQyLDM4MzQ0LDM4MzQ1LDM4MzQ3LDM4MzUyLDM4MzUzLDM4MzU0LDM4MzU1LDM4MzYxLDM4MzYyLDM4MzY1LDM4MzY2LDM4MzY3LDM4MzY4LDM4MzcyLDM4Mzc0LDM4NDI5LDM4NDMwLDM4NDM0LDM4NDM2LDM4NDM3LDM4NDM4LDM4NDQ0LDM4NDQ5LDM4NDUxLDM4NDU1LDM4NDU2LDM4NDU3LDM4NDU4LDM4NDYwLDM4NDYxLDM4NDY1LDM4NDgyLDM4NDg0LDM4NDg2LDM4NDg3LDM4NDg4LDM4NDk3LDM4NTEwLDM4NTE2LDM4NTIzLDM4NTI0LDM4NTI2LDM4NTI3LDM4NTI5LDM4NTMwLDM4NTMxLDM4NTMyLDM4NTM3LDM4NTQ1LDM4NTUwLDM4NTU0LDM4NTU3LDM4NTU5LDM4NTY0LDM4NTY1LDM4NTY2LDM4NTY5LDM4NTc0LDM4NTc1LDM4NTc5LDM4NTg2LDM4NjAyLDM4NjEwLDIzOTg2LDM4NjE2LDM4NjE4LDM4NjIxLDM4NjIyLDM4NjIzLDM4NjMzLDM4NjM5LDM4NjQxLDM4NjUwLDM4NjU4LDM4NjU5LDM4NjYxLDM4NjY1LDM4NjgyLDM4NjgzLDM4Njg1LDM4Njg5LDM4NjkwLDM4NjkxLDM4Njk2LDM4NzA1LDM4NzA3LDM4NzIxLDM4NzIzLDM4NzMwLDM4NzM0LDM4NzM1LDM4NzQxLDM4NzQzLDM4NzQ0LDM4NzQ2LDM4NzQ3LDM4NzU1LDM4NzU5LDM4NzYyLDM4NzY2LDM4NzcxLDM4Nzc0LDM4Nzc1LDM4Nzc2LDM4Nzc5LDM4NzgxLDM4NzgzLDM4Nzg0LDM4NzkzLDM4ODA1LDM4ODA2LDM4ODA3LDM4ODA5LDM4ODEwLDM4ODE0LDM4ODE1LDM4ODE4LDM4ODI4LDM4ODMwLDM4ODMzLDM4ODM0LDM4ODM3LDM4ODM4LDM4ODQwLDM4ODQxLDM4ODQyLDM4ODQ0LDM4ODQ2LDM4ODQ3LDM4ODQ5LDM4ODUyLDM4ODUzLDM4ODU1LDM4ODU3LDM4ODU4LDM4ODYwLDM4ODYxLDM4ODYyLDM4ODY0LDM4ODY1LDM4ODY4LDM4ODcxLDM4ODcyLDM4ODczLDM4ODc3LDM4ODc4LDM4ODgwLDM4ODc1LDM4ODgxLDM4ODg0LDM4ODk1LDM4ODk3LDM4OTAwLDM4OTAzLDM4OTA0LDM4OTA2LDM4OTE5LDM4OTIyLDM4OTM3LDM4OTI1LDM4OTI2LDM4OTMyLDM4OTM0LDM4OTQwLDM4OTQyLDM4OTQ0LDM4OTQ3LDM4OTUwLDM4OTU1LDM4OTU4LDM4OTU5LDM4OTYwLDM4OTYyLDM4OTYzLDM4OTY1LDM4OTQ5LDM4OTc0LDM4OTgwLDM4OTgzLDM4OTg2LDM4OTkzLDM4OTk0LDM4OTk1LDM4OTk4LDM4OTk5LDM5MDAxLDM5MDAyLDM5MDEwLDM5MDExLDM5MDEzLDM5MDE0LDM5MDE4LDM5MDIwLDM5MDgzLDM5MDg1LDM5MDg2LDM5MDg4LDM5MDkyLDM5MDk1LDM5MDk2LDM5MDk4LDM5MDk5LDM5MTAzLDM5MTA2LDM5MTA5LDM5MTEyLDM5MTE2LDM5MTM3LDM5MTM5LDM5MTQxLDM5MTQyLDM5MTQzLDM5MTQ2LDM5MTU1LDM5MTU4LDM5MTcwLDM5MTc1LDM5MTc2LDM5MTg1LDM5MTg5LDM5MTkwLDM5MTkxLDM5MTk0LDM5MTk1LDM5MTk2LDM5MTk5LDM5MjAyLDM5MjA2LDM5MjA3LDM5MjExLDM5MjE3LDM5MjE4LDM5MjE5LDM5MjIwLDM5MjIxLDM5MjI1LDM5MjI2LDM5MjI3LDM5MjI4LDM5MjMyLDM5MjMzLDM5MjM4LDM5MjM5LDM5MjQwLDM5MjQ1LDM5MjQ2LDM5MjUyLDM5MjU2LDM5MjU3LDM5MjU5LDM5MjYwLDM5MjYyLDM5MjYzLDM5MjY0LDM5MzIzLDM5MzI1LDM5MzI3LDM5MzM0LDM5MzQ0LDM5MzQ1LDM5MzQ2LDM5MzQ5LDM5MzUzLDM5MzU0LDM5MzU3LDM5MzU5LDM5MzYzLDM5MzY5LDM5Mzc5LDM5MzgwLDM5Mzg1LDM5Mzg2LDM5Mzg4LDM5MzkwLDM5Mzk5LDM5NDAyLDM5NDAzLDM5NDA0LDM5NDA4LDM5NDEyLDM5NDEzLDM5NDE3LDM5NDIxLDM5NDIyLDM5NDI2LDM5NDI3LDM5NDI4LDM5NDM1LDM5NDM2LDM5NDQwLDM5NDQxLDM5NDQ2LDM5NDU0LDM5NDU2LDM5NDU4LDM5NDU5LDM5NDYwLDM5NDYzLDM5NDY5LDM5NDcwLDM5NDc1LDM5NDc3LDM5NDc4LDM5NDgwLDM5NDk1LDM5NDg5LDM5NDkyLDM5NDk4LDM5NDk5LDM5NTAwLDM5NTAyLDM5NTA1LDM5NTA4LDM5NTEwLDM5NTE3LDM5NTk0LDM5NTk2LDM5NTk4LDM5NTk5LDM5NjAyLDM5NjA0LDM5NjA1LDM5NjA2LDM5NjA5LDM5NjExLDM5NjE0LDM5NjE1LDM5NjE3LDM5NjE5LDM5NjIyLDM5NjI0LDM5NjMwLDM5NjMyLDM5NjM0LDM5NjM3LDM5NjM4LDM5NjM5LDM5NjQzLDM5NjQ0LDM5NjQ4LDM5NjUyLDM5NjUzLDM5NjU1LDM5NjU3LDM5NjYwLDM5NjY2LDM5NjY3LDM5NjY5LDM5NjczLDM5Njc0LDM5Njc3LDM5Njc5LDM5NjgwLDM5NjgxLDM5NjgyLDM5NjgzLDM5Njg0LDM5Njg1LDM5Njg4LDM5Njg5LDM5NjkxLDM5NjkyLDM5NjkzLDM5Njk0LDM5Njk2LDM5Njk4LDM5NzAyLDM5NzA1LDM5NzA3LDM5NzA4LDM5NzEyLDM5NzE4LDM5NzIzLDM5NzI1LDM5NzMxLDM5NzMyLDM5NzMzLDM5NzM1LDM5NzM3LDM5NzM4LDM5NzQxLDM5NzUyLDM5NzU1LDM5NzU2LDM5NzY1LDM5NzY2LDM5NzY3LDM5NzcxLDM5Nzc0LDM5Nzc3LDM5Nzc5LDM5NzgxLDM5NzgyLDM5Nzg0LDM5Nzg2LDM5Nzg3LDM5Nzg4LDM5Nzg5LDM5NzkwLDM5Nzk1LDM5Nzk3LDM5Nzk5LDM5ODAwLDM5ODAxLDM5ODA3LDM5ODA4LDM5ODEyLDM5ODEzLDM5ODE0LDM5ODE1LDM5ODE3LDM5ODE4LDM5ODE5LDM5ODIxLDM5ODIzLDM5ODI0LDM5ODI4LDM5ODM0LDM5ODM3LDM5ODM4LDM5ODQ2LDM5ODQ3LDM5ODQ5LDM5ODUyLDM5ODU2LDM5ODU3LDM5ODU4LDM5ODYzLDM5ODY0LDM5ODY3LDM5ODY4LDM5ODcwLDM5ODcxLDM5ODczLDM5ODc5LDM5ODgwLDM5ODg2LDM5ODg4LDM5ODk1LDM5ODk2LDM5OTAxLDM5OTAzLDM5OTA5LDM5OTExLDM5OTE0LDM5OTE1LDM5OTE5LDM5OTIzLDM5OTI3LDM5OTI4LDM5OTI5LDM5OTMwLDM5OTMzLDM5OTM1LDM5OTM2LDM5OTM4LDM5OTQ3LDM5OTUxLDM5OTUzLDM5OTU4LDM5OTYwLDM5OTYxLDM5OTYyLDM5OTY0LDM5OTY2LDM5OTcwLDM5OTcxLDM5OTc0LDM5OTc1LDM5OTc2LDM5OTc3LDM5OTc4LDM5OTg1LDM5OTg5LDM5OTkwLDM5OTkxLDM5OTk3LDQwMDAxLDQwMDAzLDQwMDA0LDQwMDA1LDQwMDA5LDQwMDEwLDQwMDE0LDQwMDE1LDQwMDE2LDQwMDE5LDQwMDIwLDQwMDIyLDQwMDI0LDQwMDI3LDQwMDI5LDQwMDMwLDQwMDMxLDQwMDM1LDQwMDQxLDQwMDQyLDQwMDI4LDQwMDQzLDQwMDQwLDQwMDQ2LDQwMDQ4LDQwMDUwLDQwMDUzLDQwMDU1LDQwMDU5LDQwMTY2LDQwMTc4LDQwMTgzLDQwMTg1LDQwMjAzLDQwMTk0LDQwMjA5LDQwMjE1LDQwMjE2LDQwMjIwLDQwMjIxLDQwMjIyLDQwMjM5LDQwMjQwLDQwMjQyLDQwMjQzLDQwMjQ0LDQwMjUwLDQwMjUyLDQwMjYxLDQwMjUzLDQwMjU4LDQwMjU5LDQwMjYzLDQwMjY2LDQwMjc1LDQwMjc2LDQwMjg3LDQwMjkxLDQwMjkwLDQwMjkzLDQwMjk3LDQwMjk4LDQwMjk5LDQwMzA0LDQwMzEwLDQwMzExLDQwMzE1LDQwMzE2LDQwMzE4LDQwMzIzLDQwMzI0LDQwMzI2LDQwMzMwLDQwMzMzLDQwMzM0LDQwMzM4LDQwMzM5LDQwMzQxLDQwMzQyLDQwMzQzLDQwMzQ0LDQwMzUzLDQwMzYyLDQwMzY0LDQwMzY2LDQwMzY5LDQwMzczLDQwMzc3LDQwMzgwLDQwMzgzLDQwMzg3LDQwMzkxLDQwMzkzLDQwMzk0LDQwNDA0LDQwNDA1LDQwNDA2LDQwNDA3LDQwNDEwLDQwNDE0LDQwNDE1LDQwNDE2LDQwNDIxLDQwNDIzLDQwNDI1LDQwNDI3LDQwNDMwLDQwNDMyLDQwNDM1LDQwNDM2LDQwNDQ2LDQwNDU4LDQwNDUwLDQwNDU1LDQwNDYyLDQwNDY0LDQwNDY1LDQwNDY2LDQwNDY5LDQwNDcwLDQwNDczLDQwNDc2LDQwNDc3LDQwNTcwLDQwNTcxLDQwNTcyLDQwNTc2LDQwNTc4LDQwNTc5LDQwNTgwLDQwNTgxLDQwNTgzLDQwNTkwLDQwNTkxLDQwNTk4LDQwNjAwLDQwNjAzLDQwNjA2LDQwNjEyLDQwNjE2LDQwNjIwLDQwNjIyLDQwNjIzLDQwNjI0LDQwNjI3LDQwNjI4LDQwNjI5LDQwNjQ2LDQwNjQ4LDQwNjUxLDQwNjYxLDQwNjcxLDQwNjc2LDQwNjc5LDQwNjg0LDQwNjg1LDQwNjg2LDQwNjg4LDQwNjg5LDQwNjkwLDQwNjkzLDQwNjk2LDQwNzAzLDQwNzA2LDQwNzA3LDQwNzEzLDQwNzE5LDQwNzIwLDQwNzIxLDQwNzIyLDQwNzI0LDQwNzI2LDQwNzI3LDQwNzI5LDQwNzMwLDQwNzMxLDQwNzM1LDQwNzM4LDQwNzQyLDQwNzQ2LDQwNzQ3LDQwNzUxLDQwNzUzLDQwNzU0LDQwNzU2LDQwNzU5LDQwNzYxLDQwNzYyLDQwNzY0LDQwNzY1LDQwNzY3LDQwNzY5LDQwNzcxLDQwNzcyLDQwNzczLDQwNzc0LDQwNzc1LDQwNzg3LDQwNzg5LDQwNzkwLDQwNzkxLDQwNzkyLDQwNzk0LDQwNzk3LDQwNzk4LDQwODA4LDQwODA5LDQwODEzLDQwODE0LDQwODE1LDQwODE2LDQwODE3LDQwODE5LDQwODIxLDQwODI2LDQwODI5LDQwODQ3LDQwODQ4LDQwODQ5LDQwODUwLDQwODUyLDQwODU0LDQwODU1LDQwODYyLDQwODY1LDQwODY2LDQwODY3LDQwODY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sXG4gIFwiaWJtODY2XCI6WzEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDk2MTcsOTYxOCw5NjE5LDk0NzQsOTUwOCw5NTY5LDk1NzAsOTU1OCw5NTU3LDk1NzEsOTU1Myw5NTU5LDk1NjUsOTU2NCw5NTYzLDk0ODgsOTQ5Miw5NTI0LDk1MTYsOTUwMCw5NDcyLDk1MzIsOTU2Niw5NTY3LDk1NjIsOTU1Niw5NTc3LDk1NzQsOTU2OCw5NTUyLDk1ODAsOTU3NSw5NTc2LDk1NzIsOTU3Myw5NTYxLDk1NjAsOTU1NCw5NTU1LDk1NzksOTU3OCw5NDk2LDk0ODQsOTYwOCw5NjA0LDk2MTIsOTYxNiw5NjAwLDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTAyNSwxMTA1LDEwMjgsMTEwOCwxMDMxLDExMTEsMTAzOCwxMTE4LDE3Niw4NzI5LDE4Myw4NzMwLDg0NzAsMTY0LDk2MzIsMTYwXSxcbiAgXCJpc28tODg1OS0yXCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCw3MjgsMzIxLDE2NCwzMTcsMzQ2LDE2NywxNjgsMzUyLDM1MCwzNTYsMzc3LDE3MywzODEsMzc5LDE3NiwyNjEsNzMxLDMyMiwxODAsMzE4LDM0Nyw3MTEsMTg0LDM1MywzNTEsMzU3LDM3OCw3MzMsMzgyLDM4MCwzNDAsMTkzLDE5NCwyNTgsMTk2LDMxMywyNjIsMTk5LDI2OCwyMDEsMjgwLDIwMywyODIsMjA1LDIwNiwyNzAsMjcyLDMyMywzMjcsMjExLDIxMiwzMzYsMjE0LDIxNSwzNDQsMzY2LDIxOCwzNjgsMjIwLDIyMSwzNTQsMjIzLDM0MSwyMjUsMjI2LDI1OSwyMjgsMzE0LDI2MywyMzEsMjY5LDIzMywyODEsMjM1LDI4MywyMzcsMjM4LDI3MSwyNzMsMzI0LDMyOCwyNDMsMjQ0LDMzNywyNDYsMjQ3LDM0NSwzNjcsMjUwLDM2OSwyNTIsMjUzLDM1NSw3MjldLFxuICBcImlzby04ODU5LTNcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjk0LDcyOCwxNjMsMTY0LG51bGwsMjkyLDE2NywxNjgsMzA0LDM1MCwyODYsMzA4LDE3MyxudWxsLDM3OSwxNzYsMjk1LDE3OCwxNzksMTgwLDE4MSwyOTMsMTgzLDE4NCwzMDUsMzUxLDI4NywzMDksMTg5LG51bGwsMzgwLDE5MiwxOTMsMTk0LG51bGwsMTk2LDI2NiwyNjQsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsbnVsbCwyMDksMjEwLDIxMSwyMTIsMjg4LDIxNCwyMTUsMjg0LDIxNywyMTgsMjE5LDIyMCwzNjQsMzQ4LDIyMywyMjQsMjI1LDIyNixudWxsLDIyOCwyNjcsMjY1LDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LG51bGwsMjQxLDI0MiwyNDMsMjQ0LDI4OSwyNDYsMjQ3LDI4NSwyNDksMjUwLDI1MSwyNTIsMzY1LDM0OSw3MjldLFxuICBcImlzby04ODU5LTRcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjYwLDMxMiwzNDIsMTY0LDI5NiwzMTUsMTY3LDE2OCwzNTIsMjc0LDI5MCwzNTgsMTczLDM4MSwxNzUsMTc2LDI2MSw3MzEsMzQzLDE4MCwyOTcsMzE2LDcxMSwxODQsMzUzLDI3NSwyOTEsMzU5LDMzMCwzODIsMzMxLDI1NiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwzMDIsMjY4LDIwMSwyODAsMjAzLDI3OCwyMDUsMjA2LDI5OCwyNzIsMzI1LDMzMiwzMTAsMjEyLDIxMywyMTQsMjE1LDIxNiwzNzAsMjE4LDIxOSwyMjAsMzYwLDM2MiwyMjMsMjU3LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDMwMywyNjksMjMzLDI4MSwyMzUsMjc5LDIzNywyMzgsMjk5LDI3MywzMjYsMzMzLDMxMSwyNDQsMjQ1LDI0NiwyNDcsMjQ4LDM3MSwyNTAsMjUxLDI1MiwzNjEsMzYzLDcyOV0sXG4gIFwiaXNvLTg4NTktNVwiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxNzMsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsODQ3MCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxNjcsMTExOCwxMTE5XSxcbiAgXCJpc28tODg1OS02XCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLG51bGwsbnVsbCxudWxsLDE2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE1NDgsMTczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTU2MyxudWxsLG51bGwsbnVsbCwxNTY3LG51bGwsMTU2OSwxNTcwLDE1NzEsMTU3MiwxNTczLDE1NzQsMTU3NSwxNTc2LDE1NzcsMTU3OCwxNTc5LDE1ODAsMTU4MSwxNTgyLDE1ODMsMTU4NCwxNTg1LDE1ODYsMTU4NywxNTg4LDE1ODksMTU5MCwxNTkxLDE1OTIsMTU5MywxNTk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNjAwLDE2MDEsMTYwMiwxNjAzLDE2MDQsMTYwNSwxNjA2LDE2MDcsMTYwOCwxNjA5LDE2MTAsMTYxMSwxNjEyLDE2MTMsMTYxNCwxNjE1LDE2MTYsMTYxNywxNjE4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFxuICBcImlzby04ODU5LTdcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsODIxNiw4MjE3LDE2Myw4MzY0LDgzNjcsMTY2LDE2NywxNjgsMTY5LDg5MCwxNzEsMTcyLDE3MyxudWxsLDgyMTMsMTc2LDE3NywxNzgsMTc5LDkwMCw5MDEsOTAyLDE4Myw5MDQsOTA1LDkwNiwxODcsOTA4LDE4OSw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LG51bGwsOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCxudWxsXSxcbiAgXCJpc28tODg1OS04XCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLG51bGwsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwyMTUsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMjQ3LDE4NywxODgsMTg5LDE5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODIxNSwxNDg4LDE0ODksMTQ5MCwxNDkxLDE0OTIsMTQ5MywxNDk0LDE0OTUsMTQ5NiwxNDk3LDE0OTgsMTQ5OSwxNTAwLDE1MDEsMTUwMiwxNTAzLDE1MDQsMTUwNSwxNTA2LDE1MDcsMTUwOCwxNTA5LDE1MTAsMTUxMSwxNTEyLDE1MTMsMTUxNCxudWxsLG51bGwsODIwNiw4MjA3LG51bGxdLFxuICBcImlzby04ODU5LTEwXCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCwyNzQsMjkwLDI5OCwyOTYsMzEwLDE2NywzMTUsMjcyLDM1MiwzNTgsMzgxLDE3MywzNjIsMzMwLDE3NiwyNjEsMjc1LDI5MSwyOTksMjk3LDMxMSwxODMsMzE2LDI3MywzNTMsMzU5LDM4Miw4MjEzLDM2MywzMzEsMjU2LDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDMwMiwyNjgsMjAxLDI4MCwyMDMsMjc4LDIwNSwyMDYsMjA3LDIwOCwzMjUsMzMyLDIxMSwyMTIsMjEzLDIxNCwzNjAsMjE2LDM3MCwyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyNTcsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMzAzLDI2OSwyMzMsMjgxLDIzNSwyNzksMjM3LDIzOCwyMzksMjQwLDMyNiwzMzMsMjQzLDI0NCwyNDUsMjQ2LDM2MSwyNDgsMzcxLDI1MCwyNTEsMjUyLDI1MywyNTQsMzEyXSxcbiAgXCJpc28tODg1OS0xM1wiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCw4MjIxLDE2MiwxNjMsMTY0LDgyMjIsMTY2LDE2NywyMTYsMTY5LDM0MiwxNzEsMTcyLDE3MywxNzQsMTk4LDE3NiwxNzcsMTc4LDE3OSw4MjIwLDE4MSwxODIsMTgzLDI0OCwxODUsMzQzLDE4NywxODgsMTg5LDE5MCwyMzAsMjYwLDMwMiwyNTYsMjYyLDE5NiwxOTcsMjgwLDI3NCwyNjgsMjAxLDM3NywyNzgsMjkwLDMxMCwyOTgsMzE1LDM1MiwzMjMsMzI1LDIxMSwzMzIsMjEzLDIxNCwyMTUsMzcwLDMyMSwzNDYsMzYyLDIyMCwzNzksMzgxLDIyMywyNjEsMzAzLDI1NywyNjMsMjI4LDIyOSwyODEsMjc1LDI2OSwyMzMsMzc4LDI3OSwyOTEsMzExLDI5OSwzMTYsMzUzLDMyNCwzMjYsMjQzLDMzMywyNDUsMjQ2LDI0NywzNzEsMzIyLDM0NywzNjMsMjUyLDM4MCwzODIsODIxN10sXG4gIFwiaXNvLTg4NTktMTRcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsNzY4Miw3NjgzLDE2MywyNjYsMjY3LDc2OTAsMTY3LDc4MDgsMTY5LDc4MTAsNzY5MSw3OTIyLDE3MywxNzQsMzc2LDc3MTAsNzcxMSwyODgsMjg5LDc3NDQsNzc0NSwxODIsNzc2Niw3ODA5LDc3NjcsNzgxMSw3Nzc2LDc5MjMsNzgxMiw3ODEzLDc3NzcsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDM3MiwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCw3Nzg2LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDM3NCwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDM3MywyNDEsMjQyLDI0MywyNDQsMjQ1LDI0Niw3Nzg3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDM3NSwyNTVdLFxuICBcImlzby04ODU5LTE1XCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDE2MSwxNjIsMTYzLDgzNjQsMTY1LDM1MiwxNjcsMzUzLDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMzgxLDE4MSwxODIsMTgzLDM4MiwxODUsMTg2LDE4NywzMzgsMzM5LDM3NiwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1XSxcbiAgXCJpc28tODg1OS0xNlwiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsMjYxLDMyMSw4MzY0LDgyMjIsMzUyLDE2NywzNTMsMTY5LDUzNiwxNzEsMzc3LDE3MywzNzgsMzc5LDE3NiwxNzcsMjY4LDMyMiwzODEsODIyMSwxODIsMTgzLDM4MiwyNjksNTM3LDE4NywzMzgsMzM5LDM3NiwzODAsMTkyLDE5MywxOTQsMjU4LDE5NiwyNjIsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDI3MiwzMjMsMjEwLDIxMSwyMTIsMzM2LDIxNCwzNDYsMzY4LDIxNywyMTgsMjE5LDIyMCwyODAsNTM4LDIyMywyMjQsMjI1LDIyNiwyNTksMjI4LDI2MywyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjczLDMyNCwyNDIsMjQzLDI0NCwzMzcsMjQ2LDM0NywzNjksMjQ5LDI1MCwyNTEsMjUyLDI4MSw1MzksMjU1XSxcbiAgXCJrb2k4LXJcIjpbOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw4OTkyLDk2MzIsODcyOSw4NzMwLDg3NzYsODgwNCw4ODA1LDE2MCw4OTkzLDE3NiwxNzgsMTgzLDI0Nyw5NTUyLDk1NTMsOTU1NCwxMTA1LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDEwMjUsOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDE2OSwxMTAyLDEwNzIsMTA3MywxMDk0LDEwNzYsMTA3NywxMDkyLDEwNzUsMTA5MywxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTEwMywxMDg4LDEwODksMTA5MCwxMDkxLDEwNzgsMTA3NCwxMTAwLDEwOTksMTA3OSwxMDk2LDExMDEsMTA5NywxMDk1LDEwOTgsMTA3MCwxMDQwLDEwNDEsMTA2MiwxMDQ0LDEwNDUsMTA2MCwxMDQzLDEwNjEsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNzEsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDQ2LDEwNDIsMTA2OCwxMDY3LDEwNDcsMTA2NCwxMDY5LDEwNjUsMTA2MywxMDY2XSxcbiAgXCJrb2k4LXVcIjpbOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw4OTkyLDk2MzIsODcyOSw4NzMwLDg3NzYsODgwNCw4ODA1LDE2MCw4OTkzLDE3NiwxNzgsMTgzLDI0Nyw5NTUyLDk1NTMsOTU1NCwxMTA1LDExMDgsOTU1NiwxMTEwLDExMTEsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDExNjksMTExOCw5NTY2LDk1NjcsOTU2OCw5NTY5LDEwMjUsMTAyOCw5NTcxLDEwMzAsMTAzMSw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsMTE2OCwxMDM4LDE2OSwxMTAyLDEwNzIsMTA3MywxMDk0LDEwNzYsMTA3NywxMDkyLDEwNzUsMTA5MywxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTEwMywxMDg4LDEwODksMTA5MCwxMDkxLDEwNzgsMTA3NCwxMTAwLDEwOTksMTA3OSwxMDk2LDExMDEsMTA5NywxMDk1LDEwOTgsMTA3MCwxMDQwLDEwNDEsMTA2MiwxMDQ0LDEwNDUsMTA2MCwxMDQzLDEwNjEsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNzEsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDQ2LDEwNDIsMTA2OCwxMDY3LDEwNDcsMTA2NCwxMDY5LDEwNjUsMTA2MywxMDY2XSxcbiAgXCJtYWNpbnRvc2hcIjpbMTk2LDE5NywxOTksMjAxLDIwOSwyMTQsMjIwLDIyNSwyMjQsMjI2LDIyOCwyMjcsMjI5LDIzMSwyMzMsMjMyLDIzNCwyMzUsMjM3LDIzNiwyMzgsMjM5LDI0MSwyNDMsMjQyLDI0NCwyNDYsMjQ1LDI1MCwyNDksMjUxLDI1Miw4MjI0LDE3NiwxNjIsMTYzLDE2Nyw4MjI2LDE4MiwyMjMsMTc0LDE2OSw4NDgyLDE4MCwxNjgsODgwMCwxOTgsMjE2LDg3MzQsMTc3LDg4MDQsODgwNSwxNjUsMTgxLDg3MDYsODcyMSw4NzE5LDk2MCw4NzQ3LDE3MCwxODYsOTM3LDIzMCwyNDgsMTkxLDE2MSwxNzIsODczMCw0MDIsODc3Niw4NzEwLDE3MSwxODcsODIzMCwxNjAsMTkyLDE5NSwyMTMsMzM4LDMzOSw4MjExLDgyMTIsODIyMCw4MjIxLDgyMTYsODIxNywyNDcsOTY3NCwyNTUsMzc2LDgyNjAsODM2NCw4MjQ5LDgyNTAsNjQyNTcsNjQyNTgsODIyNSwxODMsODIxOCw4MjIyLDgyNDAsMTk0LDIwMiwxOTMsMjAzLDIwMCwyMDUsMjA2LDIwNywyMDQsMjExLDIxMiw2Mzc0MywyMTAsMjE4LDIxOSwyMTcsMzA1LDcxMCw3MzIsMTc1LDcyOCw3MjksNzMwLDE4NCw3MzMsNzMxLDcxMV0sXG4gIFwid2luZG93cy04NzRcIjpbODM2NCwxMjksMTMwLDEzMSwxMzIsODIzMCwxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMzU4NSwzNTg2LDM1ODcsMzU4OCwzNTg5LDM1OTAsMzU5MSwzNTkyLDM1OTMsMzU5NCwzNTk1LDM1OTYsMzU5NywzNTk4LDM1OTksMzYwMCwzNjAxLDM2MDIsMzYwMywzNjA0LDM2MDUsMzYwNiwzNjA3LDM2MDgsMzYwOSwzNjEwLDM2MTEsMzYxMiwzNjEzLDM2MTQsMzYxNSwzNjE2LDM2MTcsMzYxOCwzNjE5LDM2MjAsMzYyMSwzNjIyLDM2MjMsMzYyNCwzNjI1LDM2MjYsMzYyNywzNjI4LDM2MjksMzYzMCwzNjMxLDM2MzIsMzYzMywzNjM0LDM2MzUsMzYzNiwzNjM3LDM2MzgsMzYzOSwzNjQwLDM2NDEsMzY0MixudWxsLG51bGwsbnVsbCxudWxsLDM2NDcsMzY0OCwzNjQ5LDM2NTAsMzY1MSwzNjUyLDM2NTMsMzY1NCwzNjU1LDM2NTYsMzY1NywzNjU4LDM2NTksMzY2MCwzNjYxLDM2NjIsMzY2MywzNjY0LDM2NjUsMzY2NiwzNjY3LDM2NjgsMzY2OSwzNjcwLDM2NzEsMzY3MiwzNjczLDM2NzQsMzY3NSxudWxsLG51bGwsbnVsbCxudWxsXSxcbiAgXCJ3aW5kb3dzLTEyNTBcIjpbODM2NCwxMjksODIxOCwxMzEsODIyMiw4MjMwLDgyMjQsODIyNSwxMzYsODI0MCwzNTIsODI0OSwzNDYsMzU2LDM4MSwzNzcsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMzUzLDgyNTAsMzQ3LDM1NywzODIsMzc4LDE2MCw3MTEsNzI4LDMyMSwxNjQsMjYwLDE2NiwxNjcsMTY4LDE2OSwzNTAsMTcxLDE3MiwxNzMsMTc0LDM3OSwxNzYsMTc3LDczMSwzMjIsMTgwLDE4MSwxODIsMTgzLDE4NCwyNjEsMzUxLDE4NywzMTcsNzMzLDMxOCwzODAsMzQwLDE5MywxOTQsMjU4LDE5NiwzMTMsMjYyLDE5OSwyNjgsMjAxLDI4MCwyMDMsMjgyLDIwNSwyMDYsMjcwLDI3MiwzMjMsMzI3LDIxMSwyMTIsMzM2LDIxNCwyMTUsMzQ0LDM2NiwyMTgsMzY4LDIyMCwyMjEsMzU0LDIyMywzNDEsMjI1LDIyNiwyNTksMjI4LDMxNCwyNjMsMjMxLDI2OSwyMzMsMjgxLDIzNSwyODMsMjM3LDIzOCwyNzEsMjczLDMyNCwzMjgsMjQzLDI0NCwzMzcsMjQ2LDI0NywzNDUsMzY3LDI1MCwzNjksMjUyLDI1MywzNTUsNzI5XSxcbiAgXCJ3aW5kb3dzLTEyNTFcIjpbMTAyNiwxMDI3LDgyMTgsMTEwNyw4MjIyLDgyMzAsODIyNCw4MjI1LDgzNjQsODI0MCwxMDMzLDgyNDksMTAzNCwxMDM2LDEwMzUsMTAzOSwxMTA2LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMTExMyw4MjUwLDExMTQsMTExNiwxMTE1LDExMTksMTYwLDEwMzgsMTExOCwxMDMyLDE2NCwxMTY4LDE2NiwxNjcsMTAyNSwxNjksMTAyOCwxNzEsMTcyLDE3MywxNzQsMTAzMSwxNzYsMTc3LDEwMzAsMTExMCwxMTY5LDE4MSwxODIsMTgzLDExMDUsODQ3MCwxMTA4LDE4NywxMTEyLDEwMjksMTEwOSwxMTExLDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDNdLFxuICBcIndpbmRvd3MtMTI1MlwiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDM1Miw4MjQ5LDMzOCwxNDEsMzgxLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwzNTMsODI1MCwzMzksMTU3LDM4MiwzNzYsMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTVdLFxuICBcIndpbmRvd3MtMTI1M1wiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDEzNiw4MjQwLDEzOCw4MjQ5LDE0MCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwxNTQsODI1MCwxNTYsMTU3LDE1OCwxNTksMTYwLDkwMSw5MDIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LG51bGwsMTcxLDE3MiwxNzMsMTc0LDgyMTMsMTc2LDE3NywxNzgsMTc5LDkwMCwxODEsMTgyLDE4Myw5MDQsOTA1LDkwNiwxODcsOTA4LDE4OSw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LG51bGwsOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCxudWxsXSxcbiAgXCJ3aW5kb3dzLTEyNTRcIjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwzNTIsODI0OSwzMzgsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0ODIsMzUzLDgyNTAsMzM5LDE1NywxNTgsMzc2LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDI4NiwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwzMDQsMzUwLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjg3LDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDMwNSwzNTEsMjU1XSxcbiAgXCJ3aW5kb3dzLTEyNTVcIjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwxMzgsODI0OSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0ODIsMTU0LDgyNTAsMTU2LDE1NywxNTgsMTU5LDE2MCwxNjEsMTYyLDE2Myw4MzYyLDE2NSwxNjYsMTY3LDE2OCwxNjksMjE1LDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDI0NywxODcsMTg4LDE4OSwxOTAsMTkxLDE0NTYsMTQ1NywxNDU4LDE0NTksMTQ2MCwxNDYxLDE0NjIsMTQ2MywxNDY0LDE0NjUsbnVsbCwxNDY3LDE0NjgsMTQ2OSwxNDcwLDE0NzEsMTQ3MiwxNDczLDE0NzQsMTQ3NSwxNTIwLDE1MjEsMTUyMiwxNTIzLDE1MjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNDg4LDE0ODksMTQ5MCwxNDkxLDE0OTIsMTQ5MywxNDk0LDE0OTUsMTQ5NiwxNDk3LDE0OTgsMTQ5OSwxNTAwLDE1MDEsMTUwMiwxNTAzLDE1MDQsMTUwNSwxNTA2LDE1MDcsMTUwOCwxNTA5LDE1MTAsMTUxMSwxNTEyLDE1MTMsMTUxNCxudWxsLG51bGwsODIwNiw4MjA3LG51bGxdLFxuICBcIndpbmRvd3MtMTI1NlwiOls4MzY0LDE2NjIsODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwxNjU3LDgyNDksMzM4LDE2NzAsMTY4OCwxNjcyLDE3MTEsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNzA1LDg0ODIsMTY4MSw4MjUwLDMzOSw4MjA0LDgyMDUsMTcyMiwxNjAsMTU0OCwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MjYsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTU2MywxODcsMTg4LDE4OSwxOTAsMTU2NywxNzI5LDE1NjksMTU3MCwxNTcxLDE1NzIsMTU3MywxNTc0LDE1NzUsMTU3NiwxNTc3LDE1NzgsMTU3OSwxNTgwLDE1ODEsMTU4MiwxNTgzLDE1ODQsMTU4NSwxNTg2LDE1ODcsMTU4OCwxNTg5LDE1OTAsMjE1LDE1OTEsMTU5MiwxNTkzLDE1OTQsMTYwMCwxNjAxLDE2MDIsMTYwMywyMjQsMTYwNCwyMjYsMTYwNSwxNjA2LDE2MDcsMTYwOCwyMzEsMjMyLDIzMywyMzQsMjM1LDE2MDksMTYxMCwyMzgsMjM5LDE2MTEsMTYxMiwxNjEzLDE2MTQsMjQ0LDE2MTUsMTYxNiwyNDcsMTYxNywyNDksMTYxOCwyNTEsMjUyLDgyMDYsODIwNywxNzQ2XSxcbiAgXCJ3aW5kb3dzLTEyNTdcIjpbODM2NCwxMjksODIxOCwxMzEsODIyMiw4MjMwLDgyMjQsODIyNSwxMzYsODI0MCwxMzgsODI0OSwxNDAsMTY4LDcxMSwxODQsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMTU0LDgyNTAsMTU2LDE3NSw3MzEsMTU5LDE2MCxudWxsLDE2MiwxNjMsMTY0LG51bGwsMTY2LDE2NywyMTYsMTY5LDM0MiwxNzEsMTcyLDE3MywxNzQsMTk4LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMjQ4LDE4NSwzNDMsMTg3LDE4OCwxODksMTkwLDIzMCwyNjAsMzAyLDI1NiwyNjIsMTk2LDE5NywyODAsMjc0LDI2OCwyMDEsMzc3LDI3OCwyOTAsMzEwLDI5OCwzMTUsMzUyLDMyMywzMjUsMjExLDMzMiwyMTMsMjE0LDIxNSwzNzAsMzIxLDM0NiwzNjIsMjIwLDM3OSwzODEsMjIzLDI2MSwzMDMsMjU3LDI2MywyMjgsMjI5LDI4MSwyNzUsMjY5LDIzMywzNzgsMjc5LDI5MSwzMTEsMjk5LDMxNiwzNTMsMzI0LDMyNiwyNDMsMzMzLDI0NSwyNDYsMjQ3LDM3MSwzMjIsMzQ3LDM2MywyNTIsMzgwLDM4Miw3MjldLFxuICBcIndpbmRvd3MtMTI1OFwiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDEzOCw4MjQ5LDMzOCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwxNTQsODI1MCwzMzksMTU3LDE1OCwzNzYsMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwyNTgsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMyw3NjgsMjA1LDIwNiwyMDcsMjcyLDIwOSw3NzcsMjExLDIxMiw0MTYsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDQzMSw3NzEsMjIzLDIyNCwyMjUsMjI2LDI1OSwyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDc2OSwyMzcsMjM4LDIzOSwyNzMsMjQxLDgwMywyNDMsMjQ0LDQxNywyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsNDMyLDgzNjMsMjU1XSxcbiAgXCJ4LW1hYy1jeXJpbGxpY1wiOlsxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsODIyNCwxNzYsMTE2OCwxNjMsMTY3LDgyMjYsMTgyLDEwMzAsMTc0LDE2OSw4NDgyLDEwMjYsMTEwNiw4ODAwLDEwMjcsMTEwNyw4NzM0LDE3Nyw4ODA0LDg4MDUsMTExMCwxODEsMTE2OSwxMDMyLDEwMjgsMTEwOCwxMDMxLDExMTEsMTAzMywxMTEzLDEwMzQsMTExNCwxMTEyLDEwMjksMTcyLDg3MzAsNDAyLDg3NzYsODcxMCwxNzEsMTg3LDgyMzAsMTYwLDEwMzUsMTExNSwxMDM2LDExMTYsMTEwOSw4MjExLDgyMTIsODIyMCw4MjIxLDgyMTYsODIxNywyNDcsODIyMiwxMDM4LDExMTgsMTAzOSwxMTE5LDg0NzAsMTAyNSwxMTA1LDExMDMsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiw4MzY0XVxufTtcbn0odGhpcykpO1xuIiwiLy8gVGhpcyBpcyBmcmVlIGFuZCB1bmVuY3VtYmVyZWQgc29mdHdhcmUgcmVsZWFzZWQgaW50byB0aGUgcHVibGljIGRvbWFpbi5cbi8vIFNlZSBMSUNFTlNFLm1kIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuXG4vLyBJZiB3ZSdyZSBpbiBub2RlIHJlcXVpcmUgZW5jb2RpbmctaW5kZXhlcyBhbmQgYXR0YWNoIGl0IHRvIHRoZSBnbG9iYWwuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgR2xvYmFsIHx0aGlzfCByZXF1aXJlZCBmb3IgcmVzb2x2aW5nIGluZGV4ZXMgaW4gbm9kZS5cbiAqIEBzdXBwcmVzcyB7Z2xvYmFsVGhpc31cbiAqL1xuaWYgKHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgdGhpc1tcImVuY29kaW5nLWluZGV4ZXNcIl0gPVxuICAgIHJlcXVpcmUoXCIuL2VuY29kaW5nLWluZGV4ZXMuanNcIilbXCJlbmNvZGluZy1pbmRleGVzXCJdO1xufVxuXG4oZnVuY3Rpb24oZ2xvYmFsKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvL1xuICAvLyBVdGlsaXRpZXNcbiAgLy9cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGEgVGhlIG51bWJlciB0byB0ZXN0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gbWluIFRoZSBtaW5pbXVtIHZhbHVlIGluIHRoZSByYW5nZSwgaW5jbHVzaXZlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4IFRoZSBtYXhpbXVtIHZhbHVlIGluIHRoZSByYW5nZSwgaW5jbHVzaXZlLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGEgPj0gbWluIGFuZCBhIDw9IG1heC5cbiAgICovXG4gIGZ1bmN0aW9uIGluUmFuZ2UoYSwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gbWluIDw9IGEgJiYgYSA8PSBtYXg7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWVyYXRvci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGQgVGhlIGRlbm9taW5hdG9yLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSByZXN1bHQgb2YgdGhlIGludGVnZXIgZGl2aXNpb24gb2YgbiBieSBkLlxuICAgKi9cbiAgZnVuY3Rpb24gZGl2KG4sIGQpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihuIC8gZCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsqfSBvXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIGZ1bmN0aW9uIFRvRGljdGlvbmFyeShvKSB7XG4gICAgaWYgKG8gPT09IHVuZGVmaW5lZCkgcmV0dXJuIHt9O1xuICAgIGlmIChvID09PSBPYmplY3QobykpIHJldHVybiBvO1xuICAgIHRocm93IFR5cGVFcnJvcignQ291bGQgbm90IGNvbnZlcnQgYXJndW1lbnQgdG8gZGljdGlvbmFyeScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgSW5wdXQgc3RyaW5nIG9mIFVURi0xNiBjb2RlIHVuaXRzLlxuICAgKiBAcmV0dXJuIHshQXJyYXkuPG51bWJlcj59IENvZGUgcG9pbnRzLlxuICAgKi9cbiAgZnVuY3Rpb24gc3RyaW5nVG9Db2RlUG9pbnRzKHN0cmluZykge1xuICAgIC8vIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1vYnRhaW4tdW5pY29kZVxuXG4gICAgLy8gMS4gTGV0IFMgYmUgdGhlIERPTVN0cmluZyB2YWx1ZS5cbiAgICB2YXIgcyA9IFN0cmluZyhzdHJpbmcpO1xuXG4gICAgLy8gMi4gTGV0IG4gYmUgdGhlIGxlbmd0aCBvZiBTLlxuICAgIHZhciBuID0gcy5sZW5ndGg7XG5cbiAgICAvLyAzLiBJbml0aWFsaXplIGkgdG8gMC5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICAvLyA0LiBJbml0aWFsaXplIFUgdG8gYmUgYW4gZW1wdHkgc2VxdWVuY2Ugb2YgVW5pY29kZSBjaGFyYWN0ZXJzLlxuICAgIHZhciB1ID0gW107XG5cbiAgICAvLyA1LiBXaGlsZSBpIDwgbjpcbiAgICB3aGlsZSAoaSA8IG4pIHtcblxuICAgICAgLy8gMS4gTGV0IGMgYmUgdGhlIGNvZGUgdW5pdCBpbiBTIGF0IGluZGV4IGkuXG4gICAgICB2YXIgYyA9IHMuY2hhckNvZGVBdChpKTtcblxuICAgICAgLy8gMi4gRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBjOlxuXG4gICAgICAvLyBjIDwgMHhEODAwIG9yIGMgPiAweERGRkZcbiAgICAgIGlmIChjIDwgMHhEODAwIHx8IGMgPiAweERGRkYpIHtcbiAgICAgICAgLy8gQXBwZW5kIHRvIFUgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHdpdGggY29kZSBwb2ludCBjLlxuICAgICAgICB1LnB1c2goYyk7XG4gICAgICB9XG5cbiAgICAgIC8vIDB4REMwMCDiiaQgYyDiiaQgMHhERkZGXG4gICAgICBlbHNlIGlmICgweERDMDAgPD0gYyAmJiBjIDw9IDB4REZGRikge1xuICAgICAgICAvLyBBcHBlbmQgdG8gVSBhIFUrRkZGRCBSRVBMQUNFTUVOVCBDSEFSQUNURVIuXG4gICAgICAgIHUucHVzaCgweEZGRkQpO1xuICAgICAgfVxuXG4gICAgICAvLyAweEQ4MDAg4omkIGMg4omkIDB4REJGRlxuICAgICAgZWxzZSBpZiAoMHhEODAwIDw9IGMgJiYgYyA8PSAweERCRkYpIHtcbiAgICAgICAgLy8gMS4gSWYgaSA9IG7iiJIxLCB0aGVuIGFwcGVuZCB0byBVIGEgVStGRkZEIFJFUExBQ0VNRU5UXG4gICAgICAgIC8vIENIQVJBQ1RFUi5cbiAgICAgICAgaWYgKGkgPT09IG4gLSAxKSB7XG4gICAgICAgICAgdS5wdXNoKDB4RkZGRCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpIDwgbuKIkjE6XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIC8vIDEuIExldCBkIGJlIHRoZSBjb2RlIHVuaXQgaW4gUyBhdCBpbmRleCBpKzEuXG4gICAgICAgICAgdmFyIGQgPSBzdHJpbmcuY2hhckNvZGVBdChpICsgMSk7XG5cbiAgICAgICAgICAvLyAyLiBJZiAweERDMDAg4omkIGQg4omkIDB4REZGRiwgdGhlbjpcbiAgICAgICAgICBpZiAoMHhEQzAwIDw9IGQgJiYgZCA8PSAweERGRkYpIHtcbiAgICAgICAgICAgIC8vIDEuIExldCBhIGJlIGMgJiAweDNGRi5cbiAgICAgICAgICAgIHZhciBhID0gYyAmIDB4M0ZGO1xuXG4gICAgICAgICAgICAvLyAyLiBMZXQgYiBiZSBkICYgMHgzRkYuXG4gICAgICAgICAgICB2YXIgYiA9IGQgJiAweDNGRjtcblxuICAgICAgICAgICAgLy8gMy4gQXBwZW5kIHRvIFUgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHdpdGggY29kZSBwb2ludFxuICAgICAgICAgICAgLy8gMl4xNisyXjEwKmErYi5cbiAgICAgICAgICAgIHUucHVzaCgweDEwMDAwICsgKGEgPDwgMTApICsgYik7XG5cbiAgICAgICAgICAgIC8vIDQuIFNldCBpIHRvIGkrMS5cbiAgICAgICAgICAgIGkgKz0gMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyAzLiBPdGhlcndpc2UsIGQgPCAweERDMDAgb3IgZCA+IDB4REZGRi4gQXBwZW5kIHRvIFUgYVxuICAgICAgICAgIC8vIFUrRkZGRCBSRVBMQUNFTUVOVCBDSEFSQUNURVIuXG4gICAgICAgICAgZWxzZSAge1xuICAgICAgICAgICAgdS5wdXNoKDB4RkZGRCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIDMuIFNldCBpIHRvIGkrMS5cbiAgICAgIGkgKz0gMTtcbiAgICB9XG5cbiAgICAvLyA2LiBSZXR1cm4gVS5cbiAgICByZXR1cm4gdTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gY29kZV9wb2ludHMgQXJyYXkgb2YgY29kZSBwb2ludHMuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyaW5nIFN0cmluZyBvZiBVVEYtMTYgY29kZSB1bml0cy5cbiAgICovXG4gIGZ1bmN0aW9uIGNvZGVQb2ludHNUb1N0cmluZyhjb2RlX3BvaW50cykge1xuICAgIHZhciBzID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2RlX3BvaW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGNwID0gY29kZV9wb2ludHNbaV07XG4gICAgICBpZiAoY3AgPD0gMHhGRkZGKSB7XG4gICAgICAgIHMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjcCAtPSAweDEwMDAwO1xuICAgICAgICBzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGNwID4+IDEwKSArIDB4RDgwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjcCAmIDB4M0ZGKSArIDB4REMwMCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzO1xuICB9XG5cblxuICAvL1xuICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBFbmNvZGluZyBzcGVjaWZpY2F0aW9uXG4gIC8vIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnL1xuICAvL1xuXG4gIC8vXG4gIC8vIDMuIFRlcm1pbm9sb2d5XG4gIC8vXG5cbiAgLyoqXG4gICAqIEVuZC1vZi1zdHJlYW0gaXMgYSBzcGVjaWFsIHRva2VuIHRoYXQgc2lnbmlmaWVzIG5vIG1vcmUgdG9rZW5zXG4gICAqIGFyZSBpbiB0aGUgc3RyZWFtLlxuICAgKiBAY29uc3RcbiAgICovIHZhciBlbmRfb2Zfc3RyZWFtID0gLTE7XG5cbiAgLyoqXG4gICAqIEEgc3RyZWFtIHJlcHJlc2VudHMgYW4gb3JkZXJlZCBzZXF1ZW5jZSBvZiB0b2tlbnMuXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IHRva2VucyBBcnJheSBvZiB0b2tlbnMgdGhhdCBwcm92aWRlIHRoZVxuICAgKiBzdHJlYW0uXG4gICAqL1xuICBmdW5jdGlvbiBTdHJlYW0odG9rZW5zKSB7XG4gICAgLyoqIEB0eXBlIHshQXJyYXkuPG51bWJlcj59ICovXG4gICAgdGhpcy50b2tlbnMgPSBbXS5zbGljZS5jYWxsKHRva2Vucyk7XG4gIH1cblxuICBTdHJlYW0ucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgZW5kLW9mLXN0cmVhbSBoYXMgYmVlbiBoaXQuXG4gICAgICovXG4gICAgZW5kT2ZTdHJlYW06IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICF0aGlzLnRva2Vucy5sZW5ndGg7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdoZW4gYSB0b2tlbiBpcyByZWFkIGZyb20gYSBzdHJlYW0sIHRoZSBmaXJzdCB0b2tlbiBpbiB0aGVcbiAgICAgKiBzdHJlYW0gbXVzdCBiZSByZXR1cm5lZCBhbmQgc3Vic2VxdWVudGx5IHJlbW92ZWQsIGFuZFxuICAgICAqIGVuZC1vZi1zdHJlYW0gbXVzdCBiZSByZXR1cm5lZCBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IEdldCB0aGUgbmV4dCB0b2tlbiBmcm9tIHRoZSBzdHJlYW0sIG9yXG4gICAgICogZW5kX29mX3N0cmVhbS5cbiAgICAgKi9cbiAgICAgcmVhZDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoIXRoaXMudG9rZW5zLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIGVuZF9vZl9zdHJlYW07XG4gICAgICAgcmV0dXJuIHRoaXMudG9rZW5zLnNoaWZ0KCk7XG4gICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaGVuIG9uZSBvciBtb3JlIHRva2VucyBhcmUgcHJlcGVuZGVkIHRvIGEgc3RyZWFtLCB0aG9zZSB0b2tlbnNcbiAgICAgKiBtdXN0IGJlIGluc2VydGVkLCBpbiBnaXZlbiBvcmRlciwgYmVmb3JlIHRoZSBmaXJzdCB0b2tlbiBpbiB0aGVcbiAgICAgKiBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gdG9rZW4gVGhlIHRva2VuKHMpIHRvIHByZXBlbmQgdG8gdGhlIHN0cmVhbS5cbiAgICAgKi9cbiAgICBwcmVwZW5kOiBmdW5jdGlvbih0b2tlbikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodG9rZW4pKSB7XG4gICAgICAgIHZhciB0b2tlbnMgPSAvKipAdHlwZSB7IUFycmF5LjxudW1iZXI+fSovKHRva2VuKTtcbiAgICAgICAgd2hpbGUgKHRva2Vucy5sZW5ndGgpXG4gICAgICAgICAgdGhpcy50b2tlbnMudW5zaGlmdCh0b2tlbnMucG9wKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2tlbnMudW5zaGlmdCh0b2tlbik7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdoZW4gb25lIG9yIG1vcmUgdG9rZW5zIGFyZSBwdXNoZWQgdG8gYSBzdHJlYW0sIHRob3NlIHRva2Vuc1xuICAgICAqIG11c3QgYmUgaW5zZXJ0ZWQsIGluIGdpdmVuIG9yZGVyLCBhZnRlciB0aGUgbGFzdCB0b2tlbiBpbiB0aGVcbiAgICAgKiBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gdG9rZW4gVGhlIHRva2VucyhzKSB0byBwcmVwZW5kIHRvIHRoZSBzdHJlYW0uXG4gICAgICovXG4gICAgcHVzaDogZnVuY3Rpb24odG9rZW4pIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRva2VuKSkge1xuICAgICAgICB2YXIgdG9rZW5zID0gLyoqQHR5cGUgeyFBcnJheS48bnVtYmVyPn0qLyh0b2tlbik7XG4gICAgICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoKVxuICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2godG9rZW5zLnNoaWZ0KCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vXG4gIC8vIDQuIEVuY29kaW5nc1xuICAvL1xuXG4gIC8vIDQuMSBFbmNvZGVycyBhbmQgZGVjb2RlcnNcblxuICAvKiogQGNvbnN0ICovXG4gIHZhciBmaW5pc2hlZCA9IC0xO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZhdGFsIElmIHRydWUsIGRlY29kaW5nIGVycm9ycyByYWlzZSBhbiBleGNlcHRpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2NvZGVfcG9pbnQgT3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGZhbGxiYWNrIGNvZGUgcG9pbnQuXG4gICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNvZGUgcG9pbnQgdG8gaW5zZXJ0IG9uIGEgZGVjb2RpbmcgZXJyb3IuXG4gICAqL1xuICBmdW5jdGlvbiBkZWNvZGVyRXJyb3IoZmF0YWwsIG9wdF9jb2RlX3BvaW50KSB7XG4gICAgaWYgKGZhdGFsKVxuICAgICAgdGhyb3cgVHlwZUVycm9yKCdEZWNvZGVyIGVycm9yJyk7XG4gICAgcmV0dXJuIG9wdF9jb2RlX3BvaW50IHx8IDB4RkZGRDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBUaGUgY29kZSBwb2ludCB0aGF0IGNvdWxkIG5vdCBiZSBlbmNvZGVkLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IEFsd2F5cyB0aHJvd3MsIG5vIHZhbHVlIGlzIGFjdHVhbGx5IHJldHVybmVkLlxuICAgKi9cbiAgZnVuY3Rpb24gZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1RoZSBjb2RlIHBvaW50ICcgKyBjb2RlX3BvaW50ICsgJyBjb3VsZCBub3QgYmUgZW5jb2RlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJmYWNlICovXG4gIGZ1bmN0aW9uIERlY29kZXIoKSB7fVxuICBEZWNvZGVyLnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludCwgb3IgfGZpbmlzaGVkfC5cbiAgICAgKi9cbiAgICBoYW5kbGVyOiBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHt9XG4gIH07XG5cbiAgLyoqIEBpbnRlcmZhY2UgKi9cbiAgZnVuY3Rpb24gRW5jb2RlcigpIHt9XG4gIEVuY29kZXIucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBjb2RlIHBvaW50cyBiZWluZyBlbmNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IE5leHQgY29kZSBwb2ludCByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IEJ5dGUocykgdG8gZW1pdCwgb3IgfGZpbmlzaGVkfC5cbiAgICAgKi9cbiAgICBoYW5kbGVyOiBmdW5jdGlvbihzdHJlYW0sIGNvZGVfcG9pbnQpIHt9XG4gIH07XG5cbiAgLy8gNC4yIE5hbWVzIGFuZCBsYWJlbHNcblxuICAvLyBUT0RPOiBEZWZpbmUgQHR5cGVkZWYgZm9yIEVuY29kaW5nOiB7bmFtZTpzdHJpbmcsbGFiZWxzOkFycmF5LjxzdHJpbmc+fVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtY29tcGlsZXIvaXNzdWVzLzI0N1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgVGhlIGVuY29kaW5nIGxhYmVsLlxuICAgKiBAcmV0dXJuIHs/e25hbWU6c3RyaW5nLGxhYmVsczpBcnJheS48c3RyaW5nPn19XG4gICAqL1xuICBmdW5jdGlvbiBnZXRFbmNvZGluZyhsYWJlbCkge1xuICAgIC8vIDEuIFJlbW92ZSBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgQVNDSUkgd2hpdGVzcGFjZSBmcm9tIGxhYmVsLlxuICAgIGxhYmVsID0gU3RyaW5nKGxhYmVsKS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIDIuIElmIGxhYmVsIGlzIGFuIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIGFueSBvZiB0aGVcbiAgICAvLyBsYWJlbHMgbGlzdGVkIGluIHRoZSB0YWJsZSBiZWxvdywgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nXG4gICAgLy8gZW5jb2RpbmcsIGFuZCBmYWlsdXJlIG90aGVyd2lzZS5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxhYmVsX3RvX2VuY29kaW5nLCBsYWJlbCkpIHtcbiAgICAgIHJldHVybiBsYWJlbF90b19lbmNvZGluZ1tsYWJlbF07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kaW5ncyB0YWJsZTogaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvZW5jb2RpbmdzLmpzb25cbiAgICogQGNvbnN0XG4gICAqIEB0eXBlIHshQXJyYXkuPHtcbiAgICogICAgICAgICAgaGVhZGluZzogc3RyaW5nLFxuICAgKiAgICAgICAgICBlbmNvZGluZ3M6IEFycmF5Ljx7bmFtZTpzdHJpbmcsbGFiZWxzOkFycmF5LjxzdHJpbmc+fT5cbiAgICogICAgICAgIH0+fVxuICAgKi9cbiAgdmFyIGVuY29kaW5ncyA9IFtcbiAge1xuICAgIFwiZW5jb2RpbmdzXCI6IFtcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwidW5pY29kZS0xLTEtdXRmLThcIixcbiAgICAgICAgICBcInV0Zi04XCIsXG4gICAgICAgICAgXCJ1dGY4XCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwidXRmLThcIlxuICAgICAgfVxuICAgIF0sXG4gICAgXCJoZWFkaW5nXCI6IFwiVGhlIEVuY29kaW5nXCJcbiAgfSxcbiAge1xuICAgIFwiZW5jb2RpbmdzXCI6IFtcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiODY2XCIsXG4gICAgICAgICAgXCJjcDg2NlwiLFxuICAgICAgICAgIFwiY3NpYm04NjZcIixcbiAgICAgICAgICBcImlibTg2NlwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcImlibTg2NlwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJjc2lzb2xhdGluMlwiLFxuICAgICAgICAgIFwiaXNvLTg4NTktMlwiLFxuICAgICAgICAgIFwiaXNvLWlyLTEwMVwiLFxuICAgICAgICAgIFwiaXNvODg1OS0yXCIsXG4gICAgICAgICAgXCJpc284ODU5MlwiLFxuICAgICAgICAgIFwiaXNvXzg4NTktMlwiLFxuICAgICAgICAgIFwiaXNvXzg4NTktMjoxOTg3XCIsXG4gICAgICAgICAgXCJsMlwiLFxuICAgICAgICAgIFwibGF0aW4yXCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwiaXNvLTg4NTktMlwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJjc2lzb2xhdGluM1wiLFxuICAgICAgICAgIFwiaXNvLTg4NTktM1wiLFxuICAgICAgICAgIFwiaXNvLWlyLTEwOVwiLFxuICAgICAgICAgIFwiaXNvODg1OS0zXCIsXG4gICAgICAgICAgXCJpc284ODU5M1wiLFxuICAgICAgICAgIFwiaXNvXzg4NTktM1wiLFxuICAgICAgICAgIFwiaXNvXzg4NTktMzoxOTg4XCIsXG4gICAgICAgICAgXCJsM1wiLFxuICAgICAgICAgIFwibGF0aW4zXCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwiaXNvLTg4NTktM1wiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJjc2lzb2xhdGluNFwiLFxuICAgICAgICAgIFwiaXNvLTg4NTktNFwiLFxuICAgICAgICAgIFwiaXNvLWlyLTExMFwiLFxuICAgICAgICAgIFwiaXNvODg1OS00XCIsXG4gICAgICAgICAgXCJpc284ODU5NFwiLFxuICAgICAgICAgIFwiaXNvXzg4NTktNFwiLFxuICAgICAgICAgIFwiaXNvXzg4NTktNDoxOTg4XCIsXG4gICAgICAgICAgXCJsNFwiLFxuICAgICAgICAgIFwibGF0aW40XCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwiaXNvLTg4NTktNFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJjc2lzb2xhdGluY3lyaWxsaWNcIixcbiAgICAgICAgICBcImN5cmlsbGljXCIsXG4gICAgICAgICAgXCJpc28tODg1OS01XCIsXG4gICAgICAgICAgXCJpc28taXItMTQ0XCIsXG4gICAgICAgICAgXCJpc284ODU5LTVcIixcbiAgICAgICAgICBcImlzbzg4NTk1XCIsXG4gICAgICAgICAgXCJpc29fODg1OS01XCIsXG4gICAgICAgICAgXCJpc29fODg1OS01OjE5ODhcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJpc28tODg1OS01XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImFyYWJpY1wiLFxuICAgICAgICAgIFwiYXNtby03MDhcIixcbiAgICAgICAgICBcImNzaXNvODg1OTZlXCIsXG4gICAgICAgICAgXCJjc2lzbzg4NTk2aVwiLFxuICAgICAgICAgIFwiY3Npc29sYXRpbmFyYWJpY1wiLFxuICAgICAgICAgIFwiZWNtYS0xMTRcIixcbiAgICAgICAgICBcImlzby04ODU5LTZcIixcbiAgICAgICAgICBcImlzby04ODU5LTYtZVwiLFxuICAgICAgICAgIFwiaXNvLTg4NTktNi1pXCIsXG4gICAgICAgICAgXCJpc28taXItMTI3XCIsXG4gICAgICAgICAgXCJpc284ODU5LTZcIixcbiAgICAgICAgICBcImlzbzg4NTk2XCIsXG4gICAgICAgICAgXCJpc29fODg1OS02XCIsXG4gICAgICAgICAgXCJpc29fODg1OS02OjE5ODdcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJpc28tODg1OS02XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImNzaXNvbGF0aW5ncmVla1wiLFxuICAgICAgICAgIFwiZWNtYS0xMThcIixcbiAgICAgICAgICBcImVsb3RfOTI4XCIsXG4gICAgICAgICAgXCJncmVla1wiLFxuICAgICAgICAgIFwiZ3JlZWs4XCIsXG4gICAgICAgICAgXCJpc28tODg1OS03XCIsXG4gICAgICAgICAgXCJpc28taXItMTI2XCIsXG4gICAgICAgICAgXCJpc284ODU5LTdcIixcbiAgICAgICAgICBcImlzbzg4NTk3XCIsXG4gICAgICAgICAgXCJpc29fODg1OS03XCIsXG4gICAgICAgICAgXCJpc29fODg1OS03OjE5ODdcIixcbiAgICAgICAgICBcInN1bl9ldV9ncmVla1wiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcImlzby04ODU5LTdcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiY3Npc284ODU5OGVcIixcbiAgICAgICAgICBcImNzaXNvbGF0aW5oZWJyZXdcIixcbiAgICAgICAgICBcImhlYnJld1wiLFxuICAgICAgICAgIFwiaXNvLTg4NTktOFwiLFxuICAgICAgICAgIFwiaXNvLTg4NTktOC1lXCIsXG4gICAgICAgICAgXCJpc28taXItMTM4XCIsXG4gICAgICAgICAgXCJpc284ODU5LThcIixcbiAgICAgICAgICBcImlzbzg4NTk4XCIsXG4gICAgICAgICAgXCJpc29fODg1OS04XCIsXG4gICAgICAgICAgXCJpc29fODg1OS04OjE5ODhcIixcbiAgICAgICAgICBcInZpc3VhbFwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcImlzby04ODU5LThcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiY3Npc284ODU5OGlcIixcbiAgICAgICAgICBcImlzby04ODU5LTgtaVwiLFxuICAgICAgICAgIFwibG9naWNhbFwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcImlzby04ODU5LTgtaVwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJjc2lzb2xhdGluNlwiLFxuICAgICAgICAgIFwiaXNvLTg4NTktMTBcIixcbiAgICAgICAgICBcImlzby1pci0xNTdcIixcbiAgICAgICAgICBcImlzbzg4NTktMTBcIixcbiAgICAgICAgICBcImlzbzg4NTkxMFwiLFxuICAgICAgICAgIFwibDZcIixcbiAgICAgICAgICBcImxhdGluNlwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcImlzby04ODU5LTEwXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImlzby04ODU5LTEzXCIsXG4gICAgICAgICAgXCJpc284ODU5LTEzXCIsXG4gICAgICAgICAgXCJpc284ODU5MTNcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJpc28tODg1OS0xM1wiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJpc28tODg1OS0xNFwiLFxuICAgICAgICAgIFwiaXNvODg1OS0xNFwiLFxuICAgICAgICAgIFwiaXNvODg1OTE0XCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwiaXNvLTg4NTktMTRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiY3Npc29sYXRpbjlcIixcbiAgICAgICAgICBcImlzby04ODU5LTE1XCIsXG4gICAgICAgICAgXCJpc284ODU5LTE1XCIsXG4gICAgICAgICAgXCJpc284ODU5MTVcIixcbiAgICAgICAgICBcImlzb184ODU5LTE1XCIsXG4gICAgICAgICAgXCJsOVwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcImlzby04ODU5LTE1XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImlzby04ODU5LTE2XCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwiaXNvLTg4NTktMTZcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiY3Nrb2k4clwiLFxuICAgICAgICAgIFwia29pXCIsXG4gICAgICAgICAgXCJrb2k4XCIsXG4gICAgICAgICAgXCJrb2k4LXJcIixcbiAgICAgICAgICBcImtvaThfclwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcImtvaTgtclwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJrb2k4LXJ1XCIsXG4gICAgICAgICAgXCJrb2k4LXVcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJrb2k4LXVcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiY3NtYWNpbnRvc2hcIixcbiAgICAgICAgICBcIm1hY1wiLFxuICAgICAgICAgIFwibWFjaW50b3NoXCIsXG4gICAgICAgICAgXCJ4LW1hYy1yb21hblwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcIm1hY2ludG9zaFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJkb3MtODc0XCIsXG4gICAgICAgICAgXCJpc28tODg1OS0xMVwiLFxuICAgICAgICAgIFwiaXNvODg1OS0xMVwiLFxuICAgICAgICAgIFwiaXNvODg1OTExXCIsXG4gICAgICAgICAgXCJ0aXMtNjIwXCIsXG4gICAgICAgICAgXCJ3aW5kb3dzLTg3NFwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcIndpbmRvd3MtODc0XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImNwMTI1MFwiLFxuICAgICAgICAgIFwid2luZG93cy0xMjUwXCIsXG4gICAgICAgICAgXCJ4LWNwMTI1MFwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcIndpbmRvd3MtMTI1MFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJjcDEyNTFcIixcbiAgICAgICAgICBcIndpbmRvd3MtMTI1MVwiLFxuICAgICAgICAgIFwieC1jcDEyNTFcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJ3aW5kb3dzLTEyNTFcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiYW5zaV94My40LTE5NjhcIixcbiAgICAgICAgICBcImFzY2lpXCIsXG4gICAgICAgICAgXCJjcDEyNTJcIixcbiAgICAgICAgICBcImNwODE5XCIsXG4gICAgICAgICAgXCJjc2lzb2xhdGluMVwiLFxuICAgICAgICAgIFwiaWJtODE5XCIsXG4gICAgICAgICAgXCJpc28tODg1OS0xXCIsXG4gICAgICAgICAgXCJpc28taXItMTAwXCIsXG4gICAgICAgICAgXCJpc284ODU5LTFcIixcbiAgICAgICAgICBcImlzbzg4NTkxXCIsXG4gICAgICAgICAgXCJpc29fODg1OS0xXCIsXG4gICAgICAgICAgXCJpc29fODg1OS0xOjE5ODdcIixcbiAgICAgICAgICBcImwxXCIsXG4gICAgICAgICAgXCJsYXRpbjFcIixcbiAgICAgICAgICBcInVzLWFzY2lpXCIsXG4gICAgICAgICAgXCJ3aW5kb3dzLTEyNTJcIixcbiAgICAgICAgICBcIngtY3AxMjUyXCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwid2luZG93cy0xMjUyXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImNwMTI1M1wiLFxuICAgICAgICAgIFwid2luZG93cy0xMjUzXCIsXG4gICAgICAgICAgXCJ4LWNwMTI1M1wiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcIndpbmRvd3MtMTI1M1wiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJjcDEyNTRcIixcbiAgICAgICAgICBcImNzaXNvbGF0aW41XCIsXG4gICAgICAgICAgXCJpc28tODg1OS05XCIsXG4gICAgICAgICAgXCJpc28taXItMTQ4XCIsXG4gICAgICAgICAgXCJpc284ODU5LTlcIixcbiAgICAgICAgICBcImlzbzg4NTk5XCIsXG4gICAgICAgICAgXCJpc29fODg1OS05XCIsXG4gICAgICAgICAgXCJpc29fODg1OS05OjE5ODlcIixcbiAgICAgICAgICBcImw1XCIsXG4gICAgICAgICAgXCJsYXRpbjVcIixcbiAgICAgICAgICBcIndpbmRvd3MtMTI1NFwiLFxuICAgICAgICAgIFwieC1jcDEyNTRcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJ3aW5kb3dzLTEyNTRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiY3AxMjU1XCIsXG4gICAgICAgICAgXCJ3aW5kb3dzLTEyNTVcIixcbiAgICAgICAgICBcIngtY3AxMjU1XCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwid2luZG93cy0xMjU1XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImNwMTI1NlwiLFxuICAgICAgICAgIFwid2luZG93cy0xMjU2XCIsXG4gICAgICAgICAgXCJ4LWNwMTI1NlwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcIndpbmRvd3MtMTI1NlwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJjcDEyNTdcIixcbiAgICAgICAgICBcIndpbmRvd3MtMTI1N1wiLFxuICAgICAgICAgIFwieC1jcDEyNTdcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJ3aW5kb3dzLTEyNTdcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiY3AxMjU4XCIsXG4gICAgICAgICAgXCJ3aW5kb3dzLTEyNThcIixcbiAgICAgICAgICBcIngtY3AxMjU4XCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwid2luZG93cy0xMjU4XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcIngtbWFjLWN5cmlsbGljXCIsXG4gICAgICAgICAgXCJ4LW1hYy11a3JhaW5pYW5cIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJ4LW1hYy1jeXJpbGxpY1wiXG4gICAgICB9XG4gICAgXSxcbiAgICBcImhlYWRpbmdcIjogXCJMZWdhY3kgc2luZ2xlLWJ5dGUgZW5jb2RpbmdzXCJcbiAgfSxcbiAge1xuICAgIFwiZW5jb2RpbmdzXCI6IFtcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiY2hpbmVzZVwiLFxuICAgICAgICAgIFwiY3NnYjIzMTJcIixcbiAgICAgICAgICBcImNzaXNvNThnYjIzMTI4MFwiLFxuICAgICAgICAgIFwiZ2IyMzEyXCIsXG4gICAgICAgICAgXCJnYl8yMzEyXCIsXG4gICAgICAgICAgXCJnYl8yMzEyLTgwXCIsXG4gICAgICAgICAgXCJnYmtcIixcbiAgICAgICAgICBcImlzby1pci01OFwiLFxuICAgICAgICAgIFwieC1nYmtcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJnYmtcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiZ2IxODAzMFwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcImdiMTgwMzBcIlxuICAgICAgfVxuICAgIF0sXG4gICAgXCJoZWFkaW5nXCI6IFwiTGVnYWN5IG11bHRpLWJ5dGUgQ2hpbmVzZSAoc2ltcGxpZmllZCkgZW5jb2RpbmdzXCJcbiAgfSxcbiAge1xuICAgIFwiZW5jb2RpbmdzXCI6IFtcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiYmlnNVwiLFxuICAgICAgICAgIFwiYmlnNS1oa3Njc1wiLFxuICAgICAgICAgIFwiY24tYmlnNVwiLFxuICAgICAgICAgIFwiY3NiaWc1XCIsXG4gICAgICAgICAgXCJ4LXgtYmlnNVwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcImJpZzVcIlxuICAgICAgfVxuICAgIF0sXG4gICAgXCJoZWFkaW5nXCI6IFwiTGVnYWN5IG11bHRpLWJ5dGUgQ2hpbmVzZSAodHJhZGl0aW9uYWwpIGVuY29kaW5nc1wiXG4gIH0sXG4gIHtcbiAgICBcImVuY29kaW5nc1wiOiBbXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImNzZXVjcGtkZm10amFwYW5lc2VcIixcbiAgICAgICAgICBcImV1Yy1qcFwiLFxuICAgICAgICAgIFwieC1ldWMtanBcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJldWMtanBcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiY3Npc28yMDIyanBcIixcbiAgICAgICAgICBcImlzby0yMDIyLWpwXCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwiaXNvLTIwMjItanBcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwiY3NzaGlmdGppc1wiLFxuICAgICAgICAgIFwibXM5MzJcIixcbiAgICAgICAgICBcIm1zX2thbmppXCIsXG4gICAgICAgICAgXCJzaGlmdC1qaXNcIixcbiAgICAgICAgICBcInNoaWZ0X2ppc1wiLFxuICAgICAgICAgIFwic2ppc1wiLFxuICAgICAgICAgIFwid2luZG93cy0zMWpcIixcbiAgICAgICAgICBcIngtc2ppc1wiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcInNoaWZ0X2ppc1wiXG4gICAgICB9XG4gICAgXSxcbiAgICBcImhlYWRpbmdcIjogXCJMZWdhY3kgbXVsdGktYnl0ZSBKYXBhbmVzZSBlbmNvZGluZ3NcIlxuICB9LFxuICB7XG4gICAgXCJlbmNvZGluZ3NcIjogW1xuICAgICAge1xuICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgXCJjc2V1Y2tyXCIsXG4gICAgICAgICAgXCJjc2tzYzU2MDExOTg3XCIsXG4gICAgICAgICAgXCJldWMta3JcIixcbiAgICAgICAgICBcImlzby1pci0xNDlcIixcbiAgICAgICAgICBcImtvcmVhblwiLFxuICAgICAgICAgIFwia3NfY181NjAxLTE5ODdcIixcbiAgICAgICAgICBcImtzX2NfNTYwMS0xOTg5XCIsXG4gICAgICAgICAgXCJrc2M1NjAxXCIsXG4gICAgICAgICAgXCJrc2NfNTYwMVwiLFxuICAgICAgICAgIFwid2luZG93cy05NDlcIlxuICAgICAgICBdLFxuICAgICAgICBcIm5hbWVcIjogXCJldWMta3JcIlxuICAgICAgfVxuICAgIF0sXG4gICAgXCJoZWFkaW5nXCI6IFwiTGVnYWN5IG11bHRpLWJ5dGUgS29yZWFuIGVuY29kaW5nc1wiXG4gIH0sXG4gIHtcbiAgICBcImVuY29kaW5nc1wiOiBbXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcImNzaXNvMjAyMmtyXCIsXG4gICAgICAgICAgXCJoei1nYi0yMzEyXCIsXG4gICAgICAgICAgXCJpc28tMjAyMi1jblwiLFxuICAgICAgICAgIFwiaXNvLTIwMjItY24tZXh0XCIsXG4gICAgICAgICAgXCJpc28tMjAyMi1rclwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcInJlcGxhY2VtZW50XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcInV0Zi0xNmJlXCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwidXRmLTE2YmVcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgIFwidXRmLTE2XCIsXG4gICAgICAgICAgXCJ1dGYtMTZsZVwiXG4gICAgICAgIF0sXG4gICAgICAgIFwibmFtZVwiOiBcInV0Zi0xNmxlXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICBcIngtdXNlci1kZWZpbmVkXCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJuYW1lXCI6IFwieC11c2VyLWRlZmluZWRcIlxuICAgICAgfVxuICAgIF0sXG4gICAgXCJoZWFkaW5nXCI6IFwiTGVnYWN5IG1pc2NlbGxhbmVvdXMgZW5jb2RpbmdzXCJcbiAgfVxuICBdO1xuXG4gIC8vIExhYmVsIHRvIGVuY29kaW5nIHJlZ2lzdHJ5LlxuICAvKiogQHR5cGUge09iamVjdC48c3RyaW5nLHtuYW1lOnN0cmluZyxsYWJlbHM6QXJyYXkuPHN0cmluZz59Pn0gKi9cbiAgdmFyIGxhYmVsX3RvX2VuY29kaW5nID0ge307XG4gIGVuY29kaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKGNhdGVnb3J5KSB7XG4gICAgY2F0ZWdvcnkuZW5jb2RpbmdzLmZvckVhY2goZnVuY3Rpb24oZW5jb2RpbmcpIHtcbiAgICAgIGVuY29kaW5nLmxhYmVscy5mb3JFYWNoKGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICAgIGxhYmVsX3RvX2VuY29kaW5nW2xhYmVsXSA9IGVuY29kaW5nO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFJlZ2lzdHJ5IG9mIG9mIGVuY29kZXIvZGVjb2RlciBmYWN0b3JpZXMsIGJ5IGVuY29kaW5nIG5hbWUuXG4gIC8qKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIGZ1bmN0aW9uKHtmYXRhbDpib29sZWFufSk6IEVuY29kZXI+fSAqL1xuICB2YXIgZW5jb2RlcnMgPSB7fTtcbiAgLyoqIEB0eXBlIHtPYmplY3QuPHN0cmluZywgZnVuY3Rpb24oe2ZhdGFsOmJvb2xlYW59KTogRGVjb2Rlcj59ICovXG4gIHZhciBkZWNvZGVycyA9IHt9O1xuXG4gIC8vXG4gIC8vIDUuIEluZGV4ZXNcbiAgLy9cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBvaW50ZXIgVGhlIHxwb2ludGVyfCB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0geyghQXJyYXkuPD9udW1iZXI+fHVuZGVmaW5lZCl9IGluZGV4IFRoZSB8aW5kZXh8IHRvIHNlYXJjaCB3aXRoaW4uXG4gICAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBjb2RlIHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gfHBvaW50ZXJ8IGluIHxpbmRleHwsXG4gICAqICAgICBvciBudWxsIGlmIHxjb2RlIHBvaW50fCBpcyBub3QgaW4gfGluZGV4fC5cbiAgICovXG4gIGZ1bmN0aW9uIGluZGV4Q29kZVBvaW50Rm9yKHBvaW50ZXIsIGluZGV4KSB7XG4gICAgaWYgKCFpbmRleCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGluZGV4W3BvaW50ZXJdIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgVGhlIHxjb2RlIHBvaW50fCB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0geyFBcnJheS48P251bWJlcj59IGluZGV4IFRoZSB8aW5kZXh8IHRvIHNlYXJjaCB3aXRoaW4uXG4gICAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBmaXJzdCBwb2ludGVyIGNvcnJlc3BvbmRpbmcgdG8gfGNvZGUgcG9pbnR8IGluXG4gICAqICAgICB8aW5kZXh8LCBvciBudWxsIGlmIHxjb2RlIHBvaW50fCBpcyBub3QgaW4gfGluZGV4fC5cbiAgICovXG4gIGZ1bmN0aW9uIGluZGV4UG9pbnRlckZvcihjb2RlX3BvaW50LCBpbmRleCkge1xuICAgIHZhciBwb2ludGVyID0gaW5kZXguaW5kZXhPZihjb2RlX3BvaW50KTtcbiAgICByZXR1cm4gcG9pbnRlciA9PT0gLTEgPyBudWxsIDogcG9pbnRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBpbmRleC5cbiAgICogQHJldHVybiB7KCFBcnJheS48bnVtYmVyPnwhQXJyYXkuPEFycmF5LjxudW1iZXI+Pil9XG4gICAqICAqL1xuICBmdW5jdGlvbiBpbmRleChuYW1lKSB7XG4gICAgaWYgKCEoJ2VuY29kaW5nLWluZGV4ZXMnIGluIGdsb2JhbCkpIHtcbiAgICAgIHRocm93IEVycm9yKFwiSW5kZXhlcyBtaXNzaW5nLlwiICtcbiAgICAgICAgICAgICAgICAgIFwiIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcz9cIik7XG4gICAgfVxuICAgIHJldHVybiBnbG9iYWxbJ2VuY29kaW5nLWluZGV4ZXMnXVtuYW1lXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcG9pbnRlciBUaGUgfHBvaW50ZXJ8IHRvIHNlYXJjaCBmb3IgaW4gdGhlIGdiMTgwMzAgaW5kZXguXG4gICAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBjb2RlIHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gfHBvaW50ZXJ8IGluIHxpbmRleHwsXG4gICAqICAgICBvciBudWxsIGlmIHxjb2RlIHBvaW50fCBpcyBub3QgaW4gdGhlIGdiMTgwMzAgaW5kZXguXG4gICAqL1xuICBmdW5jdGlvbiBpbmRleEdCMTgwMzBSYW5nZXNDb2RlUG9pbnRGb3IocG9pbnRlcikge1xuICAgIC8vIDEuIElmIHBvaW50ZXIgaXMgZ3JlYXRlciB0aGFuIDM5NDE5IGFuZCBsZXNzIHRoYW4gMTg5MDAwLCBvclxuICAgIC8vIHBvaW50ZXIgaXMgZ3JlYXRlciB0aGFuIDEyMzc1NzUsIHJldHVybiBudWxsLlxuICAgIGlmICgocG9pbnRlciA+IDM5NDE5ICYmIHBvaW50ZXIgPCAxODkwMDApIHx8IChwb2ludGVyID4gMTIzNzU3NSkpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIC8vIDIuIExldCBvZmZzZXQgYmUgdGhlIGxhc3QgcG9pbnRlciBpbiBpbmRleCBnYjE4MDMwIHJhbmdlcyB0aGF0XG4gICAgLy8gaXMgZXF1YWwgdG8gb3IgbGVzcyB0aGFuIHBvaW50ZXIgYW5kIGxldCBjb2RlIHBvaW50IG9mZnNldCBiZVxuICAgIC8vIGl0cyBjb3JyZXNwb25kaW5nIGNvZGUgcG9pbnQuXG4gICAgdmFyIG9mZnNldCA9IDA7XG4gICAgdmFyIGNvZGVfcG9pbnRfb2Zmc2V0ID0gMDtcbiAgICB2YXIgaWR4ID0gaW5kZXgoJ2diMTgwMzAnKTtcbiAgICB2YXIgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgaWR4Lmxlbmd0aDsgKytpKSB7XG4gICAgICAvKiogQHR5cGUgeyFBcnJheS48bnVtYmVyPn0gKi9cbiAgICAgIHZhciBlbnRyeSA9IGlkeFtpXTtcbiAgICAgIGlmIChlbnRyeVswXSA8PSBwb2ludGVyKSB7XG4gICAgICAgIG9mZnNldCA9IGVudHJ5WzBdO1xuICAgICAgICBjb2RlX3BvaW50X29mZnNldCA9IGVudHJ5WzFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gUmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50IG9mZnNldCArXG4gICAgLy8gcG9pbnRlciDiiJIgb2Zmc2V0LlxuICAgIHJldHVybiBjb2RlX3BvaW50X29mZnNldCArIHBvaW50ZXIgLSBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgVGhlIHxjb2RlIHBvaW50fCB0byBsb2NhdGUgaW4gdGhlIGdiMTgwMzAgaW5kZXguXG4gICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGZpcnN0IHBvaW50ZXIgY29ycmVzcG9uZGluZyB0byB8Y29kZSBwb2ludHwgaW4gdGhlXG4gICAqICAgICBnYjE4MDMwIGluZGV4LlxuICAgKi9cbiAgZnVuY3Rpb24gaW5kZXhHQjE4MDMwUmFuZ2VzUG9pbnRlckZvcihjb2RlX3BvaW50KSB7XG4gICAgLy8gMS4gTGV0IG9mZnNldCBiZSB0aGUgbGFzdCBjb2RlIHBvaW50IGluIGluZGV4IGdiMTgwMzAgcmFuZ2VzXG4gICAgLy8gdGhhdCBpcyBlcXVhbCB0byBvciBsZXNzIHRoYW4gY29kZSBwb2ludCBhbmQgbGV0IHBvaW50ZXIgb2Zmc2V0XG4gICAgLy8gYmUgaXRzIGNvcnJlc3BvbmRpbmcgcG9pbnRlci5cbiAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICB2YXIgcG9pbnRlcl9vZmZzZXQgPSAwO1xuICAgIHZhciBpZHggPSBpbmRleCgnZ2IxODAzMCcpO1xuICAgIHZhciBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBpZHgubGVuZ3RoOyArK2kpIHtcbiAgICAgIC8qKiBAdHlwZSB7IUFycmF5LjxudW1iZXI+fSAqL1xuICAgICAgdmFyIGVudHJ5ID0gaWR4W2ldO1xuICAgICAgaWYgKGVudHJ5WzFdIDw9IGNvZGVfcG9pbnQpIHtcbiAgICAgICAgb2Zmc2V0ID0gZW50cnlbMV07XG4gICAgICAgIHBvaW50ZXJfb2Zmc2V0ID0gZW50cnlbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gYSBwb2ludGVyIHdob3NlIHZhbHVlIGlzIHBvaW50ZXIgb2Zmc2V0ICsgY29kZSBwb2ludFxuICAgIC8vIOKIkiBvZmZzZXQuXG4gICAgcmV0dXJuIHBvaW50ZXJfb2Zmc2V0ICsgY29kZV9wb2ludCAtIG9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBUaGUgfGNvZGVfcG9pbnR8IHRvIHNlYXJjaCBmb3IgaW4gdGhlIHNoaWZ0X2ppcyBpbmRleC5cbiAgICogQHJldHVybiB7P251bWJlcn0gVGhlIGNvZGUgcG9pbnQgY29ycmVzcG9uZGluZyB0byB8cG9pbnRlcnwgaW4gfGluZGV4fCxcbiAgICogICAgIG9yIG51bGwgaWYgfGNvZGUgcG9pbnR8IGlzIG5vdCBpbiB0aGUgc2hpZnRfamlzIGluZGV4LlxuICAgKi9cbiAgZnVuY3Rpb24gaW5kZXhTaGlmdEpJU1BvaW50ZXJGb3IoY29kZV9wb2ludCkge1xuICAgIC8vIDEuIExldCBpbmRleCBiZSBpbmRleCBqaXMwMjA4IGV4Y2x1ZGluZyBhbGwgcG9pbnRlcnMgaW4gdGhlXG4gICAgLy8gcmFuZ2UgODI3MiB0byA4ODM1LlxuICAgIHZhciBwb2ludGVyID0gaW5kZXhQb2ludGVyRm9yKGNvZGVfcG9pbnQsIGluZGV4KCdqaXMwMjA4JykpO1xuICAgIGlmIChwb2ludGVyID09PSBudWxsIHx8IGluUmFuZ2UocG9pbnRlciwgODI3MiwgODgzNSkpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIC8vIDIuIFJldHVybiB0aGUgaW5kZXggcG9pbnRlciBmb3IgY29kZSBwb2ludCBpbiBpbmRleC5cbiAgICByZXR1cm4gcG9pbnRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBUaGUgfGNvZGVfcG9pbnR8IHRvIHNlYXJjaCBmb3IgaW4gdGhlIGJpZzUgaW5kZXguXG4gICAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBjb2RlIHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gfHBvaW50ZXJ8IGluIHxpbmRleHwsXG4gICAqICAgICBvciBudWxsIGlmIHxjb2RlIHBvaW50fCBpcyBub3QgaW4gdGhlIGJpZzUgaW5kZXguXG4gICAqL1xuICBmdW5jdGlvbiBpbmRleEJpZzVQb2ludGVyRm9yKGNvZGVfcG9pbnQpIHtcblxuICAgIC8vIDEuIExldCBpbmRleCBiZSBpbmRleCBiaWc1LlxuICAgIHZhciBpbmRleF8gPSBpbmRleCgnYmlnNScpO1xuXG4gICAgLy8gMi4gSWYgY29kZSBwb2ludCBpcyBVKzI1NTAsIFUrMjU1RSwgVSsyNTYxLCBVKzI1NkEsIFUrNTM0MSwgb3JcbiAgICAvLyBVKzUzNDUsIHJldHVybiB0aGUgbGFzdCBwb2ludGVyIGNvcnJlc3BvbmRpbmcgdG8gY29kZSBwb2ludCBpblxuICAgIC8vIGluZGV4LlxuICAgIGlmIChjb2RlX3BvaW50ID09PSAweDI1NTAgfHwgY29kZV9wb2ludCA9PT0gMHgyNTVFIHx8XG4gICAgICAgIGNvZGVfcG9pbnQgPT09IDB4MjU2MSB8fCBjb2RlX3BvaW50ID09PSAweDI1NkEgfHxcbiAgICAgICAgY29kZV9wb2ludCA9PT0gMHg1MzQxIHx8IGNvZGVfcG9pbnQgPT09IDB4NTM0NSkge1xuICAgICAgcmV0dXJuIGluZGV4Lmxhc3RJbmRleE9mKGNvZGVfcG9pbnQpO1xuICAgIH1cblxuICAgIC8vIDMuIFJldHVybiB0aGUgaW5kZXggcG9pbnRlciBmb3IgY29kZSBwb2ludCBpbiBpbmRleC5cbiAgICByZXR1cm4gaW5kZXhQb2ludGVyRm9yKGNvZGVfcG9pbnQsIGluZGV4Xyk7XG4gIH1cblxuICAvL1xuICAvLyA3LiBBUElcbiAgLy9cblxuICAvKiogQGNvbnN0ICovIHZhciBERUZBVUxUX0VOQ09ESU5HID0gJ3V0Zi04JztcblxuICAvLyA3LjEgSW50ZXJmYWNlIFRleHREZWNvZGVyXG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge3N0cmluZz19IGVuY29kaW5nIFRoZSBsYWJlbCBvZiB0aGUgZW5jb2Rpbmc7XG4gICAqICAgICBkZWZhdWx0cyB0byAndXRmLTgnLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFRleHREZWNvZGVyKGVuY29kaW5nLCBvcHRpb25zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRleHREZWNvZGVyKSkge1xuICAgICAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcihlbmNvZGluZywgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVuY29kaW5nID0gZW5jb2RpbmcgIT09IHVuZGVmaW5lZCA/IFN0cmluZyhlbmNvZGluZykgOiBERUZBVUxUX0VOQ09ESU5HO1xuICAgIG9wdGlvbnMgPSBUb0RpY3Rpb25hcnkob3B0aW9ucyk7XG4gICAgLyoqIEBwcml2YXRlICovXG4gICAgdGhpcy5fZW5jb2RpbmcgPSBnZXRFbmNvZGluZyhlbmNvZGluZyk7XG4gICAgaWYgKHRoaXMuX2VuY29kaW5nID09PSBudWxsIHx8IHRoaXMuX2VuY29kaW5nLm5hbWUgPT09ICdyZXBsYWNlbWVudCcpXG4gICAgICB0aHJvdyBSYW5nZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpO1xuXG4gICAgaWYgKCFkZWNvZGVyc1t0aGlzLl9lbmNvZGluZy5uYW1lXSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0RlY29kZXIgbm90IHByZXNlbnQuJyArXG4gICAgICAgICAgICAgICAgICAnIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcz8nKTtcbiAgICB9XG5cbiAgICAvKiogQHByaXZhdGUgQHR5cGUge2Jvb2xlYW59ICovXG4gICAgdGhpcy5fc3RyZWFtaW5nID0gZmFsc2U7XG4gICAgLyoqIEBwcml2YXRlIEB0eXBlIHtib29sZWFufSAqL1xuICAgIHRoaXMuX0JPTXNlZW4gPSBmYWxzZTtcbiAgICAvKiogQHByaXZhdGUgQHR5cGUgez9EZWNvZGVyfSAqL1xuICAgIHRoaXMuX2RlY29kZXIgPSBudWxsO1xuICAgIC8qKiBAcHJpdmF0ZSBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgICB0aGlzLl9mYXRhbCA9IEJvb2xlYW4ob3B0aW9uc1snZmF0YWwnXSk7XG4gICAgLyoqIEBwcml2YXRlIEB0eXBlIHtib29sZWFufSAqL1xuICAgIHRoaXMuX2lnbm9yZUJPTSA9IEJvb2xlYW4ob3B0aW9uc1snaWdub3JlQk9NJ10pO1xuXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdlbmNvZGluZycsIHt2YWx1ZTogdGhpcy5fZW5jb2RpbmcubmFtZX0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdmYXRhbCcsIHt2YWx1ZTogdGhpcy5fZmF0YWx9KTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnaWdub3JlQk9NJywge3ZhbHVlOiB0aGlzLl9pZ25vcmVCT019KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbmNvZGluZyA9IHRoaXMuX2VuY29kaW5nLm5hbWU7XG4gICAgICB0aGlzLmZhdGFsID0gdGhpcy5fZmF0YWw7XG4gICAgICB0aGlzLmlnbm9yZUJPTSA9IHRoaXMuX2lnbm9yZUJPTTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIFRleHREZWNvZGVyLnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0FycmF5QnVmZmVyVmlldz19IGlucHV0IFRoZSBidWZmZXIgb2YgYnl0ZXMgdG8gZGVjb2RlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9uc1xuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGRlY29kZWQgc3RyaW5nLlxuICAgICAqL1xuICAgIGRlY29kZTogZnVuY3Rpb24gZGVjb2RlKGlucHV0LCBvcHRpb25zKSB7XG4gICAgICB2YXIgYnl0ZXM7XG4gICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiBpbnB1dCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXQpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmICdidWZmZXInIGluIGlucHV0ICYmXG4gICAgICAgICAgICAgICAgIGlucHV0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXQuYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmJ5dGVPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuYnl0ZUxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBieXRlcyA9IG5ldyBVaW50OEFycmF5KDApO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zID0gVG9EaWN0aW9uYXJ5KG9wdGlvbnMpO1xuXG4gICAgICBpZiAoIXRoaXMuX3N0cmVhbWluZykge1xuICAgICAgICB0aGlzLl9kZWNvZGVyID0gZGVjb2RlcnNbdGhpcy5fZW5jb2RpbmcubmFtZV0oe2ZhdGFsOiB0aGlzLl9mYXRhbH0pO1xuICAgICAgICB0aGlzLl9CT01zZWVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLl9zdHJlYW1pbmcgPSBCb29sZWFuKG9wdGlvbnNbJ3N0cmVhbSddKTtcblxuICAgICAgdmFyIGlucHV0X3N0cmVhbSA9IG5ldyBTdHJlYW0oYnl0ZXMpO1xuXG4gICAgICB2YXIgY29kZV9wb2ludHMgPSBbXTtcblxuICAgICAgLyoqIEB0eXBlIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSAqL1xuICAgICAgdmFyIHJlc3VsdDtcblxuICAgICAgd2hpbGUgKCFpbnB1dF9zdHJlYW0uZW5kT2ZTdHJlYW0oKSkge1xuICAgICAgICByZXN1bHQgPSB0aGlzLl9kZWNvZGVyLmhhbmRsZXIoaW5wdXRfc3RyZWFtLCBpbnB1dF9zdHJlYW0ucmVhZCgpKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gZmluaXNoZWQpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpXG4gICAgICAgICAgY29kZV9wb2ludHMucHVzaC5hcHBseShjb2RlX3BvaW50cywgLyoqQHR5cGUgeyFBcnJheS48bnVtYmVyPn0qLyhyZXN1bHQpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNvZGVfcG9pbnRzLnB1c2gocmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5fc3RyZWFtaW5nKSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICByZXN1bHQgPSB0aGlzLl9kZWNvZGVyLmhhbmRsZXIoaW5wdXRfc3RyZWFtLCBpbnB1dF9zdHJlYW0ucmVhZCgpKTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBmaW5pc2hlZClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKVxuICAgICAgICAgICAgY29kZV9wb2ludHMucHVzaC5hcHBseShjb2RlX3BvaW50cywgLyoqQHR5cGUgeyFBcnJheS48bnVtYmVyPn0qLyhyZXN1bHQpKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBjb2RlX3BvaW50cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIH0gd2hpbGUgKCFpbnB1dF9zdHJlYW0uZW5kT2ZTdHJlYW0oKSk7XG4gICAgICAgIHRoaXMuX2RlY29kZXIgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29kZV9wb2ludHMubGVuZ3RoKSB7XG4gICAgICAgIC8vIElmIGVuY29kaW5nIGlzIG9uZSBvZiB1dGYtOCwgdXRmLTE2YmUsIGFuZCB1dGYtMTZsZSwgYW5kXG4gICAgICAgIC8vIGlnbm9yZSBCT00gZmxhZyBhbmQgQk9NIHNlZW4gZmxhZyBhcmUgdW5zZXQsIHJ1biB0aGVzZVxuICAgICAgICAvLyBzdWJzdWJzdGVwczpcbiAgICAgICAgaWYgKFsndXRmLTgnLCAndXRmLTE2bGUnLCAndXRmLTE2YmUnXS5pbmRleE9mKHRoaXMuZW5jb2RpbmcpICE9PSAtMSAmJlxuICAgICAgICAgICAgIXRoaXMuX2lnbm9yZUJPTSAmJiAhdGhpcy5fQk9Nc2Vlbikge1xuICAgICAgICAgIC8vIElmIHRva2VuIGlzIFUrRkVGRiwgc2V0IEJPTSBzZWVuIGZsYWcuXG4gICAgICAgICAgaWYgKGNvZGVfcG9pbnRzWzBdID09PSAweEZFRkYpIHtcbiAgICAgICAgICAgIHRoaXMuX0JPTXNlZW4gPSB0cnVlO1xuICAgICAgICAgICAgY29kZV9wb2ludHMuc2hpZnQoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiB0b2tlbiBpcyBub3QgZW5kLW9mLXN0cmVhbSwgc2V0IEJPTSBzZWVuXG4gICAgICAgICAgICAvLyBmbGFnIGFuZCBhcHBlbmQgdG9rZW4gdG8gb3V0cHV0LlxuICAgICAgICAgICAgdGhpcy5fQk9Nc2VlbiA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb2RlUG9pbnRzVG9TdHJpbmcoY29kZV9wb2ludHMpO1xuICAgIH1cbiAgfTtcblxuICAvLyA3LjIgSW50ZXJmYWNlIFRleHRFbmNvZGVyXG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge3N0cmluZz19IGVuY29kaW5nIFRoZSBsYWJlbCBvZiB0aGUgZW5jb2Rpbmc7XG4gICAqICAgICBkZWZhdWx0cyB0byAndXRmLTgnLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFRleHRFbmNvZGVyKGVuY29kaW5nLCBvcHRpb25zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRleHRFbmNvZGVyKSlcbiAgICAgIHJldHVybiBuZXcgVGV4dEVuY29kZXIoZW5jb2RpbmcsIG9wdGlvbnMpO1xuICAgIGVuY29kaW5nID0gZW5jb2RpbmcgIT09IHVuZGVmaW5lZCA/IFN0cmluZyhlbmNvZGluZykgOiBERUZBVUxUX0VOQ09ESU5HO1xuICAgIG9wdGlvbnMgPSBUb0RpY3Rpb25hcnkob3B0aW9ucyk7XG4gICAgLyoqIEBwcml2YXRlICovXG4gICAgdGhpcy5fZW5jb2RpbmcgPSBnZXRFbmNvZGluZyhlbmNvZGluZyk7XG4gICAgaWYgKHRoaXMuX2VuY29kaW5nID09PSBudWxsIHx8IHRoaXMuX2VuY29kaW5nLm5hbWUgPT09ICdyZXBsYWNlbWVudCcpXG4gICAgICB0aHJvdyBSYW5nZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpO1xuXG4gICAgdmFyIGFsbG93TGVnYWN5RW5jb2RpbmcgPVxuICAgICAgICAgIEJvb2xlYW4ob3B0aW9uc1snTk9OU1RBTkRBUkRfYWxsb3dMZWdhY3lFbmNvZGluZyddKTtcbiAgICB2YXIgaXNMZWdhY3lFbmNvZGluZyA9ICh0aGlzLl9lbmNvZGluZy5uYW1lICE9PSAndXRmLTgnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW5jb2RpbmcubmFtZSAhPT0gJ3V0Zi0xNmxlJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuY29kaW5nLm5hbWUgIT09ICd1dGYtMTZiZScpO1xuICAgIGlmICh0aGlzLl9lbmNvZGluZyA9PT0gbnVsbCB8fCAoaXNMZWdhY3lFbmNvZGluZyAmJiAhYWxsb3dMZWdhY3lFbmNvZGluZykpXG4gICAgICB0aHJvdyBSYW5nZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpO1xuXG4gICAgaWYgKCFlbmNvZGVyc1t0aGlzLl9lbmNvZGluZy5uYW1lXSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0VuY29kZXIgbm90IHByZXNlbnQuJyArXG4gICAgICAgICAgICAgICAgICAnIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcz8nKTtcbiAgICB9XG5cbiAgICAvKiogQHByaXZhdGUgQHR5cGUge2Jvb2xlYW59ICovXG4gICAgdGhpcy5fc3RyZWFtaW5nID0gZmFsc2U7XG4gICAgLyoqIEBwcml2YXRlIEB0eXBlIHs/RW5jb2Rlcn0gKi9cbiAgICB0aGlzLl9lbmNvZGVyID0gbnVsbDtcbiAgICAvKiogQHByaXZhdGUgQHR5cGUge3tmYXRhbDogYm9vbGVhbn19ICovXG4gICAgdGhpcy5fb3B0aW9ucyA9IHtmYXRhbDogQm9vbGVhbihvcHRpb25zWydmYXRhbCddKX07XG5cbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdlbmNvZGluZycsIHt2YWx1ZTogdGhpcy5fZW5jb2RpbmcubmFtZX0pO1xuICAgIGVsc2VcbiAgICAgIHRoaXMuZW5jb2RpbmcgPSB0aGlzLl9lbmNvZGluZy5uYW1lO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBUZXh0RW5jb2Rlci5wcm90b3R5cGUgPSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRfc3RyaW5nIFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9uc1xuICAgICAqIEByZXR1cm4ge1VpbnQ4QXJyYXl9IEVuY29kZWQgYnl0ZXMsIGFzIGEgVWludDhBcnJheS5cbiAgICAgKi9cbiAgICBlbmNvZGU6IGZ1bmN0aW9uIGVuY29kZShvcHRfc3RyaW5nLCBvcHRpb25zKSB7XG4gICAgICBvcHRfc3RyaW5nID0gb3B0X3N0cmluZyA/IFN0cmluZyhvcHRfc3RyaW5nKSA6ICcnO1xuICAgICAgb3B0aW9ucyA9IFRvRGljdGlvbmFyeShvcHRpb25zKTtcblxuICAgICAgLy8gTk9URTogVGhpcyBvcHRpb24gaXMgbm9uc3RhbmRhcmQuIE5vbmUgb2YgdGhlIGVuY29kaW5nc1xuICAgICAgLy8gcGVybWl0dGVkIGZvciBlbmNvZGluZyAoaS5lLiBVVEYtOCwgVVRGLTE2KSBhcmUgc3RhdGVmdWwsXG4gICAgICAvLyBzbyBzdHJlYW1pbmcgaXMgbm90IG5lY2Vzc2FyeS5cbiAgICAgIGlmICghdGhpcy5fc3RyZWFtaW5nKVxuICAgICAgICB0aGlzLl9lbmNvZGVyID0gZW5jb2RlcnNbdGhpcy5fZW5jb2RpbmcubmFtZV0odGhpcy5fb3B0aW9ucyk7XG4gICAgICB0aGlzLl9zdHJlYW1pbmcgPSBCb29sZWFuKG9wdGlvbnNbJ3N0cmVhbSddKTtcblxuICAgICAgdmFyIGJ5dGVzID0gW107XG4gICAgICB2YXIgaW5wdXRfc3RyZWFtID0gbmV3IFN0cmVhbShzdHJpbmdUb0NvZGVQb2ludHMob3B0X3N0cmluZykpO1xuICAgICAgLyoqIEB0eXBlIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSAqL1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICghaW5wdXRfc3RyZWFtLmVuZE9mU3RyZWFtKCkpIHtcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5fZW5jb2Rlci5oYW5kbGVyKGlucHV0X3N0cmVhbSwgaW5wdXRfc3RyZWFtLnJlYWQoKSk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IGZpbmlzaGVkKVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKVxuICAgICAgICAgIGJ5dGVzLnB1c2guYXBwbHkoYnl0ZXMsIC8qKkB0eXBlIHshQXJyYXkuPG51bWJlcj59Ki8ocmVzdWx0KSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBieXRlcy5wdXNoKHJlc3VsdCk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuX3N0cmVhbWluZykge1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIHJlc3VsdCA9IHRoaXMuX2VuY29kZXIuaGFuZGxlcihpbnB1dF9zdHJlYW0sIGlucHV0X3N0cmVhbS5yZWFkKCkpO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IGZpbmlzaGVkKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSlcbiAgICAgICAgICAgIGJ5dGVzLnB1c2guYXBwbHkoYnl0ZXMsIC8qKkB0eXBlIHshQXJyYXkuPG51bWJlcj59Ki8ocmVzdWx0KSk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgYnl0ZXMucHVzaChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VuY29kZXIgPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ5dGVzKTtcbiAgICB9XG4gIH07XG5cblxuICAvL1xuICAvLyA4LiBUaGUgZW5jb2RpbmdcbiAgLy9cblxuICAvLyA4LjEgdXRmLThcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtEZWNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFVURjhEZWNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuXG4gICAgLy8gdXRmLTgncyBkZWNvZGVyJ3MgaGFzIGFuIGFzc29jaWF0ZWQgdXRmLTggY29kZSBwb2ludCwgdXRmLThcbiAgICAvLyBieXRlcyBzZWVuLCBhbmQgdXRmLTggYnl0ZXMgbmVlZGVkIChhbGwgaW5pdGlhbGx5IDApLCBhIHV0Zi04XG4gICAgLy8gbG93ZXIgYm91bmRhcnkgKGluaXRpYWxseSAweDgwKSwgYW5kIGEgdXRmLTggdXBwZXIgYm91bmRhcnlcbiAgICAvLyAoaW5pdGlhbGx5IDB4QkYpLlxuICAgIHZhciAvKiogQHR5cGUge251bWJlcn0gKi8gdXRmOF9jb2RlX3BvaW50ID0gMCxcbiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovIHV0ZjhfYnl0ZXNfc2VlbiA9IDAsXG4gICAgICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyB1dGY4X2J5dGVzX25lZWRlZCA9IDAsXG4gICAgICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyB1dGY4X2xvd2VyX2JvdW5kYXJ5ID0gMHg4MCxcbiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovIHV0ZjhfdXBwZXJfYm91bmRhcnkgPSAweEJGO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBUaGUgc3RyZWFtIG9mIGJ5dGVzIGJlaW5nIGRlY29kZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdGUgVGhlIG5leHQgYnl0ZSByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBUaGUgbmV4dCBjb2RlIHBvaW50KHMpXG4gICAgICogICAgIGRlY29kZWQsIG9yIG51bGwgaWYgbm90IGVub3VnaCBkYXRhIGV4aXN0cyBpbiB0aGUgaW5wdXRcbiAgICAgKiAgICAgc3RyZWFtIHRvIGRlY29kZSBhIGNvbXBsZXRlIGNvZGUgcG9pbnQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBiaXRlKSB7XG4gICAgICAvLyAxLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIHV0Zi04IGJ5dGVzIG5lZWRlZCBpcyBub3QgMCxcbiAgICAgIC8vIHNldCB1dGYtOCBieXRlcyBuZWVkZWQgdG8gMCBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0gJiYgdXRmOF9ieXRlc19uZWVkZWQgIT09IDApIHtcbiAgICAgICAgdXRmOF9ieXRlc19uZWVkZWQgPSAwO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAzLiBJZiB1dGYtOCBieXRlcyBuZWVkZWQgaXMgMCwgYmFzZWQgb24gYnl0ZTpcbiAgICAgIGlmICh1dGY4X2J5dGVzX25lZWRlZCA9PT0gMCkge1xuXG4gICAgICAgIC8vIDB4MDAgdG8gMHg3RlxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDAwLCAweDdGKSkge1xuICAgICAgICAgIC8vIFJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgYnl0ZS5cbiAgICAgICAgICByZXR1cm4gYml0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDB4QzIgdG8gMHhERlxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweEMyLCAweERGKSkge1xuICAgICAgICAgIC8vIFNldCB1dGYtOCBieXRlcyBuZWVkZWQgdG8gMSBhbmQgdXRmLTggY29kZSBwb2ludCB0byBieXRlXG4gICAgICAgICAgLy8g4oiSIDB4QzAuXG4gICAgICAgICAgdXRmOF9ieXRlc19uZWVkZWQgPSAxO1xuICAgICAgICAgIHV0ZjhfY29kZV9wb2ludCA9IGJpdGUgLSAweEMwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMHhFMCB0byAweEVGXG4gICAgICAgIGVsc2UgaWYgKGluUmFuZ2UoYml0ZSwgMHhFMCwgMHhFRikpIHtcbiAgICAgICAgICAvLyAxLiBJZiBieXRlIGlzIDB4RTAsIHNldCB1dGYtOCBsb3dlciBib3VuZGFyeSB0byAweEEwLlxuICAgICAgICAgIGlmIChiaXRlID09PSAweEUwKVxuICAgICAgICAgICAgdXRmOF9sb3dlcl9ib3VuZGFyeSA9IDB4QTA7XG4gICAgICAgICAgLy8gMi4gSWYgYnl0ZSBpcyAweEVELCBzZXQgdXRmLTggdXBwZXIgYm91bmRhcnkgdG8gMHg5Ri5cbiAgICAgICAgICBpZiAoYml0ZSA9PT0gMHhFRClcbiAgICAgICAgICAgIHV0ZjhfdXBwZXJfYm91bmRhcnkgPSAweDlGO1xuICAgICAgICAgIC8vIDMuIFNldCB1dGYtOCBieXRlcyBuZWVkZWQgdG8gMiBhbmQgdXRmLTggY29kZSBwb2ludCB0b1xuICAgICAgICAgIC8vIGJ5dGUg4oiSIDB4RTAuXG4gICAgICAgICAgdXRmOF9ieXRlc19uZWVkZWQgPSAyO1xuICAgICAgICAgIHV0ZjhfY29kZV9wb2ludCA9IGJpdGUgLSAweEUwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMHhGMCB0byAweEY0XG4gICAgICAgIGVsc2UgaWYgKGluUmFuZ2UoYml0ZSwgMHhGMCwgMHhGNCkpIHtcbiAgICAgICAgICAvLyAxLiBJZiBieXRlIGlzIDB4RjAsIHNldCB1dGYtOCBsb3dlciBib3VuZGFyeSB0byAweDkwLlxuICAgICAgICAgIGlmIChiaXRlID09PSAweEYwKVxuICAgICAgICAgICAgdXRmOF9sb3dlcl9ib3VuZGFyeSA9IDB4OTA7XG4gICAgICAgICAgLy8gMi4gSWYgYnl0ZSBpcyAweEY0LCBzZXQgdXRmLTggdXBwZXIgYm91bmRhcnkgdG8gMHg4Ri5cbiAgICAgICAgICBpZiAoYml0ZSA9PT0gMHhGNClcbiAgICAgICAgICAgIHV0ZjhfdXBwZXJfYm91bmRhcnkgPSAweDhGO1xuICAgICAgICAgIC8vIDMuIFNldCB1dGYtOCBieXRlcyBuZWVkZWQgdG8gMyBhbmQgdXRmLTggY29kZSBwb2ludCB0b1xuICAgICAgICAgIC8vIGJ5dGUg4oiSIDB4RjAuXG4gICAgICAgICAgdXRmOF9ieXRlc19uZWVkZWQgPSAzO1xuICAgICAgICAgIHV0ZjhfY29kZV9wb2ludCA9IGJpdGUgLSAweEYwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIC8vIFJldHVybiBlcnJvci5cbiAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZW4gKGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4QzIgdG8gMHhGNCkgc2V0IHV0Zi04IGNvZGVcbiAgICAgICAgLy8gcG9pbnQgdG8gdXRmLTggY29kZSBwb2ludCA8PCAoNiDDlyB1dGYtOCBieXRlcyBuZWVkZWQpIGFuZFxuICAgICAgICAvLyByZXR1cm4gY29udGludWUuXG4gICAgICAgIHV0ZjhfY29kZV9wb2ludCA9IHV0ZjhfY29kZV9wb2ludCA8PCAoNiAqIHV0ZjhfYnl0ZXNfbmVlZGVkKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIGJ5dGUgaXMgbm90IGluIHRoZSByYW5nZSB1dGYtOCBsb3dlciBib3VuZGFyeSB0byB1dGYtOFxuICAgICAgLy8gdXBwZXIgYm91bmRhcnksIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICAgIGlmICghaW5SYW5nZShiaXRlLCB1dGY4X2xvd2VyX2JvdW5kYXJ5LCB1dGY4X3VwcGVyX2JvdW5kYXJ5KSkge1xuXG4gICAgICAgIC8vIDEuIFNldCB1dGYtOCBjb2RlIHBvaW50LCB1dGYtOCBieXRlcyBuZWVkZWQsIGFuZCB1dGYtOFxuICAgICAgICAvLyBieXRlcyBzZWVuIHRvIDAsIHNldCB1dGYtOCBsb3dlciBib3VuZGFyeSB0byAweDgwLCBhbmQgc2V0XG4gICAgICAgIC8vIHV0Zi04IHVwcGVyIGJvdW5kYXJ5IHRvIDB4QkYuXG4gICAgICAgIHV0ZjhfY29kZV9wb2ludCA9IHV0ZjhfYnl0ZXNfbmVlZGVkID0gdXRmOF9ieXRlc19zZWVuID0gMDtcbiAgICAgICAgdXRmOF9sb3dlcl9ib3VuZGFyeSA9IDB4ODA7XG4gICAgICAgIHV0ZjhfdXBwZXJfYm91bmRhcnkgPSAweEJGO1xuXG4gICAgICAgIC8vIDIuIFByZXBlbmQgYnl0ZSB0byBzdHJlYW0uXG4gICAgICAgIHN0cmVhbS5wcmVwZW5kKGJpdGUpO1xuXG4gICAgICAgIC8vIDMuIFJldHVybiBlcnJvci5cbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICB9XG5cbiAgICAgIC8vIDUuIFNldCB1dGYtOCBsb3dlciBib3VuZGFyeSB0byAweDgwIGFuZCB1dGYtOCB1cHBlciBib3VuZGFyeVxuICAgICAgLy8gdG8gMHhCRi5cbiAgICAgIHV0ZjhfbG93ZXJfYm91bmRhcnkgPSAweDgwO1xuICAgICAgdXRmOF91cHBlcl9ib3VuZGFyeSA9IDB4QkY7XG5cbiAgICAgIC8vIDYuIEluY3JlYXNlIHV0Zi04IGJ5dGVzIHNlZW4gYnkgb25lIGFuZCBzZXQgdXRmLTggY29kZSBwb2ludFxuICAgICAgLy8gdG8gdXRmLTggY29kZSBwb2ludCArIChieXRlIOKIkiAweDgwKSA8PCAoNiDDlyAodXRmLTggYnl0ZXNcbiAgICAgIC8vIG5lZWRlZCDiiJIgdXRmLTggYnl0ZXMgc2VlbikpLlxuICAgICAgdXRmOF9ieXRlc19zZWVuICs9IDE7XG4gICAgICB1dGY4X2NvZGVfcG9pbnQgKz0gKGJpdGUgLSAweDgwKSA8PCAoNiAqICh1dGY4X2J5dGVzX25lZWRlZCAtIHV0ZjhfYnl0ZXNfc2VlbikpO1xuXG4gICAgICAvLyA3LiBJZiB1dGYtOCBieXRlcyBzZWVuIGlzIG5vdCBlcXVhbCB0byB1dGYtOCBieXRlcyBuZWVkZWQsXG4gICAgICAvLyBjb250aW51ZS5cbiAgICAgIGlmICh1dGY4X2J5dGVzX3NlZW4gIT09IHV0ZjhfYnl0ZXNfbmVlZGVkKVxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgLy8gOC4gTGV0IGNvZGUgcG9pbnQgYmUgdXRmLTggY29kZSBwb2ludC5cbiAgICAgIHZhciBjb2RlX3BvaW50ID0gdXRmOF9jb2RlX3BvaW50O1xuXG4gICAgICAvLyA5LiBTZXQgdXRmLTggY29kZSBwb2ludCwgdXRmLTggYnl0ZXMgbmVlZGVkLCBhbmQgdXRmLTggYnl0ZXNcbiAgICAgIC8vIHNlZW4gdG8gMC5cbiAgICAgIHV0ZjhfY29kZV9wb2ludCA9IHV0ZjhfYnl0ZXNfbmVlZGVkID0gdXRmOF9ieXRlc19zZWVuID0gMDtcblxuICAgICAgLy8gMTAuIFJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtFbmNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFVURjhFbmNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gSW5wdXQgc3RyZWFtLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IE5leHQgY29kZSBwb2ludCByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IEJ5dGUocykgdG8gZW1pdC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGNvZGVfcG9pbnQpIHtcbiAgICAgIC8vIDEuIElmIGNvZGUgcG9pbnQgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMi4gSWYgY29kZSBwb2ludCBpcyBpbiB0aGUgcmFuZ2UgVSswMDAwIHRvIFUrMDA3RiwgcmV0dXJuIGFcbiAgICAgIC8vIGJ5dGUgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIGlmIChpblJhbmdlKGNvZGVfcG9pbnQsIDB4MDAwMCwgMHgwMDdmKSlcbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG5cbiAgICAgIC8vIDMuIFNldCBjb3VudCBhbmQgb2Zmc2V0IGJhc2VkIG9uIHRoZSByYW5nZSBjb2RlIHBvaW50IGlzIGluOlxuICAgICAgdmFyIGNvdW50LCBvZmZzZXQ7XG4gICAgICAvLyBVKzAwODAgdG8gVSswN0ZGOiAgICAxIGFuZCAweEMwXG4gICAgICBpZiAoaW5SYW5nZShjb2RlX3BvaW50LCAweDAwODAsIDB4MDdGRikpIHtcbiAgICAgICAgY291bnQgPSAxO1xuICAgICAgICBvZmZzZXQgPSAweEMwO1xuICAgICAgfVxuICAgICAgLy8gVSswODAwIHRvIFUrRkZGRjogICAgMiBhbmQgMHhFMFxuICAgICAgZWxzZSBpZiAoaW5SYW5nZShjb2RlX3BvaW50LCAweDA4MDAsIDB4RkZGRikpIHtcbiAgICAgICAgY291bnQgPSAyO1xuICAgICAgICBvZmZzZXQgPSAweEUwO1xuICAgICAgfVxuICAgICAgLy8gVSsxMDAwMCB0byBVKzEwRkZGRjogMyBhbmQgMHhGMFxuICAgICAgZWxzZSBpZiAoaW5SYW5nZShjb2RlX3BvaW50LCAweDEwMDAwLCAweDEwRkZGRikpIHtcbiAgICAgICAgY291bnQgPSAzO1xuICAgICAgICBvZmZzZXQgPSAweEYwO1xuICAgICAgfVxuXG4gICAgICAvLyA0LkxldCBieXRlcyBiZSBhIGJ5dGUgc2VxdWVuY2Ugd2hvc2UgZmlyc3QgYnl0ZSBpcyAoY29kZVxuICAgICAgLy8gcG9pbnQgPj4gKDYgw5cgY291bnQpKSArIG9mZnNldC5cbiAgICAgIHZhciBieXRlcyA9IFsoY29kZV9wb2ludCA+PiAoNiAqIGNvdW50KSkgKyBvZmZzZXRdO1xuXG4gICAgICAvLyA1LiBSdW4gdGhlc2Ugc3Vic3RlcHMgd2hpbGUgY291bnQgaXMgZ3JlYXRlciB0aGFuIDA6XG4gICAgICB3aGlsZSAoY291bnQgPiAwKSB7XG5cbiAgICAgICAgLy8gMS4gU2V0IHRlbXAgdG8gY29kZSBwb2ludCA+PiAoNiDDlyAoY291bnQg4oiSIDEpKS5cbiAgICAgICAgdmFyIHRlbXAgPSBjb2RlX3BvaW50ID4+ICg2ICogKGNvdW50IC0gMSkpO1xuXG4gICAgICAgIC8vIDIuIEFwcGVuZCB0byBieXRlcyAweDgwIHwgKHRlbXAgJiAweDNGKS5cbiAgICAgICAgYnl0ZXMucHVzaCgweDgwIHwgKHRlbXAgJiAweDNGKSk7XG5cbiAgICAgICAgLy8gMy4gRGVjcmVhc2UgY291bnQgYnkgb25lLlxuICAgICAgICBjb3VudCAtPSAxO1xuICAgICAgfVxuXG4gICAgICAvLyA2LiBSZXR1cm4gYnl0ZXMgYnl0ZXMsIGluIG9yZGVyLlxuICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgIH07XG4gIH1cblxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGVuY29kZXJzWyd1dGYtOCddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgVVRGOEVuY29kZXIob3B0aW9ucyk7XG4gIH07XG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZGVjb2RlcnNbJ3V0Zi04J10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBVVEY4RGVjb2RlcihvcHRpb25zKTtcbiAgfTtcblxuICAvL1xuICAvLyA5LiBMZWdhY3kgc2luZ2xlLWJ5dGUgZW5jb2RpbmdzXG4gIC8vXG5cbiAgLy8gOS4xIHNpbmdsZS1ieXRlIGRlY29kZXJcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RGVjb2Rlcn1cbiAgICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGluZGV4IFRoZSBlbmNvZGluZyBpbmRleC5cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBTaW5nbGVCeXRlRGVjb2RlcihpbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBUaGUgc3RyZWFtIG9mIGJ5dGVzIGJlaW5nIGRlY29kZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdGUgVGhlIG5leHQgYnl0ZSByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBUaGUgbmV4dCBjb2RlIHBvaW50KHMpXG4gICAgICogICAgIGRlY29kZWQsIG9yIG51bGwgaWYgbm90IGVub3VnaCBkYXRhIGV4aXN0cyBpbiB0aGUgaW5wdXRcbiAgICAgKiAgICAgc3RyZWFtIHRvIGRlY29kZSBhIGNvbXBsZXRlIGNvZGUgcG9pbnQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBiaXRlKSB7XG4gICAgICAvLyAxLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDIuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4MDAgdG8gMHg3RiwgcmV0dXJuIGEgY29kZSBwb2ludFxuICAgICAgLy8gd2hvc2UgdmFsdWUgaXMgYnl0ZS5cbiAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4MDAsIDB4N0YpKVxuICAgICAgICByZXR1cm4gYml0ZTtcblxuICAgICAgLy8gMy4gTGV0IGNvZGUgcG9pbnQgYmUgdGhlIGluZGV4IGNvZGUgcG9pbnQgZm9yIGJ5dGUg4oiSIDB4ODAgaW5cbiAgICAgIC8vIGluZGV4IHNpbmdsZS1ieXRlLlxuICAgICAgdmFyIGNvZGVfcG9pbnQgPSBpbmRleFtiaXRlIC0gMHg4MF07XG5cbiAgICAgIC8vIDQuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcmV0dXJuIGVycm9yLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IG51bGwpXG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICAvLyA1LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICByZXR1cm4gY29kZV9wb2ludDtcbiAgICB9O1xuICB9XG5cbiAgLy8gOS4yIHNpbmdsZS1ieXRlIGVuY29kZXJcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHshQXJyYXkuPD9udW1iZXI+fSBpbmRleCBUaGUgZW5jb2RpbmcgaW5kZXguXG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gU2luZ2xlQnl0ZUVuY29kZXIoaW5kZXgsIG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gSW5wdXQgc3RyZWFtLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IE5leHQgY29kZSBwb2ludCByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IEJ5dGUocykgdG8gZW1pdC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGNvZGVfcG9pbnQpIHtcbiAgICAgIC8vIDEuIElmIGNvZGUgcG9pbnQgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMi4gSWYgY29kZSBwb2ludCBpcyBpbiB0aGUgcmFuZ2UgVSswMDAwIHRvIFUrMDA3RiwgcmV0dXJuIGFcbiAgICAgIC8vIGJ5dGUgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIGlmIChpblJhbmdlKGNvZGVfcG9pbnQsIDB4MDAwMCwgMHgwMDdGKSlcbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG5cbiAgICAgIC8vIDMuIExldCBwb2ludGVyIGJlIHRoZSBpbmRleCBwb2ludGVyIGZvciBjb2RlIHBvaW50IGluIGluZGV4XG4gICAgICAvLyBzaW5nbGUtYnl0ZS5cbiAgICAgIHZhciBwb2ludGVyID0gaW5kZXhQb2ludGVyRm9yKGNvZGVfcG9pbnQsIGluZGV4KTtcblxuICAgICAgLy8gNC4gSWYgcG9pbnRlciBpcyBudWxsLCByZXR1cm4gZXJyb3Igd2l0aCBjb2RlIHBvaW50LlxuICAgICAgaWYgKHBvaW50ZXIgPT09IG51bGwpXG4gICAgICAgIGVuY29kZXJFcnJvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gNS4gUmV0dXJuIGEgYnl0ZSB3aG9zZSB2YWx1ZSBpcyBwb2ludGVyICsgMHg4MC5cbiAgICAgIHJldHVybiBwb2ludGVyICsgMHg4MDtcbiAgICB9O1xuICB9XG5cbiAgKGZ1bmN0aW9uKCkge1xuICAgIGlmICghKCdlbmNvZGluZy1pbmRleGVzJyBpbiBnbG9iYWwpKVxuICAgICAgcmV0dXJuO1xuICAgIGVuY29kaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKGNhdGVnb3J5KSB7XG4gICAgICBpZiAoY2F0ZWdvcnkuaGVhZGluZyAhPT0gJ0xlZ2FjeSBzaW5nbGUtYnl0ZSBlbmNvZGluZ3MnKVxuICAgICAgICByZXR1cm47XG4gICAgICBjYXRlZ29yeS5lbmNvZGluZ3MuZm9yRWFjaChmdW5jdGlvbihlbmNvZGluZykge1xuICAgICAgICB2YXIgbmFtZSA9IGVuY29kaW5nLm5hbWU7XG4gICAgICAgIHZhciBpZHggPSBpbmRleChuYW1lKTtcbiAgICAgICAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICAgICAgICBkZWNvZGVyc1tuYW1lXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFNpbmdsZUJ5dGVEZWNvZGVyKGlkeCwgb3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgICAgIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgICAgICAgZW5jb2RlcnNbbmFtZV0gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBTaW5nbGVCeXRlRW5jb2RlcihpZHgsIG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0oKSk7XG5cbiAgLy9cbiAgLy8gMTAuIExlZ2FjeSBtdWx0aS1ieXRlIENoaW5lc2UgKHNpbXBsaWZpZWQpIGVuY29kaW5nc1xuICAvL1xuXG4gIC8vIDEwLjEgZ2JrXG5cbiAgLy8gMTAuMS4xIGdiayBkZWNvZGVyXG4gIC8vIGdiaydzIGRlY29kZXIgaXMgZ2IxODAzMCdzIGRlY29kZXIuXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZGVjb2RlcnNbJ2diayddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgR0IxODAzMERlY29kZXIob3B0aW9ucyk7XG4gIH07XG5cbiAgLy8gMTAuMS4yIGdiayBlbmNvZGVyXG4gIC8vIGdiaydzIGVuY29kZXIgaXMgZ2IxODAzMCdzIGVuY29kZXIgd2l0aCBpdHMgZ2JrIGZsYWcgc2V0LlxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGVuY29kZXJzWydnYmsnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEdCMTgwMzBFbmNvZGVyKG9wdGlvbnMsIHRydWUpO1xuICB9O1xuXG4gIC8vIDEwLjIgZ2IxODAzMFxuXG4gIC8vIDEwLjIuMSBnYjE4MDMwIGRlY29kZXJcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RGVjb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBHQjE4MDMwRGVjb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvLyBnYjE4MDMwJ3MgZGVjb2RlciBoYXMgYW4gYXNzb2NpYXRlZCBnYjE4MDMwIGZpcnN0LCBnYjE4MDMwXG4gICAgLy8gc2Vjb25kLCBhbmQgZ2IxODAzMCB0aGlyZCAoYWxsIGluaXRpYWxseSAweDAwKS5cbiAgICB2YXIgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGdiMTgwMzBfZmlyc3QgPSAweDAwLFxuICAgICAgICAvKiogQHR5cGUge251bWJlcn0gKi8gZ2IxODAzMF9zZWNvbmQgPSAweDAwLFxuICAgICAgICAvKiogQHR5cGUge251bWJlcn0gKi8gZ2IxODAzMF90aGlyZCA9IDB4MDA7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBUaGUgc3RyZWFtIG9mIGJ5dGVzIGJlaW5nIGRlY29kZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdGUgVGhlIG5leHQgYnl0ZSByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBUaGUgbmV4dCBjb2RlIHBvaW50KHMpXG4gICAgICogICAgIGRlY29kZWQsIG9yIG51bGwgaWYgbm90IGVub3VnaCBkYXRhIGV4aXN0cyBpbiB0aGUgaW5wdXRcbiAgICAgKiAgICAgc3RyZWFtIHRvIGRlY29kZSBhIGNvbXBsZXRlIGNvZGUgcG9pbnQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBiaXRlKSB7XG4gICAgICAvLyAxLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIGdiMTgwMzAgZmlyc3QsIGdiMTgwMzBcbiAgICAgIC8vIHNlY29uZCwgYW5kIGdiMTgwMzAgdGhpcmQgYXJlIDB4MDAsIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmIGdiMTgwMzBfZmlyc3QgPT09IDB4MDAgJiZcbiAgICAgICAgICBnYjE4MDMwX3NlY29uZCA9PT0gMHgwMCAmJiBnYjE4MDMwX3RoaXJkID09PSAweDAwKSB7XG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcbiAgICAgIH1cbiAgICAgIC8vIDIuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSwgYW5kIGdiMTgwMzAgZmlyc3QsIGdiMTgwMzBcbiAgICAgIC8vIHNlY29uZCwgb3IgZ2IxODAzMCB0aGlyZCBpcyBub3QgMHgwMCwgc2V0IGdiMTgwMzAgZmlyc3QsXG4gICAgICAvLyBnYjE4MDMwIHNlY29uZCwgYW5kIGdiMTgwMzAgdGhpcmQgdG8gMHgwMCwgYW5kIHJldHVybiBlcnJvci5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmXG4gICAgICAgICAgKGdiMTgwMzBfZmlyc3QgIT09IDB4MDAgfHwgZ2IxODAzMF9zZWNvbmQgIT09IDB4MDAgfHwgZ2IxODAzMF90aGlyZCAhPT0gMHgwMCkpIHtcbiAgICAgICAgZ2IxODAzMF9maXJzdCA9IDB4MDA7XG4gICAgICAgIGdiMTgwMzBfc2Vjb25kID0gMHgwMDtcbiAgICAgICAgZ2IxODAzMF90aGlyZCA9IDB4MDA7XG4gICAgICAgIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICB9XG4gICAgICB2YXIgY29kZV9wb2ludDtcbiAgICAgIC8vIDMuIElmIGdiMTgwMzAgdGhpcmQgaXMgbm90IDB4MDAsIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICAgIGlmIChnYjE4MDMwX3RoaXJkICE9PSAweDAwKSB7XG4gICAgICAgIC8vIDEuIExldCBjb2RlIHBvaW50IGJlIG51bGwuXG4gICAgICAgIGNvZGVfcG9pbnQgPSBudWxsO1xuICAgICAgICAvLyAyLiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDMwIHRvIDB4MzksIHNldCBjb2RlIHBvaW50IHRvXG4gICAgICAgIC8vIHRoZSBpbmRleCBnYjE4MDMwIHJhbmdlcyBjb2RlIHBvaW50IGZvciAoKChnYjE4MDMwIGZpcnN0IOKIklxuICAgICAgICAvLyAweDgxKSDDlyAxMCArIGdiMTgwMzAgc2Vjb25kIOKIkiAweDMwKSDDlyAxMjYgKyBnYjE4MDMwIHRoaXJkIOKIklxuICAgICAgICAvLyAweDgxKSDDlyAxMCArIGJ5dGUg4oiSIDB4MzAuXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4MzAsIDB4MzkpKSB7XG4gICAgICAgICAgY29kZV9wb2ludCA9IGluZGV4R0IxODAzMFJhbmdlc0NvZGVQb2ludEZvcihcbiAgICAgICAgICAgICAgKCgoZ2IxODAzMF9maXJzdCAtIDB4ODEpICogMTAgKyAoZ2IxODAzMF9zZWNvbmQgLSAweDMwKSkgKiAxMjYgK1xuICAgICAgICAgICAgICAgKGdiMTgwMzBfdGhpcmQgLSAweDgxKSkgKiAxMCArIGJpdGUgLSAweDMwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIExldCBidWZmZXIgYmUgYSBieXRlIHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgZ2IxODAzMFxuICAgICAgICAvLyBzZWNvbmQsIGdiMTgwMzAgdGhpcmQsIGFuZCBieXRlLCBpbiBvcmRlci5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IFtnYjE4MDMwX3NlY29uZCwgZ2IxODAzMF90aGlyZCwgYml0ZV07XG5cbiAgICAgICAgLy8gNC4gU2V0IGdiMTgwMzAgZmlyc3QsIGdiMTgwMzAgc2Vjb25kLCBhbmQgZ2IxODAzMCB0aGlyZCB0b1xuICAgICAgICAvLyAweDAwLlxuICAgICAgICBnYjE4MDMwX2ZpcnN0ID0gMHgwMDtcbiAgICAgICAgZ2IxODAzMF9zZWNvbmQgPSAweDAwO1xuICAgICAgICBnYjE4MDMwX3RoaXJkID0gMHgwMDtcblxuICAgICAgICAvLyA1LiBJZiBjb2RlIHBvaW50IGlzIG51bGwsIHByZXBlbmQgYnVmZmVyIHRvIHN0cmVhbSBhbmRcbiAgICAgICAgLy8gcmV0dXJuIGVycm9yLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gbnVsbCkge1xuICAgICAgICAgIHN0cmVhbS5wcmVwZW5kKGJ1ZmZlcik7XG4gICAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA2LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBnYjE4MDMwIHNlY29uZCBpcyBub3QgMHgwMCwgcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgICAgaWYgKGdiMTgwMzBfc2Vjb25kICE9PSAweDAwKSB7XG5cbiAgICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHg4MSB0byAweEZFLCBzZXQgZ2IxODAzMCB0aGlyZFxuICAgICAgICAvLyB0byBieXRlIGFuZCByZXR1cm4gY29udGludWUuXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4ODEsIDB4RkUpKSB7XG4gICAgICAgICAgZ2IxODAzMF90aGlyZCA9IGJpdGU7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBQcmVwZW5kIGdiMTgwMzAgc2Vjb25kIGZvbGxvd2VkIGJ5IGJ5dGUgdG8gc3RyZWFtLCBzZXRcbiAgICAgICAgLy8gZ2IxODAzMCBmaXJzdCBhbmQgZ2IxODAzMCBzZWNvbmQgdG8gMHgwMCwgYW5kIHJldHVybiBlcnJvci5cbiAgICAgICAgc3RyZWFtLnByZXBlbmQoW2diMTgwMzBfc2Vjb25kLCBiaXRlXSk7XG4gICAgICAgIGdiMTgwMzBfZmlyc3QgPSAweDAwO1xuICAgICAgICBnYjE4MDMwX3NlY29uZCA9IDB4MDA7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiBnYjE4MDMwIGZpcnN0IGlzIG5vdCAweDAwLCBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICBpZiAoZ2IxODAzMF9maXJzdCAhPT0gMHgwMCkge1xuXG4gICAgICAgIC8vIDEuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4MzAgdG8gMHgzOSwgc2V0IGdiMTgwMzAgc2Vjb25kXG4gICAgICAgIC8vIHRvIGJ5dGUgYW5kIHJldHVybiBjb250aW51ZS5cbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgzMCwgMHgzOSkpIHtcbiAgICAgICAgICBnYjE4MDMwX3NlY29uZCA9IGJpdGU7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBMZXQgbGVhZCBiZSBnYjE4MDMwIGZpcnN0LCBsZXQgcG9pbnRlciBiZSBudWxsLCBhbmQgc2V0XG4gICAgICAgIC8vIGdiMTgwMzAgZmlyc3QgdG8gMHgwMC5cbiAgICAgICAgdmFyIGxlYWQgPSBnYjE4MDMwX2ZpcnN0O1xuICAgICAgICB2YXIgcG9pbnRlciA9IG51bGw7XG4gICAgICAgIGdiMTgwMzBfZmlyc3QgPSAweDAwO1xuXG4gICAgICAgIC8vIDMuIExldCBvZmZzZXQgYmUgMHg0MCBpZiBieXRlIGlzIGxlc3MgdGhhbiAweDdGIGFuZCAweDQxXG4gICAgICAgIC8vIG90aGVyd2lzZS5cbiAgICAgICAgdmFyIG9mZnNldCA9IGJpdGUgPCAweDdGID8gMHg0MCA6IDB4NDE7XG5cbiAgICAgICAgLy8gNC4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHg0MCB0byAweDdFIG9yIDB4ODAgdG8gMHhGRSxcbiAgICAgICAgLy8gc2V0IHBvaW50ZXIgdG8gKGxlYWQg4oiSIDB4ODEpIMOXIDE5MCArIChieXRlIOKIkiBvZmZzZXQpLlxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDQwLCAweDdFKSB8fCBpblJhbmdlKGJpdGUsIDB4ODAsIDB4RkUpKVxuICAgICAgICAgIHBvaW50ZXIgPSAobGVhZCAtIDB4ODEpICogMTkwICsgKGJpdGUgLSBvZmZzZXQpO1xuXG4gICAgICAgIC8vIDUuIExldCBjb2RlIHBvaW50IGJlIG51bGwgaWYgcG9pbnRlciBpcyBudWxsIGFuZCB0aGUgaW5kZXhcbiAgICAgICAgLy8gY29kZSBwb2ludCBmb3IgcG9pbnRlciBpbiBpbmRleCBnYjE4MDMwIG90aGVyd2lzZS5cbiAgICAgICAgY29kZV9wb2ludCA9IHBvaW50ZXIgPT09IG51bGwgPyBudWxsIDpcbiAgICAgICAgICAgIGluZGV4Q29kZVBvaW50Rm9yKHBvaW50ZXIsIGluZGV4KCdnYjE4MDMwJykpO1xuXG4gICAgICAgIC8vIDYuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCBhbmQgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHgwMCB0b1xuICAgICAgICAvLyAweDdGLCBwcmVwZW5kIGJ5dGUgdG8gc3RyZWFtLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gbnVsbCAmJiBpblJhbmdlKGJpdGUsIDB4MDAsIDB4N0YpKVxuICAgICAgICAgIHN0cmVhbS5wcmVwZW5kKGJpdGUpO1xuXG4gICAgICAgIC8vIDcuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcmV0dXJuIGVycm9yLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgICAvLyA4LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDAwIHRvIDB4N0YsIHJldHVybiBhIGNvZGUgcG9pbnRcbiAgICAgIC8vIHdob3NlIHZhbHVlIGlzIGJ5dGUuXG4gICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDAwLCAweDdGKSlcbiAgICAgICAgcmV0dXJuIGJpdGU7XG5cbiAgICAgIC8vIDcuIElmIGJ5dGUgaXMgMHg4MCwgcmV0dXJuIGNvZGUgcG9pbnQgVSsyMEFDLlxuICAgICAgaWYgKGJpdGUgPT09IDB4ODApXG4gICAgICAgIHJldHVybiAweDIwQUM7XG5cbiAgICAgIC8vIDguIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4ODEgdG8gMHhGRSwgc2V0IGdiMTgwMzAgZmlyc3QgdG9cbiAgICAgIC8vIGJ5dGUgYW5kIHJldHVybiBjb250aW51ZS5cbiAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4ODEsIDB4RkUpKSB7XG4gICAgICAgIGdiMTgwMzBfZmlyc3QgPSBiaXRlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gOS4gUmV0dXJuIGVycm9yLlxuICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIDEwLjIuMiBnYjE4MDMwIGVuY29kZXJcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbj19IGdia19mbGFnXG4gICAqL1xuICBmdW5jdGlvbiBHQjE4MDMwRW5jb2RlcihvcHRpb25zLCBnYmtfZmxhZykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLy8gZ2IxODAzMCdzIGRlY29kZXIgaGFzIGFuIGFzc29jaWF0ZWQgZ2JrIGZsYWcgKGluaXRpYWxseSB1bnNldCkuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBJbnB1dCBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgTmV4dCBjb2RlIHBvaW50IHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gQnl0ZShzKSB0byBlbWl0LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgY29kZV9wb2ludCkge1xuICAgICAgLy8gMS4gSWYgY29kZSBwb2ludCBpcyBlbmQtb2Ytc3RyZWFtLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAyLiBJZiBjb2RlIHBvaW50IGlzIGluIHRoZSByYW5nZSBVKzAwMDAgdG8gVSswMDdGLCByZXR1cm4gYVxuICAgICAgLy8gYnl0ZSB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgaWYgKGluUmFuZ2UoY29kZV9wb2ludCwgMHgwMDAwLCAweDAwN0YpKSB7XG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiB0aGUgZ2JrIGZsYWcgaXMgc2V0IGFuZCBjb2RlIHBvaW50IGlzIFUrMjBBQywgcmV0dXJuXG4gICAgICAvLyBieXRlIDB4ODAuXG4gICAgICBpZiAoZ2JrX2ZsYWcgJiYgY29kZV9wb2ludCA9PT0gMHgyMEFDKVxuICAgICAgICByZXR1cm4gMHg4MDtcblxuICAgICAgLy8gNC4gTGV0IHBvaW50ZXIgYmUgdGhlIGluZGV4IHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQgaW4gaW5kZXhcbiAgICAgIC8vIGdiMTgwMzAuXG4gICAgICB2YXIgcG9pbnRlciA9IGluZGV4UG9pbnRlckZvcihjb2RlX3BvaW50LCBpbmRleCgnZ2IxODAzMCcpKTtcblxuICAgICAgLy8gNS4gSWYgcG9pbnRlciBpcyBub3QgbnVsbCwgcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgICAgaWYgKHBvaW50ZXIgIT09IG51bGwpIHtcblxuICAgICAgICAvLyAxLiBMZXQgbGVhZCBiZSBwb2ludGVyIC8gMTkwICsgMHg4MS5cbiAgICAgICAgdmFyIGxlYWQgPSBkaXYocG9pbnRlciwgMTkwKSArIDB4ODE7XG5cbiAgICAgICAgLy8gMi4gTGV0IHRyYWlsIGJlIHBvaW50ZXIgJSAxOTAuXG4gICAgICAgIHZhciB0cmFpbCA9IHBvaW50ZXIgJSAxOTA7XG5cbiAgICAgICAgLy8gMy4gTGV0IG9mZnNldCBiZSAweDQwIGlmIHRyYWlsIGlzIGxlc3MgdGhhbiAweDNGIGFuZCAweDQxIG90aGVyd2lzZS5cbiAgICAgICAgdmFyIG9mZnNldCA9IHRyYWlsIDwgMHgzRiA/IDB4NDAgOiAweDQxO1xuXG4gICAgICAgIC8vIDQuIFJldHVybiB0d28gYnl0ZXMgd2hvc2UgdmFsdWVzIGFyZSBsZWFkIGFuZCB0cmFpbCArIG9mZnNldC5cbiAgICAgICAgcmV0dXJuIFtsZWFkLCB0cmFpbCArIG9mZnNldF07XG4gICAgICB9XG5cbiAgICAgIC8vIDYuIElmIGdiayBmbGFnIGlzIHNldCwgcmV0dXJuIGVycm9yIHdpdGggY29kZSBwb2ludC5cbiAgICAgIGlmIChnYmtfZmxhZylcbiAgICAgICAgcmV0dXJuIGVuY29kZXJFcnJvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gNy4gU2V0IHBvaW50ZXIgdG8gdGhlIGluZGV4IGdiMTgwMzAgcmFuZ2VzIHBvaW50ZXIgZm9yIGNvZGVcbiAgICAgIC8vIHBvaW50LlxuICAgICAgcG9pbnRlciA9IGluZGV4R0IxODAzMFJhbmdlc1BvaW50ZXJGb3IoY29kZV9wb2ludCk7XG5cbiAgICAgIC8vIDguIExldCBieXRlMSBiZSBwb2ludGVyIC8gMTAgLyAxMjYgLyAxMC5cbiAgICAgIHZhciBieXRlMSA9IGRpdihkaXYoZGl2KHBvaW50ZXIsIDEwKSwgMTI2KSwgMTApO1xuXG4gICAgICAvLyA5LiBTZXQgcG9pbnRlciB0byBwb2ludGVyIOKIkiBieXRlMSDDlyAxMCDDlyAxMjYgw5cgMTAuXG4gICAgICBwb2ludGVyID0gcG9pbnRlciAtIGJ5dGUxICogMTAgKiAxMjYgKiAxMDtcblxuICAgICAgLy8gMTAuIExldCBieXRlMiBiZSBwb2ludGVyIC8gMTAgLyAxMjYuXG4gICAgICB2YXIgYnl0ZTIgPSBkaXYoZGl2KHBvaW50ZXIsIDEwKSwgMTI2KTtcblxuICAgICAgLy8gMTEuIFNldCBwb2ludGVyIHRvIHBvaW50ZXIg4oiSIGJ5dGUyIMOXIDEwIMOXIDEyNi5cbiAgICAgIHBvaW50ZXIgPSBwb2ludGVyIC0gYnl0ZTIgKiAxMCAqIDEyNjtcblxuICAgICAgLy8gMTIuIExldCBieXRlMyBiZSBwb2ludGVyIC8gMTAuXG4gICAgICB2YXIgYnl0ZTMgPSBkaXYocG9pbnRlciwgMTApO1xuXG4gICAgICAvLyAxMy4gTGV0IGJ5dGU0IGJlIHBvaW50ZXIg4oiSIGJ5dGUzIMOXIDEwLlxuICAgICAgdmFyIGJ5dGU0ID0gcG9pbnRlciAtIGJ5dGUzICogMTA7XG5cbiAgICAgIC8vIDE0LiBSZXR1cm4gZm91ciBieXRlcyB3aG9zZSB2YWx1ZXMgYXJlIGJ5dGUxICsgMHg4MSwgYnl0ZTIgK1xuICAgICAgLy8gMHgzMCwgYnl0ZTMgKyAweDgxLCBieXRlNCArIDB4MzAuXG4gICAgICByZXR1cm4gW2J5dGUxICsgMHg4MSxcbiAgICAgICAgICAgICAgYnl0ZTIgKyAweDMwLFxuICAgICAgICAgICAgICBieXRlMyArIDB4ODEsXG4gICAgICAgICAgICAgIGJ5dGU0ICsgMHgzMF07XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ2diMTgwMzAnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEdCMTgwMzBFbmNvZGVyKG9wdGlvbnMpO1xuICB9O1xuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWydnYjE4MDMwJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBHQjE4MDMwRGVjb2RlcihvcHRpb25zKTtcbiAgfTtcblxuXG4gIC8vXG4gIC8vIDExLiBMZWdhY3kgbXVsdGktYnl0ZSBDaGluZXNlICh0cmFkaXRpb25hbCkgZW5jb2RpbmdzXG4gIC8vXG5cbiAgLy8gMTEuMSBiaWc1XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RGVjb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBCaWc1RGVjb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvLyBiaWc1J3MgZGVjb2RlciBoYXMgYW4gYXNzb2NpYXRlZCBiaWc1IGxlYWQgKGluaXRpYWxseSAweDAwKS5cbiAgICB2YXIgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGJpZzVfbGVhZCA9IDB4MDA7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHtcbiAgICAgIC8vIDEuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSBhbmQgYmlnNSBsZWFkIGlzIG5vdCAweDAwLCBzZXRcbiAgICAgIC8vIGJpZzUgbGVhZCB0byAweDAwIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiBiaWc1X2xlYWQgIT09IDB4MDApIHtcbiAgICAgICAgYmlnNV9sZWFkID0gMHgwMDtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSBhbmQgYmlnNSBsZWFkIGlzIDB4MDAsIHJldHVyblxuICAgICAgLy8gZmluaXNoZWQuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiBiaWc1X2xlYWQgPT09IDB4MDApXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMy4gSWYgYmlnNSBsZWFkIGlzIG5vdCAweDAwLCBsZXQgbGVhZCBiZSBiaWc1IGxlYWQsIGxldFxuICAgICAgLy8gcG9pbnRlciBiZSBudWxsLCBzZXQgYmlnNSBsZWFkIHRvIDB4MDAsIGFuZCB0aGVuIHJ1biB0aGVzZVxuICAgICAgLy8gc3Vic3RlcHM6XG4gICAgICBpZiAoYmlnNV9sZWFkICE9PSAweDAwKSB7XG4gICAgICAgIHZhciBsZWFkID0gYmlnNV9sZWFkO1xuICAgICAgICB2YXIgcG9pbnRlciA9IG51bGw7XG4gICAgICAgIGJpZzVfbGVhZCA9IDB4MDA7XG5cbiAgICAgICAgLy8gMS4gTGV0IG9mZnNldCBiZSAweDQwIGlmIGJ5dGUgaXMgbGVzcyB0aGFuIDB4N0YgYW5kIDB4NjJcbiAgICAgICAgLy8gb3RoZXJ3aXNlLlxuICAgICAgICB2YXIgb2Zmc2V0ID0gYml0ZSA8IDB4N0YgPyAweDQwIDogMHg2MjtcblxuICAgICAgICAvLyAyLiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDQwIHRvIDB4N0Ugb3IgMHhBMSB0byAweEZFLFxuICAgICAgICAvLyBzZXQgcG9pbnRlciB0byAobGVhZCDiiJIgMHg4MSkgw5cgMTU3ICsgKGJ5dGUg4oiSIG9mZnNldCkuXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4NDAsIDB4N0UpIHx8IGluUmFuZ2UoYml0ZSwgMHhBMSwgMHhGRSkpXG4gICAgICAgICAgcG9pbnRlciA9IChsZWFkIC0gMHg4MSkgKiAxNTcgKyAoYml0ZSAtIG9mZnNldCk7XG5cbiAgICAgICAgLy8gMy4gSWYgdGhlcmUgaXMgYSByb3cgaW4gdGhlIHRhYmxlIGJlbG93IHdob3NlIGZpcnN0IGNvbHVtblxuICAgICAgICAvLyBpcyBwb2ludGVyLCByZXR1cm4gdGhlIHR3byBjb2RlIHBvaW50cyBsaXN0ZWQgaW4gaXRzIHNlY29uZFxuICAgICAgICAvLyBjb2x1bW5cbiAgICAgICAgLy8gUG9pbnRlciB8IENvZGUgcG9pbnRzXG4gICAgICAgIC8vIC0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tXG4gICAgICAgIC8vIDExMzMgICAgfCBVKzAwQ0EgVSswMzA0XG4gICAgICAgIC8vIDExMzUgICAgfCBVKzAwQ0EgVSswMzBDXG4gICAgICAgIC8vIDExNjQgICAgfCBVKzAwRUEgVSswMzA0XG4gICAgICAgIC8vIDExNjYgICAgfCBVKzAwRUEgVSswMzBDXG4gICAgICAgIHN3aXRjaCAocG9pbnRlcikge1xuICAgICAgICAgIGNhc2UgMTEzMzogcmV0dXJuIFsweDAwQ0EsIDB4MDMwNF07XG4gICAgICAgICAgY2FzZSAxMTM1OiByZXR1cm4gWzB4MDBDQSwgMHgwMzBDXTtcbiAgICAgICAgICBjYXNlIDExNjQ6IHJldHVybiBbMHgwMEVBLCAweDAzMDRdO1xuICAgICAgICAgIGNhc2UgMTE2NjogcmV0dXJuIFsweDAwRUEsIDB4MDMwQ107XG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LiBMZXQgY29kZSBwb2ludCBiZSBudWxsIGlmIHBvaW50ZXIgaXMgbnVsbCBhbmQgdGhlIGluZGV4XG4gICAgICAgIC8vIGNvZGUgcG9pbnQgZm9yIHBvaW50ZXIgaW4gaW5kZXggYmlnNSBvdGhlcndpc2UuXG4gICAgICAgIHZhciBjb2RlX3BvaW50ID0gKHBvaW50ZXIgPT09IG51bGwpID8gbnVsbCA6XG4gICAgICAgICAgICBpbmRleENvZGVQb2ludEZvcihwb2ludGVyLCBpbmRleCgnYmlnNScpKTtcblxuICAgICAgICAvLyA1LiBJZiBjb2RlIHBvaW50IGlzIG51bGwgYW5kIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4MDAgdG9cbiAgICAgICAgLy8gMHg3RiwgcHJlcGVuZCBieXRlIHRvIHN0cmVhbS5cbiAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IG51bGwgJiYgaW5SYW5nZShiaXRlLCAweDAwLCAweDdGKSlcbiAgICAgICAgICBzdHJlYW0ucHJlcGVuZChiaXRlKTtcblxuICAgICAgICAvLyA2LiBJZiBjb2RlIHBvaW50IGlzIG51bGwsIHJldHVybiBlcnJvci5cbiAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IG51bGwpXG4gICAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgICAgLy8gNy4gUmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcbiAgICAgIH1cblxuICAgICAgLy8gNC4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHgwMCB0byAweDdGLCByZXR1cm4gYSBjb2RlIHBvaW50XG4gICAgICAvLyB3aG9zZSB2YWx1ZSBpcyBieXRlLlxuICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgwMCwgMHg3RikpXG4gICAgICAgIHJldHVybiBiaXRlO1xuXG4gICAgICAvLyA1LiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDgxIHRvIDB4RkUsIHNldCBiaWc1IGxlYWQgdG9cbiAgICAgIC8vIGJ5dGUgYW5kIHJldHVybiBjb250aW51ZS5cbiAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4ODEsIDB4RkUpKSB7XG4gICAgICAgIGJpZzVfbGVhZCA9IGJpdGU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyA2LiBSZXR1cm4gZXJyb3IuXG4gICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBCaWc1RW5jb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIElucHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7XG4gICAgICAvLyAxLiBJZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgaW4gdGhlIHJhbmdlIFUrMDAwMCB0byBVKzAwN0YsIHJldHVybiBhXG4gICAgICAvLyBieXRlIHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICBpZiAoaW5SYW5nZShjb2RlX3BvaW50LCAweDAwMDAsIDB4MDA3RikpXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuXG4gICAgICAvLyAzLiBMZXQgcG9pbnRlciBiZSB0aGUgaW5kZXggYmlnNSBwb2ludGVyIGZvciBjb2RlIHBvaW50LlxuICAgICAgdmFyIHBvaW50ZXIgPSBpbmRleEJpZzVQb2ludGVyRm9yKGNvZGVfcG9pbnQsIGluZGV4KCdiaWc1JykpO1xuXG4gICAgICAvLyA0LiBJZiBwb2ludGVyIGlzIG51bGwsIHJldHVybiBlcnJvciB3aXRoIGNvZGUgcG9pbnQuXG4gICAgICBpZiAocG9pbnRlciA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGVuY29kZXJFcnJvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gNS4gTGV0IGxlYWQgYmUgcG9pbnRlciAvIDE1NyArIDB4ODEuXG4gICAgICB2YXIgbGVhZCA9IGRpdihwb2ludGVyLCAxNTcpICsgMHg4MTtcblxuICAgICAgLy8gNi4gSWYgbGVhZCBpcyBsZXNzIHRoYW4gMHhBMSwgcmV0dXJuIGVycm9yIHdpdGggY29kZSBwb2ludC5cbiAgICAgIGlmIChsZWFkIDwgMHhBMSlcbiAgICAgICAgcmV0dXJuIGVuY29kZXJFcnJvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gNy4gTGV0IHRyYWlsIGJlIHBvaW50ZXIgJSAxNTcuXG4gICAgICB2YXIgdHJhaWwgPSBwb2ludGVyICUgMTU3O1xuXG4gICAgICAvLyA4LiBMZXQgb2Zmc2V0IGJlIDB4NDAgaWYgdHJhaWwgaXMgbGVzcyB0aGFuIDB4M0YgYW5kIDB4NjJcbiAgICAgIC8vIG90aGVyd2lzZS5cbiAgICAgIHZhciBvZmZzZXQgPSB0cmFpbCA8IDB4M0YgPyAweDQwIDogMHg2MjtcblxuICAgICAgLy8gUmV0dXJuIHR3byBieXRlcyB3aG9zZSB2YWx1ZXMgYXJlIGxlYWQgYW5kIHRyYWlsICsgb2Zmc2V0LlxuICAgICAgcmV0dXJuIFtsZWFkLCB0cmFpbCArIG9mZnNldF07XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ2JpZzUnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEJpZzVFbmNvZGVyKG9wdGlvbnMpO1xuICB9O1xuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWydiaWc1J10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBCaWc1RGVjb2RlcihvcHRpb25zKTtcbiAgfTtcblxuXG4gIC8vXG4gIC8vIDEyLiBMZWdhY3kgbXVsdGktYnl0ZSBKYXBhbmVzZSBlbmNvZGluZ3NcbiAgLy9cblxuICAvLyAxMi4xIGV1Yy1qcFxuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gRVVDSlBEZWNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuXG4gICAgLy8gZXVjLWpwJ3MgZGVjb2RlciBoYXMgYW4gYXNzb2NpYXRlZCBldWMtanAgamlzMDIxMiBmbGFnXG4gICAgLy8gKGluaXRpYWxseSB1bnNldCkgYW5kIGV1Yy1qcCBsZWFkIChpbml0aWFsbHkgMHgwMCkuXG4gICAgdmFyIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gZXVjanBfamlzMDIxMl9mbGFnID0gZmFsc2UsXG4gICAgICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyBldWNqcF9sZWFkID0gMHgwMDtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBieXRlcyBiZWluZyBkZWNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRlIFRoZSBuZXh0IGJ5dGUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gVGhlIG5leHQgY29kZSBwb2ludChzKVxuICAgICAqICAgICBkZWNvZGVkLCBvciBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YSBleGlzdHMgaW4gdGhlIGlucHV0XG4gICAgICogICAgIHN0cmVhbSB0byBkZWNvZGUgYSBjb21wbGV0ZSBjb2RlIHBvaW50LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgYml0ZSkge1xuICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBldWMtanAgbGVhZCBpcyBub3QgMHgwMCwgc2V0XG4gICAgICAvLyBldWMtanAgbGVhZCB0byAweDAwLCBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0gJiYgZXVjanBfbGVhZCAhPT0gMHgwMCkge1xuICAgICAgICBldWNqcF9sZWFkID0gMHgwMDtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSBhbmQgZXVjLWpwIGxlYWQgaXMgMHgwMCwgcmV0dXJuXG4gICAgICAvLyBmaW5pc2hlZC5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmIGV1Y2pwX2xlYWQgPT09IDB4MDApXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMy4gSWYgZXVjLWpwIGxlYWQgaXMgMHg4RSBhbmQgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHhBMSB0b1xuICAgICAgLy8gMHhERiwgc2V0IGV1Yy1qcCBsZWFkIHRvIDB4MDAgYW5kIHJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2VcbiAgICAgIC8vIHZhbHVlIGlzIDB4RkY2MSArIGJ5dGUg4oiSIDB4QTEuXG4gICAgICBpZiAoZXVjanBfbGVhZCA9PT0gMHg4RSAmJiBpblJhbmdlKGJpdGUsIDB4QTEsIDB4REYpKSB7XG4gICAgICAgIGV1Y2pwX2xlYWQgPSAweDAwO1xuICAgICAgICByZXR1cm4gMHhGRjYxICsgYml0ZSAtIDB4QTE7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIGV1Yy1qcCBsZWFkIGlzIDB4OEYgYW5kIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4QTEgdG9cbiAgICAgIC8vIDB4RkUsIHNldCB0aGUgZXVjLWpwIGppczAyMTIgZmxhZywgc2V0IGV1Yy1qcCBsZWFkIHRvIGJ5dGUsXG4gICAgICAvLyBhbmQgcmV0dXJuIGNvbnRpbnVlLlxuICAgICAgaWYgKGV1Y2pwX2xlYWQgPT09IDB4OEYgJiYgaW5SYW5nZShiaXRlLCAweEExLCAweEZFKSkge1xuICAgICAgICBldWNqcF9qaXMwMjEyX2ZsYWcgPSB0cnVlO1xuICAgICAgICBldWNqcF9sZWFkID0gYml0ZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIDUuIElmIGV1Yy1qcCBsZWFkIGlzIG5vdCAweDAwLCBsZXQgbGVhZCBiZSBldWMtanAgbGVhZCwgc2V0XG4gICAgICAvLyBldWMtanAgbGVhZCB0byAweDAwLCBhbmQgcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgICAgaWYgKGV1Y2pwX2xlYWQgIT09IDB4MDApIHtcbiAgICAgICAgdmFyIGxlYWQgPSBldWNqcF9sZWFkO1xuICAgICAgICBldWNqcF9sZWFkID0gMHgwMDtcblxuICAgICAgICAvLyAxLiBMZXQgY29kZSBwb2ludCBiZSBudWxsLlxuICAgICAgICB2YXIgY29kZV9wb2ludCA9IG51bGw7XG5cbiAgICAgICAgLy8gMi4gSWYgbGVhZCBhbmQgYnl0ZSBhcmUgYm90aCBpbiB0aGUgcmFuZ2UgMHhBMSB0byAweEZFLCBzZXRcbiAgICAgICAgLy8gY29kZSBwb2ludCB0byB0aGUgaW5kZXggY29kZSBwb2ludCBmb3IgKGxlYWQg4oiSIDB4QTEpIMOXIDk0ICtcbiAgICAgICAgLy8gYnl0ZSDiiJIgMHhBMSBpbiBpbmRleCBqaXMwMjA4IGlmIHRoZSBldWMtanAgamlzMDIxMiBmbGFnIGlzXG4gICAgICAgIC8vIHVuc2V0IGFuZCBpbiBpbmRleCBqaXMwMjEyIG90aGVyd2lzZS5cbiAgICAgICAgaWYgKGluUmFuZ2UobGVhZCwgMHhBMSwgMHhGRSkgJiYgaW5SYW5nZShiaXRlLCAweEExLCAweEZFKSkge1xuICAgICAgICAgIGNvZGVfcG9pbnQgPSBpbmRleENvZGVQb2ludEZvcihcbiAgICAgICAgICAgIChsZWFkIC0gMHhBMSkgKiA5NCArIChiaXRlIC0gMHhBMSksXG4gICAgICAgICAgICBpbmRleCghZXVjanBfamlzMDIxMl9mbGFnID8gJ2ppczAyMDgnIDogJ2ppczAyMTInKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBVbnNldCB0aGUgZXVjLWpwIGppczAyMTIgZmxhZy5cbiAgICAgICAgZXVjanBfamlzMDIxMl9mbGFnID0gZmFsc2U7XG5cbiAgICAgICAgLy8gNC4gSWYgYnl0ZSBpcyBub3QgaW4gdGhlIHJhbmdlIDB4QTEgdG8gMHhGRSwgcHJlcGVuZCBieXRlXG4gICAgICAgIC8vIHRvIHN0cmVhbS5cbiAgICAgICAgaWYgKCFpblJhbmdlKGJpdGUsIDB4QTEsIDB4RkUpKVxuICAgICAgICAgIHN0cmVhbS5wcmVwZW5kKGJpdGUpO1xuXG4gICAgICAgIC8vIDUuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcmV0dXJuIGVycm9yLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgICAvLyA2LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDAwIHRvIDB4N0YsIHJldHVybiBhIGNvZGUgcG9pbnRcbiAgICAgIC8vIHdob3NlIHZhbHVlIGlzIGJ5dGUuXG4gICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDAwLCAweDdGKSlcbiAgICAgICAgcmV0dXJuIGJpdGU7XG5cbiAgICAgIC8vIDcuIElmIGJ5dGUgaXMgMHg4RSwgMHg4Riwgb3IgaW4gdGhlIHJhbmdlIDB4QTEgdG8gMHhGRSwgc2V0XG4gICAgICAvLyBldWMtanAgbGVhZCB0byBieXRlIGFuZCByZXR1cm4gY29udGludWUuXG4gICAgICBpZiAoYml0ZSA9PT0gMHg4RSB8fCBiaXRlID09PSAweDhGIHx8IGluUmFuZ2UoYml0ZSwgMHhBMSwgMHhGRSkpIHtcbiAgICAgICAgZXVjanBfbGVhZCA9IGJpdGU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyA4LiBSZXR1cm4gZXJyb3IuXG4gICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBFVUNKUEVuY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBJbnB1dCBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgTmV4dCBjb2RlIHBvaW50IHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gQnl0ZShzKSB0byBlbWl0LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgY29kZV9wb2ludCkge1xuICAgICAgLy8gMS4gSWYgY29kZSBwb2ludCBpcyBlbmQtb2Ytc3RyZWFtLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAyLiBJZiBjb2RlIHBvaW50IGlzIGluIHRoZSByYW5nZSBVKzAwMDAgdG8gVSswMDdGLCByZXR1cm4gYVxuICAgICAgLy8gYnl0ZSB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgaWYgKGluUmFuZ2UoY29kZV9wb2ludCwgMHgwMDAwLCAweDAwN0YpKVxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcblxuICAgICAgLy8gMy4gSWYgY29kZSBwb2ludCBpcyBVKzAwQTUsIHJldHVybiBieXRlIDB4NUMuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gMHgwMEE1KVxuICAgICAgICByZXR1cm4gMHg1QztcblxuICAgICAgLy8gNC4gSWYgY29kZSBwb2ludCBpcyBVKzIwM0UsIHJldHVybiBieXRlIDB4N0UuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gMHgyMDNFKVxuICAgICAgICByZXR1cm4gMHg3RTtcblxuICAgICAgLy8gNS4gSWYgY29kZSBwb2ludCBpcyBpbiB0aGUgcmFuZ2UgVStGRjYxIHRvIFUrRkY5RiwgcmV0dXJuIHR3b1xuICAgICAgLy8gYnl0ZXMgd2hvc2UgdmFsdWVzIGFyZSAweDhFIGFuZCBjb2RlIHBvaW50IOKIkiAweEZGNjEgKyAweEExLlxuICAgICAgaWYgKGluUmFuZ2UoY29kZV9wb2ludCwgMHhGRjYxLCAweEZGOUYpKVxuICAgICAgICByZXR1cm4gWzB4OEUsIGNvZGVfcG9pbnQgLSAweEZGNjEgKyAweEExXTtcblxuICAgICAgLy8gNi4gSWYgY29kZSBwb2ludCBpcyBVKzIwMjIsIHNldCBpdCB0byBVK0ZGMEQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gMHgyMDIyKVxuICAgICAgICBjb2RlX3BvaW50ID0gMHhGRjBEO1xuXG4gICAgICAvLyA3LiBMZXQgcG9pbnRlciBiZSB0aGUgaW5kZXggcG9pbnRlciBmb3IgY29kZSBwb2ludCBpbiBpbmRleFxuICAgICAgLy8gamlzMDIwOC5cbiAgICAgIHZhciBwb2ludGVyID0gaW5kZXhQb2ludGVyRm9yKGNvZGVfcG9pbnQsIGluZGV4KCdqaXMwMjA4JykpO1xuXG4gICAgICAvLyA4LiBJZiBwb2ludGVyIGlzIG51bGwsIHJldHVybiBlcnJvciB3aXRoIGNvZGUgcG9pbnQuXG4gICAgICBpZiAocG9pbnRlciA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGVuY29kZXJFcnJvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gOS4gTGV0IGxlYWQgYmUgcG9pbnRlciAvIDk0ICsgMHhBMS5cbiAgICAgIHZhciBsZWFkID0gZGl2KHBvaW50ZXIsIDk0KSArIDB4QTE7XG5cbiAgICAgIC8vIDEwLiBMZXQgdHJhaWwgYmUgcG9pbnRlciAlIDk0ICsgMHhBMS5cbiAgICAgIHZhciB0cmFpbCA9IHBvaW50ZXIgJSA5NCArIDB4QTE7XG5cbiAgICAgIC8vIDExLiBSZXR1cm4gdHdvIGJ5dGVzIHdob3NlIHZhbHVlcyBhcmUgbGVhZCBhbmQgdHJhaWwuXG4gICAgICByZXR1cm4gW2xlYWQsIHRyYWlsXTtcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBlbmNvZGVyc1snZXVjLWpwJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBFVUNKUEVuY29kZXIob3B0aW9ucyk7XG4gIH07XG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZGVjb2RlcnNbJ2V1Yy1qcCddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgRVVDSlBEZWNvZGVyKG9wdGlvbnMpO1xuICB9O1xuXG4gIC8vIDEyLjIgaXNvLTIwMjItanBcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtEZWNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIElTTzIwMjJKUERlY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLyoqIEBlbnVtICovXG4gICAgdmFyIHN0YXRlcyA9IHtcbiAgICAgIEFTQ0lJOiAwLFxuICAgICAgUm9tYW46IDEsXG4gICAgICBLYXRha2FuYTogMixcbiAgICAgIExlYWRCeXRlOiAzLFxuICAgICAgVHJhaWxCeXRlOiA0LFxuICAgICAgRXNjYXBlU3RhcnQ6IDUsXG4gICAgICBFc2NhcGU6IDZcbiAgICB9O1xuICAgIC8vIGlzby0yMDIyLWpwJ3MgZGVjb2RlciBoYXMgYW4gYXNzb2NpYXRlZCBpc28tMjAyMi1qcCBkZWNvZGVyXG4gICAgLy8gc3RhdGUgKGluaXRpYWxseSBBU0NJSSksIGlzby0yMDIyLWpwIGRlY29kZXIgb3V0cHV0IHN0YXRlXG4gICAgLy8gKGluaXRpYWxseSBBU0NJSSksIGlzby0yMDIyLWpwIGxlYWQgKGluaXRpYWxseSAweDAwKSwgYW5kXG4gICAgLy8gaXNvLTIwMjItanAgb3V0cHV0IGZsYWcgKGluaXRpYWxseSB1bnNldCkuXG4gICAgdmFyIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IHN0YXRlcy5BU0NJSSxcbiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGlzbzIwMjJqcF9kZWNvZGVyX291dHB1dF9zdGF0ZSA9IHN0YXRlcy5BU0NJSSxcbiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGlzbzIwMjJqcF9sZWFkID0gMHgwMCxcbiAgICAgICAgLyoqIEB0eXBlIHtib29sZWFufSAqLyBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHtcbiAgICAgIC8vIHN3aXRjaGluZyBvbiBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlOlxuICAgICAgc3dpdGNoIChpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSkge1xuICAgICAgZGVmYXVsdDpcbiAgICAgIGNhc2Ugc3RhdGVzLkFTQ0lJOlxuICAgICAgICAvLyBBU0NJSVxuICAgICAgICAvLyBCYXNlZCBvbiBieXRlOlxuXG4gICAgICAgIC8vIDB4MUJcbiAgICAgICAgaWYgKGJpdGUgPT09IDB4MUIpIHtcbiAgICAgICAgICAvLyBTZXQgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byBlc2NhcGUgc3RhcnQgYW5kIHJldHVyblxuICAgICAgICAgIC8vIGNvbnRpbnVlLlxuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkVzY2FwZVN0YXJ0O1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMHgwMCB0byAweDdGLCBleGNsdWRpbmcgMHgwRSwgMHgwRiwgYW5kIDB4MUJcbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgwMCwgMHg3RikgJiYgYml0ZSAhPT0gMHgwRVxuICAgICAgICAgICAgJiYgYml0ZSAhPT0gMHgwRiAmJiBiaXRlICE9PSAweDFCKSB7XG4gICAgICAgICAgLy8gVW5zZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnIGFuZCByZXR1cm4gYSBjb2RlIHBvaW50XG4gICAgICAgICAgLy8gd2hvc2UgdmFsdWUgaXMgYnl0ZS5cbiAgICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gYml0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVuZC1vZi1zdHJlYW1cbiAgICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0pIHtcbiAgICAgICAgICAvLyBSZXR1cm4gZmluaXNoZWQuXG4gICAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAgIC8vIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZyBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgIGNhc2Ugc3RhdGVzLlJvbWFuOlxuICAgICAgICAvLyBSb21hblxuICAgICAgICAvLyBCYXNlZCBvbiBieXRlOlxuXG4gICAgICAgIC8vIDB4MUJcbiAgICAgICAgaWYgKGJpdGUgPT09IDB4MUIpIHtcbiAgICAgICAgICAvLyBTZXQgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byBlc2NhcGUgc3RhcnQgYW5kIHJldHVyblxuICAgICAgICAgIC8vIGNvbnRpbnVlLlxuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkVzY2FwZVN0YXJ0O1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMHg1Q1xuICAgICAgICBpZiAoYml0ZSA9PT0gMHg1Qykge1xuICAgICAgICAgIC8vIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZyBhbmQgcmV0dXJuIGNvZGUgcG9pbnRcbiAgICAgICAgICAvLyBVKzAwQTUuXG4gICAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIDB4MDBBNTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDB4N0VcbiAgICAgICAgaWYgKGJpdGUgPT09IDB4N0UpIHtcbiAgICAgICAgICAvLyBVbnNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcgYW5kIHJldHVybiBjb2RlIHBvaW50XG4gICAgICAgICAgLy8gVSsyMDNFLlxuICAgICAgICAgIGlzbzIwMjJqcF9vdXRwdXRfZmxhZyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiAweDIwM0U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAweDAwIHRvIDB4N0YsIGV4Y2x1ZGluZyAweDBFLCAweDBGLCAweDFCLCAweDVDLCBhbmQgMHg3RVxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDAwLCAweDdGKSAmJiBiaXRlICE9PSAweDBFICYmIGJpdGUgIT09IDB4MEZcbiAgICAgICAgICAgICYmIGJpdGUgIT09IDB4MUIgJiYgYml0ZSAhPT0gMHg1QyAmJiBiaXRlICE9PSAweDdFKSB7XG4gICAgICAgICAgLy8gVW5zZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnIGFuZCByZXR1cm4gYSBjb2RlIHBvaW50XG4gICAgICAgICAgLy8gd2hvc2UgdmFsdWUgaXMgYnl0ZS5cbiAgICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gYml0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVuZC1vZi1zdHJlYW1cbiAgICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0pIHtcbiAgICAgICAgICAvLyBSZXR1cm4gZmluaXNoZWQuXG4gICAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAgIC8vIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZyBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgIGNhc2Ugc3RhdGVzLkthdGFrYW5hOlxuICAgICAgICAvLyBLYXRha2FuYVxuICAgICAgICAvLyBCYXNlZCBvbiBieXRlOlxuXG4gICAgICAgIC8vIDB4MUJcbiAgICAgICAgaWYgKGJpdGUgPT09IDB4MUIpIHtcbiAgICAgICAgICAvLyBTZXQgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byBlc2NhcGUgc3RhcnQgYW5kIHJldHVyblxuICAgICAgICAgIC8vIGNvbnRpbnVlLlxuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkVzY2FwZVN0YXJ0O1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMHgyMSB0byAweDVGXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4MjEsIDB4NUYpKSB7XG4gICAgICAgICAgLy8gVW5zZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnIGFuZCByZXR1cm4gYSBjb2RlIHBvaW50XG4gICAgICAgICAgLy8gd2hvc2UgdmFsdWUgaXMgMHhGRjYxICsgYnl0ZSDiiJIgMHgyMS5cbiAgICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gMHhGRjYxICsgYml0ZSAtIDB4MjE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbmQtb2Ytc3RyZWFtXG4gICAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtKSB7XG4gICAgICAgICAgLy8gUmV0dXJuIGZpbmlzaGVkLlxuICAgICAgICAgIHJldHVybiBmaW5pc2hlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZVxuICAgICAgICAvLyBVbnNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcgYW5kIHJldHVybiBlcnJvci5cbiAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICBjYXNlIHN0YXRlcy5MZWFkQnl0ZTpcbiAgICAgICAgLy8gTGVhZCBieXRlXG4gICAgICAgIC8vIEJhc2VkIG9uIGJ5dGU6XG5cbiAgICAgICAgLy8gMHgxQlxuICAgICAgICBpZiAoYml0ZSA9PT0gMHgxQikge1xuICAgICAgICAgIC8vIFNldCBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlIHRvIGVzY2FwZSBzdGFydCBhbmQgcmV0dXJuXG4gICAgICAgICAgLy8gY29udGludWUuXG4gICAgICAgICAgaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBzdGF0ZXMuRXNjYXBlU3RhcnQ7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAweDIxIHRvIDB4N0VcbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgyMSwgMHg3RSkpIHtcbiAgICAgICAgICAvLyBVbnNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcsIHNldCBpc28tMjAyMi1qcCBsZWFkXG4gICAgICAgICAgLy8gdG8gYnl0ZSwgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byB0cmFpbCBieXRlLCBhbmRcbiAgICAgICAgICAvLyByZXR1cm4gY29udGludWUuXG4gICAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgICAgaXNvMjAyMmpwX2xlYWQgPSBiaXRlO1xuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLlRyYWlsQnl0ZTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVuZC1vZi1zdHJlYW1cbiAgICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0pIHtcbiAgICAgICAgICAvLyBSZXR1cm4gZmluaXNoZWQuXG4gICAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAgIC8vIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZyBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgIGNhc2Ugc3RhdGVzLlRyYWlsQnl0ZTpcbiAgICAgICAgLy8gVHJhaWwgYnl0ZVxuICAgICAgICAvLyBCYXNlZCBvbiBieXRlOlxuXG4gICAgICAgIC8vIDB4MUJcbiAgICAgICAgaWYgKGJpdGUgPT09IDB4MUIpIHtcbiAgICAgICAgICAvLyBTZXQgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byBlc2NhcGUgc3RhcnQgYW5kIHJldHVyblxuICAgICAgICAgIC8vIGNvbnRpbnVlLlxuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkVzY2FwZVN0YXJ0O1xuICAgICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMHgyMSB0byAweDdFXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4MjEsIDB4N0UpKSB7XG4gICAgICAgICAgLy8gMS4gU2V0IHRoZSBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlIHRvIGxlYWQgYnl0ZS5cbiAgICAgICAgICBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IHN0YXRlcy5MZWFkQnl0ZTtcblxuICAgICAgICAgIC8vIDIuIExldCBwb2ludGVyIGJlIChpc28tMjAyMi1qcCBsZWFkIOKIkiAweDIxKSDDlyA5NCArIGJ5dGUg4oiSIDB4MjEuXG4gICAgICAgICAgdmFyIHBvaW50ZXIgPSAoaXNvMjAyMmpwX2xlYWQgLSAweDIxKSAqIDk0ICsgYml0ZSAtIDB4MjE7XG5cbiAgICAgICAgICAvLyAzLiBMZXQgY29kZSBwb2ludCBiZSB0aGUgaW5kZXggY29kZSBwb2ludCBmb3IgcG9pbnRlciBpbiBpbmRleCBqaXMwMjA4LlxuICAgICAgICAgIHZhciBjb2RlX3BvaW50ID0gaW5kZXhDb2RlUG9pbnRGb3IocG9pbnRlciwgaW5kZXgoJ2ppczAyMDgnKSk7XG5cbiAgICAgICAgICAvLyA0LiBJZiBjb2RlIHBvaW50IGlzIG51bGwsIHJldHVybiBlcnJvci5cbiAgICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICAgICAgLy8gNS4gUmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW5kLW9mLXN0cmVhbVxuICAgICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSkge1xuICAgICAgICAgIC8vIFNldCB0aGUgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byBsZWFkIGJ5dGUsIHByZXBlbmRcbiAgICAgICAgICAvLyBieXRlIHRvIHN0cmVhbSwgYW5kIHJldHVybiBlcnJvci5cbiAgICAgICAgICBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IHN0YXRlcy5MZWFkQnl0ZTtcbiAgICAgICAgICBzdHJlYW0ucHJlcGVuZChiaXRlKTtcbiAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZVxuICAgICAgICAvLyBTZXQgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byBsZWFkIGJ5dGUgYW5kIHJldHVyblxuICAgICAgICAvLyBlcnJvci5cbiAgICAgICAgaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBzdGF0ZXMuTGVhZEJ5dGU7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICBjYXNlIHN0YXRlcy5Fc2NhcGVTdGFydDpcbiAgICAgICAgLy8gRXNjYXBlIHN0YXJ0XG5cbiAgICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBlaXRoZXIgMHgyNCBvciAweDI4LCBzZXQgaXNvLTIwMjItanAgbGVhZCB0b1xuICAgICAgICAvLyBieXRlLCBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlIHRvIGVzY2FwZSwgYW5kIHJldHVyblxuICAgICAgICAvLyBjb250aW51ZS5cbiAgICAgICAgaWYgKGJpdGUgPT09IDB4MjQgfHwgYml0ZSA9PT0gMHgyOCkge1xuICAgICAgICAgIGlzbzIwMjJqcF9sZWFkID0gYml0ZTtcbiAgICAgICAgICBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IHN0YXRlcy5Fc2NhcGU7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBQcmVwZW5kIGJ5dGUgdG8gc3RyZWFtLlxuICAgICAgICBzdHJlYW0ucHJlcGVuZChiaXRlKTtcblxuICAgICAgICAvLyAzLiBVbnNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcsIHNldCBpc28tMjAyMi1qcFxuICAgICAgICAvLyBkZWNvZGVyIHN0YXRlIHRvIGlzby0yMDIyLWpwIGRlY29kZXIgb3V0cHV0IHN0YXRlLCBhbmRcbiAgICAgICAgLy8gcmV0dXJuIGVycm9yLlxuICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBpc28yMDIyanBfZGVjb2Rlcl9vdXRwdXRfc3RhdGU7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICBjYXNlIHN0YXRlcy5Fc2NhcGU6XG4gICAgICAgIC8vIEVzY2FwZVxuXG4gICAgICAgIC8vIDEuIExldCBsZWFkIGJlIGlzby0yMDIyLWpwIGxlYWQgYW5kIHNldCBpc28tMjAyMi1qcCBsZWFkIHRvXG4gICAgICAgIC8vIDB4MDAuXG4gICAgICAgIHZhciBsZWFkID0gaXNvMjAyMmpwX2xlYWQ7XG4gICAgICAgIGlzbzIwMjJqcF9sZWFkID0gMHgwMDtcblxuICAgICAgICAvLyAyLiBMZXQgc3RhdGUgYmUgbnVsbC5cbiAgICAgICAgdmFyIHN0YXRlID0gbnVsbDtcblxuICAgICAgICAvLyAzLiBJZiBsZWFkIGlzIDB4MjggYW5kIGJ5dGUgaXMgMHg0Miwgc2V0IHN0YXRlIHRvIEFTQ0lJLlxuICAgICAgICBpZiAobGVhZCA9PT0gMHgyOCAmJiBiaXRlID09PSAweDQyKVxuICAgICAgICAgIHN0YXRlID0gc3RhdGVzLkFTQ0lJO1xuXG4gICAgICAgIC8vIDQuIElmIGxlYWQgaXMgMHgyOCBhbmQgYnl0ZSBpcyAweDRBLCBzZXQgc3RhdGUgdG8gUm9tYW4uXG4gICAgICAgIGlmIChsZWFkID09PSAweDI4ICYmIGJpdGUgPT09IDB4NEEpXG4gICAgICAgICAgc3RhdGUgPSBzdGF0ZXMuUm9tYW47XG5cbiAgICAgICAgLy8gNS4gSWYgbGVhZCBpcyAweDI4IGFuZCBieXRlIGlzIDB4NDksIHNldCBzdGF0ZSB0byBLYXRha2FuYS5cbiAgICAgICAgaWYgKGxlYWQgPT09IDB4MjggJiYgYml0ZSA9PT0gMHg0OSlcbiAgICAgICAgICBzdGF0ZSA9IHN0YXRlcy5LYXRha2FuYTtcblxuICAgICAgICAvLyA2LiBJZiBsZWFkIGlzIDB4MjQgYW5kIGJ5dGUgaXMgZWl0aGVyIDB4NDAgb3IgMHg0Miwgc2V0XG4gICAgICAgIC8vIHN0YXRlIHRvIGxlYWQgYnl0ZS5cbiAgICAgICAgaWYgKGxlYWQgPT09IDB4MjQgJiYgKGJpdGUgPT09IDB4NDAgfHwgYml0ZSA9PT0gMHg0MikpXG4gICAgICAgICAgc3RhdGUgPSBzdGF0ZXMuTGVhZEJ5dGU7XG5cbiAgICAgICAgLy8gNy4gSWYgc3RhdGUgaXMgbm9uLW51bGwsIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICAgICAgaWYgKHN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gMS4gU2V0IGlzby0yMDIyLWpwIGRlY29kZXIgc3RhdGUgYW5kIGlzby0yMDIyLWpwIGRlY29kZXJcbiAgICAgICAgICAvLyBvdXRwdXQgc3RhdGUgdG8gc3RhdGVzLlxuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBzdGF0ZTtcblxuICAgICAgICAgIC8vIDIuIExldCBvdXRwdXQgZmxhZyBiZSB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcuXG4gICAgICAgICAgdmFyIG91dHB1dF9mbGFnID0gaXNvMjAyMmpwX291dHB1dF9mbGFnO1xuXG4gICAgICAgICAgLy8gMy4gU2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZy5cbiAgICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSB0cnVlO1xuXG4gICAgICAgICAgLy8gNC4gUmV0dXJuIGNvbnRpbnVlLCBpZiBvdXRwdXQgZmxhZyBpcyB1bnNldCwgYW5kIGVycm9yXG4gICAgICAgICAgLy8gb3RoZXJ3aXNlLlxuICAgICAgICAgIHJldHVybiAhb3V0cHV0X2ZsYWcgPyBudWxsIDogZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDguIFByZXBlbmQgbGVhZCBhbmQgYnl0ZSB0byBzdHJlYW0uXG4gICAgICAgIHN0cmVhbS5wcmVwZW5kKFtsZWFkLCBiaXRlXSk7XG5cbiAgICAgICAgLy8gOS4gVW5zZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnLCBzZXQgaXNvLTIwMjItanBcbiAgICAgICAgLy8gZGVjb2RlciBzdGF0ZSB0byBpc28tMjAyMi1qcCBkZWNvZGVyIG91dHB1dCBzdGF0ZSBhbmRcbiAgICAgICAgLy8gcmV0dXJuIGVycm9yLlxuICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBpc28yMDIyanBfZGVjb2Rlcl9vdXRwdXRfc3RhdGU7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtFbmNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIElTTzIwMjJKUEVuY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLy8gaXNvLTIwMjItanAncyBlbmNvZGVyIGhhcyBhbiBhc3NvY2lhdGVkIGlzby0yMDIyLWpwIGVuY29kZXJcbiAgICAvLyBzdGF0ZSB3aGljaCBpcyBvbmUgb2YgQVNDSUksIFJvbWFuLCBhbmQgamlzMDIwOCAoaW5pdGlhbGx5XG4gICAgLy8gQVNDSUkpLlxuICAgIC8qKiBAZW51bSAqL1xuICAgIHZhciBzdGF0ZXMgPSB7XG4gICAgICBBU0NJSTogMCxcbiAgICAgIFJvbWFuOiAxLFxuICAgICAgamlzMDIwODogMlxuICAgIH07XG4gICAgdmFyIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyBpc28yMDIyanBfc3RhdGUgPSBzdGF0ZXMuQVNDSUk7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBJbnB1dCBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgTmV4dCBjb2RlIHBvaW50IHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gQnl0ZShzKSB0byBlbWl0LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgY29kZV9wb2ludCkge1xuICAgICAgLy8gMS4gSWYgY29kZSBwb2ludCBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBpc28tMjAyMi1qcCBlbmNvZGVyXG4gICAgICAvLyBzdGF0ZSBpcyBub3QgQVNDSUksIHByZXBlbmQgY29kZSBwb2ludCB0byBzdHJlYW0sIHNldFxuICAgICAgLy8gaXNvLTIwMjItanAgZW5jb2RlciBzdGF0ZSB0byBBU0NJSSwgYW5kIHJldHVybiB0aHJlZSBieXRlc1xuICAgICAgLy8gMHgxQiAweDI4IDB4NDIuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gZW5kX29mX3N0cmVhbSAmJlxuICAgICAgICAgIGlzbzIwMjJqcF9zdGF0ZSAhPT0gc3RhdGVzLkFTQ0lJKSB7XG4gICAgICAgIHN0cmVhbS5wcmVwZW5kKGNvZGVfcG9pbnQpO1xuICAgICAgICByZXR1cm4gWzB4MUIsIDB4MjgsIDB4NDJdO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0gYW5kIGlzby0yMDIyLWpwIGVuY29kZXJcbiAgICAgIC8vIHN0YXRlIGlzIEFTQ0lJLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gZW5kX29mX3N0cmVhbSAmJiBpc28yMDIyanBfc3RhdGUgPT09IHN0YXRlcy5BU0NJSSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAzLiBJZiBpc28tMjAyMi1qcCBlbmNvZGVyIHN0YXRlIGlzIEFTQ0lJIGFuZCBjb2RlIHBvaW50IGlzIGluXG4gICAgICAvLyB0aGUgcmFuZ2UgVSswMDAwIHRvIFUrMDA3RiwgcmV0dXJuIGEgYnl0ZSB3aG9zZSB2YWx1ZSBpcyBjb2RlXG4gICAgICAvLyBwb2ludC5cbiAgICAgIGlmIChpc28yMDIyanBfc3RhdGUgPT09IHN0YXRlcy5BU0NJSSAmJlxuICAgICAgICAgIGluUmFuZ2UoY29kZV9wb2ludCwgMHgwMDAwLCAweDAwN0YpKVxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcblxuICAgICAgLy8gNC4gSWYgaXNvLTIwMjItanAgZW5jb2RlciBzdGF0ZSBpcyBSb21hbiBhbmQgY29kZSBwb2ludCBpcyBpblxuICAgICAgLy8gdGhlIHJhbmdlIFUrMDAwMCB0byBVKzAwN0YsIGV4Y2x1ZGluZyBVKzAwNUMgYW5kIFUrMDA3RSwgb3JcbiAgICAgIC8vIGlzIFUrMDBBNSBvciBVKzIwM0UsIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICAgIGlmIChpc28yMDIyanBfc3RhdGUgPT09IHN0YXRlcy5Sb21hbiAmJlxuICAgICAgICAgIGluUmFuZ2UoY29kZV9wb2ludCwgMHgwMDAwLCAweDAwN0YpICYmXG4gICAgICAgICAgY29kZV9wb2ludCAhPT0gMHgwMDVDICYmIGNvZGVfcG9pbnQgIT09IDB4MDA3RSkge1xuXG4gICAgICAgIC8vIDEuIElmIGNvZGUgcG9pbnQgaXMgaW4gdGhlIHJhbmdlIFUrMDAwMCB0byBVKzAwN0YsIHJldHVybiBhXG4gICAgICAgIC8vIGJ5dGUgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgICAgaWYgKGluUmFuZ2UoY29kZV9wb2ludCwgMHgwMDAwLCAweDAwN0YpKVxuICAgICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuXG4gICAgICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgVSswMEE1LCByZXR1cm4gYnl0ZSAweDVDLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gMHgwMEE1KVxuICAgICAgICAgIHJldHVybiAweDVDO1xuXG4gICAgICAgIC8vIDMuIElmIGNvZGUgcG9pbnQgaXMgVSsyMDNFLCByZXR1cm4gYnl0ZSAweDdFLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gMHgyMDNFKVxuICAgICAgICAgIHJldHVybiAweDdFO1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiBjb2RlIHBvaW50IGlzIGluIHRoZSByYW5nZSBVKzAwMDAgdG8gVSswMDdGLCBhbmRcbiAgICAgIC8vIGlzby0yMDIyLWpwIGVuY29kZXIgc3RhdGUgaXMgbm90IEFTQ0lJLCBwcmVwZW5kIGNvZGUgcG9pbnQgdG9cbiAgICAgIC8vIHN0cmVhbSwgc2V0IGlzby0yMDIyLWpwIGVuY29kZXIgc3RhdGUgdG8gQVNDSUksIGFuZCByZXR1cm5cbiAgICAgIC8vIHRocmVlIGJ5dGVzIDB4MUIgMHgyOCAweDQyLlxuICAgICAgaWYgKGluUmFuZ2UoY29kZV9wb2ludCwgMHgwMDAwLCAweDAwN0YpICYmXG4gICAgICAgICAgaXNvMjAyMmpwX3N0YXRlICE9PSBzdGF0ZXMuQVNDSUkpIHtcbiAgICAgICAgc3RyZWFtLnByZXBlbmQoY29kZV9wb2ludCk7XG4gICAgICAgIGlzbzIwMjJqcF9zdGF0ZSA9IHN0YXRlcy5BU0NJSTtcbiAgICAgICAgcmV0dXJuIFsweDFCLCAweDI4LCAweDQyXTtcbiAgICAgIH1cblxuICAgICAgLy8gNi4gSWYgY29kZSBwb2ludCBpcyBlaXRoZXIgVSswMEE1IG9yIFUrMjAzRSwgYW5kIGlzby0yMDIyLWpwXG4gICAgICAvLyBlbmNvZGVyIHN0YXRlIGlzIG5vdCBSb21hbiwgcHJlcGVuZCBjb2RlIHBvaW50IHRvIHN0cmVhbSwgc2V0XG4gICAgICAvLyBpc28tMjAyMi1qcCBlbmNvZGVyIHN0YXRlIHRvIFJvbWFuLCBhbmQgcmV0dXJuIHRocmVlIGJ5dGVzXG4gICAgICAvLyAweDFCIDB4MjggMHg0QS5cbiAgICAgIGlmICgoY29kZV9wb2ludCA9PT0gMHgwMEE1IHx8IGNvZGVfcG9pbnQgPT09IDB4MjAzRSkgJiZcbiAgICAgICAgICBpc28yMDIyanBfc3RhdGUgIT09IHN0YXRlcy5Sb21hbikge1xuICAgICAgICBzdHJlYW0ucHJlcGVuZChjb2RlX3BvaW50KTtcbiAgICAgICAgaXNvMjAyMmpwX3N0YXRlID0gc3RhdGVzLlJvbWFuO1xuICAgICAgICByZXR1cm4gWzB4MUIsIDB4MjgsIDB4NEFdO1xuICAgICAgfVxuXG4gICAgICAvLyA3LiBJZiBjb2RlIHBvaW50IGlzIFUrMjAyMiwgc2V0IGl0IHRvIFUrRkYwRC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSAweDIwMjIpXG4gICAgICAgIGNvZGVfcG9pbnQgPSAweEZGMEQ7XG5cbiAgICAgIC8vIDguIExldCBwb2ludGVyIGJlIHRoZSBpbmRleCBwb2ludGVyIGZvciBjb2RlIHBvaW50IGluIGluZGV4XG4gICAgICAvLyBqaXMwMjA4LlxuICAgICAgdmFyIHBvaW50ZXIgPSBpbmRleFBvaW50ZXJGb3IoY29kZV9wb2ludCwgaW5kZXgoJ2ppczAyMDgnKSk7XG5cbiAgICAgIC8vIDkuIElmIHBvaW50ZXIgaXMgbnVsbCwgcmV0dXJuIGVycm9yIHdpdGggY29kZSBwb2ludC5cbiAgICAgIGlmIChwb2ludGVyID09PSBudWxsKVxuICAgICAgICByZXR1cm4gZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyAxMC4gSWYgaXNvLTIwMjItanAgZW5jb2RlciBzdGF0ZSBpcyBub3QgamlzMDIwOCwgcHJlcGVuZCBjb2RlXG4gICAgICAvLyBwb2ludCB0byBzdHJlYW0sIHNldCBpc28tMjAyMi1qcCBlbmNvZGVyIHN0YXRlIHRvIGppczAyMDgsXG4gICAgICAvLyBhbmQgcmV0dXJuIHRocmVlIGJ5dGVzIDB4MUIgMHgyNCAweDQyLlxuICAgICAgaWYgKGlzbzIwMjJqcF9zdGF0ZSAhPT0gc3RhdGVzLmppczAyMDgpIHtcbiAgICAgICAgc3RyZWFtLnByZXBlbmQoY29kZV9wb2ludCk7XG4gICAgICAgIGlzbzIwMjJqcF9zdGF0ZSA9IHN0YXRlcy5qaXMwMjA4O1xuICAgICAgICByZXR1cm4gWzB4MUIsIDB4MjQsIDB4NDJdO1xuICAgICAgfVxuXG4gICAgICAvLyAxMS4gTGV0IGxlYWQgYmUgcG9pbnRlciAvIDk0ICsgMHgyMS5cbiAgICAgIHZhciBsZWFkID0gZGl2KHBvaW50ZXIsIDk0KSArIDB4MjE7XG5cbiAgICAgIC8vIDEyLiBMZXQgdHJhaWwgYmUgcG9pbnRlciAlIDk0ICsgMHgyMS5cbiAgICAgIHZhciB0cmFpbCA9IHBvaW50ZXIgJSA5NCArIDB4MjE7XG5cbiAgICAgIC8vIDEzLiBSZXR1cm4gdHdvIGJ5dGVzIHdob3NlIHZhbHVlcyBhcmUgbGVhZCBhbmQgdHJhaWwuXG4gICAgICByZXR1cm4gW2xlYWQsIHRyYWlsXTtcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBlbmNvZGVyc1snaXNvLTIwMjItanAnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IElTTzIwMjJKUEVuY29kZXIob3B0aW9ucyk7XG4gIH07XG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZGVjb2RlcnNbJ2lzby0yMDIyLWpwJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBJU08yMDIySlBEZWNvZGVyKG9wdGlvbnMpO1xuICB9O1xuXG4gIC8vIDEyLjMgc2hpZnRfamlzXG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RGVjb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBTaGlmdEpJU0RlY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLy8gc2hpZnRfamlzJ3MgZGVjb2RlciBoYXMgYW4gYXNzb2NpYXRlZCBzaGlmdF9qaXMgbGVhZCAoaW5pdGlhbGx5XG4gICAgLy8gMHgwMCkuXG4gICAgdmFyIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyBzaGlmdGppc19sZWFkID0gMHgwMDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHtcbiAgICAgIC8vIDEuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSBhbmQgc2hpZnRfamlzIGxlYWQgaXMgbm90IDB4MDAsXG4gICAgICAvLyBzZXQgc2hpZnRfamlzIGxlYWQgdG8gMHgwMCBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0gJiYgc2hpZnRqaXNfbGVhZCAhPT0gMHgwMCkge1xuICAgICAgICBzaGlmdGppc19sZWFkID0gMHgwMDtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSBhbmQgc2hpZnRfamlzIGxlYWQgaXMgMHgwMCxcbiAgICAgIC8vIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmIHNoaWZ0amlzX2xlYWQgPT09IDB4MDApXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMy4gSWYgc2hpZnRfamlzIGxlYWQgaXMgbm90IDB4MDAsIGxldCBsZWFkIGJlIHNoaWZ0X2ppcyBsZWFkLFxuICAgICAgLy8gbGV0IHBvaW50ZXIgYmUgbnVsbCwgc2V0IHNoaWZ0X2ppcyBsZWFkIHRvIDB4MDAsIGFuZCB0aGVuIHJ1blxuICAgICAgLy8gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICBpZiAoc2hpZnRqaXNfbGVhZCAhPT0gMHgwMCkge1xuICAgICAgICB2YXIgbGVhZCA9IHNoaWZ0amlzX2xlYWQ7XG4gICAgICAgIHZhciBwb2ludGVyID0gbnVsbDtcbiAgICAgICAgc2hpZnRqaXNfbGVhZCA9IDB4MDA7XG5cbiAgICAgICAgLy8gMS4gTGV0IG9mZnNldCBiZSAweDQwLCBpZiBieXRlIGlzIGxlc3MgdGhhbiAweDdGLCBhbmQgMHg0MVxuICAgICAgICAvLyBvdGhlcndpc2UuXG4gICAgICAgIHZhciBvZmZzZXQgPSAoYml0ZSA8IDB4N0YpID8gMHg0MCA6IDB4NDE7XG5cbiAgICAgICAgLy8gMi4gTGV0IGxlYWQgb2Zmc2V0IGJlIDB4ODEsIGlmIGxlYWQgaXMgbGVzcyB0aGFuIDB4QTAsIGFuZFxuICAgICAgICAvLyAweEMxIG90aGVyd2lzZS5cbiAgICAgICAgdmFyIGxlYWRfb2Zmc2V0ID0gKGxlYWQgPCAweEEwKSA/IDB4ODEgOiAweEMxO1xuXG4gICAgICAgIC8vIDMuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4NDAgdG8gMHg3RSBvciAweDgwIHRvIDB4RkMsXG4gICAgICAgIC8vIHNldCBwb2ludGVyIHRvIChsZWFkIOKIkiBsZWFkIG9mZnNldCkgw5cgMTg4ICsgYnl0ZSDiiJIgb2Zmc2V0LlxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDQwLCAweDdFKSB8fCBpblJhbmdlKGJpdGUsIDB4ODAsIDB4RkMpKVxuICAgICAgICAgIHBvaW50ZXIgPSAobGVhZCAtIGxlYWRfb2Zmc2V0KSAqIDE4OCArIGJpdGUgLSBvZmZzZXQ7XG5cbiAgICAgICAgLy8gNC4gTGV0IGNvZGUgcG9pbnQgYmUgbnVsbCwgaWYgcG9pbnRlciBpcyBudWxsLCBhbmQgdGhlXG4gICAgICAgIC8vIGluZGV4IGNvZGUgcG9pbnQgZm9yIHBvaW50ZXIgaW4gaW5kZXggamlzMDIwOCBvdGhlcndpc2UuXG4gICAgICAgIHZhciBjb2RlX3BvaW50ID0gKHBvaW50ZXIgPT09IG51bGwpID8gbnVsbCA6XG4gICAgICAgICAgICAgIGluZGV4Q29kZVBvaW50Rm9yKHBvaW50ZXIsIGluZGV4KCdqaXMwMjA4JykpO1xuXG4gICAgICAgIC8vIDUuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCBhbmQgcG9pbnRlciBpcyBpbiB0aGUgcmFuZ2UgODgzNlxuICAgICAgICAvLyB0byAxMDUyOCwgcmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyAweEUwMDAgK1xuICAgICAgICAvLyBwb2ludGVyIOKIkiA4ODM2LlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gbnVsbCAmJiBwb2ludGVyICE9PSBudWxsICYmXG4gICAgICAgICAgICBpblJhbmdlKHBvaW50ZXIsIDg4MzYsIDEwNTI4KSlcbiAgICAgICAgICByZXR1cm4gMHhFMDAwICsgcG9pbnRlciAtIDg4MzY7XG5cbiAgICAgICAgLy8gNi4gSWYgY29kZSBwb2ludCBpcyBudWxsIGFuZCBieXRlIGlzIGluIHRoZSByYW5nZSAweDAwIHRvXG4gICAgICAgIC8vIDB4N0YsIHByZXBlbmQgYnl0ZSB0byBzdHJlYW0uXG4gICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsICYmIGluUmFuZ2UoYml0ZSwgMHgwMCwgMHg3RikpXG4gICAgICAgICAgc3RyZWFtLnByZXBlbmQoYml0ZSk7XG5cbiAgICAgICAgLy8gNy4gSWYgY29kZSBwb2ludCBpcyBudWxsLCByZXR1cm4gZXJyb3IuXG4gICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsKVxuICAgICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICAgIC8vIDguIFJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4MDAgdG8gMHg4MCwgcmV0dXJuIGEgY29kZSBwb2ludFxuICAgICAgLy8gd2hvc2UgdmFsdWUgaXMgYnl0ZS5cbiAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4MDAsIDB4ODApKVxuICAgICAgICByZXR1cm4gYml0ZTtcblxuICAgICAgLy8gNS4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHhBMSB0byAweERGLCByZXR1cm4gYSBjb2RlIHBvaW50XG4gICAgICAvLyB3aG9zZSB2YWx1ZSBpcyAweEZGNjEgKyBieXRlIOKIkiAweEExLlxuICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHhBMSwgMHhERikpXG4gICAgICAgIHJldHVybiAweEZGNjEgKyBiaXRlIC0gMHhBMTtcblxuICAgICAgLy8gNi4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHg4MSB0byAweDlGIG9yIDB4RTAgdG8gMHhGQywgc2V0XG4gICAgICAvLyBzaGlmdF9qaXMgbGVhZCB0byBieXRlIGFuZCByZXR1cm4gY29udGludWUuXG4gICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDgxLCAweDlGKSB8fCBpblJhbmdlKGJpdGUsIDB4RTAsIDB4RkMpKSB7XG4gICAgICAgIHNoaWZ0amlzX2xlYWQgPSBiaXRlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gNy4gUmV0dXJuIGVycm9yLlxuICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0VuY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gU2hpZnRKSVNFbmNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gSW5wdXQgc3RyZWFtLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IE5leHQgY29kZSBwb2ludCByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IEJ5dGUocykgdG8gZW1pdC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGNvZGVfcG9pbnQpIHtcbiAgICAgIC8vIDEuIElmIGNvZGUgcG9pbnQgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMi4gSWYgY29kZSBwb2ludCBpcyBpbiB0aGUgcmFuZ2UgVSswMDAwIHRvIFUrMDA4MCwgcmV0dXJuIGFcbiAgICAgIC8vIGJ5dGUgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIGlmIChpblJhbmdlKGNvZGVfcG9pbnQsIDB4MDAwMCwgMHgwMDgwKSlcbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG5cbiAgICAgIC8vIDMuIElmIGNvZGUgcG9pbnQgaXMgVSswMEE1LCByZXR1cm4gYnl0ZSAweDVDLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4MDBBNSlcbiAgICAgICAgcmV0dXJuIDB4NUM7XG5cbiAgICAgIC8vIDQuIElmIGNvZGUgcG9pbnQgaXMgVSsyMDNFLCByZXR1cm4gYnl0ZSAweDdFLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4MjAzRSlcbiAgICAgICAgcmV0dXJuIDB4N0U7XG5cbiAgICAgIC8vIDUuIElmIGNvZGUgcG9pbnQgaXMgaW4gdGhlIHJhbmdlIFUrRkY2MSB0byBVK0ZGOUYsIHJldHVybiBhXG4gICAgICAvLyBieXRlIHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQg4oiSIDB4RkY2MSArIDB4QTEuXG4gICAgICBpZiAoaW5SYW5nZShjb2RlX3BvaW50LCAweEZGNjEsIDB4RkY5RikpXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50IC0gMHhGRjYxICsgMHhBMTtcblxuICAgICAgLy8gNi4gSWYgY29kZSBwb2ludCBpcyBVKzIwMjIsIHNldCBpdCB0byBVK0ZGMEQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gMHgyMDIyKVxuICAgICAgICBjb2RlX3BvaW50ID0gMHhGRjBEO1xuXG4gICAgICAvLyA3LiBMZXQgcG9pbnRlciBiZSB0aGUgaW5kZXggc2hpZnRfamlzIHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQuXG4gICAgICB2YXIgcG9pbnRlciA9IGluZGV4U2hpZnRKSVNQb2ludGVyRm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyA4LiBJZiBwb2ludGVyIGlzIG51bGwsIHJldHVybiBlcnJvciB3aXRoIGNvZGUgcG9pbnQuXG4gICAgICBpZiAocG9pbnRlciA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGVuY29kZXJFcnJvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gOS4gTGV0IGxlYWQgYmUgcG9pbnRlciAvIDE4OC5cbiAgICAgIHZhciBsZWFkID0gZGl2KHBvaW50ZXIsIDE4OCk7XG5cbiAgICAgIC8vIDEwLiBMZXQgbGVhZCBvZmZzZXQgYmUgMHg4MSwgaWYgbGVhZCBpcyBsZXNzIHRoYW4gMHgxRiwgYW5kXG4gICAgICAvLyAweEMxIG90aGVyd2lzZS5cbiAgICAgIHZhciBsZWFkX29mZnNldCA9IChsZWFkIDwgMHgxRikgPyAweDgxIDogMHhDMTtcblxuICAgICAgLy8gMTEuIExldCB0cmFpbCBiZSBwb2ludGVyICUgMTg4LlxuICAgICAgdmFyIHRyYWlsID0gcG9pbnRlciAlIDE4ODtcblxuICAgICAgLy8gMTIuIExldCBvZmZzZXQgYmUgMHg0MCwgaWYgdHJhaWwgaXMgbGVzcyB0aGFuIDB4M0YsIGFuZCAweDQxXG4gICAgICAvLyBvdGhlcndpc2UuXG4gICAgICB2YXIgb2Zmc2V0ID0gKHRyYWlsIDwgMHgzRikgPyAweDQwIDogMHg0MTtcblxuICAgICAgLy8gMTMuIFJldHVybiB0d28gYnl0ZXMgd2hvc2UgdmFsdWVzIGFyZSBsZWFkICsgbGVhZCBvZmZzZXQgYW5kXG4gICAgICAvLyB0cmFpbCArIG9mZnNldC5cbiAgICAgIHJldHVybiBbbGVhZCArIGxlYWRfb2Zmc2V0LCB0cmFpbCArIG9mZnNldF07XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ3NoaWZ0X2ppcyddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgU2hpZnRKSVNFbmNvZGVyKG9wdGlvbnMpO1xuICB9O1xuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWydzaGlmdF9qaXMnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFNoaWZ0SklTRGVjb2RlcihvcHRpb25zKTtcbiAgfTtcblxuICAvL1xuICAvLyAxMy4gTGVnYWN5IG11bHRpLWJ5dGUgS29yZWFuIGVuY29kaW5nc1xuICAvL1xuXG4gIC8vIDEzLjEgZXVjLWtyXG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RGVjb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBFVUNLUkRlY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG5cbiAgICAvLyBldWMta3IncyBkZWNvZGVyIGhhcyBhbiBhc3NvY2lhdGVkIGV1Yy1rciBsZWFkIChpbml0aWFsbHkgMHgwMCkuXG4gICAgdmFyIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyBldWNrcl9sZWFkID0gMHgwMDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHtcbiAgICAgIC8vIDEuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSBhbmQgZXVjLWtyIGxlYWQgaXMgbm90IDB4MDAsIHNldFxuICAgICAgLy8gZXVjLWtyIGxlYWQgdG8gMHgwMCBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0gJiYgZXVja3JfbGVhZCAhPT0gMCkge1xuICAgICAgICBldWNrcl9sZWFkID0gMHgwMDtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSBhbmQgZXVjLWtyIGxlYWQgaXMgMHgwMCwgcmV0dXJuXG4gICAgICAvLyBmaW5pc2hlZC5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmIGV1Y2tyX2xlYWQgPT09IDApXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMy4gSWYgZXVjLWtyIGxlYWQgaXMgbm90IDB4MDAsIGxldCBsZWFkIGJlIGV1Yy1rciBsZWFkLCBsZXRcbiAgICAgIC8vIHBvaW50ZXIgYmUgbnVsbCwgc2V0IGV1Yy1rciBsZWFkIHRvIDB4MDAsIGFuZCB0aGVuIHJ1biB0aGVzZVxuICAgICAgLy8gc3Vic3RlcHM6XG4gICAgICBpZiAoZXVja3JfbGVhZCAhPT0gMHgwMCkge1xuICAgICAgICB2YXIgbGVhZCA9IGV1Y2tyX2xlYWQ7XG4gICAgICAgIHZhciBwb2ludGVyID0gbnVsbDtcbiAgICAgICAgZXVja3JfbGVhZCA9IDB4MDA7XG5cbiAgICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHg0MSB0byAweEZFLCBzZXQgcG9pbnRlciB0b1xuICAgICAgICAvLyAobGVhZCDiiJIgMHg4MSkgw5cgMTkwICsgKGJ5dGUg4oiSIDB4NDEpLlxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDQxLCAweEZFKSlcbiAgICAgICAgICBwb2ludGVyID0gKGxlYWQgLSAweDgxKSAqIDE5MCArIChiaXRlIC0gMHg0MSk7XG5cbiAgICAgICAgLy8gMi4gTGV0IGNvZGUgcG9pbnQgYmUgbnVsbCwgaWYgcG9pbnRlciBpcyBudWxsLCBhbmQgdGhlXG4gICAgICAgIC8vIGluZGV4IGNvZGUgcG9pbnQgZm9yIHBvaW50ZXIgaW4gaW5kZXggZXVjLWtyIG90aGVyd2lzZS5cbiAgICAgICAgdmFyIGNvZGVfcG9pbnQgPSAocG9pbnRlciA9PT0gbnVsbCkgPyBudWxsIDogaW5kZXhDb2RlUG9pbnRGb3IocG9pbnRlciwgaW5kZXgoJ2V1Yy1rcicpKTtcblxuICAgICAgICAvLyAzLiBJZiBjb2RlIHBvaW50IGlzIG51bGwgYW5kIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4MDAgdG9cbiAgICAgICAgLy8gMHg3RiwgcHJlcGVuZCBieXRlIHRvIHN0cmVhbS5cbiAgICAgICAgaWYgKHBvaW50ZXIgPT09IG51bGwgJiYgaW5SYW5nZShiaXRlLCAweDAwLCAweDdGKSlcbiAgICAgICAgICBzdHJlYW0ucHJlcGVuZChiaXRlKTtcblxuICAgICAgICAvLyA0LiBJZiBjb2RlIHBvaW50IGlzIG51bGwsIHJldHVybiBlcnJvci5cbiAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IG51bGwpXG4gICAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgICAgLy8gNS4gUmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcbiAgICAgIH1cblxuICAgICAgLy8gNC4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHgwMCB0byAweDdGLCByZXR1cm4gYSBjb2RlIHBvaW50XG4gICAgICAvLyB3aG9zZSB2YWx1ZSBpcyBieXRlLlxuICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgwMCwgMHg3RikpXG4gICAgICAgIHJldHVybiBiaXRlO1xuXG4gICAgICAvLyA1LiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDgxIHRvIDB4RkUsIHNldCBldWMta3IgbGVhZCB0b1xuICAgICAgLy8gYnl0ZSBhbmQgcmV0dXJuIGNvbnRpbnVlLlxuICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHg4MSwgMHhGRSkpIHtcbiAgICAgICAgZXVja3JfbGVhZCA9IGJpdGU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyA2LiBSZXR1cm4gZXJyb3IuXG4gICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBFVUNLUkVuY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBJbnB1dCBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgTmV4dCBjb2RlIHBvaW50IHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gQnl0ZShzKSB0byBlbWl0LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgY29kZV9wb2ludCkge1xuICAgICAgLy8gMS4gSWYgY29kZSBwb2ludCBpcyBlbmQtb2Ytc3RyZWFtLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAyLiBJZiBjb2RlIHBvaW50IGlzIGluIHRoZSByYW5nZSBVKzAwMDAgdG8gVSswMDdGLCByZXR1cm4gYVxuICAgICAgLy8gYnl0ZSB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgaWYgKGluUmFuZ2UoY29kZV9wb2ludCwgMHgwMDAwLCAweDAwN0YpKVxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcblxuICAgICAgLy8gMy4gTGV0IHBvaW50ZXIgYmUgdGhlIGluZGV4IHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQgaW4gaW5kZXhcbiAgICAgIC8vIGV1Yy1rci5cbiAgICAgIHZhciBwb2ludGVyID0gaW5kZXhQb2ludGVyRm9yKGNvZGVfcG9pbnQsIGluZGV4KCdldWMta3InKSk7XG5cbiAgICAgIC8vIDQuIElmIHBvaW50ZXIgaXMgbnVsbCwgcmV0dXJuIGVycm9yIHdpdGggY29kZSBwb2ludC5cbiAgICAgIGlmIChwb2ludGVyID09PSBudWxsKVxuICAgICAgICByZXR1cm4gZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyA1LiBMZXQgbGVhZCBiZSBwb2ludGVyIC8gMTkwICsgMHg4MS5cbiAgICAgIHZhciBsZWFkID0gZGl2KHBvaW50ZXIsIDE5MCkgKyAweDgxO1xuXG4gICAgICAvLyA2LiBMZXQgdHJhaWwgYmUgcG9pbnRlciAlIDE5MCArIDB4NDEuXG4gICAgICB2YXIgdHJhaWwgPSAocG9pbnRlciAlIDE5MCkgKyAweDQxO1xuXG4gICAgICAvLyA3LiBSZXR1cm4gdHdvIGJ5dGVzIHdob3NlIHZhbHVlcyBhcmUgbGVhZCBhbmQgdHJhaWwuXG4gICAgICByZXR1cm4gW2xlYWQsIHRyYWlsXTtcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBlbmNvZGVyc1snZXVjLWtyJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBFVUNLUkVuY29kZXIob3B0aW9ucyk7XG4gIH07XG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZGVjb2RlcnNbJ2V1Yy1rciddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgRVVDS1JEZWNvZGVyKG9wdGlvbnMpO1xuICB9O1xuXG5cbiAgLy9cbiAgLy8gMTQuIExlZ2FjeSBtaXNjZWxsYW5lb3VzIGVuY29kaW5nc1xuICAvL1xuXG4gIC8vIDE0LjEgcmVwbGFjZW1lbnRcblxuICAvLyBOb3QgbmVlZGVkIC0gQVBJIHRocm93cyBSYW5nZUVycm9yXG5cbiAgLy8gMTQuMiB1dGYtMTZcblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfdW5pdFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHV0ZjE2YmVcbiAgICogQHJldHVybiB7IUFycmF5LjxudW1iZXI+fSBieXRlc1xuICAgKi9cbiAgZnVuY3Rpb24gY29udmVydENvZGVVbml0VG9CeXRlcyhjb2RlX3VuaXQsIHV0ZjE2YmUpIHtcbiAgICAvLyAxLiBMZXQgYnl0ZTEgYmUgY29kZSB1bml0ID4+IDguXG4gICAgdmFyIGJ5dGUxID0gY29kZV91bml0ID4+IDg7XG5cbiAgICAvLyAyLiBMZXQgYnl0ZTIgYmUgY29kZSB1bml0ICYgMHgwMEZGLlxuICAgIHZhciBieXRlMiA9IGNvZGVfdW5pdCAmIDB4MDBGRjtcblxuICAgIC8vIDMuIFRoZW4gcmV0dXJuIHRoZSBieXRlcyBpbiBvcmRlcjpcbiAgICAgICAgLy8gdXRmLTE2YmUgZmxhZyBpcyBzZXQ6IGJ5dGUxLCB0aGVuIGJ5dGUyLlxuICAgIGlmICh1dGYxNmJlKVxuICAgICAgcmV0dXJuIFtieXRlMSwgYnl0ZTJdO1xuICAgIC8vIHV0Zi0xNmJlIGZsYWcgaXMgdW5zZXQ6IGJ5dGUyLCB0aGVuIGJ5dGUxLlxuICAgIHJldHVybiBbYnl0ZTIsIGJ5dGUxXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gdXRmMTZfYmUgVHJ1ZSBpZiBiaWctZW5kaWFuLCBmYWxzZSBpZiBsaXR0bGUtZW5kaWFuLlxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFVURjE2RGVjb2Rlcih1dGYxNl9iZSwgb3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgdmFyIC8qKiBAdHlwZSB7P251bWJlcn0gKi8gdXRmMTZfbGVhZF9ieXRlID0gbnVsbCxcbiAgICAgICAgLyoqIEB0eXBlIHs/bnVtYmVyfSAqLyB1dGYxNl9sZWFkX3N1cnJvZ2F0ZSA9IG51bGw7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBUaGUgc3RyZWFtIG9mIGJ5dGVzIGJlaW5nIGRlY29kZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdGUgVGhlIG5leHQgYnl0ZSByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBUaGUgbmV4dCBjb2RlIHBvaW50KHMpXG4gICAgICogICAgIGRlY29kZWQsIG9yIG51bGwgaWYgbm90IGVub3VnaCBkYXRhIGV4aXN0cyBpbiB0aGUgaW5wdXRcbiAgICAgKiAgICAgc3RyZWFtIHRvIGRlY29kZSBhIGNvbXBsZXRlIGNvZGUgcG9pbnQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBiaXRlKSB7XG4gICAgICAvLyAxLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIGVpdGhlciB1dGYtMTYgbGVhZCBieXRlIG9yXG4gICAgICAvLyB1dGYtMTYgbGVhZCBzdXJyb2dhdGUgaXMgbm90IG51bGwsIHNldCB1dGYtMTYgbGVhZCBieXRlIGFuZFxuICAgICAgLy8gdXRmLTE2IGxlYWQgc3Vycm9nYXRlIHRvIG51bGwsIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiAodXRmMTZfbGVhZF9ieXRlICE9PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjE2X2xlYWRfc3Vycm9nYXRlICE9PSBudWxsKSkge1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCB1dGYtMTYgbGVhZCBieXRlIGFuZCB1dGYtMTZcbiAgICAgIC8vIGxlYWQgc3Vycm9nYXRlIGFyZSBudWxsLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiB1dGYxNl9sZWFkX2J5dGUgPT09IG51bGwgJiZcbiAgICAgICAgICB1dGYxNl9sZWFkX3N1cnJvZ2F0ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIHV0Zi0xNiBsZWFkIGJ5dGUgaXMgbnVsbCwgc2V0IHV0Zi0xNiBsZWFkIGJ5dGUgdG8gYnl0ZVxuICAgICAgLy8gYW5kIHJldHVybiBjb250aW51ZS5cbiAgICAgIGlmICh1dGYxNl9sZWFkX2J5dGUgPT09IG51bGwpIHtcbiAgICAgICAgdXRmMTZfbGVhZF9ieXRlID0gYml0ZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIExldCBjb2RlIHVuaXQgYmUgdGhlIHJlc3VsdCBvZjpcbiAgICAgIHZhciBjb2RlX3VuaXQ7XG4gICAgICBpZiAodXRmMTZfYmUpIHtcbiAgICAgICAgLy8gdXRmLTE2YmUgZGVjb2RlciBmbGFnIGlzIHNldFxuICAgICAgICAvLyAgICh1dGYtMTYgbGVhZCBieXRlIDw8IDgpICsgYnl0ZS5cbiAgICAgICAgY29kZV91bml0ID0gKHV0ZjE2X2xlYWRfYnl0ZSA8PCA4KSArIGJpdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB1dGYtMTZiZSBkZWNvZGVyIGZsYWcgaXMgdW5zZXRcbiAgICAgICAgLy8gICAoYnl0ZSA8PCA4KSArIHV0Zi0xNiBsZWFkIGJ5dGUuXG4gICAgICAgIGNvZGVfdW5pdCA9IChiaXRlIDw8IDgpICsgdXRmMTZfbGVhZF9ieXRlO1xuICAgICAgfVxuICAgICAgLy8gVGhlbiBzZXQgdXRmLTE2IGxlYWQgYnl0ZSB0byBudWxsLlxuICAgICAgdXRmMTZfbGVhZF9ieXRlID0gbnVsbDtcblxuICAgICAgLy8gNS4gSWYgdXRmLTE2IGxlYWQgc3Vycm9nYXRlIGlzIG5vdCBudWxsLCBsZXQgbGVhZCBzdXJyb2dhdGVcbiAgICAgIC8vIGJlIHV0Zi0xNiBsZWFkIHN1cnJvZ2F0ZSwgc2V0IHV0Zi0xNiBsZWFkIHN1cnJvZ2F0ZSB0byBudWxsLFxuICAgICAgLy8gYW5kIHRoZW4gcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgICAgaWYgKHV0ZjE2X2xlYWRfc3Vycm9nYXRlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBsZWFkX3N1cnJvZ2F0ZSA9IHV0ZjE2X2xlYWRfc3Vycm9nYXRlO1xuICAgICAgICB1dGYxNl9sZWFkX3N1cnJvZ2F0ZSA9IG51bGw7XG5cbiAgICAgICAgLy8gMS4gSWYgY29kZSB1bml0IGlzIGluIHRoZSByYW5nZSBVK0RDMDAgdG8gVStERkZGLCByZXR1cm4gYVxuICAgICAgICAvLyBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIDB4MTAwMDAgKyAoKGxlYWQgc3Vycm9nYXRlIOKIklxuICAgICAgICAvLyAweEQ4MDApIDw8IDEwKSArIChjb2RlIHVuaXQg4oiSIDB4REMwMCkuXG4gICAgICAgIGlmIChpblJhbmdlKGNvZGVfdW5pdCwgMHhEQzAwLCAweERGRkYpKSB7XG4gICAgICAgICAgcmV0dXJuIDB4MTAwMDAgKyAobGVhZF9zdXJyb2dhdGUgLSAweEQ4MDApICogMHg0MDAgK1xuICAgICAgICAgICAgICAoY29kZV91bml0IC0gMHhEQzAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIFByZXBlbmQgdGhlIHNlcXVlbmNlIHJlc3VsdGluZyBvZiBjb252ZXJ0aW5nIGNvZGUgdW5pdFxuICAgICAgICAvLyB0byBieXRlcyB1c2luZyB1dGYtMTZiZSBkZWNvZGVyIGZsYWcgdG8gc3RyZWFtIGFuZCByZXR1cm5cbiAgICAgICAgLy8gZXJyb3IuXG4gICAgICAgIHN0cmVhbS5wcmVwZW5kKGNvbnZlcnRDb2RlVW5pdFRvQnl0ZXMoY29kZV91bml0LCB1dGYxNl9iZSkpO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgIH1cblxuICAgICAgLy8gNi4gSWYgY29kZSB1bml0IGlzIGluIHRoZSByYW5nZSBVK0Q4MDAgdG8gVStEQkZGLCBzZXQgdXRmLTE2XG4gICAgICAvLyBsZWFkIHN1cnJvZ2F0ZSB0byBjb2RlIHVuaXQgYW5kIHJldHVybiBjb250aW51ZS5cbiAgICAgIGlmIChpblJhbmdlKGNvZGVfdW5pdCwgMHhEODAwLCAweERCRkYpKSB7XG4gICAgICAgIHV0ZjE2X2xlYWRfc3Vycm9nYXRlID0gY29kZV91bml0O1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gNy4gSWYgY29kZSB1bml0IGlzIGluIHRoZSByYW5nZSBVK0RDMDAgdG8gVStERkZGLCByZXR1cm5cbiAgICAgIC8vIGVycm9yLlxuICAgICAgaWYgKGluUmFuZ2UoY29kZV91bml0LCAweERDMDAsIDB4REZGRikpXG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICAvLyA4LiBSZXR1cm4gY29kZSBwb2ludCBjb2RlIHVuaXQuXG4gICAgICByZXR1cm4gY29kZV91bml0O1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtFbmNvZGVyfVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHV0ZjE2X2JlIFRydWUgaWYgYmlnLWVuZGlhbiwgZmFsc2UgaWYgbGl0dGxlLWVuZGlhbi5cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBVVEYxNkVuY29kZXIodXRmMTZfYmUsIG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gSW5wdXQgc3RyZWFtLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IE5leHQgY29kZSBwb2ludCByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IEJ5dGUocykgdG8gZW1pdC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGNvZGVfcG9pbnQpIHtcbiAgICAgIC8vIDEuIElmIGNvZGUgcG9pbnQgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMi4gSWYgY29kZSBwb2ludCBpcyBpbiB0aGUgcmFuZ2UgVSswMDAwIHRvIFUrRkZGRiwgcmV0dXJuIHRoZVxuICAgICAgLy8gc2VxdWVuY2UgcmVzdWx0aW5nIG9mIGNvbnZlcnRpbmcgY29kZSBwb2ludCB0byBieXRlcyB1c2luZ1xuICAgICAgLy8gdXRmLTE2YmUgZW5jb2RlciBmbGFnLlxuICAgICAgaWYgKGluUmFuZ2UoY29kZV9wb2ludCwgMHgwMDAwLCAweEZGRkYpKVxuICAgICAgICByZXR1cm4gY29udmVydENvZGVVbml0VG9CeXRlcyhjb2RlX3BvaW50LCB1dGYxNl9iZSk7XG5cbiAgICAgIC8vIDMuIExldCBsZWFkIGJlICgoY29kZSBwb2ludCDiiJIgMHgxMDAwMCkgPj4gMTApICsgMHhEODAwLFxuICAgICAgLy8gY29udmVydGVkIHRvIGJ5dGVzIHVzaW5nIHV0Zi0xNmJlIGVuY29kZXIgZmxhZy5cbiAgICAgIHZhciBsZWFkID0gY29udmVydENvZGVVbml0VG9CeXRlcyhcbiAgICAgICAgKChjb2RlX3BvaW50IC0gMHgxMDAwMCkgPj4gMTApICsgMHhEODAwLCB1dGYxNl9iZSk7XG5cbiAgICAgIC8vIDQuIExldCB0cmFpbCBiZSAoKGNvZGUgcG9pbnQg4oiSIDB4MTAwMDApICYgMHgzRkYpICsgMHhEQzAwLFxuICAgICAgLy8gY29udmVydGVkIHRvIGJ5dGVzIHVzaW5nIHV0Zi0xNmJlIGVuY29kZXIgZmxhZy5cbiAgICAgIHZhciB0cmFpbCA9IGNvbnZlcnRDb2RlVW5pdFRvQnl0ZXMoXG4gICAgICAgICgoY29kZV9wb2ludCAtIDB4MTAwMDApICYgMHgzRkYpICsgMHhEQzAwLCB1dGYxNl9iZSk7XG5cbiAgICAgIC8vIDUuIFJldHVybiBhIGJ5dGUgc2VxdWVuY2Ugb2YgbGVhZCBmb2xsb3dlZCBieSB0cmFpbC5cbiAgICAgIHJldHVybiBsZWFkLmNvbmNhdCh0cmFpbCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIDE0LjMgdXRmLTE2YmVcbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBlbmNvZGVyc1sndXRmLTE2YmUnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFVURjE2RW5jb2Rlcih0cnVlLCBvcHRpb25zKTtcbiAgfTtcbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBkZWNvZGVyc1sndXRmLTE2YmUnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFVURjE2RGVjb2Rlcih0cnVlLCBvcHRpb25zKTtcbiAgfTtcblxuICAvLyAxNC40IHV0Zi0xNmxlXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ3V0Zi0xNmxlJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBVVEYxNkVuY29kZXIoZmFsc2UsIG9wdGlvbnMpO1xuICB9O1xuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWyd1dGYtMTZsZSddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgVVRGMTZEZWNvZGVyKGZhbHNlLCBvcHRpb25zKTtcbiAgfTtcblxuICAvLyAxNC41IHgtdXNlci1kZWZpbmVkXG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RGVjb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBYVXNlckRlZmluZWREZWNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBieXRlcyBiZWluZyBkZWNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRlIFRoZSBuZXh0IGJ5dGUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gVGhlIG5leHQgY29kZSBwb2ludChzKVxuICAgICAqICAgICBkZWNvZGVkLCBvciBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YSBleGlzdHMgaW4gdGhlIGlucHV0XG4gICAgICogICAgIHN0cmVhbSB0byBkZWNvZGUgYSBjb21wbGV0ZSBjb2RlIHBvaW50LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgYml0ZSkge1xuICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAyLiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDAwIHRvIDB4N0YsIHJldHVybiBhIGNvZGUgcG9pbnRcbiAgICAgIC8vIHdob3NlIHZhbHVlIGlzIGJ5dGUuXG4gICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDAwLCAweDdGKSlcbiAgICAgICAgcmV0dXJuIGJpdGU7XG5cbiAgICAgIC8vIDMuIFJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgMHhGNzgwICsgYnl0ZSDiiJIgMHg4MC5cbiAgICAgIHJldHVybiAweEY3ODAgKyBiaXRlIC0gMHg4MDtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBYVXNlckRlZmluZWRFbmNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gSW5wdXQgc3RyZWFtLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IE5leHQgY29kZSBwb2ludCByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IEJ5dGUocykgdG8gZW1pdC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGNvZGVfcG9pbnQpIHtcbiAgICAgIC8vIDEuSWYgY29kZSBwb2ludCBpcyBlbmQtb2Ytc3RyZWFtLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAyLiBJZiBjb2RlIHBvaW50IGlzIGluIHRoZSByYW5nZSBVKzAwMDAgdG8gVSswMDdGLCByZXR1cm4gYVxuICAgICAgLy8gYnl0ZSB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgaWYgKGluUmFuZ2UoY29kZV9wb2ludCwgMHgwMDAwLCAweDAwN0YpKVxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcblxuICAgICAgLy8gMy4gSWYgY29kZSBwb2ludCBpcyBpbiB0aGUgcmFuZ2UgVStGNzgwIHRvIFUrRjdGRiwgcmV0dXJuIGFcbiAgICAgIC8vIGJ5dGUgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludCDiiJIgMHhGNzgwICsgMHg4MC5cbiAgICAgIGlmIChpblJhbmdlKGNvZGVfcG9pbnQsIDB4Rjc4MCwgMHhGN0ZGKSlcbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQgLSAweEY3ODAgKyAweDgwO1xuXG4gICAgICAvLyA0LiBSZXR1cm4gZXJyb3Igd2l0aCBjb2RlIHBvaW50LlxuICAgICAgcmV0dXJuIGVuY29kZXJFcnJvcihjb2RlX3BvaW50KTtcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBlbmNvZGVyc1sneC11c2VyLWRlZmluZWQnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFhVc2VyRGVmaW5lZEVuY29kZXIob3B0aW9ucyk7XG4gIH07XG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZGVjb2RlcnNbJ3gtdXNlci1kZWZpbmVkJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBYVXNlckRlZmluZWREZWNvZGVyKG9wdGlvbnMpO1xuICB9O1xuXG4gIGlmICghZ2xvYmFsWydUZXh0RW5jb2RlciddKVxuICAgIGdsb2JhbFsnVGV4dEVuY29kZXInXSA9IFRleHRFbmNvZGVyO1xuICBpZiAoIWdsb2JhbFsnVGV4dERlY29kZXInXSlcbiAgICBnbG9iYWxbJ1RleHREZWNvZGVyJ10gPSBUZXh0RGVjb2Rlcjtcbn0odGhpcykpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5XUklURSA9IGV4cG9ydHMuUkVBRCA9IGV4cG9ydHMuRHJpdmVyID0gdW5kZWZpbmVkO1xuXG52YXIgX2dldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mJyk7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0UHJvdG90eXBlT2YpO1xuXG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4nKTtcblxudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yKTtcblxudmFyIF9nZXQyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2dldCcpO1xuXG52YXIgX2dldDMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXQyKTtcblxudmFyIF9pbmhlcml0czIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMnKTtcblxudmFyIF9pbmhlcml0czMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmhlcml0czIpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjaycpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzJyk7XG5cbnZhciBfY3JlYXRlQ2xhc3MzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlQ2xhc3MyKTtcblxudmFyIF9zZXNzaW9uID0gcmVxdWlyZSgnLi9zZXNzaW9uJyk7XG5cbnZhciBfc2Vzc2lvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zZXNzaW9uKTtcblxudmFyIF9wb29sID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9wb29sJyk7XG5cbnZhciBfcG9vbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wb29sKTtcblxudmFyIF9jb25uZWN0b3IgPSByZXF1aXJlKCcuL2ludGVybmFsL2Nvbm5lY3RvcicpO1xuXG52YXIgX3N0cmVhbU9ic2VydmVyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW0tb2JzZXJ2ZXInKTtcblxudmFyIF9zdHJlYW1PYnNlcnZlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdHJlYW1PYnNlcnZlcik7XG5cbnZhciBfZXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yJyk7XG5cbnZhciBfY29ubmVjdGlvblByb3ZpZGVycyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvY29ubmVjdGlvbi1wcm92aWRlcnMnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBSRUFEID0gJ1JFQUQnLFxuICAgIFdSSVRFID0gJ1dSSVRFJztcbi8qKlxuICogQSBkcml2ZXIgbWFpbnRhaW5zIG9uZSBvciBtb3JlIHtAbGluayBTZXNzaW9uIHNlc3Npb25zfSB3aXRoIGEgcmVtb3RlXG4gKiBOZW80aiBpbnN0YW5jZS4gVGhyb3VnaCB0aGUge0BsaW5rIFNlc3Npb24gc2Vzc2lvbnN9IHlvdSBjYW4gc2VuZCBzdGF0ZW1lbnRzXG4gKiBhbmQgcmV0cmlldmUgcmVzdWx0cyBmcm9tIHRoZSBkYXRhYmFzZS5cbiAqXG4gKiBEcml2ZXJzIGFyZSByZWFzb25hYmx5IGV4cGVuc2l2ZSB0byBjcmVhdGUgLSB5b3Ugc2hvdWxkIHN0cml2ZSB0byBrZWVwIG9uZVxuICogZHJpdmVyIGluc3RhbmNlIGFyb3VuZCBwZXIgTmVvNGogSW5zdGFuY2UgeW91IGNvbm5lY3QgdG8uXG4gKlxuICogQGFjY2VzcyBwdWJsaWNcbiAqL1xuXG52YXIgRHJpdmVyID0gZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogWW91IHNob3VsZCBub3QgYmUgY2FsbGluZyB0aGlzIGRpcmVjdGx5LCBpbnN0ZWFkIHVzZSB7QGxpbmsgZHJpdmVyfS5cbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJBZ2VudFxuICAgKiBAcGFyYW0ge09iamVjdH0gdG9rZW5cbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ1xuICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICovXG4gIGZ1bmN0aW9uIERyaXZlcih1cmwsIHVzZXJBZ2VudCkge1xuICAgIHZhciB0b2tlbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgdmFyIGNvbmZpZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgRHJpdmVyKTtcblxuICAgIHRoaXMuX3VybCA9IHVybDtcbiAgICB0aGlzLl91c2VyQWdlbnQgPSB1c2VyQWdlbnQ7XG4gICAgdGhpcy5fb3BlblNlc3Npb25zID0ge307XG4gICAgdGhpcy5fc2Vzc2lvbklkR2VuZXJhdG9yID0gMDtcbiAgICB0aGlzLl90b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLl9wb29sID0gbmV3IF9wb29sMi5kZWZhdWx0KHRoaXMuX2NyZWF0ZUNvbm5lY3Rpb24uYmluZCh0aGlzKSwgdGhpcy5fZGVzdHJveUNvbm5lY3Rpb24uYmluZCh0aGlzKSwgRHJpdmVyLl92YWxpZGF0ZUNvbm5lY3Rpb24uYmluZCh0aGlzKSwgY29uZmlnLmNvbm5lY3Rpb25Qb29sU2l6ZSk7XG5cbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIGNvbm5lY3Rpb24gcHJvdmlkZXIuIEluaXRpYWxpemVkIGxhemlseSBieSB7QGxpbmsgX2dldE9yQ3JlYXRlQ29ubmVjdGlvblByb3ZpZGVyfS5cbiAgICAgKiBAdHlwZSB7Q29ubmVjdGlvblByb3ZpZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY29ubmVjdGlvblByb3ZpZGVyID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgY29ubmVjdGlvbiBpbnN0YW5jZS5cbiAgICogQHJldHVybiB7Q29ubmVjdGlvbn0gbmV3IGNvbm5lY3Rvci1hcGkgc2Vzc2lvbiBpbnN0YW5jZSwgYSBsb3cgbGV2ZWwgc2Vzc2lvbiBBUEkuXG4gICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgKi9cblxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKERyaXZlciwgW3tcbiAgICBrZXk6ICdfY3JlYXRlQ29ubmVjdGlvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jcmVhdGVDb25uZWN0aW9uKHVybCwgcmVsZWFzZSkge1xuICAgICAgdmFyIHNlc3Npb25JZCA9IHRoaXMuX3Nlc3Npb25JZEdlbmVyYXRvcisrO1xuICAgICAgdmFyIGNvbm4gPSAoMCwgX2Nvbm5lY3Rvci5jb25uZWN0KSh1cmwsIHRoaXMuX2NvbmZpZywgdGhpcy5fY29ubmVjdGlvbkVycm9yQ29kZSgpKTtcbiAgICAgIHZhciBzdHJlYW1PYnNlcnZlciA9IG5ldyBfQ29ubmVjdGlvblN0cmVhbU9ic2VydmVyKHRoaXMsIGNvbm4pO1xuICAgICAgY29ubi5pbml0aWFsaXplKHRoaXMuX3VzZXJBZ2VudCwgdGhpcy5fdG9rZW4sIHN0cmVhbU9ic2VydmVyKTtcbiAgICAgIGNvbm4uX2lkID0gc2Vzc2lvbklkO1xuICAgICAgY29ubi5fcmVsZWFzZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJlbGVhc2UodXJsLCBjb25uKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX29wZW5TZXNzaW9uc1tzZXNzaW9uSWRdID0gY29ubjtcbiAgICAgIHJldHVybiBjb25uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIHRoYXQgYSBjb25uZWN0aW9uIGlzIHVzYWJsZVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGhlIGNvbm5lY3Rpb24gaXMgb3BlblxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqKi9cblxuICB9LCB7XG4gICAga2V5OiAnX2Rlc3Ryb3lDb25uZWN0aW9uJyxcblxuXG4gICAgLyoqXG4gICAgICogRGlzcG9zZSBvZiBhIGxpdmUgc2Vzc2lvbiwgY2xvc2luZyBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZXMuXG4gICAgICogQHJldHVybiB7U2Vzc2lvbn0gbmV3IHNlc3Npb24uXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9kZXN0cm95Q29ubmVjdGlvbihjb25uKSB7XG4gICAgICBkZWxldGUgdGhpcy5fb3BlblNlc3Npb25zW2Nvbm4uX2lkXTtcbiAgICAgIGNvbm4uY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBY3F1aXJlIGEgc2Vzc2lvbiB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBkYXRhYmFzZS4gVGhlIGRyaXZlciBtYWludGFpbnNcbiAgICAgKiBhIHBvb2wgb2Ygc2Vzc2lvbnMsIHNvIGNhbGxpbmcgdGhpcyBtZXRob2QgaXMgbm9ybWFsbHkgY2hlYXAgYmVjYXVzZSB5b3VcbiAgICAgKiB3aWxsIGJlIHB1bGxpbmcgYSBzZXNzaW9uIG91dCBvZiB0aGUgY29tbW9uIHBvb2wuXG4gICAgICpcbiAgICAgKiBUaGlzIGNvbWVzIHdpdGggc29tZSByZXNwb25zaWJpbGl0eSAtIG1ha2Ugc3VyZSB5b3UgYWx3YXlzIGNhbGxcbiAgICAgKiB7QGxpbmsgU2Vzc2lvbiNjbG9zZSgpfSB3aGVuIHlvdSBhcmUgZG9uZSB1c2luZyBhIHNlc3Npb24sIGFuZCBsaWtld2lzZSxcbiAgICAgKiBtYWtlIHN1cmUgeW91IGRvbid0IGNsb3NlIHlvdXIgc2Vzc2lvbiBiZWZvcmUgeW91IGFyZSBkb25lIHVzaW5nIGl0LiBPbmNlXG4gICAgICogaXQgaXMgcmV0dXJuZWQgdG8gdGhlIHBvb2wsIHRoZSBzZXNzaW9uIHdpbGwgYmUgcmVzZXQgdG8gYSBjbGVhbiBzdGF0ZSBhbmRcbiAgICAgKiBtYWRlIGF2YWlsYWJsZSBmb3Igb3RoZXJzIHRvIHVzZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbbW9kZT1XUklURV0gdGhlIGFjY2VzcyBtb2RlIG9mIHRoaXMgc2Vzc2lvbiwgYWxsb3dlZCB2YWx1ZXMgYXJlIHtAbGluayBSRUFEfSBhbmQge0BsaW5rIFdSSVRFfS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2Jvb2ttYXJrPW51bGxdIHRoZSBpbml0aWFsIHJlZmVyZW5jZSB0byBzb21lIHByZXZpb3VzIHRyYW5zYWN0aW9uLiBWYWx1ZSBpcyBvcHRpb25hbCBhbmRcbiAgICAgKiBhYnNlbmNlIGluZGljYXRlcyB0aGF0IHRoYXQgdGhlIGJvb2ttYXJrIGRvZXMgbm90IGV4aXN0IG9yIGlzIHVua25vd24uXG4gICAgICogQHJldHVybiB7U2Vzc2lvbn0gbmV3IHNlc3Npb24uXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3Nlc3Npb24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXNzaW9uKG1vZGUsIGJvb2ttYXJrKSB7XG4gICAgICB2YXIgc2Vzc2lvbk1vZGUgPSBEcml2ZXIuX3ZhbGlkYXRlU2Vzc2lvbk1vZGUobW9kZSk7XG4gICAgICB2YXIgY29ubmVjdGlvblByb3ZpZGVyID0gdGhpcy5fZ2V0T3JDcmVhdGVDb25uZWN0aW9uUHJvdmlkZXIoKTtcbiAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVTZXNzaW9uKHNlc3Npb25Nb2RlLCBjb25uZWN0aW9uUHJvdmlkZXIsIGJvb2ttYXJrLCB0aGlzLl9jb25maWcpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19jcmVhdGVDb25uZWN0aW9uUHJvdmlkZXInLFxuXG5cbiAgICAvLyBFeHRlbnNpb24gcG9pbnRcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2NyZWF0ZUNvbm5lY3Rpb25Qcm92aWRlcihhZGRyZXNzLCBjb25uZWN0aW9uUG9vbCwgZHJpdmVyT25FcnJvckNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gbmV3IF9jb25uZWN0aW9uUHJvdmlkZXJzLkRpcmVjdENvbm5lY3Rpb25Qcm92aWRlcihhZGRyZXNzLCBjb25uZWN0aW9uUG9vbCwgZHJpdmVyT25FcnJvckNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvLyBFeHRlbnNpb24gcG9pbnRcblxuICB9LCB7XG4gICAga2V5OiAnX2NyZWF0ZVNlc3Npb24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfY3JlYXRlU2Vzc2lvbihtb2RlLCBjb25uZWN0aW9uUHJvdmlkZXIsIGJvb2ttYXJrLCBjb25maWcpIHtcbiAgICAgIHJldHVybiBuZXcgX3Nlc3Npb24yLmRlZmF1bHQobW9kZSwgY29ubmVjdGlvblByb3ZpZGVyLCBib29rbWFyaywgY29uZmlnKTtcbiAgICB9XG5cbiAgICAvLyBFeHRlbnNpb24gcG9pbnRcblxuICB9LCB7XG4gICAga2V5OiAnX2Nvbm5lY3Rpb25FcnJvckNvZGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfY29ubmVjdGlvbkVycm9yQ29kZSgpIHtcbiAgICAgIC8vIGNvbm5lY3Rpb24gZXJyb3JzIG1pZ2h0IHJlc3VsdCBpbiBkaWZmZXJlbnQgZXJyb3IgY29kZXMgZGVwZW5kaW5nIG9uIHRoZSBkcml2ZXJcbiAgICAgIHJldHVybiBfZXJyb3IuU0VSVklDRV9VTkFWQUlMQUJMRTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZ2V0T3JDcmVhdGVDb25uZWN0aW9uUHJvdmlkZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0T3JDcmVhdGVDb25uZWN0aW9uUHJvdmlkZXIoKSB7XG4gICAgICBpZiAoIXRoaXMuX2Nvbm5lY3Rpb25Qcm92aWRlcikge1xuICAgICAgICB2YXIgZHJpdmVyT25FcnJvckNhbGxiYWNrID0gdGhpcy5fZHJpdmVyT25FcnJvckNhbGxiYWNrLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rpb25Qcm92aWRlciA9IHRoaXMuX2NyZWF0ZUNvbm5lY3Rpb25Qcm92aWRlcih0aGlzLl91cmwsIHRoaXMuX3Bvb2wsIGRyaXZlck9uRXJyb3JDYWxsYmFjayk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblByb3ZpZGVyO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19kcml2ZXJPbkVycm9yQ2FsbGJhY2snLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZHJpdmVyT25FcnJvckNhbGxiYWNrKGVycm9yKSB7XG4gICAgICB2YXIgdXNlckRlZmluZWRPbkVycm9yQ2FsbGJhY2sgPSB0aGlzLm9uRXJyb3I7XG4gICAgICBpZiAodXNlckRlZmluZWRPbkVycm9yQ2FsbGJhY2sgJiYgZXJyb3IuY29kZSA9PT0gX2Vycm9yLlNFUlZJQ0VfVU5BVkFJTEFCTEUpIHtcbiAgICAgICAgdXNlckRlZmluZWRPbkVycm9yQ2FsbGJhY2soZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byB0ZWxsIHRoZSBkcml2ZXIgYWJvdXQgdGhpcyBlcnJvclxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlIGFsbCBvcGVuIHNlc3Npb25zIGFuZCBvdGhlciBhc3NvY2lhdGVkIHJlc291cmNlcy4gWW91IHNob3VsZFxuICAgICAqIG1ha2Ugc3VyZSB0byB1c2UgdGhpcyB3aGVuIHlvdSBhcmUgZG9uZSB3aXRoIHRoaXMgZHJpdmVyIGluc3RhbmNlLlxuICAgICAqIEByZXR1cm4gdW5kZWZpbmVkXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2Nsb3NlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICBmb3IgKHZhciBzZXNzaW9uSWQgaW4gdGhpcy5fb3BlblNlc3Npb25zKSB7XG4gICAgICAgIGlmICh0aGlzLl9vcGVuU2Vzc2lvbnMuaGFzT3duUHJvcGVydHkoc2Vzc2lvbklkKSkge1xuICAgICAgICAgIHRoaXMuX29wZW5TZXNzaW9uc1tzZXNzaW9uSWRdLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcG9vbC5wdXJnZUFsbCgpO1xuICAgICAgfVxuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiAnX3ZhbGlkYXRlQ29ubmVjdGlvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF92YWxpZGF0ZUNvbm5lY3Rpb24oY29ubikge1xuICAgICAgcmV0dXJuIGNvbm4uaXNPcGVuKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX3ZhbGlkYXRlU2Vzc2lvbk1vZGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfdmFsaWRhdGVTZXNzaW9uTW9kZShyYXdNb2RlKSB7XG4gICAgICB2YXIgbW9kZSA9IHJhd01vZGUgfHwgV1JJVEU7XG4gICAgICBpZiAobW9kZSAhPT0gUkVBRCAmJiBtb2RlICE9PSBXUklURSkge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKSgnSWxsZWdhbCBzZXNzaW9uIG1vZGUgJyArIG1vZGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1vZGU7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBEcml2ZXI7XG59KCk7XG5cbi8qKiBJbnRlcm5hbCBzdHJlYW0gb2JzZXJ2ZXIgdXNlZCBmb3IgY29ubmVjdGlvbiBzdGF0ZSAqL1xuXG5cbnZhciBfQ29ubmVjdGlvblN0cmVhbU9ic2VydmVyID0gZnVuY3Rpb24gKF9TdHJlYW1PYnNlcnZlcikge1xuICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShfQ29ubmVjdGlvblN0cmVhbU9ic2VydmVyLCBfU3RyZWFtT2JzZXJ2ZXIpO1xuXG4gIGZ1bmN0aW9uIF9Db25uZWN0aW9uU3RyZWFtT2JzZXJ2ZXIoZHJpdmVyLCBjb25uKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgX0Nvbm5lY3Rpb25TdHJlYW1PYnNlcnZlcik7XG5cbiAgICB2YXIgX3RoaXMgPSAoMCwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zLmRlZmF1bHQpKHRoaXMsIChfQ29ubmVjdGlvblN0cmVhbU9ic2VydmVyLl9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShfQ29ubmVjdGlvblN0cmVhbU9ic2VydmVyKSkuY2FsbCh0aGlzKSk7XG5cbiAgICBfdGhpcy5fZHJpdmVyID0gZHJpdmVyO1xuICAgIF90aGlzLl9jb25uID0gY29ubjtcbiAgICBfdGhpcy5faGFzRmFpbGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoX0Nvbm5lY3Rpb25TdHJlYW1PYnNlcnZlciwgW3tcbiAgICBrZXk6ICdvbkVycm9yJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25FcnJvcihlcnJvcikge1xuICAgICAgaWYgKCF0aGlzLl9oYXNGYWlsZWQpIHtcbiAgICAgICAgKDAsIF9nZXQzLmRlZmF1bHQpKF9Db25uZWN0aW9uU3RyZWFtT2JzZXJ2ZXIucHJvdG90eXBlLl9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShfQ29ubmVjdGlvblN0cmVhbU9ic2VydmVyLnByb3RvdHlwZSksICdvbkVycm9yJywgdGhpcykuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGlmICh0aGlzLl9kcml2ZXIub25FcnJvcikge1xuICAgICAgICAgIHRoaXMuX2RyaXZlci5vbkVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9oYXNGYWlsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uQ29tcGxldGVkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25Db21wbGV0ZWQobWVzc2FnZSkge1xuICAgICAgaWYgKHRoaXMuX2RyaXZlci5vbkNvbXBsZXRlZCkge1xuICAgICAgICB0aGlzLl9kcml2ZXIub25Db21wbGV0ZWQobWVzc2FnZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9vYnNlcnZlciAmJiB0aGlzLl9vYnNlcnZlci5vbkNvbXBsZXRlKSB7XG4gICAgICAgIHRoaXMuX29ic2VydmVyLm9uQ29tcGxldGVkKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gX0Nvbm5lY3Rpb25TdHJlYW1PYnNlcnZlcjtcbn0oX3N0cmVhbU9ic2VydmVyMi5kZWZhdWx0KTtcblxuZXhwb3J0cy5Ecml2ZXIgPSBEcml2ZXI7XG5leHBvcnRzLlJFQUQgPSBSRUFEO1xuZXhwb3J0cy5XUklURSA9IFdSSVRFO1xuZXhwb3J0cy5kZWZhdWx0ID0gRHJpdmVyOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuUFJPVE9DT0xfRVJST1IgPSBleHBvcnRzLlNFU1NJT05fRVhQSVJFRCA9IGV4cG9ydHMuU0VSVklDRV9VTkFWQUlMQUJMRSA9IGV4cG9ydHMuTmVvNGpFcnJvciA9IGV4cG9ydHMubmV3RXJyb3IgPSB1bmRlZmluZWQ7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxudmFyIF9nZXRQcm90b3R5cGVPZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRQcm90b3R5cGVPZik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2syID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJyk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuJyk7XG5cbnZhciBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMik7XG5cbnZhciBfaW5oZXJpdHMyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzJyk7XG5cbnZhciBfaW5oZXJpdHMzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5oZXJpdHMyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEEgY29tbW9uIHBsYWNlIGZvciBjb25zdHJ1Y3RpbmcgZXJyb3Igb2JqZWN0cywgdG8ga2VlcCB0aGVtXG4vLyB1bmlmb3JtIGFjcm9zcyB0aGUgZHJpdmVyIHN1cmZhY2UuXG5cbnZhciBTRVJWSUNFX1VOQVZBSUxBQkxFID0gJ1NlcnZpY2VVbmF2YWlsYWJsZSc7XG52YXIgU0VTU0lPTl9FWFBJUkVEID0gJ1Nlc3Npb25FeHBpcmVkJztcbnZhciBQUk9UT0NPTF9FUlJPUiA9ICdQcm90b2NvbEVycm9yJztcblxuZnVuY3Rpb24gbmV3RXJyb3IobWVzc2FnZSkge1xuICB2YXIgY29kZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogXCJOL0FcIjtcblxuICAvLyBUT0RPOiBJZGVhIGlzIHRoYXQgd2UgY2FuIGNoZWNrIHRoZSBjb2RlIGhlcmUgYW5kIHRocm93IHN1Yi1jbGFzc2VzXG4gIC8vIG9mIE5lbzRqRXJyb3IgYXMgYXBwcm9wcmlhdGVcbiAgcmV0dXJuIG5ldyBOZW80akVycm9yKG1lc3NhZ2UsIGNvZGUpO1xufVxuXG52YXIgTmVvNGpFcnJvciA9IGZ1bmN0aW9uIChfRXJyb3IpIHtcbiAgKDAsIF9pbmhlcml0czMuZGVmYXVsdCkoTmVvNGpFcnJvciwgX0Vycm9yKTtcblxuICBmdW5jdGlvbiBOZW80akVycm9yKG1lc3NhZ2UpIHtcbiAgICB2YXIgY29kZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogXCJOL0FcIjtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBOZW80akVycm9yKTtcblxuICAgIHZhciBfdGhpcyA9ICgwLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMuZGVmYXVsdCkodGhpcywgKE5lbzRqRXJyb3IuX19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKE5lbzRqRXJyb3IpKS5jYWxsKHRoaXMsIG1lc3NhZ2UpKTtcblxuICAgIF90aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIF90aGlzLmNvZGUgPSBjb2RlO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBOZW80akVycm9yO1xufShFcnJvcik7XG5cbmV4cG9ydHMubmV3RXJyb3IgPSBuZXdFcnJvcjtcbmV4cG9ydHMuTmVvNGpFcnJvciA9IE5lbzRqRXJyb3I7XG5leHBvcnRzLlNFUlZJQ0VfVU5BVkFJTEFCTEUgPSBTRVJWSUNFX1VOQVZBSUxBQkxFO1xuZXhwb3J0cy5TRVNTSU9OX0VYUElSRUQgPSBTRVNTSU9OX0VYUElSRUQ7XG5leHBvcnRzLlBST1RPQ09MX0VSUk9SID0gUFJPVE9DT0xfRVJST1I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlBhdGhTZWdtZW50ID0gZXhwb3J0cy5QYXRoID0gZXhwb3J0cy5VbmJvdW5kUmVsYXRpb25zaGlwID0gZXhwb3J0cy5SZWxhdGlvbnNoaXAgPSBleHBvcnRzLk5vZGUgPSB1bmRlZmluZWQ7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9qc29uL3N0cmluZ2lmeVwiKTtcblxudmFyIF9zdHJpbmdpZnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3RyaW5naWZ5KTtcblxudmFyIF9rZXlzID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5c1wiKTtcblxudmFyIF9rZXlzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2tleXMpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2tcIik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKipcbiAqIENsYXNzIGZvciBOb2RlIFR5cGUuXG4gKi9cbnZhciBOb2RlID0gZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gaWRlbnRpdHkgLSBVbmlxdWUgaWRlbnRpdHlcbiAgICogQHBhcmFtIHtBcnJheX0gbGFiZWxzIC0gQXJyYXkgZm9yIGFsbCBsYWJlbHNcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgLSBNYXAgd2l0aCBub2RlIHByb3BlcnRpZXNcbiAgICovXG4gIGZ1bmN0aW9uIE5vZGUoaWRlbnRpdHksIGxhYmVscywgcHJvcGVydGllcykge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIE5vZGUpO1xuXG4gICAgdGhpcy5pZGVudGl0eSA9IGlkZW50aXR5O1xuICAgIHRoaXMubGFiZWxzID0gbGFiZWxzO1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShOb2RlLCBbe1xuICAgIGtleTogXCJ0b1N0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHZhciBzID0gXCIoXCIgKyB0aGlzLmlkZW50aXR5O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxhYmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzICs9IFwiOlwiICsgdGhpcy5sYWJlbHNbaV07XG4gICAgICB9XG4gICAgICB2YXIga2V5cyA9ICgwLCBfa2V5czIuZGVmYXVsdCkodGhpcy5wcm9wZXJ0aWVzKTtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcyArPSBcIiB7XCI7XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBrZXlzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgIGlmIChfaSA+IDApIHMgKz0gXCIsXCI7XG4gICAgICAgICAgcyArPSBrZXlzW19pXSArIFwiOlwiICsgKDAsIF9zdHJpbmdpZnkyLmRlZmF1bHQpKHRoaXMucHJvcGVydGllc1trZXlzW19pXV0pO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBzICs9IFwiKVwiO1xuICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBOb2RlO1xufSgpO1xuXG4vKipcbiAqIENsYXNzIGZvciBSZWxhdGlvbnNoaXAgVHlwZS5cbiAqL1xuXG5cbnZhciBSZWxhdGlvbnNoaXAgPSBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtJbnRlZ2VyfSBpZGVudGl0eSAtIFVuaXF1ZSBpZGVudGl0eVxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IHN0YXJ0IC0gSWRlbnRpdHkgb2Ygc3RhcnQgTm9kZVxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IGVuZCAtIElkZW50aXR5IG9mIGVuZCBOb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gUmVsYXRpb25zaGlwIHR5cGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgLSBNYXAgd2l0aCByZWxhdGlvbnNoaXAgcHJvcGVydGllc1xuICAgKi9cbiAgZnVuY3Rpb24gUmVsYXRpb25zaGlwKGlkZW50aXR5LCBzdGFydCwgZW5kLCB0eXBlLCBwcm9wZXJ0aWVzKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUmVsYXRpb25zaGlwKTtcblxuICAgIHRoaXMuaWRlbnRpdHkgPSBpZGVudGl0eTtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoUmVsYXRpb25zaGlwLCBbe1xuICAgIGtleTogXCJ0b1N0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHZhciBzID0gXCIoXCIgKyB0aGlzLnN0YXJ0ICsgXCIpLVs6XCIgKyB0aGlzLnR5cGU7XG4gICAgICB2YXIga2V5cyA9ICgwLCBfa2V5czIuZGVmYXVsdCkodGhpcy5wcm9wZXJ0aWVzKTtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcyArPSBcIiB7XCI7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChpID4gMCkgcyArPSBcIixcIjtcbiAgICAgICAgICBzICs9IGtleXNbaV0gKyBcIjpcIiArICgwLCBfc3RyaW5naWZ5Mi5kZWZhdWx0KSh0aGlzLnByb3BlcnRpZXNba2V5c1tpXV0pO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBzICs9IFwiXS0+KFwiICsgdGhpcy5lbmQgKyBcIilcIjtcbiAgICAgIHJldHVybiBzO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gUmVsYXRpb25zaGlwO1xufSgpO1xuXG4vKipcbiAqIENsYXNzIGZvciBVbmJvdW5kUmVsYXRpb25zaGlwIFR5cGUuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqL1xuXG5cbnZhciBVbmJvdW5kUmVsYXRpb25zaGlwID0gZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gaWRlbnRpdHkgLSBVbmlxdWUgaWRlbnRpdHlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBSZWxhdGlvbnNoaXAgdHlwZVxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyAtIE1hcCB3aXRoIHJlbGF0aW9uc2hpcCBwcm9wZXJ0aWVzXG4gICAqL1xuICBmdW5jdGlvbiBVbmJvdW5kUmVsYXRpb25zaGlwKGlkZW50aXR5LCB0eXBlLCBwcm9wZXJ0aWVzKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgVW5ib3VuZFJlbGF0aW9uc2hpcCk7XG5cbiAgICB0aGlzLmlkZW50aXR5ID0gaWRlbnRpdHk7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgcmVsYXRpb25zaGlwXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gc3RhcnQgLSBJZGVudGl0eSBvZiBzdGFydCBub2RlXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gZW5kIC0gSWRlbnRpdHkgb2YgZW5kIG5vZGVcbiAgICogQHJldHVybiB7UmVsYXRpb25zaGlwfSAtIENyZWF0ZWQgcmVsYXRpb25zaGlwXG4gICAqL1xuXG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoVW5ib3VuZFJlbGF0aW9uc2hpcCwgW3tcbiAgICBrZXk6IFwiYmluZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBiaW5kKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHJldHVybiBuZXcgUmVsYXRpb25zaGlwKHRoaXMuaWRlbnRpdHksIHN0YXJ0LCBlbmQsIHRoaXMudHlwZSwgdGhpcy5wcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9TdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICB2YXIgcyA9IFwiLVs6XCIgKyB0aGlzLnR5cGU7XG4gICAgICB2YXIga2V5cyA9ICgwLCBfa2V5czIuZGVmYXVsdCkodGhpcy5wcm9wZXJ0aWVzKTtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcyArPSBcIiB7XCI7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChpID4gMCkgcyArPSBcIixcIjtcbiAgICAgICAgICBzICs9IGtleXNbaV0gKyBcIjpcIiArICgwLCBfc3RyaW5naWZ5Mi5kZWZhdWx0KSh0aGlzLnByb3BlcnRpZXNba2V5c1tpXV0pO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBzICs9IFwiXS0+XCI7XG4gICAgICByZXR1cm4gcztcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFVuYm91bmRSZWxhdGlvbnNoaXA7XG59KCk7XG5cbi8qKlxuICogQ2xhc3MgZm9yIFBhdGhTZWdtZW50IFR5cGUuXG4gKi9cblxuXG52YXIgUGF0aFNlZ21lbnQgPVxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7Tm9kZX0gc3RhcnQgLSBzdGFydCBub2RlXG4gKiBAcGFyYW0ge1JlbGF0aW9uc2hpcH0gcmVsIC0gcmVsYXRpb25zaGlwIHRoYXQgY29ubmVjdHMgc3RhcnQgYW5kIGVuZCBub2RlXG4gKiBAcGFyYW0ge05vZGV9IGVuZCAtIGVuZCBub2RlXG4gKi9cbmZ1bmN0aW9uIFBhdGhTZWdtZW50KHN0YXJ0LCByZWwsIGVuZCkge1xuICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBQYXRoU2VnbWVudCk7XG5cbiAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICB0aGlzLnJlbGF0aW9uc2hpcCA9IHJlbDtcbiAgdGhpcy5lbmQgPSBlbmQ7XG59O1xuXG4vKipcbiAqIENsYXNzIGZvciBQYXRoIFR5cGUuXG4gKi9cblxuXG52YXIgUGF0aCA9XG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtOb2RlfSBzdGFydCAgLSBzdGFydCBub2RlXG4gKiBAcGFyYW0ge05vZGV9IGVuZCAtIGVuZCBub2RlXG4gKiBAcGFyYW0ge0FycmF5fSBzZWdtZW50cyAtIEFycmF5IG9mIFNlZ21lbnRzXG4gKi9cbmZ1bmN0aW9uIFBhdGgoc3RhcnQsIGVuZCwgc2VnbWVudHMpIHtcbiAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUGF0aCk7XG5cbiAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICB0aGlzLmVuZCA9IGVuZDtcbiAgdGhpcy5zZWdtZW50cyA9IHNlZ21lbnRzO1xuICB0aGlzLmxlbmd0aCA9IHNlZ21lbnRzLmxlbmd0aDtcbn07XG5cbmV4cG9ydHMuTm9kZSA9IE5vZGU7XG5leHBvcnRzLlJlbGF0aW9uc2hpcCA9IFJlbGF0aW9uc2hpcDtcbmV4cG9ydHMuVW5ib3VuZFJlbGF0aW9uc2hpcCA9IFVuYm91bmRSZWxhdGlvbnNoaXA7XG5leHBvcnRzLlBhdGggPSBQYXRoO1xuZXhwb3J0cy5QYXRoU2VnbWVudCA9IFBhdGhTZWdtZW50OyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXJyb3IgPSBleHBvcnRzLnNlc3Npb24gPSBleHBvcnRzLnR5cGVzID0gZXhwb3J0cy5hdXRoID0gZXhwb3J0cy5OZW80akVycm9yID0gZXhwb3J0cy5pbnRlZ2VyID0gZXhwb3J0cy5pc0ludCA9IGV4cG9ydHMuaW50ID0gZXhwb3J0cy5kcml2ZXIgPSB1bmRlZmluZWQ7XG5cbnZhciBfaW50ZWdlciA9IHJlcXVpcmUoJy4vaW50ZWdlcicpO1xuXG52YXIgX2dyYXBoVHlwZXMgPSByZXF1aXJlKCcuL2dyYXBoLXR5cGVzJyk7XG5cbnZhciBfZXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yJyk7XG5cbnZhciBfcmVzdWx0ID0gcmVxdWlyZSgnLi9yZXN1bHQnKTtcblxudmFyIF9yZXN1bHQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVzdWx0KTtcblxudmFyIF9yZXN1bHRTdW1tYXJ5ID0gcmVxdWlyZSgnLi9yZXN1bHQtc3VtbWFyeScpO1xuXG52YXIgX3Jlc3VsdFN1bW1hcnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVzdWx0U3VtbWFyeSk7XG5cbnZhciBfcmVjb3JkID0gcmVxdWlyZSgnLi9yZWNvcmQnKTtcblxudmFyIF9yZWNvcmQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVjb3JkKTtcblxudmFyIF9kcml2ZXIgPSByZXF1aXJlKCcuL2RyaXZlcicpO1xuXG52YXIgX3JvdXRpbmdEcml2ZXIgPSByZXF1aXJlKCcuL3JvdXRpbmctZHJpdmVyJyk7XG5cbnZhciBfcm91dGluZ0RyaXZlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yb3V0aW5nRHJpdmVyKTtcblxudmFyIF92ZXJzaW9uID0gcmVxdWlyZSgnLi4vdmVyc2lvbicpO1xuXG52YXIgX3ZlcnNpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdmVyc2lvbik7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvdXRpbCcpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxudmFyIGF1dGggPSB7XG4gIGJhc2ljOiBmdW5jdGlvbiBiYXNpYyh1c2VybmFtZSwgcGFzc3dvcmQpIHtcbiAgICB2YXIgcmVhbG0gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChyZWFsbSkge1xuICAgICAgcmV0dXJuIHsgc2NoZW1lOiAnYmFzaWMnLCBwcmluY2lwYWw6IHVzZXJuYW1lLCBjcmVkZW50aWFsczogcGFzc3dvcmQsIHJlYWxtOiByZWFsbSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyBzY2hlbWU6ICdiYXNpYycsIHByaW5jaXBhbDogdXNlcm5hbWUsIGNyZWRlbnRpYWxzOiBwYXNzd29yZCB9O1xuICAgIH1cbiAgfSxcbiAga2VyYmVyb3M6IGZ1bmN0aW9uIGtlcmJlcm9zKGJhc2U2NEVuY29kZWRUaWNrZXQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1lOiAna2VyYmVyb3MnLFxuICAgICAgcHJpbmNpcGFsOiAnJywgLy8gVGhpcyBlbXB0eSBzdHJpbmcgaXMgcmVxdWlyZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICAgICAgY3JlZGVudGlhbHM6IGJhc2U2NEVuY29kZWRUaWNrZXRcbiAgICB9O1xuICB9LFxuICBjdXN0b206IGZ1bmN0aW9uIGN1c3RvbShwcmluY2lwYWwsIGNyZWRlbnRpYWxzLCByZWFsbSwgc2NoZW1lKSB7XG4gICAgdmFyIHBhcmFtZXRlcnMgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChwYXJhbWV0ZXJzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzY2hlbWU6IHNjaGVtZSwgcHJpbmNpcGFsOiBwcmluY2lwYWwsIGNyZWRlbnRpYWxzOiBjcmVkZW50aWFscywgcmVhbG06IHJlYWxtLFxuICAgICAgICBwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyBzY2hlbWU6IHNjaGVtZSwgcHJpbmNpcGFsOiBwcmluY2lwYWwsIGNyZWRlbnRpYWxzOiBjcmVkZW50aWFscywgcmVhbG06IHJlYWxtIH07XG4gICAgfVxuICB9XG59O1xudmFyIFVTRVJfQUdFTlQgPSBcIm5lbzRqLWphdmFzY3JpcHQvXCIgKyBfdmVyc2lvbjIuZGVmYXVsdDtcblxuLyoqXG4gKiBDb25zdHJ1Y3QgYSBuZXcgTmVvNGogRHJpdmVyLiBUaGlzIGlzIHlvdXIgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhpc1xuICogbGlicmFyeS5cbiAqXG4gKiAjIyBDb25maWd1cmF0aW9uXG4gKlxuICogVGhpcyBmdW5jdGlvbiBvcHRpb25hbGx5IHRha2VzIGEgY29uZmlndXJhdGlvbiBhcmd1bWVudC4gQXZhaWxhYmxlIGNvbmZpZ3VyYXRpb25cbiAqIG9wdGlvbnMgYXJlIGFzIGZvbGxvd3M6XG4gKlxuICogICAgIHtcbiAqICAgICAgIC8vIEVuY3J5cHRpb24gbGV2ZWw6IEVOQ1JZUFRJT05fT04gb3IgRU5DUllQVElPTl9PRkYuXG4gKiAgICAgICBlbmNyeXB0ZWQ6IEVOQ1JZUFRJT05fT058RU5DUllQVElPTl9PRkZcbiAqXG4gKiAgICAgICAvLyBUcnVzdCBzdHJhdGVneSB0byB1c2UgaWYgZW5jcnlwdGlvbiBpcyBlbmFibGVkLiBUaGVyZSBpcyBubyBtb2RlIHRvIGRpc2FibGVcbiAqICAgICAgIC8vIHRydXN0IG90aGVyIHRoYW4gZGlzYWJsaW5nIGVuY3J5cHRpb24gYWx0b2dldGhlci4gVGhlIHJlYXNvbiBmb3JcbiAqICAgICAgIC8vIHRoaXMgaXMgdGhhdCBpZiB5b3UgZG9uJ3Qga25vdyB3aG8geW91IGFyZSB0YWxraW5nIHRvLCBpdCBpcyBlYXN5IGZvciBhblxuICogICAgICAgLy8gYXR0YWNrZXIgdG8gaGlqYWNrIHlvdXIgZW5jcnlwdGVkIGNvbm5lY3Rpb24sIHJlbmRlcmluZyBlbmNyeXB0aW9uIHBvaW50bGVzcy5cbiAqICAgICAgIC8vXG4gKiAgICAgICAvLyBUUlVTVF9BTExfQ0VSVElGSUNBVEVTIGlzIHRoZSBkZWZhdWx0IGNob2ljZSBmb3IgTm9kZUpTIGRlcGxveW1lbnRzLiBJdCBvbmx5IHJlcXVpcmVzXG4gKiAgICAgICAvLyBuZXcgaG9zdCB0byBwcm92aWRlIGEgY2VydGlmaWNhdGUgYW5kIGRvZXMgbm8gdmVyaWZpY2F0aW9uIG9mIHRoZSBwcm92aWRlZCBjZXJ0aWZpY2F0ZS5cbiAqICAgICAgIC8vXG4gKiAgICAgICAvLyBUUlVTVF9PTl9GSVJTVF9VU0UgaXMgYXZhaWxhYmxlIGZvciBtb2Rlcm4gTm9kZUpTIGRlcGxveW1lbnRzLCBhbmQgd29ya3NcbiAqICAgICAgIC8vIHNpbWlsYXJseSB0byBob3cgYHNzbGAgd29ya3MgLSB0aGUgZmlyc3QgdGltZSB3ZSBjb25uZWN0IHRvIGEgbmV3IGhvc3QsXG4gKiAgICAgICAvLyB3ZSByZW1lbWJlciB0aGUgY2VydGlmaWNhdGUgdGhleSB1c2UuIElmIHRoZSBjZXJ0aWZpY2F0ZSBldmVyIGNoYW5nZXMsIHdlXG4gKiAgICAgICAvLyBhc3N1bWUgaXQgaXMgYW4gYXR0ZW1wdCB0byBoaWphY2sgdGhlIGNvbm5lY3Rpb24gYW5kIHJlcXVpcmUgbWFudWFsIGludGVydmVudGlvbi5cbiAqICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBieSBkZWZhdWx0LCBjb25uZWN0aW9ucyBcImp1c3Qgd29ya1wiIHdoaWxlIHN0aWxsIGdpdmluZyB5b3VcbiAqICAgICAgIC8vIGdvb2QgZW5jcnlwdGVkIHByb3RlY3Rpb24uXG4gKiAgICAgICAvL1xuICogICAgICAgLy8gVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVMgaXMgdGhlIGNsYXNzaWMgYXBwcm9hY2ggdG8gdHJ1c3QgdmVyaWZpY2F0aW9uIC1cbiAqICAgICAgIC8vIHdoZW5ldmVyIHdlIGVzdGFibGlzaCBhbiBlbmNyeXB0ZWQgY29ubmVjdGlvbiwgd2UgZW5zdXJlIHRoZSBob3N0IGlzIHVzaW5nXG4gKiAgICAgICAvLyBhbiBlbmNyeXB0aW9uIGNlcnRpZmljYXRlIHRoYXQgaXMgaW4sIG9yIGlzIHNpZ25lZCBieSwgYSBjZXJ0aWZpY2F0ZSBsaXN0ZWRcbiAqICAgICAgIC8vIGFzIHRydXN0ZWQuIEluIHRoZSB3ZWIgYnVuZGxlLCB0aGlzIGxpc3Qgb2YgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgaXMgbWFpbnRhaW5lZFxuICogICAgICAgLy8gYnkgdGhlIHdlYiBicm93c2VyLiBJbiBOb2RlSlMsIHlvdSBjb25maWd1cmUgdGhlIGxpc3Qgd2l0aCB0aGUgbmV4dCBjb25maWcgb3B0aW9uLlxuICogICAgICAgLy9cbiAqICAgICAgIC8vIFRSVVNUX1NZU1RFTV9DQV9TSUdORURfQ0VSVElGSUNBVEVTIG1lYW5kIHRoYXQgeW91IHRydXN0IHdoYXRldmVyIGNlcnRpZmljYXRlc1xuICogICAgICAgLy8gYXJlIGluIHRoZSBkZWZhdWx0IGNlcnRpZmljYXRlIGNoYWluIG9mIHRoXG4gKiAgICAgICB0cnVzdDogXCJUUlVTVF9BTExfQ0VSVElGSUNBVEVTXCIgfCBcIlRSVVNUX09OX0ZJUlNUX1VTRVwiIHwgXCJUUlVTVF9TSUdORURfQ0VSVElGSUNBVEVTXCIgfFxuICAqICAgICAgIFwiVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVNcIiB8IFwiVFJVU1RfU1lTVEVNX0NBX1NJR05FRF9DRVJUSUZJQ0FURVNcIixcbiAqXG4gKiAgICAgICAvLyBMaXN0IG9mIG9uZSBvciBtb3JlIHBhdGhzIHRvIHRydXN0ZWQgZW5jcnlwdGlvbiBjZXJ0aWZpY2F0ZXMuIFRoaXMgb25seVxuICogICAgICAgLy8gd29ya3MgaW4gdGhlIE5vZGVKUyBidW5kbGUsIGFuZCBvbmx5IG1hdHRlcnMgaWYgeW91IHVzZSBcIlRSVVNUX0NVU1RPTV9DQV9TSUdORURfQ0VSVElGSUNBVEVTXCIuXG4gKiAgICAgICAvLyBUaGUgY2VydGlmaWNhdGUgZmlsZXMgc2hvdWxkIGJlIGluIHJlZ3VsYXIgWC41MDkgUEVNIGZvcm1hdC5cbiAqICAgICAgIC8vIEZvciBpbnN0YW5jZSwgWycuL3RydXN0ZWQucGVtJ11cbiAqICAgICAgIHRydXN0ZWRDZXJ0aWZpY2F0ZXM6IFtdLFxuICpcbiAqICAgICAgIC8vIFBhdGggdG8gYSBmaWxlIHdoZXJlIHRoZSBkcml2ZXIgc2F2ZXMgaG9zdHMgaXQgaGFzIHNlZW4gaW4gdGhlIHBhc3QsIHRoaXMgaXNcbiAqICAgICAgIC8vIHZlcnkgc2ltaWxhciB0byB0aGUgc3NsIHRvb2wncyBrbm93bl9ob3N0cyBmaWxlLiBFYWNoIHRpbWUgd2UgY29ubmVjdCB0byBhXG4gKiAgICAgICAvLyBuZXcgaG9zdCwgYSBoYXNoIG9mIHRoZWlyIGNlcnRpZmljYXRlIGlzIHN0b3JlZCBhbG9uZyB3aXRoIHRoZSBkb21haW4gbmFtZSBhbmRcbiAqICAgICAgIC8vIHBvcnQsIGFuZCB0aGlzIGlzIHRoZW4gdXNlZCB0byB2ZXJpZnkgdGhlIGhvc3QgY2VydGlmaWNhdGUgZG9lcyBub3QgY2hhbmdlLlxuICogICAgICAgLy8gVGhpcyBzZXR0aW5nIGhhcyBubyBlZmZlY3QgdW5sZXNzIFRSVVNUX09OX0ZJUlNUX1VTRSBpcyBlbmFibGVkLlxuICogICAgICAga25vd25Ib3N0czpcIn4vLm5lbzRqL2tub3duX2hvc3RzXCIsXG4gKlxuICogICAgICAgLy8gVGhlIG1heCBudW1iZXIgb2YgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxsb3dlZCBpZGxlIGluIHRoZSBwb29sIGF0IGFueSB0aW1lLlxuICogICAgICAgLy8gQ29ubmVjdGlvbiB3aWxsIGJlIGRlc3Ryb3llZCBpZiB0aGlzIHRocmVzaG9sZCBpcyBleGNlZWRlZC5cbiAqICAgICAgIGNvbm5lY3Rpb25Qb29sU2l6ZTogNTAsXG4gKlxuICogICAgICAgLy8gU3BlY2lmeSB0aGUgbWF4aW11bSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0cmFuc2FjdGlvbnMgYXJlIGFsbG93ZWQgdG8gcmV0cnkgdmlhXG4gKiAgICAgICAvLyB7QGxpbmsgU2Vzc2lvbiNyZWFkVHJhbnNhY3Rpb24oKX0gYW5kIHtAbGluayBTZXNzaW9uI3dyaXRlVHJhbnNhY3Rpb24oKX0gZnVuY3Rpb25zLiBUaGVzZSBmdW5jdGlvbnNcbiAqICAgICAgIC8vIHdpbGwgcmV0cnkgdGhlIGdpdmVuIHVuaXQgb2Ygd29yayBvbiBgU2VydmljZVVuYXZhaWxhYmxlYCwgYFNlc3Npb25FeHBpcmVkYCBhbmQgdHJhbnNpZW50IGVycm9ycyB3aXRoXG4gKiAgICAgICAvLyBleHBvbmVudGlhbCBiYWNrb2ZmIHVzaW5nIGluaXRpYWwgZGVsYXkgb2YgMSBzZWNvbmQuIERlZmF1bHQgdmFsdWUgaXMgMzAwMDAgd2hpY2ggaXMgMzAgc2Vjb25kcy5cbiAqICAgICAgIG1heFRyYW5zYWN0aW9uUmV0cnlUaW1lOiAzMDAwMCxcbiAqICAgICB9XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIGZvciB0aGUgTmVvNGogZGF0YWJhc2UsIGZvciBpbnN0YW5jZSBcImJvbHQ6Ly9sb2NhbGhvc3RcIlxuICogQHBhcmFtIHtNYXA8U3RyaW5nLFN0cmluZz59IGF1dGhUb2tlbiBBdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscy4gU2VlIHtAbGluayBhdXRofSBmb3IgaGVscGVycy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgQ29uZmlndXJhdGlvbiBvYmplY3QuIFNlZSB0aGUgY29uZmlndXJhdGlvbiBzZWN0aW9uIGFib3ZlIGZvciBkZXRhaWxzLlxuICogQHJldHVybnMge0RyaXZlcn1cbiAqL1xuZnVuY3Rpb24gZHJpdmVyKHVybCwgYXV0aFRva2VuKSB7XG4gIHZhciBjb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXG4gICgwLCBfdXRpbC5hc3NlcnRTdHJpbmcpKHVybCwgJ0JvbHQgVVJMJyk7XG4gIHZhciBzY2hlbWUgPSAoMCwgX3V0aWwucGFyc2VTY2hlbWUpKHVybCk7XG4gIHZhciByb3V0aW5nQ29udGV4dCA9ICgwLCBfdXRpbC5wYXJzZVJvdXRpbmdDb250ZXh0KSh1cmwpO1xuICBpZiAoc2NoZW1lID09PSAnYm9sdCtyb3V0aW5nOi8vJykge1xuICAgIHJldHVybiBuZXcgX3JvdXRpbmdEcml2ZXIyLmRlZmF1bHQoKDAsIF91dGlsLnBhcnNlVXJsKSh1cmwpLCByb3V0aW5nQ29udGV4dCwgVVNFUl9BR0VOVCwgYXV0aFRva2VuLCBjb25maWcpO1xuICB9IGVsc2UgaWYgKHNjaGVtZSA9PT0gJ2JvbHQ6Ly8nKSB7XG4gICAgaWYgKCEoMCwgX3V0aWwuaXNFbXB0eU9iamVjdE9yTnVsbCkocm91dGluZ0NvbnRleHQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBzY2hlbWUgXFwnYm9sdFxcJy4gR2l2ZW4gVVJMOiBcXCcnICsgdXJsICsgJ1xcJycpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IF9kcml2ZXIuRHJpdmVyKCgwLCBfdXRpbC5wYXJzZVVybCkodXJsKSwgVVNFUl9BR0VOVCwgYXV0aFRva2VuLCBjb25maWcpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBzY2hlbWU6ICcgKyBzY2hlbWUpO1xuICB9XG59XG5cbnZhciB0eXBlcyA9IHtcbiAgTm9kZTogX2dyYXBoVHlwZXMuTm9kZSxcbiAgUmVsYXRpb25zaGlwOiBfZ3JhcGhUeXBlcy5SZWxhdGlvbnNoaXAsXG4gIFVuYm91bmRSZWxhdGlvbnNoaXA6IF9ncmFwaFR5cGVzLlVuYm91bmRSZWxhdGlvbnNoaXAsXG4gIFBhdGhTZWdtZW50OiBfZ3JhcGhUeXBlcy5QYXRoU2VnbWVudCxcbiAgUGF0aDogX2dyYXBoVHlwZXMuUGF0aCxcbiAgUmVzdWx0OiBfcmVzdWx0Mi5kZWZhdWx0LFxuICBSZXN1bHRTdW1tYXJ5OiBfcmVzdWx0U3VtbWFyeTIuZGVmYXVsdCxcbiAgUmVjb3JkOiBfcmVjb3JkMi5kZWZhdWx0XG59O1xuXG52YXIgc2Vzc2lvbiA9IHtcbiAgUkVBRDogX2RyaXZlci5SRUFELFxuICBXUklURTogX2RyaXZlci5XUklURVxufTtcbnZhciBlcnJvciA9IHtcbiAgU0VSVklDRV9VTkFWQUlMQUJMRTogX2Vycm9yLlNFUlZJQ0VfVU5BVkFJTEFCTEUsXG4gIFNFU1NJT05fRVhQSVJFRDogX2Vycm9yLlNFU1NJT05fRVhQSVJFRCxcbiAgUFJPVE9DT0xfRVJST1I6IF9lcnJvci5QUk9UT0NPTF9FUlJPUlxufTtcbnZhciBpbnRlZ2VyID0ge1xuICB0b051bWJlcjogX2ludGVnZXIudG9OdW1iZXIsXG4gIHRvU3RyaW5nOiBfaW50ZWdlci50b1N0cmluZyxcbiAgaW5TYWZlUmFuZ2U6IF9pbnRlZ2VyLmluU2FmZVJhbmdlXG59O1xuXG52YXIgZm9yRXhwb3J0ID0ge1xuICBkcml2ZXI6IGRyaXZlcixcbiAgaW50OiBfaW50ZWdlci5pbnQsXG4gIGlzSW50OiBfaW50ZWdlci5pc0ludCxcbiAgaW50ZWdlcjogaW50ZWdlcixcbiAgTmVvNGpFcnJvcjogX2Vycm9yLk5lbzRqRXJyb3IsXG4gIGF1dGg6IGF1dGgsXG4gIHR5cGVzOiB0eXBlcyxcbiAgc2Vzc2lvbjogc2Vzc2lvbixcbiAgZXJyb3I6IGVycm9yXG59O1xuXG5leHBvcnRzLmRyaXZlciA9IGRyaXZlcjtcbmV4cG9ydHMuaW50ID0gX2ludGVnZXIuaW50O1xuZXhwb3J0cy5pc0ludCA9IF9pbnRlZ2VyLmlzSW50O1xuZXhwb3J0cy5pbnRlZ2VyID0gaW50ZWdlcjtcbmV4cG9ydHMuTmVvNGpFcnJvciA9IF9lcnJvci5OZW80akVycm9yO1xuZXhwb3J0cy5hdXRoID0gYXV0aDtcbmV4cG9ydHMudHlwZXMgPSB0eXBlcztcbmV4cG9ydHMuc2Vzc2lvbiA9IHNlc3Npb247XG5leHBvcnRzLmVycm9yID0gZXJyb3I7XG5leHBvcnRzLmRlZmF1bHQgPSBmb3JFeHBvcnQ7IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50b1N0cmluZyA9IGV4cG9ydHMudG9OdW1iZXIgPSBleHBvcnRzLmluU2FmZVJhbmdlID0gZXhwb3J0cy5pc0ludCA9IGV4cG9ydHMuaW50ID0gdW5kZWZpbmVkO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjaycpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzJyk7XG5cbnZhciBfY3JlYXRlQ2xhc3MzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlQ2xhc3MyKTtcblxudmFyIF9lcnJvciA9IHJlcXVpcmUoJy4vZXJyb3InKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgNjQgYml0IHR3bydzLWNvbXBsZW1lbnQgaW50ZWdlciwgZ2l2ZW4gaXRzIGxvdyBhbmQgaGlnaCAzMiBiaXQgdmFsdWVzIGFzICpzaWduZWQqIGludGVnZXJzLlxuICogIFNlZSB0aGUgZnJvbSogZnVuY3Rpb25zIGJlbG93IGZvciBtb3JlIGNvbnZlbmllbnQgd2F5cyBvZiBjb25zdHJ1Y3RpbmcgSW50ZWdlcnMuXG4gKiBAYWNjZXNzIHB1YmxpY1xuICogQGV4cG9ydHMgSW50ZWdlclxuICogQGNsYXNzIEEgSW50ZWdlciBjbGFzcyBmb3IgcmVwcmVzZW50aW5nIGEgNjQgYml0IHR3bydzLWNvbXBsZW1lbnQgaW50ZWdlciB2YWx1ZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsb3cgVGhlIGxvdyAoc2lnbmVkKSAzMiBiaXRzIG9mIHRoZSBsb25nXG4gKiBAcGFyYW0ge251bWJlcn0gaGlnaCBUaGUgaGlnaCAoc2lnbmVkKSAzMiBiaXRzIG9mIHRoZSBsb25nXG4gKiBAY29uc3RydWN0b3JcbiAqXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGNsYXNzIHdpbGwgYmUgcmVtb3ZlZCBvciBtYWRlIGludGVybmFsIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhlIGRyaXZlci5cbiAqL1xudmFyIEludGVnZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEludGVnZXIobG93LCBoaWdoKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgSW50ZWdlcik7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbG93IDMyIGJpdHMgYXMgYSBzaWduZWQgdmFsdWUuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAZXhwb3NlXG4gICAgICovXG4gICAgdGhpcy5sb3cgPSBsb3cgfCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhpZ2ggMzIgYml0cyBhcyBhIHNpZ25lZCB2YWx1ZS5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cbiAgICB0aGlzLmhpZ2ggPSBoaWdoIHwgMDtcbiAgfVxuXG4gIC8vIFRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhbiBJbnRlZ2VyIGlzIHRoZSB0d28gZ2l2ZW4gc2lnbmVkLCAzMi1iaXQgdmFsdWVzLlxuICAvLyBXZSB1c2UgMzItYml0IHBpZWNlcyBiZWNhdXNlIHRoZXNlIGFyZSB0aGUgc2l6ZSBvZiBpbnRlZ2VycyBvbiB3aGljaFxuICAvLyBKYXZhc2NyaXB0IHBlcmZvcm1zIGJpdC1vcGVyYXRpb25zLiAgRm9yIG9wZXJhdGlvbnMgbGlrZSBhZGRpdGlvbiBhbmRcbiAgLy8gbXVsdGlwbGljYXRpb24sIHdlIHNwbGl0IGVhY2ggbnVtYmVyIGludG8gMTYgYml0IHBpZWNlcywgd2hpY2ggY2FuIGVhc2lseSBiZVxuICAvLyBtdWx0aXBsaWVkIHdpdGhpbiBKYXZhc2NyaXB0J3MgZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50YXRpb24gd2l0aG91dCBvdmVyZmxvd1xuICAvLyBvciBjaGFuZ2UgaW4gc2lnbi5cbiAgLy9cbiAgLy8gSW4gdGhlIGFsZ29yaXRobXMgYmVsb3csIHdlIGZyZXF1ZW50bHkgcmVkdWNlIHRoZSBuZWdhdGl2ZSBjYXNlIHRvIHRoZVxuICAvLyBwb3NpdGl2ZSBjYXNlIGJ5IG5lZ2F0aW5nIHRoZSBpbnB1dChzKSBhbmQgdGhlbiBwb3N0LXByb2Nlc3NpbmcgdGhlIHJlc3VsdC5cbiAgLy8gTm90ZSB0aGF0IHdlIG11c3QgQUxXQVlTIGNoZWNrIHNwZWNpYWxseSB3aGV0aGVyIHRob3NlIHZhbHVlcyBhcmUgTUlOX1ZBTFVFXG4gIC8vICgtMl42MykgYmVjYXVzZSAtTUlOX1ZBTFVFID09IE1JTl9WQUxVRSAoc2luY2UgMl42MyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXNcbiAgLy8gYSBwb3NpdGl2ZSBudW1iZXIsIGl0IG92ZXJmbG93cyBiYWNrIGludG8gYSBuZWdhdGl2ZSkuICBOb3QgaGFuZGxpbmcgdGhpc1xuICAvLyBjYXNlIHdvdWxkIG9mdGVuIHJlc3VsdCBpbiBpbmZpbml0ZSByZWN1cnNpb24uXG4gIC8vXG4gIC8vIENvbW1vbiBjb25zdGFudCB2YWx1ZXMgWkVSTywgT05FLCBORUdfT05FLCBldGMuIGFyZSBkZWZpbmVkIGJlbG93IHRoZSBmcm9tKlxuICAvLyBtZXRob2RzIG9uIHdoaWNoIHRoZXkgZGVwZW5kLlxuXG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoSW50ZWdlciwgW3tcbiAgICBrZXk6ICdpblNhZmVSYW5nZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluU2FmZVJhbmdlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JlYXRlclRoYW5PckVxdWFsKEludGVnZXIuTUlOX1NBRkVfVkFMVUUpICYmIHRoaXMubGVzc1RoYW5PckVxdWFsKEludGVnZXIuTUFYX1NBRkVfVkFMVUUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgSW50ZWdlciB0byBhbiBleGFjdCBqYXZhc2NyaXB0IE51bWJlciwgYXNzdW1pbmcgaXQgaXMgYSAzMiBiaXQgaW50ZWdlci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAndG9JbnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b0ludCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvdztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICd0b051bWJlcicsXG5cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBJbnRlZ2VyIHRvIGEgdGhlIG5lYXJlc3QgZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50YXRpb24gb2YgdGhpcyB2YWx1ZSAoZG91YmxlLCA1MyBiaXQgbWFudGlzc2EpLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiB0b051bWJlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLmhpZ2ggKiBUV09fUFdSXzMyX0RCTCArICh0aGlzLmxvdyA+Pj4gMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIEludGVnZXIgdG8gYSBzdHJpbmcgd3JpdHRlbiBpbiB0aGUgc3BlY2lmaWVkIHJhZGl4LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gcmFkaXggUmFkaXggKDItMzYpLCBkZWZhdWx0cyB0byAxMFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICogQG92ZXJyaWRlXG4gICAgICogQHRocm93cyB7UmFuZ2VFcnJvcn0gSWYgYHJhZGl4YCBpcyBvdXQgb2YgcmFuZ2VcbiAgICAgKiBAZXhwb3NlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3RvU3RyaW5nJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcocmFkaXgpIHtcbiAgICAgIHJhZGl4ID0gcmFkaXggfHwgMTA7XG4gICAgICBpZiAocmFkaXggPCAyIHx8IDM2IDwgcmFkaXgpIHRocm93IFJhbmdlRXJyb3IoJ3JhZGl4IG91dCBvZiByYW5nZTogJyArIHJhZGl4KTtcbiAgICAgIGlmICh0aGlzLmlzWmVybygpKSByZXR1cm4gJzAnO1xuICAgICAgdmFyIHJlbTtcbiAgICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkge1xuICAgICAgICBpZiAodGhpcy5lcXVhbHMoSW50ZWdlci5NSU5fVkFMVUUpKSB7XG4gICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGFuZ2UgdGhlIEludGVnZXIgdmFsdWUgYmVmb3JlIGl0IGNhbiBiZSBuZWdhdGVkLCBzbyB3ZSByZW1vdmVcbiAgICAgICAgICAvLyB0aGUgYm90dG9tLW1vc3QgZGlnaXQgaW4gdGhpcyBiYXNlIGFuZCB0aGVuIHJlY3Vyc2UgdG8gZG8gdGhlIHJlc3QuXG4gICAgICAgICAgdmFyIHJhZGl4SW50ZWdlciA9IEludGVnZXIuZnJvbU51bWJlcihyYWRpeCk7XG4gICAgICAgICAgdmFyIGRpdiA9IHRoaXMuZGl2KHJhZGl4SW50ZWdlcik7XG4gICAgICAgICAgcmVtID0gZGl2Lm11bHRpcGx5KHJhZGl4SW50ZWdlcikuc3VidHJhY3QodGhpcyk7XG4gICAgICAgICAgcmV0dXJuIGRpdi50b1N0cmluZyhyYWRpeCkgKyByZW0udG9JbnQoKS50b1N0cmluZyhyYWRpeCk7XG4gICAgICAgIH0gZWxzZSByZXR1cm4gJy0nICsgdGhpcy5uZWdhdGUoKS50b1N0cmluZyhyYWRpeCk7XG4gICAgICB9XG5cbiAgICAgIC8vIERvIHNldmVyYWwgKDYpIGRpZ2l0cyBlYWNoIHRpbWUgdGhyb3VnaCB0aGUgbG9vcCwgc28gYXMgdG9cbiAgICAgIC8vIG1pbmltaXplIHRoZSBjYWxscyB0byB0aGUgdmVyeSBleHBlbnNpdmUgZW11bGF0ZWQgZGl2LlxuICAgICAgdmFyIHJhZGl4VG9Qb3dlciA9IEludGVnZXIuZnJvbU51bWJlcihNYXRoLnBvdyhyYWRpeCwgNikpO1xuICAgICAgcmVtID0gdGhpcztcbiAgICAgIHZhciByZXN1bHQgPSAnJztcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciByZW1EaXYgPSByZW0uZGl2KHJhZGl4VG9Qb3dlciksXG4gICAgICAgICAgICBpbnR2YWwgPSByZW0uc3VidHJhY3QocmVtRGl2Lm11bHRpcGx5KHJhZGl4VG9Qb3dlcikpLnRvSW50KCkgPj4+IDAsXG4gICAgICAgICAgICBkaWdpdHMgPSBpbnR2YWwudG9TdHJpbmcocmFkaXgpO1xuICAgICAgICByZW0gPSByZW1EaXY7XG4gICAgICAgIGlmIChyZW0uaXNaZXJvKCkpIHJldHVybiBkaWdpdHMgKyByZXN1bHQ7ZWxzZSB7XG4gICAgICAgICAgd2hpbGUgKGRpZ2l0cy5sZW5ndGggPCA2KSB7XG4gICAgICAgICAgICBkaWdpdHMgPSAnMCcgKyBkaWdpdHM7XG4gICAgICAgICAgfXJlc3VsdCA9ICcnICsgZGlnaXRzICsgcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaGlnaCAzMiBiaXRzIGFzIGEgc2lnbmVkIGludGVnZXIuXG4gICAgICogQHJldHVybnMge251bWJlcn0gU2lnbmVkIGhpZ2ggYml0c1xuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZ2V0SGlnaEJpdHMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRIaWdoQml0cygpIHtcbiAgICAgIHJldHVybiB0aGlzLmhpZ2g7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbG93IDMyIGJpdHMgYXMgYSBzaWduZWQgaW50ZWdlci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBTaWduZWQgbG93IGJpdHNcbiAgICAgKiBAZXhwb3NlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2dldExvd0JpdHMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRMb3dCaXRzKCkge1xuICAgICAgcmV0dXJuIHRoaXMubG93O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCB0byByZXByZXNlbnQgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgSW50ZWdlci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZ2V0TnVtQml0c0FicycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldE51bUJpdHNBYnMoKSB7XG4gICAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpIHJldHVybiB0aGlzLmVxdWFscyhJbnRlZ2VyLk1JTl9WQUxVRSkgPyA2NCA6IHRoaXMubmVnYXRlKCkuZ2V0TnVtQml0c0FicygpO1xuICAgICAgdmFyIHZhbCA9IHRoaXMuaGlnaCAhPSAwID8gdGhpcy5oaWdoIDogdGhpcy5sb3c7XG4gICAgICBmb3IgKHZhciBiaXQgPSAzMTsgYml0ID4gMDsgYml0LS0pIHtcbiAgICAgICAgaWYgKCh2YWwgJiAxIDw8IGJpdCkgIT0gMCkgYnJlYWs7XG4gICAgICB9cmV0dXJuIHRoaXMuaGlnaCAhPSAwID8gYml0ICsgMzMgOiBiaXQgKyAxO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3RzIGlmIHRoaXMgSW50ZWdlcidzIHZhbHVlIGVxdWFscyB6ZXJvLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnaXNaZXJvJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNaZXJvKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGlnaCA9PT0gMCAmJiB0aGlzLmxvdyA9PT0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0cyBpZiB0aGlzIEludGVnZXIncyB2YWx1ZSBpcyBuZWdhdGl2ZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKiBAZXhwb3NlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2lzTmVnYXRpdmUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc05lZ2F0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGlnaCA8IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBJbnRlZ2VyJ3MgdmFsdWUgaXMgcG9zaXRpdmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpc1Bvc2l0aXZlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNQb3NpdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhpZ2ggPj0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0cyBpZiB0aGlzIEludGVnZXIncyB2YWx1ZSBpcyBvZGQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpc09kZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzT2RkKCkge1xuICAgICAgcmV0dXJuICh0aGlzLmxvdyAmIDEpID09PSAxO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3RzIGlmIHRoaXMgSW50ZWdlcidzIHZhbHVlIGlzIGV2ZW4uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpc0V2ZW4nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0V2ZW4oKSB7XG4gICAgICByZXR1cm4gKHRoaXMubG93ICYgMSkgPT09IDA7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZXF1YWxzJyxcblxuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBJbnRlZ2VyJ3MgdmFsdWUgZXF1YWxzIHRoZSBzcGVjaWZpZWQncy5cbiAgICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBlcXVhbHMob3RoZXIpIHtcbiAgICAgIGlmICghSW50ZWdlci5pc0ludGVnZXIob3RoZXIpKSBvdGhlciA9IEludGVnZXIuZnJvbVZhbHVlKG90aGVyKTtcbiAgICAgIHJldHVybiB0aGlzLmhpZ2ggPT09IG90aGVyLmhpZ2ggJiYgdGhpcy5sb3cgPT09IG90aGVyLmxvdztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0cyBpZiB0aGlzIEludGVnZXIncyB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIHNwZWNpZmllZCdzLlxuICAgICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKiBAZXhwb3NlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ25vdEVxdWFscycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG5vdEVxdWFscyhvdGhlcikge1xuICAgICAgIXRoaXMuZXF1YWxzKCAvKiB2YWxpZGF0ZXMgKi9vdGhlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBJbnRlZ2VyJ3MgdmFsdWUgaXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQncy5cbiAgICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdsZXNzVGhhbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxlc3NUaGFuKG90aGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21wYXJlKCAvKiB2YWxpZGF0ZXMgKi9vdGhlcikgPCAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3RzIGlmIHRoaXMgSW50ZWdlcidzIHZhbHVlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0aGUgc3BlY2lmaWVkJ3MuXG4gICAgICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnbGVzc1RoYW5PckVxdWFsJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbGVzc1RoYW5PckVxdWFsKG90aGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21wYXJlKCAvKiB2YWxpZGF0ZXMgKi9vdGhlcikgPD0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0cyBpZiB0aGlzIEludGVnZXIncyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhlIHNwZWNpZmllZCdzLlxuICAgICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKiBAZXhwb3NlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2dyZWF0ZXJUaGFuJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ3JlYXRlclRoYW4ob3RoZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUoIC8qIHZhbGlkYXRlcyAqL290aGVyKSA+IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBJbnRlZ2VyJ3MgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRoZSBzcGVjaWZpZWQncy5cbiAgICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdncmVhdGVyVGhhbk9yRXF1YWwnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBncmVhdGVyVGhhbk9yRXF1YWwob3RoZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUoIC8qIHZhbGlkYXRlcyAqL290aGVyKSA+PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXBhcmVzIHRoaXMgSW50ZWdlcidzIHZhbHVlIHdpdGggdGhlIHNwZWNpZmllZCdzLlxuICAgICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIHRoZXkgYXJlIHRoZSBzYW1lLCAxIGlmIHRoZSB0aGlzIGlzIGdyZWF0ZXIgYW5kIC0xXG4gICAgICogIGlmIHRoZSBnaXZlbiBvbmUgaXMgZ3JlYXRlclxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY29tcGFyZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBhcmUob3RoZXIpIHtcbiAgICAgIGlmICghSW50ZWdlci5pc0ludGVnZXIob3RoZXIpKSBvdGhlciA9IEludGVnZXIuZnJvbVZhbHVlKG90aGVyKTtcbiAgICAgIGlmICh0aGlzLmVxdWFscyhvdGhlcikpIHJldHVybiAwO1xuICAgICAgdmFyIHRoaXNOZWcgPSB0aGlzLmlzTmVnYXRpdmUoKSxcbiAgICAgICAgICBvdGhlck5lZyA9IG90aGVyLmlzTmVnYXRpdmUoKTtcbiAgICAgIGlmICh0aGlzTmVnICYmICFvdGhlck5lZykgcmV0dXJuIC0xO1xuICAgICAgaWYgKCF0aGlzTmVnICYmIG90aGVyTmVnKSByZXR1cm4gMTtcbiAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHNpZ24gYml0cyBhcmUgdGhlIHNhbWVcbiAgICAgIHJldHVybiB0aGlzLnN1YnRyYWN0KG90aGVyKS5pc05lZ2F0aXZlKCkgPyAtMSA6IDE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmVnYXRlcyB0aGlzIEludGVnZXIncyB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7IUludGVnZXJ9IE5lZ2F0ZWQgSW50ZWdlclxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnbmVnYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbmVnYXRlKCkge1xuICAgICAgaWYgKHRoaXMuZXF1YWxzKEludGVnZXIuTUlOX1ZBTFVFKSkgcmV0dXJuIEludGVnZXIuTUlOX1ZBTFVFO1xuICAgICAgcmV0dXJuIHRoaXMubm90KCkuYWRkKEludGVnZXIuT05FKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzdW0gb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBJbnRlZ2VyLlxuICAgICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gYWRkZW5kIEFkZGVuZFxuICAgICAqIEByZXR1cm5zIHshSW50ZWdlcn0gU3VtXG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdhZGQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGQoYWRkZW5kKSB7XG4gICAgICBpZiAoIUludGVnZXIuaXNJbnRlZ2VyKGFkZGVuZCkpIGFkZGVuZCA9IEludGVnZXIuZnJvbVZhbHVlKGFkZGVuZCk7XG5cbiAgICAgIC8vIERpdmlkZSBlYWNoIG51bWJlciBpbnRvIDQgY2h1bmtzIG9mIDE2IGJpdHMsIGFuZCB0aGVuIHN1bSB0aGUgY2h1bmtzLlxuXG4gICAgICB2YXIgYTQ4ID0gdGhpcy5oaWdoID4+PiAxNjtcbiAgICAgIHZhciBhMzIgPSB0aGlzLmhpZ2ggJiAweEZGRkY7XG4gICAgICB2YXIgYTE2ID0gdGhpcy5sb3cgPj4+IDE2O1xuICAgICAgdmFyIGEwMCA9IHRoaXMubG93ICYgMHhGRkZGO1xuXG4gICAgICB2YXIgYjQ4ID0gYWRkZW5kLmhpZ2ggPj4+IDE2O1xuICAgICAgdmFyIGIzMiA9IGFkZGVuZC5oaWdoICYgMHhGRkZGO1xuICAgICAgdmFyIGIxNiA9IGFkZGVuZC5sb3cgPj4+IDE2O1xuICAgICAgdmFyIGIwMCA9IGFkZGVuZC5sb3cgJiAweEZGRkY7XG5cbiAgICAgIHZhciBjNDggPSAwLFxuICAgICAgICAgIGMzMiA9IDAsXG4gICAgICAgICAgYzE2ID0gMCxcbiAgICAgICAgICBjMDAgPSAwO1xuICAgICAgYzAwICs9IGEwMCArIGIwMDtcbiAgICAgIGMxNiArPSBjMDAgPj4+IDE2O1xuICAgICAgYzAwICY9IDB4RkZGRjtcbiAgICAgIGMxNiArPSBhMTYgKyBiMTY7XG4gICAgICBjMzIgKz0gYzE2ID4+PiAxNjtcbiAgICAgIGMxNiAmPSAweEZGRkY7XG4gICAgICBjMzIgKz0gYTMyICsgYjMyO1xuICAgICAgYzQ4ICs9IGMzMiA+Pj4gMTY7XG4gICAgICBjMzIgJj0gMHhGRkZGO1xuICAgICAgYzQ4ICs9IGE0OCArIGI0ODtcbiAgICAgIGM0OCAmPSAweEZGRkY7XG4gICAgICByZXR1cm4gSW50ZWdlci5mcm9tQml0cyhjMTYgPDwgMTYgfCBjMDAsIGM0OCA8PCAxNiB8IGMzMik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGlmZmVyZW5jZSBvZiB0aGlzIGFuZCB0aGUgc3BlY2lmaWVkIEludGVnZXIuXG4gICAgICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfSBzdWJ0cmFoZW5kIFN1YnRyYWhlbmRcbiAgICAgKiBAcmV0dXJucyB7IUludGVnZXJ9IERpZmZlcmVuY2VcbiAgICAgKiBAZXhwb3NlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3N1YnRyYWN0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3VidHJhY3Qoc3VidHJhaGVuZCkge1xuICAgICAgaWYgKCFJbnRlZ2VyLmlzSW50ZWdlcihzdWJ0cmFoZW5kKSkgc3VidHJhaGVuZCA9IEludGVnZXIuZnJvbVZhbHVlKHN1YnRyYWhlbmQpO1xuICAgICAgcmV0dXJuIHRoaXMuYWRkKHN1YnRyYWhlbmQubmVnYXRlKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHByb2R1Y3Qgb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBJbnRlZ2VyLlxuICAgICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gbXVsdGlwbGllciBNdWx0aXBsaWVyXG4gICAgICogQHJldHVybnMgeyFJbnRlZ2VyfSBQcm9kdWN0XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdtdWx0aXBseScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG11bHRpcGx5KG11bHRpcGxpZXIpIHtcbiAgICAgIGlmICh0aGlzLmlzWmVybygpKSByZXR1cm4gSW50ZWdlci5aRVJPO1xuICAgICAgaWYgKCFJbnRlZ2VyLmlzSW50ZWdlcihtdWx0aXBsaWVyKSkgbXVsdGlwbGllciA9IEludGVnZXIuZnJvbVZhbHVlKG11bHRpcGxpZXIpO1xuICAgICAgaWYgKG11bHRpcGxpZXIuaXNaZXJvKCkpIHJldHVybiBJbnRlZ2VyLlpFUk87XG4gICAgICBpZiAodGhpcy5lcXVhbHMoSW50ZWdlci5NSU5fVkFMVUUpKSByZXR1cm4gbXVsdGlwbGllci5pc09kZCgpID8gSW50ZWdlci5NSU5fVkFMVUUgOiBJbnRlZ2VyLlpFUk87XG4gICAgICBpZiAobXVsdGlwbGllci5lcXVhbHMoSW50ZWdlci5NSU5fVkFMVUUpKSByZXR1cm4gdGhpcy5pc09kZCgpID8gSW50ZWdlci5NSU5fVkFMVUUgOiBJbnRlZ2VyLlpFUk87XG5cbiAgICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkge1xuICAgICAgICBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpIHJldHVybiB0aGlzLm5lZ2F0ZSgpLm11bHRpcGx5KG11bHRpcGxpZXIubmVnYXRlKCkpO2Vsc2UgcmV0dXJuIHRoaXMubmVnYXRlKCkubXVsdGlwbHkobXVsdGlwbGllcikubmVnYXRlKCk7XG4gICAgICB9IGVsc2UgaWYgKG11bHRpcGxpZXIuaXNOZWdhdGl2ZSgpKSByZXR1cm4gdGhpcy5tdWx0aXBseShtdWx0aXBsaWVyLm5lZ2F0ZSgpKS5uZWdhdGUoKTtcblxuICAgICAgLy8gSWYgYm90aCBsb25ncyBhcmUgc21hbGwsIHVzZSBmbG9hdCBtdWx0aXBsaWNhdGlvblxuICAgICAgaWYgKHRoaXMubGVzc1RoYW4oVFdPX1BXUl8yNCkgJiYgbXVsdGlwbGllci5sZXNzVGhhbihUV09fUFdSXzI0KSkgcmV0dXJuIEludGVnZXIuZnJvbU51bWJlcih0aGlzLnRvTnVtYmVyKCkgKiBtdWx0aXBsaWVyLnRvTnVtYmVyKCkpO1xuXG4gICAgICAvLyBEaXZpZGUgZWFjaCBsb25nIGludG8gNCBjaHVua3Mgb2YgMTYgYml0cywgYW5kIHRoZW4gYWRkIHVwIDR4NCBwcm9kdWN0cy5cbiAgICAgIC8vIFdlIGNhbiBza2lwIHByb2R1Y3RzIHRoYXQgd291bGQgb3ZlcmZsb3cuXG5cbiAgICAgIHZhciBhNDggPSB0aGlzLmhpZ2ggPj4+IDE2O1xuICAgICAgdmFyIGEzMiA9IHRoaXMuaGlnaCAmIDB4RkZGRjtcbiAgICAgIHZhciBhMTYgPSB0aGlzLmxvdyA+Pj4gMTY7XG4gICAgICB2YXIgYTAwID0gdGhpcy5sb3cgJiAweEZGRkY7XG5cbiAgICAgIHZhciBiNDggPSBtdWx0aXBsaWVyLmhpZ2ggPj4+IDE2O1xuICAgICAgdmFyIGIzMiA9IG11bHRpcGxpZXIuaGlnaCAmIDB4RkZGRjtcbiAgICAgIHZhciBiMTYgPSBtdWx0aXBsaWVyLmxvdyA+Pj4gMTY7XG4gICAgICB2YXIgYjAwID0gbXVsdGlwbGllci5sb3cgJiAweEZGRkY7XG5cbiAgICAgIHZhciBjNDggPSAwLFxuICAgICAgICAgIGMzMiA9IDAsXG4gICAgICAgICAgYzE2ID0gMCxcbiAgICAgICAgICBjMDAgPSAwO1xuICAgICAgYzAwICs9IGEwMCAqIGIwMDtcbiAgICAgIGMxNiArPSBjMDAgPj4+IDE2O1xuICAgICAgYzAwICY9IDB4RkZGRjtcbiAgICAgIGMxNiArPSBhMTYgKiBiMDA7XG4gICAgICBjMzIgKz0gYzE2ID4+PiAxNjtcbiAgICAgIGMxNiAmPSAweEZGRkY7XG4gICAgICBjMTYgKz0gYTAwICogYjE2O1xuICAgICAgYzMyICs9IGMxNiA+Pj4gMTY7XG4gICAgICBjMTYgJj0gMHhGRkZGO1xuICAgICAgYzMyICs9IGEzMiAqIGIwMDtcbiAgICAgIGM0OCArPSBjMzIgPj4+IDE2O1xuICAgICAgYzMyICY9IDB4RkZGRjtcbiAgICAgIGMzMiArPSBhMTYgKiBiMTY7XG4gICAgICBjNDggKz0gYzMyID4+PiAxNjtcbiAgICAgIGMzMiAmPSAweEZGRkY7XG4gICAgICBjMzIgKz0gYTAwICogYjMyO1xuICAgICAgYzQ4ICs9IGMzMiA+Pj4gMTY7XG4gICAgICBjMzIgJj0gMHhGRkZGO1xuICAgICAgYzQ4ICs9IGE0OCAqIGIwMCArIGEzMiAqIGIxNiArIGExNiAqIGIzMiArIGEwMCAqIGI0ODtcbiAgICAgIGM0OCAmPSAweEZGRkY7XG4gICAgICByZXR1cm4gSW50ZWdlci5mcm9tQml0cyhjMTYgPDwgMTYgfCBjMDAsIGM0OCA8PCAxNiB8IGMzMik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZGl2JyxcblxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGlzIEludGVnZXIgZGl2aWRlZCBieSB0aGUgc3BlY2lmaWVkLlxuICAgICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gZGl2aXNvciBEaXZpc29yXG4gICAgICogQHJldHVybnMgeyFJbnRlZ2VyfSBRdW90aWVudFxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gZGl2KGRpdmlzb3IpIHtcbiAgICAgIGlmICghSW50ZWdlci5pc0ludGVnZXIoZGl2aXNvcikpIGRpdmlzb3IgPSBJbnRlZ2VyLmZyb21WYWx1ZShkaXZpc29yKTtcbiAgICAgIGlmIChkaXZpc29yLmlzWmVybygpKSB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKSgnZGl2aXNpb24gYnkgemVybycpO1xuICAgICAgaWYgKHRoaXMuaXNaZXJvKCkpIHJldHVybiBJbnRlZ2VyLlpFUk87XG4gICAgICB2YXIgYXBwcm94LCByZW0sIHJlcztcbiAgICAgIGlmICh0aGlzLmVxdWFscyhJbnRlZ2VyLk1JTl9WQUxVRSkpIHtcbiAgICAgICAgaWYgKGRpdmlzb3IuZXF1YWxzKEludGVnZXIuT05FKSB8fCBkaXZpc29yLmVxdWFscyhJbnRlZ2VyLk5FR19PTkUpKSByZXR1cm4gSW50ZWdlci5NSU5fVkFMVUU7IC8vIHJlY2FsbCB0aGF0IC1NSU5fVkFMVUUgPT0gTUlOX1ZBTFVFXG4gICAgICAgIGVsc2UgaWYgKGRpdmlzb3IuZXF1YWxzKEludGVnZXIuTUlOX1ZBTFVFKSkgcmV0dXJuIEludGVnZXIuT05FO2Vsc2Uge1xuICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSB8b3RoZXJ8ID49IDIsIHNvIHx0aGlzL290aGVyfCA8IHxNSU5fVkFMVUV8LlxuICAgICAgICAgICAgdmFyIGhhbGZUaGlzID0gdGhpcy5zaGlmdFJpZ2h0KDEpO1xuICAgICAgICAgICAgYXBwcm94ID0gaGFsZlRoaXMuZGl2KGRpdmlzb3IpLnNoaWZ0TGVmdCgxKTtcbiAgICAgICAgICAgIGlmIChhcHByb3guZXF1YWxzKEludGVnZXIuWkVSTykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRpdmlzb3IuaXNOZWdhdGl2ZSgpID8gSW50ZWdlci5PTkUgOiBJbnRlZ2VyLk5FR19PTkU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZW0gPSB0aGlzLnN1YnRyYWN0KGRpdmlzb3IubXVsdGlwbHkoYXBwcm94KSk7XG4gICAgICAgICAgICAgIHJlcyA9IGFwcHJveC5hZGQocmVtLmRpdihkaXZpc29yKSk7XG4gICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkaXZpc29yLmVxdWFscyhJbnRlZ2VyLk1JTl9WQUxVRSkpIHJldHVybiBJbnRlZ2VyLlpFUk87XG4gICAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpIHtcbiAgICAgICAgaWYgKGRpdmlzb3IuaXNOZWdhdGl2ZSgpKSByZXR1cm4gdGhpcy5uZWdhdGUoKS5kaXYoZGl2aXNvci5uZWdhdGUoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLm5lZ2F0ZSgpLmRpdihkaXZpc29yKS5uZWdhdGUoKTtcbiAgICAgIH0gZWxzZSBpZiAoZGl2aXNvci5pc05lZ2F0aXZlKCkpIHJldHVybiB0aGlzLmRpdihkaXZpc29yLm5lZ2F0ZSgpKS5uZWdhdGUoKTtcblxuICAgICAgLy8gUmVwZWF0IHRoZSBmb2xsb3dpbmcgdW50aWwgdGhlIHJlbWFpbmRlciBpcyBsZXNzIHRoYW4gb3RoZXI6ICBmaW5kIGFcbiAgICAgIC8vIGZsb2F0aW5nLXBvaW50IHRoYXQgYXBwcm94aW1hdGVzIHJlbWFpbmRlciAvIG90aGVyICpmcm9tIGJlbG93KiwgYWRkIHRoaXNcbiAgICAgIC8vIGludG8gdGhlIHJlc3VsdCwgYW5kIHN1YnRyYWN0IGl0IGZyb20gdGhlIHJlbWFpbmRlci4gIEl0IGlzIGNyaXRpY2FsIHRoYXRcbiAgICAgIC8vIHRoZSBhcHByb3hpbWF0ZSB2YWx1ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHJlYWwgdmFsdWUgc28gdGhhdCB0aGVcbiAgICAgIC8vIHJlbWFpbmRlciBuZXZlciBiZWNvbWVzIG5lZ2F0aXZlLlxuICAgICAgcmVzID0gSW50ZWdlci5aRVJPO1xuICAgICAgcmVtID0gdGhpcztcbiAgICAgIHdoaWxlIChyZW0uZ3JlYXRlclRoYW5PckVxdWFsKGRpdmlzb3IpKSB7XG4gICAgICAgIC8vIEFwcHJveGltYXRlIHRoZSByZXN1bHQgb2YgZGl2aXNpb24uIFRoaXMgbWF5IGJlIGEgbGl0dGxlIGdyZWF0ZXIgb3JcbiAgICAgICAgLy8gc21hbGxlciB0aGFuIHRoZSBhY3R1YWwgdmFsdWUuXG4gICAgICAgIGFwcHJveCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IocmVtLnRvTnVtYmVyKCkgLyBkaXZpc29yLnRvTnVtYmVyKCkpKTtcblxuICAgICAgICAvLyBXZSB3aWxsIHR3ZWFrIHRoZSBhcHByb3hpbWF0ZSByZXN1bHQgYnkgY2hhbmdpbmcgaXQgaW4gdGhlIDQ4LXRoIGRpZ2l0IG9yXG4gICAgICAgIC8vIHRoZSBzbWFsbGVzdCBub24tZnJhY3Rpb25hbCBkaWdpdCwgd2hpY2hldmVyIGlzIGxhcmdlci5cbiAgICAgICAgdmFyIGxvZzIgPSBNYXRoLmNlaWwoTWF0aC5sb2coYXBwcm94KSAvIE1hdGguTE4yKSxcbiAgICAgICAgICAgIGRlbHRhID0gbG9nMiA8PSA0OCA/IDEgOiBNYXRoLnBvdygyLCBsb2cyIC0gNDgpLFxuXG5cbiAgICAgICAgLy8gRGVjcmVhc2UgdGhlIGFwcHJveGltYXRpb24gdW50aWwgaXQgaXMgc21hbGxlciB0aGFuIHRoZSByZW1haW5kZXIuICBOb3RlXG4gICAgICAgIC8vIHRoYXQgaWYgaXQgaXMgdG9vIGxhcmdlLCB0aGUgcHJvZHVjdCBvdmVyZmxvd3MgYW5kIGlzIG5lZ2F0aXZlLlxuICAgICAgICBhcHByb3hSZXMgPSBJbnRlZ2VyLmZyb21OdW1iZXIoYXBwcm94KSxcbiAgICAgICAgICAgIGFwcHJveFJlbSA9IGFwcHJveFJlcy5tdWx0aXBseShkaXZpc29yKTtcbiAgICAgICAgd2hpbGUgKGFwcHJveFJlbS5pc05lZ2F0aXZlKCkgfHwgYXBwcm94UmVtLmdyZWF0ZXJUaGFuKHJlbSkpIHtcbiAgICAgICAgICBhcHByb3ggLT0gZGVsdGE7XG4gICAgICAgICAgYXBwcm94UmVzID0gSW50ZWdlci5mcm9tTnVtYmVyKGFwcHJveCk7XG4gICAgICAgICAgYXBwcm94UmVtID0gYXBwcm94UmVzLm11bHRpcGx5KGRpdmlzb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2Uga25vdyB0aGUgYW5zd2VyIGNhbid0IGJlIHplcm8uLi4gYW5kIGFjdHVhbGx5LCB6ZXJvIHdvdWxkIGNhdXNlXG4gICAgICAgIC8vIGluZmluaXRlIHJlY3Vyc2lvbiBzaW5jZSB3ZSB3b3VsZCBtYWtlIG5vIHByb2dyZXNzLlxuICAgICAgICBpZiAoYXBwcm94UmVzLmlzWmVybygpKSBhcHByb3hSZXMgPSBJbnRlZ2VyLk9ORTtcblxuICAgICAgICByZXMgPSByZXMuYWRkKGFwcHJveFJlcyk7XG4gICAgICAgIHJlbSA9IHJlbS5zdWJ0cmFjdChhcHByb3hSZW0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoaXMgSW50ZWdlciBtb2R1bG8gdGhlIHNwZWNpZmllZC5cbiAgICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IGRpdmlzb3IgRGl2aXNvclxuICAgICAqIEByZXR1cm5zIHshSW50ZWdlcn0gUmVtYWluZGVyXG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdtb2R1bG8nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBtb2R1bG8oZGl2aXNvcikge1xuICAgICAgaWYgKCFJbnRlZ2VyLmlzSW50ZWdlcihkaXZpc29yKSkgZGl2aXNvciA9IEludGVnZXIuZnJvbVZhbHVlKGRpdmlzb3IpO1xuICAgICAgcmV0dXJuIHRoaXMuc3VidHJhY3QodGhpcy5kaXYoZGl2aXNvcikubXVsdGlwbHkoZGl2aXNvcikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGJpdHdpc2UgTk9UIG9mIHRoaXMgSW50ZWdlci5cbiAgICAgKiBAcmV0dXJucyB7IUludGVnZXJ9XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdub3QnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBub3QoKSB7XG4gICAgICByZXR1cm4gSW50ZWdlci5mcm9tQml0cyh+dGhpcy5sb3csIH50aGlzLmhpZ2gpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGJpdHdpc2UgQU5EIG9mIHRoaXMgSW50ZWdlciBhbmQgdGhlIHNwZWNpZmllZC5cbiAgICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIEludGVnZXJcbiAgICAgKiBAcmV0dXJucyB7IUludGVnZXJ9XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdhbmQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhbmQob3RoZXIpIHtcbiAgICAgIGlmICghSW50ZWdlci5pc0ludGVnZXIob3RoZXIpKSBvdGhlciA9IEludGVnZXIuZnJvbVZhbHVlKG90aGVyKTtcbiAgICAgIHJldHVybiBJbnRlZ2VyLmZyb21CaXRzKHRoaXMubG93ICYgb3RoZXIubG93LCB0aGlzLmhpZ2ggJiBvdGhlci5oaWdoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBiaXR3aXNlIE9SIG9mIHRoaXMgSW50ZWdlciBhbmQgdGhlIHNwZWNpZmllZC5cbiAgICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIEludGVnZXJcbiAgICAgKiBAcmV0dXJucyB7IUludGVnZXJ9XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdvcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9yKG90aGVyKSB7XG4gICAgICBpZiAoIUludGVnZXIuaXNJbnRlZ2VyKG90aGVyKSkgb3RoZXIgPSBJbnRlZ2VyLmZyb21WYWx1ZShvdGhlcik7XG4gICAgICByZXR1cm4gSW50ZWdlci5mcm9tQml0cyh0aGlzLmxvdyB8IG90aGVyLmxvdywgdGhpcy5oaWdoIHwgb3RoZXIuaGlnaCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYml0d2lzZSBYT1Igb2YgdGhpcyBJbnRlZ2VyIGFuZCB0aGUgZ2l2ZW4gb25lLlxuICAgICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgSW50ZWdlclxuICAgICAqIEByZXR1cm5zIHshSW50ZWdlcn1cbiAgICAgKiBAZXhwb3NlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3hvcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHhvcihvdGhlcikge1xuICAgICAgaWYgKCFJbnRlZ2VyLmlzSW50ZWdlcihvdGhlcikpIG90aGVyID0gSW50ZWdlci5mcm9tVmFsdWUob3RoZXIpO1xuICAgICAgcmV0dXJuIEludGVnZXIuZnJvbUJpdHModGhpcy5sb3cgXiBvdGhlci5sb3csIHRoaXMuaGlnaCBeIG90aGVyLmhpZ2gpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhpcyBJbnRlZ2VyIHdpdGggYml0cyBzaGlmdGVkIHRvIHRoZSBsZWZ0IGJ5IHRoZSBnaXZlbiBhbW91bnQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ8IUludGVnZXJ9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcbiAgICAgKiBAcmV0dXJucyB7IUludGVnZXJ9IFNoaWZ0ZWQgSW50ZWdlclxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnc2hpZnRMZWZ0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hpZnRMZWZ0KG51bUJpdHMpIHtcbiAgICAgIGlmIChJbnRlZ2VyLmlzSW50ZWdlcihudW1CaXRzKSkgbnVtQml0cyA9IG51bUJpdHMudG9JbnQoKTtcbiAgICAgIGlmICgobnVtQml0cyAmPSA2MykgPT09IDApIHJldHVybiB0aGlzO2Vsc2UgaWYgKG51bUJpdHMgPCAzMikgcmV0dXJuIEludGVnZXIuZnJvbUJpdHModGhpcy5sb3cgPDwgbnVtQml0cywgdGhpcy5oaWdoIDw8IG51bUJpdHMgfCB0aGlzLmxvdyA+Pj4gMzIgLSBudW1CaXRzKTtlbHNlIHJldHVybiBJbnRlZ2VyLmZyb21CaXRzKDAsIHRoaXMubG93IDw8IG51bUJpdHMgLSAzMik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGlzIEludGVnZXIgd2l0aCBiaXRzIGFyaXRobWV0aWNhbGx5IHNoaWZ0ZWQgdG8gdGhlIHJpZ2h0IGJ5IHRoZSBnaXZlbiBhbW91bnQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ8IUludGVnZXJ9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcbiAgICAgKiBAcmV0dXJucyB7IUludGVnZXJ9IFNoaWZ0ZWQgSW50ZWdlclxuICAgICAqIEBleHBvc2VcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnc2hpZnRSaWdodCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNoaWZ0UmlnaHQobnVtQml0cykge1xuICAgICAgaWYgKEludGVnZXIuaXNJbnRlZ2VyKG51bUJpdHMpKSBudW1CaXRzID0gbnVtQml0cy50b0ludCgpO1xuICAgICAgaWYgKChudW1CaXRzICY9IDYzKSA9PT0gMCkgcmV0dXJuIHRoaXM7ZWxzZSBpZiAobnVtQml0cyA8IDMyKSByZXR1cm4gSW50ZWdlci5mcm9tQml0cyh0aGlzLmxvdyA+Pj4gbnVtQml0cyB8IHRoaXMuaGlnaCA8PCAzMiAtIG51bUJpdHMsIHRoaXMuaGlnaCA+PiBudW1CaXRzKTtlbHNlIHJldHVybiBJbnRlZ2VyLmZyb21CaXRzKHRoaXMuaGlnaCA+PiBudW1CaXRzIC0gMzIsIHRoaXMuaGlnaCA+PSAwID8gMCA6IC0xKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIEludGVnZXI7XG59KCk7XG5cbi8qKlxuICogQW4gaW5kaWNhdG9yIHVzZWQgdG8gcmVsaWFibHkgZGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIEludGVnZXIgb3Igbm90LlxuICogQHR5cGUge2Jvb2xlYW59XG4gKiBAY29uc3RcbiAqIEBleHBvc2VcbiAqIEBwcml2YXRlXG4gKi9cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyA2NC1iaXQgSW50ZWdlciBsaWJyYXJ5LCBvcmlnaW5hbGx5IGZyb20gTG9uZy5qcyBieSBkY29kZUlPXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGNvZGVJTy9Mb25nLmpzXG4vLyBMaWNlbnNlIEFwYWNoZSAyXG5cbkludGVnZXIuX19pc0ludGVnZXJfXztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEludGVnZXIucHJvdG90eXBlLCBcIl9faXNJbnRlZ2VyX19cIiwge1xuICB2YWx1ZTogdHJ1ZSxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGNvbmZpZ3VyYWJsZTogZmFsc2Vcbn0pO1xuXG4vKipcbiAqIFRlc3RzIGlmIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGlzIGEgSW50ZWdlci5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBvYmogT2JqZWN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBleHBvc2VcbiAqL1xuSW50ZWdlci5pc0ludGVnZXIgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiAob2JqICYmIG9ialtcIl9faXNJbnRlZ2VyX19cIl0pID09PSB0cnVlO1xufTtcblxuLyoqXG4gKiBBIGNhY2hlIG9mIHRoZSBJbnRlZ2VyIHJlcHJlc2VudGF0aW9ucyBvZiBzbWFsbCBpbnRlZ2VyIHZhbHVlcy5cbiAqIEB0eXBlIHshT2JqZWN0fVxuICogQGlubmVyXG4gKiBAcHJpdmF0ZVxuICovXG52YXIgSU5UX0NBQ0hFID0ge307XG5cbi8qKlxuICogUmV0dXJucyBhIEludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiAzMiBiaXQgaW50ZWdlciB2YWx1ZS5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRoZSAzMiBiaXQgaW50ZWdlciBpbiBxdWVzdGlvblxuICogQHJldHVybnMgeyFJbnRlZ2VyfSBUaGUgY29ycmVzcG9uZGluZyBJbnRlZ2VyIHZhbHVlXG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuZnJvbUludCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgb2JqLCBjYWNoZWRPYmo7XG4gIHZhbHVlID0gdmFsdWUgfCAwO1xuICBpZiAoLTEyOCA8PSB2YWx1ZSAmJiB2YWx1ZSA8IDEyOCkge1xuICAgIGNhY2hlZE9iaiA9IElOVF9DQUNIRVt2YWx1ZV07XG4gICAgaWYgKGNhY2hlZE9iaikgcmV0dXJuIGNhY2hlZE9iajtcbiAgfVxuICBvYmogPSBuZXcgSW50ZWdlcih2YWx1ZSwgdmFsdWUgPCAwID8gLTEgOiAwLCBmYWxzZSk7XG4gIGlmICgtMTI4IDw9IHZhbHVlICYmIHZhbHVlIDwgMTI4KSBJTlRfQ0FDSEVbdmFsdWVdID0gb2JqO1xuICByZXR1cm4gb2JqO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIGdpdmVuIHZhbHVlLCBwcm92aWRlZCB0aGF0IGl0IGlzIGEgZmluaXRlIG51bWJlci4gT3RoZXJ3aXNlLCB6ZXJvIGlzIHJldHVybmVkLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVGhlIG51bWJlciBpbiBxdWVzdGlvblxuICogQHJldHVybnMgeyFJbnRlZ2VyfSBUaGUgY29ycmVzcG9uZGluZyBJbnRlZ2VyIHZhbHVlXG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuZnJvbU51bWJlciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICBpZiAoaXNOYU4odmFsdWUpIHx8ICFpc0Zpbml0ZSh2YWx1ZSkpIHJldHVybiBJbnRlZ2VyLlpFUk87XG4gIGlmICh2YWx1ZSA8PSAtVFdPX1BXUl82M19EQkwpIHJldHVybiBJbnRlZ2VyLk1JTl9WQUxVRTtcbiAgaWYgKHZhbHVlICsgMSA+PSBUV09fUFdSXzYzX0RCTCkgcmV0dXJuIEludGVnZXIuTUFYX1ZBTFVFO1xuICBpZiAodmFsdWUgPCAwKSByZXR1cm4gSW50ZWdlci5mcm9tTnVtYmVyKC12YWx1ZSkubmVnYXRlKCk7XG4gIHJldHVybiBuZXcgSW50ZWdlcih2YWx1ZSAlIFRXT19QV1JfMzJfREJMIHwgMCwgdmFsdWUgLyBUV09fUFdSXzMyX0RCTCB8IDApO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIDY0IGJpdCBpbnRlZ2VyIHRoYXQgY29tZXMgYnkgY29uY2F0ZW5hdGluZyB0aGUgZ2l2ZW4gbG93IGFuZCBoaWdoIGJpdHMuIEVhY2ggaXNcbiAqICBhc3N1bWVkIHRvIHVzZSAzMiBiaXRzLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbG93Qml0cyBUaGUgbG93IDMyIGJpdHNcbiAqIEBwYXJhbSB7bnVtYmVyfSBoaWdoQml0cyBUaGUgaGlnaCAzMiBiaXRzXG4gKiBAcmV0dXJucyB7IUludGVnZXJ9IFRoZSBjb3JyZXNwb25kaW5nIEludGVnZXIgdmFsdWVcbiAqIEBleHBvc2VcbiAqL1xuSW50ZWdlci5mcm9tQml0cyA9IGZ1bmN0aW9uIChsb3dCaXRzLCBoaWdoQml0cykge1xuICByZXR1cm4gbmV3IEludGVnZXIobG93Qml0cywgaGlnaEJpdHMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgSW50ZWdlciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gc3RyaW5nLCB3cml0dGVuIHVzaW5nIHRoZSBzcGVjaWZpZWQgcmFkaXguXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgVGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIEludGVnZXJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gcmFkaXggVGhlIHJhZGl4IGluIHdoaWNoIHRoZSB0ZXh0IGlzIHdyaXR0ZW4gKDItMzYpLCBkZWZhdWx0cyB0byAxMFxuICogQHJldHVybnMgeyFJbnRlZ2VyfSBUaGUgY29ycmVzcG9uZGluZyBJbnRlZ2VyIHZhbHVlXG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuZnJvbVN0cmluZyA9IGZ1bmN0aW9uIChzdHIsIHJhZGl4KSB7XG4gIGlmIChzdHIubGVuZ3RoID09PSAwKSB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKSgnbnVtYmVyIGZvcm1hdCBlcnJvcjogZW1wdHkgc3RyaW5nJyk7XG4gIGlmIChzdHIgPT09IFwiTmFOXCIgfHwgc3RyID09PSBcIkluZmluaXR5XCIgfHwgc3RyID09PSBcIitJbmZpbml0eVwiIHx8IHN0ciA9PT0gXCItSW5maW5pdHlcIikgcmV0dXJuIEludGVnZXIuWkVSTztcbiAgcmFkaXggPSByYWRpeCB8fCAxMDtcbiAgaWYgKHJhZGl4IDwgMiB8fCAzNiA8IHJhZGl4KSB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKSgncmFkaXggb3V0IG9mIHJhbmdlOiAnICsgcmFkaXgpO1xuXG4gIHZhciBwO1xuICBpZiAoKHAgPSBzdHIuaW5kZXhPZignLScpKSA+IDApIHRocm93ICgwLCBfZXJyb3IubmV3RXJyb3IpKCdudW1iZXIgZm9ybWF0IGVycm9yOiBpbnRlcmlvciBcIi1cIiBjaGFyYWN0ZXI6ICcgKyBzdHIpO2Vsc2UgaWYgKHAgPT09IDApIHJldHVybiBJbnRlZ2VyLmZyb21TdHJpbmcoc3RyLnN1YnN0cmluZygxKSwgcmFkaXgpLm5lZ2F0ZSgpO1xuXG4gIC8vIERvIHNldmVyYWwgKDgpIGRpZ2l0cyBlYWNoIHRpbWUgdGhyb3VnaCB0aGUgbG9vcCwgc28gYXMgdG9cbiAgLy8gbWluaW1pemUgdGhlIGNhbGxzIHRvIHRoZSB2ZXJ5IGV4cGVuc2l2ZSBlbXVsYXRlZCBkaXYuXG4gIHZhciByYWRpeFRvUG93ZXIgPSBJbnRlZ2VyLmZyb21OdW1iZXIoTWF0aC5wb3cocmFkaXgsIDgpKTtcblxuICB2YXIgcmVzdWx0ID0gSW50ZWdlci5aRVJPO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkgKz0gOCkge1xuICAgIHZhciBzaXplID0gTWF0aC5taW4oOCwgc3RyLmxlbmd0aCAtIGkpO1xuICAgIHZhciB2YWx1ZSA9IHBhcnNlSW50KHN0ci5zdWJzdHJpbmcoaSwgaSArIHNpemUpLCByYWRpeCk7XG4gICAgaWYgKHNpemUgPCA4KSB7XG4gICAgICB2YXIgcG93ZXIgPSBJbnRlZ2VyLmZyb21OdW1iZXIoTWF0aC5wb3cocmFkaXgsIHNpemUpKTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5tdWx0aXBseShwb3dlcikuYWRkKEludGVnZXIuZnJvbU51bWJlcih2YWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQubXVsdGlwbHkocmFkaXhUb1Bvd2VyKTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5hZGQoSW50ZWdlci5mcm9tTnVtYmVyKHZhbHVlKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgdmFsdWUgdG8gYSBJbnRlZ2VyLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd8IXtsb3c6IG51bWJlciwgaGlnaDogbnVtYmVyfX0gdmFsIFZhbHVlXG4gKiBAcmV0dXJucyB7IUludGVnZXJ9XG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuZnJvbVZhbHVlID0gZnVuY3Rpb24gKHZhbCkge1xuICBpZiAodmFsIC8qIGlzIGNvbXBhdGlibGUgKi8gaW5zdGFuY2VvZiBJbnRlZ2VyKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHJldHVybiBJbnRlZ2VyLmZyb21OdW1iZXIodmFsKTtcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSByZXR1cm4gSW50ZWdlci5mcm9tU3RyaW5nKHZhbCk7XG4gIC8vIFRocm93cyBmb3Igbm9uLW9iamVjdHMsIGNvbnZlcnRzIG5vbi1pbnN0YW5jZW9mIEludGVnZXI6XG4gIHJldHVybiBuZXcgSW50ZWdlcih2YWwubG93LCB2YWwuaGlnaCk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgdmFsdWUgdG8gYSBudW1iZXIuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ3whe2xvdzogbnVtYmVyLCBoaWdoOiBudW1iZXJ9fSB2YWwgVmFsdWVcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIudG9OdW1iZXIgPSBmdW5jdGlvbiAodmFsKSB7XG4gIHJldHVybiBJbnRlZ2VyLmZyb21WYWx1ZSh2YWwpLnRvTnVtYmVyKCk7XG59O1xuXG4vKipcbiogQ29udmVydHMgdGhlIHNwZWNpZmllZCB2YWx1ZSB0byBhIHN0cmluZy5cbiogQGFjY2VzcyBwcml2YXRlXG4qIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ3whe2xvdzogbnVtYmVyLCBoaWdoOiBudW1iZXJ9fSB2YWwgVmFsdWVcbiogQHBhcmFtIHtudW1iZXJ9IHJhZGl4IG9wdGlvbmFsIHJhZGl4IGZvciBzdHJpbmcgY29udmVyc2lvbiwgZGVmYXVsdHMgdG8gMTBcbiogQHJldHVybnMge1N0cmluZ31cbiogQGV4cG9zZVxuKi9cbkludGVnZXIudG9TdHJpbmcgPSBmdW5jdGlvbiAodmFsLCByYWRpeCkge1xuICByZXR1cm4gSW50ZWdlci5mcm9tVmFsdWUodmFsKS50b1N0cmluZyhyYWRpeCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgaW4gdGhlIHNhZmUgcmFuZ2UgaW4gb3JkZXIgdG8gYmUgY29udmVydGVkIHRvIGEgbmF0aXZlIG51bWJlclxuICogQGFjY2VzcyBwcml2YXRlXG4gKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd8IXtsb3c6IG51bWJlciwgaGlnaDogbnVtYmVyfX0gdmFsIFZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkaXggb3B0aW9uYWwgcmFkaXggZm9yIHN0cmluZyBjb252ZXJzaW9uLCBkZWZhdWx0cyB0byAxMFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuaW5TYWZlUmFuZ2UgPSBmdW5jdGlvbiAodmFsKSB7XG4gIHJldHVybiBJbnRlZ2VyLmZyb21WYWx1ZSh2YWwpLmluU2FmZVJhbmdlKCk7XG59O1xuXG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAY29uc3RcbiAqIEBpbm5lclxuICogQHByaXZhdGVcbiAqL1xudmFyIFRXT19QV1JfMTZfREJMID0gMSA8PCAxNjtcblxuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGNvbnN0XG4gKiBAaW5uZXJcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBUV09fUFdSXzI0X0RCTCA9IDEgPDwgMjQ7XG5cbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqIEBjb25zdFxuICogQGlubmVyXG4gKiBAcHJpdmF0ZVxuICovXG52YXIgVFdPX1BXUl8zMl9EQkwgPSBUV09fUFdSXzE2X0RCTCAqIFRXT19QV1JfMTZfREJMO1xuXG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAY29uc3RcbiAqIEBpbm5lclxuICogQHByaXZhdGVcbiAqL1xudmFyIFRXT19QV1JfNjRfREJMID0gVFdPX1BXUl8zMl9EQkwgKiBUV09fUFdSXzMyX0RCTDtcblxuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGNvbnN0XG4gKiBAaW5uZXJcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBUV09fUFdSXzYzX0RCTCA9IFRXT19QV1JfNjRfREJMIC8gMjtcblxuLyoqXG4gKiBAdHlwZSB7IUludGVnZXJ9XG4gKiBAY29uc3RcbiAqIEBpbm5lclxuICogQHByaXZhdGVcbiAqL1xudmFyIFRXT19QV1JfMjQgPSBJbnRlZ2VyLmZyb21JbnQoVFdPX1BXUl8yNF9EQkwpO1xuXG4vKipcbiAqIFNpZ25lZCB6ZXJvLlxuICogQHR5cGUgeyFJbnRlZ2VyfVxuICogQGV4cG9zZVxuICovXG5JbnRlZ2VyLlpFUk8gPSBJbnRlZ2VyLmZyb21JbnQoMCk7XG5cbi8qKlxuICogU2lnbmVkIG9uZS5cbiAqIEB0eXBlIHshSW50ZWdlcn1cbiAqIEBleHBvc2VcbiAqL1xuSW50ZWdlci5PTkUgPSBJbnRlZ2VyLmZyb21JbnQoMSk7XG5cbi8qKlxuICogU2lnbmVkIG5lZ2F0aXZlIG9uZS5cbiAqIEB0eXBlIHshSW50ZWdlcn1cbiAqIEBleHBvc2VcbiAqL1xuSW50ZWdlci5ORUdfT05FID0gSW50ZWdlci5mcm9tSW50KC0xKTtcblxuLyoqXG4gKiBNYXhpbXVtIHNpZ25lZCB2YWx1ZS5cbiAqIEB0eXBlIHshSW50ZWdlcn1cbiAqIEBleHBvc2VcbiAqL1xuSW50ZWdlci5NQVhfVkFMVUUgPSBJbnRlZ2VyLmZyb21CaXRzKDB4RkZGRkZGRkYgfCAwLCAweDdGRkZGRkZGIHwgMCwgZmFsc2UpO1xuXG4vKipcbiAqIE1pbmltdW0gc2lnbmVkIHZhbHVlLlxuICogQHR5cGUgeyFJbnRlZ2VyfVxuICogQGV4cG9zZVxuICovXG5JbnRlZ2VyLk1JTl9WQUxVRSA9IEludGVnZXIuZnJvbUJpdHMoMCwgMHg4MDAwMDAwMCB8IDAsIGZhbHNlKTtcblxuLyoqXG4gKiBNaW5pbXVtIHNhZmUgdmFsdWUuXG4gKiBAdHlwZSB7IUludGVnZXJ9XG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuTUlOX1NBRkVfVkFMVUUgPSBJbnRlZ2VyLmZyb21CaXRzKDB4MSB8IDAsIDB4RkZGRkZGRkZGRkUwMDAwMCB8IDApO1xuXG4vKipcbiogTWF4aW11bSBzYWZlIHZhbHVlLlxuKiBAdHlwZSB7IUludGVnZXJ9XG4qIEBleHBvc2VcbiovXG5JbnRlZ2VyLk1BWF9TQUZFX1ZBTFVFID0gSW50ZWdlci5mcm9tQml0cygweEZGRkZGRkZGIHwgMCwgMHgxRkZGRkYgfCAwKTtcblxuLyoqXG4gKiBDYXN0IHZhbHVlIHRvIEludGVnZXIgdHlwZS5cbiAqIEBhY2Nlc3MgcHVibGljXG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB1c2UuXG4gKiBAcmV0dXJuIHtJbnRlZ2VyfSAtIEFuIG9iamVjdCBvZiB0eXBlIEludGVnZXIuXG4gKi9cbnZhciBpbnQgPSBJbnRlZ2VyLmZyb21WYWx1ZTtcblxuLyoqXG4gKiBDaGVjayBpZiBhIHZhcmlhYmxlIGlzIG9mIEludGVnZXIgdHlwZS5cbiAqIEBhY2Nlc3MgcHVibGljXG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZSAtIFRoZSB2YXJpYWJsZSB0byBjaGVjay5cbiAqIEByZXR1cm4ge0Jvb2xlYW59IC0gSXMgaXQgb2YgdGhlIEludGVnZXIgdHlwZT9cbiAqL1xudmFyIGlzSW50ID0gSW50ZWdlci5pc0ludGVnZXI7XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB2YXJpYWJsZSBjYW4gYmUgc2FmZWx5IGNvbnZlcnRlZCB0byBhIG51bWJlclxuICogQGFjY2VzcyBwdWJsaWNcbiAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlIC0gVGhlIHZhcmlhYmxlIHRvIGNoZWNrXG4gKiBAcmV0dXJuIHtCb29sZWFufSAtIHRydWUgaWYgaXQgaXMgc2FmZSB0byBjYWxsIHRvTnVtYmVyIG9uIHZhcmlhYmxlIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaW5TYWZlUmFuZ2UgPSBJbnRlZ2VyLmluU2FmZVJhbmdlO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgdmFyaWFibGUgdG8gYSBudW1iZXJcbiAqIEBhY2Nlc3MgcHVibGljXG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZSAtIFRoZSB2YXJpYWJsZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJuIHtudW1iZXJ9IC0gdGhlIHZhcmlhYmxlIGFzIGEgbnVtYmVyXG4gKi9cbnZhciB0b051bWJlciA9IEludGVnZXIudG9OdW1iZXI7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGludGVnZXIgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAqIEBhY2Nlc3MgcHVibGljXG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZSAtIFRoZSB2YXJpYWJsZSB0byBjb252ZXJ0XG4gKiBAcGFyYW0ge251bWJlcn0gcmFkaXggLSByYWRpeCB0byB1c2UgaW4gc3RyaW5nIGNvbnZlcnNpb24sIGRlZmF1bHRzIHRvIDEwXG4gKiBAcmV0dXJuIHtTdHJpbmd9IC0gcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW50ZWdlclxuICovXG52YXIgdG9TdHJpbmcgPSBJbnRlZ2VyLnRvU3RyaW5nO1xuXG5leHBvcnRzLmludCA9IGludDtcbmV4cG9ydHMuaXNJbnQgPSBpc0ludDtcbmV4cG9ydHMuaW5TYWZlUmFuZ2UgPSBpblNhZmVSYW5nZTtcbmV4cG9ydHMudG9OdW1iZXIgPSB0b051bWJlcjtcbmV4cG9ydHMudG9TdHJpbmcgPSB0b1N0cmluZztcbmV4cG9ydHMuZGVmYXVsdCA9IEludGVnZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFsbG9jID0gZXhwb3J0cy5Ob2RlQnVmZmVyID0gZXhwb3J0cy5Db21iaW5lZEJ1ZmZlciA9IGV4cG9ydHMuU2xpY2VCdWZmZXIgPSBleHBvcnRzLkhlYXBCdWZmZXIgPSBleHBvcnRzLkJhc2VCdWZmZXIgPSB1bmRlZmluZWQ7XG5cbnZhciBfZ2V0MiA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvZ2V0XCIpO1xuXG52YXIgX2dldDMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXQyKTtcblxudmFyIF9nZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2ZcIik7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0UHJvdG90eXBlT2YpO1xuXG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuXCIpO1xuXG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIpO1xuXG52YXIgX2luaGVyaXRzMiA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHNcIik7XG5cbnZhciBfaW5oZXJpdHMzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5oZXJpdHMyKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrXCIpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzc1wiKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLyoqIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjb21tb24gQVBJIGZvciBkZWFsaW5nIHdpdGggYmluYXJ5IGRhdGEgdGhhdFxuICAqIHdvcmtzIGZvciBib3RoIGJyb3dzZXJzICh2aWEgQXJyYXlCdWZmZXIvRGF0YVZpZXcpIGFuZCBmb3IgTm9kZUpTXG4gICoodmlhIEJ1ZmZlciBBUEkpLlxuICAqL1xuXG52YXIgX25vZGUgPSByZXF1aXJlKFwiYnVmZmVyXCIpO1xuLyoqXG4gICogQ29tbW9uIGJhc2Ugd2l0aCBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciBtb3N0IGJ1ZmZlciBtZXRob2RzLlxuICAqIEJ1ZmZlcnMgYXJlIHN0YXRlZnVsIC0gdGhleSB0cmFjayBhIGN1cnJlbnQgXCJwb3NpdGlvblwiLCB0aGlzIGhlbHBzIGdyZWF0bHlcbiAgKiB3aGVuIHJlYWRpbmcgYW5kIHdyaXRpbmcgZnJvbSB0aGVtIGluY3JlbWVudGFsbHkuIFlvdSBjYW4gYWxzbyBpZ25vcmUgdGhlXG4gICogc3RhdGVmdWwgcmVhZC93cml0ZSBtZXRob2RzLlxuICAqIHJlYWRYWFggYW5kIHdyaXRlWFhYLW1ldGhvZHMgbW92ZSB0aGUgaW5uZXIgcG9zaXRpb24gb2YgdGhlIGJ1ZmZlci5cbiAgKiBwdXRYWFggYW5kIGdldFhYWC1tZXRob2RzIGRvIG5vdC5cbiAgKiBAYWNjZXNzIHByaXZhdGVcbiAgKi9cblxudmFyIEJhc2VCdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBpbnN0YW5jZSB3aXRoIHRoZSBpbmplY3RlZCBzaXplLlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtJbnRlZ2VyfSBzaXplXG4gICAqL1xuICBmdW5jdGlvbiBCYXNlQnVmZmVyKHNpemUpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBCYXNlQnVmZmVyKTtcblxuICAgIHRoaXMucG9zaXRpb24gPSAwO1xuICAgIHRoaXMubGVuZ3RoID0gc2l6ZTtcbiAgICAvLyBDYWxsaW5nIHRoZXNlIG91dCAtIHRoaXMgaXMgdGhlIHJlcXVpcmVkIFxuICAgIC8vIG1ldGhvZHMgYSBzdWJjbGFzcyBuZWVkcyB0byBpbXBsZW1lbnRcbiAgICB2YXIgZ2V0VUludDggPSBudWxsO1xuICAgIHZhciBnZXRJbnQ4ID0gbnVsbDtcbiAgICB2YXIgZ2V0RmxvYXQ2NCA9IG51bGw7XG4gICAgdmFyIGdldFNsaWNlID0gbnVsbDtcbiAgICB2YXIgcHV0RmxvYXQ2NCA9IG51bGw7XG4gICAgdmFyIHB1dFVJbnQ4ID0gbnVsbDtcbiAgICB2YXIgcHV0SW50OCA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHBcbiAgICovXG5cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShCYXNlQnVmZmVyLCBbe1xuICAgIGtleTogXCJnZXRJbnQxNlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbnQxNihwKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJbnQ4KHApIDw8IDggfCB0aGlzLmdldFVJbnQ4KHAgKyAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VUludDE2XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFVJbnQxNihwKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRVSW50OChwKSA8PCA4IHwgdGhpcy5nZXRVSW50OChwICsgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHBcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImdldEludDMyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEludDMyKHApIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEludDgocCkgPDwgMjQgfCB0aGlzLmdldFVJbnQ4KHAgKyAxKSA8PCAxNiB8IHRoaXMuZ2V0VUludDgocCArIDIpIDw8IDggfCB0aGlzLmdldFVJbnQ4KHAgKyAzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VUludDMyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFVJbnQzMihwKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRVSW50OChwKSA8PCAyNCB8IHRoaXMuZ2V0VUludDgocCArIDEpIDw8IDE2IHwgdGhpcy5nZXRVSW50OChwICsgMikgPDwgOCB8IHRoaXMuZ2V0VUludDgocCArIDMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBwXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJnZXRJbnQ2NFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbnQ2NChwKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJbnQ4KHApIDw8IDU2IHwgdGhpcy5nZXRVSW50OChwICsgMSkgPDwgNDggfCB0aGlzLmdldFVJbnQ4KHAgKyAyKSA8PCA0MCB8IHRoaXMuZ2V0VUludDgocCArIDMpIDw8IDMyIHwgdGhpcy5nZXRVSW50OChwICsgNCkgPDwgMjQgfCB0aGlzLmdldFVJbnQ4KHAgKyA1KSA8PCAxNiB8IHRoaXMuZ2V0VUludDgocCArIDYpIDw8IDggfCB0aGlzLmdldFVJbnQ4KHAgKyA3KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSBzbGljZSBvZiB0aGlzIGJ1ZmZlci4gVGhpcyBtZXRob2QgZG9lcyBub3QgY29weSBhbnkgZGF0YSxcbiAgICAgKiBidXQgc2ltcGx5IHByb3ZpZGVzIGEgc2xpY2UgdmlldyBvZiB0aGlzIGJ1ZmZlclxuICAgICAqIEBwYXJhbSBzdGFydFxuICAgICAqIEBwYXJhbSBsZW5ndGhcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImdldFNsaWNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFNsaWNlKHN0YXJ0LCBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgU2xpY2VCdWZmZXIoc3RhcnQsIGxlbmd0aCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHBcbiAgICAgKiBAcGFyYW0gdmFsXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJwdXRJbnQxNlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXRJbnQxNihwLCB2YWwpIHtcbiAgICAgIHRoaXMucHV0SW50OChwLCB2YWwgPj4gOCk7XG4gICAgICB0aGlzLnB1dFVJbnQ4KHAgKyAxLCB2YWwgJiAweEZGKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcFxuICAgICAqIEBwYXJhbSB2YWxcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcInB1dFVJbnQxNlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXRVSW50MTYocCwgdmFsKSB7XG4gICAgICB0aGlzLnB1dFVJbnQ4KHAsIHZhbCA+PiA4ICYgMHhGRik7XG4gICAgICB0aGlzLnB1dFVJbnQ4KHAgKyAxLCB2YWwgJiAweEZGKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcFxuICAgICAqIEBwYXJhbSB2YWxcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcInB1dEludDMyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHB1dEludDMyKHAsIHZhbCkge1xuICAgICAgdGhpcy5wdXRJbnQ4KHAsIHZhbCA+PiAyNCk7XG4gICAgICB0aGlzLnB1dFVJbnQ4KHAgKyAxLCB2YWwgPj4gMTYgJiAweEZGKTtcbiAgICAgIHRoaXMucHV0VUludDgocCArIDIsIHZhbCA+PiA4ICYgMHhGRik7XG4gICAgICB0aGlzLnB1dFVJbnQ4KHAgKyAzLCB2YWwgJiAweEZGKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcFxuICAgICAqIEBwYXJhbSB2YWxcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcInB1dFVJbnQzMlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXRVSW50MzIocCwgdmFsKSB7XG4gICAgICB0aGlzLnB1dFVJbnQ4KHAsIHZhbCA+PiAyNCAmIDB4RkYpO1xuICAgICAgdGhpcy5wdXRVSW50OChwICsgMSwgdmFsID4+IDE2ICYgMHhGRik7XG4gICAgICB0aGlzLnB1dFVJbnQ4KHAgKyAyLCB2YWwgPj4gOCAmIDB4RkYpO1xuICAgICAgdGhpcy5wdXRVSW50OChwICsgMywgdmFsICYgMHhGRik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHBcbiAgICAgKiBAcGFyYW0gdmFsXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJwdXRJbnQ2NFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXRJbnQ2NChwLCB2YWwpIHtcbiAgICAgIHRoaXMucHV0SW50OChwLCB2YWwgPj4gNDgpO1xuICAgICAgdGhpcy5wdXRVSW50OChwICsgMSwgdmFsID4+IDQyICYgMHhGRik7XG4gICAgICB0aGlzLnB1dFVJbnQ4KHAgKyAyLCB2YWwgPj4gMzYgJiAweEZGKTtcbiAgICAgIHRoaXMucHV0VUludDgocCArIDMsIHZhbCA+PiAzMCAmIDB4RkYpO1xuICAgICAgdGhpcy5wdXRVSW50OChwICsgNCwgdmFsID4+IDI0ICYgMHhGRik7XG4gICAgICB0aGlzLnB1dFVJbnQ4KHAgKyA1LCB2YWwgPj4gMTYgJiAweEZGKTtcbiAgICAgIHRoaXMucHV0VUludDgocCArIDYsIHZhbCA+PiA4ICYgMHhGRik7XG4gICAgICB0aGlzLnB1dFVJbnQ4KHAgKyA3LCB2YWwgJiAweEZGKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcG9zaXRpb25cbiAgICAgKiBAcGFyYW0gb3RoZXJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcInB1dEJ5dGVzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHB1dEJ5dGVzKHBvc2l0aW9uLCBvdGhlcikge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGVuZCA9IG90aGVyLnJlbWFpbmluZygpOyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgdGhpcy5wdXRVSW50OChwb3NpdGlvbiArIGksIG90aGVyLnJlYWRVSW50OCgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGZyb20gc3RhdGUgcG9zaXRpb24uXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJyZWFkVUludDhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVhZFVJbnQ4KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VUludDgodGhpcy5fdXBkYXRlUG9zKDEpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGZyb20gc3RhdGUgcG9zaXRpb24uXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJyZWFkSW50OFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWFkSW50OCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEludDgodGhpcy5fdXBkYXRlUG9zKDEpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGZyb20gc3RhdGUgcG9zaXRpb24uXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJyZWFkVUludDE2XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlYWRVSW50MTYoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRVSW50MTYodGhpcy5fdXBkYXRlUG9zKDIpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGZyb20gc3RhdGUgcG9zaXRpb24uXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJyZWFkVUludDMyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlYWRVSW50MzIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRVSW50MzIodGhpcy5fdXBkYXRlUG9zKDQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGZyb20gc3RhdGUgcG9zaXRpb24uXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJyZWFkSW50MTZcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVhZEludDE2KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SW50MTYodGhpcy5fdXBkYXRlUG9zKDIpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGZyb20gc3RhdGUgcG9zaXRpb24uXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJyZWFkSW50MzJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVhZEludDMyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SW50MzIodGhpcy5fdXBkYXRlUG9zKDQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGZyb20gc3RhdGUgcG9zaXRpb24uXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJyZWFkSW50NjRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVhZEludDY0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SW50MzIodGhpcy5fdXBkYXRlUG9zKDgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGZyb20gc3RhdGUgcG9zaXRpb24uXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJyZWFkRmxvYXQ2NFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWFkRmxvYXQ2NCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZsb2F0NjQodGhpcy5fdXBkYXRlUG9zKDgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcml0ZSB0byBzdGF0ZSBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0gdmFsXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJ3cml0ZVVJbnQ4XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHdyaXRlVUludDgodmFsKSB7XG4gICAgICB0aGlzLnB1dFVJbnQ4KHRoaXMuX3VwZGF0ZVBvcygxKSwgdmFsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcml0ZSB0byBzdGF0ZSBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0gdmFsXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJ3cml0ZUludDhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gd3JpdGVJbnQ4KHZhbCkge1xuICAgICAgdGhpcy5wdXRJbnQ4KHRoaXMuX3VwZGF0ZVBvcygxKSwgdmFsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcml0ZSB0byBzdGF0ZSBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0gdmFsXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJ3cml0ZUludDE2XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHdyaXRlSW50MTYodmFsKSB7XG4gICAgICB0aGlzLnB1dEludDE2KHRoaXMuX3VwZGF0ZVBvcygyKSwgdmFsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcml0ZSB0byBzdGF0ZSBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0gdmFsXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJ3cml0ZUludDMyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHdyaXRlSW50MzIodmFsKSB7XG4gICAgICB0aGlzLnB1dEludDMyKHRoaXMuX3VwZGF0ZVBvcyg0KSwgdmFsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcml0ZSB0byBzdGF0ZSBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0gdmFsXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJ3cml0ZVVJbnQzMlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3cml0ZVVJbnQzMih2YWwpIHtcbiAgICAgIHRoaXMucHV0VUludDMyKHRoaXMuX3VwZGF0ZVBvcyg0KSwgdmFsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcml0ZSB0byBzdGF0ZSBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0gdmFsXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJ3cml0ZUludDY0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHdyaXRlSW50NjQodmFsKSB7XG4gICAgICB0aGlzLnB1dEludDY0KHRoaXMuX3VwZGF0ZVBvcyg4KSwgdmFsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcml0ZSB0byBzdGF0ZSBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0gdmFsXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJ3cml0ZUZsb2F0NjRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gd3JpdGVGbG9hdDY0KHZhbCkge1xuICAgICAgdGhpcy5wdXRGbG9hdDY0KHRoaXMuX3VwZGF0ZVBvcyg4KSwgdmFsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcml0ZSB0byBzdGF0ZSBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0gdmFsXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJ3cml0ZUJ5dGVzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHdyaXRlQnl0ZXModmFsKSB7XG4gICAgICB0aGlzLnB1dEJ5dGVzKHRoaXMuX3VwZGF0ZVBvcyh2YWwucmVtYWluaW5nKCkpLCB2YWwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIHNsaWNlIG9mIHRoaXMgYnVmZmVyLiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBjb3B5IGFueSBkYXRhLFxuICAgICAqIGJ1dCBzaW1wbHkgcHJvdmlkZXMgYSBzbGljZSB2aWV3IG9mIHRoaXMgYnVmZmVyXG4gICAgICogQHBhcmFtIGxlbmd0aFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwicmVhZFNsaWNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlYWRTbGljZShsZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNsaWNlKHRoaXMuX3VwZGF0ZVBvcyhsZW5ndGgpLCBsZW5ndGgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfdXBkYXRlUG9zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF91cGRhdGVQb3MobGVuZ3RoKSB7XG4gICAgICB2YXIgcCA9IHRoaXMucG9zaXRpb247XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IGxlbmd0aDtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCByZW1hbmluZ1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwicmVtYWluaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbWFpbmluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmxlbmd0aCAtIHRoaXMucG9zaXRpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFzIHJlbWFuaW5nXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJoYXNSZW1haW5pbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzUmVtYWluaW5nKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVtYWluaW5nKCkgPiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0IHBvc2l0aW9uIHN0YXRlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJyZXNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgIHRoaXMucG9zaXRpb24gPSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYnVmZmVyIGFuZCBpdCdzIHN0YXRlLlxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gQnVmZmVyIGFzIGEgc3RyaW5nXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJ0b1N0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyBcIiggcG9zaXRpb249XCIgKyB0aGlzLnBvc2l0aW9uICsgXCIgKVxcbiAgXCIgKyB0aGlzLnRvSGV4KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBidWZmZXIuXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBCdWZmZXIgYXMgYSBzdHJpbmdcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcInRvSGV4XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvSGV4KCkge1xuICAgICAgLy8gVE9ETyBzb21ldGhpbmcgbGlrZSBTdHJpbmdCdWlsZGVyP1xuICAgICAgdmFyIG91dCA9IFwiXCI7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGhleEJ5dGUgPSB0aGlzLmdldFVJbnQ4KGkpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaWYgKGhleEJ5dGUubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICBoZXhCeXRlID0gXCIwXCIgKyBoZXhCeXRlO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSBoZXhCeXRlICsgXCIgXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gQmFzZUJ1ZmZlcjtcbn0oKTtcblxuLyoqXG4gKiBCYXNpYyBidWZmZXIgaW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgd29yayBpbiBtb3N0IGFueSBtb2Rlcm4gSlMgZW52LlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cblxuXG52YXIgSGVhcEJ1ZmZlciA9IGZ1bmN0aW9uIChfQmFzZUJ1ZmZlcikge1xuICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShIZWFwQnVmZmVyLCBfQmFzZUJ1ZmZlcik7XG5cbiAgZnVuY3Rpb24gSGVhcEJ1ZmZlcihhcmcpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBIZWFwQnVmZmVyKTtcblxuICAgIHZhciBidWZmZXIgPSBhcmcgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IGFyZyA6IG5ldyBBcnJheUJ1ZmZlcihhcmcpO1xuXG4gICAgdmFyIF90aGlzID0gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoSGVhcEJ1ZmZlci5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoSGVhcEJ1ZmZlcikpLmNhbGwodGhpcywgYnVmZmVyLmJ5dGVMZW5ndGgpKTtcblxuICAgIF90aGlzLl9idWZmZXIgPSBidWZmZXI7XG4gICAgX3RoaXMuX3ZpZXcgPSBuZXcgRGF0YVZpZXcoX3RoaXMuX2J1ZmZlcik7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoSGVhcEJ1ZmZlciwgW3tcbiAgICBrZXk6IFwicHV0VUludDhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHV0VUludDgocG9zaXRpb24sIHZhbCkge1xuICAgICAgdGhpcy5fdmlldy5zZXRVaW50OChwb3NpdGlvbiwgdmFsKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VUludDhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VUludDgocG9zaXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLl92aWV3LmdldFVpbnQ4KHBvc2l0aW9uKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicHV0SW50OFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXRJbnQ4KHBvc2l0aW9uLCB2YWwpIHtcbiAgICAgIHRoaXMuX3ZpZXcuc2V0SW50OChwb3NpdGlvbiwgdmFsKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0SW50OFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbnQ4KHBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdmlldy5nZXRJbnQ4KHBvc2l0aW9uKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0RmxvYXQ2NFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGbG9hdDY0KHBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdmlldy5nZXRGbG9hdDY0KHBvc2l0aW9uKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicHV0RmxvYXQ2NFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXRGbG9hdDY0KHBvc2l0aW9uLCB2YWwpIHtcbiAgICAgIHRoaXMuX3ZpZXcuc2V0RmxvYXQ2NChwb3NpdGlvbiwgdmFsKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0U2xpY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U2xpY2Uoc3RhcnQsIGxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuX2J1ZmZlci5zbGljZSkge1xuICAgICAgICByZXR1cm4gbmV3IEhlYXBCdWZmZXIodGhpcy5fYnVmZmVyLnNsaWNlKHN0YXJ0LCBzdGFydCArIGxlbmd0aCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU29tZSBwbGF0Zm9ybXMgKGVnLiBwaGFudG9tanMpIGRvbid0IHN1cHBvcnQgc2xpY2UsIHNvIGZhbGwgYmFjayB0byBhIGNvcHlcbiAgICAgICAgLy8gV2UgZG8gdGhpcyByYXRoZXIgdGhhbiByZXR1cm4gYSBTbGljZUJ1ZmZlciwgYmVjYXVzZSBzbGljZUJ1ZmZlciBjYW5ub3RcbiAgICAgICAgLy8gYmUgcGFzc2VkIHRvIG5hdGl2ZSBuZXR3b3JrIHdyaXRlIG9wcyBldGMgLSB3ZSBuZWVkIEFycmF5QnVmZmVyIGZvciB0aGF0XG4gICAgICAgIHZhciBjb3B5ID0gbmV3IEhlYXBCdWZmZXIobGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvcHkucHV0VUludDgoaSwgdGhpcy5nZXRVSW50OChpICsgc3RhcnQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29weTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogXG4gICAgICogU3BlY2lmaWMgdG8gSGVhcEJ1ZmZlciwgdGhpcyBnZXRzIGEgRGF0YVZpZXcgZnJvbSB0aGVcbiAgICAgKiBjdXJyZW50IHBvc2l0aW9uIGFuZCBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aC4gXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJyZWFkVmlld1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWFkVmlldyhsZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0YVZpZXcodGhpcy5fYnVmZmVyLCB0aGlzLl91cGRhdGVQb3MobGVuZ3RoKSwgbGVuZ3RoKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIEhlYXBCdWZmZXI7XG59KEJhc2VCdWZmZXIpO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB2aWV3IGFzIHNsaWNlIG9mIGFub3RoZXIgYnVmZmVyLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cblxuXG52YXIgU2xpY2VCdWZmZXIgPSBmdW5jdGlvbiAoX0Jhc2VCdWZmZXIyKSB7XG4gICgwLCBfaW5oZXJpdHMzLmRlZmF1bHQpKFNsaWNlQnVmZmVyLCBfQmFzZUJ1ZmZlcjIpO1xuXG4gIGZ1bmN0aW9uIFNsaWNlQnVmZmVyKHN0YXJ0LCBsZW5ndGgsIGlubmVyKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgU2xpY2VCdWZmZXIpO1xuXG4gICAgdmFyIF90aGlzMiA9ICgwLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMuZGVmYXVsdCkodGhpcywgKFNsaWNlQnVmZmVyLl9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShTbGljZUJ1ZmZlcikpLmNhbGwodGhpcywgbGVuZ3RoKSk7XG5cbiAgICBfdGhpczIuX3N0YXJ0ID0gc3RhcnQ7XG4gICAgX3RoaXMyLl9pbm5lciA9IGlubmVyO1xuICAgIHJldHVybiBfdGhpczI7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShTbGljZUJ1ZmZlciwgW3tcbiAgICBrZXk6IFwicHV0VUludDhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHV0VUludDgocG9zaXRpb24sIHZhbCkge1xuICAgICAgdGhpcy5faW5uZXIucHV0VUludDgodGhpcy5fc3RhcnQgKyBwb3NpdGlvbiwgdmFsKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VUludDhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VUludDgocG9zaXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbm5lci5nZXRVSW50OCh0aGlzLl9zdGFydCArIHBvc2l0aW9uKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicHV0SW50OFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXRJbnQ4KHBvc2l0aW9uLCB2YWwpIHtcbiAgICAgIHRoaXMuX2lubmVyLnB1dEludDgodGhpcy5fc3RhcnQgKyBwb3NpdGlvbiwgdmFsKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicHV0RmxvYXQ2NFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXRGbG9hdDY0KHBvc2l0aW9uLCB2YWwpIHtcbiAgICAgIHRoaXMuX2lubmVyLnB1dEZsb2F0NjQodGhpcy5fc3RhcnQgKyBwb3NpdGlvbiwgdmFsKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0SW50OFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbnQ4KHBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5uZXIuZ2V0SW50OCh0aGlzLl9zdGFydCArIHBvc2l0aW9uKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0RmxvYXQ2NFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGbG9hdDY0KHBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5uZXIuZ2V0RmxvYXQ2NCh0aGlzLl9zdGFydCArIHBvc2l0aW9uKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFNsaWNlQnVmZmVyO1xufShCYXNlQnVmZmVyKTtcblxuLyoqXG4gKiBCdWZmZXIgdGhhdCBjb21iaW5lcyBtdWx0aXBsZSBidWZmZXJzLCBleHBvc2luZyB0aGVtIGFzIG9uZSBzaW5nbGUgYnVmZmVyLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cblxuXG52YXIgQ29tYmluZWRCdWZmZXIgPSBmdW5jdGlvbiAoX0Jhc2VCdWZmZXIzKSB7XG4gICgwLCBfaW5oZXJpdHMzLmRlZmF1bHQpKENvbWJpbmVkQnVmZmVyLCBfQmFzZUJ1ZmZlcjMpO1xuXG4gIGZ1bmN0aW9uIENvbWJpbmVkQnVmZmVyKGJ1ZmZlcnMpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBDb21iaW5lZEJ1ZmZlcik7XG5cbiAgICB2YXIgbGVuZ3RoID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxlbmd0aCArPSBidWZmZXJzW2ldLmxlbmd0aDtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXMzID0gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoQ29tYmluZWRCdWZmZXIuX19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKENvbWJpbmVkQnVmZmVyKSkuY2FsbCh0aGlzLCBsZW5ndGgpKTtcblxuICAgIF90aGlzMy5fYnVmZmVycyA9IGJ1ZmZlcnM7XG4gICAgcmV0dXJuIF90aGlzMztcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKENvbWJpbmVkQnVmZmVyLCBbe1xuICAgIGtleTogXCJnZXRVSW50OFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRVSW50OChwb3NpdGlvbikge1xuICAgICAgLy8gU3VyZWx5IHRoZXJlJ3MgYSBmYXN0ZXIgd2F5IHRvIGRvIHRoaXMuLiBzb21lIHNvcnQgb2YgbG9va3VwIHRhYmxlIHRoaW5nP1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBidWZmZXIgPSB0aGlzLl9idWZmZXJzW2ldO1xuICAgICAgICAvLyBJZiB0aGUgcG9zaXRpb24gaXMgbm90IGluIHRoZSBjdXJyZW50IGJ1ZmZlciwgc2tpcCB0aGUgY3VycmVudCBidWZmZXJcbiAgICAgICAgaWYgKHBvc2l0aW9uID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICBwb3NpdGlvbiAtPSBidWZmZXIubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBidWZmZXIuZ2V0VUludDgocG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEludDhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0SW50OChwb3NpdGlvbikge1xuICAgICAgLy8gU3VyZWx5IHRoZXJlJ3MgYSBmYXN0ZXIgd2F5IHRvIGRvIHRoaXMuLiBzb21lIHNvcnQgb2YgbG9va3VwIHRhYmxlIHRoaW5nP1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBidWZmZXIgPSB0aGlzLl9idWZmZXJzW2ldO1xuICAgICAgICAvLyBJZiB0aGUgcG9zaXRpb24gaXMgbm90IGluIHRoZSBjdXJyZW50IGJ1ZmZlciwgc2tpcCB0aGUgY3VycmVudCBidWZmZXJcbiAgICAgICAgaWYgKHBvc2l0aW9uID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICBwb3NpdGlvbiAtPSBidWZmZXIubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBidWZmZXIuZ2V0SW50OChwb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0RmxvYXQ2NFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGbG9hdDY0KHBvc2l0aW9uKSB7XG4gICAgICAvLyBBdCBzb21lIHBvaW50LCBhIG1vcmUgZWZmaWNpZW50IGltcGwuIEZvciBub3csIHdlIGNvcHkgdGhlIDggYnl0ZXNcbiAgICAgIC8vIHdlIHdhbnQgdG8gcmVhZCBhbmQgZGVwZW5kIG9uIHRoZSBwbGF0Zm9ybSBpbXBsIG9mIElFRUUgNzU0LlxuICAgICAgdmFyIGIgPSBhbGxvYyg4KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgICAgIGIucHV0VUludDgoaSwgdGhpcy5nZXRVSW50OChwb3NpdGlvbiArIGkpKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gYi5nZXRGbG9hdDY0KDApO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gQ29tYmluZWRCdWZmZXI7XG59KEJhc2VCdWZmZXIpO1xuXG4vKipcbiAqIEJ1ZmZlciB1c2VkIGluIGEgTm9kZS5qcyBlbnZpcm9ubWVudFxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cblxuXG52YXIgTm9kZUJ1ZmZlciA9IGZ1bmN0aW9uIChfQmFzZUJ1ZmZlcjQpIHtcbiAgKDAsIF9pbmhlcml0czMuZGVmYXVsdCkoTm9kZUJ1ZmZlciwgX0Jhc2VCdWZmZXI0KTtcblxuICBmdW5jdGlvbiBOb2RlQnVmZmVyKGFyZykge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIE5vZGVCdWZmZXIpO1xuXG4gICAgdmFyIGJ1ZmZlciA9IGFyZyBpbnN0YW5jZW9mIF9ub2RlLkJ1ZmZlciA/IGFyZyA6IG5ldyBfbm9kZS5CdWZmZXIoYXJnKTtcblxuICAgIHZhciBfdGhpczQgPSAoMCwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zLmRlZmF1bHQpKHRoaXMsIChOb2RlQnVmZmVyLl9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShOb2RlQnVmZmVyKSkuY2FsbCh0aGlzLCBidWZmZXIubGVuZ3RoKSk7XG5cbiAgICBfdGhpczQuX2J1ZmZlciA9IGJ1ZmZlcjtcbiAgICByZXR1cm4gX3RoaXM0O1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoTm9kZUJ1ZmZlciwgW3tcbiAgICBrZXk6IFwiZ2V0VUludDhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VUludDgocG9zaXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLl9idWZmZXIucmVhZFVJbnQ4KHBvc2l0aW9uKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0SW50OFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbnQ4KHBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLnJlYWRJbnQ4KHBvc2l0aW9uKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0RmxvYXQ2NFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGbG9hdDY0KHBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLnJlYWREb3VibGVCRShwb3NpdGlvbik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInB1dFVJbnQ4XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHB1dFVJbnQ4KHBvc2l0aW9uLCB2YWwpIHtcbiAgICAgIHRoaXMuX2J1ZmZlci53cml0ZVVJbnQ4KHZhbCwgcG9zaXRpb24pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwdXRJbnQ4XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHB1dEludDgocG9zaXRpb24sIHZhbCkge1xuICAgICAgdGhpcy5fYnVmZmVyLndyaXRlSW50OCh2YWwsIHBvc2l0aW9uKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicHV0RmxvYXQ2NFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXRGbG9hdDY0KHBvc2l0aW9uLCB2YWwpIHtcbiAgICAgIHRoaXMuX2J1ZmZlci53cml0ZURvdWJsZUJFKHZhbCwgcG9zaXRpb24pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwdXRCeXRlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXRCeXRlcyhwb3NpdGlvbiwgdmFsKSB7XG4gICAgICBpZiAodmFsIGluc3RhbmNlb2YgTm9kZUJ1ZmZlcikge1xuICAgICAgICB2YXIgYnl0ZXNUb0NvcHkgPSBNYXRoLm1pbih2YWwubGVuZ3RoIC0gdmFsLnBvc2l0aW9uLCB0aGlzLmxlbmd0aCAtIHBvc2l0aW9uKTtcbiAgICAgICAgdmFsLl9idWZmZXIuY29weSh0aGlzLl9idWZmZXIsIHBvc2l0aW9uLCB2YWwucG9zaXRpb24sIHZhbC5wb3NpdGlvbiArIGJ5dGVzVG9Db3B5KTtcbiAgICAgICAgdmFsLnBvc2l0aW9uICs9IGJ5dGVzVG9Db3B5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF9nZXQzLmRlZmF1bHQpKE5vZGVCdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShOb2RlQnVmZmVyLnByb3RvdHlwZSksIFwicHV0Qnl0ZXNcIiwgdGhpcykuY2FsbCh0aGlzLCBwb3NpdGlvbiwgdmFsKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0U2xpY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U2xpY2Uoc3RhcnQsIGxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ldyBOb2RlQnVmZmVyKHRoaXMuX2J1ZmZlci5zbGljZShzdGFydCwgc3RhcnQgKyBsZW5ndGgpKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIE5vZGVCdWZmZXI7XG59KEJhc2VCdWZmZXIpO1xuXG4vLyBVc2UgSGVhcEJ1ZmZlciBieSBkZWZhdWx0LCB1bmxlc3MgQnVmZmVyIEFQSSBpcyBhdmFpbGFibGUsIHNlZSBiZWxvd1xuXG5cbnZhciBfRGVmYXVsdEJ1ZmZlciA9IEhlYXBCdWZmZXI7XG50cnkge1xuICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHdlJ3JlIG5vdCBydW5uaW5nIG9uIE5vZGVKUyBvciBlcXVpdmFsZW50XG4gIHJlcXVpcmUucmVzb2x2ZShcImJ1ZmZlclwiKTtcbiAgX0RlZmF1bHRCdWZmZXIgPSBOb2RlQnVmZmVyO1xufSBjYXRjaCAoZSkge31cblxuLyoqXG4gKiBBbGxvY2F0ZSBhIG5ldyBidWZmZXIgdXNpbmcgd2hhdGV2ZXIgbWVjaGFuaXNtIGlzIG1vc3Qgc2Vuc2libGUgZm9yIHRoZVxuICogY3VycmVudCBwbGF0Zm9ybVxuICogQGFjY2VzcyBwcml2YXRlXG4gKiBAcGFyYW0ge0ludGVnZXJ9IHNpemVcbiAqIEByZXR1cm4gbmV3IGJ1ZmZlclxuICovXG5mdW5jdGlvbiBhbGxvYyhzaXplKSB7XG4gIHJldHVybiBuZXcgX0RlZmF1bHRCdWZmZXIoc2l6ZSk7XG59XG5cbmV4cG9ydHMuQmFzZUJ1ZmZlciA9IEJhc2VCdWZmZXI7XG5leHBvcnRzLkhlYXBCdWZmZXIgPSBIZWFwQnVmZmVyO1xuZXhwb3J0cy5TbGljZUJ1ZmZlciA9IFNsaWNlQnVmZmVyO1xuZXhwb3J0cy5Db21iaW5lZEJ1ZmZlciA9IENvbWJpbmVkQnVmZmVyO1xuZXhwb3J0cy5Ob2RlQnVmZmVyID0gTm9kZUJ1ZmZlcjtcbmV4cG9ydHMuYWxsb2MgPSBhbGxvYzsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2syID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJyk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MnKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX2ZlYXR1cmVzID0gcmVxdWlyZSgnLi9mZWF0dXJlcycpO1xuXG52YXIgX2ZlYXR1cmVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ZlYXR1cmVzKTtcblxudmFyIF9lcnJvciA9IHJlcXVpcmUoJy4uL2Vycm9yJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG52YXIgQ2hhbm5lbENvbmZpZyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ2hhbm5lbENvbmZpZyhob3N0LCBwb3J0LCBkcml2ZXJDb25maWcsIGNvbm5lY3Rpb25FcnJvckNvZGUpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBDaGFubmVsQ29uZmlnKTtcblxuICAgIHRoaXMuaG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5wb3J0ID0gcG9ydDtcbiAgICB0aGlzLmVuY3J5cHRlZCA9IENoYW5uZWxDb25maWcuX2V4dHJhY3RFbmNyeXB0ZWQoZHJpdmVyQ29uZmlnKTtcbiAgICB0aGlzLnRydXN0ID0gQ2hhbm5lbENvbmZpZy5fZXh0cmFjdFRydXN0KGRyaXZlckNvbmZpZyk7XG4gICAgdGhpcy50cnVzdGVkQ2VydGlmaWNhdGVzID0gQ2hhbm5lbENvbmZpZy5fZXh0cmFjdFRydXN0ZWRDZXJ0aWZpY2F0ZXMoZHJpdmVyQ29uZmlnKTtcbiAgICB0aGlzLmtub3duSG9zdHNQYXRoID0gQ2hhbm5lbENvbmZpZy5fZXh0cmFjdEtub3duSG9zdHNQYXRoKGRyaXZlckNvbmZpZyk7XG4gICAgdGhpcy5jb25uZWN0aW9uRXJyb3JDb2RlID0gY29ubmVjdGlvbkVycm9yQ29kZSB8fCBfZXJyb3IuU0VSVklDRV9VTkFWQUlMQUJMRTtcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKENoYW5uZWxDb25maWcsIG51bGwsIFt7XG4gICAga2V5OiAnX2V4dHJhY3RFbmNyeXB0ZWQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZXh0cmFjdEVuY3J5cHRlZChkcml2ZXJDb25maWcpIHtcbiAgICAgIC8vIGNoZWNrIGlmIGVuY3J5cHRpb24gd2FzIGNvbmZpZ3VyZWQgYnkgdGhlIHVzZXIsIHVzZSBleHBsaWNpdCBudWxsIGNoZWNrIGJlY2F1c2Ugd2UgcGVybWl0IGJvb2xlYW4gdmFsdWVcbiAgICAgIHZhciBlbmNyeXB0aW9uQ29uZmlndXJlZCA9IGRyaXZlckNvbmZpZy5lbmNyeXB0ZWQgPT0gbnVsbDtcbiAgICAgIC8vIGRlZmF1bHQgdG8gdXNpbmcgZW5jcnlwdGlvbiBpZiB0cnVzdC1hbGwtY2VydGlmaWNhdGVzIGlzIGF2YWlsYWJsZVxuICAgICAgcmV0dXJuIGVuY3J5cHRpb25Db25maWd1cmVkID8gKDAsIF9mZWF0dXJlczIuZGVmYXVsdCkoJ3RydXN0X2FsbF9jZXJ0aWZpY2F0ZXMnKSA6IGRyaXZlckNvbmZpZy5lbmNyeXB0ZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2V4dHJhY3RUcnVzdCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9leHRyYWN0VHJ1c3QoZHJpdmVyQ29uZmlnKSB7XG4gICAgICBpZiAoZHJpdmVyQ29uZmlnLnRydXN0KSB7XG4gICAgICAgIHJldHVybiBkcml2ZXJDb25maWcudHJ1c3Q7XG4gICAgICB9XG4gICAgICAvLyBkZWZhdWx0IHRvIHVzaW5nIFRSVVNUX0FMTF9DRVJUSUZJQ0FURVMgaWYgaXQgaXMgYXZhaWxhYmxlXG4gICAgICByZXR1cm4gKDAsIF9mZWF0dXJlczIuZGVmYXVsdCkoJ3RydXN0X2FsbF9jZXJ0aWZpY2F0ZXMnKSA/ICdUUlVTVF9BTExfQ0VSVElGSUNBVEVTJyA6ICdUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFUyc7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2V4dHJhY3RUcnVzdGVkQ2VydGlmaWNhdGVzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2V4dHJhY3RUcnVzdGVkQ2VydGlmaWNhdGVzKGRyaXZlckNvbmZpZykge1xuICAgICAgcmV0dXJuIGRyaXZlckNvbmZpZy50cnVzdGVkQ2VydGlmaWNhdGVzIHx8IFtdO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19leHRyYWN0S25vd25Ib3N0c1BhdGgnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZXh0cmFjdEtub3duSG9zdHNQYXRoKGRyaXZlckNvbmZpZykge1xuICAgICAgcmV0dXJuIGRyaXZlckNvbmZpZy5rbm93bkhvc3RzIHx8IG51bGw7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBDaGFubmVsQ29uZmlnO1xufSgpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBDaGFubmVsQ29uZmlnO1xuOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5vYnNlcnZlciA9IGV4cG9ydHMuY2hhbm5lbCA9IHVuZGVmaW5lZDtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrXCIpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzc1wiKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX2J1ZiA9IHJlcXVpcmUoXCIuL2J1ZlwiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIG9ic2VydmVyID0ge1xuICBpbnN0YW5jZTogbnVsbCxcbiAgdXBkYXRlSW5zdGFuY2U6IGZ1bmN0aW9uIHVwZGF0ZUluc3RhbmNlKGluc3RhbmNlKSB7XG4gICAgb2JzZXJ2ZXIuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgfVxufTsgLyoqXG4gICAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gICAgKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gICAgKlxuICAgICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gICAgKlxuICAgICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAgICpcbiAgICAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAgICAqXG4gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAgICovXG5cbnZhciBEdW1teUNoYW5uZWwgPSBmdW5jdGlvbiAoKSB7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0NoYW5uZWxDb25maWd9IGNvbmZpZyAtIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBuZXcgY2hhbm5lbC5cbiAgICovXG4gIGZ1bmN0aW9uIER1bW15Q2hhbm5lbChjb25maWcpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBEdW1teUNoYW5uZWwpO1xuXG4gICAgdGhpcy53cml0dGVuID0gW107XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShEdW1teUNoYW5uZWwsIFt7XG4gICAga2V5OiBcImlzRW5jcnlwdGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzRW5jcnlwdGVkKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ3cml0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3cml0ZShidWYpIHtcbiAgICAgIHRoaXMud3JpdHRlbi5wdXNoKGJ1Zik7XG4gICAgICBvYnNlcnZlci51cGRhdGVJbnN0YW5jZSh0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9IZXhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9IZXgoKSB7XG4gICAgICB2YXIgb3V0ID0gXCJcIjtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy53cml0dGVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG91dCArPSB0aGlzLndyaXR0ZW5baV0udG9IZXgoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvQnVmZmVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvQnVmZmVyKCkge1xuICAgICAgcmV0dXJuIG5ldyBfYnVmLkNvbWJpbmVkQnVmZmVyKHRoaXMud3JpdHRlbik7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBEdW1teUNoYW5uZWw7XG59KCk7XG5cbnZhciBjaGFubmVsID0gRHVtbXlDaGFubmVsO1xuXG5leHBvcnRzLmNoYW5uZWwgPSBjaGFubmVsO1xuZXhwb3J0cy5vYnNlcnZlciA9IG9ic2VydmVyOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2snKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc0NhbGxDaGVjazIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcycpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbnZhciBfbmV0ID0gcmVxdWlyZSgnbmV0Jyk7XG5cbnZhciBfbmV0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX25ldCk7XG5cbnZhciBfdGxzID0gcmVxdWlyZSgndGxzJyk7XG5cbnZhciBfdGxzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Rscyk7XG5cbnZhciBfZnMgPSByZXF1aXJlKCdmcycpO1xuXG52YXIgX2ZzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ZzKTtcblxudmFyIF9wYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG52YXIgX3BhdGgyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcGF0aCk7XG5cbnZhciBfb3MgPSByZXF1aXJlKCdvcycpO1xuXG52YXIgX2J1ZiA9IHJlcXVpcmUoJy4vYnVmJyk7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG52YXIgX2Vycm9yID0gcmVxdWlyZSgnLi8uLi9lcnJvcicpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBfQ09OTkVDVElPTl9JREdFTiA9IDA7XG5cbmZ1bmN0aW9uIHVzZXJIb21lKCkge1xuICAvLyBGb3Igc29tZSByZWFzb24sIEJyb3dzZXJpZnkgY2hva2VzIG9uIHNoaW1taW5nIGBwcm9jZXNzYC4gVGhpcyBjb2RlXG4gIC8vIHdpbGwgbmV2ZXIgZ2V0IGV4ZWN1dGVkIG9uIHRoZSBicm93c2VyIGFueXdheSwgdG8ganVzdCBoYWNrIGFyb3VuZCBpdFxuICB2YXIgZ2V0T3V0T2ZIZXJlQnJvd3NlcmlmeVlvdXJlRHJ1bmsgPSByZXF1aXJlO1xuICB2YXIgcHJvY2VzcyA9IGdldE91dE9mSGVyZUJyb3dzZXJpZnlZb3VyZURydW5rKCdwcm9jZXNzJyk7XG5cbiAgcmV0dXJuIHByb2Nlc3MuZW52W3Byb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJyA/ICdVU0VSUFJPRklMRScgOiAnSE9NRSddO1xufVxuXG5mdW5jdGlvbiBta0Z1bGxQYXRoKHBhdGhUb0NyZWF0ZSkge1xuICB0cnkge1xuICAgIF9mczIuZGVmYXVsdC5ta2RpclN5bmMocGF0aFRvQ3JlYXRlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAvLyBDcmVhdGUgcGFyZW50IGRpclxuICAgICAgbWtGdWxsUGF0aChfcGF0aDIuZGVmYXVsdC5kaXJuYW1lKHBhdGhUb0NyZWF0ZSkpO1xuICAgICAgLy8gQW5kIG5vdyB0cnkgYWdhaW5cbiAgICAgIG1rRnVsbFBhdGgocGF0aFRvQ3JlYXRlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGUuY29kZSA9PT0gJ0VFWElTVCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsb2FkRmluZ2VycHJpbnQoc2VydmVySWQsIGtub3duSG9zdHNQYXRoLCBjYikge1xuICB0cnkge1xuICAgIF9mczIuZGVmYXVsdC5hY2Nlc3NTeW5jKGtub3duSG9zdHNQYXRoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBjYihudWxsKTtcbiAgfVxuICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgcmVxdWlyZSgncmVhZGxpbmUnKS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBfZnMyLmRlZmF1bHQuY3JlYXRlUmVhZFN0cmVhbShrbm93bkhvc3RzUGF0aClcbiAgfSkub24oJ2xpbmUnLCBmdW5jdGlvbiAobGluZSkge1xuICAgIGlmICghZm91bmQgJiYgbGluZS5zdGFydHNXaXRoKHNlcnZlcklkKSkge1xuICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgY2IobGluZS5zcGxpdChcIiBcIilbMV0pO1xuICAgIH1cbiAgfSkub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgIGlmICghZm91bmQpIHtcbiAgICAgIGNiKG51bGwpO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBfbG9ja0ZpbmdlcnByaW50RnJvbUFwcGVuZGluZyA9IHt9O1xuZnVuY3Rpb24gc3RvcmVGaW5nZXJwcmludChzZXJ2ZXJJZCwga25vd25Ib3N0c1BhdGgsIGZpbmdlcnByaW50LCBjYikge1xuICAvLyB3ZSBjaGVjayBpZiB0aGUgc2VydmVySWQgaGFzIGJlZW4gYXBwZW5kZWRcbiAgaWYgKCEhX2xvY2tGaW5nZXJwcmludEZyb21BcHBlbmRpbmdbc2VydmVySWRdKSB7XG4gICAgLy8gaWYgaXQgaGFzLCB3ZSBpZ25vcmUgaXRcbiAgICByZXR1cm4gY2IobnVsbCk7XG4gIH1cblxuICAvLyB3ZSBtYWtlIHRoZSBsaW5lIGFzIGFwcGVuZGVkXG4gIC8vICggMSBpcyBtb3JlIGVmZmljaWVudCB0byBzdG9yZSB0aGFuIHRydWUgYmVjYXVzZSB0cnVlIGlzIGFuIG9kZGJhbGwgKVxuICBfbG9ja0ZpbmdlcnByaW50RnJvbUFwcGVuZGluZ1tzZXJ2ZXJJZF0gPSAxO1xuXG4gIC8vIElmIGZpbGUgZG9lc24ndCBleGlzdCwgY3JlYXRlIGZ1bGwgcGF0aCB0byBpdFxuICB0cnkge1xuICAgIF9mczIuZGVmYXVsdC5hY2Nlc3NTeW5jKGtub3duSG9zdHNQYXRoKTtcbiAgfSBjYXRjaCAoXykge1xuICAgIG1rRnVsbFBhdGgoX3BhdGgyLmRlZmF1bHQuZGlybmFtZShrbm93bkhvc3RzUGF0aCkpO1xuICB9XG5cbiAgX2ZzMi5kZWZhdWx0LmFwcGVuZEZpbGUoa25vd25Ib3N0c1BhdGgsIHNlcnZlcklkICsgXCIgXCIgKyBmaW5nZXJwcmludCArIF9vcy5FT0wsIFwidXRmOFwiLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgZGVsZXRlIF9sb2NrRmluZ2VycHJpbnRGcm9tQXBwZW5kaW5nW3NlcnZlcklkXTtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgIH1cbiAgICByZXR1cm4gY2IoZXJyKTtcbiAgfSk7XG59XG5cbnZhciBUcnVzdFN0cmF0ZWd5ID0ge1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgU2luY2UgdmVyc2lvbiAxLjAuIFdpbGwgYmUgZGVsZXRlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiB7QGxpbmsgI1RSVVNUX0NVU1RPTV9DQV9TSUdORURfQ0VSVElGSUNBVEVTfS5cbiAgICovXG4gIFRSVVNUX1NJR05FRF9DRVJUSUZJQ0FURVM6IGZ1bmN0aW9uIFRSVVNUX1NJR05FRF9DRVJUSUZJQ0FURVMoY29uZmlnLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSkge1xuICAgIGNvbnNvbGUubG9nKFwiYFRSVVNUX1NJR05FRF9DRVJUSUZJQ0FURVNgIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYXMgb3B0aW9uIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBcIiArIFwidGhlIGRyaXZlci4gUGxlYXNlIHVzZSBgVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVNgIGluc3RlYWQuXCIpO1xuICAgIHJldHVybiBUcnVzdFN0cmF0ZWd5LlRSVVNUX0NVU1RPTV9DQV9TSUdORURfQ0VSVElGSUNBVEVTKGNvbmZpZywgb25TdWNjZXNzLCBvbkZhaWx1cmUpO1xuICB9LFxuICBUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFUzogZnVuY3Rpb24gVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVMoY29uZmlnLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSkge1xuICAgIGlmICghY29uZmlnLnRydXN0ZWRDZXJ0aWZpY2F0ZXMgfHwgY29uZmlnLnRydXN0ZWRDZXJ0aWZpY2F0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBvbkZhaWx1cmUoKDAsIF9lcnJvci5uZXdFcnJvcikoXCJZb3UgYXJlIHVzaW5nIFRSVVNUX0NVU1RPTV9DQV9TSUdORURfQ0VSVElGSUNBVEVTIGFzIHRoZSBtZXRob2QgXCIgKyBcInRvIHZlcmlmeSB0cnVzdCBmb3IgZW5jcnlwdGVkICBjb25uZWN0aW9ucywgYnV0IGhhdmUgbm90IGNvbmZpZ3VyZWQgYW55IFwiICsgXCJ0cnVzdGVkQ2VydGlmaWNhdGVzLiBZb3UgIG11c3Qgc3BlY2lmeSB0aGUgcGF0aCB0byBhdCBsZWFzdCBvbmUgdHJ1c3RlZCBcIiArIFwiWC41MDkgY2VydGlmaWNhdGUgZm9yIHRoaXMgdG8gd29yay4gVHdvIG90aGVyIGFsdGVybmF0aXZlcyBpcyB0byB1c2UgXCIgKyBcIlRSVVNUX0FMTF9DRVJUSUZJQ0FURVMgb3IgdG8gZGlzYWJsZSBlbmNyeXB0aW9uIGJ5IHNldHRpbmcgZW5jcnlwdGVkPVxcXCJcIiArIF91dGlsLkVOQ1JZUFRJT05fT0ZGICsgXCJcXFwiXCIgKyBcImluIHlvdXIgZHJpdmVyIGNvbmZpZ3VyYXRpb24uXCIpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGxzT3B0cyA9IHtcbiAgICAgIGNhOiBjb25maWcudHJ1c3RlZENlcnRpZmljYXRlcy5tYXAoZnVuY3Rpb24gKGYpIHtcbiAgICAgICAgcmV0dXJuIF9mczIuZGVmYXVsdC5yZWFkRmlsZVN5bmMoZik7XG4gICAgICB9KSxcbiAgICAgIC8vIEJlY2F1c2Ugd2UgbWFudWFsbHkgY2hlY2sgZm9yIHRoaXMgaW4gdGhlIGNvbm5lY3QgY2FsbGJhY2ssIHRvIGdpdmVcbiAgICAgIC8vIGEgbW9yZSBoZWxwZnVsIGVycm9yIHRvIHRoZSB1c2VyXG4gICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlXG4gICAgfTtcblxuICAgIHZhciBzb2NrZXQgPSBfdGxzMi5kZWZhdWx0LmNvbm5lY3QoY29uZmlnLnBvcnQsIGNvbmZpZy5ob3N0LCB0bHNPcHRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXNvY2tldC5hdXRob3JpemVkKSB7XG4gICAgICAgIG9uRmFpbHVyZSgoMCwgX2Vycm9yLm5ld0Vycm9yKShcIlNlcnZlciBjZXJ0aWZpY2F0ZSBpcyBub3QgdHJ1c3RlZC4gSWYgeW91IHRydXN0IHRoZSBkYXRhYmFzZSB5b3UgYXJlIGNvbm5lY3RpbmcgdG8sIGFkZFwiICsgXCIgdGhlIHNpZ25pbmcgY2VydGlmaWNhdGUsIG9yIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUsIHRvIHRoZSBsaXN0IG9mIGNlcnRpZmljYXRlcyB0cnVzdGVkIGJ5IHRoaXMgZHJpdmVyXCIgKyBcIiB1c2luZyBgbmVvNGoudjEuZHJpdmVyKC4uLCB7IHRydXN0ZWRDZXJ0aWZpY2F0ZXM6WydwYXRoL3RvL2NlcnRpZmljYXRlLmNydCddfSkuIFRoaXMgXCIgKyBcIiBpcyBhIHNlY3VyaXR5IG1lYXN1cmUgdG8gcHJvdGVjdCBhZ2FpbnN0IG1hbi1pbi10aGUtbWlkZGxlIGF0dGFja3MuIElmIHlvdSBhcmUganVzdCB0cnlpbmcgXCIgKyBcIiBOZW80aiBvdXQgYW5kIGFyZSBub3QgY29uY2VybmVkIGFib3V0IGVuY3J5cHRpb24sIHNpbXBseSBkaXNhYmxlIGl0IHVzaW5nIGBlbmNyeXB0ZWQ9XFxcIlwiICsgX3V0aWwuRU5DUllQVElPTl9PRkYgKyBcIlxcXCJgXCIgKyBcIiBpbiB0aGUgZHJpdmVyIG9wdGlvbnMuIFNvY2tldCByZXNwb25kZWQgd2l0aDogXCIgKyBzb2NrZXQuYXV0aG9yaXphdGlvbkVycm9yKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvblN1Y2Nlc3MoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBzb2NrZXQub24oJ2Vycm9yJywgb25GYWlsdXJlKTtcbiAgICByZXR1cm4gc29ja2V0O1xuICB9LFxuICBUUlVTVF9TWVNURU1fQ0FfU0lHTkVEX0NFUlRJRklDQVRFUzogZnVuY3Rpb24gVFJVU1RfU1lTVEVNX0NBX1NJR05FRF9DRVJUSUZJQ0FURVMoY29uZmlnLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSkge1xuXG4gICAgdmFyIHRsc09wdHMgPSB7XG4gICAgICAvLyBCZWNhdXNlIHdlIG1hbnVhbGx5IGNoZWNrIGZvciB0aGlzIGluIHRoZSBjb25uZWN0IGNhbGxiYWNrLCB0byBnaXZlXG4gICAgICAvLyBhIG1vcmUgaGVscGZ1bCBlcnJvciB0byB0aGUgdXNlclxuICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICAgIH07XG4gICAgdmFyIHNvY2tldCA9IF90bHMyLmRlZmF1bHQuY29ubmVjdChjb25maWcucG9ydCwgY29uZmlnLmhvc3QsIHRsc09wdHMsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghc29ja2V0LmF1dGhvcml6ZWQpIHtcbiAgICAgICAgb25GYWlsdXJlKCgwLCBfZXJyb3IubmV3RXJyb3IpKFwiU2VydmVyIGNlcnRpZmljYXRlIGlzIG5vdCB0cnVzdGVkLiBJZiB5b3UgdHJ1c3QgdGhlIGRhdGFiYXNlIHlvdSBhcmUgY29ubmVjdGluZyB0bywgdXNlIFwiICsgXCJUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFUyBhbmQgYWRkXCIgKyBcIiB0aGUgc2lnbmluZyBjZXJ0aWZpY2F0ZSwgb3IgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSwgdG8gdGhlIGxpc3Qgb2YgY2VydGlmaWNhdGVzIHRydXN0ZWQgYnkgdGhpcyBkcml2ZXJcIiArIFwiIHVzaW5nIGBuZW80ai52MS5kcml2ZXIoLi4sIHsgdHJ1c3RlZENlcnRpZmljYXRlczpbJ3BhdGgvdG8vY2VydGlmaWNhdGUuY3J0J119KS4gVGhpcyBcIiArIFwiIGlzIGEgc2VjdXJpdHkgbWVhc3VyZSB0byBwcm90ZWN0IGFnYWluc3QgbWFuLWluLXRoZS1taWRkbGUgYXR0YWNrcy4gSWYgeW91IGFyZSBqdXN0IHRyeWluZyBcIiArIFwiIE5lbzRqIG91dCBhbmQgYXJlIG5vdCBjb25jZXJuZWQgYWJvdXQgZW5jcnlwdGlvbiwgc2ltcGx5IGRpc2FibGUgaXQgdXNpbmcgYGVuY3J5cHRlZD1cXFwiXCIgKyBfdXRpbC5FTkNSWVBUSU9OX09GRiArIFwiXFxcImBcIiArIFwiIGluIHRoZSBkcml2ZXIgb3B0aW9ucy4gU29ja2V0IHJlc3BvbmRlZCB3aXRoOiBcIiArIHNvY2tldC5hdXRob3JpemF0aW9uRXJyb3IpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uU3VjY2VzcygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHNvY2tldC5vbignZXJyb3InLCBvbkZhaWx1cmUpO1xuICAgIHJldHVybiBzb2NrZXQ7XG4gIH0sXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBpbiAxLjEgaW4gZmF2b3VyIG9mIHtAbGluayAjVFJVU1RfQUxMX0NFUlRJRklDQVRFU30uIFdpbGwgYmUgZGVsZXRlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLlxuICAgKi9cbiAgVFJVU1RfT05fRklSU1RfVVNFOiBmdW5jdGlvbiBUUlVTVF9PTl9GSVJTVF9VU0UoY29uZmlnLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSkge1xuICAgIGNvbnNvbGUubG9nKFwiYFRSVVNUX09OX0ZJUlNUX1VTRWAgaGFzIGJlZW4gZGVwcmVjYXRlZCBhcyBvcHRpb24gYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFwiICsgXCJ0aGUgZHJpdmVyLiBQbGVhc2UgdXNlIGBUUlVTVF9BTExfQ0VSVElGSUNBVEVTYCBpbnN0ZWFkLlwiKTtcblxuICAgIHZhciB0bHNPcHRzID0ge1xuICAgICAgLy8gQmVjYXVzZSB3ZSBtYW51YWxseSB2ZXJpZnkgdGhlIGNlcnRpZmljYXRlIGFnYWluc3Qga25vd25faG9zdHNcbiAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcbiAgICB9O1xuXG4gICAgdmFyIHNvY2tldCA9IF90bHMyLmRlZmF1bHQuY29ubmVjdChjb25maWcucG9ydCwgY29uZmlnLmhvc3QsIHRsc09wdHMsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzZXJ2ZXJDZXJ0ID0gc29ja2V0LmdldFBlZXJDZXJ0aWZpY2F0ZSggLypyYXc9Ki90cnVlKTtcblxuICAgICAgaWYgKCFzZXJ2ZXJDZXJ0LnJhdykge1xuICAgICAgICAvLyBJZiBgcmF3YCBpcyBub3QgYXZhaWxhYmxlLCB3ZSdyZSBvbiBhbiBvbGQgdmVyc2lvbiBvZiBOb2RlSlMsIGFuZFxuICAgICAgICAvLyB0aGUgcmF3IGNlcnQgY2Fubm90IGJlIGFjY2Vzc2VkIChvciwgYXQgbGVhc3QgSSBjb3VsZG4ndCBmaW5kIGEgd2F5IHRvKVxuICAgICAgICAvLyB0aGVyZWZvcmUsIHdlIGNhbid0IGdlbmVyYXRlIGEgU0hBNTEyIGZpbmdlcnByaW50LCBtZWFuaW5nIHdlIGNhbid0XG4gICAgICAgIC8vIGRvIFRPRlUsIGFuZCB0aGUgc2FmZSBhcHByb2FjaCBpcyB0byBmYWlsLlxuICAgICAgICBvbkZhaWx1cmUoKDAsIF9lcnJvci5uZXdFcnJvcikoXCJZb3UgYXJlIHVzaW5nIGEgdmVyc2lvbiBvZiBOb2RlSlMgdGhhdCBkb2VzIG5vdCBcIiArIFwic3VwcG9ydCB0cnVzdC1vbi1maXJzdCB1c2UgZW5jcnlwdGlvbi4gWW91IGNhbiBlaXRoZXIgdXBncmFkZSBOb2RlSlMgdG8gXCIgKyBcImEgbmV3ZXIgdmVyc2lvbiwgdXNlIGB0cnVzdDpUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFU2AgaW4geW91ciBkcml2ZXIgXCIgKyBcImNvbmZpZyBpbnN0ZWFkLCBvciBkaXNhYmxlIGVuY3J5cHRpb24gdXNpbmcgYGVuY3J5cHRlZDpcXFwiXCIgKyBfdXRpbC5FTkNSWVBUSU9OX09GRiArIFwiXFxcImAuXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2VydmVyRmluZ2VycHJpbnQgPSByZXF1aXJlKCdjcnlwdG8nKS5jcmVhdGVIYXNoKCdzaGE1MTInKS51cGRhdGUoc2VydmVyQ2VydC5yYXcpLmRpZ2VzdChcImhleFwiKTtcbiAgICAgIHZhciBrbm93bkhvc3RzUGF0aCA9IGNvbmZpZy5rbm93bkhvc3RzUGF0aCB8fCBfcGF0aDIuZGVmYXVsdC5qb2luKHVzZXJIb21lKCksIFwiLm5lbzRqXCIsIFwia25vd25faG9zdHNcIik7XG4gICAgICB2YXIgc2VydmVySWQgPSBjb25maWcuaG9zdCArIFwiOlwiICsgY29uZmlnLnBvcnQ7XG5cbiAgICAgIGxvYWRGaW5nZXJwcmludChzZXJ2ZXJJZCwga25vd25Ib3N0c1BhdGgsIGZ1bmN0aW9uIChrbm93bkZpbmdlcnByaW50KSB7XG4gICAgICAgIGlmIChrbm93bkZpbmdlcnByaW50ID09PSBzZXJ2ZXJGaW5nZXJwcmludCkge1xuICAgICAgICAgIG9uU3VjY2VzcygpO1xuICAgICAgICB9IGVsc2UgaWYgKGtub3duRmluZ2VycHJpbnQgPT0gbnVsbCkge1xuICAgICAgICAgIHN0b3JlRmluZ2VycHJpbnQoc2VydmVySWQsIGtub3duSG9zdHNQYXRoLCBzZXJ2ZXJGaW5nZXJwcmludCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICByZXR1cm4gb25GYWlsdXJlKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb25TdWNjZXNzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb25GYWlsdXJlKCgwLCBfZXJyb3IubmV3RXJyb3IpKFwiRGF0YWJhc2UgZW5jcnlwdGlvbiBjZXJ0aWZpY2F0ZSBoYXMgY2hhbmdlZCwgYW5kIG5vIGxvbmdlciBcIiArIFwibWF0Y2hlcyB0aGUgY2VydGlmaWNhdGUgc3RvcmVkIGZvciBcIiArIHNlcnZlcklkICsgXCIgaW4gYFwiICsga25vd25Ib3N0c1BhdGggKyBcImAuIEFzIGEgc2VjdXJpdHkgcHJlY2F1dGlvbiwgdGhpcyBkcml2ZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSB0cnVzdCB0aGUgbmV3IFwiICsgXCJjZXJ0aWZpY2F0ZSwgYmVjYXVzZSBkb2luZyBzbyB3b3VsZCBhbGxvdyBhbiBhdHRhY2tlciB0byBwcmV0ZW5kIHRvIGJlIHRoZSBOZW80aiBcIiArIFwiaW5zdGFuY2Ugd2Ugd2FudCB0byBjb25uZWN0IHRvLiBUaGUgY2VydGlmaWNhdGUgcHJvdmlkZWQgYnkgdGhlIHNlcnZlciBsb29rcyBsaWtlOiBcIiArIHNlcnZlckNlcnQgKyBcIi4gSWYgeW91IHRydXN0IHRoYXQgdGhpcyBjZXJ0aWZpY2F0ZSBpcyB2YWxpZCwgc2ltcGx5IHJlbW92ZSB0aGUgbGluZSBcIiArIFwic3RhcnRpbmcgd2l0aCBcIiArIHNlcnZlcklkICsgXCIgaW4gYFwiICsga25vd25Ib3N0c1BhdGggKyBcImAsIGFuZCB0aGUgZHJpdmVyIHdpbGwgXCIgKyBcInVwZGF0ZSB0aGUgZmlsZSB3aXRoIHRoZSBuZXcgY2VydGlmaWNhdGUuIFlvdSBjYW4gY29uZmlndXJlIHdoaWNoIGZpbGUgdGhlIGRyaXZlciBcIiArIFwic2hvdWxkIHVzZSB0byBzdG9yZSB0aGlzIGluZm9ybWF0aW9uIGJ5IHNldHRpbmcgYGtub3duSG9zdHNgIHRvIGFub3RoZXIgcGF0aCBpbiBcIiArIFwieW91ciBkcml2ZXIgY29uZmlndXJhdGlvbiAtIGFuZCB5b3UgY2FuIGRpc2FibGUgZW5jcnlwdGlvbiB0aGVyZSBhcyB3ZWxsIHVzaW5nIFwiICsgXCJgZW5jcnlwdGVkOlxcXCJcIiArIF91dGlsLkVOQ1JZUFRJT05fT0ZGICsgXCJcXFwiYC5cIikpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBzb2NrZXQub24oJ2Vycm9yJywgb25GYWlsdXJlKTtcbiAgICByZXR1cm4gc29ja2V0O1xuICB9LFxuXG4gIFRSVVNUX0FMTF9DRVJUSUZJQ0FURVM6IGZ1bmN0aW9uIFRSVVNUX0FMTF9DRVJUSUZJQ0FURVMoY29uZmlnLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSkge1xuICAgIHZhciB0bHNPcHRzID0ge1xuICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICAgIH07XG4gICAgdmFyIHNvY2tldCA9IF90bHMyLmRlZmF1bHQuY29ubmVjdChjb25maWcucG9ydCwgY29uZmlnLmhvc3QsIHRsc09wdHMsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjZXJ0aWZpY2F0ZSA9IHNvY2tldC5nZXRQZWVyQ2VydGlmaWNhdGUoKTtcbiAgICAgIGlmICgoMCwgX3V0aWwuaXNFbXB0eU9iamVjdE9yTnVsbCkoY2VydGlmaWNhdGUpKSB7XG4gICAgICAgIG9uRmFpbHVyZSgoMCwgX2Vycm9yLm5ld0Vycm9yKShcIlNlY3VyZSBjb25uZWN0aW9uIHdhcyBzdWNjZXNzZnVsIGJ1dCBzZXJ2ZXIgZGlkIG5vdCByZXR1cm4gYW55IHZhbGlkIFwiICsgXCJjZXJ0aWZpY2F0ZXMuIFN1Y2ggY29ubmVjdGlvbiBjYW4gbm90IGJlIHRydXN0ZWQuIElmIHlvdSBhcmUganVzdCB0cnlpbmcgXCIgKyBcIiBOZW80aiBvdXQgYW5kIGFyZSBub3QgY29uY2VybmVkIGFib3V0IGVuY3J5cHRpb24sIHNpbXBseSBkaXNhYmxlIGl0IHVzaW5nIFwiICsgXCJgZW5jcnlwdGVkPVxcXCJcIiArIF91dGlsLkVOQ1JZUFRJT05fT0ZGICsgXCJcXFwiYCBpbiB0aGUgZHJpdmVyIG9wdGlvbnMuIFwiICsgXCJTb2NrZXQgcmVzcG9uZGVkIHdpdGg6IFwiICsgc29ja2V0LmF1dGhvcml6YXRpb25FcnJvcikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25TdWNjZXNzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgc29ja2V0Lm9uKCdlcnJvcicsIG9uRmFpbHVyZSk7XG4gICAgcmV0dXJuIHNvY2tldDtcbiAgfVxufTtcblxuLyoqXG4gKiBDb25uZWN0IHVzaW5nIG5vZGUgc29ja2V0LlxuICogQHBhcmFtIHtDaGFubmVsQ29uZmlnfSBjb25maWcgLSBjb25maWd1cmF0aW9uIG9mIHRoaXMgY2hhbm5lbC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uU3VjY2VzcyAtIGNhbGxiYWNrIHRvIGV4ZWN1dGUgb24gY29ubmVjdGlvbiBzdWNjZXNzLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gb25GYWlsdXJlIC0gY2FsbGJhY2sgdG8gZXhlY3V0ZSBvbiBjb25uZWN0aW9uIGZhaWx1cmUuXG4gKiBAcmV0dXJuIHsqfSBzb2NrZXQgY29ubmVjdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29ubmVjdChjb25maWcsIG9uU3VjY2Vzcykge1xuICB2YXIgb25GYWlsdXJlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgLy9zdGlsbCBhbGxvdyBib29sZWFuIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBpZiAoY29uZmlnLmVuY3J5cHRlZCA9PT0gZmFsc2UgfHwgY29uZmlnLmVuY3J5cHRlZCA9PT0gX3V0aWwuRU5DUllQVElPTl9PRkYpIHtcbiAgICB2YXIgY29ubiA9IF9uZXQyLmRlZmF1bHQuY29ubmVjdChjb25maWcucG9ydCwgY29uZmlnLmhvc3QsIG9uU3VjY2Vzcyk7XG4gICAgY29ubi5vbignZXJyb3InLCBvbkZhaWx1cmUpO1xuICAgIHJldHVybiBjb25uO1xuICB9IGVsc2UgaWYgKFRydXN0U3RyYXRlZ3lbY29uZmlnLnRydXN0XSkge1xuICAgIHJldHVybiBUcnVzdFN0cmF0ZWd5W2NvbmZpZy50cnVzdF0oY29uZmlnLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSk7XG4gIH0gZWxzZSB7XG4gICAgb25GYWlsdXJlKCgwLCBfZXJyb3IubmV3RXJyb3IpKFwiVW5rbm93biB0cnVzdCBzdHJhdGVneTogXCIgKyBjb25maWcudHJ1c3QgKyBcIi4gUGxlYXNlIHVzZSBlaXRoZXIgXCIgKyBcInRydXN0OidUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFUycgb3IgdHJ1c3Q6J1RSVVNUX0FMTF9DRVJUSUZJQ0FURVMnIGluIHlvdXIgZHJpdmVyIFwiICsgXCJjb25maWd1cmF0aW9uLiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGRpc2FibGUgZW5jcnlwdGlvbiBieSBzZXR0aW5nIFwiICsgXCJgZW5jcnlwdGVkOlxcXCJcIiArIF91dGlsLkVOQ1JZUFRJT05fT0ZGICsgXCJcXFwiYC4gVGhlcmUgaXMgbm8gbWVjaGFuaXNtIHRvIHVzZSBlbmNyeXB0aW9uIHdpdGhvdXQgdHJ1c3QgdmVyaWZpY2F0aW9uLCBcIiArIFwiYmVjYXVzZSB0aGlzIGluY3VycyB0aGUgb3ZlcmhlYWQgb2YgZW5jcnlwdGlvbiB3aXRob3V0IGltcHJvdmluZyBzZWN1cml0eS4gSWYgXCIgKyBcInRoZSBkcml2ZXIgZG9lcyBub3QgdmVyaWZ5IHRoYXQgdGhlIHBlZXIgaXQgaXMgY29ubmVjdGVkIHRvIGlzIHJlYWxseSBOZW80aiwgaXQgXCIgKyBcImlzIHZlcnkgZWFzeSBmb3IgYW4gYXR0YWNrZXIgdG8gYnlwYXNzIHRoZSBlbmNyeXB0aW9uIGJ5IHByZXRlbmRpbmcgdG8gYmUgTmVvNGouXCIpKTtcbiAgfVxufVxuXG4vKipcbiAqIEluIGEgTm9kZS5qcyBlbnZpcm9ubWVudCB0aGUgJ25ldCcgbW9kdWxlIGlzIHVzZWRcbiAqIGFzIHRyYW5zcG9ydC5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovXG5cbnZhciBOb2RlQ2hhbm5lbCA9IGZ1bmN0aW9uICgpIHtcblxuICAvKipcbiAgICogQ3JlYXRlIG5ldyBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge0NoYW5uZWxDb25maWd9IGNvbmZpZyAtIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgY2hhbm5lbC5cbiAgICovXG4gIGZ1bmN0aW9uIE5vZGVDaGFubmVsKGNvbmZpZykge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIE5vZGVDaGFubmVsKTtcblxuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHRoaXMuaWQgPSBfQ09OTkVDVElPTl9JREdFTisrO1xuICAgIHRoaXMuYXZhaWxhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLl9wZW5kaW5nID0gW107XG4gICAgdGhpcy5fb3BlbiA9IHRydWU7XG4gICAgdGhpcy5fZXJyb3IgPSBudWxsO1xuICAgIHRoaXMuX2hhbmRsZUNvbm5lY3Rpb25FcnJvciA9IHRoaXMuX2hhbmRsZUNvbm5lY3Rpb25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2hhbmRsZUNvbm5lY3Rpb25UZXJtaW5hdGVkID0gdGhpcy5faGFuZGxlQ29ubmVjdGlvblRlcm1pbmF0ZWQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9jb25uZWN0aW9uRXJyb3JDb2RlID0gY29uZmlnLmNvbm5lY3Rpb25FcnJvckNvZGU7XG5cbiAgICB0aGlzLl9lbmNyeXB0ZWQgPSBjb25maWcuZW5jcnlwdGVkO1xuICAgIHRoaXMuX2Nvbm4gPSBjb25uZWN0KGNvbmZpZywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzZWxmLl9vcGVuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2VsZi5fY29ubi5vbignZGF0YScsIGZ1bmN0aW9uIChidWZmZXIpIHtcbiAgICAgICAgaWYgKHNlbGYub25tZXNzYWdlKSB7XG4gICAgICAgICAgc2VsZi5vbm1lc3NhZ2UobmV3IF9idWYuTm9kZUJ1ZmZlcihidWZmZXIpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHNlbGYuX2Nvbm4ub24oJ2Vycm9yJywgc2VsZi5faGFuZGxlQ29ubmVjdGlvbkVycm9yKTtcbiAgICAgIHNlbGYuX2Nvbm4ub24oJ2VuZCcsIHNlbGYuX2hhbmRsZUNvbm5lY3Rpb25UZXJtaW5hdGVkKTtcblxuICAgICAgLy8gRHJhaW4gYWxsIHBlbmRpbmcgbWVzc2FnZXNcbiAgICAgIHZhciBwZW5kaW5nID0gc2VsZi5fcGVuZGluZztcbiAgICAgIHNlbGYuX3BlbmRpbmcgPSBudWxsO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwZW5kaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHNlbGYud3JpdGUocGVuZGluZ1tpXSk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5faGFuZGxlQ29ubmVjdGlvbkVycm9yKTtcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKE5vZGVDaGFubmVsLCBbe1xuICAgIGtleTogJ19oYW5kbGVDb25uZWN0aW9uRXJyb3InLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfaGFuZGxlQ29ubmVjdGlvbkVycm9yKGVycikge1xuICAgICAgdmFyIG1zZyA9IGVyci5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gY29ubmVjdCB0byBzZXJ2ZXInO1xuICAgICAgdGhpcy5fZXJyb3IgPSAoMCwgX2Vycm9yLm5ld0Vycm9yKShtc2csIHRoaXMuX2Nvbm5lY3Rpb25FcnJvckNvZGUpO1xuICAgICAgaWYgKHRoaXMub25lcnJvcikge1xuICAgICAgICB0aGlzLm9uZXJyb3IodGhpcy5fZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19oYW5kbGVDb25uZWN0aW9uVGVybWluYXRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9oYW5kbGVDb25uZWN0aW9uVGVybWluYXRlZCgpIHtcbiAgICAgIHRoaXMuX2Vycm9yID0gKDAsIF9lcnJvci5uZXdFcnJvcikoJ0Nvbm5lY3Rpb24gd2FzIGNsb3NlZCBieSBzZXJ2ZXInLCB0aGlzLl9jb25uZWN0aW9uRXJyb3JDb2RlKTtcbiAgICAgIGlmICh0aGlzLm9uZXJyb3IpIHtcbiAgICAgICAgdGhpcy5vbmVycm9yKHRoaXMuX2Vycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdpc0VuY3J5cHRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzRW5jcnlwdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2VuY3J5cHRlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcml0ZSB0aGUgcGFzc2VkIGluIGJ1ZmZlciB0byBjb25uZWN0aW9uXG4gICAgICogQHBhcmFtIHtOb2RlQnVmZmVyfSBidWZmZXIgLSBCdWZmZXIgdG8gd3JpdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnd3JpdGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3cml0ZShidWZmZXIpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIGEgcGVuZGluZyBxdWV1ZSwgcHVzaCB0aGlzIG9uIHRoYXQgcXVldWUuIFRoaXMgbWVhbnNcbiAgICAgIC8vIHdlIGFyZSBub3QgeWV0IGNvbm5lY3RlZCwgc28gd2UgcXVldWUgdGhpbmdzIGxvY2FsbHkuXG4gICAgICBpZiAodGhpcy5fcGVuZGluZyAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9wZW5kaW5nLnB1c2goYnVmZmVyKTtcbiAgICAgIH0gZWxzZSBpZiAoYnVmZmVyIGluc3RhbmNlb2YgX2J1Zi5Ob2RlQnVmZmVyKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCBcIltDb25uI1wiK3RoaXMuaWQrXCJdIFNFTkQ6IFwiLCBidWZmZXIudG9TdHJpbmcoKSApO1xuICAgICAgICB0aGlzLl9jb25uLndyaXRlKGJ1ZmZlci5fYnVmZmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3IubmV3RXJyb3IpKFwiRG9uJ3Qga25vdyBob3cgdG8gd3JpdGU6IFwiICsgYnVmZmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZSB0aGUgY29ubmVjdGlvblxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNiIC0gRnVuY3Rpb24gdG8gY2FsbCBvbiBjbG9zZS5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY2xvc2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgIHZhciBjYiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX29wZW4gPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLl9jb25uKSB7XG4gICAgICAgIHRoaXMuX2Nvbm4uZW5kKCk7XG4gICAgICAgIHRoaXMuX2Nvbm4ucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIHRoaXMuX2hhbmRsZUNvbm5lY3Rpb25UZXJtaW5hdGVkKTtcbiAgICAgICAgdGhpcy5fY29ubi5vbignZW5kJywgY2IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2IoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIE5vZGVDaGFubmVsO1xufSgpO1xuXG52YXIgX25vZGVDaGFubmVsTW9kdWxlID0geyBjaGFubmVsOiBOb2RlQ2hhbm5lbCwgYXZhaWxhYmxlOiB0cnVlIH07XG5cbnRyeSB7XG4gIC8vIE9ubHkgZGVmaW5lIHRoaXMgbW9kdWxlIGlmICduZXQnIGlzIGF2YWlsYWJsZVxuICByZXF1aXJlLnJlc29sdmUoXCJuZXRcIik7XG59IGNhdGNoIChlKSB7XG4gIF9ub2RlQ2hhbm5lbE1vZHVsZSA9IHsgYXZhaWxhYmxlOiBmYWxzZSB9O1xufVxuXG5leHBvcnRzLmRlZmF1bHQgPSBfbm9kZUNoYW5uZWxNb2R1bGU7IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjaycpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzJyk7XG5cbnZhciBfY3JlYXRlQ2xhc3MzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlQ2xhc3MyKTtcblxudmFyIF9idWYgPSByZXF1aXJlKCcuL2J1ZicpO1xuXG52YXIgX2Vycm9yID0gcmVxdWlyZSgnLi8uLi9lcnJvcicpO1xuXG52YXIgX3V0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgV2ViU29ja2V0Q2hhbm5lbCB0byBiZSB1c2VkIGluIHdlYiBicm93c2Vycy5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovXG52YXIgV2ViU29ja2V0Q2hhbm5lbCA9IGZ1bmN0aW9uICgpIHtcblxuICAvKipcbiAgICogQ3JlYXRlIG5ldyBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge0NoYW5uZWxDb25maWd9IGNvbmZpZyAtIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgY2hhbm5lbC5cbiAgICovXG4gIGZ1bmN0aW9uIFdlYlNvY2tldENoYW5uZWwoY29uZmlnKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgV2ViU29ja2V0Q2hhbm5lbCk7XG5cblxuICAgIHRoaXMuX29wZW4gPSB0cnVlO1xuICAgIHRoaXMuX3BlbmRpbmcgPSBbXTtcbiAgICB0aGlzLl9lcnJvciA9IG51bGw7XG4gICAgdGhpcy5faGFuZGxlQ29ubmVjdGlvbkVycm9yID0gdGhpcy5faGFuZGxlQ29ubmVjdGlvbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fY29ubmVjdGlvbkVycm9yQ29kZSA9IGNvbmZpZy5jb25uZWN0aW9uRXJyb3JDb2RlO1xuXG4gICAgdGhpcy5fZW5jcnlwdGVkID0gY29uZmlnLmVuY3J5cHRlZDtcblxuICAgIHZhciBzY2hlbWUgPSBcIndzXCI7XG4gICAgLy9BbGxvdyBib29sZWFuIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIGlmIChjb25maWcuZW5jcnlwdGVkID09PSB0cnVlIHx8IGNvbmZpZy5lbmNyeXB0ZWQgPT09IF91dGlsLkVOQ1JZUFRJT05fT04pIHtcbiAgICAgIGlmICghY29uZmlnLnRydXN0IHx8IGNvbmZpZy50cnVzdCA9PT0gJ1RSVVNUX0NVU1RPTV9DQV9TSUdORURfQ0VSVElGSUNBVEVTJykge1xuICAgICAgICBzY2hlbWUgPSBcIndzc1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZXJyb3IgPSAoMCwgX2Vycm9yLm5ld0Vycm9yKShcIlRoZSBicm93c2VyIHZlcnNpb24gb2YgdGhpcyBkcml2ZXIgb25seSBzdXBwb3J0cyBvbmUgdHJ1c3QgXCIgKyAnc3RyYXRlZ3ksIFxcJ1RSVVNUX0NVU1RPTV9DQV9TSUdORURfQ0VSVElGSUNBVEVTXFwnLiAnICsgY29uZmlnLnRydXN0ICsgJyBpcyBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgJyArIFwiZWl0aGVyIHVzZSBUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFUyBvciBkaXNhYmxlIGVuY3J5cHRpb24gYnkgc2V0dGluZyBcIiArIFwiYGVuY3J5cHRlZDpcXFwiXCIgKyBfdXRpbC5FTkNSWVBUSU9OX09GRiArIFwiXFxcImAgaW4gdGhlIGRyaXZlciBjb25maWd1cmF0aW9uLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl91cmwgPSBzY2hlbWUgKyAnOi8vJyArIGNvbmZpZy5ob3N0ICsgJzonICsgY29uZmlnLnBvcnQ7XG4gICAgdGhpcy5fd3MgPSBuZXcgV2ViU29ja2V0KHRoaXMuX3VybCk7XG4gICAgdGhpcy5fd3MuYmluYXJ5VHlwZSA9IFwiYXJyYXlidWZmZXJcIjtcblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAvL0FsbCBjb25uZWN0aW9uIGVycm9ycyBhcmUgbm90IHNlbnQgdG8gdGhlIGVycm9yIGhhbmRsZXJcbiAgICAvL3dlIG11c3QgYWxzbyBjaGVjayBmb3IgZGlydHkgY2xvc2UgY2FsbHNcbiAgICB0aGlzLl93cy5vbmNsb3NlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmICghZS53YXNDbGVhbikge1xuICAgICAgICBzZWxmLl9oYW5kbGVDb25uZWN0aW9uRXJyb3IoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX3dzLm9ub3BlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERyYWluIGFsbCBwZW5kaW5nIG1lc3NhZ2VzXG4gICAgICB2YXIgcGVuZGluZyA9IHNlbGYuX3BlbmRpbmc7XG4gICAgICBzZWxmLl9wZW5kaW5nID0gbnVsbDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGVuZGluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzZWxmLndyaXRlKHBlbmRpbmdbaV0pO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5fd3Mub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoc2VsZi5vbm1lc3NhZ2UpIHtcbiAgICAgICAgdmFyIGIgPSBuZXcgX2J1Zi5IZWFwQnVmZmVyKGV2ZW50LmRhdGEpO1xuICAgICAgICBzZWxmLm9ubWVzc2FnZShiKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5fd3Mub25lcnJvciA9IHRoaXMuX2hhbmRsZUNvbm5lY3Rpb25FcnJvcjtcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKFdlYlNvY2tldENoYW5uZWwsIFt7XG4gICAga2V5OiAnX2hhbmRsZUNvbm5lY3Rpb25FcnJvcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9oYW5kbGVDb25uZWN0aW9uRXJyb3IoKSB7XG4gICAgICAvLyBvbmVycm9yIHRyaWdnZXJzIG9uIHdlYnNvY2tldCBjbG9zZSBhcyB3ZWxsLi4gZG9uJ3QgZ2V0IG1lIHN0YXJ0ZWQuXG4gICAgICBpZiAodGhpcy5fb3Blbikge1xuICAgICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI1Nzc5ODMxL2hvdy10by1jYXRjaC13ZWJzb2NrZXQtY29ubmVjdGlvbi10by13cy14eHhubi1mYWlsZWQtY29ubmVjdGlvbi1jbG9zZWQtYmVcbiAgICAgICAgdGhpcy5fZXJyb3IgPSAoMCwgX2Vycm9yLm5ld0Vycm9yKShcIldlYlNvY2tldCBjb25uZWN0aW9uIGZhaWx1cmUuIER1ZSB0byBzZWN1cml0eSBcIiArIFwiY29uc3RyYWludHMgaW4geW91ciB3ZWIgYnJvd3NlciwgdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUgaXMgbm90IGF2YWlsYWJsZSBcIiArIFwidG8gdGhpcyBOZW80aiBEcml2ZXIuIFBsZWFzZSB1c2UgeW91ciBicm93c2VycyBkZXZlbG9wbWVudCBjb25zb2xlIHRvIGRldGVybWluZSBcIiArIFwidGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGZhaWx1cmUuIENvbW1vbiByZWFzb25zIGluY2x1ZGUgdGhlIGRhdGFiYXNlIGJlaW5nIFwiICsgXCJ1bmF2YWlsYWJsZSwgdXNpbmcgdGhlIHdyb25nIGNvbm5lY3Rpb24gVVJMIG9yIHRlbXBvcmFyeSBuZXR3b3JrIHByb2JsZW1zLiBcIiArIFwiSWYgeW91IGhhdmUgZW5hYmxlZCBlbmNyeXB0aW9uLCBlbnN1cmUgeW91ciBicm93c2VyIGlzIGNvbmZpZ3VyZWQgdG8gdHJ1c3QgdGhlIFwiICsgXCJjZXJ0aWZpY2F0ZSBOZW80aiBpcyBjb25maWd1cmVkIHRvIHVzZS4gV2ViU29ja2V0IGByZWFkeVN0YXRlYCBpczogXCIgKyB0aGlzLl93cy5yZWFkeVN0YXRlLCB0aGlzLl9jb25uZWN0aW9uRXJyb3JDb2RlKTtcbiAgICAgICAgaWYgKHRoaXMub25lcnJvcikge1xuICAgICAgICAgIHRoaXMub25lcnJvcih0aGlzLl9lcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdpc0VuY3J5cHRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzRW5jcnlwdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2VuY3J5cHRlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcml0ZSB0aGUgcGFzc2VkIGluIGJ1ZmZlciB0byBjb25uZWN0aW9uXG4gICAgICogQHBhcmFtIHtIZWFwQnVmZmVyfSBidWZmZXIgLSBCdWZmZXIgdG8gd3JpdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnd3JpdGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3cml0ZShidWZmZXIpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIGEgcGVuZGluZyBxdWV1ZSwgcHVzaCB0aGlzIG9uIHRoYXQgcXVldWUuIFRoaXMgbWVhbnNcbiAgICAgIC8vIHdlIGFyZSBub3QgeWV0IGNvbm5lY3RlZCwgc28gd2UgcXVldWUgdGhpbmdzIGxvY2FsbHkuXG4gICAgICBpZiAodGhpcy5fcGVuZGluZyAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9wZW5kaW5nLnB1c2goYnVmZmVyKTtcbiAgICAgIH0gZWxzZSBpZiAoYnVmZmVyIGluc3RhbmNlb2YgX2J1Zi5IZWFwQnVmZmVyKSB7XG4gICAgICAgIHRoaXMuX3dzLnNlbmQoYnVmZmVyLl9idWZmZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvci5uZXdFcnJvcikoXCJEb24ndCBrbm93IGhvdyB0byBzZW5kIGJ1ZmZlcjogXCIgKyBidWZmZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlIHRoZSBjb25uZWN0aW9uXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2IgLSBGdW5jdGlvbiB0byBjYWxsIG9uIGNsb3NlLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdjbG9zZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgdmFyIGNiID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5fb3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5fd3MuY2xvc2UoKTtcbiAgICAgIHRoaXMuX3dzLm9uY2xvc2UgPSBjYjtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFdlYlNvY2tldENoYW5uZWw7XG59KCk7IC8qKlxuICAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gICAgICAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAgICAgICpcbiAgICAgICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gICAgICAqXG4gICAgICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgICAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICAgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gICAgICAqXG4gICAgICAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAgICAgICpcbiAgICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgICAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgICAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAgICAgKi9cblxudmFyIGF2YWlsYWJsZSA9IHR5cGVvZiBXZWJTb2NrZXQgIT09ICd1bmRlZmluZWQnO1xudmFyIF93ZWJzb2NrZXRDaGFubmVsTW9kdWxlID0geyBjaGFubmVsOiBXZWJTb2NrZXRDaGFubmVsLCBhdmFpbGFibGU6IGF2YWlsYWJsZSB9O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBfd2Vic29ja2V0Q2hhbm5lbE1vZHVsZTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkRlY2h1bmtlciA9IGV4cG9ydHMuQ2h1bmtlciA9IHVuZGVmaW5lZDtcblxudmFyIF9nZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG52YXIgX2dldFByb3RvdHlwZU9mMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dldFByb3RvdHlwZU9mKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2snKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc0NhbGxDaGVjazIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcycpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbnZhciBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybicpO1xuXG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIpO1xuXG52YXIgX2luaGVyaXRzMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cycpO1xuXG52YXIgX2luaGVyaXRzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luaGVyaXRzMik7XG5cbnZhciBfYnVmID0gcmVxdWlyZSgnLi9idWYnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIF9DSFVOS19IRUFERVJfU0laRSA9IDIsXG4gICAgX01FU1NBR0VfQk9VTkRBUlkgPSAweDAwLFxuICAgIF9ERUZBVUxUX0JVRkZFUl9TSVpFID0gMTQwMDsgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNjEzNzM0L21heGltdW0tcGFja2V0LXNpemUtZm9yLWEtdGNwLWNvbm5lY3Rpb25cblxuLyoqXG4gKiBMb29rcyBsaWtlIGEgd3JpdGFibGUgYnVmZmVyLCBjaHVua3Mgb3V0cHV0IHRyYW5zcGFyZW50bHkgaW50byBhIGNoYW5uZWwgYmVsb3cuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqL1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBDaHVua2VyID0gZnVuY3Rpb24gKF9CYXNlQnVmZmVyKSB7XG4gICgwLCBfaW5oZXJpdHMzLmRlZmF1bHQpKENodW5rZXIsIF9CYXNlQnVmZmVyKTtcblxuICBmdW5jdGlvbiBDaHVua2VyKGNoYW5uZWwsIGJ1ZmZlclNpemUpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBDaHVua2VyKTtcblxuICAgIHZhciBfdGhpcyA9ICgwLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMuZGVmYXVsdCkodGhpcywgKENodW5rZXIuX19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKENodW5rZXIpKS5jYWxsKHRoaXMsIDApKTtcblxuICAgIF90aGlzLl9idWZmZXJTaXplID0gYnVmZmVyU2l6ZSB8fCBfREVGQVVMVF9CVUZGRVJfU0laRTtcbiAgICBfdGhpcy5fY2ggPSBjaGFubmVsO1xuICAgIF90aGlzLl9idWZmZXIgPSAoMCwgX2J1Zi5hbGxvYykoX3RoaXMuX2J1ZmZlclNpemUpO1xuICAgIF90aGlzLl9jdXJyZW50Q2h1bmtTdGFydCA9IDA7XG4gICAgX3RoaXMuX2NodW5rT3BlbiA9IGZhbHNlO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKENodW5rZXIsIFt7XG4gICAga2V5OiAncHV0VUludDgnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXRVSW50OChwb3NpdGlvbiwgdmFsKSB7XG4gICAgICB0aGlzLl9lbnN1cmUoMSk7XG4gICAgICB0aGlzLl9idWZmZXIud3JpdGVVSW50OCh2YWwpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3B1dEludDgnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXRJbnQ4KHBvc2l0aW9uLCB2YWwpIHtcbiAgICAgIHRoaXMuX2Vuc3VyZSgxKTtcbiAgICAgIHRoaXMuX2J1ZmZlci53cml0ZUludDgodmFsKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdwdXRGbG9hdDY0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHV0RmxvYXQ2NChwb3NpdGlvbiwgdmFsKSB7XG4gICAgICB0aGlzLl9lbnN1cmUoOCk7XG4gICAgICB0aGlzLl9idWZmZXIud3JpdGVGbG9hdDY0KHZhbCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncHV0Qnl0ZXMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXRCeXRlcyhwb3NpdGlvbiwgZGF0YSkge1xuICAgICAgLy8gVE9ETzogSWYgZGF0YSBpcyBsYXJnZXIgdGhhbiBvdXIgY2h1bmsgc2l6ZSBvciBzbywgd2UncmUgdmVyeSBsaWtlbHkgYmV0dGVyIG9mZiBqdXN0IHBhc3NpbmcgdGhpcyBidWZmZXIgb25cbiAgICAgIC8vIHJhdGhlciB0aGFuIGRvaW5nIHRoZSBjb3B5IGhlcmUgVE9ETzogKmhvd2V2ZXIqIG5vdGUgdGhhdCB3ZSBuZWVkIHNvbWUgd2F5IHRvIGZpbmQgb3V0IHdoZW4gdGhlIGRhdGEgaGFzIGJlZW5cbiAgICAgIC8vIHdyaXR0ZW4gKGFuZCB0aHVzIHRoZSBidWZmZXIgY2FuIGJlIHJlLXVzZWQpIGlmIHdlIHRha2UgdGhhdCBhcHByb2FjaFxuICAgICAgd2hpbGUgKGRhdGEucmVtYWluaW5nKCkgPiAwKSB7XG4gICAgICAgIC8vIEVuc3VyZSB0aGVyZSBpcyBhbiBvcGVuIGNodW5rLCBhbmQgdGhhdCBpdCBoYXMgYXQgbGVhc3Qgb25lIGJ5dGUgb2Ygc3BhY2UgbGVmdFxuICAgICAgICB0aGlzLl9lbnN1cmUoMSk7XG4gICAgICAgIGlmICh0aGlzLl9idWZmZXIucmVtYWluaW5nKCkgPiBkYXRhLnJlbWFpbmluZygpKSB7XG4gICAgICAgICAgdGhpcy5fYnVmZmVyLndyaXRlQnl0ZXMoZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fYnVmZmVyLndyaXRlQnl0ZXMoZGF0YS5yZWFkU2xpY2UodGhpcy5fYnVmZmVyLnJlbWFpbmluZygpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2ZsdXNoJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgICBpZiAodGhpcy5fYnVmZmVyLnBvc2l0aW9uID4gMCkge1xuICAgICAgICB0aGlzLl9jbG9zZUNodW5rSWZPcGVuKCk7XG5cbiAgICAgICAgLy8gTG9jYWwgY29weSBhbmQgY2xlYXIgdGhlIGJ1ZmZlciBmaWVsZC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGJ1ZmZlciBpcyBub3QgcmUtcmVsZWFzZWQgaWYgdGhlIGZsdXNoIGNhbGwgZmFpbHNcbiAgICAgICAgdmFyIG91dCA9IHRoaXMuX2J1ZmZlcjtcbiAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9jaC53cml0ZShvdXQuZ2V0U2xpY2UoMCwgb3V0LnBvc2l0aW9uKSk7XG5cbiAgICAgICAgLy8gQWxsb2MgYSBuZXcgb3V0cHV0IGJ1ZmZlci4gV2UgYXNzdW1lIHdlJ3JlIHVzaW5nIE5vZGVKUydzIGJ1ZmZlciBwb29saW5nIHVuZGVyIHRoZSBob29kIGhlcmUhXG4gICAgICAgIHRoaXMuX2J1ZmZlciA9ICgwLCBfYnVmLmFsbG9jKSh0aGlzLl9idWZmZXJTaXplKTtcbiAgICAgICAgdGhpcy5fY2h1bmtPcGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCb2x0IG1lc3NhZ2VzIGFyZSBlbmNvZGVkIGluIG9uZSBvciBtb3JlIGNodW5rcywgYW5kIHRoZSBib3VuZGFyeSBiZXR3ZWVuIHR3byBtZXNzYWdlc1xuICAgICAqIGlzIGVuY29kZWQgYXMgYSAwLWxlbmd0aCBjaHVuaywgYDAwIDAwYC4gVGhpcyBpbnNlcnRzIHN1Y2ggYSBtZXNzYWdlIGJvdW5kYXJ5LCBjbG9zaW5nXG4gICAgICogYW55IGN1cnJlbnRseSBvcGVuIGNodW5rIGFzIG5lZWRlZFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdtZXNzYWdlQm91bmRhcnknLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBtZXNzYWdlQm91bmRhcnkoKSB7XG5cbiAgICAgIHRoaXMuX2Nsb3NlQ2h1bmtJZk9wZW4oKTtcblxuICAgICAgaWYgKHRoaXMuX2J1ZmZlci5yZW1haW5pbmcoKSA8IF9DSFVOS19IRUFERVJfU0laRSkge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdyaXRlIG1lc3NhZ2UgYm91bmRhcnlcbiAgICAgIHRoaXMuX2J1ZmZlci53cml0ZUludDE2KF9NRVNTQUdFX0JPVU5EQVJZKTtcbiAgICB9XG5cbiAgICAvKiogRW5zdXJlIGF0IGxlYXN0IHRoZSBnaXZlbiBzaXplIGlzIGF2YWlsYWJsZSBmb3Igd3JpdGluZyAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdfZW5zdXJlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2Vuc3VyZShzaXplKSB7XG4gICAgICB2YXIgdG9Xcml0ZVNpemUgPSB0aGlzLl9jaHVua09wZW4gPyBzaXplIDogc2l6ZSArIF9DSFVOS19IRUFERVJfU0laRTtcbiAgICAgIGlmICh0aGlzLl9idWZmZXIucmVtYWluaW5nKCkgPCB0b1dyaXRlU2l6ZSkge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fY2h1bmtPcGVuKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRDaHVua1N0YXJ0ID0gdGhpcy5fYnVmZmVyLnBvc2l0aW9uO1xuICAgICAgICB0aGlzLl9idWZmZXIucG9zaXRpb24gPSB0aGlzLl9idWZmZXIucG9zaXRpb24gKyBfQ0hVTktfSEVBREVSX1NJWkU7XG4gICAgICAgIHRoaXMuX2NodW5rT3BlbiA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2Nsb3NlQ2h1bmtJZk9wZW4nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfY2xvc2VDaHVua0lmT3BlbigpIHtcbiAgICAgIGlmICh0aGlzLl9jaHVua09wZW4pIHtcbiAgICAgICAgdmFyIGNodW5rU2l6ZSA9IHRoaXMuX2J1ZmZlci5wb3NpdGlvbiAtICh0aGlzLl9jdXJyZW50Q2h1bmtTdGFydCArIF9DSFVOS19IRUFERVJfU0laRSk7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXRVSW50MTYodGhpcy5fY3VycmVudENodW5rU3RhcnQsIGNodW5rU2l6ZSk7XG4gICAgICAgIHRoaXMuX2NodW5rT3BlbiA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gQ2h1bmtlcjtcbn0oX2J1Zi5CYXNlQnVmZmVyKTtcblxuLyoqXG4gKiBDb21iaW5lcyBjaHVua3MgdW50aWwgYSBjb21wbGV0ZSBtZXNzYWdlIGlzIGdhdGhlcmVkIHVwLCBhbmQgdGhlbiBmb3J3YXJkcyB0aGF0XG4gKiBtZXNzYWdlIHRvIGFuICdvbm1lc3NhZ2UnIGxpc3RlbmVyLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cblxuXG52YXIgRGVjaHVua2VyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBEZWNodW5rZXIoKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgRGVjaHVua2VyKTtcblxuICAgIHRoaXMuX2N1cnJlbnRNZXNzYWdlID0gW107XG4gICAgdGhpcy5fcGFydGlhbENodW5rSGVhZGVyID0gMDtcbiAgICB0aGlzLl9zdGF0ZSA9IHRoaXMuQVdBSVRJTkdfQ0hVTks7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShEZWNodW5rZXIsIFt7XG4gICAga2V5OiAnQVdBSVRJTkdfQ0hVTksnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBBV0FJVElOR19DSFVOSyhidWYpIHtcbiAgICAgIGlmIChidWYucmVtYWluaW5nKCkgPj0gMikge1xuICAgICAgICAvLyBXaG9sZSBoZWFkZXIgYXZhaWxhYmxlLCByZWFkIHRoYXRcbiAgICAgICAgcmV0dXJuIHRoaXMuX29uSGVhZGVyKGJ1Zi5yZWFkVUludDE2KCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT25seSBvbmUgYnl0ZSBhdmFpbGFibGUsIHJlYWQgdGhhdCBhbmQgd2FpdCBmb3IgdGhlIHNlY29uZCBieXRlXG4gICAgICAgIHRoaXMuX3BhcnRpYWxDaHVua0hlYWRlciA9IGJ1Zi5yZWFkVUludDgoKSA8PCA4O1xuICAgICAgICByZXR1cm4gdGhpcy5JTl9IRUFERVI7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnSU5fSEVBREVSJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gSU5fSEVBREVSKGJ1Zikge1xuICAgICAgLy8gRmlyc3QgaGVhZGVyIGJ5dGUgcmVhZCwgbm93IHdlIHJlYWQgdGhlIG5leHQgb25lXG4gICAgICByZXR1cm4gdGhpcy5fb25IZWFkZXIoKHRoaXMuX3BhcnRpYWxDaHVua0hlYWRlciB8IGJ1Zi5yZWFkVUludDgoKSkgJiAweEZGRkYpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ0lOX0NIVU5LJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gSU5fQ0hVTksoYnVmKSB7XG4gICAgICBpZiAodGhpcy5fY2h1bmtTaXplIDw9IGJ1Zi5yZW1haW5pbmcoKSkge1xuICAgICAgICAvLyBDdXJyZW50IHBhY2tldCBpcyBsYXJnZXIgdGhhbiBjdXJyZW50IGNodW5rLCBvciBzYW1lIHNpemU6XG4gICAgICAgIHRoaXMuX2N1cnJlbnRNZXNzYWdlLnB1c2goYnVmLnJlYWRTbGljZSh0aGlzLl9jaHVua1NpemUpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuQVdBSVRJTkdfQ0hVTks7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDdXJyZW50IHBhY2tldCBpcyBzbWFsbGVyIHRoYW4gdGhlIGNodW5rIHdlJ3JlIHJlYWRpbmcsIHNwbGl0IHRoZSBjdXJyZW50IGNodW5rIGl0c2VsZiB1cFxuICAgICAgICB0aGlzLl9jaHVua1NpemUgLT0gYnVmLnJlbWFpbmluZygpO1xuICAgICAgICB0aGlzLl9jdXJyZW50TWVzc2FnZS5wdXNoKGJ1Zi5yZWFkU2xpY2UoYnVmLnJlbWFpbmluZygpKSk7XG4gICAgICAgIHJldHVybiB0aGlzLklOX0NIVU5LO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ0NMT1NFRCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIENMT1NFRChidWYpIHt9XG4gICAgLy8gbm8tb3BcblxuXG4gICAgLyoqIENhbGxlZCB3aGVuIGEgY29tcGxldGUgY2h1bmsgaGVhZGVyIGhhcyBiZWVuIHJlY2lldmVkICovXG5cbiAgfSwge1xuICAgIGtleTogJ19vbkhlYWRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9vbkhlYWRlcihoZWFkZXIpIHtcbiAgICAgIGlmIChoZWFkZXIgPT0gMCkge1xuICAgICAgICAvLyBNZXNzYWdlIGJvdW5kYXJ5XG4gICAgICAgIHZhciBtZXNzYWdlID0gdm9pZCAwO1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudE1lc3NhZ2UubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICBtZXNzYWdlID0gdGhpcy5fY3VycmVudE1lc3NhZ2VbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVzc2FnZSA9IG5ldyBfYnVmLkNvbWJpbmVkQnVmZmVyKHRoaXMuX2N1cnJlbnRNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jdXJyZW50TWVzc2FnZSA9IFtdO1xuICAgICAgICB0aGlzLm9ubWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuQVdBSVRJTkdfQ0hVTks7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9jaHVua1NpemUgPSBoZWFkZXI7XG4gICAgICAgIHJldHVybiB0aGlzLklOX0NIVU5LO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3dyaXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gd3JpdGUoYnVmKSB7XG4gICAgICB3aGlsZSAoYnVmLmhhc1JlbWFpbmluZygpKSB7XG4gICAgICAgIHRoaXMuX3N0YXRlID0gdGhpcy5fc3RhdGUoYnVmKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIERlY2h1bmtlcjtcbn0oKTtcblxuZXhwb3J0cy5DaHVua2VyID0gQ2h1bmtlcjtcbmV4cG9ydHMuRGVjaHVua2VyID0gRGVjaHVua2VyOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuRU1QVFlfQ09OTkVDVElPTl9IT0xERVIgPSB1bmRlZmluZWQ7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxudmFyIF9nZXRQcm90b3R5cGVPZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRQcm90b3R5cGVPZik7XG5cbnZhciBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybicpO1xuXG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIpO1xuXG52YXIgX2luaGVyaXRzMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cycpO1xuXG52YXIgX2luaGVyaXRzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luaGVyaXRzMik7XG5cbnZhciBfcHJvbWlzZSA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9wcm9taXNlJyk7XG5cbnZhciBfcHJvbWlzZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9taXNlKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2snKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc0NhbGxDaGVjazIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcycpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbnZhciBfZXJyb3IgPSByZXF1aXJlKCcuLi9lcnJvcicpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIFV0aWxpdHkgdG8gbGF6aWx5IGluaXRpYWxpemUgY29ubmVjdGlvbnMgYW5kIHJldHVybiB0aGVtIGJhY2sgdG8gdGhlIHBvb2wgd2hlbiB1bnVzZWQuXG4gKi9cbnZhciBDb25uZWN0aW9uSG9sZGVyID0gZnVuY3Rpb24gKCkge1xuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGUgLSB0aGUgYWNjZXNzIG1vZGUgZm9yIG5ldyBjb25uZWN0aW9uIGhvbGRlci5cbiAgICogQHBhcmFtIHtDb25uZWN0aW9uUHJvdmlkZXJ9IGNvbm5lY3Rpb25Qcm92aWRlciAtIHRoZSBjb25uZWN0aW9uIHByb3ZpZGVyIHRvIGFjcXVpcmUgY29ubmVjdGlvbnMgZnJvbS5cbiAgICovXG4gIGZ1bmN0aW9uIENvbm5lY3Rpb25Ib2xkZXIobW9kZSwgY29ubmVjdGlvblByb3ZpZGVyKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgQ29ubmVjdGlvbkhvbGRlcik7XG5cbiAgICB0aGlzLl9tb2RlID0gbW9kZTtcbiAgICB0aGlzLl9jb25uZWN0aW9uUHJvdmlkZXIgPSBjb25uZWN0aW9uUHJvdmlkZXI7XG4gICAgdGhpcy5fcmVmZXJlbmNlQ291bnQgPSAwO1xuICAgIHRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlID0gX3Byb21pc2UyLmRlZmF1bHQucmVzb2x2ZShudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHRoaXMgaG9sZGVyIGluaXRpYWxpemUgbmV3IGNvbm5lY3Rpb24gaWYgbm9uZSBleGlzdHMgYWxyZWFkeS5cbiAgICogQHJldHVybiB7dW5kZWZpbmVkfVxuICAgKi9cblxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKENvbm5lY3Rpb25Ib2xkZXIsIFt7XG4gICAga2V5OiAnaW5pdGlhbGl6ZUNvbm5lY3Rpb24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0aWFsaXplQ29ubmVjdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLl9yZWZlcmVuY2VDb3VudCA9PT0gMCkge1xuICAgICAgICB0aGlzLl9jb25uZWN0aW9uUHJvbWlzZSA9IHRoaXMuX2Nvbm5lY3Rpb25Qcm92aWRlci5hY3F1aXJlQ29ubmVjdGlvbih0aGlzLl9tb2RlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3JlZmVyZW5jZUNvdW50Kys7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gcHJvbWlzZS5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPENvbm5lY3Rpb24+fSBwcm9taXNlIHJlc29sdmVkIHdpdGggdGhlIGN1cnJlbnQgY29ubmVjdGlvbi5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnZ2V0Q29ubmVjdGlvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldENvbm5lY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTm90aWZ5IHRoaXMgaG9sZGVyIHRoYXQgc2luZ2xlIHBhcnR5IGRvZXMgbm90IHJlcXVpcmUgY3VycmVudCBjb25uZWN0aW9uIGFueSBtb3JlLlxuICAgICAqIEByZXR1cm4ge1Byb21pc2U8Q29ubmVjdGlvbj59IHByb21pc2UgcmVzb2x2ZWQgd2l0aCB0aGUgY3VycmVudCBjb25uZWN0aW9uLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdyZWxlYXNlQ29ubmVjdGlvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbGVhc2VDb25uZWN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuX3JlZmVyZW5jZUNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uUHJvbWlzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVmZXJlbmNlQ291bnQtLTtcbiAgICAgIGlmICh0aGlzLl9yZWZlcmVuY2VDb3VudCA9PT0gMCkge1xuICAgICAgICAvLyByZWxlYXNlIGEgY29ubmVjdGlvbiB3aXRob3V0IG11dGluZyBBQ0tfRkFJTFVSRSwgdGhpcyBpcyB0aGUgbGFzdCBhY3Rpb24gb24gdGhpcyBjb25uZWN0aW9uXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWxlYXNlQ29ubmVjdGlvbih0cnVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uUHJvbWlzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhpcyBob2xkZXIgYW5kIHJlbGVhc2VzIGN1cnJlbnQgY29ubmVjdGlvbiAoaWYgYW55KSBkZXNwaXRlIGFueSBleGlzdGluZyB1c2Vycy5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPENvbm5lY3Rpb24+fSBwcm9taXNlIHJlc29sdmVkIHdoZW4gY3VycmVudCBjb25uZWN0aW9uIGlzIHJlbGVhc2VkIHRvIHRoZSBwb29sLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdjbG9zZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgaWYgKHRoaXMuX3JlZmVyZW5jZUNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uUHJvbWlzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3JlZmVyZW5jZUNvdW50ID0gMDtcbiAgICAgIC8vIHJlbGVhc2UgYSBjb25uZWN0aW9uIGFuZCBtdXRlIEFDS19GQUlMVVJFLCB0aGlzIG1pZ2h0IGJlIGNhbGxlZCBjb25jdXJyZW50bHkgd2l0aCBvdGhlclxuICAgICAgLy8gb3BlcmF0aW9ucyBhbmQgdGh1cyBzaG91bGQgaWdub3JlIGZhaWx1cmUgaGFuZGxpbmdcbiAgICAgIHJldHVybiB0aGlzLl9yZWxlYXNlQ29ubmVjdGlvbihmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBjdXJyZW50IHBvb2xlZCBjb25uZWN0aW9uIGluc3RhbmNlIHRvIHRoZSBjb25uZWN0aW9uIHBvb2wuXG4gICAgICogV2UgZG9uJ3QgcG9vbCBTZXNzaW9uIGluc3RhbmNlcywgdG8gYXZvaWQgdXNlcnMgdXNpbmcgdGhlIFNlc3Npb24gYWZ0ZXIgdGhleSd2ZSBjYWxsZWQgY2xvc2UuXG4gICAgICogVGhlIGBTZXNzaW9uYCBvYmplY3QgaXMganVzdCBhIHRoaW4gd3JhcHBlciBhcm91bmQgQ29ubmVjdGlvbiBhbnl3YXksIHNvIGl0IG1ha2VzIGxpdHRsZSBkaWZmZXJlbmNlLlxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9IC0gcHJvbWlzZSByZXNvbHZlZCB0aGVuIGNvbm5lY3Rpb24gaXMgcmV0dXJuZWQgdG8gdGhlIHBvb2wuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnX3JlbGVhc2VDb25uZWN0aW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3JlbGVhc2VDb25uZWN0aW9uKHN5bmMpIHtcbiAgICAgIHRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlID0gdGhpcy5fY29ubmVjdGlvblByb21pc2UudGhlbihmdW5jdGlvbiAoY29ubmVjdGlvbikge1xuICAgICAgICBpZiAoY29ubmVjdGlvbikge1xuICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICBjb25uZWN0aW9uLnJlc2V0KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb24ucmVzZXRBc3luYygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25uZWN0aW9uLnN5bmMoKTtcbiAgICAgICAgICBjb25uZWN0aW9uLl9yZWxlYXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChpZ25vcmVkRXJyb3IpIHt9KTtcblxuICAgICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gQ29ubmVjdGlvbkhvbGRlcjtcbn0oKTsgLyoqXG4gICAgICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAgICAgICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICAgICAgKlxuICAgICAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAgICAgICpcbiAgICAgICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICAgICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgICAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgICAgICpcbiAgICAgICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICAgICAgKlxuICAgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICAgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICAgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gICAgICAqL1xuXG5leHBvcnRzLmRlZmF1bHQgPSBDb25uZWN0aW9uSG9sZGVyO1xuXG52YXIgRW1wdHlDb25uZWN0aW9uSG9sZGVyID0gZnVuY3Rpb24gKF9Db25uZWN0aW9uSG9sZGVyKSB7XG4gICgwLCBfaW5oZXJpdHMzLmRlZmF1bHQpKEVtcHR5Q29ubmVjdGlvbkhvbGRlciwgX0Nvbm5lY3Rpb25Ib2xkZXIpO1xuXG4gIGZ1bmN0aW9uIEVtcHR5Q29ubmVjdGlvbkhvbGRlcigpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBFbXB0eUNvbm5lY3Rpb25Ib2xkZXIpO1xuICAgIHJldHVybiAoMCwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zLmRlZmF1bHQpKHRoaXMsIChFbXB0eUNvbm5lY3Rpb25Ib2xkZXIuX19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKEVtcHR5Q29ubmVjdGlvbkhvbGRlcikpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoRW1wdHlDb25uZWN0aW9uSG9sZGVyLCBbe1xuICAgIGtleTogJ2luaXRpYWxpemVDb25uZWN0aW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdGlhbGl6ZUNvbm5lY3Rpb24oKSB7XG4gICAgICAvLyBub3RoaW5nIHRvIGluaXRpYWxpemVcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdnZXRDb25uZWN0aW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q29ubmVjdGlvbigpIHtcbiAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5yZWplY3QoKDAsIF9lcnJvci5uZXdFcnJvcikoJ1RoaXMgY29ubmVjdGlvbiBob2xkZXIgZG9lcyBub3Qgc2VydmUgY29ubmVjdGlvbnMnKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVsZWFzZUNvbm5lY3Rpb24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWxlYXNlQ29ubmVjdGlvbigpIHtcbiAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5yZXNvbHZlKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY2xvc2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5yZXNvbHZlKCk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBFbXB0eUNvbm5lY3Rpb25Ib2xkZXI7XG59KENvbm5lY3Rpb25Ib2xkZXIpO1xuXG4vKipcbiAqIENvbm5lY3Rpb24gaG9sZGVyIHRoYXQgZG9lcyBub3QgbWFuYWdlIGFueSBjb25uZWN0aW9ucy5cbiAqIEB0eXBlIHtDb25uZWN0aW9uSG9sZGVyfVxuICovXG5cblxudmFyIEVNUFRZX0NPTk5FQ1RJT05fSE9MREVSID0gZXhwb3J0cy5FTVBUWV9DT05ORUNUSU9OX0hPTERFUiA9IG5ldyBFbXB0eUNvbm5lY3Rpb25Ib2xkZXIoKTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlNpbmdsZUNvbm5lY3Rpb25Qcm92aWRlciA9IGV4cG9ydHMuTG9hZEJhbGFuY2VyID0gZXhwb3J0cy5EaXJlY3RDb25uZWN0aW9uUHJvdmlkZXIgPSB1bmRlZmluZWQ7XG5cbnZhciBfcHJvbWlzZSA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9wcm9taXNlJyk7XG5cbnZhciBfcHJvbWlzZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9taXNlKTtcblxudmFyIF9nZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG52YXIgX2dldFByb3RvdHlwZU9mMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dldFByb3RvdHlwZU9mKTtcblxudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuJyk7XG5cbnZhciBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMik7XG5cbnZhciBfaW5oZXJpdHMyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzJyk7XG5cbnZhciBfaW5oZXJpdHMzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5oZXJpdHMyKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2snKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc0NhbGxDaGVjazIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcycpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbnZhciBfZXJyb3IgPSByZXF1aXJlKCcuLi9lcnJvcicpO1xuXG52YXIgX2RyaXZlciA9IHJlcXVpcmUoJy4uL2RyaXZlcicpO1xuXG52YXIgX3Nlc3Npb24gPSByZXF1aXJlKCcuLi9zZXNzaW9uJyk7XG5cbnZhciBfc2Vzc2lvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zZXNzaW9uKTtcblxudmFyIF9yb3VuZFJvYmluQXJyYXkgPSByZXF1aXJlKCcuL3JvdW5kLXJvYmluLWFycmF5Jyk7XG5cbnZhciBfcm91bmRSb2JpbkFycmF5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JvdW5kUm9iaW5BcnJheSk7XG5cbnZhciBfcm91dGluZ1RhYmxlID0gcmVxdWlyZSgnLi9yb3V0aW5nLXRhYmxlJyk7XG5cbnZhciBfcm91dGluZ1RhYmxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JvdXRpbmdUYWJsZSk7XG5cbnZhciBfcmVkaXNjb3ZlcnkgPSByZXF1aXJlKCcuL3JlZGlzY292ZXJ5Jyk7XG5cbnZhciBfcmVkaXNjb3ZlcnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVkaXNjb3ZlcnkpO1xuXG52YXIgX2ZlYXR1cmVzID0gcmVxdWlyZSgnLi9mZWF0dXJlcycpO1xuXG52YXIgX2ZlYXR1cmVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ZlYXR1cmVzKTtcblxudmFyIF9ob3N0TmFtZVJlc29sdmVycyA9IHJlcXVpcmUoJy4vaG9zdC1uYW1lLXJlc29sdmVycycpO1xuXG52YXIgX3JvdXRpbmdVdGlsID0gcmVxdWlyZSgnLi9yb3V0aW5nLXV0aWwnKTtcblxudmFyIF9yb3V0aW5nVXRpbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yb3V0aW5nVXRpbCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBDb25uZWN0aW9uUHJvdmlkZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENvbm5lY3Rpb25Qcm92aWRlcigpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBDb25uZWN0aW9uUHJvdmlkZXIpO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoQ29ubmVjdGlvblByb3ZpZGVyLCBbe1xuICAgIGtleTogJ2FjcXVpcmVDb25uZWN0aW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWNxdWlyZUNvbm5lY3Rpb24obW9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBYnN0cmFjdCBmdW5jdGlvbicpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ193aXRoQWRkaXRpb25hbE9uRXJyb3JDYWxsYmFjaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF93aXRoQWRkaXRpb25hbE9uRXJyb3JDYWxsYmFjayhjb25uZWN0aW9uUHJvbWlzZSwgZHJpdmVyT25FcnJvckNhbGxiYWNrKSB7XG4gICAgICAvLyBpbnN0YWxsIGVycm9yIGhhbmRsZXIgZnJvbSB0aGUgZHJpdmVyIG9uIHRoZSBjb25uZWN0aW9uIHByb21pc2U7IHRoaXMgY2FsbGJhY2sgaXMgaW5zdGFsbGVkIHNlcGFyYXRlbHlcbiAgICAgIC8vIHNvIHRoYXQgaXQgZG9lcyBub3QgaGFuZGxlIGVycm9ycywgaW5zdGVhZCBpdCBpcyBqdXN0IGFuIGFkZGl0aW9uYWwgZXJyb3IgcmVwb3J0aW5nIGZhY2lsaXR5LlxuICAgICAgY29ubmVjdGlvblByb21pc2UuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGRyaXZlck9uRXJyb3JDYWxsYmFjayhlcnJvcik7XG4gICAgICB9KTtcbiAgICAgIC8vIHJldHVybiB0aGUgb3JpZ2luYWwgY29ubmVjdGlvbiBwcm9taXNlXG4gICAgICByZXR1cm4gY29ubmVjdGlvblByb21pc2U7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBDb25uZWN0aW9uUHJvdmlkZXI7XG59KCk7IC8qKlxuICAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gICAgICAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAgICAgICpcbiAgICAgICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gICAgICAqXG4gICAgICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgICAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICAgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gICAgICAqXG4gICAgICAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAgICAgICpcbiAgICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgICAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgICAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAgICAgKi9cblxudmFyIERpcmVjdENvbm5lY3Rpb25Qcm92aWRlciA9IGV4cG9ydHMuRGlyZWN0Q29ubmVjdGlvblByb3ZpZGVyID0gZnVuY3Rpb24gKF9Db25uZWN0aW9uUHJvdmlkZXIpIHtcbiAgKDAsIF9pbmhlcml0czMuZGVmYXVsdCkoRGlyZWN0Q29ubmVjdGlvblByb3ZpZGVyLCBfQ29ubmVjdGlvblByb3ZpZGVyKTtcblxuICBmdW5jdGlvbiBEaXJlY3RDb25uZWN0aW9uUHJvdmlkZXIoYWRkcmVzcywgY29ubmVjdGlvblBvb2wsIGRyaXZlck9uRXJyb3JDYWxsYmFjaykge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIERpcmVjdENvbm5lY3Rpb25Qcm92aWRlcik7XG5cbiAgICB2YXIgX3RoaXMgPSAoMCwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zLmRlZmF1bHQpKHRoaXMsIChEaXJlY3RDb25uZWN0aW9uUHJvdmlkZXIuX19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKERpcmVjdENvbm5lY3Rpb25Qcm92aWRlcikpLmNhbGwodGhpcykpO1xuXG4gICAgX3RoaXMuX2FkZHJlc3MgPSBhZGRyZXNzO1xuICAgIF90aGlzLl9jb25uZWN0aW9uUG9vbCA9IGNvbm5lY3Rpb25Qb29sO1xuICAgIF90aGlzLl9kcml2ZXJPbkVycm9yQ2FsbGJhY2sgPSBkcml2ZXJPbkVycm9yQ2FsbGJhY2s7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoRGlyZWN0Q29ubmVjdGlvblByb3ZpZGVyLCBbe1xuICAgIGtleTogJ2FjcXVpcmVDb25uZWN0aW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWNxdWlyZUNvbm5lY3Rpb24obW9kZSkge1xuICAgICAgdmFyIGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uUG9vbC5hY3F1aXJlKHRoaXMuX2FkZHJlc3MpO1xuICAgICAgdmFyIGNvbm5lY3Rpb25Qcm9taXNlID0gX3Byb21pc2UyLmRlZmF1bHQucmVzb2x2ZShjb25uZWN0aW9uKTtcbiAgICAgIHJldHVybiB0aGlzLl93aXRoQWRkaXRpb25hbE9uRXJyb3JDYWxsYmFjayhjb25uZWN0aW9uUHJvbWlzZSwgdGhpcy5fZHJpdmVyT25FcnJvckNhbGxiYWNrKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIERpcmVjdENvbm5lY3Rpb25Qcm92aWRlcjtcbn0oQ29ubmVjdGlvblByb3ZpZGVyKTtcblxudmFyIExvYWRCYWxhbmNlciA9IGV4cG9ydHMuTG9hZEJhbGFuY2VyID0gZnVuY3Rpb24gKF9Db25uZWN0aW9uUHJvdmlkZXIyKSB7XG4gICgwLCBfaW5oZXJpdHMzLmRlZmF1bHQpKExvYWRCYWxhbmNlciwgX0Nvbm5lY3Rpb25Qcm92aWRlcjIpO1xuXG4gIGZ1bmN0aW9uIExvYWRCYWxhbmNlcihhZGRyZXNzLCByb3V0aW5nQ29udGV4dCwgY29ubmVjdGlvblBvb2wsIGRyaXZlck9uRXJyb3JDYWxsYmFjaykge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIExvYWRCYWxhbmNlcik7XG5cbiAgICB2YXIgX3RoaXMyID0gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoTG9hZEJhbGFuY2VyLl9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShMb2FkQmFsYW5jZXIpKS5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzMi5fc2VlZFJvdXRlciA9IGFkZHJlc3M7XG4gICAgX3RoaXMyLl9yb3V0aW5nVGFibGUgPSBuZXcgX3JvdXRpbmdUYWJsZTIuZGVmYXVsdChuZXcgX3JvdW5kUm9iaW5BcnJheTIuZGVmYXVsdChbX3RoaXMyLl9zZWVkUm91dGVyXSkpO1xuICAgIF90aGlzMi5fcmVkaXNjb3ZlcnkgPSBuZXcgX3JlZGlzY292ZXJ5Mi5kZWZhdWx0KG5ldyBfcm91dGluZ1V0aWwyLmRlZmF1bHQocm91dGluZ0NvbnRleHQpKTtcbiAgICBfdGhpczIuX2Nvbm5lY3Rpb25Qb29sID0gY29ubmVjdGlvblBvb2w7XG4gICAgX3RoaXMyLl9kcml2ZXJPbkVycm9yQ2FsbGJhY2sgPSBkcml2ZXJPbkVycm9yQ2FsbGJhY2s7XG4gICAgX3RoaXMyLl9ob3N0TmFtZVJlc29sdmVyID0gTG9hZEJhbGFuY2VyLl9jcmVhdGVIb3N0TmFtZVJlc29sdmVyKCk7XG4gICAgX3RoaXMyLl91c2VTZWVkUm91dGVyID0gZmFsc2U7XG4gICAgcmV0dXJuIF90aGlzMjtcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKExvYWRCYWxhbmNlciwgW3tcbiAgICBrZXk6ICdhY3F1aXJlQ29ubmVjdGlvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFjcXVpcmVDb25uZWN0aW9uKGFjY2Vzc01vZGUpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgY29ubmVjdGlvblByb21pc2UgPSB0aGlzLl9mcmVzaFJvdXRpbmdUYWJsZShhY2Nlc3NNb2RlKS50aGVuKGZ1bmN0aW9uIChyb3V0aW5nVGFibGUpIHtcbiAgICAgICAgaWYgKGFjY2Vzc01vZGUgPT09IF9kcml2ZXIuUkVBRCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczMuX2FjcXVpcmVDb25uZWN0aW9uVG9TZXJ2ZXIocm91dGluZ1RhYmxlLnJlYWRlcnMsICdyZWFkJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYWNjZXNzTW9kZSA9PT0gX2RyaXZlci5XUklURSkge1xuICAgICAgICAgIHJldHVybiBfdGhpczMuX2FjcXVpcmVDb25uZWN0aW9uVG9TZXJ2ZXIocm91dGluZ1RhYmxlLndyaXRlcnMsICd3cml0ZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93ICgwLCBfZXJyb3IubmV3RXJyb3IpKCdJbGxlZ2FsIG1vZGUgJyArIGFjY2Vzc01vZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0aGlzLl93aXRoQWRkaXRpb25hbE9uRXJyb3JDYWxsYmFjayhjb25uZWN0aW9uUHJvbWlzZSwgdGhpcy5fZHJpdmVyT25FcnJvckNhbGxiYWNrKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdmb3JnZXQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JnZXQoYWRkcmVzcykge1xuICAgICAgdGhpcy5fcm91dGluZ1RhYmxlLmZvcmdldChhZGRyZXNzKTtcbiAgICAgIHRoaXMuX2Nvbm5lY3Rpb25Qb29sLnB1cmdlKGFkZHJlc3MpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2ZvcmdldFdyaXRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvcmdldFdyaXRlcihhZGRyZXNzKSB7XG4gICAgICB0aGlzLl9yb3V0aW5nVGFibGUuZm9yZ2V0V3JpdGVyKGFkZHJlc3MpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19hY3F1aXJlQ29ubmVjdGlvblRvU2VydmVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2FjcXVpcmVDb25uZWN0aW9uVG9TZXJ2ZXIoc2VydmVyc1JvdW5kUm9iaW5BcnJheSwgc2VydmVyTmFtZSkge1xuICAgICAgdmFyIGFkZHJlc3MgPSBzZXJ2ZXJzUm91bmRSb2JpbkFycmF5Lm5leHQoKTtcbiAgICAgIGlmICghYWRkcmVzcykge1xuICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQucmVqZWN0KCgwLCBfZXJyb3IubmV3RXJyb3IpKCdGYWlsZWQgdG8gb2J0YWluIGNvbm5lY3Rpb24gdG93YXJkcyAnICsgc2VydmVyTmFtZSArICcgc2VydmVyLiBLbm93biByb3V0aW5nIHRhYmxlIGlzOiAnICsgdGhpcy5fcm91dGluZ1RhYmxlLCBfZXJyb3IuU0VTU0lPTl9FWFBJUkVEKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblBvb2wuYWNxdWlyZShhZGRyZXNzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZnJlc2hSb3V0aW5nVGFibGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZnJlc2hSb3V0aW5nVGFibGUoYWNjZXNzTW9kZSkge1xuICAgICAgdmFyIGN1cnJlbnRSb3V0aW5nVGFibGUgPSB0aGlzLl9yb3V0aW5nVGFibGU7XG5cbiAgICAgIGlmICghY3VycmVudFJvdXRpbmdUYWJsZS5pc1N0YWxlRm9yKGFjY2Vzc01vZGUpKSB7XG4gICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5yZXNvbHZlKGN1cnJlbnRSb3V0aW5nVGFibGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX3JlZnJlc2hSb3V0aW5nVGFibGUoY3VycmVudFJvdXRpbmdUYWJsZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX3JlZnJlc2hSb3V0aW5nVGFibGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfcmVmcmVzaFJvdXRpbmdUYWJsZShjdXJyZW50Um91dGluZ1RhYmxlKSB7XG4gICAgICB2YXIga25vd25Sb3V0ZXJzID0gY3VycmVudFJvdXRpbmdUYWJsZS5yb3V0ZXJzLnRvQXJyYXkoKTtcblxuICAgICAgaWYgKHRoaXMuX3VzZVNlZWRSb3V0ZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoUm91dGluZ1RhYmxlRnJvbVNlZWRSb3V0ZXJGYWxsYmFja1RvS25vd25Sb3V0ZXJzKGtub3duUm91dGVycywgY3VycmVudFJvdXRpbmdUYWJsZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fZmV0Y2hSb3V0aW5nVGFibGVGcm9tS25vd25Sb3V0ZXJzRmFsbGJhY2tUb1NlZWRSb3V0ZXIoa25vd25Sb3V0ZXJzLCBjdXJyZW50Um91dGluZ1RhYmxlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZmV0Y2hSb3V0aW5nVGFibGVGcm9tU2VlZFJvdXRlckZhbGxiYWNrVG9Lbm93blJvdXRlcnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZmV0Y2hSb3V0aW5nVGFibGVGcm9tU2VlZFJvdXRlckZhbGxiYWNrVG9Lbm93blJvdXRlcnMoa25vd25Sb3V0ZXJzLCBjdXJyZW50Um91dGluZ1RhYmxlKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgLy8gd2Ugc3RhcnQgd2l0aCBzZWVkIHJvdXRlciwgbm8gcm91dGVycyB3ZXJlIHByb2JlZCBiZWZvcmVcbiAgICAgIHZhciBzZWVuUm91dGVycyA9IFtdO1xuICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoUm91dGluZ1RhYmxlVXNpbmdTZWVkUm91dGVyKHNlZW5Sb3V0ZXJzLCB0aGlzLl9zZWVkUm91dGVyKS50aGVuKGZ1bmN0aW9uIChuZXdSb3V0aW5nVGFibGUpIHtcbiAgICAgICAgaWYgKG5ld1JvdXRpbmdUYWJsZSkge1xuICAgICAgICAgIF90aGlzNC5fdXNlU2VlZFJvdXRlciA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXdSb3V0aW5nVGFibGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZWVkIHJvdXRlciBkaWQgbm90IHJldHVybiBhIHZhbGlkIHJvdXRpbmcgdGFibGUgLSB0cnkgdG8gdXNlIG90aGVyIGtub3duIHJvdXRlcnNcbiAgICAgICAgcmV0dXJuIF90aGlzNC5fZmV0Y2hSb3V0aW5nVGFibGVVc2luZ0tub3duUm91dGVycyhrbm93blJvdXRlcnMsIGN1cnJlbnRSb3V0aW5nVGFibGUpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAobmV3Um91dGluZ1RhYmxlKSB7XG4gICAgICAgIF90aGlzNC5fYXBwbHlSb3V0aW5nVGFibGVJZlBvc3NpYmxlKG5ld1JvdXRpbmdUYWJsZSk7XG4gICAgICAgIHJldHVybiBuZXdSb3V0aW5nVGFibGU7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZmV0Y2hSb3V0aW5nVGFibGVGcm9tS25vd25Sb3V0ZXJzRmFsbGJhY2tUb1NlZWRSb3V0ZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZmV0Y2hSb3V0aW5nVGFibGVGcm9tS25vd25Sb3V0ZXJzRmFsbGJhY2tUb1NlZWRSb3V0ZXIoa25vd25Sb3V0ZXJzLCBjdXJyZW50Um91dGluZ1RhYmxlKSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoUm91dGluZ1RhYmxlVXNpbmdLbm93blJvdXRlcnMoa25vd25Sb3V0ZXJzLCBjdXJyZW50Um91dGluZ1RhYmxlKS50aGVuKGZ1bmN0aW9uIChuZXdSb3V0aW5nVGFibGUpIHtcbiAgICAgICAgaWYgKG5ld1JvdXRpbmdUYWJsZSkge1xuICAgICAgICAgIHJldHVybiBuZXdSb3V0aW5nVGFibGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBub25lIG9mIHRoZSBrbm93biByb3V0ZXJzIHJldHVybmVkIGEgdmFsaWQgcm91dGluZyB0YWJsZSAtIHRyeSB0byB1c2Ugc2VlZCByb3V0ZXIgYWRkcmVzcyBmb3IgcmVkaXNjb3ZlcnlcbiAgICAgICAgcmV0dXJuIF90aGlzNS5fZmV0Y2hSb3V0aW5nVGFibGVVc2luZ1NlZWRSb3V0ZXIoa25vd25Sb3V0ZXJzLCBfdGhpczUuX3NlZWRSb3V0ZXIpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAobmV3Um91dGluZ1RhYmxlKSB7XG4gICAgICAgIF90aGlzNS5fYXBwbHlSb3V0aW5nVGFibGVJZlBvc3NpYmxlKG5ld1JvdXRpbmdUYWJsZSk7XG4gICAgICAgIHJldHVybiBuZXdSb3V0aW5nVGFibGU7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZmV0Y2hSb3V0aW5nVGFibGVVc2luZ0tub3duUm91dGVycycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9mZXRjaFJvdXRpbmdUYWJsZVVzaW5nS25vd25Sb3V0ZXJzKGtub3duUm91dGVycywgY3VycmVudFJvdXRpbmdUYWJsZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoUm91dGluZ1RhYmxlKGtub3duUm91dGVycywgY3VycmVudFJvdXRpbmdUYWJsZSkudGhlbihmdW5jdGlvbiAobmV3Um91dGluZ1RhYmxlKSB7XG4gICAgICAgIGlmIChuZXdSb3V0aW5nVGFibGUpIHtcbiAgICAgICAgICAvLyBvbmUgb2YgdGhlIGtub3duIHJvdXRlcnMgcmV0dXJuZWQgYSB2YWxpZCByb3V0aW5nIHRhYmxlIC0gdXNlIGl0XG4gICAgICAgICAgcmV0dXJuIG5ld1JvdXRpbmdUYWJsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJldHVybmVkIHJvdXRpbmcgdGFibGUgd2FzIHVuZGVmaW5lZCwgdGhpcyBtZWFucyBhIGNvbm5lY3Rpb24gZXJyb3IgaGFwcGVuZWQgYW5kIHRoZSBsYXN0IGtub3duXG4gICAgICAgIC8vIHJvdXRlciBkaWQgbm90IHJldHVybiBhIHZhbGlkIHJvdXRpbmcgdGFibGUsIHNvIHdlIG5lZWQgdG8gZm9yZ2V0IGl0XG4gICAgICAgIHZhciBsYXN0Um91dGVySW5kZXggPSBrbm93blJvdXRlcnMubGVuZ3RoIC0gMTtcbiAgICAgICAgTG9hZEJhbGFuY2VyLl9mb3JnZXRSb3V0ZXIoY3VycmVudFJvdXRpbmdUYWJsZSwga25vd25Sb3V0ZXJzLCBsYXN0Um91dGVySW5kZXgpO1xuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2ZldGNoUm91dGluZ1RhYmxlVXNpbmdTZWVkUm91dGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2ZldGNoUm91dGluZ1RhYmxlVXNpbmdTZWVkUm91dGVyKHNlZW5Sb3V0ZXJzLCBzZWVkUm91dGVyKSB7XG4gICAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgICAgcmV0dXJuIHRoaXMuX2hvc3ROYW1lUmVzb2x2ZXIucmVzb2x2ZShzZWVkUm91dGVyKS50aGVuKGZ1bmN0aW9uIChyZXNvbHZlZFJvdXRlckFkZHJlc3Nlcykge1xuICAgICAgICAvLyBmaWx0ZXIgb3V0IGFsbCBhZGRyZXNzZXMgdGhhdCB3ZSd2ZSBhbHJlYWR5IHRyaWVkXG4gICAgICAgIHZhciBuZXdBZGRyZXNzZXMgPSByZXNvbHZlZFJvdXRlckFkZHJlc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGFkZHJlc3MpIHtcbiAgICAgICAgICByZXR1cm4gc2VlblJvdXRlcnMuaW5kZXhPZihhZGRyZXNzKSA8IDA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM2Ll9mZXRjaFJvdXRpbmdUYWJsZShuZXdBZGRyZXNzZXMsIG51bGwpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2ZldGNoUm91dGluZ1RhYmxlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2ZldGNoUm91dGluZ1RhYmxlKHJvdXRlckFkZHJlc3Nlcywgcm91dGluZ1RhYmxlKSB7XG4gICAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgICAgcmV0dXJuIHJvdXRlckFkZHJlc3Nlcy5yZWR1Y2UoZnVuY3Rpb24gKHJlZnJlc2hlZFRhYmxlUHJvbWlzZSwgY3VycmVudFJvdXRlciwgY3VycmVudEluZGV4KSB7XG4gICAgICAgIHJldHVybiByZWZyZXNoZWRUYWJsZVByb21pc2UudGhlbihmdW5jdGlvbiAobmV3Um91dGluZ1RhYmxlKSB7XG4gICAgICAgICAgaWYgKG5ld1JvdXRpbmdUYWJsZSkge1xuICAgICAgICAgICAgLy8gdmFsaWQgcm91dGluZyB0YWJsZSB3YXMgZmV0Y2hlZCAtIGp1c3QgcmV0dXJuIGl0LCB0cnkgbmV4dCByb3V0ZXIgb3RoZXJ3aXNlXG4gICAgICAgICAgICByZXR1cm4gbmV3Um91dGluZ1RhYmxlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZXR1cm5lZCByb3V0aW5nIHRhYmxlIHdhcyB1bmRlZmluZWQsIHRoaXMgbWVhbnMgYSBjb25uZWN0aW9uIGVycm9yIGhhcHBlbmVkIGFuZCB3ZSBuZWVkIHRvIGZvcmdldCB0aGVcbiAgICAgICAgICAgIC8vIHByZXZpb3VzIHJvdXRlciBhbmQgdHJ5IHRoZSBuZXh0IG9uZVxuICAgICAgICAgICAgdmFyIHByZXZpb3VzUm91dGVySW5kZXggPSBjdXJyZW50SW5kZXggLSAxO1xuICAgICAgICAgICAgTG9hZEJhbGFuY2VyLl9mb3JnZXRSb3V0ZXIocm91dGluZ1RhYmxlLCByb3V0ZXJBZGRyZXNzZXMsIHByZXZpb3VzUm91dGVySW5kZXgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHRyeSBuZXh0IHJvdXRlclxuICAgICAgICAgIHZhciBzZXNzaW9uID0gX3RoaXM3Ll9jcmVhdGVTZXNzaW9uRm9yUmVkaXNjb3ZlcnkoY3VycmVudFJvdXRlcik7XG4gICAgICAgICAgcmV0dXJuIF90aGlzNy5fcmVkaXNjb3ZlcnkubG9va3VwUm91dGluZ1RhYmxlT25Sb3V0ZXIoc2Vzc2lvbiwgY3VycmVudFJvdXRlcik7XG4gICAgICAgIH0pO1xuICAgICAgfSwgX3Byb21pc2UyLmRlZmF1bHQucmVzb2x2ZShudWxsKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2NyZWF0ZVNlc3Npb25Gb3JSZWRpc2NvdmVyeScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jcmVhdGVTZXNzaW9uRm9yUmVkaXNjb3Zlcnkocm91dGVyQWRkcmVzcykge1xuICAgICAgdmFyIGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uUG9vbC5hY3F1aXJlKHJvdXRlckFkZHJlc3MpO1xuICAgICAgLy8gaW5pdGlhbGl6ZWQgY29ubmVjdGlvbiBpcyByZXF1aXJlZCBmb3Igcm91dGluZyBwcm9jZWR1cmUgY2FsbFxuICAgICAgLy8gc2VydmVyIHZlcnNpb24gbmVlZHMgdG8gYmUga25vd24gdG8gZGVjaWRlIHdoaWNoIHJvdXRpbmcgcHJvY2VkdXJlIHRvIHVzZVxuICAgICAgdmFyIGluaXRpYWxpemVkQ29ubmVjdGlvblByb21pc2UgPSBjb25uZWN0aW9uLmluaXRpYWxpemF0aW9uQ29tcGxldGVkKCk7XG4gICAgICB2YXIgY29ubmVjdGlvblByb3ZpZGVyID0gbmV3IFNpbmdsZUNvbm5lY3Rpb25Qcm92aWRlcihpbml0aWFsaXplZENvbm5lY3Rpb25Qcm9taXNlKTtcbiAgICAgIHJldHVybiBuZXcgX3Nlc3Npb24yLmRlZmF1bHQoX2RyaXZlci5SRUFELCBjb25uZWN0aW9uUHJvdmlkZXIpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19hcHBseVJvdXRpbmdUYWJsZUlmUG9zc2libGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfYXBwbHlSb3V0aW5nVGFibGVJZlBvc3NpYmxlKG5ld1JvdXRpbmdUYWJsZSkge1xuICAgICAgaWYgKCFuZXdSb3V0aW5nVGFibGUpIHtcbiAgICAgICAgLy8gbm9uZSBvZiByb3V0aW5nIHNlcnZlcnMgcmV0dXJuZWQgdmFsaWQgcm91dGluZyB0YWJsZSwgdGhyb3cgZXhjZXB0aW9uXG4gICAgICAgIHRocm93ICgwLCBfZXJyb3IubmV3RXJyb3IpKCdDb3VsZCBub3QgcGVyZm9ybSBkaXNjb3ZlcnkuIE5vIHJvdXRpbmcgc2VydmVycyBhdmFpbGFibGUuIEtub3duIHJvdXRpbmcgdGFibGU6ICcgKyB0aGlzLl9yb3V0aW5nVGFibGUsIF9lcnJvci5TRVJWSUNFX1VOQVZBSUxBQkxFKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1JvdXRpbmdUYWJsZS53cml0ZXJzLmlzRW1wdHkoKSkge1xuICAgICAgICAvLyB1c2Ugc2VlZCByb3V0ZXIgbmV4dCB0aW1lLiB0aGlzIGlzIGltcG9ydGFudCB3aGVuIGNsdXN0ZXIgaXMgcGFydGl0aW9uZWQuIGl0IHRyaWVzIHRvIG1ha2Ugc3VyZSBkcml2ZXJcbiAgICAgICAgLy8gZG9lcyBub3QgYWx3YXlzIGdldCByb3V0aW5nIHRhYmxlIHdpdGhvdXQgd3JpdGVycyBiZWNhdXNlIGl0IHRhbGtzIGV4Y2x1c2l2ZWx5IHRvIGEgbWlub3JpdHkgcGFydGl0aW9uXG4gICAgICAgIHRoaXMuX3VzZVNlZWRSb3V0ZXIgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl91cGRhdGVSb3V0aW5nVGFibGUobmV3Um91dGluZ1RhYmxlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfdXBkYXRlUm91dGluZ1RhYmxlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3VwZGF0ZVJvdXRpbmdUYWJsZShuZXdSb3V0aW5nVGFibGUpIHtcbiAgICAgIHZhciBfdGhpczggPSB0aGlzO1xuXG4gICAgICB2YXIgY3VycmVudFJvdXRpbmdUYWJsZSA9IHRoaXMuX3JvdXRpbmdUYWJsZTtcblxuICAgICAgLy8gY2xvc2Ugb2xkIGNvbm5lY3Rpb25zIHRvIHNlcnZlcnMgbm90IHByZXNlbnQgaW4gdGhlIG5ldyByb3V0aW5nIHRhYmxlXG4gICAgICB2YXIgc3RhbGVTZXJ2ZXJzID0gY3VycmVudFJvdXRpbmdUYWJsZS5zZXJ2ZXJzRGlmZihuZXdSb3V0aW5nVGFibGUpO1xuICAgICAgc3RhbGVTZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gKHNlcnZlcikge1xuICAgICAgICByZXR1cm4gX3RoaXM4Ll9jb25uZWN0aW9uUG9vbC5wdXJnZShzZXJ2ZXIpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIG1ha2UgdGhpcyBkcml2ZXIgaW5zdGFuY2UgYXdhcmUgb2YgdGhlIG5ldyB0YWJsZVxuICAgICAgdGhpcy5fcm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlO1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiAnX2ZvcmdldFJvdXRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9mb3JnZXRSb3V0ZXIocm91dGluZ1RhYmxlLCByb3V0ZXJzQXJyYXksIHJvdXRlckluZGV4KSB7XG4gICAgICB2YXIgYWRkcmVzcyA9IHJvdXRlcnNBcnJheVtyb3V0ZXJJbmRleF07XG4gICAgICBpZiAocm91dGluZ1RhYmxlICYmIGFkZHJlc3MpIHtcbiAgICAgICAgcm91dGluZ1RhYmxlLmZvcmdldFJvdXRlcihhZGRyZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfY3JlYXRlSG9zdE5hbWVSZXNvbHZlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jcmVhdGVIb3N0TmFtZVJlc29sdmVyKCkge1xuICAgICAgaWYgKCgwLCBfZmVhdHVyZXMyLmRlZmF1bHQpKCdkbnNfbG9va3VwJykpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfaG9zdE5hbWVSZXNvbHZlcnMuRG5zSG9zdE5hbWVSZXNvbHZlcigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBfaG9zdE5hbWVSZXNvbHZlcnMuRHVtbXlIb3N0TmFtZVJlc29sdmVyKCk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBMb2FkQmFsYW5jZXI7XG59KENvbm5lY3Rpb25Qcm92aWRlcik7XG5cbnZhciBTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIgPSBleHBvcnRzLlNpbmdsZUNvbm5lY3Rpb25Qcm92aWRlciA9IGZ1bmN0aW9uIChfQ29ubmVjdGlvblByb3ZpZGVyMykge1xuICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIsIF9Db25uZWN0aW9uUHJvdmlkZXIzKTtcblxuICBmdW5jdGlvbiBTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIoY29ubmVjdGlvblByb21pc2UpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIpO1xuXG4gICAgdmFyIF90aGlzOSA9ICgwLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMuZGVmYXVsdCkodGhpcywgKFNpbmdsZUNvbm5lY3Rpb25Qcm92aWRlci5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoU2luZ2xlQ29ubmVjdGlvblByb3ZpZGVyKSkuY2FsbCh0aGlzKSk7XG5cbiAgICBfdGhpczkuX2Nvbm5lY3Rpb25Qcm9taXNlID0gY29ubmVjdGlvblByb21pc2U7XG4gICAgcmV0dXJuIF90aGlzOTtcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKFNpbmdsZUNvbm5lY3Rpb25Qcm92aWRlciwgW3tcbiAgICBrZXk6ICdhY3F1aXJlQ29ubmVjdGlvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFjcXVpcmVDb25uZWN0aW9uKG1vZGUpIHtcbiAgICAgIHZhciBjb25uZWN0aW9uUHJvbWlzZSA9IHRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlO1xuICAgICAgdGhpcy5fY29ubmVjdGlvblByb21pc2UgPSBudWxsO1xuICAgICAgcmV0dXJuIGNvbm5lY3Rpb25Qcm9taXNlO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gU2luZ2xlQ29ubmVjdGlvblByb3ZpZGVyO1xufShDb25uZWN0aW9uUHJvdmlkZXIpOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ29ubmVjdGlvbiA9IGV4cG9ydHMuY29ubmVjdCA9IHVuZGVmaW5lZDtcblxudmFyIF9wcm9taXNlID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UnKTtcblxudmFyIF9wcm9taXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb21pc2UpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjaycpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzJyk7XG5cbnZhciBfY3JlYXRlQ2xhc3MzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlQ2xhc3MyKTtcblxudmFyIF9zdHJpbmdpZnkgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvanNvbi9zdHJpbmdpZnknKTtcblxudmFyIF9zdHJpbmdpZnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3RyaW5naWZ5KTtcblxudmFyIF9jaFdlYnNvY2tldCA9IHJlcXVpcmUoJy4vY2gtd2Vic29ja2V0Jyk7XG5cbnZhciBfY2hXZWJzb2NrZXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2hXZWJzb2NrZXQpO1xuXG52YXIgX2NoTm9kZSA9IHJlcXVpcmUoJy4vY2gtbm9kZScpO1xuXG52YXIgX2NoTm9kZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jaE5vZGUpO1xuXG52YXIgX2NodW5raW5nID0gcmVxdWlyZSgnLi9jaHVua2luZycpO1xuXG52YXIgX3BhY2tzdHJlYW0gPSByZXF1aXJlKCcuL3BhY2tzdHJlYW0nKTtcblxudmFyIF9idWYgPSByZXF1aXJlKCcuL2J1ZicpO1xuXG52YXIgX2dyYXBoVHlwZXMgPSByZXF1aXJlKCcuLi9ncmFwaC10eXBlcycpO1xuXG52YXIgX2Vycm9yID0gcmVxdWlyZSgnLi8uLi9lcnJvcicpO1xuXG52YXIgX2NoQ29uZmlnID0gcmVxdWlyZSgnLi9jaC1jb25maWcnKTtcblxudmFyIF9jaENvbmZpZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jaENvbmZpZyk7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG52YXIgX3N0cmVhbU9ic2VydmVyID0gcmVxdWlyZSgnLi9zdHJlYW0tb2JzZXJ2ZXInKTtcblxudmFyIF9zdHJlYW1PYnNlcnZlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdHJlYW1PYnNlcnZlcik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG52YXIgQ2hhbm5lbCA9IHZvaWQgMDtcbmlmIChfY2hOb2RlMi5kZWZhdWx0LmF2YWlsYWJsZSkge1xuICBDaGFubmVsID0gX2NoTm9kZTIuZGVmYXVsdC5jaGFubmVsO1xufSBlbHNlIGlmIChfY2hXZWJzb2NrZXQyLmRlZmF1bHQuYXZhaWxhYmxlKSB7XG4gIENoYW5uZWwgPSBfY2hXZWJzb2NrZXQyLmRlZmF1bHQuY2hhbm5lbDtcbn0gZWxzZSB7XG4gIHRocm93ICgwLCBfZXJyb3IubmV3RXJyb3IpKFwiRmF0YWw6IE5vIGNvbXBhdGlibGUgdHJhbnNwb3J0IGF2YWlsYWJsZS4gTmVlZCB0byBydW4gb24gYSBwbGF0Zm9ybSB3aXRoIHRoZSBXZWJTb2NrZXQgQVBJLlwiKTtcbn1cblxudmFyXG4vLyBTaWduYXR1cmUgYnl0ZXMgZm9yIGVhY2ggbWVzc2FnZSB0eXBlXG5JTklUID0gMHgwMSxcbiAgICAvLyAwMDAwIDAwMDEgLy8gSU5JVCA8dXNlcl9hZ2VudD5cbkFDS19GQUlMVVJFID0gMHgwRSxcbiAgICAvLyAwMDAwIDExMTAgLy8gQUNLX0ZBSUxVUkVcblJFU0VUID0gMHgwRixcbiAgICAvLyAwMDAwIDExMTEgLy8gUkVTRVRcblJVTiA9IDB4MTAsXG4gICAgLy8gMDAwMSAwMDAwIC8vIFJVTiA8c3RhdGVtZW50PiA8cGFyYW1ldGVycz5cbkRJU0NBUkRfQUxMID0gMHgyRixcbiAgICAvLyAwMDEwIDExMTEgLy8gRElTQ0FSRCAqXG5QVUxMX0FMTCA9IDB4M0YsXG4gICAgLy8gMDAxMSAxMTExIC8vIFBVTEwgKlxuU1VDQ0VTUyA9IDB4NzAsXG4gICAgLy8gMDExMSAwMDAwIC8vIFNVQ0NFU1MgPG1ldGFkYXRhPlxuUkVDT1JEID0gMHg3MSxcbiAgICAvLyAwMTExIDAwMDEgLy8gUkVDT1JEIDx2YWx1ZT5cbklHTk9SRUQgPSAweDdFLFxuICAgIC8vIDAxMTEgMTExMCAvLyBJR05PUkVEIDxtZXRhZGF0YT5cbkZBSUxVUkUgPSAweDdGLFxuICAgIC8vIDAxMTEgMTExMSAvLyBGQUlMVVJFIDxtZXRhZGF0YT5cblxuLy8gU2lnbmF0dXJlIGJ5dGVzIGZvciBoaWdoZXItbGV2ZWwgZ3JhcGggb2JqZWN0c1xuTk9ERSA9IDB4NEUsXG4gICAgUkVMQVRJT05TSElQID0gMHg1MixcbiAgICBVTkJPVU5EX1JFTEFUSU9OU0hJUCA9IDB4NzIsXG4gICAgUEFUSCA9IDB4NTAsXG5cbi8vc2VudCBiZWZvcmUgdmVyc2lvbiBuZWdvdGlhdGlvblxuTUFHSUNfUFJFQU1CTEUgPSAweDYwNjBCMDE3LFxuICAgIERFQlVHID0gZmFsc2U7XG5cbi8qKlxuICogVmVyeSBydWRpbWVudGFyeSBsb2cgaGFuZGxpbmcsIHNob3VsZCBwcm9iYWJseSBiZSByZXBsYWNlZCBieSBzb21ldGhpbmcgcHJvcGVyIGF0IHNvbWUgcG9pbnQuXG4gKiBAcGFyYW0gYWN0b3IgdGhlIHBhcnQgdGhhdCBzZW50IHRoZSBtZXNzYWdlLCAnUycgZm9yIHNlcnZlciBhbmQgJ0MnIGZvciBjbGllbnRcbiAqIEBwYXJhbSBtc2cgdGhlIGJvbHQgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBsb2coYWN0b3IsIG1zZykge1xuICBpZiAoREVCVUcpIHtcbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgbXNnICs9IFwiIFwiICsgKDAsIF9zdHJpbmdpZnkyLmRlZmF1bHQpKGFyZ3VtZW50c1tpXSk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGFjdG9yICsgXCI6XCIgKyBtc2cpO1xuICB9XG59XG5cbmZ1bmN0aW9uIE5PX09QKCkge31cblxudmFyIE5PX09QX09CU0VSVkVSID0ge1xuICBvbk5leHQ6IE5PX09QLFxuICBvbkNvbXBsZXRlZDogTk9fT1AsXG4gIG9uRXJyb3I6IE5PX09QXG59O1xuXG4vKiogTWFwcyBmcm9tIHBhY2tzdHJlYW0gc3RydWN0dXJlcyB0byBOZW80aiBkb21haW4gb2JqZWN0cyAqL1xudmFyIF9tYXBwZXJzID0ge1xuICBub2RlOiBmdW5jdGlvbiBub2RlKHVucGFja2VyLCBidWYpIHtcbiAgICByZXR1cm4gbmV3IF9ncmFwaFR5cGVzLk5vZGUodW5wYWNrZXIudW5wYWNrKGJ1ZiksIC8vIElkZW50aXR5XG4gICAgdW5wYWNrZXIudW5wYWNrKGJ1ZiksIC8vIExhYmVsc1xuICAgIHVucGFja2VyLnVucGFjayhidWYpIC8vIFByb3BlcnRpZXNcbiAgICApO1xuICB9LFxuICByZWw6IGZ1bmN0aW9uIHJlbCh1bnBhY2tlciwgYnVmKSB7XG4gICAgcmV0dXJuIG5ldyBfZ3JhcGhUeXBlcy5SZWxhdGlvbnNoaXAodW5wYWNrZXIudW5wYWNrKGJ1ZiksIC8vIElkZW50aXR5XG4gICAgdW5wYWNrZXIudW5wYWNrKGJ1ZiksIC8vIFN0YXJ0IE5vZGUgSWRlbnRpdHlcbiAgICB1bnBhY2tlci51bnBhY2soYnVmKSwgLy8gRW5kIE5vZGUgSWRlbnRpdHlcbiAgICB1bnBhY2tlci51bnBhY2soYnVmKSwgLy8gVHlwZVxuICAgIHVucGFja2VyLnVucGFjayhidWYpIC8vIFByb3BlcnRpZXNcbiAgICApO1xuICB9LFxuICB1bmJvdW5kUmVsOiBmdW5jdGlvbiB1bmJvdW5kUmVsKHVucGFja2VyLCBidWYpIHtcbiAgICByZXR1cm4gbmV3IF9ncmFwaFR5cGVzLlVuYm91bmRSZWxhdGlvbnNoaXAodW5wYWNrZXIudW5wYWNrKGJ1ZiksIC8vIElkZW50aXR5XG4gICAgdW5wYWNrZXIudW5wYWNrKGJ1ZiksIC8vIFR5cGVcbiAgICB1bnBhY2tlci51bnBhY2soYnVmKSAvLyBQcm9wZXJ0aWVzXG4gICAgKTtcbiAgfSxcbiAgcGF0aDogZnVuY3Rpb24gcGF0aCh1bnBhY2tlciwgYnVmKSB7XG4gICAgdmFyIG5vZGVzID0gdW5wYWNrZXIudW5wYWNrKGJ1ZiksXG4gICAgICAgIHJlbHMgPSB1bnBhY2tlci51bnBhY2soYnVmKSxcbiAgICAgICAgc2VxdWVuY2UgPSB1bnBhY2tlci51bnBhY2soYnVmKTtcbiAgICB2YXIgcHJldk5vZGUgPSBub2Rlc1swXSxcbiAgICAgICAgc2VnbWVudHMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VxdWVuY2UubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIHZhciByZWxJbmRleCA9IHNlcXVlbmNlW2ldLFxuICAgICAgICAgIG5leHROb2RlID0gbm9kZXNbc2VxdWVuY2VbaSArIDFdXSxcbiAgICAgICAgICByZWwgPSB2b2lkIDA7XG4gICAgICBpZiAocmVsSW5kZXggPiAwKSB7XG4gICAgICAgIHJlbCA9IHJlbHNbcmVsSW5kZXggLSAxXTtcbiAgICAgICAgaWYgKHJlbCBpbnN0YW5jZW9mIF9ncmFwaFR5cGVzLlVuYm91bmRSZWxhdGlvbnNoaXApIHtcbiAgICAgICAgICAvLyBUbyBhdm9pZCBkdXBsaWNhdGlvbiwgcmVsYXRpb25zaGlwcyBpbiBhIHBhdGggZG8gbm90IGNvbnRhaW5cbiAgICAgICAgICAvLyBpbmZvcm1hdGlvbiBhYm91dCB0aGVpciBzdGFydCBhbmQgZW5kIG5vZGVzLCB0aGF0J3MgaW5zdGVhZFxuICAgICAgICAgIC8vIGluZmVycmVkIGZyb20gdGhlIHBhdGggc2VxdWVuY2UuIFRoaXMgaXMgdXMgaW5mZXJyaW5nIChhbmQsXG4gICAgICAgICAgLy8gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgcmVtZW1iZXJpbmcpIHRoZSBzdGFydC9lbmQgb2YgYSByZWwuXG4gICAgICAgICAgcmVsc1tyZWxJbmRleCAtIDFdID0gcmVsID0gcmVsLmJpbmQocHJldk5vZGUuaWRlbnRpdHksIG5leHROb2RlLmlkZW50aXR5KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVsID0gcmVsc1stcmVsSW5kZXggLSAxXTtcbiAgICAgICAgaWYgKHJlbCBpbnN0YW5jZW9mIF9ncmFwaFR5cGVzLlVuYm91bmRSZWxhdGlvbnNoaXApIHtcbiAgICAgICAgICAvLyBTZWUgYWJvdmVcbiAgICAgICAgICByZWxzWy1yZWxJbmRleCAtIDFdID0gcmVsID0gcmVsLmJpbmQobmV4dE5vZGUuaWRlbnRpdHksIHByZXZOb2RlLmlkZW50aXR5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gRG9uZSBoeWRyYXRpbmcgb25lIHBhdGggc2VnbWVudC5cbiAgICAgIHNlZ21lbnRzLnB1c2gobmV3IF9ncmFwaFR5cGVzLlBhdGhTZWdtZW50KHByZXZOb2RlLCByZWwsIG5leHROb2RlKSk7XG4gICAgICBwcmV2Tm9kZSA9IG5leHROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IF9ncmFwaFR5cGVzLlBhdGgobm9kZXNbMF0sIG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdLCBzZWdtZW50cyk7XG4gIH1cbn07XG5cbi8qKlxuICogQSBjb25uZWN0aW9uIG1hbmFnZXMgc2VuZGluZyBhbmQgcmVjaWV2aW5nIG1lc3NhZ2VzIG92ZXIgYSBjaGFubmVsLiBBXG4gKiBjb25uZWN0b3IgaXMgdmVyeSBjbG9zZWx5IHRpZWQgdG8gdGhlIEJvbHQgcHJvdG9jb2wsIGl0IGltcGxlbWVudHMgdGhlXG4gKiBzYW1lIG1lc3NhZ2Ugc3RydWN0dXJlIHdpdGggdmVyeSBsaXR0bGUgZnJpbGxzLiBUaGlzIG1lYW5zIENvbm5lY3RvcnMgYXJlXG4gKiBuYXR1cmFsbHkgdGllZCB0byBhIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlIHByb3RvY29sLCBhbmQgd2UgZXhwZWN0XG4gKiBhbm90aGVyIGxheWVyIHdpbGwgYmUgbmVlZGVkIHRvIHN1cHBvcnQgbXVsdGlwbGUgdmVyc2lvbnMuXG4gKlxuICogVGhlIGNvbm5lY3RvciB0cmllcyB0byBiYXRjaCBvdXRib3VuZCBtZXNzYWdlcyBieSByZXF1aXJpbmcgaXRzIHVzZXJzXG4gKiB0byBjYWxsICdzeW5jJyB3aGVuIG1lc3NhZ2VzIG5lZWQgdG8gYmUgc2VudCwgYW5kIGl0IHJvdXRlcyByZXNwb25zZVxuICogbWVzc2FnZXMgYmFjayB0byB0aGUgb3JpZ2luYXRvcnMgb2YgdGhlIHJlcXVlc3RzIHRoYXQgY3JlYXRlZCB0aG9zZVxuICogcmVzcG9uc2UgbWVzc2FnZXMuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqL1xuXG52YXIgQ29ubmVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSBjaGFubmVsIC0gY2hhbm5lbCB3aXRoIGEgJ3dyaXRlJyBmdW5jdGlvbiBhbmQgYSAnb25tZXNzYWdlJ1xuICAgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrIHByb3BlcnR5XG4gICAqIEBwYXJhbSB1cmwgLSB1cmwgdG8gY29ubmVjdCB0b1xuICAgKi9cbiAgZnVuY3Rpb24gQ29ubmVjdGlvbihjaGFubmVsLCB1cmwpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBDb25uZWN0aW9uKTtcblxuICAgIC8qKlxuICAgICAqIEFuIG9yZGVyZWQgcXVldWUgb2Ygb2JzZXJ2ZXJzLCBlYWNoIGV4Y2hhbmdlIHJlc3BvbnNlICh6ZXJvIG9yIG1vcmVcbiAgICAgKiBSRUNPUkQgbWVzc2FnZXMgZm9sbG93ZWQgYnkgYSBTVUNDRVNTIG1lc3NhZ2UpIHdlIHJlY2lldmUgd2lsbCBiZSByb3V0ZWRcbiAgICAgKiB0byB0aGUgbmV4dCBwZW5kaW5nIG9ic2VydmVyLlxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuICAgIHRoaXMuc2VydmVyID0geyBhZGRyZXNzOiB1cmwgfTtcbiAgICB0aGlzLl9wZW5kaW5nT2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy5fY3VycmVudE9ic2VydmVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2NoID0gY2hhbm5lbDtcbiAgICB0aGlzLl9kZWNodW5rZXIgPSBuZXcgX2NodW5raW5nLkRlY2h1bmtlcigpO1xuICAgIHRoaXMuX2NodW5rZXIgPSBuZXcgX2NodW5raW5nLkNodW5rZXIoY2hhbm5lbCk7XG4gICAgdGhpcy5fcGFja2VyID0gbmV3IF9wYWNrc3RyZWFtLlBhY2tlcih0aGlzLl9jaHVua2VyKTtcbiAgICB0aGlzLl91bnBhY2tlciA9IG5ldyBfcGFja3N0cmVhbS5VbnBhY2tlcigpO1xuXG4gICAgdGhpcy5faXNIYW5kbGluZ0ZhaWx1cmUgPSBmYWxzZTtcbiAgICB0aGlzLl9jdXJyZW50RmFpbHVyZSA9IG51bGw7XG5cbiAgICB0aGlzLl9zdGF0ZSA9IG5ldyBDb25uZWN0aW9uU3RhdGUodGhpcyk7XG5cbiAgICAvLyBTZXQgdG8gdHJ1ZSBvbiBmYXRhbCBlcnJvcnMsIHRvIGdldCB0aGlzIG91dCBvZiBzZXNzaW9uIHBvb2wuXG4gICAgdGhpcy5faXNCcm9rZW4gPSBmYWxzZTtcblxuICAgIC8vIEZvciBkZXNlcmlhbGl6YXRpb24sIGV4cGxhaW4gdG8gdGhlIHVucGFja2VyIGhvdyB0byB1bnBhY2sgbm9kZXMsIHJlbHMsIHBhdGhzO1xuICAgIHRoaXMuX3VucGFja2VyLnN0cnVjdE1hcHBlcnNbTk9ERV0gPSBfbWFwcGVycy5ub2RlO1xuICAgIHRoaXMuX3VucGFja2VyLnN0cnVjdE1hcHBlcnNbUkVMQVRJT05TSElQXSA9IF9tYXBwZXJzLnJlbDtcbiAgICB0aGlzLl91bnBhY2tlci5zdHJ1Y3RNYXBwZXJzW1VOQk9VTkRfUkVMQVRJT05TSElQXSA9IF9tYXBwZXJzLnVuYm91bmRSZWw7XG4gICAgdGhpcy5fdW5wYWNrZXIuc3RydWN0TWFwcGVyc1tQQVRIXSA9IF9tYXBwZXJzLnBhdGg7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgLy8gVE9ETzogVXNpbmcgYG9ubWVzc2FnZWAgYW5kIGBvbmVycm9yYCBjYW1lIGZyb20gdGhlIFdlYlNvY2tldCBBUEksXG4gICAgLy8gaXQgcmVhZHMgcG9vcmx5IGFuZCBoYXMgc2V2ZXJhbCBhbm5veWluZyBkcmF3YmFja3MuIFN3YXAgdG8gaGF2aW5nXG4gICAgLy8gQ2hhbm5lbCBleHRlbmQgRXZlbnRFbWl0dGVyIGluc3RlYWQsIHRoZW4gd2UgY2FuIHVzZSBgb24oJ2RhdGEnLC4uKWBcbiAgICB0aGlzLl9jaC5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoYnVmKSB7XG4gICAgICB2YXIgcHJvcG9zZWQgPSBidWYucmVhZEludDMyKCk7XG4gICAgICBpZiAocHJvcG9zZWQgPT0gMSkge1xuICAgICAgICAvLyBPaywgcHJvdG9jb2wgcnVubmluZy4gU2ltcGx5IGZvcndhcmQgYWxsIG1lc3NhZ2VzIHBhc3RcbiAgICAgICAgLy8gdGhpcyB0byB0aGUgZGVjaHVua2VyXG4gICAgICAgIHNlbGYuX2NoLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChidWYpIHtcbiAgICAgICAgICBzZWxmLl9kZWNodW5rZXIud3JpdGUoYnVmKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoYnVmLmhhc1JlbWFpbmluZygpKSB7XG4gICAgICAgICAgc2VsZi5fZGVjaHVua2VyLndyaXRlKGJ1Zi5yZWFkU2xpY2UoYnVmLnJlbWFpbmluZygpKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocHJvcG9zZWQgPT0gMTIxMzQ4NjE2MCkge1xuICAgICAgICAvL3NlcnZlciByZXNwb25kZWQgMTIxMzQ4NjE2MCA9PSAweDQ4NTQ1NDUwID09IFwiSFRUUFwiXG4gICAgICAgIHNlbGYuX2hhbmRsZUZhdGFsRXJyb3IoKDAsIF9lcnJvci5uZXdFcnJvcikoXCJTZXJ2ZXIgcmVzcG9uZGVkIEhUVFAuIE1ha2Ugc3VyZSB5b3UgYXJlIG5vdCB0cnlpbmcgdG8gY29ubmVjdCB0byB0aGUgaHR0cCBlbmRwb2ludCBcIiArIFwiKEhUVFAgZGVmYXVsdHMgdG8gcG9ydCA3NDc0IHdoZXJlYXMgQk9MVCBkZWZhdWx0cyB0byBwb3J0IDc2ODcpXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYuX2hhbmRsZUZhdGFsRXJyb3IoKDAsIF9lcnJvci5uZXdFcnJvcikoXCJVbmtub3duIEJvbHQgcHJvdG9jb2wgdmVyc2lvbjogXCIgKyBwcm9wb3NlZCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBMaXN0ZW4gdG8gY29ubmVjdGlvbiBlcnJvcnMuIEltcG9ydGFudCBub3RlIHRob3VnaDtcbiAgICAvLyBJbiBzb21lIGNhc2VzIHdlIHdpbGwgZ2V0IGEgY2hhbm5lbCB0aGF0IGlzIGFscmVhZHkgYnJva2VuIChmb3IgaW5zdGFuY2UsXG4gICAgLy8gaWYgdGhlIHVzZXIgcGFzc2VzIGludmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb25zKS4gSW4gdGhpcyBjYXNlLCBvbmVycm9yXG4gICAgLy8gd2lsbCBoYXZlIFwiYWxyZWFkeSB0cmlnZ2VyZWRcIiBiZWZvcmUgd2UgYWRkIG91dCBsaXN0ZW5lciBoZXJlLiBTbyB0aGUgbGluZVxuICAgIC8vIGJlbG93IGFsc28gY2hlY2tzIHRoYXQgdGhlIGNoYW5uZWwgaXMgbm90IGFscmVhZHkgZmFpbGVkLiBUaGlzIGNvdWxkIGJlIG5pY2VseVxuICAgIC8vIGVuY2Fwc3VsYXRlZCBpbnRvIENoYW5uZWwgaWYgd2UgdXNlZCBgb24oJ2Vycm9yJywgLi4pYCByYXRoZXIgdGhhbiBgb25lcnJvcj0uLmBcbiAgICAvLyBhcyBvdXRsaW5lZCBpbiB0aGUgY29tbWVudCBhYm91dCBgb25tZXNzYWdlYCBmdXJ0aGVyIHVwIGluIHRoaXMgZmlsZS5cbiAgICB0aGlzLl9jaC5vbmVycm9yID0gdGhpcy5faGFuZGxlRmF0YWxFcnJvci5iaW5kKHRoaXMpO1xuICAgIGlmICh0aGlzLl9jaC5fZXJyb3IpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUZhdGFsRXJyb3IodGhpcy5fY2guX2Vycm9yKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWNodW5rZXIub25tZXNzYWdlID0gZnVuY3Rpb24gKGJ1Zikge1xuICAgICAgc2VsZi5faGFuZGxlTWVzc2FnZShzZWxmLl91bnBhY2tlci51bnBhY2soYnVmKSk7XG4gICAgfTtcblxuICAgIHZhciBoYW5kc2hha2UgPSAoMCwgX2J1Zi5hbGxvYykoNSAqIDQpO1xuICAgIC8vbWFnaWMgcHJlYW1ibGVcbiAgICBoYW5kc2hha2Uud3JpdGVJbnQzMihNQUdJQ19QUkVBTUJMRSk7XG4gICAgLy9wcm9wb3NlZCB2ZXJzaW9uc1xuICAgIGhhbmRzaGFrZS53cml0ZUludDMyKDEpO1xuICAgIGhhbmRzaGFrZS53cml0ZUludDMyKDApO1xuICAgIGhhbmRzaGFrZS53cml0ZUludDMyKDApO1xuICAgIGhhbmRzaGFrZS53cml0ZUludDMyKDApO1xuICAgIGhhbmRzaGFrZS5yZXNldCgpO1xuICAgIHRoaXMuX2NoLndyaXRlKGhhbmRzaGFrZSk7XG4gIH1cblxuICAvKipcbiAgICogXCJGYXRhbFwiIG1lYW5zIHRoZSBjb25uZWN0aW9uIGlzIGRlYWQuIE9ubHkgY2FsbCB0aGlzIGlmIHNvbWV0aGluZ1xuICAgKiBoYXBwZW5zIHRoYXQgY2Fubm90IGJlIHJlY292ZXJlZCBmcm9tLiBUaGlzIHdpbGwgbGVhZCB0byBhbGwgc3Vic2NyaWJlcnNcbiAgICogZmFpbGluZywgYW5kIHRoZSBjb25uZWN0aW9uIGdldHRpbmcgZWplY3RlZCBmcm9tIHRoZSBzZXNzaW9uIHBvb2wuXG4gICAqXG4gICAqIEBwYXJhbSBlcnIgYW4gZXJyb3Igb2JqZWN0LCBmb3J3YXJkZWQgdG8gYWxsIGN1cnJlbnQgYW5kIGZ1dHVyZSBzdWJzY3JpYmVyc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKENvbm5lY3Rpb24sIFt7XG4gICAga2V5OiAnX2hhbmRsZUZhdGFsRXJyb3InLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfaGFuZGxlRmF0YWxFcnJvcihlcnIpIHtcbiAgICAgIHRoaXMuX2lzQnJva2VuID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2Vycm9yID0gZXJyO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnRPYnNlcnZlciAmJiB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIub25FcnJvcikge1xuICAgICAgICB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIub25FcnJvcihlcnIpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHRoaXMuX3BlbmRpbmdPYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgb2JzZXJ2ZXIgPSB0aGlzLl9wZW5kaW5nT2JzZXJ2ZXJzLnNoaWZ0KCk7XG4gICAgICAgIGlmIChvYnNlcnZlciAmJiBvYnNlcnZlci5vbkVycm9yKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIub25FcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2hhbmRsZU1lc3NhZ2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfaGFuZGxlTWVzc2FnZShtc2cpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBwYXlsb2FkID0gbXNnLmZpZWxkc1swXTtcblxuICAgICAgc3dpdGNoIChtc2cuc2lnbmF0dXJlKSB7XG4gICAgICAgIGNhc2UgUkVDT1JEOlxuICAgICAgICAgIGxvZyhcIlNcIiwgXCJSRUNPUkRcIiwgbXNnKTtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIub25OZXh0KHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFNVQ0NFU1M6XG4gICAgICAgICAgbG9nKFwiU1wiLCBcIlNVQ0NFU1NcIiwgbXNnKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudE9ic2VydmVyLm9uQ29tcGxldGVkKHBheWxvYWQpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIgPSB0aGlzLl9wZW5kaW5nT2JzZXJ2ZXJzLnNoaWZ0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEZBSUxVUkU6XG4gICAgICAgICAgbG9nKFwiU1wiLCBcIkZBSUxVUkVcIiwgbXNnKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudEZhaWx1cmUgPSAoMCwgX2Vycm9yLm5ld0Vycm9yKShwYXlsb2FkLm1lc3NhZ2UsIHBheWxvYWQuY29kZSk7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIub25FcnJvcih0aGlzLl9jdXJyZW50RmFpbHVyZSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRPYnNlcnZlciA9IHRoaXMuX3BlbmRpbmdPYnNlcnZlcnMuc2hpZnQoKTtcbiAgICAgICAgICAgIC8vIFRoaW5ncyBhcmUgbm93IGJyb2tlbi4gUGVuZGluZyBvYnNlcnZlcnMgd2lsbCBnZXQgRkFJTFVSRSBtZXNzYWdlcyByb3V0ZWQgdW50aWxcbiAgICAgICAgICAgIC8vIFdlIGFyZSBkb25lIGhhbmRsaW5nIHRoaXMgZmFpbHVyZS5cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNIYW5kbGluZ0ZhaWx1cmUpIHtcbiAgICAgICAgICAgICAgdGhpcy5faXNIYW5kbGluZ0ZhaWx1cmUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgIC8vIGlzSGFuZGxpbmdGYWlsdXJlIHdhcyBmYWxzZSwgbWVhbmluZyB0aGlzIGlzIHRoZSBmaXJzdCBmYWlsdXJlIG1lc3NhZ2VcbiAgICAgICAgICAgICAgLy8gd2Ugc2VlIGZyb20gdGhpcyBmYWlsdXJlLiBXZSBtYXkgc2VlIHNldmVyYWwgb3RoZXJzLCBvbmUgZm9yIGVhY2ggbWVzc2FnZVxuICAgICAgICAgICAgICAvLyB3ZSBoYWQgXCJvcHRpbWlzdGljYWxseVwiIGFscmVhZHkgc2VudCBhZnRlciB3aGF0ZXZlciBpdCB3YXMgdGhhdCBmYWlsZWQuXG4gICAgICAgICAgICAgIC8vIFdlIG9ubHkgd2FudCB0byBhbmQgbmVlZCB0byBBQ0sgdGhlIGZpcnN0IG9uZSwgd2hpY2ggaXMgd2h5IHdlIGFyZSB0cmFja2luZ1xuICAgICAgICAgICAgICAvLyB0aGlzIF9pc0hhbmRsaW5nRmFpbHVyZSB0aGluZy5cbiAgICAgICAgICAgICAgdGhpcy5fYWNrRmFpbHVyZSh7XG4gICAgICAgICAgICAgICAgb25OZXh0OiBOT19PUCxcbiAgICAgICAgICAgICAgICBvbkVycm9yOiBOT19PUCxcbiAgICAgICAgICAgICAgICBvbkNvbXBsZXRlZDogZnVuY3Rpb24gb25Db21wbGV0ZWQoKSB7XG4gICAgICAgICAgICAgICAgICBfdGhpcy5faXNIYW5kbGluZ0ZhaWx1cmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIF90aGlzLl9jdXJyZW50RmFpbHVyZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgSUdOT1JFRDpcbiAgICAgICAgICBsb2coXCJTXCIsIFwiSUdOT1JFRFwiLCBtc2cpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudEZhaWx1cmUgJiYgdGhpcy5fY3VycmVudE9ic2VydmVyLm9uRXJyb3IpIHRoaXMuX2N1cnJlbnRPYnNlcnZlci5vbkVycm9yKHRoaXMuX2N1cnJlbnRGYWlsdXJlKTtlbHNlIGlmICh0aGlzLl9jdXJyZW50T2JzZXJ2ZXIub25FcnJvcikgdGhpcy5fY3VycmVudE9ic2VydmVyLm9uRXJyb3IocGF5bG9hZCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRPYnNlcnZlciA9IHRoaXMuX3BlbmRpbmdPYnNlcnZlcnMuc2hpZnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy5faGFuZGxlRmF0YWxFcnJvcigoMCwgX2Vycm9yLm5ld0Vycm9yKShcIlVua25vd24gQm9sdCBwcm90b2NvbCBtZXNzYWdlOiBcIiArIG1zZykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBRdWV1ZSBhbiBJTklULW1lc3NhZ2UgdG8gYmUgc2VudCB0byB0aGUgZGF0YWJhc2UgKi9cblxuICB9LCB7XG4gICAga2V5OiAnaW5pdGlhbGl6ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXRpYWxpemUoY2xpZW50TmFtZSwgdG9rZW4sIG9ic2VydmVyKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgbG9nKFwiQ1wiLCBcIklOSVRcIiwgY2xpZW50TmFtZSwgdG9rZW4pO1xuICAgICAgdmFyIGluaXRPYnNlcnZlciA9IHRoaXMuX3N0YXRlLndyYXAob2JzZXJ2ZXIpO1xuICAgICAgdGhpcy5fcXVldWVPYnNlcnZlcihpbml0T2JzZXJ2ZXIpO1xuICAgICAgdGhpcy5fcGFja2VyLnBhY2tTdHJ1Y3QoSU5JVCwgW3RoaXMuX3BhY2thYmxlKGNsaWVudE5hbWUpLCB0aGlzLl9wYWNrYWJsZSh0b2tlbildLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIuX2hhbmRsZUZhdGFsRXJyb3IoZXJyKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fY2h1bmtlci5tZXNzYWdlQm91bmRhcnkoKTtcbiAgICAgIHRoaXMuc3luYygpO1xuICAgIH1cblxuICAgIC8qKiBRdWV1ZSBhIFJVTi1tZXNzYWdlIHRvIGJlIHNlbnQgdG8gdGhlIGRhdGFiYXNlICovXG5cbiAgfSwge1xuICAgIGtleTogJ3J1bicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJ1bihzdGF0ZW1lbnQsIHBhcmFtcywgb2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICBsb2coXCJDXCIsIFwiUlVOXCIsIHN0YXRlbWVudCwgcGFyYW1zKTtcbiAgICAgIHRoaXMuX3F1ZXVlT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuICAgICAgdGhpcy5fcGFja2VyLnBhY2tTdHJ1Y3QoUlVOLCBbdGhpcy5fcGFja2FibGUoc3RhdGVtZW50KSwgdGhpcy5fcGFja2FibGUocGFyYW1zKV0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMy5faGFuZGxlRmF0YWxFcnJvcihlcnIpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9jaHVua2VyLm1lc3NhZ2VCb3VuZGFyeSgpO1xuICAgIH1cblxuICAgIC8qKiBRdWV1ZSBhIFBVTExfQUxMLW1lc3NhZ2UgdG8gYmUgc2VudCB0byB0aGUgZGF0YWJhc2UgKi9cblxuICB9LCB7XG4gICAga2V5OiAncHVsbEFsbCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHB1bGxBbGwob2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICBsb2coXCJDXCIsIFwiUFVMTF9BTExcIik7XG4gICAgICB0aGlzLl9xdWV1ZU9ic2VydmVyKG9ic2VydmVyKTtcbiAgICAgIHRoaXMuX3BhY2tlci5wYWNrU3RydWN0KFBVTExfQUxMLCBbXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICByZXR1cm4gX3RoaXM0Ll9oYW5kbGVGYXRhbEVycm9yKGVycik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2NodW5rZXIubWVzc2FnZUJvdW5kYXJ5KCk7XG4gICAgfVxuXG4gICAgLyoqIFF1ZXVlIGEgRElTQ0FSRF9BTEwtbWVzc2FnZSB0byBiZSBzZW50IHRvIHRoZSBkYXRhYmFzZSAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdkaXNjYXJkQWxsJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGlzY2FyZEFsbChvYnNlcnZlcikge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIGxvZyhcIkNcIiwgXCJESVNDQVJEX0FMTFwiKTtcbiAgICAgIHRoaXMuX3F1ZXVlT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuICAgICAgdGhpcy5fcGFja2VyLnBhY2tTdHJ1Y3QoRElTQ0FSRF9BTEwsIFtdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBfdGhpczUuX2hhbmRsZUZhdGFsRXJyb3IoZXJyKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fY2h1bmtlci5tZXNzYWdlQm91bmRhcnkoKTtcbiAgICB9XG5cbiAgICAvKiogUXVldWUgYSBSRVNFVC1tZXNzYWdlIHRvIGJlIHNlbnQgdG8gdGhlIGRhdGFiYXNlLiBNdXRlcyBmYWlsdXJlIGhhbmRsaW5nLiAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdyZXNldEFzeW5jJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXRBc3luYyhvYnNlcnZlcikge1xuICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICAgIGxvZyhcIkNcIiwgXCJSRVNFVF9BU1lOQ1wiKTtcbiAgICAgIHRoaXMuX2lzSGFuZGxpbmdGYWlsdXJlID0gdHJ1ZTtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHZhciB3cmFwcGVkT2JzID0ge1xuICAgICAgICBvbk5leHQ6IG9ic2VydmVyID8gb2JzZXJ2ZXIub25OZXh0IDogTk9fT1AsXG4gICAgICAgIG9uRXJyb3I6IG9ic2VydmVyID8gb2JzZXJ2ZXIub25FcnJvciA6IE5PX09QLFxuICAgICAgICBvbkNvbXBsZXRlZDogZnVuY3Rpb24gb25Db21wbGV0ZWQoKSB7XG4gICAgICAgICAgc2VsZi5faXNIYW5kbGluZ0ZhaWx1cmUgPSBmYWxzZTtcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm9uQ29tcGxldGVkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5fcXVldWVPYnNlcnZlcih3cmFwcGVkT2JzKTtcbiAgICAgIHRoaXMuX3BhY2tlci5wYWNrU3RydWN0KFJFU0VULCBbXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICByZXR1cm4gX3RoaXM2Ll9oYW5kbGVGYXRhbEVycm9yKGVycik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2NodW5rZXIubWVzc2FnZUJvdW5kYXJ5KCk7XG4gICAgfVxuXG4gICAgLyoqIFF1ZXVlIGEgUkVTRVQtbWVzc2FnZSB0byBiZSBzZW50IHRvIHRoZSBkYXRhYmFzZSAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdyZXNldCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2V0KG9ic2VydmVyKSB7XG4gICAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgICAgbG9nKCdDJywgJ1JFU0VUJyk7XG4gICAgICB0aGlzLl9xdWV1ZU9ic2VydmVyKG9ic2VydmVyKTtcbiAgICAgIHRoaXMuX3BhY2tlci5wYWNrU3RydWN0KFJFU0VULCBbXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICByZXR1cm4gX3RoaXM3Ll9oYW5kbGVGYXRhbEVycm9yKGVycik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2NodW5rZXIubWVzc2FnZUJvdW5kYXJ5KCk7XG4gICAgfVxuXG4gICAgLyoqIFF1ZXVlIGEgQUNLX0ZBSUxVUkUtbWVzc2FnZSB0byBiZSBzZW50IHRvIHRoZSBkYXRhYmFzZSAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdfYWNrRmFpbHVyZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9hY2tGYWlsdXJlKG9ic2VydmVyKSB7XG4gICAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgICAgbG9nKFwiQ1wiLCBcIkFDS19GQUlMVVJFXCIpO1xuICAgICAgdGhpcy5fcXVldWVPYnNlcnZlcihvYnNlcnZlcik7XG4gICAgICB0aGlzLl9wYWNrZXIucGFja1N0cnVjdChBQ0tfRkFJTFVSRSwgW10sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzOC5faGFuZGxlRmF0YWxFcnJvcihlcnIpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9jaHVua2VyLm1lc3NhZ2VCb3VuZGFyeSgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19xdWV1ZU9ic2VydmVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3F1ZXVlT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICAgIGlmICh0aGlzLl9pc0Jyb2tlbikge1xuICAgICAgICBpZiAob2JzZXJ2ZXIgJiYgb2JzZXJ2ZXIub25FcnJvcikge1xuICAgICAgICAgIG9ic2VydmVyLm9uRXJyb3IodGhpcy5fZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG9ic2VydmVyID0gb2JzZXJ2ZXIgfHwgTk9fT1BfT0JTRVJWRVI7XG4gICAgICBvYnNlcnZlci5vbkNvbXBsZXRlZCA9IG9ic2VydmVyLm9uQ29tcGxldGVkIHx8IE5PX09QO1xuICAgICAgb2JzZXJ2ZXIub25FcnJvciA9IG9ic2VydmVyLm9uRXJyb3IgfHwgTk9fT1A7XG4gICAgICBvYnNlcnZlci5vbk5leHQgPSBvYnNlcnZlci5vbk5leHQgfHwgTk9fT1A7XG4gICAgICBpZiAodGhpcy5fY3VycmVudE9ic2VydmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudE9ic2VydmVyID0gb2JzZXJ2ZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9wZW5kaW5nT2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBwcm9taXNlIHJlc29sdmVkIHdoZW4gY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbiBzdWNjZWVkIG9yIHJlamVjdGVkIHdoZW4gaXQgZmFpbHMuXG4gICAgICogQ29ubmVjdGlvbiBpcyBpbml0aWFsaXplZCB1c2luZyB7QGxpbmsgaW5pdGlhbGl6ZX0gZnVuY3Rpb24uXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxDb25uZWN0aW9uPn0gdGhlIHJlc3VsdCBvZiBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpbml0aWFsaXphdGlvbkNvbXBsZXRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXRpYWxpemF0aW9uQ29tcGxldGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmluaXRpYWxpemF0aW9uQ29tcGxldGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3luY2hyb25pemUgLSBmbHVzaCBhbGwgcXVldWVkIG91dGdvaW5nIG1lc3NhZ2VzIGFuZCByb3V0ZSB0aGVpciByZXNwb25zZXNcbiAgICAgKiB0byB0aGVpciByZXNwZWN0aXZlIGhhbmRsZXJzLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzeW5jJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3luYygpIHtcbiAgICAgIHRoaXMuX2NodW5rZXIuZmx1c2goKTtcbiAgICB9XG5cbiAgICAvKiogQ2hlY2sgaWYgdGhpcyBjb25uZWN0aW9uIGlzIGluIHdvcmtpbmcgY29uZGl0aW9uICovXG5cbiAgfSwge1xuICAgIGtleTogJ2lzT3BlbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzT3BlbigpIHtcbiAgICAgIHJldHVybiAhdGhpcy5faXNCcm9rZW4gJiYgdGhpcy5fY2guX29wZW47XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaXNFbmNyeXB0ZWQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0VuY3J5cHRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jaC5pc0VuY3J5cHRlZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGwgY2xvc2Ugb24gdGhlIGNoYW5uZWwuXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2IgLSBGdW5jdGlvbiB0byBjYWxsIG9uIGNsb3NlLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdjbG9zZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsb3NlKGNiKSB7XG4gICAgICB0aGlzLl9jaC5jbG9zZShjYik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX3BhY2thYmxlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3BhY2thYmxlKHZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXM5ID0gdGhpcztcblxuICAgICAgcmV0dXJuIHRoaXMuX3BhY2tlci5wYWNrYWJsZSh2YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICByZXR1cm4gX3RoaXM5Ll9oYW5kbGVGYXRhbEVycm9yKGVycik7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzZXRTZXJ2ZXJWZXJzaW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0U2VydmVyVmVyc2lvbih2ZXJzaW9uKSB7XG4gICAgICB0aGlzLnNlcnZlci52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIENvbm5lY3Rpb247XG59KCk7XG5cbnZhciBDb25uZWN0aW9uU3RhdGUgPSBmdW5jdGlvbiAoKSB7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0Nvbm5lY3Rpb259IGNvbm5lY3Rpb24gdGhlIGNvbm5lY3Rpb24gdG8gdHJhY2sgc3RhdGUgZm9yLlxuICAgKi9cbiAgZnVuY3Rpb24gQ29ubmVjdGlvblN0YXRlKGNvbm5lY3Rpb24pIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBDb25uZWN0aW9uU3RhdGUpO1xuXG4gICAgdGhpcy5fY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG5cbiAgICB0aGlzLl9pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMuX2luaXRpYWxpemF0aW9uRXJyb3IgPSBudWxsO1xuXG4gICAgdGhpcy5fcmVzb2x2ZVByb21pc2UgPSBudWxsO1xuICAgIHRoaXMuX3JlamVjdFByb21pc2UgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXAgdGhlIGdpdmVuIG9ic2VydmVyIHRvIHRyYWNrIGNvbm5lY3Rpb24ncyBpbml0aWFsaXphdGlvbiBzdGF0ZS5cbiAgICogQHBhcmFtIHtTdHJlYW1PYnNlcnZlcn0gb2JzZXJ2ZXIgdGhlIG9ic2VydmVyIHVzZWQgZm9yIElOSVQgbWVzc2FnZS5cbiAgICogQHJldHVybiB7U3RyZWFtT2JzZXJ2ZXJ9IHVwZGF0ZWQgb2JzZXJ2ZXIuXG4gICAqL1xuXG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoQ29ubmVjdGlvblN0YXRlLCBbe1xuICAgIGtleTogJ3dyYXAnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3cmFwKG9ic2VydmVyKSB7XG4gICAgICB2YXIgX3RoaXMxMCA9IHRoaXM7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9uTmV4dDogZnVuY3Rpb24gb25OZXh0KHJlY29yZCkge1xuICAgICAgICAgIGlmIChvYnNlcnZlciAmJiBvYnNlcnZlci5vbk5leHQpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm9uTmV4dChyZWNvcmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogZnVuY3Rpb24gb25FcnJvcihlcnJvcikge1xuICAgICAgICAgIF90aGlzMTAuX2luaXRpYWxpemF0aW9uRXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICBpZiAoX3RoaXMxMC5fcmVqZWN0UHJvbWlzZSkge1xuICAgICAgICAgICAgX3RoaXMxMC5fcmVqZWN0UHJvbWlzZShlcnJvcik7XG4gICAgICAgICAgICBfdGhpczEwLl9yZWplY3RQcm9taXNlID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9ic2VydmVyICYmIG9ic2VydmVyLm9uRXJyb3IpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25Db21wbGV0ZWQ6IGZ1bmN0aW9uIG9uQ29tcGxldGVkKG1ldGFEYXRhKSB7XG4gICAgICAgICAgaWYgKG1ldGFEYXRhICYmIG1ldGFEYXRhLnNlcnZlcikge1xuICAgICAgICAgICAgX3RoaXMxMC5fY29ubmVjdGlvbi5zZXRTZXJ2ZXJWZXJzaW9uKG1ldGFEYXRhLnNlcnZlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIF90aGlzMTAuX2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoX3RoaXMxMC5fcmVzb2x2ZVByb21pc2UpIHtcbiAgICAgICAgICAgIF90aGlzMTAuX3Jlc29sdmVQcm9taXNlKF90aGlzMTAuX2Nvbm5lY3Rpb24pO1xuICAgICAgICAgICAgX3RoaXMxMC5fcmVzb2x2ZVByb21pc2UgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2JzZXJ2ZXIgJiYgb2JzZXJ2ZXIub25Db21wbGV0ZWQpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm9uQ29tcGxldGVkKG1ldGFEYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHByb21pc2UgcmVzb2x2ZWQgd2hlbiBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uIHN1Y2NlZWQgb3IgcmVqZWN0ZWQgd2hlbiBpdCBmYWlscy5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPENvbm5lY3Rpb24+fSB0aGUgcmVzdWx0IG9mIGNvbm5lY3Rpb24gaW5pdGlhbGl6YXRpb24uXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2luaXRpYWxpemF0aW9uQ29tcGxldGVkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdGlhbGl6YXRpb25Db21wbGV0ZWQoKSB7XG4gICAgICB2YXIgX3RoaXMxMSA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQucmVzb2x2ZSh0aGlzLl9jb25uZWN0aW9uKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faW5pdGlhbGl6YXRpb25FcnJvcikge1xuICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQucmVqZWN0KHRoaXMuX2luaXRpYWxpemF0aW9uRXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfcHJvbWlzZTIuZGVmYXVsdChmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgX3RoaXMxMS5fcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgICAgICAgIF90aGlzMTEuX3JlamVjdFByb21pc2UgPSByZWplY3Q7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gQ29ubmVjdGlvblN0YXRlO1xufSgpO1xuXG4vKipcbiAqIENyZXRlIG5ldyBjb25uZWN0aW9uIHRvIHRoZSBwcm92aWRlZCB1cmwuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSAnbmVvNGonLXByZWZpeGVkIFVSTCB0byBOZW80aiBCb2x0IGVuZHBvaW50XG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0gdGhpcyBkcml2ZXIgY29uZmlndXJhdGlvblxuICogQHBhcmFtIHtzdHJpbmc9bnVsbH0gY29ubmVjdGlvbkVycm9yQ29kZSAtIGVycm9yIGNvZGUgZm9yIGVycm9ycyByYWlzZWQgb24gY29ubmVjdGlvbiBlcnJvcnNcbiAqIEByZXR1cm4ge0Nvbm5lY3Rpb259IC0gTmV3IGNvbm5lY3Rpb25cbiAqL1xuXG5cbmZ1bmN0aW9uIGNvbm5lY3QodXJsKSB7XG4gIHZhciBjb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgY29ubmVjdGlvbkVycm9yQ29kZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbnVsbDtcblxuICB2YXIgQ2ggPSBjb25maWcuY2hhbm5lbCB8fCBDaGFubmVsO1xuICB2YXIgaG9zdCA9ICgwLCBfdXRpbC5wYXJzZUhvc3QpKHVybCk7XG4gIHZhciBwb3J0ID0gKDAsIF91dGlsLnBhcnNlUG9ydCkodXJsKSB8fCA3Njg3O1xuICB2YXIgY29tcGxldGVVcmwgPSBob3N0ICsgJzonICsgcG9ydDtcbiAgdmFyIGNoYW5uZWxDb25maWcgPSBuZXcgX2NoQ29uZmlnMi5kZWZhdWx0KGhvc3QsIHBvcnQsIGNvbmZpZywgY29ubmVjdGlvbkVycm9yQ29kZSk7XG5cbiAgcmV0dXJuIG5ldyBDb25uZWN0aW9uKG5ldyBDaChjaGFubmVsQ29uZmlnKSwgY29tcGxldGVVcmwpO1xufVxuXG5leHBvcnRzLmNvbm5lY3QgPSBjb25uZWN0O1xuZXhwb3J0cy5Db25uZWN0aW9uID0gQ29ubmVjdGlvbjsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gQ2VudHJhbCBwbGFjZSB0byBkZXRlY3QgZmVhdHVyZSBzdXBwb3J0IGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybSxcbi8vIGV4cGFuZCBhcyBuZWVkZWQuXG5cbnZhciBGRUFUVVJFUyA9IHtcbiAgdHJ1c3Rfb25fZmlyc3RfdXNlOiBmdW5jdGlvbiB0cnVzdF9vbl9maXJzdF91c2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRoaXMgaXMgaW5zYW5lLiBXZSBhcmUgdmVyaWZ5aW5nIHRoYXQgd2UgaGF2ZSBhIHZlcnNpb24gb2YgZ2V0UGVlckNlcnRpZmljYXRlXG4gICAgICAvLyB0aGF0IHN1cHBvcnRzIHJlYWRpbmcgdGhlIHdob2xlIGNlcnRpZmljYXRlLCBlZyB0aGlzIGNvbW1pdDpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9jb21taXQvMzQ1YzQwYjZcbiAgICAgIHZhciBnZXRQZWVyQ2VydGlmaWNhdGVGdW5jdGlvbiA9IHJlcXVpcmUoJ3RscycpLlRMU1NvY2tldC5wcm90b3R5cGUuZ2V0UGVlckNlcnRpZmljYXRlO1xuICAgICAgdmFyIG51bWJlck9mUGFyYW1ldGVycyA9IGdldFBlZXJDZXJ0aWZpY2F0ZUZ1bmN0aW9uLmxlbmd0aDtcbiAgICAgIHJldHVybiBudW1iZXJPZlBhcmFtZXRlcnMgPj0gMTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LFxuICB0cnVzdF9hbGxfY2VydGlmaWNhdGVzOiBmdW5jdGlvbiB0cnVzdF9hbGxfY2VydGlmaWNhdGVzKCkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgZ2V0UGVlckNlcnRpZmljYXRlRnVuY3Rpb24gPSByZXF1aXJlKCd0bHMnKS5UTFNTb2NrZXQucHJvdG90eXBlLmdldFBlZXJDZXJ0aWZpY2F0ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIGRuc19sb29rdXA6IGZ1bmN0aW9uIGRuc19sb29rdXAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBsb29rdXBGdW5jdGlvbiA9IHJlcXVpcmUoJ2RucycpLmxvb2t1cDtcbiAgICAgIGlmIChsb29rdXBGdW5jdGlvbiAmJiB0eXBlb2YgbG9va3VwRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gaGFzRmVhdHVyZShuYW1lKSB7XG4gIHJldHVybiBGRUFUVVJFU1tuYW1lXSAmJiBGRUFUVVJFU1tuYW1lXSgpO1xufVxuXG5leHBvcnRzLmRlZmF1bHQgPSBoYXNGZWF0dXJlOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuRG5zSG9zdE5hbWVSZXNvbHZlciA9IGV4cG9ydHMuRHVtbXlIb3N0TmFtZVJlc29sdmVyID0gdW5kZWZpbmVkO1xuXG52YXIgX3Byb21pc2UgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZScpO1xuXG52YXIgX3Byb21pc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvbWlzZSk7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxudmFyIF9nZXRQcm90b3R5cGVPZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRQcm90b3R5cGVPZik7XG5cbnZhciBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybicpO1xuXG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIpO1xuXG52YXIgX2luaGVyaXRzMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cycpO1xuXG52YXIgX2luaGVyaXRzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luaGVyaXRzMik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2syID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJyk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MnKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX3V0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIEhvc3ROYW1lUmVzb2x2ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEhvc3ROYW1lUmVzb2x2ZXIoKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgSG9zdE5hbWVSZXNvbHZlcik7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShIb3N0TmFtZVJlc29sdmVyLCBbe1xuICAgIGtleTogJ3Jlc29sdmUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNvbHZlKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBYnN0cmFjdCBmdW5jdGlvbicpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gSG9zdE5hbWVSZXNvbHZlcjtcbn0oKTsgLyoqXG4gICAgICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAgICAgICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICAgICAgKlxuICAgICAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAgICAgICpcbiAgICAgICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICAgICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgICAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgICAgICpcbiAgICAgICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICAgICAgKlxuICAgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICAgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICAgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gICAgICAqL1xuXG52YXIgRHVtbXlIb3N0TmFtZVJlc29sdmVyID0gZXhwb3J0cy5EdW1teUhvc3ROYW1lUmVzb2x2ZXIgPSBmdW5jdGlvbiAoX0hvc3ROYW1lUmVzb2x2ZXIpIHtcbiAgKDAsIF9pbmhlcml0czMuZGVmYXVsdCkoRHVtbXlIb3N0TmFtZVJlc29sdmVyLCBfSG9zdE5hbWVSZXNvbHZlcik7XG5cbiAgZnVuY3Rpb24gRHVtbXlIb3N0TmFtZVJlc29sdmVyKCkge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIER1bW15SG9zdE5hbWVSZXNvbHZlcik7XG4gICAgcmV0dXJuICgwLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMuZGVmYXVsdCkodGhpcywgKER1bW15SG9zdE5hbWVSZXNvbHZlci5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoRHVtbXlIb3N0TmFtZVJlc29sdmVyKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShEdW1teUhvc3ROYW1lUmVzb2x2ZXIsIFt7XG4gICAga2V5OiAncmVzb2x2ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc29sdmUoc2VlZFJvdXRlcikge1xuICAgICAgcmV0dXJuIHJlc29sdmVUb0l0c2VsZihzZWVkUm91dGVyKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIER1bW15SG9zdE5hbWVSZXNvbHZlcjtcbn0oSG9zdE5hbWVSZXNvbHZlcik7XG5cbnZhciBEbnNIb3N0TmFtZVJlc29sdmVyID0gZXhwb3J0cy5EbnNIb3N0TmFtZVJlc29sdmVyID0gZnVuY3Rpb24gKF9Ib3N0TmFtZVJlc29sdmVyMikge1xuICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShEbnNIb3N0TmFtZVJlc29sdmVyLCBfSG9zdE5hbWVSZXNvbHZlcjIpO1xuXG4gIGZ1bmN0aW9uIERuc0hvc3ROYW1lUmVzb2x2ZXIoKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgRG5zSG9zdE5hbWVSZXNvbHZlcik7XG5cbiAgICB2YXIgX3RoaXMyID0gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoRG5zSG9zdE5hbWVSZXNvbHZlci5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoRG5zSG9zdE5hbWVSZXNvbHZlcikpLmNhbGwodGhpcykpO1xuXG4gICAgX3RoaXMyLl9kbnMgPSByZXF1aXJlKCdkbnMnKTtcbiAgICByZXR1cm4gX3RoaXMyO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoRG5zSG9zdE5hbWVSZXNvbHZlciwgW3tcbiAgICBrZXk6ICdyZXNvbHZlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzb2x2ZShzZWVkUm91dGVyKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIHNlZWRSb3V0ZXJIb3N0ID0gKDAsIF91dGlsLnBhcnNlSG9zdCkoc2VlZFJvdXRlcik7XG4gICAgICB2YXIgc2VlZFJvdXRlclBvcnQgPSAoMCwgX3V0aWwucGFyc2VQb3J0KShzZWVkUm91dGVyKTtcblxuICAgICAgcmV0dXJuIG5ldyBfcHJvbWlzZTIuZGVmYXVsdChmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICBfdGhpczMuX2Rucy5sb29rdXAoc2VlZFJvdXRlckhvc3QsIHsgYWxsOiB0cnVlIH0sIGZ1bmN0aW9uIChlcnJvciwgYWRkcmVzc2VzKSB7XG4gICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc29sdmVUb0l0c2VsZihzZWVkUm91dGVyKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBhZGRyZXNzZXNXaXRoUG9ydHMgPSBhZGRyZXNzZXMubWFwKGZ1bmN0aW9uIChhZGRyZXNzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzV2l0aFBvcnQoYWRkcmVzcywgc2VlZFJvdXRlclBvcnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXNvbHZlKGFkZHJlc3Nlc1dpdGhQb3J0cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gRG5zSG9zdE5hbWVSZXNvbHZlcjtcbn0oSG9zdE5hbWVSZXNvbHZlcik7XG5cbmZ1bmN0aW9uIHJlc29sdmVUb0l0c2VsZihhZGRyZXNzKSB7XG4gIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5yZXNvbHZlKFthZGRyZXNzXSk7XG59XG5cbmZ1bmN0aW9uIGFkZHJlc3NXaXRoUG9ydChhZGRyZXNzT2JqZWN0LCBwb3J0KSB7XG4gIHZhciBhZGRyZXNzID0gYWRkcmVzc09iamVjdC5hZGRyZXNzO1xuICBpZiAocG9ydCkge1xuICAgIHJldHVybiBhZGRyZXNzICsgJzonICsgcG9ydDtcbiAgfVxuICByZXR1cm4gYWRkcmVzcztcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU3RydWN0dXJlID0gZXhwb3J0cy5VbnBhY2tlciA9IGV4cG9ydHMuUGFja2VyID0gdW5kZWZpbmVkO1xuXG52YXIgX2tleXMgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzXCIpO1xuXG52YXIgX2tleXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfa2V5cyk7XG5cbnZhciBfdHlwZW9mMiA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgX3R5cGVvZjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90eXBlb2YyKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrXCIpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzc1wiKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX3V0ZiA9IHJlcXVpcmUoXCIuL3V0ZjhcIik7XG5cbnZhciBfdXRmMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3V0Zik7XG5cbnZhciBfaW50ZWdlciA9IHJlcXVpcmUoXCIuLi9pbnRlZ2VyXCIpO1xuXG52YXIgX2ludGVnZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW50ZWdlcik7XG5cbnZhciBfZXJyb3IgPSByZXF1aXJlKFwiLi8uLi9lcnJvclwiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIFRJTllfU1RSSU5HID0gMHg4MDsgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbnZhciBUSU5ZX0xJU1QgPSAweDkwO1xudmFyIFRJTllfTUFQID0gMHhBMDtcbnZhciBUSU5ZX1NUUlVDVCA9IDB4QjA7XG52YXIgTlVMTCA9IDB4QzA7XG52YXIgRkxPQVRfNjQgPSAweEMxO1xudmFyIEZBTFNFID0gMHhDMjtcbnZhciBUUlVFID0gMHhDMztcbnZhciBJTlRfOCA9IDB4Qzg7XG52YXIgSU5UXzE2ID0gMHhDOTtcbnZhciBJTlRfMzIgPSAweENBO1xudmFyIElOVF82NCA9IDB4Q0I7XG52YXIgU1RSSU5HXzggPSAweEQwO1xudmFyIFNUUklOR18xNiA9IDB4RDE7XG52YXIgU1RSSU5HXzMyID0gMHhEMjtcbnZhciBMSVNUXzggPSAweEQ0O1xudmFyIExJU1RfMTYgPSAweEQ1O1xudmFyIExJU1RfMzIgPSAweEQ2O1xudmFyIE1BUF84ID0gMHhEODtcbnZhciBNQVBfMTYgPSAweEQ5O1xudmFyIE1BUF8zMiA9IDB4REE7XG52YXIgU1RSVUNUXzggPSAweERDO1xudmFyIFNUUlVDVF8xNiA9IDB4REQ7XG5cbi8qKlxuICAqIEEgU3RydWN0dXJlIGhhdmUgYSBzaWduYXR1cmUgYW5kIGZpZWxkcy5cbiAgKiBAYWNjZXNzIHByaXZhdGVcbiAgKi9cblxudmFyIFN0cnVjdHVyZSA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBuZXcgaW5zdGFuY2VcbiAgICovXG4gIGZ1bmN0aW9uIFN0cnVjdHVyZShzaWduYXR1cmUsIGZpZWxkcykge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIFN0cnVjdHVyZSk7XG5cbiAgICB0aGlzLnNpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbiAgICB0aGlzLmZpZWxkcyA9IGZpZWxkcztcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKFN0cnVjdHVyZSwgW3tcbiAgICBrZXk6IFwidG9TdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICB2YXIgZmllbGRTdHIgPSBcIlwiO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICBmaWVsZFN0ciArPSBcIiwgXCI7XG4gICAgICAgIH1cbiAgICAgICAgZmllbGRTdHIgKz0gdGhpcy5maWVsZHNbaV07XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJTdHJ1Y3R1cmUoXCIgKyB0aGlzLnNpZ25hdHVyZSArIFwiLCBbXCIgKyB0aGlzLmZpZWxkcyArIFwiXSlcIjtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFN0cnVjdHVyZTtcbn0oKTtcblxuLyoqXG4gICogQ2xhc3MgdG8gcGFja1xuICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAqL1xuXG5cbnZhciBQYWNrZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFBhY2tlcihjaGFubmVsKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUGFja2VyKTtcblxuICAgIHRoaXMuX2NoID0gY2hhbm5lbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcGFja2FibGUgZnVuY3Rpb24gb3V0IG9mIHRoZSBwcm92aWRlZCB2YWx1ZVxuICAgKiBAcGFyYW0geCB0aGUgdmFsdWUgdG8gcGFja1xuICAgKiBAcGFyYW0gb25FcnJvciBjYWxsYmFjayBmb3IgdGhlIGNhc2Ugd2hlbiB2YWx1ZSBjYW5ub3QgYmUgcGFja2VkXG4gICAqIEByZXR1cm5zIEZ1bmN0aW9uXG4gICAqL1xuXG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoUGFja2VyLCBbe1xuICAgIGtleTogXCJwYWNrYWJsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYWNrYWJsZSh4LCBvbkVycm9yKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAoeCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5fY2gud3JpdGVVSW50OChOVUxMKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoeCA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5fY2gud3JpdGVVSW50OChUUlVFKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoeCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuX2NoLndyaXRlVUludDgoRkFMU0UpO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgeCA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLnBhY2tGbG9hdCh4KTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHggPT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5wYWNrU3RyaW5nKHgsIG9uRXJyb3IpO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICgoMCwgX2ludGVnZXIuaXNJbnQpKHgpKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLnBhY2tJbnRlZ2VyKHgpO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh4IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpcy5wYWNrTGlzdEhlYWRlcih4Lmxlbmd0aCwgb25FcnJvcik7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHgubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBfdGhpcy5wYWNrYWJsZSh4W19pXSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHhbX2ldLCBvbkVycm9yKSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoeCBpbnN0YW5jZW9mIFN0cnVjdHVyZSkge1xuICAgICAgICB2YXIgcGFja2FibGVGaWVsZHMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4LmZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHBhY2thYmxlRmllbGRzW2ldID0gdGhpcy5wYWNrYWJsZSh4LmZpZWxkc1tpXSwgb25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMucGFja1N0cnVjdCh4LnNpZ25hdHVyZSwgcGFja2FibGVGaWVsZHMpO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICgodHlwZW9mIHggPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogKDAsIF90eXBlb2YzLmRlZmF1bHQpKHgpKSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGtleXMgPSAoMCwgX2tleXMyLmRlZmF1bHQpKHgpO1xuXG4gICAgICAgICAgdmFyIGNvdW50ID0gMDtcbiAgICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBrZXlzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgICAgICAgIGlmICh4W2tleXNbX2kyXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBfdGhpcy5wYWNrTWFwSGVhZGVyKGNvdW50LCBvbkVycm9yKTtcbiAgICAgICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBrZXlzLmxlbmd0aDsgX2kzKyspIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW19pM107XG4gICAgICAgICAgICBpZiAoeFtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgX3RoaXMucGFja1N0cmluZyhrZXkpO1xuICAgICAgICAgICAgICBfdGhpcy5wYWNrYWJsZSh4W2tleV0sIG9uRXJyb3IpKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgICBvbkVycm9yKCgwLCBfZXJyb3IubmV3RXJyb3IpKFwiQ2Fubm90IHBhY2sgdGhpcyB2YWx1ZTogXCIgKyB4KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhY2tzIGEgc3RydWN0XG4gICAgICogQHBhcmFtIHNpZ25hdHVyZSB0aGUgc2lnbmF0dXJlIG9mIHRoZSBzdHJ1Y3RcbiAgICAgKiBAcGFyYW0gcGFja2FibGVGaWVsZHMgdGhlIGZpZWxkcyBvZiB0aGUgc3RydWN0LCBtYWtlIHN1cmUgeW91IGNhbGwgYHBhY2thYmxlIG9uIGFsbCBmaWVsZHNgXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJwYWNrU3RydWN0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhY2tTdHJ1Y3Qoc2lnbmF0dXJlLCBwYWNrYWJsZUZpZWxkcywgb25FcnJvcikge1xuICAgICAgcGFja2FibGVGaWVsZHMgPSBwYWNrYWJsZUZpZWxkcyB8fCBbXTtcbiAgICAgIHRoaXMucGFja1N0cnVjdEhlYWRlcihwYWNrYWJsZUZpZWxkcy5sZW5ndGgsIHNpZ25hdHVyZSwgb25FcnJvcik7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhY2thYmxlRmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHBhY2thYmxlRmllbGRzW2ldKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInBhY2tJbnRlZ2VyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhY2tJbnRlZ2VyKHgpIHtcbiAgICAgIHZhciBoaWdoID0geC5oaWdoLFxuICAgICAgICAgIGxvdyA9IHgubG93O1xuXG4gICAgICBpZiAoeC5ncmVhdGVyVGhhbk9yRXF1YWwoLTB4MTApICYmIHgubGVzc1RoYW4oMHg4MCkpIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVJbnQ4KGxvdyk7XG4gICAgICB9IGVsc2UgaWYgKHguZ3JlYXRlclRoYW5PckVxdWFsKC0weDgwKSAmJiB4Lmxlc3NUaGFuKC0weDEwKSkge1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KElOVF84KTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVJbnQ4KGxvdyk7XG4gICAgICB9IGVsc2UgaWYgKHguZ3JlYXRlclRoYW5PckVxdWFsKC0weDgwMDApICYmIHgubGVzc1RoYW4oMHg4MDAwKSkge1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KElOVF8xNik7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlSW50MTYobG93KTtcbiAgICAgIH0gZWxzZSBpZiAoeC5ncmVhdGVyVGhhbk9yRXF1YWwoLTB4ODAwMDAwMDApICYmIHgubGVzc1RoYW4oMHg4MDAwMDAwMCkpIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChJTlRfMzIpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZUludDMyKGxvdyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KElOVF82NCk7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlSW50MzIoaGlnaCk7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlSW50MzIobG93KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicGFja0Zsb2F0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhY2tGbG9hdCh4KSB7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KEZMT0FUXzY0KTtcbiAgICAgIHRoaXMuX2NoLndyaXRlRmxvYXQ2NCh4KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicGFja1N0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYWNrU3RyaW5nKHgsIG9uRXJyb3IpIHtcbiAgICAgIHZhciBieXRlcyA9IF91dGYyLmRlZmF1bHQuZW5jb2RlKHgpO1xuICAgICAgdmFyIHNpemUgPSBieXRlcy5sZW5ndGg7XG4gICAgICBpZiAoc2l6ZSA8IDB4MTApIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChUSU5ZX1NUUklORyB8IHNpemUpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZUJ5dGVzKGJ5dGVzKTtcbiAgICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDB4MTAwKSB7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoU1RSSU5HXzgpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpemUpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZUJ5dGVzKGJ5dGVzKTtcbiAgICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDB4MTAwMDApIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChTVFJJTkdfMTYpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpemUgLyAyNTYgPj4gMCk7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoc2l6ZSAlIDI1Nik7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlQnl0ZXMoYnl0ZXMpO1xuICAgICAgfSBlbHNlIGlmIChzaXplIDwgMHgxMDAwMDAwMDApIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChTVFJJTkdfMzIpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KChzaXplIC8gMTY3NzcyMTYgPj4gMCkgJSAyNTYpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KChzaXplIC8gNjU1MzYgPj4gMCkgJSAyNTYpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KChzaXplIC8gMjU2ID4+IDApICUgMjU2KTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplICUgMjU2KTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVCeXRlcyhieXRlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkVycm9yKCgwLCBfZXJyb3IubmV3RXJyb3IpKFwiVVRGLTggc3RyaW5ncyBvZiBzaXplIFwiICsgc2l6ZSArIFwiIGFyZSBub3Qgc3VwcG9ydGVkXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicGFja0xpc3RIZWFkZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFja0xpc3RIZWFkZXIoc2l6ZSwgb25FcnJvcikge1xuICAgICAgaWYgKHNpemUgPCAweDEwKSB7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoVElOWV9MSVNUIHwgc2l6ZSk7XG4gICAgICB9IGVsc2UgaWYgKHNpemUgPCAweDEwMCkge1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KExJU1RfOCk7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoc2l6ZSk7XG4gICAgICB9IGVsc2UgaWYgKHNpemUgPCAweDEwMDAwKSB7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoTElTVF8xNik7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoKHNpemUgLyAyNTYgPj4gMCkgJSAyNTYpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpemUgJSAyNTYpO1xuICAgICAgfSBlbHNlIGlmIChzaXplIDwgMHgxMDAwMDAwMDApIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChMSVNUXzMyKTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OCgoc2l6ZSAvIDE2Nzc3MjE2ID4+IDApICUgMjU2KTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OCgoc2l6ZSAvIDY1NTM2ID4+IDApICUgMjU2KTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OCgoc2l6ZSAvIDI1NiA+PiAwKSAlIDI1Nik7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoc2l6ZSAlIDI1Nik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkVycm9yKCgwLCBfZXJyb3IubmV3RXJyb3IpKFwiTGlzdHMgb2Ygc2l6ZSBcIiArIHNpemUgKyBcIiBhcmUgbm90IHN1cHBvcnRlZFwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInBhY2tNYXBIZWFkZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFja01hcEhlYWRlcihzaXplLCBvbkVycm9yKSB7XG4gICAgICBpZiAoc2l6ZSA8IDB4MTApIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChUSU5ZX01BUCB8IHNpemUpO1xuICAgICAgfSBlbHNlIGlmIChzaXplIDwgMHgxMDApIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChNQVBfOCk7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoc2l6ZSk7XG4gICAgICB9IGVsc2UgaWYgKHNpemUgPCAweDEwMDAwKSB7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoTUFQXzE2KTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplIC8gMjU2ID4+IDApO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpemUgJSAyNTYpO1xuICAgICAgfSBlbHNlIGlmIChzaXplIDwgMHgxMDAwMDAwMDApIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChNQVBfMzIpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KChzaXplIC8gMTY3NzcyMTYgPj4gMCkgJSAyNTYpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KChzaXplIC8gNjU1MzYgPj4gMCkgJSAyNTYpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KChzaXplIC8gMjU2ID4+IDApICUgMjU2KTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplICUgMjU2KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uRXJyb3IoKDAsIF9lcnJvci5uZXdFcnJvcikoXCJNYXBzIG9mIHNpemUgXCIgKyBzaXplICsgXCIgYXJlIG5vdCBzdXBwb3J0ZWRcIikpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwYWNrU3RydWN0SGVhZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhY2tTdHJ1Y3RIZWFkZXIoc2l6ZSwgc2lnbmF0dXJlLCBvbkVycm9yKSB7XG4gICAgICBpZiAoc2l6ZSA8IDB4MTApIHtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChUSU5ZX1NUUlVDVCB8IHNpemUpO1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpZ25hdHVyZSk7XG4gICAgICB9IGVsc2UgaWYgKHNpemUgPCAweDEwMCkge1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KFNUUlVDVF84KTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplKTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaWduYXR1cmUpO1xuICAgICAgfSBlbHNlIGlmIChzaXplIDwgMHgxMDAwMCkge1xuICAgICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KFNUUlVDVF8xNik7XG4gICAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoc2l6ZSAvIDI1NiA+PiAwKTtcbiAgICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplICUgMjU2KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uRXJyb3IoKDAsIF9lcnJvci5uZXdFcnJvcikoXCJTdHJ1Y3R1cmVzIG9mIHNpemUgXCIgKyBzaXplICsgXCIgYXJlIG5vdCBzdXBwb3J0ZWRcIikpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gUGFja2VyO1xufSgpO1xuXG4vKipcbiAgKiBDbGFzcyB0byB1bnBhY2tcbiAgKiBAYWNjZXNzIHByaXZhdGVcbiAgKi9cblxuXG52YXIgVW5wYWNrZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFVucGFja2VyKCkge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIFVucGFja2VyKTtcblxuICAgIC8vIEhpZ2hlciBsZXZlbCBsYXllcnMgY2FuIHNwZWNpZnkgaG93IHRvIG1hcCBzdHJ1Y3RzIHRvIGhpZ2hlci1sZXZlbCBvYmplY3RzLlxuICAgIC8vIElmIHdlIHJlY2lldmUgYSBzdHJ1Y3QgdGhhdCBoYXMgYSBzaWduYXR1cmUgdGhhdCBkb2VzIG5vdCBoYXZlIGEgbWFwcGVyLFxuICAgIC8vIHdlIHNpbXBseSByZXR1cm4gYSBTdHJ1Y3R1cmUgb2JqZWN0LlxuICAgIHRoaXMuc3RydWN0TWFwcGVycyA9IHt9O1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoVW5wYWNrZXIsIFt7XG4gICAga2V5OiBcInVucGFja0xpc3RcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdW5wYWNrTGlzdChzaXplLCBidWZmZXIpIHtcbiAgICAgIHZhciB2YWx1ZSA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgdmFsdWUucHVzaCh0aGlzLnVucGFjayhidWZmZXIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidW5wYWNrTWFwXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVucGFja01hcChzaXplLCBidWZmZXIpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHt9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IHRoaXMudW5wYWNrKGJ1ZmZlcik7XG4gICAgICAgIHZhbHVlW2tleV0gPSB0aGlzLnVucGFjayhidWZmZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1bnBhY2tTdHJ1Y3RcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdW5wYWNrU3RydWN0KHNpemUsIGJ1ZmZlcikge1xuICAgICAgdmFyIHNpZ25hdHVyZSA9IGJ1ZmZlci5yZWFkVUludDgoKTtcbiAgICAgIHZhciBtYXBwZXIgPSB0aGlzLnN0cnVjdE1hcHBlcnNbc2lnbmF0dXJlXTtcbiAgICAgIGlmIChtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIG1hcHBlcih0aGlzLCBidWZmZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHZhbHVlID0gbmV3IFN0cnVjdHVyZShzaWduYXR1cmUsIFtdKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgICB2YWx1ZS5maWVsZHMucHVzaCh0aGlzLnVucGFjayhidWZmZXIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVucGFja1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1bnBhY2soYnVmZmVyKSB7XG4gICAgICB2YXIgbWFya2VyID0gYnVmZmVyLnJlYWRVSW50OCgpO1xuICAgICAgaWYgKG1hcmtlciA9PSBOVUxMKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gVFJVRSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID09IEZBTFNFKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID09IEZMT0FUXzY0KSB7XG4gICAgICAgIHJldHVybiBidWZmZXIucmVhZEZsb2F0NjQoKTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID49IDAgJiYgbWFya2VyIDwgMTI4KSB7XG4gICAgICAgIHJldHVybiAoMCwgX2ludGVnZXIuaW50KShtYXJrZXIpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXIgPj0gMjQwICYmIG1hcmtlciA8IDI1Nikge1xuICAgICAgICByZXR1cm4gKDAsIF9pbnRlZ2VyLmludCkobWFya2VyIC0gMjU2KTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID09IElOVF84KSB7XG4gICAgICAgIHJldHVybiAoMCwgX2ludGVnZXIuaW50KShidWZmZXIucmVhZEludDgoKSk7XG4gICAgICB9IGVsc2UgaWYgKG1hcmtlciA9PSBJTlRfMTYpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfaW50ZWdlci5pbnQpKGJ1ZmZlci5yZWFkSW50MTYoKSk7XG4gICAgICB9IGVsc2UgaWYgKG1hcmtlciA9PSBJTlRfMzIpIHtcbiAgICAgICAgdmFyIGIgPSBidWZmZXIucmVhZEludDMyKCk7XG4gICAgICAgIHJldHVybiAoMCwgX2ludGVnZXIuaW50KShiKTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID09IElOVF82NCkge1xuICAgICAgICB2YXIgaGlnaCA9IGJ1ZmZlci5yZWFkSW50MzIoKTtcbiAgICAgICAgdmFyIGxvdyA9IGJ1ZmZlci5yZWFkSW50MzIoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBfaW50ZWdlcjIuZGVmYXVsdChsb3csIGhpZ2gpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gU1RSSU5HXzgpIHtcbiAgICAgICAgcmV0dXJuIF91dGYyLmRlZmF1bHQuZGVjb2RlKGJ1ZmZlciwgYnVmZmVyLnJlYWRVSW50OCgpKTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID09IFNUUklOR18xNikge1xuICAgICAgICByZXR1cm4gX3V0ZjIuZGVmYXVsdC5kZWNvZGUoYnVmZmVyLCBidWZmZXIucmVhZFVJbnQxNigpKTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID09IFNUUklOR18zMikge1xuICAgICAgICByZXR1cm4gX3V0ZjIuZGVmYXVsdC5kZWNvZGUoYnVmZmVyLCBidWZmZXIucmVhZFVJbnQzMigpKTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID09IExJU1RfOCkge1xuICAgICAgICByZXR1cm4gdGhpcy51bnBhY2tMaXN0KGJ1ZmZlci5yZWFkVUludDgoKSwgYnVmZmVyKTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID09IExJU1RfMTYpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5wYWNrTGlzdChidWZmZXIucmVhZFVJbnQxNigpLCBidWZmZXIpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gTElTVF8zMikge1xuICAgICAgICByZXR1cm4gdGhpcy51bnBhY2tMaXN0KGJ1ZmZlci5yZWFkVUludDMyKCksIGJ1ZmZlcik7XG4gICAgICB9IGVsc2UgaWYgKG1hcmtlciA9PSBNQVBfOCkge1xuICAgICAgICByZXR1cm4gdGhpcy51bnBhY2tNYXAoYnVmZmVyLnJlYWRVSW50OCgpLCBidWZmZXIpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gTUFQXzE2KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVucGFja01hcChidWZmZXIucmVhZFVJbnQxNigpLCBidWZmZXIpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gTUFQXzMyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVucGFja01hcChidWZmZXIucmVhZFVJbnQzMigpLCBidWZmZXIpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gU1RSVUNUXzgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5wYWNrU3RydWN0KGJ1ZmZlci5yZWFkVUludDgoKSwgYnVmZmVyKTtcbiAgICAgIH0gZWxzZSBpZiAobWFya2VyID09IFNUUlVDVF8xNikge1xuICAgICAgICByZXR1cm4gdGhpcy51bnBhY2tTdHJ1Y3QoYnVmZmVyLnJlYWRVSW50MTYoKSwgYnVmZmVyKTtcbiAgICAgIH1cbiAgICAgIHZhciBtYXJrZXJIaWdoID0gbWFya2VyICYgMHhGMDtcbiAgICAgIHZhciBtYXJrZXJMb3cgPSBtYXJrZXIgJiAweDBGO1xuICAgICAgaWYgKG1hcmtlckhpZ2ggPT0gMHg4MCkge1xuICAgICAgICByZXR1cm4gX3V0ZjIuZGVmYXVsdC5kZWNvZGUoYnVmZmVyLCBtYXJrZXJMb3cpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXJIaWdoID09IDB4OTApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5wYWNrTGlzdChtYXJrZXJMb3csIGJ1ZmZlcik7XG4gICAgICB9IGVsc2UgaWYgKG1hcmtlckhpZ2ggPT0gMHhBMCkge1xuICAgICAgICByZXR1cm4gdGhpcy51bnBhY2tNYXAobWFya2VyTG93LCBidWZmZXIpO1xuICAgICAgfSBlbHNlIGlmIChtYXJrZXJIaWdoID09IDB4QjApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5wYWNrU3RydWN0KG1hcmtlckxvdywgYnVmZmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3IubmV3RXJyb3IpKFwiVW5rbm93biBwYWNrZWQgdmFsdWUgd2l0aCBtYXJrZXIgXCIgKyBtYXJrZXIudG9TdHJpbmcoMTYpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFVucGFja2VyO1xufSgpO1xuXG5leHBvcnRzLlBhY2tlciA9IFBhY2tlcjtcbmV4cG9ydHMuVW5wYWNrZXIgPSBVbnBhY2tlcjtcbmV4cG9ydHMuU3RydWN0dXJlID0gU3RydWN0dXJlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2tcIik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG52YXIgUG9vbCA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBjcmVhdGUgIGFuIGFsbG9jYXRpb24gZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IHJlc291cmNlLiBJdCdzIGdpdmVuXG4gICAqICAgICAgICAgICAgICAgIGEgc2luZ2xlIGFyZ3VtZW50LCBhIGZ1bmN0aW9uIHRoYXQgd2lsbCByZXR1cm4gdGhlIHJlc291cmNlIHRvXG4gICAqICAgICAgICAgICAgICAgIHRoZSBwb29sIGlmIGludm9rZWQsIHdoaWNoIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBvbiAuZGlzcG9zZVxuICAgKiAgICAgICAgICAgICAgICBvciAuY2xvc2Ugb3Igd2hhdGV2ZXIgbWVjaGFuaXNtIHRoZSByZXNvdXJjZSB1c2VzIHRvIGZpbmFsaXplLlxuICAgKiBAcGFyYW0gZGVzdHJveSBjYWxsZWQgd2l0aCB0aGUgcmVzb3VyY2Ugd2hlbiBpdCBpcyBldmljdGVkIGZyb20gdGhpcyBwb29sXG4gICAqIEBwYXJhbSB2YWxpZGF0ZSBjYWxsZWQgYXQgdmFyaW91cyB0aW1lcyAobGlrZSB3aGVuIGFuIGluc3RhbmNlIGlzIGFjcXVpcmVkIGFuZFxuICAgKiAgICAgICAgICAgICAgICAgd2hlbiBpdCBpcyByZXR1cm5lZCkuIElmIHRoaXMgcmV0dXJucyBmYWxzZSwgdGhlIHJlc291cmNlIHdpbGxcbiAgICogICAgICAgICAgICAgICAgIGJlIGV2aWN0ZWRcbiAgICogQHBhcmFtIG1heElkbGUgdGhlIG1heCBudW1iZXIgb2YgcmVzb3VyY2VzIHRoYXQgYXJlIGFsbG93ZWQgaWRsZSBpbiB0aGUgcG9vbCBhdFxuICAgKiAgICAgICAgICAgICAgICBhbnkgdGltZS4gSWYgdGhpcyB0aHJlc2hvbGQgaXMgZXhjZWVkZWQsIHJlc291cmNlcyB3aWxsIGJlIGV2aWN0ZWQuXG4gICAqL1xuICBmdW5jdGlvbiBQb29sKGNyZWF0ZSkge1xuICAgIHZhciBkZXN0cm95ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIHZhciB2YWxpZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICB2YXIgbWF4SWRsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogNTA7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUG9vbCk7XG5cbiAgICB0aGlzLl9jcmVhdGUgPSBjcmVhdGU7XG4gICAgdGhpcy5fZGVzdHJveSA9IGRlc3Ryb3k7XG4gICAgdGhpcy5fdmFsaWRhdGUgPSB2YWxpZGF0ZTtcbiAgICB0aGlzLl9tYXhJZGxlID0gbWF4SWRsZTtcbiAgICB0aGlzLl9wb29scyA9IHt9O1xuICAgIHRoaXMuX3JlbGVhc2UgPSB0aGlzLl9yZWxlYXNlLmJpbmQodGhpcyk7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShQb29sLCBbe1xuICAgIGtleTogXCJhY3F1aXJlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFjcXVpcmUoa2V5KSB7XG4gICAgICB2YXIgcmVzb3VyY2UgPSB2b2lkIDA7XG4gICAgICB2YXIgcG9vbCA9IHRoaXMuX3Bvb2xzW2tleV07XG4gICAgICBpZiAoIXBvb2wpIHtcbiAgICAgICAgcG9vbCA9IFtdO1xuICAgICAgICB0aGlzLl9wb29sc1trZXldID0gcG9vbDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChwb29sLmxlbmd0aCkge1xuICAgICAgICByZXNvdXJjZSA9IHBvb2wucG9wKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlKHJlc291cmNlKSkge1xuICAgICAgICAgIHJldHVybiByZXNvdXJjZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9kZXN0cm95KHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fY3JlYXRlKGtleSwgdGhpcy5fcmVsZWFzZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInB1cmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHB1cmdlKGtleSkge1xuICAgICAgdmFyIHJlc291cmNlID0gdm9pZCAwO1xuICAgICAgdmFyIHBvb2wgPSB0aGlzLl9wb29sc1trZXldIHx8IFtdO1xuICAgICAgd2hpbGUgKHBvb2wubGVuZ3RoKSB7XG4gICAgICAgIHJlc291cmNlID0gcG9vbC5wb3AoKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveShyZXNvdXJjZSk7XG4gICAgICB9XG4gICAgICBkZWxldGUgdGhpcy5fcG9vbHNba2V5XTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicHVyZ2VBbGxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHVyZ2VBbGwoKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5fcG9vbHMua2V5cykge1xuICAgICAgICBpZiAodGhpcy5fcG9vbHMuaGFzT3duUHJvcGVydHlrZXkpIHtcbiAgICAgICAgICB0aGlzLnB1cmdlKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgIHJldHVybiBrZXkgaW4gdGhpcy5fcG9vbHM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9yZWxlYXNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9yZWxlYXNlKGtleSwgcmVzb3VyY2UpIHtcbiAgICAgIHZhciBwb29sID0gdGhpcy5fcG9vbHNba2V5XTtcbiAgICAgIGlmICghcG9vbCkge1xuICAgICAgICAvL2tleSBoYXMgYmVlbiBwdXJnZWQsIGRvbid0IHB1dCBpdCBiYWNrXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChwb29sLmxlbmd0aCA+PSB0aGlzLl9tYXhJZGxlIHx8ICF0aGlzLl92YWxpZGF0ZShyZXNvdXJjZSkpIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveShyZXNvdXJjZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwb29sLnB1c2gocmVzb3VyY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gUG9vbDtcbn0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gUG9vbDsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL2pzb24vc3RyaW5naWZ5Jyk7XG5cbnZhciBfc3RyaW5naWZ5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N0cmluZ2lmeSk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2syID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJyk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MnKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX3JvdXRpbmdUYWJsZSA9IHJlcXVpcmUoJy4vcm91dGluZy10YWJsZScpO1xuXG52YXIgX3JvdXRpbmdUYWJsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yb3V0aW5nVGFibGUpO1xuXG52YXIgX2Vycm9yID0gcmVxdWlyZSgnLi4vZXJyb3InKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBSZWRpc2NvdmVyeSA9IGZ1bmN0aW9uICgpIHtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7Um91dGluZ1V0aWx9IHJvdXRpbmdVdGlsIHRoZSB1dGlsIHRvIHVzZS5cbiAgICovXG4gIGZ1bmN0aW9uIFJlZGlzY292ZXJ5KHJvdXRpbmdVdGlsKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUmVkaXNjb3ZlcnkpO1xuXG4gICAgdGhpcy5fcm91dGluZ1V0aWwgPSByb3V0aW5nVXRpbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gZmV0Y2ggbmV3IHJvdXRpbmcgdGFibGUgZnJvbSB0aGUgZ2l2ZW4gcm91dGVyLlxuICAgKiBAcGFyYW0ge1Nlc3Npb259IHNlc3Npb24gdGhlIHNlc3Npb24gdG8gdXNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcm91dGVyQWRkcmVzcyB0aGUgVVJMIG9mIHRoZSByb3V0ZXIuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Um91dGluZ1RhYmxlPn0gcHJvbWlzZSByZXNvbHZlZCB3aXRoIG5ldyByb3V0aW5nIHRhYmxlIG9yIG51bGwgd2hlbiBjb25uZWN0aW9uIGVycm9yIGhhcHBlbmVkLlxuICAgKi9cblxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKFJlZGlzY292ZXJ5LCBbe1xuICAgIGtleTogJ2xvb2t1cFJvdXRpbmdUYWJsZU9uUm91dGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9va3VwUm91dGluZ1RhYmxlT25Sb3V0ZXIoc2Vzc2lvbiwgcm91dGVyQWRkcmVzcykge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgcmV0dXJuIHRoaXMuX3JvdXRpbmdVdGlsLmNhbGxSb3V0aW5nUHJvY2VkdXJlKHNlc3Npb24sIHJvdXRlckFkZHJlc3MpLnRoZW4oZnVuY3Rpb24gKHJlY29yZHMpIHtcbiAgICAgICAgaWYgKHJlY29yZHMgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBjb25uZWN0aW9uIGVycm9yIGhhcHBlbmVkLCB1bmFibGUgdG8gcmV0cmlldmUgcm91dGluZyB0YWJsZSBmcm9tIHRoaXMgcm91dGVyLCBuZXh0IG9uZSBzaG91bGQgYmUgcXVlcmllZFxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlY29yZHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgdGhyb3cgKDAsIF9lcnJvci5uZXdFcnJvcikoJ0lsbGVnYWwgcmVzcG9uc2UgZnJvbSByb3V0ZXIgXCInICsgcm91dGVyQWRkcmVzcyArICdcIi4gJyArICdSZWNlaXZlZCAnICsgcmVjb3Jkcy5sZW5ndGggKyAnIHJlY29yZHMgYnV0IGV4cGVjdGVkIG9ubHkgb25lLlxcbicgKyAoMCwgX3N0cmluZ2lmeTIuZGVmYXVsdCkocmVjb3JkcyksIF9lcnJvci5QUk9UT0NPTF9FUlJPUik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVjb3JkID0gcmVjb3Jkc1swXTtcblxuICAgICAgICB2YXIgZXhwaXJhdGlvblRpbWUgPSBfdGhpcy5fcm91dGluZ1V0aWwucGFyc2VUdGwocmVjb3JkLCByb3V0ZXJBZGRyZXNzKTtcblxuICAgICAgICB2YXIgX3JvdXRpbmdVdGlsJHBhcnNlU2VyID0gX3RoaXMuX3JvdXRpbmdVdGlsLnBhcnNlU2VydmVycyhyZWNvcmQsIHJvdXRlckFkZHJlc3MpLFxuICAgICAgICAgICAgcm91dGVycyA9IF9yb3V0aW5nVXRpbCRwYXJzZVNlci5yb3V0ZXJzLFxuICAgICAgICAgICAgcmVhZGVycyA9IF9yb3V0aW5nVXRpbCRwYXJzZVNlci5yZWFkZXJzLFxuICAgICAgICAgICAgd3JpdGVycyA9IF9yb3V0aW5nVXRpbCRwYXJzZVNlci53cml0ZXJzO1xuXG4gICAgICAgIFJlZGlzY292ZXJ5Ll9hc3NlcnROb25FbXB0eShyb3V0ZXJzLCAncm91dGVycycsIHJvdXRlckFkZHJlc3MpO1xuICAgICAgICBSZWRpc2NvdmVyeS5fYXNzZXJ0Tm9uRW1wdHkocmVhZGVycywgJ3JlYWRlcnMnLCByb3V0ZXJBZGRyZXNzKTtcbiAgICAgICAgLy8gY2FzZSB3aXRoIG5vIHdyaXRlcnMgaXMgcHJvY2Vzc2VkIGhpZ2hlciBpbiB0aGUgcHJvbWlzZSBjaGFpbiBiZWNhdXNlIG9ubHkgUm91dGluZ0RyaXZlciBrbm93c1xuICAgICAgICAvLyBob3cgdG8gZGVhbCB3aXRoIHN1Y2ggdGFibGUgYW5kIGhvdyB0byB0cmVhdCByb3V0ZXIgdGhhdCByZXR1cm5lZCBzdWNoIHRhYmxlXG5cbiAgICAgICAgcmV0dXJuIG5ldyBfcm91dGluZ1RhYmxlMi5kZWZhdWx0KHJvdXRlcnMsIHJlYWRlcnMsIHdyaXRlcnMsIGV4cGlyYXRpb25UaW1lKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiAnX2Fzc2VydE5vbkVtcHR5JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2Fzc2VydE5vbkVtcHR5KHNlcnZlcnNSb3VuZFJvYmluQXJyYXksIHNlcnZlcnNOYW1lLCByb3V0ZXJBZGRyZXNzKSB7XG4gICAgICBpZiAoc2VydmVyc1JvdW5kUm9iaW5BcnJheS5pc0VtcHR5KCkpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvci5uZXdFcnJvcikoJ1JlY2VpdmVkIG5vICcgKyBzZXJ2ZXJzTmFtZSArICcgZnJvbSByb3V0ZXIgJyArIHJvdXRlckFkZHJlc3MsIF9lcnJvci5QUk9UT0NPTF9FUlJPUik7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBSZWRpc2NvdmVyeTtcbn0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gUmVkaXNjb3Zlcnk7IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9qc29uL3N0cmluZ2lmeScpO1xuXG52YXIgX3N0cmluZ2lmeTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdHJpbmdpZnkpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjaycpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzJyk7XG5cbnZhciBfY3JlYXRlQ2xhc3MzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlQ2xhc3MyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qKlxuICogQW4gYXJyYXkgdGhhdCBsZXRzIHlvdSBob3AgdGhyb3VnaCB0aGUgZWxlbWVudHMgZW5kbGVzc2x5LlxuICovXG52YXIgUm91bmRSb2JpbkFycmF5ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBSb3VuZFJvYmluQXJyYXkoaXRlbXMpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBSb3VuZFJvYmluQXJyYXkpO1xuXG4gICAgdGhpcy5faXRlbXMgPSBpdGVtcyB8fCBbXTtcbiAgICB0aGlzLl9vZmZzZXQgPSAwO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoUm91bmRSb2JpbkFycmF5LCBbe1xuICAgIGtleTogJ25leHQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gdGhpcy5fb2Zmc2V0ICUgdGhpcy5zaXplKCk7XG4gICAgICB0aGlzLl9vZmZzZXQrKztcbiAgICAgIHJldHVybiB0aGlzLl9pdGVtc1tpbmRleF07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncHVzaEFsbCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHB1c2hBbGwoZWxlbXMpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShlbGVtcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQgYnV0IGdvdDogJyArIGVsZW1zKTtcbiAgICAgIH1cblxuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5faXRlbXMsIGVsZW1zKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdpc0VtcHR5JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNFbXB0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pdGVtcy5sZW5ndGggPT09IDA7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnc2l6ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNpemUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5faXRlbXMubGVuZ3RoO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3RvQXJyYXknLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b0FycmF5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbW92ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZShpdGVtKSB7XG4gICAgICB0aGlzLl9pdGVtcyA9IHRoaXMuX2l0ZW1zLmZpbHRlcihmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudCAhPT0gaXRlbTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3RvU3RyaW5nJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gKDAsIF9zdHJpbmdpZnkyLmRlZmF1bHQpKHRoaXMuX2l0ZW1zKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFJvdW5kUm9iaW5BcnJheTtcbn0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gUm91bmRSb2JpbkFycmF5OyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF90b0NvbnN1bWFibGVBcnJheTIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXknKTtcblxudmFyIF90b0NvbnN1bWFibGVBcnJheTMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90b0NvbnN1bWFibGVBcnJheTIpO1xuXG52YXIgX2Zyb20gPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvYXJyYXkvZnJvbScpO1xuXG52YXIgX2Zyb20yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZnJvbSk7XG5cbnZhciBfc2V0ID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL3NldCcpO1xuXG52YXIgX3NldDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zZXQpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjaycpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzJyk7XG5cbnZhciBfY3JlYXRlQ2xhc3MzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlQ2xhc3MyKTtcblxudmFyIF9pbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZWdlcicpO1xuXG52YXIgX3JvdW5kUm9iaW5BcnJheSA9IHJlcXVpcmUoJy4vcm91bmQtcm9iaW4tYXJyYXknKTtcblxudmFyIF9yb3VuZFJvYmluQXJyYXkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcm91bmRSb2JpbkFycmF5KTtcblxudmFyIF9kcml2ZXIgPSByZXF1aXJlKCcuLi9kcml2ZXInKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIE1JTl9ST1VURVJTID0gMTsgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gICAgICAgICAgICAgICAgICAgICAgKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgICAgICAgICAgICAgICAgICAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgICAgICAgICAgICAgICAgICAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICAgICAgICAgICAgICAgICAgICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICAgICAgICAgICAgICAgICAgICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAgICAgICAgICAgICAgICAgICAgICovXG5cbnZhciBSb3V0aW5nVGFibGUgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFJvdXRpbmdUYWJsZShyb3V0ZXJzLCByZWFkZXJzLCB3cml0ZXJzLCBleHBpcmF0aW9uVGltZSkge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIFJvdXRpbmdUYWJsZSk7XG5cbiAgICB0aGlzLnJvdXRlcnMgPSByb3V0ZXJzIHx8IG5ldyBfcm91bmRSb2JpbkFycmF5Mi5kZWZhdWx0KCk7XG4gICAgdGhpcy5yZWFkZXJzID0gcmVhZGVycyB8fCBuZXcgX3JvdW5kUm9iaW5BcnJheTIuZGVmYXVsdCgpO1xuICAgIHRoaXMud3JpdGVycyA9IHdyaXRlcnMgfHwgbmV3IF9yb3VuZFJvYmluQXJyYXkyLmRlZmF1bHQoKTtcbiAgICB0aGlzLmV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWUgfHwgKDAsIF9pbnRlZ2VyLmludCkoMCk7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShSb3V0aW5nVGFibGUsIFt7XG4gICAga2V5OiAnZm9yZ2V0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9yZ2V0KGFkZHJlc3MpIHtcbiAgICAgIC8vIERvbid0IHJlbW92ZSBpdCBmcm9tIHRoZSBzZXQgb2Ygcm91dGVycywgc2luY2UgdGhhdCBtaWdodCBtZWFuIHdlIGxvc2Ugb3VyIGFiaWxpdHkgdG8gcmUtZGlzY292ZXIsXG4gICAgICAvLyBqdXN0IHJlbW92ZSBpdCBmcm9tIHRoZSBzZXQgb2YgcmVhZGVycyBhbmQgd3JpdGVycywgc28gdGhhdCB3ZSBkb24ndCB1c2UgaXQgZm9yIGFjdHVhbCB3b3JrIHdpdGhvdXRcbiAgICAgIC8vIHBlcmZvcm1pbmcgZGlzY292ZXJ5IGZpcnN0LlxuICAgICAgdGhpcy5yZWFkZXJzLnJlbW92ZShhZGRyZXNzKTtcbiAgICAgIHRoaXMud3JpdGVycy5yZW1vdmUoYWRkcmVzcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZm9yZ2V0Um91dGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9yZ2V0Um91dGVyKGFkZHJlc3MpIHtcbiAgICAgIHRoaXMucm91dGVycy5yZW1vdmUoYWRkcmVzcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZm9yZ2V0V3JpdGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9yZ2V0V3JpdGVyKGFkZHJlc3MpIHtcbiAgICAgIHRoaXMud3JpdGVycy5yZW1vdmUoYWRkcmVzcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnc2VydmVyc0RpZmYnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXJ2ZXJzRGlmZihvdGhlclJvdXRpbmdUYWJsZSkge1xuICAgICAgdmFyIG9sZFNlcnZlcnMgPSBuZXcgX3NldDIuZGVmYXVsdCh0aGlzLl9hbGxTZXJ2ZXJzKCkpO1xuICAgICAgdmFyIG5ld1NlcnZlcnMgPSBvdGhlclJvdXRpbmdUYWJsZS5fYWxsU2VydmVycygpO1xuICAgICAgbmV3U2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChuZXdTZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9sZFNlcnZlcnMuZGVsZXRlKG5ld1NlcnZlcik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAoMCwgX2Zyb20yLmRlZmF1bHQpKG9sZFNlcnZlcnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoaXMgcm91dGluZyB0YWJsZSBpcyBmcmVzaCB0byBwZXJmb3JtIHRoZSByZXF1aXJlZCBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGFjY2Vzc01vZGUgdGhlIHR5cGUgb2Ygb3BlcmF0aW9uLiBBbGxvd2VkIHZhbHVlcyBhcmUge0BsaW5rIFJFQUR9IGFuZCB7QGxpbmsgV1JJVEV9LlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHdoZW4gdGhpcyB0YWJsZSBjb250YWlucyBzZXJ2ZXJzIHRvIHNlcnZlIHRoZSByZXF1aXJlZCBvcGVyYXRpb24sXG4gICAgICogPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnaXNTdGFsZUZvcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzU3RhbGVGb3IoYWNjZXNzTW9kZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZXhwaXJhdGlvblRpbWUubGVzc1RoYW4oRGF0ZS5ub3coKSkgfHwgdGhpcy5yb3V0ZXJzLnNpemUoKSA8IE1JTl9ST1VURVJTIHx8IGFjY2Vzc01vZGUgPT09IF9kcml2ZXIuUkVBRCAmJiB0aGlzLnJlYWRlcnMuaXNFbXB0eSgpIHx8IGFjY2Vzc01vZGUgPT09IF9kcml2ZXIuV1JJVEUgJiYgdGhpcy53cml0ZXJzLmlzRW1wdHkoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfYWxsU2VydmVycycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9hbGxTZXJ2ZXJzKCkge1xuICAgICAgcmV0dXJuIFtdLmNvbmNhdCgoMCwgX3RvQ29uc3VtYWJsZUFycmF5My5kZWZhdWx0KSh0aGlzLnJvdXRlcnMudG9BcnJheSgpKSwgKDAsIF90b0NvbnN1bWFibGVBcnJheTMuZGVmYXVsdCkodGhpcy5yZWFkZXJzLnRvQXJyYXkoKSksICgwLCBfdG9Db25zdW1hYmxlQXJyYXkzLmRlZmF1bHQpKHRoaXMud3JpdGVycy50b0FycmF5KCkpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICd0b1N0cmluZycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuICdSb3V0aW5nVGFibGVbJyArICgnZXhwaXJhdGlvblRpbWU9JyArIHRoaXMuZXhwaXJhdGlvblRpbWUgKyAnLCAnKSArICgncm91dGVycz0nICsgdGhpcy5yb3V0ZXJzICsgJywgJykgKyAoJ3JlYWRlcnM9JyArIHRoaXMucmVhZGVycyArICcsICcpICsgKCd3cml0ZXJzPScgKyB0aGlzLndyaXRlcnMgKyAnXScpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gUm91dGluZ1RhYmxlO1xufSgpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBSb3V0aW5nVGFibGU7IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2RlZmluZVByb3BlcnR5MiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eScpO1xuXG52YXIgX2RlZmluZVByb3BlcnR5MyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlZmluZVByb3BlcnR5Mik7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL2pzb24vc3RyaW5naWZ5Jyk7XG5cbnZhciBfc3RyaW5naWZ5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N0cmluZ2lmeSk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2syID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJyk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MnKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX3JvdW5kUm9iaW5BcnJheSA9IHJlcXVpcmUoJy4vcm91bmQtcm9iaW4tYXJyYXknKTtcblxudmFyIF9yb3VuZFJvYmluQXJyYXkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcm91bmRSb2JpbkFycmF5KTtcblxudmFyIF9lcnJvciA9IHJlcXVpcmUoJy4uL2Vycm9yJyk7XG5cbnZhciBfaW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVnZXInKTtcblxudmFyIF9pbnRlZ2VyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ludGVnZXIpO1xuXG52YXIgX3NlcnZlclZlcnNpb24gPSByZXF1aXJlKCcuL3NlcnZlci12ZXJzaW9uJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG52YXIgQ0FMTF9HRVRfU0VSVkVSUyA9ICdDQUxMIGRibXMuY2x1c3Rlci5yb3V0aW5nLmdldFNlcnZlcnMnO1xudmFyIEdFVF9ST1VUSU5HX1RBQkxFX1BBUkFNID0gJ2NvbnRleHQnO1xudmFyIENBTExfR0VUX1JPVVRJTkdfVEFCTEUgPSAnQ0FMTCBkYm1zLmNsdXN0ZXIucm91dGluZy5nZXRSb3V0aW5nVGFibGUoeycgKyBHRVRfUk9VVElOR19UQUJMRV9QQVJBTSArICd9KSc7XG52YXIgUFJPQ0VEVVJFX05PVF9GT1VORF9DT0RFID0gJ05lby5DbGllbnRFcnJvci5Qcm9jZWR1cmUuUHJvY2VkdXJlTm90Rm91bmQnO1xuXG52YXIgUm91dGluZ1V0aWwgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFJvdXRpbmdVdGlsKHJvdXRpbmdDb250ZXh0KSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUm91dGluZ1V0aWwpO1xuXG4gICAgdGhpcy5fcm91dGluZ0NvbnRleHQgPSByb3V0aW5nQ29udGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2Ugcm91dGluZyBwcm9jZWR1cmUgdXNpbmcgdGhlIGdpdmVuIHNlc3Npb24uXG4gICAqIEBwYXJhbSB7U2Vzc2lvbn0gc2Vzc2lvbiB0aGUgc2Vzc2lvbiB0byB1c2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb3V0ZXJBZGRyZXNzIHRoZSBVUkwgb2YgdGhlIHJvdXRlci5cbiAgICogQHJldHVybiB7UHJvbWlzZTxSZWNvcmRbXT59IHByb21pc2UgcmVzb2x2ZWQgd2l0aCByZWNvcmRzIHJldHVybmVkIGJ5IHRoZSBwcm9jZWR1cmUgY2FsbCBvciBudWxsIGlmXG4gICAqIGNvbm5lY3Rpb24gZXJyb3IgaGFwcGVuZWQuXG4gICAqL1xuXG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoUm91dGluZ1V0aWwsIFt7XG4gICAga2V5OiAnY2FsbFJvdXRpbmdQcm9jZWR1cmUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjYWxsUm91dGluZ1Byb2NlZHVyZShzZXNzaW9uLCByb3V0ZXJBZGRyZXNzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2FsbEF2YWlsYWJsZVJvdXRpbmdQcm9jZWR1cmUoc2Vzc2lvbikudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgIHNlc3Npb24uY2xvc2UoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWNvcmRzO1xuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSBQUk9DRURVUkVfTk9UX0ZPVU5EX0NPREUpIHtcbiAgICAgICAgICAvLyB0aHJvdyB3aGVuIGdldFNlcnZlcnMgcHJvY2VkdXJlIG5vdCBmb3VuZCBiZWNhdXNlIHRoaXMgaXMgY2xlYXJseSBhIGNvbmZpZ3VyYXRpb24gaXNzdWVcbiAgICAgICAgICB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKSgnU2VydmVyICcgKyByb3V0ZXJBZGRyZXNzICsgJyBjb3VsZCBub3QgcGVyZm9ybSByb3V0aW5nLiAnICsgJ01ha2Ugc3VyZSB5b3UgYXJlIGNvbm5lY3RpbmcgdG8gYSBjYXVzYWwgY2x1c3RlcicsIF9lcnJvci5TRVJWSUNFX1VOQVZBSUxBQkxFKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXR1cm4gbm90aGluZyB3aGVuIGZhaWxlZCB0byBjb25uZWN0IGJlY2F1c2UgY29kZSBoaWdoZXIgaW4gdGhlIGNhbGxzdGFjayBpcyBzdGlsbCBhYmxlIHRvIHJldHJ5IHdpdGggYVxuICAgICAgICAvLyBkaWZmZXJlbnQgc2Vzc2lvbiB0b3dhcmRzIGEgZGlmZmVyZW50IHJvdXRlclxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3BhcnNlVHRsJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VUdGwocmVjb3JkLCByb3V0ZXJBZGRyZXNzKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbm93ID0gKDAsIF9pbnRlZ2VyLmludCkoRGF0ZS5ub3coKSk7XG4gICAgICAgIHZhciBleHBpcmVzID0gcmVjb3JkLmdldCgndHRsJykubXVsdGlwbHkoMTAwMCkuYWRkKG5vdyk7XG4gICAgICAgIC8vIGlmIHRoZSBzZXJ2ZXIgdXNlcyBhIHJlYWxseSBiaWcgZXhwaXJlIHRpbWUgbGlrZSBMb25nLk1BWF9WQUxVRSB0aGlzIG1heSBoYXZlIG92ZXJmbG93ZWRcbiAgICAgICAgaWYgKGV4cGlyZXMubGVzc1RoYW4obm93KSkge1xuICAgICAgICAgIHJldHVybiBfaW50ZWdlcjIuZGVmYXVsdC5NQVhfVkFMVUU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV4cGlyZXM7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKSgnVW5hYmxlIHRvIHBhcnNlIFRUTCBlbnRyeSBmcm9tIHJvdXRlciAnICsgcm91dGVyQWRkcmVzcyArICcgZnJvbSByZWNvcmQ6XFxuJyArICgwLCBfc3RyaW5naWZ5Mi5kZWZhdWx0KShyZWNvcmQpLCBfZXJyb3IuUFJPVE9DT0xfRVJST1IpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3BhcnNlU2VydmVycycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlU2VydmVycyhyZWNvcmQsIHJvdXRlckFkZHJlc3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBzZXJ2ZXJzID0gcmVjb3JkLmdldCgnc2VydmVycycpO1xuXG4gICAgICAgIHZhciByb3V0ZXJzID0gbmV3IF9yb3VuZFJvYmluQXJyYXkyLmRlZmF1bHQoKTtcbiAgICAgICAgdmFyIHJlYWRlcnMgPSBuZXcgX3JvdW5kUm9iaW5BcnJheTIuZGVmYXVsdCgpO1xuICAgICAgICB2YXIgd3JpdGVycyA9IG5ldyBfcm91bmRSb2JpbkFycmF5Mi5kZWZhdWx0KCk7XG5cbiAgICAgICAgc2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzZXJ2ZXIpIHtcbiAgICAgICAgICB2YXIgcm9sZSA9IHNlcnZlclsncm9sZSddO1xuICAgICAgICAgIHZhciBhZGRyZXNzZXMgPSBzZXJ2ZXJbJ2FkZHJlc3NlcyddO1xuXG4gICAgICAgICAgaWYgKHJvbGUgPT09ICdST1VURScpIHtcbiAgICAgICAgICAgIHJvdXRlcnMucHVzaEFsbChhZGRyZXNzZXMpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ1dSSVRFJykge1xuICAgICAgICAgICAgd3JpdGVycy5wdXNoQWxsKGFkZHJlc3Nlcyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAnUkVBRCcpIHtcbiAgICAgICAgICAgIHJlYWRlcnMucHVzaEFsbChhZGRyZXNzZXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKSgnVW5rbm93biBzZXJ2ZXIgcm9sZSBcIicgKyByb2xlICsgJ1wiJywgX2Vycm9yLlBST1RPQ09MX0VSUk9SKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcm91dGVyczogcm91dGVycyxcbiAgICAgICAgICByZWFkZXJzOiByZWFkZXJzLFxuICAgICAgICAgIHdyaXRlcnM6IHdyaXRlcnNcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGlnbm9yZSkge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKSgnVW5hYmxlIHRvIHBhcnNlIHNlcnZlcnMgZW50cnkgZnJvbSByb3V0ZXIgJyArIHJvdXRlckFkZHJlc3MgKyAnIGZyb20gcmVjb3JkOlxcbicgKyAoMCwgX3N0cmluZ2lmeTIuZGVmYXVsdCkocmVjb3JkKSwgX2Vycm9yLlBST1RPQ09MX0VSUk9SKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfY2FsbEF2YWlsYWJsZVJvdXRpbmdQcm9jZWR1cmUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfY2FsbEF2YWlsYWJsZVJvdXRpbmdQcm9jZWR1cmUoc2Vzc2lvbikge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgcmV0dXJuIHNlc3Npb24uX3J1bihudWxsLCBudWxsLCBmdW5jdGlvbiAoY29ubmVjdGlvbiwgc3RyZWFtT2JzZXJ2ZXIpIHtcbiAgICAgICAgdmFyIHNlcnZlclZlcnNpb25TdHJpbmcgPSBjb25uZWN0aW9uLnNlcnZlci52ZXJzaW9uO1xuICAgICAgICB2YXIgc2VydmVyVmVyc2lvbiA9IF9zZXJ2ZXJWZXJzaW9uLlNlcnZlclZlcnNpb24uZnJvbVN0cmluZyhzZXJ2ZXJWZXJzaW9uU3RyaW5nKTtcblxuICAgICAgICBpZiAoc2VydmVyVmVyc2lvbi5jb21wYXJlVG8oX3NlcnZlclZlcnNpb24uVkVSU0lPTl8zXzJfMCkgPj0gMCkge1xuICAgICAgICAgIHZhciBwYXJhbXMgPSAoMCwgX2RlZmluZVByb3BlcnR5My5kZWZhdWx0KSh7fSwgR0VUX1JPVVRJTkdfVEFCTEVfUEFSQU0sIF90aGlzLl9yb3V0aW5nQ29udGV4dCk7XG4gICAgICAgICAgY29ubmVjdGlvbi5ydW4oQ0FMTF9HRVRfUk9VVElOR19UQUJMRSwgcGFyYW1zLCBzdHJlYW1PYnNlcnZlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29ubmVjdGlvbi5ydW4oQ0FMTF9HRVRfU0VSVkVSUywge30sIHN0cmVhbU9ic2VydmVyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBSb3V0aW5nVXRpbDtcbn0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gUm91dGluZ1V0aWw7IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5WRVJTSU9OXzNfMl8wID0gZXhwb3J0cy5TZXJ2ZXJWZXJzaW9uID0gdW5kZWZpbmVkO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjaycpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzJyk7XG5cbnZhciBfY3JlYXRlQ2xhc3MzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlQ2xhc3MyKTtcblxudmFyIF91dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBTRVJWRVJfVkVSU0lPTl9SRUdFWCA9IG5ldyBSZWdFeHAoJ14oTmVvNGovKT8oXFxcXGQrKVxcXFwuKFxcXFxkKykoPzpcXFxcLik/KFxcXFxkKikoXFxcXC58LXxcXFxcKyk/KFswLTlBLVphLXotLl0qKT8kJyk7IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbnZhciBTZXJ2ZXJWZXJzaW9uID0gZnVuY3Rpb24gKCkge1xuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1ham9yIHRoZSBtYWpvciB2ZXJzaW9uIG51bWJlci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pbm9yIHRoZSBtaW5vciB2ZXJzaW9uIG51bWJlci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHBhdGNoIHRoZSBwYXRjaCB2ZXJzaW9uIG51bWJlci5cbiAgICovXG4gIGZ1bmN0aW9uIFNlcnZlclZlcnNpb24obWFqb3IsIG1pbm9yLCBwYXRjaCkge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIFNlcnZlclZlcnNpb24pO1xuXG4gICAgdGhpcy5tYWpvciA9IG1ham9yO1xuICAgIHRoaXMubWlub3IgPSBtaW5vcjtcbiAgICB0aGlzLnBhdGNoID0gcGF0Y2g7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgZ2l2ZW4gc3RyaW5nIHRvIGEge0BsaW5rIFNlcnZlclZlcnNpb259IG9iamVjdC5cbiAgICogQHBhcmFtIHZlcnNpb25TdHIgdGhlIHN0cmluZyB0byBwYXJzZS5cbiAgICogQHJldHVybiB7U2VydmVyVmVyc2lvbn0gdmVyc2lvbiBmb3IgdGhlIGdpdmVuIHN0cmluZy5cbiAgICogQHRocm93cyBFcnJvciBpZiBnaXZlbiBzdHJpbmcgY2FuJ3QgYmUgcGFyc2VkLlxuICAgKi9cblxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKFNlcnZlclZlcnNpb24sIFt7XG4gICAga2V5OiAnY29tcGFyZVRvJyxcblxuXG4gICAgLyoqXG4gICAgICogQ29tcGFyZSB0aGlzIHZlcnNpb24gdG8gdGhlIGdpdmVuIG9uZS5cbiAgICAgKiBAcGFyYW0ge1NlcnZlclZlcnNpb259IG90aGVyIHRoZSB2ZXJzaW9uIHRvIGNvbXBhcmUgd2l0aC5cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHZhbHVlIDAgaWYgdGhpcyB2ZXJzaW9uIGlzIHRoZSBzYW1lIGFzIHRoZSBnaXZlbiBvbmUsIHZhbHVlIGxlc3MgdGhlbiAwIHdoZW4gdGhpcyB2ZXJzaW9uXG4gICAgICogd2FzIHJlbGVhc2VkIGVhcmxpZXIgdGhhbiB0aGUgZ2l2ZW4gb25lIGFuZCB2YWx1ZSBncmVhdGVyIHRoZW4gMCB3aGVuIHRoaXMgdmVyc2lvbiB3YXMgcmVsZWFzZWQgYWZ0ZXJcbiAgICAgKiB0aGFuIHRoZSBnaXZlbiBvbmUuXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBhcmVUbyhvdGhlcikge1xuICAgICAgdmFyIHJlc3VsdCA9IGNvbXBhcmVJbnRzKHRoaXMubWFqb3IsIG90aGVyLm1ham9yKTtcbiAgICAgIGlmIChyZXN1bHQgPT09IDApIHtcbiAgICAgICAgcmVzdWx0ID0gY29tcGFyZUludHModGhpcy5taW5vciwgb3RoZXIubWlub3IpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSAwKSB7XG4gICAgICAgICAgcmVzdWx0ID0gY29tcGFyZUludHModGhpcy5wYXRjaCwgb3RoZXIucGF0Y2gpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiAnZnJvbVN0cmluZycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZyb21TdHJpbmcodmVyc2lvblN0cikge1xuICAgICAgaWYgKCF2ZXJzaW9uU3RyKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VydmVyVmVyc2lvbigzLCAwLCAwKTtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLmFzc2VydFN0cmluZykodmVyc2lvblN0ciwgJ05lbzRqIHZlcnNpb24gc3RyaW5nJyk7XG5cbiAgICAgIHZhciB2ZXJzaW9uID0gdmVyc2lvblN0ci5tYXRjaChTRVJWRVJfVkVSU0lPTl9SRUdFWCk7XG4gICAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnBhcnNhYmxlIE5lbzRqIHZlcnNpb246ICcgKyB2ZXJzaW9uU3RyKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG1ham9yID0gcGFyc2VJbnRTdHJpY3QodmVyc2lvblsyXSk7XG4gICAgICB2YXIgbWlub3IgPSBwYXJzZUludFN0cmljdCh2ZXJzaW9uWzNdKTtcbiAgICAgIHZhciBwYXRjaCA9IHBhcnNlSW50U3RyaWN0KHZlcnNpb25bNF0gfHwgMCk7XG5cbiAgICAgIHJldHVybiBuZXcgU2VydmVyVmVyc2lvbihtYWpvciwgbWlub3IsIHBhdGNoKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFNlcnZlclZlcnNpb247XG59KCk7XG5cbmZ1bmN0aW9uIHBhcnNlSW50U3RyaWN0KHN0ciwgbmFtZSkge1xuICB2YXIgdmFsdWUgPSBwYXJzZUludChzdHIpO1xuICBpZiAoIXZhbHVlICYmIHZhbHVlICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnBhcnNhYmxlIG51bWJlciAnICsgbmFtZSArICc6IFxcJycgKyBzdHIgKyAnXFwnJyk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlSW50cyh4LCB5KSB7XG4gIHJldHVybiB4IDwgeSA/IC0xIDogeCA9PT0geSA/IDAgOiAxO1xufVxuXG52YXIgVkVSU0lPTl8zXzJfMCA9IG5ldyBTZXJ2ZXJWZXJzaW9uKDMsIDIsIDApO1xuXG5leHBvcnRzLlNlcnZlclZlcnNpb24gPSBTZXJ2ZXJWZXJzaW9uO1xuZXhwb3J0cy5WRVJTSU9OXzNfMl8wID0gVkVSU0lPTl8zXzJfMDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrXCIpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzc1wiKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX3JlY29yZCA9IHJlcXVpcmUoXCIuLi9yZWNvcmRcIik7XG5cbnZhciBfcmVjb3JkMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlY29yZCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogSGFuZGxlcyBhIFJVTi9QVUxMX0FMTCwgb3IgUlVOL0RJU0NBUkRfQUxMIHJlcXVlc3RzLCBtYXBzIHRoZSByZXNwb25zZXNcbiAqIGluIGEgd2F5IHRoYXQgYSB1c2VyLXByb3ZpZGVkIG9ic2VydmVyIGNhbiBzZWUgdGhlc2UgYXMgYSBjbGVhbiBTdHJlYW1cbiAqIG9mIHJlY29yZHMuXG4gKiBUaGlzIGNsYXNzIHdpbGwgcXVldWUgdXAgaW5jb21pbmcgbWVzc2FnZXMgdW50aWwgYSB1c2VyLXByb3ZpZGVkIG9ic2VydmVyXG4gKiBmb3IgdGhlIGluY29taW5nIHN0cmVhbSBpcyByZWdpc3RlcmVkLiBUaHVzLCB3ZSBrZWVwIGZpZWxkcyBhcm91bmRcbiAqIGZvciB0cmFja2luZyBoZWFkL3JlY29yZHMvdGFpbC4gVGhlc2UgYXJlIG9ubHkgdXNlZCBpZiB0aGVyZSBpcyBub1xuICogb2JzZXJ2ZXIgcmVnaXN0ZXJlZC5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovXG52YXIgU3RyZWFtT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIGVycm9yVHJhbnNmb3JtZXIgb3B0aW9uYWwgY2FsbGJhY2sgdG8gYmUgdXNlZCBmb3IgYWRkaW5nIGFkZGl0aW9uYWwgbG9naWMgb24gZXJyb3JcbiAgICovXG4gIGZ1bmN0aW9uIFN0cmVhbU9ic2VydmVyKCkge1xuICAgIHZhciBlcnJvclRyYW5zZm9ybWVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICByZXR1cm4gZXJyO1xuICAgIH07XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgU3RyZWFtT2JzZXJ2ZXIpO1xuXG4gICAgdGhpcy5fZmllbGRLZXlzID0gbnVsbDtcbiAgICB0aGlzLl9maWVsZExvb2t1cCA9IG51bGw7XG4gICAgdGhpcy5fcXVldWVkUmVjb3JkcyA9IFtdO1xuICAgIHRoaXMuX3RhaWwgPSBudWxsO1xuICAgIHRoaXMuX2Vycm9yID0gbnVsbDtcbiAgICB0aGlzLl9oYXNGYWlsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9lcnJvclRyYW5zZm9ybWVyID0gZXJyb3JUcmFuc2Zvcm1lcjtcbiAgICB0aGlzLl9vYnNlcnZlciA9IG51bGw7XG4gICAgdGhpcy5fY29ubiA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCBiZSBjYWxsZWQgb24gZXZlcnkgcmVjb3JkIHRoYXQgY29tZXMgaW4gYW5kIHRyYW5zZm9ybSBhIHJhdyByZWNvcmRcbiAgICogdG8gYSBPYmplY3QuIElmIHVzZXItcHJvdmlkZWQgb2JzZXJ2ZXIgaXMgcHJlc2VudCwgcGFzcyB0cmFuc2Zvcm1lZCByZWNvcmRcbiAgICogdG8gaXQncyBvbk5leHQgbWV0aG9kLCBvdGhlcndpc2UsIHB1c2ggdG8gcmVjb3JkIHF1ZS5cbiAgICogQHBhcmFtIHtBcnJheX0gcmF3UmVjb3JkIC0gQW4gYXJyYXkgd2l0aCB0aGUgcmF3IHJlY29yZFxuICAgKi9cblxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKFN0cmVhbU9ic2VydmVyLCBbe1xuICAgIGtleTogXCJvbk5leHRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25OZXh0KHJhd1JlY29yZCkge1xuICAgICAgdmFyIHJlY29yZCA9IG5ldyBfcmVjb3JkMi5kZWZhdWx0KHRoaXMuX2ZpZWxkS2V5cywgcmF3UmVjb3JkLCB0aGlzLl9maWVsZExvb2t1cCk7XG4gICAgICBpZiAodGhpcy5fb2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5fb2JzZXJ2ZXIub25OZXh0KHJlY29yZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9xdWV1ZWRSZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25Db21wbGV0ZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25Db21wbGV0ZWQobWV0YSkge1xuICAgICAgaWYgKHRoaXMuX2ZpZWxkS2V5cyA9PT0gbnVsbCkge1xuICAgICAgICAvLyBTdHJlYW0gaGVhZGVyLCBidWlsZCBhIG5hbWUtPmluZGV4IGZpZWxkIGxvb2t1cCB0YWJsZVxuICAgICAgICAvLyB0byBiZSB1c2VkIGJ5IHJlY29yZHMuIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHRvIG1ha2UgaXRcbiAgICAgICAgLy8gZmFzdGVyIHRvIGxvb2sgdXAgZmllbGRzIGluIGEgcmVjb3JkIGJ5IG5hbWUsIHJhdGhlciB0aGFuIGJ5IGluZGV4LlxuICAgICAgICAvLyBTaW5jZSB0aGUgcmVjb3JkcyB3ZSBnZXQgYmFjayB2aWEgQm9sdCBhcmUganVzdCBhcnJheXMgb2YgdmFsdWVzLlxuICAgICAgICB0aGlzLl9maWVsZEtleXMgPSBbXTtcbiAgICAgICAgdGhpcy5fZmllbGRMb29rdXAgPSB7fTtcbiAgICAgICAgaWYgKG1ldGEuZmllbGRzICYmIG1ldGEuZmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLl9maWVsZEtleXMgPSBtZXRhLmZpZWxkcztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1ldGEuZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLl9maWVsZExvb2t1cFttZXRhLmZpZWxkc1tpXV0gPSBpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRW5kIG9mIHN0cmVhbVxuICAgICAgICBpZiAodGhpcy5fb2JzZXJ2ZXIpIHtcbiAgICAgICAgICB0aGlzLl9vYnNlcnZlci5vbkNvbXBsZXRlZChtZXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl90YWlsID0gbWV0YTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZXNvbHZlQ29ubmVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNvbHZlQ29ubmVjdGlvbihjb25uKSB7XG4gICAgICB0aGlzLl9jb25uID0gY29ubjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaWxsIGJlIGNhbGxlZCBvbiBlcnJvcnMuXG4gICAgICogSWYgdXNlci1wcm92aWRlZCBvYnNlcnZlciBpcyBwcmVzZW50LCBwYXNzIHRoZSBlcnJvclxuICAgICAqIHRvIGl0J3Mgb25FcnJvciBtZXRob2QsIG90aGVyd2lzZSBzZXQgaW5zdGFuY2UgdmFyaWFibGUgX2Vycm9yLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBlcnJvciAtIEFuIGVycm9yIG9iamVjdFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwib25FcnJvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkVycm9yKGVycm9yKSB7XG4gICAgICB2YXIgdHJhbnNmb3JtZWRFcnJvciA9IHRoaXMuX2Vycm9yVHJhbnNmb3JtZXIoZXJyb3IsIHRoaXMuX2Nvbm4pO1xuICAgICAgaWYgKHRoaXMuX2hhc0ZhaWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9oYXNGYWlsZWQgPSB0cnVlO1xuICAgICAgaWYgKHRoaXMuX29ic2VydmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9vYnNlcnZlci5vbkVycm9yKSB7XG4gICAgICAgICAgdGhpcy5fb2JzZXJ2ZXIub25FcnJvcih0cmFuc2Zvcm1lZEVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyh0cmFuc2Zvcm1lZEVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZXJyb3IgPSB0cmFuc2Zvcm1lZEVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN1YnNjcmliZSB0byBldmVudHMgd2l0aCBwcm92aWRlZCBvYnNlcnZlci5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JzZXJ2ZXIgLSBPYnNlcnZlciBvYmplY3RcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHJlY29yZDogT2JqZWN0KX0gb2JzZXJ2ZXIub25OZXh0IC0gSGFuZGxlIHJlY29yZHMsIG9uZSBieSBvbmUuXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbihtZXRhZGF0YTogT2JqZWN0KX0gb2JzZXJ2ZXIub25Db21wbGV0ZSAtIEhhbmRsZSBzdHJlYW0gdGFpbCwgdGhlIG1ldGFkYXRhLlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oZXJyb3I6IE9iamVjdCl9IG9ic2VydmVyLm9uRXJyb3IgLSBIYW5kbGUgZXJyb3JzLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwic3Vic2NyaWJlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgICAgaWYgKHRoaXMuX2Vycm9yKSB7XG4gICAgICAgIG9ic2VydmVyLm9uRXJyb3IodGhpcy5fZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fcXVldWVkUmVjb3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcXVldWVkUmVjb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIG9ic2VydmVyLm9uTmV4dCh0aGlzLl9xdWV1ZWRSZWNvcmRzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX3RhaWwpIHtcbiAgICAgICAgb2JzZXJ2ZXIub25Db21wbGV0ZWQodGhpcy5fdGFpbCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9vYnNlcnZlciA9IG9ic2VydmVyO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gU3RyZWFtT2JzZXJ2ZXI7XG59KCk7IC8qKlxuICAgICAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gICAgICAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAgICAgICpcbiAgICAgICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gICAgICAqXG4gICAgICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgICAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICAgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gICAgICAqXG4gICAgICAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAgICAgICpcbiAgICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgICAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgICAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAgICAgKi9cblxuZXhwb3J0cy5kZWZhdWx0ID0gU3RyZWFtT2JzZXJ2ZXI7IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3Byb21pc2UgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZScpO1xuXG52YXIgX3Byb21pc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvbWlzZSk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2syID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJyk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MnKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX2Vycm9yID0gcmVxdWlyZSgnLi4vZXJyb3InKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIERFRkFVTFRfTUFYX1JFVFJZX1RJTUVfTVMgPSAzMCAqIDEwMDA7IC8vIDMwIHNlY29uZHNcbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG52YXIgREVGQVVMVF9JTklUSUFMX1JFVFJZX0RFTEFZX01TID0gMTAwMDsgLy8gMSBzZWNvbmRzXG52YXIgREVGQVVMVF9SRVRSWV9ERUxBWV9NVUxUSVBMSUVSID0gMi4wO1xudmFyIERFRkFVTFRfUkVUUllfREVMQVlfSklUVEVSX0ZBQ1RPUiA9IDAuMjtcblxudmFyIFRyYW5zYWN0aW9uRXhlY3V0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFRyYW5zYWN0aW9uRXhlY3V0b3IobWF4UmV0cnlUaW1lTXMsIGluaXRpYWxSZXRyeURlbGF5TXMsIG11bHRpcGxpZXIsIGppdHRlckZhY3Rvcikge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIFRyYW5zYWN0aW9uRXhlY3V0b3IpO1xuXG4gICAgdGhpcy5fbWF4UmV0cnlUaW1lTXMgPSBfdmFsdWVPckRlZmF1bHQobWF4UmV0cnlUaW1lTXMsIERFRkFVTFRfTUFYX1JFVFJZX1RJTUVfTVMpO1xuICAgIHRoaXMuX2luaXRpYWxSZXRyeURlbGF5TXMgPSBfdmFsdWVPckRlZmF1bHQoaW5pdGlhbFJldHJ5RGVsYXlNcywgREVGQVVMVF9JTklUSUFMX1JFVFJZX0RFTEFZX01TKTtcbiAgICB0aGlzLl9tdWx0aXBsaWVyID0gX3ZhbHVlT3JEZWZhdWx0KG11bHRpcGxpZXIsIERFRkFVTFRfUkVUUllfREVMQVlfTVVMVElQTElFUik7XG4gICAgdGhpcy5faml0dGVyRmFjdG9yID0gX3ZhbHVlT3JEZWZhdWx0KGppdHRlckZhY3RvciwgREVGQVVMVF9SRVRSWV9ERUxBWV9KSVRURVJfRkFDVE9SKTtcblxuICAgIHRoaXMuX2luRmxpZ2h0VGltZW91dElkcyA9IFtdO1xuXG4gICAgdGhpcy5fdmVyaWZ5QWZ0ZXJDb25zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKFRyYW5zYWN0aW9uRXhlY3V0b3IsIFt7XG4gICAga2V5OiAnZXhlY3V0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGV4ZWN1dGUodHJhbnNhY3Rpb25DcmVhdG9yLCB0cmFuc2FjdGlvbldvcmspIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHJldHVybiBuZXcgX3Byb21pc2UyLmRlZmF1bHQoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBfdGhpcy5fZXhlY3V0ZVRyYW5zYWN0aW9uSW5zaWRlUHJvbWlzZSh0cmFuc2FjdGlvbkNyZWF0b3IsIHRyYW5zYWN0aW9uV29yaywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICB2YXIgcmV0cnlTdGFydFRpbWVNcyA9IERhdGUubm93KCk7XG4gICAgICAgIHZhciByZXRyeURlbGF5TXMgPSBfdGhpcy5faW5pdGlhbFJldHJ5RGVsYXlNcztcbiAgICAgICAgcmV0dXJuIF90aGlzLl9yZXRyeVRyYW5zYWN0aW9uUHJvbWlzZSh0cmFuc2FjdGlvbkNyZWF0b3IsIHRyYW5zYWN0aW9uV29yaywgZXJyb3IsIHJldHJ5U3RhcnRUaW1lTXMsIHJldHJ5RGVsYXlNcyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjbG9zZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgLy8gY2FuY2VsIGFsbCBleGlzdGluZyB0aW1lb3V0cyB0byBwcmV2ZW50IGZ1cnRoZXIgcmV0cmllc1xuICAgICAgdGhpcy5faW5GbGlnaHRUaW1lb3V0SWRzLmZvckVhY2goZnVuY3Rpb24gKHRpbWVvdXRJZCkge1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2luRmxpZ2h0VGltZW91dElkcyA9IFtdO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19yZXRyeVRyYW5zYWN0aW9uUHJvbWlzZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9yZXRyeVRyYW5zYWN0aW9uUHJvbWlzZSh0cmFuc2FjdGlvbkNyZWF0b3IsIHRyYW5zYWN0aW9uV29yaywgZXJyb3IsIHJldHJ5U3RhcnRUaW1lLCByZXRyeURlbGF5TXMpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgZWxhcHNlZFRpbWVNcyA9IERhdGUubm93KCkgLSByZXRyeVN0YXJ0VGltZTtcblxuICAgICAgaWYgKGVsYXBzZWRUaW1lTXMgPiB0aGlzLl9tYXhSZXRyeVRpbWVNcyB8fCAhVHJhbnNhY3Rpb25FeGVjdXRvci5fY2FuUmV0cnlPbihlcnJvcikpIHtcbiAgICAgICAgcmV0dXJuIF9wcm9taXNlMi5kZWZhdWx0LnJlamVjdChlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgX3Byb21pc2UyLmRlZmF1bHQoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgbmV4dFJldHJ5VGltZSA9IF90aGlzMi5fY29tcHV0ZURlbGF5V2l0aEppdHRlcihyZXRyeURlbGF5TXMpO1xuICAgICAgICB2YXIgdGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gZmlsdGVyIG91dCB0aGlzIHRpbWVvdXRJZCB3aGVuIHRpbWUgaGFzIGNvbWUgYW5kIGZ1bmN0aW9uIGlzIGJlaW5nIGV4ZWN1dGVkXG4gICAgICAgICAgX3RoaXMyLl9pbkZsaWdodFRpbWVvdXRJZHMgPSBfdGhpczIuX2luRmxpZ2h0VGltZW91dElkcy5maWx0ZXIoZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQgIT09IHRpbWVvdXRJZDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfdGhpczIuX2V4ZWN1dGVUcmFuc2FjdGlvbkluc2lkZVByb21pc2UodHJhbnNhY3Rpb25DcmVhdG9yLCB0cmFuc2FjdGlvbldvcmssIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0sIG5leHRSZXRyeVRpbWUpO1xuICAgICAgICAvLyBhZGQgbmV3bHkgY3JlYXRlZCB0aW1lb3V0SWQgdG8gdGhlIGxpc3Qgb2YgYWxsIGluLWZsaWdodCB0aW1lb3V0c1xuICAgICAgICBfdGhpczIuX2luRmxpZ2h0VGltZW91dElkcy5wdXNoKHRpbWVvdXRJZCk7XG4gICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgdmFyIG5leHRSZXRyeURlbGF5TXMgPSByZXRyeURlbGF5TXMgKiBfdGhpczIuX211bHRpcGxpZXI7XG4gICAgICAgIHJldHVybiBfdGhpczIuX3JldHJ5VHJhbnNhY3Rpb25Qcm9taXNlKHRyYW5zYWN0aW9uQ3JlYXRvciwgdHJhbnNhY3Rpb25Xb3JrLCBlcnJvciwgcmV0cnlTdGFydFRpbWUsIG5leHRSZXRyeURlbGF5TXMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2V4ZWN1dGVUcmFuc2FjdGlvbkluc2lkZVByb21pc2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZXhlY3V0ZVRyYW5zYWN0aW9uSW5zaWRlUHJvbWlzZSh0cmFuc2FjdGlvbkNyZWF0b3IsIHRyYW5zYWN0aW9uV29yaywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgdHggPSB0cmFuc2FjdGlvbkNyZWF0b3IoKTtcbiAgICAgICAgdmFyIHRyYW5zYWN0aW9uV29ya1Jlc3VsdCA9IHRyYW5zYWN0aW9uV29yayh0eCk7XG5cbiAgICAgICAgLy8gdXNlciBkZWZpbmVkIGNhbGxiYWNrIGlzIHN1cHBvc2VkIHRvIHJldHVybiBhIHByb21pc2UsIGJ1dCBpdCBtaWdodCBub3Q7IHNvIHRvIHByb3RlY3QgYWdhaW5zdCBhblxuICAgICAgICAvLyBpbmNvcnJlY3QgQVBJIHVzYWdlIHdlIHdyYXAgdGhlIHJldHVybmVkIHZhbHVlIHdpdGggYSByZXNvbHZlZCBwcm9taXNlOyB0aGlzIGlzIGVmZmVjdGl2ZWx5IGFcbiAgICAgICAgLy8gdmFsaWRhdGlvbiBzdGVwIHdpdGhvdXQgdHlwZSBjaGVja3NcbiAgICAgICAgdmFyIHJlc3VsdFByb21pc2UgPSBfcHJvbWlzZTIuZGVmYXVsdC5yZXNvbHZlKHRyYW5zYWN0aW9uV29ya1Jlc3VsdCk7XG5cbiAgICAgICAgcmVzdWx0UHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICBpZiAodHguaXNPcGVuKCkpIHtcbiAgICAgICAgICAgIC8vIHRyYW5zYWN0aW9uIHdvcmsgcmV0dXJuZWQgcmVzb2x2ZWQgcHJvbWlzZSBhbmQgdHJhbnNhY3Rpb24gaGFzIG5vdCBiZWVuIGNvbW1pdHRlZC9yb2xsZWQgYmFja1xuICAgICAgICAgICAgLy8gdHJ5IHRvIGNvbW1pdCB0aGUgdHJhbnNhY3Rpb25cbiAgICAgICAgICAgIHR4LmNvbW1pdCgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAvLyB0cmFuc2FjdGlvbiB3YXMgY29tbWl0dGVkLCByZXR1cm4gcmVzdWx0IHRvIHRoZSB1c2VyXG4gICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAvLyB0cmFuc2FjdGlvbiBmYWlsZWQgdG8gY29tbWl0LCBwcm9wYWdhdGUgdGhlIGZhaWx1cmVcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0cmFuc2FjdGlvbiB3b3JrIHJldHVybmVkIHJlc29sdmVkIHByb21pc2UgYW5kIHRyYW5zYWN0aW9uIGlzIGFscmVhZHkgY29tbWl0dGVkL3JvbGxlZCBiYWNrXG4gICAgICAgICAgICAvLyByZXR1cm4gdGhlIHJlc3VsdCByZXR1cm5lZCBieSBnaXZlbiB0cmFuc2FjdGlvbiB3b3JrXG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAvLyB0cmFuc2FjdGlvbiB3b3JrIHJldHVybmVkIHJlamVjdGVkIHByb21pc2UsIHByb3BhZ2F0ZSB0aGUgZmFpbHVyZVxuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfY29tcHV0ZURlbGF5V2l0aEppdHRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jb21wdXRlRGVsYXlXaXRoSml0dGVyKGRlbGF5TXMpIHtcbiAgICAgIHZhciBqaXR0ZXIgPSBkZWxheU1zICogdGhpcy5faml0dGVyRmFjdG9yO1xuICAgICAgdmFyIG1pbiA9IGRlbGF5TXMgLSBqaXR0ZXI7XG4gICAgICB2YXIgbWF4ID0gZGVsYXlNcyArIGppdHRlcjtcbiAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikgKyBtaW47XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX3ZlcmlmeUFmdGVyQ29uc3RydWN0aW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3ZlcmlmeUFmdGVyQ29uc3RydWN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuX21heFJldHJ5VGltZU1zIDwgMCkge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKSgnTWF4IHJldHJ5IHRpbWUgc2hvdWxkIGJlID49IDA6ICcgKyB0aGlzLl9tYXhSZXRyeVRpbWVNcyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5faW5pdGlhbFJldHJ5RGVsYXlNcyA8IDApIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvci5uZXdFcnJvcikoJ0luaXRpYWwgcmV0cnkgZGVsYXkgc2hvdWxkID49IDA6ICcgKyB0aGlzLl9pbml0aWFsUmV0cnlEZWxheU1zKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9tdWx0aXBsaWVyIDwgMS4wKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3IubmV3RXJyb3IpKCdNdWx0aXBsaWVyIHNob3VsZCBiZSA+PSAxLjA6ICcgKyB0aGlzLl9tdWx0aXBsaWVyKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9qaXR0ZXJGYWN0b3IgPCAwIHx8IHRoaXMuX2ppdHRlckZhY3RvciA+IDEpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvci5uZXdFcnJvcikoJ0ppdHRlciBmYWN0b3Igc2hvdWxkIGJlIGluIFswLjAsIDEuMF06ICcgKyB0aGlzLl9qaXR0ZXJGYWN0b3IpO1xuICAgICAgfVxuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiAnX2NhblJldHJ5T24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfY2FuUmV0cnlPbihlcnJvcikge1xuICAgICAgcmV0dXJuIGVycm9yICYmIGVycm9yLmNvZGUgJiYgKGVycm9yLmNvZGUgPT09IF9lcnJvci5TRVJWSUNFX1VOQVZBSUxBQkxFIHx8IGVycm9yLmNvZGUgPT09IF9lcnJvci5TRVNTSU9OX0VYUElSRUQgfHwgdGhpcy5faXNUcmFuc2llbnRFcnJvcihlcnJvcikpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19pc1RyYW5zaWVudEVycm9yJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2lzVHJhbnNpZW50RXJyb3IoZXJyb3IpIHtcbiAgICAgIC8vIFJldHJpZXMgc2hvdWxkIG5vdCBoYXBwZW4gd2hlbiB0cmFuc2FjdGlvbiB3YXMgZXhwbGljaXRseSB0ZXJtaW5hdGVkIGJ5IHRoZSB1c2VyLlxuICAgICAgLy8gVGVybWluYXRpb24gb2YgdHJhbnNhY3Rpb24gbWlnaHQgcmVzdWx0IGluIHR3byBkaWZmZXJlbnQgZXJyb3IgY29kZXMgZGVwZW5kaW5nIG9uIHdoZXJlIGl0IHdhc1xuICAgICAgLy8gdGVybWluYXRlZC4gVGhlc2UgYXJlIHJlYWxseSBjbGllbnQgZXJyb3JzIGJ1dCBjbGFzc2lmaWNhdGlvbiBvbiB0aGUgc2VydmVyIGlzIG5vdCBlbnRpcmVseSBjb3JyZWN0IGFuZFxuICAgICAgLy8gdGhleSBhcmUgY2xhc3NpZmllZCBhcyB0cmFuc2llbnQuXG5cbiAgICAgIHZhciBjb2RlID0gZXJyb3IuY29kZTtcbiAgICAgIGlmIChjb2RlLmluZGV4T2YoJ1RyYW5zaWVudEVycm9yJykgPj0gMCkge1xuICAgICAgICBpZiAoY29kZSA9PT0gJ05lby5UcmFuc2llbnRFcnJvci5UcmFuc2FjdGlvbi5UZXJtaW5hdGVkJyB8fCBjb2RlID09PSAnTmVvLlRyYW5zaWVudEVycm9yLlRyYW5zYWN0aW9uLkxvY2tDbGllbnRTdG9wcGVkJykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFRyYW5zYWN0aW9uRXhlY3V0b3I7XG59KCk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IFRyYW5zYWN0aW9uRXhlY3V0b3I7XG47XG5cbmZ1bmN0aW9uIF92YWx1ZU9yRGVmYXVsdCh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZGVmYXVsdFZhbHVlO1xufSIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9idWYgPSByZXF1aXJlKCcuL2J1ZicpO1xuXG52YXIgX3N0cmluZ19kZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXInKTtcblxudmFyIF9lcnJvciA9IHJlcXVpcmUoJy4vLi4vZXJyb3InKTtcblxudmFyIHBsYXRmb3JtT2JqID0ge307IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgICAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAgICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgICAgICAgICAgICAgICAgICAgICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICAgICAgICAgICAgICAgICAgICAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICAgICAgICAgICAgICAgICAgICAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8vIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjcm9zcy1wbGF0Zm9ybSBVVEYtOCBlbmNvZGVyIGFuZCBkZWNvZGVyIHRoYXQgd29ya3Ncbi8vIHdpdGggdGhlIEJ1ZmZlciBBUEkgZGVmaW5lZCBpbiBidWYuanNcblxudHJ5IHtcbiAgLy8gVGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpcyAnYnVmZmVyJyBpcyBub3QgYXZhaWxhYmxlXG4gIHJlcXVpcmUucmVzb2x2ZShcImJ1ZmZlclwiKTtcbiAgdmFyIGRlY29kZXIgPSBuZXcgX3N0cmluZ19kZWNvZGVyLlN0cmluZ0RlY29kZXIoJ3V0ZjgnKTtcbiAgdmFyIG5vZGUgPSByZXF1aXJlKFwiYnVmZmVyXCIpO1xuXG4gIHBsYXRmb3JtT2JqID0ge1xuICAgIFwiZW5jb2RlXCI6IGZ1bmN0aW9uIGVuY29kZShzdHIpIHtcbiAgICAgIHJldHVybiBuZXcgX2J1Zi5Ob2RlQnVmZmVyKG5ldyBub2RlLkJ1ZmZlcihzdHIsIFwiVVRGLThcIikpO1xuICAgIH0sXG4gICAgXCJkZWNvZGVcIjogZnVuY3Rpb24gZGVjb2RlKGJ1ZmZlciwgbGVuZ3RoKSB7XG4gICAgICBpZiAoYnVmZmVyIGluc3RhbmNlb2YgX2J1Zi5Ob2RlQnVmZmVyKSB7XG4gICAgICAgIHZhciBzdGFydCA9IGJ1ZmZlci5wb3NpdGlvbixcbiAgICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgbGVuZ3RoO1xuICAgICAgICBidWZmZXIucG9zaXRpb24gPSBNYXRoLm1pbihlbmQsIGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gYnVmZmVyLl9idWZmZXIudG9TdHJpbmcoJ3V0ZjgnLCBzdGFydCwgZW5kKTtcbiAgICAgIH0gZWxzZSBpZiAoYnVmZmVyIGluc3RhbmNlb2YgX2J1Zi5Db21iaW5lZEJ1ZmZlcikge1xuICAgICAgICB2YXIgb3V0ID0gc3RyZWFtRGVjb2RlQ29tYmluZWRCdWZmZXIoYnVmZmVyLCBsZW5ndGgsIGZ1bmN0aW9uIChwYXJ0QnVmZmVyKSB7XG4gICAgICAgICAgcmV0dXJuIGRlY29kZXIud3JpdGUocGFydEJ1ZmZlci5fYnVmZmVyKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBkZWNvZGVyLmVuZCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3IubmV3RXJyb3IpKFwiRG9uJ3Qga25vdyBob3cgdG8gZGVjb2RlIHN0cmluZ3MgZnJvbSBgXCIgKyBidWZmZXIgKyBcImAuXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn0gY2F0Y2ggKGUpIHtcblxuICAvLyBOb3Qgb24gTm9kZUpTLCBhZGQgc2hpbSBmb3IgV2ViQVBJIFRleHRFbmNvZGVyL1RleHREZWNvZGVyXG4gIHZhciB0ZXh0RW5jb2RpbmcgPSByZXF1aXJlKCcuLi8uLi9leHRlcm5hbC90ZXh0LWVuY29kaW5nL2luZGV4Jyk7XG4gIHZhciBlbmNvZGVyID0gbmV3IHRleHRFbmNvZGluZy5UZXh0RW5jb2RlcihcInV0Zi04XCIpO1xuICB2YXIgX2RlY29kZXIgPSBuZXcgdGV4dEVuY29kaW5nLlRleHREZWNvZGVyKFwidXRmLThcIik7XG5cbiAgcGxhdGZvcm1PYmogPSB7XG4gICAgXCJlbmNvZGVcIjogZnVuY3Rpb24gZW5jb2RlKHN0cikge1xuICAgICAgcmV0dXJuIG5ldyBfYnVmLkhlYXBCdWZmZXIoZW5jb2Rlci5lbmNvZGUoc3RyKS5idWZmZXIpO1xuICAgIH0sXG4gICAgXCJkZWNvZGVcIjogZnVuY3Rpb24gZGVjb2RlKGJ1ZmZlciwgbGVuZ3RoKSB7XG4gICAgICBpZiAoYnVmZmVyIGluc3RhbmNlb2YgX2J1Zi5IZWFwQnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBfZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnJlYWRWaWV3KE1hdGgubWluKGxlbmd0aCwgYnVmZmVyLmxlbmd0aCAtIGJ1ZmZlci5wb3NpdGlvbikpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERlY29kaW5nIGNvbWJpbmVkIGJ1ZmZlciBpcyBjb21wbGljYXRlZC4gRm9yIHNpbXBsaWNpdHksIGZvciBub3csIFxuICAgICAgICAvLyB3ZSBzaW1wbHkgY29weSB0aGUgY29tYmluZWQgYnVmZmVyIGludG8gYSByZWd1bGFyIGJ1ZmZlciBhbmQgZGVjb2RlIHRoYXQuXG4gICAgICAgIHZhciB0bXBCdWYgPSAoMCwgX2J1Zi5hbGxvYykobGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRtcEJ1Zi53cml0ZVVJbnQ4KGJ1ZmZlci5yZWFkVUludDgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdG1wQnVmLnJlc2V0KCk7XG4gICAgICAgIHJldHVybiBfZGVjb2Rlci5kZWNvZGUodG1wQnVmLnJlYWRWaWV3KGxlbmd0aCkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxudmFyIHN0cmVhbURlY29kZUNvbWJpbmVkQnVmZmVyID0gZnVuY3Rpb24gc3RyZWFtRGVjb2RlQ29tYmluZWRCdWZmZXIoY29tYmluZWRCdWZmZXJzLCBsZW5ndGgsIGRlY29kZUZuLCBlbmRGbikge1xuICB2YXIgcmVtYWluaW5nQnl0ZXNUb1JlYWQgPSBsZW5ndGg7XG4gIHZhciBwb3NpdGlvbiA9IGNvbWJpbmVkQnVmZmVycy5wb3NpdGlvbjtcbiAgY29tYmluZWRCdWZmZXJzLl91cGRhdGVQb3MoTWF0aC5taW4obGVuZ3RoLCBjb21iaW5lZEJ1ZmZlcnMubGVuZ3RoIC0gcG9zaXRpb24pKTtcbiAgLy8gUmVkdWNlIENvbWJpbmVkQnVmZmVycyB0byBhIGRlY29kZWQgc3RyaW5nXG4gIHZhciBvdXQgPSBjb21iaW5lZEJ1ZmZlcnMuX2J1ZmZlcnMucmVkdWNlKGZ1bmN0aW9uIChsYXN0LCBwYXJ0QnVmZmVyKSB7XG4gICAgaWYgKHJlbWFpbmluZ0J5dGVzVG9SZWFkIDw9IDApIHtcbiAgICAgIHJldHVybiBsYXN0O1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPj0gcGFydEJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgIHBvc2l0aW9uIC09IHBhcnRCdWZmZXIubGVuZ3RoO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0QnVmZmVyLl91cGRhdGVQb3MocG9zaXRpb24gLSBwYXJ0QnVmZmVyLnBvc2l0aW9uKTtcbiAgICAgIHZhciBieXRlc1RvUmVhZCA9IE1hdGgubWluKHBhcnRCdWZmZXIubGVuZ3RoIC0gcG9zaXRpb24sIHJlbWFpbmluZ0J5dGVzVG9SZWFkKTtcbiAgICAgIHZhciBsYXN0U2xpY2UgPSBwYXJ0QnVmZmVyLnJlYWRTbGljZShieXRlc1RvUmVhZCk7XG4gICAgICBwYXJ0QnVmZmVyLl91cGRhdGVQb3MoYnl0ZXNUb1JlYWQpO1xuICAgICAgcmVtYWluaW5nQnl0ZXNUb1JlYWQgPSBNYXRoLm1heChyZW1haW5pbmdCeXRlc1RvUmVhZCAtIGxhc3RTbGljZS5sZW5ndGgsIDApO1xuICAgICAgcG9zaXRpb24gPSAwO1xuICAgICAgcmV0dXJuIGxhc3QgKyBkZWNvZGVGbihsYXN0U2xpY2UpO1xuICAgIH1cbiAgfSwgJycpO1xuICByZXR1cm4gb3V0ICsgZW5kRm4oKTtcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHBsYXRmb3JtT2JqOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5FTkNSWVBUSU9OX09GRiA9IGV4cG9ydHMuRU5DUllQVElPTl9PTiA9IGV4cG9ydHMucGFyc2VSb3V0aW5nQ29udGV4dCA9IGV4cG9ydHMucGFyc2VQb3J0ID0gZXhwb3J0cy5wYXJzZUhvc3QgPSBleHBvcnRzLnBhcnNlVXJsID0gZXhwb3J0cy5wYXJzZVNjaGVtZSA9IGV4cG9ydHMuYXNzZXJ0U3RyaW5nID0gZXhwb3J0cy5pc0VtcHR5T2JqZWN0T3JOdWxsID0gdW5kZWZpbmVkO1xuXG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvanNvbi9zdHJpbmdpZnlcIik7XG5cbnZhciBfc3RyaW5naWZ5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N0cmluZ2lmeSk7XG5cbnZhciBfdHlwZW9mMiA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgX3R5cGVvZjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90eXBlb2YyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBFTkNSWVBUSU9OX09OID0gXCJFTkNSWVBUSU9OX09OXCI7XG52YXIgRU5DUllQVElPTl9PRkYgPSBcIkVOQ1JZUFRJT05fT0ZGXCI7XG5cbnZhciBVUkxfUkVHRVggPSBuZXcgUmVnRXhwKFsnKFteL10rLy8pPycsIC8vIHNjaGVtZVxuJygoW146Lz8jXSopJywgLy8gaG9zdG5hbWVcbicoPzo6KFswLTldKykpPyknLCAvLyBwb3J0IChvcHRpb25hbClcbicoW14/XSopPycsIC8vIGV2ZXJ5dGhpbmcgZWxzZVxuJyhcXFxcPyguKykpPycgLy8gcXVlcnlcbl0uam9pbignJykpO1xuXG5mdW5jdGlvbiBpc0VtcHR5T2JqZWN0T3JOdWxsKG9iaikge1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoIWlzT2JqZWN0KG9iaikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBwcm9wIGluIG9iaikge1xuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiAoMCwgX3R5cGVvZjMuZGVmYXVsdCkob2JqKTtcbiAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgQm9vbGVhbihvYmopO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRTdHJpbmcob2JqLCBvYmpOYW1lKSB7XG4gIGlmICghaXNTdHJpbmcob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3Iob2JqTmFtZSArICcgZXhwZWN0ZWQgdG8gYmUgc3RyaW5nIGJ1dCB3YXM6ICcgKyAoMCwgX3N0cmluZ2lmeTIuZGVmYXVsdCkob2JqKSk7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gaXNTdHJpbmcoc3RyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3RyKSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2NoZW1lKHVybCkge1xuICBhc3NlcnRTdHJpbmcodXJsLCAnVVJMJyk7XG4gIHZhciBzY2hlbWUgPSB1cmwubWF0Y2goVVJMX1JFR0VYKVsxXSB8fCAnJztcbiAgcmV0dXJuIHNjaGVtZS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVybCh1cmwpIHtcbiAgYXNzZXJ0U3RyaW5nKHVybCwgJ1VSTCcpO1xuICByZXR1cm4gdXJsLm1hdGNoKFVSTF9SRUdFWClbMl07XG59XG5cbmZ1bmN0aW9uIHBhcnNlSG9zdCh1cmwpIHtcbiAgYXNzZXJ0U3RyaW5nKHVybCwgJ1VSTCcpO1xuICByZXR1cm4gdXJsLm1hdGNoKFVSTF9SRUdFWClbM107XG59XG5cbmZ1bmN0aW9uIHBhcnNlUG9ydCh1cmwpIHtcbiAgYXNzZXJ0U3RyaW5nKHVybCwgJ1VSTCcpO1xuICByZXR1cm4gdXJsLm1hdGNoKFVSTF9SRUdFWClbNF07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUm91dGluZ0NvbnRleHQodXJsKSB7XG4gIHZhciBxdWVyeSA9IHVybC5tYXRjaChVUkxfUkVHRVgpWzddIHx8ICcnO1xuICB2YXIgY29udGV4dCA9IHt9O1xuICBpZiAocXVlcnkpIHtcbiAgICBxdWVyeS5zcGxpdCgnJicpLmZvckVhY2goZnVuY3Rpb24gKHBhaXIpIHtcbiAgICAgIHZhciBrZXlWYWx1ZSA9IHBhaXIuc3BsaXQoJz0nKTtcbiAgICAgIGlmIChrZXlWYWx1ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHBhcmFtZXRlcnM6IFxcJycgKyBrZXlWYWx1ZSArICdcXCcgaW4gVVJMIFxcJycgKyB1cmwgKyAnXFwnLicpO1xuICAgICAgfVxuXG4gICAgICB2YXIga2V5ID0gdHJpbUFuZFZlcmlmeShrZXlWYWx1ZVswXSwgJ2tleScsIHVybCk7XG4gICAgICB2YXIgdmFsdWUgPSB0cmltQW5kVmVyaWZ5KGtleVZhbHVlWzFdLCAndmFsdWUnLCB1cmwpO1xuXG4gICAgICBpZiAoY29udGV4dFtrZXldKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkR1cGxpY2F0ZWQgcXVlcnkgcGFyYW1ldGVycyB3aXRoIGtleSAnXCIgKyBrZXkgKyBcIicgaW4gVVJMICdcIiArIHVybCArIFwiJ1wiKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dFtrZXldID0gdmFsdWU7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIHRyaW1BbmRWZXJpZnkoc3RyaW5nLCBuYW1lLCB1cmwpIHtcbiAgdmFyIHJlc3VsdCA9IHN0cmluZy50cmltKCk7XG4gIGlmICghcmVzdWx0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSWxsZWdhbCBlbXB0eSBcIiArIG5hbWUgKyBcIiBpbiBVUkwgcXVlcnkgJ1wiICsgdXJsICsgXCInXCIpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydHMuaXNFbXB0eU9iamVjdE9yTnVsbCA9IGlzRW1wdHlPYmplY3RPck51bGw7XG5leHBvcnRzLmFzc2VydFN0cmluZyA9IGFzc2VydFN0cmluZztcbmV4cG9ydHMucGFyc2VTY2hlbWUgPSBwYXJzZVNjaGVtZTtcbmV4cG9ydHMucGFyc2VVcmwgPSBwYXJzZVVybDtcbmV4cG9ydHMucGFyc2VIb3N0ID0gcGFyc2VIb3N0O1xuZXhwb3J0cy5wYXJzZVBvcnQgPSBwYXJzZVBvcnQ7XG5leHBvcnRzLnBhcnNlUm91dGluZ0NvbnRleHQgPSBwYXJzZVJvdXRpbmdDb250ZXh0O1xuZXhwb3J0cy5FTkNSWVBUSU9OX09OID0gRU5DUllQVElPTl9PTjtcbmV4cG9ydHMuRU5DUllQVElPTl9PRkYgPSBFTkNSWVBUSU9OX09GRjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrXCIpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzc1wiKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX2Vycm9yID0gcmVxdWlyZShcIi4vZXJyb3JcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIGdlbmVyYXRlRmllbGRMb29rdXAoa2V5cykge1xuICB2YXIgbG9va3VwID0ge307XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSwgaWR4KSB7XG4gICAgbG9va3VwW25hbWVdID0gaWR4O1xuICB9KTtcbiAgcmV0dXJuIGxvb2t1cDtcbn1cblxuLyoqXG4gKiBSZWNvcmRzIG1ha2UgdXAgdGhlIGNvbnRlbnRzIG9mIHRoZSB7QGxpbmsgUmVzdWx0fSwgYW5kIGlzIGhvdyB5b3UgYWNjZXNzXG4gKiB0aGUgb3V0cHV0IG9mIGEgc3RhdGVtZW50LiBBIHNpbXBsZSBzdGF0ZW1lbnQgbWlnaHQgeWllbGQgYSByZXN1bHQgc3RyZWFtXG4gKiB3aXRoIGEgc2luZ2xlIHJlY29yZCwgZm9yIGluc3RhbmNlOlxuICpcbiAqICAgICBNQVRDSCAodTpVc2VyKSBSRVRVUk4gdS5uYW1lLCB1LmFnZVxuICpcbiAqIFRoaXMgcmV0dXJucyBhIHN0cmVhbSBvZiByZWNvcmRzIHdpdGggdHdvIGZpZWxkcywgbmFtZWQgYHUubmFtZWAgYW5kIGB1LmFnZWAsXG4gKiBlYWNoIHJlY29yZCByZXByZXNlbnRzIG9uZSB1c2VyIGZvdW5kIGJ5IHRoZSBzdGF0ZW1lbnQgYWJvdmUuIFlvdSBjYW4gYWNjZXNzXG4gKiB0aGUgdmFsdWVzIG9mIGVhY2ggZmllbGQgZWl0aGVyIGJ5IG5hbWU6XG4gKlxuICogICAgIHJlY29yZC5nZXQoXCJ1Lm5hbWVcIilcbiAqXG4gKiBPciBieSBpdCdzIHBvc2l0aW9uOlxuICpcbiAqICAgICByZWNvcmQuZ2V0KDApXG4gKlxuICogQGFjY2VzcyBwdWJsaWNcbiAqL1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBSZWNvcmQgPSBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgcmVjb3JkIG9iamVjdC5cbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0ga2V5cyBBbiBhcnJheSBvZiBmaWVsZCBrZXlzLCBpbiB0aGUgb3JkZXIgdGhlIGZpZWxkcyBhcHBlYXJcbiAgICogICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHJlY29yZFxuICAgKiBAcGFyYW0ge09iamVjdH0gZmllbGRzIEFuIGFycmF5IG9mIGZpZWxkIHZhbHVlc1xuICAgKiBAcGFyYW0ge09iamVjdH0gZmllbGRMb29rdXAgQW4gb2JqZWN0IG9mIGZpZWxkTmFtZSAtPiB2YWx1ZSBpbmRleCwgdXNlZCB0byBtYXBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgbmFtZXMgdG8gdmFsdWVzLiBJZiB0aGlzIGlzIG51bGwsIG9uZSB3aWxsIGJlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFJlY29yZChrZXlzLCBmaWVsZHMpIHtcbiAgICB2YXIgZmllbGRMb29rdXAgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUmVjb3JkKTtcblxuICAgIHRoaXMua2V5cyA9IGtleXM7XG4gICAgdGhpcy5sZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB0aGlzLl9maWVsZHMgPSBmaWVsZHM7XG4gICAgdGhpcy5fZmllbGRMb29rdXAgPSBmaWVsZExvb2t1cCB8fCBnZW5lcmF0ZUZpZWxkTG9va3VwKGtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgZ2l2ZW4gZnVuY3Rpb24gZm9yIGVhY2ggZmllbGQgaW4gdGhpcyByZWNvcmQuIFRoZSBmdW5jdGlvblxuICAgKiB3aWxsIGdldCB0aHJlZSBhcmd1bWVudHMgLSB0aGUgdmFsdWUsIHRoZSBrZXkgYW5kIHRoaXMgcmVjb3JkLCBpbiB0aGF0XG4gICAqIG9yZGVyLlxuICAgKlxuICAgKiBAcGFyYW0gdmlzaXRvclxuICAgKi9cblxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKFJlY29yZCwgW3tcbiAgICBrZXk6IFwiZm9yRWFjaFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JFYWNoKHZpc2l0b3IpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5rZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZpc2l0b3IodGhpcy5fZmllbGRzW2ldLCB0aGlzLmtleXNbaV0sIHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhbiBvYmplY3Qgb3V0IG9mIHRoZSBjdXJyZW50IFJlY29yZFxuICAgICAqXG4gICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcInRvT2JqZWN0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSB2YWx1ZSBmcm9tIHRoaXMgcmVjb3JkLCBlaXRoZXIgYnkgaW5kZXggb3IgYnkgZmllbGQga2V5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd8TnVtYmVyfSBrZXkgRmllbGQga2V5LCBvciB0aGUgaW5kZXggb2YgdGhlIGZpZWxkLlxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgIHZhciBpbmRleCA9IHZvaWQgMDtcbiAgICAgIGlmICghKHR5cGVvZiBrZXkgPT09IFwibnVtYmVyXCIpKSB7XG4gICAgICAgIGluZGV4ID0gdGhpcy5fZmllbGRMb29rdXBba2V5XTtcbiAgICAgICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKShcIlRoaXMgcmVjb3JkIGhhcyBubyBmaWVsZCB3aXRoIGtleSAnXCIgKyBrZXkgKyBcIicsIGF2YWlsYWJsZSBrZXkgYXJlOiBbXCIgKyB0aGlzLmtleXMgKyBcIl0uXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleCA9IGtleTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluZGV4ID4gdGhpcy5fZmllbGRzLmxlbmd0aCAtIDEgfHwgaW5kZXggPCAwKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3IubmV3RXJyb3IpKFwiVGhpcyByZWNvcmQgaGFzIG5vIGZpZWxkIHdpdGggaW5kZXggJ1wiICsgaW5kZXggKyBcIicuIFJlbWVtYmVyIHRoYXQgaW5kZXhlcyBzdGFydCBhdCBgMGAsIFwiICsgXCJhbmQgbWFrZSBzdXJlIHlvdXIgc3RhdGVtZW50IHJldHVybnMgcmVjb3JkcyBpbiB0aGUgc2hhcGUgeW91IG1lYW50IGl0IHRvLlwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkc1tpbmRleF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSB2YWx1ZSBmcm9tIHRoaXMgcmVjb3JkLCBlaXRoZXIgYnkgaW5kZXggb3IgYnkgZmllbGQga2V5LCBleGlzdHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xOdW1iZXJ9IGtleSBGaWVsZCBrZXksIG9yIHRoZSBpbmRleCBvZiB0aGUgZmllbGQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJoYXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgLy8gaWYga2V5IGlzIGEgbnVtYmVyLCB3ZSBjaGVjayBpZiBpdCBpcyBpbiB0aGUgX2ZpZWxkcyBhcnJheVxuICAgICAgaWYgKHR5cGVvZiBrZXkgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGtleSA+PSAwICYmIGtleSA8IHRoaXMuX2ZpZWxkcy5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIGl0J3Mgbm90IGEgbnVtYmVyLCB3ZSBjaGVjayBfZmllbGRMb29rdXAgZGljdGlvbmFyeSBkaXJlY3RseVxuICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkTG9va3VwW2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFJlY29yZDtcbn0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gUmVjb3JkOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RhdGVtZW50VHlwZSA9IHVuZGVmaW5lZDtcblxudmFyIF9rZXlzID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzJyk7XG5cbnZhciBfa2V5czIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9rZXlzKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2snKTtcblxudmFyIF9jbGFzc0NhbGxDaGVjazMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc0NhbGxDaGVjazIpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcycpO1xuXG52YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7XG5cbnZhciBfaW50ZWdlciA9IHJlcXVpcmUoJy4vaW50ZWdlcicpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAgKiBBIFJlc3VsdFN1bW1hcnkgaW5zdGFuY2UgY29udGFpbnMgc3RydWN0dXJlZCBtZXRhZGF0YSBmb3IgYSB7UmVzdWx0fS5cbiAgKiBAYWNjZXNzIHB1YmxpY1xuICAqL1xudmFyIFJlc3VsdFN1bW1hcnkgPSBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlbWVudCAtIFRoZSBzdGF0ZW1lbnQgdGhpcyBzdW1tYXJ5IGlzIGZvclxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1ldGVycyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBzdGF0ZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG1ldGFkYXRhIC0gU3RhdGVtZW50IG1ldGFkYXRhXG4gICAqL1xuICBmdW5jdGlvbiBSZXN1bHRTdW1tYXJ5KHN0YXRlbWVudCwgcGFyYW1ldGVycywgbWV0YWRhdGEpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBSZXN1bHRTdW1tYXJ5KTtcblxuICAgIHRoaXMuc3RhdGVtZW50ID0geyB0ZXh0OiBzdGF0ZW1lbnQsIHBhcmFtZXRlcnM6IHBhcmFtZXRlcnMgfTtcbiAgICB0aGlzLnN0YXRlbWVudFR5cGUgPSBtZXRhZGF0YS50eXBlO1xuICAgIHZhciBjb3VudGVycyA9IG5ldyBTdGF0ZW1lbnRTdGF0aXN0aWNzKG1ldGFkYXRhLnN0YXRzIHx8IHt9KTtcbiAgICB0aGlzLmNvdW50ZXJzID0gY291bnRlcnM7XG4gICAgLy9mb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHJlbW92ZSBpbiBmdXR1cmUgdmVyc2lvblxuICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcyA9IGNvdW50ZXJzO1xuICAgIHRoaXMucGxhbiA9IG1ldGFkYXRhLnBsYW4gfHwgbWV0YWRhdGEucHJvZmlsZSA/IG5ldyBQbGFuKG1ldGFkYXRhLnBsYW4gfHwgbWV0YWRhdGEucHJvZmlsZSkgOiBmYWxzZTtcbiAgICB0aGlzLnByb2ZpbGUgPSBtZXRhZGF0YS5wcm9maWxlID8gbmV3IFByb2ZpbGVkUGxhbihtZXRhZGF0YS5wcm9maWxlKSA6IGZhbHNlO1xuICAgIHRoaXMubm90aWZpY2F0aW9ucyA9IHRoaXMuX2J1aWxkTm90aWZpY2F0aW9ucyhtZXRhZGF0YS5ub3RpZmljYXRpb25zKTtcbiAgICB0aGlzLnNlcnZlciA9IG5ldyBTZXJ2ZXJJbmZvKG1ldGFkYXRhLnNlcnZlcik7XG4gICAgdGhpcy5yZXN1bHRDb25zdW1lZEFmdGVyID0gbWV0YWRhdGEucmVzdWx0X2NvbnN1bWVkX2FmdGVyO1xuICAgIHRoaXMucmVzdWx0QXZhaWxhYmxlQWZ0ZXIgPSBtZXRhZGF0YS5yZXN1bHRfYXZhaWxhYmxlX2FmdGVyO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoUmVzdWx0U3VtbWFyeSwgW3tcbiAgICBrZXk6ICdfYnVpbGROb3RpZmljYXRpb25zJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2J1aWxkTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb25zKSB7XG4gICAgICBpZiAoIW5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5vdGlmaWNhdGlvbnMubWFwKGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIHJldHVybiBuZXcgTm90aWZpY2F0aW9uKG4pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIHJlc3VsdCBzdW1tYXJ5IGhhcyBhIHBsYW5cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdoYXNQbGFuJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzUGxhbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYW4gaW5zdGFuY2VvZiBQbGFuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSByZXN1bHQgc3VtbWFyeSBoYXMgYSBwcm9maWxlXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnaGFzUHJvZmlsZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhc1Byb2ZpbGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9maWxlIGluc3RhbmNlb2YgUHJvZmlsZWRQbGFuO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gUmVzdWx0U3VtbWFyeTtcbn0oKTtcblxuLyoqXG4gICogQ2xhc3MgZm9yIGV4ZWN1dGlvbiBwbGFuIHJlY2VpdmVkIGJ5IHByZXBlbmRpbmcgQ3lwaGVyIHdpdGggRVhQTEFJTi5cbiAgKiBAYWNjZXNzIHB1YmxpY1xuICAqL1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBQbGFuID1cbi8qKlxuICogQ3JlYXRlIGEgUGxhbiBpbnN0YW5jZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gcGxhbiAtIE9iamVjdCB3aXRoIHBsYW4gZGF0YVxuICovXG5mdW5jdGlvbiBQbGFuKHBsYW4pIHtcbiAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUGxhbik7XG5cbiAgdGhpcy5vcGVyYXRvclR5cGUgPSBwbGFuLm9wZXJhdG9yVHlwZTtcbiAgdGhpcy5pZGVudGlmaWVycyA9IHBsYW4uaWRlbnRpZmllcnM7XG4gIHRoaXMuYXJndW1lbnRzID0gcGxhbi5hcmdzO1xuICB0aGlzLmNoaWxkcmVuID0gcGxhbi5jaGlsZHJlbiA/IHBsYW4uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBuZXcgUGxhbihjaGlsZCk7XG4gIH0pIDogW107XG59O1xuXG4vKipcbiAgKiBDbGFzcyBmb3IgZXhlY3V0aW9uIHBsYW4gcmVjZWl2ZWQgYnkgcHJlcGVuZGluZyBDeXBoZXIgd2l0aCBQUk9GSUxFLlxuICAqIEBhY2Nlc3MgcHVibGljXG4gICovXG5cblxudmFyIFByb2ZpbGVkUGxhbiA9XG4vKipcbiAqIENyZWF0ZSBhIFByb2ZpbGVkUGxhbiBpbnN0YW5jZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvZmlsZSAtIE9iamVjdCB3aXRoIHByb2ZpbGUgZGF0YVxuICovXG5mdW5jdGlvbiBQcm9maWxlZFBsYW4ocHJvZmlsZSkge1xuICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBQcm9maWxlZFBsYW4pO1xuXG4gIHRoaXMub3BlcmF0b3JUeXBlID0gcHJvZmlsZS5vcGVyYXRvclR5cGU7XG4gIHRoaXMuaWRlbnRpZmllcnMgPSBwcm9maWxlLmlkZW50aWZpZXJzO1xuICB0aGlzLmFyZ3VtZW50cyA9IHByb2ZpbGUuYXJncztcbiAgdGhpcy5kYkhpdHMgPSBwcm9maWxlLmFyZ3MuRGJIaXRzLnRvSW50KCk7XG4gIHRoaXMucm93cyA9IHByb2ZpbGUuYXJncy5Sb3dzLnRvSW50KCk7XG4gIHRoaXMuY2hpbGRyZW4gPSBwcm9maWxlLmNoaWxkcmVuID8gcHJvZmlsZS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9maWxlZFBsYW4oY2hpbGQpO1xuICB9KSA6IFtdO1xufTtcblxuLyoqXG4gICogR2V0IHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uIGZvciBhIHtSZXN1bHR9LlxuICAqIEBhY2Nlc3MgcHVibGljXG4gICovXG5cblxudmFyIFN0YXRlbWVudFN0YXRpc3RpY3MgPSBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBTdHJ1Y3R1cml6ZSB0aGUgc3RhdGlzdGljc1xuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRpc3RpY3MgLSBSZXN1bHQgc3RhdGlzdGljc1xuICAgKi9cbiAgZnVuY3Rpb24gU3RhdGVtZW50U3RhdGlzdGljcyhzdGF0aXN0aWNzKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIFN0YXRlbWVudFN0YXRpc3RpY3MpO1xuXG4gICAgdGhpcy5fc3RhdHMgPSB7XG4gICAgICBub2Rlc0NyZWF0ZWQ6IDAsXG4gICAgICBub2Rlc0RlbGV0ZWQ6IDAsXG4gICAgICByZWxhdGlvbnNoaXBzQ3JlYXRlZDogMCxcbiAgICAgIHJlbGF0aW9uc2hpcHNEZWxldGVkOiAwLFxuICAgICAgcHJvcGVydGllc1NldDogMCxcbiAgICAgIGxhYmVsc0FkZGVkOiAwLFxuICAgICAgbGFiZWxzUmVtb3ZlZDogMCxcbiAgICAgIGluZGV4ZXNBZGRlZDogMCxcbiAgICAgIGluZGV4ZXNSZW1vdmVkOiAwLFxuICAgICAgY29uc3RyYWludHNBZGRlZDogMCxcbiAgICAgIGNvbnN0cmFpbnRzUmVtb3ZlZDogMFxuICAgIH07XG4gICAgKDAsIF9rZXlzMi5kZWZhdWx0KShzdGF0aXN0aWNzKS5mb3JFYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgLy9UbyBjYW1lbENhc2VcbiAgICAgIF90aGlzLl9zdGF0c1tpbmRleC5yZXBsYWNlKC8oXFwtXFx3KS9nLCBmdW5jdGlvbiAobSkge1xuICAgICAgICByZXR1cm4gbVsxXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgfSldID0gKDAsIF9pbnRlZ2VyLmlzSW50KShzdGF0aXN0aWNzW2luZGV4XSkgPyBzdGF0aXN0aWNzW2luZGV4XS50b0ludCgpIDogc3RhdGlzdGljc1tpbmRleF07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGlkIHRoZSBkYXRhYmFzZSBnZXQgdXBkYXRlZD9cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG5cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShTdGF0ZW1lbnRTdGF0aXN0aWNzLCBbe1xuICAgIGtleTogJ2NvbnRhaW5zVXBkYXRlcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbnRhaW5zVXBkYXRlcygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICByZXR1cm4gKDAsIF9rZXlzMi5kZWZhdWx0KSh0aGlzLl9zdGF0cykucmVkdWNlKGZ1bmN0aW9uIChsYXN0LCBjdXJyZW50KSB7XG4gICAgICAgIHJldHVybiBsYXN0ICsgX3RoaXMyLl9zdGF0c1tjdXJyZW50XTtcbiAgICAgIH0sIDApID4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IC0gTnVtYmVyIG9mIG5vZGVzIGNyZWF0ZWQuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ25vZGVzQ3JlYXRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG5vZGVzQ3JlYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdGF0cy5ub2Rlc0NyZWF0ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7TnVtYmVyfSAtIE51bWJlciBvZiBub2RlcyBkZWxldGVkLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdub2Rlc0RlbGV0ZWQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBub2Rlc0RlbGV0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3RhdHMubm9kZXNEZWxldGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2YgcmVsYXRpb25zaGlwcyBjcmVhdGVkLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdyZWxhdGlvbnNoaXBzQ3JlYXRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbGF0aW9uc2hpcHNDcmVhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N0YXRzLnJlbGF0aW9uc2hpcHNDcmVhdGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2Ygbm9kZXMgZGVsZXRlZC5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAncmVsYXRpb25zaGlwc0RlbGV0ZWQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWxhdGlvbnNoaXBzRGVsZXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdGF0cy5yZWxhdGlvbnNoaXBzRGVsZXRlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IC0gTnVtYmVyIG9mIHByb3BlcnRpZXMgc2V0LlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdwcm9wZXJ0aWVzU2V0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHJvcGVydGllc1NldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdGF0cy5wcm9wZXJ0aWVzU2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2YgbGFiZWxzIGFkZGVkLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdsYWJlbHNBZGRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxhYmVsc0FkZGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N0YXRzLmxhYmVsc0FkZGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2YgbGFiZWxzIHJlbW92ZWQuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2xhYmVsc1JlbW92ZWQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsYWJlbHNSZW1vdmVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N0YXRzLmxhYmVsc1JlbW92ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7TnVtYmVyfSAtIE51bWJlciBvZiBpbmRleGVzIGFkZGVkLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpbmRleGVzQWRkZWQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbmRleGVzQWRkZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3RhdHMuaW5kZXhlc0FkZGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2YgaW5kZXhlcyByZW1vdmVkLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdpbmRleGVzUmVtb3ZlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluZGV4ZXNSZW1vdmVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N0YXRzLmluZGV4ZXNSZW1vdmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2YgY29udHJhaW50cyBhZGRlZC5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY29uc3RyYWludHNBZGRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbnN0cmFpbnRzQWRkZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3RhdHMuY29uc3RyYWludHNBZGRlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IC0gTnVtYmVyIG9mIGNvbnRyYWludHMgcmVtb3ZlZC5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY29uc3RyYWludHNSZW1vdmVkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29uc3RyYWludHNSZW1vdmVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N0YXRzLmNvbnN0cmFpbnRzUmVtb3ZlZDtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFN0YXRlbWVudFN0YXRpc3RpY3M7XG59KCk7XG5cbi8qKlxuICAqIENsYXNzIGZvciBDeXBoZXIgbm90aWZpY2F0aW9uc1xuICAqIEBhY2Nlc3MgcHVibGljXG4gICovXG5cblxudmFyIE5vdGlmaWNhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIE5vdGlmaWNhdGlvbiBpbnN0YW5jZVxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtPYmplY3R9IG5vdGlmaWNhdGlvbiAtIE9iamVjdCB3aXRoIG5vdGlmaWNhdGlvbiBkYXRhXG4gICAqL1xuICBmdW5jdGlvbiBOb3RpZmljYXRpb24obm90aWZpY2F0aW9uKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgTm90aWZpY2F0aW9uKTtcblxuICAgIHRoaXMuY29kZSA9IG5vdGlmaWNhdGlvbi5jb2RlO1xuICAgIHRoaXMudGl0bGUgPSBub3RpZmljYXRpb24udGl0bGU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IG5vdGlmaWNhdGlvbi5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLnNldmVyaXR5ID0gbm90aWZpY2F0aW9uLnNldmVyaXR5O1xuICAgIHRoaXMucG9zaXRpb24gPSBOb3RpZmljYXRpb24uX2NvbnN0cnVjdFBvc2l0aW9uKG5vdGlmaWNhdGlvbi5wb3NpdGlvbik7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShOb3RpZmljYXRpb24sIG51bGwsIFt7XG4gICAga2V5OiAnX2NvbnN0cnVjdFBvc2l0aW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2NvbnN0cnVjdFBvc2l0aW9uKHBvcykge1xuICAgICAgaWYgKCFwb3MpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb2Zmc2V0OiBwb3Mub2Zmc2V0LnRvSW50KCksXG4gICAgICAgIGxpbmU6IHBvcy5saW5lLnRvSW50KCksXG4gICAgICAgIGNvbHVtbjogcG9zLmNvbHVtbi50b0ludCgpXG4gICAgICB9O1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gTm90aWZpY2F0aW9uO1xufSgpO1xuXG4vKipcbiAgKiBDbGFzcyBmb3IgZXhwb3Npbmcgc2VydmVyIGluZm8gZnJvbSBhIHJlc3VsdC5cbiAgKiBAYWNjZXNzIHB1YmxpY1xuICAqL1xuXG5cbnZhciBTZXJ2ZXJJbmZvID1cbi8qKlxuICogQ3JlYXRlIGEgU2VydmVySW5mbyBpbnN0YW5jZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gc2VydmVyTWV0YSAtIE9iamVjdCB3aXRoIHNlcnZlck1ldGEgZGF0YVxuICovXG5mdW5jdGlvbiBTZXJ2ZXJJbmZvKHNlcnZlck1ldGEpIHtcbiAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgU2VydmVySW5mbyk7XG5cbiAgaWYgKHNlcnZlck1ldGEpIHtcbiAgICB0aGlzLmFkZHJlc3MgPSBzZXJ2ZXJNZXRhLmFkZHJlc3M7XG4gICAgdGhpcy52ZXJzaW9uID0gc2VydmVyTWV0YS52ZXJzaW9uO1xuICB9XG59O1xuXG52YXIgc3RhdGVtZW50VHlwZSA9IHtcbiAgUkVBRF9PTkxZOiAncicsXG4gIFJFQURfV1JJVEU6ICdydycsXG4gIFdSSVRFX09OTFk6ICd3JyxcbiAgU0NIRU1BX1dSSVRFOiAncydcbn07XG5cbmV4cG9ydHMuc3RhdGVtZW50VHlwZSA9IHN0YXRlbWVudFR5cGU7XG5leHBvcnRzLmRlZmF1bHQgPSBSZXN1bHRTdW1tYXJ5OyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9wcm9taXNlID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UnKTtcblxudmFyIF9wcm9taXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb21pc2UpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjaycpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzJyk7XG5cbnZhciBfY3JlYXRlQ2xhc3MzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlQ2xhc3MyKTtcblxudmFyIF9yZXN1bHRTdW1tYXJ5ID0gcmVxdWlyZSgnLi9yZXN1bHQtc3VtbWFyeScpO1xuXG52YXIgX3Jlc3VsdFN1bW1hcnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVzdWx0U3VtbWFyeSk7XG5cbnZhciBfY29ubmVjdGlvbkhvbGRlciA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvY29ubmVjdGlvbi1ob2xkZXInKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gICogQSBzdHJlYW0gb2Yge0BsaW5rIFJlY29yZH0gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgYSBzdGF0ZW1lbnQuXG4gICogQGFjY2VzcyBwdWJsaWNcbiAgKi9cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogSW5qZWN0IHRoZSBvYnNlcnZlciB0byBiZSB1c2VkLlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGFjY2VzcyBwcml2YXRlXG4gICAqIEBwYXJhbSB7U3RyZWFtT2JzZXJ2ZXJ9IHN0cmVhbU9ic2VydmVyXG4gICAqIEBwYXJhbSB7bWl4ZWR9IHN0YXRlbWVudCAtIEN5cGhlciBzdGF0ZW1lbnQgdG8gZXhlY3V0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1ldGVycyAtIE1hcCB3aXRoIHBhcmFtZXRlcnMgdG8gdXNlIGluIHN0YXRlbWVudFxuICAgKiBAcGFyYW0gbWV0YVN1cHBsaWVyIGZ1bmN0aW9uLCB3aGVuIGNhbGxlZCBwcm92aWRlcyBtZXRhZGF0YVxuICAgKiBAcGFyYW0ge0Nvbm5lY3Rpb25Ib2xkZXJ9IGNvbm5lY3Rpb25Ib2xkZXIgLSB0byBiZSBub3RpZmllZCB3aGVuIHJlc3VsdCBpcyBlaXRoZXIgZnVsbHkgY29uc3VtZWQgb3IgZXJyb3IgaGFwcGVuZWQuXG4gICAqL1xuICBmdW5jdGlvbiBSZXN1bHQoc3RyZWFtT2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycywgbWV0YVN1cHBsaWVyLCBjb25uZWN0aW9uSG9sZGVyKSB7XG4gICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUmVzdWx0KTtcblxuICAgIHRoaXMuX3N0cmVhbU9ic2VydmVyID0gc3RyZWFtT2JzZXJ2ZXI7XG4gICAgdGhpcy5fcCA9IG51bGw7XG4gICAgdGhpcy5fc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICAgIHRoaXMuX3BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzIHx8IHt9O1xuICAgIHRoaXMuX21ldGFTdXBwbGllciA9IG1ldGFTdXBwbGllciB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfTtcbiAgICB0aGlzLl9jb25uZWN0aW9uSG9sZGVyID0gY29ubmVjdGlvbkhvbGRlciB8fCBfY29ubmVjdGlvbkhvbGRlci5FTVBUWV9DT05ORUNUSU9OX0hPTERFUjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW5kIHJldHVybiBuZXcgUHJvbWlzZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlfSBuZXcgUHJvbWlzZS5cbiAgICogQGFjY2VzcyBwcml2YXRlXG4gICAqL1xuXG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoUmVzdWx0LCBbe1xuICAgIGtleTogJ19jcmVhdGVQcm9taXNlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2NyZWF0ZVByb21pc2UoKSB7XG4gICAgICBpZiAodGhpcy5fcCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLl9wID0gbmV3IF9wcm9taXNlMi5kZWZhdWx0KGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHJlY29yZHMgPSBbXTtcbiAgICAgICAgdmFyIG9ic2VydmVyID0ge1xuICAgICAgICAgIG9uTmV4dDogZnVuY3Rpb24gb25OZXh0KHJlY29yZCkge1xuICAgICAgICAgICAgcmVjb3Jkcy5wdXNoKHJlY29yZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkNvbXBsZXRlZDogZnVuY3Rpb24gb25Db21wbGV0ZWQoc3VtbWFyeSkge1xuICAgICAgICAgICAgcmVzb2x2ZSh7IHJlY29yZHM6IHJlY29yZHMsIHN1bW1hcnk6IHN1bW1hcnkgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiBmdW5jdGlvbiBvbkVycm9yKGVycm9yKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2FpdHMgZm9yIGFsbCByZXN1bHRzIGFuZCBjYWxscyB0aGUgcGFzc2VkIGluIGZ1bmN0aW9uIHdpdGggdGhlIHJlc3VsdHMuXG4gICAgICogQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGggdGhlIHtAbGluayAjc3Vic2NyaWJlfSBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24ocmVzdWx0OiB7cmVjb3JkczpBcnJheTxSZWNvcmQ+fSl9IG9uRnVsZmlsbGVkIC0gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gZmluaXNoZWQuXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbihlcnJvcjoge21lc3NhZ2U6c3RyaW5nLCBjb2RlOnN0cmluZ30pfSBvblJlamVjdGVkIC0gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHVwb24gZXJyb3JzLlxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9IHByb21pc2UuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3RoZW4nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB0aGlzLl9jcmVhdGVQcm9taXNlKCk7XG4gICAgICByZXR1cm4gdGhpcy5fcC50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXRjaCBlcnJvcnMgd2hlbiB1c2luZyBwcm9taXNlcy5cbiAgICAgKiBDYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSBzdWJzY3JpYmUgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbihlcnJvcjoge21lc3NhZ2U6c3RyaW5nLCBjb2RlOnN0cmluZ30pfSBvblJlamVjdGVkIC0gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHVwb24gZXJyb3JzLlxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9IHByb21pc2UuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2NhdGNoJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2NhdGNoKG9uUmVqZWN0ZWQpIHtcbiAgICAgIHRoaXMuX2NyZWF0ZVByb21pc2UoKTtcbiAgICAgIHJldHVybiB0aGlzLl9wLmNhdGNoKG9uUmVqZWN0ZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0cmVhbSByZWNvcmRzIHRvIG9ic2VydmVyIGFzIHRoZXkgY29tZSBpbiwgdGhpcyBpcyBhIG1vcmUgZWZmaWNpZW50IG1ldGhvZFxuICAgICAqIG9mIGhhbmRsaW5nIHRoZSByZXN1bHRzLCBhbmQgYWxsb3dzIHlvdSB0byBoYW5kbGUgYXJiaXRyYXJpbHkgbGFyZ2UgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYnNlcnZlciAtIE9ic2VydmVyIG9iamVjdFxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24ocmVjb3JkOiBSZWNvcmQpfSBvYnNlcnZlci5vbk5leHQgLSBIYW5kbGUgcmVjb3Jkcywgb25lIGJ5IG9uZS5cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1ldGFkYXRhOiBPYmplY3QpfSBvYnNlcnZlci5vbkNvbXBsZXRlZCAtIEhhbmRsZSBzdHJlYW0gdGFpbCwgdGhlIG1ldGFkYXRhLlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oZXJyb3I6IHttZXNzYWdlOnN0cmluZywgY29kZTpzdHJpbmd9KX0gb2JzZXJ2ZXIub25FcnJvciAtIEhhbmRsZSBlcnJvcnMuXG4gICAgICogQHJldHVyblxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzdWJzY3JpYmUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBvbkNvbXBsZXRlZE9yaWdpbmFsID0gb2JzZXJ2ZXIub25Db21wbGV0ZWQ7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgb25Db21wbGV0ZWRXcmFwcGVyID0gZnVuY3Rpb24gb25Db21wbGV0ZWRXcmFwcGVyKG1ldGFkYXRhKSB7XG5cbiAgICAgICAgdmFyIGFkZGl0aW9uYWxNZXRhID0gc2VsZi5fbWV0YVN1cHBsaWVyKCk7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBhZGRpdGlvbmFsTWV0YSkge1xuICAgICAgICAgIGlmIChhZGRpdGlvbmFsTWV0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICBtZXRhZGF0YVtrZXldID0gYWRkaXRpb25hbE1ldGFba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHN1bSA9IG5ldyBfcmVzdWx0U3VtbWFyeTIuZGVmYXVsdChfdGhpcy5fc3RhdGVtZW50LCBfdGhpcy5fcGFyYW1ldGVycywgbWV0YWRhdGEpO1xuXG4gICAgICAgIC8vIG5vdGlmeSBjb25uZWN0aW9uIGhvbGRlciB0aGF0IHRoZSB1c2VkIGNvbm5lY3Rpb24gaXMgbm90IG5lZWRlZCBhbnkgbW9yZSBiZWNhdXNlIHJlc3VsdCBoYXNcbiAgICAgICAgLy8gYmVlbiBmdWxseSBjb25zdW1lZDsgY2FsbCB0aGUgb3JpZ2luYWwgb25Db21wbGV0ZWQgY2FsbGJhY2sgYWZ0ZXIgdGhhdFxuICAgICAgICBzZWxmLl9jb25uZWN0aW9uSG9sZGVyLnJlbGVhc2VDb25uZWN0aW9uKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgb25Db21wbGV0ZWRPcmlnaW5hbC5jYWxsKG9ic2VydmVyLCBzdW0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBvYnNlcnZlci5vbkNvbXBsZXRlZCA9IG9uQ29tcGxldGVkV3JhcHBlcjtcblxuICAgICAgdmFyIG9uRXJyb3JPcmlnaW5hbCA9IG9ic2VydmVyLm9uRXJyb3IgfHwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiVW5jYXVnaHQgZXJyb3Igd2hlbiBwcm9jZXNzaW5nIHJlc3VsdDogXCIgKyBlcnJvcik7XG4gICAgICB9O1xuXG4gICAgICB2YXIgb25FcnJvcldyYXBwZXIgPSBmdW5jdGlvbiBvbkVycm9yV3JhcHBlcihlcnJvcikge1xuICAgICAgICAvLyBub3RpZnkgY29ubmVjdGlvbiBob2xkZXIgdGhhdCB0aGUgdXNlZCBjb25uZWN0aW9uIGlzIG5vdCBuZWVkZWQgYW55IG1vcmUgYmVjYXVzZSBlcnJvciBoYXBwZW5lZFxuICAgICAgICAvLyBhbmQgcmVzdWx0IGNhbid0IGJlZSBjb25zdW1lZCBhbnkgZnVydGhlcjsgY2FsbCB0aGUgb3JpZ2luYWwgb25FcnJvciBjYWxsYmFjayBhZnRlciB0aGF0XG4gICAgICAgIHNlbGYuX2Nvbm5lY3Rpb25Ib2xkZXIucmVsZWFzZUNvbm5lY3Rpb24oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBvbkVycm9yT3JpZ2luYWwuY2FsbChvYnNlcnZlciwgZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBvYnNlcnZlci5vbkVycm9yID0gb25FcnJvcldyYXBwZXI7XG5cbiAgICAgIHRoaXMuX3N0cmVhbU9ic2VydmVyLnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBSZXN1bHQ7XG59KCk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IFJlc3VsdDsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxudmFyIF9nZXRQcm90b3R5cGVPZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRQcm90b3R5cGVPZik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2syID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJyk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MnKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4nKTtcblxudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yKTtcblxudmFyIF9pbmhlcml0czIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMnKTtcblxudmFyIF9pbmhlcml0czMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmhlcml0czIpO1xuXG52YXIgX3Nlc3Npb24gPSByZXF1aXJlKCcuL3Nlc3Npb24nKTtcblxudmFyIF9zZXNzaW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Nlc3Npb24pO1xuXG52YXIgX2RyaXZlciA9IHJlcXVpcmUoJy4vZHJpdmVyJyk7XG5cbnZhciBfZXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yJyk7XG5cbnZhciBfY29ubmVjdGlvblByb3ZpZGVycyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvY29ubmVjdGlvbi1wcm92aWRlcnMnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBBIGRyaXZlciB0aGF0IHN1cHBvcnRzIHJvdXRpbmcgaW4gYSBjb3JlLWVkZ2UgY2x1c3Rlci5cbiAqL1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBSb3V0aW5nRHJpdmVyID0gZnVuY3Rpb24gKF9Ecml2ZXIpIHtcbiAgKDAsIF9pbmhlcml0czMuZGVmYXVsdCkoUm91dGluZ0RyaXZlciwgX0RyaXZlcik7XG5cbiAgZnVuY3Rpb24gUm91dGluZ0RyaXZlcih1cmwsIHJvdXRpbmdDb250ZXh0LCB1c2VyQWdlbnQpIHtcbiAgICB2YXIgdG9rZW4gPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHt9O1xuICAgIHZhciBjb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHt9O1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIFJvdXRpbmdEcml2ZXIpO1xuXG4gICAgdmFyIF90aGlzID0gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoUm91dGluZ0RyaXZlci5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoUm91dGluZ0RyaXZlcikpLmNhbGwodGhpcywgdXJsLCB1c2VyQWdlbnQsIHRva2VuLCBSb3V0aW5nRHJpdmVyLl92YWxpZGF0ZUNvbmZpZyhjb25maWcpKSk7XG5cbiAgICBfdGhpcy5fcm91dGluZ0NvbnRleHQgPSByb3V0aW5nQ29udGV4dDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShSb3V0aW5nRHJpdmVyLCBbe1xuICAgIGtleTogJ19jcmVhdGVDb25uZWN0aW9uUHJvdmlkZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfY3JlYXRlQ29ubmVjdGlvblByb3ZpZGVyKGFkZHJlc3MsIGNvbm5lY3Rpb25Qb29sLCBkcml2ZXJPbkVycm9yQ2FsbGJhY2spIHtcbiAgICAgIHJldHVybiBuZXcgX2Nvbm5lY3Rpb25Qcm92aWRlcnMuTG9hZEJhbGFuY2VyKGFkZHJlc3MsIHRoaXMuX3JvdXRpbmdDb250ZXh0LCBjb25uZWN0aW9uUG9vbCwgZHJpdmVyT25FcnJvckNhbGxiYWNrKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfY3JlYXRlU2Vzc2lvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jcmVhdGVTZXNzaW9uKG1vZGUsIGNvbm5lY3Rpb25Qcm92aWRlciwgYm9va21hcmssIGNvbmZpZykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHJldHVybiBuZXcgUm91dGluZ1Nlc3Npb24obW9kZSwgY29ubmVjdGlvblByb3ZpZGVyLCBib29rbWFyaywgY29uZmlnLCBmdW5jdGlvbiAoZXJyb3IsIGNvbm4pIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IF9lcnJvci5TRVNTSU9OX0VYUElSRUQpIHtcbiAgICAgICAgICBfdGhpczIuX2ZvcmdldENvbm5lY3Rpb24oY29ubik7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9IGVsc2UgaWYgKFJvdXRpbmdEcml2ZXIuX2lzRmFpbHVyZVRvV3JpdGUoZXJyb3IpKSB7XG4gICAgICAgICAgdmFyIHVybCA9ICdVTktOT1dOJztcbiAgICAgICAgICAvLyBjb25uZWN0aW9uIGlzIHVuZGVmaW5lZCBpZiBlcnJvciBoYXBwZW5lZCBiZWZvcmUgY29ubmVjdGlvbiB3YXMgYWNxdWlyZWRcbiAgICAgICAgICBpZiAoY29ubikge1xuICAgICAgICAgICAgdXJsID0gY29ubi51cmw7XG4gICAgICAgICAgICBfdGhpczIuX2Nvbm5lY3Rpb25Qcm92aWRlci5mb3JnZXRXcml0ZXIoY29ubi51cmwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gKDAsIF9lcnJvci5uZXdFcnJvcikoJ05vIGxvbmdlciBwb3NzaWJsZSB0byB3cml0ZSB0byBzZXJ2ZXIgYXQgJyArIHVybCwgX2Vycm9yLlNFU1NJT05fRVhQSVJFRCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfY29ubmVjdGlvbkVycm9yQ29kZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jb25uZWN0aW9uRXJyb3JDb2RlKCkge1xuICAgICAgLy8gY29ubmVjdGlvbiBlcnJvcnMgbWVhbiBTRVJWSUNFX1VOQVZBSUxBQkxFIGZvciBkaXJlY3QgZHJpdmVyIGJ1dCBmb3Igcm91dGluZyBkcml2ZXIgdGhleSBzaG91bGQgb25seVxuICAgICAgLy8gcmVzdWx0IGluIFNFU1NJT05fRVhQSVJFRCBiZWNhdXNlIHRoZXJlIG1pZ2h0IHN0aWxsIGV4aXN0IG90aGVyIHNlcnZlcnMgY2FwYWJsZSBvZiBzZXJ2aW5nIHRoZSByZXF1ZXN0XG4gICAgICByZXR1cm4gX2Vycm9yLlNFU1NJT05fRVhQSVJFRDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZm9yZ2V0Q29ubmVjdGlvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9mb3JnZXRDb25uZWN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgIC8vIGNvbm5lY3Rpb24gaXMgdW5kZWZpbmVkIGlmIGVycm9yIGhhcHBlbmVkIGJlZm9yZSBjb25uZWN0aW9uIHdhcyBhY3F1aXJlZFxuICAgICAgaWYgKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgdGhpcy5fY29ubmVjdGlvblByb3ZpZGVyLmZvcmdldChjb25uZWN0aW9uLnVybCk7XG4gICAgICB9XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6ICdfdmFsaWRhdGVDb25maWcnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfdmFsaWRhdGVDb25maWcoY29uZmlnKSB7XG4gICAgICBpZiAoY29uZmlnLnRydXN0ID09PSAnVFJVU1RfT05fRklSU1RfVVNFJykge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yLm5ld0Vycm9yKSgnVGhlIGNob3NlbiB0cnVzdCBtb2RlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggYSByb3V0aW5nIGRyaXZlcicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfaXNGYWlsdXJlVG9Xcml0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9pc0ZhaWx1cmVUb1dyaXRlKGVycm9yKSB7XG4gICAgICByZXR1cm4gZXJyb3IuY29kZSA9PT0gJ05lby5DbGllbnRFcnJvci5DbHVzdGVyLk5vdEFMZWFkZXInIHx8IGVycm9yLmNvZGUgPT09ICdOZW8uQ2xpZW50RXJyb3IuR2VuZXJhbC5Gb3JiaWRkZW5PblJlYWRPbmx5RGF0YWJhc2UnO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gUm91dGluZ0RyaXZlcjtcbn0oX2RyaXZlci5Ecml2ZXIpO1xuXG52YXIgUm91dGluZ1Nlc3Npb24gPSBmdW5jdGlvbiAoX1Nlc3Npb24pIHtcbiAgKDAsIF9pbmhlcml0czMuZGVmYXVsdCkoUm91dGluZ1Nlc3Npb24sIF9TZXNzaW9uKTtcblxuICBmdW5jdGlvbiBSb3V0aW5nU2Vzc2lvbihtb2RlLCBjb25uZWN0aW9uUHJvdmlkZXIsIGJvb2ttYXJrLCBjb25maWcsIG9uRmFpbGVkQ29ubmVjdGlvbikge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIFJvdXRpbmdTZXNzaW9uKTtcblxuICAgIHZhciBfdGhpczMgPSAoMCwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zLmRlZmF1bHQpKHRoaXMsIChSb3V0aW5nU2Vzc2lvbi5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoUm91dGluZ1Nlc3Npb24pKS5jYWxsKHRoaXMsIG1vZGUsIGNvbm5lY3Rpb25Qcm92aWRlciwgYm9va21hcmssIGNvbmZpZykpO1xuXG4gICAgX3RoaXMzLl9vbkZhaWxlZENvbm5lY3Rpb24gPSBvbkZhaWxlZENvbm5lY3Rpb247XG4gICAgcmV0dXJuIF90aGlzMztcbiAgfVxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKFJvdXRpbmdTZXNzaW9uLCBbe1xuICAgIGtleTogJ19vblJ1bkZhaWx1cmUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfb25SdW5GYWlsdXJlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX29uRmFpbGVkQ29ubmVjdGlvbjtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFJvdXRpbmdTZXNzaW9uO1xufShfc2Vzc2lvbjIuZGVmYXVsdCk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IFJvdXRpbmdEcml2ZXI7IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvYXNzaWduJyk7XG5cbnZhciBfYXNzaWduMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Fzc2lnbik7XG5cbnZhciBfZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxudmFyIF9nZXRQcm90b3R5cGVPZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRQcm90b3R5cGVPZik7XG5cbnZhciBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybicpO1xuXG52YXIgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIpO1xuXG52YXIgX2dldDIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvZ2V0Jyk7XG5cbnZhciBfZ2V0MyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dldDIpO1xuXG52YXIgX2luaGVyaXRzMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cycpO1xuXG52YXIgX2luaGVyaXRzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luaGVyaXRzMik7XG5cbnZhciBfdHlwZW9mMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy90eXBlb2YnKTtcblxudmFyIF90eXBlb2YzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdHlwZW9mMik7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2syID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJyk7XG5cbnZhciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTtcblxudmFyIF9jcmVhdGVDbGFzczIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MnKTtcblxudmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpO1xuXG52YXIgX3N0cmVhbU9ic2VydmVyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW0tb2JzZXJ2ZXInKTtcblxudmFyIF9zdHJlYW1PYnNlcnZlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdHJlYW1PYnNlcnZlcik7XG5cbnZhciBfcmVzdWx0ID0gcmVxdWlyZSgnLi9yZXN1bHQnKTtcblxudmFyIF9yZXN1bHQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVzdWx0KTtcblxudmFyIF90cmFuc2FjdGlvbiA9IHJlcXVpcmUoJy4vdHJhbnNhY3Rpb24nKTtcblxudmFyIF90cmFuc2FjdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90cmFuc2FjdGlvbik7XG5cbnZhciBfZXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yJyk7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvdXRpbCcpO1xuXG52YXIgX2Nvbm5lY3Rpb25Ib2xkZXIgPSByZXF1aXJlKCcuL2ludGVybmFsL2Nvbm5lY3Rpb24taG9sZGVyJyk7XG5cbnZhciBfY29ubmVjdGlvbkhvbGRlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb25uZWN0aW9uSG9sZGVyKTtcblxudmFyIF9kcml2ZXIgPSByZXF1aXJlKCcuL2RyaXZlcicpO1xuXG52YXIgX2RyaXZlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kcml2ZXIpO1xuXG52YXIgX3RyYW5zYWN0aW9uRXhlY3V0b3IgPSByZXF1aXJlKCcuL2ludGVybmFsL3RyYW5zYWN0aW9uLWV4ZWN1dG9yJyk7XG5cbnZhciBfdHJhbnNhY3Rpb25FeGVjdXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90cmFuc2FjdGlvbkV4ZWN1dG9yKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gICogQSBTZXNzaW9uIGluc3RhbmNlIGlzIHVzZWQgZm9yIGhhbmRsaW5nIHRoZSBjb25uZWN0aW9uIGFuZFxuICAqIHNlbmRpbmcgc3RhdGVtZW50cyB0aHJvdWdoIHRoZSBjb25uZWN0aW9uLlxuICAqIEBhY2Nlc3MgcHVibGljXG4gICovXG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIFNlc3Npb24gPSBmdW5jdGlvbiAoKSB7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kZSB0aGUgZGVmYXVsdCBhY2Nlc3MgbW9kZSBmb3IgdGhpcyBzZXNzaW9uLlxuICAgKiBAcGFyYW0ge0Nvbm5lY3Rpb25Qcm92aWRlcn0gY29ubmVjdGlvblByb3ZpZGVyIC0gdGhlIGNvbm5lY3Rpb24gcHJvdmlkZXIgdG8gYWNxdWlyZSBjb25uZWN0aW9ucyBmcm9tLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Jvb2ttYXJrPXVuZGVmaW5lZF0gLSB0aGUgaW5pdGlhbCBib29rbWFyayBmb3IgdGhpcyBzZXNzaW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW2NvbmZpZz17fV0gLSB0aGlzIGRyaXZlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb24gU2Vzc2lvbihtb2RlLCBjb25uZWN0aW9uUHJvdmlkZXIsIGJvb2ttYXJrLCBjb25maWcpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBTZXNzaW9uKTtcblxuICAgIHRoaXMuX21vZGUgPSBtb2RlO1xuICAgIHRoaXMuX3JlYWRDb25uZWN0aW9uSG9sZGVyID0gbmV3IF9jb25uZWN0aW9uSG9sZGVyMi5kZWZhdWx0KF9kcml2ZXIuUkVBRCwgY29ubmVjdGlvblByb3ZpZGVyKTtcbiAgICB0aGlzLl93cml0ZUNvbm5lY3Rpb25Ib2xkZXIgPSBuZXcgX2Nvbm5lY3Rpb25Ib2xkZXIyLmRlZmF1bHQoX2RyaXZlci5XUklURSwgY29ubmVjdGlvblByb3ZpZGVyKTtcbiAgICB0aGlzLl9vcGVuID0gdHJ1ZTtcbiAgICB0aGlzLl9oYXNUeCA9IGZhbHNlO1xuICAgIHRoaXMuX2xhc3RCb29rbWFyayA9IGJvb2ttYXJrO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uRXhlY3V0b3IgPSBfY3JlYXRlVHJhbnNhY3Rpb25FeGVjdXRvcihjb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBDeXBoZXIgc3RhdGVtZW50XG4gICAqIENvdWxkIGJlIGNhbGxlZCB3aXRoIGEgc3RhdGVtZW50IG9iamVjdCBpLmUuOiB7c3RhdGVtZW50OiBcIk1BVENIIC4uLlwiLCBwYXJhbWV0ZXJzOiB7cGFyYW06IDF9fVxuICAgKiBvciB3aXRoIHRoZSBzdGF0ZW1lbnQgYW5kIHBhcmFtZXRlcnMgYXMgc2VwYXJhdGUgYXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge21peGVkfSBzdGF0ZW1lbnQgLSBDeXBoZXIgc3RhdGVtZW50IHRvIGV4ZWN1dGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtZXRlcnMgLSBNYXAgd2l0aCBwYXJhbWV0ZXJzIHRvIHVzZSBpbiBzdGF0ZW1lbnRcbiAgICogQHJldHVybiB7UmVzdWx0fSAtIE5ldyBSZXN1bHRcbiAgICovXG5cblxuICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShTZXNzaW9uLCBbe1xuICAgIGtleTogJ3J1bicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJ1bihzdGF0ZW1lbnQpIHtcbiAgICAgIHZhciBwYXJhbWV0ZXJzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgICAgaWYgKCh0eXBlb2Ygc3RhdGVtZW50ID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogKDAsIF90eXBlb2YzLmRlZmF1bHQpKHN0YXRlbWVudCkpID09PSAnb2JqZWN0JyAmJiBzdGF0ZW1lbnQudGV4dCkge1xuICAgICAgICBwYXJhbWV0ZXJzID0gc3RhdGVtZW50LnBhcmFtZXRlcnMgfHwge307XG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudC50ZXh0O1xuICAgICAgfVxuICAgICAgKDAsIF91dGlsLmFzc2VydFN0cmluZykoc3RhdGVtZW50LCAnQ3lwaGVyIHN0YXRlbWVudCcpO1xuXG4gICAgICByZXR1cm4gdGhpcy5fcnVuKHN0YXRlbWVudCwgcGFyYW1ldGVycywgZnVuY3Rpb24gKGNvbm5lY3Rpb24sIHN0cmVhbU9ic2VydmVyKSB7XG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uLnJ1bihzdGF0ZW1lbnQsIHBhcmFtZXRlcnMsIHN0cmVhbU9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19ydW4nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfcnVuKHN0YXRlbWVudCwgcGFyYW1ldGVycywgc3RhdGVtZW50UnVubmVyKSB7XG4gICAgICB2YXIgc3RyZWFtT2JzZXJ2ZXIgPSBuZXcgX1J1bk9ic2VydmVyKHRoaXMuX29uUnVuRmFpbHVyZSgpKTtcbiAgICAgIHZhciBjb25uZWN0aW9uSG9sZGVyID0gdGhpcy5fY29ubmVjdGlvbkhvbGRlcldpdGhNb2RlKHRoaXMuX21vZGUpO1xuICAgICAgaWYgKCF0aGlzLl9oYXNUeCkge1xuICAgICAgICBjb25uZWN0aW9uSG9sZGVyLmluaXRpYWxpemVDb25uZWN0aW9uKCk7XG4gICAgICAgIGNvbm5lY3Rpb25Ib2xkZXIuZ2V0Q29ubmVjdGlvbigpLnRoZW4oZnVuY3Rpb24gKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICBzdHJlYW1PYnNlcnZlci5yZXNvbHZlQ29ubmVjdGlvbihjb25uZWN0aW9uKTtcbiAgICAgICAgICBzdGF0ZW1lbnRSdW5uZXIoY29ubmVjdGlvbiwgc3RyZWFtT2JzZXJ2ZXIpO1xuICAgICAgICAgIGNvbm5lY3Rpb24ucHVsbEFsbChzdHJlYW1PYnNlcnZlcik7XG4gICAgICAgICAgY29ubmVjdGlvbi5zeW5jKCk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBzdHJlYW1PYnNlcnZlci5vbkVycm9yKGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJlYW1PYnNlcnZlci5vbkVycm9yKCgwLCBfZXJyb3IubmV3RXJyb3IpKCdTdGF0ZW1lbnRzIGNhbm5vdCBiZSBydW4gZGlyZWN0bHkgb24gYSAnICsgJ3Nlc3Npb24gd2l0aCBhbiBvcGVuIHRyYW5zYWN0aW9uOyBlaXRoZXIgcnVuIGZyb20gd2l0aGluIHRoZSAnICsgJ3RyYW5zYWN0aW9uIG9yIHVzZSBhIGRpZmZlcmVudCBzZXNzaW9uLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgX3Jlc3VsdDIuZGVmYXVsdChzdHJlYW1PYnNlcnZlciwgc3RhdGVtZW50LCBwYXJhbWV0ZXJzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW1PYnNlcnZlci5tZXRhKCk7XG4gICAgICB9LCBjb25uZWN0aW9uSG9sZGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCZWdpbiBhIG5ldyB0cmFuc2FjdGlvbiBpbiB0aGlzIHNlc3Npb24uIEEgc2Vzc2lvbiBjYW4gaGF2ZSBhdCBtb3N0IG9uZSB0cmFuc2FjdGlvbiBydW5uaW5nIGF0IGEgdGltZSwgaWYgeW91XG4gICAgICogd2FudCB0byBydW4gbXVsdGlwbGUgY29uY3VycmVudCB0cmFuc2FjdGlvbnMsIHlvdSBzaG91bGQgdXNlIG11bHRpcGxlIGNvbmN1cnJlbnQgc2Vzc2lvbnMuXG4gICAgICpcbiAgICAgKiBXaGlsZSBhIHRyYW5zYWN0aW9uIGlzIG9wZW4gdGhlIHNlc3Npb24gY2Fubm90IGJlIHVzZWQgdG8gcnVuIHN0YXRlbWVudHMgb3V0c2lkZSB0aGUgdHJhbnNhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYm9va21hcmsgLSBhIHJlZmVyZW5jZSB0byBhIHByZXZpb3VzIHRyYW5zYWN0aW9uLiBERVBSRUNBVEVEOiBUaGlzIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIGluXG4gICAgICogZmF2b3VyIG9mIHtAbGluayBEcml2ZXIjc2Vzc2lvbihzdHJpbmcpfSB0aGF0IGFjY2VwdHMgYW4gaW5pdGlhbCBib29rbWFyay4gU2Vzc2lvbiB3aWxsIGVuc3VyZSB0aGF0IGFsbCBuZXN0ZWRcbiAgICAgKiB0cmFuc2FjdGlvbnMgYXJlIGNoYWluZWQgd2l0aCBib29rbWFya3MgdG8gZ3VhcmFudGVlIGNhdXNhbCBjb25zaXN0ZW5jeS5cbiAgICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb259IC0gTmV3IFRyYW5zYWN0aW9uXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2JlZ2luVHJhbnNhY3Rpb24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBiZWdpblRyYW5zYWN0aW9uKGJvb2ttYXJrKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYmVnaW5UcmFuc2FjdGlvbih0aGlzLl9tb2RlLCBib29rbWFyayk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2JlZ2luVHJhbnNhY3Rpb24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfYmVnaW5UcmFuc2FjdGlvbihhY2Nlc3NNb2RlLCBib29rbWFyaykge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKGJvb2ttYXJrKSB7XG4gICAgICAgICgwLCBfdXRpbC5hc3NlcnRTdHJpbmcpKGJvb2ttYXJrLCAnQm9va21hcmsnKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlQm9va21hcmsoYm9va21hcmspO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5faGFzVHgpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvci5uZXdFcnJvcikoJ1lvdSBjYW5ub3QgYmVnaW4gYSB0cmFuc2FjdGlvbiBvbiBhIHNlc3Npb24gd2l0aCBhbiBvcGVuIHRyYW5zYWN0aW9uOyAnICsgJ2VpdGhlciBydW4gZnJvbSB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uIG9yIHVzZSBhIGRpZmZlcmVudCBzZXNzaW9uLicpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbW9kZSA9IF9kcml2ZXIyLmRlZmF1bHQuX3ZhbGlkYXRlU2Vzc2lvbk1vZGUoYWNjZXNzTW9kZSk7XG4gICAgICB2YXIgY29ubmVjdGlvbkhvbGRlciA9IHRoaXMuX2Nvbm5lY3Rpb25Ib2xkZXJXaXRoTW9kZShtb2RlKTtcbiAgICAgIGNvbm5lY3Rpb25Ib2xkZXIuaW5pdGlhbGl6ZUNvbm5lY3Rpb24oKTtcbiAgICAgIHRoaXMuX2hhc1R4ID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIG5ldyBfdHJhbnNhY3Rpb24yLmRlZmF1bHQoY29ubmVjdGlvbkhvbGRlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5faGFzVHggPSBmYWxzZTtcbiAgICAgIH0sIHRoaXMuX29uUnVuRmFpbHVyZSgpLCB0aGlzLl9sYXN0Qm9va21hcmssIHRoaXMuX3VwZGF0ZUJvb2ttYXJrLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgYm9va21hcmsgcmVjZWl2ZWQgZm9sbG93aW5nIHRoZSBsYXN0IGNvbXBsZXRlZCB7QGxpbmsgVHJhbnNhY3Rpb259LlxuICAgICAqXG4gICAgICogQHJldHVybiBhIHJlZmVyZW5jZSB0byBhIHByZXZpb3VzIHRyYW5zYWMndGlvblxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdsYXN0Qm9va21hcmsnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsYXN0Qm9va21hcmsoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGFzdEJvb2ttYXJrO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGUgZ2l2ZW4gdW5pdCBvZiB3b3JrIGluIGEge0BsaW5rIERyaXZlciNSRUFEfSB0cmFuc2FjdGlvbi5cbiAgICAgKlxuICAgICAqIFRyYW5zYWN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBiZSBjb21taXR0ZWQgdW5sZXNzIHRoZSBnaXZlbiBmdW5jdGlvbiB0aHJvd3Mgb3IgcmV0dXJucyBhIHJlamVjdGVkIHByb21pc2UuXG4gICAgICogU29tZSBmYWlsdXJlcyBvZiB0aGUgZ2l2ZW4gZnVuY3Rpb24gb3IgdGhlIGNvbW1pdCBpdHNlbGYgd2lsbCBiZSByZXRyaWVkIHdpdGggZXhwb25lbnRpYWwgYmFja29mZiB3aXRoIGluaXRpYWxcbiAgICAgKiBkZWxheSBvZiAxIHNlY29uZCBhbmQgbWF4aW11bSByZXRyeSB0aW1lIG9mIDMwIHNlY29uZHMuIE1heGltdW0gcmV0cnkgdGltZSBpcyBjb25maWd1cmFibGUgdmlhIGRyaXZlciBjb25maWcnc1xuICAgICAqIDxjb2RlPm1heFRyYW5zYWN0aW9uUmV0cnlUaW1lPC9jb2RlPiBwcm9wZXJ0eSBpbiBtaWxsaXNlY29uZHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHR4OiBUcmFuc2FjdGlvbik6IFByb21pc2V9IHRyYW5zYWN0aW9uV29yayAtIGNhbGxiYWNrIHRoYXQgZXhlY3V0ZXMgb3BlcmF0aW9ucyBhZ2FpbnN0XG4gICAgICogYSBnaXZlbiB7QGxpbmsgVHJhbnNhY3Rpb259LlxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9IHJlc29sdmVkIHByb21pc2UgYXMgcmV0dXJuZWQgYnkgdGhlIGdpdmVuIGZ1bmN0aW9uIG9yIHJlamVjdGVkIHByb21pc2Ugd2hlbiBnaXZlblxuICAgICAqIGZ1bmN0aW9uIG9yIGNvbW1pdCBmYWlscy5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAncmVhZFRyYW5zYWN0aW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVhZFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uV29yaykge1xuICAgICAgcmV0dXJuIHRoaXMuX3J1blRyYW5zYWN0aW9uKF9kcml2ZXIuUkVBRCwgdHJhbnNhY3Rpb25Xb3JrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlIGdpdmVuIHVuaXQgb2Ygd29yayBpbiBhIHtAbGluayBEcml2ZXIjV1JJVEV9IHRyYW5zYWN0aW9uLlxuICAgICAqXG4gICAgICogVHJhbnNhY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGNvbW1pdHRlZCB1bmxlc3MgdGhlIGdpdmVuIGZ1bmN0aW9uIHRocm93cyBvciByZXR1cm5zIGEgcmVqZWN0ZWQgcHJvbWlzZS5cbiAgICAgKiBTb21lIGZhaWx1cmVzIG9mIHRoZSBnaXZlbiBmdW5jdGlvbiBvciB0aGUgY29tbWl0IGl0c2VsZiB3aWxsIGJlIHJldHJpZWQgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmIHdpdGggaW5pdGlhbFxuICAgICAqIGRlbGF5IG9mIDEgc2Vjb25kIGFuZCBtYXhpbXVtIHJldHJ5IHRpbWUgb2YgMzAgc2Vjb25kcy4gTWF4aW11bSByZXRyeSB0aW1lIGlzIGNvbmZpZ3VyYWJsZSB2aWEgZHJpdmVyIGNvbmZpZydzXG4gICAgICogPGNvZGU+bWF4VHJhbnNhY3Rpb25SZXRyeVRpbWU8L2NvZGU+IHByb3BlcnR5IGluIG1pbGxpc2Vjb25kcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24odHg6IFRyYW5zYWN0aW9uKTogUHJvbWlzZX0gdHJhbnNhY3Rpb25Xb3JrIC0gY2FsbGJhY2sgdGhhdCBleGVjdXRlcyBvcGVyYXRpb25zIGFnYWluc3RcbiAgICAgKiBhIGdpdmVuIHtAbGluayBUcmFuc2FjdGlvbn0uXG4gICAgICogQHJldHVybiB7UHJvbWlzZX0gcmVzb2x2ZWQgcHJvbWlzZSBhcyByZXR1cm5lZCBieSB0aGUgZ2l2ZW4gZnVuY3Rpb24gb3IgcmVqZWN0ZWQgcHJvbWlzZSB3aGVuIGdpdmVuXG4gICAgICogZnVuY3Rpb24gb3IgY29tbWl0IGZhaWxzLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICd3cml0ZVRyYW5zYWN0aW9uJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gd3JpdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbldvcmspIHtcbiAgICAgIHJldHVybiB0aGlzLl9ydW5UcmFuc2FjdGlvbihfZHJpdmVyLldSSVRFLCB0cmFuc2FjdGlvbldvcmspO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19ydW5UcmFuc2FjdGlvbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9ydW5UcmFuc2FjdGlvbihhY2Nlc3NNb2RlLCB0cmFuc2FjdGlvbldvcmspIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb25FeGVjdXRvci5leGVjdXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMi5fYmVnaW5UcmFuc2FjdGlvbihhY2Nlc3NNb2RlLCBfdGhpczIubGFzdEJvb2ttYXJrKCkpO1xuICAgICAgfSwgdHJhbnNhY3Rpb25Xb3JrKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfdXBkYXRlQm9va21hcmsnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfdXBkYXRlQm9va21hcmsobmV3Qm9va21hcmspIHtcbiAgICAgIGlmIChuZXdCb29rbWFyaykge1xuICAgICAgICB0aGlzLl9sYXN0Qm9va21hcmsgPSBuZXdCb29rbWFyaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZSB0aGlzIHNlc3Npb24uXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbigpfSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhZnRlciB0aGUgc2Vzc2lvbiBoYXMgYmVlbiBjbG9zZWRcbiAgICAgKiBAcmV0dXJuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2Nsb3NlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuX29wZW4pIHtcbiAgICAgICAgdGhpcy5fb3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLl90cmFuc2FjdGlvbkV4ZWN1dG9yLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuX3JlYWRDb25uZWN0aW9uSG9sZGVyLmNsb3NlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMzLl93cml0ZUNvbm5lY3Rpb25Ib2xkZXIuY2xvc2UoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL0NhbiBiZSBvdmVycmlkZGVuIHRvIGFkZCBlcnJvciBjYWxsYmFjayBvbiBSVU5cblxuICB9LCB7XG4gICAga2V5OiAnX29uUnVuRmFpbHVyZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9vblJ1bkZhaWx1cmUoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfY29ubmVjdGlvbkhvbGRlcldpdGhNb2RlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2Nvbm5lY3Rpb25Ib2xkZXJXaXRoTW9kZShtb2RlKSB7XG4gICAgICBpZiAobW9kZSA9PT0gX2RyaXZlci5SRUFEKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWFkQ29ubmVjdGlvbkhvbGRlcjtcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gX2RyaXZlci5XUklURSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd3JpdGVDb25uZWN0aW9uSG9sZGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvci5uZXdFcnJvcikoJ1Vua25vd24gYWNjZXNzIG1vZGU6ICcgKyBtb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFNlc3Npb247XG59KCk7XG5cbi8qKiBJbnRlcm5hbCBzdHJlYW0gb2JzZXJ2ZXIgdXNlZCBmb3IgdHJhbnNhY3Rpb25hbCByZXN1bHRzKi9cblxuXG52YXIgX1J1bk9ic2VydmVyID0gZnVuY3Rpb24gKF9TdHJlYW1PYnNlcnZlcikge1xuICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShfUnVuT2JzZXJ2ZXIsIF9TdHJlYW1PYnNlcnZlcik7XG5cbiAgZnVuY3Rpb24gX1J1bk9ic2VydmVyKG9uRXJyb3IpIHtcbiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBfUnVuT2JzZXJ2ZXIpO1xuXG4gICAgdmFyIF90aGlzNCA9ICgwLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMuZGVmYXVsdCkodGhpcywgKF9SdW5PYnNlcnZlci5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoX1J1bk9ic2VydmVyKSkuY2FsbCh0aGlzLCBvbkVycm9yKSk7XG5cbiAgICBfdGhpczQuX21ldGEgPSB7fTtcbiAgICByZXR1cm4gX3RoaXM0O1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoX1J1bk9ic2VydmVyLCBbe1xuICAgIGtleTogJ29uQ29tcGxldGVkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25Db21wbGV0ZWQobWV0YSkge1xuICAgICAgKDAsIF9nZXQzLmRlZmF1bHQpKF9SdW5PYnNlcnZlci5wcm90b3R5cGUuX19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKF9SdW5PYnNlcnZlci5wcm90b3R5cGUpLCAnb25Db21wbGV0ZWQnLCB0aGlzKS5jYWxsKHRoaXMsIG1ldGEpO1xuICAgICAgZm9yICh2YXIga2V5IGluIG1ldGEpIHtcbiAgICAgICAgaWYgKG1ldGEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIHRoaXMuX21ldGFba2V5XSA9IG1ldGFba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ21ldGEnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBtZXRhKCkge1xuICAgICAgdmFyIHNlcnZlck1ldGEgPSB7IHNlcnZlcjogdGhpcy5fY29ubi5zZXJ2ZXIgfTtcbiAgICAgIHJldHVybiAoMCwgX2Fzc2lnbjIuZGVmYXVsdCkoe30sIHRoaXMuX21ldGEsIHNlcnZlck1ldGEpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gX1J1bk9ic2VydmVyO1xufShfc3RyZWFtT2JzZXJ2ZXIyLmRlZmF1bHQpO1xuXG5mdW5jdGlvbiBfY3JlYXRlVHJhbnNhY3Rpb25FeGVjdXRvcihjb25maWcpIHtcbiAgdmFyIG1heFJldHJ5VGltZU1zID0gY29uZmlnICYmIGNvbmZpZy5tYXhUcmFuc2FjdGlvblJldHJ5VGltZSA/IGNvbmZpZy5tYXhUcmFuc2FjdGlvblJldHJ5VGltZSA6IG51bGw7XG4gIHJldHVybiBuZXcgX3RyYW5zYWN0aW9uRXhlY3V0b3IyLmRlZmF1bHQobWF4UmV0cnlUaW1lTXMpO1xufVxuXG5leHBvcnRzLmRlZmF1bHQgPSBTZXNzaW9uOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9nZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG52YXIgX2dldFByb3RvdHlwZU9mMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dldFByb3RvdHlwZU9mKTtcblxudmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuJyk7XG5cbnZhciBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMik7XG5cbnZhciBfZ2V0MiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9nZXQnKTtcblxudmFyIF9nZXQzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0Mik7XG5cbnZhciBfaW5oZXJpdHMyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzJyk7XG5cbnZhciBfaW5oZXJpdHMzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5oZXJpdHMyKTtcblxudmFyIF9wcm9taXNlID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UnKTtcblxudmFyIF9wcm9taXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb21pc2UpO1xuXG52YXIgX3R5cGVvZjIgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvdHlwZW9mJyk7XG5cbnZhciBfdHlwZW9mMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3R5cGVvZjIpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMiA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjaycpO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7XG5cbnZhciBfY3JlYXRlQ2xhc3MyID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzJyk7XG5cbnZhciBfY3JlYXRlQ2xhc3MzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlQ2xhc3MyKTtcblxudmFyIF9zdHJlYW1PYnNlcnZlciA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtLW9ic2VydmVyJyk7XG5cbnZhciBfc3RyZWFtT2JzZXJ2ZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3RyZWFtT2JzZXJ2ZXIpO1xuXG52YXIgX3Jlc3VsdCA9IHJlcXVpcmUoJy4vcmVzdWx0Jyk7XG5cbnZhciBfcmVzdWx0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Jlc3VsdCk7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvdXRpbCcpO1xuXG52YXIgX2Nvbm5lY3Rpb25Ib2xkZXIgPSByZXF1aXJlKCcuL2ludGVybmFsL2Nvbm5lY3Rpb24taG9sZGVyJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHRyYW5zYWN0aW9uIGluIHRoZSBOZW80aiBkYXRhYmFzZS5cbiAqXG4gKiBAYWNjZXNzIHB1YmxpY1xuICovXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBUcmFuc2FjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0Nvbm5lY3Rpb25Ib2xkZXJ9IGNvbm5lY3Rpb25Ib2xkZXIgLSB0aGUgY29ubmVjdGlvbiBob2xkZXIgdG8gZ2V0IGNvbm5lY3Rpb24gZnJvbS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbigpfSBvbkNsb3NlIC0gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9yIHJvbGxlZCBiYWNrLlxuICAgKiBAcGFyYW0gZXJyb3JUcmFuc2Zvcm1lciBjYWxsYmFjayB1c2UgdG8gdHJhbnNmb3JtIGVycm9yXG4gICAqIEBwYXJhbSBib29rbWFyayBvcHRpb25hbCBib29rbWFya1xuICAgKiBAcGFyYW0gb25Cb29rbWFyayBjYWxsYmFjayBpbnZva2VkIHdoZW4gbmV3IGJvb2ttYXJrIGlzIHByb2R1Y2VkXG4gICAqL1xuICBmdW5jdGlvbiBUcmFuc2FjdGlvbihjb25uZWN0aW9uSG9sZGVyLCBvbkNsb3NlLCBlcnJvclRyYW5zZm9ybWVyLCBib29rbWFyaywgb25Cb29rbWFyaykge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIFRyYW5zYWN0aW9uKTtcblxuICAgIHRoaXMuX2Nvbm5lY3Rpb25Ib2xkZXIgPSBjb25uZWN0aW9uSG9sZGVyO1xuICAgIHZhciBzdHJlYW1PYnNlcnZlciA9IG5ldyBfVHJhbnNhY3Rpb25TdHJlYW1PYnNlcnZlcih0aGlzKTtcbiAgICB2YXIgcGFyYW1zID0ge307XG4gICAgaWYgKGJvb2ttYXJrKSB7XG4gICAgICBwYXJhbXMgPSB7IGJvb2ttYXJrOiBib29rbWFyayB9O1xuICAgIH1cblxuICAgIHRoaXMuX2Nvbm5lY3Rpb25Ib2xkZXIuZ2V0Q29ubmVjdGlvbigpLnRoZW4oZnVuY3Rpb24gKGNvbm4pIHtcbiAgICAgIHN0cmVhbU9ic2VydmVyLnJlc29sdmVDb25uZWN0aW9uKGNvbm4pO1xuICAgICAgY29ubi5ydW4oJ0JFR0lOJywgcGFyYW1zLCBzdHJlYW1PYnNlcnZlcik7XG4gICAgICBjb25uLnB1bGxBbGwoc3RyZWFtT2JzZXJ2ZXIpO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgcmV0dXJuIHN0cmVhbU9ic2VydmVyLm9uRXJyb3IoZXJyb3IpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fc3RhdGUgPSBfc3RhdGVzLkFDVElWRTtcbiAgICB0aGlzLl9vbkNsb3NlID0gb25DbG9zZTtcbiAgICB0aGlzLl9lcnJvclRyYW5zZm9ybWVyID0gZXJyb3JUcmFuc2Zvcm1lcjtcbiAgICB0aGlzLl9vbkJvb2ttYXJrID0gb25Cb29rbWFyayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gQ3lwaGVyIHN0YXRlbWVudFxuICAgKiBDb3VsZCBiZSBjYWxsZWQgd2l0aCBhIHN0YXRlbWVudCBvYmplY3QgaS5lLjoge3N0YXRlbWVudDogXCJNQVRDSCAuLi5cIiwgcGFyYW1ldGVyczoge3BhcmFtOiAxfX1cbiAgICogb3Igd2l0aCB0aGUgc3RhdGVtZW50IGFuZCBwYXJhbWV0ZXJzIGFzIHNlcGFyYXRlIGFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHttaXhlZH0gc3RhdGVtZW50IC0gQ3lwaGVyIHN0YXRlbWVudCB0byBleGVjdXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbWV0ZXJzIC0gTWFwIHdpdGggcGFyYW1ldGVycyB0byB1c2UgaW4gc3RhdGVtZW50XG4gICAqIEByZXR1cm4ge1Jlc3VsdH0gTmV3IFJlc3VsdFxuICAgKi9cblxuXG4gICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKFRyYW5zYWN0aW9uLCBbe1xuICAgIGtleTogJ3J1bicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJ1bihzdGF0ZW1lbnQsIHBhcmFtZXRlcnMpIHtcbiAgICAgIGlmICgodHlwZW9mIHN0YXRlbWVudCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6ICgwLCBfdHlwZW9mMy5kZWZhdWx0KShzdGF0ZW1lbnQpKSA9PT0gJ29iamVjdCcgJiYgc3RhdGVtZW50LnRleHQpIHtcbiAgICAgICAgcGFyYW1ldGVycyA9IHN0YXRlbWVudC5wYXJhbWV0ZXJzIHx8IHt9O1xuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnQudGV4dDtcbiAgICAgIH1cbiAgICAgICgwLCBfdXRpbC5hc3NlcnRTdHJpbmcpKHN0YXRlbWVudCwgXCJDeXBoZXIgc3RhdGVtZW50XCIpO1xuXG4gICAgICByZXR1cm4gdGhpcy5fc3RhdGUucnVuKHRoaXMuX2Nvbm5lY3Rpb25Ib2xkZXIsIG5ldyBfVHJhbnNhY3Rpb25TdHJlYW1PYnNlcnZlcih0aGlzKSwgc3RhdGVtZW50LCBwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21taXRzIHRoZSB0cmFuc2FjdGlvbiBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LlxuICAgICAqXG4gICAgICogQWZ0ZXIgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24gY2FuIG5vIGxvbmdlciBiZSB1c2VkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge1Jlc3VsdH0gTmV3IFJlc3VsdFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdjb21taXQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21taXQoKSB7XG4gICAgICB2YXIgY29tbWl0dGVkID0gdGhpcy5fc3RhdGUuY29tbWl0KHRoaXMuX2Nvbm5lY3Rpb25Ib2xkZXIsIG5ldyBfVHJhbnNhY3Rpb25TdHJlYW1PYnNlcnZlcih0aGlzKSk7XG4gICAgICB0aGlzLl9zdGF0ZSA9IGNvbW1pdHRlZC5zdGF0ZTtcbiAgICAgIC8vY2xlYW4gdXBcbiAgICAgIHRoaXMuX29uQ2xvc2UoKTtcbiAgICAgIHJldHVybiBjb21taXR0ZWQucmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJvbGxiYWNrcyB0aGUgdHJhbnNhY3Rpb24uXG4gICAgICpcbiAgICAgKiBBZnRlciByb2xsaW5nIGJhY2ssIHRoZSB0cmFuc2FjdGlvbiBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7UmVzdWx0fSBOZXcgUmVzdWx0XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3JvbGxiYWNrJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcm9sbGJhY2soKSB7XG4gICAgICB2YXIgY29tbWl0dGVkID0gdGhpcy5fc3RhdGUucm9sbGJhY2sodGhpcy5fY29ubmVjdGlvbkhvbGRlciwgbmV3IF9UcmFuc2FjdGlvblN0cmVhbU9ic2VydmVyKHRoaXMpKTtcbiAgICAgIHRoaXMuX3N0YXRlID0gY29tbWl0dGVkLnN0YXRlO1xuICAgICAgLy9jbGVhbiB1cFxuICAgICAgdGhpcy5fb25DbG9zZSgpO1xuICAgICAgcmV0dXJuIGNvbW1pdHRlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhpcyB0cmFuc2FjdGlvbiBpcyBhY3RpdmUsIHdoaWNoIG1lYW5zIGNvbW1pdCBhbmQgcm9sbGJhY2sgZGlkIG5vdCBoYXBwZW4uXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gd2hlbiBub3QgY29tbWl0dGVkIGFuZCBub3Qgcm9sbGVkIGJhY2ssIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2lzT3BlbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzT3BlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdGF0ZSA9PSBfc3RhdGVzLkFDVElWRTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfb25FcnJvcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9vbkVycm9yKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcbiAgICAgICAgLy8gYXR0ZW1wdCB0byByb2xsYmFjaywgdXNlZnVsIHdoZW4gVHJhbnNhY3Rpb24jcnVuKCkgZmFpbGVkXG4gICAgICAgIHJldHVybiB0aGlzLnJvbGxiYWNrKCkuY2F0Y2goZnVuY3Rpb24gKGlnbm9yZWRFcnJvcikge1xuICAgICAgICAgIC8vIGlnbm9yZSBhbGwgZXJyb3JzIGJlY2F1c2UgaXQgaXMgYmVzdCBlZmZvcnQgYW5kIHRyYW5zYWN0aW9uIG1pZ2h0IGFscmVhZHkgYmUgcm9sbGVkIGJhY2tcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gYWZ0ZXIgcm9sbGJhY2sgYXR0ZW1wdCBjaGFuZ2UgdGhpcyB0cmFuc2FjdGlvbidzIHN0YXRlIHRvIEZBSUxFRFxuICAgICAgICAgIF90aGlzLl9zdGF0ZSA9IF9zdGF0ZXMuRkFJTEVEO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVycm9yIGhhcHBlbmVkIGluIGluLWFjdGl2ZSB0cmFuc2FjdGlvbiwganVzdCB0byB0aGUgY2xlYW51cCBhbmQgY2hhbmdlIHN0YXRlIHRvIEZBSUxFRFxuICAgICAgICB0aGlzLl9zdGF0ZSA9IF9zdGF0ZXMuRkFJTEVEO1xuICAgICAgICB0aGlzLl9vbkNsb3NlKCk7XG4gICAgICAgIC8vIG5vIGFzeW5jIGFjdGlvbnMgbmVlZGVkIC0gcmV0dXJuIHJlc29sdmVkIHByb21pc2VcbiAgICAgICAgcmV0dXJuIF9wcm9taXNlMi5kZWZhdWx0LnJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFRyYW5zYWN0aW9uO1xufSgpO1xuXG4vKiogSW50ZXJuYWwgc3RyZWFtIG9ic2VydmVyIHVzZWQgZm9yIHRyYW5zYWN0aW9uYWwgcmVzdWx0cyovXG5cblxudmFyIF9UcmFuc2FjdGlvblN0cmVhbU9ic2VydmVyID0gZnVuY3Rpb24gKF9TdHJlYW1PYnNlcnZlcikge1xuICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShfVHJhbnNhY3Rpb25TdHJlYW1PYnNlcnZlciwgX1N0cmVhbU9ic2VydmVyKTtcblxuICBmdW5jdGlvbiBfVHJhbnNhY3Rpb25TdHJlYW1PYnNlcnZlcih0eCkge1xuICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIF9UcmFuc2FjdGlvblN0cmVhbU9ic2VydmVyKTtcblxuICAgIHZhciBfdGhpczIgPSAoMCwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zLmRlZmF1bHQpKHRoaXMsIChfVHJhbnNhY3Rpb25TdHJlYW1PYnNlcnZlci5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoX1RyYW5zYWN0aW9uU3RyZWFtT2JzZXJ2ZXIpKS5jYWxsKHRoaXMsIHR4Ll9lcnJvclRyYW5zZm9ybWVyIHx8IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIHJldHVybiBlcnI7XG4gICAgfSkpO1xuXG4gICAgX3RoaXMyLl90eCA9IHR4O1xuICAgIC8vdGhpcyBpcyB0byB0byBhdm9pZCBtdWx0aXBsZSBjYWxscyB0byBvbkVycm9yIGNhdXNlZCBieSBJR05PUkVEXG4gICAgX3RoaXMyLl9oYXNGYWlsZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gX3RoaXMyO1xuICB9XG5cbiAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoX1RyYW5zYWN0aW9uU3RyZWFtT2JzZXJ2ZXIsIFt7XG4gICAga2V5OiAnb25FcnJvcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uRXJyb3IoZXJyb3IpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMuX2hhc0ZhaWxlZCkge1xuICAgICAgICB0aGlzLl90eC5fb25FcnJvcigpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICgwLCBfZ2V0My5kZWZhdWx0KShfVHJhbnNhY3Rpb25TdHJlYW1PYnNlcnZlci5wcm90b3R5cGUuX19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKF9UcmFuc2FjdGlvblN0cmVhbU9ic2VydmVyLnByb3RvdHlwZSksICdvbkVycm9yJywgX3RoaXMzKS5jYWxsKF90aGlzMywgZXJyb3IpO1xuICAgICAgICAgIF90aGlzMy5faGFzRmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25Db21wbGV0ZWQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNvbXBsZXRlZChtZXRhKSB7XG4gICAgICAoMCwgX2dldDMuZGVmYXVsdCkoX1RyYW5zYWN0aW9uU3RyZWFtT2JzZXJ2ZXIucHJvdG90eXBlLl9fcHJvdG9fXyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShfVHJhbnNhY3Rpb25TdHJlYW1PYnNlcnZlci5wcm90b3R5cGUpLCAnb25Db21wbGV0ZWQnLCB0aGlzKS5jYWxsKHRoaXMsIG1ldGEpO1xuICAgICAgdmFyIGJvb2ttYXJrID0gbWV0YS5ib29rbWFyaztcbiAgICAgIHRoaXMuX3R4Ll9vbkJvb2ttYXJrKGJvb2ttYXJrKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzZXJ2ZXJNZXRhJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2VydmVyTWV0YSgpIHtcbiAgICAgIHZhciBzZXJ2ZXJNZXRhID0geyBzZXJ2ZXI6IHRoaXMuX2Nvbm4uc2VydmVyIH07XG4gICAgICByZXR1cm4gc2VydmVyTWV0YTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIF9UcmFuc2FjdGlvblN0cmVhbU9ic2VydmVyO1xufShfc3RyZWFtT2JzZXJ2ZXIyLmRlZmF1bHQpO1xuXG4vKiogaW50ZXJuYWwgc3RhdGUgbWFjaGluZSBvZiB0aGUgdHJhbnNhY3Rpb24qL1xuXG5cbnZhciBfc3RhdGVzID0ge1xuICAvL1RoZSB0cmFuc2FjdGlvbiBpcyBydW5uaW5nIHdpdGggbm8gZXhwbGljaXQgc3VjY2VzcyBvciBmYWlsdXJlIG1hcmtlZFxuICBBQ1RJVkU6IHtcbiAgICBjb21taXQ6IGZ1bmN0aW9uIGNvbW1pdChjb25uZWN0aW9uSG9sZGVyLCBvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIHsgcmVzdWx0OiBfcnVuUHVsbEFsbChcIkNPTU1JVFwiLCBjb25uZWN0aW9uSG9sZGVyLCBvYnNlcnZlciksXG4gICAgICAgIHN0YXRlOiBfc3RhdGVzLlNVQ0NFRURFRCB9O1xuICAgIH0sXG4gICAgcm9sbGJhY2s6IGZ1bmN0aW9uIHJvbGxiYWNrKGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyKSB7XG4gICAgICByZXR1cm4geyByZXN1bHQ6IF9ydW5QdWxsQWxsKFwiUk9MTEJBQ0tcIiwgY29ubmVjdGlvbkhvbGRlciwgb2JzZXJ2ZXIpLCBzdGF0ZTogX3N0YXRlcy5ST0xMRURfQkFDSyB9O1xuICAgIH0sXG4gICAgcnVuOiBmdW5jdGlvbiBydW4oY29ubmVjdGlvbkhvbGRlciwgb2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycykge1xuICAgICAgY29ubmVjdGlvbkhvbGRlci5nZXRDb25uZWN0aW9uKCkudGhlbihmdW5jdGlvbiAoY29ubikge1xuICAgICAgICBvYnNlcnZlci5yZXNvbHZlQ29ubmVjdGlvbihjb25uKTtcbiAgICAgICAgY29ubi5ydW4oc3RhdGVtZW50LCBwYXJhbWV0ZXJzIHx8IHt9LCBvYnNlcnZlcik7XG4gICAgICAgIGNvbm4ucHVsbEFsbChvYnNlcnZlcik7XG4gICAgICAgIGNvbm4uc3luYygpO1xuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZlci5vbkVycm9yKGVycm9yKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbmV3UnVuUmVzdWx0KG9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmVyLnNlcnZlck1ldGEoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvL0FuIGVycm9yIGhhcyBvY2N1cnJlZCwgdHJhbnNhY3Rpb24gY2FuIG5vIGxvbmdlciBiZSB1c2VkIGFuZCBubyBtb3JlIG1lc3NhZ2VzIHdpbGxcbiAgLy8gYmUgc2VudCBmb3IgdGhpcyB0cmFuc2FjdGlvbi5cbiAgRkFJTEVEOiB7XG4gICAgY29tbWl0OiBmdW5jdGlvbiBjb21taXQoY29ubmVjdGlvbkhvbGRlciwgb2JzZXJ2ZXIpIHtcbiAgICAgIG9ic2VydmVyLm9uRXJyb3Ioe1xuICAgICAgICBlcnJvcjogXCJDYW5ub3QgY29tbWl0IHN0YXRlbWVudHMgaW4gdGhpcyB0cmFuc2FjdGlvbiwgYmVjYXVzZSBwcmV2aW91cyBzdGF0ZW1lbnRzIGluIHRoZSBcIiArIFwidHJhbnNhY3Rpb24gaGFzIGZhaWxlZCBhbmQgdGhlIHRyYW5zYWN0aW9uIGhhcyBiZWVuIHJvbGxlZCBiYWNrLiBQbGVhc2Ugc3RhcnQgYSBuZXdcIiArIFwiIHRyYW5zYWN0aW9uIHRvIHJ1biBhbm90aGVyIHN0YXRlbWVudC5cIlxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyByZXN1bHQ6IG5ld0R1bW15UmVzdWx0KG9ic2VydmVyLCBcIkNPTU1JVFwiLCB7fSksIHN0YXRlOiBfc3RhdGVzLkZBSUxFRCB9O1xuICAgIH0sXG4gICAgcm9sbGJhY2s6IGZ1bmN0aW9uIHJvbGxiYWNrKGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5vbkVycm9yKHsgZXJyb3I6IFwiQ2Fubm90IHJvbGxiYWNrIHRyYW5zYWN0aW9uLCBiZWNhdXNlIHByZXZpb3VzIHN0YXRlbWVudHMgaW4gdGhlIFwiICsgXCJ0cmFuc2FjdGlvbiBoYXMgZmFpbGVkIGFuZCB0aGUgdHJhbnNhY3Rpb24gaGFzIGFscmVhZHkgYmVlbiByb2xsZWQgYmFjay5cIiB9KTtcbiAgICAgIHJldHVybiB7IHJlc3VsdDogbmV3RHVtbXlSZXN1bHQob2JzZXJ2ZXIsIFwiUk9MTEJBQ0tcIiwge30pLCBzdGF0ZTogX3N0YXRlcy5GQUlMRUQgfTtcbiAgICB9LFxuICAgIHJ1bjogZnVuY3Rpb24gcnVuKGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMpIHtcbiAgICAgIG9ic2VydmVyLm9uRXJyb3IoeyBlcnJvcjogXCJDYW5ub3QgcnVuIHN0YXRlbWVudCwgYmVjYXVzZSBwcmV2aW91cyBzdGF0ZW1lbnRzIGluIHRoZSBcIiArIFwidHJhbnNhY3Rpb24gaGFzIGZhaWxlZCBhbmQgdGhlIHRyYW5zYWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcm9sbGVkIGJhY2suXCIgfSk7XG4gICAgICByZXR1cm4gbmV3RHVtbXlSZXN1bHQob2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycyk7XG4gICAgfVxuICB9LFxuXG4gIC8vVGhpcyB0cmFuc2FjdGlvbiBoYXMgc3VjY2Vzc2Z1bGx5IGNvbW1pdHRlZFxuICBTVUNDRUVERUQ6IHtcbiAgICBjb21taXQ6IGZ1bmN0aW9uIGNvbW1pdChjb25uZWN0aW9uSG9sZGVyLCBvYnNlcnZlcikge1xuICAgICAgb2JzZXJ2ZXIub25FcnJvcih7XG4gICAgICAgIGVycm9yOiBcIkNhbm5vdCBjb21taXQgc3RhdGVtZW50cyBpbiB0aGlzIHRyYW5zYWN0aW9uLCBiZWNhdXNlIGNvbW1pdCBoYXMgYWxyZWFkeSBiZWVuIHN1Y2Nlc3NmdWxseSBjYWxsZWQgb24gdGhlIHRyYW5zYWN0aW9uIGFuZCB0cmFuc2FjdGlvbiBoYXMgYmVlbiBjbG9zZWQuIFBsZWFzZSBzdGFydCBhIG5ld1wiICsgXCIgdHJhbnNhY3Rpb24gdG8gcnVuIGFub3RoZXIgc3RhdGVtZW50LlwiXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IHJlc3VsdDogbmV3RHVtbXlSZXN1bHQob2JzZXJ2ZXIsIFwiQ09NTUlUXCIsIHt9KSwgc3RhdGU6IF9zdGF0ZXMuU1VDQ0VFREVEIH07XG4gICAgfSxcbiAgICByb2xsYmFjazogZnVuY3Rpb24gcm9sbGJhY2soY29ubmVjdGlvbkhvbGRlciwgb2JzZXJ2ZXIpIHtcbiAgICAgIG9ic2VydmVyLm9uRXJyb3IoeyBlcnJvcjogXCJDYW5ub3Qgcm9sbGJhY2sgdHJhbnNhY3Rpb24sIGJlY2F1c2UgdHJhbnNhY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBzdWNjZXNzZnVsbHkgY2xvc2VkLlwiIH0pO1xuICAgICAgcmV0dXJuIHsgcmVzdWx0OiBuZXdEdW1teVJlc3VsdChvYnNlcnZlciwgXCJST0xMQkFDS1wiLCB7fSksIHN0YXRlOiBfc3RhdGVzLlNVQ0NFRURFRCB9O1xuICAgIH0sXG4gICAgcnVuOiBmdW5jdGlvbiBydW4oY29ubmVjdGlvbkhvbGRlciwgb2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycykge1xuICAgICAgb2JzZXJ2ZXIub25FcnJvcih7IGVycm9yOiBcIkNhbm5vdCBydW4gc3RhdGVtZW50LCBiZWNhdXNlIHRyYW5zYWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gc3VjY2Vzc2Z1bGx5IGNsb3NlZC5cIiB9KTtcbiAgICAgIHJldHVybiBuZXdEdW1teVJlc3VsdChvYnNlcnZlciwgc3RhdGVtZW50LCBwYXJhbWV0ZXJzKTtcbiAgICB9XG4gIH0sXG5cbiAgLy9UaGlzIHRyYW5zYWN0aW9uIGhhcyBiZWVuIHJvbGxlZCBiYWNrXG4gIFJPTExFRF9CQUNLOiB7XG4gICAgY29tbWl0OiBmdW5jdGlvbiBjb21taXQoY29ubmVjdGlvbkhvbGRlciwgb2JzZXJ2ZXIpIHtcbiAgICAgIG9ic2VydmVyLm9uRXJyb3Ioe1xuICAgICAgICBlcnJvcjogXCJDYW5ub3QgY29tbWl0IHRoaXMgdHJhbnNhY3Rpb24sIGJlY2F1c2UgaXQgaGFzIGFscmVhZHkgYmVlbiByb2xsZWQgYmFjay5cIlxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyByZXN1bHQ6IG5ld0R1bW15UmVzdWx0KG9ic2VydmVyLCBcIkNPTU1JVFwiLCB7fSksIHN0YXRlOiBfc3RhdGVzLlJPTExFRF9CQUNLIH07XG4gICAgfSxcbiAgICByb2xsYmFjazogZnVuY3Rpb24gcm9sbGJhY2soY29ubmVjdGlvbkhvbGRlciwgb2JzZXJ2ZXIpIHtcbiAgICAgIG9ic2VydmVyLm9uRXJyb3IoeyBlcnJvcjogXCJDYW5ub3Qgcm9sbGJhY2sgdHJhbnNhY3Rpb24sIGJlY2F1c2UgdHJhbnNhY3Rpb24gaGFzIGFscmVhZHkgYmVlbiByb2xsZWQgYmFjay5cIiB9KTtcbiAgICAgIHJldHVybiB7IHJlc3VsdDogbmV3RHVtbXlSZXN1bHQob2JzZXJ2ZXIsIFwiUk9MTEJBQ0tcIiwge30pLCBzdGF0ZTogX3N0YXRlcy5ST0xMRURfQkFDSyB9O1xuICAgIH0sXG4gICAgcnVuOiBmdW5jdGlvbiBydW4oY29ubmVjdGlvbkhvbGRlciwgb2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycykge1xuICAgICAgb2JzZXJ2ZXIub25FcnJvcih7IGVycm9yOiBcIkNhbm5vdCBydW4gc3RhdGVtZW50LCBiZWNhdXNlIHRyYW5zYWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcm9sbGVkIGJhY2suXCIgfSk7XG4gICAgICByZXR1cm4gbmV3RHVtbXlSZXN1bHQob2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycyk7XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBfcnVuUHVsbEFsbChtc2csIGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyKSB7XG4gIGNvbm5lY3Rpb25Ib2xkZXIuZ2V0Q29ubmVjdGlvbigpLnRoZW4oZnVuY3Rpb24gKGNvbm4pIHtcbiAgICBvYnNlcnZlci5yZXNvbHZlQ29ubmVjdGlvbihjb25uKTtcbiAgICBjb25uLnJ1bihtc2csIHt9LCBvYnNlcnZlcik7XG4gICAgY29ubi5wdWxsQWxsKG9ic2VydmVyKTtcbiAgICBjb25uLnN5bmMoKTtcbiAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgcmV0dXJuIG9ic2VydmVyLm9uRXJyb3IoZXJyb3IpO1xuICB9KTtcblxuICAvLyBmb3IgY29tbWl0ICYgcm9sbGJhY2sgd2UgbmVlZCByZXN1bHQgdGhhdCB1c2VzIHJlYWwgY29ubmVjdGlvbiBob2xkZXIgYW5kIG5vdGlmaWVzIGl0IHdoZW5cbiAgLy8gY29ubmVjdGlvbiBpcyBub3QgbmVlZGVkIGFuZCBjYW4gYmUgc2FmZWx5IHJlbGVhc2VkIHRvIHRoZSBwb29sXG4gIHJldHVybiBuZXcgX3Jlc3VsdDIuZGVmYXVsdChvYnNlcnZlciwgbXNnLCB7fSwgZW1wdHlNZXRhZGF0YVN1cHBsaWVyLCBjb25uZWN0aW9uSG9sZGVyKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIFJlc3VsdH0gd2l0aCBlbXB0eSBjb25uZWN0aW9uIGhvbGRlci5cbiAqIFNob3VsZCBiZSB1c2VkIGFzIGEgcmVzdWx0IGZvciBydW5uaW5nIGN5cGhlciBzdGF0ZW1lbnRzLiBUaGV5IGNhbiByZXN1bHQgaW4gbWV0YWRhdGEgYnV0IHNob3VsZCBub3RcbiAqIGluZmx1ZW5jZSByZWFsIGNvbm5lY3Rpb24gaG9sZGVyIHRvIHJlbGVhc2UgY29ubmVjdGlvbnMgYmVjYXVzZSBzaW5nbGUgdHJhbnNhY3Rpb24gY2FuIGhhdmVcbiAqIHtAbGluayBUcmFuc2FjdGlvbiNydW59IGNhbGxlZCBtdWx0aXBsZSB0aW1lcy5cbiAqIEBwYXJhbSB7U3RyZWFtT2JzZXJ2ZXJ9IG9ic2VydmVyIC0gYW4gb2JzZXJ2ZXIgZm9yIHRoZSBjcmVhdGVkIHJlc3VsdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZW1lbnQgLSB0aGUgY3lwaGVyIHN0YXRlbWVudCB0aGF0IHByb2R1Y2VkIHRoZSByZXN1bHQuXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1ldGVycyAtIHRoZSBwYXJhbWV0ZXJzIGZvciBjeXBoZXIgc3RhdGVtZW50IHRoYXQgcHJvZHVjZWQgdGhlIHJlc3VsdC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IG1ldGFkYXRhU3VwcGxpZXIgLSB0aGUgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgbWV0YWRhdGEgb2JqZWN0LlxuICogQHJldHVybiB7UmVzdWx0fSBuZXcgcmVzdWx0LlxuICovXG5mdW5jdGlvbiBuZXdSdW5SZXN1bHQob2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycywgbWV0YWRhdGFTdXBwbGllcikge1xuICByZXR1cm4gbmV3IF9yZXN1bHQyLmRlZmF1bHQob2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycywgbWV0YWRhdGFTdXBwbGllciwgX2Nvbm5lY3Rpb25Ib2xkZXIuRU1QVFlfQ09OTkVDVElPTl9IT0xERVIpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgUmVzdWx0fSB3aXRob3V0IG1ldGFkYXRhIHN1cHBsaWVyIGFuZCB3aXRoIGVtcHR5IGNvbm5lY3Rpb24gaG9sZGVyLlxuICogRm9yIGNhc2VzIHdoZW4gcmVzdWx0IHJlcHJlc2VudHMgYW4gaW50ZXJtZWRpYXRlIG9yIGZhaWxlZCBhY3Rpb24sIGRvZXMgbm90IHJlcXVpcmUgYW55IG1ldGFkYXRhIGFuZCBkb2VzIG5vdFxuICogbmVlZCB0byBpbmZsdWVuY2UgcmVhbCBjb25uZWN0aW9uIGhvbGRlciB0byByZWxlYXNlIGNvbm5lY3Rpb25zLlxuICogQHBhcmFtIHtTdHJlYW1PYnNlcnZlcn0gb2JzZXJ2ZXIgLSBhbiBvYnNlcnZlciBmb3IgdGhlIGNyZWF0ZWQgcmVzdWx0LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlbWVudCAtIHRoZSBjeXBoZXIgc3RhdGVtZW50IHRoYXQgcHJvZHVjZWQgdGhlIHJlc3VsdC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbWV0ZXJzIC0gdGhlIHBhcmFtZXRlcnMgZm9yIGN5cGhlciBzdGF0ZW1lbnQgdGhhdCBwcm9kdWNlZCB0aGUgcmVzdWx0LlxuICogQHJldHVybiB7UmVzdWx0fSBuZXcgcmVzdWx0LlxuICovXG5mdW5jdGlvbiBuZXdEdW1teVJlc3VsdChvYnNlcnZlciwgc3RhdGVtZW50LCBwYXJhbWV0ZXJzKSB7XG4gIHJldHVybiBuZXcgX3Jlc3VsdDIuZGVmYXVsdChvYnNlcnZlciwgc3RhdGVtZW50LCBwYXJhbWV0ZXJzLCBlbXB0eU1ldGFkYXRhU3VwcGxpZXIsIF9jb25uZWN0aW9uSG9sZGVyLkVNUFRZX0NPTk5FQ1RJT05fSE9MREVSKTtcbn1cblxuZnVuY3Rpb24gZW1wdHlNZXRhZGF0YVN1cHBsaWVyKCkge1xuICByZXR1cm4ge307XG59XG5cbmV4cG9ydHMuZGVmYXVsdCA9IFRyYW5zYWN0aW9uOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIERPIE5PVCBDSEFOR0UgVEhFIFZFUlNJT04gQkVMT1cgSEVSRVxuLy8gVGhpcyBpcyBzZXQgYnkgdGhlIGJ1aWxkIHN5c3RlbSBhdCByZWxlYXNlIHRpbWUsIHVzaW5nXG4vLyAgIGd1bHAgc2V0IC0tdmVyc2lvbiA8cmVsZWFzZXZlcnNpb24+XG4vL1xuLy8gVGhpcyBpcyBzZXQgdXAgdGhpcyB3YXkgdG8ga2VlcCB0aGUgdmVyc2lvbiBpbiB0aGUgY29kZSBpblxuLy8gc3luYyB3aXRoIHRoZSBucG0gcGFja2FnZSB2ZXJzaW9uLCBhbmQgdG8gYWxsb3cgdGhlIGJ1aWxkXG4vLyBzeXN0ZW0gdG8gY29udHJvbCB2ZXJzaW9uIG5hbWVzIGF0IHBhY2thZ2luZyB0aW1lLlxuZXhwb3J0cy5kZWZhdWx0ID0gXCIwLjAuMC1kZXZcIjsiLCJ2YXIgYXNuMSA9IGV4cG9ydHM7XG5cbmFzbjEuYmlnbnVtID0gcmVxdWlyZSgnYm4uanMnKTtcblxuYXNuMS5kZWZpbmUgPSByZXF1aXJlKCcuL2FzbjEvYXBpJykuZGVmaW5lO1xuYXNuMS5iYXNlID0gcmVxdWlyZSgnLi9hc24xL2Jhc2UnKTtcbmFzbjEuY29uc3RhbnRzID0gcmVxdWlyZSgnLi9hc24xL2NvbnN0YW50cycpO1xuYXNuMS5kZWNvZGVycyA9IHJlcXVpcmUoJy4vYXNuMS9kZWNvZGVycycpO1xuYXNuMS5lbmNvZGVycyA9IHJlcXVpcmUoJy4vYXNuMS9lbmNvZGVycycpO1xuIiwidmFyIGFzbjEgPSByZXF1aXJlKCcuLi9hc24xJyk7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG52YXIgYXBpID0gZXhwb3J0cztcblxuYXBpLmRlZmluZSA9IGZ1bmN0aW9uIGRlZmluZShuYW1lLCBib2R5KSB7XG4gIHJldHVybiBuZXcgRW50aXR5KG5hbWUsIGJvZHkpO1xufTtcblxuZnVuY3Rpb24gRW50aXR5KG5hbWUsIGJvZHkpIHtcbiAgdGhpcy5uYW1lID0gbmFtZTtcbiAgdGhpcy5ib2R5ID0gYm9keTtcblxuICB0aGlzLmRlY29kZXJzID0ge307XG4gIHRoaXMuZW5jb2RlcnMgPSB7fTtcbn07XG5cbkVudGl0eS5wcm90b3R5cGUuX2NyZWF0ZU5hbWVkID0gZnVuY3Rpb24gY3JlYXRlTmFtZWQoYmFzZSkge1xuICB2YXIgbmFtZWQ7XG4gIHRyeSB7XG4gICAgbmFtZWQgPSByZXF1aXJlKCd2bScpLnJ1bkluVGhpc0NvbnRleHQoXG4gICAgICAnKGZ1bmN0aW9uICcgKyB0aGlzLm5hbWUgKyAnKGVudGl0eSkge1xcbicgK1xuICAgICAgJyAgdGhpcy5faW5pdE5hbWVkKGVudGl0eSk7XFxuJyArXG4gICAgICAnfSknXG4gICAgKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIG5hbWVkID0gZnVuY3Rpb24gKGVudGl0eSkge1xuICAgICAgdGhpcy5faW5pdE5hbWVkKGVudGl0eSk7XG4gICAgfTtcbiAgfVxuICBpbmhlcml0cyhuYW1lZCwgYmFzZSk7XG4gIG5hbWVkLnByb3RvdHlwZS5faW5pdE5hbWVkID0gZnVuY3Rpb24gaW5pdG5hbWVkKGVudGl0eSkge1xuICAgIGJhc2UuY2FsbCh0aGlzLCBlbnRpdHkpO1xuICB9O1xuXG4gIHJldHVybiBuZXcgbmFtZWQodGhpcyk7XG59O1xuXG5FbnRpdHkucHJvdG90eXBlLl9nZXREZWNvZGVyID0gZnVuY3Rpb24gX2dldERlY29kZXIoZW5jKSB7XG4gIGVuYyA9IGVuYyB8fCAnZGVyJztcbiAgLy8gTGF6aWx5IGNyZWF0ZSBkZWNvZGVyXG4gIGlmICghdGhpcy5kZWNvZGVycy5oYXNPd25Qcm9wZXJ0eShlbmMpKVxuICAgIHRoaXMuZGVjb2RlcnNbZW5jXSA9IHRoaXMuX2NyZWF0ZU5hbWVkKGFzbjEuZGVjb2RlcnNbZW5jXSk7XG4gIHJldHVybiB0aGlzLmRlY29kZXJzW2VuY107XG59O1xuXG5FbnRpdHkucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShkYXRhLCBlbmMsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRoaXMuX2dldERlY29kZXIoZW5jKS5kZWNvZGUoZGF0YSwgb3B0aW9ucyk7XG59O1xuXG5FbnRpdHkucHJvdG90eXBlLl9nZXRFbmNvZGVyID0gZnVuY3Rpb24gX2dldEVuY29kZXIoZW5jKSB7XG4gIGVuYyA9IGVuYyB8fCAnZGVyJztcbiAgLy8gTGF6aWx5IGNyZWF0ZSBlbmNvZGVyXG4gIGlmICghdGhpcy5lbmNvZGVycy5oYXNPd25Qcm9wZXJ0eShlbmMpKVxuICAgIHRoaXMuZW5jb2RlcnNbZW5jXSA9IHRoaXMuX2NyZWF0ZU5hbWVkKGFzbjEuZW5jb2RlcnNbZW5jXSk7XG4gIHJldHVybiB0aGlzLmVuY29kZXJzW2VuY107XG59O1xuXG5FbnRpdHkucHJvdG90eXBlLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShkYXRhLCBlbmMsIC8qIGludGVybmFsICovIHJlcG9ydGVyKSB7XG4gIHJldHVybiB0aGlzLl9nZXRFbmNvZGVyKGVuYykuZW5jb2RlKGRhdGEsIHJlcG9ydGVyKTtcbn07XG4iLCJ2YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xudmFyIFJlcG9ydGVyID0gcmVxdWlyZSgnLi4vYmFzZScpLlJlcG9ydGVyO1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcblxuZnVuY3Rpb24gRGVjb2RlckJ1ZmZlcihiYXNlLCBvcHRpb25zKSB7XG4gIFJlcG9ydGVyLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJhc2UpKSB7XG4gICAgdGhpcy5lcnJvcignSW5wdXQgbm90IEJ1ZmZlcicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuYmFzZSA9IGJhc2U7XG4gIHRoaXMub2Zmc2V0ID0gMDtcbiAgdGhpcy5sZW5ndGggPSBiYXNlLmxlbmd0aDtcbn1cbmluaGVyaXRzKERlY29kZXJCdWZmZXIsIFJlcG9ydGVyKTtcbmV4cG9ydHMuRGVjb2RlckJ1ZmZlciA9IERlY29kZXJCdWZmZXI7XG5cbkRlY29kZXJCdWZmZXIucHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbiBzYXZlKCkge1xuICByZXR1cm4geyBvZmZzZXQ6IHRoaXMub2Zmc2V0LCByZXBvcnRlcjogUmVwb3J0ZXIucHJvdG90eXBlLnNhdmUuY2FsbCh0aGlzKSB9O1xufTtcblxuRGVjb2RlckJ1ZmZlci5wcm90b3R5cGUucmVzdG9yZSA9IGZ1bmN0aW9uIHJlc3RvcmUoc2F2ZSkge1xuICAvLyBSZXR1cm4gc2tpcHBlZCBkYXRhXG4gIHZhciByZXMgPSBuZXcgRGVjb2RlckJ1ZmZlcih0aGlzLmJhc2UpO1xuICByZXMub2Zmc2V0ID0gc2F2ZS5vZmZzZXQ7XG4gIHJlcy5sZW5ndGggPSB0aGlzLm9mZnNldDtcblxuICB0aGlzLm9mZnNldCA9IHNhdmUub2Zmc2V0O1xuICBSZXBvcnRlci5wcm90b3R5cGUucmVzdG9yZS5jYWxsKHRoaXMsIHNhdmUucmVwb3J0ZXIpO1xuXG4gIHJldHVybiByZXM7XG59O1xuXG5EZWNvZGVyQnVmZmVyLnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24gaXNFbXB0eSgpIHtcbiAgcmV0dXJuIHRoaXMub2Zmc2V0ID09PSB0aGlzLmxlbmd0aDtcbn07XG5cbkRlY29kZXJCdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OChmYWlsKSB7XG4gIGlmICh0aGlzLm9mZnNldCArIDEgPD0gdGhpcy5sZW5ndGgpXG4gICAgcmV0dXJuIHRoaXMuYmFzZS5yZWFkVUludDgodGhpcy5vZmZzZXQrKywgdHJ1ZSk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5lcnJvcihmYWlsIHx8ICdEZWNvZGVyQnVmZmVyIG92ZXJydW4nKTtcbn1cblxuRGVjb2RlckJ1ZmZlci5wcm90b3R5cGUuc2tpcCA9IGZ1bmN0aW9uIHNraXAoYnl0ZXMsIGZhaWwpIHtcbiAgaWYgKCEodGhpcy5vZmZzZXQgKyBieXRlcyA8PSB0aGlzLmxlbmd0aCkpXG4gICAgcmV0dXJuIHRoaXMuZXJyb3IoZmFpbCB8fCAnRGVjb2RlckJ1ZmZlciBvdmVycnVuJyk7XG5cbiAgdmFyIHJlcyA9IG5ldyBEZWNvZGVyQnVmZmVyKHRoaXMuYmFzZSk7XG5cbiAgLy8gU2hhcmUgcmVwb3J0ZXIgc3RhdGVcbiAgcmVzLl9yZXBvcnRlclN0YXRlID0gdGhpcy5fcmVwb3J0ZXJTdGF0ZTtcblxuICByZXMub2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gIHJlcy5sZW5ndGggPSB0aGlzLm9mZnNldCArIGJ5dGVzO1xuICB0aGlzLm9mZnNldCArPSBieXRlcztcbiAgcmV0dXJuIHJlcztcbn1cblxuRGVjb2RlckJ1ZmZlci5wcm90b3R5cGUucmF3ID0gZnVuY3Rpb24gcmF3KHNhdmUpIHtcbiAgcmV0dXJuIHRoaXMuYmFzZS5zbGljZShzYXZlID8gc2F2ZS5vZmZzZXQgOiB0aGlzLm9mZnNldCwgdGhpcy5sZW5ndGgpO1xufVxuXG5mdW5jdGlvbiBFbmNvZGVyQnVmZmVyKHZhbHVlLCByZXBvcnRlcikge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlLm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICBpZiAoIShpdGVtIGluc3RhbmNlb2YgRW5jb2RlckJ1ZmZlcikpXG4gICAgICAgIGl0ZW0gPSBuZXcgRW5jb2RlckJ1ZmZlcihpdGVtLCByZXBvcnRlcik7XG4gICAgICB0aGlzLmxlbmd0aCArPSBpdGVtLmxlbmd0aDtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH0sIHRoaXMpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAoISgwIDw9IHZhbHVlICYmIHZhbHVlIDw9IDB4ZmYpKVxuICAgICAgcmV0dXJuIHJlcG9ydGVyLmVycm9yKCdub24tYnl0ZSBFbmNvZGVyQnVmZmVyIHZhbHVlJyk7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMubGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgodmFsdWUpO1xuICB9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5sZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlcG9ydGVyLmVycm9yKCdVbnN1cHBvcnRlZCB0eXBlOiAnICsgdHlwZW9mIHZhbHVlKTtcbiAgfVxufVxuZXhwb3J0cy5FbmNvZGVyQnVmZmVyID0gRW5jb2RlckJ1ZmZlcjtcblxuRW5jb2RlckJ1ZmZlci5wcm90b3R5cGUuam9pbiA9IGZ1bmN0aW9uIGpvaW4ob3V0LCBvZmZzZXQpIHtcbiAgaWYgKCFvdXQpXG4gICAgb3V0ID0gbmV3IEJ1ZmZlcih0aGlzLmxlbmd0aCk7XG4gIGlmICghb2Zmc2V0KVxuICAgIG9mZnNldCA9IDA7XG5cbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKVxuICAgIHJldHVybiBvdXQ7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcbiAgICB0aGlzLnZhbHVlLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgaXRlbS5qb2luKG91dCwgb2Zmc2V0KTtcbiAgICAgIG9mZnNldCArPSBpdGVtLmxlbmd0aDtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgPT09ICdudW1iZXInKVxuICAgICAgb3V0W29mZnNldF0gPSB0aGlzLnZhbHVlO1xuICAgIGVsc2UgaWYgKHR5cGVvZiB0aGlzLnZhbHVlID09PSAnc3RyaW5nJylcbiAgICAgIG91dC53cml0ZSh0aGlzLnZhbHVlLCBvZmZzZXQpO1xuICAgIGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcih0aGlzLnZhbHVlKSlcbiAgICAgIHRoaXMudmFsdWUuY29weShvdXQsIG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IHRoaXMubGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn07XG4iLCJ2YXIgYmFzZSA9IGV4cG9ydHM7XG5cbmJhc2UuUmVwb3J0ZXIgPSByZXF1aXJlKCcuL3JlcG9ydGVyJykuUmVwb3J0ZXI7XG5iYXNlLkRlY29kZXJCdWZmZXIgPSByZXF1aXJlKCcuL2J1ZmZlcicpLkRlY29kZXJCdWZmZXI7XG5iYXNlLkVuY29kZXJCdWZmZXIgPSByZXF1aXJlKCcuL2J1ZmZlcicpLkVuY29kZXJCdWZmZXI7XG5iYXNlLk5vZGUgPSByZXF1aXJlKCcuL25vZGUnKTtcbiIsInZhciBSZXBvcnRlciA9IHJlcXVpcmUoJy4uL2Jhc2UnKS5SZXBvcnRlcjtcbnZhciBFbmNvZGVyQnVmZmVyID0gcmVxdWlyZSgnLi4vYmFzZScpLkVuY29kZXJCdWZmZXI7XG52YXIgRGVjb2RlckJ1ZmZlciA9IHJlcXVpcmUoJy4uL2Jhc2UnKS5EZWNvZGVyQnVmZmVyO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuLy8gU3VwcG9ydGVkIHRhZ3NcbnZhciB0YWdzID0gW1xuICAnc2VxJywgJ3NlcW9mJywgJ3NldCcsICdzZXRvZicsICdvYmppZCcsICdib29sJyxcbiAgJ2dlbnRpbWUnLCAndXRjdGltZScsICdudWxsXycsICdlbnVtJywgJ2ludCcsICdvYmpEZXNjJyxcbiAgJ2JpdHN0cicsICdibXBzdHInLCAnY2hhcnN0cicsICdnZW5zdHInLCAnZ3JhcGhzdHInLCAnaWE1c3RyJywgJ2lzbzY0NnN0cicsXG4gICdudW1zdHInLCAnb2N0c3RyJywgJ3ByaW50c3RyJywgJ3Q2MXN0cicsICd1bmlzdHInLCAndXRmOHN0cicsICd2aWRlb3N0cidcbl07XG5cbi8vIFB1YmxpYyBtZXRob2RzIGxpc3RcbnZhciBtZXRob2RzID0gW1xuICAna2V5JywgJ29iaicsICd1c2UnLCAnb3B0aW9uYWwnLCAnZXhwbGljaXQnLCAnaW1wbGljaXQnLCAnZGVmJywgJ2Nob2ljZScsXG4gICdhbnknLCAnY29udGFpbnMnXG5dLmNvbmNhdCh0YWdzKTtcblxuLy8gT3ZlcnJpZGVkIG1ldGhvZHMgbGlzdFxudmFyIG92ZXJyaWRlZCA9IFtcbiAgJ19wZWVrVGFnJywgJ19kZWNvZGVUYWcnLCAnX3VzZScsXG4gICdfZGVjb2RlU3RyJywgJ19kZWNvZGVPYmppZCcsICdfZGVjb2RlVGltZScsXG4gICdfZGVjb2RlTnVsbCcsICdfZGVjb2RlSW50JywgJ19kZWNvZGVCb29sJywgJ19kZWNvZGVMaXN0JyxcblxuICAnX2VuY29kZUNvbXBvc2l0ZScsICdfZW5jb2RlU3RyJywgJ19lbmNvZGVPYmppZCcsICdfZW5jb2RlVGltZScsXG4gICdfZW5jb2RlTnVsbCcsICdfZW5jb2RlSW50JywgJ19lbmNvZGVCb29sJ1xuXTtcblxuZnVuY3Rpb24gTm9kZShlbmMsIHBhcmVudCkge1xuICB2YXIgc3RhdGUgPSB7fTtcbiAgdGhpcy5fYmFzZVN0YXRlID0gc3RhdGU7XG5cbiAgc3RhdGUuZW5jID0gZW5jO1xuXG4gIHN0YXRlLnBhcmVudCA9IHBhcmVudCB8fCBudWxsO1xuICBzdGF0ZS5jaGlsZHJlbiA9IG51bGw7XG5cbiAgLy8gU3RhdGVcbiAgc3RhdGUudGFnID0gbnVsbDtcbiAgc3RhdGUuYXJncyA9IG51bGw7XG4gIHN0YXRlLnJldmVyc2VBcmdzID0gbnVsbDtcbiAgc3RhdGUuY2hvaWNlID0gbnVsbDtcbiAgc3RhdGUub3B0aW9uYWwgPSBmYWxzZTtcbiAgc3RhdGUuYW55ID0gZmFsc2U7XG4gIHN0YXRlLm9iaiA9IGZhbHNlO1xuICBzdGF0ZS51c2UgPSBudWxsO1xuICBzdGF0ZS51c2VEZWNvZGVyID0gbnVsbDtcbiAgc3RhdGUua2V5ID0gbnVsbDtcbiAgc3RhdGVbJ2RlZmF1bHQnXSA9IG51bGw7XG4gIHN0YXRlLmV4cGxpY2l0ID0gbnVsbDtcbiAgc3RhdGUuaW1wbGljaXQgPSBudWxsO1xuICBzdGF0ZS5jb250YWlucyA9IG51bGw7XG5cbiAgLy8gU2hvdWxkIGNyZWF0ZSBuZXcgaW5zdGFuY2Ugb24gZWFjaCBtZXRob2RcbiAgaWYgKCFzdGF0ZS5wYXJlbnQpIHtcbiAgICBzdGF0ZS5jaGlsZHJlbiA9IFtdO1xuICAgIHRoaXMuX3dyYXAoKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBOb2RlO1xuXG52YXIgc3RhdGVQcm9wcyA9IFtcbiAgJ2VuYycsICdwYXJlbnQnLCAnY2hpbGRyZW4nLCAndGFnJywgJ2FyZ3MnLCAncmV2ZXJzZUFyZ3MnLCAnY2hvaWNlJyxcbiAgJ29wdGlvbmFsJywgJ2FueScsICdvYmonLCAndXNlJywgJ2FsdGVyZWRVc2UnLCAna2V5JywgJ2RlZmF1bHQnLCAnZXhwbGljaXQnLFxuICAnaW1wbGljaXQnLCAnY29udGFpbnMnXG5dO1xuXG5Ob2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uIGNsb25lKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gIHZhciBjc3RhdGUgPSB7fTtcbiAgc3RhdGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApIHtcbiAgICBjc3RhdGVbcHJvcF0gPSBzdGF0ZVtwcm9wXTtcbiAgfSk7XG4gIHZhciByZXMgPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcihjc3RhdGUucGFyZW50KTtcbiAgcmVzLl9iYXNlU3RhdGUgPSBjc3RhdGU7XG4gIHJldHVybiByZXM7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5fd3JhcCA9IGZ1bmN0aW9uIHdyYXAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcbiAgbWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgIHRoaXNbbWV0aG9kXSA9IGZ1bmN0aW9uIF93cmFwcGVkTWV0aG9kKCkge1xuICAgICAgdmFyIGNsb25lID0gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyk7XG4gICAgICBzdGF0ZS5jaGlsZHJlbi5wdXNoKGNsb25lKTtcbiAgICAgIHJldHVybiBjbG9uZVttZXRob2RdLmFwcGx5KGNsb25lLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH0sIHRoaXMpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGJvZHkpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZS5wYXJlbnQgPT09IG51bGwpO1xuICBib2R5LmNhbGwodGhpcyk7XG5cbiAgLy8gRmlsdGVyIGNoaWxkcmVuXG4gIHN0YXRlLmNoaWxkcmVuID0gc3RhdGUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkLl9iYXNlU3RhdGUucGFyZW50ID09PSB0aGlzO1xuICB9LCB0aGlzKTtcbiAgYXNzZXJ0LmVxdWFsKHN0YXRlLmNoaWxkcmVuLmxlbmd0aCwgMSwgJ1Jvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZCcpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX3VzZUFyZ3MgPSBmdW5jdGlvbiB1c2VBcmdzKGFyZ3MpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIC8vIEZpbHRlciBjaGlsZHJlbiBhbmQgYXJnc1xuICB2YXIgY2hpbGRyZW4gPSBhcmdzLmZpbHRlcihmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gYXJnIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcjtcbiAgfSwgdGhpcyk7XG4gIGFyZ3MgPSBhcmdzLmZpbHRlcihmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gIShhcmcgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSwgdGhpcyk7XG5cbiAgaWYgKGNoaWxkcmVuLmxlbmd0aCAhPT0gMCkge1xuICAgIGFzc2VydChzdGF0ZS5jaGlsZHJlbiA9PT0gbnVsbCk7XG4gICAgc3RhdGUuY2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgIC8vIFJlcGxhY2UgcGFyZW50IHRvIG1haW50YWluIGJhY2t3YXJkIGxpbmtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICBjaGlsZC5fYmFzZVN0YXRlLnBhcmVudCA9IHRoaXM7XG4gICAgfSwgdGhpcyk7XG4gIH1cbiAgaWYgKGFyZ3MubGVuZ3RoICE9PSAwKSB7XG4gICAgYXNzZXJ0KHN0YXRlLmFyZ3MgPT09IG51bGwpO1xuICAgIHN0YXRlLmFyZ3MgPSBhcmdzO1xuICAgIHN0YXRlLnJldmVyc2VBcmdzID0gYXJncy5tYXAoZnVuY3Rpb24oYXJnKSB7XG4gICAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ29iamVjdCcgfHwgYXJnLmNvbnN0cnVjdG9yICE9PSBPYmplY3QpXG4gICAgICAgIHJldHVybiBhcmc7XG5cbiAgICAgIHZhciByZXMgPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKGFyZykuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgaWYgKGtleSA9PSAoa2V5IHwgMCkpXG4gICAgICAgICAga2V5IHw9IDA7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFyZ1trZXldO1xuICAgICAgICByZXNbdmFsdWVdID0ga2V5O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pO1xuICB9XG59O1xuXG4vL1xuLy8gT3ZlcnJpZGVkIG1ldGhvZHNcbi8vXG5cbm92ZXJyaWRlZC5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICBOb2RlLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gX292ZXJyaWRlZCgpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1ldGhvZCArICcgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGluZzogJyArIHN0YXRlLmVuYyk7XG4gIH07XG59KTtcblxuLy9cbi8vIFB1YmxpYyBtZXRob2RzXG4vL1xuXG50YWdzLmZvckVhY2goZnVuY3Rpb24odGFnKSB7XG4gIE5vZGUucHJvdG90eXBlW3RhZ10gPSBmdW5jdGlvbiBfdGFnTWV0aG9kKCkge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgICBhc3NlcnQoc3RhdGUudGFnID09PSBudWxsKTtcbiAgICBzdGF0ZS50YWcgPSB0YWc7XG5cbiAgICB0aGlzLl91c2VBcmdzKGFyZ3MpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG59KTtcblxuTm9kZS5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGl0ZW0pIHtcbiAgYXNzZXJ0KGl0ZW0pO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgYXNzZXJ0KHN0YXRlLnVzZSA9PT0gbnVsbCk7XG4gIHN0YXRlLnVzZSA9IGl0ZW07XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5vcHRpb25hbCA9IGZ1bmN0aW9uIG9wdGlvbmFsKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgc3RhdGUub3B0aW9uYWwgPSB0cnVlO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUuZGVmID0gZnVuY3Rpb24gZGVmKHZhbCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgYXNzZXJ0KHN0YXRlWydkZWZhdWx0J10gPT09IG51bGwpO1xuICBzdGF0ZVsnZGVmYXVsdCddID0gdmFsO1xuICBzdGF0ZS5vcHRpb25hbCA9IHRydWU7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5leHBsaWNpdCA9IGZ1bmN0aW9uIGV4cGxpY2l0KG51bSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgYXNzZXJ0KHN0YXRlLmV4cGxpY2l0ID09PSBudWxsICYmIHN0YXRlLmltcGxpY2l0ID09PSBudWxsKTtcbiAgc3RhdGUuZXhwbGljaXQgPSBudW07XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5pbXBsaWNpdCA9IGZ1bmN0aW9uIGltcGxpY2l0KG51bSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgYXNzZXJ0KHN0YXRlLmV4cGxpY2l0ID09PSBudWxsICYmIHN0YXRlLmltcGxpY2l0ID09PSBudWxsKTtcbiAgc3RhdGUuaW1wbGljaXQgPSBudW07XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5vYmogPSBmdW5jdGlvbiBvYmooKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcbiAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gIHN0YXRlLm9iaiA9IHRydWU7XG5cbiAgaWYgKGFyZ3MubGVuZ3RoICE9PSAwKVxuICAgIHRoaXMuX3VzZUFyZ3MoYXJncyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5rZXkgPSBmdW5jdGlvbiBrZXkobmV3S2V5KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICBhc3NlcnQoc3RhdGUua2V5ID09PSBudWxsKTtcbiAgc3RhdGUua2V5ID0gbmV3S2V5O1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUuYW55ID0gZnVuY3Rpb24gYW55KCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgc3RhdGUuYW55ID0gdHJ1ZTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbk5vZGUucHJvdG90eXBlLmNob2ljZSA9IGZ1bmN0aW9uIGNob2ljZShvYmopIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZS5jaG9pY2UgPT09IG51bGwpO1xuICBzdGF0ZS5jaG9pY2UgPSBvYmo7XG4gIHRoaXMuX3VzZUFyZ3MoT2JqZWN0LmtleXMob2JqKS5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9ialtrZXldO1xuICB9KSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uIGNvbnRhaW5zKGl0ZW0pIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZS51c2UgPT09IG51bGwpO1xuICBzdGF0ZS5jb250YWlucyA9IGl0ZW07XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRGVjb2Rpbmdcbi8vXG5cbk5vZGUucHJvdG90eXBlLl9kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoaW5wdXQsIG9wdGlvbnMpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIC8vIERlY29kZSByb290IG5vZGVcbiAgaWYgKHN0YXRlLnBhcmVudCA9PT0gbnVsbClcbiAgICByZXR1cm4gaW5wdXQud3JhcFJlc3VsdChzdGF0ZS5jaGlsZHJlblswXS5fZGVjb2RlKGlucHV0LCBvcHRpb25zKSk7XG5cbiAgdmFyIHJlc3VsdCA9IHN0YXRlWydkZWZhdWx0J107XG4gIHZhciBwcmVzZW50ID0gdHJ1ZTtcblxuICB2YXIgcHJldktleSA9IG51bGw7XG4gIGlmIChzdGF0ZS5rZXkgIT09IG51bGwpXG4gICAgcHJldktleSA9IGlucHV0LmVudGVyS2V5KHN0YXRlLmtleSk7XG5cbiAgLy8gQ2hlY2sgaWYgdGFnIGlzIHRoZXJlXG4gIGlmIChzdGF0ZS5vcHRpb25hbCkge1xuICAgIHZhciB0YWcgPSBudWxsO1xuICAgIGlmIChzdGF0ZS5leHBsaWNpdCAhPT0gbnVsbClcbiAgICAgIHRhZyA9IHN0YXRlLmV4cGxpY2l0O1xuICAgIGVsc2UgaWYgKHN0YXRlLmltcGxpY2l0ICE9PSBudWxsKVxuICAgICAgdGFnID0gc3RhdGUuaW1wbGljaXQ7XG4gICAgZWxzZSBpZiAoc3RhdGUudGFnICE9PSBudWxsKVxuICAgICAgdGFnID0gc3RhdGUudGFnO1xuXG4gICAgaWYgKHRhZyA9PT0gbnVsbCAmJiAhc3RhdGUuYW55KSB7XG4gICAgICAvLyBUcmlhbCBhbmQgRXJyb3JcbiAgICAgIHZhciBzYXZlID0gaW5wdXQuc2F2ZSgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHN0YXRlLmNob2ljZSA9PT0gbnVsbClcbiAgICAgICAgICB0aGlzLl9kZWNvZGVHZW5lcmljKHN0YXRlLnRhZywgaW5wdXQsIG9wdGlvbnMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgdGhpcy5fZGVjb2RlQ2hvaWNlKGlucHV0LCBvcHRpb25zKTtcbiAgICAgICAgcHJlc2VudCA9IHRydWU7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHByZXNlbnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlucHV0LnJlc3RvcmUoc2F2ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZXNlbnQgPSB0aGlzLl9wZWVrVGFnKGlucHV0LCB0YWcsIHN0YXRlLmFueSk7XG5cbiAgICAgIGlmIChpbnB1dC5pc0Vycm9yKHByZXNlbnQpKVxuICAgICAgICByZXR1cm4gcHJlc2VudDtcbiAgICB9XG4gIH1cblxuICAvLyBQdXNoIG9iamVjdCBvbiBzdGFja1xuICB2YXIgcHJldk9iajtcbiAgaWYgKHN0YXRlLm9iaiAmJiBwcmVzZW50KVxuICAgIHByZXZPYmogPSBpbnB1dC5lbnRlck9iamVjdCgpO1xuXG4gIGlmIChwcmVzZW50KSB7XG4gICAgLy8gVW53cmFwIGV4cGxpY2l0IHZhbHVlc1xuICAgIGlmIChzdGF0ZS5leHBsaWNpdCAhPT0gbnVsbCkge1xuICAgICAgdmFyIGV4cGxpY2l0ID0gdGhpcy5fZGVjb2RlVGFnKGlucHV0LCBzdGF0ZS5leHBsaWNpdCk7XG4gICAgICBpZiAoaW5wdXQuaXNFcnJvcihleHBsaWNpdCkpXG4gICAgICAgIHJldHVybiBleHBsaWNpdDtcbiAgICAgIGlucHV0ID0gZXhwbGljaXQ7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0ID0gaW5wdXQub2Zmc2V0O1xuXG4gICAgLy8gVW53cmFwIGltcGxpY2l0IGFuZCBub3JtYWwgdmFsdWVzXG4gICAgaWYgKHN0YXRlLnVzZSA9PT0gbnVsbCAmJiBzdGF0ZS5jaG9pY2UgPT09IG51bGwpIHtcbiAgICAgIGlmIChzdGF0ZS5hbnkpXG4gICAgICAgIHZhciBzYXZlID0gaW5wdXQuc2F2ZSgpO1xuICAgICAgdmFyIGJvZHkgPSB0aGlzLl9kZWNvZGVUYWcoXG4gICAgICAgIGlucHV0LFxuICAgICAgICBzdGF0ZS5pbXBsaWNpdCAhPT0gbnVsbCA/IHN0YXRlLmltcGxpY2l0IDogc3RhdGUudGFnLFxuICAgICAgICBzdGF0ZS5hbnlcbiAgICAgICk7XG4gICAgICBpZiAoaW5wdXQuaXNFcnJvcihib2R5KSlcbiAgICAgICAgcmV0dXJuIGJvZHk7XG5cbiAgICAgIGlmIChzdGF0ZS5hbnkpXG4gICAgICAgIHJlc3VsdCA9IGlucHV0LnJhdyhzYXZlKTtcbiAgICAgIGVsc2VcbiAgICAgICAgaW5wdXQgPSBib2R5O1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudHJhY2sgJiYgc3RhdGUudGFnICE9PSBudWxsKVxuICAgICAgb3B0aW9ucy50cmFjayhpbnB1dC5wYXRoKCksIHN0YXJ0LCBpbnB1dC5sZW5ndGgsICd0YWdnZWQnKTtcblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudHJhY2sgJiYgc3RhdGUudGFnICE9PSBudWxsKVxuICAgICAgb3B0aW9ucy50cmFjayhpbnB1dC5wYXRoKCksIGlucHV0Lm9mZnNldCwgaW5wdXQubGVuZ3RoLCAnY29udGVudCcpO1xuXG4gICAgLy8gU2VsZWN0IHByb3BlciBtZXRob2QgZm9yIHRhZ1xuICAgIGlmIChzdGF0ZS5hbnkpXG4gICAgICByZXN1bHQgPSByZXN1bHQ7XG4gICAgZWxzZSBpZiAoc3RhdGUuY2hvaWNlID09PSBudWxsKVxuICAgICAgcmVzdWx0ID0gdGhpcy5fZGVjb2RlR2VuZXJpYyhzdGF0ZS50YWcsIGlucHV0LCBvcHRpb25zKTtcbiAgICBlbHNlXG4gICAgICByZXN1bHQgPSB0aGlzLl9kZWNvZGVDaG9pY2UoaW5wdXQsIG9wdGlvbnMpO1xuXG4gICAgaWYgKGlucHV0LmlzRXJyb3IocmVzdWx0KSlcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICAvLyBEZWNvZGUgY2hpbGRyZW5cbiAgICBpZiAoIXN0YXRlLmFueSAmJiBzdGF0ZS5jaG9pY2UgPT09IG51bGwgJiYgc3RhdGUuY2hpbGRyZW4gIT09IG51bGwpIHtcbiAgICAgIHN0YXRlLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gZGVjb2RlQ2hpbGRyZW4oY2hpbGQpIHtcbiAgICAgICAgLy8gTk9URTogV2UgYXJlIGlnbm9yaW5nIGVycm9ycyBoZXJlLCB0byBsZXQgcGFyc2VyIGNvbnRpbnVlIHdpdGggb3RoZXJcbiAgICAgICAgLy8gcGFydHMgb2YgZW5jb2RlZCBkYXRhXG4gICAgICAgIGNoaWxkLl9kZWNvZGUoaW5wdXQsIG9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRGVjb2RlIGNvbnRhaW5lZC9lbmNvZGVkIGJ5IHNjaGVtYSwgb25seSBpbiBiaXQgb3Igb2N0ZXQgc3RyaW5nc1xuICAgIGlmIChzdGF0ZS5jb250YWlucyAmJiAoc3RhdGUudGFnID09PSAnb2N0c3RyJyB8fCBzdGF0ZS50YWcgPT09ICdiaXRzdHInKSkge1xuICAgICAgdmFyIGRhdGEgPSBuZXcgRGVjb2RlckJ1ZmZlcihyZXN1bHQpO1xuICAgICAgcmVzdWx0ID0gdGhpcy5fZ2V0VXNlKHN0YXRlLmNvbnRhaW5zLCBpbnB1dC5fcmVwb3J0ZXJTdGF0ZS5vYmopXG4gICAgICAgICAgLl9kZWNvZGUoZGF0YSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLy8gUG9wIG9iamVjdFxuICBpZiAoc3RhdGUub2JqICYmIHByZXNlbnQpXG4gICAgcmVzdWx0ID0gaW5wdXQubGVhdmVPYmplY3QocHJldk9iaik7XG5cbiAgLy8gU2V0IGtleVxuICBpZiAoc3RhdGUua2V5ICE9PSBudWxsICYmIChyZXN1bHQgIT09IG51bGwgfHwgcHJlc2VudCA9PT0gdHJ1ZSkpXG4gICAgaW5wdXQubGVhdmVLZXkocHJldktleSwgc3RhdGUua2V5LCByZXN1bHQpO1xuICBlbHNlIGlmIChwcmV2S2V5ICE9PSBudWxsKVxuICAgIGlucHV0LmV4aXRLZXkocHJldktleSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbk5vZGUucHJvdG90eXBlLl9kZWNvZGVHZW5lcmljID0gZnVuY3Rpb24gZGVjb2RlR2VuZXJpYyh0YWcsIGlucHV0LCBvcHRpb25zKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICBpZiAodGFnID09PSAnc2VxJyB8fCB0YWcgPT09ICdzZXQnKVxuICAgIHJldHVybiBudWxsO1xuICBpZiAodGFnID09PSAnc2Vxb2YnIHx8IHRhZyA9PT0gJ3NldG9mJylcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlTGlzdChpbnB1dCwgdGFnLCBzdGF0ZS5hcmdzWzBdLCBvcHRpb25zKTtcbiAgZWxzZSBpZiAoL3N0ciQvLnRlc3QodGFnKSlcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlU3RyKGlucHV0LCB0YWcsIG9wdGlvbnMpO1xuICBlbHNlIGlmICh0YWcgPT09ICdvYmppZCcgJiYgc3RhdGUuYXJncylcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlT2JqaWQoaW5wdXQsIHN0YXRlLmFyZ3NbMF0sIHN0YXRlLmFyZ3NbMV0sIG9wdGlvbnMpO1xuICBlbHNlIGlmICh0YWcgPT09ICdvYmppZCcpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZU9iamlkKGlucHV0LCBudWxsLCBudWxsLCBvcHRpb25zKTtcbiAgZWxzZSBpZiAodGFnID09PSAnZ2VudGltZScgfHwgdGFnID09PSAndXRjdGltZScpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZVRpbWUoaW5wdXQsIHRhZywgb3B0aW9ucyk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ251bGxfJylcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlTnVsbChpbnB1dCwgb3B0aW9ucyk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ2Jvb2wnKVxuICAgIHJldHVybiB0aGlzLl9kZWNvZGVCb29sKGlucHV0LCBvcHRpb25zKTtcbiAgZWxzZSBpZiAodGFnID09PSAnb2JqRGVzYycpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZVN0cihpbnB1dCwgdGFnLCBvcHRpb25zKTtcbiAgZWxzZSBpZiAodGFnID09PSAnaW50JyB8fCB0YWcgPT09ICdlbnVtJylcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlSW50KGlucHV0LCBzdGF0ZS5hcmdzICYmIHN0YXRlLmFyZ3NbMF0sIG9wdGlvbnMpO1xuXG4gIGlmIChzdGF0ZS51c2UgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0VXNlKHN0YXRlLnVzZSwgaW5wdXQuX3JlcG9ydGVyU3RhdGUub2JqKVxuICAgICAgICAuX2RlY29kZShpbnB1dCwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGlucHV0LmVycm9yKCd1bmtub3duIHRhZzogJyArIHRhZyk7XG4gIH1cbn07XG5cbk5vZGUucHJvdG90eXBlLl9nZXRVc2UgPSBmdW5jdGlvbiBfZ2V0VXNlKGVudGl0eSwgb2JqKSB7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuICAvLyBDcmVhdGUgYWx0ZXJlZCB1c2UgZGVjb2RlciBpZiBpbXBsaWNpdCBpcyBzZXRcbiAgc3RhdGUudXNlRGVjb2RlciA9IHRoaXMuX3VzZShlbnRpdHksIG9iaik7XG4gIGFzc2VydChzdGF0ZS51c2VEZWNvZGVyLl9iYXNlU3RhdGUucGFyZW50ID09PSBudWxsKTtcbiAgc3RhdGUudXNlRGVjb2RlciA9IHN0YXRlLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5jaGlsZHJlblswXTtcbiAgaWYgKHN0YXRlLmltcGxpY2l0ICE9PSBzdGF0ZS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQpIHtcbiAgICBzdGF0ZS51c2VEZWNvZGVyID0gc3RhdGUudXNlRGVjb2Rlci5jbG9uZSgpO1xuICAgIHN0YXRlLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCA9IHN0YXRlLmltcGxpY2l0O1xuICB9XG4gIHJldHVybiBzdGF0ZS51c2VEZWNvZGVyO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2RlY29kZUNob2ljZSA9IGZ1bmN0aW9uIGRlY29kZUNob2ljZShpbnB1dCwgb3B0aW9ucykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gIHZhciByZXN1bHQgPSBudWxsO1xuICB2YXIgbWF0Y2ggPSBmYWxzZTtcblxuICBPYmplY3Qua2V5cyhzdGF0ZS5jaG9pY2UpLnNvbWUoZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIHNhdmUgPSBpbnB1dC5zYXZlKCk7XG4gICAgdmFyIG5vZGUgPSBzdGF0ZS5jaG9pY2Vba2V5XTtcbiAgICB0cnkge1xuICAgICAgdmFyIHZhbHVlID0gbm9kZS5fZGVjb2RlKGlucHV0LCBvcHRpb25zKTtcbiAgICAgIGlmIChpbnB1dC5pc0Vycm9yKHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICByZXN1bHQgPSB7IHR5cGU6IGtleSwgdmFsdWU6IHZhbHVlIH07XG4gICAgICBtYXRjaCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaW5wdXQucmVzdG9yZShzYXZlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sIHRoaXMpO1xuXG4gIGlmICghbWF0Y2gpXG4gICAgcmV0dXJuIGlucHV0LmVycm9yKCdDaG9pY2Ugbm90IG1hdGNoZWQnKTtcblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy9cbi8vIEVuY29kaW5nXG4vL1xuXG5Ob2RlLnByb3RvdHlwZS5fY3JlYXRlRW5jb2RlckJ1ZmZlciA9IGZ1bmN0aW9uIGNyZWF0ZUVuY29kZXJCdWZmZXIoZGF0YSkge1xuICByZXR1cm4gbmV3IEVuY29kZXJCdWZmZXIoZGF0YSwgdGhpcy5yZXBvcnRlcik7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5fZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKGRhdGEsIHJlcG9ydGVyLCBwYXJlbnQpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuICBpZiAoc3RhdGVbJ2RlZmF1bHQnXSAhPT0gbnVsbCAmJiBzdGF0ZVsnZGVmYXVsdCddID09PSBkYXRhKVxuICAgIHJldHVybjtcblxuICB2YXIgcmVzdWx0ID0gdGhpcy5fZW5jb2RlVmFsdWUoZGF0YSwgcmVwb3J0ZXIsIHBhcmVudCk7XG4gIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm47XG5cbiAgaWYgKHRoaXMuX3NraXBEZWZhdWx0KHJlc3VsdCwgcmVwb3J0ZXIsIHBhcmVudCkpXG4gICAgcmV0dXJuO1xuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5fZW5jb2RlVmFsdWUgPSBmdW5jdGlvbiBlbmNvZGUoZGF0YSwgcmVwb3J0ZXIsIHBhcmVudCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgLy8gRGVjb2RlIHJvb3Qgbm9kZVxuICBpZiAoc3RhdGUucGFyZW50ID09PSBudWxsKVxuICAgIHJldHVybiBzdGF0ZS5jaGlsZHJlblswXS5fZW5jb2RlKGRhdGEsIHJlcG9ydGVyIHx8IG5ldyBSZXBvcnRlcigpKTtcblxuICB2YXIgcmVzdWx0ID0gbnVsbDtcblxuICAvLyBTZXQgcmVwb3J0ZXIgdG8gc2hhcmUgaXQgd2l0aCBhIGNoaWxkIGNsYXNzXG4gIHRoaXMucmVwb3J0ZXIgPSByZXBvcnRlcjtcblxuICAvLyBDaGVjayBpZiBkYXRhIGlzIHRoZXJlXG4gIGlmIChzdGF0ZS5vcHRpb25hbCAmJiBkYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoc3RhdGVbJ2RlZmF1bHQnXSAhPT0gbnVsbClcbiAgICAgIGRhdGEgPSBzdGF0ZVsnZGVmYXVsdCddXG4gICAgZWxzZVxuICAgICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRW5jb2RlIGNoaWxkcmVuIGZpcnN0XG4gIHZhciBjb250ZW50ID0gbnVsbDtcbiAgdmFyIHByaW1pdGl2ZSA9IGZhbHNlO1xuICBpZiAoc3RhdGUuYW55KSB7XG4gICAgLy8gQW55dGhpbmcgdGhhdCB3YXMgZ2l2ZW4gaXMgdHJhbnNsYXRlZCB0byBidWZmZXJcbiAgICByZXN1bHQgPSB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGRhdGEpO1xuICB9IGVsc2UgaWYgKHN0YXRlLmNob2ljZSkge1xuICAgIHJlc3VsdCA9IHRoaXMuX2VuY29kZUNob2ljZShkYXRhLCByZXBvcnRlcik7XG4gIH0gZWxzZSBpZiAoc3RhdGUuY29udGFpbnMpIHtcbiAgICBjb250ZW50ID0gdGhpcy5fZ2V0VXNlKHN0YXRlLmNvbnRhaW5zLCBwYXJlbnQpLl9lbmNvZGUoZGF0YSwgcmVwb3J0ZXIpO1xuICAgIHByaW1pdGl2ZSA9IHRydWU7XG4gIH0gZWxzZSBpZiAoc3RhdGUuY2hpbGRyZW4pIHtcbiAgICBjb250ZW50ID0gc3RhdGUuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICBpZiAoY2hpbGQuX2Jhc2VTdGF0ZS50YWcgPT09ICdudWxsXycpXG4gICAgICAgIHJldHVybiBjaGlsZC5fZW5jb2RlKG51bGwsIHJlcG9ydGVyLCBkYXRhKTtcblxuICAgICAgaWYgKGNoaWxkLl9iYXNlU3RhdGUua2V5ID09PSBudWxsKVxuICAgICAgICByZXR1cm4gcmVwb3J0ZXIuZXJyb3IoJ0NoaWxkIHNob3VsZCBoYXZlIGEga2V5Jyk7XG4gICAgICB2YXIgcHJldktleSA9IHJlcG9ydGVyLmVudGVyS2V5KGNoaWxkLl9iYXNlU3RhdGUua2V5KTtcblxuICAgICAgaWYgKHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JylcbiAgICAgICAgcmV0dXJuIHJlcG9ydGVyLmVycm9yKCdDaGlsZCBleHBlY3RlZCwgYnV0IGlucHV0IGlzIG5vdCBvYmplY3QnKTtcblxuICAgICAgdmFyIHJlcyA9IGNoaWxkLl9lbmNvZGUoZGF0YVtjaGlsZC5fYmFzZVN0YXRlLmtleV0sIHJlcG9ydGVyLCBkYXRhKTtcbiAgICAgIHJlcG9ydGVyLmxlYXZlS2V5KHByZXZLZXkpO1xuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIHRoaXMpLmZpbHRlcihmdW5jdGlvbihjaGlsZCkge1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH0pO1xuICAgIGNvbnRlbnQgPSB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGNvbnRlbnQpO1xuICB9IGVsc2Uge1xuICAgIGlmIChzdGF0ZS50YWcgPT09ICdzZXFvZicgfHwgc3RhdGUudGFnID09PSAnc2V0b2YnKSB7XG4gICAgICAvLyBUT0RPKGluZHV0bnkpOiB0aGlzIHNob3VsZCBiZSB0aHJvd24gb24gRFNMIGxldmVsXG4gICAgICBpZiAoIShzdGF0ZS5hcmdzICYmIHN0YXRlLmFyZ3MubGVuZ3RoID09PSAxKSlcbiAgICAgICAgcmV0dXJuIHJlcG9ydGVyLmVycm9yKCdUb28gbWFueSBhcmdzIGZvciA6ICcgKyBzdGF0ZS50YWcpO1xuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpXG4gICAgICAgIHJldHVybiByZXBvcnRlci5lcnJvcignc2Vxb2Yvc2V0b2YsIGJ1dCBkYXRhIGlzIG5vdCBBcnJheScpO1xuXG4gICAgICB2YXIgY2hpbGQgPSB0aGlzLmNsb25lKCk7XG4gICAgICBjaGlsZC5fYmFzZVN0YXRlLmltcGxpY2l0ID0gbnVsbDtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGRhdGEubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRVc2Uoc3RhdGUuYXJnc1swXSwgZGF0YSkuX2VuY29kZShpdGVtLCByZXBvcnRlcik7XG4gICAgICB9LCBjaGlsZCkpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUudXNlICE9PSBudWxsKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLl9nZXRVc2Uoc3RhdGUudXNlLCBwYXJlbnQpLl9lbmNvZGUoZGF0YSwgcmVwb3J0ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50ID0gdGhpcy5fZW5jb2RlUHJpbWl0aXZlKHN0YXRlLnRhZywgZGF0YSk7XG4gICAgICBwcmltaXRpdmUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVuY29kZSBkYXRhIGl0c2VsZlxuICB2YXIgcmVzdWx0O1xuICBpZiAoIXN0YXRlLmFueSAmJiBzdGF0ZS5jaG9pY2UgPT09IG51bGwpIHtcbiAgICB2YXIgdGFnID0gc3RhdGUuaW1wbGljaXQgIT09IG51bGwgPyBzdGF0ZS5pbXBsaWNpdCA6IHN0YXRlLnRhZztcbiAgICB2YXIgY2xzID0gc3RhdGUuaW1wbGljaXQgPT09IG51bGwgPyAndW5pdmVyc2FsJyA6ICdjb250ZXh0JztcblxuICAgIGlmICh0YWcgPT09IG51bGwpIHtcbiAgICAgIGlmIChzdGF0ZS51c2UgPT09IG51bGwpXG4gICAgICAgIHJlcG9ydGVyLmVycm9yKCdUYWcgY291bGQgYmUgb21taXRlZCBvbmx5IGZvciAudXNlKCknKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXRlLnVzZSA9PT0gbnVsbClcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5fZW5jb2RlQ29tcG9zaXRlKHRhZywgcHJpbWl0aXZlLCBjbHMsIGNvbnRlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdyYXAgaW4gZXhwbGljaXRcbiAgaWYgKHN0YXRlLmV4cGxpY2l0ICE9PSBudWxsKVxuICAgIHJlc3VsdCA9IHRoaXMuX2VuY29kZUNvbXBvc2l0ZShzdGF0ZS5leHBsaWNpdCwgZmFsc2UsICdjb250ZXh0JywgcmVzdWx0KTtcblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2VuY29kZUNob2ljZSA9IGZ1bmN0aW9uIGVuY29kZUNob2ljZShkYXRhLCByZXBvcnRlcikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgdmFyIG5vZGUgPSBzdGF0ZS5jaG9pY2VbZGF0YS50eXBlXTtcbiAgaWYgKCFub2RlKSB7XG4gICAgYXNzZXJ0KFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgZGF0YS50eXBlICsgJyBub3QgZm91bmQgaW4gJyArXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhzdGF0ZS5jaG9pY2UpKSk7XG4gIH1cbiAgcmV0dXJuIG5vZGUuX2VuY29kZShkYXRhLnZhbHVlLCByZXBvcnRlcik7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlID0gZnVuY3Rpb24gZW5jb2RlUHJpbWl0aXZlKHRhZywgZGF0YSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgaWYgKC9zdHIkLy50ZXN0KHRhZykpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZVN0cihkYXRhLCB0YWcpO1xuICBlbHNlIGlmICh0YWcgPT09ICdvYmppZCcgJiYgc3RhdGUuYXJncylcbiAgICByZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoZGF0YSwgc3RhdGUucmV2ZXJzZUFyZ3NbMF0sIHN0YXRlLmFyZ3NbMV0pO1xuICBlbHNlIGlmICh0YWcgPT09ICdvYmppZCcpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKGRhdGEsIG51bGwsIG51bGwpO1xuICBlbHNlIGlmICh0YWcgPT09ICdnZW50aW1lJyB8fCB0YWcgPT09ICd1dGN0aW1lJylcbiAgICByZXR1cm4gdGhpcy5fZW5jb2RlVGltZShkYXRhLCB0YWcpO1xuICBlbHNlIGlmICh0YWcgPT09ICdudWxsXycpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtcbiAgZWxzZSBpZiAodGFnID09PSAnaW50JyB8fCB0YWcgPT09ICdlbnVtJylcbiAgICByZXR1cm4gdGhpcy5fZW5jb2RlSW50KGRhdGEsIHN0YXRlLmFyZ3MgJiYgc3RhdGUucmV2ZXJzZUFyZ3NbMF0pO1xuICBlbHNlIGlmICh0YWcgPT09ICdib29sJylcbiAgICByZXR1cm4gdGhpcy5fZW5jb2RlQm9vbChkYXRhKTtcbiAgZWxzZSBpZiAodGFnID09PSAnb2JqRGVzYycpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZVN0cihkYXRhLCB0YWcpO1xuICBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB0YWc6ICcgKyB0YWcpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2lzTnVtc3RyID0gZnVuY3Rpb24gaXNOdW1zdHIoc3RyKSB7XG4gIHJldHVybiAvXlswLTkgXSokLy50ZXN0KHN0cik7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5faXNQcmludHN0ciA9IGZ1bmN0aW9uIGlzUHJpbnRzdHIoc3RyKSB7XG4gIHJldHVybiAvXltBLVphLXowLTkgJ1xcKFxcKVxcKyxcXC1cXC5cXC86PVxcP10qJC8udGVzdChzdHIpO1xufTtcbiIsInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmZ1bmN0aW9uIFJlcG9ydGVyKG9wdGlvbnMpIHtcbiAgdGhpcy5fcmVwb3J0ZXJTdGF0ZSA9IHtcbiAgICBvYmo6IG51bGwsXG4gICAgcGF0aDogW10sXG4gICAgb3B0aW9uczogb3B0aW9ucyB8fCB7fSxcbiAgICBlcnJvcnM6IFtdXG4gIH07XG59XG5leHBvcnRzLlJlcG9ydGVyID0gUmVwb3J0ZXI7XG5cblJlcG9ydGVyLnByb3RvdHlwZS5pc0Vycm9yID0gZnVuY3Rpb24gaXNFcnJvcihvYmopIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIFJlcG9ydGVyRXJyb3I7XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUuc2F2ZSA9IGZ1bmN0aW9uIHNhdmUoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlcG9ydGVyU3RhdGU7XG5cbiAgcmV0dXJuIHsgb2JqOiBzdGF0ZS5vYmosIHBhdGhMZW46IHN0YXRlLnBhdGgubGVuZ3RoIH07XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUucmVzdG9yZSA9IGZ1bmN0aW9uIHJlc3RvcmUoZGF0YSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZXBvcnRlclN0YXRlO1xuXG4gIHN0YXRlLm9iaiA9IGRhdGEub2JqO1xuICBzdGF0ZS5wYXRoID0gc3RhdGUucGF0aC5zbGljZSgwLCBkYXRhLnBhdGhMZW4pO1xufTtcblxuUmVwb3J0ZXIucHJvdG90eXBlLmVudGVyS2V5ID0gZnVuY3Rpb24gZW50ZXJLZXkoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaChrZXkpO1xufTtcblxuUmVwb3J0ZXIucHJvdG90eXBlLmV4aXRLZXkgPSBmdW5jdGlvbiBleGl0S2V5KGluZGV4KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlcG9ydGVyU3RhdGU7XG5cbiAgc3RhdGUucGF0aCA9IHN0YXRlLnBhdGguc2xpY2UoMCwgaW5kZXggLSAxKTtcbn07XG5cblJlcG9ydGVyLnByb3RvdHlwZS5sZWF2ZUtleSA9IGZ1bmN0aW9uIGxlYXZlS2V5KGluZGV4LCBrZXksIHZhbHVlKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlcG9ydGVyU3RhdGU7XG5cbiAgdGhpcy5leGl0S2V5KGluZGV4KTtcbiAgaWYgKHN0YXRlLm9iaiAhPT0gbnVsbClcbiAgICBzdGF0ZS5vYmpba2V5XSA9IHZhbHVlO1xufTtcblxuUmVwb3J0ZXIucHJvdG90eXBlLnBhdGggPSBmdW5jdGlvbiBwYXRoKCkge1xuICByZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLmpvaW4oJy8nKTtcbn07XG5cblJlcG9ydGVyLnByb3RvdHlwZS5lbnRlck9iamVjdCA9IGZ1bmN0aW9uIGVudGVyT2JqZWN0KCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZXBvcnRlclN0YXRlO1xuXG4gIHZhciBwcmV2ID0gc3RhdGUub2JqO1xuICBzdGF0ZS5vYmogPSB7fTtcbiAgcmV0dXJuIHByZXY7XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUubGVhdmVPYmplY3QgPSBmdW5jdGlvbiBsZWF2ZU9iamVjdChwcmV2KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlcG9ydGVyU3RhdGU7XG5cbiAgdmFyIG5vdyA9IHN0YXRlLm9iajtcbiAgc3RhdGUub2JqID0gcHJldjtcbiAgcmV0dXJuIG5vdztcbn07XG5cblJlcG9ydGVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIGVycm9yKG1zZykge1xuICB2YXIgZXJyO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZXBvcnRlclN0YXRlO1xuXG4gIHZhciBpbmhlcml0ZWQgPSBtc2cgaW5zdGFuY2VvZiBSZXBvcnRlckVycm9yO1xuICBpZiAoaW5oZXJpdGVkKSB7XG4gICAgZXJyID0gbXNnO1xuICB9IGVsc2Uge1xuICAgIGVyciA9IG5ldyBSZXBvcnRlckVycm9yKHN0YXRlLnBhdGgubWFwKGZ1bmN0aW9uKGVsZW0pIHtcbiAgICAgIHJldHVybiAnWycgKyBKU09OLnN0cmluZ2lmeShlbGVtKSArICddJztcbiAgICB9KS5qb2luKCcnKSwgbXNnLm1lc3NhZ2UgfHwgbXNnLCBtc2cuc3RhY2spO1xuICB9XG5cbiAgaWYgKCFzdGF0ZS5vcHRpb25zLnBhcnRpYWwpXG4gICAgdGhyb3cgZXJyO1xuXG4gIGlmICghaW5oZXJpdGVkKVxuICAgIHN0YXRlLmVycm9ycy5wdXNoKGVycik7XG5cbiAgcmV0dXJuIGVycjtcbn07XG5cblJlcG9ydGVyLnByb3RvdHlwZS53cmFwUmVzdWx0ID0gZnVuY3Rpb24gd3JhcFJlc3VsdChyZXN1bHQpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVwb3J0ZXJTdGF0ZTtcbiAgaWYgKCFzdGF0ZS5vcHRpb25zLnBhcnRpYWwpXG4gICAgcmV0dXJuIHJlc3VsdDtcblxuICByZXR1cm4ge1xuICAgIHJlc3VsdDogdGhpcy5pc0Vycm9yKHJlc3VsdCkgPyBudWxsIDogcmVzdWx0LFxuICAgIGVycm9yczogc3RhdGUuZXJyb3JzXG4gIH07XG59O1xuXG5mdW5jdGlvbiBSZXBvcnRlckVycm9yKHBhdGgsIG1zZykge1xuICB0aGlzLnBhdGggPSBwYXRoO1xuICB0aGlzLnJldGhyb3cobXNnKTtcbn07XG5pbmhlcml0cyhSZXBvcnRlckVycm9yLCBFcnJvcik7XG5cblJlcG9ydGVyRXJyb3IucHJvdG90eXBlLnJldGhyb3cgPSBmdW5jdGlvbiByZXRocm93KG1zZykge1xuICB0aGlzLm1lc3NhZ2UgPSBtc2cgKyAnIGF0OiAnICsgKHRoaXMucGF0aCB8fCAnKHNoYWxsb3cpJyk7XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXBvcnRlckVycm9yKTtcblxuICBpZiAoIXRoaXMuc3RhY2spIHtcbiAgICB0cnkge1xuICAgICAgLy8gSUUgb25seSBhZGRzIHN0YWNrIHdoZW4gdGhyb3duXG4gICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLnN0YWNrID0gZS5zdGFjaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuIiwidmFyIGNvbnN0YW50cyA9IHJlcXVpcmUoJy4uL2NvbnN0YW50cycpO1xuXG5leHBvcnRzLnRhZ0NsYXNzID0ge1xuICAwOiAndW5pdmVyc2FsJyxcbiAgMTogJ2FwcGxpY2F0aW9uJyxcbiAgMjogJ2NvbnRleHQnLFxuICAzOiAncHJpdmF0ZSdcbn07XG5leHBvcnRzLnRhZ0NsYXNzQnlOYW1lID0gY29uc3RhbnRzLl9yZXZlcnNlKGV4cG9ydHMudGFnQ2xhc3MpO1xuXG5leHBvcnRzLnRhZyA9IHtcbiAgMHgwMDogJ2VuZCcsXG4gIDB4MDE6ICdib29sJyxcbiAgMHgwMjogJ2ludCcsXG4gIDB4MDM6ICdiaXRzdHInLFxuICAweDA0OiAnb2N0c3RyJyxcbiAgMHgwNTogJ251bGxfJyxcbiAgMHgwNjogJ29iamlkJyxcbiAgMHgwNzogJ29iakRlc2MnLFxuICAweDA4OiAnZXh0ZXJuYWwnLFxuICAweDA5OiAncmVhbCcsXG4gIDB4MGE6ICdlbnVtJyxcbiAgMHgwYjogJ2VtYmVkJyxcbiAgMHgwYzogJ3V0ZjhzdHInLFxuICAweDBkOiAncmVsYXRpdmVPaWQnLFxuICAweDEwOiAnc2VxJyxcbiAgMHgxMTogJ3NldCcsXG4gIDB4MTI6ICdudW1zdHInLFxuICAweDEzOiAncHJpbnRzdHInLFxuICAweDE0OiAndDYxc3RyJyxcbiAgMHgxNTogJ3ZpZGVvc3RyJyxcbiAgMHgxNjogJ2lhNXN0cicsXG4gIDB4MTc6ICd1dGN0aW1lJyxcbiAgMHgxODogJ2dlbnRpbWUnLFxuICAweDE5OiAnZ3JhcGhzdHInLFxuICAweDFhOiAnaXNvNjQ2c3RyJyxcbiAgMHgxYjogJ2dlbnN0cicsXG4gIDB4MWM6ICd1bmlzdHInLFxuICAweDFkOiAnY2hhcnN0cicsXG4gIDB4MWU6ICdibXBzdHInXG59O1xuZXhwb3J0cy50YWdCeU5hbWUgPSBjb25zdGFudHMuX3JldmVyc2UoZXhwb3J0cy50YWcpO1xuIiwidmFyIGNvbnN0YW50cyA9IGV4cG9ydHM7XG5cbi8vIEhlbHBlclxuY29uc3RhbnRzLl9yZXZlcnNlID0gZnVuY3Rpb24gcmV2ZXJzZShtYXApIHtcbiAgdmFyIHJlcyA9IHt9O1xuXG4gIE9iamVjdC5rZXlzKG1hcCkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAvLyBDb252ZXJ0IGtleSB0byBpbnRlZ2VyIGlmIGl0IGlzIHN0cmluZ2lmaWVkXG4gICAgaWYgKChrZXkgfCAwKSA9PSBrZXkpXG4gICAgICBrZXkgPSBrZXkgfCAwO1xuXG4gICAgdmFyIHZhbHVlID0gbWFwW2tleV07XG4gICAgcmVzW3ZhbHVlXSA9IGtleTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlcztcbn07XG5cbmNvbnN0YW50cy5kZXIgPSByZXF1aXJlKCcuL2RlcicpO1xuIiwidmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxudmFyIGFzbjEgPSByZXF1aXJlKCcuLi8uLi9hc24xJyk7XG52YXIgYmFzZSA9IGFzbjEuYmFzZTtcbnZhciBiaWdudW0gPSBhc24xLmJpZ251bTtcblxuLy8gSW1wb3J0IERFUiBjb25zdGFudHNcbnZhciBkZXIgPSBhc24xLmNvbnN0YW50cy5kZXI7XG5cbmZ1bmN0aW9uIERFUkRlY29kZXIoZW50aXR5KSB7XG4gIHRoaXMuZW5jID0gJ2Rlcic7XG4gIHRoaXMubmFtZSA9IGVudGl0eS5uYW1lO1xuICB0aGlzLmVudGl0eSA9IGVudGl0eTtcblxuICAvLyBDb25zdHJ1Y3QgYmFzZSB0cmVlXG4gIHRoaXMudHJlZSA9IG5ldyBERVJOb2RlKCk7XG4gIHRoaXMudHJlZS5faW5pdChlbnRpdHkuYm9keSk7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBERVJEZWNvZGVyO1xuXG5ERVJEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoZGF0YSwgb3B0aW9ucykge1xuICBpZiAoIShkYXRhIGluc3RhbmNlb2YgYmFzZS5EZWNvZGVyQnVmZmVyKSlcbiAgICBkYXRhID0gbmV3IGJhc2UuRGVjb2RlckJ1ZmZlcihkYXRhLCBvcHRpb25zKTtcblxuICByZXR1cm4gdGhpcy50cmVlLl9kZWNvZGUoZGF0YSwgb3B0aW9ucyk7XG59O1xuXG4vLyBUcmVlIG1ldGhvZHNcblxuZnVuY3Rpb24gREVSTm9kZShwYXJlbnQpIHtcbiAgYmFzZS5Ob2RlLmNhbGwodGhpcywgJ2RlcicsIHBhcmVudCk7XG59XG5pbmhlcml0cyhERVJOb2RlLCBiYXNlLk5vZGUpO1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fcGVla1RhZyA9IGZ1bmN0aW9uIHBlZWtUYWcoYnVmZmVyLCB0YWcsIGFueSkge1xuICBpZiAoYnVmZmVyLmlzRW1wdHkoKSlcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIHN0YXRlID0gYnVmZmVyLnNhdmUoKTtcbiAgdmFyIGRlY29kZWRUYWcgPSBkZXJEZWNvZGVUYWcoYnVmZmVyLCAnRmFpbGVkIHRvIHBlZWsgdGFnOiBcIicgKyB0YWcgKyAnXCInKTtcbiAgaWYgKGJ1ZmZlci5pc0Vycm9yKGRlY29kZWRUYWcpKVxuICAgIHJldHVybiBkZWNvZGVkVGFnO1xuXG4gIGJ1ZmZlci5yZXN0b3JlKHN0YXRlKTtcblxuICByZXR1cm4gZGVjb2RlZFRhZy50YWcgPT09IHRhZyB8fCBkZWNvZGVkVGFnLnRhZ1N0ciA9PT0gdGFnIHx8XG4gICAgKGRlY29kZWRUYWcudGFnU3RyICsgJ29mJykgPT09IHRhZyB8fCBhbnk7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZGVjb2RlVGFnID0gZnVuY3Rpb24gZGVjb2RlVGFnKGJ1ZmZlciwgdGFnLCBhbnkpIHtcbiAgdmFyIGRlY29kZWRUYWcgPSBkZXJEZWNvZGVUYWcoYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGRlY29kZSB0YWcgb2YgXCInICsgdGFnICsgJ1wiJyk7XG4gIGlmIChidWZmZXIuaXNFcnJvcihkZWNvZGVkVGFnKSlcbiAgICByZXR1cm4gZGVjb2RlZFRhZztcblxuICB2YXIgbGVuID0gZGVyRGVjb2RlTGVuKGJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkVGFnLnByaW1pdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGdldCBsZW5ndGggb2YgXCInICsgdGFnICsgJ1wiJyk7XG5cbiAgLy8gRmFpbHVyZVxuICBpZiAoYnVmZmVyLmlzRXJyb3IobGVuKSlcbiAgICByZXR1cm4gbGVuO1xuXG4gIGlmICghYW55ICYmXG4gICAgICBkZWNvZGVkVGFnLnRhZyAhPT0gdGFnICYmXG4gICAgICBkZWNvZGVkVGFnLnRhZ1N0ciAhPT0gdGFnICYmXG4gICAgICBkZWNvZGVkVGFnLnRhZ1N0ciArICdvZicgIT09IHRhZykge1xuICAgIHJldHVybiBidWZmZXIuZXJyb3IoJ0ZhaWxlZCB0byBtYXRjaCB0YWc6IFwiJyArIHRhZyArICdcIicpO1xuICB9XG5cbiAgaWYgKGRlY29kZWRUYWcucHJpbWl0aXZlIHx8IGxlbiAhPT0gbnVsbClcbiAgICByZXR1cm4gYnVmZmVyLnNraXAobGVuLCAnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6IFwiJyArIHRhZyArICdcIicpO1xuXG4gIC8vIEluZGVmaW5pdGUgbGVuZ3RoLi4uIGZpbmQgRU5EIHRhZ1xuICB2YXIgc3RhdGUgPSBidWZmZXIuc2F2ZSgpO1xuICB2YXIgcmVzID0gdGhpcy5fc2tpcFVudGlsRW5kKFxuICAgICAgYnVmZmVyLFxuICAgICAgJ0ZhaWxlZCB0byBza2lwIGluZGVmaW5pdGUgbGVuZ3RoIGJvZHk6IFwiJyArIHRoaXMudGFnICsgJ1wiJyk7XG4gIGlmIChidWZmZXIuaXNFcnJvcihyZXMpKVxuICAgIHJldHVybiByZXM7XG5cbiAgbGVuID0gYnVmZmVyLm9mZnNldCAtIHN0YXRlLm9mZnNldDtcbiAgYnVmZmVyLnJlc3RvcmUoc3RhdGUpO1xuICByZXR1cm4gYnVmZmVyLnNraXAobGVuLCAnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6IFwiJyArIHRhZyArICdcIicpO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX3NraXBVbnRpbEVuZCA9IGZ1bmN0aW9uIHNraXBVbnRpbEVuZChidWZmZXIsIGZhaWwpIHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgdGFnID0gZGVyRGVjb2RlVGFnKGJ1ZmZlciwgZmFpbCk7XG4gICAgaWYgKGJ1ZmZlci5pc0Vycm9yKHRhZykpXG4gICAgICByZXR1cm4gdGFnO1xuICAgIHZhciBsZW4gPSBkZXJEZWNvZGVMZW4oYnVmZmVyLCB0YWcucHJpbWl0aXZlLCBmYWlsKTtcbiAgICBpZiAoYnVmZmVyLmlzRXJyb3IobGVuKSlcbiAgICAgIHJldHVybiBsZW47XG5cbiAgICB2YXIgcmVzO1xuICAgIGlmICh0YWcucHJpbWl0aXZlIHx8IGxlbiAhPT0gbnVsbClcbiAgICAgIHJlcyA9IGJ1ZmZlci5za2lwKGxlbilcbiAgICBlbHNlXG4gICAgICByZXMgPSB0aGlzLl9za2lwVW50aWxFbmQoYnVmZmVyLCBmYWlsKTtcblxuICAgIC8vIEZhaWx1cmVcbiAgICBpZiAoYnVmZmVyLmlzRXJyb3IocmVzKSlcbiAgICAgIHJldHVybiByZXM7XG5cbiAgICBpZiAodGFnLnRhZ1N0ciA9PT0gJ2VuZCcpXG4gICAgICBicmVhaztcbiAgfVxufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZUxpc3QgPSBmdW5jdGlvbiBkZWNvZGVMaXN0KGJ1ZmZlciwgdGFnLCBkZWNvZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB3aGlsZSAoIWJ1ZmZlci5pc0VtcHR5KCkpIHtcbiAgICB2YXIgcG9zc2libGVFbmQgPSB0aGlzLl9wZWVrVGFnKGJ1ZmZlciwgJ2VuZCcpO1xuICAgIGlmIChidWZmZXIuaXNFcnJvcihwb3NzaWJsZUVuZCkpXG4gICAgICByZXR1cm4gcG9zc2libGVFbmQ7XG5cbiAgICB2YXIgcmVzID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLCAnZGVyJywgb3B0aW9ucyk7XG4gICAgaWYgKGJ1ZmZlci5pc0Vycm9yKHJlcykgJiYgcG9zc2libGVFbmQpXG4gICAgICBicmVhaztcbiAgICByZXN1bHQucHVzaChyZXMpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZGVjb2RlU3RyID0gZnVuY3Rpb24gZGVjb2RlU3RyKGJ1ZmZlciwgdGFnKSB7XG4gIGlmICh0YWcgPT09ICdiaXRzdHInKSB7XG4gICAgdmFyIHVudXNlZCA9IGJ1ZmZlci5yZWFkVUludDgoKTtcbiAgICBpZiAoYnVmZmVyLmlzRXJyb3IodW51c2VkKSlcbiAgICAgIHJldHVybiB1bnVzZWQ7XG4gICAgcmV0dXJuIHsgdW51c2VkOiB1bnVzZWQsIGRhdGE6IGJ1ZmZlci5yYXcoKSB9O1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2JtcHN0cicpIHtcbiAgICB2YXIgcmF3ID0gYnVmZmVyLnJhdygpO1xuICAgIGlmIChyYXcubGVuZ3RoICUgMiA9PT0gMSlcbiAgICAgIHJldHVybiBidWZmZXIuZXJyb3IoJ0RlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBibXBzdHIgbGVuZ3RoIG1pc21hdGNoJyk7XG5cbiAgICB2YXIgc3RyID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXcubGVuZ3RoIC8gMjsgaSsrKSB7XG4gICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShyYXcucmVhZFVJbnQxNkJFKGkgKiAyKSk7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH0gZWxzZSBpZiAodGFnID09PSAnbnVtc3RyJykge1xuICAgIHZhciBudW1zdHIgPSBidWZmZXIucmF3KCkudG9TdHJpbmcoJ2FzY2lpJyk7XG4gICAgaWYgKCF0aGlzLl9pc051bXN0cihudW1zdHIpKSB7XG4gICAgICByZXR1cm4gYnVmZmVyLmVycm9yKCdEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdudW1zdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycycpO1xuICAgIH1cbiAgICByZXR1cm4gbnVtc3RyO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ29jdHN0cicpIHtcbiAgICByZXR1cm4gYnVmZmVyLnJhdygpO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ29iakRlc2MnKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5yYXcoKTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdwcmludHN0cicpIHtcbiAgICB2YXIgcHJpbnRzdHIgPSBidWZmZXIucmF3KCkudG9TdHJpbmcoJ2FzY2lpJyk7XG4gICAgaWYgKCF0aGlzLl9pc1ByaW50c3RyKHByaW50c3RyKSkge1xuICAgICAgcmV0dXJuIGJ1ZmZlci5lcnJvcignRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAncHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycycpO1xuICAgIH1cbiAgICByZXR1cm4gcHJpbnRzdHI7XG4gIH0gZWxzZSBpZiAoL3N0ciQvLnRlc3QodGFnKSkge1xuICAgIHJldHVybiBidWZmZXIucmF3KCkudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYnVmZmVyLmVycm9yKCdEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogJyArIHRhZyArICcgdW5zdXBwb3J0ZWQnKTtcbiAgfVxufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZU9iamlkID0gZnVuY3Rpb24gZGVjb2RlT2JqaWQoYnVmZmVyLCB2YWx1ZXMsIHJlbGF0aXZlKSB7XG4gIHZhciByZXN1bHQ7XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuICB2YXIgaWRlbnQgPSAwO1xuICB3aGlsZSAoIWJ1ZmZlci5pc0VtcHR5KCkpIHtcbiAgICB2YXIgc3ViaWRlbnQgPSBidWZmZXIucmVhZFVJbnQ4KCk7XG4gICAgaWRlbnQgPDw9IDc7XG4gICAgaWRlbnQgfD0gc3ViaWRlbnQgJiAweDdmO1xuICAgIGlmICgoc3ViaWRlbnQgJiAweDgwKSA9PT0gMCkge1xuICAgICAgaWRlbnRpZmllcnMucHVzaChpZGVudCk7XG4gICAgICBpZGVudCA9IDA7XG4gICAgfVxuICB9XG4gIGlmIChzdWJpZGVudCAmIDB4ODApXG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudCk7XG5cbiAgdmFyIGZpcnN0ID0gKGlkZW50aWZpZXJzWzBdIC8gNDApIHwgMDtcbiAgdmFyIHNlY29uZCA9IGlkZW50aWZpZXJzWzBdICUgNDA7XG5cbiAgaWYgKHJlbGF0aXZlKVxuICAgIHJlc3VsdCA9IGlkZW50aWZpZXJzO1xuICBlbHNlXG4gICAgcmVzdWx0ID0gW2ZpcnN0LCBzZWNvbmRdLmNvbmNhdChpZGVudGlmaWVycy5zbGljZSgxKSk7XG5cbiAgaWYgKHZhbHVlcykge1xuICAgIHZhciB0bXAgPSB2YWx1ZXNbcmVzdWx0LmpvaW4oJyAnKV07XG4gICAgaWYgKHRtcCA9PT0gdW5kZWZpbmVkKVxuICAgICAgdG1wID0gdmFsdWVzW3Jlc3VsdC5qb2luKCcuJyldO1xuICAgIGlmICh0bXAgIT09IHVuZGVmaW5lZClcbiAgICAgIHJlc3VsdCA9IHRtcDtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZGVjb2RlVGltZSA9IGZ1bmN0aW9uIGRlY29kZVRpbWUoYnVmZmVyLCB0YWcpIHtcbiAgdmFyIHN0ciA9IGJ1ZmZlci5yYXcoKS50b1N0cmluZygpO1xuICBpZiAodGFnID09PSAnZ2VudGltZScpIHtcbiAgICB2YXIgeWVhciA9IHN0ci5zbGljZSgwLCA0KSB8IDA7XG4gICAgdmFyIG1vbiA9IHN0ci5zbGljZSg0LCA2KSB8IDA7XG4gICAgdmFyIGRheSA9IHN0ci5zbGljZSg2LCA4KSB8IDA7XG4gICAgdmFyIGhvdXIgPSBzdHIuc2xpY2UoOCwgMTApIHwgMDtcbiAgICB2YXIgbWluID0gc3RyLnNsaWNlKDEwLCAxMikgfCAwO1xuICAgIHZhciBzZWMgPSBzdHIuc2xpY2UoMTIsIDE0KSB8IDA7XG4gIH0gZWxzZSBpZiAodGFnID09PSAndXRjdGltZScpIHtcbiAgICB2YXIgeWVhciA9IHN0ci5zbGljZSgwLCAyKSB8IDA7XG4gICAgdmFyIG1vbiA9IHN0ci5zbGljZSgyLCA0KSB8IDA7XG4gICAgdmFyIGRheSA9IHN0ci5zbGljZSg0LCA2KSB8IDA7XG4gICAgdmFyIGhvdXIgPSBzdHIuc2xpY2UoNiwgOCkgfCAwO1xuICAgIHZhciBtaW4gPSBzdHIuc2xpY2UoOCwgMTApIHwgMDtcbiAgICB2YXIgc2VjID0gc3RyLnNsaWNlKDEwLCAxMikgfCAwO1xuICAgIGlmICh5ZWFyIDwgNzApXG4gICAgICB5ZWFyID0gMjAwMCArIHllYXI7XG4gICAgZWxzZVxuICAgICAgeWVhciA9IDE5MDAgKyB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidWZmZXIuZXJyb3IoJ0RlY29kaW5nICcgKyB0YWcgKyAnIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQnKTtcbiAgfVxuXG4gIHJldHVybiBEYXRlLlVUQyh5ZWFyLCBtb24gLSAxLCBkYXksIGhvdXIsIG1pbiwgc2VjLCAwKTtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9kZWNvZGVOdWxsID0gZnVuY3Rpb24gZGVjb2RlTnVsbChidWZmZXIpIHtcbiAgcmV0dXJuIG51bGw7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZGVjb2RlQm9vbCA9IGZ1bmN0aW9uIGRlY29kZUJvb2woYnVmZmVyKSB7XG4gIHZhciByZXMgPSBidWZmZXIucmVhZFVJbnQ4KCk7XG4gIGlmIChidWZmZXIuaXNFcnJvcihyZXMpKVxuICAgIHJldHVybiByZXM7XG4gIGVsc2VcbiAgICByZXR1cm4gcmVzICE9PSAwO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZUludCA9IGZ1bmN0aW9uIGRlY29kZUludChidWZmZXIsIHZhbHVlcykge1xuICAvLyBCaWdpbnQsIHJldHVybiBhcyBpdCBpcyAoYXNzdW1lIGJpZyBlbmRpYW4pXG4gIHZhciByYXcgPSBidWZmZXIucmF3KCk7XG4gIHZhciByZXMgPSBuZXcgYmlnbnVtKHJhdyk7XG5cbiAgaWYgKHZhbHVlcylcbiAgICByZXMgPSB2YWx1ZXNbcmVzLnRvU3RyaW5nKDEwKV0gfHwgcmVzO1xuXG4gIHJldHVybiByZXM7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fdXNlID0gZnVuY3Rpb24gdXNlKGVudGl0eSwgb2JqKSB7XG4gIGlmICh0eXBlb2YgZW50aXR5ID09PSAnZnVuY3Rpb24nKVxuICAgIGVudGl0eSA9IGVudGl0eShvYmopO1xuICByZXR1cm4gZW50aXR5Ll9nZXREZWNvZGVyKCdkZXInKS50cmVlO1xufTtcblxuLy8gVXRpbGl0eSBtZXRob2RzXG5cbmZ1bmN0aW9uIGRlckRlY29kZVRhZyhidWYsIGZhaWwpIHtcbiAgdmFyIHRhZyA9IGJ1Zi5yZWFkVUludDgoZmFpbCk7XG4gIGlmIChidWYuaXNFcnJvcih0YWcpKVxuICAgIHJldHVybiB0YWc7XG5cbiAgdmFyIGNscyA9IGRlci50YWdDbGFzc1t0YWcgPj4gNl07XG4gIHZhciBwcmltaXRpdmUgPSAodGFnICYgMHgyMCkgPT09IDA7XG5cbiAgLy8gTXVsdGktb2N0ZXQgdGFnIC0gbG9hZFxuICBpZiAoKHRhZyAmIDB4MWYpID09PSAweDFmKSB7XG4gICAgdmFyIG9jdCA9IHRhZztcbiAgICB0YWcgPSAwO1xuICAgIHdoaWxlICgob2N0ICYgMHg4MCkgPT09IDB4ODApIHtcbiAgICAgIG9jdCA9IGJ1Zi5yZWFkVUludDgoZmFpbCk7XG4gICAgICBpZiAoYnVmLmlzRXJyb3Iob2N0KSlcbiAgICAgICAgcmV0dXJuIG9jdDtcblxuICAgICAgdGFnIDw8PSA3O1xuICAgICAgdGFnIHw9IG9jdCAmIDB4N2Y7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRhZyAmPSAweDFmO1xuICB9XG4gIHZhciB0YWdTdHIgPSBkZXIudGFnW3RhZ107XG5cbiAgcmV0dXJuIHtcbiAgICBjbHM6IGNscyxcbiAgICBwcmltaXRpdmU6IHByaW1pdGl2ZSxcbiAgICB0YWc6IHRhZyxcbiAgICB0YWdTdHI6IHRhZ1N0clxuICB9O1xufVxuXG5mdW5jdGlvbiBkZXJEZWNvZGVMZW4oYnVmLCBwcmltaXRpdmUsIGZhaWwpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5yZWFkVUludDgoZmFpbCk7XG4gIGlmIChidWYuaXNFcnJvcihsZW4pKVxuICAgIHJldHVybiBsZW47XG5cbiAgLy8gSW5kZWZpbml0ZSBmb3JtXG4gIGlmICghcHJpbWl0aXZlICYmIGxlbiA9PT0gMHg4MClcbiAgICByZXR1cm4gbnVsbDtcblxuICAvLyBEZWZpbml0ZSBmb3JtXG4gIGlmICgobGVuICYgMHg4MCkgPT09IDApIHtcbiAgICAvLyBTaG9ydCBmb3JtXG4gICAgcmV0dXJuIGxlbjtcbiAgfVxuXG4gIC8vIExvbmcgZm9ybVxuICB2YXIgbnVtID0gbGVuICYgMHg3ZjtcbiAgaWYgKG51bSA+IDQpXG4gICAgcmV0dXJuIGJ1Zi5lcnJvcignbGVuZ3RoIG9jdGVjdCBpcyB0b28gbG9uZycpO1xuXG4gIGxlbiA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtOyBpKyspIHtcbiAgICBsZW4gPDw9IDg7XG4gICAgdmFyIGogPSBidWYucmVhZFVJbnQ4KGZhaWwpO1xuICAgIGlmIChidWYuaXNFcnJvcihqKSlcbiAgICAgIHJldHVybiBqO1xuICAgIGxlbiB8PSBqO1xuICB9XG5cbiAgcmV0dXJuIGxlbjtcbn1cbiIsInZhciBkZWNvZGVycyA9IGV4cG9ydHM7XG5cbmRlY29kZXJzLmRlciA9IHJlcXVpcmUoJy4vZGVyJyk7XG5kZWNvZGVycy5wZW0gPSByZXF1aXJlKCcuL3BlbScpO1xuIiwidmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG5cbnZhciBERVJEZWNvZGVyID0gcmVxdWlyZSgnLi9kZXInKTtcblxuZnVuY3Rpb24gUEVNRGVjb2RlcihlbnRpdHkpIHtcbiAgREVSRGVjb2Rlci5jYWxsKHRoaXMsIGVudGl0eSk7XG4gIHRoaXMuZW5jID0gJ3BlbSc7XG59O1xuaW5oZXJpdHMoUEVNRGVjb2RlciwgREVSRGVjb2Rlcik7XG5tb2R1bGUuZXhwb3J0cyA9IFBFTURlY29kZXI7XG5cblBFTURlY29kZXIucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShkYXRhLCBvcHRpb25zKSB7XG4gIHZhciBsaW5lcyA9IGRhdGEudG9TdHJpbmcoKS5zcGxpdCgvW1xcclxcbl0rL2cpO1xuXG4gIHZhciBsYWJlbCA9IG9wdGlvbnMubGFiZWwudG9VcHBlckNhc2UoKTtcblxuICB2YXIgcmUgPSAvXi0tLS0tKEJFR0lOfEVORCkgKFteLV0rKS0tLS0tJC87XG4gIHZhciBzdGFydCA9IC0xO1xuICB2YXIgZW5kID0gLTE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbWF0Y2ggPSBsaW5lc1tpXS5tYXRjaChyZSk7XG4gICAgaWYgKG1hdGNoID09PSBudWxsKVxuICAgICAgY29udGludWU7XG5cbiAgICBpZiAobWF0Y2hbMl0gIT09IGxhYmVsKVxuICAgICAgY29udGludWU7XG5cbiAgICBpZiAoc3RhcnQgPT09IC0xKSB7XG4gICAgICBpZiAobWF0Y2hbMV0gIT09ICdCRUdJTicpXG4gICAgICAgIGJyZWFrO1xuICAgICAgc3RhcnQgPSBpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobWF0Y2hbMV0gIT09ICdFTkQnKVxuICAgICAgICBicmVhaztcbiAgICAgIGVuZCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHN0YXJ0ID09PSAtMSB8fCBlbmQgPT09IC0xKVxuICAgIHRocm93IG5ldyBFcnJvcignUEVNIHNlY3Rpb24gbm90IGZvdW5kIGZvcjogJyArIGxhYmVsKTtcblxuICB2YXIgYmFzZTY0ID0gbGluZXMuc2xpY2Uoc3RhcnQgKyAxLCBlbmQpLmpvaW4oJycpO1xuICAvLyBSZW1vdmUgZXhjZXNzaXZlIHN5bWJvbHNcbiAgYmFzZTY0LnJlcGxhY2UoL1teYS16MC05XFwrXFwvPV0rL2dpLCAnJyk7XG5cbiAgdmFyIGlucHV0ID0gbmV3IEJ1ZmZlcihiYXNlNjQsICdiYXNlNjQnKTtcbiAgcmV0dXJuIERFUkRlY29kZXIucHJvdG90eXBlLmRlY29kZS5jYWxsKHRoaXMsIGlucHV0LCBvcHRpb25zKTtcbn07XG4iLCJ2YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcblxudmFyIGFzbjEgPSByZXF1aXJlKCcuLi8uLi9hc24xJyk7XG52YXIgYmFzZSA9IGFzbjEuYmFzZTtcblxuLy8gSW1wb3J0IERFUiBjb25zdGFudHNcbnZhciBkZXIgPSBhc24xLmNvbnN0YW50cy5kZXI7XG5cbmZ1bmN0aW9uIERFUkVuY29kZXIoZW50aXR5KSB7XG4gIHRoaXMuZW5jID0gJ2Rlcic7XG4gIHRoaXMubmFtZSA9IGVudGl0eS5uYW1lO1xuICB0aGlzLmVudGl0eSA9IGVudGl0eTtcblxuICAvLyBDb25zdHJ1Y3QgYmFzZSB0cmVlXG4gIHRoaXMudHJlZSA9IG5ldyBERVJOb2RlKCk7XG4gIHRoaXMudHJlZS5faW5pdChlbnRpdHkuYm9keSk7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBERVJFbmNvZGVyO1xuXG5ERVJFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoZGF0YSwgcmVwb3J0ZXIpIHtcbiAgcmV0dXJuIHRoaXMudHJlZS5fZW5jb2RlKGRhdGEsIHJlcG9ydGVyKS5qb2luKCk7XG59O1xuXG4vLyBUcmVlIG1ldGhvZHNcblxuZnVuY3Rpb24gREVSTm9kZShwYXJlbnQpIHtcbiAgYmFzZS5Ob2RlLmNhbGwodGhpcywgJ2RlcicsIHBhcmVudCk7XG59XG5pbmhlcml0cyhERVJOb2RlLCBiYXNlLk5vZGUpO1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZW5jb2RlQ29tcG9zaXRlID0gZnVuY3Rpb24gZW5jb2RlQ29tcG9zaXRlKHRhZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQpIHtcbiAgdmFyIGVuY29kZWRUYWcgPSBlbmNvZGVUYWcodGFnLCBwcmltaXRpdmUsIGNscywgdGhpcy5yZXBvcnRlcik7XG5cbiAgLy8gU2hvcnQgZm9ybVxuICBpZiAoY29udGVudC5sZW5ndGggPCAweDgwKSB7XG4gICAgdmFyIGhlYWRlciA9IG5ldyBCdWZmZXIoMik7XG4gICAgaGVhZGVyWzBdID0gZW5jb2RlZFRhZztcbiAgICBoZWFkZXJbMV0gPSBjb250ZW50Lmxlbmd0aDtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbIGhlYWRlciwgY29udGVudCBdKTtcbiAgfVxuXG4gIC8vIExvbmcgZm9ybVxuICAvLyBDb3VudCBvY3RldHMgcmVxdWlyZWQgdG8gc3RvcmUgbGVuZ3RoXG4gIHZhciBsZW5PY3RldHMgPSAxO1xuICBmb3IgKHZhciBpID0gY29udGVudC5sZW5ndGg7IGkgPj0gMHgxMDA7IGkgPj49IDgpXG4gICAgbGVuT2N0ZXRzKys7XG5cbiAgdmFyIGhlYWRlciA9IG5ldyBCdWZmZXIoMSArIDEgKyBsZW5PY3RldHMpO1xuICBoZWFkZXJbMF0gPSBlbmNvZGVkVGFnO1xuICBoZWFkZXJbMV0gPSAweDgwIHwgbGVuT2N0ZXRzO1xuXG4gIGZvciAodmFyIGkgPSAxICsgbGVuT2N0ZXRzLCBqID0gY29udGVudC5sZW5ndGg7IGogPiAwOyBpLS0sIGogPj49IDgpXG4gICAgaGVhZGVyW2ldID0gaiAmIDB4ZmY7XG5cbiAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWyBoZWFkZXIsIGNvbnRlbnQgXSk7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZW5jb2RlU3RyID0gZnVuY3Rpb24gZW5jb2RlU3RyKHN0ciwgdGFnKSB7XG4gIGlmICh0YWcgPT09ICdiaXRzdHInKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWyBzdHIudW51c2VkIHwgMCwgc3RyLmRhdGEgXSk7XG4gIH0gZWxzZSBpZiAodGFnID09PSAnYm1wc3RyJykge1xuICAgIHZhciBidWYgPSBuZXcgQnVmZmVyKHN0ci5sZW5ndGggKiAyKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgYnVmLndyaXRlVUludDE2QkUoc3RyLmNoYXJDb2RlQXQoaSksIGkgKiAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoYnVmKTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdudW1zdHInKSB7XG4gICAgaWYgKCF0aGlzLl9pc051bXN0cihzdHIpKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcignRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5IGRpZ2l0cyBhbmQgc3BhY2UnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoc3RyKTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdwcmludHN0cicpIHtcbiAgICBpZiAoIXRoaXMuX2lzUHJpbnRzdHIoc3RyKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ0VuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciBzdXBwb3J0cyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5IGxhdGluIHVwcGVyIGFuZCBsb3dlciBjYXNlIGxldHRlcnMsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RpZ2l0cywgc3BhY2UsIGFwb3N0cm9waGUsIGxlZnQgYW5kIHJpZ3RoICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcmVudGhlc2lzLCBwbHVzIHNpZ24sIGNvbW1hLCBoeXBoZW4sICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvdCwgc2xhc2gsIGNvbG9uLCBlcXVhbCBzaWduLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdxdWVzdGlvbiBtYXJrJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHN0cik7XG4gIH0gZWxzZSBpZiAoL3N0ciQvLnRlc3QodGFnKSkge1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHN0cik7XG4gIH0gZWxzZSBpZiAodGFnID09PSAnb2JqRGVzYycpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihzdHIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCdFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogJyArIHRhZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyB1bnN1cHBvcnRlZCcpO1xuICB9XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQgPSBmdW5jdGlvbiBlbmNvZGVPYmppZChpZCwgdmFsdWVzLCByZWxhdGl2ZSkge1xuICBpZiAodHlwZW9mIGlkID09PSAnc3RyaW5nJykge1xuICAgIGlmICghdmFsdWVzKVxuICAgICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ3N0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQnKTtcbiAgICBpZiAoIXZhbHVlcy5oYXNPd25Qcm9wZXJ0eShpZCkpXG4gICAgICByZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcignb2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAnKTtcbiAgICBpZCA9IHZhbHVlc1tpZF0uc3BsaXQoL1tcXHNcXC5dKy9nKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlkLmxlbmd0aDsgaSsrKVxuICAgICAgaWRbaV0gfD0gMDtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGlkKSkge1xuICAgIGlkID0gaWQuc2xpY2UoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlkLmxlbmd0aDsgaSsrKVxuICAgICAgaWRbaV0gfD0gMDtcbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShpZCkpIHtcbiAgICByZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcignb2JqaWQoKSBzaG91bGQgYmUgZWl0aGVyIGFycmF5IG9yIHN0cmluZywgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dvdDogJyArIEpTT04uc3RyaW5naWZ5KGlkKSk7XG4gIH1cblxuICBpZiAoIXJlbGF0aXZlKSB7XG4gICAgaWYgKGlkWzFdID49IDQwKVxuICAgICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ1NlY29uZCBvYmppZCBpZGVudGlmaWVyIE9PQicpO1xuICAgIGlkLnNwbGljZSgwLCAyLCBpZFswXSAqIDQwICsgaWRbMV0pO1xuICB9XG5cbiAgLy8gQ291bnQgbnVtYmVyIG9mIG9jdGV0c1xuICB2YXIgc2l6ZSA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaWQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaWRlbnQgPSBpZFtpXTtcbiAgICBmb3IgKHNpemUrKzsgaWRlbnQgPj0gMHg4MDsgaWRlbnQgPj49IDcpXG4gICAgICBzaXplKys7XG4gIH1cblxuICB2YXIgb2JqaWQgPSBuZXcgQnVmZmVyKHNpemUpO1xuICB2YXIgb2Zmc2V0ID0gb2JqaWQubGVuZ3RoIC0gMTtcbiAgZm9yICh2YXIgaSA9IGlkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGlkZW50ID0gaWRbaV07XG4gICAgb2JqaWRbb2Zmc2V0LS1dID0gaWRlbnQgJiAweDdmO1xuICAgIHdoaWxlICgoaWRlbnQgPj49IDcpID4gMClcbiAgICAgIG9iamlkW29mZnNldC0tXSA9IDB4ODAgfCAoaWRlbnQgJiAweDdmKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG9iamlkKTtcbn07XG5cbmZ1bmN0aW9uIHR3byhudW0pIHtcbiAgaWYgKG51bSA8IDEwKVxuICAgIHJldHVybiAnMCcgKyBudW07XG4gIGVsc2VcbiAgICByZXR1cm4gbnVtO1xufVxuXG5ERVJOb2RlLnByb3RvdHlwZS5fZW5jb2RlVGltZSA9IGZ1bmN0aW9uIGVuY29kZVRpbWUodGltZSwgdGFnKSB7XG4gIHZhciBzdHI7XG4gIHZhciBkYXRlID0gbmV3IERhdGUodGltZSk7XG5cbiAgaWYgKHRhZyA9PT0gJ2dlbnRpbWUnKSB7XG4gICAgc3RyID0gW1xuICAgICAgdHdvKGRhdGUuZ2V0RnVsbFllYXIoKSksXG4gICAgICB0d28oZGF0ZS5nZXRVVENNb250aCgpICsgMSksXG4gICAgICB0d28oZGF0ZS5nZXRVVENEYXRlKCkpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDSG91cnMoKSksXG4gICAgICB0d28oZGF0ZS5nZXRVVENNaW51dGVzKCkpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDU2Vjb25kcygpKSxcbiAgICAgICdaJ1xuICAgIF0uam9pbignJyk7XG4gIH0gZWxzZSBpZiAodGFnID09PSAndXRjdGltZScpIHtcbiAgICBzdHIgPSBbXG4gICAgICB0d28oZGF0ZS5nZXRGdWxsWWVhcigpICUgMTAwKSxcbiAgICAgIHR3byhkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSxcbiAgICAgIHR3byhkYXRlLmdldFVUQ0RhdGUoKSksXG4gICAgICB0d28oZGF0ZS5nZXRVVENIb3VycygpKSxcbiAgICAgIHR3byhkYXRlLmdldFVUQ01pbnV0ZXMoKSksXG4gICAgICB0d28oZGF0ZS5nZXRVVENTZWNvbmRzKCkpLFxuICAgICAgJ1onXG4gICAgXS5qb2luKCcnKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlcG9ydGVyLmVycm9yKCdFbmNvZGluZyAnICsgdGFnICsgJyB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Jyk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fZW5jb2RlU3RyKHN0ciwgJ29jdHN0cicpO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZU51bGwgPSBmdW5jdGlvbiBlbmNvZGVOdWxsKCkge1xuICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcignJyk7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZW5jb2RlSW50ID0gZnVuY3Rpb24gZW5jb2RlSW50KG51bSwgdmFsdWVzKSB7XG4gIGlmICh0eXBlb2YgbnVtID09PSAnc3RyaW5nJykge1xuICAgIGlmICghdmFsdWVzKVxuICAgICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ1N0cmluZyBpbnQgb3IgZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAnKTtcbiAgICBpZiAoIXZhbHVlcy5oYXNPd25Qcm9wZXJ0eShudW0pKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcignVmFsdWVzIG1hcCBkb2VzblxcJ3QgY29udGFpbjogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShudW0pKTtcbiAgICB9XG4gICAgbnVtID0gdmFsdWVzW251bV07XG4gIH1cblxuICAvLyBCaWdudW0sIGFzc3VtZSBiaWcgZW5kaWFuXG4gIGlmICh0eXBlb2YgbnVtICE9PSAnbnVtYmVyJyAmJiAhQnVmZmVyLmlzQnVmZmVyKG51bSkpIHtcbiAgICB2YXIgbnVtQXJyYXkgPSBudW0udG9BcnJheSgpO1xuICAgIGlmICghbnVtLnNpZ24gJiYgbnVtQXJyYXlbMF0gJiAweDgwKSB7XG4gICAgICBudW1BcnJheS51bnNoaWZ0KDApO1xuICAgIH1cbiAgICBudW0gPSBuZXcgQnVmZmVyKG51bUFycmF5KTtcbiAgfVxuXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIobnVtKSkge1xuICAgIHZhciBzaXplID0gbnVtLmxlbmd0aDtcbiAgICBpZiAobnVtLmxlbmd0aCA9PT0gMClcbiAgICAgIHNpemUrKztcblxuICAgIHZhciBvdXQgPSBuZXcgQnVmZmVyKHNpemUpO1xuICAgIG51bS5jb3B5KG91dCk7XG4gICAgaWYgKG51bS5sZW5ndGggPT09IDApXG4gICAgICBvdXRbMF0gPSAwXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIob3V0KTtcbiAgfVxuXG4gIGlmIChudW0gPCAweDgwKVxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG51bSk7XG5cbiAgaWYgKG51bSA8IDB4MTAwKVxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswLCBudW1dKTtcblxuICB2YXIgc2l6ZSA9IDE7XG4gIGZvciAodmFyIGkgPSBudW07IGkgPj0gMHgxMDA7IGkgPj49IDgpXG4gICAgc2l6ZSsrO1xuXG4gIHZhciBvdXQgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gIGZvciAodmFyIGkgPSBvdXQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBvdXRbaV0gPSBudW0gJiAweGZmO1xuICAgIG51bSA+Pj0gODtcbiAgfVxuICBpZihvdXRbMF0gJiAweDgwKSB7XG4gICAgb3V0LnVuc2hpZnQoMCk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihuZXcgQnVmZmVyKG91dCkpO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZUJvb2wgPSBmdW5jdGlvbiBlbmNvZGVCb29sKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHZhbHVlID8gMHhmZiA6IDApO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX3VzZSA9IGZ1bmN0aW9uIHVzZShlbnRpdHksIG9iaikge1xuICBpZiAodHlwZW9mIGVudGl0eSA9PT0gJ2Z1bmN0aW9uJylcbiAgICBlbnRpdHkgPSBlbnRpdHkob2JqKTtcbiAgcmV0dXJuIGVudGl0eS5fZ2V0RW5jb2RlcignZGVyJykudHJlZTtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9za2lwRGVmYXVsdCA9IGZ1bmN0aW9uIHNraXBEZWZhdWx0KGRhdGFCdWZmZXIsIHJlcG9ydGVyLCBwYXJlbnQpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuICB2YXIgaTtcbiAgaWYgKHN0YXRlWydkZWZhdWx0J10gPT09IG51bGwpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBkYXRhID0gZGF0YUJ1ZmZlci5qb2luKCk7XG4gIGlmIChzdGF0ZS5kZWZhdWx0QnVmZmVyID09PSB1bmRlZmluZWQpXG4gICAgc3RhdGUuZGVmYXVsdEJ1ZmZlciA9IHRoaXMuX2VuY29kZVZhbHVlKHN0YXRlWydkZWZhdWx0J10sIHJlcG9ydGVyLCBwYXJlbnQpLmpvaW4oKTtcblxuICBpZiAoZGF0YS5sZW5ndGggIT09IHN0YXRlLmRlZmF1bHRCdWZmZXIubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBmb3IgKGk9MDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspXG4gICAgaWYgKGRhdGFbaV0gIT09IHN0YXRlLmRlZmF1bHRCdWZmZXJbaV0pXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vLyBVdGlsaXR5IG1ldGhvZHNcblxuZnVuY3Rpb24gZW5jb2RlVGFnKHRhZywgcHJpbWl0aXZlLCBjbHMsIHJlcG9ydGVyKSB7XG4gIHZhciByZXM7XG5cbiAgaWYgKHRhZyA9PT0gJ3NlcW9mJylcbiAgICB0YWcgPSAnc2VxJztcbiAgZWxzZSBpZiAodGFnID09PSAnc2V0b2YnKVxuICAgIHRhZyA9ICdzZXQnO1xuXG4gIGlmIChkZXIudGFnQnlOYW1lLmhhc093blByb3BlcnR5KHRhZykpXG4gICAgcmVzID0gZGVyLnRhZ0J5TmFtZVt0YWddO1xuICBlbHNlIGlmICh0eXBlb2YgdGFnID09PSAnbnVtYmVyJyAmJiAodGFnIHwgMCkgPT09IHRhZylcbiAgICByZXMgPSB0YWc7XG4gIGVsc2VcbiAgICByZXR1cm4gcmVwb3J0ZXIuZXJyb3IoJ1Vua25vd24gdGFnOiAnICsgdGFnKTtcblxuICBpZiAocmVzID49IDB4MWYpXG4gICAgcmV0dXJuIHJlcG9ydGVyLmVycm9yKCdNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQnKTtcblxuICBpZiAoIXByaW1pdGl2ZSlcbiAgICByZXMgfD0gMHgyMDtcblxuICByZXMgfD0gKGRlci50YWdDbGFzc0J5TmFtZVtjbHMgfHwgJ3VuaXZlcnNhbCddIDw8IDYpO1xuXG4gIHJldHVybiByZXM7XG59XG4iLCJ2YXIgZW5jb2RlcnMgPSBleHBvcnRzO1xuXG5lbmNvZGVycy5kZXIgPSByZXF1aXJlKCcuL2RlcicpO1xuZW5jb2RlcnMucGVtID0gcmVxdWlyZSgnLi9wZW0nKTtcbiIsInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbnZhciBERVJFbmNvZGVyID0gcmVxdWlyZSgnLi9kZXInKTtcblxuZnVuY3Rpb24gUEVNRW5jb2RlcihlbnRpdHkpIHtcbiAgREVSRW5jb2Rlci5jYWxsKHRoaXMsIGVudGl0eSk7XG4gIHRoaXMuZW5jID0gJ3BlbSc7XG59O1xuaW5oZXJpdHMoUEVNRW5jb2RlciwgREVSRW5jb2Rlcik7XG5tb2R1bGUuZXhwb3J0cyA9IFBFTUVuY29kZXI7XG5cblBFTUVuY29kZXIucHJvdG90eXBlLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShkYXRhLCBvcHRpb25zKSB7XG4gIHZhciBidWYgPSBERVJFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0aGlzLCBkYXRhKTtcblxuICB2YXIgcCA9IGJ1Zi50b1N0cmluZygnYmFzZTY0Jyk7XG4gIHZhciBvdXQgPSBbICctLS0tLUJFR0lOICcgKyBvcHRpb25zLmxhYmVsICsgJy0tLS0tJyBdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHAubGVuZ3RoOyBpICs9IDY0KVxuICAgIG91dC5wdXNoKHAuc2xpY2UoaSwgaSArIDY0KSk7XG4gIG91dC5wdXNoKCctLS0tLUVORCAnICsgb3B0aW9ucy5sYWJlbCArICctLS0tLScpO1xuICByZXR1cm4gb3V0LmpvaW4oJ1xcbicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gY29tcGFyZSBhbmQgaXNCdWZmZXIgdGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9ibG9iLzY4MGU5ZTVlNDg4ZjIyYWFjMjc1OTlhNTdkYzg0NGE2MzE1OTI4ZGQvaW5kZXguanNcbi8vIG9yaWdpbmFsIG5vdGljZTpcblxuLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICB2YXIgeCA9IGEubGVuZ3RoO1xuICB2YXIgeSA9IGIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldO1xuICAgICAgeSA9IGJbaV07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgaWYgKHkgPCB4KSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5mdW5jdGlvbiBpc0J1ZmZlcihiKSB7XG4gIGlmIChnbG9iYWwuQnVmZmVyICYmIHR5cGVvZiBnbG9iYWwuQnVmZmVyLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGdsb2JhbC5CdWZmZXIuaXNCdWZmZXIoYik7XG4gIH1cbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcik7XG59XG5cbi8vIGJhc2VkIG9uIG5vZGUgYXNzZXJ0LCBvcmlnaW5hbCBub3RpY2U6XG5cbi8vIGh0dHA6Ly93aWtpLmNvbW1vbmpzLm9yZy93aWtpL1VuaXRfVGVzdGluZy8xLjBcbi8vXG4vLyBUSElTIElTIE5PVCBURVNURUQgTk9SIExJS0VMWSBUTyBXT1JLIE9VVFNJREUgVjghXG4vL1xuLy8gT3JpZ2luYWxseSBmcm9tIG5hcndoYWwuanMgKGh0dHA6Ly9uYXJ3aGFsanMub3JnKVxuLy8gQ29weXJpZ2h0IChjKSAyMDA5IFRob21hcyBSb2JpbnNvbiA8Mjgwbm9ydGguY29tPlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICdTb2Z0d2FyZScpLCB0b1xuLy8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU5cbi8vIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT05cbi8vIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwvJyk7XG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwU2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgZnVuY3Rpb25zSGF2ZU5hbWVzID0gKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbygpIHt9Lm5hbWUgPT09ICdmb28nO1xufSgpKTtcbmZ1bmN0aW9uIHBUb1N0cmluZyAob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKTtcbn1cbmZ1bmN0aW9uIGlzVmlldyhhcnJidWYpIHtcbiAgaWYgKGlzQnVmZmVyKGFycmJ1ZikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHR5cGVvZiBnbG9iYWwuQXJyYXlCdWZmZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGFycmJ1Zik7XG4gIH1cbiAgaWYgKCFhcnJidWYpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGFycmJ1ZiBpbnN0YW5jZW9mIERhdGFWaWV3KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGFycmJ1Zi5idWZmZXIgJiYgYXJyYnVmLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuLy8gMS4gVGhlIGFzc2VydCBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIHRoYXQgdGhyb3dcbi8vIEFzc2VydGlvbkVycm9yJ3Mgd2hlbiBwYXJ0aWN1bGFyIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXQuIFRoZVxuLy8gYXNzZXJ0IG1vZHVsZSBtdXN0IGNvbmZvcm0gdG8gdGhlIGZvbGxvd2luZyBpbnRlcmZhY2UuXG5cbnZhciBhc3NlcnQgPSBtb2R1bGUuZXhwb3J0cyA9IG9rO1xuXG4vLyAyLiBUaGUgQXNzZXJ0aW9uRXJyb3IgaXMgZGVmaW5lZCBpbiBhc3NlcnQuXG4vLyBuZXcgYXNzZXJ0LkFzc2VydGlvbkVycm9yKHsgbWVzc2FnZTogbWVzc2FnZSxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbCxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWQgfSlcblxudmFyIHJlZ2V4ID0gL1xccypmdW5jdGlvblxccysoW15cXChcXHNdKilcXHMqLztcbi8vIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvZnVuY3Rpb24ucHJvdG90eXBlLm5hbWUvYmxvYi9hZGVlZWVjOGJmY2M2MDY4YjE4N2Q3ZDlmYjNkNWJiMWQzYTMwODk5L2ltcGxlbWVudGF0aW9uLmpzXG5mdW5jdGlvbiBnZXROYW1lKGZ1bmMpIHtcbiAgaWYgKCF1dGlsLmlzRnVuY3Rpb24oZnVuYykpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGZ1bmN0aW9uc0hhdmVOYW1lcykge1xuICAgIHJldHVybiBmdW5jLm5hbWU7XG4gIH1cbiAgdmFyIHN0ciA9IGZ1bmMudG9TdHJpbmcoKTtcbiAgdmFyIG1hdGNoID0gc3RyLm1hdGNoKHJlZ2V4KTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdO1xufVxuYXNzZXJ0LkFzc2VydGlvbkVycm9yID0gZnVuY3Rpb24gQXNzZXJ0aW9uRXJyb3Iob3B0aW9ucykge1xuICB0aGlzLm5hbWUgPSAnQXNzZXJ0aW9uRXJyb3InO1xuICB0aGlzLmFjdHVhbCA9IG9wdGlvbnMuYWN0dWFsO1xuICB0aGlzLmV4cGVjdGVkID0gb3B0aW9ucy5leHBlY3RlZDtcbiAgdGhpcy5vcGVyYXRvciA9IG9wdGlvbnMub3BlcmF0b3I7XG4gIGlmIChvcHRpb25zLm1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBvcHRpb25zLm1lc3NhZ2U7XG4gICAgdGhpcy5nZW5lcmF0ZWRNZXNzYWdlID0gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5tZXNzYWdlID0gZ2V0TWVzc2FnZSh0aGlzKTtcbiAgICB0aGlzLmdlbmVyYXRlZE1lc3NhZ2UgPSB0cnVlO1xuICB9XG4gIHZhciBzdGFja1N0YXJ0RnVuY3Rpb24gPSBvcHRpb25zLnN0YWNrU3RhcnRGdW5jdGlvbiB8fCBmYWlsO1xuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBzdGFja1N0YXJ0RnVuY3Rpb24pO1xuICB9IGVsc2Uge1xuICAgIC8vIG5vbiB2OCBicm93c2VycyBzbyB3ZSBjYW4gaGF2ZSBhIHN0YWNrdHJhY2VcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCk7XG4gICAgaWYgKGVyci5zdGFjaykge1xuICAgICAgdmFyIG91dCA9IGVyci5zdGFjaztcblxuICAgICAgLy8gdHJ5IHRvIHN0cmlwIHVzZWxlc3MgZnJhbWVzXG4gICAgICB2YXIgZm5fbmFtZSA9IGdldE5hbWUoc3RhY2tTdGFydEZ1bmN0aW9uKTtcbiAgICAgIHZhciBpZHggPSBvdXQuaW5kZXhPZignXFxuJyArIGZuX25hbWUpO1xuICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIC8vIG9uY2Ugd2UgaGF2ZSBsb2NhdGVkIHRoZSBmdW5jdGlvbiBmcmFtZVxuICAgICAgICAvLyB3ZSBuZWVkIHRvIHN0cmlwIG91dCBldmVyeXRoaW5nIGJlZm9yZSBpdCAoYW5kIGl0cyBsaW5lKVxuICAgICAgICB2YXIgbmV4dF9saW5lID0gb3V0LmluZGV4T2YoJ1xcbicsIGlkeCArIDEpO1xuICAgICAgICBvdXQgPSBvdXQuc3Vic3RyaW5nKG5leHRfbGluZSArIDEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN0YWNrID0gb3V0O1xuICAgIH1cbiAgfVxufTtcblxuLy8gYXNzZXJ0LkFzc2VydGlvbkVycm9yIGluc3RhbmNlb2YgRXJyb3JcbnV0aWwuaW5oZXJpdHMoYXNzZXJ0LkFzc2VydGlvbkVycm9yLCBFcnJvcik7XG5cbmZ1bmN0aW9uIHRydW5jYXRlKHMsIG4pIHtcbiAgaWYgKHR5cGVvZiBzID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBzLmxlbmd0aCA8IG4gPyBzIDogcy5zbGljZSgwLCBuKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcztcbiAgfVxufVxuZnVuY3Rpb24gaW5zcGVjdChzb21ldGhpbmcpIHtcbiAgaWYgKGZ1bmN0aW9uc0hhdmVOYW1lcyB8fCAhdXRpbC5pc0Z1bmN0aW9uKHNvbWV0aGluZykpIHtcbiAgICByZXR1cm4gdXRpbC5pbnNwZWN0KHNvbWV0aGluZyk7XG4gIH1cbiAgdmFyIHJhd25hbWUgPSBnZXROYW1lKHNvbWV0aGluZyk7XG4gIHZhciBuYW1lID0gcmF3bmFtZSA/ICc6ICcgKyByYXduYW1lIDogJyc7XG4gIHJldHVybiAnW0Z1bmN0aW9uJyArICBuYW1lICsgJ10nO1xufVxuZnVuY3Rpb24gZ2V0TWVzc2FnZShzZWxmKSB7XG4gIHJldHVybiB0cnVuY2F0ZShpbnNwZWN0KHNlbGYuYWN0dWFsKSwgMTI4KSArICcgJyArXG4gICAgICAgICBzZWxmLm9wZXJhdG9yICsgJyAnICtcbiAgICAgICAgIHRydW5jYXRlKGluc3BlY3Qoc2VsZi5leHBlY3RlZCksIDEyOCk7XG59XG5cbi8vIEF0IHByZXNlbnQgb25seSB0aGUgdGhyZWUga2V5cyBtZW50aW9uZWQgYWJvdmUgYXJlIHVzZWQgYW5kXG4vLyB1bmRlcnN0b29kIGJ5IHRoZSBzcGVjLiBJbXBsZW1lbnRhdGlvbnMgb3Igc3ViIG1vZHVsZXMgY2FuIHBhc3Ncbi8vIG90aGVyIGtleXMgdG8gdGhlIEFzc2VydGlvbkVycm9yJ3MgY29uc3RydWN0b3IgLSB0aGV5IHdpbGwgYmVcbi8vIGlnbm9yZWQuXG5cbi8vIDMuIEFsbCBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBtdXN0IHRocm93IGFuIEFzc2VydGlvbkVycm9yXG4vLyB3aGVuIGEgY29ycmVzcG9uZGluZyBjb25kaXRpb24gaXMgbm90IG1ldCwgd2l0aCBhIG1lc3NhZ2UgdGhhdFxuLy8gbWF5IGJlIHVuZGVmaW5lZCBpZiBub3QgcHJvdmlkZWQuICBBbGwgYXNzZXJ0aW9uIG1ldGhvZHMgcHJvdmlkZVxuLy8gYm90aCB0aGUgYWN0dWFsIGFuZCBleHBlY3RlZCB2YWx1ZXMgdG8gdGhlIGFzc2VydGlvbiBlcnJvciBmb3Jcbi8vIGRpc3BsYXkgcHVycG9zZXMuXG5cbmZ1bmN0aW9uIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgb3BlcmF0b3IsIHN0YWNrU3RhcnRGdW5jdGlvbikge1xuICB0aHJvdyBuZXcgYXNzZXJ0LkFzc2VydGlvbkVycm9yKHtcbiAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgIGFjdHVhbDogYWN0dWFsLFxuICAgIGV4cGVjdGVkOiBleHBlY3RlZCxcbiAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgc3RhY2tTdGFydEZ1bmN0aW9uOiBzdGFja1N0YXJ0RnVuY3Rpb25cbiAgfSk7XG59XG5cbi8vIEVYVEVOU0lPTiEgYWxsb3dzIGZvciB3ZWxsIGJlaGF2ZWQgZXJyb3JzIGRlZmluZWQgZWxzZXdoZXJlLlxuYXNzZXJ0LmZhaWwgPSBmYWlsO1xuXG4vLyA0LiBQdXJlIGFzc2VydGlvbiB0ZXN0cyB3aGV0aGVyIGEgdmFsdWUgaXMgdHJ1dGh5LCBhcyBkZXRlcm1pbmVkXG4vLyBieSAhIWd1YXJkLlxuLy8gYXNzZXJ0Lm9rKGd1YXJkLCBtZXNzYWdlX29wdCk7XG4vLyBUaGlzIHN0YXRlbWVudCBpcyBlcXVpdmFsZW50IHRvIGFzc2VydC5lcXVhbCh0cnVlLCAhIWd1YXJkLFxuLy8gbWVzc2FnZV9vcHQpOy4gVG8gdGVzdCBzdHJpY3RseSBmb3IgdGhlIHZhbHVlIHRydWUsIHVzZVxuLy8gYXNzZXJ0LnN0cmljdEVxdWFsKHRydWUsIGd1YXJkLCBtZXNzYWdlX29wdCk7LlxuXG5mdW5jdGlvbiBvayh2YWx1ZSwgbWVzc2FnZSkge1xuICBpZiAoIXZhbHVlKSBmYWlsKHZhbHVlLCB0cnVlLCBtZXNzYWdlLCAnPT0nLCBhc3NlcnQub2spO1xufVxuYXNzZXJ0Lm9rID0gb2s7XG5cbi8vIDUuIFRoZSBlcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgc2hhbGxvdywgY29lcmNpdmUgZXF1YWxpdHkgd2l0aFxuLy8gPT0uXG4vLyBhc3NlcnQuZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBlcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgIT0gZXhwZWN0ZWQpIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJz09JywgYXNzZXJ0LmVxdWFsKTtcbn07XG5cbi8vIDYuIFRoZSBub24tZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIGZvciB3aGV0aGVyIHR3byBvYmplY3RzIGFyZSBub3QgZXF1YWxcbi8vIHdpdGggIT0gYXNzZXJ0Lm5vdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdEVxdWFsID0gZnVuY3Rpb24gbm90RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsID09IGV4cGVjdGVkKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnIT0nLCBhc3NlcnQubm90RXF1YWwpO1xuICB9XG59O1xuXG4vLyA3LiBUaGUgZXF1aXZhbGVuY2UgYXNzZXJ0aW9uIHRlc3RzIGEgZGVlcCBlcXVhbGl0eSByZWxhdGlvbi5cbi8vIGFzc2VydC5kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQuZGVlcEVxdWFsID0gZnVuY3Rpb24gZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKCFfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIGZhbHNlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ2RlZXBFcXVhbCcsIGFzc2VydC5kZWVwRXF1YWwpO1xuICB9XG59O1xuXG5hc3NlcnQuZGVlcFN0cmljdEVxdWFsID0gZnVuY3Rpb24gZGVlcFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKCFfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIHRydWUpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnZGVlcFN0cmljdEVxdWFsJywgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIF9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgc3RyaWN0LCBtZW1vcykge1xuICAvLyA3LjEuIEFsbCBpZGVudGljYWwgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBhcyBkZXRlcm1pbmVkIGJ5ID09PS5cbiAgaWYgKGFjdHVhbCA9PT0gZXhwZWN0ZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc0J1ZmZlcihhY3R1YWwpICYmIGlzQnVmZmVyKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBjb21wYXJlKGFjdHVhbCwgZXhwZWN0ZWQpID09PSAwO1xuXG4gIC8vIDcuMi4gSWYgdGhlIGV4cGVjdGVkIHZhbHVlIGlzIGEgRGF0ZSBvYmplY3QsIHRoZSBhY3R1YWwgdmFsdWUgaXNcbiAgLy8gZXF1aXZhbGVudCBpZiBpdCBpcyBhbHNvIGEgRGF0ZSBvYmplY3QgdGhhdCByZWZlcnMgdG8gdGhlIHNhbWUgdGltZS5cbiAgfSBlbHNlIGlmICh1dGlsLmlzRGF0ZShhY3R1YWwpICYmIHV0aWwuaXNEYXRlKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwuZ2V0VGltZSgpID09PSBleHBlY3RlZC5nZXRUaW1lKCk7XG5cbiAgLy8gNy4zIElmIHRoZSBleHBlY3RlZCB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIHRoZSBhY3R1YWwgdmFsdWUgaXNcbiAgLy8gZXF1aXZhbGVudCBpZiBpdCBpcyBhbHNvIGEgUmVnRXhwIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNvdXJjZSBhbmRcbiAgLy8gcHJvcGVydGllcyAoYGdsb2JhbGAsIGBtdWx0aWxpbmVgLCBgbGFzdEluZGV4YCwgYGlnbm9yZUNhc2VgKS5cbiAgfSBlbHNlIGlmICh1dGlsLmlzUmVnRXhwKGFjdHVhbCkgJiYgdXRpbC5pc1JlZ0V4cChleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gYWN0dWFsLnNvdXJjZSA9PT0gZXhwZWN0ZWQuc291cmNlICYmXG4gICAgICAgICAgIGFjdHVhbC5nbG9iYWwgPT09IGV4cGVjdGVkLmdsb2JhbCAmJlxuICAgICAgICAgICBhY3R1YWwubXVsdGlsaW5lID09PSBleHBlY3RlZC5tdWx0aWxpbmUgJiZcbiAgICAgICAgICAgYWN0dWFsLmxhc3RJbmRleCA9PT0gZXhwZWN0ZWQubGFzdEluZGV4ICYmXG4gICAgICAgICAgIGFjdHVhbC5pZ25vcmVDYXNlID09PSBleHBlY3RlZC5pZ25vcmVDYXNlO1xuXG4gIC8vIDcuNC4gT3RoZXIgcGFpcnMgdGhhdCBkbyBub3QgYm90aCBwYXNzIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JyxcbiAgLy8gZXF1aXZhbGVuY2UgaXMgZGV0ZXJtaW5lZCBieSA9PS5cbiAgfSBlbHNlIGlmICgoYWN0dWFsID09PSBudWxsIHx8IHR5cGVvZiBhY3R1YWwgIT09ICdvYmplY3QnKSAmJlxuICAgICAgICAgICAgIChleHBlY3RlZCA9PT0gbnVsbCB8fCB0eXBlb2YgZXhwZWN0ZWQgIT09ICdvYmplY3QnKSkge1xuICAgIHJldHVybiBzdHJpY3QgPyBhY3R1YWwgPT09IGV4cGVjdGVkIDogYWN0dWFsID09IGV4cGVjdGVkO1xuXG4gIC8vIElmIGJvdGggdmFsdWVzIGFyZSBpbnN0YW5jZXMgb2YgdHlwZWQgYXJyYXlzLCB3cmFwIHRoZWlyIHVuZGVybHlpbmdcbiAgLy8gQXJyYXlCdWZmZXJzIGluIGEgQnVmZmVyIGVhY2ggdG8gaW5jcmVhc2UgcGVyZm9ybWFuY2VcbiAgLy8gVGhpcyBvcHRpbWl6YXRpb24gcmVxdWlyZXMgdGhlIGFycmF5cyB0byBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgY2hlY2tlZCBieVxuICAvLyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIChha2EgcFRvU3RyaW5nKS4gTmV2ZXIgcGVyZm9ybSBiaW5hcnlcbiAgLy8gY29tcGFyaXNvbnMgZm9yIEZsb2F0KkFycmF5cywgdGhvdWdoLCBzaW5jZSBlLmcuICswID09PSAtMCBidXQgdGhlaXJcbiAgLy8gYml0IHBhdHRlcm5zIGFyZSBub3QgaWRlbnRpY2FsLlxuICB9IGVsc2UgaWYgKGlzVmlldyhhY3R1YWwpICYmIGlzVmlldyhleHBlY3RlZCkgJiZcbiAgICAgICAgICAgICBwVG9TdHJpbmcoYWN0dWFsKSA9PT0gcFRvU3RyaW5nKGV4cGVjdGVkKSAmJlxuICAgICAgICAgICAgICEoYWN0dWFsIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5IHx8XG4gICAgICAgICAgICAgICBhY3R1YWwgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpKSB7XG4gICAgcmV0dXJuIGNvbXBhcmUobmV3IFVpbnQ4QXJyYXkoYWN0dWFsLmJ1ZmZlciksXG4gICAgICAgICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoZXhwZWN0ZWQuYnVmZmVyKSkgPT09IDA7XG5cbiAgLy8gNy41IEZvciBhbGwgb3RoZXIgT2JqZWN0IHBhaXJzLCBpbmNsdWRpbmcgQXJyYXkgb2JqZWN0cywgZXF1aXZhbGVuY2UgaXNcbiAgLy8gZGV0ZXJtaW5lZCBieSBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGFzIHZlcmlmaWVkXG4gIC8vIHdpdGggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKSwgdGhlIHNhbWUgc2V0IG9mIGtleXNcbiAgLy8gKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksIGVxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeVxuICAvLyBjb3JyZXNwb25kaW5nIGtleSwgYW5kIGFuIGlkZW50aWNhbCAncHJvdG90eXBlJyBwcm9wZXJ0eS4gTm90ZTogdGhpc1xuICAvLyBhY2NvdW50cyBmb3IgYm90aCBuYW1lZCBhbmQgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uIEFycmF5cy5cbiAgfSBlbHNlIGlmIChpc0J1ZmZlcihhY3R1YWwpICE9PSBpc0J1ZmZlcihleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgbWVtb3MgPSBtZW1vcyB8fCB7YWN0dWFsOiBbXSwgZXhwZWN0ZWQ6IFtdfTtcblxuICAgIHZhciBhY3R1YWxJbmRleCA9IG1lbW9zLmFjdHVhbC5pbmRleE9mKGFjdHVhbCk7XG4gICAgaWYgKGFjdHVhbEluZGV4ICE9PSAtMSkge1xuICAgICAgaWYgKGFjdHVhbEluZGV4ID09PSBtZW1vcy5leHBlY3RlZC5pbmRleE9mKGV4cGVjdGVkKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtZW1vcy5hY3R1YWwucHVzaChhY3R1YWwpO1xuICAgIG1lbW9zLmV4cGVjdGVkLnB1c2goZXhwZWN0ZWQpO1xuXG4gICAgcmV0dXJuIG9iakVxdWl2KGFjdHVhbCwgZXhwZWN0ZWQsIHN0cmljdCwgbWVtb3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQXJndW1lbnRzKG9iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG59XG5cbmZ1bmN0aW9uIG9iakVxdWl2KGEsIGIsIHN0cmljdCwgYWN0dWFsVmlzaXRlZE9iamVjdHMpIHtcbiAgaWYgKGEgPT09IG51bGwgfHwgYSA9PT0gdW5kZWZpbmVkIHx8IGIgPT09IG51bGwgfHwgYiA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy8gaWYgb25lIGlzIGEgcHJpbWl0aXZlLCB0aGUgb3RoZXIgbXVzdCBiZSBzYW1lXG4gIGlmICh1dGlsLmlzUHJpbWl0aXZlKGEpIHx8IHV0aWwuaXNQcmltaXRpdmUoYikpXG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIGlmIChzdHJpY3QgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGEpICE9PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYikpXG4gICAgcmV0dXJuIGZhbHNlO1xuICB2YXIgYUlzQXJncyA9IGlzQXJndW1lbnRzKGEpO1xuICB2YXIgYklzQXJncyA9IGlzQXJndW1lbnRzKGIpO1xuICBpZiAoKGFJc0FyZ3MgJiYgIWJJc0FyZ3MpIHx8ICghYUlzQXJncyAmJiBiSXNBcmdzKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmIChhSXNBcmdzKSB7XG4gICAgYSA9IHBTbGljZS5jYWxsKGEpO1xuICAgIGIgPSBwU2xpY2UuY2FsbChiKTtcbiAgICByZXR1cm4gX2RlZXBFcXVhbChhLCBiLCBzdHJpY3QpO1xuICB9XG4gIHZhciBrYSA9IG9iamVjdEtleXMoYSk7XG4gIHZhciBrYiA9IG9iamVjdEtleXMoYik7XG4gIHZhciBrZXksIGk7XG4gIC8vIGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoa2V5cyBpbmNvcnBvcmF0ZXNcbiAgLy8gaGFzT3duUHJvcGVydHkpXG4gIGlmIChrYS5sZW5ndGggIT09IGtiLmxlbmd0aClcbiAgICByZXR1cm4gZmFsc2U7XG4gIC8vdGhlIHNhbWUgc2V0IG9mIGtleXMgKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksXG4gIGthLnNvcnQoKTtcbiAga2Iuc29ydCgpO1xuICAvL35+fmNoZWFwIGtleSB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGthW2ldICE9PSBrYltpXSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvL2VxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeSBjb3JyZXNwb25kaW5nIGtleSwgYW5kXG4gIC8vfn5+cG9zc2libHkgZXhwZW5zaXZlIGRlZXAgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGtleSA9IGthW2ldO1xuICAgIGlmICghX2RlZXBFcXVhbChhW2tleV0sIGJba2V5XSwgc3RyaWN0LCBhY3R1YWxWaXNpdGVkT2JqZWN0cykpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8vIDguIFRoZSBub24tZXF1aXZhbGVuY2UgYXNzZXJ0aW9uIHRlc3RzIGZvciBhbnkgZGVlcCBpbmVxdWFsaXR5LlxuLy8gYXNzZXJ0Lm5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5ub3REZWVwRXF1YWwgPSBmdW5jdGlvbiBub3REZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBmYWxzZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdub3REZWVwRXF1YWwnLCBhc3NlcnQubm90RGVlcEVxdWFsKTtcbiAgfVxufTtcblxuYXNzZXJ0Lm5vdERlZXBTdHJpY3RFcXVhbCA9IG5vdERlZXBTdHJpY3RFcXVhbDtcbmZ1bmN0aW9uIG5vdERlZXBTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIHRydWUpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnbm90RGVlcFN0cmljdEVxdWFsJywgbm90RGVlcFN0cmljdEVxdWFsKTtcbiAgfVxufVxuXG5cbi8vIDkuIFRoZSBzdHJpY3QgZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIHN0cmljdCBlcXVhbGl0eSwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4vLyBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQuc3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBzdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnPT09JywgYXNzZXJ0LnN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuLy8gMTAuIFRoZSBzdHJpY3Qgbm9uLWVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBmb3Igc3RyaWN0IGluZXF1YWxpdHksIGFzXG4vLyBkZXRlcm1pbmVkIGJ5ICE9PS4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5ub3RTdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIG5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCA9PT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICchPT0nLCBhc3NlcnQubm90U3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSB7XG4gIGlmICghYWN0dWFsIHx8ICFleHBlY3RlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZXhwZWN0ZWQpID09ICdbb2JqZWN0IFJlZ0V4cF0nKSB7XG4gICAgcmV0dXJuIGV4cGVjdGVkLnRlc3QoYWN0dWFsKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGFjdHVhbCBpbnN0YW5jZW9mIGV4cGVjdGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBJZ25vcmUuICBUaGUgaW5zdGFuY2VvZiBjaGVjayBkb2Vzbid0IHdvcmsgZm9yIGFycm93IGZ1bmN0aW9ucy5cbiAgfVxuXG4gIGlmIChFcnJvci5pc1Byb3RvdHlwZU9mKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBleHBlY3RlZC5jYWxsKHt9LCBhY3R1YWwpID09PSB0cnVlO1xufVxuXG5mdW5jdGlvbiBfdHJ5QmxvY2soYmxvY2spIHtcbiAgdmFyIGVycm9yO1xuICB0cnkge1xuICAgIGJsb2NrKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvciA9IGU7XG4gIH1cbiAgcmV0dXJuIGVycm9yO1xufVxuXG5mdW5jdGlvbiBfdGhyb3dzKHNob3VsZFRocm93LCBibG9jaywgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGFjdHVhbDtcblxuICBpZiAodHlwZW9mIGJsb2NrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJibG9ja1wiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBleHBlY3RlZCA9PT0gJ3N0cmluZycpIHtcbiAgICBtZXNzYWdlID0gZXhwZWN0ZWQ7XG4gICAgZXhwZWN0ZWQgPSBudWxsO1xuICB9XG5cbiAgYWN0dWFsID0gX3RyeUJsb2NrKGJsb2NrKTtcblxuICBtZXNzYWdlID0gKGV4cGVjdGVkICYmIGV4cGVjdGVkLm5hbWUgPyAnICgnICsgZXhwZWN0ZWQubmFtZSArICcpLicgOiAnLicpICtcbiAgICAgICAgICAgIChtZXNzYWdlID8gJyAnICsgbWVzc2FnZSA6ICcuJyk7XG5cbiAgaWYgKHNob3VsZFRocm93ICYmICFhY3R1YWwpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsICdNaXNzaW5nIGV4cGVjdGVkIGV4Y2VwdGlvbicgKyBtZXNzYWdlKTtcbiAgfVxuXG4gIHZhciB1c2VyUHJvdmlkZWRNZXNzYWdlID0gdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnO1xuICB2YXIgaXNVbndhbnRlZEV4Y2VwdGlvbiA9ICFzaG91bGRUaHJvdyAmJiB1dGlsLmlzRXJyb3IoYWN0dWFsKTtcbiAgdmFyIGlzVW5leHBlY3RlZEV4Y2VwdGlvbiA9ICFzaG91bGRUaHJvdyAmJiBhY3R1YWwgJiYgIWV4cGVjdGVkO1xuXG4gIGlmICgoaXNVbndhbnRlZEV4Y2VwdGlvbiAmJlxuICAgICAgdXNlclByb3ZpZGVkTWVzc2FnZSAmJlxuICAgICAgZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCkpIHx8XG4gICAgICBpc1VuZXhwZWN0ZWRFeGNlcHRpb24pIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsICdHb3QgdW53YW50ZWQgZXhjZXB0aW9uJyArIG1lc3NhZ2UpO1xuICB9XG5cbiAgaWYgKChzaG91bGRUaHJvdyAmJiBhY3R1YWwgJiYgZXhwZWN0ZWQgJiZcbiAgICAgICFleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSkgfHwgKCFzaG91bGRUaHJvdyAmJiBhY3R1YWwpKSB7XG4gICAgdGhyb3cgYWN0dWFsO1xuICB9XG59XG5cbi8vIDExLiBFeHBlY3RlZCB0byB0aHJvdyBhbiBlcnJvcjpcbi8vIGFzc2VydC50aHJvd3MoYmxvY2ssIEVycm9yX29wdCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQudGhyb3dzID0gZnVuY3Rpb24oYmxvY2ssIC8qb3B0aW9uYWwqL2Vycm9yLCAvKm9wdGlvbmFsKi9tZXNzYWdlKSB7XG4gIF90aHJvd3ModHJ1ZSwgYmxvY2ssIGVycm9yLCBtZXNzYWdlKTtcbn07XG5cbi8vIEVYVEVOU0lPTiEgVGhpcyBpcyBhbm5veWluZyB0byB3cml0ZSBvdXRzaWRlIHRoaXMgbW9kdWxlLlxuYXNzZXJ0LmRvZXNOb3RUaHJvdyA9IGZ1bmN0aW9uKGJsb2NrLCAvKm9wdGlvbmFsKi9lcnJvciwgLypvcHRpb25hbCovbWVzc2FnZSkge1xuICBfdGhyb3dzKGZhbHNlLCBibG9jaywgZXJyb3IsIG1lc3NhZ2UpO1xufTtcblxuYXNzZXJ0LmlmRXJyb3IgPSBmdW5jdGlvbihlcnIpIHsgaWYgKGVycikgdGhyb3cgZXJyOyB9O1xuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChoYXNPd24uY2FsbChvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBrZXlzO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9hcnJheS9mcm9tXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL2pzb24vc3RyaW5naWZ5XCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9hc3NpZ25cIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2NyZWF0ZVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2dldC1wcm90b3R5cGUtb2ZcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXNcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L3NldC1wcm90b3R5cGUtb2ZcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vcHJvbWlzZVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9zZXRcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pdGVyYXRvclwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7XG5cbnZhciBfZGVmaW5lUHJvcGVydHkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVmaW5lUHJvcGVydHkpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7XG5cbnZhciBfZGVmaW5lUHJvcGVydHkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVmaW5lUHJvcGVydHkpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9nZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mXCIpO1xuXG52YXIgX2dldFByb3RvdHlwZU9mMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dldFByb3RvdHlwZU9mKTtcblxudmFyIF9nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpO1xuXG52YXIgX2dldE93blByb3BlcnR5RGVzY3JpcHRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuICB2YXIgZGVzYyA9ICgwLCBfZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yMi5kZWZhdWx0KShvYmplY3QsIHByb3BlcnR5KTtcblxuICBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHBhcmVudCA9ICgwLCBfZ2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKG9iamVjdCk7XG5cbiAgICBpZiAocGFyZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ2V0KHBhcmVudCwgcHJvcGVydHksIHJlY2VpdmVyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoXCJ2YWx1ZVwiIGluIGRlc2MpIHtcbiAgICByZXR1cm4gZGVzYy52YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7XG5cbiAgICBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9zZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mXCIpO1xuXG52YXIgX3NldFByb3RvdHlwZU9mMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3NldFByb3RvdHlwZU9mKTtcblxudmFyIF9jcmVhdGUgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9vYmplY3QvY3JlYXRlXCIpO1xuXG52YXIgX2NyZWF0ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGUpO1xuXG52YXIgX3R5cGVvZjIgPSByZXF1aXJlKFwiLi4vaGVscGVycy90eXBlb2ZcIik7XG5cbnZhciBfdHlwZW9mMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3R5cGVvZjIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgKHR5cGVvZiBzdXBlckNsYXNzID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6ICgwLCBfdHlwZW9mMy5kZWZhdWx0KShzdXBlckNsYXNzKSkpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gKDAsIF9jcmVhdGUyLmRlZmF1bHQpKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2YyLmRlZmF1bHQgPyAoMCwgX3NldFByb3RvdHlwZU9mMi5kZWZhdWx0KShzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF90eXBlb2YyID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgX3R5cGVvZjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90eXBlb2YyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKHNlbGYsIGNhbGwpIHtcbiAgaWYgKCFzZWxmKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGNhbGwgJiYgKCh0eXBlb2YgY2FsbCA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiAoMCwgX3R5cGVvZjMuZGVmYXVsdCkoY2FsbCkpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2Zyb20gPSByZXF1aXJlKFwiLi4vY29yZS1qcy9hcnJheS9mcm9tXCIpO1xuXG52YXIgX2Zyb20yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZnJvbSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFycjJbaV0gPSBhcnJbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycjI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICgwLCBfZnJvbTIuZGVmYXVsdCkoYXJyKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9pdGVyYXRvciA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvclwiKTtcblxudmFyIF9pdGVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pdGVyYXRvcik7XG5cbnZhciBfc3ltYm9sID0gcmVxdWlyZShcIi4uL2NvcmUtanMvc3ltYm9sXCIpO1xuXG52YXIgX3N5bWJvbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zeW1ib2wpO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIF9pdGVyYXRvcjIuZGVmYXVsdCA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IF9zeW1ib2wyLmRlZmF1bHQgJiYgb2JqICE9PSBfc3ltYm9sMi5kZWZhdWx0LnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YoX2l0ZXJhdG9yMi5kZWZhdWx0KSA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihvYmopO1xufSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gX3N5bWJvbDIuZGVmYXVsdCAmJiBvYmogIT09IF9zeW1ib2wyLmRlZmF1bHQucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihvYmopO1xufTsiLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBwbGFjZUhvbGRlcnNDb3VudCAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyB0aGUgbnVtYmVyIG9mIGVxdWFsIHNpZ25zIChwbGFjZSBob2xkZXJzKVxuICAvLyBpZiB0aGVyZSBhcmUgdHdvIHBsYWNlaG9sZGVycywgdGhhbiB0aGUgdHdvIGNoYXJhY3RlcnMgYmVmb3JlIGl0XG4gIC8vIHJlcHJlc2VudCBvbmUgYnl0ZVxuICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSwgdGhlbiB0aGUgdGhyZWUgY2hhcmFjdGVycyBiZWZvcmUgaXQgcmVwcmVzZW50IDIgYnl0ZXNcbiAgLy8gdGhpcyBpcyBqdXN0IGEgY2hlYXAgaGFjayB0byBub3QgZG8gaW5kZXhPZiB0d2ljZVxuICByZXR1cm4gYjY0W2xlbiAtIDJdID09PSAnPScgPyAyIDogYjY0W2xlbiAtIDFdID09PSAnPScgPyAxIDogMFxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG4gIHJldHVybiBiNjQubGVuZ3RoICogMyAvIDQgLSBwbGFjZUhvbGRlcnNDb3VudChiNjQpXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIGksIGosIGwsIHRtcCwgcGxhY2VIb2xkZXJzLCBhcnJcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcbiAgcGxhY2VIb2xkZXJzID0gcGxhY2VIb2xkZXJzQ291bnQoYjY0KVxuXG4gIGFyciA9IG5ldyBBcnIobGVuICogMyAvIDQgLSBwbGFjZUhvbGRlcnMpXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICBsID0gcGxhY2VIb2xkZXJzID4gMCA/IGxlbiAtIDQgOiBsZW5cblxuICB2YXIgTCA9IDBcblxuICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGw7IGkgKz0gNCwgaiArPSAzKSB7XG4gICAgdG1wID0gKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldXG4gICAgYXJyW0wrK10gPSAodG1wID4+IDE2KSAmIDB4RkZcbiAgICBhcnJbTCsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW0wrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzID09PSAyKSB7XG4gICAgdG1wID0gKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfCAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbTCsrXSA9IHRtcCAmIDB4RkZcbiAgfSBlbHNlIGlmIChwbGFjZUhvbGRlcnMgPT09IDEpIHtcbiAgICB0bXAgPSAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfCAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfCAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbTCsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW0wrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gKyBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gKyBsb29rdXBbbnVtID4+IDYgJiAweDNGXSArIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPSAodWludDhbaV0gPDwgMTYpICsgKHVpbnQ4W2kgKyAxXSA8PCA4KSArICh1aW50OFtpICsgMl0pXG4gICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpXG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBvdXRwdXQgPSAnJ1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aCkpKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFt0bXAgPj4gMl1cbiAgICBvdXRwdXQgKz0gbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXVxuICAgIG91dHB1dCArPSAnPT0nXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArICh1aW50OFtsZW4gLSAxXSlcbiAgICBvdXRwdXQgKz0gbG9va3VwW3RtcCA+PiAxMF1cbiAgICBvdXRwdXQgKz0gbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXVxuICAgIG91dHB1dCArPSBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdXG4gICAgb3V0cHV0ICs9ICc9J1xuICB9XG5cbiAgcGFydHMucHVzaChvdXRwdXQpXG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iLCIoZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gVXRpbHNcbiAgZnVuY3Rpb24gYXNzZXJ0ICh2YWwsIG1zZykge1xuICAgIGlmICghdmFsKSB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICdBc3NlcnRpb24gZmFpbGVkJyk7XG4gIH1cblxuICAvLyBDb3VsZCB1c2UgYGluaGVyaXRzYCBtb2R1bGUsIGJ1dCBkb24ndCB3YW50IHRvIG1vdmUgZnJvbSBzaW5nbGUgZmlsZVxuICAvLyBhcmNoaXRlY3R1cmUgeWV0LlxuICBmdW5jdGlvbiBpbmhlcml0cyAoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7XG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge307XG4gICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZTtcbiAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyBUZW1wQ3RvcigpO1xuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvcjtcbiAgfVxuXG4gIC8vIEJOXG5cbiAgZnVuY3Rpb24gQk4gKG51bWJlciwgYmFzZSwgZW5kaWFuKSB7XG4gICAgaWYgKEJOLmlzQk4obnVtYmVyKSkge1xuICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9XG5cbiAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICB0aGlzLndvcmRzID0gbnVsbDtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgICAvLyBSZWR1Y3Rpb24gY29udGV4dFxuICAgIHRoaXMucmVkID0gbnVsbDtcblxuICAgIGlmIChudW1iZXIgIT09IG51bGwpIHtcbiAgICAgIGlmIChiYXNlID09PSAnbGUnIHx8IGJhc2UgPT09ICdiZScpIHtcbiAgICAgICAgZW5kaWFuID0gYmFzZTtcbiAgICAgICAgYmFzZSA9IDEwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pbml0KG51bWJlciB8fCAwLCBiYXNlIHx8IDEwLCBlbmRpYW4gfHwgJ2JlJyk7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gQk47XG4gIH0gZWxzZSB7XG4gICAgZXhwb3J0cy5CTiA9IEJOO1xuICB9XG5cbiAgQk4uQk4gPSBCTjtcbiAgQk4ud29yZFNpemUgPSAyNjtcblxuICB2YXIgQnVmZmVyO1xuICB0cnkge1xuICAgIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZicgKyAnZmVyJykuQnVmZmVyO1xuICB9IGNhdGNoIChlKSB7XG4gIH1cblxuICBCTi5pc0JOID0gZnVuY3Rpb24gaXNCTiAobnVtKSB7XG4gICAgaWYgKG51bSBpbnN0YW5jZW9mIEJOKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVtICE9PSBudWxsICYmIHR5cGVvZiBudW0gPT09ICdvYmplY3QnICYmXG4gICAgICBudW0uY29uc3RydWN0b3Iud29yZFNpemUgPT09IEJOLndvcmRTaXplICYmIEFycmF5LmlzQXJyYXkobnVtLndvcmRzKTtcbiAgfTtcblxuICBCTi5tYXggPSBmdW5jdGlvbiBtYXggKGxlZnQsIHJpZ2h0KSB7XG4gICAgaWYgKGxlZnQuY21wKHJpZ2h0KSA+IDApIHJldHVybiBsZWZ0O1xuICAgIHJldHVybiByaWdodDtcbiAgfTtcblxuICBCTi5taW4gPSBmdW5jdGlvbiBtaW4gKGxlZnQsIHJpZ2h0KSB7XG4gICAgaWYgKGxlZnQuY21wKHJpZ2h0KSA8IDApIHJldHVybiBsZWZ0O1xuICAgIHJldHVybiByaWdodDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0IChudW1iZXIsIGJhc2UsIGVuZGlhbikge1xuICAgIGlmICh0eXBlb2YgbnVtYmVyID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHRoaXMuX2luaXROdW1iZXIobnVtYmVyLCBiYXNlLCBlbmRpYW4pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbnVtYmVyID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHRoaXMuX2luaXRBcnJheShudW1iZXIsIGJhc2UsIGVuZGlhbik7XG4gICAgfVxuXG4gICAgaWYgKGJhc2UgPT09ICdoZXgnKSB7XG4gICAgICBiYXNlID0gMTY7XG4gICAgfVxuICAgIGFzc2VydChiYXNlID09PSAoYmFzZSB8IDApICYmIGJhc2UgPj0gMiAmJiBiYXNlIDw9IDM2KTtcblxuICAgIG51bWJlciA9IG51bWJlci50b1N0cmluZygpLnJlcGxhY2UoL1xccysvZywgJycpO1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgaWYgKG51bWJlclswXSA9PT0gJy0nKSB7XG4gICAgICBzdGFydCsrO1xuICAgIH1cblxuICAgIGlmIChiYXNlID09PSAxNikge1xuICAgICAgdGhpcy5fcGFyc2VIZXgobnVtYmVyLCBzdGFydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3BhcnNlQmFzZShudW1iZXIsIGJhc2UsIHN0YXJ0KTtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyWzBdID09PSAnLScpIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgIH1cblxuICAgIHRoaXMuc3RyaXAoKTtcblxuICAgIGlmIChlbmRpYW4gIT09ICdsZScpIHJldHVybjtcblxuICAgIHRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSwgYmFzZSwgZW5kaWFuKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2luaXROdW1iZXIgPSBmdW5jdGlvbiBfaW5pdE51bWJlciAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICBudW1iZXIgPSAtbnVtYmVyO1xuICAgIH1cbiAgICBpZiAobnVtYmVyIDwgMHg0MDAwMDAwKSB7XG4gICAgICB0aGlzLndvcmRzID0gWyBudW1iZXIgJiAweDNmZmZmZmYgXTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICB9IGVsc2UgaWYgKG51bWJlciA8IDB4MTAwMDAwMDAwMDAwMDApIHtcbiAgICAgIHRoaXMud29yZHMgPSBbXG4gICAgICAgIG51bWJlciAmIDB4M2ZmZmZmZixcbiAgICAgICAgKG51bWJlciAvIDB4NDAwMDAwMCkgJiAweDNmZmZmZmZcbiAgICAgIF07XG4gICAgICB0aGlzLmxlbmd0aCA9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChudW1iZXIgPCAweDIwMDAwMDAwMDAwMDAwKTsgLy8gMiBeIDUzICh1bnNhZmUpXG4gICAgICB0aGlzLndvcmRzID0gW1xuICAgICAgICBudW1iZXIgJiAweDNmZmZmZmYsXG4gICAgICAgIChudW1iZXIgLyAweDQwMDAwMDApICYgMHgzZmZmZmZmLFxuICAgICAgICAxXG4gICAgICBdO1xuICAgICAgdGhpcy5sZW5ndGggPSAzO1xuICAgIH1cblxuICAgIGlmIChlbmRpYW4gIT09ICdsZScpIHJldHVybjtcblxuICAgIC8vIFJldmVyc2UgdGhlIGJ5dGVzXG4gICAgdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLCBiYXNlLCBlbmRpYW4pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5faW5pdEFycmF5ID0gZnVuY3Rpb24gX2luaXRBcnJheSAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICAvLyBQZXJoYXBzIGEgVWludDhBcnJheVxuICAgIGFzc2VydCh0eXBlb2YgbnVtYmVyLmxlbmd0aCA9PT0gJ251bWJlcicpO1xuICAgIGlmIChudW1iZXIubGVuZ3RoIDw9IDApIHtcbiAgICAgIHRoaXMud29yZHMgPSBbIDAgXTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gTWF0aC5jZWlsKG51bWJlci5sZW5ndGggLyAzKTtcbiAgICB0aGlzLndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSAwO1xuICAgIH1cblxuICAgIHZhciBqLCB3O1xuICAgIHZhciBvZmYgPSAwO1xuICAgIGlmIChlbmRpYW4gPT09ICdiZScpIHtcbiAgICAgIGZvciAoaSA9IG51bWJlci5sZW5ndGggLSAxLCBqID0gMDsgaSA+PSAwOyBpIC09IDMpIHtcbiAgICAgICAgdyA9IG51bWJlcltpXSB8IChudW1iZXJbaSAtIDFdIDw8IDgpIHwgKG51bWJlcltpIC0gMl0gPDwgMTYpO1xuICAgICAgICB0aGlzLndvcmRzW2pdIHw9ICh3IDw8IG9mZikgJiAweDNmZmZmZmY7XG4gICAgICAgIHRoaXMud29yZHNbaiArIDFdID0gKHcgPj4+ICgyNiAtIG9mZikpICYgMHgzZmZmZmZmO1xuICAgICAgICBvZmYgKz0gMjQ7XG4gICAgICAgIGlmIChvZmYgPj0gMjYpIHtcbiAgICAgICAgICBvZmYgLT0gMjY7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmRpYW4gPT09ICdsZScpIHtcbiAgICAgIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbnVtYmVyLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIHcgPSBudW1iZXJbaV0gfCAobnVtYmVyW2kgKyAxXSA8PCA4KSB8IChudW1iZXJbaSArIDJdIDw8IDE2KTtcbiAgICAgICAgdGhpcy53b3Jkc1tqXSB8PSAodyA8PCBvZmYpICYgMHgzZmZmZmZmO1xuICAgICAgICB0aGlzLndvcmRzW2ogKyAxXSA9ICh3ID4+PiAoMjYgLSBvZmYpKSAmIDB4M2ZmZmZmZjtcbiAgICAgICAgb2ZmICs9IDI0O1xuICAgICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgICAgb2ZmIC09IDI2O1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHBhcnNlSGV4IChzdHIsIHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgciA9IDA7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKHN0ci5sZW5ndGgsIGVuZCk7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSkgLSA0ODtcblxuICAgICAgciA8PD0gNDtcblxuICAgICAgLy8gJ2EnIC0gJ2YnXG4gICAgICBpZiAoYyA+PSA0OSAmJiBjIDw9IDU0KSB7XG4gICAgICAgIHIgfD0gYyAtIDQ5ICsgMHhhO1xuXG4gICAgICAvLyAnQScgLSAnRidcbiAgICAgIH0gZWxzZSBpZiAoYyA+PSAxNyAmJiBjIDw9IDIyKSB7XG4gICAgICAgIHIgfD0gYyAtIDE3ICsgMHhhO1xuXG4gICAgICAvLyAnMCcgLSAnOSdcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHIgfD0gYyAmIDB4ZjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICBCTi5wcm90b3R5cGUuX3BhcnNlSGV4ID0gZnVuY3Rpb24gX3BhcnNlSGV4IChudW1iZXIsIHN0YXJ0KSB7XG4gICAgLy8gQ3JlYXRlIHBvc3NpYmx5IGJpZ2dlciBhcnJheSB0byBlbnN1cmUgdGhhdCBpdCBmaXRzIHRoZSBudW1iZXJcbiAgICB0aGlzLmxlbmd0aCA9IE1hdGguY2VpbCgobnVtYmVyLmxlbmd0aCAtIHN0YXJ0KSAvIDYpO1xuICAgIHRoaXMud29yZHMgPSBuZXcgQXJyYXkodGhpcy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIGosIHc7XG4gICAgLy8gU2NhbiAyNC1iaXQgY2h1bmtzIGFuZCBhZGQgdGhlbSB0byB0aGUgbnVtYmVyXG4gICAgdmFyIG9mZiA9IDA7XG4gICAgZm9yIChpID0gbnVtYmVyLmxlbmd0aCAtIDYsIGogPSAwOyBpID49IHN0YXJ0OyBpIC09IDYpIHtcbiAgICAgIHcgPSBwYXJzZUhleChudW1iZXIsIGksIGkgKyA2KTtcbiAgICAgIHRoaXMud29yZHNbal0gfD0gKHcgPDwgb2ZmKSAmIDB4M2ZmZmZmZjtcbiAgICAgIC8vIE5PVEU6IGAweDNmZmZmZmAgaXMgaW50ZW50aW9uYWwgaGVyZSwgMjZiaXRzIG1heCBzaGlmdCArIDI0Yml0IGhleCBsaW1iXG4gICAgICB0aGlzLndvcmRzW2ogKyAxXSB8PSB3ID4+PiAoMjYgLSBvZmYpICYgMHgzZmZmZmY7XG4gICAgICBvZmYgKz0gMjQ7XG4gICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgIG9mZiAtPSAyNjtcbiAgICAgICAgaisrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaSArIDYgIT09IHN0YXJ0KSB7XG4gICAgICB3ID0gcGFyc2VIZXgobnVtYmVyLCBzdGFydCwgaSArIDYpO1xuICAgICAgdGhpcy53b3Jkc1tqXSB8PSAodyA8PCBvZmYpICYgMHgzZmZmZmZmO1xuICAgICAgdGhpcy53b3Jkc1tqICsgMV0gfD0gdyA+Pj4gKDI2IC0gb2ZmKSAmIDB4M2ZmZmZmO1xuICAgIH1cbiAgICB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcGFyc2VCYXNlIChzdHIsIHN0YXJ0LCBlbmQsIG11bCkge1xuICAgIHZhciByID0gMDtcbiAgICB2YXIgbGVuID0gTWF0aC5taW4oc3RyLmxlbmd0aCwgZW5kKTtcbiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBsZW47IGkrKykge1xuICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKSAtIDQ4O1xuXG4gICAgICByICo9IG11bDtcblxuICAgICAgLy8gJ2EnXG4gICAgICBpZiAoYyA+PSA0OSkge1xuICAgICAgICByICs9IGMgLSA0OSArIDB4YTtcblxuICAgICAgLy8gJ0EnXG4gICAgICB9IGVsc2UgaWYgKGMgPj0gMTcpIHtcbiAgICAgICAgciArPSBjIC0gMTcgKyAweGE7XG5cbiAgICAgIC8vICcwJyAtICc5J1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgciArPSBjO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuXG4gIEJOLnByb3RvdHlwZS5fcGFyc2VCYXNlID0gZnVuY3Rpb24gX3BhcnNlQmFzZSAobnVtYmVyLCBiYXNlLCBzdGFydCkge1xuICAgIC8vIEluaXRpYWxpemUgYXMgemVyb1xuICAgIHRoaXMud29yZHMgPSBbIDAgXTtcbiAgICB0aGlzLmxlbmd0aCA9IDE7XG5cbiAgICAvLyBGaW5kIGxlbmd0aCBvZiBsaW1iIGluIGJhc2VcbiAgICBmb3IgKHZhciBsaW1iTGVuID0gMCwgbGltYlBvdyA9IDE7IGxpbWJQb3cgPD0gMHgzZmZmZmZmOyBsaW1iUG93ICo9IGJhc2UpIHtcbiAgICAgIGxpbWJMZW4rKztcbiAgICB9XG4gICAgbGltYkxlbi0tO1xuICAgIGxpbWJQb3cgPSAobGltYlBvdyAvIGJhc2UpIHwgMDtcblxuICAgIHZhciB0b3RhbCA9IG51bWJlci5sZW5ndGggLSBzdGFydDtcbiAgICB2YXIgbW9kID0gdG90YWwgJSBsaW1iTGVuO1xuICAgIHZhciBlbmQgPSBNYXRoLm1pbih0b3RhbCwgdG90YWwgLSBtb2QpICsgc3RhcnQ7XG5cbiAgICB2YXIgd29yZCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGxpbWJMZW4pIHtcbiAgICAgIHdvcmQgPSBwYXJzZUJhc2UobnVtYmVyLCBpLCBpICsgbGltYkxlbiwgYmFzZSk7XG5cbiAgICAgIHRoaXMuaW11bG4obGltYlBvdyk7XG4gICAgICBpZiAodGhpcy53b3Jkc1swXSArIHdvcmQgPCAweDQwMDAwMDApIHtcbiAgICAgICAgdGhpcy53b3Jkc1swXSArPSB3b3JkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faWFkZG4od29yZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1vZCAhPT0gMCkge1xuICAgICAgdmFyIHBvdyA9IDE7XG4gICAgICB3b3JkID0gcGFyc2VCYXNlKG51bWJlciwgaSwgbnVtYmVyLmxlbmd0aCwgYmFzZSk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBtb2Q7IGkrKykge1xuICAgICAgICBwb3cgKj0gYmFzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbXVsbihwb3cpO1xuICAgICAgaWYgKHRoaXMud29yZHNbMF0gKyB3b3JkIDwgMHg0MDAwMDAwKSB7XG4gICAgICAgIHRoaXMud29yZHNbMF0gKz0gd29yZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2lhZGRuKHdvcmQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBCTi5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKGRlc3QpIHtcbiAgICBkZXN0LndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlc3Qud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldO1xuICAgIH1cbiAgICBkZXN0Lmxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIGRlc3QubmVnYXRpdmUgPSB0aGlzLm5lZ2F0aXZlO1xuICAgIGRlc3QucmVkID0gdGhpcy5yZWQ7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gY2xvbmUgKCkge1xuICAgIHZhciByID0gbmV3IEJOKG51bGwpO1xuICAgIHRoaXMuY29weShyKTtcbiAgICByZXR1cm4gcjtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2V4cGFuZCA9IGZ1bmN0aW9uIF9leHBhbmQgKHNpemUpIHtcbiAgICB3aGlsZSAodGhpcy5sZW5ndGggPCBzaXplKSB7XG4gICAgICB0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gUmVtb3ZlIGxlYWRpbmcgYDBgIGZyb20gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5zdHJpcCA9IGZ1bmN0aW9uIHN0cmlwICgpIHtcbiAgICB3aGlsZSAodGhpcy5sZW5ndGggPiAxICYmIHRoaXMud29yZHNbdGhpcy5sZW5ndGggLSAxXSA9PT0gMCkge1xuICAgICAgdGhpcy5sZW5ndGgtLTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX25vcm1TaWduKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9ub3JtU2lnbiA9IGZ1bmN0aW9uIF9ub3JtU2lnbiAoKSB7XG4gICAgLy8gLTAgPSAwXG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxICYmIHRoaXMud29yZHNbMF0gPT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICAgIHJldHVybiAodGhpcy5yZWQgPyAnPEJOLVI6ICcgOiAnPEJOOiAnKSArIHRoaXMudG9TdHJpbmcoMTYpICsgJz4nO1xuICB9O1xuXG4gIC8qXG5cbiAgdmFyIHplcm9zID0gW107XG4gIHZhciBncm91cFNpemVzID0gW107XG4gIHZhciBncm91cEJhc2VzID0gW107XG5cbiAgdmFyIHMgPSAnJztcbiAgdmFyIGkgPSAtMTtcbiAgd2hpbGUgKCsraSA8IEJOLndvcmRTaXplKSB7XG4gICAgemVyb3NbaV0gPSBzO1xuICAgIHMgKz0gJzAnO1xuICB9XG4gIGdyb3VwU2l6ZXNbMF0gPSAwO1xuICBncm91cFNpemVzWzFdID0gMDtcbiAgZ3JvdXBCYXNlc1swXSA9IDA7XG4gIGdyb3VwQmFzZXNbMV0gPSAwO1xuICB2YXIgYmFzZSA9IDIgLSAxO1xuICB3aGlsZSAoKytiYXNlIDwgMzYgKyAxKSB7XG4gICAgdmFyIGdyb3VwU2l6ZSA9IDA7XG4gICAgdmFyIGdyb3VwQmFzZSA9IDE7XG4gICAgd2hpbGUgKGdyb3VwQmFzZSA8ICgxIDw8IEJOLndvcmRTaXplKSAvIGJhc2UpIHtcbiAgICAgIGdyb3VwQmFzZSAqPSBiYXNlO1xuICAgICAgZ3JvdXBTaXplICs9IDE7XG4gICAgfVxuICAgIGdyb3VwU2l6ZXNbYmFzZV0gPSBncm91cFNpemU7XG4gICAgZ3JvdXBCYXNlc1tiYXNlXSA9IGdyb3VwQmFzZTtcbiAgfVxuXG4gICovXG5cbiAgdmFyIHplcm9zID0gW1xuICAgICcnLFxuICAgICcwJyxcbiAgICAnMDAnLFxuICAgICcwMDAnLFxuICAgICcwMDAwJyxcbiAgICAnMDAwMDAnLFxuICAgICcwMDAwMDAnLFxuICAgICcwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJ1xuICBdO1xuXG4gIHZhciBncm91cFNpemVzID0gW1xuICAgIDAsIDAsXG4gICAgMjUsIDE2LCAxMiwgMTEsIDEwLCA5LCA4LFxuICAgIDgsIDcsIDcsIDcsIDcsIDYsIDYsXG4gICAgNiwgNiwgNiwgNiwgNiwgNSwgNSxcbiAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LFxuICAgIDUsIDUsIDUsIDUsIDUsIDUsIDVcbiAgXTtcblxuICB2YXIgZ3JvdXBCYXNlcyA9IFtcbiAgICAwLCAwLFxuICAgIDMzNTU0NDMyLCA0MzA0NjcyMSwgMTY3NzcyMTYsIDQ4ODI4MTI1LCA2MDQ2NjE3NiwgNDAzNTM2MDcsIDE2Nzc3MjE2LFxuICAgIDQzMDQ2NzIxLCAxMDAwMDAwMCwgMTk0ODcxNzEsIDM1ODMxODA4LCA2Mjc0ODUxNywgNzUyOTUzNiwgMTEzOTA2MjUsXG4gICAgMTY3NzcyMTYsIDI0MTM3NTY5LCAzNDAxMjIyNCwgNDcwNDU4ODEsIDY0MDAwMDAwLCA0MDg0MTAxLCA1MTUzNjMyLFxuICAgIDY0MzYzNDMsIDc5NjI2MjQsIDk3NjU2MjUsIDExODgxMzc2LCAxNDM0ODkwNywgMTcyMTAzNjgsIDIwNTExMTQ5LFxuICAgIDI0MzAwMDAwLCAyODYyOTE1MSwgMzM1NTQ0MzIsIDM5MTM1MzkzLCA0NTQzNTQyNCwgNTI1MjE4NzUsIDYwNDY2MTc2XG4gIF07XG5cbiAgQk4ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKGJhc2UsIHBhZGRpbmcpIHtcbiAgICBiYXNlID0gYmFzZSB8fCAxMDtcbiAgICBwYWRkaW5nID0gcGFkZGluZyB8IDAgfHwgMTtcblxuICAgIHZhciBvdXQ7XG4gICAgaWYgKGJhc2UgPT09IDE2IHx8IGJhc2UgPT09ICdoZXgnKSB7XG4gICAgICBvdXQgPSAnJztcbiAgICAgIHZhciBvZmYgPSAwO1xuICAgICAgdmFyIGNhcnJ5ID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgdyA9IHRoaXMud29yZHNbaV07XG4gICAgICAgIHZhciB3b3JkID0gKCgodyA8PCBvZmYpIHwgY2FycnkpICYgMHhmZmZmZmYpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgY2FycnkgPSAodyA+Pj4gKDI0IC0gb2ZmKSkgJiAweGZmZmZmZjtcbiAgICAgICAgaWYgKGNhcnJ5ICE9PSAwIHx8IGkgIT09IHRoaXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIG91dCA9IHplcm9zWzYgLSB3b3JkLmxlbmd0aF0gKyB3b3JkICsgb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCA9IHdvcmQgKyBvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgb2ZmICs9IDI7XG4gICAgICAgIGlmIChvZmYgPj0gMjYpIHtcbiAgICAgICAgICBvZmYgLT0gMjY7XG4gICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgICAgb3V0ID0gY2FycnkudG9TdHJpbmcoMTYpICsgb3V0O1xuICAgICAgfVxuICAgICAgd2hpbGUgKG91dC5sZW5ndGggJSBwYWRkaW5nICE9PSAwKSB7XG4gICAgICAgIG91dCA9ICcwJyArIG91dDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICAgIG91dCA9ICctJyArIG91dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgaWYgKGJhc2UgPT09IChiYXNlIHwgMCkgJiYgYmFzZSA+PSAyICYmIGJhc2UgPD0gMzYpIHtcbiAgICAgIC8vIHZhciBncm91cFNpemUgPSBNYXRoLmZsb29yKEJOLndvcmRTaXplICogTWF0aC5MTjIgLyBNYXRoLmxvZyhiYXNlKSk7XG4gICAgICB2YXIgZ3JvdXBTaXplID0gZ3JvdXBTaXplc1tiYXNlXTtcbiAgICAgIC8vIHZhciBncm91cEJhc2UgPSBNYXRoLnBvdyhiYXNlLCBncm91cFNpemUpO1xuICAgICAgdmFyIGdyb3VwQmFzZSA9IGdyb3VwQmFzZXNbYmFzZV07XG4gICAgICBvdXQgPSAnJztcbiAgICAgIHZhciBjID0gdGhpcy5jbG9uZSgpO1xuICAgICAgYy5uZWdhdGl2ZSA9IDA7XG4gICAgICB3aGlsZSAoIWMuaXNaZXJvKCkpIHtcbiAgICAgICAgdmFyIHIgPSBjLm1vZG4oZ3JvdXBCYXNlKS50b1N0cmluZyhiYXNlKTtcbiAgICAgICAgYyA9IGMuaWRpdm4oZ3JvdXBCYXNlKTtcblxuICAgICAgICBpZiAoIWMuaXNaZXJvKCkpIHtcbiAgICAgICAgICBvdXQgPSB6ZXJvc1tncm91cFNpemUgLSByLmxlbmd0aF0gKyByICsgb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCA9IHIgKyBvdXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzWmVybygpKSB7XG4gICAgICAgIG91dCA9ICcwJyArIG91dDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChvdXQubGVuZ3RoICUgcGFkZGluZyAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnMCcgKyBvdXQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnLScgKyBvdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGFzc2VydChmYWxzZSwgJ0Jhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYnKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9OdW1iZXIgPSBmdW5jdGlvbiB0b051bWJlciAoKSB7XG4gICAgdmFyIHJldCA9IHRoaXMud29yZHNbMF07XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAyKSB7XG4gICAgICByZXQgKz0gdGhpcy53b3Jkc1sxXSAqIDB4NDAwMDAwMDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubGVuZ3RoID09PSAzICYmIHRoaXMud29yZHNbMl0gPT09IDB4MDEpIHtcbiAgICAgIC8vIE5PVEU6IGF0IHRoaXMgc3RhZ2UgaXQgaXMga25vd24gdGhhdCB0aGUgdG9wIGJpdCBpcyBzZXRcbiAgICAgIHJldCArPSAweDEwMDAwMDAwMDAwMDAwICsgKHRoaXMud29yZHNbMV0gKiAweDQwMDAwMDApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sZW5ndGggPiAyKSB7XG4gICAgICBhc3NlcnQoZmFsc2UsICdOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMnKTtcbiAgICB9XG4gICAgcmV0dXJuICh0aGlzLm5lZ2F0aXZlICE9PSAwKSA/IC1yZXQgOiByZXQ7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b0J1ZmZlciA9IGZ1bmN0aW9uIHRvQnVmZmVyIChlbmRpYW4sIGxlbmd0aCkge1xuICAgIGFzc2VydCh0eXBlb2YgQnVmZmVyICE9PSAndW5kZWZpbmVkJyk7XG4gICAgcmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQnVmZmVyLCBlbmRpYW4sIGxlbmd0aCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiB0b0FycmF5IChlbmRpYW4sIGxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LCBlbmRpYW4sIGxlbmd0aCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvQXJyYXlMaWtlID0gZnVuY3Rpb24gdG9BcnJheUxpa2UgKEFycmF5VHlwZSwgZW5kaWFuLCBsZW5ndGgpIHtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRoaXMuYnl0ZUxlbmd0aCgpO1xuICAgIHZhciByZXFMZW5ndGggPSBsZW5ndGggfHwgTWF0aC5tYXgoMSwgYnl0ZUxlbmd0aCk7XG4gICAgYXNzZXJ0KGJ5dGVMZW5ndGggPD0gcmVxTGVuZ3RoLCAnYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCcpO1xuICAgIGFzc2VydChyZXFMZW5ndGggPiAwLCAnUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwJyk7XG5cbiAgICB0aGlzLnN0cmlwKCk7XG4gICAgdmFyIGxpdHRsZUVuZGlhbiA9IGVuZGlhbiA9PT0gJ2xlJztcbiAgICB2YXIgcmVzID0gbmV3IEFycmF5VHlwZShyZXFMZW5ndGgpO1xuXG4gICAgdmFyIGIsIGk7XG4gICAgdmFyIHEgPSB0aGlzLmNsb25lKCk7XG4gICAgaWYgKCFsaXR0bGVFbmRpYW4pIHtcbiAgICAgIC8vIEFzc3VtZSBiaWctZW5kaWFuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcmVxTGVuZ3RoIC0gYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc1tpXSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDA7ICFxLmlzWmVybygpOyBpKyspIHtcbiAgICAgICAgYiA9IHEuYW5kbG4oMHhmZik7XG4gICAgICAgIHEuaXVzaHJuKDgpO1xuXG4gICAgICAgIHJlc1tyZXFMZW5ndGggLSBpIC0gMV0gPSBiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwOyAhcS5pc1plcm8oKTsgaSsrKSB7XG4gICAgICAgIGIgPSBxLmFuZGxuKDB4ZmYpO1xuICAgICAgICBxLml1c2hybig4KTtcblxuICAgICAgICByZXNbaV0gPSBiO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgaSA8IHJlcUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc1tpXSA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBpZiAoTWF0aC5jbHozMikge1xuICAgIEJOLnByb3RvdHlwZS5fY291bnRCaXRzID0gZnVuY3Rpb24gX2NvdW50Qml0cyAodykge1xuICAgICAgcmV0dXJuIDMyIC0gTWF0aC5jbHozMih3KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIEJOLnByb3RvdHlwZS5fY291bnRCaXRzID0gZnVuY3Rpb24gX2NvdW50Qml0cyAodykge1xuICAgICAgdmFyIHQgPSB3O1xuICAgICAgdmFyIHIgPSAwO1xuICAgICAgaWYgKHQgPj0gMHgxMDAwKSB7XG4gICAgICAgIHIgKz0gMTM7XG4gICAgICAgIHQgPj4+PSAxMztcbiAgICAgIH1cbiAgICAgIGlmICh0ID49IDB4NDApIHtcbiAgICAgICAgciArPSA3O1xuICAgICAgICB0ID4+Pj0gNztcbiAgICAgIH1cbiAgICAgIGlmICh0ID49IDB4OCkge1xuICAgICAgICByICs9IDQ7XG4gICAgICAgIHQgPj4+PSA0O1xuICAgICAgfVxuICAgICAgaWYgKHQgPj0gMHgwMikge1xuICAgICAgICByICs9IDI7XG4gICAgICAgIHQgPj4+PSAyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHIgKyB0O1xuICAgIH07XG4gIH1cblxuICBCTi5wcm90b3R5cGUuX3plcm9CaXRzID0gZnVuY3Rpb24gX3plcm9CaXRzICh3KSB7XG4gICAgLy8gU2hvcnQtY3V0XG4gICAgaWYgKHcgPT09IDApIHJldHVybiAyNjtcblxuICAgIHZhciB0ID0gdztcbiAgICB2YXIgciA9IDA7XG4gICAgaWYgKCh0ICYgMHgxZmZmKSA9PT0gMCkge1xuICAgICAgciArPSAxMztcbiAgICAgIHQgPj4+PSAxMztcbiAgICB9XG4gICAgaWYgKCh0ICYgMHg3ZikgPT09IDApIHtcbiAgICAgIHIgKz0gNztcbiAgICAgIHQgPj4+PSA3O1xuICAgIH1cbiAgICBpZiAoKHQgJiAweGYpID09PSAwKSB7XG4gICAgICByICs9IDQ7XG4gICAgICB0ID4+Pj0gNDtcbiAgICB9XG4gICAgaWYgKCh0ICYgMHgzKSA9PT0gMCkge1xuICAgICAgciArPSAyO1xuICAgICAgdCA+Pj49IDI7XG4gICAgfVxuICAgIGlmICgodCAmIDB4MSkgPT09IDApIHtcbiAgICAgIHIrKztcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG51bWJlciBvZiB1c2VkIGJpdHMgaW4gYSBCTlxuICBCTi5wcm90b3R5cGUuYml0TGVuZ3RoID0gZnVuY3Rpb24gYml0TGVuZ3RoICgpIHtcbiAgICB2YXIgdyA9IHRoaXMud29yZHNbdGhpcy5sZW5ndGggLSAxXTtcbiAgICB2YXIgaGkgPSB0aGlzLl9jb3VudEJpdHModyk7XG4gICAgcmV0dXJuICh0aGlzLmxlbmd0aCAtIDEpICogMjYgKyBoaTtcbiAgfTtcblxuICBmdW5jdGlvbiB0b0JpdEFycmF5IChudW0pIHtcbiAgICB2YXIgdyA9IG5ldyBBcnJheShudW0uYml0TGVuZ3RoKCkpO1xuXG4gICAgZm9yICh2YXIgYml0ID0gMDsgYml0IDwgdy5sZW5ndGg7IGJpdCsrKSB7XG4gICAgICB2YXIgb2ZmID0gKGJpdCAvIDI2KSB8IDA7XG4gICAgICB2YXIgd2JpdCA9IGJpdCAlIDI2O1xuXG4gICAgICB3W2JpdF0gPSAobnVtLndvcmRzW29mZl0gJiAoMSA8PCB3Yml0KSkgPj4+IHdiaXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHc7XG4gIH1cblxuICAvLyBOdW1iZXIgb2YgdHJhaWxpbmcgemVybyBiaXRzXG4gIEJOLnByb3RvdHlwZS56ZXJvQml0cyA9IGZ1bmN0aW9uIHplcm9CaXRzICgpIHtcbiAgICBpZiAodGhpcy5pc1plcm8oKSkgcmV0dXJuIDA7XG5cbiAgICB2YXIgciA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYiA9IHRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbaV0pO1xuICAgICAgciArPSBiO1xuICAgICAgaWYgKGIgIT09IDI2KSBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmJ5dGVMZW5ndGggPSBmdW5jdGlvbiBieXRlTGVuZ3RoICgpIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkgLyA4KTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9Ud29zID0gZnVuY3Rpb24gdG9Ud29zICh3aWR0aCkge1xuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5hYnMoKS5pbm90bih3aWR0aCkuaWFkZG4oMSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNsb25lKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmZyb21Ud29zID0gZnVuY3Rpb24gZnJvbVR3b3MgKHdpZHRoKSB7XG4gICAgaWYgKHRoaXMudGVzdG4od2lkdGggLSAxKSkge1xuICAgICAgcmV0dXJuIHRoaXMubm90bih3aWR0aCkuaWFkZG4oMSkuaW5lZygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc05lZyA9IGZ1bmN0aW9uIGlzTmVnICgpIHtcbiAgICByZXR1cm4gdGhpcy5uZWdhdGl2ZSAhPT0gMDtcbiAgfTtcblxuICAvLyBSZXR1cm4gbmVnYXRpdmUgY2xvbmUgb2YgYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5uZWcgPSBmdW5jdGlvbiBuZWcgKCkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaW5lZygpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pbmVnID0gZnVuY3Rpb24gaW5lZyAoKSB7XG4gICAgaWYgKCF0aGlzLmlzWmVybygpKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlIF49IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gT3IgYG51bWAgd2l0aCBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1b3IgPSBmdW5jdGlvbiBpdW9yIChudW0pIHtcbiAgICB3aGlsZSAodGhpcy5sZW5ndGggPCBudW0ubGVuZ3RoKSB7XG4gICAgICB0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdID0gMDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHRoaXMud29yZHNbaV0gfCBudW0ud29yZHNbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW9yID0gZnVuY3Rpb24gaW9yIChudW0pIHtcbiAgICBhc3NlcnQoKHRoaXMubmVnYXRpdmUgfCBudW0ubmVnYXRpdmUpID09PSAwKTtcbiAgICByZXR1cm4gdGhpcy5pdW9yKG51bSk7XG4gIH07XG5cbiAgLy8gT3IgYG51bWAgd2l0aCBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLm9yID0gZnVuY3Rpb24gb3IgKG51bSkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaW9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLmlvcih0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudW9yID0gZnVuY3Rpb24gdW9yIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml1b3IobnVtKTtcbiAgICByZXR1cm4gbnVtLmNsb25lKCkuaXVvcih0aGlzKTtcbiAgfTtcblxuICAvLyBBbmQgYG51bWAgd2l0aCBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1YW5kID0gZnVuY3Rpb24gaXVhbmQgKG51bSkge1xuICAgIC8vIGIgPSBtaW4tbGVuZ3RoKG51bSwgdGhpcylcbiAgICB2YXIgYjtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSB7XG4gICAgICBiID0gbnVtO1xuICAgIH0gZWxzZSB7XG4gICAgICBiID0gdGhpcztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldICYgbnVtLndvcmRzW2ldO1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gYi5sZW5ndGg7XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pYW5kID0gZnVuY3Rpb24gaWFuZCAobnVtKSB7XG4gICAgYXNzZXJ0KCh0aGlzLm5lZ2F0aXZlIHwgbnVtLm5lZ2F0aXZlKSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXVhbmQobnVtKTtcbiAgfTtcblxuICAvLyBBbmQgYG51bWAgd2l0aCBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmFuZCA9IGZ1bmN0aW9uIGFuZCAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5pYW5kKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLmlhbmQodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnVhbmQgPSBmdW5jdGlvbiB1YW5kIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml1YW5kKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLml1YW5kKHRoaXMpO1xuICB9O1xuXG4gIC8vIFhvciBgbnVtYCB3aXRoIGB0aGlzYCBpbi1wbGFjZVxuICBCTi5wcm90b3R5cGUuaXV4b3IgPSBmdW5jdGlvbiBpdXhvciAobnVtKSB7XG4gICAgLy8gYS5sZW5ndGggPiBiLmxlbmd0aFxuICAgIHZhciBhO1xuICAgIHZhciBiO1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHtcbiAgICAgIGEgPSB0aGlzO1xuICAgICAgYiA9IG51bTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IG51bTtcbiAgICAgIGIgPSB0aGlzO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV0gXiBiLndvcmRzW2ldO1xuICAgIH1cblxuICAgIGlmICh0aGlzICE9PSBhKSB7XG4gICAgICBmb3IgKDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggPSBhLmxlbmd0aDtcblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLml4b3IgPSBmdW5jdGlvbiBpeG9yIChudW0pIHtcbiAgICBhc3NlcnQoKHRoaXMubmVnYXRpdmUgfCBudW0ubmVnYXRpdmUpID09PSAwKTtcbiAgICByZXR1cm4gdGhpcy5pdXhvcihudW0pO1xuICB9O1xuXG4gIC8vIFhvciBgbnVtYCB3aXRoIGB0aGlzYFxuICBCTi5wcm90b3R5cGUueG9yID0gZnVuY3Rpb24geG9yIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml4b3IobnVtKTtcbiAgICByZXR1cm4gbnVtLmNsb25lKCkuaXhvcih0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudXhvciA9IGZ1bmN0aW9uIHV4b3IgKG51bSkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaXV4b3IobnVtKTtcbiAgICByZXR1cm4gbnVtLmNsb25lKCkuaXV4b3IodGhpcyk7XG4gIH07XG5cbiAgLy8gTm90IGBgdGhpc2BgIHdpdGggYGB3aWR0aGBgIGJpdHdpZHRoXG4gIEJOLnByb3RvdHlwZS5pbm90biA9IGZ1bmN0aW9uIGlub3RuICh3aWR0aCkge1xuICAgIGFzc2VydCh0eXBlb2Ygd2lkdGggPT09ICdudW1iZXInICYmIHdpZHRoID49IDApO1xuXG4gICAgdmFyIGJ5dGVzTmVlZGVkID0gTWF0aC5jZWlsKHdpZHRoIC8gMjYpIHwgMDtcbiAgICB2YXIgYml0c0xlZnQgPSB3aWR0aCAlIDI2O1xuXG4gICAgLy8gRXh0ZW5kIHRoZSBidWZmZXIgd2l0aCBsZWFkaW5nIHplcm9lc1xuICAgIHRoaXMuX2V4cGFuZChieXRlc05lZWRlZCk7XG5cbiAgICBpZiAoYml0c0xlZnQgPiAwKSB7XG4gICAgICBieXRlc05lZWRlZC0tO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBjb21wbGV0ZSB3b3Jkc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXNOZWVkZWQ7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IH50aGlzLndvcmRzW2ldICYgMHgzZmZmZmZmO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgcmVzaWR1ZVxuICAgIGlmIChiaXRzTGVmdCA+IDApIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB+dGhpcy53b3Jkc1tpXSAmICgweDNmZmZmZmYgPj4gKDI2IC0gYml0c0xlZnQpKTtcbiAgICB9XG5cbiAgICAvLyBBbmQgcmVtb3ZlIGxlYWRpbmcgemVyb2VzXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubm90biA9IGZ1bmN0aW9uIG5vdG4gKHdpZHRoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih3aWR0aCk7XG4gIH07XG5cbiAgLy8gU2V0IGBiaXRgIG9mIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuc2V0biA9IGZ1bmN0aW9uIHNldG4gKGJpdCwgdmFsKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXQgPT09ICdudW1iZXInICYmIGJpdCA+PSAwKTtcblxuICAgIHZhciBvZmYgPSAoYml0IC8gMjYpIHwgMDtcbiAgICB2YXIgd2JpdCA9IGJpdCAlIDI2O1xuXG4gICAgdGhpcy5fZXhwYW5kKG9mZiArIDEpO1xuXG4gICAgaWYgKHZhbCkge1xuICAgICAgdGhpcy53b3Jkc1tvZmZdID0gdGhpcy53b3Jkc1tvZmZdIHwgKDEgPDwgd2JpdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud29yZHNbb2ZmXSA9IHRoaXMud29yZHNbb2ZmXSAmIH4oMSA8PCB3Yml0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIC8vIEFkZCBgbnVtYCB0byBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLmlhZGQgPSBmdW5jdGlvbiBpYWRkIChudW0pIHtcbiAgICB2YXIgcjtcblxuICAgIC8vIG5lZ2F0aXZlICsgcG9zaXRpdmVcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCAmJiBudW0ubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgciA9IHRoaXMuaXN1YihudW0pO1xuICAgICAgdGhpcy5uZWdhdGl2ZSBePSAxO1xuICAgICAgcmV0dXJuIHRoaXMuX25vcm1TaWduKCk7XG5cbiAgICAvLyBwb3NpdGl2ZSArIG5lZ2F0aXZlXG4gICAgfSBlbHNlIGlmICh0aGlzLm5lZ2F0aXZlID09PSAwICYmIG51bS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgbnVtLm5lZ2F0aXZlID0gMDtcbiAgICAgIHIgPSB0aGlzLmlzdWIobnVtKTtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gci5fbm9ybVNpZ24oKTtcbiAgICB9XG5cbiAgICAvLyBhLmxlbmd0aCA+IGIubGVuZ3RoXG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkge1xuICAgICAgYSA9IHRoaXM7XG4gICAgICBiID0gbnVtO1xuICAgIH0gZWxzZSB7XG4gICAgICBhID0gbnVtO1xuICAgICAgYiA9IHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApICsgKGIud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHIgJiAweDNmZmZmZmY7XG4gICAgICBjYXJyeSA9IHIgPj4+IDI2O1xuICAgIH1cbiAgICBmb3IgKDsgY2FycnkgIT09IDAgJiYgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApICsgY2Fycnk7XG4gICAgICB0aGlzLndvcmRzW2ldID0gciAmIDB4M2ZmZmZmZjtcbiAgICAgIGNhcnJ5ID0gciA+Pj4gMjY7XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggPSBhLmxlbmd0aDtcbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbdGhpcy5sZW5ndGhdID0gY2Fycnk7XG4gICAgICB0aGlzLmxlbmd0aCsrO1xuICAgIC8vIENvcHkgdGhlIHJlc3Qgb2YgdGhlIHdvcmRzXG4gICAgfSBlbHNlIGlmIChhICE9PSB0aGlzKSB7XG4gICAgICBmb3IgKDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gQWRkIGBudW1gIHRvIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkIChudW0pIHtcbiAgICB2YXIgcmVzO1xuICAgIGlmIChudW0ubmVnYXRpdmUgIT09IDAgJiYgdGhpcy5uZWdhdGl2ZSA9PT0gMCkge1xuICAgICAgbnVtLm5lZ2F0aXZlID0gMDtcbiAgICAgIHJlcyA9IHRoaXMuc3ViKG51bSk7XG4gICAgICBudW0ubmVnYXRpdmUgXj0gMTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSBlbHNlIGlmIChudW0ubmVnYXRpdmUgPT09IDAgJiYgdGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICByZXMgPSBudW0uc3ViKHRoaXMpO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaWFkZChudW0pO1xuXG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLmlhZGQodGhpcyk7XG4gIH07XG5cbiAgLy8gU3VidHJhY3QgYG51bWAgZnJvbSBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLmlzdWIgPSBmdW5jdGlvbiBpc3ViIChudW0pIHtcbiAgICAvLyB0aGlzIC0gKC1udW0pID0gdGhpcyArIG51bVxuICAgIGlmIChudW0ubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDA7XG4gICAgICB2YXIgciA9IHRoaXMuaWFkZChudW0pO1xuICAgICAgbnVtLm5lZ2F0aXZlID0gMTtcbiAgICAgIHJldHVybiByLl9ub3JtU2lnbigpO1xuXG4gICAgLy8gLXRoaXMgLSBudW0gPSAtKHRoaXMgKyBudW0pXG4gICAgfSBlbHNlIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHRoaXMuaWFkZChudW0pO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gdGhpcy5fbm9ybVNpZ24oKTtcbiAgICB9XG5cbiAgICAvLyBBdCB0aGlzIHBvaW50IGJvdGggbnVtYmVycyBhcmUgcG9zaXRpdmVcbiAgICB2YXIgY21wID0gdGhpcy5jbXAobnVtKTtcblxuICAgIC8vIE9wdGltaXphdGlvbiAtIHplcm9pZnlcbiAgICBpZiAoY21wID09PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICAgIHRoaXMud29yZHNbMF0gPSAwO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gYSA+IGJcbiAgICB2YXIgYSwgYjtcbiAgICBpZiAoY21wID4gMCkge1xuICAgICAgYSA9IHRoaXM7XG4gICAgICBiID0gbnVtO1xuICAgIH0gZWxzZSB7XG4gICAgICBhID0gbnVtO1xuICAgICAgYiA9IHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApIC0gKGIud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgY2FycnkgPSByID4+IDI2O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHIgJiAweDNmZmZmZmY7XG4gICAgfVxuICAgIGZvciAoOyBjYXJyeSAhPT0gMCAmJiBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgciA9IChhLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gciA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSByICYgMHgzZmZmZmZmO1xuICAgIH1cblxuICAgIC8vIENvcHkgcmVzdCBvZiB0aGUgd29yZHNcbiAgICBpZiAoY2FycnkgPT09IDAgJiYgaSA8IGEubGVuZ3RoICYmIGEgIT09IHRoaXMpIHtcbiAgICAgIGZvciAoOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLndvcmRzW2ldID0gYS53b3Jkc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGgubWF4KHRoaXMubGVuZ3RoLCBpKTtcblxuICAgIGlmIChhICE9PSB0aGlzKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIC8vIFN1YnRyYWN0IGBudW1gIGZyb20gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5zdWIgPSBmdW5jdGlvbiBzdWIgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXN1YihudW0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHNtYWxsTXVsVG8gKHNlbGYsIG51bSwgb3V0KSB7XG4gICAgb3V0Lm5lZ2F0aXZlID0gbnVtLm5lZ2F0aXZlIF4gc2VsZi5uZWdhdGl2ZTtcbiAgICB2YXIgbGVuID0gKHNlbGYubGVuZ3RoICsgbnVtLmxlbmd0aCkgfCAwO1xuICAgIG91dC5sZW5ndGggPSBsZW47XG4gICAgbGVuID0gKGxlbiAtIDEpIHwgMDtcblxuICAgIC8vIFBlZWwgb25lIGl0ZXJhdGlvbiAoY29tcGlsZXIgY2FuJ3QgZG8gaXQsIGJlY2F1c2Ugb2YgY29kZSBjb21wbGV4aXR5KVxuICAgIHZhciBhID0gc2VsZi53b3Jkc1swXSB8IDA7XG4gICAgdmFyIGIgPSBudW0ud29yZHNbMF0gfCAwO1xuICAgIHZhciByID0gYSAqIGI7XG5cbiAgICB2YXIgbG8gPSByICYgMHgzZmZmZmZmO1xuICAgIHZhciBjYXJyeSA9IChyIC8gMHg0MDAwMDAwKSB8IDA7XG4gICAgb3V0LndvcmRzWzBdID0gbG87XG5cbiAgICBmb3IgKHZhciBrID0gMTsgayA8IGxlbjsgaysrKSB7XG4gICAgICAvLyBTdW0gYWxsIHdvcmRzIHdpdGggdGhlIHNhbWUgYGkgKyBqID0ga2AgYW5kIGFjY3VtdWxhdGUgYG5jYXJyeWAsXG4gICAgICAvLyBub3RlIHRoYXQgbmNhcnJ5IGNvdWxkIGJlID49IDB4M2ZmZmZmZlxuICAgICAgdmFyIG5jYXJyeSA9IGNhcnJ5ID4+PiAyNjtcbiAgICAgIHZhciByd29yZCA9IGNhcnJ5ICYgMHgzZmZmZmZmO1xuICAgICAgdmFyIG1heEogPSBNYXRoLm1pbihrLCBudW0ubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBqID0gTWF0aC5tYXgoMCwgayAtIHNlbGYubGVuZ3RoICsgMSk7IGogPD0gbWF4SjsgaisrKSB7XG4gICAgICAgIHZhciBpID0gKGsgLSBqKSB8IDA7XG4gICAgICAgIGEgPSBzZWxmLndvcmRzW2ldIHwgMDtcbiAgICAgICAgYiA9IG51bS53b3Jkc1tqXSB8IDA7XG4gICAgICAgIHIgPSBhICogYiArIHJ3b3JkO1xuICAgICAgICBuY2FycnkgKz0gKHIgLyAweDQwMDAwMDApIHwgMDtcbiAgICAgICAgcndvcmQgPSByICYgMHgzZmZmZmZmO1xuICAgICAgfVxuICAgICAgb3V0LndvcmRzW2tdID0gcndvcmQgfCAwO1xuICAgICAgY2FycnkgPSBuY2FycnkgfCAwO1xuICAgIH1cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIG91dC53b3Jkc1trXSA9IGNhcnJ5IHwgMDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0Lmxlbmd0aC0tO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQuc3RyaXAoKTtcbiAgfVxuXG4gIC8vIFRPRE8oaW5kdXRueSk6IGl0IG1heSBiZSByZWFzb25hYmxlIHRvIG9taXQgaXQgZm9yIHVzZXJzIHdobyBkb24ndCBuZWVkXG4gIC8vIHRvIHdvcmsgd2l0aCAyNTYtYml0IG51bWJlcnMsIG90aGVyd2lzZSBpdCBnaXZlcyAyMCUgaW1wcm92ZW1lbnQgZm9yIDI1Ni1iaXRcbiAgLy8gbXVsdGlwbGljYXRpb24gKGxpa2UgZWxsaXB0aWMgc2VjcDI1NmsxKS5cbiAgdmFyIGNvbWIxME11bFRvID0gZnVuY3Rpb24gY29tYjEwTXVsVG8gKHNlbGYsIG51bSwgb3V0KSB7XG4gICAgdmFyIGEgPSBzZWxmLndvcmRzO1xuICAgIHZhciBiID0gbnVtLndvcmRzO1xuICAgIHZhciBvID0gb3V0LndvcmRzO1xuICAgIHZhciBjID0gMDtcbiAgICB2YXIgbG87XG4gICAgdmFyIG1pZDtcbiAgICB2YXIgaGk7XG4gICAgdmFyIGEwID0gYVswXSB8IDA7XG4gICAgdmFyIGFsMCA9IGEwICYgMHgxZmZmO1xuICAgIHZhciBhaDAgPSBhMCA+Pj4gMTM7XG4gICAgdmFyIGExID0gYVsxXSB8IDA7XG4gICAgdmFyIGFsMSA9IGExICYgMHgxZmZmO1xuICAgIHZhciBhaDEgPSBhMSA+Pj4gMTM7XG4gICAgdmFyIGEyID0gYVsyXSB8IDA7XG4gICAgdmFyIGFsMiA9IGEyICYgMHgxZmZmO1xuICAgIHZhciBhaDIgPSBhMiA+Pj4gMTM7XG4gICAgdmFyIGEzID0gYVszXSB8IDA7XG4gICAgdmFyIGFsMyA9IGEzICYgMHgxZmZmO1xuICAgIHZhciBhaDMgPSBhMyA+Pj4gMTM7XG4gICAgdmFyIGE0ID0gYVs0XSB8IDA7XG4gICAgdmFyIGFsNCA9IGE0ICYgMHgxZmZmO1xuICAgIHZhciBhaDQgPSBhNCA+Pj4gMTM7XG4gICAgdmFyIGE1ID0gYVs1XSB8IDA7XG4gICAgdmFyIGFsNSA9IGE1ICYgMHgxZmZmO1xuICAgIHZhciBhaDUgPSBhNSA+Pj4gMTM7XG4gICAgdmFyIGE2ID0gYVs2XSB8IDA7XG4gICAgdmFyIGFsNiA9IGE2ICYgMHgxZmZmO1xuICAgIHZhciBhaDYgPSBhNiA+Pj4gMTM7XG4gICAgdmFyIGE3ID0gYVs3XSB8IDA7XG4gICAgdmFyIGFsNyA9IGE3ICYgMHgxZmZmO1xuICAgIHZhciBhaDcgPSBhNyA+Pj4gMTM7XG4gICAgdmFyIGE4ID0gYVs4XSB8IDA7XG4gICAgdmFyIGFsOCA9IGE4ICYgMHgxZmZmO1xuICAgIHZhciBhaDggPSBhOCA+Pj4gMTM7XG4gICAgdmFyIGE5ID0gYVs5XSB8IDA7XG4gICAgdmFyIGFsOSA9IGE5ICYgMHgxZmZmO1xuICAgIHZhciBhaDkgPSBhOSA+Pj4gMTM7XG4gICAgdmFyIGIwID0gYlswXSB8IDA7XG4gICAgdmFyIGJsMCA9IGIwICYgMHgxZmZmO1xuICAgIHZhciBiaDAgPSBiMCA+Pj4gMTM7XG4gICAgdmFyIGIxID0gYlsxXSB8IDA7XG4gICAgdmFyIGJsMSA9IGIxICYgMHgxZmZmO1xuICAgIHZhciBiaDEgPSBiMSA+Pj4gMTM7XG4gICAgdmFyIGIyID0gYlsyXSB8IDA7XG4gICAgdmFyIGJsMiA9IGIyICYgMHgxZmZmO1xuICAgIHZhciBiaDIgPSBiMiA+Pj4gMTM7XG4gICAgdmFyIGIzID0gYlszXSB8IDA7XG4gICAgdmFyIGJsMyA9IGIzICYgMHgxZmZmO1xuICAgIHZhciBiaDMgPSBiMyA+Pj4gMTM7XG4gICAgdmFyIGI0ID0gYls0XSB8IDA7XG4gICAgdmFyIGJsNCA9IGI0ICYgMHgxZmZmO1xuICAgIHZhciBiaDQgPSBiNCA+Pj4gMTM7XG4gICAgdmFyIGI1ID0gYls1XSB8IDA7XG4gICAgdmFyIGJsNSA9IGI1ICYgMHgxZmZmO1xuICAgIHZhciBiaDUgPSBiNSA+Pj4gMTM7XG4gICAgdmFyIGI2ID0gYls2XSB8IDA7XG4gICAgdmFyIGJsNiA9IGI2ICYgMHgxZmZmO1xuICAgIHZhciBiaDYgPSBiNiA+Pj4gMTM7XG4gICAgdmFyIGI3ID0gYls3XSB8IDA7XG4gICAgdmFyIGJsNyA9IGI3ICYgMHgxZmZmO1xuICAgIHZhciBiaDcgPSBiNyA+Pj4gMTM7XG4gICAgdmFyIGI4ID0gYls4XSB8IDA7XG4gICAgdmFyIGJsOCA9IGI4ICYgMHgxZmZmO1xuICAgIHZhciBiaDggPSBiOCA+Pj4gMTM7XG4gICAgdmFyIGI5ID0gYls5XSB8IDA7XG4gICAgdmFyIGJsOSA9IGI5ICYgMHgxZmZmO1xuICAgIHZhciBiaDkgPSBiOSA+Pj4gMTM7XG5cbiAgICBvdXQubmVnYXRpdmUgPSBzZWxmLm5lZ2F0aXZlIF4gbnVtLm5lZ2F0aXZlO1xuICAgIG91dC5sZW5ndGggPSAxOTtcbiAgICAvKiBrID0gMCAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsMCwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWwwLCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWgwLCBiaDApO1xuICAgIHZhciB3MCA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzAgPj4+IDI2KSkgfCAwO1xuICAgIHcwICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMSAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsMSwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWwxLCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWgxLCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoMSkpIHwgMDtcbiAgICB2YXIgdzEgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxID4+PiAyNikpIHwgMDtcbiAgICB3MSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDIgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDIsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMiwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoMiwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmgyKSkgfCAwO1xuICAgIHZhciB3MiA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzIgPj4+IDI2KSkgfCAwO1xuICAgIHcyICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMyAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsMywgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWwzLCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWgzLCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmgzKSkgfCAwO1xuICAgIHZhciB3MyA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzMgPj4+IDI2KSkgfCAwO1xuICAgIHczICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gNCAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsNCwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw0LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg0LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoNCkpIHwgMDtcbiAgICB2YXIgdzQgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc0ID4+PiAyNikpIHwgMDtcbiAgICB3NCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDUgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDUsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNSwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoNSwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg1KSkgfCAwO1xuICAgIHZhciB3NSA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzUgPj4+IDI2KSkgfCAwO1xuICAgIHc1ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gNiAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsNiwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw2LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg2LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg2KSkgfCAwO1xuICAgIHZhciB3NiA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzYgPj4+IDI2KSkgfCAwO1xuICAgIHc2ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gNyAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsNywgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw3LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg3LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoNykpIHwgMDtcbiAgICB2YXIgdzcgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc3ID4+PiAyNikpIHwgMDtcbiAgICB3NyAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDggKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDgsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOCwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOCwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg4KSkgfCAwO1xuICAgIHZhciB3OCA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzggPj4+IDI2KSkgfCAwO1xuICAgIHc4ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gOSAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg5KSkgfCAwO1xuICAgIHZhciB3OSA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzkgPj4+IDI2KSkgfCAwO1xuICAgIHc5ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTAgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMSk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgxKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmwxKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmgxKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTAgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxMCA+Pj4gMjYpKSB8IDA7XG4gICAgdzEwICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTEgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMik7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgyKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmwyKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmgyKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmgzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDMpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDMpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw0KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg0KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsNSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoNSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDYpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg3KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoOCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxMSA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzExID4+PiAyNikpIHwgMDtcbiAgICB3MTEgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxMiAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmwzKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDMpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDMpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDMpO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmg5KSkgfCAwO1xuICAgIHZhciB3MTIgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxMiA+Pj4gMjYpKSB8IDA7XG4gICAgdzEyICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTMgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg0KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw0KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg0KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTMgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxMyA+Pj4gMjYpKSB8IDA7XG4gICAgdzEzICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTQgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNSk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg1KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw1KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg1KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDYpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg3KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoOCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxNCA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzE0ID4+PiAyNikpIHwgMDtcbiAgICB3MTQgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxNSAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmw2KTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDYpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDYpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDYpO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTUgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxNSA+Pj4gMjYpKSB8IDA7XG4gICAgdzE1ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTYgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNyk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg3KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw3KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg3KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg5KSkgfCAwO1xuICAgIHZhciB3MTYgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxNiA+Pj4gMjYpKSB8IDA7XG4gICAgdzE2ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTcgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsOCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg4KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw4KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg4KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxNyA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzE3ID4+PiAyNikpIHwgMDtcbiAgICB3MTcgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxOCAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmw5KTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDkpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDkpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDkpO1xuICAgIHZhciB3MTggPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxOCA+Pj4gMjYpKSB8IDA7XG4gICAgdzE4ICY9IDB4M2ZmZmZmZjtcbiAgICBvWzBdID0gdzA7XG4gICAgb1sxXSA9IHcxO1xuICAgIG9bMl0gPSB3MjtcbiAgICBvWzNdID0gdzM7XG4gICAgb1s0XSA9IHc0O1xuICAgIG9bNV0gPSB3NTtcbiAgICBvWzZdID0gdzY7XG4gICAgb1s3XSA9IHc3O1xuICAgIG9bOF0gPSB3ODtcbiAgICBvWzldID0gdzk7XG4gICAgb1sxMF0gPSB3MTA7XG4gICAgb1sxMV0gPSB3MTE7XG4gICAgb1sxMl0gPSB3MTI7XG4gICAgb1sxM10gPSB3MTM7XG4gICAgb1sxNF0gPSB3MTQ7XG4gICAgb1sxNV0gPSB3MTU7XG4gICAgb1sxNl0gPSB3MTY7XG4gICAgb1sxN10gPSB3MTc7XG4gICAgb1sxOF0gPSB3MTg7XG4gICAgaWYgKGMgIT09IDApIHtcbiAgICAgIG9bMTldID0gYztcbiAgICAgIG91dC5sZW5ndGgrKztcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfTtcblxuICAvLyBQb2x5ZmlsbCBjb21iXG4gIGlmICghTWF0aC5pbXVsKSB7XG4gICAgY29tYjEwTXVsVG8gPSBzbWFsbE11bFRvO1xuICB9XG5cbiAgZnVuY3Rpb24gYmlnTXVsVG8gKHNlbGYsIG51bSwgb3V0KSB7XG4gICAgb3V0Lm5lZ2F0aXZlID0gbnVtLm5lZ2F0aXZlIF4gc2VsZi5uZWdhdGl2ZTtcbiAgICBvdXQubGVuZ3RoID0gc2VsZi5sZW5ndGggKyBudW0ubGVuZ3RoO1xuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICB2YXIgaG5jYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBvdXQubGVuZ3RoIC0gMTsgaysrKSB7XG4gICAgICAvLyBTdW0gYWxsIHdvcmRzIHdpdGggdGhlIHNhbWUgYGkgKyBqID0ga2AgYW5kIGFjY3VtdWxhdGUgYG5jYXJyeWAsXG4gICAgICAvLyBub3RlIHRoYXQgbmNhcnJ5IGNvdWxkIGJlID49IDB4M2ZmZmZmZlxuICAgICAgdmFyIG5jYXJyeSA9IGhuY2Fycnk7XG4gICAgICBobmNhcnJ5ID0gMDtcbiAgICAgIHZhciByd29yZCA9IGNhcnJ5ICYgMHgzZmZmZmZmO1xuICAgICAgdmFyIG1heEogPSBNYXRoLm1pbihrLCBudW0ubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBqID0gTWF0aC5tYXgoMCwgayAtIHNlbGYubGVuZ3RoICsgMSk7IGogPD0gbWF4SjsgaisrKSB7XG4gICAgICAgIHZhciBpID0gayAtIGo7XG4gICAgICAgIHZhciBhID0gc2VsZi53b3Jkc1tpXSB8IDA7XG4gICAgICAgIHZhciBiID0gbnVtLndvcmRzW2pdIHwgMDtcbiAgICAgICAgdmFyIHIgPSBhICogYjtcblxuICAgICAgICB2YXIgbG8gPSByICYgMHgzZmZmZmZmO1xuICAgICAgICBuY2FycnkgPSAobmNhcnJ5ICsgKChyIC8gMHg0MDAwMDAwKSB8IDApKSB8IDA7XG4gICAgICAgIGxvID0gKGxvICsgcndvcmQpIHwgMDtcbiAgICAgICAgcndvcmQgPSBsbyAmIDB4M2ZmZmZmZjtcbiAgICAgICAgbmNhcnJ5ID0gKG5jYXJyeSArIChsbyA+Pj4gMjYpKSB8IDA7XG5cbiAgICAgICAgaG5jYXJyeSArPSBuY2FycnkgPj4+IDI2O1xuICAgICAgICBuY2FycnkgJj0gMHgzZmZmZmZmO1xuICAgICAgfVxuICAgICAgb3V0LndvcmRzW2tdID0gcndvcmQ7XG4gICAgICBjYXJyeSA9IG5jYXJyeTtcbiAgICAgIG5jYXJyeSA9IGhuY2Fycnk7XG4gICAgfVxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgb3V0LndvcmRzW2tdID0gY2Fycnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5sZW5ndGgtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0LnN0cmlwKCk7XG4gIH1cblxuICBmdW5jdGlvbiBqdW1ib011bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIHZhciBmZnRtID0gbmV3IEZGVE0oKTtcbiAgICByZXR1cm4gZmZ0bS5tdWxwKHNlbGYsIG51bSwgb3V0KTtcbiAgfVxuXG4gIEJOLnByb3RvdHlwZS5tdWxUbyA9IGZ1bmN0aW9uIG11bFRvIChudW0sIG91dCkge1xuICAgIHZhciByZXM7XG4gICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoICsgbnVtLmxlbmd0aDtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEwICYmIG51bS5sZW5ndGggPT09IDEwKSB7XG4gICAgICByZXMgPSBjb21iMTBNdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gICAgfSBlbHNlIGlmIChsZW4gPCA2Mykge1xuICAgICAgcmVzID0gc21hbGxNdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gICAgfSBlbHNlIGlmIChsZW4gPCAxMDI0KSB7XG4gICAgICByZXMgPSBiaWdNdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IGp1bWJvTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgLy8gQ29vbGV5LVR1a2V5IGFsZ29yaXRobSBmb3IgRkZUXG4gIC8vIHNsaWdodGx5IHJldmlzaXRlZCB0byByZWx5IG9uIGxvb3BpbmcgaW5zdGVhZCBvZiByZWN1cnNpb25cblxuICBmdW5jdGlvbiBGRlRNICh4LCB5KSB7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICB9XG5cbiAgRkZUTS5wcm90b3R5cGUubWFrZVJCVCA9IGZ1bmN0aW9uIG1ha2VSQlQgKE4pIHtcbiAgICB2YXIgdCA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgbCA9IEJOLnByb3RvdHlwZS5fY291bnRCaXRzKE4pIC0gMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgdFtpXSA9IHRoaXMucmV2QmluKGksIGwsIE4pO1xuICAgIH1cblxuICAgIHJldHVybiB0O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYmluYXJ5LXJldmVyc2VkIHJlcHJlc2VudGF0aW9uIG9mIGB4YFxuICBGRlRNLnByb3RvdHlwZS5yZXZCaW4gPSBmdW5jdGlvbiByZXZCaW4gKHgsIGwsIE4pIHtcbiAgICBpZiAoeCA9PT0gMCB8fCB4ID09PSBOIC0gMSkgcmV0dXJuIHg7XG5cbiAgICB2YXIgcmIgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICByYiB8PSAoeCAmIDEpIDw8IChsIC0gaSAtIDEpO1xuICAgICAgeCA+Pj0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmI7XG4gIH07XG5cbiAgLy8gUGVyZm9ybXMgXCJ0d2VlZGxpbmdcIiBwaGFzZSwgdGhlcmVmb3JlICdlbXVsYXRpbmcnXG4gIC8vIGJlaGF2aW91ciBvZiB0aGUgcmVjdXJzaXZlIGFsZ29yaXRobVxuICBGRlRNLnByb3RvdHlwZS5wZXJtdXRlID0gZnVuY3Rpb24gcGVybXV0ZSAocmJ0LCByd3MsIGl3cywgcnR3cywgaXR3cywgTikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICBydHdzW2ldID0gcndzW3JidFtpXV07XG4gICAgICBpdHdzW2ldID0gaXdzW3JidFtpXV07XG4gICAgfVxuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIHRyYW5zZm9ybSAocndzLCBpd3MsIHJ0d3MsIGl0d3MsIE4sIHJidCkge1xuICAgIHRoaXMucGVybXV0ZShyYnQsIHJ3cywgaXdzLCBydHdzLCBpdHdzLCBOKTtcblxuICAgIGZvciAodmFyIHMgPSAxOyBzIDwgTjsgcyA8PD0gMSkge1xuICAgICAgdmFyIGwgPSBzIDw8IDE7XG5cbiAgICAgIHZhciBydHdkZiA9IE1hdGguY29zKDIgKiBNYXRoLlBJIC8gbCk7XG4gICAgICB2YXIgaXR3ZGYgPSBNYXRoLnNpbigyICogTWF0aC5QSSAvIGwpO1xuXG4gICAgICBmb3IgKHZhciBwID0gMDsgcCA8IE47IHAgKz0gbCkge1xuICAgICAgICB2YXIgcnR3ZGZfID0gcnR3ZGY7XG4gICAgICAgIHZhciBpdHdkZl8gPSBpdHdkZjtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHM7IGorKykge1xuICAgICAgICAgIHZhciByZSA9IHJ0d3NbcCArIGpdO1xuICAgICAgICAgIHZhciBpZSA9IGl0d3NbcCArIGpdO1xuXG4gICAgICAgICAgdmFyIHJvID0gcnR3c1twICsgaiArIHNdO1xuICAgICAgICAgIHZhciBpbyA9IGl0d3NbcCArIGogKyBzXTtcblxuICAgICAgICAgIHZhciByeCA9IHJ0d2RmXyAqIHJvIC0gaXR3ZGZfICogaW87XG5cbiAgICAgICAgICBpbyA9IHJ0d2RmXyAqIGlvICsgaXR3ZGZfICogcm87XG4gICAgICAgICAgcm8gPSByeDtcblxuICAgICAgICAgIHJ0d3NbcCArIGpdID0gcmUgKyBybztcbiAgICAgICAgICBpdHdzW3AgKyBqXSA9IGllICsgaW87XG5cbiAgICAgICAgICBydHdzW3AgKyBqICsgc10gPSByZSAtIHJvO1xuICAgICAgICAgIGl0d3NbcCArIGogKyBzXSA9IGllIC0gaW87XG5cbiAgICAgICAgICAvKiBqc2hpbnQgbWF4ZGVwdGggOiBmYWxzZSAqL1xuICAgICAgICAgIGlmIChqICE9PSBsKSB7XG4gICAgICAgICAgICByeCA9IHJ0d2RmICogcnR3ZGZfIC0gaXR3ZGYgKiBpdHdkZl87XG5cbiAgICAgICAgICAgIGl0d2RmXyA9IHJ0d2RmICogaXR3ZGZfICsgaXR3ZGYgKiBydHdkZl87XG4gICAgICAgICAgICBydHdkZl8gPSByeDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgRkZUTS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2IgPSBmdW5jdGlvbiBndWVzc0xlbjEzYiAobiwgbSkge1xuICAgIHZhciBOID0gTWF0aC5tYXgobSwgbikgfCAxO1xuICAgIHZhciBvZGQgPSBOICYgMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yIChOID0gTiAvIDIgfCAwOyBOOyBOID0gTiA+Pj4gMSkge1xuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiAxIDw8IGkgKyAxICsgb2RkO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLmNvbmp1Z2F0ZSA9IGZ1bmN0aW9uIGNvbmp1Z2F0ZSAocndzLCBpd3MsIE4pIHtcbiAgICBpZiAoTiA8PSAxKSByZXR1cm47XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE4gLyAyOyBpKyspIHtcbiAgICAgIHZhciB0ID0gcndzW2ldO1xuXG4gICAgICByd3NbaV0gPSByd3NbTiAtIGkgLSAxXTtcbiAgICAgIHJ3c1tOIC0gaSAtIDFdID0gdDtcblxuICAgICAgdCA9IGl3c1tpXTtcblxuICAgICAgaXdzW2ldID0gLWl3c1tOIC0gaSAtIDFdO1xuICAgICAgaXdzW04gLSBpIC0gMV0gPSAtdDtcbiAgICB9XG4gIH07XG5cbiAgRkZUTS5wcm90b3R5cGUubm9ybWFsaXplMTNiID0gZnVuY3Rpb24gbm9ybWFsaXplMTNiICh3cywgTikge1xuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOIC8gMjsgaSsrKSB7XG4gICAgICB2YXIgdyA9IE1hdGgucm91bmQod3NbMiAqIGkgKyAxXSAvIE4pICogMHgyMDAwICtcbiAgICAgICAgTWF0aC5yb3VuZCh3c1syICogaV0gLyBOKSArXG4gICAgICAgIGNhcnJ5O1xuXG4gICAgICB3c1tpXSA9IHcgJiAweDNmZmZmZmY7XG5cbiAgICAgIGlmICh3IDwgMHg0MDAwMDAwKSB7XG4gICAgICAgIGNhcnJ5ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcnJ5ID0gdyAvIDB4NDAwMDAwMCB8IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHdzO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLmNvbnZlcnQxM2IgPSBmdW5jdGlvbiBjb252ZXJ0MTNiICh3cywgbGVuLCByd3MsIE4pIHtcbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNhcnJ5ID0gY2FycnkgKyAod3NbaV0gfCAwKTtcblxuICAgICAgcndzWzIgKiBpXSA9IGNhcnJ5ICYgMHgxZmZmOyBjYXJyeSA9IGNhcnJ5ID4+PiAxMztcbiAgICAgIHJ3c1syICogaSArIDFdID0gY2FycnkgJiAweDFmZmY7IGNhcnJ5ID0gY2FycnkgPj4+IDEzO1xuICAgIH1cblxuICAgIC8vIFBhZCB3aXRoIHplcm9lc1xuICAgIGZvciAoaSA9IDIgKiBsZW47IGkgPCBOOyArK2kpIHtcbiAgICAgIHJ3c1tpXSA9IDA7XG4gICAgfVxuXG4gICAgYXNzZXJ0KGNhcnJ5ID09PSAwKTtcbiAgICBhc3NlcnQoKGNhcnJ5ICYgfjB4MWZmZikgPT09IDApO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLnN0dWIgPSBmdW5jdGlvbiBzdHViIChOKSB7XG4gICAgdmFyIHBoID0gbmV3IEFycmF5KE4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICBwaFtpXSA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBoO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLm11bHAgPSBmdW5jdGlvbiBtdWxwICh4LCB5LCBvdXQpIHtcbiAgICB2YXIgTiA9IDIgKiB0aGlzLmd1ZXNzTGVuMTNiKHgubGVuZ3RoLCB5Lmxlbmd0aCk7XG5cbiAgICB2YXIgcmJ0ID0gdGhpcy5tYWtlUkJUKE4pO1xuXG4gICAgdmFyIF8gPSB0aGlzLnN0dWIoTik7XG5cbiAgICB2YXIgcndzID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciByd3N0ID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciBpd3N0ID0gbmV3IEFycmF5KE4pO1xuXG4gICAgdmFyIG5yd3MgPSBuZXcgQXJyYXkoTik7XG4gICAgdmFyIG5yd3N0ID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciBuaXdzdCA9IG5ldyBBcnJheShOKTtcblxuICAgIHZhciBybXdzID0gb3V0LndvcmRzO1xuICAgIHJtd3MubGVuZ3RoID0gTjtcblxuICAgIHRoaXMuY29udmVydDEzYih4LndvcmRzLCB4Lmxlbmd0aCwgcndzLCBOKTtcbiAgICB0aGlzLmNvbnZlcnQxM2IoeS53b3JkcywgeS5sZW5ndGgsIG5yd3MsIE4pO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0ocndzLCBfLCByd3N0LCBpd3N0LCBOLCByYnQpO1xuICAgIHRoaXMudHJhbnNmb3JtKG5yd3MsIF8sIG5yd3N0LCBuaXdzdCwgTiwgcmJ0KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICB2YXIgcnggPSByd3N0W2ldICogbnJ3c3RbaV0gLSBpd3N0W2ldICogbml3c3RbaV07XG4gICAgICBpd3N0W2ldID0gcndzdFtpXSAqIG5pd3N0W2ldICsgaXdzdFtpXSAqIG5yd3N0W2ldO1xuICAgICAgcndzdFtpXSA9IHJ4O1xuICAgIH1cblxuICAgIHRoaXMuY29uanVnYXRlKHJ3c3QsIGl3c3QsIE4pO1xuICAgIHRoaXMudHJhbnNmb3JtKHJ3c3QsIGl3c3QsIHJtd3MsIF8sIE4sIHJidCk7XG4gICAgdGhpcy5jb25qdWdhdGUocm13cywgXywgTik7XG4gICAgdGhpcy5ub3JtYWxpemUxM2Iocm13cywgTik7XG5cbiAgICBvdXQubmVnYXRpdmUgPSB4Lm5lZ2F0aXZlIF4geS5uZWdhdGl2ZTtcbiAgICBvdXQubGVuZ3RoID0geC5sZW5ndGggKyB5Lmxlbmd0aDtcbiAgICByZXR1cm4gb3V0LnN0cmlwKCk7XG4gIH07XG5cbiAgLy8gTXVsdGlwbHkgYHRoaXNgIGJ5IGBudW1gXG4gIEJOLnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwgKG51bSkge1xuICAgIHZhciBvdXQgPSBuZXcgQk4obnVsbCk7XG4gICAgb3V0LndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoICsgbnVtLmxlbmd0aCk7XG4gICAgcmV0dXJuIHRoaXMubXVsVG8obnVtLCBvdXQpO1xuICB9O1xuXG4gIC8vIE11bHRpcGx5IGVtcGxveWluZyBGRlRcbiAgQk4ucHJvdG90eXBlLm11bGYgPSBmdW5jdGlvbiBtdWxmIChudW0pIHtcbiAgICB2YXIgb3V0ID0gbmV3IEJOKG51bGwpO1xuICAgIG91dC53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCArIG51bS5sZW5ndGgpO1xuICAgIHJldHVybiBqdW1ib011bFRvKHRoaXMsIG51bSwgb3V0KTtcbiAgfTtcblxuICAvLyBJbi1wbGFjZSBNdWx0aXBsaWNhdGlvblxuICBCTi5wcm90b3R5cGUuaW11bCA9IGZ1bmN0aW9uIGltdWwgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkubXVsVG8obnVtLCB0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW11bG4gPSBmdW5jdGlvbiBpbXVsbiAobnVtKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBudW0gPT09ICdudW1iZXInKTtcbiAgICBhc3NlcnQobnVtIDwgMHg0MDAwMDAwKTtcblxuICAgIC8vIENhcnJ5XG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3ID0gKHRoaXMud29yZHNbaV0gfCAwKSAqIG51bTtcbiAgICAgIHZhciBsbyA9ICh3ICYgMHgzZmZmZmZmKSArIChjYXJyeSAmIDB4M2ZmZmZmZik7XG4gICAgICBjYXJyeSA+Pj0gMjY7XG4gICAgICBjYXJyeSArPSAodyAvIDB4NDAwMDAwMCkgfCAwO1xuICAgICAgLy8gTk9URTogbG8gaXMgMjdiaXQgbWF4aW11bVxuICAgICAgY2FycnkgKz0gbG8gPj4+IDI2O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGxvICYgMHgzZmZmZmZmO1xuICAgIH1cblxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGNhcnJ5O1xuICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubXVsbiA9IGZ1bmN0aW9uIG11bG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaW11bG4obnVtKTtcbiAgfTtcblxuICAvLyBgdGhpc2AgKiBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLnNxciA9IGZ1bmN0aW9uIHNxciAoKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsKHRoaXMpO1xuICB9O1xuXG4gIC8vIGB0aGlzYCAqIGB0aGlzYCBpbi1wbGFjZVxuICBCTi5wcm90b3R5cGUuaXNxciA9IGZ1bmN0aW9uIGlzcXIgKCkge1xuICAgIHJldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKTtcbiAgfTtcblxuICAvLyBNYXRoLnBvdyhgdGhpc2AsIGBudW1gKVxuICBCTi5wcm90b3R5cGUucG93ID0gZnVuY3Rpb24gcG93IChudW0pIHtcbiAgICB2YXIgdyA9IHRvQml0QXJyYXkobnVtKTtcbiAgICBpZiAody5sZW5ndGggPT09IDApIHJldHVybiBuZXcgQk4oMSk7XG5cbiAgICAvLyBTa2lwIGxlYWRpbmcgemVyb2VzXG4gICAgdmFyIHJlcyA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3Lmxlbmd0aDsgaSsrLCByZXMgPSByZXMuc3FyKCkpIHtcbiAgICAgIGlmICh3W2ldICE9PSAwKSBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoKytpIDwgdy5sZW5ndGgpIHtcbiAgICAgIGZvciAodmFyIHEgPSByZXMuc3FyKCk7IGkgPCB3Lmxlbmd0aDsgaSsrLCBxID0gcS5zcXIoKSkge1xuICAgICAgICBpZiAod1tpXSA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgcmVzID0gcmVzLm11bChxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vIFNoaWZ0LWxlZnQgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1c2hsbiA9IGZ1bmN0aW9uIGl1c2hsbiAoYml0cykge1xuICAgIGFzc2VydCh0eXBlb2YgYml0cyA9PT0gJ251bWJlcicgJiYgYml0cyA+PSAwKTtcbiAgICB2YXIgciA9IGJpdHMgJSAyNjtcbiAgICB2YXIgcyA9IChiaXRzIC0gcikgLyAyNjtcbiAgICB2YXIgY2FycnlNYXNrID0gKDB4M2ZmZmZmZiA+Pj4gKDI2IC0gcikpIDw8ICgyNiAtIHIpO1xuICAgIHZhciBpO1xuXG4gICAgaWYgKHIgIT09IDApIHtcbiAgICAgIHZhciBjYXJyeSA9IDA7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBuZXdDYXJyeSA9IHRoaXMud29yZHNbaV0gJiBjYXJyeU1hc2s7XG4gICAgICAgIHZhciBjID0gKCh0aGlzLndvcmRzW2ldIHwgMCkgLSBuZXdDYXJyeSkgPDwgcjtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGMgfCBjYXJyeTtcbiAgICAgICAgY2FycnkgPSBuZXdDYXJyeSA+Pj4gKDI2IC0gcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChjYXJyeSkge1xuICAgICAgICB0aGlzLndvcmRzW2ldID0gY2Fycnk7XG4gICAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHMgIT09IDApIHtcbiAgICAgIGZvciAoaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpICsgc10gPSB0aGlzLndvcmRzW2ldO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSAwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxlbmd0aCArPSBzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzaGxuID0gZnVuY3Rpb24gaXNobG4gKGJpdHMpIHtcbiAgICAvLyBUT0RPKGluZHV0bnkpOiBpbXBsZW1lbnQgbWVcbiAgICBhc3NlcnQodGhpcy5uZWdhdGl2ZSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXVzaGxuKGJpdHMpO1xuICB9O1xuXG4gIC8vIFNoaWZ0LXJpZ2h0IGluLXBsYWNlXG4gIC8vIE5PVEU6IGBoaW50YCBpcyBhIGxvd2VzdCBiaXQgYmVmb3JlIHRyYWlsaW5nIHplcm9lc1xuICAvLyBOT1RFOiBpZiBgZXh0ZW5kZWRgIGlzIHByZXNlbnQgLSBpdCB3aWxsIGJlIGZpbGxlZCB3aXRoIGRlc3Ryb3llZCBiaXRzXG4gIEJOLnByb3RvdHlwZS5pdXNocm4gPSBmdW5jdGlvbiBpdXNocm4gKGJpdHMsIGhpbnQsIGV4dGVuZGVkKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXRzID09PSAnbnVtYmVyJyAmJiBiaXRzID49IDApO1xuICAgIHZhciBoO1xuICAgIGlmIChoaW50KSB7XG4gICAgICBoID0gKGhpbnQgLSAoaGludCAlIDI2KSkgLyAyNjtcbiAgICB9IGVsc2Uge1xuICAgICAgaCA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHIgPSBiaXRzICUgMjY7XG4gICAgdmFyIHMgPSBNYXRoLm1pbigoYml0cyAtIHIpIC8gMjYsIHRoaXMubGVuZ3RoKTtcbiAgICB2YXIgbWFzayA9IDB4M2ZmZmZmZiBeICgoMHgzZmZmZmZmID4+PiByKSA8PCByKTtcbiAgICB2YXIgbWFza2VkV29yZHMgPSBleHRlbmRlZDtcblxuICAgIGggLT0gcztcbiAgICBoID0gTWF0aC5tYXgoMCwgaCk7XG5cbiAgICAvLyBFeHRlbmRlZCBtb2RlLCBjb3B5IG1hc2tlZCBwYXJ0XG4gICAgaWYgKG1hc2tlZFdvcmRzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgICAgICBtYXNrZWRXb3Jkcy53b3Jkc1tpXSA9IHRoaXMud29yZHNbaV07XG4gICAgICB9XG4gICAgICBtYXNrZWRXb3Jkcy5sZW5ndGggPSBzO1xuICAgIH1cblxuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAvLyBOby1vcCwgd2Ugc2hvdWxkIG5vdCBtb3ZlIGFueXRoaW5nIGF0IGFsbFxuICAgIH0gZWxzZSBpZiAodGhpcy5sZW5ndGggPiBzKSB7XG4gICAgICB0aGlzLmxlbmd0aCAtPSBzO1xuICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IHRoaXMud29yZHNbaSArIHNdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndvcmRzWzBdID0gMDtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICB9XG5cbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAoaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwICYmIChjYXJyeSAhPT0gMCB8fCBpID49IGgpOyBpLS0pIHtcbiAgICAgIHZhciB3b3JkID0gdGhpcy53b3Jkc1tpXSB8IDA7XG4gICAgICB0aGlzLndvcmRzW2ldID0gKGNhcnJ5IDw8ICgyNiAtIHIpKSB8ICh3b3JkID4+PiByKTtcbiAgICAgIGNhcnJ5ID0gd29yZCAmIG1hc2s7XG4gICAgfVxuXG4gICAgLy8gUHVzaCBjYXJyaWVkIGJpdHMgYXMgYSBtYXNrXG4gICAgaWYgKG1hc2tlZFdvcmRzICYmIGNhcnJ5ICE9PSAwKSB7XG4gICAgICBtYXNrZWRXb3Jkcy53b3Jkc1ttYXNrZWRXb3Jkcy5sZW5ndGgrK10gPSBjYXJyeTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbMF0gPSAwO1xuICAgICAgdGhpcy5sZW5ndGggPSAxO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzaHJuID0gZnVuY3Rpb24gaXNocm4gKGJpdHMsIGhpbnQsIGV4dGVuZGVkKSB7XG4gICAgLy8gVE9ETyhpbmR1dG55KTogaW1wbGVtZW50IG1lXG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDApO1xuICAgIHJldHVybiB0aGlzLml1c2hybihiaXRzLCBoaW50LCBleHRlbmRlZCk7XG4gIH07XG5cbiAgLy8gU2hpZnQtbGVmdFxuICBCTi5wcm90b3R5cGUuc2hsbiA9IGZ1bmN0aW9uIHNobG4gKGJpdHMpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGJpdHMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51c2hsbiA9IGZ1bmN0aW9uIHVzaGxuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oYml0cyk7XG4gIH07XG5cbiAgLy8gU2hpZnQtcmlnaHRcbiAgQk4ucHJvdG90eXBlLnNocm4gPSBmdW5jdGlvbiBzaHJuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihiaXRzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudXNocm4gPSBmdW5jdGlvbiB1c2hybiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGJpdHMpO1xuICB9O1xuXG4gIC8vIFRlc3QgaWYgbiBiaXQgaXMgc2V0XG4gIEJOLnByb3RvdHlwZS50ZXN0biA9IGZ1bmN0aW9uIHRlc3RuIChiaXQpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJpdCA9PT0gJ251bWJlcicgJiYgYml0ID49IDApO1xuICAgIHZhciByID0gYml0ICUgMjY7XG4gICAgdmFyIHMgPSAoYml0IC0gcikgLyAyNjtcbiAgICB2YXIgcSA9IDEgPDwgcjtcblxuICAgIC8vIEZhc3QgY2FzZTogYml0IGlzIG11Y2ggaGlnaGVyIHRoYW4gYWxsIGV4aXN0aW5nIHdvcmRzXG4gICAgaWYgKHRoaXMubGVuZ3RoIDw9IHMpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIGJpdCBhbmQgcmV0dXJuXG4gICAgdmFyIHcgPSB0aGlzLndvcmRzW3NdO1xuXG4gICAgcmV0dXJuICEhKHcgJiBxKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gb25seSBsb3dlcnMgYml0cyBvZiBudW1iZXIgKGluLXBsYWNlKVxuICBCTi5wcm90b3R5cGUuaW1hc2tuID0gZnVuY3Rpb24gaW1hc2tuIChiaXRzKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXRzID09PSAnbnVtYmVyJyAmJiBiaXRzID49IDApO1xuICAgIHZhciByID0gYml0cyAlIDI2O1xuICAgIHZhciBzID0gKGJpdHMgLSByKSAvIDI2O1xuXG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDAsICdpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMnKTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA8PSBzKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiAociAhPT0gMCkge1xuICAgICAgcysrO1xuICAgIH1cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGgubWluKHMsIHRoaXMubGVuZ3RoKTtcblxuICAgIGlmIChyICE9PSAwKSB7XG4gICAgICB2YXIgbWFzayA9IDB4M2ZmZmZmZiBeICgoMHgzZmZmZmZmID4+PiByKSA8PCByKTtcbiAgICAgIHRoaXMud29yZHNbdGhpcy5sZW5ndGggLSAxXSAmPSBtYXNrO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG9ubHkgbG93ZXJzIGJpdHMgb2YgbnVtYmVyXG4gIEJOLnByb3RvdHlwZS5tYXNrbiA9IGZ1bmN0aW9uIG1hc2tuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oYml0cyk7XG4gIH07XG5cbiAgLy8gQWRkIHBsYWluIG51bWJlciBgbnVtYCB0byBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmlhZGRuID0gZnVuY3Rpb24gaWFkZG4gKG51bSkge1xuICAgIGFzc2VydCh0eXBlb2YgbnVtID09PSAnbnVtYmVyJyk7XG4gICAgYXNzZXJ0KG51bSA8IDB4NDAwMDAwMCk7XG4gICAgaWYgKG51bSA8IDApIHJldHVybiB0aGlzLmlzdWJuKC1udW0pO1xuXG4gICAgLy8gUG9zc2libGUgc2lnbiBjaGFuZ2VcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAxICYmICh0aGlzLndvcmRzWzBdIHwgMCkgPCBudW0pIHtcbiAgICAgICAgdGhpcy53b3Jkc1swXSA9IG51bSAtICh0aGlzLndvcmRzWzBdIHwgMCk7XG4gICAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICB0aGlzLmlzdWJuKG51bSk7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRob3V0IGNoZWNrc1xuICAgIHJldHVybiB0aGlzLl9pYWRkbihudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5faWFkZG4gPSBmdW5jdGlvbiBfaWFkZG4gKG51bSkge1xuICAgIHRoaXMud29yZHNbMF0gKz0gbnVtO1xuXG4gICAgLy8gQ2FycnlcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoICYmIHRoaXMud29yZHNbaV0gPj0gMHg0MDAwMDAwOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gLT0gMHg0MDAwMDAwO1xuICAgICAgaWYgKGkgPT09IHRoaXMubGVuZ3RoIC0gMSkge1xuICAgICAgICB0aGlzLndvcmRzW2kgKyAxXSA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLndvcmRzW2kgKyAxXSsrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGgubWF4KHRoaXMubGVuZ3RoLCBpICsgMSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBTdWJ0cmFjdCBwbGFpbiBudW1iZXIgYG51bWAgZnJvbSBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmlzdWJuID0gZnVuY3Rpb24gaXN1Ym4gKG51bSkge1xuICAgIGFzc2VydCh0eXBlb2YgbnVtID09PSAnbnVtYmVyJyk7XG4gICAgYXNzZXJ0KG51bSA8IDB4NDAwMDAwMCk7XG4gICAgaWYgKG51bSA8IDApIHJldHVybiB0aGlzLmlhZGRuKC1udW0pO1xuXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgdGhpcy5pYWRkbihudW0pO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLndvcmRzWzBdIC09IG51bTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLndvcmRzWzBdIDwgMCkge1xuICAgICAgdGhpcy53b3Jkc1swXSA9IC10aGlzLndvcmRzWzBdO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENhcnJ5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoICYmIHRoaXMud29yZHNbaV0gPCAwOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSArPSAweDQwMDAwMDA7XG4gICAgICAgIHRoaXMud29yZHNbaSArIDFdIC09IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuYWRkbiA9IGZ1bmN0aW9uIGFkZG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaWFkZG4obnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuc3VibiA9IGZ1bmN0aW9uIHN1Ym4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4obnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaWFicyA9IGZ1bmN0aW9uIGlhYnMgKCkge1xuICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmFicyA9IGZ1bmN0aW9uIGFicyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pc2hsbnN1Ym11bCA9IGZ1bmN0aW9uIF9pc2hsbnN1Ym11bCAobnVtLCBtdWwsIHNoaWZ0KSB7XG4gICAgdmFyIGxlbiA9IG51bS5sZW5ndGggKyBzaGlmdDtcbiAgICB2YXIgaTtcblxuICAgIHRoaXMuX2V4cGFuZChsZW4pO1xuXG4gICAgdmFyIHc7XG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtLmxlbmd0aDsgaSsrKSB7XG4gICAgICB3ID0gKHRoaXMud29yZHNbaSArIHNoaWZ0XSB8IDApICsgY2Fycnk7XG4gICAgICB2YXIgcmlnaHQgPSAobnVtLndvcmRzW2ldIHwgMCkgKiBtdWw7XG4gICAgICB3IC09IHJpZ2h0ICYgMHgzZmZmZmZmO1xuICAgICAgY2FycnkgPSAodyA+PiAyNikgLSAoKHJpZ2h0IC8gMHg0MDAwMDAwKSB8IDApO1xuICAgICAgdGhpcy53b3Jkc1tpICsgc2hpZnRdID0gdyAmIDB4M2ZmZmZmZjtcbiAgICB9XG4gICAgZm9yICg7IGkgPCB0aGlzLmxlbmd0aCAtIHNoaWZ0OyBpKyspIHtcbiAgICAgIHcgPSAodGhpcy53b3Jkc1tpICsgc2hpZnRdIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gdyA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaSArIHNoaWZ0XSA9IHcgJiAweDNmZmZmZmY7XG4gICAgfVxuXG4gICAgaWYgKGNhcnJ5ID09PSAwKSByZXR1cm4gdGhpcy5zdHJpcCgpO1xuXG4gICAgLy8gU3VidHJhY3Rpb24gb3ZlcmZsb3dcbiAgICBhc3NlcnQoY2FycnkgPT09IC0xKTtcbiAgICBjYXJyeSA9IDA7XG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHcgPSAtKHRoaXMud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgY2FycnkgPSB3ID4+IDI2O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHcgJiAweDNmZmZmZmY7XG4gICAgfVxuICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX3dvcmREaXYgPSBmdW5jdGlvbiBfd29yZERpdiAobnVtLCBtb2RlKSB7XG4gICAgdmFyIHNoaWZ0ID0gdGhpcy5sZW5ndGggLSBudW0ubGVuZ3RoO1xuXG4gICAgdmFyIGEgPSB0aGlzLmNsb25lKCk7XG4gICAgdmFyIGIgPSBudW07XG5cbiAgICAvLyBOb3JtYWxpemVcbiAgICB2YXIgYmhpID0gYi53b3Jkc1tiLmxlbmd0aCAtIDFdIHwgMDtcbiAgICB2YXIgYmhpQml0cyA9IHRoaXMuX2NvdW50Qml0cyhiaGkpO1xuICAgIHNoaWZ0ID0gMjYgLSBiaGlCaXRzO1xuICAgIGlmIChzaGlmdCAhPT0gMCkge1xuICAgICAgYiA9IGIudXNobG4oc2hpZnQpO1xuICAgICAgYS5pdXNobG4oc2hpZnQpO1xuICAgICAgYmhpID0gYi53b3Jkc1tiLmxlbmd0aCAtIDFdIHwgMDtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHF1b3RpZW50XG4gICAgdmFyIG0gPSBhLmxlbmd0aCAtIGIubGVuZ3RoO1xuICAgIHZhciBxO1xuXG4gICAgaWYgKG1vZGUgIT09ICdtb2QnKSB7XG4gICAgICBxID0gbmV3IEJOKG51bGwpO1xuICAgICAgcS5sZW5ndGggPSBtICsgMTtcbiAgICAgIHEud29yZHMgPSBuZXcgQXJyYXkocS5sZW5ndGgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHEud29yZHNbaV0gPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkaWZmID0gYS5jbG9uZSgpLl9pc2hsbnN1Ym11bChiLCAxLCBtKTtcbiAgICBpZiAoZGlmZi5uZWdhdGl2ZSA9PT0gMCkge1xuICAgICAgYSA9IGRpZmY7XG4gICAgICBpZiAocSkge1xuICAgICAgICBxLndvcmRzW21dID0gMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gbSAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICB2YXIgcWogPSAoYS53b3Jkc1tiLmxlbmd0aCArIGpdIHwgMCkgKiAweDQwMDAwMDAgK1xuICAgICAgICAoYS53b3Jkc1tiLmxlbmd0aCArIGogLSAxXSB8IDApO1xuXG4gICAgICAvLyBOT1RFOiAocWogLyBiaGkpIGlzICgweDNmZmZmZmYgKiAweDQwMDAwMDAgKyAweDNmZmZmZmYpIC8gMHgyMDAwMDAwIG1heFxuICAgICAgLy8gKDB4N2ZmZmZmZilcbiAgICAgIHFqID0gTWF0aC5taW4oKHFqIC8gYmhpKSB8IDAsIDB4M2ZmZmZmZik7XG5cbiAgICAgIGEuX2lzaGxuc3VibXVsKGIsIHFqLCBqKTtcbiAgICAgIHdoaWxlIChhLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICAgIHFqLS07XG4gICAgICAgIGEubmVnYXRpdmUgPSAwO1xuICAgICAgICBhLl9pc2hsbnN1Ym11bChiLCAxLCBqKTtcbiAgICAgICAgaWYgKCFhLmlzWmVybygpKSB7XG4gICAgICAgICAgYS5uZWdhdGl2ZSBePSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocSkge1xuICAgICAgICBxLndvcmRzW2pdID0gcWo7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChxKSB7XG4gICAgICBxLnN0cmlwKCk7XG4gICAgfVxuICAgIGEuc3RyaXAoKTtcblxuICAgIC8vIERlbm9ybWFsaXplXG4gICAgaWYgKG1vZGUgIT09ICdkaXYnICYmIHNoaWZ0ICE9PSAwKSB7XG4gICAgICBhLml1c2hybihzaGlmdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpdjogcSB8fCBudWxsLFxuICAgICAgbW9kOiBhXG4gICAgfTtcbiAgfTtcblxuICAvLyBOT1RFOiAxKSBgbW9kZWAgY2FuIGJlIHNldCB0byBgbW9kYCB0byByZXF1ZXN0IG1vZCBvbmx5LFxuICAvLyAgICAgICB0byBgZGl2YCB0byByZXF1ZXN0IGRpdiBvbmx5LCBvciBiZSBhYnNlbnQgdG9cbiAgLy8gICAgICAgcmVxdWVzdCBib3RoIGRpdiAmIG1vZFxuICAvLyAgICAgICAyKSBgcG9zaXRpdmVgIGlzIHRydWUgaWYgdW5zaWduZWQgbW9kIGlzIHJlcXVlc3RlZFxuICBCTi5wcm90b3R5cGUuZGl2bW9kID0gZnVuY3Rpb24gZGl2bW9kIChudW0sIG1vZGUsIHBvc2l0aXZlKSB7XG4gICAgYXNzZXJ0KCFudW0uaXNaZXJvKCkpO1xuXG4gICAgaWYgKHRoaXMuaXNaZXJvKCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogbmV3IEJOKDApLFxuICAgICAgICBtb2Q6IG5ldyBCTigwKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGl2LCBtb2QsIHJlcztcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCAmJiBudW0ubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIHJlcyA9IHRoaXMubmVnKCkuZGl2bW9kKG51bSwgbW9kZSk7XG5cbiAgICAgIGlmIChtb2RlICE9PSAnbW9kJykge1xuICAgICAgICBkaXYgPSByZXMuZGl2Lm5lZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kZSAhPT0gJ2RpdicpIHtcbiAgICAgICAgbW9kID0gcmVzLm1vZC5uZWcoKTtcbiAgICAgICAgaWYgKHBvc2l0aXZlICYmIG1vZC5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICAgIG1vZC5pYWRkKG51bSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGl2OiBkaXYsXG4gICAgICAgIG1vZDogbW9kXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5lZ2F0aXZlID09PSAwICYmIG51bS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgcmVzID0gdGhpcy5kaXZtb2QobnVtLm5lZygpLCBtb2RlKTtcblxuICAgICAgaWYgKG1vZGUgIT09ICdtb2QnKSB7XG4gICAgICAgIGRpdiA9IHJlcy5kaXYubmVnKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogZGl2LFxuICAgICAgICBtb2Q6IHJlcy5tb2RcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCh0aGlzLm5lZ2F0aXZlICYgbnVtLm5lZ2F0aXZlKSAhPT0gMCkge1xuICAgICAgcmVzID0gdGhpcy5uZWcoKS5kaXZtb2QobnVtLm5lZygpLCBtb2RlKTtcblxuICAgICAgaWYgKG1vZGUgIT09ICdkaXYnKSB7XG4gICAgICAgIG1vZCA9IHJlcy5tb2QubmVnKCk7XG4gICAgICAgIGlmIChwb3NpdGl2ZSAmJiBtb2QubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgICBtb2QuaXN1YihudW0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogcmVzLmRpdixcbiAgICAgICAgbW9kOiBtb2RcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQm90aCBudW1iZXJzIGFyZSBwb3NpdGl2ZSBhdCB0aGlzIHBvaW50XG5cbiAgICAvLyBTdHJpcCBib3RoIG51bWJlcnMgdG8gYXBwcm94aW1hdGUgc2hpZnQgdmFsdWVcbiAgICBpZiAobnVtLmxlbmd0aCA+IHRoaXMubGVuZ3RoIHx8IHRoaXMuY21wKG51bSkgPCAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IG5ldyBCTigwKSxcbiAgICAgICAgbW9kOiB0aGlzXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFZlcnkgc2hvcnQgcmVkdWN0aW9uXG4gICAgaWYgKG51bS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGlmIChtb2RlID09PSAnZGl2Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRpdjogdGhpcy5kaXZuKG51bS53b3Jkc1swXSksXG4gICAgICAgICAgbW9kOiBudWxsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2RlID09PSAnbW9kJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRpdjogbnVsbCxcbiAgICAgICAgICBtb2Q6IG5ldyBCTih0aGlzLm1vZG4obnVtLndvcmRzWzBdKSlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGl2OiB0aGlzLmRpdm4obnVtLndvcmRzWzBdKSxcbiAgICAgICAgbW9kOiBuZXcgQk4odGhpcy5tb2RuKG51bS53b3Jkc1swXSkpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl93b3JkRGl2KG51bSwgbW9kZSk7XG4gIH07XG5cbiAgLy8gRmluZCBgdGhpc2AgLyBgbnVtYFxuICBCTi5wcm90b3R5cGUuZGl2ID0gZnVuY3Rpb24gZGl2IChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5kaXZtb2QobnVtLCAnZGl2JywgZmFsc2UpLmRpdjtcbiAgfTtcblxuICAvLyBGaW5kIGB0aGlzYCAlIGBudW1gXG4gIEJOLnByb3RvdHlwZS5tb2QgPSBmdW5jdGlvbiBtb2QgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmRpdm1vZChudW0sICdtb2QnLCBmYWxzZSkubW9kO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51bW9kID0gZnVuY3Rpb24gdW1vZCAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZGl2bW9kKG51bSwgJ21vZCcsIHRydWUpLm1vZDtcbiAgfTtcblxuICAvLyBGaW5kIFJvdW5kKGB0aGlzYCAvIGBudW1gKVxuICBCTi5wcm90b3R5cGUuZGl2Um91bmQgPSBmdW5jdGlvbiBkaXZSb3VuZCAobnVtKSB7XG4gICAgdmFyIGRtID0gdGhpcy5kaXZtb2QobnVtKTtcblxuICAgIC8vIEZhc3QgY2FzZSAtIGV4YWN0IGRpdmlzaW9uXG4gICAgaWYgKGRtLm1vZC5pc1plcm8oKSkgcmV0dXJuIGRtLmRpdjtcblxuICAgIHZhciBtb2QgPSBkbS5kaXYubmVnYXRpdmUgIT09IDAgPyBkbS5tb2QuaXN1YihudW0pIDogZG0ubW9kO1xuXG4gICAgdmFyIGhhbGYgPSBudW0udXNocm4oMSk7XG4gICAgdmFyIHIyID0gbnVtLmFuZGxuKDEpO1xuICAgIHZhciBjbXAgPSBtb2QuY21wKGhhbGYpO1xuXG4gICAgLy8gUm91bmQgZG93blxuICAgIGlmIChjbXAgPCAwIHx8IHIyID09PSAxICYmIGNtcCA9PT0gMCkgcmV0dXJuIGRtLmRpdjtcblxuICAgIC8vIFJvdW5kIHVwXG4gICAgcmV0dXJuIGRtLmRpdi5uZWdhdGl2ZSAhPT0gMCA/IGRtLmRpdi5pc3VibigxKSA6IGRtLmRpdi5pYWRkbigxKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubW9kbiA9IGZ1bmN0aW9uIG1vZG4gKG51bSkge1xuICAgIGFzc2VydChudW0gPD0gMHgzZmZmZmZmKTtcbiAgICB2YXIgcCA9ICgxIDw8IDI2KSAlIG51bTtcblxuICAgIHZhciBhY2MgPSAwO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBhY2MgPSAocCAqIGFjYyArICh0aGlzLndvcmRzW2ldIHwgMCkpICUgbnVtO1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH07XG5cbiAgLy8gSW4tcGxhY2UgZGl2aXNpb24gYnkgbnVtYmVyXG4gIEJOLnByb3RvdHlwZS5pZGl2biA9IGZ1bmN0aW9uIGlkaXZuIChudW0pIHtcbiAgICBhc3NlcnQobnVtIDw9IDB4M2ZmZmZmZik7XG5cbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgdyA9ICh0aGlzLndvcmRzW2ldIHwgMCkgKyBjYXJyeSAqIDB4NDAwMDAwMDtcbiAgICAgIHRoaXMud29yZHNbaV0gPSAodyAvIG51bSkgfCAwO1xuICAgICAgY2FycnkgPSB3ICUgbnVtO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmRpdm4gPSBmdW5jdGlvbiBkaXZuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmVnY2QgPSBmdW5jdGlvbiBlZ2NkIChwKSB7XG4gICAgYXNzZXJ0KHAubmVnYXRpdmUgPT09IDApO1xuICAgIGFzc2VydCghcC5pc1plcm8oKSk7XG5cbiAgICB2YXIgeCA9IHRoaXM7XG4gICAgdmFyIHkgPSBwLmNsb25lKCk7XG5cbiAgICBpZiAoeC5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgeCA9IHgudW1vZChwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgeCA9IHguY2xvbmUoKTtcbiAgICB9XG5cbiAgICAvLyBBICogeCArIEIgKiB5ID0geFxuICAgIHZhciBBID0gbmV3IEJOKDEpO1xuICAgIHZhciBCID0gbmV3IEJOKDApO1xuXG4gICAgLy8gQyAqIHggKyBEICogeSA9IHlcbiAgICB2YXIgQyA9IG5ldyBCTigwKTtcbiAgICB2YXIgRCA9IG5ldyBCTigxKTtcblxuICAgIHZhciBnID0gMDtcblxuICAgIHdoaWxlICh4LmlzRXZlbigpICYmIHkuaXNFdmVuKCkpIHtcbiAgICAgIHguaXVzaHJuKDEpO1xuICAgICAgeS5pdXNocm4oMSk7XG4gICAgICArK2c7XG4gICAgfVxuXG4gICAgdmFyIHlwID0geS5jbG9uZSgpO1xuICAgIHZhciB4cCA9IHguY2xvbmUoKTtcblxuICAgIHdoaWxlICgheC5pc1plcm8oKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGltID0gMTsgKHgud29yZHNbMF0gJiBpbSkgPT09IDAgJiYgaSA8IDI2OyArK2ksIGltIDw8PSAxKTtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICB4Lml1c2hybihpKTtcbiAgICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgICBpZiAoQS5pc09kZCgpIHx8IEIuaXNPZGQoKSkge1xuICAgICAgICAgICAgQS5pYWRkKHlwKTtcbiAgICAgICAgICAgIEIuaXN1Yih4cCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQS5pdXNocm4oMSk7XG4gICAgICAgICAgQi5pdXNocm4oMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaiA9IDAsIGptID0gMTsgKHkud29yZHNbMF0gJiBqbSkgPT09IDAgJiYgaiA8IDI2OyArK2osIGptIDw8PSAxKTtcbiAgICAgIGlmIChqID4gMCkge1xuICAgICAgICB5Lml1c2hybihqKTtcbiAgICAgICAgd2hpbGUgKGotLSA+IDApIHtcbiAgICAgICAgICBpZiAoQy5pc09kZCgpIHx8IEQuaXNPZGQoKSkge1xuICAgICAgICAgICAgQy5pYWRkKHlwKTtcbiAgICAgICAgICAgIEQuaXN1Yih4cCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQy5pdXNocm4oMSk7XG4gICAgICAgICAgRC5pdXNocm4oMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHguY21wKHkpID49IDApIHtcbiAgICAgICAgeC5pc3ViKHkpO1xuICAgICAgICBBLmlzdWIoQyk7XG4gICAgICAgIEIuaXN1YihEKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHkuaXN1Yih4KTtcbiAgICAgICAgQy5pc3ViKEEpO1xuICAgICAgICBELmlzdWIoQik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGE6IEMsXG4gICAgICBiOiBELFxuICAgICAgZ2NkOiB5Lml1c2hsbihnKVxuICAgIH07XG4gIH07XG5cbiAgLy8gVGhpcyBpcyByZWR1Y2VkIGluY2FybmF0aW9uIG9mIHRoZSBiaW5hcnkgRUVBXG4gIC8vIGFib3ZlLCBkZXNpZ25hdGVkIHRvIGludmVydCBtZW1iZXJzIG9mIHRoZVxuICAvLyBfcHJpbWVfIGZpZWxkcyBGKHApIGF0IGEgbWF4aW1hbCBzcGVlZFxuICBCTi5wcm90b3R5cGUuX2ludm1wID0gZnVuY3Rpb24gX2ludm1wIChwKSB7XG4gICAgYXNzZXJ0KHAubmVnYXRpdmUgPT09IDApO1xuICAgIGFzc2VydCghcC5pc1plcm8oKSk7XG5cbiAgICB2YXIgYSA9IHRoaXM7XG4gICAgdmFyIGIgPSBwLmNsb25lKCk7XG5cbiAgICBpZiAoYS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgYSA9IGEudW1vZChwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IGEuY2xvbmUoKTtcbiAgICB9XG5cbiAgICB2YXIgeDEgPSBuZXcgQk4oMSk7XG4gICAgdmFyIHgyID0gbmV3IEJOKDApO1xuXG4gICAgdmFyIGRlbHRhID0gYi5jbG9uZSgpO1xuXG4gICAgd2hpbGUgKGEuY21wbigxKSA+IDAgJiYgYi5jbXBuKDEpID4gMCkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGltID0gMTsgKGEud29yZHNbMF0gJiBpbSkgPT09IDAgJiYgaSA8IDI2OyArK2ksIGltIDw8PSAxKTtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBhLml1c2hybihpKTtcbiAgICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgICBpZiAoeDEuaXNPZGQoKSkge1xuICAgICAgICAgICAgeDEuaWFkZChkZWx0YSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgeDEuaXVzaHJuKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGogPSAwLCBqbSA9IDE7IChiLndvcmRzWzBdICYgam0pID09PSAwICYmIGogPCAyNjsgKytqLCBqbSA8PD0gMSk7XG4gICAgICBpZiAoaiA+IDApIHtcbiAgICAgICAgYi5pdXNocm4oaik7XG4gICAgICAgIHdoaWxlIChqLS0gPiAwKSB7XG4gICAgICAgICAgaWYgKHgyLmlzT2RkKCkpIHtcbiAgICAgICAgICAgIHgyLmlhZGQoZGVsdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHgyLml1c2hybigxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYS5jbXAoYikgPj0gMCkge1xuICAgICAgICBhLmlzdWIoYik7XG4gICAgICAgIHgxLmlzdWIoeDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYi5pc3ViKGEpO1xuICAgICAgICB4Mi5pc3ViKHgxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzO1xuICAgIGlmIChhLmNtcG4oMSkgPT09IDApIHtcbiAgICAgIHJlcyA9IHgxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSB4MjtcbiAgICB9XG5cbiAgICBpZiAocmVzLmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMuaWFkZChwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5nY2QgPSBmdW5jdGlvbiBnY2QgKG51bSkge1xuICAgIGlmICh0aGlzLmlzWmVybygpKSByZXR1cm4gbnVtLmFicygpO1xuICAgIGlmIChudW0uaXNaZXJvKCkpIHJldHVybiB0aGlzLmFicygpO1xuXG4gICAgdmFyIGEgPSB0aGlzLmNsb25lKCk7XG4gICAgdmFyIGIgPSBudW0uY2xvbmUoKTtcbiAgICBhLm5lZ2F0aXZlID0gMDtcbiAgICBiLm5lZ2F0aXZlID0gMDtcblxuICAgIC8vIFJlbW92ZSBjb21tb24gZmFjdG9yIG9mIHR3b1xuICAgIGZvciAodmFyIHNoaWZ0ID0gMDsgYS5pc0V2ZW4oKSAmJiBiLmlzRXZlbigpOyBzaGlmdCsrKSB7XG4gICAgICBhLml1c2hybigxKTtcbiAgICAgIGIuaXVzaHJuKDEpO1xuICAgIH1cblxuICAgIGRvIHtcbiAgICAgIHdoaWxlIChhLmlzRXZlbigpKSB7XG4gICAgICAgIGEuaXVzaHJuKDEpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKGIuaXNFdmVuKCkpIHtcbiAgICAgICAgYi5pdXNocm4oMSk7XG4gICAgICB9XG5cbiAgICAgIHZhciByID0gYS5jbXAoYik7XG4gICAgICBpZiAociA8IDApIHtcbiAgICAgICAgLy8gU3dhcCBgYWAgYW5kIGBiYCB0byBtYWtlIGBhYCBhbHdheXMgYmlnZ2VyIHRoYW4gYGJgXG4gICAgICAgIHZhciB0ID0gYTtcbiAgICAgICAgYSA9IGI7XG4gICAgICAgIGIgPSB0O1xuICAgICAgfSBlbHNlIGlmIChyID09PSAwIHx8IGIuY21wbigxKSA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgYS5pc3ViKGIpO1xuICAgIH0gd2hpbGUgKHRydWUpO1xuXG4gICAgcmV0dXJuIGIuaXVzaGxuKHNoaWZ0KTtcbiAgfTtcblxuICAvLyBJbnZlcnQgbnVtYmVyIGluIHRoZSBmaWVsZCBGKG51bSlcbiAgQk4ucHJvdG90eXBlLmludm0gPSBmdW5jdGlvbiBpbnZtIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5lZ2NkKG51bSkuYS51bW9kKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzRXZlbiA9IGZ1bmN0aW9uIGlzRXZlbiAoKSB7XG4gICAgcmV0dXJuICh0aGlzLndvcmRzWzBdICYgMSkgPT09IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzT2RkID0gZnVuY3Rpb24gaXNPZGQgKCkge1xuICAgIHJldHVybiAodGhpcy53b3Jkc1swXSAmIDEpID09PSAxO1xuICB9O1xuXG4gIC8vIEFuZCBmaXJzdCB3b3JkIGFuZCBudW1cbiAgQk4ucHJvdG90eXBlLmFuZGxuID0gZnVuY3Rpb24gYW5kbG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLndvcmRzWzBdICYgbnVtO1xuICB9O1xuXG4gIC8vIEluY3JlbWVudCBhdCB0aGUgYml0IHBvc2l0aW9uIGluLWxpbmVcbiAgQk4ucHJvdG90eXBlLmJpbmNuID0gZnVuY3Rpb24gYmluY24gKGJpdCkge1xuICAgIGFzc2VydCh0eXBlb2YgYml0ID09PSAnbnVtYmVyJyk7XG4gICAgdmFyIHIgPSBiaXQgJSAyNjtcbiAgICB2YXIgcyA9IChiaXQgLSByKSAvIDI2O1xuICAgIHZhciBxID0gMSA8PCByO1xuXG4gICAgLy8gRmFzdCBjYXNlOiBiaXQgaXMgbXVjaCBoaWdoZXIgdGhhbiBhbGwgZXhpc3Rpbmcgd29yZHNcbiAgICBpZiAodGhpcy5sZW5ndGggPD0gcykge1xuICAgICAgdGhpcy5fZXhwYW5kKHMgKyAxKTtcbiAgICAgIHRoaXMud29yZHNbc10gfD0gcTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBiaXQgYW5kIHByb3BhZ2F0ZSwgaWYgbmVlZGVkXG4gICAgdmFyIGNhcnJ5ID0gcTtcbiAgICBmb3IgKHZhciBpID0gczsgY2FycnkgIT09IDAgJiYgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3ID0gdGhpcy53b3Jkc1tpXSB8IDA7XG4gICAgICB3ICs9IGNhcnJ5O1xuICAgICAgY2FycnkgPSB3ID4+PiAyNjtcbiAgICAgIHcgJj0gMHgzZmZmZmZmO1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHc7XG4gICAgfVxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGNhcnJ5O1xuICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzWmVybyA9IGZ1bmN0aW9uIGlzWmVybyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVuZ3RoID09PSAxICYmIHRoaXMud29yZHNbMF0gPT09IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmNtcG4gPSBmdW5jdGlvbiBjbXBuIChudW0pIHtcbiAgICB2YXIgbmVnYXRpdmUgPSBudW0gPCAwO1xuXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgIW5lZ2F0aXZlKSByZXR1cm4gLTE7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgPT09IDAgJiYgbmVnYXRpdmUpIHJldHVybiAxO1xuXG4gICAgdGhpcy5zdHJpcCgpO1xuXG4gICAgdmFyIHJlcztcbiAgICBpZiAodGhpcy5sZW5ndGggPiAxKSB7XG4gICAgICByZXMgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmVnYXRpdmUpIHtcbiAgICAgICAgbnVtID0gLW51bTtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KG51bSA8PSAweDNmZmZmZmYsICdOdW1iZXIgaXMgdG9vIGJpZycpO1xuXG4gICAgICB2YXIgdyA9IHRoaXMud29yZHNbMF0gfCAwO1xuICAgICAgcmVzID0gdyA9PT0gbnVtID8gMCA6IHcgPCBudW0gPyAtMSA6IDE7XG4gICAgfVxuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSByZXR1cm4gLXJlcyB8IDA7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvLyBDb21wYXJlIHR3byBudW1iZXJzIGFuZCByZXR1cm46XG4gIC8vIDEgLSBpZiBgdGhpc2AgPiBgbnVtYFxuICAvLyAwIC0gaWYgYHRoaXNgID09IGBudW1gXG4gIC8vIC0xIC0gaWYgYHRoaXNgIDwgYG51bWBcbiAgQk4ucHJvdG90eXBlLmNtcCA9IGZ1bmN0aW9uIGNtcCAobnVtKSB7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgbnVtLm5lZ2F0aXZlID09PSAwKSByZXR1cm4gLTE7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgPT09IDAgJiYgbnVtLm5lZ2F0aXZlICE9PSAwKSByZXR1cm4gMTtcblxuICAgIHZhciByZXMgPSB0aGlzLnVjbXAobnVtKTtcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkgcmV0dXJuIC1yZXMgfCAwO1xuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgLy8gVW5zaWduZWQgY29tcGFyaXNvblxuICBCTi5wcm90b3R5cGUudWNtcCA9IGZ1bmN0aW9uIHVjbXAgKG51bSkge1xuICAgIC8vIEF0IHRoaXMgcG9pbnQgYm90aCBudW1iZXJzIGhhdmUgdGhlIHNhbWUgc2lnblxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiAxO1xuICAgIGlmICh0aGlzLmxlbmd0aCA8IG51bS5sZW5ndGgpIHJldHVybiAtMTtcblxuICAgIHZhciByZXMgPSAwO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgYSA9IHRoaXMud29yZHNbaV0gfCAwO1xuICAgICAgdmFyIGIgPSBudW0ud29yZHNbaV0gfCAwO1xuXG4gICAgICBpZiAoYSA9PT0gYikgY29udGludWU7XG4gICAgICBpZiAoYSA8IGIpIHtcbiAgICAgICAgcmVzID0gLTE7XG4gICAgICB9IGVsc2UgaWYgKGEgPiBiKSB7XG4gICAgICAgIHJlcyA9IDE7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZ3RuID0gZnVuY3Rpb24gZ3RuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPT09IDE7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmd0ID0gZnVuY3Rpb24gZ3QgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcChudW0pID09PSAxO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ndGVuID0gZnVuY3Rpb24gZ3RlbiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pID49IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmd0ZSA9IGZ1bmN0aW9uIGd0ZSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPj0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubHRuID0gZnVuY3Rpb24gbHRuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPT09IC0xO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5sdCA9IGZ1bmN0aW9uIGx0IChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXAobnVtKSA9PT0gLTE7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmx0ZW4gPSBmdW5jdGlvbiBsdGVuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPD0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubHRlID0gZnVuY3Rpb24gbHRlIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXAobnVtKSA8PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5lcW4gPSBmdW5jdGlvbiBlcW4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcG4obnVtKSA9PT0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPT09IDA7XG4gIH07XG5cbiAgLy9cbiAgLy8gQSByZWR1Y2UgY29udGV4dCwgY291bGQgYmUgdXNpbmcgbW9udGdvbWVyeSBvciBzb21ldGhpbmcgYmV0dGVyLCBkZXBlbmRpbmdcbiAgLy8gb24gdGhlIGBtYCBpdHNlbGYuXG4gIC8vXG4gIEJOLnJlZCA9IGZ1bmN0aW9uIHJlZCAobnVtKSB7XG4gICAgcmV0dXJuIG5ldyBSZWQobnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9SZWQgPSBmdW5jdGlvbiB0b1JlZCAoY3R4KSB7XG4gICAgYXNzZXJ0KCF0aGlzLnJlZCwgJ0FscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQnKTtcbiAgICBhc3NlcnQodGhpcy5uZWdhdGl2ZSA9PT0gMCwgJ3JlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzJyk7XG4gICAgcmV0dXJuIGN0eC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGN0eCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmZyb21SZWQgPSBmdW5jdGlvbiBmcm9tUmVkICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0Jyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5fZm9yY2VSZWQgPSBmdW5jdGlvbiBfZm9yY2VSZWQgKGN0eCkge1xuICAgIHRoaXMucmVkID0gY3R4O1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5mb3JjZVJlZCA9IGZ1bmN0aW9uIGZvcmNlUmVkIChjdHgpIHtcbiAgICBhc3NlcnQoIXRoaXMucmVkLCAnQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCcpO1xuICAgIHJldHVybiB0aGlzLl9mb3JjZVJlZChjdHgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRBZGQgPSBmdW5jdGlvbiByZWRBZGQgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuYWRkKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZElBZGQgPSBmdW5jdGlvbiByZWRJQWRkIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pYWRkKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFN1YiA9IGZ1bmN0aW9uIHJlZFN1YiAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5zdWIodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkSVN1YiA9IGZ1bmN0aW9uIHJlZElTdWIgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmlzdWIodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkU2hsID0gZnVuY3Rpb24gcmVkU2hsIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLnNobCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRNdWwgPSBmdW5jdGlvbiByZWRNdWwgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLCBudW0pO1xuICAgIHJldHVybiB0aGlzLnJlZC5tdWwodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkSU11bCA9IGZ1bmN0aW9uIHJlZElNdWwgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLCBudW0pO1xuICAgIHJldHVybiB0aGlzLnJlZC5pbXVsKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFNxciA9IGZ1bmN0aW9uIHJlZFNxciAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5zcXIodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZElTcXIgPSBmdW5jdGlvbiByZWRJU3FyICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pc3FyKHRoaXMpO1xuICB9O1xuXG4gIC8vIFNxdWFyZSByb290IG92ZXIgcFxuICBCTi5wcm90b3R5cGUucmVkU3FydCA9IGZ1bmN0aW9uIHJlZFNxcnQgKCkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLnNxcnQodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZEludm0gPSBmdW5jdGlvbiByZWRJbnZtICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pbnZtKHRoaXMpO1xuICB9O1xuXG4gIC8vIFJldHVybiBuZWdhdGl2ZSBjbG9uZSBvZiBgdGhpc2AgJSBgcmVkIG1vZHVsb2BcbiAgQk4ucHJvdG90eXBlLnJlZE5lZyA9IGZ1bmN0aW9uIHJlZE5lZyAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5uZWcodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFBvdyA9IGZ1bmN0aW9uIHJlZFBvdyAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkICYmICFudW0ucmVkLCAncmVkUG93KG5vcm1hbE51bSknKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQucG93KHRoaXMsIG51bSk7XG4gIH07XG5cbiAgLy8gUHJpbWUgbnVtYmVycyB3aXRoIGVmZmljaWVudCByZWR1Y3Rpb25cbiAgdmFyIHByaW1lcyA9IHtcbiAgICBrMjU2OiBudWxsLFxuICAgIHAyMjQ6IG51bGwsXG4gICAgcDE5MjogbnVsbCxcbiAgICBwMjU1MTk6IG51bGxcbiAgfTtcblxuICAvLyBQc2V1ZG8tTWVyc2VubmUgcHJpbWVcbiAgZnVuY3Rpb24gTVByaW1lIChuYW1lLCBwKSB7XG4gICAgLy8gUCA9IDIgXiBOIC0gS1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5wID0gbmV3IEJOKHAsIDE2KTtcbiAgICB0aGlzLm4gPSB0aGlzLnAuYml0TGVuZ3RoKCk7XG4gICAgdGhpcy5rID0gbmV3IEJOKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKTtcblxuICAgIHRoaXMudG1wID0gdGhpcy5fdG1wKCk7XG4gIH1cblxuICBNUHJpbWUucHJvdG90eXBlLl90bXAgPSBmdW5jdGlvbiBfdG1wICgpIHtcbiAgICB2YXIgdG1wID0gbmV3IEJOKG51bGwpO1xuICAgIHRtcC53b3JkcyA9IG5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uIC8gMTMpKTtcbiAgICByZXR1cm4gdG1wO1xuICB9O1xuXG4gIE1QcmltZS5wcm90b3R5cGUuaXJlZHVjZSA9IGZ1bmN0aW9uIGlyZWR1Y2UgKG51bSkge1xuICAgIC8vIEFzc3VtZXMgdGhhdCBgbnVtYCBpcyBsZXNzIHRoYW4gYFBeMmBcbiAgICAvLyBudW0gPSBISSAqICgyIF4gTiAtIEspICsgSEkgKiBLICsgTE8gPSBISSAqIEsgKyBMTyAobW9kIFApXG4gICAgdmFyIHIgPSBudW07XG4gICAgdmFyIHJsZW47XG5cbiAgICBkbyB7XG4gICAgICB0aGlzLnNwbGl0KHIsIHRoaXMudG1wKTtcbiAgICAgIHIgPSB0aGlzLmltdWxLKHIpO1xuICAgICAgciA9IHIuaWFkZCh0aGlzLnRtcCk7XG4gICAgICBybGVuID0gci5iaXRMZW5ndGgoKTtcbiAgICB9IHdoaWxlIChybGVuID4gdGhpcy5uKTtcblxuICAgIHZhciBjbXAgPSBybGVuIDwgdGhpcy5uID8gLTEgOiByLnVjbXAodGhpcy5wKTtcbiAgICBpZiAoY21wID09PSAwKSB7XG4gICAgICByLndvcmRzWzBdID0gMDtcbiAgICAgIHIubGVuZ3RoID0gMTtcbiAgICB9IGVsc2UgaWYgKGNtcCA+IDApIHtcbiAgICAgIHIuaXN1Yih0aGlzLnApO1xuICAgIH0gZWxzZSB7XG4gICAgICByLnN0cmlwKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgTVByaW1lLnByb3RvdHlwZS5zcGxpdCA9IGZ1bmN0aW9uIHNwbGl0IChpbnB1dCwgb3V0KSB7XG4gICAgaW5wdXQuaXVzaHJuKHRoaXMubiwgMCwgb3V0KTtcbiAgfTtcblxuICBNUHJpbWUucHJvdG90eXBlLmltdWxLID0gZnVuY3Rpb24gaW11bEsgKG51bSkge1xuICAgIHJldHVybiBudW0uaW11bCh0aGlzLmspO1xuICB9O1xuXG4gIGZ1bmN0aW9uIEsyNTYgKCkge1xuICAgIE1QcmltZS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgICdrMjU2JyxcbiAgICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZicpO1xuICB9XG4gIGluaGVyaXRzKEsyNTYsIE1QcmltZSk7XG5cbiAgSzI1Ni5wcm90b3R5cGUuc3BsaXQgPSBmdW5jdGlvbiBzcGxpdCAoaW5wdXQsIG91dHB1dCkge1xuICAgIC8vIDI1NiA9IDkgKiAyNiArIDIyXG4gICAgdmFyIG1hc2sgPSAweDNmZmZmZjtcblxuICAgIHZhciBvdXRMZW4gPSBNYXRoLm1pbihpbnB1dC5sZW5ndGgsIDkpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0TGVuOyBpKyspIHtcbiAgICAgIG91dHB1dC53b3Jkc1tpXSA9IGlucHV0LndvcmRzW2ldO1xuICAgIH1cbiAgICBvdXRwdXQubGVuZ3RoID0gb3V0TGVuO1xuXG4gICAgaWYgKGlucHV0Lmxlbmd0aCA8PSA5KSB7XG4gICAgICBpbnB1dC53b3Jkc1swXSA9IDA7XG4gICAgICBpbnB1dC5sZW5ndGggPSAxO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNoaWZ0IGJ5IDkgbGltYnNcbiAgICB2YXIgcHJldiA9IGlucHV0LndvcmRzWzldO1xuICAgIG91dHB1dC53b3Jkc1tvdXRwdXQubGVuZ3RoKytdID0gcHJldiAmIG1hc2s7XG5cbiAgICBmb3IgKGkgPSAxMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmV4dCA9IGlucHV0LndvcmRzW2ldIHwgMDtcbiAgICAgIGlucHV0LndvcmRzW2kgLSAxMF0gPSAoKG5leHQgJiBtYXNrKSA8PCA0KSB8IChwcmV2ID4+PiAyMik7XG4gICAgICBwcmV2ID0gbmV4dDtcbiAgICB9XG4gICAgcHJldiA+Pj49IDIyO1xuICAgIGlucHV0LndvcmRzW2kgLSAxMF0gPSBwcmV2O1xuICAgIGlmIChwcmV2ID09PSAwICYmIGlucHV0Lmxlbmd0aCA+IDEwKSB7XG4gICAgICBpbnB1dC5sZW5ndGggLT0gMTA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0Lmxlbmd0aCAtPSA5O1xuICAgIH1cbiAgfTtcblxuICBLMjU2LnByb3RvdHlwZS5pbXVsSyA9IGZ1bmN0aW9uIGltdWxLIChudW0pIHtcbiAgICAvLyBLID0gMHgxMDAwMDAzZDEgPSBbIDB4NDAsIDB4M2QxIF1cbiAgICBudW0ud29yZHNbbnVtLmxlbmd0aF0gPSAwO1xuICAgIG51bS53b3Jkc1tudW0ubGVuZ3RoICsgMV0gPSAwO1xuICAgIG51bS5sZW5ndGggKz0gMjtcblxuICAgIC8vIGJvdW5kZWQgYXQ6IDB4NDAgKiAweDNmZmZmZmYgKyAweDNkMCA9IDB4MTAwMDAwMzkwXG4gICAgdmFyIGxvID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHcgPSBudW0ud29yZHNbaV0gfCAwO1xuICAgICAgbG8gKz0gdyAqIDB4M2QxO1xuICAgICAgbnVtLndvcmRzW2ldID0gbG8gJiAweDNmZmZmZmY7XG4gICAgICBsbyA9IHcgKiAweDQwICsgKChsbyAvIDB4NDAwMDAwMCkgfCAwKTtcbiAgICB9XG5cbiAgICAvLyBGYXN0IGxlbmd0aCByZWR1Y3Rpb25cbiAgICBpZiAobnVtLndvcmRzW251bS5sZW5ndGggLSAxXSA9PT0gMCkge1xuICAgICAgbnVtLmxlbmd0aC0tO1xuICAgICAgaWYgKG51bS53b3Jkc1tudW0ubGVuZ3RoIC0gMV0gPT09IDApIHtcbiAgICAgICAgbnVtLmxlbmd0aC0tO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVtO1xuICB9O1xuXG4gIGZ1bmN0aW9uIFAyMjQgKCkge1xuICAgIE1QcmltZS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgICdwMjI0JyxcbiAgICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMScpO1xuICB9XG4gIGluaGVyaXRzKFAyMjQsIE1QcmltZSk7XG5cbiAgZnVuY3Rpb24gUDE5MiAoKSB7XG4gICAgTVByaW1lLmNhbGwoXG4gICAgICB0aGlzLFxuICAgICAgJ3AxOTInLFxuICAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmJyk7XG4gIH1cbiAgaW5oZXJpdHMoUDE5MiwgTVByaW1lKTtcblxuICBmdW5jdGlvbiBQMjU1MTkgKCkge1xuICAgIC8vIDIgXiAyNTUgLSAxOVxuICAgIE1QcmltZS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgICcyNTUxOScsXG4gICAgICAnN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCcpO1xuICB9XG4gIGluaGVyaXRzKFAyNTUxOSwgTVByaW1lKTtcblxuICBQMjU1MTkucHJvdG90eXBlLmltdWxLID0gZnVuY3Rpb24gaW11bEsgKG51bSkge1xuICAgIC8vIEsgPSAweDEzXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhpID0gKG51bS53b3Jkc1tpXSB8IDApICogMHgxMyArIGNhcnJ5O1xuICAgICAgdmFyIGxvID0gaGkgJiAweDNmZmZmZmY7XG4gICAgICBoaSA+Pj49IDI2O1xuXG4gICAgICBudW0ud29yZHNbaV0gPSBsbztcbiAgICAgIGNhcnJ5ID0gaGk7XG4gICAgfVxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgbnVtLndvcmRzW251bS5sZW5ndGgrK10gPSBjYXJyeTtcbiAgICB9XG4gICAgcmV0dXJuIG51bTtcbiAgfTtcblxuICAvLyBFeHBvcnRlZCBtb3N0bHkgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHVzZSBwbGFpbiBuYW1lIGluc3RlYWRcbiAgQk4uX3ByaW1lID0gZnVuY3Rpb24gcHJpbWUgKG5hbWUpIHtcbiAgICAvLyBDYWNoZWQgdmVyc2lvbiBvZiBwcmltZVxuICAgIGlmIChwcmltZXNbbmFtZV0pIHJldHVybiBwcmltZXNbbmFtZV07XG5cbiAgICB2YXIgcHJpbWU7XG4gICAgaWYgKG5hbWUgPT09ICdrMjU2Jykge1xuICAgICAgcHJpbWUgPSBuZXcgSzI1NigpO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3AyMjQnKSB7XG4gICAgICBwcmltZSA9IG5ldyBQMjI0KCk7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAncDE5MicpIHtcbiAgICAgIHByaW1lID0gbmV3IFAxOTIoKTtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdwMjU1MTknKSB7XG4gICAgICBwcmltZSA9IG5ldyBQMjU1MTkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHByaW1lICcgKyBuYW1lKTtcbiAgICB9XG4gICAgcHJpbWVzW25hbWVdID0gcHJpbWU7XG5cbiAgICByZXR1cm4gcHJpbWU7XG4gIH07XG5cbiAgLy9cbiAgLy8gQmFzZSByZWR1Y3Rpb24gZW5naW5lXG4gIC8vXG4gIGZ1bmN0aW9uIFJlZCAobSkge1xuICAgIGlmICh0eXBlb2YgbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhciBwcmltZSA9IEJOLl9wcmltZShtKTtcbiAgICAgIHRoaXMubSA9IHByaW1lLnA7XG4gICAgICB0aGlzLnByaW1lID0gcHJpbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChtLmd0bigxKSwgJ21vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMScpO1xuICAgICAgdGhpcy5tID0gbTtcbiAgICAgIHRoaXMucHJpbWUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIFJlZC5wcm90b3R5cGUuX3ZlcmlmeTEgPSBmdW5jdGlvbiBfdmVyaWZ5MSAoYSkge1xuICAgIGFzc2VydChhLm5lZ2F0aXZlID09PSAwLCAncmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMnKTtcbiAgICBhc3NlcnQoYS5yZWQsICdyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5fdmVyaWZ5MiA9IGZ1bmN0aW9uIF92ZXJpZnkyIChhLCBiKSB7XG4gICAgYXNzZXJ0KChhLm5lZ2F0aXZlIHwgYi5uZWdhdGl2ZSkgPT09IDAsICdyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcycpO1xuICAgIGFzc2VydChhLnJlZCAmJiBhLnJlZCA9PT0gYi5yZWQsXG4gICAgICAncmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuaW1vZCA9IGZ1bmN0aW9uIGltb2QgKGEpIHtcbiAgICBpZiAodGhpcy5wcmltZSkgcmV0dXJuIHRoaXMucHJpbWUuaXJlZHVjZShhKS5fZm9yY2VSZWQodGhpcyk7XG4gICAgcmV0dXJuIGEudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uIG5lZyAoYSkge1xuICAgIGlmIChhLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4gYS5jbG9uZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm0uc3ViKGEpLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG5cbiAgICB2YXIgcmVzID0gYS5hZGQoYik7XG4gICAgaWYgKHJlcy5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMuaXN1Yih0aGlzLm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmlhZGQgPSBmdW5jdGlvbiBpYWRkIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcblxuICAgIHZhciByZXMgPSBhLmlhZGQoYik7XG4gICAgaWYgKHJlcy5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMuaXN1Yih0aGlzLm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuc3ViID0gZnVuY3Rpb24gc3ViIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcblxuICAgIHZhciByZXMgPSBhLnN1YihiKTtcbiAgICBpZiAocmVzLmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMuaWFkZCh0aGlzLm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmlzdWIgPSBmdW5jdGlvbiBpc3ViIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcblxuICAgIHZhciByZXMgPSBhLmlzdWIoYik7XG4gICAgaWYgKHJlcy5jbXBuKDApIDwgMCkge1xuICAgICAgcmVzLmlhZGQodGhpcy5tKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLnNobCA9IGZ1bmN0aW9uIHNobCAoYSwgbnVtKSB7XG4gICAgdGhpcy5fdmVyaWZ5MShhKTtcbiAgICByZXR1cm4gdGhpcy5pbW9kKGEudXNobG4obnVtKSk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pbXVsID0gZnVuY3Rpb24gaW11bCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG4gICAgcmV0dXJuIHRoaXMuaW1vZChhLmltdWwoYikpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcbiAgICByZXR1cm4gdGhpcy5pbW9kKGEubXVsKGIpKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmlzcXIgPSBmdW5jdGlvbiBpc3FyIChhKSB7XG4gICAgcmV0dXJuIHRoaXMuaW11bChhLCBhLmNsb25lKCkpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuc3FyID0gZnVuY3Rpb24gc3FyIChhKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsKGEsIGEpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuc3FydCA9IGZ1bmN0aW9uIHNxcnQgKGEpIHtcbiAgICBpZiAoYS5pc1plcm8oKSkgcmV0dXJuIGEuY2xvbmUoKTtcblxuICAgIHZhciBtb2QzID0gdGhpcy5tLmFuZGxuKDMpO1xuICAgIGFzc2VydChtb2QzICUgMiA9PT0gMSk7XG5cbiAgICAvLyBGYXN0IGNhc2VcbiAgICBpZiAobW9kMyA9PT0gMykge1xuICAgICAgdmFyIHBvdyA9IHRoaXMubS5hZGQobmV3IEJOKDEpKS5pdXNocm4oMik7XG4gICAgICByZXR1cm4gdGhpcy5wb3coYSwgcG93KTtcbiAgICB9XG5cbiAgICAvLyBUb25lbGxpLVNoYW5rcyBhbGdvcml0aG0gKFRvdGFsbHkgdW5vcHRpbWl6ZWQgYW5kIHNsb3cpXG4gICAgLy9cbiAgICAvLyBGaW5kIFEgYW5kIFMsIHRoYXQgUSAqIDIgXiBTID0gKFAgLSAxKVxuICAgIHZhciBxID0gdGhpcy5tLnN1Ym4oMSk7XG4gICAgdmFyIHMgPSAwO1xuICAgIHdoaWxlICghcS5pc1plcm8oKSAmJiBxLmFuZGxuKDEpID09PSAwKSB7XG4gICAgICBzKys7XG4gICAgICBxLml1c2hybigxKTtcbiAgICB9XG4gICAgYXNzZXJ0KCFxLmlzWmVybygpKTtcblxuICAgIHZhciBvbmUgPSBuZXcgQk4oMSkudG9SZWQodGhpcyk7XG4gICAgdmFyIG5PbmUgPSBvbmUucmVkTmVnKCk7XG5cbiAgICAvLyBGaW5kIHF1YWRyYXRpYyBub24tcmVzaWR1ZVxuICAgIC8vIE5PVEU6IE1heCBpcyBzdWNoIGJlY2F1c2Ugb2YgZ2VuZXJhbGl6ZWQgUmllbWFubiBoeXBvdGhlc2lzLlxuICAgIHZhciBscG93ID0gdGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpO1xuICAgIHZhciB6ID0gdGhpcy5tLmJpdExlbmd0aCgpO1xuICAgIHogPSBuZXcgQk4oMiAqIHogKiB6KS50b1JlZCh0aGlzKTtcblxuICAgIHdoaWxlICh0aGlzLnBvdyh6LCBscG93KS5jbXAobk9uZSkgIT09IDApIHtcbiAgICAgIHoucmVkSUFkZChuT25lKTtcbiAgICB9XG5cbiAgICB2YXIgYyA9IHRoaXMucG93KHosIHEpO1xuICAgIHZhciByID0gdGhpcy5wb3coYSwgcS5hZGRuKDEpLml1c2hybigxKSk7XG4gICAgdmFyIHQgPSB0aGlzLnBvdyhhLCBxKTtcbiAgICB2YXIgbSA9IHM7XG4gICAgd2hpbGUgKHQuY21wKG9uZSkgIT09IDApIHtcbiAgICAgIHZhciB0bXAgPSB0O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IHRtcC5jbXAob25lKSAhPT0gMDsgaSsrKSB7XG4gICAgICAgIHRtcCA9IHRtcC5yZWRTcXIoKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChpIDwgbSk7XG4gICAgICB2YXIgYiA9IHRoaXMucG93KGMsIG5ldyBCTigxKS5pdXNobG4obSAtIGkgLSAxKSk7XG5cbiAgICAgIHIgPSByLnJlZE11bChiKTtcbiAgICAgIGMgPSBiLnJlZFNxcigpO1xuICAgICAgdCA9IHQucmVkTXVsKGMpO1xuICAgICAgbSA9IGk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pbnZtID0gZnVuY3Rpb24gaW52bSAoYSkge1xuICAgIHZhciBpbnYgPSBhLl9pbnZtcCh0aGlzLm0pO1xuICAgIGlmIChpbnYubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIGludi5uZWdhdGl2ZSA9IDA7XG4gICAgICByZXR1cm4gdGhpcy5pbW9kKGludikucmVkTmVnKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmltb2QoaW52KTtcbiAgICB9XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5wb3cgPSBmdW5jdGlvbiBwb3cgKGEsIG51bSkge1xuICAgIGlmIChudW0uaXNaZXJvKCkpIHJldHVybiBuZXcgQk4oMSk7XG4gICAgaWYgKG51bS5jbXBuKDEpID09PSAwKSByZXR1cm4gYS5jbG9uZSgpO1xuXG4gICAgdmFyIHdpbmRvd1NpemUgPSA0O1xuICAgIHZhciB3bmQgPSBuZXcgQXJyYXkoMSA8PCB3aW5kb3dTaXplKTtcbiAgICB3bmRbMF0gPSBuZXcgQk4oMSkudG9SZWQodGhpcyk7XG4gICAgd25kWzFdID0gYTtcbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IHduZC5sZW5ndGg7IGkrKykge1xuICAgICAgd25kW2ldID0gdGhpcy5tdWwod25kW2kgLSAxXSwgYSk7XG4gICAgfVxuXG4gICAgdmFyIHJlcyA9IHduZFswXTtcbiAgICB2YXIgY3VycmVudCA9IDA7XG4gICAgdmFyIGN1cnJlbnRMZW4gPSAwO1xuICAgIHZhciBzdGFydCA9IG51bS5iaXRMZW5ndGgoKSAlIDI2O1xuICAgIGlmIChzdGFydCA9PT0gMCkge1xuICAgICAgc3RhcnQgPSAyNjtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSBudW0ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciB3b3JkID0gbnVtLndvcmRzW2ldO1xuICAgICAgZm9yICh2YXIgaiA9IHN0YXJ0IC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgdmFyIGJpdCA9ICh3b3JkID4+IGopICYgMTtcbiAgICAgICAgaWYgKHJlcyAhPT0gd25kWzBdKSB7XG4gICAgICAgICAgcmVzID0gdGhpcy5zcXIocmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiaXQgPT09IDAgJiYgY3VycmVudCA9PT0gMCkge1xuICAgICAgICAgIGN1cnJlbnRMZW4gPSAwO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudCA8PD0gMTtcbiAgICAgICAgY3VycmVudCB8PSBiaXQ7XG4gICAgICAgIGN1cnJlbnRMZW4rKztcbiAgICAgICAgaWYgKGN1cnJlbnRMZW4gIT09IHdpbmRvd1NpemUgJiYgKGkgIT09IDAgfHwgaiAhPT0gMCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIHJlcyA9IHRoaXMubXVsKHJlcywgd25kW2N1cnJlbnRdKTtcbiAgICAgICAgY3VycmVudExlbiA9IDA7XG4gICAgICAgIGN1cnJlbnQgPSAwO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSAyNjtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuY29udmVydFRvID0gZnVuY3Rpb24gY29udmVydFRvIChudW0pIHtcbiAgICB2YXIgciA9IG51bS51bW9kKHRoaXMubSk7XG5cbiAgICByZXR1cm4gciA9PT0gbnVtID8gci5jbG9uZSgpIDogcjtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmNvbnZlcnRGcm9tID0gZnVuY3Rpb24gY29udmVydEZyb20gKG51bSkge1xuICAgIHZhciByZXMgPSBudW0uY2xvbmUoKTtcbiAgICByZXMucmVkID0gbnVsbDtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vXG4gIC8vIE1vbnRnb21lcnkgbWV0aG9kIGVuZ2luZVxuICAvL1xuXG4gIEJOLm1vbnQgPSBmdW5jdGlvbiBtb250IChudW0pIHtcbiAgICByZXR1cm4gbmV3IE1vbnQobnVtKTtcbiAgfTtcblxuICBmdW5jdGlvbiBNb250IChtKSB7XG4gICAgUmVkLmNhbGwodGhpcywgbSk7XG5cbiAgICB0aGlzLnNoaWZ0ID0gdGhpcy5tLmJpdExlbmd0aCgpO1xuICAgIGlmICh0aGlzLnNoaWZ0ICUgMjYgIT09IDApIHtcbiAgICAgIHRoaXMuc2hpZnQgKz0gMjYgLSAodGhpcy5zaGlmdCAlIDI2KTtcbiAgICB9XG5cbiAgICB0aGlzLnIgPSBuZXcgQk4oMSkuaXVzaGxuKHRoaXMuc2hpZnQpO1xuICAgIHRoaXMucjIgPSB0aGlzLmltb2QodGhpcy5yLnNxcigpKTtcbiAgICB0aGlzLnJpbnYgPSB0aGlzLnIuX2ludm1wKHRoaXMubSk7XG5cbiAgICB0aGlzLm1pbnYgPSB0aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSk7XG4gICAgdGhpcy5taW52ID0gdGhpcy5taW52LnVtb2QodGhpcy5yKTtcbiAgICB0aGlzLm1pbnYgPSB0aGlzLnIuc3ViKHRoaXMubWludik7XG4gIH1cbiAgaW5oZXJpdHMoTW9udCwgUmVkKTtcblxuICBNb250LnByb3RvdHlwZS5jb252ZXJ0VG8gPSBmdW5jdGlvbiBjb252ZXJ0VG8gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmltb2QobnVtLnVzaGxuKHRoaXMuc2hpZnQpKTtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5jb252ZXJ0RnJvbSA9IGZ1bmN0aW9uIGNvbnZlcnRGcm9tIChudW0pIHtcbiAgICB2YXIgciA9IHRoaXMuaW1vZChudW0ubXVsKHRoaXMucmludikpO1xuICAgIHIucmVkID0gbnVsbDtcbiAgICByZXR1cm4gcjtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5pbXVsID0gZnVuY3Rpb24gaW11bCAoYSwgYikge1xuICAgIGlmIChhLmlzWmVybygpIHx8IGIuaXNaZXJvKCkpIHtcbiAgICAgIGEud29yZHNbMF0gPSAwO1xuICAgICAgYS5sZW5ndGggPSAxO1xuICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgdmFyIHQgPSBhLmltdWwoYik7XG4gICAgdmFyIGMgPSB0Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKTtcbiAgICB2YXIgdSA9IHQuaXN1YihjKS5pdXNocm4odGhpcy5zaGlmdCk7XG4gICAgdmFyIHJlcyA9IHU7XG5cbiAgICBpZiAodS5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMgPSB1LmlzdWIodGhpcy5tKTtcbiAgICB9IGVsc2UgaWYgKHUuY21wbigwKSA8IDApIHtcbiAgICAgIHJlcyA9IHUuaWFkZCh0aGlzLm0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xuXG4gIE1vbnQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bCAoYSwgYikge1xuICAgIGlmIChhLmlzWmVybygpIHx8IGIuaXNaZXJvKCkpIHJldHVybiBuZXcgQk4oMCkuX2ZvcmNlUmVkKHRoaXMpO1xuXG4gICAgdmFyIHQgPSBhLm11bChiKTtcbiAgICB2YXIgYyA9IHQubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pO1xuICAgIHZhciB1ID0gdC5pc3ViKGMpLml1c2hybih0aGlzLnNoaWZ0KTtcbiAgICB2YXIgcmVzID0gdTtcbiAgICBpZiAodS5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMgPSB1LmlzdWIodGhpcy5tKTtcbiAgICB9IGVsc2UgaWYgKHUuY21wbigwKSA8IDApIHtcbiAgICAgIHJlcyA9IHUuaWFkZCh0aGlzLm0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xuXG4gIE1vbnQucHJvdG90eXBlLmludm0gPSBmdW5jdGlvbiBpbnZtIChhKSB7XG4gICAgLy8gKEFSKV4tMSAqIFJeMiA9IChBXi0xICogUl4tMSkgKiBSXjIgPSBBXi0xICogUlxuICAgIHZhciByZXMgPSB0aGlzLmltb2QoYS5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpO1xuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xufSkodHlwZW9mIG1vZHVsZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbW9kdWxlLCB0aGlzKTtcbiIsInZhciByO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJhbmQobGVuKSB7XG4gIGlmICghcilcbiAgICByID0gbmV3IFJhbmQobnVsbCk7XG5cbiAgcmV0dXJuIHIuZ2VuZXJhdGUobGVuKTtcbn07XG5cbmZ1bmN0aW9uIFJhbmQocmFuZCkge1xuICB0aGlzLnJhbmQgPSByYW5kO1xufVxubW9kdWxlLmV4cG9ydHMuUmFuZCA9IFJhbmQ7XG5cblJhbmQucHJvdG90eXBlLmdlbmVyYXRlID0gZnVuY3Rpb24gZ2VuZXJhdGUobGVuKSB7XG4gIHJldHVybiB0aGlzLl9yYW5kKGxlbik7XG59O1xuXG4vLyBFbXVsYXRlIGNyeXB0byBBUEkgdXNpbmcgcmFuZHlcblJhbmQucHJvdG90eXBlLl9yYW5kID0gZnVuY3Rpb24gX3JhbmQobikge1xuICBpZiAodGhpcy5yYW5kLmdldEJ5dGVzKVxuICAgIHJldHVybiB0aGlzLnJhbmQuZ2V0Qnl0ZXMobik7XG5cbiAgdmFyIHJlcyA9IG5ldyBVaW50OEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkrKylcbiAgICByZXNbaV0gPSB0aGlzLnJhbmQuZ2V0Qnl0ZSgpO1xuICByZXR1cm4gcmVzO1xufTtcblxuaWYgKHR5cGVvZiBzZWxmID09PSAnb2JqZWN0Jykge1xuICBpZiAoc2VsZi5jcnlwdG8gJiYgc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gTW9kZXJuIGJyb3dzZXJzXG4gICAgUmFuZC5wcm90b3R5cGUuX3JhbmQgPSBmdW5jdGlvbiBfcmFuZChuKSB7XG4gICAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkobik7XG4gICAgICBzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYXJyKTtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfTtcbiAgfSBlbHNlIGlmIChzZWxmLm1zQ3J5cHRvICYmIHNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gSUVcbiAgICBSYW5kLnByb3RvdHlwZS5fcmFuZCA9IGZ1bmN0aW9uIF9yYW5kKG4pIHtcbiAgICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheShuKTtcbiAgICAgIHNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycik7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH07XG5cbiAgLy8gU2FmYXJpJ3MgV2ViV29ya2VycyBkbyBub3QgaGF2ZSBgY3J5cHRvYFxuICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gT2xkIGp1bmtcbiAgICBSYW5kLnByb3RvdHlwZS5fcmFuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQgeWV0Jyk7XG4gICAgfTtcbiAgfVxufSBlbHNlIHtcbiAgLy8gTm9kZS5qcyBvciBXZWIgd29ya2VyIHdpdGggbm8gY3J5cHRvIHN1cHBvcnRcbiAgdHJ5IHtcbiAgICB2YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG4gICAgaWYgKHR5cGVvZiBjcnlwdG8ucmFuZG9tQnl0ZXMgIT09ICdmdW5jdGlvbicpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBzdXBwb3J0ZWQnKTtcblxuICAgIFJhbmQucHJvdG90eXBlLl9yYW5kID0gZnVuY3Rpb24gX3JhbmQobikge1xuICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21CeXRlcyhuKTtcbiAgICB9O1xuICB9IGNhdGNoIChlKSB7XG4gIH1cbn1cbiIsIiIsIi8vIGJhc2VkIG9uIHRoZSBhZXMgaW1wbGltZW50YXRpb24gaW4gdHJpcGxlIHNlY1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2tleWJhc2UvdHJpcGxlc2VjXG5cbi8vIHdoaWNoIGlzIGluIHR1cm4gYmFzZWQgb24gdGhlIG9uZSBmcm9tIGNyeXB0by1qc1xuLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvXG5cbnZhciB1aW50X21heCA9IE1hdGgucG93KDIsIDMyKVxuZnVuY3Rpb24gZml4dXBfdWludDMyICh4KSB7XG4gIHZhciByZXQsIHhfcG9zXG4gIHJldCA9IHggPiB1aW50X21heCB8fCB4IDwgMCA/ICh4X3BvcyA9IE1hdGguYWJzKHgpICUgdWludF9tYXgsIHggPCAwID8gdWludF9tYXggLSB4X3BvcyA6IHhfcG9zKSA6IHhcbiAgcmV0dXJuIHJldFxufVxuZnVuY3Rpb24gc2NydWJfdmVjICh2KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdi5sZW5ndGg7IHYrKykge1xuICAgIHZbaV0gPSAwXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIEdsb2JhbCAoKSB7XG4gIHRoaXMuU0JPWCA9IFtdXG4gIHRoaXMuSU5WX1NCT1ggPSBbXVxuICB0aGlzLlNVQl9NSVggPSBbW10sIFtdLCBbXSwgW11dXG4gIHRoaXMuSU5WX1NVQl9NSVggPSBbW10sIFtdLCBbXSwgW11dXG4gIHRoaXMuaW5pdCgpXG4gIHRoaXMuUkNPTiA9IFsweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDFiLCAweDM2XVxufVxuXG5HbG9iYWwucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBkLCBpLCBzeCwgdCwgeCwgeDIsIHg0LCB4OCwgeGksIF9pXG4gIGQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBfaSwgX3Jlc3VsdHNcbiAgICBfcmVzdWx0cyA9IFtdXG4gICAgZm9yIChpID0gX2kgPSAwOyBfaSA8IDI1NjsgaSA9ICsrX2kpIHtcbiAgICAgIGlmIChpIDwgMTI4KSB7XG4gICAgICAgIF9yZXN1bHRzLnB1c2goaSA8PCAxKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3Jlc3VsdHMucHVzaCgoaSA8PCAxKSBeIDB4MTFiKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX3Jlc3VsdHNcbiAgfSkoKVxuICB4ID0gMFxuICB4aSA9IDBcbiAgZm9yIChpID0gX2kgPSAwOyBfaSA8IDI1NjsgaSA9ICsrX2kpIHtcbiAgICBzeCA9IHhpIF4gKHhpIDw8IDEpIF4gKHhpIDw8IDIpIF4gKHhpIDw8IDMpIF4gKHhpIDw8IDQpXG4gICAgc3ggPSAoc3ggPj4+IDgpIF4gKHN4ICYgMHhmZikgXiAweDYzXG4gICAgdGhpcy5TQk9YW3hdID0gc3hcbiAgICB0aGlzLklOVl9TQk9YW3N4XSA9IHhcbiAgICB4MiA9IGRbeF1cbiAgICB4NCA9IGRbeDJdXG4gICAgeDggPSBkW3g0XVxuICAgIHQgPSAoZFtzeF0gKiAweDEwMSkgXiAoc3ggKiAweDEwMTAxMDApXG4gICAgdGhpcy5TVUJfTUlYWzBdW3hdID0gKHQgPDwgMjQpIHwgKHQgPj4+IDgpXG4gICAgdGhpcy5TVUJfTUlYWzFdW3hdID0gKHQgPDwgMTYpIHwgKHQgPj4+IDE2KVxuICAgIHRoaXMuU1VCX01JWFsyXVt4XSA9ICh0IDw8IDgpIHwgKHQgPj4+IDI0KVxuICAgIHRoaXMuU1VCX01JWFszXVt4XSA9IHRcbiAgICB0ID0gKHg4ICogMHgxMDEwMTAxKSBeICh4NCAqIDB4MTAwMDEpIF4gKHgyICogMHgxMDEpIF4gKHggKiAweDEwMTAxMDApXG4gICAgdGhpcy5JTlZfU1VCX01JWFswXVtzeF0gPSAodCA8PCAyNCkgfCAodCA+Pj4gOClcbiAgICB0aGlzLklOVl9TVUJfTUlYWzFdW3N4XSA9ICh0IDw8IDE2KSB8ICh0ID4+PiAxNilcbiAgICB0aGlzLklOVl9TVUJfTUlYWzJdW3N4XSA9ICh0IDw8IDgpIHwgKHQgPj4+IDI0KVxuICAgIHRoaXMuSU5WX1NVQl9NSVhbM11bc3hdID0gdFxuICAgIGlmICh4ID09PSAwKSB7XG4gICAgICB4ID0geGkgPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSB4MiBeIGRbZFtkW3g4IF4geDJdXV1cbiAgICAgIHhpIF49IGRbZFt4aV1dXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbnZhciBHID0gbmV3IEdsb2JhbCgpXG5cbkFFUy5ibG9ja1NpemUgPSA0ICogNFxuXG5BRVMucHJvdG90eXBlLmJsb2NrU2l6ZSA9IEFFUy5ibG9ja1NpemVcblxuQUVTLmtleVNpemUgPSAyNTYgLyA4XG5cbkFFUy5wcm90b3R5cGUua2V5U2l6ZSA9IEFFUy5rZXlTaXplXG5cbmZ1bmN0aW9uIGJ1ZmZlclRvQXJyYXkgKGJ1Zikge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aCAvIDRcbiAgdmFyIG91dCA9IG5ldyBBcnJheShsZW4pXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIG91dFtpXSA9IGJ1Zi5yZWFkVUludDMyQkUoaSAqIDQpXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuZnVuY3Rpb24gQUVTIChrZXkpIHtcbiAgdGhpcy5fa2V5ID0gYnVmZmVyVG9BcnJheShrZXkpXG4gIHRoaXMuX2RvUmVzZXQoKVxufVxuXG5BRVMucHJvdG90eXBlLl9kb1Jlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaW52S3NSb3csIGtleVNpemUsIGtleVdvcmRzLCBrc1Jvdywga3NSb3dzLCB0XG4gIGtleVdvcmRzID0gdGhpcy5fa2V5XG4gIGtleVNpemUgPSBrZXlXb3Jkcy5sZW5ndGhcbiAgdGhpcy5fblJvdW5kcyA9IGtleVNpemUgKyA2XG4gIGtzUm93cyA9ICh0aGlzLl9uUm91bmRzICsgMSkgKiA0XG4gIHRoaXMuX2tleVNjaGVkdWxlID0gW11cbiAgZm9yIChrc1JvdyA9IDA7IGtzUm93IDwga3NSb3dzOyBrc1JvdysrKSB7XG4gICAgdGhpcy5fa2V5U2NoZWR1bGVba3NSb3ddID0ga3NSb3cgPCBrZXlTaXplID8ga2V5V29yZHNba3NSb3ddIDogKHQgPSB0aGlzLl9rZXlTY2hlZHVsZVtrc1JvdyAtIDFdLCAoa3NSb3cgJSBrZXlTaXplKSA9PT0gMCA/ICh0ID0gKHQgPDwgOCkgfCAodCA+Pj4gMjQpLCB0ID0gKEcuU0JPWFt0ID4+PiAyNF0gPDwgMjQpIHwgKEcuU0JPWFsodCA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKEcuU0JPWFsodCA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IEcuU0JPWFt0ICYgMHhmZl0sIHQgXj0gRy5SQ09OWyhrc1JvdyAvIGtleVNpemUpIHwgMF0gPDwgMjQpIDoga2V5U2l6ZSA+IDYgJiYga3NSb3cgJSBrZXlTaXplID09PSA0ID8gdCA9IChHLlNCT1hbdCA+Pj4gMjRdIDw8IDI0KSB8IChHLlNCT1hbKHQgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChHLlNCT1hbKHQgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBHLlNCT1hbdCAmIDB4ZmZdIDogdm9pZCAwLCB0aGlzLl9rZXlTY2hlZHVsZVtrc1JvdyAtIGtleVNpemVdIF4gdClcbiAgfVxuICB0aGlzLl9pbnZLZXlTY2hlZHVsZSA9IFtdXG4gIGZvciAoaW52S3NSb3cgPSAwOyBpbnZLc1JvdyA8IGtzUm93czsgaW52S3NSb3crKykge1xuICAgIGtzUm93ID0ga3NSb3dzIC0gaW52S3NSb3dcbiAgICB0ID0gdGhpcy5fa2V5U2NoZWR1bGVba3NSb3cgLSAoaW52S3NSb3cgJSA0ID8gMCA6IDQpXVxuICAgIHRoaXMuX2ludktleVNjaGVkdWxlW2ludktzUm93XSA9IGludktzUm93IDwgNCB8fCBrc1JvdyA8PSA0ID8gdCA6IEcuSU5WX1NVQl9NSVhbMF1bRy5TQk9YW3QgPj4+IDI0XV0gXiBHLklOVl9TVUJfTUlYWzFdW0cuU0JPWFsodCA+Pj4gMTYpICYgMHhmZl1dIF4gRy5JTlZfU1VCX01JWFsyXVtHLlNCT1hbKHQgPj4+IDgpICYgMHhmZl1dIF4gRy5JTlZfU1VCX01JWFszXVtHLlNCT1hbdCAmIDB4ZmZdXVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbkFFUy5wcm90b3R5cGUuZW5jcnlwdEJsb2NrID0gZnVuY3Rpb24gKE0pIHtcbiAgTSA9IGJ1ZmZlclRvQXJyYXkobmV3IEJ1ZmZlcihNKSlcbiAgdmFyIG91dCA9IHRoaXMuX2RvQ3J5cHRCbG9jayhNLCB0aGlzLl9rZXlTY2hlZHVsZSwgRy5TVUJfTUlYLCBHLlNCT1gpXG4gIHZhciBidWYgPSBuZXcgQnVmZmVyKDE2KVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMF0sIDApXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFsxXSwgNClcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzJdLCA4KVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbM10sIDEyKVxuICByZXR1cm4gYnVmXG59XG5cbkFFUy5wcm90b3R5cGUuZGVjcnlwdEJsb2NrID0gZnVuY3Rpb24gKE0pIHtcbiAgTSA9IGJ1ZmZlclRvQXJyYXkobmV3IEJ1ZmZlcihNKSlcbiAgdmFyIHRlbXAgPSBbTVszXSwgTVsxXV1cbiAgTVsxXSA9IHRlbXBbMF1cbiAgTVszXSA9IHRlbXBbMV1cbiAgdmFyIG91dCA9IHRoaXMuX2RvQ3J5cHRCbG9jayhNLCB0aGlzLl9pbnZLZXlTY2hlZHVsZSwgRy5JTlZfU1VCX01JWCwgRy5JTlZfU0JPWClcbiAgdmFyIGJ1ZiA9IG5ldyBCdWZmZXIoMTYpXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFswXSwgMClcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzNdLCA0KVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMl0sIDgpXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFsxXSwgMTIpXG4gIHJldHVybiBidWZcbn1cblxuQUVTLnByb3RvdHlwZS5zY3J1YiA9IGZ1bmN0aW9uICgpIHtcbiAgc2NydWJfdmVjKHRoaXMuX2tleVNjaGVkdWxlKVxuICBzY3J1Yl92ZWModGhpcy5faW52S2V5U2NoZWR1bGUpXG4gIHNjcnViX3ZlYyh0aGlzLl9rZXkpXG59XG5cbkFFUy5wcm90b3R5cGUuX2RvQ3J5cHRCbG9jayA9IGZ1bmN0aW9uIChNLCBrZXlTY2hlZHVsZSwgU1VCX01JWCwgU0JPWCkge1xuICB2YXIga3NSb3csIHMwLCBzMSwgczIsIHMzLCB0MCwgdDEsIHQyLCB0M1xuXG4gIHMwID0gTVswXSBeIGtleVNjaGVkdWxlWzBdXG4gIHMxID0gTVsxXSBeIGtleVNjaGVkdWxlWzFdXG4gIHMyID0gTVsyXSBeIGtleVNjaGVkdWxlWzJdXG4gIHMzID0gTVszXSBeIGtleVNjaGVkdWxlWzNdXG4gIGtzUm93ID0gNFxuICBmb3IgKHZhciByb3VuZCA9IDE7IHJvdW5kIDwgdGhpcy5fblJvdW5kczsgcm91bmQrKykge1xuICAgIHQwID0gU1VCX01JWFswXVtzMCA+Pj4gMjRdIF4gU1VCX01JWFsxXVsoczEgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWFsyXVsoczIgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYWzNdW3MzICYgMHhmZl0gXiBrZXlTY2hlZHVsZVtrc1JvdysrXVxuICAgIHQxID0gU1VCX01JWFswXVtzMSA+Pj4gMjRdIF4gU1VCX01JWFsxXVsoczIgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWFsyXVsoczMgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYWzNdW3MwICYgMHhmZl0gXiBrZXlTY2hlZHVsZVtrc1JvdysrXVxuICAgIHQyID0gU1VCX01JWFswXVtzMiA+Pj4gMjRdIF4gU1VCX01JWFsxXVsoczMgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWFsyXVsoczAgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYWzNdW3MxICYgMHhmZl0gXiBrZXlTY2hlZHVsZVtrc1JvdysrXVxuICAgIHQzID0gU1VCX01JWFswXVtzMyA+Pj4gMjRdIF4gU1VCX01JWFsxXVsoczAgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWFsyXVsoczEgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYWzNdW3MyICYgMHhmZl0gXiBrZXlTY2hlZHVsZVtrc1JvdysrXVxuICAgIHMwID0gdDBcbiAgICBzMSA9IHQxXG4gICAgczIgPSB0MlxuICAgIHMzID0gdDNcbiAgfVxuICB0MCA9ICgoU0JPWFtzMCA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyhzMSA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHMyID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFtzMyAmIDB4ZmZdKSBeIGtleVNjaGVkdWxlW2tzUm93KytdXG4gIHQxID0gKChTQk9YW3MxID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMyID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczMgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MwICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgdDIgPSAoKFNCT1hbczIgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczMgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMCA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczEgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXVxuICB0MyA9ICgoU0JPWFtzMyA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyhzMCA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHMxID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFtzMiAmIDB4ZmZdKSBeIGtleVNjaGVkdWxlW2tzUm93KytdXG4gIHJldHVybiBbXG4gICAgZml4dXBfdWludDMyKHQwKSxcbiAgICBmaXh1cF91aW50MzIodDEpLFxuICAgIGZpeHVwX3VpbnQzMih0MiksXG4gICAgZml4dXBfdWludDMyKHQzKVxuICBdXG59XG5cbmV4cG9ydHMuQUVTID0gQUVTXG4iLCJ2YXIgYWVzID0gcmVxdWlyZSgnLi9hZXMnKVxudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ2NpcGhlci1iYXNlJylcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBHSEFTSCA9IHJlcXVpcmUoJy4vZ2hhc2gnKVxudmFyIHhvciA9IHJlcXVpcmUoJ2J1ZmZlci14b3InKVxuaW5oZXJpdHMoU3RyZWFtQ2lwaGVyLCBUcmFuc2Zvcm0pXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmVhbUNpcGhlclxuXG5mdW5jdGlvbiBTdHJlYW1DaXBoZXIgKG1vZGUsIGtleSwgaXYsIGRlY3J5cHQpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFN0cmVhbUNpcGhlcikpIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbUNpcGhlcihtb2RlLCBrZXksIGl2KVxuICB9XG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMpXG4gIHRoaXMuX2ZpbklEID0gQnVmZmVyLmNvbmNhdChbaXYsIG5ldyBCdWZmZXIoWzAsIDAsIDAsIDFdKV0pXG4gIGl2ID0gQnVmZmVyLmNvbmNhdChbaXYsIG5ldyBCdWZmZXIoWzAsIDAsIDAsIDJdKV0pXG4gIHRoaXMuX2NpcGhlciA9IG5ldyBhZXMuQUVTKGtleSlcbiAgdGhpcy5fcHJldiA9IG5ldyBCdWZmZXIoaXYubGVuZ3RoKVxuICB0aGlzLl9jYWNoZSA9IG5ldyBCdWZmZXIoJycpXG4gIHRoaXMuX3NlY0NhY2hlID0gbmV3IEJ1ZmZlcignJylcbiAgdGhpcy5fZGVjcnlwdCA9IGRlY3J5cHRcbiAgdGhpcy5fYWxlbiA9IDBcbiAgdGhpcy5fbGVuID0gMFxuICBpdi5jb3B5KHRoaXMuX3ByZXYpXG4gIHRoaXMuX21vZGUgPSBtb2RlXG4gIHZhciBoID0gbmV3IEJ1ZmZlcig0KVxuICBoLmZpbGwoMClcbiAgdGhpcy5fZ2hhc2ggPSBuZXcgR0hBU0godGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayhoKSlcbiAgdGhpcy5fYXV0aFRhZyA9IG51bGxcbiAgdGhpcy5fY2FsbGVkID0gZmFsc2Vcbn1cblN0cmVhbUNpcGhlci5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChjaHVuaykge1xuICBpZiAoIXRoaXMuX2NhbGxlZCAmJiB0aGlzLl9hbGVuKSB7XG4gICAgdmFyIHJ1bXAgPSAxNiAtICh0aGlzLl9hbGVuICUgMTYpXG4gICAgaWYgKHJ1bXAgPCAxNikge1xuICAgICAgcnVtcCA9IG5ldyBCdWZmZXIocnVtcClcbiAgICAgIHJ1bXAuZmlsbCgwKVxuICAgICAgdGhpcy5fZ2hhc2gudXBkYXRlKHJ1bXApXG4gICAgfVxuICB9XG4gIHRoaXMuX2NhbGxlZCA9IHRydWVcbiAgdmFyIG91dCA9IHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLCBjaHVuaylcbiAgaWYgKHRoaXMuX2RlY3J5cHQpIHtcbiAgICB0aGlzLl9naGFzaC51cGRhdGUoY2h1bmspXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fZ2hhc2gudXBkYXRlKG91dClcbiAgfVxuICB0aGlzLl9sZW4gKz0gY2h1bmsubGVuZ3RoXG4gIHJldHVybiBvdXRcbn1cblN0cmVhbUNpcGhlci5wcm90b3R5cGUuX2ZpbmFsID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5fZGVjcnlwdCAmJiAhdGhpcy5fYXV0aFRhZykge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhJylcbiAgfVxuICB2YXIgdGFnID0geG9yKHRoaXMuX2doYXNoLmZpbmFsKHRoaXMuX2FsZW4gKiA4LCB0aGlzLl9sZW4gKiA4KSwgdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9maW5JRCkpXG4gIGlmICh0aGlzLl9kZWNyeXB0KSB7XG4gICAgaWYgKHhvclRlc3QodGFnLCB0aGlzLl9hdXRoVGFnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEnKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9hdXRoVGFnID0gdGFnXG4gIH1cbiAgdGhpcy5fY2lwaGVyLnNjcnViKClcbn1cblN0cmVhbUNpcGhlci5wcm90b3R5cGUuZ2V0QXV0aFRhZyA9IGZ1bmN0aW9uIGdldEF1dGhUYWcgKCkge1xuICBpZiAoIXRoaXMuX2RlY3J5cHQgJiYgQnVmZmVyLmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKSB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dGhUYWdcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlJylcbiAgfVxufVxuU3RyZWFtQ2lwaGVyLnByb3RvdHlwZS5zZXRBdXRoVGFnID0gZnVuY3Rpb24gc2V0QXV0aFRhZyAodGFnKSB7XG4gIGlmICh0aGlzLl9kZWNyeXB0KSB7XG4gICAgdGhpcy5fYXV0aFRhZyA9IHRhZ1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignQXR0ZW1wdGluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUnKVxuICB9XG59XG5TdHJlYW1DaXBoZXIucHJvdG90eXBlLnNldEFBRCA9IGZ1bmN0aW9uIHNldEFBRCAoYnVmKSB7XG4gIGlmICghdGhpcy5fY2FsbGVkKSB7XG4gICAgdGhpcy5fZ2hhc2gudXBkYXRlKGJ1ZilcbiAgICB0aGlzLl9hbGVuICs9IGJ1Zi5sZW5ndGhcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRpbmcgdG8gc2V0IEFBRCBpbiB1bnN1cHBvcnRlZCBzdGF0ZScpXG4gIH1cbn1cbmZ1bmN0aW9uIHhvclRlc3QgKGEsIGIpIHtcbiAgdmFyIG91dCA9IDBcbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgIG91dCsrXG4gIH1cbiAgdmFyIGxlbiA9IE1hdGgubWluKGEubGVuZ3RoLCBiLmxlbmd0aClcbiAgdmFyIGkgPSAtMVxuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgb3V0ICs9IChhW2ldIF4gYltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG4iLCJ2YXIgY2lwaGVycyA9IHJlcXVpcmUoJy4vZW5jcnlwdGVyJylcbmV4cG9ydHMuY3JlYXRlQ2lwaGVyID0gZXhwb3J0cy5DaXBoZXIgPSBjaXBoZXJzLmNyZWF0ZUNpcGhlclxuZXhwb3J0cy5jcmVhdGVDaXBoZXJpdiA9IGV4cG9ydHMuQ2lwaGVyaXYgPSBjaXBoZXJzLmNyZWF0ZUNpcGhlcml2XG52YXIgZGVjaXBoZXJzID0gcmVxdWlyZSgnLi9kZWNyeXB0ZXInKVxuZXhwb3J0cy5jcmVhdGVEZWNpcGhlciA9IGV4cG9ydHMuRGVjaXBoZXIgPSBkZWNpcGhlcnMuY3JlYXRlRGVjaXBoZXJcbmV4cG9ydHMuY3JlYXRlRGVjaXBoZXJpdiA9IGV4cG9ydHMuRGVjaXBoZXJpdiA9IGRlY2lwaGVycy5jcmVhdGVEZWNpcGhlcml2XG52YXIgbW9kZXMgPSByZXF1aXJlKCcuL21vZGVzJylcbmZ1bmN0aW9uIGdldENpcGhlcnMgKCkge1xuICByZXR1cm4gT2JqZWN0LmtleXMobW9kZXMpXG59XG5leHBvcnRzLmxpc3RDaXBoZXJzID0gZXhwb3J0cy5nZXRDaXBoZXJzID0gZ2V0Q2lwaGVyc1xuIiwidmFyIGFlcyA9IHJlcXVpcmUoJy4vYWVzJylcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgbW9kZXMgPSByZXF1aXJlKCcuL21vZGVzJylcbnZhciBTdHJlYW1DaXBoZXIgPSByZXF1aXJlKCcuL3N0cmVhbUNpcGhlcicpXG52YXIgQXV0aENpcGhlciA9IHJlcXVpcmUoJy4vYXV0aENpcGhlcicpXG52YXIgZWJ0ayA9IHJlcXVpcmUoJ2V2cF9ieXRlc3Rva2V5JylcblxuaW5oZXJpdHMoRGVjaXBoZXIsIFRyYW5zZm9ybSlcbmZ1bmN0aW9uIERlY2lwaGVyIChtb2RlLCBrZXksIGl2KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEZWNpcGhlcikpIHtcbiAgICByZXR1cm4gbmV3IERlY2lwaGVyKG1vZGUsIGtleSwgaXYpXG4gIH1cbiAgVHJhbnNmb3JtLmNhbGwodGhpcylcbiAgdGhpcy5fY2FjaGUgPSBuZXcgU3BsaXR0ZXIoKVxuICB0aGlzLl9sYXN0ID0gdm9pZCAwXG4gIHRoaXMuX2NpcGhlciA9IG5ldyBhZXMuQUVTKGtleSlcbiAgdGhpcy5fcHJldiA9IG5ldyBCdWZmZXIoaXYubGVuZ3RoKVxuICBpdi5jb3B5KHRoaXMuX3ByZXYpXG4gIHRoaXMuX21vZGUgPSBtb2RlXG4gIHRoaXMuX2F1dG9wYWRkaW5nID0gdHJ1ZVxufVxuRGVjaXBoZXIucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aGlzLl9jYWNoZS5hZGQoZGF0YSlcbiAgdmFyIGNodW5rXG4gIHZhciB0aGluZ1xuICB2YXIgb3V0ID0gW11cbiAgd2hpbGUgKChjaHVuayA9IHRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZykpKSB7XG4gICAgdGhpbmcgPSB0aGlzLl9tb2RlLmRlY3J5cHQodGhpcywgY2h1bmspXG4gICAgb3V0LnB1c2godGhpbmcpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQob3V0KVxufVxuRGVjaXBoZXIucHJvdG90eXBlLl9maW5hbCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNodW5rID0gdGhpcy5fY2FjaGUuZmx1c2goKVxuICBpZiAodGhpcy5fYXV0b3BhZGRpbmcpIHtcbiAgICByZXR1cm4gdW5wYWQodGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsIGNodW5rKSlcbiAgfSBlbHNlIGlmIChjaHVuaykge1xuICAgIHRocm93IG5ldyBFcnJvcignZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoJylcbiAgfVxufVxuRGVjaXBoZXIucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nID0gZnVuY3Rpb24gKHNldFRvKSB7XG4gIHRoaXMuX2F1dG9wYWRkaW5nID0gISFzZXRUb1xuICByZXR1cm4gdGhpc1xufVxuZnVuY3Rpb24gU3BsaXR0ZXIgKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3BsaXR0ZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBTcGxpdHRlcigpXG4gIH1cbiAgdGhpcy5jYWNoZSA9IG5ldyBCdWZmZXIoJycpXG59XG5TcGxpdHRlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhpcy5jYWNoZSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuY2FjaGUsIGRhdGFdKVxufVxuXG5TcGxpdHRlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGF1dG9QYWRkaW5nKSB7XG4gIHZhciBvdXRcbiAgaWYgKGF1dG9QYWRkaW5nKSB7XG4gICAgaWYgKHRoaXMuY2FjaGUubGVuZ3RoID4gMTYpIHtcbiAgICAgIG91dCA9IHRoaXMuY2FjaGUuc2xpY2UoMCwgMTYpXG4gICAgICB0aGlzLmNhY2hlID0gdGhpcy5jYWNoZS5zbGljZSgxNilcbiAgICAgIHJldHVybiBvdXRcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHRoaXMuY2FjaGUubGVuZ3RoID49IDE2KSB7XG4gICAgICBvdXQgPSB0aGlzLmNhY2hlLnNsaWNlKDAsIDE2KVxuICAgICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUuc2xpY2UoMTYpXG4gICAgICByZXR1cm4gb3V0XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5TcGxpdHRlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmNhY2hlLmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlXG4gIH1cbn1cbmZ1bmN0aW9uIHVucGFkIChsYXN0KSB7XG4gIHZhciBwYWRkZWQgPSBsYXN0WzE1XVxuICB2YXIgaSA9IC0xXG4gIHdoaWxlICgrK2kgPCBwYWRkZWQpIHtcbiAgICBpZiAobGFzdFsoaSArICgxNiAtIHBhZGRlZCkpXSAhPT0gcGFkZGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuYWJsZSB0byBkZWNyeXB0IGRhdGEnKVxuICAgIH1cbiAgfVxuICBpZiAocGFkZGVkID09PSAxNikge1xuICAgIHJldHVyblxuICB9XG4gIHJldHVybiBsYXN0LnNsaWNlKDAsIDE2IC0gcGFkZGVkKVxufVxuXG52YXIgbW9kZWxpc3QgPSB7XG4gIEVDQjogcmVxdWlyZSgnLi9tb2Rlcy9lY2InKSxcbiAgQ0JDOiByZXF1aXJlKCcuL21vZGVzL2NiYycpLFxuICBDRkI6IHJlcXVpcmUoJy4vbW9kZXMvY2ZiJyksXG4gIENGQjg6IHJlcXVpcmUoJy4vbW9kZXMvY2ZiOCcpLFxuICBDRkIxOiByZXF1aXJlKCcuL21vZGVzL2NmYjEnKSxcbiAgT0ZCOiByZXF1aXJlKCcuL21vZGVzL29mYicpLFxuICBDVFI6IHJlcXVpcmUoJy4vbW9kZXMvY3RyJyksXG4gIEdDTTogcmVxdWlyZSgnLi9tb2Rlcy9jdHInKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEZWNpcGhlcml2IChzdWl0ZSwgcGFzc3dvcmQsIGl2KSB7XG4gIHZhciBjb25maWcgPSBtb2Rlc1tzdWl0ZS50b0xvd2VyQ2FzZSgpXVxuICBpZiAoIWNvbmZpZykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgc3VpdGUgdHlwZScpXG4gIH1cbiAgaWYgKHR5cGVvZiBpdiA9PT0gJ3N0cmluZycpIHtcbiAgICBpdiA9IG5ldyBCdWZmZXIoaXYpXG4gIH1cbiAgaWYgKHR5cGVvZiBwYXNzd29yZCA9PT0gJ3N0cmluZycpIHtcbiAgICBwYXNzd29yZCA9IG5ldyBCdWZmZXIocGFzc3dvcmQpXG4gIH1cbiAgaWYgKHBhc3N3b3JkLmxlbmd0aCAhPT0gY29uZmlnLmtleSAvIDgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIGtleSBsZW5ndGggJyArIHBhc3N3b3JkLmxlbmd0aClcbiAgfVxuICBpZiAoaXYubGVuZ3RoICE9PSBjb25maWcuaXYpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIGl2IGxlbmd0aCAnICsgaXYubGVuZ3RoKVxuICB9XG4gIGlmIChjb25maWcudHlwZSA9PT0gJ3N0cmVhbScpIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbUNpcGhlcihtb2RlbGlzdFtjb25maWcubW9kZV0sIHBhc3N3b3JkLCBpdiwgdHJ1ZSlcbiAgfSBlbHNlIGlmIChjb25maWcudHlwZSA9PT0gJ2F1dGgnKSB7XG4gICAgcmV0dXJuIG5ldyBBdXRoQ2lwaGVyKG1vZGVsaXN0W2NvbmZpZy5tb2RlXSwgcGFzc3dvcmQsIGl2LCB0cnVlKVxuICB9XG4gIHJldHVybiBuZXcgRGVjaXBoZXIobW9kZWxpc3RbY29uZmlnLm1vZGVdLCBwYXNzd29yZCwgaXYpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURlY2lwaGVyIChzdWl0ZSwgcGFzc3dvcmQpIHtcbiAgdmFyIGNvbmZpZyA9IG1vZGVzW3N1aXRlLnRvTG93ZXJDYXNlKCldXG4gIGlmICghY29uZmlnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBzdWl0ZSB0eXBlJylcbiAgfVxuICB2YXIga2V5cyA9IGVidGsocGFzc3dvcmQsIGZhbHNlLCBjb25maWcua2V5LCBjb25maWcuaXYpXG4gIHJldHVybiBjcmVhdGVEZWNpcGhlcml2KHN1aXRlLCBrZXlzLmtleSwga2V5cy5pdilcbn1cbmV4cG9ydHMuY3JlYXRlRGVjaXBoZXIgPSBjcmVhdGVEZWNpcGhlclxuZXhwb3J0cy5jcmVhdGVEZWNpcGhlcml2ID0gY3JlYXRlRGVjaXBoZXJpdlxuIiwidmFyIGFlcyA9IHJlcXVpcmUoJy4vYWVzJylcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgbW9kZXMgPSByZXF1aXJlKCcuL21vZGVzJylcbnZhciBlYnRrID0gcmVxdWlyZSgnZXZwX2J5dGVzdG9rZXknKVxudmFyIFN0cmVhbUNpcGhlciA9IHJlcXVpcmUoJy4vc3RyZWFtQ2lwaGVyJylcbnZhciBBdXRoQ2lwaGVyID0gcmVxdWlyZSgnLi9hdXRoQ2lwaGVyJylcbmluaGVyaXRzKENpcGhlciwgVHJhbnNmb3JtKVxuZnVuY3Rpb24gQ2lwaGVyIChtb2RlLCBrZXksIGl2KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDaXBoZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBDaXBoZXIobW9kZSwga2V5LCBpdilcbiAgfVxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzKVxuICB0aGlzLl9jYWNoZSA9IG5ldyBTcGxpdHRlcigpXG4gIHRoaXMuX2NpcGhlciA9IG5ldyBhZXMuQUVTKGtleSlcbiAgdGhpcy5fcHJldiA9IG5ldyBCdWZmZXIoaXYubGVuZ3RoKVxuICBpdi5jb3B5KHRoaXMuX3ByZXYpXG4gIHRoaXMuX21vZGUgPSBtb2RlXG4gIHRoaXMuX2F1dG9wYWRkaW5nID0gdHJ1ZVxufVxuQ2lwaGVyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhpcy5fY2FjaGUuYWRkKGRhdGEpXG4gIHZhciBjaHVua1xuICB2YXIgdGhpbmdcbiAgdmFyIG91dCA9IFtdXG4gIHdoaWxlICgoY2h1bmsgPSB0aGlzLl9jYWNoZS5nZXQoKSkpIHtcbiAgICB0aGluZyA9IHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLCBjaHVuaylcbiAgICBvdXQucHVzaCh0aGluZylcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChvdXQpXG59XG5DaXBoZXIucHJvdG90eXBlLl9maW5hbCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNodW5rID0gdGhpcy5fY2FjaGUuZmx1c2goKVxuICBpZiAodGhpcy5fYXV0b3BhZGRpbmcpIHtcbiAgICBjaHVuayA9IHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLCBjaHVuaylcbiAgICB0aGlzLl9jaXBoZXIuc2NydWIoKVxuICAgIHJldHVybiBjaHVua1xuICB9IGVsc2UgaWYgKGNodW5rLnRvU3RyaW5nKCdoZXgnKSAhPT0gJzEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwJykge1xuICAgIHRoaXMuX2NpcGhlci5zY3J1YigpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgnKVxuICB9XG59XG5DaXBoZXIucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nID0gZnVuY3Rpb24gKHNldFRvKSB7XG4gIHRoaXMuX2F1dG9wYWRkaW5nID0gISFzZXRUb1xuICByZXR1cm4gdGhpc1xufVxuXG5mdW5jdGlvbiBTcGxpdHRlciAoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTcGxpdHRlcikpIHtcbiAgICByZXR1cm4gbmV3IFNwbGl0dGVyKClcbiAgfVxuICB0aGlzLmNhY2hlID0gbmV3IEJ1ZmZlcignJylcbn1cblNwbGl0dGVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aGlzLmNhY2hlID0gQnVmZmVyLmNvbmNhdChbdGhpcy5jYWNoZSwgZGF0YV0pXG59XG5cblNwbGl0dGVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmNhY2hlLmxlbmd0aCA+IDE1KSB7XG4gICAgdmFyIG91dCA9IHRoaXMuY2FjaGUuc2xpY2UoMCwgMTYpXG4gICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUuc2xpY2UoMTYpXG4gICAgcmV0dXJuIG91dFxuICB9XG4gIHJldHVybiBudWxsXG59XG5TcGxpdHRlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsZW4gPSAxNiAtIHRoaXMuY2FjaGUubGVuZ3RoXG4gIHZhciBwYWRCdWZmID0gbmV3IEJ1ZmZlcihsZW4pXG5cbiAgdmFyIGkgPSAtMVxuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgcGFkQnVmZi53cml0ZVVJbnQ4KGxlbiwgaSlcbiAgfVxuICB2YXIgb3V0ID0gQnVmZmVyLmNvbmNhdChbdGhpcy5jYWNoZSwgcGFkQnVmZl0pXG4gIHJldHVybiBvdXRcbn1cbnZhciBtb2RlbGlzdCA9IHtcbiAgRUNCOiByZXF1aXJlKCcuL21vZGVzL2VjYicpLFxuICBDQkM6IHJlcXVpcmUoJy4vbW9kZXMvY2JjJyksXG4gIENGQjogcmVxdWlyZSgnLi9tb2Rlcy9jZmInKSxcbiAgQ0ZCODogcmVxdWlyZSgnLi9tb2Rlcy9jZmI4JyksXG4gIENGQjE6IHJlcXVpcmUoJy4vbW9kZXMvY2ZiMScpLFxuICBPRkI6IHJlcXVpcmUoJy4vbW9kZXMvb2ZiJyksXG4gIENUUjogcmVxdWlyZSgnLi9tb2Rlcy9jdHInKSxcbiAgR0NNOiByZXF1aXJlKCcuL21vZGVzL2N0cicpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNpcGhlcml2IChzdWl0ZSwgcGFzc3dvcmQsIGl2KSB7XG4gIHZhciBjb25maWcgPSBtb2Rlc1tzdWl0ZS50b0xvd2VyQ2FzZSgpXVxuICBpZiAoIWNvbmZpZykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgc3VpdGUgdHlwZScpXG4gIH1cbiAgaWYgKHR5cGVvZiBpdiA9PT0gJ3N0cmluZycpIHtcbiAgICBpdiA9IG5ldyBCdWZmZXIoaXYpXG4gIH1cbiAgaWYgKHR5cGVvZiBwYXNzd29yZCA9PT0gJ3N0cmluZycpIHtcbiAgICBwYXNzd29yZCA9IG5ldyBCdWZmZXIocGFzc3dvcmQpXG4gIH1cbiAgaWYgKHBhc3N3b3JkLmxlbmd0aCAhPT0gY29uZmlnLmtleSAvIDgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIGtleSBsZW5ndGggJyArIHBhc3N3b3JkLmxlbmd0aClcbiAgfVxuICBpZiAoaXYubGVuZ3RoICE9PSBjb25maWcuaXYpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIGl2IGxlbmd0aCAnICsgaXYubGVuZ3RoKVxuICB9XG4gIGlmIChjb25maWcudHlwZSA9PT0gJ3N0cmVhbScpIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbUNpcGhlcihtb2RlbGlzdFtjb25maWcubW9kZV0sIHBhc3N3b3JkLCBpdilcbiAgfSBlbHNlIGlmIChjb25maWcudHlwZSA9PT0gJ2F1dGgnKSB7XG4gICAgcmV0dXJuIG5ldyBBdXRoQ2lwaGVyKG1vZGVsaXN0W2NvbmZpZy5tb2RlXSwgcGFzc3dvcmQsIGl2KVxuICB9XG4gIHJldHVybiBuZXcgQ2lwaGVyKG1vZGVsaXN0W2NvbmZpZy5tb2RlXSwgcGFzc3dvcmQsIGl2KVxufVxuZnVuY3Rpb24gY3JlYXRlQ2lwaGVyIChzdWl0ZSwgcGFzc3dvcmQpIHtcbiAgdmFyIGNvbmZpZyA9IG1vZGVzW3N1aXRlLnRvTG93ZXJDYXNlKCldXG4gIGlmICghY29uZmlnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBzdWl0ZSB0eXBlJylcbiAgfVxuICB2YXIga2V5cyA9IGVidGsocGFzc3dvcmQsIGZhbHNlLCBjb25maWcua2V5LCBjb25maWcuaXYpXG4gIHJldHVybiBjcmVhdGVDaXBoZXJpdihzdWl0ZSwga2V5cy5rZXksIGtleXMuaXYpXG59XG5cbmV4cG9ydHMuY3JlYXRlQ2lwaGVyaXYgPSBjcmVhdGVDaXBoZXJpdlxuZXhwb3J0cy5jcmVhdGVDaXBoZXIgPSBjcmVhdGVDaXBoZXJcbiIsInZhciB6ZXJvcyA9IG5ldyBCdWZmZXIoMTYpXG56ZXJvcy5maWxsKDApXG5tb2R1bGUuZXhwb3J0cyA9IEdIQVNIXG5mdW5jdGlvbiBHSEFTSCAoa2V5KSB7XG4gIHRoaXMuaCA9IGtleVxuICB0aGlzLnN0YXRlID0gbmV3IEJ1ZmZlcigxNilcbiAgdGhpcy5zdGF0ZS5maWxsKDApXG4gIHRoaXMuY2FjaGUgPSBuZXcgQnVmZmVyKCcnKVxufVxuLy8gZnJvbSBodHRwOi8vYml0d2lzZXNoaWZ0bGVmdC5naXRodWIuaW8vc2pjbC9kb2Mvc3ltYm9scy9zcmMvY29yZV9nY20uanMuaHRtbFxuLy8gYnkgSnVobyBWw6Row6QtSGVydHR1YVxuR0hBU0gucHJvdG90eXBlLmdoYXNoID0gZnVuY3Rpb24gKGJsb2NrKSB7XG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGJsb2NrLmxlbmd0aCkge1xuICAgIHRoaXMuc3RhdGVbaV0gXj0gYmxvY2tbaV1cbiAgfVxuICB0aGlzLl9tdWx0aXBseSgpXG59XG5cbkdIQVNILnByb3RvdHlwZS5fbXVsdGlwbHkgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBWaSA9IHRvQXJyYXkodGhpcy5oKVxuICB2YXIgWmkgPSBbMCwgMCwgMCwgMF1cbiAgdmFyIGosIHhpLCBsc2JfVmlcbiAgdmFyIGkgPSAtMVxuICB3aGlsZSAoKytpIDwgMTI4KSB7XG4gICAgeGkgPSAodGhpcy5zdGF0ZVt+fihpIC8gOCldICYgKDEgPDwgKDcgLSBpICUgOCkpKSAhPT0gMFxuICAgIGlmICh4aSkge1xuICAgICAgLy8gWl9pKzEgPSBaX2kgXiBWX2lcbiAgICAgIFppID0geG9yKFppLCBWaSlcbiAgICB9XG5cbiAgICAvLyBTdG9yZSB0aGUgdmFsdWUgb2YgTFNCKFZfaSlcbiAgICBsc2JfVmkgPSAoVmlbM10gJiAxKSAhPT0gMFxuXG4gICAgLy8gVl9pKzEgPSBWX2kgPj4gMVxuICAgIGZvciAoaiA9IDM7IGogPiAwOyBqLS0pIHtcbiAgICAgIFZpW2pdID0gKFZpW2pdID4+PiAxKSB8ICgoVmlbaiAtIDFdICYgMSkgPDwgMzEpXG4gICAgfVxuICAgIFZpWzBdID0gVmlbMF0gPj4+IDFcblxuICAgIC8vIElmIExTQihWX2kpIGlzIDEsIFZfaSsxID0gKFZfaSA+PiAxKSBeIFJcbiAgICBpZiAobHNiX1ZpKSB7XG4gICAgICBWaVswXSA9IFZpWzBdIF4gKDB4ZTEgPDwgMjQpXG4gICAgfVxuICB9XG4gIHRoaXMuc3RhdGUgPSBmcm9tQXJyYXkoWmkpXG59XG5HSEFTSC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGJ1Zikge1xuICB0aGlzLmNhY2hlID0gQnVmZmVyLmNvbmNhdChbdGhpcy5jYWNoZSwgYnVmXSlcbiAgdmFyIGNodW5rXG4gIHdoaWxlICh0aGlzLmNhY2hlLmxlbmd0aCA+PSAxNikge1xuICAgIGNodW5rID0gdGhpcy5jYWNoZS5zbGljZSgwLCAxNilcbiAgICB0aGlzLmNhY2hlID0gdGhpcy5jYWNoZS5zbGljZSgxNilcbiAgICB0aGlzLmdoYXNoKGNodW5rKVxuICB9XG59XG5HSEFTSC5wcm90b3R5cGUuZmluYWwgPSBmdW5jdGlvbiAoYWJsLCBibCkge1xuICBpZiAodGhpcy5jYWNoZS5sZW5ndGgpIHtcbiAgICB0aGlzLmdoYXNoKEJ1ZmZlci5jb25jYXQoW3RoaXMuY2FjaGUsIHplcm9zXSwgMTYpKVxuICB9XG4gIHRoaXMuZ2hhc2goZnJvbUFycmF5KFtcbiAgICAwLCBhYmwsXG4gICAgMCwgYmxcbiAgXSkpXG4gIHJldHVybiB0aGlzLnN0YXRlXG59XG5cbmZ1bmN0aW9uIHRvQXJyYXkgKGJ1Zikge1xuICByZXR1cm4gW1xuICAgIGJ1Zi5yZWFkVUludDMyQkUoMCksXG4gICAgYnVmLnJlYWRVSW50MzJCRSg0KSxcbiAgICBidWYucmVhZFVJbnQzMkJFKDgpLFxuICAgIGJ1Zi5yZWFkVUludDMyQkUoMTIpXG4gIF1cbn1cbmZ1bmN0aW9uIGZyb21BcnJheSAob3V0KSB7XG4gIG91dCA9IG91dC5tYXAoZml4dXBfdWludDMyKVxuICB2YXIgYnVmID0gbmV3IEJ1ZmZlcigxNilcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzBdLCAwKVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMV0sIDQpXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFsyXSwgOClcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzNdLCAxMilcbiAgcmV0dXJuIGJ1ZlxufVxudmFyIHVpbnRfbWF4ID0gTWF0aC5wb3coMiwgMzIpXG5mdW5jdGlvbiBmaXh1cF91aW50MzIgKHgpIHtcbiAgdmFyIHJldCwgeF9wb3NcbiAgcmV0ID0geCA+IHVpbnRfbWF4IHx8IHggPCAwID8gKHhfcG9zID0gTWF0aC5hYnMoeCkgJSB1aW50X21heCwgeCA8IDAgPyB1aW50X21heCAtIHhfcG9zIDogeF9wb3MpIDogeFxuICByZXR1cm4gcmV0XG59XG5mdW5jdGlvbiB4b3IgKGEsIGIpIHtcbiAgcmV0dXJuIFtcbiAgICBhWzBdIF4gYlswXSxcbiAgICBhWzFdIF4gYlsxXSxcbiAgICBhWzJdIF4gYlsyXSxcbiAgICBhWzNdIF4gYlszXVxuICBdXG59XG4iLCJleHBvcnRzWydhZXMtMTI4LWVjYiddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDEyOCxcbiAgaXY6IDAsXG4gIG1vZGU6ICdFQ0InLFxuICB0eXBlOiAnYmxvY2snXG59XG5leHBvcnRzWydhZXMtMTkyLWVjYiddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDE5MixcbiAgaXY6IDAsXG4gIG1vZGU6ICdFQ0InLFxuICB0eXBlOiAnYmxvY2snXG59XG5leHBvcnRzWydhZXMtMjU2LWVjYiddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDI1NixcbiAgaXY6IDAsXG4gIG1vZGU6ICdFQ0InLFxuICB0eXBlOiAnYmxvY2snXG59XG5leHBvcnRzWydhZXMtMTI4LWNiYyddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDEyOCxcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0JDJyxcbiAgdHlwZTogJ2Jsb2NrJ1xufVxuZXhwb3J0c1snYWVzLTE5Mi1jYmMnXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxOTIsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NCQycsXG4gIHR5cGU6ICdibG9jaydcbn1cbmV4cG9ydHNbJ2Flcy0yNTYtY2JjJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMjU2LFxuICBpdjogMTYsXG4gIG1vZGU6ICdDQkMnLFxuICB0eXBlOiAnYmxvY2snXG59XG5leHBvcnRzWydhZXMxMjgnXSA9IGV4cG9ydHNbJ2Flcy0xMjgtY2JjJ11cbmV4cG9ydHNbJ2FlczE5MiddID0gZXhwb3J0c1snYWVzLTE5Mi1jYmMnXVxuZXhwb3J0c1snYWVzMjU2J10gPSBleHBvcnRzWydhZXMtMjU2LWNiYyddXG5leHBvcnRzWydhZXMtMTI4LWNmYiddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDEyOCxcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0ZCJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0xOTItY2ZiJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMTkyLFxuICBpdjogMTYsXG4gIG1vZGU6ICdDRkInLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTI1Ni1jZmInXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAyNTYsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NGQicsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMTI4LWNmYjgnXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NGQjgnLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTE5Mi1jZmI4J10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMTkyLFxuICBpdjogMTYsXG4gIG1vZGU6ICdDRkI4JyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0yNTYtY2ZiOCddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDI1NixcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0ZCOCcsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMTI4LWNmYjEnXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NGQjEnLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTE5Mi1jZmIxJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMTkyLFxuICBpdjogMTYsXG4gIG1vZGU6ICdDRkIxJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0yNTYtY2ZiMSddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDI1NixcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0ZCMScsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMTI4LW9mYiddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDEyOCxcbiAgaXY6IDE2LFxuICBtb2RlOiAnT0ZCJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0xOTItb2ZiJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMTkyLFxuICBpdjogMTYsXG4gIG1vZGU6ICdPRkInLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTI1Ni1vZmInXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAyNTYsXG4gIGl2OiAxNixcbiAgbW9kZTogJ09GQicsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMTI4LWN0ciddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDEyOCxcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ1RSJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0xOTItY3RyJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMTkyLFxuICBpdjogMTYsXG4gIG1vZGU6ICdDVFInLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTI1Ni1jdHInXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAyNTYsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NUUicsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMTI4LWdjbSddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDEyOCxcbiAgaXY6IDEyLFxuICBtb2RlOiAnR0NNJyxcbiAgdHlwZTogJ2F1dGgnXG59XG5leHBvcnRzWydhZXMtMTkyLWdjbSddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDE5MixcbiAgaXY6IDEyLFxuICBtb2RlOiAnR0NNJyxcbiAgdHlwZTogJ2F1dGgnXG59XG5leHBvcnRzWydhZXMtMjU2LWdjbSddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDI1NixcbiAgaXY6IDEyLFxuICBtb2RlOiAnR0NNJyxcbiAgdHlwZTogJ2F1dGgnXG59XG4iLCJ2YXIgeG9yID0gcmVxdWlyZSgnYnVmZmVyLXhvcicpXG5cbmV4cG9ydHMuZW5jcnlwdCA9IGZ1bmN0aW9uIChzZWxmLCBibG9jaykge1xuICB2YXIgZGF0YSA9IHhvcihibG9jaywgc2VsZi5fcHJldilcblxuICBzZWxmLl9wcmV2ID0gc2VsZi5fY2lwaGVyLmVuY3J5cHRCbG9jayhkYXRhKVxuICByZXR1cm4gc2VsZi5fcHJldlxufVxuXG5leHBvcnRzLmRlY3J5cHQgPSBmdW5jdGlvbiAoc2VsZiwgYmxvY2spIHtcbiAgdmFyIHBhZCA9IHNlbGYuX3ByZXZcblxuICBzZWxmLl9wcmV2ID0gYmxvY2tcbiAgdmFyIG91dCA9IHNlbGYuX2NpcGhlci5kZWNyeXB0QmxvY2soYmxvY2spXG5cbiAgcmV0dXJuIHhvcihvdXQsIHBhZClcbn1cbiIsInZhciB4b3IgPSByZXF1aXJlKCdidWZmZXIteG9yJylcblxuZXhwb3J0cy5lbmNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGRhdGEsIGRlY3J5cHQpIHtcbiAgdmFyIG91dCA9IG5ldyBCdWZmZXIoJycpXG4gIHZhciBsZW5cblxuICB3aGlsZSAoZGF0YS5sZW5ndGgpIHtcbiAgICBpZiAoc2VsZi5fY2FjaGUubGVuZ3RoID09PSAwKSB7XG4gICAgICBzZWxmLl9jYWNoZSA9IHNlbGYuX2NpcGhlci5lbmNyeXB0QmxvY2soc2VsZi5fcHJldilcbiAgICAgIHNlbGYuX3ByZXYgPSBuZXcgQnVmZmVyKCcnKVxuICAgIH1cblxuICAgIGlmIChzZWxmLl9jYWNoZS5sZW5ndGggPD0gZGF0YS5sZW5ndGgpIHtcbiAgICAgIGxlbiA9IHNlbGYuX2NhY2hlLmxlbmd0aFxuICAgICAgb3V0ID0gQnVmZmVyLmNvbmNhdChbb3V0LCBlbmNyeXB0U3RhcnQoc2VsZiwgZGF0YS5zbGljZSgwLCBsZW4pLCBkZWNyeXB0KV0pXG4gICAgICBkYXRhID0gZGF0YS5zbGljZShsZW4pXG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCA9IEJ1ZmZlci5jb25jYXQoW291dCwgZW5jcnlwdFN0YXJ0KHNlbGYsIGRhdGEsIGRlY3J5cHQpXSlcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dFxufVxuZnVuY3Rpb24gZW5jcnlwdFN0YXJ0IChzZWxmLCBkYXRhLCBkZWNyeXB0KSB7XG4gIHZhciBsZW4gPSBkYXRhLmxlbmd0aFxuICB2YXIgb3V0ID0geG9yKGRhdGEsIHNlbGYuX2NhY2hlKVxuICBzZWxmLl9jYWNoZSA9IHNlbGYuX2NhY2hlLnNsaWNlKGxlbilcbiAgc2VsZi5fcHJldiA9IEJ1ZmZlci5jb25jYXQoW3NlbGYuX3ByZXYsIGRlY3J5cHQgPyBkYXRhIDogb3V0XSlcbiAgcmV0dXJuIG91dFxufVxuIiwiZnVuY3Rpb24gZW5jcnlwdEJ5dGUgKHNlbGYsIGJ5dGVQYXJhbSwgZGVjcnlwdCkge1xuICB2YXIgcGFkXG4gIHZhciBpID0gLTFcbiAgdmFyIGxlbiA9IDhcbiAgdmFyIG91dCA9IDBcbiAgdmFyIGJpdCwgdmFsdWVcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIHBhZCA9IHNlbGYuX2NpcGhlci5lbmNyeXB0QmxvY2soc2VsZi5fcHJldilcbiAgICBiaXQgPSAoYnl0ZVBhcmFtICYgKDEgPDwgKDcgLSBpKSkpID8gMHg4MCA6IDBcbiAgICB2YWx1ZSA9IHBhZFswXSBeIGJpdFxuICAgIG91dCArPSAoKHZhbHVlICYgMHg4MCkgPj4gKGkgJSA4KSlcbiAgICBzZWxmLl9wcmV2ID0gc2hpZnRJbihzZWxmLl9wcmV2LCBkZWNyeXB0ID8gYml0IDogdmFsdWUpXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuZXhwb3J0cy5lbmNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGNodW5rLCBkZWNyeXB0KSB7XG4gIHZhciBsZW4gPSBjaHVuay5sZW5ndGhcbiAgdmFyIG91dCA9IG5ldyBCdWZmZXIobGVuKVxuICB2YXIgaSA9IC0xXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBvdXRbaV0gPSBlbmNyeXB0Qnl0ZShzZWxmLCBjaHVua1tpXSwgZGVjcnlwdClcbiAgfVxuICByZXR1cm4gb3V0XG59XG5mdW5jdGlvbiBzaGlmdEluIChidWZmZXIsIHZhbHVlKSB7XG4gIHZhciBsZW4gPSBidWZmZXIubGVuZ3RoXG4gIHZhciBpID0gLTFcbiAgdmFyIG91dCA9IG5ldyBCdWZmZXIoYnVmZmVyLmxlbmd0aClcbiAgYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbYnVmZmVyLCBuZXcgQnVmZmVyKFt2YWx1ZV0pXSlcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIG91dFtpXSA9IGJ1ZmZlcltpXSA8PCAxIHwgYnVmZmVyW2kgKyAxXSA+PiAoNylcbiAgfVxuICByZXR1cm4gb3V0XG59XG4iLCJmdW5jdGlvbiBlbmNyeXB0Qnl0ZSAoc2VsZiwgYnl0ZVBhcmFtLCBkZWNyeXB0KSB7XG4gIHZhciBwYWQgPSBzZWxmLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHNlbGYuX3ByZXYpXG4gIHZhciBvdXQgPSBwYWRbMF0gXiBieXRlUGFyYW1cbiAgc2VsZi5fcHJldiA9IEJ1ZmZlci5jb25jYXQoW3NlbGYuX3ByZXYuc2xpY2UoMSksIG5ldyBCdWZmZXIoW2RlY3J5cHQgPyBieXRlUGFyYW0gOiBvdXRdKV0pXG4gIHJldHVybiBvdXRcbn1cbmV4cG9ydHMuZW5jcnlwdCA9IGZ1bmN0aW9uIChzZWxmLCBjaHVuaywgZGVjcnlwdCkge1xuICB2YXIgbGVuID0gY2h1bmsubGVuZ3RoXG4gIHZhciBvdXQgPSBuZXcgQnVmZmVyKGxlbilcbiAgdmFyIGkgPSAtMVxuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgb3V0W2ldID0gZW5jcnlwdEJ5dGUoc2VsZiwgY2h1bmtbaV0sIGRlY3J5cHQpXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuIiwidmFyIHhvciA9IHJlcXVpcmUoJ2J1ZmZlci14b3InKVxuXG5mdW5jdGlvbiBpbmNyMzIgKGl2KSB7XG4gIHZhciBsZW4gPSBpdi5sZW5ndGhcbiAgdmFyIGl0ZW1cbiAgd2hpbGUgKGxlbi0tKSB7XG4gICAgaXRlbSA9IGl2LnJlYWRVSW50OChsZW4pXG4gICAgaWYgKGl0ZW0gPT09IDI1NSkge1xuICAgICAgaXYud3JpdGVVSW50OCgwLCBsZW4pXG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW0rK1xuICAgICAgaXYud3JpdGVVSW50OChpdGVtLCBsZW4pXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRCbG9jayAoc2VsZikge1xuICB2YXIgb3V0ID0gc2VsZi5fY2lwaGVyLmVuY3J5cHRCbG9jayhzZWxmLl9wcmV2KVxuICBpbmNyMzIoc2VsZi5fcHJldilcbiAgcmV0dXJuIG91dFxufVxuXG5leHBvcnRzLmVuY3J5cHQgPSBmdW5jdGlvbiAoc2VsZiwgY2h1bmspIHtcbiAgd2hpbGUgKHNlbGYuX2NhY2hlLmxlbmd0aCA8IGNodW5rLmxlbmd0aCkge1xuICAgIHNlbGYuX2NhY2hlID0gQnVmZmVyLmNvbmNhdChbc2VsZi5fY2FjaGUsIGdldEJsb2NrKHNlbGYpXSlcbiAgfVxuICB2YXIgcGFkID0gc2VsZi5fY2FjaGUuc2xpY2UoMCwgY2h1bmsubGVuZ3RoKVxuICBzZWxmLl9jYWNoZSA9IHNlbGYuX2NhY2hlLnNsaWNlKGNodW5rLmxlbmd0aClcbiAgcmV0dXJuIHhvcihjaHVuaywgcGFkKVxufVxuIiwiZXhwb3J0cy5lbmNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGJsb2NrKSB7XG4gIHJldHVybiBzZWxmLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGJsb2NrKVxufVxuZXhwb3J0cy5kZWNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGJsb2NrKSB7XG4gIHJldHVybiBzZWxmLl9jaXBoZXIuZGVjcnlwdEJsb2NrKGJsb2NrKVxufVxuIiwidmFyIHhvciA9IHJlcXVpcmUoJ2J1ZmZlci14b3InKVxuXG5mdW5jdGlvbiBnZXRCbG9jayAoc2VsZikge1xuICBzZWxmLl9wcmV2ID0gc2VsZi5fY2lwaGVyLmVuY3J5cHRCbG9jayhzZWxmLl9wcmV2KVxuICByZXR1cm4gc2VsZi5fcHJldlxufVxuXG5leHBvcnRzLmVuY3J5cHQgPSBmdW5jdGlvbiAoc2VsZiwgY2h1bmspIHtcbiAgd2hpbGUgKHNlbGYuX2NhY2hlLmxlbmd0aCA8IGNodW5rLmxlbmd0aCkge1xuICAgIHNlbGYuX2NhY2hlID0gQnVmZmVyLmNvbmNhdChbc2VsZi5fY2FjaGUsIGdldEJsb2NrKHNlbGYpXSlcbiAgfVxuXG4gIHZhciBwYWQgPSBzZWxmLl9jYWNoZS5zbGljZSgwLCBjaHVuay5sZW5ndGgpXG4gIHNlbGYuX2NhY2hlID0gc2VsZi5fY2FjaGUuc2xpY2UoY2h1bmsubGVuZ3RoKVxuICByZXR1cm4geG9yKGNodW5rLCBwYWQpXG59XG4iLCJ2YXIgYWVzID0gcmVxdWlyZSgnLi9hZXMnKVxudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ2NpcGhlci1iYXNlJylcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcblxuaW5oZXJpdHMoU3RyZWFtQ2lwaGVyLCBUcmFuc2Zvcm0pXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmVhbUNpcGhlclxuZnVuY3Rpb24gU3RyZWFtQ2lwaGVyIChtb2RlLCBrZXksIGl2LCBkZWNyeXB0KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTdHJlYW1DaXBoZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1DaXBoZXIobW9kZSwga2V5LCBpdilcbiAgfVxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzKVxuICB0aGlzLl9jaXBoZXIgPSBuZXcgYWVzLkFFUyhrZXkpXG4gIHRoaXMuX3ByZXYgPSBuZXcgQnVmZmVyKGl2Lmxlbmd0aClcbiAgdGhpcy5fY2FjaGUgPSBuZXcgQnVmZmVyKCcnKVxuICB0aGlzLl9zZWNDYWNoZSA9IG5ldyBCdWZmZXIoJycpXG4gIHRoaXMuX2RlY3J5cHQgPSBkZWNyeXB0XG4gIGl2LmNvcHkodGhpcy5fcHJldilcbiAgdGhpcy5fbW9kZSA9IG1vZGVcbn1cblN0cmVhbUNpcGhlci5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChjaHVuaykge1xuICByZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsIGNodW5rLCB0aGlzLl9kZWNyeXB0KVxufVxuU3RyZWFtQ2lwaGVyLnByb3RvdHlwZS5fZmluYWwgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2NpcGhlci5zY3J1YigpXG59XG4iLCJ2YXIgZWJ0ayA9IHJlcXVpcmUoJ2V2cF9ieXRlc3Rva2V5JylcbnZhciBhZXMgPSByZXF1aXJlKCdicm93c2VyaWZ5LWFlcy9icm93c2VyJylcbnZhciBERVMgPSByZXF1aXJlKCdicm93c2VyaWZ5LWRlcycpXG52YXIgZGVzTW9kZXMgPSByZXF1aXJlKCdicm93c2VyaWZ5LWRlcy9tb2RlcycpXG52YXIgYWVzTW9kZXMgPSByZXF1aXJlKCdicm93c2VyaWZ5LWFlcy9tb2RlcycpXG5mdW5jdGlvbiBjcmVhdGVDaXBoZXIgKHN1aXRlLCBwYXNzd29yZCkge1xuICB2YXIga2V5TGVuLCBpdkxlblxuICBzdWl0ZSA9IHN1aXRlLnRvTG93ZXJDYXNlKClcbiAgaWYgKGFlc01vZGVzW3N1aXRlXSkge1xuICAgIGtleUxlbiA9IGFlc01vZGVzW3N1aXRlXS5rZXlcbiAgICBpdkxlbiA9IGFlc01vZGVzW3N1aXRlXS5pdlxuICB9IGVsc2UgaWYgKGRlc01vZGVzW3N1aXRlXSkge1xuICAgIGtleUxlbiA9IGRlc01vZGVzW3N1aXRlXS5rZXkgKiA4XG4gICAgaXZMZW4gPSBkZXNNb2Rlc1tzdWl0ZV0uaXZcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1aXRlIHR5cGUnKVxuICB9XG4gIHZhciBrZXlzID0gZWJ0ayhwYXNzd29yZCwgZmFsc2UsIGtleUxlbiwgaXZMZW4pXG4gIHJldHVybiBjcmVhdGVDaXBoZXJpdihzdWl0ZSwga2V5cy5rZXksIGtleXMuaXYpXG59XG5mdW5jdGlvbiBjcmVhdGVEZWNpcGhlciAoc3VpdGUsIHBhc3N3b3JkKSB7XG4gIHZhciBrZXlMZW4sIGl2TGVuXG4gIHN1aXRlID0gc3VpdGUudG9Mb3dlckNhc2UoKVxuICBpZiAoYWVzTW9kZXNbc3VpdGVdKSB7XG4gICAga2V5TGVuID0gYWVzTW9kZXNbc3VpdGVdLmtleVxuICAgIGl2TGVuID0gYWVzTW9kZXNbc3VpdGVdLml2XG4gIH0gZWxzZSBpZiAoZGVzTW9kZXNbc3VpdGVdKSB7XG4gICAga2V5TGVuID0gZGVzTW9kZXNbc3VpdGVdLmtleSAqIDhcbiAgICBpdkxlbiA9IGRlc01vZGVzW3N1aXRlXS5pdlxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgc3VpdGUgdHlwZScpXG4gIH1cbiAgdmFyIGtleXMgPSBlYnRrKHBhc3N3b3JkLCBmYWxzZSwga2V5TGVuLCBpdkxlbilcbiAgcmV0dXJuIGNyZWF0ZURlY2lwaGVyaXYoc3VpdGUsIGtleXMua2V5LCBrZXlzLml2KVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDaXBoZXJpdiAoc3VpdGUsIGtleSwgaXYpIHtcbiAgc3VpdGUgPSBzdWl0ZS50b0xvd2VyQ2FzZSgpXG4gIGlmIChhZXNNb2Rlc1tzdWl0ZV0pIHtcbiAgICByZXR1cm4gYWVzLmNyZWF0ZUNpcGhlcml2KHN1aXRlLCBrZXksIGl2KVxuICB9IGVsc2UgaWYgKGRlc01vZGVzW3N1aXRlXSkge1xuICAgIHJldHVybiBuZXcgREVTKHtcbiAgICAgIGtleToga2V5LFxuICAgICAgaXY6IGl2LFxuICAgICAgbW9kZTogc3VpdGVcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgc3VpdGUgdHlwZScpXG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZURlY2lwaGVyaXYgKHN1aXRlLCBrZXksIGl2KSB7XG4gIHN1aXRlID0gc3VpdGUudG9Mb3dlckNhc2UoKVxuICBpZiAoYWVzTW9kZXNbc3VpdGVdKSB7XG4gICAgcmV0dXJuIGFlcy5jcmVhdGVEZWNpcGhlcml2KHN1aXRlLCBrZXksIGl2KVxuICB9IGVsc2UgaWYgKGRlc01vZGVzW3N1aXRlXSkge1xuICAgIHJldHVybiBuZXcgREVTKHtcbiAgICAgIGtleToga2V5LFxuICAgICAgaXY6IGl2LFxuICAgICAgbW9kZTogc3VpdGUsXG4gICAgICBkZWNyeXB0OiB0cnVlXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1aXRlIHR5cGUnKVxuICB9XG59XG5leHBvcnRzLmNyZWF0ZUNpcGhlciA9IGV4cG9ydHMuQ2lwaGVyID0gY3JlYXRlQ2lwaGVyXG5leHBvcnRzLmNyZWF0ZUNpcGhlcml2ID0gZXhwb3J0cy5DaXBoZXJpdiA9IGNyZWF0ZUNpcGhlcml2XG5leHBvcnRzLmNyZWF0ZURlY2lwaGVyID0gZXhwb3J0cy5EZWNpcGhlciA9IGNyZWF0ZURlY2lwaGVyXG5leHBvcnRzLmNyZWF0ZURlY2lwaGVyaXYgPSBleHBvcnRzLkRlY2lwaGVyaXYgPSBjcmVhdGVEZWNpcGhlcml2XG5mdW5jdGlvbiBnZXRDaXBoZXJzICgpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGRlc01vZGVzKS5jb25jYXQoYWVzLmdldENpcGhlcnMoKSlcbn1cbmV4cG9ydHMubGlzdENpcGhlcnMgPSBleHBvcnRzLmdldENpcGhlcnMgPSBnZXRDaXBoZXJzXG4iLCJ2YXIgQ2lwaGVyQmFzZSA9IHJlcXVpcmUoJ2NpcGhlci1iYXNlJylcbnZhciBkZXMgPSByZXF1aXJlKCdkZXMuanMnKVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuXG52YXIgbW9kZXMgPSB7XG4gICdkZXMtZWRlMy1jYmMnOiBkZXMuQ0JDLmluc3RhbnRpYXRlKGRlcy5FREUpLFxuICAnZGVzLWVkZTMnOiBkZXMuRURFLFxuICAnZGVzLWVkZS1jYmMnOiBkZXMuQ0JDLmluc3RhbnRpYXRlKGRlcy5FREUpLFxuICAnZGVzLWVkZSc6IGRlcy5FREUsXG4gICdkZXMtY2JjJzogZGVzLkNCQy5pbnN0YW50aWF0ZShkZXMuREVTKSxcbiAgJ2Rlcy1lY2InOiBkZXMuREVTXG59XG5tb2Rlcy5kZXMgPSBtb2Rlc1snZGVzLWNiYyddXG5tb2Rlcy5kZXMzID0gbW9kZXNbJ2Rlcy1lZGUzLWNiYyddXG5tb2R1bGUuZXhwb3J0cyA9IERFU1xuaW5oZXJpdHMoREVTLCBDaXBoZXJCYXNlKVxuZnVuY3Rpb24gREVTIChvcHRzKSB7XG4gIENpcGhlckJhc2UuY2FsbCh0aGlzKVxuICB2YXIgbW9kZU5hbWUgPSBvcHRzLm1vZGUudG9Mb3dlckNhc2UoKVxuICB2YXIgbW9kZSA9IG1vZGVzW21vZGVOYW1lXVxuICB2YXIgdHlwZVxuICBpZiAob3B0cy5kZWNyeXB0KSB7XG4gICAgdHlwZSA9ICdkZWNyeXB0J1xuICB9IGVsc2Uge1xuICAgIHR5cGUgPSAnZW5jcnlwdCdcbiAgfVxuICB2YXIga2V5ID0gb3B0cy5rZXlcbiAgaWYgKG1vZGVOYW1lID09PSAnZGVzLWVkZScgfHwgbW9kZU5hbWUgPT09ICdkZXMtZWRlLWNiYycpIHtcbiAgICBrZXkgPSBCdWZmZXIuY29uY2F0KFtrZXksIGtleS5zbGljZSgwLCA4KV0pXG4gIH1cbiAgdmFyIGl2ID0gb3B0cy5pdlxuICB0aGlzLl9kZXMgPSBtb2RlLmNyZWF0ZSh7XG4gICAga2V5OiBrZXksXG4gICAgaXY6IGl2LFxuICAgIHR5cGU6IHR5cGVcbiAgfSlcbn1cbkRFUy5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHJldHVybiBuZXcgQnVmZmVyKHRoaXMuX2Rlcy51cGRhdGUoZGF0YSkpXG59XG5ERVMucHJvdG90eXBlLl9maW5hbCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBCdWZmZXIodGhpcy5fZGVzLmZpbmFsKCkpXG59XG4iLCJleHBvcnRzWydkZXMtZWNiJ10gPSB7XG4gIGtleTogOCxcbiAgaXY6IDBcbn1cbmV4cG9ydHNbJ2Rlcy1jYmMnXSA9IGV4cG9ydHMuZGVzID0ge1xuICBrZXk6IDgsXG4gIGl2OiA4XG59XG5leHBvcnRzWydkZXMtZWRlMy1jYmMnXSA9IGV4cG9ydHMuZGVzMyA9IHtcbiAga2V5OiAyNCxcbiAgaXY6IDhcbn1cbmV4cG9ydHNbJ2Rlcy1lZGUzJ10gPSB7XG4gIGtleTogMjQsXG4gIGl2OiAwXG59XG5leHBvcnRzWydkZXMtZWRlLWNiYyddID0ge1xuICBrZXk6IDE2LFxuICBpdjogOFxufVxuZXhwb3J0c1snZGVzLWVkZSddID0ge1xuICBrZXk6IDE2LFxuICBpdjogMFxufVxuIiwidmFyIGJuID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciByYW5kb21CeXRlcyA9IHJlcXVpcmUoJ3JhbmRvbWJ5dGVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGNydDtcbmZ1bmN0aW9uIGJsaW5kKHByaXYpIHtcbiAgdmFyIHIgPSBnZXRyKHByaXYpO1xuICB2YXIgYmxpbmRlciA9IHIudG9SZWQoYm4ubW9udChwcml2Lm1vZHVsdXMpKVxuICAucmVkUG93KG5ldyBibihwcml2LnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpO1xuICByZXR1cm4ge1xuICAgIGJsaW5kZXI6IGJsaW5kZXIsXG4gICAgdW5ibGluZGVyOnIuaW52bShwcml2Lm1vZHVsdXMpXG4gIH07XG59XG5mdW5jdGlvbiBjcnQobXNnLCBwcml2KSB7XG4gIHZhciBibGluZHMgPSBibGluZChwcml2KTtcbiAgdmFyIGxlbiA9IHByaXYubW9kdWx1cy5ieXRlTGVuZ3RoKCk7XG4gIHZhciBtb2QgPSBibi5tb250KHByaXYubW9kdWx1cyk7XG4gIHZhciBibGluZGVkID0gbmV3IGJuKG1zZykubXVsKGJsaW5kcy5ibGluZGVyKS51bW9kKHByaXYubW9kdWx1cyk7XG4gIHZhciBjMSA9IGJsaW5kZWQudG9SZWQoYm4ubW9udChwcml2LnByaW1lMSkpO1xuICB2YXIgYzIgPSBibGluZGVkLnRvUmVkKGJuLm1vbnQocHJpdi5wcmltZTIpKTtcbiAgdmFyIHFpbnYgPSBwcml2LmNvZWZmaWNpZW50O1xuICB2YXIgcCA9IHByaXYucHJpbWUxO1xuICB2YXIgcSA9IHByaXYucHJpbWUyO1xuICB2YXIgbTEgPSBjMS5yZWRQb3cocHJpdi5leHBvbmVudDEpO1xuICB2YXIgbTIgPSBjMi5yZWRQb3cocHJpdi5leHBvbmVudDIpO1xuICBtMSA9IG0xLmZyb21SZWQoKTtcbiAgbTIgPSBtMi5mcm9tUmVkKCk7XG4gIHZhciBoID0gbTEuaXN1YihtMikuaW11bChxaW52KS51bW9kKHApO1xuICBoLmltdWwocSk7XG4gIG0yLmlhZGQoaCk7XG4gIHJldHVybiBuZXcgQnVmZmVyKG0yLmltdWwoYmxpbmRzLnVuYmxpbmRlcikudW1vZChwcml2Lm1vZHVsdXMpLnRvQXJyYXkoZmFsc2UsIGxlbikpO1xufVxuY3J0LmdldHIgPSBnZXRyO1xuZnVuY3Rpb24gZ2V0cihwcml2KSB7XG4gIHZhciBsZW4gPSBwcml2Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO1xuICB2YXIgciA9IG5ldyBibihyYW5kb21CeXRlcyhsZW4pKTtcbiAgd2hpbGUgKHIuY21wKHByaXYubW9kdWx1cykgPj0gIDAgfHwgIXIudW1vZChwcml2LnByaW1lMSkgfHwgIXIudW1vZChwcml2LnByaW1lMikpIHtcbiAgICByID0gbmV3IGJuKHJhbmRvbUJ5dGVzKGxlbikpO1xuICB9XG4gIHJldHVybiByO1xufVxuIiwiJ3VzZSBzdHJpY3QnXG5leHBvcnRzWydSU0EtU0hBMjI0J10gPSBleHBvcnRzLnNoYTIyNFdpdGhSU0FFbmNyeXB0aW9uID0ge1xuICBzaWduOiAncnNhJyxcbiAgaGFzaDogJ3NoYTIyNCcsXG4gIGlkOiBuZXcgQnVmZmVyKCczMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxYycsICdoZXgnKVxufVxuZXhwb3J0c1snUlNBLVNIQTI1NiddID0gZXhwb3J0cy5zaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiA9IHtcbiAgc2lnbjogJ3JzYScsXG4gIGhhc2g6ICdzaGEyNTYnLFxuICBpZDogbmV3IEJ1ZmZlcignMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjAnLCAnaGV4Jylcbn1cbmV4cG9ydHNbJ1JTQS1TSEEzODQnXSA9IGV4cG9ydHMuc2hhMzg0V2l0aFJTQUVuY3J5cHRpb24gPSB7XG4gIHNpZ246ICdyc2EnLFxuICBoYXNoOiAnc2hhMzg0JyxcbiAgaWQ6IG5ldyBCdWZmZXIoJzMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwJywgJ2hleCcpXG59XG5leHBvcnRzWydSU0EtU0hBNTEyJ10gPSBleHBvcnRzLnNoYTUxMldpdGhSU0FFbmNyeXB0aW9uID0ge1xuICBzaWduOiAncnNhJyxcbiAgaGFzaDogJ3NoYTUxMicsXG4gIGlkOiBuZXcgQnVmZmVyKCczMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MCcsICdoZXgnKVxufVxuZXhwb3J0c1snUlNBLVNIQTEnXSA9IHtcbiAgc2lnbjogJ3JzYScsXG4gIGhhc2g6ICdzaGExJyxcbiAgaWQ6IG5ldyBCdWZmZXIoJzMwMjEzMDA5MDYwNTJiMGUwMzAyMWEwNTAwMDQxNCcsICdoZXgnKVxufVxuZXhwb3J0c1snZWNkc2Etd2l0aC1TSEExJ10gPSB7XG4gIHNpZ246ICdlY2RzYScsXG4gIGhhc2g6ICdzaGExJyxcbiAgaWQ6IG5ldyBCdWZmZXIoJycsICdoZXgnKVxufVxuXG5leHBvcnRzLkRTQSA9IGV4cG9ydHNbJ0RTQS1TSEExJ10gPSBleHBvcnRzWydEU0EtU0hBJ10gPSB7XG4gIHNpZ246ICdkc2EnLFxuICBoYXNoOiAnc2hhMScsXG4gIGlkOiBuZXcgQnVmZmVyKCcnLCAnaGV4Jylcbn1cbmV4cG9ydHNbJ0RTQS1TSEEyMjQnXSA9IGV4cG9ydHNbJ0RTQS1XSVRILVNIQTIyNCddID0ge1xuICBzaWduOiAnZHNhJyxcbiAgaGFzaDogJ3NoYTIyNCcsXG4gIGlkOiBuZXcgQnVmZmVyKCcnLCAnaGV4Jylcbn1cbmV4cG9ydHNbJ0RTQS1TSEEyNTYnXSA9IGV4cG9ydHNbJ0RTQS1XSVRILVNIQTI1NiddID0ge1xuICBzaWduOiAnZHNhJyxcbiAgaGFzaDogJ3NoYTI1NicsXG4gIGlkOiBuZXcgQnVmZmVyKCcnLCAnaGV4Jylcbn1cbmV4cG9ydHNbJ0RTQS1TSEEzODQnXSA9IGV4cG9ydHNbJ0RTQS1XSVRILVNIQTM4NCddID0ge1xuICBzaWduOiAnZHNhJyxcbiAgaGFzaDogJ3NoYTM4NCcsXG4gIGlkOiBuZXcgQnVmZmVyKCcnLCAnaGV4Jylcbn1cbmV4cG9ydHNbJ0RTQS1TSEE1MTInXSA9IGV4cG9ydHNbJ0RTQS1XSVRILVNIQTUxMiddID0ge1xuICBzaWduOiAnZHNhJyxcbiAgaGFzaDogJ3NoYTUxMicsXG4gIGlkOiBuZXcgQnVmZmVyKCcnLCAnaGV4Jylcbn1cbmV4cG9ydHNbJ0RTQS1SSVBFTUQxNjAnXSA9IHtcbiAgc2lnbjogJ2RzYScsXG4gIGhhc2g6ICdybWQxNjAnLFxuICBpZDogbmV3IEJ1ZmZlcignJywgJ2hleCcpXG59XG5leHBvcnRzWydSU0EtUklQRU1EMTYwJ10gPSBleHBvcnRzLnJpcGVtZDE2MFdpdGhSU0EgPSB7XG4gIHNpZ246ICdyc2EnLFxuICBoYXNoOiAncm1kMTYwJyxcbiAgaWQ6IG5ldyBCdWZmZXIoJzMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCcsICdoZXgnKVxufVxuZXhwb3J0c1snUlNBLU1ENSddID0gZXhwb3J0cy5tZDVXaXRoUlNBRW5jcnlwdGlvbiA9IHtcbiAgc2lnbjogJ3JzYScsXG4gIGhhc2g6ICdtZDUnLFxuICBpZDogbmV3IEJ1ZmZlcignMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwJywgJ2hleCcpXG59XG4iLCJ2YXIgX2FsZ29zID0gcmVxdWlyZSgnLi9hbGdvcycpXG52YXIgY3JlYXRlSGFzaCA9IHJlcXVpcmUoJ2NyZWF0ZS1oYXNoJylcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBzaWduID0gcmVxdWlyZSgnLi9zaWduJylcbnZhciBzdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKVxudmFyIHZlcmlmeSA9IHJlcXVpcmUoJy4vdmVyaWZ5JylcblxudmFyIGFsZ29zID0ge31cbk9iamVjdC5rZXlzKF9hbGdvcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGFsZ29zW2tleV0gPSBhbGdvc1trZXkudG9Mb3dlckNhc2UoKV0gPSBfYWxnb3Nba2V5XVxufSlcblxuZnVuY3Rpb24gU2lnbiAoYWxnb3JpdGhtKSB7XG4gIHN0cmVhbS5Xcml0YWJsZS5jYWxsKHRoaXMpXG5cbiAgdmFyIGRhdGEgPSBhbGdvc1thbGdvcml0aG1dXG4gIGlmICghZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBtZXNzYWdlIGRpZ2VzdCcpXG4gIH1cblxuICB0aGlzLl9oYXNoVHlwZSA9IGRhdGEuaGFzaFxuICB0aGlzLl9oYXNoID0gY3JlYXRlSGFzaChkYXRhLmhhc2gpXG4gIHRoaXMuX3RhZyA9IGRhdGEuaWRcbiAgdGhpcy5fc2lnblR5cGUgPSBkYXRhLnNpZ25cbn1cbmluaGVyaXRzKFNpZ24sIHN0cmVhbS5Xcml0YWJsZSlcblxuU2lnbi5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gX3dyaXRlIChkYXRhLCBfLCBkb25lKSB7XG4gIHRoaXMuX2hhc2gudXBkYXRlKGRhdGEpXG4gIGRvbmUoKVxufVxuXG5TaWduLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKGRhdGEsIGVuYykge1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgZGF0YSA9IG5ldyBCdWZmZXIoZGF0YSwgZW5jKVxuICB9XG5cbiAgdGhpcy5faGFzaC51cGRhdGUoZGF0YSlcbiAgcmV0dXJuIHRoaXNcbn1cblxuU2lnbi5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uIHNpZ25NZXRob2QgKGtleSwgZW5jKSB7XG4gIHRoaXMuZW5kKClcbiAgdmFyIGhhc2ggPSB0aGlzLl9oYXNoLmRpZ2VzdCgpXG4gIHZhciBzaWcgPSBzaWduKEJ1ZmZlci5jb25jYXQoW3RoaXMuX3RhZywgaGFzaF0pLCBrZXksIHRoaXMuX2hhc2hUeXBlLCB0aGlzLl9zaWduVHlwZSlcblxuICByZXR1cm4gZW5jID8gc2lnLnRvU3RyaW5nKGVuYykgOiBzaWdcbn1cblxuZnVuY3Rpb24gVmVyaWZ5IChhbGdvcml0aG0pIHtcbiAgc3RyZWFtLldyaXRhYmxlLmNhbGwodGhpcylcblxuICB2YXIgZGF0YSA9IGFsZ29zW2FsZ29yaXRobV1cbiAgaWYgKCFkYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIG1lc3NhZ2UgZGlnZXN0JylcbiAgfVxuXG4gIHRoaXMuX2hhc2ggPSBjcmVhdGVIYXNoKGRhdGEuaGFzaClcbiAgdGhpcy5fdGFnID0gZGF0YS5pZFxuICB0aGlzLl9zaWduVHlwZSA9IGRhdGEuc2lnblxufVxuaW5oZXJpdHMoVmVyaWZ5LCBzdHJlYW0uV3JpdGFibGUpXG5cblZlcmlmeS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gX3dyaXRlIChkYXRhLCBfLCBkb25lKSB7XG4gIHRoaXMuX2hhc2gudXBkYXRlKGRhdGEpXG5cbiAgZG9uZSgpXG59XG5cblZlcmlmeS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlIChkYXRhLCBlbmMpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgIGRhdGEgPSBuZXcgQnVmZmVyKGRhdGEsIGVuYylcbiAgfVxuXG4gIHRoaXMuX2hhc2gudXBkYXRlKGRhdGEpXG4gIHJldHVybiB0aGlzXG59XG5cblZlcmlmeS5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5TWV0aG9kIChrZXksIHNpZywgZW5jKSB7XG4gIGlmICh0eXBlb2Ygc2lnID09PSAnc3RyaW5nJykge1xuICAgIHNpZyA9IG5ldyBCdWZmZXIoc2lnLCBlbmMpXG4gIH1cblxuICB0aGlzLmVuZCgpXG4gIHZhciBoYXNoID0gdGhpcy5faGFzaC5kaWdlc3QoKVxuXG4gIHJldHVybiB2ZXJpZnkoc2lnLCBCdWZmZXIuY29uY2F0KFt0aGlzLl90YWcsIGhhc2hdKSwga2V5LCB0aGlzLl9zaWduVHlwZSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2lnbiAoYWxnb3JpdGhtKSB7XG4gIHJldHVybiBuZXcgU2lnbihhbGdvcml0aG0pXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVZlcmlmeSAoYWxnb3JpdGhtKSB7XG4gIHJldHVybiBuZXcgVmVyaWZ5KGFsZ29yaXRobSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFNpZ246IGNyZWF0ZVNpZ24sXG4gIFZlcmlmeTogY3JlYXRlVmVyaWZ5LFxuICBjcmVhdGVTaWduOiBjcmVhdGVTaWduLFxuICBjcmVhdGVWZXJpZnk6IGNyZWF0ZVZlcmlmeVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5leHBvcnRzWycxLjMuMTMyLjAuMTAnXSA9ICdzZWNwMjU2azEnXG5cbmV4cG9ydHNbJzEuMy4xMzIuMC4zMyddID0gJ3AyMjQnXG5cbmV4cG9ydHNbJzEuMi44NDAuMTAwNDUuMy4xLjEnXSA9ICdwMTkyJ1xuXG5leHBvcnRzWycxLjIuODQwLjEwMDQ1LjMuMS43J10gPSAncDI1NidcblxuZXhwb3J0c1snMS4zLjEzMi4wLjM0J10gPSAncDM4NCdcblxuZXhwb3J0c1snMS4zLjEzMi4wLjM1J10gPSAncDUyMSdcbiIsIi8vIG11Y2ggb2YgdGhpcyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9zZWxmLXNpZ25lZC9ibG9iL2doLXBhZ2VzL2xpYi9yc2EuanNcbnZhciBjcmVhdGVIbWFjID0gcmVxdWlyZSgnY3JlYXRlLWhtYWMnKVxudmFyIGNydCA9IHJlcXVpcmUoJ2Jyb3dzZXJpZnktcnNhJylcbnZhciBjdXJ2ZXMgPSByZXF1aXJlKCcuL2N1cnZlcycpXG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCdlbGxpcHRpYycpXG52YXIgcGFyc2VLZXlzID0gcmVxdWlyZSgncGFyc2UtYXNuMScpXG5cbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJylcbnZhciBFQyA9IGVsbGlwdGljLmVjXG5cbmZ1bmN0aW9uIHNpZ24gKGhhc2gsIGtleSwgaGFzaFR5cGUsIHNpZ25UeXBlKSB7XG4gIHZhciBwcml2ID0gcGFyc2VLZXlzKGtleSlcbiAgaWYgKHByaXYuY3VydmUpIHtcbiAgICBpZiAoc2lnblR5cGUgIT09ICdlY2RzYScpIHRocm93IG5ldyBFcnJvcignd3JvbmcgcHJpdmF0ZSBrZXkgdHlwZScpXG5cbiAgICByZXR1cm4gZWNTaWduKGhhc2gsIHByaXYpXG4gIH0gZWxzZSBpZiAocHJpdi50eXBlID09PSAnZHNhJykge1xuICAgIGlmIChzaWduVHlwZSAhPT0gJ2RzYScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignd3JvbmcgcHJpdmF0ZSBrZXkgdHlwZScpXG4gICAgfVxuICAgIHJldHVybiBkc2FTaWduKGhhc2gsIHByaXYsIGhhc2hUeXBlKVxuICB9IGVsc2Uge1xuICAgIGlmIChzaWduVHlwZSAhPT0gJ3JzYScpIHRocm93IG5ldyBFcnJvcignd3JvbmcgcHJpdmF0ZSBrZXkgdHlwZScpXG4gIH1cblxuICB2YXIgbGVuID0gcHJpdi5tb2R1bHVzLmJ5dGVMZW5ndGgoKVxuICB2YXIgcGFkID0gWyAwLCAxIF1cbiAgd2hpbGUgKGhhc2gubGVuZ3RoICsgcGFkLmxlbmd0aCArIDEgPCBsZW4pIHtcbiAgICBwYWQucHVzaCgweGZmKVxuICB9XG4gIHBhZC5wdXNoKDB4MDApXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGhhc2gubGVuZ3RoKSB7XG4gICAgcGFkLnB1c2goaGFzaFtpXSlcbiAgfVxuXG4gIHZhciBvdXQgPSBjcnQocGFkLCBwcml2KVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIGVjU2lnbiAoaGFzaCwgcHJpdikge1xuICB2YXIgY3VydmVJZCA9IGN1cnZlc1twcml2LmN1cnZlLmpvaW4oJy4nKV1cbiAgaWYgKCFjdXJ2ZUlkKSB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gY3VydmUgJyArIHByaXYuY3VydmUuam9pbignLicpKVxuXG4gIHZhciBjdXJ2ZSA9IG5ldyBFQyhjdXJ2ZUlkKVxuICB2YXIga2V5ID0gY3VydmUuZ2VuS2V5UGFpcigpXG5cbiAga2V5Ll9pbXBvcnRQcml2YXRlKHByaXYucHJpdmF0ZUtleSlcbiAgdmFyIG91dCA9IGtleS5zaWduKGhhc2gpXG5cbiAgcmV0dXJuIG5ldyBCdWZmZXIob3V0LnRvREVSKCkpXG59XG5cbmZ1bmN0aW9uIGRzYVNpZ24gKGhhc2gsIHByaXYsIGFsZ28pIHtcbiAgdmFyIHggPSBwcml2LnBhcmFtcy5wcml2X2tleVxuICB2YXIgcCA9IHByaXYucGFyYW1zLnBcbiAgdmFyIHEgPSBwcml2LnBhcmFtcy5xXG4gIHZhciBnID0gcHJpdi5wYXJhbXMuZ1xuICB2YXIgciA9IG5ldyBCTigwKVxuICB2YXIga1xuICB2YXIgSCA9IGJpdHMyaW50KGhhc2gsIHEpLm1vZChxKVxuICB2YXIgcyA9IGZhbHNlXG4gIHZhciBrdiA9IGdldEtleSh4LCBxLCBoYXNoLCBhbGdvKVxuICB3aGlsZSAocyA9PT0gZmFsc2UpIHtcbiAgICBrID0gbWFrZUtleShxLCBrdiwgYWxnbylcbiAgICByID0gbWFrZVIoZywgaywgcCwgcSlcbiAgICBzID0gay5pbnZtKHEpLmltdWwoSC5hZGQoeC5tdWwocikpKS5tb2QocSlcbiAgICBpZiAoIXMuY21wbigwKSkge1xuICAgICAgcyA9IGZhbHNlXG4gICAgICByID0gbmV3IEJOKDApXG4gICAgfVxuICB9XG4gIHJldHVybiB0b0RFUihyLCBzKVxufVxuXG5mdW5jdGlvbiB0b0RFUiAociwgcykge1xuICByID0gci50b0FycmF5KClcbiAgcyA9IHMudG9BcnJheSgpXG5cbiAgLy8gUGFkIHZhbHVlc1xuICBpZiAoclswXSAmIDB4ODApIHtcbiAgICByID0gWyAwIF0uY29uY2F0KHIpXG4gIH1cbiAgLy8gUGFkIHZhbHVlc1xuICBpZiAoc1swXSAmIDB4ODApIHtcbiAgICBzID0gWzBdLmNvbmNhdChzKVxuICB9XG5cbiAgdmFyIHRvdGFsID0gci5sZW5ndGggKyBzLmxlbmd0aCArIDRcbiAgdmFyIHJlcyA9IFsgMHgzMCwgdG90YWwsIDB4MDIsIHIubGVuZ3RoIF1cbiAgcmVzID0gcmVzLmNvbmNhdChyLCBbIDB4MDIsIHMubGVuZ3RoIF0sIHMpXG4gIHJldHVybiBuZXcgQnVmZmVyKHJlcylcbn1cblxuZnVuY3Rpb24gZ2V0S2V5ICh4LCBxLCBoYXNoLCBhbGdvKSB7XG4gIHggPSBuZXcgQnVmZmVyKHgudG9BcnJheSgpKVxuICBpZiAoeC5sZW5ndGggPCBxLmJ5dGVMZW5ndGgoKSkge1xuICAgIHZhciB6ZXJvcyA9IG5ldyBCdWZmZXIocS5ieXRlTGVuZ3RoKCkgLSB4Lmxlbmd0aClcbiAgICB6ZXJvcy5maWxsKDApXG4gICAgeCA9IEJ1ZmZlci5jb25jYXQoW3plcm9zLCB4XSlcbiAgfVxuICB2YXIgaGxlbiA9IGhhc2gubGVuZ3RoXG4gIHZhciBoYml0cyA9IGJpdHMyb2N0ZXRzKGhhc2gsIHEpXG4gIHZhciB2ID0gbmV3IEJ1ZmZlcihobGVuKVxuICB2LmZpbGwoMSlcbiAgdmFyIGsgPSBuZXcgQnVmZmVyKGhsZW4pXG4gIGsuZmlsbCgwKVxuICBrID0gY3JlYXRlSG1hYyhhbGdvLCBrKVxuICAgIC51cGRhdGUodilcbiAgICAudXBkYXRlKG5ldyBCdWZmZXIoWzBdKSlcbiAgICAudXBkYXRlKHgpXG4gICAgLnVwZGF0ZShoYml0cylcbiAgICAuZGlnZXN0KClcbiAgdiA9IGNyZWF0ZUhtYWMoYWxnbywgaylcbiAgICAudXBkYXRlKHYpXG4gICAgLmRpZ2VzdCgpXG4gIGsgPSBjcmVhdGVIbWFjKGFsZ28sIGspXG4gICAgLnVwZGF0ZSh2KVxuICAgIC51cGRhdGUobmV3IEJ1ZmZlcihbMV0pKVxuICAgIC51cGRhdGUoeClcbiAgICAudXBkYXRlKGhiaXRzKVxuICAgIC5kaWdlc3QoKVxuICB2ID0gY3JlYXRlSG1hYyhhbGdvLCBrKVxuICAgIC51cGRhdGUodilcbiAgICAuZGlnZXN0KClcbiAgcmV0dXJuIHtcbiAgICBrOiBrLFxuICAgIHY6IHZcbiAgfVxufVxuXG5mdW5jdGlvbiBiaXRzMmludCAob2JpdHMsIHEpIHtcbiAgdmFyIGJpdHMgPSBuZXcgQk4ob2JpdHMpXG4gIHZhciBzaGlmdCA9IChvYml0cy5sZW5ndGggPDwgMykgLSBxLmJpdExlbmd0aCgpXG4gIGlmIChzaGlmdCA+IDApIHtcbiAgICBiaXRzLmlzaHJuKHNoaWZ0KVxuICB9XG4gIHJldHVybiBiaXRzXG59XG5cbmZ1bmN0aW9uIGJpdHMyb2N0ZXRzIChiaXRzLCBxKSB7XG4gIGJpdHMgPSBiaXRzMmludChiaXRzLCBxKVxuICBiaXRzID0gYml0cy5tb2QocSlcbiAgdmFyIG91dCA9IG5ldyBCdWZmZXIoYml0cy50b0FycmF5KCkpXG4gIGlmIChvdXQubGVuZ3RoIDwgcS5ieXRlTGVuZ3RoKCkpIHtcbiAgICB2YXIgemVyb3MgPSBuZXcgQnVmZmVyKHEuYnl0ZUxlbmd0aCgpIC0gb3V0Lmxlbmd0aClcbiAgICB6ZXJvcy5maWxsKDApXG4gICAgb3V0ID0gQnVmZmVyLmNvbmNhdChbemVyb3MsIG91dF0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiBtYWtlS2V5IChxLCBrdiwgYWxnbykge1xuICB2YXIgdCwga1xuXG4gIGRvIHtcbiAgICB0ID0gbmV3IEJ1ZmZlcignJylcblxuICAgIHdoaWxlICh0Lmxlbmd0aCAqIDggPCBxLmJpdExlbmd0aCgpKSB7XG4gICAgICBrdi52ID0gY3JlYXRlSG1hYyhhbGdvLCBrdi5rKVxuICAgICAgICAudXBkYXRlKGt2LnYpXG4gICAgICAgIC5kaWdlc3QoKVxuICAgICAgdCA9IEJ1ZmZlci5jb25jYXQoW3QsIGt2LnZdKVxuICAgIH1cblxuICAgIGsgPSBiaXRzMmludCh0LCBxKVxuICAgIGt2LmsgPSBjcmVhdGVIbWFjKGFsZ28sIGt2LmspXG4gICAgICAudXBkYXRlKGt2LnYpXG4gICAgICAudXBkYXRlKG5ldyBCdWZmZXIoWzBdKSlcbiAgICAgIC5kaWdlc3QoKVxuICAgIGt2LnYgPSBjcmVhdGVIbWFjKGFsZ28sIGt2LmspXG4gICAgICAudXBkYXRlKGt2LnYpXG4gICAgICAuZGlnZXN0KClcbiAgfSB3aGlsZSAoay5jbXAocSkgIT09IC0xKVxuXG4gIHJldHVybiBrXG59XG5cbmZ1bmN0aW9uIG1ha2VSIChnLCBrLCBwLCBxKSB7XG4gIHJldHVybiBnLnRvUmVkKEJOLm1vbnQocCkpLnJlZFBvdyhrKS5mcm9tUmVkKCkubW9kKHEpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2lnblxubW9kdWxlLmV4cG9ydHMuZ2V0S2V5ID0gZ2V0S2V5XG5tb2R1bGUuZXhwb3J0cy5tYWtlS2V5ID0gbWFrZUtleVxuIiwiLy8gbXVjaCBvZiB0aGlzIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9pbmR1dG55L3NlbGYtc2lnbmVkL2Jsb2IvZ2gtcGFnZXMvbGliL3JzYS5qc1xudmFyIGN1cnZlcyA9IHJlcXVpcmUoJy4vY3VydmVzJylcbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJ2VsbGlwdGljJylcbnZhciBwYXJzZUtleXMgPSByZXF1aXJlKCdwYXJzZS1hc24xJylcblxudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKVxudmFyIEVDID0gZWxsaXB0aWMuZWNcblxuZnVuY3Rpb24gdmVyaWZ5IChzaWcsIGhhc2gsIGtleSwgc2lnblR5cGUpIHtcbiAgdmFyIHB1YiA9IHBhcnNlS2V5cyhrZXkpXG4gIGlmIChwdWIudHlwZSA9PT0gJ2VjJykge1xuICAgIGlmIChzaWduVHlwZSAhPT0gJ2VjZHNhJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd3cm9uZyBwdWJsaWMga2V5IHR5cGUnKVxuICAgIH1cbiAgICByZXR1cm4gZWNWZXJpZnkoc2lnLCBoYXNoLCBwdWIpXG4gIH0gZWxzZSBpZiAocHViLnR5cGUgPT09ICdkc2EnKSB7XG4gICAgaWYgKHNpZ25UeXBlICE9PSAnZHNhJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd3cm9uZyBwdWJsaWMga2V5IHR5cGUnKVxuICAgIH1cbiAgICByZXR1cm4gZHNhVmVyaWZ5KHNpZywgaGFzaCwgcHViKVxuICB9IGVsc2Uge1xuICAgIGlmIChzaWduVHlwZSAhPT0gJ3JzYScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignd3JvbmcgcHVibGljIGtleSB0eXBlJylcbiAgICB9XG4gIH1cbiAgdmFyIGxlbiA9IHB1Yi5tb2R1bHVzLmJ5dGVMZW5ndGgoKVxuICB2YXIgcGFkID0gWyAxIF1cbiAgdmFyIHBhZE51bSA9IDBcbiAgd2hpbGUgKGhhc2gubGVuZ3RoICsgcGFkLmxlbmd0aCArIDIgPCBsZW4pIHtcbiAgICBwYWQucHVzaCgweGZmKVxuICAgIHBhZE51bSsrXG4gIH1cbiAgcGFkLnB1c2goMHgwMClcbiAgdmFyIGkgPSAtMVxuICB3aGlsZSAoKytpIDwgaGFzaC5sZW5ndGgpIHtcbiAgICBwYWQucHVzaChoYXNoW2ldKVxuICB9XG4gIHBhZCA9IG5ldyBCdWZmZXIocGFkKVxuICB2YXIgcmVkID0gQk4ubW9udChwdWIubW9kdWx1cylcbiAgc2lnID0gbmV3IEJOKHNpZykudG9SZWQocmVkKVxuXG4gIHNpZyA9IHNpZy5yZWRQb3cobmV3IEJOKHB1Yi5wdWJsaWNFeHBvbmVudCkpXG5cbiAgc2lnID0gbmV3IEJ1ZmZlcihzaWcuZnJvbVJlZCgpLnRvQXJyYXkoKSlcbiAgdmFyIG91dCA9IDBcbiAgaWYgKHBhZE51bSA8IDgpIHtcbiAgICBvdXQgPSAxXG4gIH1cbiAgbGVuID0gTWF0aC5taW4oc2lnLmxlbmd0aCwgcGFkLmxlbmd0aClcbiAgaWYgKHNpZy5sZW5ndGggIT09IHBhZC5sZW5ndGgpIHtcbiAgICBvdXQgPSAxXG4gIH1cblxuICBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIG91dCB8PSAoc2lnW2ldIF4gcGFkW2ldKVxuICB9XG4gIHJldHVybiBvdXQgPT09IDBcbn1cblxuZnVuY3Rpb24gZWNWZXJpZnkgKHNpZywgaGFzaCwgcHViKSB7XG4gIHZhciBjdXJ2ZUlkID0gY3VydmVzW3B1Yi5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCcuJyldXG4gIGlmICghY3VydmVJZCkgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGN1cnZlICcgKyBwdWIuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbignLicpKVxuXG4gIHZhciBjdXJ2ZSA9IG5ldyBFQyhjdXJ2ZUlkKVxuICB2YXIgcHVia2V5ID0gcHViLmRhdGEuc3ViamVjdFByaXZhdGVLZXkuZGF0YVxuXG4gIHJldHVybiBjdXJ2ZS52ZXJpZnkoaGFzaCwgc2lnLCBwdWJrZXkpXG59XG5cbmZ1bmN0aW9uIGRzYVZlcmlmeSAoc2lnLCBoYXNoLCBwdWIpIHtcbiAgdmFyIHAgPSBwdWIuZGF0YS5wXG4gIHZhciBxID0gcHViLmRhdGEucVxuICB2YXIgZyA9IHB1Yi5kYXRhLmdcbiAgdmFyIHkgPSBwdWIuZGF0YS5wdWJfa2V5XG4gIHZhciB1bnBhY2tlZCA9IHBhcnNlS2V5cy5zaWduYXR1cmUuZGVjb2RlKHNpZywgJ2RlcicpXG4gIHZhciBzID0gdW5wYWNrZWQuc1xuICB2YXIgciA9IHVucGFja2VkLnJcbiAgY2hlY2tWYWx1ZShzLCBxKVxuICBjaGVja1ZhbHVlKHIsIHEpXG4gIHZhciBtb250cCA9IEJOLm1vbnQocClcbiAgdmFyIHcgPSBzLmludm0ocSlcbiAgdmFyIHYgPSBnLnRvUmVkKG1vbnRwKVxuICAgIC5yZWRQb3cobmV3IEJOKGhhc2gpLm11bCh3KS5tb2QocSkpXG4gICAgLmZyb21SZWQoKVxuICAgIC5tdWwoXG4gICAgICB5LnRvUmVkKG1vbnRwKVxuICAgICAgICAucmVkUG93KHIubXVsKHcpLm1vZChxKSlcbiAgICAgICAgLmZyb21SZWQoKVxuICApLm1vZChwKS5tb2QocSlcbiAgcmV0dXJuICF2LmNtcChyKVxufVxuXG5mdW5jdGlvbiBjaGVja1ZhbHVlIChiLCBxKSB7XG4gIGlmIChiLmNtcG4oMCkgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzaWcnKVxuICB9XG4gIGlmIChiLmNtcChxKSA+PSBxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNpZycpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJpZnlcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpO1xudmFyIEJ1ZmZlciA9IGJ1ZmZlci5CdWZmZXI7XG52YXIgU2xvd0J1ZmZlciA9IGJ1ZmZlci5TbG93QnVmZmVyO1xudmFyIE1BWF9MRU4gPSBidWZmZXIua01heExlbmd0aCB8fCAyMTQ3NDgzNjQ3O1xuZXhwb3J0cy5hbGxvYyA9IGZ1bmN0aW9uIGFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgQnVmZmVyLmFsbG9jID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZyk7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IG5vdCBiZSBudW1iZXInKTtcbiAgfVxuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2l6ZSBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gIH1cbiAgaWYgKHNpemUgPiBNQVhfTEVOKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NpemUgaXMgdG9vIGxhcmdlJyk7XG4gIH1cbiAgdmFyIGVuYyA9IGVuY29kaW5nO1xuICB2YXIgX2ZpbGwgPSBmaWxsO1xuICBpZiAoX2ZpbGwgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuYyA9IHVuZGVmaW5lZDtcbiAgICBfZmlsbCA9IDA7XG4gIH1cbiAgdmFyIGJ1ZiA9IG5ldyBCdWZmZXIoc2l6ZSk7XG4gIGlmICh0eXBlb2YgX2ZpbGwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIGZpbGxCdWYgPSBuZXcgQnVmZmVyKF9maWxsLCBlbmMpO1xuICAgIHZhciBmbGVuID0gZmlsbEJ1Zi5sZW5ndGg7XG4gICAgdmFyIGkgPSAtMTtcbiAgICB3aGlsZSAoKytpIDwgc2l6ZSkge1xuICAgICAgYnVmW2ldID0gZmlsbEJ1ZltpICUgZmxlbl07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJ1Zi5maWxsKF9maWxsKTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuZXhwb3J0cy5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIGFsbG9jVW5zYWZlKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBCdWZmZXIuYWxsb2NVbnNhZmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jVW5zYWZlKHNpemUpO1xuICB9XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaXplIG11c3QgYmUgYSBudW1iZXInKTtcbiAgfVxuICBpZiAoc2l6ZSA+IE1BWF9MRU4pIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc2l6ZSBpcyB0b28gbGFyZ2UnKTtcbiAgfVxuICByZXR1cm4gbmV3IEJ1ZmZlcihzaXplKTtcbn1cbmV4cG9ydHMuZnJvbSA9IGZ1bmN0aW9uIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIEJ1ZmZlci5mcm9tID09PSAnZnVuY3Rpb24nICYmICghZ2xvYmFsLlVpbnQ4QXJyYXkgfHwgVWludDhBcnJheS5mcm9tICE9PSBCdWZmZXIuZnJvbSkpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KTtcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgdmFyIG9mZnNldCA9IGVuY29kaW5nT3JPZmZzZXQ7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBuZXcgQnVmZmVyKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cbiAgICB2YXIgbGVuID0gbGVuZ3RoO1xuICAgIGlmICh0eXBlb2YgbGVuID09PSAndW5kZWZpbmVkJykge1xuICAgICAgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aCAtIG9mZnNldDtcbiAgICB9XG4gICAgaWYgKG9mZnNldCA+PSB2YWx1ZS5ieXRlTGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnb2Zmc2V0XFwnIGlzIG91dCBvZiBib3VuZHMnKTtcbiAgICB9XG4gICAgaWYgKGxlbiA+IHZhbHVlLmJ5dGVMZW5ndGggLSBvZmZzZXQpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdsZW5ndGhcXCcgaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEJ1ZmZlcih2YWx1ZS5zbGljZShvZmZzZXQsIG9mZnNldCArIGxlbikpO1xuICB9XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgdmFyIG91dCA9IG5ldyBCdWZmZXIodmFsdWUubGVuZ3RoKTtcbiAgICB2YWx1ZS5jb3B5KG91dCwgMCwgMCwgdmFsdWUubGVuZ3RoKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIGlmICh2YWx1ZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSB8fCAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgfHwgJ2xlbmd0aCcgaW4gdmFsdWUpIHtcbiAgICAgIHJldHVybiBuZXcgQnVmZmVyKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLnR5cGUgPT09ICdCdWZmZXInICYmIEFycmF5LmlzQXJyYXkodmFsdWUuZGF0YSkpIHtcbiAgICAgIHJldHVybiBuZXcgQnVmZmVyKHZhbHVlLmRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgJyArICdBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpO1xufVxuZXhwb3J0cy5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiBhbGxvY1Vuc2FmZVNsb3coc2l6ZSkge1xuICBpZiAodHlwZW9mIEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyhzaXplKTtcbiAgfVxuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2l6ZSBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gIH1cbiAgaWYgKHNpemUgPj0gTUFYX0xFTikge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdzaXplIGlzIHRvbyBsYXJnZScpO1xuICB9XG4gIHJldHVybiBuZXcgU2xvd0J1ZmZlcihzaXplKTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geG9yIChhLCBiKSB7XG4gIHZhciBsZW5ndGggPSBNYXRoLm1pbihhLmxlbmd0aCwgYi5sZW5ndGgpXG4gIHZhciBidWZmZXIgPSBuZXcgQnVmZmVyKGxlbmd0aClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgYnVmZmVyW2ldID0gYVtpXSBeIGJbaV1cbiAgfVxuXG4gIHJldHVybiBidWZmZXJcbn1cbiIsIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFVzZSBPYmplY3QgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIER1ZSB0byB2YXJpb3VzIGJyb3dzZXIgYnVncywgc29tZXRpbWVzIHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGV2ZW5cbiAqIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgdHlwZWQgYXJyYXlzLlxuICpcbiAqIE5vdGU6XG4gKlxuICogICAtIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgIGluc3RhbmNlcyxcbiAqICAgICBTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOC5cbiAqXG4gKiAgIC0gQ2hyb21lIDktMTAgaXMgbWlzc2luZyB0aGUgYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbi5cbiAqXG4gKiAgIC0gSUUxMCBoYXMgYSBicm9rZW4gYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFycmF5cyBvZlxuICogICAgIGluY29ycmVjdCBsZW5ndGggaW4gc29tZSBzaXR1YXRpb25zLlxuXG4gKiBXZSBkZXRlY3QgdGhlc2UgYnVnZ3kgYnJvd3NlcnMgYW5kIHNldCBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgIHRvIGBmYWxzZWAgc28gdGhleVxuICogZ2V0IHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHNsb3dlciBidXQgYmVoYXZlcyBjb3JyZWN0bHkuXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlQgIT09IHVuZGVmaW5lZFxuICA/IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gIDogdHlwZWRBcnJheVN1cHBvcnQoKVxuXG4vKlxuICogRXhwb3J0IGtNYXhMZW5ndGggYWZ0ZXIgdHlwZWQgYXJyYXkgc3VwcG9ydCBpcyBkZXRlcm1pbmVkLlxuICovXG5leHBvcnRzLmtNYXhMZW5ndGggPSBrTWF4TGVuZ3RoKClcblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5fX3Byb3RvX18gPSB7X19wcm90b19fOiBVaW50OEFycmF5LnByb3RvdHlwZSwgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9fVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyICYmIC8vIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkXG4gICAgICAgIHR5cGVvZiBhcnIuc3ViYXJyYXkgPT09ICdmdW5jdGlvbicgJiYgLy8gY2hyb21lIDktMTAgbGFjayBgc3ViYXJyYXlgXG4gICAgICAgIGFyci5zdWJhcnJheSgxLCAxKS5ieXRlTGVuZ3RoID09PSAwIC8vIGllMTAgaGFzIGJyb2tlbiBgc3ViYXJyYXlgXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBrTWF4TGVuZ3RoICgpIHtcbiAgcmV0dXJuIEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gICAgPyAweDdmZmZmZmZmXG4gICAgOiAweDNmZmZmZmZmXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAodGhhdCwgbGVuZ3RoKSB7XG4gIGlmIChrTWF4TGVuZ3RoKCkgPCBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgnKVxuICB9XG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIGlmICh0aGF0ID09PSBudWxsKSB7XG4gICAgICB0aGF0ID0gbmV3IEJ1ZmZlcihsZW5ndGgpXG4gICAgfVxuICAgIHRoYXQubGVuZ3RoID0gbGVuZ3RoXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiAhKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZSh0aGlzLCBhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20odGhpcywgYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG4vLyBUT0RPOiBMZWdhY3ksIG5vdCBuZWVkZWQgYW55bW9yZS4gUmVtb3ZlIGluIG5leHQgbWFqb3IgdmVyc2lvbi5cbkJ1ZmZlci5fYXVnbWVudCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgYXJyLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiBmcm9tICh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgcmV0dXJuIGZyb21PYmplY3QodGhhdCwgdmFsdWUpXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20obnVsbCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbiAgQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICYmXG4gICAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgICAvLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsIFN5bWJvbC5zcGVjaWVzLCB7XG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jICh0aGF0LCBzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldHRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhudWxsLCBzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHRoYXQsIHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHtcbiAgICAgIHRoYXRbaV0gPSAwXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAodGhhdCwgc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IHRoYXQud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIHRoYXQgPSB0aGF0LnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKHRoYXQsIGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgYXJyYXkuYnl0ZUxlbmd0aCAvLyB0aGlzIHRocm93cyBpZiBgYXJyYXlgIGlzIG5vdCBhIHZhbGlkIEFycmF5QnVmZmVyXG5cbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ29mZnNldFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnbGVuZ3RoXFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBhcnJheVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICB0aGF0ID0gZnJvbUFycmF5TGlrZSh0aGF0LCBhcnJheSlcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0ICh0aGF0LCBvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW4pXG5cbiAgICBpZiAodGhhdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGF0XG4gICAgfVxuXG4gICAgb2JqLmNvcHkodGhhdCwgMCwgMCwgbGVuKVxuICAgIHJldHVybiB0aGF0XG4gIH1cblxuICBpZiAob2JqKSB7XG4gICAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIG9iai5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgfHwgJ2xlbmd0aCcgaW4gb2JqKSB7XG4gICAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IGlzbmFuKG9iai5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgMClcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iailcbiAgICB9XG5cbiAgICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIGlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmouZGF0YSlcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuJylcbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IGtNYXhMZW5ndGgoKWAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBrTWF4TGVuZ3RoKCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsga01heExlbmd0aCgpLnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgc3RyaW5nIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmdcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcnNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhlIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgYW5kIGBpcy1idWZmZXJgIChpbiBTYWZhcmkgNS03KSB0byBkZXRlY3Rcbi8vIEJ1ZmZlciBpbnN0YW5jZXMuXG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHwgMFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkubWF0Y2goLy57Mn0vZykuam9pbignICcpXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICB9XG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgIC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChpc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmXG4gICAgICAgIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFsgdmFsIF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAoc3RyTGVuICUgMiAhPT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIC8vIGxlZ2FjeSB3cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aCkgLSByZW1vdmUgaW4gdjAuMTNcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWZcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAgIG5ld0J1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgdmFyIHNsaWNlTGVuID0gZW5kIC0gc3RhcnRcbiAgICBuZXdCdWYgPSBuZXcgQnVmZmVyKHNsaWNlTGVuLCB1bmRlZmluZWQpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZUxlbjsgKytpKSB7XG4gICAgICBuZXdCdWZbaV0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MTYgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgMik7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgJiAoMHhmZiA8PCAoOCAqIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpKSkpID4+PlxuICAgICAgKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkgKiA4XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MzIgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDQpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlID4+PiAobGl0dGxlRW5kaWFuID8gaSA6IDMgLSBpKSAqIDgpICYgMHhmZlxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuICB2YXIgaVxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIGlmIChsZW4gPCAxMDAwIHx8ICFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIGFzY2VuZGluZyBjb3B5IGZyb20gc3RhcnRcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IHV0ZjhUb0J5dGVzKG5ldyBCdWZmZXIodmFsLCBlbmNvZGluZykudG9TdHJpbmcoKSlcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rXFwvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyaW5ndHJpbShzdHIpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHN0cmluZ3RyaW0gKHN0cikge1xuICBpZiAoc3RyLnRyaW0pIHJldHVybiBzdHIudHJpbSgpXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gaXNuYW4gKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSB2YWwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cbiIsInZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdzdHJlYW0nKS5UcmFuc2Zvcm1cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXInKS5TdHJpbmdEZWNvZGVyXG5tb2R1bGUuZXhwb3J0cyA9IENpcGhlckJhc2VcbmluaGVyaXRzKENpcGhlckJhc2UsIFRyYW5zZm9ybSlcbmZ1bmN0aW9uIENpcGhlckJhc2UgKGhhc2hNb2RlKSB7XG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMpXG4gIHRoaXMuaGFzaE1vZGUgPSB0eXBlb2YgaGFzaE1vZGUgPT09ICdzdHJpbmcnXG4gIGlmICh0aGlzLmhhc2hNb2RlKSB7XG4gICAgdGhpc1toYXNoTW9kZV0gPSB0aGlzLl9maW5hbE9yRGlnZXN0XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5maW5hbCA9IHRoaXMuX2ZpbmFsT3JEaWdlc3RcbiAgfVxuICB0aGlzLl9kZWNvZGVyID0gbnVsbFxuICB0aGlzLl9lbmNvZGluZyA9IG51bGxcbn1cbkNpcGhlckJhc2UucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBpbnB1dEVuYywgb3V0cHV0RW5jKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICBkYXRhID0gbmV3IEJ1ZmZlcihkYXRhLCBpbnB1dEVuYylcbiAgfVxuICB2YXIgb3V0RGF0YSA9IHRoaXMuX3VwZGF0ZShkYXRhKVxuICBpZiAodGhpcy5oYXNoTW9kZSkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cbiAgaWYgKG91dHB1dEVuYykge1xuICAgIG91dERhdGEgPSB0aGlzLl90b1N0cmluZyhvdXREYXRhLCBvdXRwdXRFbmMpXG4gIH1cbiAgcmV0dXJuIG91dERhdGFcbn1cblxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmcgPSBmdW5jdGlvbiAoKSB7fVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5nZXRBdXRoVGFnID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3RyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUnKVxufVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5zZXRBdXRoVGFnID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3RyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUnKVxufVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5zZXRBQUQgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IG5ldyBFcnJvcigndHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUnKVxufVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGRhdGEsIF8sIG5leHQpIHtcbiAgdmFyIGVyclxuICB0cnkge1xuICAgIGlmICh0aGlzLmhhc2hNb2RlKSB7XG4gICAgICB0aGlzLl91cGRhdGUoZGF0YSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoKHRoaXMuX3VwZGF0ZShkYXRhKSlcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnIgPSBlXG4gIH0gZmluYWxseSB7XG4gICAgbmV4dChlcnIpXG4gIH1cbn1cbkNpcGhlckJhc2UucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uIChkb25lKSB7XG4gIHZhciBlcnJcbiAgdHJ5IHtcbiAgICB0aGlzLnB1c2godGhpcy5fZmluYWwoKSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVyciA9IGVcbiAgfSBmaW5hbGx5IHtcbiAgICBkb25lKGVycilcbiAgfVxufVxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3QgPSBmdW5jdGlvbiAob3V0cHV0RW5jKSB7XG4gIHZhciBvdXREYXRhID0gdGhpcy5fZmluYWwoKSB8fCBuZXcgQnVmZmVyKCcnKVxuICBpZiAob3V0cHV0RW5jKSB7XG4gICAgb3V0RGF0YSA9IHRoaXMuX3RvU3RyaW5nKG91dERhdGEsIG91dHB1dEVuYywgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb3V0RGF0YVxufVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAodmFsdWUsIGVuYywgZmluKSB7XG4gIGlmICghdGhpcy5fZGVjb2Rlcikge1xuICAgIHRoaXMuX2RlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpXG4gICAgdGhpcy5fZW5jb2RpbmcgPSBlbmNcbiAgfVxuICBpZiAodGhpcy5fZW5jb2RpbmcgIT09IGVuYykge1xuICAgIHRocm93IG5ldyBFcnJvcignY2FuXFwndCBzd2l0Y2ggZW5jb2RpbmdzJylcbiAgfVxuICB2YXIgb3V0ID0gdGhpcy5fZGVjb2Rlci53cml0ZSh2YWx1ZSlcbiAgaWYgKGZpbikge1xuICAgIG91dCArPSB0aGlzLl9kZWNvZGVyLmVuZCgpXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIk9fUkRPTkxZXCI6IDAsXG4gIFwiT19XUk9OTFlcIjogMSxcbiAgXCJPX1JEV1JcIjogMixcbiAgXCJTX0lGTVRcIjogNjE0NDAsXG4gIFwiU19JRlJFR1wiOiAzMjc2OCxcbiAgXCJTX0lGRElSXCI6IDE2Mzg0LFxuICBcIlNfSUZDSFJcIjogODE5MixcbiAgXCJTX0lGQkxLXCI6IDI0NTc2LFxuICBcIlNfSUZJRk9cIjogNDA5NixcbiAgXCJTX0lGTE5LXCI6IDQwOTYwLFxuICBcIlNfSUZTT0NLXCI6IDQ5MTUyLFxuICBcIk9fQ1JFQVRcIjogNTEyLFxuICBcIk9fRVhDTFwiOiAyMDQ4LFxuICBcIk9fTk9DVFRZXCI6IDEzMTA3MixcbiAgXCJPX1RSVU5DXCI6IDEwMjQsXG4gIFwiT19BUFBFTkRcIjogOCxcbiAgXCJPX0RJUkVDVE9SWVwiOiAxMDQ4NTc2LFxuICBcIk9fTk9GT0xMT1dcIjogMjU2LFxuICBcIk9fU1lOQ1wiOiAxMjgsXG4gIFwiT19TWU1MSU5LXCI6IDIwOTcxNTIsXG4gIFwiT19OT05CTE9DS1wiOiA0LFxuICBcIlNfSVJXWFVcIjogNDQ4LFxuICBcIlNfSVJVU1JcIjogMjU2LFxuICBcIlNfSVdVU1JcIjogMTI4LFxuICBcIlNfSVhVU1JcIjogNjQsXG4gIFwiU19JUldYR1wiOiA1NixcbiAgXCJTX0lSR1JQXCI6IDMyLFxuICBcIlNfSVdHUlBcIjogMTYsXG4gIFwiU19JWEdSUFwiOiA4LFxuICBcIlNfSVJXWE9cIjogNyxcbiAgXCJTX0lST1RIXCI6IDQsXG4gIFwiU19JV09USFwiOiAyLFxuICBcIlNfSVhPVEhcIjogMSxcbiAgXCJFMkJJR1wiOiA3LFxuICBcIkVBQ0NFU1wiOiAxMyxcbiAgXCJFQUREUklOVVNFXCI6IDQ4LFxuICBcIkVBRERSTk9UQVZBSUxcIjogNDksXG4gIFwiRUFGTk9TVVBQT1JUXCI6IDQ3LFxuICBcIkVBR0FJTlwiOiAzNSxcbiAgXCJFQUxSRUFEWVwiOiAzNyxcbiAgXCJFQkFERlwiOiA5LFxuICBcIkVCQURNU0dcIjogOTQsXG4gIFwiRUJVU1lcIjogMTYsXG4gIFwiRUNBTkNFTEVEXCI6IDg5LFxuICBcIkVDSElMRFwiOiAxMCxcbiAgXCJFQ09OTkFCT1JURURcIjogNTMsXG4gIFwiRUNPTk5SRUZVU0VEXCI6IDYxLFxuICBcIkVDT05OUkVTRVRcIjogNTQsXG4gIFwiRURFQURMS1wiOiAxMSxcbiAgXCJFREVTVEFERFJSRVFcIjogMzksXG4gIFwiRURPTVwiOiAzMyxcbiAgXCJFRFFVT1RcIjogNjksXG4gIFwiRUVYSVNUXCI6IDE3LFxuICBcIkVGQVVMVFwiOiAxNCxcbiAgXCJFRkJJR1wiOiAyNyxcbiAgXCJFSE9TVFVOUkVBQ0hcIjogNjUsXG4gIFwiRUlEUk1cIjogOTAsXG4gIFwiRUlMU0VRXCI6IDkyLFxuICBcIkVJTlBST0dSRVNTXCI6IDM2LFxuICBcIkVJTlRSXCI6IDQsXG4gIFwiRUlOVkFMXCI6IDIyLFxuICBcIkVJT1wiOiA1LFxuICBcIkVJU0NPTk5cIjogNTYsXG4gIFwiRUlTRElSXCI6IDIxLFxuICBcIkVMT09QXCI6IDYyLFxuICBcIkVNRklMRVwiOiAyNCxcbiAgXCJFTUxJTktcIjogMzEsXG4gIFwiRU1TR1NJWkVcIjogNDAsXG4gIFwiRU1VTFRJSE9QXCI6IDk1LFxuICBcIkVOQU1FVE9PTE9OR1wiOiA2MyxcbiAgXCJFTkVURE9XTlwiOiA1MCxcbiAgXCJFTkVUUkVTRVRcIjogNTIsXG4gIFwiRU5FVFVOUkVBQ0hcIjogNTEsXG4gIFwiRU5GSUxFXCI6IDIzLFxuICBcIkVOT0JVRlNcIjogNTUsXG4gIFwiRU5PREFUQVwiOiA5NixcbiAgXCJFTk9ERVZcIjogMTksXG4gIFwiRU5PRU5UXCI6IDIsXG4gIFwiRU5PRVhFQ1wiOiA4LFxuICBcIkVOT0xDS1wiOiA3NyxcbiAgXCJFTk9MSU5LXCI6IDk3LFxuICBcIkVOT01FTVwiOiAxMixcbiAgXCJFTk9NU0dcIjogOTEsXG4gIFwiRU5PUFJPVE9PUFRcIjogNDIsXG4gIFwiRU5PU1BDXCI6IDI4LFxuICBcIkVOT1NSXCI6IDk4LFxuICBcIkVOT1NUUlwiOiA5OSxcbiAgXCJFTk9TWVNcIjogNzgsXG4gIFwiRU5PVENPTk5cIjogNTcsXG4gIFwiRU5PVERJUlwiOiAyMCxcbiAgXCJFTk9URU1QVFlcIjogNjYsXG4gIFwiRU5PVFNPQ0tcIjogMzgsXG4gIFwiRU5PVFNVUFwiOiA0NSxcbiAgXCJFTk9UVFlcIjogMjUsXG4gIFwiRU5YSU9cIjogNixcbiAgXCJFT1BOT1RTVVBQXCI6IDEwMixcbiAgXCJFT1ZFUkZMT1dcIjogODQsXG4gIFwiRVBFUk1cIjogMSxcbiAgXCJFUElQRVwiOiAzMixcbiAgXCJFUFJPVE9cIjogMTAwLFxuICBcIkVQUk9UT05PU1VQUE9SVFwiOiA0MyxcbiAgXCJFUFJPVE9UWVBFXCI6IDQxLFxuICBcIkVSQU5HRVwiOiAzNCxcbiAgXCJFUk9GU1wiOiAzMCxcbiAgXCJFU1BJUEVcIjogMjksXG4gIFwiRVNSQ0hcIjogMyxcbiAgXCJFU1RBTEVcIjogNzAsXG4gIFwiRVRJTUVcIjogMTAxLFxuICBcIkVUSU1FRE9VVFwiOiA2MCxcbiAgXCJFVFhUQlNZXCI6IDI2LFxuICBcIkVXT1VMREJMT0NLXCI6IDM1LFxuICBcIkVYREVWXCI6IDE4LFxuICBcIlNJR0hVUFwiOiAxLFxuICBcIlNJR0lOVFwiOiAyLFxuICBcIlNJR1FVSVRcIjogMyxcbiAgXCJTSUdJTExcIjogNCxcbiAgXCJTSUdUUkFQXCI6IDUsXG4gIFwiU0lHQUJSVFwiOiA2LFxuICBcIlNJR0lPVFwiOiA2LFxuICBcIlNJR0JVU1wiOiAxMCxcbiAgXCJTSUdGUEVcIjogOCxcbiAgXCJTSUdLSUxMXCI6IDksXG4gIFwiU0lHVVNSMVwiOiAzMCxcbiAgXCJTSUdTRUdWXCI6IDExLFxuICBcIlNJR1VTUjJcIjogMzEsXG4gIFwiU0lHUElQRVwiOiAxMyxcbiAgXCJTSUdBTFJNXCI6IDE0LFxuICBcIlNJR1RFUk1cIjogMTUsXG4gIFwiU0lHQ0hMRFwiOiAyMCxcbiAgXCJTSUdDT05UXCI6IDE5LFxuICBcIlNJR1NUT1BcIjogMTcsXG4gIFwiU0lHVFNUUFwiOiAxOCxcbiAgXCJTSUdUVElOXCI6IDIxLFxuICBcIlNJR1RUT1VcIjogMjIsXG4gIFwiU0lHVVJHXCI6IDE2LFxuICBcIlNJR1hDUFVcIjogMjQsXG4gIFwiU0lHWEZTWlwiOiAyNSxcbiAgXCJTSUdWVEFMUk1cIjogMjYsXG4gIFwiU0lHUFJPRlwiOiAyNyxcbiAgXCJTSUdXSU5DSFwiOiAyOCxcbiAgXCJTSUdJT1wiOiAyMyxcbiAgXCJTSUdTWVNcIjogMTIsXG4gIFwiU1NMX09QX0FMTFwiOiAyMTQ3NDg2NzE5LFxuICBcIlNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT05cIjogMjYyMTQ0LFxuICBcIlNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0VcIjogNDE5NDMwNCxcbiAgXCJTU0xfT1BfQ0lTQ09fQU5ZQ09OTkVDVFwiOiAzMjc2OCxcbiAgXCJTU0xfT1BfQ09PS0lFX0VYQ0hBTkdFXCI6IDgxOTIsXG4gIFwiU1NMX09QX0NSWVBUT1BST19UTFNFWFRfQlVHXCI6IDIxNDc0ODM2NDgsXG4gIFwiU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UU1wiOiAyMDQ4LFxuICBcIlNTTF9PUF9FUEhFTUVSQUxfUlNBXCI6IDAsXG4gIFwiU1NMX09QX0xFR0FDWV9TRVJWRVJfQ09OTkVDVFwiOiA0LFxuICBcIlNTTF9PUF9NSUNST1NPRlRfQklHX1NTTFYzX0JVRkZFUlwiOiAzMixcbiAgXCJTU0xfT1BfTUlDUk9TT0ZUX1NFU1NfSURfQlVHXCI6IDEsXG4gIFwiU1NMX09QX01TSUVfU1NMVjJfUlNBX1BBRERJTkdcIjogMCxcbiAgXCJTU0xfT1BfTkVUU0NBUEVfQ0FfRE5fQlVHXCI6IDUzNjg3MDkxMixcbiAgXCJTU0xfT1BfTkVUU0NBUEVfQ0hBTExFTkdFX0JVR1wiOiAyLFxuICBcIlNTTF9PUF9ORVRTQ0FQRV9ERU1PX0NJUEhFUl9DSEFOR0VfQlVHXCI6IDEwNzM3NDE4MjQsXG4gIFwiU1NMX09QX05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHXCI6IDgsXG4gIFwiU1NMX09QX05PX0NPTVBSRVNTSU9OXCI6IDEzMTA3MixcbiAgXCJTU0xfT1BfTk9fUVVFUllfTVRVXCI6IDQwOTYsXG4gIFwiU1NMX09QX05PX1NFU1NJT05fUkVTVU1QVElPTl9PTl9SRU5FR09USUFUSU9OXCI6IDY1NTM2LFxuICBcIlNTTF9PUF9OT19TU0x2MlwiOiAxNjc3NzIxNixcbiAgXCJTU0xfT1BfTk9fU1NMdjNcIjogMzM1NTQ0MzIsXG4gIFwiU1NMX09QX05PX1RJQ0tFVFwiOiAxNjM4NCxcbiAgXCJTU0xfT1BfTk9fVExTdjFcIjogNjcxMDg4NjQsXG4gIFwiU1NMX09QX05PX1RMU3YxXzFcIjogMjY4NDM1NDU2LFxuICBcIlNTTF9PUF9OT19UTFN2MV8yXCI6IDEzNDIxNzcyOCxcbiAgXCJTU0xfT1BfUEtDUzFfQ0hFQ0tfMVwiOiAwLFxuICBcIlNTTF9PUF9QS0NTMV9DSEVDS18yXCI6IDAsXG4gIFwiU1NMX09QX1NJTkdMRV9ESF9VU0VcIjogMTA0ODU3NixcbiAgXCJTU0xfT1BfU0lOR0xFX0VDREhfVVNFXCI6IDUyNDI4OCxcbiAgXCJTU0xfT1BfU1NMRUFZXzA4MF9DTElFTlRfREhfQlVHXCI6IDEyOCxcbiAgXCJTU0xfT1BfU1NMUkVGMl9SRVVTRV9DRVJUX1RZUEVfQlVHXCI6IDAsXG4gIFwiU1NMX09QX1RMU19CTE9DS19QQURESU5HX0JVR1wiOiA1MTIsXG4gIFwiU1NMX09QX1RMU19ENV9CVUdcIjogMjU2LFxuICBcIlNTTF9PUF9UTFNfUk9MTEJBQ0tfQlVHXCI6IDgzODg2MDgsXG4gIFwiRU5HSU5FX01FVEhPRF9EU0FcIjogMixcbiAgXCJFTkdJTkVfTUVUSE9EX0RIXCI6IDQsXG4gIFwiRU5HSU5FX01FVEhPRF9SQU5EXCI6IDgsXG4gIFwiRU5HSU5FX01FVEhPRF9FQ0RIXCI6IDE2LFxuICBcIkVOR0lORV9NRVRIT0RfRUNEU0FcIjogMzIsXG4gIFwiRU5HSU5FX01FVEhPRF9DSVBIRVJTXCI6IDY0LFxuICBcIkVOR0lORV9NRVRIT0RfRElHRVNUU1wiOiAxMjgsXG4gIFwiRU5HSU5FX01FVEhPRF9TVE9SRVwiOiAyNTYsXG4gIFwiRU5HSU5FX01FVEhPRF9QS0VZX01FVEhTXCI6IDUxMixcbiAgXCJFTkdJTkVfTUVUSE9EX1BLRVlfQVNOMV9NRVRIU1wiOiAxMDI0LFxuICBcIkVOR0lORV9NRVRIT0RfQUxMXCI6IDY1NTM1LFxuICBcIkVOR0lORV9NRVRIT0RfTk9ORVwiOiAwLFxuICBcIkRIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUVcIjogMixcbiAgXCJESF9DSEVDS19QX05PVF9QUklNRVwiOiAxLFxuICBcIkRIX1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1JcIjogNCxcbiAgXCJESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SXCI6IDgsXG4gIFwiTlBOX0VOQUJMRURcIjogMSxcbiAgXCJSU0FfUEtDUzFfUEFERElOR1wiOiAxLFxuICBcIlJTQV9TU0xWMjNfUEFERElOR1wiOiAyLFxuICBcIlJTQV9OT19QQURESU5HXCI6IDMsXG4gIFwiUlNBX1BLQ1MxX09BRVBfUEFERElOR1wiOiA0LFxuICBcIlJTQV9YOTMxX1BBRERJTkdcIjogNSxcbiAgXCJSU0FfUEtDUzFfUFNTX1BBRERJTkdcIjogNixcbiAgXCJQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRURcIjogMixcbiAgXCJQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRFwiOiA0LFxuICBcIlBPSU5UX0NPTlZFUlNJT05fSFlCUklEXCI6IDYsXG4gIFwiRl9PS1wiOiAwLFxuICBcIlJfT0tcIjogNCxcbiAgXCJXX09LXCI6IDIsXG4gIFwiWF9PS1wiOiAxLFxuICBcIlVWX1VEUF9SRVVTRUFERFJcIjogNFxufVxuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5BcnJheS5mcm9tOyIsInZhciBjb3JlICA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKVxuICAsICRKU09OID0gY29yZS5KU09OIHx8IChjb3JlLkpTT04gPSB7c3RyaW5naWZ5OiBKU09OLnN0cmluZ2lmeX0pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHJldHVybiAkSlNPTi5zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3VtZW50cyk7XG59OyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24nKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5hc3NpZ247IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZScpO1xudmFyICRPYmplY3QgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGUoUCwgRCl7XG4gIHJldHVybiAkT2JqZWN0LmNyZWF0ZShQLCBEKTtcbn07IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xudmFyICRPYmplY3QgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKXtcbiAgcmV0dXJuICRPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyk7XG59OyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciAkT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpe1xuICByZXR1cm4gJE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG59OyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3QuZ2V0UHJvdG90eXBlT2Y7IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5rZXlzOyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Quc2V0UHJvdG90eXBlT2Y7IiwicmVxdWlyZSgnLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnByb21pc2UnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9fY29yZScpLlByb21pc2U7IiwicmVxdWlyZSgnLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnNldCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczcuc2V0LnRvLWpzb24nKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9fY29yZScpLlNldDsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlN5bWJvbDsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL193a3MtZXh0JykuZignaXRlcmF0b3InKTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCl7IC8qIGVtcHR5ICovIH07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKXtcbiAgaWYoIShpdCBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSB8fCAoZm9yYmlkZGVuRmllbGQgIT09IHVuZGVmaW5lZCAmJiBmb3JiaWRkZW5GaWVsZCBpbiBpdCkpe1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTsiLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICBpZighaXNPYmplY3QoaXQpKXRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTsiLCJ2YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdGVyLCBJVEVSQVRPUil7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yT2YoaXRlciwgZmFsc2UsIHJlc3VsdC5wdXNoLCByZXN1bHQsIElURVJBVE9SKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIHRvTGVuZ3RoICA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpXG4gICwgdG9JbmRleCAgID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oSVNfSU5DTFVERVMpe1xuICByZXR1cm4gZnVuY3Rpb24oJHRoaXMsIGVsLCBmcm9tSW5kZXgpe1xuICAgIHZhciBPICAgICAgPSB0b0lPYmplY3QoJHRoaXMpXG4gICAgICAsIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKVxuICAgICAgLCBpbmRleCAgPSB0b0luZGV4KGZyb21JbmRleCwgbGVuZ3RoKVxuICAgICAgLCB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgaWYoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpd2hpbGUobGVuZ3RoID4gaW5kZXgpe1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgaWYodmFsdWUgIT0gdmFsdWUpcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjdG9JbmRleCBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKWlmKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pe1xuICAgICAgaWYoT1tpbmRleF0gPT09IGVsKXJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07IiwiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBJT2JqZWN0ICA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKVxuICAsIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0JylcbiAgLCB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpXG4gICwgYXNjICAgICAgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihUWVBFLCAkY3JlYXRlKXtcbiAgdmFyIElTX01BUCAgICAgICAgPSBUWVBFID09IDFcbiAgICAsIElTX0ZJTFRFUiAgICAgPSBUWVBFID09IDJcbiAgICAsIElTX1NPTUUgICAgICAgPSBUWVBFID09IDNcbiAgICAsIElTX0VWRVJZICAgICAgPSBUWVBFID09IDRcbiAgICAsIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDZcbiAgICAsIE5PX0hPTEVTICAgICAgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWFxuICAgICwgY3JlYXRlICAgICAgICA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24oJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQpe1xuICAgIHZhciBPICAgICAgPSB0b09iamVjdCgkdGhpcylcbiAgICAgICwgc2VsZiAgID0gSU9iamVjdChPKVxuICAgICAgLCBmICAgICAgPSBjdHgoY2FsbGJhY2tmbiwgdGhhdCwgMylcbiAgICAgICwgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpXG4gICAgICAsIGluZGV4ICA9IDBcbiAgICAgICwgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZFxuICAgICAgLCB2YWwsIHJlcztcbiAgICBmb3IoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKWlmKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpe1xuICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuICAgICAgaWYoVFlQRSl7XG4gICAgICAgIGlmKElTX01BUClyZXN1bHRbaW5kZXhdID0gcmVzOyAgICAgICAgICAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmKHJlcylzd2l0Y2goVFlQRSl7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHJlc3VsdC5wdXNoKHZhbCk7ICAgICAgICAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZihJU19FVkVSWSlyZXR1cm4gZmFsc2U7ICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gIH07XG59OyIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpXG4gICwgaXNBcnJheSAgPSByZXF1aXJlKCcuL19pcy1hcnJheScpXG4gICwgU1BFQ0lFUyAgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9yaWdpbmFsKXtcbiAgdmFyIEM7XG4gIGlmKGlzQXJyYXkob3JpZ2luYWwpKXtcbiAgICBDID0gb3JpZ2luYWwuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZih0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpQyA9IHVuZGVmaW5lZDtcbiAgICBpZihpc09iamVjdChDKSl7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmKEMgPT09IG51bGwpQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQztcbn07IiwiLy8gOS40LjIuMyBBcnJheVNwZWNpZXNDcmVhdGUob3JpZ2luYWxBcnJheSwgbGVuZ3RoKVxudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcmlnaW5hbCwgbGVuZ3RoKXtcbiAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbn07IiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKVxuICAsIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXG4gIC8vIEVTMyB3cm9uZyBoZXJlXG4gICwgQVJHID0gY29mKGZ1bmN0aW9uKCl7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24oaXQsIGtleSl7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTsiLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59OyIsIid1c2Ugc3RyaWN0JztcbnZhciBkUCAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmZcbiAgLCBjcmVhdGUgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKVxuICAsIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJylcbiAgLCBjdHggICAgICAgICA9IHJlcXVpcmUoJy4vX2N0eCcpXG4gICwgYW5JbnN0YW5jZSAgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpXG4gICwgZGVmaW5lZCAgICAgPSByZXF1aXJlKCcuL19kZWZpbmVkJylcbiAgLCBmb3JPZiAgICAgICA9IHJlcXVpcmUoJy4vX2Zvci1vZicpXG4gICwgJGl0ZXJEZWZpbmUgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpXG4gICwgc3RlcCAgICAgICAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKVxuICAsIHNldFNwZWNpZXMgID0gcmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKVxuICAsIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKVxuICAsIGZhc3RLZXkgICAgID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXlcbiAgLCBTSVpFICAgICAgICA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24odGhhdCwga2V5KXtcbiAgLy8gZmFzdCBjYXNlXG4gIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KSwgZW50cnk7XG4gIGlmKGluZGV4ICE9PSAnRicpcmV0dXJuIHRoYXQuX2lbaW5kZXhdO1xuICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgZm9yKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubil7XG4gICAgaWYoZW50cnkuayA9PSBrZXkpcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpe1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbih0aGF0LCBpdGVyYWJsZSl7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZihpdGVyYWJsZSAhPSB1bmRlZmluZWQpZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4xLjMuMSBNYXAucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIC8vIDIzLjIuMy4yIFNldC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCl7XG4gICAgICAgIGZvcih2YXIgdGhhdCA9IHRoaXMsIGRhdGEgPSB0aGF0Ll9pLCBlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pe1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmKGVudHJ5LnApZW50cnkucCA9IGVudHJ5LnAubiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pXTtcbiAgICAgICAgfVxuICAgICAgICB0aGF0Ll9mID0gdGhhdC5fbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhhdFtTSVpFXSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjMgTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuMi4zLjQgU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24oa2V5KXtcbiAgICAgICAgdmFyIHRoYXQgID0gdGhpc1xuICAgICAgICAgICwgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZihlbnRyeSl7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uXG4gICAgICAgICAgICAsIHByZXYgPSBlbnRyeS5wO1xuICAgICAgICAgIGRlbGV0ZSB0aGF0Ll9pW2VudHJ5LmldO1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmKHByZXYpcHJldi5uID0gbmV4dDtcbiAgICAgICAgICBpZihuZXh0KW5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYodGhhdC5fZiA9PSBlbnRyeSl0aGF0Ll9mID0gbmV4dDtcbiAgICAgICAgICBpZih0aGF0Ll9sID09IGVudHJ5KXRoYXQuX2wgPSBwcmV2O1xuICAgICAgICAgIHRoYXRbU0laRV0tLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4yLjMuNiBTZXQucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIC8vIDIzLjEuMy41IE1hcC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qLCB0aGF0ID0gdW5kZWZpbmVkICovKXtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGlzLCBDLCAnZm9yRWFjaCcpO1xuICAgICAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMylcbiAgICAgICAgICAsIGVudHJ5O1xuICAgICAgICB3aGlsZShlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoaXMuX2Ype1xuICAgICAgICAgIGYoZW50cnkudiwgZW50cnkuaywgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUoZW50cnkgJiYgZW50cnkucillbnRyeSA9IGVudHJ5LnA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuNyBNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy4yLjMuNyBTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSl7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYoREVTQ1JJUFRPUlMpZFAoQy5wcm90b3R5cGUsICdzaXplJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gZGVmaW5lZCh0aGlzW1NJWkVdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgZGVmOiBmdW5jdGlvbih0aGF0LCBrZXksIHZhbHVlKXtcbiAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpXG4gICAgICAsIHByZXYsIGluZGV4O1xuICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgIGlmKGVudHJ5KXtcbiAgICAgIGVudHJ5LnYgPSB2YWx1ZTtcbiAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoYXQuX2wgPSBlbnRyeSA9IHtcbiAgICAgICAgaTogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksIC8vIDwtIGluZGV4XG4gICAgICAgIGs6IGtleSwgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBrZXlcbiAgICAgICAgdjogdmFsdWUsICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG4gICAgICAgIHA6IHByZXYgPSB0aGF0Ll9sLCAgICAgICAgICAgICAvLyA8LSBwcmV2aW91cyBlbnRyeVxuICAgICAgICBuOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgLy8gPC0gbmV4dCBlbnRyeVxuICAgICAgICByOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gcmVtb3ZlZFxuICAgICAgfTtcbiAgICAgIGlmKCF0aGF0Ll9mKXRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmKHByZXYpcHJldi5uID0gZW50cnk7XG4gICAgICB0aGF0W1NJWkVdKys7XG4gICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgIGlmKGluZGV4ICE9PSAnRicpdGhhdC5faVtpbmRleF0gPSBlbnRyeTtcbiAgICB9IHJldHVybiB0aGF0O1xuICB9LFxuICBnZXRFbnRyeTogZ2V0RW50cnksXG4gIHNldFN0cm9uZzogZnVuY3Rpb24oQywgTkFNRSwgSVNfTUFQKXtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24oaXRlcmF0ZWQsIGtpbmQpe1xuICAgICAgdGhpcy5fdCA9IGl0ZXJhdGVkOyAgLy8gdGFyZ2V0XG4gICAgICB0aGlzLl9rID0ga2luZDsgICAgICAvLyBraW5kXG4gICAgICB0aGlzLl9sID0gdW5kZWZpbmVkOyAvLyBwcmV2aW91c1xuICAgIH0sIGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgdGhhdCAgPSB0aGlzXG4gICAgICAgICwga2luZCAgPSB0aGF0Ll9rXG4gICAgICAgICwgZW50cnkgPSB0aGF0Ll9sO1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZShlbnRyeSAmJiBlbnRyeS5yKWVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZighdGhhdC5fdCB8fCAhKHRoYXQuX2wgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoYXQuX3QuX2YpKXtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgdGhhdC5fdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHN0ZXAoMSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZihraW5kID09ICdrZXlzJyAgKXJldHVybiBzdGVwKDAsIGVudHJ5LmspO1xuICAgICAgaWYoa2luZCA9PSAndmFsdWVzJylyZXR1cm4gc3RlcCgwLCBlbnRyeS52KTtcbiAgICAgIHJldHVybiBzdGVwKDAsIFtlbnRyeS5rLCBlbnRyeS52XSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycgLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTsiLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKVxuICAsIGZyb20gICAgPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKE5BTUUpe1xuICByZXR1cm4gZnVuY3Rpb24gdG9KU09OKCl7XG4gICAgaWYoY2xhc3NvZih0aGlzKSAhPSBOQU1FKXRocm93IFR5cGVFcnJvcihOQU1FICsgXCIjdG9KU09OIGlzbid0IGdlbmVyaWNcIik7XG4gICAgcmV0dXJuIGZyb20odGhpcyk7XG4gIH07XG59OyIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgICAgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgJGV4cG9ydCAgICAgICAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIG1ldGEgICAgICAgICAgID0gcmVxdWlyZSgnLi9fbWV0YScpXG4gICwgZmFpbHMgICAgICAgICAgPSByZXF1aXJlKCcuL19mYWlscycpXG4gICwgaGlkZSAgICAgICAgICAgPSByZXF1aXJlKCcuL19oaWRlJylcbiAgLCByZWRlZmluZUFsbCAgICA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpXG4gICwgZm9yT2YgICAgICAgICAgPSByZXF1aXJlKCcuL19mb3Itb2YnKVxuICAsIGFuSW5zdGFuY2UgICAgID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKVxuICAsIGlzT2JqZWN0ICAgICAgID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJylcbiAgLCBkUCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmZcbiAgLCBlYWNoICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKVxuICAsIERFU0NSSVBUT1JTICAgID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihOQU1FLCB3cmFwcGVyLCBtZXRob2RzLCBjb21tb24sIElTX01BUCwgSVNfV0VBSyl7XG4gIHZhciBCYXNlICA9IGdsb2JhbFtOQU1FXVxuICAgICwgQyAgICAgPSBCYXNlXG4gICAgLCBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCdcbiAgICAsIHByb3RvID0gQyAmJiBDLnByb3RvdHlwZVxuICAgICwgTyAgICAgPSB7fTtcbiAgaWYoIURFU0NSSVBUT1JTIHx8IHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uKCl7XG4gICAgbmV3IEMoKS5lbnRyaWVzKCkubmV4dCgpO1xuICB9KSkpe1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBDID0gd3JhcHBlcihmdW5jdGlvbih0YXJnZXQsIGl0ZXJhYmxlKXtcbiAgICAgIGFuSW5zdGFuY2UodGFyZ2V0LCBDLCBOQU1FLCAnX2MnKTtcbiAgICAgIHRhcmdldC5fYyA9IG5ldyBCYXNlO1xuICAgICAgaWYoaXRlcmFibGUgIT0gdW5kZWZpbmVkKWZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRhcmdldFtBRERFUl0sIHRhcmdldCk7XG4gICAgfSk7XG4gICAgZWFjaCgnYWRkLGNsZWFyLGRlbGV0ZSxmb3JFYWNoLGdldCxoYXMsc2V0LGtleXMsdmFsdWVzLGVudHJpZXMsdG9KU09OJy5zcGxpdCgnLCcpLGZ1bmN0aW9uKEtFWSl7XG4gICAgICB2YXIgSVNfQURERVIgPSBLRVkgPT0gJ2FkZCcgfHwgS0VZID09ICdzZXQnO1xuICAgICAgaWYoS0VZIGluIHByb3RvICYmICEoSVNfV0VBSyAmJiBLRVkgPT0gJ2NsZWFyJykpaGlkZShDLnByb3RvdHlwZSwgS0VZLCBmdW5jdGlvbihhLCBiKXtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGlzLCBDLCBLRVkpO1xuICAgICAgICBpZighSVNfQURERVIgJiYgSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkpcmV0dXJuIEtFWSA9PSAnZ2V0JyA/IHVuZGVmaW5lZCA6IGZhbHNlO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fY1tLRVldKGEgPT09IDAgPyAwIDogYSwgYik7XG4gICAgICAgIHJldHVybiBJU19BRERFUiA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZignc2l6ZScgaW4gcHJvdG8pZFAoQy5wcm90b3R5cGUsICdzaXplJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5fYy5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQywgTkFNRSk7XG5cbiAgT1tOQU1FXSA9IEM7XG4gICRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GLCBPKTtcblxuICBpZighSVNfV0VBSyljb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59OyIsInZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7dmVyc2lvbjogJzIuNC4wJ307XG5pZih0eXBlb2YgX19lID09ICdudW1iZXInKV9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWYiLCIndXNlIHN0cmljdCc7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJylcbiAgLCBjcmVhdGVEZXNjICAgICAgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqZWN0LCBpbmRleCwgdmFsdWUpe1xuICBpZihpbmRleCBpbiBvYmplY3QpJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbn07IiwiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmbiwgdGhhdCwgbGVuZ3RoKXtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYodGhhdCA9PT0gdW5kZWZpbmVkKXJldHVybiBmbjtcbiAgc3dpdGNoKGxlbmd0aCl7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24oYSl7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uKGEsIGIpe1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbihhLCBiLCBjKXtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKC8qIC4uLmFyZ3MgKi8pe1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTsiLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIGlmKGl0ID09IHVuZGVmaW5lZCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07IiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbigpe1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHtnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiA3OyB9fSkuYSAhPSA3O1xufSk7IiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50XG4gIC8vIGluIG9sZCBJRSB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0J1xuICAsIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59OyIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpOyIsIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJylcbiAgLCBnT1BTICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKVxuICAsIHBJRSAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgdmFyIHJlc3VsdCAgICAgPSBnZXRLZXlzKGl0KVxuICAgICwgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYoZ2V0U3ltYm9scyl7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KVxuICAgICAgLCBpc0VudW0gID0gcElFLmZcbiAgICAgICwgaSAgICAgICA9IDBcbiAgICAgICwga2V5O1xuICAgIHdoaWxlKHN5bWJvbHMubGVuZ3RoID4gaSlpZihpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSlyZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59OyIsInZhciBnbG9iYWwgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGNvcmUgICAgICA9IHJlcXVpcmUoJy4vX2NvcmUnKVxuICAsIGN0eCAgICAgICA9IHJlcXVpcmUoJy4vX2N0eCcpXG4gICwgaGlkZSAgICAgID0gcmVxdWlyZSgnLi9faGlkZScpXG4gICwgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgc291cmNlKXtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkZcbiAgICAsIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0LkdcbiAgICAsIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlNcbiAgICAsIElTX1BST1RPICA9IHR5cGUgJiAkZXhwb3J0LlBcbiAgICAsIElTX0JJTkQgICA9IHR5cGUgJiAkZXhwb3J0LkJcbiAgICAsIElTX1dSQVAgICA9IHR5cGUgJiAkZXhwb3J0LldcbiAgICAsIGV4cG9ydHMgICA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pXG4gICAgLCBleHBQcm90byAgPSBleHBvcnRzW1BST1RPVFlQRV1cbiAgICAsIHRhcmdldCAgICA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV1cbiAgICAsIGtleSwgb3duLCBvdXQ7XG4gIGlmKElTX0dMT0JBTClzb3VyY2UgPSBuYW1lO1xuICBmb3Ioa2V5IGluIHNvdXJjZSl7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICBpZihvd24gJiYga2V5IGluIGV4cG9ydHMpY29udGludWU7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSBvd24gPyB0YXJnZXRba2V5XSA6IHNvdXJjZVtrZXldO1xuICAgIC8vIHByZXZlbnQgZ2xvYmFsIHBvbGx1dGlvbiBmb3IgbmFtZXNwYWNlc1xuICAgIGV4cG9ydHNba2V5XSA9IElTX0dMT0JBTCAmJiB0eXBlb2YgdGFyZ2V0W2tleV0gIT0gJ2Z1bmN0aW9uJyA/IHNvdXJjZVtrZXldXG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICA6IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKVxuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2UgdGhlbSBpbiBsaWJyYXJ5XG4gICAgOiBJU19XUkFQICYmIHRhcmdldFtrZXldID09IG91dCA/IChmdW5jdGlvbihDKXtcbiAgICAgIHZhciBGID0gZnVuY3Rpb24oYSwgYiwgYyl7XG4gICAgICAgIGlmKHRoaXMgaW5zdGFuY2VvZiBDKXtcbiAgICAgICAgICBzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7XG4gICAgICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgQztcbiAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDKGEpO1xuICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEMoYSwgYik7XG4gICAgICAgICAgfSByZXR1cm4gbmV3IEMoYSwgYiwgYyk7XG4gICAgICAgIH0gcmV0dXJuIEMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgICBGW1BST1RPVFlQRV0gPSBDW1BST1RPVFlQRV07XG4gICAgICByZXR1cm4gRjtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICB9KShvdXQpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLm1ldGhvZHMuJU5BTUUlXG4gICAgaWYoSVNfUFJPVE8pe1xuICAgICAgKGV4cG9ydHMudmlydHVhbCB8fCAoZXhwb3J0cy52aXJ0dWFsID0ge30pKVtrZXldID0gb3V0O1xuICAgICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLnByb3RvdHlwZS4lTkFNRSVcbiAgICAgIGlmKHR5cGUgJiAkZXhwb3J0LlIgJiYgZXhwUHJvdG8gJiYgIWV4cFByb3RvW2tleV0paGlkZShleHBQcm90bywga2V5LCBvdXQpO1xuICAgIH1cbiAgfVxufTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWAgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihleGVjKXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2goZSl7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07IiwidmFyIGN0eCAgICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBjYWxsICAgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpXG4gICwgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJylcbiAgLCBhbk9iamVjdCAgICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgdG9MZW5ndGggICAgPSByZXF1aXJlKCcuL190by1sZW5ndGgnKVxuICAsIGdldEl0ZXJGbiAgID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKVxuICAsIEJSRUFLICAgICAgID0ge31cbiAgLCBSRVRVUk4gICAgICA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1Ipe1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbigpeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpXG4gICAgLCBmICAgICAgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSlcbiAgICAsIGluZGV4ICA9IDBcbiAgICAsIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKXRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYoaXNBcnJheUl0ZXIoaXRlckZuKSlmb3IobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4Kyspe1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZihyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKXJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgKXtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZihyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKXJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLICA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47IiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZiA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZih0eXBlb2YgX19nID09ICdudW1iZXInKV9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwga2V5KXtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59OyIsInZhciBkUCAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJylcbiAgLCBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24ob2JqZWN0LCBrZXksIHZhbHVlKXtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbihvYmplY3QsIGtleSwgdmFsdWUpe1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsiLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7Z2V0OiBmdW5jdGlvbigpeyByZXR1cm4gNzsgfX0pLmEgIT0gNztcbn0pOyIsIi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmbiwgYXJncywgdGhhdCl7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoKGFyZ3MubGVuZ3RoKXtcbiAgICBjYXNlIDA6IHJldHVybiB1biA/IGZuKClcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCk7XG4gICAgY2FzZSAxOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgY2FzZSA0OiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgfSByZXR1cm4gICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTsiLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTsiLCIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzICA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpXG4gICwgSVRFUkFUT1IgICA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpXG4gICwgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59OyIsIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpe1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59OyIsIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoKGUpe1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYocmV0ICE9PSB1bmRlZmluZWQpYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59OyIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKVxuICAsIGRlc2NyaXB0b3IgICAgID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpXG4gICwgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpXG4gICwgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCl7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwge25leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCl9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59OyIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZICAgICAgICA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKVxuICAsICRleHBvcnQgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCByZWRlZmluZSAgICAgICA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJylcbiAgLCBoaWRlICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hpZGUnKVxuICAsIGhhcyAgICAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCBJdGVyYXRvcnMgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpXG4gICwgJGl0ZXJDcmVhdGUgICAgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpXG4gICwgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpXG4gICwgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJylcbiAgLCBJVEVSQVRPUiAgICAgICA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpXG4gICwgQlVHR1kgICAgICAgICAgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSkgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICAsIEZGX0lURVJBVE9SICAgID0gJ0BAaXRlcmF0b3InXG4gICwgS0VZUyAgICAgICAgICAgPSAna2V5cydcbiAgLCBWQUxVRVMgICAgICAgICA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCl7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uKGtpbmQpe1xuICAgIGlmKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKXJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2goa2luZCl7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCl7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKXsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyAgICAgICAgPSBOQU1FICsgJyBJdGVyYXRvcidcbiAgICAsIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFU1xuICAgICwgVkFMVUVTX0JVRyA9IGZhbHNlXG4gICAgLCBwcm90byAgICAgID0gQmFzZS5wcm90b3R5cGVcbiAgICAsICRuYXRpdmUgICAgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF1cbiAgICAsICRkZWZhdWx0ICAgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKVxuICAgICwgJGVudHJpZXMgICA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWRcbiAgICAsICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlXG4gICAgLCBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmKCRhbnlOYXRpdmUpe1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKSk7XG4gICAgaWYoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpe1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmKCFMSUJSQVJZICYmICFoYXMoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SKSloaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKXtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZigoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSl7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSAgPSByZXR1cm5UaGlzO1xuICBpZihERUZBVUxUKXtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiAgREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiAgICBJU19TRVQgICAgID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYoRk9SQ0VEKWZvcihrZXkgaW4gbWV0aG9kcyl7XG4gICAgICBpZighKGtleSBpbiBwcm90bykpcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTsiLCJ2YXIgSVRFUkFUT1IgICAgID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbigpeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbigpeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihleGVjLCBza2lwQ2xvc2luZyl7XG4gIGlmKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKXJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyICA9IFs3XVxuICAgICAgLCBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uKCl7IHJldHVybiB7ZG9uZTogc2FmZSA9IHRydWV9OyB9O1xuICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbigpeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZG9uZSwgdmFsdWUpe1xuICByZXR1cm4ge3ZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSB7fTsiLCJ2YXIgZ2V0S2V5cyAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKVxuICAsIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqZWN0LCBlbCl7XG4gIHZhciBPICAgICAgPSB0b0lPYmplY3Qob2JqZWN0KVxuICAgICwga2V5cyAgID0gZ2V0S2V5cyhPKVxuICAgICwgbGVuZ3RoID0ga2V5cy5sZW5ndGhcbiAgICAsIGluZGV4ICA9IDBcbiAgICAsIGtleTtcbiAgd2hpbGUobGVuZ3RoID4gaW5kZXgpaWYoT1trZXkgPSBrZXlzW2luZGV4KytdXSA9PT0gZWwpcmV0dXJuIGtleTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSB0cnVlOyIsInZhciBNRVRBICAgICA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJylcbiAgLCBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpXG4gICwgaGFzICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIHNldERlc2MgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZlxuICAsIGlkICAgICAgID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uKCl7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbigpe1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uKGl0KXtcbiAgc2V0RGVzYyhpdCwgTUVUQSwge3ZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfX0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24oaXQsIGNyZWF0ZSl7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYoIWlzT2JqZWN0KGl0KSlyZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZighaGFzKGl0LCBNRVRBKSl7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZighaXNFeHRlbnNpYmxlKGl0KSlyZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYoIWNyZWF0ZSlyZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uKGl0LCBjcmVhdGUpe1xuICBpZighaGFzKGl0LCBNRVRBKSl7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZighaXNFeHRlbnNpYmxlKGl0KSlyZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmKCFjcmVhdGUpcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbihpdCl7XG4gIGlmKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSlzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogICAgICBNRVRBLFxuICBORUVEOiAgICAgZmFsc2UsXG4gIGZhc3RLZXk6ICBmYXN0S2V5LFxuICBnZXRXZWFrOiAgZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59OyIsInZhciBnbG9iYWwgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXRcbiAgLCBPYnNlcnZlciAgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlclxuICAsIHByb2Nlc3MgICA9IGdsb2JhbC5wcm9jZXNzXG4gICwgUHJvbWlzZSAgID0gZ2xvYmFsLlByb21pc2VcbiAgLCBpc05vZGUgICAgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKXtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbigpe1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKXBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUoaGVhZCl7XG4gICAgICBmbiAgID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgaWYoaGVhZClub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZihwYXJlbnQpcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZihpc05vZGUpe1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uKCl7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXJcbiAgfSBlbHNlIGlmKE9ic2VydmVyKXtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZVxuICAgICAgLCBub2RlICAgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHtjaGFyYWN0ZXJEYXRhOiB0cnVlfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKXtcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uKCl7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbigpe1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbihmbil7XG4gICAgdmFyIHRhc2sgPSB7Zm46IGZuLCBuZXh0OiB1bmRlZmluZWR9O1xuICAgIGlmKGxhc3QpbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZighaGVhZCl7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59OyIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciBnZXRLZXlzICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJylcbiAgLCBnT1BTICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJylcbiAgLCBwSUUgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKVxuICAsIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0JylcbiAgLCBJT2JqZWN0ICA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKVxuICAsICRhc3NpZ24gID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgdmFyIEEgPSB7fVxuICAgICwgQiA9IHt9XG4gICAgLCBTID0gU3ltYm9sKClcbiAgICAsIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbihrKXsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKXsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCAgICAgPSB0b09iamVjdCh0YXJnZXQpXG4gICAgLCBhTGVuICA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAsIGluZGV4ID0gMVxuICAgICwgZ2V0U3ltYm9scyA9IGdPUFMuZlxuICAgICwgaXNFbnVtICAgICA9IHBJRS5mO1xuICB3aGlsZShhTGVuID4gaW5kZXgpe1xuICAgIHZhciBTICAgICAgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSlcbiAgICAgICwga2V5cyAgID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKVxuICAgICAgLCBsZW5ndGggPSBrZXlzLmxlbmd0aFxuICAgICAgLCBqICAgICAgPSAwXG4gICAgICAsIGtleTtcbiAgICB3aGlsZShsZW5ndGggPiBqKWlmKGlzRW51bS5jYWxsKFMsIGtleSA9IGtleXNbaisrXSkpVFtrZXldID0gU1trZXldO1xuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247IiwiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgICAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIGRQcyAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpXG4gICwgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJylcbiAgLCBJRV9QUk9UTyAgICA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKVxuICAsIEVtcHR5ICAgICAgID0gZnVuY3Rpb24oKXsgLyogZW1wdHkgKi8gfVxuICAsIFBST1RPVFlQRSAgID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24oKXtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJylcbiAgICAsIGkgICAgICA9IGVudW1CdWdLZXlzLmxlbmd0aFxuICAgICwgbHQgICAgID0gJzwnXG4gICAgLCBndCAgICAgPSAnPidcbiAgICAsIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlKGktLSlkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcyl7XG4gIHZhciByZXN1bHQ7XG4gIGlmKE8gIT09IG51bGwpe1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGFuT2JqZWN0ICAgICAgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJylcbiAgLCB0b1ByaW1pdGl2ZSAgICA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpXG4gICwgZFAgICAgICAgICAgICAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKXtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmKElFOF9ET01fREVGSU5FKXRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG4gIGlmKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcyl0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZigndmFsdWUnIGluIEF0dHJpYnV0ZXMpT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTsiLCJ2YXIgZFAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCBnZXRLZXlzICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKXtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzICAgPSBnZXRLZXlzKFByb3BlcnRpZXMpXG4gICAgLCBsZW5ndGggPSBrZXlzLmxlbmd0aFxuICAgICwgaSA9IDBcbiAgICAsIFA7XG4gIHdoaWxlKGxlbmd0aCA+IGkpZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59OyIsInZhciBwSUUgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKVxuICAsIGNyZWF0ZURlc2MgICAgID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpXG4gICwgdG9JT2JqZWN0ICAgICAgPSByZXF1aXJlKCcuL190by1pb2JqZWN0JylcbiAgLCB0b1ByaW1pdGl2ZSAgICA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpXG4gICwgaGFzICAgICAgICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKVxuICAsIGdPUEQgICAgICAgICAgID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCl7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYoSUU4X0RPTV9ERUZJTkUpdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuICBpZihoYXMoTywgUCkpcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTsiLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgZ09QTiAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mXG4gICwgdG9TdHJpbmcgID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbihpdCl7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdPUE4oaXQpO1xuICB9IGNhdGNoKGUpe1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCl7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiB0b1N0cmluZy5jYWxsKGl0KSA9PSAnW29iamVjdCBXaW5kb3ddJyA/IGdldFdpbmRvd05hbWVzKGl0KSA6IGdPUE4odG9JT2JqZWN0KGl0KSk7XG59O1xuIiwiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzICAgICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpXG4gICwgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKXtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTsiLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzOyIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzICAgICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIHRvT2JqZWN0ICAgID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0JylcbiAgLCBJRV9QUk9UTyAgICA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKVxuICAsIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24oTyl7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYoaGFzKE8sIElFX1BST1RPKSlyZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3Ipe1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07IiwidmFyIGhhcyAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgdG9JT2JqZWN0ICAgID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgYXJyYXlJbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSlcbiAgLCBJRV9QUk9UTyAgICAgPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqZWN0LCBuYW1lcyl7XG4gIHZhciBPICAgICAgPSB0b0lPYmplY3Qob2JqZWN0KVxuICAgICwgaSAgICAgID0gMFxuICAgICwgcmVzdWx0ID0gW11cbiAgICAsIGtleTtcbiAgZm9yKGtleSBpbiBPKWlmKGtleSAhPSBJRV9QUk9UTyloYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlKG5hbWVzLmxlbmd0aCA+IGkpaWYoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKXtcbiAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59OyIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKVxuICAsIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTyl7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59OyIsImV4cG9ydHMuZiA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlOyIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIGNvcmUgICAgPSByZXF1aXJlKCcuL19jb3JlJylcbiAgLCBmYWlscyAgID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oS0VZLCBleGVjKXtcbiAgdmFyIGZuICA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXVxuICAgICwgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24oKXsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihiaXRtYXAsIHZhbHVlKXtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlICA6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlICAgIDogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZSAgICAgICA6IHZhbHVlXG4gIH07XG59OyIsInZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih0YXJnZXQsIHNyYywgc2FmZSl7XG4gIGZvcih2YXIga2V5IGluIHNyYyl7XG4gICAgaWYoc2FmZSAmJiB0YXJnZXRba2V5XSl0YXJnZXRba2V5XSA9IHNyY1trZXldO1xuICAgIGVsc2UgaGlkZSh0YXJnZXQsIGtleSwgc3JjW2tleV0pO1xuICB9IHJldHVybiB0YXJnZXQ7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faGlkZScpOyIsIi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpXG4gICwgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uKE8sIHByb3RvKXtcbiAgYW5PYmplY3QoTyk7XG4gIGlmKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpdGhyb3cgVHlwZUVycm9yKHByb3RvICsgXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpO1xufTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZnVuY3Rpb24odGVzdCwgYnVnZ3ksIHNldCl7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaChlKXsgYnVnZ3kgPSB0cnVlOyB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pe1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmKGJ1Z2d5KU8uX19wcm90b19fID0gcHJvdG87XG4gICAgICAgIGVsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIE87XG4gICAgICB9O1xuICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gIGNoZWNrOiBjaGVja1xufTsiLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGNvcmUgICAgICAgID0gcmVxdWlyZSgnLi9fY29yZScpXG4gICwgZFAgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKVxuICAsIFNQRUNJRVMgICAgID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihLRVkpe1xuICB2YXIgQyA9IHR5cGVvZiBjb3JlW0tFWV0gPT0gJ2Z1bmN0aW9uJyA/IGNvcmVbS0VZXSA6IGdsb2JhbFtLRVldO1xuICBpZihERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKWRQLmYoQywgU1BFQ0lFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTsiLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZlxuICAsIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQsIHRhZywgc3RhdCl7XG4gIGlmKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpZGVmKGl0LCBUQUcsIHtjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiB0YWd9KTtcbn07IiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdrZXlzJylcbiAgLCB1aWQgICAgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oa2V5KXtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IHVpZChrZXkpKTtcbn07IiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXydcbiAgLCBzdG9yZSAgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0ge30pO1xufTsiLCIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKVxuICAsIFNQRUNJRVMgICA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKE8sIEQpe1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yLCBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59OyIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJylcbiAgLCBkZWZpbmVkICAgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihUT19TVFJJTkcpe1xuICByZXR1cm4gZnVuY3Rpb24odGhhdCwgcG9zKXtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKVxuICAgICAgLCBpID0gdG9JbnRlZ2VyKHBvcylcbiAgICAgICwgbCA9IHMubGVuZ3RoXG4gICAgICAsIGEsIGI7XG4gICAgaWYoaSA8IDAgfHwgaSA+PSBsKXJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59OyIsInZhciBjdHggICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19jdHgnKVxuICAsIGludm9rZSAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2ludm9rZScpXG4gICwgaHRtbCAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9faHRtbCcpXG4gICwgY2VsICAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpXG4gICwgZ2xvYmFsICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBwcm9jZXNzICAgICAgICAgICAgPSBnbG9iYWwucHJvY2Vzc1xuICAsIHNldFRhc2sgICAgICAgICAgICA9IGdsb2JhbC5zZXRJbW1lZGlhdGVcbiAgLCBjbGVhclRhc2sgICAgICAgICAgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGVcbiAgLCBNZXNzYWdlQ2hhbm5lbCAgICAgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWxcbiAgLCBjb3VudGVyICAgICAgICAgICAgPSAwXG4gICwgcXVldWUgICAgICAgICAgICAgID0ge31cbiAgLCBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJ1xuICAsIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uKCl7XG4gIHZhciBpZCA9ICt0aGlzO1xuICBpZihxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpe1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCl7XG4gIHJ1bi5jYWxsKGV2ZW50LmRhdGEpO1xufTtcbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spe1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKXtcbiAgICB2YXIgYXJncyA9IFtdLCBpID0gMTtcbiAgICB3aGlsZShhcmd1bWVudHMubGVuZ3RoID4gaSlhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbigpe1xuICAgICAgaW52b2tlKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbiksIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyVGFzayA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKXtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYocmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKXtcbiAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIH0gZWxzZSBpZihNZXNzYWdlQ2hhbm5lbCl7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDtcbiAgICBwb3J0ICAgID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cyl7XG4gICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNlbCgnc2NyaXB0Jykpe1xuICAgIGRlZmVyID0gZnVuY3Rpb24oaWQpe1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjZWwoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24oKXtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24oaWQpe1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6ICAgc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTsiLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpXG4gICwgbWF4ICAgICAgID0gTWF0aC5tYXhcbiAgLCBtaW4gICAgICAgPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaW5kZXgsIGxlbmd0aCl7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59OyIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgID0gTWF0aC5jZWlsXG4gICwgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTsiLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpXG4gICwgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59OyIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKVxuICAsIG1pbiAgICAgICA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59OyIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTsiLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCBTKXtcbiAgaWYoIWlzT2JqZWN0KGl0KSlyZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZihTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIGlmKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpcmV0dXJuIHZhbDtcbiAgaWYoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTsiLCJ2YXIgaWQgPSAwXG4gICwgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihrZXkpe1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTsiLCJ2YXIgZ2xvYmFsICAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGNvcmUgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY29yZScpXG4gICwgTElCUkFSWSAgICAgICAgPSByZXF1aXJlKCcuL19saWJyYXJ5JylcbiAgLCB3a3NFeHQgICAgICAgICA9IHJlcXVpcmUoJy4vX3drcy1leHQnKVxuICAsIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obmFtZSl7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwge3ZhbHVlOiB3a3NFeHQuZihuYW1lKX0pO1xufTsiLCJleHBvcnRzLmYgPSByZXF1aXJlKCcuL193a3MnKTsiLCJ2YXIgc3RvcmUgICAgICA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKVxuICAsIHVpZCAgICAgICAgPSByZXF1aXJlKCcuL191aWQnKVxuICAsIFN5bWJvbCAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2xcbiAgLCBVU0VfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG52YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG5hbWUpe1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTsiLCJ2YXIgY2xhc3NvZiAgID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpXG4gICwgSVRFUkFUT1IgID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24oaXQpe1xuICBpZihpdCAhPSB1bmRlZmluZWQpcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTsiLCIndXNlIHN0cmljdCc7XG52YXIgY3R4ICAgICAgICAgICAgPSByZXF1aXJlKCcuL19jdHgnKVxuICAsICRleHBvcnQgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCB0b09iamVjdCAgICAgICA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgY2FsbCAgICAgICAgICAgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKVxuICAsIGlzQXJyYXlJdGVyICAgID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpXG4gICwgdG9MZW5ndGggICAgICAgPSByZXF1aXJlKCcuL190by1sZW5ndGgnKVxuICAsIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5JylcbiAgLCBnZXRJdGVyRm4gICAgICA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24oaXRlcil7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UvKiwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQqLyl7XG4gICAgdmFyIE8gICAgICAgPSB0b09iamVjdChhcnJheUxpa2UpXG4gICAgICAsIEMgICAgICAgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5XG4gICAgICAsIGFMZW4gICAgPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgICAsIG1hcGZuICAgPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZFxuICAgICAgLCBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZFxuICAgICAgLCBpbmRleCAgID0gMFxuICAgICAgLCBpdGVyRm4gID0gZ2V0SXRlckZuKE8pXG4gICAgICAsIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZihtYXBwaW5nKW1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpe1xuICAgICAgZm9yKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4Kyspe1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvcihyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKyl7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpXG4gICwgc3RlcCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpXG4gICwgSXRlcmF0b3JzICAgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpXG4gICwgdG9JT2JqZWN0ICAgICAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbihpdGVyYXRlZCwga2luZCl7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24oKXtcbiAgdmFyIE8gICAgID0gdGhpcy5fdFxuICAgICwga2luZCAgPSB0aGlzLl9rXG4gICAgLCBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpe1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYoa2luZCA9PSAna2V5cycgIClyZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmKGtpbmQgPT0gJ3ZhbHVlcycpcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpOyIsIi8vIDE5LjEuMy4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiwgJ09iamVjdCcsIHthc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKX0pOyIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jylcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7Y3JlYXRlOiByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyl9KTsiLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjQgLyAxNS4yLjMuNiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7ZGVmaW5lUHJvcGVydHk6IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmZ9KTsiLCIvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG52YXIgdG9JT2JqZWN0ICAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgZnVuY3Rpb24oKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KXtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0lPYmplY3QoaXQpLCBrZXkpO1xuICB9O1xufSk7IiwiLy8gMTkuMS4yLjkgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgdG9PYmplY3QgICAgICAgID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0JylcbiAgLCAkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0UHJvdG90eXBlT2YnLCBmdW5jdGlvbigpe1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpe1xuICAgIHJldHVybiAkZ2V0UHJvdG90eXBlT2YodG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pOyIsIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0JylcbiAgLCAka2V5cyAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uKCl7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KXtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pOyIsIi8vIDE5LjEuMy4xOSBPYmplY3Quc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7c2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldH0pOyIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZICAgICAgICAgICAgPSByZXF1aXJlKCcuL19saWJyYXJ5JylcbiAgLCBnbG9iYWwgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGN0eCAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2N0eCcpXG4gICwgY2xhc3NvZiAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpXG4gICwgJGV4cG9ydCAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBpc09iamVjdCAgICAgICAgICAgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGFGdW5jdGlvbiAgICAgICAgICA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKVxuICAsIGFuSW5zdGFuY2UgICAgICAgICA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJylcbiAgLCBmb3JPZiAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19mb3Itb2YnKVxuICAsIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKVxuICAsIHRhc2sgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXRcbiAgLCBtaWNyb3Rhc2sgICAgICAgICAgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpXG4gICwgUFJPTUlTRSAgICAgICAgICAgID0gJ1Byb21pc2UnXG4gICwgVHlwZUVycm9yICAgICAgICAgID0gZ2xvYmFsLlR5cGVFcnJvclxuICAsIHByb2Nlc3MgICAgICAgICAgICA9IGdsb2JhbC5wcm9jZXNzXG4gICwgJFByb21pc2UgICAgICAgICAgID0gZ2xvYmFsW1BST01JU0VdXG4gICwgcHJvY2VzcyAgICAgICAgICAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCBpc05vZGUgICAgICAgICAgICAgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJ1xuICAsIGVtcHR5ICAgICAgICAgICAgICA9IGZ1bmN0aW9uKCl7IC8qIGVtcHR5ICovIH1cbiAgLCBJbnRlcm5hbCwgR2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBXcmFwcGVyO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24oKXtcbiAgdHJ5IHtcbiAgICAvLyBjb3JyZWN0IHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgICB2YXIgcHJvbWlzZSAgICAgPSAkUHJvbWlzZS5yZXNvbHZlKDEpXG4gICAgICAsIEZha2VQcm9taXNlID0gKHByb21pc2UuY29uc3RydWN0b3IgPSB7fSlbcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKV0gPSBmdW5jdGlvbihleGVjKXsgZXhlYyhlbXB0eSwgZW1wdHkpOyB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpICYmIHByb21pc2UudGhlbihlbXB0eSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxufSgpO1xuXG4vLyBoZWxwZXJzXG52YXIgc2FtZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24oYSwgYil7XG4gIC8vIHdpdGggbGlicmFyeSB3cmFwcGVyIHNwZWNpYWwgY2FzZVxuICByZXR1cm4gYSA9PT0gYiB8fCBhID09PSAkUHJvbWlzZSAmJiBiID09PSBXcmFwcGVyO1xufTtcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24oaXQpe1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uKEMpe1xuICByZXR1cm4gc2FtZUNvbnN0cnVjdG9yKCRQcm9taXNlLCBDKVxuICAgID8gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgOiBuZXcgR2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IEdlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uKEMpe1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbigkJHJlc29sdmUsICQkcmVqZWN0KXtcbiAgICBpZihyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ICA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCAgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn07XG52YXIgcGVyZm9ybSA9IGZ1bmN0aW9uKGV4ZWMpe1xuICB0cnkge1xuICAgIGV4ZWMoKTtcbiAgfSBjYXRjaChlKXtcbiAgICByZXR1cm4ge2Vycm9yOiBlfTtcbiAgfVxufTtcbnZhciBub3RpZnkgPSBmdW5jdGlvbihwcm9taXNlLCBpc1JlamVjdCl7XG4gIGlmKHByb21pc2UuX24pcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uKCl7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdlxuICAgICAgLCBvayAgICA9IHByb21pc2UuX3MgPT0gMVxuICAgICAgLCBpICAgICA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uKHJlYWN0aW9uKXtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWxcbiAgICAgICAgLCByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZVxuICAgICAgICAsIHJlamVjdCAgPSByZWFjdGlvbi5yZWplY3RcbiAgICAgICAgLCBkb21haW4gID0gcmVhY3Rpb24uZG9tYWluXG4gICAgICAgICwgcmVzdWx0LCB0aGVuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYoaGFuZGxlcil7XG4gICAgICAgICAgaWYoIW9rKXtcbiAgICAgICAgICAgIGlmKHByb21pc2UuX2ggPT0gMilvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihoYW5kbGVyID09PSB0cnVlKXJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYoZG9tYWluKWRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7XG4gICAgICAgICAgICBpZihkb21haW4pZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKXtcbiAgICAgICAgICAgIHJlamVjdChUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpe1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdoaWxlKGNoYWluLmxlbmd0aCA+IGkpcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYoaXNSZWplY3QgJiYgIXByb21pc2UuX2gpb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uKHByb21pc2Upe1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbigpe1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3ZcbiAgICAgICwgYWJydXB0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmKGlzVW5oYW5kbGVkKHByb21pc2UpKXtcbiAgICAgIGFicnVwdCA9IHBlcmZvcm0oZnVuY3Rpb24oKXtcbiAgICAgICAgaWYoaXNOb2RlKXtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmKGhhbmRsZXIgPSBnbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb24pe1xuICAgICAgICAgIGhhbmRsZXIoe3Byb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWV9KTtcbiAgICAgICAgfSBlbHNlIGlmKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3Ipe1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZihhYnJ1cHQpdGhyb3cgYWJydXB0LmVycm9yO1xuICB9KTtcbn07XG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbihwcm9taXNlKXtcbiAgaWYocHJvbWlzZS5faCA9PSAxKXJldHVybiBmYWxzZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYSB8fCBwcm9taXNlLl9jXG4gICAgLCBpICAgICA9IDBcbiAgICAsIHJlYWN0aW9uO1xuICB3aGlsZShjaGFpbi5sZW5ndGggPiBpKXtcbiAgICByZWFjdGlvbiA9IGNoYWluW2krK107XG4gICAgaWYocmVhY3Rpb24uZmFpbCB8fCAhaXNVbmhhbmRsZWQocmVhY3Rpb24ucHJvbWlzZSkpcmV0dXJuIGZhbHNlO1xuICB9IHJldHVybiB0cnVlO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uKHByb21pc2Upe1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbigpe1xuICAgIHZhciBoYW5kbGVyO1xuICAgIGlmKGlzTm9kZSl7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYoaGFuZGxlciA9IGdsb2JhbC5vbnJlamVjdGlvbmhhbmRsZWQpe1xuICAgICAgaGFuZGxlcih7cHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92fSk7XG4gICAgfVxuICB9KTtcbn07XG52YXIgJHJlamVjdCA9IGZ1bmN0aW9uKHZhbHVlKXtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZihwcm9taXNlLl9kKXJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZighcHJvbWlzZS5fYSlwcm9taXNlLl9hID0gcHJvbWlzZS5fYy5zbGljZSgpO1xuICBub3RpZnkocHJvbWlzZSwgdHJ1ZSk7XG59O1xudmFyICRyZXNvbHZlID0gZnVuY3Rpb24odmFsdWUpe1xuICB2YXIgcHJvbWlzZSA9IHRoaXNcbiAgICAsIHRoZW47XG4gIGlmKHByb21pc2UuX2QpcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYocHJvbWlzZSA9PT0gdmFsdWUpdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKXtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbigpe1xuICAgICAgICB2YXIgd3JhcHBlciA9IHtfdzogcHJvbWlzZSwgX2Q6IGZhbHNlfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAkcmVqZWN0LmNhbGwod3JhcHBlciwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlLl92ID0gdmFsdWU7XG4gICAgICBwcm9taXNlLl9zID0gMTtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoKGUpe1xuICAgICRyZWplY3QuY2FsbCh7X3c6IHByb21pc2UsIF9kOiBmYWxzZX0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZighVVNFX05BVElWRSl7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gICRQcm9taXNlID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcil7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2goZXJyKXtcbiAgICAgICRyZWplY3QuY2FsbCh0aGlzLCBlcnIpO1xuICAgIH1cbiAgfTtcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKXtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpe1xuICAgICAgdmFyIHJlYWN0aW9uICAgID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRQcm9taXNlKSk7XG4gICAgICByZWFjdGlvbi5vayAgICAgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgICA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IGlzTm9kZSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmKHRoaXMuX2EpdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmKHRoaXMuX3Mpbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbihvblJlamVjdGVkKXtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uKCl7XG4gICAgdmFyIHByb21pc2UgID0gbmV3IEludGVybmFsO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gY3R4KCRyZXNvbHZlLCBwcm9taXNlLCAxKTtcbiAgICB0aGlzLnJlamVjdCAgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHtQcm9taXNlOiAkUHJvbWlzZX0pO1xucmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKSgkUHJvbWlzZSwgUFJPTUlTRSk7XG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKFBST01JU0UpO1xuV3JhcHBlciA9IHJlcXVpcmUoJy4vX2NvcmUnKVtQUk9NSVNFXTtcblxuLy8gc3RhdGljc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNSBQcm9taXNlLnJlamVjdChyKVxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKXtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpXG4gICAgICAsICQkcmVqZWN0ICAgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICAkJHJlamVjdChyKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKExJQlJBUlkgfHwgIVVTRV9OQVRJVkUpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC42IFByb21pc2UucmVzb2x2ZSh4KVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpe1xuICAgIC8vIGluc3RhbmNlb2YgaW5zdGVhZCBvZiBpbnRlcm5hbCBzbG90IGNoZWNrIGJlY2F1c2Ugd2Ugc2hvdWxkIGZpeCBpdCB3aXRob3V0IHJlcGxhY2VtZW50IG5hdGl2ZSBQcm9taXNlIGNvcmVcbiAgICBpZih4IGluc3RhbmNlb2YgJFByb21pc2UgJiYgc2FtZUNvbnN0cnVjdG9yKHguY29uc3RydWN0b3IsIHRoaXMpKXJldHVybiB4O1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcylcbiAgICAgICwgJCRyZXNvbHZlICA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICAkJHJlc29sdmUoeCk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoVVNFX05BVElWRSAmJiByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uKGl0ZXIpe1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSl7XG4gICAgdmFyIEMgICAgICAgICAgPSB0aGlzXG4gICAgICAsIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgLCByZXNvbHZlICAgID0gY2FwYWJpbGl0eS5yZXNvbHZlXG4gICAgICAsIHJlamVjdCAgICAgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgYWJydXB0ID0gcGVyZm9ybShmdW5jdGlvbigpe1xuICAgICAgdmFyIHZhbHVlcyAgICA9IFtdXG4gICAgICAgICwgaW5kZXggICAgID0gMFxuICAgICAgICAsIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uKHByb21pc2Upe1xuICAgICAgICB2YXIgJGluZGV4ICAgICAgICA9IGluZGV4KytcbiAgICAgICAgICAsIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgICAgICBpZihhbHJlYWR5Q2FsbGVkKXJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkICA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZihhYnJ1cHQpcmVqZWN0KGFicnVwdC5lcnJvcik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKXtcbiAgICB2YXIgQyAgICAgICAgICA9IHRoaXNcbiAgICAgICwgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICAsIHJlamVjdCAgICAgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgYWJydXB0ID0gcGVyZm9ybShmdW5jdGlvbigpe1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbihwcm9taXNlKXtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYoYWJydXB0KXJlamVjdChhYnJ1cHQuZXJyb3IpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pOyIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyAyMy4yIFNldCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKSgnU2V0JywgZnVuY3Rpb24oZ2V0KXtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKXtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih0aGlzLCB2YWx1ZSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlLCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZyk7IiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCAgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbihpdGVyYXRlZCl7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uKCl7XG4gIHZhciBPICAgICA9IHRoaXMuX3RcbiAgICAsIGluZGV4ID0gdGhpcy5faVxuICAgICwgcG9pbnQ7XG4gIGlmKGluZGV4ID49IE8ubGVuZ3RoKXJldHVybiB7dmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZX07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7dmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZX07XG59KTsiLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsICAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGhhcyAgICAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCBERVNDUklQVE9SUyAgICA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJylcbiAgLCAkZXhwb3J0ICAgICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgcmVkZWZpbmUgICAgICAgPSByZXF1aXJlKCcuL19yZWRlZmluZScpXG4gICwgTUVUQSAgICAgICAgICAgPSByZXF1aXJlKCcuL19tZXRhJykuS0VZXG4gICwgJGZhaWxzICAgICAgICAgPSByZXF1aXJlKCcuL19mYWlscycpXG4gICwgc2hhcmVkICAgICAgICAgPSByZXF1aXJlKCcuL19zaGFyZWQnKVxuICAsIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKVxuICAsIHVpZCAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fdWlkJylcbiAgLCB3a3MgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX3drcycpXG4gICwgd2tzRXh0ICAgICAgICAgPSByZXF1aXJlKCcuL193a3MtZXh0JylcbiAgLCB3a3NEZWZpbmUgICAgICA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKVxuICAsIGtleU9mICAgICAgICAgID0gcmVxdWlyZSgnLi9fa2V5b2YnKVxuICAsIGVudW1LZXlzICAgICAgID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJylcbiAgLCBpc0FycmF5ICAgICAgICA9IHJlcXVpcmUoJy4vX2lzLWFycmF5JylcbiAgLCBhbk9iamVjdCAgICAgICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgdG9JT2JqZWN0ICAgICAgPSByZXF1aXJlKCcuL190by1pb2JqZWN0JylcbiAgLCB0b1ByaW1pdGl2ZSAgICA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpXG4gICwgY3JlYXRlRGVzYyAgICAgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJylcbiAgLCBfY3JlYXRlICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKVxuICAsIGdPUE5FeHQgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JylcbiAgLCAkR09QRCAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJylcbiAgLCAkRFAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpXG4gICwgJGtleXMgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpXG4gICwgZ09QRCAgICAgICAgICAgPSAkR09QRC5mXG4gICwgZFAgICAgICAgICAgICAgPSAkRFAuZlxuICAsIGdPUE4gICAgICAgICAgID0gZ09QTkV4dC5mXG4gICwgJFN5bWJvbCAgICAgICAgPSBnbG9iYWwuU3ltYm9sXG4gICwgJEpTT04gICAgICAgICAgPSBnbG9iYWwuSlNPTlxuICAsIF9zdHJpbmdpZnkgICAgID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5XG4gICwgUFJPVE9UWVBFICAgICAgPSAncHJvdG90eXBlJ1xuICAsIEhJRERFTiAgICAgICAgID0gd2tzKCdfaGlkZGVuJylcbiAgLCBUT19QUklNSVRJVkUgICA9IHdrcygndG9QcmltaXRpdmUnKVxuICAsIGlzRW51bSAgICAgICAgID0ge30ucHJvcGVydHlJc0VudW1lcmFibGVcbiAgLCBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5JylcbiAgLCBBbGxTeW1ib2xzICAgICA9IHNoYXJlZCgnc3ltYm9scycpXG4gICwgT1BTeW1ib2xzICAgICAgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKVxuICAsIE9iamVjdFByb3RvICAgID0gT2JqZWN0W1BST1RPVFlQRV1cbiAgLCBVU0VfTkFUSVZFICAgICA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbidcbiAgLCBRT2JqZWN0ICAgICAgICA9IGdsb2JhbC5RT2JqZWN0O1xuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgc2V0dGVyID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgc2V0U3ltYm9sRGVzYyA9IERFU0NSSVBUT1JTICYmICRmYWlscyhmdW5jdGlvbigpe1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7dmFsdWU6IDd9KS5hOyB9XG4gIH0pKS5hICE9IDc7XG59KSA/IGZ1bmN0aW9uKGl0LCBrZXksIEQpe1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYocHJvdG9EZXNjKWRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bylkUChPYmplY3RQcm90bywga2V5LCBwcm90b0Rlc2MpO1xufSA6IGRQO1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uKHRhZyl7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbihpdCl7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXQgaW5zdGFuY2VvZiAkU3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIEQpe1xuICBpZihpdCA9PT0gT2JqZWN0UHJvdG8pJGRlZmluZVByb3BlcnR5KE9QU3ltYm9scywga2V5LCBEKTtcbiAgYW5PYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBhbk9iamVjdChEKTtcbiAgaWYoaGFzKEFsbFN5bWJvbHMsIGtleSkpe1xuICAgIGlmKCFELmVudW1lcmFibGUpe1xuICAgICAgaWYoIWhhcyhpdCwgSElEREVOKSlkUChpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7XG4gICAgICBpdFtISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZihoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKWl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwge2VudW1lcmFibGU6IGNyZWF0ZURlc2MoMCwgZmFsc2UpfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCl7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKVxuICAgICwgaSAgICA9IDBcbiAgICAsIGwgPSBrZXlzLmxlbmd0aFxuICAgICwga2V5O1xuICB3aGlsZShsID4gaSkkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKXtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpe1xuICB2YXIgRSA9IGlzRW51bS5jYWxsKHRoaXMsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpO1xuICBpZih0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSlyZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KXtcbiAgaXQgID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYoaXQgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKXJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZihEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpRC5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgcmV0dXJuIEQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCl7XG4gIHZhciBuYW1lcyAgPSBnT1BOKHRvSU9iamVjdChpdCkpXG4gICAgLCByZXN1bHQgPSBbXVxuICAgICwgaSAgICAgID0gMFxuICAgICwga2V5O1xuICB3aGlsZShuYW1lcy5sZW5ndGggPiBpKXtcbiAgICBpZighaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KXtcbiAgdmFyIElTX09QICA9IGl0ID09PSBPYmplY3RQcm90b1xuICAgICwgbmFtZXMgID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpXG4gICAgLCByZXN1bHQgPSBbXVxuICAgICwgaSAgICAgID0gMFxuICAgICwga2V5O1xuICB3aGlsZShuYW1lcy5sZW5ndGggPiBpKXtcbiAgICBpZihoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYgKElTX09QID8gaGFzKE9iamVjdFByb3RvLCBrZXkpIDogdHJ1ZSkpcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZighVVNFX05BVElWRSl7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKXtcbiAgICBpZih0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCl0aHJvdyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEnKTtcbiAgICB2YXIgdGFnID0gdWlkKGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgICB2YXIgJHNldCA9IGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgIGlmKHRoaXMgPT09IE9iamVjdFByb3RvKSRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHNldFN5bWJvbERlc2ModGhpcywgdGFnLCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgfTtcbiAgICBpZihERVNDUklQVE9SUyAmJiBzZXR0ZXIpc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7Y29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6ICRzZXR9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCl7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiAgID0gJGRlZmluZVByb3BlcnR5O1xuICByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmYgPSBnT1BORXh0LmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmYgID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIGlmKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5Jykpe1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbihuYW1lKXtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHtTeW1ib2w6ICRTeW1ib2x9KTtcblxuZm9yKHZhciBzeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGkgPSAwOyBzeW1ib2xzLmxlbmd0aCA+IGk7ICl3a3Moc3ltYm9sc1tpKytdKTtcblxuZm9yKHZhciBzeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgaSA9IDA7IHN5bWJvbHMubGVuZ3RoID4gaTsgKXdrc0RlZmluZShzeW1ib2xzW2krK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uKGtleSl7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihrZXkpe1xuICAgIGlmKGlzU3ltYm9sKGtleSkpcmV0dXJuIGtleU9mKFN5bWJvbFJlZ2lzdHJ5LCBrZXkpO1xuICAgIHRocm93IFR5cGVFcnJvcihrZXkgKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbigpeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uKCl7IHNldHRlciA9IGZhbHNlOyB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ09iamVjdCcsIHtcbiAgLy8gMTkuMS4yLjIgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIDE5LjEuMi40IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyAxOS4xLjIuMyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gIC8vIDE5LjEuMi43IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzLFxuICAvLyAxOS4xLjIuOCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKE8pXG4gIGdldE93blByb3BlcnR5U3ltYm9sczogJGdldE93blByb3BlcnR5U3ltYm9sc1xufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uKCl7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHthOiBTfSkgIT0gJ3t9JyB8fCBfc3RyaW5naWZ5KE9iamVjdChTKSkgIT0gJ3t9Jztcbn0pKSwgJ0pTT04nLCB7XG4gIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0KXtcbiAgICBpZihpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSlyZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgICB2YXIgYXJncyA9IFtpdF1cbiAgICAgICwgaSAgICA9IDFcbiAgICAgICwgcmVwbGFjZXIsICRyZXBsYWNlcjtcbiAgICB3aGlsZShhcmd1bWVudHMubGVuZ3RoID4gaSlhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZih0eXBlb2YgcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykkcmVwbGFjZXIgPSByZXBsYWNlcjtcbiAgICBpZigkcmVwbGFjZXIgfHwgIWlzQXJyYXkocmVwbGFjZXIpKXJlcGxhY2VyID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7XG4gICAgICBpZigkcmVwbGFjZXIpdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmKCFpc1N5bWJvbCh2YWx1ZSkpcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTsiLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCAgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdTZXQnLCB7dG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnU2V0Jyl9KTsiLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ2FzeW5jSXRlcmF0b3InKTsiLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ29ic2VydmFibGUnKTsiLCJyZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdsb2JhbCAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGhpZGUgICAgICAgICAgPSByZXF1aXJlKCcuL19oaWRlJylcbiAgLCBJdGVyYXRvcnMgICAgID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJylcbiAgLCBUT19TVFJJTkdfVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbmZvcih2YXIgY29sbGVjdGlvbnMgPSBbJ05vZGVMaXN0JywgJ0RPTVRva2VuTGlzdCcsICdNZWRpYUxpc3QnLCAnU3R5bGVTaGVldExpc3QnLCAnQ1NTUnVsZUxpc3QnXSwgaSA9IDA7IGkgPCA1OyBpKyspe1xuICB2YXIgTkFNRSAgICAgICA9IGNvbGxlY3Rpb25zW2ldXG4gICAgLCBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdXG4gICAgLCBwcm90byAgICAgID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYocHJvdG8gJiYgIXByb3RvW1RPX1NUUklOR19UQUddKWhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICBJdGVyYXRvcnNbTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59IiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIE5PVEU6IFRoZXNlIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIGBpbnN0YW5jZW9mYFxuLy8gYmVjYXVzZSBpdCBpcyBmcmFnaWxlIGFuZCBjYW4gYmUgZWFzaWx5IGZha2VkIHdpdGggYE9iamVjdC5jcmVhdGUoKWAuXG5cbmZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJnKTtcbiAgfVxuICByZXR1cm4gb2JqZWN0VG9TdHJpbmcoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcbn1cbmV4cG9ydHMuaXNCb29sZWFuID0gaXNCb29sZWFuO1xuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQgPSBpc051bGxPclVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcblxuZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcblxuZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3ltYm9sJztcbn1cbmV4cG9ydHMuaXNTeW1ib2wgPSBpc1N5bWJvbDtcblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbmV4cG9ydHMuaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNSZWdFeHAocmUpIHtcbiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nKHJlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5leHBvcnRzLmlzUmVnRXhwID0gaXNSZWdFeHA7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuXG5mdW5jdGlvbiBpc0RhdGUoZCkge1xuICByZXR1cm4gb2JqZWN0VG9TdHJpbmcoZCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cbmV4cG9ydHMuaXNEYXRlID0gaXNEYXRlO1xuXG5mdW5jdGlvbiBpc0Vycm9yKGUpIHtcbiAgcmV0dXJuIChvYmplY3RUb1N0cmluZyhlKSA9PT0gJ1tvYmplY3QgRXJyb3JdJyB8fCBlIGluc3RhbmNlb2YgRXJyb3IpO1xufVxuZXhwb3J0cy5pc0Vycm9yID0gaXNFcnJvcjtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZShhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbCB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnIHx8ICAvLyBFUzYgc3ltYm9sXG4gICAgICAgICB0eXBlb2YgYXJnID09PSAndW5kZWZpbmVkJztcbn1cbmV4cG9ydHMuaXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTtcblxuZXhwb3J0cy5pc0J1ZmZlciA9IEJ1ZmZlci5pc0J1ZmZlcjtcblxuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuIiwidmFyIGVsbGlwdGljID0gcmVxdWlyZSgnZWxsaXB0aWMnKTtcbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlRUNESChjdXJ2ZSkge1xuXHRyZXR1cm4gbmV3IEVDREgoY3VydmUpO1xufTtcblxudmFyIGFsaWFzZXMgPSB7XG5cdHNlY3AyNTZrMToge1xuXHRcdG5hbWU6ICdzZWNwMjU2azEnLFxuXHRcdGJ5dGVMZW5ndGg6IDMyXG5cdH0sXG5cdHNlY3AyMjRyMToge1xuXHRcdG5hbWU6ICdwMjI0Jyxcblx0XHRieXRlTGVuZ3RoOiAyOFxuXHR9LFxuXHRwcmltZTI1NnYxOiB7XG5cdFx0bmFtZTogJ3AyNTYnLFxuXHRcdGJ5dGVMZW5ndGg6IDMyXG5cdH0sXG5cdHByaW1lMTkydjE6IHtcblx0XHRuYW1lOiAncDE5MicsXG5cdFx0Ynl0ZUxlbmd0aDogMjRcblx0fSxcblx0ZWQyNTUxOToge1xuXHRcdG5hbWU6ICdlZDI1NTE5Jyxcblx0XHRieXRlTGVuZ3RoOiAzMlxuXHR9LFxuXHRzZWNwMzg0cjE6IHtcblx0XHRuYW1lOiAncDM4NCcsXG5cdFx0Ynl0ZUxlbmd0aDogNDhcblx0fSxcblx0c2VjcDUyMXIxOiB7XG5cdFx0bmFtZTogJ3A1MjEnLFxuXHRcdGJ5dGVMZW5ndGg6IDY2XG5cdH1cbn07XG5cbmFsaWFzZXMucDIyNCA9IGFsaWFzZXMuc2VjcDIyNHIxO1xuYWxpYXNlcy5wMjU2ID0gYWxpYXNlcy5zZWNwMjU2cjEgPSBhbGlhc2VzLnByaW1lMjU2djE7XG5hbGlhc2VzLnAxOTIgPSBhbGlhc2VzLnNlY3AxOTJyMSA9IGFsaWFzZXMucHJpbWUxOTJ2MTtcbmFsaWFzZXMucDM4NCA9IGFsaWFzZXMuc2VjcDM4NHIxO1xuYWxpYXNlcy5wNTIxID0gYWxpYXNlcy5zZWNwNTIxcjE7XG5cbmZ1bmN0aW9uIEVDREgoY3VydmUpIHtcblx0dGhpcy5jdXJ2ZVR5cGUgPSBhbGlhc2VzW2N1cnZlXTtcblx0aWYgKCF0aGlzLmN1cnZlVHlwZSApIHtcblx0XHR0aGlzLmN1cnZlVHlwZSA9IHtcblx0XHRcdG5hbWU6IGN1cnZlXG5cdFx0fTtcblx0fVxuXHR0aGlzLmN1cnZlID0gbmV3IGVsbGlwdGljLmVjKHRoaXMuY3VydmVUeXBlLm5hbWUpO1xuXHR0aGlzLmtleXMgPSB2b2lkIDA7XG59XG5cbkVDREgucHJvdG90eXBlLmdlbmVyYXRlS2V5cyA9IGZ1bmN0aW9uIChlbmMsIGZvcm1hdCkge1xuXHR0aGlzLmtleXMgPSB0aGlzLmN1cnZlLmdlbktleVBhaXIoKTtcblx0cmV0dXJuIHRoaXMuZ2V0UHVibGljS2V5KGVuYywgZm9ybWF0KTtcbn07XG5cbkVDREgucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQgPSBmdW5jdGlvbiAob3RoZXIsIGluZW5jLCBlbmMpIHtcblx0aW5lbmMgPSBpbmVuYyB8fCAndXRmOCc7XG5cdGlmICghQnVmZmVyLmlzQnVmZmVyKG90aGVyKSkge1xuXHRcdG90aGVyID0gbmV3IEJ1ZmZlcihvdGhlciwgaW5lbmMpO1xuXHR9XG5cdHZhciBvdGhlclB1YiA9IHRoaXMuY3VydmUua2V5RnJvbVB1YmxpYyhvdGhlcikuZ2V0UHVibGljKCk7XG5cdHZhciBvdXQgPSBvdGhlclB1Yi5tdWwodGhpcy5rZXlzLmdldFByaXZhdGUoKSkuZ2V0WCgpO1xuXHRyZXR1cm4gZm9ybWF0UmV0dXJuVmFsdWUob3V0LCBlbmMsIHRoaXMuY3VydmVUeXBlLmJ5dGVMZW5ndGgpO1xufTtcblxuRUNESC5wcm90b3R5cGUuZ2V0UHVibGljS2V5ID0gZnVuY3Rpb24gKGVuYywgZm9ybWF0KSB7XG5cdHZhciBrZXkgPSB0aGlzLmtleXMuZ2V0UHVibGljKGZvcm1hdCA9PT0gJ2NvbXByZXNzZWQnLCB0cnVlKTtcblx0aWYgKGZvcm1hdCA9PT0gJ2h5YnJpZCcpIHtcblx0XHRpZiAoa2V5W2tleS5sZW5ndGggLSAxXSAlIDIpIHtcblx0XHRcdGtleVswXSA9IDc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGtleSBbMF0gPSA2O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZm9ybWF0UmV0dXJuVmFsdWUoa2V5LCBlbmMpO1xufTtcblxuRUNESC5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleSA9IGZ1bmN0aW9uIChlbmMpIHtcblx0cmV0dXJuIGZvcm1hdFJldHVyblZhbHVlKHRoaXMua2V5cy5nZXRQcml2YXRlKCksIGVuYyk7XG59O1xuXG5FQ0RILnByb3RvdHlwZS5zZXRQdWJsaWNLZXkgPSBmdW5jdGlvbiAocHViLCBlbmMpIHtcblx0ZW5jID0gZW5jIHx8ICd1dGY4Jztcblx0aWYgKCFCdWZmZXIuaXNCdWZmZXIocHViKSkge1xuXHRcdHB1YiA9IG5ldyBCdWZmZXIocHViLCBlbmMpO1xuXHR9XG5cdHRoaXMua2V5cy5faW1wb3J0UHVibGljKHB1Yik7XG5cdHJldHVybiB0aGlzO1xufTtcblxuRUNESC5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleSA9IGZ1bmN0aW9uIChwcml2LCBlbmMpIHtcblx0ZW5jID0gZW5jIHx8ICd1dGY4Jztcblx0aWYgKCFCdWZmZXIuaXNCdWZmZXIocHJpdikpIHtcblx0XHRwcml2ID0gbmV3IEJ1ZmZlcihwcml2LCBlbmMpO1xuXHR9XG5cdHZhciBfcHJpdiA9IG5ldyBCTihwcml2KTtcblx0X3ByaXYgPSBfcHJpdi50b1N0cmluZygxNik7XG5cdHRoaXMua2V5cy5faW1wb3J0UHJpdmF0ZShfcHJpdik7XG5cdHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gZm9ybWF0UmV0dXJuVmFsdWUoYm4sIGVuYywgbGVuKSB7XG5cdGlmICghQXJyYXkuaXNBcnJheShibikpIHtcblx0XHRibiA9IGJuLnRvQXJyYXkoKTtcblx0fVxuXHR2YXIgYnVmID0gbmV3IEJ1ZmZlcihibik7XG5cdGlmIChsZW4gJiYgYnVmLmxlbmd0aCA8IGxlbikge1xuXHRcdHZhciB6ZXJvcyA9IG5ldyBCdWZmZXIobGVuIC0gYnVmLmxlbmd0aCk7XG5cdFx0emVyb3MuZmlsbCgwKTtcblx0XHRidWYgPSBCdWZmZXIuY29uY2F0KFt6ZXJvcywgYnVmXSk7XG5cdH1cblx0aWYgKCFlbmMpIHtcblx0XHRyZXR1cm4gYnVmO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBidWYudG9TdHJpbmcoZW5jKTtcblx0fVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIG1kNSA9IHJlcXVpcmUoJy4vbWQ1JylcbnZhciBybWQxNjAgPSByZXF1aXJlKCdyaXBlbWQxNjAnKVxudmFyIHNoYSA9IHJlcXVpcmUoJ3NoYS5qcycpXG5cbnZhciBCYXNlID0gcmVxdWlyZSgnY2lwaGVyLWJhc2UnKVxuXG5mdW5jdGlvbiBIYXNoTm9Db25zdHJ1Y3RvcihoYXNoKSB7XG4gIEJhc2UuY2FsbCh0aGlzLCAnZGlnZXN0JylcblxuICB0aGlzLl9oYXNoID0gaGFzaFxuICB0aGlzLmJ1ZmZlcnMgPSBbXVxufVxuXG5pbmhlcml0cyhIYXNoTm9Db25zdHJ1Y3RvciwgQmFzZSlcblxuSGFzaE5vQ29uc3RydWN0b3IucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aGlzLmJ1ZmZlcnMucHVzaChkYXRhKVxufVxuXG5IYXNoTm9Db25zdHJ1Y3Rvci5wcm90b3R5cGUuX2ZpbmFsID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYnVmID0gQnVmZmVyLmNvbmNhdCh0aGlzLmJ1ZmZlcnMpXG4gIHZhciByID0gdGhpcy5faGFzaChidWYpXG4gIHRoaXMuYnVmZmVycyA9IG51bGxcblxuICByZXR1cm4gclxufVxuXG5mdW5jdGlvbiBIYXNoKGhhc2gpIHtcbiAgQmFzZS5jYWxsKHRoaXMsICdkaWdlc3QnKVxuXG4gIHRoaXMuX2hhc2ggPSBoYXNoXG59XG5cbmluaGVyaXRzKEhhc2gsIEJhc2UpXG5cbkhhc2gucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aGlzLl9oYXNoLnVwZGF0ZShkYXRhKVxufVxuXG5IYXNoLnByb3RvdHlwZS5fZmluYWwgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlSGFzaCAoYWxnKSB7XG4gIGFsZyA9IGFsZy50b0xvd2VyQ2FzZSgpXG4gIGlmICgnbWQ1JyA9PT0gYWxnKSByZXR1cm4gbmV3IEhhc2hOb0NvbnN0cnVjdG9yKG1kNSlcbiAgaWYgKCdybWQxNjAnID09PSBhbGcgfHwgJ3JpcGVtZDE2MCcgPT09IGFsZykgcmV0dXJuIG5ldyBIYXNoTm9Db25zdHJ1Y3RvcihybWQxNjApXG5cbiAgcmV0dXJuIG5ldyBIYXNoKHNoYShhbGcpKVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGludFNpemUgPSA0O1xudmFyIHplcm9CdWZmZXIgPSBuZXcgQnVmZmVyKGludFNpemUpOyB6ZXJvQnVmZmVyLmZpbGwoMCk7XG52YXIgY2hyc3ogPSA4O1xuXG5mdW5jdGlvbiB0b0FycmF5KGJ1ZiwgYmlnRW5kaWFuKSB7XG4gIGlmICgoYnVmLmxlbmd0aCAlIGludFNpemUpICE9PSAwKSB7XG4gICAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGggKyAoaW50U2l6ZSAtIChidWYubGVuZ3RoICUgaW50U2l6ZSkpO1xuICAgIGJ1ZiA9IEJ1ZmZlci5jb25jYXQoW2J1ZiwgemVyb0J1ZmZlcl0sIGxlbik7XG4gIH1cblxuICB2YXIgYXJyID0gW107XG4gIHZhciBmbiA9IGJpZ0VuZGlhbiA/IGJ1Zi5yZWFkSW50MzJCRSA6IGJ1Zi5yZWFkSW50MzJMRTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpICs9IGludFNpemUpIHtcbiAgICBhcnIucHVzaChmbi5jYWxsKGJ1ZiwgaSkpO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG5cbmZ1bmN0aW9uIHRvQnVmZmVyKGFyciwgc2l6ZSwgYmlnRW5kaWFuKSB7XG4gIHZhciBidWYgPSBuZXcgQnVmZmVyKHNpemUpO1xuICB2YXIgZm4gPSBiaWdFbmRpYW4gPyBidWYud3JpdGVJbnQzMkJFIDogYnVmLndyaXRlSW50MzJMRTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBmbi5jYWxsKGJ1ZiwgYXJyW2ldLCBpICogNCwgdHJ1ZSk7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZnVuY3Rpb24gaGFzaChidWYsIGZuLCBoYXNoU2l6ZSwgYmlnRW5kaWFuKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIGJ1ZiA9IG5ldyBCdWZmZXIoYnVmKTtcbiAgdmFyIGFyciA9IGZuKHRvQXJyYXkoYnVmLCBiaWdFbmRpYW4pLCBidWYubGVuZ3RoICogY2hyc3opO1xuICByZXR1cm4gdG9CdWZmZXIoYXJyLCBoYXNoU2l6ZSwgYmlnRW5kaWFuKTtcbn1cbmV4cG9ydHMuaGFzaCA9IGhhc2g7IiwiJ3VzZSBzdHJpY3QnO1xuLypcbiAqIEEgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUlNBIERhdGEgU2VjdXJpdHksIEluYy4gTUQ1IE1lc3NhZ2VcbiAqIERpZ2VzdCBBbGdvcml0aG0sIGFzIGRlZmluZWQgaW4gUkZDIDEzMjEuXG4gKiBWZXJzaW9uIDIuMSBDb3B5cmlnaHQgKEMpIFBhdWwgSm9obnN0b24gMTk5OSAtIDIwMDIuXG4gKiBPdGhlciBjb250cmlidXRvcnM6IEdyZWcgSG9sdCwgQW5kcmV3IEtlcGVydCwgWWRuYXIsIExvc3RpbmV0XG4gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIExpY2Vuc2VcbiAqIFNlZSBodHRwOi8vcGFqaG9tZS5vcmcudWsvY3J5cHQvbWQ1IGZvciBtb3JlIGluZm8uXG4gKi9cblxudmFyIGhlbHBlcnMgPSByZXF1aXJlKCcuL2hlbHBlcnMnKTtcblxuLypcbiAqIENhbGN1bGF0ZSB0aGUgTUQ1IG9mIGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHMsIGFuZCBhIGJpdCBsZW5ndGhcbiAqL1xuZnVuY3Rpb24gY29yZV9tZDUoeCwgbGVuKVxue1xuICAvKiBhcHBlbmQgcGFkZGluZyAqL1xuICB4W2xlbiA+PiA1XSB8PSAweDgwIDw8ICgobGVuKSAlIDMyKTtcbiAgeFsoKChsZW4gKyA2NCkgPj4+IDkpIDw8IDQpICsgMTRdID0gbGVuO1xuXG4gIHZhciBhID0gIDE3MzI1ODQxOTM7XG4gIHZhciBiID0gLTI3MTczMzg3OTtcbiAgdmFyIGMgPSAtMTczMjU4NDE5NDtcbiAgdmFyIGQgPSAgMjcxNzMzODc4O1xuXG4gIGZvcih2YXIgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSArPSAxNilcbiAge1xuICAgIHZhciBvbGRhID0gYTtcbiAgICB2YXIgb2xkYiA9IGI7XG4gICAgdmFyIG9sZGMgPSBjO1xuICAgIHZhciBvbGRkID0gZDtcblxuICAgIGEgPSBtZDVfZmYoYSwgYiwgYywgZCwgeFtpKyAwXSwgNyAsIC02ODA4NzY5MzYpO1xuICAgIGQgPSBtZDVfZmYoZCwgYSwgYiwgYywgeFtpKyAxXSwgMTIsIC0zODk1NjQ1ODYpO1xuICAgIGMgPSBtZDVfZmYoYywgZCwgYSwgYiwgeFtpKyAyXSwgMTcsICA2MDYxMDU4MTkpO1xuICAgIGIgPSBtZDVfZmYoYiwgYywgZCwgYSwgeFtpKyAzXSwgMjIsIC0xMDQ0NTI1MzMwKTtcbiAgICBhID0gbWQ1X2ZmKGEsIGIsIGMsIGQsIHhbaSsgNF0sIDcgLCAtMTc2NDE4ODk3KTtcbiAgICBkID0gbWQ1X2ZmKGQsIGEsIGIsIGMsIHhbaSsgNV0sIDEyLCAgMTIwMDA4MDQyNik7XG4gICAgYyA9IG1kNV9mZihjLCBkLCBhLCBiLCB4W2krIDZdLCAxNywgLTE0NzMyMzEzNDEpO1xuICAgIGIgPSBtZDVfZmYoYiwgYywgZCwgYSwgeFtpKyA3XSwgMjIsIC00NTcwNTk4Myk7XG4gICAgYSA9IG1kNV9mZihhLCBiLCBjLCBkLCB4W2krIDhdLCA3ICwgIDE3NzAwMzU0MTYpO1xuICAgIGQgPSBtZDVfZmYoZCwgYSwgYiwgYywgeFtpKyA5XSwgMTIsIC0xOTU4NDE0NDE3KTtcbiAgICBjID0gbWQ1X2ZmKGMsIGQsIGEsIGIsIHhbaSsxMF0sIDE3LCAtNDIwNjMpO1xuICAgIGIgPSBtZDVfZmYoYiwgYywgZCwgYSwgeFtpKzExXSwgMjIsIC0xOTkwNDA0MTYyKTtcbiAgICBhID0gbWQ1X2ZmKGEsIGIsIGMsIGQsIHhbaSsxMl0sIDcgLCAgMTgwNDYwMzY4Mik7XG4gICAgZCA9IG1kNV9mZihkLCBhLCBiLCBjLCB4W2krMTNdLCAxMiwgLTQwMzQxMTAxKTtcbiAgICBjID0gbWQ1X2ZmKGMsIGQsIGEsIGIsIHhbaSsxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XG4gICAgYiA9IG1kNV9mZihiLCBjLCBkLCBhLCB4W2krMTVdLCAyMiwgIDEyMzY1MzUzMjkpO1xuXG4gICAgYSA9IG1kNV9nZyhhLCBiLCBjLCBkLCB4W2krIDFdLCA1ICwgLTE2NTc5NjUxMCk7XG4gICAgZCA9IG1kNV9nZyhkLCBhLCBiLCBjLCB4W2krIDZdLCA5ICwgLTEwNjk1MDE2MzIpO1xuICAgIGMgPSBtZDVfZ2coYywgZCwgYSwgYiwgeFtpKzExXSwgMTQsICA2NDM3MTc3MTMpO1xuICAgIGIgPSBtZDVfZ2coYiwgYywgZCwgYSwgeFtpKyAwXSwgMjAsIC0zNzM4OTczMDIpO1xuICAgIGEgPSBtZDVfZ2coYSwgYiwgYywgZCwgeFtpKyA1XSwgNSAsIC03MDE1NTg2OTEpO1xuICAgIGQgPSBtZDVfZ2coZCwgYSwgYiwgYywgeFtpKzEwXSwgOSAsICAzODAxNjA4Myk7XG4gICAgYyA9IG1kNV9nZyhjLCBkLCBhLCBiLCB4W2krMTVdLCAxNCwgLTY2MDQ3ODMzNSk7XG4gICAgYiA9IG1kNV9nZyhiLCBjLCBkLCBhLCB4W2krIDRdLCAyMCwgLTQwNTUzNzg0OCk7XG4gICAgYSA9IG1kNV9nZyhhLCBiLCBjLCBkLCB4W2krIDldLCA1ICwgIDU2ODQ0NjQzOCk7XG4gICAgZCA9IG1kNV9nZyhkLCBhLCBiLCBjLCB4W2krMTRdLCA5ICwgLTEwMTk4MDM2OTApO1xuICAgIGMgPSBtZDVfZ2coYywgZCwgYSwgYiwgeFtpKyAzXSwgMTQsIC0xODczNjM5NjEpO1xuICAgIGIgPSBtZDVfZ2coYiwgYywgZCwgYSwgeFtpKyA4XSwgMjAsICAxMTYzNTMxNTAxKTtcbiAgICBhID0gbWQ1X2dnKGEsIGIsIGMsIGQsIHhbaSsxM10sIDUgLCAtMTQ0NDY4MTQ2Nyk7XG4gICAgZCA9IG1kNV9nZyhkLCBhLCBiLCBjLCB4W2krIDJdLCA5ICwgLTUxNDAzNzg0KTtcbiAgICBjID0gbWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSsgN10sIDE0LCAgMTczNTMyODQ3Myk7XG4gICAgYiA9IG1kNV9nZyhiLCBjLCBkLCBhLCB4W2krMTJdLCAyMCwgLTE5MjY2MDc3MzQpO1xuXG4gICAgYSA9IG1kNV9oaChhLCBiLCBjLCBkLCB4W2krIDVdLCA0ICwgLTM3ODU1OCk7XG4gICAgZCA9IG1kNV9oaChkLCBhLCBiLCBjLCB4W2krIDhdLCAxMSwgLTIwMjI1NzQ0NjMpO1xuICAgIGMgPSBtZDVfaGgoYywgZCwgYSwgYiwgeFtpKzExXSwgMTYsICAxODM5MDMwNTYyKTtcbiAgICBiID0gbWQ1X2hoKGIsIGMsIGQsIGEsIHhbaSsxNF0sIDIzLCAtMzUzMDk1NTYpO1xuICAgIGEgPSBtZDVfaGgoYSwgYiwgYywgZCwgeFtpKyAxXSwgNCAsIC0xNTMwOTkyMDYwKTtcbiAgICBkID0gbWQ1X2hoKGQsIGEsIGIsIGMsIHhbaSsgNF0sIDExLCAgMTI3Mjg5MzM1Myk7XG4gICAgYyA9IG1kNV9oaChjLCBkLCBhLCBiLCB4W2krIDddLCAxNiwgLTE1NTQ5NzYzMik7XG4gICAgYiA9IG1kNV9oaChiLCBjLCBkLCBhLCB4W2krMTBdLCAyMywgLTEwOTQ3MzA2NDApO1xuICAgIGEgPSBtZDVfaGgoYSwgYiwgYywgZCwgeFtpKzEzXSwgNCAsICA2ODEyNzkxNzQpO1xuICAgIGQgPSBtZDVfaGgoZCwgYSwgYiwgYywgeFtpKyAwXSwgMTEsIC0zNTg1MzcyMjIpO1xuICAgIGMgPSBtZDVfaGgoYywgZCwgYSwgYiwgeFtpKyAzXSwgMTYsIC03MjI1MjE5NzkpO1xuICAgIGIgPSBtZDVfaGgoYiwgYywgZCwgYSwgeFtpKyA2XSwgMjMsICA3NjAyOTE4OSk7XG4gICAgYSA9IG1kNV9oaChhLCBiLCBjLCBkLCB4W2krIDldLCA0ICwgLTY0MDM2NDQ4Nyk7XG4gICAgZCA9IG1kNV9oaChkLCBhLCBiLCBjLCB4W2krMTJdLCAxMSwgLTQyMTgxNTgzNSk7XG4gICAgYyA9IG1kNV9oaChjLCBkLCBhLCBiLCB4W2krMTVdLCAxNiwgIDUzMDc0MjUyMCk7XG4gICAgYiA9IG1kNV9oaChiLCBjLCBkLCBhLCB4W2krIDJdLCAyMywgLTk5NTMzODY1MSk7XG5cbiAgICBhID0gbWQ1X2lpKGEsIGIsIGMsIGQsIHhbaSsgMF0sIDYgLCAtMTk4NjMwODQ0KTtcbiAgICBkID0gbWQ1X2lpKGQsIGEsIGIsIGMsIHhbaSsgN10sIDEwLCAgMTEyNjg5MTQxNSk7XG4gICAgYyA9IG1kNV9paShjLCBkLCBhLCBiLCB4W2krMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xuICAgIGIgPSBtZDVfaWkoYiwgYywgZCwgYSwgeFtpKyA1XSwgMjEsIC01NzQzNDA1NSk7XG4gICAgYSA9IG1kNV9paShhLCBiLCBjLCBkLCB4W2krMTJdLCA2ICwgIDE3MDA0ODU1NzEpO1xuICAgIGQgPSBtZDVfaWkoZCwgYSwgYiwgYywgeFtpKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcbiAgICBjID0gbWQ1X2lpKGMsIGQsIGEsIGIsIHhbaSsxMF0sIDE1LCAtMTA1MTUyMyk7XG4gICAgYiA9IG1kNV9paShiLCBjLCBkLCBhLCB4W2krIDFdLCAyMSwgLTIwNTQ5MjI3OTkpO1xuICAgIGEgPSBtZDVfaWkoYSwgYiwgYywgZCwgeFtpKyA4XSwgNiAsICAxODczMzEzMzU5KTtcbiAgICBkID0gbWQ1X2lpKGQsIGEsIGIsIGMsIHhbaSsxNV0sIDEwLCAtMzA2MTE3NDQpO1xuICAgIGMgPSBtZDVfaWkoYywgZCwgYSwgYiwgeFtpKyA2XSwgMTUsIC0xNTYwMTk4MzgwKTtcbiAgICBiID0gbWQ1X2lpKGIsIGMsIGQsIGEsIHhbaSsxM10sIDIxLCAgMTMwOTE1MTY0OSk7XG4gICAgYSA9IG1kNV9paShhLCBiLCBjLCBkLCB4W2krIDRdLCA2ICwgLTE0NTUyMzA3MCk7XG4gICAgZCA9IG1kNV9paShkLCBhLCBiLCBjLCB4W2krMTFdLCAxMCwgLTExMjAyMTAzNzkpO1xuICAgIGMgPSBtZDVfaWkoYywgZCwgYSwgYiwgeFtpKyAyXSwgMTUsICA3MTg3ODcyNTkpO1xuICAgIGIgPSBtZDVfaWkoYiwgYywgZCwgYSwgeFtpKyA5XSwgMjEsIC0zNDM0ODU1NTEpO1xuXG4gICAgYSA9IHNhZmVfYWRkKGEsIG9sZGEpO1xuICAgIGIgPSBzYWZlX2FkZChiLCBvbGRiKTtcbiAgICBjID0gc2FmZV9hZGQoYywgb2xkYyk7XG4gICAgZCA9IHNhZmVfYWRkKGQsIG9sZGQpO1xuICB9XG4gIHJldHVybiBBcnJheShhLCBiLCBjLCBkKTtcblxufVxuXG4vKlxuICogVGhlc2UgZnVuY3Rpb25zIGltcGxlbWVudCB0aGUgZm91ciBiYXNpYyBvcGVyYXRpb25zIHRoZSBhbGdvcml0aG0gdXNlcy5cbiAqL1xuZnVuY3Rpb24gbWQ1X2NtbihxLCBhLCBiLCB4LCBzLCB0KVxue1xuICByZXR1cm4gc2FmZV9hZGQoYml0X3JvbChzYWZlX2FkZChzYWZlX2FkZChhLCBxKSwgc2FmZV9hZGQoeCwgdCkpLCBzKSxiKTtcbn1cbmZ1bmN0aW9uIG1kNV9mZihhLCBiLCBjLCBkLCB4LCBzLCB0KVxue1xuICByZXR1cm4gbWQ1X2NtbigoYiAmIGMpIHwgKCh+YikgJiBkKSwgYSwgYiwgeCwgcywgdCk7XG59XG5mdW5jdGlvbiBtZDVfZ2coYSwgYiwgYywgZCwgeCwgcywgdClcbntcbiAgcmV0dXJuIG1kNV9jbW4oKGIgJiBkKSB8IChjICYgKH5kKSksIGEsIGIsIHgsIHMsIHQpO1xufVxuZnVuY3Rpb24gbWQ1X2hoKGEsIGIsIGMsIGQsIHgsIHMsIHQpXG57XG4gIHJldHVybiBtZDVfY21uKGIgXiBjIF4gZCwgYSwgYiwgeCwgcywgdCk7XG59XG5mdW5jdGlvbiBtZDVfaWkoYSwgYiwgYywgZCwgeCwgcywgdClcbntcbiAgcmV0dXJuIG1kNV9jbW4oYyBeIChiIHwgKH5kKSksIGEsIGIsIHgsIHMsIHQpO1xufVxuXG4vKlxuICogQWRkIGludGVnZXJzLCB3cmFwcGluZyBhdCAyXjMyLiBUaGlzIHVzZXMgMTYtYml0IG9wZXJhdGlvbnMgaW50ZXJuYWxseVxuICogdG8gd29yayBhcm91bmQgYnVncyBpbiBzb21lIEpTIGludGVycHJldGVycy5cbiAqL1xuZnVuY3Rpb24gc2FmZV9hZGQoeCwgeSlcbntcbiAgdmFyIGxzdyA9ICh4ICYgMHhGRkZGKSArICh5ICYgMHhGRkZGKTtcbiAgdmFyIG1zdyA9ICh4ID4+IDE2KSArICh5ID4+IDE2KSArIChsc3cgPj4gMTYpO1xuICByZXR1cm4gKG1zdyA8PCAxNikgfCAobHN3ICYgMHhGRkZGKTtcbn1cblxuLypcbiAqIEJpdHdpc2Ugcm90YXRlIGEgMzItYml0IG51bWJlciB0byB0aGUgbGVmdC5cbiAqL1xuZnVuY3Rpb24gYml0X3JvbChudW0sIGNudClcbntcbiAgcmV0dXJuIChudW0gPDwgY250KSB8IChudW0gPj4+ICgzMiAtIGNudCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1kNShidWYpIHtcbiAgcmV0dXJuIGhlbHBlcnMuaGFzaChidWYsIGNvcmVfbWQ1LCAxNik7XG59OyIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGVIYXNoID0gcmVxdWlyZSgnY3JlYXRlLWhhc2gvYnJvd3NlcicpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuXG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnc3RyZWFtJykuVHJhbnNmb3JtXG5cbnZhciBaRVJPUyA9IG5ldyBCdWZmZXIoMTI4KVxuWkVST1MuZmlsbCgwKVxuXG5mdW5jdGlvbiBIbWFjKGFsZywga2V5KSB7XG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMpXG4gIGFsZyA9IGFsZy50b0xvd2VyQ2FzZSgpXG4gIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgIGtleSA9IG5ldyBCdWZmZXIoa2V5KVxuICB9XG5cbiAgdmFyIGJsb2Nrc2l6ZSA9IChhbGcgPT09ICdzaGE1MTInIHx8IGFsZyA9PT0gJ3NoYTM4NCcpID8gMTI4IDogNjRcblxuICB0aGlzLl9hbGcgPSBhbGdcbiAgdGhpcy5fa2V5ID0ga2V5XG5cbiAgaWYgKGtleS5sZW5ndGggPiBibG9ja3NpemUpIHtcbiAgICBrZXkgPSBjcmVhdGVIYXNoKGFsZykudXBkYXRlKGtleSkuZGlnZXN0KClcblxuICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPCBibG9ja3NpemUpIHtcbiAgICBrZXkgPSBCdWZmZXIuY29uY2F0KFtrZXksIFpFUk9TXSwgYmxvY2tzaXplKVxuICB9XG5cbiAgdmFyIGlwYWQgPSB0aGlzLl9pcGFkID0gbmV3IEJ1ZmZlcihibG9ja3NpemUpXG4gIHZhciBvcGFkID0gdGhpcy5fb3BhZCA9IG5ldyBCdWZmZXIoYmxvY2tzaXplKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tzaXplOyBpKyspIHtcbiAgICBpcGFkW2ldID0ga2V5W2ldIF4gMHgzNlxuICAgIG9wYWRbaV0gPSBrZXlbaV0gXiAweDVDXG4gIH1cblxuICB0aGlzLl9oYXNoID0gY3JlYXRlSGFzaChhbGcpLnVwZGF0ZShpcGFkKVxufVxuXG5pbmhlcml0cyhIbWFjLCBUcmFuc2Zvcm0pXG5cbkhtYWMucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBlbmMpIHtcbiAgdGhpcy5faGFzaC51cGRhdGUoZGF0YSwgZW5jKVxuXG4gIHJldHVybiB0aGlzXG59XG5cbkhtYWMucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoZGF0YSwgXywgbmV4dCkge1xuICB0aGlzLl9oYXNoLnVwZGF0ZShkYXRhKVxuXG4gIG5leHQoKVxufVxuXG5IbWFjLnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbiAobmV4dCkge1xuICB0aGlzLnB1c2godGhpcy5kaWdlc3QoKSlcblxuICBuZXh0KClcbn1cblxuSG1hYy5wcm90b3R5cGUuZGlnZXN0ID0gZnVuY3Rpb24gKGVuYykge1xuICB2YXIgaCA9IHRoaXMuX2hhc2guZGlnZXN0KClcblxuICByZXR1cm4gY3JlYXRlSGFzaCh0aGlzLl9hbGcpLnVwZGF0ZSh0aGlzLl9vcGFkKS51cGRhdGUoaCkuZGlnZXN0KGVuYylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVIbWFjKGFsZywga2V5KSB7XG4gIHJldHVybiBuZXcgSG1hYyhhbGcsIGtleSlcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLnJhbmRvbUJ5dGVzID0gZXhwb3J0cy5ybmcgPSBleHBvcnRzLnBzZXVkb1JhbmRvbUJ5dGVzID0gZXhwb3J0cy5wcm5nID0gcmVxdWlyZSgncmFuZG9tYnl0ZXMnKVxuZXhwb3J0cy5jcmVhdGVIYXNoID0gZXhwb3J0cy5IYXNoID0gcmVxdWlyZSgnY3JlYXRlLWhhc2gnKVxuZXhwb3J0cy5jcmVhdGVIbWFjID0gZXhwb3J0cy5IbWFjID0gcmVxdWlyZSgnY3JlYXRlLWhtYWMnKVxuXG52YXIgaGFzaGVzID0gWydzaGExJywgJ3NoYTIyNCcsICdzaGEyNTYnLCAnc2hhMzg0JywgJ3NoYTUxMicsICdtZDUnLCAncm1kMTYwJ10uY29uY2F0KE9iamVjdC5rZXlzKHJlcXVpcmUoJ2Jyb3dzZXJpZnktc2lnbi9hbGdvcycpKSlcbmV4cG9ydHMuZ2V0SGFzaGVzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaGFzaGVzXG59XG5cbnZhciBwID0gcmVxdWlyZSgncGJrZGYyJylcbmV4cG9ydHMucGJrZGYyID0gcC5wYmtkZjJcbmV4cG9ydHMucGJrZGYyU3luYyA9IHAucGJrZGYyU3luY1xuXG52YXIgYWVzID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1jaXBoZXInKVxuO1tcbiAgJ0NpcGhlcicsXG4gICdjcmVhdGVDaXBoZXInLFxuICAnQ2lwaGVyaXYnLFxuICAnY3JlYXRlQ2lwaGVyaXYnLFxuICAnRGVjaXBoZXInLFxuICAnY3JlYXRlRGVjaXBoZXInLFxuICAnRGVjaXBoZXJpdicsXG4gICdjcmVhdGVEZWNpcGhlcml2JyxcbiAgJ2dldENpcGhlcnMnLFxuICAnbGlzdENpcGhlcnMnXG5dLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBleHBvcnRzW2tleV0gPSBhZXNba2V5XVxufSlcblxudmFyIGRoID0gcmVxdWlyZSgnZGlmZmllLWhlbGxtYW4nKVxuO1tcbiAgJ0RpZmZpZUhlbGxtYW5Hcm91cCcsXG4gICdjcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAnLFxuICAnZ2V0RGlmZmllSGVsbG1hbicsXG4gICdjcmVhdGVEaWZmaWVIZWxsbWFuJyxcbiAgJ0RpZmZpZUhlbGxtYW4nXG5dLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBleHBvcnRzW2tleV0gPSBkaFtrZXldXG59KVxuXG52YXIgc2lnbiA9IHJlcXVpcmUoJ2Jyb3dzZXJpZnktc2lnbicpXG47W1xuICAnY3JlYXRlU2lnbicsXG4gICdTaWduJyxcbiAgJ2NyZWF0ZVZlcmlmeScsXG4gICdWZXJpZnknXG5dLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBleHBvcnRzW2tleV0gPSBzaWduW2tleV1cbn0pXG5cbmV4cG9ydHMuY3JlYXRlRUNESCA9IHJlcXVpcmUoJ2NyZWF0ZS1lY2RoJylcblxudmFyIHB1YmxpY0VuY3J5cHQgPSByZXF1aXJlKCdwdWJsaWMtZW5jcnlwdCcpXG5cbjtbXG4gICdwdWJsaWNFbmNyeXB0JyxcbiAgJ3ByaXZhdGVFbmNyeXB0JyxcbiAgJ3B1YmxpY0RlY3J5cHQnLFxuICAncHJpdmF0ZURlY3J5cHQnXG5dLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBleHBvcnRzW2tleV0gPSBwdWJsaWNFbmNyeXB0W2tleV1cbn0pXG5cbi8vIHRoZSBsZWFzdCBJIGNhbiBkbyBpcyBtYWtlIGVycm9yIG1lc3NhZ2VzIGZvciB0aGUgcmVzdCBvZiB0aGUgbm9kZS5qcy9jcnlwdG8gYXBpLlxuO1tcbiAgJ2NyZWF0ZUNyZWRlbnRpYWxzJ1xuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIGV4cG9ydHNbbmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFtcbiAgICAgICdzb3JyeSwgJyArIG5hbWUgKyAnIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQnLFxuICAgICAgJ3dlIGFjY2VwdCBwdWxsIHJlcXVlc3RzJyxcbiAgICAgICdodHRwczovL2dpdGh1Yi5jb20vY3J5cHRvLWJyb3dzZXJpZnkvY3J5cHRvLWJyb3dzZXJpZnknXG4gICAgXS5qb2luKCdcXG4nKSlcbiAgfVxufSlcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy51dGlscyA9IHJlcXVpcmUoJy4vZGVzL3V0aWxzJyk7XG5leHBvcnRzLkNpcGhlciA9IHJlcXVpcmUoJy4vZGVzL2NpcGhlcicpO1xuZXhwb3J0cy5ERVMgPSByZXF1aXJlKCcuL2Rlcy9kZXMnKTtcbmV4cG9ydHMuQ0JDID0gcmVxdWlyZSgnLi9kZXMvY2JjJyk7XG5leHBvcnRzLkVERSA9IHJlcXVpcmUoJy4vZGVzL2VkZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxudmFyIHByb3RvID0ge307XG5cbmZ1bmN0aW9uIENCQ1N0YXRlKGl2KSB7XG4gIGFzc2VydC5lcXVhbChpdi5sZW5ndGgsIDgsICdJbnZhbGlkIElWIGxlbmd0aCcpO1xuXG4gIHRoaXMuaXYgPSBuZXcgQXJyYXkoOCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdi5sZW5ndGg7IGkrKylcbiAgICB0aGlzLml2W2ldID0gaXZbaV07XG59XG5cbmZ1bmN0aW9uIGluc3RhbnRpYXRlKEJhc2UpIHtcbiAgZnVuY3Rpb24gQ0JDKG9wdGlvbnMpIHtcbiAgICBCYXNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgdGhpcy5fY2JjSW5pdCgpO1xuICB9XG4gIGluaGVyaXRzKENCQywgQmFzZSk7XG5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm90byk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIENCQy5wcm90b3R5cGVba2V5XSA9IHByb3RvW2tleV07XG4gIH1cblxuICBDQkMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IENCQyhvcHRpb25zKTtcbiAgfTtcblxuICByZXR1cm4gQ0JDO1xufVxuXG5leHBvcnRzLmluc3RhbnRpYXRlID0gaW5zdGFudGlhdGU7XG5cbnByb3RvLl9jYmNJbml0ID0gZnVuY3Rpb24gX2NiY0luaXQoKSB7XG4gIHZhciBzdGF0ZSA9IG5ldyBDQkNTdGF0ZSh0aGlzLm9wdGlvbnMuaXYpO1xuICB0aGlzLl9jYmNTdGF0ZSA9IHN0YXRlO1xufTtcblxucHJvdG8uX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUoaW5wLCBpbk9mZiwgb3V0LCBvdXRPZmYpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fY2JjU3RhdGU7XG4gIHZhciBzdXBlclByb3RvID0gdGhpcy5jb25zdHJ1Y3Rvci5zdXBlcl8ucHJvdG90eXBlO1xuXG4gIHZhciBpdiA9IHN0YXRlLml2O1xuICBpZiAodGhpcy50eXBlID09PSAnZW5jcnlwdCcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYmxvY2tTaXplOyBpKyspXG4gICAgICBpdltpXSBePSBpbnBbaW5PZmYgKyBpXTtcblxuICAgIHN1cGVyUHJvdG8uX3VwZGF0ZS5jYWxsKHRoaXMsIGl2LCAwLCBvdXQsIG91dE9mZik7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYmxvY2tTaXplOyBpKyspXG4gICAgICBpdltpXSA9IG91dFtvdXRPZmYgKyBpXTtcbiAgfSBlbHNlIHtcbiAgICBzdXBlclByb3RvLl91cGRhdGUuY2FsbCh0aGlzLCBpbnAsIGluT2ZmLCBvdXQsIG91dE9mZik7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYmxvY2tTaXplOyBpKyspXG4gICAgICBvdXRbb3V0T2ZmICsgaV0gXj0gaXZbaV07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYmxvY2tTaXplOyBpKyspXG4gICAgICBpdltpXSA9IGlucFtpbk9mZiArIGldO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBDaXBoZXIob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gIHRoaXMudHlwZSA9IHRoaXMub3B0aW9ucy50eXBlO1xuICB0aGlzLmJsb2NrU2l6ZSA9IDg7XG4gIHRoaXMuX2luaXQoKTtcblxuICB0aGlzLmJ1ZmZlciA9IG5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7XG4gIHRoaXMuYnVmZmVyT2ZmID0gMDtcbn1cbm1vZHVsZS5leHBvcnRzID0gQ2lwaGVyO1xuXG5DaXBoZXIucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gX2luaXQoKSB7XG4gIC8vIE1pZ2h0IGJlIG92ZXJyaWRlZFxufTtcblxuQ2lwaGVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoZGF0YSkge1xuICBpZiAoZGF0YS5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0aGlzLnR5cGUgPT09ICdkZWNyeXB0JylcbiAgICByZXR1cm4gdGhpcy5fdXBkYXRlRGVjcnlwdChkYXRhKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLl91cGRhdGVFbmNyeXB0KGRhdGEpO1xufTtcblxuQ2lwaGVyLnByb3RvdHlwZS5fYnVmZmVyID0gZnVuY3Rpb24gX2J1ZmZlcihkYXRhLCBvZmYpIHtcbiAgLy8gQXBwZW5kIGRhdGEgdG8gYnVmZmVyXG4gIHZhciBtaW4gPSBNYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGggLSB0aGlzLmJ1ZmZlck9mZiwgZGF0YS5sZW5ndGggLSBvZmYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1pbjsgaSsrKVxuICAgIHRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmICsgaV0gPSBkYXRhW29mZiArIGldO1xuICB0aGlzLmJ1ZmZlck9mZiArPSBtaW47XG5cbiAgLy8gU2hpZnQgbmV4dFxuICByZXR1cm4gbWluO1xufTtcblxuQ2lwaGVyLnByb3RvdHlwZS5fZmx1c2hCdWZmZXIgPSBmdW5jdGlvbiBfZmx1c2hCdWZmZXIob3V0LCBvZmYpIHtcbiAgdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLCAwLCBvdXQsIG9mZik7XG4gIHRoaXMuYnVmZmVyT2ZmID0gMDtcbiAgcmV0dXJuIHRoaXMuYmxvY2tTaXplO1xufTtcblxuQ2lwaGVyLnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdCA9IGZ1bmN0aW9uIF91cGRhdGVFbmNyeXB0KGRhdGEpIHtcbiAgdmFyIGlucHV0T2ZmID0gMDtcbiAgdmFyIG91dHB1dE9mZiA9IDA7XG5cbiAgdmFyIGNvdW50ID0gKCh0aGlzLmJ1ZmZlck9mZiArIGRhdGEubGVuZ3RoKSAvIHRoaXMuYmxvY2tTaXplKSB8IDA7XG4gIHZhciBvdXQgPSBuZXcgQXJyYXkoY291bnQgKiB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgaWYgKHRoaXMuYnVmZmVyT2ZmICE9PSAwKSB7XG4gICAgaW5wdXRPZmYgKz0gdGhpcy5fYnVmZmVyKGRhdGEsIGlucHV0T2ZmKTtcblxuICAgIGlmICh0aGlzLmJ1ZmZlck9mZiA9PT0gdGhpcy5idWZmZXIubGVuZ3RoKVxuICAgICAgb3V0cHV0T2ZmICs9IHRoaXMuX2ZsdXNoQnVmZmVyKG91dCwgb3V0cHV0T2ZmKTtcbiAgfVxuXG4gIC8vIFdyaXRlIGJsb2Nrc1xuICB2YXIgbWF4ID0gZGF0YS5sZW5ndGggLSAoKGRhdGEubGVuZ3RoIC0gaW5wdXRPZmYpICUgdGhpcy5ibG9ja1NpemUpO1xuICBmb3IgKDsgaW5wdXRPZmYgPCBtYXg7IGlucHV0T2ZmICs9IHRoaXMuYmxvY2tTaXplKSB7XG4gICAgdGhpcy5fdXBkYXRlKGRhdGEsIGlucHV0T2ZmLCBvdXQsIG91dHB1dE9mZik7XG4gICAgb3V0cHV0T2ZmICs9IHRoaXMuYmxvY2tTaXplO1xuICB9XG5cbiAgLy8gUXVldWUgcmVzdFxuICBmb3IgKDsgaW5wdXRPZmYgPCBkYXRhLmxlbmd0aDsgaW5wdXRPZmYrKywgdGhpcy5idWZmZXJPZmYrKylcbiAgICB0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZl0gPSBkYXRhW2lucHV0T2ZmXTtcblxuICByZXR1cm4gb3V0O1xufTtcblxuQ2lwaGVyLnByb3RvdHlwZS5fdXBkYXRlRGVjcnlwdCA9IGZ1bmN0aW9uIF91cGRhdGVEZWNyeXB0KGRhdGEpIHtcbiAgdmFyIGlucHV0T2ZmID0gMDtcbiAgdmFyIG91dHB1dE9mZiA9IDA7XG5cbiAgdmFyIGNvdW50ID0gTWF0aC5jZWlsKCh0aGlzLmJ1ZmZlck9mZiArIGRhdGEubGVuZ3RoKSAvIHRoaXMuYmxvY2tTaXplKSAtIDE7XG4gIHZhciBvdXQgPSBuZXcgQXJyYXkoY291bnQgKiB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gVE9ETyhpbmR1dG55KTogb3B0aW1pemUgaXQsIHRoaXMgaXMgZmFyIGZyb20gb3B0aW1hbFxuICBmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tKSB7XG4gICAgaW5wdXRPZmYgKz0gdGhpcy5fYnVmZmVyKGRhdGEsIGlucHV0T2ZmKTtcbiAgICBvdXRwdXRPZmYgKz0gdGhpcy5fZmx1c2hCdWZmZXIob3V0LCBvdXRwdXRPZmYpO1xuICB9XG5cbiAgLy8gQnVmZmVyIHJlc3Qgb2YgdGhlIGlucHV0XG4gIGlucHV0T2ZmICs9IHRoaXMuX2J1ZmZlcihkYXRhLCBpbnB1dE9mZik7XG5cbiAgcmV0dXJuIG91dDtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuZmluYWwgPSBmdW5jdGlvbiBmaW5hbChidWZmZXIpIHtcbiAgdmFyIGZpcnN0O1xuICBpZiAoYnVmZmVyKVxuICAgIGZpcnN0ID0gdGhpcy51cGRhdGUoYnVmZmVyKTtcblxuICB2YXIgbGFzdDtcbiAgaWYgKHRoaXMudHlwZSA9PT0gJ2VuY3J5cHQnKVxuICAgIGxhc3QgPSB0aGlzLl9maW5hbEVuY3J5cHQoKTtcbiAgZWxzZVxuICAgIGxhc3QgPSB0aGlzLl9maW5hbERlY3J5cHQoKTtcblxuICBpZiAoZmlyc3QpXG4gICAgcmV0dXJuIGZpcnN0LmNvbmNhdChsYXN0KTtcbiAgZWxzZVxuICAgIHJldHVybiBsYXN0O1xufTtcblxuQ2lwaGVyLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gX3BhZChidWZmZXIsIG9mZikge1xuICBpZiAob2ZmID09PSAwKVxuICAgIHJldHVybiBmYWxzZTtcblxuICB3aGlsZSAob2ZmIDwgYnVmZmVyLmxlbmd0aClcbiAgICBidWZmZXJbb2ZmKytdID0gMDtcblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuX2ZpbmFsRW5jcnlwdCA9IGZ1bmN0aW9uIF9maW5hbEVuY3J5cHQoKSB7XG4gIGlmICghdGhpcy5fcGFkKHRoaXMuYnVmZmVyLCB0aGlzLmJ1ZmZlck9mZikpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBvdXQgPSBuZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO1xuICB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsIDAsIG91dCwgMCk7XG4gIHJldHVybiBvdXQ7XG59O1xuXG5DaXBoZXIucHJvdG90eXBlLl91bnBhZCA9IGZ1bmN0aW9uIF91bnBhZChidWZmZXIpIHtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuX2ZpbmFsRGVjcnlwdCA9IGZ1bmN0aW9uIF9maW5hbERlY3J5cHQoKSB7XG4gIGFzc2VydC5lcXVhbCh0aGlzLmJ1ZmZlck9mZiwgdGhpcy5ibG9ja1NpemUsICdOb3QgZW5vdWdoIGRhdGEgdG8gZGVjcnlwdCcpO1xuICB2YXIgb3V0ID0gbmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtcbiAgdGhpcy5fZmx1c2hCdWZmZXIob3V0LCAwKTtcblxuICByZXR1cm4gdGhpcy5fdW5wYWQob3V0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG52YXIgZGVzID0gcmVxdWlyZSgnLi4vZGVzJyk7XG52YXIgdXRpbHMgPSBkZXMudXRpbHM7XG52YXIgQ2lwaGVyID0gZGVzLkNpcGhlcjtcblxuZnVuY3Rpb24gREVTU3RhdGUoKSB7XG4gIHRoaXMudG1wID0gbmV3IEFycmF5KDIpO1xuICB0aGlzLmtleXMgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBERVMob3B0aW9ucykge1xuICBDaXBoZXIuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICB2YXIgc3RhdGUgPSBuZXcgREVTU3RhdGUoKTtcbiAgdGhpcy5fZGVzU3RhdGUgPSBzdGF0ZTtcblxuICB0aGlzLmRlcml2ZUtleXMoc3RhdGUsIG9wdGlvbnMua2V5KTtcbn1cbmluaGVyaXRzKERFUywgQ2lwaGVyKTtcbm1vZHVsZS5leHBvcnRzID0gREVTO1xuXG5ERVMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBERVMob3B0aW9ucyk7XG59O1xuXG52YXIgc2hpZnRUYWJsZSA9IFtcbiAgMSwgMSwgMiwgMiwgMiwgMiwgMiwgMixcbiAgMSwgMiwgMiwgMiwgMiwgMiwgMiwgMVxuXTtcblxuREVTLnByb3RvdHlwZS5kZXJpdmVLZXlzID0gZnVuY3Rpb24gZGVyaXZlS2V5cyhzdGF0ZSwga2V5KSB7XG4gIHN0YXRlLmtleXMgPSBuZXcgQXJyYXkoMTYgKiAyKTtcblxuICBhc3NlcnQuZXF1YWwoa2V5Lmxlbmd0aCwgdGhpcy5ibG9ja1NpemUsICdJbnZhbGlkIGtleSBsZW5ndGgnKTtcblxuICB2YXIga0wgPSB1dGlscy5yZWFkVUludDMyQkUoa2V5LCAwKTtcbiAgdmFyIGtSID0gdXRpbHMucmVhZFVJbnQzMkJFKGtleSwgNCk7XG5cbiAgdXRpbHMucGMxKGtMLCBrUiwgc3RhdGUudG1wLCAwKTtcbiAga0wgPSBzdGF0ZS50bXBbMF07XG4gIGtSID0gc3RhdGUudG1wWzFdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmtleXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgc2hpZnQgPSBzaGlmdFRhYmxlW2kgPj4+IDFdO1xuICAgIGtMID0gdXRpbHMucjI4c2hsKGtMLCBzaGlmdCk7XG4gICAga1IgPSB1dGlscy5yMjhzaGwoa1IsIHNoaWZ0KTtcbiAgICB1dGlscy5wYzIoa0wsIGtSLCBzdGF0ZS5rZXlzLCBpKTtcbiAgfVxufTtcblxuREVTLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShpbnAsIGluT2ZmLCBvdXQsIG91dE9mZikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9kZXNTdGF0ZTtcblxuICB2YXIgbCA9IHV0aWxzLnJlYWRVSW50MzJCRShpbnAsIGluT2ZmKTtcbiAgdmFyIHIgPSB1dGlscy5yZWFkVUludDMyQkUoaW5wLCBpbk9mZiArIDQpO1xuXG4gIC8vIEluaXRpYWwgUGVybXV0YXRpb25cbiAgdXRpbHMuaXAobCwgciwgc3RhdGUudG1wLCAwKTtcbiAgbCA9IHN0YXRlLnRtcFswXTtcbiAgciA9IHN0YXRlLnRtcFsxXTtcblxuICBpZiAodGhpcy50eXBlID09PSAnZW5jcnlwdCcpXG4gICAgdGhpcy5fZW5jcnlwdChzdGF0ZSwgbCwgciwgc3RhdGUudG1wLCAwKTtcbiAgZWxzZVxuICAgIHRoaXMuX2RlY3J5cHQoc3RhdGUsIGwsIHIsIHN0YXRlLnRtcCwgMCk7XG5cbiAgbCA9IHN0YXRlLnRtcFswXTtcbiAgciA9IHN0YXRlLnRtcFsxXTtcblxuICB1dGlscy53cml0ZVVJbnQzMkJFKG91dCwgbCwgb3V0T2ZmKTtcbiAgdXRpbHMud3JpdGVVSW50MzJCRShvdXQsIHIsIG91dE9mZiArIDQpO1xufTtcblxuREVTLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gX3BhZChidWZmZXIsIG9mZikge1xuICB2YXIgdmFsdWUgPSBidWZmZXIubGVuZ3RoIC0gb2ZmO1xuICBmb3IgKHZhciBpID0gb2ZmOyBpIDwgYnVmZmVyLmxlbmd0aDsgaSsrKVxuICAgIGJ1ZmZlcltpXSA9IHZhbHVlO1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuREVTLnByb3RvdHlwZS5fdW5wYWQgPSBmdW5jdGlvbiBfdW5wYWQoYnVmZmVyKSB7XG4gIHZhciBwYWQgPSBidWZmZXJbYnVmZmVyLmxlbmd0aCAtIDFdO1xuICBmb3IgKHZhciBpID0gYnVmZmVyLmxlbmd0aCAtIHBhZDsgaSA8IGJ1ZmZlci5sZW5ndGg7IGkrKylcbiAgICBhc3NlcnQuZXF1YWwoYnVmZmVyW2ldLCBwYWQpO1xuXG4gIHJldHVybiBidWZmZXIuc2xpY2UoMCwgYnVmZmVyLmxlbmd0aCAtIHBhZCk7XG59O1xuXG5ERVMucHJvdG90eXBlLl9lbmNyeXB0ID0gZnVuY3Rpb24gX2VuY3J5cHQoc3RhdGUsIGxTdGFydCwgclN0YXJ0LCBvdXQsIG9mZikge1xuICB2YXIgbCA9IGxTdGFydDtcbiAgdmFyIHIgPSByU3RhcnQ7XG5cbiAgLy8gQXBwbHkgZigpIHgxNiB0aW1lc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmtleXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIga2V5TCA9IHN0YXRlLmtleXNbaV07XG4gICAgdmFyIGtleVIgPSBzdGF0ZS5rZXlzW2kgKyAxXTtcblxuICAgIC8vIGYociwgaylcbiAgICB1dGlscy5leHBhbmQociwgc3RhdGUudG1wLCAwKTtcblxuICAgIGtleUwgXj0gc3RhdGUudG1wWzBdO1xuICAgIGtleVIgXj0gc3RhdGUudG1wWzFdO1xuICAgIHZhciBzID0gdXRpbHMuc3Vic3RpdHV0ZShrZXlMLCBrZXlSKTtcbiAgICB2YXIgZiA9IHV0aWxzLnBlcm11dGUocyk7XG5cbiAgICB2YXIgdCA9IHI7XG4gICAgciA9IChsIF4gZikgPj4+IDA7XG4gICAgbCA9IHQ7XG4gIH1cblxuICAvLyBSZXZlcnNlIEluaXRpYWwgUGVybXV0YXRpb25cbiAgdXRpbHMucmlwKHIsIGwsIG91dCwgb2ZmKTtcbn07XG5cbkRFUy5wcm90b3R5cGUuX2RlY3J5cHQgPSBmdW5jdGlvbiBfZGVjcnlwdChzdGF0ZSwgbFN0YXJ0LCByU3RhcnQsIG91dCwgb2ZmKSB7XG4gIHZhciBsID0gclN0YXJ0O1xuICB2YXIgciA9IGxTdGFydDtcblxuICAvLyBBcHBseSBmKCkgeDE2IHRpbWVzXG4gIGZvciAodmFyIGkgPSBzdGF0ZS5rZXlzLmxlbmd0aCAtIDI7IGkgPj0gMDsgaSAtPSAyKSB7XG4gICAgdmFyIGtleUwgPSBzdGF0ZS5rZXlzW2ldO1xuICAgIHZhciBrZXlSID0gc3RhdGUua2V5c1tpICsgMV07XG5cbiAgICAvLyBmKHIsIGspXG4gICAgdXRpbHMuZXhwYW5kKGwsIHN0YXRlLnRtcCwgMCk7XG5cbiAgICBrZXlMIF49IHN0YXRlLnRtcFswXTtcbiAgICBrZXlSIF49IHN0YXRlLnRtcFsxXTtcbiAgICB2YXIgcyA9IHV0aWxzLnN1YnN0aXR1dGUoa2V5TCwga2V5Uik7XG4gICAgdmFyIGYgPSB1dGlscy5wZXJtdXRlKHMpO1xuXG4gICAgdmFyIHQgPSBsO1xuICAgIGwgPSAociBeIGYpID4+PiAwO1xuICAgIHIgPSB0O1xuICB9XG5cbiAgLy8gUmV2ZXJzZSBJbml0aWFsIFBlcm11dGF0aW9uXG4gIHV0aWxzLnJpcChsLCByLCBvdXQsIG9mZik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxudmFyIGRlcyA9IHJlcXVpcmUoJy4uL2RlcycpO1xudmFyIENpcGhlciA9IGRlcy5DaXBoZXI7XG52YXIgREVTID0gZGVzLkRFUztcblxuZnVuY3Rpb24gRURFU3RhdGUodHlwZSwga2V5KSB7XG4gIGFzc2VydC5lcXVhbChrZXkubGVuZ3RoLCAyNCwgJ0ludmFsaWQga2V5IGxlbmd0aCcpO1xuXG4gIHZhciBrMSA9IGtleS5zbGljZSgwLCA4KTtcbiAgdmFyIGsyID0ga2V5LnNsaWNlKDgsIDE2KTtcbiAgdmFyIGszID0ga2V5LnNsaWNlKDE2LCAyNCk7XG5cbiAgaWYgKHR5cGUgPT09ICdlbmNyeXB0Jykge1xuICAgIHRoaXMuY2lwaGVycyA9IFtcbiAgICAgIERFUy5jcmVhdGUoeyB0eXBlOiAnZW5jcnlwdCcsIGtleTogazEgfSksXG4gICAgICBERVMuY3JlYXRlKHsgdHlwZTogJ2RlY3J5cHQnLCBrZXk6IGsyIH0pLFxuICAgICAgREVTLmNyZWF0ZSh7IHR5cGU6ICdlbmNyeXB0Jywga2V5OiBrMyB9KVxuICAgIF07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5jaXBoZXJzID0gW1xuICAgICAgREVTLmNyZWF0ZSh7IHR5cGU6ICdkZWNyeXB0Jywga2V5OiBrMyB9KSxcbiAgICAgIERFUy5jcmVhdGUoeyB0eXBlOiAnZW5jcnlwdCcsIGtleTogazIgfSksXG4gICAgICBERVMuY3JlYXRlKHsgdHlwZTogJ2RlY3J5cHQnLCBrZXk6IGsxIH0pXG4gICAgXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBFREUob3B0aW9ucykge1xuICBDaXBoZXIuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICB2YXIgc3RhdGUgPSBuZXcgRURFU3RhdGUodGhpcy50eXBlLCB0aGlzLm9wdGlvbnMua2V5KTtcbiAgdGhpcy5fZWRlU3RhdGUgPSBzdGF0ZTtcbn1cbmluaGVyaXRzKEVERSwgQ2lwaGVyKTtcblxubW9kdWxlLmV4cG9ydHMgPSBFREU7XG5cbkVERS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUob3B0aW9ucykge1xuICByZXR1cm4gbmV3IEVERShvcHRpb25zKTtcbn07XG5cbkVERS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUoaW5wLCBpbk9mZiwgb3V0LCBvdXRPZmYpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fZWRlU3RhdGU7XG5cbiAgc3RhdGUuY2lwaGVyc1swXS5fdXBkYXRlKGlucCwgaW5PZmYsIG91dCwgb3V0T2ZmKTtcbiAgc3RhdGUuY2lwaGVyc1sxXS5fdXBkYXRlKG91dCwgb3V0T2ZmLCBvdXQsIG91dE9mZik7XG4gIHN0YXRlLmNpcGhlcnNbMl0uX3VwZGF0ZShvdXQsIG91dE9mZiwgb3V0LCBvdXRPZmYpO1xufTtcblxuRURFLnByb3RvdHlwZS5fcGFkID0gREVTLnByb3RvdHlwZS5fcGFkO1xuRURFLnByb3RvdHlwZS5fdW5wYWQgPSBERVMucHJvdG90eXBlLl91bnBhZDtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUoYnl0ZXMsIG9mZikge1xuICB2YXIgcmVzID0gIChieXRlc1swICsgb2ZmXSA8PCAyNCkgfFxuICAgICAgICAgICAgIChieXRlc1sxICsgb2ZmXSA8PCAxNikgfFxuICAgICAgICAgICAgIChieXRlc1syICsgb2ZmXSA8PCA4KSB8XG4gICAgICAgICAgICAgYnl0ZXNbMyArIG9mZl07XG4gIHJldHVybiByZXMgPj4+IDA7XG59O1xuXG5leHBvcnRzLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFKGJ5dGVzLCB2YWx1ZSwgb2ZmKSB7XG4gIGJ5dGVzWzAgKyBvZmZdID0gdmFsdWUgPj4+IDI0O1xuICBieXRlc1sxICsgb2ZmXSA9ICh2YWx1ZSA+Pj4gMTYpICYgMHhmZjtcbiAgYnl0ZXNbMiArIG9mZl0gPSAodmFsdWUgPj4+IDgpICYgMHhmZjtcbiAgYnl0ZXNbMyArIG9mZl0gPSB2YWx1ZSAmIDB4ZmY7XG59O1xuXG5leHBvcnRzLmlwID0gZnVuY3Rpb24gaXAoaW5MLCBpblIsIG91dCwgb2ZmKSB7XG4gIHZhciBvdXRMID0gMDtcbiAgdmFyIG91dFIgPSAwO1xuXG4gIGZvciAodmFyIGkgPSA2OyBpID49IDA7IGkgLT0gMikge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDw9IDI0OyBqICs9IDgpIHtcbiAgICAgIG91dEwgPDw9IDE7XG4gICAgICBvdXRMIHw9IChpblIgPj4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPD0gMjQ7IGogKz0gOCkge1xuICAgICAgb3V0TCA8PD0gMTtcbiAgICAgIG91dEwgfD0gKGluTCA+Pj4gKGogKyBpKSkgJiAxO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSA2OyBpID49IDA7IGkgLT0gMikge1xuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IDI1OyBqICs9IDgpIHtcbiAgICAgIG91dFIgPDw9IDE7XG4gICAgICBvdXRSIHw9IChpblIgPj4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gMjU7IGogKz0gOCkge1xuICAgICAgb3V0UiA8PD0gMTtcbiAgICAgIG91dFIgfD0gKGluTCA+Pj4gKGogKyBpKSkgJiAxO1xuICAgIH1cbiAgfVxuXG4gIG91dFtvZmYgKyAwXSA9IG91dEwgPj4+IDA7XG4gIG91dFtvZmYgKyAxXSA9IG91dFIgPj4+IDA7XG59O1xuXG5leHBvcnRzLnJpcCA9IGZ1bmN0aW9uIHJpcChpbkwsIGluUiwgb3V0LCBvZmYpIHtcbiAgdmFyIG91dEwgPSAwO1xuICB2YXIgb3V0UiA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMjQ7IGogPj0gMDsgaiAtPSA4KSB7XG4gICAgICBvdXRMIDw8PSAxO1xuICAgICAgb3V0TCB8PSAoaW5SID4+PiAoaiArIGkpKSAmIDE7XG4gICAgICBvdXRMIDw8PSAxO1xuICAgICAgb3V0TCB8PSAoaW5MID4+PiAoaiArIGkpKSAmIDE7XG4gICAgfVxuICB9XG4gIGZvciAodmFyIGkgPSA0OyBpIDwgODsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDI0OyBqID49IDA7IGogLT0gOCkge1xuICAgICAgb3V0UiA8PD0gMTtcbiAgICAgIG91dFIgfD0gKGluUiA+Pj4gKGogKyBpKSkgJiAxO1xuICAgICAgb3V0UiA8PD0gMTtcbiAgICAgIG91dFIgfD0gKGluTCA+Pj4gKGogKyBpKSkgJiAxO1xuICAgIH1cbiAgfVxuXG4gIG91dFtvZmYgKyAwXSA9IG91dEwgPj4+IDA7XG4gIG91dFtvZmYgKyAxXSA9IG91dFIgPj4+IDA7XG59O1xuXG5leHBvcnRzLnBjMSA9IGZ1bmN0aW9uIHBjMShpbkwsIGluUiwgb3V0LCBvZmYpIHtcbiAgdmFyIG91dEwgPSAwO1xuICB2YXIgb3V0UiA9IDA7XG5cbiAgLy8gNywgMTUsIDIzLCAzMSwgMzksIDQ3LCA1NSwgNjNcbiAgLy8gNiwgMTQsIDIyLCAzMCwgMzksIDQ3LCA1NSwgNjNcbiAgLy8gNSwgMTMsIDIxLCAyOSwgMzksIDQ3LCA1NSwgNjNcbiAgLy8gNCwgMTIsIDIwLCAyOFxuICBmb3IgKHZhciBpID0gNzsgaSA+PSA1OyBpLS0pIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8PSAyNDsgaiArPSA4KSB7XG4gICAgICBvdXRMIDw8PSAxO1xuICAgICAgb3V0TCB8PSAoaW5SID4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPD0gMjQ7IGogKz0gOCkge1xuICAgICAgb3V0TCA8PD0gMTtcbiAgICAgIG91dEwgfD0gKGluTCA+PiAoaiArIGkpKSAmIDE7XG4gICAgfVxuICB9XG4gIGZvciAodmFyIGogPSAwOyBqIDw9IDI0OyBqICs9IDgpIHtcbiAgICBvdXRMIDw8PSAxO1xuICAgIG91dEwgfD0gKGluUiA+PiAoaiArIGkpKSAmIDE7XG4gIH1cblxuICAvLyAxLCA5LCAxNywgMjUsIDMzLCA0MSwgNDksIDU3XG4gIC8vIDIsIDEwLCAxOCwgMjYsIDM0LCA0MiwgNTAsIDU4XG4gIC8vIDMsIDExLCAxOSwgMjcsIDM1LCA0MywgNTEsIDU5XG4gIC8vIDM2LCA0NCwgNTIsIDYwXG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IDM7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDw9IDI0OyBqICs9IDgpIHtcbiAgICAgIG91dFIgPDw9IDE7XG4gICAgICBvdXRSIHw9IChpblIgPj4gKGogKyBpKSkgJiAxO1xuICAgIH1cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8PSAyNDsgaiArPSA4KSB7XG4gICAgICBvdXRSIDw8PSAxO1xuICAgICAgb3V0UiB8PSAoaW5MID4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gIH1cbiAgZm9yICh2YXIgaiA9IDA7IGogPD0gMjQ7IGogKz0gOCkge1xuICAgIG91dFIgPDw9IDE7XG4gICAgb3V0UiB8PSAoaW5MID4+IChqICsgaSkpICYgMTtcbiAgfVxuXG4gIG91dFtvZmYgKyAwXSA9IG91dEwgPj4+IDA7XG4gIG91dFtvZmYgKyAxXSA9IG91dFIgPj4+IDA7XG59O1xuXG5leHBvcnRzLnIyOHNobCA9IGZ1bmN0aW9uIHIyOHNobChudW0sIHNoaWZ0KSB7XG4gIHJldHVybiAoKG51bSA8PCBzaGlmdCkgJiAweGZmZmZmZmYpIHwgKG51bSA+Pj4gKDI4IC0gc2hpZnQpKTtcbn07XG5cbnZhciBwYzJ0YWJsZSA9IFtcbiAgLy8gaW5MID0+IG91dExcbiAgMTQsIDExLCAxNywgNCwgMjcsIDIzLCAyNSwgMCxcbiAgMTMsIDIyLCA3LCAxOCwgNSwgOSwgMTYsIDI0LFxuICAyLCAyMCwgMTIsIDIxLCAxLCA4LCAxNSwgMjYsXG5cbiAgLy8gaW5SID0+IG91dFJcbiAgMTUsIDQsIDI1LCAxOSwgOSwgMSwgMjYsIDE2LFxuICA1LCAxMSwgMjMsIDgsIDEyLCA3LCAxNywgMCxcbiAgMjIsIDMsIDEwLCAxNCwgNiwgMjAsIDI3LCAyNFxuXTtcblxuZXhwb3J0cy5wYzIgPSBmdW5jdGlvbiBwYzIoaW5MLCBpblIsIG91dCwgb2ZmKSB7XG4gIHZhciBvdXRMID0gMDtcbiAgdmFyIG91dFIgPSAwO1xuXG4gIHZhciBsZW4gPSBwYzJ0YWJsZS5sZW5ndGggPj4+IDE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBvdXRMIDw8PSAxO1xuICAgIG91dEwgfD0gKGluTCA+Pj4gcGMydGFibGVbaV0pICYgMHgxO1xuICB9XG4gIGZvciAodmFyIGkgPSBsZW47IGkgPCBwYzJ0YWJsZS5sZW5ndGg7IGkrKykge1xuICAgIG91dFIgPDw9IDE7XG4gICAgb3V0UiB8PSAoaW5SID4+PiBwYzJ0YWJsZVtpXSkgJiAweDE7XG4gIH1cblxuICBvdXRbb2ZmICsgMF0gPSBvdXRMID4+PiAwO1xuICBvdXRbb2ZmICsgMV0gPSBvdXRSID4+PiAwO1xufTtcblxuZXhwb3J0cy5leHBhbmQgPSBmdW5jdGlvbiBleHBhbmQociwgb3V0LCBvZmYpIHtcbiAgdmFyIG91dEwgPSAwO1xuICB2YXIgb3V0UiA9IDA7XG5cbiAgb3V0TCA9ICgociAmIDEpIDw8IDUpIHwgKHIgPj4+IDI3KTtcbiAgZm9yICh2YXIgaSA9IDIzOyBpID49IDE1OyBpIC09IDQpIHtcbiAgICBvdXRMIDw8PSA2O1xuICAgIG91dEwgfD0gKHIgPj4+IGkpICYgMHgzZjtcbiAgfVxuICBmb3IgKHZhciBpID0gMTE7IGkgPj0gMzsgaSAtPSA0KSB7XG4gICAgb3V0UiB8PSAociA+Pj4gaSkgJiAweDNmO1xuICAgIG91dFIgPDw9IDY7XG4gIH1cbiAgb3V0UiB8PSAoKHIgJiAweDFmKSA8PCAxKSB8IChyID4+PiAzMSk7XG5cbiAgb3V0W29mZiArIDBdID0gb3V0TCA+Pj4gMDtcbiAgb3V0W29mZiArIDFdID0gb3V0UiA+Pj4gMDtcbn07XG5cbnZhciBzVGFibGUgPSBbXG4gIDE0LCAwLCA0LCAxNSwgMTMsIDcsIDEsIDQsIDIsIDE0LCAxNSwgMiwgMTEsIDEzLCA4LCAxLFxuICAzLCAxMCwgMTAsIDYsIDYsIDEyLCAxMiwgMTEsIDUsIDksIDksIDUsIDAsIDMsIDcsIDgsXG4gIDQsIDE1LCAxLCAxMiwgMTQsIDgsIDgsIDIsIDEzLCA0LCA2LCA5LCAyLCAxLCAxMSwgNyxcbiAgMTUsIDUsIDEyLCAxMSwgOSwgMywgNywgMTQsIDMsIDEwLCAxMCwgMCwgNSwgNiwgMCwgMTMsXG5cbiAgMTUsIDMsIDEsIDEzLCA4LCA0LCAxNCwgNywgNiwgMTUsIDExLCAyLCAzLCA4LCA0LCAxNCxcbiAgOSwgMTIsIDcsIDAsIDIsIDEsIDEzLCAxMCwgMTIsIDYsIDAsIDksIDUsIDExLCAxMCwgNSxcbiAgMCwgMTMsIDE0LCA4LCA3LCAxMCwgMTEsIDEsIDEwLCAzLCA0LCAxNSwgMTMsIDQsIDEsIDIsXG4gIDUsIDExLCA4LCA2LCAxMiwgNywgNiwgMTIsIDksIDAsIDMsIDUsIDIsIDE0LCAxNSwgOSxcblxuICAxMCwgMTMsIDAsIDcsIDksIDAsIDE0LCA5LCA2LCAzLCAzLCA0LCAxNSwgNiwgNSwgMTAsXG4gIDEsIDIsIDEzLCA4LCAxMiwgNSwgNywgMTQsIDExLCAxMiwgNCwgMTEsIDIsIDE1LCA4LCAxLFxuICAxMywgMSwgNiwgMTAsIDQsIDEzLCA5LCAwLCA4LCA2LCAxNSwgOSwgMywgOCwgMCwgNyxcbiAgMTEsIDQsIDEsIDE1LCAyLCAxNCwgMTIsIDMsIDUsIDExLCAxMCwgNSwgMTQsIDIsIDcsIDEyLFxuXG4gIDcsIDEzLCAxMywgOCwgMTQsIDExLCAzLCA1LCAwLCA2LCA2LCAxNSwgOSwgMCwgMTAsIDMsXG4gIDEsIDQsIDIsIDcsIDgsIDIsIDUsIDEyLCAxMSwgMSwgMTIsIDEwLCA0LCAxNCwgMTUsIDksXG4gIDEwLCAzLCA2LCAxNSwgOSwgMCwgMCwgNiwgMTIsIDEwLCAxMSwgMSwgNywgMTMsIDEzLCA4LFxuICAxNSwgOSwgMSwgNCwgMywgNSwgMTQsIDExLCA1LCAxMiwgMiwgNywgOCwgMiwgNCwgMTQsXG5cbiAgMiwgMTQsIDEyLCAxMSwgNCwgMiwgMSwgMTIsIDcsIDQsIDEwLCA3LCAxMSwgMTMsIDYsIDEsXG4gIDgsIDUsIDUsIDAsIDMsIDE1LCAxNSwgMTAsIDEzLCAzLCAwLCA5LCAxNCwgOCwgOSwgNixcbiAgNCwgMTEsIDIsIDgsIDEsIDEyLCAxMSwgNywgMTAsIDEsIDEzLCAxNCwgNywgMiwgOCwgMTMsXG4gIDE1LCA2LCA5LCAxNSwgMTIsIDAsIDUsIDksIDYsIDEwLCAzLCA0LCAwLCA1LCAxNCwgMyxcblxuICAxMiwgMTAsIDEsIDE1LCAxMCwgNCwgMTUsIDIsIDksIDcsIDIsIDEyLCA2LCA5LCA4LCA1LFxuICAwLCA2LCAxMywgMSwgMywgMTMsIDQsIDE0LCAxNCwgMCwgNywgMTEsIDUsIDMsIDExLCA4LFxuICA5LCA0LCAxNCwgMywgMTUsIDIsIDUsIDEyLCAyLCA5LCA4LCA1LCAxMiwgMTUsIDMsIDEwLFxuICA3LCAxMSwgMCwgMTQsIDQsIDEsIDEwLCA3LCAxLCA2LCAxMywgMCwgMTEsIDgsIDYsIDEzLFxuXG4gIDQsIDEzLCAxMSwgMCwgMiwgMTEsIDE0LCA3LCAxNSwgNCwgMCwgOSwgOCwgMSwgMTMsIDEwLFxuICAzLCAxNCwgMTIsIDMsIDksIDUsIDcsIDEyLCA1LCAyLCAxMCwgMTUsIDYsIDgsIDEsIDYsXG4gIDEsIDYsIDQsIDExLCAxMSwgMTMsIDEzLCA4LCAxMiwgMSwgMywgNCwgNywgMTAsIDE0LCA3LFxuICAxMCwgOSwgMTUsIDUsIDYsIDAsIDgsIDE1LCAwLCAxNCwgNSwgMiwgOSwgMywgMiwgMTIsXG5cbiAgMTMsIDEsIDIsIDE1LCA4LCAxMywgNCwgOCwgNiwgMTAsIDE1LCAzLCAxMSwgNywgMSwgNCxcbiAgMTAsIDEyLCA5LCA1LCAzLCA2LCAxNCwgMTEsIDUsIDAsIDAsIDE0LCAxMiwgOSwgNywgMixcbiAgNywgMiwgMTEsIDEsIDQsIDE0LCAxLCA3LCA5LCA0LCAxMiwgMTAsIDE0LCA4LCAyLCAxMyxcbiAgMCwgMTUsIDYsIDEyLCAxMCwgOSwgMTMsIDAsIDE1LCAzLCAzLCA1LCA1LCA2LCA4LCAxMVxuXTtcblxuZXhwb3J0cy5zdWJzdGl0dXRlID0gZnVuY3Rpb24gc3Vic3RpdHV0ZShpbkwsIGluUikge1xuICB2YXIgb3V0ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICB2YXIgYiA9IChpbkwgPj4+ICgxOCAtIGkgKiA2KSkgJiAweDNmO1xuICAgIHZhciBzYiA9IHNUYWJsZVtpICogMHg0MCArIGJdO1xuXG4gICAgb3V0IDw8PSA0O1xuICAgIG91dCB8PSBzYjtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgIHZhciBiID0gKGluUiA+Pj4gKDE4IC0gaSAqIDYpKSAmIDB4M2Y7XG4gICAgdmFyIHNiID0gc1RhYmxlWzQgKiAweDQwICsgaSAqIDB4NDAgKyBiXTtcblxuICAgIG91dCA8PD0gNDtcbiAgICBvdXQgfD0gc2I7XG4gIH1cbiAgcmV0dXJuIG91dCA+Pj4gMDtcbn07XG5cbnZhciBwZXJtdXRlVGFibGUgPSBbXG4gIDE2LCAyNSwgMTIsIDExLCAzLCAyMCwgNCwgMTUsIDMxLCAxNywgOSwgNiwgMjcsIDE0LCAxLCAyMixcbiAgMzAsIDI0LCA4LCAxOCwgMCwgNSwgMjksIDIzLCAxMywgMTksIDIsIDI2LCAxMCwgMjEsIDI4LCA3XG5dO1xuXG5leHBvcnRzLnBlcm11dGUgPSBmdW5jdGlvbiBwZXJtdXRlKG51bSkge1xuICB2YXIgb3V0ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwZXJtdXRlVGFibGUubGVuZ3RoOyBpKyspIHtcbiAgICBvdXQgPDw9IDE7XG4gICAgb3V0IHw9IChudW0gPj4+IHBlcm11dGVUYWJsZVtpXSkgJiAweDE7XG4gIH1cbiAgcmV0dXJuIG91dCA+Pj4gMDtcbn07XG5cbmV4cG9ydHMucGFkU3BsaXQgPSBmdW5jdGlvbiBwYWRTcGxpdChudW0sIHNpemUsIGdyb3VwKSB7XG4gIHZhciBzdHIgPSBudW0udG9TdHJpbmcoMik7XG4gIHdoaWxlIChzdHIubGVuZ3RoIDwgc2l6ZSlcbiAgICBzdHIgPSAnMCcgKyBzdHI7XG5cbiAgdmFyIG91dCA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkgKz0gZ3JvdXApXG4gICAgb3V0LnB1c2goc3RyLnNsaWNlKGksIGkgKyBncm91cCkpO1xuICByZXR1cm4gb3V0LmpvaW4oJyAnKTtcbn07XG4iLCJ2YXIgZ2VuZXJhdGVQcmltZSA9IHJlcXVpcmUoJy4vbGliL2dlbmVyYXRlUHJpbWUnKVxudmFyIHByaW1lcyA9IHJlcXVpcmUoJy4vbGliL3ByaW1lcy5qc29uJylcblxudmFyIERIID0gcmVxdWlyZSgnLi9saWIvZGgnKVxuXG5mdW5jdGlvbiBnZXREaWZmaWVIZWxsbWFuIChtb2QpIHtcbiAgdmFyIHByaW1lID0gbmV3IEJ1ZmZlcihwcmltZXNbbW9kXS5wcmltZSwgJ2hleCcpXG4gIHZhciBnZW4gPSBuZXcgQnVmZmVyKHByaW1lc1ttb2RdLmdlbiwgJ2hleCcpXG5cbiAgcmV0dXJuIG5ldyBESChwcmltZSwgZ2VuKVxufVxuXG52YXIgRU5DT0RJTkdTID0ge1xuICAnYmluYXJ5JzogdHJ1ZSwgJ2hleCc6IHRydWUsICdiYXNlNjQnOiB0cnVlXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURpZmZpZUhlbGxtYW4gKHByaW1lLCBlbmMsIGdlbmVyYXRvciwgZ2VuYykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGVuYykgfHwgRU5DT0RJTkdTW2VuY10gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjcmVhdGVEaWZmaWVIZWxsbWFuKHByaW1lLCAnYmluYXJ5JywgZW5jLCBnZW5lcmF0b3IpXG4gIH1cblxuICBlbmMgPSBlbmMgfHwgJ2JpbmFyeSdcbiAgZ2VuYyA9IGdlbmMgfHwgJ2JpbmFyeSdcbiAgZ2VuZXJhdG9yID0gZ2VuZXJhdG9yIHx8IG5ldyBCdWZmZXIoWzJdKVxuXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGdlbmVyYXRvcikpIHtcbiAgICBnZW5lcmF0b3IgPSBuZXcgQnVmZmVyKGdlbmVyYXRvciwgZ2VuYylcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJpbWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIG5ldyBESChnZW5lcmF0ZVByaW1lKHByaW1lLCBnZW5lcmF0b3IpLCBnZW5lcmF0b3IsIHRydWUpXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihwcmltZSkpIHtcbiAgICBwcmltZSA9IG5ldyBCdWZmZXIocHJpbWUsIGVuYylcbiAgfVxuXG4gIHJldHVybiBuZXcgREgocHJpbWUsIGdlbmVyYXRvciwgdHJ1ZSlcbn1cblxuZXhwb3J0cy5EaWZmaWVIZWxsbWFuR3JvdXAgPSBleHBvcnRzLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCA9IGV4cG9ydHMuZ2V0RGlmZmllSGVsbG1hbiA9IGdldERpZmZpZUhlbGxtYW5cbmV4cG9ydHMuY3JlYXRlRGlmZmllSGVsbG1hbiA9IGV4cG9ydHMuRGlmZmllSGVsbG1hbiA9IGNyZWF0ZURpZmZpZUhlbGxtYW5cbiIsInZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgTWlsbGVyUmFiaW4gPSByZXF1aXJlKCdtaWxsZXItcmFiaW4nKTtcbnZhciBtaWxsZXJSYWJpbiA9IG5ldyBNaWxsZXJSYWJpbigpO1xudmFyIFRXRU5UWUZPVVIgPSBuZXcgQk4oMjQpO1xudmFyIEVMRVZFTiA9IG5ldyBCTigxMSk7XG52YXIgVEVOID0gbmV3IEJOKDEwKTtcbnZhciBUSFJFRSA9IG5ldyBCTigzKTtcbnZhciBTRVZFTiA9IG5ldyBCTig3KTtcbnZhciBwcmltZXMgPSByZXF1aXJlKCcuL2dlbmVyYXRlUHJpbWUnKTtcbnZhciByYW5kb21CeXRlcyA9IHJlcXVpcmUoJ3JhbmRvbWJ5dGVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IERIO1xuXG5mdW5jdGlvbiBzZXRQdWJsaWNLZXkocHViLCBlbmMpIHtcbiAgZW5jID0gZW5jIHx8ICd1dGY4JztcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIocHViKSkge1xuICAgIHB1YiA9IG5ldyBCdWZmZXIocHViLCBlbmMpO1xuICB9XG4gIHRoaXMuX3B1YiA9IG5ldyBCTihwdWIpO1xuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gc2V0UHJpdmF0ZUtleShwcml2LCBlbmMpIHtcbiAgZW5jID0gZW5jIHx8ICd1dGY4JztcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIocHJpdikpIHtcbiAgICBwcml2ID0gbmV3IEJ1ZmZlcihwcml2LCBlbmMpO1xuICB9XG4gIHRoaXMuX3ByaXYgPSBuZXcgQk4ocHJpdik7XG4gIHJldHVybiB0aGlzO1xufVxuXG52YXIgcHJpbWVDYWNoZSA9IHt9O1xuZnVuY3Rpb24gY2hlY2tQcmltZShwcmltZSwgZ2VuZXJhdG9yKSB7XG4gIHZhciBnZW4gPSBnZW5lcmF0b3IudG9TdHJpbmcoJ2hleCcpO1xuICB2YXIgaGV4ID0gW2dlbiwgcHJpbWUudG9TdHJpbmcoMTYpXS5qb2luKCdfJyk7XG4gIGlmIChoZXggaW4gcHJpbWVDYWNoZSkge1xuICAgIHJldHVybiBwcmltZUNhY2hlW2hleF07XG4gIH1cbiAgdmFyIGVycm9yID0gMDtcblxuICBpZiAocHJpbWUuaXNFdmVuKCkgfHxcbiAgICAhcHJpbWVzLnNpbXBsZVNpZXZlIHx8XG4gICAgIXByaW1lcy5mZXJtYXRUZXN0KHByaW1lKSB8fFxuICAgICFtaWxsZXJSYWJpbi50ZXN0KHByaW1lKSkge1xuICAgIC8vbm90IGEgcHJpbWUgc28gKzFcbiAgICBlcnJvciArPSAxO1xuXG4gICAgaWYgKGdlbiA9PT0gJzAyJyB8fCBnZW4gPT09ICcwNScpIHtcbiAgICAgIC8vIHdlJ2QgYmUgYWJsZSB0byBjaGVjayB0aGUgZ2VuZXJhdG9yXG4gICAgICAvLyBpdCB3b3VsZCBmYWlsIHNvICs4XG4gICAgICBlcnJvciArPSA4O1xuICAgIH0gZWxzZSB7XG4gICAgICAvL3dlIHdvdWxkbid0IGJlIGFibGUgdG8gdGVzdCB0aGUgZ2VuZXJhdG9yXG4gICAgICAvLyBzbyArNFxuICAgICAgZXJyb3IgKz0gNDtcbiAgICB9XG4gICAgcHJpbWVDYWNoZVtoZXhdID0gZXJyb3I7XG4gICAgcmV0dXJuIGVycm9yO1xuICB9XG4gIGlmICghbWlsbGVyUmFiaW4udGVzdChwcmltZS5zaHJuKDEpKSkge1xuICAgIC8vbm90IGEgc2FmZSBwcmltZVxuICAgIGVycm9yICs9IDI7XG4gIH1cbiAgdmFyIHJlbTtcbiAgc3dpdGNoIChnZW4pIHtcbiAgICBjYXNlICcwMic6XG4gICAgICBpZiAocHJpbWUubW9kKFRXRU5UWUZPVVIpLmNtcChFTEVWRU4pKSB7XG4gICAgICAgIC8vIHVuc3VpZGFibGUgZ2VuZXJhdG9yXG4gICAgICAgIGVycm9yICs9IDg7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICcwNSc6XG4gICAgICByZW0gPSBwcmltZS5tb2QoVEVOKTtcbiAgICAgIGlmIChyZW0uY21wKFRIUkVFKSAmJiByZW0uY21wKFNFVkVOKSkge1xuICAgICAgICAvLyBwcmltZSBtb2QgMTAgbmVlZHMgdG8gZXF1YWwgMyBvciA3XG4gICAgICAgIGVycm9yICs9IDg7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgZXJyb3IgKz0gNDtcbiAgfVxuICBwcmltZUNhY2hlW2hleF0gPSBlcnJvcjtcbiAgcmV0dXJuIGVycm9yO1xufVxuXG5mdW5jdGlvbiBESChwcmltZSwgZ2VuZXJhdG9yLCBtYWxsZWFibGUpIHtcbiAgdGhpcy5zZXRHZW5lcmF0b3IoZ2VuZXJhdG9yKTtcbiAgdGhpcy5fX3ByaW1lID0gbmV3IEJOKHByaW1lKTtcbiAgdGhpcy5fcHJpbWUgPSBCTi5tb250KHRoaXMuX19wcmltZSk7XG4gIHRoaXMuX3ByaW1lTGVuID0gcHJpbWUubGVuZ3RoO1xuICB0aGlzLl9wdWIgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX3ByaXYgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX3ByaW1lQ29kZSA9IHVuZGVmaW5lZDtcbiAgaWYgKG1hbGxlYWJsZSkge1xuICAgIHRoaXMuc2V0UHVibGljS2V5ID0gc2V0UHVibGljS2V5O1xuICAgIHRoaXMuc2V0UHJpdmF0ZUtleSA9IHNldFByaXZhdGVLZXk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fcHJpbWVDb2RlID0gODtcbiAgfVxufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERILnByb3RvdHlwZSwgJ3ZlcmlmeUVycm9yJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX3ByaW1lQ29kZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMuX3ByaW1lQ29kZSA9IGNoZWNrUHJpbWUodGhpcy5fX3ByaW1lLCB0aGlzLl9fZ2VuKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3ByaW1lQ29kZTtcbiAgfVxufSk7XG5ESC5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMuX3ByaXYpIHtcbiAgICB0aGlzLl9wcml2ID0gbmV3IEJOKHJhbmRvbUJ5dGVzKHRoaXMuX3ByaW1lTGVuKSk7XG4gIH1cbiAgdGhpcy5fcHViID0gdGhpcy5fZ2VuLnRvUmVkKHRoaXMuX3ByaW1lKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpO1xuICByZXR1cm4gdGhpcy5nZXRQdWJsaWNLZXkoKTtcbn07XG5cbkRILnByb3RvdHlwZS5jb21wdXRlU2VjcmV0ID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gIG90aGVyID0gbmV3IEJOKG90aGVyKTtcbiAgb3RoZXIgPSBvdGhlci50b1JlZCh0aGlzLl9wcmltZSk7XG4gIHZhciBzZWNyZXQgPSBvdGhlci5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpO1xuICB2YXIgb3V0ID0gbmV3IEJ1ZmZlcihzZWNyZXQudG9BcnJheSgpKTtcbiAgdmFyIHByaW1lID0gdGhpcy5nZXRQcmltZSgpO1xuICBpZiAob3V0Lmxlbmd0aCA8IHByaW1lLmxlbmd0aCkge1xuICAgIHZhciBmcm9udCA9IG5ldyBCdWZmZXIocHJpbWUubGVuZ3RoIC0gb3V0Lmxlbmd0aCk7XG4gICAgZnJvbnQuZmlsbCgwKTtcbiAgICBvdXQgPSBCdWZmZXIuY29uY2F0KFtmcm9udCwgb3V0XSk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn07XG5cbkRILnByb3RvdHlwZS5nZXRQdWJsaWNLZXkgPSBmdW5jdGlvbiBnZXRQdWJsaWNLZXkoZW5jKSB7XG4gIHJldHVybiBmb3JtYXRSZXR1cm5WYWx1ZSh0aGlzLl9wdWIsIGVuYyk7XG59O1xuXG5ESC5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleSA9IGZ1bmN0aW9uIGdldFByaXZhdGVLZXkoZW5jKSB7XG4gIHJldHVybiBmb3JtYXRSZXR1cm5WYWx1ZSh0aGlzLl9wcml2LCBlbmMpO1xufTtcblxuREgucHJvdG90eXBlLmdldFByaW1lID0gZnVuY3Rpb24gKGVuYykge1xuICByZXR1cm4gZm9ybWF0UmV0dXJuVmFsdWUodGhpcy5fX3ByaW1lLCBlbmMpO1xufTtcblxuREgucHJvdG90eXBlLmdldEdlbmVyYXRvciA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgcmV0dXJuIGZvcm1hdFJldHVyblZhbHVlKHRoaXMuX2dlbiwgZW5jKTtcbn07XG5cbkRILnByb3RvdHlwZS5zZXRHZW5lcmF0b3IgPSBmdW5jdGlvbiAoZ2VuLCBlbmMpIHtcbiAgZW5jID0gZW5jIHx8ICd1dGY4JztcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZ2VuKSkge1xuICAgIGdlbiA9IG5ldyBCdWZmZXIoZ2VuLCBlbmMpO1xuICB9XG4gIHRoaXMuX19nZW4gPSBnZW47XG4gIHRoaXMuX2dlbiA9IG5ldyBCTihnZW4pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIGZvcm1hdFJldHVyblZhbHVlKGJuLCBlbmMpIHtcbiAgdmFyIGJ1ZiA9IG5ldyBCdWZmZXIoYm4udG9BcnJheSgpKTtcbiAgaWYgKCFlbmMpIHtcbiAgICByZXR1cm4gYnVmO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidWYudG9TdHJpbmcoZW5jKTtcbiAgfVxufVxuIiwidmFyIHJhbmRvbUJ5dGVzID0gcmVxdWlyZSgncmFuZG9tYnl0ZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZmluZFByaW1lO1xuZmluZFByaW1lLnNpbXBsZVNpZXZlID0gc2ltcGxlU2lldmU7XG5maW5kUHJpbWUuZmVybWF0VGVzdCA9IGZlcm1hdFRlc3Q7XG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIFRXRU5UWUZPVVIgPSBuZXcgQk4oMjQpO1xudmFyIE1pbGxlclJhYmluID0gcmVxdWlyZSgnbWlsbGVyLXJhYmluJyk7XG52YXIgbWlsbGVyUmFiaW4gPSBuZXcgTWlsbGVyUmFiaW4oKTtcbnZhciBPTkUgPSBuZXcgQk4oMSk7XG52YXIgVFdPID0gbmV3IEJOKDIpO1xudmFyIEZJVkUgPSBuZXcgQk4oNSk7XG52YXIgU0lYVEVFTiA9IG5ldyBCTigxNik7XG52YXIgRUlHSFQgPSBuZXcgQk4oOCk7XG52YXIgVEVOID0gbmV3IEJOKDEwKTtcbnZhciBUSFJFRSA9IG5ldyBCTigzKTtcbnZhciBTRVZFTiA9IG5ldyBCTig3KTtcbnZhciBFTEVWRU4gPSBuZXcgQk4oMTEpO1xudmFyIEZPVVIgPSBuZXcgQk4oNCk7XG52YXIgVFdFTFZFID0gbmV3IEJOKDEyKTtcbnZhciBwcmltZXMgPSBudWxsO1xuXG5mdW5jdGlvbiBfZ2V0UHJpbWVzKCkge1xuICBpZiAocHJpbWVzICE9PSBudWxsKVxuICAgIHJldHVybiBwcmltZXM7XG5cbiAgdmFyIGxpbWl0ID0gMHgxMDAwMDA7XG4gIHZhciByZXMgPSBbXTtcbiAgcmVzWzBdID0gMjtcbiAgZm9yICh2YXIgaSA9IDEsIGsgPSAzOyBrIDwgbGltaXQ7IGsgKz0gMikge1xuICAgIHZhciBzcXJ0ID0gTWF0aC5jZWlsKE1hdGguc3FydChrKSk7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBpICYmIHJlc1tqXSA8PSBzcXJ0OyBqKyspXG4gICAgICBpZiAoayAlIHJlc1tqXSA9PT0gMClcbiAgICAgICAgYnJlYWs7XG5cbiAgICBpZiAoaSAhPT0gaiAmJiByZXNbal0gPD0gc3FydClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgcmVzW2krK10gPSBrO1xuICB9XG4gIHByaW1lcyA9IHJlcztcbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gc2ltcGxlU2lldmUocCkge1xuICB2YXIgcHJpbWVzID0gX2dldFByaW1lcygpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJpbWVzLmxlbmd0aDsgaSsrKVxuICAgIGlmIChwLm1vZG4ocHJpbWVzW2ldKSA9PT0gMCkge1xuICAgICAgaWYgKHAuY21wbihwcmltZXNbaV0pID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZmVybWF0VGVzdChwKSB7XG4gIHZhciByZWQgPSBCTi5tb250KHApO1xuICByZXR1cm4gVFdPLnRvUmVkKHJlZCkucmVkUG93KHAuc3VibigxKSkuZnJvbVJlZCgpLmNtcG4oMSkgPT09IDA7XG59XG5cbmZ1bmN0aW9uIGZpbmRQcmltZShiaXRzLCBnZW4pIHtcbiAgaWYgKGJpdHMgPCAxNikge1xuICAgIC8vIHRoaXMgaXMgd2hhdCBvcGVuc3NsIGRvZXNcbiAgICBpZiAoZ2VuID09PSAyIHx8IGdlbiA9PT0gNSkge1xuICAgICAgcmV0dXJuIG5ldyBCTihbMHg4YywgMHg3Yl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IEJOKFsweDhjLCAweDI3XSk7XG4gICAgfVxuICB9XG4gIGdlbiA9IG5ldyBCTihnZW4pO1xuXG4gIHZhciBudW0sIG4yO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgbnVtID0gbmV3IEJOKHJhbmRvbUJ5dGVzKE1hdGguY2VpbChiaXRzIC8gOCkpKTtcbiAgICB3aGlsZSAobnVtLmJpdExlbmd0aCgpID4gYml0cykge1xuICAgICAgbnVtLmlzaHJuKDEpO1xuICAgIH1cbiAgICBpZiAobnVtLmlzRXZlbigpKSB7XG4gICAgICBudW0uaWFkZChPTkUpO1xuICAgIH1cbiAgICBpZiAoIW51bS50ZXN0bigxKSkge1xuICAgICAgbnVtLmlhZGQoVFdPKTtcbiAgICB9XG4gICAgaWYgKCFnZW4uY21wKFRXTykpIHtcbiAgICAgIHdoaWxlIChudW0ubW9kKFRXRU5UWUZPVVIpLmNtcChFTEVWRU4pKSB7XG4gICAgICAgIG51bS5pYWRkKEZPVVIpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWdlbi5jbXAoRklWRSkpIHtcbiAgICAgIHdoaWxlIChudW0ubW9kKFRFTikuY21wKFRIUkVFKSkge1xuICAgICAgICBudW0uaWFkZChGT1VSKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbjIgPSBudW0uc2hybigxKTtcbiAgICBpZiAoc2ltcGxlU2lldmUobjIpICYmIHNpbXBsZVNpZXZlKG51bSkgJiZcbiAgICAgIGZlcm1hdFRlc3QobjIpICYmIGZlcm1hdFRlc3QobnVtKSAmJlxuICAgICAgbWlsbGVyUmFiaW4udGVzdChuMikgJiYgbWlsbGVyUmFiaW4udGVzdChudW0pKSB7XG4gICAgICByZXR1cm4gbnVtO1xuICAgIH1cbiAgfVxuXG59XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gICAgXCJtb2RwMVwiOiB7XG4gICAgICAgIFwiZ2VuXCI6IFwiMDJcIixcbiAgICAgICAgXCJwcmltZVwiOiBcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2M2EzNjIwZmZmZmZmZmZmZmZmZmZmZlwiXG4gICAgfSxcbiAgICBcIm1vZHAyXCI6IHtcbiAgICAgICAgXCJnZW5cIjogXCIwMlwiLFxuICAgICAgICBcInByaW1lXCI6IFwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTY1MzgxZmZmZmZmZmZmZmZmZmZmZlwiXG4gICAgfSxcbiAgICBcIm1vZHA1XCI6IHtcbiAgICAgICAgXCJnZW5cIjogXCIwMlwiLFxuICAgICAgICBcInByaW1lXCI6IFwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2EyMzczMjdmZmZmZmZmZmZmZmZmZmZmXCJcbiAgICB9LFxuICAgIFwibW9kcDE0XCI6IHtcbiAgICAgICAgXCJnZW5cIjogXCIwMlwiLFxuICAgICAgICBcInByaW1lXCI6IFwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFjYWE2OGZmZmZmZmZmZmZmZmZmZmZcIlxuICAgIH0sXG4gICAgXCJtb2RwMTVcIjoge1xuICAgICAgICBcImdlblwiOiBcIjAyXCIsXG4gICAgICAgIFwicHJpbWVcIjogXCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTNhZDJjYWZmZmZmZmZmZmZmZmZmZmZcIlxuICAgIH0sXG4gICAgXCJtb2RwMTZcIjoge1xuICAgICAgICBcImdlblwiOiBcIjAyXCIsXG4gICAgICAgIFwicHJpbWVcIjogXCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwNjMxOTlmZmZmZmZmZmZmZmZmZmZmXCJcbiAgICB9LFxuICAgIFwibW9kcDE3XCI6IHtcbiAgICAgICAgXCJnZW5cIjogXCIwMlwiLFxuICAgICAgICBcInByaW1lXCI6IFwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRjYzQwMjRmZmZmZmZmZmZmZmZmZmZmXCJcbiAgICB9LFxuICAgIFwibW9kcDE4XCI6IHtcbiAgICAgICAgXCJnZW5cIjogXCIwMlwiLFxuICAgICAgICBcInByaW1lXCI6IFwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRiZTExNTk3NGEzOTI2ZjEyZmVlNWU0Mzg3NzdjYjZhOTMyZGY4Y2Q4YmVjNGQwNzNiOTMxYmEzYmM4MzJiNjhkOWRkMzAwNzQxZmE3YmY4YWZjNDdlZDI1NzZmNjkzNmJhNDI0NjYzYWFiNjM5YzVhZTRmNTY4MzQyM2I0NzQyYmYxYzk3ODIzOGYxNmNiZTM5ZDY1MmRlM2ZkYjhiZWZjODQ4YWQ5MjIyMjJlMDRhNDAzN2MwNzEzZWI1N2E4MWEyM2YwYzczNDczZmM2NDZjZWEzMDZiNGJjYmM4ODYyZjgzODVkZGZhOWQ0YjdmYTJjMDg3ZTg3OTY4MzMwM2VkNWJkZDNhMDYyYjNjZjViM2EyNzhhNjZkMmExM2Y4M2Y0NGY4MmRkZjMxMGVlMDc0YWI2YTM2NDU5N2U4OTlhMDI1NWRjMTY0ZjMxY2M1MDg0Njg1MWRmOWFiNDgxOTVkZWQ3ZWExYjFkNTEwYmQ3ZWU3NGQ3M2ZhZjM2YmMzMWVjZmEyNjgzNTkwNDZmNGViODc5ZjkyNDAwOTQzOGI0ODFjNmNkNzg4OWEwMDJlZDVlZTM4MmJjOTE5MGRhNmZjMDI2ZTQ3OTU1OGU0NDc1Njc3ZTlhYTllMzA1MGUyNzY1Njk0ZGZjODFmNTZlODgwYjk2ZTcxNjBjOTgwZGQ5OGVkZDNkZmZmZmZmZmZmZmZmZmZmZmZcIlxuICAgIH1cbn0iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlbGxpcHRpYyA9IGV4cG9ydHM7XG5cbmVsbGlwdGljLnZlcnNpb24gPSByZXF1aXJlKCcuLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuZWxsaXB0aWMudXRpbHMgPSByZXF1aXJlKCcuL2VsbGlwdGljL3V0aWxzJyk7XG5lbGxpcHRpYy5yYW5kID0gcmVxdWlyZSgnYnJvcmFuZCcpO1xuZWxsaXB0aWMuY3VydmUgPSByZXF1aXJlKCcuL2VsbGlwdGljL2N1cnZlJyk7XG5lbGxpcHRpYy5jdXJ2ZXMgPSByZXF1aXJlKCcuL2VsbGlwdGljL2N1cnZlcycpO1xuXG4vLyBQcm90b2NvbHNcbmVsbGlwdGljLmVjID0gcmVxdWlyZSgnLi9lbGxpcHRpYy9lYycpO1xuZWxsaXB0aWMuZWRkc2EgPSByZXF1aXJlKCcuL2VsbGlwdGljL2VkZHNhJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG52YXIgZ2V0TkFGID0gdXRpbHMuZ2V0TkFGO1xudmFyIGdldEpTRiA9IHV0aWxzLmdldEpTRjtcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG5cbmZ1bmN0aW9uIEJhc2VDdXJ2ZSh0eXBlLCBjb25mKSB7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMucCA9IG5ldyBCTihjb25mLnAsIDE2KTtcblxuICAvLyBVc2UgTW9udGdvbWVyeSwgd2hlbiB0aGVyZSBpcyBubyBmYXN0IHJlZHVjdGlvbiBmb3IgdGhlIHByaW1lXG4gIHRoaXMucmVkID0gY29uZi5wcmltZSA/IEJOLnJlZChjb25mLnByaW1lKSA6IEJOLm1vbnQodGhpcy5wKTtcblxuICAvLyBVc2VmdWwgZm9yIG1hbnkgY3VydmVzXG4gIHRoaXMuemVybyA9IG5ldyBCTigwKS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMub25lID0gbmV3IEJOKDEpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy50d28gPSBuZXcgQk4oMikudG9SZWQodGhpcy5yZWQpO1xuXG4gIC8vIEN1cnZlIGNvbmZpZ3VyYXRpb24sIG9wdGlvbmFsXG4gIHRoaXMubiA9IGNvbmYubiAmJiBuZXcgQk4oY29uZi5uLCAxNik7XG4gIHRoaXMuZyA9IGNvbmYuZyAmJiB0aGlzLnBvaW50RnJvbUpTT04oY29uZi5nLCBjb25mLmdSZWQpO1xuXG4gIC8vIFRlbXBvcmFyeSBhcnJheXNcbiAgdGhpcy5fd25hZlQxID0gbmV3IEFycmF5KDQpO1xuICB0aGlzLl93bmFmVDIgPSBuZXcgQXJyYXkoNCk7XG4gIHRoaXMuX3duYWZUMyA9IG5ldyBBcnJheSg0KTtcbiAgdGhpcy5fd25hZlQ0ID0gbmV3IEFycmF5KDQpO1xuXG4gIC8vIEdlbmVyYWxpemVkIEdyZWcgTWF4d2VsbCdzIHRyaWNrXG4gIHZhciBhZGp1c3RDb3VudCA9IHRoaXMubiAmJiB0aGlzLnAuZGl2KHRoaXMubik7XG4gIGlmICghYWRqdXN0Q291bnQgfHwgYWRqdXN0Q291bnQuY21wbigxMDApID4gMCkge1xuICAgIHRoaXMucmVkTiA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fbWF4d2VsbFRyaWNrID0gdHJ1ZTtcbiAgICB0aGlzLnJlZE4gPSB0aGlzLm4udG9SZWQodGhpcy5yZWQpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VDdXJ2ZTtcblxuQmFzZUN1cnZlLnByb3RvdHlwZS5wb2ludCA9IGZ1bmN0aW9uIHBvaW50KCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xufTtcblxuQmFzZUN1cnZlLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xufTtcblxuQmFzZUN1cnZlLnByb3RvdHlwZS5fZml4ZWROYWZNdWwgPSBmdW5jdGlvbiBfZml4ZWROYWZNdWwocCwgaykge1xuICBhc3NlcnQocC5wcmVjb21wdXRlZCk7XG4gIHZhciBkb3VibGVzID0gcC5fZ2V0RG91YmxlcygpO1xuXG4gIHZhciBuYWYgPSBnZXROQUYoaywgMSk7XG4gIHZhciBJID0gKDEgPDwgKGRvdWJsZXMuc3RlcCArIDEpKSAtIChkb3VibGVzLnN0ZXAgJSAyID09PSAwID8gMiA6IDEpO1xuICBJIC89IDM7XG5cbiAgLy8gVHJhbnNsYXRlIGludG8gbW9yZSB3aW5kb3dlZCBmb3JtXG4gIHZhciByZXByID0gW107XG4gIGZvciAodmFyIGogPSAwOyBqIDwgbmFmLmxlbmd0aDsgaiArPSBkb3VibGVzLnN0ZXApIHtcbiAgICB2YXIgbmFmVyA9IDA7XG4gICAgZm9yICh2YXIgayA9IGogKyBkb3VibGVzLnN0ZXAgLSAxOyBrID49IGo7IGstLSlcbiAgICAgIG5hZlcgPSAobmFmVyA8PCAxKSArIG5hZltrXTtcbiAgICByZXByLnB1c2gobmFmVyk7XG4gIH1cblxuICB2YXIgYSA9IHRoaXMuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuICB2YXIgYiA9IHRoaXMuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuICBmb3IgKHZhciBpID0gSTsgaSA+IDA7IGktLSkge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmVwci5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIG5hZlcgPSByZXByW2pdO1xuICAgICAgaWYgKG5hZlcgPT09IGkpXG4gICAgICAgIGIgPSBiLm1peGVkQWRkKGRvdWJsZXMucG9pbnRzW2pdKTtcbiAgICAgIGVsc2UgaWYgKG5hZlcgPT09IC1pKVxuICAgICAgICBiID0gYi5taXhlZEFkZChkb3VibGVzLnBvaW50c1tqXS5uZWcoKSk7XG4gICAgfVxuICAgIGEgPSBhLmFkZChiKTtcbiAgfVxuICByZXR1cm4gYS50b1AoKTtcbn07XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUuX3duYWZNdWwgPSBmdW5jdGlvbiBfd25hZk11bChwLCBrKSB7XG4gIHZhciB3ID0gNDtcblxuICAvLyBQcmVjb21wdXRlIHdpbmRvd1xuICB2YXIgbmFmUG9pbnRzID0gcC5fZ2V0TkFGUG9pbnRzKHcpO1xuICB3ID0gbmFmUG9pbnRzLnduZDtcbiAgdmFyIHduZCA9IG5hZlBvaW50cy5wb2ludHM7XG5cbiAgLy8gR2V0IE5BRiBmb3JtXG4gIHZhciBuYWYgPSBnZXROQUYoaywgdyk7XG5cbiAgLy8gQWRkIGB0aGlzYCooTisxKSBmb3IgZXZlcnkgdy1OQUYgaW5kZXhcbiAgdmFyIGFjYyA9IHRoaXMuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuICBmb3IgKHZhciBpID0gbmFmLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgLy8gQ291bnQgemVyb2VzXG4gICAgZm9yICh2YXIgayA9IDA7IGkgPj0gMCAmJiBuYWZbaV0gPT09IDA7IGktLSlcbiAgICAgIGsrKztcbiAgICBpZiAoaSA+PSAwKVxuICAgICAgaysrO1xuICAgIGFjYyA9IGFjYy5kYmxwKGspO1xuXG4gICAgaWYgKGkgPCAwKVxuICAgICAgYnJlYWs7XG4gICAgdmFyIHogPSBuYWZbaV07XG4gICAgYXNzZXJ0KHogIT09IDApO1xuICAgIGlmIChwLnR5cGUgPT09ICdhZmZpbmUnKSB7XG4gICAgICAvLyBKICstIFBcbiAgICAgIGlmICh6ID4gMClcbiAgICAgICAgYWNjID0gYWNjLm1peGVkQWRkKHduZFsoeiAtIDEpID4+IDFdKTtcbiAgICAgIGVsc2VcbiAgICAgICAgYWNjID0gYWNjLm1peGVkQWRkKHduZFsoLXogLSAxKSA+PiAxXS5uZWcoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEogKy0gSlxuICAgICAgaWYgKHogPiAwKVxuICAgICAgICBhY2MgPSBhY2MuYWRkKHduZFsoeiAtIDEpID4+IDFdKTtcbiAgICAgIGVsc2VcbiAgICAgICAgYWNjID0gYWNjLmFkZCh3bmRbKC16IC0gMSkgPj4gMV0ubmVnKCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcC50eXBlID09PSAnYWZmaW5lJyA/IGFjYy50b1AoKSA6IGFjYztcbn07XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUuX3duYWZNdWxBZGQgPSBmdW5jdGlvbiBfd25hZk11bEFkZChkZWZXLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2VmZnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphY29iaWFuUmVzdWx0KSB7XG4gIHZhciB3bmRXaWR0aCA9IHRoaXMuX3duYWZUMTtcbiAgdmFyIHduZCA9IHRoaXMuX3duYWZUMjtcbiAgdmFyIG5hZiA9IHRoaXMuX3duYWZUMztcblxuICAvLyBGaWxsIGFsbCBhcnJheXNcbiAgdmFyIG1heCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgcCA9IHBvaW50c1tpXTtcbiAgICB2YXIgbmFmUG9pbnRzID0gcC5fZ2V0TkFGUG9pbnRzKGRlZlcpO1xuICAgIHduZFdpZHRoW2ldID0gbmFmUG9pbnRzLnduZDtcbiAgICB3bmRbaV0gPSBuYWZQb2ludHMucG9pbnRzO1xuICB9XG5cbiAgLy8gQ29tYiBzbWFsbCB3aW5kb3cgTkFGc1xuICBmb3IgKHZhciBpID0gbGVuIC0gMTsgaSA+PSAxOyBpIC09IDIpIHtcbiAgICB2YXIgYSA9IGkgLSAxO1xuICAgIHZhciBiID0gaTtcbiAgICBpZiAod25kV2lkdGhbYV0gIT09IDEgfHwgd25kV2lkdGhbYl0gIT09IDEpIHtcbiAgICAgIG5hZlthXSA9IGdldE5BRihjb2VmZnNbYV0sIHduZFdpZHRoW2FdKTtcbiAgICAgIG5hZltiXSA9IGdldE5BRihjb2VmZnNbYl0sIHduZFdpZHRoW2JdKTtcbiAgICAgIG1heCA9IE1hdGgubWF4KG5hZlthXS5sZW5ndGgsIG1heCk7XG4gICAgICBtYXggPSBNYXRoLm1heChuYWZbYl0ubGVuZ3RoLCBtYXgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIGNvbWIgPSBbXG4gICAgICBwb2ludHNbYV0sIC8qIDEgKi9cbiAgICAgIG51bGwsIC8qIDMgKi9cbiAgICAgIG51bGwsIC8qIDUgKi9cbiAgICAgIHBvaW50c1tiXSAvKiA3ICovXG4gICAgXTtcblxuICAgIC8vIFRyeSB0byBhdm9pZCBQcm9qZWN0aXZlIHBvaW50cywgaWYgcG9zc2libGVcbiAgICBpZiAocG9pbnRzW2FdLnkuY21wKHBvaW50c1tiXS55KSA9PT0gMCkge1xuICAgICAgY29tYlsxXSA9IHBvaW50c1thXS5hZGQocG9pbnRzW2JdKTtcbiAgICAgIGNvbWJbMl0gPSBwb2ludHNbYV0udG9KKCkubWl4ZWRBZGQocG9pbnRzW2JdLm5lZygpKTtcbiAgICB9IGVsc2UgaWYgKHBvaW50c1thXS55LmNtcChwb2ludHNbYl0ueS5yZWROZWcoKSkgPT09IDApIHtcbiAgICAgIGNvbWJbMV0gPSBwb2ludHNbYV0udG9KKCkubWl4ZWRBZGQocG9pbnRzW2JdKTtcbiAgICAgIGNvbWJbMl0gPSBwb2ludHNbYV0uYWRkKHBvaW50c1tiXS5uZWcoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbWJbMV0gPSBwb2ludHNbYV0udG9KKCkubWl4ZWRBZGQocG9pbnRzW2JdKTtcbiAgICAgIGNvbWJbMl0gPSBwb2ludHNbYV0udG9KKCkubWl4ZWRBZGQocG9pbnRzW2JdLm5lZygpKTtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXggPSBbXG4gICAgICAtMywgLyogLTEgLTEgKi9cbiAgICAgIC0xLCAvKiAtMSAwICovXG4gICAgICAtNSwgLyogLTEgMSAqL1xuICAgICAgLTcsIC8qIDAgLTEgKi9cbiAgICAgIDAsIC8qIDAgMCAqL1xuICAgICAgNywgLyogMCAxICovXG4gICAgICA1LCAvKiAxIC0xICovXG4gICAgICAxLCAvKiAxIDAgKi9cbiAgICAgIDMgIC8qIDEgMSAqL1xuICAgIF07XG5cbiAgICB2YXIganNmID0gZ2V0SlNGKGNvZWZmc1thXSwgY29lZmZzW2JdKTtcbiAgICBtYXggPSBNYXRoLm1heChqc2ZbMF0ubGVuZ3RoLCBtYXgpO1xuICAgIG5hZlthXSA9IG5ldyBBcnJheShtYXgpO1xuICAgIG5hZltiXSA9IG5ldyBBcnJheShtYXgpO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWF4OyBqKyspIHtcbiAgICAgIHZhciBqYSA9IGpzZlswXVtqXSB8IDA7XG4gICAgICB2YXIgamIgPSBqc2ZbMV1bal0gfCAwO1xuXG4gICAgICBuYWZbYV1bal0gPSBpbmRleFsoamEgKyAxKSAqIDMgKyAoamIgKyAxKV07XG4gICAgICBuYWZbYl1bal0gPSAwO1xuICAgICAgd25kW2FdID0gY29tYjtcbiAgICB9XG4gIH1cblxuICB2YXIgYWNjID0gdGhpcy5qcG9pbnQobnVsbCwgbnVsbCwgbnVsbCk7XG4gIHZhciB0bXAgPSB0aGlzLl93bmFmVDQ7XG4gIGZvciAodmFyIGkgPSBtYXg7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGsgPSAwO1xuXG4gICAgd2hpbGUgKGkgPj0gMCkge1xuICAgICAgdmFyIHplcm8gPSB0cnVlO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW47IGorKykge1xuICAgICAgICB0bXBbal0gPSBuYWZbal1baV0gfCAwO1xuICAgICAgICBpZiAodG1wW2pdICE9PSAwKVxuICAgICAgICAgIHplcm8gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghemVybylcbiAgICAgICAgYnJlYWs7XG4gICAgICBrKys7XG4gICAgICBpLS07XG4gICAgfVxuICAgIGlmIChpID49IDApXG4gICAgICBrKys7XG4gICAgYWNjID0gYWNjLmRibHAoayk7XG4gICAgaWYgKGkgPCAwKVxuICAgICAgYnJlYWs7XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICB2YXIgeiA9IHRtcFtqXTtcbiAgICAgIHZhciBwO1xuICAgICAgaWYgKHogPT09IDApXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgZWxzZSBpZiAoeiA+IDApXG4gICAgICAgIHAgPSB3bmRbal1bKHogLSAxKSA+PiAxXTtcbiAgICAgIGVsc2UgaWYgKHogPCAwKVxuICAgICAgICBwID0gd25kW2pdWygteiAtIDEpID4+IDFdLm5lZygpO1xuXG4gICAgICBpZiAocC50eXBlID09PSAnYWZmaW5lJylcbiAgICAgICAgYWNjID0gYWNjLm1peGVkQWRkKHApO1xuICAgICAgZWxzZVxuICAgICAgICBhY2MgPSBhY2MuYWRkKHApO1xuICAgIH1cbiAgfVxuICAvLyBaZXJvaWZ5IHJlZmVyZW5jZXNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB3bmRbaV0gPSBudWxsO1xuXG4gIGlmIChqYWNvYmlhblJlc3VsdClcbiAgICByZXR1cm4gYWNjO1xuICBlbHNlXG4gICAgcmV0dXJuIGFjYy50b1AoKTtcbn07XG5cbmZ1bmN0aW9uIEJhc2VQb2ludChjdXJ2ZSwgdHlwZSkge1xuICB0aGlzLmN1cnZlID0gY3VydmU7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMucHJlY29tcHV0ZWQgPSBudWxsO1xufVxuQmFzZUN1cnZlLkJhc2VQb2ludCA9IEJhc2VQb2ludDtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5lcSA9IGZ1bmN0aW9uIGVxKC8qb3RoZXIqLykge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKCkge1xuICByZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKTtcbn07XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUuZGVjb2RlUG9pbnQgPSBmdW5jdGlvbiBkZWNvZGVQb2ludChieXRlcywgZW5jKSB7XG4gIGJ5dGVzID0gdXRpbHMudG9BcnJheShieXRlcywgZW5jKTtcblxuICB2YXIgbGVuID0gdGhpcy5wLmJ5dGVMZW5ndGgoKTtcblxuICAvLyB1bmNvbXByZXNzZWQsIGh5YnJpZC1vZGQsIGh5YnJpZC1ldmVuXG4gIGlmICgoYnl0ZXNbMF0gPT09IDB4MDQgfHwgYnl0ZXNbMF0gPT09IDB4MDYgfHwgYnl0ZXNbMF0gPT09IDB4MDcpICYmXG4gICAgICBieXRlcy5sZW5ndGggLSAxID09PSAyICogbGVuKSB7XG4gICAgaWYgKGJ5dGVzWzBdID09PSAweDA2KVxuICAgICAgYXNzZXJ0KGJ5dGVzW2J5dGVzLmxlbmd0aCAtIDFdICUgMiA9PT0gMCk7XG4gICAgZWxzZSBpZiAoYnl0ZXNbMF0gPT09IDB4MDcpXG4gICAgICBhc3NlcnQoYnl0ZXNbYnl0ZXMubGVuZ3RoIC0gMV0gJSAyID09PSAxKTtcblxuICAgIHZhciByZXMgPSAgdGhpcy5wb2ludChieXRlcy5zbGljZSgxLCAxICsgbGVuKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMuc2xpY2UoMSArIGxlbiwgMSArIDIgKiBsZW4pKTtcblxuICAgIHJldHVybiByZXM7XG4gIH0gZWxzZSBpZiAoKGJ5dGVzWzBdID09PSAweDAyIHx8IGJ5dGVzWzBdID09PSAweDAzKSAmJlxuICAgICAgICAgICAgICBieXRlcy5sZW5ndGggLSAxID09PSBsZW4pIHtcbiAgICByZXR1cm4gdGhpcy5wb2ludEZyb21YKGJ5dGVzLnNsaWNlKDEsIDEgKyBsZW4pLCBieXRlc1swXSA9PT0gMHgwMyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHBvaW50IGZvcm1hdCcpO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkID0gZnVuY3Rpb24gZW5jb2RlQ29tcHJlc3NlZChlbmMpIHtcbiAgcmV0dXJuIHRoaXMuZW5jb2RlKGVuYywgdHJ1ZSk7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLl9lbmNvZGUgPSBmdW5jdGlvbiBfZW5jb2RlKGNvbXBhY3QpIHtcbiAgdmFyIGxlbiA9IHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCk7XG4gIHZhciB4ID0gdGhpcy5nZXRYKCkudG9BcnJheSgnYmUnLCBsZW4pO1xuXG4gIGlmIChjb21wYWN0KVxuICAgIHJldHVybiBbIHRoaXMuZ2V0WSgpLmlzRXZlbigpID8gMHgwMiA6IDB4MDMgXS5jb25jYXQoeCk7XG5cbiAgcmV0dXJuIFsgMHgwNCBdLmNvbmNhdCh4LCB0aGlzLmdldFkoKS50b0FycmF5KCdiZScsIGxlbikpIDtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKGVuYywgY29tcGFjdCkge1xuICByZXR1cm4gdXRpbHMuZW5jb2RlKHRoaXMuX2VuY29kZShjb21wYWN0KSwgZW5jKTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUucHJlY29tcHV0ZSA9IGZ1bmN0aW9uIHByZWNvbXB1dGUocG93ZXIpIHtcbiAgaWYgKHRoaXMucHJlY29tcHV0ZWQpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIHByZWNvbXB1dGVkID0ge1xuICAgIGRvdWJsZXM6IG51bGwsXG4gICAgbmFmOiBudWxsLFxuICAgIGJldGE6IG51bGxcbiAgfTtcbiAgcHJlY29tcHV0ZWQubmFmID0gdGhpcy5fZ2V0TkFGUG9pbnRzKDgpO1xuICBwcmVjb21wdXRlZC5kb3VibGVzID0gdGhpcy5fZ2V0RG91Ymxlcyg0LCBwb3dlcik7XG4gIHByZWNvbXB1dGVkLmJldGEgPSB0aGlzLl9nZXRCZXRhKCk7XG4gIHRoaXMucHJlY29tcHV0ZWQgPSBwcmVjb21wdXRlZDtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuX2hhc0RvdWJsZXMgPSBmdW5jdGlvbiBfaGFzRG91YmxlcyhrKSB7XG4gIGlmICghdGhpcy5wcmVjb21wdXRlZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGRvdWJsZXMgPSB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7XG4gIGlmICghZG91YmxlcylcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgcmV0dXJuIGRvdWJsZXMucG9pbnRzLmxlbmd0aCA+PSBNYXRoLmNlaWwoKGsuYml0TGVuZ3RoKCkgKyAxKSAvIGRvdWJsZXMuc3RlcCk7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLl9nZXREb3VibGVzID0gZnVuY3Rpb24gX2dldERvdWJsZXMoc3RlcCwgcG93ZXIpIHtcbiAgaWYgKHRoaXMucHJlY29tcHV0ZWQgJiYgdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzKVxuICAgIHJldHVybiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7XG5cbiAgdmFyIGRvdWJsZXMgPSBbIHRoaXMgXTtcbiAgdmFyIGFjYyA9IHRoaXM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcG93ZXI7IGkgKz0gc3RlcCkge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3RlcDsgaisrKVxuICAgICAgYWNjID0gYWNjLmRibCgpO1xuICAgIGRvdWJsZXMucHVzaChhY2MpO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RlcDogc3RlcCxcbiAgICBwb2ludHM6IGRvdWJsZXNcbiAgfTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuX2dldE5BRlBvaW50cyA9IGZ1bmN0aW9uIF9nZXROQUZQb2ludHMod25kKSB7XG4gIGlmICh0aGlzLnByZWNvbXB1dGVkICYmIHRoaXMucHJlY29tcHV0ZWQubmFmKVxuICAgIHJldHVybiB0aGlzLnByZWNvbXB1dGVkLm5hZjtcblxuICB2YXIgcmVzID0gWyB0aGlzIF07XG4gIHZhciBtYXggPSAoMSA8PCB3bmQpIC0gMTtcbiAgdmFyIGRibCA9IG1heCA9PT0gMSA/IG51bGwgOiB0aGlzLmRibCgpO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IG1heDsgaSsrKVxuICAgIHJlc1tpXSA9IHJlc1tpIC0gMV0uYWRkKGRibCk7XG4gIHJldHVybiB7XG4gICAgd25kOiB3bmQsXG4gICAgcG9pbnRzOiByZXNcbiAgfTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuX2dldEJldGEgPSBmdW5jdGlvbiBfZ2V0QmV0YSgpIHtcbiAgcmV0dXJuIG51bGw7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLmRibHAgPSBmdW5jdGlvbiBkYmxwKGspIHtcbiAgdmFyIHIgPSB0aGlzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGs7IGkrKylcbiAgICByID0gci5kYmwoKTtcbiAgcmV0dXJuIHI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3VydmUgPSByZXF1aXJlKCcuLi9jdXJ2ZScpO1xudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xudmFyIEJhc2UgPSBjdXJ2ZS5iYXNlO1xuXG52YXIgYXNzZXJ0ID0gZWxsaXB0aWMudXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBFZHdhcmRzQ3VydmUoY29uZikge1xuICAvLyBOT1RFOiBJbXBvcnRhbnQgYXMgd2UgYXJlIGNyZWF0aW5nIHBvaW50IGluIEJhc2UuY2FsbCgpXG4gIHRoaXMudHdpc3RlZCA9IChjb25mLmEgfCAwKSAhPT0gMTtcbiAgdGhpcy5tT25lQSA9IHRoaXMudHdpc3RlZCAmJiAoY29uZi5hIHwgMCkgPT09IC0xO1xuICB0aGlzLmV4dGVuZGVkID0gdGhpcy5tT25lQTtcblxuICBCYXNlLmNhbGwodGhpcywgJ2Vkd2FyZHMnLCBjb25mKTtcblxuICB0aGlzLmEgPSBuZXcgQk4oY29uZi5hLCAxNikudW1vZCh0aGlzLnJlZC5tKTtcbiAgdGhpcy5hID0gdGhpcy5hLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy5jID0gbmV3IEJOKGNvbmYuYywgMTYpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy5jMiA9IHRoaXMuYy5yZWRTcXIoKTtcbiAgdGhpcy5kID0gbmV3IEJOKGNvbmYuZCwgMTYpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy5kZCA9IHRoaXMuZC5yZWRBZGQodGhpcy5kKTtcblxuICBhc3NlcnQoIXRoaXMudHdpc3RlZCB8fCB0aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkgPT09IDApO1xuICB0aGlzLm9uZUMgPSAoY29uZi5jIHwgMCkgPT09IDE7XG59XG5pbmhlcml0cyhFZHdhcmRzQ3VydmUsIEJhc2UpO1xubW9kdWxlLmV4cG9ydHMgPSBFZHdhcmRzQ3VydmU7XG5cbkVkd2FyZHNDdXJ2ZS5wcm90b3R5cGUuX211bEEgPSBmdW5jdGlvbiBfbXVsQShudW0pIHtcbiAgaWYgKHRoaXMubU9uZUEpXG4gICAgcmV0dXJuIG51bS5yZWROZWcoKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLmEucmVkTXVsKG51bSk7XG59O1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLl9tdWxDID0gZnVuY3Rpb24gX211bEMobnVtKSB7XG4gIGlmICh0aGlzLm9uZUMpXG4gICAgcmV0dXJuIG51bTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLmMucmVkTXVsKG51bSk7XG59O1xuXG4vLyBKdXN0IGZvciBjb21wYXRpYmlsaXR5IHdpdGggU2hvcnQgY3VydmVcbkVkd2FyZHNDdXJ2ZS5wcm90b3R5cGUuanBvaW50ID0gZnVuY3Rpb24ganBvaW50KHgsIHksIHosIHQpIHtcbiAgcmV0dXJuIHRoaXMucG9pbnQoeCwgeSwgeiwgdCk7XG59O1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLnBvaW50RnJvbVggPSBmdW5jdGlvbiBwb2ludEZyb21YKHgsIG9kZCkge1xuICB4ID0gbmV3IEJOKHgsIDE2KTtcbiAgaWYgKCF4LnJlZClcbiAgICB4ID0geC50b1JlZCh0aGlzLnJlZCk7XG5cbiAgdmFyIHgyID0geC5yZWRTcXIoKTtcbiAgdmFyIHJocyA9IHRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwoeDIpKTtcbiAgdmFyIGxocyA9IHRoaXMub25lLnJlZFN1Yih0aGlzLmMyLnJlZE11bCh0aGlzLmQpLnJlZE11bCh4MikpO1xuXG4gIHZhciB5MiA9IHJocy5yZWRNdWwobGhzLnJlZEludm0oKSk7XG4gIHZhciB5ID0geTIucmVkU3FydCgpO1xuICBpZiAoeS5yZWRTcXIoKS5yZWRTdWIoeTIpLmNtcCh0aGlzLnplcm8pICE9PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwb2ludCcpO1xuXG4gIHZhciBpc09kZCA9IHkuZnJvbVJlZCgpLmlzT2RkKCk7XG4gIGlmIChvZGQgJiYgIWlzT2RkIHx8ICFvZGQgJiYgaXNPZGQpXG4gICAgeSA9IHkucmVkTmVnKCk7XG5cbiAgcmV0dXJuIHRoaXMucG9pbnQoeCwgeSk7XG59O1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLnBvaW50RnJvbVkgPSBmdW5jdGlvbiBwb2ludEZyb21ZKHksIG9kZCkge1xuICB5ID0gbmV3IEJOKHksIDE2KTtcbiAgaWYgKCF5LnJlZClcbiAgICB5ID0geS50b1JlZCh0aGlzLnJlZCk7XG5cbiAgLy8geF4yID0gKHleMiAtIDEpIC8gKGQgeV4yICsgMSlcbiAgdmFyIHkyID0geS5yZWRTcXIoKTtcbiAgdmFyIGxocyA9IHkyLnJlZFN1Yih0aGlzLm9uZSk7XG4gIHZhciByaHMgPSB5Mi5yZWRNdWwodGhpcy5kKS5yZWRBZGQodGhpcy5vbmUpO1xuICB2YXIgeDIgPSBsaHMucmVkTXVsKHJocy5yZWRJbnZtKCkpO1xuXG4gIGlmICh4Mi5jbXAodGhpcy56ZXJvKSA9PT0gMCkge1xuICAgIGlmIChvZGQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcG9pbnQnKTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gdGhpcy5wb2ludCh0aGlzLnplcm8sIHkpO1xuICB9XG5cbiAgdmFyIHggPSB4Mi5yZWRTcXJ0KCk7XG4gIGlmICh4LnJlZFNxcigpLnJlZFN1Yih4MikuY21wKHRoaXMuemVybykgIT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBvaW50Jyk7XG5cbiAgaWYgKHguaXNPZGQoKSAhPT0gb2RkKVxuICAgIHggPSB4LnJlZE5lZygpO1xuXG4gIHJldHVybiB0aGlzLnBvaW50KHgsIHkpO1xufTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKHBvaW50KSB7XG4gIGlmIChwb2ludC5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgLy8gQ3VydmU6IEEgKiBYXjIgKyBZXjIgPSBDXjIgKiAoMSArIEQgKiBYXjIgKiBZXjIpXG4gIHBvaW50Lm5vcm1hbGl6ZSgpO1xuXG4gIHZhciB4MiA9IHBvaW50LngucmVkU3FyKCk7XG4gIHZhciB5MiA9IHBvaW50LnkucmVkU3FyKCk7XG4gIHZhciBsaHMgPSB4Mi5yZWRNdWwodGhpcy5hKS5yZWRBZGQoeTIpO1xuICB2YXIgcmhzID0gdGhpcy5jMi5yZWRNdWwodGhpcy5vbmUucmVkQWRkKHRoaXMuZC5yZWRNdWwoeDIpLnJlZE11bCh5MikpKTtcblxuICByZXR1cm4gbGhzLmNtcChyaHMpID09PSAwO1xufTtcblxuZnVuY3Rpb24gUG9pbnQoY3VydmUsIHgsIHksIHosIHQpIHtcbiAgQmFzZS5CYXNlUG9pbnQuY2FsbCh0aGlzLCBjdXJ2ZSwgJ3Byb2plY3RpdmUnKTtcbiAgaWYgKHggPT09IG51bGwgJiYgeSA9PT0gbnVsbCAmJiB6ID09PSBudWxsKSB7XG4gICAgdGhpcy54ID0gdGhpcy5jdXJ2ZS56ZXJvO1xuICAgIHRoaXMueSA9IHRoaXMuY3VydmUub25lO1xuICAgIHRoaXMueiA9IHRoaXMuY3VydmUub25lO1xuICAgIHRoaXMudCA9IHRoaXMuY3VydmUuemVybztcbiAgICB0aGlzLnpPbmUgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMueCA9IG5ldyBCTih4LCAxNik7XG4gICAgdGhpcy55ID0gbmV3IEJOKHksIDE2KTtcbiAgICB0aGlzLnogPSB6ID8gbmV3IEJOKHosIDE2KSA6IHRoaXMuY3VydmUub25lO1xuICAgIHRoaXMudCA9IHQgJiYgbmV3IEJOKHQsIDE2KTtcbiAgICBpZiAoIXRoaXMueC5yZWQpXG4gICAgICB0aGlzLnggPSB0aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICAgIGlmICghdGhpcy55LnJlZClcbiAgICAgIHRoaXMueSA9IHRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgaWYgKCF0aGlzLnoucmVkKVxuICAgICAgdGhpcy56ID0gdGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICBpZiAodGhpcy50ICYmICF0aGlzLnQucmVkKVxuICAgICAgdGhpcy50ID0gdGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICB0aGlzLnpPbmUgPSB0aGlzLnogPT09IHRoaXMuY3VydmUub25lO1xuXG4gICAgLy8gVXNlIGV4dGVuZGVkIGNvb3JkaW5hdGVzXG4gICAgaWYgKHRoaXMuY3VydmUuZXh0ZW5kZWQgJiYgIXRoaXMudCkge1xuICAgICAgdGhpcy50ID0gdGhpcy54LnJlZE11bCh0aGlzLnkpO1xuICAgICAgaWYgKCF0aGlzLnpPbmUpXG4gICAgICAgIHRoaXMudCA9IHRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSk7XG4gICAgfVxuICB9XG59XG5pbmhlcml0cyhQb2ludCwgQmFzZS5CYXNlUG9pbnQpO1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLnBvaW50RnJvbUpTT04gPSBmdW5jdGlvbiBwb2ludEZyb21KU09OKG9iaikge1xuICByZXR1cm4gUG9pbnQuZnJvbUpTT04odGhpcywgb2JqKTtcbn07XG5cbkVkd2FyZHNDdXJ2ZS5wcm90b3R5cGUucG9pbnQgPSBmdW5jdGlvbiBwb2ludCh4LCB5LCB6LCB0KSB7XG4gIHJldHVybiBuZXcgUG9pbnQodGhpcywgeCwgeSwgeiwgdCk7XG59O1xuXG5Qb2ludC5mcm9tSlNPTiA9IGZ1bmN0aW9uIGZyb21KU09OKGN1cnZlLCBvYmopIHtcbiAgcmV0dXJuIG5ldyBQb2ludChjdXJ2ZSwgb2JqWzBdLCBvYmpbMV0sIG9ialsyXSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gJzxFQyBQb2ludCBJbmZpbml0eT4nO1xuICByZXR1cm4gJzxFQyBQb2ludCB4OiAnICsgdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgK1xuICAgICAgJyB5OiAnICsgdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgK1xuICAgICAgJyB6OiAnICsgdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgKyAnPic7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaXNJbmZpbml0eSA9IGZ1bmN0aW9uIGlzSW5maW5pdHkoKSB7XG4gIC8vIFhYWCBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IHplcm8gaXMgYWx3YXlzIHplcm8gaW4gcmVkXG4gIHJldHVybiB0aGlzLnguY21wbigwKSA9PT0gMCAmJlxuICAgICAgICAgdGhpcy55LmNtcCh0aGlzLnopID09PSAwO1xufTtcblxuUG9pbnQucHJvdG90eXBlLl9leHREYmwgPSBmdW5jdGlvbiBfZXh0RGJsKCkge1xuICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tdHdpc3RlZC1leHRlbmRlZC0xLmh0bWxcbiAgLy8gICAgICNkb3VibGluZy1kYmwtMjAwOC1od2NkXG4gIC8vIDRNICsgNFNcblxuICAvLyBBID0gWDFeMlxuICB2YXIgYSA9IHRoaXMueC5yZWRTcXIoKTtcbiAgLy8gQiA9IFkxXjJcbiAgdmFyIGIgPSB0aGlzLnkucmVkU3FyKCk7XG4gIC8vIEMgPSAyICogWjFeMlxuICB2YXIgYyA9IHRoaXMuei5yZWRTcXIoKTtcbiAgYyA9IGMucmVkSUFkZChjKTtcbiAgLy8gRCA9IGEgKiBBXG4gIHZhciBkID0gdGhpcy5jdXJ2ZS5fbXVsQShhKTtcbiAgLy8gRSA9IChYMSArIFkxKV4yIC0gQSAtIEJcbiAgdmFyIGUgPSB0aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCkucmVkSVN1YihhKS5yZWRJU3ViKGIpO1xuICAvLyBHID0gRCArIEJcbiAgdmFyIGcgPSBkLnJlZEFkZChiKTtcbiAgLy8gRiA9IEcgLSBDXG4gIHZhciBmID0gZy5yZWRTdWIoYyk7XG4gIC8vIEggPSBEIC0gQlxuICB2YXIgaCA9IGQucmVkU3ViKGIpO1xuICAvLyBYMyA9IEUgKiBGXG4gIHZhciBueCA9IGUucmVkTXVsKGYpO1xuICAvLyBZMyA9IEcgKiBIXG4gIHZhciBueSA9IGcucmVkTXVsKGgpO1xuICAvLyBUMyA9IEUgKiBIXG4gIHZhciBudCA9IGUucmVkTXVsKGgpO1xuICAvLyBaMyA9IEYgKiBHXG4gIHZhciBueiA9IGYucmVkTXVsKGcpO1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCwgbnksIG56LCBudCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX3Byb2pEYmwgPSBmdW5jdGlvbiBfcHJvakRibCgpIHtcbiAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXR3aXN0ZWQtcHJvamVjdGl2ZS5odG1sXG4gIC8vICAgICAjZG91YmxpbmctZGJsLTIwMDgtYmJqbHBcbiAgLy8gICAgICNkb3VibGluZy1kYmwtMjAwNy1ibFxuICAvLyBhbmQgb3RoZXJzXG4gIC8vIEdlbmVyYWxseSAzTSArIDRTIG9yIDJNICsgNFNcblxuICAvLyBCID0gKFgxICsgWTEpXjJcbiAgdmFyIGIgPSB0aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCk7XG4gIC8vIEMgPSBYMV4yXG4gIHZhciBjID0gdGhpcy54LnJlZFNxcigpO1xuICAvLyBEID0gWTFeMlxuICB2YXIgZCA9IHRoaXMueS5yZWRTcXIoKTtcblxuICB2YXIgbng7XG4gIHZhciBueTtcbiAgdmFyIG56O1xuICBpZiAodGhpcy5jdXJ2ZS50d2lzdGVkKSB7XG4gICAgLy8gRSA9IGEgKiBDXG4gICAgdmFyIGUgPSB0aGlzLmN1cnZlLl9tdWxBKGMpO1xuICAgIC8vIEYgPSBFICsgRFxuICAgIHZhciBmID0gZS5yZWRBZGQoZCk7XG4gICAgaWYgKHRoaXMuek9uZSkge1xuICAgICAgLy8gWDMgPSAoQiAtIEMgLSBEKSAqIChGIC0gMilcbiAgICAgIG54ID0gYi5yZWRTdWIoYykucmVkU3ViKGQpLnJlZE11bChmLnJlZFN1Yih0aGlzLmN1cnZlLnR3bykpO1xuICAgICAgLy8gWTMgPSBGICogKEUgLSBEKVxuICAgICAgbnkgPSBmLnJlZE11bChlLnJlZFN1YihkKSk7XG4gICAgICAvLyBaMyA9IEZeMiAtIDIgKiBGXG4gICAgICBueiA9IGYucmVkU3FyKCkucmVkU3ViKGYpLnJlZFN1YihmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSCA9IFoxXjJcbiAgICAgIHZhciBoID0gdGhpcy56LnJlZFNxcigpO1xuICAgICAgLy8gSiA9IEYgLSAyICogSFxuICAgICAgdmFyIGogPSBmLnJlZFN1YihoKS5yZWRJU3ViKGgpO1xuICAgICAgLy8gWDMgPSAoQi1DLUQpKkpcbiAgICAgIG54ID0gYi5yZWRTdWIoYykucmVkSVN1YihkKS5yZWRNdWwoaik7XG4gICAgICAvLyBZMyA9IEYgKiAoRSAtIEQpXG4gICAgICBueSA9IGYucmVkTXVsKGUucmVkU3ViKGQpKTtcbiAgICAgIC8vIFozID0gRiAqIEpcbiAgICAgIG56ID0gZi5yZWRNdWwoaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEUgPSBDICsgRFxuICAgIHZhciBlID0gYy5yZWRBZGQoZCk7XG4gICAgLy8gSCA9IChjICogWjEpXjJcbiAgICB2YXIgaCA9IHRoaXMuY3VydmUuX211bEModGhpcy5jLnJlZE11bCh0aGlzLnopKS5yZWRTcXIoKTtcbiAgICAvLyBKID0gRSAtIDIgKiBIXG4gICAgdmFyIGogPSBlLnJlZFN1YihoKS5yZWRTdWIoaCk7XG4gICAgLy8gWDMgPSBjICogKEIgLSBFKSAqIEpcbiAgICBueCA9IHRoaXMuY3VydmUuX211bEMoYi5yZWRJU3ViKGUpKS5yZWRNdWwoaik7XG4gICAgLy8gWTMgPSBjICogRSAqIChDIC0gRClcbiAgICBueSA9IHRoaXMuY3VydmUuX211bEMoZSkucmVkTXVsKGMucmVkSVN1YihkKSk7XG4gICAgLy8gWjMgPSBFICogSlxuICAgIG56ID0gZS5yZWRNdWwoaik7XG4gIH1cbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG55LCBueik7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZGJsID0gZnVuY3Rpb24gZGJsKCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gRG91YmxlIGluIGV4dGVuZGVkIGNvb3JkaW5hdGVzXG4gIGlmICh0aGlzLmN1cnZlLmV4dGVuZGVkKVxuICAgIHJldHVybiB0aGlzLl9leHREYmwoKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLl9wcm9qRGJsKCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX2V4dEFkZCA9IGZ1bmN0aW9uIF9leHRBZGQocCkge1xuICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tdHdpc3RlZC1leHRlbmRlZC0xLmh0bWxcbiAgLy8gICAgICNhZGRpdGlvbi1hZGQtMjAwOC1od2NkLTNcbiAgLy8gOE1cblxuICAvLyBBID0gKFkxIC0gWDEpICogKFkyIC0gWDIpXG4gIHZhciBhID0gdGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bChwLnkucmVkU3ViKHAueCkpO1xuICAvLyBCID0gKFkxICsgWDEpICogKFkyICsgWDIpXG4gIHZhciBiID0gdGhpcy55LnJlZEFkZCh0aGlzLngpLnJlZE11bChwLnkucmVkQWRkKHAueCkpO1xuICAvLyBDID0gVDEgKiBrICogVDJcbiAgdmFyIGMgPSB0aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11bChwLnQpO1xuICAvLyBEID0gWjEgKiAyICogWjJcbiAgdmFyIGQgPSB0aGlzLnoucmVkTXVsKHAuei5yZWRBZGQocC56KSk7XG4gIC8vIEUgPSBCIC0gQVxuICB2YXIgZSA9IGIucmVkU3ViKGEpO1xuICAvLyBGID0gRCAtIENcbiAgdmFyIGYgPSBkLnJlZFN1YihjKTtcbiAgLy8gRyA9IEQgKyBDXG4gIHZhciBnID0gZC5yZWRBZGQoYyk7XG4gIC8vIEggPSBCICsgQVxuICB2YXIgaCA9IGIucmVkQWRkKGEpO1xuICAvLyBYMyA9IEUgKiBGXG4gIHZhciBueCA9IGUucmVkTXVsKGYpO1xuICAvLyBZMyA9IEcgKiBIXG4gIHZhciBueSA9IGcucmVkTXVsKGgpO1xuICAvLyBUMyA9IEUgKiBIXG4gIHZhciBudCA9IGUucmVkTXVsKGgpO1xuICAvLyBaMyA9IEYgKiBHXG4gIHZhciBueiA9IGYucmVkTXVsKGcpO1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCwgbnksIG56LCBudCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX3Byb2pBZGQgPSBmdW5jdGlvbiBfcHJvakFkZChwKSB7XG4gIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by10d2lzdGVkLXByb2plY3RpdmUuaHRtbFxuICAvLyAgICAgI2FkZGl0aW9uLWFkZC0yMDA4LWJiamxwXG4gIC8vICAgICAjYWRkaXRpb24tYWRkLTIwMDctYmxcbiAgLy8gMTBNICsgMVNcblxuICAvLyBBID0gWjEgKiBaMlxuICB2YXIgYSA9IHRoaXMuei5yZWRNdWwocC56KTtcbiAgLy8gQiA9IEFeMlxuICB2YXIgYiA9IGEucmVkU3FyKCk7XG4gIC8vIEMgPSBYMSAqIFgyXG4gIHZhciBjID0gdGhpcy54LnJlZE11bChwLngpO1xuICAvLyBEID0gWTEgKiBZMlxuICB2YXIgZCA9IHRoaXMueS5yZWRNdWwocC55KTtcbiAgLy8gRSA9IGQgKiBDICogRFxuICB2YXIgZSA9IHRoaXMuY3VydmUuZC5yZWRNdWwoYykucmVkTXVsKGQpO1xuICAvLyBGID0gQiAtIEVcbiAgdmFyIGYgPSBiLnJlZFN1YihlKTtcbiAgLy8gRyA9IEIgKyBFXG4gIHZhciBnID0gYi5yZWRBZGQoZSk7XG4gIC8vIFgzID0gQSAqIEYgKiAoKFgxICsgWTEpICogKFgyICsgWTIpIC0gQyAtIEQpXG4gIHZhciB0bXAgPSB0aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKHAueC5yZWRBZGQocC55KSkucmVkSVN1YihjKS5yZWRJU3ViKGQpO1xuICB2YXIgbnggPSBhLnJlZE11bChmKS5yZWRNdWwodG1wKTtcbiAgdmFyIG55O1xuICB2YXIgbno7XG4gIGlmICh0aGlzLmN1cnZlLnR3aXN0ZWQpIHtcbiAgICAvLyBZMyA9IEEgKiBHICogKEQgLSBhICogQylcbiAgICBueSA9IGEucmVkTXVsKGcpLnJlZE11bChkLnJlZFN1Yih0aGlzLmN1cnZlLl9tdWxBKGMpKSk7XG4gICAgLy8gWjMgPSBGICogR1xuICAgIG56ID0gZi5yZWRNdWwoZyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gWTMgPSBBICogRyAqIChEIC0gQylcbiAgICBueSA9IGEucmVkTXVsKGcpLnJlZE11bChkLnJlZFN1YihjKSk7XG4gICAgLy8gWjMgPSBjICogRiAqIEdcbiAgICBueiA9IHRoaXMuY3VydmUuX211bEMoZikucmVkTXVsKGcpO1xuICB9XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueSwgbnopO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChwKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gcDtcbiAgaWYgKHAuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIGlmICh0aGlzLmN1cnZlLmV4dGVuZGVkKVxuICAgIHJldHVybiB0aGlzLl9leHRBZGQocCk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5fcHJvakFkZChwKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwoaykge1xuICBpZiAodGhpcy5faGFzRG91YmxlcyhrKSlcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcywgayk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLCBrKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWxBZGQgPSBmdW5jdGlvbiBtdWxBZGQoazEsIHAsIGsyKSB7XG4gIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsIFsgdGhpcywgcCBdLCBbIGsxLCBrMiBdLCAyLCBmYWxzZSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuam11bEFkZCA9IGZ1bmN0aW9uIGptdWxBZGQoazEsIHAsIGsyKSB7XG4gIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsIFsgdGhpcywgcCBdLCBbIGsxLCBrMiBdLCAyLCB0cnVlKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5ub3JtYWxpemUgPSBmdW5jdGlvbiBub3JtYWxpemUoKSB7XG4gIGlmICh0aGlzLnpPbmUpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gTm9ybWFsaXplIGNvb3JkaW5hdGVzXG4gIHZhciB6aSA9IHRoaXMuei5yZWRJbnZtKCk7XG4gIHRoaXMueCA9IHRoaXMueC5yZWRNdWwoemkpO1xuICB0aGlzLnkgPSB0aGlzLnkucmVkTXVsKHppKTtcbiAgaWYgKHRoaXMudClcbiAgICB0aGlzLnQgPSB0aGlzLnQucmVkTXVsKHppKTtcbiAgdGhpcy56ID0gdGhpcy5jdXJ2ZS5vbmU7XG4gIHRoaXMuek9uZSA9IHRydWU7XG4gIHJldHVybiB0aGlzO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uIG5lZygpIHtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ICYmIHRoaXMudC5yZWROZWcoKSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uIGdldFgoKSB7XG4gIHRoaXMubm9ybWFsaXplKCk7XG4gIHJldHVybiB0aGlzLnguZnJvbVJlZCgpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmdldFkgPSBmdW5jdGlvbiBnZXRZKCkge1xuICB0aGlzLm5vcm1hbGl6ZSgpO1xuICByZXR1cm4gdGhpcy55LmZyb21SZWQoKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5lcSA9IGZ1bmN0aW9uIGVxKG90aGVyKSB7XG4gIHJldHVybiB0aGlzID09PSBvdGhlciB8fFxuICAgICAgICAgdGhpcy5nZXRYKCkuY21wKG90aGVyLmdldFgoKSkgPT09IDAgJiZcbiAgICAgICAgIHRoaXMuZ2V0WSgpLmNtcChvdGhlci5nZXRZKCkpID09PSAwO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmVxWFRvUCA9IGZ1bmN0aW9uIGVxWFRvUCh4KSB7XG4gIHZhciByeCA9IHgudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO1xuICBpZiAodGhpcy54LmNtcChyeCkgPT09IDApXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgdmFyIHhjID0geC5jbG9uZSgpO1xuICB2YXIgdCA9IHRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTtcbiAgZm9yICg7Oykge1xuICAgIHhjLmlhZGQodGhpcy5jdXJ2ZS5uKTtcbiAgICBpZiAoeGMuY21wKHRoaXMuY3VydmUucCkgPj0gMClcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIHJ4LnJlZElBZGQodCk7XG4gICAgaWYgKHRoaXMueC5jbXAocngpID09PSAwKVxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gQ29tcGF0aWJpbGl0eSB3aXRoIEJhc2VDdXJ2ZVxuUG9pbnQucHJvdG90eXBlLnRvUCA9IFBvaW50LnByb3RvdHlwZS5ub3JtYWxpemU7XG5Qb2ludC5wcm90b3R5cGUubWl4ZWRBZGQgPSBQb2ludC5wcm90b3R5cGUuYWRkO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3VydmUgPSBleHBvcnRzO1xuXG5jdXJ2ZS5iYXNlID0gcmVxdWlyZSgnLi9iYXNlJyk7XG5jdXJ2ZS5zaG9ydCA9IHJlcXVpcmUoJy4vc2hvcnQnKTtcbmN1cnZlLm1vbnQgPSByZXF1aXJlKCcuL21vbnQnKTtcbmN1cnZlLmVkd2FyZHMgPSByZXF1aXJlKCcuL2Vkd2FyZHMnKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGN1cnZlID0gcmVxdWlyZSgnLi4vY3VydmUnKTtcbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xudmFyIEJhc2UgPSBjdXJ2ZS5iYXNlO1xuXG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG5cbmZ1bmN0aW9uIE1vbnRDdXJ2ZShjb25mKSB7XG4gIEJhc2UuY2FsbCh0aGlzLCAnbW9udCcsIGNvbmYpO1xuXG4gIHRoaXMuYSA9IG5ldyBCTihjb25mLmEsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuYiA9IG5ldyBCTihjb25mLmIsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuaTQgPSBuZXcgQk4oNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKTtcbiAgdGhpcy50d28gPSBuZXcgQk4oMikudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLmEyNCA9IHRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKTtcbn1cbmluaGVyaXRzKE1vbnRDdXJ2ZSwgQmFzZSk7XG5tb2R1bGUuZXhwb3J0cyA9IE1vbnRDdXJ2ZTtcblxuTW9udEN1cnZlLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKHBvaW50KSB7XG4gIHZhciB4ID0gcG9pbnQubm9ybWFsaXplKCkueDtcbiAgdmFyIHgyID0geC5yZWRTcXIoKTtcbiAgdmFyIHJocyA9IHgyLnJlZE11bCh4KS5yZWRBZGQoeDIucmVkTXVsKHRoaXMuYSkpLnJlZEFkZCh4KTtcbiAgdmFyIHkgPSByaHMucmVkU3FydCgpO1xuXG4gIHJldHVybiB5LnJlZFNxcigpLmNtcChyaHMpID09PSAwO1xufTtcblxuZnVuY3Rpb24gUG9pbnQoY3VydmUsIHgsIHopIHtcbiAgQmFzZS5CYXNlUG9pbnQuY2FsbCh0aGlzLCBjdXJ2ZSwgJ3Byb2plY3RpdmUnKTtcbiAgaWYgKHggPT09IG51bGwgJiYgeiA9PT0gbnVsbCkge1xuICAgIHRoaXMueCA9IHRoaXMuY3VydmUub25lO1xuICAgIHRoaXMueiA9IHRoaXMuY3VydmUuemVybztcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnggPSBuZXcgQk4oeCwgMTYpO1xuICAgIHRoaXMueiA9IG5ldyBCTih6LCAxNik7XG4gICAgaWYgKCF0aGlzLngucmVkKVxuICAgICAgdGhpcy54ID0gdGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICBpZiAoIXRoaXMuei5yZWQpXG4gICAgICB0aGlzLnogPSB0aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICB9XG59XG5pbmhlcml0cyhQb2ludCwgQmFzZS5CYXNlUG9pbnQpO1xuXG5Nb250Q3VydmUucHJvdG90eXBlLmRlY29kZVBvaW50ID0gZnVuY3Rpb24gZGVjb2RlUG9pbnQoYnl0ZXMsIGVuYykge1xuICByZXR1cm4gdGhpcy5wb2ludCh1dGlscy50b0FycmF5KGJ5dGVzLCBlbmMpLCAxKTtcbn07XG5cbk1vbnRDdXJ2ZS5wcm90b3R5cGUucG9pbnQgPSBmdW5jdGlvbiBwb2ludCh4LCB6KSB7XG4gIHJldHVybiBuZXcgUG9pbnQodGhpcywgeCwgeik7XG59O1xuXG5Nb250Q3VydmUucHJvdG90eXBlLnBvaW50RnJvbUpTT04gPSBmdW5jdGlvbiBwb2ludEZyb21KU09OKG9iaikge1xuICByZXR1cm4gUG9pbnQuZnJvbUpTT04odGhpcywgb2JqKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5wcmVjb21wdXRlID0gZnVuY3Rpb24gcHJlY29tcHV0ZSgpIHtcbiAgLy8gTm8tb3Bcbn07XG5cblBvaW50LnByb3RvdHlwZS5fZW5jb2RlID0gZnVuY3Rpb24gX2VuY29kZSgpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoJ2JlJywgdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSk7XG59O1xuXG5Qb2ludC5mcm9tSlNPTiA9IGZ1bmN0aW9uIGZyb21KU09OKGN1cnZlLCBvYmopIHtcbiAgcmV0dXJuIG5ldyBQb2ludChjdXJ2ZSwgb2JqWzBdLCBvYmpbMV0gfHwgY3VydmUub25lKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiAnPEVDIFBvaW50IEluZmluaXR5Pic7XG4gIHJldHVybiAnPEVDIFBvaW50IHg6ICcgKyB0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArXG4gICAgICAnIHo6ICcgKyB0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArICc+Jztcbn07XG5cblBvaW50LnByb3RvdHlwZS5pc0luZmluaXR5ID0gZnVuY3Rpb24gaXNJbmZpbml0eSgpIHtcbiAgLy8gWFhYIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgemVybyBpcyBhbHdheXMgemVybyBpbiByZWRcbiAgcmV0dXJuIHRoaXMuei5jbXBuKDApID09PSAwO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmRibCA9IGZ1bmN0aW9uIGRibCgpIHtcbiAgLy8gaHR0cDovL2h5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1tb250Z29tLXh6Lmh0bWwjZG91YmxpbmctZGJsLTE5ODctbS0zXG4gIC8vIDJNICsgMlMgKyA0QVxuXG4gIC8vIEEgPSBYMSArIFoxXG4gIHZhciBhID0gdGhpcy54LnJlZEFkZCh0aGlzLnopO1xuICAvLyBBQSA9IEFeMlxuICB2YXIgYWEgPSBhLnJlZFNxcigpO1xuICAvLyBCID0gWDEgLSBaMVxuICB2YXIgYiA9IHRoaXMueC5yZWRTdWIodGhpcy56KTtcbiAgLy8gQkIgPSBCXjJcbiAgdmFyIGJiID0gYi5yZWRTcXIoKTtcbiAgLy8gQyA9IEFBIC0gQkJcbiAgdmFyIGMgPSBhYS5yZWRTdWIoYmIpO1xuICAvLyBYMyA9IEFBICogQkJcbiAgdmFyIG54ID0gYWEucmVkTXVsKGJiKTtcbiAgLy8gWjMgPSBDICogKEJCICsgQTI0ICogQylcbiAgdmFyIG56ID0gYy5yZWRNdWwoYmIucmVkQWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChjKSkpO1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCwgbnopO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUnKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5kaWZmQWRkID0gZnVuY3Rpb24gZGlmZkFkZChwLCBkaWZmKSB7XG4gIC8vIGh0dHA6Ly9oeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tbW9udGdvbS14ei5odG1sI2RpZmZhZGQtZGFkZC0xOTg3LW0tM1xuICAvLyA0TSArIDJTICsgNkFcblxuICAvLyBBID0gWDIgKyBaMlxuICB2YXIgYSA9IHRoaXMueC5yZWRBZGQodGhpcy56KTtcbiAgLy8gQiA9IFgyIC0gWjJcbiAgdmFyIGIgPSB0aGlzLngucmVkU3ViKHRoaXMueik7XG4gIC8vIEMgPSBYMyArIFozXG4gIHZhciBjID0gcC54LnJlZEFkZChwLnopO1xuICAvLyBEID0gWDMgLSBaM1xuICB2YXIgZCA9IHAueC5yZWRTdWIocC56KTtcbiAgLy8gREEgPSBEICogQVxuICB2YXIgZGEgPSBkLnJlZE11bChhKTtcbiAgLy8gQ0IgPSBDICogQlxuICB2YXIgY2IgPSBjLnJlZE11bChiKTtcbiAgLy8gWDUgPSBaMSAqIChEQSArIENCKV4yXG4gIHZhciBueCA9IGRpZmYuei5yZWRNdWwoZGEucmVkQWRkKGNiKS5yZWRTcXIoKSk7XG4gIC8vIFo1ID0gWDEgKiAoREEgLSBDQileMlxuICB2YXIgbnogPSBkaWZmLngucmVkTXVsKGRhLnJlZElTdWIoY2IpLnJlZFNxcigpKTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG56KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwoaykge1xuICB2YXIgdCA9IGsuY2xvbmUoKTtcbiAgdmFyIGEgPSB0aGlzOyAvLyAoTiAvIDIpICogUSArIFFcbiAgdmFyIGIgPSB0aGlzLmN1cnZlLnBvaW50KG51bGwsIG51bGwpOyAvLyAoTiAvIDIpICogUVxuICB2YXIgYyA9IHRoaXM7IC8vIFFcblxuICBmb3IgKHZhciBiaXRzID0gW107IHQuY21wbigwKSAhPT0gMDsgdC5pdXNocm4oMSkpXG4gICAgYml0cy5wdXNoKHQuYW5kbG4oMSkpO1xuXG4gIGZvciAodmFyIGkgPSBiaXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGJpdHNbaV0gPT09IDApIHtcbiAgICAgIC8vIE4gKiBRICsgUSA9ICgoTiAvIDIpICogUSArIFEpKSArIChOIC8gMikgKiBRXG4gICAgICBhID0gYS5kaWZmQWRkKGIsIGMpO1xuICAgICAgLy8gTiAqIFEgPSAyICogKChOIC8gMikgKiBRICsgUSkpXG4gICAgICBiID0gYi5kYmwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTiAqIFEgPSAoKE4gLyAyKSAqIFEgKyBRKSArICgoTiAvIDIpICogUSlcbiAgICAgIGIgPSBhLmRpZmZBZGQoYiwgYyk7XG4gICAgICAvLyBOICogUSArIFEgPSAyICogKChOIC8gMikgKiBRICsgUSlcbiAgICAgIGEgPSBhLmRibCgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYjtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWxBZGQgPSBmdW5jdGlvbiBtdWxBZGQoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlJyk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuanVtbEFkZCA9IGZ1bmN0aW9uIGp1bWxBZGQoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlJyk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcShvdGhlcikge1xuICByZXR1cm4gdGhpcy5nZXRYKCkuY21wKG90aGVyLmdldFgoKSkgPT09IDA7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubm9ybWFsaXplID0gZnVuY3Rpb24gbm9ybWFsaXplKCkge1xuICB0aGlzLnggPSB0aGlzLngucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpO1xuICB0aGlzLnogPSB0aGlzLmN1cnZlLm9uZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uIGdldFgoKSB7XG4gIC8vIE5vcm1hbGl6ZSBjb29yZGluYXRlc1xuICB0aGlzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiB0aGlzLnguZnJvbVJlZCgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGN1cnZlID0gcmVxdWlyZSgnLi4vY3VydmUnKTtcbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbnZhciBCYXNlID0gY3VydmUuYmFzZTtcblxudmFyIGFzc2VydCA9IGVsbGlwdGljLnV0aWxzLmFzc2VydDtcblxuZnVuY3Rpb24gU2hvcnRDdXJ2ZShjb25mKSB7XG4gIEJhc2UuY2FsbCh0aGlzLCAnc2hvcnQnLCBjb25mKTtcblxuICB0aGlzLmEgPSBuZXcgQk4oY29uZi5hLCAxNikudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLmIgPSBuZXcgQk4oY29uZi5iLCAxNikudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLnRpbnYgPSB0aGlzLnR3by5yZWRJbnZtKCk7XG5cbiAgdGhpcy56ZXJvQSA9IHRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSA9PT0gMDtcbiAgdGhpcy50aHJlZUEgPSB0aGlzLmEuZnJvbVJlZCgpLnN1Yih0aGlzLnApLmNtcG4oLTMpID09PSAwO1xuXG4gIC8vIElmIHRoZSBjdXJ2ZSBpcyBlbmRvbW9ycGhpYywgcHJlY2FsY3VsYXRlIGJldGEgYW5kIGxhbWJkYVxuICB0aGlzLmVuZG8gPSB0aGlzLl9nZXRFbmRvbW9ycGhpc20oY29uZik7XG4gIHRoaXMuX2VuZG9XbmFmVDEgPSBuZXcgQXJyYXkoNCk7XG4gIHRoaXMuX2VuZG9XbmFmVDIgPSBuZXcgQXJyYXkoNCk7XG59XG5pbmhlcml0cyhTaG9ydEN1cnZlLCBCYXNlKTtcbm1vZHVsZS5leHBvcnRzID0gU2hvcnRDdXJ2ZTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUuX2dldEVuZG9tb3JwaGlzbSA9IGZ1bmN0aW9uIF9nZXRFbmRvbW9ycGhpc20oY29uZikge1xuICAvLyBObyBlZmZpY2llbnQgZW5kb21vcnBoaXNtXG4gIGlmICghdGhpcy56ZXJvQSB8fCAhdGhpcy5nIHx8ICF0aGlzLm4gfHwgdGhpcy5wLm1vZG4oMykgIT09IDEpXG4gICAgcmV0dXJuO1xuXG4gIC8vIENvbXB1dGUgYmV0YSBhbmQgbGFtYmRhLCB0aGF0IGxhbWJkYSAqIFAgPSAoYmV0YSAqIFB4OyBQeSlcbiAgdmFyIGJldGE7XG4gIHZhciBsYW1iZGE7XG4gIGlmIChjb25mLmJldGEpIHtcbiAgICBiZXRhID0gbmV3IEJOKGNvbmYuYmV0YSwgMTYpLnRvUmVkKHRoaXMucmVkKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgYmV0YXMgPSB0aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtcbiAgICAvLyBDaG9vc2UgdGhlIHNtYWxsZXN0IGJldGFcbiAgICBiZXRhID0gYmV0YXNbMF0uY21wKGJldGFzWzFdKSA8IDAgPyBiZXRhc1swXSA6IGJldGFzWzFdO1xuICAgIGJldGEgPSBiZXRhLnRvUmVkKHRoaXMucmVkKTtcbiAgfVxuICBpZiAoY29uZi5sYW1iZGEpIHtcbiAgICBsYW1iZGEgPSBuZXcgQk4oY29uZi5sYW1iZGEsIDE2KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBDaG9vc2UgdGhlIGxhbWJkYSB0aGF0IGlzIG1hdGNoaW5nIHNlbGVjdGVkIGJldGFcbiAgICB2YXIgbGFtYmRhcyA9IHRoaXMuX2dldEVuZG9Sb290cyh0aGlzLm4pO1xuICAgIGlmICh0aGlzLmcubXVsKGxhbWJkYXNbMF0pLnguY21wKHRoaXMuZy54LnJlZE11bChiZXRhKSkgPT09IDApIHtcbiAgICAgIGxhbWJkYSA9IGxhbWJkYXNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhbWJkYSA9IGxhbWJkYXNbMV07XG4gICAgICBhc3NlcnQodGhpcy5nLm11bChsYW1iZGEpLnguY21wKHRoaXMuZy54LnJlZE11bChiZXRhKSkgPT09IDApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldCBiYXNpcyB2ZWN0b3JzLCB1c2VkIGZvciBiYWxhbmNlZCBsZW5ndGgtdHdvIHJlcHJlc2VudGF0aW9uXG4gIHZhciBiYXNpcztcbiAgaWYgKGNvbmYuYmFzaXMpIHtcbiAgICBiYXNpcyA9IGNvbmYuYmFzaXMubWFwKGZ1bmN0aW9uKHZlYykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYTogbmV3IEJOKHZlYy5hLCAxNiksXG4gICAgICAgIGI6IG5ldyBCTih2ZWMuYiwgMTYpXG4gICAgICB9O1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGJhc2lzID0gdGhpcy5fZ2V0RW5kb0Jhc2lzKGxhbWJkYSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJldGE6IGJldGEsXG4gICAgbGFtYmRhOiBsYW1iZGEsXG4gICAgYmFzaXM6IGJhc2lzXG4gIH07XG59O1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5fZ2V0RW5kb1Jvb3RzID0gZnVuY3Rpb24gX2dldEVuZG9Sb290cyhudW0pIHtcbiAgLy8gRmluZCByb290cyBvZiBmb3IgeF4yICsgeCArIDEgaW4gRlxuICAvLyBSb290ID0gKC0xICstIFNxcnQoLTMpKSAvIDJcbiAgLy9cbiAgdmFyIHJlZCA9IG51bSA9PT0gdGhpcy5wID8gdGhpcy5yZWQgOiBCTi5tb250KG51bSk7XG4gIHZhciB0aW52ID0gbmV3IEJOKDIpLnRvUmVkKHJlZCkucmVkSW52bSgpO1xuICB2YXIgbnRpbnYgPSB0aW52LnJlZE5lZygpO1xuXG4gIHZhciBzID0gbmV3IEJOKDMpLnRvUmVkKHJlZCkucmVkTmVnKCkucmVkU3FydCgpLnJlZE11bCh0aW52KTtcblxuICB2YXIgbDEgPSBudGludi5yZWRBZGQocykuZnJvbVJlZCgpO1xuICB2YXIgbDIgPSBudGludi5yZWRTdWIocykuZnJvbVJlZCgpO1xuICByZXR1cm4gWyBsMSwgbDIgXTtcbn07XG5cblNob3J0Q3VydmUucHJvdG90eXBlLl9nZXRFbmRvQmFzaXMgPSBmdW5jdGlvbiBfZ2V0RW5kb0Jhc2lzKGxhbWJkYSkge1xuICAvLyBhcHJ4U3FydCA+PSBzcXJ0KHRoaXMubilcbiAgdmFyIGFwcnhTcXJ0ID0gdGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpIC8gMikpO1xuXG4gIC8vIDMuNzRcbiAgLy8gUnVuIEVHQ0QsIHVudGlsIHIoTCArIDEpIDwgYXByeFNxcnRcbiAgdmFyIHUgPSBsYW1iZGE7XG4gIHZhciB2ID0gdGhpcy5uLmNsb25lKCk7XG4gIHZhciB4MSA9IG5ldyBCTigxKTtcbiAgdmFyIHkxID0gbmV3IEJOKDApO1xuICB2YXIgeDIgPSBuZXcgQk4oMCk7XG4gIHZhciB5MiA9IG5ldyBCTigxKTtcblxuICAvLyBOT1RFOiBhbGwgdmVjdG9ycyBhcmUgcm9vdHMgb2Y6IGEgKyBiICogbGFtYmRhID0gMCAobW9kIG4pXG4gIHZhciBhMDtcbiAgdmFyIGIwO1xuICAvLyBGaXJzdCB2ZWN0b3JcbiAgdmFyIGExO1xuICB2YXIgYjE7XG4gIC8vIFNlY29uZCB2ZWN0b3JcbiAgdmFyIGEyO1xuICB2YXIgYjI7XG5cbiAgdmFyIHByZXZSO1xuICB2YXIgaSA9IDA7XG4gIHZhciByO1xuICB2YXIgeDtcbiAgd2hpbGUgKHUuY21wbigwKSAhPT0gMCkge1xuICAgIHZhciBxID0gdi5kaXYodSk7XG4gICAgciA9IHYuc3ViKHEubXVsKHUpKTtcbiAgICB4ID0geDIuc3ViKHEubXVsKHgxKSk7XG4gICAgdmFyIHkgPSB5Mi5zdWIocS5tdWwoeTEpKTtcblxuICAgIGlmICghYTEgJiYgci5jbXAoYXByeFNxcnQpIDwgMCkge1xuICAgICAgYTAgPSBwcmV2Ui5uZWcoKTtcbiAgICAgIGIwID0geDE7XG4gICAgICBhMSA9IHIubmVnKCk7XG4gICAgICBiMSA9IHg7XG4gICAgfSBlbHNlIGlmIChhMSAmJiArK2kgPT09IDIpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBwcmV2UiA9IHI7XG5cbiAgICB2ID0gdTtcbiAgICB1ID0gcjtcbiAgICB4MiA9IHgxO1xuICAgIHgxID0geDtcbiAgICB5MiA9IHkxO1xuICAgIHkxID0geTtcbiAgfVxuICBhMiA9IHIubmVnKCk7XG4gIGIyID0geDtcblxuICB2YXIgbGVuMSA9IGExLnNxcigpLmFkZChiMS5zcXIoKSk7XG4gIHZhciBsZW4yID0gYTIuc3FyKCkuYWRkKGIyLnNxcigpKTtcbiAgaWYgKGxlbjIuY21wKGxlbjEpID49IDApIHtcbiAgICBhMiA9IGEwO1xuICAgIGIyID0gYjA7XG4gIH1cblxuICAvLyBOb3JtYWxpemUgc2lnbnNcbiAgaWYgKGExLm5lZ2F0aXZlKSB7XG4gICAgYTEgPSBhMS5uZWcoKTtcbiAgICBiMSA9IGIxLm5lZygpO1xuICB9XG4gIGlmIChhMi5uZWdhdGl2ZSkge1xuICAgIGEyID0gYTIubmVnKCk7XG4gICAgYjIgPSBiMi5uZWcoKTtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgeyBhOiBhMSwgYjogYjEgfSxcbiAgICB7IGE6IGEyLCBiOiBiMiB9XG4gIF07XG59O1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5fZW5kb1NwbGl0ID0gZnVuY3Rpb24gX2VuZG9TcGxpdChrKSB7XG4gIHZhciBiYXNpcyA9IHRoaXMuZW5kby5iYXNpcztcbiAgdmFyIHYxID0gYmFzaXNbMF07XG4gIHZhciB2MiA9IGJhc2lzWzFdO1xuXG4gIHZhciBjMSA9IHYyLmIubXVsKGspLmRpdlJvdW5kKHRoaXMubik7XG4gIHZhciBjMiA9IHYxLmIubmVnKCkubXVsKGspLmRpdlJvdW5kKHRoaXMubik7XG5cbiAgdmFyIHAxID0gYzEubXVsKHYxLmEpO1xuICB2YXIgcDIgPSBjMi5tdWwodjIuYSk7XG4gIHZhciBxMSA9IGMxLm11bCh2MS5iKTtcbiAgdmFyIHEyID0gYzIubXVsKHYyLmIpO1xuXG4gIC8vIENhbGN1bGF0ZSBhbnN3ZXJcbiAgdmFyIGsxID0gay5zdWIocDEpLnN1YihwMik7XG4gIHZhciBrMiA9IHExLmFkZChxMikubmVnKCk7XG4gIHJldHVybiB7IGsxOiBrMSwgazI6IGsyIH07XG59O1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5wb2ludEZyb21YID0gZnVuY3Rpb24gcG9pbnRGcm9tWCh4LCBvZGQpIHtcbiAgeCA9IG5ldyBCTih4LCAxNik7XG4gIGlmICgheC5yZWQpXG4gICAgeCA9IHgudG9SZWQodGhpcy5yZWQpO1xuXG4gIHZhciB5MiA9IHgucmVkU3FyKCkucmVkTXVsKHgpLnJlZElBZGQoeC5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpO1xuICB2YXIgeSA9IHkyLnJlZFNxcnQoKTtcbiAgaWYgKHkucmVkU3FyKCkucmVkU3ViKHkyKS5jbXAodGhpcy56ZXJvKSAhPT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcG9pbnQnKTtcblxuICAvLyBYWFggSXMgdGhlcmUgYW55IHdheSB0byB0ZWxsIGlmIHRoZSBudW1iZXIgaXMgb2RkIHdpdGhvdXQgY29udmVydGluZyBpdFxuICAvLyB0byBub24tcmVkIGZvcm0/XG4gIHZhciBpc09kZCA9IHkuZnJvbVJlZCgpLmlzT2RkKCk7XG4gIGlmIChvZGQgJiYgIWlzT2RkIHx8ICFvZGQgJiYgaXNPZGQpXG4gICAgeSA9IHkucmVkTmVnKCk7XG5cbiAgcmV0dXJuIHRoaXMucG9pbnQoeCwgeSk7XG59O1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKHBvaW50KSB7XG4gIGlmIChwb2ludC5pbmYpXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgdmFyIHggPSBwb2ludC54O1xuICB2YXIgeSA9IHBvaW50Lnk7XG5cbiAgdmFyIGF4ID0gdGhpcy5hLnJlZE11bCh4KTtcbiAgdmFyIHJocyA9IHgucmVkU3FyKCkucmVkTXVsKHgpLnJlZElBZGQoYXgpLnJlZElBZGQodGhpcy5iKTtcbiAgcmV0dXJuIHkucmVkU3FyKCkucmVkSVN1YihyaHMpLmNtcG4oMCkgPT09IDA7XG59O1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5fZW5kb1duYWZNdWxBZGQgPVxuICAgIGZ1bmN0aW9uIF9lbmRvV25hZk11bEFkZChwb2ludHMsIGNvZWZmcywgamFjb2JpYW5SZXN1bHQpIHtcbiAgdmFyIG5wb2ludHMgPSB0aGlzLl9lbmRvV25hZlQxO1xuICB2YXIgbmNvZWZmcyA9IHRoaXMuX2VuZG9XbmFmVDI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNwbGl0ID0gdGhpcy5fZW5kb1NwbGl0KGNvZWZmc1tpXSk7XG4gICAgdmFyIHAgPSBwb2ludHNbaV07XG4gICAgdmFyIGJldGEgPSBwLl9nZXRCZXRhKCk7XG5cbiAgICBpZiAoc3BsaXQuazEubmVnYXRpdmUpIHtcbiAgICAgIHNwbGl0LmsxLmluZWcoKTtcbiAgICAgIHAgPSBwLm5lZyh0cnVlKTtcbiAgICB9XG4gICAgaWYgKHNwbGl0LmsyLm5lZ2F0aXZlKSB7XG4gICAgICBzcGxpdC5rMi5pbmVnKCk7XG4gICAgICBiZXRhID0gYmV0YS5uZWcodHJ1ZSk7XG4gICAgfVxuXG4gICAgbnBvaW50c1tpICogMl0gPSBwO1xuICAgIG5wb2ludHNbaSAqIDIgKyAxXSA9IGJldGE7XG4gICAgbmNvZWZmc1tpICogMl0gPSBzcGxpdC5rMTtcbiAgICBuY29lZmZzW2kgKiAyICsgMV0gPSBzcGxpdC5rMjtcbiAgfVxuICB2YXIgcmVzID0gdGhpcy5fd25hZk11bEFkZCgxLCBucG9pbnRzLCBuY29lZmZzLCBpICogMiwgamFjb2JpYW5SZXN1bHQpO1xuXG4gIC8vIENsZWFuLXVwIHJlZmVyZW5jZXMgdG8gcG9pbnRzIGFuZCBjb2VmZmljaWVudHNcbiAgZm9yICh2YXIgaiA9IDA7IGogPCBpICogMjsgaisrKSB7XG4gICAgbnBvaW50c1tqXSA9IG51bGw7XG4gICAgbmNvZWZmc1tqXSA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5cbmZ1bmN0aW9uIFBvaW50KGN1cnZlLCB4LCB5LCBpc1JlZCkge1xuICBCYXNlLkJhc2VQb2ludC5jYWxsKHRoaXMsIGN1cnZlLCAnYWZmaW5lJyk7XG4gIGlmICh4ID09PSBudWxsICYmIHkgPT09IG51bGwpIHtcbiAgICB0aGlzLnggPSBudWxsO1xuICAgIHRoaXMueSA9IG51bGw7XG4gICAgdGhpcy5pbmYgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMueCA9IG5ldyBCTih4LCAxNik7XG4gICAgdGhpcy55ID0gbmV3IEJOKHksIDE2KTtcbiAgICAvLyBGb3JjZSByZWRnb21lcnkgcmVwcmVzZW50YXRpb24gd2hlbiBsb2FkaW5nIGZyb20gSlNPTlxuICAgIGlmIChpc1JlZCkge1xuICAgICAgdGhpcy54LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICAgIHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgfVxuICAgIGlmICghdGhpcy54LnJlZClcbiAgICAgIHRoaXMueCA9IHRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgaWYgKCF0aGlzLnkucmVkKVxuICAgICAgdGhpcy55ID0gdGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICB0aGlzLmluZiA9IGZhbHNlO1xuICB9XG59XG5pbmhlcml0cyhQb2ludCwgQmFzZS5CYXNlUG9pbnQpO1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5wb2ludCA9IGZ1bmN0aW9uIHBvaW50KHgsIHksIGlzUmVkKSB7XG4gIHJldHVybiBuZXcgUG9pbnQodGhpcywgeCwgeSwgaXNSZWQpO1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTiA9IGZ1bmN0aW9uIHBvaW50RnJvbUpTT04ob2JqLCByZWQpIHtcbiAgcmV0dXJuIFBvaW50LmZyb21KU09OKHRoaXMsIG9iaiwgcmVkKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5fZ2V0QmV0YSA9IGZ1bmN0aW9uIF9nZXRCZXRhKCkge1xuICBpZiAoIXRoaXMuY3VydmUuZW5kbylcbiAgICByZXR1cm47XG5cbiAgdmFyIHByZSA9IHRoaXMucHJlY29tcHV0ZWQ7XG4gIGlmIChwcmUgJiYgcHJlLmJldGEpXG4gICAgcmV0dXJuIHByZS5iZXRhO1xuXG4gIHZhciBiZXRhID0gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRhKSwgdGhpcy55KTtcbiAgaWYgKHByZSkge1xuICAgIHZhciBjdXJ2ZSA9IHRoaXMuY3VydmU7XG4gICAgdmFyIGVuZG9NdWwgPSBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gY3VydmUucG9pbnQocC54LnJlZE11bChjdXJ2ZS5lbmRvLmJldGEpLCBwLnkpO1xuICAgIH07XG4gICAgcHJlLmJldGEgPSBiZXRhO1xuICAgIGJldGEucHJlY29tcHV0ZWQgPSB7XG4gICAgICBiZXRhOiBudWxsLFxuICAgICAgbmFmOiBwcmUubmFmICYmIHtcbiAgICAgICAgd25kOiBwcmUubmFmLnduZCxcbiAgICAgICAgcG9pbnRzOiBwcmUubmFmLnBvaW50cy5tYXAoZW5kb011bClcbiAgICAgIH0sXG4gICAgICBkb3VibGVzOiBwcmUuZG91YmxlcyAmJiB7XG4gICAgICAgIHN0ZXA6IHByZS5kb3VibGVzLnN0ZXAsXG4gICAgICAgIHBvaW50czogcHJlLmRvdWJsZXMucG9pbnRzLm1hcChlbmRvTXVsKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIGJldGE7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICBpZiAoIXRoaXMucHJlY29tcHV0ZWQpXG4gICAgcmV0dXJuIFsgdGhpcy54LCB0aGlzLnkgXTtcblxuICByZXR1cm4gWyB0aGlzLngsIHRoaXMueSwgdGhpcy5wcmVjb21wdXRlZCAmJiB7XG4gICAgZG91YmxlczogdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzICYmIHtcbiAgICAgIHN0ZXA6IHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5zdGVwLFxuICAgICAgcG9pbnRzOiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNlKDEpXG4gICAgfSxcbiAgICBuYWY6IHRoaXMucHJlY29tcHV0ZWQubmFmICYmIHtcbiAgICAgIHduZDogdGhpcy5wcmVjb21wdXRlZC5uYWYud25kLFxuICAgICAgcG9pbnRzOiB0aGlzLnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2UoMSlcbiAgICB9XG4gIH0gXTtcbn07XG5cblBvaW50LmZyb21KU09OID0gZnVuY3Rpb24gZnJvbUpTT04oY3VydmUsIG9iaiwgcmVkKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJylcbiAgICBvYmogPSBKU09OLnBhcnNlKG9iaik7XG4gIHZhciByZXMgPSBjdXJ2ZS5wb2ludChvYmpbMF0sIG9ialsxXSwgcmVkKTtcbiAgaWYgKCFvYmpbMl0pXG4gICAgcmV0dXJuIHJlcztcblxuICBmdW5jdGlvbiBvYmoycG9pbnQob2JqKSB7XG4gICAgcmV0dXJuIGN1cnZlLnBvaW50KG9ialswXSwgb2JqWzFdLCByZWQpO1xuICB9XG5cbiAgdmFyIHByZSA9IG9ialsyXTtcbiAgcmVzLnByZWNvbXB1dGVkID0ge1xuICAgIGJldGE6IG51bGwsXG4gICAgZG91YmxlczogcHJlLmRvdWJsZXMgJiYge1xuICAgICAgc3RlcDogcHJlLmRvdWJsZXMuc3RlcCxcbiAgICAgIHBvaW50czogWyByZXMgXS5jb25jYXQocHJlLmRvdWJsZXMucG9pbnRzLm1hcChvYmoycG9pbnQpKVxuICAgIH0sXG4gICAgbmFmOiBwcmUubmFmICYmIHtcbiAgICAgIHduZDogcHJlLm5hZi53bmQsXG4gICAgICBwb2ludHM6IFsgcmVzIF0uY29uY2F0KHByZS5uYWYucG9pbnRzLm1hcChvYmoycG9pbnQpKVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHJlcztcbn07XG5cblBvaW50LnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiAnPEVDIFBvaW50IEluZmluaXR5Pic7XG4gIHJldHVybiAnPEVDIFBvaW50IHg6ICcgKyB0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArXG4gICAgICAnIHk6ICcgKyB0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArICc+Jztcbn07XG5cblBvaW50LnByb3RvdHlwZS5pc0luZmluaXR5ID0gZnVuY3Rpb24gaXNJbmZpbml0eSgpIHtcbiAgcmV0dXJuIHRoaXMuaW5mO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChwKSB7XG4gIC8vIE8gKyBQID0gUFxuICBpZiAodGhpcy5pbmYpXG4gICAgcmV0dXJuIHA7XG5cbiAgLy8gUCArIE8gPSBQXG4gIGlmIChwLmluZilcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBQICsgUCA9IDJQXG4gIGlmICh0aGlzLmVxKHApKVxuICAgIHJldHVybiB0aGlzLmRibCgpO1xuXG4gIC8vIFAgKyAoLVApID0gT1xuICBpZiAodGhpcy5uZWcoKS5lcShwKSlcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLCBudWxsKTtcblxuICAvLyBQICsgUSA9IE9cbiAgaWYgKHRoaXMueC5jbXAocC54KSA9PT0gMClcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLCBudWxsKTtcblxuICB2YXIgYyA9IHRoaXMueS5yZWRTdWIocC55KTtcbiAgaWYgKGMuY21wbigwKSAhPT0gMClcbiAgICBjID0gYy5yZWRNdWwodGhpcy54LnJlZFN1YihwLngpLnJlZEludm0oKSk7XG4gIHZhciBueCA9IGMucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIocC54KTtcbiAgdmFyIG55ID0gYy5yZWRNdWwodGhpcy54LnJlZFN1YihueCkpLnJlZElTdWIodGhpcy55KTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG55KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5kYmwgPSBmdW5jdGlvbiBkYmwoKSB7XG4gIGlmICh0aGlzLmluZilcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyAyUCA9IE9cbiAgdmFyIHlzMSA9IHRoaXMueS5yZWRBZGQodGhpcy55KTtcbiAgaWYgKHlzMS5jbXBuKDApID09PSAwKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsIG51bGwpO1xuXG4gIHZhciBhID0gdGhpcy5jdXJ2ZS5hO1xuXG4gIHZhciB4MiA9IHRoaXMueC5yZWRTcXIoKTtcbiAgdmFyIGR5aW52ID0geXMxLnJlZEludm0oKTtcbiAgdmFyIGMgPSB4Mi5yZWRBZGQoeDIpLnJlZElBZGQoeDIpLnJlZElBZGQoYSkucmVkTXVsKGR5aW52KTtcblxuICB2YXIgbnggPSBjLnJlZFNxcigpLnJlZElTdWIodGhpcy54LnJlZEFkZCh0aGlzLngpKTtcbiAgdmFyIG55ID0gYy5yZWRNdWwodGhpcy54LnJlZFN1YihueCkpLnJlZElTdWIodGhpcy55KTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG55KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5nZXRYID0gZnVuY3Rpb24gZ2V0WCgpIHtcbiAgcmV0dXJuIHRoaXMueC5mcm9tUmVkKCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WSA9IGZ1bmN0aW9uIGdldFkoKSB7XG4gIHJldHVybiB0aGlzLnkuZnJvbVJlZCgpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bChrKSB7XG4gIGsgPSBuZXcgQk4oaywgMTYpO1xuXG4gIGlmICh0aGlzLl9oYXNEb3VibGVzKGspKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLCBrKTtcbiAgZWxzZSBpZiAodGhpcy5jdXJ2ZS5lbmRvKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChbIHRoaXMgXSwgWyBrIF0pO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWwodGhpcywgayk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubXVsQWRkID0gZnVuY3Rpb24gbXVsQWRkKGsxLCBwMiwgazIpIHtcbiAgdmFyIHBvaW50cyA9IFsgdGhpcywgcDIgXTtcbiAgdmFyIGNvZWZmcyA9IFsgazEsIGsyIF07XG4gIGlmICh0aGlzLmN1cnZlLmVuZG8pXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKHBvaW50cywgY29lZmZzKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsIHBvaW50cywgY29lZmZzLCAyKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5qbXVsQWRkID0gZnVuY3Rpb24gam11bEFkZChrMSwgcDIsIGsyKSB7XG4gIHZhciBwb2ludHMgPSBbIHRoaXMsIHAyIF07XG4gIHZhciBjb2VmZnMgPSBbIGsxLCBrMiBdO1xuICBpZiAodGhpcy5jdXJ2ZS5lbmRvKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChwb2ludHMsIGNvZWZmcywgdHJ1ZSk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLCBwb2ludHMsIGNvZWZmcywgMiwgdHJ1ZSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcShwKSB7XG4gIHJldHVybiB0aGlzID09PSBwIHx8XG4gICAgICAgICB0aGlzLmluZiA9PT0gcC5pbmYgJiZcbiAgICAgICAgICAgICAodGhpcy5pbmYgfHwgdGhpcy54LmNtcChwLngpID09PSAwICYmIHRoaXMueS5jbXAocC55KSA9PT0gMCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubmVnID0gZnVuY3Rpb24gbmVnKF9wcmVjb21wdXRlKSB7XG4gIGlmICh0aGlzLmluZilcbiAgICByZXR1cm4gdGhpcztcblxuICB2YXIgcmVzID0gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsIHRoaXMueS5yZWROZWcoKSk7XG4gIGlmIChfcHJlY29tcHV0ZSAmJiB0aGlzLnByZWNvbXB1dGVkKSB7XG4gICAgdmFyIHByZSA9IHRoaXMucHJlY29tcHV0ZWQ7XG4gICAgdmFyIG5lZ2F0ZSA9IGZ1bmN0aW9uKHApIHtcbiAgICAgIHJldHVybiBwLm5lZygpO1xuICAgIH07XG4gICAgcmVzLnByZWNvbXB1dGVkID0ge1xuICAgICAgbmFmOiBwcmUubmFmICYmIHtcbiAgICAgICAgd25kOiBwcmUubmFmLnduZCxcbiAgICAgICAgcG9pbnRzOiBwcmUubmFmLnBvaW50cy5tYXAobmVnYXRlKVxuICAgICAgfSxcbiAgICAgIGRvdWJsZXM6IHByZS5kb3VibGVzICYmIHtcbiAgICAgICAgc3RlcDogcHJlLmRvdWJsZXMuc3RlcCxcbiAgICAgICAgcG9pbnRzOiBwcmUuZG91Ymxlcy5wb2ludHMubWFwKG5lZ2F0ZSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUudG9KID0gZnVuY3Rpb24gdG9KKCkge1xuICBpZiAodGhpcy5pbmYpXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuXG4gIHZhciByZXMgPSB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsIHRoaXMueSwgdGhpcy5jdXJ2ZS5vbmUpO1xuICByZXR1cm4gcmVzO1xufTtcblxuZnVuY3Rpb24gSlBvaW50KGN1cnZlLCB4LCB5LCB6KSB7XG4gIEJhc2UuQmFzZVBvaW50LmNhbGwodGhpcywgY3VydmUsICdqYWNvYmlhbicpO1xuICBpZiAoeCA9PT0gbnVsbCAmJiB5ID09PSBudWxsICYmIHogPT09IG51bGwpIHtcbiAgICB0aGlzLnggPSB0aGlzLmN1cnZlLm9uZTtcbiAgICB0aGlzLnkgPSB0aGlzLmN1cnZlLm9uZTtcbiAgICB0aGlzLnogPSBuZXcgQk4oMCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy54ID0gbmV3IEJOKHgsIDE2KTtcbiAgICB0aGlzLnkgPSBuZXcgQk4oeSwgMTYpO1xuICAgIHRoaXMueiA9IG5ldyBCTih6LCAxNik7XG4gIH1cbiAgaWYgKCF0aGlzLngucmVkKVxuICAgIHRoaXMueCA9IHRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gIGlmICghdGhpcy55LnJlZClcbiAgICB0aGlzLnkgPSB0aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICBpZiAoIXRoaXMuei5yZWQpXG4gICAgdGhpcy56ID0gdGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcblxuICB0aGlzLnpPbmUgPSB0aGlzLnogPT09IHRoaXMuY3VydmUub25lO1xufVxuaW5oZXJpdHMoSlBvaW50LCBCYXNlLkJhc2VQb2ludCk7XG5cblNob3J0Q3VydmUucHJvdG90eXBlLmpwb2ludCA9IGZ1bmN0aW9uIGpwb2ludCh4LCB5LCB6KSB7XG4gIHJldHVybiBuZXcgSlBvaW50KHRoaXMsIHgsIHksIHopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS50b1AgPSBmdW5jdGlvbiB0b1AoKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLCBudWxsKTtcblxuICB2YXIgemludiA9IHRoaXMuei5yZWRJbnZtKCk7XG4gIHZhciB6aW52MiA9IHppbnYucmVkU3FyKCk7XG4gIHZhciBheCA9IHRoaXMueC5yZWRNdWwoemludjIpO1xuICB2YXIgYXkgPSB0aGlzLnkucmVkTXVsKHppbnYyKS5yZWRNdWwoemludik7XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQoYXgsIGF5KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUubmVnID0gZnVuY3Rpb24gbmVnKCkge1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LCB0aGlzLnkucmVkTmVnKCksIHRoaXMueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChwKSB7XG4gIC8vIE8gKyBQID0gUFxuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHA7XG5cbiAgLy8gUCArIE8gPSBQXG4gIGlmIChwLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyAxMk0gKyA0UyArIDdBXG4gIHZhciBwejIgPSBwLnoucmVkU3FyKCk7XG4gIHZhciB6MiA9IHRoaXMuei5yZWRTcXIoKTtcbiAgdmFyIHUxID0gdGhpcy54LnJlZE11bChwejIpO1xuICB2YXIgdTIgPSBwLngucmVkTXVsKHoyKTtcbiAgdmFyIHMxID0gdGhpcy55LnJlZE11bChwejIucmVkTXVsKHAueikpO1xuICB2YXIgczIgPSBwLnkucmVkTXVsKHoyLnJlZE11bCh0aGlzLnopKTtcblxuICB2YXIgaCA9IHUxLnJlZFN1Yih1Mik7XG4gIHZhciByID0gczEucmVkU3ViKHMyKTtcbiAgaWYgKGguY21wbigwKSA9PT0gMCkge1xuICAgIGlmIChyLmNtcG4oMCkgIT09IDApXG4gICAgICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHRoaXMuZGJsKCk7XG4gIH1cblxuICB2YXIgaDIgPSBoLnJlZFNxcigpO1xuICB2YXIgaDMgPSBoMi5yZWRNdWwoaCk7XG4gIHZhciB2ID0gdTEucmVkTXVsKGgyKTtcblxuICB2YXIgbnggPSByLnJlZFNxcigpLnJlZElBZGQoaDMpLnJlZElTdWIodikucmVkSVN1Yih2KTtcbiAgdmFyIG55ID0gci5yZWRNdWwodi5yZWRJU3ViKG54KSkucmVkSVN1YihzMS5yZWRNdWwoaDMpKTtcbiAgdmFyIG56ID0gdGhpcy56LnJlZE11bChwLnopLnJlZE11bChoKTtcblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsIG55LCBueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLm1peGVkQWRkID0gZnVuY3Rpb24gbWl4ZWRBZGQocCkge1xuICAvLyBPICsgUCA9IFBcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiBwLnRvSigpO1xuXG4gIC8vIFAgKyBPID0gUFxuICBpZiAocC5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gOE0gKyAzUyArIDdBXG4gIHZhciB6MiA9IHRoaXMuei5yZWRTcXIoKTtcbiAgdmFyIHUxID0gdGhpcy54O1xuICB2YXIgdTIgPSBwLngucmVkTXVsKHoyKTtcbiAgdmFyIHMxID0gdGhpcy55O1xuICB2YXIgczIgPSBwLnkucmVkTXVsKHoyKS5yZWRNdWwodGhpcy56KTtcblxuICB2YXIgaCA9IHUxLnJlZFN1Yih1Mik7XG4gIHZhciByID0gczEucmVkU3ViKHMyKTtcbiAgaWYgKGguY21wbigwKSA9PT0gMCkge1xuICAgIGlmIChyLmNtcG4oMCkgIT09IDApXG4gICAgICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHRoaXMuZGJsKCk7XG4gIH1cblxuICB2YXIgaDIgPSBoLnJlZFNxcigpO1xuICB2YXIgaDMgPSBoMi5yZWRNdWwoaCk7XG4gIHZhciB2ID0gdTEucmVkTXVsKGgyKTtcblxuICB2YXIgbnggPSByLnJlZFNxcigpLnJlZElBZGQoaDMpLnJlZElTdWIodikucmVkSVN1Yih2KTtcbiAgdmFyIG55ID0gci5yZWRNdWwodi5yZWRJU3ViKG54KSkucmVkSVN1YihzMS5yZWRNdWwoaDMpKTtcbiAgdmFyIG56ID0gdGhpcy56LnJlZE11bChoKTtcblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsIG55LCBueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmRibHAgPSBmdW5jdGlvbiBkYmxwKHBvdykge1xuICBpZiAocG93ID09PSAwKVxuICAgIHJldHVybiB0aGlzO1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG4gIGlmICghcG93KVxuICAgIHJldHVybiB0aGlzLmRibCgpO1xuXG4gIGlmICh0aGlzLmN1cnZlLnplcm9BIHx8IHRoaXMuY3VydmUudGhyZWVBKSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG93OyBpKyspXG4gICAgICByID0gci5kYmwoKTtcbiAgICByZXR1cm4gcjtcbiAgfVxuXG4gIC8vIDFNICsgMlMgKyAxQSArIE4gKiAoNFMgKyA1TSArIDhBKVxuICAvLyBOID0gMSA9PiA2TSArIDZTICsgOUFcbiAgdmFyIGEgPSB0aGlzLmN1cnZlLmE7XG4gIHZhciB0aW52ID0gdGhpcy5jdXJ2ZS50aW52O1xuXG4gIHZhciBqeCA9IHRoaXMueDtcbiAgdmFyIGp5ID0gdGhpcy55O1xuICB2YXIganogPSB0aGlzLno7XG4gIHZhciBqejQgPSBqei5yZWRTcXIoKS5yZWRTcXIoKTtcblxuICAvLyBSZXVzZSByZXN1bHRzXG4gIHZhciBqeWQgPSBqeS5yZWRBZGQoankpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvdzsgaSsrKSB7XG4gICAgdmFyIGp4MiA9IGp4LnJlZFNxcigpO1xuICAgIHZhciBqeWQyID0ganlkLnJlZFNxcigpO1xuICAgIHZhciBqeWQ0ID0ganlkMi5yZWRTcXIoKTtcbiAgICB2YXIgYyA9IGp4Mi5yZWRBZGQoangyKS5yZWRJQWRkKGp4MikucmVkSUFkZChhLnJlZE11bChqejQpKTtcblxuICAgIHZhciB0MSA9IGp4LnJlZE11bChqeWQyKTtcbiAgICB2YXIgbnggPSBjLnJlZFNxcigpLnJlZElTdWIodDEucmVkQWRkKHQxKSk7XG4gICAgdmFyIHQyID0gdDEucmVkSVN1YihueCk7XG4gICAgdmFyIGRueSA9IGMucmVkTXVsKHQyKTtcbiAgICBkbnkgPSBkbnkucmVkSUFkZChkbnkpLnJlZElTdWIoanlkNCk7XG4gICAgdmFyIG56ID0ganlkLnJlZE11bChqeik7XG4gICAgaWYgKGkgKyAxIDwgcG93KVxuICAgICAgano0ID0gano0LnJlZE11bChqeWQ0KTtcblxuICAgIGp4ID0gbng7XG4gICAganogPSBuejtcbiAgICBqeWQgPSBkbnk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoangsIGp5ZC5yZWRNdWwodGludiksIGp6KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuZGJsID0gZnVuY3Rpb24gZGJsKCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKHRoaXMuY3VydmUuemVyb0EpXG4gICAgcmV0dXJuIHRoaXMuX3plcm9EYmwoKTtcbiAgZWxzZSBpZiAodGhpcy5jdXJ2ZS50aHJlZUEpXG4gICAgcmV0dXJuIHRoaXMuX3RocmVlRGJsKCk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5fZGJsKCk7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLl96ZXJvRGJsID0gZnVuY3Rpb24gX3plcm9EYmwoKSB7XG4gIHZhciBueDtcbiAgdmFyIG55O1xuICB2YXIgbno7XG4gIC8vIFogPSAxXG4gIGlmICh0aGlzLnpPbmUpIHtcbiAgICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tc2hvcnR3LWphY29iaWFuLTAuaHRtbFxuICAgIC8vICAgICAjZG91YmxpbmctbWRibC0yMDA3LWJsXG4gICAgLy8gMU0gKyA1UyArIDE0QVxuXG4gICAgLy8gWFggPSBYMV4yXG4gICAgdmFyIHh4ID0gdGhpcy54LnJlZFNxcigpO1xuICAgIC8vIFlZID0gWTFeMlxuICAgIHZhciB5eSA9IHRoaXMueS5yZWRTcXIoKTtcbiAgICAvLyBZWVlZID0gWVleMlxuICAgIHZhciB5eXl5ID0geXkucmVkU3FyKCk7XG4gICAgLy8gUyA9IDIgKiAoKFgxICsgWVkpXjIgLSBYWCAtIFlZWVkpXG4gICAgdmFyIHMgPSB0aGlzLngucmVkQWRkKHl5KS5yZWRTcXIoKS5yZWRJU3ViKHh4KS5yZWRJU3ViKHl5eXkpO1xuICAgIHMgPSBzLnJlZElBZGQocyk7XG4gICAgLy8gTSA9IDMgKiBYWCArIGE7IGEgPSAwXG4gICAgdmFyIG0gPSB4eC5yZWRBZGQoeHgpLnJlZElBZGQoeHgpO1xuICAgIC8vIFQgPSBNIF4gMiAtIDIqU1xuICAgIHZhciB0ID0gbS5yZWRTcXIoKS5yZWRJU3ViKHMpLnJlZElTdWIocyk7XG5cbiAgICAvLyA4ICogWVlZWVxuICAgIHZhciB5eXl5OCA9IHl5eXkucmVkSUFkZCh5eXl5KTtcbiAgICB5eXl5OCA9IHl5eXk4LnJlZElBZGQoeXl5eTgpO1xuICAgIHl5eXk4ID0geXl5eTgucmVkSUFkZCh5eXl5OCk7XG5cbiAgICAvLyBYMyA9IFRcbiAgICBueCA9IHQ7XG4gICAgLy8gWTMgPSBNICogKFMgLSBUKSAtIDggKiBZWVlZXG4gICAgbnkgPSBtLnJlZE11bChzLnJlZElTdWIodCkpLnJlZElTdWIoeXl5eTgpO1xuICAgIC8vIFozID0gMipZMVxuICAgIG56ID0gdGhpcy55LnJlZEFkZCh0aGlzLnkpO1xuICB9IGVsc2Uge1xuICAgIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1zaG9ydHctamFjb2JpYW4tMC5odG1sXG4gICAgLy8gICAgICNkb3VibGluZy1kYmwtMjAwOS1sXG4gICAgLy8gMk0gKyA1UyArIDEzQVxuXG4gICAgLy8gQSA9IFgxXjJcbiAgICB2YXIgYSA9IHRoaXMueC5yZWRTcXIoKTtcbiAgICAvLyBCID0gWTFeMlxuICAgIHZhciBiID0gdGhpcy55LnJlZFNxcigpO1xuICAgIC8vIEMgPSBCXjJcbiAgICB2YXIgYyA9IGIucmVkU3FyKCk7XG4gICAgLy8gRCA9IDIgKiAoKFgxICsgQileMiAtIEEgLSBDKVxuICAgIHZhciBkID0gdGhpcy54LnJlZEFkZChiKS5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYyk7XG4gICAgZCA9IGQucmVkSUFkZChkKTtcbiAgICAvLyBFID0gMyAqIEFcbiAgICB2YXIgZSA9IGEucmVkQWRkKGEpLnJlZElBZGQoYSk7XG4gICAgLy8gRiA9IEVeMlxuICAgIHZhciBmID0gZS5yZWRTcXIoKTtcblxuICAgIC8vIDggKiBDXG4gICAgdmFyIGM4ID0gYy5yZWRJQWRkKGMpO1xuICAgIGM4ID0gYzgucmVkSUFkZChjOCk7XG4gICAgYzggPSBjOC5yZWRJQWRkKGM4KTtcblxuICAgIC8vIFgzID0gRiAtIDIgKiBEXG4gICAgbnggPSBmLnJlZElTdWIoZCkucmVkSVN1YihkKTtcbiAgICAvLyBZMyA9IEUgKiAoRCAtIFgzKSAtIDggKiBDXG4gICAgbnkgPSBlLnJlZE11bChkLnJlZElTdWIobngpKS5yZWRJU3ViKGM4KTtcbiAgICAvLyBaMyA9IDIgKiBZMSAqIFoxXG4gICAgbnogPSB0aGlzLnkucmVkTXVsKHRoaXMueik7XG4gICAgbnogPSBuei5yZWRJQWRkKG56KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChueCwgbnksIG56KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuX3RocmVlRGJsID0gZnVuY3Rpb24gX3RocmVlRGJsKCkge1xuICB2YXIgbng7XG4gIHZhciBueTtcbiAgdmFyIG56O1xuICAvLyBaID0gMVxuICBpZiAodGhpcy56T25lKSB7XG4gICAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXNob3J0dy1qYWNvYmlhbi0zLmh0bWxcbiAgICAvLyAgICAgI2RvdWJsaW5nLW1kYmwtMjAwNy1ibFxuICAgIC8vIDFNICsgNVMgKyAxNUFcblxuICAgIC8vIFhYID0gWDFeMlxuICAgIHZhciB4eCA9IHRoaXMueC5yZWRTcXIoKTtcbiAgICAvLyBZWSA9IFkxXjJcbiAgICB2YXIgeXkgPSB0aGlzLnkucmVkU3FyKCk7XG4gICAgLy8gWVlZWSA9IFlZXjJcbiAgICB2YXIgeXl5eSA9IHl5LnJlZFNxcigpO1xuICAgIC8vIFMgPSAyICogKChYMSArIFlZKV4yIC0gWFggLSBZWVlZKVxuICAgIHZhciBzID0gdGhpcy54LnJlZEFkZCh5eSkucmVkU3FyKCkucmVkSVN1Yih4eCkucmVkSVN1Yih5eXl5KTtcbiAgICBzID0gcy5yZWRJQWRkKHMpO1xuICAgIC8vIE0gPSAzICogWFggKyBhXG4gICAgdmFyIG0gPSB4eC5yZWRBZGQoeHgpLnJlZElBZGQoeHgpLnJlZElBZGQodGhpcy5jdXJ2ZS5hKTtcbiAgICAvLyBUID0gTV4yIC0gMiAqIFNcbiAgICB2YXIgdCA9IG0ucmVkU3FyKCkucmVkSVN1YihzKS5yZWRJU3ViKHMpO1xuICAgIC8vIFgzID0gVFxuICAgIG54ID0gdDtcbiAgICAvLyBZMyA9IE0gKiAoUyAtIFQpIC0gOCAqIFlZWVlcbiAgICB2YXIgeXl5eTggPSB5eXl5LnJlZElBZGQoeXl5eSk7XG4gICAgeXl5eTggPSB5eXl5OC5yZWRJQWRkKHl5eXk4KTtcbiAgICB5eXl5OCA9IHl5eXk4LnJlZElBZGQoeXl5eTgpO1xuICAgIG55ID0gbS5yZWRNdWwocy5yZWRJU3ViKHQpKS5yZWRJU3ViKHl5eXk4KTtcbiAgICAvLyBaMyA9IDIgKiBZMVxuICAgIG56ID0gdGhpcy55LnJlZEFkZCh0aGlzLnkpO1xuICB9IGVsc2Uge1xuICAgIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1zaG9ydHctamFjb2JpYW4tMy5odG1sI2RvdWJsaW5nLWRibC0yMDAxLWJcbiAgICAvLyAzTSArIDVTXG5cbiAgICAvLyBkZWx0YSA9IFoxXjJcbiAgICB2YXIgZGVsdGEgPSB0aGlzLnoucmVkU3FyKCk7XG4gICAgLy8gZ2FtbWEgPSBZMV4yXG4gICAgdmFyIGdhbW1hID0gdGhpcy55LnJlZFNxcigpO1xuICAgIC8vIGJldGEgPSBYMSAqIGdhbW1hXG4gICAgdmFyIGJldGEgPSB0aGlzLngucmVkTXVsKGdhbW1hKTtcbiAgICAvLyBhbHBoYSA9IDMgKiAoWDEgLSBkZWx0YSkgKiAoWDEgKyBkZWx0YSlcbiAgICB2YXIgYWxwaGEgPSB0aGlzLngucmVkU3ViKGRlbHRhKS5yZWRNdWwodGhpcy54LnJlZEFkZChkZWx0YSkpO1xuICAgIGFscGhhID0gYWxwaGEucmVkQWRkKGFscGhhKS5yZWRJQWRkKGFscGhhKTtcbiAgICAvLyBYMyA9IGFscGhhXjIgLSA4ICogYmV0YVxuICAgIHZhciBiZXRhNCA9IGJldGEucmVkSUFkZChiZXRhKTtcbiAgICBiZXRhNCA9IGJldGE0LnJlZElBZGQoYmV0YTQpO1xuICAgIHZhciBiZXRhOCA9IGJldGE0LnJlZEFkZChiZXRhNCk7XG4gICAgbnggPSBhbHBoYS5yZWRTcXIoKS5yZWRJU3ViKGJldGE4KTtcbiAgICAvLyBaMyA9IChZMSArIFoxKV4yIC0gZ2FtbWEgLSBkZWx0YVxuICAgIG56ID0gdGhpcy55LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLnJlZElTdWIoZ2FtbWEpLnJlZElTdWIoZGVsdGEpO1xuICAgIC8vIFkzID0gYWxwaGEgKiAoNCAqIGJldGEgLSBYMykgLSA4ICogZ2FtbWFeMlxuICAgIHZhciBnZ2FtbWE4ID0gZ2FtbWEucmVkU3FyKCk7XG4gICAgZ2dhbW1hOCA9IGdnYW1tYTgucmVkSUFkZChnZ2FtbWE4KTtcbiAgICBnZ2FtbWE4ID0gZ2dhbW1hOC5yZWRJQWRkKGdnYW1tYTgpO1xuICAgIGdnYW1tYTggPSBnZ2FtbWE4LnJlZElBZGQoZ2dhbW1hOCk7XG4gICAgbnkgPSBhbHBoYS5yZWRNdWwoYmV0YTQucmVkSVN1YihueCkpLnJlZElTdWIoZ2dhbW1hOCk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsIG55LCBueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLl9kYmwgPSBmdW5jdGlvbiBfZGJsKCkge1xuICB2YXIgYSA9IHRoaXMuY3VydmUuYTtcblxuICAvLyA0TSArIDZTICsgMTBBXG4gIHZhciBqeCA9IHRoaXMueDtcbiAgdmFyIGp5ID0gdGhpcy55O1xuICB2YXIganogPSB0aGlzLno7XG4gIHZhciBqejQgPSBqei5yZWRTcXIoKS5yZWRTcXIoKTtcblxuICB2YXIgangyID0gangucmVkU3FyKCk7XG4gIHZhciBqeTIgPSBqeS5yZWRTcXIoKTtcblxuICB2YXIgYyA9IGp4Mi5yZWRBZGQoangyKS5yZWRJQWRkKGp4MikucmVkSUFkZChhLnJlZE11bChqejQpKTtcblxuICB2YXIganhkNCA9IGp4LnJlZEFkZChqeCk7XG4gIGp4ZDQgPSBqeGQ0LnJlZElBZGQoanhkNCk7XG4gIHZhciB0MSA9IGp4ZDQucmVkTXVsKGp5Mik7XG4gIHZhciBueCA9IGMucmVkU3FyKCkucmVkSVN1Yih0MS5yZWRBZGQodDEpKTtcbiAgdmFyIHQyID0gdDEucmVkSVN1YihueCk7XG5cbiAgdmFyIGp5ZDggPSBqeTIucmVkU3FyKCk7XG4gIGp5ZDggPSBqeWQ4LnJlZElBZGQoanlkOCk7XG4gIGp5ZDggPSBqeWQ4LnJlZElBZGQoanlkOCk7XG4gIGp5ZDggPSBqeWQ4LnJlZElBZGQoanlkOCk7XG4gIHZhciBueSA9IGMucmVkTXVsKHQyKS5yZWRJU3ViKGp5ZDgpO1xuICB2YXIgbnogPSBqeS5yZWRBZGQoankpLnJlZE11bChqeik7XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LCBueSwgbnopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS50cnBsID0gZnVuY3Rpb24gdHJwbCgpIHtcbiAgaWYgKCF0aGlzLmN1cnZlLnplcm9BKVxuICAgIHJldHVybiB0aGlzLmRibCgpLmFkZCh0aGlzKTtcblxuICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tc2hvcnR3LWphY29iaWFuLTAuaHRtbCN0cmlwbGluZy10cGwtMjAwNy1ibFxuICAvLyA1TSArIDEwUyArIC4uLlxuXG4gIC8vIFhYID0gWDFeMlxuICB2YXIgeHggPSB0aGlzLngucmVkU3FyKCk7XG4gIC8vIFlZID0gWTFeMlxuICB2YXIgeXkgPSB0aGlzLnkucmVkU3FyKCk7XG4gIC8vIFpaID0gWjFeMlxuICB2YXIgenogPSB0aGlzLnoucmVkU3FyKCk7XG4gIC8vIFlZWVkgPSBZWV4yXG4gIHZhciB5eXl5ID0geXkucmVkU3FyKCk7XG4gIC8vIE0gPSAzICogWFggKyBhICogWloyOyBhID0gMFxuICB2YXIgbSA9IHh4LnJlZEFkZCh4eCkucmVkSUFkZCh4eCk7XG4gIC8vIE1NID0gTV4yXG4gIHZhciBtbSA9IG0ucmVkU3FyKCk7XG4gIC8vIEUgPSA2ICogKChYMSArIFlZKV4yIC0gWFggLSBZWVlZKSAtIE1NXG4gIHZhciBlID0gdGhpcy54LnJlZEFkZCh5eSkucmVkU3FyKCkucmVkSVN1Yih4eCkucmVkSVN1Yih5eXl5KTtcbiAgZSA9IGUucmVkSUFkZChlKTtcbiAgZSA9IGUucmVkQWRkKGUpLnJlZElBZGQoZSk7XG4gIGUgPSBlLnJlZElTdWIobW0pO1xuICAvLyBFRSA9IEVeMlxuICB2YXIgZWUgPSBlLnJlZFNxcigpO1xuICAvLyBUID0gMTYqWVlZWVxuICB2YXIgdCA9IHl5eXkucmVkSUFkZCh5eXl5KTtcbiAgdCA9IHQucmVkSUFkZCh0KTtcbiAgdCA9IHQucmVkSUFkZCh0KTtcbiAgdCA9IHQucmVkSUFkZCh0KTtcbiAgLy8gVSA9IChNICsgRSleMiAtIE1NIC0gRUUgLSBUXG4gIHZhciB1ID0gbS5yZWRJQWRkKGUpLnJlZFNxcigpLnJlZElTdWIobW0pLnJlZElTdWIoZWUpLnJlZElTdWIodCk7XG4gIC8vIFgzID0gNCAqIChYMSAqIEVFIC0gNCAqIFlZICogVSlcbiAgdmFyIHl5dTQgPSB5eS5yZWRNdWwodSk7XG4gIHl5dTQgPSB5eXU0LnJlZElBZGQoeXl1NCk7XG4gIHl5dTQgPSB5eXU0LnJlZElBZGQoeXl1NCk7XG4gIHZhciBueCA9IHRoaXMueC5yZWRNdWwoZWUpLnJlZElTdWIoeXl1NCk7XG4gIG54ID0gbngucmVkSUFkZChueCk7XG4gIG54ID0gbngucmVkSUFkZChueCk7XG4gIC8vIFkzID0gOCAqIFkxICogKFUgKiAoVCAtIFUpIC0gRSAqIEVFKVxuICB2YXIgbnkgPSB0aGlzLnkucmVkTXVsKHUucmVkTXVsKHQucmVkSVN1Yih1KSkucmVkSVN1YihlLnJlZE11bChlZSkpKTtcbiAgbnkgPSBueS5yZWRJQWRkKG55KTtcbiAgbnkgPSBueS5yZWRJQWRkKG55KTtcbiAgbnkgPSBueS5yZWRJQWRkKG55KTtcbiAgLy8gWjMgPSAoWjEgKyBFKV4yIC0gWlogLSBFRVxuICB2YXIgbnogPSB0aGlzLnoucmVkQWRkKGUpLnJlZFNxcigpLnJlZElTdWIoenopLnJlZElTdWIoZWUpO1xuXG4gIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChueCwgbnksIG56KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsKGssIGtiYXNlKSB7XG4gIGsgPSBuZXcgQk4oaywga2Jhc2UpO1xuXG4gIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsIGspO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5lcSA9IGZ1bmN0aW9uIGVxKHApIHtcbiAgaWYgKHAudHlwZSA9PT0gJ2FmZmluZScpXG4gICAgcmV0dXJuIHRoaXMuZXEocC50b0ooKSk7XG5cbiAgaWYgKHRoaXMgPT09IHApXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgLy8geDEgKiB6Ml4yID09IHgyICogejFeMlxuICB2YXIgejIgPSB0aGlzLnoucmVkU3FyKCk7XG4gIHZhciBwejIgPSBwLnoucmVkU3FyKCk7XG4gIGlmICh0aGlzLngucmVkTXVsKHB6MikucmVkSVN1YihwLngucmVkTXVsKHoyKSkuY21wbigwKSAhPT0gMClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8geTEgKiB6Ml4zID09IHkyICogejFeM1xuICB2YXIgejMgPSB6Mi5yZWRNdWwodGhpcy56KTtcbiAgdmFyIHB6MyA9IHB6Mi5yZWRNdWwocC56KTtcbiAgcmV0dXJuIHRoaXMueS5yZWRNdWwocHozKS5yZWRJU3ViKHAueS5yZWRNdWwoejMpKS5jbXBuKDApID09PSAwO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5lcVhUb1AgPSBmdW5jdGlvbiBlcVhUb1AoeCkge1xuICB2YXIgenMgPSB0aGlzLnoucmVkU3FyKCk7XG4gIHZhciByeCA9IHgudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh6cyk7XG4gIGlmICh0aGlzLnguY21wKHJ4KSA9PT0gMClcbiAgICByZXR1cm4gdHJ1ZTtcblxuICB2YXIgeGMgPSB4LmNsb25lKCk7XG4gIHZhciB0ID0gdGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh6cyk7XG4gIGZvciAoOzspIHtcbiAgICB4Yy5pYWRkKHRoaXMuY3VydmUubik7XG4gICAgaWYgKHhjLmNtcCh0aGlzLmN1cnZlLnApID49IDApXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICByeC5yZWRJQWRkKHQpO1xuICAgIGlmICh0aGlzLnguY21wKHJ4KSA9PT0gMClcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gJzxFQyBKUG9pbnQgSW5maW5pdHk+JztcbiAgcmV0dXJuICc8RUMgSlBvaW50IHg6ICcgKyB0aGlzLngudG9TdHJpbmcoMTYsIDIpICtcbiAgICAgICcgeTogJyArIHRoaXMueS50b1N0cmluZygxNiwgMikgK1xuICAgICAgJyB6OiAnICsgdGhpcy56LnRvU3RyaW5nKDE2LCAyKSArICc+Jztcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuaXNJbmZpbml0eSA9IGZ1bmN0aW9uIGlzSW5maW5pdHkoKSB7XG4gIC8vIFhYWCBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IHplcm8gaXMgYWx3YXlzIHplcm8gaW4gcmVkXG4gIHJldHVybiB0aGlzLnouY21wbigwKSA9PT0gMDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjdXJ2ZXMgPSBleHBvcnRzO1xuXG52YXIgaGFzaCA9IHJlcXVpcmUoJ2hhc2guanMnKTtcbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJy4uL2VsbGlwdGljJyk7XG5cbnZhciBhc3NlcnQgPSBlbGxpcHRpYy51dGlscy5hc3NlcnQ7XG5cbmZ1bmN0aW9uIFByZXNldEN1cnZlKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ3Nob3J0JylcbiAgICB0aGlzLmN1cnZlID0gbmV3IGVsbGlwdGljLmN1cnZlLnNob3J0KG9wdGlvbnMpO1xuICBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09ICdlZHdhcmRzJylcbiAgICB0aGlzLmN1cnZlID0gbmV3IGVsbGlwdGljLmN1cnZlLmVkd2FyZHMob3B0aW9ucyk7XG4gIGVsc2VcbiAgICB0aGlzLmN1cnZlID0gbmV3IGVsbGlwdGljLmN1cnZlLm1vbnQob3B0aW9ucyk7XG4gIHRoaXMuZyA9IHRoaXMuY3VydmUuZztcbiAgdGhpcy5uID0gdGhpcy5jdXJ2ZS5uO1xuICB0aGlzLmhhc2ggPSBvcHRpb25zLmhhc2g7XG5cbiAgYXNzZXJ0KHRoaXMuZy52YWxpZGF0ZSgpLCAnSW52YWxpZCBjdXJ2ZScpO1xuICBhc3NlcnQodGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSwgJ0ludmFsaWQgY3VydmUsIEcqTiAhPSBPJyk7XG59XG5jdXJ2ZXMuUHJlc2V0Q3VydmUgPSBQcmVzZXRDdXJ2ZTtcblxuZnVuY3Rpb24gZGVmaW5lQ3VydmUobmFtZSwgb3B0aW9ucykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3VydmVzLCBuYW1lLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjdXJ2ZSA9IG5ldyBQcmVzZXRDdXJ2ZShvcHRpb25zKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdXJ2ZXMsIG5hbWUsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogY3VydmVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGN1cnZlO1xuICAgIH1cbiAgfSk7XG59XG5cbmRlZmluZUN1cnZlKCdwMTkyJywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogJ3AxOTInLFxuICBwOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYnLFxuICBhOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmMnLFxuICBiOiAnNjQyMTA1MTkgZTU5YzgwZTcgMGZhN2U5YWIgNzIyNDMwNDkgZmViOGRlZWMgYzE0NmI5YjEnLFxuICBuOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzEnLFxuICBoYXNoOiBoYXNoLnNoYTI1NixcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTInLFxuICAgICcwNzE5MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMSdcbiAgXVxufSk7XG5cbmRlZmluZUN1cnZlKCdwMjI0Jywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogJ3AyMjQnLFxuICBwOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEnLFxuICBhOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUnLFxuICBiOiAnYjQwNTBhODUgMGMwNGIzYWIgZjU0MTMyNTYgNTA0NGIwYjcgZDdiZmQ4YmEgMjcwYjM5NDMgMjM1NWZmYjQnLFxuICBuOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2QnLFxuICBoYXNoOiBoYXNoLnNoYTI1NixcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjEnLFxuICAgICdiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2UzNCdcbiAgXVxufSk7XG5cbmRlZmluZUN1cnZlKCdwMjU2Jywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogbnVsbCxcbiAgcDogJ2ZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmJyxcbiAgYTogJ2ZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjJyxcbiAgYjogJzVhYzYzNWQ4IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQwNmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRiJyxcbiAgbjogJ2ZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxJyxcbiAgaGFzaDogaGFzaC5zaGEyNTYsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJzZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThjMjk2JyxcbiAgICAnNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjUnXG4gIF1cbn0pO1xuXG5kZWZpbmVDdXJ2ZSgncDM4NCcsIHtcbiAgdHlwZTogJ3Nob3J0JyxcbiAgcHJpbWU6IG51bGwsXG4gIHA6ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmJyxcbiAgYTogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmMnLFxuICBiOiAnYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgJyArXG4gICAgICc1MDEzODc1YSBjNjU2Mzk4ZCA4YTJlZDE5ZCAyYTg1YzhlZCBkM2VjMmFlZicsXG4gIG46ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSAnICtcbiAgICAgJ2Y0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczJyxcbiAgaGFzaDogaGFzaC5zaGEzODQsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJ2FhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0MWUwIDgyNTQyYTM4ICcgK1xuICAgICc1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiNycsXG4gICAgJzM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwICcgK1xuICAgICcwYTYwYjFjZSAxZDdlODE5ZCA3YTQzMWQ3YyA5MGVhMGU1ZidcbiAgXVxufSk7XG5cbmRlZmluZUN1cnZlKCdwNTIxJywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogbnVsbCxcbiAgcDogJzAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgJyArXG4gICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZicsXG4gIGE6ICcwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMnLFxuICBiOiAnMDAwMDAwNTEgOTUzZWI5NjEgOGUxYzlhMWYgOTI5YTIxYTAgYjY4NTQwZWUgYTJkYTcyNWIgJyArXG4gICAgICc5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAnICtcbiAgICAgJzNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZiNTAzZjAwJyxcbiAgbjogJzAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggJyArXG4gICAgICdmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOScsXG4gIGhhc2g6IGhhc2guc2hhNTEyLFxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICcwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MiA5YzY0ODEzOSAnICtcbiAgICAnMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgJyArXG4gICAgJ2EyZmZhOGRlIDMzNDhiM2MxIDg1NmE0MjliIGY5N2U3ZTMxIGMyZTViZDY2JyxcbiAgICAnMDAwMDAxMTggMzkyOTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDkgOThmNTQ0NDkgJyArXG4gICAgJzU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQwIGM1NTBiOTAxICcgK1xuICAgICczZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MCdcbiAgXVxufSk7XG5cbmRlZmluZUN1cnZlKCdjdXJ2ZTI1NTE5Jywge1xuICB0eXBlOiAnbW9udCcsXG4gIHByaW1lOiAncDI1NTE5JyxcbiAgcDogJzdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQnLFxuICBhOiAnNzZkMDYnLFxuICBiOiAnMScsXG4gIG46ICcxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkJyxcbiAgaGFzaDogaGFzaC5zaGEyNTYsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJzknXG4gIF1cbn0pO1xuXG5kZWZpbmVDdXJ2ZSgnZWQyNTUxOScsIHtcbiAgdHlwZTogJ2Vkd2FyZHMnLFxuICBwcmltZTogJ3AyNTUxOScsXG4gIHA6ICc3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkJyxcbiAgYTogJy0xJyxcbiAgYzogJzEnLFxuICAvLyAtMTIxNjY1ICogKDEyMTY2Nl4oLTEpKSAobW9kIFApXG4gIGQ6ICc1MjAzNmNlZTJiNmZmZTczIDhjYzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3OGEzJyxcbiAgbjogJzEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQnLFxuICBoYXNoOiBoYXNoLnNoYTI1NixcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnMjE2OTM2ZDNjZDZlNTNmZWMwYTRlMjMxZmRkNmRjNWM2OTJjYzc2MDk1MjVhN2IyYzk1NjJkNjA4ZjI1ZDUxYScsXG5cbiAgICAvLyA0LzVcbiAgICAnNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1OCdcbiAgXVxufSk7XG5cbnZhciBwcmU7XG50cnkge1xuICBwcmUgPSByZXF1aXJlKCcuL3ByZWNvbXB1dGVkL3NlY3AyNTZrMScpO1xufSBjYXRjaCAoZSkge1xuICBwcmUgPSB1bmRlZmluZWQ7XG59XG5cbmRlZmluZUN1cnZlKCdzZWNwMjU2azEnLCB7XG4gIHR5cGU6ICdzaG9ydCcsXG4gIHByaW1lOiAnazI1NicsXG4gIHA6ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZicsXG4gIGE6ICcwJyxcbiAgYjogJzcnLFxuICBuOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgYmFhZWRjZTYgYWY0OGEwM2IgYmZkMjVlOGMgZDAzNjQxNDEnLFxuICBoOiAnMScsXG4gIGhhc2g6IGhhc2guc2hhMjU2LFxuXG4gIC8vIFByZWNvbXB1dGVkIGVuZG9tb3JwaGlzbVxuICBiZXRhOiAnN2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMzNDM0ZTk5Y2YwNDk3NTEyZjU4OTk1YzEzOTZjMjg3MTk1MDFlZScsXG4gIGxhbWJkYTogJzUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzInLFxuICBiYXNpczogW1xuICAgIHtcbiAgICAgIGE6ICczMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNScsXG4gICAgICBiOiAnLWU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzJ1xuICAgIH0sXG4gICAge1xuICAgICAgYTogJzExNGNhNTBmN2E4ZTJmM2Y2NTdjMTEwOGQ5ZDQ0Y2ZkOCcsXG4gICAgICBiOiAnMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUnXG4gICAgfVxuICBdLFxuXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJzc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgnLFxuICAgICc0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4JyxcbiAgICBwcmVcbiAgXVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgSG1hY0RSQkcgPSByZXF1aXJlKCdobWFjLWRyYmcnKTtcbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgdXRpbHMgPSBlbGxpcHRpYy51dGlscztcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG5cbnZhciBLZXlQYWlyID0gcmVxdWlyZSgnLi9rZXknKTtcbnZhciBTaWduYXR1cmUgPSByZXF1aXJlKCcuL3NpZ25hdHVyZScpO1xuXG5mdW5jdGlvbiBFQyhvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBFQykpXG4gICAgcmV0dXJuIG5ldyBFQyhvcHRpb25zKTtcblxuICAvLyBTaG9ydGN1dCBgZWxsaXB0aWMuZWMoY3VydmUtbmFtZSlgXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBhc3NlcnQoZWxsaXB0aWMuY3VydmVzLmhhc093blByb3BlcnR5KG9wdGlvbnMpLCAnVW5rbm93biBjdXJ2ZSAnICsgb3B0aW9ucyk7XG5cbiAgICBvcHRpb25zID0gZWxsaXB0aWMuY3VydmVzW29wdGlvbnNdO1xuICB9XG5cbiAgLy8gU2hvcnRjdXQgZm9yIGBlbGxpcHRpYy5lYyhlbGxpcHRpYy5jdXJ2ZXMuY3VydmVOYW1lKWBcbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBlbGxpcHRpYy5jdXJ2ZXMuUHJlc2V0Q3VydmUpXG4gICAgb3B0aW9ucyA9IHsgY3VydmU6IG9wdGlvbnMgfTtcblxuICB0aGlzLmN1cnZlID0gb3B0aW9ucy5jdXJ2ZS5jdXJ2ZTtcbiAgdGhpcy5uID0gdGhpcy5jdXJ2ZS5uO1xuICB0aGlzLm5oID0gdGhpcy5uLnVzaHJuKDEpO1xuICB0aGlzLmcgPSB0aGlzLmN1cnZlLmc7XG5cbiAgLy8gUG9pbnQgb24gY3VydmVcbiAgdGhpcy5nID0gb3B0aW9ucy5jdXJ2ZS5nO1xuICB0aGlzLmcucHJlY29tcHV0ZShvcHRpb25zLmN1cnZlLm4uYml0TGVuZ3RoKCkgKyAxKTtcblxuICAvLyBIYXNoIGZvciBmdW5jdGlvbiBmb3IgRFJCR1xuICB0aGlzLmhhc2ggPSBvcHRpb25zLmhhc2ggfHwgb3B0aW9ucy5jdXJ2ZS5oYXNoO1xufVxubW9kdWxlLmV4cG9ydHMgPSBFQztcblxuRUMucHJvdG90eXBlLmtleVBhaXIgPSBmdW5jdGlvbiBrZXlQYWlyKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBLZXlQYWlyKHRoaXMsIG9wdGlvbnMpO1xufTtcblxuRUMucHJvdG90eXBlLmtleUZyb21Qcml2YXRlID0gZnVuY3Rpb24ga2V5RnJvbVByaXZhdGUocHJpdiwgZW5jKSB7XG4gIHJldHVybiBLZXlQYWlyLmZyb21Qcml2YXRlKHRoaXMsIHByaXYsIGVuYyk7XG59O1xuXG5FQy5wcm90b3R5cGUua2V5RnJvbVB1YmxpYyA9IGZ1bmN0aW9uIGtleUZyb21QdWJsaWMocHViLCBlbmMpIHtcbiAgcmV0dXJuIEtleVBhaXIuZnJvbVB1YmxpYyh0aGlzLCBwdWIsIGVuYyk7XG59O1xuXG5FQy5wcm90b3R5cGUuZ2VuS2V5UGFpciA9IGZ1bmN0aW9uIGdlbktleVBhaXIob3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpXG4gICAgb3B0aW9ucyA9IHt9O1xuXG4gIC8vIEluc3RhbnRpYXRlIEhtYWNfRFJCR1xuICB2YXIgZHJiZyA9IG5ldyBIbWFjRFJCRyh7XG4gICAgaGFzaDogdGhpcy5oYXNoLFxuICAgIHBlcnM6IG9wdGlvbnMucGVycyxcbiAgICBwZXJzRW5jOiBvcHRpb25zLnBlcnNFbmMgfHwgJ3V0ZjgnLFxuICAgIGVudHJvcHk6IG9wdGlvbnMuZW50cm9weSB8fCBlbGxpcHRpYy5yYW5kKHRoaXMuaGFzaC5obWFjU3RyZW5ndGgpLFxuICAgIGVudHJvcHlFbmM6IG9wdGlvbnMuZW50cm9weSAmJiBvcHRpb25zLmVudHJvcHlFbmMgfHwgJ3V0ZjgnLFxuICAgIG5vbmNlOiB0aGlzLm4udG9BcnJheSgpXG4gIH0pO1xuXG4gIHZhciBieXRlcyA9IHRoaXMubi5ieXRlTGVuZ3RoKCk7XG4gIHZhciBuczIgPSB0aGlzLm4uc3ViKG5ldyBCTigyKSk7XG4gIGRvIHtcbiAgICB2YXIgcHJpdiA9IG5ldyBCTihkcmJnLmdlbmVyYXRlKGJ5dGVzKSk7XG4gICAgaWYgKHByaXYuY21wKG5zMikgPiAwKVxuICAgICAgY29udGludWU7XG5cbiAgICBwcml2LmlhZGRuKDEpO1xuICAgIHJldHVybiB0aGlzLmtleUZyb21Qcml2YXRlKHByaXYpO1xuICB9IHdoaWxlICh0cnVlKTtcbn07XG5cbkVDLnByb3RvdHlwZS5fdHJ1bmNhdGVUb04gPSBmdW5jdGlvbiB0cnVuY2F0ZVRvTihtc2csIHRydW5jT25seSkge1xuICB2YXIgZGVsdGEgPSBtc2cuYnl0ZUxlbmd0aCgpICogOCAtIHRoaXMubi5iaXRMZW5ndGgoKTtcbiAgaWYgKGRlbHRhID4gMClcbiAgICBtc2cgPSBtc2cudXNocm4oZGVsdGEpO1xuICBpZiAoIXRydW5jT25seSAmJiBtc2cuY21wKHRoaXMubikgPj0gMClcbiAgICByZXR1cm4gbXNnLnN1Yih0aGlzLm4pO1xuICBlbHNlXG4gICAgcmV0dXJuIG1zZztcbn07XG5cbkVDLnByb3RvdHlwZS5zaWduID0gZnVuY3Rpb24gc2lnbihtc2csIGtleSwgZW5jLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZW5jID09PSAnb2JqZWN0Jykge1xuICAgIG9wdGlvbnMgPSBlbmM7XG4gICAgZW5jID0gbnVsbDtcbiAgfVxuICBpZiAoIW9wdGlvbnMpXG4gICAgb3B0aW9ucyA9IHt9O1xuXG4gIGtleSA9IHRoaXMua2V5RnJvbVByaXZhdGUoa2V5LCBlbmMpO1xuICBtc2cgPSB0aGlzLl90cnVuY2F0ZVRvTihuZXcgQk4obXNnLCAxNikpO1xuXG4gIC8vIFplcm8tZXh0ZW5kIGtleSB0byBwcm92aWRlIGVub3VnaCBlbnRyb3B5XG4gIHZhciBieXRlcyA9IHRoaXMubi5ieXRlTGVuZ3RoKCk7XG4gIHZhciBia2V5ID0ga2V5LmdldFByaXZhdGUoKS50b0FycmF5KCdiZScsIGJ5dGVzKTtcblxuICAvLyBaZXJvLWV4dGVuZCBub25jZSB0byBoYXZlIHRoZSBzYW1lIGJ5dGUgc2l6ZSBhcyBOXG4gIHZhciBub25jZSA9IG1zZy50b0FycmF5KCdiZScsIGJ5dGVzKTtcblxuICAvLyBJbnN0YW50aWF0ZSBIbWFjX0RSQkdcbiAgdmFyIGRyYmcgPSBuZXcgSG1hY0RSQkcoe1xuICAgIGhhc2g6IHRoaXMuaGFzaCxcbiAgICBlbnRyb3B5OiBia2V5LFxuICAgIG5vbmNlOiBub25jZSxcbiAgICBwZXJzOiBvcHRpb25zLnBlcnMsXG4gICAgcGVyc0VuYzogb3B0aW9ucy5wZXJzRW5jIHx8ICd1dGY4J1xuICB9KTtcblxuICAvLyBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2VuZXJhdGVcbiAgdmFyIG5zMSA9IHRoaXMubi5zdWIobmV3IEJOKDEpKTtcblxuICBmb3IgKHZhciBpdGVyID0gMDsgdHJ1ZTsgaXRlcisrKSB7XG4gICAgdmFyIGsgPSBvcHRpb25zLmsgP1xuICAgICAgICBvcHRpb25zLmsoaXRlcikgOlxuICAgICAgICBuZXcgQk4oZHJiZy5nZW5lcmF0ZSh0aGlzLm4uYnl0ZUxlbmd0aCgpKSk7XG4gICAgayA9IHRoaXMuX3RydW5jYXRlVG9OKGssIHRydWUpO1xuICAgIGlmIChrLmNtcG4oMSkgPD0gMCB8fCBrLmNtcChuczEpID49IDApXG4gICAgICBjb250aW51ZTtcblxuICAgIHZhciBrcCA9IHRoaXMuZy5tdWwoayk7XG4gICAgaWYgKGtwLmlzSW5maW5pdHkoKSlcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgdmFyIGtwWCA9IGtwLmdldFgoKTtcbiAgICB2YXIgciA9IGtwWC51bW9kKHRoaXMubik7XG4gICAgaWYgKHIuY21wbigwKSA9PT0gMClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgdmFyIHMgPSBrLmludm0odGhpcy5uKS5tdWwoci5tdWwoa2V5LmdldFByaXZhdGUoKSkuaWFkZChtc2cpKTtcbiAgICBzID0gcy51bW9kKHRoaXMubik7XG4gICAgaWYgKHMuY21wbigwKSA9PT0gMClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgdmFyIHJlY292ZXJ5UGFyYW0gPSAoa3AuZ2V0WSgpLmlzT2RkKCkgPyAxIDogMCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgKGtwWC5jbXAocikgIT09IDAgPyAyIDogMCk7XG5cbiAgICAvLyBVc2UgY29tcGxlbWVudCBvZiBgc2AsIGlmIGl0IGlzID4gYG4gLyAyYFxuICAgIGlmIChvcHRpb25zLmNhbm9uaWNhbCAmJiBzLmNtcCh0aGlzLm5oKSA+IDApIHtcbiAgICAgIHMgPSB0aGlzLm4uc3ViKHMpO1xuICAgICAgcmVjb3ZlcnlQYXJhbSBePSAxO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU2lnbmF0dXJlKHsgcjogciwgczogcywgcmVjb3ZlcnlQYXJhbTogcmVjb3ZlcnlQYXJhbSB9KTtcbiAgfVxufTtcblxuRUMucHJvdG90eXBlLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtc2csIHNpZ25hdHVyZSwga2V5LCBlbmMpIHtcbiAgbXNnID0gdGhpcy5fdHJ1bmNhdGVUb04obmV3IEJOKG1zZywgMTYpKTtcbiAga2V5ID0gdGhpcy5rZXlGcm9tUHVibGljKGtleSwgZW5jKTtcbiAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShzaWduYXR1cmUsICdoZXgnKTtcblxuICAvLyBQZXJmb3JtIHByaW1pdGl2ZSB2YWx1ZXMgdmFsaWRhdGlvblxuICB2YXIgciA9IHNpZ25hdHVyZS5yO1xuICB2YXIgcyA9IHNpZ25hdHVyZS5zO1xuICBpZiAoci5jbXBuKDEpIDwgMCB8fCByLmNtcCh0aGlzLm4pID49IDApXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAocy5jbXBuKDEpIDwgMCB8fCBzLmNtcCh0aGlzLm4pID49IDApXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIFZhbGlkYXRlIHNpZ25hdHVyZVxuICB2YXIgc2ludiA9IHMuaW52bSh0aGlzLm4pO1xuICB2YXIgdTEgPSBzaW52Lm11bChtc2cpLnVtb2QodGhpcy5uKTtcbiAgdmFyIHUyID0gc2ludi5tdWwocikudW1vZCh0aGlzLm4pO1xuXG4gIGlmICghdGhpcy5jdXJ2ZS5fbWF4d2VsbFRyaWNrKSB7XG4gICAgdmFyIHAgPSB0aGlzLmcubXVsQWRkKHUxLCBrZXkuZ2V0UHVibGljKCksIHUyKTtcbiAgICBpZiAocC5pc0luZmluaXR5KCkpXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gcC5nZXRYKCkudW1vZCh0aGlzLm4pLmNtcChyKSA9PT0gMDtcbiAgfVxuXG4gIC8vIE5PVEU6IEdyZWcgTWF4d2VsbCdzIHRyaWNrLCBpbnNwaXJlZCBieTpcbiAgLy8gaHR0cHM6Ly9naXQuaW8vdmFkM0tcblxuICB2YXIgcCA9IHRoaXMuZy5qbXVsQWRkKHUxLCBrZXkuZ2V0UHVibGljKCksIHUyKTtcbiAgaWYgKHAuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBDb21wYXJlIGBwLnhgIG9mIEphY29iaWFuIHBvaW50IHdpdGggYHJgLFxuICAvLyB0aGlzIHdpbGwgZG8gYHAueCA9PSByICogcC56XjJgIGluc3RlYWQgb2YgbXVsdGlwbHlpbmcgYHAueGAgYnkgdGhlXG4gIC8vIGludmVyc2Ugb2YgYHAuel4yYFxuICByZXR1cm4gcC5lcVhUb1Aocik7XG59O1xuXG5FQy5wcm90b3R5cGUucmVjb3ZlclB1YktleSA9IGZ1bmN0aW9uKG1zZywgc2lnbmF0dXJlLCBqLCBlbmMpIHtcbiAgYXNzZXJ0KCgzICYgaikgPT09IGosICdUaGUgcmVjb3ZlcnkgcGFyYW0gaXMgbW9yZSB0aGFuIHR3byBiaXRzJyk7XG4gIHNpZ25hdHVyZSA9IG5ldyBTaWduYXR1cmUoc2lnbmF0dXJlLCBlbmMpO1xuXG4gIHZhciBuID0gdGhpcy5uO1xuICB2YXIgZSA9IG5ldyBCTihtc2cpO1xuICB2YXIgciA9IHNpZ25hdHVyZS5yO1xuICB2YXIgcyA9IHNpZ25hdHVyZS5zO1xuXG4gIC8vIEEgc2V0IExTQiBzaWduaWZpZXMgdGhhdCB0aGUgeS1jb29yZGluYXRlIGlzIG9kZFxuICB2YXIgaXNZT2RkID0gaiAmIDE7XG4gIHZhciBpc1NlY29uZEtleSA9IGogPj4gMTtcbiAgaWYgKHIuY21wKHRoaXMuY3VydmUucC51bW9kKHRoaXMuY3VydmUubikpID49IDAgJiYgaXNTZWNvbmRLZXkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGUnKTtcblxuICAvLyAxLjEuIExldCB4ID0gciArIGpuLlxuICBpZiAoaXNTZWNvbmRLZXkpXG4gICAgciA9IHRoaXMuY3VydmUucG9pbnRGcm9tWChyLmFkZCh0aGlzLmN1cnZlLm4pLCBpc1lPZGQpO1xuICBlbHNlXG4gICAgciA9IHRoaXMuY3VydmUucG9pbnRGcm9tWChyLCBpc1lPZGQpO1xuXG4gIHZhciBySW52ID0gc2lnbmF0dXJlLnIuaW52bShuKTtcbiAgdmFyIHMxID0gbi5zdWIoZSkubXVsKHJJbnYpLnVtb2Qobik7XG4gIHZhciBzMiA9IHMubXVsKHJJbnYpLnVtb2Qobik7XG5cbiAgLy8gMS42LjEgQ29tcHV0ZSBRID0gcl4tMSAoc1IgLSAgZUcpXG4gIC8vICAgICAgICAgICAgICAgUSA9IHJeLTEgKHNSICsgLWVHKVxuICByZXR1cm4gdGhpcy5nLm11bEFkZChzMSwgciwgczIpO1xufTtcblxuRUMucHJvdG90eXBlLmdldEtleVJlY292ZXJ5UGFyYW0gPSBmdW5jdGlvbihlLCBzaWduYXR1cmUsIFEsIGVuYykge1xuICBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKHNpZ25hdHVyZSwgZW5jKTtcbiAgaWYgKHNpZ25hdHVyZS5yZWNvdmVyeVBhcmFtICE9PSBudWxsKVxuICAgIHJldHVybiBzaWduYXR1cmUucmVjb3ZlcnlQYXJhbTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgIHZhciBRcHJpbWU7XG4gICAgdHJ5IHtcbiAgICAgIFFwcmltZSA9IHRoaXMucmVjb3ZlclB1YktleShlLCBzaWduYXR1cmUsIGkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChRcHJpbWUuZXEoUSkpXG4gICAgICByZXR1cm4gaTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kIHZhbGlkIHJlY292ZXJ5IGZhY3RvcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgdXRpbHMgPSBlbGxpcHRpYy51dGlscztcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG5cbmZ1bmN0aW9uIEtleVBhaXIoZWMsIG9wdGlvbnMpIHtcbiAgdGhpcy5lYyA9IGVjO1xuICB0aGlzLnByaXYgPSBudWxsO1xuICB0aGlzLnB1YiA9IG51bGw7XG5cbiAgLy8gS2V5UGFpcihlYywgeyBwcml2OiAuLi4sIHB1YjogLi4uIH0pXG4gIGlmIChvcHRpb25zLnByaXYpXG4gICAgdGhpcy5faW1wb3J0UHJpdmF0ZShvcHRpb25zLnByaXYsIG9wdGlvbnMucHJpdkVuYyk7XG4gIGlmIChvcHRpb25zLnB1YilcbiAgICB0aGlzLl9pbXBvcnRQdWJsaWMob3B0aW9ucy5wdWIsIG9wdGlvbnMucHViRW5jKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gS2V5UGFpcjtcblxuS2V5UGFpci5mcm9tUHVibGljID0gZnVuY3Rpb24gZnJvbVB1YmxpYyhlYywgcHViLCBlbmMpIHtcbiAgaWYgKHB1YiBpbnN0YW5jZW9mIEtleVBhaXIpXG4gICAgcmV0dXJuIHB1YjtcblxuICByZXR1cm4gbmV3IEtleVBhaXIoZWMsIHtcbiAgICBwdWI6IHB1YixcbiAgICBwdWJFbmM6IGVuY1xuICB9KTtcbn07XG5cbktleVBhaXIuZnJvbVByaXZhdGUgPSBmdW5jdGlvbiBmcm9tUHJpdmF0ZShlYywgcHJpdiwgZW5jKSB7XG4gIGlmIChwcml2IGluc3RhbmNlb2YgS2V5UGFpcilcbiAgICByZXR1cm4gcHJpdjtcblxuICByZXR1cm4gbmV3IEtleVBhaXIoZWMsIHtcbiAgICBwcml2OiBwcml2LFxuICAgIHByaXZFbmM6IGVuY1xuICB9KTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24gdmFsaWRhdGUoKSB7XG4gIHZhciBwdWIgPSB0aGlzLmdldFB1YmxpYygpO1xuXG4gIGlmIChwdWIuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIHJlYXNvbjogJ0ludmFsaWQgcHVibGljIGtleScgfTtcbiAgaWYgKCFwdWIudmFsaWRhdGUoKSlcbiAgICByZXR1cm4geyByZXN1bHQ6IGZhbHNlLCByZWFzb246ICdQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50JyB9O1xuICBpZiAoIXB1Yi5tdWwodGhpcy5lYy5jdXJ2ZS5uKS5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHsgcmVzdWx0OiBmYWxzZSwgcmVhc29uOiAnUHVibGljIGtleSAqIE4gIT0gTycgfTtcblxuICByZXR1cm4geyByZXN1bHQ6IHRydWUsIHJlYXNvbjogbnVsbCB9O1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuZ2V0UHVibGljID0gZnVuY3Rpb24gZ2V0UHVibGljKGNvbXBhY3QsIGVuYykge1xuICAvLyBjb21wYWN0IGlzIG9wdGlvbmFsIGFyZ3VtZW50XG4gIGlmICh0eXBlb2YgY29tcGFjdCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmMgPSBjb21wYWN0O1xuICAgIGNvbXBhY3QgPSBudWxsO1xuICB9XG5cbiAgaWYgKCF0aGlzLnB1YilcbiAgICB0aGlzLnB1YiA9IHRoaXMuZWMuZy5tdWwodGhpcy5wcml2KTtcblxuICBpZiAoIWVuYylcbiAgICByZXR1cm4gdGhpcy5wdWI7XG5cbiAgcmV0dXJuIHRoaXMucHViLmVuY29kZShlbmMsIGNvbXBhY3QpO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuZ2V0UHJpdmF0ZSA9IGZ1bmN0aW9uIGdldFByaXZhdGUoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB0aGlzLnByaXYudG9TdHJpbmcoMTYsIDIpO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMucHJpdjtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLl9pbXBvcnRQcml2YXRlID0gZnVuY3Rpb24gX2ltcG9ydFByaXZhdGUoa2V5LCBlbmMpIHtcbiAgdGhpcy5wcml2ID0gbmV3IEJOKGtleSwgZW5jIHx8IDE2KTtcblxuICAvLyBFbnN1cmUgdGhhdCB0aGUgcHJpdiB3b24ndCBiZSBiaWdnZXIgdGhhbiBuLCBvdGhlcndpc2Ugd2UgbWF5IGZhaWxcbiAgLy8gaW4gZml4ZWQgbXVsdGlwbGljYXRpb24gbWV0aG9kXG4gIHRoaXMucHJpdiA9IHRoaXMucHJpdi51bW9kKHRoaXMuZWMuY3VydmUubik7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5faW1wb3J0UHVibGljID0gZnVuY3Rpb24gX2ltcG9ydFB1YmxpYyhrZXksIGVuYykge1xuICBpZiAoa2V5LnggfHwga2V5LnkpIHtcbiAgICAvLyBNb250Z29tZXJ5IHBvaW50cyBvbmx5IGhhdmUgYW4gYHhgIGNvb3JkaW5hdGUuXG4gICAgLy8gV2VpZXJzdHJhc3MvRWR3YXJkcyBwb2ludHMgb24gdGhlIG90aGVyIGhhbmQgaGF2ZSBib3RoIGB4YCBhbmRcbiAgICAvLyBgeWAgY29vcmRpbmF0ZXMuXG4gICAgaWYgKHRoaXMuZWMuY3VydmUudHlwZSA9PT0gJ21vbnQnKSB7XG4gICAgICBhc3NlcnQoa2V5LngsICdOZWVkIHggY29vcmRpbmF0ZScpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5lYy5jdXJ2ZS50eXBlID09PSAnc2hvcnQnIHx8XG4gICAgICAgICAgICAgICB0aGlzLmVjLmN1cnZlLnR5cGUgPT09ICdlZHdhcmRzJykge1xuICAgICAgYXNzZXJ0KGtleS54ICYmIGtleS55LCAnTmVlZCBib3RoIHggYW5kIHkgY29vcmRpbmF0ZScpO1xuICAgIH1cbiAgICB0aGlzLnB1YiA9IHRoaXMuZWMuY3VydmUucG9pbnQoa2V5LngsIGtleS55KTtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5wdWIgPSB0aGlzLmVjLmN1cnZlLmRlY29kZVBvaW50KGtleSwgZW5jKTtcbn07XG5cbi8vIEVDREhcbktleVBhaXIucHJvdG90eXBlLmRlcml2ZSA9IGZ1bmN0aW9uIGRlcml2ZShwdWIpIHtcbiAgcmV0dXJuIHB1Yi5tdWwodGhpcy5wcml2KS5nZXRYKCk7XG59O1xuXG4vLyBFQ0RTQVxuS2V5UGFpci5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uIHNpZ24obXNnLCBlbmMsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRoaXMuZWMuc2lnbihtc2csIHRoaXMsIGVuYywgb3B0aW9ucyk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobXNnLCBzaWduYXR1cmUpIHtcbiAgcmV0dXJuIHRoaXMuZWMudmVyaWZ5KG1zZywgc2lnbmF0dXJlLCB0aGlzKTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICByZXR1cm4gJzxLZXkgcHJpdjogJyArICh0aGlzLnByaXYgJiYgdGhpcy5wcml2LnRvU3RyaW5nKDE2LCAyKSkgK1xuICAgICAgICAgJyBwdWI6ICcgKyAodGhpcy5wdWIgJiYgdGhpcy5wdWIuaW5zcGVjdCgpKSArICcgPic7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xuXG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBTaWduYXR1cmUob3B0aW9ucywgZW5jKSB7XG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgU2lnbmF0dXJlKVxuICAgIHJldHVybiBvcHRpb25zO1xuXG4gIGlmICh0aGlzLl9pbXBvcnRERVIob3B0aW9ucywgZW5jKSlcbiAgICByZXR1cm47XG5cbiAgYXNzZXJ0KG9wdGlvbnMuciAmJiBvcHRpb25zLnMsICdTaWduYXR1cmUgd2l0aG91dCByIG9yIHMnKTtcbiAgdGhpcy5yID0gbmV3IEJOKG9wdGlvbnMuciwgMTYpO1xuICB0aGlzLnMgPSBuZXcgQk4ob3B0aW9ucy5zLCAxNik7XG4gIGlmIChvcHRpb25zLnJlY292ZXJ5UGFyYW0gPT09IHVuZGVmaW5lZClcbiAgICB0aGlzLnJlY292ZXJ5UGFyYW0gPSBudWxsO1xuICBlbHNlXG4gICAgdGhpcy5yZWNvdmVyeVBhcmFtID0gb3B0aW9ucy5yZWNvdmVyeVBhcmFtO1xufVxubW9kdWxlLmV4cG9ydHMgPSBTaWduYXR1cmU7XG5cbmZ1bmN0aW9uIFBvc2l0aW9uKCkge1xuICB0aGlzLnBsYWNlID0gMDtcbn1cblxuZnVuY3Rpb24gZ2V0TGVuZ3RoKGJ1ZiwgcCkge1xuICB2YXIgaW5pdGlhbCA9IGJ1ZltwLnBsYWNlKytdO1xuICBpZiAoIShpbml0aWFsICYgMHg4MCkpIHtcbiAgICByZXR1cm4gaW5pdGlhbDtcbiAgfVxuICB2YXIgb2N0ZXRMZW4gPSBpbml0aWFsICYgMHhmO1xuICB2YXIgdmFsID0gMDtcbiAgZm9yICh2YXIgaSA9IDAsIG9mZiA9IHAucGxhY2U7IGkgPCBvY3RldExlbjsgaSsrLCBvZmYrKykge1xuICAgIHZhbCA8PD0gODtcbiAgICB2YWwgfD0gYnVmW29mZl07XG4gIH1cbiAgcC5wbGFjZSA9IG9mZjtcbiAgcmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gcm1QYWRkaW5nKGJ1Zikge1xuICB2YXIgaSA9IDA7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoIC0gMTtcbiAgd2hpbGUgKCFidWZbaV0gJiYgIShidWZbaSArIDFdICYgMHg4MCkgJiYgaSA8IGxlbikge1xuICAgIGkrKztcbiAgfVxuICBpZiAoaSA9PT0gMCkge1xuICAgIHJldHVybiBidWY7XG4gIH1cbiAgcmV0dXJuIGJ1Zi5zbGljZShpKTtcbn1cblxuU2lnbmF0dXJlLnByb3RvdHlwZS5faW1wb3J0REVSID0gZnVuY3Rpb24gX2ltcG9ydERFUihkYXRhLCBlbmMpIHtcbiAgZGF0YSA9IHV0aWxzLnRvQXJyYXkoZGF0YSwgZW5jKTtcbiAgdmFyIHAgPSBuZXcgUG9zaXRpb24oKTtcbiAgaWYgKGRhdGFbcC5wbGFjZSsrXSAhPT0gMHgzMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGVuID0gZ2V0TGVuZ3RoKGRhdGEsIHApO1xuICBpZiAoKGxlbiArIHAucGxhY2UpICE9PSBkYXRhLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZGF0YVtwLnBsYWNlKytdICE9PSAweDAyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBybGVuID0gZ2V0TGVuZ3RoKGRhdGEsIHApO1xuICB2YXIgciA9IGRhdGEuc2xpY2UocC5wbGFjZSwgcmxlbiArIHAucGxhY2UpO1xuICBwLnBsYWNlICs9IHJsZW47XG4gIGlmIChkYXRhW3AucGxhY2UrK10gIT09IDB4MDIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHNsZW4gPSBnZXRMZW5ndGgoZGF0YSwgcCk7XG4gIGlmIChkYXRhLmxlbmd0aCAhPT0gc2xlbiArIHAucGxhY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHMgPSBkYXRhLnNsaWNlKHAucGxhY2UsIHNsZW4gKyBwLnBsYWNlKTtcbiAgaWYgKHJbMF0gPT09IDAgJiYgKHJbMV0gJiAweDgwKSkge1xuICAgIHIgPSByLnNsaWNlKDEpO1xuICB9XG4gIGlmIChzWzBdID09PSAwICYmIChzWzFdICYgMHg4MCkpIHtcbiAgICBzID0gcy5zbGljZSgxKTtcbiAgfVxuXG4gIHRoaXMuciA9IG5ldyBCTihyKTtcbiAgdGhpcy5zID0gbmV3IEJOKHMpO1xuICB0aGlzLnJlY292ZXJ5UGFyYW0gPSBudWxsO1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gY29uc3RydWN0TGVuZ3RoKGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPCAweDgwKSB7XG4gICAgYXJyLnB1c2gobGVuKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG9jdGV0cyA9IDEgKyAoTWF0aC5sb2cobGVuKSAvIE1hdGguTE4yID4+PiAzKTtcbiAgYXJyLnB1c2gob2N0ZXRzIHwgMHg4MCk7XG4gIHdoaWxlICgtLW9jdGV0cykge1xuICAgIGFyci5wdXNoKChsZW4gPj4+IChvY3RldHMgPDwgMykpICYgMHhmZik7XG4gIH1cbiAgYXJyLnB1c2gobGVuKTtcbn1cblxuU2lnbmF0dXJlLnByb3RvdHlwZS50b0RFUiA9IGZ1bmN0aW9uIHRvREVSKGVuYykge1xuICB2YXIgciA9IHRoaXMuci50b0FycmF5KCk7XG4gIHZhciBzID0gdGhpcy5zLnRvQXJyYXkoKTtcblxuICAvLyBQYWQgdmFsdWVzXG4gIGlmIChyWzBdICYgMHg4MClcbiAgICByID0gWyAwIF0uY29uY2F0KHIpO1xuICAvLyBQYWQgdmFsdWVzXG4gIGlmIChzWzBdICYgMHg4MClcbiAgICBzID0gWyAwIF0uY29uY2F0KHMpO1xuXG4gIHIgPSBybVBhZGRpbmcocik7XG4gIHMgPSBybVBhZGRpbmcocyk7XG5cbiAgd2hpbGUgKCFzWzBdICYmICEoc1sxXSAmIDB4ODApKSB7XG4gICAgcyA9IHMuc2xpY2UoMSk7XG4gIH1cbiAgdmFyIGFyciA9IFsgMHgwMiBdO1xuICBjb25zdHJ1Y3RMZW5ndGgoYXJyLCByLmxlbmd0aCk7XG4gIGFyciA9IGFyci5jb25jYXQocik7XG4gIGFyci5wdXNoKDB4MDIpO1xuICBjb25zdHJ1Y3RMZW5ndGgoYXJyLCBzLmxlbmd0aCk7XG4gIHZhciBiYWNrSGFsZiA9IGFyci5jb25jYXQocyk7XG4gIHZhciByZXMgPSBbIDB4MzAgXTtcbiAgY29uc3RydWN0TGVuZ3RoKHJlcywgYmFja0hhbGYubGVuZ3RoKTtcbiAgcmVzID0gcmVzLmNvbmNhdChiYWNrSGFsZik7XG4gIHJldHVybiB1dGlscy5lbmNvZGUocmVzLCBlbmMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGhhc2ggPSByZXF1aXJlKCdoYXNoLmpzJyk7XG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xudmFyIHBhcnNlQnl0ZXMgPSB1dGlscy5wYXJzZUJ5dGVzO1xudmFyIEtleVBhaXIgPSByZXF1aXJlKCcuL2tleScpO1xudmFyIFNpZ25hdHVyZSA9IHJlcXVpcmUoJy4vc2lnbmF0dXJlJyk7XG5cbmZ1bmN0aW9uIEVERFNBKGN1cnZlKSB7XG4gIGFzc2VydChjdXJ2ZSA9PT0gJ2VkMjU1MTknLCAnb25seSB0ZXN0ZWQgd2l0aCBlZDI1NTE5IHNvIGZhcicpO1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBFRERTQSkpXG4gICAgcmV0dXJuIG5ldyBFRERTQShjdXJ2ZSk7XG5cbiAgdmFyIGN1cnZlID0gZWxsaXB0aWMuY3VydmVzW2N1cnZlXS5jdXJ2ZTtcbiAgdGhpcy5jdXJ2ZSA9IGN1cnZlO1xuICB0aGlzLmcgPSBjdXJ2ZS5nO1xuICB0aGlzLmcucHJlY29tcHV0ZShjdXJ2ZS5uLmJpdExlbmd0aCgpICsgMSk7XG5cbiAgdGhpcy5wb2ludENsYXNzID0gY3VydmUucG9pbnQoKS5jb25zdHJ1Y3RvcjtcbiAgdGhpcy5lbmNvZGluZ0xlbmd0aCA9IE1hdGguY2VpbChjdXJ2ZS5uLmJpdExlbmd0aCgpIC8gOCk7XG4gIHRoaXMuaGFzaCA9IGhhc2guc2hhNTEyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEVERFNBO1xuXG4vKipcbiogQHBhcmFtIHtBcnJheXxTdHJpbmd9IG1lc3NhZ2UgLSBtZXNzYWdlIGJ5dGVzXG4qIEBwYXJhbSB7QXJyYXl8U3RyaW5nfEtleVBhaXJ9IHNlY3JldCAtIHNlY3JldCBieXRlcyBvciBhIGtleXBhaXJcbiogQHJldHVybnMge1NpZ25hdHVyZX0gLSBzaWduYXR1cmVcbiovXG5FRERTQS5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uIHNpZ24obWVzc2FnZSwgc2VjcmV0KSB7XG4gIG1lc3NhZ2UgPSBwYXJzZUJ5dGVzKG1lc3NhZ2UpO1xuICB2YXIga2V5ID0gdGhpcy5rZXlGcm9tU2VjcmV0KHNlY3JldCk7XG4gIHZhciByID0gdGhpcy5oYXNoSW50KGtleS5tZXNzYWdlUHJlZml4KCksIG1lc3NhZ2UpO1xuICB2YXIgUiA9IHRoaXMuZy5tdWwocik7XG4gIHZhciBSZW5jb2RlZCA9IHRoaXMuZW5jb2RlUG9pbnQoUik7XG4gIHZhciBzXyA9IHRoaXMuaGFzaEludChSZW5jb2RlZCwga2V5LnB1YkJ5dGVzKCksIG1lc3NhZ2UpXG4gICAgICAgICAgICAgICAubXVsKGtleS5wcml2KCkpO1xuICB2YXIgUyA9IHIuYWRkKHNfKS51bW9kKHRoaXMuY3VydmUubik7XG4gIHJldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoeyBSOiBSLCBTOiBTLCBSZW5jb2RlZDogUmVuY29kZWQgfSk7XG59O1xuXG4vKipcbiogQHBhcmFtIHtBcnJheX0gbWVzc2FnZSAtIG1lc3NhZ2UgYnl0ZXNcbiogQHBhcmFtIHtBcnJheXxTdHJpbmd8U2lnbmF0dXJlfSBzaWcgLSBzaWcgYnl0ZXNcbiogQHBhcmFtIHtBcnJheXxTdHJpbmd8UG9pbnR8S2V5UGFpcn0gcHViIC0gcHVibGljIGtleVxuKiBAcmV0dXJucyB7Qm9vbGVhbn0gLSB0cnVlIGlmIHB1YmxpYyBrZXkgbWF0Y2hlcyBzaWcgb2YgbWVzc2FnZVxuKi9cbkVERFNBLnByb3RvdHlwZS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSwgc2lnLCBwdWIpIHtcbiAgbWVzc2FnZSA9IHBhcnNlQnl0ZXMobWVzc2FnZSk7XG4gIHNpZyA9IHRoaXMubWFrZVNpZ25hdHVyZShzaWcpO1xuICB2YXIga2V5ID0gdGhpcy5rZXlGcm9tUHVibGljKHB1Yik7XG4gIHZhciBoID0gdGhpcy5oYXNoSW50KHNpZy5SZW5jb2RlZCgpLCBrZXkucHViQnl0ZXMoKSwgbWVzc2FnZSk7XG4gIHZhciBTRyA9IHRoaXMuZy5tdWwoc2lnLlMoKSk7XG4gIHZhciBScGx1c0FoID0gc2lnLlIoKS5hZGQoa2V5LnB1YigpLm11bChoKSk7XG4gIHJldHVybiBScGx1c0FoLmVxKFNHKTtcbn07XG5cbkVERFNBLnByb3RvdHlwZS5oYXNoSW50ID0gZnVuY3Rpb24gaGFzaEludCgpIHtcbiAgdmFyIGhhc2ggPSB0aGlzLmhhc2goKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgaGFzaC51cGRhdGUoYXJndW1lbnRzW2ldKTtcbiAgcmV0dXJuIHV0aWxzLmludEZyb21MRShoYXNoLmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUubik7XG59O1xuXG5FRERTQS5wcm90b3R5cGUua2V5RnJvbVB1YmxpYyA9IGZ1bmN0aW9uIGtleUZyb21QdWJsaWMocHViKSB7XG4gIHJldHVybiBLZXlQYWlyLmZyb21QdWJsaWModGhpcywgcHViKTtcbn07XG5cbkVERFNBLnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0ID0gZnVuY3Rpb24ga2V5RnJvbVNlY3JldChzZWNyZXQpIHtcbiAgcmV0dXJuIEtleVBhaXIuZnJvbVNlY3JldCh0aGlzLCBzZWNyZXQpO1xufTtcblxuRUREU0EucHJvdG90eXBlLm1ha2VTaWduYXR1cmUgPSBmdW5jdGlvbiBtYWtlU2lnbmF0dXJlKHNpZykge1xuICBpZiAoc2lnIGluc3RhbmNlb2YgU2lnbmF0dXJlKVxuICAgIHJldHVybiBzaWc7XG4gIHJldHVybiBuZXcgU2lnbmF0dXJlKHRoaXMsIHNpZyk7XG59O1xuXG4vKipcbiogKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtam9zZWZzc29uLWVkZHNhLWVkMjU1MTktMDMjc2VjdGlvbi01LjJcbipcbiogRUREU0EgZGVmaW5lcyBtZXRob2RzIGZvciBlbmNvZGluZyBhbmQgZGVjb2RpbmcgcG9pbnRzIGFuZCBpbnRlZ2Vycy4gVGhlc2UgYXJlXG4qIGhlbHBlciBjb252ZW5pZW5jZSBtZXRob2RzLCB0aGF0IHBhc3MgYWxvbmcgdG8gdXRpbGl0eSBmdW5jdGlvbnMgaW1wbGllZFxuKiBwYXJhbWV0ZXJzLlxuKlxuKi9cbkVERFNBLnByb3RvdHlwZS5lbmNvZGVQb2ludCA9IGZ1bmN0aW9uIGVuY29kZVBvaW50KHBvaW50KSB7XG4gIHZhciBlbmMgPSBwb2ludC5nZXRZKCkudG9BcnJheSgnbGUnLCB0aGlzLmVuY29kaW5nTGVuZ3RoKTtcbiAgZW5jW3RoaXMuZW5jb2RpbmdMZW5ndGggLSAxXSB8PSBwb2ludC5nZXRYKCkuaXNPZGQoKSA/IDB4ODAgOiAwO1xuICByZXR1cm4gZW5jO1xufTtcblxuRUREU0EucHJvdG90eXBlLmRlY29kZVBvaW50ID0gZnVuY3Rpb24gZGVjb2RlUG9pbnQoYnl0ZXMpIHtcbiAgYnl0ZXMgPSB1dGlscy5wYXJzZUJ5dGVzKGJ5dGVzKTtcblxuICB2YXIgbGFzdEl4ID0gYnl0ZXMubGVuZ3RoIC0gMTtcbiAgdmFyIG5vcm1lZCA9IGJ5dGVzLnNsaWNlKDAsIGxhc3RJeCkuY29uY2F0KGJ5dGVzW2xhc3RJeF0gJiB+MHg4MCk7XG4gIHZhciB4SXNPZGQgPSAoYnl0ZXNbbGFzdEl4XSAmIDB4ODApICE9PSAwO1xuXG4gIHZhciB5ID0gdXRpbHMuaW50RnJvbUxFKG5vcm1lZCk7XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50RnJvbVkoeSwgeElzT2RkKTtcbn07XG5cbkVERFNBLnByb3RvdHlwZS5lbmNvZGVJbnQgPSBmdW5jdGlvbiBlbmNvZGVJbnQobnVtKSB7XG4gIHJldHVybiBudW0udG9BcnJheSgnbGUnLCB0aGlzLmVuY29kaW5nTGVuZ3RoKTtcbn07XG5cbkVERFNBLnByb3RvdHlwZS5kZWNvZGVJbnQgPSBmdW5jdGlvbiBkZWNvZGVJbnQoYnl0ZXMpIHtcbiAgcmV0dXJuIHV0aWxzLmludEZyb21MRShieXRlcyk7XG59O1xuXG5FRERTQS5wcm90b3R5cGUuaXNQb2ludCA9IGZ1bmN0aW9uIGlzUG9pbnQodmFsKSB7XG4gIHJldHVybiB2YWwgaW5zdGFuY2VvZiB0aGlzLnBvaW50Q2xhc3M7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xudmFyIHBhcnNlQnl0ZXMgPSB1dGlscy5wYXJzZUJ5dGVzO1xudmFyIGNhY2hlZFByb3BlcnR5ID0gdXRpbHMuY2FjaGVkUHJvcGVydHk7XG5cbi8qKlxuKiBAcGFyYW0ge0VERFNBfSBlZGRzYSAtIGluc3RhbmNlXG4qIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBwdWJsaWMvcHJpdmF0ZSBrZXkgcGFyYW1ldGVyc1xuKlxuKiBAcGFyYW0ge0FycmF5PEJ5dGU+fSBbcGFyYW1zLnNlY3JldF0gLSBzZWNyZXQgc2VlZCBieXRlc1xuKiBAcGFyYW0ge1BvaW50fSBbcGFyYW1zLnB1Yl0gLSBwdWJsaWMga2V5IHBvaW50IChha2EgYEFgIGluIGVkZHNhIHRlcm1zKVxuKiBAcGFyYW0ge0FycmF5PEJ5dGU+fSBbcGFyYW1zLnB1Yl0gLSBwdWJsaWMga2V5IHBvaW50IGVuY29kZWQgYXMgYnl0ZXNcbipcbiovXG5mdW5jdGlvbiBLZXlQYWlyKGVkZHNhLCBwYXJhbXMpIHtcbiAgdGhpcy5lZGRzYSA9IGVkZHNhO1xuICB0aGlzLl9zZWNyZXQgPSBwYXJzZUJ5dGVzKHBhcmFtcy5zZWNyZXQpO1xuICBpZiAoZWRkc2EuaXNQb2ludChwYXJhbXMucHViKSlcbiAgICB0aGlzLl9wdWIgPSBwYXJhbXMucHViO1xuICBlbHNlXG4gICAgdGhpcy5fcHViQnl0ZXMgPSBwYXJzZUJ5dGVzKHBhcmFtcy5wdWIpO1xufVxuXG5LZXlQYWlyLmZyb21QdWJsaWMgPSBmdW5jdGlvbiBmcm9tUHVibGljKGVkZHNhLCBwdWIpIHtcbiAgaWYgKHB1YiBpbnN0YW5jZW9mIEtleVBhaXIpXG4gICAgcmV0dXJuIHB1YjtcbiAgcmV0dXJuIG5ldyBLZXlQYWlyKGVkZHNhLCB7IHB1YjogcHViIH0pO1xufTtcblxuS2V5UGFpci5mcm9tU2VjcmV0ID0gZnVuY3Rpb24gZnJvbVNlY3JldChlZGRzYSwgc2VjcmV0KSB7XG4gIGlmIChzZWNyZXQgaW5zdGFuY2VvZiBLZXlQYWlyKVxuICAgIHJldHVybiBzZWNyZXQ7XG4gIHJldHVybiBuZXcgS2V5UGFpcihlZGRzYSwgeyBzZWNyZXQ6IHNlY3JldCB9KTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLnNlY3JldCA9IGZ1bmN0aW9uIHNlY3JldCgpIHtcbiAgcmV0dXJuIHRoaXMuX3NlY3JldDtcbn07XG5cbmNhY2hlZFByb3BlcnR5KEtleVBhaXIsICdwdWJCeXRlcycsIGZ1bmN0aW9uIHB1YkJ5dGVzKCkge1xuICByZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCAncHViJywgZnVuY3Rpb24gcHViKCkge1xuICBpZiAodGhpcy5fcHViQnl0ZXMpXG4gICAgcmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5fcHViQnl0ZXMpO1xuICByZXR1cm4gdGhpcy5lZGRzYS5nLm11bCh0aGlzLnByaXYoKSk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoS2V5UGFpciwgJ3ByaXZCeXRlcycsIGZ1bmN0aW9uIHByaXZCeXRlcygpIHtcbiAgdmFyIGVkZHNhID0gdGhpcy5lZGRzYTtcbiAgdmFyIGhhc2ggPSB0aGlzLmhhc2goKTtcbiAgdmFyIGxhc3RJeCA9IGVkZHNhLmVuY29kaW5nTGVuZ3RoIC0gMTtcblxuICB2YXIgYSA9IGhhc2guc2xpY2UoMCwgZWRkc2EuZW5jb2RpbmdMZW5ndGgpO1xuICBhWzBdICY9IDI0ODtcbiAgYVtsYXN0SXhdICY9IDEyNztcbiAgYVtsYXN0SXhdIHw9IDY0O1xuXG4gIHJldHVybiBhO1xufSk7XG5cbmNhY2hlZFByb3BlcnR5KEtleVBhaXIsICdwcml2JywgZnVuY3Rpb24gcHJpdigpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkpO1xufSk7XG5cbmNhY2hlZFByb3BlcnR5KEtleVBhaXIsICdoYXNoJywgZnVuY3Rpb24gaGFzaCgpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuaGFzaCgpLnVwZGF0ZSh0aGlzLnNlY3JldCgpKS5kaWdlc3QoKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCAnbWVzc2FnZVByZWZpeCcsIGZ1bmN0aW9uIG1lc3NhZ2VQcmVmaXgoKSB7XG4gIHJldHVybiB0aGlzLmhhc2goKS5zbGljZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3RoKTtcbn0pO1xuXG5LZXlQYWlyLnByb3RvdHlwZS5zaWduID0gZnVuY3Rpb24gc2lnbihtZXNzYWdlKSB7XG4gIGFzc2VydCh0aGlzLl9zZWNyZXQsICdLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeScpO1xuICByZXR1cm4gdGhpcy5lZGRzYS5zaWduKG1lc3NhZ2UsIHRoaXMpO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UsIHNpZykge1xuICByZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkobWVzc2FnZSwgc2lnLCB0aGlzKTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLmdldFNlY3JldCA9IGZ1bmN0aW9uIGdldFNlY3JldChlbmMpIHtcbiAgYXNzZXJ0KHRoaXMuX3NlY3JldCwgJ0tleVBhaXIgaXMgcHVibGljIG9ubHknKTtcbiAgcmV0dXJuIHV0aWxzLmVuY29kZSh0aGlzLnNlY3JldCgpLCBlbmMpO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuZ2V0UHVibGljID0gZnVuY3Rpb24gZ2V0UHVibGljKGVuYykge1xuICByZXR1cm4gdXRpbHMuZW5jb2RlKHRoaXMucHViQnl0ZXMoKSwgZW5jKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gS2V5UGFpcjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgdXRpbHMgPSBlbGxpcHRpYy51dGlscztcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG52YXIgY2FjaGVkUHJvcGVydHkgPSB1dGlscy5jYWNoZWRQcm9wZXJ0eTtcbnZhciBwYXJzZUJ5dGVzID0gdXRpbHMucGFyc2VCeXRlcztcblxuLyoqXG4qIEBwYXJhbSB7RUREU0F9IGVkZHNhIC0gZWRkc2EgaW5zdGFuY2VcbiogQHBhcmFtIHtBcnJheTxCeXRlcz58T2JqZWN0fSBzaWcgLVxuKiBAcGFyYW0ge0FycmF5PEJ5dGVzPnxQb2ludH0gW3NpZy5SXSAtIFIgcG9pbnQgYXMgUG9pbnQgb3IgYnl0ZXNcbiogQHBhcmFtIHtBcnJheTxCeXRlcz58Ym59IFtzaWcuU10gLSBTIHNjYWxhciBhcyBibiBvciBieXRlc1xuKiBAcGFyYW0ge0FycmF5PEJ5dGVzPn0gW3NpZy5SZW5jb2RlZF0gLSBSIHBvaW50IGVuY29kZWRcbiogQHBhcmFtIHtBcnJheTxCeXRlcz59IFtzaWcuU2VuY29kZWRdIC0gUyBzY2FsYXIgZW5jb2RlZFxuKi9cbmZ1bmN0aW9uIFNpZ25hdHVyZShlZGRzYSwgc2lnKSB7XG4gIHRoaXMuZWRkc2EgPSBlZGRzYTtcblxuICBpZiAodHlwZW9mIHNpZyAhPT0gJ29iamVjdCcpXG4gICAgc2lnID0gcGFyc2VCeXRlcyhzaWcpO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHNpZykpIHtcbiAgICBzaWcgPSB7XG4gICAgICBSOiBzaWcuc2xpY2UoMCwgZWRkc2EuZW5jb2RpbmdMZW5ndGgpLFxuICAgICAgUzogc2lnLnNsaWNlKGVkZHNhLmVuY29kaW5nTGVuZ3RoKVxuICAgIH07XG4gIH1cblxuICBhc3NlcnQoc2lnLlIgJiYgc2lnLlMsICdTaWduYXR1cmUgd2l0aG91dCBSIG9yIFMnKTtcblxuICBpZiAoZWRkc2EuaXNQb2ludChzaWcuUikpXG4gICAgdGhpcy5fUiA9IHNpZy5SO1xuICBpZiAoc2lnLlMgaW5zdGFuY2VvZiBCTilcbiAgICB0aGlzLl9TID0gc2lnLlM7XG5cbiAgdGhpcy5fUmVuY29kZWQgPSBBcnJheS5pc0FycmF5KHNpZy5SKSA/IHNpZy5SIDogc2lnLlJlbmNvZGVkO1xuICB0aGlzLl9TZW5jb2RlZCA9IEFycmF5LmlzQXJyYXkoc2lnLlMpID8gc2lnLlMgOiBzaWcuU2VuY29kZWQ7XG59XG5cbmNhY2hlZFByb3BlcnR5KFNpZ25hdHVyZSwgJ1MnLCBmdW5jdGlvbiBTKCkge1xuICByZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5jb2RlZCgpKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShTaWduYXR1cmUsICdSJywgZnVuY3Rpb24gUigpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2RlZCgpKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShTaWduYXR1cmUsICdSZW5jb2RlZCcsIGZ1bmN0aW9uIFJlbmNvZGVkKCkge1xuICByZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLlIoKSk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoU2lnbmF0dXJlLCAnU2VuY29kZWQnLCBmdW5jdGlvbiBTZW5jb2RlZCgpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKTtcbn0pO1xuXG5TaWduYXR1cmUucHJvdG90eXBlLnRvQnl0ZXMgPSBmdW5jdGlvbiB0b0J5dGVzKCkge1xuICByZXR1cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNvZGVkKCkpO1xufTtcblxuU2lnbmF0dXJlLnByb3RvdHlwZS50b0hleCA9IGZ1bmN0aW9uIHRvSGV4KCkge1xuICByZXR1cm4gdXRpbHMuZW5jb2RlKHRoaXMudG9CeXRlcygpLCAnaGV4JykudG9VcHBlckNhc2UoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gU2lnbmF0dXJlO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRvdWJsZXM6IHtcbiAgICBzdGVwOiA0LFxuICAgIHBvaW50czogW1xuICAgICAgW1xuICAgICAgICAnZTYwZmNlOTNiNTllOWVjNTMwMTFhYWJjMjFjMjNlOTdiMmEzMTM2OWI4N2E1YWU5YzQ0ZWU4OWUyYTZkZWMwYScsXG4gICAgICAgICdmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzgyODIyNjMyMTJjNjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNmZDVmNTE1MDgnLFxuICAgICAgICAnMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNzVlMTU5ZjcyOGI4NjVhNzJmOTljYzZjNmZjODQ2ZGUwYjkzODMzZmQyMjIyZWQ3M2ZjZTViNTUxZTViNzM5JyxcbiAgICAgICAgJ2QzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzYzZDkwZDQ0N2IwMGM5Yzk5Y2VhYzA1YjYyNjJlZTA1MzQ0MWM3ZTU1NTUyZmZlNTI2YmFkOGY4M2ZmNDY0MCcsXG4gICAgICAgICc0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGI0YjVmMTY1ZGYzYzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwYycsXG4gICAgICAgICc0YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzcyM2NiYWE2ZTVkYjk5NmQ2YmY3NzFjMDBiZDU0OGM3YjcwMGRiZmZhNmMwZTc3YmNiNjExNTkyNTIzMmZjZGEnLFxuICAgICAgICAnOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIzOWY1ZidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlZWJmYTRkNDkzYmViZjk4YmE1ZmVlYzgxMmMyZDNiNTA5NDc5NjEyMzdhOTE5ODM5YTUzM2VjYTBlN2RkN2ZhJyxcbiAgICAgICAgJzVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTAwZjQ0ZGE2OTZlNzE2NzI3OTFkMGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMCcsXG4gICAgICAgICdjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2UxMDMxYmUyNjJjN2VkMWIxZGM5MjI3YTRhMDRjMDE3YTc3ZjhkNDQ2NGYzYjM4NTJjOGFjZGU2ZTUzNGZkMmQnLFxuICAgICAgICAnOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmZWVhNmNhZTQ2ZDU1YjUzMGFjMjgzOWYxNDNiZDdlYzVjZjhiMjY2YTQxZDZhZjUyZDVlNjg4ZDkwOTQ2OTZkJyxcbiAgICAgICAgJ2U1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGE2N2E5MWQ5MTA0OWNkY2IzNjdiZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMScsXG4gICAgICAgICc5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzUzOTA0ZmFhMGIzMzRjZGRhNmUwMDA5MzVlZjIyMTUxZWMwOGQwZjdiYjExMDY5ZjU3NTQ1Y2NjMWEzN2I3YzAnLFxuICAgICAgICAnNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5OWRjYjA5NmIwMjI3NzFjOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4ZTdiY2QwYmQzNTk4M2E3NzE5Y2NhNzc2NGNhOTA2Nzc5YjUzYTA0M2E5YjhiY2FlZmY5NTlmNDNhZDg2MDQ3JyxcbiAgICAgICAgJzEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzg1ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFiZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MicsXG4gICAgICAgICcyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEzZGZhMTgwZmRkZjg0YTU5NDdmYmM5YzYwNmVkODZjM2ZhYzNhNycsXG4gICAgICAgICc3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzMzMjJkNDAxMjQzYzRlMjU4MmEyMTQ3YzEwNGQ2ZWNiZjc3NGQxNjNkYjBmNWU1MzEzYjdlMGU3NDJkMGU2YmQnLFxuICAgICAgICAnNTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzJyxcbiAgICAgICAgJzdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTQ4YmY4MDliMTk4OGE0NmIwNmM5ZjE5MTk0MTNiMTBmOTIyNmM2MGY2Njg4MzJmZmQ5NTlhZjYwYzgyYTBhJyxcbiAgICAgICAgJzUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhjOGU1ODknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNjI2MGNlN2Y0NjE4MDFjMzRmMDY3Y2UwZjAyODczYThmMWIwZTQ0ZGZjNjk3NTJhY2NlY2Q4MTlmMzhmZDhlOCcsXG4gICAgICAgICdiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U1MDM3ZGUwYWZjMWQ4ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmQnLFxuICAgICAgICAnNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThkYmQxYzZhNmM1YjcyNTg2NmEwYWU0ZmNlNzI1JyxcbiAgICAgICAgJzdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMjEzYzdhNzE1Y2Q1ZDQ1MzU4ZDBiYmY5ZGMwY2UwMjIwNGIxMGJkZGUyYTNmNTg1NDBhZDY5MDhkMDU1OTc1NCcsXG4gICAgICAgICc0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzRlN2MyNzJhN2FmNGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBhZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2MnLFxuICAgICAgICAnMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmZWE3NGUzZGJlNzc4YjFiMTBmMjM4YWQ2MTY4NmFhNWM3NmUzZGIyYmU0MzA1NzYzMjQyN2UyODQwZmIyN2I2JyxcbiAgICAgICAgJzZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzZlNjQxMTNmNjc3Y2YwZTEwYTI1NzBkNTk5OTY4ZDMxNTQ0ZTE3OWI3NjA0MzI5NTJjMDJhNDQxN2JkZGUzOScsXG4gICAgICAgICdjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2M3MzhjNTZiMDNiMmFiZTFlODI4MWJhYTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNhYjE1MDI0MmJjYmI4OTEnLFxuICAgICAgICAnODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUwMTQzNzJlOWY2NTg4ZjZjMTRiJyxcbiAgICAgICAgJ2ZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYjhkYTk0MDMyYTk1NzUxOGViMGY2NDMzNTcxZTg3NjFjZWZmYzczNjkzZTg0ZWRkNDkxNTBhNTY0ZjY3NmUwMycsXG4gICAgICAgICcyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U4MGZlYTE0NDQxZmIzM2E3ZDhhZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYxYTExNzc4ZTNjMGRmNWQnLFxuICAgICAgICAnZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhMzAxNjk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2NzU0M2YyYTE4MjAzMWVmZDY5MTVkZGMwN2JiY2M0ZTE2MDcwJyxcbiAgICAgICAgJzczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTBhZDg1YjM4OWQ2YjkzNjQ2M2Y5ZDA1MTI2NzhkZTIwOGNjMzMwYjExMzA3ZmZmYWI3YWM2M2UzZmIwNGVkNCcsXG4gICAgICAgICdlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVlODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0YzBkYScsXG4gICAgICAgICc2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U0ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUwNTMyMzFlMTEnLFxuICAgICAgICAnMWU2MzYzM2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4YzAwZmE5YjE4ZWJmMzMxZWI5NjE1MzdhNDVhNDI2NmM3MDM0ZjJmMGQ0ZTFkMDcxNmZiNmVhZTIwZWFlMjllJyxcbiAgICAgICAgJ2VmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTllOThlZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNiM2U0MScsXG4gICAgICAgICcyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2I2NDU5ZTBlZTM2NjJlYzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNiOTY3ZDc5NDI0ZjNjZjI5ZWIzZGU2YjgwZWYnLFxuICAgICAgICAnNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q2OGE4MGM4MjgwYmI4NDA3OTMyMzRhYTExOGYwNjIzMWQ2ZjFmYzY3ZTczYzVhNWRlZGEwZjViNDk2OTQzZTgnLFxuICAgICAgICAnZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0NDljZWE0MDk1OTgwZmMyOGQzZDVkJyxcbiAgICAgICAgJzY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNGRmOWMxNDkxOWNkZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NicsXG4gICAgICAgICczNWVjNTEwOTJkODcyODA1MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc5YzM5MTlhODRhNDc0ODcwZmFlZDhhOWMxY2M2NjAyMTUyMzQ4OTA1NGQ3ZjAzMDhjYmZjOTljOGFjMWY5OGNkJyxcbiAgICAgICAgJ2RkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkzYThiOTFkNGNjNWEyMTM4MjEyMGE5NTllNScsXG4gICAgICAgICc5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2E1NzZkZjhlMjNhMDg0MTE0MjE0MzlhNDUxOGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIxYTY5NzNlZWNiOTQyNjYnLFxuICAgICAgICAnNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3Nzc4YTc4YzI4ZGVjM2UzMGEwNWZlOTYyOWRlOGMzOGJiMzBkMWY1Y2Y5YTNhMjA4Zjc2Mzg4OWJlNThhZDcxJyxcbiAgICAgICAgJzM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5YzA2ZDkwM2FjJyxcbiAgICAgICAgJ2MyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODVkMGZlZjNlYzZkYjEwOTM5OTA2NGYzYTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MScsXG4gICAgICAgICcxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5NmU1ODJjZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ZmMmIwZGNlOTdlZWNlOTdjMWM5YjYwNDE3OThiODVkZmRmYjZkODg4MmRhMjAzMDhmNTQwNDgyNDUyNjA4N2UnLFxuICAgICAgICAnNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4MjdmYmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3ODBlNWUyY2Y4NTZlMjQxJyxcbiAgICAgICAgJ2M2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWFhNjQ5ZjIxZjUxYmRiYWU3YmU0YWUzNGNlNmU1MjE3YTU4ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIwZTJiMycsXG4gICAgICAgICdiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U0YTQyZDQzYzVjZjE2OWQ5MzkxZGY2ZGVjZjQyZWU1NDFiNmQ4ZjBjOWExMzc0MDFlMjM2MzJkZGEzNGQyNGYnLFxuICAgICAgICAnNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxZWM4MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5JyxcbiAgICAgICAgJ2FlZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTQ2YTc3OGMwNDY3MGMyZjkxYjAwYWY0NjgwZGZhOGJjZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZScsXG4gICAgICAgICdiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4NzBhYWE5NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ZhNTBjMGY2MWQyMmU1ZjA3ZTNhY2ViYjFhYTA3YjEyOGQwMDEyMjA5YTI4Yjk3NzZkNzZhODc5MzE4MGVlZjknLFxuICAgICAgICAnNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkYTFkNjFkMGNhNzIxYTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVmMDY3ZWMyJyxcbiAgICAgICAgJzgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYThlMjgyZmYwYzk3MDY5MDcyMTVmZjk4ZThmZDQxNjYxNTMxMWRlMDQ0NmYxZTA2MmE3M2IwNjEwZDA2NGUxMycsXG4gICAgICAgICc3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE3NGE1M2I5YzlhMjg1ODcyZDM5ZTU2ZTY5MTNjYWIxNWQ1OWIxZmE1MTI1MDhjMDIyZjM4MmRlODMxOTQ5N2MnLFxuICAgICAgICAnY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3MydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc5NTkzOTY5ODE5NDM3ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhJyxcbiAgICAgICAgJzJlN2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDJhNjNhNTBhZTQwMWU1NmQ2NDVhMTE1M2IxMDlhOGZjY2EwYTQzZDU2MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MScsXG4gICAgICAgICdlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBhZjQ4NGNhNTJkNDE0MjE3NGRjZjg5NDA1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzY0NTg3ZTIzMzU0NzFlYjg5MGVlNzg5NmQ3Y2ZkYzg2NmJhY2JkYmQzODM5MzE3YjM0MzZmOWI0NTYxN2UwNzMnLFxuICAgICAgICAnZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4JyxcbiAgICAgICAgJzM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2UnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTM0NjRhNTdhNzgxMDJhYTYyYjY5NzlhZTgxN2Y0NjM3ZmZjZmVkM2M0YjFjZTMwYmNkNjMwM2Y2Y2FmNjY2YicsXG4gICAgICAgICc2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2JjNGE5ZGY1YjcxM2ZlMmU5YWVmNDMwYmNjMWRjOTdhMGNkOWNjZWRlMmYyODU4OGNhZGEzYTBkMmQ4M2YzNjYnLFxuICAgICAgICAnZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzhjMjhhOTdiZjgyOThiYzBkMjNkOGM3NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWEnLFxuICAgICAgICAnNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4ZWE5NjY2MTM5NTI3YThjMWRkOTRjZTRmMDcxZmQyM2M4YjM1MGM1YTRiYjMzNzQ4YzRiYTExMWZhY2NhZTAnLFxuICAgICAgICAnNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVhZjM0YTMwZTYyYjk0NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkZDM2MjVmYWVmNWJhMDYwNzQ2Njk3MTZiYmQzNzg4ZDg5YmRkZTgxNTk1OTk2ODA5MmY3NmNjNGViOWE5Nzg3JyxcbiAgICAgICAgJzdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZjcxMGQ3OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2ZlYjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZScsXG4gICAgICAgICdlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyJ1xuICAgICAgXVxuICAgIF1cbiAgfSxcbiAgbmFmOiB7XG4gICAgd25kOiA3LFxuICAgIHBvaW50czogW1xuICAgICAgW1xuICAgICAgICAnZjkzMDhhMDE5MjU4YzMxMDQ5MzQ0Zjg1Zjg5ZDUyMjliNTMxYzg0NTgzNmY5OWIwODYwMWYxMTNiY2UwMzZmOScsXG4gICAgICAgICczODhmN2IwZjYzMmRlODE0MGZlMzM3ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5ZmQ3NTg0YjhlNjcyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzJmOGJkZTRkMWEwNzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFiN2NiYThkNTY5YjI0MGVmZTQnLFxuICAgICAgICAnZDhhYzIyMjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0MjZmNzg4MjcxYmFiMGQ2ODQwZGNhODdkM2FhNmFjNjJkNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5YjdlMDMzMGUzOWNlOTJiZGRlZGNhYzRmOWJjJyxcbiAgICAgICAgJzZhZWJjYTQwYmEyNTU5NjBhMzE3OGQ2ZDg2MWE1NGRiYTgxM2QwYjgxM2ZkZTdiNWE1MDgyNjI4MDg3MjY0ZGEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYWNkNDg0ZTJmMGM3ZjY1MzA5YWQxNzhhOWY1NTlhYmRlMDk3OTY5NzRjNTdlNzE0YzM1ZjExMGRmYzI3Y2NiZScsXG4gICAgICAgICdjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFkZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5YzM3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRhMDA4Y2InLFxuICAgICAgICAnZDk4NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0YzljOTUzYzYxYidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmMjg3NzNjMmQ5NzUyODhiYzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVkZGY4ZjE5NDA1YWE4JyxcbiAgICAgICAgJ2FiMDkwMmU4ZDg4MGE4OTc1ODIxMmViNjVjZGFmNDczYTFhMDZkYTUyMWZhOTFmMjliNWNiNTJkYjAzZWQ4MSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkNzkyNGQ0ZjdkNDNlYTk2NWE0NjVhZTMwOTVmZjQxMTMxZTU5NDZmM2M4NWY3OWU0NGFkYmNmOGUyN2UwODBlJyxcbiAgICAgICAgJzU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVmZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZiNTgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGVmZGVhNGNkYjY3Nzc1MGE0MjBmZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0YTJkNGEzNCcsXG4gICAgICAgICc0MjExYWIwNjk0NjM1MTY4ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEwNGE5NWMwZjZjZmIxOTlmNjllNTZlYjc3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzJiNGVhMGE3OTdhNDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQyNzc0NzU2NTYxMzgzODViNmMnLFxuICAgICAgICAnODVlODliYzAzNzk0NWQ5M2IzNDMwODNiNWExYzg2MTMxYTAxZjYwYzUwMjY5NzYzYjU3MGM4NTRlNWMwOWI3YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczNTJiYmY0YTRjZGQxMjU2NGY5M2ZhMzMyY2UzMzMzMDFkOWFkNDAyNzFmODEwNzE4MTM0MGFlZjI1YmU1OWQ1JyxcbiAgICAgICAgJzMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIxMDM5YzY3YmQzZDhiY2Y4MTk5OGMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRlNDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZicsXG4gICAgICAgICcyZGUxMDY4Mjk1ZGQ4NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTI0ODI3OWIwOWI0ZDY4ZGFiMjFhOWIwNjZlZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1MzcxNCcsXG4gICAgICAgICc3MzAxNmY3YmYyMzRhYWRlNWQxYWE3MWJkZWEyYjFmZjNmYzBkZTJhODg3OTEyZmZlNTRhMzJjZTk3Y2IzNDAyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RhZWQ0ZjJiZTNhOGJmMjc4ZTcwMTMyZmIwYmViNzUyMmY1NzBlMTQ0YmY2MTVjMDdlOTk2ZDQ0M2RlZTg3MjknLFxuICAgICAgICAnYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIzMGYzYWZhNzI2YWI0MGU1MjI5MGJlMWM1NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2RiJyxcbiAgICAgICAgJzIxMTlhNDYwY2UzMjZjZGM3NmM0NTkyNmM5ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEwMzkwNjNmMGUwZTY0ODInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNmEyNDViZjZkYzY5ODUwNGM4OWEyMGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2JkMjY5ZTZiNCcsXG4gICAgICAgICdlMDIyY2Y0MmMyYmQ0YTcwOGIzZjUxMjZmMTZhMjRhZDhiMzNiYTQ4ZDA0MjNiNmVmZDVlNjM0ODEwMGQ4YTgyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE2OTdmZmE2ZmQ5ZGU2MjdjMDc3ZTNkMmZlNTQxMDg0Y2UxMzMwMGIwYmVjMTE0NmY5NWFlNTdmMGQwYmQ2YTUnLFxuICAgICAgICAnYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlkNjNkMDFiMjM5NidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2MDViZGIwMTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZiN2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5JyxcbiAgICAgICAgJzI5NzJkMmRlNGY4ZDIwNjgxYTc4ZDkzZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2MmQxNGRhYjQxNTBiZjQ5NzQwMmZkYzQ1YTIxNWUxMGRjYjAxYzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkJyxcbiAgICAgICAgJzgwZmMwNmJkOGNjNWIwMTA5ODA4OGExOTUwZWVkMGRiMDFhYTEzMjk2N2FiNDcyMjM1ZjU2NDI0ODNiMjVlYWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODBjNjBhZDAwNDBmMjdkYWRlNWI0YjA2YzQwOGU1NmIyYzUwZTlmNTZiOWI4YjQyNWU1NTVjMmY4NjMwOGI2ZicsXG4gICAgICAgICcxYzM4MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIxYWEwMWY1NjQzMGJkNTdhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmInLFxuICAgICAgICAnZDBlM2ZhOWVjYTg3MjY5MDk1NTllMGQ3OTI2OTA0NmJkYzU5ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRjN2Y3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q1MjhlY2Q5YjY5NmI1NGM5MDdhOWVkMDQ1NDQ3YTc5YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzknLFxuICAgICAgICAnZWVjZjQxMjUzMTM2ZTVmOTk5NjZmMjE4ODFmZDY1NmViYzQzNDU0MDVjNTIwZGJjMDYzNDY1YjUyMTQwOTkzMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0OTM3MGE0YjVmNDM0MTJlYTI1ZjUxNGU4ZWNkYWQwNTI2NjExNWU0YTdlY2IxMzg3MjMxODA4ZjhiNDU5NjMnLFxuICAgICAgICAnNzU4ZjNmNDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3N2YyMzA5MzZlZTg4Y2JiZDczZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2ViMWZjMzQ1ZDc0JyxcbiAgICAgICAgJzk1OGVmNDJhNzg4NmI2NDAwYTA4MjY2ZTliYTFiMzc4OTZjOTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZjJkYWM5OTFjYzRjZTRiOWVhNDQ4ODdlNWM3YzBiY2U1OGM4MDA3NGFiOWQ0ZGJhZWIyODUzMWI3NzM5ZjUzMCcsXG4gICAgICAgICdlMGRlZGM5YjNiMmY4ZGFkNGRhMWYzMmRlYzI1MzFkZjllYjVmYmViMDU5OGU0ZmQxYTExN2RiYTcwM2EzYzM3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzQ2M2IzZDlmNjYyNjIxZmIxYjRiZThmYmJlMjUyMDEyNWEyMTZjZGZjOWRhZTNkZWJjYmE0ODUwYzY5MGQ0NWInLFxuICAgICAgICAnNWVkNDMwZDc4YzI5NmMzNTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3MzA3ZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmMTZmODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0OTZiNDk5OThmMjQ3JyxcbiAgICAgICAgJ2NlZGFiZDliODIyMDNmN2UxM2QyMDZmY2RmNGUzM2Q5MmE2YzUzYzI2ZTVjY2UyNmQ2NTc5OTYyYzRlMzFkZjYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnY2FmNzU0MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1ZDI0NTMxNWFjZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMScsXG4gICAgICAgICdjYjQ3NDY2MGVmMzVmNWYyYTQxYjY0M2ZhNWU0NjA1NzVmNGZhOWI3OTYyMjMyYTVjMzJmOTA4MzE4YTA0NDc2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzI2MDBjYTRiMjgyY2I5ODZmODVkMGYxNzA5OTc5ZDhiNDRhMDljMDdjYjg2ZDdjMTI0NDk3YmM4NmYwODIxMjAnLFxuICAgICAgICAnNDExOWI4ODc1M2MxNWJkNmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NjM1Y2E3MmQ3ZTg0MzJjMzM4ZWM1M2NkMTIyMjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1JyxcbiAgICAgICAgJzkxYjY0OTYwOTQ4OWQ2MTNkMWQ1ZTU5MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0OGJhZDllNzZmMzAyYzViOWM2MSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NTRlMzIzOWYzMjU1NzBjZGJiZjRhODdkZWVlOGE2NmI3ZjJiMzM0NzlkNDY4ZmJjMWE1MDc0M2JmNTZjYzE4JyxcbiAgICAgICAgJzY3M2ZiODZlNWJkYTMwZmIzY2QwZWQzMDRlYTQ5YTAyM2VlMzNkMDE5N2E2OTVkMGM1ZDk4MDkzYzUzNjY4MydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlM2U2YmQxMDcxYTFlOTZhZmY1Nzg1OWM4MmQ1NzBmMDMzMDgwMDY2MWQxYzk1MmY5ZmUyNjk0NjkxZDliOWU4JyxcbiAgICAgICAgJzU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZlYicsXG4gICAgICAgICczYjk1MmQzMmM2N2NmNzdlMmUxNzQ0NmUyMDQxODBhYjIxZmI4MDkwODk1MTM4YjRhNGE3OTdmODZlODA4ODhiJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RmOWQ3MGE2Yjk4NzZjZTU0NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3ZDljOTFhODMyMTcyNGNlMDk2M2YnLFxuICAgICAgICAnNTVlYjJkYWZkODRkNmNjZDVmODYyYjc4NWRjMzlkNGFiMTU3MjIyNzIwZWY5ZGEyMTdiOGM0NWNmMmJhMjQxNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1ZWRkNWNjMjNjNTFlODdhNDk3Y2E4MTVkNWRjZTBmOGFiNTI1NTRmODQ5ZWQ4OTk1ZGU2NGM1ZjM0Y2U3MTQzJyxcbiAgICAgICAgJ2VmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMwYzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMjkwNzk4YzJiNjQ3NjgzMGRhMTJmZTAyMjg3ZTllNzc3YWEzZmJhMWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYScsXG4gICAgICAgICdlMzhkYTc2ZGNkNDQwNjIxOTg4ZDAwYmNmNzlhZjI1ZDViMjljMDk0ZGIyYTIzMTQ2ZDAwM2FmZDQxOTQzZTdhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2FmM2M0MjNhOTVkOWY1YjMwNTQ3NTRlZmExNTBhYzM5Y2QyOTU1MmZlMzYwMjU3MzYyZGZkZWNlZjQwNTNiNDUnLFxuICAgICAgICAnZjk4YTNmZDgzMWViMmI3NDlhOTNiMGU2ZjM1Y2ZiNDBjOGNkNWFhNjY3YTE1NTgxYmMyZmVkZWQ0OThmZDljNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NjZkYmIyNGQxMzRlNzQ1Y2NjYWEyOGM5OWJmMjc0OTA2YmI2NmIyNmRjZjk4ZGY4ZDJmZWQ1MGQ4ODQyNDlhJyxcbiAgICAgICAgJzc0NGIxMTUyZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZScsXG4gICAgICAgICdjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlhMDQyY2U3MzlhNzkxOTc5OGNkODVlMjE2YzRhMzA3ZjZlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2YxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRjNjAxOGNmZDg3YjgnLFxuICAgICAgICAnZTEzODE3YjQ0ZWUxNGRlNjYzYmY0YmM4MDgzNDFmMzI2OTQ5ZTIxYTZhNzVjMjU3MDc3ODQxOWJkYWY1NzMzZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NzU0YjRmYTBlOGFjZWQwNmQ0MTY3YTJjNTljY2E0Y2RhMTg2OWMwNmViYWRmYjY0ODg1NTAwMTVhODg1MjJjJyxcbiAgICAgICAgJzMwZTkzZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQxZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5ZDcwMTg1OGY5NWRlODA0MWQyYTY4MjhjOTllMjI2MjUxOScsXG4gICAgICAgICdlNDkxYTQyNTM3ZjZlNTk3ZDVkMjhhMzIyNGIxYmMyNWRmOTE1NGVmYmQyZWYxZDJjYmJhMmNhZTUzNDdkNTdlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc5NjI0MTQ0NTBjNzZjMTY4OWM3YjQ4ZjgyMDJlYzM3ZmIyMjRjZjVhYzBiZmExNTcwMzI4YThhM2Q3Yzc3YWInLFxuICAgICAgICAnMTAwYjYxMGVjNGZmYjQ3NjBkNWMxZmMxMzNlZjZmNmIxMjUwN2EwNTFmMDRhYzU3NjBhZmE1YjI5ZGI4MzQzNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczNTE0MDg3ODM0OTY0YjU0YjE1YjE2MDY0NGQ5MTU0ODVhMTY5NzcyMjViODg0N2JiMGRkMDg1MTM3ZWM0N2NhJyxcbiAgICAgICAgJ2VmMGFmYmIyMDU2MjA1NDQ4ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMyMzc4YjdlN2QxNWEwZGUyOTMzMTEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDNjYzMwYWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZicsXG4gICAgICAgICc4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYyOTAzNTg2MzBhZmIzNGRiMDRlZWRlMGE0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIyOTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2MTAnLFxuICAgICAgICAnNjg2NTFjZjliNmRhOTAzZTA5MTQ0NDhjNmNkOWQ0Y2E4OTY4NzhmNTI4MmJlNGM4Y2MwNmUyYTQwNDA3ODU3NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3MzNjZTgwZGE5NTVhOGEyNjkwMmM5NTYzM2U2MmE5ODUxOTI0NzRiNWFmMjA3ZGE2ZGY3YjRmZDVmYzYxY2Q0JyxcbiAgICAgICAgJ2Y1NDM1YTJiZDJiYWRmN2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFlNDU3OGM1NDY3M2JjMWRjNWVhMWQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTVkOTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUwOTIxNzFlNjk5ZWYyNThkZmFiODFjMDQ1YycsXG4gICAgICAgICdkNTZlYjMwYjY5NDYzZTcyMzRmNTEzN2I3M2I4NDE3NzQzNDgwMGJhY2ViZmM2ODVmYzM3YmJlOWVmZTQwNzBkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcwZDI3MWMyMTQxN2M5ZDJiOGFhYWFjMTM4NTk5ZDA3MTc5NDAnLFxuICAgICAgICAnZWRkNzdmNTBiY2I1YTNjYWIyZTkwNzM3MzA5NjY3ZjI2NDE0NjJhNTQwNzBmM2Q1MTkyMTJkMzljMTk3YTYyOSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlMjJmYmUxNWMwYWY4Y2NjNTc4MGMwNzM1Zjg0ZGJlOWE3OTBiYWRlZTgyNDVjMDZjN2NhMzczMzFjYjM2OTgwJyxcbiAgICAgICAgJ2E4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2ZDc3ZDMxZGEwNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMTEwOTFkZDk4NjBlOGUyMGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzJyxcbiAgICAgICAgJzY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJkODBmMGIxMjg2ZDgzNzQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzRjMWZkMDRkMzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0MDc4MTg2N2Q0MjMyZWMyZGJkZicsXG4gICAgICAgICc5NDE0Njg1ZTk3YjFiNTk1NGJkNDZmNzMwMTc0MTM2ZDU3ZjFjZWViNDg3NDQzZGM1MzIxODU3YmE3M2FiZWUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZjIxOWVhNWQ2YjU0NzAxYzFjMTRkZTViNTU3ZWI0MmE4ZDEzZjNhYmJjZDA4YWZmY2MyYTVlNmIwNDliOGQ2MycsXG4gICAgICAgICc0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0NTQ0Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYyYTQwMDc2NmQxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q3Yjg3NDBmNzRhOGZiYWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2MjcwODcyMzY5MTI0NjlhMGI0NDgnLFxuICAgICAgICAnZmE3Nzk2ODEyOGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2VmZjE1ZGI1ZWQzYzA0OWIzNDExZTAzMTVlYWE0NTkzYidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMmQzMWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMyYWJkZDk0Mjg5ZmU0ZDMwOTFhYTgyNGJmJyxcbiAgICAgICAgJzVmMzAzMmY1ODkyMTU2ZTM5Y2NkM2Q3OTE1YjllMWRhMmU2ZGFjOWU2ZjI2ZTk2MTExOGQxNGI4NDYyZTE2NjEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzQ2MWYzNzE5MTRhYjMyNjcxMDQ1YTE1NWQ5ODMxZWE4NzkzZDc3Y2Q1OTU5MmM0MzQwZjg2Y2JjMTgzNDdiNScsXG4gICAgICAgICc4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUxZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2VlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFhMzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIyZDYnLFxuICAgICAgICAnOGRjMjQxMmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFjOGMxZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNmVjOTNlNDQ3ZWM4M2YwNDY3YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYxNmJhOWRhNmI1JyxcbiAgICAgICAgJzVlNDYzMTE1MGU2MmZiNDBkMGU4YzJhN2NhNTgwNGEzOWQ1ODE4NmE1MGU0OTcxMzk2MjY3NzhlMjViMDY3NGQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWFhNWY5ODBjMjQ1ZjZmMDM4OTc4MjkwYWZhNzBiNmJkODg1NTg5N2Y5OGI2YWE0ODViOTYwNjVkNTM3YmQ5OScsXG4gICAgICAgICdmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYyNGQ3ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2RjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkxMGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0OWY1MScsXG4gICAgICAgICdmM2UwMzE5MTY5ZWI5Yjg1ZDU0MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2MwNjRkMjQ2MmI2NzVmMTk0YTNkZGI0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzQ5NGY0YmUyMTlhMWE3NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcyNjU3OGQ5NzAyODU3YTUnLFxuICAgICAgICAnNDIyNDJhOTY5MjgzYTVmMzM5YmE3ZjA3NWUzNmJhMmFmOTI1Y2UzMGQ3NjdlZDZlNTVmNGIwMzE4ODBkNTYyYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhNTk4YTgwMzBkYTZkODZjNmJjN2YyZjUxNDRlYTU0OWQyODIxMWVhNThmYWE3MGViZjRjMWU2NjVjMWZlOWI1JyxcbiAgICAgICAgJzIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2YTEwMDI2ZGJkMmQ4NjRlNmInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhmMDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5NycsXG4gICAgICAgICc0ZjE0MzUxZDAwODdlZmE0OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODQxZDYwNjNhNTg2ZmE0NzVhNzI0NjA0ZGEwM2JjNWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MScsXG4gICAgICAgICc3Mzg2N2Y1OWMwNjU5ZTgxOTA0ZjlhMWM3NTQzNjk4ZTYyNTYyZDY3NDRjMTY5Y2U3YTM2ZGUwMWE4ZDYxNTQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNWU5NWJiMzk5YTY5NzFkMzc2MDI2OTQ3Zjg5YmRlMmYyODJiMzM4MTA5MjhiZTRkZWQxMTJhYzRkNzBlMjBkNScsXG4gICAgICAgICczOWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4YmEzOGIxNjEzODRjNzQ2MDEyODY1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVjMDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjYnLFxuICAgICAgICAnZDI0MjRiMWIxYWJlNGViODE2NDIyN2IwODVjOWFhOTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFjZjU2OTRjNzhmYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMzY1ODFlYTdiZmJiYjI5MGMxOTFhMmY1MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3MjYnLFxuICAgICAgICAnZWFkMTIxNjg1OTVmZTFiZTk5MjUyMTI5YjZlNTZiMzM5MWY3YWIxNDEwY2QxZTBlZjNkY2RjYWJkMmZkYTIyNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4YWI4OTgxNmRhZGZkNmI2YTFmMjYzNGZjZjAwZWM4NDAzNzgxMDI1ZWQ2ODkwYzQ4NDk3NDI3MDZiZDQzZWRlJyxcbiAgICAgICAgJzZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjljZGQyNGUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMWUzM2YxYTc0NmM5YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0NGJiNDAyODRiOGM1ZmI5NCcsXG4gICAgICAgICc2MDY2MDI1N2RkMTFiM2FhOWM4ZWQ2MThkMjRlZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODViN2MxZGNiM2NlYzFiN2VlN2YzMGRlZDc5ZGQyMGEwZWQxZjRjYzE4Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMScsXG4gICAgICAgICczZDk4YTljZGQwMjZkZDQzZjM5MDQ4ZjI1YTg4NDdmNGZjYWZhZDE4OTVkN2E2MzNjNmZlZDNjMzVlOTk5NTExJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzI5ZGY5ZmJkOGQ5ZTQ2NTA5Mjc1ZjRiMTI1ZDZkNDVkN2ZiZTlhM2I4NzhhN2FmODcyYTI4MDA2NjFhYzVmNTEnLFxuICAgICAgICAnYjRjNGZlOTljNzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZlYjJhMjdkODRiJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2EwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1YzgwODJiMmU0NDlmY2UyNTInLFxuICAgICAgICAnYWU0MzQxMDJlZGRlMDk1OGVjNGIxOWQ5MTdhNmEyOGU2YjcyZGExODM0YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQwMjk1YjQ5OWRmYjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTUnLFxuICAgICAgICAnY2YyMTc0MTE4YzhiNmQ3YTRiNDhmNmQ1MzRjZTVjNzk0MjJjMDg2YTYzNDYwNTAyYjgyN2NlNjJhMzI2NjgzYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkMjRhNDRlMDQ3ZTE5YjZmNWFmYjgxYzdjYTJmNjkwODBhNTA3NjY4OWEwMTA5MTlmNDI3MjVjMmI3ODlhMzNiJyxcbiAgICAgICAgJzZmYjhkNTU5MWI0NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWEwMTYwNmE3YTZjOWNkZDI0OWZkZmNmYWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNiMzVkNCcsXG4gICAgICAgICczMjJhZjQ5MDhjNzMxMmIwY2ZiZmUzNjlmN2E3YjNjZGI3ZDQ0OTRiYzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2FmOGFkZGJmMmI2NjFjOGE2YzYzMjg2NTVlYjk2NjUxMjUyMDA3ZDhjNWVhMzFiZTRhZDE5NmRlOGNlMjEzMWYnLFxuICAgICAgICAnNjc0OWU2N2MwMjliODVmNTJhMDM0ZWFmZDA5NjgzNmIyNTIwODE4NjgwZTI2YWM4ZjNkZmJjZGI3MTc0OTcwMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlM2FlMTk3NDU2NmNhMDZjYzUxNmQ0N2UwZmIxNjVhNjc0YTNkYWJjZmNhMTVlNzIyZjBlMzQ1MGY0NTg4OScsXG4gICAgICAgICcyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdmMDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzU5MWVlMzU1MzEzZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5N2UyNDYnLFxuICAgICAgICAnYjBlYTU1OGExMTNjMzBiZWE2MGZjNDc3NTQ2MGM3OTAxZmYwYjA1M2QyNWNhMmJkZWVlOThmMWE0YmU1ZDE5NidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxMTM5NmQ1NWZkYTU0YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0N2IwODQ5NDUwNzdjZjAzMjU1YjUyOTg0JyxcbiAgICAgICAgJzk5OGM3NGE4Y2Q0NWFjMDEyODlkNTgzM2E3YmViNDc0NGZmNTM2YjAxYjI1N2JlNGM1NzY3YmVhOTNlYTU3YTQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnM2M1ZDJhMWJhMzljNWExNzkwMDAwNzM4YzllMGM0MGI4ZGNkZmQ1NDY4NzU0YjY0MDU1NDAxNTdlMDE3YWE3YScsXG4gICAgICAgICdiMjI4NDI3OTk5NWEzNGUyZjlkNGRlNzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2NjODcwNGI4YTYwYTBkZWZhM2E5OWE3Mjk5ZjJlOWMzZmJjMzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzAnLFxuICAgICAgICAnYmRkNDYwMzlmZWVkMTc4ODFkMWUwODYyZGIzNDdmOGNmMzk1Yjc0ZmM0YmNkYzRlOTQwYjc0ZTNhYzFmMWIxMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjNTMzZTRmN2VhODU1NWFhY2Q5Nzc3YWM1Y2FkMjliOTdkZDRkZWZjY2M1M2VlN2VhMjA0MTE5YjI4ODliMTk3JyxcbiAgICAgICAgJzZmMGEyNTZiYzVlZmRmNDI5YTJmYjYyNDJmMWE0M2EyZDliOTI1YmI0YTRiM2EyNmJiOGUwZjQ1ZWI1OTYwOTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYzE0ZjhmMmNjYjI3ZDZmMTA5ZjZkMDhkMDNjYzk2YTY5YmE4YzM0ZWVjMDdiYmNmNTY2ZDQ4ZTMzZGE2NTkzJyxcbiAgICAgICAgJ2MzNTlkNjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZicsXG4gICAgICAgICcyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5NWEzNjBjZWI1NzNjNzA2MDMxMzk4NjJhZmQ2MTdmYTliOWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMxMzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0YjM5Zjk5ZDQzY2MzOCcsXG4gICAgICAgICc2MGVhN2Y2MWEzNTM1MjRkMWM5ODdmNmVjZWM5MmYwODZkNTY1YWI2ODc4NzBjYjEyNjg5ZmYxZTMxYzc0NDQ4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RhNjU0NWQyMTgxZGI4ZDk4M2Y3ZGNiMzc1ZWY1ODY2ZDQ3YzY3YjFiZjMxYzhjZjg1NWVmNzQzN2I3MjY1NmEnLFxuICAgICAgICAnNDliOTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDljNmRlN2VjMjVkNjk0NWQ2NTcxNDZiOWQ1OTk0YjhmZWIxMTExJyxcbiAgICAgICAgJzVjYTU2MDc1M2JlMmExMmZjNmRlNmNhZjJjYjQ4OTU2NWRiOTM2MTU2Yjk1MTRlMWJiNWU4MzAzN2UwZmEyZDQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNGU0MmM4ZWM4MmM5OTc5OGNjZjNhNjEwYmU4NzBlNzgzMzhjN2Y3MTMzNDhiZDM0YzgyMDNlZjQwMzdmMzUwMicsXG4gICAgICAgICc3NTcxZDc0ZWU1ZTBmYjkyYTdhOGIzM2EwNzc4MzM0MWE1NDkyMTQ0Y2M1NGJjYzQwYTk0NDczNjkzNjA2NDM3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM3NzVhYjcwODliYzZhZjgyM2FiYTJlMWFmNzBiMjM2ZDI1MWNhZGIwYzg2NzQzMjg3NTIyYTFiM2IwZGVkZWEnLFxuICAgICAgICAnYmU1MmQxMDdiY2ZhMDlkOGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3YTc2YTJjNDJhZDk2MTQwOTAxOGNmNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjZWUzMWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2JyxcbiAgICAgICAgJzhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVmMGJlMTRlZDRkODBmNDQ4YTAxYzQzYjFjNmQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVmZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0Nzk4NicsXG4gICAgICAgICczOWU1Yzk5MjViNWE1NGIwNzQzM2E0ZjE4YzYxNzI2ZjhiYjEzMWMwMTJjYTU0MmViMjRhOGFjMDcyMDA2ODJhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q0MjYzZGZjM2QyZGY5MjNhMDE3OWE0ODk2NmQzMGNlODRlMjUxNWFmYzNkY2NjMWI3NzkwNzc5MmViY2M2MGUnLFxuICAgICAgICAnNjJkZmFmMDdhMGY3OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBhZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJhY2MwYTRhMmRlNDIyMjMzZWVkYTg5NzYxMmM0JyxcbiAgICAgICAgJzI1YTc0OGFiMzY3OTc5ZDk4NzMzYzM4YTFmYTFjMmU3ZGM2Y2MwN2RiMmQ2MGE5YWU3YTc2YWFhNDliZDBmNzcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJhZmRmYzIwNDVlMTk5MTkxNTI5MjNmMzY3YTE3NjdjMTFjY2VkYScsXG4gICAgICAgICdlY2ZiNzA1NmNmMWRlMDQyZjk0MjBiYWIzOTY3OTNjMGMzOTBiZGU3NGI0YmJkZmYxNmE4M2FlMDlhOWE3NTE3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzZkN2VmNmIxNzU0M2Y4MzczYzU3M2Y0NGUxZjM4OTgzNWQ4OWJjYmM2MDYyY2VkMzZjODJkZjgzYjhmYWU4NTknLFxuICAgICAgICAnY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBjNTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0YjE5MGRjYTcxMmQxMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlNzU2MDVkNTkxMDJhNWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmJyxcbiAgICAgICAgJ2Y1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5MzgzNjA5OTBlMmJmYWQxMjUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWI5ODY2MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFiZTM4ODQ1N2RkNDNmZWZiMWVkNjIwYycsXG4gICAgICAgICc2Y2I5YTg4NzZkOWNiODUyMDYwOWFmM2FkZDI2Y2QyMGEwYTdjZDhhOTQxMTEzMWNlODVmNDQxMDAwOTkyMjNlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzEzZTg3YjAyN2Q4NTE0ZDM1OTM5ZjJlNjg5MmIxOTkyMjE1NDU5Njk0MTg4ODMzNmRjMzU2M2UzYjhkYmE5NDInLFxuICAgICAgICAnZmVmNWEzYzY4MDU5YTZkZWM1ZDYyNDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3MGQ1NTY0NmI4YWRmMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlZTE2MzAyNmU5ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcwOGU3YmY0NDkxNjkxZTU3NjRhJyxcbiAgICAgICAgJzFhY2IyNTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQwZjU4ZjQ5YWUzZmExNWI5NjYyM2U1NDMwZGEwYWQ2YzYyYjInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYyNmQ0MzUwNTg2Nzk5OTkzMmU1ZGIzM2FmM2Q4MCcsXG4gICAgICAgICc1ZjMxMGQ0YjNjOTliOWViYjE5Zjc3ZDQxYzFkZWUwMThjZjBkMzRmZDQxOTE2MTQwMDNlOTQ1YTEyMTZlNDIzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ZmMDdmMzExOGE5ZGYwMzVlOWZhZDg1ZWI2YzdiZmU0MmIwMmYwMWNhOTljZWVhM2JmN2ZmZGJhOTNjNDc1MGQnLFxuICAgICAgICAnNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRjMWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQxZjBkOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4ZDhiOTg1NWM3YzA1MmEzNDE0NmZkMjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2UyYjUyNmExJyxcbiAgICAgICAgJ2NkYjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0NjMwMzY3NTgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNTJkYjBiNTM4NGRmYmYwNWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0MjYzMTgwZGEzMmI2MycsXG4gICAgICAgICdjM2I5OTdkMDUwZWU1ZDQyM2ViYWY2NmE2ZGI5ZjU3YjMxODBjOTAyODc1Njc5ZGU5MjRiNjlkODRhN2IzNzUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTYyZjk0OTBkM2Q1MWRhNjM5NWVmZDI0ZTgwOTE5Y2M3ZDBmMjljM2YzZmE0OGM2ZmZmNTQzYmVjYmQ0MzM1MicsXG4gICAgICAgICc2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4Mjg2MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2FmYTdkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzdmMzBlYTI0NzZiMzk5YjQ5NTc1MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1YWFhYjExOTMnLFxuICAgICAgICAnY2E1ZWY3ZDRiMjMxYzk0YzNiMTUzODlhNWY2MzExZTlkYWZmN2JiNjdiMTAzZTk4ODBlZjRiZmY2MzdhY2FlYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1MDk4ZmYxZTFkOWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFkOWFjNjBhMDM2MTgwMGI3YTAwJyxcbiAgICAgICAgJzk3MzExNDFkODFmYzhmODA4NGQzN2M2ZTc1NDIwMDZiM2VlMWI0MGQ2MGRmZTUzNjJhNWIxMzJmZDE3ZGRjMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMmI3OGM3ZGU5ZWU1MTJhNzI4OTViZTZiOWNiZWZhNmUyZjNjNGNjY2U0NDVjOTZiOWYyYzgxZTI3NzhhZDU4JyxcbiAgICAgICAgJ2VlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUyMjc1YmE0OTcyMzc3OTRjODc1M2MnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNlMzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmNycsXG4gICAgICAgICdkM2FhMmVkNzFjOWRkMjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzg0Mzg0NDc1NjZkNGQ3YmVkYWRjMjk5NDk2YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUzYTgnLFxuICAgICAgICAnYzRlMTAyMDkxNjk4MGE0ZGE1ZDAxYWM1ZTZhZDMzMDczNGVmMGQ3OTA2NjMxYzRmMjM5MDQyNmIyZWRkNzkxZidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0MTYyZDQ4OGI4OTQwMjAzOWI1ODRjNmZjNmMzMDg4NzA1ODdkOWM0NmY2NjBiODc4YWI2NWM4MmM3MTFkNjdlJyxcbiAgICAgICAgJzY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJmMmI4NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgzZCcsXG4gICAgICAgICdjZDFiYzdjYjZjYzQwN2JiMmYwY2E2NDdjNzE4YTczMGNmNzE4NzJlN2QwZDJhNTNmYTIwZWZjZGZlNjE4MjYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNjc0ZjI2MDBhMzAwN2EwMDU2OGMxYTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZhZWIxYTg2YicsXG4gICAgICAgICcyOTlkMjFmOTQxM2YzM2IzZWRmNDNiMjU3MDA0NTgwYjcwZGI1N2RhMGIxODIyNTllMDllZWNjNjllMGQzOGE1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2QzMmY0ZGE1NGFkZTc0YWJiODFiODE1YWQxZmIzYjI2M2Q4MmQ2YzY5MjcxNGJjZmY4N2QyOWJkNWVlOWYwOGYnLFxuICAgICAgICAnZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2OTEwYjNlZWE4NydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMGU0ZTY3MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcyYjA4Y2IxZWQ5NTRmMWUzY2UzZmY2JyxcbiAgICAgICAgJzQ2MmY5YmNlNjE5ODk4NjM4NDk5MzUwMTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2InXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYmUyMDYyMDAzYzUxY2MzMDA0NjgyOTA0MzMwZTRkZWU3ZjNkY2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5NycsXG4gICAgICAgICc2MjE4OGJjNDlkNjFlNTQyODU3M2Q0OGE3NGUxYzY1NWIxYzYxMDkwOTA1NjgyYTBkNTU1OGVkNzJkY2NiOWJjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzkzMTQ0NDIzYWNlMzQ1MWVkMjllMGZiOWFjMmFmMjExY2I2ZTg0YTYwMWRmNTk5M2M0MTk4NTlmZmY1ZGYwNGEnLFxuICAgICAgICAnN2MxMGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQxZDkwMmE2ZDEzMDM3YjQ3YydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjJyxcbiAgICAgICAgJ2FiOGMxZTA4NmQwNGU4MTM3NDRhNjU1YjJkZjhkNWY4M2IzY2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUzYTFkNWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDVlOWUxZGE2NDlkOTdkODllNDg2ODExN2E0NjVhM2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MicsXG4gICAgICAgICc0Y2IwNDQzN2YzOTFlZDczMTExYTEzY2MxZDRkZDBkYjE2OTM0NjVjMjI0MDQ4MGQ4OTU1ZTg1OTJmMjc0NDdhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2QzYWU0MTA0N2RkN2NhMDY1ZGJmOGVkNzdiOTkyNDM5OTgzMDA1Y2Q3MmUxNmQ2Zjk5NmE1MzE2ZDM2OTY2YmInLFxuICAgICAgICAnYmQxYWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0NidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0NjNlMjc2M2Q4ODVmOTU4ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5ZjgwYWY4N2M4OTdiMDY1JyxcbiAgICAgICAgJ2JmZWZhY2RiMGU1ZDBmZDdkZjNhMzExYTk0ZGUwNjJiMjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2YnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzk4NWZkZmQxMjdjMDU2N2M2ZjUzZWMxYmI2M2VjMzE1OGU1OTdjNDBiZmU3NDdjODNjZGRmYzkxMDY0MTkxNycsXG4gICAgICAgICc2MDNjMTJkYWYzZDk4NjJlZjJiMjVmZTFkZTI4OWFlZDI0ZWQyOTFlMGVjNjcwODcwM2E1YmQ1NjdmMzJlZDAzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc0YTFhZDZiNWY3NmUzOWRiMmRkMjQ5NDEwZWFjN2Y5OWU3NGM1OWNiODNkMmQwZWQ1ZmYxNTQzZGE3NzAzZTknLFxuICAgICAgICAnY2M2MTU3ZWYxOGM5YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5MGUwZGIwOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNhNzFkMDg5NmIyMmY2ZGEzJyxcbiAgICAgICAgJzU1M2UwNGY2YjAxOGI0ZmE2YzhmMzllN2YzMTFkMzE3NjI5MGQwZTBmMTljYTczZjE3NzE0ZDk5NzdhMjJmZjgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOWUyMTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1OTc2NTRlN2EyYjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1NycsXG4gICAgICAgICc3MTJmY2RkMWI5MDUzZjA5MDAzYTM0ODFmYTc3NjJlOWZmZDdjOGVmMzVhMzg1MDllMmZiZjI2MjkwMDgzNzMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTc2ZTI2OTg5YTQzYzljZmViYTQwMjljMjAyNTM4YzI4MTcyZTU2NmUzYzRmY2U3MzIyODU3ZjNiZTMyN2Q2NicsXG4gICAgICAgICdlZDhjYzlkMDRiMjllYjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc1ZDQ2ZWZlYTM3NzFlNmU2OGFiYjg5YTEzYWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRkYTgnLFxuICAgICAgICAnOTg1MjM5MGE5OTUwNzY3OWZkMGI4NmZkMmIzOWE4NjhkN2VmYzIyMTUxMzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4MDlhMjBjNjdkNjQ5MDBmZmI2OThjNGM4MjVmNmQ1ZjIzMTBmYjA0NTFjODY5MzQ1YjczMTlmNjQ1NjA1NzIxJyxcbiAgICAgICAgJzllOTk0OTgwZDk5MTdlMjJiNzZiMDYxOTI3ZmEwNDE0M2QwOTZjY2M1NDk2M2U2YTVlYmZhNWYzZjhlMjg2YzEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMWIzODkwM2E0M2Y3ZjExNGVkNDUwMGI0ZWFjNzA4M2ZkZWZlY2UxY2YyOWM2MzUyOGQ1NjM0NDZmOTcyYzE4MCcsXG4gICAgICAgICc0MDM2ZWRjOTMxYTYwYWU4ODkzNTNmNzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5J1xuICAgICAgXVxuICAgIF1cbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gZXhwb3J0cztcbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgbWluQXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xudmFyIG1pblV0aWxzID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWNyeXB0by11dGlscycpO1xuXG51dGlscy5hc3NlcnQgPSBtaW5Bc3NlcnQ7XG51dGlscy50b0FycmF5ID0gbWluVXRpbHMudG9BcnJheTtcbnV0aWxzLnplcm8yID0gbWluVXRpbHMuemVybzI7XG51dGlscy50b0hleCA9IG1pblV0aWxzLnRvSGV4O1xudXRpbHMuZW5jb2RlID0gbWluVXRpbHMuZW5jb2RlO1xuXG4vLyBSZXByZXNlbnQgbnVtIGluIGEgdy1OQUYgZm9ybVxuZnVuY3Rpb24gZ2V0TkFGKG51bSwgdykge1xuICB2YXIgbmFmID0gW107XG4gIHZhciB3cyA9IDEgPDwgKHcgKyAxKTtcbiAgdmFyIGsgPSBudW0uY2xvbmUoKTtcbiAgd2hpbGUgKGsuY21wbigxKSA+PSAwKSB7XG4gICAgdmFyIHo7XG4gICAgaWYgKGsuaXNPZGQoKSkge1xuICAgICAgdmFyIG1vZCA9IGsuYW5kbG4od3MgLSAxKTtcbiAgICAgIGlmIChtb2QgPiAod3MgPj4gMSkgLSAxKVxuICAgICAgICB6ID0gKHdzID4+IDEpIC0gbW9kO1xuICAgICAgZWxzZVxuICAgICAgICB6ID0gbW9kO1xuICAgICAgay5pc3Vibih6KTtcbiAgICB9IGVsc2Uge1xuICAgICAgeiA9IDA7XG4gICAgfVxuICAgIG5hZi5wdXNoKHopO1xuXG4gICAgLy8gT3B0aW1pemF0aW9uLCBzaGlmdCBieSB3b3JkIGlmIHBvc3NpYmxlXG4gICAgdmFyIHNoaWZ0ID0gKGsuY21wbigwKSAhPT0gMCAmJiBrLmFuZGxuKHdzIC0gMSkgPT09IDApID8gKHcgKyAxKSA6IDE7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBzaGlmdDsgaSsrKVxuICAgICAgbmFmLnB1c2goMCk7XG4gICAgay5pdXNocm4oc2hpZnQpO1xuICB9XG5cbiAgcmV0dXJuIG5hZjtcbn1cbnV0aWxzLmdldE5BRiA9IGdldE5BRjtcblxuLy8gUmVwcmVzZW50IGsxLCBrMiBpbiBhIEpvaW50IFNwYXJzZSBGb3JtXG5mdW5jdGlvbiBnZXRKU0YoazEsIGsyKSB7XG4gIHZhciBqc2YgPSBbXG4gICAgW10sXG4gICAgW11cbiAgXTtcblxuICBrMSA9IGsxLmNsb25lKCk7XG4gIGsyID0gazIuY2xvbmUoKTtcbiAgdmFyIGQxID0gMDtcbiAgdmFyIGQyID0gMDtcbiAgd2hpbGUgKGsxLmNtcG4oLWQxKSA+IDAgfHwgazIuY21wbigtZDIpID4gMCkge1xuXG4gICAgLy8gRmlyc3QgcGhhc2VcbiAgICB2YXIgbTE0ID0gKGsxLmFuZGxuKDMpICsgZDEpICYgMztcbiAgICB2YXIgbTI0ID0gKGsyLmFuZGxuKDMpICsgZDIpICYgMztcbiAgICBpZiAobTE0ID09PSAzKVxuICAgICAgbTE0ID0gLTE7XG4gICAgaWYgKG0yNCA9PT0gMylcbiAgICAgIG0yNCA9IC0xO1xuICAgIHZhciB1MTtcbiAgICBpZiAoKG0xNCAmIDEpID09PSAwKSB7XG4gICAgICB1MSA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBtOCA9IChrMS5hbmRsbig3KSArIGQxKSAmIDc7XG4gICAgICBpZiAoKG04ID09PSAzIHx8IG04ID09PSA1KSAmJiBtMjQgPT09IDIpXG4gICAgICAgIHUxID0gLW0xNDtcbiAgICAgIGVsc2VcbiAgICAgICAgdTEgPSBtMTQ7XG4gICAgfVxuICAgIGpzZlswXS5wdXNoKHUxKTtcblxuICAgIHZhciB1MjtcbiAgICBpZiAoKG0yNCAmIDEpID09PSAwKSB7XG4gICAgICB1MiA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBtOCA9IChrMi5hbmRsbig3KSArIGQyKSAmIDc7XG4gICAgICBpZiAoKG04ID09PSAzIHx8IG04ID09PSA1KSAmJiBtMTQgPT09IDIpXG4gICAgICAgIHUyID0gLW0yNDtcbiAgICAgIGVsc2VcbiAgICAgICAgdTIgPSBtMjQ7XG4gICAgfVxuICAgIGpzZlsxXS5wdXNoKHUyKTtcblxuICAgIC8vIFNlY29uZCBwaGFzZVxuICAgIGlmICgyICogZDEgPT09IHUxICsgMSlcbiAgICAgIGQxID0gMSAtIGQxO1xuICAgIGlmICgyICogZDIgPT09IHUyICsgMSlcbiAgICAgIGQyID0gMSAtIGQyO1xuICAgIGsxLml1c2hybigxKTtcbiAgICBrMi5pdXNocm4oMSk7XG4gIH1cblxuICByZXR1cm4ganNmO1xufVxudXRpbHMuZ2V0SlNGID0gZ2V0SlNGO1xuXG5mdW5jdGlvbiBjYWNoZWRQcm9wZXJ0eShvYmosIG5hbWUsIGNvbXB1dGVyKSB7XG4gIHZhciBrZXkgPSAnXycgKyBuYW1lO1xuICBvYmoucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24gY2FjaGVkUHJvcGVydHkoKSB7XG4gICAgcmV0dXJuIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkID8gdGhpc1trZXldIDpcbiAgICAgICAgICAgdGhpc1trZXldID0gY29tcHV0ZXIuY2FsbCh0aGlzKTtcbiAgfTtcbn1cbnV0aWxzLmNhY2hlZFByb3BlcnR5ID0gY2FjaGVkUHJvcGVydHk7XG5cbmZ1bmN0aW9uIHBhcnNlQnl0ZXMoYnl0ZXMpIHtcbiAgcmV0dXJuIHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycgPyB1dGlscy50b0FycmF5KGJ5dGVzLCAnaGV4JykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzO1xufVxudXRpbHMucGFyc2VCeXRlcyA9IHBhcnNlQnl0ZXM7XG5cbmZ1bmN0aW9uIGludEZyb21MRShieXRlcykge1xuICByZXR1cm4gbmV3IEJOKGJ5dGVzLCAnaGV4JywgJ2xlJyk7XG59XG51dGlscy5pbnRGcm9tTEUgPSBpbnRGcm9tTEU7XG5cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJfYXJnc1wiOiBbXG4gICAgW1xuICAgICAge1xuICAgICAgICBcInJhd1wiOiBcImVsbGlwdGljQF42LjAuMFwiLFxuICAgICAgICBcInNjb3BlXCI6IG51bGwsXG4gICAgICAgIFwiZXNjYXBlZE5hbWVcIjogXCJlbGxpcHRpY1wiLFxuICAgICAgICBcIm5hbWVcIjogXCJlbGxpcHRpY1wiLFxuICAgICAgICBcInJhd1NwZWNcIjogXCJeNi4wLjBcIixcbiAgICAgICAgXCJzcGVjXCI6IFwiPj02LjAuMCA8Ny4wLjBcIixcbiAgICAgICAgXCJ0eXBlXCI6IFwicmFuZ2VcIlxuICAgICAgfSxcbiAgICAgIFwiL1VzZXJzL2x1dG92aWNoL1Byb2plY3RzL25lbzRqLWphdmFzY3JpcHQtZHJpdmVyL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ25cIlxuICAgIF1cbiAgXSxcbiAgXCJfZnJvbVwiOiBcImVsbGlwdGljQD49Ni4wLjAgPDcuMC4wXCIsXG4gIFwiX2lkXCI6IFwiZWxsaXB0aWNANi40LjBcIixcbiAgXCJfaW5DYWNoZVwiOiB0cnVlLFxuICBcIl9pbnN0YWxsYWJsZVwiOiB0cnVlLFxuICBcIl9sb2NhdGlvblwiOiBcIi9lbGxpcHRpY1wiLFxuICBcIl9ub2RlVmVyc2lvblwiOiBcIjcuMC4wXCIsXG4gIFwiX25wbU9wZXJhdGlvbmFsSW50ZXJuYWxcIjoge1xuICAgIFwiaG9zdFwiOiBcInBhY2thZ2VzLTE4LWVhc3QuaW50ZXJuYWwubnBtanMuY29tXCIsXG4gICAgXCJ0bXBcIjogXCJ0bXAvZWxsaXB0aWMtNi40LjAudGd6XzE0ODc3OTg4NjY0MjhfMC4zMDUxMDYyMDE5MDc2MTk4M1wiXG4gIH0sXG4gIFwiX25wbVVzZXJcIjoge1xuICAgIFwibmFtZVwiOiBcImluZHV0bnlcIixcbiAgICBcImVtYWlsXCI6IFwiZmVkb3JAaW5kdXRueS5jb21cIlxuICB9LFxuICBcIl9ucG1WZXJzaW9uXCI6IFwiMy4xMC44XCIsXG4gIFwiX3BoYW50b21DaGlsZHJlblwiOiB7fSxcbiAgXCJfcmVxdWVzdGVkXCI6IHtcbiAgICBcInJhd1wiOiBcImVsbGlwdGljQF42LjAuMFwiLFxuICAgIFwic2NvcGVcIjogbnVsbCxcbiAgICBcImVzY2FwZWROYW1lXCI6IFwiZWxsaXB0aWNcIixcbiAgICBcIm5hbWVcIjogXCJlbGxpcHRpY1wiLFxuICAgIFwicmF3U3BlY1wiOiBcIl42LjAuMFwiLFxuICAgIFwic3BlY1wiOiBcIj49Ni4wLjAgPDcuMC4wXCIsXG4gICAgXCJ0eXBlXCI6IFwicmFuZ2VcIlxuICB9LFxuICBcIl9yZXF1aXJlZEJ5XCI6IFtcbiAgICBcIi9icm93c2VyaWZ5LXNpZ25cIixcbiAgICBcIi9jcmVhdGUtZWNkaFwiXG4gIF0sXG4gIFwiX3Jlc29sdmVkXCI6IFwiaHR0cDovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbGxpcHRpYy8tL2VsbGlwdGljLTYuNC4wLnRnelwiLFxuICBcIl9zaGFzdW1cIjogXCJjYWM5YWY4NzYyYzg1ODM2MTg3MDAzYzhkZmUxOTNlNWUyZWFlNWRmXCIsXG4gIFwiX3Nocmlua3dyYXBcIjogbnVsbCxcbiAgXCJfc3BlY1wiOiBcImVsbGlwdGljQF42LjAuMFwiLFxuICBcIl93aGVyZVwiOiBcIi9Vc2Vycy9sdXRvdmljaC9Qcm9qZWN0cy9uZW80ai1qYXZhc2NyaXB0LWRyaXZlci9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1zaWduXCIsXG4gIFwiYXV0aG9yXCI6IHtcbiAgICBcIm5hbWVcIjogXCJGZWRvciBJbmR1dG55XCIsXG4gICAgXCJlbWFpbFwiOiBcImZlZG9yQGluZHV0bnkuY29tXCJcbiAgfSxcbiAgXCJidWdzXCI6IHtcbiAgICBcInVybFwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9pbmR1dG55L2VsbGlwdGljL2lzc3Vlc1wiXG4gIH0sXG4gIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImJuLmpzXCI6IFwiXjQuNC4wXCIsXG4gICAgXCJicm9yYW5kXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJoYXNoLmpzXCI6IFwiXjEuMC4wXCIsXG4gICAgXCJobWFjLWRyYmdcIjogXCJeMS4wLjBcIixcbiAgICBcImluaGVyaXRzXCI6IFwiXjIuMC4xXCIsXG4gICAgXCJtaW5pbWFsaXN0aWMtYXNzZXJ0XCI6IFwiXjEuMC4wXCIsXG4gICAgXCJtaW5pbWFsaXN0aWMtY3J5cHRvLXV0aWxzXCI6IFwiXjEuMC4wXCJcbiAgfSxcbiAgXCJkZXNjcmlwdGlvblwiOiBcIkVDIGNyeXB0b2dyYXBoeVwiLFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicmZzXCI6IFwiXjEuNC4zXCIsXG4gICAgXCJjb3ZlcmFsbHNcIjogXCJeMi4xMS4zXCIsXG4gICAgXCJncnVudFwiOiBcIl4wLjQuNVwiLFxuICAgIFwiZ3J1bnQtYnJvd3NlcmlmeVwiOiBcIl41LjAuMFwiLFxuICAgIFwiZ3J1bnQtY2xpXCI6IFwiXjEuMi4wXCIsXG4gICAgXCJncnVudC1jb250cmliLWNvbm5lY3RcIjogXCJeMS4wLjBcIixcbiAgICBcImdydW50LWNvbnRyaWItY29weVwiOiBcIl4xLjAuMFwiLFxuICAgIFwiZ3J1bnQtY29udHJpYi11Z2xpZnlcIjogXCJeMS4wLjFcIixcbiAgICBcImdydW50LW1vY2hhLWlzdGFuYnVsXCI6IFwiXjMuMC4xXCIsXG4gICAgXCJncnVudC1zYXVjZWxhYnNcIjogXCJeOC42LjJcIixcbiAgICBcImlzdGFuYnVsXCI6IFwiXjAuNC4yXCIsXG4gICAgXCJqc2NzXCI6IFwiXjIuOS4wXCIsXG4gICAgXCJqc2hpbnRcIjogXCJeMi42LjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMS4wXCJcbiAgfSxcbiAgXCJkaXJlY3Rvcmllc1wiOiB7fSxcbiAgXCJkaXN0XCI6IHtcbiAgICBcInNoYXN1bVwiOiBcImNhYzlhZjg3NjJjODU4MzYxODcwMDNjOGRmZTE5M2U1ZTJlYWU1ZGZcIixcbiAgICBcInRhcmJhbGxcIjogXCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbGxpcHRpYy8tL2VsbGlwdGljLTYuNC4wLnRnelwiXG4gIH0sXG4gIFwiZmlsZXNcIjogW1xuICAgIFwibGliXCJcbiAgXSxcbiAgXCJnaXRIZWFkXCI6IFwiNmIwZDJiNzZjYWFlOTE0NzE2NDljOGUyMWYwYjFkM2JhMGY5NjA5MFwiLFxuICBcImhvbWVwYWdlXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWNcIixcbiAgXCJrZXl3b3Jkc1wiOiBbXG4gICAgXCJFQ1wiLFxuICAgIFwiRWxsaXB0aWNcIixcbiAgICBcImN1cnZlXCIsXG4gICAgXCJDcnlwdG9ncmFwaHlcIlxuICBdLFxuICBcImxpY2Vuc2VcIjogXCJNSVRcIixcbiAgXCJtYWluXCI6IFwibGliL2VsbGlwdGljLmpzXCIsXG4gIFwibWFpbnRhaW5lcnNcIjogW1xuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcImluZHV0bnlcIixcbiAgICAgIFwiZW1haWxcIjogXCJmZWRvckBpbmR1dG55LmNvbVwiXG4gICAgfVxuICBdLFxuICBcIm5hbWVcIjogXCJlbGxpcHRpY1wiLFxuICBcIm9wdGlvbmFsRGVwZW5kZW5jaWVzXCI6IHt9LFxuICBcInJlYWRtZVwiOiBcIkVSUk9SOiBObyBSRUFETUUgZGF0YSBmb3VuZCFcIixcbiAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInVybFwiOiBcImdpdCtzc2g6Ly9naXRAZ2l0aHViLmNvbS9pbmR1dG55L2VsbGlwdGljLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJqc2NzXCI6IFwianNjcyBiZW5jaG1hcmtzLyouanMgbGliLyouanMgbGliLyoqLyouanMgbGliLyoqLyoqLyouanMgdGVzdC9pbmRleC5qc1wiLFxuICAgIFwianNoaW50XCI6IFwianNjcyBiZW5jaG1hcmtzLyouanMgbGliLyouanMgbGliLyoqLyouanMgbGliLyoqLyoqLyouanMgdGVzdC9pbmRleC5qc1wiLFxuICAgIFwibGludFwiOiBcIm5wbSBydW4ganNjcyAmJiBucG0gcnVuIGpzaGludFwiLFxuICAgIFwidGVzdFwiOiBcIm5wbSBydW4gbGludCAmJiBucG0gcnVuIHVuaXRcIixcbiAgICBcInVuaXRcIjogXCJpc3RhbmJ1bCB0ZXN0IF9tb2NoYSAtLXJlcG9ydGVyPXNwZWMgdGVzdC9pbmRleC5qc1wiLFxuICAgIFwidmVyc2lvblwiOiBcImdydW50IGRpc3QgJiYgZ2l0IGFkZCBkaXN0L1wiXG4gIH0sXG4gIFwidmVyc2lvblwiOiBcIjYuNC4wXCJcbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIHRoaXMuX2V2ZW50cyA9IHRoaXMuX2V2ZW50cyB8fCB7fTtcbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxuRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24obikge1xuICBpZiAoIWlzTnVtYmVyKG4pIHx8IG4gPCAwIHx8IGlzTmFOKG4pKVxuICAgIHRocm93IFR5cGVFcnJvcignbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgZXIsIGhhbmRsZXIsIGxlbiwgYXJncywgaSwgbGlzdGVuZXJzO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50cy5lcnJvciB8fFxuICAgICAgICAoaXNPYmplY3QodGhpcy5fZXZlbnRzLmVycm9yKSAmJiAhdGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpIHtcbiAgICAgIGVyID0gYXJndW1lbnRzWzFdO1xuICAgICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCBcImVycm9yXCIgZXZlbnQuICgnICsgZXIgKyAnKScpO1xuICAgICAgICBlcnIuY29udGV4dCA9IGVyO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlciA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNVbmRlZmluZWQoaGFuZGxlcikpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGhhbmRsZXIpKSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAvLyBmYXN0IGNhc2VzXG4gICAgICBjYXNlIDE6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBzbG93ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICBoYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdChoYW5kbGVyKSkge1xuICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIGxpc3RlbmVycyA9IGhhbmRsZXIuc2xpY2UoKTtcbiAgICBsZW4gPSBsaXN0ZW5lcnMubGVuZ3RoO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICAgIGxpc3RlbmVyc1tpXS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBtO1xuXG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcblxuICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gIGlmICh0aGlzLl9ldmVudHMubmV3TGlzdGVuZXIpXG4gICAgdGhpcy5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgIGlzRnVuY3Rpb24obGlzdGVuZXIubGlzdGVuZXIpID9cbiAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gIGVsc2UgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkpXG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZVxuICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IFt0aGlzLl9ldmVudHNbdHlwZV0sIGxpc3RlbmVyXTtcblxuICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSAmJiAhdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCkge1xuICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5fbWF4TGlzdGVuZXJzKSkge1xuICAgICAgbSA9IHRoaXMuX21heExpc3RlbmVycztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICAgIH1cblxuICAgIGlmIChtICYmIG0gPiAwICYmIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGggPiBtKSB7XG4gICAgICB0aGlzLl9ldmVudHNbdHlwZV0ud2FybmVkID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJyhub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5ICcgK1xuICAgICAgICAgICAgICAgICAgICAnbGVhayBkZXRlY3RlZC4gJWQgbGlzdGVuZXJzIGFkZGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1VzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0LicsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGgpO1xuICAgICAgaWYgKHR5cGVvZiBjb25zb2xlLnRyYWNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQgaW4gSUUgMTBcbiAgICAgICAgY29uc29sZS50cmFjZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICB2YXIgZmlyZWQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBnKCkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgZyk7XG5cbiAgICBpZiAoIWZpcmVkKSB7XG4gICAgICBmaXJlZCA9IHRydWU7XG4gICAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfVxuXG4gIGcubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgdGhpcy5vbih0eXBlLCBnKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZmYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIGxpc3QsIHBvc2l0aW9uLCBsZW5ndGgsIGk7XG5cbiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgbGlzdCA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gIHBvc2l0aW9uID0gLTE7XG5cbiAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8XG4gICAgICAoaXNGdW5jdGlvbihsaXN0Lmxpc3RlbmVyKSAmJiBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIGlmICh0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpO1xuXG4gIH0gZWxzZSBpZiAoaXNPYmplY3QobGlzdCkpIHtcbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSA+IDA7KSB7XG4gICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHxcbiAgICAgICAgICAobGlzdFtpXS5saXN0ZW5lciAmJiBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcbiAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGxpc3QubGVuZ3RoID0gMDtcbiAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpc3Quc3BsaWNlKHBvc2l0aW9uLCAxKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciBrZXksIGxpc3RlbmVycztcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gIGlmICghdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLl9ldmVudHMgPSB7fTtcbiAgICBlbHNlIGlmICh0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgZm9yIChrZXkgaW4gdGhpcy5fZXZlbnRzKSB7XG4gICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGxpc3RlbmVycykpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gIH0gZWxzZSBpZiAobGlzdGVuZXJzKSB7XG4gICAgLy8gTElGTyBvcmRlclxuICAgIHdoaWxlIChsaXN0ZW5lcnMubGVuZ3RoKVxuICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbbGlzdGVuZXJzLmxlbmd0aCAtIDFdKTtcbiAgfVxuICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciByZXQ7XG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0ID0gW107XG4gIGVsc2UgaWYgKGlzRnVuY3Rpb24odGhpcy5fZXZlbnRzW3R5cGVdKSlcbiAgICByZXQgPSBbdGhpcy5fZXZlbnRzW3R5cGVdXTtcbiAgZWxzZVxuICAgIHJldCA9IHRoaXMuX2V2ZW50c1t0eXBlXS5zbGljZSgpO1xuICByZXR1cm4gcmV0O1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24odHlwZSkge1xuICBpZiAodGhpcy5fZXZlbnRzKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgICBpZiAoaXNGdW5jdGlvbihldmxpc3RlbmVyKSlcbiAgICAgIHJldHVybiAxO1xuICAgIGVsc2UgaWYgKGV2bGlzdGVuZXIpXG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIDA7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbiIsInZhciBtZDUgPSByZXF1aXJlKCdjcmVhdGUtaGFzaC9tZDUnKVxubW9kdWxlLmV4cG9ydHMgPSBFVlBfQnl0ZXNUb0tleVxuZnVuY3Rpb24gRVZQX0J5dGVzVG9LZXkgKHBhc3N3b3JkLCBzYWx0LCBrZXlMZW4sIGl2TGVuKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHBhc3N3b3JkKSkge1xuICAgIHBhc3N3b3JkID0gbmV3IEJ1ZmZlcihwYXNzd29yZCwgJ2JpbmFyeScpXG4gIH1cbiAgaWYgKHNhbHQgJiYgIUJ1ZmZlci5pc0J1ZmZlcihzYWx0KSkge1xuICAgIHNhbHQgPSBuZXcgQnVmZmVyKHNhbHQsICdiaW5hcnknKVxuICB9XG4gIGtleUxlbiA9IGtleUxlbiAvIDhcbiAgaXZMZW4gPSBpdkxlbiB8fCAwXG4gIHZhciBraSA9IDBcbiAgdmFyIGlpID0gMFxuICB2YXIga2V5ID0gbmV3IEJ1ZmZlcihrZXlMZW4pXG4gIHZhciBpdiA9IG5ldyBCdWZmZXIoaXZMZW4pXG4gIHZhciBhZGRtZCA9IDBcbiAgdmFyIG1kX2J1ZlxuICB2YXIgaVxuICB2YXIgYnVmcyA9IFtdXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKGFkZG1kKysgPiAwKSB7XG4gICAgICBidWZzLnB1c2gobWRfYnVmKVxuICAgIH1cbiAgICBidWZzLnB1c2gocGFzc3dvcmQpXG4gICAgaWYgKHNhbHQpIHtcbiAgICAgIGJ1ZnMucHVzaChzYWx0KVxuICAgIH1cbiAgICBtZF9idWYgPSBtZDUoQnVmZmVyLmNvbmNhdChidWZzKSlcbiAgICBidWZzID0gW11cbiAgICBpID0gMFxuICAgIGlmIChrZXlMZW4gPiAwKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpZiAoa2V5TGVuID09PSAwKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gbWRfYnVmLmxlbmd0aCkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAga2V5W2tpKytdID0gbWRfYnVmW2ldXG4gICAgICAgIGtleUxlbi0tXG4gICAgICAgIGkrK1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXZMZW4gPiAwICYmIGkgIT09IG1kX2J1Zi5sZW5ndGgpIHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGlmIChpdkxlbiA9PT0gMCkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPT09IG1kX2J1Zi5sZW5ndGgpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGl2W2lpKytdID0gbWRfYnVmW2ldXG4gICAgICAgIGl2TGVuLS1cbiAgICAgICAgaSsrXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChrZXlMZW4gPT09IDAgJiYgaXZMZW4gPT09IDApIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG4gIGZvciAoaSA9IDA7IGkgPCBtZF9idWYubGVuZ3RoOyBpKyspIHtcbiAgICBtZF9idWZbaV0gPSAwXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBrZXk6IGtleSxcbiAgICBpdjogaXZcbiAgfVxufVxuIiwidmFyIGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuXG52YXIgQlVGX0xFTkdUSCA9IDY0ICogMTAyNFxudmFyIF9idWZmID0gbmV3IEJ1ZmZlcihCVUZfTEVOR1RIKVxuXG5mdW5jdGlvbiBjb3B5RmlsZVN5bmMgKHNyY0ZpbGUsIGRlc3RGaWxlLCBvcHRpb25zKSB7XG4gIHZhciBjbG9iYmVyID0gb3B0aW9ucy5jbG9iYmVyXG4gIHZhciBwcmVzZXJ2ZVRpbWVzdGFtcHMgPSBvcHRpb25zLnByZXNlcnZlVGltZXN0YW1wc1xuXG4gIGlmIChmcy5leGlzdHNTeW5jKGRlc3RGaWxlKSkge1xuICAgIGlmIChjbG9iYmVyKSB7XG4gICAgICBmcy51bmxpbmtTeW5jKGRlc3RGaWxlKVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdFRVhJU1Q6ICcgKyBkZXN0RmlsZSArICcgYWxyZWFkeSBleGlzdHMuJylcbiAgICAgIGVyci5jb2RlID0gJ0VFWElTVCdcbiAgICAgIGVyci5lcnJubyA9IC0xN1xuICAgICAgZXJyLnBhdGggPSBkZXN0RmlsZVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG5cbiAgdmFyIGZkciA9IGZzLm9wZW5TeW5jKHNyY0ZpbGUsICdyJylcbiAgdmFyIHN0YXQgPSBmcy5mc3RhdFN5bmMoZmRyKVxuICB2YXIgZmR3ID0gZnMub3BlblN5bmMoZGVzdEZpbGUsICd3Jywgc3RhdC5tb2RlKVxuICB2YXIgYnl0ZXNSZWFkID0gMVxuICB2YXIgcG9zID0gMFxuXG4gIHdoaWxlIChieXRlc1JlYWQgPiAwKSB7XG4gICAgYnl0ZXNSZWFkID0gZnMucmVhZFN5bmMoZmRyLCBfYnVmZiwgMCwgQlVGX0xFTkdUSCwgcG9zKVxuICAgIGZzLndyaXRlU3luYyhmZHcsIF9idWZmLCAwLCBieXRlc1JlYWQpXG4gICAgcG9zICs9IGJ5dGVzUmVhZFxuICB9XG5cbiAgaWYgKHByZXNlcnZlVGltZXN0YW1wcykge1xuICAgIGZzLmZ1dGltZXNTeW5jKGZkdywgc3RhdC5hdGltZSwgc3RhdC5tdGltZSlcbiAgfVxuXG4gIGZzLmNsb3NlU3luYyhmZHIpXG4gIGZzLmNsb3NlU3luYyhmZHcpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUZpbGVTeW5jXG4iLCJ2YXIgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxudmFyIGNvcHlGaWxlU3luYyA9IHJlcXVpcmUoJy4vY29weS1maWxlLXN5bmMnKVxudmFyIG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcblxuZnVuY3Rpb24gY29weVN5bmMgKHNyYywgZGVzdCwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicgfHwgb3B0aW9ucyBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIG9wdGlvbnMgPSB7ZmlsdGVyOiBvcHRpb25zfVxuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgb3B0aW9ucy5yZWN1cnNpdmUgPSAhIW9wdGlvbnMucmVjdXJzaXZlXG5cbiAgLy8gZGVmYXVsdCB0byB0cnVlIGZvciBub3dcbiAgb3B0aW9ucy5jbG9iYmVyID0gJ2Nsb2JiZXInIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMuY2xvYmJlciA6IHRydWVcbiAgb3B0aW9ucy5kZXJlZmVyZW5jZSA9ICdkZXJlZmVyZW5jZScgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy5kZXJlZmVyZW5jZSA6IGZhbHNlXG4gIG9wdGlvbnMucHJlc2VydmVUaW1lc3RhbXBzID0gJ3ByZXNlcnZlVGltZXN0YW1wcycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy5wcmVzZXJ2ZVRpbWVzdGFtcHMgOiBmYWxzZVxuXG4gIG9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucy5maWx0ZXIgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZSB9XG5cbiAgLy8gV2FybiBhYm91dCB1c2luZyBwcmVzZXJ2ZVRpbWVzdGFtcHMgb24gMzItYml0IG5vZGU6XG4gIGlmIChvcHRpb25zLnByZXNlcnZlVGltZXN0YW1wcyAmJiBwcm9jZXNzLmFyY2ggPT09ICdpYTMyJykge1xuICAgIGNvbnNvbGUud2FybignZnMtZXh0cmE6IFVzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcXG4nICtcbiAgICAnc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcHJpY2hhcmRzb24vbm9kZS1mcy1leHRyYS9pc3N1ZXMvMjY5JylcbiAgfVxuXG4gIHZhciBzdGF0cyA9IChvcHRpb25zLnJlY3Vyc2l2ZSAmJiAhb3B0aW9ucy5kZXJlZmVyZW5jZSkgPyBmcy5sc3RhdFN5bmMoc3JjKSA6IGZzLnN0YXRTeW5jKHNyYylcbiAgdmFyIGRlc3RGb2xkZXIgPSBwYXRoLmRpcm5hbWUoZGVzdClcbiAgdmFyIGRlc3RGb2xkZXJFeGlzdHMgPSBmcy5leGlzdHNTeW5jKGRlc3RGb2xkZXIpXG4gIHZhciBwZXJmb3JtQ29weSA9IGZhbHNlXG5cbiAgaWYgKHN0YXRzLmlzRmlsZSgpKSB7XG4gICAgaWYgKG9wdGlvbnMuZmlsdGVyIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6IGZzLWV4dHJhOiBQYXNzaW5nIGEgUmVnRXhwIGZpbHRlciBpcyBkZXByZWNhdGVkLCB1c2UgYSBmdW5jdGlvbicpXG4gICAgICBwZXJmb3JtQ29weSA9IG9wdGlvbnMuZmlsdGVyLnRlc3Qoc3JjKVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSBwZXJmb3JtQ29weSA9IG9wdGlvbnMuZmlsdGVyKHNyYylcblxuICAgIGlmIChwZXJmb3JtQ29weSkge1xuICAgICAgaWYgKCFkZXN0Rm9sZGVyRXhpc3RzKSBta2Rpci5ta2RpcnNTeW5jKGRlc3RGb2xkZXIpXG4gICAgICBjb3B5RmlsZVN5bmMoc3JjLCBkZXN0LCB7Y2xvYmJlcjogb3B0aW9ucy5jbG9iYmVyLCBwcmVzZXJ2ZVRpbWVzdGFtcHM6IG9wdGlvbnMucHJlc2VydmVUaW1lc3RhbXBzfSlcbiAgICB9XG4gIH0gZWxzZSBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhkZXN0KSkgbWtkaXIubWtkaXJzU3luYyhkZXN0KVxuICAgIHZhciBjb250ZW50cyA9IGZzLnJlYWRkaXJTeW5jKHNyYylcbiAgICBjb250ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChjb250ZW50KSB7XG4gICAgICB2YXIgb3B0cyA9IG9wdGlvbnNcbiAgICAgIG9wdHMucmVjdXJzaXZlID0gdHJ1ZVxuICAgICAgY29weVN5bmMocGF0aC5qb2luKHNyYywgY29udGVudCksIHBhdGguam9pbihkZXN0LCBjb250ZW50KSwgb3B0cylcbiAgICB9KVxuICB9IGVsc2UgaWYgKG9wdGlvbnMucmVjdXJzaXZlICYmIHN0YXRzLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICB2YXIgc3JjUGF0aCA9IGZzLnJlYWRsaW5rU3luYyhzcmMpXG4gICAgZnMuc3ltbGlua1N5bmMoc3JjUGF0aCwgZGVzdClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlTeW5jXG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29weVN5bmM6IHJlcXVpcmUoJy4vY29weS1zeW5jJylcbn1cbiIsInZhciBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG52YXIgbmNwID0gcmVxdWlyZSgnLi9uY3AnKVxudmFyIG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcblxuZnVuY3Rpb24gY29weSAoc3JjLCBkZXN0LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicgJiYgIWNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zXG4gICAgb3B0aW9ucyA9IHt9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicgfHwgb3B0aW9ucyBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIG9wdGlvbnMgPSB7ZmlsdGVyOiBvcHRpb25zfVxuICB9XG4gIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge31cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cblxuICAvLyBXYXJuIGFib3V0IHVzaW5nIHByZXNlcnZlVGltZXN0YW1wcyBvbiAzMi1iaXQgbm9kZTpcbiAgaWYgKG9wdGlvbnMucHJlc2VydmVUaW1lc3RhbXBzICYmIHByb2Nlc3MuYXJjaCA9PT0gJ2lhMzInKSB7XG4gICAgY29uc29sZS53YXJuKCdmcy1leHRyYTogVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xcbicgK1xuICAgICdzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjknKVxuICB9XG5cbiAgLy8gZG9uJ3QgYWxsb3cgc3JjIGFuZCBkZXN0IHRvIGJlIHRoZSBzYW1lXG4gIHZhciBiYXNlUGF0aCA9IHByb2Nlc3MuY3dkKClcbiAgdmFyIGN1cnJlbnRQYXRoID0gcGF0aC5yZXNvbHZlKGJhc2VQYXRoLCBzcmMpXG4gIHZhciB0YXJnZXRQYXRoID0gcGF0aC5yZXNvbHZlKGJhc2VQYXRoLCBkZXN0KVxuICBpZiAoY3VycmVudFBhdGggPT09IHRhcmdldFBhdGgpIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoJ1NvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuJykpXG5cbiAgZnMubHN0YXQoc3JjLCBmdW5jdGlvbiAoZXJyLCBzdGF0cykge1xuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG5cbiAgICB2YXIgZGlyID0gbnVsbFxuICAgIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB2YXIgcGFydHMgPSBkZXN0LnNwbGl0KHBhdGguc2VwKVxuICAgICAgcGFydHMucG9wKClcbiAgICAgIGRpciA9IHBhcnRzLmpvaW4ocGF0aC5zZXApXG4gICAgfSBlbHNlIHtcbiAgICAgIGRpciA9IHBhdGguZGlybmFtZShkZXN0KVxuICAgIH1cblxuICAgIGZzLmV4aXN0cyhkaXIsIGZ1bmN0aW9uIChkaXJFeGlzdHMpIHtcbiAgICAgIGlmIChkaXJFeGlzdHMpIHJldHVybiBuY3Aoc3JjLCBkZXN0LCBvcHRpb25zLCBjYWxsYmFjaylcbiAgICAgIG1rZGlyLm1rZGlycyhkaXIsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgbmNwKHNyYywgZGVzdCwgb3B0aW9ucywgY2FsbGJhY2spXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVxuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvcHk6IHJlcXVpcmUoJy4vY29weScpXG59XG4iLCIvLyBpbXBvcnRlZCBmcm9tIG5jcCAodGhpcyBpcyB0ZW1wb3JhcnksIHdpbGwgcmV3cml0ZSlcblxudmFyIGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJylcbnZhciB1dGltZXMgPSByZXF1aXJlKCcuLi91dGlsL3V0aW1lcycpXG5cbmZ1bmN0aW9uIG5jcCAoc291cmNlLCBkZXN0LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zXG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICB2YXIgYmFzZVBhdGggPSBwcm9jZXNzLmN3ZCgpXG4gIHZhciBjdXJyZW50UGF0aCA9IHBhdGgucmVzb2x2ZShiYXNlUGF0aCwgc291cmNlKVxuICB2YXIgdGFyZ2V0UGF0aCA9IHBhdGgucmVzb2x2ZShiYXNlUGF0aCwgZGVzdClcblxuICB2YXIgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXJcbiAgdmFyIHRyYW5zZm9ybSA9IG9wdGlvbnMudHJhbnNmb3JtXG4gIHZhciBjbG9iYmVyID0gb3B0aW9ucy5jbG9iYmVyICE9PSBmYWxzZSAvLyBkZWZhdWx0IHRydWVcbiAgdmFyIGRlcmVmZXJlbmNlID0gb3B0aW9ucy5kZXJlZmVyZW5jZVxuICB2YXIgcHJlc2VydmVUaW1lc3RhbXBzID0gb3B0aW9ucy5wcmVzZXJ2ZVRpbWVzdGFtcHMgPT09IHRydWVcblxuICB2YXIgc3RhcnRlZCA9IDBcbiAgdmFyIGZpbmlzaGVkID0gMFxuICB2YXIgcnVubmluZyA9IDBcblxuICB2YXIgZXJyb3JlZCA9IGZhbHNlXG5cbiAgc3RhcnRDb3B5KGN1cnJlbnRQYXRoKVxuXG4gIGZ1bmN0aW9uIHN0YXJ0Q29weSAoc291cmNlKSB7XG4gICAgc3RhcnRlZCsrXG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgaWYgKGZpbHRlciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6IGZzLWV4dHJhOiBQYXNzaW5nIGEgUmVnRXhwIGZpbHRlciBpcyBkZXByZWNhdGVkLCB1c2UgYSBmdW5jdGlvbicpXG4gICAgICAgIGlmICghZmlsdGVyLnRlc3Qoc291cmNlKSkge1xuICAgICAgICAgIHJldHVybiBkb25lT25lKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoIWZpbHRlcihzb3VyY2UpKSB7XG4gICAgICAgICAgcmV0dXJuIGRvbmVPbmUodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZ2V0U3RhdHMoc291cmNlKVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U3RhdHMgKHNvdXJjZSkge1xuICAgIHZhciBzdGF0ID0gZGVyZWZlcmVuY2UgPyBmcy5zdGF0IDogZnMubHN0YXRcbiAgICBydW5uaW5nKytcbiAgICBzdGF0KHNvdXJjZSwgZnVuY3Rpb24gKGVyciwgc3RhdHMpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBvbkVycm9yKGVycilcblxuICAgICAgLy8gV2UgbmVlZCB0byBnZXQgdGhlIG1vZGUgZnJvbSB0aGUgc3RhdHMgb2JqZWN0IGFuZCBwcmVzZXJ2ZSBpdC5cbiAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICBuYW1lOiBzb3VyY2UsXG4gICAgICAgIG1vZGU6IHN0YXRzLm1vZGUsXG4gICAgICAgIG10aW1lOiBzdGF0cy5tdGltZSwgLy8gbW9kaWZpZWQgdGltZVxuICAgICAgICBhdGltZTogc3RhdHMuYXRpbWUsIC8vIGFjY2VzcyB0aW1lXG4gICAgICAgIHN0YXRzOiBzdGF0cyAvLyB0ZW1wb3JhcnlcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgcmV0dXJuIG9uRGlyKGl0ZW0pXG4gICAgICB9IGVsc2UgaWYgKHN0YXRzLmlzRmlsZSgpIHx8IHN0YXRzLmlzQ2hhcmFjdGVyRGV2aWNlKCkgfHwgc3RhdHMuaXNCbG9ja0RldmljZSgpKSB7XG4gICAgICAgIHJldHVybiBvbkZpbGUoaXRlbSlcbiAgICAgIH0gZWxzZSBpZiAoc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAvLyBTeW1saW5rcyBkb24ndCByZWFsbHkgbmVlZCB0byBrbm93IGFib3V0IHRoZSBtb2RlLlxuICAgICAgICByZXR1cm4gb25MaW5rKHNvdXJjZSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gb25GaWxlIChmaWxlKSB7XG4gICAgdmFyIHRhcmdldCA9IGZpbGUubmFtZS5yZXBsYWNlKGN1cnJlbnRQYXRoLCB0YXJnZXRQYXRoLnJlcGxhY2UoJyQnLCAnJCQkJCcpKSAvLyBlc2NhcGVzICckJyB3aXRoICckJCdcbiAgICBpc1dyaXRhYmxlKHRhcmdldCwgZnVuY3Rpb24gKHdyaXRhYmxlKSB7XG4gICAgICBpZiAod3JpdGFibGUpIHtcbiAgICAgICAgY29weUZpbGUoZmlsZSwgdGFyZ2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGNsb2JiZXIpIHtcbiAgICAgICAgICBybUZpbGUodGFyZ2V0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb3B5RmlsZShmaWxlLCB0YXJnZXQpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdFRVhJU1Q6ICcgKyB0YXJnZXQgKyAnIGFscmVhZHkgZXhpc3RzLicpXG4gICAgICAgICAgZXJyLmNvZGUgPSAnRUVYSVNUJ1xuICAgICAgICAgIGVyci5lcnJubyA9IC0xN1xuICAgICAgICAgIGVyci5wYXRoID0gdGFyZ2V0XG4gICAgICAgICAgb25FcnJvcihlcnIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gY29weUZpbGUgKGZpbGUsIHRhcmdldCkge1xuICAgIHZhciByZWFkU3RyZWFtID0gZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlLm5hbWUpXG4gICAgdmFyIHdyaXRlU3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0odGFyZ2V0LCB7IG1vZGU6IGZpbGUubW9kZSB9KVxuXG4gICAgcmVhZFN0cmVhbS5vbignZXJyb3InLCBvbkVycm9yKVxuICAgIHdyaXRlU3RyZWFtLm9uKCdlcnJvcicsIG9uRXJyb3IpXG5cbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICB0cmFuc2Zvcm0ocmVhZFN0cmVhbSwgd3JpdGVTdHJlYW0sIGZpbGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHdyaXRlU3RyZWFtLm9uKCdvcGVuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZWFkU3RyZWFtLnBpcGUod3JpdGVTdHJlYW0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIHdyaXRlU3RyZWFtLm9uY2UoJ2ZpbmlzaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZzLmNobW9kKHRhcmdldCwgZmlsZS5tb2RlLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBvbkVycm9yKGVycilcbiAgICAgICAgaWYgKHByZXNlcnZlVGltZXN0YW1wcykge1xuICAgICAgICAgIHV0aW1lcy51dGltZXNNaWxsaXModGFyZ2V0LCBmaWxlLmF0aW1lLCBmaWxlLm10aW1lLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gb25FcnJvcihlcnIpXG4gICAgICAgICAgICByZXR1cm4gZG9uZU9uZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb25lT25lKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gcm1GaWxlIChmaWxlLCBkb25lKSB7XG4gICAgZnMudW5saW5rKGZpbGUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBvbkVycm9yKGVycilcbiAgICAgIHJldHVybiBkb25lKClcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gb25EaXIgKGRpcikge1xuICAgIHZhciB0YXJnZXQgPSBkaXIubmFtZS5yZXBsYWNlKGN1cnJlbnRQYXRoLCB0YXJnZXRQYXRoLnJlcGxhY2UoJyQnLCAnJCQkJCcpKSAvLyBlc2NhcGVzICckJyB3aXRoICckJCdcbiAgICBpc1dyaXRhYmxlKHRhcmdldCwgZnVuY3Rpb24gKHdyaXRhYmxlKSB7XG4gICAgICBpZiAod3JpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG1rRGlyKGRpciwgdGFyZ2V0KVxuICAgICAgfVxuICAgICAgY29weURpcihkaXIubmFtZSlcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gbWtEaXIgKGRpciwgdGFyZ2V0KSB7XG4gICAgZnMubWtkaXIodGFyZ2V0LCBkaXIubW9kZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikgcmV0dXJuIG9uRXJyb3IoZXJyKVxuICAgICAgLy8gZGVzcGl0ZSBzZXR0aW5nIG1vZGUgaW4gZnMubWtkaXIsIGRvZXNuJ3Qgc2VlbSB0byB3b3JrXG4gICAgICAvLyBzbyB3ZSBzZXQgaXQgaGVyZS5cbiAgICAgIGZzLmNobW9kKHRhcmdldCwgZGlyLm1vZGUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIG9uRXJyb3IoZXJyKVxuICAgICAgICBjb3B5RGlyKGRpci5uYW1lKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gY29weURpciAoZGlyKSB7XG4gICAgZnMucmVhZGRpcihkaXIsIGZ1bmN0aW9uIChlcnIsIGl0ZW1zKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gb25FcnJvcihlcnIpXG4gICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHN0YXJ0Q29weShwYXRoLmpvaW4oZGlyLCBpdGVtKSlcbiAgICAgIH0pXG4gICAgICByZXR1cm4gZG9uZU9uZSgpXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTGluayAobGluaykge1xuICAgIHZhciB0YXJnZXQgPSBsaW5rLnJlcGxhY2UoY3VycmVudFBhdGgsIHRhcmdldFBhdGgpXG4gICAgZnMucmVhZGxpbmsobGluaywgZnVuY3Rpb24gKGVyciwgcmVzb2x2ZWRQYXRoKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gb25FcnJvcihlcnIpXG4gICAgICBjaGVja0xpbmsocmVzb2x2ZWRQYXRoLCB0YXJnZXQpXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrTGluayAocmVzb2x2ZWRQYXRoLCB0YXJnZXQpIHtcbiAgICBpZiAoZGVyZWZlcmVuY2UpIHtcbiAgICAgIHJlc29sdmVkUGF0aCA9IHBhdGgucmVzb2x2ZShiYXNlUGF0aCwgcmVzb2x2ZWRQYXRoKVxuICAgIH1cbiAgICBpc1dyaXRhYmxlKHRhcmdldCwgZnVuY3Rpb24gKHdyaXRhYmxlKSB7XG4gICAgICBpZiAod3JpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG1ha2VMaW5rKHJlc29sdmVkUGF0aCwgdGFyZ2V0KVxuICAgICAgfVxuICAgICAgZnMucmVhZGxpbmsodGFyZ2V0LCBmdW5jdGlvbiAoZXJyLCB0YXJnZXREZXN0KSB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBvbkVycm9yKGVycilcblxuICAgICAgICBpZiAoZGVyZWZlcmVuY2UpIHtcbiAgICAgICAgICB0YXJnZXREZXN0ID0gcGF0aC5yZXNvbHZlKGJhc2VQYXRoLCB0YXJnZXREZXN0KVxuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXREZXN0ID09PSByZXNvbHZlZFBhdGgpIHtcbiAgICAgICAgICByZXR1cm4gZG9uZU9uZSgpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJtRmlsZSh0YXJnZXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBtYWtlTGluayhyZXNvbHZlZFBhdGgsIHRhcmdldClcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIG1ha2VMaW5rIChsaW5rUGF0aCwgdGFyZ2V0KSB7XG4gICAgZnMuc3ltbGluayhsaW5rUGF0aCwgdGFyZ2V0LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gb25FcnJvcihlcnIpXG4gICAgICByZXR1cm4gZG9uZU9uZSgpXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzV3JpdGFibGUgKHBhdGgsIGRvbmUpIHtcbiAgICBmcy5sc3RhdChwYXRoLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHJldHVybiBkb25lKHRydWUpXG4gICAgICAgIHJldHVybiBkb25lKGZhbHNlKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRvbmUoZmFsc2UpXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRXJyb3IgKGVycikge1xuICAgIC8vIGVuc3VyZSBjYWxsYmFjayBpcyBkZWZpbmVkICYgY2FsbGVkIG9ubHkgb25jZTpcbiAgICBpZiAoIWVycm9yZWQgJiYgY2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3JlZCA9IHRydWVcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZG9uZU9uZSAoc2tpcHBlZCkge1xuICAgIGlmICghc2tpcHBlZCkgcnVubmluZy0tXG4gICAgZmluaXNoZWQrK1xuICAgIGlmICgoc3RhcnRlZCA9PT0gZmluaXNoZWQpICYmIChydW5uaW5nID09PSAwKSkge1xuICAgICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmNwXG4iLCJ2YXIgZnMgPSByZXF1aXJlKCdmcycpXG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxudmFyIG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbnZhciByZW1vdmUgPSByZXF1aXJlKCcuLi9yZW1vdmUnKVxuXG5mdW5jdGlvbiBlbXB0eURpciAoZGlyLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9XG4gIGZzLnJlYWRkaXIoZGlyLCBmdW5jdGlvbiAoZXJyLCBpdGVtcykge1xuICAgIGlmIChlcnIpIHJldHVybiBta2Rpci5ta2RpcnMoZGlyLCBjYWxsYmFjaylcblxuICAgIGl0ZW1zID0gaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gcGF0aC5qb2luKGRpciwgaXRlbSlcbiAgICB9KVxuXG4gICAgZGVsZXRlSXRlbSgpXG5cbiAgICBmdW5jdGlvbiBkZWxldGVJdGVtICgpIHtcbiAgICAgIHZhciBpdGVtID0gaXRlbXMucG9wKClcbiAgICAgIGlmICghaXRlbSkgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgIHJlbW92ZS5yZW1vdmUoaXRlbSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICBkZWxldGVJdGVtKClcbiAgICAgIH0pXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBlbXB0eURpclN5bmMgKGRpcikge1xuICB2YXIgaXRlbXNcbiAgdHJ5IHtcbiAgICBpdGVtcyA9IGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuICB9XG5cbiAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgIGl0ZW0gPSBwYXRoLmpvaW4oZGlyLCBpdGVtKVxuICAgIHJlbW92ZS5yZW1vdmVTeW5jKGl0ZW0pXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBlbXB0eURpclN5bmM6IGVtcHR5RGlyU3luYyxcbiAgZW1wdHlkaXJTeW5jOiBlbXB0eURpclN5bmMsXG4gIGVtcHR5RGlyOiBlbXB0eURpcixcbiAgZW1wdHlkaXI6IGVtcHR5RGlyXG59XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxudmFyIGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxudmFyIG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcblxuZnVuY3Rpb24gY3JlYXRlRmlsZSAoZmlsZSwgY2FsbGJhY2spIHtcbiAgZnVuY3Rpb24gbWFrZUZpbGUgKCkge1xuICAgIGZzLndyaXRlRmlsZShmaWxlLCAnJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9KVxuICB9XG5cbiAgZnMuZXhpc3RzKGZpbGUsIGZ1bmN0aW9uIChmaWxlRXhpc3RzKSB7XG4gICAgaWYgKGZpbGVFeGlzdHMpIHJldHVybiBjYWxsYmFjaygpXG4gICAgdmFyIGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuICAgIGZzLmV4aXN0cyhkaXIsIGZ1bmN0aW9uIChkaXJFeGlzdHMpIHtcbiAgICAgIGlmIChkaXJFeGlzdHMpIHJldHVybiBtYWtlRmlsZSgpXG4gICAgICBta2Rpci5ta2RpcnMoZGlyLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgIG1ha2VGaWxlKClcbiAgICAgIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmlsZVN5bmMgKGZpbGUpIHtcbiAgaWYgKGZzLmV4aXN0c1N5bmMoZmlsZSkpIHJldHVyblxuXG4gIHZhciBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSlcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGRpcikpIHtcbiAgICBta2Rpci5ta2RpcnNTeW5jKGRpcilcbiAgfVxuXG4gIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgJycpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVGaWxlOiBjcmVhdGVGaWxlLFxuICBjcmVhdGVGaWxlU3luYzogY3JlYXRlRmlsZVN5bmMsXG4gIC8vIGFsaWFzXG4gIGVuc3VyZUZpbGU6IGNyZWF0ZUZpbGUsXG4gIGVuc3VyZUZpbGVTeW5jOiBjcmVhdGVGaWxlU3luY1xufVxuIiwidmFyIGZpbGUgPSByZXF1aXJlKCcuL2ZpbGUnKVxudmFyIGxpbmsgPSByZXF1aXJlKCcuL2xpbmsnKVxudmFyIHN5bWxpbmsgPSByZXF1aXJlKCcuL3N5bWxpbmsnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gZmlsZVxuICBjcmVhdGVGaWxlOiBmaWxlLmNyZWF0ZUZpbGUsXG4gIGNyZWF0ZUZpbGVTeW5jOiBmaWxlLmNyZWF0ZUZpbGVTeW5jLFxuICBlbnN1cmVGaWxlOiBmaWxlLmNyZWF0ZUZpbGUsXG4gIGVuc3VyZUZpbGVTeW5jOiBmaWxlLmNyZWF0ZUZpbGVTeW5jLFxuICAvLyBsaW5rXG4gIGNyZWF0ZUxpbms6IGxpbmsuY3JlYXRlTGluayxcbiAgY3JlYXRlTGlua1N5bmM6IGxpbmsuY3JlYXRlTGlua1N5bmMsXG4gIGVuc3VyZUxpbms6IGxpbmsuY3JlYXRlTGluayxcbiAgZW5zdXJlTGlua1N5bmM6IGxpbmsuY3JlYXRlTGlua1N5bmMsXG4gIC8vIHN5bWxpbmtcbiAgY3JlYXRlU3ltbGluazogc3ltbGluay5jcmVhdGVTeW1saW5rLFxuICBjcmVhdGVTeW1saW5rU3luYzogc3ltbGluay5jcmVhdGVTeW1saW5rU3luYyxcbiAgZW5zdXJlU3ltbGluazogc3ltbGluay5jcmVhdGVTeW1saW5rLFxuICBlbnN1cmVTeW1saW5rU3luYzogc3ltbGluay5jcmVhdGVTeW1saW5rU3luY1xufVxuIiwidmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJylcbnZhciBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbnZhciBta2RpciA9IHJlcXVpcmUoJy4uL21rZGlycycpXG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmsgKHNyY3BhdGgsIGRzdHBhdGgsIGNhbGxiYWNrKSB7XG4gIGZ1bmN0aW9uIG1ha2VMaW5rIChzcmNwYXRoLCBkc3RwYXRoKSB7XG4gICAgZnMubGluayhzcmNwYXRoLCBkc3RwYXRoLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgY2FsbGJhY2sobnVsbClcbiAgICB9KVxuICB9XG5cbiAgZnMuZXhpc3RzKGRzdHBhdGgsIGZ1bmN0aW9uIChkZXN0aW5hdGlvbkV4aXN0cykge1xuICAgIGlmIChkZXN0aW5hdGlvbkV4aXN0cykgcmV0dXJuIGNhbGxiYWNrKG51bGwpXG4gICAgZnMubHN0YXQoc3JjcGF0aCwgZnVuY3Rpb24gKGVyciwgc3RhdCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZUxpbmsnKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgfVxuXG4gICAgICB2YXIgZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gICAgICBmcy5leGlzdHMoZGlyLCBmdW5jdGlvbiAoZGlyRXhpc3RzKSB7XG4gICAgICAgIGlmIChkaXJFeGlzdHMpIHJldHVybiBtYWtlTGluayhzcmNwYXRoLCBkc3RwYXRoKVxuICAgICAgICBta2Rpci5ta2RpcnMoZGlyLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgICBtYWtlTGluayhzcmNwYXRoLCBkc3RwYXRoKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBjcmVhdGVMaW5rU3luYyAoc3JjcGF0aCwgZHN0cGF0aCwgY2FsbGJhY2spIHtcbiAgdmFyIGRlc3RpbmF0aW9uRXhpc3RzID0gZnMuZXhpc3RzU3luYyhkc3RwYXRoKVxuICBpZiAoZGVzdGluYXRpb25FeGlzdHMpIHJldHVybiB1bmRlZmluZWRcblxuICB0cnkge1xuICAgIGZzLmxzdGF0U3luYyhzcmNwYXRoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZUxpbmsnKVxuICAgIHRocm93IGVyclxuICB9XG5cbiAgdmFyIGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICB2YXIgZGlyRXhpc3RzID0gZnMuZXhpc3RzU3luYyhkaXIpXG4gIGlmIChkaXJFeGlzdHMpIHJldHVybiBmcy5saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoKVxuICBta2Rpci5ta2RpcnNTeW5jKGRpcilcblxuICByZXR1cm4gZnMubGlua1N5bmMoc3JjcGF0aCwgZHN0cGF0aClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZUxpbms6IGNyZWF0ZUxpbmssXG4gIGNyZWF0ZUxpbmtTeW5jOiBjcmVhdGVMaW5rU3luYyxcbiAgLy8gYWxpYXNcbiAgZW5zdXJlTGluazogY3JlYXRlTGluayxcbiAgZW5zdXJlTGlua1N5bmM6IGNyZWF0ZUxpbmtTeW5jXG59XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuLy8gcGF0aC5pc0Fic29sdXRlIHNoaW0gZm9yIE5vZGUuanMgMC4xMCBzdXBwb3J0XG52YXIgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCByZXR1cm5zIHR3byB0eXBlcyBvZiBwYXRocywgb25lIHJlbGF0aXZlIHRvIHN5bWxpbmssIGFuZCBvbmVcbiAqIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBDaGVja3MgaWYgcGF0aCBpcyBhYnNvbHV0ZSBvclxuICogcmVsYXRpdmUuIElmIHRoZSBwYXRoIGlzIHJlbGF0aXZlLCB0aGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgcGF0aCBpc1xuICogcmVsYXRpdmUgdG8gc3ltbGluayBvciByZWxhdGl2ZSB0byBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBUaGlzIGlzIGFuXG4gKiBpbml0aWF0aXZlIHRvIGZpbmQgYSBzbWFydGVyIGBzcmNwYXRoYCB0byBzdXBwbHkgd2hlbiBidWlsZGluZyBzeW1saW5rcy5cbiAqIFRoaXMgYWxsb3dzIHlvdSB0byBkZXRlcm1pbmUgd2hpY2ggcGF0aCB0byB1c2Ugb3V0IG9mIG9uZSBvZiB0aHJlZSBwb3NzaWJsZVxuICogdHlwZXMgb2Ygc291cmNlIHBhdGhzLiBUaGUgZmlyc3QgaXMgYW4gYWJzb2x1dGUgcGF0aC4gVGhpcyBpcyBkZXRlY3RlZCBieVxuICogYHBhdGguaXNBYnNvbHV0ZSgpYC4gV2hlbiBhbiBhYnNvbHV0ZSBwYXRoIGlzIHByb3ZpZGVkLCBpdCBpcyBjaGVja2VkIHRvXG4gKiBzZWUgaWYgaXQgZXhpc3RzLiBJZiBpdCBkb2VzIGl0J3MgdXNlZCwgaWYgbm90IGFuIGVycm9yIGlzIHJldHVybmVkXG4gKiAoY2FsbGJhY2spLyB0aHJvd24gKHN5bmMpLiBUaGUgb3RoZXIgdHdvIG9wdGlvbnMgZm9yIGBzcmNwYXRoYCBhcmUgYVxuICogcmVsYXRpdmUgdXJsLiBCeSBkZWZhdWx0IE5vZGUncyBgZnMuc3ltbGlua2Agd29ya3MgYnkgY3JlYXRpbmcgYSBzeW1saW5rXG4gKiB1c2luZyBgZHN0cGF0aGAgYW5kIGV4cGVjdHMgdGhlIGBzcmNwYXRoYCB0byBiZSByZWxhdGl2ZSB0byB0aGUgbmV3bHlcbiAqIGNyZWF0ZWQgc3ltbGluay4gSWYgeW91IHByb3ZpZGUgYSBgc3JjcGF0aGAgdGhhdCBkb2VzIG5vdCBleGlzdCBvbiB0aGUgZmlsZVxuICogc3lzdGVtIGl0IHJlc3VsdHMgaW4gYSBicm9rZW4gc3ltbGluay4gVG8gbWluaW1pemUgdGhpcywgdGhlIGZ1bmN0aW9uXG4gKiBjaGVja3MgdG8gc2VlIGlmIHRoZSAncmVsYXRpdmUgdG8gc3ltbGluaycgc291cmNlIGZpbGUgZXhpc3RzLCBhbmQgaWYgaXRcbiAqIGRvZXMgaXQgd2lsbCB1c2UgaXQuIElmIGl0IGRvZXMgbm90LCBpdCBjaGVja3MgaWYgdGhlcmUncyBhIGZpbGUgdGhhdFxuICogZXhpc3RzIHRoYXQgaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIGlmIGRvZXMgaXRzIHVzZWQuXG4gKiBUaGlzIHByZXNlcnZlcyB0aGUgZXhwZWN0YXRpb25zIG9mIHRoZSBvcmlnaW5hbCBmcy5zeW1saW5rIHNwZWMgYW5kIGFkZHNcbiAqIHRoZSBhYmlsaXR5IHRvIHBhc3MgaW4gYHJlbGF0aXZlIHRvIGN1cnJlbnQgd29ya2luZyBkaXJlY290cnlgIHBhdGhzLlxuICovXG5cbmZ1bmN0aW9uIHN5bWxpbmtQYXRocyAoc3JjcGF0aCwgZHN0cGF0aCwgY2FsbGJhY2spIHtcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShzcmNwYXRoKSkge1xuICAgIHJldHVybiBmcy5sc3RhdChzcmNwYXRoLCBmdW5jdGlvbiAoZXJyLCBzdGF0KSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGVyci5tZXNzYWdlID0gZXJyLm1lc3NhZ2UucmVwbGFjZSgnbHN0YXQnLCAnZW5zdXJlU3ltbGluaycpXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICB9XG4gICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwge1xuICAgICAgICAndG9Dd2QnOiBzcmNwYXRoLFxuICAgICAgICAndG9Ec3QnOiBzcmNwYXRoXG4gICAgICB9KVxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgdmFyIGRzdGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICAgIHZhciByZWxhdGl2ZVRvRHN0ID0gcGF0aC5qb2luKGRzdGRpciwgc3JjcGF0aClcbiAgICByZXR1cm4gZnMuZXhpc3RzKHJlbGF0aXZlVG9Ec3QsIGZ1bmN0aW9uIChleGlzdHMpIHtcbiAgICAgIGlmIChleGlzdHMpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgICAgICAndG9Dd2QnOiByZWxhdGl2ZVRvRHN0LFxuICAgICAgICAgICd0b0RzdCc6IHNyY3BhdGhcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmcy5sc3RhdChzcmNwYXRoLCBmdW5jdGlvbiAoZXJyLCBzdGF0KSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVTeW1saW5rJylcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCB7XG4gICAgICAgICAgICAndG9Dd2QnOiBzcmNwYXRoLFxuICAgICAgICAgICAgJ3RvRHN0JzogcGF0aC5yZWxhdGl2ZShkc3RkaXIsIHNyY3BhdGgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIHN5bWxpbmtQYXRoc1N5bmMgKHNyY3BhdGgsIGRzdHBhdGgpIHtcbiAgdmFyIGV4aXN0c1xuICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhzcmNwYXRoKVxuICAgIGlmICghZXhpc3RzKSB0aHJvdyBuZXcgRXJyb3IoJ2Fic29sdXRlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QnKVxuICAgIHJldHVybiB7XG4gICAgICAndG9Dd2QnOiBzcmNwYXRoLFxuICAgICAgJ3RvRHN0Jzogc3JjcGF0aFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgZHN0ZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gICAgdmFyIHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuICAgIGV4aXN0cyA9IGZzLmV4aXN0c1N5bmMocmVsYXRpdmVUb0RzdClcbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAndG9Dd2QnOiByZWxhdGl2ZVRvRHN0LFxuICAgICAgICAndG9Ec3QnOiBzcmNwYXRoXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoc3JjcGF0aClcbiAgICAgIGlmICghZXhpc3RzKSB0aHJvdyBuZXcgRXJyb3IoJ3JlbGF0aXZlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QnKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ3RvQ3dkJzogc3JjcGF0aCxcbiAgICAgICAgJ3RvRHN0JzogcGF0aC5yZWxhdGl2ZShkc3RkaXIsIHNyY3BhdGgpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAnc3ltbGlua1BhdGhzJzogc3ltbGlua1BhdGhzLFxuICAnc3ltbGlua1BhdGhzU3luYyc6IHN5bWxpbmtQYXRoc1N5bmNcbn1cbiIsInZhciBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcblxuZnVuY3Rpb24gc3ltbGlua1R5cGUgKHNyY3BhdGgsIHR5cGUsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IHR5cGUgOiBjYWxsYmFja1xuICB0eXBlID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IGZhbHNlIDogdHlwZVxuICBpZiAodHlwZSkgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHR5cGUpXG4gIGZzLmxzdGF0KHNyY3BhdGgsIGZ1bmN0aW9uIChlcnIsIHN0YXRzKSB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKG51bGwsICdmaWxlJylcbiAgICB0eXBlID0gKHN0YXRzICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpID8gJ2RpcicgOiAnZmlsZSdcbiAgICBjYWxsYmFjayhudWxsLCB0eXBlKVxuICB9KVxufVxuXG5mdW5jdGlvbiBzeW1saW5rVHlwZVN5bmMgKHNyY3BhdGgsIHR5cGUpIHtcbiAgaWYgKHR5cGUpIHJldHVybiB0eXBlXG4gIHRyeSB7XG4gICAgdmFyIHN0YXRzID0gZnMubHN0YXRTeW5jKHNyY3BhdGgpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gJ2ZpbGUnXG4gIH1cbiAgcmV0dXJuIChzdGF0cyAmJiBzdGF0cy5pc0RpcmVjdG9yeSgpKSA/ICdkaXInIDogJ2ZpbGUnXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzeW1saW5rVHlwZTogc3ltbGlua1R5cGUsXG4gIHN5bWxpbmtUeXBlU3luYzogc3ltbGlua1R5cGVTeW5jXG59XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxudmFyIGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxudmFyIF9ta2RpcnMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxudmFyIG1rZGlycyA9IF9ta2RpcnMubWtkaXJzXG52YXIgbWtkaXJzU3luYyA9IF9ta2RpcnMubWtkaXJzU3luY1xuXG52YXIgX3N5bWxpbmtQYXRocyA9IHJlcXVpcmUoJy4vc3ltbGluay1wYXRocycpXG52YXIgc3ltbGlua1BhdGhzID0gX3N5bWxpbmtQYXRocy5zeW1saW5rUGF0aHNcbnZhciBzeW1saW5rUGF0aHNTeW5jID0gX3N5bWxpbmtQYXRocy5zeW1saW5rUGF0aHNTeW5jXG5cbnZhciBfc3ltbGlua1R5cGUgPSByZXF1aXJlKCcuL3N5bWxpbmstdHlwZScpXG52YXIgc3ltbGlua1R5cGUgPSBfc3ltbGlua1R5cGUuc3ltbGlua1R5cGVcbnZhciBzeW1saW5rVHlwZVN5bmMgPSBfc3ltbGlua1R5cGUuc3ltbGlua1R5cGVTeW5jXG5cbmZ1bmN0aW9uIGNyZWF0ZVN5bWxpbmsgKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IHR5cGUgOiBjYWxsYmFja1xuICB0eXBlID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IGZhbHNlIDogdHlwZVxuXG4gIGZzLmV4aXN0cyhkc3RwYXRoLCBmdW5jdGlvbiAoZGVzdGluYXRpb25FeGlzdHMpIHtcbiAgICBpZiAoZGVzdGluYXRpb25FeGlzdHMpIHJldHVybiBjYWxsYmFjayhudWxsKVxuICAgIHN5bWxpbmtQYXRocyhzcmNwYXRoLCBkc3RwYXRoLCBmdW5jdGlvbiAoZXJyLCByZWxhdGl2ZSkge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIHNyY3BhdGggPSByZWxhdGl2ZS50b0RzdFxuICAgICAgc3ltbGlua1R5cGUocmVsYXRpdmUudG9Dd2QsIHR5cGUsIGZ1bmN0aW9uIChlcnIsIHR5cGUpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgdmFyIGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICAgICAgICBmcy5leGlzdHMoZGlyLCBmdW5jdGlvbiAoZGlyRXhpc3RzKSB7XG4gICAgICAgICAgaWYgKGRpckV4aXN0cykgcmV0dXJuIGZzLnN5bWxpbmsoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSwgY2FsbGJhY2spXG4gICAgICAgICAgbWtkaXJzKGRpciwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgICAgIGZzLnN5bWxpbmsoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSwgY2FsbGJhY2spXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3ltbGlua1N5bmMgKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IHR5cGUgOiBjYWxsYmFja1xuICB0eXBlID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IGZhbHNlIDogdHlwZVxuXG4gIHZhciBkZXN0aW5hdGlvbkV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoZHN0cGF0aClcbiAgaWYgKGRlc3RpbmF0aW9uRXhpc3RzKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgdmFyIHJlbGF0aXZlID0gc3ltbGlua1BhdGhzU3luYyhzcmNwYXRoLCBkc3RwYXRoKVxuICBzcmNwYXRoID0gcmVsYXRpdmUudG9Ec3RcbiAgdHlwZSA9IHN5bWxpbmtUeXBlU3luYyhyZWxhdGl2ZS50b0N3ZCwgdHlwZSlcbiAgdmFyIGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICB2YXIgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhkaXIpXG4gIGlmIChleGlzdHMpIHJldHVybiBmcy5zeW1saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoLCB0eXBlKVxuICBta2RpcnNTeW5jKGRpcilcbiAgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVTeW1saW5rOiBjcmVhdGVTeW1saW5rLFxuICBjcmVhdGVTeW1saW5rU3luYzogY3JlYXRlU3ltbGlua1N5bmMsXG4gIC8vIGFsaWFzXG4gIGVuc3VyZVN5bWxpbms6IGNyZWF0ZVN5bWxpbmssXG4gIGVuc3VyZVN5bWxpbmtTeW5jOiBjcmVhdGVTeW1saW5rU3luY1xufVxuIiwidmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4vdXRpbC9hc3NpZ24nKVxuXG52YXIgZnNlID0ge31cbnZhciBnZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5cbi8vIGF0dGFjaCBmcyBtZXRob2RzIHRvIGZzZVxuT2JqZWN0LmtleXMoZ2ZzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgZnNlW2tleV0gPSBnZnNba2V5XVxufSlcblxudmFyIGZzID0gZnNlXG5cbmFzc2lnbihmcywgcmVxdWlyZSgnLi9jb3B5JykpXG5hc3NpZ24oZnMsIHJlcXVpcmUoJy4vY29weS1zeW5jJykpXG5hc3NpZ24oZnMsIHJlcXVpcmUoJy4vbWtkaXJzJykpXG5hc3NpZ24oZnMsIHJlcXVpcmUoJy4vcmVtb3ZlJykpXG5hc3NpZ24oZnMsIHJlcXVpcmUoJy4vanNvbicpKVxuYXNzaWduKGZzLCByZXF1aXJlKCcuL21vdmUnKSlcbmFzc2lnbihmcywgcmVxdWlyZSgnLi9lbXB0eScpKVxuYXNzaWduKGZzLCByZXF1aXJlKCcuL2Vuc3VyZScpKVxuYXNzaWduKGZzLCByZXF1aXJlKCcuL291dHB1dCcpKVxuYXNzaWduKGZzLCByZXF1aXJlKCcuL3dhbGsnKSlcbmFzc2lnbihmcywgcmVxdWlyZSgnLi93YWxrLXN5bmMnKSlcblxubW9kdWxlLmV4cG9ydHMgPSBmc1xuXG4vLyBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgYXdoaWxlXG52YXIganNvbmZpbGUgPSB7fVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGpzb25maWxlLCAnc3BhY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZnMuc3BhY2VzIC8vIGZvdW5kIGluIC4vanNvblxuICB9LFxuICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICBmcy5zcGFjZXMgPSB2YWxcbiAgfVxufSlcblxubW9kdWxlLmV4cG9ydHMuanNvbmZpbGUgPSBqc29uZmlsZSAvLyBzbyB1c2VycyBvZiBmcy1leHRyYSBjYW4gbW9kaWZ5IGpzb25GaWxlLnNwYWNlc1xuIiwidmFyIGpzb25GaWxlID0gcmVxdWlyZSgnLi9qc29uZmlsZScpXG5cbmpzb25GaWxlLm91dHB1dEpzb25TeW5jID0gcmVxdWlyZSgnLi9vdXRwdXQtanNvbi1zeW5jJylcbmpzb25GaWxlLm91dHB1dEpzb24gPSByZXF1aXJlKCcuL291dHB1dC1qc29uJylcbi8vIGFsaWFzZXNcbmpzb25GaWxlLm91dHB1dEpTT05TeW5jID0gcmVxdWlyZSgnLi9vdXRwdXQtanNvbi1zeW5jJylcbmpzb25GaWxlLm91dHB1dEpTT04gPSByZXF1aXJlKCcuL291dHB1dC1qc29uJylcblxubW9kdWxlLmV4cG9ydHMgPSBqc29uRmlsZVxuIiwidmFyIGpzb25GaWxlID0gcmVxdWlyZSgnanNvbmZpbGUnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8ganNvbmZpbGUgZXhwb3J0c1xuICByZWFkSnNvbjoganNvbkZpbGUucmVhZEZpbGUsXG4gIHJlYWRKU09OOiBqc29uRmlsZS5yZWFkRmlsZSxcbiAgcmVhZEpzb25TeW5jOiBqc29uRmlsZS5yZWFkRmlsZVN5bmMsXG4gIHJlYWRKU09OU3luYzoganNvbkZpbGUucmVhZEZpbGVTeW5jLFxuICB3cml0ZUpzb246IGpzb25GaWxlLndyaXRlRmlsZSxcbiAgd3JpdGVKU09OOiBqc29uRmlsZS53cml0ZUZpbGUsXG4gIHdyaXRlSnNvblN5bmM6IGpzb25GaWxlLndyaXRlRmlsZVN5bmMsXG4gIHdyaXRlSlNPTlN5bmM6IGpzb25GaWxlLndyaXRlRmlsZVN5bmMsXG4gIHNwYWNlczogMiAvLyBkZWZhdWx0IGluIGZzLWV4dHJhXG59XG4iLCJ2YXIgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxudmFyIGpzb25GaWxlID0gcmVxdWlyZSgnLi9qc29uZmlsZScpXG52YXIgbWtkaXIgPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuXG5mdW5jdGlvbiBvdXRwdXRKc29uU3luYyAoZmlsZSwgZGF0YSwgb3B0aW9ucykge1xuICB2YXIgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG5cbiAgaWYgKCFmcy5leGlzdHNTeW5jKGRpcikpIHtcbiAgICBta2Rpci5ta2RpcnNTeW5jKGRpcilcbiAgfVxuXG4gIGpzb25GaWxlLndyaXRlSnNvblN5bmMoZmlsZSwgZGF0YSwgb3B0aW9ucylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdXRwdXRKc29uU3luY1xuIiwidmFyIGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJylcbnZhciBqc29uRmlsZSA9IHJlcXVpcmUoJy4vanNvbmZpbGUnKVxudmFyIG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcblxuZnVuY3Rpb24gb3V0cHV0SnNvbiAoZmlsZSwgZGF0YSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zXG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICB2YXIgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG5cbiAgZnMuZXhpc3RzKGRpciwgZnVuY3Rpb24gKGl0RG9lcykge1xuICAgIGlmIChpdERvZXMpIHJldHVybiBqc29uRmlsZS53cml0ZUpzb24oZmlsZSwgZGF0YSwgb3B0aW9ucywgY2FsbGJhY2spXG5cbiAgICBta2Rpci5ta2RpcnMoZGlyLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAganNvbkZpbGUud3JpdGVKc29uKGZpbGUsIGRhdGEsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAgIH0pXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3V0cHV0SnNvblxuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1rZGlyczogcmVxdWlyZSgnLi9ta2RpcnMnKSxcbiAgbWtkaXJzU3luYzogcmVxdWlyZSgnLi9ta2RpcnMtc3luYycpLFxuICAvLyBhbGlhc1xuICBta2RpcnA6IHJlcXVpcmUoJy4vbWtkaXJzJyksXG4gIG1rZGlycFN5bmM6IHJlcXVpcmUoJy4vbWtkaXJzLXN5bmMnKSxcbiAgZW5zdXJlRGlyOiByZXF1aXJlKCcuL21rZGlycycpLFxuICBlbnN1cmVEaXJTeW5jOiByZXF1aXJlKCcuL21rZGlycy1zeW5jJylcbn1cbiIsInZhciBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG52YXIgaW52YWxpZFdpbjMyUGF0aCA9IHJlcXVpcmUoJy4vd2luMzInKS5pbnZhbGlkV2luMzJQYXRoXG5cbnZhciBvNzc3ID0gcGFyc2VJbnQoJzA3NzcnLCA4KVxuXG5mdW5jdGlvbiBta2RpcnNTeW5jIChwLCBvcHRzLCBtYWRlKSB7XG4gIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICBvcHRzID0geyBtb2RlOiBvcHRzIH1cbiAgfVxuXG4gIHZhciBtb2RlID0gb3B0cy5tb2RlXG4gIHZhciB4ZnMgPSBvcHRzLmZzIHx8IGZzXG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgJiYgaW52YWxpZFdpbjMyUGF0aChwKSkge1xuICAgIHZhciBlcnJJbnZhbCA9IG5ldyBFcnJvcihwICsgJyBjb250YWlucyBpbnZhbGlkIFdJTjMyIHBhdGggY2hhcmFjdGVycy4nKVxuICAgIGVyckludmFsLmNvZGUgPSAnRUlOVkFMJ1xuICAgIHRocm93IGVyckludmFsXG4gIH1cblxuICBpZiAobW9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbW9kZSA9IG83NzcgJiAofnByb2Nlc3MudW1hc2soKSlcbiAgfVxuICBpZiAoIW1hZGUpIG1hZGUgPSBudWxsXG5cbiAgcCA9IHBhdGgucmVzb2x2ZShwKVxuXG4gIHRyeSB7XG4gICAgeGZzLm1rZGlyU3luYyhwLCBtb2RlKVxuICAgIG1hZGUgPSBtYWRlIHx8IHBcbiAgfSBjYXRjaCAoZXJyMCkge1xuICAgIHN3aXRjaCAoZXJyMC5jb2RlKSB7XG4gICAgICBjYXNlICdFTk9FTlQnOlxuICAgICAgICBpZiAocGF0aC5kaXJuYW1lKHApID09PSBwKSB0aHJvdyBlcnIwXG4gICAgICAgIG1hZGUgPSBta2RpcnNTeW5jKHBhdGguZGlybmFtZShwKSwgb3B0cywgbWFkZSlcbiAgICAgICAgbWtkaXJzU3luYyhwLCBvcHRzLCBtYWRlKVxuICAgICAgICBicmVha1xuXG4gICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhbnkgb3RoZXIgZXJyb3IsIGp1c3Qgc2VlIGlmIHRoZXJlJ3MgYSBkaXJcbiAgICAgIC8vIHRoZXJlIGFscmVhZHkuICBJZiBzbywgdGhlbiBob29yYXkhICBJZiBub3QsIHRoZW4gc29tZXRoaW5nXG4gICAgICAvLyBpcyBib3JrZWQuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YXIgc3RhdFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHN0YXQgPSB4ZnMuc3RhdFN5bmMocClcbiAgICAgICAgfSBjYXRjaCAoZXJyMSkge1xuICAgICAgICAgIHRocm93IGVycjBcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXQuaXNEaXJlY3RvcnkoKSkgdGhyb3cgZXJyMFxuICAgICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYWRlXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWtkaXJzU3luY1xuIiwidmFyIGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJylcbnZhciBpbnZhbGlkV2luMzJQYXRoID0gcmVxdWlyZSgnLi93aW4zMicpLmludmFsaWRXaW4zMlBhdGhcblxudmFyIG83NzcgPSBwYXJzZUludCgnMDc3NycsIDgpXG5cbmZ1bmN0aW9uIG1rZGlycyAocCwgb3B0cywgY2FsbGJhY2ssIG1hZGUpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRzXG4gICAgb3B0cyA9IHt9XG4gIH0gZWxzZSBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgb3B0cyA9IHsgbW9kZTogb3B0cyB9XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJiBpbnZhbGlkV2luMzJQYXRoKHApKSB7XG4gICAgdmFyIGVyckludmFsID0gbmV3IEVycm9yKHAgKyAnIGNvbnRhaW5zIGludmFsaWQgV0lOMzIgcGF0aCBjaGFyYWN0ZXJzLicpXG4gICAgZXJySW52YWwuY29kZSA9ICdFSU5WQUwnXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVyckludmFsKVxuICB9XG5cbiAgdmFyIG1vZGUgPSBvcHRzLm1vZGVcbiAgdmFyIHhmcyA9IG9wdHMuZnMgfHwgZnNcblxuICBpZiAobW9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbW9kZSA9IG83NzcgJiAofnByb2Nlc3MudW1hc2soKSlcbiAgfVxuICBpZiAoIW1hZGUpIG1hZGUgPSBudWxsXG5cbiAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fVxuICBwID0gcGF0aC5yZXNvbHZlKHApXG5cbiAgeGZzLm1rZGlyKHAsIG1vZGUsIGZ1bmN0aW9uIChlcikge1xuICAgIGlmICghZXIpIHtcbiAgICAgIG1hZGUgPSBtYWRlIHx8IHBcbiAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBtYWRlKVxuICAgIH1cbiAgICBzd2l0Y2ggKGVyLmNvZGUpIHtcbiAgICAgIGNhc2UgJ0VOT0VOVCc6XG4gICAgICAgIGlmIChwYXRoLmRpcm5hbWUocCkgPT09IHApIHJldHVybiBjYWxsYmFjayhlcilcbiAgICAgICAgbWtkaXJzKHBhdGguZGlybmFtZShwKSwgb3B0cywgZnVuY3Rpb24gKGVyLCBtYWRlKSB7XG4gICAgICAgICAgaWYgKGVyKSBjYWxsYmFjayhlciwgbWFkZSlcbiAgICAgICAgICBlbHNlIG1rZGlycyhwLCBvcHRzLCBjYWxsYmFjaywgbWFkZSlcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcblxuICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYW55IG90aGVyIGVycm9yLCBqdXN0IHNlZSBpZiB0aGVyZSdzIGEgZGlyXG4gICAgICAvLyB0aGVyZSBhbHJlYWR5LiAgSWYgc28sIHRoZW4gaG9vcmF5ISAgSWYgbm90LCB0aGVuIHNvbWV0aGluZ1xuICAgICAgLy8gaXMgYm9ya2VkLlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgeGZzLnN0YXQocCwgZnVuY3Rpb24gKGVyMiwgc3RhdCkge1xuICAgICAgICAgIC8vIGlmIHRoZSBzdGF0IGZhaWxzLCB0aGVuIHRoYXQncyBzdXBlciB3ZWlyZC5cbiAgICAgICAgICAvLyBsZXQgdGhlIG9yaWdpbmFsIGVycm9yIGJlIHRoZSBmYWlsdXJlIHJlYXNvbi5cbiAgICAgICAgICBpZiAoZXIyIHx8ICFzdGF0LmlzRGlyZWN0b3J5KCkpIGNhbGxiYWNrKGVyLCBtYWRlKVxuICAgICAgICAgIGVsc2UgY2FsbGJhY2sobnVsbCwgbWFkZSlcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWtkaXJzXG4iLCIndXNlIHN0cmljdCdcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5cbi8vIGdldCBkcml2ZSBvbiB3aW5kb3dzXG5mdW5jdGlvbiBnZXRSb290UGF0aCAocCkge1xuICBwID0gcGF0aC5ub3JtYWxpemUocGF0aC5yZXNvbHZlKHApKS5zcGxpdChwYXRoLnNlcClcbiAgaWYgKHAubGVuZ3RoID4gMCkgcmV0dXJuIHBbMF1cbiAgZWxzZSByZXR1cm4gbnVsbFxufVxuXG4vLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS82Mjg4OC8xMDMzMyBjb250YWlucyBtb3JlIGFjY3VyYXRlXG4vLyBUT0RPOiBleHBhbmQgdG8gaW5jbHVkZSB0aGUgcmVzdFxudmFyIElOVkFMSURfUEFUSF9DSEFSUyA9IC9bPD46XCJ8PypdL1xuXG5mdW5jdGlvbiBpbnZhbGlkV2luMzJQYXRoIChwKSB7XG4gIHZhciBycCA9IGdldFJvb3RQYXRoKHApXG4gIHAgPSBwLnJlcGxhY2UocnAsICcnKVxuICByZXR1cm4gSU5WQUxJRF9QQVRIX0NIQVJTLnRlc3QocClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldFJvb3RQYXRoOiBnZXRSb290UGF0aCxcbiAgaW52YWxpZFdpbjMyUGF0aDogaW52YWxpZFdpbjMyUGF0aFxufVxuIiwiLy8gbW9zdCBvZiB0aGlzIGNvZGUgd2FzIHdyaXR0ZW4gYnkgQW5kcmV3IEtlbGxleVxuLy8gbGljZW5zZWQgdW5kZXIgdGhlIEJTRCBsaWNlbnNlOiBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmRyZXdyay9ub2RlLW12L2Jsb2IvbWFzdGVyL3BhY2thZ2UuanNvblxuXG4vLyB0aGlzIG5lZWRzIGEgY2xlYW51cFxuXG52YXIgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG52YXIgbmNwID0gcmVxdWlyZSgnLi4vY29weS9uY3AnKVxudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJylcbnZhciByZW1vdmUgPSByZXF1aXJlKCcuLi9yZW1vdmUnKS5yZW1vdmVcbnZhciBta2RpcnAgPSByZXF1aXJlKCcuLi9ta2RpcnMnKS5ta2RpcnNcblxuZnVuY3Rpb24gbXYgKHNvdXJjZSwgZGVzdCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zXG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICB2YXIgc2hvdWxkTWtkaXJwID0gKCdta2RpcnAnIGluIG9wdGlvbnMpID8gb3B0aW9ucy5ta2RpcnAgOiB0cnVlXG4gIHZhciBjbG9iYmVyID0gKCdjbG9iYmVyJyBpbiBvcHRpb25zKSA/IG9wdGlvbnMuY2xvYmJlciA6IGZhbHNlXG5cbiAgdmFyIGxpbWl0ID0gb3B0aW9ucy5saW1pdCB8fCAxNlxuXG4gIGlmIChzaG91bGRNa2RpcnApIHtcbiAgICBta2RpcnMoKVxuICB9IGVsc2Uge1xuICAgIGRvUmVuYW1lKClcbiAgfVxuXG4gIGZ1bmN0aW9uIG1rZGlycyAoKSB7XG4gICAgbWtkaXJwKHBhdGguZGlybmFtZShkZXN0KSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIGRvUmVuYW1lKClcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gZG9SZW5hbWUgKCkge1xuICAgIGlmIChjbG9iYmVyKSB7XG4gICAgICBmcy5yZW5hbWUoc291cmNlLCBkZXN0LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICghZXJyKSByZXR1cm4gY2FsbGJhY2soKVxuXG4gICAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT1RFTVBUWScgfHwgZXJyLmNvZGUgPT09ICdFRVhJU1QnKSB7XG4gICAgICAgICAgcmVtb3ZlKGRlc3QsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgICBvcHRpb25zLmNsb2JiZXIgPSBmYWxzZSAvLyBqdXN0IGNsb2JiZXJlZCBpdCwgbm8gbmVlZCB0byBkbyBpdCBhZ2FpblxuICAgICAgICAgICAgbXYoc291cmNlLCBkZXN0LCBvcHRpb25zLCBjYWxsYmFjaylcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2VpcmQgV2luZG93cyBzaGl0XG4gICAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtb3ZlKGRlc3QsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgICAgICAgb3B0aW9ucy5jbG9iYmVyID0gZmFsc2VcbiAgICAgICAgICAgICAgbXYoc291cmNlLCBkZXN0LCBvcHRpb25zLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSwgMjAwKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVyci5jb2RlICE9PSAnRVhERVYnKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICBtb3ZlQWNyb3NzRGV2aWNlKHNvdXJjZSwgZGVzdCwgY2xvYmJlciwgbGltaXQsIGNhbGxiYWNrKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgZnMubGluayhzb3VyY2UsIGRlc3QsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VYREVWJyB8fCBlcnIuY29kZSA9PT0gJ0VJU0RJUicgfHwgZXJyLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgICAgIG1vdmVBY3Jvc3NEZXZpY2Uoc291cmNlLCBkZXN0LCBjbG9iYmVyLCBsaW1pdCwgY2FsbGJhY2spXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGZzLnVubGluayhzb3VyY2UsIGNhbGxiYWNrKVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbW92ZUFjcm9zc0RldmljZSAoc291cmNlLCBkZXN0LCBjbG9iYmVyLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgZnMuc3RhdChzb3VyY2UsIGZ1bmN0aW9uIChlcnIsIHN0YXQpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjYWxsYmFjayhlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBtb3ZlRGlyQWNyb3NzRGV2aWNlKHNvdXJjZSwgZGVzdCwgY2xvYmJlciwgbGltaXQsIGNhbGxiYWNrKVxuICAgIH0gZWxzZSB7XG4gICAgICBtb3ZlRmlsZUFjcm9zc0RldmljZShzb3VyY2UsIGRlc3QsIGNsb2JiZXIsIGxpbWl0LCBjYWxsYmFjaylcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIG1vdmVGaWxlQWNyb3NzRGV2aWNlIChzb3VyY2UsIGRlc3QsIGNsb2JiZXIsIGxpbWl0LCBjYWxsYmFjaykge1xuICB2YXIgb3V0RmxhZ3MgPSBjbG9iYmVyID8gJ3cnIDogJ3d4J1xuICB2YXIgaW5zID0gZnMuY3JlYXRlUmVhZFN0cmVhbShzb3VyY2UpXG4gIHZhciBvdXRzID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZGVzdCwge2ZsYWdzOiBvdXRGbGFnc30pXG5cbiAgaW5zLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpbnMuZGVzdHJveSgpXG4gICAgb3V0cy5kZXN0cm95KClcbiAgICBvdXRzLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2UpXG5cbiAgICAvLyBtYXkgd2FudCB0byBjcmVhdGUgYSBkaXJlY3RvcnkgYnV0IGBvdXRgIGxpbmUgYWJvdmVcbiAgICAvLyBjcmVhdGVzIGFuIGVtcHR5IGZpbGUgZm9yIHVzOiBTZWUgIzEwOFxuICAgIC8vIGRvbid0IGNhcmUgYWJvdXQgZXJyb3IgaGVyZVxuICAgIGZzLnVubGluayhkZXN0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBub3RlOiBgZXJyYCBoZXJlIGlzIGZyb20gdGhlIGlucHV0IHN0cmVhbSBlcnJyb3JcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VJU0RJUicgfHwgZXJyLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgbW92ZURpckFjcm9zc0RldmljZShzb3VyY2UsIGRlc3QsIGNsb2JiZXIsIGxpbWl0LCBjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgIH1cbiAgICB9KVxuICB9KVxuXG4gIG91dHMub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgIGlucy5kZXN0cm95KClcbiAgICBvdXRzLmRlc3Ryb3koKVxuICAgIG91dHMucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25DbG9zZSlcbiAgICBjYWxsYmFjayhlcnIpXG4gIH0pXG5cbiAgb3V0cy5vbmNlKCdjbG9zZScsIG9uQ2xvc2UpXG4gIGlucy5waXBlKG91dHMpXG5cbiAgZnVuY3Rpb24gb25DbG9zZSAoKSB7XG4gICAgZnMudW5saW5rKHNvdXJjZSwgY2FsbGJhY2spXG4gIH1cbn1cblxuZnVuY3Rpb24gbW92ZURpckFjcm9zc0RldmljZSAoc291cmNlLCBkZXN0LCBjbG9iYmVyLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgc3RvcE9uRXJyOiB0cnVlLFxuICAgIGNsb2JiZXI6IGZhbHNlLFxuICAgIGxpbWl0OiBsaW1pdFxuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnROY3AgKCkge1xuICAgIG5jcChzb3VyY2UsIGRlc3QsIG9wdGlvbnMsIGZ1bmN0aW9uIChlcnJMaXN0KSB7XG4gICAgICBpZiAoZXJyTGlzdCkgcmV0dXJuIGNhbGxiYWNrKGVyckxpc3RbMF0pXG4gICAgICByZW1vdmUoc291cmNlLCBjYWxsYmFjaylcbiAgICB9KVxuICB9XG5cbiAgaWYgKGNsb2JiZXIpIHtcbiAgICByZW1vdmUoZGVzdCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIHN0YXJ0TmNwKClcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIHN0YXJ0TmNwKClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbW92ZTogbXZcbn1cbiIsInZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG52YXIgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG52YXIgbWtkaXIgPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuXG5mdW5jdGlvbiBvdXRwdXRGaWxlIChmaWxlLCBkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gZW5jb2RpbmdcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgdmFyIGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuICBmcy5leGlzdHMoZGlyLCBmdW5jdGlvbiAoaXREb2VzKSB7XG4gICAgaWYgKGl0RG9lcykgcmV0dXJuIGZzLndyaXRlRmlsZShmaWxlLCBkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spXG5cbiAgICBta2Rpci5ta2RpcnMoZGlyLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuXG4gICAgICBmcy53cml0ZUZpbGUoZmlsZSwgZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG91dHB1dEZpbGVTeW5jIChmaWxlLCBkYXRhLCBlbmNvZGluZykge1xuICB2YXIgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gIGlmIChmcy5leGlzdHNTeW5jKGRpcikpIHtcbiAgICByZXR1cm4gZnMud3JpdGVGaWxlU3luYy5hcHBseShmcywgYXJndW1lbnRzKVxuICB9XG4gIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuICBmcy53cml0ZUZpbGVTeW5jLmFwcGx5KGZzLCBhcmd1bWVudHMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBvdXRwdXRGaWxlOiBvdXRwdXRGaWxlLFxuICBvdXRwdXRGaWxlU3luYzogb3V0cHV0RmlsZVN5bmNcbn1cbiIsInZhciByaW1yYWYgPSByZXF1aXJlKCcuL3JpbXJhZicpXG5cbmZ1bmN0aW9uIHJlbW92ZVN5bmMgKGRpcikge1xuICByZXR1cm4gcmltcmFmLnN5bmMoZGlyLCB7ZGlzYWJsZUdsb2I6IHRydWV9KVxufVxuXG5mdW5jdGlvbiByZW1vdmUgKGRpciwgY2FsbGJhY2spIHtcbiAgdmFyIG9wdGlvbnMgPSB7ZGlzYWJsZUdsb2I6IHRydWV9XG4gIHJldHVybiBjYWxsYmFjayA/IHJpbXJhZihkaXIsIG9wdGlvbnMsIGNhbGxiYWNrKSA6IHJpbXJhZihkaXIsIG9wdGlvbnMsIGZ1bmN0aW9uICgpIHt9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcmVtb3ZlOiByZW1vdmUsXG4gIHJlbW92ZVN5bmM6IHJlbW92ZVN5bmNcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmltcmFmXG5yaW1yYWYuc3luYyA9IHJpbXJhZlN5bmNcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxudmFyIGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuXG52YXIgaXNXaW5kb3dzID0gKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpXG5cbmZ1bmN0aW9uIGRlZmF1bHRzIChvcHRpb25zKSB7XG4gIHZhciBtZXRob2RzID0gW1xuICAgICd1bmxpbmsnLFxuICAgICdjaG1vZCcsXG4gICAgJ3N0YXQnLFxuICAgICdsc3RhdCcsXG4gICAgJ3JtZGlyJyxcbiAgICAncmVhZGRpcidcbiAgXVxuICBtZXRob2RzLmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICBvcHRpb25zW21dID0gb3B0aW9uc1ttXSB8fCBmc1ttXVxuICAgIG0gPSBtICsgJ1N5bmMnXG4gICAgb3B0aW9uc1ttXSA9IG9wdGlvbnNbbV0gfHwgZnNbbV1cbiAgfSlcblxuICBvcHRpb25zLm1heEJ1c3lUcmllcyA9IG9wdGlvbnMubWF4QnVzeVRyaWVzIHx8IDNcbn1cblxuZnVuY3Rpb24gcmltcmFmIChwLCBvcHRpb25zLCBjYikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IG9wdGlvbnNcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIGFzc2VydChwLCAncmltcmFmOiBtaXNzaW5nIHBhdGgnKVxuICBhc3NlcnQuZXF1YWwodHlwZW9mIHAsICdzdHJpbmcnLCAncmltcmFmOiBwYXRoIHNob3VsZCBiZSBhIHN0cmluZycpXG4gIGFzc2VydC5lcXVhbCh0eXBlb2YgY2IsICdmdW5jdGlvbicsICdyaW1yYWY6IGNhbGxiYWNrIGZ1bmN0aW9uIHJlcXVpcmVkJylcbiAgYXNzZXJ0KG9wdGlvbnMsICdyaW1yYWY6IGludmFsaWQgb3B0aW9ucyBhcmd1bWVudCBwcm92aWRlZCcpXG4gIGFzc2VydC5lcXVhbCh0eXBlb2Ygb3B0aW9ucywgJ29iamVjdCcsICdyaW1yYWY6IG9wdGlvbnMgc2hvdWxkIGJlIG9iamVjdCcpXG5cbiAgZGVmYXVsdHMob3B0aW9ucylcblxuICB2YXIgYnVzeVRyaWVzID0gMFxuXG4gIHJpbXJhZl8ocCwgb3B0aW9ucywgZnVuY3Rpb24gQ0IgKGVyKSB7XG4gICAgaWYgKGVyKSB7XG4gICAgICBpZiAoaXNXaW5kb3dzICYmIChlci5jb2RlID09PSAnRUJVU1knIHx8IGVyLmNvZGUgPT09ICdFTk9URU1QVFknIHx8IGVyLmNvZGUgPT09ICdFUEVSTScpICYmXG4gICAgICAgICAgYnVzeVRyaWVzIDwgb3B0aW9ucy5tYXhCdXN5VHJpZXMpIHtcbiAgICAgICAgYnVzeVRyaWVzKytcbiAgICAgICAgdmFyIHRpbWUgPSBidXN5VHJpZXMgKiAxMDBcbiAgICAgICAgLy8gdHJ5IGFnYWluLCB3aXRoIHRoZSBzYW1lIGV4YWN0IGNhbGxiYWNrIGFzIHRoaXMgb25lLlxuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmltcmFmXyhwLCBvcHRpb25zLCBDQilcbiAgICAgICAgfSwgdGltZSlcbiAgICAgIH1cblxuICAgICAgLy8gYWxyZWFkeSBnb25lXG4gICAgICBpZiAoZXIuY29kZSA9PT0gJ0VOT0VOVCcpIGVyID0gbnVsbFxuICAgIH1cblxuICAgIGNiKGVyKVxuICB9KVxufVxuXG4vLyBUd28gcG9zc2libGUgc3RyYXRlZ2llcy5cbi8vIDEuIEFzc3VtZSBpdCdzIGEgZmlsZS4gIHVubGluayBpdCwgdGhlbiBkbyB0aGUgZGlyIHN0dWZmIG9uIEVQRVJNIG9yIEVJU0RJUlxuLy8gMi4gQXNzdW1lIGl0J3MgYSBkaXJlY3RvcnkuICByZWFkZGlyLCB0aGVuIGRvIHRoZSBmaWxlIHN0dWZmIG9uIEVOT1RESVJcbi8vXG4vLyBCb3RoIHJlc3VsdCBpbiBhbiBleHRyYSBzeXNjYWxsIHdoZW4geW91IGd1ZXNzIHdyb25nLiAgSG93ZXZlciwgdGhlcmVcbi8vIGFyZSBsaWtlbHkgZmFyIG1vcmUgbm9ybWFsIGZpbGVzIGluIHRoZSB3b3JsZCB0aGFuIGRpcmVjdG9yaWVzLiAgVGhpc1xuLy8gaXMgYmFzZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBhIHRoZSBhdmVyYWdlIG51bWJlciBvZiBmaWxlcyBwZXJcbi8vIGRpcmVjdG9yeSBpcyA+PSAxLlxuLy9cbi8vIElmIGFueW9uZSBldmVyIGNvbXBsYWlucyBhYm91dCB0aGlzLCB0aGVuIEkgZ3Vlc3MgdGhlIHN0cmF0ZWd5IGNvdWxkXG4vLyBiZSBtYWRlIGNvbmZpZ3VyYWJsZSBzb21laG93LiAgQnV0IHVudGlsIHRoZW4sIFlBR05JLlxuZnVuY3Rpb24gcmltcmFmXyAocCwgb3B0aW9ucywgY2IpIHtcbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuICBhc3NlcnQodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuXG4gIC8vIHN1bm9zIGxldHMgdGhlIHJvb3QgdXNlciB1bmxpbmsgZGlyZWN0b3JpZXMsIHdoaWNoIGlzLi4uIHdlaXJkLlxuICAvLyBzbyB3ZSBoYXZlIHRvIGxzdGF0IGhlcmUgYW5kIG1ha2Ugc3VyZSBpdCdzIG5vdCBhIGRpci5cbiAgb3B0aW9ucy5sc3RhdChwLCBmdW5jdGlvbiAoZXIsIHN0KSB7XG4gICAgaWYgKGVyICYmIGVyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm4gY2IobnVsbClcbiAgICB9XG5cbiAgICAvLyBXaW5kb3dzIGNhbiBFUEVSTSBvbiBzdGF0LiAgTGlmZSBpcyBzdWZmZXJpbmcuXG4gICAgaWYgKGVyICYmIGVyLmNvZGUgPT09ICdFUEVSTScgJiYgaXNXaW5kb3dzKSB7XG4gICAgICBmaXhXaW5FUEVSTShwLCBvcHRpb25zLCBlciwgY2IpXG4gICAgfVxuXG4gICAgaWYgKHN0ICYmIHN0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHJldHVybiBybWRpcihwLCBvcHRpb25zLCBlciwgY2IpXG4gICAgfVxuXG4gICAgb3B0aW9ucy51bmxpbmsocCwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICBpZiAoZXIpIHtcbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgcmV0dXJuIGNiKG51bGwpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgICByZXR1cm4gKGlzV2luZG93cylcbiAgICAgICAgICAgID8gZml4V2luRVBFUk0ocCwgb3B0aW9ucywgZXIsIGNiKVxuICAgICAgICAgICAgOiBybWRpcihwLCBvcHRpb25zLCBlciwgY2IpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFSVNESVInKSB7XG4gICAgICAgICAgcmV0dXJuIHJtZGlyKHAsIG9wdGlvbnMsIGVyLCBjYilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNiKGVyKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGZpeFdpbkVQRVJNIChwLCBvcHRpb25zLCBlciwgY2IpIHtcbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuICBhc3NlcnQodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICBpZiAoZXIpIHtcbiAgICBhc3NlcnQoZXIgaW5zdGFuY2VvZiBFcnJvcilcbiAgfVxuXG4gIG9wdGlvbnMuY2htb2QocCwgNjY2LCBmdW5jdGlvbiAoZXIyKSB7XG4gICAgaWYgKGVyMikge1xuICAgICAgY2IoZXIyLmNvZGUgPT09ICdFTk9FTlQnID8gbnVsbCA6IGVyKVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLnN0YXQocCwgZnVuY3Rpb24gKGVyMywgc3RhdHMpIHtcbiAgICAgICAgaWYgKGVyMykge1xuICAgICAgICAgIGNiKGVyMy5jb2RlID09PSAnRU5PRU5UJyA/IG51bGwgOiBlcilcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgcm1kaXIocCwgb3B0aW9ucywgZXIsIGNiKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMudW5saW5rKHAsIGNiKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gZml4V2luRVBFUk1TeW5jIChwLCBvcHRpb25zLCBlcikge1xuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG4gIGlmIChlcikge1xuICAgIGFzc2VydChlciBpbnN0YW5jZW9mIEVycm9yKVxuICB9XG5cbiAgdHJ5IHtcbiAgICBvcHRpb25zLmNobW9kU3luYyhwLCA2NjYpXG4gIH0gY2F0Y2ggKGVyMikge1xuICAgIGlmIChlcjIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlclxuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgdmFyIHN0YXRzID0gb3B0aW9ucy5zdGF0U3luYyhwKVxuICB9IGNhdGNoIChlcjMpIHtcbiAgICBpZiAoZXIzLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIHJtZGlyU3luYyhwLCBvcHRpb25zLCBlcilcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zLnVubGlua1N5bmMocClcbiAgfVxufVxuXG5mdW5jdGlvbiBybWRpciAocCwgb3B0aW9ucywgb3JpZ2luYWxFciwgY2IpIHtcbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuICBpZiAob3JpZ2luYWxFcikge1xuICAgIGFzc2VydChvcmlnaW5hbEVyIGluc3RhbmNlb2YgRXJyb3IpXG4gIH1cbiAgYXNzZXJ0KHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcblxuICAvLyB0cnkgdG8gcm1kaXIgZmlyc3QsIGFuZCBvbmx5IHJlYWRkaXIgb24gRU5PVEVNUFRZIG9yIEVFWElTVCAoU3VuT1MpXG4gIC8vIGlmIHdlIGd1ZXNzZWQgd3JvbmcsIGFuZCBpdCdzIG5vdCBhIGRpcmVjdG9yeSwgdGhlblxuICAvLyByYWlzZSB0aGUgb3JpZ2luYWwgZXJyb3IuXG4gIG9wdGlvbnMucm1kaXIocCwgZnVuY3Rpb24gKGVyKSB7XG4gICAgaWYgKGVyICYmIChlci5jb2RlID09PSAnRU5PVEVNUFRZJyB8fCBlci5jb2RlID09PSAnRUVYSVNUJyB8fCBlci5jb2RlID09PSAnRVBFUk0nKSkge1xuICAgICAgcm1raWRzKHAsIG9wdGlvbnMsIGNiKVxuICAgIH0gZWxzZSBpZiAoZXIgJiYgZXIuY29kZSA9PT0gJ0VOT1RESVInKSB7XG4gICAgICBjYihvcmlnaW5hbEVyKVxuICAgIH0gZWxzZSB7XG4gICAgICBjYihlcilcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJta2lkcyAocCwgb3B0aW9ucywgY2IpIHtcbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuICBhc3NlcnQodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuXG4gIG9wdGlvbnMucmVhZGRpcihwLCBmdW5jdGlvbiAoZXIsIGZpbGVzKSB7XG4gICAgaWYgKGVyKSB7XG4gICAgICByZXR1cm4gY2IoZXIpXG4gICAgfVxuICAgIHZhciBuID0gZmlsZXMubGVuZ3RoXG4gICAgaWYgKG4gPT09IDApIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnJtZGlyKHAsIGNiKVxuICAgIH1cbiAgICB2YXIgZXJyU3RhdGVcbiAgICBmaWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7XG4gICAgICByaW1yYWYocGF0aC5qb2luKHAsIGYpLCBvcHRpb25zLCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgaWYgKGVyclN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyKSB7XG4gICAgICAgICAgcmV0dXJuIGNiKGVyclN0YXRlID0gZXIpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKC0tbiA9PT0gMCkge1xuICAgICAgICAgIG9wdGlvbnMucm1kaXIocCwgY2IpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gdGhpcyBsb29rcyBzaW1wbGVyLCBhbmQgaXMgc3RyaWN0bHkgKmZhc3RlciosIGJ1dCB3aWxsXG4vLyB0aWUgdXAgdGhlIEphdmFTY3JpcHQgdGhyZWFkIGFuZCBmYWlsIG9uIGV4Y2Vzc2l2ZWx5XG4vLyBkZWVwIGRpcmVjdG9yeSB0cmVlcy5cbmZ1bmN0aW9uIHJpbXJhZlN5bmMgKHAsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgZGVmYXVsdHMob3B0aW9ucylcblxuICBhc3NlcnQocCwgJ3JpbXJhZjogbWlzc2luZyBwYXRoJylcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBwLCAnc3RyaW5nJywgJ3JpbXJhZjogcGF0aCBzaG91bGQgYmUgYSBzdHJpbmcnKVxuICBhc3NlcnQob3B0aW9ucywgJ3JpbXJhZjogbWlzc2luZyBvcHRpb25zJylcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBvcHRpb25zLCAnb2JqZWN0JywgJ3JpbXJhZjogb3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0JylcblxuICB0cnkge1xuICAgIHZhciBzdCA9IG9wdGlvbnMubHN0YXRTeW5jKHApXG4gIH0gY2F0Y2ggKGVyKSB7XG4gICAgaWYgKGVyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBXaW5kb3dzIGNhbiBFUEVSTSBvbiBzdGF0LiAgTGlmZSBpcyBzdWZmZXJpbmcuXG4gICAgaWYgKGVyLmNvZGUgPT09ICdFUEVSTScgJiYgaXNXaW5kb3dzKSB7XG4gICAgICBmaXhXaW5FUEVSTVN5bmMocCwgb3B0aW9ucywgZXIpXG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBzdW5vcyBsZXRzIHRoZSByb290IHVzZXIgdW5saW5rIGRpcmVjdG9yaWVzLCB3aGljaCBpcy4uLiB3ZWlyZC5cbiAgICBpZiAoc3QgJiYgc3QuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgcm1kaXJTeW5jKHAsIG9wdGlvbnMsIG51bGwpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMudW5saW5rU3luYyhwKVxuICAgIH1cbiAgfSBjYXRjaCAoZXIpIHtcbiAgICBpZiAoZXIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXIuY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgcmV0dXJuIGlzV2luZG93cyA/IGZpeFdpbkVQRVJNU3luYyhwLCBvcHRpb25zLCBlcikgOiBybWRpclN5bmMocCwgb3B0aW9ucywgZXIpXG4gICAgfVxuICAgIGlmIChlci5jb2RlICE9PSAnRUlTRElSJykge1xuICAgICAgdGhyb3cgZXJcbiAgICB9XG4gICAgcm1kaXJTeW5jKHAsIG9wdGlvbnMsIGVyKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJtZGlyU3luYyAocCwgb3B0aW9ucywgb3JpZ2luYWxFcikge1xuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG4gIGlmIChvcmlnaW5hbEVyKSB7XG4gICAgYXNzZXJ0KG9yaWdpbmFsRXIgaW5zdGFuY2VvZiBFcnJvcilcbiAgfVxuXG4gIHRyeSB7XG4gICAgb3B0aW9ucy5ybWRpclN5bmMocClcbiAgfSBjYXRjaCAoZXIpIHtcbiAgICBpZiAoZXIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXIuY29kZSA9PT0gJ0VOT1RESVInKSB7XG4gICAgICB0aHJvdyBvcmlnaW5hbEVyXG4gICAgfVxuICAgIGlmIChlci5jb2RlID09PSAnRU5PVEVNUFRZJyB8fCBlci5jb2RlID09PSAnRUVYSVNUJyB8fCBlci5jb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICBybWtpZHNTeW5jKHAsIG9wdGlvbnMpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJta2lkc1N5bmMgKHAsIG9wdGlvbnMpIHtcbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuICBvcHRpb25zLnJlYWRkaXJTeW5jKHApLmZvckVhY2goZnVuY3Rpb24gKGYpIHtcbiAgICByaW1yYWZTeW5jKHBhdGguam9pbihwLCBmKSwgb3B0aW9ucylcbiAgfSlcbiAgb3B0aW9ucy5ybWRpclN5bmMocCwgb3B0aW9ucylcbn1cbiIsIi8vIHNpbXBsZSBtdXRhYmxlIGFzc2lnblxuZnVuY3Rpb24gYXNzaWduICgpIHtcbiAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykuZmlsdGVyKGZ1bmN0aW9uIChpKSB7IHJldHVybiBpIH0pXG4gIHZhciBkZXN0ID0gYXJncy5zaGlmdCgpXG4gIGFyZ3MuZm9yRWFjaChmdW5jdGlvbiAoc3JjKSB7XG4gICAgT2JqZWN0LmtleXMoc3JjKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGRlc3Rba2V5XSA9IHNyY1trZXldXG4gICAgfSlcbiAgfSlcblxuICByZXR1cm4gZGVzdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnblxuIiwidmFyIGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJylcbnZhciBvcyA9IHJlcXVpcmUoJ29zJylcblxuLy8gSEZTLCBleHR7MiwzfSwgRkFUIGRvIG5vdCwgTm9kZS5qcyB2MC4xMCBkb2VzIG5vdFxuZnVuY3Rpb24gaGFzTWlsbGlzUmVzU3luYyAoKSB7XG4gIHZhciB0bXBmaWxlID0gcGF0aC5qb2luKCdtaWxsaXMtdGVzdC1zeW5jJyArIERhdGUubm93KCkudG9TdHJpbmcoKSArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoKS5zbGljZSgyKSlcbiAgdG1wZmlsZSA9IHBhdGguam9pbihvcy50bXBkaXIoKSwgdG1wZmlsZSlcblxuICAvLyA1NTAgbWlsbGlzIHBhc3QgVU5JWCBlcG9jaFxuICB2YXIgZCA9IG5ldyBEYXRlKDE0MzU0MTAyNDM4NjIpXG4gIGZzLndyaXRlRmlsZVN5bmModG1wZmlsZSwgJ2h0dHBzOi8vZ2l0aHViLmNvbS9qcHJpY2hhcmRzb24vbm9kZS1mcy1leHRyYS9wdWxsLzE0MScpXG4gIHZhciBmZCA9IGZzLm9wZW5TeW5jKHRtcGZpbGUsICdyKycpXG4gIGZzLmZ1dGltZXNTeW5jKGZkLCBkLCBkKVxuICBmcy5jbG9zZVN5bmMoZmQpXG4gIHJldHVybiBmcy5zdGF0U3luYyh0bXBmaWxlKS5tdGltZSA+IDE0MzU0MTAyNDMwMDBcbn1cblxuZnVuY3Rpb24gaGFzTWlsbGlzUmVzIChjYWxsYmFjaykge1xuICB2YXIgdG1wZmlsZSA9IHBhdGguam9pbignbWlsbGlzLXRlc3QnICsgRGF0ZS5ub3coKS50b1N0cmluZygpICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygpLnNsaWNlKDIpKVxuICB0bXBmaWxlID0gcGF0aC5qb2luKG9zLnRtcGRpcigpLCB0bXBmaWxlKVxuXG4gIC8vIDU1MCBtaWxsaXMgcGFzdCBVTklYIGVwb2NoXG4gIHZhciBkID0gbmV3IERhdGUoMTQzNTQxMDI0Mzg2MilcbiAgZnMud3JpdGVGaWxlKHRtcGZpbGUsICdodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvcHVsbC8xNDEnLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICBmcy5vcGVuKHRtcGZpbGUsICdyKycsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgZnMuZnV0aW1lcyhmZCwgZCwgZCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICBmcy5jbG9zZShmZCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgZnMuc3RhdCh0bXBmaWxlLCBmdW5jdGlvbiAoZXJyLCBzdGF0cykge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHN0YXRzLm10aW1lID4gMTQzNTQxMDI0MzAwMClcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiB0aW1lUmVtb3ZlTWlsbGlzICh0aW1lc3RhbXApIHtcbiAgaWYgKHR5cGVvZiB0aW1lc3RhbXAgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IodGltZXN0YW1wIC8gMTAwMCkgKiAxMDAwXG4gIH0gZWxzZSBpZiAodGltZXN0YW1wIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShNYXRoLmZsb29yKHRpbWVzdGFtcC5nZXRUaW1lKCkgLyAxMDAwKSAqIDEwMDApXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmcy1leHRyYTogdGltZVJlbW92ZU1pbGxpcygpIHVua25vd24gcGFyYW1ldGVyIHR5cGUnKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0aW1lc01pbGxpcyAocGF0aCwgYXRpbWUsIG10aW1lLCBjYWxsYmFjaykge1xuICAvLyBpZiAoIUhBU19NSUxMSVNfUkVTKSByZXR1cm4gZnMudXRpbWVzKHBhdGgsIGF0aW1lLCBtdGltZSwgY2FsbGJhY2spXG4gIGZzLm9wZW4ocGF0aCwgJ3IrJywgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgIGZzLmZ1dGltZXMoZmQsIGF0aW1lLCBtdGltZSwgZnVuY3Rpb24gKGZ1dGltZXNFcnIpIHtcbiAgICAgIGZzLmNsb3NlKGZkLCBmdW5jdGlvbiAoY2xvc2VFcnIpIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhmdXRpbWVzRXJyIHx8IGNsb3NlRXJyKVxuICAgICAgfSlcbiAgICB9KVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaGFzTWlsbGlzUmVzOiBoYXNNaWxsaXNSZXMsXG4gIGhhc01pbGxpc1Jlc1N5bmM6IGhhc01pbGxpc1Jlc1N5bmMsXG4gIHRpbWVSZW1vdmVNaWxsaXM6IHRpbWVSZW1vdmVNaWxsaXMsXG4gIHV0aW1lc01pbGxpczogdXRpbWVzTWlsbGlzXG59XG4iLCJ2YXIgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuXG52YXIgd2Fsa1N5bmMgPSBmdW5jdGlvbiAoZGlyLCBmaWxlbGlzdCkge1xuICB2YXIgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpXG4gIGZpbGVsaXN0ID0gZmlsZWxpc3QgfHwgW11cbiAgZmlsZXMuZm9yRWFjaChmdW5jdGlvbiAoZmlsZSkge1xuICAgIHZhciBuZXN0ZWRQYXRoID0gcGF0aC5qb2luKGRpciwgZmlsZSlcbiAgICBpZiAoZnMubHN0YXRTeW5jKG5lc3RlZFBhdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGZpbGVsaXN0ID0gd2Fsa1N5bmMobmVzdGVkUGF0aCwgZmlsZWxpc3QpXG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbGVsaXN0LnB1c2gobmVzdGVkUGF0aClcbiAgICB9XG4gIH0pXG4gIHJldHVybiBmaWxlbGlzdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgd2Fsa1N5bmM6IHdhbGtTeW5jXG59XG4iLCJ2YXIga2xhdyA9IHJlcXVpcmUoJ2tsYXcnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgd2Fsazoga2xhd1xufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZShmcylcblxuZnVuY3Rpb24gY2xvbmUgKG9iaikge1xuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKVxuICAgIHJldHVybiBvYmpcblxuICBpZiAob2JqIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgIHZhciBjb3B5ID0geyBfX3Byb3RvX186IG9iai5fX3Byb3RvX18gfVxuICBlbHNlXG4gICAgdmFyIGNvcHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29weSwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSlcbiAgfSlcblxuICByZXR1cm4gY29weVxufVxuIiwidmFyIGZzID0gcmVxdWlyZSgnZnMnKVxudmFyIHBvbHlmaWxscyA9IHJlcXVpcmUoJy4vcG9seWZpbGxzLmpzJylcbnZhciBsZWdhY3kgPSByZXF1aXJlKCcuL2xlZ2FjeS1zdHJlYW1zLmpzJylcbnZhciBxdWV1ZSA9IFtdXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpXG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxudmFyIGRlYnVnID0gbm9vcFxuaWYgKHV0aWwuZGVidWdsb2cpXG4gIGRlYnVnID0gdXRpbC5kZWJ1Z2xvZygnZ2ZzNCcpXG5lbHNlIGlmICgvXFxiZ2ZzNFxcYi9pLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJykpXG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG0gPSB1dGlsLmZvcm1hdC5hcHBseSh1dGlsLCBhcmd1bWVudHMpXG4gICAgbSA9ICdHRlM0OiAnICsgbS5zcGxpdCgvXFxuLykuam9pbignXFxuR0ZTNDogJylcbiAgICBjb25zb2xlLmVycm9yKG0pXG4gIH1cblxuaWYgKC9cXGJnZnM0XFxiL2kudGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnKSkge1xuICBwcm9jZXNzLm9uKCdleGl0JywgZnVuY3Rpb24oKSB7XG4gICAgZGVidWcocXVldWUpXG4gICAgcmVxdWlyZSgnYXNzZXJ0JykuZXF1YWwocXVldWUubGVuZ3RoLCAwKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoKHJlcXVpcmUoJy4vZnMuanMnKSlcbmlmIChwcm9jZXNzLmVudi5URVNUX0dSQUNFRlVMX0ZTX0dMT0JBTF9QQVRDSCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHBhdGNoKGZzKVxufVxuXG4vLyBBbHdheXMgcGF0Y2ggZnMuY2xvc2UvY2xvc2VTeW5jLCBiZWNhdXNlIHdlIHdhbnQgdG9cbi8vIHJldHJ5KCkgd2hlbmV2ZXIgYSBjbG9zZSBoYXBwZW5zICphbnl3aGVyZSogaW4gdGhlIHByb2dyYW0uXG4vLyBUaGlzIGlzIGVzc2VudGlhbCB3aGVuIG11bHRpcGxlIGdyYWNlZnVsLWZzIGluc3RhbmNlcyBhcmVcbi8vIGluIHBsYXkgYXQgdGhlIHNhbWUgdGltZS5cbm1vZHVsZS5leHBvcnRzLmNsb3NlID1cbmZzLmNsb3NlID0gKGZ1bmN0aW9uIChmcyRjbG9zZSkgeyByZXR1cm4gZnVuY3Rpb24gKGZkLCBjYikge1xuICByZXR1cm4gZnMkY2xvc2UuY2FsbChmcywgZmQsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoIWVycilcbiAgICAgIHJldHJ5KClcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gIH0pXG59fSkoZnMuY2xvc2UpXG5cbm1vZHVsZS5leHBvcnRzLmNsb3NlU3luYyA9XG5mcy5jbG9zZVN5bmMgPSAoZnVuY3Rpb24gKGZzJGNsb3NlU3luYykgeyByZXR1cm4gZnVuY3Rpb24gKGZkKSB7XG4gIC8vIE5vdGUgdGhhdCBncmFjZWZ1bC1mcyBhbHNvIHJldHJpZXMgd2hlbiBmcy5jbG9zZVN5bmMoKSBmYWlscy5cbiAgLy8gTG9va3MgbGlrZSBhIGJ1ZyB0byBtZSwgYWx0aG91Z2ggaXQncyBwcm9iYWJseSBhIGhhcm1sZXNzIG9uZS5cbiAgdmFyIHJ2YWwgPSBmcyRjbG9zZVN5bmMuYXBwbHkoZnMsIGFyZ3VtZW50cylcbiAgcmV0cnkoKVxuICByZXR1cm4gcnZhbFxufX0pKGZzLmNsb3NlU3luYylcblxuZnVuY3Rpb24gcGF0Y2ggKGZzKSB7XG4gIC8vIEV2ZXJ5dGhpbmcgdGhhdCByZWZlcmVuY2VzIHRoZSBvcGVuKCkgZnVuY3Rpb24gbmVlZHMgdG8gYmUgaW4gaGVyZVxuICBwb2x5ZmlsbHMoZnMpXG4gIGZzLmdyYWNlZnVsaWZ5ID0gcGF0Y2hcbiAgZnMuRmlsZVJlYWRTdHJlYW0gPSBSZWFkU3RyZWFtOyAgLy8gTGVnYWN5IG5hbWUuXG4gIGZzLkZpbGVXcml0ZVN0cmVhbSA9IFdyaXRlU3RyZWFtOyAgLy8gTGVnYWN5IG5hbWUuXG4gIGZzLmNyZWF0ZVJlYWRTdHJlYW0gPSBjcmVhdGVSZWFkU3RyZWFtXG4gIGZzLmNyZWF0ZVdyaXRlU3RyZWFtID0gY3JlYXRlV3JpdGVTdHJlYW1cbiAgdmFyIGZzJHJlYWRGaWxlID0gZnMucmVhZEZpbGVcbiAgZnMucmVhZEZpbGUgPSByZWFkRmlsZVxuICBmdW5jdGlvbiByZWFkRmlsZSAocGF0aCwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kcmVhZEZpbGUocGF0aCwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRyZWFkRmlsZSAocGF0aCwgb3B0aW9ucywgY2IpIHtcbiAgICAgIHJldHVybiBmcyRyZWFkRmlsZShwYXRoLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJHJlYWRGaWxlLCBbcGF0aCwgb3B0aW9ucywgY2JdXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgICByZXRyeSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJHdyaXRlRmlsZSA9IGZzLndyaXRlRmlsZVxuICBmcy53cml0ZUZpbGUgPSB3cml0ZUZpbGVcbiAgZnVuY3Rpb24gd3JpdGVGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyR3cml0ZUZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyR3cml0ZUZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKSB7XG4gICAgICByZXR1cm4gZnMkd3JpdGVGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kd3JpdGVGaWxlLCBbcGF0aCwgZGF0YSwgb3B0aW9ucywgY2JdXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgICByZXRyeSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJGFwcGVuZEZpbGUgPSBmcy5hcHBlbmRGaWxlXG4gIGlmIChmcyRhcHBlbmRGaWxlKVxuICAgIGZzLmFwcGVuZEZpbGUgPSBhcHBlbmRGaWxlXG4gIGZ1bmN0aW9uIGFwcGVuZEZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJGFwcGVuZEZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRhcHBlbmRGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYikge1xuICAgICAgcmV0dXJuIGZzJGFwcGVuZEZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRhcHBlbmRGaWxlLCBbcGF0aCwgZGF0YSwgb3B0aW9ucywgY2JdXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgICByZXRyeSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJHJlYWRkaXIgPSBmcy5yZWFkZGlyXG4gIGZzLnJlYWRkaXIgPSByZWFkZGlyXG4gIGZ1bmN0aW9uIHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiKSB7XG4gICAgdmFyIGFyZ3MgPSBbcGF0aF1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFyZ3MucHVzaChvcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBjYiA9IG9wdGlvbnNcbiAgICB9XG4gICAgYXJncy5wdXNoKGdvJHJlYWRkaXIkY2IpXG5cbiAgICByZXR1cm4gZ28kcmVhZGRpcihhcmdzKVxuXG4gICAgZnVuY3Rpb24gZ28kcmVhZGRpciRjYiAoZXJyLCBmaWxlcykge1xuICAgICAgaWYgKGZpbGVzICYmIGZpbGVzLnNvcnQpXG4gICAgICAgIGZpbGVzLnNvcnQoKVxuXG4gICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgZW5xdWV1ZShbZ28kcmVhZGRpciwgW2FyZ3NdXSlcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgcmV0cnkoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdvJHJlYWRkaXIgKGFyZ3MpIHtcbiAgICByZXR1cm4gZnMkcmVhZGRpci5hcHBseShmcywgYXJncylcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnZlcnNpb24uc3Vic3RyKDAsIDQpID09PSAndjAuOCcpIHtcbiAgICB2YXIgbGVnU3RyZWFtcyA9IGxlZ2FjeShmcylcbiAgICBSZWFkU3RyZWFtID0gbGVnU3RyZWFtcy5SZWFkU3RyZWFtXG4gICAgV3JpdGVTdHJlYW0gPSBsZWdTdHJlYW1zLldyaXRlU3RyZWFtXG4gIH1cblxuICB2YXIgZnMkUmVhZFN0cmVhbSA9IGZzLlJlYWRTdHJlYW1cbiAgUmVhZFN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGZzJFJlYWRTdHJlYW0ucHJvdG90eXBlKVxuICBSZWFkU3RyZWFtLnByb3RvdHlwZS5vcGVuID0gUmVhZFN0cmVhbSRvcGVuXG5cbiAgdmFyIGZzJFdyaXRlU3RyZWFtID0gZnMuV3JpdGVTdHJlYW1cbiAgV3JpdGVTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShmcyRXcml0ZVN0cmVhbS5wcm90b3R5cGUpXG4gIFdyaXRlU3RyZWFtLnByb3RvdHlwZS5vcGVuID0gV3JpdGVTdHJlYW0kb3BlblxuXG4gIGZzLlJlYWRTdHJlYW0gPSBSZWFkU3RyZWFtXG4gIGZzLldyaXRlU3RyZWFtID0gV3JpdGVTdHJlYW1cblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBSZWFkU3RyZWFtKVxuICAgICAgcmV0dXJuIGZzJFJlYWRTdHJlYW0uYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdGhpc1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBSZWFkU3RyZWFtLmFwcGx5KE9iamVjdC5jcmVhdGUoUmVhZFN0cmVhbS5wcm90b3R5cGUpLCBhcmd1bWVudHMpXG4gIH1cblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtJG9wZW4gKCkge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIG9wZW4odGhhdC5wYXRoLCB0aGF0LmZsYWdzLCB0aGF0Lm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGF0LmF1dG9DbG9zZSlcbiAgICAgICAgICB0aGF0LmRlc3Ryb3koKVxuXG4gICAgICAgIHRoYXQuZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGF0LmZkID0gZmRcbiAgICAgICAgdGhhdC5lbWl0KCdvcGVuJywgZmQpXG4gICAgICAgIHRoYXQucmVhZCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIFdyaXRlU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXcml0ZVN0cmVhbSlcbiAgICAgIHJldHVybiBmcyRXcml0ZVN0cmVhbS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIFdyaXRlU3RyZWFtLmFwcGx5KE9iamVjdC5jcmVhdGUoV3JpdGVTdHJlYW0ucHJvdG90eXBlKSwgYXJndW1lbnRzKVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0kb3BlbiAoKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgb3Blbih0aGF0LnBhdGgsIHRoYXQuZmxhZ3MsIHRoYXQubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgdGhhdC5kZXN0cm95KClcbiAgICAgICAgdGhhdC5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoYXQuZmQgPSBmZFxuICAgICAgICB0aGF0LmVtaXQoJ29wZW4nLCBmZClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUmVhZFN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgUmVhZFN0cmVhbShwYXRoLCBvcHRpb25zKVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFdyaXRlU3RyZWFtKHBhdGgsIG9wdGlvbnMpXG4gIH1cblxuICB2YXIgZnMkb3BlbiA9IGZzLm9wZW5cbiAgZnMub3BlbiA9IG9wZW5cbiAgZnVuY3Rpb24gb3BlbiAocGF0aCwgZmxhZ3MsIG1vZGUsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBtb2RlID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBtb2RlLCBtb2RlID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJG9wZW4ocGF0aCwgZmxhZ3MsIG1vZGUsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kb3BlbiAocGF0aCwgZmxhZ3MsIG1vZGUsIGNiKSB7XG4gICAgICByZXR1cm4gZnMkb3BlbihwYXRoLCBmbGFncywgbW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kb3BlbiwgW3BhdGgsIGZsYWdzLCBtb2RlLCBjYl1dKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgIHJldHJ5KClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnNcbn1cblxuZnVuY3Rpb24gZW5xdWV1ZSAoZWxlbSkge1xuICBkZWJ1ZygnRU5RVUVVRScsIGVsZW1bMF0ubmFtZSwgZWxlbVsxXSlcbiAgcXVldWUucHVzaChlbGVtKVxufVxuXG5mdW5jdGlvbiByZXRyeSAoKSB7XG4gIHZhciBlbGVtID0gcXVldWUuc2hpZnQoKVxuICBpZiAoZWxlbSkge1xuICAgIGRlYnVnKCdSRVRSWScsIGVsZW1bMF0ubmFtZSwgZWxlbVsxXSlcbiAgICBlbGVtWzBdLmFwcGx5KG51bGwsIGVsZW1bMV0pXG4gIH1cbn1cbiIsInZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW1cblxubW9kdWxlLmV4cG9ydHMgPSBsZWdhY3lcblxuZnVuY3Rpb24gbGVnYWN5IChmcykge1xuICByZXR1cm4ge1xuICAgIFJlYWRTdHJlYW06IFJlYWRTdHJlYW0sXG4gICAgV3JpdGVTdHJlYW06IFdyaXRlU3RyZWFtXG4gIH1cblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRTdHJlYW0pKSByZXR1cm4gbmV3IFJlYWRTdHJlYW0ocGF0aCwgb3B0aW9ucyk7XG5cbiAgICBTdHJlYW0uY2FsbCh0aGlzKTtcblxuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5mZCA9IG51bGw7XG4gICAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuZmxhZ3MgPSAncic7XG4gICAgdGhpcy5tb2RlID0gNDM4OyAvKj0wNjY2Ki9cbiAgICB0aGlzLmJ1ZmZlclNpemUgPSA2NCAqIDEwMjQ7XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIE1peGluIG9wdGlvbnMgaW50byB0aGlzXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgdGhpc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVuY29kaW5nKSB0aGlzLnNldEVuY29kaW5nKHRoaXMuZW5jb2RpbmcpO1xuXG4gICAgaWYgKHRoaXMuc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5zdGFydCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ3N0YXJ0IG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZW5kID0gSW5maW5pdHk7XG4gICAgICB9IGVsc2UgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5lbmQpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdlbmQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdGFydCA+IHRoaXMuZW5kKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnQgbXVzdCBiZSA8PSBlbmQnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZkICE9PSBudWxsKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICBzZWxmLl9yZWFkKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmcy5vcGVuKHRoaXMucGF0aCwgdGhpcy5mbGFncywgdGhpcy5tb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgc2VsZi5yZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNlbGYuZmQgPSBmZDtcbiAgICAgIHNlbGYuZW1pdCgnb3BlbicsIGZkKTtcbiAgICAgIHNlbGYuX3JlYWQoKTtcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgV3JpdGVTdHJlYW0pKSByZXR1cm4gbmV3IFdyaXRlU3RyZWFtKHBhdGgsIG9wdGlvbnMpO1xuXG4gICAgU3RyZWFtLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMuZmQgPSBudWxsO1xuICAgIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuXG4gICAgdGhpcy5mbGFncyA9ICd3JztcbiAgICB0aGlzLmVuY29kaW5nID0gJ2JpbmFyeSc7XG4gICAgdGhpcy5tb2RlID0gNDM4OyAvKj0wNjY2Ki9cbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiA9IDA7XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIE1peGluIG9wdGlvbnMgaW50byB0aGlzXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgdGhpc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICgnbnVtYmVyJyAhPT0gdHlwZW9mIHRoaXMuc3RhcnQpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdzdGFydCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdGFydCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydCBtdXN0IGJlID49IHplcm8nKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0O1xuICAgIH1cblxuICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xuICAgIHRoaXMuX3F1ZXVlID0gW107XG5cbiAgICBpZiAodGhpcy5mZCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fb3BlbiA9IGZzLm9wZW47XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKFt0aGlzLl9vcGVuLCB0aGlzLnBhdGgsIHRoaXMuZmxhZ3MsIHRoaXMubW9kZSwgdW5kZWZpbmVkXSk7XG4gICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuICB9XG59XG4iLCJ2YXIgZnMgPSByZXF1aXJlKCcuL2ZzLmpzJylcbnZhciBjb25zdGFudHMgPSByZXF1aXJlKCdjb25zdGFudHMnKVxuXG52YXIgb3JpZ0N3ZCA9IHByb2Nlc3MuY3dkXG52YXIgY3dkID0gbnVsbFxuXG52YXIgcGxhdGZvcm0gPSBwcm9jZXNzLmVudi5HUkFDRUZVTF9GU19QTEFURk9STSB8fCBwcm9jZXNzLnBsYXRmb3JtXG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24oKSB7XG4gIGlmICghY3dkKVxuICAgIGN3ZCA9IG9yaWdDd2QuY2FsbChwcm9jZXNzKVxuICByZXR1cm4gY3dkXG59XG50cnkge1xuICBwcm9jZXNzLmN3ZCgpXG59IGNhdGNoIChlcikge31cblxudmFyIGNoZGlyID0gcHJvY2Vzcy5jaGRpclxucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uKGQpIHtcbiAgY3dkID0gbnVsbFxuICBjaGRpci5jYWxsKHByb2Nlc3MsIGQpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hcblxuZnVuY3Rpb24gcGF0Y2ggKGZzKSB7XG4gIC8vIChyZS0paW1wbGVtZW50IHNvbWUgdGhpbmdzIHRoYXQgYXJlIGtub3duIGJ1c3RlZCBvciBtaXNzaW5nLlxuXG4gIC8vIGxjaG1vZCwgYnJva2VuIHByaW9yIHRvIDAuNi4yXG4gIC8vIGJhY2stcG9ydCB0aGUgZml4IGhlcmUuXG4gIGlmIChjb25zdGFudHMuaGFzT3duUHJvcGVydHkoJ09fU1lNTElOSycpICYmXG4gICAgICBwcm9jZXNzLnZlcnNpb24ubWF0Y2goL152MFxcLjZcXC5bMC0yXXxedjBcXC41XFwuLykpIHtcbiAgICBwYXRjaExjaG1vZChmcylcbiAgfVxuXG4gIC8vIGx1dGltZXMgaW1wbGVtZW50YXRpb24sIG9yIG5vLW9wXG4gIGlmICghZnMubHV0aW1lcykge1xuICAgIHBhdGNoTHV0aW1lcyhmcylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3Mvbm9kZS1ncmFjZWZ1bC1mcy9pc3N1ZXMvNFxuICAvLyBDaG93biBzaG91bGQgbm90IGZhaWwgb24gZWludmFsIG9yIGVwZXJtIGlmIG5vbi1yb290LlxuICAvLyBJdCBzaG91bGQgbm90IGZhaWwgb24gZW5vc3lzIGV2ZXIsIGFzIHRoaXMganVzdCBpbmRpY2F0ZXNcbiAgLy8gdGhhdCBhIGZzIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgaW50ZW5kZWQgb3BlcmF0aW9uLlxuXG4gIGZzLmNob3duID0gY2hvd25GaXgoZnMuY2hvd24pXG4gIGZzLmZjaG93biA9IGNob3duRml4KGZzLmZjaG93bilcbiAgZnMubGNob3duID0gY2hvd25GaXgoZnMubGNob3duKVxuXG4gIGZzLmNobW9kID0gY2htb2RGaXgoZnMuY2htb2QpXG4gIGZzLmZjaG1vZCA9IGNobW9kRml4KGZzLmZjaG1vZClcbiAgZnMubGNobW9kID0gY2htb2RGaXgoZnMubGNobW9kKVxuXG4gIGZzLmNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5jaG93blN5bmMpXG4gIGZzLmZjaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMuZmNob3duU3luYylcbiAgZnMubGNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5sY2hvd25TeW5jKVxuXG4gIGZzLmNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5jaG1vZFN5bmMpXG4gIGZzLmZjaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMuZmNobW9kU3luYylcbiAgZnMubGNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5sY2htb2RTeW5jKVxuXG4gIGZzLnN0YXQgPSBzdGF0Rml4KGZzLnN0YXQpXG4gIGZzLmZzdGF0ID0gc3RhdEZpeChmcy5mc3RhdClcbiAgZnMubHN0YXQgPSBzdGF0Rml4KGZzLmxzdGF0KVxuXG4gIGZzLnN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMuc3RhdFN5bmMpXG4gIGZzLmZzdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLmZzdGF0U3luYylcbiAgZnMubHN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMubHN0YXRTeW5jKVxuXG4gIC8vIGlmIGxjaG1vZC9sY2hvd24gZG8gbm90IGV4aXN0LCB0aGVuIG1ha2UgdGhlbSBuby1vcHNcbiAgaWYgKCFmcy5sY2htb2QpIHtcbiAgICBmcy5sY2htb2QgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSwgY2IpIHtcbiAgICAgIGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYilcbiAgICB9XG4gICAgZnMubGNobW9kU3luYyA9IGZ1bmN0aW9uICgpIHt9XG4gIH1cbiAgaWYgKCFmcy5sY2hvd24pIHtcbiAgICBmcy5sY2hvd24gPSBmdW5jdGlvbiAocGF0aCwgdWlkLCBnaWQsIGNiKSB7XG4gICAgICBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpXG4gICAgfVxuICAgIGZzLmxjaG93blN5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICB9XG5cbiAgLy8gb24gV2luZG93cywgQS9WIHNvZnR3YXJlIGNhbiBsb2NrIHRoZSBkaXJlY3RvcnksIGNhdXNpbmcgdGhpc1xuICAvLyB0byBmYWlsIHdpdGggYW4gRUFDQ0VTIG9yIEVQRVJNIGlmIHRoZSBkaXJlY3RvcnkgY29udGFpbnMgbmV3bHlcbiAgLy8gY3JlYXRlZCBmaWxlcy4gIFRyeSBhZ2FpbiBvbiBmYWlsdXJlLCBmb3IgdXAgdG8gNjAgc2Vjb25kcy5cblxuICAvLyBTZXQgdGhlIHRpbWVvdXQgdGhpcyBsb25nIGJlY2F1c2Ugc29tZSBXaW5kb3dzIEFudGktVmlydXMsIHN1Y2ggYXMgUGFyaXR5XG4gIC8vIGJpdDksIG1heSBsb2NrIGZpbGVzIGZvciB1cCB0byBhIG1pbnV0ZSwgY2F1c2luZyBucG0gcGFja2FnZSBpbnN0YWxsXG4gIC8vIGZhaWx1cmVzLiBBbHNvLCB0YWtlIGNhcmUgdG8geWllbGQgdGhlIHNjaGVkdWxlci4gV2luZG93cyBzY2hlZHVsaW5nIGdpdmVzXG4gIC8vIENQVSB0byBhIGJ1c3kgbG9vcGluZyBwcm9jZXNzLCB3aGljaCBjYW4gY2F1c2UgdGhlIHByb2dyYW0gY2F1c2luZyB0aGUgbG9ja1xuICAvLyBjb250ZW50aW9uIHRvIGJlIHN0YXJ2ZWQgb2YgQ1BVIGJ5IG5vZGUsIHNvIHRoZSBjb250ZW50aW9uIGRvZXNuJ3QgcmVzb2x2ZS5cbiAgaWYgKHBsYXRmb3JtID09PSBcIndpbjMyXCIpIHtcbiAgICBmcy5yZW5hbWUgPSAoZnVuY3Rpb24gKGZzJHJlbmFtZSkgeyByZXR1cm4gZnVuY3Rpb24gKGZyb20sIHRvLCBjYikge1xuICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKVxuICAgICAgdmFyIGJhY2tvZmYgPSAwO1xuICAgICAgZnMkcmVuYW1lKGZyb20sIHRvLCBmdW5jdGlvbiBDQiAoZXIpIHtcbiAgICAgICAgaWYgKGVyXG4gICAgICAgICAgICAmJiAoZXIuY29kZSA9PT0gXCJFQUNDRVNcIiB8fCBlci5jb2RlID09PSBcIkVQRVJNXCIpXG4gICAgICAgICAgICAmJiBEYXRlLm5vdygpIC0gc3RhcnQgPCA2MDAwMCkge1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmcy5zdGF0KHRvLCBmdW5jdGlvbiAoc3RhdGVyLCBzdCkge1xuICAgICAgICAgICAgICBpZiAoc3RhdGVyICYmIHN0YXRlci5jb2RlID09PSBcIkVOT0VOVFwiKVxuICAgICAgICAgICAgICAgIGZzJHJlbmFtZShmcm9tLCB0bywgQ0IpO1xuICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgY2IoZXIpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sIGJhY2tvZmYpXG4gICAgICAgICAgaWYgKGJhY2tvZmYgPCAxMDApXG4gICAgICAgICAgICBiYWNrb2ZmICs9IDEwO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2IpIGNiKGVyKVxuICAgICAgfSlcbiAgICB9fSkoZnMucmVuYW1lKVxuICB9XG5cbiAgLy8gaWYgcmVhZCgpIHJldHVybnMgRUFHQUlOLCB0aGVuIGp1c3QgdHJ5IGl0IGFnYWluLlxuICBmcy5yZWFkID0gKGZ1bmN0aW9uIChmcyRyZWFkKSB7IHJldHVybiBmdW5jdGlvbiAoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFja18pIHtcbiAgICB2YXIgY2FsbGJhY2tcbiAgICBpZiAoY2FsbGJhY2tfICYmIHR5cGVvZiBjYWxsYmFja18gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBlYWdDb3VudGVyID0gMFxuICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoZXIsIF8sIF9fKSB7XG4gICAgICAgIGlmIChlciAmJiBlci5jb2RlID09PSAnRUFHQUlOJyAmJiBlYWdDb3VudGVyIDwgMTApIHtcbiAgICAgICAgICBlYWdDb3VudGVyICsrXG4gICAgICAgICAgcmV0dXJuIGZzJHJlYWQuY2FsbChmcywgZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFja18uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZnMkcmVhZC5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICB9fSkoZnMucmVhZClcblxuICBmcy5yZWFkU3luYyA9IChmdW5jdGlvbiAoZnMkcmVhZFN5bmMpIHsgcmV0dXJuIGZ1bmN0aW9uIChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24pIHtcbiAgICB2YXIgZWFnQ291bnRlciA9IDBcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGZzJHJlYWRTeW5jLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbilcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGlmIChlci5jb2RlID09PSAnRUFHQUlOJyAmJiBlYWdDb3VudGVyIDwgMTApIHtcbiAgICAgICAgICBlYWdDb3VudGVyICsrXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlclxuICAgICAgfVxuICAgIH1cbiAgfX0pKGZzLnJlYWRTeW5jKVxufVxuXG5mdW5jdGlvbiBwYXRjaExjaG1vZCAoZnMpIHtcbiAgZnMubGNobW9kID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUsIGNhbGxiYWNrKSB7XG4gICAgZnMub3BlbiggcGF0aFxuICAgICAgICAgICAsIGNvbnN0YW50cy5PX1dST05MWSB8IGNvbnN0YW50cy5PX1NZTUxJTktcbiAgICAgICAgICAgLCBtb2RlXG4gICAgICAgICAgICwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhlcnIpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gcHJlZmVyIHRvIHJldHVybiB0aGUgY2htb2QgZXJyb3IsIGlmIG9uZSBvY2N1cnMsXG4gICAgICAvLyBidXQgc3RpbGwgdHJ5IHRvIGNsb3NlLCBhbmQgcmVwb3J0IGNsb3NpbmcgZXJyb3JzIGlmIHRoZXkgb2NjdXIuXG4gICAgICBmcy5mY2htb2QoZmQsIG1vZGUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgZnMuY2xvc2UoZmQsIGZ1bmN0aW9uKGVycjIpIHtcbiAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVyciB8fCBlcnIyKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgZnMubGNobW9kU3luYyA9IGZ1bmN0aW9uIChwYXRoLCBtb2RlKSB7XG4gICAgdmFyIGZkID0gZnMub3BlblN5bmMocGF0aCwgY29uc3RhbnRzLk9fV1JPTkxZIHwgY29uc3RhbnRzLk9fU1lNTElOSywgbW9kZSlcblxuICAgIC8vIHByZWZlciB0byByZXR1cm4gdGhlIGNobW9kIGVycm9yLCBpZiBvbmUgb2NjdXJzLFxuICAgIC8vIGJ1dCBzdGlsbCB0cnkgdG8gY2xvc2UsIGFuZCByZXBvcnQgY2xvc2luZyBlcnJvcnMgaWYgdGhleSBvY2N1ci5cbiAgICB2YXIgdGhyZXcgPSB0cnVlXG4gICAgdmFyIHJldFxuICAgIHRyeSB7XG4gICAgICByZXQgPSBmcy5mY2htb2RTeW5jKGZkLCBtb2RlKVxuICAgICAgdGhyZXcgPSBmYWxzZVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAodGhyZXcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgIH0gY2F0Y2ggKGVyKSB7fVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cbn1cblxuZnVuY3Rpb24gcGF0Y2hMdXRpbWVzIChmcykge1xuICBpZiAoY29uc3RhbnRzLmhhc093blByb3BlcnR5KFwiT19TWU1MSU5LXCIpKSB7XG4gICAgZnMubHV0aW1lcyA9IGZ1bmN0aW9uIChwYXRoLCBhdCwgbXQsIGNiKSB7XG4gICAgICBmcy5vcGVuKHBhdGgsIGNvbnN0YW50cy5PX1NZTUxJTkssIGZ1bmN0aW9uIChlciwgZmQpIHtcbiAgICAgICAgaWYgKGVyKSB7XG4gICAgICAgICAgaWYgKGNiKSBjYihlcilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBmcy5mdXRpbWVzKGZkLCBhdCwgbXQsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICAgIGZzLmNsb3NlKGZkLCBmdW5jdGlvbiAoZXIyKSB7XG4gICAgICAgICAgICBpZiAoY2IpIGNiKGVyIHx8IGVyMilcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmcy5sdXRpbWVzU3luYyA9IGZ1bmN0aW9uIChwYXRoLCBhdCwgbXQpIHtcbiAgICAgIHZhciBmZCA9IGZzLm9wZW5TeW5jKHBhdGgsIGNvbnN0YW50cy5PX1NZTUxJTkspXG4gICAgICB2YXIgcmV0XG4gICAgICB2YXIgdGhyZXcgPSB0cnVlXG4gICAgICB0cnkge1xuICAgICAgICByZXQgPSBmcy5mdXRpbWVzU3luYyhmZCwgYXQsIG10KVxuICAgICAgICB0aHJldyA9IGZhbHNlXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAodGhyZXcpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICAgIH0gY2F0Y2ggKGVyKSB7fVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldFxuICAgIH1cblxuICB9IGVsc2Uge1xuICAgIGZzLmx1dGltZXMgPSBmdW5jdGlvbiAoX2EsIF9iLCBfYywgY2IpIHsgaWYgKGNiKSBwcm9jZXNzLm5leHRUaWNrKGNiKSB9XG4gICAgZnMubHV0aW1lc1N5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICB9XG59XG5cbmZ1bmN0aW9uIGNobW9kRml4IChvcmlnKSB7XG4gIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG1vZGUsIGNiKSB7XG4gICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCBtb2RlLCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgIGlmIChjaG93bkVyT2soZXIpKSBlciA9IG51bGxcbiAgICAgIGlmIChjYikgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gY2htb2RGaXhTeW5jIChvcmlnKSB7XG4gIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG1vZGUpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCBtb2RlKVxuICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICBpZiAoIWNob3duRXJPayhlcikpIHRocm93IGVyXG4gICAgfVxuICB9XG59XG5cblxuZnVuY3Rpb24gY2hvd25GaXggKG9yaWcpIHtcbiAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdWlkLCBnaWQsIGNiKSB7XG4gICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCB1aWQsIGdpZCwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICBpZiAoY2hvd25Fck9rKGVyKSkgZXIgPSBudWxsXG4gICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGNob3duRml4U3luYyAob3JpZykge1xuICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCB1aWQsIGdpZCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIHVpZCwgZ2lkKVxuICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICBpZiAoIWNob3duRXJPayhlcikpIHRocm93IGVyXG4gICAgfVxuICB9XG59XG5cblxuZnVuY3Rpb24gc3RhdEZpeCAob3JpZykge1xuICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gIC8vIE9sZGVyIHZlcnNpb25zIG9mIE5vZGUgZXJyb25lb3VzbHkgcmV0dXJuZWQgc2lnbmVkIGludGVnZXJzIGZvclxuICAvLyB1aWQgKyBnaWQuXG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBjYikge1xuICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgZnVuY3Rpb24gKGVyLCBzdGF0cykge1xuICAgICAgaWYgKCFzdGF0cykgcmV0dXJuIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIGlmIChzdGF0cy51aWQgPCAwKSBzdGF0cy51aWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgIGlmIChzdGF0cy5naWQgPCAwKSBzdGF0cy5naWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgIGlmIChjYikgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gc3RhdEZpeFN5bmMgKG9yaWcpIHtcbiAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBOb2RlIGVycm9uZW91c2x5IHJldHVybmVkIHNpZ25lZCBpbnRlZ2VycyBmb3JcbiAgLy8gdWlkICsgZ2lkLlxuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIHZhciBzdGF0cyA9IG9yaWcuY2FsbChmcywgdGFyZ2V0KVxuICAgIGlmIChzdGF0cy51aWQgPCAwKSBzdGF0cy51aWQgKz0gMHgxMDAwMDAwMDBcbiAgICBpZiAoc3RhdHMuZ2lkIDwgMCkgc3RhdHMuZ2lkICs9IDB4MTAwMDAwMDAwXG4gICAgcmV0dXJuIHN0YXRzO1xuICB9XG59XG5cbi8vIEVOT1NZUyBtZWFucyB0aGF0IHRoZSBmcyBkb2Vzbid0IHN1cHBvcnQgdGhlIG9wLiBKdXN0IGlnbm9yZVxuLy8gdGhhdCwgYmVjYXVzZSBpdCBkb2Vzbid0IG1hdHRlci5cbi8vXG4vLyBpZiB0aGVyZSdzIG5vIGdldHVpZCwgb3IgaWYgZ2V0dWlkKCkgaXMgc29tZXRoaW5nIG90aGVyXG4vLyB0aGFuIDAsIGFuZCB0aGUgZXJyb3IgaXMgRUlOVkFMIG9yIEVQRVJNLCB0aGVuIGp1c3QgaWdub3JlXG4vLyBpdC5cbi8vXG4vLyBUaGlzIHNwZWNpZmljIGNhc2UgaXMgYSBzaWxlbnQgZmFpbHVyZSBpbiBjcCwgaW5zdGFsbCwgdGFyLFxuLy8gYW5kIG1vc3Qgb3RoZXIgdW5peCB0b29scyB0aGF0IG1hbmFnZSBwZXJtaXNzaW9ucy5cbi8vXG4vLyBXaGVuIHJ1bm5pbmcgYXMgcm9vdCwgb3IgaWYgb3RoZXIgdHlwZXMgb2YgZXJyb3JzIGFyZVxuLy8gZW5jb3VudGVyZWQsIHRoZW4gaXQncyBzdHJpY3QuXG5mdW5jdGlvbiBjaG93bkVyT2sgKGVyKSB7XG4gIGlmICghZXIpXG4gICAgcmV0dXJuIHRydWVcblxuICBpZiAoZXIuY29kZSA9PT0gXCJFTk9TWVNcIilcbiAgICByZXR1cm4gdHJ1ZVxuXG4gIHZhciBub25yb290ID0gIXByb2Nlc3MuZ2V0dWlkIHx8IHByb2Nlc3MuZ2V0dWlkKCkgIT09IDBcbiAgaWYgKG5vbnJvb3QpIHtcbiAgICBpZiAoZXIuY29kZSA9PT0gXCJFSU5WQUxcIiB8fCBlci5jb2RlID09PSBcIkVQRVJNXCIpXG4gICAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG4iLCJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iLCJ2YXIgaGFzaCA9IHJlcXVpcmUoJy4uL2hhc2gnKTtcbnZhciB1dGlscyA9IGhhc2gudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh2YXIgdCA9IDg7IHQgPCB0aGlzLnBhZExlbmd0aDsgdCsrKVxuICAgICAgcmVzW2krK10gPSAwO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG4iLCJ2YXIgaG1hYyA9IGV4cG9ydHM7XG5cbnZhciBoYXNoID0gcmVxdWlyZSgnLi4vaGFzaCcpO1xudmFyIHV0aWxzID0gaGFzaC51dGlscztcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG5cbmZ1bmN0aW9uIEhtYWMoaGFzaCwga2V5LCBlbmMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEhtYWMpKVxuICAgIHJldHVybiBuZXcgSG1hYyhoYXNoLCBrZXksIGVuYyk7XG4gIHRoaXMuSGFzaCA9IGhhc2g7XG4gIHRoaXMuYmxvY2tTaXplID0gaGFzaC5ibG9ja1NpemUgLyA4O1xuICB0aGlzLm91dFNpemUgPSBoYXNoLm91dFNpemUgLyA4O1xuICB0aGlzLmlubmVyID0gbnVsbDtcbiAgdGhpcy5vdXRlciA9IG51bGw7XG5cbiAgdGhpcy5faW5pdCh1dGlscy50b0FycmF5KGtleSwgZW5jKSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEhtYWM7XG5cbkhtYWMucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdChrZXkpIHtcbiAgLy8gU2hvcnRlbiBrZXksIGlmIG5lZWRlZFxuICBpZiAoa2V5Lmxlbmd0aCA+IHRoaXMuYmxvY2tTaXplKVxuICAgIGtleSA9IG5ldyB0aGlzLkhhc2goKS51cGRhdGUoa2V5KS5kaWdlc3QoKTtcbiAgYXNzZXJ0KGtleS5sZW5ndGggPD0gdGhpcy5ibG9ja1NpemUpO1xuXG4gIC8vIEFkZCBwYWRkaW5nIHRvIGtleVxuICBmb3IgKHZhciBpID0ga2V5Lmxlbmd0aDsgaSA8IHRoaXMuYmxvY2tTaXplOyBpKyspXG4gICAga2V5LnB1c2goMCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpKyspXG4gICAga2V5W2ldIF49IDB4MzY7XG4gIHRoaXMuaW5uZXIgPSBuZXcgdGhpcy5IYXNoKCkudXBkYXRlKGtleSk7XG5cbiAgLy8gMHgzNiBeIDB4NWMgPSAweDZhXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iLCJ2YXIgaGFzaCA9IHJlcXVpcmUoJy4uL2hhc2gnKTtcbnZhciB1dGlscyA9IGhhc2gudXRpbHM7XG5cbnZhciByb3RsMzIgPSB1dGlscy5yb3RsMzI7XG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl8zID0gdXRpbHMuc3VtMzJfMztcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBCbG9ja0hhc2ggPSBoYXNoLmNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiIsInZhciBoYXNoID0gcmVxdWlyZSgnLi4vaGFzaCcpO1xudmFyIHV0aWxzID0gaGFzaC51dGlscztcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG5cbnZhciByb3RyMzIgPSB1dGlscy5yb3RyMzI7XG52YXIgcm90bDMyID0gdXRpbHMucm90bDMyO1xudmFyIHN1bTMyID0gdXRpbHMuc3VtMzI7XG52YXIgc3VtMzJfNCA9IHV0aWxzLnN1bTMyXzQ7XG52YXIgc3VtMzJfNSA9IHV0aWxzLnN1bTMyXzU7XG52YXIgcm90cjY0X2hpID0gdXRpbHMucm90cjY0X2hpO1xudmFyIHJvdHI2NF9sbyA9IHV0aWxzLnJvdHI2NF9sbztcbnZhciBzaHI2NF9oaSA9IHV0aWxzLnNocjY0X2hpO1xudmFyIHNocjY0X2xvID0gdXRpbHMuc2hyNjRfbG87XG52YXIgc3VtNjQgPSB1dGlscy5zdW02NDtcbnZhciBzdW02NF9oaSA9IHV0aWxzLnN1bTY0X2hpO1xudmFyIHN1bTY0X2xvID0gdXRpbHMuc3VtNjRfbG87XG52YXIgc3VtNjRfNF9oaSA9IHV0aWxzLnN1bTY0XzRfaGk7XG52YXIgc3VtNjRfNF9sbyA9IHV0aWxzLnN1bTY0XzRfbG87XG52YXIgc3VtNjRfNV9oaSA9IHV0aWxzLnN1bTY0XzVfaGk7XG52YXIgc3VtNjRfNV9sbyA9IHV0aWxzLnN1bTY0XzVfbG87XG52YXIgQmxvY2tIYXNoID0gaGFzaC5jb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMjU2X0sgPSBbXG4gIDB4NDI4YTJmOTgsIDB4NzEzNzQ0OTEsIDB4YjVjMGZiY2YsIDB4ZTliNWRiYTUsXG4gIDB4Mzk1NmMyNWIsIDB4NTlmMTExZjEsIDB4OTIzZjgyYTQsIDB4YWIxYzVlZDUsXG4gIDB4ZDgwN2FhOTgsIDB4MTI4MzViMDEsIDB4MjQzMTg1YmUsIDB4NTUwYzdkYzMsXG4gIDB4NzJiZTVkNzQsIDB4ODBkZWIxZmUsIDB4OWJkYzA2YTcsIDB4YzE5YmYxNzQsXG4gIDB4ZTQ5YjY5YzEsIDB4ZWZiZTQ3ODYsIDB4MGZjMTlkYzYsIDB4MjQwY2ExY2MsXG4gIDB4MmRlOTJjNmYsIDB4NGE3NDg0YWEsIDB4NWNiMGE5ZGMsIDB4NzZmOTg4ZGEsXG4gIDB4OTgzZTUxNTIsIDB4YTgzMWM2NmQsIDB4YjAwMzI3YzgsIDB4YmY1OTdmYzcsXG4gIDB4YzZlMDBiZjMsIDB4ZDVhNzkxNDcsIDB4MDZjYTYzNTEsIDB4MTQyOTI5NjcsXG4gIDB4MjdiNzBhODUsIDB4MmUxYjIxMzgsIDB4NGQyYzZkZmMsIDB4NTMzODBkMTMsXG4gIDB4NjUwYTczNTQsIDB4NzY2YTBhYmIsIDB4ODFjMmM5MmUsIDB4OTI3MjJjODUsXG4gIDB4YTJiZmU4YTEsIDB4YTgxYTY2NGIsIDB4YzI0YjhiNzAsIDB4Yzc2YzUxYTMsXG4gIDB4ZDE5MmU4MTksIDB4ZDY5OTA2MjQsIDB4ZjQwZTM1ODUsIDB4MTA2YWEwNzAsXG4gIDB4MTlhNGMxMTYsIDB4MWUzNzZjMDgsIDB4Mjc0ODc3NGMsIDB4MzRiMGJjYjUsXG4gIDB4MzkxYzBjYjMsIDB4NGVkOGFhNGEsIDB4NWI5Y2NhNGYsIDB4NjgyZTZmZjMsXG4gIDB4NzQ4ZjgyZWUsIDB4NzhhNTYzNmYsIDB4ODRjODc4MTQsIDB4OGNjNzAyMDgsXG4gIDB4OTBiZWZmZmEsIDB4YTQ1MDZjZWIsIDB4YmVmOWEzZjcsIDB4YzY3MTc4ZjJcbl07XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxudmFyIHNoYTFfSyA9IFtcbiAgMHg1QTgyNzk5OSwgMHg2RUQ5RUJBMSxcbiAgMHg4RjFCQkNEQywgMHhDQTYyQzFENlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbIDB4NmEwOWU2NjcsIDB4YmI2N2FlODUsIDB4M2M2ZWYzNzIsIDB4YTU0ZmY1M2EsXG4gICAgICAgICAgICAgMHg1MTBlNTI3ZiwgMHg5YjA1Njg4YywgMHgxZjgzZDlhYiwgMHg1YmUwY2QxOSBdO1xuICB0aGlzLmsgPSBzaGEyNTZfSztcbiAgdGhpcy5XID0gbmV3IEFycmF5KDY0KTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTI1NiwgQmxvY2tIYXNoKTtcbmV4cG9ydHMuc2hhMjU2ID0gU0hBMjU2O1xuXG5TSEEyNTYuYmxvY2tTaXplID0gNTEyO1xuU0hBMjU2Lm91dFNpemUgPSAyNTY7XG5TSEEyNTYuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjU2LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyNTYucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiBfdXBkYXRlKG1zZywgc3RhcnQpIHtcbiAgdmFyIFcgPSB0aGlzLlc7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKVxuICAgIFdbaV0gPSBtc2dbc3RhcnQgKyBpXTtcbiAgZm9yICg7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSBzdW0zMl80KGcxXzI1NihXW2kgLSAyXSksIFdbaSAtIDddLCBnMF8yNTYoV1tpIC0gMTVdKSwgV1tpIC0gMTZdKTtcblxuICB2YXIgYSA9IHRoaXMuaFswXTtcbiAgdmFyIGIgPSB0aGlzLmhbMV07XG4gIHZhciBjID0gdGhpcy5oWzJdO1xuICB2YXIgZCA9IHRoaXMuaFszXTtcbiAgdmFyIGUgPSB0aGlzLmhbNF07XG4gIHZhciBmID0gdGhpcy5oWzVdO1xuICB2YXIgZyA9IHRoaXMuaFs2XTtcbiAgdmFyIGggPSB0aGlzLmhbN107XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIFQxID0gc3VtMzJfNShoLCBzMV8yNTYoZSksIGNoMzIoZSwgZiwgZyksIHRoaXMua1tpXSwgV1tpXSk7XG4gICAgdmFyIFQyID0gc3VtMzIoczBfMjU2KGEpLCBtYWozMihhLCBiLCBjKSk7XG4gICAgaCA9IGc7XG4gICAgZyA9IGY7XG4gICAgZiA9IGU7XG4gICAgZSA9IHN1bTMyKGQsIFQxKTtcbiAgICBkID0gYztcbiAgICBjID0gYjtcbiAgICBiID0gYTtcbiAgICBhID0gc3VtMzIoVDEsIFQyKTtcbiAgfVxuXG4gIHRoaXMuaFswXSA9IHN1bTMyKHRoaXMuaFswXSwgYSk7XG4gIHRoaXMuaFsxXSA9IHN1bTMyKHRoaXMuaFsxXSwgYik7XG4gIHRoaXMuaFsyXSA9IHN1bTMyKHRoaXMuaFsyXSwgYyk7XG4gIHRoaXMuaFszXSA9IHN1bTMyKHRoaXMuaFszXSwgZCk7XG4gIHRoaXMuaFs0XSA9IHN1bTMyKHRoaXMuaFs0XSwgZSk7XG4gIHRoaXMuaFs1XSA9IHN1bTMyKHRoaXMuaFs1XSwgZik7XG4gIHRoaXMuaFs2XSA9IHN1bTMyKHRoaXMuaFs2XSwgZyk7XG4gIHRoaXMuaFs3XSA9IHN1bTMyKHRoaXMuaFs3XSwgaCk7XG59O1xuXG5TSEEyNTYucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaCwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLCAnYmlnJyk7XG59O1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFsgMHhjMTA1OWVkOCwgMHgzNjdjZDUwNywgMHgzMDcwZGQxNywgMHhmNzBlNTkzOSxcbiAgICAgICAgICAgICAweGZmYzAwYjMxLCAweDY4NTgxNTExLCAweDY0Zjk4ZmE3LCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEyMjQsIFNIQTI1Nik7XG5leHBvcnRzLnNoYTIyNCA9IFNIQTIyNDtcblxuU0hBMjI0LmJsb2NrU2l6ZSA9IDUxMjtcblNIQTIyNC5vdXRTaXplID0gMjI0O1xuU0hBMjI0LmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTIyNC5wYWRMZW5ndGggPSA2NDtcblxuU0hBMjI0LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICAvLyBKdXN0IHRydW5jYXRlIG91dHB1dFxuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmguc2xpY2UoMCwgNyksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbIDB4NmEwOWU2NjcsIDB4ZjNiY2M5MDgsXG4gICAgICAgICAgICAgMHhiYjY3YWU4NSwgMHg4NGNhYTczYixcbiAgICAgICAgICAgICAweDNjNmVmMzcyLCAweGZlOTRmODJiLFxuICAgICAgICAgICAgIDB4YTU0ZmY1M2EsIDB4NWYxZDM2ZjEsXG4gICAgICAgICAgICAgMHg1MTBlNTI3ZiwgMHhhZGU2ODJkMSxcbiAgICAgICAgICAgICAweDliMDU2ODhjLCAweDJiM2U2YzFmLFxuICAgICAgICAgICAgIDB4MWY4M2Q5YWIsIDB4ZmI0MWJkNmIsXG4gICAgICAgICAgICAgMHg1YmUwY2QxOSwgMHgxMzdlMjE3OSBdO1xuICB0aGlzLmsgPSBzaGE1MTJfSztcbiAgdGhpcy5XID0gbmV3IEFycmF5KDE2MCk7XG59XG51dGlscy5pbmhlcml0cyhTSEE1MTIsIEJsb2NrSGFzaCk7XG5leHBvcnRzLnNoYTUxMiA9IFNIQTUxMjtcblxuU0hBNTEyLmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEE1MTIub3V0U2l6ZSA9IDUxMjtcblNIQTUxMi5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEE1MTIucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEE1MTIucHJvdG90eXBlLl9wcmVwYXJlQmxvY2sgPSBmdW5jdGlvbiBfcHJlcGFyZUJsb2NrKG1zZywgc3RhcnQpIHtcbiAgdmFyIFcgPSB0aGlzLlc7XG5cbiAgLy8gMzIgeCAzMmJpdCB3b3Jkc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDMyOyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgYzBfaGkgPSBnMV81MTJfaGkoV1tpIC0gNF0sIFdbaSAtIDNdKTsgIC8vIGkgLSAyXG4gICAgdmFyIGMwX2xvID0gZzFfNTEyX2xvKFdbaSAtIDRdLCBXW2kgLSAzXSk7XG4gICAgdmFyIGMxX2hpID0gV1tpIC0gMTRdOyAgLy8gaSAtIDdcbiAgICB2YXIgYzFfbG8gPSBXW2kgLSAxM107XG4gICAgdmFyIGMyX2hpID0gZzBfNTEyX2hpKFdbaSAtIDMwXSwgV1tpIC0gMjldKTsgIC8vIGkgLSAxNVxuICAgIHZhciBjMl9sbyA9IGcwXzUxMl9sbyhXW2kgLSAzMF0sIFdbaSAtIDI5XSk7XG4gICAgdmFyIGMzX2hpID0gV1tpIC0gMzJdOyAgLy8gaSAtIDE2XG4gICAgdmFyIGMzX2xvID0gV1tpIC0gMzFdO1xuXG4gICAgV1tpXSA9IHN1bTY0XzRfaGkoYzBfaGksIGMwX2xvLFxuICAgICAgICAgICAgICAgICAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgICAgICAgICAgICAgICAgICBjMl9oaSwgYzJfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgYzNfaGksIGMzX2xvKTtcbiAgICBXW2kgKyAxXSA9IHN1bTY0XzRfbG8oYzBfaGksIGMwX2xvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjMV9oaSwgYzFfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKGMwX2hpLCBjMF9sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGMzX2hpLCBjM19sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGM0X2hpLCBjNF9sbyk7XG4gICAgdmFyIFQxX2xvID0gc3VtNjRfNV9sbyhjMF9oaSwgYzBfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjMV9oaSwgYzFfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjMl9oaSwgYzJfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjM19oaSwgYzNfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjNF9oaSwgYzRfbG8pO1xuXG4gICAgdmFyIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgdmFyIGMwX2xvID0gczBfNTEyX2xvKGFoLCBhbCk7XG4gICAgdmFyIGMxX2hpID0gbWFqNjRfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG4gICAgdmFyIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbIDB4Y2JiYjlkNWQsIDB4YzEwNTllZDgsXG4gICAgICAgICAgICAgMHg2MjlhMjkyYSwgMHgzNjdjZDUwNyxcbiAgICAgICAgICAgICAweDkxNTkwMTVhLCAweDMwNzBkZDE3LFxuICAgICAgICAgICAgIDB4MTUyZmVjZDgsIDB4ZjcwZTU5MzksXG4gICAgICAgICAgICAgMHg2NzMzMjY2NywgMHhmZmMwMGIzMSxcbiAgICAgICAgICAgICAweDhlYjQ0YTg3LCAweDY4NTgxNTExLFxuICAgICAgICAgICAgIDB4ZGIwYzJlMGQsIDB4NjRmOThmYTcsXG4gICAgICAgICAgICAgMHg0N2I1NDgxZCwgMHhiZWZhNGZhNCBdO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMzg0LCBTSEE1MTIpO1xuZXhwb3J0cy5zaGEzODQgPSBTSEEzODQ7XG5cblNIQTM4NC5ibG9ja1NpemUgPSAxMDI0O1xuU0hBMzg0Lm91dFNpemUgPSAzODQ7XG5TSEEzODQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMzg0LnBhZExlbmd0aCA9IDEyODtcblxuU0hBMzg0LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmguc2xpY2UoMCwgMTIpLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmguc2xpY2UoMCwgMTIpLCAnYmlnJyk7XG59O1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFsgMHg2NzQ1MjMwMSwgMHhlZmNkYWI4OSwgMHg5OGJhZGNmZSxcbiAgICAgICAgICAgICAweDEwMzI1NDc2LCAweGMzZDJlMWYwIF07XG4gIHRoaXMuVyA9IG5ldyBBcnJheSg4MCk7XG59XG5cbnV0aWxzLmluaGVyaXRzKFNIQTEsIEJsb2NrSGFzaCk7XG5leHBvcnRzLnNoYTEgPSBTSEExO1xuXG5TSEExLmJsb2NrU2l6ZSA9IDUxMjtcblNIQTEub3V0U2l6ZSA9IDE2MDtcblNIQTEuaG1hY1N0cmVuZ3RoID0gODA7XG5TSEExLnBhZExlbmd0aCA9IDY0O1xuXG5TSEExLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHZhciBXID0gdGhpcy5XO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG5cbiAgZm9yKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHJvdGwzMihXW2kgLSAzXSBeIFdbaSAtIDhdIF4gV1tpIC0gMTRdIF4gV1tpIC0gMTZdLCAxKTtcblxuICB2YXIgYSA9IHRoaXMuaFswXTtcbiAgdmFyIGIgPSB0aGlzLmhbMV07XG4gIHZhciBjID0gdGhpcy5oWzJdO1xuICB2YXIgZCA9IHRoaXMuaFszXTtcbiAgdmFyIGUgPSB0aGlzLmhbNF07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG5cbmZ1bmN0aW9uIGNoMzIoeCwgeSwgeikge1xuICByZXR1cm4gKHggJiB5KSBeICgofngpICYgeik7XG59XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cblxuZnVuY3Rpb24gczBfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCAyKSBeIHJvdHIzMih4LCAxMykgXiByb3RyMzIoeCwgMjIpO1xufVxuXG5mdW5jdGlvbiBzMV8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDYpIF4gcm90cjMyKHgsIDExKSBeIHJvdHIzMih4LCAyNSk7XG59XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuXG5mdW5jdGlvbiBnMV8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDE3KSBeIHJvdHIzMih4LCAxOSkgXiAoeCA+Pj4gMTApO1xufVxuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuXG5mdW5jdGlvbiBjaDY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCwgemwpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCwgemwpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoeGggJiB6aCkgXiAoeWggJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gbWFqNjRfbG8oeGgsIHhsLCB5aCwgeWwsIHpoLCB6bCkge1xuICB2YXIgciA9ICh4bCAmIHlsKSBeICh4bCAmIHpsKSBeICh5bCAmIHpsKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9oaSBeIGMxX2hpIF4gYzJfaGk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczBfNTEyX2xvKHhoLCB4bCkge1xuICB2YXIgYzBfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAyOCk7XG4gIHZhciBjMV9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDIpOyAgLy8gMzRcbiAgdmFyIGMyX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgNyk7ICAvLyAzOVxuXG4gIHZhciByID0gYzBfbG8gXiBjMV9sbyBeIGMyX2xvO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE0KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTgpO1xuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA5KTsgIC8vIDQxXG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gZzBfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxKTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgOCk7XG4gIHZhciBjMl9oaSA9IHNocjY0X2hpKHhoLCB4bCwgNyk7XG5cbiAgdmFyIHIgPSBjMF9oaSBeIGMxX2hpIF4gYzJfaGk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gZzBfNTEyX2xvKHhoLCB4bCkge1xuICB2YXIgYzBfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxKTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgOCk7XG4gIHZhciBjMl9sbyA9IHNocjY0X2xvKHhoLCB4bCwgNyk7XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gZzFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxOSk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDI5KTsgIC8vIDYxXG4gIHZhciBjMl9oaSA9IHNocjY0X2hpKHhoLCB4bCwgNik7XG5cbiAgdmFyIHIgPSBjMF9oaSBeIGMxX2hpIF4gYzJfaGk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gZzFfNTEyX2xvKHhoLCB4bCkge1xuICB2YXIgYzBfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOSk7XG4gIHZhciBjMV9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDI5KTsgIC8vIDYxXG4gIHZhciBjMl9sbyA9IHNocjY0X2xvKHhoLCB4bCwgNik7XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cbiIsInZhciB1dGlscyA9IGV4cG9ydHM7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIHZhciBoaSA9IGMgPj4gODtcbiAgICAgICAgdmFyIGxvID0gYyAmIDB4ZmY7XG4gICAgICAgIGlmIChoaSlcbiAgICAgICAgICByZXMucHVzaChoaSwgbG8pO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmVzLnB1c2gobG8pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZW5jID09PSAnaGV4Jykge1xuICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1teYS16MC05XSsvaWcsICcnKTtcbiAgICAgIGlmIChtc2cubGVuZ3RoICUgMiAhPT0gMClcbiAgICAgICAgbXNnID0gJzAnICsgbXNnO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpICs9IDIpXG4gICAgICAgIHJlcy5wdXNoKHBhcnNlSW50KG1zZ1tpXSArIG1zZ1tpICsgMV0sIDE2KSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxudXRpbHMudG9BcnJheSA9IHRvQXJyYXk7XG5cbmZ1bmN0aW9uIHRvSGV4KG1zZykge1xuICB2YXIgcmVzID0gJyc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgIHJlcyArPSB6ZXJvMihtc2dbaV0udG9TdHJpbmcoMTYpKTtcbiAgcmV0dXJuIHJlcztcbn1cbnV0aWxzLnRvSGV4ID0gdG9IZXg7XG5cbmZ1bmN0aW9uIGh0b25sKHcpIHtcbiAgdmFyIHJlcyA9ICh3ID4+PiAyNCkgfFxuICAgICAgICAgICAgKCh3ID4+PiA4KSAmIDB4ZmYwMCkgfFxuICAgICAgICAgICAgKCh3IDw8IDgpICYgMHhmZjAwMDApIHxcbiAgICAgICAgICAgICgodyAmIDB4ZmYpIDw8IDI0KTtcbiAgcmV0dXJuIHJlcyA+Pj4gMDtcbn1cbnV0aWxzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbnV0aWxzLnRvSGV4MzIgPSB0b0hleDMyO1xuXG5mdW5jdGlvbiB6ZXJvMih3b3JkKSB7XG4gIGlmICh3b3JkLmxlbmd0aCA9PT0gMSlcbiAgICByZXR1cm4gJzAnICsgd29yZDtcbiAgZWxzZVxuICAgIHJldHVybiB3b3JkO1xufVxudXRpbHMuemVybzIgPSB6ZXJvMjtcblxuZnVuY3Rpb24gemVybzgod29yZCkge1xuICBpZiAod29yZC5sZW5ndGggPT09IDcpXG4gICAgcmV0dXJuICcwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA2KVxuICAgIHJldHVybiAnMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDUpXG4gICAgcmV0dXJuICcwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDQpXG4gICAgcmV0dXJuICcwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAzKVxuICAgIHJldHVybiAnMDAwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDIpXG4gICAgcmV0dXJuICcwMDAwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDEpXG4gICAgcmV0dXJuICcwMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2VcbiAgICByZXR1cm4gd29yZDtcbn1cbnV0aWxzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbnV0aWxzLmpvaW4zMiA9IGpvaW4zMjtcblxuZnVuY3Rpb24gc3BsaXQzMihtc2csIGVuZGlhbikge1xuICB2YXIgcmVzID0gbmV3IEFycmF5KG1zZy5sZW5ndGggKiA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrLCBrICs9IDQpIHtcbiAgICB2YXIgbSA9IG1zZ1tpXTtcbiAgICBpZiAoZW5kaWFuID09PSAnYmlnJykge1xuICAgICAgcmVzW2tdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trICsgM10gPSBtICYgMHhmZjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzW2sgKyAzXSA9IG0gPj4+IDI0O1xuICAgICAgcmVzW2sgKyAyXSA9IChtID4+PiAxNikgJiAweGZmO1xuICAgICAgcmVzW2sgKyAxXSA9IChtID4+PiA4KSAmIDB4ZmY7XG4gICAgICByZXNba10gPSBtICYgMHhmZjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbnV0aWxzLnNwbGl0MzIgPSBzcGxpdDMyO1xuXG5mdW5jdGlvbiByb3RyMzIodywgYikge1xuICByZXR1cm4gKHcgPj4+IGIpIHwgKHcgPDwgKDMyIC0gYikpO1xufVxudXRpbHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxudXRpbHMucm90bDMyID0gcm90bDMyO1xuXG5mdW5jdGlvbiBzdW0zMihhLCBiKSB7XG4gIHJldHVybiAoYSArIGIpID4+PiAwO1xufVxudXRpbHMuc3VtMzIgPSBzdW0zMjtcblxuZnVuY3Rpb24gc3VtMzJfMyhhLCBiLCBjKSB7XG4gIHJldHVybiAoYSArIGIgKyBjKSA+Pj4gMDtcbn1cbnV0aWxzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbnV0aWxzLnN1bTMyXzQgPSBzdW0zMl80O1xuXG5mdW5jdGlvbiBzdW0zMl81KGEsIGIsIGMsIGQsIGUpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkICsgZSkgPj4+IDA7XG59XG51dGlscy5zdW0zMl81ID0gc3VtMzJfNTtcblxuZnVuY3Rpb24gYXNzZXJ0KGNvbmQsIG1zZykge1xuICBpZiAoIWNvbmQpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxudXRpbHMuYXNzZXJ0ID0gYXNzZXJ0O1xuXG51dGlscy5pbmhlcml0cyA9IGluaGVyaXRzO1xuXG5mdW5jdGlvbiBzdW02NChidWYsIHBvcywgYWgsIGFsKSB7XG4gIHZhciBiaCA9IGJ1Zltwb3NdO1xuICB2YXIgYmwgPSBidWZbcG9zICsgMV07XG5cbiAgdmFyIGxvID0gKGFsICsgYmwpID4+PiAwO1xuICB2YXIgaGkgPSAobG8gPCBhbCA/IDEgOiAwKSArIGFoICsgYmg7XG4gIGJ1Zltwb3NdID0gaGkgPj4+IDA7XG4gIGJ1Zltwb3MgKyAxXSA9IGxvO1xufVxuZXhwb3J0cy5zdW02NCA9IHN1bTY0O1xuXG5mdW5jdGlvbiBzdW02NF9oaShhaCwgYWwsIGJoLCBibCkge1xuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgcmV0dXJuIGhpID4+PiAwO1xufTtcbmV4cG9ydHMuc3VtNjRfaGkgPSBzdW02NF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfbG8oYWgsIGFsLCBiaCwgYmwpIHtcbiAgdmFyIGxvID0gYWwgKyBibDtcbiAgcmV0dXJuIGxvID4+PiAwO1xufTtcbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufTtcbmV4cG9ydHMuc3VtNjRfNF9oaSA9IHN1bTY0XzRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0XzRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsO1xuICByZXR1cm4gbG8gPj4+IDA7XG59O1xuZXhwb3J0cy5zdW02NF80X2xvID0gc3VtNjRfNF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNV9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwsIGVoLCBlbCkge1xuICB2YXIgY2FycnkgPSAwO1xuICB2YXIgbG8gPSBhbDtcbiAgbG8gPSAobG8gKyBibCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgYWwgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBjbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgY2wgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBkbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgZGwgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBlbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgZWwgPyAxIDogMDtcblxuICB2YXIgaGkgPSBhaCArIGJoICsgY2ggKyBkaCArIGVoICsgY2Fycnk7XG4gIHJldHVybiBoaSA+Pj4gMDtcbn07XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufTtcbmV4cG9ydHMuc3VtNjRfNV9sbyA9IHN1bTY0XzVfbG87XG5cbmZ1bmN0aW9uIHJvdHI2NF9oaShhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhbCA8PCAoMzIgLSBudW0pKSB8IChhaCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59O1xuZXhwb3J0cy5yb3RyNjRfaGkgPSByb3RyNjRfaGk7XG5cbmZ1bmN0aW9uIHJvdHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59O1xuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufTtcbmV4cG9ydHMuc2hyNjRfaGkgPSBzaHI2NF9oaTtcblxuZnVuY3Rpb24gc2hyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufTtcbmV4cG9ydHMuc2hyNjRfbG8gPSBzaHI2NF9sbztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGhhc2ggPSByZXF1aXJlKCdoYXNoLmpzJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtY3J5cHRvLXV0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBIbWFjRFJCRyhvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBIbWFjRFJCRykpXG4gICAgcmV0dXJuIG5ldyBIbWFjRFJCRyhvcHRpb25zKTtcbiAgdGhpcy5oYXNoID0gb3B0aW9ucy5oYXNoO1xuICB0aGlzLnByZWRSZXNpc3QgPSAhIW9wdGlvbnMucHJlZFJlc2lzdDtcblxuICB0aGlzLm91dExlbiA9IHRoaXMuaGFzaC5vdXRTaXplO1xuICB0aGlzLm1pbkVudHJvcHkgPSBvcHRpb25zLm1pbkVudHJvcHkgfHwgdGhpcy5oYXNoLmhtYWNTdHJlbmd0aDtcblxuICB0aGlzLnJlc2VlZCA9IG51bGw7XG4gIHRoaXMucmVzZWVkSW50ZXJ2YWwgPSBudWxsO1xuICB0aGlzLksgPSBudWxsO1xuICB0aGlzLlYgPSBudWxsO1xuXG4gIHZhciBlbnRyb3B5ID0gdXRpbHMudG9BcnJheShvcHRpb25zLmVudHJvcHksIG9wdGlvbnMuZW50cm9weUVuYyB8fCAnaGV4Jyk7XG4gIHZhciBub25jZSA9IHV0aWxzLnRvQXJyYXkob3B0aW9ucy5ub25jZSwgb3B0aW9ucy5ub25jZUVuYyB8fCAnaGV4Jyk7XG4gIHZhciBwZXJzID0gdXRpbHMudG9BcnJheShvcHRpb25zLnBlcnMsIG9wdGlvbnMucGVyc0VuYyB8fCAnaGV4Jyk7XG4gIGFzc2VydChlbnRyb3B5Lmxlbmd0aCA+PSAodGhpcy5taW5FbnRyb3B5IC8gOCksXG4gICAgICAgICAnTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAnICsgdGhpcy5taW5FbnRyb3B5ICsgJyBiaXRzJyk7XG4gIHRoaXMuX2luaXQoZW50cm9weSwgbm9uY2UsIHBlcnMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBIbWFjRFJCRztcblxuSG1hY0RSQkcucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdChlbnRyb3B5LCBub25jZSwgcGVycykge1xuICB2YXIgc2VlZCA9IGVudHJvcHkuY29uY2F0KG5vbmNlKS5jb25jYXQocGVycyk7XG5cbiAgdGhpcy5LID0gbmV3IEFycmF5KHRoaXMub3V0TGVuIC8gOCk7XG4gIHRoaXMuViA9IG5ldyBBcnJheSh0aGlzLm91dExlbiAvIDgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuVi5sZW5ndGg7IGkrKykge1xuICAgIHRoaXMuS1tpXSA9IDB4MDA7XG4gICAgdGhpcy5WW2ldID0gMHgwMTtcbiAgfVxuXG4gIHRoaXMuX3VwZGF0ZShzZWVkKTtcbiAgdGhpcy5yZXNlZWQgPSAxO1xuICB0aGlzLnJlc2VlZEludGVydmFsID0gMHgxMDAwMDAwMDAwMDAwOyAgLy8gMl40OFxufTtcblxuSG1hY0RSQkcucHJvdG90eXBlLl9obWFjID0gZnVuY3Rpb24gaG1hYygpIHtcbiAgcmV0dXJuIG5ldyBoYXNoLmhtYWModGhpcy5oYXNoLCB0aGlzLkspO1xufTtcblxuSG1hY0RSQkcucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoc2VlZCkge1xuICB2YXIga21hYyA9IHRoaXMuX2htYWMoKVxuICAgICAgICAgICAgICAgICAudXBkYXRlKHRoaXMuVilcbiAgICAgICAgICAgICAgICAgLnVwZGF0ZShbIDB4MDAgXSk7XG4gIGlmIChzZWVkKVxuICAgIGttYWMgPSBrbWFjLnVwZGF0ZShzZWVkKTtcbiAgdGhpcy5LID0ga21hYy5kaWdlc3QoKTtcbiAgdGhpcy5WID0gdGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpO1xuICBpZiAoIXNlZWQpXG4gICAgcmV0dXJuO1xuXG4gIHRoaXMuSyA9IHRoaXMuX2htYWMoKVxuICAgICAgICAgICAgICAgLnVwZGF0ZSh0aGlzLlYpXG4gICAgICAgICAgICAgICAudXBkYXRlKFsgMHgwMSBdKVxuICAgICAgICAgICAgICAgLnVwZGF0ZShzZWVkKVxuICAgICAgICAgICAgICAgLmRpZ2VzdCgpO1xuICB0aGlzLlYgPSB0aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCk7XG59O1xuXG5IbWFjRFJCRy5wcm90b3R5cGUucmVzZWVkID0gZnVuY3Rpb24gcmVzZWVkKGVudHJvcHksIGVudHJvcHlFbmMsIGFkZCwgYWRkRW5jKSB7XG4gIC8vIE9wdGlvbmFsIGVudHJvcHkgZW5jXG4gIGlmICh0eXBlb2YgZW50cm9weUVuYyAhPT0gJ3N0cmluZycpIHtcbiAgICBhZGRFbmMgPSBhZGQ7XG4gICAgYWRkID0gZW50cm9weUVuYztcbiAgICBlbnRyb3B5RW5jID0gbnVsbDtcbiAgfVxuXG4gIGVudHJvcHkgPSB1dGlscy50b0FycmF5KGVudHJvcHksIGVudHJvcHlFbmMpO1xuICBhZGQgPSB1dGlscy50b0FycmF5KGFkZCwgYWRkRW5jKTtcblxuICBhc3NlcnQoZW50cm9weS5sZW5ndGggPj0gKHRoaXMubWluRW50cm9weSAvIDgpLFxuICAgICAgICAgJ05vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogJyArIHRoaXMubWluRW50cm9weSArICcgYml0cycpO1xuXG4gIHRoaXMuX3VwZGF0ZShlbnRyb3B5LmNvbmNhdChhZGQgfHwgW10pKTtcbiAgdGhpcy5yZXNlZWQgPSAxO1xufTtcblxuSG1hY0RSQkcucHJvdG90eXBlLmdlbmVyYXRlID0gZnVuY3Rpb24gZ2VuZXJhdGUobGVuLCBlbmMsIGFkZCwgYWRkRW5jKSB7XG4gIGlmICh0aGlzLnJlc2VlZCA+IHRoaXMucmVzZWVkSW50ZXJ2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZXNlZWQgaXMgcmVxdWlyZWQnKTtcblxuICAvLyBPcHRpb25hbCBlbmNvZGluZ1xuICBpZiAodHlwZW9mIGVuYyAhPT0gJ3N0cmluZycpIHtcbiAgICBhZGRFbmMgPSBhZGQ7XG4gICAgYWRkID0gZW5jO1xuICAgIGVuYyA9IG51bGw7XG4gIH1cblxuICAvLyBPcHRpb25hbCBhZGRpdGlvbmFsIGRhdGFcbiAgaWYgKGFkZCkge1xuICAgIGFkZCA9IHV0aWxzLnRvQXJyYXkoYWRkLCBhZGRFbmMgfHwgJ2hleCcpO1xuICAgIHRoaXMuX3VwZGF0ZShhZGQpO1xuICB9XG5cbiAgdmFyIHRlbXAgPSBbXTtcbiAgd2hpbGUgKHRlbXAubGVuZ3RoIDwgbGVuKSB7XG4gICAgdGhpcy5WID0gdGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpO1xuICAgIHRlbXAgPSB0ZW1wLmNvbmNhdCh0aGlzLlYpO1xuICB9XG5cbiAgdmFyIHJlcyA9IHRlbXAuc2xpY2UoMCwgbGVuKTtcbiAgdGhpcy5fdXBkYXRlKGFkZCk7XG4gIHRoaXMucmVzZWVkKys7XG4gIHJldHVybiB1dGlscy5lbmNvZGUocmVzLCBlbmMpO1xufTtcbiIsImV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwiXG52YXIgaW5kZXhPZiA9IFtdLmluZGV4T2Y7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oYXJyLCBvYmope1xuICBpZiAoaW5kZXhPZikgcmV0dXJuIGFyci5pbmRleE9mKG9iaik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGFycltpXSA9PT0gb2JqKSByZXR1cm4gaTtcbiAgfVxuICByZXR1cm4gLTE7XG59OyIsImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgfVxufVxuIiwiLyohXG4gKiBEZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cblxuLy8gVGhlIF9pc0J1ZmZlciBjaGVjayBpcyBmb3IgU2FmYXJpIDUtNyBzdXBwb3J0LCBiZWNhdXNlIGl0J3MgbWlzc2luZ1xuLy8gT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiAoaXNCdWZmZXIob2JqKSB8fCBpc1Nsb3dCdWZmZXIob2JqKSB8fCAhIW9iai5faXNCdWZmZXIpXG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyIChvYmopIHtcbiAgcmV0dXJuICEhb2JqLmNvbnN0cnVjdG9yICYmIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iailcbn1cblxuLy8gRm9yIE5vZGUgdjAuMTAgc3VwcG9ydC4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseS5cbmZ1bmN0aW9uIGlzU2xvd0J1ZmZlciAob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqLnJlYWRGbG9hdExFID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmouc2xpY2UgPT09ICdmdW5jdGlvbicgJiYgaXNCdWZmZXIob2JqLnNsaWNlKDAsIDApKVxufVxuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFycikgPT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLCJ2YXIgX2ZzXG50cnkge1xuICBfZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG59IGNhdGNoIChfKSB7XG4gIF9mcyA9IHJlcXVpcmUoJ2ZzJylcbn1cblxuZnVuY3Rpb24gcmVhZEZpbGUgKGZpbGUsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PSBudWxsKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zXG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHtlbmNvZGluZzogb3B0aW9uc31cbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIHZhciBmcyA9IG9wdGlvbnMuZnMgfHwgX2ZzXG5cbiAgdmFyIHNob3VsZFRocm93ID0gdHJ1ZVxuICAvLyBETyBOT1QgVVNFICdwYXNzUGFyc2luZ0Vycm9ycycgVEhFIE5BTUUgV0lMTCBDSEFOR0UhISEsIHVzZSAndGhyb3dzJyBpbnN0ZWFkXG4gIGlmICgncGFzc1BhcnNpbmdFcnJvcnMnIGluIG9wdGlvbnMpIHtcbiAgICBzaG91bGRUaHJvdyA9IG9wdGlvbnMucGFzc1BhcnNpbmdFcnJvcnNcbiAgfSBlbHNlIGlmICgndGhyb3dzJyBpbiBvcHRpb25zKSB7XG4gICAgc2hvdWxkVGhyb3cgPSBvcHRpb25zLnRocm93c1xuICB9XG5cbiAgZnMucmVhZEZpbGUoZmlsZSwgb3B0aW9ucywgZnVuY3Rpb24gKGVyciwgZGF0YSkge1xuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG5cbiAgICBkYXRhID0gc3RyaXBCb20oZGF0YSlcblxuICAgIHZhciBvYmpcbiAgICB0cnkge1xuICAgICAgb2JqID0gSlNPTi5wYXJzZShkYXRhLCBvcHRpb25zID8gb3B0aW9ucy5yZXZpdmVyIDogbnVsbClcbiAgICB9IGNhdGNoIChlcnIyKSB7XG4gICAgICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICAgICAgZXJyMi5tZXNzYWdlID0gZmlsZSArICc6ICcgKyBlcnIyLm1lc3NhZ2VcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycjIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgbnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYWxsYmFjayhudWxsLCBvYmopXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlYWRGaWxlU3luYyAoZmlsZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHtlbmNvZGluZzogb3B0aW9uc31cbiAgfVxuXG4gIHZhciBmcyA9IG9wdGlvbnMuZnMgfHwgX2ZzXG5cbiAgdmFyIHNob3VsZFRocm93ID0gdHJ1ZVxuICAvLyBETyBOT1QgVVNFICdwYXNzUGFyc2luZ0Vycm9ycycgVEhFIE5BTUUgV0lMTCBDSEFOR0UhISEsIHVzZSAndGhyb3dzJyBpbnN0ZWFkXG4gIGlmICgncGFzc1BhcnNpbmdFcnJvcnMnIGluIG9wdGlvbnMpIHtcbiAgICBzaG91bGRUaHJvdyA9IG9wdGlvbnMucGFzc1BhcnNpbmdFcnJvcnNcbiAgfSBlbHNlIGlmICgndGhyb3dzJyBpbiBvcHRpb25zKSB7XG4gICAgc2hvdWxkVGhyb3cgPSBvcHRpb25zLnRocm93c1xuICB9XG5cbiAgdmFyIGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZSwgb3B0aW9ucylcbiAgY29udGVudCA9IHN0cmlwQm9tKGNvbnRlbnQpXG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50LCBvcHRpb25zLnJldml2ZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBmaWxlICsgJzogJyArIGVyci5tZXNzYWdlXG4gICAgICB0aHJvdyBlcnJcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JpdGVGaWxlIChmaWxlLCBvYmosIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PSBudWxsKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zXG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdmFyIGZzID0gb3B0aW9ucy5mcyB8fCBfZnNcblxuICB2YXIgc3BhY2VzID0gdHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnICYmIG9wdGlvbnMgIT09IG51bGxcbiAgICA/ICdzcGFjZXMnIGluIG9wdGlvbnNcbiAgICA/IG9wdGlvbnMuc3BhY2VzIDogdGhpcy5zcGFjZXNcbiAgICA6IHRoaXMuc3BhY2VzXG5cbiAgdmFyIHN0ciA9ICcnXG4gIHRyeSB7XG4gICAgc3RyID0gSlNPTi5zdHJpbmdpZnkob2JqLCBvcHRpb25zID8gb3B0aW9ucy5yZXBsYWNlciA6IG51bGwsIHNwYWNlcykgKyAnXFxuJ1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoY2FsbGJhY2spIHJldHVybiBjYWxsYmFjayhlcnIsIG51bGwpXG4gIH1cblxuICBmcy53cml0ZUZpbGUoZmlsZSwgc3RyLCBvcHRpb25zLCBjYWxsYmFjaylcbn1cblxuZnVuY3Rpb24gd3JpdGVGaWxlU3luYyAoZmlsZSwgb2JqLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIHZhciBmcyA9IG9wdGlvbnMuZnMgfHwgX2ZzXG5cbiAgdmFyIHNwYWNlcyA9IHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyAmJiBvcHRpb25zICE9PSBudWxsXG4gICAgPyAnc3BhY2VzJyBpbiBvcHRpb25zXG4gICAgPyBvcHRpb25zLnNwYWNlcyA6IHRoaXMuc3BhY2VzXG4gICAgOiB0aGlzLnNwYWNlc1xuXG4gIHZhciBzdHIgPSBKU09OLnN0cmluZ2lmeShvYmosIG9wdGlvbnMucmVwbGFjZXIsIHNwYWNlcykgKyAnXFxuJ1xuICAvLyBub3Qgc3VyZSBpZiBmcy53cml0ZUZpbGVTeW5jIHJldHVybnMgYW55dGhpbmcsIGJ1dCBqdXN0IGluIGNhc2VcbiAgcmV0dXJuIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG5mdW5jdGlvbiBzdHJpcEJvbSAoY29udGVudCkge1xuICAvLyB3ZSBkbyB0aGlzIGJlY2F1c2UgSlNPTi5wYXJzZSB3b3VsZCBjb252ZXJ0IGl0IHRvIGEgdXRmOCBzdHJpbmcgaWYgZW5jb2Rpbmcgd2Fzbid0IHNwZWNpZmllZFxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNvbnRlbnQpKSBjb250ZW50ID0gY29udGVudC50b1N0cmluZygndXRmOCcpXG4gIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL15cXHVGRUZGLywgJycpXG4gIHJldHVybiBjb250ZW50XG59XG5cbnZhciBqc29uZmlsZSA9IHtcbiAgc3BhY2VzOiBudWxsLFxuICByZWFkRmlsZTogcmVhZEZpbGUsXG4gIHJlYWRGaWxlU3luYzogcmVhZEZpbGVTeW5jLFxuICB3cml0ZUZpbGU6IHdyaXRlRmlsZSxcbiAgd3JpdGVGaWxlU3luYzogd3JpdGVGaWxlU3luY1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGpzb25maWxlXG4iLCIvLyBzaW1wbGUgbXV0YWJsZSBhc3NpZ24gKGV4dHJhY3RlZCBmcm9tIGZzLWV4dHJhKVxuLy8gSSByZWFsbHkgbGlrZSBvYmplY3QtYXNzaWduIHBhY2thZ2UsIGJ1dCBJIHdhbnRlZCBhIGxlYW4gcGFja2FnZSB3aXRoIHplcm8gZGVwc1xuZnVuY3Rpb24gX2Fzc2lnbiAoKSB7XG4gIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpLmZpbHRlcihmdW5jdGlvbiAoaSkgeyByZXR1cm4gaSB9KVxuICB2YXIgZGVzdCA9IGFyZ3Muc2hpZnQoKVxuICBhcmdzLmZvckVhY2goZnVuY3Rpb24gKHNyYykge1xuICAgIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBkZXN0W2tleV0gPSBzcmNba2V5XVxuICAgIH0pXG4gIH0pXG5cbiAgcmV0dXJuIGRlc3Rcbn1cblxuLy8gdGhhbmsgeW91IGJhYnkgSmVzdXMgZm9yIE5vZGUgdjQgYW5kIE9iamVjdC5hc3NpZ25cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBfYXNzaWduXG4iLCJ2YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbnZhciBmc1xudHJ5IHtcbiAgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG59IGNhdGNoIChlKSB7XG4gIGZzID0gcmVxdWlyZSgnZnMnKVxufVxudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJylcbnZhciBSZWFkYWJsZSA9IHJlcXVpcmUoJ3N0cmVhbScpLlJlYWRhYmxlXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4vYXNzaWduJylcblxuZnVuY3Rpb24gV2Fsa2VyIChkaXIsIG9wdGlvbnMpIHtcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBkaXIsICdzdHJpbmcnLCAnYGRpcmAgcGFyYW1ldGVyIHNob3VsZCBiZSBvZiB0eXBlIHN0cmluZy4gR290IHR5cGU6ICcgKyB0eXBlb2YgZGlyKVxuICB2YXIgZGVmYXVsdFN0cmVhbU9wdGlvbnMgPSB7IG9iamVjdE1vZGU6IHRydWUgfVxuICB2YXIgZGVmYXVsdE9wdHMgPSB7IHF1ZXVlTWV0aG9kOiAnc2hpZnQnLCBwYXRoU29ydGVyOiB1bmRlZmluZWQsIGZpbHRlcjogdW5kZWZpbmVkIH1cbiAgb3B0aW9ucyA9IGFzc2lnbihkZWZhdWx0T3B0cywgb3B0aW9ucywgZGVmYXVsdFN0cmVhbU9wdGlvbnMpXG5cbiAgUmVhZGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKVxuICB0aGlzLnJvb3QgPSBwYXRoLnJlc29sdmUoZGlyKVxuICB0aGlzLnBhdGhzID0gW3RoaXMucm9vdF1cbiAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICB0aGlzLmZzID0gb3B0aW9ucy5mcyB8fCBmcyAvLyBtb2NrLWZzXG59XG51dGlsLmluaGVyaXRzKFdhbGtlciwgUmVhZGFibGUpXG5cbldhbGtlci5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLnBhdGhzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMucHVzaChudWxsKVxuICB2YXIgc2VsZiA9IHRoaXNcbiAgdmFyIHBhdGhJdGVtID0gdGhpcy5wYXRoc1t0aGlzLm9wdGlvbnMucXVldWVNZXRob2RdKClcblxuICBzZWxmLmZzLmxzdGF0KHBhdGhJdGVtLCBmdW5jdGlvbiAoZXJyLCBzdGF0cykge1xuICAgIHZhciBpdGVtID0geyBwYXRoOiBwYXRoSXRlbSwgc3RhdHM6IHN0YXRzIH1cbiAgICBpZiAoZXJyKSByZXR1cm4gc2VsZi5lbWl0KCdlcnJvcicsIGVyciwgaXRlbSlcbiAgICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHJldHVybiBzZWxmLnB1c2goaXRlbSlcblxuICAgIHNlbGYuZnMucmVhZGRpcihwYXRoSXRlbSwgZnVuY3Rpb24gKGVyciwgcGF0aEl0ZW1zKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHNlbGYucHVzaChpdGVtKVxuICAgICAgICByZXR1cm4gc2VsZi5lbWl0KCdlcnJvcicsIGVyciwgaXRlbSlcbiAgICAgIH1cblxuICAgICAgcGF0aEl0ZW1zID0gcGF0aEl0ZW1zLm1hcChmdW5jdGlvbiAocGFydCkgeyByZXR1cm4gcGF0aC5qb2luKHBhdGhJdGVtLCBwYXJ0KSB9KVxuICAgICAgaWYgKHNlbGYub3B0aW9ucy5maWx0ZXIpIHBhdGhJdGVtcyA9IHBhdGhJdGVtcy5maWx0ZXIoc2VsZi5vcHRpb25zLmZpbHRlcilcbiAgICAgIGlmIChzZWxmLm9wdGlvbnMucGF0aFNvcnRlcikgcGF0aEl0ZW1zLnNvcnQoc2VsZi5vcHRpb25zLnBhdGhTb3J0ZXIpXG4gICAgICBwYXRoSXRlbXMuZm9yRWFjaChmdW5jdGlvbiAocGkpIHsgc2VsZi5wYXRocy5wdXNoKHBpKSB9KVxuXG4gICAgICBzZWxmLnB1c2goaXRlbSlcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiB3YWxrIChyb290LCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgV2Fsa2VyKHJvb3QsIG9wdGlvbnMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2Fsa1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciB1c2VyQWdlbnQgPSBnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3IudXNlckFnZW50O1xudmFyIGlzUnVubmluZ0luSUUgPSB1c2VyQWdlbnQgJiYgdXNlckFnZW50LmluZGV4T2YoXCJNU0lFIFwiKSA+IC0xO1xuXG4vLyBNYWtlIHByb3BlcnRpZXMgd3JpdGFibGUgaW4gSUUsIGFzIHBlclxuLy8gaHR0cDovL3d3dy5hZGVxdWF0ZWx5Z29vZC5jb20vUmVwbGFjaW5nLXNldFRpbWVvdXQtR2xvYmFsbHkuaHRtbFxuaWYgKGlzUnVubmluZ0luSUUpIHtcbiAgICBnbG9iYWwuc2V0VGltZW91dCA9IGdsb2JhbC5zZXRUaW1lb3V0O1xuICAgIGdsb2JhbC5jbGVhclRpbWVvdXQgPSBnbG9iYWwuY2xlYXJUaW1lb3V0O1xuICAgIGdsb2JhbC5zZXRJbnRlcnZhbCA9IGdsb2JhbC5zZXRJbnRlcnZhbDtcbiAgICBnbG9iYWwuY2xlYXJJbnRlcnZhbCA9IGdsb2JhbC5jbGVhckludGVydmFsO1xuICAgIGdsb2JhbC5EYXRlID0gZ2xvYmFsLkRhdGU7XG59XG5cbi8vIHNldEltbWVkaWF0ZSBpcyBub3QgYSBzdGFuZGFyZCBmdW5jdGlvblxuLy8gYXZvaWQgYWRkaW5nIHRoZSBwcm9wIHRvIHRoZSB3aW5kb3cgb2JqZWN0IGlmIG5vdCBwcmVzZW50XG5pZiAoZ2xvYmFsLnNldEltbWVkaWF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZ2xvYmFsLnNldEltbWVkaWF0ZSA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG4gICAgZ2xvYmFsLmNsZWFySW1tZWRpYXRlID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xufVxuXG4vLyBub2RlIGV4cGVjdHMgc2V0VGltZW91dC9zZXRJbnRlcnZhbCB0byByZXR1cm4gYSBmbiBvYmplY3Qgdy8gLnJlZigpLy51bnJlZigpXG4vLyBicm93c2VycywgYSBudW1iZXIuXG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nqb2hhbnNlbi9TaW5vbi5KUy9wdWxsLzQzNlxuXG52YXIgTk9PUCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfTtcbnZhciB0aW1lb3V0UmVzdWx0ID0gc2V0VGltZW91dChOT09QLCAwKTtcbnZhciBhZGRUaW1lclJldHVybnNPYmplY3QgPSB0eXBlb2YgdGltZW91dFJlc3VsdCA9PT0gXCJvYmplY3RcIjtcbnZhciBocnRpbWVQcmVzZW50ID0gKGdsb2JhbC5wcm9jZXNzICYmIHR5cGVvZiBnbG9iYWwucHJvY2Vzcy5ocnRpbWUgPT09IFwiZnVuY3Rpb25cIik7XG5jbGVhclRpbWVvdXQodGltZW91dFJlc3VsdCk7XG5cbnZhciBOYXRpdmVEYXRlID0gRGF0ZTtcbnZhciB1bmlxdWVUaW1lcklkID0gMTtcblxuLyoqXG4gKiBQYXJzZSBzdHJpbmdzIGxpa2UgXCIwMToxMDowMFwiIChtZWFuaW5nIDEgaG91ciwgMTAgbWludXRlcywgMCBzZWNvbmRzKSBpbnRvXG4gKiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLiBUaGlzIGlzIHVzZWQgdG8gc3VwcG9ydCBodW1hbi1yZWFkYWJsZSBzdHJpbmdzIHBhc3NlZFxuICogdG8gY2xvY2sudGljaygpXG4gKi9cbmZ1bmN0aW9uIHBhcnNlVGltZShzdHIpIHtcbiAgICBpZiAoIXN0cikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICB2YXIgc3RyaW5ncyA9IHN0ci5zcGxpdChcIjpcIik7XG4gICAgdmFyIGwgPSBzdHJpbmdzLmxlbmd0aDtcbiAgICB2YXIgaSA9IGw7XG4gICAgdmFyIG1zID0gMDtcbiAgICB2YXIgcGFyc2VkO1xuXG4gICAgaWYgKGwgPiAzIHx8ICEvXihcXGRcXGQ6KXswLDJ9XFxkXFxkPyQvLnRlc3Qoc3RyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0aWNrIG9ubHkgdW5kZXJzdGFuZHMgbnVtYmVycywgJ206cycgYW5kICdoOm06cycuIEVhY2ggcGFydCBtdXN0IGJlIHR3byBkaWdpdHNcIik7XG4gICAgfVxuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgICBwYXJzZWQgPSBwYXJzZUludChzdHJpbmdzW2ldLCAxMCk7XG5cbiAgICAgICAgaWYgKHBhcnNlZCA+PSA2MCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0aW1lIFwiICsgc3RyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1zICs9IHBhcnNlZCAqIE1hdGgucG93KDYwLCAobCAtIGkgLSAxKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1zICogMTAwMDtcbn1cblxuLyoqXG4gKiBGbG9vciBmdW5jdGlvbiB0aGF0IGFsc28gd29ya3MgZm9yIG5lZ2F0aXZlIG51bWJlcnNcbiAqL1xuZnVuY3Rpb24gZml4ZWRGbG9vcihuKSB7XG4gICAgcmV0dXJuIChuID49IDAgPyBNYXRoLmZsb29yKG4pIDogTWF0aC5jZWlsKG4pKTtcbn1cblxuLyoqXG4gKiAlIG9wZXJhdG9yIHRoYXQgYWxzbyB3b3JrcyBmb3IgbmVnYXRpdmUgbnVtYmVyc1xuICovXG5mdW5jdGlvbiBmaXhlZE1vZHVsbyhuLCBtKSB7XG4gICAgcmV0dXJuICgobiAlIG0pICsgbSkgJSBtO1xufVxuXG4vKipcbiAqIFVzZWQgdG8gZ3JvayB0aGUgYG5vd2AgcGFyYW1ldGVyIHRvIGNyZWF0ZUNsb2NrLlxuICovXG5mdW5jdGlvbiBnZXRFcG9jaChlcG9jaCkge1xuICAgIGlmICghZXBvY2gpIHsgcmV0dXJuIDA7IH1cbiAgICBpZiAodHlwZW9mIGVwb2NoLmdldFRpbWUgPT09IFwiZnVuY3Rpb25cIikgeyByZXR1cm4gZXBvY2guZ2V0VGltZSgpOyB9XG4gICAgaWYgKHR5cGVvZiBlcG9jaCA9PT0gXCJudW1iZXJcIikgeyByZXR1cm4gZXBvY2g7IH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibm93IHNob3VsZCBiZSBtaWxsaXNlY29uZHMgc2luY2UgVU5JWCBlcG9jaFwiKTtcbn1cblxuZnVuY3Rpb24gaW5SYW5nZShmcm9tLCB0bywgdGltZXIpIHtcbiAgICByZXR1cm4gdGltZXIgJiYgdGltZXIuY2FsbEF0ID49IGZyb20gJiYgdGltZXIuY2FsbEF0IDw9IHRvO1xufVxuXG5mdW5jdGlvbiBtaXJyb3JEYXRlUHJvcGVydGllcyh0YXJnZXQsIHNvdXJjZSkge1xuICAgIHZhciBwcm9wO1xuICAgIGZvciAocHJvcCBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2V0IHNwZWNpYWwgbm93IGltcGxlbWVudGF0aW9uXG4gICAgaWYgKHNvdXJjZS5ub3cpIHtcbiAgICAgICAgdGFyZ2V0Lm5vdyA9IGZ1bmN0aW9uIG5vdygpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQuY2xvY2subm93O1xuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB0YXJnZXQubm93O1xuICAgIH1cblxuICAgIC8vIHNldCBzcGVjaWFsIHRvU291cmNlIGltcGxlbWVudGF0aW9uXG4gICAgaWYgKHNvdXJjZS50b1NvdXJjZSkge1xuICAgICAgICB0YXJnZXQudG9Tb3VyY2UgPSBmdW5jdGlvbiB0b1NvdXJjZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UudG9Tb3VyY2UoKTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGFyZ2V0LnRvU291cmNlO1xuICAgIH1cblxuICAgIC8vIHNldCBzcGVjaWFsIHRvU3RyaW5nIGltcGxlbWVudGF0aW9uXG4gICAgdGFyZ2V0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UudG9TdHJpbmcoKTtcbiAgICB9O1xuXG4gICAgdGFyZ2V0LnByb3RvdHlwZSA9IHNvdXJjZS5wcm90b3R5cGU7XG4gICAgdGFyZ2V0LnBhcnNlID0gc291cmNlLnBhcnNlO1xuICAgIHRhcmdldC5VVEMgPSBzb3VyY2UuVVRDO1xuICAgIHRhcmdldC5wcm90b3R5cGUudG9VVENTdHJpbmcgPSBzb3VyY2UucHJvdG90eXBlLnRvVVRDU3RyaW5nO1xuXG4gICAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGF0ZSgpIHtcbiAgICBmdW5jdGlvbiBDbG9ja0RhdGUoeWVhciwgbW9udGgsIGRhdGUsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtcykge1xuICAgICAgICAvLyBEZWZlbnNpdmUgYW5kIHZlcmJvc2UgdG8gYXZvaWQgcG90ZW50aWFsIGhhcm0gaW4gcGFzc2luZ1xuICAgICAgICAvLyBleHBsaWNpdCB1bmRlZmluZWQgd2hlbiB1c2VyIGRvZXMgbm90IHBhc3MgYXJndW1lbnRcbiAgICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRlKENsb2NrRGF0ZS5jbG9jay5ub3cpO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZSh5ZWFyKTtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoeWVhciwgbW9udGgpO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSk7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRlKHllYXIsIG1vbnRoLCBkYXRlLCBob3VyKTtcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoeWVhciwgbW9udGgsIGRhdGUsIGhvdXIsIG1pbnV0ZSk7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRlKHllYXIsIG1vbnRoLCBkYXRlLCBob3VyLCBtaW51dGUsIHNlY29uZCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtaXJyb3JEYXRlUHJvcGVydGllcyhDbG9ja0RhdGUsIE5hdGl2ZURhdGUpO1xufVxuXG5mdW5jdGlvbiBhZGRUaW1lcihjbG9jaywgdGltZXIpIHtcbiAgICBpZiAodGltZXIuZnVuYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIG11c3QgYmUgcHJvdmlkZWQgdG8gdGltZXIgY2FsbHNcIik7XG4gICAgfVxuXG4gICAgaWYgKCFjbG9jay50aW1lcnMpIHtcbiAgICAgICAgY2xvY2sudGltZXJzID0ge307XG4gICAgfVxuXG4gICAgdGltZXIuaWQgPSB1bmlxdWVUaW1lcklkKys7XG4gICAgdGltZXIuY3JlYXRlZEF0ID0gY2xvY2subm93O1xuICAgIHRpbWVyLmNhbGxBdCA9IGNsb2NrLm5vdyArIChwYXJzZUludCh0aW1lci5kZWxheSkgfHwgKGNsb2NrLmR1cmluZ1RpY2sgPyAxIDogMCkpO1xuXG4gICAgY2xvY2sudGltZXJzW3RpbWVyLmlkXSA9IHRpbWVyO1xuXG4gICAgaWYgKGFkZFRpbWVyUmV0dXJuc09iamVjdCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHRpbWVyLmlkLFxuICAgICAgICAgICAgcmVmOiBOT09QLFxuICAgICAgICAgICAgdW5yZWY6IE5PT1BcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGltZXIuaWQ7XG59XG5cblxuLyogZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOiBcIm9mZlwiICovXG5mdW5jdGlvbiBjb21wYXJlVGltZXJzKGEsIGIpIHtcbiAgICAvLyBTb3J0IGZpcnN0IGJ5IGFic29sdXRlIHRpbWluZ1xuICAgIGlmIChhLmNhbGxBdCA8IGIuY2FsbEF0KSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKGEuY2FsbEF0ID4gYi5jYWxsQXQpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgLy8gU29ydCBuZXh0IGJ5IGltbWVkaWF0ZSwgaW1tZWRpYXRlIHRpbWVycyB0YWtlIHByZWNlZGVuY2VcbiAgICBpZiAoYS5pbW1lZGlhdGUgJiYgIWIuaW1tZWRpYXRlKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKCFhLmltbWVkaWF0ZSAmJiBiLmltbWVkaWF0ZSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICAvLyBTb3J0IG5leHQgYnkgY3JlYXRpb24gdGltZSwgZWFybGllci1jcmVhdGVkIHRpbWVycyB0YWtlIHByZWNlZGVuY2VcbiAgICBpZiAoYS5jcmVhdGVkQXQgPCBiLmNyZWF0ZWRBdCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmIChhLmNyZWF0ZWRBdCA+IGIuY3JlYXRlZEF0KSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIC8vIFNvcnQgbmV4dCBieSBpZCwgbG93ZXItaWQgdGltZXJzIHRha2UgcHJlY2VkZW5jZVxuICAgIGlmIChhLmlkIDwgYi5pZCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmIChhLmlkID4gYi5pZCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICAvLyBBcyB0aW1lciBpZHMgYXJlIHVuaXF1ZSwgbm8gZmFsbGJhY2sgYDBgIGlzIG5lY2Vzc2FyeVxufVxuXG5mdW5jdGlvbiBmaXJzdFRpbWVySW5SYW5nZShjbG9jaywgZnJvbSwgdG8pIHtcbiAgICB2YXIgdGltZXJzID0gY2xvY2sudGltZXJzO1xuICAgIHZhciB0aW1lciA9IG51bGw7XG4gICAgdmFyIGlkLCBpc0luUmFuZ2U7XG5cbiAgICBmb3IgKGlkIGluIHRpbWVycykge1xuICAgICAgICBpZiAodGltZXJzLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgICAgICAgaXNJblJhbmdlID0gaW5SYW5nZShmcm9tLCB0bywgdGltZXJzW2lkXSk7XG5cbiAgICAgICAgICAgIGlmIChpc0luUmFuZ2UgJiYgKCF0aW1lciB8fCBjb21wYXJlVGltZXJzKHRpbWVyLCB0aW1lcnNbaWRdKSA9PT0gMSkpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IHRpbWVyc1tpZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGltZXI7XG59XG5cbmZ1bmN0aW9uIGZpcnN0VGltZXIoY2xvY2spIHtcbiAgICB2YXIgdGltZXJzID0gY2xvY2sudGltZXJzO1xuICAgIHZhciB0aW1lciA9IG51bGw7XG4gICAgdmFyIGlkO1xuXG4gICAgZm9yIChpZCBpbiB0aW1lcnMpIHtcbiAgICAgICAgaWYgKHRpbWVycy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgIGlmICghdGltZXIgfHwgY29tcGFyZVRpbWVycyh0aW1lciwgdGltZXJzW2lkXSkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IHRpbWVyc1tpZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGltZXI7XG59XG5cbmZ1bmN0aW9uIGxhc3RUaW1lcihjbG9jaykge1xuICAgIHZhciB0aW1lcnMgPSBjbG9jay50aW1lcnM7XG4gICAgdmFyIHRpbWVyID0gbnVsbDtcbiAgICB2YXIgaWQ7XG5cbiAgICBmb3IgKGlkIGluIHRpbWVycykge1xuICAgICAgICBpZiAodGltZXJzLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgICAgICAgaWYgKCF0aW1lciB8fCBjb21wYXJlVGltZXJzKHRpbWVyLCB0aW1lcnNbaWRdKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IHRpbWVyc1tpZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGltZXI7XG59XG5cbmZ1bmN0aW9uIGNhbGxUaW1lcihjbG9jaywgdGltZXIpIHtcbiAgICB2YXIgZXhjZXB0aW9uO1xuXG4gICAgaWYgKHR5cGVvZiB0aW1lci5pbnRlcnZhbCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBjbG9jay50aW1lcnNbdGltZXIuaWRdLmNhbGxBdCArPSB0aW1lci5pbnRlcnZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgY2xvY2sudGltZXJzW3RpbWVyLmlkXTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHRpbWVyLmZ1bmMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGltZXIuZnVuYy5hcHBseShudWxsLCB0aW1lci5hcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8qIGVzbGludCBuby1ldmFsOiBcIm9mZlwiICovXG4gICAgICAgICAgICBldmFsKHRpbWVyLmZ1bmMpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBleGNlcHRpb24gPSBlO1xuICAgIH1cblxuICAgIGlmICghY2xvY2sudGltZXJzW3RpbWVyLmlkXSkge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGltZXJUeXBlKHRpbWVyKSB7XG4gICAgaWYgKHRpbWVyLmltbWVkaWF0ZSkge1xuICAgICAgICByZXR1cm4gXCJJbW1lZGlhdGVcIjtcbiAgICB9XG4gICAgaWYgKHRpbWVyLmludGVydmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFwiSW50ZXJ2YWxcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiVGltZW91dFwiO1xufVxuXG5mdW5jdGlvbiBjbGVhclRpbWVyKGNsb2NrLCB0aW1lcklkLCB0dHlwZSkge1xuICAgIGlmICghdGltZXJJZCkge1xuICAgICAgICAvLyBudWxsIGFwcGVhcnMgdG8gYmUgYWxsb3dlZCBpbiBtb3N0IGJyb3dzZXJzLCBhbmQgYXBwZWFycyB0byBiZVxuICAgICAgICAvLyByZWxpZWQgdXBvbiBieSBzb21lIGxpYnJhcmllcywgbGlrZSBCb290c3RyYXAgY2Fyb3VzZWxcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghY2xvY2sudGltZXJzKSB7XG4gICAgICAgIGNsb2NrLnRpbWVycyA9IFtdO1xuICAgIH1cblxuICAgIC8vIGluIE5vZGUsIHRpbWVySWQgaXMgYW4gb2JqZWN0IHdpdGggLnJlZigpLy51bnJlZigpLCBhbmRcbiAgICAvLyBpdHMgLmlkIGZpZWxkIGlzIHRoZSBhY3R1YWwgdGltZXIgaWQuXG4gICAgaWYgKHR5cGVvZiB0aW1lcklkID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRpbWVySWQgPSB0aW1lcklkLmlkO1xuICAgIH1cblxuICAgIGlmIChjbG9jay50aW1lcnMuaGFzT3duUHJvcGVydHkodGltZXJJZCkpIHtcbiAgICAgICAgLy8gY2hlY2sgdGhhdCB0aGUgSUQgbWF0Y2hlcyBhIHRpbWVyIG9mIHRoZSBjb3JyZWN0IHR5cGVcbiAgICAgICAgdmFyIHRpbWVyID0gY2xvY2sudGltZXJzW3RpbWVySWRdO1xuICAgICAgICBpZiAodGltZXJUeXBlKHRpbWVyKSA9PT0gdHR5cGUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjbG9jay50aW1lcnNbdGltZXJJZF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY2xlYXIgdGltZXI6IHRpbWVyIGNyZWF0ZWQgd2l0aCBzZXRcIiArIHRpbWVyVHlwZSh0aW1lcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFwiKCkgYnV0IGNsZWFyZWQgd2l0aCBjbGVhclwiICsgdHR5cGUgKyBcIigpXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiB1bmluc3RhbGwoY2xvY2ssIHRhcmdldCkge1xuICAgIHZhciBtZXRob2QsXG4gICAgICAgIGksXG4gICAgICAgIGw7XG4gICAgdmFyIGluc3RhbGxlZEhyVGltZSA9IFwiX2hydGltZVwiO1xuXG4gICAgZm9yIChpID0gMCwgbCA9IGNsb2NrLm1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIG1ldGhvZCA9IGNsb2NrLm1ldGhvZHNbaV07XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwiaHJ0aW1lXCIgJiYgdGFyZ2V0LnByb2Nlc3MpIHtcbiAgICAgICAgICAgIHRhcmdldC5wcm9jZXNzLmhydGltZSA9IGNsb2NrW2luc3RhbGxlZEhyVGltZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGFyZ2V0W21ldGhvZF0gJiYgdGFyZ2V0W21ldGhvZF0uaGFkT3duUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbbWV0aG9kXSA9IGNsb2NrW1wiX1wiICsgbWV0aG9kXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRhcmdldFttZXRob2RdO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZSkgeyAvKiBlc2xpbnQgZW1wdHktYmxvY2s6IFwib2ZmXCIgKi8gfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJldmVudCBtdWx0aXBsZSBleGVjdXRpb25zIHdoaWNoIHdpbGwgY29tcGxldGVseSByZW1vdmUgdGhlc2UgcHJvcHNcbiAgICBjbG9jay5tZXRob2RzID0gW107XG59XG5cbmZ1bmN0aW9uIGhpamFja01ldGhvZCh0YXJnZXQsIG1ldGhvZCwgY2xvY2spIHtcbiAgICB2YXIgcHJvcDtcblxuICAgIGNsb2NrW21ldGhvZF0uaGFkT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBtZXRob2QpO1xuICAgIGNsb2NrW1wiX1wiICsgbWV0aG9kXSA9IHRhcmdldFttZXRob2RdO1xuXG4gICAgaWYgKG1ldGhvZCA9PT0gXCJEYXRlXCIpIHtcbiAgICAgICAgdmFyIGRhdGUgPSBtaXJyb3JEYXRlUHJvcGVydGllcyhjbG9ja1ttZXRob2RdLCB0YXJnZXRbbWV0aG9kXSk7XG4gICAgICAgIHRhcmdldFttZXRob2RdID0gZGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9ja1ttZXRob2RdLmFwcGx5KGNsb2NrLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAocHJvcCBpbiBjbG9ja1ttZXRob2RdKSB7XG4gICAgICAgICAgICBpZiAoY2xvY2tbbWV0aG9kXS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFttZXRob2RdW3Byb3BdID0gY2xvY2tbbWV0aG9kXVtwcm9wXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRhcmdldFttZXRob2RdLmNsb2NrID0gY2xvY2s7XG59XG5cbnZhciB0aW1lcnMgPSB7XG4gICAgc2V0VGltZW91dDogc2V0VGltZW91dCxcbiAgICBjbGVhclRpbWVvdXQ6IGNsZWFyVGltZW91dCxcbiAgICBzZXRJbW1lZGlhdGU6IGdsb2JhbC5zZXRJbW1lZGlhdGUsXG4gICAgY2xlYXJJbW1lZGlhdGU6IGdsb2JhbC5jbGVhckltbWVkaWF0ZSxcbiAgICBzZXRJbnRlcnZhbDogc2V0SW50ZXJ2YWwsXG4gICAgY2xlYXJJbnRlcnZhbDogY2xlYXJJbnRlcnZhbCxcbiAgICBEYXRlOiBEYXRlXG59O1xuXG5pZiAoaHJ0aW1lUHJlc2VudCkge1xuICAgIHRpbWVycy5ocnRpbWUgPSBnbG9iYWwucHJvY2Vzcy5ocnRpbWU7XG59XG5cbnZhciBrZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgIHZhciBrcyA9IFtdO1xuICAgIHZhciBrZXk7XG5cbiAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICBrcy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ga3M7XG59O1xuXG5leHBvcnRzLnRpbWVycyA9IHRpbWVycztcblxuZnVuY3Rpb24gY3JlYXRlQ2xvY2sobm93LCBsb29wTGltaXQpIHtcbiAgICBsb29wTGltaXQgPSBsb29wTGltaXQgfHwgMTAwMDtcblxuICAgIHZhciBjbG9jayA9IHtcbiAgICAgICAgbm93OiBnZXRFcG9jaChub3cpLFxuICAgICAgICBock5vdzogMCxcbiAgICAgICAgdGltZW91dHM6IHt9LFxuICAgICAgICBEYXRlOiBjcmVhdGVEYXRlKCksXG4gICAgICAgIGxvb3BMaW1pdDogbG9vcExpbWl0XG4gICAgfTtcblxuICAgIGNsb2NrLkRhdGUuY2xvY2sgPSBjbG9jaztcblxuICAgIGNsb2NrLnNldFRpbWVvdXQgPSBmdW5jdGlvbiBzZXRUaW1lb3V0KGZ1bmMsIHRpbWVvdXQpIHtcbiAgICAgICAgcmV0dXJuIGFkZFRpbWVyKGNsb2NrLCB7XG4gICAgICAgICAgICBmdW5jOiBmdW5jLFxuICAgICAgICAgICAgYXJnczogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSxcbiAgICAgICAgICAgIGRlbGF5OiB0aW1lb3V0XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjbG9jay5jbGVhclRpbWVvdXQgPSBmdW5jdGlvbiBjbGVhclRpbWVvdXQodGltZXJJZCkge1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lcihjbG9jaywgdGltZXJJZCwgXCJUaW1lb3V0XCIpO1xuICAgIH07XG5cbiAgICBjbG9jay5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uIHNldEludGVydmFsKGZ1bmMsIHRpbWVvdXQpIHtcbiAgICAgICAgcmV0dXJuIGFkZFRpbWVyKGNsb2NrLCB7XG4gICAgICAgICAgICBmdW5jOiBmdW5jLFxuICAgICAgICAgICAgYXJnczogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSxcbiAgICAgICAgICAgIGRlbGF5OiB0aW1lb3V0LFxuICAgICAgICAgICAgaW50ZXJ2YWw6IHRpbWVvdXRcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNsb2NrLmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbiBjbGVhckludGVydmFsKHRpbWVySWQpIHtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZXIoY2xvY2ssIHRpbWVySWQsIFwiSW50ZXJ2YWxcIik7XG4gICAgfTtcblxuICAgIGNsb2NrLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmdW5jKSB7XG4gICAgICAgIHJldHVybiBhZGRUaW1lcihjbG9jaywge1xuICAgICAgICAgICAgZnVuYzogZnVuYyxcbiAgICAgICAgICAgIGFyZ3M6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSksXG4gICAgICAgICAgICBpbW1lZGlhdGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNsb2NrLmNsZWFySW1tZWRpYXRlID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUodGltZXJJZCkge1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lcihjbG9jaywgdGltZXJJZCwgXCJJbW1lZGlhdGVcIik7XG4gICAgfTtcblxuICAgIGNsb2NrLnRpY2sgPSBmdW5jdGlvbiB0aWNrKG1zKSB7XG4gICAgICAgIG1zID0gdHlwZW9mIG1zID09PSBcIm51bWJlclwiID8gbXMgOiBwYXJzZVRpbWUobXMpO1xuICAgICAgICB2YXIgdGlja0Zyb20gPSBjbG9jay5ub3c7XG4gICAgICAgIHZhciB0aWNrVG8gPSBjbG9jay5ub3cgKyBtcztcbiAgICAgICAgdmFyIHByZXZpb3VzID0gY2xvY2subm93O1xuICAgICAgICB2YXIgdGltZXIgPSBmaXJzdFRpbWVySW5SYW5nZShjbG9jaywgdGlja0Zyb20sIHRpY2tUbyk7XG4gICAgICAgIHZhciBvbGROb3csIGZpcnN0RXhjZXB0aW9uO1xuXG4gICAgICAgIGNsb2NrLmR1cmluZ1RpY2sgPSB0cnVlO1xuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZUhyVGltZShuZXdOb3cpIHtcbiAgICAgICAgICAgIGNsb2NrLmhyTm93ICs9IChuZXdOb3cgLSBjbG9jay5ub3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKHRpbWVyICYmIHRpY2tGcm9tIDw9IHRpY2tUbykge1xuICAgICAgICAgICAgaWYgKGNsb2NrLnRpbWVyc1t0aW1lci5pZF0pIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVIclRpbWUodGltZXIuY2FsbEF0KTtcbiAgICAgICAgICAgICAgICB0aWNrRnJvbSA9IHRpbWVyLmNhbGxBdDtcbiAgICAgICAgICAgICAgICBjbG9jay5ub3cgPSB0aW1lci5jYWxsQXQ7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb2xkTm93ID0gY2xvY2subm93O1xuICAgICAgICAgICAgICAgICAgICBjYWxsVGltZXIoY2xvY2ssIHRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tcGVuc2F0ZSBmb3IgYW55IHNldFN5c3RlbVRpbWUoKSBjYWxsIGR1cmluZyB0aW1lciBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICBpZiAob2xkTm93ICE9PSBjbG9jay5ub3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tGcm9tICs9IGNsb2NrLm5vdyAtIG9sZE5vdztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tUbyArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0RXhjZXB0aW9uID0gZmlyc3RFeGNlcHRpb24gfHwgZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRpbWVyID0gZmlyc3RUaW1lckluUmFuZ2UoY2xvY2ssIHByZXZpb3VzLCB0aWNrVG8pO1xuICAgICAgICAgICAgcHJldmlvdXMgPSB0aWNrRnJvbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb2NrLmR1cmluZ1RpY2sgPSBmYWxzZTtcbiAgICAgICAgdXBkYXRlSHJUaW1lKHRpY2tUbyk7XG4gICAgICAgIGNsb2NrLm5vdyA9IHRpY2tUbztcblxuICAgICAgICBpZiAoZmlyc3RFeGNlcHRpb24pIHtcbiAgICAgICAgICAgIHRocm93IGZpcnN0RXhjZXB0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsb2NrLm5vdztcbiAgICB9O1xuXG4gICAgY2xvY2submV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgIHZhciB0aW1lciA9IGZpcnN0VGltZXIoY2xvY2spO1xuICAgICAgICBpZiAoIXRpbWVyKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvY2subm93O1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvY2suZHVyaW5nVGljayA9IHRydWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjbG9jay5ub3cgPSB0aW1lci5jYWxsQXQ7XG4gICAgICAgICAgICBjYWxsVGltZXIoY2xvY2ssIHRpbWVyKTtcbiAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBjbG9jay5kdXJpbmdUaWNrID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY2xvY2sucnVuQWxsID0gZnVuY3Rpb24gcnVuQWxsKCkge1xuICAgICAgICB2YXIgbnVtVGltZXJzLCBpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2xvY2subG9vcExpbWl0OyBpKyspIHtcbiAgICAgICAgICAgIGlmICghY2xvY2sudGltZXJzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb2NrLm5vdztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbnVtVGltZXJzID0gT2JqZWN0LmtleXMoY2xvY2sudGltZXJzKS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAobnVtVGltZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb2NrLm5vdztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2xvY2submV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWJvcnRpbmcgYWZ0ZXIgcnVubmluZyBcIiArIGNsb2NrLmxvb3BMaW1pdCArIFwiIHRpbWVycywgYXNzdW1pbmcgYW4gaW5maW5pdGUgbG9vcCFcIik7XG4gICAgfTtcblxuICAgIGNsb2NrLnJ1blRvTGFzdCA9IGZ1bmN0aW9uIHJ1blRvTGFzdCgpIHtcbiAgICAgICAgdmFyIHRpbWVyID0gbGFzdFRpbWVyKGNsb2NrKTtcbiAgICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICAgICAgcmV0dXJuIGNsb2NrLm5vdztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjbG9jay50aWNrKHRpbWVyLmNhbGxBdCk7XG4gICAgfTtcblxuICAgIGNsb2NrLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICAgIGNsb2NrLnRpbWVycyA9IHt9O1xuICAgIH07XG5cbiAgICBjbG9jay5zZXRTeXN0ZW1UaW1lID0gZnVuY3Rpb24gc2V0U3lzdGVtVGltZShzeXN0ZW1UaW1lKSB7XG4gICAgICAgIC8vIGRldGVybWluZSB0aW1lIGRpZmZlcmVuY2VcbiAgICAgICAgdmFyIG5ld05vdyA9IGdldEVwb2NoKHN5c3RlbVRpbWUpO1xuICAgICAgICB2YXIgZGlmZmVyZW5jZSA9IG5ld05vdyAtIGNsb2NrLm5vdztcbiAgICAgICAgdmFyIGlkLCB0aW1lcjtcblxuICAgICAgICAvLyB1cGRhdGUgJ3N5c3RlbSBjbG9jaydcbiAgICAgICAgY2xvY2subm93ID0gbmV3Tm93O1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aW1lcnMgYW5kIGludGVydmFscyB0byBrZWVwIHRoZW0gc3RhYmxlXG4gICAgICAgIGZvciAoaWQgaW4gY2xvY2sudGltZXJzKSB7XG4gICAgICAgICAgICBpZiAoY2xvY2sudGltZXJzLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gY2xvY2sudGltZXJzW2lkXTtcbiAgICAgICAgICAgICAgICB0aW1lci5jcmVhdGVkQXQgKz0gZGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICB0aW1lci5jYWxsQXQgKz0gZGlmZmVyZW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoaHJ0aW1lUHJlc2VudCkge1xuICAgICAgICBjbG9jay5ocnRpbWUgPSBmdW5jdGlvbiAocHJldikge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJldikpIHtcbiAgICAgICAgICAgICAgICB2YXIgb2xkU2VjcyA9IChwcmV2WzBdICsgcHJldlsxXSAvIDFlOSk7XG4gICAgICAgICAgICAgICAgdmFyIG5ld1NlY3MgPSAoY2xvY2suaHJOb3cgLyAxMDAwKTtcbiAgICAgICAgICAgICAgICB2YXIgZGlmZmVyZW5jZSA9IChuZXdTZWNzIC0gb2xkU2Vjcyk7XG4gICAgICAgICAgICAgICAgdmFyIHNlY3MgPSBmaXhlZEZsb29yKGRpZmZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIHZhciBuYW5vc2VjcyA9IGZpeGVkTW9kdWxvKGRpZmZlcmVuY2UgKiAxZTksIDFlOSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgc2VjcyxcbiAgICAgICAgICAgICAgICAgICAgbmFub3NlY3NcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBmaXhlZEZsb29yKGNsb2NrLmhyTm93IC8gMTAwMCksXG4gICAgICAgICAgICAgICAgZml4ZWRNb2R1bG8oY2xvY2suaHJOb3cgKiAxZTYsIDFlOSlcbiAgICAgICAgICAgIF07XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb2NrO1xufVxuZXhwb3J0cy5jcmVhdGVDbG9jayA9IGNyZWF0ZUNsb2NrO1xuXG5leHBvcnRzLmluc3RhbGwgPSBmdW5jdGlvbiBpbnN0YWxsKHRhcmdldCwgbm93LCB0b0Zha2UsIGxvb3BMaW1pdCkge1xuICAgIHZhciBpLCBsO1xuXG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgdG9GYWtlID0gbm93O1xuICAgICAgICBub3cgPSB0YXJnZXQuZ2V0VGltZSgpO1xuICAgICAgICB0YXJnZXQgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHRvRmFrZSA9IG5vdztcbiAgICAgICAgbm93ID0gdGFyZ2V0O1xuICAgICAgICB0YXJnZXQgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgIHRhcmdldCA9IGdsb2JhbDtcbiAgICB9XG5cbiAgICB2YXIgY2xvY2sgPSBjcmVhdGVDbG9jayhub3csIGxvb3BMaW1pdCk7XG5cbiAgICBjbG9jay51bmluc3RhbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHVuaW5zdGFsbChjbG9jaywgdGFyZ2V0KTtcbiAgICB9O1xuXG4gICAgY2xvY2subWV0aG9kcyA9IHRvRmFrZSB8fCBbXTtcblxuICAgIGlmIChjbG9jay5tZXRob2RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjbG9jay5tZXRob2RzID0ga2V5cyh0aW1lcnMpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDAsIGwgPSBjbG9jay5tZXRob2RzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoY2xvY2subWV0aG9kc1tpXSA9PT0gXCJocnRpbWVcIikge1xuICAgICAgICAgICAgaWYgKHRhcmdldC5wcm9jZXNzICYmIHR5cGVvZiB0YXJnZXQucHJvY2Vzcy5ocnRpbWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGhpamFja01ldGhvZCh0YXJnZXQucHJvY2VzcywgY2xvY2subWV0aG9kc1tpXSwgY2xvY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGlqYWNrTWV0aG9kKHRhcmdldCwgY2xvY2subWV0aG9kc1tpXSwgY2xvY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb2NrO1xufTtcbiIsInZhciBibiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgYnJvcmFuZCA9IHJlcXVpcmUoJ2Jyb3JhbmQnKTtcblxuZnVuY3Rpb24gTWlsbGVyUmFiaW4ocmFuZCkge1xuICB0aGlzLnJhbmQgPSByYW5kIHx8IG5ldyBicm9yYW5kLlJhbmQoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gTWlsbGVyUmFiaW47XG5cbk1pbGxlclJhYmluLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShyYW5kKSB7XG4gIHJldHVybiBuZXcgTWlsbGVyUmFiaW4ocmFuZCk7XG59O1xuXG5NaWxsZXJSYWJpbi5wcm90b3R5cGUuX3JhbmQgPSBmdW5jdGlvbiBfcmFuZChuKSB7XG4gIHZhciBsZW4gPSBuLmJpdExlbmd0aCgpO1xuICB2YXIgYnVmID0gdGhpcy5yYW5kLmdlbmVyYXRlKE1hdGguY2VpbChsZW4gLyA4KSk7XG5cbiAgLy8gU2V0IGxvdyBiaXRzXG4gIGJ1ZlswXSB8PSAzO1xuXG4gIC8vIE1hc2sgaGlnaCBiaXRzXG4gIHZhciBtYXNrID0gbGVuICYgMHg3O1xuICBpZiAobWFzayAhPT0gMClcbiAgICBidWZbYnVmLmxlbmd0aCAtIDFdID4+PSA3IC0gbWFzaztcblxuICByZXR1cm4gbmV3IGJuKGJ1Zik7XG59XG5cbk1pbGxlclJhYmluLnByb3RvdHlwZS50ZXN0ID0gZnVuY3Rpb24gdGVzdChuLCBrLCBjYikge1xuICB2YXIgbGVuID0gbi5iaXRMZW5ndGgoKTtcbiAgdmFyIHJlZCA9IGJuLm1vbnQobik7XG4gIHZhciByb25lID0gbmV3IGJuKDEpLnRvUmVkKHJlZCk7XG5cbiAgaWYgKCFrKVxuICAgIGsgPSBNYXRoLm1heCgxLCAobGVuIC8gNDgpIHwgMCk7XG5cbiAgLy8gRmluZCBkIGFuZCBzLCAobiAtIDEpID0gKDIgXiBzKSAqIGQ7XG4gIHZhciBuMSA9IG4uc3VibigxKTtcbiAgdmFyIG4yID0gbjEuc3VibigxKTtcbiAgZm9yICh2YXIgcyA9IDA7ICFuMS50ZXN0bihzKTsgcysrKSB7fVxuICB2YXIgZCA9IG4uc2hybihzKTtcblxuICB2YXIgcm4xID0gbjEudG9SZWQocmVkKTtcblxuICB2YXIgcHJpbWUgPSB0cnVlO1xuICBmb3IgKDsgayA+IDA7IGstLSkge1xuICAgIHZhciBhID0gdGhpcy5fcmFuZChuMik7XG4gICAgaWYgKGNiKVxuICAgICAgY2IoYSk7XG5cbiAgICB2YXIgeCA9IGEudG9SZWQocmVkKS5yZWRQb3coZCk7XG4gICAgaWYgKHguY21wKHJvbmUpID09PSAwIHx8IHguY21wKHJuMSkgPT09IDApXG4gICAgICBjb250aW51ZTtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgczsgaSsrKSB7XG4gICAgICB4ID0geC5yZWRTcXIoKTtcblxuICAgICAgaWYgKHguY21wKHJvbmUpID09PSAwKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoeC5jbXAocm4xKSA9PT0gMClcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGkgPT09IHMpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gcHJpbWU7XG59O1xuXG5NaWxsZXJSYWJpbi5wcm90b3R5cGUuZ2V0RGl2aXNvciA9IGZ1bmN0aW9uIGdldERpdmlzb3Iobiwgaykge1xuICB2YXIgbGVuID0gbi5iaXRMZW5ndGgoKTtcbiAgdmFyIHJlZCA9IGJuLm1vbnQobik7XG4gIHZhciByb25lID0gbmV3IGJuKDEpLnRvUmVkKHJlZCk7XG5cbiAgaWYgKCFrKVxuICAgIGsgPSBNYXRoLm1heCgxLCAobGVuIC8gNDgpIHwgMCk7XG5cbiAgLy8gRmluZCBkIGFuZCBzLCAobiAtIDEpID0gKDIgXiBzKSAqIGQ7XG4gIHZhciBuMSA9IG4uc3VibigxKTtcbiAgdmFyIG4yID0gbjEuc3VibigxKTtcbiAgZm9yICh2YXIgcyA9IDA7ICFuMS50ZXN0bihzKTsgcysrKSB7fVxuICB2YXIgZCA9IG4uc2hybihzKTtcblxuICB2YXIgcm4xID0gbjEudG9SZWQocmVkKTtcblxuICBmb3IgKDsgayA+IDA7IGstLSkge1xuICAgIHZhciBhID0gdGhpcy5fcmFuZChuMik7XG5cbiAgICB2YXIgZyA9IG4uZ2NkKGEpO1xuICAgIGlmIChnLmNtcG4oMSkgIT09IDApXG4gICAgICByZXR1cm4gZztcblxuICAgIHZhciB4ID0gYS50b1JlZChyZWQpLnJlZFBvdyhkKTtcbiAgICBpZiAoeC5jbXAocm9uZSkgPT09IDAgfHwgeC5jbXAocm4xKSA9PT0gMClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBzOyBpKyspIHtcbiAgICAgIHggPSB4LnJlZFNxcigpO1xuXG4gICAgICBpZiAoeC5jbXAocm9uZSkgPT09IDApXG4gICAgICAgIHJldHVybiB4LmZyb21SZWQoKS5zdWJuKDEpLmdjZChuKTtcbiAgICAgIGlmICh4LmNtcChybjEpID09PSAwKVxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gcykge1xuICAgICAgeCA9IHgucmVkU3FyKCk7XG4gICAgICByZXR1cm4geC5mcm9tUmVkKCkuc3VibigxKS5nY2Qobik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSBleHBvcnRzO1xuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgIT09ICdzdHJpbmcnKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgICByZXNbaV0gPSBtc2dbaV0gfCAwO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgaWYgKGVuYyA9PT0gJ2hleCcpIHtcbiAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgIGlmIChtc2cubGVuZ3RoICUgMiAhPT0gMClcbiAgICAgIG1zZyA9ICcwJyArIG1zZztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gMilcbiAgICAgIHJlcy5wdXNoKHBhcnNlSW50KG1zZ1tpXSArIG1zZ1tpICsgMV0sIDE2KSk7XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICB2YXIgaGkgPSBjID4+IDg7XG4gICAgICB2YXIgbG8gPSBjICYgMHhmZjtcbiAgICAgIGlmIChoaSlcbiAgICAgICAgcmVzLnB1c2goaGksIGxvKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmVzLnB1c2gobG8pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxudXRpbHMudG9BcnJheSA9IHRvQXJyYXk7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG51dGlscy56ZXJvMiA9IHplcm8yO1xuXG5mdW5jdGlvbiB0b0hleChtc2cpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKylcbiAgICByZXMgKz0gemVybzIobXNnW2ldLnRvU3RyaW5nKDE2KSk7XG4gIHJldHVybiByZXM7XG59XG51dGlscy50b0hleCA9IHRvSGV4O1xuXG51dGlscy5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoYXJyLCBlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHRvSGV4KGFycik7XG4gIGVsc2VcbiAgICByZXR1cm4gYXJyO1xufTtcbiIsImV4cG9ydHMuZW5kaWFubmVzcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdMRScgfTtcblxuZXhwb3J0cy5ob3N0bmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbG9jYXRpb24uaG9zdG5hbWVcbiAgICB9XG4gICAgZWxzZSByZXR1cm4gJyc7XG59O1xuXG5leHBvcnRzLmxvYWRhdmcgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbXSB9O1xuXG5leHBvcnRzLnVwdGltZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDAgfTtcblxuZXhwb3J0cy5mcmVlbWVtID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBOdW1iZXIuTUFYX1ZBTFVFO1xufTtcblxuZXhwb3J0cy50b3RhbG1lbSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gTnVtYmVyLk1BWF9WQUxVRTtcbn07XG5cbmV4cG9ydHMuY3B1cyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtdIH07XG5cbmV4cG9ydHMudHlwZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdCcm93c2VyJyB9O1xuXG5leHBvcnRzLnJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IuYXBwVmVyc2lvbjtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufTtcblxuZXhwb3J0cy5uZXR3b3JrSW50ZXJmYWNlc1xuPSBleHBvcnRzLmdldE5ldHdvcmtJbnRlcmZhY2VzXG49IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHt9IH07XG5cbmV4cG9ydHMuYXJjaCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdqYXZhc2NyaXB0JyB9O1xuXG5leHBvcnRzLnBsYXRmb3JtID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJ2Jyb3dzZXInIH07XG5cbmV4cG9ydHMudG1wZGlyID0gZXhwb3J0cy50bXBEaXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICcvdG1wJztcbn07XG5cbmV4cG9ydHMuRU9MID0gJ1xcbic7XG4iLCJtb2R1bGUuZXhwb3J0cz17XCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xXCI6IFwiYWVzLTEyOC1lY2JcIixcblwiMi4xNi44NDAuMS4xMDEuMy40LjEuMlwiOiBcImFlcy0xMjgtY2JjXCIsXG5cIjIuMTYuODQwLjEuMTAxLjMuNC4xLjNcIjogXCJhZXMtMTI4LW9mYlwiLFxuXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40XCI6IFwiYWVzLTEyOC1jZmJcIixcblwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjFcIjogXCJhZXMtMTkyLWVjYlwiLFxuXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMlwiOiBcImFlcy0xOTItY2JjXCIsXG5cIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIzXCI6IFwiYWVzLTE5Mi1vZmJcIixcblwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjRcIjogXCJhZXMtMTkyLWNmYlwiLFxuXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MVwiOiBcImFlcy0yNTYtZWNiXCIsXG5cIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQyXCI6IFwiYWVzLTI1Ni1jYmNcIixcblwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDNcIjogXCJhZXMtMjU2LW9mYlwiLFxuXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NFwiOiBcImFlcy0yNTYtY2ZiXCJcbn0iLCIvLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9pbmR1dG55L3NlbGYtc2lnbmVkL2Jsb2IvZ2gtcGFnZXMvbGliL2FzbjEuanNcbi8vIEZlZG9yLCB5b3UgYXJlIGFtYXppbmcuXG4ndXNlIHN0cmljdCdcblxudmFyIGFzbjEgPSByZXF1aXJlKCdhc24xLmpzJylcblxuZXhwb3J0cy5jZXJ0aWZpY2F0ZSA9IHJlcXVpcmUoJy4vY2VydGlmaWNhdGUnKVxuXG52YXIgUlNBUHJpdmF0ZUtleSA9IGFzbjEuZGVmaW5lKCdSU0FQcml2YXRlS2V5JywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgndmVyc2lvbicpLmludCgpLFxuICAgIHRoaXMua2V5KCdtb2R1bHVzJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3B1YmxpY0V4cG9uZW50JykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3ByaXZhdGVFeHBvbmVudCcpLmludCgpLFxuICAgIHRoaXMua2V5KCdwcmltZTEnKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncHJpbWUyJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ2V4cG9uZW50MScpLmludCgpLFxuICAgIHRoaXMua2V5KCdleHBvbmVudDInKS5pbnQoKSxcbiAgICB0aGlzLmtleSgnY29lZmZpY2llbnQnKS5pbnQoKVxuICApXG59KVxuZXhwb3J0cy5SU0FQcml2YXRlS2V5ID0gUlNBUHJpdmF0ZUtleVxuXG52YXIgUlNBUHVibGljS2V5ID0gYXNuMS5kZWZpbmUoJ1JTQVB1YmxpY0tleScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ21vZHVsdXMnKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncHVibGljRXhwb25lbnQnKS5pbnQoKVxuICApXG59KVxuZXhwb3J0cy5SU0FQdWJsaWNLZXkgPSBSU0FQdWJsaWNLZXlcblxudmFyIFB1YmxpY0tleSA9IGFzbjEuZGVmaW5lKCdTdWJqZWN0UHVibGljS2V5SW5mbycsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ2FsZ29yaXRobScpLnVzZShBbGdvcml0aG1JZGVudGlmaWVyKSxcbiAgICB0aGlzLmtleSgnc3ViamVjdFB1YmxpY0tleScpLmJpdHN0cigpXG4gIClcbn0pXG5leHBvcnRzLlB1YmxpY0tleSA9IFB1YmxpY0tleVxuXG52YXIgQWxnb3JpdGhtSWRlbnRpZmllciA9IGFzbjEuZGVmaW5lKCdBbGdvcml0aG1JZGVudGlmaWVyJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgnYWxnb3JpdGhtJykub2JqaWQoKSxcbiAgICB0aGlzLmtleSgnbm9uZScpLm51bGxfKCkub3B0aW9uYWwoKSxcbiAgICB0aGlzLmtleSgnY3VydmUnKS5vYmppZCgpLm9wdGlvbmFsKCksXG4gICAgdGhpcy5rZXkoJ3BhcmFtcycpLnNlcSgpLm9iaihcbiAgICAgIHRoaXMua2V5KCdwJykuaW50KCksXG4gICAgICB0aGlzLmtleSgncScpLmludCgpLFxuICAgICAgdGhpcy5rZXkoJ2cnKS5pbnQoKVxuICAgICkub3B0aW9uYWwoKVxuICApXG59KVxuXG52YXIgUHJpdmF0ZUtleUluZm8gPSBhc24xLmRlZmluZSgnUHJpdmF0ZUtleUluZm8nLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCd2ZXJzaW9uJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ2FsZ29yaXRobScpLnVzZShBbGdvcml0aG1JZGVudGlmaWVyKSxcbiAgICB0aGlzLmtleSgnc3ViamVjdFByaXZhdGVLZXknKS5vY3RzdHIoKVxuICApXG59KVxuZXhwb3J0cy5Qcml2YXRlS2V5ID0gUHJpdmF0ZUtleUluZm9cbnZhciBFbmNyeXB0ZWRQcml2YXRlS2V5SW5mbyA9IGFzbjEuZGVmaW5lKCdFbmNyeXB0ZWRQcml2YXRlS2V5SW5mbycsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ2FsZ29yaXRobScpLnNlcSgpLm9iaihcbiAgICAgIHRoaXMua2V5KCdpZCcpLm9iamlkKCksXG4gICAgICB0aGlzLmtleSgnZGVjcnlwdCcpLnNlcSgpLm9iaihcbiAgICAgICAgdGhpcy5rZXkoJ2tkZScpLnNlcSgpLm9iaihcbiAgICAgICAgICB0aGlzLmtleSgnaWQnKS5vYmppZCgpLFxuICAgICAgICAgIHRoaXMua2V5KCdrZGVwYXJhbXMnKS5zZXEoKS5vYmooXG4gICAgICAgICAgICB0aGlzLmtleSgnc2FsdCcpLm9jdHN0cigpLFxuICAgICAgICAgICAgdGhpcy5rZXkoJ2l0ZXJzJykuaW50KClcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHRoaXMua2V5KCdjaXBoZXInKS5zZXEoKS5vYmooXG4gICAgICAgICAgdGhpcy5rZXkoJ2FsZ28nKS5vYmppZCgpLFxuICAgICAgICAgIHRoaXMua2V5KCdpdicpLm9jdHN0cigpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIHRoaXMua2V5KCdzdWJqZWN0UHJpdmF0ZUtleScpLm9jdHN0cigpXG4gIClcbn0pXG5cbmV4cG9ydHMuRW5jcnlwdGVkUHJpdmF0ZUtleSA9IEVuY3J5cHRlZFByaXZhdGVLZXlJbmZvXG5cbnZhciBEU0FQcml2YXRlS2V5ID0gYXNuMS5kZWZpbmUoJ0RTQVByaXZhdGVLZXknLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCd2ZXJzaW9uJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3AnKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncScpLmludCgpLFxuICAgIHRoaXMua2V5KCdnJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3B1Yl9rZXknKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncHJpdl9rZXknKS5pbnQoKVxuICApXG59KVxuZXhwb3J0cy5EU0FQcml2YXRlS2V5ID0gRFNBUHJpdmF0ZUtleVxuXG5leHBvcnRzLkRTQXBhcmFtID0gYXNuMS5kZWZpbmUoJ0RTQXBhcmFtJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLmludCgpXG59KVxuXG52YXIgRUNQcml2YXRlS2V5ID0gYXNuMS5kZWZpbmUoJ0VDUHJpdmF0ZUtleScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ3ZlcnNpb24nKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncHJpdmF0ZUtleScpLm9jdHN0cigpLFxuICAgIHRoaXMua2V5KCdwYXJhbWV0ZXJzJykub3B0aW9uYWwoKS5leHBsaWNpdCgwKS51c2UoRUNQYXJhbWV0ZXJzKSxcbiAgICB0aGlzLmtleSgncHVibGljS2V5Jykub3B0aW9uYWwoKS5leHBsaWNpdCgxKS5iaXRzdHIoKVxuICApXG59KVxuZXhwb3J0cy5FQ1ByaXZhdGVLZXkgPSBFQ1ByaXZhdGVLZXlcblxudmFyIEVDUGFyYW1ldGVycyA9IGFzbjEuZGVmaW5lKCdFQ1BhcmFtZXRlcnMnLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuY2hvaWNlKHtcbiAgICBuYW1lZEN1cnZlOiB0aGlzLm9iamlkKClcbiAgfSlcbn0pXG5cbmV4cG9ydHMuc2lnbmF0dXJlID0gYXNuMS5kZWZpbmUoJ3NpZ25hdHVyZScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ3InKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncycpLmludCgpXG4gIClcbn0pXG4iLCIvLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9SYW50YW5lbi9ub2RlLWR0bHMvYmxvYi8yNWE3ZGM4NjFiZGEzOGNmZWFjOTNhNzIzNTAwZWVhNGYwYWMyZTg2L0NlcnRpZmljYXRlLmpzXG4vLyB0aGFua3MgdG8gQFJhbnRhbmVuXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYXNuID0gcmVxdWlyZSgnYXNuMS5qcycpXG5cbnZhciBUaW1lID0gYXNuLmRlZmluZSgnVGltZScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jaG9pY2Uoe1xuICAgIHV0Y1RpbWU6IHRoaXMudXRjdGltZSgpLFxuICAgIGdlbmVyYWxUaW1lOiB0aGlzLmdlbnRpbWUoKVxuICB9KVxufSlcblxudmFyIEF0dHJpYnV0ZVR5cGVWYWx1ZSA9IGFzbi5kZWZpbmUoJ0F0dHJpYnV0ZVR5cGVWYWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ3R5cGUnKS5vYmppZCgpLFxuICAgIHRoaXMua2V5KCd2YWx1ZScpLmFueSgpXG4gIClcbn0pXG5cbnZhciBBbGdvcml0aG1JZGVudGlmaWVyID0gYXNuLmRlZmluZSgnQWxnb3JpdGhtSWRlbnRpZmllcicsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ2FsZ29yaXRobScpLm9iamlkKCksXG4gICAgdGhpcy5rZXkoJ3BhcmFtZXRlcnMnKS5vcHRpb25hbCgpXG4gIClcbn0pXG5cbnZhciBTdWJqZWN0UHVibGljS2V5SW5mbyA9IGFzbi5kZWZpbmUoJ1N1YmplY3RQdWJsaWNLZXlJbmZvJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgnYWxnb3JpdGhtJykudXNlKEFsZ29yaXRobUlkZW50aWZpZXIpLFxuICAgIHRoaXMua2V5KCdzdWJqZWN0UHVibGljS2V5JykuYml0c3RyKClcbiAgKVxufSlcblxudmFyIFJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUgPSBhc24uZGVmaW5lKCdSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNldG9mKEF0dHJpYnV0ZVR5cGVWYWx1ZSlcbn0pXG5cbnZhciBSRE5TZXF1ZW5jZSA9IGFzbi5kZWZpbmUoJ1JETlNlcXVlbmNlJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcW9mKFJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUpXG59KVxuXG52YXIgTmFtZSA9IGFzbi5kZWZpbmUoJ05hbWUnLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuY2hvaWNlKHtcbiAgICByZG5TZXF1ZW5jZTogdGhpcy51c2UoUkROU2VxdWVuY2UpXG4gIH0pXG59KVxuXG52YXIgVmFsaWRpdHkgPSBhc24uZGVmaW5lKCdWYWxpZGl0eScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ25vdEJlZm9yZScpLnVzZShUaW1lKSxcbiAgICB0aGlzLmtleSgnbm90QWZ0ZXInKS51c2UoVGltZSlcbiAgKVxufSlcblxudmFyIEV4dGVuc2lvbiA9IGFzbi5kZWZpbmUoJ0V4dGVuc2lvbicsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ2V4dG5JRCcpLm9iamlkKCksXG4gICAgdGhpcy5rZXkoJ2NyaXRpY2FsJykuYm9vbCgpLmRlZihmYWxzZSksXG4gICAgdGhpcy5rZXkoJ2V4dG5WYWx1ZScpLm9jdHN0cigpXG4gIClcbn0pXG5cbnZhciBUQlNDZXJ0aWZpY2F0ZSA9IGFzbi5kZWZpbmUoJ1RCU0NlcnRpZmljYXRlJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgndmVyc2lvbicpLmV4cGxpY2l0KDApLmludCgpLFxuICAgIHRoaXMua2V5KCdzZXJpYWxOdW1iZXInKS5pbnQoKSxcbiAgICB0aGlzLmtleSgnc2lnbmF0dXJlJykudXNlKEFsZ29yaXRobUlkZW50aWZpZXIpLFxuICAgIHRoaXMua2V5KCdpc3N1ZXInKS51c2UoTmFtZSksXG4gICAgdGhpcy5rZXkoJ3ZhbGlkaXR5JykudXNlKFZhbGlkaXR5KSxcbiAgICB0aGlzLmtleSgnc3ViamVjdCcpLnVzZShOYW1lKSxcbiAgICB0aGlzLmtleSgnc3ViamVjdFB1YmxpY0tleUluZm8nKS51c2UoU3ViamVjdFB1YmxpY0tleUluZm8pLFxuICAgIHRoaXMua2V5KCdpc3N1ZXJVbmlxdWVJRCcpLmltcGxpY2l0KDEpLmJpdHN0cigpLm9wdGlvbmFsKCksXG4gICAgdGhpcy5rZXkoJ3N1YmplY3RVbmlxdWVJRCcpLmltcGxpY2l0KDIpLmJpdHN0cigpLm9wdGlvbmFsKCksXG4gICAgdGhpcy5rZXkoJ2V4dGVuc2lvbnMnKS5leHBsaWNpdCgzKS5zZXFvZihFeHRlbnNpb24pLm9wdGlvbmFsKClcbiAgKVxufSlcblxudmFyIFg1MDlDZXJ0aWZpY2F0ZSA9IGFzbi5kZWZpbmUoJ1g1MDlDZXJ0aWZpY2F0ZScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ3Ric0NlcnRpZmljYXRlJykudXNlKFRCU0NlcnRpZmljYXRlKSxcbiAgICB0aGlzLmtleSgnc2lnbmF0dXJlQWxnb3JpdGhtJykudXNlKEFsZ29yaXRobUlkZW50aWZpZXIpLFxuICAgIHRoaXMua2V5KCdzaWduYXR1cmVWYWx1ZScpLmJpdHN0cigpXG4gIClcbn0pXG5cbm1vZHVsZS5leHBvcnRzID0gWDUwOUNlcnRpZmljYXRlXG4iLCIvLyBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FwYXRpbC9wZW1zdHJpcFxudmFyIGZpbmRQcm9jID0gL1Byb2MtVHlwZTogNCxFTkNSWVBURURcXG5cXHI/REVLLUluZm86IEFFUy0oKD86MTI4KXwoPzoxOTIpfCg/OjI1NikpLUNCQywoWzAtOUEtSF0rKVxcblxccj9cXG5cXHI/KFswLTlBLXpcXG5cXHJcXCtcXC9cXD1dKylcXG5cXHI/L21cbnZhciBzdGFydFJlZ2V4ID0gL14tLS0tLUJFR0lOICgoPzouKiBLRVkpfENFUlRJRklDQVRFKS0tLS0tXFxuL21cbnZhciBmdWxsUmVnZXggPSAvXi0tLS0tQkVHSU4gKCg/Oi4qIEtFWSl8Q0VSVElGSUNBVEUpLS0tLS1cXG5cXHI/KFswLTlBLXpcXG5cXHJcXCtcXC9cXD1dKylcXG5cXHI/LS0tLS1FTkQgXFwxLS0tLS0kL21cbnZhciBldnAgPSByZXF1aXJlKCdldnBfYnl0ZXN0b2tleScpXG52YXIgY2lwaGVycyA9IHJlcXVpcmUoJ2Jyb3dzZXJpZnktYWVzJylcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9rZXksIHBhc3N3b3JkKSB7XG4gIHZhciBrZXkgPSBva2V5LnRvU3RyaW5nKClcbiAgdmFyIG1hdGNoID0ga2V5Lm1hdGNoKGZpbmRQcm9jKVxuICB2YXIgZGVjcnlwdGVkXG4gIGlmICghbWF0Y2gpIHtcbiAgICB2YXIgbWF0Y2gyID0ga2V5Lm1hdGNoKGZ1bGxSZWdleClcbiAgICBkZWNyeXB0ZWQgPSBuZXcgQnVmZmVyKG1hdGNoMlsyXS5yZXBsYWNlKC9cXHI/XFxuL2csICcnKSwgJ2Jhc2U2NCcpXG4gIH0gZWxzZSB7XG4gICAgdmFyIHN1aXRlID0gJ2FlcycgKyBtYXRjaFsxXVxuICAgIHZhciBpdiA9IG5ldyBCdWZmZXIobWF0Y2hbMl0sICdoZXgnKVxuICAgIHZhciBjaXBoZXJUZXh0ID0gbmV3IEJ1ZmZlcihtYXRjaFszXS5yZXBsYWNlKC9cXHI/XFxuL2csICcnKSwgJ2Jhc2U2NCcpXG4gICAgdmFyIGNpcGhlcktleSA9IGV2cChwYXNzd29yZCwgaXYuc2xpY2UoMCwgOCksIHBhcnNlSW50KG1hdGNoWzFdLCAxMCkpLmtleVxuICAgIHZhciBvdXQgPSBbXVxuICAgIHZhciBjaXBoZXIgPSBjaXBoZXJzLmNyZWF0ZURlY2lwaGVyaXYoc3VpdGUsIGNpcGhlcktleSwgaXYpXG4gICAgb3V0LnB1c2goY2lwaGVyLnVwZGF0ZShjaXBoZXJUZXh0KSlcbiAgICBvdXQucHVzaChjaXBoZXIuZmluYWwoKSlcbiAgICBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KG91dClcbiAgfVxuICB2YXIgdGFnID0ga2V5Lm1hdGNoKHN0YXJ0UmVnZXgpWzFdXG4gIHJldHVybiB7XG4gICAgdGFnOiB0YWcsXG4gICAgZGF0YTogZGVjcnlwdGVkXG4gIH1cbn1cbiIsInZhciBhc24xID0gcmVxdWlyZSgnLi9hc24xJylcbnZhciBhZXNpZCA9IHJlcXVpcmUoJy4vYWVzaWQuanNvbicpXG52YXIgZml4UHJvYyA9IHJlcXVpcmUoJy4vZml4UHJvYycpXG52YXIgY2lwaGVycyA9IHJlcXVpcmUoJ2Jyb3dzZXJpZnktYWVzJylcbnZhciBjb21wYXQgPSByZXF1aXJlKCdwYmtkZjInKVxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZUtleXNcblxuZnVuY3Rpb24gcGFyc2VLZXlzIChidWZmZXIpIHtcbiAgdmFyIHBhc3N3b3JkXG4gIGlmICh0eXBlb2YgYnVmZmVyID09PSAnb2JqZWN0JyAmJiAhQnVmZmVyLmlzQnVmZmVyKGJ1ZmZlcikpIHtcbiAgICBwYXNzd29yZCA9IGJ1ZmZlci5wYXNzcGhyYXNlXG4gICAgYnVmZmVyID0gYnVmZmVyLmtleVxuICB9XG4gIGlmICh0eXBlb2YgYnVmZmVyID09PSAnc3RyaW5nJykge1xuICAgIGJ1ZmZlciA9IG5ldyBCdWZmZXIoYnVmZmVyKVxuICB9XG5cbiAgdmFyIHN0cmlwcGVkID0gZml4UHJvYyhidWZmZXIsIHBhc3N3b3JkKVxuXG4gIHZhciB0eXBlID0gc3RyaXBwZWQudGFnXG4gIHZhciBkYXRhID0gc3RyaXBwZWQuZGF0YVxuICB2YXIgc3VidHlwZSwgbmRhdGFcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnQ0VSVElGSUNBVEUnOlxuICAgICAgbmRhdGEgPSBhc24xLmNlcnRpZmljYXRlLmRlY29kZShkYXRhLCAnZGVyJykudGJzQ2VydGlmaWNhdGUuc3ViamVjdFB1YmxpY0tleUluZm9cbiAgICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgICBjYXNlICdQVUJMSUMgS0VZJzpcbiAgICAgIGlmICghbmRhdGEpIHtcbiAgICAgICAgbmRhdGEgPSBhc24xLlB1YmxpY0tleS5kZWNvZGUoZGF0YSwgJ2RlcicpXG4gICAgICB9XG4gICAgICBzdWJ0eXBlID0gbmRhdGEuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCcuJylcbiAgICAgIHN3aXRjaCAoc3VidHlwZSkge1xuICAgICAgICBjYXNlICcxLjIuODQwLjExMzU0OS4xLjEuMSc6XG4gICAgICAgICAgcmV0dXJuIGFzbjEuUlNBUHVibGljS2V5LmRlY29kZShuZGF0YS5zdWJqZWN0UHVibGljS2V5LmRhdGEsICdkZXInKVxuICAgICAgICBjYXNlICcxLjIuODQwLjEwMDQ1LjIuMSc6XG4gICAgICAgICAgbmRhdGEuc3ViamVjdFByaXZhdGVLZXkgPSBuZGF0YS5zdWJqZWN0UHVibGljS2V5XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdlYycsXG4gICAgICAgICAgICBkYXRhOiBuZGF0YVxuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnMS4yLjg0MC4xMDA0MC40LjEnOlxuICAgICAgICAgIG5kYXRhLmFsZ29yaXRobS5wYXJhbXMucHViX2tleSA9IGFzbjEuRFNBcGFyYW0uZGVjb2RlKG5kYXRhLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwgJ2RlcicpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdkc2EnLFxuICAgICAgICAgICAgZGF0YTogbmRhdGEuYWxnb3JpdGhtLnBhcmFtc1xuICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGtleSBpZCAnICsgc3VidHlwZSlcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBrZXkgdHlwZSAnICsgdHlwZSlcbiAgICBjYXNlICdFTkNSWVBURUQgUFJJVkFURSBLRVknOlxuICAgICAgZGF0YSA9IGFzbjEuRW5jcnlwdGVkUHJpdmF0ZUtleS5kZWNvZGUoZGF0YSwgJ2RlcicpXG4gICAgICBkYXRhID0gZGVjcnlwdChkYXRhLCBwYXNzd29yZClcbiAgICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgICBjYXNlICdQUklWQVRFIEtFWSc6XG4gICAgICBuZGF0YSA9IGFzbjEuUHJpdmF0ZUtleS5kZWNvZGUoZGF0YSwgJ2RlcicpXG4gICAgICBzdWJ0eXBlID0gbmRhdGEuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCcuJylcbiAgICAgIHN3aXRjaCAoc3VidHlwZSkge1xuICAgICAgICBjYXNlICcxLjIuODQwLjExMzU0OS4xLjEuMSc6XG4gICAgICAgICAgcmV0dXJuIGFzbjEuUlNBUHJpdmF0ZUtleS5kZWNvZGUobmRhdGEuc3ViamVjdFByaXZhdGVLZXksICdkZXInKVxuICAgICAgICBjYXNlICcxLjIuODQwLjEwMDQ1LjIuMSc6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1cnZlOiBuZGF0YS5hbGdvcml0aG0uY3VydmUsXG4gICAgICAgICAgICBwcml2YXRlS2V5OiBhc24xLkVDUHJpdmF0ZUtleS5kZWNvZGUobmRhdGEuc3ViamVjdFByaXZhdGVLZXksICdkZXInKS5wcml2YXRlS2V5XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICcxLjIuODQwLjEwMDQwLjQuMSc6XG4gICAgICAgICAgbmRhdGEuYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleSA9IGFzbjEuRFNBcGFyYW0uZGVjb2RlKG5kYXRhLnN1YmplY3RQcml2YXRlS2V5LCAnZGVyJylcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2RzYScsXG4gICAgICAgICAgICBwYXJhbXM6IG5kYXRhLmFsZ29yaXRobS5wYXJhbXNcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcigndW5rbm93biBrZXkgaWQgJyArIHN1YnR5cGUpXG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24ga2V5IHR5cGUgJyArIHR5cGUpXG4gICAgY2FzZSAnUlNBIFBVQkxJQyBLRVknOlxuICAgICAgcmV0dXJuIGFzbjEuUlNBUHVibGljS2V5LmRlY29kZShkYXRhLCAnZGVyJylcbiAgICBjYXNlICdSU0EgUFJJVkFURSBLRVknOlxuICAgICAgcmV0dXJuIGFzbjEuUlNBUHJpdmF0ZUtleS5kZWNvZGUoZGF0YSwgJ2RlcicpXG4gICAgY2FzZSAnRFNBIFBSSVZBVEUgS0VZJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdkc2EnLFxuICAgICAgICBwYXJhbXM6IGFzbjEuRFNBUHJpdmF0ZUtleS5kZWNvZGUoZGF0YSwgJ2RlcicpXG4gICAgICB9XG4gICAgY2FzZSAnRUMgUFJJVkFURSBLRVknOlxuICAgICAgZGF0YSA9IGFzbjEuRUNQcml2YXRlS2V5LmRlY29kZShkYXRhLCAnZGVyJylcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnZlOiBkYXRhLnBhcmFtZXRlcnMudmFsdWUsXG4gICAgICAgIHByaXZhdGVLZXk6IGRhdGEucHJpdmF0ZUtleVxuICAgICAgfVxuICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcigndW5rbm93biBrZXkgdHlwZSAnICsgdHlwZSlcbiAgfVxufVxucGFyc2VLZXlzLnNpZ25hdHVyZSA9IGFzbjEuc2lnbmF0dXJlXG5mdW5jdGlvbiBkZWNyeXB0IChkYXRhLCBwYXNzd29yZCkge1xuICB2YXIgc2FsdCA9IGRhdGEuYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5zYWx0XG4gIHZhciBpdGVycyA9IHBhcnNlSW50KGRhdGEuYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5pdGVycy50b1N0cmluZygpLCAxMClcbiAgdmFyIGFsZ28gPSBhZXNpZFtkYXRhLmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5hbGdvLmpvaW4oJy4nKV1cbiAgdmFyIGl2ID0gZGF0YS5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuaXZcbiAgdmFyIGNpcGhlclRleHQgPSBkYXRhLnN1YmplY3RQcml2YXRlS2V5XG4gIHZhciBrZXlsZW4gPSBwYXJzZUludChhbGdvLnNwbGl0KCctJylbMV0sIDEwKSAvIDhcbiAgdmFyIGtleSA9IGNvbXBhdC5wYmtkZjJTeW5jKHBhc3N3b3JkLCBzYWx0LCBpdGVycywga2V5bGVuKVxuICB2YXIgY2lwaGVyID0gY2lwaGVycy5jcmVhdGVEZWNpcGhlcml2KGFsZ28sIGtleSwgaXYpXG4gIHZhciBvdXQgPSBbXVxuICBvdXQucHVzaChjaXBoZXIudXBkYXRlKGNpcGhlclRleHQpKVxuICBvdXQucHVzaChjaXBoZXIuZmluYWwoKSlcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQob3V0KVxufVxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCJ2YXIgY3JlYXRlSG1hYyA9IHJlcXVpcmUoJ2NyZWF0ZS1obWFjJylcbnZhciBjaGVja1BhcmFtZXRlcnMgPSByZXF1aXJlKCcuL3ByZWNvbmRpdGlvbicpXG5cbmV4cG9ydHMucGJrZGYyID0gZnVuY3Rpb24gKHBhc3N3b3JkLCBzYWx0LCBpdGVyYXRpb25zLCBrZXlsZW4sIGRpZ2VzdCwgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBkaWdlc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IGRpZ2VzdFxuICAgIGRpZ2VzdCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgY2hlY2tQYXJhbWV0ZXJzKGl0ZXJhdGlvbnMsIGtleWxlbilcbiAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVycm9yKCdObyBjYWxsYmFjayBwcm92aWRlZCB0byBwYmtkZjInKVxuXG4gIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIGNhbGxiYWNrKG51bGwsIGV4cG9ydHMucGJrZGYyU3luYyhwYXNzd29yZCwgc2FsdCwgaXRlcmF0aW9ucywga2V5bGVuLCBkaWdlc3QpKVxuICB9KVxufVxuXG52YXIgZGVmYXVsdEVuY29kaW5nXG5pZiAocHJvY2Vzcy5icm93c2VyKSB7XG4gIGRlZmF1bHRFbmNvZGluZyA9ICd1dGYtOCdcbn0gZWxzZSB7XG4gIHZhciBwVmVyc2lvbk1ham9yID0gcGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9uLnNwbGl0KCcuJylbMF0uc2xpY2UoMSksIDEwKVxuXG4gIGRlZmF1bHRFbmNvZGluZyA9IHBWZXJzaW9uTWFqb3IgPj0gNiA/ICd1dGYtOCcgOiAnYmluYXJ5J1xufVxuXG5leHBvcnRzLnBia2RmMlN5bmMgPSBmdW5jdGlvbiAocGFzc3dvcmQsIHNhbHQsIGl0ZXJhdGlvbnMsIGtleWxlbiwgZGlnZXN0KSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHBhc3N3b3JkKSkgcGFzc3dvcmQgPSBuZXcgQnVmZmVyKHBhc3N3b3JkLCBkZWZhdWx0RW5jb2RpbmcpXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHNhbHQpKSBzYWx0ID0gbmV3IEJ1ZmZlcihzYWx0LCBkZWZhdWx0RW5jb2RpbmcpXG5cbiAgY2hlY2tQYXJhbWV0ZXJzKGl0ZXJhdGlvbnMsIGtleWxlbilcblxuICBkaWdlc3QgPSBkaWdlc3QgfHwgJ3NoYTEnXG5cbiAgdmFyIGhMZW5cbiAgdmFyIGwgPSAxXG4gIHZhciBESyA9IG5ldyBCdWZmZXIoa2V5bGVuKVxuICB2YXIgYmxvY2sxID0gbmV3IEJ1ZmZlcihzYWx0Lmxlbmd0aCArIDQpXG4gIHNhbHQuY29weShibG9jazEsIDAsIDAsIHNhbHQubGVuZ3RoKVxuXG4gIHZhciByXG4gIHZhciBUXG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbDsgaSsrKSB7XG4gICAgYmxvY2sxLndyaXRlVUludDMyQkUoaSwgc2FsdC5sZW5ndGgpXG4gICAgdmFyIFUgPSBjcmVhdGVIbWFjKGRpZ2VzdCwgcGFzc3dvcmQpLnVwZGF0ZShibG9jazEpLmRpZ2VzdCgpXG5cbiAgICBpZiAoIWhMZW4pIHtcbiAgICAgIGhMZW4gPSBVLmxlbmd0aFxuICAgICAgVCA9IG5ldyBCdWZmZXIoaExlbilcbiAgICAgIGwgPSBNYXRoLmNlaWwoa2V5bGVuIC8gaExlbilcbiAgICAgIHIgPSBrZXlsZW4gLSAobCAtIDEpICogaExlblxuICAgIH1cblxuICAgIFUuY29weShULCAwLCAwLCBoTGVuKVxuXG4gICAgZm9yICh2YXIgaiA9IDE7IGogPCBpdGVyYXRpb25zOyBqKyspIHtcbiAgICAgIFUgPSBjcmVhdGVIbWFjKGRpZ2VzdCwgcGFzc3dvcmQpLnVwZGF0ZShVKS5kaWdlc3QoKVxuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBoTGVuOyBrKyspIFRba10gXj0gVVtrXVxuICAgIH1cblxuICAgIHZhciBkZXN0UG9zID0gKGkgLSAxKSAqIGhMZW5cbiAgICB2YXIgbGVuID0gKGkgPT09IGwgPyByIDogaExlbilcbiAgICBULmNvcHkoREssIGRlc3RQb3MsIDAsIGxlbilcbiAgfVxuXG4gIHJldHVybiBES1xufVxuIiwidmFyIE1BWF9BTExPQyA9IE1hdGgucG93KDIsIDMwKSAtIDEgLy8gZGVmYXVsdCBpbiBpb2pzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRpb25zLCBrZXlsZW4pIHtcbiAgaWYgKHR5cGVvZiBpdGVyYXRpb25zICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0l0ZXJhdGlvbnMgbm90IGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmIChpdGVyYXRpb25zIDwgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JhZCBpdGVyYXRpb25zJylcbiAgfVxuXG4gIGlmICh0eXBlb2Yga2V5bGVuICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0tleSBsZW5ndGggbm90IGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmIChrZXlsZW4gPCAwIHx8IGtleWxlbiA+IE1BWF9BTExPQyB8fCBrZXlsZW4gIT09IGtleWxlbikgeyAvKiBlc2xpbnQgbm8tc2VsZi1jb21wYXJlOiAwICovXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQmFkIGtleSBsZW5ndGgnKVxuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmICghcHJvY2Vzcy52ZXJzaW9uIHx8XG4gICAgcHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoJ3YwLicpID09PSAwIHx8XG4gICAgcHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoJ3YxLicpID09PSAwICYmIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MS44LicpICE9PSAwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gbmV4dFRpY2s7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHByb2Nlc3MubmV4dFRpY2s7XG59XG5cbmZ1bmN0aW9uIG5leHRUaWNrKGZuLCBhcmcxLCBhcmcyLCBhcmczKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImNhbGxiYWNrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cbiAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBhcmdzLCBpO1xuICBzd2l0Y2ggKGxlbikge1xuICBjYXNlIDA6XG4gIGNhc2UgMTpcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmbik7XG4gIGNhc2UgMjpcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2tPbmUoKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIGFyZzEpO1xuICAgIH0pO1xuICBjYXNlIDM6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrVHdvKCkge1xuICAgICAgZm4uY2FsbChudWxsLCBhcmcxLCBhcmcyKTtcbiAgICB9KTtcbiAgY2FzZSA0OlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGlja1RocmVlKCkge1xuICAgICAgZm4uY2FsbChudWxsLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICB9KTtcbiAgZGVmYXVsdDpcbiAgICBhcmdzID0gbmV3IEFycmF5KGxlbiAtIDEpO1xuICAgIGkgPSAwO1xuICAgIHdoaWxlIChpIDwgYXJncy5sZW5ndGgpIHtcbiAgICAgIGFyZ3NbaSsrXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrKCkge1xuICAgICAgZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCJleHBvcnRzLnB1YmxpY0VuY3J5cHQgPSByZXF1aXJlKCcuL3B1YmxpY0VuY3J5cHQnKTtcbmV4cG9ydHMucHJpdmF0ZURlY3J5cHQgPSByZXF1aXJlKCcuL3ByaXZhdGVEZWNyeXB0Jyk7XG5cbmV4cG9ydHMucHJpdmF0ZUVuY3J5cHQgPSBmdW5jdGlvbiBwcml2YXRlRW5jcnlwdChrZXksIGJ1Zikge1xuICByZXR1cm4gZXhwb3J0cy5wdWJsaWNFbmNyeXB0KGtleSwgYnVmLCB0cnVlKTtcbn07XG5cbmV4cG9ydHMucHVibGljRGVjcnlwdCA9IGZ1bmN0aW9uIHB1YmxpY0RlY3J5cHQoa2V5LCBidWYpIHtcbiAgcmV0dXJuIGV4cG9ydHMucHJpdmF0ZURlY3J5cHQoa2V5LCBidWYsIHRydWUpO1xufTsiLCJ2YXIgY3JlYXRlSGFzaCA9IHJlcXVpcmUoJ2NyZWF0ZS1oYXNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZWVkLCBsZW4pIHtcbiAgdmFyIHQgPSBuZXcgQnVmZmVyKCcnKTtcbiAgdmFyICBpID0gMCwgYztcbiAgd2hpbGUgKHQubGVuZ3RoIDwgbGVuKSB7XG4gICAgYyA9IGkyb3BzKGkrKyk7XG4gICAgdCA9IEJ1ZmZlci5jb25jYXQoW3QsIGNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoc2VlZCkudXBkYXRlKGMpLmRpZ2VzdCgpXSk7XG4gIH1cbiAgcmV0dXJuIHQuc2xpY2UoMCwgbGVuKTtcbn07XG5cbmZ1bmN0aW9uIGkyb3BzKGMpIHtcbiAgdmFyIG91dCA9IG5ldyBCdWZmZXIoNCk7XG4gIG91dC53cml0ZVVJbnQzMkJFKGMsMCk7XG4gIHJldHVybiBvdXQ7XG59IiwidmFyIHBhcnNlS2V5cyA9IHJlcXVpcmUoJ3BhcnNlLWFzbjEnKTtcbnZhciBtZ2YgPSByZXF1aXJlKCcuL21nZicpO1xudmFyIHhvciA9IHJlcXVpcmUoJy4veG9yJyk7XG52YXIgYm4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIGNydCA9IHJlcXVpcmUoJ2Jyb3dzZXJpZnktcnNhJyk7XG52YXIgY3JlYXRlSGFzaCA9IHJlcXVpcmUoJ2NyZWF0ZS1oYXNoJyk7XG52YXIgd2l0aFB1YmxpYyA9IHJlcXVpcmUoJy4vd2l0aFB1YmxpYycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwcml2YXRlRGVjcnlwdChwcml2YXRlX2tleSwgZW5jLCByZXZlcnNlKSB7XG4gIHZhciBwYWRkaW5nO1xuICBpZiAocHJpdmF0ZV9rZXkucGFkZGluZykge1xuICAgIHBhZGRpbmcgPSBwcml2YXRlX2tleS5wYWRkaW5nO1xuICB9IGVsc2UgaWYgKHJldmVyc2UpIHtcbiAgICBwYWRkaW5nID0gMTtcbiAgfSBlbHNlIHtcbiAgICBwYWRkaW5nID0gNDtcbiAgfVxuICBcbiAgdmFyIGtleSA9IHBhcnNlS2V5cyhwcml2YXRlX2tleSk7XG4gIHZhciBrID0ga2V5Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO1xuICBpZiAoZW5jLmxlbmd0aCA+IGsgfHwgbmV3IGJuKGVuYykuY21wKGtleS5tb2R1bHVzKSA+PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkZWNyeXB0aW9uIGVycm9yJyk7XG4gIH1cbiAgdmFyIG1zZztcbiAgaWYgKHJldmVyc2UpIHtcbiAgICBtc2cgPSB3aXRoUHVibGljKG5ldyBibihlbmMpLCBrZXkpO1xuICB9IGVsc2Uge1xuICAgIG1zZyA9IGNydChlbmMsIGtleSk7XG4gIH1cbiAgdmFyIHpCdWZmZXIgPSBuZXcgQnVmZmVyKGsgLSBtc2cubGVuZ3RoKTtcbiAgekJ1ZmZlci5maWxsKDApO1xuICBtc2cgPSBCdWZmZXIuY29uY2F0KFt6QnVmZmVyLCBtc2ddLCBrKTtcbiAgaWYgKHBhZGRpbmcgPT09IDQpIHtcbiAgICByZXR1cm4gb2FlcChrZXksIG1zZyk7XG4gIH0gZWxzZSBpZiAocGFkZGluZyA9PT0gMSkge1xuICAgIHJldHVybiBwa2NzMShrZXksIG1zZywgcmV2ZXJzZSk7XG4gIH0gZWxzZSBpZiAocGFkZGluZyA9PT0gMykge1xuICAgIHJldHVybiBtc2c7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHBhZGRpbmcnKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gb2FlcChrZXksIG1zZyl7XG4gIHZhciBuID0ga2V5Lm1vZHVsdXM7XG4gIHZhciBrID0ga2V5Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO1xuICB2YXIgbUxlbiA9IG1zZy5sZW5ndGg7XG4gIHZhciBpSGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUobmV3IEJ1ZmZlcignJykpLmRpZ2VzdCgpO1xuICB2YXIgaExlbiA9IGlIYXNoLmxlbmd0aDtcbiAgdmFyIGhMZW4yID0gMiAqIGhMZW47XG4gIGlmIChtc2dbMF0gIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZXJyb3InKTtcbiAgfVxuICB2YXIgbWFza2VkU2VlZCA9IG1zZy5zbGljZSgxLCBoTGVuICsgMSk7XG4gIHZhciBtYXNrZWREYiA9ICBtc2cuc2xpY2UoaExlbiArIDEpO1xuICB2YXIgc2VlZCA9IHhvcihtYXNrZWRTZWVkLCBtZ2YobWFza2VkRGIsIGhMZW4pKTtcbiAgdmFyIGRiID0geG9yKG1hc2tlZERiLCBtZ2Yoc2VlZCwgayAtIGhMZW4gLSAxKSk7XG4gIGlmIChjb21wYXJlKGlIYXNoLCBkYi5zbGljZSgwLCBoTGVuKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZXJyb3InKTtcbiAgfVxuICB2YXIgaSA9IGhMZW47XG4gIHdoaWxlIChkYltpXSA9PT0gMCkge1xuICAgIGkrKztcbiAgfVxuICBpZiAoZGJbaSsrXSAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZGVjcnlwdGlvbiBlcnJvcicpO1xuICB9XG4gIHJldHVybiBkYi5zbGljZShpKTtcbn1cblxuZnVuY3Rpb24gcGtjczEoa2V5LCBtc2csIHJldmVyc2Upe1xuICB2YXIgcDEgPSBtc2cuc2xpY2UoMCwgMik7XG4gIHZhciBpID0gMjtcbiAgdmFyIHN0YXR1cyA9IDA7XG4gIHdoaWxlIChtc2dbaSsrXSAhPT0gMCkge1xuICAgIGlmIChpID49IG1zZy5sZW5ndGgpIHtcbiAgICAgIHN0YXR1cysrO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHZhciBwcyA9IG1zZy5zbGljZSgyLCBpIC0gMSk7XG4gIHZhciBwMiA9IG1zZy5zbGljZShpIC0gMSwgaSk7XG5cbiAgaWYgKChwMS50b1N0cmluZygnaGV4JykgIT09ICcwMDAyJyAmJiAhcmV2ZXJzZSkgfHwgKHAxLnRvU3RyaW5nKCdoZXgnKSAhPT0gJzAwMDEnICYmIHJldmVyc2UpKXtcbiAgICBzdGF0dXMrKztcbiAgfVxuICBpZiAocHMubGVuZ3RoIDwgOCkge1xuICAgIHN0YXR1cysrO1xuICB9XG4gIGlmIChzdGF0dXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZXJyb3InKTtcbiAgfVxuICByZXR1cm4gIG1zZy5zbGljZShpKTtcbn1cbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYil7XG4gIGEgPSBuZXcgQnVmZmVyKGEpO1xuICBiID0gbmV3IEJ1ZmZlcihiKTtcbiAgdmFyIGRpZiA9IDA7XG4gIHZhciBsZW4gPSBhLmxlbmd0aDtcbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgIGRpZisrO1xuICAgIGxlbiA9IE1hdGgubWluKGEubGVuZ3RoLCBiLmxlbmd0aCk7XG4gIH1cbiAgdmFyIGkgPSAtMTtcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIGRpZiArPSAoYVtpXSBeIGJbaV0pO1xuICB9XG4gIHJldHVybiBkaWY7XG59IiwidmFyIHBhcnNlS2V5cyA9IHJlcXVpcmUoJ3BhcnNlLWFzbjEnKTtcbnZhciByYW5kb21CeXRlcyA9IHJlcXVpcmUoJ3JhbmRvbWJ5dGVzJyk7XG52YXIgY3JlYXRlSGFzaCA9IHJlcXVpcmUoJ2NyZWF0ZS1oYXNoJyk7XG52YXIgbWdmID0gcmVxdWlyZSgnLi9tZ2YnKTtcbnZhciB4b3IgPSByZXF1aXJlKCcuL3hvcicpO1xudmFyIGJuID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciB3aXRoUHVibGljID0gcmVxdWlyZSgnLi93aXRoUHVibGljJyk7XG52YXIgY3J0ID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1yc2EnKTtcblxudmFyIGNvbnN0YW50cyA9IHtcbiAgUlNBX1BLQ1MxX09BRVBfUEFERElORzogNCxcbiAgUlNBX1BLQ1MxX1BBRERJTjogMSxcbiAgUlNBX05PX1BBRERJTkc6IDNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcHVibGljRW5jcnlwdChwdWJsaWNfa2V5LCBtc2csIHJldmVyc2UpIHtcbiAgdmFyIHBhZGRpbmc7XG4gIGlmIChwdWJsaWNfa2V5LnBhZGRpbmcpIHtcbiAgICBwYWRkaW5nID0gcHVibGljX2tleS5wYWRkaW5nO1xuICB9IGVsc2UgaWYgKHJldmVyc2UpIHtcbiAgICBwYWRkaW5nID0gMTtcbiAgfSBlbHNlIHtcbiAgICBwYWRkaW5nID0gNDtcbiAgfVxuICB2YXIga2V5ID0gcGFyc2VLZXlzKHB1YmxpY19rZXkpO1xuICB2YXIgcGFkZGVkTXNnO1xuICBpZiAocGFkZGluZyA9PT0gNCkge1xuICAgIHBhZGRlZE1zZyA9IG9hZXAoa2V5LCBtc2cpO1xuICB9IGVsc2UgaWYgKHBhZGRpbmcgPT09IDEpIHtcbiAgICBwYWRkZWRNc2cgPSBwa2NzMShrZXksIG1zZywgcmV2ZXJzZSk7XG4gIH0gZWxzZSBpZiAocGFkZGluZyA9PT0gMykge1xuICAgIHBhZGRlZE1zZyA9IG5ldyBibihtc2cpO1xuICAgIGlmIChwYWRkZWRNc2cuY21wKGtleS5tb2R1bHVzKSA+PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHBhZGRpbmcnKTtcbiAgfVxuICBpZiAocmV2ZXJzZSkge1xuICAgIHJldHVybiBjcnQocGFkZGVkTXNnLCBrZXkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB3aXRoUHVibGljKHBhZGRlZE1zZywga2V5KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gb2FlcChrZXksIG1zZyl7XG4gIHZhciBrID0ga2V5Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO1xuICB2YXIgbUxlbiA9IG1zZy5sZW5ndGg7XG4gIHZhciBpSGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUobmV3IEJ1ZmZlcignJykpLmRpZ2VzdCgpO1xuICB2YXIgaExlbiA9IGlIYXNoLmxlbmd0aDtcbiAgdmFyIGhMZW4yID0gMiAqIGhMZW47XG4gIGlmIChtTGVuID4gayAtIGhMZW4yIC0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignbWVzc2FnZSB0b28gbG9uZycpO1xuICB9XG4gIHZhciBwcyA9IG5ldyBCdWZmZXIoayAtIG1MZW4gLSBoTGVuMiAtIDIpO1xuICBwcy5maWxsKDApO1xuICB2YXIgZGJsZW4gPSBrIC0gaExlbiAtIDE7XG4gIHZhciBzZWVkID0gcmFuZG9tQnl0ZXMoaExlbik7XG4gIHZhciBtYXNrZWREYiA9IHhvcihCdWZmZXIuY29uY2F0KFtpSGFzaCwgcHMsIG5ldyBCdWZmZXIoWzFdKSwgbXNnXSwgZGJsZW4pLCBtZ2Yoc2VlZCwgZGJsZW4pKTtcbiAgdmFyIG1hc2tlZFNlZWQgPSB4b3Ioc2VlZCwgbWdmKG1hc2tlZERiLCBoTGVuKSk7XG4gIHJldHVybiBuZXcgYm4oQnVmZmVyLmNvbmNhdChbbmV3IEJ1ZmZlcihbMF0pLCBtYXNrZWRTZWVkLCBtYXNrZWREYl0sIGspKTtcbn1cbmZ1bmN0aW9uIHBrY3MxKGtleSwgbXNnLCByZXZlcnNlKXtcbiAgdmFyIG1MZW4gPSBtc2cubGVuZ3RoO1xuICB2YXIgayA9IGtleS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtcbiAgaWYgKG1MZW4gPiBrIC0gMTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21lc3NhZ2UgdG9vIGxvbmcnKTtcbiAgfVxuICB2YXIgcHM7XG4gIGlmIChyZXZlcnNlKSB7XG4gICAgcHMgPSBuZXcgQnVmZmVyKGsgLSBtTGVuIC0gMyk7XG4gICAgcHMuZmlsbCgweGZmKTtcbiAgfSBlbHNlIHtcbiAgICBwcyA9IG5vblplcm8oayAtIG1MZW4gLSAzKTtcbiAgfVxuICByZXR1cm4gbmV3IGJuKEJ1ZmZlci5jb25jYXQoW25ldyBCdWZmZXIoWzAsIHJldmVyc2U/MToyXSksIHBzLCBuZXcgQnVmZmVyKFswXSksIG1zZ10sIGspKTtcbn1cbmZ1bmN0aW9uIG5vblplcm8obGVuLCBjcnlwdG8pIHtcbiAgdmFyIG91dCA9IG5ldyBCdWZmZXIobGVuKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgY2FjaGUgPSByYW5kb21CeXRlcyhsZW4qMik7XG4gIHZhciBjdXIgPSAwO1xuICB2YXIgbnVtO1xuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIGlmIChjdXIgPT09IGNhY2hlLmxlbmd0aCkge1xuICAgICAgY2FjaGUgPSByYW5kb21CeXRlcyhsZW4qMik7XG4gICAgICBjdXIgPSAwO1xuICAgIH1cbiAgICBudW0gPSBjYWNoZVtjdXIrK107XG4gICAgaWYgKG51bSkge1xuICAgICAgb3V0W2krK10gPSBudW07XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59IiwidmFyIGJuID0gcmVxdWlyZSgnYm4uanMnKTtcbmZ1bmN0aW9uIHdpdGhQdWJsaWMocGFkZGVkTXNnLCBrZXkpIHtcbiAgcmV0dXJuIG5ldyBCdWZmZXIocGFkZGVkTXNnXG4gICAgLnRvUmVkKGJuLm1vbnQoa2V5Lm1vZHVsdXMpKVxuICAgIC5yZWRQb3cobmV3IGJuKGtleS5wdWJsaWNFeHBvbmVudCkpXG4gICAgLmZyb21SZWQoKVxuICAgIC50b0FycmF5KCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdpdGhQdWJsaWM7IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4b3IoYSwgYikge1xuICB2YXIgbGVuID0gYS5sZW5ndGg7XG4gIHZhciBpID0gLTE7XG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBhW2ldIF49IGJbaV07XG4gIH1cbiAgcmV0dXJuIGFcbn07IiwiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIG9sZEJyb3dzZXIgKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3NlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXJcXG51c2UgY2hyb21lLCBGaXJlRm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExJylcbn1cblxudmFyIGNyeXB0byA9IGdsb2JhbC5jcnlwdG8gfHwgZ2xvYmFsLm1zQ3J5cHRvXG5cbmlmIChjcnlwdG8gJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJhbmRvbUJ5dGVzXG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IG9sZEJyb3dzZXJcbn1cblxuZnVuY3Rpb24gcmFuZG9tQnl0ZXMgKHNpemUsIGNiKSB7XG4gIC8vIHBoYW50b21qcyBuZWVkcyB0byB0aHJvd1xuICBpZiAoc2l6ZSA+IDY1NTM2KSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMnKVxuICAvLyBpbiBjYXNlIGJyb3dzZXJpZnkgIGlzbid0IHVzaW5nIHRoZSBVaW50OEFycmF5IHZlcnNpb25cbiAgdmFyIHJhd0J5dGVzID0gbmV3IGdsb2JhbC5VaW50OEFycmF5KHNpemUpXG5cbiAgLy8gVGhpcyB3aWxsIG5vdCB3b3JrIGluIG9sZGVyIGJyb3dzZXJzLlxuICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL3dpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzXG4gIGlmIChzaXplID4gMCkgeyAgLy8gZ2V0UmFuZG9tVmFsdWVzIGZhaWxzIG9uIElFIGlmIHNpemUgPT0gMFxuICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMocmF3Qnl0ZXMpXG4gIH1cbiAgLy8gcGhhbnRvbWpzIGRvZXNuJ3QgbGlrZSBhIGJ1ZmZlciBiZWluZyBwYXNzZWQgaGVyZVxuICB2YXIgYnl0ZXMgPSBuZXcgQnVmZmVyKHJhd0J5dGVzLmJ1ZmZlcilcblxuICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgY2IobnVsbCwgYnl0ZXMpXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9saWIvX3N0cmVhbV9kdXBsZXguanNcIilcbiIsIi8vIGEgZHVwbGV4IHN0cmVhbSBpcyBqdXN0IGEgc3RyZWFtIHRoYXQgaXMgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUuXG4vLyBTaW5jZSBKUyBkb2Vzbid0IGhhdmUgbXVsdGlwbGUgcHJvdG90eXBhbCBpbmhlcml0YW5jZSwgdGhpcyBjbGFzc1xuLy8gcHJvdG90eXBhbGx5IGluaGVyaXRzIGZyb20gUmVhZGFibGUsIGFuZCB0aGVuIHBhcmFzaXRpY2FsbHkgZnJvbVxuLy8gV3JpdGFibGUuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBrZXlzLnB1c2goa2V5KTtcbiAgfXJldHVybiBrZXlzO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IER1cGxleDtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBwcm9jZXNzTmV4dFRpY2sgPSByZXF1aXJlKCdwcm9jZXNzLW5leHRpY2stYXJncycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIFJlYWRhYmxlID0gcmVxdWlyZSgnLi9fc3RyZWFtX3JlYWRhYmxlJyk7XG52YXIgV3JpdGFibGUgPSByZXF1aXJlKCcuL19zdHJlYW1fd3JpdGFibGUnKTtcblxudXRpbC5pbmhlcml0cyhEdXBsZXgsIFJlYWRhYmxlKTtcblxudmFyIGtleXMgPSBvYmplY3RLZXlzKFdyaXRhYmxlLnByb3RvdHlwZSk7XG5mb3IgKHZhciB2ID0gMDsgdiA8IGtleXMubGVuZ3RoOyB2KyspIHtcbiAgdmFyIG1ldGhvZCA9IGtleXNbdl07XG4gIGlmICghRHVwbGV4LnByb3RvdHlwZVttZXRob2RdKSBEdXBsZXgucHJvdG90eXBlW21ldGhvZF0gPSBXcml0YWJsZS5wcm90b3R5cGVbbWV0aG9kXTtcbn1cblxuZnVuY3Rpb24gRHVwbGV4KG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpIHJldHVybiBuZXcgRHVwbGV4KG9wdGlvbnMpO1xuXG4gIFJlYWRhYmxlLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gIFdyaXRhYmxlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZWFkYWJsZSA9PT0gZmFsc2UpIHRoaXMucmVhZGFibGUgPSBmYWxzZTtcblxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLndyaXRhYmxlID09PSBmYWxzZSkgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuXG4gIHRoaXMuYWxsb3dIYWxmT3BlbiA9IHRydWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuYWxsb3dIYWxmT3BlbiA9PT0gZmFsc2UpIHRoaXMuYWxsb3dIYWxmT3BlbiA9IGZhbHNlO1xuXG4gIHRoaXMub25jZSgnZW5kJywgb25lbmQpO1xufVxuXG4vLyB0aGUgbm8taGFsZi1vcGVuIGVuZm9yY2VyXG5mdW5jdGlvbiBvbmVuZCgpIHtcbiAgLy8gaWYgd2UgYWxsb3cgaGFsZi1vcGVuIHN0YXRlLCBvciBpZiB0aGUgd3JpdGFibGUgc2lkZSBlbmRlZCxcbiAgLy8gdGhlbiB3ZSdyZSBvay5cbiAgaWYgKHRoaXMuYWxsb3dIYWxmT3BlbiB8fCB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkKSByZXR1cm47XG5cbiAgLy8gbm8gbW9yZSBkYXRhIGNhbiBiZSB3cml0dGVuLlxuICAvLyBCdXQgYWxsb3cgbW9yZSB3cml0ZXMgdG8gaGFwcGVuIGluIHRoaXMgdGljay5cbiAgcHJvY2Vzc05leHRUaWNrKG9uRW5kTlQsIHRoaXMpO1xufVxuXG5mdW5jdGlvbiBvbkVuZE5UKHNlbGYpIHtcbiAgc2VsZi5lbmQoKTtcbn1cblxuZnVuY3Rpb24gZm9yRWFjaCh4cywgZikge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGYoeHNbaV0sIGkpO1xuICB9XG59IiwiLy8gYSBwYXNzdGhyb3VnaCBzdHJlYW0uXG4vLyBiYXNpY2FsbHkganVzdCB0aGUgbW9zdCBtaW5pbWFsIHNvcnQgb2YgVHJhbnNmb3JtIHN0cmVhbS5cbi8vIEV2ZXJ5IHdyaXR0ZW4gY2h1bmsgZ2V0cyBvdXRwdXQgYXMtaXMuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBQYXNzVGhyb3VnaDtcblxudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vX3N0cmVhbV90cmFuc2Zvcm0nKTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG51dGlsLmluaGVyaXRzKFBhc3NUaHJvdWdoLCBUcmFuc2Zvcm0pO1xuXG5mdW5jdGlvbiBQYXNzVGhyb3VnaChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXNzVGhyb3VnaCkpIHJldHVybiBuZXcgUGFzc1Rocm91Z2gob3B0aW9ucyk7XG5cbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG59XG5cblBhc3NUaHJvdWdoLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgY2IobnVsbCwgY2h1bmspO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhZGFibGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgcHJvY2Vzc05leHRUaWNrID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5Jyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBEdXBsZXg7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuUmVhZGFibGUuUmVhZGFibGVTdGF0ZSA9IFJlYWRhYmxlU3RhdGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRUUgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG5cbnZhciBFRWxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiAoZW1pdHRlciwgdHlwZSkge1xuICByZXR1cm4gZW1pdHRlci5saXN0ZW5lcnModHlwZSkubGVuZ3RoO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbTtcbihmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgU3RyZWFtID0gcmVxdWlyZSgnc3QnICsgJ3JlYW0nKTtcbiAgfSBjYXRjaCAoXykge30gZmluYWxseSB7XG4gICAgaWYgKCFTdHJlYW0pIFN0cmVhbSA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbiAgfVxufSkoKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBidWZmZXJTaGltID0gcmVxdWlyZSgnYnVmZmVyLXNoaW1zJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGRlYnVnVXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBkZWJ1ZyA9IHZvaWQgMDtcbmlmIChkZWJ1Z1V0aWwgJiYgZGVidWdVdGlsLmRlYnVnbG9nKSB7XG4gIGRlYnVnID0gZGVidWdVdGlsLmRlYnVnbG9nKCdzdHJlYW0nKTtcbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24gKCkge307XG59XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlckxpc3QgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdCcpO1xudmFyIFN0cmluZ0RlY29kZXI7XG5cbnV0aWwuaW5oZXJpdHMoUmVhZGFibGUsIFN0cmVhbSk7XG5cbmZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4pIHtcbiAgLy8gU2FkbHkgdGhpcyBpcyBub3QgY2FjaGVhYmxlIGFzIHNvbWUgbGlicmFyaWVzIGJ1bmRsZSB0aGVpciBvd25cbiAgLy8gZXZlbnQgZW1pdHRlciBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZW0uXG4gIGlmICh0eXBlb2YgZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIoZXZlbnQsIGZuKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtlIHN1cmUgdGhhdCBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgYW55XG4gICAgLy8gdXNlcmxhbmQgb25lcy4gIE5FVkVSIERPIFRISVMuIFRoaXMgaXMgaGVyZSBvbmx5IGJlY2F1c2UgdGhpcyBjb2RlIG5lZWRzXG4gICAgLy8gdG8gY29udGludWUgdG8gd29yayB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIE5vZGUuanMgdGhhdCBkbyBub3QgaW5jbHVkZVxuICAgIC8vIHRoZSBwcmVwZW5kTGlzdGVuZXIoKSBtZXRob2QuIFRoZSBnb2FsIGlzIHRvIGV2ZW50dWFsbHkgcmVtb3ZlIHRoaXMgaGFjay5cbiAgICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkgZW1pdHRlci5vbihldmVudCwgZm4pO2Vsc2UgaWYgKGlzQXJyYXkoZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkpIGVtaXR0ZXIuX2V2ZW50c1tldmVudF0udW5zaGlmdChmbik7ZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdID0gW2ZuLCBlbWl0dGVyLl9ldmVudHNbZXZlbnRdXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSkge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIC8vIG9iamVjdCBzdHJlYW0gZmxhZy4gVXNlZCB0byBtYWtlIHJlYWQobikgaWdub3JlIG4gYW5kIHRvXG4gIC8vIG1ha2UgYWxsIHRoZSBidWZmZXIgbWVyZ2luZyBhbmQgbGVuZ3RoIGNoZWNrcyBnbyBhd2F5XG4gIHRoaXMub2JqZWN0TW9kZSA9ICEhb3B0aW9ucy5vYmplY3RNb2RlO1xuXG4gIGlmIChzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXgpIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIW9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlO1xuXG4gIC8vIHRoZSBwb2ludCBhdCB3aGljaCBpdCBzdG9wcyBjYWxsaW5nIF9yZWFkKCkgdG8gZmlsbCB0aGUgYnVmZmVyXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgXCJkb24ndCBjYWxsIF9yZWFkIHByZWVtcHRpdmVseSBldmVyXCJcbiAgdmFyIGh3bSA9IG9wdGlvbnMuaGlnaFdhdGVyTWFyaztcbiAgdmFyIGRlZmF1bHRId20gPSB0aGlzLm9iamVjdE1vZGUgPyAxNiA6IDE2ICogMTAyNDtcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaHdtIHx8IGh3bSA9PT0gMCA/IGh3bSA6IGRlZmF1bHRId207XG5cbiAgLy8gY2FzdCB0byBpbnRzLlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSB+fnRoaXMuaGlnaFdhdGVyTWFyaztcblxuICAvLyBBIGxpbmtlZCBsaXN0IGlzIHVzZWQgdG8gc3RvcmUgZGF0YSBjaHVua3MgaW5zdGVhZCBvZiBhbiBhcnJheSBiZWNhdXNlIHRoZVxuICAvLyBsaW5rZWQgbGlzdCBjYW4gcmVtb3ZlIGVsZW1lbnRzIGZyb20gdGhlIGJlZ2lubmluZyBmYXN0ZXIgdGhhblxuICAvLyBhcnJheS5zaGlmdCgpXG4gIHRoaXMuYnVmZmVyID0gbmV3IEJ1ZmZlckxpc3QoKTtcbiAgdGhpcy5sZW5ndGggPSAwO1xuICB0aGlzLnBpcGVzID0gbnVsbDtcbiAgdGhpcy5waXBlc0NvdW50ID0gMDtcbiAgdGhpcy5mbG93aW5nID0gbnVsbDtcbiAgdGhpcy5lbmRlZCA9IGZhbHNlO1xuICB0aGlzLmVuZEVtaXR0ZWQgPSBmYWxzZTtcbiAgdGhpcy5yZWFkaW5nID0gZmFsc2U7XG5cbiAgLy8gYSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgb253cml0ZSBjYiBpcyBjYWxsZWQgaW1tZWRpYXRlbHksXG4gIC8vIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2UgYW55XG4gIC8vIGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gd2hlbmV2ZXIgd2UgcmV0dXJuIG51bGwsIHRoZW4gd2Ugc2V0IGEgZmxhZyB0byBzYXlcbiAgLy8gdGhhdCB3ZSdyZSBhd2FpdGluZyBhICdyZWFkYWJsZScgZXZlbnQgZW1pc3Npb24uXG4gIHRoaXMubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMucmVhZGFibGVMaXN0ZW5pbmcgPSBmYWxzZTtcbiAgdGhpcy5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyB3aGVuIHBpcGluZywgd2Ugb25seSBjYXJlIGFib3V0ICdyZWFkYWJsZScgZXZlbnRzIHRoYXQgaGFwcGVuXG4gIC8vIGFmdGVyIHJlYWQoKWluZyBhbGwgdGhlIGJ5dGVzIGFuZCBub3QgZ2V0dGluZyBhbnkgcHVzaGJhY2suXG4gIHRoaXMucmFuT3V0ID0gZmFsc2U7XG5cbiAgLy8gdGhlIG51bWJlciBvZiB3cml0ZXJzIHRoYXQgYXJlIGF3YWl0aW5nIGEgZHJhaW4gZXZlbnQgaW4gLnBpcGUoKXNcbiAgdGhpcy5hd2FpdERyYWluID0gMDtcblxuICAvLyBpZiB0cnVlLCBhIG1heWJlUmVhZE1vcmUgaGFzIGJlZW4gc2NoZWR1bGVkXG4gIHRoaXMucmVhZGluZ01vcmUgPSBmYWxzZTtcblxuICB0aGlzLmRlY29kZXIgPSBudWxsO1xuICB0aGlzLmVuY29kaW5nID0gbnVsbDtcbiAgaWYgKG9wdGlvbnMuZW5jb2RpbmcpIHtcbiAgICBpZiAoIVN0cmluZ0RlY29kZXIpIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICAgIHRoaXMuZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKG9wdGlvbnMuZW5jb2RpbmcpO1xuICAgIHRoaXMuZW5jb2RpbmcgPSBvcHRpb25zLmVuY29kaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIFJlYWRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZGFibGUpKSByZXR1cm4gbmV3IFJlYWRhYmxlKG9wdGlvbnMpO1xuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUgPSBuZXcgUmVhZGFibGVTdGF0ZShvcHRpb25zLCB0aGlzKTtcblxuICAvLyBsZWdhY3lcbiAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG5cbiAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMucmVhZCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fcmVhZCA9IG9wdGlvbnMucmVhZDtcblxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuLy8gTWFudWFsbHkgc2hvdmUgc29tZXRoaW5nIGludG8gdGhlIHJlYWQoKSBidWZmZXIuXG4vLyBUaGlzIHJldHVybnMgdHJ1ZSBpZiB0aGUgaGlnaFdhdGVyTWFyayBoYXMgbm90IGJlZW4gaGl0IHlldCxcbi8vIHNpbWlsYXIgdG8gaG93IFdyaXRhYmxlLndyaXRlKCkgcmV0dXJucyB0cnVlIGlmIHlvdSBzaG91bGRcbi8vIHdyaXRlKCkgc29tZSBtb3JlLlxuUmVhZGFibGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmIHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGVuY29kaW5nIHx8IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcbiAgICBpZiAoZW5jb2RpbmcgIT09IHN0YXRlLmVuY29kaW5nKSB7XG4gICAgICBjaHVuayA9IGJ1ZmZlclNoaW0uZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgZW5jb2RpbmcgPSAnJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBzdGF0ZSwgY2h1bmssIGVuY29kaW5nLCBmYWxzZSk7XG59O1xuXG4vLyBVbnNoaWZ0IHNob3VsZCAqYWx3YXlzKiBiZSBzb21ldGhpbmcgZGlyZWN0bHkgb3V0IG9mIHJlYWQoKVxuUmVhZGFibGUucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgc3RhdGUsIGNodW5rLCAnJywgdHJ1ZSk7XG59O1xuXG5SZWFkYWJsZS5wcm90b3R5cGUuaXNQYXVzZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPT09IGZhbHNlO1xufTtcblxuZnVuY3Rpb24gcmVhZGFibGVBZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQpIHtcbiAgdmFyIGVyID0gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuayk7XG4gIGlmIChlcikge1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgfSBlbHNlIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpO1xuICB9IGVsc2UgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsgJiYgY2h1bmsubGVuZ3RoID4gMCkge1xuICAgIGlmIChzdGF0ZS5lbmRlZCAmJiAhYWRkVG9Gcm9udCkge1xuICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoJ3N0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GJyk7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZEVtaXR0ZWQgJiYgYWRkVG9Gcm9udCkge1xuICAgICAgdmFyIF9lID0gbmV3IEVycm9yKCdzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCcpO1xuICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgX2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc2tpcEFkZDtcbiAgICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFhZGRUb0Zyb250ICYmICFlbmNvZGluZykge1xuICAgICAgICBjaHVuayA9IHN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspO1xuICAgICAgICBza2lwQWRkID0gIXN0YXRlLm9iamVjdE1vZGUgJiYgY2h1bmsubGVuZ3RoID09PSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWFkZFRvRnJvbnQpIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcblxuICAgICAgLy8gRG9uJ3QgYWRkIHRvIHRoZSBidWZmZXIgaWYgd2UndmUgZGVjb2RlZCB0byBhbiBlbXB0eSBzdHJpbmcgY2h1bmsgYW5kXG4gICAgICAvLyB3ZSdyZSBub3QgaW4gb2JqZWN0IG1vZGVcbiAgICAgIGlmICghc2tpcEFkZCkge1xuICAgICAgICAvLyBpZiB3ZSB3YW50IHRoZSBkYXRhIG5vdywganVzdCBlbWl0IGl0LlxuICAgICAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgIXN0YXRlLnN5bmMpIHtcbiAgICAgICAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICAgICAgICBzdHJlYW0ucmVhZCgwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB1cGRhdGUgdGhlIGJ1ZmZlciBpbmZvLlxuICAgICAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICBpZiAoYWRkVG9Gcm9udCkgc3RhdGUuYnVmZmVyLnVuc2hpZnQoY2h1bmspO2Vsc2Ugc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLm5lZWRSZWFkYWJsZSkgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIWFkZFRvRnJvbnQpIHtcbiAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gbmVlZE1vcmVEYXRhKHN0YXRlKTtcbn1cblxuLy8gaWYgaXQncyBwYXN0IHRoZSBoaWdoIHdhdGVyIG1hcmssIHdlIGNhbiBwdXNoIGluIHNvbWUgbW9yZS5cbi8vIEFsc28sIGlmIHdlIGhhdmUgbm8gZGF0YSB5ZXQsIHdlIGNhbiBzdGFuZCBzb21lXG4vLyBtb3JlIGJ5dGVzLiAgVGhpcyBpcyB0byB3b3JrIGFyb3VuZCBjYXNlcyB3aGVyZSBod209MCxcbi8vIHN1Y2ggYXMgdGhlIHJlcGwuICBBbHNvLCBpZiB0aGUgcHVzaCgpIHRyaWdnZXJlZCBhXG4vLyByZWFkYWJsZSBldmVudCwgYW5kIHRoZSB1c2VyIGNhbGxlZCByZWFkKGxhcmdlTnVtYmVyKSBzdWNoIHRoYXRcbi8vIG5lZWRSZWFkYWJsZSB3YXMgc2V0LCB0aGVuIHdlIG91Z2h0IHRvIHB1c2ggbW9yZSwgc28gdGhhdCBhbm90aGVyXG4vLyAncmVhZGFibGUnIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkLlxuZnVuY3Rpb24gbmVlZE1vcmVEYXRhKHN0YXRlKSB7XG4gIHJldHVybiAhc3RhdGUuZW5kZWQgJiYgKHN0YXRlLm5lZWRSZWFkYWJsZSB8fCBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmxlbmd0aCA9PT0gMCk7XG59XG5cbi8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24gKGVuYykge1xuICBpZiAoIVN0cmluZ0RlY29kZXIpIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nID0gZW5jO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIERvbid0IHJhaXNlIHRoZSBod20gPiA4TUJcbnZhciBNQVhfSFdNID0gMHg4MDAwMDA7XG5mdW5jdGlvbiBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKSB7XG4gIGlmIChuID49IE1BWF9IV00pIHtcbiAgICBuID0gTUFYX0hXTTtcbiAgfSBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIG5leHQgaGlnaGVzdCBwb3dlciBvZiAyIHRvIHByZXZlbnQgaW5jcmVhc2luZyBod20gZXhjZXNzaXZlbHkgaW5cbiAgICAvLyB0aW55IGFtb3VudHNcbiAgICBuLS07XG4gICAgbiB8PSBuID4+PiAxO1xuICAgIG4gfD0gbiA+Pj4gMjtcbiAgICBuIHw9IG4gPj4+IDQ7XG4gICAgbiB8PSBuID4+PiA4O1xuICAgIG4gfD0gbiA+Pj4gMTY7XG4gICAgbisrO1xuICB9XG4gIHJldHVybiBuO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGhvd011Y2hUb1JlYWQobiwgc3RhdGUpIHtcbiAgaWYgKG4gPD0gMCB8fCBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIHJldHVybiAwO1xuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0dXJuIDE7XG4gIGlmIChuICE9PSBuKSB7XG4gICAgLy8gT25seSBmbG93IG9uZSBidWZmZXIgYXQgYSB0aW1lXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoKSByZXR1cm4gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg7ZWxzZSByZXR1cm4gc3RhdGUubGVuZ3RoO1xuICB9XG4gIC8vIElmIHdlJ3JlIGFza2luZyBmb3IgbW9yZSB0aGFuIHRoZSBjdXJyZW50IGh3bSwgdGhlbiByYWlzZSB0aGUgaHdtLlxuICBpZiAobiA+IHN0YXRlLmhpZ2hXYXRlck1hcmspIHN0YXRlLmhpZ2hXYXRlck1hcmsgPSBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKTtcbiAgaWYgKG4gPD0gc3RhdGUubGVuZ3RoKSByZXR1cm4gbjtcbiAgLy8gRG9uJ3QgaGF2ZSBlbm91Z2hcbiAgaWYgKCFzdGF0ZS5lbmRlZCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbn1cblxuLy8geW91IGNhbiBvdmVycmlkZSBlaXRoZXIgdGhpcyBtZXRob2QsIG9yIHRoZSBhc3luYyBfcmVhZChuKSBiZWxvdy5cblJlYWRhYmxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgZGVidWcoJ3JlYWQnLCBuKTtcbiAgbiA9IHBhcnNlSW50KG4sIDEwKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIG5PcmlnID0gbjtcblxuICBpZiAobiAhPT0gMCkgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG5cbiAgLy8gaWYgd2UncmUgZG9pbmcgcmVhZCgwKSB0byB0cmlnZ2VyIGEgcmVhZGFibGUgZXZlbnQsIGJ1dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYSBidW5jaCBvZiBkYXRhIGluIHRoZSBidWZmZXIsIHRoZW4ganVzdCB0cmlnZ2VyXG4gIC8vIHRoZSAncmVhZGFibGUnIGV2ZW50IGFuZCBtb3ZlIG9uLlxuICBpZiAobiA9PT0gMCAmJiBzdGF0ZS5uZWVkUmVhZGFibGUgJiYgKHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmVuZGVkKSkge1xuICAgIGRlYnVnKCdyZWFkOiBlbWl0UmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLmVuZGVkKTtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKTtlbHNlIGVtaXRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG4gPSBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKTtcblxuICAvLyBpZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG4gIGlmIChuID09PSAwICYmIHN0YXRlLmVuZGVkKSB7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgZW5kUmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBbGwgdGhlIGFjdHVhbCBjaHVuayBnZW5lcmF0aW9uIGxvZ2ljIG5lZWRzIHRvIGJlXG4gIC8vICpiZWxvdyogdGhlIGNhbGwgdG8gX3JlYWQuICBUaGUgcmVhc29uIGlzIHRoYXQgaW4gY2VydGFpblxuICAvLyBzeW50aGV0aWMgc3RyZWFtIGNhc2VzLCBzdWNoIGFzIHBhc3N0aHJvdWdoIHN0cmVhbXMsIF9yZWFkXG4gIC8vIG1heSBiZSBhIGNvbXBsZXRlbHkgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoaWNoIG1heSBjaGFuZ2VcbiAgLy8gdGhlIHN0YXRlIG9mIHRoZSByZWFkIGJ1ZmZlciwgcHJvdmlkaW5nIGVub3VnaCBkYXRhIHdoZW5cbiAgLy8gYmVmb3JlIHRoZXJlIHdhcyAqbm90KiBlbm91Z2guXG4gIC8vXG4gIC8vIFNvLCB0aGUgc3RlcHMgYXJlOlxuICAvLyAxLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHN0YXRlIG9mIHRoaW5ncyB3aWxsIGJlIGFmdGVyIHdlIGRvXG4gIC8vIGEgcmVhZCBmcm9tIHRoZSBidWZmZXIuXG4gIC8vXG4gIC8vIDIuIElmIHRoYXQgcmVzdWx0aW5nIHN0YXRlIHdpbGwgdHJpZ2dlciBhIF9yZWFkLCB0aGVuIGNhbGwgX3JlYWQuXG4gIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBhc3luY2hyb25vdXMsIG9yIHN5bmNocm9ub3VzLiAgWWVzLCBpdCBpc1xuICAvLyBkZWVwbHkgdWdseSB0byB3cml0ZSBBUElzIHRoaXMgd2F5LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW5cbiAgLy8gdGhhdCB0aGUgUmVhZGFibGUgY2xhc3Mgc2hvdWxkIGJlaGF2ZSBpbXByb3Blcmx5LCBhcyBzdHJlYW1zIGFyZVxuICAvLyBkZXNpZ25lZCB0byBiZSBzeW5jL2FzeW5jIGFnbm9zdGljLlxuICAvLyBUYWtlIG5vdGUgaWYgdGhlIF9yZWFkIGNhbGwgaXMgc3luYyBvciBhc3luYyAoaWUsIGlmIHRoZSByZWFkIGNhbGxcbiAgLy8gaGFzIHJldHVybmVkIHlldCksIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIHNhZmUgdG8gZW1pdFxuICAvLyAncmVhZGFibGUnIGV0Yy5cbiAgLy9cbiAgLy8gMy4gQWN0dWFsbHkgcHVsbCB0aGUgcmVxdWVzdGVkIGNodW5rcyBvdXQgb2YgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuLlxuXG4gIC8vIGlmIHdlIG5lZWQgYSByZWFkYWJsZSBldmVudCwgdGhlbiB3ZSBuZWVkIHRvIGRvIHNvbWUgcmVhZGluZy5cbiAgdmFyIGRvUmVhZCA9IHN0YXRlLm5lZWRSZWFkYWJsZTtcbiAgZGVidWcoJ25lZWQgcmVhZGFibGUnLCBkb1JlYWQpO1xuXG4gIC8vIGlmIHdlIGN1cnJlbnRseSBoYXZlIGxlc3MgdGhhbiB0aGUgaGlnaFdhdGVyTWFyaywgdGhlbiBhbHNvIHJlYWQgc29tZVxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwIHx8IHN0YXRlLmxlbmd0aCAtIG4gPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZG9SZWFkID0gdHJ1ZTtcbiAgICBkZWJ1ZygnbGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsnLCBkb1JlYWQpO1xuICB9XG5cbiAgLy8gaG93ZXZlciwgaWYgd2UndmUgZW5kZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludCwgYW5kIGlmIHdlJ3JlIGFscmVhZHlcbiAgLy8gcmVhZGluZywgdGhlbiBpdCdzIHVubmVjZXNzYXJ5LlxuICBpZiAoc3RhdGUuZW5kZWQgfHwgc3RhdGUucmVhZGluZykge1xuICAgIGRvUmVhZCA9IGZhbHNlO1xuICAgIGRlYnVnKCdyZWFkaW5nIG9yIGVuZGVkJywgZG9SZWFkKTtcbiAgfSBlbHNlIGlmIChkb1JlYWQpIHtcbiAgICBkZWJ1ZygnZG8gcmVhZCcpO1xuICAgIHN0YXRlLnJlYWRpbmcgPSB0cnVlO1xuICAgIHN0YXRlLnN5bmMgPSB0cnVlO1xuICAgIC8vIGlmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IHplcm8sIHRoZW4gd2UgKm5lZWQqIGEgcmVhZGFibGUgZXZlbnQuXG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvLyBjYWxsIGludGVybmFsIHJlYWQgbWV0aG9kXG4gICAgdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKTtcbiAgICBzdGF0ZS5zeW5jID0gZmFsc2U7XG4gICAgLy8gSWYgX3JlYWQgcHVzaGVkIGRhdGEgc3luY2hyb25vdXNseSwgdGhlbiBgcmVhZGluZ2Agd2lsbCBiZSBmYWxzZSxcbiAgICAvLyBhbmQgd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgbXVjaCBkYXRhIHdlIGNhbiByZXR1cm4gdG8gdGhlIHVzZXIuXG4gICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpO1xuICB9XG5cbiAgdmFyIHJldDtcbiAgaWYgKG4gPiAwKSByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSk7ZWxzZSByZXQgPSBudWxsO1xuXG4gIGlmIChyZXQgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIG4gPSAwO1xuICB9IGVsc2Uge1xuICAgIHN0YXRlLmxlbmd0aCAtPSBuO1xuICB9XG5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIElmIHdlIGhhdmUgbm90aGluZyBpbiB0aGUgYnVmZmVyLCB0aGVuIHdlIHdhbnQgdG8ga25vd1xuICAgIC8vIGFzIHNvb24gYXMgd2UgKmRvKiBnZXQgc29tZXRoaW5nIGludG8gdGhlIGJ1ZmZlci5cbiAgICBpZiAoIXN0YXRlLmVuZGVkKSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuXG4gICAgLy8gSWYgd2UgdHJpZWQgdG8gcmVhZCgpIHBhc3QgdGhlIEVPRiwgdGhlbiBlbWl0IGVuZCBvbiB0aGUgbmV4dCB0aWNrLlxuICAgIGlmIChuT3JpZyAhPT0gbiAmJiBzdGF0ZS5lbmRlZCkgZW5kUmVhZGFibGUodGhpcyk7XG4gIH1cblxuICBpZiAocmV0ICE9PSBudWxsKSB0aGlzLmVtaXQoJ2RhdGEnLCByZXQpO1xuXG4gIHJldHVybiByZXQ7XG59O1xuXG5mdW5jdGlvbiBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKSB7XG4gIHZhciBlciA9IG51bGw7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGNodW5rKSAmJiB0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmIGNodW5rICE9PSBudWxsICYmIGNodW5rICE9PSB1bmRlZmluZWQgJiYgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsnKTtcbiAgfVxuICByZXR1cm4gZXI7XG59XG5cbmZ1bmN0aW9uIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUuZW5kZWQpIHJldHVybjtcbiAgaWYgKHN0YXRlLmRlY29kZXIpIHtcbiAgICB2YXIgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLmVuZCgpO1xuICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHtcbiAgICAgIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcbiAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuXG4gIC8vIGVtaXQgJ3JlYWRhYmxlJyBub3cgdG8gbWFrZSBzdXJlIGl0IGdldHMgcGlja2VkIHVwLlxuICBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbn1cblxuLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgaWYgKCFzdGF0ZS5lbWl0dGVkUmVhZGFibGUpIHtcbiAgICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUuZmxvd2luZyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBpZiAoc3RhdGUuc3luYykgcHJvY2Vzc05leHRUaWNrKGVtaXRSZWFkYWJsZV8sIHN0cmVhbSk7ZWxzZSBlbWl0UmVhZGFibGVfKHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlXyhzdHJlYW0pIHtcbiAgZGVidWcoJ2VtaXQgcmVhZGFibGUnKTtcbiAgc3RyZWFtLmVtaXQoJ3JlYWRhYmxlJyk7XG4gIGZsb3coc3RyZWFtKTtcbn1cblxuLy8gYXQgdGhpcyBwb2ludCwgdGhlIHVzZXIgaGFzIHByZXN1bWFibHkgc2VlbiB0aGUgJ3JlYWRhYmxlJyBldmVudCxcbi8vIGFuZCBjYWxsZWQgcmVhZCgpIHRvIGNvbnN1bWUgc29tZSBkYXRhLiAgdGhhdCBtYXkgaGF2ZSB0cmlnZ2VyZWRcbi8vIGluIHR1cm4gYW5vdGhlciBfcmVhZChuKSBjYWxsLCBpbiB3aGljaCBjYXNlIHJlYWRpbmcgPSB0cnVlIGlmXG4vLyBpdCdzIGluIHByb2dyZXNzLlxuLy8gSG93ZXZlciwgaWYgd2UncmUgbm90IGVuZGVkLCBvciByZWFkaW5nLCBhbmQgdGhlIGxlbmd0aCA8IGh3bSxcbi8vIHRoZW4gZ28gYWhlYWQgYW5kIHRyeSB0byByZWFkIHNvbWUgbW9yZSBwcmVlbXB0aXZlbHkuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nTW9yZSkge1xuICAgIHN0YXRlLnJlYWRpbmdNb3JlID0gdHJ1ZTtcbiAgICBwcm9jZXNzTmV4dFRpY2sobWF5YmVSZWFkTW9yZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgd2hpbGUgKCFzdGF0ZS5yZWFkaW5nICYmICFzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5lbmRlZCAmJiBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZGVidWcoJ21heWJlUmVhZE1vcmUgcmVhZCAwJyk7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gICAgaWYgKGxlbiA9PT0gc3RhdGUubGVuZ3RoKVxuICAgICAgLy8gZGlkbid0IGdldCBhbnkgZGF0YSwgc3RvcCBzcGlubmluZy5cbiAgICAgIGJyZWFrO2Vsc2UgbGVuID0gc3RhdGUubGVuZ3RoO1xuICB9XG4gIHN0YXRlLnJlYWRpbmdNb3JlID0gZmFsc2U7XG59XG5cbi8vIGFic3RyYWN0IG1ldGhvZC4gIHRvIGJlIG92ZXJyaWRkZW4gaW4gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vIGNhbGwgY2IoZXIsIGRhdGEpIHdoZXJlIGRhdGEgaXMgPD0gbiBpbiBsZW5ndGguXG4vLyBmb3IgdmlydHVhbCAobm9uLXN0cmluZywgbm9uLWJ1ZmZlcikgc3RyZWFtcywgXCJsZW5ndGhcIiBpcyBzb21ld2hhdFxuLy8gYXJiaXRyYXJ5LCBhbmQgcGVyaGFwcyBub3QgdmVyeSBtZWFuaW5nZnVsLlxuUmVhZGFibGUucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignX3JlYWQoKSBpcyBub3QgaW1wbGVtZW50ZWQnKSk7XG59O1xuXG5SZWFkYWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uIChkZXN0LCBwaXBlT3B0cykge1xuICB2YXIgc3JjID0gdGhpcztcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICBzd2l0Y2ggKHN0YXRlLnBpcGVzQ291bnQpIHtcbiAgICBjYXNlIDA6XG4gICAgICBzdGF0ZS5waXBlcyA9IGRlc3Q7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICBzdGF0ZS5waXBlcyA9IFtzdGF0ZS5waXBlcywgZGVzdF07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgc3RhdGUucGlwZXMucHVzaChkZXN0KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHN0YXRlLnBpcGVzQ291bnQgKz0gMTtcbiAgZGVidWcoJ3BpcGUgY291bnQ9JWQgb3B0cz0laicsIHN0YXRlLnBpcGVzQ291bnQsIHBpcGVPcHRzKTtcblxuICB2YXIgZG9FbmQgPSAoIXBpcGVPcHRzIHx8IHBpcGVPcHRzLmVuZCAhPT0gZmFsc2UpICYmIGRlc3QgIT09IHByb2Nlc3Muc3Rkb3V0ICYmIGRlc3QgIT09IHByb2Nlc3Muc3RkZXJyO1xuXG4gIHZhciBlbmRGbiA9IGRvRW5kID8gb25lbmQgOiBjbGVhbnVwO1xuICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkgcHJvY2Vzc05leHRUaWNrKGVuZEZuKTtlbHNlIHNyYy5vbmNlKCdlbmQnLCBlbmRGbik7XG5cbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpO1xuICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSkge1xuICAgIGRlYnVnKCdvbnVucGlwZScpO1xuICAgIGlmIChyZWFkYWJsZSA9PT0gc3JjKSB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgZGVidWcoJ29uZW5kJyk7XG4gICAgZGVzdC5lbmQoKTtcbiAgfVxuXG4gIC8vIHdoZW4gdGhlIGRlc3QgZHJhaW5zLCBpdCByZWR1Y2VzIHRoZSBhd2FpdERyYWluIGNvdW50ZXJcbiAgLy8gb24gdGhlIHNvdXJjZS4gIFRoaXMgd291bGQgYmUgbW9yZSBlbGVnYW50IHdpdGggYSAub25jZSgpXG4gIC8vIGhhbmRsZXIgaW4gZmxvdygpLCBidXQgYWRkaW5nIGFuZCByZW1vdmluZyByZXBlYXRlZGx5IGlzXG4gIC8vIHRvbyBzbG93LlxuICB2YXIgb25kcmFpbiA9IHBpcGVPbkRyYWluKHNyYyk7XG4gIGRlc3Qub24oJ2RyYWluJywgb25kcmFpbik7XG5cbiAgdmFyIGNsZWFuZWRVcCA9IGZhbHNlO1xuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIGRlYnVnKCdjbGVhbnVwJyk7XG4gICAgLy8gY2xlYW51cCBldmVudCBoYW5kbGVycyBvbmNlIHRoZSBwaXBlIGlzIGJyb2tlblxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2RyYWluJywgb25kcmFpbik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCd1bnBpcGUnLCBvbnVucGlwZSk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBjbGVhbnVwKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbmRhdGEpO1xuXG4gICAgY2xlYW5lZFVwID0gdHJ1ZTtcblxuICAgIC8vIGlmIHRoZSByZWFkZXIgaXMgd2FpdGluZyBmb3IgYSBkcmFpbiBldmVudCBmcm9tIHRoaXNcbiAgICAvLyBzcGVjaWZpYyB3cml0ZXIsIHRoZW4gaXQgd291bGQgY2F1c2UgaXQgdG8gbmV2ZXIgc3RhcnRcbiAgICAvLyBmbG93aW5nIGFnYWluLlxuICAgIC8vIFNvLCBpZiB0aGlzIGlzIGF3YWl0aW5nIGEgZHJhaW4sIHRoZW4gd2UganVzdCBjYWxsIGl0IG5vdy5cbiAgICAvLyBJZiB3ZSBkb24ndCBrbm93LCB0aGVuIGFzc3VtZSB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBvbmUuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gJiYgKCFkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSkgb25kcmFpbigpO1xuICB9XG5cbiAgLy8gSWYgdGhlIHVzZXIgcHVzaGVzIG1vcmUgZGF0YSB3aGlsZSB3ZSdyZSB3cml0aW5nIHRvIGRlc3QgdGhlbiB3ZSdsbCBlbmQgdXBcbiAgLy8gaW4gb25kYXRhIGFnYWluLiBIb3dldmVyLCB3ZSBvbmx5IHdhbnQgdG8gaW5jcmVhc2UgYXdhaXREcmFpbiBvbmNlIGJlY2F1c2VcbiAgLy8gZGVzdCB3aWxsIG9ubHkgZW1pdCBvbmUgJ2RyYWluJyBldmVudCBmb3IgdGhlIG11bHRpcGxlIHdyaXRlcy5cbiAgLy8gPT4gSW50cm9kdWNlIGEgZ3VhcmQgb24gaW5jcmVhc2luZyBhd2FpdERyYWluLlxuICB2YXIgaW5jcmVhc2VkQXdhaXREcmFpbiA9IGZhbHNlO1xuICBzcmMub24oJ2RhdGEnLCBvbmRhdGEpO1xuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBkZWJ1Zygnb25kYXRhJyk7XG4gICAgaW5jcmVhc2VkQXdhaXREcmFpbiA9IGZhbHNlO1xuICAgIHZhciByZXQgPSBkZXN0LndyaXRlKGNodW5rKTtcbiAgICBpZiAoZmFsc2UgPT09IHJldCAmJiAhaW5jcmVhc2VkQXdhaXREcmFpbikge1xuICAgICAgLy8gSWYgdGhlIHVzZXIgdW5waXBlZCBkdXJpbmcgYGRlc3Qud3JpdGUoKWAsIGl0IGlzIHBvc3NpYmxlXG4gICAgICAvLyB0byBnZXQgc3R1Y2sgaW4gYSBwZXJtYW5lbnRseSBwYXVzZWQgc3RhdGUgaWYgdGhhdCB3cml0ZVxuICAgICAgLy8gYWxzbyByZXR1cm5lZCBmYWxzZS5cbiAgICAgIC8vID0+IENoZWNrIHdoZXRoZXIgYGRlc3RgIGlzIHN0aWxsIGEgcGlwaW5nIGRlc3RpbmF0aW9uLlxuICAgICAgaWYgKChzdGF0ZS5waXBlc0NvdW50ID09PSAxICYmIHN0YXRlLnBpcGVzID09PSBkZXN0IHx8IHN0YXRlLnBpcGVzQ291bnQgPiAxICYmIGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpICE9PSAtMSkgJiYgIWNsZWFuZWRVcCkge1xuICAgICAgICBkZWJ1ZygnZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlJywgc3JjLl9yZWFkYWJsZVN0YXRlLmF3YWl0RHJhaW4pO1xuICAgICAgICBzcmMuX3JlYWRhYmxlU3RhdGUuYXdhaXREcmFpbisrO1xuICAgICAgICBpbmNyZWFzZWRBd2FpdERyYWluID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHNyYy5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBkZXN0IGhhcyBhbiBlcnJvciwgdGhlbiBzdG9wIHBpcGluZyBpbnRvIGl0LlxuICAvLyBob3dldmVyLCBkb24ndCBzdXBwcmVzcyB0aGUgdGhyb3dpbmcgYmVoYXZpb3IgZm9yIHRoaXMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBkZWJ1Zygnb25lcnJvcicsIGVyKTtcbiAgICB1bnBpcGUoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGlmIChFRWxpc3RlbmVyQ291bnQoZGVzdCwgJ2Vycm9yJykgPT09IDApIGRlc3QuZW1pdCgnZXJyb3InLCBlcik7XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgb3VyIGVycm9yIGhhbmRsZXIgaXMgYXR0YWNoZWQgYmVmb3JlIHVzZXJsYW5kIG9uZXMuXG4gIHByZXBlbmRMaXN0ZW5lcihkZXN0LCAnZXJyb3InLCBvbmVycm9yKTtcblxuICAvLyBCb3RoIGNsb3NlIGFuZCBmaW5pc2ggc2hvdWxkIHRyaWdnZXIgdW5waXBlLCBidXQgb25seSBvbmNlLlxuICBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2Nsb3NlJywgb25jbG9zZSk7XG4gIGZ1bmN0aW9uIG9uZmluaXNoKCkge1xuICAgIGRlYnVnKCdvbmZpbmlzaCcpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG5cbiAgZnVuY3Rpb24gdW5waXBlKCkge1xuICAgIGRlYnVnKCd1bnBpcGUnKTtcbiAgICBzcmMudW5waXBlKGRlc3QpO1xuICB9XG5cbiAgLy8gdGVsbCB0aGUgZGVzdCB0aGF0IGl0J3MgYmVpbmcgcGlwZWQgdG9cbiAgZGVzdC5lbWl0KCdwaXBlJywgc3JjKTtcblxuICAvLyBzdGFydCB0aGUgZmxvdyBpZiBpdCBoYXNuJ3QgYmVlbiBzdGFydGVkIGFscmVhZHkuXG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwaXBlIHJlc3VtZScpO1xuICAgIHNyYy5yZXN1bWUoKTtcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufTtcblxuZnVuY3Rpb24gcGlwZU9uRHJhaW4oc3JjKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN0YXRlID0gc3JjLl9yZWFkYWJsZVN0YXRlO1xuICAgIGRlYnVnKCdwaXBlT25EcmFpbicsIHN0YXRlLmF3YWl0RHJhaW4pO1xuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluKSBzdGF0ZS5hd2FpdERyYWluLS07XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gPT09IDAgJiYgRUVsaXN0ZW5lckNvdW50KHNyYywgJ2RhdGEnKSkge1xuICAgICAgc3RhdGUuZmxvd2luZyA9IHRydWU7XG4gICAgICBmbG93KHNyYyk7XG4gICAgfVxuICB9O1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUudW5waXBlID0gZnVuY3Rpb24gKGRlc3QpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICAvLyBpZiB3ZSdyZSBub3QgcGlwaW5nIGFueXdoZXJlLCB0aGVuIGRvIG5vdGhpbmcuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAwKSByZXR1cm4gdGhpcztcblxuICAvLyBqdXN0IG9uZSBkZXN0aW5hdGlvbi4gIG1vc3QgY29tbW9uIGNhc2UuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSB7XG4gICAgLy8gcGFzc2VkIGluIG9uZSwgYnV0IGl0J3Mgbm90IHRoZSByaWdodCBvbmUuXG4gICAgaWYgKGRlc3QgJiYgZGVzdCAhPT0gc3RhdGUucGlwZXMpIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKCFkZXN0KSBkZXN0ID0gc3RhdGUucGlwZXM7XG5cbiAgICAvLyBnb3QgYSBtYXRjaC5cbiAgICBzdGF0ZS5waXBlcyA9IG51bGw7XG4gICAgc3RhdGUucGlwZXNDb3VudCA9IDA7XG4gICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIGlmIChkZXN0KSBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gc2xvdyBjYXNlLiBtdWx0aXBsZSBwaXBlIGRlc3RpbmF0aW9ucy5cblxuICBpZiAoIWRlc3QpIHtcbiAgICAvLyByZW1vdmUgYWxsLlxuICAgIHZhciBkZXN0cyA9IHN0YXRlLnBpcGVzO1xuICAgIHZhciBsZW4gPSBzdGF0ZS5waXBlc0NvdW50O1xuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBkZXN0c1tpXS5lbWl0KCd1bnBpcGUnLCB0aGlzKTtcbiAgICB9cmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB0cnkgdG8gZmluZCB0aGUgcmlnaHQgb25lLlxuICB2YXIgaW5kZXggPSBpbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KTtcbiAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIHRoaXM7XG5cbiAgc3RhdGUucGlwZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgc3RhdGUucGlwZXNDb3VudCAtPSAxO1xuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMSkgc3RhdGUucGlwZXMgPSBzdGF0ZS5waXBlc1swXTtcblxuICBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gc2V0IHVwIGRhdGEgZXZlbnRzIGlmIHRoZXkgYXJlIGFza2VkIGZvclxuLy8gRW5zdXJlIHJlYWRhYmxlIGxpc3RlbmVycyBldmVudHVhbGx5IGdldCBzb21ldGhpbmdcblJlYWRhYmxlLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldiwgZm4pIHtcbiAgdmFyIHJlcyA9IFN0cmVhbS5wcm90b3R5cGUub24uY2FsbCh0aGlzLCBldiwgZm4pO1xuXG4gIGlmIChldiA9PT0gJ2RhdGEnKSB7XG4gICAgLy8gU3RhcnQgZmxvd2luZyBvbiBuZXh0IHRpY2sgaWYgc3RyZWFtIGlzbid0IGV4cGxpY2l0bHkgcGF1c2VkXG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyAhPT0gZmFsc2UpIHRoaXMucmVzdW1lKCk7XG4gIH0gZWxzZSBpZiAoZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICAgIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiAhc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcpIHtcbiAgICAgIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgICAgIHByb2Nlc3NOZXh0VGljayhuUmVhZGluZ05leHRUaWNrLCB0aGlzKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGVuZ3RoKSB7XG4gICAgICAgIGVtaXRSZWFkYWJsZSh0aGlzLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG5SZWFkYWJsZS5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBSZWFkYWJsZS5wcm90b3R5cGUub247XG5cbmZ1bmN0aW9uIG5SZWFkaW5nTmV4dFRpY2soc2VsZikge1xuICBkZWJ1ZygncmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwJyk7XG4gIHNlbGYucmVhZCgwKTtcbn1cblxuLy8gcGF1c2UoKSBhbmQgcmVzdW1lKCkgYXJlIHJlbW5hbnRzIG9mIHRoZSBsZWdhY3kgcmVhZGFibGUgc3RyZWFtIEFQSVxuLy8gSWYgdGhlIHVzZXIgdXNlcyB0aGVtLCB0aGVuIHN3aXRjaCBpbnRvIG9sZCBtb2RlLlxuUmVhZGFibGUucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZScpO1xuICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuICAgIHJlc3VtZSh0aGlzLCBzdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiByZXN1bWUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlc3VtZVNjaGVkdWxlZCkge1xuICAgIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IHRydWU7XG4gICAgcHJvY2Vzc05leHRUaWNrKHJlc3VtZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VtZV8oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICBkZWJ1ZygncmVzdW1lIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICB9XG5cbiAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gZmFsc2U7XG4gIHN0YXRlLmF3YWl0RHJhaW4gPSAwO1xuICBzdHJlYW0uZW1pdCgncmVzdW1lJyk7XG4gIGZsb3coc3RyZWFtKTtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLnJlYWRpbmcpIHN0cmVhbS5yZWFkKDApO1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gIGRlYnVnKCdjYWxsIHBhdXNlIGZsb3dpbmc9JWonLCB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpO1xuICBpZiAoZmFsc2UgIT09IHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwYXVzZScpO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIHRoaXMuZW1pdCgncGF1c2UnKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIGZsb3coc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgZGVidWcoJ2Zsb3cnLCBzdGF0ZS5mbG93aW5nKTtcbiAgd2hpbGUgKHN0YXRlLmZsb3dpbmcgJiYgc3RyZWFtLnJlYWQoKSAhPT0gbnVsbCkge31cbn1cblxuLy8gd3JhcCBhbiBvbGQtc3R5bGUgc3RyZWFtIGFzIHRoZSBhc3luYyBkYXRhIHNvdXJjZS5cbi8vIFRoaXMgaXMgKm5vdCogcGFydCBvZiB0aGUgcmVhZGFibGUgc3RyZWFtIGludGVyZmFjZS5cbi8vIEl0IGlzIGFuIHVnbHkgdW5mb3J0dW5hdGUgbWVzcyBvZiBoaXN0b3J5LlxuUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBwYXVzZWQgPSBmYWxzZTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgIGRlYnVnKCd3cmFwcGVkIGVuZCcpO1xuICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHNlbGYucHVzaChjaHVuayk7XG4gICAgfVxuXG4gICAgc2VsZi5wdXNoKG51bGwpO1xuICB9KTtcblxuICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBkYXRhJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG5cbiAgICAvLyBkb24ndCBza2lwIG92ZXIgZmFsc3kgdmFsdWVzIGluIG9iamVjdE1vZGVcbiAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSAmJiAoY2h1bmsgPT09IG51bGwgfHwgY2h1bmsgPT09IHVuZGVmaW5lZCkpIHJldHVybjtlbHNlIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiAoIWNodW5rIHx8ICFjaHVuay5sZW5ndGgpKSByZXR1cm47XG5cbiAgICB2YXIgcmV0ID0gc2VsZi5wdXNoKGNodW5rKTtcbiAgICBpZiAoIXJldCkge1xuICAgICAgcGF1c2VkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5wYXVzZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcHJveHkgYWxsIHRoZSBvdGhlciBtZXRob2RzLlxuICAvLyBpbXBvcnRhbnQgd2hlbiB3cmFwcGluZyBmaWx0ZXJzIGFuZCBkdXBsZXhlcy5cbiAgZm9yICh2YXIgaSBpbiBzdHJlYW0pIHtcbiAgICBpZiAodGhpc1tpXSA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzdHJlYW1baV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNbaV0gPSBmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHN0cmVhbVttZXRob2RdLmFwcGx5KHN0cmVhbSwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH0oaSk7XG4gICAgfVxuICB9XG5cbiAgLy8gcHJveHkgY2VydGFpbiBpbXBvcnRhbnQgZXZlbnRzLlxuICB2YXIgZXZlbnRzID0gWydlcnJvcicsICdjbG9zZScsICdkZXN0cm95JywgJ3BhdXNlJywgJ3Jlc3VtZSddO1xuICBmb3JFYWNoKGV2ZW50cywgZnVuY3Rpb24gKGV2KSB7XG4gICAgc3RyZWFtLm9uKGV2LCBzZWxmLmVtaXQuYmluZChzZWxmLCBldikpO1xuICB9KTtcblxuICAvLyB3aGVuIHdlIHRyeSB0byBjb25zdW1lIHNvbWUgbW9yZSBieXRlcywgc2ltcGx5IHVucGF1c2UgdGhlXG4gIC8vIHVuZGVybHlpbmcgc3RyZWFtLlxuICBzZWxmLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBfcmVhZCcsIG4pO1xuICAgIGlmIChwYXVzZWQpIHtcbiAgICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgICAgc3RyZWFtLnJlc3VtZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gc2VsZjtcbn07XG5cbi8vIGV4cG9zZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS5cblJlYWRhYmxlLl9mcm9tTGlzdCA9IGZyb21MaXN0O1xuXG4vLyBQbHVjayBvZmYgbiBieXRlcyBmcm9tIGFuIGFycmF5IG9mIGJ1ZmZlcnMuXG4vLyBMZW5ndGggaXMgdGhlIGNvbWJpbmVkIGxlbmd0aHMgb2YgYWxsIHRoZSBidWZmZXJzIGluIHRoZSBsaXN0LlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdChuLCBzdGF0ZSkge1xuICAvLyBub3RoaW5nIGJ1ZmZlcmVkXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gIHZhciByZXQ7XG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKSByZXQgPSBzdGF0ZS5idWZmZXIuc2hpZnQoKTtlbHNlIGlmICghbiB8fCBuID49IHN0YXRlLmxlbmd0aCkge1xuICAgIC8vIHJlYWQgaXQgYWxsLCB0cnVuY2F0ZSB0aGUgbGlzdFxuICAgIGlmIChzdGF0ZS5kZWNvZGVyKSByZXQgPSBzdGF0ZS5idWZmZXIuam9pbignJyk7ZWxzZSBpZiAoc3RhdGUuYnVmZmVyLmxlbmd0aCA9PT0gMSkgcmV0ID0gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YTtlbHNlIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25jYXQoc3RhdGUubGVuZ3RoKTtcbiAgICBzdGF0ZS5idWZmZXIuY2xlYXIoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyByZWFkIHBhcnQgb2YgbGlzdFxuICAgIHJldCA9IGZyb21MaXN0UGFydGlhbChuLCBzdGF0ZS5idWZmZXIsIHN0YXRlLmRlY29kZXIpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gRXh0cmFjdHMgb25seSBlbm91Z2ggYnVmZmVyZWQgZGF0YSB0byBzYXRpc2Z5IHRoZSBhbW91bnQgcmVxdWVzdGVkLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdFBhcnRpYWwobiwgbGlzdCwgaGFzU3RyaW5ncykge1xuICB2YXIgcmV0O1xuICBpZiAobiA8IGxpc3QuaGVhZC5kYXRhLmxlbmd0aCkge1xuICAgIC8vIHNsaWNlIGlzIHRoZSBzYW1lIGZvciBidWZmZXJzIGFuZCBzdHJpbmdzXG4gICAgcmV0ID0gbGlzdC5oZWFkLmRhdGEuc2xpY2UoMCwgbik7XG4gICAgbGlzdC5oZWFkLmRhdGEgPSBsaXN0LmhlYWQuZGF0YS5zbGljZShuKTtcbiAgfSBlbHNlIGlmIChuID09PSBsaXN0LmhlYWQuZGF0YS5sZW5ndGgpIHtcbiAgICAvLyBmaXJzdCBjaHVuayBpcyBhIHBlcmZlY3QgbWF0Y2hcbiAgICByZXQgPSBsaXN0LnNoaWZ0KCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gcmVzdWx0IHNwYW5zIG1vcmUgdGhhbiBvbmUgYnVmZmVyXG4gICAgcmV0ID0gaGFzU3RyaW5ncyA/IGNvcHlGcm9tQnVmZmVyU3RyaW5nKG4sIGxpc3QpIDogY29weUZyb21CdWZmZXIobiwgbGlzdCk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gQ29waWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGxpc3Qgb2YgYnVmZmVyZWQgZGF0YVxuLy8gY2h1bmtzLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBjb3B5RnJvbUJ1ZmZlclN0cmluZyhuLCBsaXN0KSB7XG4gIHZhciBwID0gbGlzdC5oZWFkO1xuICB2YXIgYyA9IDE7XG4gIHZhciByZXQgPSBwLmRhdGE7XG4gIG4gLT0gcmV0Lmxlbmd0aDtcbiAgd2hpbGUgKHAgPSBwLm5leHQpIHtcbiAgICB2YXIgc3RyID0gcC5kYXRhO1xuICAgIHZhciBuYiA9IG4gPiBzdHIubGVuZ3RoID8gc3RyLmxlbmd0aCA6IG47XG4gICAgaWYgKG5iID09PSBzdHIubGVuZ3RoKSByZXQgKz0gc3RyO2Vsc2UgcmV0ICs9IHN0ci5zbGljZSgwLCBuKTtcbiAgICBuIC09IG5iO1xuICAgIGlmIChuID09PSAwKSB7XG4gICAgICBpZiAobmIgPT09IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgKytjO1xuICAgICAgICBpZiAocC5uZXh0KSBsaXN0LmhlYWQgPSBwLm5leHQ7ZWxzZSBsaXN0LmhlYWQgPSBsaXN0LnRhaWwgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGlzdC5oZWFkID0gcDtcbiAgICAgICAgcC5kYXRhID0gc3RyLnNsaWNlKG5iKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICArK2M7XG4gIH1cbiAgbGlzdC5sZW5ndGggLT0gYztcbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gQ29waWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBieXRlcyBmcm9tIHRoZSBsaXN0IG9mIGJ1ZmZlcmVkIGRhdGEgY2h1bmtzLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBjb3B5RnJvbUJ1ZmZlcihuLCBsaXN0KSB7XG4gIHZhciByZXQgPSBidWZmZXJTaGltLmFsbG9jVW5zYWZlKG4pO1xuICB2YXIgcCA9IGxpc3QuaGVhZDtcbiAgdmFyIGMgPSAxO1xuICBwLmRhdGEuY29weShyZXQpO1xuICBuIC09IHAuZGF0YS5sZW5ndGg7XG4gIHdoaWxlIChwID0gcC5uZXh0KSB7XG4gICAgdmFyIGJ1ZiA9IHAuZGF0YTtcbiAgICB2YXIgbmIgPSBuID4gYnVmLmxlbmd0aCA/IGJ1Zi5sZW5ndGggOiBuO1xuICAgIGJ1Zi5jb3B5KHJldCwgcmV0Lmxlbmd0aCAtIG4sIDAsIG5iKTtcbiAgICBuIC09IG5iO1xuICAgIGlmIChuID09PSAwKSB7XG4gICAgICBpZiAobmIgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICAgICAgKytjO1xuICAgICAgICBpZiAocC5uZXh0KSBsaXN0LmhlYWQgPSBwLm5leHQ7ZWxzZSBsaXN0LmhlYWQgPSBsaXN0LnRhaWwgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGlzdC5oZWFkID0gcDtcbiAgICAgICAgcC5kYXRhID0gYnVmLnNsaWNlKG5iKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICArK2M7XG4gIH1cbiAgbGlzdC5sZW5ndGggLT0gYztcbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZW5kUmVhZGFibGUoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcblxuICAvLyBJZiB3ZSBnZXQgaGVyZSBiZWZvcmUgY29uc3VtaW5nIGFsbCB0aGUgYnl0ZXMsIHRoZW4gdGhhdCBpcyBhXG4gIC8vIGJ1ZyBpbiBub2RlLiAgU2hvdWxkIG5ldmVyIGhhcHBlbi5cbiAgaWYgKHN0YXRlLmxlbmd0aCA+IDApIHRocm93IG5ldyBFcnJvcignXCJlbmRSZWFkYWJsZSgpXCIgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTtcblxuICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gICAgcHJvY2Vzc05leHRUaWNrKGVuZFJlYWRhYmxlTlQsIHN0YXRlLCBzdHJlYW0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlTlQoc3RhdGUsIHN0cmVhbSkge1xuICAvLyBDaGVjayB0aGF0IHdlIGRpZG4ndCBnZXQgb25lIGxhc3QgdW5zaGlmdC5cbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmIHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIHN0YXRlLmVuZEVtaXR0ZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5yZWFkYWJsZSA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdlbmQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JFYWNoKHhzLCBmKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZih4c1tpXSwgaSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5kZXhPZih4cywgeCkge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmICh4c1tpXSA9PT0geCkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufSIsIi8vIGEgdHJhbnNmb3JtIHN0cmVhbSBpcyBhIHJlYWRhYmxlL3dyaXRhYmxlIHN0cmVhbSB3aGVyZSB5b3UgZG9cbi8vIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhLiAgU29tZXRpbWVzIGl0J3MgY2FsbGVkIGEgXCJmaWx0ZXJcIixcbi8vIGJ1dCB0aGF0J3Mgbm90IGEgZ3JlYXQgbmFtZSBmb3IgaXQsIHNpbmNlIHRoYXQgaW1wbGllcyBhIHRoaW5nIHdoZXJlXG4vLyBzb21lIGJpdHMgcGFzcyB0aHJvdWdoLCBhbmQgb3RoZXJzIGFyZSBzaW1wbHkgaWdub3JlZC4gIChUaGF0IHdvdWxkXG4vLyBiZSBhIHZhbGlkIGV4YW1wbGUgb2YgYSB0cmFuc2Zvcm0sIG9mIGNvdXJzZS4pXG4vL1xuLy8gV2hpbGUgdGhlIG91dHB1dCBpcyBjYXVzYWxseSByZWxhdGVkIHRvIHRoZSBpbnB1dCwgaXQncyBub3QgYVxuLy8gbmVjZXNzYXJpbHkgc3ltbWV0cmljIG9yIHN5bmNocm9ub3VzIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGV4YW1wbGUsXG4vLyBhIHpsaWIgc3RyZWFtIG1pZ2h0IHRha2UgbXVsdGlwbGUgcGxhaW4tdGV4dCB3cml0ZXMoKSwgYW5kIHRoZW5cbi8vIGVtaXQgYSBzaW5nbGUgY29tcHJlc3NlZCBjaHVuayBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS5cbi8vXG4vLyBIZXJlJ3MgaG93IHRoaXMgd29ya3M6XG4vL1xuLy8gVGhlIFRyYW5zZm9ybSBzdHJlYW0gaGFzIGFsbCB0aGUgYXNwZWN0cyBvZiB0aGUgcmVhZGFibGUgYW5kIHdyaXRhYmxlXG4vLyBzdHJlYW0gY2xhc3Nlcy4gIFdoZW4geW91IHdyaXRlKGNodW5rKSwgdGhhdCBjYWxscyBfd3JpdGUoY2h1bmssY2IpXG4vLyBpbnRlcm5hbGx5LCBhbmQgcmV0dXJucyBmYWxzZSBpZiB0aGVyZSdzIGEgbG90IG9mIHBlbmRpbmcgd3JpdGVzXG4vLyBidWZmZXJlZCB1cC4gIFdoZW4geW91IGNhbGwgcmVhZCgpLCB0aGF0IGNhbGxzIF9yZWFkKG4pIHVudGlsXG4vLyB0aGVyZSdzIGVub3VnaCBwZW5kaW5nIHJlYWRhYmxlIGRhdGEgYnVmZmVyZWQgdXAuXG4vL1xuLy8gSW4gYSB0cmFuc2Zvcm0gc3RyZWFtLCB0aGUgd3JpdHRlbiBkYXRhIGlzIHBsYWNlZCBpbiBhIGJ1ZmZlci4gIFdoZW5cbi8vIF9yZWFkKG4pIGlzIGNhbGxlZCwgaXQgdHJhbnNmb3JtcyB0aGUgcXVldWVkIHVwIGRhdGEsIGNhbGxpbmcgdGhlXG4vLyBidWZmZXJlZCBfd3JpdGUgY2IncyBhcyBpdCBjb25zdW1lcyBjaHVua3MuICBJZiBjb25zdW1pbmcgYSBzaW5nbGVcbi8vIHdyaXR0ZW4gY2h1bmsgd291bGQgcmVzdWx0IGluIG11bHRpcGxlIG91dHB1dCBjaHVua3MsIHRoZW4gdGhlIGZpcnN0XG4vLyBvdXRwdXR0ZWQgYml0IGNhbGxzIHRoZSByZWFkY2IsIGFuZCBzdWJzZXF1ZW50IGNodW5rcyBqdXN0IGdvIGludG9cbi8vIHRoZSByZWFkIGJ1ZmZlciwgYW5kIHdpbGwgY2F1c2UgaXQgdG8gZW1pdCAncmVhZGFibGUnIGlmIG5lY2Vzc2FyeS5cbi8vXG4vLyBUaGlzIHdheSwgYmFjay1wcmVzc3VyZSBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIGJ5IHRoZSByZWFkaW5nIHNpZGUsXG4vLyBzaW5jZSBfcmVhZCBoYXMgdG8gYmUgY2FsbGVkIHRvIHN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgY2h1bmsuICBIb3dldmVyLFxuLy8gYSBwYXRob2xvZ2ljYWwgaW5mbGF0ZSB0eXBlIG9mIHRyYW5zZm9ybSBjYW4gY2F1c2UgZXhjZXNzaXZlIGJ1ZmZlcmluZ1xuLy8gaGVyZS4gIEZvciBleGFtcGxlLCBpbWFnaW5lIGEgc3RyZWFtIHdoZXJlIGV2ZXJ5IGJ5dGUgb2YgaW5wdXQgaXNcbi8vIGludGVycHJldGVkIGFzIGFuIGludGVnZXIgZnJvbSAwLTI1NSwgYW5kIHRoZW4gcmVzdWx0cyBpbiB0aGF0IG1hbnlcbi8vIGJ5dGVzIG9mIG91dHB1dC4gIFdyaXRpbmcgdGhlIDQgYnl0ZXMge2ZmLGZmLGZmLGZmfSB3b3VsZCByZXN1bHQgaW5cbi8vIDFrYiBvZiBkYXRhIGJlaW5nIG91dHB1dC4gIEluIHRoaXMgY2FzZSwgeW91IGNvdWxkIHdyaXRlIGEgdmVyeSBzbWFsbFxuLy8gYW1vdW50IG9mIGlucHV0LCBhbmQgZW5kIHVwIHdpdGggYSB2ZXJ5IGxhcmdlIGFtb3VudCBvZiBvdXRwdXQuICBJblxuLy8gc3VjaCBhIHBhdGhvbG9naWNhbCBpbmZsYXRpbmcgbWVjaGFuaXNtLCB0aGVyZSdkIGJlIG5vIHdheSB0byB0ZWxsXG4vLyB0aGUgc3lzdGVtIHRvIHN0b3AgZG9pbmcgdGhlIHRyYW5zZm9ybS4gIEEgc2luZ2xlIDRNQiB3cml0ZSBjb3VsZFxuLy8gY2F1c2UgdGhlIHN5c3RlbSB0byBydW4gb3V0IG9mIG1lbW9yeS5cbi8vXG4vLyBIb3dldmVyLCBldmVuIGluIHN1Y2ggYSBwYXRob2xvZ2ljYWwgY2FzZSwgb25seSBhIHNpbmdsZSB3cml0dGVuIGNodW5rXG4vLyB3b3VsZCBiZSBjb25zdW1lZCwgYW5kIHRoZW4gdGhlIHJlc3Qgd291bGQgd2FpdCAodW4tdHJhbnNmb3JtZWQpIHVudGlsXG4vLyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgdHJhbnNmb3JtZWQgY2h1bmsgd2VyZSBjb25zdW1lZC5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybTtcblxudmFyIER1cGxleCA9IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG51dGlsLmluaGVyaXRzKFRyYW5zZm9ybSwgRHVwbGV4KTtcblxuZnVuY3Rpb24gVHJhbnNmb3JtU3RhdGUoc3RyZWFtKSB7XG4gIHRoaXMuYWZ0ZXJUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoZXIsIGRhdGEpIHtcbiAgICByZXR1cm4gYWZ0ZXJUcmFuc2Zvcm0oc3RyZWFtLCBlciwgZGF0YSk7XG4gIH07XG5cbiAgdGhpcy5uZWVkVHJhbnNmb3JtID0gZmFsc2U7XG4gIHRoaXMudHJhbnNmb3JtaW5nID0gZmFsc2U7XG4gIHRoaXMud3JpdGVjYiA9IG51bGw7XG4gIHRoaXMud3JpdGVjaHVuayA9IG51bGw7XG4gIHRoaXMud3JpdGVlbmNvZGluZyA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGFmdGVyVHJhbnNmb3JtKHN0cmVhbSwgZXIsIGRhdGEpIHtcbiAgdmFyIHRzID0gc3RyZWFtLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMudHJhbnNmb3JtaW5nID0gZmFsc2U7XG5cbiAgdmFyIGNiID0gdHMud3JpdGVjYjtcblxuICBpZiAoIWNiKSByZXR1cm4gc3RyZWFtLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdubyB3cml0ZWNiIGluIFRyYW5zZm9ybSBjbGFzcycpKTtcblxuICB0cy53cml0ZWNodW5rID0gbnVsbDtcbiAgdHMud3JpdGVjYiA9IG51bGw7XG5cbiAgaWYgKGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdW5kZWZpbmVkKSBzdHJlYW0ucHVzaChkYXRhKTtcblxuICBjYihlcik7XG5cbiAgdmFyIHJzID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBycy5yZWFkaW5nID0gZmFsc2U7XG4gIGlmIChycy5uZWVkUmVhZGFibGUgfHwgcnMubGVuZ3RoIDwgcnMuaGlnaFdhdGVyTWFyaykge1xuICAgIHN0cmVhbS5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBUcmFuc2Zvcm0ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVHJhbnNmb3JtKSkgcmV0dXJuIG5ldyBUcmFuc2Zvcm0ob3B0aW9ucyk7XG5cbiAgRHVwbGV4LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdGhpcy5fdHJhbnNmb3JtU3RhdGUgPSBuZXcgVHJhbnNmb3JtU3RhdGUodGhpcyk7XG5cbiAgdmFyIHN0cmVhbSA9IHRoaXM7XG5cbiAgLy8gc3RhcnQgb3V0IGFza2luZyBmb3IgYSByZWFkYWJsZSBldmVudCBvbmNlIGRhdGEgaXMgdHJhbnNmb3JtZWQuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAvLyB3ZSBoYXZlIGltcGxlbWVudGVkIHRoZSBfcmVhZCBtZXRob2QsIGFuZCBkb25lIHRoZSBvdGhlciB0aGluZ3NcbiAgLy8gdGhhdCBSZWFkYWJsZSB3YW50cyBiZWZvcmUgdGhlIGZpcnN0IF9yZWFkIGNhbGwsIHNvIHVuc2V0IHRoZVxuICAvLyBzeW5jIGd1YXJkIGZsYWcuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYyA9IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fdHJhbnNmb3JtID0gb3B0aW9ucy50cmFuc2Zvcm07XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmx1c2ggPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZsdXNoID0gb3B0aW9ucy5mbHVzaDtcbiAgfVxuXG4gIC8vIFdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZmluaXNoZXMsIHRoZW4gZmx1c2ggb3V0IGFueXRoaW5nIHJlbWFpbmluZy5cbiAgdGhpcy5vbmNlKCdwcmVmaW5pc2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9mbHVzaCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmx1c2goZnVuY3Rpb24gKGVyLCBkYXRhKSB7XG4gICAgICBkb25lKHN0cmVhbSwgZXIsIGRhdGEpO1xuICAgIH0pO2Vsc2UgZG9uZShzdHJlYW0pO1xuICB9KTtcbn1cblxuVHJhbnNmb3JtLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtID0gZmFsc2U7XG4gIHJldHVybiBEdXBsZXgucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCBjaHVuaywgZW5jb2RpbmcpO1xufTtcblxuLy8gVGhpcyBpcyB0aGUgcGFydCB3aGVyZSB5b3UgZG8gc3R1ZmYhXG4vLyBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGluIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyAnY2h1bmsnIGlzIGFuIGlucHV0IGNodW5rLlxuLy9cbi8vIENhbGwgYHB1c2gobmV3Q2h1bmspYCB0byBwYXNzIGFsb25nIHRyYW5zZm9ybWVkIG91dHB1dFxuLy8gdG8gdGhlIHJlYWRhYmxlIHNpZGUuICBZb3UgbWF5IGNhbGwgJ3B1c2gnIHplcm8gb3IgbW9yZSB0aW1lcy5cbi8vXG4vLyBDYWxsIGBjYihlcnIpYCB3aGVuIHlvdSBhcmUgZG9uZSB3aXRoIHRoaXMgY2h1bmsuICBJZiB5b3UgcGFzc1xuLy8gYW4gZXJyb3IsIHRoZW4gdGhhdCdsbCBwdXQgdGhlIGh1cnQgb24gdGhlIHdob2xlIG9wZXJhdGlvbi4gIElmIHlvdVxuLy8gbmV2ZXIgY2FsbCBjYigpLCB0aGVuIHlvdSdsbCBuZXZlciBnZXQgYW5vdGhlciBjaHVuay5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHRocm93IG5ldyBFcnJvcignX3RyYW5zZm9ybSgpIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMud3JpdGVjYiA9IGNiO1xuICB0cy53cml0ZWNodW5rID0gY2h1bms7XG4gIHRzLndyaXRlZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgaWYgKCF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB2YXIgcnMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICAgIGlmICh0cy5uZWVkVHJhbnNmb3JtIHx8IHJzLm5lZWRSZWFkYWJsZSB8fCBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKSB0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspO1xuICB9XG59O1xuXG4vLyBEb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBhcmdzIGFyZSBoZXJlLlxuLy8gX3RyYW5zZm9ybSBkb2VzIGFsbCB0aGUgd29yay5cbi8vIFRoYXQgd2UgZ290IGhlcmUgbWVhbnMgdGhhdCB0aGUgcmVhZGFibGUgc2lkZSB3YW50cyBtb3JlIGRhdGEuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG5cbiAgaWYgKHRzLndyaXRlY2h1bmsgIT09IG51bGwgJiYgdHMud3JpdGVjYiAmJiAhdHMudHJhbnNmb3JtaW5nKSB7XG4gICAgdHMudHJhbnNmb3JtaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl90cmFuc2Zvcm0odHMud3JpdGVjaHVuaywgdHMud3JpdGVlbmNvZGluZywgdHMuYWZ0ZXJUcmFuc2Zvcm0pO1xuICB9IGVsc2Uge1xuICAgIC8vIG1hcmsgdGhhdCB3ZSBuZWVkIGEgdHJhbnNmb3JtLCBzbyB0aGF0IGFueSBkYXRhIHRoYXQgY29tZXMgaW5cbiAgICAvLyB3aWxsIGdldCBwcm9jZXNzZWQsIG5vdyB0aGF0IHdlJ3ZlIGFza2VkIGZvciBpdC5cbiAgICB0cy5uZWVkVHJhbnNmb3JtID0gdHJ1ZTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZG9uZShzdHJlYW0sIGVyLCBkYXRhKSB7XG4gIGlmIChlcikgcmV0dXJuIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcblxuICBpZiAoZGF0YSAhPT0gbnVsbCAmJiBkYXRhICE9PSB1bmRlZmluZWQpIHN0cmVhbS5wdXNoKGRhdGEpO1xuXG4gIC8vIGlmIHRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgd3JpdGUgYnVmZmVyLCB0aGVuIHRoYXQgbWVhbnNcbiAgLy8gdGhhdCBub3RoaW5nIG1vcmUgd2lsbCBldmVyIGJlIHByb3ZpZGVkXG4gIHZhciB3cyA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHRzID0gc3RyZWFtLl90cmFuc2Zvcm1TdGF0ZTtcblxuICBpZiAod3MubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiB3cy5sZW5ndGggIT0gMCcpO1xuXG4gIGlmICh0cy50cmFuc2Zvcm1pbmcpIHRocm93IG5ldyBFcnJvcignQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHN0aWxsIHRyYW5zZm9ybWluZycpO1xuXG4gIHJldHVybiBzdHJlYW0ucHVzaChudWxsKTtcbn0iLCIvLyBBIGJpdCBzaW1wbGVyIHRoYW4gcmVhZGFibGUgc3RyZWFtcy5cbi8vIEltcGxlbWVudCBhbiBhc3luYyAuX3dyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpLCBhbmQgaXQnbGwgaGFuZGxlIGFsbFxuLy8gdGhlIGRyYWluIGV2ZW50IGVtaXNzaW9uIGFuZCBidWZmZXJpbmcuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBXcml0YWJsZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBwcm9jZXNzTmV4dFRpY2sgPSByZXF1aXJlKCdwcm9jZXNzLW5leHRpY2stYXJncycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgYXN5bmNXcml0ZSA9ICFwcm9jZXNzLmJyb3dzZXIgJiYgWyd2MC4xMCcsICd2MC45LiddLmluZGV4T2YocHJvY2Vzcy52ZXJzaW9uLnNsaWNlKDAsIDUpKSA+IC0xID8gc2V0SW1tZWRpYXRlIDogcHJvY2Vzc05leHRUaWNrO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbldyaXRhYmxlLldyaXRhYmxlU3RhdGUgPSBXcml0YWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSByZXF1aXJlKCdjb3JlLXV0aWwtaXMnKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgaW50ZXJuYWxVdGlsID0ge1xuICBkZXByZWNhdGU6IHJlcXVpcmUoJ3V0aWwtZGVwcmVjYXRlJylcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBTdHJlYW07XG4oZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIFN0cmVhbSA9IHJlcXVpcmUoJ3N0JyArICdyZWFtJyk7XG4gIH0gY2F0Y2ggKF8pIHt9IGZpbmFsbHkge1xuICAgIGlmICghU3RyZWFtKSBTdHJlYW0gPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG4gIH1cbn0pKCk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbi8qPHJlcGxhY2VtZW50PiovXG52YXIgYnVmZmVyU2hpbSA9IHJlcXVpcmUoJ2J1ZmZlci1zaGltcycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnV0aWwuaW5oZXJpdHMoV3JpdGFibGUsIFN0cmVhbSk7XG5cbmZ1bmN0aW9uIG5vcCgpIHt9XG5cbmZ1bmN0aW9uIFdyaXRlUmVxKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdGhpcy5jaHVuayA9IGNodW5rO1xuICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHRoaXMuY2FsbGJhY2sgPSBjYjtcbiAgdGhpcy5uZXh0ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gV3JpdGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhpcyBzdHJlYW1cbiAgLy8gY29udGFpbnMgYnVmZmVycyBvciBvYmplY3RzLlxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcblxuICBpZiAoc3RyZWFtIGluc3RhbmNlb2YgRHVwbGV4KSB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLndyaXRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggd3JpdGUoKSBzdGFydHMgcmV0dXJuaW5nIGZhbHNlXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgdGhhdCB3ZSBhbHdheXMgcmV0dXJuIGZhbHNlIGlmXG4gIC8vIHRoZSBlbnRpcmUgYnVmZmVyIGlzIG5vdCBmbHVzaGVkIGltbWVkaWF0ZWx5IG9uIHdyaXRlKClcbiAgdmFyIGh3bSA9IG9wdGlvbnMuaGlnaFdhdGVyTWFyaztcbiAgdmFyIGRlZmF1bHRId20gPSB0aGlzLm9iamVjdE1vZGUgPyAxNiA6IDE2ICogMTAyNDtcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaHdtIHx8IGh3bSA9PT0gMCA/IGh3bSA6IGRlZmF1bHRId207XG5cbiAgLy8gY2FzdCB0byBpbnRzLlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSB+fnRoaXMuaGlnaFdhdGVyTWFyaztcblxuICAvLyBkcmFpbiBldmVudCBmbGFnLlxuICB0aGlzLm5lZWREcmFpbiA9IGZhbHNlO1xuICAvLyBhdCB0aGUgc3RhcnQgb2YgY2FsbGluZyBlbmQoKVxuICB0aGlzLmVuZGluZyA9IGZhbHNlO1xuICAvLyB3aGVuIGVuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIHJldHVybmVkXG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgLy8gd2hlbiAnZmluaXNoJyBpcyBlbWl0dGVkXG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZTtcblxuICAvLyBzaG91bGQgd2UgZGVjb2RlIHN0cmluZ3MgaW50byBidWZmZXJzIGJlZm9yZSBwYXNzaW5nIHRvIF93cml0ZT9cbiAgLy8gdGhpcyBpcyBoZXJlIHNvIHRoYXQgc29tZSBub2RlLWNvcmUgc3RyZWFtcyBjYW4gb3B0aW1pemUgc3RyaW5nXG4gIC8vIGhhbmRsaW5nIGF0IGEgbG93ZXIgbGV2ZWwuXG4gIHZhciBub0RlY29kZSA9IG9wdGlvbnMuZGVjb2RlU3RyaW5ncyA9PT0gZmFsc2U7XG4gIHRoaXMuZGVjb2RlU3RyaW5ncyA9ICFub0RlY29kZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyBub3QgYW4gYWN0dWFsIGJ1ZmZlciB3ZSBrZWVwIHRyYWNrIG9mLCBidXQgYSBtZWFzdXJlbWVudFxuICAvLyBvZiBob3cgbXVjaCB3ZSdyZSB3YWl0aW5nIHRvIGdldCBwdXNoZWQgdG8gc29tZSB1bmRlcmx5aW5nXG4gIC8vIHNvY2tldCBvciBmaWxlLlxuICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIHNlZSB3aGVuIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSB3cml0ZS5cbiAgdGhpcy53cml0aW5nID0gZmFsc2U7XG5cbiAgLy8gd2hlbiB0cnVlIGFsbCB3cml0ZXMgd2lsbCBiZSBidWZmZXJlZCB1bnRpbCAudW5jb3JrKCkgY2FsbFxuICB0aGlzLmNvcmtlZCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgb253cml0ZSBjYiBpcyBjYWxsZWQgaW1tZWRpYXRlbHksXG4gIC8vIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2UgYW55XG4gIC8vIGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gYSBmbGFnIHRvIGtub3cgaWYgd2UncmUgcHJvY2Vzc2luZyBwcmV2aW91c2x5IGJ1ZmZlcmVkIGl0ZW1zLCB3aGljaFxuICAvLyBtYXkgY2FsbCB0aGUgX3dyaXRlKCkgY2FsbGJhY2sgaW4gdGhlIHNhbWUgdGljaywgc28gdGhhdCB3ZSBkb24ndFxuICAvLyBlbmQgdXAgaW4gYW4gb3ZlcmxhcHBlZCBvbndyaXRlIHNpdHVhdGlvbi5cbiAgdGhpcy5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7XG5cbiAgLy8gdGhlIGNhbGxiYWNrIHRoYXQncyBwYXNzZWQgdG8gX3dyaXRlKGNodW5rLGNiKVxuICB0aGlzLm9ud3JpdGUgPSBmdW5jdGlvbiAoZXIpIHtcbiAgICBvbndyaXRlKHN0cmVhbSwgZXIpO1xuICB9O1xuXG4gIC8vIHRoZSBjYWxsYmFjayB0aGF0IHRoZSB1c2VyIHN1cHBsaWVzIHRvIHdyaXRlKGNodW5rLGVuY29kaW5nLGNiKVxuICB0aGlzLndyaXRlY2IgPSBudWxsO1xuXG4gIC8vIHRoZSBhbW91bnQgdGhhdCBpcyBiZWluZyB3cml0dGVuIHdoZW4gX3dyaXRlIGlzIGNhbGxlZC5cbiAgdGhpcy53cml0ZWxlbiA9IDA7XG5cbiAgdGhpcy5idWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuXG4gIC8vIG51bWJlciBvZiBwZW5kaW5nIHVzZXItc3VwcGxpZWQgd3JpdGUgY2FsbGJhY2tzXG4gIC8vIHRoaXMgbXVzdCBiZSAwIGJlZm9yZSAnZmluaXNoJyBjYW4gYmUgZW1pdHRlZFxuICB0aGlzLnBlbmRpbmdjYiA9IDA7XG5cbiAgLy8gZW1pdCBwcmVmaW5pc2ggaWYgdGhlIG9ubHkgdGhpbmcgd2UncmUgd2FpdGluZyBmb3IgaXMgX3dyaXRlIGNic1xuICAvLyBUaGlzIGlzIHJlbGV2YW50IGZvciBzeW5jaHJvbm91cyBUcmFuc2Zvcm0gc3RyZWFtc1xuICB0aGlzLnByZWZpbmlzaGVkID0gZmFsc2U7XG5cbiAgLy8gVHJ1ZSBpZiB0aGUgZXJyb3Igd2FzIGFscmVhZHkgZW1pdHRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0aHJvd24gYWdhaW5cbiAgdGhpcy5lcnJvckVtaXR0ZWQgPSBmYWxzZTtcblxuICAvLyBjb3VudCBidWZmZXJlZCByZXF1ZXN0c1xuICB0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcblxuICAvLyBhbGxvY2F0ZSB0aGUgZmlyc3QgQ29ya2VkUmVxdWVzdCwgdGhlcmUgaXMgYWx3YXlzXG4gIC8vIG9uZSBhbGxvY2F0ZWQgYW5kIGZyZWUgdG8gdXNlLCBhbmQgd2UgbWFpbnRhaW4gYXQgbW9zdCB0d29cbiAgdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBuZXcgQ29ya2VkUmVxdWVzdCh0aGlzKTtcbn1cblxuV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24gZ2V0QnVmZmVyKCkge1xuICB2YXIgY3VycmVudCA9IHRoaXMuYnVmZmVyZWRSZXF1ZXN0O1xuICB2YXIgb3V0ID0gW107XG4gIHdoaWxlIChjdXJyZW50KSB7XG4gICAgb3V0LnB1c2goY3VycmVudCk7XG4gICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgfVxuICByZXR1cm4gb3V0O1xufTtcblxuKGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUsICdidWZmZXInLCB7XG4gICAgICBnZXQ6IGludGVybmFsVXRpbC5kZXByZWNhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCdWZmZXIoKTtcbiAgICAgIH0sICdfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciAnICsgJ2luc3RlYWQuJylcbiAgICB9KTtcbiAgfSBjYXRjaCAoXykge31cbn0pKCk7XG5cbi8vIFRlc3QgX3dyaXRhYmxlU3RhdGUgZm9yIGluaGVyaXRhbmNlIHRvIGFjY291bnQgZm9yIER1cGxleCBzdHJlYW1zLFxuLy8gd2hvc2UgcHJvdG90eXBlIGNoYWluIG9ubHkgcG9pbnRzIHRvIFJlYWRhYmxlLlxudmFyIHJlYWxIYXNJbnN0YW5jZTtcbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5oYXNJbnN0YW5jZSAmJiB0eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgcmVhbEhhc0luc3RhbmNlID0gRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZSwgU3ltYm9sLmhhc0luc3RhbmNlLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIGlmIChyZWFsSGFzSW5zdGFuY2UuY2FsbCh0aGlzLCBvYmplY3QpKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgcmV0dXJuIG9iamVjdCAmJiBvYmplY3QuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBXcml0YWJsZVN0YXRlO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICByZWFsSGFzSW5zdGFuY2UgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIHRoaXM7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFdyaXRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICAvLyBXcml0YWJsZSBjdG9yIGlzIGFwcGxpZWQgdG8gRHVwbGV4ZXMsIHRvby5cbiAgLy8gYHJlYWxIYXNJbnN0YW5jZWAgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdXNpbmcgcGxhaW4gYGluc3RhbmNlb2ZgXG4gIC8vIHdvdWxkIHJldHVybiBmYWxzZSwgYXMgbm8gYF93cml0YWJsZVN0YXRlYCBwcm9wZXJ0eSBpcyBhdHRhY2hlZC5cblxuICAvLyBUcnlpbmcgdG8gdXNlIHRoZSBjdXN0b20gYGluc3RhbmNlb2ZgIGZvciBXcml0YWJsZSBoZXJlIHdpbGwgYWxzbyBicmVhayB0aGVcbiAgLy8gTm9kZS5qcyBMYXp5VHJhbnNmb3JtIGltcGxlbWVudGF0aW9uLCB3aGljaCBoYXMgYSBub24tdHJpdmlhbCBnZXR0ZXIgZm9yXG4gIC8vIGBfd3JpdGFibGVTdGF0ZWAgdGhhdCB3b3VsZCBsZWFkIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgaWYgKCFyZWFsSGFzSW5zdGFuY2UuY2FsbChXcml0YWJsZSwgdGhpcykgJiYgISh0aGlzIGluc3RhbmNlb2YgRHVwbGV4KSkge1xuICAgIHJldHVybiBuZXcgV3JpdGFibGUob3B0aW9ucyk7XG4gIH1cblxuICB0aGlzLl93cml0YWJsZVN0YXRlID0gbmV3IFdyaXRhYmxlU3RhdGUob3B0aW9ucywgdGhpcyk7XG5cbiAgLy8gbGVnYWN5LlxuICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGUgPSBvcHRpb25zLndyaXRlO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLndyaXRldiA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGV2ID0gb3B0aW9ucy53cml0ZXY7XG4gIH1cblxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuLy8gT3RoZXJ3aXNlIHBlb3BsZSBjYW4gcGlwZSBXcml0YWJsZSBzdHJlYW1zLCB3aGljaCBpcyBqdXN0IHdyb25nLlxuV3JpdGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ0Nhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUnKSk7XG59O1xuXG5mdW5jdGlvbiB3cml0ZUFmdGVyRW5kKHN0cmVhbSwgY2IpIHtcbiAgdmFyIGVyID0gbmV3IEVycm9yKCd3cml0ZSBhZnRlciBlbmQnKTtcbiAgLy8gVE9ETzogZGVmZXIgZXJyb3IgZXZlbnRzIGNvbnNpc3RlbnRseSBldmVyeXdoZXJlLCBub3QganVzdCB0aGUgY2JcbiAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICBwcm9jZXNzTmV4dFRpY2soY2IsIGVyKTtcbn1cblxuLy8gQ2hlY2tzIHRoYXQgYSB1c2VyLXN1cHBsaWVkIGNodW5rIGlzIHZhbGlkLCBlc3BlY2lhbGx5IGZvciB0aGUgcGFydGljdWxhclxuLy8gbW9kZSB0aGUgc3RyZWFtIGlzIGluLiBDdXJyZW50bHkgdGhpcyBtZWFucyB0aGF0IGBudWxsYCBpcyBuZXZlciBhY2NlcHRlZFxuLy8gYW5kIHVuZGVmaW5lZC9ub24tc3RyaW5nIHZhbHVlcyBhcmUgb25seSBhbGxvd2VkIGluIG9iamVjdCBtb2RlLlxuZnVuY3Rpb24gdmFsaWRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgY2IpIHtcbiAgdmFyIHZhbGlkID0gdHJ1ZTtcbiAgdmFyIGVyID0gZmFsc2U7XG5cbiAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbScpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycgJiYgY2h1bmsgIT09IHVuZGVmaW5lZCAmJiAhc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGVyID0gbmV3IFR5cGVFcnJvcignSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuaycpO1xuICB9XG4gIGlmIChlcikge1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICBwcm9jZXNzTmV4dFRpY2soY2IsIGVyKTtcbiAgICB2YWxpZCA9IGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWxpZDtcbn1cblxuV3JpdGFibGUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHJldCA9IGZhbHNlO1xuICB2YXIgaXNCdWYgPSBCdWZmZXIuaXNCdWZmZXIoY2h1bmspO1xuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmIChpc0J1ZikgZW5jb2RpbmcgPSAnYnVmZmVyJztlbHNlIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gc3RhdGUuZGVmYXVsdEVuY29kaW5nO1xuXG4gIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIGNiID0gbm9wO1xuXG4gIGlmIChzdGF0ZS5lbmRlZCkgd3JpdGVBZnRlckVuZCh0aGlzLCBjYik7ZWxzZSBpZiAoaXNCdWYgfHwgdmFsaWRDaHVuayh0aGlzLCBzdGF0ZSwgY2h1bmssIGNiKSkge1xuICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgIHJldCA9IHdyaXRlT3JCdWZmZXIodGhpcywgc3RhdGUsIGlzQnVmLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBzdGF0ZS5jb3JrZWQrKztcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS51bmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZC0tO1xuXG4gICAgaWYgKCFzdGF0ZS53cml0aW5nICYmICFzdGF0ZS5jb3JrZWQgJiYgIXN0YXRlLmZpbmlzaGVkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpO1xuICB9XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nID0gZnVuY3Rpb24gc2V0RGVmYXVsdEVuY29kaW5nKGVuY29kaW5nKSB7XG4gIC8vIG5vZGU6OlBhcnNlRW5jb2RpbmcoKSByZXF1aXJlcyBsb3dlciBjYXNlLlxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykgZW5jb2RpbmcgPSBlbmNvZGluZy50b0xvd2VyQ2FzZSgpO1xuICBpZiAoIShbJ2hleCcsICd1dGY4JywgJ3V0Zi04JywgJ2FzY2lpJywgJ2JpbmFyeScsICdiYXNlNjQnLCAndWNzMicsICd1Y3MtMicsICd1dGYxNmxlJywgJ3V0Zi0xNmxlJywgJ3JhdyddLmluZGV4T2YoKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKCkpID4gLTEpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpO1xuICB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZyA9IGVuY29kaW5nO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIGRlY29kZUNodW5rKHN0YXRlLCBjaHVuaywgZW5jb2RpbmcpIHtcbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmIHN0YXRlLmRlY29kZVN0cmluZ3MgIT09IGZhbHNlICYmIHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICBjaHVuayA9IGJ1ZmZlclNoaW0uZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICB9XG4gIHJldHVybiBjaHVuaztcbn1cblxuLy8gaWYgd2UncmUgYWxyZWFkeSB3cml0aW5nIHNvbWV0aGluZywgdGhlbiBqdXN0IHB1dCB0aGlzXG4vLyBpbiB0aGUgcXVldWUsIGFuZCB3YWl0IG91ciB0dXJuLiAgT3RoZXJ3aXNlLCBjYWxsIF93cml0ZVxuLy8gSWYgd2UgcmV0dXJuIGZhbHNlLCB0aGVuIHdlIG5lZWQgYSBkcmFpbiBldmVudCwgc28gc2V0IHRoYXQgZmxhZy5cbmZ1bmN0aW9uIHdyaXRlT3JCdWZmZXIoc3RyZWFtLCBzdGF0ZSwgaXNCdWYsIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgaWYgKCFpc0J1Zikge1xuICAgIGNodW5rID0gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZyk7XG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpIGVuY29kaW5nID0gJ2J1ZmZlcic7XG4gIH1cbiAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuXG4gIHN0YXRlLmxlbmd0aCArPSBsZW47XG5cbiAgdmFyIHJldCA9IHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIC8vIHdlIG11c3QgZW5zdXJlIHRoYXQgcHJldmlvdXMgbmVlZERyYWluIHdpbGwgbm90IGJlIHJlc2V0IHRvIGZhbHNlLlxuICBpZiAoIXJldCkgc3RhdGUubmVlZERyYWluID0gdHJ1ZTtcblxuICBpZiAoc3RhdGUud3JpdGluZyB8fCBzdGF0ZS5jb3JrZWQpIHtcbiAgICB2YXIgbGFzdCA9IHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG5ldyBXcml0ZVJlcShjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICBpZiAobGFzdCkge1xuICAgICAgbGFzdC5uZXh0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9XG4gICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQgKz0gMTtcbiAgfSBlbHNlIHtcbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB3cml0ZXYsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBzdGF0ZS53cml0ZWxlbiA9IGxlbjtcbiAgc3RhdGUud3JpdGVjYiA9IGNiO1xuICBzdGF0ZS53cml0aW5nID0gdHJ1ZTtcbiAgc3RhdGUuc3luYyA9IHRydWU7XG4gIGlmICh3cml0ZXYpIHN0cmVhbS5fd3JpdGV2KGNodW5rLCBzdGF0ZS5vbndyaXRlKTtlbHNlIHN0cmVhbS5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBzdGF0ZS5vbndyaXRlKTtcbiAgc3RhdGUuc3luYyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKSB7XG4gIC0tc3RhdGUucGVuZGluZ2NiO1xuICBpZiAoc3luYykgcHJvY2Vzc05leHRUaWNrKGNiLCBlcik7ZWxzZSBjYihlcik7XG5cbiAgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbn1cblxuZnVuY3Rpb24gb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKSB7XG4gIHN0YXRlLndyaXRpbmcgPSBmYWxzZTtcbiAgc3RhdGUud3JpdGVjYiA9IG51bGw7XG4gIHN0YXRlLmxlbmd0aCAtPSBzdGF0ZS53cml0ZWxlbjtcbiAgc3RhdGUud3JpdGVsZW4gPSAwO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlKHN0cmVhbSwgZXIpIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuICB2YXIgc3luYyA9IHN0YXRlLnN5bmM7XG4gIHZhciBjYiA9IHN0YXRlLndyaXRlY2I7XG5cbiAgb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKTtcblxuICBpZiAoZXIpIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBzeW5jLCBlciwgY2IpO2Vsc2Uge1xuICAgIC8vIENoZWNrIGlmIHdlJ3JlIGFjdHVhbGx5IHJlYWR5IHRvIGZpbmlzaCwgYnV0IGRvbid0IGVtaXQgeWV0XG4gICAgdmFyIGZpbmlzaGVkID0gbmVlZEZpbmlzaChzdGF0ZSk7XG5cbiAgICBpZiAoIWZpbmlzaGVkICYmICFzdGF0ZS5jb3JrZWQgJiYgIXN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0KSB7XG4gICAgICBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoc3luYykge1xuICAgICAgLyo8cmVwbGFjZW1lbnQ+Ki9cbiAgICAgIGFzeW5jV3JpdGUoYWZ0ZXJXcml0ZSwgc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKTtcbiAgICAgIC8qPC9yZXBsYWNlbWVudD4qL1xuICAgIH0gZWxzZSB7XG4gICAgICBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKSB7XG4gIGlmICghZmluaXNoZWQpIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKTtcbiAgc3RhdGUucGVuZGluZ2NiLS07XG4gIGNiKCk7XG4gIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xufVxuXG4vLyBNdXN0IGZvcmNlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBvbiBuZXh0VGljaywgc28gdGhhdCB3ZSBkb24ndFxuLy8gZW1pdCAnZHJhaW4nIGJlZm9yZSB0aGUgd3JpdGUoKSBjb25zdW1lciBnZXRzIHRoZSAnZmFsc2UnIHJldHVyblxuLy8gdmFsdWUsIGFuZCBoYXMgYSBjaGFuY2UgdG8gYXR0YWNoIGEgJ2RyYWluJyBsaXN0ZW5lci5cbmZ1bmN0aW9uIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUubmVlZERyYWluKSB7XG4gICAgc3RhdGUubmVlZERyYWluID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2RyYWluJyk7XG4gIH1cbn1cblxuLy8gaWYgdGhlcmUncyBzb21ldGhpbmcgaW4gdGhlIGJ1ZmZlciB3YWl0aW5nLCB0aGVuIHByb2Nlc3MgaXRcbmZ1bmN0aW9uIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpIHtcbiAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IHRydWU7XG4gIHZhciBlbnRyeSA9IHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdDtcblxuICBpZiAoc3RyZWFtLl93cml0ZXYgJiYgZW50cnkgJiYgZW50cnkubmV4dCkge1xuICAgIC8vIEZhc3QgY2FzZSwgd3JpdGUgZXZlcnl0aGluZyB1c2luZyBfd3JpdGV2KClcbiAgICB2YXIgbCA9IHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50O1xuICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXkobCk7XG4gICAgdmFyIGhvbGRlciA9IHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZTtcbiAgICBob2xkZXIuZW50cnkgPSBlbnRyeTtcblxuICAgIHZhciBjb3VudCA9IDA7XG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICBidWZmZXJbY291bnRdID0gZW50cnk7XG4gICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICBjb3VudCArPSAxO1xuICAgIH1cblxuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgdHJ1ZSwgc3RhdGUubGVuZ3RoLCBidWZmZXIsICcnLCBob2xkZXIuZmluaXNoKTtcblxuICAgIC8vIGRvV3JpdGUgaXMgYWxtb3N0IGFsd2F5cyBhc3luYywgZGVmZXIgdGhlc2UgdG8gc2F2ZSBhIGJpdCBvZiB0aW1lXG4gICAgLy8gYXMgdGhlIGhvdCBwYXRoIGVuZHMgd2l0aCBkb1dyaXRlXG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gICAgaWYgKGhvbGRlci5uZXh0KSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBob2xkZXIubmV4dDtcbiAgICAgIGhvbGRlci5uZXh0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gbmV3IENvcmtlZFJlcXVlc3Qoc3RhdGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBTbG93IGNhc2UsIHdyaXRlIGNodW5rcyBvbmUtYnktb25lXG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICB2YXIgY2h1bmsgPSBlbnRyeS5jaHVuaztcbiAgICAgIHZhciBlbmNvZGluZyA9IGVudHJ5LmVuY29kaW5nO1xuICAgICAgdmFyIGNiID0gZW50cnkuY2FsbGJhY2s7XG4gICAgICB2YXIgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG5cbiAgICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmFsc2UsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYik7XG4gICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICAvLyBpZiB3ZSBkaWRuJ3QgY2FsbCB0aGUgb253cml0ZSBpbW1lZGlhdGVseSwgdGhlblxuICAgICAgLy8gaXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXQgZG9lcy5cbiAgICAgIC8vIGFsc28sIHRoYXQgbWVhbnMgdGhhdCB0aGUgY2h1bmsgYW5kIGNiIGFyZSBjdXJyZW50bHlcbiAgICAgIC8vIGJlaW5nIHByb2Nlc3NlZCwgc28gbW92ZSB0aGUgYnVmZmVyIGNvdW50ZXIgcGFzdCB0aGVtLlxuICAgICAgaWYgKHN0YXRlLndyaXRpbmcpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVudHJ5ID09PSBudWxsKSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcbiAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gZW50cnk7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcbn1cblxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG5ldyBFcnJvcignX3dyaXRlKCkgaXMgbm90IGltcGxlbWVudGVkJykpO1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXYgPSBudWxsO1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBpZiAodHlwZW9mIGNodW5rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBjaHVuaztcbiAgICBjaHVuayA9IG51bGw7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgaWYgKGNodW5rICE9PSBudWxsICYmIGNodW5rICE9PSB1bmRlZmluZWQpIHRoaXMud3JpdGUoY2h1bmssIGVuY29kaW5nKTtcblxuICAvLyAuZW5kKCkgZnVsbHkgdW5jb3Jrc1xuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkID0gMTtcbiAgICB0aGlzLnVuY29yaygpO1xuICB9XG5cbiAgLy8gaWdub3JlIHVubmVjZXNzYXJ5IGVuZCgpIGNhbGxzLlxuICBpZiAoIXN0YXRlLmVuZGluZyAmJiAhc3RhdGUuZmluaXNoZWQpIGVuZFdyaXRhYmxlKHRoaXMsIHN0YXRlLCBjYik7XG59O1xuXG5mdW5jdGlvbiBuZWVkRmluaXNoKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5lbmRpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9PT0gbnVsbCAmJiAhc3RhdGUuZmluaXNoZWQgJiYgIXN0YXRlLndyaXRpbmc7XG59XG5cbmZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucHJlZmluaXNoZWQpIHtcbiAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIG5lZWQgPSBuZWVkRmluaXNoKHN0YXRlKTtcbiAgaWYgKG5lZWQpIHtcbiAgICBpZiAoc3RhdGUucGVuZGluZ2NiID09PSAwKSB7XG4gICAgICBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSk7XG4gICAgICBzdGF0ZS5maW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgnZmluaXNoJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5lZWQ7XG59XG5cbmZ1bmN0aW9uIGVuZFdyaXRhYmxlKHN0cmVhbSwgc3RhdGUsIGNiKSB7XG4gIHN0YXRlLmVuZGluZyA9IHRydWU7XG4gIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICBpZiAoY2IpIHtcbiAgICBpZiAoc3RhdGUuZmluaXNoZWQpIHByb2Nlc3NOZXh0VGljayhjYik7ZWxzZSBzdHJlYW0ub25jZSgnZmluaXNoJywgY2IpO1xuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgc3RyZWFtLndyaXRhYmxlID0gZmFsc2U7XG59XG5cbi8vIEl0IHNlZW1zIGEgbGlua2VkIGxpc3QgYnV0IGl0IGlzIG5vdFxuLy8gdGhlcmUgd2lsbCBiZSBvbmx5IDIgb2YgdGhlc2UgZm9yIGVhY2ggc3RyZWFtXG5mdW5jdGlvbiBDb3JrZWRSZXF1ZXN0KHN0YXRlKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgdGhpcy5lbnRyeSA9IG51bGw7XG4gIHRoaXMuZmluaXNoID0gZnVuY3Rpb24gKGVycikge1xuICAgIHZhciBlbnRyeSA9IF90aGlzLmVudHJ5O1xuICAgIF90aGlzLmVudHJ5ID0gbnVsbDtcbiAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgICAgc3RhdGUucGVuZGluZ2NiLS07XG4gICAgICBjYihlcnIpO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgIH1cbiAgICBpZiAoc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlKSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dCA9IF90aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBfdGhpcztcbiAgICB9XG4gIH07XG59IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBidWZmZXJTaGltID0gcmVxdWlyZSgnYnVmZmVyLXNoaW1zJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXJMaXN0O1xuXG5mdW5jdGlvbiBCdWZmZXJMaXN0KCkge1xuICB0aGlzLmhlYWQgPSBudWxsO1xuICB0aGlzLnRhaWwgPSBudWxsO1xuICB0aGlzLmxlbmd0aCA9IDA7XG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAodikge1xuICB2YXIgZW50cnkgPSB7IGRhdGE6IHYsIG5leHQ6IG51bGwgfTtcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkgdGhpcy50YWlsLm5leHQgPSBlbnRyeTtlbHNlIHRoaXMuaGVhZCA9IGVudHJ5O1xuICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgKyt0aGlzLmxlbmd0aDtcbn07XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAodikge1xuICB2YXIgZW50cnkgPSB7IGRhdGE6IHYsIG5leHQ6IHRoaXMuaGVhZCB9O1xuICBpZiAodGhpcy5sZW5ndGggPT09IDApIHRoaXMudGFpbCA9IGVudHJ5O1xuICB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgKyt0aGlzLmxlbmd0aDtcbn07XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLnNoaWZ0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgdmFyIHJldCA9IHRoaXMuaGVhZC5kYXRhO1xuICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7ZWxzZSB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dDtcbiAgLS10aGlzLmxlbmd0aDtcbiAgcmV0dXJuIHJldDtcbn07XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO1xuICB0aGlzLmxlbmd0aCA9IDA7XG59O1xuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5qb2luID0gZnVuY3Rpb24gKHMpIHtcbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gIHZhciBwID0gdGhpcy5oZWFkO1xuICB2YXIgcmV0ID0gJycgKyBwLmRhdGE7XG4gIHdoaWxlIChwID0gcC5uZXh0KSB7XG4gICAgcmV0ICs9IHMgKyBwLmRhdGE7XG4gIH1yZXR1cm4gcmV0O1xufTtcblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuY29uY2F0ID0gZnVuY3Rpb24gKG4pIHtcbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gYnVmZmVyU2hpbS5hbGxvYygwKTtcbiAgaWYgKHRoaXMubGVuZ3RoID09PSAxKSByZXR1cm4gdGhpcy5oZWFkLmRhdGE7XG4gIHZhciByZXQgPSBidWZmZXJTaGltLmFsbG9jVW5zYWZlKG4gPj4+IDApO1xuICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgdmFyIGkgPSAwO1xuICB3aGlsZSAocCkge1xuICAgIHAuZGF0YS5jb3B5KHJldCwgaSk7XG4gICAgaSArPSBwLmRhdGEubGVuZ3RoO1xuICAgIHAgPSBwLm5leHQ7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qc1wiKVxuIiwidmFyIFN0cmVhbSA9IChmdW5jdGlvbiAoKXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVxdWlyZSgnc3QnICsgJ3JlYW0nKTsgLy8gaGFjayB0byBmaXggYSBjaXJjdWxhciBkZXBlbmRlbmN5IGlzc3VlIHdoZW4gdXNlZCB3aXRoIGJyb3dzZXJpZnlcbiAgfSBjYXRjaChfKXt9XG59KCkpO1xuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcycpO1xuZXhwb3J0cy5TdHJlYW0gPSBTdHJlYW0gfHwgZXhwb3J0cztcbmV4cG9ydHMuUmVhZGFibGUgPSBleHBvcnRzO1xuZXhwb3J0cy5Xcml0YWJsZSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fd3JpdGFibGUuanMnKTtcbmV4cG9ydHMuRHVwbGV4ID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9kdXBsZXguanMnKTtcbmV4cG9ydHMuVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMnKTtcbmV4cG9ydHMuUGFzc1Rocm91Z2ggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzJyk7XG5cbmlmICghcHJvY2Vzcy5icm93c2VyICYmIHByb2Nlc3MuZW52LlJFQURBQkxFX1NUUkVBTSA9PT0gJ2Rpc2FibGUnICYmIFN0cmVhbSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IFN0cmVhbTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzXCIpXG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzXCIpXG4iLCIvKlxuQ3J5cHRvSlMgdjMuMS4yXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcbihjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL3dpa2kvTGljZW5zZVxuKi9cbi8qKiBAcHJlc2VydmVcbihjKSAyMDEyIGJ5IEPDqWRyaWMgTWVzbmlsLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuLy8gY29uc3RhbnRzIHRhYmxlXG52YXIgemwgPSBbXG4gIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsXG4gIDcsIDQsIDEzLCAxLCAxMCwgNiwgMTUsIDMsIDEyLCAwLCA5LCA1LCAyLCAxNCwgMTEsIDgsXG4gIDMsIDEwLCAxNCwgNCwgOSwgMTUsIDgsIDEsIDIsIDcsIDAsIDYsIDEzLCAxMSwgNSwgMTIsXG4gIDEsIDksIDExLCAxMCwgMCwgOCwgMTIsIDQsIDEzLCAzLCA3LCAxNSwgMTQsIDUsIDYsIDIsXG4gIDQsIDAsIDUsIDksIDcsIDEyLCAyLCAxMCwgMTQsIDEsIDMsIDgsIDExLCA2LCAxNSwgMTNcbl1cblxudmFyIHpyID0gW1xuICA1LCAxNCwgNywgMCwgOSwgMiwgMTEsIDQsIDEzLCA2LCAxNSwgOCwgMSwgMTAsIDMsIDEyLFxuICA2LCAxMSwgMywgNywgMCwgMTMsIDUsIDEwLCAxNCwgMTUsIDgsIDEyLCA0LCA5LCAxLCAyLFxuICAxNSwgNSwgMSwgMywgNywgMTQsIDYsIDksIDExLCA4LCAxMiwgMiwgMTAsIDAsIDQsIDEzLFxuICA4LCA2LCA0LCAxLCAzLCAxMSwgMTUsIDAsIDUsIDEyLCAyLCAxMywgOSwgNywgMTAsIDE0LFxuICAxMiwgMTUsIDEwLCA0LCAxLCA1LCA4LCA3LCA2LCAyLCAxMywgMTQsIDAsIDMsIDksIDExXG5dXG5cbnZhciBzbCA9IFtcbiAgMTEsIDE0LCAxNSwgMTIsIDUsIDgsIDcsIDksIDExLCAxMywgMTQsIDE1LCA2LCA3LCA5LCA4LFxuICA3LCA2LCA4LCAxMywgMTEsIDksIDcsIDE1LCA3LCAxMiwgMTUsIDksIDExLCA3LCAxMywgMTIsXG4gIDExLCAxMywgNiwgNywgMTQsIDksIDEzLCAxNSwgMTQsIDgsIDEzLCA2LCA1LCAxMiwgNywgNSxcbiAgMTEsIDEyLCAxNCwgMTUsIDE0LCAxNSwgOSwgOCwgOSwgMTQsIDUsIDYsIDgsIDYsIDUsIDEyLFxuICA5LCAxNSwgNSwgMTEsIDYsIDgsIDEzLCAxMiwgNSwgMTIsIDEzLCAxNCwgMTEsIDgsIDUsIDZcbl1cblxudmFyIHNyID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXVxuXG52YXIgaGwgPSBbMHgwMDAwMDAwMCwgMHg1QTgyNzk5OSwgMHg2RUQ5RUJBMSwgMHg4RjFCQkNEQywgMHhBOTUzRkQ0RV1cbnZhciBociA9IFsweDUwQTI4QkU2LCAweDVDNEREMTI0LCAweDZENzAzRUYzLCAweDdBNkQ3NkU5LCAweDAwMDAwMDAwXVxuXG5mdW5jdGlvbiBieXRlc1RvV29yZHMgKGJ5dGVzKSB7XG4gIHZhciB3b3JkcyA9IFtdXG4gIGZvciAodmFyIGkgPSAwLCBiID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrLCBiICs9IDgpIHtcbiAgICB3b3Jkc1tiID4+PiA1XSB8PSBieXRlc1tpXSA8PCAoMjQgLSBiICUgMzIpXG4gIH1cbiAgcmV0dXJuIHdvcmRzXG59XG5cbmZ1bmN0aW9uIHdvcmRzVG9CeXRlcyAod29yZHMpIHtcbiAgdmFyIGJ5dGVzID0gW11cbiAgZm9yICh2YXIgYiA9IDA7IGIgPCB3b3Jkcy5sZW5ndGggKiAzMjsgYiArPSA4KSB7XG4gICAgYnl0ZXMucHVzaCgod29yZHNbYiA+Pj4gNV0gPj4+ICgyNCAtIGIgJSAzMikpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0Jsb2NrIChILCBNLCBvZmZzZXQpIHtcbiAgLy8gc3dhcCBlbmRpYW5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgdmFyIG9mZnNldF9pID0gb2Zmc2V0ICsgaVxuICAgIHZhciBNX29mZnNldF9pID0gTVtvZmZzZXRfaV1cblxuICAgIC8vIFN3YXBcbiAgICBNW29mZnNldF9pXSA9IChcbiAgICAgICgoKE1fb2Zmc2V0X2kgPDwgOCkgfCAoTV9vZmZzZXRfaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcbiAgICAgICgoKE1fb2Zmc2V0X2kgPDwgMjQpIHwgKE1fb2Zmc2V0X2kgPj4+IDgpKSAmIDB4ZmYwMGZmMDApXG4gICAgKVxuICB9XG5cbiAgLy8gV29ya2luZyB2YXJpYWJsZXNcbiAgdmFyIGFsLCBibCwgY2wsIGRsLCBlbFxuICB2YXIgYXIsIGJyLCBjciwgZHIsIGVyXG5cbiAgYXIgPSBhbCA9IEhbMF1cbiAgYnIgPSBibCA9IEhbMV1cbiAgY3IgPSBjbCA9IEhbMl1cbiAgZHIgPSBkbCA9IEhbM11cbiAgZXIgPSBlbCA9IEhbNF1cblxuICAvLyBjb21wdXRhdGlvblxuICB2YXIgdFxuICBmb3IgKGkgPSAwOyBpIDwgODA7IGkgKz0gMSkge1xuICAgIHQgPSAoYWwgKyBNW29mZnNldCArIHpsW2ldXSkgfCAwXG4gICAgaWYgKGkgPCAxNikge1xuICAgICAgdCArPSBmMShibCwgY2wsIGRsKSArIGhsWzBdXG4gICAgfSBlbHNlIGlmIChpIDwgMzIpIHtcbiAgICAgIHQgKz0gZjIoYmwsIGNsLCBkbCkgKyBobFsxXVxuICAgIH0gZWxzZSBpZiAoaSA8IDQ4KSB7XG4gICAgICB0ICs9IGYzKGJsLCBjbCwgZGwpICsgaGxbMl1cbiAgICB9IGVsc2UgaWYgKGkgPCA2NCkge1xuICAgICAgdCArPSBmNChibCwgY2wsIGRsKSArIGhsWzNdXG4gICAgfSBlbHNlIHsvLyBpZiAoaTw4MCkge1xuICAgICAgdCArPSBmNShibCwgY2wsIGRsKSArIGhsWzRdXG4gICAgfVxuICAgIHQgPSB0IHwgMFxuICAgIHQgPSByb3RsKHQsIHNsW2ldKVxuICAgIHQgPSAodCArIGVsKSB8IDBcbiAgICBhbCA9IGVsXG4gICAgZWwgPSBkbFxuICAgIGRsID0gcm90bChjbCwgMTApXG4gICAgY2wgPSBibFxuICAgIGJsID0gdFxuXG4gICAgdCA9IChhciArIE1bb2Zmc2V0ICsgenJbaV1dKSB8IDBcbiAgICBpZiAoaSA8IDE2KSB7XG4gICAgICB0ICs9IGY1KGJyLCBjciwgZHIpICsgaHJbMF1cbiAgICB9IGVsc2UgaWYgKGkgPCAzMikge1xuICAgICAgdCArPSBmNChiciwgY3IsIGRyKSArIGhyWzFdXG4gICAgfSBlbHNlIGlmIChpIDwgNDgpIHtcbiAgICAgIHQgKz0gZjMoYnIsIGNyLCBkcikgKyBoclsyXVxuICAgIH0gZWxzZSBpZiAoaSA8IDY0KSB7XG4gICAgICB0ICs9IGYyKGJyLCBjciwgZHIpICsgaHJbM11cbiAgICB9IGVsc2Ugey8vIGlmIChpPDgwKSB7XG4gICAgICB0ICs9IGYxKGJyLCBjciwgZHIpICsgaHJbNF1cbiAgICB9XG5cbiAgICB0ID0gdCB8IDBcbiAgICB0ID0gcm90bCh0LCBzcltpXSlcbiAgICB0ID0gKHQgKyBlcikgfCAwXG4gICAgYXIgPSBlclxuICAgIGVyID0gZHJcbiAgICBkciA9IHJvdGwoY3IsIDEwKVxuICAgIGNyID0gYnJcbiAgICBiciA9IHRcbiAgfVxuXG4gIC8vIGludGVybWVkaWF0ZSBoYXNoIHZhbHVlXG4gIHQgPSAoSFsxXSArIGNsICsgZHIpIHwgMFxuICBIWzFdID0gKEhbMl0gKyBkbCArIGVyKSB8IDBcbiAgSFsyXSA9IChIWzNdICsgZWwgKyBhcikgfCAwXG4gIEhbM10gPSAoSFs0XSArIGFsICsgYnIpIHwgMFxuICBIWzRdID0gKEhbMF0gKyBibCArIGNyKSB8IDBcbiAgSFswXSA9IHRcbn1cblxuZnVuY3Rpb24gZjEgKHgsIHksIHopIHtcbiAgcmV0dXJuICgoeCkgXiAoeSkgXiAoeikpXG59XG5cbmZ1bmN0aW9uIGYyICh4LCB5LCB6KSB7XG4gIHJldHVybiAoKCh4KSAmICh5KSkgfCAoKH54KSAmICh6KSkpXG59XG5cbmZ1bmN0aW9uIGYzICh4LCB5LCB6KSB7XG4gIHJldHVybiAoKCh4KSB8ICh+KHkpKSkgXiAoeikpXG59XG5cbmZ1bmN0aW9uIGY0ICh4LCB5LCB6KSB7XG4gIHJldHVybiAoKCh4KSAmICh6KSkgfCAoKHkpICYgKH4oeikpKSlcbn1cblxuZnVuY3Rpb24gZjUgKHgsIHksIHopIHtcbiAgcmV0dXJuICgoeCkgXiAoKHkpIHwgKH4oeikpKSlcbn1cblxuZnVuY3Rpb24gcm90bCAoeCwgbikge1xuICByZXR1cm4gKHggPDwgbikgfCAoeCA+Pj4gKDMyIC0gbikpXG59XG5cbmZ1bmN0aW9uIHJpcGVtZDE2MCAobWVzc2FnZSkge1xuICB2YXIgSCA9IFsweDY3NDUyMzAxLCAweEVGQ0RBQjg5LCAweDk4QkFEQ0ZFLCAweDEwMzI1NDc2LCAweEMzRDJFMUYwXVxuXG4gIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICBtZXNzYWdlID0gbmV3IEJ1ZmZlcihtZXNzYWdlLCAndXRmOCcpXG4gIH1cblxuICB2YXIgbSA9IGJ5dGVzVG9Xb3JkcyhtZXNzYWdlKVxuXG4gIHZhciBuQml0c0xlZnQgPSBtZXNzYWdlLmxlbmd0aCAqIDhcbiAgdmFyIG5CaXRzVG90YWwgPSBtZXNzYWdlLmxlbmd0aCAqIDhcblxuICAvLyBBZGQgcGFkZGluZ1xuICBtW25CaXRzTGVmdCA+Pj4gNV0gfD0gMHg4MCA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMilcbiAgbVsoKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTRdID0gKFxuICAgICgoKG5CaXRzVG90YWwgPDwgOCkgfCAobkJpdHNUb3RhbCA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcbiAgICAoKChuQml0c1RvdGFsIDw8IDI0KSB8IChuQml0c1RvdGFsID4+PiA4KSkgJiAweGZmMDBmZjAwKVxuICApXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtLmxlbmd0aDsgaSArPSAxNikge1xuICAgIHByb2Nlc3NCbG9jayhILCBtLCBpKVxuICB9XG5cbiAgLy8gc3dhcCBlbmRpYW5cbiAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykge1xuICAgIC8vIHNob3J0Y3V0XG4gICAgdmFyIEhfaSA9IEhbaV1cblxuICAgIC8vIFN3YXBcbiAgICBIW2ldID0gKCgoSF9pIDw8IDgpIHwgKEhfaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcbiAgICAgICgoKEhfaSA8PCAyNCkgfCAoSF9pID4+PiA4KSkgJiAweGZmMDBmZjAwKVxuICB9XG5cbiAgdmFyIGRpZ2VzdGJ5dGVzID0gd29yZHNUb0J5dGVzKEgpXG4gIHJldHVybiBuZXcgQnVmZmVyKGRpZ2VzdGJ5dGVzKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJpcGVtZDE2MFxuIiwiLy8gcHJvdG90eXBlIGNsYXNzIGZvciBoYXNoIGZ1bmN0aW9uc1xuZnVuY3Rpb24gSGFzaCAoYmxvY2tTaXplLCBmaW5hbFNpemUpIHtcbiAgdGhpcy5fYmxvY2sgPSBuZXcgQnVmZmVyKGJsb2NrU2l6ZSlcbiAgdGhpcy5fZmluYWxTaXplID0gZmluYWxTaXplXG4gIHRoaXMuX2Jsb2NrU2l6ZSA9IGJsb2NrU2l6ZVxuICB0aGlzLl9sZW4gPSAwXG4gIHRoaXMuX3MgPSAwXG59XG5cbkhhc2gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBlbmMpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgIGVuYyA9IGVuYyB8fCAndXRmOCdcbiAgICBkYXRhID0gbmV3IEJ1ZmZlcihkYXRhLCBlbmMpXG4gIH1cblxuICB2YXIgbCA9IHRoaXMuX2xlbiArPSBkYXRhLmxlbmd0aFxuICB2YXIgcyA9IHRoaXMuX3MgfHwgMFxuICB2YXIgZiA9IDBcbiAgdmFyIGJ1ZmZlciA9IHRoaXMuX2Jsb2NrXG5cbiAgd2hpbGUgKHMgPCBsKSB7XG4gICAgdmFyIHQgPSBNYXRoLm1pbihkYXRhLmxlbmd0aCwgZiArIHRoaXMuX2Jsb2NrU2l6ZSAtIChzICUgdGhpcy5fYmxvY2tTaXplKSlcbiAgICB2YXIgY2ggPSAodCAtIGYpXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoOyBpKyspIHtcbiAgICAgIGJ1ZmZlclsocyAlIHRoaXMuX2Jsb2NrU2l6ZSkgKyBpXSA9IGRhdGFbaSArIGZdXG4gICAgfVxuXG4gICAgcyArPSBjaFxuICAgIGYgKz0gY2hcblxuICAgIGlmICgocyAlIHRoaXMuX2Jsb2NrU2l6ZSkgPT09IDApIHtcbiAgICAgIHRoaXMuX3VwZGF0ZShidWZmZXIpXG4gICAgfVxuICB9XG4gIHRoaXMuX3MgPSBzXG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuSGFzaC5wcm90b3R5cGUuZGlnZXN0ID0gZnVuY3Rpb24gKGVuYykge1xuICAvLyBTdXBwb3NlIHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgTSwgaW4gYml0cywgaXMgbFxuICB2YXIgbCA9IHRoaXMuX2xlbiAqIDhcblxuICAvLyBBcHBlbmQgdGhlIGJpdCAxIHRvIHRoZSBlbmQgb2YgdGhlIG1lc3NhZ2VcbiAgdGhpcy5fYmxvY2tbdGhpcy5fbGVuICUgdGhpcy5fYmxvY2tTaXplXSA9IDB4ODBcblxuICAvLyBhbmQgdGhlbiBrIHplcm8gYml0cywgd2hlcmUgayBpcyB0aGUgc21hbGxlc3Qgbm9uLW5lZ2F0aXZlIHNvbHV0aW9uIHRvIHRoZSBlcXVhdGlvbiAobCArIDEgKyBrKSA9PT0gZmluYWxTaXplIG1vZCBibG9ja1NpemVcbiAgdGhpcy5fYmxvY2suZmlsbCgwLCB0aGlzLl9sZW4gJSB0aGlzLl9ibG9ja1NpemUgKyAxKVxuXG4gIGlmIChsICUgKHRoaXMuX2Jsb2NrU2l6ZSAqIDgpID49IHRoaXMuX2ZpbmFsU2l6ZSAqIDgpIHtcbiAgICB0aGlzLl91cGRhdGUodGhpcy5fYmxvY2spXG4gICAgdGhpcy5fYmxvY2suZmlsbCgwKVxuICB9XG5cbiAgLy8gdG8gdGhpcyBhcHBlbmQgdGhlIGJsb2NrIHdoaWNoIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgbCB3cml0dGVuIGluIGJpbmFyeVxuICAvLyBUT0RPOiBoYW5kbGUgY2FzZSB3aGVyZSBsIGlzID4gTWF0aC5wb3coMiwgMjkpXG4gIHRoaXMuX2Jsb2NrLndyaXRlSW50MzJCRShsLCB0aGlzLl9ibG9ja1NpemUgLSA0KVxuXG4gIHZhciBoYXNoID0gdGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKSB8fCB0aGlzLl9oYXNoKClcblxuICByZXR1cm4gZW5jID8gaGFzaC50b1N0cmluZyhlbmMpIDogaGFzaFxufVxuXG5IYXNoLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ191cGRhdGUgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzcycpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaFxuIiwidmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFNIQSAoYWxnb3JpdGhtKSB7XG4gIGFsZ29yaXRobSA9IGFsZ29yaXRobS50b0xvd2VyQ2FzZSgpXG5cbiAgdmFyIEFsZ29yaXRobSA9IGV4cG9ydHNbYWxnb3JpdGhtXVxuICBpZiAoIUFsZ29yaXRobSkgdGhyb3cgbmV3IEVycm9yKGFsZ29yaXRobSArICcgaXMgbm90IHN1cHBvcnRlZCAod2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMpJylcblxuICByZXR1cm4gbmV3IEFsZ29yaXRobSgpXG59XG5cbmV4cG9ydHMuc2hhID0gcmVxdWlyZSgnLi9zaGEnKVxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGExJylcbmV4cG9ydHMuc2hhMjI0ID0gcmVxdWlyZSgnLi9zaGEyMjQnKVxuZXhwb3J0cy5zaGEyNTYgPSByZXF1aXJlKCcuL3NoYTI1NicpXG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhMzg0JylcbmV4cG9ydHMuc2hhNTEyID0gcmVxdWlyZSgnLi9zaGE1MTInKVxuIiwiLypcbiAqIEEgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2VjdXJlIEhhc2ggQWxnb3JpdGhtLCBTSEEtMCwgYXMgZGVmaW5lZFxuICogaW4gRklQUyBQVUIgMTgwLTFcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNoYTEuanMgb2YgdGhlIHNhbWUgcmVwb3NpdG9yeS5cbiAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gU0hBLTAgYW5kIFNIQS0xIGlzIGp1c3QgYSBiaXR3aXNlIHJvdGF0ZSBsZWZ0XG4gKiBvcGVyYXRpb24gd2FzIGFkZGVkLlxuICovXG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBIYXNoID0gcmVxdWlyZSgnLi9oYXNoJylcblxudmFyIEsgPSBbXG4gIDB4NWE4Mjc5OTksIDB4NmVkOWViYTEsIDB4OGYxYmJjZGMgfCAwLCAweGNhNjJjMWQ2IHwgMFxuXVxuXG52YXIgVyA9IG5ldyBBcnJheSg4MClcblxuZnVuY3Rpb24gU2hhICgpIHtcbiAgdGhpcy5pbml0KClcbiAgdGhpcy5fdyA9IFdcblxuICBIYXNoLmNhbGwodGhpcywgNjQsIDU2KVxufVxuXG5pbmhlcml0cyhTaGEsIEhhc2gpXG5cblNoYS5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fYSA9IDB4Njc0NTIzMDFcbiAgdGhpcy5fYiA9IDB4ZWZjZGFiODlcbiAgdGhpcy5fYyA9IDB4OThiYWRjZmVcbiAgdGhpcy5fZCA9IDB4MTAzMjU0NzZcbiAgdGhpcy5fZSA9IDB4YzNkMmUxZjBcblxuICByZXR1cm4gdGhpc1xufVxuXG5mdW5jdGlvbiByb3RsNSAobnVtKSB7XG4gIHJldHVybiAobnVtIDw8IDUpIHwgKG51bSA+Pj4gMjcpXG59XG5cbmZ1bmN0aW9uIHJvdGwzMCAobnVtKSB7XG4gIHJldHVybiAobnVtIDw8IDMwKSB8IChudW0gPj4+IDIpXG59XG5cbmZ1bmN0aW9uIGZ0IChzLCBiLCBjLCBkKSB7XG4gIGlmIChzID09PSAwKSByZXR1cm4gKGIgJiBjKSB8ICgofmIpICYgZClcbiAgaWYgKHMgPT09IDIpIHJldHVybiAoYiAmIGMpIHwgKGIgJiBkKSB8IChjICYgZClcbiAgcmV0dXJuIGIgXiBjIF4gZFxufVxuXG5TaGEucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoTSkge1xuICB2YXIgVyA9IHRoaXMuX3dcblxuICB2YXIgYSA9IHRoaXMuX2EgfCAwXG4gIHZhciBiID0gdGhpcy5fYiB8IDBcbiAgdmFyIGMgPSB0aGlzLl9jIHwgMFxuICB2YXIgZCA9IHRoaXMuX2QgfCAwXG4gIHZhciBlID0gdGhpcy5fZSB8IDBcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyArK2kpIFdbaV0gPSBNLnJlYWRJbnQzMkJFKGkgKiA0KVxuICBmb3IgKDsgaSA8IDgwOyArK2kpIFdbaV0gPSBXW2kgLSAzXSBeIFdbaSAtIDhdIF4gV1tpIC0gMTRdIF4gV1tpIC0gMTZdXG5cbiAgZm9yICh2YXIgaiA9IDA7IGogPCA4MDsgKytqKSB7XG4gICAgdmFyIHMgPSB+fihqIC8gMjApXG4gICAgdmFyIHQgPSAocm90bDUoYSkgKyBmdChzLCBiLCBjLCBkKSArIGUgKyBXW2pdICsgS1tzXSkgfCAwXG5cbiAgICBlID0gZFxuICAgIGQgPSBjXG4gICAgYyA9IHJvdGwzMChiKVxuICAgIGIgPSBhXG4gICAgYSA9IHRcbiAgfVxuXG4gIHRoaXMuX2EgPSAoYSArIHRoaXMuX2EpIHwgMFxuICB0aGlzLl9iID0gKGIgKyB0aGlzLl9iKSB8IDBcbiAgdGhpcy5fYyA9IChjICsgdGhpcy5fYykgfCAwXG4gIHRoaXMuX2QgPSAoZCArIHRoaXMuX2QpIHwgMFxuICB0aGlzLl9lID0gKGUgKyB0aGlzLl9lKSB8IDBcbn1cblxuU2hhLnByb3RvdHlwZS5faGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIEggPSBuZXcgQnVmZmVyKDIwKVxuXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2EgfCAwLCAwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9iIHwgMCwgNClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYyB8IDAsIDgpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2QgfCAwLCAxMilcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZSB8IDAsIDE2KVxuXG4gIHJldHVybiBIXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhXG4iLCIvKlxuICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTZWN1cmUgSGFzaCBBbGdvcml0aG0sIFNIQS0xLCBhcyBkZWZpbmVkXG4gKiBpbiBGSVBTIFBVQiAxODAtMVxuICogVmVyc2lvbiAyLjFhIENvcHlyaWdodCBQYXVsIEpvaG5zdG9uIDIwMDAgLSAyMDAyLlxuICogT3RoZXIgY29udHJpYnV0b3JzOiBHcmVnIEhvbHQsIEFuZHJldyBLZXBlcnQsIFlkbmFyLCBMb3N0aW5ldFxuICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBMaWNlbnNlXG4gKiBTZWUgaHR0cDovL3BhamhvbWUub3JnLnVrL2NyeXB0L21kNSBmb3IgZGV0YWlscy5cbiAqL1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgSGFzaCA9IHJlcXVpcmUoJy4vaGFzaCcpXG5cbnZhciBLID0gW1xuICAweDVhODI3OTk5LCAweDZlZDllYmExLCAweDhmMWJiY2RjIHwgMCwgMHhjYTYyYzFkNiB8IDBcbl1cblxudmFyIFcgPSBuZXcgQXJyYXkoODApXG5cbmZ1bmN0aW9uIFNoYTEgKCkge1xuICB0aGlzLmluaXQoKVxuICB0aGlzLl93ID0gV1xuXG4gIEhhc2guY2FsbCh0aGlzLCA2NCwgNTYpXG59XG5cbmluaGVyaXRzKFNoYTEsIEhhc2gpXG5cblNoYTEucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2EgPSAweDY3NDUyMzAxXG4gIHRoaXMuX2IgPSAweGVmY2RhYjg5XG4gIHRoaXMuX2MgPSAweDk4YmFkY2ZlXG4gIHRoaXMuX2QgPSAweDEwMzI1NDc2XG4gIHRoaXMuX2UgPSAweGMzZDJlMWYwXG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuZnVuY3Rpb24gcm90bDEgKG51bSkge1xuICByZXR1cm4gKG51bSA8PCAxKSB8IChudW0gPj4+IDMxKVxufVxuXG5mdW5jdGlvbiByb3RsNSAobnVtKSB7XG4gIHJldHVybiAobnVtIDw8IDUpIHwgKG51bSA+Pj4gMjcpXG59XG5cbmZ1bmN0aW9uIHJvdGwzMCAobnVtKSB7XG4gIHJldHVybiAobnVtIDw8IDMwKSB8IChudW0gPj4+IDIpXG59XG5cbmZ1bmN0aW9uIGZ0IChzLCBiLCBjLCBkKSB7XG4gIGlmIChzID09PSAwKSByZXR1cm4gKGIgJiBjKSB8ICgofmIpICYgZClcbiAgaWYgKHMgPT09IDIpIHJldHVybiAoYiAmIGMpIHwgKGIgJiBkKSB8IChjICYgZClcbiAgcmV0dXJuIGIgXiBjIF4gZFxufVxuXG5TaGExLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKE0pIHtcbiAgdmFyIFcgPSB0aGlzLl93XG5cbiAgdmFyIGEgPSB0aGlzLl9hIHwgMFxuICB2YXIgYiA9IHRoaXMuX2IgfCAwXG4gIHZhciBjID0gdGhpcy5fYyB8IDBcbiAgdmFyIGQgPSB0aGlzLl9kIHwgMFxuICB2YXIgZSA9IHRoaXMuX2UgfCAwXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgKytpKSBXW2ldID0gTS5yZWFkSW50MzJCRShpICogNClcbiAgZm9yICg7IGkgPCA4MDsgKytpKSBXW2ldID0gcm90bDEoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSlcblxuICBmb3IgKHZhciBqID0gMDsgaiA8IDgwOyArK2opIHtcbiAgICB2YXIgcyA9IH5+KGogLyAyMClcbiAgICB2YXIgdCA9IChyb3RsNShhKSArIGZ0KHMsIGIsIGMsIGQpICsgZSArIFdbal0gKyBLW3NdKSB8IDBcblxuICAgIGUgPSBkXG4gICAgZCA9IGNcbiAgICBjID0gcm90bDMwKGIpXG4gICAgYiA9IGFcbiAgICBhID0gdFxuICB9XG5cbiAgdGhpcy5fYSA9IChhICsgdGhpcy5fYSkgfCAwXG4gIHRoaXMuX2IgPSAoYiArIHRoaXMuX2IpIHwgMFxuICB0aGlzLl9jID0gKGMgKyB0aGlzLl9jKSB8IDBcbiAgdGhpcy5fZCA9IChkICsgdGhpcy5fZCkgfCAwXG4gIHRoaXMuX2UgPSAoZSArIHRoaXMuX2UpIHwgMFxufVxuXG5TaGExLnByb3RvdHlwZS5faGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIEggPSBuZXcgQnVmZmVyKDIwKVxuXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2EgfCAwLCAwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9iIHwgMCwgNClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYyB8IDAsIDgpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2QgfCAwLCAxMilcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZSB8IDAsIDE2KVxuXG4gIHJldHVybiBIXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhMVxuIiwiLyoqXG4gKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNlY3VyZSBIYXNoIEFsZ29yaXRobSwgU0hBLTI1NiwgYXMgZGVmaW5lZFxuICogaW4gRklQUyAxODAtMlxuICogVmVyc2lvbiAyLjItYmV0YSBDb3B5cmlnaHQgQW5nZWwgTWFyaW4sIFBhdWwgSm9obnN0b24gMjAwMCAtIDIwMDkuXG4gKiBPdGhlciBjb250cmlidXRvcnM6IEdyZWcgSG9sdCwgQW5kcmV3IEtlcGVydCwgWWRuYXIsIExvc3RpbmV0XG4gKlxuICovXG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBTaGEyNTYgPSByZXF1aXJlKCcuL3NoYTI1NicpXG52YXIgSGFzaCA9IHJlcXVpcmUoJy4vaGFzaCcpXG5cbnZhciBXID0gbmV3IEFycmF5KDY0KVxuXG5mdW5jdGlvbiBTaGEyMjQgKCkge1xuICB0aGlzLmluaXQoKVxuXG4gIHRoaXMuX3cgPSBXIC8vIG5ldyBBcnJheSg2NClcblxuICBIYXNoLmNhbGwodGhpcywgNjQsIDU2KVxufVxuXG5pbmhlcml0cyhTaGEyMjQsIFNoYTI1NilcblxuU2hhMjI0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9hID0gMHhjMTA1OWVkOFxuICB0aGlzLl9iID0gMHgzNjdjZDUwN1xuICB0aGlzLl9jID0gMHgzMDcwZGQxN1xuICB0aGlzLl9kID0gMHhmNzBlNTkzOVxuICB0aGlzLl9lID0gMHhmZmMwMGIzMVxuICB0aGlzLl9mID0gMHg2ODU4MTUxMVxuICB0aGlzLl9nID0gMHg2NGY5OGZhN1xuICB0aGlzLl9oID0gMHhiZWZhNGZhNFxuXG4gIHJldHVybiB0aGlzXG59XG5cblNoYTIyNC5wcm90b3R5cGUuX2hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBIID0gbmV3IEJ1ZmZlcigyOClcblxuICBILndyaXRlSW50MzJCRSh0aGlzLl9hLCAwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9iLCA0KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9jLCA4KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9kLCAxMilcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZSwgMTYpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2YsIDIwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9nLCAyNClcblxuICByZXR1cm4gSFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYTIyNFxuIiwiLyoqXG4gKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNlY3VyZSBIYXNoIEFsZ29yaXRobSwgU0hBLTI1NiwgYXMgZGVmaW5lZFxuICogaW4gRklQUyAxODAtMlxuICogVmVyc2lvbiAyLjItYmV0YSBDb3B5cmlnaHQgQW5nZWwgTWFyaW4sIFBhdWwgSm9obnN0b24gMjAwMCAtIDIwMDkuXG4gKiBPdGhlciBjb250cmlidXRvcnM6IEdyZWcgSG9sdCwgQW5kcmV3IEtlcGVydCwgWWRuYXIsIExvc3RpbmV0XG4gKlxuICovXG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBIYXNoID0gcmVxdWlyZSgnLi9oYXNoJylcblxudmFyIEsgPSBbXG4gIDB4NDI4QTJGOTgsIDB4NzEzNzQ0OTEsIDB4QjVDMEZCQ0YsIDB4RTlCNURCQTUsXG4gIDB4Mzk1NkMyNUIsIDB4NTlGMTExRjEsIDB4OTIzRjgyQTQsIDB4QUIxQzVFRDUsXG4gIDB4RDgwN0FBOTgsIDB4MTI4MzVCMDEsIDB4MjQzMTg1QkUsIDB4NTUwQzdEQzMsXG4gIDB4NzJCRTVENzQsIDB4ODBERUIxRkUsIDB4OUJEQzA2QTcsIDB4QzE5QkYxNzQsXG4gIDB4RTQ5QjY5QzEsIDB4RUZCRTQ3ODYsIDB4MEZDMTlEQzYsIDB4MjQwQ0ExQ0MsXG4gIDB4MkRFOTJDNkYsIDB4NEE3NDg0QUEsIDB4NUNCMEE5REMsIDB4NzZGOTg4REEsXG4gIDB4OTgzRTUxNTIsIDB4QTgzMUM2NkQsIDB4QjAwMzI3QzgsIDB4QkY1OTdGQzcsXG4gIDB4QzZFMDBCRjMsIDB4RDVBNzkxNDcsIDB4MDZDQTYzNTEsIDB4MTQyOTI5NjcsXG4gIDB4MjdCNzBBODUsIDB4MkUxQjIxMzgsIDB4NEQyQzZERkMsIDB4NTMzODBEMTMsXG4gIDB4NjUwQTczNTQsIDB4NzY2QTBBQkIsIDB4ODFDMkM5MkUsIDB4OTI3MjJDODUsXG4gIDB4QTJCRkU4QTEsIDB4QTgxQTY2NEIsIDB4QzI0QjhCNzAsIDB4Qzc2QzUxQTMsXG4gIDB4RDE5MkU4MTksIDB4RDY5OTA2MjQsIDB4RjQwRTM1ODUsIDB4MTA2QUEwNzAsXG4gIDB4MTlBNEMxMTYsIDB4MUUzNzZDMDgsIDB4Mjc0ODc3NEMsIDB4MzRCMEJDQjUsXG4gIDB4MzkxQzBDQjMsIDB4NEVEOEFBNEEsIDB4NUI5Q0NBNEYsIDB4NjgyRTZGRjMsXG4gIDB4NzQ4RjgyRUUsIDB4NzhBNTYzNkYsIDB4ODRDODc4MTQsIDB4OENDNzAyMDgsXG4gIDB4OTBCRUZGRkEsIDB4QTQ1MDZDRUIsIDB4QkVGOUEzRjcsIDB4QzY3MTc4RjJcbl1cblxudmFyIFcgPSBuZXcgQXJyYXkoNjQpXG5cbmZ1bmN0aW9uIFNoYTI1NiAoKSB7XG4gIHRoaXMuaW5pdCgpXG5cbiAgdGhpcy5fdyA9IFcgLy8gbmV3IEFycmF5KDY0KVxuXG4gIEhhc2guY2FsbCh0aGlzLCA2NCwgNTYpXG59XG5cbmluaGVyaXRzKFNoYTI1NiwgSGFzaClcblxuU2hhMjU2LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9hID0gMHg2YTA5ZTY2N1xuICB0aGlzLl9iID0gMHhiYjY3YWU4NVxuICB0aGlzLl9jID0gMHgzYzZlZjM3MlxuICB0aGlzLl9kID0gMHhhNTRmZjUzYVxuICB0aGlzLl9lID0gMHg1MTBlNTI3ZlxuICB0aGlzLl9mID0gMHg5YjA1Njg4Y1xuICB0aGlzLl9nID0gMHgxZjgzZDlhYlxuICB0aGlzLl9oID0gMHg1YmUwY2QxOVxuXG4gIHJldHVybiB0aGlzXG59XG5cbmZ1bmN0aW9uIGNoICh4LCB5LCB6KSB7XG4gIHJldHVybiB6IF4gKHggJiAoeSBeIHopKVxufVxuXG5mdW5jdGlvbiBtYWogKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgfCAoeiAmICh4IHwgeSkpXG59XG5cbmZ1bmN0aW9uIHNpZ21hMCAoeCkge1xuICByZXR1cm4gKHggPj4+IDIgfCB4IDw8IDMwKSBeICh4ID4+PiAxMyB8IHggPDwgMTkpIF4gKHggPj4+IDIyIHwgeCA8PCAxMClcbn1cblxuZnVuY3Rpb24gc2lnbWExICh4KSB7XG4gIHJldHVybiAoeCA+Pj4gNiB8IHggPDwgMjYpIF4gKHggPj4+IDExIHwgeCA8PCAyMSkgXiAoeCA+Pj4gMjUgfCB4IDw8IDcpXG59XG5cbmZ1bmN0aW9uIGdhbW1hMCAoeCkge1xuICByZXR1cm4gKHggPj4+IDcgfCB4IDw8IDI1KSBeICh4ID4+PiAxOCB8IHggPDwgMTQpIF4gKHggPj4+IDMpXG59XG5cbmZ1bmN0aW9uIGdhbW1hMSAoeCkge1xuICByZXR1cm4gKHggPj4+IDE3IHwgeCA8PCAxNSkgXiAoeCA+Pj4gMTkgfCB4IDw8IDEzKSBeICh4ID4+PiAxMClcbn1cblxuU2hhMjU2LnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKE0pIHtcbiAgdmFyIFcgPSB0aGlzLl93XG5cbiAgdmFyIGEgPSB0aGlzLl9hIHwgMFxuICB2YXIgYiA9IHRoaXMuX2IgfCAwXG4gIHZhciBjID0gdGhpcy5fYyB8IDBcbiAgdmFyIGQgPSB0aGlzLl9kIHwgMFxuICB2YXIgZSA9IHRoaXMuX2UgfCAwXG4gIHZhciBmID0gdGhpcy5fZiB8IDBcbiAgdmFyIGcgPSB0aGlzLl9nIHwgMFxuICB2YXIgaCA9IHRoaXMuX2ggfCAwXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgKytpKSBXW2ldID0gTS5yZWFkSW50MzJCRShpICogNClcbiAgZm9yICg7IGkgPCA2NDsgKytpKSBXW2ldID0gKGdhbW1hMShXW2kgLSAyXSkgKyBXW2kgLSA3XSArIGdhbW1hMChXW2kgLSAxNV0pICsgV1tpIC0gMTZdKSB8IDBcblxuICBmb3IgKHZhciBqID0gMDsgaiA8IDY0OyArK2opIHtcbiAgICB2YXIgVDEgPSAoaCArIHNpZ21hMShlKSArIGNoKGUsIGYsIGcpICsgS1tqXSArIFdbal0pIHwgMFxuICAgIHZhciBUMiA9IChzaWdtYTAoYSkgKyBtYWooYSwgYiwgYykpIHwgMFxuXG4gICAgaCA9IGdcbiAgICBnID0gZlxuICAgIGYgPSBlXG4gICAgZSA9IChkICsgVDEpIHwgMFxuICAgIGQgPSBjXG4gICAgYyA9IGJcbiAgICBiID0gYVxuICAgIGEgPSAoVDEgKyBUMikgfCAwXG4gIH1cblxuICB0aGlzLl9hID0gKGEgKyB0aGlzLl9hKSB8IDBcbiAgdGhpcy5fYiA9IChiICsgdGhpcy5fYikgfCAwXG4gIHRoaXMuX2MgPSAoYyArIHRoaXMuX2MpIHwgMFxuICB0aGlzLl9kID0gKGQgKyB0aGlzLl9kKSB8IDBcbiAgdGhpcy5fZSA9IChlICsgdGhpcy5fZSkgfCAwXG4gIHRoaXMuX2YgPSAoZiArIHRoaXMuX2YpIHwgMFxuICB0aGlzLl9nID0gKGcgKyB0aGlzLl9nKSB8IDBcbiAgdGhpcy5faCA9IChoICsgdGhpcy5faCkgfCAwXG59XG5cblNoYTI1Ni5wcm90b3R5cGUuX2hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBIID0gbmV3IEJ1ZmZlcigzMilcblxuICBILndyaXRlSW50MzJCRSh0aGlzLl9hLCAwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9iLCA0KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9jLCA4KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9kLCAxMilcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZSwgMTYpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2YsIDIwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9nLCAyNClcbiAgSC53cml0ZUludDMyQkUodGhpcy5faCwgMjgpXG5cbiAgcmV0dXJuIEhcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGEyNTZcbiIsInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBTSEE1MTIgPSByZXF1aXJlKCcuL3NoYTUxMicpXG52YXIgSGFzaCA9IHJlcXVpcmUoJy4vaGFzaCcpXG5cbnZhciBXID0gbmV3IEFycmF5KDE2MClcblxuZnVuY3Rpb24gU2hhMzg0ICgpIHtcbiAgdGhpcy5pbml0KClcbiAgdGhpcy5fdyA9IFdcblxuICBIYXNoLmNhbGwodGhpcywgMTI4LCAxMTIpXG59XG5cbmluaGVyaXRzKFNoYTM4NCwgU0hBNTEyKVxuXG5TaGEzODQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2FoID0gMHhjYmJiOWQ1ZFxuICB0aGlzLl9iaCA9IDB4NjI5YTI5MmFcbiAgdGhpcy5fY2ggPSAweDkxNTkwMTVhXG4gIHRoaXMuX2RoID0gMHgxNTJmZWNkOFxuICB0aGlzLl9laCA9IDB4NjczMzI2NjdcbiAgdGhpcy5fZmggPSAweDhlYjQ0YTg3XG4gIHRoaXMuX2doID0gMHhkYjBjMmUwZFxuICB0aGlzLl9oaCA9IDB4NDdiNTQ4MWRcblxuICB0aGlzLl9hbCA9IDB4YzEwNTllZDhcbiAgdGhpcy5fYmwgPSAweDM2N2NkNTA3XG4gIHRoaXMuX2NsID0gMHgzMDcwZGQxN1xuICB0aGlzLl9kbCA9IDB4ZjcwZTU5MzlcbiAgdGhpcy5fZWwgPSAweGZmYzAwYjMxXG4gIHRoaXMuX2ZsID0gMHg2ODU4MTUxMVxuICB0aGlzLl9nbCA9IDB4NjRmOThmYTdcbiAgdGhpcy5faGwgPSAweGJlZmE0ZmE0XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuU2hhMzg0LnByb3RvdHlwZS5faGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIEggPSBuZXcgQnVmZmVyKDQ4KVxuXG4gIGZ1bmN0aW9uIHdyaXRlSW50NjRCRSAoaCwgbCwgb2Zmc2V0KSB7XG4gICAgSC53cml0ZUludDMyQkUoaCwgb2Zmc2V0KVxuICAgIEgud3JpdGVJbnQzMkJFKGwsIG9mZnNldCArIDQpXG4gIH1cblxuICB3cml0ZUludDY0QkUodGhpcy5fYWgsIHRoaXMuX2FsLCAwKVxuICB3cml0ZUludDY0QkUodGhpcy5fYmgsIHRoaXMuX2JsLCA4KVxuICB3cml0ZUludDY0QkUodGhpcy5fY2gsIHRoaXMuX2NsLCAxNilcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2RoLCB0aGlzLl9kbCwgMjQpXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9laCwgdGhpcy5fZWwsIDMyKVxuICB3cml0ZUludDY0QkUodGhpcy5fZmgsIHRoaXMuX2ZsLCA0MClcblxuICByZXR1cm4gSFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYTM4NFxuIiwidmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIEhhc2ggPSByZXF1aXJlKCcuL2hhc2gnKVxuXG52YXIgSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXVxuXG52YXIgVyA9IG5ldyBBcnJheSgxNjApXG5cbmZ1bmN0aW9uIFNoYTUxMiAoKSB7XG4gIHRoaXMuaW5pdCgpXG4gIHRoaXMuX3cgPSBXXG5cbiAgSGFzaC5jYWxsKHRoaXMsIDEyOCwgMTEyKVxufVxuXG5pbmhlcml0cyhTaGE1MTIsIEhhc2gpXG5cblNoYTUxMi5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fYWggPSAweDZhMDllNjY3XG4gIHRoaXMuX2JoID0gMHhiYjY3YWU4NVxuICB0aGlzLl9jaCA9IDB4M2M2ZWYzNzJcbiAgdGhpcy5fZGggPSAweGE1NGZmNTNhXG4gIHRoaXMuX2VoID0gMHg1MTBlNTI3ZlxuICB0aGlzLl9maCA9IDB4OWIwNTY4OGNcbiAgdGhpcy5fZ2ggPSAweDFmODNkOWFiXG4gIHRoaXMuX2hoID0gMHg1YmUwY2QxOVxuXG4gIHRoaXMuX2FsID0gMHhmM2JjYzkwOFxuICB0aGlzLl9ibCA9IDB4ODRjYWE3M2JcbiAgdGhpcy5fY2wgPSAweGZlOTRmODJiXG4gIHRoaXMuX2RsID0gMHg1ZjFkMzZmMVxuICB0aGlzLl9lbCA9IDB4YWRlNjgyZDFcbiAgdGhpcy5fZmwgPSAweDJiM2U2YzFmXG4gIHRoaXMuX2dsID0gMHhmYjQxYmQ2YlxuICB0aGlzLl9obCA9IDB4MTM3ZTIxNzlcblxuICByZXR1cm4gdGhpc1xufVxuXG5mdW5jdGlvbiBDaCAoeCwgeSwgeikge1xuICByZXR1cm4geiBeICh4ICYgKHkgXiB6KSlcbn1cblxuZnVuY3Rpb24gbWFqICh4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIHwgKHogJiAoeCB8IHkpKVxufVxuXG5mdW5jdGlvbiBzaWdtYTAgKHgsIHhsKSB7XG4gIHJldHVybiAoeCA+Pj4gMjggfCB4bCA8PCA0KSBeICh4bCA+Pj4gMiB8IHggPDwgMzApIF4gKHhsID4+PiA3IHwgeCA8PCAyNSlcbn1cblxuZnVuY3Rpb24gc2lnbWExICh4LCB4bCkge1xuICByZXR1cm4gKHggPj4+IDE0IHwgeGwgPDwgMTgpIF4gKHggPj4+IDE4IHwgeGwgPDwgMTQpIF4gKHhsID4+PiA5IHwgeCA8PCAyMylcbn1cblxuZnVuY3Rpb24gR2FtbWEwICh4LCB4bCkge1xuICByZXR1cm4gKHggPj4+IDEgfCB4bCA8PCAzMSkgXiAoeCA+Pj4gOCB8IHhsIDw8IDI0KSBeICh4ID4+PiA3KVxufVxuXG5mdW5jdGlvbiBHYW1tYTBsICh4LCB4bCkge1xuICByZXR1cm4gKHggPj4+IDEgfCB4bCA8PCAzMSkgXiAoeCA+Pj4gOCB8IHhsIDw8IDI0KSBeICh4ID4+PiA3IHwgeGwgPDwgMjUpXG59XG5cbmZ1bmN0aW9uIEdhbW1hMSAoeCwgeGwpIHtcbiAgcmV0dXJuICh4ID4+PiAxOSB8IHhsIDw8IDEzKSBeICh4bCA+Pj4gMjkgfCB4IDw8IDMpIF4gKHggPj4+IDYpXG59XG5cbmZ1bmN0aW9uIEdhbW1hMWwgKHgsIHhsKSB7XG4gIHJldHVybiAoeCA+Pj4gMTkgfCB4bCA8PCAxMykgXiAoeGwgPj4+IDI5IHwgeCA8PCAzKSBeICh4ID4+PiA2IHwgeGwgPDwgMjYpXG59XG5cbmZ1bmN0aW9uIGdldENhcnJ5IChhLCBiKSB7XG4gIHJldHVybiAoYSA+Pj4gMCkgPCAoYiA+Pj4gMCkgPyAxIDogMFxufVxuXG5TaGE1MTIucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoTSkge1xuICB2YXIgVyA9IHRoaXMuX3dcblxuICB2YXIgYWggPSB0aGlzLl9haCB8IDBcbiAgdmFyIGJoID0gdGhpcy5fYmggfCAwXG4gIHZhciBjaCA9IHRoaXMuX2NoIHwgMFxuICB2YXIgZGggPSB0aGlzLl9kaCB8IDBcbiAgdmFyIGVoID0gdGhpcy5fZWggfCAwXG4gIHZhciBmaCA9IHRoaXMuX2ZoIHwgMFxuICB2YXIgZ2ggPSB0aGlzLl9naCB8IDBcbiAgdmFyIGhoID0gdGhpcy5faGggfCAwXG5cbiAgdmFyIGFsID0gdGhpcy5fYWwgfCAwXG4gIHZhciBibCA9IHRoaXMuX2JsIHwgMFxuICB2YXIgY2wgPSB0aGlzLl9jbCB8IDBcbiAgdmFyIGRsID0gdGhpcy5fZGwgfCAwXG4gIHZhciBlbCA9IHRoaXMuX2VsIHwgMFxuICB2YXIgZmwgPSB0aGlzLl9mbCB8IDBcbiAgdmFyIGdsID0gdGhpcy5fZ2wgfCAwXG4gIHZhciBobCA9IHRoaXMuX2hsIHwgMFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkgKz0gMikge1xuICAgIFdbaV0gPSBNLnJlYWRJbnQzMkJFKGkgKiA0KVxuICAgIFdbaSArIDFdID0gTS5yZWFkSW50MzJCRShpICogNCArIDQpXG4gIH1cbiAgZm9yICg7IGkgPCAxNjA7IGkgKz0gMikge1xuICAgIHZhciB4aCA9IFdbaSAtIDE1ICogMl1cbiAgICB2YXIgeGwgPSBXW2kgLSAxNSAqIDIgKyAxXVxuICAgIHZhciBnYW1tYTAgPSBHYW1tYTAoeGgsIHhsKVxuICAgIHZhciBnYW1tYTBsID0gR2FtbWEwbCh4bCwgeGgpXG5cbiAgICB4aCA9IFdbaSAtIDIgKiAyXVxuICAgIHhsID0gV1tpIC0gMiAqIDIgKyAxXVxuICAgIHZhciBnYW1tYTEgPSBHYW1tYTEoeGgsIHhsKVxuICAgIHZhciBnYW1tYTFsID0gR2FtbWExbCh4bCwgeGgpXG5cbiAgICAvLyBXW2ldID0gZ2FtbWEwICsgV1tpIC0gN10gKyBnYW1tYTEgKyBXW2kgLSAxNl1cbiAgICB2YXIgV2k3aCA9IFdbaSAtIDcgKiAyXVxuICAgIHZhciBXaTdsID0gV1tpIC0gNyAqIDIgKyAxXVxuXG4gICAgdmFyIFdpMTZoID0gV1tpIC0gMTYgKiAyXVxuICAgIHZhciBXaTE2bCA9IFdbaSAtIDE2ICogMiArIDFdXG5cbiAgICB2YXIgV2lsID0gKGdhbW1hMGwgKyBXaTdsKSB8IDBcbiAgICB2YXIgV2loID0gKGdhbW1hMCArIFdpN2ggKyBnZXRDYXJyeShXaWwsIGdhbW1hMGwpKSB8IDBcbiAgICBXaWwgPSAoV2lsICsgZ2FtbWExbCkgfCAwXG4gICAgV2loID0gKFdpaCArIGdhbW1hMSArIGdldENhcnJ5KFdpbCwgZ2FtbWExbCkpIHwgMFxuICAgIFdpbCA9IChXaWwgKyBXaTE2bCkgfCAwXG4gICAgV2loID0gKFdpaCArIFdpMTZoICsgZ2V0Q2FycnkoV2lsLCBXaTE2bCkpIHwgMFxuXG4gICAgV1tpXSA9IFdpaFxuICAgIFdbaSArIDFdID0gV2lsXG4gIH1cblxuICBmb3IgKHZhciBqID0gMDsgaiA8IDE2MDsgaiArPSAyKSB7XG4gICAgV2loID0gV1tqXVxuICAgIFdpbCA9IFdbaiArIDFdXG5cbiAgICB2YXIgbWFqaCA9IG1haihhaCwgYmgsIGNoKVxuICAgIHZhciBtYWpsID0gbWFqKGFsLCBibCwgY2wpXG5cbiAgICB2YXIgc2lnbWEwaCA9IHNpZ21hMChhaCwgYWwpXG4gICAgdmFyIHNpZ21hMGwgPSBzaWdtYTAoYWwsIGFoKVxuICAgIHZhciBzaWdtYTFoID0gc2lnbWExKGVoLCBlbClcbiAgICB2YXIgc2lnbWExbCA9IHNpZ21hMShlbCwgZWgpXG5cbiAgICAvLyB0MSA9IGggKyBzaWdtYTEgKyBjaCArIEtbal0gKyBXW2pdXG4gICAgdmFyIEtpaCA9IEtbal1cbiAgICB2YXIgS2lsID0gS1tqICsgMV1cblxuICAgIHZhciBjaGggPSBDaChlaCwgZmgsIGdoKVxuICAgIHZhciBjaGwgPSBDaChlbCwgZmwsIGdsKVxuXG4gICAgdmFyIHQxbCA9IChobCArIHNpZ21hMWwpIHwgMFxuICAgIHZhciB0MWggPSAoaGggKyBzaWdtYTFoICsgZ2V0Q2FycnkodDFsLCBobCkpIHwgMFxuICAgIHQxbCA9ICh0MWwgKyBjaGwpIHwgMFxuICAgIHQxaCA9ICh0MWggKyBjaGggKyBnZXRDYXJyeSh0MWwsIGNobCkpIHwgMFxuICAgIHQxbCA9ICh0MWwgKyBLaWwpIHwgMFxuICAgIHQxaCA9ICh0MWggKyBLaWggKyBnZXRDYXJyeSh0MWwsIEtpbCkpIHwgMFxuICAgIHQxbCA9ICh0MWwgKyBXaWwpIHwgMFxuICAgIHQxaCA9ICh0MWggKyBXaWggKyBnZXRDYXJyeSh0MWwsIFdpbCkpIHwgMFxuXG4gICAgLy8gdDIgPSBzaWdtYTAgKyBtYWpcbiAgICB2YXIgdDJsID0gKHNpZ21hMGwgKyBtYWpsKSB8IDBcbiAgICB2YXIgdDJoID0gKHNpZ21hMGggKyBtYWpoICsgZ2V0Q2FycnkodDJsLCBzaWdtYTBsKSkgfCAwXG5cbiAgICBoaCA9IGdoXG4gICAgaGwgPSBnbFxuICAgIGdoID0gZmhcbiAgICBnbCA9IGZsXG4gICAgZmggPSBlaFxuICAgIGZsID0gZWxcbiAgICBlbCA9IChkbCArIHQxbCkgfCAwXG4gICAgZWggPSAoZGggKyB0MWggKyBnZXRDYXJyeShlbCwgZGwpKSB8IDBcbiAgICBkaCA9IGNoXG4gICAgZGwgPSBjbFxuICAgIGNoID0gYmhcbiAgICBjbCA9IGJsXG4gICAgYmggPSBhaFxuICAgIGJsID0gYWxcbiAgICBhbCA9ICh0MWwgKyB0MmwpIHwgMFxuICAgIGFoID0gKHQxaCArIHQyaCArIGdldENhcnJ5KGFsLCB0MWwpKSB8IDBcbiAgfVxuXG4gIHRoaXMuX2FsID0gKHRoaXMuX2FsICsgYWwpIHwgMFxuICB0aGlzLl9ibCA9ICh0aGlzLl9ibCArIGJsKSB8IDBcbiAgdGhpcy5fY2wgPSAodGhpcy5fY2wgKyBjbCkgfCAwXG4gIHRoaXMuX2RsID0gKHRoaXMuX2RsICsgZGwpIHwgMFxuICB0aGlzLl9lbCA9ICh0aGlzLl9lbCArIGVsKSB8IDBcbiAgdGhpcy5fZmwgPSAodGhpcy5fZmwgKyBmbCkgfCAwXG4gIHRoaXMuX2dsID0gKHRoaXMuX2dsICsgZ2wpIHwgMFxuICB0aGlzLl9obCA9ICh0aGlzLl9obCArIGhsKSB8IDBcblxuICB0aGlzLl9haCA9ICh0aGlzLl9haCArIGFoICsgZ2V0Q2FycnkodGhpcy5fYWwsIGFsKSkgfCAwXG4gIHRoaXMuX2JoID0gKHRoaXMuX2JoICsgYmggKyBnZXRDYXJyeSh0aGlzLl9ibCwgYmwpKSB8IDBcbiAgdGhpcy5fY2ggPSAodGhpcy5fY2ggKyBjaCArIGdldENhcnJ5KHRoaXMuX2NsLCBjbCkpIHwgMFxuICB0aGlzLl9kaCA9ICh0aGlzLl9kaCArIGRoICsgZ2V0Q2FycnkodGhpcy5fZGwsIGRsKSkgfCAwXG4gIHRoaXMuX2VoID0gKHRoaXMuX2VoICsgZWggKyBnZXRDYXJyeSh0aGlzLl9lbCwgZWwpKSB8IDBcbiAgdGhpcy5fZmggPSAodGhpcy5fZmggKyBmaCArIGdldENhcnJ5KHRoaXMuX2ZsLCBmbCkpIHwgMFxuICB0aGlzLl9naCA9ICh0aGlzLl9naCArIGdoICsgZ2V0Q2FycnkodGhpcy5fZ2wsIGdsKSkgfCAwXG4gIHRoaXMuX2hoID0gKHRoaXMuX2hoICsgaGggKyBnZXRDYXJyeSh0aGlzLl9obCwgaGwpKSB8IDBcbn1cblxuU2hhNTEyLnByb3RvdHlwZS5faGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIEggPSBuZXcgQnVmZmVyKDY0KVxuXG4gIGZ1bmN0aW9uIHdyaXRlSW50NjRCRSAoaCwgbCwgb2Zmc2V0KSB7XG4gICAgSC53cml0ZUludDMyQkUoaCwgb2Zmc2V0KVxuICAgIEgud3JpdGVJbnQzMkJFKGwsIG9mZnNldCArIDQpXG4gIH1cblxuICB3cml0ZUludDY0QkUodGhpcy5fYWgsIHRoaXMuX2FsLCAwKVxuICB3cml0ZUludDY0QkUodGhpcy5fYmgsIHRoaXMuX2JsLCA4KVxuICB3cml0ZUludDY0QkUodGhpcy5fY2gsIHRoaXMuX2NsLCAxNilcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2RoLCB0aGlzLl9kbCwgMjQpXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9laCwgdGhpcy5fZWwsIDMyKVxuICB3cml0ZUludDY0QkUodGhpcy5fZmgsIHRoaXMuX2ZsLCA0MClcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2doLCB0aGlzLl9nbCwgNDgpXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9oaCwgdGhpcy5faGwsIDU2KVxuXG4gIHJldHVybiBIXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhNTEyXG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxubW9kdWxlLmV4cG9ydHMgPSBTdHJlYW07XG5cbnZhciBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmluaGVyaXRzKFN0cmVhbSwgRUUpO1xuU3RyZWFtLlJlYWRhYmxlID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3JlYWRhYmxlLmpzJyk7XG5TdHJlYW0uV3JpdGFibGUgPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0vd3JpdGFibGUuanMnKTtcblN0cmVhbS5EdXBsZXggPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0vZHVwbGV4LmpzJyk7XG5TdHJlYW0uVHJhbnNmb3JtID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3RyYW5zZm9ybS5qcycpO1xuU3RyZWFtLlBhc3NUaHJvdWdoID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3Bhc3N0aHJvdWdoLmpzJyk7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuNC54XG5TdHJlYW0uU3RyZWFtID0gU3RyZWFtO1xuXG5cblxuLy8gb2xkLXN0eWxlIHN0cmVhbXMuICBOb3RlIHRoYXQgdGhlIHBpcGUgbWV0aG9kICh0aGUgb25seSByZWxldmFudFxuLy8gcGFydCBvZiB0aGlzIGNsYXNzKSBpcyBvdmVycmlkZGVuIGluIHRoZSBSZWFkYWJsZSBjbGFzcy5cblxuZnVuY3Rpb24gU3RyZWFtKCkge1xuICBFRS5jYWxsKHRoaXMpO1xufVxuXG5TdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0LCBvcHRpb25zKSB7XG4gIHZhciBzb3VyY2UgPSB0aGlzO1xuXG4gIGZ1bmN0aW9uIG9uZGF0YShjaHVuaykge1xuICAgIGlmIChkZXN0LndyaXRhYmxlKSB7XG4gICAgICBpZiAoZmFsc2UgPT09IGRlc3Qud3JpdGUoY2h1bmspICYmIHNvdXJjZS5wYXVzZSkge1xuICAgICAgICBzb3VyY2UucGF1c2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzb3VyY2Uub24oJ2RhdGEnLCBvbmRhdGEpO1xuXG4gIGZ1bmN0aW9uIG9uZHJhaW4oKSB7XG4gICAgaWYgKHNvdXJjZS5yZWFkYWJsZSAmJiBzb3VyY2UucmVzdW1lKSB7XG4gICAgICBzb3VyY2UucmVzdW1lKCk7XG4gICAgfVxuICB9XG5cbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKTtcblxuICAvLyBJZiB0aGUgJ2VuZCcgb3B0aW9uIGlzIG5vdCBzdXBwbGllZCwgZGVzdC5lbmQoKSB3aWxsIGJlIGNhbGxlZCB3aGVuXG4gIC8vIHNvdXJjZSBnZXRzIHRoZSAnZW5kJyBvciAnY2xvc2UnIGV2ZW50cy4gIE9ubHkgZGVzdC5lbmQoKSBvbmNlLlxuICBpZiAoIWRlc3QuX2lzU3RkaW8gJiYgKCFvcHRpb25zIHx8IG9wdGlvbnMuZW5kICE9PSBmYWxzZSkpIHtcbiAgICBzb3VyY2Uub24oJ2VuZCcsIG9uZW5kKTtcbiAgICBzb3VyY2Uub24oJ2Nsb3NlJywgb25jbG9zZSk7XG4gIH1cblxuICB2YXIgZGlkT25FbmQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgaWYgKGRpZE9uRW5kKSByZXR1cm47XG4gICAgZGlkT25FbmQgPSB0cnVlO1xuXG4gICAgZGVzdC5lbmQoKTtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBpZiAoZGlkT25FbmQpIHJldHVybjtcbiAgICBkaWRPbkVuZCA9IHRydWU7XG5cbiAgICBpZiAodHlwZW9mIGRlc3QuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgZGVzdC5kZXN0cm95KCk7XG4gIH1cblxuICAvLyBkb24ndCBsZWF2ZSBkYW5nbGluZyBwaXBlcyB3aGVuIHRoZXJlIGFyZSBlcnJvcnMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBjbGVhbnVwKCk7XG4gICAgaWYgKEVFLmxpc3RlbmVyQ291bnQodGhpcywgJ2Vycm9yJykgPT09IDApIHtcbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgc3RyZWFtIGVycm9yIGluIHBpcGUuXG4gICAgfVxuICB9XG5cbiAgc291cmNlLm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuICBkZXN0Lm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuXG4gIC8vIHJlbW92ZSBhbGwgdGhlIGV2ZW50IGxpc3RlbmVycyB0aGF0IHdlcmUgYWRkZWQuXG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pO1xuXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG5cbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIGNsZWFudXApO1xuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBjbGVhbnVwKTtcblxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgY2xlYW51cCk7XG4gIH1cblxuICBzb3VyY2Uub24oJ2VuZCcsIGNsZWFudXApO1xuICBzb3VyY2Uub24oJ2Nsb3NlJywgY2xlYW51cCk7XG5cbiAgZGVzdC5vbignY2xvc2UnLCBjbGVhbnVwKTtcblxuICBkZXN0LmVtaXQoJ3BpcGUnLCBzb3VyY2UpO1xuXG4gIC8vIEFsbG93IGZvciB1bml4LWxpa2UgdXNhZ2U6IEEucGlwZShCKS5waXBlKEMpXG4gIHJldHVybiBkZXN0O1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuXG52YXIgaXNCdWZmZXJFbmNvZGluZyA9IEJ1ZmZlci5pc0VuY29kaW5nXG4gIHx8IGZ1bmN0aW9uKGVuY29kaW5nKSB7XG4gICAgICAgc3dpdGNoIChlbmNvZGluZyAmJiBlbmNvZGluZy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICBjYXNlICdoZXgnOiBjYXNlICd1dGY4JzogY2FzZSAndXRmLTgnOiBjYXNlICdhc2NpaSc6IGNhc2UgJ2JpbmFyeSc6IGNhc2UgJ2Jhc2U2NCc6IGNhc2UgJ3VjczInOiBjYXNlICd1Y3MtMic6IGNhc2UgJ3V0ZjE2bGUnOiBjYXNlICd1dGYtMTZsZSc6IGNhc2UgJ3Jhdyc6IHJldHVybiB0cnVlO1xuICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGZhbHNlO1xuICAgICAgIH1cbiAgICAgfVxuXG5cbmZ1bmN0aW9uIGFzc2VydEVuY29kaW5nKGVuY29kaW5nKSB7XG4gIGlmIChlbmNvZGluZyAmJiAhaXNCdWZmZXJFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZyk7XG4gIH1cbn1cblxuLy8gU3RyaW5nRGVjb2RlciBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIGVmZmljaWVudGx5IHNwbGl0dGluZyBhIHNlcmllcyBvZlxuLy8gYnVmZmVycyBpbnRvIGEgc2VyaWVzIG9mIEpTIHN0cmluZ3Mgd2l0aG91dCBicmVha2luZyBhcGFydCBtdWx0aS1ieXRlXG4vLyBjaGFyYWN0ZXJzLiBDRVNVLTggaXMgaGFuZGxlZCBhcyBwYXJ0IG9mIHRoZSBVVEYtOCBlbmNvZGluZy5cbi8vXG4vLyBAVE9ETyBIYW5kbGluZyBhbGwgZW5jb2RpbmdzIGluc2lkZSBhIHNpbmdsZSBvYmplY3QgbWFrZXMgaXQgdmVyeSBkaWZmaWN1bHRcbi8vIHRvIHJlYXNvbiBhYm91dCB0aGlzIGNvZGUsIHNvIGl0IHNob3VsZCBiZSBzcGxpdCB1cCBpbiB0aGUgZnV0dXJlLlxuLy8gQFRPRE8gVGhlcmUgc2hvdWxkIGJlIGEgdXRmOC1zdHJpY3QgZW5jb2RpbmcgdGhhdCByZWplY3RzIGludmFsaWQgVVRGLTggY29kZVxuLy8gcG9pbnRzIGFzIHVzZWQgYnkgQ0VTVS04LlxudmFyIFN0cmluZ0RlY29kZXIgPSBleHBvcnRzLlN0cmluZ0RlY29kZXIgPSBmdW5jdGlvbihlbmNvZGluZykge1xuICB0aGlzLmVuY29kaW5nID0gKGVuY29kaW5nIHx8ICd1dGY4JykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9dLywgJycpO1xuICBhc3NlcnRFbmNvZGluZyhlbmNvZGluZyk7XG4gIHN3aXRjaCAodGhpcy5lbmNvZGluZykge1xuICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgLy8gQ0VTVS04IHJlcHJlc2VudHMgZWFjaCBvZiBTdXJyb2dhdGUgUGFpciBieSAzLWJ5dGVzXG4gICAgICB0aGlzLnN1cnJvZ2F0ZVNpemUgPSAzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICAvLyBVVEYtMTYgcmVwcmVzZW50cyBlYWNoIG9mIFN1cnJvZ2F0ZSBQYWlyIGJ5IDItYnl0ZXNcbiAgICAgIHRoaXMuc3Vycm9nYXRlU2l6ZSA9IDI7XG4gICAgICB0aGlzLmRldGVjdEluY29tcGxldGVDaGFyID0gdXRmMTZEZXRlY3RJbmNvbXBsZXRlQ2hhcjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAvLyBCYXNlLTY0IHN0b3JlcyAzIGJ5dGVzIGluIDQgY2hhcnMsIGFuZCBwYWRzIHRoZSByZW1haW5kZXIuXG4gICAgICB0aGlzLnN1cnJvZ2F0ZVNpemUgPSAzO1xuICAgICAgdGhpcy5kZXRlY3RJbmNvbXBsZXRlQ2hhciA9IGJhc2U2NERldGVjdEluY29tcGxldGVDaGFyO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRoaXMud3JpdGUgPSBwYXNzVGhyb3VnaFdyaXRlO1xuICAgICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRW5vdWdoIHNwYWNlIHRvIHN0b3JlIGFsbCBieXRlcyBvZiBhIHNpbmdsZSBjaGFyYWN0ZXIuIFVURi04IG5lZWRzIDRcbiAgLy8gYnl0ZXMsIGJ1dCBDRVNVLTggbWF5IHJlcXVpcmUgdXAgdG8gNiAoMyBieXRlcyBwZXIgc3Vycm9nYXRlKS5cbiAgdGhpcy5jaGFyQnVmZmVyID0gbmV3IEJ1ZmZlcig2KTtcbiAgLy8gTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGZvciB0aGUgY3VycmVudCBpbmNvbXBsZXRlIG11bHRpLWJ5dGUgY2hhcmFjdGVyLlxuICB0aGlzLmNoYXJSZWNlaXZlZCA9IDA7XG4gIC8vIE51bWJlciBvZiBieXRlcyBleHBlY3RlZCBmb3IgdGhlIGN1cnJlbnQgaW5jb21wbGV0ZSBtdWx0aS1ieXRlIGNoYXJhY3Rlci5cbiAgdGhpcy5jaGFyTGVuZ3RoID0gMDtcbn07XG5cblxuLy8gd3JpdGUgZGVjb2RlcyB0aGUgZ2l2ZW4gYnVmZmVyIGFuZCByZXR1cm5zIGl0IGFzIEpTIHN0cmluZyB0aGF0IGlzXG4vLyBndWFyYW50ZWVkIHRvIG5vdCBjb250YWluIGFueSBwYXJ0aWFsIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4gQW55IHBhcnRpYWxcbi8vIGNoYXJhY3RlciBmb3VuZCBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgaXMgYnVmZmVyZWQgdXAsIGFuZCB3aWxsIGJlXG4vLyByZXR1cm5lZCB3aGVuIGNhbGxpbmcgd3JpdGUgYWdhaW4gd2l0aCB0aGUgcmVtYWluaW5nIGJ5dGVzLlxuLy9cbi8vIE5vdGU6IENvbnZlcnRpbmcgYSBCdWZmZXIgY29udGFpbmluZyBhbiBvcnBoYW4gc3Vycm9nYXRlIHRvIGEgU3RyaW5nXG4vLyBjdXJyZW50bHkgd29ya3MsIGJ1dCBjb252ZXJ0aW5nIGEgU3RyaW5nIHRvIGEgQnVmZmVyICh2aWEgYG5ldyBCdWZmZXJgLCBvclxuLy8gQnVmZmVyI3dyaXRlKSB3aWxsIHJlcGxhY2UgaW5jb21wbGV0ZSBzdXJyb2dhdGVzIHdpdGggdGhlIHVuaWNvZGVcbi8vIHJlcGxhY2VtZW50IGNoYXJhY3Rlci4gU2VlIGh0dHBzOi8vY29kZXJldmlldy5jaHJvbWl1bS5vcmcvMTIxMTczMDA5LyAuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1ZmZlcikge1xuICB2YXIgY2hhclN0ciA9ICcnO1xuICAvLyBpZiBvdXIgbGFzdCB3cml0ZSBlbmRlZCB3aXRoIGFuIGluY29tcGxldGUgbXVsdGlieXRlIGNoYXJhY3RlclxuICB3aGlsZSAodGhpcy5jaGFyTGVuZ3RoKSB7XG4gICAgLy8gZGV0ZXJtaW5lIGhvdyBtYW55IHJlbWFpbmluZyBieXRlcyB0aGlzIGJ1ZmZlciBoYXMgdG8gb2ZmZXIgZm9yIHRoaXMgY2hhclxuICAgIHZhciBhdmFpbGFibGUgPSAoYnVmZmVyLmxlbmd0aCA+PSB0aGlzLmNoYXJMZW5ndGggLSB0aGlzLmNoYXJSZWNlaXZlZCkgP1xuICAgICAgICB0aGlzLmNoYXJMZW5ndGggLSB0aGlzLmNoYXJSZWNlaXZlZCA6XG4gICAgICAgIGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAvLyBhZGQgdGhlIG5ldyBieXRlcyB0byB0aGUgY2hhciBidWZmZXJcbiAgICBidWZmZXIuY29weSh0aGlzLmNoYXJCdWZmZXIsIHRoaXMuY2hhclJlY2VpdmVkLCAwLCBhdmFpbGFibGUpO1xuICAgIHRoaXMuY2hhclJlY2VpdmVkICs9IGF2YWlsYWJsZTtcblxuICAgIGlmICh0aGlzLmNoYXJSZWNlaXZlZCA8IHRoaXMuY2hhckxlbmd0aCkge1xuICAgICAgLy8gc3RpbGwgbm90IGVub3VnaCBjaGFycyBpbiB0aGlzIGJ1ZmZlcj8gd2FpdCBmb3IgbW9yZSAuLi5cbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgYnl0ZXMgYmVsb25naW5nIHRvIHRoZSBjdXJyZW50IGNoYXJhY3RlciBmcm9tIHRoZSBidWZmZXJcbiAgICBidWZmZXIgPSBidWZmZXIuc2xpY2UoYXZhaWxhYmxlLCBidWZmZXIubGVuZ3RoKTtcblxuICAgIC8vIGdldCB0aGUgY2hhcmFjdGVyIHRoYXQgd2FzIHNwbGl0XG4gICAgY2hhclN0ciA9IHRoaXMuY2hhckJ1ZmZlci5zbGljZSgwLCB0aGlzLmNoYXJMZW5ndGgpLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpO1xuXG4gICAgLy8gQ0VTVS04OiBsZWFkIHN1cnJvZ2F0ZSAoRDgwMC1EQkZGKSBpcyBhbHNvIHRoZSBpbmNvbXBsZXRlIGNoYXJhY3RlclxuICAgIHZhciBjaGFyQ29kZSA9IGNoYXJTdHIuY2hhckNvZGVBdChjaGFyU3RyLmxlbmd0aCAtIDEpO1xuICAgIGlmIChjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGKSB7XG4gICAgICB0aGlzLmNoYXJMZW5ndGggKz0gdGhpcy5zdXJyb2dhdGVTaXplO1xuICAgICAgY2hhclN0ciA9ICcnO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHRoaXMuY2hhclJlY2VpdmVkID0gdGhpcy5jaGFyTGVuZ3RoID0gMDtcblxuICAgIC8vIGlmIHRoZXJlIGFyZSBubyBtb3JlIGJ5dGVzIGluIHRoaXMgYnVmZmVyLCBqdXN0IGVtaXQgb3VyIGNoYXJcbiAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGNoYXJTdHI7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG5cbiAgLy8gZGV0ZXJtaW5lIGFuZCBzZXQgY2hhckxlbmd0aCAvIGNoYXJSZWNlaXZlZFxuICB0aGlzLmRldGVjdEluY29tcGxldGVDaGFyKGJ1ZmZlcik7XG5cbiAgdmFyIGVuZCA9IGJ1ZmZlci5sZW5ndGg7XG4gIGlmICh0aGlzLmNoYXJMZW5ndGgpIHtcbiAgICAvLyBidWZmZXIgdGhlIGluY29tcGxldGUgY2hhcmFjdGVyIGJ5dGVzIHdlIGdvdFxuICAgIGJ1ZmZlci5jb3B5KHRoaXMuY2hhckJ1ZmZlciwgMCwgYnVmZmVyLmxlbmd0aCAtIHRoaXMuY2hhclJlY2VpdmVkLCBlbmQpO1xuICAgIGVuZCAtPSB0aGlzLmNoYXJSZWNlaXZlZDtcbiAgfVxuXG4gIGNoYXJTdHIgKz0gYnVmZmVyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIGVuZCk7XG5cbiAgdmFyIGVuZCA9IGNoYXJTdHIubGVuZ3RoIC0gMTtcbiAgdmFyIGNoYXJDb2RlID0gY2hhclN0ci5jaGFyQ29kZUF0KGVuZCk7XG4gIC8vIENFU1UtODogbGVhZCBzdXJyb2dhdGUgKEQ4MDAtREJGRikgaXMgYWxzbyB0aGUgaW5jb21wbGV0ZSBjaGFyYWN0ZXJcbiAgaWYgKGNoYXJDb2RlID49IDB4RDgwMCAmJiBjaGFyQ29kZSA8PSAweERCRkYpIHtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuc3Vycm9nYXRlU2l6ZTtcbiAgICB0aGlzLmNoYXJMZW5ndGggKz0gc2l6ZTtcbiAgICB0aGlzLmNoYXJSZWNlaXZlZCArPSBzaXplO1xuICAgIHRoaXMuY2hhckJ1ZmZlci5jb3B5KHRoaXMuY2hhckJ1ZmZlciwgc2l6ZSwgMCwgc2l6ZSk7XG4gICAgYnVmZmVyLmNvcHkodGhpcy5jaGFyQnVmZmVyLCAwLCAwLCBzaXplKTtcbiAgICByZXR1cm4gY2hhclN0ci5zdWJzdHJpbmcoMCwgZW5kKTtcbiAgfVxuXG4gIC8vIG9yIGp1c3QgZW1pdCB0aGUgY2hhclN0clxuICByZXR1cm4gY2hhclN0cjtcbn07XG5cbi8vIGRldGVjdEluY29tcGxldGVDaGFyIGRldGVybWluZXMgaWYgdGhlcmUgaXMgYW4gaW5jb21wbGV0ZSBVVEYtOCBjaGFyYWN0ZXIgYXRcbi8vIHRoZSBlbmQgb2YgdGhlIGdpdmVuIGJ1ZmZlci4gSWYgc28sIGl0IHNldHMgdGhpcy5jaGFyTGVuZ3RoIHRvIHRoZSBieXRlXG4vLyBsZW5ndGggdGhhdCBjaGFyYWN0ZXIsIGFuZCBzZXRzIHRoaXMuY2hhclJlY2VpdmVkIHRvIHRoZSBudW1iZXIgb2YgYnl0ZXNcbi8vIHRoYXQgYXJlIGF2YWlsYWJsZSBmb3IgdGhpcyBjaGFyYWN0ZXIuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5kZXRlY3RJbmNvbXBsZXRlQ2hhciA9IGZ1bmN0aW9uKGJ1ZmZlcikge1xuICAvLyBkZXRlcm1pbmUgaG93IG1hbnkgYnl0ZXMgd2UgaGF2ZSB0byBjaGVjayBhdCB0aGUgZW5kIG9mIHRoaXMgYnVmZmVyXG4gIHZhciBpID0gKGJ1ZmZlci5sZW5ndGggPj0gMykgPyAzIDogYnVmZmVyLmxlbmd0aDtcblxuICAvLyBGaWd1cmUgb3V0IGlmIG9uZSBvZiB0aGUgbGFzdCBpIGJ5dGVzIG9mIG91ciBidWZmZXIgYW5ub3VuY2VzIGFuXG4gIC8vIGluY29tcGxldGUgY2hhci5cbiAgZm9yICg7IGkgPiAwOyBpLS0pIHtcbiAgICB2YXIgYyA9IGJ1ZmZlcltidWZmZXIubGVuZ3RoIC0gaV07XG5cbiAgICAvLyBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VVEYtOCNEZXNjcmlwdGlvblxuXG4gICAgLy8gMTEwWFhYWFhcbiAgICBpZiAoaSA9PSAxICYmIGMgPj4gNSA9PSAweDA2KSB7XG4gICAgICB0aGlzLmNoYXJMZW5ndGggPSAyO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gMTExMFhYWFhcbiAgICBpZiAoaSA8PSAyICYmIGMgPj4gNCA9PSAweDBFKSB7XG4gICAgICB0aGlzLmNoYXJMZW5ndGggPSAzO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gMTExMTBYWFhcbiAgICBpZiAoaSA8PSAzICYmIGMgPj4gMyA9PSAweDFFKSB7XG4gICAgICB0aGlzLmNoYXJMZW5ndGggPSA0O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHRoaXMuY2hhclJlY2VpdmVkID0gaTtcbn07XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKGJ1ZmZlcikge1xuICB2YXIgcmVzID0gJyc7XG4gIGlmIChidWZmZXIgJiYgYnVmZmVyLmxlbmd0aClcbiAgICByZXMgPSB0aGlzLndyaXRlKGJ1ZmZlcik7XG5cbiAgaWYgKHRoaXMuY2hhclJlY2VpdmVkKSB7XG4gICAgdmFyIGNyID0gdGhpcy5jaGFyUmVjZWl2ZWQ7XG4gICAgdmFyIGJ1ZiA9IHRoaXMuY2hhckJ1ZmZlcjtcbiAgICB2YXIgZW5jID0gdGhpcy5lbmNvZGluZztcbiAgICByZXMgKz0gYnVmLnNsaWNlKDAsIGNyKS50b1N0cmluZyhlbmMpO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG5cbmZ1bmN0aW9uIHBhc3NUaHJvdWdoV3JpdGUoYnVmZmVyKSB7XG4gIHJldHVybiBidWZmZXIudG9TdHJpbmcodGhpcy5lbmNvZGluZyk7XG59XG5cbmZ1bmN0aW9uIHV0ZjE2RGV0ZWN0SW5jb21wbGV0ZUNoYXIoYnVmZmVyKSB7XG4gIHRoaXMuY2hhclJlY2VpdmVkID0gYnVmZmVyLmxlbmd0aCAlIDI7XG4gIHRoaXMuY2hhckxlbmd0aCA9IHRoaXMuY2hhclJlY2VpdmVkID8gMiA6IDA7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NERldGVjdEluY29tcGxldGVDaGFyKGJ1ZmZlcikge1xuICB0aGlzLmNoYXJSZWNlaXZlZCA9IGJ1ZmZlci5sZW5ndGggJSAzO1xuICB0aGlzLmNoYXJMZW5ndGggPSB0aGlzLmNoYXJSZWNlaXZlZCA/IDMgOiAwO1xufVxuIiwiXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZGVwcmVjYXRlO1xuXG4vKipcbiAqIE1hcmsgdGhhdCBhIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWQuXG4gKiBSZXR1cm5zIGEgbW9kaWZpZWQgZnVuY3Rpb24gd2hpY2ggd2FybnMgb25jZSBieSBkZWZhdWx0LlxuICpcbiAqIElmIGBsb2NhbFN0b3JhZ2Uubm9EZXByZWNhdGlvbiA9IHRydWVgIGlzIHNldCwgdGhlbiBpdCBpcyBhIG5vLW9wLlxuICpcbiAqIElmIGBsb2NhbFN0b3JhZ2UudGhyb3dEZXByZWNhdGlvbiA9IHRydWVgIGlzIHNldCwgdGhlbiBkZXByZWNhdGVkIGZ1bmN0aW9uc1xuICogd2lsbCB0aHJvdyBhbiBFcnJvciB3aGVuIGludm9rZWQuXG4gKlxuICogSWYgYGxvY2FsU3RvcmFnZS50cmFjZURlcHJlY2F0aW9uID0gdHJ1ZWAgaXMgc2V0LCB0aGVuIGRlcHJlY2F0ZWQgZnVuY3Rpb25zXG4gKiB3aWxsIGludm9rZSBgY29uc29sZS50cmFjZSgpYCBpbnN0ZWFkIG9mIGBjb25zb2xlLmVycm9yKClgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gdGhlIGZ1bmN0aW9uIHRvIGRlcHJlY2F0ZVxuICogQHBhcmFtIHtTdHJpbmd9IG1zZyAtIHRoZSBzdHJpbmcgdG8gcHJpbnQgdG8gdGhlIGNvbnNvbGUgd2hlbiBgZm5gIGlzIGludm9rZWRcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gYSBuZXcgXCJkZXByZWNhdGVkXCIgdmVyc2lvbiBvZiBgZm5gXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGRlcHJlY2F0ZSAoZm4sIG1zZykge1xuICBpZiAoY29uZmlnKCdub0RlcHJlY2F0aW9uJykpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICB2YXIgd2FybmVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIGlmIChjb25maWcoJ3Rocm93RGVwcmVjYXRpb24nKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH0gZWxzZSBpZiAoY29uZmlnKCd0cmFjZURlcHJlY2F0aW9uJykpIHtcbiAgICAgICAgY29uc29sZS50cmFjZShtc2cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKG1zZyk7XG4gICAgICB9XG4gICAgICB3YXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBkZXByZWNhdGVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBgbG9jYWxTdG9yYWdlYCBmb3IgYm9vbGVhbiB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBgbmFtZWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY29uZmlnIChuYW1lKSB7XG4gIC8vIGFjY2Vzc2luZyBnbG9iYWwubG9jYWxTdG9yYWdlIGNhbiB0cmlnZ2VyIGEgRE9NRXhjZXB0aW9uIGluIHNhbmRib3hlZCBpZnJhbWVzXG4gIHRyeSB7XG4gICAgaWYgKCFnbG9iYWwubG9jYWxTdG9yYWdlKSByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHZhbCA9IGdsb2JhbC5sb2NhbFN0b3JhZ2VbbmFtZV07XG4gIGlmIChudWxsID09IHZhbCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gU3RyaW5nKHZhbCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlcihhcmcpIHtcbiAgcmV0dXJuIGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0J1xuICAgICYmIHR5cGVvZiBhcmcuY29weSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcuZmlsbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcucmVhZFVJbnQ4ID09PSAnZnVuY3Rpb24nO1xufSIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgZm9ybWF0UmVnRXhwID0gLyVbc2RqJV0vZztcbmV4cG9ydHMuZm9ybWF0ID0gZnVuY3Rpb24oZikge1xuICBpZiAoIWlzU3RyaW5nKGYpKSB7XG4gICAgdmFyIG9iamVjdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgb2JqZWN0cy5wdXNoKGluc3BlY3QoYXJndW1lbnRzW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3RzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHZhciBpID0gMTtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIHN0ciA9IFN0cmluZyhmKS5yZXBsYWNlKGZvcm1hdFJlZ0V4cCwgZnVuY3Rpb24oeCkge1xuICAgIGlmICh4ID09PSAnJSUnKSByZXR1cm4gJyUnO1xuICAgIGlmIChpID49IGxlbikgcmV0dXJuIHg7XG4gICAgc3dpdGNoICh4KSB7XG4gICAgICBjYXNlICclcyc6IHJldHVybiBTdHJpbmcoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVkJzogcmV0dXJuIE51bWJlcihhcmdzW2krK10pO1xuICAgICAgY2FzZSAnJWonOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcmdzW2krK10pO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICB9KTtcbiAgZm9yICh2YXIgeCA9IGFyZ3NbaV07IGkgPCBsZW47IHggPSBhcmdzWysraV0pIHtcbiAgICBpZiAoaXNOdWxsKHgpIHx8ICFpc09iamVjdCh4KSkge1xuICAgICAgc3RyICs9ICcgJyArIHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciArPSAnICcgKyBpbnNwZWN0KHgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyO1xufTtcblxuXG4vLyBNYXJrIHRoYXQgYSBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkLlxuLy8gUmV0dXJucyBhIG1vZGlmaWVkIGZ1bmN0aW9uIHdoaWNoIHdhcm5zIG9uY2UgYnkgZGVmYXVsdC5cbi8vIElmIC0tbm8tZGVwcmVjYXRpb24gaXMgc2V0LCB0aGVuIGl0IGlzIGEgbm8tb3AuXG5leHBvcnRzLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKGZuLCBtc2cpIHtcbiAgLy8gQWxsb3cgZm9yIGRlcHJlY2F0aW5nIHRoaW5ncyBpbiB0aGUgcHJvY2VzcyBvZiBzdGFydGluZyB1cC5cbiAgaWYgKGlzVW5kZWZpbmVkKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBleHBvcnRzLmRlcHJlY2F0ZShmbiwgbXNnKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cblxuICBpZiAocHJvY2Vzcy5ub0RlcHJlY2F0aW9uID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgIGlmICghd2FybmVkKSB7XG4gICAgICBpZiAocHJvY2Vzcy50aHJvd0RlcHJlY2F0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLnRyYWNlRGVwcmVjYXRpb24pIHtcbiAgICAgICAgY29uc29sZS50cmFjZShtc2cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xuICAgICAgfVxuICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gZGVwcmVjYXRlZDtcbn07XG5cblxudmFyIGRlYnVncyA9IHt9O1xudmFyIGRlYnVnRW52aXJvbjtcbmV4cG9ydHMuZGVidWdsb2cgPSBmdW5jdGlvbihzZXQpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKGRlYnVnRW52aXJvbikpXG4gICAgZGVidWdFbnZpcm9uID0gcHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJztcbiAgc2V0ID0gc2V0LnRvVXBwZXJDYXNlKCk7XG4gIGlmICghZGVidWdzW3NldF0pIHtcbiAgICBpZiAobmV3IFJlZ0V4cCgnXFxcXGInICsgc2V0ICsgJ1xcXFxiJywgJ2knKS50ZXN0KGRlYnVnRW52aXJvbikpIHtcbiAgICAgIHZhciBwaWQgPSBwcm9jZXNzLnBpZDtcbiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBtc2cgPSBleHBvcnRzLmZvcm1hdC5hcHBseShleHBvcnRzLCBhcmd1bWVudHMpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCclcyAlZDogJXMnLCBzZXQsIHBpZCwgbXNnKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24oKSB7fTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlYnVnc1tzZXRdO1xufTtcblxuXG4vKipcbiAqIEVjaG9zIHRoZSB2YWx1ZSBvZiBhIHZhbHVlLiBUcnlzIHRvIHByaW50IHRoZSB2YWx1ZSBvdXRcbiAqIGluIHRoZSBiZXN0IHdheSBwb3NzaWJsZSBnaXZlbiB0aGUgZGlmZmVyZW50IHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBwcmludCBvdXQuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25hbCBvcHRpb25zIG9iamVjdCB0aGF0IGFsdGVycyB0aGUgb3V0cHV0LlxuICovXG4vKiBsZWdhY3k6IG9iaiwgc2hvd0hpZGRlbiwgZGVwdGgsIGNvbG9ycyovXG5mdW5jdGlvbiBpbnNwZWN0KG9iaiwgb3B0cykge1xuICAvLyBkZWZhdWx0IG9wdGlvbnNcbiAgdmFyIGN0eCA9IHtcbiAgICBzZWVuOiBbXSxcbiAgICBzdHlsaXplOiBzdHlsaXplTm9Db2xvclxuICB9O1xuICAvLyBsZWdhY3kuLi5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykgY3R4LmRlcHRoID0gYXJndW1lbnRzWzJdO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSA0KSBjdHguY29sb3JzID0gYXJndW1lbnRzWzNdO1xuICBpZiAoaXNCb29sZWFuKG9wdHMpKSB7XG4gICAgLy8gbGVnYWN5Li4uXG4gICAgY3R4LnNob3dIaWRkZW4gPSBvcHRzO1xuICB9IGVsc2UgaWYgKG9wdHMpIHtcbiAgICAvLyBnb3QgYW4gXCJvcHRpb25zXCIgb2JqZWN0XG4gICAgZXhwb3J0cy5fZXh0ZW5kKGN0eCwgb3B0cyk7XG4gIH1cbiAgLy8gc2V0IGRlZmF1bHQgb3B0aW9uc1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LnNob3dIaWRkZW4pKSBjdHguc2hvd0hpZGRlbiA9IGZhbHNlO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmRlcHRoKSkgY3R4LmRlcHRoID0gMjtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jb2xvcnMpKSBjdHguY29sb3JzID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguY3VzdG9tSW5zcGVjdCkpIGN0eC5jdXN0b21JbnNwZWN0ID0gdHJ1ZTtcbiAgaWYgKGN0eC5jb2xvcnMpIGN0eC5zdHlsaXplID0gc3R5bGl6ZVdpdGhDb2xvcjtcbiAgcmV0dXJuIGZvcm1hdFZhbHVlKGN0eCwgb2JqLCBjdHguZGVwdGgpO1xufVxuZXhwb3J0cy5pbnNwZWN0ID0gaW5zcGVjdDtcblxuXG4vLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGUjZ3JhcGhpY3Ncbmluc3BlY3QuY29sb3JzID0ge1xuICAnYm9sZCcgOiBbMSwgMjJdLFxuICAnaXRhbGljJyA6IFszLCAyM10sXG4gICd1bmRlcmxpbmUnIDogWzQsIDI0XSxcbiAgJ2ludmVyc2UnIDogWzcsIDI3XSxcbiAgJ3doaXRlJyA6IFszNywgMzldLFxuICAnZ3JleScgOiBbOTAsIDM5XSxcbiAgJ2JsYWNrJyA6IFszMCwgMzldLFxuICAnYmx1ZScgOiBbMzQsIDM5XSxcbiAgJ2N5YW4nIDogWzM2LCAzOV0sXG4gICdncmVlbicgOiBbMzIsIDM5XSxcbiAgJ21hZ2VudGEnIDogWzM1LCAzOV0sXG4gICdyZWQnIDogWzMxLCAzOV0sXG4gICd5ZWxsb3cnIDogWzMzLCAzOV1cbn07XG5cbi8vIERvbid0IHVzZSAnYmx1ZScgbm90IHZpc2libGUgb24gY21kLmV4ZVxuaW5zcGVjdC5zdHlsZXMgPSB7XG4gICdzcGVjaWFsJzogJ2N5YW4nLFxuICAnbnVtYmVyJzogJ3llbGxvdycsXG4gICdib29sZWFuJzogJ3llbGxvdycsXG4gICd1bmRlZmluZWQnOiAnZ3JleScsXG4gICdudWxsJzogJ2JvbGQnLFxuICAnc3RyaW5nJzogJ2dyZWVuJyxcbiAgJ2RhdGUnOiAnbWFnZW50YScsXG4gIC8vIFwibmFtZVwiOiBpbnRlbnRpb25hbGx5IG5vdCBzdHlsaW5nXG4gICdyZWdleHAnOiAncmVkJ1xufTtcblxuXG5mdW5jdGlvbiBzdHlsaXplV2l0aENvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHZhciBzdHlsZSA9IGluc3BlY3Quc3R5bGVzW3N0eWxlVHlwZV07XG5cbiAgaWYgKHN0eWxlKSB7XG4gICAgcmV0dXJuICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMF0gKyAnbScgKyBzdHIgK1xuICAgICAgICAgICAnXFx1MDAxYlsnICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzFdICsgJ20nO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBzdHlsaXplTm9Db2xvcihzdHIsIHN0eWxlVHlwZSkge1xuICByZXR1cm4gc3RyO1xufVxuXG5cbmZ1bmN0aW9uIGFycmF5VG9IYXNoKGFycmF5KSB7XG4gIHZhciBoYXNoID0ge307XG5cbiAgYXJyYXkuZm9yRWFjaChmdW5jdGlvbih2YWwsIGlkeCkge1xuICAgIGhhc2hbdmFsXSA9IHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiBoYXNoO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFZhbHVlKGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcykge1xuICAvLyBQcm92aWRlIGEgaG9vayBmb3IgdXNlci1zcGVjaWZpZWQgaW5zcGVjdCBmdW5jdGlvbnMuXG4gIC8vIENoZWNrIHRoYXQgdmFsdWUgaXMgYW4gb2JqZWN0IHdpdGggYW4gaW5zcGVjdCBmdW5jdGlvbiBvbiBpdFxuICBpZiAoY3R4LmN1c3RvbUluc3BlY3QgJiZcbiAgICAgIHZhbHVlICYmXG4gICAgICBpc0Z1bmN0aW9uKHZhbHVlLmluc3BlY3QpICYmXG4gICAgICAvLyBGaWx0ZXIgb3V0IHRoZSB1dGlsIG1vZHVsZSwgaXQncyBpbnNwZWN0IGZ1bmN0aW9uIGlzIHNwZWNpYWxcbiAgICAgIHZhbHVlLmluc3BlY3QgIT09IGV4cG9ydHMuaW5zcGVjdCAmJlxuICAgICAgLy8gQWxzbyBmaWx0ZXIgb3V0IGFueSBwcm90b3R5cGUgb2JqZWN0cyB1c2luZyB0aGUgY2lyY3VsYXIgY2hlY2suXG4gICAgICAhKHZhbHVlLmNvbnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSA9PT0gdmFsdWUpKSB7XG4gICAgdmFyIHJldCA9IHZhbHVlLmluc3BlY3QocmVjdXJzZVRpbWVzLCBjdHgpO1xuICAgIGlmICghaXNTdHJpbmcocmV0KSkge1xuICAgICAgcmV0ID0gZm9ybWF0VmFsdWUoY3R4LCByZXQsIHJlY3Vyc2VUaW1lcyk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvLyBQcmltaXRpdmUgdHlwZXMgY2Fubm90IGhhdmUgcHJvcGVydGllc1xuICB2YXIgcHJpbWl0aXZlID0gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpO1xuICBpZiAocHJpbWl0aXZlKSB7XG4gICAgcmV0dXJuIHByaW1pdGl2ZTtcbiAgfVxuXG4gIC8vIExvb2sgdXAgdGhlIGtleXMgb2YgdGhlIG9iamVjdC5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG4gIHZhciB2aXNpYmxlS2V5cyA9IGFycmF5VG9IYXNoKGtleXMpO1xuXG4gIGlmIChjdHguc2hvd0hpZGRlbikge1xuICAgIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZSk7XG4gIH1cblxuICAvLyBJRSBkb2Vzbid0IG1ha2UgZXJyb3IgZmllbGRzIG5vbi1lbnVtZXJhYmxlXG4gIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9kd3c1MnNidCh2PXZzLjk0KS5hc3B4XG4gIGlmIChpc0Vycm9yKHZhbHVlKVxuICAgICAgJiYgKGtleXMuaW5kZXhPZignbWVzc2FnZScpID49IDAgfHwga2V5cy5pbmRleE9mKCdkZXNjcmlwdGlvbicpID49IDApKSB7XG4gICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgfVxuXG4gIC8vIFNvbWUgdHlwZSBvZiBvYmplY3Qgd2l0aG91dCBwcm9wZXJ0aWVzIGNhbiBiZSBzaG9ydGN1dHRlZC5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICB2YXIgbmFtZSA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbRnVuY3Rpb24nICsgbmFtZSArICddJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9XG4gICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ2RhdGUnKTtcbiAgICB9XG4gICAgaWYgKGlzRXJyb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBiYXNlID0gJycsIGFycmF5ID0gZmFsc2UsIGJyYWNlcyA9IFsneycsICd9J107XG5cbiAgLy8gTWFrZSBBcnJheSBzYXkgdGhhdCB0aGV5IGFyZSBBcnJheVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBhcnJheSA9IHRydWU7XG4gICAgYnJhY2VzID0gWydbJywgJ10nXTtcbiAgfVxuXG4gIC8vIE1ha2UgZnVuY3Rpb25zIHNheSB0aGF0IHRoZXkgYXJlIGZ1bmN0aW9uc1xuICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YXIgbiA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgIGJhc2UgPSAnIFtGdW5jdGlvbicgKyBuICsgJ10nO1xuICB9XG5cbiAgLy8gTWFrZSBSZWdFeHBzIHNheSB0aGF0IHRoZXkgYXJlIFJlZ0V4cHNcbiAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBkYXRlcyB3aXRoIHByb3BlcnRpZXMgZmlyc3Qgc2F5IHRoZSBkYXRlXG4gIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIERhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBlcnJvciB3aXRoIG1lc3NhZ2UgZmlyc3Qgc2F5IHRoZSBlcnJvclxuICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwICYmICghYXJyYXkgfHwgdmFsdWUubGVuZ3RoID09IDApKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyBicmFjZXNbMV07XG4gIH1cblxuICBpZiAocmVjdXJzZVRpbWVzIDwgMCkge1xuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW09iamVjdF0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuXG4gIGN0eC5zZWVuLnB1c2godmFsdWUpO1xuXG4gIHZhciBvdXRwdXQ7XG4gIGlmIChhcnJheSkge1xuICAgIG91dHB1dCA9IGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpO1xuICB9IGVsc2Uge1xuICAgIG91dHB1dCA9IGtleXMubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpO1xuICAgIH0pO1xuICB9XG5cbiAgY3R4LnNlZW4ucG9wKCk7XG5cbiAgcmV0dXJuIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKTtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSkge1xuICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgndW5kZWZpbmVkJywgJ3VuZGVmaW5lZCcpO1xuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgdmFyIHNpbXBsZSA9ICdcXCcnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpLnJlcGxhY2UoL15cInxcIiQvZywgJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFwiL2csICdcIicpICsgJ1xcJyc7XG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKHNpbXBsZSwgJ3N0cmluZycpO1xuICB9XG4gIGlmIChpc051bWJlcih2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdudW1iZXInKTtcbiAgaWYgKGlzQm9vbGVhbih2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdib29sZWFuJyk7XG4gIC8vIEZvciBzb21lIHJlYXNvbiB0eXBlb2YgbnVsbCBpcyBcIm9iamVjdFwiLCBzbyBzcGVjaWFsIGNhc2UgaGVyZS5cbiAgaWYgKGlzTnVsbCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCdudWxsJywgJ251bGwnKTtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gJ1snICsgRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICsgJ10nO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpIHtcbiAgdmFyIG91dHB1dCA9IFtdO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eSh2YWx1ZSwgU3RyaW5nKGkpKSkge1xuICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cyxcbiAgICAgICAgICBTdHJpbmcoaSksIHRydWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LnB1c2goJycpO1xuICAgIH1cbiAgfVxuICBrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKCFrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIGtleSwgdHJ1ZSkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSkge1xuICB2YXIgbmFtZSwgc3RyLCBkZXNjO1xuICBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwga2V5KSB8fCB7IHZhbHVlOiB2YWx1ZVtrZXldIH07XG4gIGlmIChkZXNjLmdldCkge1xuICAgIGlmIChkZXNjLnNldCkge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXIvU2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbR2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChkZXNjLnNldCkge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tTZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFoYXNPd25Qcm9wZXJ0eSh2aXNpYmxlS2V5cywga2V5KSkge1xuICAgIG5hbWUgPSAnWycgKyBrZXkgKyAnXSc7XG4gIH1cbiAgaWYgKCFzdHIpIHtcbiAgICBpZiAoY3R4LnNlZW4uaW5kZXhPZihkZXNjLnZhbHVlKSA8IDApIHtcbiAgICAgIGlmIChpc051bGwocmVjdXJzZVRpbWVzKSkge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCBkZXNjLnZhbHVlLCByZWN1cnNlVGltZXMgLSAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHIuaW5kZXhPZignXFxuJykgPiAtMSkge1xuICAgICAgICBpZiAoYXJyYXkpIHtcbiAgICAgICAgICBzdHIgPSBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJykuc3Vic3RyKDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciA9ICdcXG4nICsgc3RyLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0NpcmN1bGFyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG4gIGlmIChpc1VuZGVmaW5lZChuYW1lKSkge1xuICAgIGlmIChhcnJheSAmJiBrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICBuYW1lID0gSlNPTi5zdHJpbmdpZnkoJycgKyBrZXkpO1xuICAgIGlmIChuYW1lLm1hdGNoKC9eXCIoW2EtekEtWl9dW2EtekEtWl8wLTldKilcIiQvKSkge1xuICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyKDEsIG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ25hbWUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJylcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyheXCJ8XCIkKS9nLCBcIidcIik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ3N0cmluZycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuYW1lICsgJzogJyArIHN0cjtcbn1cblxuXG5mdW5jdGlvbiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcykge1xuICB2YXIgbnVtTGluZXNFc3QgPSAwO1xuICB2YXIgbGVuZ3RoID0gb3V0cHV0LnJlZHVjZShmdW5jdGlvbihwcmV2LCBjdXIpIHtcbiAgICBudW1MaW5lc0VzdCsrO1xuICAgIGlmIChjdXIuaW5kZXhPZignXFxuJykgPj0gMCkgbnVtTGluZXNFc3QrKztcbiAgICByZXR1cm4gcHJldiArIGN1ci5yZXBsYWNlKC9cXHUwMDFiXFxbXFxkXFxkP20vZywgJycpLmxlbmd0aCArIDE7XG4gIH0sIDApO1xuXG4gIGlmIChsZW5ndGggPiA2MCkge1xuICAgIHJldHVybiBicmFjZXNbMF0gK1xuICAgICAgICAgICAoYmFzZSA9PT0gJycgPyAnJyA6IGJhc2UgKyAnXFxuICcpICtcbiAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgb3V0cHV0LmpvaW4oJyxcXG4gICcpICtcbiAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgYnJhY2VzWzFdO1xuICB9XG5cbiAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyAnICcgKyBvdXRwdXQuam9pbignLCAnKSArICcgJyArIGJyYWNlc1sxXTtcbn1cblxuXG4vLyBOT1RFOiBUaGVzZSB0eXBlIGNoZWNraW5nIGZ1bmN0aW9ucyBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBgaW5zdGFuY2VvZmBcbi8vIGJlY2F1c2UgaXQgaXMgZnJhZ2lsZSBhbmQgY2FuIGJlIGVhc2lseSBmYWtlZCB3aXRoIGBPYmplY3QuY3JlYXRlKClgLlxuZnVuY3Rpb24gaXNBcnJheShhcikge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcik7XG59XG5leHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5O1xuXG5mdW5jdGlvbiBpc0Jvb2xlYW4oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG59XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcblxuZnVuY3Rpb24gaXNOdWxsKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbE9yVW5kZWZpbmVkID0gaXNOdWxsT3JVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG59XG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzU3ltYm9sKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCc7XG59XG5leHBvcnRzLmlzU3ltYm9sID0gaXNTeW1ib2w7XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHJlKSB7XG4gIHJldHVybiBpc09iamVjdChyZSkgJiYgb2JqZWN0VG9TdHJpbmcocmUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbmV4cG9ydHMuaXNSZWdFeHAgPSBpc1JlZ0V4cDtcblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG5cbmZ1bmN0aW9uIGlzRGF0ZShkKSB7XG4gIHJldHVybiBpc09iamVjdChkKSAmJiBvYmplY3RUb1N0cmluZyhkKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuZXhwb3J0cy5pc0RhdGUgPSBpc0RhdGU7XG5cbmZ1bmN0aW9uIGlzRXJyb3IoZSkge1xuICByZXR1cm4gaXNPYmplY3QoZSkgJiZcbiAgICAgIChvYmplY3RUb1N0cmluZyhlKSA9PT0gJ1tvYmplY3QgRXJyb3JdJyB8fCBlIGluc3RhbmNlb2YgRXJyb3IpO1xufVxuZXhwb3J0cy5pc0Vycm9yID0gaXNFcnJvcjtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZShhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbCB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnIHx8ICAvLyBFUzYgc3ltYm9sXG4gICAgICAgICB0eXBlb2YgYXJnID09PSAndW5kZWZpbmVkJztcbn1cbmV4cG9ydHMuaXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTtcblxuZXhwb3J0cy5pc0J1ZmZlciA9IHJlcXVpcmUoJy4vc3VwcG9ydC9pc0J1ZmZlcicpO1xuXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyhvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59XG5cblxuZnVuY3Rpb24gcGFkKG4pIHtcbiAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4udG9TdHJpbmcoMTApIDogbi50b1N0cmluZygxMCk7XG59XG5cblxudmFyIG1vbnRocyA9IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLFxuICAgICAgICAgICAgICAnT2N0JywgJ05vdicsICdEZWMnXTtcblxuLy8gMjYgRmViIDE2OjE5OjM0XG5mdW5jdGlvbiB0aW1lc3RhbXAoKSB7XG4gIHZhciBkID0gbmV3IERhdGUoKTtcbiAgdmFyIHRpbWUgPSBbcGFkKGQuZ2V0SG91cnMoKSksXG4gICAgICAgICAgICAgIHBhZChkLmdldE1pbnV0ZXMoKSksXG4gICAgICAgICAgICAgIHBhZChkLmdldFNlY29uZHMoKSldLmpvaW4oJzonKTtcbiAgcmV0dXJuIFtkLmdldERhdGUoKSwgbW9udGhzW2QuZ2V0TW9udGgoKV0sIHRpbWVdLmpvaW4oJyAnKTtcbn1cblxuXG4vLyBsb2cgaXMganVzdCBhIHRoaW4gd3JhcHBlciB0byBjb25zb2xlLmxvZyB0aGF0IHByZXBlbmRzIGEgdGltZXN0YW1wXG5leHBvcnRzLmxvZyA9IGZ1bmN0aW9uKCkge1xuICBjb25zb2xlLmxvZygnJXMgLSAlcycsIHRpbWVzdGFtcCgpLCBleHBvcnRzLmZvcm1hdC5hcHBseShleHBvcnRzLCBhcmd1bWVudHMpKTtcbn07XG5cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXIuXG4gKlxuICogVGhlIEZ1bmN0aW9uLnByb3RvdHlwZS5pbmhlcml0cyBmcm9tIGxhbmcuanMgcmV3cml0dGVuIGFzIGEgc3RhbmRhbG9uZVxuICogZnVuY3Rpb24gKG5vdCBvbiBGdW5jdGlvbi5wcm90b3R5cGUpLiBOT1RFOiBJZiB0aGlzIGZpbGUgaXMgdG8gYmUgbG9hZGVkXG4gKiBkdXJpbmcgYm9vdHN0cmFwcGluZyB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJld3JpdHRlbiB1c2luZyBzb21lIG5hdGl2ZVxuICogZnVuY3Rpb25zIGFzIHByb3RvdHlwZSBzZXR1cCB1c2luZyBub3JtYWwgSmF2YVNjcmlwdCBkb2VzIG5vdCB3b3JrIGFzXG4gKiBleHBlY3RlZCBkdXJpbmcgYm9vdHN0cmFwcGluZyAoc2VlIG1pcnJvci5qcyBpbiByMTE0OTAzKS5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjdG9yIENvbnN0cnVjdG9yIGZ1bmN0aW9uIHdoaWNoIG5lZWRzIHRvIGluaGVyaXQgdGhlXG4gKiAgICAgcHJvdG90eXBlLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDdG9yIENvbnN0cnVjdG9yIGZ1bmN0aW9uIHRvIGluaGVyaXQgcHJvdG90eXBlIGZyb20uXG4gKi9cbmV4cG9ydHMuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG5leHBvcnRzLl9leHRlbmQgPSBmdW5jdGlvbihvcmlnaW4sIGFkZCkge1xuICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiBhZGQgaXNuJ3QgYW4gb2JqZWN0XG4gIGlmICghYWRkIHx8ICFpc09iamVjdChhZGQpKSByZXR1cm4gb3JpZ2luO1xuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoYWRkKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIG9yaWdpbltrZXlzW2ldXSA9IGFkZFtrZXlzW2ldXTtcbiAgfVxuICByZXR1cm4gb3JpZ2luO1xufTtcblxuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cbiIsInZhciBpbmRleE9mID0gcmVxdWlyZSgnaW5kZXhvZicpO1xuXG52YXIgT2JqZWN0X2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgaWYgKE9iamVjdC5rZXlzKSByZXR1cm4gT2JqZWN0LmtleXMob2JqKVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHJlcy5wdXNoKGtleSlcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59O1xuXG52YXIgZm9yRWFjaCA9IGZ1bmN0aW9uICh4cywgZm4pIHtcbiAgICBpZiAoeHMuZm9yRWFjaCkgcmV0dXJuIHhzLmZvckVhY2goZm4pXG4gICAgZWxzZSBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZuKHhzW2ldLCBpLCB4cyk7XG4gICAgfVxufTtcblxudmFyIGRlZmluZVByb3AgPSAoZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnXycsIHt9KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgbmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG5hbWUsIHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgICAgb2JqW25hbWVdID0gdmFsdWU7XG4gICAgICAgIH07XG4gICAgfVxufSgpKTtcblxudmFyIGdsb2JhbHMgPSBbJ0FycmF5JywgJ0Jvb2xlYW4nLCAnRGF0ZScsICdFcnJvcicsICdFdmFsRXJyb3InLCAnRnVuY3Rpb24nLFxuJ0luZmluaXR5JywgJ0pTT04nLCAnTWF0aCcsICdOYU4nLCAnTnVtYmVyJywgJ09iamVjdCcsICdSYW5nZUVycm9yJyxcbidSZWZlcmVuY2VFcnJvcicsICdSZWdFeHAnLCAnU3RyaW5nJywgJ1N5bnRheEVycm9yJywgJ1R5cGVFcnJvcicsICdVUklFcnJvcicsXG4nZGVjb2RlVVJJJywgJ2RlY29kZVVSSUNvbXBvbmVudCcsICdlbmNvZGVVUkknLCAnZW5jb2RlVVJJQ29tcG9uZW50JywgJ2VzY2FwZScsXG4nZXZhbCcsICdpc0Zpbml0ZScsICdpc05hTicsICdwYXJzZUZsb2F0JywgJ3BhcnNlSW50JywgJ3VuZGVmaW5lZCcsICd1bmVzY2FwZSddO1xuXG5mdW5jdGlvbiBDb250ZXh0KCkge31cbkNvbnRleHQucHJvdG90eXBlID0ge307XG5cbnZhciBTY3JpcHQgPSBleHBvcnRzLlNjcmlwdCA9IGZ1bmN0aW9uIE5vZGVTY3JpcHQgKGNvZGUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU2NyaXB0KSkgcmV0dXJuIG5ldyBTY3JpcHQoY29kZSk7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbn07XG5cblNjcmlwdC5wcm90b3R5cGUucnVuSW5Db250ZXh0ID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICBpZiAoIShjb250ZXh0IGluc3RhbmNlb2YgQ29udGV4dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm5lZWRzIGEgJ2NvbnRleHQnIGFyZ3VtZW50LlwiKTtcbiAgICB9XG4gICAgXG4gICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgIGlmICghaWZyYW1lLnN0eWxlKSBpZnJhbWUuc3R5bGUgPSB7fTtcbiAgICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gICAgXG4gICAgdmFyIHdpbiA9IGlmcmFtZS5jb250ZW50V2luZG93O1xuICAgIHZhciB3RXZhbCA9IHdpbi5ldmFsLCB3RXhlY1NjcmlwdCA9IHdpbi5leGVjU2NyaXB0O1xuXG4gICAgaWYgKCF3RXZhbCAmJiB3RXhlY1NjcmlwdCkge1xuICAgICAgICAvLyB3aW4uZXZhbCgpIG1hZ2ljYWxseSBhcHBlYXJzIHdoZW4gdGhpcyBpcyBjYWxsZWQgaW4gSUU6XG4gICAgICAgIHdFeGVjU2NyaXB0LmNhbGwod2luLCAnbnVsbCcpO1xuICAgICAgICB3RXZhbCA9IHdpbi5ldmFsO1xuICAgIH1cbiAgICBcbiAgICBmb3JFYWNoKE9iamVjdF9rZXlzKGNvbnRleHQpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHdpbltrZXldID0gY29udGV4dFtrZXldO1xuICAgIH0pO1xuICAgIGZvckVhY2goZ2xvYmFscywgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoY29udGV4dFtrZXldKSB7XG4gICAgICAgICAgICB3aW5ba2V5XSA9IGNvbnRleHRba2V5XTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHZhciB3aW5LZXlzID0gT2JqZWN0X2tleXMod2luKTtcblxuICAgIHZhciByZXMgPSB3RXZhbC5jYWxsKHdpbiwgdGhpcy5jb2RlKTtcbiAgICBcbiAgICBmb3JFYWNoKE9iamVjdF9rZXlzKHdpbiksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgLy8gQXZvaWQgY29weWluZyBjaXJjdWxhciBvYmplY3RzIGxpa2UgYHRvcGAgYW5kIGB3aW5kb3dgIGJ5IG9ubHlcbiAgICAgICAgLy8gdXBkYXRpbmcgZXhpc3RpbmcgY29udGV4dCBwcm9wZXJ0aWVzIG9yIG5ldyBwcm9wZXJ0aWVzIGluIHRoZSBgd2luYFxuICAgICAgICAvLyB0aGF0IHdhcyBvbmx5IGludHJvZHVjZWQgYWZ0ZXIgdGhlIGV2YWwuXG4gICAgICAgIGlmIChrZXkgaW4gY29udGV4dCB8fCBpbmRleE9mKHdpbktleXMsIGtleSkgPT09IC0xKSB7XG4gICAgICAgICAgICBjb250ZXh0W2tleV0gPSB3aW5ba2V5XTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZm9yRWFjaChnbG9iYWxzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiBjb250ZXh0KSkge1xuICAgICAgICAgICAgZGVmaW5lUHJvcChjb250ZXh0LCBrZXksIHdpbltrZXldKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgICBcbiAgICByZXR1cm4gcmVzO1xufTtcblxuU2NyaXB0LnByb3RvdHlwZS5ydW5JblRoaXNDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBldmFsKHRoaXMuY29kZSk7IC8vIG1heWJlLi4uXG59O1xuXG5TY3JpcHQucHJvdG90eXBlLnJ1bkluTmV3Q29udGV4dCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgdmFyIGN0eCA9IFNjcmlwdC5jcmVhdGVDb250ZXh0KGNvbnRleHQpO1xuICAgIHZhciByZXMgPSB0aGlzLnJ1bkluQ29udGV4dChjdHgpO1xuXG4gICAgZm9yRWFjaChPYmplY3Rfa2V5cyhjdHgpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGNvbnRleHRba2V5XSA9IGN0eFtrZXldO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlcztcbn07XG5cbmZvckVhY2goT2JqZWN0X2tleXMoU2NyaXB0LnByb3RvdHlwZSksIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgZXhwb3J0c1tuYW1lXSA9IFNjcmlwdFtuYW1lXSA9IGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICAgIHZhciBzID0gU2NyaXB0KGNvZGUpO1xuICAgICAgICByZXR1cm4gc1tuYW1lXS5hcHBseShzLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgIH07XG59KTtcblxuZXhwb3J0cy5jcmVhdGVTY3JpcHQgPSBmdW5jdGlvbiAoY29kZSkge1xuICAgIHJldHVybiBleHBvcnRzLlNjcmlwdChjb2RlKTtcbn07XG5cbmV4cG9ydHMuY3JlYXRlQ29udGV4dCA9IFNjcmlwdC5jcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICB2YXIgY29weSA9IG5ldyBDb250ZXh0KCk7XG4gICAgaWYodHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvckVhY2goT2JqZWN0X2tleXMoY29udGV4dCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGNvcHlba2V5XSA9IGNvbnRleHRba2V5XTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjb3B5O1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgU2Vzc2lvbiBmcm9tICcuL3Nlc3Npb24nO1xuaW1wb3J0IFBvb2wgZnJvbSAnLi9pbnRlcm5hbC9wb29sJztcbmltcG9ydCB7Y29ubmVjdH0gZnJvbSAnLi9pbnRlcm5hbC9jb25uZWN0b3InO1xuaW1wb3J0IFN0cmVhbU9ic2VydmVyIGZyb20gJy4vaW50ZXJuYWwvc3RyZWFtLW9ic2VydmVyJztcbmltcG9ydCB7bmV3RXJyb3IsIFNFUlZJQ0VfVU5BVkFJTEFCTEV9IGZyb20gJy4vZXJyb3InO1xuaW1wb3J0IHtEaXJlY3RDb25uZWN0aW9uUHJvdmlkZXJ9IGZyb20gJy4vaW50ZXJuYWwvY29ubmVjdGlvbi1wcm92aWRlcnMnO1xuXG5jb25zdCBSRUFEID0gJ1JFQUQnLCBXUklURSA9ICdXUklURSc7XG4vKipcbiAqIEEgZHJpdmVyIG1haW50YWlucyBvbmUgb3IgbW9yZSB7QGxpbmsgU2Vzc2lvbiBzZXNzaW9uc30gd2l0aCBhIHJlbW90ZVxuICogTmVvNGogaW5zdGFuY2UuIFRocm91Z2ggdGhlIHtAbGluayBTZXNzaW9uIHNlc3Npb25zfSB5b3UgY2FuIHNlbmQgc3RhdGVtZW50c1xuICogYW5kIHJldHJpZXZlIHJlc3VsdHMgZnJvbSB0aGUgZGF0YWJhc2UuXG4gKlxuICogRHJpdmVycyBhcmUgcmVhc29uYWJseSBleHBlbnNpdmUgdG8gY3JlYXRlIC0geW91IHNob3VsZCBzdHJpdmUgdG8ga2VlcCBvbmVcbiAqIGRyaXZlciBpbnN0YW5jZSBhcm91bmQgcGVyIE5lbzRqIEluc3RhbmNlIHlvdSBjb25uZWN0IHRvLlxuICpcbiAqIEBhY2Nlc3MgcHVibGljXG4gKi9cbmNsYXNzIERyaXZlciB7XG4gIC8qKlxuICAgKiBZb3Ugc2hvdWxkIG5vdCBiZSBjYWxsaW5nIHRoaXMgZGlyZWN0bHksIGluc3RlYWQgdXNlIHtAbGluayBkcml2ZXJ9LlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlckFnZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0b2tlblxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnXG4gICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IodXJsLCB1c2VyQWdlbnQsIHRva2VuID0ge30sIGNvbmZpZyA9IHt9KSB7XG4gICAgdGhpcy5fdXJsID0gdXJsO1xuICAgIHRoaXMuX3VzZXJBZ2VudCA9IHVzZXJBZ2VudDtcbiAgICB0aGlzLl9vcGVuU2Vzc2lvbnMgPSB7fTtcbiAgICB0aGlzLl9zZXNzaW9uSWRHZW5lcmF0b3IgPSAwO1xuICAgIHRoaXMuX3Rva2VuID0gdG9rZW47XG4gICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuX3Bvb2wgPSBuZXcgUG9vbChcbiAgICAgIHRoaXMuX2NyZWF0ZUNvbm5lY3Rpb24uYmluZCh0aGlzKSxcbiAgICAgIHRoaXMuX2Rlc3Ryb3lDb25uZWN0aW9uLmJpbmQodGhpcyksXG4gICAgICBEcml2ZXIuX3ZhbGlkYXRlQ29ubmVjdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgY29uZmlnLmNvbm5lY3Rpb25Qb29sU2l6ZVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIGNvbm5lY3Rpb24gcHJvdmlkZXIuIEluaXRpYWxpemVkIGxhemlseSBieSB7QGxpbmsgX2dldE9yQ3JlYXRlQ29ubmVjdGlvblByb3ZpZGVyfS5cbiAgICAgKiBAdHlwZSB7Q29ubmVjdGlvblByb3ZpZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY29ubmVjdGlvblByb3ZpZGVyID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgY29ubmVjdGlvbiBpbnN0YW5jZS5cbiAgICogQHJldHVybiB7Q29ubmVjdGlvbn0gbmV3IGNvbm5lY3Rvci1hcGkgc2Vzc2lvbiBpbnN0YW5jZSwgYSBsb3cgbGV2ZWwgc2Vzc2lvbiBBUEkuXG4gICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUNvbm5lY3Rpb24odXJsLCByZWxlYXNlKSB7XG4gICAgbGV0IHNlc3Npb25JZCA9IHRoaXMuX3Nlc3Npb25JZEdlbmVyYXRvcisrO1xuICAgIGxldCBjb25uID0gY29ubmVjdCh1cmwsIHRoaXMuX2NvbmZpZywgdGhpcy5fY29ubmVjdGlvbkVycm9yQ29kZSgpKTtcbiAgICBsZXQgc3RyZWFtT2JzZXJ2ZXIgPSBuZXcgX0Nvbm5lY3Rpb25TdHJlYW1PYnNlcnZlcih0aGlzLCBjb25uKTtcbiAgICBjb25uLmluaXRpYWxpemUodGhpcy5fdXNlckFnZW50LCB0aGlzLl90b2tlbiwgc3RyZWFtT2JzZXJ2ZXIpO1xuICAgIGNvbm4uX2lkID0gc2Vzc2lvbklkO1xuICAgIGNvbm4uX3JlbGVhc2UgPSAoKSA9PiByZWxlYXNlKHVybCwgY29ubik7XG5cbiAgICB0aGlzLl9vcGVuU2Vzc2lvbnNbc2Vzc2lvbklkXSA9IGNvbm47XG4gICAgcmV0dXJuIGNvbm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhhdCBhIGNvbm5lY3Rpb24gaXMgdXNhYmxlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGhlIGNvbm5lY3Rpb24gaXMgb3BlblxuICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICoqL1xuICBzdGF0aWMgX3ZhbGlkYXRlQ29ubmVjdGlvbihjb25uKSB7XG4gICAgcmV0dXJuIGNvbm4uaXNPcGVuKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZSBvZiBhIGxpdmUgc2Vzc2lvbiwgY2xvc2luZyBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZXMuXG4gICAqIEByZXR1cm4ge1Nlc3Npb259IG5ldyBzZXNzaW9uLlxuICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICovXG4gIF9kZXN0cm95Q29ubmVjdGlvbihjb25uKSB7XG4gICAgZGVsZXRlIHRoaXMuX29wZW5TZXNzaW9uc1tjb25uLl9pZF07XG4gICAgY29ubi5jbG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjcXVpcmUgYSBzZXNzaW9uIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGRhdGFiYXNlLiBUaGUgZHJpdmVyIG1haW50YWluc1xuICAgKiBhIHBvb2wgb2Ygc2Vzc2lvbnMsIHNvIGNhbGxpbmcgdGhpcyBtZXRob2QgaXMgbm9ybWFsbHkgY2hlYXAgYmVjYXVzZSB5b3VcbiAgICogd2lsbCBiZSBwdWxsaW5nIGEgc2Vzc2lvbiBvdXQgb2YgdGhlIGNvbW1vbiBwb29sLlxuICAgKlxuICAgKiBUaGlzIGNvbWVzIHdpdGggc29tZSByZXNwb25zaWJpbGl0eSAtIG1ha2Ugc3VyZSB5b3UgYWx3YXlzIGNhbGxcbiAgICoge0BsaW5rIFNlc3Npb24jY2xvc2UoKX0gd2hlbiB5b3UgYXJlIGRvbmUgdXNpbmcgYSBzZXNzaW9uLCBhbmQgbGlrZXdpc2UsXG4gICAqIG1ha2Ugc3VyZSB5b3UgZG9uJ3QgY2xvc2UgeW91ciBzZXNzaW9uIGJlZm9yZSB5b3UgYXJlIGRvbmUgdXNpbmcgaXQuIE9uY2VcbiAgICogaXQgaXMgcmV0dXJuZWQgdG8gdGhlIHBvb2wsIHRoZSBzZXNzaW9uIHdpbGwgYmUgcmVzZXQgdG8gYSBjbGVhbiBzdGF0ZSBhbmRcbiAgICogbWFkZSBhdmFpbGFibGUgZm9yIG90aGVycyB0byB1c2UuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbW9kZT1XUklURV0gdGhlIGFjY2VzcyBtb2RlIG9mIHRoaXMgc2Vzc2lvbiwgYWxsb3dlZCB2YWx1ZXMgYXJlIHtAbGluayBSRUFEfSBhbmQge0BsaW5rIFdSSVRFfS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtib29rbWFyaz1udWxsXSB0aGUgaW5pdGlhbCByZWZlcmVuY2UgdG8gc29tZSBwcmV2aW91cyB0cmFuc2FjdGlvbi4gVmFsdWUgaXMgb3B0aW9uYWwgYW5kXG4gICAqIGFic2VuY2UgaW5kaWNhdGVzIHRoYXQgdGhhdCB0aGUgYm9va21hcmsgZG9lcyBub3QgZXhpc3Qgb3IgaXMgdW5rbm93bi5cbiAgICogQHJldHVybiB7U2Vzc2lvbn0gbmV3IHNlc3Npb24uXG4gICAqL1xuICBzZXNzaW9uKG1vZGUsIGJvb2ttYXJrKSB7XG4gICAgY29uc3Qgc2Vzc2lvbk1vZGUgPSBEcml2ZXIuX3ZhbGlkYXRlU2Vzc2lvbk1vZGUobW9kZSk7XG4gICAgY29uc3QgY29ubmVjdGlvblByb3ZpZGVyID0gdGhpcy5fZ2V0T3JDcmVhdGVDb25uZWN0aW9uUHJvdmlkZXIoKTtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlU2Vzc2lvbihzZXNzaW9uTW9kZSwgY29ubmVjdGlvblByb3ZpZGVyLCBib29rbWFyaywgdGhpcy5fY29uZmlnKTtcbiAgfVxuXG4gIHN0YXRpYyBfdmFsaWRhdGVTZXNzaW9uTW9kZShyYXdNb2RlKSB7XG4gICAgY29uc3QgbW9kZSA9IHJhd01vZGUgfHwgV1JJVEU7XG4gICAgaWYgKG1vZGUgIT09IFJFQUQgJiYgbW9kZSAhPT0gV1JJVEUpIHtcbiAgICAgIHRocm93IG5ld0Vycm9yKCdJbGxlZ2FsIHNlc3Npb24gbW9kZSAnICsgbW9kZSk7XG4gICAgfVxuICAgIHJldHVybiBtb2RlO1xuICB9XG5cbiAgLy8gRXh0ZW5zaW9uIHBvaW50XG4gIF9jcmVhdGVDb25uZWN0aW9uUHJvdmlkZXIoYWRkcmVzcywgY29ubmVjdGlvblBvb2wsIGRyaXZlck9uRXJyb3JDYWxsYmFjaykge1xuICAgIHJldHVybiBuZXcgRGlyZWN0Q29ubmVjdGlvblByb3ZpZGVyKGFkZHJlc3MsIGNvbm5lY3Rpb25Qb29sLCBkcml2ZXJPbkVycm9yQ2FsbGJhY2spO1xuICB9XG5cbiAgLy8gRXh0ZW5zaW9uIHBvaW50XG4gIF9jcmVhdGVTZXNzaW9uKG1vZGUsIGNvbm5lY3Rpb25Qcm92aWRlciwgYm9va21hcmssIGNvbmZpZykge1xuICAgIHJldHVybiBuZXcgU2Vzc2lvbihtb2RlLCBjb25uZWN0aW9uUHJvdmlkZXIsIGJvb2ttYXJrLCBjb25maWcpO1xuICB9XG5cbiAgLy8gRXh0ZW5zaW9uIHBvaW50XG4gIF9jb25uZWN0aW9uRXJyb3JDb2RlKCkge1xuICAgIC8vIGNvbm5lY3Rpb24gZXJyb3JzIG1pZ2h0IHJlc3VsdCBpbiBkaWZmZXJlbnQgZXJyb3IgY29kZXMgZGVwZW5kaW5nIG9uIHRoZSBkcml2ZXJcbiAgICByZXR1cm4gU0VSVklDRV9VTkFWQUlMQUJMRTtcbiAgfVxuXG4gIF9nZXRPckNyZWF0ZUNvbm5lY3Rpb25Qcm92aWRlcigpIHtcbiAgICBpZiAoIXRoaXMuX2Nvbm5lY3Rpb25Qcm92aWRlcikge1xuICAgICAgY29uc3QgZHJpdmVyT25FcnJvckNhbGxiYWNrID0gdGhpcy5fZHJpdmVyT25FcnJvckNhbGxiYWNrLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLl9jb25uZWN0aW9uUHJvdmlkZXIgPSB0aGlzLl9jcmVhdGVDb25uZWN0aW9uUHJvdmlkZXIodGhpcy5fdXJsLCB0aGlzLl9wb29sLCBkcml2ZXJPbkVycm9yQ2FsbGJhY2spO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblByb3ZpZGVyO1xuICB9XG5cbiAgX2RyaXZlck9uRXJyb3JDYWxsYmFjayhlcnJvcikge1xuICAgIGNvbnN0IHVzZXJEZWZpbmVkT25FcnJvckNhbGxiYWNrID0gdGhpcy5vbkVycm9yO1xuICAgIGlmICh1c2VyRGVmaW5lZE9uRXJyb3JDYWxsYmFjayAmJiBlcnJvci5jb2RlID09PSBTRVJWSUNFX1VOQVZBSUxBQkxFKSB7XG4gICAgICB1c2VyRGVmaW5lZE9uRXJyb3JDYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gdGVsbCB0aGUgZHJpdmVyIGFib3V0IHRoaXMgZXJyb3JcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgYWxsIG9wZW4gc2Vzc2lvbnMgYW5kIG90aGVyIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiBZb3Ugc2hvdWxkXG4gICAqIG1ha2Ugc3VyZSB0byB1c2UgdGhpcyB3aGVuIHlvdSBhcmUgZG9uZSB3aXRoIHRoaXMgZHJpdmVyIGluc3RhbmNlLlxuICAgKiBAcmV0dXJuIHVuZGVmaW5lZFxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgZm9yIChsZXQgc2Vzc2lvbklkIGluIHRoaXMuX29wZW5TZXNzaW9ucykge1xuICAgICAgaWYgKHRoaXMuX29wZW5TZXNzaW9ucy5oYXNPd25Qcm9wZXJ0eShzZXNzaW9uSWQpKSB7XG4gICAgICAgIHRoaXMuX29wZW5TZXNzaW9uc1tzZXNzaW9uSWRdLmNsb3NlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9wb29sLnB1cmdlQWxsKCk7XG4gICAgfVxuICB9XG59XG5cbi8qKiBJbnRlcm5hbCBzdHJlYW0gb2JzZXJ2ZXIgdXNlZCBmb3IgY29ubmVjdGlvbiBzdGF0ZSAqL1xuY2xhc3MgX0Nvbm5lY3Rpb25TdHJlYW1PYnNlcnZlciBleHRlbmRzIFN0cmVhbU9ic2VydmVyIHtcbiAgY29uc3RydWN0b3IoZHJpdmVyLCBjb25uKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9kcml2ZXIgPSBkcml2ZXI7XG4gICAgdGhpcy5fY29ubiA9IGNvbm47XG4gICAgdGhpcy5faGFzRmFpbGVkID0gZmFsc2U7XG4gIH1cblxuICBvbkVycm9yKGVycm9yKSB7XG4gICAgaWYgKCF0aGlzLl9oYXNGYWlsZWQpIHtcbiAgICAgIHN1cGVyLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgaWYgKHRoaXMuX2RyaXZlci5vbkVycm9yKSB7XG4gICAgICAgIHRoaXMuX2RyaXZlci5vbkVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2hhc0ZhaWxlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25Db21wbGV0ZWQobWVzc2FnZSkge1xuICAgIGlmICh0aGlzLl9kcml2ZXIub25Db21wbGV0ZWQpIHtcbiAgICAgIHRoaXMuX2RyaXZlci5vbkNvbXBsZXRlZChtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fb2JzZXJ2ZXIgJiYgdGhpcy5fb2JzZXJ2ZXIub25Db21wbGV0ZSkge1xuICAgICAgdGhpcy5fb2JzZXJ2ZXIub25Db21wbGV0ZWQobWVzc2FnZSk7XG4gICAgfVxuICB9XG59XG5cblxuXG5leHBvcnQge0RyaXZlciwgUkVBRCwgV1JJVEV9XG5cbmV4cG9ydCBkZWZhdWx0IERyaXZlclxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEEgY29tbW9uIHBsYWNlIGZvciBjb25zdHJ1Y3RpbmcgZXJyb3Igb2JqZWN0cywgdG8ga2VlcCB0aGVtXG4vLyB1bmlmb3JtIGFjcm9zcyB0aGUgZHJpdmVyIHN1cmZhY2UuXG5cbmNvbnN0IFNFUlZJQ0VfVU5BVkFJTEFCTEUgPSAnU2VydmljZVVuYXZhaWxhYmxlJztcbmNvbnN0IFNFU1NJT05fRVhQSVJFRCA9ICdTZXNzaW9uRXhwaXJlZCc7XG5jb25zdCBQUk9UT0NPTF9FUlJPUiA9ICdQcm90b2NvbEVycm9yJztcblxuZnVuY3Rpb24gbmV3RXJyb3IobWVzc2FnZSwgY29kZT1cIk4vQVwiKSB7XG4gIC8vIFRPRE86IElkZWEgaXMgdGhhdCB3ZSBjYW4gY2hlY2sgdGhlIGNvZGUgaGVyZSBhbmQgdGhyb3cgc3ViLWNsYXNzZXNcbiAgLy8gb2YgTmVvNGpFcnJvciBhcyBhcHByb3ByaWF0ZVxuICByZXR1cm4gbmV3IE5lbzRqRXJyb3IobWVzc2FnZSwgY29kZSk7XG59XG5cbmNsYXNzIE5lbzRqRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCBtZXNzYWdlLCBjb2RlPVwiTi9BXCIgKSB7XG4gICAgc3VwZXIoIG1lc3NhZ2UgKTtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgbmV3RXJyb3IsXG4gIE5lbzRqRXJyb3IsXG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEUsXG4gIFNFU1NJT05fRVhQSVJFRCxcbiAgUFJPVE9DT0xfRVJST1Jcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKipcbiAqIENsYXNzIGZvciBOb2RlIFR5cGUuXG4gKi8gXG5jbGFzcyBOb2RlIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IGlkZW50aXR5IC0gVW5pcXVlIGlkZW50aXR5XG4gICAqIEBwYXJhbSB7QXJyYXl9IGxhYmVscyAtIEFycmF5IGZvciBhbGwgbGFiZWxzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIC0gTWFwIHdpdGggbm9kZSBwcm9wZXJ0aWVzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihpZGVudGl0eSwgbGFiZWxzLCBwcm9wZXJ0aWVzKSB7XG4gICAgdGhpcy5pZGVudGl0eSA9IGlkZW50aXR5O1xuICAgIHRoaXMubGFiZWxzID0gbGFiZWxzO1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgcyA9IFwiKFwiICsgdGhpcy5pZGVudGl0eTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGFiZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzICs9IFwiOlwiICsgdGhpcy5sYWJlbHNbaV07XG4gICAgfVxuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICBzICs9IFwiIHtcIjtcbiAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpID4gMCkgcyArPSBcIixcIjtcbiAgICAgICAgcyArPSBrZXlzW2ldICsgXCI6XCIgKyBKU09OLnN0cmluZ2lmeSh0aGlzLnByb3BlcnRpZXNba2V5c1tpXV0pO1xuICAgICAgfVxuICAgICAgcyArPSBcIn1cIjtcbiAgICB9XG4gICAgcyArPSBcIilcIjtcbiAgICByZXR1cm4gcztcbiAgfVxufVxuXG4vKipcbiAqIENsYXNzIGZvciBSZWxhdGlvbnNoaXAgVHlwZS5cbiAqLyBcbmNsYXNzIFJlbGF0aW9uc2hpcCB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtJbnRlZ2VyfSBpZGVudGl0eSAtIFVuaXF1ZSBpZGVudGl0eVxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IHN0YXJ0IC0gSWRlbnRpdHkgb2Ygc3RhcnQgTm9kZVxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IGVuZCAtIElkZW50aXR5IG9mIGVuZCBOb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gUmVsYXRpb25zaGlwIHR5cGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgLSBNYXAgd2l0aCByZWxhdGlvbnNoaXAgcHJvcGVydGllc1xuICAgKi9cbiAgY29uc3RydWN0b3IoaWRlbnRpdHksIHN0YXJ0LCBlbmQsIHR5cGUsIHByb3BlcnRpZXMpIHtcbiAgICB0aGlzLmlkZW50aXR5ID0gaWRlbnRpdHk7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBzID0gXCIoXCIgKyB0aGlzLnN0YXJ0ICsgXCIpLVs6XCIgKyB0aGlzLnR5cGU7XG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnByb3BlcnRpZXMpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIHMgKz0gXCIge1wiO1xuICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPiAwKSBzICs9IFwiLFwiO1xuICAgICAgICBzICs9IGtleXNbaV0gKyBcIjpcIiArIEpTT04uc3RyaW5naWZ5KHRoaXMucHJvcGVydGllc1trZXlzW2ldXSk7XG4gICAgICB9XG4gICAgICBzICs9IFwifVwiO1xuICAgIH1cbiAgICBzICs9IFwiXS0+KFwiICsgdGhpcy5lbmQgKyBcIilcIjtcbiAgICByZXR1cm4gcztcbiAgfVxufVxuXG4vKipcbiAqIENsYXNzIGZvciBVbmJvdW5kUmVsYXRpb25zaGlwIFR5cGUuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqLyBcbmNsYXNzIFVuYm91bmRSZWxhdGlvbnNoaXAge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gaWRlbnRpdHkgLSBVbmlxdWUgaWRlbnRpdHlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBSZWxhdGlvbnNoaXAgdHlwZVxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyAtIE1hcCB3aXRoIHJlbGF0aW9uc2hpcCBwcm9wZXJ0aWVzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihpZGVudGl0eSwgdHlwZSwgcHJvcGVydGllcykge1xuICAgIHRoaXMuaWRlbnRpdHkgPSBpZGVudGl0eTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICAvKipcbiAgICogQmluZCByZWxhdGlvbnNoaXBcbiAgICogQHBhcmFtIHtJbnRlZ2VyfSBzdGFydCAtIElkZW50aXR5IG9mIHN0YXJ0IG5vZGVcbiAgICogQHBhcmFtIHtJbnRlZ2VyfSBlbmQgLSBJZGVudGl0eSBvZiBlbmQgbm9kZVxuICAgKiBAcmV0dXJuIHtSZWxhdGlvbnNoaXB9IC0gQ3JlYXRlZCByZWxhdGlvbnNoaXBcbiAgICovXG4gIGJpbmQoIHN0YXJ0LCBlbmQgKSB7XG4gICAgcmV0dXJuIG5ldyBSZWxhdGlvbnNoaXAoXG4gICAgICB0aGlzLmlkZW50aXR5LCBcbiAgICAgIHN0YXJ0LCBcbiAgICAgIGVuZCwgXG4gICAgICB0aGlzLnR5cGUsIFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBzID0gXCItWzpcIiArIHRoaXMudHlwZTtcbiAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcyk7XG4gICAgaWYgKGtleXMubGVuZ3RoID4gMCkge1xuICAgICAgcyArPSBcIiB7XCI7XG4gICAgICBmb3IobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaSA+IDApIHMgKz0gXCIsXCI7XG4gICAgICAgIHMgKz0ga2V5c1tpXSArIFwiOlwiICsgSlNPTi5zdHJpbmdpZnkodGhpcy5wcm9wZXJ0aWVzW2tleXNbaV1dKTtcbiAgICAgIH1cbiAgICAgIHMgKz0gXCJ9XCI7XG4gICAgfVxuICAgIHMgKz0gXCJdLT5cIjtcbiAgICByZXR1cm4gcztcbiAgfVxufVxuXG4vKipcbiAqIENsYXNzIGZvciBQYXRoU2VnbWVudCBUeXBlLlxuICovIFxuY2xhc3MgUGF0aFNlZ21lbnQge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7Tm9kZX0gc3RhcnQgLSBzdGFydCBub2RlXG4gICAqIEBwYXJhbSB7UmVsYXRpb25zaGlwfSByZWwgLSByZWxhdGlvbnNoaXAgdGhhdCBjb25uZWN0cyBzdGFydCBhbmQgZW5kIG5vZGVcbiAgICogQHBhcmFtIHtOb2RlfSBlbmQgLSBlbmQgbm9kZVxuICAgKi9cbiAgY29uc3RydWN0b3Ioc3RhcnQsIHJlbCwgZW5kKSB7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMucmVsYXRpb25zaGlwID0gcmVsO1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG59XG5cbi8qKlxuICogQ2xhc3MgZm9yIFBhdGggVHlwZS5cbiAqLyBcbmNsYXNzIFBhdGgge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7Tm9kZX0gc3RhcnQgIC0gc3RhcnQgbm9kZVxuICAgKiBAcGFyYW0ge05vZGV9IGVuZCAtIGVuZCBub2RlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNlZ21lbnRzIC0gQXJyYXkgb2YgU2VnbWVudHNcbiAgICovXG4gIGNvbnN0cnVjdG9yKHN0YXJ0LCBlbmQsIHNlZ21lbnRzKSB7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICAgIHRoaXMuc2VnbWVudHMgPSBzZWdtZW50cztcbiAgICB0aGlzLmxlbmd0aCA9IHNlZ21lbnRzLmxlbmd0aDtcbiAgfVxufVxuXG5leHBvcnQge1xuICBOb2RlLFxuICBSZWxhdGlvbnNoaXAsXG4gIFVuYm91bmRSZWxhdGlvbnNoaXAsXG4gIFBhdGgsXG4gIFBhdGhTZWdtZW50XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtpblNhZmVSYW5nZSwgaW50LCBpc0ludCwgdG9OdW1iZXIsIHRvU3RyaW5nfSBmcm9tICcuL2ludGVnZXInO1xuaW1wb3J0IHtOb2RlLCBQYXRoLCBQYXRoU2VnbWVudCwgUmVsYXRpb25zaGlwLCBVbmJvdW5kUmVsYXRpb25zaGlwfSBmcm9tICcuL2dyYXBoLXR5cGVzJztcbmltcG9ydCB7TmVvNGpFcnJvciwgUFJPVE9DT0xfRVJST1IsIFNFUlZJQ0VfVU5BVkFJTEFCTEUsIFNFU1NJT05fRVhQSVJFRH0gZnJvbSAnLi9lcnJvcic7XG5pbXBvcnQgUmVzdWx0IGZyb20gJy4vcmVzdWx0JztcbmltcG9ydCBSZXN1bHRTdW1tYXJ5IGZyb20gJy4vcmVzdWx0LXN1bW1hcnknO1xuaW1wb3J0IFJlY29yZCBmcm9tICcuL3JlY29yZCc7XG5pbXBvcnQge0RyaXZlciwgUkVBRCwgV1JJVEV9IGZyb20gJy4vZHJpdmVyJztcbmltcG9ydCBSb3V0aW5nRHJpdmVyIGZyb20gJy4vcm91dGluZy1kcml2ZXInO1xuaW1wb3J0IFZFUlNJT04gZnJvbSAnLi4vdmVyc2lvbic7XG5pbXBvcnQge2Fzc2VydFN0cmluZywgaXNFbXB0eU9iamVjdE9yTnVsbCwgcGFyc2VSb3V0aW5nQ29udGV4dCwgcGFyc2VTY2hlbWUsIHBhcnNlVXJsfSBmcm9tICcuL2ludGVybmFsL3V0aWwnO1xuXG5jb25zdCBhdXRoID0ge1xuICBiYXNpYzogKHVzZXJuYW1lLCBwYXNzd29yZCwgcmVhbG0gPSB1bmRlZmluZWQpID0+IHtcbiAgICBpZiAocmVhbG0pIHtcbiAgICAgIHJldHVybiB7c2NoZW1lOiAnYmFzaWMnLCBwcmluY2lwYWw6IHVzZXJuYW1lLCBjcmVkZW50aWFsczogcGFzc3dvcmQsIHJlYWxtOiByZWFsbX07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7c2NoZW1lOiAnYmFzaWMnLCBwcmluY2lwYWw6IHVzZXJuYW1lLCBjcmVkZW50aWFsczogcGFzc3dvcmR9O1xuICAgIH1cbiAgfSxcbiAga2VyYmVyb3M6IChiYXNlNjRFbmNvZGVkVGlja2V0KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjaGVtZTogJ2tlcmJlcm9zJyxcbiAgICAgIHByaW5jaXBhbDogJycsIC8vIFRoaXMgZW1wdHkgc3RyaW5nIGlzIHJlcXVpcmVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgICAgIGNyZWRlbnRpYWxzOiBiYXNlNjRFbmNvZGVkVGlja2V0XG4gICAgfTtcbiAgfSxcbiAgY3VzdG9tOiAocHJpbmNpcGFsLCBjcmVkZW50aWFscywgcmVhbG0sIHNjaGVtZSwgcGFyYW1ldGVycyA9IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmIChwYXJhbWV0ZXJzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzY2hlbWU6IHNjaGVtZSwgcHJpbmNpcGFsOiBwcmluY2lwYWwsIGNyZWRlbnRpYWxzOiBjcmVkZW50aWFscywgcmVhbG06IHJlYWxtLFxuICAgICAgICBwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge3NjaGVtZTogc2NoZW1lLCBwcmluY2lwYWw6IHByaW5jaXBhbCwgY3JlZGVudGlhbHM6IGNyZWRlbnRpYWxzLCByZWFsbTogcmVhbG19O1xuICAgIH1cbiAgfVxufTtcbmNvbnN0IFVTRVJfQUdFTlQgPSBcIm5lbzRqLWphdmFzY3JpcHQvXCIgKyBWRVJTSU9OO1xuXG4vKipcbiAqIENvbnN0cnVjdCBhIG5ldyBOZW80aiBEcml2ZXIuIFRoaXMgaXMgeW91ciBtYWluIGVudHJ5IHBvaW50IGZvciB0aGlzXG4gKiBsaWJyYXJ5LlxuICpcbiAqICMjIENvbmZpZ3VyYXRpb25cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIG9wdGlvbmFsbHkgdGFrZXMgYSBjb25maWd1cmF0aW9uIGFyZ3VtZW50LiBBdmFpbGFibGUgY29uZmlndXJhdGlvblxuICogb3B0aW9ucyBhcmUgYXMgZm9sbG93czpcbiAqXG4gKiAgICAge1xuICogICAgICAgLy8gRW5jcnlwdGlvbiBsZXZlbDogRU5DUllQVElPTl9PTiBvciBFTkNSWVBUSU9OX09GRi5cbiAqICAgICAgIGVuY3J5cHRlZDogRU5DUllQVElPTl9PTnxFTkNSWVBUSU9OX09GRlxuICpcbiAqICAgICAgIC8vIFRydXN0IHN0cmF0ZWd5IHRvIHVzZSBpZiBlbmNyeXB0aW9uIGlzIGVuYWJsZWQuIFRoZXJlIGlzIG5vIG1vZGUgdG8gZGlzYWJsZVxuICogICAgICAgLy8gdHJ1c3Qgb3RoZXIgdGhhbiBkaXNhYmxpbmcgZW5jcnlwdGlvbiBhbHRvZ2V0aGVyLiBUaGUgcmVhc29uIGZvclxuICogICAgICAgLy8gdGhpcyBpcyB0aGF0IGlmIHlvdSBkb24ndCBrbm93IHdobyB5b3UgYXJlIHRhbGtpbmcgdG8sIGl0IGlzIGVhc3kgZm9yIGFuXG4gKiAgICAgICAvLyBhdHRhY2tlciB0byBoaWphY2sgeW91ciBlbmNyeXB0ZWQgY29ubmVjdGlvbiwgcmVuZGVyaW5nIGVuY3J5cHRpb24gcG9pbnRsZXNzLlxuICogICAgICAgLy9cbiAqICAgICAgIC8vIFRSVVNUX0FMTF9DRVJUSUZJQ0FURVMgaXMgdGhlIGRlZmF1bHQgY2hvaWNlIGZvciBOb2RlSlMgZGVwbG95bWVudHMuIEl0IG9ubHkgcmVxdWlyZXNcbiAqICAgICAgIC8vIG5ldyBob3N0IHRvIHByb3ZpZGUgYSBjZXJ0aWZpY2F0ZSBhbmQgZG9lcyBubyB2ZXJpZmljYXRpb24gb2YgdGhlIHByb3ZpZGVkIGNlcnRpZmljYXRlLlxuICogICAgICAgLy9cbiAqICAgICAgIC8vIFRSVVNUX09OX0ZJUlNUX1VTRSBpcyBhdmFpbGFibGUgZm9yIG1vZGVybiBOb2RlSlMgZGVwbG95bWVudHMsIGFuZCB3b3Jrc1xuICogICAgICAgLy8gc2ltaWxhcmx5IHRvIGhvdyBgc3NsYCB3b3JrcyAtIHRoZSBmaXJzdCB0aW1lIHdlIGNvbm5lY3QgdG8gYSBuZXcgaG9zdCxcbiAqICAgICAgIC8vIHdlIHJlbWVtYmVyIHRoZSBjZXJ0aWZpY2F0ZSB0aGV5IHVzZS4gSWYgdGhlIGNlcnRpZmljYXRlIGV2ZXIgY2hhbmdlcywgd2VcbiAqICAgICAgIC8vIGFzc3VtZSBpdCBpcyBhbiBhdHRlbXB0IHRvIGhpamFjayB0aGUgY29ubmVjdGlvbiBhbmQgcmVxdWlyZSBtYW51YWwgaW50ZXJ2ZW50aW9uLlxuICogICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGJ5IGRlZmF1bHQsIGNvbm5lY3Rpb25zIFwianVzdCB3b3JrXCIgd2hpbGUgc3RpbGwgZ2l2aW5nIHlvdVxuICogICAgICAgLy8gZ29vZCBlbmNyeXB0ZWQgcHJvdGVjdGlvbi5cbiAqICAgICAgIC8vXG4gKiAgICAgICAvLyBUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFUyBpcyB0aGUgY2xhc3NpYyBhcHByb2FjaCB0byB0cnVzdCB2ZXJpZmljYXRpb24gLVxuICogICAgICAgLy8gd2hlbmV2ZXIgd2UgZXN0YWJsaXNoIGFuIGVuY3J5cHRlZCBjb25uZWN0aW9uLCB3ZSBlbnN1cmUgdGhlIGhvc3QgaXMgdXNpbmdcbiAqICAgICAgIC8vIGFuIGVuY3J5cHRpb24gY2VydGlmaWNhdGUgdGhhdCBpcyBpbiwgb3IgaXMgc2lnbmVkIGJ5LCBhIGNlcnRpZmljYXRlIGxpc3RlZFxuICogICAgICAgLy8gYXMgdHJ1c3RlZC4gSW4gdGhlIHdlYiBidW5kbGUsIHRoaXMgbGlzdCBvZiB0cnVzdGVkIGNlcnRpZmljYXRlcyBpcyBtYWludGFpbmVkXG4gKiAgICAgICAvLyBieSB0aGUgd2ViIGJyb3dzZXIuIEluIE5vZGVKUywgeW91IGNvbmZpZ3VyZSB0aGUgbGlzdCB3aXRoIHRoZSBuZXh0IGNvbmZpZyBvcHRpb24uXG4gKiAgICAgICAvL1xuICogICAgICAgLy8gVFJVU1RfU1lTVEVNX0NBX1NJR05FRF9DRVJUSUZJQ0FURVMgbWVhbmQgdGhhdCB5b3UgdHJ1c3Qgd2hhdGV2ZXIgY2VydGlmaWNhdGVzXG4gKiAgICAgICAvLyBhcmUgaW4gdGhlIGRlZmF1bHQgY2VydGlmaWNhdGUgY2hhaW4gb2YgdGhcbiAqICAgICAgIHRydXN0OiBcIlRSVVNUX0FMTF9DRVJUSUZJQ0FURVNcIiB8IFwiVFJVU1RfT05fRklSU1RfVVNFXCIgfCBcIlRSVVNUX1NJR05FRF9DRVJUSUZJQ0FURVNcIiB8XG4gICogICAgICAgXCJUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFU1wiIHwgXCJUUlVTVF9TWVNURU1fQ0FfU0lHTkVEX0NFUlRJRklDQVRFU1wiLFxuICpcbiAqICAgICAgIC8vIExpc3Qgb2Ygb25lIG9yIG1vcmUgcGF0aHMgdG8gdHJ1c3RlZCBlbmNyeXB0aW9uIGNlcnRpZmljYXRlcy4gVGhpcyBvbmx5XG4gKiAgICAgICAvLyB3b3JrcyBpbiB0aGUgTm9kZUpTIGJ1bmRsZSwgYW5kIG9ubHkgbWF0dGVycyBpZiB5b3UgdXNlIFwiVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVNcIi5cbiAqICAgICAgIC8vIFRoZSBjZXJ0aWZpY2F0ZSBmaWxlcyBzaG91bGQgYmUgaW4gcmVndWxhciBYLjUwOSBQRU0gZm9ybWF0LlxuICogICAgICAgLy8gRm9yIGluc3RhbmNlLCBbJy4vdHJ1c3RlZC5wZW0nXVxuICogICAgICAgdHJ1c3RlZENlcnRpZmljYXRlczogW10sXG4gKlxuICogICAgICAgLy8gUGF0aCB0byBhIGZpbGUgd2hlcmUgdGhlIGRyaXZlciBzYXZlcyBob3N0cyBpdCBoYXMgc2VlbiBpbiB0aGUgcGFzdCwgdGhpcyBpc1xuICogICAgICAgLy8gdmVyeSBzaW1pbGFyIHRvIHRoZSBzc2wgdG9vbCdzIGtub3duX2hvc3RzIGZpbGUuIEVhY2ggdGltZSB3ZSBjb25uZWN0IHRvIGFcbiAqICAgICAgIC8vIG5ldyBob3N0LCBhIGhhc2ggb2YgdGhlaXIgY2VydGlmaWNhdGUgaXMgc3RvcmVkIGFsb25nIHdpdGggdGhlIGRvbWFpbiBuYW1lIGFuZFxuICogICAgICAgLy8gcG9ydCwgYW5kIHRoaXMgaXMgdGhlbiB1c2VkIHRvIHZlcmlmeSB0aGUgaG9zdCBjZXJ0aWZpY2F0ZSBkb2VzIG5vdCBjaGFuZ2UuXG4gKiAgICAgICAvLyBUaGlzIHNldHRpbmcgaGFzIG5vIGVmZmVjdCB1bmxlc3MgVFJVU1RfT05fRklSU1RfVVNFIGlzIGVuYWJsZWQuXG4gKiAgICAgICBrbm93bkhvc3RzOlwifi8ubmVvNGova25vd25faG9zdHNcIixcbiAqXG4gKiAgICAgICAvLyBUaGUgbWF4IG51bWJlciBvZiBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbGxvd2VkIGlkbGUgaW4gdGhlIHBvb2wgYXQgYW55IHRpbWUuXG4gKiAgICAgICAvLyBDb25uZWN0aW9uIHdpbGwgYmUgZGVzdHJveWVkIGlmIHRoaXMgdGhyZXNob2xkIGlzIGV4Y2VlZGVkLlxuICogICAgICAgY29ubmVjdGlvblBvb2xTaXplOiA1MCxcbiAqXG4gKiAgICAgICAvLyBTcGVjaWZ5IHRoZSBtYXhpbXVtIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRyYW5zYWN0aW9ucyBhcmUgYWxsb3dlZCB0byByZXRyeSB2aWFcbiAqICAgICAgIC8vIHtAbGluayBTZXNzaW9uI3JlYWRUcmFuc2FjdGlvbigpfSBhbmQge0BsaW5rIFNlc3Npb24jd3JpdGVUcmFuc2FjdGlvbigpfSBmdW5jdGlvbnMuIFRoZXNlIGZ1bmN0aW9uc1xuICogICAgICAgLy8gd2lsbCByZXRyeSB0aGUgZ2l2ZW4gdW5pdCBvZiB3b3JrIG9uIGBTZXJ2aWNlVW5hdmFpbGFibGVgLCBgU2Vzc2lvbkV4cGlyZWRgIGFuZCB0cmFuc2llbnQgZXJyb3JzIHdpdGhcbiAqICAgICAgIC8vIGV4cG9uZW50aWFsIGJhY2tvZmYgdXNpbmcgaW5pdGlhbCBkZWxheSBvZiAxIHNlY29uZC4gRGVmYXVsdCB2YWx1ZSBpcyAzMDAwMCB3aGljaCBpcyAzMCBzZWNvbmRzLlxuICogICAgICAgbWF4VHJhbnNhY3Rpb25SZXRyeVRpbWU6IDMwMDAwLFxuICogICAgIH1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgZm9yIHRoZSBOZW80aiBkYXRhYmFzZSwgZm9yIGluc3RhbmNlIFwiYm9sdDovL2xvY2FsaG9zdFwiXG4gKiBAcGFyYW0ge01hcDxTdHJpbmcsU3RyaW5nPn0gYXV0aFRva2VuIEF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzLiBTZWUge0BsaW5rIGF1dGh9IGZvciBoZWxwZXJzLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBDb25maWd1cmF0aW9uIG9iamVjdC4gU2VlIHRoZSBjb25maWd1cmF0aW9uIHNlY3Rpb24gYWJvdmUgZm9yIGRldGFpbHMuXG4gKiBAcmV0dXJucyB7RHJpdmVyfVxuICovXG5mdW5jdGlvbiBkcml2ZXIodXJsLCBhdXRoVG9rZW4sIGNvbmZpZyA9IHt9KSB7XG4gIGFzc2VydFN0cmluZyh1cmwsICdCb2x0IFVSTCcpO1xuICBjb25zdCBzY2hlbWUgPSBwYXJzZVNjaGVtZSh1cmwpO1xuICBjb25zdCByb3V0aW5nQ29udGV4dCA9IHBhcnNlUm91dGluZ0NvbnRleHQodXJsKTtcbiAgaWYgKHNjaGVtZSA9PT0gJ2JvbHQrcm91dGluZzovLycpIHtcbiAgICByZXR1cm4gbmV3IFJvdXRpbmdEcml2ZXIocGFyc2VVcmwodXJsKSwgcm91dGluZ0NvbnRleHQsIFVTRVJfQUdFTlQsIGF1dGhUb2tlbiwgY29uZmlnKTtcbiAgfSBlbHNlIGlmIChzY2hlbWUgPT09ICdib2x0Oi8vJykge1xuICAgIGlmICghaXNFbXB0eU9iamVjdE9yTnVsbChyb3V0aW5nQ29udGV4dCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGFyYW1ldGVycyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIHNjaGVtZSAnYm9sdCcuIEdpdmVuIFVSTDogJyR7dXJsfSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEcml2ZXIocGFyc2VVcmwodXJsKSwgVVNFUl9BR0VOVCwgYXV0aFRva2VuLCBjb25maWcpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzY2hlbWU6ICR7c2NoZW1lfWApO1xuICB9XG59XG5cbmNvbnN0IHR5cGVzID17XG4gIE5vZGUsXG4gIFJlbGF0aW9uc2hpcCxcbiAgVW5ib3VuZFJlbGF0aW9uc2hpcCxcbiAgUGF0aFNlZ21lbnQsXG4gIFBhdGgsXG4gIFJlc3VsdCxcbiAgUmVzdWx0U3VtbWFyeSxcbiAgUmVjb3JkXG4gIH07XG5cbmNvbnN0IHNlc3Npb24gPSB7XG4gIFJFQUQsXG4gIFdSSVRFXG59O1xuY29uc3QgZXJyb3IgPSB7XG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEUsXG4gIFNFU1NJT05fRVhQSVJFRCxcbiAgUFJPVE9DT0xfRVJST1Jcbn07XG5jb25zdCBpbnRlZ2VyID0ge1xuICB0b051bWJlcixcbiAgdG9TdHJpbmcsXG4gIGluU2FmZVJhbmdlXG59O1xuXG5jb25zdCBmb3JFeHBvcnQgPSB7XG4gIGRyaXZlcixcbiAgaW50LFxuICBpc0ludCxcbiAgaW50ZWdlcixcbiAgTmVvNGpFcnJvcixcbiAgYXV0aCxcbiAgdHlwZXMsXG4gIHNlc3Npb24sXG4gIGVycm9yXG59O1xuXG5leHBvcnQge1xuICBkcml2ZXIsXG4gIGludCxcbiAgaXNJbnQsXG4gIGludGVnZXIsXG4gIE5lbzRqRXJyb3IsXG4gIGF1dGgsXG4gIHR5cGVzLFxuICBzZXNzaW9uLFxuICBlcnJvclxufVxuZXhwb3J0IGRlZmF1bHQgZm9yRXhwb3J0XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gNjQtYml0IEludGVnZXIgbGlicmFyeSwgb3JpZ2luYWxseSBmcm9tIExvbmcuanMgYnkgZGNvZGVJT1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rjb2RlSU8vTG9uZy5qc1xuLy8gTGljZW5zZSBBcGFjaGUgMlxuXG5pbXBvcnQge25ld0Vycm9yfSBmcm9tIFwiLi9lcnJvclwiO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSA2NCBiaXQgdHdvJ3MtY29tcGxlbWVudCBpbnRlZ2VyLCBnaXZlbiBpdHMgbG93IGFuZCBoaWdoIDMyIGJpdCB2YWx1ZXMgYXMgKnNpZ25lZCogaW50ZWdlcnMuXG4gKiAgU2VlIHRoZSBmcm9tKiBmdW5jdGlvbnMgYmVsb3cgZm9yIG1vcmUgY29udmVuaWVudCB3YXlzIG9mIGNvbnN0cnVjdGluZyBJbnRlZ2Vycy5cbiAqIEBhY2Nlc3MgcHVibGljXG4gKiBAZXhwb3J0cyBJbnRlZ2VyXG4gKiBAY2xhc3MgQSBJbnRlZ2VyIGNsYXNzIGZvciByZXByZXNlbnRpbmcgYSA2NCBiaXQgdHdvJ3MtY29tcGxlbWVudCBpbnRlZ2VyIHZhbHVlLlxuICogQHBhcmFtIHtudW1iZXJ9IGxvdyBUaGUgbG93IChzaWduZWQpIDMyIGJpdHMgb2YgdGhlIGxvbmdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoaWdoIFRoZSBoaWdoIChzaWduZWQpIDMyIGJpdHMgb2YgdGhlIGxvbmdcbiAqIEBjb25zdHJ1Y3RvclxuICpcbiAqIEBkZXByZWNhdGVkIFRoaXMgY2xhc3Mgd2lsbCBiZSByZW1vdmVkIG9yIG1hZGUgaW50ZXJuYWwgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGUgZHJpdmVyLlxuICovXG5jbGFzcyBJbnRlZ2VyIHtcbiAgY29uc3RydWN0b3IobG93LCBoaWdoKSB7XG4gICAgLyoqXG4gICAgICogVGhlIGxvdyAzMiBiaXRzIGFzIGEgc2lnbmVkIHZhbHVlLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuICAgIHRoaXMubG93ID0gbG93fDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGlnaCAzMiBiaXRzIGFzIGEgc2lnbmVkIHZhbHVlLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQGV4cG9zZVxuICAgICAqL1xuICAgIHRoaXMuaGlnaCA9IGhpZ2h8MDtcbiAgfVxuXG4gIC8vIFRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhbiBJbnRlZ2VyIGlzIHRoZSB0d28gZ2l2ZW4gc2lnbmVkLCAzMi1iaXQgdmFsdWVzLlxuICAvLyBXZSB1c2UgMzItYml0IHBpZWNlcyBiZWNhdXNlIHRoZXNlIGFyZSB0aGUgc2l6ZSBvZiBpbnRlZ2VycyBvbiB3aGljaFxuICAvLyBKYXZhc2NyaXB0IHBlcmZvcm1zIGJpdC1vcGVyYXRpb25zLiAgRm9yIG9wZXJhdGlvbnMgbGlrZSBhZGRpdGlvbiBhbmRcbiAgLy8gbXVsdGlwbGljYXRpb24sIHdlIHNwbGl0IGVhY2ggbnVtYmVyIGludG8gMTYgYml0IHBpZWNlcywgd2hpY2ggY2FuIGVhc2lseSBiZVxuICAvLyBtdWx0aXBsaWVkIHdpdGhpbiBKYXZhc2NyaXB0J3MgZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50YXRpb24gd2l0aG91dCBvdmVyZmxvd1xuICAvLyBvciBjaGFuZ2UgaW4gc2lnbi5cbiAgLy9cbiAgLy8gSW4gdGhlIGFsZ29yaXRobXMgYmVsb3csIHdlIGZyZXF1ZW50bHkgcmVkdWNlIHRoZSBuZWdhdGl2ZSBjYXNlIHRvIHRoZVxuICAvLyBwb3NpdGl2ZSBjYXNlIGJ5IG5lZ2F0aW5nIHRoZSBpbnB1dChzKSBhbmQgdGhlbiBwb3N0LXByb2Nlc3NpbmcgdGhlIHJlc3VsdC5cbiAgLy8gTm90ZSB0aGF0IHdlIG11c3QgQUxXQVlTIGNoZWNrIHNwZWNpYWxseSB3aGV0aGVyIHRob3NlIHZhbHVlcyBhcmUgTUlOX1ZBTFVFXG4gIC8vICgtMl42MykgYmVjYXVzZSAtTUlOX1ZBTFVFID09IE1JTl9WQUxVRSAoc2luY2UgMl42MyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXNcbiAgLy8gYSBwb3NpdGl2ZSBudW1iZXIsIGl0IG92ZXJmbG93cyBiYWNrIGludG8gYSBuZWdhdGl2ZSkuICBOb3QgaGFuZGxpbmcgdGhpc1xuICAvLyBjYXNlIHdvdWxkIG9mdGVuIHJlc3VsdCBpbiBpbmZpbml0ZSByZWN1cnNpb24uXG4gIC8vXG4gIC8vIENvbW1vbiBjb25zdGFudCB2YWx1ZXMgWkVSTywgT05FLCBORUdfT05FLCBldGMuIGFyZSBkZWZpbmVkIGJlbG93IHRoZSBmcm9tKlxuICAvLyBtZXRob2RzIG9uIHdoaWNoIHRoZXkgZGVwZW5kLlxuXG5cbiAgaW5TYWZlUmFuZ2UoKSB7cmV0dXJuIHRoaXMuZ3JlYXRlclRoYW5PckVxdWFsKEludGVnZXIuTUlOX1NBRkVfVkFMVUUpICYmIHRoaXMubGVzc1RoYW5PckVxdWFsKEludGVnZXIuTUFYX1NBRkVfVkFMVUUpfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIEludGVnZXIgdG8gYW4gZXhhY3QgamF2YXNjcmlwdCBOdW1iZXIsIGFzc3VtaW5nIGl0IGlzIGEgMzIgYml0IGludGVnZXIuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEBleHBvc2VcbiAgICovXG4gIHRvSW50KCkgeyByZXR1cm4gdGhpcy5sb3c7IH07XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBJbnRlZ2VyIHRvIGEgdGhlIG5lYXJlc3QgZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50YXRpb24gb2YgdGhpcyB2YWx1ZSAoZG91YmxlLCA1MyBiaXQgbWFudGlzc2EpLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAZXhwb3NlXG4gICAqL1xuICB0b051bWJlcigpeyByZXR1cm4gdGhpcy5oaWdoICogVFdPX1BXUl8zMl9EQkwgKyAodGhpcy5sb3cgPj4+IDApOyB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBJbnRlZ2VyIHRvIGEgc3RyaW5nIHdyaXR0ZW4gaW4gdGhlIHNwZWNpZmllZCByYWRpeC5cbiAgICogQHBhcmFtIHtudW1iZXI9fSByYWRpeCBSYWRpeCAoMi0zNiksIGRlZmF1bHRzIHRvIDEwXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBvdmVycmlkZVxuICAgKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBJZiBgcmFkaXhgIGlzIG91dCBvZiByYW5nZVxuICAgKiBAZXhwb3NlXG4gICAqL1xuICB0b1N0cmluZyhyYWRpeCkge1xuICAgIHJhZGl4ID0gcmFkaXggfHwgMTA7XG4gICAgaWYgKHJhZGl4IDwgMiB8fCAzNiA8IHJhZGl4KVxuICAgICAgdGhyb3cgUmFuZ2VFcnJvcigncmFkaXggb3V0IG9mIHJhbmdlOiAnICsgcmFkaXgpO1xuICAgIGlmICh0aGlzLmlzWmVybygpKVxuICAgICAgcmV0dXJuICcwJztcbiAgICB2YXIgcmVtO1xuICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkge1xuICAgICAgaWYgKHRoaXMuZXF1YWxzKEludGVnZXIuTUlOX1ZBTFVFKSkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGNoYW5nZSB0aGUgSW50ZWdlciB2YWx1ZSBiZWZvcmUgaXQgY2FuIGJlIG5lZ2F0ZWQsIHNvIHdlIHJlbW92ZVxuICAgICAgICAvLyB0aGUgYm90dG9tLW1vc3QgZGlnaXQgaW4gdGhpcyBiYXNlIGFuZCB0aGVuIHJlY3Vyc2UgdG8gZG8gdGhlIHJlc3QuXG4gICAgICAgIHZhciByYWRpeEludGVnZXIgPSBJbnRlZ2VyLmZyb21OdW1iZXIocmFkaXgpO1xuICAgICAgICB2YXIgZGl2ID0gdGhpcy5kaXYocmFkaXhJbnRlZ2VyKTtcbiAgICAgICAgcmVtID0gZGl2Lm11bHRpcGx5KHJhZGl4SW50ZWdlcikuc3VidHJhY3QodGhpcyk7XG4gICAgICAgIHJldHVybiBkaXYudG9TdHJpbmcocmFkaXgpICsgcmVtLnRvSW50KCkudG9TdHJpbmcocmFkaXgpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIHJldHVybiAnLScgKyB0aGlzLm5lZ2F0ZSgpLnRvU3RyaW5nKHJhZGl4KTtcbiAgICB9XG5cbiAgICAvLyBEbyBzZXZlcmFsICg2KSBkaWdpdHMgZWFjaCB0aW1lIHRocm91Z2ggdGhlIGxvb3AsIHNvIGFzIHRvXG4gICAgLy8gbWluaW1pemUgdGhlIGNhbGxzIHRvIHRoZSB2ZXJ5IGV4cGVuc2l2ZSBlbXVsYXRlZCBkaXYuXG4gICAgdmFyIHJhZGl4VG9Qb3dlciA9IEludGVnZXIuZnJvbU51bWJlcihNYXRoLnBvdyhyYWRpeCwgNikgKTtcbiAgICByZW0gPSB0aGlzO1xuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdmFyIHJlbURpdiA9IHJlbS5kaXYocmFkaXhUb1Bvd2VyKSxcbiAgICAgICAgICBpbnR2YWwgPSByZW0uc3VidHJhY3QocmVtRGl2Lm11bHRpcGx5KHJhZGl4VG9Qb3dlcikpLnRvSW50KCkgPj4+IDAsXG4gICAgICAgICAgZGlnaXRzID0gaW50dmFsLnRvU3RyaW5nKHJhZGl4KTtcbiAgICAgIHJlbSA9IHJlbURpdjtcbiAgICAgIGlmIChyZW0uaXNaZXJvKCkpXG4gICAgICAgIHJldHVybiBkaWdpdHMgKyByZXN1bHQ7XG4gICAgICBlbHNlIHtcbiAgICAgICAgd2hpbGUgKGRpZ2l0cy5sZW5ndGggPCA2KVxuICAgICAgICAgIGRpZ2l0cyA9ICcwJyArIGRpZ2l0cztcbiAgICAgICAgcmVzdWx0ID0gJycgKyBkaWdpdHMgKyByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGhpZ2ggMzIgYml0cyBhcyBhIHNpZ25lZCBpbnRlZ2VyLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBTaWduZWQgaGlnaCBiaXRzXG4gICAqIEBleHBvc2VcbiAgICovXG4gIGdldEhpZ2hCaXRzKCkgeyByZXR1cm4gdGhpcy5oaWdoOyB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxvdyAzMiBiaXRzIGFzIGEgc2lnbmVkIGludGVnZXIuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFNpZ25lZCBsb3cgYml0c1xuICAgKiBAZXhwb3NlXG4gICAqL1xuICBnZXRMb3dCaXRzKCkgeyByZXR1cm4gdGhpcy5sb3c7IH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIHRvIHJlcHJlc2VudCB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBJbnRlZ2VyLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAZXhwb3NlXG4gICAqL1xuICBnZXROdW1CaXRzQWJzKCkge1xuICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSlcbiAgICAgIHJldHVybiB0aGlzLmVxdWFscyhJbnRlZ2VyLk1JTl9WQUxVRSkgPyA2NCA6IHRoaXMubmVnYXRlKCkuZ2V0TnVtQml0c0FicygpO1xuICAgIHZhciB2YWwgPSB0aGlzLmhpZ2ggIT0gMCA/IHRoaXMuaGlnaCA6IHRoaXMubG93O1xuICAgIGZvciAodmFyIGJpdCA9IDMxOyBiaXQgPiAwOyBiaXQtLSlcbiAgICAgIGlmICgodmFsICYgKDEgPDwgYml0KSkgIT0gMClcbiAgICAgICAgYnJlYWs7XG4gICAgcmV0dXJuIHRoaXMuaGlnaCAhPSAwID8gYml0ICsgMzMgOiBiaXQgKyAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlc3RzIGlmIHRoaXMgSW50ZWdlcidzIHZhbHVlIGVxdWFscyB6ZXJvLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQGV4cG9zZVxuICAgKi9cbiAgaXNaZXJvKCkge1xuICAgIHJldHVybiB0aGlzLmhpZ2ggPT09IDAgJiYgdGhpcy5sb3cgPT09IDA7XG4gIH1cblxuICAvKipcbiAgICogVGVzdHMgaWYgdGhpcyBJbnRlZ2VyJ3MgdmFsdWUgaXMgbmVnYXRpdmUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKiBAZXhwb3NlXG4gICAqL1xuICBpc05lZ2F0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLmhpZ2ggPCAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlc3RzIGlmIHRoaXMgSW50ZWdlcidzIHZhbHVlIGlzIHBvc2l0aXZlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQGV4cG9zZVxuICAgKi9cbiAgaXNQb3NpdGl2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5oaWdoID49IDA7XG4gIH1cblxuICAvKipcbiAgICogVGVzdHMgaWYgdGhpcyBJbnRlZ2VyJ3MgdmFsdWUgaXMgb2RkLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQGV4cG9zZVxuICAgKi9cbiAgaXNPZGQoKSB7IHJldHVybiAodGhpcy5sb3cgJiAxKSA9PT0gMTsgfVxuXG4gIC8qKlxuICAgKiBUZXN0cyBpZiB0aGlzIEludGVnZXIncyB2YWx1ZSBpcyBldmVuLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQGV4cG9zZVxuICAgKi9cbiAgaXNFdmVuKCkgeyByZXR1cm4gKHRoaXMubG93ICYgMSkgPT09IDA7IH07XG5cbiAgLyoqXG4gICAqIFRlc3RzIGlmIHRoaXMgSW50ZWdlcidzIHZhbHVlIGVxdWFscyB0aGUgc3BlY2lmaWVkJ3MuXG4gICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBleHBvc2VcbiAgICovXG4gIGVxdWFscyhvdGhlcikge1xuICAgIGlmICghSW50ZWdlci5pc0ludGVnZXIob3RoZXIpKVxuICAgICAgb3RoZXIgPSBJbnRlZ2VyLmZyb21WYWx1ZShvdGhlcik7XG4gICAgcmV0dXJuIHRoaXMuaGlnaCA9PT0gb3RoZXIuaGlnaCAmJiB0aGlzLmxvdyA9PT0gb3RoZXIubG93O1xuICB9XG5cbiAgLyoqXG4gICAqIFRlc3RzIGlmIHRoaXMgSW50ZWdlcidzIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgc3BlY2lmaWVkJ3MuXG4gICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBleHBvc2VcbiAgICovXG4gIG5vdEVxdWFscyhvdGhlcikgeyAhdGhpcy5lcXVhbHMoLyogdmFsaWRhdGVzICovIG90aGVyKTsgfVxuXG4gIC8qKlxuICAgKiBUZXN0cyBpZiB0aGlzIEludGVnZXIncyB2YWx1ZSBpcyBsZXNzIHRoYW4gdGhlIHNwZWNpZmllZCdzLlxuICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKiBAZXhwb3NlXG4gICAqL1xuICBsZXNzVGhhbihvdGhlcikgeyByZXR1cm4gdGhpcy5jb21wYXJlKC8qIHZhbGlkYXRlcyAqLyBvdGhlcikgPCAwOyB9XG5cbiAgLyoqXG4gICAqIFRlc3RzIGlmIHRoaXMgSW50ZWdlcidzIHZhbHVlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0aGUgc3BlY2lmaWVkJ3MuXG4gICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBleHBvc2VcbiAgICovXG4gIGxlc3NUaGFuT3JFcXVhbChvdGhlcikgeyByZXR1cm4gdGhpcy5jb21wYXJlKC8qIHZhbGlkYXRlcyAqLyBvdGhlcikgPD0gMDsgfVxuXG4gIC8qKlxuICAgKiBUZXN0cyBpZiB0aGlzIEludGVnZXIncyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhlIHNwZWNpZmllZCdzLlxuICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKiBAZXhwb3NlXG4gICAqL1xuICBncmVhdGVyVGhhbihvdGhlcikgeyByZXR1cm4gdGhpcy5jb21wYXJlKC8qIHZhbGlkYXRlcyAqLyBvdGhlcikgPiAwOyB9XG5cbiAgLyoqXG4gICAqIFRlc3RzIGlmIHRoaXMgSW50ZWdlcidzIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0aGUgc3BlY2lmaWVkJ3MuXG4gICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBleHBvc2VcbiAgICovXG4gIGdyZWF0ZXJUaGFuT3JFcXVhbChvdGhlcikgeyByZXR1cm4gdGhpcy5jb21wYXJlKC8qIHZhbGlkYXRlcyAqLyBvdGhlcikgPj0gMDsgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlcyB0aGlzIEludGVnZXIncyB2YWx1ZSB3aXRoIHRoZSBzcGVjaWZpZWQncy5cbiAgICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIHRoZXkgYXJlIHRoZSBzYW1lLCAxIGlmIHRoZSB0aGlzIGlzIGdyZWF0ZXIgYW5kIC0xXG4gICAqICBpZiB0aGUgZ2l2ZW4gb25lIGlzIGdyZWF0ZXJcbiAgICogQGV4cG9zZVxuICAgKi9cbiAgY29tcGFyZShvdGhlcikge1xuICAgIGlmICghSW50ZWdlci5pc0ludGVnZXIob3RoZXIpKVxuICAgICAgb3RoZXIgPSBJbnRlZ2VyLmZyb21WYWx1ZShvdGhlcik7XG4gICAgaWYgKHRoaXMuZXF1YWxzKG90aGVyKSlcbiAgICAgIHJldHVybiAwO1xuICAgIHZhciB0aGlzTmVnID0gdGhpcy5pc05lZ2F0aXZlKCksXG4gICAgICBvdGhlck5lZyA9IG90aGVyLmlzTmVnYXRpdmUoKTtcbiAgICBpZiAodGhpc05lZyAmJiAhb3RoZXJOZWcpXG4gICAgICByZXR1cm4gLTE7XG4gICAgaWYgKCF0aGlzTmVnICYmIG90aGVyTmVnKVxuICAgICAgcmV0dXJuIDE7XG4gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgc2lnbiBiaXRzIGFyZSB0aGUgc2FtZVxuICAgIHJldHVybiB0aGlzLnN1YnRyYWN0KG90aGVyKS5pc05lZ2F0aXZlKCkgPyAtMSA6IDE7XG4gIH1cblxuICAvKipcbiAgICogTmVnYXRlcyB0aGlzIEludGVnZXIncyB2YWx1ZS5cbiAgICogQHJldHVybnMgeyFJbnRlZ2VyfSBOZWdhdGVkIEludGVnZXJcbiAgICogQGV4cG9zZVxuICAgKi9cbiAgbmVnYXRlKCkge1xuICAgIGlmICh0aGlzLmVxdWFscyhJbnRlZ2VyLk1JTl9WQUxVRSkpXG4gICAgICByZXR1cm4gSW50ZWdlci5NSU5fVkFMVUU7XG4gICAgcmV0dXJuIHRoaXMubm90KCkuYWRkKEludGVnZXIuT05FKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdW0gb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBJbnRlZ2VyLlxuICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IGFkZGVuZCBBZGRlbmRcbiAgICogQHJldHVybnMgeyFJbnRlZ2VyfSBTdW1cbiAgICogQGV4cG9zZVxuICAgKi9cbiAgYWRkKGFkZGVuZCkge1xuICAgIGlmICghSW50ZWdlci5pc0ludGVnZXIoYWRkZW5kKSlcbiAgICAgIGFkZGVuZCA9IEludGVnZXIuZnJvbVZhbHVlKGFkZGVuZCk7XG5cbiAgICAvLyBEaXZpZGUgZWFjaCBudW1iZXIgaW50byA0IGNodW5rcyBvZiAxNiBiaXRzLCBhbmQgdGhlbiBzdW0gdGhlIGNodW5rcy5cblxuICAgIHZhciBhNDggPSB0aGlzLmhpZ2ggPj4+IDE2O1xuICAgIHZhciBhMzIgPSB0aGlzLmhpZ2ggJiAweEZGRkY7XG4gICAgdmFyIGExNiA9IHRoaXMubG93ID4+PiAxNjtcbiAgICB2YXIgYTAwID0gdGhpcy5sb3cgJiAweEZGRkY7XG5cbiAgICB2YXIgYjQ4ID0gYWRkZW5kLmhpZ2ggPj4+IDE2O1xuICAgIHZhciBiMzIgPSBhZGRlbmQuaGlnaCAmIDB4RkZGRjtcbiAgICB2YXIgYjE2ID0gYWRkZW5kLmxvdyA+Pj4gMTY7XG4gICAgdmFyIGIwMCA9IGFkZGVuZC5sb3cgJiAweEZGRkY7XG5cbiAgICB2YXIgYzQ4ID0gMCwgYzMyID0gMCwgYzE2ID0gMCwgYzAwID0gMDtcbiAgICBjMDAgKz0gYTAwICsgYjAwO1xuICAgIGMxNiArPSBjMDAgPj4+IDE2O1xuICAgIGMwMCAmPSAweEZGRkY7XG4gICAgYzE2ICs9IGExNiArIGIxNjtcbiAgICBjMzIgKz0gYzE2ID4+PiAxNjtcbiAgICBjMTYgJj0gMHhGRkZGO1xuICAgIGMzMiArPSBhMzIgKyBiMzI7XG4gICAgYzQ4ICs9IGMzMiA+Pj4gMTY7XG4gICAgYzMyICY9IDB4RkZGRjtcbiAgICBjNDggKz0gYTQ4ICsgYjQ4O1xuICAgIGM0OCAmPSAweEZGRkY7XG4gICAgcmV0dXJuIEludGVnZXIuZnJvbUJpdHMoKGMxNiA8PCAxNikgfCBjMDAsIChjNDggPDwgMTYpIHwgYzMyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIG9mIHRoaXMgYW5kIHRoZSBzcGVjaWZpZWQgSW50ZWdlci5cbiAgICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfSBzdWJ0cmFoZW5kIFN1YnRyYWhlbmRcbiAgICogQHJldHVybnMgeyFJbnRlZ2VyfSBEaWZmZXJlbmNlXG4gICAqIEBleHBvc2VcbiAgICovXG4gIHN1YnRyYWN0KHN1YnRyYWhlbmQpIHtcbiAgICBpZiAoIUludGVnZXIuaXNJbnRlZ2VyKHN1YnRyYWhlbmQpKVxuICAgICAgc3VidHJhaGVuZCA9IEludGVnZXIuZnJvbVZhbHVlKHN1YnRyYWhlbmQpO1xuICAgIHJldHVybiB0aGlzLmFkZChzdWJ0cmFoZW5kLm5lZ2F0ZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIHRoaXMgYW5kIHRoZSBzcGVjaWZpZWQgSW50ZWdlci5cbiAgICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfSBtdWx0aXBsaWVyIE11bHRpcGxpZXJcbiAgICogQHJldHVybnMgeyFJbnRlZ2VyfSBQcm9kdWN0XG4gICAqIEBleHBvc2VcbiAgICovXG4gIG11bHRpcGx5KG11bHRpcGxpZXIpIHtcbiAgICBpZiAodGhpcy5pc1plcm8oKSlcbiAgICAgIHJldHVybiBJbnRlZ2VyLlpFUk87XG4gICAgaWYgKCFJbnRlZ2VyLmlzSW50ZWdlcihtdWx0aXBsaWVyKSlcbiAgICAgIG11bHRpcGxpZXIgPSBJbnRlZ2VyLmZyb21WYWx1ZShtdWx0aXBsaWVyKTtcbiAgICBpZiAobXVsdGlwbGllci5pc1plcm8oKSlcbiAgICAgIHJldHVybiBJbnRlZ2VyLlpFUk87XG4gICAgaWYgKHRoaXMuZXF1YWxzKEludGVnZXIuTUlOX1ZBTFVFKSlcbiAgICAgIHJldHVybiBtdWx0aXBsaWVyLmlzT2RkKCkgPyBJbnRlZ2VyLk1JTl9WQUxVRSA6IEludGVnZXIuWkVSTztcbiAgICBpZiAobXVsdGlwbGllci5lcXVhbHMoSW50ZWdlci5NSU5fVkFMVUUpKVxuICAgICAgcmV0dXJuIHRoaXMuaXNPZGQoKSA/IEludGVnZXIuTUlOX1ZBTFVFIDogSW50ZWdlci5aRVJPO1xuXG4gICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSB7XG4gICAgICBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpXG4gICAgICAgIHJldHVybiB0aGlzLm5lZ2F0ZSgpLm11bHRpcGx5KG11bHRpcGxpZXIubmVnYXRlKCkpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gdGhpcy5uZWdhdGUoKS5tdWx0aXBseShtdWx0aXBsaWVyKS5uZWdhdGUoKTtcbiAgICB9IGVsc2UgaWYgKG11bHRpcGxpZXIuaXNOZWdhdGl2ZSgpKVxuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbHkobXVsdGlwbGllci5uZWdhdGUoKSkubmVnYXRlKCk7XG5cbiAgICAvLyBJZiBib3RoIGxvbmdzIGFyZSBzbWFsbCwgdXNlIGZsb2F0IG11bHRpcGxpY2F0aW9uXG4gICAgaWYgKHRoaXMubGVzc1RoYW4oVFdPX1BXUl8yNCkgJiYgbXVsdGlwbGllci5sZXNzVGhhbihUV09fUFdSXzI0KSlcbiAgICAgIHJldHVybiBJbnRlZ2VyLmZyb21OdW1iZXIodGhpcy50b051bWJlcigpICogbXVsdGlwbGllci50b051bWJlcigpKTtcblxuICAgIC8vIERpdmlkZSBlYWNoIGxvbmcgaW50byA0IGNodW5rcyBvZiAxNiBiaXRzLCBhbmQgdGhlbiBhZGQgdXAgNHg0IHByb2R1Y3RzLlxuICAgIC8vIFdlIGNhbiBza2lwIHByb2R1Y3RzIHRoYXQgd291bGQgb3ZlcmZsb3cuXG5cbiAgICB2YXIgYTQ4ID0gdGhpcy5oaWdoID4+PiAxNjtcbiAgICB2YXIgYTMyID0gdGhpcy5oaWdoICYgMHhGRkZGO1xuICAgIHZhciBhMTYgPSB0aGlzLmxvdyA+Pj4gMTY7XG4gICAgdmFyIGEwMCA9IHRoaXMubG93ICYgMHhGRkZGO1xuXG4gICAgdmFyIGI0OCA9IG11bHRpcGxpZXIuaGlnaCA+Pj4gMTY7XG4gICAgdmFyIGIzMiA9IG11bHRpcGxpZXIuaGlnaCAmIDB4RkZGRjtcbiAgICB2YXIgYjE2ID0gbXVsdGlwbGllci5sb3cgPj4+IDE2O1xuICAgIHZhciBiMDAgPSBtdWx0aXBsaWVyLmxvdyAmIDB4RkZGRjtcblxuICAgIHZhciBjNDggPSAwLCBjMzIgPSAwLCBjMTYgPSAwLCBjMDAgPSAwO1xuICAgIGMwMCArPSBhMDAgKiBiMDA7XG4gICAgYzE2ICs9IGMwMCA+Pj4gMTY7XG4gICAgYzAwICY9IDB4RkZGRjtcbiAgICBjMTYgKz0gYTE2ICogYjAwO1xuICAgIGMzMiArPSBjMTYgPj4+IDE2O1xuICAgIGMxNiAmPSAweEZGRkY7XG4gICAgYzE2ICs9IGEwMCAqIGIxNjtcbiAgICBjMzIgKz0gYzE2ID4+PiAxNjtcbiAgICBjMTYgJj0gMHhGRkZGO1xuICAgIGMzMiArPSBhMzIgKiBiMDA7XG4gICAgYzQ4ICs9IGMzMiA+Pj4gMTY7XG4gICAgYzMyICY9IDB4RkZGRjtcbiAgICBjMzIgKz0gYTE2ICogYjE2O1xuICAgIGM0OCArPSBjMzIgPj4+IDE2O1xuICAgIGMzMiAmPSAweEZGRkY7XG4gICAgYzMyICs9IGEwMCAqIGIzMjtcbiAgICBjNDggKz0gYzMyID4+PiAxNjtcbiAgICBjMzIgJj0gMHhGRkZGO1xuICAgIGM0OCArPSBhNDggKiBiMDAgKyBhMzIgKiBiMTYgKyBhMTYgKiBiMzIgKyBhMDAgKiBiNDg7XG4gICAgYzQ4ICY9IDB4RkZGRjtcbiAgICByZXR1cm4gSW50ZWdlci5mcm9tQml0cygoYzE2IDw8IDE2KSB8IGMwMCwgKGM0OCA8PCAxNikgfCBjMzIpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoaXMgSW50ZWdlciBkaXZpZGVkIGJ5IHRoZSBzcGVjaWZpZWQuXG4gICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gZGl2aXNvciBEaXZpc29yXG4gICAqIEByZXR1cm5zIHshSW50ZWdlcn0gUXVvdGllbnRcbiAgICogQGV4cG9zZVxuICAgKi9cbiAgZGl2KGRpdmlzb3IpIHtcbiAgICBpZiAoIUludGVnZXIuaXNJbnRlZ2VyKGRpdmlzb3IpKVxuICAgICAgICBkaXZpc29yID0gSW50ZWdlci5mcm9tVmFsdWUoZGl2aXNvcik7XG4gICAgaWYgKGRpdmlzb3IuaXNaZXJvKCkpXG4gICAgICAgIHRocm93IG5ld0Vycm9yKCdkaXZpc2lvbiBieSB6ZXJvJyk7XG4gICAgaWYgKHRoaXMuaXNaZXJvKCkpXG4gICAgICAgIHJldHVybiBJbnRlZ2VyLlpFUk87XG4gICAgdmFyIGFwcHJveCwgcmVtLCByZXM7XG4gICAgaWYgKHRoaXMuZXF1YWxzKEludGVnZXIuTUlOX1ZBTFVFKSkge1xuICAgICAgaWYgKGRpdmlzb3IuZXF1YWxzKEludGVnZXIuT05FKSB8fCBkaXZpc29yLmVxdWFscyhJbnRlZ2VyLk5FR19PTkUpKVxuICAgICAgICByZXR1cm4gSW50ZWdlci5NSU5fVkFMVUU7ICAvLyByZWNhbGwgdGhhdCAtTUlOX1ZBTFVFID09IE1JTl9WQUxVRVxuICAgICAgZWxzZSBpZiAoZGl2aXNvci5lcXVhbHMoSW50ZWdlci5NSU5fVkFMVUUpKVxuICAgICAgICByZXR1cm4gSW50ZWdlci5PTkU7XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSB8b3RoZXJ8ID49IDIsIHNvIHx0aGlzL290aGVyfCA8IHxNSU5fVkFMVUV8LlxuICAgICAgICB2YXIgaGFsZlRoaXMgPSB0aGlzLnNoaWZ0UmlnaHQoMSk7XG4gICAgICAgIGFwcHJveCA9IGhhbGZUaGlzLmRpdihkaXZpc29yKS5zaGlmdExlZnQoMSk7XG4gICAgICAgIGlmIChhcHByb3guZXF1YWxzKEludGVnZXIuWkVSTykpIHtcbiAgICAgICAgICByZXR1cm4gZGl2aXNvci5pc05lZ2F0aXZlKCkgPyBJbnRlZ2VyLk9ORSA6IEludGVnZXIuTkVHX09ORTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZW0gPSB0aGlzLnN1YnRyYWN0KGRpdmlzb3IubXVsdGlwbHkoYXBwcm94KSk7XG4gICAgICAgICAgcmVzID0gYXBwcm94LmFkZChyZW0uZGl2KGRpdmlzb3IpKTtcbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaXZpc29yLmVxdWFscyhJbnRlZ2VyLk1JTl9WQUxVRSkpXG4gICAgICByZXR1cm4gSW50ZWdlci5aRVJPO1xuICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkge1xuICAgICAgaWYgKGRpdmlzb3IuaXNOZWdhdGl2ZSgpKVxuICAgICAgICByZXR1cm4gdGhpcy5uZWdhdGUoKS5kaXYoZGl2aXNvci5uZWdhdGUoKSk7XG4gICAgICByZXR1cm4gdGhpcy5uZWdhdGUoKS5kaXYoZGl2aXNvcikubmVnYXRlKCk7XG4gICAgfSBlbHNlIGlmIChkaXZpc29yLmlzTmVnYXRpdmUoKSlcbiAgICAgIHJldHVybiB0aGlzLmRpdihkaXZpc29yLm5lZ2F0ZSgpKS5uZWdhdGUoKTtcblxuICAgIC8vIFJlcGVhdCB0aGUgZm9sbG93aW5nIHVudGlsIHRoZSByZW1haW5kZXIgaXMgbGVzcyB0aGFuIG90aGVyOiAgZmluZCBhXG4gICAgLy8gZmxvYXRpbmctcG9pbnQgdGhhdCBhcHByb3hpbWF0ZXMgcmVtYWluZGVyIC8gb3RoZXIgKmZyb20gYmVsb3cqLCBhZGQgdGhpc1xuICAgIC8vIGludG8gdGhlIHJlc3VsdCwgYW5kIHN1YnRyYWN0IGl0IGZyb20gdGhlIHJlbWFpbmRlci4gIEl0IGlzIGNyaXRpY2FsIHRoYXRcbiAgICAvLyB0aGUgYXBwcm94aW1hdGUgdmFsdWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSByZWFsIHZhbHVlIHNvIHRoYXQgdGhlXG4gICAgLy8gcmVtYWluZGVyIG5ldmVyIGJlY29tZXMgbmVnYXRpdmUuXG4gICAgcmVzID0gSW50ZWdlci5aRVJPO1xuICAgIHJlbSA9IHRoaXM7XG4gICAgd2hpbGUgKHJlbS5ncmVhdGVyVGhhbk9yRXF1YWwoZGl2aXNvcikpIHtcbiAgICAgIC8vIEFwcHJveGltYXRlIHRoZSByZXN1bHQgb2YgZGl2aXNpb24uIFRoaXMgbWF5IGJlIGEgbGl0dGxlIGdyZWF0ZXIgb3JcbiAgICAgIC8vIHNtYWxsZXIgdGhhbiB0aGUgYWN0dWFsIHZhbHVlLlxuICAgICAgYXBwcm94ID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihyZW0udG9OdW1iZXIoKSAvIGRpdmlzb3IudG9OdW1iZXIoKSkpO1xuXG4gICAgICAvLyBXZSB3aWxsIHR3ZWFrIHRoZSBhcHByb3hpbWF0ZSByZXN1bHQgYnkgY2hhbmdpbmcgaXQgaW4gdGhlIDQ4LXRoIGRpZ2l0IG9yXG4gICAgICAvLyB0aGUgc21hbGxlc3Qgbm9uLWZyYWN0aW9uYWwgZGlnaXQsIHdoaWNoZXZlciBpcyBsYXJnZXIuXG4gICAgICB2YXIgbG9nMiA9IE1hdGguY2VpbChNYXRoLmxvZyhhcHByb3gpIC8gTWF0aC5MTjIpLFxuICAgICAgICAgIGRlbHRhID0gKGxvZzIgPD0gNDgpID8gMSA6IE1hdGgucG93KDIsIGxvZzIgLSA0OCksXG5cbiAgICAgIC8vIERlY3JlYXNlIHRoZSBhcHByb3hpbWF0aW9uIHVudGlsIGl0IGlzIHNtYWxsZXIgdGhhbiB0aGUgcmVtYWluZGVyLiAgTm90ZVxuICAgICAgLy8gdGhhdCBpZiBpdCBpcyB0b28gbGFyZ2UsIHRoZSBwcm9kdWN0IG92ZXJmbG93cyBhbmQgaXMgbmVnYXRpdmUuXG4gICAgICBhcHByb3hSZXMgPSBJbnRlZ2VyLmZyb21OdW1iZXIoYXBwcm94KSxcbiAgICAgIGFwcHJveFJlbSA9IGFwcHJveFJlcy5tdWx0aXBseShkaXZpc29yKTtcbiAgICAgIHdoaWxlIChhcHByb3hSZW0uaXNOZWdhdGl2ZSgpIHx8IGFwcHJveFJlbS5ncmVhdGVyVGhhbihyZW0pKSB7XG4gICAgICAgIGFwcHJveCAtPSBkZWx0YTtcbiAgICAgICAgYXBwcm94UmVzID0gSW50ZWdlci5mcm9tTnVtYmVyKGFwcHJveCk7XG4gICAgICAgIGFwcHJveFJlbSA9IGFwcHJveFJlcy5tdWx0aXBseShkaXZpc29yKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2Uga25vdyB0aGUgYW5zd2VyIGNhbid0IGJlIHplcm8uLi4gYW5kIGFjdHVhbGx5LCB6ZXJvIHdvdWxkIGNhdXNlXG4gICAgICAvLyBpbmZpbml0ZSByZWN1cnNpb24gc2luY2Ugd2Ugd291bGQgbWFrZSBubyBwcm9ncmVzcy5cbiAgICAgIGlmIChhcHByb3hSZXMuaXNaZXJvKCkpXG4gICAgICAgIGFwcHJveFJlcyA9IEludGVnZXIuT05FO1xuXG4gICAgICByZXMgPSByZXMuYWRkKGFwcHJveFJlcyk7XG4gICAgICByZW0gPSByZW0uc3VidHJhY3QoYXBwcm94UmVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoaXMgSW50ZWdlciBtb2R1bG8gdGhlIHNwZWNpZmllZC5cbiAgICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfSBkaXZpc29yIERpdmlzb3JcbiAgICogQHJldHVybnMgeyFJbnRlZ2VyfSBSZW1haW5kZXJcbiAgICogQGV4cG9zZVxuICAgKi9cbiAgbW9kdWxvKGRpdmlzb3IpIHtcbiAgICBpZiAoIUludGVnZXIuaXNJbnRlZ2VyKGRpdmlzb3IpKVxuICAgICAgZGl2aXNvciA9IEludGVnZXIuZnJvbVZhbHVlKGRpdmlzb3IpO1xuICAgIHJldHVybiB0aGlzLnN1YnRyYWN0KHRoaXMuZGl2KGRpdmlzb3IpLm11bHRpcGx5KGRpdmlzb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBiaXR3aXNlIE5PVCBvZiB0aGlzIEludGVnZXIuXG4gICAqIEByZXR1cm5zIHshSW50ZWdlcn1cbiAgICogQGV4cG9zZVxuICAgKi9cbiAgbm90KCkge1xuICAgIHJldHVybiBJbnRlZ2VyLmZyb21CaXRzKH50aGlzLmxvdywgfnRoaXMuaGlnaCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYml0d2lzZSBBTkQgb2YgdGhpcyBJbnRlZ2VyIGFuZCB0aGUgc3BlY2lmaWVkLlxuICAgKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIEludGVnZXJcbiAgICogQHJldHVybnMgeyFJbnRlZ2VyfVxuICAgKiBAZXhwb3NlXG4gICAqL1xuICBhbmQob3RoZXIpIHtcbiAgICBpZiAoIUludGVnZXIuaXNJbnRlZ2VyKG90aGVyKSlcbiAgICAgIG90aGVyID0gSW50ZWdlci5mcm9tVmFsdWUob3RoZXIpO1xuICAgIHJldHVybiBJbnRlZ2VyLmZyb21CaXRzKHRoaXMubG93ICYgb3RoZXIubG93LCB0aGlzLmhpZ2ggJiBvdGhlci5oaWdoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBiaXR3aXNlIE9SIG9mIHRoaXMgSW50ZWdlciBhbmQgdGhlIHNwZWNpZmllZC5cbiAgICogQHBhcmFtIHshSW50ZWdlcnxudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciBJbnRlZ2VyXG4gICAqIEByZXR1cm5zIHshSW50ZWdlcn1cbiAgICogQGV4cG9zZVxuICAgKi9cbiAgb3Iob3RoZXIpIHtcbiAgICBpZiAoIUludGVnZXIuaXNJbnRlZ2VyKG90aGVyKSlcbiAgICAgIG90aGVyID0gSW50ZWdlci5mcm9tVmFsdWUob3RoZXIpO1xuICAgIHJldHVybiBJbnRlZ2VyLmZyb21CaXRzKHRoaXMubG93IHwgb3RoZXIubG93LCB0aGlzLmhpZ2ggfCBvdGhlci5oaWdoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBiaXR3aXNlIFhPUiBvZiB0aGlzIEludGVnZXIgYW5kIHRoZSBnaXZlbiBvbmUuXG4gICAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgSW50ZWdlclxuICAgKiBAcmV0dXJucyB7IUludGVnZXJ9XG4gICAqIEBleHBvc2VcbiAgICovXG4gIHhvcihvdGhlcikge1xuICAgIGlmICghSW50ZWdlci5pc0ludGVnZXIob3RoZXIpKVxuICAgICAgb3RoZXIgPSBJbnRlZ2VyLmZyb21WYWx1ZShvdGhlcik7XG4gICAgcmV0dXJuIEludGVnZXIuZnJvbUJpdHModGhpcy5sb3cgXiBvdGhlci5sb3csIHRoaXMuaGlnaCBeIG90aGVyLmhpZ2gpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhpcyBJbnRlZ2VyIHdpdGggYml0cyBzaGlmdGVkIHRvIHRoZSBsZWZ0IGJ5IHRoZSBnaXZlbiBhbW91bnQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfCFJbnRlZ2VyfSBudW1CaXRzIE51bWJlciBvZiBiaXRzXG4gICAqIEByZXR1cm5zIHshSW50ZWdlcn0gU2hpZnRlZCBJbnRlZ2VyXG4gICAqIEBleHBvc2VcbiAgICovXG4gIHNoaWZ0TGVmdChudW1CaXRzKSB7XG4gICAgaWYgKEludGVnZXIuaXNJbnRlZ2VyKG51bUJpdHMpKVxuICAgICAgbnVtQml0cyA9IG51bUJpdHMudG9JbnQoKTtcbiAgICBpZiAoKG51bUJpdHMgJj0gNjMpID09PSAwKVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgZWxzZSBpZiAobnVtQml0cyA8IDMyKVxuICAgICAgcmV0dXJuIEludGVnZXIuZnJvbUJpdHModGhpcy5sb3cgPDwgbnVtQml0cywgKHRoaXMuaGlnaCA8PCBudW1CaXRzKSB8ICh0aGlzLmxvdyA+Pj4gKDMyIC0gbnVtQml0cykpKTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gSW50ZWdlci5mcm9tQml0cygwLCB0aGlzLmxvdyA8PCAobnVtQml0cyAtIDMyKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGlzIEludGVnZXIgd2l0aCBiaXRzIGFyaXRobWV0aWNhbGx5IHNoaWZ0ZWQgdG8gdGhlIHJpZ2h0IGJ5IHRoZSBnaXZlbiBhbW91bnQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfCFJbnRlZ2VyfSBudW1CaXRzIE51bWJlciBvZiBiaXRzXG4gICAqIEByZXR1cm5zIHshSW50ZWdlcn0gU2hpZnRlZCBJbnRlZ2VyXG4gICAqIEBleHBvc2VcbiAgICovXG4gIHNoaWZ0UmlnaHQobnVtQml0cykge1xuICAgIGlmIChJbnRlZ2VyLmlzSW50ZWdlcihudW1CaXRzKSlcbiAgICAgIG51bUJpdHMgPSBudW1CaXRzLnRvSW50KCk7XG4gICAgaWYgKChudW1CaXRzICY9IDYzKSA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIGVsc2UgaWYgKG51bUJpdHMgPCAzMilcbiAgICAgIHJldHVybiBJbnRlZ2VyLmZyb21CaXRzKCh0aGlzLmxvdyA+Pj4gbnVtQml0cykgfCAodGhpcy5oaWdoIDw8ICgzMiAtIG51bUJpdHMpKSwgdGhpcy5oaWdoID4+IG51bUJpdHMpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBJbnRlZ2VyLmZyb21CaXRzKHRoaXMuaGlnaCA+PiAobnVtQml0cyAtIDMyKSwgdGhpcy5oaWdoID49IDAgPyAwIDogLTEpO1xuICB9XG59XG5cbi8qKlxuICogQW4gaW5kaWNhdG9yIHVzZWQgdG8gcmVsaWFibHkgZGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIEludGVnZXIgb3Igbm90LlxuICogQHR5cGUge2Jvb2xlYW59XG4gKiBAY29uc3RcbiAqIEBleHBvc2VcbiAqIEBwcml2YXRlXG4gKi9cbkludGVnZXIuX19pc0ludGVnZXJfXztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEludGVnZXIucHJvdG90eXBlLCBcIl9faXNJbnRlZ2VyX19cIiwge1xuICAgIHZhbHVlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2Vcbn0pO1xuXG4vKipcbiAqIFRlc3RzIGlmIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGlzIGEgSW50ZWdlci5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBvYmogT2JqZWN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBleHBvc2VcbiAqL1xuSW50ZWdlci5pc0ludGVnZXIgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gKG9iaiAmJiBvYmpbXCJfX2lzSW50ZWdlcl9fXCJdKSA9PT0gdHJ1ZTtcbn07XG5cblxuXG4vKipcbiAqIEEgY2FjaGUgb2YgdGhlIEludGVnZXIgcmVwcmVzZW50YXRpb25zIG9mIHNtYWxsIGludGVnZXIgdmFsdWVzLlxuICogQHR5cGUgeyFPYmplY3R9XG4gKiBAaW5uZXJcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBJTlRfQ0FDSEUgPSB7fTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIGdpdmVuIDMyIGJpdCBpbnRlZ2VyIHZhbHVlLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVGhlIDMyIGJpdCBpbnRlZ2VyIGluIHF1ZXN0aW9uXG4gKiBAcmV0dXJucyB7IUludGVnZXJ9IFRoZSBjb3JyZXNwb25kaW5nIEludGVnZXIgdmFsdWVcbiAqIEBleHBvc2VcbiAqL1xuSW50ZWdlci5mcm9tSW50ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgb2JqLCBjYWNoZWRPYmo7XG4gICAgdmFsdWUgPSB2YWx1ZSB8IDA7XG4gICAgaWYgKC0xMjggPD0gdmFsdWUgJiYgdmFsdWUgPCAxMjgpIHtcbiAgICAgICAgY2FjaGVkT2JqID0gSU5UX0NBQ0hFW3ZhbHVlXTtcbiAgICAgICAgaWYgKGNhY2hlZE9iailcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRPYmo7XG4gICAgfVxuICAgIG9iaiA9IG5ldyBJbnRlZ2VyKHZhbHVlLCB2YWx1ZSA8IDAgPyAtMSA6IDAsIGZhbHNlKTtcbiAgICBpZiAoLTEyOCA8PSB2YWx1ZSAmJiB2YWx1ZSA8IDEyOClcbiAgICAgICAgSU5UX0NBQ0hFW3ZhbHVlXSA9IG9iajtcbiAgICByZXR1cm4gb2JqO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIGdpdmVuIHZhbHVlLCBwcm92aWRlZCB0aGF0IGl0IGlzIGEgZmluaXRlIG51bWJlci4gT3RoZXJ3aXNlLCB6ZXJvIGlzIHJldHVybmVkLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVGhlIG51bWJlciBpbiBxdWVzdGlvblxuICogQHJldHVybnMgeyFJbnRlZ2VyfSBUaGUgY29ycmVzcG9uZGluZyBJbnRlZ2VyIHZhbHVlXG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuZnJvbU51bWJlciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaWYgKGlzTmFOKHZhbHVlKSB8fCAhaXNGaW5pdGUodmFsdWUpKVxuICAgICAgICByZXR1cm4gSW50ZWdlci5aRVJPO1xuICAgIGlmICh2YWx1ZSA8PSAtVFdPX1BXUl82M19EQkwpXG4gICAgICAgIHJldHVybiBJbnRlZ2VyLk1JTl9WQUxVRTtcbiAgICBpZiAodmFsdWUgKyAxID49IFRXT19QV1JfNjNfREJMKVxuICAgICAgICByZXR1cm4gSW50ZWdlci5NQVhfVkFMVUU7XG4gICAgaWYgKHZhbHVlIDwgMClcbiAgICAgICAgcmV0dXJuIEludGVnZXIuZnJvbU51bWJlcigtdmFsdWUpLm5lZ2F0ZSgpO1xuICAgIHJldHVybiBuZXcgSW50ZWdlcigodmFsdWUgJSBUV09fUFdSXzMyX0RCTCkgfCAwLCAodmFsdWUgLyBUV09fUFdSXzMyX0RCTCkgfCAwICk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgNjQgYml0IGludGVnZXIgdGhhdCBjb21lcyBieSBjb25jYXRlbmF0aW5nIHRoZSBnaXZlbiBsb3cgYW5kIGhpZ2ggYml0cy4gRWFjaCBpc1xuICogIGFzc3VtZWQgdG8gdXNlIDMyIGJpdHMuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb3dCaXRzIFRoZSBsb3cgMzIgYml0c1xuICogQHBhcmFtIHtudW1iZXJ9IGhpZ2hCaXRzIFRoZSBoaWdoIDMyIGJpdHNcbiAqIEByZXR1cm5zIHshSW50ZWdlcn0gVGhlIGNvcnJlc3BvbmRpbmcgSW50ZWdlciB2YWx1ZVxuICogQGV4cG9zZVxuICovXG5JbnRlZ2VyLmZyb21CaXRzID0gZnVuY3Rpb24obG93Qml0cywgaGlnaEJpdHMpIHtcbiAgICByZXR1cm4gbmV3IEludGVnZXIobG93Qml0cywgaGlnaEJpdHMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgSW50ZWdlciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gc3RyaW5nLCB3cml0dGVuIHVzaW5nIHRoZSBzcGVjaWZpZWQgcmFkaXguXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgVGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIEludGVnZXJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gcmFkaXggVGhlIHJhZGl4IGluIHdoaWNoIHRoZSB0ZXh0IGlzIHdyaXR0ZW4gKDItMzYpLCBkZWZhdWx0cyB0byAxMFxuICogQHJldHVybnMgeyFJbnRlZ2VyfSBUaGUgY29ycmVzcG9uZGluZyBJbnRlZ2VyIHZhbHVlXG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuZnJvbVN0cmluZyA9IGZ1bmN0aW9uKHN0ciwgcmFkaXgpIHtcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMClcbiAgICAgICAgdGhyb3cgbmV3RXJyb3IoJ251bWJlciBmb3JtYXQgZXJyb3I6IGVtcHR5IHN0cmluZycpO1xuICAgIGlmIChzdHIgPT09IFwiTmFOXCIgfHwgc3RyID09PSBcIkluZmluaXR5XCIgfHwgc3RyID09PSBcIitJbmZpbml0eVwiIHx8IHN0ciA9PT0gXCItSW5maW5pdHlcIilcbiAgICAgICAgcmV0dXJuIEludGVnZXIuWkVSTztcbiAgICByYWRpeCA9IHJhZGl4IHx8IDEwO1xuICAgIGlmIChyYWRpeCA8IDIgfHwgMzYgPCByYWRpeClcbiAgICAgICAgdGhyb3cgbmV3RXJyb3IoJ3JhZGl4IG91dCBvZiByYW5nZTogJyArIHJhZGl4KTtcblxuICAgIHZhciBwO1xuICAgIGlmICgocCA9IHN0ci5pbmRleE9mKCctJykpID4gMClcbiAgICAgICAgdGhyb3cgbmV3RXJyb3IoJ251bWJlciBmb3JtYXQgZXJyb3I6IGludGVyaW9yIFwiLVwiIGNoYXJhY3RlcjogJyArIHN0cik7XG4gICAgZWxzZSBpZiAocCA9PT0gMClcbiAgICAgICAgcmV0dXJuIEludGVnZXIuZnJvbVN0cmluZyhzdHIuc3Vic3RyaW5nKDEpLCByYWRpeCkubmVnYXRlKCk7XG5cbiAgICAvLyBEbyBzZXZlcmFsICg4KSBkaWdpdHMgZWFjaCB0aW1lIHRocm91Z2ggdGhlIGxvb3AsIHNvIGFzIHRvXG4gICAgLy8gbWluaW1pemUgdGhlIGNhbGxzIHRvIHRoZSB2ZXJ5IGV4cGVuc2l2ZSBlbXVsYXRlZCBkaXYuXG4gICAgdmFyIHJhZGl4VG9Qb3dlciA9IEludGVnZXIuZnJvbU51bWJlcihNYXRoLnBvdyhyYWRpeCwgOCkpO1xuXG4gICAgdmFyIHJlc3VsdCA9IEludGVnZXIuWkVSTztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkgKz0gOCkge1xuICAgICAgICB2YXIgc2l6ZSA9IE1hdGgubWluKDgsIHN0ci5sZW5ndGggLSBpKTtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFyc2VJbnQoc3RyLnN1YnN0cmluZyhpLCBpICsgc2l6ZSksIHJhZGl4KTtcbiAgICAgICAgaWYgKHNpemUgPCA4KSB7XG4gICAgICAgICAgICB2YXIgcG93ZXIgPSBJbnRlZ2VyLmZyb21OdW1iZXIoTWF0aC5wb3cocmFkaXgsIHNpemUpKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5tdWx0aXBseShwb3dlcikuYWRkKEludGVnZXIuZnJvbU51bWJlcih2YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lm11bHRpcGx5KHJhZGl4VG9Qb3dlcik7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuYWRkKEludGVnZXIuZnJvbU51bWJlcih2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgdmFsdWUgdG8gYSBJbnRlZ2VyLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd8IXtsb3c6IG51bWJlciwgaGlnaDogbnVtYmVyfX0gdmFsIFZhbHVlXG4gKiBAcmV0dXJucyB7IUludGVnZXJ9XG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuZnJvbVZhbHVlID0gZnVuY3Rpb24odmFsKSB7XG4gICAgaWYgKHZhbCAvKiBpcyBjb21wYXRpYmxlICovIGluc3RhbmNlb2YgSW50ZWdlcilcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpXG4gICAgICAgIHJldHVybiBJbnRlZ2VyLmZyb21OdW1iZXIodmFsKTtcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpXG4gICAgICAgIHJldHVybiBJbnRlZ2VyLmZyb21TdHJpbmcodmFsKTtcbiAgICAvLyBUaHJvd3MgZm9yIG5vbi1vYmplY3RzLCBjb252ZXJ0cyBub24taW5zdGFuY2VvZiBJbnRlZ2VyOlxuICAgIHJldHVybiBuZXcgSW50ZWdlcih2YWwubG93LCB2YWwuaGlnaCk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgdmFsdWUgdG8gYSBudW1iZXIuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ3whe2xvdzogbnVtYmVyLCBoaWdoOiBudW1iZXJ9fSB2YWwgVmFsdWVcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIudG9OdW1iZXIgPSBmdW5jdGlvbih2YWwpIHtcbiByZXR1cm4gSW50ZWdlci5mcm9tVmFsdWUodmFsKS50b051bWJlcigpO1xufTtcblxuLyoqXG4qIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgdmFsdWUgdG8gYSBzdHJpbmcuXG4qIEBhY2Nlc3MgcHJpdmF0ZVxuKiBAcGFyYW0geyFJbnRlZ2VyfG51bWJlcnxzdHJpbmd8IXtsb3c6IG51bWJlciwgaGlnaDogbnVtYmVyfX0gdmFsIFZhbHVlXG4qIEBwYXJhbSB7bnVtYmVyfSByYWRpeCBvcHRpb25hbCByYWRpeCBmb3Igc3RyaW5nIGNvbnZlcnNpb24sIGRlZmF1bHRzIHRvIDEwXG4qIEByZXR1cm5zIHtTdHJpbmd9XG4qIEBleHBvc2VcbiovXG5JbnRlZ2VyLnRvU3RyaW5nID0gZnVuY3Rpb24odmFsLCByYWRpeCkge1xuICByZXR1cm4gSW50ZWdlci5mcm9tVmFsdWUodmFsKS50b1N0cmluZyhyYWRpeClcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBpbiB0aGUgc2FmZSByYW5nZSBpbiBvcmRlciB0byBiZSBjb252ZXJ0ZWQgdG8gYSBuYXRpdmUgbnVtYmVyXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqIEBwYXJhbSB7IUludGVnZXJ8bnVtYmVyfHN0cmluZ3whe2xvdzogbnVtYmVyLCBoaWdoOiBudW1iZXJ9fSB2YWwgVmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWRpeCBvcHRpb25hbCByYWRpeCBmb3Igc3RyaW5nIGNvbnZlcnNpb24sIGRlZmF1bHRzIHRvIDEwXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBleHBvc2VcbiAqL1xuSW50ZWdlci5pblNhZmVSYW5nZSA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gSW50ZWdlci5mcm9tVmFsdWUodmFsKS5pblNhZmVSYW5nZSgpO1xufTtcblxuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGNvbnN0XG4gKiBAaW5uZXJcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBUV09fUFdSXzE2X0RCTCA9IDEgPDwgMTY7XG5cbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqIEBjb25zdFxuICogQGlubmVyXG4gKiBAcHJpdmF0ZVxuICovXG52YXIgVFdPX1BXUl8yNF9EQkwgPSAxIDw8IDI0O1xuXG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAY29uc3RcbiAqIEBpbm5lclxuICogQHByaXZhdGVcbiAqL1xudmFyIFRXT19QV1JfMzJfREJMID0gVFdPX1BXUl8xNl9EQkwgKiBUV09fUFdSXzE2X0RCTDtcblxuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGNvbnN0XG4gKiBAaW5uZXJcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBUV09fUFdSXzY0X0RCTCA9IFRXT19QV1JfMzJfREJMICogVFdPX1BXUl8zMl9EQkw7XG5cbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqIEBjb25zdFxuICogQGlubmVyXG4gKiBAcHJpdmF0ZVxuICovXG52YXIgVFdPX1BXUl82M19EQkwgPSBUV09fUFdSXzY0X0RCTCAvIDI7XG5cbi8qKlxuICogQHR5cGUgeyFJbnRlZ2VyfVxuICogQGNvbnN0XG4gKiBAaW5uZXJcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBUV09fUFdSXzI0ID0gSW50ZWdlci5mcm9tSW50KFRXT19QV1JfMjRfREJMKTtcblxuLyoqXG4gKiBTaWduZWQgemVyby5cbiAqIEB0eXBlIHshSW50ZWdlcn1cbiAqIEBleHBvc2VcbiAqL1xuSW50ZWdlci5aRVJPID0gSW50ZWdlci5mcm9tSW50KDApO1xuXG4vKipcbiAqIFNpZ25lZCBvbmUuXG4gKiBAdHlwZSB7IUludGVnZXJ9XG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuT05FID0gSW50ZWdlci5mcm9tSW50KDEpO1xuXG4vKipcbiAqIFNpZ25lZCBuZWdhdGl2ZSBvbmUuXG4gKiBAdHlwZSB7IUludGVnZXJ9XG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuTkVHX09ORSA9IEludGVnZXIuZnJvbUludCgtMSk7XG5cbi8qKlxuICogTWF4aW11bSBzaWduZWQgdmFsdWUuXG4gKiBAdHlwZSB7IUludGVnZXJ9XG4gKiBAZXhwb3NlXG4gKi9cbkludGVnZXIuTUFYX1ZBTFVFID0gSW50ZWdlci5mcm9tQml0cygweEZGRkZGRkZGfDAsIDB4N0ZGRkZGRkZ8MCwgZmFsc2UpO1xuXG4vKipcbiAqIE1pbmltdW0gc2lnbmVkIHZhbHVlLlxuICogQHR5cGUgeyFJbnRlZ2VyfVxuICogQGV4cG9zZVxuICovXG5JbnRlZ2VyLk1JTl9WQUxVRSA9IEludGVnZXIuZnJvbUJpdHMoMCwgMHg4MDAwMDAwMHwwLCBmYWxzZSk7XG5cbi8qKlxuICogTWluaW11bSBzYWZlIHZhbHVlLlxuICogQHR5cGUgeyFJbnRlZ2VyfVxuICogQGV4cG9zZVxuICovXG5JbnRlZ2VyLk1JTl9TQUZFX1ZBTFVFID0gSW50ZWdlci5mcm9tQml0cygweDF8MCwgMHhGRkZGRkZGRkZGRTAwMDAwfDApO1xuXG4vKipcbiogTWF4aW11bSBzYWZlIHZhbHVlLlxuKiBAdHlwZSB7IUludGVnZXJ9XG4qIEBleHBvc2VcbiovXG5JbnRlZ2VyLk1BWF9TQUZFX1ZBTFVFID0gSW50ZWdlci5mcm9tQml0cygweEZGRkZGRkZGfDAsMHgxRkZGRkZ8MCk7XG5cbi8qKlxuICogQ2FzdCB2YWx1ZSB0byBJbnRlZ2VyIHR5cGUuXG4gKiBAYWNjZXNzIHB1YmxpY1xuICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gdXNlLlxuICogQHJldHVybiB7SW50ZWdlcn0gLSBBbiBvYmplY3Qgb2YgdHlwZSBJbnRlZ2VyLlxuICovXG5sZXQgaW50ID0gSW50ZWdlci5mcm9tVmFsdWU7XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB2YXJpYWJsZSBpcyBvZiBJbnRlZ2VyIHR5cGUuXG4gKiBAYWNjZXNzIHB1YmxpY1xuICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgLSBUaGUgdmFyaWFibGUgdG8gY2hlY2suXG4gKiBAcmV0dXJuIHtCb29sZWFufSAtIElzIGl0IG9mIHRoZSBJbnRlZ2VyIHR5cGU/XG4gKi9cbmxldCBpc0ludCA9IEludGVnZXIuaXNJbnRlZ2VyO1xuXG4vKipcbiAqIENoZWNrIGlmIGEgdmFyaWFibGUgY2FuIGJlIHNhZmVseSBjb252ZXJ0ZWQgdG8gYSBudW1iZXJcbiAqIEBhY2Nlc3MgcHVibGljXG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZSAtIFRoZSB2YXJpYWJsZSB0byBjaGVja1xuICogQHJldHVybiB7Qm9vbGVhbn0gLSB0cnVlIGlmIGl0IGlzIHNhZmUgdG8gY2FsbCB0b051bWJlciBvbiB2YXJpYWJsZSBvdGhlcndpc2UgZmFsc2VcbiAqL1xubGV0IGluU2FmZVJhbmdlID0gSW50ZWdlci5pblNhZmVSYW5nZTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHZhcmlhYmxlIHRvIGEgbnVtYmVyXG4gKiBAYWNjZXNzIHB1YmxpY1xuICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgLSBUaGUgdmFyaWFibGUgdG8gY29udmVydFxuICogQHJldHVybiB7bnVtYmVyfSAtIHRoZSB2YXJpYWJsZSBhcyBhIG51bWJlclxuICovXG5sZXQgdG9OdW1iZXIgPSBJbnRlZ2VyLnRvTnVtYmVyO1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBpbnRlZ2VyIHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gKiBAYWNjZXNzIHB1YmxpY1xuICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgLSBUaGUgdmFyaWFibGUgdG8gY29udmVydFxuICogQHBhcmFtIHtudW1iZXJ9IHJhZGl4IC0gcmFkaXggdG8gdXNlIGluIHN0cmluZyBjb252ZXJzaW9uLCBkZWZhdWx0cyB0byAxMFxuICogQHJldHVybiB7U3RyaW5nfSAtIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVnZXJcbiAqL1xubGV0IHRvU3RyaW5nID0gSW50ZWdlci50b1N0cmluZztcblxuZXhwb3J0IHtcbiAgICBpbnQsXG4gICAgaXNJbnQsXG4gICAgaW5TYWZlUmFuZ2UsXG4gICAgdG9OdW1iZXIsXG4gICAgdG9TdHJpbmdcbn1cblxuZXhwb3J0IGRlZmF1bHQgSW50ZWdlclxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4gXG4vKiogVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGNvbW1vbiBBUEkgZm9yIGRlYWxpbmcgd2l0aCBiaW5hcnkgZGF0YSB0aGF0XG4gICogd29ya3MgZm9yIGJvdGggYnJvd3NlcnMgKHZpYSBBcnJheUJ1ZmZlci9EYXRhVmlldykgYW5kIGZvciBOb2RlSlNcbiAgKih2aWEgQnVmZmVyIEFQSSkuXG4gICovXG5cbmxldCBfbm9kZSA9IHJlcXVpcmUoXCJidWZmZXJcIik7XG4vKipcbiAgKiBDb21tb24gYmFzZSB3aXRoIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIG1vc3QgYnVmZmVyIG1ldGhvZHMuXG4gICogQnVmZmVycyBhcmUgc3RhdGVmdWwgLSB0aGV5IHRyYWNrIGEgY3VycmVudCBcInBvc2l0aW9uXCIsIHRoaXMgaGVscHMgZ3JlYXRseVxuICAqIHdoZW4gcmVhZGluZyBhbmQgd3JpdGluZyBmcm9tIHRoZW0gaW5jcmVtZW50YWxseS4gWW91IGNhbiBhbHNvIGlnbm9yZSB0aGVcbiAgKiBzdGF0ZWZ1bCByZWFkL3dyaXRlIG1ldGhvZHMuXG4gICogcmVhZFhYWCBhbmQgd3JpdGVYWFgtbWV0aG9kcyBtb3ZlIHRoZSBpbm5lciBwb3NpdGlvbiBvZiB0aGUgYnVmZmVyLlxuICAqIHB1dFhYWCBhbmQgZ2V0WFhYLW1ldGhvZHMgZG8gbm90LlxuICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAqL1xuY2xhc3MgQmFzZUJ1ZmZlclxue1xuICAvKipcbiAgICogQ3JlYXRlIGEgaW5zdGFuY2Ugd2l0aCB0aGUgaW5qZWN0ZWQgc2l6ZS5cbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gc2l6ZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKHNpemUpIHtcbiAgICB0aGlzLnBvc2l0aW9uID0gMDtcbiAgICB0aGlzLmxlbmd0aCA9IHNpemU7XG4gICAgLy8gQ2FsbGluZyB0aGVzZSBvdXQgLSB0aGlzIGlzIHRoZSByZXF1aXJlZCBcbiAgICAvLyBtZXRob2RzIGEgc3ViY2xhc3MgbmVlZHMgdG8gaW1wbGVtZW50XG4gICAgbGV0IGdldFVJbnQ4ID0gbnVsbDtcbiAgICBsZXQgZ2V0SW50OCA9IG51bGw7XG4gICAgbGV0IGdldEZsb2F0NjQgPSBudWxsO1xuICAgIGxldCBnZXRTbGljZSA9IG51bGw7XG4gICAgbGV0IHB1dEZsb2F0NjQgPSBudWxsO1xuICAgIGxldCBwdXRVSW50OCA9IG51bGw7XG4gICAgbGV0IHB1dEludDggPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwXG4gICAqL1xuICBnZXRJbnQxNiAocCkge1xuICAgIHJldHVybiB0aGlzLmdldEludDgocCkgICAgICA8PCA4XG4gICAgICAgICB8IHRoaXMuZ2V0VUludDgocCArIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwXG4gICAqL1xuICBnZXRVSW50MTYgKHApIHtcbiAgICByZXR1cm4gdGhpcy5nZXRVSW50OChwKSAgICAgPDwgOFxuICAgICAgICAgfCB0aGlzLmdldFVJbnQ4KHAgKyAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gcFxuICAgKi9cbiAgZ2V0SW50MzIgKHApIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJbnQ4KHApICAgICA8PCAyNFxuICAgICAgICAgfCB0aGlzLmdldFVJbnQ4KHAgKyAxKSA8PCAxNlxuICAgICAgICAgfCB0aGlzLmdldFVJbnQ4KHAgKyAyKSA8PCA4XG4gICAgICAgICB8IHRoaXMuZ2V0VUludDgocCArIDMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwXG4gICAqL1xuICBnZXRVSW50MzIgKHApIHtcbiAgICByZXR1cm4gdGhpcy5nZXRVSW50OChwKSAgICAgPDwgMjRcbiAgICAgICAgIHwgdGhpcy5nZXRVSW50OChwICsgMSkgPDwgMTZcbiAgICAgICAgIHwgdGhpcy5nZXRVSW50OChwICsgMikgPDwgOFxuICAgICAgICAgfCB0aGlzLmdldFVJbnQ4KHAgKyAzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gcFxuICAgKi9cbiAgZ2V0SW50NjQgKHApIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJbnQ4KHApICAgICAgPDwgNTZcbiAgICAgICAgIHwgdGhpcy5nZXRVSW50OChwICsgMSkgPDwgNDhcbiAgICAgICAgIHwgdGhpcy5nZXRVSW50OChwICsgMikgPDwgNDBcbiAgICAgICAgIHwgdGhpcy5nZXRVSW50OChwICsgMykgPDwgMzJcbiAgICAgICAgIHwgdGhpcy5nZXRVSW50OChwICsgNCkgPDwgMjRcbiAgICAgICAgIHwgdGhpcy5nZXRVSW50OChwICsgNSkgPDwgMTZcbiAgICAgICAgIHwgdGhpcy5nZXRVSW50OChwICsgNikgPDwgOFxuICAgICAgICAgfCB0aGlzLmdldFVJbnQ4KHAgKyA3KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBzbGljZSBvZiB0aGlzIGJ1ZmZlci4gVGhpcyBtZXRob2QgZG9lcyBub3QgY29weSBhbnkgZGF0YSxcbiAgICogYnV0IHNpbXBseSBwcm92aWRlcyBhIHNsaWNlIHZpZXcgb2YgdGhpcyBidWZmZXJcbiAgICogQHBhcmFtIHN0YXJ0XG4gICAqIEBwYXJhbSBsZW5ndGhcbiAgICovXG4gIGdldFNsaWNlICggc3RhcnQsIGxlbmd0aCApIHtcbiAgICByZXR1cm4gbmV3IFNsaWNlQnVmZmVyKCBzdGFydCwgbGVuZ3RoLCB0aGlzICk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHBcbiAgICogQHBhcmFtIHZhbFxuICAgKi9cbiAgcHV0SW50MTYgKCBwLCB2YWwgKSB7XG4gICAgdGhpcy5wdXRJbnQ4KCAgcCwgICAgIHZhbCA+PiA4ICk7XG4gICAgdGhpcy5wdXRVSW50OCggcCArIDEsIHZhbCAgICAgICYgMHhGRiApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwXG4gICAqIEBwYXJhbSB2YWxcbiAgICovXG4gIHB1dFVJbnQxNiAoIHAsIHZhbCApIHtcbiAgICB0aGlzLnB1dFVJbnQ4KCBwLCAgICAgdmFsID4+IDggJiAweEZGICk7XG4gICAgdGhpcy5wdXRVSW50OCggcCArIDEsIHZhbCAgICAgICYgMHhGRiApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwXG4gICAqIEBwYXJhbSB2YWxcbiAgICovXG4gIHB1dEludDMyICggcCwgdmFsICkge1xuICAgIHRoaXMucHV0SW50OCggIHAsICAgICB2YWwgPj4gMjQgKTtcbiAgICB0aGlzLnB1dFVJbnQ4KCBwICsgMSwgdmFsID4+IDE2ICYgMHhGRiApO1xuICAgIHRoaXMucHV0VUludDgoIHAgKyAyLCB2YWwgPj4gOCAgJiAweEZGICk7XG4gICAgdGhpcy5wdXRVSW50OCggcCArIDMsIHZhbCAgICAgICAmIDB4RkYgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gcFxuICAgKiBAcGFyYW0gdmFsXG4gICAqL1xuICBwdXRVSW50MzIgKCBwLCB2YWwgKSB7XG4gICAgdGhpcy5wdXRVSW50OCggcCwgICAgIHZhbCA+PiAyNCAmIDB4RkYgKTtcbiAgICB0aGlzLnB1dFVJbnQ4KCBwICsgMSwgdmFsID4+IDE2ICYgMHhGRiApO1xuICAgIHRoaXMucHV0VUludDgoIHAgKyAyLCB2YWwgPj4gOCAgJiAweEZGICk7XG4gICAgdGhpcy5wdXRVSW50OCggcCArIDMsIHZhbCAgICAgICAmIDB4RkYgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gcFxuICAgKiBAcGFyYW0gdmFsXG4gICAqL1xuICBwdXRJbnQ2NCAoIHAsIHZhbCApIHtcbiAgICB0aGlzLnB1dEludDgoICBwLCB2YWwgPj4gNDggKTtcbiAgICB0aGlzLnB1dFVJbnQ4KCBwICsgMSwgdmFsID4+IDQyICYgMHhGRiApO1xuICAgIHRoaXMucHV0VUludDgoIHAgKyAyLCB2YWwgPj4gMzYgJiAweEZGICk7XG4gICAgdGhpcy5wdXRVSW50OCggcCArIDMsIHZhbCA+PiAzMCAmIDB4RkYgKTtcbiAgICB0aGlzLnB1dFVJbnQ4KCBwICsgNCwgdmFsID4+IDI0ICYgMHhGRiApO1xuICAgIHRoaXMucHV0VUludDgoIHAgKyA1LCB2YWwgPj4gMTYgJiAweEZGICk7XG4gICAgdGhpcy5wdXRVSW50OCggcCArIDYsIHZhbCA+PiA4ICAmIDB4RkYgKTtcbiAgICB0aGlzLnB1dFVJbnQ4KCBwICsgNywgdmFsICAgICAgICYgMHhGRiApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwb3NpdGlvblxuICAgKiBAcGFyYW0gb3RoZXJcbiAgICovXG4gIHB1dEJ5dGVzICggcG9zaXRpb24sIG90aGVyICkge1xuICAgIGZvciAobGV0IGkgPSAwLCBlbmQ9b3RoZXIucmVtYWluaW5nKCk7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgdGhpcy5wdXRVSW50OCggcG9zaXRpb24gKyBpLCBvdGhlci5yZWFkVUludDgoKSApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkIGZyb20gc3RhdGUgcG9zaXRpb24uXG4gICAqL1xuICByZWFkVUludDggKCkge1xuICAgIHJldHVybiB0aGlzLmdldFVJbnQ4KCB0aGlzLl91cGRhdGVQb3MoMSkgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkIGZyb20gc3RhdGUgcG9zaXRpb24uXG4gICAqL1xuICByZWFkSW50OCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW50OCggdGhpcy5fdXBkYXRlUG9zKDEpICk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZCBmcm9tIHN0YXRlIHBvc2l0aW9uLlxuICAgKi9cbiAgcmVhZFVJbnQxNiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VUludDE2KCB0aGlzLl91cGRhdGVQb3MoMikgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkIGZyb20gc3RhdGUgcG9zaXRpb24uXG4gICAqL1xuICByZWFkVUludDMyICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRVSW50MzIoIHRoaXMuX3VwZGF0ZVBvcyg0KSApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgZnJvbSBzdGF0ZSBwb3NpdGlvbi5cbiAgICovXG4gIHJlYWRJbnQxNiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW50MTYoIHRoaXMuX3VwZGF0ZVBvcygyKSApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgZnJvbSBzdGF0ZSBwb3NpdGlvbi5cbiAgICovXG4gIHJlYWRJbnQzMiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW50MzIoIHRoaXMuX3VwZGF0ZVBvcyg0KSApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgZnJvbSBzdGF0ZSBwb3NpdGlvbi5cbiAgICovXG4gIHJlYWRJbnQ2NCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW50MzIoIHRoaXMuX3VwZGF0ZVBvcyg4KSApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgZnJvbSBzdGF0ZSBwb3NpdGlvbi5cbiAgICovXG4gIHJlYWRGbG9hdDY0ICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGbG9hdDY0KCB0aGlzLl91cGRhdGVQb3MoOCkgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSB0byBzdGF0ZSBwb3NpdGlvbi5cbiAgICogQHBhcmFtIHZhbFxuICAgKi9cbiAgd3JpdGVVSW50OCAoIHZhbCApIHtcbiAgICB0aGlzLnB1dFVJbnQ4KCB0aGlzLl91cGRhdGVQb3MoMSksIHZhbCk7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgdG8gc3RhdGUgcG9zaXRpb24uXG4gICAqIEBwYXJhbSB2YWxcbiAgICovXG4gIHdyaXRlSW50OCAoIHZhbCApIHtcbiAgICB0aGlzLnB1dEludDgoIHRoaXMuX3VwZGF0ZVBvcygxKSwgdmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSB0byBzdGF0ZSBwb3NpdGlvbi5cbiAgICogQHBhcmFtIHZhbFxuICAgKi9cbiAgd3JpdGVJbnQxNiAoIHZhbCApIHtcbiAgICB0aGlzLnB1dEludDE2KCB0aGlzLl91cGRhdGVQb3MoMiksIHZhbCk7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgdG8gc3RhdGUgcG9zaXRpb24uXG4gICAqIEBwYXJhbSB2YWxcbiAgICovXG4gIHdyaXRlSW50MzIgKCB2YWwgKSB7XG4gICAgdGhpcy5wdXRJbnQzMiggdGhpcy5fdXBkYXRlUG9zKDQpLCB2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRvIHN0YXRlIHBvc2l0aW9uLlxuICAgKiBAcGFyYW0gdmFsXG4gICAqL1xuICB3cml0ZVVJbnQzMiAoIHZhbCApIHtcbiAgICB0aGlzLnB1dFVJbnQzMiggdGhpcy5fdXBkYXRlUG9zKDQpLCB2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRvIHN0YXRlIHBvc2l0aW9uLlxuICAgKiBAcGFyYW0gdmFsXG4gICAqL1xuICB3cml0ZUludDY0ICggdmFsICkge1xuICAgIHRoaXMucHV0SW50NjQoIHRoaXMuX3VwZGF0ZVBvcyg4KSwgdmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSB0byBzdGF0ZSBwb3NpdGlvbi5cbiAgICogQHBhcmFtIHZhbFxuICAgKi9cbiAgd3JpdGVGbG9hdDY0ICggdmFsICkge1xuICAgIHRoaXMucHV0RmxvYXQ2NCggdGhpcy5fdXBkYXRlUG9zKDgpLCB2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRvIHN0YXRlIHBvc2l0aW9uLlxuICAgKiBAcGFyYW0gdmFsXG4gICAqL1xuICB3cml0ZUJ5dGVzICggdmFsICkge1xuICAgIHRoaXMucHV0Qnl0ZXMoIHRoaXMuX3VwZGF0ZVBvcyh2YWwucmVtYWluaW5nKCkpLCB2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHNsaWNlIG9mIHRoaXMgYnVmZmVyLiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBjb3B5IGFueSBkYXRhLFxuICAgKiBidXQgc2ltcGx5IHByb3ZpZGVzIGEgc2xpY2UgdmlldyBvZiB0aGlzIGJ1ZmZlclxuICAgKiBAcGFyYW0gbGVuZ3RoXG4gICAqL1xuICByZWFkU2xpY2UgKCBsZW5ndGggKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2xpY2UoIHRoaXMuX3VwZGF0ZVBvcyggbGVuZ3RoICksIGxlbmd0aCApO1xuICB9XG5cbiAgX3VwZGF0ZVBvcyAoIGxlbmd0aCApIHtcbiAgICBsZXQgcCA9IHRoaXMucG9zaXRpb247XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJlbWFuaW5nXG4gICAqL1xuICByZW1haW5pbmcgKCkge1xuICAgIHJldHVybiB0aGlzLmxlbmd0aCAtIHRoaXMucG9zaXRpb247XG4gIH1cblxuICAvKipcbiAgICogSGFzIHJlbWFuaW5nXG4gICAqL1xuICBoYXNSZW1haW5pbmcgKCkge1xuICAgIHJldHVybiB0aGlzLnJlbWFpbmluZygpID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBwb3NpdGlvbiBzdGF0ZVxuICAgKi9cbiAgcmVzZXQgKCkge1xuICAgIHRoaXMucG9zaXRpb24gPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYnVmZmVyIGFuZCBpdCdzIHN0YXRlLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IEJ1ZmZlciBhcyBhIHN0cmluZ1xuICAgKi9cbiAgdG9TdHJpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyBcIiggcG9zaXRpb249XCIrdGhpcy5wb3NpdGlvbitcIiApXFxuICBcIiArIHRoaXMudG9IZXgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGJ1ZmZlci5cbiAgICogQHJldHVybiB7c3RyaW5nfSBCdWZmZXIgYXMgYSBzdHJpbmdcbiAgICovXG4gIHRvSGV4ICgpIHtcbiAgICAvLyBUT0RPIHNvbWV0aGluZyBsaWtlIFN0cmluZ0J1aWxkZXI/XG4gICAgbGV0IG91dCA9IFwiXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgaGV4Qnl0ZSA9IHRoaXMuZ2V0VUludDgoaSkudG9TdHJpbmcoMTYpO1xuICAgICAgaWYoIGhleEJ5dGUubGVuZ3RoID09IDEgKSB7XG4gICAgICAgIGhleEJ5dGUgPSBcIjBcIiArIGhleEJ5dGU7XG4gICAgICB9XG4gICAgICBvdXQgKz0gaGV4Qnl0ZSArIFwiIFwiXG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cbn1cblxuLyoqXG4gKiBCYXNpYyBidWZmZXIgaW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgd29yayBpbiBtb3N0IGFueSBtb2Rlcm4gSlMgZW52LlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cbmNsYXNzIEhlYXBCdWZmZXIgZXh0ZW5kcyBCYXNlQnVmZmVyIHtcbiAgY29uc3RydWN0b3IgKGFyZykge1xuICAgIGxldCBidWZmZXIgPSBhcmcgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IGFyZyA6IG5ldyBBcnJheUJ1ZmZlcihhcmcpXG4gICAgc3VwZXIoYnVmZmVyLmJ5dGVMZW5ndGggKTtcbiAgICB0aGlzLl9idWZmZXIgPSBidWZmZXI7XG4gICAgdGhpcy5fdmlldyA9IG5ldyBEYXRhVmlldyggdGhpcy5fYnVmZmVyICk7XG4gIH1cblxuICBwdXRVSW50OCAoIHBvc2l0aW9uLCB2YWwgKSB7XG4gICAgdGhpcy5fdmlldy5zZXRVaW50OChwb3NpdGlvbiwgdmFsKTtcbiAgfVxuXG4gIGdldFVJbnQ4ICggcG9zaXRpb24gKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXcuZ2V0VWludDgocG9zaXRpb24pO1xuICB9XG5cbiAgcHV0SW50OCAoIHBvc2l0aW9uLCB2YWwgKSB7XG4gICAgdGhpcy5fdmlldy5zZXRJbnQ4KHBvc2l0aW9uLCB2YWwpO1xuICB9XG5cbiAgZ2V0SW50OCAoIHBvc2l0aW9uICkge1xuICAgIHJldHVybiB0aGlzLl92aWV3LmdldEludDgocG9zaXRpb24pO1xuICB9XG5cbiAgZ2V0RmxvYXQ2NCAoIHBvc2l0aW9uICkge1xuICAgIHJldHVybiB0aGlzLl92aWV3LmdldEZsb2F0NjQocG9zaXRpb24pO1xuICB9XG5cbiAgcHV0RmxvYXQ2NCAoIHBvc2l0aW9uLCB2YWwgKSB7XG4gICAgdGhpcy5fdmlldy5zZXRGbG9hdDY0KCBwb3NpdGlvbiwgdmFsICk7XG4gIH1cblxuICBnZXRTbGljZSAoIHN0YXJ0LCBsZW5ndGggKSB7XG4gICAgaWYoIHRoaXMuX2J1ZmZlci5zbGljZSApIHtcbiAgICAgIHJldHVybiBuZXcgSGVhcEJ1ZmZlciggdGhpcy5fYnVmZmVyLnNsaWNlKCBzdGFydCwgc3RhcnQgKyBsZW5ndGggKSApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lIHBsYXRmb3JtcyAoZWcuIHBoYW50b21qcykgZG9uJ3Qgc3VwcG9ydCBzbGljZSwgc28gZmFsbCBiYWNrIHRvIGEgY29weVxuICAgICAgLy8gV2UgZG8gdGhpcyByYXRoZXIgdGhhbiByZXR1cm4gYSBTbGljZUJ1ZmZlciwgYmVjYXVzZSBzbGljZUJ1ZmZlciBjYW5ub3RcbiAgICAgIC8vIGJlIHBhc3NlZCB0byBuYXRpdmUgbmV0d29yayB3cml0ZSBvcHMgZXRjIC0gd2UgbmVlZCBBcnJheUJ1ZmZlciBmb3IgdGhhdFxuICAgICAgbGV0IGNvcHkgPSBuZXcgSGVhcEJ1ZmZlcihsZW5ndGgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBjb3B5LnB1dFVJbnQ4KCBpLCB0aGlzLmdldFVJbnQ4KCBpICsgc3RhcnQgKSApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFxuICAgKiBTcGVjaWZpYyB0byBIZWFwQnVmZmVyLCB0aGlzIGdldHMgYSBEYXRhVmlldyBmcm9tIHRoZVxuICAgKiBjdXJyZW50IHBvc2l0aW9uIGFuZCBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aC4gXG4gICAqL1xuICByZWFkVmlldyAoIGxlbmd0aCApIHtcbiAgICByZXR1cm4gbmV3IERhdGFWaWV3KCB0aGlzLl9idWZmZXIsIHRoaXMuX3VwZGF0ZVBvcyhsZW5ndGgpLCBsZW5ndGggKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB2aWV3IGFzIHNsaWNlIG9mIGFub3RoZXIgYnVmZmVyLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cbmNsYXNzIFNsaWNlQnVmZmVyIGV4dGVuZHMgQmFzZUJ1ZmZlciB7XG4gIGNvbnN0cnVjdG9yKCBzdGFydCwgbGVuZ3RoLCBpbm5lciApIHtcbiAgICBzdXBlcihsZW5ndGgpO1xuICAgIHRoaXMuX3N0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5faW5uZXIgPSBpbm5lcjtcbiAgfVxuXG4gIHB1dFVJbnQ4ICggcG9zaXRpb24sIHZhbCApIHtcbiAgICB0aGlzLl9pbm5lci5wdXRVSW50OCggdGhpcy5fc3RhcnQgKyBwb3NpdGlvbiwgdmFsICk7XG4gIH1cblxuICBnZXRVSW50OCAoIHBvc2l0aW9uICkge1xuICAgIHJldHVybiB0aGlzLl9pbm5lci5nZXRVSW50OCggdGhpcy5fc3RhcnQgKyBwb3NpdGlvbiApO1xuICB9XG5cbiAgcHV0SW50OCAoIHBvc2l0aW9uLCB2YWwgKSB7XG4gICAgdGhpcy5faW5uZXIucHV0SW50OCggdGhpcy5fc3RhcnQgKyBwb3NpdGlvbiwgdmFsICk7XG4gIH1cblxuICBwdXRGbG9hdDY0ICggcG9zaXRpb24sIHZhbCApIHtcbiAgICB0aGlzLl9pbm5lci5wdXRGbG9hdDY0KCB0aGlzLl9zdGFydCArIHBvc2l0aW9uLCB2YWwgKTtcbiAgfVxuXG4gIGdldEludDggKCBwb3NpdGlvbiApIHtcbiAgICByZXR1cm4gdGhpcy5faW5uZXIuZ2V0SW50OCggdGhpcy5fc3RhcnQgKyBwb3NpdGlvbiApO1xuICB9XG5cbiAgZ2V0RmxvYXQ2NCAocG9zaXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5faW5uZXIuZ2V0RmxvYXQ2NCggdGhpcy5fc3RhcnQgKyBwb3NpdGlvbiApO1xuICB9XG59XG5cbi8qKlxuICogQnVmZmVyIHRoYXQgY29tYmluZXMgbXVsdGlwbGUgYnVmZmVycywgZXhwb3NpbmcgdGhlbSBhcyBvbmUgc2luZ2xlIGJ1ZmZlci5cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovXG5jbGFzcyBDb21iaW5lZEJ1ZmZlciBleHRlbmRzIEJhc2VCdWZmZXIge1xuICBjb25zdHJ1Y3RvciAoYnVmZmVycykge1xuICAgIGxldCBsZW5ndGggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmZmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgbGVuZ3RoICs9IGJ1ZmZlcnNbaV0ubGVuZ3RoO1xuICAgIH1cbiAgICBzdXBlciggbGVuZ3RoICk7XG4gICAgdGhpcy5fYnVmZmVycyA9IGJ1ZmZlcnM7XG4gIH1cblxuICBnZXRVSW50OCAoIHBvc2l0aW9uICkge1xuICAgIC8vIFN1cmVseSB0aGVyZSdzIGEgZmFzdGVyIHdheSB0byBkbyB0aGlzLi4gc29tZSBzb3J0IG9mIGxvb2t1cCB0YWJsZSB0aGluZz9cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBidWZmZXIgPSB0aGlzLl9idWZmZXJzW2ldO1xuICAgICAgLy8gSWYgdGhlIHBvc2l0aW9uIGlzIG5vdCBpbiB0aGUgY3VycmVudCBidWZmZXIsIHNraXAgdGhlIGN1cnJlbnQgYnVmZmVyXG4gICAgICBpZiggcG9zaXRpb24gPj0gYnVmZmVyLmxlbmd0aCApIHtcbiAgICAgICAgcG9zaXRpb24gLT0gYnVmZmVyLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBidWZmZXIuZ2V0VUludDgocG9zaXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEludDggKCBwb3NpdGlvbiApIHtcbiAgICAvLyBTdXJlbHkgdGhlcmUncyBhIGZhc3RlciB3YXkgdG8gZG8gdGhpcy4uIHNvbWUgc29ydCBvZiBsb29rdXAgdGFibGUgdGhpbmc/XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgYnVmZmVyID0gdGhpcy5fYnVmZmVyc1tpXTtcbiAgICAgIC8vIElmIHRoZSBwb3NpdGlvbiBpcyBub3QgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLCBza2lwIHRoZSBjdXJyZW50IGJ1ZmZlclxuICAgICAgaWYoIHBvc2l0aW9uID49IGJ1ZmZlci5sZW5ndGggKSB7XG4gICAgICAgIHBvc2l0aW9uIC09IGJ1ZmZlci5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYnVmZmVyLmdldEludDgocG9zaXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEZsb2F0NjQgKCBwb3NpdGlvbiApIHtcbiAgICAvLyBBdCBzb21lIHBvaW50LCBhIG1vcmUgZWZmaWNpZW50IGltcGwuIEZvciBub3csIHdlIGNvcHkgdGhlIDggYnl0ZXNcbiAgICAvLyB3ZSB3YW50IHRvIHJlYWQgYW5kIGRlcGVuZCBvbiB0aGUgcGxhdGZvcm0gaW1wbCBvZiBJRUVFIDc1NC5cbiAgICBsZXQgYiA9IGFsbG9jKDgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7IGIucHV0VUludDgoaSwgdGhpcy5nZXRVSW50OCggcG9zaXRpb24gKyBpICkpOyB9O1xuICAgIHJldHVybiBiLmdldEZsb2F0NjQoMCk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWZmZXIgdXNlZCBpbiBhIE5vZGUuanMgZW52aXJvbm1lbnRcbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovXG5jbGFzcyBOb2RlQnVmZmVyIGV4dGVuZHMgQmFzZUJ1ZmZlciB7XG4gIGNvbnN0cnVjdG9yKGFyZykge1xuICAgIGxldCBidWZmZXIgPSBhcmcgaW5zdGFuY2VvZiBfbm9kZS5CdWZmZXIgPyBhcmcgOiBuZXcgX25vZGUuQnVmZmVyKGFyZyk7XG4gICAgc3VwZXIoYnVmZmVyLmxlbmd0aCk7XG4gICAgdGhpcy5fYnVmZmVyID0gYnVmZmVyO1xuICB9XG5cbiAgZ2V0VUludDggKHBvc2l0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5yZWFkVUludDgoIHBvc2l0aW9uICk7XG4gIH1cblxuICBnZXRJbnQ4IChwb3NpdGlvbikge1xuICAgIHJldHVybiB0aGlzLl9idWZmZXIucmVhZEludDgoIHBvc2l0aW9uICk7XG4gIH1cblxuICBnZXRGbG9hdDY0IChwb3NpdGlvbikge1xuICAgIHJldHVybiB0aGlzLl9idWZmZXIucmVhZERvdWJsZUJFKHBvc2l0aW9uKTtcbiAgfVxuXG4gIHB1dFVJbnQ4IChwb3NpdGlvbiwgdmFsKSB7XG4gICAgdGhpcy5fYnVmZmVyLndyaXRlVUludDgoIHZhbCwgcG9zaXRpb24gKTtcbiAgfVxuXG4gIHB1dEludDggKHBvc2l0aW9uLCB2YWwpIHtcbiAgICB0aGlzLl9idWZmZXIud3JpdGVJbnQ4KCB2YWwsIHBvc2l0aW9uICk7XG4gIH1cblxuICBwdXRGbG9hdDY0ICggcG9zaXRpb24sIHZhbCApIHtcbiAgICB0aGlzLl9idWZmZXIud3JpdGVEb3VibGVCRSggdmFsLCBwb3NpdGlvbiApO1xuICB9XG5cbiAgcHV0Qnl0ZXMgKCBwb3NpdGlvbiwgdmFsICkge1xuICAgIGlmKCB2YWwgaW5zdGFuY2VvZiBOb2RlQnVmZmVyICkge1xuICAgICAgbGV0IGJ5dGVzVG9Db3B5ID0gTWF0aC5taW4oIHZhbC5sZW5ndGggLSB2YWwucG9zaXRpb24sIHRoaXMubGVuZ3RoIC0gcG9zaXRpb24gKTtcbiAgICAgIHZhbC5fYnVmZmVyLmNvcHkoXG4gICAgICAgIHRoaXMuX2J1ZmZlcixcbiAgICAgICAgcG9zaXRpb24sXG4gICAgICAgIHZhbC5wb3NpdGlvbixcbiAgICAgICAgdmFsLnBvc2l0aW9uICsgYnl0ZXNUb0NvcHkgKTtcbiAgICAgIHZhbC5wb3NpdGlvbiArPSBieXRlc1RvQ29weTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VwZXIucHV0Qnl0ZXMocG9zaXRpb24sIHZhbCk7XG4gICAgfVxuICB9O1xuXG4gIGdldFNsaWNlICggc3RhcnQsIGxlbmd0aCApIHtcbiAgICByZXR1cm4gbmV3IE5vZGVCdWZmZXIoIHRoaXMuX2J1ZmZlci5zbGljZSggc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoICkgKTtcbiAgfVxufVxuXG4vLyBVc2UgSGVhcEJ1ZmZlciBieSBkZWZhdWx0LCB1bmxlc3MgQnVmZmVyIEFQSSBpcyBhdmFpbGFibGUsIHNlZSBiZWxvd1xubGV0IF9EZWZhdWx0QnVmZmVyID0gSGVhcEJ1ZmZlcjtcbnRyeSB7XG4gIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgd2UncmUgbm90IHJ1bm5pbmcgb24gTm9kZUpTIG9yIGVxdWl2YWxlbnRcbiAgcmVxdWlyZS5yZXNvbHZlKFwiYnVmZmVyXCIpO1xuICBfRGVmYXVsdEJ1ZmZlciA9IE5vZGVCdWZmZXI7XG59IGNhdGNoKGUpIHt9XG5cbi8qKlxuICogQWxsb2NhdGUgYSBuZXcgYnVmZmVyIHVzaW5nIHdoYXRldmVyIG1lY2hhbmlzbSBpcyBtb3N0IHNlbnNpYmxlIGZvciB0aGVcbiAqIGN1cnJlbnQgcGxhdGZvcm1cbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICogQHBhcmFtIHtJbnRlZ2VyfSBzaXplXG4gKiBAcmV0dXJuIG5ldyBidWZmZXJcbiAqL1xuZnVuY3Rpb24gYWxsb2MgKHNpemUpIHtcbiAgcmV0dXJuIG5ldyBfRGVmYXVsdEJ1ZmZlcihzaXplKTtcbn1cblxuZXhwb3J0IHtcbiAgQmFzZUJ1ZmZlcixcbiAgSGVhcEJ1ZmZlcixcbiAgU2xpY2VCdWZmZXIsXG4gIENvbWJpbmVkQnVmZmVyLFxuICBOb2RlQnVmZmVyLFxuICBhbGxvY1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBoYXNGZWF0dXJlIGZyb20gJy4vZmVhdHVyZXMnO1xuaW1wb3J0IHtTRVJWSUNFX1VOQVZBSUxBQkxFfSBmcm9tICcuLi9lcnJvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWxDb25maWcge1xuXG4gIGNvbnN0cnVjdG9yKGhvc3QsIHBvcnQsIGRyaXZlckNvbmZpZywgY29ubmVjdGlvbkVycm9yQ29kZSkge1xuICAgIHRoaXMuaG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5wb3J0ID0gcG9ydDtcbiAgICB0aGlzLmVuY3J5cHRlZCA9IENoYW5uZWxDb25maWcuX2V4dHJhY3RFbmNyeXB0ZWQoZHJpdmVyQ29uZmlnKTtcbiAgICB0aGlzLnRydXN0ID0gQ2hhbm5lbENvbmZpZy5fZXh0cmFjdFRydXN0KGRyaXZlckNvbmZpZyk7XG4gICAgdGhpcy50cnVzdGVkQ2VydGlmaWNhdGVzID0gQ2hhbm5lbENvbmZpZy5fZXh0cmFjdFRydXN0ZWRDZXJ0aWZpY2F0ZXMoZHJpdmVyQ29uZmlnKTtcbiAgICB0aGlzLmtub3duSG9zdHNQYXRoID0gQ2hhbm5lbENvbmZpZy5fZXh0cmFjdEtub3duSG9zdHNQYXRoKGRyaXZlckNvbmZpZyk7XG4gICAgdGhpcy5jb25uZWN0aW9uRXJyb3JDb2RlID0gY29ubmVjdGlvbkVycm9yQ29kZSB8fCBTRVJWSUNFX1VOQVZBSUxBQkxFO1xuICB9XG5cbiAgc3RhdGljIF9leHRyYWN0RW5jcnlwdGVkKGRyaXZlckNvbmZpZykge1xuICAgIC8vIGNoZWNrIGlmIGVuY3J5cHRpb24gd2FzIGNvbmZpZ3VyZWQgYnkgdGhlIHVzZXIsIHVzZSBleHBsaWNpdCBudWxsIGNoZWNrIGJlY2F1c2Ugd2UgcGVybWl0IGJvb2xlYW4gdmFsdWVcbiAgICBjb25zdCBlbmNyeXB0aW9uQ29uZmlndXJlZCA9IGRyaXZlckNvbmZpZy5lbmNyeXB0ZWQgPT0gbnVsbDtcbiAgICAvLyBkZWZhdWx0IHRvIHVzaW5nIGVuY3J5cHRpb24gaWYgdHJ1c3QtYWxsLWNlcnRpZmljYXRlcyBpcyBhdmFpbGFibGVcbiAgICByZXR1cm4gZW5jcnlwdGlvbkNvbmZpZ3VyZWQgPyBoYXNGZWF0dXJlKCd0cnVzdF9hbGxfY2VydGlmaWNhdGVzJykgOiBkcml2ZXJDb25maWcuZW5jcnlwdGVkO1xuICB9XG5cbiAgc3RhdGljIF9leHRyYWN0VHJ1c3QoZHJpdmVyQ29uZmlnKSB7XG4gICAgaWYgKGRyaXZlckNvbmZpZy50cnVzdCkge1xuICAgICAgcmV0dXJuIGRyaXZlckNvbmZpZy50cnVzdDtcbiAgICB9XG4gICAgLy8gZGVmYXVsdCB0byB1c2luZyBUUlVTVF9BTExfQ0VSVElGSUNBVEVTIGlmIGl0IGlzIGF2YWlsYWJsZVxuICAgIHJldHVybiBoYXNGZWF0dXJlKCd0cnVzdF9hbGxfY2VydGlmaWNhdGVzJykgPyAnVFJVU1RfQUxMX0NFUlRJRklDQVRFUycgOiAnVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVMnO1xuICB9XG5cbiAgc3RhdGljIF9leHRyYWN0VHJ1c3RlZENlcnRpZmljYXRlcyhkcml2ZXJDb25maWcpIHtcbiAgICByZXR1cm4gZHJpdmVyQ29uZmlnLnRydXN0ZWRDZXJ0aWZpY2F0ZXMgfHwgW107XG4gIH1cblxuICBzdGF0aWMgX2V4dHJhY3RLbm93bkhvc3RzUGF0aChkcml2ZXJDb25maWcpIHtcbiAgICByZXR1cm4gZHJpdmVyQ29uZmlnLmtub3duSG9zdHMgfHwgbnVsbDtcbiAgfVxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NvbWJpbmVkQnVmZmVyfSBmcm9tICcuL2J1Zic7XG5jb25zdCBvYnNlcnZlciA9IHtcbiAgaW5zdGFuY2U6IG51bGwsXG4gIHVwZGF0ZUluc3RhbmNlOiAoaW5zdGFuY2UpID0+IHtcbiAgICBvYnNlcnZlci5pbnN0YW5jZSA9IGluc3RhbmNlXG4gIH1cbn07XG5cbmNsYXNzIER1bW15Q2hhbm5lbCB7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0NoYW5uZWxDb25maWd9IGNvbmZpZyAtIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBuZXcgY2hhbm5lbC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHRoaXMud3JpdHRlbiA9IFtdO1xuICB9XG5cbiAgaXNFbmNyeXB0ZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgd3JpdGUoIGJ1ZiApIHtcbiAgICB0aGlzLndyaXR0ZW4ucHVzaChidWYpO1xuICAgIG9ic2VydmVyLnVwZGF0ZUluc3RhbmNlKHRoaXMpO1xuICB9XG5cbiAgdG9IZXgoKSB7XG4gICAgdmFyIG91dCA9IFwiXCI7XG4gICAgZm9yKCB2YXIgaT0wOyBpPHRoaXMud3JpdHRlbi5sZW5ndGg7IGkrKyApIHtcbiAgICAgIG91dCArPSB0aGlzLndyaXR0ZW5baV0udG9IZXgoKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIHRvQnVmZmVyICgpIHtcbiAgICByZXR1cm4gbmV3IENvbWJpbmVkQnVmZmVyKCB0aGlzLndyaXR0ZW4gKTtcbiAgfVxufVxuXG5jb25zdCBjaGFubmVsID0gRHVtbXlDaGFubmVsO1xuXG5leHBvcnQgeyBjaGFubmVsLCBvYnNlcnZlciB9XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCBuZXQgZnJvbSAnbmV0JztcbmltcG9ydCB0bHMgZnJvbSAndGxzJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7RU9MfSBmcm9tICdvcyc7XG5pbXBvcnQge05vZGVCdWZmZXJ9IGZyb20gJy4vYnVmJztcbmltcG9ydCB7RU5DUllQVElPTl9PRkYsIGlzRW1wdHlPYmplY3RPck51bGx9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQge25ld0Vycm9yfSBmcm9tICcuLy4uL2Vycm9yJztcblxubGV0IF9DT05ORUNUSU9OX0lER0VOID0gMDtcblxuZnVuY3Rpb24gdXNlckhvbWUoKSB7XG4gIC8vIEZvciBzb21lIHJlYXNvbiwgQnJvd3NlcmlmeSBjaG9rZXMgb24gc2hpbW1pbmcgYHByb2Nlc3NgLiBUaGlzIGNvZGVcbiAgLy8gd2lsbCBuZXZlciBnZXQgZXhlY3V0ZWQgb24gdGhlIGJyb3dzZXIgYW55d2F5LCB0byBqdXN0IGhhY2sgYXJvdW5kIGl0XG4gIGxldCBnZXRPdXRPZkhlcmVCcm93c2VyaWZ5WW91cmVEcnVuayA9IHJlcXVpcmU7XG4gIGxldCBwcm9jZXNzID0gZ2V0T3V0T2ZIZXJlQnJvd3NlcmlmeVlvdXJlRHJ1bmsoJ3Byb2Nlc3MnKTtcblxuICByZXR1cm4gcHJvY2Vzcy5lbnZbKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJykgPyAnVVNFUlBST0ZJTEUnIDogJ0hPTUUnXTtcbn1cblxuZnVuY3Rpb24gbWtGdWxsUGF0aChwYXRoVG9DcmVhdGUpIHtcbiAgdHJ5IHtcbiAgICBmcy5ta2RpclN5bmMoIHBhdGhUb0NyZWF0ZSApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYoZS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgLy8gQ3JlYXRlIHBhcmVudCBkaXJcbiAgICAgIG1rRnVsbFBhdGgocGF0aC5kaXJuYW1lKCBwYXRoVG9DcmVhdGUgKSk7XG4gICAgICAvLyBBbmQgbm93IHRyeSBhZ2FpblxuICAgICAgbWtGdWxsUGF0aCggcGF0aFRvQ3JlYXRlICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChlLmNvZGUgPT09ICdFRVhJU1QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gbG9hZEZpbmdlcnByaW50KCBzZXJ2ZXJJZCwga25vd25Ib3N0c1BhdGgsIGNiICkge1xuICB0cnkge1xuICAgIGZzLmFjY2Vzc1N5bmMoIGtub3duSG9zdHNQYXRoICk7XG4gIH0gY2F0Y2goZSkge1xuICAgIHJldHVybiBjYihudWxsKVxuICB9XG4gIGxldCBmb3VuZCA9IGZhbHNlO1xuICByZXF1aXJlKCdyZWFkbGluZScpLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgaW5wdXQ6IGZzLmNyZWF0ZVJlYWRTdHJlYW0oa25vd25Ib3N0c1BhdGgpXG4gIH0pLm9uKCdsaW5lJywgKGxpbmUpICA9PiB7XG4gICAgaWYoICFmb3VuZCAmJiBsaW5lLnN0YXJ0c1dpdGgoIHNlcnZlcklkICkpIHtcbiAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgIGNiKCBsaW5lLnNwbGl0KFwiIFwiKVsxXSApO1xuICAgIH1cbiAgfSkub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgIGlmKCFmb3VuZCkge1xuICAgICAgY2IobnVsbCk7XG4gICAgfVxuICB9KTtcbn1cblxuY29uc3QgX2xvY2tGaW5nZXJwcmludEZyb21BcHBlbmRpbmcgPSB7fTtcbmZ1bmN0aW9uIHN0b3JlRmluZ2VycHJpbnQoIHNlcnZlcklkLCBrbm93bkhvc3RzUGF0aCwgZmluZ2VycHJpbnQsIGNiICkge1xuICAvLyB3ZSBjaGVjayBpZiB0aGUgc2VydmVySWQgaGFzIGJlZW4gYXBwZW5kZWRcbiAgaWYoISFfbG9ja0ZpbmdlcnByaW50RnJvbUFwcGVuZGluZ1tzZXJ2ZXJJZF0pe1xuICAgIC8vIGlmIGl0IGhhcywgd2UgaWdub3JlIGl0XG4gICAgcmV0dXJuIGNiKG51bGwpO1xuICB9XG5cbiAgLy8gd2UgbWFrZSB0aGUgbGluZSBhcyBhcHBlbmRlZFxuICAvLyAoIDEgaXMgbW9yZSBlZmZpY2llbnQgdG8gc3RvcmUgdGhhbiB0cnVlIGJlY2F1c2UgdHJ1ZSBpcyBhbiBvZGRiYWxsIClcbiAgX2xvY2tGaW5nZXJwcmludEZyb21BcHBlbmRpbmdbc2VydmVySWRdID0gMTtcblxuICAvLyBJZiBmaWxlIGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBmdWxsIHBhdGggdG8gaXRcbiAgdHJ5IHtcbiAgICBmcy5hY2Nlc3NTeW5jKGtub3duSG9zdHNQYXRoKTtcbiAgfSBjYXRjaCAoXykge1xuICAgIG1rRnVsbFBhdGgocGF0aC5kaXJuYW1lKGtub3duSG9zdHNQYXRoKSk7XG4gIH1cblxuICBmcy5hcHBlbmRGaWxlKGtub3duSG9zdHNQYXRoLCBzZXJ2ZXJJZCArIFwiIFwiICsgZmluZ2VycHJpbnQgKyBFT0wsIFwidXRmOFwiLCAoZXJyKSA9PiB7XG4gICAgZGVsZXRlIF9sb2NrRmluZ2VycHJpbnRGcm9tQXBwZW5kaW5nW3NlcnZlcklkXTtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgIH1cbiAgICByZXR1cm4gY2IoZXJyKTtcbiAgfSk7XG59XG5cbmNvbnN0IFRydXN0U3RyYXRlZ3kgPSB7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBTaW5jZSB2ZXJzaW9uIDEuMC4gV2lsbCBiZSBkZWxldGVkIGluIGEgZnV0dXJlIHZlcnNpb24uIHtAbGluayAjVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVN9LlxuICAgKi9cbiAgVFJVU1RfU0lHTkVEX0NFUlRJRklDQVRFUzogZnVuY3Rpb24oIGNvbmZpZywgb25TdWNjZXNzLCBvbkZhaWx1cmUgKSB7XG4gICAgY29uc29sZS5sb2coXCJgVFJVU1RfU0lHTkVEX0NFUlRJRklDQVRFU2AgaGFzIGJlZW4gZGVwcmVjYXRlZCBhcyBvcHRpb24gYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFwiICtcbiAgICAgIFwidGhlIGRyaXZlci4gUGxlYXNlIHVzZSBgVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVNgIGluc3RlYWQuXCIpO1xuICAgIHJldHVybiBUcnVzdFN0cmF0ZWd5LlRSVVNUX0NVU1RPTV9DQV9TSUdORURfQ0VSVElGSUNBVEVTKGNvbmZpZywgb25TdWNjZXNzLCBvbkZhaWx1cmUpO1xuICB9LFxuICBUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFUyA6IGZ1bmN0aW9uKCBjb25maWcsIG9uU3VjY2Vzcywgb25GYWlsdXJlICkge1xuICAgIGlmKCAhY29uZmlnLnRydXN0ZWRDZXJ0aWZpY2F0ZXMgfHwgY29uZmlnLnRydXN0ZWRDZXJ0aWZpY2F0ZXMubGVuZ3RoID09PSAwICkge1xuICAgICAgb25GYWlsdXJlKG5ld0Vycm9yKFwiWW91IGFyZSB1c2luZyBUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFUyBhcyB0aGUgbWV0aG9kIFwiICtcbiAgICAgICAgXCJ0byB2ZXJpZnkgdHJ1c3QgZm9yIGVuY3J5cHRlZCAgY29ubmVjdGlvbnMsIGJ1dCBoYXZlIG5vdCBjb25maWd1cmVkIGFueSBcIiArXG4gICAgICAgIFwidHJ1c3RlZENlcnRpZmljYXRlcy4gWW91ICBtdXN0IHNwZWNpZnkgdGhlIHBhdGggdG8gYXQgbGVhc3Qgb25lIHRydXN0ZWQgXCIgK1xuICAgICAgICBcIlguNTA5IGNlcnRpZmljYXRlIGZvciB0aGlzIHRvIHdvcmsuIFR3byBvdGhlciBhbHRlcm5hdGl2ZXMgaXMgdG8gdXNlIFwiICtcbiAgICAgICAgXCJUUlVTVF9BTExfQ0VSVElGSUNBVEVTIG9yIHRvIGRpc2FibGUgZW5jcnlwdGlvbiBieSBzZXR0aW5nIGVuY3J5cHRlZD1cXFwiXCIgKyBFTkNSWVBUSU9OX09GRiArIFwiXFxcIlwiICtcbiAgICAgICAgXCJpbiB5b3VyIGRyaXZlciBjb25maWd1cmF0aW9uLlwiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHRsc09wdHMgPSB7XG4gICAgICBjYTogY29uZmlnLnRydXN0ZWRDZXJ0aWZpY2F0ZXMubWFwKChmKSA9PiBmcy5yZWFkRmlsZVN5bmMoZikpLFxuICAgICAgLy8gQmVjYXVzZSB3ZSBtYW51YWxseSBjaGVjayBmb3IgdGhpcyBpbiB0aGUgY29ubmVjdCBjYWxsYmFjaywgdG8gZ2l2ZVxuICAgICAgLy8gYSBtb3JlIGhlbHBmdWwgZXJyb3IgdG8gdGhlIHVzZXJcbiAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcbiAgICB9O1xuXG4gICAgbGV0IHNvY2tldCA9IHRscy5jb25uZWN0KGNvbmZpZy5wb3J0LCBjb25maWcuaG9zdCwgdGxzT3B0cywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzb2NrZXQuYXV0aG9yaXplZCkge1xuICAgICAgICBvbkZhaWx1cmUobmV3RXJyb3IoXCJTZXJ2ZXIgY2VydGlmaWNhdGUgaXMgbm90IHRydXN0ZWQuIElmIHlvdSB0cnVzdCB0aGUgZGF0YWJhc2UgeW91IGFyZSBjb25uZWN0aW5nIHRvLCBhZGRcIiArXG4gICAgICAgICAgXCIgdGhlIHNpZ25pbmcgY2VydGlmaWNhdGUsIG9yIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUsIHRvIHRoZSBsaXN0IG9mIGNlcnRpZmljYXRlcyB0cnVzdGVkIGJ5IHRoaXMgZHJpdmVyXCIgK1xuICAgICAgICAgIFwiIHVzaW5nIGBuZW80ai52MS5kcml2ZXIoLi4sIHsgdHJ1c3RlZENlcnRpZmljYXRlczpbJ3BhdGgvdG8vY2VydGlmaWNhdGUuY3J0J119KS4gVGhpcyBcIiArXG4gICAgICAgICAgXCIgaXMgYSBzZWN1cml0eSBtZWFzdXJlIHRvIHByb3RlY3QgYWdhaW5zdCBtYW4taW4tdGhlLW1pZGRsZSBhdHRhY2tzLiBJZiB5b3UgYXJlIGp1c3QgdHJ5aW5nIFwiICtcbiAgICAgICAgICBcIiBOZW80aiBvdXQgYW5kIGFyZSBub3QgY29uY2VybmVkIGFib3V0IGVuY3J5cHRpb24sIHNpbXBseSBkaXNhYmxlIGl0IHVzaW5nIGBlbmNyeXB0ZWQ9XFxcIlwiICsgRU5DUllQVElPTl9PRkYgKyBcIlxcXCJgXCIgK1xuICAgICAgICAgIFwiIGluIHRoZSBkcml2ZXIgb3B0aW9ucy4gU29ja2V0IHJlc3BvbmRlZCB3aXRoOiBcIiArIHNvY2tldC5hdXRob3JpemF0aW9uRXJyb3IpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uU3VjY2VzcygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHNvY2tldC5vbignZXJyb3InLCBvbkZhaWx1cmUpO1xuICAgIHJldHVybiBzb2NrZXQ7XG4gIH0sXG4gIFRSVVNUX1NZU1RFTV9DQV9TSUdORURfQ0VSVElGSUNBVEVTIDogZnVuY3Rpb24oIGNvbmZpZywgb25TdWNjZXNzLCBvbkZhaWx1cmUgKSB7XG5cbiAgICBsZXQgdGxzT3B0cyA9IHtcbiAgICAgIC8vIEJlY2F1c2Ugd2UgbWFudWFsbHkgY2hlY2sgZm9yIHRoaXMgaW4gdGhlIGNvbm5lY3QgY2FsbGJhY2ssIHRvIGdpdmVcbiAgICAgIC8vIGEgbW9yZSBoZWxwZnVsIGVycm9yIHRvIHRoZSB1c2VyXG4gICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlXG4gICAgfTtcbiAgICBsZXQgc29ja2V0ID0gdGxzLmNvbm5lY3QoY29uZmlnLnBvcnQsIGNvbmZpZy5ob3N0LCB0bHNPcHRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXNvY2tldC5hdXRob3JpemVkKSB7XG4gICAgICAgIG9uRmFpbHVyZShuZXdFcnJvcihcIlNlcnZlciBjZXJ0aWZpY2F0ZSBpcyBub3QgdHJ1c3RlZC4gSWYgeW91IHRydXN0IHRoZSBkYXRhYmFzZSB5b3UgYXJlIGNvbm5lY3RpbmcgdG8sIHVzZSBcIiArXG4gICAgICAgICAgXCJUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFUyBhbmQgYWRkXCIgK1xuICAgICAgICAgIFwiIHRoZSBzaWduaW5nIGNlcnRpZmljYXRlLCBvciB0aGUgc2VydmVyIGNlcnRpZmljYXRlLCB0byB0aGUgbGlzdCBvZiBjZXJ0aWZpY2F0ZXMgdHJ1c3RlZCBieSB0aGlzIGRyaXZlclwiICtcbiAgICAgICAgICBcIiB1c2luZyBgbmVvNGoudjEuZHJpdmVyKC4uLCB7IHRydXN0ZWRDZXJ0aWZpY2F0ZXM6WydwYXRoL3RvL2NlcnRpZmljYXRlLmNydCddfSkuIFRoaXMgXCIgK1xuICAgICAgICAgIFwiIGlzIGEgc2VjdXJpdHkgbWVhc3VyZSB0byBwcm90ZWN0IGFnYWluc3QgbWFuLWluLXRoZS1taWRkbGUgYXR0YWNrcy4gSWYgeW91IGFyZSBqdXN0IHRyeWluZyBcIiArXG4gICAgICAgICAgXCIgTmVvNGogb3V0IGFuZCBhcmUgbm90IGNvbmNlcm5lZCBhYm91dCBlbmNyeXB0aW9uLCBzaW1wbHkgZGlzYWJsZSBpdCB1c2luZyBgZW5jcnlwdGVkPVxcXCJcIiArIEVOQ1JZUFRJT05fT0ZGICsgXCJcXFwiYFwiICtcbiAgICAgICAgICBcIiBpbiB0aGUgZHJpdmVyIG9wdGlvbnMuIFNvY2tldCByZXNwb25kZWQgd2l0aDogXCIgKyBzb2NrZXQuYXV0aG9yaXphdGlvbkVycm9yKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvblN1Y2Nlc3MoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBzb2NrZXQub24oJ2Vycm9yJywgb25GYWlsdXJlKTtcbiAgICByZXR1cm4gc29ja2V0O1xuICB9LFxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgaW4gMS4xIGluIGZhdm91ciBvZiB7QGxpbmsgI1RSVVNUX0FMTF9DRVJUSUZJQ0FURVN9LiBXaWxsIGJlIGRlbGV0ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAgICovXG4gIFRSVVNUX09OX0ZJUlNUX1VTRSA6IGZ1bmN0aW9uKCBjb25maWcsIG9uU3VjY2Vzcywgb25GYWlsdXJlICkge1xuICAgICAgY29uc29sZS5sb2coXCJgVFJVU1RfT05fRklSU1RfVVNFYCBoYXMgYmVlbiBkZXByZWNhdGVkIGFzIG9wdGlvbiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgXCIgK1xuICAgICAgICAgIFwidGhlIGRyaXZlci4gUGxlYXNlIHVzZSBgVFJVU1RfQUxMX0NFUlRJRklDQVRFU2AgaW5zdGVhZC5cIik7XG5cbiAgICBsZXQgdGxzT3B0cyA9IHtcbiAgICAgIC8vIEJlY2F1c2Ugd2UgbWFudWFsbHkgdmVyaWZ5IHRoZSBjZXJ0aWZpY2F0ZSBhZ2FpbnN0IGtub3duX2hvc3RzXG4gICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlXG4gICAgfTtcblxuICAgIGxldCBzb2NrZXQgPSB0bHMuY29ubmVjdChjb25maWcucG9ydCwgY29uZmlnLmhvc3QsIHRsc09wdHMsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzZXJ2ZXJDZXJ0ID0gc29ja2V0LmdldFBlZXJDZXJ0aWZpY2F0ZSgvKnJhdz0qL3RydWUpO1xuXG4gICAgICBpZiggIXNlcnZlckNlcnQucmF3ICkge1xuICAgICAgICAvLyBJZiBgcmF3YCBpcyBub3QgYXZhaWxhYmxlLCB3ZSdyZSBvbiBhbiBvbGQgdmVyc2lvbiBvZiBOb2RlSlMsIGFuZFxuICAgICAgICAvLyB0aGUgcmF3IGNlcnQgY2Fubm90IGJlIGFjY2Vzc2VkIChvciwgYXQgbGVhc3QgSSBjb3VsZG4ndCBmaW5kIGEgd2F5IHRvKVxuICAgICAgICAvLyB0aGVyZWZvcmUsIHdlIGNhbid0IGdlbmVyYXRlIGEgU0hBNTEyIGZpbmdlcnByaW50LCBtZWFuaW5nIHdlIGNhbid0XG4gICAgICAgIC8vIGRvIFRPRlUsIGFuZCB0aGUgc2FmZSBhcHByb2FjaCBpcyB0byBmYWlsLlxuICAgICAgICBvbkZhaWx1cmUobmV3RXJyb3IoXCJZb3UgYXJlIHVzaW5nIGEgdmVyc2lvbiBvZiBOb2RlSlMgdGhhdCBkb2VzIG5vdCBcIiArXG4gICAgICAgICAgXCJzdXBwb3J0IHRydXN0LW9uLWZpcnN0IHVzZSBlbmNyeXB0aW9uLiBZb3UgY2FuIGVpdGhlciB1cGdyYWRlIE5vZGVKUyB0byBcIiArXG4gICAgICAgICAgXCJhIG5ld2VyIHZlcnNpb24sIHVzZSBgdHJ1c3Q6VFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVNgIGluIHlvdXIgZHJpdmVyIFwiICtcbiAgICAgICAgICBcImNvbmZpZyBpbnN0ZWFkLCBvciBkaXNhYmxlIGVuY3J5cHRpb24gdXNpbmcgYGVuY3J5cHRlZDpcXFwiXCIgKyBFTkNSWVBUSU9OX09GRisgXCJcXFwiYC5cIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlcnZlckZpbmdlcnByaW50ID0gcmVxdWlyZSgnY3J5cHRvJykuY3JlYXRlSGFzaCgnc2hhNTEyJykudXBkYXRlKHNlcnZlckNlcnQucmF3KS5kaWdlc3QoXCJoZXhcIik7XG4gICAgICBjb25zdCBrbm93bkhvc3RzUGF0aCA9IGNvbmZpZy5rbm93bkhvc3RzUGF0aCB8fCBwYXRoLmpvaW4odXNlckhvbWUoKSwgXCIubmVvNGpcIiwgXCJrbm93bl9ob3N0c1wiKTtcbiAgICAgIGNvbnN0IHNlcnZlcklkID0gY29uZmlnLmhvc3QgKyBcIjpcIiArIGNvbmZpZy5wb3J0O1xuXG4gICAgICBsb2FkRmluZ2VycHJpbnQoc2VydmVySWQsIGtub3duSG9zdHNQYXRoLCAoa25vd25GaW5nZXJwcmludCkgPT4ge1xuICAgICAgICBpZigga25vd25GaW5nZXJwcmludCA9PT0gc2VydmVyRmluZ2VycHJpbnQgKSB7XG4gICAgICAgICAgb25TdWNjZXNzKCk7XG4gICAgICAgIH0gZWxzZSBpZigga25vd25GaW5nZXJwcmludCA9PSBudWxsICkge1xuICAgICAgICAgIHN0b3JlRmluZ2VycHJpbnQoIHNlcnZlcklkLCBrbm93bkhvc3RzUGF0aCwgc2VydmVyRmluZ2VycHJpbnQsIChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9uRmFpbHVyZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9uU3VjY2VzcygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9uRmFpbHVyZShuZXdFcnJvcihcIkRhdGFiYXNlIGVuY3J5cHRpb24gY2VydGlmaWNhdGUgaGFzIGNoYW5nZWQsIGFuZCBubyBsb25nZXIgXCIgK1xuICAgICAgICAgICAgXCJtYXRjaGVzIHRoZSBjZXJ0aWZpY2F0ZSBzdG9yZWQgZm9yIFwiICsgc2VydmVySWQgKyBcIiBpbiBgXCIgKyBrbm93bkhvc3RzUGF0aCArXG4gICAgICAgICAgICBcImAuIEFzIGEgc2VjdXJpdHkgcHJlY2F1dGlvbiwgdGhpcyBkcml2ZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSB0cnVzdCB0aGUgbmV3IFwiICtcbiAgICAgICAgICAgIFwiY2VydGlmaWNhdGUsIGJlY2F1c2UgZG9pbmcgc28gd291bGQgYWxsb3cgYW4gYXR0YWNrZXIgdG8gcHJldGVuZCB0byBiZSB0aGUgTmVvNGogXCIgK1xuICAgICAgICAgICAgXCJpbnN0YW5jZSB3ZSB3YW50IHRvIGNvbm5lY3QgdG8uIFRoZSBjZXJ0aWZpY2F0ZSBwcm92aWRlZCBieSB0aGUgc2VydmVyIGxvb2tzIGxpa2U6IFwiICtcbiAgICAgICAgICAgIHNlcnZlckNlcnQgKyBcIi4gSWYgeW91IHRydXN0IHRoYXQgdGhpcyBjZXJ0aWZpY2F0ZSBpcyB2YWxpZCwgc2ltcGx5IHJlbW92ZSB0aGUgbGluZSBcIiArXG4gICAgICAgICAgICBcInN0YXJ0aW5nIHdpdGggXCIgKyBzZXJ2ZXJJZCArIFwiIGluIGBcIiArIGtub3duSG9zdHNQYXRoICsgXCJgLCBhbmQgdGhlIGRyaXZlciB3aWxsIFwiICtcbiAgICAgICAgICAgIFwidXBkYXRlIHRoZSBmaWxlIHdpdGggdGhlIG5ldyBjZXJ0aWZpY2F0ZS4gWW91IGNhbiBjb25maWd1cmUgd2hpY2ggZmlsZSB0aGUgZHJpdmVyIFwiICtcbiAgICAgICAgICAgIFwic2hvdWxkIHVzZSB0byBzdG9yZSB0aGlzIGluZm9ybWF0aW9uIGJ5IHNldHRpbmcgYGtub3duSG9zdHNgIHRvIGFub3RoZXIgcGF0aCBpbiBcIiArXG4gICAgICAgICAgICBcInlvdXIgZHJpdmVyIGNvbmZpZ3VyYXRpb24gLSBhbmQgeW91IGNhbiBkaXNhYmxlIGVuY3J5cHRpb24gdGhlcmUgYXMgd2VsbCB1c2luZyBcIiArXG4gICAgICAgICAgICBcImBlbmNyeXB0ZWQ6XFxcIlwiICsgRU5DUllQVElPTl9PRkYgKyBcIlxcXCJgLlwiKSlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgc29ja2V0Lm9uKCdlcnJvcicsIG9uRmFpbHVyZSk7XG4gICAgcmV0dXJuIHNvY2tldDtcbiAgfSxcblxuICBUUlVTVF9BTExfQ0VSVElGSUNBVEVTOiBmdW5jdGlvbiAoY29uZmlnLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSkge1xuICAgIGNvbnN0IHRsc09wdHMgPSB7XG4gICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlXG4gICAgfTtcbiAgICBjb25zdCBzb2NrZXQgPSB0bHMuY29ubmVjdChjb25maWcucG9ydCwgY29uZmlnLmhvc3QsIHRsc09wdHMsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNlcnRpZmljYXRlID0gc29ja2V0LmdldFBlZXJDZXJ0aWZpY2F0ZSgpO1xuICAgICAgaWYgKGlzRW1wdHlPYmplY3RPck51bGwoY2VydGlmaWNhdGUpKSB7XG4gICAgICAgIG9uRmFpbHVyZShuZXdFcnJvcihcIlNlY3VyZSBjb25uZWN0aW9uIHdhcyBzdWNjZXNzZnVsIGJ1dCBzZXJ2ZXIgZGlkIG5vdCByZXR1cm4gYW55IHZhbGlkIFwiICtcbiAgICAgICAgICAgIFwiY2VydGlmaWNhdGVzLiBTdWNoIGNvbm5lY3Rpb24gY2FuIG5vdCBiZSB0cnVzdGVkLiBJZiB5b3UgYXJlIGp1c3QgdHJ5aW5nIFwiICtcbiAgICAgICAgICAgIFwiIE5lbzRqIG91dCBhbmQgYXJlIG5vdCBjb25jZXJuZWQgYWJvdXQgZW5jcnlwdGlvbiwgc2ltcGx5IGRpc2FibGUgaXQgdXNpbmcgXCIgK1xuICAgICAgICAgICAgXCJgZW5jcnlwdGVkPVxcXCJcIiArIEVOQ1JZUFRJT05fT0ZGICsgXCJcXFwiYCBpbiB0aGUgZHJpdmVyIG9wdGlvbnMuIFwiICtcbiAgICAgICAgICAgIFwiU29ja2V0IHJlc3BvbmRlZCB3aXRoOiBcIiArIHNvY2tldC5hdXRob3JpemF0aW9uRXJyb3IpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uU3VjY2VzcygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHNvY2tldC5vbignZXJyb3InLCBvbkZhaWx1cmUpO1xuICAgIHJldHVybiBzb2NrZXQ7XG4gIH1cbn07XG5cbi8qKlxuICogQ29ubmVjdCB1c2luZyBub2RlIHNvY2tldC5cbiAqIEBwYXJhbSB7Q2hhbm5lbENvbmZpZ30gY29uZmlnIC0gY29uZmlndXJhdGlvbiBvZiB0aGlzIGNoYW5uZWwuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBvblN1Y2Nlc3MgLSBjYWxsYmFjayB0byBleGVjdXRlIG9uIGNvbm5lY3Rpb24gc3VjY2Vzcy5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uRmFpbHVyZSAtIGNhbGxiYWNrIHRvIGV4ZWN1dGUgb24gY29ubmVjdGlvbiBmYWlsdXJlLlxuICogQHJldHVybiB7Kn0gc29ja2V0IGNvbm5lY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbm5lY3QoIGNvbmZpZywgb25TdWNjZXNzLCBvbkZhaWx1cmU9KCgpPT5udWxsKSApIHtcbiAgLy9zdGlsbCBhbGxvdyBib29sZWFuIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBpZiAoY29uZmlnLmVuY3J5cHRlZCA9PT0gZmFsc2UgfHwgY29uZmlnLmVuY3J5cHRlZCA9PT0gRU5DUllQVElPTl9PRkYpIHtcbiAgICB2YXIgY29ubiA9IG5ldC5jb25uZWN0KGNvbmZpZy5wb3J0LCBjb25maWcuaG9zdCwgb25TdWNjZXNzKTtcbiAgICBjb25uLm9uKCdlcnJvcicsIG9uRmFpbHVyZSk7XG4gICAgcmV0dXJuIGNvbm47XG4gIH0gZWxzZSBpZiggVHJ1c3RTdHJhdGVneVtjb25maWcudHJ1c3RdKSB7XG4gICAgcmV0dXJuIFRydXN0U3RyYXRlZ3lbY29uZmlnLnRydXN0XShjb25maWcsIG9uU3VjY2Vzcywgb25GYWlsdXJlKTtcbiAgfSBlbHNlIHtcbiAgICBvbkZhaWx1cmUobmV3RXJyb3IoXCJVbmtub3duIHRydXN0IHN0cmF0ZWd5OiBcIiArIGNvbmZpZy50cnVzdCArIFwiLiBQbGVhc2UgdXNlIGVpdGhlciBcIiArXG4gICAgICBcInRydXN0OidUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFUycgb3IgdHJ1c3Q6J1RSVVNUX0FMTF9DRVJUSUZJQ0FURVMnIGluIHlvdXIgZHJpdmVyIFwiICtcbiAgICAgIFwiY29uZmlndXJhdGlvbi4gQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBkaXNhYmxlIGVuY3J5cHRpb24gYnkgc2V0dGluZyBcIiArXG4gICAgICBcImBlbmNyeXB0ZWQ6XFxcIlwiICsgRU5DUllQVElPTl9PRkYgKyBcIlxcXCJgLiBUaGVyZSBpcyBubyBtZWNoYW5pc20gdG8gdXNlIGVuY3J5cHRpb24gd2l0aG91dCB0cnVzdCB2ZXJpZmljYXRpb24sIFwiICtcbiAgICAgIFwiYmVjYXVzZSB0aGlzIGluY3VycyB0aGUgb3ZlcmhlYWQgb2YgZW5jcnlwdGlvbiB3aXRob3V0IGltcHJvdmluZyBzZWN1cml0eS4gSWYgXCIgK1xuICAgICAgXCJ0aGUgZHJpdmVyIGRvZXMgbm90IHZlcmlmeSB0aGF0IHRoZSBwZWVyIGl0IGlzIGNvbm5lY3RlZCB0byBpcyByZWFsbHkgTmVvNGosIGl0IFwiICtcbiAgICAgIFwiaXMgdmVyeSBlYXN5IGZvciBhbiBhdHRhY2tlciB0byBieXBhc3MgdGhlIGVuY3J5cHRpb24gYnkgcHJldGVuZGluZyB0byBiZSBOZW80ai5cIikpO1xuICB9XG59XG5cbi8qKlxuICogSW4gYSBOb2RlLmpzIGVudmlyb25tZW50IHRoZSAnbmV0JyBtb2R1bGUgaXMgdXNlZFxuICogYXMgdHJhbnNwb3J0LlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cbmNsYXNzIE5vZGVDaGFubmVsIHtcblxuICAvKipcbiAgICogQ3JlYXRlIG5ldyBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge0NoYW5uZWxDb25maWd9IGNvbmZpZyAtIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgY2hhbm5lbC5cbiAgICovXG4gIGNvbnN0cnVjdG9yIChjb25maWcpIHtcbiAgICBsZXQgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLmlkID0gX0NPTk5FQ1RJT05fSURHRU4rKztcbiAgICB0aGlzLmF2YWlsYWJsZSA9IHRydWU7XG4gICAgdGhpcy5fcGVuZGluZyA9IFtdO1xuICAgIHRoaXMuX29wZW4gPSB0cnVlO1xuICAgIHRoaXMuX2Vycm9yID0gbnVsbDtcbiAgICB0aGlzLl9oYW5kbGVDb25uZWN0aW9uRXJyb3IgPSB0aGlzLl9oYW5kbGVDb25uZWN0aW9uRXJyb3IuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9oYW5kbGVDb25uZWN0aW9uVGVybWluYXRlZCA9IHRoaXMuX2hhbmRsZUNvbm5lY3Rpb25UZXJtaW5hdGVkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fY29ubmVjdGlvbkVycm9yQ29kZSA9IGNvbmZpZy5jb25uZWN0aW9uRXJyb3JDb2RlO1xuXG4gICAgdGhpcy5fZW5jcnlwdGVkID0gY29uZmlnLmVuY3J5cHRlZDtcbiAgICB0aGlzLl9jb25uID0gY29ubmVjdChjb25maWcsICgpID0+IHtcbiAgICAgIGlmKCFzZWxmLl9vcGVuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2VsZi5fY29ubi5vbignZGF0YScsICggYnVmZmVyICkgPT4ge1xuICAgICAgICBpZiggc2VsZi5vbm1lc3NhZ2UgKSB7XG4gICAgICAgICAgc2VsZi5vbm1lc3NhZ2UoIG5ldyBOb2RlQnVmZmVyKCBidWZmZXIgKSApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc2VsZi5fY29ubi5vbignZXJyb3InLCBzZWxmLl9oYW5kbGVDb25uZWN0aW9uRXJyb3IpO1xuICAgICAgc2VsZi5fY29ubi5vbignZW5kJywgc2VsZi5faGFuZGxlQ29ubmVjdGlvblRlcm1pbmF0ZWQpO1xuXG4gICAgICAvLyBEcmFpbiBhbGwgcGVuZGluZyBtZXNzYWdlc1xuICAgICAgbGV0IHBlbmRpbmcgPSBzZWxmLl9wZW5kaW5nO1xuICAgICAgc2VsZi5fcGVuZGluZyA9IG51bGw7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBlbmRpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc2VsZi53cml0ZSggcGVuZGluZ1tpXSApO1xuICAgICAgfVxuICAgIH0sIHRoaXMuX2hhbmRsZUNvbm5lY3Rpb25FcnJvcik7XG4gIH1cblxuICBfaGFuZGxlQ29ubmVjdGlvbkVycm9yKCBlcnIgKSB7XG4gICAgbGV0IG1zZyA9IGVyci5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gY29ubmVjdCB0byBzZXJ2ZXInO1xuICAgIHRoaXMuX2Vycm9yID0gbmV3RXJyb3IobXNnLCB0aGlzLl9jb25uZWN0aW9uRXJyb3JDb2RlKTtcbiAgICBpZiggdGhpcy5vbmVycm9yICkge1xuICAgICAgdGhpcy5vbmVycm9yKHRoaXMuX2Vycm9yKTtcbiAgICB9XG4gIH1cblxuICBfaGFuZGxlQ29ubmVjdGlvblRlcm1pbmF0ZWQoKSB7XG4gICAgICB0aGlzLl9lcnJvciA9IG5ld0Vycm9yKCdDb25uZWN0aW9uIHdhcyBjbG9zZWQgYnkgc2VydmVyJywgdGhpcy5fY29ubmVjdGlvbkVycm9yQ29kZSk7XG4gICAgICBpZiggdGhpcy5vbmVycm9yICkge1xuICAgICAgICB0aGlzLm9uZXJyb3IodGhpcy5fZXJyb3IpO1xuICAgICAgfVxuICB9XG5cbiAgaXNFbmNyeXB0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VuY3J5cHRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSB0aGUgcGFzc2VkIGluIGJ1ZmZlciB0byBjb25uZWN0aW9uXG4gICAqIEBwYXJhbSB7Tm9kZUJ1ZmZlcn0gYnVmZmVyIC0gQnVmZmVyIHRvIHdyaXRlXG4gICAqL1xuICB3cml0ZSAoIGJ1ZmZlciApIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBhIHBlbmRpbmcgcXVldWUsIHB1c2ggdGhpcyBvbiB0aGF0IHF1ZXVlLiBUaGlzIG1lYW5zXG4gICAgLy8gd2UgYXJlIG5vdCB5ZXQgY29ubmVjdGVkLCBzbyB3ZSBxdWV1ZSB0aGluZ3MgbG9jYWxseS5cbiAgICBpZiggdGhpcy5fcGVuZGluZyAhPT0gbnVsbCApIHtcbiAgICAgIHRoaXMuX3BlbmRpbmcucHVzaCggYnVmZmVyICk7XG4gICAgfSBlbHNlIGlmKCBidWZmZXIgaW5zdGFuY2VvZiBOb2RlQnVmZmVyICkge1xuICAgICAgLy8gY29uc29sZS5sb2coIFwiW0Nvbm4jXCIrdGhpcy5pZCtcIl0gU0VORDogXCIsIGJ1ZmZlci50b1N0cmluZygpICk7XG4gICAgICB0aGlzLl9jb25uLndyaXRlKCBidWZmZXIuX2J1ZmZlciApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXdFcnJvciggXCJEb24ndCBrbm93IGhvdyB0byB3cml0ZTogXCIgKyBidWZmZXIgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgdGhlIGNvbm5lY3Rpb25cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2IgLSBGdW5jdGlvbiB0byBjYWxsIG9uIGNsb3NlLlxuICAgKi9cbiAgY2xvc2UoY2IgPSAoKCkgPT4gbnVsbCkpIHtcbiAgICB0aGlzLl9vcGVuID0gZmFsc2U7XG4gICAgaWYoIHRoaXMuX2Nvbm4gKSB7XG4gICAgICB0aGlzLl9jb25uLmVuZCgpO1xuICAgICAgdGhpcy5fY29ubi5yZW1vdmVMaXN0ZW5lcignZW5kJywgdGhpcy5faGFuZGxlQ29ubmVjdGlvblRlcm1pbmF0ZWQpO1xuICAgICAgdGhpcy5fY29ubi5vbignZW5kJywgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYigpO1xuICAgIH1cbiAgfVxufVxubGV0IF9ub2RlQ2hhbm5lbE1vZHVsZSA9IHtjaGFubmVsOiBOb2RlQ2hhbm5lbCwgYXZhaWxhYmxlOiB0cnVlfTtcblxudHJ5IHtcbiAgLy8gT25seSBkZWZpbmUgdGhpcyBtb2R1bGUgaWYgJ25ldCcgaXMgYXZhaWxhYmxlXG4gIHJlcXVpcmUucmVzb2x2ZShcIm5ldFwiKTtcbn0gY2F0Y2goZSkge1xuICBfbm9kZUNoYW5uZWxNb2R1bGUgPSB7IGF2YWlsYWJsZSA6IGZhbHNlIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IF9ub2RlQ2hhbm5lbE1vZHVsZVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7SGVhcEJ1ZmZlcn0gZnJvbSAnLi9idWYnO1xuaW1wb3J0IHtuZXdFcnJvcn0gZnJvbSAnLi8uLi9lcnJvcic7XG5pbXBvcnQge0VOQ1JZUFRJT05fT0ZGLCBFTkNSWVBUSU9OX09OfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBXZWJTb2NrZXRDaGFubmVsIHRvIGJlIHVzZWQgaW4gd2ViIGJyb3dzZXJzLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cbmNsYXNzIFdlYlNvY2tldENoYW5uZWwge1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgbmV3IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7Q2hhbm5lbENvbmZpZ30gY29uZmlnIC0gY29uZmlndXJhdGlvbiBmb3IgdGhpcyBjaGFubmVsLlxuICAgKi9cbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG5cbiAgICB0aGlzLl9vcGVuID0gdHJ1ZTtcbiAgICB0aGlzLl9wZW5kaW5nID0gW107XG4gICAgdGhpcy5fZXJyb3IgPSBudWxsO1xuICAgIHRoaXMuX2hhbmRsZUNvbm5lY3Rpb25FcnJvciA9IHRoaXMuX2hhbmRsZUNvbm5lY3Rpb25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2Nvbm5lY3Rpb25FcnJvckNvZGUgPSBjb25maWcuY29ubmVjdGlvbkVycm9yQ29kZTtcblxuICAgIHRoaXMuX2VuY3J5cHRlZCA9IGNvbmZpZy5lbmNyeXB0ZWQ7XG5cbiAgICBsZXQgc2NoZW1lID0gXCJ3c1wiO1xuICAgIC8vQWxsb3cgYm9vbGVhbiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICBpZiAoY29uZmlnLmVuY3J5cHRlZCA9PT0gdHJ1ZSB8fCBjb25maWcuZW5jcnlwdGVkID09PSBFTkNSWVBUSU9OX09OKSB7XG4gICAgICBpZiAoKCFjb25maWcudHJ1c3QpIHx8IGNvbmZpZy50cnVzdCA9PT0gJ1RSVVNUX0NVU1RPTV9DQV9TSUdORURfQ0VSVElGSUNBVEVTJykge1xuICAgICAgICBzY2hlbWUgPSBcIndzc1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZXJyb3IgPSBuZXdFcnJvcihcIlRoZSBicm93c2VyIHZlcnNpb24gb2YgdGhpcyBkcml2ZXIgb25seSBzdXBwb3J0cyBvbmUgdHJ1c3QgXCIgK1xuICAgICAgICAgICdzdHJhdGVneSwgXFwnVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVNcXCcuICcgKyBjb25maWcudHJ1c3QgKyAnIGlzIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSAnICtcbiAgICAgICAgICBcImVpdGhlciB1c2UgVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVMgb3IgZGlzYWJsZSBlbmNyeXB0aW9uIGJ5IHNldHRpbmcgXCIgK1xuICAgICAgICAgIFwiYGVuY3J5cHRlZDpcXFwiXCIgKyBFTkNSWVBUSU9OX09GRiArIFwiXFxcImAgaW4gdGhlIGRyaXZlciBjb25maWd1cmF0aW9uLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl91cmwgPSBzY2hlbWUgKyAnOi8vJyArIGNvbmZpZy5ob3N0ICsgJzonICsgY29uZmlnLnBvcnQ7XG4gICAgdGhpcy5fd3MgPSBuZXcgV2ViU29ja2V0KHRoaXMuX3VybCk7XG4gICAgdGhpcy5fd3MuYmluYXJ5VHlwZSA9IFwiYXJyYXlidWZmZXJcIjtcblxuICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAvL0FsbCBjb25uZWN0aW9uIGVycm9ycyBhcmUgbm90IHNlbnQgdG8gdGhlIGVycm9yIGhhbmRsZXJcbiAgICAvL3dlIG11c3QgYWxzbyBjaGVjayBmb3IgZGlydHkgY2xvc2UgY2FsbHNcbiAgICB0aGlzLl93cy5vbmNsb3NlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoIWUud2FzQ2xlYW4pIHtcbiAgICAgICAgICBzZWxmLl9oYW5kbGVDb25uZWN0aW9uRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5fd3Mub25vcGVuID0gZnVuY3Rpb24oKSB7XG4gICAgICAvLyBEcmFpbiBhbGwgcGVuZGluZyBtZXNzYWdlc1xuICAgICAgbGV0IHBlbmRpbmcgPSBzZWxmLl9wZW5kaW5nO1xuICAgICAgc2VsZi5fcGVuZGluZyA9IG51bGw7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBlbmRpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc2VsZi53cml0ZSggcGVuZGluZ1tpXSApO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5fd3Mub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiggc2VsZi5vbm1lc3NhZ2UgKSB7XG4gICAgICAgIHZhciBiID0gbmV3IEhlYXBCdWZmZXIoIGV2ZW50LmRhdGEgKTtcbiAgICAgICAgc2VsZi5vbm1lc3NhZ2UoIGIgKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5fd3Mub25lcnJvciA9IHRoaXMuX2hhbmRsZUNvbm5lY3Rpb25FcnJvcjtcbiAgfVxuXG4gIF9oYW5kbGVDb25uZWN0aW9uRXJyb3IoKSB7XG4gICAgLy8gb25lcnJvciB0cmlnZ2VycyBvbiB3ZWJzb2NrZXQgY2xvc2UgYXMgd2VsbC4uIGRvbid0IGdldCBtZSBzdGFydGVkLlxuICAgIGlmKCB0aGlzLl9vcGVuICkge1xuICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNTc3OTgzMS9ob3ctdG8tY2F0Y2gtd2Vic29ja2V0LWNvbm5lY3Rpb24tdG8td3MteHh4bm4tZmFpbGVkLWNvbm5lY3Rpb24tY2xvc2VkLWJlXG4gICAgICB0aGlzLl9lcnJvciA9IG5ld0Vycm9yKCBcIldlYlNvY2tldCBjb25uZWN0aW9uIGZhaWx1cmUuIER1ZSB0byBzZWN1cml0eSBcIiArXG4gICAgICAgIFwiY29uc3RyYWludHMgaW4geW91ciB3ZWIgYnJvd3NlciwgdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUgaXMgbm90IGF2YWlsYWJsZSBcIiArXG4gICAgICAgIFwidG8gdGhpcyBOZW80aiBEcml2ZXIuIFBsZWFzZSB1c2UgeW91ciBicm93c2VycyBkZXZlbG9wbWVudCBjb25zb2xlIHRvIGRldGVybWluZSBcIiArXG4gICAgICAgIFwidGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGZhaWx1cmUuIENvbW1vbiByZWFzb25zIGluY2x1ZGUgdGhlIGRhdGFiYXNlIGJlaW5nIFwiICtcbiAgICAgICAgXCJ1bmF2YWlsYWJsZSwgdXNpbmcgdGhlIHdyb25nIGNvbm5lY3Rpb24gVVJMIG9yIHRlbXBvcmFyeSBuZXR3b3JrIHByb2JsZW1zLiBcIiArXG4gICAgICAgIFwiSWYgeW91IGhhdmUgZW5hYmxlZCBlbmNyeXB0aW9uLCBlbnN1cmUgeW91ciBicm93c2VyIGlzIGNvbmZpZ3VyZWQgdG8gdHJ1c3QgdGhlIFwiICtcbiAgICAgICAgXCJjZXJ0aWZpY2F0ZSBOZW80aiBpcyBjb25maWd1cmVkIHRvIHVzZS4gV2ViU29ja2V0IGByZWFkeVN0YXRlYCBpczogXCIgKyB0aGlzLl93cy5yZWFkeVN0YXRlLCB0aGlzLl9jb25uZWN0aW9uRXJyb3JDb2RlICk7XG4gICAgICBpZiAodGhpcy5vbmVycm9yKSB7XG4gICAgICAgIHRoaXMub25lcnJvcih0aGlzLl9lcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNFbmNyeXB0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VuY3J5cHRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSB0aGUgcGFzc2VkIGluIGJ1ZmZlciB0byBjb25uZWN0aW9uXG4gICAqIEBwYXJhbSB7SGVhcEJ1ZmZlcn0gYnVmZmVyIC0gQnVmZmVyIHRvIHdyaXRlXG4gICAqL1xuICB3cml0ZSAoIGJ1ZmZlciApIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBhIHBlbmRpbmcgcXVldWUsIHB1c2ggdGhpcyBvbiB0aGF0IHF1ZXVlLiBUaGlzIG1lYW5zXG4gICAgLy8gd2UgYXJlIG5vdCB5ZXQgY29ubmVjdGVkLCBzbyB3ZSBxdWV1ZSB0aGluZ3MgbG9jYWxseS5cbiAgICBpZiggdGhpcy5fcGVuZGluZyAhPT0gbnVsbCApIHtcbiAgICAgIHRoaXMuX3BlbmRpbmcucHVzaCggYnVmZmVyICk7XG4gICAgfSBlbHNlIGlmKCBidWZmZXIgaW5zdGFuY2VvZiBIZWFwQnVmZmVyICkge1xuICAgICAgdGhpcy5fd3Muc2VuZCggYnVmZmVyLl9idWZmZXIgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3RXJyb3IoIFwiRG9uJ3Qga25vdyBob3cgdG8gc2VuZCBidWZmZXI6IFwiICsgYnVmZmVyICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHRoZSBjb25uZWN0aW9uXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNiIC0gRnVuY3Rpb24gdG8gY2FsbCBvbiBjbG9zZS5cbiAgICovXG4gIGNsb3NlICggY2IgPSAoICgpID0+IG51bGwgKSkge1xuICAgIHRoaXMuX29wZW4gPSBmYWxzZTtcbiAgICB0aGlzLl93cy5jbG9zZSgpO1xuICAgIHRoaXMuX3dzLm9uY2xvc2UgPSBjYjtcbiAgfVxufVxuXG5sZXQgYXZhaWxhYmxlID0gdHlwZW9mIFdlYlNvY2tldCAhPT0gJ3VuZGVmaW5lZCc7XG5sZXQgX3dlYnNvY2tldENoYW5uZWxNb2R1bGUgPSB7Y2hhbm5lbDogV2ViU29ja2V0Q2hhbm5lbCwgYXZhaWxhYmxlOiBhdmFpbGFibGV9O1xuXG5leHBvcnQgZGVmYXVsdCBfd2Vic29ja2V0Q2hhbm5lbE1vZHVsZVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7YWxsb2MsIEJhc2VCdWZmZXIsIENvbWJpbmVkQnVmZmVyfSBmcm9tICcuL2J1Zic7XG5cbmxldFxuICBfQ0hVTktfSEVBREVSX1NJWkUgPSAyLFxuICBfTUVTU0FHRV9CT1VOREFSWSA9IDB4MDAsXG4gIF9ERUZBVUxUX0JVRkZFUl9TSVpFID0gMTQwMDsgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNjEzNzM0L21heGltdW0tcGFja2V0LXNpemUtZm9yLWEtdGNwLWNvbm5lY3Rpb25cblxuLyoqXG4gKiBMb29rcyBsaWtlIGEgd3JpdGFibGUgYnVmZmVyLCBjaHVua3Mgb3V0cHV0IHRyYW5zcGFyZW50bHkgaW50byBhIGNoYW5uZWwgYmVsb3cuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqL1xuY2xhc3MgQ2h1bmtlciBleHRlbmRzIEJhc2VCdWZmZXIge1xuICBjb25zdHJ1Y3RvcihjaGFubmVsLCBidWZmZXJTaXplKSB7XG4gICAgc3VwZXIoMCk7XG4gICAgdGhpcy5fYnVmZmVyU2l6ZSA9IGJ1ZmZlclNpemUgfHwgX0RFRkFVTFRfQlVGRkVSX1NJWkU7XG4gICAgdGhpcy5fY2ggPSBjaGFubmVsO1xuICAgIHRoaXMuX2J1ZmZlciA9IGFsbG9jKHRoaXMuX2J1ZmZlclNpemUpO1xuICAgIHRoaXMuX2N1cnJlbnRDaHVua1N0YXJ0ID0gMDtcbiAgICB0aGlzLl9jaHVua09wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHB1dFVJbnQ4KHBvc2l0aW9uLCB2YWwpIHtcbiAgICB0aGlzLl9lbnN1cmUoMSk7XG4gICAgdGhpcy5fYnVmZmVyLndyaXRlVUludDgodmFsKTtcbiAgfVxuXG4gIHB1dEludDgocG9zaXRpb24sIHZhbCkge1xuICAgIHRoaXMuX2Vuc3VyZSgxKTtcbiAgICB0aGlzLl9idWZmZXIud3JpdGVJbnQ4KHZhbCk7XG4gIH1cblxuICBwdXRGbG9hdDY0KHBvc2l0aW9uLCB2YWwpIHtcbiAgICB0aGlzLl9lbnN1cmUoOCk7XG4gICAgdGhpcy5fYnVmZmVyLndyaXRlRmxvYXQ2NCh2YWwpO1xuICB9XG5cbiAgcHV0Qnl0ZXMocG9zaXRpb24sIGRhdGEpIHtcbiAgICAvLyBUT0RPOiBJZiBkYXRhIGlzIGxhcmdlciB0aGFuIG91ciBjaHVuayBzaXplIG9yIHNvLCB3ZSdyZSB2ZXJ5IGxpa2VseSBiZXR0ZXIgb2ZmIGp1c3QgcGFzc2luZyB0aGlzIGJ1ZmZlciBvblxuICAgIC8vIHJhdGhlciB0aGFuIGRvaW5nIHRoZSBjb3B5IGhlcmUgVE9ETzogKmhvd2V2ZXIqIG5vdGUgdGhhdCB3ZSBuZWVkIHNvbWUgd2F5IHRvIGZpbmQgb3V0IHdoZW4gdGhlIGRhdGEgaGFzIGJlZW5cbiAgICAvLyB3cml0dGVuIChhbmQgdGh1cyB0aGUgYnVmZmVyIGNhbiBiZSByZS11c2VkKSBpZiB3ZSB0YWtlIHRoYXQgYXBwcm9hY2hcbiAgICB3aGlsZSAoZGF0YS5yZW1haW5pbmcoKSA+IDApIHtcbiAgICAgIC8vIEVuc3VyZSB0aGVyZSBpcyBhbiBvcGVuIGNodW5rLCBhbmQgdGhhdCBpdCBoYXMgYXQgbGVhc3Qgb25lIGJ5dGUgb2Ygc3BhY2UgbGVmdFxuICAgICAgdGhpcy5fZW5zdXJlKDEpO1xuICAgICAgaWYgKHRoaXMuX2J1ZmZlci5yZW1haW5pbmcoKSA+IGRhdGEucmVtYWluaW5nKCkpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyLndyaXRlQnl0ZXMoZGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIud3JpdGVCeXRlcyhkYXRhLnJlYWRTbGljZSh0aGlzLl9idWZmZXIucmVtYWluaW5nKCkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmbHVzaCgpIHtcbiAgICBpZiAodGhpcy5fYnVmZmVyLnBvc2l0aW9uID4gMCkge1xuICAgICAgdGhpcy5fY2xvc2VDaHVua0lmT3BlbigpO1xuXG4gICAgICAvLyBMb2NhbCBjb3B5IGFuZCBjbGVhciB0aGUgYnVmZmVyIGZpZWxkLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYnVmZmVyIGlzIG5vdCByZS1yZWxlYXNlZCBpZiB0aGUgZmx1c2ggY2FsbCBmYWlsc1xuICAgICAgbGV0IG91dCA9IHRoaXMuX2J1ZmZlcjtcbiAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cbiAgICAgIHRoaXMuX2NoLndyaXRlKG91dC5nZXRTbGljZSgwLCBvdXQucG9zaXRpb24pKTtcblxuICAgICAgLy8gQWxsb2MgYSBuZXcgb3V0cHV0IGJ1ZmZlci4gV2UgYXNzdW1lIHdlJ3JlIHVzaW5nIE5vZGVKUydzIGJ1ZmZlciBwb29saW5nIHVuZGVyIHRoZSBob29kIGhlcmUhXG4gICAgICB0aGlzLl9idWZmZXIgPSBhbGxvYyh0aGlzLl9idWZmZXJTaXplKTtcbiAgICAgIHRoaXMuX2NodW5rT3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBCb2x0IG1lc3NhZ2VzIGFyZSBlbmNvZGVkIGluIG9uZSBvciBtb3JlIGNodW5rcywgYW5kIHRoZSBib3VuZGFyeSBiZXR3ZWVuIHR3byBtZXNzYWdlc1xuICAgKiBpcyBlbmNvZGVkIGFzIGEgMC1sZW5ndGggY2h1bmssIGAwMCAwMGAuIFRoaXMgaW5zZXJ0cyBzdWNoIGEgbWVzc2FnZSBib3VuZGFyeSwgY2xvc2luZ1xuICAgKiBhbnkgY3VycmVudGx5IG9wZW4gY2h1bmsgYXMgbmVlZGVkXG4gICAqL1xuICBtZXNzYWdlQm91bmRhcnkoKSB7XG5cbiAgICB0aGlzLl9jbG9zZUNodW5rSWZPcGVuKCk7XG5cbiAgICBpZiAodGhpcy5fYnVmZmVyLnJlbWFpbmluZygpIDwgX0NIVU5LX0hFQURFUl9TSVpFKSB7XG4gICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gICAgLy8gV3JpdGUgbWVzc2FnZSBib3VuZGFyeVxuICAgIHRoaXMuX2J1ZmZlci53cml0ZUludDE2KF9NRVNTQUdFX0JPVU5EQVJZKTtcbiAgfVxuXG4gIC8qKiBFbnN1cmUgYXQgbGVhc3QgdGhlIGdpdmVuIHNpemUgaXMgYXZhaWxhYmxlIGZvciB3cml0aW5nICovXG4gIF9lbnN1cmUoc2l6ZSkge1xuICAgIGxldCB0b1dyaXRlU2l6ZSA9IHRoaXMuX2NodW5rT3BlbiA/IHNpemUgOiBzaXplICsgX0NIVU5LX0hFQURFUl9TSVpFO1xuICAgIGlmICh0aGlzLl9idWZmZXIucmVtYWluaW5nKCkgPCB0b1dyaXRlU2l6ZSkge1xuICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fY2h1bmtPcGVuKSB7XG4gICAgICB0aGlzLl9jdXJyZW50Q2h1bmtTdGFydCA9IHRoaXMuX2J1ZmZlci5wb3NpdGlvbjtcbiAgICAgIHRoaXMuX2J1ZmZlci5wb3NpdGlvbiA9IHRoaXMuX2J1ZmZlci5wb3NpdGlvbiArIF9DSFVOS19IRUFERVJfU0laRTtcbiAgICAgIHRoaXMuX2NodW5rT3BlbiA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgX2Nsb3NlQ2h1bmtJZk9wZW4oKSB7XG4gICAgaWYgKHRoaXMuX2NodW5rT3Blbikge1xuICAgICAgbGV0IGNodW5rU2l6ZSA9IHRoaXMuX2J1ZmZlci5wb3NpdGlvbiAtICh0aGlzLl9jdXJyZW50Q2h1bmtTdGFydCArIF9DSFVOS19IRUFERVJfU0laRSk7XG4gICAgICB0aGlzLl9idWZmZXIucHV0VUludDE2KHRoaXMuX2N1cnJlbnRDaHVua1N0YXJ0LCBjaHVua1NpemUpO1xuICAgICAgdGhpcy5fY2h1bmtPcGVuID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cblxuLyoqXG4gKiBDb21iaW5lcyBjaHVua3MgdW50aWwgYSBjb21wbGV0ZSBtZXNzYWdlIGlzIGdhdGhlcmVkIHVwLCBhbmQgdGhlbiBmb3J3YXJkcyB0aGF0XG4gKiBtZXNzYWdlIHRvIGFuICdvbm1lc3NhZ2UnIGxpc3RlbmVyLlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cbmNsYXNzIERlY2h1bmtlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2N1cnJlbnRNZXNzYWdlID0gW107XG4gICAgdGhpcy5fcGFydGlhbENodW5rSGVhZGVyID0gMDtcbiAgICB0aGlzLl9zdGF0ZSA9IHRoaXMuQVdBSVRJTkdfQ0hVTks7XG4gIH1cblxuICBBV0FJVElOR19DSFVOSyhidWYpIHtcbiAgICBpZiAoYnVmLnJlbWFpbmluZygpID49IDIpIHtcbiAgICAgIC8vIFdob2xlIGhlYWRlciBhdmFpbGFibGUsIHJlYWQgdGhhdFxuICAgICAgcmV0dXJuIHRoaXMuX29uSGVhZGVyKGJ1Zi5yZWFkVUludDE2KCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPbmx5IG9uZSBieXRlIGF2YWlsYWJsZSwgcmVhZCB0aGF0IGFuZCB3YWl0IGZvciB0aGUgc2Vjb25kIGJ5dGVcbiAgICAgIHRoaXMuX3BhcnRpYWxDaHVua0hlYWRlciA9IGJ1Zi5yZWFkVUludDgoKSA8PCA4O1xuICAgICAgcmV0dXJuIHRoaXMuSU5fSEVBREVSO1xuICAgIH1cbiAgfVxuXG4gIElOX0hFQURFUihidWYpIHtcbiAgICAvLyBGaXJzdCBoZWFkZXIgYnl0ZSByZWFkLCBub3cgd2UgcmVhZCB0aGUgbmV4dCBvbmVcbiAgICByZXR1cm4gdGhpcy5fb25IZWFkZXIoKHRoaXMuX3BhcnRpYWxDaHVua0hlYWRlciB8IGJ1Zi5yZWFkVUludDgoKSkgJiAweEZGRkYpO1xuICB9XG5cbiAgSU5fQ0hVTksoYnVmKSB7XG4gICAgaWYgKHRoaXMuX2NodW5rU2l6ZSA8PSBidWYucmVtYWluaW5nKCkpIHtcbiAgICAgIC8vIEN1cnJlbnQgcGFja2V0IGlzIGxhcmdlciB0aGFuIGN1cnJlbnQgY2h1bmssIG9yIHNhbWUgc2l6ZTpcbiAgICAgIHRoaXMuX2N1cnJlbnRNZXNzYWdlLnB1c2goYnVmLnJlYWRTbGljZSh0aGlzLl9jaHVua1NpemUpKTtcbiAgICAgIHJldHVybiB0aGlzLkFXQUlUSU5HX0NIVU5LO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDdXJyZW50IHBhY2tldCBpcyBzbWFsbGVyIHRoYW4gdGhlIGNodW5rIHdlJ3JlIHJlYWRpbmcsIHNwbGl0IHRoZSBjdXJyZW50IGNodW5rIGl0c2VsZiB1cFxuICAgICAgdGhpcy5fY2h1bmtTaXplIC09IGJ1Zi5yZW1haW5pbmcoKTtcbiAgICAgIHRoaXMuX2N1cnJlbnRNZXNzYWdlLnB1c2goYnVmLnJlYWRTbGljZShidWYucmVtYWluaW5nKCkpKTtcbiAgICAgIHJldHVybiB0aGlzLklOX0NIVU5LO1xuICAgIH1cbiAgfVxuXG4gIENMT1NFRChidWYpIHtcbiAgICAvLyBuby1vcFxuICB9XG5cbiAgLyoqIENhbGxlZCB3aGVuIGEgY29tcGxldGUgY2h1bmsgaGVhZGVyIGhhcyBiZWVuIHJlY2lldmVkICovXG4gIF9vbkhlYWRlcihoZWFkZXIpIHtcbiAgICBpZiAoaGVhZGVyID09IDApIHtcbiAgICAgIC8vIE1lc3NhZ2UgYm91bmRhcnlcbiAgICAgIGxldCBtZXNzYWdlO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnRNZXNzYWdlLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIG1lc3NhZ2UgPSB0aGlzLl9jdXJyZW50TWVzc2FnZVswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lc3NhZ2UgPSBuZXcgQ29tYmluZWRCdWZmZXIoIHRoaXMuX2N1cnJlbnRNZXNzYWdlICk7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50TWVzc2FnZSA9IFtdO1xuICAgICAgdGhpcy5vbm1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICByZXR1cm4gdGhpcy5BV0FJVElOR19DSFVOSztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2h1bmtTaXplID0gaGVhZGVyO1xuICAgICAgcmV0dXJuIHRoaXMuSU5fQ0hVTks7XG4gICAgfVxuICB9XG5cbiAgd3JpdGUoYnVmKSB7XG4gICAgd2hpbGUgKGJ1Zi5oYXNSZW1haW5pbmcoKSkge1xuICAgICAgdGhpcy5fc3RhdGUgPSB0aGlzLl9zdGF0ZShidWYpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQge1xuICBDaHVua2VyLFxuICBEZWNodW5rZXJcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge25ld0Vycm9yfSBmcm9tICcuLi9lcnJvcic7XG5cbi8qKlxuICogVXRpbGl0eSB0byBsYXppbHkgaW5pdGlhbGl6ZSBjb25uZWN0aW9ucyBhbmQgcmV0dXJuIHRoZW0gYmFjayB0byB0aGUgcG9vbCB3aGVuIHVudXNlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29ubmVjdGlvbkhvbGRlciB7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kZSAtIHRoZSBhY2Nlc3MgbW9kZSBmb3IgbmV3IGNvbm5lY3Rpb24gaG9sZGVyLlxuICAgKiBAcGFyYW0ge0Nvbm5lY3Rpb25Qcm92aWRlcn0gY29ubmVjdGlvblByb3ZpZGVyIC0gdGhlIGNvbm5lY3Rpb24gcHJvdmlkZXIgdG8gYWNxdWlyZSBjb25uZWN0aW9ucyBmcm9tLlxuICAgKi9cbiAgY29uc3RydWN0b3IobW9kZSwgY29ubmVjdGlvblByb3ZpZGVyKSB7XG4gICAgdGhpcy5fbW9kZSA9IG1vZGU7XG4gICAgdGhpcy5fY29ubmVjdGlvblByb3ZpZGVyID0gY29ubmVjdGlvblByb3ZpZGVyO1xuICAgIHRoaXMuX3JlZmVyZW5jZUNvdW50ID0gMDtcbiAgICB0aGlzLl9jb25uZWN0aW9uUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHRoaXMgaG9sZGVyIGluaXRpYWxpemUgbmV3IGNvbm5lY3Rpb24gaWYgbm9uZSBleGlzdHMgYWxyZWFkeS5cbiAgICogQHJldHVybiB7dW5kZWZpbmVkfVxuICAgKi9cbiAgaW5pdGlhbGl6ZUNvbm5lY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX3JlZmVyZW5jZUNvdW50ID09PSAwKSB7XG4gICAgICB0aGlzLl9jb25uZWN0aW9uUHJvbWlzZSA9IHRoaXMuX2Nvbm5lY3Rpb25Qcm92aWRlci5hY3F1aXJlQ29ubmVjdGlvbih0aGlzLl9tb2RlKTtcbiAgICB9XG4gICAgdGhpcy5fcmVmZXJlbmNlQ291bnQrKztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBwcm9taXNlLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENvbm5lY3Rpb24+fSBwcm9taXNlIHJlc29sdmVkIHdpdGggdGhlIGN1cnJlbnQgY29ubmVjdGlvbi5cbiAgICovXG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vdGlmeSB0aGlzIGhvbGRlciB0aGF0IHNpbmdsZSBwYXJ0eSBkb2VzIG5vdCByZXF1aXJlIGN1cnJlbnQgY29ubmVjdGlvbiBhbnkgbW9yZS5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDb25uZWN0aW9uPn0gcHJvbWlzZSByZXNvbHZlZCB3aXRoIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24uXG4gICAqL1xuICByZWxlYXNlQ29ubmVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5fcmVmZXJlbmNlQ291bnQgPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uUHJvbWlzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWZlcmVuY2VDb3VudC0tO1xuICAgIGlmICh0aGlzLl9yZWZlcmVuY2VDb3VudCA9PT0gMCkge1xuICAgICAgLy8gcmVsZWFzZSBhIGNvbm5lY3Rpb24gd2l0aG91dCBtdXRpbmcgQUNLX0ZBSUxVUkUsIHRoaXMgaXMgdGhlIGxhc3QgYWN0aW9uIG9uIHRoaXMgY29ubmVjdGlvblxuICAgICAgcmV0dXJuIHRoaXMuX3JlbGVhc2VDb25uZWN0aW9uKHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoaXMgaG9sZGVyIGFuZCByZWxlYXNlcyBjdXJyZW50IGNvbm5lY3Rpb24gKGlmIGFueSkgZGVzcGl0ZSBhbnkgZXhpc3RpbmcgdXNlcnMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q29ubmVjdGlvbj59IHByb21pc2UgcmVzb2x2ZWQgd2hlbiBjdXJyZW50IGNvbm5lY3Rpb24gaXMgcmVsZWFzZWQgdG8gdGhlIHBvb2wuXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICBpZiAodGhpcy5fcmVmZXJlbmNlQ291bnQgPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uUHJvbWlzZTtcbiAgICB9XG4gICAgdGhpcy5fcmVmZXJlbmNlQ291bnQgPSAwO1xuICAgIC8vIHJlbGVhc2UgYSBjb25uZWN0aW9uIGFuZCBtdXRlIEFDS19GQUlMVVJFLCB0aGlzIG1pZ2h0IGJlIGNhbGxlZCBjb25jdXJyZW50bHkgd2l0aCBvdGhlclxuICAgIC8vIG9wZXJhdGlvbnMgYW5kIHRodXMgc2hvdWxkIGlnbm9yZSBmYWlsdXJlIGhhbmRsaW5nXG4gICAgcmV0dXJuIHRoaXMuX3JlbGVhc2VDb25uZWN0aW9uKGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGN1cnJlbnQgcG9vbGVkIGNvbm5lY3Rpb24gaW5zdGFuY2UgdG8gdGhlIGNvbm5lY3Rpb24gcG9vbC5cbiAgICogV2UgZG9uJ3QgcG9vbCBTZXNzaW9uIGluc3RhbmNlcywgdG8gYXZvaWQgdXNlcnMgdXNpbmcgdGhlIFNlc3Npb24gYWZ0ZXIgdGhleSd2ZSBjYWxsZWQgY2xvc2UuXG4gICAqIFRoZSBgU2Vzc2lvbmAgb2JqZWN0IGlzIGp1c3QgYSB0aGluIHdyYXBwZXIgYXJvdW5kIENvbm5lY3Rpb24gYW55d2F5LCBzbyBpdCBtYWtlcyBsaXR0bGUgZGlmZmVyZW5jZS5cbiAgICogQHJldHVybiB7UHJvbWlzZX0gLSBwcm9taXNlIHJlc29sdmVkIHRoZW4gY29ubmVjdGlvbiBpcyByZXR1cm5lZCB0byB0aGUgcG9vbC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZWxlYXNlQ29ubmVjdGlvbihzeW5jKSB7XG4gICAgdGhpcy5fY29ubmVjdGlvblByb21pc2UgPSB0aGlzLl9jb25uZWN0aW9uUHJvbWlzZS50aGVuKGNvbm5lY3Rpb24gPT4ge1xuICAgICAgaWYgKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgaWYoc3luYykge1xuICAgICAgICAgIGNvbm5lY3Rpb24ucmVzZXQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25uZWN0aW9uLnJlc2V0QXN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25uZWN0aW9uLnN5bmMoKTtcbiAgICAgICAgY29ubmVjdGlvbi5fcmVsZWFzZSgpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKGlnbm9yZWRFcnJvciA9PiB7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblByb21pc2U7XG4gIH1cbn1cblxuY2xhc3MgRW1wdHlDb25uZWN0aW9uSG9sZGVyIGV4dGVuZHMgQ29ubmVjdGlvbkhvbGRlciB7XG5cbiAgaW5pdGlhbGl6ZUNvbm5lY3Rpb24oKSB7XG4gICAgLy8gbm90aGluZyB0byBpbml0aWFsaXplXG4gIH1cblxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXdFcnJvcignVGhpcyBjb25uZWN0aW9uIGhvbGRlciBkb2VzIG5vdCBzZXJ2ZSBjb25uZWN0aW9ucycpKTtcbiAgfVxuXG4gIHJlbGVhc2VDb25uZWN0aW9uKCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbm5lY3Rpb24gaG9sZGVyIHRoYXQgZG9lcyBub3QgbWFuYWdlIGFueSBjb25uZWN0aW9ucy5cbiAqIEB0eXBlIHtDb25uZWN0aW9uSG9sZGVyfVxuICovXG5leHBvcnQgY29uc3QgRU1QVFlfQ09OTkVDVElPTl9IT0xERVIgPSBuZXcgRW1wdHlDb25uZWN0aW9uSG9sZGVyKCk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtuZXdFcnJvciwgU0VSVklDRV9VTkFWQUlMQUJMRSwgU0VTU0lPTl9FWFBJUkVEfSBmcm9tICcuLi9lcnJvcic7XG5pbXBvcnQge1JFQUQsIFdSSVRFfSBmcm9tICcuLi9kcml2ZXInO1xuaW1wb3J0IFNlc3Npb24gZnJvbSAnLi4vc2Vzc2lvbic7XG5pbXBvcnQgUm91bmRSb2JpbkFycmF5IGZyb20gJy4vcm91bmQtcm9iaW4tYXJyYXknO1xuaW1wb3J0IFJvdXRpbmdUYWJsZSBmcm9tICcuL3JvdXRpbmctdGFibGUnO1xuaW1wb3J0IFJlZGlzY292ZXJ5IGZyb20gJy4vcmVkaXNjb3ZlcnknO1xuaW1wb3J0IGhhc0ZlYXR1cmUgZnJvbSAnLi9mZWF0dXJlcyc7XG5pbXBvcnQge0Ruc0hvc3ROYW1lUmVzb2x2ZXIsIER1bW15SG9zdE5hbWVSZXNvbHZlcn0gZnJvbSAnLi9ob3N0LW5hbWUtcmVzb2x2ZXJzJztcbmltcG9ydCBSb3V0aW5nVXRpbCBmcm9tICcuL3JvdXRpbmctdXRpbCc7XG5cbmNsYXNzIENvbm5lY3Rpb25Qcm92aWRlciB7XG5cbiAgYWNxdWlyZUNvbm5lY3Rpb24obW9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQWJzdHJhY3QgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIF93aXRoQWRkaXRpb25hbE9uRXJyb3JDYWxsYmFjayhjb25uZWN0aW9uUHJvbWlzZSwgZHJpdmVyT25FcnJvckNhbGxiYWNrKSB7XG4gICAgLy8gaW5zdGFsbCBlcnJvciBoYW5kbGVyIGZyb20gdGhlIGRyaXZlciBvbiB0aGUgY29ubmVjdGlvbiBwcm9taXNlOyB0aGlzIGNhbGxiYWNrIGlzIGluc3RhbGxlZCBzZXBhcmF0ZWx5XG4gICAgLy8gc28gdGhhdCBpdCBkb2VzIG5vdCBoYW5kbGUgZXJyb3JzLCBpbnN0ZWFkIGl0IGlzIGp1c3QgYW4gYWRkaXRpb25hbCBlcnJvciByZXBvcnRpbmcgZmFjaWxpdHkuXG4gICAgY29ubmVjdGlvblByb21pc2UuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZHJpdmVyT25FcnJvckNhbGxiYWNrKGVycm9yKTtcbiAgICB9KTtcbiAgICAvLyByZXR1cm4gdGhlIG9yaWdpbmFsIGNvbm5lY3Rpb24gcHJvbWlzZVxuICAgIHJldHVybiBjb25uZWN0aW9uUHJvbWlzZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGlyZWN0Q29ubmVjdGlvblByb3ZpZGVyIGV4dGVuZHMgQ29ubmVjdGlvblByb3ZpZGVyIHtcblxuICBjb25zdHJ1Y3RvcihhZGRyZXNzLCBjb25uZWN0aW9uUG9vbCwgZHJpdmVyT25FcnJvckNhbGxiYWNrKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9hZGRyZXNzID0gYWRkcmVzcztcbiAgICB0aGlzLl9jb25uZWN0aW9uUG9vbCA9IGNvbm5lY3Rpb25Qb29sO1xuICAgIHRoaXMuX2RyaXZlck9uRXJyb3JDYWxsYmFjayA9IGRyaXZlck9uRXJyb3JDYWxsYmFjaztcbiAgfVxuXG4gIGFjcXVpcmVDb25uZWN0aW9uKG1vZGUpIHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvblBvb2wuYWNxdWlyZSh0aGlzLl9hZGRyZXNzKTtcbiAgICBjb25zdCBjb25uZWN0aW9uUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25uZWN0aW9uKTtcbiAgICByZXR1cm4gdGhpcy5fd2l0aEFkZGl0aW9uYWxPbkVycm9yQ2FsbGJhY2soY29ubmVjdGlvblByb21pc2UsIHRoaXMuX2RyaXZlck9uRXJyb3JDYWxsYmFjayk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExvYWRCYWxhbmNlciBleHRlbmRzIENvbm5lY3Rpb25Qcm92aWRlciB7XG5cbiAgY29uc3RydWN0b3IoYWRkcmVzcywgcm91dGluZ0NvbnRleHQsIGNvbm5lY3Rpb25Qb29sLCBkcml2ZXJPbkVycm9yQ2FsbGJhY2spIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3NlZWRSb3V0ZXIgPSBhZGRyZXNzO1xuICAgIHRoaXMuX3JvdXRpbmdUYWJsZSA9IG5ldyBSb3V0aW5nVGFibGUobmV3IFJvdW5kUm9iaW5BcnJheShbdGhpcy5fc2VlZFJvdXRlcl0pKTtcbiAgICB0aGlzLl9yZWRpc2NvdmVyeSA9IG5ldyBSZWRpc2NvdmVyeShuZXcgUm91dGluZ1V0aWwocm91dGluZ0NvbnRleHQpKTtcbiAgICB0aGlzLl9jb25uZWN0aW9uUG9vbCA9IGNvbm5lY3Rpb25Qb29sO1xuICAgIHRoaXMuX2RyaXZlck9uRXJyb3JDYWxsYmFjayA9IGRyaXZlck9uRXJyb3JDYWxsYmFjaztcbiAgICB0aGlzLl9ob3N0TmFtZVJlc29sdmVyID0gTG9hZEJhbGFuY2VyLl9jcmVhdGVIb3N0TmFtZVJlc29sdmVyKCk7XG4gICAgdGhpcy5fdXNlU2VlZFJvdXRlciA9IGZhbHNlO1xuICB9XG5cbiAgYWNxdWlyZUNvbm5lY3Rpb24oYWNjZXNzTW9kZSkge1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm9taXNlID0gdGhpcy5fZnJlc2hSb3V0aW5nVGFibGUoYWNjZXNzTW9kZSkudGhlbihyb3V0aW5nVGFibGUgPT4ge1xuICAgICAgaWYgKGFjY2Vzc01vZGUgPT09IFJFQUQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjcXVpcmVDb25uZWN0aW9uVG9TZXJ2ZXIocm91dGluZ1RhYmxlLnJlYWRlcnMsICdyZWFkJyk7XG4gICAgICB9IGVsc2UgaWYgKGFjY2Vzc01vZGUgPT09IFdSSVRFKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3F1aXJlQ29ubmVjdGlvblRvU2VydmVyKHJvdXRpbmdUYWJsZS53cml0ZXJzLCAnd3JpdGUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ld0Vycm9yKCdJbGxlZ2FsIG1vZGUgJyArIGFjY2Vzc01vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl93aXRoQWRkaXRpb25hbE9uRXJyb3JDYWxsYmFjayhjb25uZWN0aW9uUHJvbWlzZSwgdGhpcy5fZHJpdmVyT25FcnJvckNhbGxiYWNrKTtcbiAgfVxuXG4gIGZvcmdldChhZGRyZXNzKSB7XG4gICAgdGhpcy5fcm91dGluZ1RhYmxlLmZvcmdldChhZGRyZXNzKTtcbiAgICB0aGlzLl9jb25uZWN0aW9uUG9vbC5wdXJnZShhZGRyZXNzKTtcbiAgfVxuXG4gIGZvcmdldFdyaXRlcihhZGRyZXNzKSB7XG4gICAgdGhpcy5fcm91dGluZ1RhYmxlLmZvcmdldFdyaXRlcihhZGRyZXNzKTtcbiAgfVxuXG4gIF9hY3F1aXJlQ29ubmVjdGlvblRvU2VydmVyKHNlcnZlcnNSb3VuZFJvYmluQXJyYXksIHNlcnZlck5hbWUpIHtcbiAgICBjb25zdCBhZGRyZXNzID0gc2VydmVyc1JvdW5kUm9iaW5BcnJheS5uZXh0KCk7XG4gICAgaWYgKCFhZGRyZXNzKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3RXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gb2J0YWluIGNvbm5lY3Rpb24gdG93YXJkcyAke3NlcnZlck5hbWV9IHNlcnZlci4gS25vd24gcm91dGluZyB0YWJsZSBpczogJHt0aGlzLl9yb3V0aW5nVGFibGV9YCxcbiAgICAgICAgU0VTU0lPTl9FWFBJUkVEKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uUG9vbC5hY3F1aXJlKGFkZHJlc3MpO1xuICB9XG5cbiAgX2ZyZXNoUm91dGluZ1RhYmxlKGFjY2Vzc01vZGUpIHtcbiAgICBjb25zdCBjdXJyZW50Um91dGluZ1RhYmxlID0gdGhpcy5fcm91dGluZ1RhYmxlO1xuXG4gICAgaWYgKCFjdXJyZW50Um91dGluZ1RhYmxlLmlzU3RhbGVGb3IoYWNjZXNzTW9kZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3VycmVudFJvdXRpbmdUYWJsZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZWZyZXNoUm91dGluZ1RhYmxlKGN1cnJlbnRSb3V0aW5nVGFibGUpO1xuICB9XG5cbiAgX3JlZnJlc2hSb3V0aW5nVGFibGUoY3VycmVudFJvdXRpbmdUYWJsZSkge1xuICAgIGNvbnN0IGtub3duUm91dGVycyA9IGN1cnJlbnRSb3V0aW5nVGFibGUucm91dGVycy50b0FycmF5KCk7XG5cbiAgICBpZiAodGhpcy5fdXNlU2VlZFJvdXRlcikge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoUm91dGluZ1RhYmxlRnJvbVNlZWRSb3V0ZXJGYWxsYmFja1RvS25vd25Sb3V0ZXJzKGtub3duUm91dGVycywgY3VycmVudFJvdXRpbmdUYWJsZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9mZXRjaFJvdXRpbmdUYWJsZUZyb21Lbm93blJvdXRlcnNGYWxsYmFja1RvU2VlZFJvdXRlcihrbm93blJvdXRlcnMsIGN1cnJlbnRSb3V0aW5nVGFibGUpO1xuICB9XG5cbiAgX2ZldGNoUm91dGluZ1RhYmxlRnJvbVNlZWRSb3V0ZXJGYWxsYmFja1RvS25vd25Sb3V0ZXJzKGtub3duUm91dGVycywgY3VycmVudFJvdXRpbmdUYWJsZSkge1xuICAgIC8vIHdlIHN0YXJ0IHdpdGggc2VlZCByb3V0ZXIsIG5vIHJvdXRlcnMgd2VyZSBwcm9iZWQgYmVmb3JlXG4gICAgY29uc3Qgc2VlblJvdXRlcnMgPSBbXTtcbiAgICByZXR1cm4gdGhpcy5fZmV0Y2hSb3V0aW5nVGFibGVVc2luZ1NlZWRSb3V0ZXIoc2VlblJvdXRlcnMsIHRoaXMuX3NlZWRSb3V0ZXIpLnRoZW4obmV3Um91dGluZ1RhYmxlID0+IHtcbiAgICAgIGlmIChuZXdSb3V0aW5nVGFibGUpIHtcbiAgICAgICAgdGhpcy5fdXNlU2VlZFJvdXRlciA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gbmV3Um91dGluZ1RhYmxlO1xuICAgICAgfVxuXG4gICAgICAvLyBzZWVkIHJvdXRlciBkaWQgbm90IHJldHVybiBhIHZhbGlkIHJvdXRpbmcgdGFibGUgLSB0cnkgdG8gdXNlIG90aGVyIGtub3duIHJvdXRlcnNcbiAgICAgIHJldHVybiB0aGlzLl9mZXRjaFJvdXRpbmdUYWJsZVVzaW5nS25vd25Sb3V0ZXJzKGtub3duUm91dGVycywgY3VycmVudFJvdXRpbmdUYWJsZSk7XG4gICAgfSkudGhlbihuZXdSb3V0aW5nVGFibGUgPT4ge1xuICAgICAgdGhpcy5fYXBwbHlSb3V0aW5nVGFibGVJZlBvc3NpYmxlKG5ld1JvdXRpbmdUYWJsZSk7XG4gICAgICByZXR1cm4gbmV3Um91dGluZ1RhYmxlO1xuICAgIH0pO1xuICB9XG5cbiAgX2ZldGNoUm91dGluZ1RhYmxlRnJvbUtub3duUm91dGVyc0ZhbGxiYWNrVG9TZWVkUm91dGVyKGtub3duUm91dGVycywgY3VycmVudFJvdXRpbmdUYWJsZSkge1xuICAgIHJldHVybiB0aGlzLl9mZXRjaFJvdXRpbmdUYWJsZVVzaW5nS25vd25Sb3V0ZXJzKGtub3duUm91dGVycywgY3VycmVudFJvdXRpbmdUYWJsZSkudGhlbihuZXdSb3V0aW5nVGFibGUgPT4ge1xuICAgICAgaWYgKG5ld1JvdXRpbmdUYWJsZSkge1xuICAgICAgICByZXR1cm4gbmV3Um91dGluZ1RhYmxlO1xuICAgICAgfVxuXG4gICAgICAvLyBub25lIG9mIHRoZSBrbm93biByb3V0ZXJzIHJldHVybmVkIGEgdmFsaWQgcm91dGluZyB0YWJsZSAtIHRyeSB0byB1c2Ugc2VlZCByb3V0ZXIgYWRkcmVzcyBmb3IgcmVkaXNjb3ZlcnlcbiAgICAgIHJldHVybiB0aGlzLl9mZXRjaFJvdXRpbmdUYWJsZVVzaW5nU2VlZFJvdXRlcihrbm93blJvdXRlcnMsIHRoaXMuX3NlZWRSb3V0ZXIpO1xuICAgIH0pLnRoZW4obmV3Um91dGluZ1RhYmxlID0+IHtcbiAgICAgIHRoaXMuX2FwcGx5Um91dGluZ1RhYmxlSWZQb3NzaWJsZShuZXdSb3V0aW5nVGFibGUpO1xuICAgICAgcmV0dXJuIG5ld1JvdXRpbmdUYWJsZTtcbiAgICB9KTtcbiAgfVxuXG4gIF9mZXRjaFJvdXRpbmdUYWJsZVVzaW5nS25vd25Sb3V0ZXJzKGtub3duUm91dGVycywgY3VycmVudFJvdXRpbmdUYWJsZSkge1xuICAgIHJldHVybiB0aGlzLl9mZXRjaFJvdXRpbmdUYWJsZShrbm93blJvdXRlcnMsIGN1cnJlbnRSb3V0aW5nVGFibGUpLnRoZW4obmV3Um91dGluZ1RhYmxlID0+IHtcbiAgICAgIGlmIChuZXdSb3V0aW5nVGFibGUpIHtcbiAgICAgICAgLy8gb25lIG9mIHRoZSBrbm93biByb3V0ZXJzIHJldHVybmVkIGEgdmFsaWQgcm91dGluZyB0YWJsZSAtIHVzZSBpdFxuICAgICAgICByZXR1cm4gbmV3Um91dGluZ1RhYmxlO1xuICAgICAgfVxuXG4gICAgICAvLyByZXR1cm5lZCByb3V0aW5nIHRhYmxlIHdhcyB1bmRlZmluZWQsIHRoaXMgbWVhbnMgYSBjb25uZWN0aW9uIGVycm9yIGhhcHBlbmVkIGFuZCB0aGUgbGFzdCBrbm93blxuICAgICAgLy8gcm91dGVyIGRpZCBub3QgcmV0dXJuIGEgdmFsaWQgcm91dGluZyB0YWJsZSwgc28gd2UgbmVlZCB0byBmb3JnZXQgaXRcbiAgICAgIGNvbnN0IGxhc3RSb3V0ZXJJbmRleCA9IGtub3duUm91dGVycy5sZW5ndGggLSAxO1xuICAgICAgTG9hZEJhbGFuY2VyLl9mb3JnZXRSb3V0ZXIoY3VycmVudFJvdXRpbmdUYWJsZSwga25vd25Sb3V0ZXJzLCBsYXN0Um91dGVySW5kZXgpO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgfVxuXG4gIF9mZXRjaFJvdXRpbmdUYWJsZVVzaW5nU2VlZFJvdXRlcihzZWVuUm91dGVycywgc2VlZFJvdXRlcikge1xuICAgIHJldHVybiB0aGlzLl9ob3N0TmFtZVJlc29sdmVyLnJlc29sdmUoc2VlZFJvdXRlcikudGhlbihyZXNvbHZlZFJvdXRlckFkZHJlc3NlcyA9PiB7XG4gICAgICAvLyBmaWx0ZXIgb3V0IGFsbCBhZGRyZXNzZXMgdGhhdCB3ZSd2ZSBhbHJlYWR5IHRyaWVkXG4gICAgICBjb25zdCBuZXdBZGRyZXNzZXMgPSByZXNvbHZlZFJvdXRlckFkZHJlc3Nlcy5maWx0ZXIoYWRkcmVzcyA9PiBzZWVuUm91dGVycy5pbmRleE9mKGFkZHJlc3MpIDwgMCk7XG4gICAgICByZXR1cm4gdGhpcy5fZmV0Y2hSb3V0aW5nVGFibGUobmV3QWRkcmVzc2VzLCBudWxsKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9mZXRjaFJvdXRpbmdUYWJsZShyb3V0ZXJBZGRyZXNzZXMsIHJvdXRpbmdUYWJsZSkge1xuICAgIHJldHVybiByb3V0ZXJBZGRyZXNzZXMucmVkdWNlKChyZWZyZXNoZWRUYWJsZVByb21pc2UsIGN1cnJlbnRSb3V0ZXIsIGN1cnJlbnRJbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHJlZnJlc2hlZFRhYmxlUHJvbWlzZS50aGVuKG5ld1JvdXRpbmdUYWJsZSA9PiB7XG4gICAgICAgIGlmIChuZXdSb3V0aW5nVGFibGUpIHtcbiAgICAgICAgICAvLyB2YWxpZCByb3V0aW5nIHRhYmxlIHdhcyBmZXRjaGVkIC0ganVzdCByZXR1cm4gaXQsIHRyeSBuZXh0IHJvdXRlciBvdGhlcndpc2VcbiAgICAgICAgICByZXR1cm4gbmV3Um91dGluZ1RhYmxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHJldHVybmVkIHJvdXRpbmcgdGFibGUgd2FzIHVuZGVmaW5lZCwgdGhpcyBtZWFucyBhIGNvbm5lY3Rpb24gZXJyb3IgaGFwcGVuZWQgYW5kIHdlIG5lZWQgdG8gZm9yZ2V0IHRoZVxuICAgICAgICAgIC8vIHByZXZpb3VzIHJvdXRlciBhbmQgdHJ5IHRoZSBuZXh0IG9uZVxuICAgICAgICAgIGNvbnN0IHByZXZpb3VzUm91dGVySW5kZXggPSBjdXJyZW50SW5kZXggLSAxO1xuICAgICAgICAgIExvYWRCYWxhbmNlci5fZm9yZ2V0Um91dGVyKHJvdXRpbmdUYWJsZSwgcm91dGVyQWRkcmVzc2VzLCBwcmV2aW91c1JvdXRlckluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRyeSBuZXh0IHJvdXRlclxuICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5fY3JlYXRlU2Vzc2lvbkZvclJlZGlzY292ZXJ5KGN1cnJlbnRSb3V0ZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVkaXNjb3ZlcnkubG9va3VwUm91dGluZ1RhYmxlT25Sb3V0ZXIoc2Vzc2lvbiwgY3VycmVudFJvdXRlcik7XG4gICAgICB9KTtcbiAgICB9LCBQcm9taXNlLnJlc29sdmUobnVsbCkpO1xuICB9XG5cbiAgX2NyZWF0ZVNlc3Npb25Gb3JSZWRpc2NvdmVyeShyb3V0ZXJBZGRyZXNzKSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuX2Nvbm5lY3Rpb25Qb29sLmFjcXVpcmUocm91dGVyQWRkcmVzcyk7XG4gICAgLy8gaW5pdGlhbGl6ZWQgY29ubmVjdGlvbiBpcyByZXF1aXJlZCBmb3Igcm91dGluZyBwcm9jZWR1cmUgY2FsbFxuICAgIC8vIHNlcnZlciB2ZXJzaW9uIG5lZWRzIHRvIGJlIGtub3duIHRvIGRlY2lkZSB3aGljaCByb3V0aW5nIHByb2NlZHVyZSB0byB1c2VcbiAgICBjb25zdCBpbml0aWFsaXplZENvbm5lY3Rpb25Qcm9taXNlID0gY29ubmVjdGlvbi5pbml0aWFsaXphdGlvbkNvbXBsZXRlZCgpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm92aWRlciA9IG5ldyBTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIoaW5pdGlhbGl6ZWRDb25uZWN0aW9uUHJvbWlzZSk7XG4gICAgcmV0dXJuIG5ldyBTZXNzaW9uKFJFQUQsIGNvbm5lY3Rpb25Qcm92aWRlcik7XG4gIH1cblxuICBfYXBwbHlSb3V0aW5nVGFibGVJZlBvc3NpYmxlKG5ld1JvdXRpbmdUYWJsZSkge1xuICAgIGlmICghbmV3Um91dGluZ1RhYmxlKSB7XG4gICAgICAvLyBub25lIG9mIHJvdXRpbmcgc2VydmVycyByZXR1cm5lZCB2YWxpZCByb3V0aW5nIHRhYmxlLCB0aHJvdyBleGNlcHRpb25cbiAgICAgIHRocm93IG5ld0Vycm9yKFxuICAgICAgICBgQ291bGQgbm90IHBlcmZvcm0gZGlzY292ZXJ5LiBObyByb3V0aW5nIHNlcnZlcnMgYXZhaWxhYmxlLiBLbm93biByb3V0aW5nIHRhYmxlOiAke3RoaXMuX3JvdXRpbmdUYWJsZX1gLFxuICAgICAgICBTRVJWSUNFX1VOQVZBSUxBQkxFKTtcbiAgICB9XG5cbiAgICBpZiAobmV3Um91dGluZ1RhYmxlLndyaXRlcnMuaXNFbXB0eSgpKSB7XG4gICAgICAvLyB1c2Ugc2VlZCByb3V0ZXIgbmV4dCB0aW1lLiB0aGlzIGlzIGltcG9ydGFudCB3aGVuIGNsdXN0ZXIgaXMgcGFydGl0aW9uZWQuIGl0IHRyaWVzIHRvIG1ha2Ugc3VyZSBkcml2ZXJcbiAgICAgIC8vIGRvZXMgbm90IGFsd2F5cyBnZXQgcm91dGluZyB0YWJsZSB3aXRob3V0IHdyaXRlcnMgYmVjYXVzZSBpdCB0YWxrcyBleGNsdXNpdmVseSB0byBhIG1pbm9yaXR5IHBhcnRpdGlvblxuICAgICAgdGhpcy5fdXNlU2VlZFJvdXRlciA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlUm91dGluZ1RhYmxlKG5ld1JvdXRpbmdUYWJsZSk7XG4gIH1cblxuICBfdXBkYXRlUm91dGluZ1RhYmxlKG5ld1JvdXRpbmdUYWJsZSkge1xuICAgIGNvbnN0IGN1cnJlbnRSb3V0aW5nVGFibGUgPSB0aGlzLl9yb3V0aW5nVGFibGU7XG5cbiAgICAvLyBjbG9zZSBvbGQgY29ubmVjdGlvbnMgdG8gc2VydmVycyBub3QgcHJlc2VudCBpbiB0aGUgbmV3IHJvdXRpbmcgdGFibGVcbiAgICBjb25zdCBzdGFsZVNlcnZlcnMgPSBjdXJyZW50Um91dGluZ1RhYmxlLnNlcnZlcnNEaWZmKG5ld1JvdXRpbmdUYWJsZSk7XG4gICAgc3RhbGVTZXJ2ZXJzLmZvckVhY2goc2VydmVyID0+IHRoaXMuX2Nvbm5lY3Rpb25Qb29sLnB1cmdlKHNlcnZlcikpO1xuXG4gICAgLy8gbWFrZSB0aGlzIGRyaXZlciBpbnN0YW5jZSBhd2FyZSBvZiB0aGUgbmV3IHRhYmxlXG4gICAgdGhpcy5fcm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlO1xuICB9XG5cbiAgc3RhdGljIF9mb3JnZXRSb3V0ZXIocm91dGluZ1RhYmxlLCByb3V0ZXJzQXJyYXksIHJvdXRlckluZGV4KSB7XG4gICAgY29uc3QgYWRkcmVzcyA9IHJvdXRlcnNBcnJheVtyb3V0ZXJJbmRleF07XG4gICAgaWYgKHJvdXRpbmdUYWJsZSAmJiBhZGRyZXNzKSB7XG4gICAgICByb3V0aW5nVGFibGUuZm9yZ2V0Um91dGVyKGFkZHJlc3MpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBfY3JlYXRlSG9zdE5hbWVSZXNvbHZlcigpIHtcbiAgICBpZiAoaGFzRmVhdHVyZSgnZG5zX2xvb2t1cCcpKSB7XG4gICAgICByZXR1cm4gbmV3IERuc0hvc3ROYW1lUmVzb2x2ZXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEdW1teUhvc3ROYW1lUmVzb2x2ZXIoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2luZ2xlQ29ubmVjdGlvblByb3ZpZGVyIGV4dGVuZHMgQ29ubmVjdGlvblByb3ZpZGVyIHtcblxuICBjb25zdHJ1Y3Rvcihjb25uZWN0aW9uUHJvbWlzZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY29ubmVjdGlvblByb21pc2UgPSBjb25uZWN0aW9uUHJvbWlzZTtcbiAgfVxuXG4gIGFjcXVpcmVDb25uZWN0aW9uKG1vZGUpIHtcbiAgICBjb25zdCBjb25uZWN0aW9uUHJvbWlzZSA9IHRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlO1xuICAgIHRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlID0gbnVsbDtcbiAgICByZXR1cm4gY29ubmVjdGlvblByb21pc2U7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgV2ViU29ja2V0Q2hhbm5lbCBmcm9tICcuL2NoLXdlYnNvY2tldCc7XG5pbXBvcnQgTm9kZUNoYW5uZWwgZnJvbSAnLi9jaC1ub2RlJztcbmltcG9ydCB7Q2h1bmtlciwgRGVjaHVua2VyfSBmcm9tICcuL2NodW5raW5nJztcbmltcG9ydCB7UGFja2VyLCBVbnBhY2tlcn0gZnJvbSAnLi9wYWNrc3RyZWFtJztcbmltcG9ydCB7YWxsb2N9IGZyb20gJy4vYnVmJztcbmltcG9ydCB7Tm9kZSwgUGF0aCwgUGF0aFNlZ21lbnQsIFJlbGF0aW9uc2hpcCwgVW5ib3VuZFJlbGF0aW9uc2hpcH0gZnJvbSAnLi4vZ3JhcGgtdHlwZXMnO1xuaW1wb3J0IHtuZXdFcnJvcn0gZnJvbSAnLi8uLi9lcnJvcic7XG5pbXBvcnQgQ2hhbm5lbENvbmZpZyBmcm9tICcuL2NoLWNvbmZpZyc7XG5pbXBvcnQge3BhcnNlSG9zdCwgcGFyc2VQb3J0fSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IFN0cmVhbU9ic2VydmVyIGZyb20gJy4vc3RyZWFtLW9ic2VydmVyJztcblxubGV0IENoYW5uZWw7XG5pZiggTm9kZUNoYW5uZWwuYXZhaWxhYmxlICkge1xuICBDaGFubmVsID0gTm9kZUNoYW5uZWwuY2hhbm5lbDtcbn1cbmVsc2UgaWYoIFdlYlNvY2tldENoYW5uZWwuYXZhaWxhYmxlICkge1xuICAgIENoYW5uZWwgPSBXZWJTb2NrZXRDaGFubmVsLmNoYW5uZWw7XG59XG5lbHNlIHtcbiAgICB0aHJvdyBuZXdFcnJvcihcIkZhdGFsOiBObyBjb21wYXRpYmxlIHRyYW5zcG9ydCBhdmFpbGFibGUuIE5lZWQgdG8gcnVuIG9uIGEgcGxhdGZvcm0gd2l0aCB0aGUgV2ViU29ja2V0IEFQSS5cIik7XG59XG5cblxubGV0XG4vLyBTaWduYXR1cmUgYnl0ZXMgZm9yIGVhY2ggbWVzc2FnZSB0eXBlXG5JTklUID0gMHgwMSwgICAgICAgICAgICAvLyAwMDAwIDAwMDEgLy8gSU5JVCA8dXNlcl9hZ2VudD5cbkFDS19GQUlMVVJFID0gMHgwRSwgICAgIC8vIDAwMDAgMTExMCAvLyBBQ0tfRkFJTFVSRVxuUkVTRVQgPSAweDBGLCAgICAgICAgICAgLy8gMDAwMCAxMTExIC8vIFJFU0VUXG5SVU4gPSAweDEwLCAgICAgICAgICAgICAvLyAwMDAxIDAwMDAgLy8gUlVOIDxzdGF0ZW1lbnQ+IDxwYXJhbWV0ZXJzPlxuRElTQ0FSRF9BTEwgPSAweDJGLCAgICAgLy8gMDAxMCAxMTExIC8vIERJU0NBUkQgKlxuUFVMTF9BTEwgPSAweDNGLCAgICAgICAgLy8gMDAxMSAxMTExIC8vIFBVTEwgKlxuU1VDQ0VTUyA9IDB4NzAsICAgICAgICAgLy8gMDExMSAwMDAwIC8vIFNVQ0NFU1MgPG1ldGFkYXRhPlxuUkVDT1JEID0gMHg3MSwgICAgICAgICAgLy8gMDExMSAwMDAxIC8vIFJFQ09SRCA8dmFsdWU+XG5JR05PUkVEID0gMHg3RSwgICAgICAgICAvLyAwMTExIDExMTAgLy8gSUdOT1JFRCA8bWV0YWRhdGE+XG5GQUlMVVJFID0gMHg3RiwgICAgICAgICAvLyAwMTExIDExMTEgLy8gRkFJTFVSRSA8bWV0YWRhdGE+XG5cbi8vIFNpZ25hdHVyZSBieXRlcyBmb3IgaGlnaGVyLWxldmVsIGdyYXBoIG9iamVjdHNcbk5PREUgPSAweDRFLFxuUkVMQVRJT05TSElQID0gMHg1MixcblVOQk9VTkRfUkVMQVRJT05TSElQID0gMHg3MixcblBBVEggPSAweDUwLFxuLy9zZW50IGJlZm9yZSB2ZXJzaW9uIG5lZ290aWF0aW9uXG5NQUdJQ19QUkVBTUJMRSA9IDB4NjA2MEIwMTcsXG5ERUJVRyA9IGZhbHNlO1xuXG4vKipcbiAqIFZlcnkgcnVkaW1lbnRhcnkgbG9nIGhhbmRsaW5nLCBzaG91bGQgcHJvYmFibHkgYmUgcmVwbGFjZWQgYnkgc29tZXRoaW5nIHByb3BlciBhdCBzb21lIHBvaW50LlxuICogQHBhcmFtIGFjdG9yIHRoZSBwYXJ0IHRoYXQgc2VudCB0aGUgbWVzc2FnZSwgJ1MnIGZvciBzZXJ2ZXIgYW5kICdDJyBmb3IgY2xpZW50XG4gKiBAcGFyYW0gbXNnIHRoZSBib2x0IG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gbG9nKGFjdG9yLCBtc2cpIHtcbiAgaWYgKERFQlVHKSB7XG4gICAgZm9yKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgbXNnICs9IFwiIFwiICsgSlNPTi5zdHJpbmdpZnkoYXJndW1lbnRzW2ldKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coYWN0b3IgKyBcIjpcIiArIG1zZyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gTk9fT1AoKXt9XG5cbmxldCBOT19PUF9PQlNFUlZFUiA9IHtcbiAgb25OZXh0IDogTk9fT1AsXG4gIG9uQ29tcGxldGVkIDogTk9fT1AsXG4gIG9uRXJyb3IgOiBOT19PUFxufTtcblxuLyoqIE1hcHMgZnJvbSBwYWNrc3RyZWFtIHN0cnVjdHVyZXMgdG8gTmVvNGogZG9tYWluIG9iamVjdHMgKi9cbmxldCBfbWFwcGVycyA9IHtcbiAgbm9kZSA6ICggdW5wYWNrZXIsIGJ1ZiApID0+IHtcbiAgICByZXR1cm4gbmV3IE5vZGUoXG4gICAgICB1bnBhY2tlci51bnBhY2soYnVmKSwgLy8gSWRlbnRpdHlcbiAgICAgIHVucGFja2VyLnVucGFjayhidWYpLCAvLyBMYWJlbHNcbiAgICAgIHVucGFja2VyLnVucGFjayhidWYpICAvLyBQcm9wZXJ0aWVzXG4gICAgKTtcbiAgfSxcbiAgcmVsIDogKCB1bnBhY2tlciwgYnVmICkgPT4ge1xuICAgIHJldHVybiBuZXcgUmVsYXRpb25zaGlwKFxuICAgICAgdW5wYWNrZXIudW5wYWNrKGJ1ZiksICAvLyBJZGVudGl0eVxuICAgICAgdW5wYWNrZXIudW5wYWNrKGJ1ZiksICAvLyBTdGFydCBOb2RlIElkZW50aXR5XG4gICAgICB1bnBhY2tlci51bnBhY2soYnVmKSwgIC8vIEVuZCBOb2RlIElkZW50aXR5XG4gICAgICB1bnBhY2tlci51bnBhY2soYnVmKSwgIC8vIFR5cGVcbiAgICAgIHVucGFja2VyLnVucGFjayhidWYpIC8vIFByb3BlcnRpZXNcbiAgICApO1xuICB9LFxuICB1bmJvdW5kUmVsIDogKCB1bnBhY2tlciwgYnVmICkgPT4ge1xuICAgIHJldHVybiBuZXcgVW5ib3VuZFJlbGF0aW9uc2hpcChcbiAgICAgIHVucGFja2VyLnVucGFjayhidWYpLCAgLy8gSWRlbnRpdHlcbiAgICAgIHVucGFja2VyLnVucGFjayhidWYpLCAgLy8gVHlwZVxuICAgICAgdW5wYWNrZXIudW5wYWNrKGJ1ZikgLy8gUHJvcGVydGllc1xuICAgICk7XG4gIH0sXG4gIHBhdGggOiAoIHVucGFja2VyLCBidWYgKSA9PiB7XG4gICAgbGV0IG5vZGVzID0gdW5wYWNrZXIudW5wYWNrKGJ1ZiksXG4gICAgICAgIHJlbHMgPSB1bnBhY2tlci51bnBhY2soYnVmKSxcbiAgICAgICAgc2VxdWVuY2UgPSB1bnBhY2tlci51bnBhY2soYnVmKTtcbiAgICBsZXQgcHJldk5vZGUgPSBub2Rlc1swXSxcbiAgICAgICAgc2VnbWVudHMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VxdWVuY2UubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgbGV0IHJlbEluZGV4ID0gc2VxdWVuY2VbaV0sXG4gICAgICAgICAgICBuZXh0Tm9kZSA9IG5vZGVzW3NlcXVlbmNlW2kgKyAxXV0sXG4gICAgICAgICAgICByZWw7XG4gICAgICAgIGlmIChyZWxJbmRleCA+IDApIHtcbiAgICAgICAgICAgIHJlbCA9IHJlbHNbcmVsSW5kZXggLSAxXTtcbiAgICAgICAgICAgIGlmKCByZWwgaW5zdGFuY2VvZiBVbmJvdW5kUmVsYXRpb25zaGlwICkge1xuICAgICAgICAgICAgICAvLyBUbyBhdm9pZCBkdXBsaWNhdGlvbiwgcmVsYXRpb25zaGlwcyBpbiBhIHBhdGggZG8gbm90IGNvbnRhaW5cbiAgICAgICAgICAgICAgLy8gaW5mb3JtYXRpb24gYWJvdXQgdGhlaXIgc3RhcnQgYW5kIGVuZCBub2RlcywgdGhhdCdzIGluc3RlYWRcbiAgICAgICAgICAgICAgLy8gaW5mZXJyZWQgZnJvbSB0aGUgcGF0aCBzZXF1ZW5jZS4gVGhpcyBpcyB1cyBpbmZlcnJpbmcgKGFuZCxcbiAgICAgICAgICAgICAgLy8gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgcmVtZW1iZXJpbmcpIHRoZSBzdGFydC9lbmQgb2YgYSByZWwuXG4gICAgICAgICAgICAgIHJlbHNbcmVsSW5kZXggLSAxXSA9IHJlbCA9IHJlbC5iaW5kKHByZXZOb2RlLmlkZW50aXR5LCBuZXh0Tm9kZS5pZGVudGl0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWwgPSByZWxzWy1yZWxJbmRleCAtIDFdO1xuICAgICAgICAgICAgaWYoIHJlbCBpbnN0YW5jZW9mIFVuYm91bmRSZWxhdGlvbnNoaXAgKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBhYm92ZVxuICAgICAgICAgICAgICByZWxzWy1yZWxJbmRleCAtIDFdID0gcmVsID0gcmVsLmJpbmQobmV4dE5vZGUuaWRlbnRpdHksIHByZXZOb2RlLmlkZW50aXR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBEb25lIGh5ZHJhdGluZyBvbmUgcGF0aCBzZWdtZW50LlxuICAgICAgICBzZWdtZW50cy5wdXNoKCBuZXcgUGF0aFNlZ21lbnQoIHByZXZOb2RlLCByZWwsIG5leHROb2RlICkgKTtcbiAgICAgICAgcHJldk5vZGUgPSBuZXh0Tm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQYXRoKG5vZGVzWzBdLCBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXSwgIHNlZ21lbnRzICk7XG4gIH1cbn07XG5cbi8qKlxuICogQSBjb25uZWN0aW9uIG1hbmFnZXMgc2VuZGluZyBhbmQgcmVjaWV2aW5nIG1lc3NhZ2VzIG92ZXIgYSBjaGFubmVsLiBBXG4gKiBjb25uZWN0b3IgaXMgdmVyeSBjbG9zZWx5IHRpZWQgdG8gdGhlIEJvbHQgcHJvdG9jb2wsIGl0IGltcGxlbWVudHMgdGhlXG4gKiBzYW1lIG1lc3NhZ2Ugc3RydWN0dXJlIHdpdGggdmVyeSBsaXR0bGUgZnJpbGxzLiBUaGlzIG1lYW5zIENvbm5lY3RvcnMgYXJlXG4gKiBuYXR1cmFsbHkgdGllZCB0byBhIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlIHByb3RvY29sLCBhbmQgd2UgZXhwZWN0XG4gKiBhbm90aGVyIGxheWVyIHdpbGwgYmUgbmVlZGVkIHRvIHN1cHBvcnQgbXVsdGlwbGUgdmVyc2lvbnMuXG4gKlxuICogVGhlIGNvbm5lY3RvciB0cmllcyB0byBiYXRjaCBvdXRib3VuZCBtZXNzYWdlcyBieSByZXF1aXJpbmcgaXRzIHVzZXJzXG4gKiB0byBjYWxsICdzeW5jJyB3aGVuIG1lc3NhZ2VzIG5lZWQgdG8gYmUgc2VudCwgYW5kIGl0IHJvdXRlcyByZXNwb25zZVxuICogbWVzc2FnZXMgYmFjayB0byB0aGUgb3JpZ2luYXRvcnMgb2YgdGhlIHJlcXVlc3RzIHRoYXQgY3JlYXRlZCB0aG9zZVxuICogcmVzcG9uc2UgbWVzc2FnZXMuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqL1xuY2xhc3MgQ29ubmVjdGlvbiB7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0gY2hhbm5lbCAtIGNoYW5uZWwgd2l0aCBhICd3cml0ZScgZnVuY3Rpb24gYW5kIGEgJ29ubWVzc2FnZSdcbiAgICogICAgICAgICAgICAgICAgICBjYWxsYmFjayBwcm9wZXJ0eVxuICAgKiBAcGFyYW0gdXJsIC0gdXJsIHRvIGNvbm5lY3QgdG9cbiAgICovXG4gIGNvbnN0cnVjdG9yIChjaGFubmVsLCB1cmwpIHtcbiAgICAvKipcbiAgICAgKiBBbiBvcmRlcmVkIHF1ZXVlIG9mIG9ic2VydmVycywgZWFjaCBleGNoYW5nZSByZXNwb25zZSAoemVybyBvciBtb3JlXG4gICAgICogUkVDT1JEIG1lc3NhZ2VzIGZvbGxvd2VkIGJ5IGEgU1VDQ0VTUyBtZXNzYWdlKSB3ZSByZWNpZXZlIHdpbGwgYmUgcm91dGVkXG4gICAgICogdG8gdGhlIG5leHQgcGVuZGluZyBvYnNlcnZlci5cbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLnNlcnZlciA9IHthZGRyZXNzOiB1cmx9O1xuICAgIHRoaXMuX3BlbmRpbmdPYnNlcnZlcnMgPSBbXTtcbiAgICB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fY2ggPSBjaGFubmVsO1xuICAgIHRoaXMuX2RlY2h1bmtlciA9IG5ldyBEZWNodW5rZXIoKTtcbiAgICB0aGlzLl9jaHVua2VyID0gbmV3IENodW5rZXIoIGNoYW5uZWwgKTtcbiAgICB0aGlzLl9wYWNrZXIgPSBuZXcgUGFja2VyKCB0aGlzLl9jaHVua2VyICk7XG4gICAgdGhpcy5fdW5wYWNrZXIgPSBuZXcgVW5wYWNrZXIoKTtcblxuICAgIHRoaXMuX2lzSGFuZGxpbmdGYWlsdXJlID0gZmFsc2U7XG4gICAgdGhpcy5fY3VycmVudEZhaWx1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5fc3RhdGUgPSBuZXcgQ29ubmVjdGlvblN0YXRlKHRoaXMpO1xuXG4gICAgLy8gU2V0IHRvIHRydWUgb24gZmF0YWwgZXJyb3JzLCB0byBnZXQgdGhpcyBvdXQgb2Ygc2Vzc2lvbiBwb29sLlxuICAgIHRoaXMuX2lzQnJva2VuID0gZmFsc2U7XG5cbiAgICAvLyBGb3IgZGVzZXJpYWxpemF0aW9uLCBleHBsYWluIHRvIHRoZSB1bnBhY2tlciBob3cgdG8gdW5wYWNrIG5vZGVzLCByZWxzLCBwYXRocztcbiAgICB0aGlzLl91bnBhY2tlci5zdHJ1Y3RNYXBwZXJzW05PREVdID0gX21hcHBlcnMubm9kZTtcbiAgICB0aGlzLl91bnBhY2tlci5zdHJ1Y3RNYXBwZXJzW1JFTEFUSU9OU0hJUF0gPSBfbWFwcGVycy5yZWw7XG4gICAgdGhpcy5fdW5wYWNrZXIuc3RydWN0TWFwcGVyc1tVTkJPVU5EX1JFTEFUSU9OU0hJUF0gPSBfbWFwcGVycy51bmJvdW5kUmVsO1xuICAgIHRoaXMuX3VucGFja2VyLnN0cnVjdE1hcHBlcnNbUEFUSF0gPSBfbWFwcGVycy5wYXRoO1xuXG4gICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgIC8vIFRPRE86IFVzaW5nIGBvbm1lc3NhZ2VgIGFuZCBgb25lcnJvcmAgY2FtZSBmcm9tIHRoZSBXZWJTb2NrZXQgQVBJLFxuICAgIC8vIGl0IHJlYWRzIHBvb3JseSBhbmQgaGFzIHNldmVyYWwgYW5ub3lpbmcgZHJhd2JhY2tzLiBTd2FwIHRvIGhhdmluZ1xuICAgIC8vIENoYW5uZWwgZXh0ZW5kIEV2ZW50RW1pdHRlciBpbnN0ZWFkLCB0aGVuIHdlIGNhbiB1c2UgYG9uKCdkYXRhJywuLilgXG4gICAgdGhpcy5fY2gub25tZXNzYWdlID0gKGJ1ZikgPT4ge1xuICAgICAgbGV0IHByb3Bvc2VkID0gYnVmLnJlYWRJbnQzMigpO1xuICAgICAgaWYoIHByb3Bvc2VkID09IDEgKSB7XG4gICAgICAgIC8vIE9rLCBwcm90b2NvbCBydW5uaW5nLiBTaW1wbHkgZm9yd2FyZCBhbGwgbWVzc2FnZXMgcGFzdFxuICAgICAgICAvLyB0aGlzIHRvIHRoZSBkZWNodW5rZXJcbiAgICAgICAgc2VsZi5fY2gub25tZXNzYWdlID0gKGJ1ZikgPT4ge1xuICAgICAgICAgIHNlbGYuX2RlY2h1bmtlci53cml0ZShidWYpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmKCBidWYuaGFzUmVtYWluaW5nKCkgKSB7XG4gICAgICAgICAgc2VsZi5fZGVjaHVua2VyLndyaXRlKGJ1Zi5yZWFkU2xpY2UoIGJ1Zi5yZW1haW5pbmcoKSApKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwcm9wb3NlZCA9PSAxMjEzNDg2MTYwKSB7Ly9zZXJ2ZXIgcmVzcG9uZGVkIDEyMTM0ODYxNjAgPT0gMHg0ODU0NTQ1MCA9PSBcIkhUVFBcIlxuICAgICAgICBzZWxmLl9oYW5kbGVGYXRhbEVycm9yKG5ld0Vycm9yKFwiU2VydmVyIHJlc3BvbmRlZCBIVFRQLiBNYWtlIHN1cmUgeW91IGFyZSBub3QgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gdGhlIGh0dHAgZW5kcG9pbnQgXCIgK1xuICAgICAgICAgIFwiKEhUVFAgZGVmYXVsdHMgdG8gcG9ydCA3NDc0IHdoZXJlYXMgQk9MVCBkZWZhdWx0cyB0byBwb3J0IDc2ODcpXCIpKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBzZWxmLl9oYW5kbGVGYXRhbEVycm9yKG5ld0Vycm9yKFwiVW5rbm93biBCb2x0IHByb3RvY29sIHZlcnNpb246IFwiICsgcHJvcG9zZWQpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gTGlzdGVuIHRvIGNvbm5lY3Rpb24gZXJyb3JzLiBJbXBvcnRhbnQgbm90ZSB0aG91Z2g7XG4gICAgLy8gSW4gc29tZSBjYXNlcyB3ZSB3aWxsIGdldCBhIGNoYW5uZWwgdGhhdCBpcyBhbHJlYWR5IGJyb2tlbiAoZm9yIGluc3RhbmNlLFxuICAgIC8vIGlmIHRoZSB1c2VyIHBhc3NlcyBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucykuIEluIHRoaXMgY2FzZSwgb25lcnJvclxuICAgIC8vIHdpbGwgaGF2ZSBcImFscmVhZHkgdHJpZ2dlcmVkXCIgYmVmb3JlIHdlIGFkZCBvdXQgbGlzdGVuZXIgaGVyZS4gU28gdGhlIGxpbmVcbiAgICAvLyBiZWxvdyBhbHNvIGNoZWNrcyB0aGF0IHRoZSBjaGFubmVsIGlzIG5vdCBhbHJlYWR5IGZhaWxlZC4gVGhpcyBjb3VsZCBiZSBuaWNlbHlcbiAgICAvLyBlbmNhcHN1bGF0ZWQgaW50byBDaGFubmVsIGlmIHdlIHVzZWQgYG9uKCdlcnJvcicsIC4uKWAgcmF0aGVyIHRoYW4gYG9uZXJyb3I9Li5gXG4gICAgLy8gYXMgb3V0bGluZWQgaW4gdGhlIGNvbW1lbnQgYWJvdXQgYG9ubWVzc2FnZWAgZnVydGhlciB1cCBpbiB0aGlzIGZpbGUuXG4gICAgdGhpcy5fY2gub25lcnJvciA9IHRoaXMuX2hhbmRsZUZhdGFsRXJyb3IuYmluZCh0aGlzKTtcbiAgICBpZiggdGhpcy5fY2guX2Vycm9yICkge1xuICAgICAgdGhpcy5faGFuZGxlRmF0YWxFcnJvcih0aGlzLl9jaC5fZXJyb3IpO1xuICAgIH1cblxuICAgIHRoaXMuX2RlY2h1bmtlci5vbm1lc3NhZ2UgPSAoYnVmKSA9PiB7XG4gICAgICBzZWxmLl9oYW5kbGVNZXNzYWdlKCBzZWxmLl91bnBhY2tlci51bnBhY2soIGJ1ZiApICk7XG4gICAgfTtcblxuICAgIGxldCBoYW5kc2hha2UgPSBhbGxvYyggNSAqIDQgKTtcbiAgICAvL21hZ2ljIHByZWFtYmxlXG4gICAgaGFuZHNoYWtlLndyaXRlSW50MzIoIE1BR0lDX1BSRUFNQkxFICk7XG4gICAgLy9wcm9wb3NlZCB2ZXJzaW9uc1xuICAgIGhhbmRzaGFrZS53cml0ZUludDMyKCAxICk7XG4gICAgaGFuZHNoYWtlLndyaXRlSW50MzIoIDAgKTtcbiAgICBoYW5kc2hha2Uud3JpdGVJbnQzMiggMCApO1xuICAgIGhhbmRzaGFrZS53cml0ZUludDMyKCAwICk7XG4gICAgaGFuZHNoYWtlLnJlc2V0KCk7XG4gICAgdGhpcy5fY2gud3JpdGUoIGhhbmRzaGFrZSApO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiRmF0YWxcIiBtZWFucyB0aGUgY29ubmVjdGlvbiBpcyBkZWFkLiBPbmx5IGNhbGwgdGhpcyBpZiBzb21ldGhpbmdcbiAgICogaGFwcGVucyB0aGF0IGNhbm5vdCBiZSByZWNvdmVyZWQgZnJvbS4gVGhpcyB3aWxsIGxlYWQgdG8gYWxsIHN1YnNjcmliZXJzXG4gICAqIGZhaWxpbmcsIGFuZCB0aGUgY29ubmVjdGlvbiBnZXR0aW5nIGVqZWN0ZWQgZnJvbSB0aGUgc2Vzc2lvbiBwb29sLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyIGFuIGVycm9yIG9iamVjdCwgZm9yd2FyZGVkIHRvIGFsbCBjdXJyZW50IGFuZCBmdXR1cmUgc3Vic2NyaWJlcnNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVGYXRhbEVycm9yKCBlcnIgKSB7XG4gICAgdGhpcy5faXNCcm9rZW4gPSB0cnVlO1xuICAgIHRoaXMuX2Vycm9yID0gZXJyO1xuICAgIGlmKCB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIgJiYgdGhpcy5fY3VycmVudE9ic2VydmVyLm9uRXJyb3IgKSB7XG4gICAgICB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIub25FcnJvcihlcnIpO1xuICAgIH1cbiAgICB3aGlsZSggdGhpcy5fcGVuZGluZ09ic2VydmVycy5sZW5ndGggPiAwICkge1xuICAgICAgbGV0IG9ic2VydmVyID0gdGhpcy5fcGVuZGluZ09ic2VydmVycy5zaGlmdCgpO1xuICAgICAgaWYoIG9ic2VydmVyICYmIG9ic2VydmVyLm9uRXJyb3IgKSB7XG4gICAgICAgIG9ic2VydmVyLm9uRXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfaGFuZGxlTWVzc2FnZSggbXNnICkge1xuICAgIGNvbnN0IHBheWxvYWQgPSBtc2cuZmllbGRzWzBdO1xuXG4gICAgc3dpdGNoKCBtc2cuc2lnbmF0dXJlICkge1xuICAgICAgY2FzZSBSRUNPUkQ6XG4gICAgICAgIGxvZyhcIlNcIiwgXCJSRUNPUkRcIiwgbXNnKTtcbiAgICAgICAgdGhpcy5fY3VycmVudE9ic2VydmVyLm9uTmV4dCggcGF5bG9hZCApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU1VDQ0VTUzpcbiAgICAgICAgbG9nKFwiU1wiLCBcIlNVQ0NFU1NcIiwgbXNnKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIub25Db21wbGV0ZWQoIHBheWxvYWQgKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIgPSB0aGlzLl9wZW5kaW5nT2JzZXJ2ZXJzLnNoaWZ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEZBSUxVUkU6XG4gICAgICAgIGxvZyhcIlNcIiwgXCJGQUlMVVJFXCIsIG1zZyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5fY3VycmVudEZhaWx1cmUgPSBuZXdFcnJvcihwYXlsb2FkLm1lc3NhZ2UsIHBheWxvYWQuY29kZSk7XG4gICAgICAgICAgdGhpcy5fY3VycmVudE9ic2VydmVyLm9uRXJyb3IoIHRoaXMuX2N1cnJlbnRGYWlsdXJlICk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5fY3VycmVudE9ic2VydmVyID0gdGhpcy5fcGVuZGluZ09ic2VydmVycy5zaGlmdCgpO1xuICAgICAgICAgIC8vIFRoaW5ncyBhcmUgbm93IGJyb2tlbi4gUGVuZGluZyBvYnNlcnZlcnMgd2lsbCBnZXQgRkFJTFVSRSBtZXNzYWdlcyByb3V0ZWQgdW50aWxcbiAgICAgICAgICAvLyBXZSBhcmUgZG9uZSBoYW5kbGluZyB0aGlzIGZhaWx1cmUuXG4gICAgICAgICAgaWYoICF0aGlzLl9pc0hhbmRsaW5nRmFpbHVyZSApIHtcbiAgICAgICAgICAgIHRoaXMuX2lzSGFuZGxpbmdGYWlsdXJlID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gaXNIYW5kbGluZ0ZhaWx1cmUgd2FzIGZhbHNlLCBtZWFuaW5nIHRoaXMgaXMgdGhlIGZpcnN0IGZhaWx1cmUgbWVzc2FnZVxuICAgICAgICAgICAgLy8gd2Ugc2VlIGZyb20gdGhpcyBmYWlsdXJlLiBXZSBtYXkgc2VlIHNldmVyYWwgb3RoZXJzLCBvbmUgZm9yIGVhY2ggbWVzc2FnZVxuICAgICAgICAgICAgLy8gd2UgaGFkIFwib3B0aW1pc3RpY2FsbHlcIiBhbHJlYWR5IHNlbnQgYWZ0ZXIgd2hhdGV2ZXIgaXQgd2FzIHRoYXQgZmFpbGVkLlxuICAgICAgICAgICAgLy8gV2Ugb25seSB3YW50IHRvIGFuZCBuZWVkIHRvIEFDSyB0aGUgZmlyc3Qgb25lLCB3aGljaCBpcyB3aHkgd2UgYXJlIHRyYWNraW5nXG4gICAgICAgICAgICAvLyB0aGlzIF9pc0hhbmRsaW5nRmFpbHVyZSB0aGluZy5cbiAgICAgICAgICAgIHRoaXMuX2Fja0ZhaWx1cmUoe1xuICAgICAgICAgICAgICBvbk5leHQ6IE5PX09QLFxuICAgICAgICAgICAgICBvbkVycm9yOiBOT19PUCxcbiAgICAgICAgICAgICAgb25Db21wbGV0ZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0hhbmRsaW5nRmFpbHVyZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRGYWlsdXJlID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJR05PUkVEOlxuICAgICAgICBsb2coXCJTXCIsIFwiSUdOT1JFRFwiLCBtc2cpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50RmFpbHVyZSAmJiB0aGlzLl9jdXJyZW50T2JzZXJ2ZXIub25FcnJvcilcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRPYnNlcnZlci5vbkVycm9yKHRoaXMuX2N1cnJlbnRGYWlsdXJlKTtcbiAgICAgICAgICBlbHNlIGlmKHRoaXMuX2N1cnJlbnRPYnNlcnZlci5vbkVycm9yKVxuICAgICAgICAgICAgdGhpcy5fY3VycmVudE9ic2VydmVyLm9uRXJyb3IocGF5bG9hZCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5fY3VycmVudE9ic2VydmVyID0gdGhpcy5fcGVuZGluZ09ic2VydmVycy5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5faGFuZGxlRmF0YWxFcnJvcihuZXdFcnJvcihcIlVua25vd24gQm9sdCBwcm90b2NvbCBtZXNzYWdlOiBcIiArIG1zZykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBRdWV1ZSBhbiBJTklULW1lc3NhZ2UgdG8gYmUgc2VudCB0byB0aGUgZGF0YWJhc2UgKi9cbiAgaW5pdGlhbGl6ZSggY2xpZW50TmFtZSwgdG9rZW4sIG9ic2VydmVyICkge1xuICAgIGxvZyhcIkNcIiwgXCJJTklUXCIsIGNsaWVudE5hbWUsIHRva2VuKTtcbiAgICBjb25zdCBpbml0T2JzZXJ2ZXIgPSB0aGlzLl9zdGF0ZS53cmFwKG9ic2VydmVyKTtcbiAgICB0aGlzLl9xdWV1ZU9ic2VydmVyKGluaXRPYnNlcnZlcik7XG4gICAgdGhpcy5fcGFja2VyLnBhY2tTdHJ1Y3QoIElOSVQsIFt0aGlzLl9wYWNrYWJsZShjbGllbnROYW1lKSwgdGhpcy5fcGFja2FibGUodG9rZW4pXSxcbiAgICAgIChlcnIpID0+IHRoaXMuX2hhbmRsZUZhdGFsRXJyb3IoZXJyKSApO1xuICAgIHRoaXMuX2NodW5rZXIubWVzc2FnZUJvdW5kYXJ5KCk7XG4gICAgdGhpcy5zeW5jKCk7XG4gIH1cblxuICAvKiogUXVldWUgYSBSVU4tbWVzc2FnZSB0byBiZSBzZW50IHRvIHRoZSBkYXRhYmFzZSAqL1xuICBydW4oIHN0YXRlbWVudCwgcGFyYW1zLCBvYnNlcnZlciApIHtcbiAgICBsb2coXCJDXCIsIFwiUlVOXCIsIHN0YXRlbWVudCwgcGFyYW1zKTtcbiAgICB0aGlzLl9xdWV1ZU9ic2VydmVyKG9ic2VydmVyKTtcbiAgICB0aGlzLl9wYWNrZXIucGFja1N0cnVjdCggUlVOLCBbdGhpcy5fcGFja2FibGUoc3RhdGVtZW50KSwgdGhpcy5fcGFja2FibGUocGFyYW1zKV0sXG4gICAgICAoZXJyKSA9PiB0aGlzLl9oYW5kbGVGYXRhbEVycm9yKGVycikgICk7XG4gICAgdGhpcy5fY2h1bmtlci5tZXNzYWdlQm91bmRhcnkoKTtcbiAgfVxuXG4gIC8qKiBRdWV1ZSBhIFBVTExfQUxMLW1lc3NhZ2UgdG8gYmUgc2VudCB0byB0aGUgZGF0YWJhc2UgKi9cbiAgcHVsbEFsbCggb2JzZXJ2ZXIgKSB7XG4gICAgbG9nKFwiQ1wiLCBcIlBVTExfQUxMXCIpO1xuICAgIHRoaXMuX3F1ZXVlT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuICAgIHRoaXMuX3BhY2tlci5wYWNrU3RydWN0KCBQVUxMX0FMTCwgW10sIChlcnIpID0+IHRoaXMuX2hhbmRsZUZhdGFsRXJyb3IoZXJyKSApO1xuICAgIHRoaXMuX2NodW5rZXIubWVzc2FnZUJvdW5kYXJ5KCk7XG4gIH1cblxuICAvKiogUXVldWUgYSBESVNDQVJEX0FMTC1tZXNzYWdlIHRvIGJlIHNlbnQgdG8gdGhlIGRhdGFiYXNlICovXG4gIGRpc2NhcmRBbGwoIG9ic2VydmVyICkge1xuICAgIGxvZyhcIkNcIiwgXCJESVNDQVJEX0FMTFwiKTtcbiAgICB0aGlzLl9xdWV1ZU9ic2VydmVyKG9ic2VydmVyKTtcbiAgICB0aGlzLl9wYWNrZXIucGFja1N0cnVjdCggRElTQ0FSRF9BTEwsIFtdLCAoZXJyKSA9PiB0aGlzLl9oYW5kbGVGYXRhbEVycm9yKGVycikgKTtcbiAgICB0aGlzLl9jaHVua2VyLm1lc3NhZ2VCb3VuZGFyeSgpO1xuICB9XG5cbiAgLyoqIFF1ZXVlIGEgUkVTRVQtbWVzc2FnZSB0byBiZSBzZW50IHRvIHRoZSBkYXRhYmFzZS4gTXV0ZXMgZmFpbHVyZSBoYW5kbGluZy4gKi9cbiAgcmVzZXRBc3luYyggb2JzZXJ2ZXIgKSB7XG4gICAgbG9nKFwiQ1wiLCBcIlJFU0VUX0FTWU5DXCIpO1xuICAgIHRoaXMuX2lzSGFuZGxpbmdGYWlsdXJlID0gdHJ1ZTtcbiAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgbGV0IHdyYXBwZWRPYnMgPSB7XG4gICAgICBvbk5leHQ6IG9ic2VydmVyID8gb2JzZXJ2ZXIub25OZXh0IDogTk9fT1AsXG4gICAgICBvbkVycm9yOiBvYnNlcnZlciA/IG9ic2VydmVyLm9uRXJyb3IgOiBOT19PUCxcbiAgICAgIG9uQ29tcGxldGVkOiAoKSA9PiB7XG4gICAgICAgIHNlbGYuX2lzSGFuZGxpbmdGYWlsdXJlID0gZmFsc2U7XG4gICAgICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgICAgIG9ic2VydmVyLm9uQ29tcGxldGVkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlT2JzZXJ2ZXIod3JhcHBlZE9icyk7XG4gICAgdGhpcy5fcGFja2VyLnBhY2tTdHJ1Y3QoIFJFU0VULCBbXSwgKGVycikgPT4gdGhpcy5faGFuZGxlRmF0YWxFcnJvcihlcnIpICk7XG4gICAgdGhpcy5fY2h1bmtlci5tZXNzYWdlQm91bmRhcnkoKTtcbiAgfVxuXG4gIC8qKiBRdWV1ZSBhIFJFU0VULW1lc3NhZ2UgdG8gYmUgc2VudCB0byB0aGUgZGF0YWJhc2UgKi9cbiAgcmVzZXQob2JzZXJ2ZXIpIHtcbiAgICBsb2coJ0MnLCAnUkVTRVQnKTtcbiAgICB0aGlzLl9xdWV1ZU9ic2VydmVyKG9ic2VydmVyKTtcbiAgICB0aGlzLl9wYWNrZXIucGFja1N0cnVjdChSRVNFVCwgW10sIChlcnIpID0+IHRoaXMuX2hhbmRsZUZhdGFsRXJyb3IoZXJyKSk7XG4gICAgdGhpcy5fY2h1bmtlci5tZXNzYWdlQm91bmRhcnkoKTtcbiAgfVxuXG4gIC8qKiBRdWV1ZSBhIEFDS19GQUlMVVJFLW1lc3NhZ2UgdG8gYmUgc2VudCB0byB0aGUgZGF0YWJhc2UgKi9cbiAgX2Fja0ZhaWx1cmUoIG9ic2VydmVyICkge1xuICAgIGxvZyhcIkNcIiwgXCJBQ0tfRkFJTFVSRVwiKTtcbiAgICB0aGlzLl9xdWV1ZU9ic2VydmVyKG9ic2VydmVyKTtcbiAgICB0aGlzLl9wYWNrZXIucGFja1N0cnVjdCggQUNLX0ZBSUxVUkUsIFtdLCAoZXJyKSA9PiB0aGlzLl9oYW5kbGVGYXRhbEVycm9yKGVycikgKTtcbiAgICB0aGlzLl9jaHVua2VyLm1lc3NhZ2VCb3VuZGFyeSgpO1xuICB9XG5cbiAgX3F1ZXVlT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICBpZiggdGhpcy5faXNCcm9rZW4gKSB7XG4gICAgICBpZiggb2JzZXJ2ZXIgJiYgb2JzZXJ2ZXIub25FcnJvciApIHtcbiAgICAgICAgb2JzZXJ2ZXIub25FcnJvcih0aGlzLl9lcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG9ic2VydmVyID0gb2JzZXJ2ZXIgfHwgTk9fT1BfT0JTRVJWRVI7XG4gICAgb2JzZXJ2ZXIub25Db21wbGV0ZWQgPSBvYnNlcnZlci5vbkNvbXBsZXRlZCB8fCBOT19PUDtcbiAgICBvYnNlcnZlci5vbkVycm9yID0gb2JzZXJ2ZXIub25FcnJvciB8fCBOT19PUDtcbiAgICBvYnNlcnZlci5vbk5leHQgPSBvYnNlcnZlci5vbk5leHQgfHwgTk9fT1A7XG4gICAgaWYoIHRoaXMuX2N1cnJlbnRPYnNlcnZlciA9PT0gdW5kZWZpbmVkICkge1xuICAgICAgdGhpcy5fY3VycmVudE9ic2VydmVyID0gb2JzZXJ2ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdPYnNlcnZlcnMucHVzaCggb2JzZXJ2ZXIgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHByb21pc2UgcmVzb2x2ZWQgd2hlbiBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uIHN1Y2NlZWQgb3IgcmVqZWN0ZWQgd2hlbiBpdCBmYWlscy5cbiAgICogQ29ubmVjdGlvbiBpcyBpbml0aWFsaXplZCB1c2luZyB7QGxpbmsgaW5pdGlhbGl6ZX0gZnVuY3Rpb24uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q29ubmVjdGlvbj59IHRoZSByZXN1bHQgb2YgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbi5cbiAgICovXG4gIGluaXRpYWxpemF0aW9uQ29tcGxldGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZS5pbml0aWFsaXphdGlvbkNvbXBsZXRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmNocm9uaXplIC0gZmx1c2ggYWxsIHF1ZXVlZCBvdXRnb2luZyBtZXNzYWdlcyBhbmQgcm91dGUgdGhlaXIgcmVzcG9uc2VzXG4gICAqIHRvIHRoZWlyIHJlc3BlY3RpdmUgaGFuZGxlcnMuXG4gICAqL1xuICBzeW5jKCkge1xuICAgIHRoaXMuX2NodW5rZXIuZmx1c2goKTtcbiAgfVxuXG4gIC8qKiBDaGVjayBpZiB0aGlzIGNvbm5lY3Rpb24gaXMgaW4gd29ya2luZyBjb25kaXRpb24gKi9cbiAgaXNPcGVuKCkge1xuICAgIHJldHVybiAhdGhpcy5faXNCcm9rZW4gJiYgdGhpcy5fY2guX29wZW47XG4gIH1cblxuICBpc0VuY3J5cHRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2guaXNFbmNyeXB0ZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIGNsb3NlIG9uIHRoZSBjaGFubmVsLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYiAtIEZ1bmN0aW9uIHRvIGNhbGwgb24gY2xvc2UuXG4gICAqL1xuICBjbG9zZShjYikge1xuICAgIHRoaXMuX2NoLmNsb3NlKGNiKTtcbiAgfVxuXG4gIF9wYWNrYWJsZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3BhY2tlci5wYWNrYWJsZSh2YWx1ZSwgKGVycikgPT4gdGhpcy5faGFuZGxlRmF0YWxFcnJvcihlcnIpKTtcbiAgfVxuXG4gIHNldFNlcnZlclZlcnNpb24odmVyc2lvbikge1xuICAgIHRoaXMuc2VydmVyLnZlcnNpb24gPSB2ZXJzaW9uO1xuICB9XG59XG5cbmNsYXNzIENvbm5lY3Rpb25TdGF0ZSB7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0Nvbm5lY3Rpb259IGNvbm5lY3Rpb24gdGhlIGNvbm5lY3Rpb24gdG8gdHJhY2sgc3RhdGUgZm9yLlxuICAgKi9cbiAgY29uc3RydWN0b3IoY29ubmVjdGlvbikge1xuICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBjb25uZWN0aW9uO1xuXG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9pbml0aWFsaXphdGlvbkVycm9yID0gbnVsbDtcblxuICAgIHRoaXMuX3Jlc29sdmVQcm9taXNlID0gbnVsbDtcbiAgICB0aGlzLl9yZWplY3RQcm9taXNlID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwIHRoZSBnaXZlbiBvYnNlcnZlciB0byB0cmFjayBjb25uZWN0aW9uJ3MgaW5pdGlhbGl6YXRpb24gc3RhdGUuXG4gICAqIEBwYXJhbSB7U3RyZWFtT2JzZXJ2ZXJ9IG9ic2VydmVyIHRoZSBvYnNlcnZlciB1c2VkIGZvciBJTklUIG1lc3NhZ2UuXG4gICAqIEByZXR1cm4ge1N0cmVhbU9ic2VydmVyfSB1cGRhdGVkIG9ic2VydmVyLlxuICAgKi9cbiAgd3JhcChvYnNlcnZlcikge1xuICAgIHJldHVybiB7XG4gICAgICBvbk5leHQ6IHJlY29yZCA9PiB7XG4gICAgICAgIGlmIChvYnNlcnZlciAmJiBvYnNlcnZlci5vbk5leHQpIHtcbiAgICAgICAgICBvYnNlcnZlci5vbk5leHQocmVjb3JkKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uRXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6YXRpb25FcnJvciA9IGVycm9yO1xuICAgICAgICBpZiAodGhpcy5fcmVqZWN0UHJvbWlzZSkge1xuICAgICAgICAgIHRoaXMuX3JlamVjdFByb21pc2UoZXJyb3IpO1xuICAgICAgICAgIHRoaXMuX3JlamVjdFByb21pc2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvYnNlcnZlciAmJiBvYnNlcnZlci5vbkVycm9yKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIub25FcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkNvbXBsZXRlZDogbWV0YURhdGEgPT4ge1xuICAgICAgICBpZiAobWV0YURhdGEgJiYgbWV0YURhdGEuc2VydmVyKSB7XG4gICAgICAgICAgdGhpcy5fY29ubmVjdGlvbi5zZXRTZXJ2ZXJWZXJzaW9uKG1ldGFEYXRhLnNlcnZlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5fcmVzb2x2ZVByb21pc2UpIHtcbiAgICAgICAgICB0aGlzLl9yZXNvbHZlUHJvbWlzZSh0aGlzLl9jb25uZWN0aW9uKTtcbiAgICAgICAgICB0aGlzLl9yZXNvbHZlUHJvbWlzZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9ic2VydmVyICYmIG9ic2VydmVyLm9uQ29tcGxldGVkKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIub25Db21wbGV0ZWQobWV0YURhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcHJvbWlzZSByZXNvbHZlZCB3aGVuIGNvbm5lY3Rpb24gaW5pdGlhbGl6YXRpb24gc3VjY2VlZCBvciByZWplY3RlZCB3aGVuIGl0IGZhaWxzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENvbm5lY3Rpb24+fSB0aGUgcmVzdWx0IG9mIGNvbm5lY3Rpb24gaW5pdGlhbGl6YXRpb24uXG4gICAqL1xuICBpbml0aWFsaXphdGlvbkNvbXBsZXRlZCgpIHtcbiAgICBpZiAodGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY29ubmVjdGlvbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9pbml0aWFsaXphdGlvbkVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5faW5pdGlhbGl6YXRpb25FcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMuX3Jlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICAgICAgdGhpcy5fcmVqZWN0UHJvbWlzZSA9IHJlamVjdDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENyZXRlIG5ldyBjb25uZWN0aW9uIHRvIHRoZSBwcm92aWRlZCB1cmwuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSAnbmVvNGonLXByZWZpeGVkIFVSTCB0byBOZW80aiBCb2x0IGVuZHBvaW50XG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0gdGhpcyBkcml2ZXIgY29uZmlndXJhdGlvblxuICogQHBhcmFtIHtzdHJpbmc9bnVsbH0gY29ubmVjdGlvbkVycm9yQ29kZSAtIGVycm9yIGNvZGUgZm9yIGVycm9ycyByYWlzZWQgb24gY29ubmVjdGlvbiBlcnJvcnNcbiAqIEByZXR1cm4ge0Nvbm5lY3Rpb259IC0gTmV3IGNvbm5lY3Rpb25cbiAqL1xuZnVuY3Rpb24gY29ubmVjdCh1cmwsIGNvbmZpZyA9IHt9LCBjb25uZWN0aW9uRXJyb3JDb2RlID0gbnVsbCkge1xuICBjb25zdCBDaCA9IGNvbmZpZy5jaGFubmVsIHx8IENoYW5uZWw7XG4gIGNvbnN0IGhvc3QgPSBwYXJzZUhvc3QodXJsKTtcbiAgY29uc3QgcG9ydCA9IHBhcnNlUG9ydCh1cmwpIHx8IDc2ODc7XG4gIGNvbnN0IGNvbXBsZXRlVXJsID0gaG9zdCArICc6JyArIHBvcnQ7XG4gIGNvbnN0IGNoYW5uZWxDb25maWcgPSBuZXcgQ2hhbm5lbENvbmZpZyhob3N0LCBwb3J0LCBjb25maWcsIGNvbm5lY3Rpb25FcnJvckNvZGUpO1xuXG4gIHJldHVybiBuZXcgQ29ubmVjdGlvbiggbmV3IENoKGNoYW5uZWxDb25maWcpLCBjb21wbGV0ZVVybCk7XG59XG5cbmV4cG9ydCB7XG4gIGNvbm5lY3QsXG4gIENvbm5lY3Rpb25cbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gQ2VudHJhbCBwbGFjZSB0byBkZXRlY3QgZmVhdHVyZSBzdXBwb3J0IGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybSxcbi8vIGV4cGFuZCBhcyBuZWVkZWQuXG5cbmNvbnN0IEZFQVRVUkVTID0ge1xuICB0cnVzdF9vbl9maXJzdF91c2UgOiAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRoaXMgaXMgaW5zYW5lLiBXZSBhcmUgdmVyaWZ5aW5nIHRoYXQgd2UgaGF2ZSBhIHZlcnNpb24gb2YgZ2V0UGVlckNlcnRpZmljYXRlXG4gICAgICAvLyB0aGF0IHN1cHBvcnRzIHJlYWRpbmcgdGhlIHdob2xlIGNlcnRpZmljYXRlLCBlZyB0aGlzIGNvbW1pdDpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9jb21taXQvMzQ1YzQwYjZcbiAgICAgIGNvbnN0IGdldFBlZXJDZXJ0aWZpY2F0ZUZ1bmN0aW9uID0gcmVxdWlyZSgndGxzJykuVExTU29ja2V0LnByb3RvdHlwZS5nZXRQZWVyQ2VydGlmaWNhdGU7XG4gICAgICBjb25zdCBudW1iZXJPZlBhcmFtZXRlcnMgPSBnZXRQZWVyQ2VydGlmaWNhdGVGdW5jdGlvbi5sZW5ndGg7XG4gICAgICByZXR1cm4gbnVtYmVyT2ZQYXJhbWV0ZXJzID49IDE7XG4gICAgfSBjYXRjaCggZSApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIHRydXN0X2FsbF9jZXJ0aWZpY2F0ZXM6ICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZ2V0UGVlckNlcnRpZmljYXRlRnVuY3Rpb24gPSByZXF1aXJlKCd0bHMnKS5UTFNTb2NrZXQucHJvdG90eXBlLmdldFBlZXJDZXJ0aWZpY2F0ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIGRuc19sb29rdXA6ICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbG9va3VwRnVuY3Rpb24gPSByZXF1aXJlKCdkbnMnKS5sb29rdXA7XG4gICAgICBpZiAobG9va3VwRnVuY3Rpb24gJiYgdHlwZW9mIGxvb2t1cEZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGhhc0ZlYXR1cmUoIG5hbWUgKSB7XG4gIHJldHVybiBGRUFUVVJFU1tuYW1lXSAmJiBGRUFUVVJFU1tuYW1lXSgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNGZWF0dXJlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7cGFyc2VIb3N0LCBwYXJzZVBvcnR9IGZyb20gJy4vdXRpbCc7XG5cbmNsYXNzIEhvc3ROYW1lUmVzb2x2ZXIge1xuXG4gIHJlc29sdmUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBYnN0cmFjdCBmdW5jdGlvbicpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEdW1teUhvc3ROYW1lUmVzb2x2ZXIgZXh0ZW5kcyBIb3N0TmFtZVJlc29sdmVyIHtcblxuICByZXNvbHZlKHNlZWRSb3V0ZXIpIHtcbiAgICByZXR1cm4gcmVzb2x2ZVRvSXRzZWxmKHNlZWRSb3V0ZXIpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEbnNIb3N0TmFtZVJlc29sdmVyIGV4dGVuZHMgSG9zdE5hbWVSZXNvbHZlciB7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9kbnMgPSByZXF1aXJlKCdkbnMnKTtcbiAgfVxuXG4gIHJlc29sdmUoc2VlZFJvdXRlcikge1xuICAgIGNvbnN0IHNlZWRSb3V0ZXJIb3N0ID0gcGFyc2VIb3N0KHNlZWRSb3V0ZXIpO1xuICAgIGNvbnN0IHNlZWRSb3V0ZXJQb3J0ID0gcGFyc2VQb3J0KHNlZWRSb3V0ZXIpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9kbnMubG9va3VwKHNlZWRSb3V0ZXJIb3N0LCB7YWxsOiB0cnVlfSwgKGVycm9yLCBhZGRyZXNzZXMpID0+IHtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmVzb2x2ZShyZXNvbHZlVG9JdHNlbGYoc2VlZFJvdXRlcikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGFkZHJlc3Nlc1dpdGhQb3J0cyA9IGFkZHJlc3Nlcy5tYXAoYWRkcmVzcyA9PiBhZGRyZXNzV2l0aFBvcnQoYWRkcmVzcywgc2VlZFJvdXRlclBvcnQpKTtcbiAgICAgICAgICByZXNvbHZlKGFkZHJlc3Nlc1dpdGhQb3J0cyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVUb0l0c2VsZihhZGRyZXNzKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW2FkZHJlc3NdKTtcbn1cblxuZnVuY3Rpb24gYWRkcmVzc1dpdGhQb3J0KGFkZHJlc3NPYmplY3QsIHBvcnQpIHtcbiAgY29uc3QgYWRkcmVzcyA9IGFkZHJlc3NPYmplY3QuYWRkcmVzcztcbiAgaWYgKHBvcnQpIHtcbiAgICByZXR1cm4gYWRkcmVzcyArICc6JyArIHBvcnQ7XG4gIH1cbiAgcmV0dXJuIGFkZHJlc3M7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB1dGY4IGZyb20gXCIuL3V0ZjhcIjtcbmltcG9ydCBJbnRlZ2VyLCB7aW50LCBpc0ludH0gZnJvbSBcIi4uL2ludGVnZXJcIjtcbmltcG9ydCB7bmV3RXJyb3J9IGZyb20gXCIuLy4uL2Vycm9yXCI7XG5cbmNvbnN0IFRJTllfU1RSSU5HID0gMHg4MDtcbmNvbnN0IFRJTllfTElTVCA9IDB4OTA7XG5jb25zdCBUSU5ZX01BUCA9IDB4QTA7XG5jb25zdCBUSU5ZX1NUUlVDVCA9IDB4QjA7XG5jb25zdCBOVUxMID0gMHhDMDtcbmNvbnN0IEZMT0FUXzY0ID0gMHhDMTtcbmNvbnN0IEZBTFNFID0gMHhDMjtcbmNvbnN0IFRSVUUgPSAweEMzO1xuY29uc3QgSU5UXzggPSAweEM4O1xuY29uc3QgSU5UXzE2ID0gMHhDOTtcbmNvbnN0IElOVF8zMiA9IDB4Q0E7XG5jb25zdCBJTlRfNjQgPSAweENCO1xuY29uc3QgU1RSSU5HXzggPSAweEQwO1xuY29uc3QgU1RSSU5HXzE2ID0gMHhEMTtcbmNvbnN0IFNUUklOR18zMiA9IDB4RDI7XG5jb25zdCBMSVNUXzggPSAweEQ0O1xuY29uc3QgTElTVF8xNiA9IDB4RDU7XG5jb25zdCBMSVNUXzMyID0gMHhENjtcbmNvbnN0IE1BUF84ID0gMHhEODtcbmNvbnN0IE1BUF8xNiA9IDB4RDk7XG5jb25zdCBNQVBfMzIgPSAweERBO1xuY29uc3QgU1RSVUNUXzggPSAweERDO1xuY29uc3QgU1RSVUNUXzE2ID0gMHhERDtcblxuLyoqXG4gICogQSBTdHJ1Y3R1cmUgaGF2ZSBhIHNpZ25hdHVyZSBhbmQgZmllbGRzLlxuICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAqL1xuY2xhc3MgU3RydWN0dXJlIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBuZXcgaW5zdGFuY2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKCBzaWduYXR1cmUsIGZpZWxkcyApIHtcbiAgICB0aGlzLnNpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbiAgICB0aGlzLmZpZWxkcyA9IGZpZWxkcztcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBmaWVsZFN0ciA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYoaSA+IDApIHsgZmllbGRTdHIrPVwiLCBcIiB9XG4gICAgICBmaWVsZFN0ciArPSB0aGlzLmZpZWxkc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIFwiU3RydWN0dXJlKFwiICsgdGhpcy5zaWduYXR1cmUgKyBcIiwgW1wiICsgdGhpcy5maWVsZHMgKyBcIl0pXCJcbiAgfVxufVxuXG4vKipcbiAgKiBDbGFzcyB0byBwYWNrXG4gICogQGFjY2VzcyBwcml2YXRlXG4gICovXG5jbGFzcyBQYWNrZXIge1xuICBjb25zdHJ1Y3RvciAoY2hhbm5lbCkge1xuICAgIHRoaXMuX2NoID0gY2hhbm5lbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcGFja2FibGUgZnVuY3Rpb24gb3V0IG9mIHRoZSBwcm92aWRlZCB2YWx1ZVxuICAgKiBAcGFyYW0geCB0aGUgdmFsdWUgdG8gcGFja1xuICAgKiBAcGFyYW0gb25FcnJvciBjYWxsYmFjayBmb3IgdGhlIGNhc2Ugd2hlbiB2YWx1ZSBjYW5ub3QgYmUgcGFja2VkXG4gICAqIEByZXR1cm5zIEZ1bmN0aW9uXG4gICAqL1xuICBwYWNrYWJsZSAoeCwgb25FcnJvcikge1xuICAgIGlmICh4ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gKCkgPT4gdGhpcy5fY2gud3JpdGVVSW50OCggTlVMTCApO1xuICAgIH0gZWxzZSBpZiAoeCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuICgpID0+IHRoaXMuX2NoLndyaXRlVUludDgoIFRSVUUgKTtcbiAgICB9IGVsc2UgaWYgKHggPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gKCkgPT4gdGhpcy5fY2gud3JpdGVVSW50OCggRkFMU0UgKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZih4KSA9PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gKCkgPT4gdGhpcy5wYWNrRmxvYXQoeCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YoeCkgPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuICgpID0+IHRoaXMucGFja1N0cmluZyh4LCBvbkVycm9yKTtcbiAgICB9IGVsc2UgaWYgKGlzSW50KHgpKSB7XG4gICAgICByZXR1cm4gKCkgPT4gdGhpcy5wYWNrSW50ZWdlciggeCApO1xuICAgIH0gZWxzZSBpZiAoeCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB0aGlzLnBhY2tMaXN0SGVhZGVyKHgubGVuZ3RoLCBvbkVycm9yKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGhpcy5wYWNrYWJsZSh4W2ldID09PSB1bmRlZmluZWQgPyBudWxsIDogeFtpXSwgb25FcnJvcikoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoeCBpbnN0YW5jZW9mIFN0cnVjdHVyZSkge1xuICAgICAgdmFyIHBhY2thYmxlRmllbGRzID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHguZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHBhY2thYmxlRmllbGRzW2ldID0gdGhpcy5wYWNrYWJsZSh4LmZpZWxkc1tpXSwgb25FcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gKCkgPT4gdGhpcy5wYWNrU3RydWN0KCB4LnNpZ25hdHVyZSwgcGFja2FibGVGaWVsZHMgKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZih4KSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHgpO1xuXG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICh4W2tleXNbaV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFja01hcEhlYWRlcihjb3VudCwgb25FcnJvcik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmICh4W2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5wYWNrU3RyaW5nKGtleSk7XG4gICAgICAgICAgICB0aGlzLnBhY2thYmxlKHhba2V5XSwgb25FcnJvcikoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgIG9uRXJyb3IobmV3RXJyb3IoXCJDYW5ub3QgcGFjayB0aGlzIHZhbHVlOiBcIiArIHgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoKSA9PiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhY2tzIGEgc3RydWN0XG4gICAqIEBwYXJhbSBzaWduYXR1cmUgdGhlIHNpZ25hdHVyZSBvZiB0aGUgc3RydWN0XG4gICAqIEBwYXJhbSBwYWNrYWJsZUZpZWxkcyB0aGUgZmllbGRzIG9mIHRoZSBzdHJ1Y3QsIG1ha2Ugc3VyZSB5b3UgY2FsbCBgcGFja2FibGUgb24gYWxsIGZpZWxkc2BcbiAgICovXG4gIHBhY2tTdHJ1Y3QgKCBzaWduYXR1cmUsIHBhY2thYmxlRmllbGRzLCBvbkVycm9yKSB7XG4gICAgcGFja2FibGVGaWVsZHMgPSBwYWNrYWJsZUZpZWxkcyB8fCBbXTtcbiAgICB0aGlzLnBhY2tTdHJ1Y3RIZWFkZXIocGFja2FibGVGaWVsZHMubGVuZ3RoLCBzaWduYXR1cmUsIG9uRXJyb3IpO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBwYWNrYWJsZUZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgcGFja2FibGVGaWVsZHNbaV0oKTtcbiAgICB9XG4gIH1cbiAgcGFja0ludGVnZXIgKHgpIHtcbiAgICB2YXIgaGlnaCA9IHguaGlnaCxcbiAgICAgICAgbG93ICA9IHgubG93O1xuXG4gICAgaWYgKHguZ3JlYXRlclRoYW5PckVxdWFsKC0weDEwKSAmJiB4Lmxlc3NUaGFuKDB4ODApKSB7XG4gICAgICB0aGlzLl9jaC53cml0ZUludDgobG93KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoeC5ncmVhdGVyVGhhbk9yRXF1YWwoLTB4ODApICYmIHgubGVzc1RoYW4oLTB4MTApKSB7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KElOVF84KTtcbiAgICAgIHRoaXMuX2NoLndyaXRlSW50OChsb3cpO1xuICAgIH1cbiAgICBlbHNlIGlmICh4LmdyZWF0ZXJUaGFuT3JFcXVhbCgtMHg4MDAwKSAmJiB4Lmxlc3NUaGFuKDB4ODAwMCkpIHtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoSU5UXzE2KTtcbiAgICAgIHRoaXMuX2NoLndyaXRlSW50MTYobG93KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoeC5ncmVhdGVyVGhhbk9yRXF1YWwoLTB4ODAwMDAwMDApICYmIHgubGVzc1RoYW4oMHg4MDAwMDAwMCkpIHtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoSU5UXzMyKTtcbiAgICAgIHRoaXMuX2NoLndyaXRlSW50MzIobG93KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KElOVF82NCk7XG4gICAgICB0aGlzLl9jaC53cml0ZUludDMyKGhpZ2gpO1xuICAgICAgdGhpcy5fY2gud3JpdGVJbnQzMihsb3cpO1xuICAgIH1cbiAgfVxuICBwYWNrRmxvYXQoeCkge1xuICAgIHRoaXMuX2NoLndyaXRlVUludDgoRkxPQVRfNjQpO1xuICAgIHRoaXMuX2NoLndyaXRlRmxvYXQ2NCh4KTtcbiAgfVxuXG4gIHBhY2tTdHJpbmcgKHgsIG9uRXJyb3IpIHtcbiAgICBsZXQgYnl0ZXMgPSB1dGY4LmVuY29kZSh4KTtcbiAgICBsZXQgc2l6ZSA9IGJ5dGVzLmxlbmd0aDtcbiAgICBpZiAoc2l6ZSA8IDB4MTApIHtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoVElOWV9TVFJJTkcgfCBzaXplKTtcbiAgICAgIHRoaXMuX2NoLndyaXRlQnl0ZXMoYnl0ZXMpO1xuICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDB4MTAwKSB7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KFNUUklOR184KVxuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplKTtcbiAgICAgIHRoaXMuX2NoLndyaXRlQnl0ZXMoYnl0ZXMpO1xuICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDB4MTAwMDApIHtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoU1RSSU5HXzE2KTtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoc2l6ZS8yNTY+PjApO1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplJTI1Nik7XG4gICAgICB0aGlzLl9jaC53cml0ZUJ5dGVzKGJ5dGVzKTtcbiAgICB9IGVsc2UgaWYgKHNpemUgPCAweDEwMDAwMDAwMCkge1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChTVFJJTkdfMzIpO1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OCgoc2l6ZS8xNjc3NzIxNj4+MCklMjU2KTtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoKHNpemUvNjU1MzY+PjApJTI1Nik7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KChzaXplLzI1Nj4+MCklMjU2KTtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoc2l6ZSUyNTYpO1xuICAgICAgdGhpcy5fY2gud3JpdGVCeXRlcyhieXRlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uRXJyb3IobmV3RXJyb3IoXCJVVEYtOCBzdHJpbmdzIG9mIHNpemUgXCIgKyBzaXplICsgXCIgYXJlIG5vdCBzdXBwb3J0ZWRcIikpO1xuICAgIH1cbiAgfVxuXG4gIHBhY2tMaXN0SGVhZGVyIChzaXplLCBvbkVycm9yKSB7XG4gICAgaWYgKHNpemUgPCAweDEwKSB7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KFRJTllfTElTVCB8IHNpemUpO1xuICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDB4MTAwKSB7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KExJU1RfOClcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoc2l6ZSk7XG4gICAgfSBlbHNlIGlmIChzaXplIDwgMHgxMDAwMCkge1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChMSVNUXzE2KTtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoKHNpemUvMjU2Pj4wKSUyNTYpO1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplJTI1Nik7XG4gICAgfSBlbHNlIGlmIChzaXplIDwgMHgxMDAwMDAwMDApIHtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoTElTVF8zMik7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KChzaXplLzE2Nzc3MjE2Pj4wKSUyNTYpO1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OCgoc2l6ZS82NTUzNj4+MCklMjU2KTtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoKHNpemUvMjU2Pj4wKSUyNTYpO1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplJTI1Nik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uRXJyb3IobmV3RXJyb3IoXCJMaXN0cyBvZiBzaXplIFwiICsgc2l6ZSArIFwiIGFyZSBub3Qgc3VwcG9ydGVkXCIpKTtcbiAgICB9XG4gIH1cblxuICBwYWNrTWFwSGVhZGVyIChzaXplLCBvbkVycm9yKSB7XG4gICAgaWYgKHNpemUgPCAweDEwKSB7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KFRJTllfTUFQIHwgc2l6ZSk7XG4gICAgfSBlbHNlIGlmIChzaXplIDwgMHgxMDApIHtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoTUFQXzgpO1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplKTtcbiAgICB9IGVsc2UgaWYgKHNpemUgPCAweDEwMDAwKSB7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KE1BUF8xNik7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpemUvMjU2Pj4wKTtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoc2l6ZSUyNTYpO1xuICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDB4MTAwMDAwMDAwKSB7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KE1BUF8zMik7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KChzaXplLzE2Nzc3MjE2Pj4wKSUyNTYpO1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OCgoc2l6ZS82NTUzNj4+MCklMjU2KTtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoKHNpemUvMjU2Pj4wKSUyNTYpO1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplJTI1Nik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uRXJyb3IobmV3RXJyb3IoXCJNYXBzIG9mIHNpemUgXCIgKyBzaXplICsgXCIgYXJlIG5vdCBzdXBwb3J0ZWRcIikpO1xuICAgIH1cbiAgfVxuXG4gIHBhY2tTdHJ1Y3RIZWFkZXIgKHNpemUsIHNpZ25hdHVyZSwgb25FcnJvcikge1xuICAgIGlmIChzaXplIDwgMHgxMCkge1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChUSU5ZX1NUUlVDVCB8IHNpemUpO1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaWduYXR1cmUpO1xuICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDB4MTAwKSB7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KFNUUlVDVF84KTtcbiAgICAgIHRoaXMuX2NoLndyaXRlVUludDgoc2l6ZSk7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpZ25hdHVyZSk7XG4gICAgfSBlbHNlIGlmIChzaXplIDwgMHgxMDAwMCkge1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChTVFJVQ1RfMTYpO1xuICAgICAgdGhpcy5fY2gud3JpdGVVSW50OChzaXplLzI1Nj4+MCk7XG4gICAgICB0aGlzLl9jaC53cml0ZVVJbnQ4KHNpemUlMjU2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25FcnJvcihuZXdFcnJvcihcIlN0cnVjdHVyZXMgb2Ygc2l6ZSBcIiArIHNpemUgKyBcIiBhcmUgbm90IHN1cHBvcnRlZFwiKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICAqIENsYXNzIHRvIHVucGFja1xuICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAqL1xuY2xhc3MgVW5wYWNrZXIge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgLy8gSGlnaGVyIGxldmVsIGxheWVycyBjYW4gc3BlY2lmeSBob3cgdG8gbWFwIHN0cnVjdHMgdG8gaGlnaGVyLWxldmVsIG9iamVjdHMuXG4gICAgLy8gSWYgd2UgcmVjaWV2ZSBhIHN0cnVjdCB0aGF0IGhhcyBhIHNpZ25hdHVyZSB0aGF0IGRvZXMgbm90IGhhdmUgYSBtYXBwZXIsXG4gICAgLy8gd2Ugc2ltcGx5IHJldHVybiBhIFN0cnVjdHVyZSBvYmplY3QuXG4gICAgdGhpcy5zdHJ1Y3RNYXBwZXJzID0ge307XG4gIH1cblxuICB1bnBhY2tMaXN0IChzaXplLCBidWZmZXIpIHtcbiAgICBsZXQgdmFsdWUgPSBbXTtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICB2YWx1ZS5wdXNoKCB0aGlzLnVucGFjayggYnVmZmVyICkgKTtcbiAgICB9IFxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHVucGFja01hcCAoc2l6ZSwgYnVmZmVyKSB7XG4gICAgbGV0IHZhbHVlID0ge307XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgbGV0IGtleSA9IHRoaXMudW5wYWNrKGJ1ZmZlcik7XG4gICAgICB2YWx1ZVtrZXldID0gdGhpcy51bnBhY2soYnVmZmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgdW5wYWNrU3RydWN0IChzaXplLCBidWZmZXIpIHtcbiAgICBsZXQgc2lnbmF0dXJlID0gYnVmZmVyLnJlYWRVSW50OCgpO1xuICAgIGxldCBtYXBwZXIgPSB0aGlzLnN0cnVjdE1hcHBlcnNbc2lnbmF0dXJlXTtcbiAgICBpZiggbWFwcGVyICkge1xuICAgICAgcmV0dXJuIG1hcHBlciggdGhpcywgYnVmZmVyICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB2YWx1ZSA9IG5ldyBTdHJ1Y3R1cmUoc2lnbmF0dXJlLCBbXSk7XG4gICAgICBmb3IobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlLmZpZWxkcy5wdXNoKHRoaXMudW5wYWNrKGJ1ZmZlcikpO1xuICAgICAgfSBcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICB1bnBhY2sgKCBidWZmZXIgKSB7XG4gICAgbGV0IG1hcmtlciA9IGJ1ZmZlci5yZWFkVUludDgoKTtcbiAgICBpZiAobWFya2VyID09IE5VTEwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAobWFya2VyID09IFRSVUUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAobWFya2VyID09IEZBTFNFKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gRkxPQVRfNjQpIHtcbiAgICAgIHJldHVybiBidWZmZXIucmVhZEZsb2F0NjQoKTtcbiAgICB9IGVsc2UgaWYgKG1hcmtlciA+PSAwICYmIG1hcmtlciA8IDEyOCkge1xuICAgICAgcmV0dXJuIGludChtYXJrZXIpO1xuICAgIH0gZWxzZSBpZiAobWFya2VyID49IDI0MCAmJiBtYXJrZXIgPCAyNTYpIHtcbiAgICAgIHJldHVybiBpbnQobWFya2VyIC0gMjU2KTtcbiAgICB9IGVsc2UgaWYgKG1hcmtlciA9PSBJTlRfOCkge1xuICAgICAgcmV0dXJuIGludChidWZmZXIucmVhZEludDgoKSk7XG4gICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gSU5UXzE2KSB7XG4gICAgICByZXR1cm4gaW50KGJ1ZmZlci5yZWFkSW50MTYoKSk7XG4gICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gSU5UXzMyKSB7XG4gICAgICBsZXQgYiA9IGJ1ZmZlci5yZWFkSW50MzIoKTtcbiAgICAgIHJldHVybiBpbnQoYik7XG4gICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gSU5UXzY0KSB7XG4gICAgICBsZXQgaGlnaCA9IGJ1ZmZlci5yZWFkSW50MzIoKTtcbiAgICAgIGxldCBsb3cgID0gYnVmZmVyLnJlYWRJbnQzMigpO1xuICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKCBsb3csIGhpZ2ggKTtcbiAgICB9IGVsc2UgaWYgKG1hcmtlciA9PSBTVFJJTkdfOCkge1xuICAgICAgcmV0dXJuIHV0ZjguZGVjb2RlKCBidWZmZXIsIGJ1ZmZlci5yZWFkVUludDgoKSk7XG4gICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gU1RSSU5HXzE2KSB7XG4gICAgICByZXR1cm4gdXRmOC5kZWNvZGUoIGJ1ZmZlciwgYnVmZmVyLnJlYWRVSW50MTYoKSApO1xuICAgIH0gZWxzZSBpZiAobWFya2VyID09IFNUUklOR18zMikge1xuICAgICAgcmV0dXJuIHV0ZjguZGVjb2RlKCBidWZmZXIsIGJ1ZmZlci5yZWFkVUludDMyKCkgKTtcbiAgICB9IGVsc2UgaWYgKG1hcmtlciA9PSBMSVNUXzgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVucGFja0xpc3QoYnVmZmVyLnJlYWRVSW50OCgpLCBidWZmZXIpO1xuICAgIH0gZWxzZSBpZiAobWFya2VyID09IExJU1RfMTYpIHtcbiAgICAgIHJldHVybiB0aGlzLnVucGFja0xpc3QoYnVmZmVyLnJlYWRVSW50MTYoKSwgYnVmZmVyKTtcbiAgICB9IGVsc2UgaWYgKG1hcmtlciA9PSBMSVNUXzMyKSB7XG4gICAgICByZXR1cm4gdGhpcy51bnBhY2tMaXN0KGJ1ZmZlci5yZWFkVUludDMyKCksIGJ1ZmZlcik7XG4gICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gTUFQXzgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVucGFja01hcChidWZmZXIucmVhZFVJbnQ4KCksIGJ1ZmZlcik7XG4gICAgfSBlbHNlIGlmIChtYXJrZXIgPT0gTUFQXzE2KSB7XG4gICAgICByZXR1cm4gdGhpcy51bnBhY2tNYXAoYnVmZmVyLnJlYWRVSW50MTYoKSwgYnVmZmVyKTtcbiAgICB9IGVsc2UgaWYgKG1hcmtlciA9PSBNQVBfMzIpIHtcbiAgICAgIHJldHVybiB0aGlzLnVucGFja01hcChidWZmZXIucmVhZFVJbnQzMigpLCBidWZmZXIpO1xuICAgIH0gZWxzZSBpZiAobWFya2VyID09IFNUUlVDVF84KSB7XG4gICAgICByZXR1cm4gdGhpcy51bnBhY2tTdHJ1Y3QoYnVmZmVyLnJlYWRVSW50OCgpLCBidWZmZXIpO1xuICAgIH0gZWxzZSBpZiAobWFya2VyID09IFNUUlVDVF8xNikge1xuICAgICAgcmV0dXJuIHRoaXMudW5wYWNrU3RydWN0KGJ1ZmZlci5yZWFkVUludDE2KCksIGJ1ZmZlcik7XG4gICAgfVxuICAgIGxldCBtYXJrZXJIaWdoID0gbWFya2VyICYgMHhGMDtcbiAgICBsZXQgbWFya2VyTG93ID0gbWFya2VyICYgMHgwRjtcbiAgICBpZiAobWFya2VySGlnaCA9PSAweDgwKSB7XG4gICAgICByZXR1cm4gdXRmOC5kZWNvZGUoIGJ1ZmZlciwgbWFya2VyTG93ICk7XG4gICAgfSBlbHNlIGlmIChtYXJrZXJIaWdoID09IDB4OTApIHtcbiAgICAgIHJldHVybiB0aGlzLnVucGFja0xpc3QobWFya2VyTG93LCBidWZmZXIpO1xuICAgIH0gZWxzZSBpZiAobWFya2VySGlnaCA9PSAweEEwKSB7XG4gICAgICByZXR1cm4gdGhpcy51bnBhY2tNYXAobWFya2VyTG93LCBidWZmZXIpO1xuICAgIH0gZWxzZSBpZiAobWFya2VySGlnaCA9PSAweEIwKSB7XG4gICAgICByZXR1cm4gdGhpcy51bnBhY2tTdHJ1Y3QobWFya2VyTG93LCBidWZmZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXdFcnJvcihcIlVua25vd24gcGFja2VkIHZhbHVlIHdpdGggbWFya2VyIFwiICsgbWFya2VyLnRvU3RyaW5nKDE2KSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7XG4gIFBhY2tlcixcbiAgVW5wYWNrZXIsXG4gIFN0cnVjdHVyZVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmNsYXNzIFBvb2wge1xuICAvKipcbiAgICogQHBhcmFtIGNyZWF0ZSAgYW4gYWxsb2NhdGlvbiBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgcmVzb3VyY2UuIEl0J3MgZ2l2ZW5cbiAgICogICAgICAgICAgICAgICAgYSBzaW5nbGUgYXJndW1lbnQsIGEgZnVuY3Rpb24gdGhhdCB3aWxsIHJldHVybiB0aGUgcmVzb3VyY2UgdG9cbiAgICogICAgICAgICAgICAgICAgdGhlIHBvb2wgaWYgaW52b2tlZCwgd2hpY2ggaXMgbWVhbnQgdG8gYmUgY2FsbGVkIG9uIC5kaXNwb3NlXG4gICAqICAgICAgICAgICAgICAgIG9yIC5jbG9zZSBvciB3aGF0ZXZlciBtZWNoYW5pc20gdGhlIHJlc291cmNlIHVzZXMgdG8gZmluYWxpemUuXG4gICAqIEBwYXJhbSBkZXN0cm95IGNhbGxlZCB3aXRoIHRoZSByZXNvdXJjZSB3aGVuIGl0IGlzIGV2aWN0ZWQgZnJvbSB0aGlzIHBvb2xcbiAgICogQHBhcmFtIHZhbGlkYXRlIGNhbGxlZCBhdCB2YXJpb3VzIHRpbWVzIChsaWtlIHdoZW4gYW4gaW5zdGFuY2UgaXMgYWNxdWlyZWQgYW5kXG4gICAqICAgICAgICAgICAgICAgICB3aGVuIGl0IGlzIHJldHVybmVkKS4gSWYgdGhpcyByZXR1cm5zIGZhbHNlLCB0aGUgcmVzb3VyY2Ugd2lsbFxuICAgKiAgICAgICAgICAgICAgICAgYmUgZXZpY3RlZFxuICAgKiBAcGFyYW0gbWF4SWRsZSB0aGUgbWF4IG51bWJlciBvZiByZXNvdXJjZXMgdGhhdCBhcmUgYWxsb3dlZCBpZGxlIGluIHRoZSBwb29sIGF0XG4gICAqICAgICAgICAgICAgICAgIGFueSB0aW1lLiBJZiB0aGlzIHRocmVzaG9sZCBpcyBleGNlZWRlZCwgcmVzb3VyY2VzIHdpbGwgYmUgZXZpY3RlZC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGNyZWF0ZSwgZGVzdHJveT0oKCk9PnRydWUpLCB2YWxpZGF0ZT0oKCk9PnRydWUpLCBtYXhJZGxlPTUwKSB7XG4gICAgdGhpcy5fY3JlYXRlID0gY3JlYXRlO1xuICAgIHRoaXMuX2Rlc3Ryb3kgPSBkZXN0cm95O1xuICAgIHRoaXMuX3ZhbGlkYXRlID0gdmFsaWRhdGU7XG4gICAgdGhpcy5fbWF4SWRsZSA9IG1heElkbGU7XG4gICAgdGhpcy5fcG9vbHMgPSB7fTtcbiAgICB0aGlzLl9yZWxlYXNlID0gdGhpcy5fcmVsZWFzZS5iaW5kKHRoaXMpO1xuICB9XG5cbiAgYWNxdWlyZShrZXkpIHtcbiAgICBsZXQgcmVzb3VyY2U7XG4gICAgbGV0IHBvb2wgPSB0aGlzLl9wb29sc1trZXldO1xuICAgIGlmICghcG9vbCkge1xuICAgICAgcG9vbCA9IFtdO1xuICAgICAgdGhpcy5fcG9vbHNba2V5XSA9IHBvb2w7XG4gICAgfVxuICAgIHdoaWxlIChwb29sLmxlbmd0aCkge1xuICAgICAgcmVzb3VyY2UgPSBwb29sLnBvcCgpO1xuXG4gICAgICBpZiAodGhpcy5fdmFsaWRhdGUocmVzb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiByZXNvdXJjZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kocmVzb3VyY2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGUoa2V5LCB0aGlzLl9yZWxlYXNlKTtcbiAgfVxuXG4gIHB1cmdlKGtleSkge1xuICAgIGxldCByZXNvdXJjZTtcbiAgICBsZXQgcG9vbCA9IHRoaXMuX3Bvb2xzW2tleV0gfHwgW107XG4gICAgd2hpbGUgKHBvb2wubGVuZ3RoKSB7XG4gICAgICByZXNvdXJjZSA9IHBvb2wucG9wKCk7XG4gICAgICB0aGlzLl9kZXN0cm95KHJlc291cmNlKVxuICAgIH1cbiAgICBkZWxldGUgdGhpcy5fcG9vbHNba2V5XVxuICB9XG5cbiAgcHVyZ2VBbGwoKSB7XG4gICAgZm9yIChsZXQga2V5IGluIHRoaXMuX3Bvb2xzLmtleXMpIHtcbiAgICAgIGlmICh0aGlzLl9wb29scy5oYXNPd25Qcm9wZXJ0eWtleSkge1xuICAgICAgICB0aGlzLnB1cmdlKGtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFzKGtleSkge1xuICAgIHJldHVybiAoa2V5IGluIHRoaXMuX3Bvb2xzKTtcbiAgfVxuXG4gIF9yZWxlYXNlKGtleSwgcmVzb3VyY2UpIHtcbiAgICBsZXQgcG9vbCA9IHRoaXMuX3Bvb2xzW2tleV07XG4gICAgaWYgKCFwb29sKSB7XG4gICAgICAvL2tleSBoYXMgYmVlbiBwdXJnZWQsIGRvbid0IHB1dCBpdCBiYWNrXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmKCBwb29sLmxlbmd0aCA+PSB0aGlzLl9tYXhJZGxlIHx8ICF0aGlzLl92YWxpZGF0ZShyZXNvdXJjZSkgKSB7XG4gICAgICB0aGlzLl9kZXN0cm95KHJlc291cmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9vbC5wdXNoKHJlc291cmNlKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUG9vbFxuXG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IFJvdXRpbmdUYWJsZSBmcm9tICcuL3JvdXRpbmctdGFibGUnO1xuaW1wb3J0IHtuZXdFcnJvciwgUFJPVE9DT0xfRVJST1J9IGZyb20gJy4uL2Vycm9yJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVkaXNjb3Zlcnkge1xuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtSb3V0aW5nVXRpbH0gcm91dGluZ1V0aWwgdGhlIHV0aWwgdG8gdXNlLlxuICAgKi9cbiAgY29uc3RydWN0b3Iocm91dGluZ1V0aWwpIHtcbiAgICB0aGlzLl9yb3V0aW5nVXRpbCA9IHJvdXRpbmdVdGlsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byBmZXRjaCBuZXcgcm91dGluZyB0YWJsZSBmcm9tIHRoZSBnaXZlbiByb3V0ZXIuXG4gICAqIEBwYXJhbSB7U2Vzc2lvbn0gc2Vzc2lvbiB0aGUgc2Vzc2lvbiB0byB1c2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb3V0ZXJBZGRyZXNzIHRoZSBVUkwgb2YgdGhlIHJvdXRlci5cbiAgICogQHJldHVybiB7UHJvbWlzZTxSb3V0aW5nVGFibGU+fSBwcm9taXNlIHJlc29sdmVkIHdpdGggbmV3IHJvdXRpbmcgdGFibGUgb3IgbnVsbCB3aGVuIGNvbm5lY3Rpb24gZXJyb3IgaGFwcGVuZWQuXG4gICAqL1xuICBsb29rdXBSb3V0aW5nVGFibGVPblJvdXRlcihzZXNzaW9uLCByb3V0ZXJBZGRyZXNzKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdXRpbmdVdGlsLmNhbGxSb3V0aW5nUHJvY2VkdXJlKHNlc3Npb24sIHJvdXRlckFkZHJlc3MpLnRoZW4ocmVjb3JkcyA9PiB7XG4gICAgICBpZiAocmVjb3JkcyA9PT0gbnVsbCkge1xuICAgICAgICAvLyBjb25uZWN0aW9uIGVycm9yIGhhcHBlbmVkLCB1bmFibGUgdG8gcmV0cmlldmUgcm91dGluZyB0YWJsZSBmcm9tIHRoaXMgcm91dGVyLCBuZXh0IG9uZSBzaG91bGQgYmUgcXVlcmllZFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ld0Vycm9yKCdJbGxlZ2FsIHJlc3BvbnNlIGZyb20gcm91dGVyIFwiJyArIHJvdXRlckFkZHJlc3MgKyAnXCIuICcgK1xuICAgICAgICAgICdSZWNlaXZlZCAnICsgcmVjb3Jkcy5sZW5ndGggKyAnIHJlY29yZHMgYnV0IGV4cGVjdGVkIG9ubHkgb25lLlxcbicgKyBKU09OLnN0cmluZ2lmeShyZWNvcmRzKSxcbiAgICAgICAgICBQUk9UT0NPTF9FUlJPUik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZHNbMF07XG5cbiAgICAgIGNvbnN0IGV4cGlyYXRpb25UaW1lID0gdGhpcy5fcm91dGluZ1V0aWwucGFyc2VUdGwocmVjb3JkLCByb3V0ZXJBZGRyZXNzKTtcbiAgICAgIGNvbnN0IHtyb3V0ZXJzLCByZWFkZXJzLCB3cml0ZXJzfSA9IHRoaXMuX3JvdXRpbmdVdGlsLnBhcnNlU2VydmVycyhyZWNvcmQsIHJvdXRlckFkZHJlc3MpO1xuXG4gICAgICBSZWRpc2NvdmVyeS5fYXNzZXJ0Tm9uRW1wdHkocm91dGVycywgJ3JvdXRlcnMnLCByb3V0ZXJBZGRyZXNzKTtcbiAgICAgIFJlZGlzY292ZXJ5Ll9hc3NlcnROb25FbXB0eShyZWFkZXJzLCAncmVhZGVycycsIHJvdXRlckFkZHJlc3MpO1xuICAgICAgLy8gY2FzZSB3aXRoIG5vIHdyaXRlcnMgaXMgcHJvY2Vzc2VkIGhpZ2hlciBpbiB0aGUgcHJvbWlzZSBjaGFpbiBiZWNhdXNlIG9ubHkgUm91dGluZ0RyaXZlciBrbm93c1xuICAgICAgLy8gaG93IHRvIGRlYWwgd2l0aCBzdWNoIHRhYmxlIGFuZCBob3cgdG8gdHJlYXQgcm91dGVyIHRoYXQgcmV0dXJuZWQgc3VjaCB0YWJsZVxuXG4gICAgICByZXR1cm4gbmV3IFJvdXRpbmdUYWJsZShyb3V0ZXJzLCByZWFkZXJzLCB3cml0ZXJzLCBleHBpcmF0aW9uVGltZSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgX2Fzc2VydE5vbkVtcHR5KHNlcnZlcnNSb3VuZFJvYmluQXJyYXksIHNlcnZlcnNOYW1lLCByb3V0ZXJBZGRyZXNzKSB7XG4gICAgaWYgKHNlcnZlcnNSb3VuZFJvYmluQXJyYXkuaXNFbXB0eSgpKSB7XG4gICAgICB0aHJvdyBuZXdFcnJvcignUmVjZWl2ZWQgbm8gJyArIHNlcnZlcnNOYW1lICsgJyBmcm9tIHJvdXRlciAnICsgcm91dGVyQWRkcmVzcywgUFJPVE9DT0xfRVJST1IpO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qKlxuICogQW4gYXJyYXkgdGhhdCBsZXRzIHlvdSBob3AgdGhyb3VnaCB0aGUgZWxlbWVudHMgZW5kbGVzc2x5LlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb3VuZFJvYmluQXJyYXkge1xuXG4gIGNvbnN0cnVjdG9yKGl0ZW1zKSB7XG4gICAgdGhpcy5faXRlbXMgPSBpdGVtcyB8fCBbXTtcbiAgICB0aGlzLl9vZmZzZXQgPSAwO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX29mZnNldCAlIHRoaXMuc2l6ZSgpO1xuICAgIHRoaXMuX29mZnNldCsrO1xuICAgIHJldHVybiB0aGlzLl9pdGVtc1tpbmRleF07XG4gIH1cblxuICBwdXNoQWxsKGVsZW1zKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGVsZW1zKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQgYnV0IGdvdDogJyArIGVsZW1zKTtcbiAgICB9XG5cbiAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLl9pdGVtcywgZWxlbXMpO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXMubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXMubGVuZ3RoO1xuICB9XG5cbiAgdG9BcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cblxuICByZW1vdmUoaXRlbSkge1xuICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5faXRlbXMuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudCAhPT0gaXRlbSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5faXRlbXMpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7aW50fSBmcm9tICcuLi9pbnRlZ2VyJztcbmltcG9ydCBSb3VuZFJvYmluQXJyYXkgZnJvbSAnLi9yb3VuZC1yb2Jpbi1hcnJheSc7XG5pbXBvcnQge1JFQUQsIFdSSVRFfSBmcm9tICcuLi9kcml2ZXInO1xuXG5jb25zdCBNSU5fUk9VVEVSUyA9IDE7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRpbmdUYWJsZSB7XG5cbiAgY29uc3RydWN0b3Iocm91dGVycywgcmVhZGVycywgd3JpdGVycywgZXhwaXJhdGlvblRpbWUpIHtcbiAgICB0aGlzLnJvdXRlcnMgPSByb3V0ZXJzIHx8IG5ldyBSb3VuZFJvYmluQXJyYXkoKTtcbiAgICB0aGlzLnJlYWRlcnMgPSByZWFkZXJzIHx8IG5ldyBSb3VuZFJvYmluQXJyYXkoKTtcbiAgICB0aGlzLndyaXRlcnMgPSB3cml0ZXJzIHx8IG5ldyBSb3VuZFJvYmluQXJyYXkoKTtcbiAgICB0aGlzLmV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWUgfHwgaW50KDApO1xuICB9XG5cbiAgZm9yZ2V0KGFkZHJlc3MpIHtcbiAgICAvLyBEb24ndCByZW1vdmUgaXQgZnJvbSB0aGUgc2V0IG9mIHJvdXRlcnMsIHNpbmNlIHRoYXQgbWlnaHQgbWVhbiB3ZSBsb3NlIG91ciBhYmlsaXR5IHRvIHJlLWRpc2NvdmVyLFxuICAgIC8vIGp1c3QgcmVtb3ZlIGl0IGZyb20gdGhlIHNldCBvZiByZWFkZXJzIGFuZCB3cml0ZXJzLCBzbyB0aGF0IHdlIGRvbid0IHVzZSBpdCBmb3IgYWN0dWFsIHdvcmsgd2l0aG91dFxuICAgIC8vIHBlcmZvcm1pbmcgZGlzY292ZXJ5IGZpcnN0LlxuICAgIHRoaXMucmVhZGVycy5yZW1vdmUoYWRkcmVzcyk7XG4gICAgdGhpcy53cml0ZXJzLnJlbW92ZShhZGRyZXNzKTtcbiAgfVxuXG4gIGZvcmdldFJvdXRlcihhZGRyZXNzKSB7XG4gICAgdGhpcy5yb3V0ZXJzLnJlbW92ZShhZGRyZXNzKTtcbiAgfVxuXG4gIGZvcmdldFdyaXRlcihhZGRyZXNzKSB7XG4gICAgdGhpcy53cml0ZXJzLnJlbW92ZShhZGRyZXNzKTtcbiAgfVxuXG4gIHNlcnZlcnNEaWZmKG90aGVyUm91dGluZ1RhYmxlKSB7XG4gICAgY29uc3Qgb2xkU2VydmVycyA9IG5ldyBTZXQodGhpcy5fYWxsU2VydmVycygpKTtcbiAgICBjb25zdCBuZXdTZXJ2ZXJzID0gb3RoZXJSb3V0aW5nVGFibGUuX2FsbFNlcnZlcnMoKTtcbiAgICBuZXdTZXJ2ZXJzLmZvckVhY2gobmV3U2VydmVyID0+IG9sZFNlcnZlcnMuZGVsZXRlKG5ld1NlcnZlcikpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKG9sZFNlcnZlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgcm91dGluZyB0YWJsZSBpcyBmcmVzaCB0byBwZXJmb3JtIHRoZSByZXF1aXJlZCBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY2Nlc3NNb2RlIHRoZSB0eXBlIG9mIG9wZXJhdGlvbi4gQWxsb3dlZCB2YWx1ZXMgYXJlIHtAbGluayBSRUFEfSBhbmQge0BsaW5rIFdSSVRFfS5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gd2hlbiB0aGlzIHRhYmxlIGNvbnRhaW5zIHNlcnZlcnMgdG8gc2VydmUgdGhlIHJlcXVpcmVkIG9wZXJhdGlvbixcbiAgICogPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS5cbiAgICovXG4gIGlzU3RhbGVGb3IoYWNjZXNzTW9kZSkge1xuICAgIHJldHVybiB0aGlzLmV4cGlyYXRpb25UaW1lLmxlc3NUaGFuKERhdGUubm93KCkpIHx8XG4gICAgICB0aGlzLnJvdXRlcnMuc2l6ZSgpIDwgTUlOX1JPVVRFUlMgfHxcbiAgICAgIGFjY2Vzc01vZGUgPT09IFJFQUQgJiYgdGhpcy5yZWFkZXJzLmlzRW1wdHkoKSB8fFxuICAgICAgYWNjZXNzTW9kZSA9PT0gV1JJVEUgJiYgdGhpcy53cml0ZXJzLmlzRW1wdHkoKTtcbiAgfVxuXG4gIF9hbGxTZXJ2ZXJzKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5yb3V0ZXJzLnRvQXJyYXkoKSwgLi4udGhpcy5yZWFkZXJzLnRvQXJyYXkoKSwgLi4udGhpcy53cml0ZXJzLnRvQXJyYXkoKV07XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYFJvdXRpbmdUYWJsZVtgICtcbiAgICAgIGBleHBpcmF0aW9uVGltZT0ke3RoaXMuZXhwaXJhdGlvblRpbWV9LCBgICtcbiAgICAgIGByb3V0ZXJzPSR7dGhpcy5yb3V0ZXJzfSwgYCArXG4gICAgICBgcmVhZGVycz0ke3RoaXMucmVhZGVyc30sIGAgK1xuICAgICAgYHdyaXRlcnM9JHt0aGlzLndyaXRlcnN9XWA7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgUm91bmRSb2JpbkFycmF5IGZyb20gJy4vcm91bmQtcm9iaW4tYXJyYXknO1xuaW1wb3J0IHtuZXdFcnJvciwgUFJPVE9DT0xfRVJST1IsIFNFUlZJQ0VfVU5BVkFJTEFCTEV9IGZyb20gJy4uL2Vycm9yJztcbmltcG9ydCBJbnRlZ2VyLCB7aW50fSBmcm9tICcuLi9pbnRlZ2VyJztcbmltcG9ydCB7U2VydmVyVmVyc2lvbiwgVkVSU0lPTl8zXzJfMH0gZnJvbSAnLi9zZXJ2ZXItdmVyc2lvbic7XG5cbmNvbnN0IENBTExfR0VUX1NFUlZFUlMgPSAnQ0FMTCBkYm1zLmNsdXN0ZXIucm91dGluZy5nZXRTZXJ2ZXJzJztcbmNvbnN0IEdFVF9ST1VUSU5HX1RBQkxFX1BBUkFNID0gJ2NvbnRleHQnO1xuY29uc3QgQ0FMTF9HRVRfUk9VVElOR19UQUJMRSA9ICdDQUxMIGRibXMuY2x1c3Rlci5yb3V0aW5nLmdldFJvdXRpbmdUYWJsZSh7JyArIEdFVF9ST1VUSU5HX1RBQkxFX1BBUkFNICsgJ30pJztcbmNvbnN0IFBST0NFRFVSRV9OT1RfRk9VTkRfQ09ERSA9ICdOZW8uQ2xpZW50RXJyb3IuUHJvY2VkdXJlLlByb2NlZHVyZU5vdEZvdW5kJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm91dGluZ1V0aWwge1xuXG4gIGNvbnN0cnVjdG9yKHJvdXRpbmdDb250ZXh0KSB7XG4gICAgdGhpcy5fcm91dGluZ0NvbnRleHQgPSByb3V0aW5nQ29udGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2Ugcm91dGluZyBwcm9jZWR1cmUgdXNpbmcgdGhlIGdpdmVuIHNlc3Npb24uXG4gICAqIEBwYXJhbSB7U2Vzc2lvbn0gc2Vzc2lvbiB0aGUgc2Vzc2lvbiB0byB1c2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb3V0ZXJBZGRyZXNzIHRoZSBVUkwgb2YgdGhlIHJvdXRlci5cbiAgICogQHJldHVybiB7UHJvbWlzZTxSZWNvcmRbXT59IHByb21pc2UgcmVzb2x2ZWQgd2l0aCByZWNvcmRzIHJldHVybmVkIGJ5IHRoZSBwcm9jZWR1cmUgY2FsbCBvciBudWxsIGlmXG4gICAqIGNvbm5lY3Rpb24gZXJyb3IgaGFwcGVuZWQuXG4gICAqL1xuICBjYWxsUm91dGluZ1Byb2NlZHVyZShzZXNzaW9uLCByb3V0ZXJBZGRyZXNzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGxBdmFpbGFibGVSb3V0aW5nUHJvY2VkdXJlKHNlc3Npb24pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIHNlc3Npb24uY2xvc2UoKTtcbiAgICAgIHJldHVybiByZXN1bHQucmVjb3JkcztcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBpZiAoZXJyb3IuY29kZSA9PT0gUFJPQ0VEVVJFX05PVF9GT1VORF9DT0RFKSB7XG4gICAgICAgIC8vIHRocm93IHdoZW4gZ2V0U2VydmVycyBwcm9jZWR1cmUgbm90IGZvdW5kIGJlY2F1c2UgdGhpcyBpcyBjbGVhcmx5IGEgY29uZmlndXJhdGlvbiBpc3N1ZVxuICAgICAgICB0aHJvdyBuZXdFcnJvcignU2VydmVyICcgKyByb3V0ZXJBZGRyZXNzICsgJyBjb3VsZCBub3QgcGVyZm9ybSByb3V0aW5nLiAnICtcbiAgICAgICAgICAnTWFrZSBzdXJlIHlvdSBhcmUgY29ubmVjdGluZyB0byBhIGNhdXNhbCBjbHVzdGVyJywgU0VSVklDRV9VTkFWQUlMQUJMRSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gbm90aGluZyB3aGVuIGZhaWxlZCB0byBjb25uZWN0IGJlY2F1c2UgY29kZSBoaWdoZXIgaW4gdGhlIGNhbGxzdGFjayBpcyBzdGlsbCBhYmxlIHRvIHJldHJ5IHdpdGggYVxuICAgICAgLy8gZGlmZmVyZW50IHNlc3Npb24gdG93YXJkcyBhIGRpZmZlcmVudCByb3V0ZXJcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICB9XG5cbiAgcGFyc2VUdGwocmVjb3JkLCByb3V0ZXJBZGRyZXNzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG5vdyA9IGludChEYXRlLm5vdygpKTtcbiAgICAgIGNvbnN0IGV4cGlyZXMgPSByZWNvcmQuZ2V0KCd0dGwnKS5tdWx0aXBseSgxMDAwKS5hZGQobm93KTtcbiAgICAgIC8vIGlmIHRoZSBzZXJ2ZXIgdXNlcyBhIHJlYWxseSBiaWcgZXhwaXJlIHRpbWUgbGlrZSBMb25nLk1BWF9WQUxVRSB0aGlzIG1heSBoYXZlIG92ZXJmbG93ZWRcbiAgICAgIGlmIChleHBpcmVzLmxlc3NUaGFuKG5vdykpIHtcbiAgICAgICAgcmV0dXJuIEludGVnZXIuTUFYX1ZBTFVFO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4cGlyZXM7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ld0Vycm9yKFxuICAgICAgICAnVW5hYmxlIHRvIHBhcnNlIFRUTCBlbnRyeSBmcm9tIHJvdXRlciAnICsgcm91dGVyQWRkcmVzcyArICcgZnJvbSByZWNvcmQ6XFxuJyArIEpTT04uc3RyaW5naWZ5KHJlY29yZCksXG4gICAgICAgIFBST1RPQ09MX0VSUk9SKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZVNlcnZlcnMocmVjb3JkLCByb3V0ZXJBZGRyZXNzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNlcnZlcnMgPSByZWNvcmQuZ2V0KCdzZXJ2ZXJzJyk7XG5cbiAgICAgIGNvbnN0IHJvdXRlcnMgPSBuZXcgUm91bmRSb2JpbkFycmF5KCk7XG4gICAgICBjb25zdCByZWFkZXJzID0gbmV3IFJvdW5kUm9iaW5BcnJheSgpO1xuICAgICAgY29uc3Qgd3JpdGVycyA9IG5ldyBSb3VuZFJvYmluQXJyYXkoKTtcblxuICAgICAgc2VydmVycy5mb3JFYWNoKHNlcnZlciA9PiB7XG4gICAgICAgIGNvbnN0IHJvbGUgPSBzZXJ2ZXJbJ3JvbGUnXTtcbiAgICAgICAgY29uc3QgYWRkcmVzc2VzID0gc2VydmVyWydhZGRyZXNzZXMnXTtcblxuICAgICAgICBpZiAocm9sZSA9PT0gJ1JPVVRFJykge1xuICAgICAgICAgIHJvdXRlcnMucHVzaEFsbChhZGRyZXNzZXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdXUklURScpIHtcbiAgICAgICAgICB3cml0ZXJzLnB1c2hBbGwoYWRkcmVzc2VzKTtcbiAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAnUkVBRCcpIHtcbiAgICAgICAgICByZWFkZXJzLnB1c2hBbGwoYWRkcmVzc2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXdFcnJvcignVW5rbm93biBzZXJ2ZXIgcm9sZSBcIicgKyByb2xlICsgJ1wiJywgUFJPVE9DT0xfRVJST1IpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcm91dGVyczogcm91dGVycyxcbiAgICAgICAgcmVhZGVyczogcmVhZGVycyxcbiAgICAgICAgd3JpdGVyczogd3JpdGVyc1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGlnbm9yZSkge1xuICAgICAgdGhyb3cgbmV3RXJyb3IoXG4gICAgICAgICdVbmFibGUgdG8gcGFyc2Ugc2VydmVycyBlbnRyeSBmcm9tIHJvdXRlciAnICsgcm91dGVyQWRkcmVzcyArICcgZnJvbSByZWNvcmQ6XFxuJyArIEpTT04uc3RyaW5naWZ5KHJlY29yZCksXG4gICAgICAgIFBST1RPQ09MX0VSUk9SKTtcbiAgICB9XG4gIH1cblxuICBfY2FsbEF2YWlsYWJsZVJvdXRpbmdQcm9jZWR1cmUoc2Vzc2lvbikge1xuICAgIHJldHVybiBzZXNzaW9uLl9ydW4obnVsbCwgbnVsbCwgKGNvbm5lY3Rpb24sIHN0cmVhbU9ic2VydmVyKSA9PiB7XG4gICAgICBjb25zdCBzZXJ2ZXJWZXJzaW9uU3RyaW5nID0gY29ubmVjdGlvbi5zZXJ2ZXIudmVyc2lvbjtcbiAgICAgIGNvbnN0IHNlcnZlclZlcnNpb24gPSBTZXJ2ZXJWZXJzaW9uLmZyb21TdHJpbmcoc2VydmVyVmVyc2lvblN0cmluZyk7XG5cbiAgICAgIGlmIChzZXJ2ZXJWZXJzaW9uLmNvbXBhcmVUbyhWRVJTSU9OXzNfMl8wKSA+PSAwKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtbR0VUX1JPVVRJTkdfVEFCTEVfUEFSQU1dOiB0aGlzLl9yb3V0aW5nQ29udGV4dH07XG4gICAgICAgIGNvbm5lY3Rpb24ucnVuKENBTExfR0VUX1JPVVRJTkdfVEFCTEUsIHBhcmFtcywgc3RyZWFtT2JzZXJ2ZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29ubmVjdGlvbi5ydW4oQ0FMTF9HRVRfU0VSVkVSUywge30sIHN0cmVhbU9ic2VydmVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7YXNzZXJ0U3RyaW5nfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCBTRVJWRVJfVkVSU0lPTl9SRUdFWCA9IG5ldyBSZWdFeHAoJ14oTmVvNGovKT8oXFxcXGQrKVxcXFwuKFxcXFxkKykoPzpcXFxcLik/KFxcXFxkKikoXFxcXC58LXxcXFxcKyk/KFswLTlBLVphLXotLl0qKT8kJyk7XG5cbmNsYXNzIFNlcnZlclZlcnNpb24ge1xuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1ham9yIHRoZSBtYWpvciB2ZXJzaW9uIG51bWJlci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pbm9yIHRoZSBtaW5vciB2ZXJzaW9uIG51bWJlci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHBhdGNoIHRoZSBwYXRjaCB2ZXJzaW9uIG51bWJlci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG1ham9yLCBtaW5vciwgcGF0Y2gpIHtcbiAgICB0aGlzLm1ham9yID0gbWFqb3I7XG4gICAgdGhpcy5taW5vciA9IG1pbm9yO1xuICAgIHRoaXMucGF0Y2ggPSBwYXRjaDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBnaXZlbiBzdHJpbmcgdG8gYSB7QGxpbmsgU2VydmVyVmVyc2lvbn0gb2JqZWN0LlxuICAgKiBAcGFyYW0gdmVyc2lvblN0ciB0aGUgc3RyaW5nIHRvIHBhcnNlLlxuICAgKiBAcmV0dXJuIHtTZXJ2ZXJWZXJzaW9ufSB2ZXJzaW9uIGZvciB0aGUgZ2l2ZW4gc3RyaW5nLlxuICAgKiBAdGhyb3dzIEVycm9yIGlmIGdpdmVuIHN0cmluZyBjYW4ndCBiZSBwYXJzZWQuXG4gICAqL1xuICBzdGF0aWMgZnJvbVN0cmluZyh2ZXJzaW9uU3RyKSB7XG4gICAgaWYgKCF2ZXJzaW9uU3RyKSB7XG4gICAgICByZXR1cm4gbmV3IFNlcnZlclZlcnNpb24oMywgMCwgMCk7XG4gICAgfVxuXG4gICAgYXNzZXJ0U3RyaW5nKHZlcnNpb25TdHIsICdOZW80aiB2ZXJzaW9uIHN0cmluZycpO1xuXG4gICAgY29uc3QgdmVyc2lvbiA9IHZlcnNpb25TdHIubWF0Y2goU0VSVkVSX1ZFUlNJT05fUkVHRVgpO1xuICAgIGlmICghdmVyc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnBhcnNhYmxlIE5lbzRqIHZlcnNpb246ICR7dmVyc2lvblN0cn1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYWpvciA9IHBhcnNlSW50U3RyaWN0KHZlcnNpb25bMl0pO1xuICAgIGNvbnN0IG1pbm9yID0gcGFyc2VJbnRTdHJpY3QodmVyc2lvblszXSk7XG4gICAgY29uc3QgcGF0Y2ggPSBwYXJzZUludFN0cmljdCh2ZXJzaW9uWzRdIHx8IDApO1xuXG4gICAgcmV0dXJuIG5ldyBTZXJ2ZXJWZXJzaW9uKG1ham9yLCBtaW5vciwgcGF0Y2gpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgdGhpcyB2ZXJzaW9uIHRvIHRoZSBnaXZlbiBvbmUuXG4gICAqIEBwYXJhbSB7U2VydmVyVmVyc2lvbn0gb3RoZXIgdGhlIHZlcnNpb24gdG8gY29tcGFyZSB3aXRoLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IHZhbHVlIDAgaWYgdGhpcyB2ZXJzaW9uIGlzIHRoZSBzYW1lIGFzIHRoZSBnaXZlbiBvbmUsIHZhbHVlIGxlc3MgdGhlbiAwIHdoZW4gdGhpcyB2ZXJzaW9uXG4gICAqIHdhcyByZWxlYXNlZCBlYXJsaWVyIHRoYW4gdGhlIGdpdmVuIG9uZSBhbmQgdmFsdWUgZ3JlYXRlciB0aGVuIDAgd2hlbiB0aGlzIHZlcnNpb24gd2FzIHJlbGVhc2VkIGFmdGVyXG4gICAqIHRoYW4gdGhlIGdpdmVuIG9uZS5cbiAgICovXG4gIGNvbXBhcmVUbyhvdGhlcikge1xuICAgIGxldCByZXN1bHQgPSBjb21wYXJlSW50cyh0aGlzLm1ham9yLCBvdGhlci5tYWpvcik7XG4gICAgaWYgKHJlc3VsdCA9PT0gMCkge1xuICAgICAgcmVzdWx0ID0gY29tcGFyZUludHModGhpcy5taW5vciwgb3RoZXIubWlub3IpO1xuICAgICAgaWYgKHJlc3VsdCA9PT0gMCkge1xuICAgICAgICByZXN1bHQgPSBjb21wYXJlSW50cyh0aGlzLnBhdGNoLCBvdGhlci5wYXRjaCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VJbnRTdHJpY3Qoc3RyLCBuYW1lKSB7XG4gIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQoc3RyKTtcbiAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5wYXJzYWJsZSBudW1iZXIgJHtuYW1lfTogJyR7c3RyfSdgKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVJbnRzKHgsIHkpIHtcbiAgcmV0dXJuICh4IDwgeSkgPyAtMSA6ICgoeCA9PT0geSkgPyAwIDogMSk7XG59XG5cbmNvbnN0IFZFUlNJT05fM18yXzAgPSBuZXcgU2VydmVyVmVyc2lvbigzLCAyLCAwKTtcblxuZXhwb3J0IHtcbiAgU2VydmVyVmVyc2lvbixcbiAgVkVSU0lPTl8zXzJfMFxufTtcblxuXG5cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBSZWNvcmQgZnJvbSBcIi4uL3JlY29yZFwiO1xuXG4vKipcbiAqIEhhbmRsZXMgYSBSVU4vUFVMTF9BTEwsIG9yIFJVTi9ESVNDQVJEX0FMTCByZXF1ZXN0cywgbWFwcyB0aGUgcmVzcG9uc2VzXG4gKiBpbiBhIHdheSB0aGF0IGEgdXNlci1wcm92aWRlZCBvYnNlcnZlciBjYW4gc2VlIHRoZXNlIGFzIGEgY2xlYW4gU3RyZWFtXG4gKiBvZiByZWNvcmRzLlxuICogVGhpcyBjbGFzcyB3aWxsIHF1ZXVlIHVwIGluY29taW5nIG1lc3NhZ2VzIHVudGlsIGEgdXNlci1wcm92aWRlZCBvYnNlcnZlclxuICogZm9yIHRoZSBpbmNvbWluZyBzdHJlYW0gaXMgcmVnaXN0ZXJlZC4gVGh1cywgd2Uga2VlcCBmaWVsZHMgYXJvdW5kXG4gKiBmb3IgdHJhY2tpbmcgaGVhZC9yZWNvcmRzL3RhaWwuIFRoZXNlIGFyZSBvbmx5IHVzZWQgaWYgdGhlcmUgaXMgbm9cbiAqIG9ic2VydmVyIHJlZ2lzdGVyZWQuXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqL1xuY2xhc3MgU3RyZWFtT2JzZXJ2ZXIge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSBlcnJvclRyYW5zZm9ybWVyIG9wdGlvbmFsIGNhbGxiYWNrIHRvIGJlIHVzZWQgZm9yIGFkZGluZyBhZGRpdGlvbmFsIGxvZ2ljIG9uIGVycm9yXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlcnJvclRyYW5zZm9ybWVyID0gKGVycikgPT4ge3JldHVybiBlcnJ9KSB7XG4gICAgdGhpcy5fZmllbGRLZXlzID0gbnVsbDtcbiAgICB0aGlzLl9maWVsZExvb2t1cCA9IG51bGw7XG4gICAgdGhpcy5fcXVldWVkUmVjb3JkcyA9IFtdO1xuICAgIHRoaXMuX3RhaWwgPSBudWxsO1xuICAgIHRoaXMuX2Vycm9yID0gbnVsbDtcbiAgICB0aGlzLl9oYXNGYWlsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9lcnJvclRyYW5zZm9ybWVyID0gZXJyb3JUcmFuc2Zvcm1lcjtcbiAgICB0aGlzLl9vYnNlcnZlciA9IG51bGw7XG4gICAgdGhpcy5fY29ubiA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCBiZSBjYWxsZWQgb24gZXZlcnkgcmVjb3JkIHRoYXQgY29tZXMgaW4gYW5kIHRyYW5zZm9ybSBhIHJhdyByZWNvcmRcbiAgICogdG8gYSBPYmplY3QuIElmIHVzZXItcHJvdmlkZWQgb2JzZXJ2ZXIgaXMgcHJlc2VudCwgcGFzcyB0cmFuc2Zvcm1lZCByZWNvcmRcbiAgICogdG8gaXQncyBvbk5leHQgbWV0aG9kLCBvdGhlcndpc2UsIHB1c2ggdG8gcmVjb3JkIHF1ZS5cbiAgICogQHBhcmFtIHtBcnJheX0gcmF3UmVjb3JkIC0gQW4gYXJyYXkgd2l0aCB0aGUgcmF3IHJlY29yZFxuICAgKi9cbiAgb25OZXh0KHJhd1JlY29yZCkge1xuICAgIGxldCByZWNvcmQgPSBuZXcgUmVjb3JkKHRoaXMuX2ZpZWxkS2V5cywgcmF3UmVjb3JkLCB0aGlzLl9maWVsZExvb2t1cCk7XG4gICAgaWYoIHRoaXMuX29ic2VydmVyICkge1xuICAgICAgdGhpcy5fb2JzZXJ2ZXIub25OZXh0KCByZWNvcmQgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVldWVkUmVjb3Jkcy5wdXNoKCByZWNvcmQgKTtcbiAgICB9XG4gIH1cblxuICBvbkNvbXBsZXRlZChtZXRhKSB7XG4gICAgaWYoIHRoaXMuX2ZpZWxkS2V5cyA9PT0gbnVsbCApIHtcbiAgICAgIC8vIFN0cmVhbSBoZWFkZXIsIGJ1aWxkIGEgbmFtZS0+aW5kZXggZmllbGQgbG9va3VwIHRhYmxlXG4gICAgICAvLyB0byBiZSB1c2VkIGJ5IHJlY29yZHMuIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHRvIG1ha2UgaXRcbiAgICAgIC8vIGZhc3RlciB0byBsb29rIHVwIGZpZWxkcyBpbiBhIHJlY29yZCBieSBuYW1lLCByYXRoZXIgdGhhbiBieSBpbmRleC5cbiAgICAgIC8vIFNpbmNlIHRoZSByZWNvcmRzIHdlIGdldCBiYWNrIHZpYSBCb2x0IGFyZSBqdXN0IGFycmF5cyBvZiB2YWx1ZXMuXG4gICAgICB0aGlzLl9maWVsZEtleXMgPSBbXTtcbiAgICAgIHRoaXMuX2ZpZWxkTG9va3VwID0ge307XG4gICAgICBpZiggbWV0YS5maWVsZHMgJiYgbWV0YS5maWVsZHMubGVuZ3RoID4gMCApIHtcbiAgICAgICAgdGhpcy5fZmllbGRLZXlzID0gbWV0YS5maWVsZHM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWV0YS5maWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0aGlzLl9maWVsZExvb2t1cFttZXRhLmZpZWxkc1tpXV0gPSBpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVuZCBvZiBzdHJlYW1cbiAgICAgIGlmKCB0aGlzLl9vYnNlcnZlciApIHtcbiAgICAgICAgdGhpcy5fb2JzZXJ2ZXIub25Db21wbGV0ZWQoIG1ldGEgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3RhaWwgPSBtZXRhO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlc29sdmVDb25uZWN0aW9uKGNvbm4pIHtcbiAgICB0aGlzLl9jb25uID0gY29ubjtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIGJlIGNhbGxlZCBvbiBlcnJvcnMuXG4gICAqIElmIHVzZXItcHJvdmlkZWQgb2JzZXJ2ZXIgaXMgcHJlc2VudCwgcGFzcyB0aGUgZXJyb3JcbiAgICogdG8gaXQncyBvbkVycm9yIG1ldGhvZCwgb3RoZXJ3aXNlIHNldCBpbnN0YW5jZSB2YXJpYWJsZSBfZXJyb3IuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlcnJvciAtIEFuIGVycm9yIG9iamVjdFxuICAgKi9cbiAgb25FcnJvcihlcnJvcikge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVkRXJyb3IgPSB0aGlzLl9lcnJvclRyYW5zZm9ybWVyKGVycm9yLCB0aGlzLl9jb25uKTtcbiAgICBpZih0aGlzLl9oYXNGYWlsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faGFzRmFpbGVkID0gdHJ1ZTtcbiAgICBpZiggdGhpcy5fb2JzZXJ2ZXIgKSB7XG4gICAgICBpZiggdGhpcy5fb2JzZXJ2ZXIub25FcnJvciApIHtcbiAgICAgICAgdGhpcy5fb2JzZXJ2ZXIub25FcnJvciggdHJhbnNmb3JtZWRFcnJvciApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coIHRyYW5zZm9ybWVkRXJyb3IgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZXJyb3IgPSB0cmFuc2Zvcm1lZEVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gZXZlbnRzIHdpdGggcHJvdmlkZWQgb2JzZXJ2ZXIuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYnNlcnZlciAtIE9ic2VydmVyIG9iamVjdFxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHJlY29yZDogT2JqZWN0KX0gb2JzZXJ2ZXIub25OZXh0IC0gSGFuZGxlIHJlY29yZHMsIG9uZSBieSBvbmUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWV0YWRhdGE6IE9iamVjdCl9IG9ic2VydmVyLm9uQ29tcGxldGUgLSBIYW5kbGUgc3RyZWFtIHRhaWwsIHRoZSBtZXRhZGF0YS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihlcnJvcjogT2JqZWN0KX0gb2JzZXJ2ZXIub25FcnJvciAtIEhhbmRsZSBlcnJvcnMuXG4gICAqL1xuICBzdWJzY3JpYmUoIG9ic2VydmVyICkge1xuICAgIGlmKCB0aGlzLl9lcnJvciApIHtcbiAgICAgIG9ic2VydmVyLm9uRXJyb3IodGhpcy5fZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiggdGhpcy5fcXVldWVkUmVjb3Jkcy5sZW5ndGggPiAwICkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9xdWV1ZWRSZWNvcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG9ic2VydmVyLm9uTmV4dCggdGhpcy5fcXVldWVkUmVjb3Jkc1tpXSApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiggdGhpcy5fdGFpbCApIHtcbiAgICAgIG9ic2VydmVyLm9uQ29tcGxldGVkKCB0aGlzLl90YWlsICk7XG4gICAgfVxuICAgIHRoaXMuX29ic2VydmVyID0gb2JzZXJ2ZXI7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RyZWFtT2JzZXJ2ZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtuZXdFcnJvciwgU0VSVklDRV9VTkFWQUlMQUJMRSwgU0VTU0lPTl9FWFBJUkVEfSBmcm9tICcuLi9lcnJvcic7XG5cbmNvbnN0IERFRkFVTFRfTUFYX1JFVFJZX1RJTUVfTVMgPSAzMCAqIDEwMDA7IC8vIDMwIHNlY29uZHNcbmNvbnN0IERFRkFVTFRfSU5JVElBTF9SRVRSWV9ERUxBWV9NUyA9IDEwMDA7IC8vIDEgc2Vjb25kc1xuY29uc3QgREVGQVVMVF9SRVRSWV9ERUxBWV9NVUxUSVBMSUVSID0gMi4wO1xuY29uc3QgREVGQVVMVF9SRVRSWV9ERUxBWV9KSVRURVJfRkFDVE9SID0gMC4yO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUcmFuc2FjdGlvbkV4ZWN1dG9yIHtcblxuICBjb25zdHJ1Y3RvcihtYXhSZXRyeVRpbWVNcywgaW5pdGlhbFJldHJ5RGVsYXlNcywgbXVsdGlwbGllciwgaml0dGVyRmFjdG9yKSB7XG4gICAgdGhpcy5fbWF4UmV0cnlUaW1lTXMgPSBfdmFsdWVPckRlZmF1bHQobWF4UmV0cnlUaW1lTXMsIERFRkFVTFRfTUFYX1JFVFJZX1RJTUVfTVMpO1xuICAgIHRoaXMuX2luaXRpYWxSZXRyeURlbGF5TXMgPSBfdmFsdWVPckRlZmF1bHQoaW5pdGlhbFJldHJ5RGVsYXlNcywgREVGQVVMVF9JTklUSUFMX1JFVFJZX0RFTEFZX01TKTtcbiAgICB0aGlzLl9tdWx0aXBsaWVyID0gX3ZhbHVlT3JEZWZhdWx0KG11bHRpcGxpZXIsIERFRkFVTFRfUkVUUllfREVMQVlfTVVMVElQTElFUik7XG4gICAgdGhpcy5faml0dGVyRmFjdG9yID0gX3ZhbHVlT3JEZWZhdWx0KGppdHRlckZhY3RvciwgREVGQVVMVF9SRVRSWV9ERUxBWV9KSVRURVJfRkFDVE9SKTtcblxuICAgIHRoaXMuX2luRmxpZ2h0VGltZW91dElkcyA9IFtdO1xuXG4gICAgdGhpcy5fdmVyaWZ5QWZ0ZXJDb25zdHJ1Y3Rpb24oKTtcbiAgfVxuXG4gIGV4ZWN1dGUodHJhbnNhY3Rpb25DcmVhdG9yLCB0cmFuc2FjdGlvbldvcmspIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fZXhlY3V0ZVRyYW5zYWN0aW9uSW5zaWRlUHJvbWlzZSh0cmFuc2FjdGlvbkNyZWF0b3IsIHRyYW5zYWN0aW9uV29yaywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBjb25zdCByZXRyeVN0YXJ0VGltZU1zID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IHJldHJ5RGVsYXlNcyA9IHRoaXMuX2luaXRpYWxSZXRyeURlbGF5TXM7XG4gICAgICByZXR1cm4gdGhpcy5fcmV0cnlUcmFuc2FjdGlvblByb21pc2UodHJhbnNhY3Rpb25DcmVhdG9yLCB0cmFuc2FjdGlvbldvcmssIGVycm9yLCByZXRyeVN0YXJ0VGltZU1zLCByZXRyeURlbGF5TXMpO1xuICAgIH0pO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgLy8gY2FuY2VsIGFsbCBleGlzdGluZyB0aW1lb3V0cyB0byBwcmV2ZW50IGZ1cnRoZXIgcmV0cmllc1xuICAgIHRoaXMuX2luRmxpZ2h0VGltZW91dElkcy5mb3JFYWNoKHRpbWVvdXRJZCA9PiBjbGVhclRpbWVvdXQodGltZW91dElkKSk7XG4gICAgdGhpcy5faW5GbGlnaHRUaW1lb3V0SWRzID0gW107XG4gIH1cblxuICBfcmV0cnlUcmFuc2FjdGlvblByb21pc2UodHJhbnNhY3Rpb25DcmVhdG9yLCB0cmFuc2FjdGlvbldvcmssIGVycm9yLCByZXRyeVN0YXJ0VGltZSwgcmV0cnlEZWxheU1zKSB7XG4gICAgY29uc3QgZWxhcHNlZFRpbWVNcyA9IERhdGUubm93KCkgLSByZXRyeVN0YXJ0VGltZTtcblxuICAgIGlmIChlbGFwc2VkVGltZU1zID4gdGhpcy5fbWF4UmV0cnlUaW1lTXMgfHwgIVRyYW5zYWN0aW9uRXhlY3V0b3IuX2NhblJldHJ5T24oZXJyb3IpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBuZXh0UmV0cnlUaW1lID0gdGhpcy5fY29tcHV0ZURlbGF5V2l0aEppdHRlcihyZXRyeURlbGF5TXMpO1xuICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vIGZpbHRlciBvdXQgdGhpcyB0aW1lb3V0SWQgd2hlbiB0aW1lIGhhcyBjb21lIGFuZCBmdW5jdGlvbiBpcyBiZWluZyBleGVjdXRlZFxuICAgICAgICB0aGlzLl9pbkZsaWdodFRpbWVvdXRJZHMgPSB0aGlzLl9pbkZsaWdodFRpbWVvdXRJZHMuZmlsdGVyKGlkID0+IGlkICE9PSB0aW1lb3V0SWQpO1xuICAgICAgICB0aGlzLl9leGVjdXRlVHJhbnNhY3Rpb25JbnNpZGVQcm9taXNlKHRyYW5zYWN0aW9uQ3JlYXRvciwgdHJhbnNhY3Rpb25Xb3JrLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSwgbmV4dFJldHJ5VGltZSk7XG4gICAgICAvLyBhZGQgbmV3bHkgY3JlYXRlZCB0aW1lb3V0SWQgdG8gdGhlIGxpc3Qgb2YgYWxsIGluLWZsaWdodCB0aW1lb3V0c1xuICAgICAgdGhpcy5faW5GbGlnaHRUaW1lb3V0SWRzLnB1c2godGltZW91dElkKTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBjb25zdCBuZXh0UmV0cnlEZWxheU1zID0gcmV0cnlEZWxheU1zICogdGhpcy5fbXVsdGlwbGllcjtcbiAgICAgIHJldHVybiB0aGlzLl9yZXRyeVRyYW5zYWN0aW9uUHJvbWlzZSh0cmFuc2FjdGlvbkNyZWF0b3IsIHRyYW5zYWN0aW9uV29yaywgZXJyb3IsIHJldHJ5U3RhcnRUaW1lLCBuZXh0UmV0cnlEZWxheU1zKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9leGVjdXRlVHJhbnNhY3Rpb25JbnNpZGVQcm9taXNlKHRyYW5zYWN0aW9uQ3JlYXRvciwgdHJhbnNhY3Rpb25Xb3JrLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHggPSB0cmFuc2FjdGlvbkNyZWF0b3IoKTtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uV29ya1Jlc3VsdCA9IHRyYW5zYWN0aW9uV29yayh0eCk7XG5cbiAgICAgIC8vIHVzZXIgZGVmaW5lZCBjYWxsYmFjayBpcyBzdXBwb3NlZCB0byByZXR1cm4gYSBwcm9taXNlLCBidXQgaXQgbWlnaHQgbm90OyBzbyB0byBwcm90ZWN0IGFnYWluc3QgYW5cbiAgICAgIC8vIGluY29ycmVjdCBBUEkgdXNhZ2Ugd2Ugd3JhcCB0aGUgcmV0dXJuZWQgdmFsdWUgd2l0aCBhIHJlc29sdmVkIHByb21pc2U7IHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxuICAgICAgLy8gdmFsaWRhdGlvbiBzdGVwIHdpdGhvdXQgdHlwZSBjaGVja3NcbiAgICAgIGNvbnN0IHJlc3VsdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodHJhbnNhY3Rpb25Xb3JrUmVzdWx0KTtcblxuICAgICAgcmVzdWx0UHJvbWlzZS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIGlmICh0eC5pc09wZW4oKSkge1xuICAgICAgICAgIC8vIHRyYW5zYWN0aW9uIHdvcmsgcmV0dXJuZWQgcmVzb2x2ZWQgcHJvbWlzZSBhbmQgdHJhbnNhY3Rpb24gaGFzIG5vdCBiZWVuIGNvbW1pdHRlZC9yb2xsZWQgYmFja1xuICAgICAgICAgIC8vIHRyeSB0byBjb21taXQgdGhlIHRyYW5zYWN0aW9uXG4gICAgICAgICAgdHguY29tbWl0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAvLyB0cmFuc2FjdGlvbiB3YXMgY29tbWl0dGVkLCByZXR1cm4gcmVzdWx0IHRvIHRoZSB1c2VyXG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb24gZmFpbGVkIHRvIGNvbW1pdCwgcHJvcGFnYXRlIHRoZSBmYWlsdXJlXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRyYW5zYWN0aW9uIHdvcmsgcmV0dXJuZWQgcmVzb2x2ZWQgcHJvbWlzZSBhbmQgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeSBjb21taXR0ZWQvcm9sbGVkIGJhY2tcbiAgICAgICAgICAvLyByZXR1cm4gdGhlIHJlc3VsdCByZXR1cm5lZCBieSBnaXZlbiB0cmFuc2FjdGlvbiB3b3JrXG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIC8vIHRyYW5zYWN0aW9uIHdvcmsgcmV0dXJuZWQgcmVqZWN0ZWQgcHJvbWlzZSwgcHJvcGFnYXRlIHRoZSBmYWlsdXJlXG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9KTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIF9jb21wdXRlRGVsYXlXaXRoSml0dGVyKGRlbGF5TXMpIHtcbiAgICBjb25zdCBqaXR0ZXIgPSAoZGVsYXlNcyAqIHRoaXMuX2ppdHRlckZhY3Rvcik7XG4gICAgY29uc3QgbWluID0gZGVsYXlNcyAtIGppdHRlcjtcbiAgICBjb25zdCBtYXggPSBkZWxheU1zICsgaml0dGVyO1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikgKyBtaW47XG4gIH1cblxuICBzdGF0aWMgX2NhblJldHJ5T24oZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgJiYgZXJyb3IuY29kZSAmJlxuICAgICAgKGVycm9yLmNvZGUgPT09IFNFUlZJQ0VfVU5BVkFJTEFCTEUgfHxcbiAgICAgIGVycm9yLmNvZGUgPT09IFNFU1NJT05fRVhQSVJFRCB8fFxuICAgICAgdGhpcy5faXNUcmFuc2llbnRFcnJvcihlcnJvcikpO1xuICB9XG5cbiAgc3RhdGljIF9pc1RyYW5zaWVudEVycm9yKGVycm9yKSB7XG4gICAgLy8gUmV0cmllcyBzaG91bGQgbm90IGhhcHBlbiB3aGVuIHRyYW5zYWN0aW9uIHdhcyBleHBsaWNpdGx5IHRlcm1pbmF0ZWQgYnkgdGhlIHVzZXIuXG4gICAgLy8gVGVybWluYXRpb24gb2YgdHJhbnNhY3Rpb24gbWlnaHQgcmVzdWx0IGluIHR3byBkaWZmZXJlbnQgZXJyb3IgY29kZXMgZGVwZW5kaW5nIG9uIHdoZXJlIGl0IHdhc1xuICAgIC8vIHRlcm1pbmF0ZWQuIFRoZXNlIGFyZSByZWFsbHkgY2xpZW50IGVycm9ycyBidXQgY2xhc3NpZmljYXRpb24gb24gdGhlIHNlcnZlciBpcyBub3QgZW50aXJlbHkgY29ycmVjdCBhbmRcbiAgICAvLyB0aGV5IGFyZSBjbGFzc2lmaWVkIGFzIHRyYW5zaWVudC5cbiAgICBcbiAgICBjb25zdCBjb2RlID0gZXJyb3IuY29kZTtcbiAgICBpZiAoY29kZS5pbmRleE9mKCdUcmFuc2llbnRFcnJvcicpID49IDApIHtcbiAgICAgIGlmIChjb2RlID09PSAnTmVvLlRyYW5zaWVudEVycm9yLlRyYW5zYWN0aW9uLlRlcm1pbmF0ZWQnIHx8IGNvZGUgPT09ICdOZW8uVHJhbnNpZW50RXJyb3IuVHJhbnNhY3Rpb24uTG9ja0NsaWVudFN0b3BwZWQnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBfdmVyaWZ5QWZ0ZXJDb25zdHJ1Y3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX21heFJldHJ5VGltZU1zIDwgMCkge1xuICAgICAgdGhyb3cgbmV3RXJyb3IoJ01heCByZXRyeSB0aW1lIHNob3VsZCBiZSA+PSAwOiAnICsgdGhpcy5fbWF4UmV0cnlUaW1lTXMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5faW5pdGlhbFJldHJ5RGVsYXlNcyA8IDApIHtcbiAgICAgIHRocm93IG5ld0Vycm9yKCdJbml0aWFsIHJldHJ5IGRlbGF5IHNob3VsZCA+PSAwOiAnICsgdGhpcy5faW5pdGlhbFJldHJ5RGVsYXlNcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9tdWx0aXBsaWVyIDwgMS4wKSB7XG4gICAgICB0aHJvdyBuZXdFcnJvcignTXVsdGlwbGllciBzaG91bGQgYmUgPj0gMS4wOiAnICsgdGhpcy5fbXVsdGlwbGllcik7XG4gICAgfVxuICAgIGlmICh0aGlzLl9qaXR0ZXJGYWN0b3IgPCAwIHx8IHRoaXMuX2ppdHRlckZhY3RvciA+IDEpIHtcbiAgICAgIHRocm93IG5ld0Vycm9yKCdKaXR0ZXIgZmFjdG9yIHNob3VsZCBiZSBpbiBbMC4wLCAxLjBdOiAnICsgdGhpcy5faml0dGVyRmFjdG9yKTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIF92YWx1ZU9yRGVmYXVsdCh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZGVmYXVsdFZhbHVlO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjcm9zcy1wbGF0Zm9ybSBVVEYtOCBlbmNvZGVyIGFuZCBkZWNvZGVyIHRoYXQgd29ya3Ncbi8vIHdpdGggdGhlIEJ1ZmZlciBBUEkgZGVmaW5lZCBpbiBidWYuanNcblxuaW1wb3J0IHthbGxvYywgTm9kZUJ1ZmZlciwgSGVhcEJ1ZmZlciwgQ29tYmluZWRCdWZmZXJ9IGZyb20gXCIuL2J1ZlwiO1xuaW1wb3J0IHtTdHJpbmdEZWNvZGVyfSBmcm9tICdzdHJpbmdfZGVjb2Rlcic7XG5pbXBvcnQge25ld0Vycm9yfSBmcm9tICcuLy4uL2Vycm9yJztcbmxldCBwbGF0Zm9ybU9iaiA9IHt9O1xuXG5cbnRyeSB7XG4gIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaXMgJ2J1ZmZlcicgaXMgbm90IGF2YWlsYWJsZVxuICByZXF1aXJlLnJlc29sdmUoXCJidWZmZXJcIik7XG4gIGxldCBkZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoJ3V0ZjgnKTtcbiAgbGV0IG5vZGUgPSByZXF1aXJlKFwiYnVmZmVyXCIpO1xuXG4gIHBsYXRmb3JtT2JqID0ge1xuICAgIFwiZW5jb2RlXCI6IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHJldHVybiBuZXcgTm9kZUJ1ZmZlcihuZXcgbm9kZS5CdWZmZXIoc3RyLCBcIlVURi04XCIpKTtcbiAgICB9LFxuICAgIFwiZGVjb2RlXCI6IGZ1bmN0aW9uIChidWZmZXIsIGxlbmd0aCkge1xuICAgICAgaWYgKGJ1ZmZlciBpbnN0YW5jZW9mIE5vZGVCdWZmZXIpIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gYnVmZmVyLnBvc2l0aW9uLFxuICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgbGVuZ3RoO1xuICAgICAgICBidWZmZXIucG9zaXRpb24gPSBNYXRoLm1pbihlbmQsIGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gYnVmZmVyLl9idWZmZXIudG9TdHJpbmcoJ3V0ZjgnLCBzdGFydCwgZW5kKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGJ1ZmZlciBpbnN0YW5jZW9mIENvbWJpbmVkQnVmZmVyKSB7XG4gICAgICAgIGxldCBvdXQgPSBzdHJlYW1EZWNvZGVDb21iaW5lZEJ1ZmZlcihidWZmZXIsIGxlbmd0aCxcbiAgICAgICAgICAocGFydEJ1ZmZlcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRlY29kZXIud3JpdGUocGFydEJ1ZmZlci5fYnVmZmVyKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkZWNvZGVyLmVuZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXdFcnJvcihcIkRvbid0IGtub3cgaG93IHRvIGRlY29kZSBzdHJpbmdzIGZyb20gYFwiICsgYnVmZmVyICsgXCJgLlwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufSBjYXRjaCAoZSkge1xuXG4gIC8vIE5vdCBvbiBOb2RlSlMsIGFkZCBzaGltIGZvciBXZWJBUEkgVGV4dEVuY29kZXIvVGV4dERlY29kZXJcbiAgdmFyIHRleHRFbmNvZGluZyA9IHJlcXVpcmUoJy4uLy4uL2V4dGVybmFsL3RleHQtZW5jb2RpbmcvaW5kZXgnKTtcbiAgbGV0IGVuY29kZXIgPSBuZXcgdGV4dEVuY29kaW5nLlRleHRFbmNvZGVyKFwidXRmLThcIik7XG4gIGxldCBkZWNvZGVyID0gbmV3IHRleHRFbmNvZGluZy5UZXh0RGVjb2RlcihcInV0Zi04XCIpO1xuXG4gIHBsYXRmb3JtT2JqID0ge1xuICAgIFwiZW5jb2RlXCI6IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHJldHVybiBuZXcgSGVhcEJ1ZmZlcihlbmNvZGVyLmVuY29kZShzdHIpLmJ1ZmZlcik7XG4gICAgfSxcbiAgICBcImRlY29kZVwiOiBmdW5jdGlvbiAoYnVmZmVyLCBsZW5ndGgpIHtcbiAgICAgIGlmIChidWZmZXIgaW5zdGFuY2VvZiBIZWFwQnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVyLmRlY29kZShidWZmZXIucmVhZFZpZXcoTWF0aC5taW4obGVuZ3RoLCBidWZmZXIubGVuZ3RoIC0gYnVmZmVyLnBvc2l0aW9uKSkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIERlY29kaW5nIGNvbWJpbmVkIGJ1ZmZlciBpcyBjb21wbGljYXRlZC4gRm9yIHNpbXBsaWNpdHksIGZvciBub3csIFxuICAgICAgICAvLyB3ZSBzaW1wbHkgY29weSB0aGUgY29tYmluZWQgYnVmZmVyIGludG8gYSByZWd1bGFyIGJ1ZmZlciBhbmQgZGVjb2RlIHRoYXQuXG4gICAgICAgIHZhciB0bXBCdWYgPSBhbGxvYyhsZW5ndGgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdG1wQnVmLndyaXRlVUludDgoYnVmZmVyLnJlYWRVSW50OCgpKTtcbiAgICAgICAgfVxuICAgICAgICB0bXBCdWYucmVzZXQoKTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKHRtcEJ1Zi5yZWFkVmlldyhsZW5ndGgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubGV0IHN0cmVhbURlY29kZUNvbWJpbmVkQnVmZmVyID0gKGNvbWJpbmVkQnVmZmVycywgbGVuZ3RoLCBkZWNvZGVGbiwgZW5kRm4pID0+IHtcbiAgbGV0IHJlbWFpbmluZ0J5dGVzVG9SZWFkID0gbGVuZ3RoO1xuICBsZXQgcG9zaXRpb24gPSBjb21iaW5lZEJ1ZmZlcnMucG9zaXRpb247XG4gIGNvbWJpbmVkQnVmZmVycy5fdXBkYXRlUG9zKE1hdGgubWluKGxlbmd0aCwgY29tYmluZWRCdWZmZXJzLmxlbmd0aCAtIHBvc2l0aW9uKSk7XG4gIC8vIFJlZHVjZSBDb21iaW5lZEJ1ZmZlcnMgdG8gYSBkZWNvZGVkIHN0cmluZ1xuICBsZXQgb3V0ID0gY29tYmluZWRCdWZmZXJzLl9idWZmZXJzLnJlZHVjZShmdW5jdGlvbiAobGFzdCwgcGFydEJ1ZmZlcikge1xuICAgIGlmIChyZW1haW5pbmdCeXRlc1RvUmVhZCA8PSAwKSB7XG4gICAgICByZXR1cm4gbGFzdDtcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID49IHBhcnRCdWZmZXIubGVuZ3RoKSB7XG4gICAgICBwb3NpdGlvbiAtPSBwYXJ0QnVmZmVyLmxlbmd0aDtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgcGFydEJ1ZmZlci5fdXBkYXRlUG9zKHBvc2l0aW9uIC0gcGFydEJ1ZmZlci5wb3NpdGlvbik7XG4gICAgICBsZXQgYnl0ZXNUb1JlYWQgPSBNYXRoLm1pbihwYXJ0QnVmZmVyLmxlbmd0aCAtIHBvc2l0aW9uLCByZW1haW5pbmdCeXRlc1RvUmVhZCk7XG4gICAgICBsZXQgbGFzdFNsaWNlID0gcGFydEJ1ZmZlci5yZWFkU2xpY2UoYnl0ZXNUb1JlYWQpO1xuICAgICAgcGFydEJ1ZmZlci5fdXBkYXRlUG9zKGJ5dGVzVG9SZWFkKTtcbiAgICAgIHJlbWFpbmluZ0J5dGVzVG9SZWFkID0gTWF0aC5tYXgocmVtYWluaW5nQnl0ZXNUb1JlYWQgLSBsYXN0U2xpY2UubGVuZ3RoLCAwKTtcbiAgICAgIHBvc2l0aW9uID0gMDtcbiAgICAgIHJldHVybiBsYXN0ICsgZGVjb2RlRm4obGFzdFNsaWNlKTtcbiAgICB9XG4gIH0sICcnKTtcbiAgcmV0dXJuIG91dCArIGVuZEZuKCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybU9iajtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5jb25zdCBFTkNSWVBUSU9OX09OID0gXCJFTkNSWVBUSU9OX09OXCI7XG5jb25zdCBFTkNSWVBUSU9OX09GRiA9IFwiRU5DUllQVElPTl9PRkZcIjtcblxuY29uc3QgVVJMX1JFR0VYID0gbmV3IFJlZ0V4cChbXG4gICcoW14vXSsvLyk/JywgICAgICAgLy8gc2NoZW1lXG4gICcoKFteOi8/I10qKScsICAgICAgLy8gaG9zdG5hbWVcbiAgJyg/OjooWzAtOV0rKSk/KScsICAvLyBwb3J0IChvcHRpb25hbClcbiAgJyhbXj9dKik/JywgICAgICAgICAvLyBldmVyeXRoaW5nIGVsc2VcbiAgJyhcXFxcPyguKykpPycgICAgICAgIC8vIHF1ZXJ5XG5dLmpvaW4oJycpKTtcblxuZnVuY3Rpb24gaXNFbXB0eU9iamVjdE9yTnVsbChvYmopIHtcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKCFpc09iamVjdChvYmopKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yIChsZXQgcHJvcCBpbiBvYmopIHtcbiAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICBjb25zdCB0eXBlID0gdHlwZW9mIG9iajtcbiAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgQm9vbGVhbihvYmopO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRTdHJpbmcob2JqLCBvYmpOYW1lKSB7XG4gIGlmICghaXNTdHJpbmcob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3Iob2JqTmFtZSArICcgZXhwZWN0ZWQgdG8gYmUgc3RyaW5nIGJ1dCB3YXM6ICcgKyBKU09OLnN0cmluZ2lmeShvYmopKTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBpc1N0cmluZyhzdHIpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzdHIpID09PSAnW29iamVjdCBTdHJpbmddJztcbn1cblxuZnVuY3Rpb24gcGFyc2VTY2hlbWUodXJsKSB7XG4gIGFzc2VydFN0cmluZyh1cmwsICdVUkwnKTtcbiAgY29uc3Qgc2NoZW1lID0gdXJsLm1hdGNoKFVSTF9SRUdFWClbMV0gfHwgJyc7XG4gIHJldHVybiBzY2hlbWUudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VVcmwodXJsKSB7XG4gIGFzc2VydFN0cmluZyh1cmwsICdVUkwnKTtcbiAgcmV0dXJuIHVybC5tYXRjaChVUkxfUkVHRVgpWzJdO1xufVxuXG5mdW5jdGlvbiBwYXJzZUhvc3QodXJsKSB7XG4gIGFzc2VydFN0cmluZyh1cmwsICdVUkwnKTtcbiAgcmV0dXJuIHVybC5tYXRjaChVUkxfUkVHRVgpWzNdO1xufVxuXG5mdW5jdGlvbiBwYXJzZVBvcnQodXJsKSB7XG4gIGFzc2VydFN0cmluZyh1cmwsICdVUkwnKTtcbiAgcmV0dXJuIHVybC5tYXRjaChVUkxfUkVHRVgpWzRdO1xufVxuXG5mdW5jdGlvbiBwYXJzZVJvdXRpbmdDb250ZXh0KHVybCkge1xuICBjb25zdCBxdWVyeSA9IHVybC5tYXRjaChVUkxfUkVHRVgpWzddIHx8ICcnO1xuICBjb25zdCBjb250ZXh0ID0ge307XG4gIGlmIChxdWVyeSkge1xuICAgIHF1ZXJ5LnNwbGl0KCcmJykuZm9yRWFjaChwYWlyID0+IHtcbiAgICAgIGNvbnN0IGtleVZhbHVlID0gcGFpci5zcGxpdCgnPScpO1xuICAgICAgaWYgKGtleVZhbHVlLmxlbmd0aCAhPT0gMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcGFyYW1ldGVyczogXFwnJyArIGtleVZhbHVlICsgJ1xcJyBpbiBVUkwgXFwnJyArIHVybCArICdcXCcuJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IHRyaW1BbmRWZXJpZnkoa2V5VmFsdWVbMF0sICdrZXknLCB1cmwpO1xuICAgICAgY29uc3QgdmFsdWUgPSB0cmltQW5kVmVyaWZ5KGtleVZhbHVlWzFdLCAndmFsdWUnLCB1cmwpO1xuXG4gICAgICBpZiAoY29udGV4dFtrZXldKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlZCBxdWVyeSBwYXJhbWV0ZXJzIHdpdGgga2V5ICcke2tleX0nIGluIFVSTCAnJHt1cmx9J2ApO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0W2tleV0gPSB2YWx1ZTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn1cblxuZnVuY3Rpb24gdHJpbUFuZFZlcmlmeShzdHJpbmcsIG5hbWUsIHVybCkge1xuICBjb25zdCByZXN1bHQgPSBzdHJpbmcudHJpbSgpO1xuICBpZiAoIXJlc3VsdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSWxsZWdhbCBlbXB0eSAke25hbWV9IGluIFVSTCBxdWVyeSAnJHt1cmx9J2ApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCB7XG4gIGlzRW1wdHlPYmplY3RPck51bGwsXG4gIGFzc2VydFN0cmluZyxcbiAgcGFyc2VTY2hlbWUsXG4gIHBhcnNlVXJsLFxuICBwYXJzZUhvc3QsXG4gIHBhcnNlUG9ydCxcbiAgcGFyc2VSb3V0aW5nQ29udGV4dCxcbiAgRU5DUllQVElPTl9PTixcbiAgRU5DUllQVElPTl9PRkZcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge25ld0Vycm9yfSBmcm9tIFwiLi9lcnJvclwiO1xuXG5mdW5jdGlvbiBnZW5lcmF0ZUZpZWxkTG9va3VwKCBrZXlzICkge1xuICBsZXQgbG9va3VwID0ge307XG4gIGtleXMuZm9yRWFjaCggKG5hbWUsIGlkeCkgPT4geyBsb29rdXBbbmFtZV0gPSBpZHg7IH0pO1xuICByZXR1cm4gbG9va3VwO1xufVxuXG4vKipcbiAqIFJlY29yZHMgbWFrZSB1cCB0aGUgY29udGVudHMgb2YgdGhlIHtAbGluayBSZXN1bHR9LCBhbmQgaXMgaG93IHlvdSBhY2Nlc3NcbiAqIHRoZSBvdXRwdXQgb2YgYSBzdGF0ZW1lbnQuIEEgc2ltcGxlIHN0YXRlbWVudCBtaWdodCB5aWVsZCBhIHJlc3VsdCBzdHJlYW1cbiAqIHdpdGggYSBzaW5nbGUgcmVjb3JkLCBmb3IgaW5zdGFuY2U6XG4gKlxuICogICAgIE1BVENIICh1OlVzZXIpIFJFVFVSTiB1Lm5hbWUsIHUuYWdlXG4gKlxuICogVGhpcyByZXR1cm5zIGEgc3RyZWFtIG9mIHJlY29yZHMgd2l0aCB0d28gZmllbGRzLCBuYW1lZCBgdS5uYW1lYCBhbmQgYHUuYWdlYCxcbiAqIGVhY2ggcmVjb3JkIHJlcHJlc2VudHMgb25lIHVzZXIgZm91bmQgYnkgdGhlIHN0YXRlbWVudCBhYm92ZS4gWW91IGNhbiBhY2Nlc3NcbiAqIHRoZSB2YWx1ZXMgb2YgZWFjaCBmaWVsZCBlaXRoZXIgYnkgbmFtZTpcbiAqXG4gKiAgICAgcmVjb3JkLmdldChcInUubmFtZVwiKVxuICpcbiAqIE9yIGJ5IGl0J3MgcG9zaXRpb246XG4gKlxuICogICAgIHJlY29yZC5nZXQoMClcbiAqXG4gKiBAYWNjZXNzIHB1YmxpY1xuICovXG5jbGFzcyBSZWNvcmQge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IHJlY29yZCBvYmplY3QuXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGtleXMgQW4gYXJyYXkgb2YgZmllbGQga2V5cywgaW4gdGhlIG9yZGVyIHRoZSBmaWVsZHMgYXBwZWFyXG4gICAqICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSByZWNvcmRcbiAgICogQHBhcmFtIHtPYmplY3R9IGZpZWxkcyBBbiBhcnJheSBvZiBmaWVsZCB2YWx1ZXNcbiAgICogQHBhcmFtIHtPYmplY3R9IGZpZWxkTG9va3VwIEFuIG9iamVjdCBvZiBmaWVsZE5hbWUgLT4gdmFsdWUgaW5kZXgsIHVzZWQgdG8gbWFwXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIG5hbWVzIHRvIHZhbHVlcy4gSWYgdGhpcyBpcyBudWxsLCBvbmUgd2lsbCBiZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihrZXlzLCBmaWVsZHMsIGZpZWxkTG9va3VwPW51bGwgKSB7XG4gICAgdGhpcy5rZXlzID0ga2V5cztcbiAgICB0aGlzLmxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHRoaXMuX2ZpZWxkcyA9IGZpZWxkcztcbiAgICB0aGlzLl9maWVsZExvb2t1cCA9IGZpZWxkTG9va3VwIHx8IGdlbmVyYXRlRmllbGRMb29rdXAoIGtleXMgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gdGhlIGdpdmVuIGZ1bmN0aW9uIGZvciBlYWNoIGZpZWxkIGluIHRoaXMgcmVjb3JkLiBUaGUgZnVuY3Rpb25cbiAgICogd2lsbCBnZXQgdGhyZWUgYXJndW1lbnRzIC0gdGhlIHZhbHVlLCB0aGUga2V5IGFuZCB0aGlzIHJlY29yZCwgaW4gdGhhdFxuICAgKiBvcmRlci5cbiAgICpcbiAgICogQHBhcmFtIHZpc2l0b3JcbiAgICovXG4gIGZvckVhY2goIHZpc2l0b3IgKSB7XG4gICAgZm9yKGxldCBpPTA7aTx0aGlzLmtleXMubGVuZ3RoO2krKykge1xuICAgICAgdmlzaXRvciggdGhpcy5fZmllbGRzW2ldLCB0aGlzLmtleXNbaV0sIHRoaXMgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGFuIG9iamVjdCBvdXQgb2YgdGhlIGN1cnJlbnQgUmVjb3JkXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuICB0b09iamVjdCgpIHtcbiAgICBjb25zdCBvYmplY3QgPSB7fTtcbiAgICB0aGlzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIG9iamVjdFtrZXldID0gdmFsdWVcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgdmFsdWUgZnJvbSB0aGlzIHJlY29yZCwgZWl0aGVyIGJ5IGluZGV4IG9yIGJ5IGZpZWxkIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8TnVtYmVyfSBrZXkgRmllbGQga2V5LCBvciB0aGUgaW5kZXggb2YgdGhlIGZpZWxkLlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGdldCgga2V5ICkge1xuICAgIGxldCBpbmRleDtcbiAgICBpZiggISh0eXBlb2Yga2V5ID09PSBcIm51bWJlclwiKSApIHtcbiAgICAgIGluZGV4ID0gdGhpcy5fZmllbGRMb29rdXBba2V5XTtcbiAgICAgIGlmKCBpbmRleCA9PT0gdW5kZWZpbmVkICkge1xuICAgICAgICB0aHJvdyBuZXdFcnJvcihcIlRoaXMgcmVjb3JkIGhhcyBubyBmaWVsZCB3aXRoIGtleSAnXCIra2V5K1wiJywgYXZhaWxhYmxlIGtleSBhcmU6IFtcIiArIHRoaXMua2V5cyArIFwiXS5cIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4ID0ga2V5O1xuICAgIH1cblxuICAgIGlmKCBpbmRleCA+IHRoaXMuX2ZpZWxkcy5sZW5ndGggLSAxIHx8IGluZGV4IDwgMCApIHtcbiAgICAgIHRocm93IG5ld0Vycm9yKFwiVGhpcyByZWNvcmQgaGFzIG5vIGZpZWxkIHdpdGggaW5kZXggJ1wiK2luZGV4K1wiJy4gUmVtZW1iZXIgdGhhdCBpbmRleGVzIHN0YXJ0IGF0IGAwYCwgXCIgK1xuICAgICAgICBcImFuZCBtYWtlIHN1cmUgeW91ciBzdGF0ZW1lbnQgcmV0dXJucyByZWNvcmRzIGluIHRoZSBzaGFwZSB5b3UgbWVhbnQgaXQgdG8uXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9maWVsZHNbaW5kZXhdO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdmFsdWUgZnJvbSB0aGlzIHJlY29yZCwgZWl0aGVyIGJ5IGluZGV4IG9yIGJ5IGZpZWxkIGtleSwgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xOdW1iZXJ9IGtleSBGaWVsZCBrZXksIG9yIHRoZSBpbmRleCBvZiB0aGUgZmllbGQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaGFzKCBrZXkgKSB7XG4gICAgLy8gaWYga2V5IGlzIGEgbnVtYmVyLCB3ZSBjaGVjayBpZiBpdCBpcyBpbiB0aGUgX2ZpZWxkcyBhcnJheVxuICAgIGlmKCB0eXBlb2Yga2V5ID09PSBcIm51bWJlclwiICkge1xuICAgICAgcmV0dXJuICgga2V5ID49IDAgJiYga2V5IDwgdGhpcy5fZmllbGRzLmxlbmd0aCApO1xuICAgIH1cblxuICAgIC8vIGlmIGl0J3Mgbm90IGEgbnVtYmVyLCB3ZSBjaGVjayBfZmllbGRMb29rdXAgZGljdGlvbmFyeSBkaXJlY3RseVxuICAgIHJldHVybiB0aGlzLl9maWVsZExvb2t1cFtrZXldICE9PSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVjb3JkXG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtpbnQsIGlzSW50fSBmcm9tICcuL2ludGVnZXInO1xuXG4vKipcbiAgKiBBIFJlc3VsdFN1bW1hcnkgaW5zdGFuY2UgY29udGFpbnMgc3RydWN0dXJlZCBtZXRhZGF0YSBmb3IgYSB7UmVzdWx0fS5cbiAgKiBAYWNjZXNzIHB1YmxpY1xuICAqL1xuY2xhc3MgUmVzdWx0U3VtbWFyeSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlbWVudCAtIFRoZSBzdGF0ZW1lbnQgdGhpcyBzdW1tYXJ5IGlzIGZvclxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1ldGVycyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBzdGF0ZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG1ldGFkYXRhIC0gU3RhdGVtZW50IG1ldGFkYXRhXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdGF0ZW1lbnQsIHBhcmFtZXRlcnMsIG1ldGFkYXRhKSB7XG4gICAgdGhpcy5zdGF0ZW1lbnQgPSB7dGV4dDogc3RhdGVtZW50LCBwYXJhbWV0ZXJzfTtcbiAgICB0aGlzLnN0YXRlbWVudFR5cGUgPSBtZXRhZGF0YS50eXBlO1xuICAgIGxldCBjb3VudGVycyA9IG5ldyBTdGF0ZW1lbnRTdGF0aXN0aWNzKG1ldGFkYXRhLnN0YXRzIHx8IHt9KTtcbiAgICB0aGlzLmNvdW50ZXJzID0gY291bnRlcnM7XG4gICAgLy9mb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHJlbW92ZSBpbiBmdXR1cmUgdmVyc2lvblxuICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcyA9IGNvdW50ZXJzO1xuICAgIHRoaXMucGxhbiA9IG1ldGFkYXRhLnBsYW4gfHwgbWV0YWRhdGEucHJvZmlsZSA/IG5ldyBQbGFuKG1ldGFkYXRhLnBsYW4gfHwgbWV0YWRhdGEucHJvZmlsZSkgOiBmYWxzZTtcbiAgICB0aGlzLnByb2ZpbGUgPSBtZXRhZGF0YS5wcm9maWxlID8gbmV3IFByb2ZpbGVkUGxhbihtZXRhZGF0YS5wcm9maWxlKSA6IGZhbHNlO1xuICAgIHRoaXMubm90aWZpY2F0aW9ucyA9IHRoaXMuX2J1aWxkTm90aWZpY2F0aW9ucyhtZXRhZGF0YS5ub3RpZmljYXRpb25zKTtcbiAgICB0aGlzLnNlcnZlciA9IG5ldyBTZXJ2ZXJJbmZvKG1ldGFkYXRhLnNlcnZlcik7XG4gICAgdGhpcy5yZXN1bHRDb25zdW1lZEFmdGVyID0gbWV0YWRhdGEucmVzdWx0X2NvbnN1bWVkX2FmdGVyO1xuICAgIHRoaXMucmVzdWx0QXZhaWxhYmxlQWZ0ZXIgPSBtZXRhZGF0YS5yZXN1bHRfYXZhaWxhYmxlX2FmdGVyO1xuICB9XG4gIF9idWlsZE5vdGlmaWNhdGlvbnMobm90aWZpY2F0aW9ucykge1xuICAgIGlmKCFub3RpZmljYXRpb25zKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiBub3RpZmljYXRpb25zLm1hcChmdW5jdGlvbihuKSB7IHJldHVybiBuZXcgTm90aWZpY2F0aW9uKG4pIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSByZXN1bHQgc3VtbWFyeSBoYXMgYSBwbGFuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBoYXNQbGFuKCkge1xuICAgIHJldHVybiB0aGlzLnBsYW4gaW5zdGFuY2VvZiBQbGFuXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHJlc3VsdCBzdW1tYXJ5IGhhcyBhIHByb2ZpbGVcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc1Byb2ZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvZmlsZSBpbnN0YW5jZW9mIFByb2ZpbGVkUGxhblxuICB9XG59XG5cbi8qKlxuICAqIENsYXNzIGZvciBleGVjdXRpb24gcGxhbiByZWNlaXZlZCBieSBwcmVwZW5kaW5nIEN5cGhlciB3aXRoIEVYUExBSU4uXG4gICogQGFjY2VzcyBwdWJsaWNcbiAgKi9cbmNsYXNzIFBsYW4ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgUGxhbiBpbnN0YW5jZVxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtPYmplY3R9IHBsYW4gLSBPYmplY3Qgd2l0aCBwbGFuIGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yKHBsYW4pIHtcbiAgICB0aGlzLm9wZXJhdG9yVHlwZSA9IHBsYW4ub3BlcmF0b3JUeXBlO1xuICAgIHRoaXMuaWRlbnRpZmllcnMgPSBwbGFuLmlkZW50aWZpZXJzO1xuICAgIHRoaXMuYXJndW1lbnRzID0gcGxhbi5hcmdzO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBwbGFuLmNoaWxkcmVuID8gcGxhbi5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiBuZXcgUGxhbihjaGlsZCkpIDogW107XG4gIH1cbn1cblxuLyoqXG4gICogQ2xhc3MgZm9yIGV4ZWN1dGlvbiBwbGFuIHJlY2VpdmVkIGJ5IHByZXBlbmRpbmcgQ3lwaGVyIHdpdGggUFJPRklMRS5cbiAgKiBAYWNjZXNzIHB1YmxpY1xuICAqL1xuY2xhc3MgUHJvZmlsZWRQbGFuIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIFByb2ZpbGVkUGxhbiBpbnN0YW5jZVxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb2ZpbGUgLSBPYmplY3Qgd2l0aCBwcm9maWxlIGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb2ZpbGUpIHtcbiAgICB0aGlzLm9wZXJhdG9yVHlwZSA9IHByb2ZpbGUub3BlcmF0b3JUeXBlO1xuICAgIHRoaXMuaWRlbnRpZmllcnMgPSBwcm9maWxlLmlkZW50aWZpZXJzO1xuICAgIHRoaXMuYXJndW1lbnRzID0gcHJvZmlsZS5hcmdzO1xuICAgIHRoaXMuZGJIaXRzID0gcHJvZmlsZS5hcmdzLkRiSGl0cy50b0ludCgpO1xuICAgIHRoaXMucm93cyA9IHByb2ZpbGUuYXJncy5Sb3dzLnRvSW50KCk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IHByb2ZpbGUuY2hpbGRyZW4gPyBwcm9maWxlLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IG5ldyBQcm9maWxlZFBsYW4oY2hpbGQpKSA6IFtdO1xuICB9XG59XG5cbi8qKlxuICAqIEdldCBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbiBmb3IgYSB7UmVzdWx0fS5cbiAgKiBAYWNjZXNzIHB1YmxpY1xuICAqL1xuY2xhc3MgU3RhdGVtZW50U3RhdGlzdGljcyB7XG4gIC8qKlxuICAgKiBTdHJ1Y3R1cml6ZSB0aGUgc3RhdGlzdGljc1xuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRpc3RpY3MgLSBSZXN1bHQgc3RhdGlzdGljc1xuICAgKi9cbiAgY29uc3RydWN0b3Ioc3RhdGlzdGljcykge1xuICAgIHRoaXMuX3N0YXRzID0ge1xuICAgICAgbm9kZXNDcmVhdGVkOiAwLFxuICAgICAgbm9kZXNEZWxldGVkOiAwLFxuICAgICAgcmVsYXRpb25zaGlwc0NyZWF0ZWQ6IDAsXG4gICAgICByZWxhdGlvbnNoaXBzRGVsZXRlZDogMCxcbiAgICAgIHByb3BlcnRpZXNTZXQ6IDAsXG4gICAgICBsYWJlbHNBZGRlZDogMCxcbiAgICAgIGxhYmVsc1JlbW92ZWQ6IDAsXG4gICAgICBpbmRleGVzQWRkZWQ6IDAsXG4gICAgICBpbmRleGVzUmVtb3ZlZDogMCxcbiAgICAgIGNvbnN0cmFpbnRzQWRkZWQ6IDAsXG4gICAgICBjb25zdHJhaW50c1JlbW92ZWQ6IDBcbiAgICB9O1xuICAgIE9iamVjdC5rZXlzKHN0YXRpc3RpY3MpLmZvckVhY2goKGluZGV4KSA9PiB7XG4gICAgICAvL1RvIGNhbWVsQ2FzZVxuICAgICAgdGhpcy5fc3RhdHNbaW5kZXgucmVwbGFjZSgvKFxcLVxcdykvZywgKG0pID0+IG1bMV0udG9VcHBlckNhc2UoKSldID1cbiAgICAgICAgaXNJbnQoc3RhdGlzdGljc1tpbmRleF0pID8gc3RhdGlzdGljc1tpbmRleF0udG9JbnQoKSA6IHN0YXRpc3RpY3NbaW5kZXhdO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpZCB0aGUgZGF0YWJhc2UgZ2V0IHVwZGF0ZWQ/XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBjb250YWluc1VwZGF0ZXMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3N0YXRzKS5yZWR1Y2UoKGxhc3QsIGN1cnJlbnQpID0+IHtcbiAgICAgIHJldHVybiBsYXN0ICsgdGhpcy5fc3RhdHNbY3VycmVudF07XG4gICAgfSwgMCkgPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2Ygbm9kZXMgY3JlYXRlZC5cbiAgICovXG4gIG5vZGVzQ3JlYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHMubm9kZXNDcmVhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2Ygbm9kZXMgZGVsZXRlZC5cbiAgICovXG4gIG5vZGVzRGVsZXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHMubm9kZXNEZWxldGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2YgcmVsYXRpb25zaGlwcyBjcmVhdGVkLlxuICAgKi9cbiAgcmVsYXRpb25zaGlwc0NyZWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRzLnJlbGF0aW9uc2hpcHNDcmVhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2Ygbm9kZXMgZGVsZXRlZC5cbiAgICovXG4gIHJlbGF0aW9uc2hpcHNEZWxldGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0cy5yZWxhdGlvbnNoaXBzRGVsZXRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IC0gTnVtYmVyIG9mIHByb3BlcnRpZXMgc2V0LlxuICAgKi9cbiAgcHJvcGVydGllc1NldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHMucHJvcGVydGllc1NldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IC0gTnVtYmVyIG9mIGxhYmVscyBhZGRlZC5cbiAgICovXG4gIGxhYmVsc0FkZGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0cy5sYWJlbHNBZGRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IC0gTnVtYmVyIG9mIGxhYmVscyByZW1vdmVkLlxuICAgKi9cbiAgbGFiZWxzUmVtb3ZlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHMubGFiZWxzUmVtb3ZlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IC0gTnVtYmVyIG9mIGluZGV4ZXMgYWRkZWQuXG4gICAqL1xuICBpbmRleGVzQWRkZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRzLmluZGV4ZXNBZGRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IC0gTnVtYmVyIG9mIGluZGV4ZXMgcmVtb3ZlZC5cbiAgICovXG4gIGluZGV4ZXNSZW1vdmVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0cy5pbmRleGVzUmVtb3ZlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IC0gTnVtYmVyIG9mIGNvbnRyYWludHMgYWRkZWQuXG4gICAqL1xuICBjb25zdHJhaW50c0FkZGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0cy5jb25zdHJhaW50c0FkZGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge051bWJlcn0gLSBOdW1iZXIgb2YgY29udHJhaW50cyByZW1vdmVkLlxuICAgKi9cbiAgY29uc3RyYWludHNSZW1vdmVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0cy5jb25zdHJhaW50c1JlbW92ZWQ7XG4gIH1cbn1cblxuLyoqXG4gICogQ2xhc3MgZm9yIEN5cGhlciBub3RpZmljYXRpb25zXG4gICogQGFjY2VzcyBwdWJsaWNcbiAgKi9cbmNsYXNzIE5vdGlmaWNhdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBOb3RpZmljYXRpb24gaW5zdGFuY2VcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBub3RpZmljYXRpb24gLSBPYmplY3Qgd2l0aCBub3RpZmljYXRpb24gZGF0YVxuICAgKi9cbiAgY29uc3RydWN0b3Iobm90aWZpY2F0aW9uKSB7XG4gICAgdGhpcy5jb2RlID0gbm90aWZpY2F0aW9uLmNvZGU7XG4gICAgdGhpcy50aXRsZSA9IG5vdGlmaWNhdGlvbi50aXRsZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gbm90aWZpY2F0aW9uLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMuc2V2ZXJpdHkgPSBub3RpZmljYXRpb24uc2V2ZXJpdHk7XG4gICAgdGhpcy5wb3NpdGlvbiA9IE5vdGlmaWNhdGlvbi5fY29uc3RydWN0UG9zaXRpb24obm90aWZpY2F0aW9uLnBvc2l0aW9uKTtcbiAgfVxuXG4gIHN0YXRpYyBfY29uc3RydWN0UG9zaXRpb24ocG9zKSB7XG4gICAgaWYoIXBvcykge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgb2Zmc2V0OiBwb3Mub2Zmc2V0LnRvSW50KCksXG4gICAgICBsaW5lOiBwb3MubGluZS50b0ludCgpLFxuICAgICAgY29sdW1uOiBwb3MuY29sdW1uLnRvSW50KClcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gICogQ2xhc3MgZm9yIGV4cG9zaW5nIHNlcnZlciBpbmZvIGZyb20gYSByZXN1bHQuXG4gICogQGFjY2VzcyBwdWJsaWNcbiAgKi9cbmNsYXNzIFNlcnZlckluZm8ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgU2VydmVySW5mbyBpbnN0YW5jZVxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtPYmplY3R9IHNlcnZlck1ldGEgLSBPYmplY3Qgd2l0aCBzZXJ2ZXJNZXRhIGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNlcnZlck1ldGEpIHtcbiAgICBpZiAoc2VydmVyTWV0YSkge1xuICAgICAgdGhpcy5hZGRyZXNzID0gc2VydmVyTWV0YS5hZGRyZXNzO1xuICAgICAgdGhpcy52ZXJzaW9uID0gc2VydmVyTWV0YS52ZXJzaW9uO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBzdGF0ZW1lbnRUeXBlID0ge1xuICBSRUFEX09OTFk6ICdyJyxcbiAgUkVBRF9XUklURTogJ3J3JyxcbiAgV1JJVEVfT05MWTogJ3cnLFxuICBTQ0hFTUFfV1JJVEU6ICdzJ1xufTtcblxuZXhwb3J0IHtcbiAgc3RhdGVtZW50VHlwZVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXN1bHRTdW1tYXJ5XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IFJlc3VsdFN1bW1hcnkgZnJvbSAnLi9yZXN1bHQtc3VtbWFyeSc7XG5pbXBvcnQge0VNUFRZX0NPTk5FQ1RJT05fSE9MREVSfSBmcm9tICcuL2ludGVybmFsL2Nvbm5lY3Rpb24taG9sZGVyJztcblxuLyoqXG4gICogQSBzdHJlYW0gb2Yge0BsaW5rIFJlY29yZH0gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgYSBzdGF0ZW1lbnQuXG4gICogQGFjY2VzcyBwdWJsaWNcbiAgKi9cbmNsYXNzIFJlc3VsdCB7XG4gIC8qKlxuICAgKiBJbmplY3QgdGhlIG9ic2VydmVyIHRvIGJlIHVzZWQuXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICogQHBhcmFtIHtTdHJlYW1PYnNlcnZlcn0gc3RyZWFtT2JzZXJ2ZXJcbiAgICogQHBhcmFtIHttaXhlZH0gc3RhdGVtZW50IC0gQ3lwaGVyIHN0YXRlbWVudCB0byBleGVjdXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbWV0ZXJzIC0gTWFwIHdpdGggcGFyYW1ldGVycyB0byB1c2UgaW4gc3RhdGVtZW50XG4gICAqIEBwYXJhbSBtZXRhU3VwcGxpZXIgZnVuY3Rpb24sIHdoZW4gY2FsbGVkIHByb3ZpZGVzIG1ldGFkYXRhXG4gICAqIEBwYXJhbSB7Q29ubmVjdGlvbkhvbGRlcn0gY29ubmVjdGlvbkhvbGRlciAtIHRvIGJlIG5vdGlmaWVkIHdoZW4gcmVzdWx0IGlzIGVpdGhlciBmdWxseSBjb25zdW1lZCBvciBlcnJvciBoYXBwZW5lZC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHN0cmVhbU9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMsIG1ldGFTdXBwbGllciwgY29ubmVjdGlvbkhvbGRlcikge1xuICAgIHRoaXMuX3N0cmVhbU9ic2VydmVyID0gc3RyZWFtT2JzZXJ2ZXI7XG4gICAgdGhpcy5fcCA9IG51bGw7XG4gICAgdGhpcy5fc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICAgIHRoaXMuX3BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzIHx8IHt9O1xuICAgIHRoaXMuX21ldGFTdXBwbGllciA9IG1ldGFTdXBwbGllciB8fCBmdW5jdGlvbigpe3JldHVybiB7fTt9O1xuICAgIHRoaXMuX2Nvbm5lY3Rpb25Ib2xkZXIgPSBjb25uZWN0aW9uSG9sZGVyIHx8IEVNUFRZX0NPTk5FQ1RJT05fSE9MREVSO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbmQgcmV0dXJuIG5ldyBQcm9taXNlXG4gICAqIEByZXR1cm4ge1Byb21pc2V9IG5ldyBQcm9taXNlLlxuICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVQcm9taXNlKCkge1xuICAgIGlmKHRoaXMuX3ApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuX3AgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgcmVjb3JkcyA9IFtdO1xuICAgICAgbGV0IG9ic2VydmVyID0ge1xuICAgICAgICBvbk5leHQ6IChyZWNvcmQpID0+IHsgcmVjb3Jkcy5wdXNoKHJlY29yZCk7IH0sXG4gICAgICAgIG9uQ29tcGxldGVkOiAoc3VtbWFyeSkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoe3JlY29yZHM6IHJlY29yZHMsIHN1bW1hcnk6IHN1bW1hcnl9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogKGVycm9yKSA9PiB7IHJlamVjdChlcnJvcik7IH1cbiAgICAgIH07XG4gICAgICBzZWxmLnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2FpdHMgZm9yIGFsbCByZXN1bHRzIGFuZCBjYWxscyB0aGUgcGFzc2VkIGluIGZ1bmN0aW9uIHdpdGggdGhlIHJlc3VsdHMuXG4gICAqIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoIHRoZSB7QGxpbmsgI3N1YnNjcmliZX0gZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24ocmVzdWx0OiB7cmVjb3JkczpBcnJheTxSZWNvcmQ+fSl9IG9uRnVsZmlsbGVkIC0gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gZmluaXNoZWQuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oZXJyb3I6IHttZXNzYWdlOnN0cmluZywgY29kZTpzdHJpbmd9KX0gb25SZWplY3RlZCAtIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB1cG9uIGVycm9ycy5cbiAgICogQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZS5cbiAgICovXG4gIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICB0aGlzLl9jcmVhdGVQcm9taXNlKCk7XG4gICAgcmV0dXJuIHRoaXMuX3AudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2F0Y2ggZXJyb3JzIHdoZW4gdXNpbmcgcHJvbWlzZXMuXG4gICAqIENhbm5vdCBiZSB1c2VkIHdpdGggdGhlIHN1YnNjcmliZSBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihlcnJvcjoge21lc3NhZ2U6c3RyaW5nLCBjb2RlOnN0cmluZ30pfSBvblJlamVjdGVkIC0gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHVwb24gZXJyb3JzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlLlxuICAgKi9cbiAgY2F0Y2gob25SZWplY3RlZCkge1xuICAgIHRoaXMuX2NyZWF0ZVByb21pc2UoKTtcbiAgICByZXR1cm4gdGhpcy5fcC5jYXRjaChvblJlamVjdGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdHJlYW0gcmVjb3JkcyB0byBvYnNlcnZlciBhcyB0aGV5IGNvbWUgaW4sIHRoaXMgaXMgYSBtb3JlIGVmZmljaWVudCBtZXRob2RcbiAgICogb2YgaGFuZGxpbmcgdGhlIHJlc3VsdHMsIGFuZCBhbGxvd3MgeW91IHRvIGhhbmRsZSBhcmJpdHJhcmlseSBsYXJnZSByZXN1bHRzLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JzZXJ2ZXIgLSBPYnNlcnZlciBvYmplY3RcbiAgICogQHBhcmFtIHtmdW5jdGlvbihyZWNvcmQ6IFJlY29yZCl9IG9ic2VydmVyLm9uTmV4dCAtIEhhbmRsZSByZWNvcmRzLCBvbmUgYnkgb25lLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1ldGFkYXRhOiBPYmplY3QpfSBvYnNlcnZlci5vbkNvbXBsZXRlZCAtIEhhbmRsZSBzdHJlYW0gdGFpbCwgdGhlIG1ldGFkYXRhLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGVycm9yOiB7bWVzc2FnZTpzdHJpbmcsIGNvZGU6c3RyaW5nfSl9IG9ic2VydmVyLm9uRXJyb3IgLSBIYW5kbGUgZXJyb3JzLlxuICAgKiBAcmV0dXJuXG4gICAqL1xuICBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICBjb25zdCBvbkNvbXBsZXRlZE9yaWdpbmFsID0gb2JzZXJ2ZXIub25Db21wbGV0ZWQ7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3Qgb25Db21wbGV0ZWRXcmFwcGVyID0gKG1ldGFkYXRhKSA9PiB7XG5cbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxNZXRhID0gc2VsZi5fbWV0YVN1cHBsaWVyKCk7XG4gICAgICBmb3IobGV0IGtleSBpbiBhZGRpdGlvbmFsTWV0YSkge1xuICAgICAgICBpZiAoYWRkaXRpb25hbE1ldGEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIG1ldGFkYXRhW2tleV0gPSBhZGRpdGlvbmFsTWV0YVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBzdW0gPSBuZXcgUmVzdWx0U3VtbWFyeSh0aGlzLl9zdGF0ZW1lbnQsIHRoaXMuX3BhcmFtZXRlcnMsIG1ldGFkYXRhKTtcblxuICAgICAgLy8gbm90aWZ5IGNvbm5lY3Rpb24gaG9sZGVyIHRoYXQgdGhlIHVzZWQgY29ubmVjdGlvbiBpcyBub3QgbmVlZGVkIGFueSBtb3JlIGJlY2F1c2UgcmVzdWx0IGhhc1xuICAgICAgLy8gYmVlbiBmdWxseSBjb25zdW1lZDsgY2FsbCB0aGUgb3JpZ2luYWwgb25Db21wbGV0ZWQgY2FsbGJhY2sgYWZ0ZXIgdGhhdFxuICAgICAgc2VsZi5fY29ubmVjdGlvbkhvbGRlci5yZWxlYXNlQ29ubmVjdGlvbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICBvbkNvbXBsZXRlZE9yaWdpbmFsLmNhbGwob2JzZXJ2ZXIsIHN1bSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIG9ic2VydmVyLm9uQ29tcGxldGVkID0gb25Db21wbGV0ZWRXcmFwcGVyO1xuXG4gICAgY29uc3Qgb25FcnJvck9yaWdpbmFsID0gb2JzZXJ2ZXIub25FcnJvciB8fCAoZXJyb3IgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJVbmNhdWdodCBlcnJvciB3aGVuIHByb2Nlc3NpbmcgcmVzdWx0OiBcIiArIGVycm9yKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG9uRXJyb3JXcmFwcGVyID0gZXJyb3IgPT4ge1xuICAgICAgLy8gbm90aWZ5IGNvbm5lY3Rpb24gaG9sZGVyIHRoYXQgdGhlIHVzZWQgY29ubmVjdGlvbiBpcyBub3QgbmVlZGVkIGFueSBtb3JlIGJlY2F1c2UgZXJyb3IgaGFwcGVuZWRcbiAgICAgIC8vIGFuZCByZXN1bHQgY2FuJ3QgYmVlIGNvbnN1bWVkIGFueSBmdXJ0aGVyOyBjYWxsIHRoZSBvcmlnaW5hbCBvbkVycm9yIGNhbGxiYWNrIGFmdGVyIHRoYXRcbiAgICAgIHNlbGYuX2Nvbm5lY3Rpb25Ib2xkZXIucmVsZWFzZUNvbm5lY3Rpb24oKS50aGVuKCgpID0+IHtcbiAgICAgICAgb25FcnJvck9yaWdpbmFsLmNhbGwob2JzZXJ2ZXIsIGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgb2JzZXJ2ZXIub25FcnJvciA9IG9uRXJyb3JXcmFwcGVyO1xuXG4gICAgdGhpcy5fc3RyZWFtT2JzZXJ2ZXIuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXN1bHRcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgU2Vzc2lvbiBmcm9tICcuL3Nlc3Npb24nO1xuaW1wb3J0IHtEcml2ZXJ9IGZyb20gJy4vZHJpdmVyJztcbmltcG9ydCB7bmV3RXJyb3IsIFNFU1NJT05fRVhQSVJFRH0gZnJvbSAnLi9lcnJvcic7XG5pbXBvcnQge0xvYWRCYWxhbmNlcn0gZnJvbSAnLi9pbnRlcm5hbC9jb25uZWN0aW9uLXByb3ZpZGVycyc7XG5cbi8qKlxuICogQSBkcml2ZXIgdGhhdCBzdXBwb3J0cyByb3V0aW5nIGluIGEgY29yZS1lZGdlIGNsdXN0ZXIuXG4gKi9cbmNsYXNzIFJvdXRpbmdEcml2ZXIgZXh0ZW5kcyBEcml2ZXIge1xuXG4gIGNvbnN0cnVjdG9yKHVybCwgcm91dGluZ0NvbnRleHQsIHVzZXJBZ2VudCwgdG9rZW4gPSB7fSwgY29uZmlnID0ge30pIHtcbiAgICBzdXBlcih1cmwsIHVzZXJBZ2VudCwgdG9rZW4sIFJvdXRpbmdEcml2ZXIuX3ZhbGlkYXRlQ29uZmlnKGNvbmZpZykpO1xuICAgIHRoaXMuX3JvdXRpbmdDb250ZXh0ID0gcm91dGluZ0NvbnRleHQ7XG4gIH1cblxuICBfY3JlYXRlQ29ubmVjdGlvblByb3ZpZGVyKGFkZHJlc3MsIGNvbm5lY3Rpb25Qb29sLCBkcml2ZXJPbkVycm9yQ2FsbGJhY2spIHtcbiAgICByZXR1cm4gbmV3IExvYWRCYWxhbmNlcihhZGRyZXNzLCB0aGlzLl9yb3V0aW5nQ29udGV4dCwgY29ubmVjdGlvblBvb2wsIGRyaXZlck9uRXJyb3JDYWxsYmFjayk7XG4gIH1cblxuICBfY3JlYXRlU2Vzc2lvbihtb2RlLCBjb25uZWN0aW9uUHJvdmlkZXIsIGJvb2ttYXJrLCBjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFJvdXRpbmdTZXNzaW9uKG1vZGUsIGNvbm5lY3Rpb25Qcm92aWRlciwgYm9va21hcmssIGNvbmZpZywgKGVycm9yLCBjb25uKSA9PiB7XG4gICAgICBpZiAoZXJyb3IuY29kZSA9PT0gU0VTU0lPTl9FWFBJUkVEKSB7XG4gICAgICAgIHRoaXMuX2ZvcmdldENvbm5lY3Rpb24oY29ubik7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH0gZWxzZSBpZiAoUm91dGluZ0RyaXZlci5faXNGYWlsdXJlVG9Xcml0ZShlcnJvcikpIHtcbiAgICAgICAgbGV0IHVybCA9ICdVTktOT1dOJztcbiAgICAgICAgLy8gY29ubmVjdGlvbiBpcyB1bmRlZmluZWQgaWYgZXJyb3IgaGFwcGVuZWQgYmVmb3JlIGNvbm5lY3Rpb24gd2FzIGFjcXVpcmVkXG4gICAgICAgIGlmIChjb25uKSB7XG4gICAgICAgICAgdXJsID0gY29ubi51cmw7XG4gICAgICAgICAgdGhpcy5fY29ubmVjdGlvblByb3ZpZGVyLmZvcmdldFdyaXRlcihjb25uLnVybCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0Vycm9yKCdObyBsb25nZXIgcG9zc2libGUgdG8gd3JpdGUgdG8gc2VydmVyIGF0ICcgKyB1cmwsIFNFU1NJT05fRVhQSVJFRCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBfY29ubmVjdGlvbkVycm9yQ29kZSgpIHtcbiAgICAvLyBjb25uZWN0aW9uIGVycm9ycyBtZWFuIFNFUlZJQ0VfVU5BVkFJTEFCTEUgZm9yIGRpcmVjdCBkcml2ZXIgYnV0IGZvciByb3V0aW5nIGRyaXZlciB0aGV5IHNob3VsZCBvbmx5XG4gICAgLy8gcmVzdWx0IGluIFNFU1NJT05fRVhQSVJFRCBiZWNhdXNlIHRoZXJlIG1pZ2h0IHN0aWxsIGV4aXN0IG90aGVyIHNlcnZlcnMgY2FwYWJsZSBvZiBzZXJ2aW5nIHRoZSByZXF1ZXN0XG4gICAgcmV0dXJuIFNFU1NJT05fRVhQSVJFRDtcbiAgfVxuXG4gIF9mb3JnZXRDb25uZWN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAvLyBjb25uZWN0aW9uIGlzIHVuZGVmaW5lZCBpZiBlcnJvciBoYXBwZW5lZCBiZWZvcmUgY29ubmVjdGlvbiB3YXMgYWNxdWlyZWRcbiAgICBpZiAoY29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fY29ubmVjdGlvblByb3ZpZGVyLmZvcmdldChjb25uZWN0aW9uLnVybCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIF92YWxpZGF0ZUNvbmZpZyhjb25maWcpIHtcbiAgICBpZihjb25maWcudHJ1c3QgPT09ICdUUlVTVF9PTl9GSVJTVF9VU0UnKSB7XG4gICAgICB0aHJvdyBuZXdFcnJvcignVGhlIGNob3NlbiB0cnVzdCBtb2RlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggYSByb3V0aW5nIGRyaXZlcicpO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgc3RhdGljIF9pc0ZhaWx1cmVUb1dyaXRlKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yLmNvZGUgPT09ICdOZW8uQ2xpZW50RXJyb3IuQ2x1c3Rlci5Ob3RBTGVhZGVyJyB8fFxuICAgICAgZXJyb3IuY29kZSA9PT0gJ05lby5DbGllbnRFcnJvci5HZW5lcmFsLkZvcmJpZGRlbk9uUmVhZE9ubHlEYXRhYmFzZSc7XG4gIH1cbn1cblxuY2xhc3MgUm91dGluZ1Nlc3Npb24gZXh0ZW5kcyBTZXNzaW9uIHtcbiAgY29uc3RydWN0b3IobW9kZSwgY29ubmVjdGlvblByb3ZpZGVyLCBib29rbWFyaywgY29uZmlnLCBvbkZhaWxlZENvbm5lY3Rpb24pIHtcbiAgICBzdXBlcihtb2RlLCBjb25uZWN0aW9uUHJvdmlkZXIsIGJvb2ttYXJrLCBjb25maWcpO1xuICAgIHRoaXMuX29uRmFpbGVkQ29ubmVjdGlvbiA9IG9uRmFpbGVkQ29ubmVjdGlvbjtcbiAgfVxuXG4gIF9vblJ1bkZhaWx1cmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29uRmFpbGVkQ29ubmVjdGlvbjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0aW5nRHJpdmVyXG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCBTdHJlYW1PYnNlcnZlciBmcm9tICcuL2ludGVybmFsL3N0cmVhbS1vYnNlcnZlcic7XG5pbXBvcnQgUmVzdWx0IGZyb20gJy4vcmVzdWx0JztcbmltcG9ydCBUcmFuc2FjdGlvbiBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7bmV3RXJyb3J9IGZyb20gJy4vZXJyb3InO1xuaW1wb3J0IHthc3NlcnRTdHJpbmd9IGZyb20gJy4vaW50ZXJuYWwvdXRpbCc7XG5pbXBvcnQgQ29ubmVjdGlvbkhvbGRlciBmcm9tICcuL2ludGVybmFsL2Nvbm5lY3Rpb24taG9sZGVyJztcbmltcG9ydCBEcml2ZXIsIHtSRUFELCBXUklURX0gZnJvbSAnLi9kcml2ZXInO1xuaW1wb3J0IFRyYW5zYWN0aW9uRXhlY3V0b3IgZnJvbSAnLi9pbnRlcm5hbC90cmFuc2FjdGlvbi1leGVjdXRvcic7XG5cbi8qKlxuICAqIEEgU2Vzc2lvbiBpbnN0YW5jZSBpcyB1c2VkIGZvciBoYW5kbGluZyB0aGUgY29ubmVjdGlvbiBhbmRcbiAgKiBzZW5kaW5nIHN0YXRlbWVudHMgdGhyb3VnaCB0aGUgY29ubmVjdGlvbi5cbiAgKiBAYWNjZXNzIHB1YmxpY1xuICAqL1xuXG5jbGFzcyBTZXNzaW9uIHtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlIHRoZSBkZWZhdWx0IGFjY2VzcyBtb2RlIGZvciB0aGlzIHNlc3Npb24uXG4gICAqIEBwYXJhbSB7Q29ubmVjdGlvblByb3ZpZGVyfSBjb25uZWN0aW9uUHJvdmlkZXIgLSB0aGUgY29ubmVjdGlvbiBwcm92aWRlciB0byBhY3F1aXJlIGNvbm5lY3Rpb25zIGZyb20uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYm9va21hcms9dW5kZWZpbmVkXSAtIHRoZSBpbml0aWFsIGJvb2ttYXJrIGZvciB0aGlzIHNlc3Npb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnPXt9XSAtIHRoaXMgZHJpdmVyIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihtb2RlLCBjb25uZWN0aW9uUHJvdmlkZXIsIGJvb2ttYXJrLCBjb25maWcpIHtcbiAgICB0aGlzLl9tb2RlID0gbW9kZTtcbiAgICB0aGlzLl9yZWFkQ29ubmVjdGlvbkhvbGRlciA9IG5ldyBDb25uZWN0aW9uSG9sZGVyKFJFQUQsIGNvbm5lY3Rpb25Qcm92aWRlcik7XG4gICAgdGhpcy5fd3JpdGVDb25uZWN0aW9uSG9sZGVyID0gbmV3IENvbm5lY3Rpb25Ib2xkZXIoV1JJVEUsIGNvbm5lY3Rpb25Qcm92aWRlcik7XG4gICAgdGhpcy5fb3BlbiA9IHRydWU7XG4gICAgdGhpcy5faGFzVHggPSBmYWxzZTtcbiAgICB0aGlzLl9sYXN0Qm9va21hcmsgPSBib29rbWFyaztcbiAgICB0aGlzLl90cmFuc2FjdGlvbkV4ZWN1dG9yID0gX2NyZWF0ZVRyYW5zYWN0aW9uRXhlY3V0b3IoY29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gQ3lwaGVyIHN0YXRlbWVudFxuICAgKiBDb3VsZCBiZSBjYWxsZWQgd2l0aCBhIHN0YXRlbWVudCBvYmplY3QgaS5lLjoge3N0YXRlbWVudDogXCJNQVRDSCAuLi5cIiwgcGFyYW1ldGVyczoge3BhcmFtOiAxfX1cbiAgICogb3Igd2l0aCB0aGUgc3RhdGVtZW50IGFuZCBwYXJhbWV0ZXJzIGFzIHNlcGFyYXRlIGFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHttaXhlZH0gc3RhdGVtZW50IC0gQ3lwaGVyIHN0YXRlbWVudCB0byBleGVjdXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbWV0ZXJzIC0gTWFwIHdpdGggcGFyYW1ldGVycyB0byB1c2UgaW4gc3RhdGVtZW50XG4gICAqIEByZXR1cm4ge1Jlc3VsdH0gLSBOZXcgUmVzdWx0XG4gICAqL1xuICBydW4oc3RhdGVtZW50LCBwYXJhbWV0ZXJzID0ge30pIHtcbiAgICBpZiAodHlwZW9mIHN0YXRlbWVudCA9PT0gJ29iamVjdCcgJiYgc3RhdGVtZW50LnRleHQpIHtcbiAgICAgIHBhcmFtZXRlcnMgPSBzdGF0ZW1lbnQucGFyYW1ldGVycyB8fCB7fTtcbiAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudC50ZXh0O1xuICAgIH1cbiAgICBhc3NlcnRTdHJpbmcoc3RhdGVtZW50LCAnQ3lwaGVyIHN0YXRlbWVudCcpO1xuXG4gICAgcmV0dXJuIHRoaXMuX3J1bihzdGF0ZW1lbnQsIHBhcmFtZXRlcnMsIChjb25uZWN0aW9uLCBzdHJlYW1PYnNlcnZlcikgPT5cbiAgICAgIGNvbm5lY3Rpb24ucnVuKHN0YXRlbWVudCwgcGFyYW1ldGVycywgc3RyZWFtT2JzZXJ2ZXIpXG4gICAgKTtcbiAgfVxuXG4gIF9ydW4oc3RhdGVtZW50LCBwYXJhbWV0ZXJzLCBzdGF0ZW1lbnRSdW5uZXIpIHtcbiAgICBjb25zdCBzdHJlYW1PYnNlcnZlciA9IG5ldyBfUnVuT2JzZXJ2ZXIodGhpcy5fb25SdW5GYWlsdXJlKCkpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Ib2xkZXIgPSB0aGlzLl9jb25uZWN0aW9uSG9sZGVyV2l0aE1vZGUodGhpcy5fbW9kZSk7XG4gICAgaWYgKCF0aGlzLl9oYXNUeCkge1xuICAgICAgY29ubmVjdGlvbkhvbGRlci5pbml0aWFsaXplQ29ubmVjdGlvbigpO1xuICAgICAgY29ubmVjdGlvbkhvbGRlci5nZXRDb25uZWN0aW9uKCkudGhlbihjb25uZWN0aW9uID0+IHtcbiAgICAgICAgc3RyZWFtT2JzZXJ2ZXIucmVzb2x2ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7XG4gICAgICAgIHN0YXRlbWVudFJ1bm5lcihjb25uZWN0aW9uLCBzdHJlYW1PYnNlcnZlcik7XG4gICAgICAgIGNvbm5lY3Rpb24ucHVsbEFsbChzdHJlYW1PYnNlcnZlcik7XG4gICAgICAgIGNvbm5lY3Rpb24uc3luYygpO1xuICAgICAgfSkuY2F0Y2goZXJyb3IgPT4gc3RyZWFtT2JzZXJ2ZXIub25FcnJvcihlcnJvcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW1PYnNlcnZlci5vbkVycm9yKG5ld0Vycm9yKCdTdGF0ZW1lbnRzIGNhbm5vdCBiZSBydW4gZGlyZWN0bHkgb24gYSAnICtcbiAgICAgICAgJ3Nlc3Npb24gd2l0aCBhbiBvcGVuIHRyYW5zYWN0aW9uOyBlaXRoZXIgcnVuIGZyb20gd2l0aGluIHRoZSAnICtcbiAgICAgICAgJ3RyYW5zYWN0aW9uIG9yIHVzZSBhIGRpZmZlcmVudCBzZXNzaW9uLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQoc3RyZWFtT2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycywgKCkgPT4gc3RyZWFtT2JzZXJ2ZXIubWV0YSgpLCBjb25uZWN0aW9uSG9sZGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWdpbiBhIG5ldyB0cmFuc2FjdGlvbiBpbiB0aGlzIHNlc3Npb24uIEEgc2Vzc2lvbiBjYW4gaGF2ZSBhdCBtb3N0IG9uZSB0cmFuc2FjdGlvbiBydW5uaW5nIGF0IGEgdGltZSwgaWYgeW91XG4gICAqIHdhbnQgdG8gcnVuIG11bHRpcGxlIGNvbmN1cnJlbnQgdHJhbnNhY3Rpb25zLCB5b3Ugc2hvdWxkIHVzZSBtdWx0aXBsZSBjb25jdXJyZW50IHNlc3Npb25zLlxuICAgKlxuICAgKiBXaGlsZSBhIHRyYW5zYWN0aW9uIGlzIG9wZW4gdGhlIHNlc3Npb24gY2Fubm90IGJlIHVzZWQgdG8gcnVuIHN0YXRlbWVudHMgb3V0c2lkZSB0aGUgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBib29rbWFyayAtIGEgcmVmZXJlbmNlIHRvIGEgcHJldmlvdXMgdHJhbnNhY3Rpb24uIERFUFJFQ0FURUQ6IFRoaXMgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgaW5cbiAgICogZmF2b3VyIG9mIHtAbGluayBEcml2ZXIjc2Vzc2lvbihzdHJpbmcpfSB0aGF0IGFjY2VwdHMgYW4gaW5pdGlhbCBib29rbWFyay4gU2Vzc2lvbiB3aWxsIGVuc3VyZSB0aGF0IGFsbCBuZXN0ZWRcbiAgICogdHJhbnNhY3Rpb25zIGFyZSBjaGFpbmVkIHdpdGggYm9va21hcmtzIHRvIGd1YXJhbnRlZSBjYXVzYWwgY29uc2lzdGVuY3kuXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbn0gLSBOZXcgVHJhbnNhY3Rpb25cbiAgICovXG4gIGJlZ2luVHJhbnNhY3Rpb24oYm9va21hcmspIHtcbiAgICByZXR1cm4gdGhpcy5fYmVnaW5UcmFuc2FjdGlvbih0aGlzLl9tb2RlLCBib29rbWFyayk7XG4gIH1cblxuICBfYmVnaW5UcmFuc2FjdGlvbihhY2Nlc3NNb2RlLCBib29rbWFyaykge1xuICAgIGlmIChib29rbWFyaykge1xuICAgICAgYXNzZXJ0U3RyaW5nKGJvb2ttYXJrLCAnQm9va21hcmsnKTtcbiAgICAgIHRoaXMuX3VwZGF0ZUJvb2ttYXJrKGJvb2ttYXJrKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGFzVHgpIHtcbiAgICAgIHRocm93IG5ld0Vycm9yKCdZb3UgY2Fubm90IGJlZ2luIGEgdHJhbnNhY3Rpb24gb24gYSBzZXNzaW9uIHdpdGggYW4gb3BlbiB0cmFuc2FjdGlvbjsgJyArXG4gICAgICAgICdlaXRoZXIgcnVuIGZyb20gd2l0aGluIHRoZSB0cmFuc2FjdGlvbiBvciB1c2UgYSBkaWZmZXJlbnQgc2Vzc2lvbi4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBtb2RlID0gRHJpdmVyLl92YWxpZGF0ZVNlc3Npb25Nb2RlKGFjY2Vzc01vZGUpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Ib2xkZXIgPSB0aGlzLl9jb25uZWN0aW9uSG9sZGVyV2l0aE1vZGUobW9kZSk7XG4gICAgY29ubmVjdGlvbkhvbGRlci5pbml0aWFsaXplQ29ubmVjdGlvbigpO1xuICAgIHRoaXMuX2hhc1R4ID0gdHJ1ZTtcblxuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oY29ubmVjdGlvbkhvbGRlciwgKCkgPT4ge1xuICAgICAgICB0aGlzLl9oYXNUeCA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIHRoaXMuX29uUnVuRmFpbHVyZSgpLCB0aGlzLl9sYXN0Qm9va21hcmssIHRoaXMuX3VwZGF0ZUJvb2ttYXJrLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgYm9va21hcmsgcmVjZWl2ZWQgZm9sbG93aW5nIHRoZSBsYXN0IGNvbXBsZXRlZCB7QGxpbmsgVHJhbnNhY3Rpb259LlxuICAgKlxuICAgKiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIGEgcHJldmlvdXMgdHJhbnNhYyd0aW9uXG4gICAqL1xuICBsYXN0Qm9va21hcmsoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhc3RCb29rbWFyaztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGdpdmVuIHVuaXQgb2Ygd29yayBpbiBhIHtAbGluayBEcml2ZXIjUkVBRH0gdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFRyYW5zYWN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBiZSBjb21taXR0ZWQgdW5sZXNzIHRoZSBnaXZlbiBmdW5jdGlvbiB0aHJvd3Mgb3IgcmV0dXJucyBhIHJlamVjdGVkIHByb21pc2UuXG4gICAqIFNvbWUgZmFpbHVyZXMgb2YgdGhlIGdpdmVuIGZ1bmN0aW9uIG9yIHRoZSBjb21taXQgaXRzZWxmIHdpbGwgYmUgcmV0cmllZCB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYgd2l0aCBpbml0aWFsXG4gICAqIGRlbGF5IG9mIDEgc2Vjb25kIGFuZCBtYXhpbXVtIHJldHJ5IHRpbWUgb2YgMzAgc2Vjb25kcy4gTWF4aW11bSByZXRyeSB0aW1lIGlzIGNvbmZpZ3VyYWJsZSB2aWEgZHJpdmVyIGNvbmZpZydzXG4gICAqIDxjb2RlPm1heFRyYW5zYWN0aW9uUmV0cnlUaW1lPC9jb2RlPiBwcm9wZXJ0eSBpbiBtaWxsaXNlY29uZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24odHg6IFRyYW5zYWN0aW9uKTogUHJvbWlzZX0gdHJhbnNhY3Rpb25Xb3JrIC0gY2FsbGJhY2sgdGhhdCBleGVjdXRlcyBvcGVyYXRpb25zIGFnYWluc3RcbiAgICogYSBnaXZlbiB7QGxpbmsgVHJhbnNhY3Rpb259LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlfSByZXNvbHZlZCBwcm9taXNlIGFzIHJldHVybmVkIGJ5IHRoZSBnaXZlbiBmdW5jdGlvbiBvciByZWplY3RlZCBwcm9taXNlIHdoZW4gZ2l2ZW5cbiAgICogZnVuY3Rpb24gb3IgY29tbWl0IGZhaWxzLlxuICAgKi9cbiAgcmVhZFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uV29yaykge1xuICAgIHJldHVybiB0aGlzLl9ydW5UcmFuc2FjdGlvbihSRUFELCB0cmFuc2FjdGlvbldvcmspO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgZ2l2ZW4gdW5pdCBvZiB3b3JrIGluIGEge0BsaW5rIERyaXZlciNXUklURX0gdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFRyYW5zYWN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBiZSBjb21taXR0ZWQgdW5sZXNzIHRoZSBnaXZlbiBmdW5jdGlvbiB0aHJvd3Mgb3IgcmV0dXJucyBhIHJlamVjdGVkIHByb21pc2UuXG4gICAqIFNvbWUgZmFpbHVyZXMgb2YgdGhlIGdpdmVuIGZ1bmN0aW9uIG9yIHRoZSBjb21taXQgaXRzZWxmIHdpbGwgYmUgcmV0cmllZCB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYgd2l0aCBpbml0aWFsXG4gICAqIGRlbGF5IG9mIDEgc2Vjb25kIGFuZCBtYXhpbXVtIHJldHJ5IHRpbWUgb2YgMzAgc2Vjb25kcy4gTWF4aW11bSByZXRyeSB0aW1lIGlzIGNvbmZpZ3VyYWJsZSB2aWEgZHJpdmVyIGNvbmZpZydzXG4gICAqIDxjb2RlPm1heFRyYW5zYWN0aW9uUmV0cnlUaW1lPC9jb2RlPiBwcm9wZXJ0eSBpbiBtaWxsaXNlY29uZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24odHg6IFRyYW5zYWN0aW9uKTogUHJvbWlzZX0gdHJhbnNhY3Rpb25Xb3JrIC0gY2FsbGJhY2sgdGhhdCBleGVjdXRlcyBvcGVyYXRpb25zIGFnYWluc3RcbiAgICogYSBnaXZlbiB7QGxpbmsgVHJhbnNhY3Rpb259LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlfSByZXNvbHZlZCBwcm9taXNlIGFzIHJldHVybmVkIGJ5IHRoZSBnaXZlbiBmdW5jdGlvbiBvciByZWplY3RlZCBwcm9taXNlIHdoZW4gZ2l2ZW5cbiAgICogZnVuY3Rpb24gb3IgY29tbWl0IGZhaWxzLlxuICAgKi9cbiAgd3JpdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbldvcmspIHtcbiAgICByZXR1cm4gdGhpcy5fcnVuVHJhbnNhY3Rpb24oV1JJVEUsIHRyYW5zYWN0aW9uV29yayk7XG4gIH1cblxuICBfcnVuVHJhbnNhY3Rpb24oYWNjZXNzTW9kZSwgdHJhbnNhY3Rpb25Xb3JrKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uRXhlY3V0b3IuZXhlY3V0ZShcbiAgICAgICgpID0+IHRoaXMuX2JlZ2luVHJhbnNhY3Rpb24oYWNjZXNzTW9kZSwgdGhpcy5sYXN0Qm9va21hcmsoKSksXG4gICAgICB0cmFuc2FjdGlvbldvcmtcbiAgICApO1xuICB9XG5cbiAgX3VwZGF0ZUJvb2ttYXJrKG5ld0Jvb2ttYXJrKSB7XG4gICAgaWYgKG5ld0Jvb2ttYXJrKSB7XG4gICAgICB0aGlzLl9sYXN0Qm9va21hcmsgPSBuZXdCb29rbWFyaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgdGhpcyBzZXNzaW9uLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIHRoZSBzZXNzaW9uIGhhcyBiZWVuIGNsb3NlZFxuICAgKiBAcmV0dXJuXG4gICAqL1xuICBjbG9zZShjYWxsYmFjayA9ICgoKSA9PiBudWxsKSkge1xuICAgIGlmICh0aGlzLl9vcGVuKSB7XG4gICAgICB0aGlzLl9vcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLl90cmFuc2FjdGlvbkV4ZWN1dG9yLmNsb3NlKCk7XG4gICAgICB0aGlzLl9yZWFkQ29ubmVjdGlvbkhvbGRlci5jbG9zZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl93cml0ZUNvbm5lY3Rpb25Ib2xkZXIuY2xvc2UoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8vQ2FuIGJlIG92ZXJyaWRkZW4gdG8gYWRkIGVycm9yIGNhbGxiYWNrIG9uIFJVTlxuICBfb25SdW5GYWlsdXJlKCkge1xuICAgIHJldHVybiAoZXJyKSA9PiB7cmV0dXJuIGVycn07XG4gIH1cblxuICBfY29ubmVjdGlvbkhvbGRlcldpdGhNb2RlKG1vZGUpIHtcbiAgICBpZiAobW9kZSA9PT0gUkVBRCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRDb25uZWN0aW9uSG9sZGVyO1xuICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gV1JJVEUpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cml0ZUNvbm5lY3Rpb25Ib2xkZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ld0Vycm9yKCdVbmtub3duIGFjY2VzcyBtb2RlOiAnICsgbW9kZSk7XG4gICAgfVxuICB9XG59XG5cbi8qKiBJbnRlcm5hbCBzdHJlYW0gb2JzZXJ2ZXIgdXNlZCBmb3IgdHJhbnNhY3Rpb25hbCByZXN1bHRzKi9cbmNsYXNzIF9SdW5PYnNlcnZlciBleHRlbmRzIFN0cmVhbU9ic2VydmVyIHtcbiAgY29uc3RydWN0b3Iob25FcnJvcikge1xuICAgIHN1cGVyKG9uRXJyb3IpO1xuICAgIHRoaXMuX21ldGEgPSB7fTtcbiAgfVxuXG4gIG9uQ29tcGxldGVkKG1ldGEpIHtcbiAgICBzdXBlci5vbkNvbXBsZXRlZChtZXRhKTtcbiAgICBmb3IodmFyIGtleSBpbiBtZXRhKXtcbiAgICAgIGlmKG1ldGEuaGFzT3duUHJvcGVydHkoa2V5KSl7XG4gICAgICAgIHRoaXMuX21ldGFba2V5XT1tZXRhW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbWV0YSgpIHtcbiAgICBjb25zdCBzZXJ2ZXJNZXRhID0ge3NlcnZlcjogdGhpcy5fY29ubi5zZXJ2ZXJ9O1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9tZXRhLCBzZXJ2ZXJNZXRhKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlVHJhbnNhY3Rpb25FeGVjdXRvcihjb25maWcpIHtcbiAgY29uc3QgbWF4UmV0cnlUaW1lTXMgPSAoY29uZmlnICYmIGNvbmZpZy5tYXhUcmFuc2FjdGlvblJldHJ5VGltZSkgPyBjb25maWcubWF4VHJhbnNhY3Rpb25SZXRyeVRpbWUgOiBudWxsO1xuICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uRXhlY3V0b3IobWF4UmV0cnlUaW1lTXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZXNzaW9uO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgU3RyZWFtT2JzZXJ2ZXIgZnJvbSAnLi9pbnRlcm5hbC9zdHJlYW0tb2JzZXJ2ZXInO1xuaW1wb3J0IFJlc3VsdCBmcm9tICcuL3Jlc3VsdCc7XG5pbXBvcnQge2Fzc2VydFN0cmluZ30gZnJvbSAnLi9pbnRlcm5hbC91dGlsJztcbmltcG9ydCB7RU1QVFlfQ09OTkVDVElPTl9IT0xERVJ9IGZyb20gJy4vaW50ZXJuYWwvY29ubmVjdGlvbi1ob2xkZXInO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB0cmFuc2FjdGlvbiBpbiB0aGUgTmVvNGogZGF0YWJhc2UuXG4gKlxuICogQGFjY2VzcyBwdWJsaWNcbiAqL1xuY2xhc3MgVHJhbnNhY3Rpb24ge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7Q29ubmVjdGlvbkhvbGRlcn0gY29ubmVjdGlvbkhvbGRlciAtIHRoZSBjb25uZWN0aW9uIGhvbGRlciB0byBnZXQgY29ubmVjdGlvbiBmcm9tLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IG9uQ2xvc2UgLSBGdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb3Igcm9sbGVkIGJhY2suXG4gICAqIEBwYXJhbSBlcnJvclRyYW5zZm9ybWVyIGNhbGxiYWNrIHVzZSB0byB0cmFuc2Zvcm0gZXJyb3JcbiAgICogQHBhcmFtIGJvb2ttYXJrIG9wdGlvbmFsIGJvb2ttYXJrXG4gICAqIEBwYXJhbSBvbkJvb2ttYXJrIGNhbGxiYWNrIGludm9rZWQgd2hlbiBuZXcgYm9va21hcmsgaXMgcHJvZHVjZWRcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb25Ib2xkZXIsIG9uQ2xvc2UsIGVycm9yVHJhbnNmb3JtZXIsIGJvb2ttYXJrLCBvbkJvb2ttYXJrKSB7XG4gICAgdGhpcy5fY29ubmVjdGlvbkhvbGRlciA9IGNvbm5lY3Rpb25Ib2xkZXI7XG4gICAgbGV0IHN0cmVhbU9ic2VydmVyID0gbmV3IF9UcmFuc2FjdGlvblN0cmVhbU9ic2VydmVyKHRoaXMpO1xuICAgIGxldCBwYXJhbXMgPSB7fTtcbiAgICBpZiAoYm9va21hcmspIHtcbiAgICAgIHBhcmFtcyA9IHtib29rbWFyazogYm9va21hcmt9O1xuICAgIH1cblxuICAgIHRoaXMuX2Nvbm5lY3Rpb25Ib2xkZXIuZ2V0Q29ubmVjdGlvbigpLnRoZW4oY29ubiA9PiB7XG4gICAgICBzdHJlYW1PYnNlcnZlci5yZXNvbHZlQ29ubmVjdGlvbihjb25uKTtcbiAgICAgIGNvbm4ucnVuKCdCRUdJTicsIHBhcmFtcywgc3RyZWFtT2JzZXJ2ZXIpO1xuICAgICAgY29ubi5wdWxsQWxsKHN0cmVhbU9ic2VydmVyKTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiBzdHJlYW1PYnNlcnZlci5vbkVycm9yKGVycm9yKSk7XG5cbiAgICB0aGlzLl9zdGF0ZSA9IF9zdGF0ZXMuQUNUSVZFO1xuICAgIHRoaXMuX29uQ2xvc2UgPSBvbkNsb3NlO1xuICAgIHRoaXMuX2Vycm9yVHJhbnNmb3JtZXIgPSBlcnJvclRyYW5zZm9ybWVyO1xuICAgIHRoaXMuX29uQm9va21hcmsgPSBvbkJvb2ttYXJrIHx8ICgoKSA9PiB7fSk7XG4gIH1cblxuICAvKipcbiAgICogUnVuIEN5cGhlciBzdGF0ZW1lbnRcbiAgICogQ291bGQgYmUgY2FsbGVkIHdpdGggYSBzdGF0ZW1lbnQgb2JqZWN0IGkuZS46IHtzdGF0ZW1lbnQ6IFwiTUFUQ0ggLi4uXCIsIHBhcmFtZXRlcnM6IHtwYXJhbTogMX19XG4gICAqIG9yIHdpdGggdGhlIHN0YXRlbWVudCBhbmQgcGFyYW1ldGVycyBhcyBzZXBhcmF0ZSBhcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7bWl4ZWR9IHN0YXRlbWVudCAtIEN5cGhlciBzdGF0ZW1lbnQgdG8gZXhlY3V0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1ldGVycyAtIE1hcCB3aXRoIHBhcmFtZXRlcnMgdG8gdXNlIGluIHN0YXRlbWVudFxuICAgKiBAcmV0dXJuIHtSZXN1bHR9IE5ldyBSZXN1bHRcbiAgICovXG4gIHJ1bihzdGF0ZW1lbnQsIHBhcmFtZXRlcnMpIHtcbiAgICBpZih0eXBlb2Ygc3RhdGVtZW50ID09PSAnb2JqZWN0JyAmJiBzdGF0ZW1lbnQudGV4dCkge1xuICAgICAgcGFyYW1ldGVycyA9IHN0YXRlbWVudC5wYXJhbWV0ZXJzIHx8IHt9O1xuICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50LnRleHQ7XG4gICAgfVxuICAgIGFzc2VydFN0cmluZyhzdGF0ZW1lbnQsIFwiQ3lwaGVyIHN0YXRlbWVudFwiKTtcblxuICAgIHJldHVybiB0aGlzLl9zdGF0ZS5ydW4odGhpcy5fY29ubmVjdGlvbkhvbGRlciwgIG5ldyBfVHJhbnNhY3Rpb25TdHJlYW1PYnNlcnZlcih0aGlzKSwgc3RhdGVtZW50LCBwYXJhbWV0ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21taXRzIHRoZSB0cmFuc2FjdGlvbiBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LlxuICAgKlxuICAgKiBBZnRlciBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbiBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtSZXN1bHR9IE5ldyBSZXN1bHRcbiAgICovXG4gIGNvbW1pdCgpIHtcbiAgICBsZXQgY29tbWl0dGVkID0gdGhpcy5fc3RhdGUuY29tbWl0KHRoaXMuX2Nvbm5lY3Rpb25Ib2xkZXIsIG5ldyBfVHJhbnNhY3Rpb25TdHJlYW1PYnNlcnZlcih0aGlzKSk7XG4gICAgdGhpcy5fc3RhdGUgPSBjb21taXR0ZWQuc3RhdGU7XG4gICAgLy9jbGVhbiB1cFxuICAgIHRoaXMuX29uQ2xvc2UoKTtcbiAgICByZXR1cm4gY29tbWl0dGVkLnJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb2xsYmFja3MgdGhlIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBBZnRlciByb2xsaW5nIGJhY2ssIHRoZSB0cmFuc2FjdGlvbiBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtSZXN1bHR9IE5ldyBSZXN1bHRcbiAgICovXG4gIHJvbGxiYWNrKCkge1xuICAgIGxldCBjb21taXR0ZWQgPSB0aGlzLl9zdGF0ZS5yb2xsYmFjayh0aGlzLl9jb25uZWN0aW9uSG9sZGVyLCBuZXcgX1RyYW5zYWN0aW9uU3RyZWFtT2JzZXJ2ZXIodGhpcykpO1xuICAgIHRoaXMuX3N0YXRlID0gY29tbWl0dGVkLnN0YXRlO1xuICAgIC8vY2xlYW4gdXBcbiAgICB0aGlzLl9vbkNsb3NlKCk7XG4gICAgcmV0dXJuIGNvbW1pdHRlZC5yZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyB0cmFuc2FjdGlvbiBpcyBhY3RpdmUsIHdoaWNoIG1lYW5zIGNvbW1pdCBhbmQgcm9sbGJhY2sgZGlkIG5vdCBoYXBwZW4uXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHdoZW4gbm90IGNvbW1pdHRlZCBhbmQgbm90IHJvbGxlZCBiYWNrLCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLlxuICAgKi9cbiAgaXNPcGVuKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSA9PSBfc3RhdGVzLkFDVElWRTtcbiAgfVxuXG4gIF9vbkVycm9yKCkge1xuICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICAvLyBhdHRlbXB0IHRvIHJvbGxiYWNrLCB1c2VmdWwgd2hlbiBUcmFuc2FjdGlvbiNydW4oKSBmYWlsZWRcbiAgICAgIHJldHVybiB0aGlzLnJvbGxiYWNrKCkuY2F0Y2goaWdub3JlZEVycm9yID0+IHtcbiAgICAgICAgLy8gaWdub3JlIGFsbCBlcnJvcnMgYmVjYXVzZSBpdCBpcyBiZXN0IGVmZm9ydCBhbmQgdHJhbnNhY3Rpb24gbWlnaHQgYWxyZWFkeSBiZSByb2xsZWQgYmFja1xuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIC8vIGFmdGVyIHJvbGxiYWNrIGF0dGVtcHQgY2hhbmdlIHRoaXMgdHJhbnNhY3Rpb24ncyBzdGF0ZSB0byBGQUlMRURcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBfc3RhdGVzLkZBSUxFRDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlcnJvciBoYXBwZW5lZCBpbiBpbi1hY3RpdmUgdHJhbnNhY3Rpb24sIGp1c3QgdG8gdGhlIGNsZWFudXAgYW5kIGNoYW5nZSBzdGF0ZSB0byBGQUlMRURcbiAgICAgIHRoaXMuX3N0YXRlID0gX3N0YXRlcy5GQUlMRUQ7XG4gICAgICB0aGlzLl9vbkNsb3NlKCk7XG4gICAgICAvLyBubyBhc3luYyBhY3Rpb25zIG5lZWRlZCAtIHJldHVybiByZXNvbHZlZCBwcm9taXNlXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICB9XG59XG5cbi8qKiBJbnRlcm5hbCBzdHJlYW0gb2JzZXJ2ZXIgdXNlZCBmb3IgdHJhbnNhY3Rpb25hbCByZXN1bHRzKi9cbmNsYXNzIF9UcmFuc2FjdGlvblN0cmVhbU9ic2VydmVyIGV4dGVuZHMgU3RyZWFtT2JzZXJ2ZXIge1xuICBjb25zdHJ1Y3Rvcih0eCkge1xuICAgIHN1cGVyKHR4Ll9lcnJvclRyYW5zZm9ybWVyIHx8ICgoZXJyKSA9PiB7cmV0dXJuIGVycn0pKTtcbiAgICB0aGlzLl90eCA9IHR4O1xuICAgIC8vdGhpcyBpcyB0byB0byBhdm9pZCBtdWx0aXBsZSBjYWxscyB0byBvbkVycm9yIGNhdXNlZCBieSBJR05PUkVEXG4gICAgdGhpcy5faGFzRmFpbGVkID0gZmFsc2U7XG4gIH1cblxuICBvbkVycm9yKGVycm9yKSB7XG4gICAgaWYgKCF0aGlzLl9oYXNGYWlsZWQpIHtcbiAgICAgIHRoaXMuX3R4Ll9vbkVycm9yKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHN1cGVyLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgICB0aGlzLl9oYXNGYWlsZWQgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25Db21wbGV0ZWQobWV0YSkge1xuICAgIHN1cGVyLm9uQ29tcGxldGVkKG1ldGEpO1xuICAgIGNvbnN0IGJvb2ttYXJrID0gbWV0YS5ib29rbWFyaztcbiAgICB0aGlzLl90eC5fb25Cb29rbWFyayhib29rbWFyayk7XG4gIH1cblxuICBzZXJ2ZXJNZXRhKCkge1xuICAgIGNvbnN0IHNlcnZlck1ldGEgPSB7c2VydmVyOiB0aGlzLl9jb25uLnNlcnZlcn07XG4gICAgcmV0dXJuIHNlcnZlck1ldGE7XG4gIH1cbn1cblxuLyoqIGludGVybmFsIHN0YXRlIG1hY2hpbmUgb2YgdGhlIHRyYW5zYWN0aW9uKi9cbmxldCBfc3RhdGVzID0ge1xuICAvL1RoZSB0cmFuc2FjdGlvbiBpcyBydW5uaW5nIHdpdGggbm8gZXhwbGljaXQgc3VjY2VzcyBvciBmYWlsdXJlIG1hcmtlZFxuICBBQ1RJVkU6IHtcbiAgICBjb21taXQ6IChjb25uZWN0aW9uSG9sZGVyLCBvYnNlcnZlcikgPT4ge1xuICAgICAgcmV0dXJuIHtyZXN1bHQ6IF9ydW5QdWxsQWxsKFwiQ09NTUlUXCIsIGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyKSxcbiAgICAgICAgc3RhdGU6IF9zdGF0ZXMuU1VDQ0VFREVEfVxuICAgIH0sXG4gICAgcm9sbGJhY2s6IChjb25uZWN0aW9uSG9sZGVyLCBvYnNlcnZlcikgPT4ge1xuICAgICAgcmV0dXJuIHtyZXN1bHQ6IF9ydW5QdWxsQWxsKFwiUk9MTEJBQ0tcIiwgY29ubmVjdGlvbkhvbGRlciwgb2JzZXJ2ZXIpLCBzdGF0ZTogX3N0YXRlcy5ST0xMRURfQkFDS307XG4gICAgfSxcbiAgICBydW46IChjb25uZWN0aW9uSG9sZGVyLCBvYnNlcnZlciwgc3RhdGVtZW50LCBwYXJhbWV0ZXJzKSA9PiB7XG4gICAgICBjb25uZWN0aW9uSG9sZGVyLmdldENvbm5lY3Rpb24oKS50aGVuKGNvbm4gPT4ge1xuICAgICAgICBvYnNlcnZlci5yZXNvbHZlQ29ubmVjdGlvbihjb25uKTtcbiAgICAgICAgY29ubi5ydW4oc3RhdGVtZW50LCBwYXJhbWV0ZXJzIHx8IHt9LCBvYnNlcnZlcik7XG4gICAgICAgIGNvbm4ucHVsbEFsbChvYnNlcnZlcik7XG4gICAgICAgIGNvbm4uc3luYygpO1xuICAgICAgfSkuY2F0Y2goZXJyb3IgPT4gb2JzZXJ2ZXIub25FcnJvcihlcnJvcikpO1xuXG4gICAgICByZXR1cm4gbmV3UnVuUmVzdWx0KG9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMsICgpID0+IG9ic2VydmVyLnNlcnZlck1ldGEoKSk7XG4gICAgfVxuICB9LFxuXG4gIC8vQW4gZXJyb3IgaGFzIG9jY3VycmVkLCB0cmFuc2FjdGlvbiBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgYW5kIG5vIG1vcmUgbWVzc2FnZXMgd2lsbFxuICAvLyBiZSBzZW50IGZvciB0aGlzIHRyYW5zYWN0aW9uLlxuICBGQUlMRUQ6IHtcbiAgICBjb21taXQ6IChjb25uZWN0aW9uSG9sZGVyLCBvYnNlcnZlcikgPT4ge1xuICAgICAgb2JzZXJ2ZXIub25FcnJvcih7XG4gICAgICAgIGVycm9yOiBcIkNhbm5vdCBjb21taXQgc3RhdGVtZW50cyBpbiB0aGlzIHRyYW5zYWN0aW9uLCBiZWNhdXNlIHByZXZpb3VzIHN0YXRlbWVudHMgaW4gdGhlIFwiICtcbiAgICAgICAgXCJ0cmFuc2FjdGlvbiBoYXMgZmFpbGVkIGFuZCB0aGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4gcm9sbGVkIGJhY2suIFBsZWFzZSBzdGFydCBhIG5ld1wiICtcbiAgICAgICAgXCIgdHJhbnNhY3Rpb24gdG8gcnVuIGFub3RoZXIgc3RhdGVtZW50LlwiXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7cmVzdWx0OiBuZXdEdW1teVJlc3VsdChvYnNlcnZlciwgXCJDT01NSVRcIiwge30pLCBzdGF0ZTogX3N0YXRlcy5GQUlMRUR9O1xuICAgIH0sXG4gICAgcm9sbGJhY2s6IChjb25uZWN0aW9uSG9sZGVyLCBvYnNlcnZlcikgPT4ge1xuICAgICAgb2JzZXJ2ZXIub25FcnJvcih7ZXJyb3I6XG4gICAgICBcIkNhbm5vdCByb2xsYmFjayB0cmFuc2FjdGlvbiwgYmVjYXVzZSBwcmV2aW91cyBzdGF0ZW1lbnRzIGluIHRoZSBcIiArXG4gICAgICBcInRyYW5zYWN0aW9uIGhhcyBmYWlsZWQgYW5kIHRoZSB0cmFuc2FjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJvbGxlZCBiYWNrLlwifSk7XG4gICAgICByZXR1cm4ge3Jlc3VsdDogbmV3RHVtbXlSZXN1bHQob2JzZXJ2ZXIsIFwiUk9MTEJBQ0tcIiwge30pLCBzdGF0ZTogX3N0YXRlcy5GQUlMRUR9O1xuICAgIH0sXG4gICAgcnVuOiAoY29ubmVjdGlvbkhvbGRlciwgb2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycykgPT4ge1xuICAgICAgb2JzZXJ2ZXIub25FcnJvcih7ZXJyb3I6XG4gICAgICBcIkNhbm5vdCBydW4gc3RhdGVtZW50LCBiZWNhdXNlIHByZXZpb3VzIHN0YXRlbWVudHMgaW4gdGhlIFwiICtcbiAgICAgIFwidHJhbnNhY3Rpb24gaGFzIGZhaWxlZCBhbmQgdGhlIHRyYW5zYWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcm9sbGVkIGJhY2suXCJ9KTtcbiAgICAgIHJldHVybiBuZXdEdW1teVJlc3VsdChvYnNlcnZlciwgc3RhdGVtZW50LCBwYXJhbWV0ZXJzKTtcbiAgICB9XG4gIH0sXG5cbiAgLy9UaGlzIHRyYW5zYWN0aW9uIGhhcyBzdWNjZXNzZnVsbHkgY29tbWl0dGVkXG4gIFNVQ0NFRURFRDoge1xuICAgIGNvbW1pdDogKGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyKSA9PiB7XG4gICAgICBvYnNlcnZlci5vbkVycm9yKHtcbiAgICAgICAgZXJyb3I6IFwiQ2Fubm90IGNvbW1pdCBzdGF0ZW1lbnRzIGluIHRoaXMgdHJhbnNhY3Rpb24sIGJlY2F1c2UgY29tbWl0IGhhcyBhbHJlYWR5IGJlZW4gc3VjY2Vzc2Z1bGx5IGNhbGxlZCBvbiB0aGUgdHJhbnNhY3Rpb24gYW5kIHRyYW5zYWN0aW9uIGhhcyBiZWVuIGNsb3NlZC4gUGxlYXNlIHN0YXJ0IGEgbmV3XCIgK1xuICAgICAgICBcIiB0cmFuc2FjdGlvbiB0byBydW4gYW5vdGhlciBzdGF0ZW1lbnQuXCJcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtyZXN1bHQ6IG5ld0R1bW15UmVzdWx0KG9ic2VydmVyLCBcIkNPTU1JVFwiLCB7fSksIHN0YXRlOiBfc3RhdGVzLlNVQ0NFRURFRH07XG4gICAgfSxcbiAgICByb2xsYmFjazogKGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyKSA9PiB7XG4gICAgICBvYnNlcnZlci5vbkVycm9yKHtlcnJvcjpcbiAgICAgICAgXCJDYW5ub3Qgcm9sbGJhY2sgdHJhbnNhY3Rpb24sIGJlY2F1c2UgdHJhbnNhY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBzdWNjZXNzZnVsbHkgY2xvc2VkLlwifSk7XG4gICAgICByZXR1cm4ge3Jlc3VsdDogbmV3RHVtbXlSZXN1bHQob2JzZXJ2ZXIsIFwiUk9MTEJBQ0tcIiwge30pLCBzdGF0ZTogX3N0YXRlcy5TVUNDRUVERUR9O1xuICAgIH0sXG4gICAgcnVuOiAoY29ubmVjdGlvbkhvbGRlciwgb2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycykgPT4ge1xuICAgICAgb2JzZXJ2ZXIub25FcnJvcih7ZXJyb3I6XG4gICAgICBcIkNhbm5vdCBydW4gc3RhdGVtZW50LCBiZWNhdXNlIHRyYW5zYWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gc3VjY2Vzc2Z1bGx5IGNsb3NlZC5cIn0pO1xuICAgICAgcmV0dXJuIG5ld0R1bW15UmVzdWx0KG9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMpO1xuICAgIH1cbiAgfSxcblxuICAvL1RoaXMgdHJhbnNhY3Rpb24gaGFzIGJlZW4gcm9sbGVkIGJhY2tcbiAgUk9MTEVEX0JBQ0s6IHtcbiAgICBjb21taXQ6IChjb25uZWN0aW9uSG9sZGVyLCBvYnNlcnZlcikgPT4ge1xuICAgICAgb2JzZXJ2ZXIub25FcnJvcih7XG4gICAgICAgIGVycm9yOiBcIkNhbm5vdCBjb21taXQgdGhpcyB0cmFuc2FjdGlvbiwgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIHJvbGxlZCBiYWNrLlwiXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7cmVzdWx0OiBuZXdEdW1teVJlc3VsdChvYnNlcnZlciwgXCJDT01NSVRcIiwge30pLCBzdGF0ZTogX3N0YXRlcy5ST0xMRURfQkFDS307XG4gICAgfSxcbiAgICByb2xsYmFjazogKGNvbm5lY3Rpb25Ib2xkZXIsIG9ic2VydmVyKSA9PiB7XG4gICAgICBvYnNlcnZlci5vbkVycm9yKHtlcnJvcjpcbiAgICAgICAgXCJDYW5ub3Qgcm9sbGJhY2sgdHJhbnNhY3Rpb24sIGJlY2F1c2UgdHJhbnNhY3Rpb24gaGFzIGFscmVhZHkgYmVlbiByb2xsZWQgYmFjay5cIn0pO1xuICAgICAgcmV0dXJuIHtyZXN1bHQ6IG5ld0R1bW15UmVzdWx0KG9ic2VydmVyLCBcIlJPTExCQUNLXCIsIHt9KSwgc3RhdGU6IF9zdGF0ZXMuUk9MTEVEX0JBQ0t9O1xuICAgIH0sXG4gICAgcnVuOiAoY29ubmVjdGlvbkhvbGRlciwgb2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycykgPT4ge1xuICAgICAgb2JzZXJ2ZXIub25FcnJvcih7ZXJyb3I6XG4gICAgICAgIFwiQ2Fubm90IHJ1biBzdGF0ZW1lbnQsIGJlY2F1c2UgdHJhbnNhY3Rpb24gaGFzIGFscmVhZHkgYmVlbiByb2xsZWQgYmFjay5cIn0pO1xuICAgICAgcmV0dXJuIG5ld0R1bW15UmVzdWx0KG9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gX3J1blB1bGxBbGwobXNnLCBjb25uZWN0aW9uSG9sZGVyLCBvYnNlcnZlcikge1xuICBjb25uZWN0aW9uSG9sZGVyLmdldENvbm5lY3Rpb24oKS50aGVuKFxuICAgIGNvbm4gPT4ge1xuICAgICAgb2JzZXJ2ZXIucmVzb2x2ZUNvbm5lY3Rpb24oY29ubik7XG4gICAgICBjb25uLnJ1bihtc2csIHt9LCBvYnNlcnZlcik7XG4gICAgICBjb25uLnB1bGxBbGwob2JzZXJ2ZXIpO1xuICAgICAgY29ubi5zeW5jKCk7XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4gb2JzZXJ2ZXIub25FcnJvcihlcnJvcikpO1xuXG4gIC8vIGZvciBjb21taXQgJiByb2xsYmFjayB3ZSBuZWVkIHJlc3VsdCB0aGF0IHVzZXMgcmVhbCBjb25uZWN0aW9uIGhvbGRlciBhbmQgbm90aWZpZXMgaXQgd2hlblxuICAvLyBjb25uZWN0aW9uIGlzIG5vdCBuZWVkZWQgYW5kIGNhbiBiZSBzYWZlbHkgcmVsZWFzZWQgdG8gdGhlIHBvb2xcbiAgcmV0dXJuIG5ldyBSZXN1bHQob2JzZXJ2ZXIsIG1zZywge30sIGVtcHR5TWV0YWRhdGFTdXBwbGllciwgY29ubmVjdGlvbkhvbGRlcik7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBSZXN1bHR9IHdpdGggZW1wdHkgY29ubmVjdGlvbiBob2xkZXIuXG4gKiBTaG91bGQgYmUgdXNlZCBhcyBhIHJlc3VsdCBmb3IgcnVubmluZyBjeXBoZXIgc3RhdGVtZW50cy4gVGhleSBjYW4gcmVzdWx0IGluIG1ldGFkYXRhIGJ1dCBzaG91bGQgbm90XG4gKiBpbmZsdWVuY2UgcmVhbCBjb25uZWN0aW9uIGhvbGRlciB0byByZWxlYXNlIGNvbm5lY3Rpb25zIGJlY2F1c2Ugc2luZ2xlIHRyYW5zYWN0aW9uIGNhbiBoYXZlXG4gKiB7QGxpbmsgVHJhbnNhY3Rpb24jcnVufSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuXG4gKiBAcGFyYW0ge1N0cmVhbU9ic2VydmVyfSBvYnNlcnZlciAtIGFuIG9ic2VydmVyIGZvciB0aGUgY3JlYXRlZCByZXN1bHQuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVtZW50IC0gdGhlIGN5cGhlciBzdGF0ZW1lbnQgdGhhdCBwcm9kdWNlZCB0aGUgcmVzdWx0LlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnMgLSB0aGUgcGFyYW1ldGVycyBmb3IgY3lwaGVyIHN0YXRlbWVudCB0aGF0IHByb2R1Y2VkIHRoZSByZXN1bHQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXRhZGF0YVN1cHBsaWVyIC0gdGhlIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIG1ldGFkYXRhIG9iamVjdC5cbiAqIEByZXR1cm4ge1Jlc3VsdH0gbmV3IHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gbmV3UnVuUmVzdWx0KG9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMsIG1ldGFkYXRhU3VwcGxpZXIpIHtcbiAgcmV0dXJuIG5ldyBSZXN1bHQob2JzZXJ2ZXIsIHN0YXRlbWVudCwgcGFyYW1ldGVycywgbWV0YWRhdGFTdXBwbGllciwgRU1QVFlfQ09OTkVDVElPTl9IT0xERVIpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgUmVzdWx0fSB3aXRob3V0IG1ldGFkYXRhIHN1cHBsaWVyIGFuZCB3aXRoIGVtcHR5IGNvbm5lY3Rpb24gaG9sZGVyLlxuICogRm9yIGNhc2VzIHdoZW4gcmVzdWx0IHJlcHJlc2VudHMgYW4gaW50ZXJtZWRpYXRlIG9yIGZhaWxlZCBhY3Rpb24sIGRvZXMgbm90IHJlcXVpcmUgYW55IG1ldGFkYXRhIGFuZCBkb2VzIG5vdFxuICogbmVlZCB0byBpbmZsdWVuY2UgcmVhbCBjb25uZWN0aW9uIGhvbGRlciB0byByZWxlYXNlIGNvbm5lY3Rpb25zLlxuICogQHBhcmFtIHtTdHJlYW1PYnNlcnZlcn0gb2JzZXJ2ZXIgLSBhbiBvYnNlcnZlciBmb3IgdGhlIGNyZWF0ZWQgcmVzdWx0LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlbWVudCAtIHRoZSBjeXBoZXIgc3RhdGVtZW50IHRoYXQgcHJvZHVjZWQgdGhlIHJlc3VsdC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbWV0ZXJzIC0gdGhlIHBhcmFtZXRlcnMgZm9yIGN5cGhlciBzdGF0ZW1lbnQgdGhhdCBwcm9kdWNlZCB0aGUgcmVzdWx0LlxuICogQHJldHVybiB7UmVzdWx0fSBuZXcgcmVzdWx0LlxuICovXG5mdW5jdGlvbiBuZXdEdW1teVJlc3VsdChvYnNlcnZlciwgc3RhdGVtZW50LCBwYXJhbWV0ZXJzKSB7XG4gIHJldHVybiBuZXcgUmVzdWx0KG9ic2VydmVyLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMsIGVtcHR5TWV0YWRhdGFTdXBwbGllciwgRU1QVFlfQ09OTkVDVElPTl9IT0xERVIpO1xufVxuXG5mdW5jdGlvbiBlbXB0eU1ldGFkYXRhU3VwcGxpZXIoKSB7XG4gIHJldHVybiB7fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVHJhbnNhY3Rpb247XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gRE8gTk9UIENIQU5HRSBUSEUgVkVSU0lPTiBCRUxPVyBIRVJFXG4vLyBUaGlzIGlzIHNldCBieSB0aGUgYnVpbGQgc3lzdGVtIGF0IHJlbGVhc2UgdGltZSwgdXNpbmdcbi8vICAgZ3VscCBzZXQgLS12ZXJzaW9uIDxyZWxlYXNldmVyc2lvbj5cbi8vXG4vLyBUaGlzIGlzIHNldCB1cCB0aGlzIHdheSB0byBrZWVwIHRoZSB2ZXJzaW9uIGluIHRoZSBjb2RlIGluXG4vLyBzeW5jIHdpdGggdGhlIG5wbSBwYWNrYWdlIHZlcnNpb24sIGFuZCB0byBhbGxvdyB0aGUgYnVpbGRcbi8vIHN5c3RlbSB0byBjb250cm9sIHZlcnNpb24gbmFtZXMgYXQgcGFja2FnaW5nIHRpbWUuXG5leHBvcnQgZGVmYXVsdCBcIjAuMC4wLWRldlwiO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBhbGxvYyA9IHJlcXVpcmUoJy4uLy4uL2xpYi92MS9pbnRlcm5hbC9idWYnKS5hbGxvYztcbnZhciBDb21iaW5lZEJ1ZmZlciA9IHJlcXVpcmUoJy4uLy4uL2xpYi92MS9pbnRlcm5hbC9idWYnKS5Db21iaW5lZEJ1ZmZlcjtcbnZhciB1dGY4ID0gcmVxdWlyZSgnLi4vLi4vbGliL3YxL2ludGVybmFsL3V0ZjgnKS5kZWZhdWx0O1xudmFyIFVucGFja2VyID0gcmVxdWlyZShcIi4uLy4uL2xpYi92MS9pbnRlcm5hbC9wYWNrc3RyZWFtLmpzXCIpLlVucGFja2VyO1xuXG5kZXNjcmliZSgnYnVmZmVycycsIGZ1bmN0aW9uKCkge1xuICBpdCgnc2hvdWxkIGhhdmUgaGVscGZ1bCB0b1N0cmluZycsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIGIgPSBhbGxvYyg0KTtcbiAgICBiLndyaXRlSW50OCgxKTtcbiAgICBiLndyaXRlSW50OCg4KTtcbiAgICBiLndyaXRlSW50OCgxNSk7XG4gICAgYi53cml0ZUludDgoMTI3KTtcblxuICAgIC8vIFdoZW5cbiAgICB2YXIgc3RyID0gYi50b1N0cmluZygpO1xuICAgIHZhciBoZXggPSBiLnRvSGV4KCk7XG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KCBzdHIgKS50b0NvbnRhaW4oXCIoIHBvc2l0aW9uPTQgKVxcbiAgMDEgMDggMGYgN2ZcIik7XG4gICAgZXhwZWN0KGhleCkudG9CZShcIjAxIDA4IDBmIDdmIFwiKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWFkIGFuZCB3cml0ZSA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VycycsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIGIgPSBhbGxvYygxKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICB2YXIgbiA9IE1hdGgucG93KDIsIGkpO1xuXG4gICAgICAvLyBXaGVuXG4gICAgICBiLnB1dFVJbnQ4KCAwLCBuICk7XG5cbiAgICAgIC8vIFRoZW5cbiAgICAgIGV4cGVjdCggYi5nZXRVSW50OCgwKSApLnRvQmUoIG4gKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVhZCBhbmQgd3JpdGUgMTYtYml0IHVuc2lnbmVkIGludGVnZXJzJywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgYiA9IGFsbG9jKDIpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNTsgaSsrKSB7XG4gICAgICB2YXIgbiA9IE1hdGgucG93KDIsIGkpO1xuXG4gICAgICAvLyBXaGVuXG4gICAgICBiLnB1dFVJbnQxNiggMCwgbiApO1xuXG4gICAgICAvLyBUaGVuXG4gICAgICBleHBlY3QoIGIuZ2V0VUludDE2KDApICkudG9CZSggbiApO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWFkIGFuZCB3cml0ZSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlcnMnLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciBiID0gYWxsb2MoNCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDMwOyBpKyspIHtcbiAgICAgIHZhciBuID0gTWF0aC5wb3coMiwgaSk7XG5cbiAgICAgIC8vIFdoZW5cbiAgICAgIGIucHV0VUludDMyKCAwLCBuICk7XG5cbiAgICAgIC8vIFRoZW5cbiAgICAgIGV4cGVjdCggYi5nZXRVSW50MzIoMCkgKS50b0JlKCBuICk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlYWQgYW5kIHdyaXRlIDgtYml0IHNpZ25lZCBpbnRlZ2VycycsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIGIgPSBhbGxvYygxKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICB2YXIgbiA9IE1hdGgucG93KDIsIGkpO1xuXG4gICAgICAvLyBXaGVuXG4gICAgICBiLnB1dEludDgoIDAsIG4gKTtcblxuICAgICAgLy8gVGhlblxuICAgICAgZXhwZWN0KCBiLmdldEludDgoMCkgKS50b0JlKCBuICk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlYWQgYW5kIHdyaXRlIDE2LWJpdCBzaWduZWQgaW50ZWdlcnMnLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciBiID0gYWxsb2MoMik7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE0OyBpKyspIHtcbiAgICAgIHZhciBuID0gTWF0aC5wb3coMiwgaSk7XG5cbiAgICAgIC8vIFdoZW5cbiAgICAgIGIucHV0SW50MTYoIDAsIG4gKTtcblxuICAgICAgLy8gVGhlblxuICAgICAgZXhwZWN0KCBiLmdldEludDE2KDApICkudG9CZSggbiApO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWFkIGFuZCB3cml0ZSAzMi1iaXQgc2lnbmVkIGludGVnZXJzJywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgYiA9IGFsbG9jKDQpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzMDsgaSsrKSB7XG4gICAgICB2YXIgbiA9IE1hdGgucG93KDIsIGkpO1xuXG4gICAgICAvLyBXaGVuXG4gICAgICBiLnB1dEludDMyKCAwLCBuICk7XG5cbiAgICAgIC8vIFRoZW5cbiAgICAgIGV4cGVjdCggYi5nZXRJbnQzMigwKSApLnRvQmUoIG4gKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZW5jb2RlIGxpc3QgY29ycmVjdGx5JywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgYiA9IGFsbG9jKDUpO1xuICAgIGIud3JpdGVVSW50OCgweDkwIHwgMHgyKTtcbiAgICBiID0gd3JpdGVTdHJpbmcoYiwgJ2EnKTtcbiAgICBiID0gd3JpdGVTdHJpbmcoYiwgJ2InKTtcbiAgICAvLyBXaGVuXG4gICAgdmFyIGhleCA9IGIudG9IZXgoKTtcbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KGhleCkudG9CZShcIjkyIDgxIDYxIDgxIDYyIFwiKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBkZWNvZGUgbGlzdCBjb3JyZWN0bHknLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciBiID0gYWxsb2MoNSk7XG4gICAgYi53cml0ZVVJbnQ4KDB4OTIpO1xuICAgIGIud3JpdGVVSW50OCgweDgxKTtcbiAgICBiLndyaXRlVUludDgoMHg2MSk7XG4gICAgYi53cml0ZVVJbnQ4KDB4ODEpO1xuICAgIGIud3JpdGVVSW50OCgweDYyKTtcbiAgICBiLnJlc2V0KCk7XG5cbiAgICAvLyBXaGVuXG4gICAgdmFyIGRhdGEgPSBuZXcgVW5wYWNrZXIoKS51bnBhY2soIGIgKTtcblxuICAgIC8vIFRoZW5cbiAgICBleHBlY3QoZGF0YVswXSkudG9CZSgnYScpO1xuICAgIGV4cGVjdChkYXRhWzFdKS50b0JlKCdiJyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdDb21iaW5lZEJ1ZmZlcicsIGZ1bmN0aW9uKCkge1xuICBpdCgnc2hvdWxkIHJlYWQgaW50OCcsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIGIxID0gYWxsb2MoMSk7XG4gICAgdmFyIGIyID0gYWxsb2MoMSk7XG4gICAgYjEucHV0SW50OCgwLCAxKTtcbiAgICBiMi5wdXRJbnQ4KDAsIDIpO1xuXG4gICAgdmFyIGIgPSBuZXcgQ29tYmluZWRCdWZmZXIoW2IxLGIyXSk7XG4gICAgXG4gICAgLy8gV2hlblxuICAgIHZhciBmaXJzdCA9IGIucmVhZEludDgoKTtcbiAgICB2YXIgc2Vjb25kID0gYi5yZWFkSW50OCgpO1xuXG4gICAgLy8gVGhlblxuICAgIGV4cGVjdChmaXJzdCkudG9CZSgxKTtcbiAgICBleHBlY3Qoc2Vjb25kKS50b0JlKDIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlYWQgZGl2aWRlZCBmbG9hdDY0JywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgaW5uZXIgPSBhbGxvYyg4KTtcbiAgICBpbm5lci5wdXRGbG9hdDY0KDAsIDAuMSk7XG5cbiAgICB2YXIgYiA9IG5ldyBDb21iaW5lZEJ1ZmZlcihbaW5uZXIucmVhZFNsaWNlKDQpLGlubmVyLnJlYWRTbGljZSg0KV0pO1xuICAgIFxuICAgIC8vIFdoZW5cbiAgICB2YXIgcmVhZCA9IGIucmVhZEZsb2F0NjQoKTtcblxuICAgIC8vIFRoZW5cbiAgICBleHBlY3QocmVhZCkudG9CZSgwLjEpO1xuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiB3cml0ZVN0cmluZyhiLCBzdHIpIHtcbiAgdmFyIGJ5dGVzID0gdXRmOC5lbmNvZGUoc3RyKTtcbiAgdmFyIHNpemUgPSBieXRlcy5sZW5ndGg7XG4gIGIud3JpdGVVSW50OCgweDgwIHwgc2l6ZSk7XG4gIGIud3JpdGVCeXRlcyhieXRlcyk7XG4gIHJldHVybiBiO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBDaGFubmVsQ29uZmlnIGZyb20gJy4uLy4uL3NyYy92MS9pbnRlcm5hbC9jaC1jb25maWcnO1xuaW1wb3J0IGhhc0ZlYXR1cmUgZnJvbSAnLi4vLi4vc3JjL3YxL2ludGVybmFsL2ZlYXR1cmVzJztcbmltcG9ydCB7U0VSVklDRV9VTkFWQUlMQUJMRX0gZnJvbSAnLi4vLi4vc3JjL3YxL2Vycm9yJztcblxuZGVzY3JpYmUoJ0NoYW5uZWxDb25maWcnLCAoKSA9PiB7XG5cbiAgaXQoJ3Nob3VsZCByZXNwZWN0IGdpdmVuIGhvc3QnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9zdCA9ICduZW80ai5jb20nO1xuXG4gICAgY29uc3QgY29uZmlnID0gbmV3IENoYW5uZWxDb25maWcoaG9zdCwgNDIsIHt9LCAnJyk7XG5cbiAgICBleHBlY3QoY29uZmlnLmhvc3QpLnRvRXF1YWwoaG9zdCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVzcGVjdCBnaXZlbiBwb3J0JywgKCkgPT4ge1xuICAgIGNvbnN0IHBvcnQgPSA0MjQyO1xuXG4gICAgY29uc3QgY29uZmlnID0gbmV3IENoYW5uZWxDb25maWcoJycsIHBvcnQsIHt9LCAnJyk7XG5cbiAgICBleHBlY3QoY29uZmlnLnBvcnQpLnRvRXF1YWwocG9ydCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVzcGVjdCBnaXZlbiBlbmNyeXB0ZWQgY29uZicsICgpID0+IHtcbiAgICBjb25zdCBlbmNyeXB0ZWQgPSAnRU5DUllQVElPTl9PTic7XG5cbiAgICBjb25zdCBjb25maWcgPSBuZXcgQ2hhbm5lbENvbmZpZygnJywgNDIsIHtlbmNyeXB0ZWQ6IGVuY3J5cHRlZH0sICcnKTtcblxuICAgIGV4cGVjdChjb25maWcuZW5jcnlwdGVkKS50b0VxdWFsKGVuY3J5cHRlZCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVzcGVjdCBnaXZlbiB0cnVzdCBjb25mJywgKCkgPT4ge1xuICAgIGNvbnN0IHRydXN0ID0gJ1RSVVNUX0FMTF9DRVJUSUZJQ0FURVMnO1xuXG4gICAgY29uc3QgY29uZmlnID0gbmV3IENoYW5uZWxDb25maWcoJycsIDQyLCB7dHJ1c3Q6IHRydXN0fSwgJycpO1xuXG4gICAgZXhwZWN0KGNvbmZpZy50cnVzdCkudG9FcXVhbCh0cnVzdCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVzcGVjdCBnaXZlbiB0cnVzdGVkIGNlcnRpZmljYXRlcyBjb25mJywgKCkgPT4ge1xuICAgIGNvbnN0IHRydXN0ZWRDZXJ0aWZpY2F0ZXMgPSBbJy4vZm9vLnBlbScsICcuL2Jhci5wZW0nLCAnLi9iYXoucGVtJ107XG5cbiAgICBjb25zdCBjb25maWcgPSBuZXcgQ2hhbm5lbENvbmZpZygnJywgNDIsIHt0cnVzdGVkQ2VydGlmaWNhdGVzOiB0cnVzdGVkQ2VydGlmaWNhdGVzfSwgJycpO1xuXG4gICAgZXhwZWN0KGNvbmZpZy50cnVzdGVkQ2VydGlmaWNhdGVzKS50b0VxdWFsKHRydXN0ZWRDZXJ0aWZpY2F0ZXMpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlc3BlY3QgZ2l2ZW4ga25vd24gaG9zdHMnLCAoKSA9PiB7XG4gICAgY29uc3Qga25vd25Ib3N0c1BhdGggPSAnfi8ubmVvNGova25vd25faG9zdHMnO1xuXG4gICAgY29uc3QgY29uZmlnID0gbmV3IENoYW5uZWxDb25maWcoJycsIDQyLCB7a25vd25Ib3N0czoga25vd25Ib3N0c1BhdGh9LCAnJyk7XG5cbiAgICBleHBlY3QoY29uZmlnLmtub3duSG9zdHNQYXRoKS50b0VxdWFsKGtub3duSG9zdHNQYXRoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXNwZWN0IGdpdmVuIGNvbm5lY3Rpb24gZXJyb3IgY29kZScsICgpID0+IHtcbiAgICBjb25zdCBjb25uZWN0aW9uRXJyb3JDb2RlID0gJ0Nvbm5lY3Rpb25GYWlsZWQnO1xuXG4gICAgY29uc3QgY29uZmlnID0gbmV3IENoYW5uZWxDb25maWcoJycsIDQyLCB7fSwgY29ubmVjdGlvbkVycm9yQ29kZSk7XG5cbiAgICBleHBlY3QoY29uZmlnLmNvbm5lY3Rpb25FcnJvckNvZGUpLnRvRXF1YWwoY29ubmVjdGlvbkVycm9yQ29kZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdXNlIGVuY3J5cHRpb24gaWYgYXZhaWxhYmxlIGJ1dCBub3QgY29uZmlndXJlZCcsICgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBuZXcgQ2hhbm5lbENvbmZpZygnJywgNDIsIHt9LCAnJyk7XG5cbiAgICBleHBlY3QoY29uZmlnLmVuY3J5cHRlZCkudG9FcXVhbChoYXNGZWF0dXJlKCd0cnVzdF9hbGxfY2VydGlmaWNhdGVzJykpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHVzZSBhdmFpbGFibGUgdHJ1c3QgY29uZiB3aGVuIG5vdGhpbmcgY29uZmlndXJlZCcsICgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBuZXcgQ2hhbm5lbENvbmZpZygnJywgNDIsIHt9LCAnJyk7XG5cbiAgICBjb25zdCBhdmFpbGFibGVUcnVzdCA9IGhhc0ZlYXR1cmUoJ3RydXN0X2FsbF9jZXJ0aWZpY2F0ZXMnKSA/ICdUUlVTVF9BTExfQ0VSVElGSUNBVEVTJyA6ICdUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFUyc7XG4gICAgZXhwZWN0KGNvbmZpZy50cnVzdCkudG9FcXVhbChhdmFpbGFibGVUcnVzdCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGF2ZSBubyB0cnVzdGVkIGNlcnRpZmljYXRlcyB3aGVuIG5vdCBjb25maWd1cmVkJywgKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IG5ldyBDaGFubmVsQ29uZmlnKCcnLCA0Miwge30sICcnKTtcblxuICAgIGV4cGVjdChjb25maWcudHJ1c3RlZENlcnRpZmljYXRlcykudG9FcXVhbChbXSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGF2ZSBudWxsIGtub3duIGhvc3RzIHBhdGggd2hlbiBub3QgY29uZmlndXJlZCcsICgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBuZXcgQ2hhbm5lbENvbmZpZygnJywgNDIsIHt9LCAnJyk7XG5cbiAgICBleHBlY3QoY29uZmlnLmtub3duSG9zdHNQYXRoKS50b0JlTnVsbCgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGhhdmUgc2VydmljZSB1bmF2YWlsYWJsZSBhcyBkZWZhdWx0IGVycm9yIGNvZGUnLCAoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gbmV3IENoYW5uZWxDb25maWcoJycsIDQyLCB7fSwgJycpO1xuXG4gICAgZXhwZWN0KGNvbmZpZy5jb25uZWN0aW9uRXJyb3JDb2RlKS50b0VxdWFsKFNFUlZJQ0VfVU5BVkFJTEFCTEUpO1xuICB9KTtcblxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxudmFyIENodW5rZXIgPSByZXF1aXJlKCcuLi8uLi9saWIvdjEvaW50ZXJuYWwvY2h1bmtpbmcnKS5DaHVua2VyO1xudmFyIERlY2h1bmtlciA9IHJlcXVpcmUoJy4uLy4uL2xpYi92MS9pbnRlcm5hbC9jaHVua2luZycpLkRlY2h1bmtlcjtcbnZhciBhbGxvYyA9IHJlcXVpcmUoJy4uLy4uL2xpYi92MS9pbnRlcm5hbC9idWYnKS5hbGxvYztcbnZhciBDb21iaW5lZEJ1ZmZlciA9IHJlcXVpcmUoJy4uLy4uL2xpYi92MS9pbnRlcm5hbC9idWYnKS5Db21iaW5lZEJ1ZmZlcjtcbnZhciBEdW1teUNoYW5uZWwgPSByZXF1aXJlKCcuLi8uLi9saWIvdjEvaW50ZXJuYWwvY2gtZHVtbXkuanMnKS5jaGFubmVsO1xuXG5kZXNjcmliZSgnQ2h1bmtlcicsIGZ1bmN0aW9uKCkge1xuICBpdCgnc2hvdWxkIGNodW5rIHNpbXBsZSBkYXRhJywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgY2ggPSBuZXcgRHVtbXlDaGFubmVsKCk7XG4gICAgdmFyIGNodW5rZXIgPSBuZXcgQ2h1bmtlcihjaCk7XG5cbiAgICAvLyBXaGVuXG4gICAgY2h1bmtlci53cml0ZUludDMyKDEpO1xuICAgIGNodW5rZXIud3JpdGVJbnQzMigyKTtcbiAgICBjaHVua2VyLmZsdXNoKCk7XG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KCBjaC50b0hleCgpICkudG9CZShcIjAwIDA4IDAwIDAwIDAwIDAxIDAwIDAwIDAwIDAyIFwiKTtcbiAgfSk7XG4gIGl0KCdzaG91bGQgY2h1bmsgYmxvYnMgbGFyZ2VyIHRoYW4gdGhlIG91dHB1dCBidWZmZXInLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciBjaCA9IG5ldyBEdW1teUNoYW5uZWwoKTtcbiAgICB2YXIgY2h1bmtlciA9IG5ldyBDaHVua2VyKGNoLCA0KTtcblxuICAgIC8vIFdoZW5cbiAgICBjaHVua2VyLndyaXRlQnl0ZXMoYnl0ZXMoIDEsMiwzLDQsNSw2ICkpO1xuICAgIGNodW5rZXIuZmx1c2goKTtcblxuICAgIC8vIFRoZW5cbiAgICBleHBlY3QoIGNoLnRvSGV4KCkgKS50b0JlKFwiMDAgMDIgMDEgMDIgMDAgMDIgMDMgMDQgMDAgMDIgMDUgMDYgXCIpO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCBpbmNsdWRlIG1lc3NhZ2UgYm91bmRhcmllcycsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIGNoID0gbmV3IER1bW15Q2hhbm5lbCgpO1xuICAgIHZhciBjaHVua2VyID0gbmV3IENodW5rZXIoY2gpO1xuXG4gICAgLy8gV2hlblxuICAgIGNodW5rZXIud3JpdGVJbnQzMigxKTtcbiAgICBjaHVua2VyLm1lc3NhZ2VCb3VuZGFyeSgpO1xuICAgIGNodW5rZXIud3JpdGVJbnQzMigyKTtcbiAgICBjaHVua2VyLmZsdXNoKCk7XG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KCBjaC50b0hleCgpICkudG9CZShcIjAwIDA0IDAwIDAwIDAwIDAxIDAwIDAwIDAwIDA0IDAwIDAwIDAwIDAyIFwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0RlY2h1bmtlcicsIGZ1bmN0aW9uKCkge1xuICBpdCgnc2hvdWxkIHVuY2h1bmsgYSBzaW1wbGUgbWVzc2FnZScsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIG1lc3NhZ2VzID0gW107XG4gICAgdmFyIGRlY2h1bmtlciA9IG5ldyBEZWNodW5rZXIoKTtcbiAgICB2YXIgY2h1bmtlciA9IG5ldyBDaHVua2VyKGRlY2h1bmtlcik7XG4gICAgZGVjaHVua2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGJ1ZmZlcikgeyBtZXNzYWdlcy5wdXNoKGJ1ZmZlcik7IH07XG5cbiAgICAvLyBXaGVuXG4gICAgY2h1bmtlci53cml0ZUludDE2KDEpO1xuICAgIGNodW5rZXIud3JpdGVJbnQxNigyKTtcbiAgICBjaHVua2VyLmZsdXNoKCk7XG4gICAgY2h1bmtlci53cml0ZUludDE2KDMpO1xuICAgIGNodW5rZXIubWVzc2FnZUJvdW5kYXJ5KCk7XG4gICAgY2h1bmtlci5mbHVzaCgpO1xuXG4gICAgLy8gVGhlblxuICAgIGV4cGVjdCggbWVzc2FnZXMubGVuZ3RoICkudG9CZSggMSApO1xuICAgIGV4cGVjdCggbWVzc2FnZXNbMF0udG9IZXgoKSApLnRvQmUoIFwiMDAgMDEgMDAgMDIgMDAgMDMgXCIgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYW5kbGUgbWVzc2FnZSBzcGxpdCBhdCBhbnkgcG9pbnQnLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciBjaCA9IG5ldyBEdW1teUNoYW5uZWwoKTtcbiAgICB2YXIgY2h1bmtlciA9IG5ldyBDaHVua2VyKGNoKTtcblxuICAgIC8vIEFuZCBnaXZlbiB0aGUgZm9sbG93aW5nIG1lc3NhZ2VcbiAgICBjaHVua2VyLndyaXRlSW50OCgxKTtcbiAgICBjaHVua2VyLndyaXRlSW50MTYoMik7XG4gICAgY2h1bmtlci53cml0ZUludDMyKDMpO1xuICAgIGNodW5rZXIud3JpdGVVSW50OCg0KTtcbiAgICBjaHVua2VyLndyaXRlVUludDMyKDUpO1xuICAgIGNodW5rZXIubWVzc2FnZUJvdW5kYXJ5KCk7XG4gICAgY2h1bmtlci5mbHVzaCgpO1xuXG4gICAgdmFyIGNodW5rZWQgPSBjaC50b0J1ZmZlcigpO1xuXG4gICAgLy8gV2hlbiBJIHRyeSBzcGxpdHRpbmcgdGhpcyBjaHVua2VkIGRhdGEgYXQgZXZlcnkgcG9zc2libGUgcG9zaXRpb25cbiAgICAvLyBpbnRvIHR3byBzZXBhcmF0ZSBidWZmZXJzLCBhbmQgc2VuZCB0aG9zZSB0byB0aGUgZGVjaHVua2VyXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBjaHVua2VkLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2xpY2UxID0gY2h1bmtlZC5nZXRTbGljZSggMCwgaSApO1xuICAgICAgdmFyIHNsaWNlMiA9IGNodW5rZWQuZ2V0U2xpY2UoIGksIGNodW5rZWQubGVuZ3RoIC0gaSApO1xuXG4gICAgICAvLyBEZWNodW5rIHRoZSBzbGljZXNcbiAgICAgIHZhciBtZXNzYWdlcyA9IFtdO1xuICAgICAgdmFyIGRlY2h1bmtlciA9IG5ldyBEZWNodW5rZXIoKTtcbiAgICAgIGRlY2h1bmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihidWZmZXIpIHsgbWVzc2FnZXMucHVzaChidWZmZXIpOyB9O1xuICAgICAgZGVjaHVua2VyLndyaXRlKCBzbGljZTEgKTtcbiAgICAgIGRlY2h1bmtlci53cml0ZSggc2xpY2UyICk7XG5cbiAgICAgIC8vIFRoZW4sIHRoZSBvdXRwdXQgc2hvdWxkIGJlIGNvcnJlY3RcbiAgICAgIGV4cGVjdCggbWVzc2FnZXMubGVuZ3RoICkudG9CZSggMSApO1xuICAgICAgZXhwZWN0KCBtZXNzYWdlc1swXS50b0hleCgpICkudG9CZSggXCIwMSAwMCAwMiAwMCAwMCAwMCAwMyAwNCAwMCAwMCAwMCAwNSBcIiApO1xuICAgIH07XG4gIH0pO1xufSk7XG5cbmZ1bmN0aW9uIGJ5dGVzKCkge1xuICB2YXIgYiA9IGFsbG9jKCBhcmd1bWVudHMubGVuZ3RoICk7XG4gIGZvciggdmFyIGk9MDsgaTxhcmd1bWVudHMubGVuZ3RoOyBpKysgKSB7XG4gICAgYi53cml0ZVVJbnQ4KCBhcmd1bWVudHNbaV0gKTtcbiAgfVxuICBiLnBvc2l0aW9uID0gMDtcbiAgcmV0dXJuIGI7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IENvbm5lY3Rpb25Ib2xkZXIsIHtFTVBUWV9DT05ORUNUSU9OX0hPTERFUn0gZnJvbSAnLi4vLi4vc3JjL3YxL2ludGVybmFsL2Nvbm5lY3Rpb24taG9sZGVyJztcbmltcG9ydCB7U2luZ2xlQ29ubmVjdGlvblByb3ZpZGVyfSBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZXJuYWwvY29ubmVjdGlvbi1wcm92aWRlcnMnO1xuaW1wb3J0IHtSRUFEfSBmcm9tICcuLi8uLi9zcmMvdjEvZHJpdmVyJztcbmltcG9ydCBGYWtlQ29ubmVjdGlvbiBmcm9tICcuL2Zha2UtY29ubmVjdGlvbic7XG5cbmRlc2NyaWJlKCdFbXB0eUNvbm5lY3Rpb25Ib2xkZXInLCAoKSA9PiB7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gcmVqZWN0ZWQgcHJvbWlzZSBpbnN0ZWFkIG9mIGNvbm5lY3Rpb24nLCBkb25lID0+IHtcbiAgICBFTVBUWV9DT05ORUNUSU9OX0hPTERFUi5nZXRDb25uZWN0aW9uKCkuY2F0Y2goKCkgPT4ge1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiByZXNvbHZlZCBwcm9taXNlIG9uIHJlbGVhc2UnLCBkb25lID0+IHtcbiAgICBFTVBUWV9DT05ORUNUSU9OX0hPTERFUi5yZWxlYXNlQ29ubmVjdGlvbigpLnRoZW4oKCkgPT4ge1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiByZXNvbHZlZCBwcm9taXNlIG9uIGNsb3NlJywgZG9uZSA9PiB7XG4gICAgRU1QVFlfQ09OTkVDVElPTl9IT0xERVIuY2xvc2UoKS50aGVuKCgpID0+IHtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbn0pO1xuXG5kZXNjcmliZSgnQ29ubmVjdGlvbkhvbGRlcicsICgpID0+IHtcblxuICBpdCgnc2hvdWxkIGFjcXVpcmUgbmV3IGNvbm5lY3Rpb24gZHVyaW5nIGluaXRpYWxpemF0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm92aWRlciA9IG5ldyBSZWNvcmRpbmdDb25uZWN0aW9uUHJvdmlkZXIoW25ldyBGYWtlQ29ubmVjdGlvbigpXSk7XG4gICAgY29uc3QgY29ubmVjdGlvbkhvbGRlciA9IG5ldyBDb25uZWN0aW9uSG9sZGVyKFJFQUQsIGNvbm5lY3Rpb25Qcm92aWRlcik7XG5cbiAgICBjb25uZWN0aW9uSG9sZGVyLmluaXRpYWxpemVDb25uZWN0aW9uKCk7XG5cbiAgICBleHBlY3QoY29ubmVjdGlvblByb3ZpZGVyLmFjcXVpcmVDb25uZWN0aW9uSW52b2tlZCkudG9CZSgxKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gYWNxdWlyZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIGNvbm5lY3Rpb24nLCBkb25lID0+IHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gbmV3IEZha2VDb25uZWN0aW9uKCk7XG4gICAgY29uc3QgY29ubmVjdGlvblByb3ZpZGVyID0gbmV3U2luZ2xlQ29ubmVjdGlvblByb3ZpZGVyKGNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Ib2xkZXIgPSBuZXcgQ29ubmVjdGlvbkhvbGRlcihSRUFELCBjb25uZWN0aW9uUHJvdmlkZXIpO1xuXG4gICAgY29ubmVjdGlvbkhvbGRlci5pbml0aWFsaXplQ29ubmVjdGlvbigpO1xuXG4gICAgY29ubmVjdGlvbkhvbGRlci5nZXRDb25uZWN0aW9uKCkudGhlbihjb25uZWN0aW9uID0+IHtcbiAgICAgIGV4cGVjdChjb25uZWN0aW9uKS50b0JlKGNvbm5lY3Rpb24pO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlbGVhc2UgY29ubmVjdGlvbiB3aXRoIHNpbmdsZSB1c2VyJywgZG9uZSA9PiB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IG5ldyBGYWtlQ29ubmVjdGlvbigpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm92aWRlciA9IG5ld1NpbmdsZUNvbm5lY3Rpb25Qcm92aWRlcihjb25uZWN0aW9uKTtcbiAgICBjb25zdCBjb25uZWN0aW9uSG9sZGVyID0gbmV3IENvbm5lY3Rpb25Ib2xkZXIoUkVBRCwgY29ubmVjdGlvblByb3ZpZGVyKTtcblxuICAgIGNvbm5lY3Rpb25Ib2xkZXIuaW5pdGlhbGl6ZUNvbm5lY3Rpb24oKTtcblxuICAgIGNvbm5lY3Rpb25Ib2xkZXIucmVsZWFzZUNvbm5lY3Rpb24oKS50aGVuKCgpID0+IHtcbiAgICAgIGV4cGVjdChjb25uZWN0aW9uLmlzUmVsZWFzZWRPbmNlKCkpLnRvQmVUcnV0aHkoKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgcmVsZWFzZSBjb25uZWN0aW9uIHdpdGggbXVsdGlwbGUgdXNlcnMnLCBkb25lID0+IHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gbmV3IEZha2VDb25uZWN0aW9uKCk7XG4gICAgY29uc3QgY29ubmVjdGlvblByb3ZpZGVyID0gbmV3U2luZ2xlQ29ubmVjdGlvblByb3ZpZGVyKGNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Ib2xkZXIgPSBuZXcgQ29ubmVjdGlvbkhvbGRlcihSRUFELCBjb25uZWN0aW9uUHJvdmlkZXIpO1xuXG4gICAgY29ubmVjdGlvbkhvbGRlci5pbml0aWFsaXplQ29ubmVjdGlvbigpO1xuICAgIGNvbm5lY3Rpb25Ib2xkZXIuaW5pdGlhbGl6ZUNvbm5lY3Rpb24oKTtcbiAgICBjb25uZWN0aW9uSG9sZGVyLmluaXRpYWxpemVDb25uZWN0aW9uKCk7XG5cbiAgICBjb25uZWN0aW9uSG9sZGVyLnJlbGVhc2VDb25uZWN0aW9uKCkudGhlbigoKSA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbi5pc05ldmVyUmVsZWFzZWQoKSkudG9CZVRydXRoeSgpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlbGVhc2UgY29ubmVjdGlvbiB3aXRoIG11bHRpcGxlIHVzZXJzIHdoZW4gYWxsIHVzZXJzIHJlbGVhc2UnLCBkb25lID0+IHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gbmV3IEZha2VDb25uZWN0aW9uKCk7XG4gICAgY29uc3QgY29ubmVjdGlvblByb3ZpZGVyID0gbmV3U2luZ2xlQ29ubmVjdGlvblByb3ZpZGVyKGNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Ib2xkZXIgPSBuZXcgQ29ubmVjdGlvbkhvbGRlcihSRUFELCBjb25uZWN0aW9uUHJvdmlkZXIpO1xuXG4gICAgY29ubmVjdGlvbkhvbGRlci5pbml0aWFsaXplQ29ubmVjdGlvbigpO1xuICAgIGNvbm5lY3Rpb25Ib2xkZXIuaW5pdGlhbGl6ZUNvbm5lY3Rpb24oKTtcbiAgICBjb25uZWN0aW9uSG9sZGVyLmluaXRpYWxpemVDb25uZWN0aW9uKCk7XG5cbiAgICBjb25uZWN0aW9uSG9sZGVyLnJlbGVhc2VDb25uZWN0aW9uKCkudGhlbigoKSA9PiB7XG4gICAgICBjb25uZWN0aW9uSG9sZGVyLnJlbGVhc2VDb25uZWN0aW9uKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbm5lY3Rpb25Ib2xkZXIucmVsZWFzZUNvbm5lY3Rpb24oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICBleHBlY3QoY29ubmVjdGlvbi5pc1JlbGVhc2VkT25jZSgpKS50b0JlVHJ1dGh5KCk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGRvIG5vdGhpbmcgd2hlbiBjbG9zZWQgYW5kIG5vdCBpbml0aWFsaXplZCcsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuZXcgRmFrZUNvbm5lY3Rpb24oKTtcbiAgICBjb25zdCBjb25uZWN0aW9uUHJvdmlkZXIgPSBuZXdTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIoY29ubmVjdGlvbik7XG4gICAgY29uc3QgY29ubmVjdGlvbkhvbGRlciA9IG5ldyBDb25uZWN0aW9uSG9sZGVyKFJFQUQsIGNvbm5lY3Rpb25Qcm92aWRlcik7XG5cbiAgICBjb25uZWN0aW9uSG9sZGVyLmNsb3NlKCkudGhlbigoKSA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbi5pc05ldmVyUmVsZWFzZWQoKSkudG9CZVRydXRoeSgpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNsb3NlIGV2ZW4gd2hlbiB1c2VycyBleGlzdCcsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuZXcgRmFrZUNvbm5lY3Rpb24oKTtcbiAgICBjb25zdCBjb25uZWN0aW9uUHJvdmlkZXIgPSBuZXdTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIoY29ubmVjdGlvbik7XG4gICAgY29uc3QgY29ubmVjdGlvbkhvbGRlciA9IG5ldyBDb25uZWN0aW9uSG9sZGVyKFJFQUQsIGNvbm5lY3Rpb25Qcm92aWRlcik7XG5cbiAgICBjb25uZWN0aW9uSG9sZGVyLmluaXRpYWxpemVDb25uZWN0aW9uKCk7XG4gICAgY29ubmVjdGlvbkhvbGRlci5pbml0aWFsaXplQ29ubmVjdGlvbigpO1xuXG4gICAgY29ubmVjdGlvbkhvbGRlci5jbG9zZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uaXNSZWxlYXNlZE9uY2VPblNlc3Npb25DbG9zZSgpKS50b0JlVHJ1dGh5KCk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSBuZXcgY29ubmVjdGlvbiBhZnRlciByZWxlYXNpbmcgY3VycmVudCBvbmUnLCBkb25lID0+IHtcbiAgICBjb25zdCBjb25uZWN0aW9uMSA9IG5ldyBGYWtlQ29ubmVjdGlvbigpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb24yID0gbmV3IEZha2VDb25uZWN0aW9uKCk7XG4gICAgY29uc3QgY29ubmVjdGlvblByb3ZpZGVyID0gbmV3IFJlY29yZGluZ0Nvbm5lY3Rpb25Qcm92aWRlcihbY29ubmVjdGlvbjEsIGNvbm5lY3Rpb24yXSk7XG4gICAgY29uc3QgY29ubmVjdGlvbkhvbGRlciA9IG5ldyBDb25uZWN0aW9uSG9sZGVyKFJFQUQsIGNvbm5lY3Rpb25Qcm92aWRlcik7XG5cbiAgICBjb25uZWN0aW9uSG9sZGVyLmluaXRpYWxpemVDb25uZWN0aW9uKCk7XG5cbiAgICBjb25uZWN0aW9uSG9sZGVyLnJlbGVhc2VDb25uZWN0aW9uKCkudGhlbigoKSA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbjEuaXNSZWxlYXNlZE9uY2UoKSkudG9CZVRydXRoeSgpO1xuXG4gICAgICBjb25uZWN0aW9uSG9sZGVyLmluaXRpYWxpemVDb25uZWN0aW9uKCk7XG4gICAgICBjb25uZWN0aW9uSG9sZGVyLnJlbGVhc2VDb25uZWN0aW9uKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGV4cGVjdChjb25uZWN0aW9uMi5pc1JlbGVhc2VkT25jZSgpKS50b0JlVHJ1dGh5KCk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGluaXRpYWxpemUgbmV3IGNvbm5lY3Rpb24gYWZ0ZXIgYmVpbmcgY2xvc2VkJywgZG9uZSA9PiB7XG4gICAgY29uc3QgY29ubmVjdGlvbjEgPSBuZXcgRmFrZUNvbm5lY3Rpb24oKTtcbiAgICBjb25zdCBjb25uZWN0aW9uMiA9IG5ldyBGYWtlQ29ubmVjdGlvbigpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm92aWRlciA9IG5ldyBSZWNvcmRpbmdDb25uZWN0aW9uUHJvdmlkZXIoW2Nvbm5lY3Rpb24xLCBjb25uZWN0aW9uMl0pO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Ib2xkZXIgPSBuZXcgQ29ubmVjdGlvbkhvbGRlcihSRUFELCBjb25uZWN0aW9uUHJvdmlkZXIpO1xuXG4gICAgY29ubmVjdGlvbkhvbGRlci5pbml0aWFsaXplQ29ubmVjdGlvbigpO1xuXG4gICAgY29ubmVjdGlvbkhvbGRlci5jbG9zZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24xLmlzUmVsZWFzZWRPbmNlT25TZXNzaW9uQ2xvc2UoKSkudG9CZVRydXRoeSgpO1xuXG4gICAgICBjb25uZWN0aW9uSG9sZGVyLmluaXRpYWxpemVDb25uZWN0aW9uKCk7XG4gICAgICBjb25uZWN0aW9uSG9sZGVyLmNsb3NlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGV4cGVjdChjb25uZWN0aW9uMi5pc1JlbGVhc2VkT25jZU9uU2Vzc2lvbkNsb3NlKCkpLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmNsYXNzIFJlY29yZGluZ0Nvbm5lY3Rpb25Qcm92aWRlciBleHRlbmRzIFNpbmdsZUNvbm5lY3Rpb25Qcm92aWRlciB7XG5cbiAgY29uc3RydWN0b3IoY29ubmVjdGlvbnMpIHtcbiAgICBzdXBlcihQcm9taXNlLnJlc29sdmUoKSk7XG4gICAgdGhpcy5jb25uZWN0aW9uUHJvbWlzZXMgPSBjb25uZWN0aW9ucy5tYXAoY29ubiA9PiBQcm9taXNlLnJlc29sdmUoY29ubikpO1xuICAgIHRoaXMuYWNxdWlyZUNvbm5lY3Rpb25JbnZva2VkID0gMDtcbiAgfVxuXG4gIGFjcXVpcmVDb25uZWN0aW9uKG1vZGUpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uUHJvbWlzZXNbdGhpcy5hY3F1aXJlQ29ubmVjdGlvbkludm9rZWQrK107XG4gIH1cbn1cblxuZnVuY3Rpb24gbmV3U2luZ2xlQ29ubmVjdGlvblByb3ZpZGVyKGNvbm5lY3Rpb24pIHtcbiAgcmV0dXJuIG5ldyBTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIoUHJvbWlzZS5yZXNvbHZlKGNvbm5lY3Rpb24pKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge1JFQUQsIFdSSVRFfSBmcm9tICcuLi8uLi9zcmMvdjEvZHJpdmVyJztcbmltcG9ydCBJbnRlZ2VyLCB7aW50fSBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZWdlcic7XG5pbXBvcnQge1NFUlZJQ0VfVU5BVkFJTEFCTEUsIFNFU1NJT05fRVhQSVJFRH0gZnJvbSAnLi4vLi4vc3JjL3YxL2Vycm9yJztcbmltcG9ydCBSb3V0aW5nVGFibGUgZnJvbSAnLi4vLi4vc3JjL3YxL2ludGVybmFsL3JvdXRpbmctdGFibGUnO1xuaW1wb3J0IFJvdW5kUm9iaW5BcnJheSBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZXJuYWwvcm91bmQtcm9iaW4tYXJyYXknO1xuaW1wb3J0IHtEaXJlY3RDb25uZWN0aW9uUHJvdmlkZXIsIExvYWRCYWxhbmNlcn0gZnJvbSAnLi4vLi4vc3JjL3YxL2ludGVybmFsL2Nvbm5lY3Rpb24tcHJvdmlkZXJzJztcbmltcG9ydCBQb29sIGZyb20gJy4uLy4uL3NyYy92MS9pbnRlcm5hbC9wb29sJztcblxuY29uc3QgTk9fT1BfRFJJVkVSX0NBTExCQUNLID0gKCkgPT4ge1xufTtcblxuZGVzY3JpYmUoJ0RpcmVjdENvbm5lY3Rpb25Qcm92aWRlcicsICgpID0+IHtcblxuICBpdCgnYWNxdWlyZXMgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sJywgZG9uZSA9PiB7XG4gICAgY29uc3QgcG9vbCA9IG5ld1Bvb2woKTtcbiAgICBjb25zdCBjb25uZWN0aW9uUHJvdmlkZXIgPSBuZXdEaXJlY3RDb25uZWN0aW9uUHJvdmlkZXIoJ2xvY2FsaG9zdDoxMjMnLCBwb29sKTtcblxuICAgIGNvbm5lY3Rpb25Qcm92aWRlci5hY3F1aXJlQ29ubmVjdGlvbihSRUFEKS50aGVuKGNvbm5lY3Rpb24gPT4ge1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24pLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbi5hZGRyZXNzKS50b0VxdWFsKCdsb2NhbGhvc3Q6MTIzJyk7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbi5yZWxlYXNlKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHBvb2wuaGFzKCdsb2NhbGhvc3Q6MTIzJykpLnRvQmVUcnV0aHkoKTtcblxuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxufSk7XG5cbmRlc2NyaWJlKCdMb2FkQmFsYW5jZXInLCAoKSA9PiB7XG5cbiAgaXQoJ2NhbiBmb3JnZXQgYWRkcmVzcycsICgpID0+IHtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXIoXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0zJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0yJywgJ3NlcnZlci00J11cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmZvcmdldCgnc2VydmVyLTInKTtcblxuICAgIGV4cGVjdFJvdXRpbmdUYWJsZShsb2FkQmFsYW5jZXIsXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0zJ10sXG4gICAgICBbJ3NlcnZlci00J11cbiAgICApO1xuICB9KTtcblxuICBpdCgnY2FuIG5vdCBmb3JnZXQgdW5rbm93biBhZGRyZXNzJywgKCkgPT4ge1xuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcihcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTMnLCAnc2VydmVyLTQnXSxcbiAgICAgIFsnc2VydmVyLTUnLCAnc2VydmVyLTYnXVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuZm9yZ2V0KCdzZXJ2ZXItNDInKTtcblxuICAgIGV4cGVjdFJvdXRpbmdUYWJsZShsb2FkQmFsYW5jZXIsXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0zJywgJ3NlcnZlci00J10sXG4gICAgICBbJ3NlcnZlci01JywgJ3NlcnZlci02J11cbiAgICApO1xuICB9KTtcblxuICBpdCgncHVyZ2VzIGNvbm5lY3Rpb25zIHdoZW4gYWRkcmVzcyBpcyBmb3Jnb3R0ZW4nLCAoKSA9PiB7XG4gICAgY29uc3QgcG9vbCA9IG5ld1Bvb2woKTtcblxuICAgIHBvb2wuYWNxdWlyZSgnc2VydmVyLTEnKTtcbiAgICBwb29sLmFjcXVpcmUoJ3NlcnZlci0zJyk7XG4gICAgcG9vbC5hY3F1aXJlKCdzZXJ2ZXItNScpO1xuICAgIGV4cGVjdFBvb2xUb0NvbnRhaW4ocG9vbCwgWydzZXJ2ZXItMScsICdzZXJ2ZXItMycsICdzZXJ2ZXItNSddKTtcblxuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcihcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTMnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTInLCAnc2VydmVyLTQnXSxcbiAgICAgIHBvb2xcbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmZvcmdldCgnc2VydmVyLTEnKTtcbiAgICBsb2FkQmFsYW5jZXIuZm9yZ2V0KCdzZXJ2ZXItNScpO1xuXG4gICAgZXhwZWN0UG9vbFRvQ29udGFpbihwb29sLCBbJ3NlcnZlci0zJ10pO1xuICAgIGV4cGVjdFBvb2xUb05vdENvbnRhaW4ocG9vbCwgWydzZXJ2ZXItMScsICdzZXJ2ZXItNSddKTtcbiAgfSk7XG5cbiAgaXQoJ2NhbiBmb3JnZXQgd3JpdGVyIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyKFxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMicsICdzZXJ2ZXItNCddXG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5mb3JnZXRXcml0ZXIoJ3NlcnZlci0yJyk7XG5cbiAgICBleHBlY3RSb3V0aW5nVGFibGUobG9hZEJhbGFuY2VyLFxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItNCddXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2NhbiBub3QgZm9yZ2V0IHVua25vd24gd3JpdGVyIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyKFxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItNCddLFxuICAgICAgWydzZXJ2ZXItNScsICdzZXJ2ZXItNiddXG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5mb3JnZXRXcml0ZXIoJ3NlcnZlci00MicpO1xuXG4gICAgZXhwZWN0Um91dGluZ1RhYmxlKGxvYWRCYWxhbmNlcixcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTMnLCAnc2VydmVyLTQnXSxcbiAgICAgIFsnc2VydmVyLTUnLCAnc2VydmVyLTYnXVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdpbml0aWFsaXplcyByb3V0aW5nIHRhYmxlIHdpdGggdGhlIGdpdmVuIHJvdXRlcicsICgpID0+IHtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXcgTG9hZEJhbGFuY2VyKCdzZXJ2ZXItQUJDJywge30sIG5ld1Bvb2woKSwgTk9fT1BfRFJJVkVSX0NBTExCQUNLKTtcblxuICAgIGV4cGVjdFJvdXRpbmdUYWJsZShsb2FkQmFsYW5jZXIsXG4gICAgICBbJ3NlcnZlci1BQkMnXSxcbiAgICAgIFtdLFxuICAgICAgW11cbiAgICApO1xuICB9KTtcblxuICBpdCgnYWNxdWlyZXMgcmVhZCBjb25uZWN0aW9uIHdpdGggdXAtdG8tZGF0ZSByb3V0aW5nIHRhYmxlJywgZG9uZSA9PiB7XG4gICAgY29uc3QgcG9vbCA9IG5ld1Bvb2woKTtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXIoXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0zJywgJ3NlcnZlci00J10sXG4gICAgICBbJ3NlcnZlci01JywgJ3NlcnZlci02J10sXG4gICAgICBwb29sXG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihSRUFEKS50aGVuKGNvbm5lY3Rpb24gPT4ge1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLTMnKTtcbiAgICAgIGV4cGVjdChwb29sLmhhcygnc2VydmVyLTMnKSkudG9CZVRydXRoeSgpO1xuXG4gICAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oUkVBRCkudGhlbihjb25uZWN0aW9uID0+IHtcbiAgICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLTQnKTtcbiAgICAgICAgZXhwZWN0KHBvb2wuaGFzKCdzZXJ2ZXItNCcpKS50b0JlVHJ1dGh5KCk7XG5cbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdhY3F1aXJlcyB3cml0ZSBjb25uZWN0aW9uIHdpdGggdXAtdG8tZGF0ZSByb3V0aW5nIHRhYmxlJywgZG9uZSA9PiB7XG4gICAgY29uc3QgcG9vbCA9IG5ld1Bvb2woKTtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXIoXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0zJywgJ3NlcnZlci00J10sXG4gICAgICBbJ3NlcnZlci01JywgJ3NlcnZlci02J10sXG4gICAgICBwb29sXG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihXUklURSkudGhlbihjb25uZWN0aW9uID0+IHtcbiAgICAgIGV4cGVjdChjb25uZWN0aW9uLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci01Jyk7XG4gICAgICBleHBlY3QocG9vbC5oYXMoJ3NlcnZlci01JykpLnRvQmVUcnV0aHkoKTtcblxuICAgICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS50aGVuKGNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBleHBlY3QoY29ubmVjdGlvbi5hZGRyZXNzKS50b0VxdWFsKCdzZXJ2ZXItNicpO1xuICAgICAgICBleHBlY3QocG9vbC5oYXMoJ3NlcnZlci02JykpLnRvQmVUcnV0aHkoKTtcblxuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Rocm93cyBmb3IgaWxsZWdhbCBhY2Nlc3MgbW9kZScsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcihcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTMnLCAnc2VydmVyLTQnXSxcbiAgICAgIFsnc2VydmVyLTUnLCAnc2VydmVyLTYnXVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oJ1dST05HJykuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZXhwZWN0KGVycm9yLm1lc3NhZ2UpLnRvRXF1YWwoJ0lsbGVnYWwgbW9kZSBXUk9ORycpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgncmVmcmVzaGVzIHN0YWxlIHJvdXRpbmcgdGFibGUgdG8gZ2V0IHJlYWQgY29ubmVjdGlvbicsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHBvb2wgPSBuZXdQb29sKCk7XG4gICAgY29uc3QgdXBkYXRlZFJvdXRpbmdUYWJsZSA9IG5ld1JvdXRpbmdUYWJsZShcbiAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgIFsnc2VydmVyLUMnLCAnc2VydmVyLUQnXSxcbiAgICAgIFsnc2VydmVyLUUnLCAnc2VydmVyLUYnXVxuICAgICk7XG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyKFxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItNCddLFxuICAgICAgWydzZXJ2ZXItNScsICdzZXJ2ZXItNiddLFxuICAgICAgcG9vbCxcbiAgICAgIGludCgwKSwgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgICB7J3NlcnZlci0xJzogdXBkYXRlZFJvdXRpbmdUYWJsZX1cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFJFQUQpLnRoZW4oY29ubmVjdGlvbiA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbi5hZGRyZXNzKS50b0VxdWFsKCdzZXJ2ZXItQycpO1xuICAgICAgZXhwZWN0KHBvb2wuaGFzKCdzZXJ2ZXItQycpKS50b0JlVHJ1dGh5KCk7XG5cbiAgICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihSRUFEKS50aGVuKGNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBleHBlY3QoY29ubmVjdGlvbi5hZGRyZXNzKS50b0VxdWFsKCdzZXJ2ZXItRCcpO1xuICAgICAgICBleHBlY3QocG9vbC5oYXMoJ3NlcnZlci1EJykpLnRvQmVUcnV0aHkoKTtcblxuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3JlZnJlc2hlcyBzdGFsZSByb3V0aW5nIHRhYmxlIHRvIGdldCB3cml0ZSBjb25uZWN0aW9uJywgZG9uZSA9PiB7XG4gICAgY29uc3QgcG9vbCA9IG5ld1Bvb2woKTtcbiAgICBjb25zdCB1cGRhdGVkUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgWydzZXJ2ZXItQycsICdzZXJ2ZXItRCddLFxuICAgICAgWydzZXJ2ZXItRScsICdzZXJ2ZXItRiddXG4gICAgKTtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXIoXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0zJywgJ3NlcnZlci00J10sXG4gICAgICBbJ3NlcnZlci01JywgJ3NlcnZlci02J10sXG4gICAgICBwb29sLFxuICAgICAgaW50KDApLCAvLyBleHBpcmVkIHJvdXRpbmcgdGFibGVcbiAgICAgIHsnc2VydmVyLTEnOiB1cGRhdGVkUm91dGluZ1RhYmxlfVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oV1JJVEUpLnRoZW4oY29ubmVjdGlvbiA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbi5hZGRyZXNzKS50b0VxdWFsKCdzZXJ2ZXItRScpO1xuICAgICAgZXhwZWN0KHBvb2wuaGFzKCdzZXJ2ZXItRScpKS50b0JlVHJ1dGh5KCk7XG5cbiAgICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihXUklURSkudGhlbihjb25uZWN0aW9uID0+IHtcbiAgICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUYnKTtcbiAgICAgICAgZXhwZWN0KHBvb2wuaGFzKCdzZXJ2ZXItRicpKS50b0JlVHJ1dGh5KCk7XG5cbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdyZWZyZXNoZXMgc3RhbGUgcm91dGluZyB0YWJsZSB0byBnZXQgcmVhZCBjb25uZWN0aW9uIHdoZW4gb25lIHJvdXRlciBmYWlscycsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHBvb2wgPSBuZXdQb29sKCk7XG4gICAgY29uc3QgdXBkYXRlZFJvdXRpbmdUYWJsZSA9IG5ld1JvdXRpbmdUYWJsZShcbiAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgIFsnc2VydmVyLUMnLCAnc2VydmVyLUQnXSxcbiAgICAgIFsnc2VydmVyLUUnLCAnc2VydmVyLUYnXVxuICAgICk7XG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyKFxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItNCddLFxuICAgICAgWydzZXJ2ZXItNScsICdzZXJ2ZXItNiddLFxuICAgICAgcG9vbCxcbiAgICAgIGludCgwKSwgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgICB7XG4gICAgICAgICdzZXJ2ZXItMSc6IG51bGwsIC8vIHJldHVybnMgbm8gcm91dGluZyB0YWJsZVxuICAgICAgICAnc2VydmVyLTInOiB1cGRhdGVkUm91dGluZ1RhYmxlLFxuICAgICAgfVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oUkVBRCkudGhlbihjb25uZWN0aW9uID0+IHtcbiAgICAgIGV4cGVjdChjb25uZWN0aW9uLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1DJyk7XG4gICAgICBleHBlY3QocG9vbC5oYXMoJ3NlcnZlci1DJykpLnRvQmVUcnV0aHkoKTtcblxuICAgICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFJFQUQpLnRoZW4oY29ubmVjdGlvbiA9PiB7XG4gICAgICAgIGV4cGVjdChjb25uZWN0aW9uLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1EJyk7XG4gICAgICAgIGV4cGVjdChwb29sLmhhcygnc2VydmVyLUQnKSkudG9CZVRydXRoeSgpO1xuXG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgncmVmcmVzaGVzIHN0YWxlIHJvdXRpbmcgdGFibGUgdG8gZ2V0IHdyaXRlIGNvbm5lY3Rpb24gd2hlbiBvbmUgcm91dGVyIGZhaWxzJywgZG9uZSA9PiB7XG4gICAgY29uc3QgcG9vbCA9IG5ld1Bvb2woKTtcbiAgICBjb25zdCB1cGRhdGVkUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgWydzZXJ2ZXItQycsICdzZXJ2ZXItRCddLFxuICAgICAgWydzZXJ2ZXItRScsICdzZXJ2ZXItRiddXG4gICAgKTtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXIoXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0zJywgJ3NlcnZlci00J10sXG4gICAgICBbJ3NlcnZlci01JywgJ3NlcnZlci02J10sXG4gICAgICBwb29sLFxuICAgICAgaW50KDApLCAvLyBleHBpcmVkIHJvdXRpbmcgdGFibGVcbiAgICAgIHtcbiAgICAgICAgJ3NlcnZlci0xJzogbnVsbCwgLy8gcmV0dXJucyBubyByb3V0aW5nIHRhYmxlXG4gICAgICAgICdzZXJ2ZXItMic6IHVwZGF0ZWRSb3V0aW5nVGFibGUsXG4gICAgICB9XG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihXUklURSkudGhlbihjb25uZWN0aW9uID0+IHtcbiAgICAgIGV4cGVjdChjb25uZWN0aW9uLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1FJyk7XG4gICAgICBleHBlY3QocG9vbC5oYXMoJ3NlcnZlci1FJykpLnRvQmVUcnV0aHkoKTtcblxuICAgICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS50aGVuKGNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBleHBlY3QoY29ubmVjdGlvbi5hZGRyZXNzKS50b0VxdWFsKCdzZXJ2ZXItRicpO1xuICAgICAgICBleHBlY3QocG9vbC5oYXMoJ3NlcnZlci1GJykpLnRvQmVUcnV0aHkoKTtcblxuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3JlZnJlc2hlcyByb3V0aW5nIHRhYmxlIHdpdGhvdXQgcmVhZGVycyB0byBnZXQgcmVhZCBjb25uZWN0aW9uJywgZG9uZSA9PiB7XG4gICAgY29uc3QgcG9vbCA9IG5ld1Bvb2woKTtcbiAgICBjb25zdCB1cGRhdGVkUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgWydzZXJ2ZXItQycsICdzZXJ2ZXItRCddLFxuICAgICAgWydzZXJ2ZXItRScsICdzZXJ2ZXItRiddXG4gICAgKTtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXIoXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJ10sXG4gICAgICBbXSwgLy8gbm8gcmVhZGVyc1xuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItNCddLFxuICAgICAgcG9vbCxcbiAgICAgIEludGVnZXIuTUFYX1ZBTFVFLFxuICAgICAge1xuICAgICAgICAnc2VydmVyLTEnOiBudWxsLCAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgICAgJ3NlcnZlci0yJzogdXBkYXRlZFJvdXRpbmdUYWJsZSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFJFQUQpLnRoZW4oY29ubmVjdGlvbiA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbi5hZGRyZXNzKS50b0VxdWFsKCdzZXJ2ZXItQycpO1xuICAgICAgZXhwZWN0KHBvb2wuaGFzKCdzZXJ2ZXItQycpKS50b0JlVHJ1dGh5KCk7XG5cbiAgICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihSRUFEKS50aGVuKGNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBleHBlY3QoY29ubmVjdGlvbi5hZGRyZXNzKS50b0VxdWFsKCdzZXJ2ZXItRCcpO1xuICAgICAgICBleHBlY3QocG9vbC5oYXMoJ3NlcnZlci1EJykpLnRvQmVUcnV0aHkoKTtcblxuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3JlZnJlc2hlcyByb3V0aW5nIHRhYmxlIHdpdGhvdXQgd3JpdGVycyB0byBnZXQgd3JpdGUgY29ubmVjdGlvbicsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHBvb2wgPSBuZXdQb29sKCk7XG4gICAgY29uc3QgdXBkYXRlZFJvdXRpbmdUYWJsZSA9IG5ld1JvdXRpbmdUYWJsZShcbiAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgIFsnc2VydmVyLUMnLCAnc2VydmVyLUQnXSxcbiAgICAgIFsnc2VydmVyLUUnLCAnc2VydmVyLUYnXVxuICAgICk7XG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyKFxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItNCddLFxuICAgICAgW10sIC8vIG5vIHdyaXRlcnNcbiAgICAgIHBvb2wsXG4gICAgICBpbnQoMCksIC8vIGV4cGlyZWQgcm91dGluZyB0YWJsZVxuICAgICAge1xuICAgICAgICAnc2VydmVyLTEnOiBudWxsLCAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgICAgJ3NlcnZlci0yJzogdXBkYXRlZFJvdXRpbmdUYWJsZSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS50aGVuKGNvbm5lY3Rpb24gPT4ge1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUUnKTtcbiAgICAgIGV4cGVjdChwb29sLmhhcygnc2VydmVyLUUnKSkudG9CZVRydXRoeSgpO1xuXG4gICAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oV1JJVEUpLnRoZW4oY29ubmVjdGlvbiA9PiB7XG4gICAgICAgIGV4cGVjdChjb25uZWN0aW9uLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1GJyk7XG4gICAgICAgIGV4cGVjdChwb29sLmhhcygnc2VydmVyLUYnKSkudG9CZVRydXRoeSgpO1xuXG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgndGhyb3dzIHdoZW4gYWxsIHJvdXRlcnMgcmV0dXJuIG5vdGhpbmcgd2hpbGUgZ2V0dGluZyByZWFkIGNvbm5lY3Rpb24nLCBkb25lID0+IHtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXIoXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0zJywgJ3NlcnZlci00J10sXG4gICAgICBbJ3NlcnZlci01JywgJ3NlcnZlci02J10sXG4gICAgICBuZXdQb29sKCksXG4gICAgICBpbnQoMCksIC8vIGV4cGlyZWQgcm91dGluZyB0YWJsZVxuICAgICAge1xuICAgICAgICAnc2VydmVyLTEnOiBudWxsLCAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgICAgJ3NlcnZlci0yJzogbnVsbCAgLy8gcmV0dXJucyBubyByb3V0aW5nIHRhYmxlXG4gICAgICB9XG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihSRUFEKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9FcXVhbChTRVJWSUNFX1VOQVZBSUxBQkxFKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Rocm93cyB3aGVuIGFsbCByb3V0ZXJzIHJldHVybiBub3RoaW5nIHdoaWxlIGdldHRpbmcgd3JpdGUgY29ubmVjdGlvbicsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcihcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTMnLCAnc2VydmVyLTQnXSxcbiAgICAgIFsnc2VydmVyLTUnLCAnc2VydmVyLTYnXSxcbiAgICAgIG5ld1Bvb2woKSxcbiAgICAgIGludCgwKSwgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgICB7XG4gICAgICAgICdzZXJ2ZXItMSc6IG51bGwsIC8vIHJldHVybnMgbm8gcm91dGluZyB0YWJsZVxuICAgICAgICAnc2VydmVyLTInOiBudWxsICAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9FcXVhbChTRVJWSUNFX1VOQVZBSUxBQkxFKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Rocm93cyB3aGVuIGFsbCByb3V0ZXJzIHJldHVybiByb3V0aW5nIHRhYmxlcyB3aXRob3V0IHJlYWRlcnMgd2hpbGUgZ2V0dGluZyByZWFkIGNvbm5lY3Rpb24nLCBkb25lID0+IHtcbiAgICBjb25zdCB1cGRhdGVkUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgW10sIC8vIG5vIHJlYWRlcnMgLSB0YWJsZSBjYW4ndCBzYXRpc2Z5IGNvbm5lY3Rpb24gcmVxdWlyZW1lbnRcbiAgICAgIFsnc2VydmVyLUMnLCAnc2VydmVyLUQnXVxuICAgICk7XG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyKFxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItNCddLFxuICAgICAgWydzZXJ2ZXItNScsICdzZXJ2ZXItNiddLFxuICAgICAgbmV3UG9vbCgpLFxuICAgICAgaW50KDApLCAvLyBleHBpcmVkIHJvdXRpbmcgdGFibGVcbiAgICAgIHtcbiAgICAgICAgJ3NlcnZlci0xJzogdXBkYXRlZFJvdXRpbmdUYWJsZSxcbiAgICAgICAgJ3NlcnZlci0yJzogdXBkYXRlZFJvdXRpbmdUYWJsZVxuICAgICAgfVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oUkVBRCkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvRXF1YWwoU0VTU0lPTl9FWFBJUkVEKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Rocm93cyB3aGVuIGFsbCByb3V0ZXJzIHJldHVybiByb3V0aW5nIHRhYmxlcyB3aXRob3V0IHdyaXRlcnMgd2hpbGUgZ2V0dGluZyB3cml0ZSBjb25uZWN0aW9uJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdXBkYXRlZFJvdXRpbmdUYWJsZSA9IG5ld1JvdXRpbmdUYWJsZShcbiAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgIFsnc2VydmVyLUMnLCAnc2VydmVyLUQnXSxcbiAgICAgIFtdIC8vIG5vIHdyaXRlcnMgLSB0YWJsZSBjYW4ndCBzYXRpc2Z5IGNvbm5lY3Rpb24gcmVxdWlyZW1lbnRcbiAgICApO1xuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcihcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTMnLCAnc2VydmVyLTQnXSxcbiAgICAgIFsnc2VydmVyLTUnLCAnc2VydmVyLTYnXSxcbiAgICAgIG5ld1Bvb2woKSxcbiAgICAgIGludCgwKSwgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgICB7XG4gICAgICAgICdzZXJ2ZXItMSc6IHVwZGF0ZWRSb3V0aW5nVGFibGUsXG4gICAgICAgICdzZXJ2ZXItMic6IHVwZGF0ZWRSb3V0aW5nVGFibGVcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9FcXVhbChTRVNTSU9OX0VYUElSRUQpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgndGhyb3dzIHdoZW4gc3RhbGUgcm91dGluZyB0YWJsZSB3aXRob3V0IHJvdXRlcnMgd2hpbGUgZ2V0dGluZyByZWFkIGNvbm5lY3Rpb24nLCBkb25lID0+IHtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXIoXG4gICAgICBbXSwgLy8gbm8gcm91dGVyc1xuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItNCddLFxuICAgICAgWydzZXJ2ZXItNScsICdzZXJ2ZXItNiddLFxuICAgICAgbmV3UG9vbCgpLFxuICAgICAgaW50KDApIC8vIGV4cGlyZWQgcm91dGluZyB0YWJsZVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oUkVBRCkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvRXF1YWwoU0VSVklDRV9VTkFWQUlMQUJMRSk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCd0aHJvd3Mgd2hlbiBzdGFsZSByb3V0aW5nIHRhYmxlIHdpdGhvdXQgcm91dGVycyB3aGlsZSBnZXR0aW5nIHdyaXRlIGNvbm5lY3Rpb24nLCBkb25lID0+IHtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXIoXG4gICAgICBbXSwgLy8gbm8gcm91dGVyc1xuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItNCddLFxuICAgICAgWydzZXJ2ZXItNScsICdzZXJ2ZXItNiddLFxuICAgICAgbmV3UG9vbCgpLFxuICAgICAgaW50KDApIC8vIGV4cGlyZWQgcm91dGluZyB0YWJsZVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oV1JJVEUpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGV4cGVjdChlcnJvci5jb2RlKS50b0VxdWFsKFNFUlZJQ0VfVU5BVkFJTEFCTEUpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgndXBkYXRlcyByb3V0aW5nIHRhYmxlIGFmdGVyIHJlZnJlc2gnLCBkb25lID0+IHtcbiAgICBjb25zdCBwb29sID0gbmV3UG9vbCgpO1xuICAgIGNvbnN0IHVwZGF0ZWRSb3V0aW5nVGFibGUgPSBuZXdSb3V0aW5nVGFibGUoXG4gICAgICBbJ3NlcnZlci1BJywgJ3NlcnZlci1CJ10sXG4gICAgICBbJ3NlcnZlci1DJywgJ3NlcnZlci1EJ10sXG4gICAgICBbJ3NlcnZlci1FJywgJ3NlcnZlci1GJ11cbiAgICApO1xuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcihcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTMnLCAnc2VydmVyLTQnXSxcbiAgICAgIFsnc2VydmVyLTUnLCAnc2VydmVyLTYnXSxcbiAgICAgIHBvb2wsXG4gICAgICBpbnQoMCksIC8vIGV4cGlyZWQgcm91dGluZyB0YWJsZVxuICAgICAge1xuICAgICAgICAnc2VydmVyLTEnOiB1cGRhdGVkUm91dGluZ1RhYmxlXG4gICAgICB9XG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihSRUFEKS50aGVuKCgpID0+IHtcbiAgICAgIGV4cGVjdFJvdXRpbmdUYWJsZShsb2FkQmFsYW5jZXIsXG4gICAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgICAgWydzZXJ2ZXItQycsICdzZXJ2ZXItRCddLFxuICAgICAgICBbJ3NlcnZlci1FJywgJ3NlcnZlci1GJ11cbiAgICAgICk7XG4gICAgICBleHBlY3RQb29sVG9Ob3RDb250YWluKHBvb2wsIFsnc2VydmVyLTEnLCAnc2VydmVyLTInLCAnc2VydmVyLTMnLCAnc2VydmVyLTQnLCAnc2VydmVyLTUnLCAnc2VydmVyLTYnXSk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdmb3JnZXRzIGFsbCByb3V0ZXJzIHdoZW4gdGhleSBmYWlsIHdoaWxlIGFjcXVpcmluZyByZWFkIGNvbm5lY3Rpb24nLCBkb25lID0+IHtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXIoXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJywgJ3NlcnZlci0zJ10sXG4gICAgICBbJ3NlcnZlci00JywgJ3NlcnZlci01J10sXG4gICAgICBbJ3NlcnZlci02JywgJ3NlcnZlci03J10sXG4gICAgICBuZXdQb29sKCksXG4gICAgICBpbnQoMCkgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihSRUFEKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9FcXVhbChTRVJWSUNFX1VOQVZBSUxBQkxFKTtcbiAgICAgIGV4cGVjdFJvdXRpbmdUYWJsZShsb2FkQmFsYW5jZXIsXG4gICAgICAgIFtdLFxuICAgICAgICBbJ3NlcnZlci00JywgJ3NlcnZlci01J10sXG4gICAgICAgIFsnc2VydmVyLTYnLCAnc2VydmVyLTcnXVxuICAgICAgKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ2ZvcmdldHMgYWxsIHJvdXRlcnMgd2hlbiB0aGV5IGZhaWwgd2hpbGUgYWNxdWlyaW5nIHdyaXRlIGNvbm5lY3Rpb24nLCBkb25lID0+IHtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXIoXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJywgJ3NlcnZlci0zJ10sXG4gICAgICBbJ3NlcnZlci00JywgJ3NlcnZlci01J10sXG4gICAgICBbJ3NlcnZlci02JywgJ3NlcnZlci03J10sXG4gICAgICBuZXdQb29sKCksXG4gICAgICBpbnQoMCkgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihXUklURSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvRXF1YWwoU0VSVklDRV9VTkFWQUlMQUJMRSk7XG4gICAgICBleHBlY3RSb3V0aW5nVGFibGUobG9hZEJhbGFuY2VyLFxuICAgICAgICBbXSxcbiAgICAgICAgWydzZXJ2ZXItNCcsICdzZXJ2ZXItNSddLFxuICAgICAgICBbJ3NlcnZlci02JywgJ3NlcnZlci03J11cbiAgICAgICk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCd1c2VzIHNlZWQgcm91dGVyIGFkZHJlc3Mgd2hlbiBhbGwgZXhpc3Rpbmcgcm91dGVycyBmYWlsJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdXBkYXRlZFJvdXRpbmdUYWJsZSA9IG5ld1JvdXRpbmdUYWJsZShcbiAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInLCAnc2VydmVyLUMnXSxcbiAgICAgIFsnc2VydmVyLUQnLCAnc2VydmVyLUUnXSxcbiAgICAgIFsnc2VydmVyLUYnLCAnc2VydmVyLUcnXVxuICAgICk7XG5cbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXJXaXRoU2VlZFJvdXRlcihcbiAgICAgICdzZXJ2ZXItMCcsIFsnc2VydmVyLTAnXSwgLy8gc2VlZCByb3V0ZXIgYWRkcmVzcyByZXNvbHZlcyBqdXN0IHRvIGl0c2VsZlxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMicsICdzZXJ2ZXItMyddLFxuICAgICAgWydzZXJ2ZXItNCcsICdzZXJ2ZXItNSddLFxuICAgICAgWydzZXJ2ZXItNicsICdzZXJ2ZXItNyddLFxuICAgICAgaW50KDApLCAvLyBleHBpcmVkIHJvdXRpbmcgdGFibGVcbiAgICAgIHtcbiAgICAgICAgJ3NlcnZlci0xJzogbnVsbCwgLy8gcmV0dXJucyBubyByb3V0aW5nIHRhYmxlXG4gICAgICAgICdzZXJ2ZXItMic6IG51bGwsIC8vIHJldHVybnMgbm8gcm91dGluZyB0YWJsZVxuICAgICAgICAnc2VydmVyLTMnOiBudWxsLCAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgICAgJ3NlcnZlci0wJzogdXBkYXRlZFJvdXRpbmdUYWJsZVxuICAgICAgfVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oUkVBRCkudGhlbihjb25uZWN0aW9uMSA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbjEuYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUQnKTtcblxuICAgICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS50aGVuKGNvbm5lY3Rpb24yID0+IHtcbiAgICAgICAgZXhwZWN0KGNvbm5lY3Rpb24yLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1GJyk7XG5cbiAgICAgICAgZXhwZWN0Um91dGluZ1RhYmxlKGxvYWRCYWxhbmNlcixcbiAgICAgICAgICBbJ3NlcnZlci1BJywgJ3NlcnZlci1CJywgJ3NlcnZlci1DJ10sXG4gICAgICAgICAgWydzZXJ2ZXItRCcsICdzZXJ2ZXItRSddLFxuICAgICAgICAgIFsnc2VydmVyLUYnLCAnc2VydmVyLUcnXVxuICAgICAgICApO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3VzZXMgcmVzb2x2ZWQgc2VlZCByb3V0ZXIgYWRkcmVzcyB3aGVuIGFsbCBleGlzdGluZyByb3V0ZXJzIGZhaWwnLCBkb25lID0+IHtcbiAgICBjb25zdCB1cGRhdGVkUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgWydzZXJ2ZXItQycsICdzZXJ2ZXItRCddLFxuICAgICAgWydzZXJ2ZXItRScsICdzZXJ2ZXItRiddXG4gICAgKTtcblxuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcldpdGhTZWVkUm91dGVyKFxuICAgICAgJ3NlcnZlci0wJywgWydzZXJ2ZXItMDEnXSwgLy8gc2VlZCByb3V0ZXIgYWRkcmVzcyByZXNvbHZlcyB0byBhIGRpZmZlcmVudCBvbmVcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInLCAnc2VydmVyLTMnXSxcbiAgICAgIFsnc2VydmVyLTQnLCAnc2VydmVyLTUnXSxcbiAgICAgIFsnc2VydmVyLTYnLCAnc2VydmVyLTcnXSxcbiAgICAgIGludCgwKSwgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgICB7XG4gICAgICAgICdzZXJ2ZXItMSc6IG51bGwsIC8vIHJldHVybnMgbm8gcm91dGluZyB0YWJsZVxuICAgICAgICAnc2VydmVyLTInOiBudWxsLCAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgICAgJ3NlcnZlci0zJzogbnVsbCwgLy8gcmV0dXJucyBubyByb3V0aW5nIHRhYmxlXG4gICAgICAgICdzZXJ2ZXItMDEnOiB1cGRhdGVkUm91dGluZ1RhYmxlXG4gICAgICB9XG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihXUklURSkudGhlbihjb25uZWN0aW9uMSA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbjEuYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUUnKTtcblxuICAgICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFJFQUQpLnRoZW4oY29ubmVjdGlvbjIgPT4ge1xuICAgICAgICBleHBlY3QoY29ubmVjdGlvbjIuYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUMnKTtcblxuICAgICAgICBleHBlY3RSb3V0aW5nVGFibGUobG9hZEJhbGFuY2VyLFxuICAgICAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgICAgICBbJ3NlcnZlci1DJywgJ3NlcnZlci1EJ10sXG4gICAgICAgICAgWydzZXJ2ZXItRScsICdzZXJ2ZXItRiddXG4gICAgICAgICk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgndXNlcyByZXNvbHZlZCBzZWVkIHJvdXRlciBhZGRyZXNzIHRoYXQgcmV0dXJucyBjb3JyZWN0IHJvdXRpbmcgdGFibGUgd2hlbiBhbGwgZXhpc3Rpbmcgcm91dGVycyBmYWlsJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdXBkYXRlZFJvdXRpbmdUYWJsZSA9IG5ld1JvdXRpbmdUYWJsZShcbiAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgIFsnc2VydmVyLUMnXSxcbiAgICAgIFsnc2VydmVyLUQnLCAnc2VydmVyLUUnXVxuICAgICk7XG5cbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXJXaXRoU2VlZFJvdXRlcihcbiAgICAgICdzZXJ2ZXItMCcsIFsnc2VydmVyLTAxJywgJ3NlcnZlci0wMicsICdzZXJ2ZXItMDMnXSwgLy8gc2VlZCByb3V0ZXIgYWRkcmVzcyByZXNvbHZlcyB0byAzIGRpZmZlcmVudCBhZGRyZXNzZXNcbiAgICAgIFsnc2VydmVyLTEnXSxcbiAgICAgIFsnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTMnXSxcbiAgICAgIGludCgwKSwgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgICB7XG4gICAgICAgICdzZXJ2ZXItMSc6IG51bGwsIC8vIHJldHVybnMgbm8gcm91dGluZyB0YWJsZVxuICAgICAgICAnc2VydmVyLTAxJzogbnVsbCwgLy8gcmV0dXJucyBubyByb3V0aW5nIHRhYmxlXG4gICAgICAgICdzZXJ2ZXItMDInOiBudWxsLCAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgICAgJ3NlcnZlci0wMyc6IHVwZGF0ZWRSb3V0aW5nVGFibGVcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS50aGVuKGNvbm5lY3Rpb24xID0+IHtcbiAgICAgIGV4cGVjdChjb25uZWN0aW9uMS5hZGRyZXNzKS50b0VxdWFsKCdzZXJ2ZXItRCcpO1xuXG4gICAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oV1JJVEUpLnRoZW4oY29ubmVjdGlvbjIgPT4ge1xuICAgICAgICBleHBlY3QoY29ubmVjdGlvbjIuYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUUnKTtcblxuICAgICAgICBleHBlY3RSb3V0aW5nVGFibGUobG9hZEJhbGFuY2VyLFxuICAgICAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgICAgICBbJ3NlcnZlci1DJ10sXG4gICAgICAgICAgWydzZXJ2ZXItRCcsICdzZXJ2ZXItRSddXG4gICAgICAgICk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnZmFpbHMgd2hlbiBib3RoIGV4aXN0aW5nIHJvdXRlcnMgYW5kIHNlZWQgcm91dGVyIGZhaWwgdG8gcmV0dXJuIGEgcm91dGluZyB0YWJsZScsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcldpdGhTZWVkUm91dGVyKFxuICAgICAgJ3NlcnZlci0wJywgWydzZXJ2ZXItMCddLCAvLyBzZWVkIHJvdXRlciBhZGRyZXNzIHJlc29sdmVzIGp1c3QgdG8gaXRzZWxmXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJywgJ3NlcnZlci0zJ10sXG4gICAgICBbJ3NlcnZlci00JywgJ3NlcnZlci01J10sXG4gICAgICBbJ3NlcnZlci02J10sXG4gICAgICBpbnQoMCksIC8vIGV4cGlyZWQgcm91dGluZyB0YWJsZVxuICAgICAge1xuICAgICAgICAnc2VydmVyLTEnOiBudWxsLCAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgICAgJ3NlcnZlci0yJzogbnVsbCwgLy8gcmV0dXJucyBubyByb3V0aW5nIHRhYmxlXG4gICAgICAgICdzZXJ2ZXItMyc6IG51bGwsIC8vIHJldHVybnMgbm8gcm91dGluZyB0YWJsZVxuICAgICAgICAnc2VydmVyLTAnOiBudWxsIC8vIHJldHVybnMgbm8gcm91dGluZyB0YWJsZVxuICAgICAgfVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oUkVBRCkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvRXF1YWwoU0VSVklDRV9VTkFWQUlMQUJMRSk7XG5cbiAgICAgIGV4cGVjdFJvdXRpbmdUYWJsZShsb2FkQmFsYW5jZXIsXG4gICAgICAgIFtdLCAvLyBhbGwgcm91dGVycyB3ZXJlIGZvcmdvdHRlbiBiZWNhdXNlIHRoZXkgZmFpbGVkXG4gICAgICAgIFsnc2VydmVyLTQnLCAnc2VydmVyLTUnXSxcbiAgICAgICAgWydzZXJ2ZXItNiddLFxuICAgICAgKTtcblxuICAgICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGV4cGVjdChlcnJvci5jb2RlKS50b0VxdWFsKFNFUlZJQ0VfVU5BVkFJTEFCTEUpO1xuXG4gICAgICAgIGV4cGVjdFJvdXRpbmdUYWJsZShsb2FkQmFsYW5jZXIsXG4gICAgICAgICAgW10sIC8vIGFsbCByb3V0ZXJzIHdlcmUgZm9yZ290dGVuIGJlY2F1c2UgdGhleSBmYWlsZWRcbiAgICAgICAgICBbJ3NlcnZlci00JywgJ3NlcnZlci01J10sXG4gICAgICAgICAgWydzZXJ2ZXItNiddLFxuICAgICAgICApO1xuXG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnZmFpbHMgd2hlbiBib3RoIGV4aXN0aW5nIHJvdXRlcnMgYW5kIHJlc29sdmVkIHNlZWQgcm91dGVyIGZhaWwgdG8gcmV0dXJuIGEgcm91dGluZyB0YWJsZScsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcldpdGhTZWVkUm91dGVyKFxuICAgICAgJ3NlcnZlci0wJywgWydzZXJ2ZXItMDEnXSwgLy8gc2VlZCByb3V0ZXIgYWRkcmVzcyByZXNvbHZlcyB0byBhIGRpZmZlcmVudCBvbmVcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTMnXSxcbiAgICAgIFsnc2VydmVyLTQnXSxcbiAgICAgIGludCgwKSwgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgICB7XG4gICAgICAgICdzZXJ2ZXItMSc6IG51bGwsIC8vIHJldHVybnMgbm8gcm91dGluZyB0YWJsZVxuICAgICAgICAnc2VydmVyLTInOiBudWxsLCAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgICAgJ3NlcnZlci0wMSc6IG51bGwgLy8gcmV0dXJucyBubyByb3V0aW5nIHRhYmxlXG4gICAgICB9XG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihXUklURSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvRXF1YWwoU0VSVklDRV9VTkFWQUlMQUJMRSk7XG5cbiAgICAgIGV4cGVjdFJvdXRpbmdUYWJsZShsb2FkQmFsYW5jZXIsXG4gICAgICAgIFtdLCAvLyBhbGwgcm91dGVycyB3ZXJlIGZvcmdvdHRlbiBiZWNhdXNlIHRoZXkgZmFpbGVkXG4gICAgICAgIFsnc2VydmVyLTMnXSxcbiAgICAgICAgWydzZXJ2ZXItNCddLFxuICAgICAgKTtcblxuICAgICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFJFQUQpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvRXF1YWwoU0VSVklDRV9VTkFWQUlMQUJMRSk7XG5cbiAgICAgICAgZXhwZWN0Um91dGluZ1RhYmxlKGxvYWRCYWxhbmNlcixcbiAgICAgICAgICBbXSwgLy8gYWxsIHJvdXRlcnMgd2VyZSBmb3Jnb3R0ZW4gYmVjYXVzZSB0aGV5IGZhaWxlZFxuICAgICAgICAgIFsnc2VydmVyLTMnXSxcbiAgICAgICAgICBbJ3NlcnZlci00J10sXG4gICAgICAgICk7XG5cbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdmYWlscyB3aGVuIGJvdGggZXhpc3Rpbmcgcm91dGVycyBhbmQgYWxsIHJlc29sdmVkIHNlZWQgcm91dGVycyBmYWlsIHRvIHJldHVybiBhIHJvdXRpbmcgdGFibGUnLCBkb25lID0+IHtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXJXaXRoU2VlZFJvdXRlcihcbiAgICAgICdzZXJ2ZXItMCcsIFsnc2VydmVyLTAyJywgJ3NlcnZlci0wMSddLCAvLyBzZWVkIHJvdXRlciBhZGRyZXNzIHJlc29sdmVzIHRvIDIgZGlmZmVyZW50IGFkZHJlc3Nlc1xuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMicsICdzZXJ2ZXItMyddLFxuICAgICAgWydzZXJ2ZXItNCddLFxuICAgICAgWydzZXJ2ZXItNSddLFxuICAgICAgaW50KDApLCAvLyBleHBpcmVkIHJvdXRpbmcgdGFibGVcbiAgICAgIHtcbiAgICAgICAgJ3NlcnZlci0xJzogbnVsbCwgLy8gcmV0dXJucyBubyByb3V0aW5nIHRhYmxlXG4gICAgICAgICdzZXJ2ZXItMic6IG51bGwsIC8vIHJldHVybnMgbm8gcm91dGluZyB0YWJsZVxuICAgICAgICAnc2VydmVyLTMnOiBudWxsLCAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgICAgJ3NlcnZlci0wMSc6IG51bGwsIC8vIHJldHVybnMgbm8gcm91dGluZyB0YWJsZVxuICAgICAgICAnc2VydmVyLTAyJzogbnVsbCAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFJFQUQpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGV4cGVjdChlcnJvci5jb2RlKS50b0VxdWFsKFNFUlZJQ0VfVU5BVkFJTEFCTEUpO1xuXG4gICAgICBleHBlY3RSb3V0aW5nVGFibGUobG9hZEJhbGFuY2VyLFxuICAgICAgICBbXSwgLy8gYWxsIGtub3duIHNlZWQgc2VydmVycyBmYWlsZWQgdG8gcmV0dXJuIHJvdXRpbmcgdGFibGVzIGFuZCB3ZXJlIGZvcmdvdHRlblxuICAgICAgICBbJ3NlcnZlci00J10sXG4gICAgICAgIFsnc2VydmVyLTUnXSxcbiAgICAgICk7XG5cbiAgICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihXUklURSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9FcXVhbChTRVJWSUNFX1VOQVZBSUxBQkxFKTtcblxuICAgICAgICBleHBlY3RSb3V0aW5nVGFibGUobG9hZEJhbGFuY2VyLFxuICAgICAgICAgIFtdLCAvLyBhbGwga25vd24gc2VlZCBzZXJ2ZXJzIGZhaWxlZCB0byByZXR1cm4gcm91dGluZyB0YWJsZXMgYW5kIHdlcmUgZm9yZ290dGVuXG4gICAgICAgICAgWydzZXJ2ZXItNCddLFxuICAgICAgICAgIFsnc2VydmVyLTUnXSxcbiAgICAgICAgKTtcblxuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3VzZXMgc2VlZCByb3V0ZXIgd2hlbiBubyBleGlzdGluZyByb3V0ZXJzJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdXBkYXRlZFJvdXRpbmdUYWJsZSA9IG5ld1JvdXRpbmdUYWJsZShcbiAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgIFsnc2VydmVyLUMnXSxcbiAgICAgIFsnc2VydmVyLUQnXVxuICAgICk7XG5cbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXJXaXRoU2VlZFJvdXRlcihcbiAgICAgICdzZXJ2ZXItMCcsIFsnc2VydmVyLTAnXSwgLy8gc2VlZCByb3V0ZXIgYWRkcmVzcyByZXNvbHZlcyBqdXN0IHRvIGl0c2VsZlxuICAgICAgW10sIC8vIG5vIHJvdXRlcnMgaW4gdGhlIGtub3duIHJvdXRpbmcgdGFibGVcbiAgICAgIFsnc2VydmVyLTEnLCAnc2VydmVyLTInXSxcbiAgICAgIFsnc2VydmVyLTMnXSxcbiAgICAgIEludGVnZXIuTUFYX1ZBTFVFLCAvLyBub3QgZXhwaXJlZFxuICAgICAge1xuICAgICAgICAnc2VydmVyLTAnOiB1cGRhdGVkUm91dGluZ1RhYmxlXG4gICAgICB9XG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihXUklURSkudGhlbihjb25uZWN0aW9uMSA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbjEuYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUQnKTtcblxuICAgICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFJFQUQpLnRoZW4oY29ubmVjdGlvbjIgPT4ge1xuICAgICAgICBleHBlY3QoY29ubmVjdGlvbjIuYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUMnKTtcblxuICAgICAgICBleHBlY3RSb3V0aW5nVGFibGUobG9hZEJhbGFuY2VyLFxuICAgICAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgICAgICBbJ3NlcnZlci1DJ10sXG4gICAgICAgICAgWydzZXJ2ZXItRCddXG4gICAgICAgICk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgndXNlcyByZXNvbHZlZCBzZWVkIHJvdXRlciB3aGVuIG5vIGV4aXN0aW5nIHJvdXRlcnMnLCBkb25lID0+IHtcbiAgICBjb25zdCB1cGRhdGVkUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgWydzZXJ2ZXItQycsICdzZXJ2ZXItRCddLFxuICAgICAgWydzZXJ2ZXItRicsICdzZXJ2ZXItRSddXG4gICAgKTtcblxuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IG5ld0xvYWRCYWxhbmNlcldpdGhTZWVkUm91dGVyKFxuICAgICAgJ3NlcnZlci0wJywgWydzZXJ2ZXItMDEnXSwgLy8gc2VlZCByb3V0ZXIgYWRkcmVzcyByZXNvbHZlcyB0byBhIGRpZmZlcmVudCBvbmVcbiAgICAgIFtdLCAvLyBubyByb3V0ZXJzIGluIHRoZSBrbm93biByb3V0aW5nIHRhYmxlXG4gICAgICBbJ3NlcnZlci0xJywgJ3NlcnZlci0yJ10sXG4gICAgICBbJ3NlcnZlci0zJywgJ3NlcnZlci00J10sXG4gICAgICBJbnRlZ2VyLk1BWF9WQUxVRSwgLy8gbm90IGV4cGlyZWRcbiAgICAgIHtcbiAgICAgICAgJ3NlcnZlci0wMSc6IHVwZGF0ZWRSb3V0aW5nVGFibGVcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFJFQUQpLnRoZW4oY29ubmVjdGlvbjEgPT4ge1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24xLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1DJyk7XG5cbiAgICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihXUklURSkudGhlbihjb25uZWN0aW9uMiA9PiB7XG4gICAgICAgIGV4cGVjdChjb25uZWN0aW9uMi5hZGRyZXNzKS50b0VxdWFsKCdzZXJ2ZXItRicpO1xuXG4gICAgICAgIGV4cGVjdFJvdXRpbmdUYWJsZShsb2FkQmFsYW5jZXIsXG4gICAgICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgICAgIFsnc2VydmVyLUMnLCAnc2VydmVyLUQnXSxcbiAgICAgICAgICBbJ3NlcnZlci1GJywgJ3NlcnZlci1FJ11cbiAgICAgICAgKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCd1c2VzIHJlc29sdmVkIHNlZWQgcm91dGVyIHRoYXQgcmV0dXJucyByb3V0aW5nIHRhYmxlIHdoZW4gbm8gZXhpc3Rpbmcgcm91dGVycyBleGlzdCcsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZWRSb3V0aW5nVGFibGUgPSBuZXdSb3V0aW5nVGFibGUoXG4gICAgICBbJ3NlcnZlci1BJywgJ3NlcnZlci1CJywgJ3NlcnZlci1DJ10sXG4gICAgICBbJ3NlcnZlci1EJywgJ3NlcnZlci1FJ10sXG4gICAgICBbJ3NlcnZlci1GJ11cbiAgICApO1xuXG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyV2l0aFNlZWRSb3V0ZXIoXG4gICAgICAnc2VydmVyLTAnLCBbJ3NlcnZlci0wMicsICdzZXJ2ZXItMDEnLCAnc2VydmVyLTAzJ10sIC8vIHNlZWQgcm91dGVyIGFkZHJlc3MgcmVzb2x2ZXMgdG8gMyBkaWZmZXJlbnQgYWRkcmVzc2VzXG4gICAgICBbXSwgLy8gbm8gcm91dGVycyBpbiB0aGUga25vd24gcm91dGluZyB0YWJsZVxuICAgICAgWydzZXJ2ZXItMSddLFxuICAgICAgWydzZXJ2ZXItMicsICdzZXJ2ZXItMyddLFxuICAgICAgSW50ZWdlci5NQVhfVkFMVUUsIC8vIG5vdCBleHBpcmVkXG4gICAgICB7XG4gICAgICAgICdzZXJ2ZXItMDEnOiBudWxsLCAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgICAgJ3NlcnZlci0wMic6IG51bGwsIC8vIHJldHVybnMgbm8gcm91dGluZyB0YWJsZVxuICAgICAgICAnc2VydmVyLTAzJzogdXBkYXRlZFJvdXRpbmdUYWJsZVxuICAgICAgfVxuICAgICk7XG5cbiAgICBsb2FkQmFsYW5jZXIuYWNxdWlyZUNvbm5lY3Rpb24oV1JJVEUpLnRoZW4oY29ubmVjdGlvbjEgPT4ge1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24xLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1GJyk7XG5cbiAgICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihSRUFEKS50aGVuKGNvbm5lY3Rpb24yID0+IHtcbiAgICAgICAgZXhwZWN0KGNvbm5lY3Rpb24yLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1EJyk7XG5cbiAgICAgICAgZXhwZWN0Um91dGluZ1RhYmxlKGxvYWRCYWxhbmNlcixcbiAgICAgICAgICBbJ3NlcnZlci1BJywgJ3NlcnZlci1CJywgJ3NlcnZlci1DJ10sXG4gICAgICAgICAgWydzZXJ2ZXItRCcsICdzZXJ2ZXItRSddLFxuICAgICAgICAgIFsnc2VydmVyLUYnXVxuICAgICAgICApO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ2lnbm9yZXMgYWxyZWFkeSBwcm9iZWQgcm91dGVycyBhZnRlciBzZWVkIHJvdXRlciByZXNvbHV0aW9uJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdXBkYXRlZFJvdXRpbmdUYWJsZSA9IG5ld1JvdXRpbmdUYWJsZShcbiAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgIFsnc2VydmVyLUMnLCAnc2VydmVyLUQnXSxcbiAgICAgIFsnc2VydmVyLUUnLCAnc2VydmVyLUYnXVxuICAgICk7XG5cbiAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXdMb2FkQmFsYW5jZXJXaXRoU2VlZFJvdXRlcihcbiAgICAgICdzZXJ2ZXItMCcsIFsnc2VydmVyLTEnLCAnc2VydmVyLTAxJywgJ3NlcnZlci0yJywgJ3NlcnZlci0wMiddLCAvLyBzZWVkIHJvdXRlciBhZGRyZXNzIHJlc29sdmVzIHRvIDQgZGlmZmVyZW50IGFkZHJlc3Nlc1xuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItNCddLFxuICAgICAgWydzZXJ2ZXItNScsICdzZXJ2ZXItNiddLFxuICAgICAgaW50KDApLCAvLyBleHBpcmVkIHJvdXRpbmcgdGFibGVcbiAgICAgIHtcbiAgICAgICAgJ3NlcnZlci0xJzogbnVsbCwgLy8gcmV0dXJucyBubyByb3V0aW5nIHRhYmxlXG4gICAgICAgICdzZXJ2ZXItMDEnOiBudWxsLCAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgICAgJ3NlcnZlci0yJzogbnVsbCwgLy8gcmV0dXJucyBubyByb3V0aW5nIHRhYmxlXG4gICAgICAgICdzZXJ2ZXItMDInOiB1cGRhdGVkUm91dGluZ1RhYmxlXG4gICAgICB9XG4gICAgKTtcbiAgICBjb25zdCB1c2VkUm91dGVyQXJyYXlzID0gW107XG4gICAgc2V0dXBMb2FkQmFsYW5jZXJUb1JlbWVtYmVyUm91dGVycyhsb2FkQmFsYW5jZXIsIHVzZWRSb3V0ZXJBcnJheXMpO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFJFQUQpLnRoZW4oY29ubmVjdGlvbjEgPT4ge1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24xLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1DJyk7XG5cbiAgICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihXUklURSkudGhlbihjb25uZWN0aW9uMiA9PiB7XG4gICAgICAgIGV4cGVjdChjb25uZWN0aW9uMi5hZGRyZXNzKS50b0VxdWFsKCdzZXJ2ZXItRScpO1xuXG4gICAgICAgIC8vIHR3byBzZXRzIG9mIHJvdXRlcnMgcHJvYmVkOlxuICAgICAgICAvLyAxKSBleGlzdGluZyByb3V0ZXJzICdzZXJ2ZXItMScgJiAnc2VydmVyLTInXG4gICAgICAgIC8vIDIpIHJlc29sdmVkIHJvdXRlcnMgJ3NlcnZlci0wMScgJiAnc2VydmVyLTAyJ1xuICAgICAgICBleHBlY3QodXNlZFJvdXRlckFycmF5cy5sZW5ndGgpLnRvRXF1YWwoMik7XG4gICAgICAgIGV4cGVjdCh1c2VkUm91dGVyQXJyYXlzWzBdKS50b0VxdWFsKFsnc2VydmVyLTEnLCAnc2VydmVyLTInXSk7XG4gICAgICAgIGV4cGVjdCh1c2VkUm91dGVyQXJyYXlzWzFdKS50b0VxdWFsKFsnc2VydmVyLTAxJywgJ3NlcnZlci0wMiddKTtcblxuICAgICAgICBleHBlY3RSb3V0aW5nVGFibGUobG9hZEJhbGFuY2VyLFxuICAgICAgICAgIFsnc2VydmVyLUEnLCAnc2VydmVyLUInXSxcbiAgICAgICAgICBbJ3NlcnZlci1DJywgJ3NlcnZlci1EJ10sXG4gICAgICAgICAgWydzZXJ2ZXItRScsICdzZXJ2ZXItRiddXG4gICAgICAgICk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgndGhyb3dzIHNlc3Npb24gZXhwaXJlZCB3aGVuIHJlZnJlc2hlZCByb3V0aW5nIHRhYmxlIGhhcyBubyByZWFkZXJzJywgZG9uZSA9PiB7XG4gICAgY29uc3QgcG9vbCA9IG5ld1Bvb2woKTtcbiAgICBjb25zdCB1cGRhdGVkUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgW10sIC8vIG5vIHJlYWRlcnNcbiAgICAgIFsnc2VydmVyLUMnLCAnc2VydmVyLUQnXVxuICAgICk7XG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyKFxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItNCddLFxuICAgICAgWydzZXJ2ZXItNScsICdzZXJ2ZXItNiddLFxuICAgICAgcG9vbCxcbiAgICAgIGludCgwKSwgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgICB7XG4gICAgICAgICdzZXJ2ZXItMSc6IHVwZGF0ZWRSb3V0aW5nVGFibGUsXG4gICAgICB9XG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihSRUFEKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9FcXVhbChTRVNTSU9OX0VYUElSRUQpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgndGhyb3dzIHNlc3Npb24gZXhwaXJlZCB3aGVuIHJlZnJlc2hlZCByb3V0aW5nIHRhYmxlIGhhcyBubyB3cml0ZXJzJywgZG9uZSA9PiB7XG4gICAgY29uc3QgcG9vbCA9IG5ld1Bvb2woKTtcbiAgICBjb25zdCB1cGRhdGVkUm91dGluZ1RhYmxlID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQScsICdzZXJ2ZXItQiddLFxuICAgICAgWydzZXJ2ZXItQycsICdzZXJ2ZXItRCddLFxuICAgICAgW10gLy8gbm8gd3JpdGVyc1xuICAgICk7XG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyKFxuICAgICAgWydzZXJ2ZXItMScsICdzZXJ2ZXItMiddLFxuICAgICAgWydzZXJ2ZXItMycsICdzZXJ2ZXItNCddLFxuICAgICAgWydzZXJ2ZXItNScsICdzZXJ2ZXItNiddLFxuICAgICAgcG9vbCxcbiAgICAgIGludCgwKSwgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgICB7XG4gICAgICAgICdzZXJ2ZXItMSc6IHVwZGF0ZWRSb3V0aW5nVGFibGUsXG4gICAgICB9XG4gICAgKTtcblxuICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihXUklURSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvRXF1YWwoU0VTU0lPTl9FWFBJUkVEKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB1c2UgcmVzb2x2ZWQgc2VlZCByb3V0ZXIgYWZ0ZXIgYWNjZXB0aW5nIHRhYmxlIHdpdGggbm8gd3JpdGVycycsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHJvdXRpbmdUYWJsZTEgPSBuZXdSb3V0aW5nVGFibGUoXG4gICAgICBbJ3NlcnZlci1BJywgJ3NlcnZlci1CJ10sXG4gICAgICBbJ3NlcnZlci1DJywgJ3NlcnZlci1EJ10sXG4gICAgICBbXSAvLyBubyB3cml0ZXJzXG4gICAgKTtcbiAgICBjb25zdCByb3V0aW5nVGFibGUyID0gbmV3Um91dGluZ1RhYmxlKFxuICAgICAgWydzZXJ2ZXItQUEnLCAnc2VydmVyLUJCJ10sXG4gICAgICBbJ3NlcnZlci1DQycsICdzZXJ2ZXItREQnXSxcbiAgICAgIFsnc2VydmVyLUVFJ11cbiAgICApO1xuXG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3TG9hZEJhbGFuY2VyV2l0aFNlZWRSb3V0ZXIoXG4gICAgICAnc2VydmVyLTAnLCBbJ3NlcnZlci0wMicsICdzZXJ2ZXItMDEnXSwgLy8gc2VlZCByb3V0ZXIgYWRkcmVzcyByZXNvbHZlcyB0byAyIGRpZmZlcmVudCBhZGRyZXNzZXNcbiAgICAgIFsnc2VydmVyLTEnXSxcbiAgICAgIFsnc2VydmVyLTInLCAnc2VydmVyLTMnXSxcbiAgICAgIFsnc2VydmVyLTQnLCAnc2VydmVyLTUnXSxcbiAgICAgIGludCgwKSwgLy8gZXhwaXJlZCByb3V0aW5nIHRhYmxlXG4gICAgICB7XG4gICAgICAgICdzZXJ2ZXItMSc6IHJvdXRpbmdUYWJsZTEsXG4gICAgICAgICdzZXJ2ZXItQSc6IHJvdXRpbmdUYWJsZTEsXG4gICAgICAgICdzZXJ2ZXItQic6IHJvdXRpbmdUYWJsZTEsXG4gICAgICAgICdzZXJ2ZXItMDEnOiBudWxsLCAvLyByZXR1cm5zIG5vIHJvdXRpbmcgdGFibGVcbiAgICAgICAgJ3NlcnZlci0wMic6IHJvdXRpbmdUYWJsZTJcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFJFQUQpLnRoZW4oY29ubmVjdGlvbjEgPT4ge1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24xLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1DJyk7XG5cbiAgICAgIGxvYWRCYWxhbmNlci5hY3F1aXJlQ29ubmVjdGlvbihSRUFEKS50aGVuKGNvbm5lY3Rpb24yID0+IHtcbiAgICAgICAgZXhwZWN0KGNvbm5lY3Rpb24yLmFkZHJlc3MpLnRvRXF1YWwoJ3NlcnZlci1EJyk7XG5cbiAgICAgICAgZXhwZWN0Um91dGluZ1RhYmxlKGxvYWRCYWxhbmNlcixcbiAgICAgICAgICBbJ3NlcnZlci1BJywgJ3NlcnZlci1CJ10sXG4gICAgICAgICAgWydzZXJ2ZXItQycsICdzZXJ2ZXItRCddLFxuICAgICAgICAgIFtdXG4gICAgICAgICk7XG5cbiAgICAgICAgbG9hZEJhbGFuY2VyLmFjcXVpcmVDb25uZWN0aW9uKFdSSVRFKS50aGVuKGNvbm5lY3Rpb24zID0+IHtcbiAgICAgICAgICBleHBlY3QoY29ubmVjdGlvbjMuYWRkcmVzcykudG9FcXVhbCgnc2VydmVyLUVFJyk7XG5cbiAgICAgICAgICBleHBlY3RSb3V0aW5nVGFibGUobG9hZEJhbGFuY2VyLFxuICAgICAgICAgICAgWydzZXJ2ZXItQUEnLCAnc2VydmVyLUJCJ10sXG4gICAgICAgICAgICBbJ3NlcnZlci1DQycsICdzZXJ2ZXItREQnXSxcbiAgICAgICAgICAgIFsnc2VydmVyLUVFJ11cbiAgICAgICAgICApO1xuXG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxufSk7XG5cbmZ1bmN0aW9uIG5ld0RpcmVjdENvbm5lY3Rpb25Qcm92aWRlcihhZGRyZXNzLCBwb29sKSB7XG4gIHJldHVybiBuZXcgRGlyZWN0Q29ubmVjdGlvblByb3ZpZGVyKGFkZHJlc3MsIHBvb2wsIE5PX09QX0RSSVZFUl9DQUxMQkFDSyk7XG59XG5cbmZ1bmN0aW9uIG5ld0xvYWRCYWxhbmNlcihyb3V0ZXJzLCByZWFkZXJzLCB3cml0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHBvb2wgPSBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25UaW1lID0gSW50ZWdlci5NQVhfVkFMVUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyVG9Sb3V0aW5nVGFibGUgPSB7fSkge1xuICBjb25zdCBzZWVkUm91dGVyID0gJ3NlcnZlci1ub24tZXhpc3Rpbmctc2VlZC1yb3V0ZXInO1xuICByZXR1cm4gbmV3TG9hZEJhbGFuY2VyV2l0aFNlZWRSb3V0ZXIoc2VlZFJvdXRlciwgW3NlZWRSb3V0ZXJdLCByb3V0ZXJzLCByZWFkZXJzLCB3cml0ZXJzLCBleHBpcmF0aW9uVGltZSxcbiAgICByb3V0ZXJUb1JvdXRpbmdUYWJsZSwgcG9vbCk7XG59XG5cbmZ1bmN0aW9uIG5ld0xvYWRCYWxhbmNlcldpdGhTZWVkUm91dGVyKHNlZWRSb3V0ZXIsIHNlZWRSb3V0ZXJSZXNvbHZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlcnMsIHJlYWRlcnMsIHdyaXRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uVGltZSA9IEludGVnZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyVG9Sb3V0aW5nVGFibGUgPSB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25Qb29sID0gbnVsbCkge1xuICBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXcgTG9hZEJhbGFuY2VyKHNlZWRSb3V0ZXIsIHt9LCBjb25uZWN0aW9uUG9vbCB8fCBuZXdQb29sKCksIE5PX09QX0RSSVZFUl9DQUxMQkFDSyk7XG4gIGxvYWRCYWxhbmNlci5fcm91dGluZ1RhYmxlID0gbmV3IFJvdXRpbmdUYWJsZShcbiAgICBuZXcgUm91bmRSb2JpbkFycmF5KHJvdXRlcnMpLFxuICAgIG5ldyBSb3VuZFJvYmluQXJyYXkocmVhZGVycyksXG4gICAgbmV3IFJvdW5kUm9iaW5BcnJheSh3cml0ZXJzKSxcbiAgICBleHBpcmF0aW9uVGltZVxuICApO1xuICBsb2FkQmFsYW5jZXIuX3JlZGlzY292ZXJ5ID0gbmV3IEZha2VSZWRpc2NvdmVyeShyb3V0ZXJUb1JvdXRpbmdUYWJsZSk7XG4gIGxvYWRCYWxhbmNlci5faG9zdE5hbWVSZXNvbHZlciA9IG5ldyBGYWtlRG5zUmVzb2x2ZXIoc2VlZFJvdXRlclJlc29sdmVkKTtcbiAgcmV0dXJuIGxvYWRCYWxhbmNlcjtcbn1cblxuZnVuY3Rpb24gbmV3Um91dGluZ1RhYmxlKHJvdXRlcnMsIHJlYWRlcnMsIHdyaXRlcnMsIGV4cGlyYXRpb25UaW1lID0gSW50ZWdlci5NQVhfVkFMVUUpIHtcbiAgcmV0dXJuIG5ldyBSb3V0aW5nVGFibGUoXG4gICAgbmV3IFJvdW5kUm9iaW5BcnJheShyb3V0ZXJzKSxcbiAgICBuZXcgUm91bmRSb2JpbkFycmF5KHJlYWRlcnMpLFxuICAgIG5ldyBSb3VuZFJvYmluQXJyYXkod3JpdGVycyksXG4gICAgZXhwaXJhdGlvblRpbWVcbiAgKTtcbn1cblxuZnVuY3Rpb24gc2V0dXBMb2FkQmFsYW5jZXJUb1JlbWVtYmVyUm91dGVycyhsb2FkQmFsYW5jZXIsIHJvdXRlcnNBcnJheSkge1xuICBjb25zdCBvcmlnaW5hbEZldGNoID0gbG9hZEJhbGFuY2VyLl9mZXRjaFJvdXRpbmdUYWJsZS5iaW5kKGxvYWRCYWxhbmNlcik7XG4gIGNvbnN0IHJlbWVtYmVyaW5nRmV0Y2ggPSAocm91dGVyQWRkcmVzc2VzLCByb3V0aW5nVGFibGUpID0+IHtcbiAgICByb3V0ZXJzQXJyYXkucHVzaChyb3V0ZXJBZGRyZXNzZXMpO1xuICAgIHJldHVybiBvcmlnaW5hbEZldGNoKHJvdXRlckFkZHJlc3Nlcywgcm91dGluZ1RhYmxlKTtcbiAgfTtcbiAgbG9hZEJhbGFuY2VyLl9mZXRjaFJvdXRpbmdUYWJsZSA9IHJlbWVtYmVyaW5nRmV0Y2g7XG59XG5cbmZ1bmN0aW9uIG5ld1Bvb2woKSB7XG4gIHJldHVybiBuZXcgUG9vbChGYWtlQ29ubmVjdGlvbi5jcmVhdGUpO1xufVxuXG5mdW5jdGlvbiBleHBlY3RSb3V0aW5nVGFibGUobG9hZEJhbGFuY2VyLCByb3V0ZXJzLCByZWFkZXJzLCB3cml0ZXJzKSB7XG4gIGV4cGVjdChsb2FkQmFsYW5jZXIuX3JvdXRpbmdUYWJsZS5yb3V0ZXJzLnRvQXJyYXkoKSkudG9FcXVhbChyb3V0ZXJzKTtcbiAgZXhwZWN0KGxvYWRCYWxhbmNlci5fcm91dGluZ1RhYmxlLnJlYWRlcnMudG9BcnJheSgpKS50b0VxdWFsKHJlYWRlcnMpO1xuICBleHBlY3QobG9hZEJhbGFuY2VyLl9yb3V0aW5nVGFibGUud3JpdGVycy50b0FycmF5KCkpLnRvRXF1YWwod3JpdGVycyk7XG59XG5cbmZ1bmN0aW9uIGV4cGVjdFBvb2xUb0NvbnRhaW4ocG9vbCwgYWRkcmVzc2VzKSB7XG4gIGFkZHJlc3Nlcy5mb3JFYWNoKGFkZHJlc3MgPT4ge1xuICAgIGV4cGVjdChwb29sLmhhcyhhZGRyZXNzKSkudG9CZVRydXRoeSgpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZXhwZWN0UG9vbFRvTm90Q29udGFpbihwb29sLCBhZGRyZXNzZXMpIHtcbiAgYWRkcmVzc2VzLmZvckVhY2goYWRkcmVzcyA9PiB7XG4gICAgZXhwZWN0KHBvb2wuaGFzKGFkZHJlc3MpKS50b0JlRmFsc3koKTtcbiAgfSk7XG59XG5cbmNsYXNzIEZha2VDb25uZWN0aW9uIHtcblxuICBjb25zdHJ1Y3RvcihhZGRyZXNzLCByZWxlYXNlKSB7XG4gICAgdGhpcy5hZGRyZXNzID0gYWRkcmVzcztcbiAgICB0aGlzLnJlbGVhc2UgPSByZWxlYXNlO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZShhZGRyZXNzLCByZWxlYXNlKSB7XG4gICAgcmV0dXJuIG5ldyBGYWtlQ29ubmVjdGlvbihhZGRyZXNzLCByZWxlYXNlKTtcbiAgfVxuXG4gIGluaXRpYWxpemF0aW9uQ29tcGxldGVkKCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcyk7XG4gIH1cbn1cblxuY2xhc3MgRmFrZVJlZGlzY292ZXJ5IHtcblxuICBjb25zdHJ1Y3Rvcihyb3V0ZXJUb1JvdXRpbmdUYWJsZSkge1xuICAgIHRoaXMuX3JvdXRlclRvUm91dGluZ1RhYmxlID0gcm91dGVyVG9Sb3V0aW5nVGFibGU7XG4gIH1cblxuICBsb29rdXBSb3V0aW5nVGFibGVPblJvdXRlcihpZ25vcmVkLCByb3V0ZXIpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91dGVyVG9Sb3V0aW5nVGFibGVbcm91dGVyXTtcbiAgfVxufVxuXG5jbGFzcyBGYWtlRG5zUmVzb2x2ZXIge1xuXG4gIGNvbnN0cnVjdG9yKGFkZHJlc3Nlcykge1xuICAgIHRoaXMuX2FkZHJlc3NlcyA9IGFkZHJlc3NlcztcbiAgfVxuXG4gIHJlc29sdmUoc2VlZFJvdXRlcikge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYWRkcmVzc2VzID8gdGhpcy5fYWRkcmVzc2VzIDogW3NlZWRSb3V0ZXJdKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCAqIGFzIER1bW15Q2hhbm5lbCBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZXJuYWwvY2gtZHVtbXknO1xuaW1wb3J0IHtjb25uZWN0LCBDb25uZWN0aW9ufSBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZXJuYWwvY29ubmVjdG9yJztcbmltcG9ydCB7UGFja2VyfSBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZXJuYWwvcGFja3N0cmVhbSc7XG5pbXBvcnQge0NodW5rZXJ9IGZyb20gJy4uLy4uL3NyYy92MS9pbnRlcm5hbC9jaHVua2luZyc7XG5pbXBvcnQge2FsbG9jfSBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZXJuYWwvYnVmJztcbmltcG9ydCB7TmVvNGpFcnJvcn0gZnJvbSAnLi4vLi4vc3JjL3YxL2Vycm9yJztcbmltcG9ydCBzaGFyZWROZW80aiBmcm9tICcuLi9pbnRlcm5hbC9zaGFyZWQtbmVvNGonO1xuaW1wb3J0IHtTZXJ2ZXJWZXJzaW9ufSBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZXJuYWwvc2VydmVyLXZlcnNpb24nO1xuXG5kZXNjcmliZSgnY29ubmVjdG9yJywgKCkgPT4ge1xuXG4gIGl0KCdzaG91bGQgcmVhZC93cml0ZSBiYXNpYyBtZXNzYWdlcycsIGRvbmUgPT4ge1xuICAgIC8vIEdpdmVuXG4gICAgY29uc3QgY29ubiA9IGNvbm5lY3QoXCJib2x0Oi8vbG9jYWxob3N0XCIpO1xuXG4gICAgLy8gV2hlblxuICAgIGNvbm4uaW5pdGlhbGl6ZShcIm15ZHJpdmVyLzAuMC4wXCIsIGJhc2ljQXV0aFRva2VuKCksIHtcbiAgICAgIG9uQ29tcGxldGVkOiBtc2cgPT4ge1xuICAgICAgICBleHBlY3QobXNnKS5ub3QudG9CZU51bGwoKTtcbiAgICAgICAgY29ubi5jbG9zZSgpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LFxuICAgICAgb25FcnJvcjogY29uc29sZS5sb2dcbiAgICB9KTtcbiAgICBjb25uLnN5bmMoKTtcblxuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHJpZXZlIHN0cmVhbScsIGRvbmUgPT4ge1xuICAgIC8vIEdpdmVuXG4gICAgY29uc3QgY29ubiA9IGNvbm5lY3QoXCJib2x0Oi8vbG9jYWxob3N0XCIpO1xuXG4gICAgLy8gV2hlblxuICAgIGNvbnN0IHJlY29yZHMgPSBbXTtcbiAgICBjb25uLmluaXRpYWxpemUoXCJteWRyaXZlci8wLjAuMFwiLCBiYXNpY0F1dGhUb2tlbigpKTtcbiAgICBjb25uLnJ1bihcIlJFVFVSTiAxLjBcIiwge30pO1xuICAgIGNvbm4ucHVsbEFsbCh7XG4gICAgICBvbk5leHQ6IHJlY29yZCA9PiB7XG4gICAgICAgIHJlY29yZHMucHVzaChyZWNvcmQpO1xuICAgICAgfSxcbiAgICAgIG9uQ29tcGxldGVkOiAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZWNvcmRzWzBdWzBdKS50b0JlKDEpO1xuICAgICAgICBjb25uLmNsb3NlKCk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25uLnN5bmMoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB1c2UgRHVtbXlDaGFubmVsIHRvIHJlYWQgd2hhdCBnZXRzIHdyaXR0ZW4nLCBkb25lID0+IHtcbiAgICAvLyBHaXZlblxuICAgIGNvbnN0IG9ic2VydmVyID0gRHVtbXlDaGFubmVsLm9ic2VydmVyO1xuICAgIGNvbnN0IGNvbm4gPSBjb25uZWN0KFwiYm9sdDovL2xvY2FsaG9zdFwiLCB7Y2hhbm5lbDogRHVtbXlDaGFubmVsLmNoYW5uZWx9KTtcblxuICAgIC8vIFdoZW5cbiAgICBjb25uLmluaXRpYWxpemUoXCJteWRyaXZlci8wLjAuMFwiLCBiYXNpY0F1dGhUb2tlbigpKTtcbiAgICBjb25uLnJ1bihcIlJFVFVSTiAxXCIsIHt9KTtcbiAgICBjb25uLnN5bmMoKTtcbiAgICBleHBlY3Qob2JzZXJ2ZXIuaW5zdGFuY2UudG9IZXgoKSkudG9CZSgnNjAgNjAgYjAgMTcgMDAgMDAgMDAgMDEgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgNDQgYjIgMDEgOGUgNmQgNzkgNjQgNzIgNjkgNzYgNjUgNzIgMmYgMzAgMmUgMzAgMmUgMzAgYTMgODYgNzMgNjMgNjggNjUgNmQgNjUgODUgNjIgNjEgNzMgNjkgNjMgODkgNzAgNzIgNjkgNmUgNjMgNjkgNzAgNjEgNmMgODUgNmUgNjUgNmYgMzQgNmEgOGIgNjMgNzIgNjUgNjQgNjUgNmUgNzQgNjkgNjEgNmMgNzMgODggNzAgNjEgNzMgNzMgNzcgNmYgNzIgNjQgMDAgMDAgMDAgMGMgYjIgMTAgODggNTIgNDUgNTQgNTUgNTIgNGUgMjAgMzEgYTAgMDAgMDAgJyk7XG4gICAgZG9uZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHByb3ZpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIGNvbm5lY3RpbmcgdG8gaHR0cC1wb3J0JywgZG9uZSA9PiB7XG4gICAgLy8gR2l2ZW5cbiAgICBjb25zdCBjb25uID0gY29ubmVjdChcImJvbHQ6Ly9sb2NhbGhvc3Q6NzQ3NFwiLCB7ZW5jcnlwdGVkOiBmYWxzZX0pO1xuXG4gICAgLy8gV2hlblxuICAgIGNvbm4uaW5pdGlhbGl6ZShcIm15ZHJpdmVyLzAuMC4wXCIsIGJhc2ljQXV0aFRva2VuKCksIHtcbiAgICAgIG9uQ29tcGxldGVkOiBtc2cgPT4ge1xuICAgICAgfSxcbiAgICAgIG9uRXJyb3I6IGVyciA9PiB7XG4gICAgICAgIC8vb25seSBub2RlIGdldHMgdGhlIHByZXR0eSBlcnJvciBtZXNzYWdlXG4gICAgICAgIGlmIChyZXF1aXJlKCcuLi8uLi9saWIvdjEvaW50ZXJuYWwvY2gtbm9kZS5qcycpLmF2YWlsYWJsZSkge1xuICAgICAgICAgIGV4cGVjdChlcnIubWVzc2FnZSkudG9CZShcIlNlcnZlciByZXNwb25kZWQgSFRUUC4gTWFrZSBzdXJlIHlvdSBhcmUgbm90IHRyeWluZyB0byBjb25uZWN0IHRvIHRoZSBodHRwIGVuZHBvaW50IFwiICtcbiAgICAgICAgICAgIFwiKEhUVFAgZGVmYXVsdHMgdG8gcG9ydCA3NDc0IHdoZXJlYXMgQk9MVCBkZWZhdWx0cyB0byBwb3J0IDc2ODcpXCIpO1xuICAgICAgICB9XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25uLnN5bmMoKTtcblxuICB9KTtcblxuICBpdCgnc2hvdWxkIGNvbnZlcnQgZmFpbHVyZSBtZXNzYWdlcyB0byBlcnJvcnMnLCBkb25lID0+IHtcbiAgICBjb25zdCBjaGFubmVsID0gbmV3IER1bW15Q2hhbm5lbC5jaGFubmVsO1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihjaGFubmVsLCAnYm9sdDovL2xvY2FsaG9zdCcpO1xuXG4gICAgY29uc3QgZXJyb3JDb2RlID0gJ05lby5DbGllbnRFcnJvci5TY2hlbWEuQ29uc3RyYWludFZhbGlkYXRpb25GYWlsZWQnO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9ICdOb2RlIDAgYWxyZWFkeSBleGlzdHMgd2l0aCBsYWJlbCBVc2VyIGFuZCBwcm9wZXJ0eSBcImVtYWlsXCI9W2pvaG5AZG9lLmNvbV0nO1xuXG4gICAgY29ubmVjdGlvbi5fcXVldWVPYnNlcnZlcih7XG4gICAgICBvbkVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgIGV4cGVjdE5lbzRqRXJyb3IoZXJyb3IsIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY2hhbm5lbC5vbm1lc3NhZ2UocGFja2VkSGFuZHNoYWtlTWVzc2FnZSgpKTtcbiAgICBjaGFubmVsLm9ubWVzc2FnZShwYWNrZWRGYWlsdXJlTWVzc2FnZShlcnJvckNvZGUsIGVycm9yTWVzc2FnZSkpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdGlmeSB3aGVuIGNvbm5lY3Rpb24gaW5pdGlhbGl6YXRpb24gY29tcGxldGVzJywgZG9uZSA9PiB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3QoJ2JvbHQ6Ly9sb2NhbGhvc3QnKTtcblxuICAgIGNvbm5lY3Rpb24uaW5pdGlhbGl6YXRpb25Db21wbGV0ZWQoKS50aGVuKGluaXRpYWxpemVkQ29ubmVjdGlvbiA9PiB7XG4gICAgICBleHBlY3QoaW5pdGlhbGl6ZWRDb25uZWN0aW9uKS50b0JlKGNvbm5lY3Rpb24pO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuXG4gICAgY29ubmVjdGlvbi5pbml0aWFsaXplKCdteWRyaXZlci8wLjAuMCcsIGJhc2ljQXV0aFRva2VuKCkpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdGlmeSB3aGVuIGNvbm5lY3Rpb24gaW5pdGlhbGl6YXRpb24gZmFpbHMnLCBkb25lID0+IHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdCgnYm9sdDovL2xvY2FsaG9zdDo3NDc0Jyk7IC8vIHdyb25nIHBvcnRcblxuICAgIGNvbm5lY3Rpb24uaW5pdGlhbGl6YXRpb25Db21wbGV0ZWQoKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3QoZXJyb3IpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG5cbiAgICBjb25uZWN0aW9uLmluaXRpYWxpemUoJ215ZHJpdmVyLzAuMC4wJywgYmFzaWNBdXRoVG9rZW4oKSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90aWZ5IHByb3ZpZGVkIG9ic2VydmVyIHdoZW4gY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbiBjb21wbGV0ZXMnLCBkb25lID0+IHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdCgnYm9sdDovL2xvY2FsaG9zdCcpO1xuXG4gICAgY29ubmVjdGlvbi5pbml0aWFsaXplKCdteWRyaXZlci8wLjAuMCcsIGJhc2ljQXV0aFRva2VuKCksIHtcbiAgICAgIG9uQ29tcGxldGVkOiBtZXRhRGF0YSA9PiB7XG4gICAgICAgIGV4cGVjdChtZXRhRGF0YSkudG9CZURlZmluZWQoKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3RpZnkgcHJvdmlkZWQgb2JzZXJ2ZXIgd2hlbiBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uIGZhaWxzJywgZG9uZSA9PiB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3QoJ2JvbHQ6Ly9sb2NhbGhvc3Q6NzQ3NCcpOyAvLyB3cm9uZyBwb3J0XG5cbiAgICBjb25uZWN0aW9uLmluaXRpYWxpemUoJ215ZHJpdmVyLzAuMC4wJywgYmFzaWNBdXRoVG9rZW4oKSwge1xuICAgICAgb25FcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICBleHBlY3QoZXJyb3IpLnRvQmVEZWZpbmVkKCk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGF2ZSBzZXJ2ZXIgdmVyc2lvbiBhZnRlciBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlZCcsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0KCdib2x0Oi8vbG9jYWxob3N0Jyk7XG5cbiAgICBjb25uZWN0aW9uLmluaXRpYWxpemF0aW9uQ29tcGxldGVkKCkudGhlbihpbml0aWFsaXplZENvbm5lY3Rpb24gPT4ge1xuICAgICAgY29uc3Qgc2VydmVyVmVyc2lvbiA9IFNlcnZlclZlcnNpb24uZnJvbVN0cmluZyhpbml0aWFsaXplZENvbm5lY3Rpb24uc2VydmVyLnZlcnNpb24pO1xuICAgICAgZXhwZWN0KHNlcnZlclZlcnNpb24pLnRvQmVEZWZpbmVkKCk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG5cbiAgICBjb25uZWN0aW9uLmluaXRpYWxpemUoJ215ZHJpdmVyLzAuMC4wJywgYmFzaWNBdXRoVG9rZW4oKSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHBhY2tlZEhhbmRzaGFrZU1lc3NhZ2UoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYWxsb2MoNCk7XG4gICAgcmVzdWx0LnB1dEludDMyKDAsIDEpO1xuICAgIHJlc3VsdC5yZXNldCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBwYWNrZWRGYWlsdXJlTWVzc2FnZShjb2RlLCBtZXNzYWdlKSB7XG4gICAgY29uc3QgY2hhbm5lbCA9IG5ldyBEdW1teUNoYW5uZWwuY2hhbm5lbDtcbiAgICBjb25zdCBjaHVua2VyID0gbmV3IENodW5rZXIoY2hhbm5lbCk7XG4gICAgY29uc3QgcGFja2VyID0gbmV3IFBhY2tlcihjaHVua2VyKTtcbiAgICBwYWNrZXIucGFja1N0cnVjdCgweDdGLCBbcGFja2VyLnBhY2thYmxlKHtjb2RlOiBjb2RlLCBtZXNzYWdlOiBtZXNzYWdlfSldKTtcbiAgICBjaHVua2VyLm1lc3NhZ2VCb3VuZGFyeSgpO1xuICAgIGNodW5rZXIuZmx1c2goKTtcbiAgICBjb25zdCBkYXRhID0gY2hhbm5lbC50b0J1ZmZlcigpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGFsbG9jKGRhdGEubGVuZ3RoKTtcbiAgICByZXN1bHQucHV0Qnl0ZXMoMCwgZGF0YSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cGVjdE5lbzRqRXJyb3IoZXJyb3IsIGV4cGVjdGVkQ29kZSwgZXhwZWN0ZWRNZXNzYWdlKSB7XG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pLnRvVGhyb3cobmV3IE5lbzRqRXJyb3IoZXhwZWN0ZWRNZXNzYWdlLCBleHBlY3RlZENvZGUpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJhc2ljQXV0aFRva2VuKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzY2hlbWU6ICdiYXNpYycsXG4gICAgICBwcmluY2lwYWw6IHNoYXJlZE5lbzRqLnVzZXJuYW1lLFxuICAgICAgY3JlZGVudGlhbHM6IHNoYXJlZE5lbzRqLnBhc3N3b3JkXG4gICAgfTtcbiAgfVxuXG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgbGlrZSBhIG1vY2sgb2Yge0BsaW5rIENvbm5lY3Rpb259IHRoYXQgdHJhY2tzIGludm9jYXRpb25zIGNvdW50LlxuICogSXQgdHJpZXMgdG8gbWFpbnRhaW4gc2FtZSBcImludGVyZmFjZVwiIGFzIHtAbGluayBDb25uZWN0aW9ufS5cbiAqIEl0IGNvdWxkIGJlIHJlcGxhY2VkIHdpdGggYSBwcm9wZXIgbW9jayBieSBhIGxpYnJhcnkgbGlrZSB0ZXN0ZG91YmxlLlxuICogQXQgdGhlIHRpbWUgb2Ygd3JpdGluZyBzdWNoIGxpYnJhcmllcyByZXF1aXJlIHtAbGluayBQcm94eX0gc3VwcG9ydCBidXQgYnJvd3NlciB0ZXN0cyBleGVjdXRlIGluXG4gKiBQaGFudG9tSlMgd2hpY2ggZG9lcyBub3Qgc3VwcG9ydCBwcm94aWVzLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGYWtlQ29ubmVjdGlvbiB7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5yZXNldEludm9rZWQgPSAwO1xuICAgIHRoaXMucmVzZXRBc3luY0ludm9rZWQgPSAwO1xuICAgIHRoaXMuc3luY0ludm9rZWQgPSAwO1xuICAgIHRoaXMucmVsZWFzZUludm9rZWQgPSAwO1xuICAgIHRoaXMuc2VlblN0YXRlbWVudHMgPSBbXTtcbiAgICB0aGlzLnNlZW5QYXJhbWV0ZXJzID0gW107XG4gICAgdGhpcy5zZXJ2ZXIgPSB7fTtcbiAgfVxuXG4gIHJ1bihzdGF0ZW1lbnQsIHBhcmFtZXRlcnMpIHtcbiAgICB0aGlzLnNlZW5TdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICB0aGlzLnNlZW5QYXJhbWV0ZXJzLnB1c2gocGFyYW1ldGVycyk7XG4gIH1cblxuICBkaXNjYXJkQWxsKCkge1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5yZXNldEludm9rZWQrKztcbiAgfVxuXG4gIHJlc2V0QXN5bmMoKSB7XG4gICAgdGhpcy5yZXNldEFzeW5jSW52b2tlZCsrO1xuICB9XG5cbiAgc3luYygpIHtcbiAgICB0aGlzLnN5bmNJbnZva2VkKys7XG4gIH1cblxuICBfcmVsZWFzZSgpIHtcbiAgICB0aGlzLnJlbGVhc2VJbnZva2VkKys7XG4gIH1cblxuICBpbml0aWFsaXphdGlvbkNvbXBsZXRlZCgpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMpO1xuICB9XG5cbiAgaXNSZWxlYXNlZE9uY2VPblNlc3Npb25DbG9zZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlbGVhc2VkT25TZXNzaW9uQ2xvc2VUaW1lcygxKTtcbiAgfVxuXG4gIGlzUmVsZWFzZWRPblNlc3Npb25DbG9zZVRpbWVzKHRpbWVzKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzZXRBc3luY0ludm9rZWQgPT09IHRpbWVzICYmXG4gICAgICB0aGlzLnJlc2V0SW52b2tlZCA9PT0gMCAmJlxuICAgICAgdGhpcy5zeW5jSW52b2tlZCA9PT0gdGltZXMgJiZcbiAgICAgIHRoaXMucmVsZWFzZUludm9rZWQgPT09IHRpbWVzO1xuICB9XG5cbiAgaXNOZXZlclJlbGVhc2VkKCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVsZWFzZWRUaW1lcygwKTtcbiAgfVxuXG4gIGlzUmVsZWFzZWRPbmNlKCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVsZWFzZWRUaW1lcygxKTtcbiAgfVxuXG4gIGlzUmVsZWFzZWRUaW1lcyh0aW1lcykge1xuICAgIHJldHVybiB0aGlzLnJlc2V0QXN5bmNJbnZva2VkID09PSAwICYmXG4gICAgICB0aGlzLnJlc2V0SW52b2tlZCA9PT0gdGltZXMgJiZcbiAgICAgIHRoaXMuc3luY0ludm9rZWQgPT09IHRpbWVzICYmXG4gICAgICB0aGlzLnJlbGVhc2VJbnZva2VkID09PSB0aW1lcztcbiAgfVxuXG4gIHdpdGhTZXJ2ZXJWZXJzaW9uKHZlcnNpb24pIHtcbiAgICB0aGlzLnNlcnZlci52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0Ruc0hvc3ROYW1lUmVzb2x2ZXIsIER1bW15SG9zdE5hbWVSZXNvbHZlcn0gZnJvbSAnLi4vLi4vc3JjL3YxL2ludGVybmFsL2hvc3QtbmFtZS1yZXNvbHZlcnMnO1xuaW1wb3J0IGhhc0ZlYXR1cmUgZnJvbSAnLi4vLi4vc3JjL3YxL2ludGVybmFsL2ZlYXR1cmVzJztcbmltcG9ydCB7cGFyc2VIb3N0LCBwYXJzZVBvcnQsIHBhcnNlU2NoZW1lfSBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZXJuYWwvdXRpbCc7XG5cbmRlc2NyaWJlKCdEdW1teUhvc3ROYW1lUmVzb2x2ZXInLCAoKSA9PiB7XG5cbiAgaXQoJ3Nob3VsZCByZXNvbHZlIGdpdmVuIGFkZHJlc3MgdG8gaXRzZWxmJywgZG9uZSA9PiB7XG4gICAgY29uc3Qgc2VlZFJvdXRlciA9ICdsb2NhbGhvc3QnO1xuICAgIGNvbnN0IHJlc29sdmVyID0gbmV3IER1bW15SG9zdE5hbWVSZXNvbHZlcigpO1xuXG4gICAgcmVzb2x2ZXIucmVzb2x2ZShzZWVkUm91dGVyKS50aGVuKGFkZHJlc3NlcyA9PiB7XG4gICAgICBleHBlY3QoYWRkcmVzc2VzLmxlbmd0aCkudG9FcXVhbCgxKTtcbiAgICAgIGV4cGVjdChhZGRyZXNzZXNbMF0pLnRvRXF1YWwoc2VlZFJvdXRlcik7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVzb2x2ZSBnaXZlbiBhZGRyZXNzIHdpdGggcG9ydCB0byBpdHNlbGYnLCBkb25lID0+IHtcbiAgICBjb25zdCBzZWVkUm91dGVyID0gJ2xvY2FsaG9zdDo3NDc0JztcbiAgICBjb25zdCByZXNvbHZlciA9IG5ldyBEdW1teUhvc3ROYW1lUmVzb2x2ZXIoKTtcblxuICAgIHJlc29sdmVyLnJlc29sdmUoc2VlZFJvdXRlcikudGhlbihhZGRyZXNzZXMgPT4ge1xuICAgICAgZXhwZWN0KGFkZHJlc3Nlcy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgICBleHBlY3QoYWRkcmVzc2VzWzBdKS50b0VxdWFsKHNlZWRSb3V0ZXIpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxufSk7XG5cbmRlc2NyaWJlKCdEbnNIb3N0TmFtZVJlc29sdmVyJywgKCkgPT4ge1xuXG4gIGlmIChoYXNGZWF0dXJlKCdkbnNfbG9va3VwJykpIHtcblxuICAgIGxldCBvcmlnaW5hbFRpbWVvdXQ7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIC8vIGl0IHNvbWV0aW1lcyB0YWtlcyBjb3VwbGUgc2Vjb25kcyB0byBwZXJmb3JtIGRucyBsb29rdXAsIGluY3JlYXNlIHRoZSBhc3luYyB0ZXN0IHRpbWVvdXRcbiAgICAgIG9yaWdpbmFsVGltZW91dCA9IGphc21pbmUuREVGQVVMVF9USU1FT1VUX0lOVEVSVkFMO1xuICAgICAgamFzbWluZS5ERUZBVUxUX1RJTUVPVVRfSU5URVJWQUwgPSAyMDAwMDtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICBqYXNtaW5lLkRFRkFVTFRfVElNRU9VVF9JTlRFUlZBTCA9IG9yaWdpbmFsVGltZW91dDtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVzb2x2ZSBhZGRyZXNzJywgZG9uZSA9PiB7XG4gICAgICBjb25zdCBzZWVkUm91dGVyID0gJ25lbzRqLmNvbSc7XG4gICAgICBjb25zdCByZXNvbHZlciA9IG5ldyBEbnNIb3N0TmFtZVJlc29sdmVyKCk7XG5cbiAgICAgIHJlc29sdmVyLnJlc29sdmUoc2VlZFJvdXRlcikudGhlbihhZGRyZXNzZXMgPT4ge1xuICAgICAgICBleHBlY3QoYWRkcmVzc2VzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuXG4gICAgICAgIGFkZHJlc3Nlcy5mb3JFYWNoKGFkZHJlc3MgPT4ge1xuICAgICAgICAgIGV4cGVjdFRvQmVEZWZpbmVkKGFkZHJlc3MpO1xuICAgICAgICAgIGV4cGVjdChwYXJzZVNjaGVtZShhZGRyZXNzKSkudG9FcXVhbCgnJyk7XG4gICAgICAgICAgZXhwZWN0VG9CZURlZmluZWQocGFyc2VIb3N0KGFkZHJlc3MpKTtcbiAgICAgICAgICBleHBlY3QocGFyc2VQb3J0KGFkZHJlc3MpKS5ub3QudG9CZURlZmluZWQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlc29sdmUgYWRkcmVzcyB3aXRoIHBvcnQnLCBkb25lID0+IHtcbiAgICAgIGNvbnN0IHNlZWRSb3V0ZXIgPSAnbmVvNGouY29tOjc0NzQnO1xuICAgICAgY29uc3QgcmVzb2x2ZXIgPSBuZXcgRG5zSG9zdE5hbWVSZXNvbHZlcigpO1xuXG4gICAgICByZXNvbHZlci5yZXNvbHZlKHNlZWRSb3V0ZXIpLnRoZW4oYWRkcmVzc2VzID0+IHtcbiAgICAgICAgZXhwZWN0KGFkZHJlc3Nlcy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcblxuICAgICAgICBhZGRyZXNzZXMuZm9yRWFjaChhZGRyZXNzID0+IHtcbiAgICAgICAgICBleHBlY3RUb0JlRGVmaW5lZChhZGRyZXNzKTtcbiAgICAgICAgICBleHBlY3QocGFyc2VTY2hlbWUoYWRkcmVzcykpLnRvRXF1YWwoJycpO1xuICAgICAgICAgIGV4cGVjdFRvQmVEZWZpbmVkKHBhcnNlSG9zdChhZGRyZXNzKSk7XG4gICAgICAgICAgZXhwZWN0KHBhcnNlUG9ydChhZGRyZXNzKSkudG9FcXVhbCgnNzQ3NCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVzb2x2ZSB1bnJlc29sdmFibGUgYWRkcmVzcyB0byBpdHNlbGYnLCBkb25lID0+IHtcbiAgICAgIGNvbnN0IHNlZWRSb3V0ZXIgPSAnMTI3LjAuMC4xJzsgLy8gSVAgY2FuJ3QgYmUgcmVzb2x2ZWRcbiAgICAgIGNvbnN0IHJlc29sdmVyID0gbmV3IERuc0hvc3ROYW1lUmVzb2x2ZXIoKTtcblxuICAgICAgcmVzb2x2ZXIucmVzb2x2ZShzZWVkUm91dGVyKS50aGVuKGFkZHJlc3NlcyA9PiB7XG4gICAgICAgIGV4cGVjdChhZGRyZXNzZXMubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgICAgICBleHBlY3QoYWRkcmVzc2VzWzBdKS50b0VxdWFsKHNlZWRSb3V0ZXIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVzb2x2ZSB1bnJlc29sdmFibGUgYWRkcmVzcyB3aXRoIHBvcnQgdG8gaXRzZWxmJywgZG9uZSA9PiB7XG4gICAgICBjb25zdCBzZWVkUm91dGVyID0gJzEyNy4wLjAuMTo3NDc0JzsgLy8gSVAgY2FuJ3QgYmUgcmVzb2x2ZWRcbiAgICAgIGNvbnN0IHJlc29sdmVyID0gbmV3IERuc0hvc3ROYW1lUmVzb2x2ZXIoKTtcblxuICAgICAgcmVzb2x2ZXIucmVzb2x2ZShzZWVkUm91dGVyKS50aGVuKGFkZHJlc3NlcyA9PiB7XG4gICAgICAgIGV4cGVjdChhZGRyZXNzZXMubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgICAgICBleHBlY3QoYWRkcmVzc2VzWzBdKS50b0VxdWFsKHNlZWRSb3V0ZXIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICB9XG59KTtcblxuZnVuY3Rpb24gZXhwZWN0VG9CZURlZmluZWQodmFsdWUpIHtcbiAgZXhwZWN0KHZhbHVlKS50b0JlRGVmaW5lZCgpO1xuICBleHBlY3QodmFsdWUpLm5vdC50b0JlTnVsbCgpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4gXG52YXIgYWxsb2MgPSByZXF1aXJlKCcuLi8uLi9saWIvdjEvaW50ZXJuYWwvYnVmJykuYWxsb2MsXG4gICAgcGFja3N0cmVhbSA9IHJlcXVpcmUoXCIuLi8uLi9saWIvdjEvaW50ZXJuYWwvcGFja3N0cmVhbVwiKSxcbiAgICBJbnRlZ2VyID0gcmVxdWlyZShcIi4uLy4uL2xpYi92MS9pbnRlZ2VyXCIpLmRlZmF1bHQsXG4gICAgUGFja2VyID0gcGFja3N0cmVhbS5QYWNrZXIsXG4gICAgVW5wYWNrZXIgPSBwYWNrc3RyZWFtLlVucGFja2VyLFxuICAgIFN0cnVjdHVyZSA9IHBhY2tzdHJlYW0uU3RydWN0dXJlO1xuXG5kZXNjcmliZSgncGFja3N0cmVhbScsIGZ1bmN0aW9uKCkge1xuXG5cbiAgaXQoJ3Nob3VsZCBwYWNrIGludGVnZXJzJywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgLy8gdGVzdCBzbWFsbCBudW1iZXJzXG4gICAgZm9yKG4gPSAtOTk5OyBuIDw9IDk5OTsgbiArPSAxKSB7XG4gICAgICBpID0gSW50ZWdlci5mcm9tTnVtYmVyKG4pO1xuICAgICAgZXhwZWN0KCBwYWNrQW5kVW5wYWNrKCBpICkudG9TdHJpbmcoKSApLnRvQmUoIGkudG9TdHJpbmcoKSApO1xuICAgIH1cbiAgICAvLyBwb3NpdGl2ZSBudW1iZXJzXG4gICAgZm9yKG4gPSAxNjsgbiA8PSAxNiA7IG4gKz0gMSkge1xuICAgICAgaSA9IEludGVnZXIuZnJvbU51bWJlcihNYXRoLnBvdygyLCBuKSk7XG4gICAgICBleHBlY3QoIHBhY2tBbmRVbnBhY2soIGkgKS50b1N0cmluZygpICkudG9CZSggaS50b1N0cmluZygpICk7XG4gICAgfVxuICAgIC8vIG5lZ2F0aXZlIG51bWJlcnNcbiAgICBmb3IobiA9IDA7IG4gPD0gNjMgOyBuICs9IDEpIHtcbiAgICAgIGkgPSBJbnRlZ2VyLmZyb21OdW1iZXIoLU1hdGgucG93KDIsIG4pKTtcbiAgICAgIGV4cGVjdCggcGFja0FuZFVucGFjayggaSApLnRvU3RyaW5nKCkgKS50b0JlKCBpLnRvU3RyaW5nKCkgKTtcbiAgICB9XG4gIH0pO1xuICBpdCgnc2hvdWxkIHBhY2sgc3RyaW5ncycsIGZ1bmN0aW9uKCkge1xuICAgIGV4cGVjdCggcGFja0FuZFVucGFjayggXCJcIiApICkudG9CZSggXCJcIiApO1xuICAgIGV4cGVjdCggcGFja0FuZFVucGFjayggXCJhYmNkZWZnMTIzNTY3XCIgKSApLnRvQmUoIFwiYWJjZGVmZzEyMzU2N1wiICk7XG4gICAgdmFyIHN0ciA9IEFycmF5KDY1NTM2ICsgMSkuam9pbignYScpOyAvLyAyIF4gMTYgKyAxXG4gICAgZXhwZWN0KCBwYWNrQW5kVW5wYWNrKHN0ciwgc3RyLmxlbmd0aCArIDgpKS50b0JlKHN0cik7XG4gIH0pO1xuICBpdCgnc2hvdWxkIHBhY2sgc3RydWN0dXJlcycsIGZ1bmN0aW9uKCkge1xuICAgIGV4cGVjdCggcGFja0FuZFVucGFjayggbmV3IFN0cnVjdHVyZSgxLCBbXCJIZWxsbywgd29ybGQhISFcIl0gKSApLmZpZWxkc1swXSApICBcbiAgICAgLnRvQmUoIFwiSGVsbG8sIHdvcmxkISEhXCIgKTtcbiAgfSk7XG4gIGl0KCdzaG91bGQgcGFjayBsaXN0cycsIGZ1bmN0aW9uKCkge1xuICAgdmFyIGxpc3QgPSBbJ2EnLCAnYiddO1xuICAgdmFyIHJvdW5kdHJpcHBlZCA9IHBhY2tBbmRVbnBhY2soIGxpc3QgKTtcbiAgIGV4cGVjdCggcm91bmR0cmlwcGVkWzBdICkudG9CZSggbGlzdFswXSApO1xuICAgZXhwZWN0KCByb3VuZHRyaXBwZWRbMV0gKS50b0JlKCBsaXN0WzFdICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFjayBsb25nIGxpc3RzJywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxpc3RMZW5ndGggPSAyNTY7XG4gICAgdmFyIGxpc3QgPSBbXTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgaSsrKSB7XG4gICAgICBsaXN0LnB1c2gobnVsbClcbiAgICB9XG4gICAgdmFyIHJvdW5kdHJpcHBlZCA9IHBhY2tBbmRVbnBhY2soIGxpc3QsIDE0MDAgKTtcbiAgICBleHBlY3QoIHJvdW5kdHJpcHBlZFswXSApLnRvQmUoIGxpc3RbMF0gKTtcbiAgICBleHBlY3QoIHJvdW5kdHJpcHBlZFsxXSApLnRvQmUoIGxpc3RbMV0gKTtcbiAgfSk7XG59KTtcblxuZnVuY3Rpb24gcGFja0FuZFVucGFjayggdmFsLCBidWZmZXJTaXplICkge1xuICBidWZmZXJTaXplID0gYnVmZmVyU2l6ZSB8fCAxMjg7XG4gIHZhciBidWZmZXIgPSBhbGxvYyhidWZmZXJTaXplKTtcbiAgbmV3IFBhY2tlciggYnVmZmVyICkucGFja2FibGUoIHZhbCApKCk7XG4gIGJ1ZmZlci5yZXNldCgpO1xuICByZXR1cm4gbmV3IFVucGFja2VyKCkudW5wYWNrKCBidWZmZXIgKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG52YXIgUG9vbCA9IHJlcXVpcmUoJy4uLy4uL2xpYi92MS9pbnRlcm5hbC9wb29sJykuZGVmYXVsdDtcblxuZGVzY3JpYmUoJ1Bvb2wnLCBmdW5jdGlvbigpIHtcbiAgaXQoJ2FsbG9jYXRlcyBpZiBwb29sIGlzIGVtcHR5JywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgY291bnRlciA9IDA7XG4gICAgdmFyIGtleSA9IFwiYm9sdDovL2xvY2FsaG9zdDo3Njg3XCI7XG4gICAgdmFyIHBvb2wgPSBuZXcgUG9vbCggZnVuY3Rpb24gKHVybCwgcmVsZWFzZSkgeyByZXR1cm4gbmV3IFJlc291cmNlKHVybCwgY291bnRlcisrLCByZWxlYXNlKSB9ICk7XG5cbiAgICAvLyBXaGVuXG4gICAgdmFyIHIwID0gcG9vbC5hY3F1aXJlKGtleSk7XG4gICAgdmFyIHIxID0gcG9vbC5hY3F1aXJlKGtleSk7XG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KCByMC5pZCApLnRvQmUoIDAgKTtcbiAgICBleHBlY3QoIHIxLmlkICkudG9CZSggMSApO1xuICB9KTtcblxuICBpdCgncG9vbHMgaWYgcmVzb3VyY2VzIGFyZSByZXR1cm5lZCcsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuIGEgcG9vbCB0aGF0IGFsbG9jYXRlc1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICB2YXIga2V5ID0gXCJib2x0Oi8vbG9jYWxob3N0Ojc2ODdcIjtcbiAgICB2YXIgcG9vbCA9IG5ldyBQb29sKCBmdW5jdGlvbiAodXJsLCByZWxlYXNlKSB7IHJldHVybiBuZXcgUmVzb3VyY2UodXJsLCBjb3VudGVyKyssIHJlbGVhc2UpIH0gKTtcblxuICAgIC8vIFdoZW5cbiAgICB2YXIgcjAgPSBwb29sLmFjcXVpcmUoa2V5KTtcbiAgICByMC5jbG9zZSgpO1xuICAgIHZhciByMSA9IHBvb2wuYWNxdWlyZShrZXkpO1xuXG4gICAgLy8gVGhlblxuICAgIGV4cGVjdCggcjAuaWQgKS50b0JlKCAwICk7XG4gICAgZXhwZWN0KCByMS5pZCApLnRvQmUoIDAgKTtcbiAgfSk7XG5cbiAgaXQoJ2hhbmRsZXMgbXVsdGlwbGUga2V5cycsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuIGEgcG9vbCB0aGF0IGFsbG9jYXRlc1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICB2YXIga2V5MSA9IFwiYm9sdDovL2xvY2FsaG9zdDo3Njg3XCI7XG4gICAgdmFyIGtleTIgPSBcImJvbHQ6Ly9sb2NhbGhvc3Q6NzY4OFwiO1xuICAgIHZhciBwb29sID0gbmV3IFBvb2woIGZ1bmN0aW9uICh1cmwsIHJlbGVhc2UpIHsgcmV0dXJuIG5ldyBSZXNvdXJjZSh1cmwsIGNvdW50ZXIrKywgcmVsZWFzZSkgfSApO1xuXG4gICAgLy8gV2hlblxuICAgIHZhciByMCA9IHBvb2wuYWNxdWlyZShrZXkxKTtcbiAgICB2YXIgcjEgPSBwb29sLmFjcXVpcmUoa2V5Mik7XG4gICAgcjAuY2xvc2UoKTtcbiAgICB2YXIgcjIgPSBwb29sLmFjcXVpcmUoa2V5MSk7XG4gICAgdmFyIHIzID0gcG9vbC5hY3F1aXJlKGtleTIpO1xuXG4gICAgLy8gVGhlblxuICAgIGV4cGVjdCggcjAuaWQgKS50b0JlKCAwICk7XG4gICAgZXhwZWN0KCByMS5pZCApLnRvQmUoIDEgKTtcbiAgICBleHBlY3QoIHIyLmlkICkudG9CZSggMCApO1xuICAgIGV4cGVjdCggcjMuaWQgKS50b0JlKCAyICk7XG4gIH0pO1xuXG4gIGl0KCdmcmVlcyBpZiBwb29sIHJlYWNoZXMgbWF4IHNpemUnLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlbiBhIHBvb2wgdGhhdCB0cmFja3MgZGVzdHJveWVkIHJlc291cmNlc1xuICAgIHZhciBjb3VudGVyID0gMCxcbiAgICAgICAgZGVzdHJveWVkID0gW107XG4gICAgdmFyIGtleSA9IFwiYm9sdDovL2xvY2FsaG9zdDo3Njg3XCI7XG4gICAgdmFyIHBvb2wgPSBuZXcgUG9vbChcbiAgICAgIGZ1bmN0aW9uICh1cmwsIHJlbGVhc2UpIHsgcmV0dXJuIG5ldyBSZXNvdXJjZSh1cmwsIGNvdW50ZXIrKywgcmVsZWFzZSkgfSxcbiAgICAgIGZ1bmN0aW9uIChyZXNvdXJjZSkgeyBkZXN0cm95ZWQucHVzaChyZXNvdXJjZSk7IH0sXG4gICAgICBmdW5jdGlvbiAocmVzb3VyY2UpIHsgcmV0dXJuIHRydWU7IH0sXG4gICAgICAyIC8vIG1heElkbGVcbiAgICApO1xuXG4gICAgLy8gV2hlblxuICAgIHZhciByMCA9IHBvb2wuYWNxdWlyZShrZXkpO1xuICAgIHZhciByMSA9IHBvb2wuYWNxdWlyZShrZXkpO1xuICAgIHZhciByMiA9IHBvb2wuYWNxdWlyZShrZXkpO1xuICAgIHIwLmNsb3NlKCk7XG4gICAgcjEuY2xvc2UoKTtcbiAgICByMi5jbG9zZSgpO1xuXG4gICAgLy8gVGhlblxuICAgIGV4cGVjdCggZGVzdHJveWVkLmxlbmd0aCApLnRvQmUoIDEgKTtcbiAgICBleHBlY3QoIGRlc3Ryb3llZFswXS5pZCApLnRvQmUoIHIyLmlkICk7XG4gIH0pO1xuXG4gIGl0KCdmcmVlcyBpZiB2YWxpZGF0ZSByZXR1cm5zIGZhbHNlJywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW4gYSBwb29sIHRoYXQgYWxsb2NhdGVzXG4gICAgdmFyIGNvdW50ZXIgPSAwLFxuICAgICAgZGVzdHJveWVkID0gW107XG4gICAgdmFyIGtleSA9IFwiYm9sdDovL2xvY2FsaG9zdDo3Njg3XCI7XG4gICAgdmFyIHBvb2wgPSBuZXcgUG9vbChcbiAgICAgIGZ1bmN0aW9uICh1cmwsIHJlbGVhc2UpIHsgcmV0dXJuIG5ldyBSZXNvdXJjZSh1cmwsIGNvdW50ZXIrKywgcmVsZWFzZSkgfSxcbiAgICAgIGZ1bmN0aW9uIChyZXNvdXJjZSkgeyBkZXN0cm95ZWQucHVzaChyZXNvdXJjZSk7IH0sXG4gICAgICBmdW5jdGlvbiAocmVzb3VyY2UpIHsgcmV0dXJuIGZhbHNlOyB9LFxuICAgICAgMTAwMCAvLyBtYXhJZGxlXG4gICAgKTtcblxuICAgIC8vIFdoZW5cbiAgICB2YXIgcjAgPSBwb29sLmFjcXVpcmUoa2V5KTtcbiAgICB2YXIgcjEgPSBwb29sLmFjcXVpcmUoa2V5KTtcbiAgICByMC5jbG9zZSgpO1xuICAgIHIxLmNsb3NlKCk7XG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KCBkZXN0cm95ZWQubGVuZ3RoICkudG9CZSggMiApO1xuICAgIGV4cGVjdCggZGVzdHJveWVkWzBdLmlkICkudG9CZSggcjAuaWQgKTtcbiAgICBleHBlY3QoIGRlc3Ryb3llZFsxXS5pZCApLnRvQmUoIHIxLmlkICk7XG4gIH0pO1xuXG5cbiAgaXQoJ3B1cmdlcyBrZXlzJywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW4gYSBwb29sIHRoYXQgYWxsb2NhdGVzXG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIHZhciBrZXkxID0gXCJib2x0Oi8vbG9jYWxob3N0Ojc2ODdcIjtcbiAgICB2YXIga2V5MiA9IFwiYm9sdDovL2xvY2FsaG9zdDo3Njg4XCI7XG4gICAgdmFyIHBvb2wgPSBuZXcgUG9vbCggZnVuY3Rpb24gKHVybCwgcmVsZWFzZSkgeyByZXR1cm4gbmV3IFJlc291cmNlKHVybCwgY291bnRlcisrLCByZWxlYXNlKSB9LFxuICAgICAgZnVuY3Rpb24gKHJlcykge3Jlcy5kZXN0cm95ZWQgPSB0cnVlOyByZXR1cm4gdHJ1ZX1cbiAgICApO1xuXG4gICAgLy8gV2hlblxuICAgIHZhciByMCA9IHBvb2wuYWNxdWlyZShrZXkxKTtcbiAgICB2YXIgcjEgPSBwb29sLmFjcXVpcmUoa2V5Mik7XG4gICAgcjAuY2xvc2UoKTtcbiAgICByMS5jbG9zZSgpO1xuICAgIGV4cGVjdChwb29sLmhhcyhrZXkxKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QocG9vbC5oYXMoa2V5MikpLnRvQmUodHJ1ZSk7XG4gICAgcG9vbC5wdXJnZShrZXkxKTtcbiAgICBleHBlY3QocG9vbC5oYXMoa2V5MSkpLnRvQmUoZmFsc2UpO1xuICAgIGV4cGVjdChwb29sLmhhcyhrZXkyKSkudG9CZSh0cnVlKTtcblxuICAgIHZhciByMiA9IHBvb2wuYWNxdWlyZShrZXkxKTtcbiAgICB2YXIgcjMgPSBwb29sLmFjcXVpcmUoa2V5Mik7XG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KCByMC5pZCApLnRvQmUoIDAgKTtcbiAgICBleHBlY3QoIHIwLmRlc3Ryb3llZCApLnRvQmUoIHRydWUgKTtcbiAgICBleHBlY3QoIHIxLmlkICkudG9CZSggMSApO1xuICAgIGV4cGVjdCggcjIuaWQgKS50b0JlKCAyICk7XG4gICAgZXhwZWN0KCByMy5pZCApLnRvQmUoIDEgKTtcbiAgfSk7XG59KTtcblxuZnVuY3Rpb24gUmVzb3VyY2UoIGtleSwgaWQsIHJlbGVhc2UpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLmlkID0gaWQ7XG4gIHRoaXMuY2xvc2UgPSBmdW5jdGlvbigpIHsgcmVsZWFzZShrZXksIHNlbGYpOyB9O1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBSZWRpc2NvdmVyeSBmcm9tIFwiLi4vLi4vc3JjL3YxL2ludGVybmFsL3JlZGlzY292ZXJ5XCI7XG5pbXBvcnQgUm91dGluZ1V0aWwgZnJvbSBcIi4uLy4uL3NyYy92MS9pbnRlcm5hbC9yb3V0aW5nLXV0aWxcIjtcbmltcG9ydCB7bmV3RXJyb3IsIFBST1RPQ09MX0VSUk9SfSBmcm9tIFwiLi4vLi4vc3JjL3YxL2Vycm9yXCI7XG5pbXBvcnQgUmVjb3JkIGZyb20gXCIuLi8uLi9zcmMvdjEvcmVjb3JkXCI7XG5pbXBvcnQge2ludH0gZnJvbSBcIi4uLy4uL3NyYy92MS9pbnRlZ2VyXCI7XG5pbXBvcnQgUm91bmRSb2JpbkFycmF5IGZyb20gXCIuLi8uLi9zcmMvdjEvaW50ZXJuYWwvcm91bmQtcm9iaW4tYXJyYXlcIjtcbmltcG9ydCBSb3V0aW5nVGFibGUgZnJvbSBcIi4uLy4uL3NyYy92MS9pbnRlcm5hbC9yb3V0aW5nLXRhYmxlXCI7XG5cbmNvbnN0IFJPVVRFUl9BRERSRVNTID0gJ2JvbHQrcm91dGluZzovL3Rlc3Qucm91dGVyLmNvbSc7XG5cbmRlc2NyaWJlKCdyZWRpc2NvdmVyeScsICgpID0+IHtcblxuICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gY29ubmVjdGlvbiBlcnJvciBoYXBwZW5zJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdXRpbCA9IG5ldyBGYWtlUm91dGluZ1V0aWwoe1xuICAgICAgY2FsbFJvdXRpbmdQcm9jZWR1cmU6ICgpID0+IG51bGwsXG4gICAgfSk7XG5cbiAgICBsb29rdXBSb3V0aW5nVGFibGVPblJvdXRlcih1dGlsKS50aGVuKHJvdXRpbmdUYWJsZSA9PiB7XG4gICAgICBleHBlY3Qocm91dGluZ1RhYmxlKS50b0JlTnVsbCgpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IHdoZW4gbm8gcmVjb3JkcyBhcmUgcmV0dXJuZWQnLCBkb25lID0+IHtcbiAgICBjb25zdCB1dGlsID0gbmV3IEZha2VSb3V0aW5nVXRpbCh7XG4gICAgICBjYWxsUm91dGluZ1Byb2NlZHVyZTogKCkgPT4gW10sXG4gICAgfSk7XG5cbiAgICBsb29rdXBSb3V0aW5nVGFibGVPblJvdXRlcih1dGlsKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3RQcm90b2NvbEVycm9yKGVycm9yLCAnSWxsZWdhbCByZXNwb25zZSBmcm9tIHJvdXRlcicpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IHdoZW4gbXVsdGlwbGUgcmVjb3JkcyBhcmUgcmV0dXJuZWQnLCBkb25lID0+IHtcbiAgICBjb25zdCB1dGlsID0gbmV3IEZha2VSb3V0aW5nVXRpbCh7XG4gICAgICBjYWxsUm91dGluZ1Byb2NlZHVyZTogKCkgPT4gW25ldyBSZWNvcmQoWydhJ10sIFsnYWFhJ10pLCBuZXcgUmVjb3JkKFsnYiddLCBbJ2JiYiddKV1cbiAgICB9KTtcblxuICAgIGxvb2t1cFJvdXRpbmdUYWJsZU9uUm91dGVyKHV0aWwpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGV4cGVjdFByb3RvY29sRXJyb3IoZXJyb3IsICdJbGxlZ2FsIHJlc3BvbnNlIGZyb20gcm91dGVyJyk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB0dGwgcGFyc2luZyB0aHJvd3MnLCBkb25lID0+IHtcbiAgICBjb25zdCB1dGlsID0gbmV3IEZha2VSb3V0aW5nVXRpbCh7XG4gICAgICBjYWxsUm91dGluZ1Byb2NlZHVyZTogKCkgPT4gW25ldyBSZWNvcmQoWydhJ10sIFsnYWFhJ10pXSxcbiAgICAgIHBhcnNlVHRsOiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ld0Vycm9yKCdVbmFibGUgdG8gcGFyc2UgVFRMJywgUFJPVE9DT0xfRVJST1IpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbG9va3VwUm91dGluZ1RhYmxlT25Sb3V0ZXIodXRpbCkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZXhwZWN0UHJvdG9jb2xFcnJvcihlcnJvciwgJ1VuYWJsZSB0byBwYXJzZSBUVEwnKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHNlcnZlcnMgcGFyc2luZyB0aHJvd3MnLCBkb25lID0+IHtcbiAgICBjb25zdCB1dGlsID0gbmV3IEZha2VSb3V0aW5nVXRpbCh7XG4gICAgICBjYWxsUm91dGluZ1Byb2NlZHVyZTogKCkgPT4gW25ldyBSZWNvcmQoWydhJ10sIFsnYWFhJ10pXSxcbiAgICAgIHBhcnNlVHRsOiAoKSA9PiBpbnQoNDIpLFxuICAgICAgcGFyc2VTZXJ2ZXJzOiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ld0Vycm9yKCdVbmFibGUgdG8gcGFyc2Ugc2VydmVycycsIFBST1RPQ09MX0VSUk9SKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxvb2t1cFJvdXRpbmdUYWJsZU9uUm91dGVyKHV0aWwpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGV4cGVjdFByb3RvY29sRXJyb3IoZXJyb3IsICdVbmFibGUgdG8gcGFyc2Ugc2VydmVycycpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IHdoZW4gbm8gcm91dGVycycsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHV0aWwgPSBuZXcgRmFrZVJvdXRpbmdVdGlsKHtcbiAgICAgIGNhbGxSb3V0aW5nUHJvY2VkdXJlOiAoKSA9PiBbbmV3IFJlY29yZChbJ2EnXSwgWydhYWEnXSldLFxuICAgICAgcGFyc2VUdGw6ICgpID0+IGludCg0MiksXG4gICAgICBwYXJzZVNlcnZlcnM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByb3V0ZXJzOiBuZXcgUm91bmRSb2JpbkFycmF5KCksXG4gICAgICAgICAgcmVhZGVyczogbmV3IFJvdW5kUm9iaW5BcnJheShbJ3JlYWRlcjEnXSksXG4gICAgICAgICAgd3JpdGVyczogbmV3IFJvdW5kUm9iaW5BcnJheShbJ3dyaXRlcjEnXSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxvb2t1cFJvdXRpbmdUYWJsZU9uUm91dGVyKHV0aWwpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGV4cGVjdFByb3RvY29sRXJyb3IoZXJyb3IsICdSZWNlaXZlZCBubyByb3V0ZXJzJyk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBubyByZWFkZXJzJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdXRpbCA9IG5ldyBGYWtlUm91dGluZ1V0aWwoe1xuICAgICAgY2FsbFJvdXRpbmdQcm9jZWR1cmU6ICgpID0+IFtuZXcgUmVjb3JkKFsnYSddLCBbJ2FhYSddKV0sXG4gICAgICBwYXJzZVR0bDogKCkgPT4gaW50KDQyKSxcbiAgICAgIHBhcnNlU2VydmVyczogKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJvdXRlcnM6IG5ldyBSb3VuZFJvYmluQXJyYXkoWydyb3V0ZXIxJ10pLFxuICAgICAgICAgIHJlYWRlcnM6IG5ldyBSb3VuZFJvYmluQXJyYXkoKSxcbiAgICAgICAgICB3cml0ZXJzOiBuZXcgUm91bmRSb2JpbkFycmF5KFsnd3JpdGVyMSddKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbG9va3VwUm91dGluZ1RhYmxlT25Sb3V0ZXIodXRpbCkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZXhwZWN0UHJvdG9jb2xFcnJvcihlcnJvciwgJ1JlY2VpdmVkIG5vIHJlYWRlcnMnKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gcm91dGluZyB0YWJsZSB3aGVuIG5vIHdyaXRlcnMnLCBkb25lID0+IHtcbiAgICBjb25zdCB1dGlsID0gbmV3IEZha2VSb3V0aW5nVXRpbCh7XG4gICAgICBjYWxsUm91dGluZ1Byb2NlZHVyZTogKCkgPT4gW25ldyBSZWNvcmQoWydhJ10sIFsnYWFhJ10pXSxcbiAgICAgIHBhcnNlVHRsOiAoKSA9PiBpbnQoNDIpLFxuICAgICAgcGFyc2VTZXJ2ZXJzOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcm91dGVyczogbmV3IFJvdW5kUm9iaW5BcnJheShbJ3JvdXRlcjEnXSksXG4gICAgICAgICAgcmVhZGVyczogbmV3IFJvdW5kUm9iaW5BcnJheShbJ3JlYWRlcjEnXSksXG4gICAgICAgICAgd3JpdGVyczogbmV3IFJvdW5kUm9iaW5BcnJheSgpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsb29rdXBSb3V0aW5nVGFibGVPblJvdXRlcih1dGlsKS50aGVuKHJvdXRpbmdUYWJsZSA9PiB7XG4gICAgICBleHBlY3Qocm91dGluZ1RhYmxlKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHJvdXRpbmdUYWJsZSkubm90LnRvQmVOdWxsKCk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIHZhbGlkIHJvdXRpbmcgdGFibGUgd2l0aCAxIHJvdXRlciwgMSByZWFkZXIgYW5kIDEgd3JpdGVyJywgZG9uZSA9PiB7XG4gICAgdGVzdFZhbGlkUm91dGluZ1RhYmxlKFsncm91dGVyMSddLCBbJ3JlYWRlcjEnXSwgWyd3cml0ZXIxJ10sIGludCg0MiksIGRvbmUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiB2YWxpZCByb3V0aW5nIHRhYmxlIHdpdGggMiByb3V0ZXJzLCAyIHJlYWRlcnMgYW5kIDIgd3JpdGVycycsIGRvbmUgPT4ge1xuICAgIHRlc3RWYWxpZFJvdXRpbmdUYWJsZShbJ3JvdXRlcjEnLCAncm91dGVyMiddLCBbJ3JlYWRlcjEnLCAncmVhZGVyMiddLCBbJ3dyaXRlcjEnLCAnd3JpdGVyMiddLCBpbnQoRGF0ZS5ub3coKSksIGRvbmUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiB2YWxpZCByb3V0aW5nIHRhYmxlIHdpdGggMSByb3V0ZXIsIDMgcmVhZGVycyBhbmQgMSB3cml0ZXInLCBkb25lID0+IHtcbiAgICB0ZXN0VmFsaWRSb3V0aW5nVGFibGUoWydyb3V0ZXIxJ10sIFsncmVhZGVyMScsICdyZWFkZXIyJywgJ3JlYWRlcjMnXSwgWyd3cml0ZXIxJ10sIGludCgxMjM0NSksIGRvbmUpO1xuICB9KTtcblxuICBmdW5jdGlvbiB0ZXN0VmFsaWRSb3V0aW5nVGFibGUocm91dGVyQWRkcmVzc2VzLCByZWFkZXJBZGRyZXNzZXMsIHdyaXRlckFkZHJlc3NlcywgZXhwaXJlcywgZG9uZSkge1xuICAgIGNvbnN0IHV0aWwgPSBuZXcgRmFrZVJvdXRpbmdVdGlsKHtcbiAgICAgIGNhbGxSb3V0aW5nUHJvY2VkdXJlOiAoKSA9PiBbbmV3IFJlY29yZChbJ2EnXSwgWydhYWEnXSldLFxuICAgICAgcGFyc2VUdGw6ICgpID0+IGV4cGlyZXMsXG4gICAgICBwYXJzZVNlcnZlcnM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByb3V0ZXJzOiBuZXcgUm91bmRSb2JpbkFycmF5KHJvdXRlckFkZHJlc3NlcyksXG4gICAgICAgICAgcmVhZGVyczogbmV3IFJvdW5kUm9iaW5BcnJheShyZWFkZXJBZGRyZXNzZXMpLFxuICAgICAgICAgIHdyaXRlcnM6IG5ldyBSb3VuZFJvYmluQXJyYXkod3JpdGVyQWRkcmVzc2VzKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbG9va3VwUm91dGluZ1RhYmxlT25Sb3V0ZXIodXRpbCkudGhlbihyb3V0aW5nVGFibGUgPT4ge1xuICAgICAgZXhwZWN0KHJvdXRpbmdUYWJsZSkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChyb3V0aW5nVGFibGUpLm5vdC50b0JlTnVsbCgpO1xuXG4gICAgICBleHBlY3Qocm91dGluZ1RhYmxlLmV4cGlyYXRpb25UaW1lKS50b0VxdWFsKGV4cGlyZXMpO1xuXG4gICAgICBjb25zdCBhbGxTZXJ2ZXJzID0gcm91dGluZ1RhYmxlLnNlcnZlcnNEaWZmKG5ldyBSb3V0aW5nVGFibGUoKSkuc29ydCgpO1xuICAgICAgY29uc3QgYWxsRXhwZWN0ZWRTZXJ2ZXJzID0gWy4uLnJvdXRlckFkZHJlc3NlcywgLi4ucmVhZGVyQWRkcmVzc2VzLCAuLi53cml0ZXJBZGRyZXNzZXNdLnNvcnQoKTtcbiAgICAgIGV4cGVjdChhbGxTZXJ2ZXJzKS50b0VxdWFsKGFsbEV4cGVjdGVkU2VydmVycyk7XG5cbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvb2t1cFJvdXRpbmdUYWJsZU9uUm91dGVyKHJvdXRpbmdVdGlsKSB7XG4gICAgY29uc3QgcmVkaXNjb3ZlcnkgPSBuZXcgUmVkaXNjb3Zlcnkocm91dGluZ1V0aWwpO1xuICAgIHJldHVybiByZWRpc2NvdmVyeS5sb29rdXBSb3V0aW5nVGFibGVPblJvdXRlcihudWxsLCBST1VURVJfQUREUkVTUyk7XG4gIH1cblxuICBmdW5jdGlvbiBleHBlY3RQcm90b2NvbEVycm9yKGVycm9yLCBtZXNzYWdlUHJlZml4KSB7XG4gICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvRXF1YWwoUFJPVE9DT0xfRVJST1IpO1xuICAgIGV4cGVjdChlcnJvci5tZXNzYWdlLmluZGV4T2YobWVzc2FnZVByZWZpeCkpLnRvRXF1YWwoMCk7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGROb3RCZUNhbGxlZCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBub3QgYmUgY2FsbGVkJyk7XG4gIH1cblxuICBjbGFzcyBGYWtlUm91dGluZ1V0aWwgZXh0ZW5kcyBSb3V0aW5nVXRpbCB7XG5cbiAgICBjb25zdHJ1Y3Rvcih7Y2FsbFJvdXRpbmdQcm9jZWR1cmUgPSBzaG91bGROb3RCZUNhbGxlZCwgcGFyc2VUdGwgPSBzaG91bGROb3RCZUNhbGxlZCwgcGFyc2VTZXJ2ZXJzID0gc2hvdWxkTm90QmVDYWxsZWR9KSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgdGhpcy5fY2FsbEF2YWlsYWJsZVJvdXRpbmdQcm9jZWR1cmUgPSBjYWxsUm91dGluZ1Byb2NlZHVyZTtcbiAgICAgIHRoaXMuX3BhcnNlVHRsID0gcGFyc2VUdGw7XG4gICAgICB0aGlzLl9wYXJzZVNlcnZlcnMgPSBwYXJzZVNlcnZlcnM7XG4gICAgfVxuXG4gICAgY2FsbFJvdXRpbmdQcm9jZWR1cmUoc2Vzc2lvbiwgcm91dGVyQWRkcmVzcykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2NhbGxBdmFpbGFibGVSb3V0aW5nUHJvY2VkdXJlKCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHBhcnNlVHRsKHJlY29yZCwgcm91dGVyQWRkcmVzcykge1xuICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlVHRsKCk7XG4gICAgfVxuXG4gICAgcGFyc2VTZXJ2ZXJzKHJlY29yZCwgcm91dGVyQWRkcmVzcykge1xuICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlU2VydmVycygpO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCBSb3VuZFJvYmluQXJyYXkgZnJvbSAnLi4vLi4vbGliL3YxL2ludGVybmFsL3JvdW5kLXJvYmluLWFycmF5JztcblxuZGVzY3JpYmUoJ3JvdW5kLXJvYmluLWFycmF5JywgKCkgPT4ge1xuXG4gIGl0KCdzaG91bGQgYmVoYXZlIGNvcnJlY3RseSB3aGVuIGVtcHR5JywgKCkgPT4ge1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IFJvdW5kUm9iaW5BcnJheSgpO1xuXG4gICAgZXhwZWN0KGFycmF5LmlzRW1wdHkoKSkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChhcnJheS5zaXplKCkpLnRvRXF1YWwoMCk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9CZU51bGwoKTtcbiAgICBleHBlY3QoYXJyYXkudG9BcnJheSgpKS50b0VxdWFsKFtdKTtcblxuICAgIGFycmF5LnJlbW92ZSgxKTtcblxuICAgIGV4cGVjdChhcnJheS5pc0VtcHR5KCkpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QoYXJyYXkuc2l6ZSgpKS50b0VxdWFsKDApO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvQmVOdWxsKCk7XG4gICAgZXhwZWN0KGFycmF5LnRvQXJyYXkoKSkudG9FcXVhbChbXSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYmVoYXZlIGNvcnJlY3RseSB3aGVuIGNvbnRhaW5zIHNpbmdsZSBlbGVtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IFJvdW5kUm9iaW5BcnJheShbNV0pO1xuXG4gICAgZXhwZWN0KGFycmF5LmlzRW1wdHkoKSkudG9CZUZhbHN5KCk7XG4gICAgZXhwZWN0KGFycmF5LnNpemUoKSkudG9FcXVhbCgxKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDUpO1xuICAgIGV4cGVjdChhcnJheS50b0FycmF5KCkpLnRvRXF1YWwoWzVdKTtcblxuICAgIGFycmF5LnJlbW92ZSgxKTtcblxuICAgIGV4cGVjdChhcnJheS5pc0VtcHR5KCkpLnRvQmVGYWxzeSgpO1xuICAgIGV4cGVjdChhcnJheS5zaXplKCkpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCg1KTtcbiAgICBleHBlY3QoYXJyYXkudG9BcnJheSgpKS50b0VxdWFsKFs1XSk7XG5cbiAgICBhcnJheS5yZW1vdmUoNSk7XG5cbiAgICBleHBlY3QoYXJyYXkuaXNFbXB0eSgpKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KGFycmF5LnNpemUoKSkudG9FcXVhbCgwKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0JlTnVsbCgpO1xuICAgIGV4cGVjdChhcnJheS50b0FycmF5KCkpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHB1c2ggaXRlbXMnLCAoKSA9PiB7XG4gICAgY29uc3QgYXJyYXkxID0gbmV3IFJvdW5kUm9iaW5BcnJheSgpO1xuICAgIGFycmF5MS5wdXNoQWxsKFsxXSk7XG4gICAgZXhwZWN0KGFycmF5MS50b0FycmF5KCkpLnRvRXF1YWwoWzFdKTtcblxuICAgIGNvbnN0IGFycmF5MiA9IG5ldyBSb3VuZFJvYmluQXJyYXkoW10pO1xuICAgIGFycmF5Mi5wdXNoQWxsKFsxLCAyLCAzXSk7XG4gICAgZXhwZWN0KGFycmF5Mi50b0FycmF5KCkpLnRvRXF1YWwoWzEsIDIsIDNdKTtcblxuICAgIGNvbnN0IGFycmF5MyA9IG5ldyBSb3VuZFJvYmluQXJyYXkoWzEsIDIsIDNdKTtcbiAgICBhcnJheTMucHVzaEFsbChbNCwgNV0pO1xuICAgIGV4cGVjdChhcnJheTMudG9BcnJheSgpKS50b0VxdWFsKFsxLCAyLCAzLCA0LCA1XSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcHVzaCBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICBjb25zdCBlbXB0eUFycmF5ID0gbmV3IFJvdW5kUm9iaW5BcnJheSgpO1xuICAgIGVtcHR5QXJyYXkucHVzaEFsbChbXSk7XG4gICAgZXhwZWN0KGVtcHR5QXJyYXkuaXNFbXB0eSgpKS50b0JlVHJ1dGh5KCk7XG5cbiAgICBjb25zdCBub25FbXB0eUFycmF5ID0gbmV3IFJvdW5kUm9iaW5BcnJheShbMSwgMiwgM10pO1xuICAgIG5vbkVtcHR5QXJyYXkucHVzaEFsbChbXSk7XG4gICAgZXhwZWN0KG5vbkVtcHR5QXJyYXkudG9BcnJheSgpKS50b0VxdWFsKFsxLCAyLCAzXSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB0cnlpbmcgdG8gcHVzaCBpbGxlZ2FsIGl0ZW1zJywgKCkgPT4ge1xuICAgIGNvbnN0IGVtcHR5QXJyYXkgPSBuZXcgUm91bmRSb2JpbkFycmF5KCk7XG4gICAgY29uc3Qgbm9uRW1wdHlBcnJheSA9IG5ldyBSb3VuZFJvYmluQXJyYXkoWzEsIDIsIDNdKTtcblxuICAgIGV4cGVjdCgoKSA9PiBlbXB0eUFycmF5LnB1c2hBbGwodW5kZWZpbmVkKSkudG9UaHJvdygpO1xuICAgIGV4cGVjdCgoKSA9PiBub25FbXB0eUFycmF5LnB1c2hBbGwodW5kZWZpbmVkKSkudG9UaHJvdygpO1xuXG4gICAgZXhwZWN0KCgpID0+IGVtcHR5QXJyYXkucHVzaEFsbChudWxsKSkudG9UaHJvdygpO1xuICAgIGV4cGVjdCgoKSA9PiBub25FbXB0eUFycmF5LnB1c2hBbGwobnVsbCkpLnRvVGhyb3coKTtcblxuICAgIGV4cGVjdCgoKSA9PiBlbXB0eUFycmF5LnB1c2hBbGwoe30pKS50b1Rocm93KCk7XG4gICAgZXhwZWN0KCgpID0+IG5vbkVtcHR5QXJyYXkucHVzaEFsbCh7fSkpLnRvVGhyb3coKTtcblxuICAgIGV4cGVjdCgoKSA9PiBlbXB0eUFycmF5LnB1c2hBbGwoe2E6IDEsIGI6IDJ9KSkudG9UaHJvdygpO1xuICAgIGV4cGVjdCgoKSA9PiBub25FbXB0eUFycmF5LnB1c2hBbGwoe2E6IDEsIGI6IDJ9KSkudG9UaHJvdygpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHN0ZXAgdGhyb3VnaCBhcnJheScsICgpID0+IHtcbiAgICBjb25zdCBhcnJheSA9IG5ldyBSb3VuZFJvYmluQXJyYXkoWzEsIDIsIDMsIDQsIDVdKTtcblxuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgyKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoNCk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCg1KTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDEpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc3RlcCB0aHJvdWdoIHNpbmdsZSBlbGVtZW50IGFycmF5JywgKCkgPT4ge1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IFJvdW5kUm9iaW5BcnJheShbNV0pO1xuXG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCg1KTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDUpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoNSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGFuZGxlIGRlbGV0aW5nIGl0ZW0gYmVmb3JlIGN1cnJlbnQgJywgKCkgPT4ge1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IFJvdW5kUm9iaW5BcnJheShbMSwgMiwgMywgNCwgNV0pO1xuXG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgxKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDIpO1xuICAgIGFycmF5LnJlbW92ZSgyKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDQpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoNSk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgxKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoNCk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCg1KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYW5kbGUgZGVsZXRpbmcgaXRlbSBvbiBjdXJyZW50ICcsICgpID0+IHtcbiAgICBjb25zdCBhcnJheSA9IG5ldyBSb3VuZFJvYmluQXJyYXkoWzEsIDIsIDMsIDQsIDVdKTtcblxuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgyKTtcbiAgICBhcnJheS5yZW1vdmUoMyk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCg0KTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDUpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgyKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDQpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoNSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGFuZGxlIGRlbGV0aW5nIGl0ZW0gYWZ0ZXIgY3VycmVudCAnLCAoKSA9PiB7XG4gICAgY29uc3QgYXJyYXkgPSBuZXcgUm91bmRSb2JpbkFycmF5KFsxLCAyLCAzLCA0LCA1XSk7XG5cbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDEpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMik7XG4gICAgYXJyYXkucmVtb3ZlKDQpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMyk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCg1KTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDEpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMik7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgzKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYW5kbGUgZGVsZXRpbmcgbGFzdCBpdGVtICcsICgpID0+IHtcbiAgICBjb25zdCBhcnJheSA9IG5ldyBSb3VuZFJvYmluQXJyYXkoWzEsIDIsIDMsIDQsIDVdKTtcblxuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgyKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoNCk7XG4gICAgYXJyYXkucmVtb3ZlKDUpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgyKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoNCk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgxKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYW5kbGUgZGVsZXRpbmcgZmlyc3QgaXRlbSAnLCAoKSA9PiB7XG4gICAgY29uc3QgYXJyYXkgPSBuZXcgUm91bmRSb2JpbkFycmF5KFsxLCAyLCAzLCA0LCA1XSk7XG4gICAgYXJyYXkucmVtb3ZlKDEpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMik7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgzKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDQpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoNSk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgyKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoNCk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCg1KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYW5kbGUgZGVsZXRpbmcgbXVsdGlwbGUgaXRlbXMgJywgKCkgPT4ge1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IFJvdW5kUm9iaW5BcnJheShbMSwgMiwgMywgMSwgMV0pO1xuICAgIGFycmF5LnJlbW92ZSgxKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDIpO1xuICAgIGV4cGVjdChhcnJheS5uZXh0KCkpLnRvRXF1YWwoMyk7XG4gICAgZXhwZWN0KGFycmF5Lm5leHQoKSkudG9FcXVhbCgyKTtcbiAgICBleHBlY3QoYXJyYXkubmV4dCgpKS50b0VxdWFsKDMpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGhhdmUgY29ycmVjdCB0b1N0cmluZyAnLCAoKSA9PiB7XG4gICAgY29uc3QgYXJyYXkgPSBuZXcgUm91bmRSb2JpbkFycmF5KFsxLCAyLCAzXSk7XG4gICAgZXhwZWN0KGFycmF5LnRvU3RyaW5nKCkpLnRvRXF1YWwoJ1sxLDIsM10nKTtcbiAgfSk7XG5cbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgUm91dGluZ1RhYmxlIGZyb20gJy4uLy4uL3NyYy92MS9pbnRlcm5hbC9yb3V0aW5nLXRhYmxlJztcbmltcG9ydCBSb3VuZFJvYmluQXJyYXkgZnJvbSAnLi4vLi4vc3JjL3YxL2ludGVybmFsL3JvdW5kLXJvYmluLWFycmF5JztcbmltcG9ydCB7aW50fSBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZWdlcic7XG5pbXBvcnQge1JFQUQsIFdSSVRFfSBmcm9tICcuLi8uLi9zcmMvdjEvZHJpdmVyJztcblxuZGVzY3JpYmUoJ3JvdXRpbmctdGFibGUnLCAoKSA9PiB7XG5cbiAgaXQoJ3Nob3VsZCBub3QgYmUgc3RhbGUgd2hlbiBoYXMgcm91dGVycywgcmVhZGVycywgd3JpdGVycyBhbmQgZnV0dXJlIGV4cGlyYXRpb24gZGF0ZScsICgpID0+IHtcbiAgICBjb25zdCB0YWJsZSA9IGNyZWF0ZVRhYmxlKFsxLCAyXSwgWzMsIDRdLCBbNSwgNl0sIG5vdEV4cGlyZWQoKSk7XG4gICAgZXhwZWN0KHRhYmxlLmlzU3RhbGVGb3IoUkVBRCkpLnRvQmVGYWxzeSgpO1xuICAgIGV4cGVjdCh0YWJsZS5pc1N0YWxlRm9yKFdSSVRFKSkudG9CZUZhbHN5KCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYmUgc3RhbGUgd2hlbiBleHBpcmF0aW9uIGRhdGUgaW4gdGhlIHBhc3QnLCAoKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFsxLCAyXSwgWzEsIDJdLCBleHBpcmVkKCkpO1xuICAgIGV4cGVjdCh0YWJsZS5pc1N0YWxlRm9yKFJFQUQpKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KHRhYmxlLmlzU3RhbGVGb3IoV1JJVEUpKS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IGJlIHN0YWxlIHdoZW4gaGFzIHNpbmdsZSByb3V0ZXInLCAoKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBjcmVhdGVUYWJsZShbMV0sIFsyLCAzXSwgWzQsIDVdLCBub3RFeHBpcmVkKCkpO1xuICAgIGV4cGVjdCh0YWJsZS5pc1N0YWxlRm9yKFJFQUQpKS50b0JlRmFsc3koKTtcbiAgICBleHBlY3QodGFibGUuaXNTdGFsZUZvcihXUklURSkpLnRvQmVGYWxzeSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJlIHN0YWxlIGZvciByZWFkcyBidXQgbm90IHdyaXRlcyB3aGVuIG5vIHJlYWRlcnMnLCAoKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFtdLCBbMywgNF0sIG5vdEV4cGlyZWQoKSk7XG4gICAgZXhwZWN0KHRhYmxlLmlzU3RhbGVGb3IoUkVBRCkpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QodGFibGUuaXNTdGFsZUZvcihXUklURSkpLnRvQmVGYWxzeSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJlIHN0YWxlIGZvciB3cml0ZXMgYnV0IG5vdCByZWFkcyB3aGVuIG5vIHdyaXRlcnMnLCAoKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFszLCA0XSwgW10sIG5vdEV4cGlyZWQoKSk7XG4gICAgZXhwZWN0KHRhYmxlLmlzU3RhbGVGb3IoUkVBRCkpLnRvQmVGYWxzeSgpO1xuICAgIGV4cGVjdCh0YWJsZS5pc1N0YWxlRm9yKFdSSVRFKSkudG9CZVRydXRoeSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBiZSBzdGFsZSB3aXRoIHNpbmdsZSByZWFkZXInLCAoKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFszXSwgWzQsIDVdLCBub3RFeHBpcmVkKCkpO1xuICAgIGV4cGVjdCh0YWJsZS5pc1N0YWxlRm9yKFJFQUQpKS50b0JlRmFsc3koKTtcbiAgICBleHBlY3QodGFibGUuaXNTdGFsZUZvcihXUklURSkpLnRvQmVGYWxzeSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBiZSBzdGFsZSB3aXRoIHNpbmdsZSB3cml0ZXInLCAoKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFszLCA0XSwgWzVdLCBub3RFeHBpcmVkKCkpO1xuICAgIGV4cGVjdCh0YWJsZS5pc1N0YWxlRm9yKFJFQUQpKS50b0JlRmFsc3koKTtcbiAgICBleHBlY3QodGFibGUuaXNTdGFsZUZvcihXUklURSkpLnRvQmVGYWxzeSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZvcmdldCByZWFkZXIsIHdyaXRlciBidXQgbm90IHJvdXRlcicsICgpID0+IHtcbiAgICBjb25zdCB0YWJsZSA9IGNyZWF0ZVRhYmxlKFsxLCAyXSwgWzEsIDJdLCBbMSwgMl0sIG5vdEV4cGlyZWQoKSk7XG5cbiAgICB0YWJsZS5mb3JnZXQoMSk7XG5cbiAgICBleHBlY3QodGFibGUucm91dGVycy50b0FycmF5KCkpLnRvRXF1YWwoWzEsIDJdKTtcbiAgICBleHBlY3QodGFibGUucmVhZGVycy50b0FycmF5KCkpLnRvRXF1YWwoWzJdKTtcbiAgICBleHBlY3QodGFibGUud3JpdGVycy50b0FycmF5KCkpLnRvRXF1YWwoWzJdKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmb3JnZXQgc2luZ2xlIHJlYWRlcicsICgpID0+IHtcbiAgICBjb25zdCB0YWJsZSA9IGNyZWF0ZVRhYmxlKFsxLCAyXSwgWzQyXSwgWzEsIDIsIDNdLCBub3RFeHBpcmVkKCkpO1xuXG4gICAgdGFibGUuZm9yZ2V0KDQyKTtcblxuICAgIGV4cGVjdCh0YWJsZS5yb3V0ZXJzLnRvQXJyYXkoKSkudG9FcXVhbChbMSwgMl0pO1xuICAgIGV4cGVjdCh0YWJsZS5yZWFkZXJzLnRvQXJyYXkoKSkudG9FcXVhbChbXSk7XG4gICAgZXhwZWN0KHRhYmxlLndyaXRlcnMudG9BcnJheSgpKS50b0VxdWFsKFsxLCAyLCAzXSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZm9yZ2V0IHNpbmdsZSB3cml0ZXInLCAoKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFszLCA0LCA1XSwgWzQyXSwgbm90RXhwaXJlZCgpKTtcblxuICAgIHRhYmxlLmZvcmdldCg0Mik7XG5cbiAgICBleHBlY3QodGFibGUucm91dGVycy50b0FycmF5KCkpLnRvRXF1YWwoWzEsIDJdKTtcbiAgICBleHBlY3QodGFibGUucmVhZGVycy50b0FycmF5KCkpLnRvRXF1YWwoWzMsIDQsIDVdKTtcbiAgICBleHBlY3QodGFibGUud3JpdGVycy50b0FycmF5KCkpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZvcmdldCByb3V0ZXInLCAoKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFsxLCAzXSwgWzQsIDFdLCBub3RFeHBpcmVkKCkpO1xuXG4gICAgdGFibGUuZm9yZ2V0Um91dGVyKDEpO1xuXG4gICAgZXhwZWN0KHRhYmxlLnJvdXRlcnMudG9BcnJheSgpKS50b0VxdWFsKFsyXSk7XG4gICAgZXhwZWN0KHRhYmxlLnJlYWRlcnMudG9BcnJheSgpKS50b0VxdWFsKFsxLCAzXSk7XG4gICAgZXhwZWN0KHRhYmxlLndyaXRlcnMudG9BcnJheSgpKS50b0VxdWFsKFs0LCAxXSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZm9yZ2V0IHdyaXRlcicsICgpID0+IHtcbiAgICBjb25zdCB0YWJsZSA9IGNyZWF0ZVRhYmxlKFsxLCAyLCAzXSwgWzIsIDEsIDVdLCBbNSwgMV0sIG5vdEV4cGlyZWQoKSk7XG5cbiAgICB0YWJsZS5mb3JnZXRXcml0ZXIoMSk7XG5cbiAgICBleHBlY3QodGFibGUucm91dGVycy50b0FycmF5KCkpLnRvRXF1YWwoWzEsIDIsIDNdKTtcbiAgICBleHBlY3QodGFibGUucmVhZGVycy50b0FycmF5KCkpLnRvRXF1YWwoWzIsIDEsIDVdKTtcbiAgICBleHBlY3QodGFibGUud3JpdGVycy50b0FycmF5KCkpLnRvRXF1YWwoWzVdKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gYWxsIHNlcnZlcnMgaW4gZGlmZiB3aGVuIG90aGVyIHRhYmxlIGlzIGVtcHR5JywgKCkgPT4ge1xuICAgIGNvbnN0IG9sZFRhYmxlID0gY3JlYXRlVGFibGUoWzEsIDJdLCBbMywgNF0sIFs1LCA2XSwgbm90RXhwaXJlZCgpKTtcbiAgICBjb25zdCBuZXdUYWJsZSA9IGNyZWF0ZVRhYmxlKFtdLCBbXSwgW10sIG5vdEV4cGlyZWQoKSk7XG5cbiAgICBjb25zdCBzZXJ2ZXJzID0gb2xkVGFibGUuc2VydmVyc0RpZmYobmV3VGFibGUpO1xuXG4gICAgZXhwZWN0KHNlcnZlcnMpLnRvRXF1YWwoWzEsIDIsIDMsIDQsIDUsIDZdKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBubyBzZXJ2ZXJzIGluIGRpZmYgd2hlbiB0aGlzIHRhYmxlIGlzIGVtcHR5JywgKCkgPT4ge1xuICAgIGNvbnN0IG9sZFRhYmxlID0gY3JlYXRlVGFibGUoW10sIFtdLCBbXSwgbm90RXhwaXJlZCgpKTtcbiAgICBjb25zdCBuZXdUYWJsZSA9IGNyZWF0ZVRhYmxlKFsxLCAyXSwgWzMsIDRdLCBbNSwgNl0sIG5vdEV4cGlyZWQoKSk7XG5cbiAgICBjb25zdCBzZXJ2ZXJzID0gb2xkVGFibGUuc2VydmVyc0RpZmYobmV3VGFibGUpO1xuXG4gICAgZXhwZWN0KHNlcnZlcnMpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGluY2x1ZGUgZGlmZmVyZW50IHJvdXRlcnMgaW4gc2VydmVycyBkaWZmJywgKCkgPT4ge1xuICAgIGNvbnN0IG9sZFRhYmxlID0gY3JlYXRlVGFibGUoWzEsIDcsIDIsIDQyXSwgWzMsIDRdLCBbNSwgNl0sIG5vdEV4cGlyZWQoKSk7XG4gICAgY29uc3QgbmV3VGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFszLCA0XSwgWzUsIDZdLCBub3RFeHBpcmVkKCkpO1xuXG4gICAgY29uc3Qgc2VydmVycyA9IG9sZFRhYmxlLnNlcnZlcnNEaWZmKG5ld1RhYmxlKTtcblxuICAgIGV4cGVjdChzZXJ2ZXJzKS50b0VxdWFsKFs3LCA0Ml0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGluY2x1ZGUgZGlmZmVyZW50IHJlYWRlcnMgaW4gc2VydmVycyBkaWZmJywgKCkgPT4ge1xuICAgIGNvbnN0IG9sZFRhYmxlID0gY3JlYXRlVGFibGUoWzEsIDJdLCBbMywgNywgNCwgNDJdLCBbNSwgNl0sIG5vdEV4cGlyZWQoKSk7XG4gICAgY29uc3QgbmV3VGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFszLCA0XSwgWzUsIDZdLCBub3RFeHBpcmVkKCkpO1xuXG4gICAgY29uc3Qgc2VydmVycyA9IG9sZFRhYmxlLnNlcnZlcnNEaWZmKG5ld1RhYmxlKTtcblxuICAgIGV4cGVjdChzZXJ2ZXJzKS50b0VxdWFsKFs3LCA0Ml0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGluY2x1ZGUgZGlmZmVyZW50IHdyaXRlcnMgaW4gc2VydmVycyBkaWZmJywgKCkgPT4ge1xuICAgIGNvbnN0IG9sZFRhYmxlID0gY3JlYXRlVGFibGUoWzEsIDJdLCBbMywgNF0sIFs1LCA3LCA2LCA0Ml0sIG5vdEV4cGlyZWQoKSk7XG4gICAgY29uc3QgbmV3VGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFszLCA0XSwgWzUsIDZdLCBub3RFeHBpcmVkKCkpO1xuXG4gICAgY29uc3Qgc2VydmVycyA9IG9sZFRhYmxlLnNlcnZlcnNEaWZmKG5ld1RhYmxlKTtcblxuICAgIGV4cGVjdChzZXJ2ZXJzKS50b0VxdWFsKFs3LCA0Ml0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGluY2x1ZGUgZGlmZmVyZW50IHNlcnZlcnMgaW4gZGlmZicsICgpID0+IHtcbiAgICBjb25zdCBvbGRUYWJsZSA9IGNyZWF0ZVRhYmxlKFsxLCAyLCAxMV0sIFsyMiwgMywgMzMsIDRdLCBbNSwgNDQsIDZdLCBub3RFeHBpcmVkKCkpO1xuICAgIGNvbnN0IG5ld1RhYmxlID0gY3JlYXRlVGFibGUoWzFdLCBbMiwgMywgNCwgNl0sIFs1XSwgbm90RXhwaXJlZCgpKTtcblxuICAgIGNvbnN0IHNlcnZlcnMgPSBvbGRUYWJsZS5zZXJ2ZXJzRGlmZihuZXdUYWJsZSk7XG5cbiAgICBleHBlY3Qoc2VydmVycykudG9FcXVhbChbMTEsIDIyLCAzMywgNDRdKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYXZlIGNvcnJlY3QgdG9TdHJpbmcnLCAoKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBjcmVhdGVUYWJsZShbMSwgMl0sIFszLCA0XSwgWzUsIDZdLCA0Mik7XG4gICAgZXhwZWN0KHRhYmxlLnRvU3RyaW5nKCkpLnRvRXF1YWwoJ1JvdXRpbmdUYWJsZVtleHBpcmF0aW9uVGltZT00Miwgcm91dGVycz1bMSwyXSwgcmVhZGVycz1bMyw0XSwgd3JpdGVycz1bNSw2XV0nKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gZXhwaXJlZCgpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKSAtIDM2MDA7IC8vIGV4cGlyZWQgYW4gaG91ciBhZ29cbiAgfVxuXG4gIGZ1bmN0aW9uIG5vdEV4cGlyZWQoKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCkgKyAzNjAwOyAvLyB3aWxsIGV4cGlyZSBpbiBhbiBob3VyXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVUYWJsZShyb3V0ZXJzLCByZWFkZXJzLCB3cml0ZXJzLCBleHBpcmF0aW9uVGltZSkge1xuICAgIGNvbnN0IHJvdXRlcnNBcnJheSA9IG5ldyBSb3VuZFJvYmluQXJyYXkocm91dGVycyk7XG4gICAgY29uc3QgcmVhZGVyc0FycmF5ID0gbmV3IFJvdW5kUm9iaW5BcnJheShyZWFkZXJzKTtcbiAgICBjb25zdCB3cml0ZXJzQXJyYXkgPSBuZXcgUm91bmRSb2JpbkFycmF5KHdyaXRlcnMpO1xuICAgIGNvbnN0IGV4cGlyYXRpb24gPSBpbnQoZXhwaXJhdGlvblRpbWUpO1xuICAgIHJldHVybiBuZXcgUm91dGluZ1RhYmxlKHJvdXRlcnNBcnJheSwgcmVhZGVyc0FycmF5LCB3cml0ZXJzQXJyYXksIGV4cGlyYXRpb24pO1xuICB9XG5cbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBSb3V0aW5nVXRpbCBmcm9tICcuLi8uLi9zcmMvdjEvaW50ZXJuYWwvcm91dGluZy11dGlsJztcbmltcG9ydCBSZWNvcmQgZnJvbSAnLi4vLi4vc3JjL3YxL3JlY29yZCc7XG5pbXBvcnQgSW50ZWdlciwge2ludH0gZnJvbSAnLi4vLi4vc3JjL3YxL2ludGVnZXInO1xuaW1wb3J0IHtuZXdFcnJvciwgUFJPVE9DT0xfRVJST1IsIFNFUlZJQ0VfVU5BVkFJTEFCTEUsIFNFU1NJT05fRVhQSVJFRH0gZnJvbSAnLi4vLi4vc3JjL3YxL2Vycm9yJztcbmltcG9ydCBsb2xleCBmcm9tICdsb2xleCc7XG5pbXBvcnQgRmFrZUNvbm5lY3Rpb24gZnJvbSAnLi9mYWtlLWNvbm5lY3Rpb24nO1xuXG5jb25zdCBST1VURVJfQUREUkVTUyA9ICdib2x0K3JvdXRpbmc6Ly90ZXN0LnJvdXRlci5jb20nO1xuXG5kZXNjcmliZSgnZ2V0LXNlcnZlcnMtdXRpbCcsICgpID0+IHtcblxuICBsZXQgY2xvY2s7XG5cbiAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICBjbG9jayA9IGxvbGV4Lmluc3RhbGwoKTtcbiAgfSk7XG5cbiAgYWZ0ZXJBbGwoKCkgPT4ge1xuICAgIGNsb2NrLnVuaW5zdGFsbCgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiByZXRyaWV2ZWQgcmVjb3JkcyB3aGVuIHF1ZXJ5IHN1Y2NlZWRzJywgZG9uZSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IEZha2VTZXNzaW9uLnN1Y2Nlc3NmdWwoe3JlY29yZHM6IFsnZm9vJywgJ2JhcicsICdiYXonXX0pO1xuXG4gICAgY2FsbFJvdXRpbmdQcm9jZWR1cmUoc2Vzc2lvbikudGhlbihyZWNvcmRzID0+IHtcbiAgICAgIGV4cGVjdChyZWNvcmRzKS50b0VxdWFsKFsnZm9vJywgJ2JhcicsICdiYXonXSk7XG4gICAgICBkb25lKCk7XG4gICAgfSkuY2F0Y2goY29uc29sZS5sb2cpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNsb3NlIHNlc3Npb24gd2hlbiBxdWVyeSBzdWNjZWVkcycsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBGYWtlU2Vzc2lvbi5zdWNjZXNzZnVsKHtyZWNvcmRzOiBbJ2ZvbycsICdiYXInLCAnYmF6J119KTtcblxuICAgIGNhbGxSb3V0aW5nUHJvY2VkdXJlKHNlc3Npb24pLnRoZW4oKCkgPT4ge1xuICAgICAgZXhwZWN0KHNlc3Npb24uaXNDbG9zZWQoKSkudG9CZVRydXRoeSgpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgY2xvc2Ugc2Vzc2lvbiB3aGVuIHF1ZXJ5IGZhaWxzJywgZG9uZSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IEZha2VTZXNzaW9uLmZhaWxlZChuZXdFcnJvcignT2ggbm8hJywgU0VTU0lPTl9FWFBJUkVEKSk7XG5cbiAgICBjYWxsUm91dGluZ1Byb2NlZHVyZShzZXNzaW9uKS50aGVuKCgpID0+IHtcbiAgICAgIGV4cGVjdChzZXNzaW9uLmlzQ2xvc2VkKCkpLnRvQmVGYWxzeSgpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCBvbiBjb25uZWN0aW9uIGVycm9yJywgZG9uZSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IEZha2VTZXNzaW9uLmZhaWxlZChuZXdFcnJvcignT2ggbm8hJywgU0VTU0lPTl9FWFBJUkVEKSk7XG5cbiAgICBjYWxsUm91dGluZ1Byb2NlZHVyZShzZXNzaW9uKS50aGVuKHJlY29yZHMgPT4ge1xuICAgICAgZXhwZWN0KHJlY29yZHMpLnRvQmVOdWxsKCk7XG4gICAgICBkb25lKCk7XG4gICAgfSkuY2F0Y2goY29uc29sZS5sb2cpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBwcm9jZWR1cmUgbm90IGZvdW5kJywgZG9uZSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IEZha2VTZXNzaW9uLmZhaWxlZChuZXdFcnJvcignT2ggbm8hJywgJ05lby5DbGllbnRFcnJvci5Qcm9jZWR1cmUuUHJvY2VkdXJlTm90Rm91bmQnKSk7XG5cbiAgICBjYWxsUm91dGluZ1Byb2NlZHVyZShzZXNzaW9uKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9CZShTRVJWSUNFX1VOQVZBSUxBQkxFKTtcbiAgICAgIGV4cGVjdChlcnJvci5tZXNzYWdlKS50b0JlKCdTZXJ2ZXIgJyArIFJPVVRFUl9BRERSRVNTICsgJyBjb3VsZCBub3QgcGVyZm9ybSByb3V0aW5nLiAnICtcbiAgICAgICAgJ01ha2Ugc3VyZSB5b3UgYXJlIGNvbm5lY3RpbmcgdG8gYSBjYXVzYWwgY2x1c3RlcicpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHVzZSBnZXRTZXJ2ZXJzIHByb2NlZHVyZSB3aGVuIHNlcnZlciB2ZXJzaW9uIGlzIG9sZGVyIHRoYW4gMy4yLjAnLCBkb25lID0+IHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gbmV3IEZha2VDb25uZWN0aW9uKCkud2l0aFNlcnZlclZlcnNpb24oJ05lbzRqLzMuMS45Jyk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IEZha2VTZXNzaW9uLndpdGhGYWtlQ29ubmVjdGlvbihjb25uZWN0aW9uKTtcblxuICAgIGNhbGxSb3V0aW5nUHJvY2VkdXJlKHNlc3Npb24sIHt9KS50aGVuKCgpID0+IHtcbiAgICAgIGV4cGVjdChjb25uZWN0aW9uLnNlZW5TdGF0ZW1lbnRzKS50b0VxdWFsKFsnQ0FMTCBkYm1zLmNsdXN0ZXIucm91dGluZy5nZXRTZXJ2ZXJzJ10pO1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uc2VlblBhcmFtZXRlcnMpLnRvRXF1YWwoW3t9XSk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdXNlIGdldFJvdXRpbmdUYWJsZSBwcm9jZWR1cmUgd2l0aCBlbXB0eSByb3V0aW5nIGNvbnRleHQgd2hlbiBzZXJ2ZXIgdmVyc2lvbiBpcyAzLjIuMCcsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuZXcgRmFrZUNvbm5lY3Rpb24oKS53aXRoU2VydmVyVmVyc2lvbignTmVvNGovMy4yLjAnKTtcbiAgICBjb25zdCBzZXNzaW9uID0gRmFrZVNlc3Npb24ud2l0aEZha2VDb25uZWN0aW9uKGNvbm5lY3Rpb24pO1xuXG4gICAgY2FsbFJvdXRpbmdQcm9jZWR1cmUoc2Vzc2lvbiwge30pLnRoZW4oKCkgPT4ge1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uc2VlblN0YXRlbWVudHMpLnRvRXF1YWwoWydDQUxMIGRibXMuY2x1c3Rlci5yb3V0aW5nLmdldFJvdXRpbmdUYWJsZSh7Y29udGV4dH0pJ10pO1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uc2VlblBhcmFtZXRlcnMpLnRvRXF1YWwoW3tjb250ZXh0OiB7fX1dKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB1c2UgZ2V0Um91dGluZ1RhYmxlIHByb2NlZHVyZSB3aXRoIHJvdXRpbmcgY29udGV4dCB3aGVuIHNlcnZlciB2ZXJzaW9uIGlzIDMuMi4wJywgZG9uZSA9PiB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IG5ldyBGYWtlQ29ubmVjdGlvbigpLndpdGhTZXJ2ZXJWZXJzaW9uKCdOZW80ai8zLjIuMCcpO1xuICAgIGNvbnN0IHNlc3Npb24gPSBGYWtlU2Vzc2lvbi53aXRoRmFrZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7XG5cbiAgICBjYWxsUm91dGluZ1Byb2NlZHVyZShzZXNzaW9uLCB7a2V5MTogJ3ZhbHVlMScsIGtleTI6ICd2YWx1ZTInfSkudGhlbigoKSA9PiB7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbi5zZWVuU3RhdGVtZW50cykudG9FcXVhbChbJ0NBTEwgZGJtcy5jbHVzdGVyLnJvdXRpbmcuZ2V0Um91dGluZ1RhYmxlKHtjb250ZXh0fSknXSk7XG4gICAgICBleHBlY3QoY29ubmVjdGlvbi5zZWVuUGFyYW1ldGVycykudG9FcXVhbChbe2NvbnRleHQ6IHtrZXkxOiAndmFsdWUxJywga2V5MjogJ3ZhbHVlMid9fV0pO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHVzZSBnZXRSb3V0aW5nVGFibGUgcHJvY2VkdXJlIHdpdGggZW1wdHkgcm91dGluZyBjb250ZXh0IHdoZW4gc2VydmVyIHZlcnNpb24gaXMgbmV3ZXIgdGhhbiAzLjIuMCcsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuZXcgRmFrZUNvbm5lY3Rpb24oKS53aXRoU2VydmVyVmVyc2lvbignTmVvNGovMy4zLjUnKTtcbiAgICBjb25zdCBzZXNzaW9uID0gRmFrZVNlc3Npb24ud2l0aEZha2VDb25uZWN0aW9uKGNvbm5lY3Rpb24pO1xuXG4gICAgY2FsbFJvdXRpbmdQcm9jZWR1cmUoc2Vzc2lvbiwge30pLnRoZW4oKCkgPT4ge1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uc2VlblN0YXRlbWVudHMpLnRvRXF1YWwoWydDQUxMIGRibXMuY2x1c3Rlci5yb3V0aW5nLmdldFJvdXRpbmdUYWJsZSh7Y29udGV4dH0pJ10pO1xuICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uc2VlblBhcmFtZXRlcnMpLnRvRXF1YWwoW3tjb250ZXh0OiB7fX1dKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB1c2UgZ2V0Um91dGluZ1RhYmxlIHByb2NlZHVyZSB3aXRoIHJvdXRpbmcgY29udGV4dCB3aGVuIHNlcnZlciB2ZXJzaW9uIGlzIG5ld2VyIHRoYW4gMy4yLjAnLCBkb25lID0+IHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gbmV3IEZha2VDb25uZWN0aW9uKCkud2l0aFNlcnZlclZlcnNpb24oJ05lbzRqLzMuMi44Jyk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IEZha2VTZXNzaW9uLndpdGhGYWtlQ29ubmVjdGlvbihjb25uZWN0aW9uKTtcblxuICAgIGNhbGxSb3V0aW5nUHJvY2VkdXJlKHNlc3Npb24sIHtrZXkxOiAnZm9vJywga2V5MjogJ2Jhcid9KS50aGVuKCgpID0+IHtcbiAgICAgIGV4cGVjdChjb25uZWN0aW9uLnNlZW5TdGF0ZW1lbnRzKS50b0VxdWFsKFsnQ0FMTCBkYm1zLmNsdXN0ZXIucm91dGluZy5nZXRSb3V0aW5nVGFibGUoe2NvbnRleHR9KSddKTtcbiAgICAgIGV4cGVjdChjb25uZWN0aW9uLnNlZW5QYXJhbWV0ZXJzKS50b0VxdWFsKFt7Y29udGV4dDoge2tleTE6ICdmb28nLCBrZXkyOiAnYmFyJ319XSk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFyc2UgdmFsaWQgdHRsJywgKCkgPT4ge1xuICAgIHRlc3RWYWxpZFR0bFBhcnNpbmcoMTAwLCA1KTtcbiAgICB0ZXN0VmFsaWRUdGxQYXJzaW5nKERhdGUubm93KCksIDM2MDApOyAvLyAxIGhvdXJcbiAgICB0ZXN0VmFsaWRUdGxQYXJzaW5nKERhdGUubm93KCksIDg2NDAwKTsgLy8gMjQgaG91cnNcbiAgICB0ZXN0VmFsaWRUdGxQYXJzaW5nKERhdGUubm93KCksIDM2Mjg4MDApOyAvLyA0MiBkYXlzXG4gICAgdGVzdFZhbGlkVHRsUGFyc2luZygwLCAxKTtcbiAgICB0ZXN0VmFsaWRUdGxQYXJzaW5nKDUwLCAwKTtcbiAgICB0ZXN0VmFsaWRUdGxQYXJzaW5nKERhdGUubm93KCksIDApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBvdmVyZmxvdyBwYXJzaW5nIGh1Z2UgdHRsJywgKCkgPT4ge1xuICAgIGNvbnN0IHJlY29yZCA9IG5ld1JlY29yZCh7dHRsOiBJbnRlZ2VyLk1BWF9WQUxVRX0pO1xuICAgIGNsb2NrLnNldFN5c3RlbVRpbWUoNDIpO1xuXG4gICAgY29uc3QgZXhwaXJhdGlvblRpbWUgPSBwYXJzZVR0bChyZWNvcmQpO1xuXG4gICAgZXhwZWN0KGV4cGlyYXRpb25UaW1lKS50b0JlKEludGVnZXIuTUFYX1ZBTFVFKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gdmFsaWQgdmFsdWUgcGFyc2luZyBuZWdhdGl2ZSB0dGwnLCAoKSA9PiB7XG4gICAgY29uc3QgcmVjb3JkID0gbmV3UmVjb3JkKHt0dGw6IGludCgtNDIpfSk7XG4gICAgY2xvY2suc2V0U3lzdGVtVGltZSg0Mik7XG5cbiAgICBjb25zdCBleHBpcmF0aW9uVGltZSA9IHBhcnNlVHRsKHJlY29yZCk7XG5cbiAgICBleHBlY3QoZXhwaXJhdGlvblRpbWUpLnRvQmUoSW50ZWdlci5NQVhfVkFMVUUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IHdoZW4gcmVjb3JkIGRvZXMgbm90IGhhdmUgYSB0dGwgZW50cnknLCBkb25lID0+IHtcbiAgICBjb25zdCByZWNvcmQgPSBuZXcgUmVjb3JkKFtcIm5vdFR0bFwiLCBcInNlcnZlcnNcIl0sIFtdKTtcbiAgICBleHBlY3RQcm90b2NvbEVycm9yKCgpID0+IHBhcnNlVHRsKHJlY29yZCksIGRvbmUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhcnNlIHNlcnZlcnMnLCAoKSA9PiB7XG4gICAgdGVzdFZhbGlkU2VydmVyc1BhcnNpbmcoW10sIFtdLCBbXSk7XG5cbiAgICB0ZXN0VmFsaWRTZXJ2ZXJzUGFyc2luZyhbJ3JvdXRlcjEnXSwgW10sIFtdKTtcbiAgICB0ZXN0VmFsaWRTZXJ2ZXJzUGFyc2luZyhbXSwgWydyZWFkZXIxJ10sIFtdKTtcbiAgICB0ZXN0VmFsaWRTZXJ2ZXJzUGFyc2luZyhbXSwgW10sIFsnd3JpdGVyMSddKTtcblxuICAgIHRlc3RWYWxpZFNlcnZlcnNQYXJzaW5nKFsncm91dGVyMSddLCBbJ3JlYWRlcjEnXSwgW10pO1xuICAgIHRlc3RWYWxpZFNlcnZlcnNQYXJzaW5nKFsncm91dGVyMSddLCBbJ3JlYWRlcjEnXSwgWyd3cml0ZXIxJ10pO1xuICAgIHRlc3RWYWxpZFNlcnZlcnNQYXJzaW5nKFtdLCBbJ3JlYWRlcjEnXSwgWyd3cml0ZXIxJ10pO1xuXG4gICAgdGVzdFZhbGlkU2VydmVyc1BhcnNpbmcoWydyb3V0ZXIxJ10sIFsncmVhZGVyMSddLCBbJ3dyaXRlcjEnXSk7XG4gICAgdGVzdFZhbGlkU2VydmVyc1BhcnNpbmcoWydyb3V0ZXIxJywgJ3JvdXRlcjInXSwgWydyZWFkZXIxJywgJ3JlYWRlcjInXSwgWyd3cml0ZXIxJ10pO1xuICAgIHRlc3RWYWxpZFNlcnZlcnNQYXJzaW5nKFsncm91dGVyMScsICdyb3V0ZXIyJ10sIFsncmVhZGVyMScsICdyZWFkZXIyJ10sIFsnd3JpdGVyMScsICd3cml0ZXIyJ10pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgdG8gcGFyc2Ugc2VydmVycyBlbnRyeSB3aGVuIHJlY29yZCBkb2VzIG5vdCBoYXZlIHNlcnZlcnMnLCBkb25lID0+IHtcbiAgICBjb25zdCByZWNvcmQgPSBuZXcgUmVjb3JkKFsndHRsJywgJ25vdFNlcnZlcnMnXSwgW2ludCg0MiksIFt7XCJyb2xlXCI6IFwiUkVBRFwiLCBcImFkZHJlc3Nlc1wiOiBbJzEnLCAnMicsICczJ119XV0pO1xuICAgIGV4cGVjdFByb3RvY29sRXJyb3IoKCkgPT4gcGFyc2VTZXJ2ZXJzKHJlY29yZCksIGRvbmUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgdG8gcGFyc2Ugc2VydmVycyBlbnRyeSB3aXRob3V0IHJvbGUnLCBkb25lID0+IHtcbiAgICBjb25zdCByZWNvcmQgPSBuZXcgUmVjb3JkKFsndHRsJywgJ3NlcnZlcnMnXSwgW2ludCg0MiksIFt7XCJub3RSb2xlXCI6IFwiUkVBRFwiLCBcImFkZHJlc3Nlc1wiOiBbJzEnLCAnMicsICczJ119XV0pO1xuICAgIGV4cGVjdFByb3RvY29sRXJyb3IoKCkgPT4gcGFyc2VTZXJ2ZXJzKHJlY29yZCksIGRvbmUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgdG8gcGFyc2Ugc2VydmVycyBlbnRyeSB3aXRoIGlsbGVnYWwgcm9sZScsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHJlY29yZCA9IG5ldyBSZWNvcmQoWyd0dGwnLCAnc2VydmVycyddLCBbaW50KDQyKSwgW3tcInJvbGVcIjogXCJBUkJJVEVSXCIsIFwiYWRkcmVzc2VzXCI6IFsnMScsICcyJywgJzMnXX1dXSk7XG4gICAgZXhwZWN0UHJvdG9jb2xFcnJvcigoKSA9PiBwYXJzZVNlcnZlcnMocmVjb3JkKSwgZG9uZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCB0byBwYXJzZSBzZXJ2ZXJzIGVudHJ5IHdpdGgganVzdCB0dGwnLCBkb25lID0+IHtcbiAgICBjb25zdCByZWNvcmQgPSBuZXcgUmVjb3JkKFsndHRsJywgJ3NlcnZlcnMnXSwgW2ludCg0MiksIFt7XCJyb2xlXCI6IFwiUkVBRFwifV1dKTtcbiAgICBleHBlY3RQcm90b2NvbEVycm9yKCgpID0+IHBhcnNlU2VydmVycyhyZWNvcmQpLCBkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIHBhcnNlIHNlcnZlcnMgZW50cnkgd2l0aG91dCBhZGRyZXNzZXMnLCBkb25lID0+IHtcbiAgICBjb25zdCByZWNvcmQgPSBuZXcgUmVjb3JkKFsndHRsJywgJ3NlcnZlcnMnXSwgW2ludCg0MiksIFt7XCJyb2xlXCI6IFwiV1JJVEVcIiwgXCJub3RBZGRyZXNzZXNcIjogWycxJywgJzInLCAnMyddfV1dKTtcbiAgICBleHBlY3RQcm90b2NvbEVycm9yKCgpID0+IHBhcnNlU2VydmVycyhyZWNvcmQpLCBkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIHBhcnNlIHNlcnZlcnMgZW50cnkgd2l0aCBzdHJpbmcgYWRkcmVzc2VzJywgZG9uZSA9PiB7XG4gICAgY29uc3QgcmVjb3JkID0gbmV3IFJlY29yZChbJ3R0bCcsICdzZXJ2ZXJzJ10sIFtpbnQoNDIpLCBbe1wicm9sZVwiOiBcIldSSVRFXCIsIFwiYWRkcmVzc2VzXCI6ICcnfV1dKTtcbiAgICBleHBlY3RQcm90b2NvbEVycm9yKCgpID0+IHBhcnNlU2VydmVycyhyZWNvcmQpLCBkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIHBhcnNlIHNlcnZlcnMgZW50cnkgd2l0aCBudWxsIGFkZHJlc3NlcycsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHJlY29yZCA9IG5ldyBSZWNvcmQoWyd0dGwnLCAnc2VydmVycyddLCBbaW50KDQyKSwgW3tcInJvbGVcIjogXCJXUklURVwiLCBcImFkZHJlc3Nlc1wiOiBudWxsfV1dKTtcbiAgICBleHBlY3RQcm90b2NvbEVycm9yKCgpID0+IHBhcnNlU2VydmVycyhyZWNvcmQpLCBkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIHBhcnNlIHNlcnZlcnMgZW50cnkgd2l0aCBpbnRlZ2VyIGFkZHJlc3NlcycsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHJlY29yZCA9IG5ldyBSZWNvcmQoWyd0dGwnLCAnc2VydmVycyddLCBbaW50KDQyKSwgW3tcInJvbGVcIjogXCJXUklURVwiLCBcImFkZHJlc3Nlc1wiOiAxMjM0NX1dXSk7XG4gICAgZXhwZWN0UHJvdG9jb2xFcnJvcigoKSA9PiBwYXJzZVNlcnZlcnMocmVjb3JkKSwgZG9uZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCB0byBwYXJzZSBzZXJ2ZXJzIGVudHJ5IHdpdGggb2JqZWN0IGFkZHJlc3NlcycsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHJlY29yZCA9IG5ldyBSZWNvcmQoWyd0dGwnLCAnc2VydmVycyddLCBbaW50KDQyKSwgW3tcInJvbGVcIjogXCJXUklURVwiLCBcImFkZHJlc3Nlc1wiOiB7a2V5OiBbJ2xvY2FsaG9zdCddfX1dXSk7XG4gICAgZXhwZWN0UHJvdG9jb2xFcnJvcigoKSA9PiBwYXJzZVNlcnZlcnMocmVjb3JkKSwgZG9uZSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHRlc3RWYWxpZFR0bFBhcnNpbmcoY3VycmVudFRpbWUsIHR0bFNlY29uZHMpIHtcbiAgICBjb25zdCByZWNvcmQgPSBuZXdSZWNvcmQoe3R0bDogaW50KHR0bFNlY29uZHMpfSk7XG4gICAgY2xvY2suc2V0U3lzdGVtVGltZShjdXJyZW50VGltZSk7XG5cbiAgICBjb25zdCBleHBpcmF0aW9uVGltZSA9IHBhcnNlVHRsKHJlY29yZCkudG9OdW1iZXIoKTtcblxuICAgIGV4cGVjdChleHBpcmF0aW9uVGltZSkudG9FcXVhbChjdXJyZW50VGltZSArIHR0bFNlY29uZHMgKiAxMDAwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRlc3RWYWxpZFNlcnZlcnNQYXJzaW5nKHJvdXRlckFkZHJlc3NlcywgcmVhZGVyQWRkcmVzc2VzLCB3cml0ZXJBZGRyZXNzZXMpIHtcbiAgICBjb25zdCByZWNvcmQgPSBuZXdSZWNvcmQoe3JvdXRlcnM6IHJvdXRlckFkZHJlc3NlcywgcmVhZGVyczogcmVhZGVyQWRkcmVzc2VzLCB3cml0ZXJzOiB3cml0ZXJBZGRyZXNzZXN9KTtcblxuICAgIGNvbnN0IHtyb3V0ZXJzLCByZWFkZXJzLCB3cml0ZXJzfSA9IHBhcnNlU2VydmVycyhyZWNvcmQpO1xuXG4gICAgZXhwZWN0KHJvdXRlcnMudG9BcnJheSgpKS50b0VxdWFsKHJvdXRlckFkZHJlc3Nlcyk7XG4gICAgZXhwZWN0KHJlYWRlcnMudG9BcnJheSgpKS50b0VxdWFsKHJlYWRlckFkZHJlc3Nlcyk7XG4gICAgZXhwZWN0KHdyaXRlcnMudG9BcnJheSgpKS50b0VxdWFsKHdyaXRlckFkZHJlc3Nlcyk7XG4gIH1cblxuICBmdW5jdGlvbiBjYWxsUm91dGluZ1Byb2NlZHVyZShzZXNzaW9uLCByb3V0aW5nQ29udGV4dCkge1xuICAgIGNvbnN0IHV0aWwgPSBuZXcgUm91dGluZ1V0aWwocm91dGluZ0NvbnRleHQgfHwge30pO1xuICAgIHJldHVybiB1dGlsLmNhbGxSb3V0aW5nUHJvY2VkdXJlKHNlc3Npb24sIFJPVVRFUl9BRERSRVNTKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlVHRsKHJlY29yZCkge1xuICAgIGNvbnN0IHV0aWwgPSBuZXcgUm91dGluZ1V0aWwoKTtcbiAgICByZXR1cm4gdXRpbC5wYXJzZVR0bChyZWNvcmQsIFJPVVRFUl9BRERSRVNTKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU2VydmVycyhyZWNvcmQpIHtcbiAgICBjb25zdCB1dGlsID0gbmV3IFJvdXRpbmdVdGlsKCk7XG4gICAgcmV0dXJuIHV0aWwucGFyc2VTZXJ2ZXJzKHJlY29yZCwgUk9VVEVSX0FERFJFU1MpO1xuICB9XG5cbiAgZnVuY3Rpb24gbmV3UmVjb3JkKHt0dGwgPSBpbnQoNDIpLCByb3V0ZXJzID0gW10sIHJlYWRlcnMgPSBbXSwgd3JpdGVycyA9IFtdfSkge1xuICAgIGNvbnN0IHJvdXRlcnNGaWVsZCA9IHtcbiAgICAgIFwicm9sZVwiOiBcIlJPVVRFXCIsXG4gICAgICBcImFkZHJlc3Nlc1wiOiByb3V0ZXJzXG4gICAgfTtcbiAgICBjb25zdCByZWFkZXJzRmllbGQgPSB7XG4gICAgICBcInJvbGVcIjogXCJSRUFEXCIsXG4gICAgICBcImFkZHJlc3Nlc1wiOiByZWFkZXJzXG4gICAgfTtcbiAgICBjb25zdCB3cml0ZXJzRmllbGQgPSB7XG4gICAgICBcInJvbGVcIjogXCJXUklURVwiLFxuICAgICAgXCJhZGRyZXNzZXNcIjogd3JpdGVyc1xuICAgIH07XG4gICAgcmV0dXJuIG5ldyBSZWNvcmQoW1widHRsXCIsIFwic2VydmVyc1wiXSwgW3R0bCwgW3JvdXRlcnNGaWVsZCwgcmVhZGVyc0ZpZWxkLCB3cml0ZXJzRmllbGRdXSk7XG4gIH1cblxuICBmdW5jdGlvbiBleHBlY3RQcm90b2NvbEVycm9yKGFjdGlvbiwgZG9uZSkge1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXNvbHZlKGFjdGlvbigpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcHJvbWlzZS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9CZShQUk9UT0NPTF9FUlJPUik7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH1cblxuICBjbGFzcyBGYWtlU2Vzc2lvbiB7XG5cbiAgICBjb25zdHJ1Y3RvcihydW5SZXNwb25zZSwgZmFrZUNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX3J1blJlc3BvbnNlID0gcnVuUmVzcG9uc2U7XG4gICAgICB0aGlzLl9mYWtlQ29ubmVjdGlvbiA9IGZha2VDb25uZWN0aW9uO1xuICAgICAgdGhpcy5fY2xvc2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgc3RhdGljIHN1Y2Nlc3NmdWwocmVzdWx0KSB7XG4gICAgICByZXR1cm4gbmV3IEZha2VTZXNzaW9uKFByb21pc2UucmVzb2x2ZShyZXN1bHQpLCBudWxsKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZmFpbGVkKGVycm9yKSB7XG4gICAgICByZXR1cm4gbmV3IEZha2VTZXNzaW9uKFByb21pc2UucmVqZWN0KGVycm9yKSwgbnVsbCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHdpdGhGYWtlQ29ubmVjdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICByZXR1cm4gbmV3IEZha2VTZXNzaW9uKG51bGwsIGNvbm5lY3Rpb24pO1xuICAgIH1cblxuICAgIF9ydW4oaWdub3JlU3RhdGVtZW50LCBpZ25vcmVQYXJhbWV0ZXJzLCBzdGF0ZW1lbnRSdW5uZXIpIHtcbiAgICAgIGlmICh0aGlzLl9ydW5SZXNwb25zZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuUmVzcG9uc2U7XG4gICAgICB9XG4gICAgICBzdGF0ZW1lbnRSdW5uZXIodGhpcy5fZmFrZUNvbm5lY3Rpb24pO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgdGhpcy5fY2xvc2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc0Nsb3NlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jbG9zZWQ7XG4gICAgfVxuICB9XG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge1NlcnZlclZlcnNpb24sIFZFUlNJT05fM18yXzB9IGZyb20gJy4uLy4uL3NyYy92MS9pbnRlcm5hbC9zZXJ2ZXItdmVyc2lvbic7XG5cbmRlc2NyaWJlKCdTZXJ2ZXJWZXJzaW9uJywgKCkgPT4ge1xuXG4gIGl0KCdzaG91bGQgY29uc3RydWN0IHdpdGggY29ycmVjdCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgdmVyaWZ5VmVyc2lvbihuZXcgU2VydmVyVmVyc2lvbigyLCAzLCAxMCksIDIsIDMsIDEwKTtcbiAgICB2ZXJpZnlWZXJzaW9uKG5ldyBTZXJ2ZXJWZXJzaW9uKDMsIDIsIDApLCAzLCAyLCAwKTtcbiAgICB2ZXJpZnlWZXJzaW9uKG5ldyBTZXJ2ZXJWZXJzaW9uKDEsIDksIDEyKSwgMSwgOSwgMTIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGRlZmluZSBjb3JyZWN0IDMuMi4wIGNvbnN0YW50JywgKCkgPT4ge1xuICAgIHZlcmlmeVZlcnNpb24oVkVSU0lPTl8zXzJfMCwgMywgMiwgMCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFyc2UgXCJ1bmRlZmluZWRcIiBzdHJpbmdzIHRvIDMuMC4wIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zJywgKCkgPT4ge1xuICAgIHZlcmlmeVZlcnNpb24ocGFyc2UobnVsbCksIDMsIDAsIDApO1xuICAgIHZlcmlmeVZlcnNpb24ocGFyc2UodW5kZWZpbmVkKSwgMywgMCwgMCk7XG4gICAgdmVyaWZ5VmVyc2lvbihwYXJzZSgnJyksIDMsIDAsIDApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgdG8gcGFyc2Ugb2JqZWN0LCBhcnJheSBhbmQgZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHBhcnNlKHt9KSkudG9UaHJvd0Vycm9yKFR5cGVFcnJvcik7XG4gICAgZXhwZWN0KCgpID0+IHBhcnNlKFtdKSkudG9UaHJvd0Vycm9yKFR5cGVFcnJvcik7XG4gICAgZXhwZWN0KCgpID0+IHBhcnNlKCgpID0+IHtcbiAgICB9KSkudG9UaHJvd0Vycm9yKFR5cGVFcnJvcik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCB0byBwYXJzZSBpbGxlZ2FsIHN0cmluZ3MnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHBhcnNlKCdDYXQnKSkudG9UaHJvdygpO1xuICAgIGV4cGVjdCgoKSA9PiBwYXJzZSgnRG9nJykpLnRvVGhyb3coKTtcbiAgICBleHBlY3QoKCkgPT4gcGFyc2UoJ05lbzRqJykpLnRvVGhyb3coKTtcbiAgICBleHBlY3QoKCkgPT4gcGFyc2UoJ05lbzRqLycpKS50b1Rocm93KCk7XG4gICAgZXhwZWN0KCgpID0+IHBhcnNlKCdOb3QtTmVvNGovMy4xLjAnKSkudG9UaHJvdygpO1xuICAgIGV4cGVjdCgoKSA9PiBwYXJzZSgnTmVvNGovNScpKS50b1Rocm93KCk7XG4gICAgZXhwZWN0KCgpID0+IHBhcnNlKCdOZW80ai8zLicpKS50b1Rocm93KCk7XG4gICAgZXhwZWN0KCgpID0+IHBhcnNlKCdOZW80ai8xLkEnKSkudG9UaHJvdygpO1xuICAgIGV4cGVjdCgoKSA9PiBwYXJzZSgnTmVvNGovMS5IZWxsbycpKS50b1Rocm93KCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFyc2UgdmFsaWQgdmVyc2lvbiBzdHJpbmdzJywgKCkgPT4ge1xuICAgIHZlcmlmeVZlcnNpb24ocGFyc2UoJ05lbzRqLzMuMi4xJyksIDMsIDIsIDEpO1xuICAgIHZlcmlmeVZlcnNpb24ocGFyc2UoJ05lbzRqLzEuOS4xMCcpLCAxLCA5LCAxMCk7XG4gICAgdmVyaWZ5VmVyc2lvbihwYXJzZSgnTmVvNGovNy43Ny43NzcnKSwgNywgNzcsIDc3Nyk7XG5cbiAgICB2ZXJpZnlWZXJzaW9uKHBhcnNlKCdOZW80ai8zLjEwLjAtR0EnKSwgMywgMTAsIDApO1xuICAgIHZlcmlmeVZlcnNpb24ocGFyc2UoJ05lbzRqLzIuNS41LVJDMDEnKSwgMiwgNSwgNSk7XG4gICAgdmVyaWZ5VmVyc2lvbihwYXJzZSgnTmVvNGovMy4xLjEtU05BUFNIT1QnKSwgMywgMSwgMSk7XG4gICAgdmVyaWZ5VmVyc2lvbihwYXJzZSgnTmVvNGovMi4wLjAtTTA5JyksIDIsIDAsIDApO1xuXG4gICAgdmVyaWZ5VmVyc2lvbihwYXJzZSgnTmVvNGovMy4yJyksIDMsIDIsIDApO1xuICAgIHZlcmlmeVZlcnNpb24ocGFyc2UoJ05lbzRqLzEuNScpLCAxLCA1LCAwKTtcbiAgICB2ZXJpZnlWZXJzaW9uKHBhcnNlKCdOZW80ai80Mi40MicpLCA0MiwgNDIsIDApO1xuXG4gICAgdmVyaWZ5VmVyc2lvbihwYXJzZSgnTmVvNGovMi4yLUdBJyksIDIsIDIsIDApO1xuICAgIHZlcmlmeVZlcnNpb24ocGFyc2UoJ05lbzRqLzMuMC1SQzAxJyksIDMsIDAsIDApO1xuICAgIHZlcmlmeVZlcnNpb24ocGFyc2UoJ05lbzRqLzIuMy1TTkFQU0hPVCcpLCAyLCAzLCAwKTtcbiAgICB2ZXJpZnlWZXJzaW9uKHBhcnNlKCdOZW80ai8yLjItTTA5JyksIDIsIDIsIDApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNvbXBhcmUgZXF1YWwgdmVyc2lvbnMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KG5ldyBTZXJ2ZXJWZXJzaW9uKDMsIDEsIDApLmNvbXBhcmVUbyhuZXcgU2VydmVyVmVyc2lvbigzLCAxLCAwKSkpLnRvRXF1YWwoMCk7XG4gICAgZXhwZWN0KG5ldyBTZXJ2ZXJWZXJzaW9uKDEsIDksIDEyKS5jb21wYXJlVG8obmV3IFNlcnZlclZlcnNpb24oMSwgOSwgMTIpKSkudG9FcXVhbCgwKTtcbiAgICBleHBlY3QobmV3IFNlcnZlclZlcnNpb24oMiwgMywgOCkuY29tcGFyZVRvKG5ldyBTZXJ2ZXJWZXJzaW9uKDIsIDMsIDgpKSkudG9FcXVhbCgwKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjb21wYXJlIGNvcnJlY3RseSBieSBtYWpvcicsICgpID0+IHtcbiAgICBleHBlY3QobmV3IFNlcnZlclZlcnNpb24oMywgMSwgMCkuY29tcGFyZVRvKG5ldyBTZXJ2ZXJWZXJzaW9uKDIsIDEsIDApKSkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgIGV4cGVjdChuZXcgU2VydmVyVmVyc2lvbigyLCAxLCAwKS5jb21wYXJlVG8obmV3IFNlcnZlclZlcnNpb24oMywgMSwgMCkpKS50b0JlTGVzc1RoYW4oMCk7XG5cbiAgICBleHBlY3QobmV3IFNlcnZlclZlcnNpb24oMywgMSwgNCkuY29tcGFyZVRvKG5ldyBTZXJ2ZXJWZXJzaW9uKDEsIDksIDEwKSkpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICBleHBlY3QobmV3IFNlcnZlclZlcnNpb24oMSwgNSwgNDIpLmNvbXBhcmVUbyhuZXcgU2VydmVyVmVyc2lvbigxMCwgMTAsIDQzKSkpLnRvQmVMZXNzVGhhbigwKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjb21wYXJlIGNvcnJlY3RseSBieSBtaW5vcicsICgpID0+IHtcbiAgICBleHBlY3QobmV3IFNlcnZlclZlcnNpb24oMywgMywgMCkuY29tcGFyZVRvKG5ldyBTZXJ2ZXJWZXJzaW9uKDMsIDEsIDApKSkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgIGV4cGVjdChuZXcgU2VydmVyVmVyc2lvbigxLCAzLCA1KS5jb21wYXJlVG8obmV3IFNlcnZlclZlcnNpb24oMSwgOSwgNSkpKS50b0JlTGVzc1RoYW4oMCk7XG5cbiAgICBleHBlY3QobmV3IFNlcnZlclZlcnNpb24oMywgOSwgNSkuY29tcGFyZVRvKG5ldyBTZXJ2ZXJWZXJzaW9uKDMsIDEsIDIpKSkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgIGV4cGVjdChuZXcgU2VydmVyVmVyc2lvbigxLCA1LCA0MikuY29tcGFyZVRvKG5ldyBTZXJ2ZXJWZXJzaW9uKDEsIDEwLCAxMSkpKS50b0JlTGVzc1RoYW4oMCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY29tcGFyZSBjb3JyZWN0bHkgYnkgcGF0Y2gnLCAoKSA9PiB7XG4gICAgZXhwZWN0KG5ldyBTZXJ2ZXJWZXJzaW9uKDMsIDMsIDYpLmNvbXBhcmVUbyhuZXcgU2VydmVyVmVyc2lvbigzLCAzLCA1KSkpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICBleHBlY3QobmV3IFNlcnZlclZlcnNpb24oMSwgOCwgMikuY29tcGFyZVRvKG5ldyBTZXJ2ZXJWZXJzaW9uKDEsIDgsIDgpKSkudG9CZUxlc3NUaGFuKDApO1xuICAgIGV4cGVjdChuZXcgU2VydmVyVmVyc2lvbig5LCA5LCA5KS5jb21wYXJlVG8obmV3IFNlcnZlclZlcnNpb24oOSwgOSwgMCkpKS50b0JlR3JlYXRlclRoYW4oMCk7XG4gICAgZXhwZWN0KG5ldyBTZXJ2ZXJWZXJzaW9uKDMsIDMsIDMpLmNvbXBhcmVUbyhuZXcgU2VydmVyVmVyc2lvbigzLCAzLCA0MikpKS50b0JlTGVzc1RoYW4oMCk7XG4gIH0pO1xuXG59KTtcblxuZnVuY3Rpb24gdmVyaWZ5VmVyc2lvbihzZXJ2ZXJWZXJzaW9uLCBleHBlY3RlZE1ham9yLCBleHBlY3RlZE1pbm9yLCBleHBlY3RlZFBhdGNoKSB7XG4gIGV4cGVjdChzZXJ2ZXJWZXJzaW9uLm1ham9yKS50b0VxdWFsKGV4cGVjdGVkTWFqb3IpO1xuICBleHBlY3Qoc2VydmVyVmVyc2lvbi5taW5vcikudG9FcXVhbChleHBlY3RlZE1pbm9yKTtcbiAgZXhwZWN0KHNlcnZlclZlcnNpb24ucGF0Y2gpLnRvRXF1YWwoZXhwZWN0ZWRQYXRjaCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlKHN0cmluZykge1xuICByZXR1cm4gU2VydmVyVmVyc2lvbi5mcm9tU3RyaW5nKHN0cmluZyk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IG5lbzRqIGZyb20gJy4uLy4uL3NyYy92MSc7XG5cbmNsYXNzIFVuc3VwcG9ydGVkUGxhdGZvcm0ge1xuXG4gIHBhdGhKb2luKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTW9kdWxlIFxcJ3BhdGhcXCcgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtJyk7XG4gIH1cblxuICBzcGF3bihjb21tYW5kLCBhcmdzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNb2R1bGUgXFwnY2hpbGRfcHJvY2Vzc1xcJyBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm0nKTtcbiAgfVxuXG4gIGxpc3REaXIocGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTW9kdWxlIFxcJ2ZzXFwnIGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBwbGF0Zm9ybScpO1xuICB9XG5cbiAgcmVtb3ZlRGlyKHBhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01vZHVsZSBcXCdmc1xcJyBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm0nKTtcbiAgfVxuXG4gIGlzRGlyZWN0b3J5KHBhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01vZHVsZSBcXCdmc1xcJyBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm0nKTtcbiAgfVxufVxuXG5jbGFzcyBTdXBwb3J0ZWRQbGF0Zm9ybSBleHRlbmRzIFVuc3VwcG9ydGVkUGxhdGZvcm0ge1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbiAgICB0aGlzLl9jaGlsZFByb2Nlc3MgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7XG4gICAgdGhpcy5fZnMgPSByZXF1aXJlKCdmcy1leHRyYScpO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZSgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG5ldyBTdXBwb3J0ZWRQbGF0Zm9ybSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHBhdGhKb2luKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXRoLmpvaW4oLi4uQXJyYXkuZnJvbShhcmd1bWVudHMpKTtcbiAgfVxuXG4gIHNwYXduKGNvbW1hbmQsIGFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hpbGRQcm9jZXNzLnNwYXduU3luYyhjb21tYW5kLCBhcmdzKTtcbiAgfVxuXG4gIGxpc3REaXIocGF0aCkge1xuICAgIHJldHVybiB0aGlzLl9mcy5yZWFkZGlyU3luYyhwYXRoKTtcbiAgfVxuXG4gIHJlbW92ZURpcihwYXRoKSB7XG4gICAgaWYgKHRoaXMuaXNEaXJlY3RvcnkocGF0aCkpIHtcbiAgICAgIHRoaXMuX2ZzLnJlbW92ZVN5bmMocGF0aCk7XG4gICAgfVxuICB9XG5cbiAgaXNEaXJlY3RvcnkocGF0aCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9mcy5hY2Nlc3NTeW5jKHBhdGgpO1xuICAgICAgY29uc3Qgc3RhdCA9IHRoaXMuX2ZzLnN0YXRTeW5jKHBhdGgpO1xuICAgICAgcmV0dXJuIHN0YXQuaXNEaXJlY3RvcnkoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IHBsYXRmb3JtID0gU3VwcG9ydGVkUGxhdGZvcm0uY3JlYXRlKCkgfHwgbmV3IFVuc3VwcG9ydGVkUGxhdGZvcm0oKTtcblxuY29uc3QgdXNlcm5hbWUgPSAnbmVvNGonO1xuY29uc3QgcGFzc3dvcmQgPSAncGFzc3dvcmQnO1xuY29uc3QgYXV0aFRva2VuID0gbmVvNGouYXV0aC5iYXNpYyh1c2VybmFtZSwgcGFzc3dvcmQpO1xuXG5jb25zdCBuZW9DdHJsVmVyc2lvblBhcmFtID0gJy1lJztcbmNvbnN0IGRlZmF1bHROZW80alZlcnNpb24gPSAnMy4xLjMnO1xuY29uc3QgZGVmYXVsdE5lb0N0cmxBcmdzID0gYCR7bmVvQ3RybFZlcnNpb25QYXJhbX0gJHtkZWZhdWx0TmVvNGpWZXJzaW9ufWA7XG5cbmZ1bmN0aW9uIG5lbzRqQ2VydFBhdGgoZGlyKSB7XG4gIGNvbnN0IG5lbzRqRGlyID0gZmluZEV4aXN0aW5nTmVvNGpEaXJTdHJpY3QoZGlyKTtcbiAgcmV0dXJuIHBsYXRmb3JtLnBhdGhKb2luKG5lbzRqRGlyLCAnY2VydGlmaWNhdGVzJywgJ25lbzRqLmNlcnQnKTtcbn1cblxuZnVuY3Rpb24gbmVvNGpLZXlQYXRoKGRpcikge1xuICBjb25zdCBuZW80akRpciA9IGZpbmRFeGlzdGluZ05lbzRqRGlyU3RyaWN0KGRpcik7XG4gIHJldHVybiBwbGF0Zm9ybS5wYXRoSm9pbihuZW80akRpciwgJ2NlcnRpZmljYXRlcycsICduZW80ai5rZXknKTtcbn1cblxuZnVuY3Rpb24gc3RhcnQoZGlyLCBnaXZlbk5lb0N0cmxBcmdzKSB7XG4gIGNvbnN0IGJvbHRLaXRDaGVja1Jlc3VsdCA9IHJ1bkNvbW1hbmQoJ25lb2N0cmwtaW5zdGFsbCcsIFsnLWgnXSk7XG5cbiAgaWYgKGJvbHRLaXRDaGVja1Jlc3VsdC5zdWNjZXNzZnVsKSB7XG4gICAgY29uc3QgbmVvNGpEaXIgPSBpbnN0YWxsTmVvNGooZGlyLCBnaXZlbk5lb0N0cmxBcmdzKTtcbiAgICBjcmVhdGVEZWZhdWx0VXNlcihuZW80akRpcik7XG4gICAgc3RhcnROZW80aihuZW80akRpcik7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coJ0JvbHRraXQgdW5hdmFpbGFibGUuIFBsZWFzZSBpbnN0YWxsIGl0IGJ5IHJ1bm5pbmcgXFwncGlwIGluc3RhbGwgLS11cGdyYWRlIGJvbHRraXQuJyk7XG4gICAgY29uc29sZS5sb2coJ0ludGVncmF0aW9uIHRlc3RzIHdpbGwgYmUgc2tpcHBlZC4nKTtcbiAgICBjb25zb2xlLmxvZygnQ29tbWFuZCBcXCduZW9jdHJsLWluc3RhbGwgLWhcXCcgcmVzdWx0ZWQgaW5cXG4nICsgYm9sdEtpdENoZWNrUmVzdWx0LmZ1bGxPdXRwdXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0b3AoZGlyKSB7XG4gIGNvbnN0IG5lbzRqRGlyID0gZmluZEV4aXN0aW5nTmVvNGpEaXJTdHJpY3QoZGlyKTtcbiAgc3RvcE5lbzRqKG5lbzRqRGlyKTtcbn1cblxuZnVuY3Rpb24gcmVzdGFydChkaXIpIHtcbiAgY29uc3QgbmVvNGpEaXIgPSBmaW5kRXhpc3RpbmdOZW80akRpclN0cmljdChkaXIpO1xuICBzdG9wTmVvNGoobmVvNGpEaXIpO1xuICBzdGFydE5lbzRqKG5lbzRqRGlyKTtcbn1cblxuZnVuY3Rpb24gaW5zdGFsbE5lbzRqKGRpciwgZ2l2ZW5OZW9DdHJsQXJncykge1xuICBjb25zdCBuZW9DdHJsQXJncyA9IGdpdmVuTmVvQ3RybEFyZ3MgfHwgZGVmYXVsdE5lb0N0cmxBcmdzO1xuICBjb25zdCBhcmdzQXJyYXkgPSBuZW9DdHJsQXJncy5zcGxpdCgnICcpLm1hcCh2YWx1ZSA9PiB2YWx1ZS50cmltKCkpO1xuICBhcmdzQXJyYXkucHVzaChkaXIpO1xuXG4gIGNvbnN0IG5lbzRqVmVyc2lvbiA9IGV4dHJhY3ROZW80alZlcnNpb24oYXJnc0FycmF5KTtcbiAgY29uc3QgZXhpc3RpbmdOZW80akRpciA9IGZpbmRFeGlzdGluZ05lbzRqRGlyKGRpciwgbmVvNGpWZXJzaW9uKTtcbiAgaWYgKGV4aXN0aW5nTmVvNGpEaXIpIHtcbiAgICBjb25zb2xlLmxvZygnRm91bmQgZXhpc3RpbmcgTmVvNGogJyArIG5lbzRqVmVyc2lvbiArICcgaW5zdGFsbGF0aW9uIGF0OiBcXCcnICsgZXhpc3RpbmdOZW80akRpciArICdcXCcnKTtcbiAgICByZXR1cm4gZXhpc3RpbmdOZW80akRpcjtcbiAgfSBlbHNlIHtcbiAgICBwbGF0Zm9ybS5yZW1vdmVEaXIoZGlyKTtcblxuICAgIGNvbnNvbGUubG9nKCdJbnN0YWxsaW5nIE5lbzRqIHdpdGggbmVvY3RybCBhcmd1bWVudHM6IFxcJycgKyBuZW9DdHJsQXJncyArICdcXCcnKTtcbiAgICBjb25zdCByZXN1bHQgPSBydW5Db21tYW5kKCduZW9jdHJsLWluc3RhbGwnLCBhcmdzQXJyYXkpO1xuICAgIGlmICghcmVzdWx0LnN1Y2Nlc3NmdWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGluc3RhbGwgTmVvNGouXFxuJyArIHJlc3VsdC5mdWxsT3V0cHV0KTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YWxsZWROZW80akRpciA9IHJlc3VsdC5zdGRvdXQ7XG4gICAgY29uc29sZS5sb2coJ0luc3RhbGxlZCBOZW80aiB0bzogXFwnJyArIGluc3RhbGxlZE5lbzRqRGlyICsgJ1xcJycpO1xuICAgIHJldHVybiBpbnN0YWxsZWROZW80akRpcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0VXNlcihuZW80akRpcikge1xuICBjb25zb2xlLmxvZygnQ3JlYXRpbmcgdXNlciBcXCcnICsgdXNlcm5hbWUgKyAnXFwnIGZvciBOZW80aiBhdDogXFwnJyArIG5lbzRqRGlyICsgJ1xcJycpO1xuICBjb25zdCByZXN1bHQgPSBydW5Db21tYW5kKCduZW9jdHJsLWNyZWF0ZS11c2VyJywgW25lbzRqRGlyLCB1c2VybmFtZSwgcGFzc3dvcmRdKTtcbiAgaWYgKCFyZXN1bHQuc3VjY2Vzc2Z1bCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNyZWF0ZSB1c2VyOiBcXCcnICsgdXNlcm5hbWUgKyAnXFwnIGZvciBOZW80aiBhdDogJyArIG5lbzRqRGlyICsgJ1xcJ1xcbicgKyByZXN1bHQuZnVsbE91dHB1dCk7XG4gIH1cbiAgY29uc29sZS5sb2coJ0NyZWF0ZWQgdXNlciBcXCcnICsgdXNlcm5hbWUgKyAnXFwnIGZvciBOZW80aiBhdDogXFwnJyArIG5lbzRqRGlyICsgJ1xcJycpO1xufVxuXG5mdW5jdGlvbiBzdGFydE5lbzRqKG5lbzRqRGlyKSB7XG4gIGNvbnNvbGUubG9nKCdTdGFydGluZyBOZW80aiBhdDogXFwnJyArIG5lbzRqRGlyICsgJ1xcJycpO1xuICBjb25zdCByZXN1bHQgPSBydW5Db21tYW5kKCduZW9jdHJsLXN0YXJ0JywgW25lbzRqRGlyXSk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3NmdWwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBzdGFydCBOZW80ai5cXG4nICsgcmVzdWx0LmZ1bGxPdXRwdXQpO1xuICB9XG4gIGNvbnNvbGUubG9nKCdTdGFydGVkIE5lbzRqIGF0OiBcXCcnICsgbmVvNGpEaXIgKyAnXFwnJyk7XG59XG5cbmZ1bmN0aW9uIHN0b3BOZW80aihuZW80akRpcikge1xuICBjb25zb2xlLmxvZygnU3RvcHBpbmcgTmVvNGogYXQ6IFxcJycgKyBuZW80akRpciArICdcXCcnKTtcbiAgY29uc3QgcmVzdWx0ID0gcnVuQ29tbWFuZCgnbmVvY3RybC1zdG9wJywgW25lbzRqRGlyXSk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3NmdWwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBzdG9wIE5lbzRqIGF0OiBcXCcnICsgbmVvNGpEaXIgKyAnXFwnXFxuJyArIHJlc3VsdC5mdWxsT3V0cHV0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kRXhpc3RpbmdOZW80akRpclN0cmljdChkaXIpIHtcbiAgY29uc3QgbmVvNGpEaXIgPSBmaW5kRXhpc3RpbmdOZW80akRpcihkaXIsIG51bGwpO1xuICBpZiAoIW5lbzRqRGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZmluZCBOZW80aiBkaXIgaW46ICcke2Rpcn0nYCk7XG4gIH1cbiAgcmV0dXJuIG5lbzRqRGlyO1xufVxuXG5mdW5jdGlvbiBmaW5kRXhpc3RpbmdOZW80akRpcihkaXIsIG5lbzRqVmVyc2lvbikge1xuICBpZiAoIXBsYXRmb3JtLmlzRGlyZWN0b3J5KGRpcikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGRpcnMgPSBwbGF0Zm9ybS5saXN0RGlyKGRpcikuZmlsdGVyKGVudHJ5ID0+IGlzTmVvNGpEaXIoZW50cnksIG5lbzRqVmVyc2lvbikpXG4gICAgLm1hcChlbnRyeSA9PiBwbGF0Zm9ybS5wYXRoSm9pbihkaXIsIGVudHJ5KSlcbiAgICAuZmlsdGVyKGVudHJ5ID0+IHBsYXRmb3JtLmlzRGlyZWN0b3J5KGVudHJ5KSk7XG5cbiAgcmV0dXJuIGRpcnMubGVuZ3RoID09PSAxID8gZGlyc1swXSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTmVvNGpEaXIobmFtZSwgdmVyc2lvbikge1xuICBpZiAoIW5hbWUuc3RhcnRzV2l0aCgnbmVvNGonKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodmVyc2lvbiAmJiBuYW1lLmluZGV4T2YodmVyc2lvbikgPT09IC0xKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0TmVvNGpWZXJzaW9uKG5lb0N0cmxBcmdzKSB7XG4gIGNvbnN0IGluZGV4ID0gbmVvQ3RybEFyZ3MuaW5kZXhPZihuZW9DdHJsVmVyc2lvblBhcmFtKTtcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gJyR7bmVvQ3RybFZlcnNpb25QYXJhbX0nIHBhcmFtZXRlcmApO1xuICB9XG5cbiAgY29uc3QgdmVyc2lvbiA9IG5lb0N0cmxBcmdzW2luZGV4ICsgMV07XG4gIGlmICghdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgVmVyc2lvbiBpcyB1bmRlZmluZWQgaW46ICR7bmVvQ3RybEFyZ3N9YCk7XG4gIH1cblxuICByZXR1cm4gdmVyc2lvbi50cmltKCk7XG59XG5cbmZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZCwgYXJncykge1xuICBjb25zdCBzcGF3blJlc3VsdCA9IHBsYXRmb3JtLnNwYXduKGNvbW1hbmQsIGFyZ3MpO1xuICByZXR1cm4gbmV3IFJ1bkNvbW1hbmRSZXN1bHQoc3Bhd25SZXN1bHQpO1xufVxuXG5jbGFzcyBSdW5Db21tYW5kUmVzdWx0IHtcblxuICBjb25zdHJ1Y3RvcihzcGF3blJlc3VsdCkge1xuICAgIHRoaXMuc3VjY2Vzc2Z1bCA9IHNwYXduUmVzdWx0LnN0YXR1cyA9PT0gMDtcbiAgICB0aGlzLnN0ZG91dCA9IChzcGF3blJlc3VsdC5zdGRvdXQgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpO1xuICAgIHRoaXMuc3RkZXJyID0gKHNwYXduUmVzdWx0LnN0ZGVyciB8fCAnJykudG9TdHJpbmcoKS50cmltKCk7XG4gICAgdGhpcy5mdWxsT3V0cHV0ID0gJ1NURE9VVDpcXG5cXHQnICsgdGhpcy5zdGRvdXQgKyAnXFxuJyArXG4gICAgICAnU1RERVJSOlxcblxcdCcgKyB0aGlzLnN0ZGVyciArICdcXG4nICtcbiAgICAgICdFWElUIENPREU6XFxuXFx0JyArIHNwYXduUmVzdWx0LnN0YXR1cyArICdcXG4nICtcbiAgICAgICdFUlJPUjpcXG5cXHQnICsgc3Bhd25SZXN1bHQuZXJyb3IgKyAnXFxuJztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHN0YXJ0OiBzdGFydCxcbiAgc3RvcDogc3RvcCxcbiAgcmVzdGFydDogcmVzdGFydCxcbiAgbmVvNGpDZXJ0UGF0aDogbmVvNGpDZXJ0UGF0aCxcbiAgbmVvNGpLZXlQYXRoOiBuZW80aktleVBhdGgsXG4gIHVzZXJuYW1lOiB1c2VybmFtZSxcbiAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxuICBhdXRoVG9rZW46IGF1dGhUb2tlblxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgU3RyZWFtT2JzZXJ2ZXIgZnJvbSAnLi4vLi4vc3JjL3YxL2ludGVybmFsL3N0cmVhbS1vYnNlcnZlcic7XG5pbXBvcnQgRmFrZUNvbm5lY3Rpb24gZnJvbSAnLi9mYWtlLWNvbm5lY3Rpb24nO1xuXG5jb25zdCBOT19PUCA9ICgpID0+IHtcbn07XG5cbmRlc2NyaWJlKCdTdHJlYW1PYnNlcnZlcicsICgpID0+IHtcblxuICBpdCgncmVtZW1iZXJzIHJlc29sdmVkIGNvbm5lY3Rpb24nLCAoKSA9PiB7XG4gICAgY29uc3Qgc3RyZWFtT2JzZXJ2ZXIgPSBuZXdTdHJlYW1PYnNlcnZlcigpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuZXcgRmFrZUNvbm5lY3Rpb24oKTtcblxuICAgIHN0cmVhbU9ic2VydmVyLnJlc29sdmVDb25uZWN0aW9uKGNvbm5lY3Rpb24pO1xuXG4gICAgZXhwZWN0KHN0cmVhbU9ic2VydmVyLl9jb25uKS50b0JlKGNvbm5lY3Rpb24pO1xuICB9KTtcblxuICBpdCgncmVtZW1iZXJzIHN1YnNjcmliZXInLCAoKSA9PiB7XG4gICAgY29uc3Qgc3RyZWFtT2JzZXJ2ZXIgPSBuZXdTdHJlYW1PYnNlcnZlcigpO1xuICAgIGNvbnN0IHN1YnNjcmliZXIgPSBuZXdPYnNlcnZlcigpO1xuXG4gICAgc3RyZWFtT2JzZXJ2ZXIuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuXG4gICAgZXhwZWN0KHN0cmVhbU9ic2VydmVyLl9vYnNlcnZlcikudG9CZShzdWJzY3JpYmVyKTtcbiAgfSk7XG5cbiAgaXQoJ3Bhc3NlcyByZWNlaXZlZCByZWNvcmRzIHRvIHRoZSBzdWJzY3JpYmVyJywgKCkgPT4ge1xuICAgIGNvbnN0IHN0cmVhbU9ic2VydmVyID0gbmV3U3RyZWFtT2JzZXJ2ZXIoKTtcbiAgICBjb25zdCByZWNlaXZlZFJlY29yZHMgPSBbXTtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ld09ic2VydmVyKHJlY29yZCA9PiB7XG4gICAgICByZWNlaXZlZFJlY29yZHMucHVzaChyZWNvcmQpO1xuICAgIH0pO1xuXG4gICAgc3RyZWFtT2JzZXJ2ZXIuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICBzdHJlYW1PYnNlcnZlci5vbkNvbXBsZXRlZCh7ZmllbGRzOiBbJ0EnLCAnQicsICdDJ119KTtcblxuICAgIHN0cmVhbU9ic2VydmVyLm9uTmV4dChbMSwgMiwgM10pO1xuICAgIHN0cmVhbU9ic2VydmVyLm9uTmV4dChbMTEsIDIyLCAzM10pO1xuICAgIHN0cmVhbU9ic2VydmVyLm9uTmV4dChbMTExLCAyMjIsIDMzM10pO1xuXG4gICAgZXhwZWN0KHJlY2VpdmVkUmVjb3Jkcy5sZW5ndGgpLnRvRXF1YWwoMyk7XG4gICAgZXhwZWN0KHJlY2VpdmVkUmVjb3Jkc1swXS50b09iamVjdCgpKS50b0VxdWFsKHsnQSc6IDEsICdCJzogMiwgJ0MnOiAzfSk7XG4gICAgZXhwZWN0KHJlY2VpdmVkUmVjb3Jkc1sxXS50b09iamVjdCgpKS50b0VxdWFsKHsnQSc6IDExLCAnQic6IDIyLCAnQyc6IDMzfSk7XG4gICAgZXhwZWN0KHJlY2VpdmVkUmVjb3Jkc1syXS50b09iamVjdCgpKS50b0VxdWFsKHsnQSc6IDExMSwgJ0InOiAyMjIsICdDJzogMzMzfSk7XG4gIH0pO1xuXG4gIGl0KCdxdWV1ZXMgcmVjZWl2ZWQgcmVjb3JkIHdoZW4gbm8gc3Vic2NyaWJlcicsICgpID0+IHtcbiAgICBjb25zdCBzdHJlYW1PYnNlcnZlciA9IG5ld1N0cmVhbU9ic2VydmVyKCk7XG5cbiAgICBzdHJlYW1PYnNlcnZlci5vbkNvbXBsZXRlZCh7ZmllbGRzOiBbJ0EnLCAnQicsICdDJ119KTtcblxuICAgIHN0cmVhbU9ic2VydmVyLm9uTmV4dChbMTExMSwgMjIyMiwgMzMzM10pO1xuICAgIHN0cmVhbU9ic2VydmVyLm9uTmV4dChbMTExLCAyMjIsIDMzM10pO1xuICAgIHN0cmVhbU9ic2VydmVyLm9uTmV4dChbMTEsIDIyLCAzM10pO1xuICAgIHN0cmVhbU9ic2VydmVyLm9uTmV4dChbMSwgMiwgM10pO1xuXG4gICAgY29uc3QgcXVldWVkUmVjb3JkcyA9IHN0cmVhbU9ic2VydmVyLl9xdWV1ZWRSZWNvcmRzO1xuXG4gICAgZXhwZWN0KHF1ZXVlZFJlY29yZHMubGVuZ3RoKS50b0VxdWFsKDQpO1xuICAgIGV4cGVjdChxdWV1ZWRSZWNvcmRzWzBdLnRvT2JqZWN0KCkpLnRvRXF1YWwoeydBJzogMTExMSwgJ0InOiAyMjIyLCAnQyc6IDMzMzN9KTtcbiAgICBleHBlY3QocXVldWVkUmVjb3Jkc1sxXS50b09iamVjdCgpKS50b0VxdWFsKHsnQSc6IDExMSwgJ0InOiAyMjIsICdDJzogMzMzfSk7XG4gICAgZXhwZWN0KHF1ZXVlZFJlY29yZHNbMl0udG9PYmplY3QoKSkudG9FcXVhbCh7J0EnOiAxMSwgJ0InOiAyMiwgJ0MnOiAzM30pO1xuICAgIGV4cGVjdChxdWV1ZWRSZWNvcmRzWzNdLnRvT2JqZWN0KCkpLnRvRXF1YWwoeydBJzogMSwgJ0InOiAyLCAnQyc6IDN9KTtcbiAgfSk7XG5cbiAgaXQoJ3Bhc3NlcyByZWNlaXZlZCBlcnJvciB0aGUgc3Vic2NyaWJlcicsICgpID0+IHtcbiAgICBjb25zdCBzdHJlYW1PYnNlcnZlciA9IG5ld1N0cmVhbU9ic2VydmVyKCk7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ0ludmFsaWQgQ3lwaGVyIHN0YXRlbWVudCcpO1xuXG4gICAgbGV0IHJlY2VpdmVkRXJyb3IgPSBudWxsO1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3T2JzZXJ2ZXIoTk9fT1AsIGVycm9yID0+IHtcbiAgICAgIHJlY2VpdmVkRXJyb3IgPSBlcnJvcjtcbiAgICB9KTtcblxuICAgIHN0cmVhbU9ic2VydmVyLnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgc3RyZWFtT2JzZXJ2ZXIub25FcnJvcihlcnJvcik7XG5cbiAgICBleHBlY3QocmVjZWl2ZWRFcnJvcikudG9CZShlcnJvcik7XG4gIH0pO1xuXG4gIGl0KCdwYXNzZXMgZXhpc3RpbmcgZXJyb3IgdG8gYSBuZXcgc3Vic2NyaWJlcicsICgpID0+IHtcbiAgICBjb25zdCBzdHJlYW1PYnNlcnZlciA9IG5ld1N0cmVhbU9ic2VydmVyKCk7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ0ludmFsaWQgQ3lwaGVyIHN0YXRlbWVudCcpO1xuXG4gICAgc3RyZWFtT2JzZXJ2ZXIub25FcnJvcihlcnJvcik7XG5cbiAgICBzdHJlYW1PYnNlcnZlci5zdWJzY3JpYmUobmV3T2JzZXJ2ZXIoTk9fT1AsIHJlY2VpdmVkRXJyb3IgPT4ge1xuICAgICAgZXhwZWN0KHJlY2VpdmVkRXJyb3IpLnRvQmUoZXJyb3IpO1xuICAgIH0pKTtcbiAgfSk7XG5cbiAgaXQoJ3Bhc3NlcyBxdWV1ZWQgcmVjb3JkcyB0byBhIG5ldyBzdWJzY3JpYmVyJywgKCkgPT4ge1xuICAgIGNvbnN0IHN0cmVhbU9ic2VydmVyID0gbmV3U3RyZWFtT2JzZXJ2ZXIoKTtcblxuICAgIHN0cmVhbU9ic2VydmVyLm9uQ29tcGxldGVkKHtmaWVsZHM6IFsnQScsICdCJywgJ0MnXX0pO1xuXG4gICAgc3RyZWFtT2JzZXJ2ZXIub25OZXh0KFsxLCAyLCAzXSk7XG4gICAgc3RyZWFtT2JzZXJ2ZXIub25OZXh0KFsxMSwgMjIsIDMzXSk7XG4gICAgc3RyZWFtT2JzZXJ2ZXIub25OZXh0KFsxMTEsIDIyMiwgMzMzXSk7XG5cbiAgICBjb25zdCByZWNlaXZlZFJlY29yZHMgPSBbXTtcbiAgICBzdHJlYW1PYnNlcnZlci5zdWJzY3JpYmUobmV3T2JzZXJ2ZXIocmVjb3JkID0+IHtcbiAgICAgIHJlY2VpdmVkUmVjb3Jkcy5wdXNoKHJlY29yZCk7XG4gICAgfSkpO1xuXG4gICAgZXhwZWN0KHJlY2VpdmVkUmVjb3Jkcy5sZW5ndGgpLnRvRXF1YWwoMyk7XG4gICAgZXhwZWN0KHJlY2VpdmVkUmVjb3Jkc1swXS50b09iamVjdCgpKS50b0VxdWFsKHsnQSc6IDEsICdCJzogMiwgJ0MnOiAzfSk7XG4gICAgZXhwZWN0KHJlY2VpdmVkUmVjb3Jkc1sxXS50b09iamVjdCgpKS50b0VxdWFsKHsnQSc6IDExLCAnQic6IDIyLCAnQyc6IDMzfSk7XG4gICAgZXhwZWN0KHJlY2VpdmVkUmVjb3Jkc1syXS50b09iamVjdCgpKS50b0VxdWFsKHsnQSc6IDExMSwgJ0InOiAyMjIsICdDJzogMzMzfSk7XG4gIH0pO1xuXG4gIGl0KCdwYXNzZXMgZXhpc3RpbmcgbWV0YWRhdGEgdG8gYSBuZXcgc3Vic2NyaWJlcicsICgpID0+IHtcbiAgICBjb25zdCBzdHJlYW1PYnNlcnZlciA9IG5ld1N0cmVhbU9ic2VydmVyKCk7XG5cbiAgICBzdHJlYW1PYnNlcnZlci5vbkNvbXBsZXRlZCh7ZmllbGRzOiBbJ0ZvbycsICdCYXInLCAnQmF6JywgJ1F1eCddfSk7XG4gICAgc3RyZWFtT2JzZXJ2ZXIub25Db21wbGV0ZWQoe21ldGFEYXRhRmllbGQxOiAndmFsdWUxJywgbWV0YURhdGFGaWVsZDI6ICd2YWx1ZTInfSk7XG5cbiAgICBsZXQgcmVjZWl2ZWRNZXRhRGF0YSA9IG51bGw7XG4gICAgc3RyZWFtT2JzZXJ2ZXIuc3Vic2NyaWJlKG5ld09ic2VydmVyKE5PX09QLCBOT19PUCwgbWV0YURhdGEgPT4ge1xuICAgICAgcmVjZWl2ZWRNZXRhRGF0YSA9IG1ldGFEYXRhO1xuICAgIH0pKTtcblxuICAgIGV4cGVjdChyZWNlaXZlZE1ldGFEYXRhKS50b0VxdWFsKHttZXRhRGF0YUZpZWxkMTogJ3ZhbHVlMScsIG1ldGFEYXRhRmllbGQyOiAndmFsdWUyJ30pO1xuICB9KTtcblxufSk7XG5cbmZ1bmN0aW9uIG5ld1N0cmVhbU9ic2VydmVyKCkge1xuICByZXR1cm4gbmV3IFN0cmVhbU9ic2VydmVyKCk7XG59XG5cbmZ1bmN0aW9uIG5ld09ic2VydmVyKG9uTmV4dCA9IE5PX09QLCBvbkVycm9yID0gTk9fT1AsIG9uQ29tcGxldGVkID0gTk9fT1ApIHtcbiAgcmV0dXJuIHtcbiAgICBvbk5leHQ6IG9uTmV4dCxcbiAgICBvbkVycm9yOiBvbkVycm9yLFxuICAgIG9uQ29tcGxldGVkOiBvbkNvbXBsZXRlZFxuICB9O1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jbGFzcyBTZXRUaW1lb3V0TW9jayB7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fY2xlYXJTdGF0ZSgpO1xuICB9XG5cbiAgaW5zdGFsbCgpIHtcbiAgICB0aGlzLl9vcmlnaW5hbFNldFRpbWVvdXQgPSBnbG9iYWwuc2V0VGltZW91dDtcbiAgICBnbG9iYWwuc2V0VGltZW91dCA9IChjb2RlLCBkZWxheSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9wYXVzZWQpIHtcbiAgICAgICAgY29kZSgpO1xuICAgICAgICB0aGlzLmludm9jYXRpb25EZWxheXMucHVzaChkZWxheSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fdGltZW91dElkQ291bnRlcisrO1xuICAgIH07XG5cbiAgICB0aGlzLl9vcmlnaW5hbENsZWFyVGltZW91dCA9IGdsb2JhbC5jbGVhclRpbWVvdXQ7XG4gICAgZ2xvYmFsLmNsZWFyVGltZW91dCA9IGlkID0+IHtcbiAgICAgIHRoaXMuY2xlYXJlZFRpbWVvdXRzLnB1c2goaWQpO1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHBhdXNlKCkge1xuICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XG4gIH1cblxuICB1bmluc3RhbGwoKSB7XG4gICAgZ2xvYmFsLnNldFRpbWVvdXQgPSB0aGlzLl9vcmlnaW5hbFNldFRpbWVvdXQ7XG4gICAgZ2xvYmFsLmNsZWFyVGltZW91dCA9IHRoaXMuX29yaWdpbmFsQ2xlYXJUaW1lb3V0O1xuICAgIHRoaXMuX2NsZWFyU3RhdGUoKTtcbiAgfVxuXG4gIHNldFRpbWVvdXRPcmlnaW5hbChjb2RlLCBkZWxheSkge1xuICAgIHJldHVybiB0aGlzLl9vcmlnaW5hbFNldFRpbWVvdXQuY2FsbChudWxsLCBjb2RlLCBkZWxheSk7XG4gIH1cblxuICBfY2xlYXJTdGF0ZSgpIHtcbiAgICB0aGlzLl9vcmlnaW5hbFNldFRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMuX29yaWdpbmFsQ2xlYXJUaW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLl90aW1lb3V0SWRDb3VudGVyID0gMDtcblxuICAgIHRoaXMuaW52b2NhdGlvbkRlbGF5cyA9IFtdO1xuICAgIHRoaXMuY2xlYXJlZFRpbWVvdXRzID0gW107XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHNldFRpbWVvdXRNb2NrID0gbmV3IFNldFRpbWVvdXRNb2NrKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBoaWphY2tOZXh0RGF0ZU5vd0NhbGwobmV3VmFsdWUpIHtcbiAgY29uc3Qgb3JpZ2luYWxEYXRlID0gZ2xvYmFsLkRhdGU7XG4gIGdsb2JhbC5EYXRlID0gbmV3IEZha2VEYXRlKG9yaWdpbmFsRGF0ZSwgbmV3VmFsdWUpO1xufVxuXG5jbGFzcyBGYWtlRGF0ZSB7XG5cbiAgY29uc3RydWN0b3Iob3JpZ2luYWxEYXRlLCBuZXh0Tm93VmFsdWUpIHtcbiAgICB0aGlzLl9vcmlnaW5hbERhdGUgPSBvcmlnaW5hbERhdGU7XG4gICAgdGhpcy5fbmV4dE5vd1ZhbHVlID0gbmV4dE5vd1ZhbHVlO1xuICB9XG5cbiAgbm93KCkge1xuICAgIGdsb2JhbC5EYXRlID0gdGhpcy5fb3JpZ2luYWxEYXRlO1xuICAgIHJldHVybiB0aGlzLl9uZXh0Tm93VmFsdWU7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIE5vZGVDaGFubmVsID0gcmVxdWlyZSgnLi4vLi4vbGliL3YxL2ludGVybmFsL2NoLW5vZGUuanMnKS5kZWZhdWx0O1xudmFyIG5lbzRqID0gcmVxdWlyZShcIi4uLy4uL2xpYi92MVwiKTtcbnZhciBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGhhc0ZlYXR1cmUgPSByZXF1aXJlKFwiLi4vLi4vbGliL3YxL2ludGVybmFsL2ZlYXR1cmVzXCIpLmRlZmF1bHQ7XG52YXIgc2hhcmVkTmVvNGogPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvc2hhcmVkLW5lbzRqXCIpLmRlZmF1bHQ7XG5cbmRlc2NyaWJlKCd0cnVzdC1zaWduZWQtY2VydGlmaWNhdGVzJywgZnVuY3Rpb24oKSB7XG5cbiAgdmFyIGRyaXZlcjtcbiAgdmFyIGxvZztcbiAgYmVmb3JlRWFjaChmdW5jdGlvbigpIHtcbiAgICBsb2cgPSBtdXRlQ29uc29sZUxvZygpO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCByZWplY3QgdW5rbm93biBjZXJ0aWZpY2F0ZXMnLCBmdW5jdGlvbihkb25lKSB7XG4gICAgLy8gQXNzdW1pbmcgd2Ugb25seSBydW4gdGhpcyB0ZXN0IG9uIE5vZGVKU1xuICAgIGlmKCAhTm9kZUNoYW5uZWwuYXZhaWxhYmxlICkge1xuICAgICAgZG9uZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdpdmVuXG4gICAgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdDovL2xvY2FsaG9zdFwiLCBzaGFyZWROZW80ai5hdXRoVG9rZW4sIHtcbiAgICAgIGVuY3J5cHRlZDogXCJFTkNSWVBUSU9OX09OXCIsXG4gICAgICB0cnVzdDogXCJUUlVTVF9TSUdORURfQ0VSVElGSUNBVEVTXCIsXG4gICAgICB0cnVzdGVkQ2VydGlmaWNhdGVzOiBbXCJ0ZXN0L3Jlc291cmNlcy9yYW5kb20uY2VydGlmaWNhdGVcIl1cbiAgICB9KTtcblxuICAgIC8vIFdoZW5cbiAgICBkcml2ZXIuc2Vzc2lvbigpLnJ1biggXCJSRVRVUk4gMVwiKS5jYXRjaCggZnVuY3Rpb24oZXJyKSB7XG4gICAgICBleHBlY3QoIGVyci5tZXNzYWdlICkudG9Db250YWluKCBcIlNlcnZlciBjZXJ0aWZpY2F0ZSBpcyBub3QgdHJ1c3RlZFwiICk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYWNjZXB0IGtub3duIGNlcnRpZmljYXRlcycsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAvLyBBc3N1bWluZyB3ZSBvbmx5IHJ1biB0aGlzIHRlc3Qgb24gTm9kZUpTIHdpdGggVE9GVSBzdXBwb3J0XG4gICAgaWYoICFOb2RlQ2hhbm5lbC5hdmFpbGFibGUgKSB7XG4gICAgICBkb25lKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2l2ZW5cbiAgICBkcml2ZXIgPSBuZW80ai5kcml2ZXIoXCJib2x0Oi8vbG9jYWxob3N0XCIsIHNoYXJlZE5lbzRqLmF1dGhUb2tlbiwge1xuICAgICAgZW5jcnlwdGVkOiBcIkVOQ1JZUFRJT05fT05cIixcbiAgICAgIHRydXN0OiBcIlRSVVNUX1NJR05FRF9DRVJUSUZJQ0FURVNcIixcbiAgICAgIHRydXN0ZWRDZXJ0aWZpY2F0ZXM6IFtuZW80akNlcnRQYXRoKCldXG4gICAgfSk7XG5cbiAgICAvLyBXaGVuXG4gICAgZHJpdmVyLnNlc3Npb24oKS5ydW4oIFwiUkVUVVJOIDFcIikudGhlbiggZG9uZSApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGhhbmRsZSBtdWx0aXBsZSBjZXJ0aWZpY2F0ZXMnLCBmdW5jdGlvbihkb25lKSB7XG4gICAgLy8gQXNzdW1pbmcgd2Ugb25seSBydW4gdGhpcyB0ZXN0IG9uIE5vZGVKUyB3aXRoIFRPRlUgc3VwcG9ydFxuICAgIGlmKCAhTm9kZUNoYW5uZWwuYXZhaWxhYmxlICkge1xuICAgICAgZG9uZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdpdmVuXG4gICAgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdDovL2xvY2FsaG9zdFwiLCBzaGFyZWROZW80ai5hdXRoVG9rZW4sIHtcbiAgICAgIGVuY3J5cHRlZDogdHJ1ZSxcbiAgICAgIHRydXN0OiBcIlRSVVNUX1NJR05FRF9DRVJUSUZJQ0FURVNcIixcbiAgICAgIHRydXN0ZWRDZXJ0aWZpY2F0ZXM6IFtuZW80akNlcnRQYXRoKCksIG5lbzRqQ2VydFBhdGgoKV1cbiAgICB9KTtcblxuICAgIC8vIFdoZW5cbiAgICBkcml2ZXIuc2Vzc2lvbigpLnJ1biggXCJSRVRVUk4gMVwiKS50aGVuKCBkb25lICk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbigpe1xuICAgIGlmKCBkcml2ZXIgKSB7XG4gICAgICBkcml2ZXIuY2xvc2UoKTtcbiAgICB9XG4gICAgdW5NdXRlQ29uc29sZUxvZyhsb2cpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgndHJ1c3QtYWxsLWNlcnRpZmljYXRlcycsIGZ1bmN0aW9uICgpIHtcblxuICB2YXIgZHJpdmVyO1xuICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBkZWZhdWx0IGNlcnRpZmljYXRlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAvLyBBc3N1bWluZyB3ZSBvbmx5IHJ1biB0aGlzIHRlc3Qgb24gTm9kZUpTIHdpdGggVEFDIHN1cHBvcnRcbiAgICBpZiAoIWhhc0ZlYXR1cmUoXCJ0cnVzdF9hbGxfY2VydGlmaWNhdGVzXCIpKSB7XG4gICAgICBkb25lKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2l2ZW5cbiAgICBkcml2ZXIgPSBuZW80ai5kcml2ZXIoXCJib2x0Oi8vbG9jYWxob3N0XCIsIHNoYXJlZE5lbzRqLmF1dGhUb2tlbiwge1xuICAgICAgZW5jcnlwdGVkOiBcIkVOQ1JZUFRJT05fT05cIixcbiAgICAgIHRydXN0OiBcIlRSVVNUX0FMTF9DRVJUSUZJQ0FURVNcIlxuICAgIH0pO1xuXG4gICAgLy8gV2hlblxuICAgIGRyaXZlci5zZXNzaW9uKCkucnVuKFwiUkVUVVJOIDFcIikudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICBleHBlY3QocmVzdWx0LnJlY29yZHNbMF0uZ2V0KDApLnRvTnVtYmVyKCkpLnRvQmUoMSk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGRyaXZlcikge1xuICAgICAgZHJpdmVyLmNsb3NlKCk7XG4gICAgfVxuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgndHJ1c3QtY3VzdG9tLWNhLXNpZ25lZC1jZXJ0aWZpY2F0ZXMnLCBmdW5jdGlvbigpIHtcblxuICB2YXIgZHJpdmVyO1xuICBpdCgnc2hvdWxkIHJlamVjdCB1bmtub3duIGNlcnRpZmljYXRlcycsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAvLyBBc3N1bWluZyB3ZSBvbmx5IHJ1biB0aGlzIHRlc3Qgb24gTm9kZUpTXG4gICAgaWYoICFOb2RlQ2hhbm5lbC5hdmFpbGFibGUgKSB7XG4gICAgICBkb25lKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2l2ZW5cbiAgICBkcml2ZXIgPSBuZW80ai5kcml2ZXIoXCJib2x0Oi8vbG9jYWxob3N0XCIsIHNoYXJlZE5lbzRqLmF1dGhUb2tlbiwge1xuICAgICAgZW5jcnlwdGVkOiB0cnVlLFxuICAgICAgdHJ1c3Q6IFwiVFJVU1RfQ1VTVE9NX0NBX1NJR05FRF9DRVJUSUZJQ0FURVNcIixcbiAgICAgIHRydXN0ZWRDZXJ0aWZpY2F0ZXM6IFtcInRlc3QvcmVzb3VyY2VzL3JhbmRvbS5jZXJ0aWZpY2F0ZVwiXVxuICAgIH0pO1xuXG4gICAgLy8gV2hlblxuICAgIGRyaXZlci5zZXNzaW9uKCkucnVuKCBcIlJFVFVSTiAxXCIpLmNhdGNoKCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIGV4cGVjdCggZXJyLm1lc3NhZ2UgKS50b0NvbnRhaW4oIFwiU2VydmVyIGNlcnRpZmljYXRlIGlzIG5vdCB0cnVzdGVkXCIgKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhY2NlcHQga25vd24gY2VydGlmaWNhdGVzJywgZnVuY3Rpb24oZG9uZSkge1xuICAgIC8vIEFzc3VtaW5nIHdlIG9ubHkgcnVuIHRoaXMgdGVzdCBvbiBOb2RlSlMgd2l0aCBUT0ZVIHN1cHBvcnRcbiAgICBpZiggIU5vZGVDaGFubmVsLmF2YWlsYWJsZSApIHtcbiAgICAgIGRvbmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHaXZlblxuICAgIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RcIiwgc2hhcmVkTmVvNGouYXV0aFRva2VuLCB7XG4gICAgICBlbmNyeXB0ZWQ6IHRydWUsXG4gICAgICB0cnVzdDogXCJUUlVTVF9DVVNUT01fQ0FfU0lHTkVEX0NFUlRJRklDQVRFU1wiLFxuICAgICAgdHJ1c3RlZENlcnRpZmljYXRlczogW25lbzRqQ2VydFBhdGgoKV1cbiAgICB9KTtcblxuICAgIC8vIFdoZW5cbiAgICBkcml2ZXIuc2Vzc2lvbigpLnJ1biggXCJSRVRVUk4gMVwiKS50aGVuKCBkb25lICk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbigpe1xuICAgIGlmKCBkcml2ZXIgKSB7XG4gICAgICBkcml2ZXIuY2xvc2UoKTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCd0cnVzdC1zeXN0ZW0tY2Etc2lnbmVkLWNlcnRpZmljYXRlcycsIGZ1bmN0aW9uKCkge1xuXG4gIHZhciBkcml2ZXI7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgdW5rbm93biBjZXJ0aWZpY2F0ZXMnLCBmdW5jdGlvbihkb25lKSB7XG4gICAgLy8gQXNzdW1pbmcgd2Ugb25seSBydW4gdGhpcyB0ZXN0IG9uIE5vZGVKU1xuICAgIGlmKCAhTm9kZUNoYW5uZWwuYXZhaWxhYmxlICkge1xuICAgICAgZG9uZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdpdmVuXG4gICAgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdDovL2xvY2FsaG9zdFwiLCBzaGFyZWROZW80ai5hdXRoVG9rZW4sIHtcbiAgICAgIGVuY3J5cHRlZDogdHJ1ZSxcbiAgICAgIHRydXN0OiBcIlRSVVNUX1NZU1RFTV9DQV9TSUdORURfQ0VSVElGSUNBVEVTXCJcbiAgICB9KTtcblxuICAgIC8vIFdoZW5cbiAgICBkcml2ZXIuc2Vzc2lvbigpLnJ1biggXCJSRVRVUk4gMVwiKS5jYXRjaCggZnVuY3Rpb24oZXJyKSB7XG4gICAgICBleHBlY3QoIGVyci5tZXNzYWdlICkudG9Db250YWluKCBcIlNlcnZlciBjZXJ0aWZpY2F0ZSBpcyBub3QgdHJ1c3RlZFwiICk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCd0cnVzdC1vbi1maXJzdC11c2UnLCBmdW5jdGlvbigpIHtcblxuICB2YXIgZHJpdmVyO1xuICB2YXIgbG9nO1xuICBiZWZvcmVFYWNoKGZ1bmN0aW9uKCkge1xuICAgIGxvZyA9IG11dGVDb25zb2xlTG9nKCk7XG4gIH0pO1xuICBhZnRlckVhY2goZnVuY3Rpb24oKXtcbiAgICB1bk11dGVDb25zb2xlTG9nKGxvZyk7XG4gICAgaWYoIGRyaXZlciApIHtcbiAgICAgIGRyaXZlci5jbG9zZSgpO1xuICAgIH1cbiAgfSk7XG4gIGl0KFwic2hvdWxkIGNyZWF0ZSBrbm93bl9ob3N0cyBmaWxlIGluY2x1ZGluZyBmdWxsIHBhdGggaWYgaXQgZG9lc24ndCBleGlzdFwiLCBmdW5jdGlvbihkb25lKSB7XG4gICAgLy8gQXNzdW1pbmcgd2Ugb25seSBydW4gdGhpcyB0ZXN0IG9uIE5vZGVKUyB3aXRoIFRPRlUgc3VwcG9ydFxuICAgIGlmKCAhaGFzRmVhdHVyZShcInRydXN0X29uX2ZpcnN0X3VzZVwiKSApIHtcbiAgICAgIGRvbmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHaXZlblxuICAgIC8vIE5vbiBleGlzdGluZyBkaXJlY3RvcnlcbiAgICB2YXIga25vd25Ib3N0c0RpciA9IHBhdGguam9pbihcImJ1aWxkXCIsIFwiaG9zdHNcIik7XG4gICAgdmFyIGtub3duSG9zdHNQYXRoID0gcGF0aC5qb2luKGtub3duSG9zdHNEaXIsIFwia25vd25faG9zdHNcIik7XG4gICAgdHJ5IHtcbiAgICAgIGZzLnVubGlua1N5bmMoa25vd25Ib3N0c1BhdGgpO1xuICAgIH0gY2F0Y2ggKF8pIHsgfVxuICAgIHRyeSB7XG4gICAgICBmcy5ybWRpclN5bmMoa25vd25Ib3N0c0Rpcik7XG4gICAgfSBjYXRjaCAoXykgeyB9XG5cbiAgICBkcml2ZXIgPSBuZW80ai5kcml2ZXIoXCJib2x0Oi8vbG9jYWxob3N0XCIsIHNoYXJlZE5lbzRqLmF1dGhUb2tlbiwge1xuICAgICAgZW5jcnlwdGVkOiB0cnVlLFxuICAgICAgdHJ1c3Q6IFwiVFJVU1RfT05fRklSU1RfVVNFXCIsXG4gICAgICBrbm93bkhvc3RzOiBrbm93bkhvc3RzUGF0aFxuICAgIH0pO1xuXG4gICAgLy8gV2hlblxuICAgIGRyaXZlci5zZXNzaW9uKCkucnVuKCBcIlJFVFVSTiAxXCIpLnRoZW4oIGZ1bmN0aW9uKCkge1xuICAgICAgLy8gVGhlbiB3ZSBnZXQgdG8gaGVyZS5cbiAgICAgIC8vIEFuZCB0aGVuIHRoZSBrbm93bl9ob3N0cyBmaWxlIHNob3VsZCBoYXZlIGJlZW4gY3JlYXRlZFxuICAgICAgZXhwZWN0KCBmdW5jdGlvbigpIHsgZnMuYWNjZXNzU3luYyhrbm93bkhvc3RzUGF0aCkgfSkubm90LnRvVGhyb3coKVxuICAgICAgZG9uZSgpO1xuICAgIH0pLmNhdGNoKCBmdW5jdGlvbigpe1xuICAgICAgLy8gSnVzdCBoZXJlIHRvIGdyYWNlZnVsbHkgZXhpdCB0ZXN0IG9uIGZhaWx1cmUgc28gd2UgZG9uJ3QgZ2V0IHRpbWVvdXRzXG4gICAgICAvLyB3aGVuIGRvbmUoKSBpc24ndCBjYWxsZWQuXG4gICAgICBleHBlY3QoICd0aGlzJyApLnRvQmUoICd0byBuZXZlciBoYXBwZW4nICk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IHRocm93IGFuIGVycm9yIGlmIHRoZSBob3N0IGZpbGUgY29udGFpbnMgdHdvIGhvc3QgZHVwbGljYXRlcycsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gQXNzdW1pbmcgd2Ugb25seSBydW4gdGhpcyB0ZXN0IG9uIE5vZGVKUyB3aXRoIFRPRlUgc3VwcG9ydFxuICAgIGlmKCAhaGFzRmVhdHVyZShcInRydXN0X29uX2ZpcnN0X3VzZVwiKSApIHtcbiAgICAgIGRvbmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHaXZlblxuICAgIHZhciBrbm93bkhvc3RzUGF0aCA9IFwiYnVpbGQva25vd25faG9zdHNcIjtcbiAgICBpZiggZnMuZXhpc3RzU3luYyhrbm93bkhvc3RzUGF0aCkgKSB7XG4gICAgICBmcy51bmxpbmtTeW5jKGtub3duSG9zdHNQYXRoKTtcbiAgICB9XG5cbiAgICBkcml2ZXIgPSBuZW80ai5kcml2ZXIoXCJib2x0Oi8vbG9jYWxob3N0XCIsIHNoYXJlZE5lbzRqLmF1dGhUb2tlbiwge1xuICAgICAgZW5jcnlwdGVkOiB0cnVlLFxuICAgICAgdHJ1c3Q6IFwiVFJVU1RfT05fRklSU1RfVVNFXCIsXG4gICAgICBrbm93bkhvc3RzOiBrbm93bkhvc3RzUGF0aFxuICAgIH0pO1xuXG4gICAgLy8gY3JlYXRlIHNlc3Npb24gYW5kIHRyYW5zYWN0aW9uIHRvIGZvcmNlIGNyZWF0aW9uIG9mIG5ldyBjb25uZWN0aW9uIGFuZCB3cml0aW5nIGludG8gdGhlIGtub3duSG9zdCBmaWxlXG4gICAgY29uc3Qgc2Vzc2lvbiA9IGRyaXZlci5zZXNzaW9uKCk7XG4gICAgZXhwZWN0KHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgLy8gZHVwbGljYXRlIHRoZSBzYW1lIHNlcnZlcklkIHR3aWNlXG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ZXh0ID0gZnMucmVhZEZpbGVTeW5jKGtub3duSG9zdHNQYXRoLCAndXRmOCcpO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhrbm93bkhvc3RzUGF0aCwgdGV4dCArIHRleHQpO1xuICAgIH0sIDEwMDApO1xuXG4gICAgLy8gV2hlblxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBkcml2ZXIuc2Vzc2lvbigpLnJ1bihcIlJFVFVSTiB0cnVlIEFTIGFcIikudGhlbiggZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAvLyBUaGVuIHdlIGdldCB0byBoZXJlLlxuICAgICAgICBleHBlY3QoIGRhdGEucmVjb3Jkc1swXS5nZXQoJ2EnKSApLnRvQmUoIHRydWUgKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSwgMjAwMCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYWNjZXB0IHByZXZpb3VzbHkgdW4tc2VlbiBob3N0cycsIGZ1bmN0aW9uKGRvbmUpIHtcbiAgICAvLyBBc3N1bWluZyB3ZSBvbmx5IHJ1biB0aGlzIHRlc3Qgb24gTm9kZUpTIHdpdGggVE9GVSBzdXBwb3J0XG4gICAgaWYoICFoYXNGZWF0dXJlKFwidHJ1c3Rfb25fZmlyc3RfdXNlXCIpICkge1xuICAgICAgZG9uZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdpdmVuXG4gICAgdmFyIGtub3duSG9zdHNQYXRoID0gXCJidWlsZC9rbm93bl9ob3N0c1wiO1xuICAgIGlmKCBmcy5leGlzdHNTeW5jKGtub3duSG9zdHNQYXRoKSApIHtcbiAgICAgIGZzLnVubGlua1N5bmMoa25vd25Ib3N0c1BhdGgpO1xuICAgIH1cblxuICAgIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RcIiwgc2hhcmVkTmVvNGouYXV0aFRva2VuLCB7XG4gICAgICBlbmNyeXB0ZWQ6IFwiRU5DUllQVElPTl9PTlwiLFxuICAgICAgdHJ1c3Q6IFwiVFJVU1RfT05fRklSU1RfVVNFXCIsXG4gICAgICBrbm93bkhvc3RzOiBrbm93bkhvc3RzUGF0aFxuICAgIH0pO1xuXG4gICAgLy8gV2hlblxuICAgIGRyaXZlci5zZXNzaW9uKCkucnVuKCBcIlJFVFVSTiAxXCIpLnRoZW4oIGZ1bmN0aW9uKCkge1xuICAgICAgLy8gVGhlbiB3ZSBnZXQgdG8gaGVyZS5cbiAgICAgIC8vIEFuZCB0aGVuIHRoZSBrbm93bl9ob3N0cyBmaWxlIHNob3VsZCBoYXZlIGNvcnJlY3QgY29udGVudHNcbiAgICAgIGV4cGVjdCggZnMucmVhZEZpbGVTeW5jKGtub3duSG9zdHNQYXRoLCAndXRmOCcpICkudG9Db250YWluKCBcImxvY2FsaG9zdDo3Njg3XCIgKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgZHVwbGljYXRlIGZpbmdlcnByaW50IGVudHJpZXMnLCBmdW5jdGlvbihkb25lKSB7XG4gICAgLy8gQXNzdW1pbmcgd2Ugb25seSBydW4gdGhpcyB0ZXN0IG9uIE5vZGVKUyB3aXRoIFRPRlUgc3VwcG9ydFxuICAgIGlmKCAhaGFzRmVhdHVyZShcInRydXN0X29uX2ZpcnN0X3VzZVwiKSApIHtcbiAgICAgIGRvbmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHaXZlblxuICAgIHZhciBrbm93bkhvc3RzUGF0aCA9IFwiYnVpbGQva25vd25faG9zdHNcIjtcbiAgICBpZiggZnMuZXhpc3RzU3luYyhrbm93bkhvc3RzUGF0aCkgKSB7XG4gICAgICBmcy51bmxpbmtTeW5jKGtub3duSG9zdHNQYXRoKTtcbiAgICB9XG4gICAgZnMud3JpdGVGaWxlU3luYyhrbm93bkhvc3RzUGF0aCwgJycpO1xuXG4gICAgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdDovL2xvY2FsaG9zdFwiLCBzaGFyZWROZW80ai5hdXRoVG9rZW4sIHtcbiAgICAgIGVuY3J5cHRlZDogdHJ1ZSxcbiAgICAgIHRydXN0OiBcIlRSVVNUX09OX0ZJUlNUX1VTRVwiLFxuICAgICAga25vd25Ib3N0czoga25vd25Ib3N0c1BhdGhcbiAgICB9KTtcblxuICAgIC8vIFdoZW5cbiAgICBkcml2ZXIuc2Vzc2lvbigpO1xuICAgIGRyaXZlci5zZXNzaW9uKCk7XG5cbiAgICAvLyBUaGVuXG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBsaW5lcyA9IHt9O1xuICAgICAgZnMucmVhZEZpbGVTeW5jKGtub3duSG9zdHNQYXRoLCAndXRmOCcpXG4gICAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICEhIChsaW5lLnRyaW0oKSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICBpZiAoIWxpbmVzW2xpbmVdKSB7XG4gICAgICAgICAgICAgIGxpbmVzW2xpbmVdID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmVzW2xpbmVdKys7XG4gICAgICAgICAgfSk7XG5cbiAgICAgIHZhciBkdXBsaWNhdGVkTGluZXMgPSBPYmplY3RcbiAgICAgICAgICAua2V5cyhsaW5lcylcbiAgICAgICAgICAubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiBsaW5lc1tsaW5lXTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24oY291bnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3VudCA+IDE7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAubGVuZ3RoO1xuXG4gICAgICBleHBlY3QoIGR1cGxpY2F0ZWRMaW5lcyApLnRvQmUoIDAgKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9LCAxMDAwKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaG91bGQgZ2l2ZSBoZWxwZnVsIGVycm9yIGlmIGRhdGFiYXNlIGNlcnQgZG9lcyBub3QgbWF0Y2ggc3RvcmVkIGNlcnRpZmljYXRlJywgZnVuY3Rpb24oZG9uZSkge1xuICAgIC8vIEFzc3VtaW5nIHdlIG9ubHkgcnVuIHRoaXMgdGVzdCBvbiBOb2RlSlMgd2l0aCBUT0ZVIHN1cHBvcnRcbiAgICBpZiggIWhhc0ZlYXR1cmUoXCJ0cnVzdF9vbl9maXJzdF91c2VcIikgKSB7XG4gICAgICBkb25lKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2l2ZW5cbiAgICB2YXIga25vd25Ib3N0c1BhdGggPSBcInRlc3QvcmVzb3VyY2VzL3JhbmRvbV9rbm93bl9ob3N0c1wiO1xuXG4gICAgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdDovL2xvY2FsaG9zdFwiLCBzaGFyZWROZW80ai5hdXRoVG9rZW4sIHtcbiAgICAgIGVuY3J5cHRlZDogXCJFTkNSWVBUSU9OX09OXCIsXG4gICAgICB0cnVzdDogXCJUUlVTVF9PTl9GSVJTVF9VU0VcIixcbiAgICAgIGtub3duSG9zdHM6IGtub3duSG9zdHNQYXRoXG4gICAgfSk7XG5cbiAgICAvLyBXaGVuXG4gICAgZHJpdmVyLnNlc3Npb24oKS5ydW4oIFwiUkVUVVJOIDFcIikuY2F0Y2goIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICBleHBlY3QoZXJyb3IubWVzc2FnZSkudG9Db250YWluKFwiRGF0YWJhc2UgZW5jcnlwdGlvbiBjZXJ0aWZpY2F0ZSBoYXMgY2hhbmdlZCwgXCIgK1xuICAgICAgICBcImFuZCBubyBsb25nZXIgbWF0Y2hlcyB0aGUgY2VydGlmaWNhdGUgc3RvcmVkIGZvciBsb2NhbGhvc3Q6NzY4N1wiKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uKCl7XG4gICAgaWYoIGRyaXZlciApIHtcbiAgICAgIGRyaXZlci5jbG9zZSgpO1xuICAgIH1cbiAgfSk7XG59KTtcblxuLy8gVG8gbXV0ZSBkZXByZWNhdGlvbiBtZXNzYWdlIGluIHRlc3Qgb3V0cHV0XG5mdW5jdGlvbiBtdXRlQ29uc29sZUxvZygpIHtcbiAgY29uc3Qgb3JpZ2luYWxMb2cgPSBjb25zb2xlLmxvZztcbiAgY29uc29sZS5sb2cgPSAoKSA9PiB7fTtcbiAgcmV0dXJuIG9yaWdpbmFsTG9nO1xufVxuXG5mdW5jdGlvbiB1bk11dGVDb25zb2xlTG9nKG9yaWdpbmFsTG9nKSB7XG4gIGNvbnNvbGUubG9nID0gb3JpZ2luYWxMb2c7XG59XG5cbmZ1bmN0aW9uIG5lbzRqQ2VydFBhdGgoKSB7XG4gIHJldHVybiBzaGFyZWROZW80ai5uZW80akNlcnRQYXRoKHBhdGguam9pbignYnVpbGQnLCAnbmVvNGonKSk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IFRyYW5zYWN0aW9uRXhlY3V0b3IgZnJvbSAnLi4vLi4vc3JjL3YxL2ludGVybmFsL3RyYW5zYWN0aW9uLWV4ZWN1dG9yJztcbmltcG9ydCB7bmV3RXJyb3IsIFNFUlZJQ0VfVU5BVkFJTEFCTEUsIFNFU1NJT05fRVhQSVJFRH0gZnJvbSAnLi4vLi4vc3JjL3YxL2Vycm9yJztcbmltcG9ydCB7aGlqYWNrTmV4dERhdGVOb3dDYWxsLCBzZXRUaW1lb3V0TW9ja30gZnJvbSAnLi90aW1lcnMtdXRpbCc7XG5cbmNvbnN0IFRSQU5TSUVOVF9FUlJPUl8xID0gJ05lby5UcmFuc2llbnRFcnJvci5UcmFuc2FjdGlvbi5EZWFkbG9ja0RldGVjdGVkJztcbmNvbnN0IFRSQU5TSUVOVF9FUlJPUl8yID0gJ05lby5UcmFuc2llbnRFcnJvci5OZXR3b3JrLkNvbW11bmljYXRpb25FcnJvcic7XG5jb25zdCBVTktOT1dOX0VSUk9SID0gJ05lby5EYXRhYmFzZUVycm9yLkdlbmVyYWwuVW5rbm93bkVycm9yJztcbmNvbnN0IFRYX1RFUk1JTkFURURfRVJST1IgPSAnTmVvLlRyYW5zaWVudEVycm9yLlRyYW5zYWN0aW9uLlRlcm1pbmF0ZWQnO1xuY29uc3QgTE9DS1NfVEVSTUlOQVRFRF9FUlJPUiA9ICdOZW8uVHJhbnNpZW50RXJyb3IuVHJhbnNhY3Rpb24uTG9ja0NsaWVudFN0b3BwZWQnO1xuY29uc3QgT09NX0VSUk9SID0gJ05lby5EYXRhYmFzZUVycm9yLkdlbmVyYWwuT3V0T2ZNZW1vcnlFcnJvcic7XG5cbmRlc2NyaWJlKCdUcmFuc2FjdGlvbkV4ZWN1dG9yJywgKCkgPT4ge1xuXG4gIGxldCBmYWtlU2V0VGltZW91dDtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBmYWtlU2V0VGltZW91dCA9IHNldFRpbWVvdXRNb2NrLmluc3RhbGwoKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBmYWtlU2V0VGltZW91dC51bmluc3RhbGwoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXRyeSB3aGVuIHRyYW5zYWN0aW9uIHdvcmsgcmV0dXJucyBwcm9taXNlIHJlamVjdGVkIHdpdGggU0VSVklDRV9VTkFWQUlMQUJMRScsIGRvbmUgPT4ge1xuICAgIHRlc3RSZXRyeVdoZW5UcmFuc2FjdGlvbldvcmtSZXR1cm5zUmVqZWN0ZWRQcm9taXNlKFtTRVJWSUNFX1VOQVZBSUxBQkxFXSwgZG9uZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0cnkgd2hlbiB0cmFuc2FjdGlvbiB3b3JrIHJldHVybnMgcHJvbWlzZSByZWplY3RlZCB3aXRoIFNFU1NJT05fRVhQSVJFRCcsIGRvbmUgPT4ge1xuICAgIHRlc3RSZXRyeVdoZW5UcmFuc2FjdGlvbldvcmtSZXR1cm5zUmVqZWN0ZWRQcm9taXNlKFtTRVNTSU9OX0VYUElSRURdLCBkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXRyeSB3aGVuIHRyYW5zYWN0aW9uIHdvcmsgcmV0dXJucyBwcm9taXNlIHJlamVjdGVkIHdpdGggZGVhZGxvY2sgZXJyb3InLCBkb25lID0+IHtcbiAgICB0ZXN0UmV0cnlXaGVuVHJhbnNhY3Rpb25Xb3JrUmV0dXJuc1JlamVjdGVkUHJvbWlzZShbVFJBTlNJRU5UX0VSUk9SXzFdLCBkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXRyeSB3aGVuIHRyYW5zYWN0aW9uIHdvcmsgcmV0dXJucyBwcm9taXNlIHJlamVjdGVkIHdpdGggY29tbXVuaWNhdGlvbiBlcnJvcicsIGRvbmUgPT4ge1xuICAgIHRlc3RSZXRyeVdoZW5UcmFuc2FjdGlvbldvcmtSZXR1cm5zUmVqZWN0ZWRQcm9taXNlKFtUUkFOU0lFTlRfRVJST1JfMl0sIGRvbmUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCByZXRyeSB3aGVuIHRyYW5zYWN0aW9uIHdvcmsgcmV0dXJucyBwcm9taXNlIHJlamVjdGVkIHdpdGggT09NIGVycm9yJywgZG9uZSA9PiB7XG4gICAgdGVzdE5vUmV0cnlPblVua25vd25FcnJvcihbT09NX0VSUk9SXSwgMSwgZG9uZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IHJldHJ5IHdoZW4gdHJhbnNhY3Rpb24gd29yayByZXR1cm5zIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB1bmtub3duIGVycm9yJywgZG9uZSA9PiB7XG4gICAgdGVzdE5vUmV0cnlPblVua25vd25FcnJvcihbVU5LTk9XTl9FUlJPUl0sIDEsIGRvbmUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCByZXRyeSB3aGVuIHRyYW5zYWN0aW9uIHdvcmsgcmV0dXJucyBwcm9taXNlIHJlamVjdGVkIHdpdGggdHJhbnNhY3Rpb24gdGVybWluYXRpb24gZXJyb3InLCBkb25lID0+IHtcbiAgICB0ZXN0Tm9SZXRyeU9uVW5rbm93bkVycm9yKFtUWF9URVJNSU5BVEVEX0VSUk9SXSwgMSwgZG9uZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IHJldHJ5IHdoZW4gdHJhbnNhY3Rpb24gd29yayByZXR1cm5zIHByb21pc2UgcmVqZWN0ZWQgd2l0aCBsb2NrcyB0ZXJtaW5hdGlvbiBlcnJvcicsIGRvbmUgPT4ge1xuICAgIHRlc3ROb1JldHJ5T25Vbmtub3duRXJyb3IoW0xPQ0tTX1RFUk1JTkFURURfRVJST1JdLCAxLCBkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzdG9wIHJldHJ5aW5nIHdoZW4gdGltZSBleHBpcmVzJywgZG9uZSA9PiB7XG4gICAgY29uc3QgZXhlY3V0b3IgPSBuZXcgVHJhbnNhY3Rpb25FeGVjdXRvcigpO1xuICAgIGxldCB3b3JrSW52b2NhdGlvbkNvdW50ZXIgPSAwO1xuICAgIGNvbnN0IHJlYWxXb3JrID0gdHJhbnNhY3Rpb25Xb3JrKFtTRVJWSUNFX1VOQVZBSUxBQkxFLCBTRVNTSU9OX0VYUElSRUQsIFRSQU5TSUVOVF9FUlJPUl8xLCBUUkFOU0lFTlRfRVJST1JfMl0sIDQyKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGV4ZWN1dG9yLmV4ZWN1dGUodHJhbnNhY3Rpb25DcmVhdG9yKCksIHR4ID0+IHtcbiAgICAgIGV4cGVjdCh0eCkudG9CZURlZmluZWQoKTtcbiAgICAgIHdvcmtJbnZvY2F0aW9uQ291bnRlcisrO1xuICAgICAgaWYgKHdvcmtJbnZvY2F0aW9uQ291bnRlciA9PT0gMykge1xuICAgICAgICBoaWphY2tOZXh0RGF0ZU5vd0NhbGwoRGF0ZS5ub3coKSArIDMwMDAxKTsgLy8gbW92ZSBuZXh0IGBEYXRlLm5vdygpYCBjYWxsIGZvcndhcmQgYnkgMzAgc2Vjb25kc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlYWxXb3JrKCk7XG4gICAgfSk7XG5cbiAgICByZXN1bHQuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZXhwZWN0KHdvcmtJbnZvY2F0aW9uQ291bnRlcikudG9FcXVhbCgzKTtcbiAgICAgIGV4cGVjdChlcnJvci5jb2RlKS50b0VxdWFsKFRSQU5TSUVOVF9FUlJPUl8xKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXRyeSB3aGVuIGdpdmVuIHRyYW5zYWN0aW9uIGNyZWF0b3IgdGhyb3dzIG9uY2UnLCBkb25lID0+IHtcbiAgICB0ZXN0UmV0cnlXaGVuVHJhbnNhY3Rpb25DcmVhdG9yRmFpbHMoXG4gICAgICBbU0VSVklDRV9VTkFWQUlMQUJMRV0sXG4gICAgICBkb25lXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXRyeSB3aGVuIGdpdmVuIHRyYW5zYWN0aW9uIGNyZWF0b3IgdGhyb3dzIG1hbnkgdGltZXMnLCBkb25lID0+IHtcbiAgICB0ZXN0UmV0cnlXaGVuVHJhbnNhY3Rpb25DcmVhdG9yRmFpbHMoXG4gICAgICBbU0VSVklDRV9VTkFWQUlMQUJMRSwgU0VTU0lPTl9FWFBJUkVELCBUUkFOU0lFTlRfRVJST1JfMiwgU0VTU0lPTl9FWFBJUkVELCBTRVJWSUNFX1VOQVZBSUxBQkxFLCBUUkFOU0lFTlRfRVJST1JfMV0sXG4gICAgICBkb25lXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXRyeSB3aGVuIGdpdmVuIHRyYW5zYWN0aW9uIHdvcmsgdGhyb3dzIG9uY2UnLCBkb25lID0+IHtcbiAgICB0ZXN0UmV0cnlXaGVuVHJhbnNhY3Rpb25Xb3JrVGhyb3dzKFtTRVJWSUNFX1VOQVZBSUxBQkxFXSwgZG9uZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0cnkgd2hlbiBnaXZlbiB0cmFuc2FjdGlvbiB3b3JrIHRocm93cyBtYW55IHRpbWVzJywgZG9uZSA9PiB7XG4gICAgdGVzdFJldHJ5V2hlblRyYW5zYWN0aW9uV29ya1Rocm93cyhcbiAgICAgIFtTRVJWSUNFX1VOQVZBSUxBQkxFLCBUUkFOU0lFTlRfRVJST1JfMiwgVFJBTlNJRU5UX0VSUk9SXzIsIFNFU1NJT05fRVhQSVJFRF0sXG4gICAgICBkb25lXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXRyeSB3aGVuIGdpdmVuIHRyYW5zYWN0aW9uIHdvcmsgcmV0dXJucyByZWplY3RlZCBwcm9taXNlIG1hbnkgdGltZXMnLCBkb25lID0+IHtcbiAgICB0ZXN0UmV0cnlXaGVuVHJhbnNhY3Rpb25Xb3JrUmV0dXJuc1JlamVjdGVkUHJvbWlzZShcbiAgICAgIFtTRVJWSUNFX1VOQVZBSUxBQkxFLCBTRVJWSUNFX1VOQVZBSUxBQkxFLCBUUkFOU0lFTlRfRVJST1JfMiwgU0VTU0lPTl9FWFBJUkVELCBUUkFOU0lFTlRfRVJST1JfMSwgU0VTU0lPTl9FWFBJUkVEXSxcbiAgICAgIGRvbmVcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHJ5IHdoZW4gdHJhbnNhY3Rpb24gY29tbWl0IHJldHVybnMgcmVqZWN0ZWQgcHJvbWlzZSBvbmNlJywgZG9uZSA9PiB7XG4gICAgdGVzdFJldHJ5V2hlblRyYW5zYWN0aW9uQ29tbWl0UmV0dXJuc1JlamVjdGVkUHJvbWlzZShbVFJBTlNJRU5UX0VSUk9SXzFdLCBkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXRyeSB3aGVuIHRyYW5zYWN0aW9uIGNvbW1pdCByZXR1cm5zIHJlamVjdGVkIHByb21pc2UgbXVsdGlwbGUgdGltZXMnLCBkb25lID0+IHtcbiAgICB0ZXN0UmV0cnlXaGVuVHJhbnNhY3Rpb25Db21taXRSZXR1cm5zUmVqZWN0ZWRQcm9taXNlKFxuICAgICAgW1RSQU5TSUVOVF9FUlJPUl8xLCBUUkFOU0lFTlRfRVJST1JfMSwgU0VTU0lPTl9FWFBJUkVELCBTRVJWSUNFX1VOQVZBSUxBQkxFLCBUUkFOU0lFTlRfRVJST1JfMl0sXG4gICAgICBkb25lXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXRyeSB1bnRpbCBkYXRhYmFzZSBlcnJvciBoYXBwZW5zJywgZG9uZSA9PiB7XG4gICAgdGVzdE5vUmV0cnlPblVua25vd25FcnJvcihcbiAgICAgIFtTRVJWSUNFX1VOQVZBSUxBQkxFLCBTRVJWSUNFX1VOQVZBSUxBQkxFLCBUUkFOU0lFTlRfRVJST1JfMiwgU0VTU0lPTl9FWFBJUkVELCBVTktOT1dOX0VSUk9SLCBTRVNTSU9OX0VYUElSRURdLFxuICAgICAgNSxcbiAgICAgIGRvbmVcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNhbmNlbCBpbi1mbGlnaHQgdGltZW91dHMgd2hlbiBjbG9zZWQnLCBkb25lID0+IHtcbiAgICBjb25zdCBleGVjdXRvciA9IG5ldyBUcmFuc2FjdGlvbkV4ZWN1dG9yKCk7XG4gICAgLy8gZG8gbm90IGV4ZWN1dGUgc2V0VGltZW91dCBjYWxsYmFja3NcbiAgICBmYWtlU2V0VGltZW91dC5wYXVzZSgpO1xuXG4gICAgZXhlY3V0b3IuZXhlY3V0ZSh0cmFuc2FjdGlvbkNyZWF0b3IoW1NFUlZJQ0VfVU5BVkFJTEFCTEVdKSwgKCkgPT4gUHJvbWlzZS5yZXNvbHZlKDQyKSk7XG4gICAgZXhlY3V0b3IuZXhlY3V0ZSh0cmFuc2FjdGlvbkNyZWF0b3IoW1RSQU5TSUVOVF9FUlJPUl8xXSksICgpID0+IFByb21pc2UucmVzb2x2ZSg0MjQyKSk7XG4gICAgZXhlY3V0b3IuZXhlY3V0ZSh0cmFuc2FjdGlvbkNyZWF0b3IoW1NFU1NJT05fRVhQSVJFRF0pLCAoKSA9PiBQcm9taXNlLnJlc29sdmUoNDI0MjQyKSk7XG5cbiAgICBmYWtlU2V0VGltZW91dC5zZXRUaW1lb3V0T3JpZ2luYWwoKCkgPT4ge1xuICAgICAgZXhlY3V0b3IuY2xvc2UoKTtcbiAgICAgIGV4cGVjdChmYWtlU2V0VGltZW91dC5jbGVhcmVkVGltZW91dHMubGVuZ3RoKS50b0VxdWFsKDMpO1xuICAgICAgZG9uZSgpO1xuICAgIH0sIDEwMDApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFsbG93IHplcm8gbWF4IHJldHJ5IHRpbWUnLCAoKSA9PiB7XG4gICAgY29uc3QgZXhlY3V0b3IgPSBuZXcgVHJhbnNhY3Rpb25FeGVjdXRvcigwKTtcbiAgICBleHBlY3QoZXhlY3V0b3IuX21heFJldHJ5VGltZU1zKS50b0VxdWFsKDApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFsbG93IHplcm8gaW5pdGlhbCBkZWxheScsICgpID0+IHtcbiAgICBjb25zdCBleGVjdXRvciA9IG5ldyBUcmFuc2FjdGlvbkV4ZWN1dG9yKDQyLCAwKTtcbiAgICBleHBlY3QoZXhlY3V0b3IuX2luaXRpYWxSZXRyeURlbGF5TXMpLnRvRXF1YWwoMCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZGlzYWxsb3cgemVybyBtdWx0aXBsaWVyJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBuZXcgVHJhbnNhY3Rpb25FeGVjdXRvcig0MiwgNDIsIDApKS50b1Rocm93KCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYWxsb3cgemVybyBqaXR0ZXIgZmFjdG9yJywgKCkgPT4ge1xuICAgIGNvbnN0IGV4ZWN1dG9yID0gbmV3IFRyYW5zYWN0aW9uRXhlY3V0b3IoNDIsIDQyLCA0MiwgMCk7XG4gICAgZXhwZWN0KGV4ZWN1dG9yLl9qaXR0ZXJGYWN0b3IpLnRvRXF1YWwoMCk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHRlc3RSZXRyeVdoZW5UcmFuc2FjdGlvbkNyZWF0b3JGYWlscyhlcnJvckNvZGVzLCBkb25lKSB7XG4gICAgY29uc3QgZXhlY3V0b3IgPSBuZXcgVHJhbnNhY3Rpb25FeGVjdXRvcigpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uQ3JlYXRvciA9IHRocm93aW5nVHJhbnNhY3Rpb25DcmVhdG9yKGVycm9yQ29kZXMsIG5ldyBGYWtlVHJhbnNhY3Rpb24oKSk7XG4gICAgbGV0IHdvcmtJbnZvY2F0aW9uQ291bnRlciA9IDA7XG5cbiAgICBjb25zdCByZXN1bHQgPSBleGVjdXRvci5leGVjdXRlKHRyYW5zYWN0aW9uQ3JlYXRvciwgdHggPT4ge1xuICAgICAgZXhwZWN0KHR4KS50b0JlRGVmaW5lZCgpO1xuICAgICAgd29ya0ludm9jYXRpb25Db3VudGVyKys7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKDQyKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdC50aGVuKHZhbHVlID0+IHtcbiAgICAgIGV4cGVjdCh3b3JrSW52b2NhdGlvbkNvdW50ZXIpLnRvRXF1YWwoMSk7XG4gICAgICBleHBlY3QodmFsdWUpLnRvRXF1YWwoNDIpO1xuICAgICAgdmVyaWZ5UmV0cnlEZWxheXMoZmFrZVNldFRpbWVvdXQsIGVycm9yQ29kZXMubGVuZ3RoKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRlc3RSZXRyeVdoZW5UcmFuc2FjdGlvbldvcmtSZXR1cm5zUmVqZWN0ZWRQcm9taXNlKGVycm9yQ29kZXMsIGRvbmUpIHtcbiAgICBjb25zdCBleGVjdXRvciA9IG5ldyBUcmFuc2FjdGlvbkV4ZWN1dG9yKCk7XG4gICAgbGV0IHdvcmtJbnZvY2F0aW9uQ291bnRlciA9IDA7XG4gICAgY29uc3QgcmVhbFdvcmsgPSB0cmFuc2FjdGlvbldvcmsoZXJyb3JDb2RlcywgNDIpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gZXhlY3V0b3IuZXhlY3V0ZSh0cmFuc2FjdGlvbkNyZWF0b3IoKSwgdHggPT4ge1xuICAgICAgZXhwZWN0KHR4KS50b0JlRGVmaW5lZCgpO1xuICAgICAgd29ya0ludm9jYXRpb25Db3VudGVyKys7XG4gICAgICByZXR1cm4gcmVhbFdvcmsoKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdC50aGVuKHZhbHVlID0+IHtcbiAgICAgIC8vIHdvcmsgc2hvdWxkIGhhdmUgZmFpbGVkICdmYWlsdXJlcy5sZW5ndGgnIHRpbWVzIGFuZCBzdWNjZWVkZWQgMSB0aW1lXG4gICAgICBleHBlY3Qod29ya0ludm9jYXRpb25Db3VudGVyKS50b0VxdWFsKGVycm9yQ29kZXMubGVuZ3RoICsgMSk7XG4gICAgICBleHBlY3QodmFsdWUpLnRvRXF1YWwoNDIpO1xuICAgICAgdmVyaWZ5UmV0cnlEZWxheXMoZmFrZVNldFRpbWVvdXQsIGVycm9yQ29kZXMubGVuZ3RoKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRlc3RSZXRyeVdoZW5UcmFuc2FjdGlvbkNvbW1pdFJldHVybnNSZWplY3RlZFByb21pc2UoZXJyb3JDb2RlcywgZG9uZSkge1xuICAgIGNvbnN0IGV4ZWN1dG9yID0gbmV3IFRyYW5zYWN0aW9uRXhlY3V0b3IoKTtcbiAgICBsZXQgd29ya0ludm9jYXRpb25Db3VudGVyID0gMDtcbiAgICBjb25zdCByZWFsV29yayA9ICgpID0+IFByb21pc2UucmVzb2x2ZSg0MjQyKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGV4ZWN1dG9yLmV4ZWN1dGUodHJhbnNhY3Rpb25DcmVhdG9yKGVycm9yQ29kZXMpLCB0eCA9PiB7XG4gICAgICBleHBlY3QodHgpLnRvQmVEZWZpbmVkKCk7XG4gICAgICB3b3JrSW52b2NhdGlvbkNvdW50ZXIrKztcbiAgICAgIHJldHVybiByZWFsV29yaygpO1xuICAgIH0pO1xuXG4gICAgcmVzdWx0LnRoZW4odmFsdWUgPT4ge1xuICAgICAgLy8gd29yayBzaG91bGQgaGF2ZSBmYWlsZWQgJ2ZhaWx1cmVzLmxlbmd0aCcgdGltZXMgYW5kIHN1Y2NlZWRlZCAxIHRpbWVcbiAgICAgIGV4cGVjdCh3b3JrSW52b2NhdGlvbkNvdW50ZXIpLnRvRXF1YWwoZXJyb3JDb2Rlcy5sZW5ndGggKyAxKTtcbiAgICAgIGV4cGVjdCh2YWx1ZSkudG9FcXVhbCg0MjQyKTtcbiAgICAgIHZlcmlmeVJldHJ5RGVsYXlzKGZha2VTZXRUaW1lb3V0LCBlcnJvckNvZGVzLmxlbmd0aCk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB0ZXN0UmV0cnlXaGVuVHJhbnNhY3Rpb25Xb3JrVGhyb3dzKGVycm9yQ29kZXMsIGRvbmUpIHtcbiAgICBjb25zdCBleGVjdXRvciA9IG5ldyBUcmFuc2FjdGlvbkV4ZWN1dG9yKCk7XG4gICAgbGV0IHdvcmtJbnZvY2F0aW9uQ291bnRlciA9IDA7XG4gICAgY29uc3QgcmVhbFdvcmsgPSB0aHJvd2luZ1RyYW5zYWN0aW9uV29yayhlcnJvckNvZGVzLCA0Mik7XG5cbiAgICBjb25zdCByZXN1bHQgPSBleGVjdXRvci5leGVjdXRlKHRyYW5zYWN0aW9uQ3JlYXRvcigpLCB0eCA9PiB7XG4gICAgICBleHBlY3QodHgpLnRvQmVEZWZpbmVkKCk7XG4gICAgICB3b3JrSW52b2NhdGlvbkNvdW50ZXIrKztcbiAgICAgIHJldHVybiByZWFsV29yaygpO1xuICAgIH0pO1xuXG4gICAgcmVzdWx0LnRoZW4odmFsdWUgPT4ge1xuICAgICAgLy8gd29yayBzaG91bGQgaGF2ZSBmYWlsZWQgJ2ZhaWx1cmVzLmxlbmd0aCcgdGltZXMgYW5kIHN1Y2NlZWRlZCAxIHRpbWVcbiAgICAgIGV4cGVjdCh3b3JrSW52b2NhdGlvbkNvdW50ZXIpLnRvRXF1YWwoZXJyb3JDb2Rlcy5sZW5ndGggKyAxKTtcbiAgICAgIGV4cGVjdCh2YWx1ZSkudG9FcXVhbCg0Mik7XG4gICAgICB2ZXJpZnlSZXRyeURlbGF5cyhmYWtlU2V0VGltZW91dCwgZXJyb3JDb2Rlcy5sZW5ndGgpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdGVzdE5vUmV0cnlPblVua25vd25FcnJvcihlcnJvckNvZGVzLCBleHBlY3RlZFdvcmtJbnZvY2F0aW9uQ291bnQsIGRvbmUpIHtcbiAgICBjb25zdCBleGVjdXRvciA9IG5ldyBUcmFuc2FjdGlvbkV4ZWN1dG9yKCk7XG4gICAgbGV0IHdvcmtJbnZvY2F0aW9uQ291bnRlciA9IDA7XG4gICAgY29uc3QgcmVhbFdvcmsgPSB0cmFuc2FjdGlvbldvcmsoZXJyb3JDb2RlcywgNDIpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gZXhlY3V0b3IuZXhlY3V0ZSh0cmFuc2FjdGlvbkNyZWF0b3IoKSwgdHggPT4ge1xuICAgICAgZXhwZWN0KHR4KS50b0JlRGVmaW5lZCgpO1xuICAgICAgd29ya0ludm9jYXRpb25Db3VudGVyKys7XG4gICAgICByZXR1cm4gcmVhbFdvcmsoKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdC5jYXRjaChlcnJvciA9PiB7XG4gICAgICBleHBlY3Qod29ya0ludm9jYXRpb25Db3VudGVyKS50b0VxdWFsKGV4cGVjdGVkV29ya0ludm9jYXRpb25Db3VudCk7XG4gICAgICBpZiAoZXJyb3JDb2Rlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvRXF1YWwoZXJyb3JDb2Rlc1swXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9FcXVhbChlcnJvckNvZGVzW2V4cGVjdGVkV29ya0ludm9jYXRpb25Db3VudCAtIDFdKTtcbiAgICAgIH1cbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfVxuXG59KTtcblxuZnVuY3Rpb24gdHJhbnNhY3Rpb25DcmVhdG9yKGNvbW1pdEVycm9yQ29kZXMpIHtcbiAgY29uc3QgcmVtYWluaW5nRXJyb3JDb2RlcyA9IChjb21taXRFcnJvckNvZGVzIHx8IFtdKS5zbGljZSgpLnJldmVyc2UoKTtcbiAgcmV0dXJuICgpID0+IG5ldyBGYWtlVHJhbnNhY3Rpb24ocmVtYWluaW5nRXJyb3JDb2Rlcy5wb3AoKSk7XG59XG5cbmZ1bmN0aW9uIHRocm93aW5nVHJhbnNhY3Rpb25DcmVhdG9yKGVycm9yQ29kZXMsIHJlc3VsdCkge1xuICBjb25zdCByZW1haW5pbmdFcnJvckNvZGVzID0gZXJyb3JDb2Rlcy5zbGljZSgpLnJldmVyc2UoKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAocmVtYWluaW5nRXJyb3JDb2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGVycm9yQ29kZSA9IHJlbWFpbmluZ0Vycm9yQ29kZXMucG9wKCk7XG4gICAgdGhyb3cgZXJyb3IoZXJyb3JDb2RlKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdGhyb3dpbmdUcmFuc2FjdGlvbldvcmsoZXJyb3JDb2RlcywgcmVzdWx0KSB7XG4gIGNvbnN0IHJlbWFpbmluZ0Vycm9yQ29kZXMgPSBlcnJvckNvZGVzLnNsaWNlKCkucmV2ZXJzZSgpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmIChyZW1haW5pbmdFcnJvckNvZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpO1xuICAgIH1cbiAgICBjb25zdCBlcnJvckNvZGUgPSByZW1haW5pbmdFcnJvckNvZGVzLnBvcCgpO1xuICAgIHRocm93IGVycm9yKGVycm9yQ29kZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRyYW5zYWN0aW9uV29yayhlcnJvckNvZGVzLCByZXN1bHQpIHtcbiAgY29uc3QgcmVtYWluaW5nRXJyb3JDb2RlcyA9IGVycm9yQ29kZXMuc2xpY2UoKS5yZXZlcnNlKCk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKHJlbWFpbmluZ0Vycm9yQ29kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XG4gICAgfVxuICAgIGNvbnN0IGVycm9yQ29kZSA9IHJlbWFpbmluZ0Vycm9yQ29kZXMucG9wKCk7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKGVycm9yQ29kZSkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBlcnJvcihjb2RlKSB7XG4gIHJldHVybiBuZXdFcnJvcignJywgY29kZSk7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVJldHJ5RGVsYXlzKGZha2VTZXRUaW1lb3V0LCBleHBlY3RlZEludm9jYXRpb25Db3VudCkge1xuICBjb25zdCBkZWxheXMgPSBmYWtlU2V0VGltZW91dC5pbnZvY2F0aW9uRGVsYXlzO1xuICBleHBlY3QoZGVsYXlzLmxlbmd0aCkudG9FcXVhbChleHBlY3RlZEludm9jYXRpb25Db3VudCk7XG4gIGRlbGF5cy5mb3JFYWNoKChkZWxheSwgaW5kZXgpID0+IHtcbiAgICAvLyBkZWxheXMgbWFrZSBhIGdlb21ldHJpYyBwcm9ncmVzc2lvbiB3aXRoIGZpc3QgZWxlbWVudCAxMDAwIGFuZCBtdWx0aXBsaWVyIDIuMFxuICAgIC8vIHNvIGV4cGVjdGVkIGRlbGF5IGNhbiBiZSBjYWxjdWxhdGVkIGFzIG4tdGggZWxlbWVudDogYGZpcnN0RWxlbWVudCAqIHBvdyhtdWx0aXBsaWVyLCBuIC0gMSlgXG4gICAgY29uc3QgZXhwZWN0ZWREZWxheVdpdGhvdXRKaXR0ZXIgPSAxMDAwICogTWF0aC5wb3coMi4wLCBpbmRleCk7XG4gICAgY29uc3Qgaml0dGVyID0gZXhwZWN0ZWREZWxheVdpdGhvdXRKaXR0ZXIgKiAwLjI7XG4gICAgY29uc3QgbWluID0gZXhwZWN0ZWREZWxheVdpdGhvdXRKaXR0ZXIgLSBqaXR0ZXI7XG4gICAgY29uc3QgbWF4ID0gZXhwZWN0ZWREZWxheVdpdGhvdXRKaXR0ZXIgKyBqaXR0ZXI7XG5cbiAgICBleHBlY3QoZGVsYXkgPj0gbWluKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KGRlbGF5IDw9IG1heCkudG9CZVRydXRoeSgpO1xuICB9KTtcbn1cblxuY2xhc3MgRmFrZVRyYW5zYWN0aW9uIHtcblxuICBjb25zdHJ1Y3Rvcihjb21taXRFcnJvckNvZGUpIHtcbiAgICB0aGlzLl9jb21taXRFcnJvckNvZGUgPSBjb21taXRFcnJvckNvZGU7XG4gIH1cblxuICBpc09wZW4oKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb21taXQoKSB7XG4gICAgaWYgKHRoaXMuX2NvbW1pdEVycm9yQ29kZSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKHRoaXMuX2NvbW1pdEVycm9yQ29kZSkpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuIFxudmFyIHV0ZjggPSByZXF1aXJlKCcuLi8uLi9saWIvdjEvaW50ZXJuYWwvdXRmOCcpLmRlZmF1bHQ7XG52YXIgYnVmZmVycyA9IHJlcXVpcmUoJy4uLy4uL2xpYi92MS9pbnRlcm5hbC9idWYnKTtcblxuZGVzY3JpYmUoJ3V0ZjgnLCBmdW5jdGlvbigpIHtcbiAgaXQoJ3Nob3VsZCBoYXZlIGEgbmljZSBjbGVhbiBidWZmZXIgcG9zaXRpb24gYWZ0ZXIgc2VyaWFsaXppbmcnLCBmdW5jdGlvbigpIHtcbiAgICAvLyBXaGVuXG4gICAgdmFyIGJ1ZmZlciA9IHV0ZjguZW5jb2RlKFwiaGVsbG8sIHdvcmxkIVwiKTtcblxuICAgIC8vIFRoZW5cbiAgICBleHBlY3QoIGJ1ZmZlci5wb3NpdGlvbiApLnRvQmUoIDAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXNwZWN0IHBvc2l0aW9uIG9mIHNpbmdsZSBidWZmZXInLCBmdW5jdGlvbigpIHtcbiAgICAvLyBXaGVuXG4gICAgdmFyIGJ1ZmZlciA9IHV0ZjguZW5jb2RlKFwiaGVsbG8sIHdvcmxkIVwiKTtcbiAgICBidWZmZXIucmVhZEludDgoKTtcbiAgICB2YXIgZGVjb2RlZCA9IHV0ZjguZGVjb2RlKGJ1ZmZlciwgYnVmZmVyLmxlbmd0aCAtIDEpO1xuICAgIC8vIFRoZW5cbiAgICBleHBlY3QoIGRlY29kZWQgKS50b0JlKCBcImVsbG8sIHdvcmxkIVwiICk7XG4gICAgZXhwZWN0KGJ1ZmZlci5wb3NpdGlvbikudG9FcXVhbCgxMylcbiAgfSk7XG5cblxuICBpdCgnc2hvdWxkIGJlIGFibGUgdG8gZGVjb2RlIHN1YnN0cmluZycsIGZ1bmN0aW9uKCkge1xuICAgIC8vIFdoZW5cbiAgICB2YXIgYnVmZmVyID0gdXRmOC5lbmNvZGUoXCJoZWxsbywgd29ybGQhXCIpO1xuICAgIGJ1ZmZlci5yZWFkSW50OCgpO1xuICAgIHZhciBkZWNvZGVkID0gdXRmOC5kZWNvZGUoYnVmZmVyLCAzKTtcbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KCBkZWNvZGVkICkudG9CZSggXCJlbGxcIiApO1xuICAgIGV4cGVjdChidWZmZXIucG9zaXRpb24pLnRvRXF1YWwoNClcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWFkL3dyaXRlIHV0ZjgnLCBmdW5jdGlvbigpIHtcbiAgICBleHBlY3QoIHBhY2tBbmRVbnBhY2soIFwiXCIgKSApLnRvQmUoIFwiXCIgKTtcbiAgICBleHBlY3QoIHBhY2tBbmRVbnBhY2soIFwiw6XDpMO2MTIzXCIgKSApLnRvQmUoIFwiw6XDpMO2MTIzXCIgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZGVjb2RlIHV0ZjggZnJvbSBhIGNvbXBsZXRlIGNvbWJpbmVkIGJ1ZmZlcicsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIG1zZyA9IFwiYXPDpWZxd2VyXCI7XG4gICAgdmFyIGJ1ZiA9IHV0ZjguZW5jb2RlKG1zZyk7XG4gICAgdmFyIGJ1ZmEgPSBidWYucmVhZFNsaWNlKDMpO1xuICAgIHZhciBidWZiID0gYnVmLnJlYWRTbGljZSgzKTtcbiAgICB2YXIgYnVmYyA9IGJ1Zi5yZWFkU2xpY2UoMyk7XG4gICAgdmFyIGNvbWJpbmVkID0gbmV3IGJ1ZmZlcnMuQ29tYmluZWRCdWZmZXIoIFtidWZhLCBidWZiLCBidWZjXSApO1xuXG4gICAgLy8gV2hlblxuICAgIHZhciBkZWNvZGVkID0gdXRmOC5kZWNvZGUoY29tYmluZWQsIGNvbWJpbmVkLmxlbmd0aCk7XG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KGRlY29kZWQpLnRvQmUobXNnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBkZWNvZGUgdXRmOCBmcm9tIHBhcnQgb2YgYSBjb21iaW5lZCBidWZmZXInLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciBtc2cgPSBcImFzw6VmcVwiO1xuICAgIHZhciBleHBlY3RNc2cgPSBtc2cuc3Vic3RyaW5nKDAsIG1zZy5sZW5ndGgtMSk7XG4gICAgdmFyIGJ1ZiA9IHV0ZjguZW5jb2RlKG1zZyk7XG4gICAgdmFyIGJ1ZmEgPSBidWYucmVhZFNsaWNlKDMpO1xuICAgIHZhciBidWZiID0gYnVmLnJlYWRTbGljZSgzKTtcbiAgICB2YXIgdW5yZWxhdGVkRGF0YSA9IGJ1ZmZlcnMuYWxsb2MoMyk7XG4gICAgdmFyIGNvbWJpbmVkID0gbmV3IGJ1ZmZlcnMuQ29tYmluZWRCdWZmZXIoIFtidWZhLCBidWZiLCB1bnJlbGF0ZWREYXRhXSApO1xuXG4gICAgLy8gV2hlbiBcbiAgICAvLyBXZSByZWFkIGFsbCBidXQgdGhlIHVucmVsYXRlZERhdGEgYW5kIHRoZSBsYXN0IGNoYXJhY3RlciBvZiBidWZiXG4gICAgdmFyIGRlY29kZWQgPSB1dGY4LmRlY29kZShjb21iaW5lZCwgY29tYmluZWQubGVuZ3RoIC0gMSAtIHVucmVsYXRlZERhdGEubGVuZ3RoICk7XG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KGRlY29kZWQpLnRvQmUoZXhwZWN0TXNnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXNwZWN0IHRoZSBwb3NpdGlvbiBpbiB0aGUgY29tYmluZWQgYnVmZmVyJywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgbXNnID0gXCJhYmNkZWZnaFwiO1xuICAgIHZhciBidWYgPSB1dGY4LmVuY29kZShtc2cpO1xuICAgIHZhciBidWZhID0gYnVmLnJlYWRTbGljZSg0KTtcbiAgICB2YXIgYnVmYiA9IGJ1Zi5yZWFkU2xpY2UoNCk7XG4gICAgdmFyIGNvbWJpbmVkID0gbmV3IGJ1ZmZlcnMuQ29tYmluZWRCdWZmZXIoIFtidWZhLCBidWZiXSApO1xuICAgIC8vbW92ZSBwb3NpdGlvbiBmb3J3YXJkXG4gICAgY29tYmluZWQucmVhZEludDgoKTtcbiAgICBjb21iaW5lZC5yZWFkSW50OCgpO1xuXG4gICAgLy8gV2hlblxuICAgIHZhciBkZWNvZGVkID0gdXRmOC5kZWNvZGUoY29tYmluZWQsIGNvbWJpbmVkLmxlbmd0aCAtIDIpO1xuXG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KGRlY29kZWQpLnRvRXF1YWwoXCJjZGVmZ2hcIik7XG4gICAgZXhwZWN0KGNvbWJpbmVkLnBvc2l0aW9uKS50b0JlKDgpXG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYmUgYWJsZSB0byBkZWNvZGUgYSBzdWJzdHJpbmcgaW4gYSBjb21iaW5lZCBidWZmZXIgYWNyb3NzIGJ1ZmZlcnMnLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciBtc2cgPSBcImFiY2RlZmdoaWprbFwiO1xuICAgIHZhciBidWYgPSB1dGY4LmVuY29kZShtc2cpO1xuICAgIHZhciBidWZhID0gYnVmLnJlYWRTbGljZSg0KTtcbiAgICB2YXIgYnVmYiA9IGJ1Zi5yZWFkU2xpY2UoNCk7XG4gICAgdmFyIGJ1ZmMgPSBidWYucmVhZFNsaWNlKDQpO1xuICAgIHZhciBjb21iaW5lZCA9IG5ldyBidWZmZXJzLkNvbWJpbmVkQnVmZmVyKCBbYnVmYSwgYnVmYiwgYnVmY10gKTtcbiAgICAvL21vdmUgcG9zaXRpb24gZm9yd2FyZFxuICAgIGNvbWJpbmVkLnJlYWRJbnQ4KCk7XG4gICAgY29tYmluZWQucmVhZEludDgoKTtcbiAgICBjb21iaW5lZC5yZWFkSW50OCgpO1xuICAgIGNvbWJpbmVkLnJlYWRJbnQ4KCk7XG4gICAgY29tYmluZWQucmVhZEludDgoKTtcblxuICAgIC8vIFdoZW5cbiAgICB2YXIgZGVjb2RlZCA9IHV0ZjguZGVjb2RlKGNvbWJpbmVkLCA0KTtcblxuICAgIC8vIFRoZW5cbiAgICBleHBlY3QoZGVjb2RlZCkudG9CZShcImZnaGlcIik7XG4gICAgZXhwZWN0KGNvbWJpbmVkLnBvc2l0aW9uKS50b0JlKDkpXG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYmUgYWJsZSB0byBkZWNvZGUgYSBzdWJzdHJpbmcgaW4gYSBjb21iaW5lZCB3aXRoaW4gYnVmZmVyJywgZnVuY3Rpb24oKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgbXNnID0gXCJhYmNkZWZnaGlqa2xcIjtcbiAgICB2YXIgYnVmID0gdXRmOC5lbmNvZGUobXNnKTtcbiAgICB2YXIgYnVmYSA9IGJ1Zi5yZWFkU2xpY2UoNCk7XG4gICAgdmFyIGJ1ZmIgPSBidWYucmVhZFNsaWNlKDQpO1xuICAgIHZhciBidWZjID0gYnVmLnJlYWRTbGljZSg0KTtcbiAgICB2YXIgY29tYmluZWQgPSBuZXcgYnVmZmVycy5Db21iaW5lZEJ1ZmZlciggW2J1ZmEsIGJ1ZmIsIGJ1ZmNdICk7XG4gICAgLy9tb3ZlIHBvc2l0aW9uIGZvcndhcmRcbiAgICBjb21iaW5lZC5yZWFkSW50OCgpO1xuICAgIGNvbWJpbmVkLnJlYWRJbnQ4KCk7XG4gICAgY29tYmluZWQucmVhZEludDgoKTtcbiAgICBjb21iaW5lZC5yZWFkSW50OCgpO1xuICAgIGNvbWJpbmVkLnJlYWRJbnQ4KCk7XG5cbiAgICAvLyBXaGVuXG4gICAgdmFyIGRlY29kZWQgPSB1dGY4LmRlY29kZShjb21iaW5lZCwgMik7XG5cbiAgICAvLyBUaGVuXG4gICAgZXhwZWN0KGRlY29kZWQpLnRvQmUoXCJmZ1wiKTtcbiAgICBleHBlY3QoY29tYmluZWQucG9zaXRpb24pLnRvQmUoNylcbiAgfSk7XG59KTtcblxuZnVuY3Rpb24gcGFja0FuZFVucGFjayggc3RyICkge1xuICB2YXIgYnVmZmVyID0gdXRmOC5lbmNvZGUoIHN0ciApO1xuICByZXR1cm4gdXRmOC5kZWNvZGUoIGJ1ZmZlciwgYnVmZmVyLmxlbmd0aCApO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vLi4vc3JjL3YxL2ludGVybmFsL3V0aWwnO1xuXG5kZXNjcmliZSgndXRpbCcsICgpID0+IHtcblxuICBpdCgnc2hvdWxkIGNoZWNrIGVtcHR5IG9iamVjdHMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KHV0aWwuaXNFbXB0eU9iamVjdE9yTnVsbChudWxsKSkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdCh1dGlsLmlzRW1wdHlPYmplY3RPck51bGwoe30pKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KHV0aWwuaXNFbXB0eU9iamVjdE9yTnVsbChbXSkpLnRvQmVUcnV0aHkoKTtcblxuICAgIGNvbnN0IGZ1bmMgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gNDI7XG4gICAgfTtcbiAgICBleHBlY3QodXRpbC5pc0VtcHR5T2JqZWN0T3JOdWxsKGZ1bmMpKS50b0JlVHJ1dGh5KCk7XG4gICAgZnVuYy5mb28gPSAnYmFyJztcbiAgICBleHBlY3QodXRpbC5pc0VtcHR5T2JqZWN0T3JOdWxsKGZ1bmMpKS50b0JlRmFsc3koKTtcblxuICAgIGV4cGVjdCh1dGlsLmlzRW1wdHlPYmplY3RPck51bGwoKSkudG9CZUZhbHN5KCk7XG4gICAgZXhwZWN0KHV0aWwuaXNFbXB0eU9iamVjdE9yTnVsbCh1bmRlZmluZWQpKS50b0JlRmFsc3koKTtcbiAgICBleHBlY3QodXRpbC5pc0VtcHR5T2JqZWN0T3JOdWxsKDApKS50b0JlRmFsc3koKTtcbiAgICBleHBlY3QodXRpbC5pc0VtcHR5T2JqZWN0T3JOdWxsKCcnKSkudG9CZUZhbHN5KCk7XG4gICAgZXhwZWN0KHV0aWwuaXNFbXB0eU9iamVjdE9yTnVsbCgnYWJjJykpLnRvQmVGYWxzeSgpO1xuICAgIGV4cGVjdCh1dGlsLmlzRW1wdHlPYmplY3RPck51bGwoe2ZvbzogJ2Jhcid9KSkudG9CZUZhbHN5KCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY2hlY2sgc3RyaW5ncycsICgpID0+IHtcbiAgICB2ZXJpZnlWYWxpZFN0cmluZygnJyk7XG4gICAgdmVyaWZ5VmFsaWRTdHJpbmcobmV3IFN0cmluZygnZm9vJykpO1xuICAgIHZlcmlmeVZhbGlkU3RyaW5nKFN0cmluZygnZm9vJykpO1xuICAgIHZlcmlmeVZhbGlkU3RyaW5nKFwiaGkhXCIpO1xuXG4gICAgdmVyaWZ5SW52YWxpZFN0cmluZyh7fSk7XG4gICAgdmVyaWZ5SW52YWxpZFN0cmluZyh7Zm9vOiAxfSk7XG4gICAgdmVyaWZ5SW52YWxpZFN0cmluZyhbXSk7XG4gICAgdmVyaWZ5SW52YWxpZFN0cmluZyhbJzEnXSk7XG4gICAgdmVyaWZ5SW52YWxpZFN0cmluZyhbMSwgJzInXSk7XG4gICAgdmVyaWZ5SW52YWxpZFN0cmluZyhjb25zb2xlLmxvZyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFyc2Ugc2NoZW1lJywgKCkgPT4ge1xuICAgIHZlcmlmeVNjaGVtZSgnYm9sdDovLycsICdib2x0Oi8vbG9jYWxob3N0Jyk7XG4gICAgdmVyaWZ5U2NoZW1lKCdib2x0Oi8vJywgJ2JvbHQ6Ly9sb2NhbGhvc3Q6NzY4NycpO1xuICAgIHZlcmlmeVNjaGVtZSgnYm9sdDovLycsICdib2x0Oi8vbmVvNGouY29tJyk7XG4gICAgdmVyaWZ5U2NoZW1lKCdib2x0Oi8vJywgJ2JvbHQ6Ly9uZW80ai5jb206ODAnKTtcblxuICAgIHZlcmlmeVNjaGVtZSgnYm9sdCtyb3V0aW5nOi8vJywgJ2JvbHQrcm91dGluZzovLzEyNy4wLjAuMScpO1xuICAgIHZlcmlmeVNjaGVtZSgnYm9sdCtyb3V0aW5nOi8vJywgJ2JvbHQrcm91dGluZzovLzEyNy4wLjAuMTo3Njg3Jyk7XG4gICAgdmVyaWZ5U2NoZW1lKCdib2x0K3JvdXRpbmc6Ly8nLCAnYm9sdCtyb3V0aW5nOi8vbmVvNGouY29tJyk7XG4gICAgdmVyaWZ5U2NoZW1lKCdib2x0K3JvdXRpbmc6Ly8nLCAnYm9sdCtyb3V0aW5nOi8vbmVvNGouY29tOjgwJyk7XG5cbiAgICB2ZXJpZnlTY2hlbWUoJ3dzczovLycsICd3c3M6Ly9zZXJ2ZXIuY29tJyk7XG4gICAgdmVyaWZ5U2NoZW1lKCd3c3M6Ly8nLCAnd3NzOi8vc2VydmVyLmNvbTo3Njg3Jyk7XG4gICAgdmVyaWZ5U2NoZW1lKCd3c3M6Ly8nLCAnd3NzOi8vMS4xLjEuMScpO1xuICAgIHZlcmlmeVNjaGVtZSgnd3NzOi8vJywgJ3dzczovLzguOC44Ljg6ODAnKTtcblxuICAgIHZlcmlmeVNjaGVtZSgnJywgJ2ludmFsaWQgdXJsJyk7XG4gICAgdmVyaWZ5U2NoZW1lKCcnLCAnbG9jYWxob3N0Ojc2NzYnKTtcbiAgICB2ZXJpZnlTY2hlbWUoJycsICcxMjcuMC4wLjEnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIHBhcnNlIHNjaGVtZSBmcm9tIG5vbi1zdHJpbmcgYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHV0aWwucGFyc2VTY2hlbWUoe30pKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgICBleHBlY3QoKCkgPT4gdXRpbC5wYXJzZVNjaGVtZShbJ2JvbHQ6Ly9sb2NhbGhvc3Q6MjAyMCddKSkudG9UaHJvd0Vycm9yKFR5cGVFcnJvcik7XG4gICAgZXhwZWN0KCgpID0+IHV0aWwucGFyc2VTY2hlbWUoKCkgPT4gJ2JvbHQ6Ly9sb2NhbGhvc3Q6ODg4OCcpKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXJzZSB1cmwnLCAoKSA9PiB7XG4gICAgdmVyaWZ5VXJsKCdsb2NhbGhvc3QnLCAnYm9sdDovL2xvY2FsaG9zdCcpO1xuICAgIHZlcmlmeVVybCgnbG9jYWxob3N0OjkwOTAnLCAnYm9sdDovL2xvY2FsaG9zdDo5MDkwJyk7XG4gICAgdmVyaWZ5VXJsKCcxMjcuMC4wLjEnLCAnYm9sdDovLzEyNy4wLjAuMScpO1xuICAgIHZlcmlmeVVybCgnMTI3LjAuMC4xOjc2ODcnLCAnYm9sdDovLzEyNy4wLjAuMTo3Njg3Jyk7XG4gICAgdmVyaWZ5VXJsKCcxMC4xOTguMjAuMScsICdib2x0K3JvdXRpbmc6Ly8xMC4xOTguMjAuMScpO1xuICAgIHZlcmlmeVVybCgnMTUuOC44Ljk6MjAwMDQnLCAnd3NzOi8vMTUuOC44Ljk6MjAwMDQnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIHBhcnNlIHVybCBmcm9tIG5vbi1zdHJpbmcgYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHV0aWwucGFyc2VVcmwoe30pKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgICBleHBlY3QoKCkgPT4gdXRpbC5wYXJzZVVybChbJ2JvbHQ6Ly9sb2NhbGhvc3Q6MjAyMCddKSkudG9UaHJvd0Vycm9yKFR5cGVFcnJvcik7XG4gICAgZXhwZWN0KCgpID0+IHV0aWwucGFyc2VVcmwoKCkgPT4gJ2JvbHQ6Ly9sb2NhbGhvc3Q6ODg4OCcpKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXJzZSBob3N0JywgKCkgPT4ge1xuICAgIHZlcmlmeUhvc3QoJ2xvY2FsaG9zdCcsICdib2x0Oi8vbG9jYWxob3N0Jyk7XG4gICAgdmVyaWZ5SG9zdCgnbmVvNGouY29tJywgJ2JvbHQrcm91dGluZzovL25lbzRqLmNvbScpO1xuICAgIHZlcmlmeUhvc3QoJ25lbzRqLmNvbScsICdib2x0K3JvdXRpbmc6Ly9uZW80ai5jb206ODA4MCcpO1xuICAgIHZlcmlmeUhvc3QoJzEyNy4wLjAuMScsICdodHRwczovLzEyNy4wLjAuMScpO1xuICAgIHZlcmlmeUhvc3QoJzEyNy4wLjAuMScsICd3czovLzEyNy4wLjAuMToyMDIwJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCB0byBwYXJzZSBob3N0IGZyb20gbm9uLXN0cmluZyBhcmd1bWVudCcsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gdXRpbC5wYXJzZUhvc3Qoe30pKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgICBleHBlY3QoKCkgPT4gdXRpbC5wYXJzZUhvc3QoWydib2x0Oi8vbG9jYWxob3N0OjIwMjAnXSkpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuICAgIGV4cGVjdCgoKSA9PiB1dGlsLnBhcnNlSG9zdCgoKSA9PiAnYm9sdDovL2xvY2FsaG9zdDo4ODg4JykpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhcnNlIHBvcnQnLCAoKSA9PiB7XG4gICAgdmVyaWZ5UG9ydCgnNzQ3NCcsICdodHRwOi8vbG9jYWxob3N0Ojc0NzQnKTtcbiAgICB2ZXJpZnlQb3J0KCc4MDgwJywgJ2h0dHA6Ly8xMjcuMC4wLjE6ODA4MCcpO1xuICAgIHZlcmlmeVBvcnQoJzIwMDA1JywgJ2JvbHQrcm91dGluZzovL25lbzRqLmNvbToyMDAwNScpO1xuICAgIHZlcmlmeVBvcnQoJzQyNDInLCAnYm9sdCtyb3V0aW5nOi8vMS4xLjEuMTo0MjQyJyk7XG4gICAgdmVyaWZ5UG9ydCgnNDInLCAnaHR0cDovLzEwLjE5Mi4xNjguNTo0MicpO1xuXG4gICAgdmVyaWZ5UG9ydCh1bmRlZmluZWQsICdodHRwczovL2xvY2FsaG9zdCcpO1xuICAgIHZlcmlmeVBvcnQodW5kZWZpbmVkLCAnd3M6Ly84LjguOC44Jyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCB0byBwYXJzZSBwb3J0IGZyb20gbm9uLXN0cmluZyBhcmd1bWVudCcsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gdXRpbC5wYXJzZVBvcnQoe3BvcnQ6IDE1MTV9KSkudG9UaHJvd0Vycm9yKFR5cGVFcnJvcik7XG4gICAgZXhwZWN0KCgpID0+IHV0aWwucGFyc2VQb3J0KFsnYm9sdDovL2xvY2FsaG9zdDoyMDIwJ10pKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgICBleHBlY3QoKCkgPT4gdXRpbC5wYXJzZVBvcnQoKCkgPT4gJ2JvbHQ6Ly9sb2NhbGhvc3Q6ODg4OCcpKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXJzZSByb3V0aW5nIGNvbnRleHQnLCAoKSA9PiB7XG4gICAgdmVyaWZ5Um91dGluZ0NvbnRleHQoe1xuICAgICAgbmFtZTogJ21vbGx5JyxcbiAgICAgIGFnZTogJzEnLFxuICAgICAgY29sb3I6ICd3aGl0ZSdcbiAgICB9LCAnYm9sdCtyb3V0aW5nOi8vbG9jYWxob3N0Ojc2ODcvY2F0P25hbWU9bW9sbHkmYWdlPTEmY29sb3I9d2hpdGUnKTtcblxuICAgIHZlcmlmeVJvdXRpbmdDb250ZXh0KHtcbiAgICAgIGtleTE6ICd2YWx1ZTEnLFxuICAgICAga2V5MjogJ3ZhbHVlMidcbiAgICB9LCAnYm9sdCtyb3V0aW5nOi8vbG9jYWxob3N0Ojc2ODcvP2tleTE9dmFsdWUxJmtleTI9dmFsdWUyJyk7XG5cbiAgICB2ZXJpZnlSb3V0aW5nQ29udGV4dCh7a2V5OiAndmFsdWUnfSwgJ2JvbHQrcm91dGluZzovLzEwLjE5OC4xMi4yOjk5OTk/a2V5PXZhbHVlJyk7XG5cbiAgICB2ZXJpZnlSb3V0aW5nQ29udGV4dCh7fSwgJ2JvbHQrcm91dGluZzovL2xvY2FsaG9zdDo3Njg3PycpO1xuICAgIHZlcmlmeVJvdXRpbmdDb250ZXh0KHt9LCAnYm9sdCtyb3V0aW5nOi8vbG9jYWxob3N0Ojc2ODcvPycpO1xuICAgIHZlcmlmeVJvdXRpbmdDb250ZXh0KHt9LCAnYm9sdCtyb3V0aW5nOi8vbG9jYWxob3N0Ojc2ODcvY2F0PycpO1xuICAgIHZlcmlmeVJvdXRpbmdDb250ZXh0KHt9LCAnYm9sdCtyb3V0aW5nOi8vbG9jYWxob3N0Ojc2ODcvbGFsYScpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgdG8gcGFyc2Ugcm91dGluZyBjb250ZXh0IGZyb20gbm9uLXN0cmluZyBhcmd1bWVudCcsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gdXRpbC5wYXJzZVJvdXRpbmdDb250ZXh0KHtrZXkxOiAndmFsdWUxJ30pKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgICBleHBlY3QoKCkgPT4gdXRpbC5wYXJzZVJvdXRpbmdDb250ZXh0KFsnYm9sdDovL2xvY2FsaG9zdDoyMDIwLz9rZXk9dmFsdWUnXSkpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuICAgIGV4cGVjdCgoKSA9PiB1dGlsLnBhcnNlUm91dGluZ0NvbnRleHQoKCkgPT4gJ2JvbHQ6Ly9sb2NhbGhvc3Q/a2V5MT12YWx1ZSZrZXkyPXZhbHVlMicpKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIHBhcnNlIHJvdXRpbmcgY29udGV4dCBmcm9tIGlsbGVnYWwgcGFyYW1ldGVycycsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gdXRpbC5wYXJzZVJvdXRpbmdDb250ZXh0KCdib2x0K3JvdXRpbmc6Ly9sb2NhbGhvc3Q6NzY4Ny8/anVzdEtleScpKS50b1Rocm93KCk7XG4gICAgZXhwZWN0KCgpID0+IHV0aWwucGFyc2VSb3V0aW5nQ29udGV4dCgnYm9sdCtyb3V0aW5nOi8vbG9jYWxob3N0Ojc2ODcvPz12YWx1ZTEma2V5Mj12YWx1ZTInKSkudG9UaHJvdygpO1xuICAgIGV4cGVjdCgoKSA9PiB1dGlsLnBhcnNlUm91dGluZ0NvbnRleHQoJ2JvbHQrcm91dGluZzovL2xvY2FsaG9zdDo3Njg3L2tleTE/PXZhbHVlMSZrZXkyPScpKS50b1Rocm93KCk7XG4gICAgZXhwZWN0KCgpID0+IHV0aWwucGFyc2VSb3V0aW5nQ29udGV4dCgnYm9sdCtyb3V0aW5nOi8vbG9jYWxob3N0Ojc2ODcvP2tleTE9dmFsdWUxJmtleTI9dmFsdWUyJmtleTE9dmFsdWUyJykpLnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gdmVyaWZ5VmFsaWRTdHJpbmcoc3RyKSB7XG4gICAgZXhwZWN0KHV0aWwuYXNzZXJ0U3RyaW5nKHN0ciwgJ1Rlc3Qgc3RyaW5nJykpLnRvQmUoc3RyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZlcmlmeUludmFsaWRTdHJpbmcoc3RyKSB7XG4gICAgZXhwZWN0KCgpID0+IHV0aWwuYXNzZXJ0U3RyaW5nKHN0ciwgJ1Rlc3Qgc3RyaW5nJykpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuICB9XG5cbiAgZnVuY3Rpb24gdmVyaWZ5U2NoZW1lKGV4cGVjdGVkU2NoZW1lLCB1cmwpIHtcbiAgICBleHBlY3QodXRpbC5wYXJzZVNjaGVtZSh1cmwpKS50b0VxdWFsKGV4cGVjdGVkU2NoZW1lKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZlcmlmeVVybChleHBlY3RlZFVybCwgdXJsKSB7XG4gICAgZXhwZWN0KHV0aWwucGFyc2VVcmwodXJsKSkudG9FcXVhbChleHBlY3RlZFVybCk7XG4gIH1cblxuICBmdW5jdGlvbiB2ZXJpZnlIb3N0KGV4cGVjdGVkSG9zdCwgdXJsKSB7XG4gICAgZXhwZWN0KHV0aWwucGFyc2VIb3N0KHVybCkpLnRvRXF1YWwoZXhwZWN0ZWRIb3N0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZlcmlmeVBvcnQoZXhwZWN0ZWRQb3J0LCB1cmwpIHtcbiAgICBleHBlY3QodXRpbC5wYXJzZVBvcnQodXJsKSkudG9FcXVhbChleHBlY3RlZFBvcnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gdmVyaWZ5Um91dGluZ0NvbnRleHQoZXhwZWN0ZWRSb3V0aW5nQ29udGV4dCwgdXJsKSB7XG4gICAgZXhwZWN0KHV0aWwucGFyc2VSb3V0aW5nQ29udGV4dCh1cmwpKS50b0VxdWFsKGV4cGVjdGVkUm91dGluZ0NvbnRleHQpO1xuICB9XG5cbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBuZW80aiBmcm9tICcuLi8uLi9zcmMvdjEnO1xuXG5kZXNjcmliZSgnYXV0aCcsICgpID0+IHtcblxuICBpdCgnc2hvdWxkIHVzZSBjb3JyZWN0IHVzZXJuYW1lIGFuZCBwYXNzd29yZCBpbiBiYXNpYyBhdXRoJywgKCkgPT4ge1xuICAgIGNvbnN0IHRva2VuID0gbmVvNGouYXV0aC5iYXNpYygnY2F0JywgJ2RvZycpO1xuICAgIGV4cGVjdCh0b2tlbikudG9FcXVhbCh7XG4gICAgICBzY2hlbWU6ICdiYXNpYycsXG4gICAgICBwcmluY2lwYWw6ICdjYXQnLFxuICAgICAgY3JlZGVudGlhbHM6ICdkb2cnXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc3VwcG9ydCByZWFsbSBpbiBiYXNpYyBhdXRoJywgKCkgPT4ge1xuICAgIGNvbnN0IHRva2VuID0gbmVvNGouYXV0aC5iYXNpYygnY2F0JywgJ2RvZycsICdhcGFydG1lbnQnKTtcbiAgICBleHBlY3QodG9rZW4pLnRvRXF1YWwoe1xuICAgICAgc2NoZW1lOiAnYmFzaWMnLFxuICAgICAgcHJpbmNpcGFsOiAnY2F0JyxcbiAgICAgIGNyZWRlbnRpYWxzOiAnZG9nJyxcbiAgICAgIHJlYWxtOiAnYXBhcnRtZW50J1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHVzZSBjb3JyZWN0IHRpY2tldCBpbiBrZXJiZXJvcycsICgpID0+IHtcbiAgICBjb25zdCB0b2tlbiA9IG5lbzRqLmF1dGgua2VyYmVyb3MoJ215LXRpY2tldCcpO1xuICAgIGV4cGVjdCh0b2tlbikudG9FcXVhbCh7XG4gICAgICBzY2hlbWU6ICdrZXJiZXJvcycsXG4gICAgICBwcmluY2lwYWw6ICcnLFxuICAgICAgY3JlZGVudGlhbHM6ICdteS10aWNrZXQnXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY29uc3RydWN0IGNvcnJlY3QgY3VzdG9tIGF1dGgnLCAoKSA9PiB7XG4gICAgY29uc3QgdG9rZW4gPSBuZW80ai5hdXRoLmN1c3RvbSgnY2F0JywgJ2RvZycsICdhcGFydG1lbnQnLCAncGV0cycpO1xuICAgIGV4cGVjdCh0b2tlbikudG9FcXVhbCh7XG4gICAgICBzY2hlbWU6ICdwZXRzJyxcbiAgICAgIHByaW5jaXBhbDogJ2NhdCcsXG4gICAgICBjcmVkZW50aWFsczogJ2RvZycsXG4gICAgICByZWFsbTogJ2FwYXJ0bWVudCdcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IHBhcmFtZXRlcnMgaW4gY3VzdG9tIGF1dGgnLCAoKSA9PiB7XG4gICAgY29uc3QgdG9rZW4gPSBuZW80ai5hdXRoLmN1c3RvbSgnY2F0JywgJ2RvZycsICdhcGFydG1lbnQnLCAncGV0cycsIHtrZXkxOiAndmFsdWUxJywga2V5MjogNDJ9KTtcbiAgICBleHBlY3QodG9rZW4pLnRvRXF1YWwoe1xuICAgICAgc2NoZW1lOiAncGV0cycsXG4gICAgICBwcmluY2lwYWw6ICdjYXQnLFxuICAgICAgY3JlZGVudGlhbHM6ICdkb2cnLFxuICAgICAgcmVhbG06ICdhcGFydG1lbnQnLFxuICAgICAgcGFyYW1ldGVyczoge2tleTE6ICd2YWx1ZTEnLCBrZXkyOiA0Mn1cbiAgICB9KTtcbiAgfSk7XG5cbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBuZW80aiBmcm9tICcuLi8uLi9zcmMvdjEnO1xuaW1wb3J0IHNoYXJlZE5lbzRqIGZyb20gJy4uL2ludGVybmFsL3NoYXJlZC1uZW80aic7XG5cbmRlc2NyaWJlKCdkcml2ZXInLCAoKSA9PiB7XG5cbiAgbGV0IGRyaXZlcjtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBkcml2ZXIgPSBudWxsO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGlmKGRyaXZlcikge1xuICAgICAgZHJpdmVyLmNsb3NlKCk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnc2hvdWxkIGV4cG9zZSBzZXNzaW9ucycsICgpID0+IHtcbiAgICAvLyBHaXZlblxuICAgIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RcIiwgc2hhcmVkTmVvNGouYXV0aFRva2VuKTtcblxuICAgIC8vIFdoZW5cbiAgICBjb25zdCBzZXNzaW9uID0gZHJpdmVyLnNlc3Npb24oKTtcblxuICAgIC8vIFRoZW5cbiAgICBleHBlY3QoIHNlc3Npb24gKS5ub3QudG9CZU51bGwoKTtcbiAgICBkcml2ZXIuY2xvc2UoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYW5kbGUgY29ubmVjdGlvbiBlcnJvcnMnLCBkb25lID0+IHtcbiAgICAvLyBHaXZlblxuICAgIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RlXCIsIHNoYXJlZE5lbzRqLmF1dGhUb2tlbik7XG5cbiAgICAvLyBFeHBlY3RcbiAgICBkcml2ZXIub25FcnJvciA9IGVycm9yID0+IHtcbiAgICAgIC8vdGhlIGVycm9yIG1lc3NhZ2UgaXMgZGlmZmVyZW50IHdoZXRoZXIgaW4gYnJvd3NlciBvciBub2RlXG4gICAgICBleHBlY3QoZXJyb3IubWVzc2FnZSkubm90LnRvQmVOdWxsKCk7XG4gICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9FcXVhbChuZW80ai5lcnJvci5TRVJWSUNFX1VOQVZBSUxBQkxFKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9O1xuXG4gICAgLy8gV2hlblxuICAgIHN0YXJ0TmV3VHJhbnNhY3Rpb24oZHJpdmVyKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYW5kbGUgd3Jvbmcgc2NoZW1lJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBuZW80ai5kcml2ZXIoXCJ0YW5rOi8vbG9jYWxob3N0XCIsIHNoYXJlZE5lbzRqLmF1dGhUb2tlbikpXG4gICAgICAudG9UaHJvdyhuZXcgRXJyb3IoXCJVbmtub3duIHNjaGVtZTogdGFuazovL1wiKSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGFuZGxlIFVSTCBwYXJhbWV0ZXIgc3RyaW5nJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBuZW80ai5kcml2ZXIoe3VyaTogJ2JvbHQ6Ly9sb2NhbGhvc3QnfSkpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuXG4gICAgZXhwZWN0KCgpID0+IG5lbzRqLmRyaXZlcihbJ2JvbHQ6bG9jYWxob3N0J10pKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcblxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBkcml2ZXIgPSBuZW80ai5kcml2ZXIoU3RyaW5nKCdib2x0Oi8vbG9jYWxob3N0JyksIHNoYXJlZE5lbzRqLmF1dGhUb2tlbik7XG4gICAgICByZXR1cm4gZHJpdmVyLnNlc3Npb24oKTtcbiAgICB9KS50b0JlRGVmaW5lZCgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgZWFybHkgb24gd3JvbmcgY3JlZGVudGlhbHMnLCBkb25lID0+IHtcbiAgICAvLyBHaXZlblxuICAgIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RcIiwgbmVvNGouYXV0aC5iYXNpYyhcIm5lbzRqXCIsIFwid2hvIHdvdWxkIHVzZSBzdWNoIGEgcGFzc3dvcmRcIikpO1xuXG4gICAgLy8gRXhwZWN0XG4gICAgZHJpdmVyLm9uRXJyb3IgPSBlcnIgPT4ge1xuICAgICAgLy90aGUgZXJyb3IgbWVzc2FnZSBpcyBkaWZmZXJlbnQgd2hldGhlciBpbiBicm93c2VyIG9yIG5vZGVcbiAgICAgIGV4cGVjdChlcnIuY29kZSkudG9FcXVhbCgnTmVvLkNsaWVudEVycm9yLlNlY3VyaXR5LlVuYXV0aG9yaXplZCcpO1xuICAgICAgZG9uZSgpO1xuICAgIH07XG5cbiAgICAvLyBXaGVuXG4gICAgc3RhcnROZXdUcmFuc2FjdGlvbihkcml2ZXIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGluZGljYXRlIHN1Y2Nlc3MgZWFybHkgb24gY29ycmVjdCBjcmVkZW50aWFscycsIGRvbmUgPT4ge1xuICAgIC8vIEdpdmVuXG4gICAgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdDovL2xvY2FsaG9zdFwiLCBzaGFyZWROZW80ai5hdXRoVG9rZW4pO1xuXG4gICAgLy8gRXhwZWN0XG4gICAgZHJpdmVyLm9uQ29tcGxldGVkID0gbWV0YSA9PiB7XG4gICAgICBkb25lKCk7XG4gICAgfTtcblxuICAgIC8vIFdoZW5cbiAgICBzdGFydE5ld1RyYW5zYWN0aW9uKGRyaXZlcik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYmUgcG9zc2libGUgdG8gcGFzcyBhIHJlYWxtIHdpdGggYmFzaWMgYXV0aCB0b2tlbnMnLCBkb25lID0+IHtcbiAgICAvLyBHaXZlblxuICAgIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RcIiwgbmVvNGouYXV0aC5iYXNpYyhzaGFyZWROZW80ai51c2VybmFtZSwgc2hhcmVkTmVvNGoucGFzc3dvcmQsIFwibmF0aXZlXCIpKTtcblxuICAgIC8vIEV4cGVjdFxuICAgIGRyaXZlci5vbkNvbXBsZXRlZCA9IG1ldGEgPT4ge1xuICAgICAgZG9uZSgpO1xuICAgIH07XG5cbiAgICAvLyBXaGVuXG4gICAgc3RhcnROZXdUcmFuc2FjdGlvbihkcml2ZXIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGNyZWF0ZSBjdXN0b20gYXV0aCB0b2tlbnMnLCBkb25lID0+IHtcbiAgICAvLyBHaXZlblxuICAgIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RcIiwgbmVvNGouYXV0aC5jdXN0b20oc2hhcmVkTmVvNGoudXNlcm5hbWUsIHNoYXJlZE5lbzRqLnBhc3N3b3JkLCBcIm5hdGl2ZVwiLCBcImJhc2ljXCIpKTtcblxuICAgIC8vIEV4cGVjdFxuICAgIGRyaXZlci5vbkNvbXBsZXRlZCA9IG1ldGEgPT4ge1xuICAgICAgZG9uZSgpO1xuICAgIH07XG5cbiAgICAvLyBXaGVuXG4gICAgc3RhcnROZXdUcmFuc2FjdGlvbihkcml2ZXIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGNyZWF0ZSBjdXN0b20gYXV0aCB0b2tlbnMgd2l0aCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMnLCBkb25lID0+IHtcbiAgICAvLyBHaXZlblxuICAgIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RcIiwgbmVvNGouYXV0aC5jdXN0b20oc2hhcmVkTmVvNGoudXNlcm5hbWUsIHNoYXJlZE5lbzRqLnBhc3N3b3JkLCBcIm5hdGl2ZVwiLCBcImJhc2ljXCIsIHtzZWNyZXQ6IDQyfSkpO1xuXG4gICAgLy8gRXhwZWN0XG4gICAgZHJpdmVyLm9uQ29tcGxldGVkID0gKCkgPT4ge1xuICAgICAgZG9uZSgpO1xuICAgIH07XG5cbiAgICAvLyBXaGVuXG4gICAgc3RhcnROZXdUcmFuc2FjdGlvbihkcml2ZXIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgbmljZWx5IHdoZW4gY29ubmVjdGluZyB3aXRoIHJvdXRpbmcgdG8gc3RhbmRhbG9uZSBzZXJ2ZXInLCBkb25lID0+IHtcbiAgICAvLyBHaXZlblxuICAgIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQrcm91dGluZzovL2xvY2FsaG9zdFwiLCBzaGFyZWROZW80ai5hdXRoVG9rZW4pO1xuXG4gICAgLy8gRXhwZWN0XG4gICAgZHJpdmVyLm9uRXJyb3IgPSBlcnJvciA9PiB7XG4gICAgICBleHBlY3QoZXJyb3IubWVzc2FnZSkudG9FcXVhbCgnU2VydmVyIGxvY2FsaG9zdCBjb3VsZCBub3QgcGVyZm9ybSByb3V0aW5nLiBNYWtlIHN1cmUgeW91IGFyZSBjb25uZWN0aW5nIHRvIGEgY2F1c2FsIGNsdXN0ZXInKTtcbiAgICAgIGV4cGVjdChlcnJvci5jb2RlKS50b0VxdWFsKG5lbzRqLmVycm9yLlNFUlZJQ0VfVU5BVkFJTEFCTEUpO1xuICAgICAgZG9uZSgpO1xuICAgIH07XG5cbiAgICAvLyBXaGVuXG4gICAgc3RhcnROZXdUcmFuc2FjdGlvbihkcml2ZXIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGhhdmUgY29ycmVjdCB1c2VyIGFnZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IGRpcmVjdERyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RcIik7XG4gICAgZXhwZWN0KGRpcmVjdERyaXZlci5fdXNlckFnZW50KS50b0JlKFwibmVvNGotamF2YXNjcmlwdC8wLjAuMC1kZXZcIik7XG4gICAgZGlyZWN0RHJpdmVyLmNsb3NlKCk7XG5cbiAgICBjb25zdCByb3V0aW5nRHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdCtyb3V0aW5nOi8vbG9jYWxob3N0XCIpO1xuICAgIGV4cGVjdChyb3V0aW5nRHJpdmVyLl91c2VyQWdlbnQpLnRvQmUoXCJuZW80ai1qYXZhc2NyaXB0LzAuMC4wLWRldlwiKTtcbiAgICByb3V0aW5nRHJpdmVyLmNsb3NlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCB3aGVuIFRSVVNUX09OX0ZJUlNUX1VTRSBpcyB1c2VkIHdpdGggcm91dGluZycsICgpID0+IHtcbiAgICBjb25zdCBjcmVhdGVSb3V0aW5nRHJpdmVyV2l0aFRPRlUgPSAoKSA9PiB7XG4gICAgICBkcml2ZXIgPSBuZW80ai5kcml2ZXIoJ2JvbHQrcm91dGluZzovL2xvY2FsaG9zdCcsIHNoYXJlZE5lbzRqLnVzZXJuYW1lLCB7XG4gICAgICAgIGVuY3J5cHRlZDogXCJFTkNSWVBUSU9OX09OXCIsXG4gICAgICAgICAgdHJ1c3Q6ICdUUlVTVF9PTl9GSVJTVF9VU0UnXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZXhwZWN0KGNyZWF0ZVJvdXRpbmdEcml2ZXJXaXRoVE9GVSkudG9UaHJvdygpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBib2x0Oi8vIHNjaGVtZSB1c2VkIHdpdGggcm91dGluZyBwYXJhbXMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IG5lbzRqLmRyaXZlcignYm9sdDovL2xvY2FsaG9zdDo3Njg3Lz9wb2xpY3k9bXlfcG9saWN5JykpLnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgY29uc3QgZXhwb3NlZFR5cGVzID0gW1xuICAgICdOb2RlJyxcbiAgICAnUGF0aCcsXG4gICAgJ1BhdGhTZWdtZW50JyxcbiAgICAnUmVjb3JkJyxcbiAgICAnUmVsYXRpb25zaGlwJyxcbiAgICAnUmVzdWx0JyxcbiAgICAnUmVzdWx0U3VtbWFyeScsXG4gICAgJ1VuYm91bmRSZWxhdGlvbnNoaXAnLFxuICBdO1xuXG4gIGV4cG9zZWRUeXBlcy5mb3JFYWNoKHR5cGUgPT4ge1xuICAgIGl0KGBzaG91bGQgZXhwb3NlIHR5cGUgJHt0eXBlfWAsICgpID0+IHtcbiAgICAgIGV4cGVjdCh1bmRlZmluZWQgPT09IG5lbzRqLnR5cGVzW3R5cGVdKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyBuZXcgdHJhbnNhY3Rpb24gdG8gZm9yY2UgbmV3IG5ldHdvcmsgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIHtEcml2ZXJ9IGRyaXZlciAtIHRoZSBkcml2ZXIgdG8gdXNlLlxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnROZXdUcmFuc2FjdGlvbihkcml2ZXIpIHtcbiAgICBjb25zdCBzZXNzaW9uID0gZHJpdmVyLnNlc3Npb24oKTtcbiAgICBleHBlY3Qoc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCkpLnRvQmVEZWZpbmVkKCk7XG4gIH1cblxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxudmFyIHYxID0gcmVxdWlyZSgnLi4vLi4vbGliL3YxJyk7XG52YXIgaW50ID0gdjEuaW50O1xudmFyIGludGVnZXIgPSB2MS5pbnRlZ2VyO1xuXG5kZXNjcmliZSgnUG9vbCcsIGZ1bmN0aW9uKCkge1xuICBpdCgnZXhwb3NlcyBpblNhZmVSYW5nZSBmdW5jdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBleHBlY3QoaW50ZWdlci5pblNhZmVSYW5nZShpbnQoXCI5MDA3MTk5MjU0NzQwOTkxXCIpKSkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChpbnRlZ2VyLmluU2FmZVJhbmdlKGludChcIjkwMDcxOTkyNTQ3NDA5OTJcIikpKS50b0JlRmFsc3koKTtcbiAgICBleHBlY3QoaW50ZWdlci5pblNhZmVSYW5nZShpbnQoXCItOTAwNzE5OTI1NDc0MDk5MVwiKSkpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QoaW50ZWdlci5pblNhZmVSYW5nZShpbnQoXCItOTAwNzE5OTI1NDc0MDk5MlwiKSkpLnRvQmVGYWxzeSgpO1xuICB9KTtcblxuICBpdCgnZXhwb3NlcyB0b051bWJlciBmdW5jdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBleHBlY3QoaW50ZWdlci50b051bWJlcihpbnQoXCI5MDA3MTk5MjU0NzQwOTkxXCIpKSkudG9FcXVhbCg5MDA3MTk5MjU0NzQwOTkxKTtcbiAgICBleHBlY3QoaW50ZWdlci50b051bWJlcihpbnQoXCItOTAwNzE5OTI1NDc0MDk5MVwiKSkpLnRvRXF1YWwoLTkwMDcxOTkyNTQ3NDA5OTEpO1xuICB9KTtcblxuICBpdCgnZXhwb3NlcyB0b1N0cmluZyBmdW5jdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBleHBlY3QoaW50ZWdlci50b1N0cmluZyhpbnQoXCI5MDA3MTk5MjU0NzQwOTkxXCIpKSkudG9FcXVhbChcIjkwMDcxOTkyNTQ3NDA5OTFcIik7XG4gICAgZXhwZWN0KGludGVnZXIudG9TdHJpbmcoaW50KFwiOTAwNzE5OTI1NDc0MDk5MlwiKSkpLnRvRXF1YWwoXCI5MDA3MTk5MjU0NzQwOTkyXCIpO1xuICAgIGV4cGVjdChpbnRlZ2VyLnRvU3RyaW5nKGludChcIi05MDA3MTk5MjU0NzQwOTkxXCIpKSkudG9FcXVhbChcIi05MDA3MTk5MjU0NzQwOTkxXCIpO1xuICAgIGV4cGVjdChpbnRlZ2VyLnRvU3RyaW5nKGludChcIi05MDA3MTk5MjU0NzQwOTkyXCIpKSkudG9FcXVhbChcIi05MDA3MTk5MjU0NzQwOTkyXCIpO1xuICB9KTtcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIG9zID0gcmVxdWlyZSgnb3MnKTtcbnZhciBOb2RlQ2hhbm5lbCA9IHJlcXVpcmUoJy4uLy4uL2xpYi92MS9pbnRlcm5hbC9jaC1ub2RlJykuZGVmYXVsdDtcbnZhciBzaGFyZWROZW80aiA9IHJlcXVpcmUoJy4uLy4uL3Rlc3QvaW50ZXJuYWwvc2hhcmVkLW5lbzRqJykuZGVmYXVsdDtcblxuZGVzY3JpYmUoJ1BhY2thZ2UnLCBmdW5jdGlvbigpIHtcbiAgdmFyIGRyaXZlckdsb2JhbCA9IHtjbG9zZTogZnVuY3Rpb24oKSB7fX07XG4gIGFmdGVyQWxsKGZ1bmN0aW9uKCkge1xuICAgIGRyaXZlckdsb2JhbC5jbG9zZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHdvcmsnLCBmdW5jdGlvbihkb25lKXtcbiAgICB2YXIgbmVvNGpSZXE7XG4gICAgLy8gQXNzdW1pbmcgd2Ugb25seSBydW4gdGhpcyB0ZXN0IG9uIE5vZGVKU1xuICAgIGlmKCAhTm9kZUNoYW5uZWwuYXZhaWxhYmxlICkge1xuICAgICAgZG9uZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBuZW80alJlcSA9IHJlcXVpcmUocGF0aC5qb2luKG9zLnRtcGRpcigpLCAnc2FuZGJveCcsICdub2RlX21vZHVsZXMnLCAnbmVvNGotZHJpdmVyJywgJ2xpYicpKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGRvbmUuZmFpbCgnQ291bGQgbm90IGxvYWQgc2FuZGJveCBwYWNrYWdlJylcbiAgICB9XG5cbiAgICBkcml2ZXJHbG9iYWwgPSBuZW80alJlcS52MS5kcml2ZXIoXCJib2x0Oi8vbG9jYWxob3N0XCIsIG5lbzRqUmVxLnYxLmF1dGguYmFzaWMoc2hhcmVkTmVvNGoudXNlcm5hbWUsIHNoYXJlZE5lbzRqLnBhc3N3b3JkKSk7XG4gICAgdmFyIHNlc3Npb24gPSBkcml2ZXJHbG9iYWwuc2Vzc2lvbigpO1xuICAgIHNlc3Npb24ucnVuKCdSRVRVUk4gMSBBUyBhbnN3ZXInKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzLmxlbmd0aCkudG9CZSgxKTtcbiAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkc1swXS5nZXQoJ2Fuc3dlcicpLnRvTnVtYmVyKCkpLnRvQmUoMSk7XG4gICAgICBzZXNzaW9uLmNsb3NlKCk7XG4gICAgICBkb25lKCk7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24oZSkge1xuICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICBkb25lLmZhaWwoXCJFcnJvciBpbiB0ZXN0XCIpXG4gICAgfSlcbiAgfSlcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBSZWNvcmQgPSByZXF1aXJlKFwiLi4vLi4vbGliL3YxL3JlY29yZFwiKS5kZWZhdWx0O1xudmFyIE5lbzRqRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vbGliL3YxL2Vycm9yXCIpLk5lbzRqRXJyb3I7XG5cblxuZGVzY3JpYmUoJ1JlY29yZCcsIGZ1bmN0aW9uKCkge1xuICBpdCgnc2hvdWxkIGFsbG93IGdldHRpbmcgZmllbGRzIGJ5IG5hbWUnLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciByZWNvcmQgPSBuZXcgUmVjb3JkKCBbXCJuYW1lXCJdLCBbXCJCb2JcIl0gKTtcblxuICAgIC8vIFdoZW4gJiBUaGVuXG4gICAgZXhwZWN0KHJlY29yZC5nZXQoXCJuYW1lXCIpKS50b0VxdWFsKFwiQm9iXCIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFsbG93IGNoZWNraW5nIGlmIGZpZWxkcyBleGlzdCcsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIHJlY29yZCA9IG5ldyBSZWNvcmQoIFtcIm5hbWVcIl0sIFtcIkJvYlwiXSApO1xuXG4gICAgLy8gV2hlbiAmIFRoZW5cbiAgICBleHBlY3QocmVjb3JkLmhhcyhcIm5hbWVcIikpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KHJlY29yZC5oYXMoXCJpbnZhbGlkIGtleVwiKSkudG9FcXVhbChmYWxzZSk7XG4gICAgZXhwZWN0KHJlY29yZC5oYXMoMCkpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KHJlY29yZC5oYXMoMSkpLnRvRXF1YWwoZmFsc2UpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRyYW5zZm9ybSBSZWNvcmQgaW50byBPYmplY3QnLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciByZWNvcmQgPSBuZXcgUmVjb3JkKCBbXCJuYW1lXCIsIFwiYWdlXCIsIFwibmVzdGVkXCJdLCBbXCJCb2JcIiwgMjAuNSwge3Rlc3Q6IHRydWV9XSApO1xuXG4gICAgLy8gV2hlblxuICAgIHZhciBvYmogPSByZWNvcmQudG9PYmplY3QoKTtcblxuICAgIC8vIFRoZW5cbiAgICBleHBlY3Qob2JqLm5hbWUpLnRvRXF1YWwoXCJCb2JcIik7XG4gICAgZXhwZWN0KG9iai5hZ2UpLnRvRXF1YWwoMjAuNSk7XG4gICAgZXhwZWN0KG9iai5uZXN0ZWQudGVzdCkudG9FcXVhbCh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBnaXZlIGhlbHBmdWwgZXJyb3Igb24gbm8gc3VjaCBrZXknLCBmdW5jdGlvbigpIHtcbiAgICAvLyBHaXZlblxuICAgIHZhciByZWNvcmQgPSBuZXcgUmVjb3JkKCBbXCJuYW1lXCJdLCBbXCJCb2JcIl0gKTtcblxuICAgIC8vIFdoZW4gJiBUaGVuXG4gICAgZXhwZWN0KCBmdW5jdGlvbigpIHsgcmVjb3JkLmdldChcImFnZVwiKSB9KS50b1Rocm93KG5ldyBOZW80akVycm9yKFxuICAgICAgXCJUaGlzIHJlY29yZCBoYXMgbm8gZmllbGQgd2l0aCBrZXkgJ2FnZScsIGF2YWlsYWJsZSBrZXkgYXJlOiBbbmFtZV0uXCIpKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhbGxvdyBnZXR0aW5nIGZpZWxkcyBieSBpbmRleCcsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIHJlY29yZCA9IG5ldyBSZWNvcmQoIFtcIm5hbWVcIl0sIFtcIkJvYlwiXSApO1xuXG4gICAgLy8gV2hlbiAmIFRoZW5cbiAgICBleHBlY3QocmVjb3JkLmdldCgwKSkudG9FcXVhbChcIkJvYlwiKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBnaXZlIGhlbHBmdWwgZXJyb3Igb24gbm8gc3VjaCBpbmRleCcsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIHJlY29yZCA9IG5ldyBSZWNvcmQoIFtcIm5hbWVcIl0sIFtcIkJvYlwiXSApO1xuXG4gICAgLy8gV2hlbiAmIFRoZW5cbiAgICBleHBlY3QoIGZ1bmN0aW9uKCkgeyByZWNvcmQuZ2V0KDEpIH0pLnRvVGhyb3cobmV3IE5lbzRqRXJyb3IoXG4gICAgICBcIlRoaXMgcmVjb3JkIGhhcyBubyBmaWVsZCB3aXRoIGluZGV4ICcxJy4gUmVtZW1iZXIgdGhhdCBpbmRleGVzIHN0YXJ0IGF0IGAwYCwgXCIgK1xuICAgICAgXCJhbmQgbWFrZSBzdXJlIHlvdXIgc3RhdGVtZW50IHJldHVybnMgcmVjb3JkcyBpbiB0aGUgc2hhcGUgeW91IG1lYW50IGl0IHRvLlwiKSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGF2ZSBsZW5ndGgnLCBmdW5jdGlvbigpIHtcbiAgICAvLyBXaGVuICYgVGhlblxuICAgIGV4cGVjdCggbmV3IFJlY29yZCggW10sIFtdKS5sZW5ndGggKS50b0JlKDApO1xuICAgIGV4cGVjdCggbmV3IFJlY29yZCggW1wibmFtZVwiXSwgW1wiQm9iXCJdKS5sZW5ndGggKS50b0JlKDEpO1xuICAgIGV4cGVjdCggbmV3IFJlY29yZCggW1wibmFtZVwiLCBcImFnZVwiXSwgW1wiQm9iXCIsIDQ1XSkubGVuZ3RoICkudG9CZSgyKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhbGxvdyBmb3JFYWNoIHRocm91Z2ggdGhlIHJlY29yZCcsIGZ1bmN0aW9uKCkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIHJlY29yZCA9IG5ldyBSZWNvcmQoIFtcIm5hbWVcIiwgXCJhZ2VcIl0sIFtcIkJvYlwiLCA0NV0gKTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAvLyBXaGVuXG4gICAgcmVjb3JkLmZvckVhY2goIGZ1bmN0aW9uKCB2YWx1ZSwga2V5LCByZWNvcmQgKSB7XG4gICAgICByZXN1bHQucHVzaCggW3ZhbHVlLCBrZXksIHJlY29yZF0gKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZW5cbiAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFtbXCJCb2JcIiwgXCJuYW1lXCIsIHJlY29yZF0sIFs0NSwgXCJhZ2VcIiwgcmVjb3JkXV0pO1xuICB9KTtcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNyBcIk5lbyBUZWNobm9sb2d5LFwiLFwiXG4gKiBOZXR3b3JrIEVuZ2luZSBmb3IgT2JqZWN0cyBpbiBMdW5kIEFCIFtodHRwOi8vbmVvdGVjaG5vbG9neS5jb21dXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgTmVvNGouXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBuZW80aiBmcm9tICcuLi8uLi9zcmMvdjEnO1xuaW1wb3J0IHNoYXJlZE5lbzRqIGZyb20gJy4uL2ludGVybmFsL3NoYXJlZC1uZW80aic7XG5cbmRlc2NyaWJlKCdyZXN1bHQgc3RyZWFtJywgKCkgPT4ge1xuXG4gIGxldCBkcml2ZXIsIHNlc3Npb247XG5cbiAgYmVmb3JlRWFjaChkb25lID0+IHtcbiAgICBkcml2ZXIgPSBuZW80ai5kcml2ZXIoJ2JvbHQ6Ly9sb2NhbGhvc3QnLCBzaGFyZWROZW80ai5hdXRoVG9rZW4pO1xuICAgIHNlc3Npb24gPSBkcml2ZXIuc2Vzc2lvbigpO1xuXG4gICAgc2Vzc2lvbi5ydW4oXCJNQVRDSCAobikgREVUQUNIIERFTEVURSBuXCIpLnRoZW4oZG9uZSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgZHJpdmVyLmNsb3NlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYWxsb3cgY2hhaW5pbmcgYHRoZW5gLCByZXR1cm5pbmcgYSBuZXcgdGhpbmcgaW4gZWFjaCcsIGRvbmUgPT4ge1xuICAgIC8vIFdoZW4gJiBUaGVuXG4gICAgc2Vzc2lvbi5ydW4oIFwiUkVUVVJOIDFcIilcbiAgICAgIC50aGVuKCgpID0+ICdmaXJzdCcpXG4gICAgICAudGhlbihhcmcgPT4ge1xuICAgICAgICBleHBlY3QoYXJnKS50b0JlKCBcImZpcnN0XCIgKTtcbiAgICAgICAgcmV0dXJuIFwic2Vjb25kXCI7XG4gICAgICB9KVxuICAgICAgLnRoZW4oYXJnID0+IHtcbiAgICAgICAgZXhwZWN0KGFyZykudG9CZSggXCJzZWNvbmRcIiApO1xuICAgICAgfSlcbiAgICAgIC50aGVuKGRvbmUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFsbG93IGNhdGNoaW5nIGV4Y2VwdGlvbiB0aHJvd24gaW4gYHRoZW5gJywgZG9uZSA9PiB7XG4gICAgLy8gV2hlbiAmIFRoZW5cbiAgICBzZXNzaW9uLnJ1biggXCJSRVRVUk4gMVwiKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBd2F5IHdpdGggeW91IVwiKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgZXhwZWN0KGVyci5tZXNzYWdlKS50b0JlKCBcIkF3YXkgd2l0aCB5b3UhXCIgKTtcbiAgICAgICAgZG9uZSgpXG4gICAgICB9KTtcbiAgfSk7XG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTcgXCJOZW8gVGVjaG5vbG9neSxcIixcIlxuICogTmV0d29yayBFbmdpbmUgZm9yIE9iamVjdHMgaW4gTHVuZCBBQiBbaHR0cDovL25lb3RlY2hub2xvZ3kuY29tXVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE5lbzRqLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgbmVvNGogZnJvbSAnLi4vLi4vc3JjL3YxJztcbmltcG9ydCB7c3RhdGVtZW50VHlwZX0gZnJvbSAnLi4vLi4vc3JjL3YxL3Jlc3VsdC1zdW1tYXJ5JztcbmltcG9ydCBTZXNzaW9uIGZyb20gJy4uLy4uL3NyYy92MS9zZXNzaW9uJztcbmltcG9ydCB7UkVBRH0gZnJvbSAnLi4vLi4vc3JjL3YxL2RyaXZlcic7XG5pbXBvcnQge1NpbmdsZUNvbm5lY3Rpb25Qcm92aWRlcn0gZnJvbSAnLi4vLi4vc3JjL3YxL2ludGVybmFsL2Nvbm5lY3Rpb24tcHJvdmlkZXJzJztcbmltcG9ydCBGYWtlQ29ubmVjdGlvbiBmcm9tICcuLi9pbnRlcm5hbC9mYWtlLWNvbm5lY3Rpb24nO1xuaW1wb3J0IHNoYXJlZE5lbzRqIGZyb20gJy4uL2ludGVybmFsL3NoYXJlZC1uZW80aic7XG5cbmRlc2NyaWJlKCdzZXNzaW9uJywgKCkgPT4ge1xuXG4gIGxldCBkcml2ZXI7XG4gIGxldCBzZXNzaW9uO1xuICBsZXQgc2VydmVyTWV0YWRhdGE7XG4gIGxldCBvcmlnaW5hbFRpbWVvdXQ7XG5cbiAgYmVmb3JlRWFjaChkb25lID0+IHtcbiAgICBkcml2ZXIgPSBuZW80ai5kcml2ZXIoJ2JvbHQ6Ly9sb2NhbGhvc3QnLCBzaGFyZWROZW80ai5hdXRoVG9rZW4pO1xuICAgIGRyaXZlci5vbkNvbXBsZXRlZCA9IG1ldGEgPT4ge1xuICAgICAgc2VydmVyTWV0YWRhdGEgPSBtZXRhWydzZXJ2ZXInXTtcbiAgICB9O1xuICAgIHNlc3Npb24gPSBkcml2ZXIuc2Vzc2lvbigpO1xuICAgIG9yaWdpbmFsVGltZW91dCA9IGphc21pbmUuREVGQVVMVF9USU1FT1VUX0lOVEVSVkFMO1xuICAgIGphc21pbmUuREVGQVVMVF9USU1FT1VUX0lOVEVSVkFMID0gMTAwMDA7XG5cbiAgICBzZXNzaW9uLnJ1bignTUFUQ0ggKG4pIERFVEFDSCBERUxFVEUgbicpLnRoZW4oZG9uZSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgamFzbWluZS5ERUZBVUxUX1RJTUVPVVRfSU5URVJWQUwgPSBvcmlnaW5hbFRpbWVvdXQ7XG4gICAgZHJpdmVyLmNsb3NlKCk7XG4gIH0pO1xuXG4gIGl0KCdjbG9zZSBzaG91bGQgaW52b2tlIGNhbGxiYWNrICcsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuZXcgRmFrZUNvbm5lY3Rpb24oKTtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3U2Vzc2lvbldpdGhDb25uZWN0aW9uKGNvbm5lY3Rpb24pO1xuXG4gICAgc2Vzc2lvbi5jbG9zZShkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ2Nsb3NlIHNob3VsZCBpbnZva2UgY2FsbGJhY2sgZXZlbiB3aGVuIGFscmVhZHkgY2xvc2VkICcsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuZXcgRmFrZUNvbm5lY3Rpb24oKTtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3U2Vzc2lvbldpdGhDb25uZWN0aW9uKGNvbm5lY3Rpb24pO1xuXG4gICAgc2Vzc2lvbi5jbG9zZSgoKSA9PiB7XG4gICAgICBzZXNzaW9uLmNsb3NlKCgpID0+IHtcbiAgICAgICAgc2Vzc2lvbi5jbG9zZSgoKSA9PiB7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnY2xvc2Ugc2hvdWxkIGJlIGlkZW1wb3RlbnQgJywgZG9uZSA9PiB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IG5ldyBGYWtlQ29ubmVjdGlvbigpO1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXdTZXNzaW9uV2l0aENvbm5lY3Rpb24oY29ubmVjdGlvbik7XG5cbiAgICBzZXNzaW9uLmNsb3NlKCgpID0+IHtcbiAgICAgIGV4cGVjdChjb25uZWN0aW9uLmlzUmVsZWFzZWRPbmNlT25TZXNzaW9uQ2xvc2UoKSkudG9CZVRydXRoeSgpO1xuXG4gICAgICBzZXNzaW9uLmNsb3NlKCgpID0+IHtcbiAgICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uaXNSZWxlYXNlZE9uY2VPblNlc3Npb25DbG9zZSgpKS50b0JlVHJ1dGh5KCk7XG5cbiAgICAgICAgc2Vzc2lvbi5jbG9zZSgoKSA9PiB7XG4gICAgICAgICAgZXhwZWN0KGNvbm5lY3Rpb24uaXNSZWxlYXNlZE9uY2VPblNlc3Npb25DbG9zZSgpKS50b0JlVHJ1dGh5KCk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNsb3NlIHRyYW5zYWN0aW9uIGV4ZWN1dG9yJywgZG9uZSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ld1Nlc3Npb25XaXRoQ29ubmVjdGlvbihuZXcgRmFrZUNvbm5lY3Rpb24oKSk7XG5cbiAgICBsZXQgY2xvc2VDYWxsZWRUaW1lcyA9IDA7XG4gICAgY29uc3QgdHJhbnNhY3Rpb25FeGVjdXRvciA9IHNlc3Npb24uX3RyYW5zYWN0aW9uRXhlY3V0b3I7XG4gICAgY29uc3Qgb3JpZ2luYWxDbG9zZSA9IHRyYW5zYWN0aW9uRXhlY3V0b3IuY2xvc2U7XG4gICAgdHJhbnNhY3Rpb25FeGVjdXRvci5jbG9zZSA9ICgpID0+IHtcbiAgICAgIGNsb3NlQ2FsbGVkVGltZXMrKztcbiAgICAgIG9yaWdpbmFsQ2xvc2UuY2FsbCh0cmFuc2FjdGlvbkV4ZWN1dG9yKTtcbiAgICB9O1xuXG4gICAgc2Vzc2lvbi5jbG9zZSgoKSA9PiB7XG4gICAgICBleHBlY3QoY2xvc2VDYWxsZWRUaW1lcykudG9FcXVhbCgxKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBiZSBwb3NzaWJsZSB0byBjbG9zZSBkcml2ZXIgYWZ0ZXIgY2xvc2luZyBzZXNzaW9uIHdpdGggZmFpbGVkIHR4ICcsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGRyaXZlciA9IG5lbzRqLmRyaXZlcignYm9sdDovL2xvY2FsaG9zdCcsIHNoYXJlZE5lbzRqLmF1dGhUb2tlbik7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGRyaXZlci5zZXNzaW9uKCk7XG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eC5ydW4oJ0lOVkFMSUQgUVVFUlknKS5jYXRjaCgoKSA9PiB7XG4gICAgICB0eC5yb2xsYmFjaygpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgc2Vzc2lvbi5jbG9zZSgoKSA9PiB7XG4gICAgICAgICAgZHJpdmVyLmNsb3NlKCk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGV4cG9zZSBiYXNpYyBydW4vc3Vic2NyaWJlICcsIGRvbmUgPT4ge1xuICAgIC8vIEdpdmVuXG5cbiAgICAvLyBXaGVuICYgVGhlblxuICAgIGNvbnN0IHJlY29yZHMgPSBbXTtcbiAgICBzZXNzaW9uLnJ1bihcIlJFVFVSTiAxLjAgQVMgYVwiKS5zdWJzY3JpYmUoe1xuICAgICAgb25OZXh0OiByZWNvcmQgPT4ge1xuICAgICAgICByZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgICAgIH0sXG4gICAgICBvbkNvbXBsZXRlZDogKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVjb3Jkcy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgICAgIGV4cGVjdChyZWNvcmRzWzBdLmdldCgnYScpKS50b0JlKDEpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQga2VlcCBjb250ZXh0IGluIHN1YnNjcmliZSBtZXRob2RzICcsIGRvbmUgPT4ge1xuICAgIC8vIEdpdmVuXG4gICAgZnVuY3Rpb24gTXlPYnNlcnZlcigpIHtcbiAgICAgIHRoaXMubG9jYWwgPSAnaGVsbG8nO1xuICAgICAgY29uc3QgcHJpdmF0ZUxvY2FsID0gJ2hlbGxvJztcbiAgICAgIHRoaXMub25OZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QocHJpdmF0ZUxvY2FsKS50b0JlKCdoZWxsbycpO1xuICAgICAgICBleHBlY3QodGhpcy5sb2NhbCkudG9CZSgnaGVsbG8nKTtcbiAgICAgIH07XG4gICAgICB0aGlzLm9uQ29tcGxldGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QocHJpdmF0ZUxvY2FsKS50b0JlKCdoZWxsbycpO1xuICAgICAgICBleHBlY3QodGhpcy5sb2NhbCkudG9CZSgnaGVsbG8nKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBXaGVuICYgVGhlblxuICAgIHNlc3Npb24ucnVuKCdSRVRVUk4gMS4wIEFTIGEnKS5zdWJzY3JpYmUobmV3IE15T2JzZXJ2ZXIoKSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY2FsbCBvYnNlcnZlcnMgb25FcnJvciBvbiBlcnJvciAnLCBkb25lID0+IHtcblxuICAgIC8vIFdoZW4gJiBUaGVuXG4gICAgc2Vzc2lvbi5ydW4oJ1JFVFVSTiAxIEFTJykuc3Vic2NyaWJlKHtcbiAgICAgIG9uRXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvRXF1YWwoJ05lby5DbGllbnRFcnJvci5TdGF0ZW1lbnQuU3ludGF4RXJyb3InKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFjY2VwdCBhIHN0YXRlbWVudCBvYmplY3QgJywgZG9uZSA9PiB7XG4gICAgLy8gR2l2ZW5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB7dGV4dDogJ1JFVFVSTiAxID0ge3BhcmFtfSBBUyBhJywgcGFyYW1ldGVyczoge3BhcmFtOiAxfX07XG5cbiAgICAvLyBXaGVuICYgVGhlblxuICAgIGNvbnN0IHJlY29yZHMgPSBbXTtcbiAgICBzZXNzaW9uLnJ1bihzdGF0ZW1lbnQpLnN1YnNjcmliZSh7XG4gICAgICBvbk5leHQ6IHJlY29yZCA9PiB7XG4gICAgICAgIHJlY29yZHMucHVzaChyZWNvcmQpO1xuICAgICAgfSxcbiAgICAgIG9uQ29tcGxldGVkOiAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZWNvcmRzLmxlbmd0aCkudG9CZSgxKTtcbiAgICAgICAgZXhwZWN0KHJlY29yZHNbMF0uZ2V0KCdhJykpLnRvQmUodHJ1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBleHBvc2UgcnVuL3RoZW4vdGhlbi90aGVuICcsIGRvbmUgPT4ge1xuICAgIC8vIFdoZW4gJiBUaGVuXG4gICAgc2Vzc2lvbi5ydW4oXCJSRVRVUk4gMS4wIEFTIGFcIilcbiAgICAgIC50aGVuKFxuICAgICAgICByZXN1bHQgPT4ge1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkcy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzWzBdLmdldCgnYScpKS50b0JlKDEpO1xuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfVxuICAgICAgKS50aGVuKFxuICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzLmxlbmd0aCkudG9CZSgxKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzWzBdLmdldCgnYScpKS50b0JlKDEpO1xuICAgICAgfVxuICAgICkudGhlbihkb25lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBleHBvc2UgYmFzaWMgcnVuL2NhdGNoICcsIGRvbmUgPT4ge1xuICAgIC8vIFdoZW4gJiBUaGVuXG4gICAgc2Vzc2lvbi5ydW4oJ1JFVFVSTiAxIEFTJykuY2F0Y2goXG4gICAgICBlcnJvciA9PiB7XG4gICAgICAgIGV4cGVjdChlcnJvci5jb2RlKS50b0VxdWFsKCdOZW8uQ2xpZW50RXJyb3IuU3RhdGVtZW50LlN5bnRheEVycm9yJyk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH1cbiAgICApXG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXhwb3NlIHN1bW1hcml6ZSBtZXRob2QgZm9yIGJhc2ljIG1ldGFkYXRhICcsIGRvbmUgPT4ge1xuICAgIC8vIEdpdmVuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gJ0NSRUFURSAobjpMYWJlbCB7cHJvcDp7cHJvcH19KSBSRVRVUk4gbic7XG4gICAgY29uc3QgcGFyYW1zID0ge3Byb3A6ICdzdHJpbmcnfTtcbiAgICAvLyBXaGVuICYgVGhlblxuICAgIHNlc3Npb24ucnVuKHN0YXRlbWVudCwgcGFyYW1zKVxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3Qgc3VtID0gcmVzdWx0LnN1bW1hcnk7XG4gICAgICAgIGV4cGVjdChzdW0uc3RhdGVtZW50LnRleHQpLnRvQmUoc3RhdGVtZW50KTtcbiAgICAgICAgZXhwZWN0KHN1bS5zdGF0ZW1lbnQucGFyYW1ldGVycykudG9CZShwYXJhbXMpO1xuICAgICAgICBleHBlY3Qoc3VtLmNvdW50ZXJzLmNvbnRhaW5zVXBkYXRlcygpKS50b0JlKHRydWUpO1xuICAgICAgICBleHBlY3Qoc3VtLmNvdW50ZXJzLm5vZGVzQ3JlYXRlZCgpKS50b0JlKDEpO1xuICAgICAgICBleHBlY3Qoc3VtLnN0YXRlbWVudFR5cGUpLnRvQmUoc3RhdGVtZW50VHlwZS5SRUFEX1dSSVRFKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXhwb3NlIHNlcnZlciBpbmZvIG9uIHN1Y2Nlc3NmdWwgcXVlcnknLCBkb25lID0+IHtcbiAgICBpZiAoIXNlcnZlcklzMzFPckxhdGVyKGRvbmUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2l2ZW5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSAnUkVUVVJOIDEnO1xuXG4gICAgLy8gV2hlbiAmIFRoZW5cbiAgICBzZXNzaW9uLnJ1bihzdGF0ZW1lbnQpXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICBjb25zdCBzdW0gPSByZXN1bHQuc3VtbWFyeTtcbiAgICAgICAgZXhwZWN0KHN1bS5zZXJ2ZXIpLnRvQmVEZWZpbmVkKCk7XG4gICAgICAgIGV4cGVjdChzdW0uc2VydmVyLmFkZHJlc3MpLnRvRXF1YWwoJ2xvY2FsaG9zdDo3Njg3Jyk7XG4gICAgICAgIGV4cGVjdChzdW0uc2VydmVyLnZlcnNpb24pLnRvQmVEZWZpbmVkKCk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGV4cG9zZSBleGVjdXRpb24gdGltZSBpbmZvcm1hdGlvbiB3aGVuIHVzaW5nIDMuMSBhbmQgb253YXJkcycsIGRvbmUgPT4ge1xuICAgIGlmICghc2VydmVySXMzMU9yTGF0ZXIoZG9uZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHaXZlblxuICAgIGNvbnN0IHN0YXRlbWVudCA9ICdVTldJTkQgcmFuZ2UoMSwxMDAwMCkgQVMgbiBSRVRVUk4gbiBBUyBudW1iZXInO1xuICAgIC8vIFdoZW4gJiBUaGVuXG5cbiAgICBzZXNzaW9uLnJ1bihzdGF0ZW1lbnQpXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICBjb25zdCBzdW0gPSByZXN1bHQuc3VtbWFyeTtcbiAgICAgICAgZXhwZWN0KHN1bS5yZXN1bHRBdmFpbGFibGVBZnRlci50b0ludCgpKS5ub3QudG9CZUxlc3NUaGFuKDApO1xuICAgICAgICBleHBlY3Qoc3VtLnJlc3VsdENvbnN1bWVkQWZ0ZXIudG9JbnQoKSkubm90LnRvQmVMZXNzVGhhbigwKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXhwb3NlIGVtcHR5IHBhcmFtZXRlciBtYXAgb24gY2FsbCB3aXRoIG5vIHBhcmFtZXRlcnMnLCBkb25lID0+IHtcbiAgICAvLyBHaXZlblxuICAgIGNvbnN0IHN0YXRlbWVudCA9ICdDUkVBVEUgKG46TGFiZWwge3Byb3A6XFwnc3RyaW5nXFwnfSkgUkVUVVJOIG4nO1xuICAgIC8vIFdoZW4gJiBUaGVuXG4gICAgc2Vzc2lvbi5ydW4oc3RhdGVtZW50KVxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3Qgc3VtID0gcmVzdWx0LnN1bW1hcnk7XG4gICAgICAgIGV4cGVjdChzdW0uc3RhdGVtZW50LnBhcmFtZXRlcnMpLnRvRXF1YWwoe30pO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBleHBvc2UgcGxhbiAnLCBkb25lID0+IHtcbiAgICAvLyBHaXZlblxuICAgIGNvbnN0IHN0YXRlbWVudCA9ICdFWFBMQUlOIENSRUFURSAobjpMYWJlbCB7cHJvcDp7cHJvcH19KSBSRVRVUk4gbic7XG4gICAgY29uc3QgcGFyYW1zID0ge3Byb3A6ICdzdHJpbmcnfTtcbiAgICAvLyBXaGVuICYgVGhlblxuICAgIHNlc3Npb25cbiAgICAgIC5ydW4oc3RhdGVtZW50LCBwYXJhbXMpXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICBjb25zdCBzdW0gPSByZXN1bHQuc3VtbWFyeTtcbiAgICAgICAgZXhwZWN0KHN1bS5oYXNQbGFuKCkpLnRvQmUodHJ1ZSk7XG4gICAgICAgIGV4cGVjdChzdW0uaGFzUHJvZmlsZSgpKS50b0JlKGZhbHNlKTtcbiAgICAgICAgZXhwZWN0KHN1bS5wbGFuLm9wZXJhdG9yVHlwZSkudG9CZSgnUHJvZHVjZVJlc3VsdHMnKTtcbiAgICAgICAgZXhwZWN0KHN1bS5wbGFuLmFyZ3VtZW50cy5ydW50aW1lKS50b0JlKCdJTlRFUlBSRVRFRCcpO1xuICAgICAgICBleHBlY3Qoc3VtLnBsYW4uaWRlbnRpZmllcnNbMF0pLnRvQmUoJ24nKTtcbiAgICAgICAgZXhwZWN0KHN1bS5wbGFuLmNoaWxkcmVuWzBdLm9wZXJhdG9yVHlwZSkudG9CZSgnQ3JlYXRlTm9kZScpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBleHBvc2UgcHJvZmlsZSAnLCBkb25lID0+IHtcbiAgICAvLyBHaXZlblxuICAgIGNvbnN0IHN0YXRlbWVudCA9ICdQUk9GSUxFIE1BVENIIChuOkxhYmVsIHtwcm9wOntwcm9wfX0pIFJFVFVSTiBuJztcbiAgICBjb25zdCBwYXJhbXMgPSB7cHJvcDogJ3N0cmluZyd9O1xuICAgIC8vIFdoZW4gJiBUaGVuXG4gICAgc2Vzc2lvblxuICAgICAgLnJ1bihzdGF0ZW1lbnQsIHBhcmFtcylcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIGNvbnN0IHN1bSA9IHJlc3VsdC5zdW1tYXJ5O1xuICAgICAgICBleHBlY3Qoc3VtLmhhc1BsYW4oKSkudG9CZSh0cnVlKTsgLy9XaGVuIHRoZXJlJ3MgYSBwcm9maWxlLCB0aGVyZSdzIGEgcGxhblxuICAgICAgICBleHBlY3Qoc3VtLmhhc1Byb2ZpbGUoKSkudG9CZSh0cnVlKTtcbiAgICAgICAgZXhwZWN0KHN1bS5wcm9maWxlLm9wZXJhdG9yVHlwZSkudG9CZSgnUHJvZHVjZVJlc3VsdHMnKTtcbiAgICAgICAgZXhwZWN0KFsnSU5URVJQUkVURUQnLCAnQ09NUElMRUQnXSkudG9Db250YWluKHN1bS5wcm9maWxlLmFyZ3VtZW50cy5ydW50aW1lKTtcbiAgICAgICAgZXhwZWN0KHN1bS5wcm9maWxlLmlkZW50aWZpZXJzWzBdKS50b0JlKCduJyk7XG4gICAgICAgIGV4cGVjdChzdW0ucHJvZmlsZS5jaGlsZHJlblswXS5vcGVyYXRvclR5cGUpLnRvQmUoJ0ZpbHRlcicpO1xuICAgICAgICBleHBlY3Qoc3VtLnByb2ZpbGUucm93cykudG9CZSgwKTtcbiAgICAgICAgLy9leHBlY3Qoc3VtLnByb2ZpbGUuZGJIaXRzKS50b0JlR3JlYXRlclRoYW4oMCk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGV4cG9zZSBjeXBoZXIgbm90aWZpY2F0aW9ucyAnLCBkb25lID0+IHtcbiAgICAvLyBHaXZlblxuICAgIGNvbnN0IHN0YXRlbWVudCA9ICdFWFBMQUlOIE1BVENIIChuKSwgKG0pIFJFVFVSTiBuLCBtJztcbiAgICAvLyBXaGVuICYgVGhlblxuICAgIHNlc3Npb25cbiAgICAgIC5ydW4oc3RhdGVtZW50KVxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3Qgc3VtID0gcmVzdWx0LnN1bW1hcnk7XG4gICAgICAgIGV4cGVjdChzdW0ubm90aWZpY2F0aW9ucy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICAgICAgZXhwZWN0KHN1bS5ub3RpZmljYXRpb25zWzBdLmNvZGUpLnRvQmUoXCJOZW8uQ2xpZW50Tm90aWZpY2F0aW9uLlN0YXRlbWVudC5DYXJ0ZXNpYW5Qcm9kdWN0V2FybmluZ1wiKTtcbiAgICAgICAgZXhwZWN0KHN1bS5ub3RpZmljYXRpb25zWzBdLnRpdGxlKS50b0JlKFwiVGhpcyBxdWVyeSBidWlsZHMgYSBjYXJ0ZXNpYW4gcHJvZHVjdCBiZXR3ZWVuIGRpc2Nvbm5lY3RlZCBwYXR0ZXJucy5cIik7XG4gICAgICAgIGV4cGVjdChzdW0ubm90aWZpY2F0aW9uc1swXS5wb3NpdGlvbi5jb2x1bW4pLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCB3aGVuIHVzaW5nIHRoZSBzZXNzaW9uIHdoZW4gaGF2aW5nIGFuIG9wZW4gdHJhbnNhY3Rpb24nLCBkb25lID0+IHtcblxuICAgIC8vIFdoZW5cbiAgICBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcblxuICAgIC8vVGhlblxuICAgIHNlc3Npb24ucnVuKFwiUkVUVVJOIDQyXCIpXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBleHBlY3QoZXJyb3IubWVzc2FnZSkudG9CZShcIlN0YXRlbWVudHMgY2Fubm90IGJlIHJ1biBkaXJlY3RseSBvbiBhIFwiXG4gICAgICAgICAgKyBcInNlc3Npb24gd2l0aCBhbiBvcGVuIHRyYW5zYWN0aW9uOyBlaXRoZXIgcnVuIGZyb20gd2l0aGluIHRoZSBcIlxuICAgICAgICAgICsgXCJ0cmFuc2FjdGlvbiBvciB1c2UgYSBkaWZmZXJlbnQgc2Vzc2lvbi5cIik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pXG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCB3aGVuIG9wZW5pbmcgbXVsdGlwbGUgdHJhbnNhY3Rpb25zJywgKCkgPT4ge1xuXG4gICAgLy8gV2hlblxuICAgIHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuXG4gICAgLy8gVGhlblxuICAgIGV4cGVjdChzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24pLnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gbG90cyBvZiBkYXRhJywgZG9uZSA9PiB7XG4gICAgc2Vzc2lvbi5ydW4oXCJVTldJTkQgcmFuZ2UoMSwxMDAwMCkgQVMgeCBDUkVBVEUgKDpBVFRSQUNUSU9OIHtwcm9wOiAncHJvcCd9KVwiKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBzZXNzaW9uLnJ1bihcIk1BVENIIChuKSBSRVRVUk4gblwiKVxuICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG9uTmV4dDogcmVjb3JkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gcmVjb3JkLmdldCgnbicpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChub2RlLmxhYmVsc1swXSkudG9FcXVhbChcIkFUVFJBQ1RJT05cIik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5vZGUucHJvcGVydGllcy5wcm9wKS50b0VxdWFsKFwicHJvcFwiKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb25Db21wbGV0ZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG5cbiAgICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJlIGFibGUgdG8gY2xvc2UgYSBsb25nIHJ1bm5pbmcgcXVlcnkgJywgZG9uZSA9PiB7XG4gICAgLy9naXZlbiBhIGxvbmcgcnVubmluZyBxdWVyeVxuICAgIHNlc3Npb24ucnVuKCd1bndpbmQgcmFuZ2UoMSwxMDAwMDAwKSBhcyB4IGNyZWF0ZSAobiB7cHJvcDp4fSkgZGVsZXRlIG4nKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAvLyBsb25nIHJ1bm5pbmcgcXVlcnkgc2hvdWxkIGZhaWxcbiAgICAgIGV4cGVjdChlcnJvcikudG9CZURlZmluZWQoKTtcblxuICAgICAgLy8gYW5kIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBzdGFydCBhbm90aGVyIHNlc3Npb24gYW5kIHJ1biBhIHF1ZXJ5XG4gICAgICBjb25zdCBhbm90aGVyU2Vzc2lvbiA9IGRyaXZlci5zZXNzaW9uKCk7XG4gICAgICBhbm90aGVyU2Vzc2lvbi5ydW4oJ1JFVFVSTiAxLjAgYXMgYScpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzLmxlbmd0aCkudG9CZSgxKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzWzBdLmdldCgnYScpKS50b0JlKDEpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdRdWVyeSBmYWlsZWQgYWZ0ZXIgYSBsb25nIHJ1bm5pbmcgcXVlcnkgd2FzIHRlcm1pbmF0ZWQnLCBlcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIHdhaXQgc29tZSB0aW1lIHRoYW4gY2xvc2UgdGhlIHNlc3Npb24gd2l0aCBhIGxvbmcgcnVubmluZyBxdWVyeVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2Vzc2lvbi5jbG9zZSgpO1xuICAgIH0sIDEwMDApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgbmljZWx5IG9uIHVucGFja2FibGUgdmFsdWVzICcsIGRvbmUgPT4ge1xuICAgIC8vIEdpdmVuXG4gICAgY29uc3QgdW5wYWNrYWJsZSA9ICgpID0+IHtcbiAgICAgIHRocm93IEVycm9yKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9ICdSRVRVUk4ge3BhcmFtfSc7XG4gICAgY29uc3QgcGFyYW1zID0ge3BhcmFtOiB1bnBhY2thYmxlfTtcbiAgICAvLyBXaGVuICYgVGhlblxuICAgIHNlc3Npb25cbiAgICAgIC5ydW4oc3RhdGVtZW50LCBwYXJhbXMpXG4gICAgICAuY2F0Y2goaWdub3JlID0+IHtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSlcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIG5pY2VseSBmb3IgaWxsZWdhbCBzdGF0ZW1lbnQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHNlc3Npb24ucnVuKCkpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuICAgIGV4cGVjdCgoKSA9PiBzZXNzaW9uLnJ1bihudWxsKSkudG9UaHJvd0Vycm9yKFR5cGVFcnJvcik7XG4gICAgZXhwZWN0KCgpID0+IHNlc3Npb24ucnVuKHt9KSkudG9UaHJvd0Vycm9yKFR5cGVFcnJvcik7XG4gICAgZXhwZWN0KCgpID0+IHNlc3Npb24ucnVuKDQyKSkudG9UaHJvd0Vycm9yKFR5cGVFcnJvcik7XG4gICAgZXhwZWN0KCgpID0+IHNlc3Npb24ucnVuKFtdKSkudG9UaHJvd0Vycm9yKFR5cGVFcnJvcik7XG4gICAgZXhwZWN0KCgpID0+IHNlc3Npb24ucnVuKFsnQ1JFQVRFICgpJ10pKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcblxuICAgIGV4cGVjdCgoKSA9PiBzZXNzaW9uLnJ1bih7c3RhdGVtZW50OiAnQ1JFQVRFICgpJ30pKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgICBleHBlY3QoKCkgPT4gc2Vzc2lvbi5ydW4oe2N5cGhlcjogJ0NSRUFURSAoKSd9KSkudG9UaHJvd0Vycm9yKFR5cGVFcnJvcik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCBuaWNlbHkgZm9yIGlsbGVnYWwgYm9va21hcmsnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbih7fSkpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuICAgIGV4cGVjdCgoKSA9PiBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oNDIpKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgICBleHBlY3QoKCkgPT4gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKFtdKSkudG9UaHJvd0Vycm9yKFR5cGVFcnJvcik7XG4gICAgZXhwZWN0KCgpID0+IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbihbJ2Jvb2ttYXJrJ10pKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhbGxvdyBjcmVhdGlvbiBvZiBhICcgKyBuZW80ai5zZXNzaW9uLlJFQUQgKyAnIHNlc3Npb24nLCBkb25lID0+IHtcbiAgICBjb25zdCByZWFkU2Vzc2lvbiA9IGRyaXZlci5zZXNzaW9uKG5lbzRqLnNlc3Npb24uUkVBRCk7XG4gICAgcmVhZFNlc3Npb24ucnVuKCdSRVRVUk4gMScpLnRoZW4oKCkgPT4ge1xuICAgICAgcmVhZFNlc3Npb24uY2xvc2UoKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhbGxvdyBjcmVhdGlvbiBvZiBhICcgKyBuZW80ai5zZXNzaW9uLldSSVRFICsgJyBzZXNzaW9uJywgZG9uZSA9PiB7XG4gICAgY29uc3Qgd3JpdGVTZXNzaW9uID0gZHJpdmVyLnNlc3Npb24obmVvNGouc2Vzc2lvbi5XUklURSk7XG4gICAgd3JpdGVTZXNzaW9uLnJ1bignQ1JFQVRFICgpJykudGhlbigoKSA9PiB7XG4gICAgICB3cml0ZVNlc3Npb24uY2xvc2UoKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIGZvciBpbGxlZ2FsIHNlc3Npb24gbW9kZScsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gZHJpdmVyLnNlc3Npb24oJ0lMTEVHQUxfTU9ERScpKS50b1Rocm93KCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVsZWFzZSBjb25uZWN0aW9uIHRvIHRoZSBwb29sIGFmdGVyIHJ1bicsIGRvbmUgPT4ge1xuICAgIHdpdGhRdWVyeUluVG1wU2Vzc2lvbihkcml2ZXIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlkbGVDb25uZWN0aW9uc0JlZm9yZSA9IGlkbGVDb25uZWN0aW9uQ291bnQoZHJpdmVyKTtcblxuICAgICAgc2Vzc2lvbi5ydW4oJ1JFVFVSTiAxJykudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkbGVDb25uZWN0aW9uc0FmdGVyID0gaWRsZUNvbm5lY3Rpb25Db3VudChkcml2ZXIpO1xuICAgICAgICBleHBlY3QoaWRsZUNvbm5lY3Rpb25zQmVmb3JlKS50b0VxdWFsKGlkbGVDb25uZWN0aW9uc0FmdGVyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVsZWFzZSBjb25uZWN0aW9uIHRvIHRoZSBwb29sIGFmdGVyIHJ1biBmYWlsdXJlJywgZG9uZSA9PiB7XG4gICAgd2l0aFF1ZXJ5SW5UbXBTZXNzaW9uKGRyaXZlciwgKCkgPT4ge1xuICAgICAgY29uc3QgaWRsZUNvbm5lY3Rpb25zQmVmb3JlID0gaWRsZUNvbm5lY3Rpb25Db3VudChkcml2ZXIpO1xuXG4gICAgICBzZXNzaW9uLnJ1bignUkVUVVJOIDEwIC8gMCcpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgY29uc3QgaWRsZUNvbm5lY3Rpb25zQWZ0ZXIgPSBpZGxlQ29ubmVjdGlvbkNvdW50KGRyaXZlcik7XG4gICAgICAgIGV4cGVjdChpZGxlQ29ubmVjdGlvbnNCZWZvcmUpLnRvRXF1YWwoaWRsZUNvbm5lY3Rpb25zQWZ0ZXIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWxlYXNlIGNvbm5lY3Rpb24gdG8gdGhlIHBvb2wgd2hlbiByZXN1bHQgaXMgY29uc3VtZWQnLCBkb25lID0+IHtcbiAgICB3aXRoUXVlcnlJblRtcFNlc3Npb24oZHJpdmVyLCAoKSA9PiB7XG4gICAgICBjb25zdCBpZGxlQ29ubmVjdGlvbnNCZWZvcmUgPSBpZGxlQ29ubmVjdGlvbkNvdW50KGRyaXZlcik7XG5cbiAgICAgIHNlc3Npb24ucnVuKCdVTldJTkQgcmFuZ2UoMCwgMTApIEFTIHggUkVUVVJOIHggKyAxJykuc3Vic2NyaWJlKHtcbiAgICAgICAgb25OZXh0OiAoKSA9PiB7XG4gICAgICAgICAgLy8gb25lIGxlc3MgaWRsZSBjb25uZWN0aW9uLCBvbmUgY29ubmVjdGlvbiBpcyB1c2VkIGZvciB0aGUgY3VycmVudCBxdWVyeVxuICAgICAgICAgIGV4cGVjdChpZGxlQ29ubmVjdGlvbkNvdW50KGRyaXZlcikpLnRvQmUoaWRsZUNvbm5lY3Rpb25zQmVmb3JlIC0gMSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ29tcGxldGVkOiAoKSA9PiB7XG4gICAgICAgICAgZXhwZWN0KGlkbGVDb25uZWN0aW9uQ291bnQoZHJpdmVyKSkudG9CZShpZGxlQ29ubmVjdGlvbnNCZWZvcmUpO1xuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVsZWFzZSBjb25uZWN0aW9uIHRvIHRoZSBwb29sIHdoZW4gcmVzdWx0IGZhaWxzJywgZG9uZSA9PiB7XG4gICAgd2l0aFF1ZXJ5SW5UbXBTZXNzaW9uKGRyaXZlciwgKCkgPT4ge1xuICAgICAgY29uc3QgaWRsZUNvbm5lY3Rpb25zQmVmb3JlID0gaWRsZUNvbm5lY3Rpb25Db3VudChkcml2ZXIpO1xuXG4gICAgICBzZXNzaW9uLnJ1bignVU5XSU5EIHJhbmdlKDEwLCAwLCAtMSkgQVMgeCBSRVRVUk4gMTAgLyB4Jykuc3Vic2NyaWJlKHtcbiAgICAgICAgb25OZXh0OiAoKSA9PiB7XG4gICAgICAgICAgLy8gb25lIGxlc3MgaWRsZSBjb25uZWN0aW9uLCBvbmUgY29ubmVjdGlvbiBpcyB1c2VkIGZvciB0aGUgY3VycmVudCBxdWVyeVxuICAgICAgICAgIGV4cGVjdChpZGxlQ29ubmVjdGlvbkNvdW50KGRyaXZlcikpLnRvQmUoaWRsZUNvbm5lY3Rpb25zQmVmb3JlIC0gMSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IGlnbm9yZWRFcnJvciA9PiB7XG4gICAgICAgICAgZXhwZWN0KGlkbGVDb25uZWN0aW9uQ291bnQoZHJpdmVyKSkudG9CZShpZGxlQ29ubmVjdGlvbnNCZWZvcmUpO1xuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Db21wbGV0ZWQ6ICgpID0+IHtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVsZWFzZSBjb25uZWN0aW9uIHRvIHRoZSBwb29sIHdoZW4gdHJhbnNhY3Rpb24gY29tbWl0cycsIGRvbmUgPT4ge1xuICAgIHdpdGhRdWVyeUluVG1wU2Vzc2lvbihkcml2ZXIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlkbGVDb25uZWN0aW9uc0JlZm9yZSA9IGlkbGVDb25uZWN0aW9uQ291bnQoZHJpdmVyKTtcblxuICAgICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICAgIHR4LnJ1bignVU5XSU5EIHJhbmdlKDAsIDEwKSBBUyB4IFJFVFVSTiB4ICsgMScpLnN1YnNjcmliZSh7XG4gICAgICAgIG9uTmV4dDogKCkgPT4ge1xuICAgICAgICAgIC8vIG9uZSBsZXNzIGlkbGUgY29ubmVjdGlvbiwgb25lIGNvbm5lY3Rpb24gaXMgdXNlZCBmb3IgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb25cbiAgICAgICAgICBleHBlY3QoaWRsZUNvbm5lY3Rpb25Db3VudChkcml2ZXIpKS50b0JlKGlkbGVDb25uZWN0aW9uc0JlZm9yZSAtIDEpO1xuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICBvbkNvbXBsZXRlZDogKCkgPT4ge1xuICAgICAgICAgIC8vIG9uZSBsZXNzIGlkbGUgY29ubmVjdGlvbiwgb25lIGNvbm5lY3Rpb24gaXMgdXNlZCBmb3IgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb25cbiAgICAgICAgICBleHBlY3QoaWRsZUNvbm5lY3Rpb25Db3VudChkcml2ZXIpKS50b0JlKGlkbGVDb25uZWN0aW9uc0JlZm9yZSAtIDEpO1xuICAgICAgICAgIHR4LmNvbW1pdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZXhwZWN0KGlkbGVDb25uZWN0aW9uQ291bnQoZHJpdmVyKSkudG9CZShpZGxlQ29ubmVjdGlvbnNCZWZvcmUpO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWxlYXNlIGNvbm5lY3Rpb24gdG8gdGhlIHBvb2wgd2hlbiB0cmFuc2FjdGlvbiByb2xscyBiYWNrJywgZG9uZSA9PiB7XG4gICAgd2l0aFF1ZXJ5SW5UbXBTZXNzaW9uKGRyaXZlciwgKCkgPT4ge1xuICAgICAgY29uc3QgaWRsZUNvbm5lY3Rpb25zQmVmb3JlID0gaWRsZUNvbm5lY3Rpb25Db3VudChkcml2ZXIpO1xuXG4gICAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgICAgdHgucnVuKCdVTldJTkQgcmFuZ2UoMCwgMTApIEFTIHggUkVUVVJOIHggKyAxJykuc3Vic2NyaWJlKHtcbiAgICAgICAgb25OZXh0OiAoKSA9PiB7XG4gICAgICAgICAgLy8gb25lIGxlc3MgaWRsZSBjb25uZWN0aW9uLCBvbmUgY29ubmVjdGlvbiBpcyB1c2VkIGZvciB0aGUgY3VycmVudCB0cmFuc2FjdGlvblxuICAgICAgICAgIGV4cGVjdChpZGxlQ29ubmVjdGlvbkNvdW50KGRyaXZlcikpLnRvQmUoaWRsZUNvbm5lY3Rpb25zQmVmb3JlIC0gMSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ29tcGxldGVkOiAoKSA9PiB7XG4gICAgICAgICAgLy8gb25lIGxlc3MgaWRsZSBjb25uZWN0aW9uLCBvbmUgY29ubmVjdGlvbiBpcyB1c2VkIGZvciB0aGUgY3VycmVudCB0cmFuc2FjdGlvblxuICAgICAgICAgIGV4cGVjdChpZGxlQ29ubmVjdGlvbkNvdW50KGRyaXZlcikpLnRvQmUoaWRsZUNvbm5lY3Rpb25zQmVmb3JlIC0gMSk7XG4gICAgICAgICAgdHgucm9sbGJhY2soKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChpZGxlQ29ubmVjdGlvbkNvdW50KGRyaXZlcikpLnRvQmUoaWRsZUNvbm5lY3Rpb25zQmVmb3JlKTtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdXBkYXRlIGxhc3QgYm9va21hcmsgYWZ0ZXIgZXZlcnkgcmVhZCB0eCBjb21taXQnLCBkb25lID0+IHtcbiAgICBpZiAoIXNlcnZlcklzMzFPckxhdGVyKGRvbmUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYm9va21hcmtCZWZvcmUgPSBzZXNzaW9uLmxhc3RCb29rbWFyaygpO1xuXG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eC5ydW4oJ1JFVFVSTiA0MiBhcyBhbnN3ZXInKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBjb25zdCByZWNvcmRzID0gcmVzdWx0LnJlY29yZHM7XG4gICAgICBleHBlY3QocmVjb3Jkcy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgICBleHBlY3QocmVjb3Jkc1swXS5nZXQoJ2Fuc3dlcicpLnRvTnVtYmVyKCkpLnRvRXF1YWwoNDIpO1xuXG4gICAgICB0eC5jb21taXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgY29uc3QgYm9va21hcmtBZnRlciA9IHNlc3Npb24ubGFzdEJvb2ttYXJrKCk7XG4gICAgICAgIGV4cGVjdChib29rbWFya0FmdGVyKS50b0JlRGVmaW5lZCgpO1xuICAgICAgICBleHBlY3QoYm9va21hcmtBZnRlcikubm90LnRvQmVOdWxsKCk7XG4gICAgICAgIGV4cGVjdChib29rbWFya0FmdGVyKS5ub3QudG9FcXVhbChib29rbWFya0JlZm9yZSk7XG5cbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdXBkYXRlIGxhc3QgYm9va21hcmsgYWZ0ZXIgZXZlcnkgd3JpdGUgdHggY29tbWl0JywgZG9uZSA9PiB7XG4gICAgaWYgKCFzZXJ2ZXJJczMxT3JMYXRlcihkb25lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJvb2ttYXJrQmVmb3JlID0gc2Vzc2lvbi5sYXN0Qm9va21hcmsoKTtcblxuICAgIGNvbnN0IHR4ID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgdHgucnVuKCdDUkVBVEUgKCknKS50aGVuKCgpID0+IHtcbiAgICAgIHR4LmNvbW1pdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBjb25zdCBib29rbWFya0FmdGVyID0gc2Vzc2lvbi5sYXN0Qm9va21hcmsoKTtcbiAgICAgICAgZXhwZWN0KGJvb2ttYXJrQWZ0ZXIpLnRvQmVEZWZpbmVkKCk7XG4gICAgICAgIGV4cGVjdChib29rbWFya0FmdGVyKS5ub3QudG9CZU51bGwoKTtcbiAgICAgICAgZXhwZWN0KGJvb2ttYXJrQWZ0ZXIpLm5vdC50b0VxdWFsKGJvb2ttYXJrQmVmb3JlKTtcblxuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgbG9zZSBsYXN0IGJvb2ttYXJrIGFmdGVyIHJ1bicsIGRvbmUgPT4ge1xuICAgIGlmICghc2VydmVySXMzMU9yTGF0ZXIoZG9uZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgIHR4LnJ1bignQ1JFQVRFICgpJykudGhlbigoKSA9PiB7XG4gICAgICB0eC5jb21taXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgY29uc3QgYm9va21hcmtCZWZvcmUgPSBzZXNzaW9uLmxhc3RCb29rbWFyaygpO1xuICAgICAgICBleHBlY3QoYm9va21hcmtCZWZvcmUpLnRvQmVEZWZpbmVkKCk7XG4gICAgICAgIGV4cGVjdChib29rbWFya0JlZm9yZSkubm90LnRvQmVOdWxsKCk7XG5cbiAgICAgICAgc2Vzc2lvbi5ydW4oJ0NSRUFURSAoKScpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJvb2ttYXJrQWZ0ZXIgPSBzZXNzaW9uLmxhc3RCb29rbWFyaygpO1xuICAgICAgICAgIGV4cGVjdChib29rbWFya0FmdGVyKS50b0VxdWFsKGJvb2ttYXJrQmVmb3JlKTtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY29tbWl0IHJlYWQgdHJhbnNhY3Rpb24nLCBkb25lID0+IHtcbiAgICBpZiAoIXNlcnZlcklzMzFPckxhdGVyKGRvbmUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYm9va21hcmtCZWZvcmUgPSBzZXNzaW9uLmxhc3RCb29rbWFyaygpO1xuICAgIGNvbnN0IHJlc3VsdFByb21pc2UgPSBzZXNzaW9uLnJlYWRUcmFuc2FjdGlvbih0eCA9PiB0eC5ydW4oJ1JFVFVSTiA0MiBBUyBhbnN3ZXInKSk7XG5cbiAgICByZXN1bHRQcm9taXNlLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkcy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgICBleHBlY3QocmVzdWx0LnJlY29yZHNbMF0uZ2V0KCdhbnN3ZXInKS50b051bWJlcigpKS50b0VxdWFsKDQyKTtcblxuICAgICAgY29uc3QgYm9va21hcmtBZnRlciA9IHNlc3Npb24ubGFzdEJvb2ttYXJrKCk7XG4gICAgICB2ZXJpZnlCb29rbWFyayhib29rbWFya0FmdGVyKTtcbiAgICAgIGV4cGVjdChib29rbWFya0FmdGVyKS5ub3QudG9FcXVhbChib29rbWFya0JlZm9yZSk7XG5cbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjb21taXQgd3JpdGUgdHJhbnNhY3Rpb24nLCBkb25lID0+IHtcbiAgICBpZiAoIXNlcnZlcklzMzFPckxhdGVyKGRvbmUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYm9va21hcmtCZWZvcmUgPSBzZXNzaW9uLmxhc3RCb29rbWFyaygpO1xuICAgIGNvbnN0IHJlc3VsdFByb21pc2UgPSBzZXNzaW9uLndyaXRlVHJhbnNhY3Rpb24odHggPT4gdHgucnVuKCdDUkVBVEUgKG46Tm9kZSB7aWQ6IDQyfSkgUkVUVVJOIG4uaWQgQVMgYW5zd2VyJykpO1xuXG4gICAgcmVzdWx0UHJvbWlzZS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBleHBlY3QocmVzdWx0LnJlY29yZHMubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzWzBdLmdldCgnYW5zd2VyJykudG9OdW1iZXIoKSkudG9FcXVhbCg0Mik7XG4gICAgICBleHBlY3QocmVzdWx0LnN1bW1hcnkuY291bnRlcnMubm9kZXNDcmVhdGVkKCkpLnRvRXF1YWwoMSk7XG5cbiAgICAgIGNvbnN0IGJvb2ttYXJrQWZ0ZXIgPSBzZXNzaW9uLmxhc3RCb29rbWFyaygpO1xuICAgICAgdmVyaWZ5Qm9va21hcmsoYm9va21hcmtBZnRlcik7XG4gICAgICBleHBlY3QoYm9va21hcmtBZnRlcikubm90LnRvRXF1YWwoYm9va21hcmtCZWZvcmUpO1xuXG4gICAgICBjb3VudE5vZGVzKCdOb2RlJywgJ2lkJywgNDIpLnRoZW4oY291bnQgPT4ge1xuICAgICAgICBleHBlY3QoY291bnQpLnRvRXF1YWwoMSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBjb21taXQgYWxyZWFkeSBjb21taXR0ZWQgcmVhZCB0cmFuc2FjdGlvbicsIGRvbmUgPT4ge1xuICAgIGlmICghc2VydmVySXMzMU9yTGF0ZXIoZG9uZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRQcm9taXNlID0gc2Vzc2lvbi5yZWFkVHJhbnNhY3Rpb24odHggPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdHgucnVuKCdSRVRVUk4gNDIgQVMgYW5zd2VyJykudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgIHR4LmNvbW1pdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSh7cmVzdWx0OiByZXN1bHQsIGJvb2ttYXJrOiBzZXNzaW9uLmxhc3RCb29rbWFyaygpfSk7XG4gICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4gcmVqZWN0KGVycm9yKSk7XG4gICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHJlamVjdChlcnJvcikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXN1bHRQcm9taXNlLnRoZW4ob3V0Y29tZSA9PiB7XG4gICAgICBjb25zdCBib29rbWFyayA9IG91dGNvbWUuYm9va21hcms7XG4gICAgICBjb25zdCByZXN1bHQgPSBvdXRjb21lLnJlc3VsdDtcblxuICAgICAgdmVyaWZ5Qm9va21hcmsoYm9va21hcmspO1xuICAgICAgZXhwZWN0KHNlc3Npb24ubGFzdEJvb2ttYXJrKCkpLnRvRXF1YWwoYm9va21hcmspOyAvLyBleHBlY3QgYm9va21hcmsgdG8gbm90IGNoYW5nZVxuXG4gICAgICBleHBlY3QocmVzdWx0LnJlY29yZHMubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzWzBdLmdldCgnYW5zd2VyJykudG9OdW1iZXIoKSkudG9FcXVhbCg0Mik7XG5cbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgY29tbWl0IGFscmVhZHkgY29tbWl0dGVkIHdyaXRlIHRyYW5zYWN0aW9uJywgZG9uZSA9PiB7XG4gICAgaWYgKCFzZXJ2ZXJJczMxT3JMYXRlcihkb25lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdFByb21pc2UgPSBzZXNzaW9uLnJlYWRUcmFuc2FjdGlvbih0eCA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0eC5ydW4oJ0NSRUFURSAobjpOb2RlIHtpZDogNDJ9KSBSRVRVUk4gbi5pZCBBUyBhbnN3ZXInKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgdHguY29tbWl0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKHtyZXN1bHQ6IHJlc3VsdCwgYm9va21hcms6IHNlc3Npb24ubGFzdEJvb2ttYXJrKCl9KTtcbiAgICAgICAgICB9KS5jYXRjaChlcnJvciA9PiByZWplY3QoZXJyb3IpKTtcbiAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4gcmVqZWN0KGVycm9yKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJlc3VsdFByb21pc2UudGhlbihvdXRjb21lID0+IHtcbiAgICAgIGNvbnN0IGJvb2ttYXJrID0gb3V0Y29tZS5ib29rbWFyaztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG91dGNvbWUucmVzdWx0O1xuXG4gICAgICB2ZXJpZnlCb29rbWFyayhib29rbWFyayk7XG4gICAgICBleHBlY3Qoc2Vzc2lvbi5sYXN0Qm9va21hcmsoKSkudG9FcXVhbChib29rbWFyayk7IC8vIGV4cGVjdCBib29rbWFyayB0byBub3QgY2hhbmdlXG5cbiAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkcy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgICBleHBlY3QocmVzdWx0LnJlY29yZHNbMF0uZ2V0KCdhbnN3ZXInKS50b051bWJlcigpKS50b0VxdWFsKDQyKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuc3VtbWFyeS5jb3VudGVycy5ub2Rlc0NyZWF0ZWQoKSkudG9FcXVhbCgxKTtcblxuICAgICAgY291bnROb2RlcygnTm9kZScsICdpZCcsIDQyKS50aGVuKGNvdW50ID0+IHtcbiAgICAgICAgZXhwZWN0KGNvdW50KS50b0VxdWFsKDEpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgY29tbWl0IHJvbGxlZCBiYWNrIHJlYWQgdHJhbnNhY3Rpb24nLCBkb25lID0+IHtcbiAgICBpZiAoIXNlcnZlcklzMzFPckxhdGVyKGRvbmUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYm9va21hcmtCZWZvcmUgPSBzZXNzaW9uLmxhc3RCb29rbWFyaygpO1xuICAgIGNvbnN0IHJlc3VsdFByb21pc2UgPSBzZXNzaW9uLnJlYWRUcmFuc2FjdGlvbih0eCA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0eC5ydW4oJ1JFVFVSTiA0MiBBUyBhbnN3ZXInKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgdHgucm9sbGJhY2soKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICB9KS5jYXRjaChlcnJvciA9PiByZWplY3QoZXJyb3IpKTtcbiAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4gcmVqZWN0KGVycm9yKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJlc3VsdFByb21pc2UudGhlbihyZXN1bHQgPT4ge1xuICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzLmxlbmd0aCkudG9FcXVhbCgxKTtcbiAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkc1swXS5nZXQoJ2Fuc3dlcicpLnRvTnVtYmVyKCkpLnRvRXF1YWwoNDIpO1xuICAgICAgZXhwZWN0KHNlc3Npb24ubGFzdEJvb2ttYXJrKCkpLnRvQmUoYm9va21hcmtCZWZvcmUpOyAvLyBleHBlY3QgYm9va21hcmsgdG8gbm90IGNoYW5nZVxuXG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IGNvbW1pdCByb2xsZWQgYmFjayB3cml0ZSB0cmFuc2FjdGlvbicsIGRvbmUgPT4ge1xuICAgIGlmICghc2VydmVySXMzMU9yTGF0ZXIoZG9uZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBib29rbWFya0JlZm9yZSA9IHNlc3Npb24ubGFzdEJvb2ttYXJrKCk7XG4gICAgY29uc3QgcmVzdWx0UHJvbWlzZSA9IHNlc3Npb24ucmVhZFRyYW5zYWN0aW9uKHR4ID0+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHR4LnJ1bignQ1JFQVRFIChuOk5vZGUge2lkOiA0Mn0pIFJFVFVSTiBuLmlkIEFTIGFuc3dlcicpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICB0eC5yb2xsYmFjaygpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHJlamVjdChlcnJvcikpO1xuICAgICAgICB9KS5jYXRjaChlcnJvciA9PiByZWplY3QoZXJyb3IpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmVzdWx0UHJvbWlzZS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBleHBlY3QocmVzdWx0LnJlY29yZHMubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzWzBdLmdldCgnYW5zd2VyJykudG9OdW1iZXIoKSkudG9FcXVhbCg0Mik7XG4gICAgICBleHBlY3QocmVzdWx0LnN1bW1hcnkuY291bnRlcnMubm9kZXNDcmVhdGVkKCkpLnRvRXF1YWwoMSk7XG4gICAgICBleHBlY3Qoc2Vzc2lvbi5sYXN0Qm9va21hcmsoKSkudG9CZShib29rbWFya0JlZm9yZSk7IC8vIGV4cGVjdCBib29rbWFyayB0byBub3QgY2hhbmdlXG5cbiAgICAgIGNvdW50Tm9kZXMoJ05vZGUnLCAnaWQnLCA0MikudGhlbihjb3VudCA9PiB7XG4gICAgICAgIGV4cGVjdChjb3VudCkudG9FcXVhbCgwKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaW50ZXJydXB0IHF1ZXJ5IHdhaXRpbmcgb24gYSBsb2NrIHdoZW4gY2xvc2VkJywgZG9uZSA9PiB7XG4gICAgaWYgKCFzZXJ2ZXJJczMxT3JMYXRlcihkb25lKSkge1xuICAgICAgLy8gbG9ja3MgYXJlIHRyYW5zYWN0aW9uIHRlcm1pbmF0aW9uIGF3YXJlIGJ5IGRlZmF1bHQgb25seSBpbiAzLjErXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2Vzc2lvbi5ydW4oJ0NSRUFURSAoKScpLnRoZW4oKCkgPT4ge1xuICAgICAgc2Vzc2lvbi5jbG9zZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlc3Npb24xID0gZHJpdmVyLnNlc3Npb24oKTtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbjIgPSBkcml2ZXIuc2Vzc2lvbigpO1xuICAgICAgICBjb25zdCB0eDEgPSBzZXNzaW9uMS5iZWdpblRyYW5zYWN0aW9uKCk7XG5cbiAgICAgICAgdHgxLnJ1bignTUFUQ0ggKG4pIFNFVCBuLmlkID0gMSBSRVRVUk4gNDIgQVMgYW5zd2VyJykudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgIC8vIG5vZGUgaXMgbm93IGxvY2tlZCBieSB0eDFcbiAgICAgICAgICBleHBlY3QocmVzdWx0LnJlY29yZHMubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkc1swXS5nZXQoMCkudG9OdW1iZXIoKSkudG9FcXVhbCg0Mik7XG5cbiAgICAgICAgICAvLyB0aGlzIHF1ZXJ5IHNob3VsZCBnZXQgc3R1Y2sgd2FpdGluZyBmb3IgdGhlIGxvY2tcbiAgICAgICAgICBzZXNzaW9uMi5ydW4oJ01BVENIIChuKSBTRVQgbi5pZCA9IDIgUkVUVVJOIDQyIEFTIGFuc3dlcicpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgIGV4cGVjdFRyYW5zYWN0aW9uVGVybWluYXRlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHR4MS5jb21taXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgcmVhZEFsbE5vZGVJZHMoKS50aGVuKGlkcyA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlkcykudG9FcXVhbChbMV0pO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gY2xvc2Ugc2Vzc2lvbiBhZnRlciBhIHdoaWxlXG4gICAgICAgICAgICBzZXNzaW9uMi5jbG9zZSgpO1xuICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGludGVycnVwdCB0cmFuc2FjdGlvbiB3YWl0aW5nIG9uIGEgbG9jayB3aGVuIGNsb3NlZCcsIGRvbmUgPT4ge1xuICAgIGlmICghc2VydmVySXMzMU9yTGF0ZXIoZG9uZSkpIHtcbiAgICAgIC8vIGxvY2tzIGFyZSB0cmFuc2FjdGlvbiB0ZXJtaW5hdGlvbiBhd2FyZSBieSBkZWZhdWx0IG9ubHkgaW4gMy4xK1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlc3Npb24ucnVuKCdDUkVBVEUgKCknKS50aGVuKCgpID0+IHtcbiAgICAgIHNlc3Npb24uY2xvc2UoKCkgPT4ge1xuICAgICAgICBjb25zdCBzZXNzaW9uMSA9IGRyaXZlci5zZXNzaW9uKCk7XG4gICAgICAgIGNvbnN0IHNlc3Npb24yID0gZHJpdmVyLnNlc3Npb24oKTtcbiAgICAgICAgY29uc3QgdHgxID0gc2Vzc2lvbjEuYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgICAgICBjb25zdCB0eDIgPSBzZXNzaW9uMi5iZWdpblRyYW5zYWN0aW9uKCk7XG5cbiAgICAgICAgdHgxLnJ1bignTUFUQ0ggKG4pIFNFVCBuLmlkID0gMSBSRVRVUk4gNDIgQVMgYW5zd2VyJykudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgIC8vIG5vZGUgaXMgbm93IGxvY2tlZCBieSB0eDFcbiAgICAgICAgICBleHBlY3QocmVzdWx0LnJlY29yZHMubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkc1swXS5nZXQoMCkudG9OdW1iZXIoKSkudG9FcXVhbCg0Mik7XG5cbiAgICAgICAgICAvLyB0aGlzIHF1ZXJ5IHNob3VsZCBnZXQgc3R1Y2sgd2FpdGluZyBmb3IgdGhlIGxvY2tcbiAgICAgICAgICB0eDIucnVuKCdNQVRDSCAobikgU0VUIG4uaWQgPSAyIFJFVFVSTiA0MiBBUyBhbnN3ZXInKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICBleHBlY3RUcmFuc2FjdGlvblRlcm1pbmF0ZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0eDEuY29tbWl0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHJlYWRBbGxOb2RlSWRzKCkudGhlbihpZHMgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpZHMpLnRvRXF1YWwoWzFdKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8vIGNsb3NlIHNlc3Npb24gYWZ0ZXIgYSB3aGlsZVxuICAgICAgICAgICAgc2Vzc2lvbjIuY2xvc2UoKTtcbiAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBpbnRlcnJ1cHQgdHJhbnNhY3Rpb24gZnVuY3Rpb24gd2FpdGluZyBvbiBhIGxvY2sgd2hlbiBjbG9zZWQnLCBkb25lID0+IHtcbiAgICBpZiAoIXNlcnZlcklzMzFPckxhdGVyKGRvbmUpKSB7XG4gICAgICAvLyBsb2NrcyBhcmUgdHJhbnNhY3Rpb24gdGVybWluYXRpb24gYXdhcmUgYnkgZGVmYXVsdCBvbmx5IGluIDMuMStcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXNzaW9uLnJ1bignQ1JFQVRFICgpJykudGhlbigoKSA9PiB7XG4gICAgICBzZXNzaW9uLmNsb3NlKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbjEgPSBkcml2ZXIuc2Vzc2lvbigpO1xuICAgICAgICBjb25zdCBzZXNzaW9uMiA9IGRyaXZlci5zZXNzaW9uKCk7XG4gICAgICAgIGNvbnN0IHR4MSA9IHNlc3Npb24xLmJlZ2luVHJhbnNhY3Rpb24oKTtcblxuICAgICAgICB0eDEucnVuKCdNQVRDSCAobikgU0VUIG4uaWQgPSAxIFJFVFVSTiA0MiBBUyBhbnN3ZXInKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgLy8gbm9kZSBpcyBub3cgbG9ja2VkIGJ5IHR4MVxuICAgICAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkcy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzWzBdLmdldCgwKS50b051bWJlcigpKS50b0VxdWFsKDQyKTtcblxuICAgICAgICAgIHNlc3Npb24yLndyaXRlVHJhbnNhY3Rpb24odHgyID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMgcXVlcnkgc2hvdWxkIGdldCBzdHVjayB3YWl0aW5nIGZvciB0aGUgbG9ja1xuICAgICAgICAgICAgcmV0dXJuIHR4Mi5ydW4oJ01BVENIIChuKSBTRVQgbi5pZCA9IDIgUkVUVVJOIDQyIEFTIGFuc3dlcicpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgZXhwZWN0VHJhbnNhY3Rpb25UZXJtaW5hdGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICB0eDEuY29tbWl0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVhZEFsbE5vZGVJZHMoKS50aGVuKGlkcyA9PiB7XG4gICAgICAgICAgICAgICAgICBleHBlY3QoaWRzKS50b0VxdWFsKFsxXSk7XG4gICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8vIGNsb3NlIHNlc3Npb24gYWZ0ZXIgYSB3aGlsZVxuICAgICAgICAgICAgc2Vzc2lvbjIuY2xvc2UoKTtcbiAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBiZSBhYmxlIHRvIGRvIG5lc3RlZCBxdWVyaWVzJywgZG9uZSA9PiB7XG4gICAgc2Vzc2lvbi5ydW4oXG4gICAgICAnQ1JFQVRFIChrbmlnaHQ6UGVyc29uOktuaWdodCB7bmFtZToge25hbWUxfSwgY2FzdGxlOiB7Y2FzdGxlfX0pJyArXG4gICAgICAnQ1JFQVRFIChraW5nOlBlcnNvbiB7bmFtZToge25hbWUyfSwgdGl0bGU6IHt0aXRsZX19KScsXG4gICAgICB7bmFtZTE6ICdMYW5jZWxvdCcsIGNhc3RsZTogJ0NhbWVsb3QnLCBuYW1lMjogJ0FydGh1cicsIHRpdGxlOiAnS2luZyd9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBzZXNzaW9uLnJ1bihcbiAgICAgICAgICAnTUFUQ0ggKGtuaWdodDpQZXJzb246S25pZ2h0KSBXSEVSRSBrbmlnaHQuY2FzdGxlID0ge2Nhc3RsZX0gUkVUVVJOIGlkKGtuaWdodCkgQVMga25pZ2h0X2lkJyxcbiAgICAgICAgICB7Y2FzdGxlOiAnQ2FtZWxvdCd9KS5zdWJzY3JpYmUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgb25OZXh0OiByZWNvcmQgPT4ge1xuICAgICAgICAgICAgICBzZXNzaW9uXG4gICAgICAgICAgICAgICAgLnJ1bignTUFUQ0ggKGtuaWdodCkgV0hFUkUgaWQoa25pZ2h0KSA9IHtpZH0gTUFUQ0ggKGtpbmc6UGVyc29uKSBXSEVSRSBraW5nLm5hbWUgPSB7a2luZ30gQ1JFQVRFIChrbmlnaHQpLVs6REVGRU5EU10tPihraW5nKScsXG4gICAgICAgICAgICAgICAgICB7aWQ6IHJlY29yZC5nZXQoJ2tuaWdodF9pZCcpLCBraW5nOiAnQXJ0aHVyJ30pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ29tcGxldGVkOiAoKSA9PiB7XG4gICAgICAgICAgICAgIHNlc3Npb25cbiAgICAgICAgICAgICAgICAucnVuKCdNQVRDSCAoOktuaWdodCktWzpERUZFTkRTXS0+KCkgUkVUVVJOIGNvdW50KCopJylcbiAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSByZXN1bHQucmVjb3Jkc1swXS5nZXQoMCkudG9JbnQoKTtcbiAgICAgICAgICAgICAgICAgIGV4cGVjdChjb3VudCkudG9FcXVhbCgxKTtcbiAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9KTtcblxuICBmdW5jdGlvbiBzZXJ2ZXJJczMxT3JMYXRlcihkb25lKSB7XG4gICAgLy8gbGF6eSB3YXkgb2YgY2hlY2tpbmcgdGhlIHZlcnNpb24gbnVtYmVyXG4gICAgLy8gaWYgc2VydmVyIGhhcyBiZWVuIHNldCB3ZSBrbm93IGl0IGlzIGF0IGxlYXN0IDMuMVxuICAgIGlmICghc2VydmVyTWV0YWRhdGEpIHtcbiAgICAgIGRvbmUoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBjb3VudE5vZGVzKGxhYmVsLCBwcm9wZXJ0eUtleSwgcHJvcGVydHlWYWx1ZSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXNzaW9uLnJ1bihgTUFUQ0ggKG46ICR7bGFiZWx9IHske3Byb3BlcnR5S2V5fTogJHtwcm9wZXJ0eVZhbHVlfX0pIFJFVFVSTiBjb3VudChuKSBBUyBjb3VudGApLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgcmVzb2x2ZShyZXN1bHQucmVjb3Jkc1swXS5nZXQoJ2NvdW50JykudG9OdW1iZXIoKSk7XG4gICAgICB9KS5jYXRjaChlcnJvciA9PiByZWplY3QoZXJyb3IpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdpdGhRdWVyeUluVG1wU2Vzc2lvbihkcml2ZXIsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgdG1wU2Vzc2lvbiA9IGRyaXZlci5zZXNzaW9uKCk7XG4gICAgcmV0dXJuIHRtcFNlc3Npb24ucnVuKCdSRVRVUk4gMScpLnRoZW4oKCkgPT4ge1xuICAgICAgdG1wU2Vzc2lvbi5jbG9zZShjYWxsYmFjayk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBuZXdTZXNzaW9uV2l0aENvbm5lY3Rpb24oY29ubmVjdGlvbikge1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm92aWRlciA9IG5ldyBTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIoUHJvbWlzZS5yZXNvbHZlKGNvbm5lY3Rpb24pKTtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oUkVBRCwgY29ubmVjdGlvblByb3ZpZGVyKTtcbiAgICBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTsgLy8gZm9yY2Ugc2Vzc2lvbiB0byBhY3F1aXJlIG5ldyBjb25uZWN0aW9uXG4gICAgcmV0dXJuIHNlc3Npb247XG4gIH1cblxuICBmdW5jdGlvbiBpZGxlQ29ubmVjdGlvbkNvdW50KGRyaXZlcikge1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm92aWRlciA9IGRyaXZlci5fY29ubmVjdGlvblByb3ZpZGVyO1xuICAgIGNvbnN0IGFkZHJlc3MgPSBjb25uZWN0aW9uUHJvdmlkZXIuX2FkZHJlc3M7XG4gICAgY29uc3QgY29ubmVjdGlvblBvb2wgPSBjb25uZWN0aW9uUHJvdmlkZXIuX2Nvbm5lY3Rpb25Qb29sO1xuICAgIGNvbnN0IGlkbGVDb25uZWN0aW9ucyA9IGNvbm5lY3Rpb25Qb29sLl9wb29sc1thZGRyZXNzXTtcbiAgICByZXR1cm4gaWRsZUNvbm5lY3Rpb25zLmxlbmd0aDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZlcmlmeUJvb2ttYXJrKGJvb2ttYXJrKSB7XG4gICAgZXhwZWN0KGJvb2ttYXJrKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChib29rbWFyaykubm90LnRvQmVOdWxsKCk7XG4gIH1cblxuICBmdW5jdGlvbiBleHBlY3RUcmFuc2FjdGlvblRlcm1pbmF0ZWRFcnJvcihlcnJvcikge1xuICAgIGV4cGVjdChlcnJvci5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigndHJhbnNhY3Rpb24gdGVybWluYXRlZCcpID49IDApLnRvQmVUcnV0aHkoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRBbGxOb2RlSWRzKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gZHJpdmVyLnNlc3Npb24oKTtcbiAgICAgIHNlc3Npb24ucnVuKCdNQVRDSCAobikgUkVUVVJOIG4uaWQnKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIGNvbnN0IGlkcyA9IHJlc3VsdC5yZWNvcmRzLm1hcChyZWNvcmQgPT4gcmVjb3JkLmdldCgwKS50b051bWJlcigpKTtcbiAgICAgICAgc2Vzc2lvbi5jbG9zZSgpO1xuICAgICAgICByZXNvbHZlKGlkcyk7XG4gICAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCBuZW80aiBmcm9tICcuLi8uLi9zcmMvdjEnO1xuaW1wb3J0IHNoYXJlZE5lbzRqIGZyb20gJy4uL2ludGVybmFsL3NoYXJlZC1uZW80aic7XG5cbmRlc2NyaWJlKCd0cmFuc2FjdGlvbicsICgpID0+IHtcblxuICBsZXQgZHJpdmVyO1xuICBsZXQgc2Vzc2lvbjtcbiAgbGV0IHNlcnZlcjtcbiAgbGV0IG9yaWdpbmFsVGltZW91dDtcblxuICBiZWZvcmVFYWNoKGRvbmUgPT4ge1xuICAgIC8vIG1ha2UgamFzbWluZSB0aW1lb3V0IGhpZ2ggZW5vdWdoIHRvIHRlc3QgdW5yZWFjaGFibGUgYm9va21hcmtzXG4gICAgb3JpZ2luYWxUaW1lb3V0ID0gamFzbWluZS5ERUZBVUxUX1RJTUVPVVRfSU5URVJWQUw7XG4gICAgamFzbWluZS5ERUZBVUxUX1RJTUVPVVRfSU5URVJWQUwgPSA2MDAwMDtcblxuICAgIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RcIiwgc2hhcmVkTmVvNGouYXV0aFRva2VuKTtcbiAgICBkcml2ZXIub25Db21wbGV0ZWQgPSBtZXRhID0+IHtcbiAgICAgIHNlcnZlciA9IG1ldGFbJ3NlcnZlciddO1xuICAgIH07XG4gICAgc2Vzc2lvbiA9IGRyaXZlci5zZXNzaW9uKCk7XG5cbiAgICBzZXNzaW9uLnJ1bihcIk1BVENIIChuKSBERVRBQ0ggREVMRVRFIG5cIikudGhlbihkb25lKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBqYXNtaW5lLkRFRkFVTFRfVElNRU9VVF9JTlRFUlZBTCA9IG9yaWdpbmFsVGltZW91dDtcbiAgICBkcml2ZXIuY2xvc2UoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjb21taXQgc2ltcGxlIGNhc2UnLCBkb25lID0+IHtcbiAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgIHR4LnJ1bihcIkNSRUFURSAoOlRYTm9kZTEpXCIpLnRoZW4oKCkgPT4ge1xuICAgICAgdHgucnVuKFwiQ1JFQVRFICg6VFhOb2RlMilcIikudGhlbigoKSA9PiB7XG4gICAgICAgIHR4LmNvbW1pdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHNlc3Npb24ucnVuKFwiTUFUQ0ggKHQxOlRYTm9kZTEpLCAodDI6VFhOb2RlMikgUkVUVVJOIGNvdW50KHQxKSwgY291bnQodDIpXCIpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkcy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0LnJlY29yZHNbMF0uZ2V0KCdjb3VudCh0MSknKS50b0ludCgpKS50b0JlKDEpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzWzBdLmdldCgnY291bnQodDIpJykudG9JbnQoKSkudG9CZSgxKTtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICB9KS5jYXRjaChjb25zb2xlLmxvZyk7XG4gICAgICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgICB9KS5jYXRjaChjb25zb2xlLmxvZyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGFuZGxlIGludGVyYWN0aXZlIHNlc3Npb24nLCBkb25lID0+IHtcbiAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgIHR4LnJ1bihcIlJFVFVSTiAnZm9vJyBBUyByZXNcIikudGhlbihyZXN1bHQgPT4ge1xuICAgICAgdHgucnVuKFwiQ1JFQVRFICh7bmFtZToge3BhcmFtfX0pXCIsIHtwYXJhbTogcmVzdWx0LnJlY29yZHNbMF0uZ2V0KCdyZXMnKX0pLnRoZW4oKCkgPT4ge1xuICAgICAgICB0eC5jb21taXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICBzZXNzaW9uLnJ1bihcIk1BVENIIChhIHtuYW1lOidmb28nfSkgUkVUVVJOIGNvdW50KGEpXCIpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkcy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0LnJlY29yZHNbMF0uZ2V0KCdjb3VudChhKScpLnRvSW50KCkpLnRvQmUoMSk7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgICB9KS5jYXRjaChjb25zb2xlLmxvZyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGFuZGxlIGZhaWx1cmVzIHdpdGggc3Vic2NyaWJlJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eC5ydW4oJ1RISVMgSVMgTk9UIENZUEhFUicpXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBleHBlY3QoZXJyb3IuY29kZSkudG9FcXVhbCgnTmVvLkNsaWVudEVycm9yLlN0YXRlbWVudC5TeW50YXhFcnJvcicpO1xuICAgICAgICBkcml2ZXIuY2xvc2UoKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGFuZGxlIGZhaWx1cmVzIHdpdGggY2F0Y2gnLCBkb25lID0+IHtcbiAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgIHR4LnJ1bignVEhJUyBJUyBOT1QgQ1lQSEVSJylcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBvbkVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvRXF1YWwoJ05lby5DbGllbnRFcnJvci5TdGF0ZW1lbnQuU3ludGF4RXJyb3InKTtcbiAgICAgICAgICBkcml2ZXIuY2xvc2UoKTtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGhhbmRsZSBmYWlsdXJlcyBvbiBjb21taXQnLCBkb25lID0+IHtcbiAgICAvLyBXaGVuXG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eC5ydW4oXCJDUkVBVEUgKDpUWE5vZGUxKVwiKS50aGVuKCgpID0+IHtcbiAgICAgIHR4LnJ1bihcIlRISVMgSVMgTk9UIENZUEhFUlwiKS5jYXRjaChzdGF0ZW1lbnRFcnJvciA9PiB7XG4gICAgICAgIGV4cGVjdFN5bnRheEVycm9yKHN0YXRlbWVudEVycm9yKTtcblxuICAgICAgICB0eC5ydW4oXCJDUkVBVEUgKDpUWE5vZGUyKVwiKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgdHguY29tbWl0KCkuY2F0Y2goY29tbWl0RXJyb3IgPT4ge1xuICAgICAgICAgICAgZXhwZWN0KGNvbW1pdEVycm9yLmVycm9yKS50b0JlRGVmaW5lZCgpO1xuICAgICAgICAgICAgZHJpdmVyLmNsb3NlKCk7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goY29uc29sZS5sb2cpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBjb21taXR0aW5nIG9uIGEgZmFpbGVkIHF1ZXJ5JywgZG9uZSA9PiB7XG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eC5ydW4oXCJDUkVBVEUgKDpUWE5vZGUxKVwiKS50aGVuKCgpID0+IHtcbiAgICAgIHR4LnJ1bihcIlRISVMgSVMgTk9UIENZUEhFUlwiKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHR4LmNvbW1pdCgpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICBleHBlY3QoZXJyb3IuZXJyb3IpLnRvQmVEZWZpbmVkKCk7XG4gICAgICAgICAgZHJpdmVyLmNsb3NlKCk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYW5kbGUgd2hlbiBjb21taXR0aW5nIHdoZW4gYW5vdGhlciBzdGF0ZW1lbnQgZmFpbHMnLCBkb25lID0+IHtcbiAgICAvLyBXaGVuXG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eC5ydW4oXCJDUkVBVEUgKDpUWE5vZGUxKVwiKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0eC5jb21taXQoKVxuICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICBleHBlY3QoZXJyb3IpLnRvQmVEZWZpbmVkKCk7XG4gICAgICAgICAgICBkcml2ZXIuY2xvc2UoKTtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIHR4LnJ1bihcIlRISVMgSVMgTk9UIENZUEhFUlwiKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYW5kbGUgcm9sbGJhY2tzJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eC5ydW4oXCJDUkVBVEUgKDpUWE5vZGUxKVwiKS50aGVuKCgpID0+IHtcbiAgICAgIHR4LnJ1bihcIkNSRUFURSAoOlRYTm9kZTIpXCIpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0eC5yb2xsYmFjaygpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHNlc3Npb24ucnVuKFwiTUFUQ0ggKHQxOlRYTm9kZTEpLCAodDI6VFhOb2RlMikgUkVUVVJOIGNvdW50KHQxKSwgY291bnQodDIpXCIpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkcy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0LnJlY29yZHNbMF0uZ2V0KCdjb3VudCh0MSknKS50b0ludCgpKS50b0JlKDApO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzWzBdLmdldCgnY291bnQodDIpJykudG9JbnQoKSkudG9CZSgwKTtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICB9KS5jYXRjaChjb25zb2xlLmxvZyk7XG4gICAgICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgICB9KS5jYXRjaChjb25zb2xlLmxvZyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCB3aGVuIGNvbW1pdHRpbmcgb24gYSByb2xsZWQgYmFjayBxdWVyeScsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHR4ID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgdHgucnVuKFwiQ1JFQVRFICg6VFhOb2RlMSlcIikudGhlbigoKSA9PiB7XG4gICAgICB0eC5yb2xsYmFjaygpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0eC5jb21taXQoKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgZXhwZWN0KGVycm9yLmVycm9yKS50b0JlRGVmaW5lZCgpO1xuICAgICAgICAgIGRyaXZlci5jbG9zZSgpO1xuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KS5jYXRjaChjb25zb2xlLmxvZyk7XG4gICAgfSkuY2F0Y2goY29uc29sZS5sb2cpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBydW5uaW5nIG9uIGEgcm9sbGVkIGJhY2sgdHJhbnNhY3Rpb24nLCBkb25lID0+IHtcbiAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgIHR4LnJ1bihcIkNSRUFURSAoOlRYTm9kZTEpXCIpLnRoZW4oKCkgPT4ge1xuICAgICAgdHgucm9sbGJhY2soKS50aGVuKCgpID0+IHtcbiAgICAgICAgdHgucnVuKFwiUkVUVVJOIDQyXCIpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICBleHBlY3QoZXJyb3IuZXJyb3IpLnRvQmVEZWZpbmVkKCk7XG4gICAgICAgICAgZHJpdmVyLmNsb3NlKCk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgICB9KS5jYXRjaChjb25zb2xlLmxvZyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCB3aGVuIHJ1bm5pbmcgd2hlbiBhIHByZXZpb3VzIHN0YXRlbWVudCBmYWlsZWQnLCBkb25lID0+IHtcbiAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgIHR4LnJ1bihcIlRISVMgSVMgTk9UIENZUEhFUlwiKVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgdHgucnVuKFwiUkVUVVJOIDQyXCIpXG4gICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChlcnJvci5lcnJvcikudG9CZURlZmluZWQoKTtcbiAgICAgICAgICAgIGRyaXZlci5jbG9zZSgpO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgdHgucm9sbGJhY2soKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gdHJ5aW5nIHRvIHJvbGwgYmFjayBhIHJvbGxlZCBiYWNrIHRyYW5zYWN0aW9uJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eC5ydW4oXCJDUkVBVEUgKDpUWE5vZGUxKVwiKS50aGVuKCgpID0+IHtcbiAgICAgIHR4LnJvbGxiYWNrKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHR4LnJvbGxiYWNrKCkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIGV4cGVjdChlcnJvci5lcnJvcikudG9CZURlZmluZWQoKTtcbiAgICAgICAgICBkcml2ZXIuY2xvc2UoKTtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSkuY2F0Y2goY29uc29sZS5sb2cpO1xuICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwcm92aWRlIGJvb2ttYXJrIG9uIGNvbW1pdCcsIGRvbmUgPT4ge1xuICAgIGlmIChuZW80alZlcnNpb25PbGRlclRoYW4zMShkb25lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHR4ID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgZXhwZWN0KHNlc3Npb24ubGFzdEJvb2ttYXJrKCkpLm5vdC50b0JlRGVmaW5lZCgpO1xuICAgIHR4LnJ1bihcIkNSRUFURSAoOlRYTm9kZTEpXCIpLnRoZW4oKCkgPT4ge1xuICAgICAgdHgucnVuKFwiQ1JFQVRFICg6VFhOb2RlMilcIikudGhlbigoKSA9PiB7XG4gICAgICAgIHR4LmNvbW1pdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGV4cGVjdFZhbGlkTGFzdEJvb2ttYXJrKHNlc3Npb24pO1xuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KS5jYXRjaChjb25zb2xlLmxvZyk7XG4gICAgfSkuY2F0Y2goY29uc29sZS5sb2cpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGhhdmUgYm9va21hcmsgd2hlbiB0eCBpcyByb2xsZWQgYmFjaycsIGRvbmUgPT4ge1xuICAgIGlmIChuZW80alZlcnNpb25PbGRlclRoYW4zMShkb25lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV4cGVjdChzZXNzaW9uLmxhc3RCb29rbWFyaygpKS5ub3QudG9CZURlZmluZWQoKTtcbiAgICBjb25zdCB0eDEgPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcblxuICAgIHR4MS5ydW4oJ0NSRUFURSAoKScpLnRoZW4oKCkgPT4ge1xuICAgICAgdHgxLmNvbW1pdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBleHBlY3RWYWxpZExhc3RCb29rbWFyayhzZXNzaW9uKTtcbiAgICAgICAgY29uc3QgYm9va21hcmtCZWZvcmUgPSBzZXNzaW9uLmxhc3RCb29rbWFyaygpO1xuXG4gICAgICAgIGNvbnN0IHR4MiA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgICAgICB0eDIucnVuKCdDUkVBVEUgKCknKS50aGVuKCgpID0+IHtcbiAgICAgICAgICB0eDIucm9sbGJhY2soKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGV4cGVjdFZhbGlkTGFzdEJvb2ttYXJrKHNlc3Npb24pO1xuICAgICAgICAgICAgY29uc3QgYm9va21hcmtBZnRlciA9IHNlc3Npb24ubGFzdEJvb2ttYXJrKCk7XG4gICAgICAgICAgICBleHBlY3QoYm9va21hcmtBZnRlcikudG9FcXVhbChib29rbWFya0JlZm9yZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHR4MyA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgICAgICAgICAgdHgzLnJ1bignQ1JFQVRFICgpJykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHR4My5jb21taXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3RWYWxpZExhc3RCb29rbWFyayhzZXNzaW9uKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGF2ZSBubyBib29rbWFyayB3aGVuIHR4IGZhaWxzJywgZG9uZSA9PiB7XG4gICAgaWYgKG5lbzRqVmVyc2lvbk9sZGVyVGhhbjMxKGRvbmUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXhwZWN0KHNlc3Npb24ubGFzdEJvb2ttYXJrKCkpLm5vdC50b0JlRGVmaW5lZCgpO1xuICAgIGNvbnN0IHR4MSA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuXG4gICAgdHgxLnJ1bignQ1JFQVRFICgpJykudGhlbigoKSA9PiB7XG4gICAgICB0eDEuY29tbWl0KCkudGhlbigoKSA9PiB7XG4gICAgICAgIGV4cGVjdFZhbGlkTGFzdEJvb2ttYXJrKHNlc3Npb24pO1xuICAgICAgICBjb25zdCBib29rbWFya0JlZm9yZSA9IHNlc3Npb24ubGFzdEJvb2ttYXJrKCk7XG5cbiAgICAgICAgY29uc3QgdHgyID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG5cbiAgICAgICAgdHgyLnJ1bignUkVUVVJOJykuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIGV4cGVjdFN5bnRheEVycm9yKGVycm9yKTtcbiAgICAgICAgICBjb25zdCBib29rbWFya0FmdGVyID0gc2Vzc2lvbi5sYXN0Qm9va21hcmsoKTtcbiAgICAgICAgICBleHBlY3QoYm9va21hcmtBZnRlcikudG9FcXVhbChib29rbWFya0JlZm9yZSk7XG5cbiAgICAgICAgICBjb25zdCB0eDMgPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICAgICAgICB0eDMucnVuKCdDUkVBVEUgKCknKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHR4My5jb21taXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgZXhwZWN0VmFsaWRMYXN0Qm9va21hcmsoc2Vzc2lvbik7XG4gICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgZm9yIGludmFsaWQgYm9va21hcmsnLCBkb25lID0+IHtcbiAgICBpZiAobmVvNGpWZXJzaW9uT2xkZXJUaGFuMzEoZG9uZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnZhbGlkQm9va21hcmsgPSAnaGksIHRoaXMgaXMgYW4gaW52YWxpZCBib29rbWFyayc7XG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oaW52YWxpZEJvb2ttYXJrKTtcbiAgICB0eC5ydW4oJ1JFVFVSTiAxJykuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvQmUoJ05lby5DbGllbnRFcnJvci5UcmFuc2FjdGlvbi5JbnZhbGlkQm9va21hcmsnKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIHJ1biBxdWVyeSBmb3IgdW5yZWFjaGFibGUgYm9va21hcmsnLCBkb25lID0+IHtcbiAgICBpZiAobmVvNGpWZXJzaW9uT2xkZXJUaGFuMzEoZG9uZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0eDEgPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eDEucnVuKCdDUkVBVEUgKCknKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBleHBlY3QocmVzdWx0LnN1bW1hcnkuY291bnRlcnMubm9kZXNDcmVhdGVkKCkpLnRvQmUoMSk7XG5cbiAgICAgIHR4MS5jb21taXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgZXhwZWN0VmFsaWRMYXN0Qm9va21hcmsoc2Vzc2lvbik7XG5cbiAgICAgICAgY29uc3QgdW5yZWFjaGFibGVCb29rbWFyayA9IHNlc3Npb24ubGFzdEJvb2ttYXJrKCkgKyBcIjBcIjtcbiAgICAgICAgY29uc3QgdHgyID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKHVucmVhY2hhYmxlQm9va21hcmspO1xuICAgICAgICB0eDIucnVuKCdDUkVBVEUgKCknKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgY29uc3QgZXhwZWN0ZWRQcmVmaXggPSBtZXNzYWdlLmluZGV4T2YoJ0RhdGFiYXNlIG5vdCB1cCB0byB0aGUgcmVxdWVzdGVkIHZlcnNpb24nKSA9PT0gMDtcbiAgICAgICAgICBleHBlY3QoZXhwZWN0ZWRQcmVmaXgpLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSkuY2F0Y2goY29uc29sZS5sb2cpO1xuICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByb2xsYmFjayB3aGVuIHZlcnkgZmlyc3QgcnVuIGZhaWxzJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdHgxID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgdHgxLnJ1bignUkVUVVJOIGZvbycpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGV4cGVjdFN5bnRheEVycm9yKGVycm9yKTtcblxuICAgICAgY29uc3QgdHgyID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgICB0eDIucnVuKCdSRVRVUk4gMScpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzWzBdLmdldCgwKS50b051bWJlcigpKS50b0VxdWFsKDEpO1xuICAgICAgICB0eDIuY29tbWl0KCkudGhlbihkb25lKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJvbGxiYWNrIHdoZW4gc29tZSBydW4gZmFpbHMnLCBkb25lID0+IHtcbiAgICBjb25zdCB0eDEgPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eDEucnVuKCdDUkVBVEUgKDpQZXJzb24pJykudGhlbigoKSA9PiB7XG4gICAgICB0eDEucnVuKCdSRVRVUk4gZm9vJykuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBleHBlY3RTeW50YXhFcnJvcihlcnJvcik7XG5cbiAgICAgICAgY29uc3QgdHgyID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgICAgIHR4Mi5ydW4oJ01BVENIIChuOlBlcnNvbikgUkVUVVJOIGNvdW50KG4pJykudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkc1swXS5nZXQoMCkudG9OdW1iZXIoKSkudG9FcXVhbCgwKTtcbiAgICAgICAgICB0eDIuY29tbWl0KCkudGhlbihkb25lKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIGNvbW1pdCB0cmFuc2FjdGlvbiB0aGF0IGhhZCBydW4gZmFpbHVyZXMnLCBkb25lID0+IHtcbiAgICBjb25zdCB0eDEgPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICB0eDEucnVuKCdDUkVBVEUgKDpQZXJzb24pJykudGhlbigoKSA9PiB7XG4gICAgICB0eDEucnVuKCdSRVRVUk4gZm9vJykuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBleHBlY3RTeW50YXhFcnJvcihlcnJvcik7XG4gICAgICAgIHR4MS5jb21taXQoKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3I7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBlcnJvck1lc3NhZ2UuaW5kZXhPZignQ2Fubm90IGNvbW1pdCBzdGF0ZW1lbnRzIGluIHRoaXMgdHJhbnNhY3Rpb24nKTtcbiAgICAgICAgICBleHBlY3QoaW5kZXgpLm5vdC50b0JlTGVzc1RoYW4oMCk7XG5cbiAgICAgICAgICBjb25zdCB0eDIgPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICAgICAgICB0eDIucnVuKCdNQVRDSCAobjpQZXJzb24pIFJFVFVSTiBjb3VudChuKScpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkc1swXS5nZXQoMCkudG9OdW1iZXIoKSkudG9FcXVhbCgwKTtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBleHBvc2Ugc2VydmVyIGluZm8gb24gc3VjY2Vzc2Z1bCBxdWVyeScsIGRvbmUgPT4ge1xuICAgIGlmIChuZW80alZlcnNpb25PbGRlclRoYW4zMShkb25lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRlbWVudCA9ICdSRVRVUk4gMSc7XG5cbiAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgIHR4LnJ1bihzdGF0ZW1lbnQpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGNvbnN0IHN1bSA9IHJlc3VsdC5zdW1tYXJ5O1xuICAgICAgZXhwZWN0KHN1bS5zZXJ2ZXIpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3Qoc3VtLnNlcnZlci5hZGRyZXNzKS50b0VxdWFsKCdsb2NhbGhvc3Q6NzY4NycpO1xuICAgICAgZXhwZWN0KHN1bS5zZXJ2ZXIudmVyc2lvbikudG9CZURlZmluZWQoKTtcbiAgICAgIHR4LmNvbW1pdCgpLnRoZW4oZG9uZSk7XG4gICAgfSkuY2F0Y2goY29uc29sZS5sb2cpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGV4cG9zZSBzZXJ2ZXIgaW5mbyBvbiBzdWNjZXNzZnVsIHF1ZXJ5IHVzaW5nIG9ic2VydmVyJywgZG9uZSA9PiB7XG4gICAgaWYgKG5lbzRqVmVyc2lvbk9sZGVyVGhhbjMxKGRvbmUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2l2ZW5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSAnUkVUVVJOIDEnO1xuXG4gICAgLy8gV2hlbiAmIFRoZW5cbiAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgIHR4LnJ1bihzdGF0ZW1lbnQpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgb25OZXh0OiByZWNvcmQgPT4ge1xuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ29tcGxldGVkOiBzdW1tYXJ5ID0+IHtcbiAgICAgICAgICBjb25zdCBzZXJ2ZXIgPSBzdW1tYXJ5LnNlcnZlcjtcblxuICAgICAgICAgIGV4cGVjdChzZXJ2ZXIpLnRvQmVEZWZpbmVkKCk7XG4gICAgICAgICAgZXhwZWN0KHNlcnZlci5hZGRyZXNzKS50b0VxdWFsKCdsb2NhbGhvc3Q6NzY4NycpO1xuICAgICAgICAgIGV4cGVjdChzZXJ2ZXIudmVyc2lvbikudG9CZURlZmluZWQoKTtcblxuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCBuaWNlbHkgZm9yIGlsbGVnYWwgc3RhdGVtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IHR4ID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG5cbiAgICBleHBlY3QoKCkgPT4gdHgucnVuKCkpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuICAgIGV4cGVjdCgoKSA9PiB0eC5ydW4obnVsbCkpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuICAgIGV4cGVjdCgoKSA9PiB0eC5ydW4oe30pKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgICBleHBlY3QoKCkgPT4gdHgucnVuKDQyKSkudG9UaHJvd0Vycm9yKFR5cGVFcnJvcik7XG4gICAgZXhwZWN0KCgpID0+IHR4LnJ1bihbXSkpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuICAgIGV4cGVjdCgoKSA9PiB0eC5ydW4oWydDUkVBVEUgKCknXSkpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuXG4gICAgZXhwZWN0KCgpID0+IHR4LnJ1bih7c3RhdGVtZW50OiAnQ1JFQVRFICgpJ30pKS50b1Rocm93RXJyb3IoVHlwZUVycm9yKTtcbiAgICBleHBlY3QoKCkgPT4gdHgucnVuKHtjeXBoZXI6ICdDUkVBVEUgKCknfSkpLnRvVGhyb3dFcnJvcihUeXBlRXJyb3IpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFjY2VwdCBhIHN0YXRlbWVudCBvYmplY3QgJywgZG9uZSA9PiB7XG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB7dGV4dDogXCJSRVRVUk4gMSBBUyBhXCJ9O1xuXG4gICAgdHgucnVuKHN0YXRlbWVudCkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgZXhwZWN0KHJlc3VsdC5yZWNvcmRzLmxlbmd0aCkudG9CZSgxKTtcbiAgICAgIGV4cGVjdChyZXN1bHQucmVjb3Jkc1swXS5nZXQoJ2EnKS50b0ludCgpKS50b0JlKDEpO1xuICAgICAgZG9uZSgpO1xuICAgIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBiZSBvcGVuIHdoZW4gbmVpdGhlciBjb21taXR0ZWQgbm9yIHJvbGxlZCBiYWNrJywgKCkgPT4ge1xuICAgIGNvbnN0IHR4ID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgZXhwZWN0KHR4LmlzT3BlbigpKS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IGJlIG9wZW4gYWZ0ZXIgY29tbWl0JywgZG9uZSA9PiB7XG4gICAgY29uc3QgdHggPSBzZXNzaW9uLmJlZ2luVHJhbnNhY3Rpb24oKTtcblxuICAgIHR4LnJ1bignQ1JFQVRFICgpJykudGhlbigoKSA9PiB7XG4gICAgICB0eC5jb21taXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgZXhwZWN0KHR4LmlzT3BlbigpKS50b0JlRmFsc3koKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IGJlIG9wZW4gYWZ0ZXIgcm9sbGJhY2snLCBkb25lID0+IHtcbiAgICBjb25zdCB0eCA9IHNlc3Npb24uYmVnaW5UcmFuc2FjdGlvbigpO1xuXG4gICAgdHgucnVuKCdDUkVBVEUgKCknKS50aGVuKCgpID0+IHtcbiAgICAgIHR4LnJvbGxiYWNrKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGV4cGVjdCh0eC5pc09wZW4oKSkudG9CZUZhbHN5KCk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBiZSBvcGVuIGFmdGVyIHJ1biBlcnJvcicsIGRvbmUgPT4ge1xuICAgIGNvbnN0IHR4ID0gc2Vzc2lvbi5iZWdpblRyYW5zYWN0aW9uKCk7XG5cbiAgICB0eC5ydW4oJ1JFVFVSTicpLmNhdGNoKCgpID0+IHtcbiAgICAgIGV4cGVjdCh0eC5pc09wZW4oKSkudG9CZUZhbHN5KCk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGV4cGVjdFN5bnRheEVycm9yKGVycm9yKSB7XG4gICAgZXhwZWN0KGVycm9yLmNvZGUpLnRvQmUoJ05lby5DbGllbnRFcnJvci5TdGF0ZW1lbnQuU3ludGF4RXJyb3InKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cGVjdFZhbGlkTGFzdEJvb2ttYXJrKHNlc3Npb24pIHtcbiAgICBleHBlY3Qoc2Vzc2lvbi5sYXN0Qm9va21hcmsoKSkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3Qoc2Vzc2lvbi5sYXN0Qm9va21hcmsoKSkubm90LnRvQmVOdWxsKCk7XG4gIH1cblxuICBmdW5jdGlvbiBuZW80alZlcnNpb25PbGRlclRoYW4zMShkb25lKSB7XG4gICAgLy9sYXp5IHdheSBvZiBjaGVja2luZyB0aGUgdmVyc2lvbiBudW1iZXJcbiAgICAvL2lmIHNlcnZlciBoYXMgYmVlbiBzZXQgd2Uga25vdyBpdCBpcyBhdCBsZWFzdFxuICAgIC8vMy4xICh0b2RvIGFjdHVhbGx5IHBhcnNlIHRoZSB2ZXJzaW9uIHN0cmluZylcbiAgICBpZiAoIXNlcnZlcikge1xuICAgICAgZG9uZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAwMi0yMDE3IFwiTmVvIFRlY2hub2xvZ3ksXCIsXCJcbiAqIE5ldHdvcmsgRW5naW5lIGZvciBPYmplY3RzIGluIEx1bmQgQUIgW2h0dHA6Ly9uZW90ZWNobm9sb2d5LmNvbV1cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBOZW80ai5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxudmFyIG5lbzRqID0gcmVxdWlyZShcIi4uLy4uL2xpYi92MVwiKTtcbnZhciBzaGFyZWROZW80aiA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9zaGFyZWQtbmVvNGpcIikuZGVmYXVsdDtcblxuZGVzY3JpYmUoJ2Zsb2F0aW5nIHBvaW50IHZhbHVlcycsIGZ1bmN0aW9uKCkge1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgZmxvYXQgMS4wICcsIHRlc3RWYWwoIDEgKSApO1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgZmxvYXQgMC4wICcsIHRlc3RWYWwoIDAuMCApICk7XG4gIGl0KCdzaG91bGQgc3VwcG9ydCBwcmV0dHkgYmlnIGZsb2F0ICcsIHRlc3RWYWwoIDMuNDAyODIzNWUrMzggKSApOyAvLyBNYXggMzItYml0XG4gIGl0KCdzaG91bGQgc3VwcG9ydCByZWFsbHkgYmlnIGZsb2F0ICcsIHRlc3RWYWwoIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4ICkgKTsgLy8gTWF4IDY0LWJpdFxuICBpdCgnc2hvdWxkIHN1cHBvcnQgcHJldHR5IHNtYWxsIGZsb2F0ICcsIHRlc3RWYWwoIDEuNGUtNDUgKSApOyAvLyBNaW4gMzItYml0XG4gIGl0KCdzaG91bGQgc3VwcG9ydCByZWFsbHkgc21hbGwgZmxvYXQgJywgdGVzdFZhbCggNC45ZS0zMjQgKSApOyAvLyBNaW4gNjQtYml0XG59KTtcblxuZGVzY3JpYmUoJ2ludGVnZXIgdmFsdWVzJywgZnVuY3Rpb24oKSB7XG4gIGl0KCdzaG91bGQgc3VwcG9ydCBpbnRlZ2VyIDEgJywgdGVzdFZhbCggbmVvNGouaW50KDEpICkgKTtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IGludGVnZXIgMCAnLCB0ZXN0VmFsKCBuZW80ai5pbnQoMCkgKSApO1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgaW50ZWdlciAtMSAnLCB0ZXN0VmFsKCBuZW80ai5pbnQoLTEpICkgKTtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IGludGVnZXIgbGFyZ2VyIHRoYW4gSlMgTnVtYmVycyBjYW4gbW9kZWwnLCB0ZXN0VmFsKCBuZW80ai5pbnQoXCIweDdmZmZmZmZmZmZmZmZmZmZcIikgKSApO1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgaW50ZWdlciBzbWFsbGVyIHRoYW4gSlMgTnVtYmVycyBjYW4gbW9kZWwnLCB0ZXN0VmFsKCBuZW80ai5pbnQoXCIweDgwMDAwMDAwMDAwMDAwMDBcIikgKSApO1xufSk7XG5cbmRlc2NyaWJlKCdib29sZWFuIHZhbHVlcycsIGZ1bmN0aW9uKCkge1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgdHJ1ZSAnLCAgdGVzdFZhbCggdHJ1ZSApICk7XG4gIGl0KCdzaG91bGQgc3VwcG9ydCBmYWxzZSAnLCB0ZXN0VmFsKCBmYWxzZSApICk7XG59KTtcblxuZGVzY3JpYmUoJ3N0cmluZyB2YWx1ZXMnLCBmdW5jdGlvbigpIHtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IGVtcHR5IHN0cmluZyAnLCAgIHRlc3RWYWwoIFwiXCIgKSApO1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgc2ltcGxlIHN0cmluZyAnLCAgdGVzdFZhbCggXCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwiICkgKTtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IGF3ZXNvbWUgc3RyaW5nICcsIHRlc3RWYWwoIFwiQWxsIG1ha3Qgw6V0IFRlbmdpbCwgdsOlciBiZWZyaWFyZS5cIiApICk7XG59KTtcblxuZGVzY3JpYmUoJ2xpc3QgdmFsdWVzJywgZnVuY3Rpb24oKSB7XG4gIGl0KCdzaG91bGQgc3VwcG9ydCBlbXB0eSBsaXN0cyAnLCAgIHRlc3RWYWwoIFtdICkgKTtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IHNwYXJzZSBsaXN0cyAnLCAgIHRlc3RWYWwoIFsgdW5kZWZpbmVkLCA0IF0sIFsgbnVsbCwgNCBdICkgKTtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IGZsb2F0IGxpc3RzICcsICAgdGVzdFZhbCggWyAxLDIsMyBdICkgKTtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IGJvb2xlYW4gbGlzdHMgJywgdGVzdFZhbCggWyB0cnVlLCBmYWxzZSBdICkgKTtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IHN0cmluZyBsaXN0cyAnLCAgdGVzdFZhbCggWyBcIlwiLCBcImhlbGxvIVwiIF0gKSApO1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgbGlzdCBsaXN0cyAnLCAgICB0ZXN0VmFsKCBbIFtdLCBbMSwyLDNdIF0gKSApO1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgbWFwIGxpc3RzICcsICAgICB0ZXN0VmFsKCBbIHt9LCB7YToxMn0gXSApICk7XG59KTtcblxuZGVzY3JpYmUoJ21hcCB2YWx1ZXMnLCBmdW5jdGlvbigpIHtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IGVtcHR5IG1hcHMgJywgdGVzdFZhbCgge30gKSApO1xuICBpdCgnc2hvdWxkIHN1cHBvcnQgYmFzaWMgbWFwcyAnLCB0ZXN0VmFsKCB7YToxLCBiOnt9LCBjOltdLCBkOntlOjF9fSApICk7XG4gIGl0KCdzaG91bGQgc3VwcG9ydCBzcGFyc2UgbWFwcyAnLCB0ZXN0VmFsKCB7Zm9vOiB1bmRlZmluZWQsIGJhcjogbnVsbH0sIHtiYXI6IG51bGx9ICkgKTtcbn0pO1xuXG5kZXNjcmliZSgnbm9kZSB2YWx1ZXMnLCBmdW5jdGlvbigpIHtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IHJldHVybmluZyBub2RlcyAnLCBmdW5jdGlvbihkb25lKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdDovL2xvY2FsaG9zdFwiLCBzaGFyZWROZW80ai5hdXRoVG9rZW4pO1xuICAgIHZhciBzZXNzaW9uID0gZHJpdmVyLnNlc3Npb24oKTtcblxuICAgIC8vIFdoZW5cbiAgICBzZXNzaW9uLnJ1bihcIkNSRUFURSAobjpVc2VyIHtuYW1lOidMaXNhJ30pIFJFVFVSTiBuLCBpZChuKVwiKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICB2YXIgbm9kZSA9IHJlc3VsdC5yZWNvcmRzWzBdLmdldCgnbicpO1xuXG4gICAgICAgIGV4cGVjdCggbm9kZS5wcm9wZXJ0aWVzICkudG9FcXVhbCggeyBuYW1lOlwiTGlzYVwiIH0gKTtcbiAgICAgICAgZXhwZWN0KCBub2RlLmxhYmVscyApLnRvRXF1YWwoIFtcIlVzZXJcIl0gKTtcbiAgICAgICAgLy8gZXhwZWN0KCBub2RlLmlkZW50aXR5ICkudG9FcXVhbCggcnNbMF1bJ2lkKG4pJ10gKTsgLy8gVE9ET1xuICAgICAgICBkcml2ZXIuY2xvc2UoKTtcbiAgICAgICAgZG9uZSgpO1xuXG4gICAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3JlbGF0aW9uc2hpcCB2YWx1ZXMnLCBmdW5jdGlvbigpIHtcbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IHJldHVybmluZyByZWxhdGlvbnNoaXBzJywgZnVuY3Rpb24oZG9uZSkge1xuICAgIC8vIEdpdmVuXG4gICAgdmFyIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RcIiwgc2hhcmVkTmVvNGouYXV0aFRva2VuKTtcbiAgICB2YXIgc2Vzc2lvbiA9IGRyaXZlci5zZXNzaW9uKCk7XG5cbiAgICAvLyBXaGVuXG4gICAgc2Vzc2lvbi5ydW4oXCJDUkVBVEUgKCktW3I6VXNlciB7bmFtZTonTGlzYSd9XS0+KCkgUkVUVVJOIHIsIGlkKHIpXCIpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgIHZhciByZWwgPSByZXN1bHQucmVjb3Jkc1swXS5nZXQoJ3InKTtcblxuICAgICAgICBleHBlY3QoIHJlbC5wcm9wZXJ0aWVzICkudG9FcXVhbCggeyBuYW1lOlwiTGlzYVwiIH0gKTtcbiAgICAgICAgZXhwZWN0KCByZWwudHlwZSApLnRvRXF1YWwoIFwiVXNlclwiICk7XG4gICAgICAgIC8vIGV4cGVjdCggcmVsLmlkZW50aXR5ICkudG9FcXVhbCggcnNbMF1bJ2lkKHIpJ10gKTsgLy8gVE9ET1xuICAgICAgICBkcml2ZXIuY2xvc2UoKTtcbiAgICAgICAgZG9uZSgpO1xuXG4gICAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3BhdGggdmFsdWVzJywgZnVuY3Rpb24oKSB7XG4gIGl0KCdzaG91bGQgc3VwcG9ydCByZXR1cm5pbmcgcGF0aHMnLCBmdW5jdGlvbihkb25lKSB7XG4gICAgLy8gR2l2ZW5cbiAgICB2YXIgZHJpdmVyID0gbmVvNGouZHJpdmVyKFwiYm9sdDovL2xvY2FsaG9zdFwiLCBzaGFyZWROZW80ai5hdXRoVG9rZW4pO1xuICAgIHZhciBzZXNzaW9uID0gZHJpdmVyLnNlc3Npb24oKTtcblxuICAgIC8vIFdoZW5cbiAgICBzZXNzaW9uLnJ1bihcIkNSRUFURSBwPSg6VXNlciB7IG5hbWU6J0xpc2EnIH0pPC1bcjpLTk9XUyB7c2luY2U6MTIzNC4wfV0tKCkgUkVUVVJOIHBcIilcbiAgICAgIC50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICB2YXIgcGF0aCA9IHJlc3VsdC5yZWNvcmRzWzBdLmdldCgncCcpO1xuXG4gICAgICAgIGV4cGVjdCggcGF0aC5zdGFydC5wcm9wZXJ0aWVzICkudG9FcXVhbCggeyBuYW1lOlwiTGlzYVwiIH0gKTtcbiAgICAgICAgZXhwZWN0KCBwYXRoLmVuZC5wcm9wZXJ0aWVzICkudG9FcXVhbCggeyB9ICk7XG5cbiAgICAgICAgLy8gQWNjZXNzaW5nIHBhdGggc2VnbWVudHNcbiAgICAgICAgZXhwZWN0KCBwYXRoLmxlbmd0aCApLnRvRXF1YWwoIDEgKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHNlZ21lbnQgPSBwYXRoLnNlZ21lbnRzW2ldO1xuICAgICAgICAgIC8vIFRoZSBkaXJlY3Rpb24gb2YgdGhlIHBhdGggc2VnbWVudCBnb2VzIGZyb20gbGlzYSB0byB0aGUgYmxhbmsgbm9kZVxuICAgICAgICAgIGV4cGVjdCggc2VnbWVudC5zdGFydC5wcm9wZXJ0aWVzICkudG9FcXVhbCggeyBuYW1lOlwiTGlzYVwiIH0gKTtcbiAgICAgICAgICBleHBlY3QoIHNlZ21lbnQuZW5kLnByb3BlcnRpZXMgKS50b0VxdWFsKCB7IH0gKTtcbiAgICAgICAgICAvLyBXaGljaCBpcyB0aGUgaW52ZXJzZSBvZiB0aGUgcmVsYXRpb25zaGlwIGl0c2VsZiFcbiAgICAgICAgICBleHBlY3QoIHNlZ21lbnQucmVsYXRpb25zaGlwLnByb3BlcnRpZXMgKS50b0VxdWFsKCB7IHNpbmNlOiAxMjM0IH0gKTtcbiAgICAgICAgfVxuICAgICAgICBkcml2ZXIuY2xvc2UoKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7IGNvbnNvbGUubG9nKGVycik7IH0pO1xuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiB0ZXN0VmFsKCB2YWwsIGV4cGVjdGVkICkge1xuICByZXR1cm4gZnVuY3Rpb24oIGRvbmUgKSB7XG4gICAgdmFyIGRyaXZlciA9IG5lbzRqLmRyaXZlcihcImJvbHQ6Ly9sb2NhbGhvc3RcIiwgc2hhcmVkTmVvNGouYXV0aFRva2VuKTtcbiAgICB2YXIgc2Vzc2lvbiA9IGRyaXZlci5zZXNzaW9uKCk7XG5cbiAgICBzZXNzaW9uLnJ1bihcIlJFVFVSTiB7dmFsfSBhcyB2XCIsIHt2YWw6IHZhbH0pXG4gICAgICAudGhlbiggZnVuY3Rpb24oIHJlc3VsdCApIHtcbiAgICAgICAgZXhwZWN0KCByZXN1bHQucmVjb3Jkc1swXS5nZXQoJ3YnKSApLnRvRXF1YWwoIGV4cGVjdGVkIHx8IHZhbCApO1xuICAgICAgICBkcml2ZXIuY2xvc2UoKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7IGNvbnNvbGUubG9nKGVycik7IH0pO1xuICB9XG59XG4iXX0= diff --git a/lib/v1/driver.js b/lib/v1/driver.js index 1e2ded7ab..0614f0edf 100644 --- a/lib/v1/driver.js +++ b/lib/v1/driver.js @@ -103,7 +103,13 @@ var Driver = function () { this._token = token; this._config = config; this._pool = new _pool2.default(this._createConnection.bind(this), this._destroyConnection.bind(this), Driver._validateConnection.bind(this), config.connectionPoolSize); - this._connectionProvider = this._createConnectionProvider(url, this._pool, this._driverOnErrorCallback.bind(this)); + + /** + * Reference to the connection provider. Initialized lazily by {@link _getOrCreateConnectionProvider}. + * @type {ConnectionProvider} + * @private + */ + this._connectionProvider = null; } /** @@ -117,7 +123,7 @@ var Driver = function () { key: '_createConnection', value: function _createConnection(url, release) { var sessionId = this._sessionIdGenerator++; - var conn = (0, _connector.connect)(url, this._config); + var conn = (0, _connector.connect)(url, this._config, this._connectionErrorCode()); var streamObserver = new _ConnectionStreamObserver(this, conn); conn.initialize(this._userAgent, this._token, streamObserver); conn._id = sessionId; @@ -170,24 +176,43 @@ var Driver = function () { key: 'session', value: function session(mode, bookmark) { var sessionMode = Driver._validateSessionMode(mode); - return this._createSession(sessionMode, this._connectionProvider, bookmark, this._config); + var connectionProvider = this._getOrCreateConnectionProvider(); + return this._createSession(sessionMode, connectionProvider, bookmark, this._config); } }, { key: '_createConnectionProvider', - //Extension point + // Extension point value: function _createConnectionProvider(address, connectionPool, driverOnErrorCallback) { return new _connectionProviders.DirectConnectionProvider(address, connectionPool, driverOnErrorCallback); } - //Extension point + // Extension point }, { key: '_createSession', value: function _createSession(mode, connectionProvider, bookmark, config) { return new _session2.default(mode, connectionProvider, bookmark, config); } + + // Extension point + + }, { + key: '_connectionErrorCode', + value: function _connectionErrorCode() { + // connection errors might result in different error codes depending on the driver + return _error.SERVICE_UNAVAILABLE; + } + }, { + key: '_getOrCreateConnectionProvider', + value: function _getOrCreateConnectionProvider() { + if (!this._connectionProvider) { + var driverOnErrorCallback = this._driverOnErrorCallback.bind(this); + this._connectionProvider = this._createConnectionProvider(this._url, this._pool, driverOnErrorCallback); + } + return this._connectionProvider; + } }, { key: '_driverOnErrorCallback', value: function _driverOnErrorCallback(error) { @@ -267,8 +292,9 @@ var _ConnectionStreamObserver = function (_StreamObserver) { if (this._driver.onCompleted) { this._driver.onCompleted(message); } - if (this._conn && message && message.server) { - this._conn.setServerVersion(message.server); + + if (this._observer && this._observer.onComplete) { + this._observer.onCompleted(message); } } }]); diff --git a/lib/v1/index.js b/lib/v1/index.js index 641df3a5b..2408a9798 100644 --- a/lib/v1/index.js +++ b/lib/v1/index.js @@ -33,51 +33,59 @@ var _version = require('../version'); var _version2 = _interopRequireDefault(_version); -var _connector = require('./internal/connector'); - var _util = require('./internal/util'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + var auth = { basic: function basic(username, password) { var realm = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; if (realm) { - return { scheme: "basic", principal: username, credentials: password, realm: realm }; + return { scheme: 'basic', principal: username, credentials: password, realm: realm }; } else { - return { scheme: "basic", principal: username, credentials: password }; + return { scheme: 'basic', principal: username, credentials: password }; } }, + kerberos: function kerberos(base64EncodedTicket) { + return { + scheme: 'kerberos', + principal: '', // This empty string is required for backwards compatibility. + credentials: base64EncodedTicket + }; + }, custom: function custom(principal, credentials, realm, scheme) { var parameters = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined; if (parameters) { - return { scheme: scheme, principal: principal, credentials: credentials, realm: realm, - parameters: parameters }; + return { + scheme: scheme, principal: principal, credentials: credentials, realm: realm, + parameters: parameters + }; } else { return { scheme: scheme, principal: principal, credentials: credentials, realm: realm }; } } -}; /** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - +}; var USER_AGENT = "neo4j-javascript/" + _version2.default; /** @@ -152,13 +160,17 @@ function driver(url, authToken) { var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; (0, _util.assertString)(url, 'Bolt URL'); - var scheme = (0, _connector.parseScheme)(url); - if (scheme === "bolt+routing://") { - return new _routingDriver2.default((0, _connector.parseUrl)(url), USER_AGENT, authToken, config); - } else if (scheme === "bolt://") { - return new _driver.Driver((0, _connector.parseUrl)(url), USER_AGENT, authToken, config); + var scheme = (0, _util.parseScheme)(url); + var routingContext = (0, _util.parseRoutingContext)(url); + if (scheme === 'bolt+routing://') { + return new _routingDriver2.default((0, _util.parseUrl)(url), routingContext, USER_AGENT, authToken, config); + } else if (scheme === 'bolt://') { + if (!(0, _util.isEmptyObjectOrNull)(routingContext)) { + throw new Error('Parameters are not supported with scheme \'bolt\'. Given URL: \'' + url + '\''); + } + return new _driver.Driver((0, _util.parseUrl)(url), USER_AGENT, authToken, config); } else { - throw new Error("Unknown scheme: " + scheme); + throw new Error('Unknown scheme: ' + scheme); } } diff --git a/lib/v1/internal/ch-config.js b/lib/v1/internal/ch-config.js new file mode 100644 index 000000000..7a66be88b --- /dev/null +++ b/lib/v1/internal/ch-config.js @@ -0,0 +1,87 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require('babel-runtime/helpers/createClass'); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _features = require('./features'); + +var _features2 = _interopRequireDefault(_features); + +var _error = require('../error'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var ChannelConfig = function () { + function ChannelConfig(host, port, driverConfig, connectionErrorCode) { + (0, _classCallCheck3.default)(this, ChannelConfig); + + this.host = host; + this.port = port; + this.encrypted = ChannelConfig._extractEncrypted(driverConfig); + this.trust = ChannelConfig._extractTrust(driverConfig); + this.trustedCertificates = ChannelConfig._extractTrustedCertificates(driverConfig); + this.knownHostsPath = ChannelConfig._extractKnownHostsPath(driverConfig); + this.connectionErrorCode = connectionErrorCode || _error.SERVICE_UNAVAILABLE; + } + + (0, _createClass3.default)(ChannelConfig, null, [{ + key: '_extractEncrypted', + value: function _extractEncrypted(driverConfig) { + // check if encryption was configured by the user, use explicit null check because we permit boolean value + var encryptionConfigured = driverConfig.encrypted == null; + // default to using encryption if trust-all-certificates is available + return encryptionConfigured ? (0, _features2.default)('trust_all_certificates') : driverConfig.encrypted; + } + }, { + key: '_extractTrust', + value: function _extractTrust(driverConfig) { + if (driverConfig.trust) { + return driverConfig.trust; + } + // default to using TRUST_ALL_CERTIFICATES if it is available + return (0, _features2.default)('trust_all_certificates') ? 'TRUST_ALL_CERTIFICATES' : 'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES'; + } + }, { + key: '_extractTrustedCertificates', + value: function _extractTrustedCertificates(driverConfig) { + return driverConfig.trustedCertificates || []; + } + }, { + key: '_extractKnownHostsPath', + value: function _extractKnownHostsPath(driverConfig) { + return driverConfig.knownHosts || null; + } + }]); + return ChannelConfig; +}(); + +exports.default = ChannelConfig; +; \ No newline at end of file diff --git a/lib/v1/internal/ch-dummy.js b/lib/v1/internal/ch-dummy.js index 85efd78b3..d337de34c 100644 --- a/lib/v1/internal/ch-dummy.js +++ b/lib/v1/internal/ch-dummy.js @@ -42,7 +42,12 @@ var observer = { */ var DummyChannel = function () { - function DummyChannel(opts) { + + /** + * @constructor + * @param {ChannelConfig} config - configuration for the new channel. + */ + function DummyChannel(config) { (0, _classCallCheck3.default)(this, DummyChannel); this.written = []; diff --git a/lib/v1/internal/ch-node.js b/lib/v1/internal/ch-node.js index c55e266cd..b53ecc45f 100644 --- a/lib/v1/internal/ch-node.js +++ b/lib/v1/internal/ch-node.js @@ -1,40 +1,40 @@ -"use strict"; +'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var _createClass2 = require("babel-runtime/helpers/createClass"); +var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); -var _net = require("net"); +var _net = require('net'); var _net2 = _interopRequireDefault(_net); -var _tls = require("tls"); +var _tls = require('tls'); var _tls2 = _interopRequireDefault(_tls); -var _fs = require("fs"); +var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); -var _path = require("path"); +var _path = require('path'); var _path2 = _interopRequireDefault(_path); -var _os = require("os"); +var _os = require('os'); -var _buf = require("./buf"); +var _buf = require('./buf'); -var _util = require("./util"); +var _util = require('./util'); -var _error = require("./../error"); +var _error = require('./../error'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -138,18 +138,18 @@ var TrustStrategy = { /** * @deprecated Since version 1.0. Will be deleted in a future version. {@link #TRUST_CUSTOM_CA_SIGNED_CERTIFICATES}. */ - TRUST_SIGNED_CERTIFICATES: function TRUST_SIGNED_CERTIFICATES(opts, onSuccess, onFailure) { + TRUST_SIGNED_CERTIFICATES: function TRUST_SIGNED_CERTIFICATES(config, onSuccess, onFailure) { console.log("`TRUST_SIGNED_CERTIFICATES` has been deprecated as option and will be removed in a future version of " + "the driver. Please use `TRUST_CUSTOM_CA_SIGNED_CERTIFICATES` instead."); - return TrustStrategy.TRUST_CUSTOM_CA_SIGNED_CERTIFICATES(opts, onSuccess, onFailure); + return TrustStrategy.TRUST_CUSTOM_CA_SIGNED_CERTIFICATES(config, onSuccess, onFailure); }, - TRUST_CUSTOM_CA_SIGNED_CERTIFICATES: function TRUST_CUSTOM_CA_SIGNED_CERTIFICATES(opts, onSuccess, onFailure) { - if (!opts.trustedCertificates || opts.trustedCertificates.length == 0) { + TRUST_CUSTOM_CA_SIGNED_CERTIFICATES: function TRUST_CUSTOM_CA_SIGNED_CERTIFICATES(config, onSuccess, onFailure) { + if (!config.trustedCertificates || config.trustedCertificates.length === 0) { onFailure((0, _error.newError)("You are using TRUST_CUSTOM_CA_SIGNED_CERTIFICATES as the method " + "to verify trust for encrypted connections, but have not configured any " + "trustedCertificates. You must specify the path to at least one trusted " + "X.509 certificate for this to work. Two other alternatives is to use " + "TRUST_ALL_CERTIFICATES or to disable encryption by setting encrypted=\"" + _util.ENCRYPTION_OFF + "\"" + "in your driver configuration.")); return; } var tlsOpts = { - ca: opts.trustedCertificates.map(function (f) { + ca: config.trustedCertificates.map(function (f) { return _fs2.default.readFileSync(f); }), // Because we manually check for this in the connect callback, to give @@ -157,7 +157,7 @@ var TrustStrategy = { rejectUnauthorized: false }; - var socket = _tls2.default.connect(opts.port, opts.host, tlsOpts, function () { + var socket = _tls2.default.connect(config.port, config.host, tlsOpts, function () { if (!socket.authorized) { onFailure((0, _error.newError)("Server certificate is not trusted. If you trust the database you are connecting to, add" + " the signing certificate, or the server certificate, to the list of certificates trusted by this driver" + " using `neo4j.v1.driver(.., { trustedCertificates:['path/to/certificate.crt']}). This " + " is a security measure to protect against man-in-the-middle attacks. If you are just trying " + " Neo4j out and are not concerned about encryption, simply disable it using `encrypted=\"" + _util.ENCRYPTION_OFF + "\"`" + " in the driver options. Socket responded with: " + socket.authorizationError)); } else { @@ -167,14 +167,14 @@ var TrustStrategy = { socket.on('error', onFailure); return socket; }, - TRUST_SYSTEM_CA_SIGNED_CERTIFICATES: function TRUST_SYSTEM_CA_SIGNED_CERTIFICATES(opts, onSuccess, onFailure) { + TRUST_SYSTEM_CA_SIGNED_CERTIFICATES: function TRUST_SYSTEM_CA_SIGNED_CERTIFICATES(config, onSuccess, onFailure) { var tlsOpts = { // Because we manually check for this in the connect callback, to give // a more helpful error to the user rejectUnauthorized: false }; - var socket = _tls2.default.connect(opts.port, opts.host, tlsOpts, function () { + var socket = _tls2.default.connect(config.port, config.host, tlsOpts, function () { if (!socket.authorized) { onFailure((0, _error.newError)("Server certificate is not trusted. If you trust the database you are connecting to, use " + "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES and add" + " the signing certificate, or the server certificate, to the list of certificates trusted by this driver" + " using `neo4j.v1.driver(.., { trustedCertificates:['path/to/certificate.crt']}). This " + " is a security measure to protect against man-in-the-middle attacks. If you are just trying " + " Neo4j out and are not concerned about encryption, simply disable it using `encrypted=\"" + _util.ENCRYPTION_OFF + "\"`" + " in the driver options. Socket responded with: " + socket.authorizationError)); } else { @@ -187,7 +187,7 @@ var TrustStrategy = { /** * @deprecated in 1.1 in favour of {@link #TRUST_ALL_CERTIFICATES}. Will be deleted in a future version. */ - TRUST_ON_FIRST_USE: function TRUST_ON_FIRST_USE(opts, onSuccess, onFailure) { + TRUST_ON_FIRST_USE: function TRUST_ON_FIRST_USE(config, onSuccess, onFailure) { console.log("`TRUST_ON_FIRST_USE` has been deprecated as option and will be removed in a future version of " + "the driver. Please use `TRUST_ALL_CERTIFICATES` instead."); var tlsOpts = { @@ -195,7 +195,7 @@ var TrustStrategy = { rejectUnauthorized: false }; - var socket = _tls2.default.connect(opts.port, opts.host, tlsOpts, function () { + var socket = _tls2.default.connect(config.port, config.host, tlsOpts, function () { var serverCert = socket.getPeerCertificate( /*raw=*/true); if (!serverCert.raw) { @@ -208,8 +208,8 @@ var TrustStrategy = { } var serverFingerprint = require('crypto').createHash('sha512').update(serverCert.raw).digest("hex"); - var knownHostsPath = opts.knownHosts || _path2.default.join(userHome(), ".neo4j", "known_hosts"); - var serverId = opts.host + ":" + opts.port; + var knownHostsPath = config.knownHostsPath || _path2.default.join(userHome(), ".neo4j", "known_hosts"); + var serverId = config.host + ":" + config.port; loadFingerprint(serverId, knownHostsPath, function (knownFingerprint) { if (knownFingerprint === serverFingerprint) { @@ -230,11 +230,11 @@ var TrustStrategy = { return socket; }, - TRUST_ALL_CERTIFICATES: function TRUST_ALL_CERTIFICATES(opts, onSuccess, onFailure) { + TRUST_ALL_CERTIFICATES: function TRUST_ALL_CERTIFICATES(config, onSuccess, onFailure) { var tlsOpts = { rejectUnauthorized: false }; - var socket = _tls2.default.connect(opts.port, opts.host, tlsOpts, function () { + var socket = _tls2.default.connect(config.port, config.host, tlsOpts, function () { var certificate = socket.getPeerCertificate(); if ((0, _util.isEmptyObjectOrNull)(certificate)) { onFailure((0, _error.newError)("Secure connection was successful but server did not return any valid " + "certificates. Such connection can not be trusted. If you are just trying " + " Neo4j out and are not concerned about encryption, simply disable it using " + "`encrypted=\"" + _util.ENCRYPTION_OFF + "\"` in the driver options. " + "Socket responded with: " + socket.authorizationError)); @@ -247,20 +247,27 @@ var TrustStrategy = { } }; -function connect(opts, onSuccess) { +/** + * Connect using node socket. + * @param {ChannelConfig} config - configuration of this channel. + * @param {function} onSuccess - callback to execute on connection success. + * @param {function} onFailure - callback to execute on connection failure. + * @return {*} socket connection. + */ +function connect(config, onSuccess) { var onFailure = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () { return null; }; //still allow boolean for backwards compatibility - if (opts.encrypted === false || opts.encrypted === _util.ENCRYPTION_OFF) { - var conn = _net2.default.connect(opts.port, opts.host, onSuccess); + if (config.encrypted === false || config.encrypted === _util.ENCRYPTION_OFF) { + var conn = _net2.default.connect(config.port, config.host, onSuccess); conn.on('error', onFailure); return conn; - } else if (TrustStrategy[opts.trust]) { - return TrustStrategy[opts.trust](opts, onSuccess, onFailure); + } else if (TrustStrategy[config.trust]) { + return TrustStrategy[config.trust](config, onSuccess, onFailure); } else { - onFailure((0, _error.newError)("Unknown trust strategy: " + opts.trust + ". Please use either " + "trust:'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES' or trust:'TRUST_ALL_CERTIFICATES' in your driver " + "configuration. Alternatively, you can disable encryption by setting " + "`encrypted:\"" + _util.ENCRYPTION_OFF + "\"`. There is no mechanism to use encryption without trust verification, " + "because this incurs the overhead of encryption without improving security. If " + "the driver does not verify that the peer it is connected to is really Neo4j, it " + "is very easy for an attacker to bypass the encryption by pretending to be Neo4j.")); + onFailure((0, _error.newError)("Unknown trust strategy: " + config.trust + ". Please use either " + "trust:'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES' or trust:'TRUST_ALL_CERTIFICATES' in your driver " + "configuration. Alternatively, you can disable encryption by setting " + "`encrypted:\"" + _util.ENCRYPTION_OFF + "\"`. There is no mechanism to use encryption without trust verification, " + "because this incurs the overhead of encryption without improving security. If " + "the driver does not verify that the peer it is connected to is really Neo4j, it " + "is very easy for an attacker to bypass the encryption by pretending to be Neo4j.")); } } @@ -274,11 +281,9 @@ var NodeChannel = function () { /** * Create new instance - * @param {Object} opts - Options object - * @param {string} opts.host - The host, including protocol to connect to. - * @param {Integer} opts.port - The port to use. + * @param {ChannelConfig} config - configuration for this channel. */ - function NodeChannel(opts) { + function NodeChannel(config) { (0, _classCallCheck3.default)(this, NodeChannel); var self = this; @@ -290,9 +295,10 @@ var NodeChannel = function () { this._error = null; this._handleConnectionError = this._handleConnectionError.bind(this); this._handleConnectionTerminated = this._handleConnectionTerminated.bind(this); + this._connectionErrorCode = config.connectionErrorCode; - this._encrypted = opts.encrypted; - this._conn = connect(opts, function () { + this._encrypted = config.encrypted; + this._conn = connect(config, function () { if (!self._open) { return; } @@ -316,24 +322,24 @@ var NodeChannel = function () { } (0, _createClass3.default)(NodeChannel, [{ - key: "_handleConnectionError", + key: '_handleConnectionError', value: function _handleConnectionError(err) { var msg = err.message || 'Failed to connect to server'; - this._error = (0, _error.newError)(msg, _error.SESSION_EXPIRED); + this._error = (0, _error.newError)(msg, this._connectionErrorCode); if (this.onerror) { this.onerror(this._error); } } }, { - key: "_handleConnectionTerminated", + key: '_handleConnectionTerminated', value: function _handleConnectionTerminated() { - this._error = (0, _error.newError)('Connection was closed by server', _error.SESSION_EXPIRED); + this._error = (0, _error.newError)('Connection was closed by server', this._connectionErrorCode); if (this.onerror) { this.onerror(this._error); } } }, { - key: "isEncrypted", + key: 'isEncrypted', value: function isEncrypted() { return this._encrypted; } @@ -344,7 +350,7 @@ var NodeChannel = function () { */ }, { - key: "write", + key: 'write', value: function write(buffer) { // If there is a pending queue, push this on that queue. This means // we are not yet connected, so we queue things locally. @@ -364,7 +370,7 @@ var NodeChannel = function () { */ }, { - key: "close", + key: 'close', value: function close() { var cb = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () { return null; diff --git a/lib/v1/internal/ch-websocket.js b/lib/v1/internal/ch-websocket.js index cf499f47a..dfec7c8f6 100644 --- a/lib/v1/internal/ch-websocket.js +++ b/lib/v1/internal/ch-websocket.js @@ -28,11 +28,9 @@ var WebSocketChannel = function () { /** * Create new instance - * @param {Object} opts - Options object - * @param {string} opts.host - The host, including protocol to connect to. - * @param {Integer} opts.port - The port to use. + * @param {ChannelConfig} config - configuration for this channel. */ - function WebSocketChannel(opts) { + function WebSocketChannel(config) { (0, _classCallCheck3.default)(this, WebSocketChannel); @@ -40,20 +38,21 @@ var WebSocketChannel = function () { this._pending = []; this._error = null; this._handleConnectionError = this._handleConnectionError.bind(this); + this._connectionErrorCode = config.connectionErrorCode; - this._encrypted = opts.encrypted; + this._encrypted = config.encrypted; var scheme = "ws"; //Allow boolean for backwards compatibility - if (opts.encrypted === true || opts.encrypted === _util.ENCRYPTION_ON) { - if (!opts.trust || opts.trust === "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES") { + if (config.encrypted === true || config.encrypted === _util.ENCRYPTION_ON) { + if (!config.trust || config.trust === 'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES') { scheme = "wss"; } else { - this._error = (0, _error.newError)("The browser version of this driver only supports one trust " + "strategy, 'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES'. " + opts.trust + " is not supported. Please " + "either use TRUST_CUSTOM_CA_SIGNED_CERTIFICATES or disable encryption by setting " + "`encrypted:\"" + _util.ENCRYPTION_OFF + "\"` in the driver configuration."); + this._error = (0, _error.newError)("The browser version of this driver only supports one trust " + 'strategy, \'TRUST_CUSTOM_CA_SIGNED_CERTIFICATES\'. ' + config.trust + ' is not supported. Please ' + "either use TRUST_CUSTOM_CA_SIGNED_CERTIFICATES or disable encryption by setting " + "`encrypted:\"" + _util.ENCRYPTION_OFF + "\"` in the driver configuration."); return; } } - this._url = scheme + "://" + opts.host + ":" + opts.port; + this._url = scheme + '://' + config.host + ':' + config.port; this._ws = new WebSocket(this._url); this._ws.binaryType = "arraybuffer"; @@ -89,7 +88,7 @@ var WebSocketChannel = function () { // onerror triggers on websocket close as well.. don't get me started. if (this._open) { // http://stackoverflow.com/questions/25779831/how-to-catch-websocket-connection-to-ws-xxxnn-failed-connection-closed-be - this._error = (0, _error.newError)("WebSocket connection failure. Due to security " + "constraints in your web browser, the reason for the failure is not available " + "to this Neo4j Driver. Please use your browsers development console to determine " + "the root cause of the failure. Common reasons include the database being " + "unavailable, using the wrong connection URL or temporary network problems. " + "If you have enabled encryption, ensure your browser is configured to trust the " + "certificate Neo4j is configured to use. WebSocket `readyState` is: " + this._ws.readyState); + this._error = (0, _error.newError)("WebSocket connection failure. Due to security " + "constraints in your web browser, the reason for the failure is not available " + "to this Neo4j Driver. Please use your browsers development console to determine " + "the root cause of the failure. Common reasons include the database being " + "unavailable, using the wrong connection URL or temporary network problems. " + "If you have enabled encryption, ensure your browser is configured to trust the " + "certificate Neo4j is configured to use. WebSocket `readyState` is: " + this._ws.readyState, this._connectionErrorCode); if (this.onerror) { this.onerror(this._error); } diff --git a/lib/v1/internal/connection-providers.js b/lib/v1/internal/connection-providers.js index 6f2d0160a..d6ad21e1f 100644 --- a/lib/v1/internal/connection-providers.js +++ b/lib/v1/internal/connection-providers.js @@ -55,26 +55,11 @@ var _features2 = _interopRequireDefault(_features); var _hostNameResolvers = require('./host-name-resolvers'); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var _routingUtil = require('./routing-util'); + +var _routingUtil2 = _interopRequireDefault(_routingUtil); -/** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var ConnectionProvider = function () { function ConnectionProvider() { @@ -99,7 +84,24 @@ var ConnectionProvider = function () { } }]); return ConnectionProvider; -}(); +}(); /** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ var DirectConnectionProvider = exports.DirectConnectionProvider = function (_ConnectionProvider) { (0, _inherits3.default)(DirectConnectionProvider, _ConnectionProvider); @@ -129,32 +131,33 @@ var DirectConnectionProvider = exports.DirectConnectionProvider = function (_Con var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { (0, _inherits3.default)(LoadBalancer, _ConnectionProvider2); - function LoadBalancer(address, connectionPool, driverOnErrorCallback) { + function LoadBalancer(address, routingContext, connectionPool, driverOnErrorCallback) { (0, _classCallCheck3.default)(this, LoadBalancer); var _this2 = (0, _possibleConstructorReturn3.default)(this, (LoadBalancer.__proto__ || (0, _getPrototypeOf2.default)(LoadBalancer)).call(this)); _this2._seedRouter = address; _this2._routingTable = new _routingTable2.default(new _roundRobinArray2.default([_this2._seedRouter])); - _this2._rediscovery = new _rediscovery2.default(); + _this2._rediscovery = new _rediscovery2.default(new _routingUtil2.default(routingContext)); _this2._connectionPool = connectionPool; _this2._driverOnErrorCallback = driverOnErrorCallback; _this2._hostNameResolver = LoadBalancer._createHostNameResolver(); + _this2._useSeedRouter = false; return _this2; } (0, _createClass3.default)(LoadBalancer, [{ key: 'acquireConnection', - value: function acquireConnection(mode) { + value: function acquireConnection(accessMode) { var _this3 = this; - var connectionPromise = this._freshRoutingTable().then(function (routingTable) { - if (mode === _driver.READ) { + var connectionPromise = this._freshRoutingTable(accessMode).then(function (routingTable) { + if (accessMode === _driver.READ) { return _this3._acquireConnectionToServer(routingTable.readers, 'read'); - } else if (mode === _driver.WRITE) { + } else if (accessMode === _driver.WRITE) { return _this3._acquireConnectionToServer(routingTable.writers, 'write'); } else { - throw (0, _error.newError)('Illegal mode ' + mode); + throw (0, _error.newError)('Illegal mode ' + accessMode); } }); return this._withAdditionalOnErrorCallback(connectionPromise, this._driverOnErrorCallback); @@ -175,16 +178,16 @@ var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { value: function _acquireConnectionToServer(serversRoundRobinArray, serverName) { var address = serversRoundRobinArray.next(); if (!address) { - return _promise2.default.reject((0, _error.newError)('No ' + serverName + ' servers available', _error.SESSION_EXPIRED)); + return _promise2.default.reject((0, _error.newError)('Failed to obtain connection towards ' + serverName + ' server. Known routing table is: ' + this._routingTable, _error.SESSION_EXPIRED)); } return this._connectionPool.acquire(address); } }, { key: '_freshRoutingTable', - value: function _freshRoutingTable() { + value: function _freshRoutingTable(accessMode) { var currentRoutingTable = this._routingTable; - if (!currentRoutingTable.isStale()) { + if (!currentRoutingTable.isStaleFor(accessMode)) { return _promise2.default.resolve(currentRoutingTable); } return this._refreshRoutingTable(currentRoutingTable); @@ -192,60 +195,90 @@ var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { }, { key: '_refreshRoutingTable', value: function _refreshRoutingTable(currentRoutingTable) { - var _this4 = this; - var knownRouters = currentRoutingTable.routers.toArray(); - return this._fetchNewRoutingTable(knownRouters, currentRoutingTable).then(function (newRoutingTable) { - if (LoadBalancer._isValidRoutingTable(newRoutingTable)) { - // one of the known routers returned a valid routing table - use it + if (this._useSeedRouter) { + return this._fetchRoutingTableFromSeedRouterFallbackToKnownRouters(knownRouters, currentRoutingTable); + } + return this._fetchRoutingTableFromKnownRoutersFallbackToSeedRouter(knownRouters, currentRoutingTable); + } + }, { + key: '_fetchRoutingTableFromSeedRouterFallbackToKnownRouters', + value: function _fetchRoutingTableFromSeedRouterFallbackToKnownRouters(knownRouters, currentRoutingTable) { + var _this4 = this; + + // we start with seed router, no routers were probed before + var seenRouters = []; + return this._fetchRoutingTableUsingSeedRouter(seenRouters, this._seedRouter).then(function (newRoutingTable) { + if (newRoutingTable) { + _this4._useSeedRouter = false; return newRoutingTable; } - if (!newRoutingTable) { - // returned routing table was undefined, this means a connection error happened and the last known - // router did not return a valid routing table, so we need to forget it - var lastRouterIndex = knownRouters.length - 1; - LoadBalancer._forgetRouter(currentRoutingTable, knownRouters, lastRouterIndex); + // seed router did not return a valid routing table - try to use other known routers + return _this4._fetchRoutingTableUsingKnownRouters(knownRouters, currentRoutingTable); + }).then(function (newRoutingTable) { + _this4._applyRoutingTableIfPossible(newRoutingTable); + return newRoutingTable; + }); + } + }, { + key: '_fetchRoutingTableFromKnownRoutersFallbackToSeedRouter', + value: function _fetchRoutingTableFromKnownRoutersFallbackToSeedRouter(knownRouters, currentRoutingTable) { + var _this5 = this; + + return this._fetchRoutingTableUsingKnownRouters(knownRouters, currentRoutingTable).then(function (newRoutingTable) { + if (newRoutingTable) { + return newRoutingTable; } // none of the known routers returned a valid routing table - try to use seed router address for rediscovery - return _this4._fetchNewRoutingTableUsingSeedRouterAddress(knownRouters, _this4._seedRouter); + return _this5._fetchRoutingTableUsingSeedRouter(knownRouters, _this5._seedRouter); }).then(function (newRoutingTable) { - if (LoadBalancer._isValidRoutingTable(newRoutingTable)) { - _this4._updateRoutingTable(newRoutingTable); + _this5._applyRoutingTableIfPossible(newRoutingTable); + return newRoutingTable; + }); + } + }, { + key: '_fetchRoutingTableUsingKnownRouters', + value: function _fetchRoutingTableUsingKnownRouters(knownRouters, currentRoutingTable) { + return this._fetchRoutingTable(knownRouters, currentRoutingTable).then(function (newRoutingTable) { + if (newRoutingTable) { + // one of the known routers returned a valid routing table - use it return newRoutingTable; } - // none of the existing routers returned valid routing table, throw exception - throw (0, _error.newError)('Could not perform discovery. No routing servers available.', _error.SERVICE_UNAVAILABLE); + // returned routing table was undefined, this means a connection error happened and the last known + // router did not return a valid routing table, so we need to forget it + var lastRouterIndex = knownRouters.length - 1; + LoadBalancer._forgetRouter(currentRoutingTable, knownRouters, lastRouterIndex); + + return null; }); } }, { - key: '_fetchNewRoutingTableUsingSeedRouterAddress', - value: function _fetchNewRoutingTableUsingSeedRouterAddress(knownRouters, seedRouter) { - var _this5 = this; + key: '_fetchRoutingTableUsingSeedRouter', + value: function _fetchRoutingTableUsingSeedRouter(seenRouters, seedRouter) { + var _this6 = this; return this._hostNameResolver.resolve(seedRouter).then(function (resolvedRouterAddresses) { // filter out all addresses that we've already tried var newAddresses = resolvedRouterAddresses.filter(function (address) { - return knownRouters.indexOf(address) < 0; + return seenRouters.indexOf(address) < 0; }); - return _this5._fetchNewRoutingTable(newAddresses, null); + return _this6._fetchRoutingTable(newAddresses, null); }); } }, { - key: '_fetchNewRoutingTable', - value: function _fetchNewRoutingTable(routerAddresses, routingTable) { - var _this6 = this; + key: '_fetchRoutingTable', + value: function _fetchRoutingTable(routerAddresses, routingTable) { + var _this7 = this; return routerAddresses.reduce(function (refreshedTablePromise, currentRouter, currentIndex) { return refreshedTablePromise.then(function (newRoutingTable) { if (newRoutingTable) { - if (!newRoutingTable.writers.isEmpty()) { - // valid routing table was fetched - just return it, try next router otherwise - return newRoutingTable; - } + // valid routing table was fetched - just return it, try next router otherwise + return newRoutingTable; } else { // returned routing table was undefined, this means a connection error happened and we need to forget the // previous router and try the next one @@ -254,8 +287,8 @@ var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { } // try next router - var session = _this6._createSessionForRediscovery(currentRouter); - return _this6._rediscovery.lookupRoutingTableOnRouter(session, currentRouter); + var session = _this7._createSessionForRediscovery(currentRouter); + return _this7._rediscovery.lookupRoutingTableOnRouter(session, currentRouter); }); }, _promise2.default.resolve(null)); } @@ -263,32 +296,45 @@ var LoadBalancer = exports.LoadBalancer = function (_ConnectionProvider2) { key: '_createSessionForRediscovery', value: function _createSessionForRediscovery(routerAddress) { var connection = this._connectionPool.acquire(routerAddress); - var connectionPromise = _promise2.default.resolve(connection); - var connectionProvider = new SingleConnectionProvider(connectionPromise); + // initialized connection is required for routing procedure call + // server version needs to be known to decide which routing procedure to use + var initializedConnectionPromise = connection.initializationCompleted(); + var connectionProvider = new SingleConnectionProvider(initializedConnectionPromise); return new _session2.default(_driver.READ, connectionProvider); } + }, { + key: '_applyRoutingTableIfPossible', + value: function _applyRoutingTableIfPossible(newRoutingTable) { + if (!newRoutingTable) { + // none of routing servers returned valid routing table, throw exception + throw (0, _error.newError)('Could not perform discovery. No routing servers available. Known routing table: ' + this._routingTable, _error.SERVICE_UNAVAILABLE); + } + + if (newRoutingTable.writers.isEmpty()) { + // use seed router next time. this is important when cluster is partitioned. it tries to make sure driver + // does not always get routing table without writers because it talks exclusively to a minority partition + this._useSeedRouter = true; + } + + this._updateRoutingTable(newRoutingTable); + } }, { key: '_updateRoutingTable', value: function _updateRoutingTable(newRoutingTable) { - var _this7 = this; + var _this8 = this; var currentRoutingTable = this._routingTable; // close old connections to servers not present in the new routing table var staleServers = currentRoutingTable.serversDiff(newRoutingTable); staleServers.forEach(function (server) { - return _this7._connectionPool.purge(server); + return _this8._connectionPool.purge(server); }); // make this driver instance aware of the new table this._routingTable = newRoutingTable; } }], [{ - key: '_isValidRoutingTable', - value: function _isValidRoutingTable(routingTable) { - return routingTable && !routingTable.writers.isEmpty(); - } - }, { key: '_forgetRouter', value: function _forgetRouter(routingTable, routersArray, routerIndex) { var address = routersArray[routerIndex]; @@ -314,10 +360,10 @@ var SingleConnectionProvider = exports.SingleConnectionProvider = function (_Con function SingleConnectionProvider(connectionPromise) { (0, _classCallCheck3.default)(this, SingleConnectionProvider); - var _this8 = (0, _possibleConstructorReturn3.default)(this, (SingleConnectionProvider.__proto__ || (0, _getPrototypeOf2.default)(SingleConnectionProvider)).call(this)); + var _this9 = (0, _possibleConstructorReturn3.default)(this, (SingleConnectionProvider.__proto__ || (0, _getPrototypeOf2.default)(SingleConnectionProvider)).call(this)); - _this8._connectionPromise = connectionPromise; - return _this8; + _this9._connectionPromise = connectionPromise; + return _this9; } (0, _createClass3.default)(SingleConnectionProvider, [{ diff --git a/lib/v1/internal/connector.js b/lib/v1/internal/connector.js index 0bc7a3ae7..2f430040b 100644 --- a/lib/v1/internal/connector.js +++ b/lib/v1/internal/connector.js @@ -3,7 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true }); -exports.Connection = exports.parsePort = exports.parseHost = exports.parseUrl = exports.parseScheme = exports.connect = undefined; +exports.Connection = exports.connect = undefined; + +var _promise = require('babel-runtime/core-js/promise'); + +var _promise2 = _interopRequireDefault(_promise); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); @@ -27,10 +31,6 @@ var _chNode2 = _interopRequireDefault(_chNode); var _chunking = require('./chunking'); -var _features = require('./features'); - -var _features2 = _interopRequireDefault(_features); - var _packstream = require('./packstream'); var _buf = require('./buf'); @@ -39,6 +39,16 @@ var _graphTypes = require('../graph-types'); var _error = require('./../error'); +var _chConfig = require('./ch-config'); + +var _chConfig2 = _interopRequireDefault(_chConfig); + +var _util = require('./util'); + +var _streamObserver = require('./stream-observer'); + +var _streamObserver2 = _interopRequireDefault(_streamObserver); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** @@ -59,6 +69,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * See the License for the specific language governing permissions and * limitations under the License. */ + var Channel = void 0; if (_chNode2.default.available) { Channel = _chNode2.default.channel; @@ -101,28 +112,6 @@ NODE = 0x4E, MAGIC_PREAMBLE = 0x6060B017, DEBUG = false; -var URLREGEX = new RegExp(["([^/]+//)?", // scheme -"(([^:/?#]*)", // hostname -"(?::([0-9]+))?)", // port (optional) -".*"].join("")); // everything else - -function parseScheme(url) { - var scheme = url.match(URLREGEX)[1] || ''; - return scheme.toLowerCase(); -} - -function parseUrl(url) { - return url.match(URLREGEX)[2]; -} - -function parseHost(url) { - return url.match(URLREGEX)[3]; -} - -function parsePort(url) { - return url.match(URLREGEX)[4]; -} - /** * Very rudimentary log handling, should probably be replaced by something proper at some point. * @param actor the part that sent the message, 'S' for server and 'C' for client @@ -245,6 +234,8 @@ var Connection = function () { this._isHandlingFailure = false; this._currentFailure = null; + this._state = new ConnectionState(this); + // Set to true on fatal errors, to get this out of session pool. this._isBroken = false; @@ -400,7 +391,8 @@ var Connection = function () { var _this2 = this; log("C", "INIT", clientName, token); - this._queueObserver(observer); + var initObserver = this._state.wrap(observer); + this._queueObserver(initObserver); this._packer.packStruct(INIT, [this._packable(clientName), this._packable(token)], function (err) { return _this2._handleFatalError(err); }); @@ -529,6 +521,18 @@ var Connection = function () { } } + /** + * Get promise resolved when connection initialization succeed or rejected when it fails. + * Connection is initialized using {@link initialize} function. + * @return {Promise} the result of connection initialization. + */ + + }, { + key: 'initializationCompleted', + value: function initializationCompleted() { + return this._state.initializationCompleted(); + } + /** * Synchronize - flush all queued outgoing messages and route their responses * to their respective handlers. @@ -581,38 +585,115 @@ var Connection = function () { return Connection; }(); +var ConnectionState = function () { + + /** + * @constructor + * @param {Connection} connection the connection to track state for. + */ + function ConnectionState(connection) { + (0, _classCallCheck3.default)(this, ConnectionState); + + this._connection = connection; + + this._initialized = false; + this._initializationError = null; + + this._resolvePromise = null; + this._rejectPromise = null; + } + + /** + * Wrap the given observer to track connection's initialization state. + * @param {StreamObserver} observer the observer used for INIT message. + * @return {StreamObserver} updated observer. + */ + + + (0, _createClass3.default)(ConnectionState, [{ + key: 'wrap', + value: function wrap(observer) { + var _this10 = this; + + return { + onNext: function onNext(record) { + if (observer && observer.onNext) { + observer.onNext(record); + } + }, + onError: function onError(error) { + _this10._initializationError = error; + if (_this10._rejectPromise) { + _this10._rejectPromise(error); + _this10._rejectPromise = null; + } + if (observer && observer.onError) { + observer.onError(error); + } + }, + onCompleted: function onCompleted(metaData) { + if (metaData && metaData.server) { + _this10._connection.setServerVersion(metaData.server); + } + _this10._initialized = true; + if (_this10._resolvePromise) { + _this10._resolvePromise(_this10._connection); + _this10._resolvePromise = null; + } + if (observer && observer.onCompleted) { + observer.onCompleted(metaData); + } + } + }; + } + + /** + * Get promise resolved when connection initialization succeed or rejected when it fails. + * @return {Promise} the result of connection initialization. + */ + + }, { + key: 'initializationCompleted', + value: function initializationCompleted() { + var _this11 = this; + + if (this._initialized) { + return _promise2.default.resolve(this._connection); + } else if (this._initializationError) { + return _promise2.default.reject(this._initializationError); + } else { + return new _promise2.default(function (resolve, reject) { + _this11._resolvePromise = resolve; + _this11._rejectPromise = reject; + }); + } + } + }]); + return ConnectionState; +}(); + /** * Crete new connection to the provided url. * @access private * @param {string} url - 'neo4j'-prefixed URL to Neo4j Bolt endpoint - * @param {object} config + * @param {object} config - this driver configuration + * @param {string=null} connectionErrorCode - error code for errors raised on connection errors * @return {Connection} - New connection */ function connect(url) { var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var connectionErrorCode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var Ch = config.channel || Channel; - var host = parseHost(url); - var port = parsePort(url) || 7687; + var host = (0, _util.parseHost)(url); + var port = (0, _util.parsePort)(url) || 7687; var completeUrl = host + ':' + port; + var channelConfig = new _chConfig2.default(host, port, config, connectionErrorCode); - return new Connection(new Ch({ - host: parseHost(url), - port: parsePort(url) || 7687, - // Default to using encryption if trust-on-first-use is available - encrypted: config.encrypted == null ? (0, _features2.default)("trust_all_certificates") : config.encrypted, - // Default to using TRUST_ALL_CERTIFICATES if it is available - trust: config.trust || ((0, _features2.default)("trust_all_certificates") ? "TRUST_ALL_CERTIFICATES" : "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES"), - trustedCertificates: config.trustedCertificates || [], - knownHosts: config.knownHosts - }), completeUrl); + return new Connection(new Ch(channelConfig), completeUrl); } exports.connect = connect; -exports.parseScheme = parseScheme; -exports.parseUrl = parseUrl; -exports.parseHost = parseHost; -exports.parsePort = parsePort; exports.Connection = Connection; \ No newline at end of file diff --git a/lib/v1/internal/host-name-resolvers.js b/lib/v1/internal/host-name-resolvers.js index 12b59236c..b65936698 100644 --- a/lib/v1/internal/host-name-resolvers.js +++ b/lib/v1/internal/host-name-resolvers.js @@ -29,7 +29,7 @@ var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); -var _connector = require('./connector'); +var _util = require('./util'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -98,8 +98,8 @@ var DnsHostNameResolver = exports.DnsHostNameResolver = function (_HostNameResol value: function resolve(seedRouter) { var _this3 = this; - var seedRouterHost = (0, _connector.parseHost)(seedRouter); - var seedRouterPort = (0, _connector.parsePort)(seedRouter); + var seedRouterHost = (0, _util.parseHost)(seedRouter); + var seedRouterPort = (0, _util.parsePort)(seedRouter); return new _promise2.default(function (resolve) { _this3._dns.lookup(seedRouterHost, { all: true }, function (error, addresses) { diff --git a/lib/v1/internal/rediscovery.js b/lib/v1/internal/rediscovery.js index a0bacbfb2..8178b648c 100644 --- a/lib/v1/internal/rediscovery.js +++ b/lib/v1/internal/rediscovery.js @@ -1,46 +1,74 @@ -"use strict"; +'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); -var _stringify = require("babel-runtime/core-js/json/stringify"); +var _stringify = require('babel-runtime/core-js/json/stringify'); var _stringify2 = _interopRequireDefault(_stringify); -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var _createClass2 = require("babel-runtime/helpers/createClass"); +var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); -var _getServersUtil = require("./get-servers-util"); - -var _getServersUtil2 = _interopRequireDefault(_getServersUtil); - -var _routingTable = require("./routing-table"); +var _routingTable = require('./routing-table'); var _routingTable2 = _interopRequireDefault(_routingTable); -var _error = require("../error"); +var _error = require('../error'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + var Rediscovery = function () { - function Rediscovery(getServersUtil) { + + /** + * @constructor + * @param {RoutingUtil} routingUtil the util to use. + */ + function Rediscovery(routingUtil) { (0, _classCallCheck3.default)(this, Rediscovery); - this._getServersUtil = getServersUtil || new _getServersUtil2.default(); + this._routingUtil = routingUtil; } + /** + * Try to fetch new routing table from the given router. + * @param {Session} session the session to use. + * @param {string} routerAddress the URL of the router. + * @return {Promise} promise resolved with new routing table or null when connection error happened. + */ + + (0, _createClass3.default)(Rediscovery, [{ - key: "lookupRoutingTableOnRouter", + key: 'lookupRoutingTableOnRouter', value: function lookupRoutingTableOnRouter(session, routerAddress) { var _this = this; - return this._getServersUtil.callGetServers(session, routerAddress).then(function (records) { + return this._routingUtil.callRoutingProcedure(session, routerAddress).then(function (records) { if (records === null) { // connection error happened, unable to retrieve routing table from this router, next one should be queried return null; @@ -52,12 +80,12 @@ var Rediscovery = function () { var record = records[0]; - var expirationTime = _this._getServersUtil.parseTtl(record, routerAddress); + var expirationTime = _this._routingUtil.parseTtl(record, routerAddress); - var _getServersUtil$parse = _this._getServersUtil.parseServers(record, routerAddress), - routers = _getServersUtil$parse.routers, - readers = _getServersUtil$parse.readers, - writers = _getServersUtil$parse.writers; + var _routingUtil$parseSer = _this._routingUtil.parseServers(record, routerAddress), + routers = _routingUtil$parseSer.routers, + readers = _routingUtil$parseSer.readers, + writers = _routingUtil$parseSer.writers; Rediscovery._assertNonEmpty(routers, 'routers', routerAddress); Rediscovery._assertNonEmpty(readers, 'readers', routerAddress); @@ -68,7 +96,7 @@ var Rediscovery = function () { }); } }], [{ - key: "_assertNonEmpty", + key: '_assertNonEmpty', value: function _assertNonEmpty(serversRoundRobinArray, serversName, routerAddress) { if (serversRoundRobinArray.isEmpty()) { throw (0, _error.newError)('Received no ' + serversName + ' from router ' + routerAddress, _error.PROTOCOL_ERROR); @@ -76,23 +104,6 @@ var Rediscovery = function () { } }]); return Rediscovery; -}(); /** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +}(); exports.default = Rediscovery; \ No newline at end of file diff --git a/lib/v1/internal/round-robin-array.js b/lib/v1/internal/round-robin-array.js index 35a2e85b7..feb822842 100644 --- a/lib/v1/internal/round-robin-array.js +++ b/lib/v1/internal/round-robin-array.js @@ -4,6 +4,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); +var _stringify = require('babel-runtime/core-js/json/stringify'); + +var _stringify2 = _interopRequireDefault(_stringify); + var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); @@ -85,6 +89,11 @@ var RoundRobinArray = function () { return element !== item; }); } + }, { + key: 'toString', + value: function toString() { + return (0, _stringify2.default)(this._items); + } }]); return RoundRobinArray; }(); diff --git a/lib/v1/internal/routing-table.js b/lib/v1/internal/routing-table.js index b233cb6c8..7cbe5c51b 100644 --- a/lib/v1/internal/routing-table.js +++ b/lib/v1/internal/routing-table.js @@ -1,56 +1,57 @@ -"use strict"; +'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); -var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray"); +var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); -var _from = require("babel-runtime/core-js/array/from"); +var _from = require('babel-runtime/core-js/array/from'); var _from2 = _interopRequireDefault(_from); -var _set = require("babel-runtime/core-js/set"); +var _set = require('babel-runtime/core-js/set'); var _set2 = _interopRequireDefault(_set); -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -var _createClass2 = require("babel-runtime/helpers/createClass"); +var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); -var _integer = require("../integer"); +var _integer = require('../integer'); -var _roundRobinArray = require("./round-robin-array"); +var _roundRobinArray = require('./round-robin-array'); var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); +var _driver = require('../driver'); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -/** - * Copyright (c) 2002-2017 "Neo Technology,"," - * Network Engine for Objects in Lund AB [http://neotechnology.com] - * - * This file is part of Neo4j. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -var MIN_ROUTERS = 1; +var MIN_ROUTERS = 1; /** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ var RoutingTable = function () { function RoutingTable(routers, readers, writers, expirationTime) { @@ -63,7 +64,7 @@ var RoutingTable = function () { } (0, _createClass3.default)(RoutingTable, [{ - key: "forget", + key: 'forget', value: function forget(address) { // Don't remove it from the set of routers, since that might mean we lose our ability to re-discover, // just remove it from the set of readers and writers, so that we don't use it for actual work without @@ -72,17 +73,17 @@ var RoutingTable = function () { this.writers.remove(address); } }, { - key: "forgetRouter", + key: 'forgetRouter', value: function forgetRouter(address) { this.routers.remove(address); } }, { - key: "forgetWriter", + key: 'forgetWriter', value: function forgetWriter(address) { this.writers.remove(address); } }, { - key: "serversDiff", + key: 'serversDiff', value: function serversDiff(otherRoutingTable) { var oldServers = new _set2.default(this._allServers()); var newServers = otherRoutingTable._allServers(); @@ -91,16 +92,29 @@ var RoutingTable = function () { }); return (0, _from2.default)(oldServers); } + + /** + * Check if this routing table is fresh to perform the required operation. + * @param {string} accessMode the type of operation. Allowed values are {@link READ} and {@link WRITE}. + * @return {boolean} true when this table contains servers to serve the required operation, + * false otherwise. + */ + }, { - key: "isStale", - value: function isStale() { - return this.expirationTime.lessThan(Date.now()) || this.routers.size() <= MIN_ROUTERS || this.readers.isEmpty() || this.writers.isEmpty(); + key: 'isStaleFor', + value: function isStaleFor(accessMode) { + return this.expirationTime.lessThan(Date.now()) || this.routers.size() < MIN_ROUTERS || accessMode === _driver.READ && this.readers.isEmpty() || accessMode === _driver.WRITE && this.writers.isEmpty(); } }, { - key: "_allServers", + key: '_allServers', value: function _allServers() { return [].concat((0, _toConsumableArray3.default)(this.routers.toArray()), (0, _toConsumableArray3.default)(this.readers.toArray()), (0, _toConsumableArray3.default)(this.writers.toArray())); } + }, { + key: 'toString', + value: function toString() { + return 'RoutingTable[' + ('expirationTime=' + this.expirationTime + ', ') + ('routers=' + this.routers + ', ') + ('readers=' + this.readers + ', ') + ('writers=' + this.writers + ']'); + } }]); return RoutingTable; }(); diff --git a/lib/v1/internal/routing-util.js b/lib/v1/internal/routing-util.js new file mode 100644 index 000000000..1ed1b5a2e --- /dev/null +++ b/lib/v1/internal/routing-util.js @@ -0,0 +1,163 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); + +var _defineProperty3 = _interopRequireDefault(_defineProperty2); + +var _stringify = require('babel-runtime/core-js/json/stringify'); + +var _stringify2 = _interopRequireDefault(_stringify); + +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require('babel-runtime/helpers/createClass'); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _roundRobinArray = require('./round-robin-array'); + +var _roundRobinArray2 = _interopRequireDefault(_roundRobinArray); + +var _error = require('../error'); + +var _integer = require('../integer'); + +var _integer2 = _interopRequireDefault(_integer); + +var _serverVersion = require('./server-version'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var CALL_GET_SERVERS = 'CALL dbms.cluster.routing.getServers'; +var GET_ROUTING_TABLE_PARAM = 'context'; +var CALL_GET_ROUTING_TABLE = 'CALL dbms.cluster.routing.getRoutingTable({' + GET_ROUTING_TABLE_PARAM + '})'; +var PROCEDURE_NOT_FOUND_CODE = 'Neo.ClientError.Procedure.ProcedureNotFound'; + +var RoutingUtil = function () { + function RoutingUtil(routingContext) { + (0, _classCallCheck3.default)(this, RoutingUtil); + + this._routingContext = routingContext; + } + + /** + * Invoke routing procedure using the given session. + * @param {Session} session the session to use. + * @param {string} routerAddress the URL of the router. + * @return {Promise} promise resolved with records returned by the procedure call or null if + * connection error happened. + */ + + + (0, _createClass3.default)(RoutingUtil, [{ + key: 'callRoutingProcedure', + value: function callRoutingProcedure(session, routerAddress) { + return this._callAvailableRoutingProcedure(session).then(function (result) { + session.close(); + return result.records; + }).catch(function (error) { + if (error.code === PROCEDURE_NOT_FOUND_CODE) { + // throw when getServers procedure not found because this is clearly a configuration issue + throw (0, _error.newError)('Server ' + routerAddress + ' could not perform routing. ' + 'Make sure you are connecting to a causal cluster', _error.SERVICE_UNAVAILABLE); + } + // return nothing when failed to connect because code higher in the callstack is still able to retry with a + // different session towards a different router + return null; + }); + } + }, { + key: 'parseTtl', + value: function parseTtl(record, routerAddress) { + try { + var now = (0, _integer.int)(Date.now()); + var expires = record.get('ttl').multiply(1000).add(now); + // if the server uses a really big expire time like Long.MAX_VALUE this may have overflowed + if (expires.lessThan(now)) { + return _integer2.default.MAX_VALUE; + } + return expires; + } catch (error) { + throw (0, _error.newError)('Unable to parse TTL entry from router ' + routerAddress + ' from record:\n' + (0, _stringify2.default)(record), _error.PROTOCOL_ERROR); + } + } + }, { + key: 'parseServers', + value: function parseServers(record, routerAddress) { + try { + var servers = record.get('servers'); + + var routers = new _roundRobinArray2.default(); + var readers = new _roundRobinArray2.default(); + var writers = new _roundRobinArray2.default(); + + servers.forEach(function (server) { + var role = server['role']; + var addresses = server['addresses']; + + if (role === 'ROUTE') { + routers.pushAll(addresses); + } else if (role === 'WRITE') { + writers.pushAll(addresses); + } else if (role === 'READ') { + readers.pushAll(addresses); + } else { + throw (0, _error.newError)('Unknown server role "' + role + '"', _error.PROTOCOL_ERROR); + } + }); + + return { + routers: routers, + readers: readers, + writers: writers + }; + } catch (ignore) { + throw (0, _error.newError)('Unable to parse servers entry from router ' + routerAddress + ' from record:\n' + (0, _stringify2.default)(record), _error.PROTOCOL_ERROR); + } + } + }, { + key: '_callAvailableRoutingProcedure', + value: function _callAvailableRoutingProcedure(session) { + var _this = this; + + return session._run(null, null, function (connection, streamObserver) { + var serverVersionString = connection.server.version; + var serverVersion = _serverVersion.ServerVersion.fromString(serverVersionString); + + if (serverVersion.compareTo(_serverVersion.VERSION_3_2_0) >= 0) { + var params = (0, _defineProperty3.default)({}, GET_ROUTING_TABLE_PARAM, _this._routingContext); + connection.run(CALL_GET_ROUTING_TABLE, params, streamObserver); + } else { + connection.run(CALL_GET_SERVERS, {}, streamObserver); + } + }); + } + }]); + return RoutingUtil; +}(); + +exports.default = RoutingUtil; \ No newline at end of file diff --git a/lib/v1/internal/server-version.js b/lib/v1/internal/server-version.js new file mode 100644 index 000000000..afba581a0 --- /dev/null +++ b/lib/v1/internal/server-version.js @@ -0,0 +1,123 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.VERSION_3_2_0 = exports.ServerVersion = undefined; + +var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require('babel-runtime/helpers/createClass'); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _util = require('./util'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var SERVER_VERSION_REGEX = new RegExp('^(Neo4j/)?(\\d+)\\.(\\d+)(?:\\.)?(\\d*)(\\.|-|\\+)?([0-9A-Za-z-.]*)?$'); /** + * Copyright (c) 2002-2017 "Neo Technology,"," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var ServerVersion = function () { + + /** + * @constructor + * @param {number} major the major version number. + * @param {number} minor the minor version number. + * @param {number} patch the patch version number. + */ + function ServerVersion(major, minor, patch) { + (0, _classCallCheck3.default)(this, ServerVersion); + + this.major = major; + this.minor = minor; + this.patch = patch; + } + + /** + * Parse given string to a {@link ServerVersion} object. + * @param versionStr the string to parse. + * @return {ServerVersion} version for the given string. + * @throws Error if given string can't be parsed. + */ + + + (0, _createClass3.default)(ServerVersion, [{ + key: 'compareTo', + + + /** + * Compare this version to the given one. + * @param {ServerVersion} other the version to compare with. + * @return {number} value 0 if this version is the same as the given one, value less then 0 when this version + * was released earlier than the given one and value greater then 0 when this version was released after + * than the given one. + */ + value: function compareTo(other) { + var result = compareInts(this.major, other.major); + if (result === 0) { + result = compareInts(this.minor, other.minor); + if (result === 0) { + result = compareInts(this.patch, other.patch); + } + } + return result; + } + }], [{ + key: 'fromString', + value: function fromString(versionStr) { + if (!versionStr) { + return new ServerVersion(3, 0, 0); + } + + (0, _util.assertString)(versionStr, 'Neo4j version string'); + + var version = versionStr.match(SERVER_VERSION_REGEX); + if (!version) { + throw new Error('Unparsable Neo4j version: ' + versionStr); + } + + var major = parseIntStrict(version[2]); + var minor = parseIntStrict(version[3]); + var patch = parseIntStrict(version[4] || 0); + + return new ServerVersion(major, minor, patch); + } + }]); + return ServerVersion; +}(); + +function parseIntStrict(str, name) { + var value = parseInt(str); + if (!value && value !== 0) { + throw new Error('Unparsable number ' + name + ': \'' + str + '\''); + } + return value; +} + +function compareInts(x, y) { + return x < y ? -1 : x === y ? 0 : 1; +} + +var VERSION_3_2_0 = new ServerVersion(3, 2, 0); + +exports.ServerVersion = ServerVersion; +exports.VERSION_3_2_0 = VERSION_3_2_0; \ No newline at end of file diff --git a/lib/v1/internal/util.js b/lib/v1/internal/util.js index 6a4353457..8060b45ae 100644 --- a/lib/v1/internal/util.js +++ b/lib/v1/internal/util.js @@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); -exports.ENCRYPTION_OFF = exports.ENCRYPTION_ON = exports.assertString = exports.isEmptyObjectOrNull = undefined; +exports.ENCRYPTION_OFF = exports.ENCRYPTION_ON = exports.parseRoutingContext = exports.parsePort = exports.parseHost = exports.parseUrl = exports.parseScheme = exports.assertString = exports.isEmptyObjectOrNull = undefined; var _stringify = require("babel-runtime/core-js/json/stringify"); @@ -37,8 +37,15 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var ENCRYPTION_ON = "ENCRYPTION_ON"; var ENCRYPTION_OFF = "ENCRYPTION_OFF"; +var URL_REGEX = new RegExp(['([^/]+//)?', // scheme +'(([^:/?#]*)', // hostname +'(?::([0-9]+))?)', // port (optional) +'([^?]*)?', // everything else +'(\\?(.+))?' // query +].join('')); + function isEmptyObjectOrNull(obj) { - if (isNull(obj)) { + if (obj === null) { return true; } @@ -55,10 +62,6 @@ function isEmptyObjectOrNull(obj) { return true; } -function isNull(obj) { - return obj === null; -} - function isObject(obj) { var type = typeof obj === "undefined" ? "undefined" : (0, _typeof3.default)(obj); return type === 'function' || type === 'object' && Boolean(obj); @@ -75,7 +78,64 @@ function isString(str) { return Object.prototype.toString.call(str) === '[object String]'; } +function parseScheme(url) { + assertString(url, 'URL'); + var scheme = url.match(URL_REGEX)[1] || ''; + return scheme.toLowerCase(); +} + +function parseUrl(url) { + assertString(url, 'URL'); + return url.match(URL_REGEX)[2]; +} + +function parseHost(url) { + assertString(url, 'URL'); + return url.match(URL_REGEX)[3]; +} + +function parsePort(url) { + assertString(url, 'URL'); + return url.match(URL_REGEX)[4]; +} + +function parseRoutingContext(url) { + var query = url.match(URL_REGEX)[7] || ''; + var context = {}; + if (query) { + query.split('&').forEach(function (pair) { + var keyValue = pair.split('='); + if (keyValue.length !== 2) { + throw new Error('Invalid parameters: \'' + keyValue + '\' in URL \'' + url + '\'.'); + } + + var key = trimAndVerify(keyValue[0], 'key', url); + var value = trimAndVerify(keyValue[1], 'value', url); + + if (context[key]) { + throw new Error("Duplicated query parameters with key '" + key + "' in URL '" + url + "'"); + } + + context[key] = value; + }); + } + return context; +} + +function trimAndVerify(string, name, url) { + var result = string.trim(); + if (!result) { + throw new Error("Illegal empty " + name + " in URL query '" + url + "'"); + } + return result; +} + exports.isEmptyObjectOrNull = isEmptyObjectOrNull; exports.assertString = assertString; +exports.parseScheme = parseScheme; +exports.parseUrl = parseUrl; +exports.parseHost = parseHost; +exports.parsePort = parsePort; +exports.parseRoutingContext = parseRoutingContext; exports.ENCRYPTION_ON = ENCRYPTION_ON; exports.ENCRYPTION_OFF = ENCRYPTION_OFF; \ No newline at end of file diff --git a/lib/v1/routing-driver.js b/lib/v1/routing-driver.js index d0f21c74a..0366302a4 100644 --- a/lib/v1/routing-driver.js +++ b/lib/v1/routing-driver.js @@ -61,17 +61,21 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var RoutingDriver = function (_Driver) { (0, _inherits3.default)(RoutingDriver, _Driver); - function RoutingDriver(url, userAgent) { - var token = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - var config = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + function RoutingDriver(url, routingContext, userAgent) { + var token = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + var config = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; (0, _classCallCheck3.default)(this, RoutingDriver); - return (0, _possibleConstructorReturn3.default)(this, (RoutingDriver.__proto__ || (0, _getPrototypeOf2.default)(RoutingDriver)).call(this, url, userAgent, token, RoutingDriver._validateConfig(config))); + + var _this = (0, _possibleConstructorReturn3.default)(this, (RoutingDriver.__proto__ || (0, _getPrototypeOf2.default)(RoutingDriver)).call(this, url, userAgent, token, RoutingDriver._validateConfig(config))); + + _this._routingContext = routingContext; + return _this; } (0, _createClass3.default)(RoutingDriver, [{ key: '_createConnectionProvider', value: function _createConnectionProvider(address, connectionPool, driverOnErrorCallback) { - return new _connectionProviders.LoadBalancer(address, connectionPool, driverOnErrorCallback); + return new _connectionProviders.LoadBalancer(address, this._routingContext, connectionPool, driverOnErrorCallback); } }, { key: '_createSession', @@ -79,13 +83,10 @@ var RoutingDriver = function (_Driver) { var _this2 = this; return new RoutingSession(mode, connectionProvider, bookmark, config, function (error, conn) { - if (error.code === _error.SERVICE_UNAVAILABLE || error.code === _error.SESSION_EXPIRED) { - // connection is undefined if error happened before connection was acquired - if (conn) { - _this2._connectionProvider.forget(conn.url); - } + if (error.code === _error.SESSION_EXPIRED) { + _this2._forgetConnection(conn); return error; - } else if (error.code === 'Neo.ClientError.Cluster.NotALeader') { + } else if (RoutingDriver._isFailureToWrite(error)) { var url = 'UNKNOWN'; // connection is undefined if error happened before connection was acquired if (conn) { @@ -98,6 +99,21 @@ var RoutingDriver = function (_Driver) { } }); } + }, { + key: '_connectionErrorCode', + value: function _connectionErrorCode() { + // connection errors mean SERVICE_UNAVAILABLE for direct driver but for routing driver they should only + // result in SESSION_EXPIRED because there might still exist other servers capable of serving the request + return _error.SESSION_EXPIRED; + } + }, { + key: '_forgetConnection', + value: function _forgetConnection(connection) { + // connection is undefined if error happened before connection was acquired + if (connection) { + this._connectionProvider.forget(connection.url); + } + } }], [{ key: '_validateConfig', value: function _validateConfig(config) { @@ -106,6 +122,11 @@ var RoutingDriver = function (_Driver) { } return config; } + }, { + key: '_isFailureToWrite', + value: function _isFailureToWrite(error) { + return error.code === 'Neo.ClientError.Cluster.NotALeader' || error.code === 'Neo.ClientError.General.ForbiddenOnReadOnlyDatabase'; + } }]); return RoutingDriver; }(_driver.Driver); diff --git a/lib/v1/session.js b/lib/v1/session.js index af2bc3b6b..2e1e56b44 100644 --- a/lib/v1/session.js +++ b/lib/v1/session.js @@ -130,22 +130,29 @@ var Session = function () { parameters = statement.parameters || {}; statement = statement.text; } - (0, _util.assertString)(statement, "Cypher statement"); + (0, _util.assertString)(statement, 'Cypher statement'); + return this._run(statement, parameters, function (connection, streamObserver) { + return connection.run(statement, parameters, streamObserver); + }); + } + }, { + key: '_run', + value: function _run(statement, parameters, statementRunner) { var streamObserver = new _RunObserver(this._onRunFailure()); var connectionHolder = this._connectionHolderWithMode(this._mode); if (!this._hasTx) { connectionHolder.initializeConnection(); connectionHolder.getConnection().then(function (connection) { streamObserver.resolveConnection(connection); - connection.run(statement, parameters, streamObserver); + statementRunner(connection, streamObserver); connection.pullAll(streamObserver); connection.sync(); }).catch(function (error) { return streamObserver.onError(error); }); } else { - streamObserver.onError((0, _error.newError)("Statements cannot be run directly on a " + "session with an open transaction; either run from within the " + "transaction or use a different session.")); + streamObserver.onError((0, _error.newError)('Statements cannot be run directly on a ' + 'session with an open transaction; either run from within the ' + 'transaction or use a different session.')); } return new _result2.default(streamObserver, statement, parameters, function () { return streamObserver.meta();